12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- // Utilities
- import { computed } from 'vue';
- import { deepEqual, getPropertyFromItem, omit, propsFactory } from "../util/index.mjs"; // Types
- // Composables
- export const makeItemsProps = propsFactory({
- items: {
- type: Array,
- default: () => []
- },
- itemTitle: {
- type: [String, Array, Function],
- default: 'title'
- },
- itemValue: {
- type: [String, Array, Function],
- default: 'value'
- },
- itemChildren: {
- type: [Boolean, String, Array, Function],
- default: 'children'
- },
- itemProps: {
- type: [Boolean, String, Array, Function],
- default: 'props'
- },
- returnObject: Boolean,
- valueComparator: {
- type: Function,
- default: deepEqual
- }
- }, 'list-items');
- export function transformItem(props, item) {
- const title = getPropertyFromItem(item, props.itemTitle, item);
- const value = getPropertyFromItem(item, props.itemValue, title);
- const children = getPropertyFromItem(item, props.itemChildren);
- const itemProps = props.itemProps === true ? typeof item === 'object' && item != null && !Array.isArray(item) ? 'children' in item ? omit(item, ['children']) : item : undefined : getPropertyFromItem(item, props.itemProps);
- const _props = {
- title,
- value,
- ...itemProps
- };
- return {
- title: String(_props.title ?? ''),
- value: _props.value,
- props: _props,
- children: Array.isArray(children) ? transformItems(props, children) : undefined,
- raw: item
- };
- }
- export function transformItems(props, items) {
- const array = [];
- for (const item of items) {
- array.push(transformItem(props, item));
- }
- return array;
- }
- export function useItems(props) {
- const items = computed(() => transformItems(props, props.items));
- const hasNullItem = computed(() => items.value.some(item => item.value === null));
- function transformIn(value) {
- if (!hasNullItem.value) {
- // When the model value is null, return an InternalItem
- // based on null only if null is one of the items
- value = value.filter(v => v !== null);
- }
- return value.map(v => {
- if (props.returnObject && typeof v === 'string') {
- // String model value means value is a custom input value from combobox
- // Don't look up existing items if the model value is a string
- return transformItem(props, v);
- }
- return items.value.find(item => props.valueComparator(v, item.value)) || transformItem(props, v);
- });
- }
- function transformOut(value) {
- return props.returnObject ? value.map(_ref => {
- let {
- raw
- } = _ref;
- return raw;
- }) : value.map(_ref2 => {
- let {
- value
- } = _ref2;
- return value;
- });
- }
- return {
- items,
- transformIn,
- transformOut
- };
- }
- //# sourceMappingURL=list-items.mjs.map
|