vuetify
Version:
Vue Material Component Framework
1 lines • 11 kB
Source Map (JSON)
{"version":3,"file":"VTreeviewChildren.mjs","names":["VTreeviewGroup","VTreeviewItem","VCheckboxBtn","IconValue","computed","shallowRef","toRaw","withModifiers","genericComponent","propsFactory","makeVTreeviewChildrenProps","loadChildren","Function","loadingIcon","type","String","default","items","Array","openOnClick","Boolean","undefined","indeterminateIcon","falseIcon","trueIcon","returnObject","selectable","selectedColor","selectStrategy","Object","VTreeviewChildren","name","props","setup","_ref","emit","slots","isLoading","isClickOnOpen","checkChildren","item","Promise","resolve","length","children","value","then","finally","selectItem","select","isSelected","map","_ref2","itemProps","raw","loading","slotsWithItem","prepend","slotProps","_createVNode","_Fragment","includes","isIndeterminate","e","key","stopPropagation","append","title","treeviewGroupProps","filterProps","treeviewChildrenProps","_mergeProps","activator","_ref3","activatorProps","listItemProps","onToggleExpand","onClick"],"sources":["../../../src/labs/VTreeview/VTreeviewChildren.tsx"],"sourcesContent":["// Components\nimport { VTreeviewGroup } from './VTreeviewGroup'\nimport { VTreeviewItem } from './VTreeviewItem'\nimport { VCheckboxBtn } from '@/components/VCheckbox'\n\n// Composables\nimport { IconValue } from '@/composables/icons'\n\n// Utilities\nimport { computed, shallowRef, toRaw, withModifiers } from 'vue'\nimport { genericComponent, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { InternalListItem } from '@/components/VList/VList'\nimport type { VListItemSlots } from '@/components/VList/VListItem'\nimport type { SelectStrategyProp } from '@/composables/nested/nested'\nimport type { GenericProps } from '@/util'\n\nexport type VTreeviewChildrenSlots<T> = {\n [K in keyof Omit<VListItemSlots, 'default'>]: VListItemSlots[K] & { item: T }\n} & {\n default: never\n item: { props: InternalListItem['props'] }\n}\n\nexport const makeVTreeviewChildrenProps = propsFactory({\n loadChildren: Function as PropType<(item: unknown) => Promise<void>>,\n loadingIcon: {\n type: String,\n default: '$loading',\n },\n items: Array as PropType<readonly InternalListItem[]>,\n openOnClick: {\n type: Boolean,\n default: undefined,\n },\n indeterminateIcon: {\n type: IconValue,\n default: '$checkboxIndeterminate',\n },\n falseIcon: IconValue,\n trueIcon: IconValue,\n returnObject: Boolean,\n selectable: Boolean,\n selectedColor: String,\n selectStrategy: [String, Function, Object] as PropType<SelectStrategyProp>,\n}, 'VTreeviewChildren')\n\nexport const VTreeviewChildren = genericComponent<new <T extends InternalListItem>(\n props: {\n items?: readonly T[]\n },\n slots: VTreeviewChildrenSlots<T>\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VTreeviewChildren',\n\n props: makeVTreeviewChildrenProps(),\n\n setup (props, { emit, slots }) {\n const isLoading = shallowRef(null)\n\n const isClickOnOpen = computed(() => props.openOnClick != null ? props.openOnClick : props.selectable)\n\n function checkChildren (item: any) {\n return new Promise<void>(resolve => {\n if (!props.items?.length || !props.loadChildren) return resolve()\n\n if (item?.children?.length === 0) {\n isLoading.value = item.value\n props.loadChildren(item).then(resolve)\n\n return\n }\n\n resolve()\n }).finally(() => {\n isLoading.value = null\n })\n }\n\n function selectItem (select: (value: boolean) => void, isSelected: boolean) {\n if (props.selectable) {\n select(!isSelected)\n }\n }\n\n return () => slots.default?.() ?? props.items?.map(({ children, props: itemProps, raw: item }) => {\n const loading = isLoading.value === item.value\n const slotsWithItem = {\n prepend: slotProps => (\n <>\n { props.selectable && (!children || (children && !['leaf', 'single-leaf'].includes(props.selectStrategy as string))) && (\n <div>\n <VCheckboxBtn\n key={ item.value }\n modelValue={ slotProps.isSelected }\n loading={ loading }\n color={ props.selectedColor }\n indeterminate={ slotProps.isIndeterminate }\n indeterminateIcon={ props.indeterminateIcon }\n falseIcon={ props.falseIcon }\n trueIcon={ props.trueIcon }\n onClick={ withModifiers(() => selectItem(slotProps.select, slotProps.isSelected), ['stop']) }\n onKeydown={ (e: KeyboardEvent) => {\n if (!['Enter', 'Space'].includes(e.key)) return\n e.stopPropagation()\n selectItem(slotProps.select, slotProps.isSelected)\n }}\n />\n </div>\n )}\n\n { slots.prepend?.({ ...slotProps, item }) }\n </>\n ),\n append: slots.append ? slotProps => slots.append?.({ ...slotProps, item }) : undefined,\n title: slots.title ? slotProps => slots.title?.({ ...slotProps, item }) : undefined,\n } satisfies VTreeviewItem['$props']['$children']\n\n const treeviewGroupProps = VTreeviewGroup.filterProps(itemProps)\n const treeviewChildrenProps = VTreeviewChildren.filterProps(props)\n\n return children ? (\n <VTreeviewGroup\n { ...treeviewGroupProps }\n value={ props.returnObject ? item : treeviewGroupProps?.value }\n >\n {{\n activator: ({ props: activatorProps }) => {\n const listItemProps = {\n ...itemProps,\n ...activatorProps,\n value: itemProps?.value,\n onToggleExpand: activatorProps.onClick as any,\n onClick: isClickOnOpen.value ? [() => checkChildren(item), activatorProps.onClick] as any : undefined,\n }\n\n return (\n <VTreeviewItem\n { ...listItemProps }\n value={ props.returnObject ? toRaw(item) : itemProps.value }\n loading={ loading }\n v-slots={ slotsWithItem }\n />\n )\n },\n default: () => (\n <VTreeviewChildren\n { ...treeviewChildrenProps }\n items={ children }\n returnObject={ props.returnObject }\n v-slots={ slots }\n />\n ),\n }}\n </VTreeviewGroup>\n ) : (\n slots.item?.({ props: itemProps }) ?? (\n <VTreeviewItem\n { ...itemProps }\n value={ props.returnObject ? toRaw(item) : itemProps.value }\n v-slots={ slotsWithItem }\n />\n ))\n })\n },\n})\n"],"mappings":"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","ignoreList":[]}