diff --git a/src/stores/utils/index.ts b/src/stores/utils/index.ts index 45b82b70..7dadc932 100644 --- a/src/stores/utils/index.ts +++ b/src/stores/utils/index.ts @@ -75,20 +75,34 @@ export function formatNumberDecimal(num: number, point: number): string { } export function selectOptionFilter( - list: Record[], + list: Record[], filterField?: string, + prepare?: ( + ...args: unknown[] + ) => Record[] | Promise[]>, ) { const options = ref([]); + + (async () => { + const data = await prepare?.(); + if (data) options.value = list = data; + })(); + const filter = ((value, update) => { if (value === '') update(() => (options.value = list)); else update(() => { - options.value = list.filter( - (v) => - v[filterField || 'label'] - .toLocaleLowerCase() - .indexOf(value.toLocaleLowerCase()) > -1, - ); + options.value = list.filter((v) => { + const label = v[filterField || 'label']; + + if (typeof label !== 'string') { + throw new Error('Label must be of type string.'); + } + + return ( + label.toLocaleLowerCase().indexOf(value.toLocaleLowerCase()) > -1 + ); + }); }); }) satisfies QSelect['onFilter'];