{"version":3,"file":"FieldSelector.jsx","sourceRoot":"","sources":["../../../src/rte/DynamicContentEditor/FieldSelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useMemo, useState, useCallback } from 'react';\nimport type { ChangeEvent, FunctionComponent } from 'react';\n\nimport { ComboBox, createStringMatcher, useI18n } from '@pega/cosmos-react-core';\nimport type { ComboBoxProps, MenuItemProps, NoChildrenProp } from '@pega/cosmos-react-core';\nimport type { ItemType } from '@pega/cosmos-react-rte/lib/components/DynamicContentEditor/DynamicContentEditor.types';\n\nexport interface FieldSelectorProps extends NoChildrenProp {\n  /** Array of values for the combobox options. */\n  itemList: ItemType[];\n  /** Return selected item */\n  updateSelection: (selectedItem: ItemType, label: ComboBoxProps['label']) => void;\n  /** Default selected item */\n  defaultSelection?: ItemType;\n}\n\nconst FieldSelector: FunctionComponent<\n  FieldSelectorProps & Pick<ComboBoxProps, 'label' | 'mode' | 'required' | 'placeholder'>\n> = ({\n  itemList,\n  label,\n  mode = 'single-select',\n  required = false,\n  updateSelection,\n  placeholder,\n  defaultSelection\n}) => {\n  const t = useI18n();\n\n  const [filterValue, setFilterValue] = useState('');\n  const [items, setItems] = useState(() => {\n    return itemList.map(item => {\n      return {\n        id: item.id,\n        primary: item.text,\n        namespace: item.namespace ?? '',\n        selected: defaultSelection ? defaultSelection.id === item.id : false\n      };\n    });\n  });\n\n  const filterRegex = createStringMatcher(filterValue, 'contains');\n  const itemsToRender = useMemo(() => {\n    return filterRegex ? items.filter(({ primary }) => filterRegex.test(primary)) : items;\n  }, [filterValue, items]);\n\n  const clearSelection = () => {\n    setItems(curr => {\n      return curr?.map(item => {\n        return {\n          ...item,\n          selected: false\n        };\n      });\n    });\n  };\n\n  const selectItem = useCallback(\n    (id: MenuItemProps['id']) => {\n      setFilterValue('');\n      setItems(curr =>\n        curr?.map(item => {\n          if (item.id === id) {\n            return {\n              ...item,\n              selected: true\n            };\n          }\n          return { ...item, selected: false };\n        })\n      );\n      const selectedItem = items?.find(item => item.id === id);\n      if (selectedItem?.id)\n        updateSelection(\n          {\n            id: selectedItem.id,\n            text: selectedItem.primary,\n            namespace: selectedItem.namespace\n          },\n          label\n        );\n    },\n    [filterValue, items]\n  );\n\n  const selected = useMemo(() => {\n    return items?.find(item => item.selected);\n  }, [items]);\n\n  const comboBoxProps: ComboBoxProps = {\n    label,\n    placeholder,\n    mode,\n    value: filterValue,\n    selected: selected\n      ? {\n          items: {\n            id: selected.id,\n            text: selected.primary\n          }\n        }\n      : undefined,\n    onChange: (e: ChangeEvent<HTMLInputElement>) => {\n      if (e.target.value) clearSelection();\n      setFilterValue(e.target.value);\n    },\n    onBlur: () => setFilterValue(''),\n    menu: {\n      items: itemsToRender,\n      accent: filterRegex,\n      onItemClick: selectItem,\n      emptyText: t('no_items')\n    },\n    required\n  };\n  return <ComboBox {...comboBoxProps} />;\n};\n\nexport default FieldSelector;\n"]}