UNPKG

vuetify

Version:

Vue Material Component Framework

1 lines 17.5 kB
{"version":3,"file":"group.mjs","names":["useProxiedModel","computed","inject","onBeforeUnmount","onMounted","provide","reactive","toRef","watch","consoleWarn","deepEqual","findChildrenWithProvide","getCurrentInstance","getUid","propsFactory","wrapInArray","makeGroupProps","modelValue","type","default","undefined","multiple","Boolean","mandatory","String","max","Number","selectedClass","disabled","makeGroupItemProps","value","useGroupItem","props","injectKey","required","vm","Error","id","Symbol","for","description","group","register","unregister","isSelected","emit","toggle","select","useGroup","isUnmounted","items","selected","v","getIds","arr","getValues","groupVm","item","unwrapped","key","children","vnode","index","indexOf","splice","push","forceMandatoryValue","findIndex","find","length","internalValue","slice","includes","step","offset","currentId","currentIndex","i","newIndex","newItem","state","prev","next","getItemIndex","ids","values"],"sources":["../../src/composables/group.ts"],"sourcesContent":["// Composables\nimport { useProxiedModel } from './proxiedModel'\n\n// Utilities\nimport { computed, inject, onBeforeUnmount, onMounted, provide, reactive, toRef, watch } from 'vue'\nimport { consoleWarn, deepEqual, findChildrenWithProvide, getCurrentInstance, getUid, propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { ComponentInternalInstance, ComputedRef, ExtractPropTypes, InjectionKey, PropType, Ref, UnwrapRef } from 'vue'\n\nexport interface GroupItem {\n id: number\n value: Ref<unknown>\n disabled: Ref<boolean | undefined>\n}\n\nexport interface GroupProps {\n disabled: boolean\n modelValue: unknown\n multiple?: boolean\n mandatory?: boolean | 'force' | undefined\n max?: number | undefined\n selectedClass: string | undefined\n 'onUpdate:modelValue': ((val: unknown) => void) | undefined\n}\n\nexport interface GroupProvide {\n register: (item: GroupItem, cmp: ComponentInternalInstance) => void\n unregister: (id: number) => void\n select: (id: number, value: boolean) => void\n selected: Ref<Readonly<number[]>>\n isSelected: (id: number) => boolean\n prev: () => void\n next: () => void\n selectedClass: Ref<string | undefined>\n items: ComputedRef<{\n id: number\n value: unknown\n disabled: boolean | undefined\n }[]>\n disabled: Ref<boolean | undefined>\n getItemIndex: (value: unknown) => number\n}\n\nexport interface GroupItemProvide {\n id: number\n isSelected: Ref<boolean>\n toggle: () => void\n select: (value: boolean) => void\n selectedClass: Ref<(string | undefined)[] | false>\n value: Ref<unknown>\n disabled: Ref<boolean | undefined>\n group: GroupProvide\n}\n\nexport const makeGroupProps = propsFactory({\n modelValue: {\n type: null,\n default: undefined,\n },\n multiple: Boolean,\n mandatory: [Boolean, String] as PropType<boolean | 'force'>,\n max: Number,\n selectedClass: String,\n disabled: Boolean,\n}, 'group')\n\nexport const makeGroupItemProps = propsFactory({\n value: null,\n disabled: Boolean,\n selectedClass: String,\n}, 'group-item')\n\nexport interface GroupItemProps extends ExtractPropTypes<ReturnType<typeof makeGroupItemProps>> {\n 'onGroup:selected': ((val: { value: boolean }) => void) | undefined\n}\n\n// Composables\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required?: true,\n): GroupItemProvide\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required: false,\n): GroupItemProvide | null\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required = true,\n): GroupItemProvide | null {\n const vm = getCurrentInstance('useGroupItem')\n\n if (!vm) {\n throw new Error(\n '[Vuetify] useGroupItem composable must be used inside a component setup function'\n )\n }\n\n const id = getUid()\n\n provide(Symbol.for(`${injectKey.description}:id`), id)\n\n const group = inject(injectKey, null)\n\n if (!group) {\n if (!required) return group\n\n throw new Error(`[Vuetify] Could not find useGroup injection with symbol ${injectKey.description}`)\n }\n\n const value = toRef(props, 'value')\n const disabled = computed(() => group.disabled.value || props.disabled)\n\n group.register({\n id,\n value,\n disabled,\n }, vm)\n\n onBeforeUnmount(() => {\n group.unregister(id)\n })\n\n const isSelected = computed(() => {\n return group.isSelected(id)\n })\n\n const selectedClass = computed(() => isSelected.value && [group.selectedClass.value, props.selectedClass])\n\n watch(isSelected, value => {\n vm.emit('group:selected', { value })\n })\n\n return {\n id,\n isSelected,\n toggle: () => group.select(id, !isSelected.value),\n select: (value: boolean) => group.select(id, value),\n selectedClass,\n value,\n disabled,\n group,\n }\n}\n\nexport function useGroup (\n props: GroupProps,\n injectKey: InjectionKey<GroupProvide>\n) {\n let isUnmounted = false\n const items = reactive<GroupItem[]>([])\n const selected = useProxiedModel(\n props,\n 'modelValue',\n [],\n v => {\n if (v == null) return []\n\n return getIds(items, wrapInArray(v))\n },\n v => {\n const arr = getValues(items, v)\n\n return props.multiple ? arr : arr[0]\n }\n )\n\n const groupVm = getCurrentInstance('useGroup')\n\n function register (item: GroupItem, vm: ComponentInternalInstance) {\n // Is there a better way to fix this typing?\n const unwrapped = item as unknown as UnwrapRef<GroupItem>\n\n const key = Symbol.for(`${injectKey.description}:id`)\n const children = findChildrenWithProvide(key, groupVm?.vnode)\n const index = children.indexOf(vm)\n\n if (index > -1) {\n items.splice(index, 0, unwrapped)\n } else {\n items.push(unwrapped)\n }\n }\n\n function unregister (id: number) {\n if (isUnmounted) return\n\n // TODO: re-evaluate this line's importance in the future\n // should we only modify the model if mandatory is set.\n // selected.value = selected.value.filter(v => v !== id)\n\n forceMandatoryValue()\n\n const index = items.findIndex(item => item.id === id)\n items.splice(index, 1)\n }\n\n // If mandatory and nothing is selected, then select first non-disabled item\n function forceMandatoryValue () {\n const item = items.find(item => !item.disabled)\n if (item && props.mandatory === 'force' && !selected.value.length) {\n selected.value = [item.id]\n }\n }\n\n onMounted(() => {\n forceMandatoryValue()\n })\n\n onBeforeUnmount(() => {\n isUnmounted = true\n })\n\n function select (id: number, value?: boolean) {\n const item = items.find(item => item.id === id)\n if (value && item?.disabled) return\n\n if (props.multiple) {\n const internalValue = selected.value.slice()\n const index = internalValue.findIndex(v => v === id)\n const isSelected = ~index\n value = value ?? !isSelected\n\n // We can't remove value if group is\n // mandatory, value already exists,\n // and it is the only value\n if (\n isSelected &&\n props.mandatory &&\n internalValue.length <= 1\n ) return\n\n // We can't add value if it would\n // cause max limit to be exceeded\n if (\n !isSelected &&\n props.max != null &&\n internalValue.length + 1 > props.max\n ) return\n\n if (index < 0 && value) internalValue.push(id)\n else if (index >= 0 && !value) internalValue.splice(index, 1)\n\n selected.value = internalValue\n } else {\n const isSelected = selected.value.includes(id)\n if (props.mandatory && isSelected) return\n\n selected.value = (value ?? !isSelected) ? [id] : []\n }\n }\n\n function step (offset: number) {\n // getting an offset from selected value obviously won't work with multiple values\n if (props.multiple) consoleWarn('This method is not supported when using \"multiple\" prop')\n\n if (!selected.value.length) {\n const item = items.find(item => !item.disabled)\n item && (selected.value = [item.id])\n } else {\n const currentId = selected.value[0]\n const currentIndex = items.findIndex(i => i.id === currentId)\n\n let newIndex = (currentIndex + offset) % items.length\n let newItem = items[newIndex]\n\n while (newItem.disabled && newIndex !== currentIndex) {\n newIndex = (newIndex + offset) % items.length\n newItem = items[newIndex]\n }\n\n if (newItem.disabled) return\n\n selected.value = [items[newIndex].id]\n }\n }\n\n const state: GroupProvide = {\n register,\n unregister,\n selected,\n select,\n disabled: toRef(props, 'disabled'),\n prev: () => step(items.length - 1),\n next: () => step(1),\n isSelected: (id: number) => selected.value.includes(id),\n selectedClass: computed(() => props.selectedClass),\n items: computed(() => items),\n getItemIndex: (value: unknown) => getItemIndex(items, value),\n }\n\n provide(injectKey, state)\n\n return state\n}\n\nfunction getItemIndex (items: UnwrapRef<GroupItem[]>, value: unknown) {\n const ids = getIds(items, [value])\n\n if (!ids.length) return -1\n\n return items.findIndex(item => item.id === ids[0])\n}\n\nfunction getIds (items: UnwrapRef<GroupItem[]>, modelValue: any[]) {\n const ids = []\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n\n if (item.value != null) {\n if (modelValue.find(value => deepEqual(value, item.value)) != null) {\n ids.push(item.id)\n }\n } else if (modelValue.includes(i)) {\n ids.push(item.id)\n }\n }\n\n return ids\n}\n\nfunction getValues (items: UnwrapRef<GroupItem[]>, ids: any[]) {\n const values = []\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n\n if (ids.includes(item.id)) {\n values.push(item.value != null ? item.value : i)\n }\n }\n\n return values\n}\n"],"mappings":"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"}