diff --git a/packages/base/src/util/createInstanceChecker.ts b/packages/base/src/util/createInstanceChecker.ts new file mode 100644 index 000000000000..9a0b52fe67de --- /dev/null +++ b/packages/base/src/util/createInstanceChecker.ts @@ -0,0 +1,7 @@ +function createChecker(prop: P) { + return (object: any): object is T => { + return object !== undefined && prop in object && object[prop] === true; + }; +} + +export default createChecker; diff --git a/packages/fiori/src/SideNavigation.ts b/packages/fiori/src/SideNavigation.ts index 52b7d34989eb..0a6142fde41b 100644 --- a/packages/fiori/src/SideNavigation.ts +++ b/packages/fiori/src/SideNavigation.ts @@ -14,11 +14,13 @@ import type { ITabbable } from "@ui5/webcomponents-base/dist/delegate/ItemNaviga import NavigationMode from "@ui5/webcomponents-base/dist/types/NavigationMode.js"; import type SideNavigationItemBase from "./SideNavigationItemBase.js"; -import { isInstanceOfSideNavigationSelectableItemBase } from "./SideNavigationSelectableItemBase.js"; -import { isInstanceOfSideNavigationItemBase } from "./SideNavigationItemBase.js"; +import { + isInstanceOfSideNavigationSelectableItemBase, + isInstanceOfSideNavigationItemBase, + isInstanceOfSideNavigationItem, + isInstanceOfSideNavigationGroup, +} from "./utils/InstanceChecks.js"; import type SideNavigationSelectableItemBase from "./SideNavigationSelectableItemBase.js"; -import { isInstanceOfSideNavigationItem } from "./SideNavigationItem.js"; -import { isInstanceOfSideNavigationGroup } from "./SideNavigationGroup.js"; import type SideNavigationItem from "./SideNavigationItem.js"; import type SideNavigationSubItem from "./SideNavigationSubItem.js"; import type SideNavigationGroup from "./SideNavigationGroup.js"; diff --git a/packages/fiori/src/SideNavigationGroup.ts b/packages/fiori/src/SideNavigationGroup.ts index fc52a859e511..1005e6c189a2 100644 --- a/packages/fiori/src/SideNavigationGroup.ts +++ b/packages/fiori/src/SideNavigationGroup.ts @@ -196,9 +196,4 @@ class SideNavigationGroup extends SideNavigationItemBase { SideNavigationGroup.define(); -const isInstanceOfSideNavigationGroup = (object: any): object is SideNavigationGroup => { - return "isSideNavigationGroup" in object; -}; - export default SideNavigationGroup; -export { isInstanceOfSideNavigationGroup }; diff --git a/packages/fiori/src/SideNavigationItem.ts b/packages/fiori/src/SideNavigationItem.ts index ac1237316d19..ddb8fcb7118c 100644 --- a/packages/fiori/src/SideNavigationItem.ts +++ b/packages/fiori/src/SideNavigationItem.ts @@ -337,9 +337,4 @@ class SideNavigationItem extends SideNavigationSelectableItemBase { SideNavigationItem.define(); -const isInstanceOfSideNavigationItem = (object: any): object is SideNavigationItem => { - return "isSideNavigationItem" in object; -}; - export default SideNavigationItem; -export { isInstanceOfSideNavigationItem }; diff --git a/packages/fiori/src/SideNavigationItemBase.ts b/packages/fiori/src/SideNavigationItemBase.ts index c0c925e2c533..25a27065db52 100644 --- a/packages/fiori/src/SideNavigationItemBase.ts +++ b/packages/fiori/src/SideNavigationItemBase.ts @@ -154,12 +154,7 @@ class SideNavigationItemBase extends UI5Element implements ITabbable { } } -const isInstanceOfSideNavigationItemBase = (object: any): object is SideNavigationItemBase => { - return "isSideNavigationItemBase" in object; -}; - export default SideNavigationItemBase; export type { SideNavigationItemClickEventDetail, }; -export { isInstanceOfSideNavigationItemBase }; diff --git a/packages/fiori/src/SideNavigationSelectableItemBase.ts b/packages/fiori/src/SideNavigationSelectableItemBase.ts index a7336fd98761..c582cc4b9038 100644 --- a/packages/fiori/src/SideNavigationSelectableItemBase.ts +++ b/packages/fiori/src/SideNavigationSelectableItemBase.ts @@ -334,14 +334,7 @@ class SideNavigationSelectableItemBase extends SideNavigationItemBase { } } -const isInstanceOfSideNavigationSelectableItemBase = (object: any): object is SideNavigationSelectableItemBase => { - return "isSideNavigationSelectableItemBase" in object; -}; - export default SideNavigationSelectableItemBase; -export { - isInstanceOfSideNavigationSelectableItemBase, -}; export type { SideNavigationItemAccessibilityAttributes, }; diff --git a/packages/fiori/src/UserMenu.ts b/packages/fiori/src/UserMenu.ts index eff4d52c6121..b71b35937ff2 100644 --- a/packages/fiori/src/UserMenu.ts +++ b/packages/fiori/src/UserMenu.ts @@ -13,7 +13,7 @@ import type ResponsivePopover from "@ui5/webcomponents/dist/ResponsivePopover.js import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js"; import type { PopupScrollEventDetail } from "@ui5/webcomponents/dist/Popup.js"; import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js"; -import { isInstanceOfMenuItem } from "@ui5/webcomponents/dist/MenuItem.js"; +import { isInstanceOfMenuItem } from "@ui5/webcomponents/dist/utils/InstanceChecks.js"; import { isPhone } from "@ui5/webcomponents-base/dist/Device.js"; import type UserMenuAccount from "./UserMenuAccount.js"; import type UserMenuItem from "./UserMenuItem.js"; diff --git a/packages/fiori/src/UserMenuItem.ts b/packages/fiori/src/UserMenuItem.ts index aa18ecced610..7478cb92739c 100644 --- a/packages/fiori/src/UserMenuItem.ts +++ b/packages/fiori/src/UserMenuItem.ts @@ -1,6 +1,6 @@ import { customElement, slot } from "@ui5/webcomponents-base/dist/decorators.js"; -import MenuItem, { isInstanceOfMenuItem } from "@ui5/webcomponents/dist/MenuItem.js"; - +import MenuItem from "@ui5/webcomponents/dist/MenuItem.js"; +import { isInstanceOfMenuItem } from "@ui5/webcomponents/dist/utils/InstanceChecks.js"; import UserMenuItemTemplate from "./UserMenuItemTemplate.js"; // Styles diff --git a/packages/fiori/src/UserMenuItemGroup.ts b/packages/fiori/src/UserMenuItemGroup.ts index f76deb857028..bcfb34e90a69 100644 --- a/packages/fiori/src/UserMenuItemGroup.ts +++ b/packages/fiori/src/UserMenuItemGroup.ts @@ -39,14 +39,6 @@ import UserMenuItemGroupTemplate from "./UserMenuItemGroupTemplate.js"; class UserMenuItemGroup extends MenuItemGroup { } -const isInstanceOfUserMenuItemGroup = (object: any): object is UserMenuItemGroup => { - return "isGroup" in object; -}; - UserMenuItemGroup.define(); export default UserMenuItemGroup; - -export { - isInstanceOfUserMenuItemGroup, -}; diff --git a/packages/fiori/src/utils/InstanceChecks.ts b/packages/fiori/src/utils/InstanceChecks.ts new file mode 100644 index 000000000000..b0baf5aa6504 --- /dev/null +++ b/packages/fiori/src/utils/InstanceChecks.ts @@ -0,0 +1,12 @@ +import createInstanceChecker from "@ui5/webcomponents-base/dist/util/createInstanceChecker.js"; +import type SideNavigationGroup from "../SideNavigationGroup.js"; +import type SideNavigationItem from "../SideNavigationItem.js"; +import type SideNavigationItemBase from "../SideNavigationItemBase.js"; +import type SideNavigationSelectableItemBase from "../SideNavigationSelectableItemBase.js"; +import type UserMenuItemGroup from "../UserMenuItemGroup.js"; + +export const isInstanceOfSideNavigationGroup = createInstanceChecker("isSideNavigationGroup"); +export const isInstanceOfSideNavigationItem = createInstanceChecker("isSideNavigationItem"); +export const isInstanceOfSideNavigationItemBase = createInstanceChecker("isSideNavigationItemBase"); +export const isInstanceOfSideNavigationSelectableItemBase = createInstanceChecker("isSideNavigationSelectableItemBase"); +export const isInstanceOfUserMenuItemGroup = createInstanceChecker("isGroup"); diff --git a/packages/main/cypress/specs/TableUtils.cy.tsx b/packages/main/cypress/specs/TableUtils.cy.tsx index 8963d6b348b8..f33bb8894d4f 100644 --- a/packages/main/cypress/specs/TableUtils.cy.tsx +++ b/packages/main/cypress/specs/TableUtils.cy.tsx @@ -1,4 +1,5 @@ -import { isInstanceOfTable, isValidColumnWidth } from "../../src/TableUtils.js"; +import { isValidColumnWidth } from "../../src/TableUtils.js"; +import { isInstanceOfTable } from "../../src/utils/InstanceChecks.js"; import Table from "../../src/Table.js"; import TableRow from "../../src/TableRow.js"; diff --git a/packages/main/src/ComboBox.ts b/packages/main/src/ComboBox.ts index 4654984c71d1..1956f23dc807 100644 --- a/packages/main/src/ComboBox.ts +++ b/packages/main/src/ComboBox.ts @@ -85,7 +85,7 @@ import type { ListItemClickEventDetail } from "./List.js"; // eslint-disable-next-line import "./ComboBoxItemGroup.js"; // eslint-disable-next-line -import { isInstanceOfComboBoxItemGroup } from "./ComboBoxItemGroup.js"; +import { isInstanceOfComboBoxItemGroup } from "./utils/InstanceChecks.js"; import type ComboBoxFilter from "./types/ComboBoxFilter.js"; import type Input from "./Input.js"; import type { InputEventDetail } from "./Input.js"; diff --git a/packages/main/src/ComboBoxItemGroup.ts b/packages/main/src/ComboBoxItemGroup.ts index e26342dd0b54..8d895e39485e 100644 --- a/packages/main/src/ComboBoxItemGroup.ts +++ b/packages/main/src/ComboBoxItemGroup.ts @@ -34,9 +34,8 @@ class ComboBoxItemGroup extends ListItemGroup implements IComboBoxItem { }) items!: Array; - get isGroupItem(): boolean { - return true; - } + // for instance checking + readonly isGroupItem = true; get _isVisible() { return this.items.some(item => item._isVisible); @@ -45,9 +44,4 @@ class ComboBoxItemGroup extends ListItemGroup implements IComboBoxItem { ComboBoxItemGroup.define(); -const isInstanceOfComboBoxItemGroup = (object: any): object is ComboBoxItemGroup => { - return "isGroupItem" in object; -}; - -export { isInstanceOfComboBoxItemGroup }; export default ComboBoxItemGroup; diff --git a/packages/main/src/List.ts b/packages/main/src/List.ts index 887d557cd9a2..57438e4b3d6a 100644 --- a/packages/main/src/List.ts +++ b/packages/main/src/List.ts @@ -71,7 +71,7 @@ import { } from "./generated/i18n/i18n-defaults.js"; import type CheckBox from "./CheckBox.js"; import type RadioButton from "./RadioButton.js"; -import { isInstanceOfListItemGroup } from "./ListItemGroup.js"; +import { isInstanceOfListItemGroup } from "./utils/InstanceChecks.js"; import type ListItemGroup from "./ListItemGroup.js"; const INFINITE_SCROLL_DEBOUNCE_RATE = 250; // ms diff --git a/packages/main/src/ListItemGroup.ts b/packages/main/src/ListItemGroup.ts index 71d649c2edc4..b5fdbd0b7eeb 100644 --- a/packages/main/src/ListItemGroup.ts +++ b/packages/main/src/ListItemGroup.ts @@ -213,10 +213,5 @@ class ListItemGroup extends UI5Element { ListItemGroup.define(); -const isInstanceOfListItemGroup = (object: any): object is ListItemGroup => { - return "isListItemGroup" in object; -}; - export default ListItemGroup; -export { isInstanceOfListItemGroup }; export type { ListItemGroupMoveEventDetail }; diff --git a/packages/main/src/Menu.ts b/packages/main/src/Menu.ts index fdb2198e715b..fe2eab063c02 100644 --- a/packages/main/src/Menu.ts +++ b/packages/main/src/Menu.ts @@ -25,9 +25,7 @@ import type List from "./List.js"; import type ResponsivePopover from "./ResponsivePopover.js"; import type MenuItem from "./MenuItem.js"; // The import below should be kept, as MenuItem is part of the Menu component. -import { isInstanceOfMenuItem } from "./MenuItem.js"; -import { isInstanceOfMenuItemGroup } from "./MenuItemGroup.js"; -import { isInstanceOfMenuSeparator } from "./MenuSeparator.js"; +import { isInstanceOfMenuItem, isInstanceOfMenuItemGroup, isInstanceOfMenuSeparator } from "./utils/InstanceChecks.js"; import type PopoverHorizontalAlign from "./types/PopoverHorizontalAlign.js"; import type PopoverPlacement from "./types/PopoverPlacement.js"; import type { diff --git a/packages/main/src/MenuItem.ts b/packages/main/src/MenuItem.ts index f9db130beec8..d13b3f475aa2 100644 --- a/packages/main/src/MenuItem.ts +++ b/packages/main/src/MenuItem.ts @@ -30,8 +30,7 @@ import type { ListItemAccessibilityAttributes } from "./ListItem.js"; import type List from "./List.js"; import ListItem from "./ListItem.js"; import type ResponsivePopover from "./ResponsivePopover.js"; -import { isInstanceOfMenuSeparator } from "./MenuSeparator.js"; -import { isInstanceOfMenuItemGroup } from "./MenuItemGroup.js"; +import { isInstanceOfMenuSeparator, isInstanceOfMenuItem, isInstanceOfMenuItemGroup } from "./utils/InstanceChecks.js"; import MenuItemTemplate from "./MenuItemTemplate.js"; import { MENU_BACK_BUTTON_ARIA_LABEL, @@ -663,10 +662,6 @@ class MenuItem extends ListItem implements IMenuItem { MenuItem.define(); -const isInstanceOfMenuItem = (object: any): object is MenuItem => { - return "isMenuItem" in object; -}; - export default MenuItem; export type { @@ -674,7 +669,3 @@ export type { MenuBeforeOpenEventDetail, MenuItemAccessibilityAttributes, }; - -export { - isInstanceOfMenuItem, -}; diff --git a/packages/main/src/MenuItemGroup.ts b/packages/main/src/MenuItemGroup.ts index ae9fc3445640..3a7f67fb2477 100644 --- a/packages/main/src/MenuItemGroup.ts +++ b/packages/main/src/MenuItemGroup.ts @@ -6,7 +6,7 @@ import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js"; import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js"; import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js"; import type MenuItem from "./MenuItem.js"; -import { isInstanceOfMenuItem } from "./MenuItem.js"; +import { isInstanceOfMenuItem } from "./utils/InstanceChecks.js"; import MenuItemGroupTemplate from "./MenuItemGroupTemplate.js"; import MenuItemGroupCheckMode from "./types/MenuItemGroupCheckMode.js"; import type { IMenuItem } from "./Menu.js"; @@ -148,14 +148,6 @@ class MenuItemGroup extends UI5Element implements IMenuItem { } } -const isInstanceOfMenuItemGroup = (object: any): object is MenuItemGroup => { - return "isGroup" in object; -}; - MenuItemGroup.define(); export default MenuItemGroup; - -export { - isInstanceOfMenuItemGroup, -}; diff --git a/packages/main/src/MenuSeparator.ts b/packages/main/src/MenuSeparator.ts index 43b5a74536d3..bdfc39c0384c 100644 --- a/packages/main/src/MenuSeparator.ts +++ b/packages/main/src/MenuSeparator.ts @@ -51,14 +51,6 @@ class MenuSeparator extends ListItemBase implements IMenuItem { } } -const isInstanceOfMenuSeparator = (object: any): object is MenuSeparator => { - return "isSeparator" in object; -}; - MenuSeparator.define(); export default MenuSeparator; - -export { - isInstanceOfMenuSeparator, -}; diff --git a/packages/main/src/MultiComboBox.ts b/packages/main/src/MultiComboBox.ts index adfd142ed14a..3c3fab78296f 100644 --- a/packages/main/src/MultiComboBox.ts +++ b/packages/main/src/MultiComboBox.ts @@ -58,8 +58,9 @@ import arraysAreEqual from "@ui5/webcomponents-base/dist/util/arraysAreEqual.js" import { getScopedVarName } from "@ui5/webcomponents-base/dist/CustomElementsScope.js"; import { submitForm } from "@ui5/webcomponents-base/dist/features/InputElementsFormSupport.js"; import type { IFormInputElement } from "@ui5/webcomponents-base/dist/features/InputElementsFormSupport.js"; -import MultiComboBoxItem, { isInstanceOfMultiComboBoxItem } from "./MultiComboBoxItem.js"; -import MultiComboBoxItemGroup, { isInstanceOfMultiComboBoxItemGroup } from "./MultiComboBoxItemGroup.js"; +import MultiComboBoxItem from "./MultiComboBoxItem.js"; +import MultiComboBoxItemGroup from "./MultiComboBoxItemGroup.js"; +import { isInstanceOfMultiComboBoxItem, isInstanceOfMultiComboBoxItemGroup } from "./utils/InstanceChecks.js"; import ListItemGroup from "./ListItemGroup.js"; import Tokenizer, { getTokensCountText } from "./Tokenizer.js"; import type { TokenizerTokenDeleteEventDetail } from "./Tokenizer.js"; diff --git a/packages/main/src/MultiComboBoxItem.ts b/packages/main/src/MultiComboBoxItem.ts index ba9bf46a33f1..6f040032a1f2 100644 --- a/packages/main/src/MultiComboBoxItem.ts +++ b/packages/main/src/MultiComboBoxItem.ts @@ -83,11 +83,6 @@ class MultiComboBoxItem extends ComboBoxItem implements IMultiComboBoxItem { } } -const isInstanceOfMultiComboBoxItem = (object: any): object is MultiComboBoxItem => { - return "isMultiComboBoxItem" in object; -}; - MultiComboBoxItem.define(); export default MultiComboBoxItem; -export { isInstanceOfMultiComboBoxItem }; diff --git a/packages/main/src/MultiComboBoxItemGroup.ts b/packages/main/src/MultiComboBoxItemGroup.ts index 1ead17421993..dacbaef7f123 100644 --- a/packages/main/src/MultiComboBoxItemGroup.ts +++ b/packages/main/src/MultiComboBoxItemGroup.ts @@ -38,9 +38,7 @@ class MultiComboBoxItemGroup extends ComboBoxItemGroup implements IMultiComboBox * Used to avoid tag name checks * @protected */ - get isGroupItem() { - return true; - } + readonly isGroupItem = true; get selected() { return false; @@ -57,10 +55,4 @@ class MultiComboBoxItemGroup extends ComboBoxItemGroup implements IMultiComboBox MultiComboBoxItemGroup.define(); -const isInstanceOfMultiComboBoxItemGroup = (object: any): object is MultiComboBoxItemGroup => { - return "isGroupItem" in object; -}; - export default MultiComboBoxItemGroup; - -export { isInstanceOfMultiComboBoxItemGroup }; diff --git a/packages/main/src/Popover.ts b/packages/main/src/Popover.ts index a5412410cc91..29905b1f2551 100644 --- a/packages/main/src/Popover.ts +++ b/packages/main/src/Popover.ts @@ -241,6 +241,9 @@ class Popover extends Popup { this._popoverResize = new PopoverResize(this); } + // for instance checking + readonly isPopover = true; + /** * Defines the ID or DOM Reference of the element at which the popover is shown. * When using this attribute in a declarative way, you must only use the `id` (as a string) of the element at which you want to show the popover. @@ -971,12 +974,8 @@ class Popover extends Popup { } } -const instanceOfPopover = (object: any): object is Popover => { - return "opener" in object; -}; - Popover.define(); export default Popover; -export { instanceOfPopover, PopoverActualPlacement, PopoverActualHorizontalAlign }; +export { PopoverActualPlacement, PopoverActualHorizontalAlign }; diff --git a/packages/main/src/Popup.ts b/packages/main/src/Popup.ts index fda670bdff31..7e05f1aa32c8 100644 --- a/packages/main/src/Popup.ts +++ b/packages/main/src/Popup.ts @@ -707,6 +707,9 @@ abstract class Popup extends UI5Element { }, }; } + + // for instance checks + readonly isPopup = true; } export default Popup; diff --git a/packages/main/src/TableRowBase.ts b/packages/main/src/TableRowBase.ts index 0798cdad6dfd..53eb0829b604 100644 --- a/packages/main/src/TableRowBase.ts +++ b/packages/main/src/TableRowBase.ts @@ -1,7 +1,8 @@ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js"; import { customElement, property, i18n } from "@ui5/webcomponents-base/dist/decorators.js"; import { isEnter, isSpace } from "@ui5/webcomponents-base/dist/Keys.js"; -import { isInstanceOfTable, toggleAttribute } from "./TableUtils.js"; +import { toggleAttribute } from "./TableUtils.js"; +import { isInstanceOfTable } from "./utils/InstanceChecks.js"; import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js"; import TableRowBaseCss from "./generated/themes/TableRowBase.css.js"; import query from "@ui5/webcomponents-base/dist/decorators/query.js"; diff --git a/packages/main/src/TableSelectionBase.ts b/packages/main/src/TableSelectionBase.ts index 7578210a1c2d..92a9f21f3266 100644 --- a/packages/main/src/TableSelectionBase.ts +++ b/packages/main/src/TableSelectionBase.ts @@ -1,6 +1,6 @@ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js"; import { property, eventStrict } from "@ui5/webcomponents-base/dist/decorators.js"; -import { isInstanceOfTable } from "./TableUtils.js"; +import { isInstanceOfTable } from "./utils/InstanceChecks.js"; import type Table from "./Table.js"; import type TableRowBase from "./TableRowBase.js"; import type TableRow from "./TableRow.js"; diff --git a/packages/main/src/TableUtils.ts b/packages/main/src/TableUtils.ts index a6386d39651f..e59315f97b1f 100644 --- a/packages/main/src/TableUtils.ts +++ b/packages/main/src/TableUtils.ts @@ -1,10 +1,5 @@ -import type Table from "./Table.js"; import type TableRow from "./TableRow.js"; -const isInstanceOfTable = (obj: any): obj is Table => { - return !!obj && "isTable" in obj && !!obj.isTable; -}; - const isSelectionCell = (e: Event) => { return e.composedPath().some((el: EventTarget) => (el as HTMLElement).hasAttribute?.("data-ui5-table-selection-cell")); }; @@ -112,7 +107,6 @@ const isValidColumnWidth = (width: string | undefined): width is string => { }; export { - isInstanceOfTable, isSelectionCell, isHeaderSelectionCell, findRowInPath, diff --git a/packages/main/src/Tree.ts b/packages/main/src/Tree.ts index d4ece8b3ac05..7522a5790b70 100644 --- a/packages/main/src/Tree.ts +++ b/packages/main/src/Tree.ts @@ -6,6 +6,7 @@ import DragAndDropHandler from "./delegate/DragAndDropHandler.js"; import MovePlacement from "@ui5/webcomponents-base/dist/types/MovePlacement.js"; import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js"; import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js"; +import createChecker from "@ui5/webcomponents-base/dist/util/createInstanceChecker.js"; import type DropIndicator from "./DropIndicator.js"; import "./TreeItem.js"; import type TreeItemBase from "./TreeItemBase.js"; @@ -524,9 +525,7 @@ class Tree extends UI5Element { return placements; } - _isInstanceOfTreeItemBase(object: any): object is TreeItemBase { - return "isTreeItem" in object; - } + _isInstanceOfTreeItemBase = createChecker("isTreeItem"); } const walkTree = (el: Tree | TreeItemBase, level: number, callback: WalkCallback) => { diff --git a/packages/main/src/popup-utils/PopoverRegistry.ts b/packages/main/src/popup-utils/PopoverRegistry.ts index d7b71794f74b..2051802e0be0 100644 --- a/packages/main/src/popup-utils/PopoverRegistry.ts +++ b/packages/main/src/popup-utils/PopoverRegistry.ts @@ -2,7 +2,7 @@ import type { Interval } from "@ui5/webcomponents-base/dist/types.js"; import getActiveElement from "@ui5/webcomponents-base/dist/util/getActiveElement.js"; import getParentElement from "@ui5/webcomponents-base/dist/util/getParentElement.js"; import type Popover from "../Popover.js"; -import { instanceOfPopover } from "../Popover.js"; +import { isInstanceOfPopover } from "../utils/InstanceChecks.js"; import { getOpenedPopups, addOpenedPopup, removeOpenedPopup } from "./OpenedPopupsRegistry.js"; type RegisteredPopover = { @@ -84,7 +84,7 @@ const clickHandler = (event: MouseEvent) => { return; } - const isTopPopupPopover = instanceOfPopover(openedPopups[openedPopups.length - 1].instance); + const isTopPopupPopover = isInstanceOfPopover(openedPopups[openedPopups.length - 1].instance); if (!isTopPopupPopover) { return; @@ -94,7 +94,7 @@ const clickHandler = (event: MouseEvent) => { for (let i = openedPopups.length - 1; i !== -1; i--) { const popup = openedPopups[i].instance; - if (!instanceOfPopover(popup)) { + if (!isInstanceOfPopover(popup)) { return; } diff --git a/packages/main/src/utils/InstanceChecks.ts b/packages/main/src/utils/InstanceChecks.ts new file mode 100644 index 000000000000..7ee11e12350b --- /dev/null +++ b/packages/main/src/utils/InstanceChecks.ts @@ -0,0 +1,22 @@ +import createInstanceChecker from "@ui5/webcomponents-base/dist/util/createInstanceChecker.js"; +import type ComboBoxItemGroup from "../ComboBoxItemGroup.js"; +import type ListItemGroup from "../ListItemGroup.js"; +import type MenuItem from "../MenuItem.js"; +import type MenuItemGroup from "../MenuItemGroup.js"; +import type MenuSeparator from "../MenuSeparator.js"; +import type MultiComboBoxItem from "../MultiComboBoxItem.js"; +import type MultiComboBoxItemGroup from "../MultiComboBoxItemGroup.js"; +import type Popover from "../Popover.js"; +import type Popup from "../Popup.js"; +import type Table from "../Table.js"; + +export const isInstanceOfComboBoxItemGroup = createInstanceChecker("isGroupItem"); +export const isInstanceOfPopover = createInstanceChecker("isPopover"); +export const isInstanceOfMultiComboBoxItemGroup = createInstanceChecker("isGroupItem"); +export const isInstanceOfMultiComboBoxItem = createInstanceChecker("isMultiComboBoxItem"); +export const isInstanceOfMenuSeparator = createInstanceChecker("isSeparator"); +export const isInstanceOfMenuItemGroup = createInstanceChecker("isGroup"); +export const isInstanceOfMenuItem = createInstanceChecker("isMenuItem"); +export const isInstanceOfListItemGroup = createInstanceChecker("isListItemGroup"); +export const isInstanceOfPopup = createInstanceChecker("isPopup"); +export const isInstanceOfTable = createInstanceChecker("isTable");