@itwin/core-react
Version:
A react component library of iTwin.js UI general purpose components
82 lines • 3.77 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* 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