import { AllI18nKeys, Localization } from "@Component/Localization/Localization"; import { Callout, DirectionalHint, Icon } from "@fluentui/react"; 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; interface IDisplayInfo { color: string; icon: string; name: string; needI18n?: boolean; }; interface IDisplayItem { nameKey: AllI18nKeys; key: string; mark?: boolean; } function getObjectDisplayInfo(item: IPickerListItem): IDisplayInfo { let color: number[] = []; let icon: string = "tag"; let name: string = ""; let needI18n: boolean = false; if (item instanceof Range) { icon = "CubeShape" } if (item instanceof Group) { icon = "WebAppBuilderFragment" } if (item instanceof CtrlObject) { 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) { needI18n = true; 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; } } return { color: needI18n ? "transparent" : `rgb(${color[0]},${color[1]},${color[2]})`, icon: icon, name: name, needI18n: needI18n } } 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.needI18n ? : 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 }