import { AllI18nKeys, Localization } from "@Component/Localization/Localization"; import { Callout, DirectionalHint, Icon } from "@fluentui/react"; import { Behavior } from "@Model/Behavior"; import { CtrlObject } from "@Model/CtrlObject"; import { Group } from "@Model/Group"; import { Label } from "@Model/Label"; import { Range } from "@Model/Range"; import { Component, ReactNode, RefObject } from "react"; import "./PickerList.scss"; type IPickerListItem = CtrlObject | Label | Range | Group | Behavior; interface IDisplayInfo { color: string; icon: string; name: string; internal: boolean; allLabel: boolean; }; interface IDisplayItem { nameKey: AllI18nKeys; key: string; mark?: boolean; } function getObjectDisplayInfo(item?: IPickerListItem): IDisplayInfo { if (!item) { return { color: "transparent", icon: "Label", name: "Input.Error.Select", internal: true, allLabel: false } } let color: number[] | string = []; let icon: string = "tag"; let name: string = ""; let internal: boolean = false; let allLabel: boolean = false; if (item instanceof Range) { icon = "CubeShape" } if (item instanceof Group) { icon = "WebAppBuilderFragment" } if (item instanceof CtrlObject) { color = []; color[0] = Math.round(item.color[0] * 255); color[1] = Math.round(item.color[1] * 255); color[2] = Math.round(item.color[2] * 255); name = item.displayName; } if (item instanceof Label) { if (item.isBuildIn) { internal = true; allLabel = true; color = "transparent"; if (item.id === "AllRange") { icon = "ProductList"; name = "Build.In.Label.Name.All.Range"; } else if (item.id === "AllGroup") { icon = "SizeLegacy"; name = "Build.In.Label.Name.All.Group"; } } else { icon = "tag"; color = item.color.concat([]); name = item.name; } } if (item instanceof Behavior) { color = item.color; icon = item.iconName; name = item.name; internal = false; allLabel = false; } if (Array.isArray(color)) { color = `rgb(${color[0]},${color[1]},${color[2]})`; } return { color: color, icon: icon, name: name, internal: internal, allLabel: allLabel } } interface IPickerListProps { displayItems?: IDisplayItem[]; objectList?: IPickerListItem[]; target?: RefObject; noData?: AllI18nKeys; dismiss?: () => any; clickObjectItems?: (item: IPickerListItem) => any; clickDisplayItems?: (item: IDisplayItem) => any; } class PickerList extends Component { private renderItem(item: IPickerListItem) { const displayInfo = getObjectDisplayInfo(item); return
{ if (this.props.clickObjectItems) { this.props.clickObjectItems(item) } }} >
{ displayInfo.internal ? : displayInfo.name }
; } private renderString(item: IDisplayItem) { return
{ if (this.props.clickDisplayItems) { this.props.clickDisplayItems(item) } }} >
; } public render(): ReactNode { return
{this.props.objectList ? this.props.objectList.map((item) => { return this.renderItem(item); }) : null} {this.props.displayItems ? this.props.displayItems.map((item) => { return this.renderString(item); }) : null} { !(this.props.objectList || this.props.displayItems) || !( this.props.objectList && this.props.objectList.length > 0 || this.props.displayItems && this.props.displayItems.length > 0 ) ? : null }
} } export { PickerList, IDisplayItem, IDisplayInfo, getObjectDisplayInfo }