import React, {FC, useContext} from "react"; import {__} from "../../globals"; import {SelectOptionRenderersContext} from "./FieldContexts"; import classNames from "classnames"; export enum MultiSelectSearchItemContext { Menu = 'menu', Selected = 'selected', } export type MultiSelectSearchItemOptions = Partial<{ beforeLabel(): React.ReactNode, beforeItemEnd?: false | (() => React.ReactNode), context: MultiSelectSearchItemContext, Label?: FC }>; export type MultiSelectSearchItemProps = { data: any, options?: MultiSelectSearchItemOptions, showID?: boolean, isMulti?: boolean } function DefaultLabel(props: { label: any, id: string, value: any }) { return {props.label}; } export const MultiSelectSearchItem: FC = ({data: {label, value, id}, options, showID, isMulti = false}) => { const selectOptionRenderers = useContext(SelectOptionRenderersContext) let {beforeItemEnd} = options || {} showID = typeof showID === 'undefined' ? isMulti : showID; if (typeof beforeItemEnd === 'undefined') { if (isMulti) { beforeItemEnd = () => {__('Add +')} } else { beforeItemEnd = () => {__('Select')} } } if (value && typeof value === 'object') { let renderer = selectOptionRenderers.find(({type}) => type === value?.type); if (renderer) { label = renderer.render(value.value, options); } else { console.error('No renderer found for type:', value?.type, value); } } const Label = options?.Label || DefaultLabel return
{options?.beforeLabel?.()}
{showID && ID {id}} {typeof beforeItemEnd === 'function' && beforeItemEnd()}
}