@variantjs/vue
Version:
Vue VariantJS: Fully configurable Vue 3 components styled with TailwindCSS
39 lines (34 loc) • 976 B
text/typescript
import {
flattenOptions,
InputOptions,
NormalizedOption,
NormalizedOptions,
normalizeOptions,
} from '@variantjs/core';
import { computed, ComputedRef, Ref } from 'vue';
export default function useMultioptions(
options: Ref<InputOptions | undefined>,
textAttribute: Ref<string | undefined>,
valueAttribute: Ref<string | undefined>,
normalize: Ref<boolean>,
): {
normalizedOptions: ComputedRef<NormalizedOptions>
flattenedOptions: ComputedRef<NormalizedOption[]>
} {
const normalizedOptions = computed<NormalizedOptions>(() => {
if (!normalize.value) {
return options.value as NormalizedOptions;
}
return normalizeOptions(
options.value,
textAttribute.value,
valueAttribute.value,
);
});
// Flattened array with all posible options
const flattenedOptions = computed((): NormalizedOption[] => flattenOptions(normalizedOptions.value));
return {
normalizedOptions,
flattenedOptions,
};
}