diff --git a/src/components/vanilla/controls/Dropdown/Dropdown.emb.ts b/src/components/vanilla/controls/Dropdown/Dropdown.emb.ts index f48c8c36..0de66d3b 100644 --- a/src/components/vanilla/controls/Dropdown/Dropdown.emb.ts +++ b/src/components/vanilla/controls/Dropdown/Dropdown.emb.ts @@ -16,12 +16,24 @@ export const meta = { type: 'dataset', label: 'Dataset', description: 'Dataset', + required: true, category: 'Dropdown values' }, { name: 'property', type: 'dimension', label: 'Property', + required: true, + config: { + dataset: 'ds' + }, + category: 'Dropdown values' + }, + { + name: 'id', + type: 'dimension', + label: 'Id', + required: false, config: { dataset: 'ds' }, @@ -61,6 +73,10 @@ export const meta = { { name: 'value', type: 'string' + }, + { + name: 'id', + type: 'string' } ] } @@ -72,6 +88,12 @@ export const meta = { defaultValue: Value.noFilter(), inputs: ['defaultValue'], events: [{ name: 'onChange', property: 'value' }] + }, + { + name: 'dropdown id', + type: 'string', + defaultValue: Value.noFilter(), + events: [{ name: 'onChange', property: 'id' }] } ] } as const satisfies EmbeddedComponentMeta; @@ -88,7 +110,7 @@ export default defineComponent(Component ...inputs, options: loadData({ from: inputs.ds, - dimensions: inputs.property ? [inputs.property] : [], + dimensions: inputs.id ? [inputs.property, inputs.id] : [inputs.property], limit: inputs.limit || 1000, filters: embState?.search && inputs.property @@ -104,9 +126,10 @@ export default defineComponent(Component }; }, events: { - onChange: (value) => { + onChange: (e) => { return { - value: value || Value.noFilter() + value: e.value || Value.noFilter(), + id: e.id || Value.noFilter() }; } } diff --git a/src/components/vanilla/controls/Dropdown/index.tsx b/src/components/vanilla/controls/Dropdown/index.tsx index 184c6dcf..6eba1845 100644 --- a/src/components/vanilla/controls/Dropdown/index.tsx +++ b/src/components/vanilla/controls/Dropdown/index.tsx @@ -24,7 +24,8 @@ export type Props = { onChange: (v: string) => void; searchProperty?: string; minDropdownWidth?: number; - property?: { name: string; title: string; nativeType: string; __type__: string }; + property: { name: string; title: string; nativeType: string; __type__: string }; + id?: { name: string; title: string; nativeType: string; __type__: string }; title?: string; defaultValue?: string; placeholder?: string; @@ -63,12 +64,12 @@ export default (props: Props) => { ); const set = useCallback( - (value: string) => { + (value: string, id: string) => { performSearch(''); setValue(value); - props.onChange(value); + props.onChange({ value, id }); clearTimeout(debounce); }, @@ -95,7 +96,10 @@ export default (props: Props) => { onClick={() => { setFocus(false); setTriggerBlur(false); - set(o[props.property?.name || ''] || ''); + set( + o[props.property?.name || ''] || '', + o[props.id?.name || ''] || '' + ); }} className={`flex items-center min-h-[36px] px-3 py-2 hover:bg-black/5 cursor-pointer font-normal ${ value === o[props.property?.name || ''] ? 'bg-black/5' : ''