UNPKG

@itwin/core-react

Version:

A react component library of iTwin.js UI general purpose components

82 lines 3.77 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ /** @packageDocumentation * @module Utilities */ /* eslint-disable @typescript-eslint/no-deprecated */ import * as React from "react"; import { ConditionalStringValue } from "@itwin/appui-abstract"; import { Icon } from "../icons/IconComponent.js"; import { ConditionalIconItem } from "../icons/ConditionalIconItem.js"; /** Icon Helper Class used to store the data needed to generate an <Icon> for use in any control that shows an icon. * @public * @deprecated in 4.15.0. Used internally. */ export class IconHelper { static get reactIconKey() { return "#-react-iconspec-node-#"; } static get conditionalIconItemKey() { return "#-conditional-icon-item-node-#"; } /** Returns an <Icon> ReactNode from the many ways an icon can be specified. * @param icon abstract icon specification. * @param internalData a map that may hold a React.ReactNode stored in an abstract item definition. */ static getIconReactNode(icon, internalData) { if (!icon) return null; if (icon instanceof ConditionalIconItem) return React.createElement(Icon, { iconSpec: ConditionalIconItem.getValue(icon) }); if (React.isValidElement(icon)) return React.createElement(Icon, { iconSpec: icon }); if (!(icon instanceof ConditionalStringValue) && typeof icon !== "string") return null; const iconString = ConditionalStringValue.getValue(icon); if (!iconString) return null; if (iconString === IconHelper.reactIconKey) { if (internalData) return (React.createElement(Icon, { iconSpec: internalData.get(IconHelper.reactIconKey) })); return null; } else if (iconString === IconHelper.conditionalIconItemKey) { if (internalData) { const iconItem = internalData.get(IconHelper.conditionalIconItemKey); return React.createElement(Icon, { iconSpec: ConditionalIconItem.getValue(iconItem) }); } return null; } return React.createElement(Icon, { iconSpec: iconString }); } /** Returns an icon definition that can be stored in an abstract item definition. If the iconSpec specifies a ReactNode * then the react data is stored in the internalData map and the key to the react data is returned. * @param iconSpec any supported variations of how an icon can be defined in an abstract item or IconProps. * @param internalData a map supplied by the caller to store away react element if React.ReactNode */ static getIconData(iconSpec, internalData) { let icon; if (iconSpec instanceof ConditionalIconItem) { icon = IconHelper.conditionalIconItemKey; if (internalData) internalData.set(IconHelper.conditionalIconItemKey, iconSpec); return icon; } else { icon = React.isValidElement(iconSpec) ? IconHelper.reactIconKey : iconSpec; } if (internalData && typeof icon === "string" && icon === IconHelper.reactIconKey) { internalData.set(IconHelper.reactIconKey, iconSpec); } if (typeof icon === "string" || icon instanceof ConditionalStringValue) return icon; return ""; } } //# sourceMappingURL=IconHelper.js.map