import { SchemaFieldProps, SelectField as SelectFieldType, SelectFieldItem } from '@vev/utils'; import { isArray, isFunction } from 'lodash'; import React, { useEffect, useState } from 'react'; import { SilkeTextSmall } from '../../silke-text'; import { SilkeAutocompleteField } from '../../silke-autocomplete-field'; import { SilkeBox } from '../../silke-box'; import { SilkeCheckbox } from '../../silke-checkbox'; import { SilkeRadioButton } from '../../silke-radio-button'; import { SilkeSelectField } from '../../silke-select-field'; import { useSchemaContext } from '../silke-schema-context'; import { getTitle } from './utils/schema-util'; const SelectField = (props: SchemaFieldProps) => { const { onChange, schema, disabled, readonly, schema: { options, name, options: { multiselect = false, display, placeholder } = {} }, value, } = props; const [items, setItems] = useState([]); const schemaItems = options?.items || []; const context = useSchemaContext(); useEffect(() => { if (!schemaItems) return; if (isFunction(schemaItems)) { const res = schemaItems(context); if (isArray(res)) setItems(res); else res.then(setItems); } else { setItems(schemaItems); } }, [schemaItems, context]); if (multiselect && (!display || display === 'checkbox')) { const values = (value as string[]) || []; return ( {getTitle(schema)} {items.map((item, index) => ( checked ? onChange([...values, item.value]) : onChange(values.filter((e) => e !== item.value)) } /> ))} ); } if (display === 'dropdown') { return ( { return ( {item.item.label} ); }} /> ); } if (display === 'autocomplete') { return ( ); } return ( {getTitle(schema)} {items?.map((item, i) => ( ))} ); }; export default SelectField;