Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions packages/base/src/UI5Element.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ import type I18nBundle from "./i18nBundle.js";
import { fetchCldr } from "./asset-registries/LocaleData.js";
import getLocale from "./locale/getLocale.js";
import { getLanguageChangePending } from "./config/Language.js";
import createInstanceChecker from "./util/createInstanceChecker.js";

const DEV_MODE = true;
let autoId = 0;
Expand Down Expand Up @@ -1412,9 +1413,7 @@ abstract class UI5Element extends HTMLElement {
/**
* Always use duck-typing to cover all runtimes on the page.
*/
const instanceOfUI5Element = (object: any): object is UI5Element => {
return "isUI5Element" in object;
};
const instanceOfUI5Element = createInstanceChecker<UI5Element>("isUI5Element");

export default UI5Element;
export {
Expand Down
7 changes: 7 additions & 0 deletions packages/base/src/util/createInstanceChecker.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
function createChecker<T, P extends keyof T = keyof T>(prop: P) {
return (object: any): object is T => {
return object !== undefined && prop in object && object[prop] === true;
};
}

export default createChecker;
7 changes: 2 additions & 5 deletions packages/fiori/src/SideNavigationGroup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import {

// Styles
import SideNavigationGroupCss from "./generated/themes/SideNavigationGroup.css.js";
import createInstanceChecker from "@ui5/webcomponents-base/dist/util/createInstanceChecker.js";

/**
* @class
Expand Down Expand Up @@ -196,9 +197,5 @@ class SideNavigationGroup extends SideNavigationItemBase {

SideNavigationGroup.define();

const isInstanceOfSideNavigationGroup = (object: any): object is SideNavigationGroup => {
return "isSideNavigationGroup" in object;
};

export const isInstanceOfSideNavigationGroup = createInstanceChecker<SideNavigationGroup>("isSideNavigationGroup");
export default SideNavigationGroup;
export { isInstanceOfSideNavigationGroup };
7 changes: 2 additions & 5 deletions packages/fiori/src/SideNavigationItem.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import SideNavigationItemTemplate from "./SideNavigationItemTemplate.js";

// Styles
import SideNavigationItemCss from "./generated/themes/SideNavigationItem.css.js";
import createInstanceChecker from "@ui5/webcomponents-base/dist/util/createInstanceChecker.js";

/**
* @class
Expand Down Expand Up @@ -337,9 +338,5 @@ class SideNavigationItem extends SideNavigationSelectableItemBase {

SideNavigationItem.define();

const isInstanceOfSideNavigationItem = (object: any): object is SideNavigationItem => {
return "isSideNavigationItem" in object;
};

export default SideNavigationItem;
export { isInstanceOfSideNavigationItem };
export const isInstanceOfSideNavigationItem = createInstanceChecker<SideNavigationItem>("isSideNavigationItem");
7 changes: 2 additions & 5 deletions packages/fiori/src/SideNavigationItemBase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
} from "@ui5/webcomponents-base/dist/Device.js";
import type { ITabbable } from "@ui5/webcomponents-base/dist/delegate/ItemNavigation.js";
import type SideNavigation from "./SideNavigation.js";
import createInstanceChecker from "@ui5/webcomponents-base/dist/util/createInstanceChecker.js";

type SideNavigationItemClickEventDetail = {
altKey: boolean;
Expand Down Expand Up @@ -154,12 +155,8 @@ 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 };
export const isInstanceOfSideNavigationItemBase = createInstanceChecker<SideNavigationItemBase>("isSideNavigationItemBase");
9 changes: 2 additions & 7 deletions packages/fiori/src/SideNavigationSelectableItemBase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import SideNavigationItemBase from "./SideNavigationItemBase.js";
import type SideNavigationItemDesign from "./types/SideNavigationItemDesign.js";
import type { AccessibilityAttributes } from "@ui5/webcomponents-base/dist/types.js";
import type { SideNavigationItemClickEventDetail } from "./SideNavigationItemBase.js";
import createInstanceChecker from "@ui5/webcomponents-base/dist/util/createInstanceChecker.js";

type SideNavigationItemAccessibilityAttributes = Pick<AccessibilityAttributes, "hasPopup">;

Expand Down Expand Up @@ -334,14 +335,8 @@ class SideNavigationSelectableItemBase extends SideNavigationItemBase {
}
}

const isInstanceOfSideNavigationSelectableItemBase = (object: any): object is SideNavigationSelectableItemBase => {
return "isSideNavigationSelectableItemBase" in object;
};

export default SideNavigationSelectableItemBase;
export {
isInstanceOfSideNavigationSelectableItemBase,
};
export const isInstanceOfSideNavigationSelectableItemBase = createInstanceChecker<SideNavigationSelectableItemBase>("isSideNavigationSelectableItemBase");
export type {
SideNavigationItemAccessibilityAttributes,
};
9 changes: 2 additions & 7 deletions packages/fiori/src/UserMenuItemGroup.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
import MenuItemGroup from "@ui5/webcomponents/dist/MenuItemGroup.js";
import UserMenuItemGroupTemplate from "./UserMenuItemGroupTemplate.js";
import createInstanceChecker from "@ui5/webcomponents-base/dist/util/createInstanceChecker.js";

/**
* @class
Expand Down Expand Up @@ -39,14 +40,8 @@ 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,
};
export const isInstanceOfUserMenuItemGroup = createInstanceChecker<UserMenuItemGroup>("isGroup");
7 changes: 2 additions & 5 deletions packages/main/src/ComboBoxItemGroup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import type { IComboBoxItem } from "./ComboBox.js";
import ListItemGroup from "./ListItemGroup.js";
import type ComboBoxItem from "./ComboBoxItem.js";
import ComboBoxItemGroupTemplate from "./ComboBoxItemGroupTemplate.js";
import createInstanceChecker from "@ui5/webcomponents-base/dist/util/createInstanceChecker.js";

/**
* @class
Expand Down Expand Up @@ -45,9 +46,5 @@ class ComboBoxItemGroup extends ListItemGroup implements IComboBoxItem {

ComboBoxItemGroup.define();

const isInstanceOfComboBoxItemGroup = (object: any): object is ComboBoxItemGroup => {
return "isGroupItem" in object;
};

export { isInstanceOfComboBoxItemGroup };
export const isInstanceOfComboBoxItemGroup = createInstanceChecker<ComboBoxItemGroup>("isGroupItem");
export default ComboBoxItemGroup;
7 changes: 2 additions & 5 deletions packages/main/src/ListItemGroup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import ListItemGroupTemplate from "./ListItemGroupTemplate.js";
import ListItemGroupCss from "./generated/themes/ListItemGroup.css.js";
import type ListItemGroupHeader from "./ListItemGroupHeader.js";
import WrappingType from "./types/WrappingType.js";
import createInstanceChecker from "@ui5/webcomponents-base/dist/util/createInstanceChecker.js";

type ListItemGroupMoveEventDetail = {
source: {
Expand Down Expand Up @@ -213,10 +214,6 @@ class ListItemGroup extends UI5Element {

ListItemGroup.define();

const isInstanceOfListItemGroup = (object: any): object is ListItemGroup => {
return "isListItemGroup" in object;
};

export default ListItemGroup;
export { isInstanceOfListItemGroup };
export const isInstanceOfListItemGroup = createInstanceChecker<ListItemGroup>("isListItemGroup");
export type { ListItemGroupMoveEventDetail };
9 changes: 2 additions & 7 deletions packages/main/src/MenuItem.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import type { IMenuItem } from "./Menu.js";

// Styles
import menuItemCss from "./generated/themes/MenuItem.css.js";
import createInstanceChecker from "@ui5/webcomponents-base/dist/util/createInstanceChecker.js";

type MenuBeforeOpenEventDetail = { item?: MenuItem };
type MenuBeforeCloseEventDetail = { escPressed: boolean };
Expand Down Expand Up @@ -663,10 +664,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 {
Expand All @@ -675,6 +672,4 @@ export type {
MenuItemAccessibilityAttributes,
};

export {
isInstanceOfMenuItem,
};
export const isInstanceOfMenuItem = createInstanceChecker<MenuItem>("isMenuItem");
9 changes: 2 additions & 7 deletions packages/main/src/MenuItemGroup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import {
MENU_ITEM_GROUP_SINGLE_ACCESSIBLE_NAME,
MENU_ITEM_GROUP_MULTI_ACCESSIBLE_NAME,
} from "./generated/i18n/i18n-defaults.js";
import createInstanceChecker from "@ui5/webcomponents-base/dist/util/createInstanceChecker.js";

/**
* @class
Expand Down Expand Up @@ -148,14 +149,8 @@ class MenuItemGroup extends UI5Element implements IMenuItem {
}
}

const isInstanceOfMenuItemGroup = (object: any): object is MenuItemGroup => {
return "isGroup" in object;
};

MenuItemGroup.define();

export default MenuItemGroup;

export {
isInstanceOfMenuItemGroup,
};
export const isInstanceOfMenuItemGroup = createInstanceChecker<MenuItemGroup>("isGroup");
9 changes: 2 additions & 7 deletions packages/main/src/MenuSeparator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import menuSeparatorTemplate from "./MenuSeparatorTemplate.js";
import menuSeparatorCss from "./generated/themes/MenuSeparator.css.js";
import ListItemBase from "./ListItemBase.js";
import type { IMenuItem } from "./Menu.js";
import createInstanceChecker from "@ui5/webcomponents-base/dist/util/createInstanceChecker.js";
/**
* @class
* The `ui5-menu-separator` represents a horizontal line to separate menu items inside a `ui5-menu`.
Expand Down Expand Up @@ -51,14 +52,8 @@ class MenuSeparator extends ListItemBase implements IMenuItem {
}
}

const isInstanceOfMenuSeparator = (object: any): object is MenuSeparator => {
return "isSeparator" in object;
};

MenuSeparator.define();

export default MenuSeparator;

export {
isInstanceOfMenuSeparator,
};
export const isInstanceOfMenuSeparator = createInstanceChecker<MenuSeparator>("isSeparator");
7 changes: 2 additions & 5 deletions packages/main/src/MultiComboBoxItem.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import styles from "./generated/themes/MultiComboBoxItem.css.js";
import MultiComboBoxItemTemplate from "./MultiComboBoxItemTemplate.js";
import type { SelectionRequestEventDetail } from "./ListItem.js";
import type { AriaRole } from "@ui5/webcomponents-base";
import createInstanceChecker from "@ui5/webcomponents-base/dist/util/createInstanceChecker.js";

/**
* @class
Expand Down Expand Up @@ -83,11 +84,7 @@ class MultiComboBoxItem extends ComboBoxItem implements IMultiComboBoxItem {
}
}

const isInstanceOfMultiComboBoxItem = (object: any): object is MultiComboBoxItem => {
return "isMultiComboBoxItem" in object;
};

MultiComboBoxItem.define();

export default MultiComboBoxItem;
export { isInstanceOfMultiComboBoxItem };
export const isInstanceOfMultiComboBoxItem = createInstanceChecker<MultiComboBoxItem>("isMultiComboBoxItem");
7 changes: 2 additions & 5 deletions packages/main/src/MultiComboBoxItemGroup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import type MultiComboBoxItem from "./MultiComboBoxItem.js";
import MultiComboBoxItemGroupTemplate from "./MultiComboBoxItemGroupTemplate.js";
import type ListItemGroupHeader from "./ListItemGroupHeader.js";
import ComboBoxItemGroup from "./ComboBoxItemGroup.js";
import createInstanceChecker from "@ui5/webcomponents-base/dist/util/createInstanceChecker.js";

/**
* @class
Expand Down Expand Up @@ -57,10 +58,6 @@ class MultiComboBoxItemGroup extends ComboBoxItemGroup implements IMultiComboBox

MultiComboBoxItemGroup.define();

const isInstanceOfMultiComboBoxItemGroup = (object: any): object is MultiComboBoxItemGroup => {
return "isGroupItem" in object;
};

export default MultiComboBoxItemGroup;

export { isInstanceOfMultiComboBoxItemGroup };
export const isInstanceOfMultiComboBoxItemGroup = createInstanceChecker<MultiComboBoxItemGroup>("isGroupItem");
12 changes: 6 additions & 6 deletions packages/main/src/Popover.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import PopoverTemplate from "./PopoverTemplate.js";
// Styles
import PopupsCommonCss from "./generated/themes/PopupsCommon.css.js";
import PopoverCss from "./generated/themes/Popover.css.js";
import createInstanceChecker from "@ui5/webcomponents-base/dist/util/createInstanceChecker.js";

const ARROW_SIZE = 8;

Expand Down Expand Up @@ -969,14 +970,13 @@ class Popover extends Popup {
this._popoverResize.onResizeMouseDown(e);
this._resizeHandlePlacement = this._popoverResize.getResizeHandlePlacement();
}
}

const instanceOfPopover = (object: any): object is Popover => {
return "opener" in object;
};
// for instance checks
readonly isPopover = true;
}

Popover.define();

export default Popover;

export { instanceOfPopover, PopoverActualPlacement, PopoverActualHorizontalAlign };
export const instanceOfPopover = createInstanceChecker<Popover>("isPopover");
export { PopoverActualPlacement, PopoverActualHorizontalAlign };
5 changes: 2 additions & 3 deletions packages/main/src/TableUtils.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import createInstanceChecker from "@ui5/webcomponents-base/dist/util/createInstanceChecker.js";
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 isInstanceOfTable = createInstanceChecker<Table>("isTable");

const isSelectionCell = (e: Event) => {
return e.composedPath().some((el: EventTarget) => (el as HTMLElement).hasAttribute?.("data-ui5-table-selection-cell"));
Expand Down
11 changes: 5 additions & 6 deletions packages/main/src/Tree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import TreeTemplate from "./TreeTemplate.js";

// Styles
import TreeCss from "./generated/themes/Tree.css.js";
import createInstanceChecker from "@ui5/webcomponents-base/dist/util/createInstanceChecker.js";

type TreeMoveEventDetail = {
source: {
Expand Down Expand Up @@ -412,15 +413,15 @@ class Tree extends UI5Element {
_onListItemMouseOver(e: MouseEvent) {
const target = e.target;

if (this._isInstanceOfTreeItemBase(target)) {
if (_isInstanceOfTreeItemBase(target)) {
this.fireDecoratorEvent("item-mouseover", { item: target });
}
}

_onListItemMouseOut(e: MouseEvent) {
const target = e.target;

if (this._isInstanceOfTreeItemBase(target)) {
if (_isInstanceOfTreeItemBase(target)) {
this.fireDecoratorEvent("item-mouseout", { item: target });
}
}
Expand Down Expand Up @@ -523,12 +524,10 @@ class Tree extends UI5Element {
}
return placements;
}

_isInstanceOfTreeItemBase(object: any): object is TreeItemBase {
return "isTreeItem" in object;
}
}

const _isInstanceOfTreeItemBase = createInstanceChecker<TreeItemBase>("isTreeItem");

const walkTree = (el: Tree | TreeItemBase, level: number, callback: WalkCallback) => {
(el.items).forEach((item, index) => {
callback(item, level, index);
Expand Down
Loading