bootstrap-vue-next
Version:
Seamless integration of Vue 3, Bootstrap 5, and TypeScript for modern, type-safe UI development
1 lines • 8.85 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/composables/useRegistry/index.ts"],"sourcesContent":["import {\n type ComponentInternalInstance,\n computed,\n inject,\n provide,\n readonly,\n type Ref,\n ref,\n} from 'vue'\nimport {\n breadcrumbGlobalIndexKey,\n breadcrumbRegistryKey,\n modalManagerKey,\n type RegisterShowHideFnInput,\n type RegisterShowHideInstances,\n type RegisterShowHideMapValue,\n rtlRegistryKey,\n showHideRegistryKey,\n} from '../../utils/keys'\nimport type {BAppProps} from '../../types/ComponentProps'\nimport type {BreadcrumbItemRaw} from '../../types/BreadcrumbTypes'\n\nexport const useRegistry = (rtl: BAppProps['rtl'] = false) => {\n const showHideStorage = inject(showHideRegistryKey, null)\n if (!showHideStorage) {\n const {register, values} = _newShowHideRegistry()\n provide(showHideRegistryKey, {register, values})\n }\n\n const modalManager = inject(modalManagerKey, null)\n if (!modalManager) {\n const stack: Ref<Map<number, ComponentInternalInstance>> = ref(new Map())\n\n const countStack = computed(() => stack.value.size)\n const valuesStack = computed(() => [...stack.value.values()])\n const lastStack = computed(() => valuesStack.value[valuesStack.value.length - 1])\n\n const pushStack = (modal: Readonly<ComponentInternalInstance>) => {\n stack.value.set(modal.uid, modal)\n }\n const removeStack = (modal: Readonly<ComponentInternalInstance>) => {\n stack.value.delete(modal.uid)\n }\n\n /**\n * A collection of all registered modals\n */\n const registry: Ref<Map<number, ComponentInternalInstance>> = ref(new Map())\n\n // Utility getters not made, would not be used (count, last)\n\n const pushRegistry = (modal: Readonly<ComponentInternalInstance>) => {\n registry.value.set(modal.uid, modal)\n }\n const removeRegistry = (modal: Readonly<ComponentInternalInstance>) => {\n registry.value.delete(modal.uid)\n }\n\n provide(modalManagerKey, {\n countStack,\n lastStack,\n registry: computed(() => registry.value),\n stack: valuesStack,\n pushStack,\n removeStack,\n pushRegistry,\n removeRegistry,\n })\n }\n\n const breadcrumb = inject(breadcrumbRegistryKey, null)\n if (!breadcrumb) {\n const items = ref<Record<string, BreadcrumbItemRaw[]>>({\n [breadcrumbGlobalIndexKey]: [],\n })\n const reset = (key: string = breadcrumbGlobalIndexKey) => {\n items.value[key] = []\n }\n\n provide(breadcrumbRegistryKey, {items, reset})\n }\n\n const rtlRegistry = inject(rtlRegistryKey, null)\n if (!rtlRegistry) {\n const rtlDefault = false\n const localeDefault = undefined\n\n const rtlInitial = typeof rtl === 'boolean' ? rtlDefault : (rtl?.rtlInitial ?? rtlDefault)\n\n const localeInitial =\n typeof rtl === 'boolean' ? localeDefault : (rtl?.localeInitial ?? localeDefault)\n\n const isRtl = ref(rtlInitial)\n const locale = ref(localeInitial)\n\n provide(rtlRegistryKey, {isRtl, locale})\n }\n}\n\n// Helper function to create getActive method for instance holders\nconst createGetActive = (instances: RegisterShowHideMapValue[]) => () =>\n instances.length > 0 ? instances[instances.length - 1] : undefined\n\nexport const _newShowHideRegistry = () => {\n const values: Ref<Map<string, RegisterShowHideInstances>> = ref(new Map())\n\n const register = ({\n id,\n component,\n value,\n toggle,\n show,\n hide,\n registerTrigger,\n unregisterTrigger,\n }: RegisterShowHideFnInput) => {\n let currentId = id\n const instanceValue: RegisterShowHideMapValue = {\n id,\n component,\n value: readonly(value),\n toggle,\n show,\n hide,\n registerTrigger,\n unregisterTrigger,\n }\n\n // Get or create the instances array for this ID\n let instancesHolder = values.value.get(currentId)\n if (!instancesHolder) {\n const instances: RegisterShowHideMapValue[] = []\n instancesHolder = {\n instances,\n // Returns the last mounted instance (most recent)\n getActive: createGetActive(instances),\n }\n values.value.set(currentId, instancesHolder)\n }\n\n // Append this instance to the array\n instancesHolder.instances.push(instanceValue)\n\n const componentUid = component.uid\n\n return {\n unregister() {\n const holder = values.value.get(currentId)\n if (!holder) return\n\n // Remove only this component's instance by UID\n const index = holder.instances.findIndex(\n (inst: RegisterShowHideMapValue) => inst.component.uid === componentUid\n )\n if (index !== -1) {\n holder.instances.splice(index, 1)\n }\n\n // Clean up the map entry if no instances remain\n if (holder.instances.length === 0) {\n values.value.delete(currentId)\n }\n },\n updateId(newId: string, oldId: string) {\n const holder = values.value.get(oldId)\n if (!holder) return\n\n // Find this component's instance in the array\n const instance = holder.instances.find(\n (inst: RegisterShowHideMapValue) => inst.component.uid === componentUid\n )\n if (!instance) return\n\n // Update the ID in the instance\n instance.id = newId\n\n // Get or create holder for new ID\n let newHolder = values.value.get(newId)\n if (!newHolder) {\n const instances: RegisterShowHideMapValue[] = []\n newHolder = {\n instances,\n getActive: createGetActive(instances),\n }\n values.value.set(newId, newHolder)\n }\n\n // Move this instance to the new ID's array\n const index = holder.instances.findIndex(\n (inst: RegisterShowHideMapValue) => inst.component.uid === componentUid\n )\n if (index !== -1) {\n holder.instances.splice(index, 1)\n newHolder.instances.push(instance)\n }\n\n // Clean up old ID if no instances remain\n if (holder.instances.length === 0) {\n values.value.delete(oldId)\n }\n // Keep local id in sync so unregister() uses the latest key\n currentId = newId\n },\n }\n }\n return {\n register,\n values,\n }\n}\n"],"mappings":"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"}