bootstrap-vue-next
Version:
Seamless integration of Vue 3, Bootstrap 5, and TypeScript for modern, type-safe UI development
1 lines • 6.99 kB
Source Map (JSON)
{"version":3,"file":"orchestratorShared-BTC5xO6k.mjs","sources":["../src/composables/orchestratorShared.ts"],"sourcesContent":["import {\n type ComponentPublicInstance,\n inject,\n nextTick,\n provide,\n type Ref,\n ref,\n toValue,\n type WatchHandle,\n} from 'vue'\nimport type {\n ControllerKey,\n OrchestratorArrayValue,\n PromiseWithComponent,\n PromiseWithComponentInternal,\n} from '../types/ComponentOrchestratorTypes'\nimport type {BvTriggerableEvent} from '../utils'\nimport {orchestratorRegistryKey} from '../utils/keys'\n\nexport function buildPromise<TComponent, TParam, TArrayValue extends OrchestratorArrayValue>(\n _id: ControllerKey,\n store: Ref<TArrayValue[]>\n): {\n value: PromiseWithComponent<TComponent, TParam>\n resolve: (value: BvTriggerableEvent) => void\n stop: WatchHandle | undefined\n} {\n let resolveFunc: (value: BvTriggerableEvent) => void = () => {}\n\n const promise = new Promise<BvTriggerableEvent>((resolve) => {\n resolveFunc = resolve\n }) as PromiseWithComponent<TComponent, TParam>\n\n type RefWithMethods = ComponentPublicInstance<TComponent> & {\n show?: () => void\n hide?: (trigger?: string, noEmit?: boolean) => void\n toggle?: () => void\n }\n Object.assign(promise, {\n id: _id,\n ref: null as ComponentPublicInstance<TComponent> | null,\n show() {\n const refWithMethods = this.ref as RefWithMethods | null\n if (refWithMethods?.show) {\n refWithMethods.show()\n } else return this.set({modelValue: true} as unknown as Partial<TParam>)\n return promise\n },\n hide(trigger?: string) {\n const refWithMethods = this.ref as RefWithMethods | null\n if (refWithMethods?.hide) {\n refWithMethods.hide(trigger, true)\n } else return this.set({modelValue: false} as unknown as Partial<TParam>)\n return promise\n },\n toggle() {\n const currentItem = this.get() as TParam & {modelValue?: unknown}\n const refWithMethods = this.ref as RefWithMethods | null\n if (refWithMethods?.toggle) {\n refWithMethods.toggle()\n } else return this.set({modelValue: !currentItem?.modelValue} as unknown as Partial<TParam>)\n return promise\n },\n get(): TParam | undefined {\n return store.value.find((el) => el._self === _id) as TParam | undefined\n },\n set(val: Partial<TParam>) {\n const itemIndex = store.value.findIndex((el) => el._self === _id)\n const item = store.value[itemIndex]\n if (item) {\n const v = {...toValue(item), ...toValue(val)}\n if (item.modelValue !== v.modelValue) {\n item['onUpdate:modelValue']?.(v.modelValue as boolean)\n }\n const updatedItem = {\n ...v,\n modelValue: toValue(v.modelValue),\n } as TArrayValue\n // Only set title and body if they are defined in v\n const vRecord = v as Record<string, unknown>\n if ('title' in vRecord && vRecord.title !== undefined) {\n ;(updatedItem as Record<string, unknown>).title = toValue(vRecord.title)\n }\n if ('body' in vRecord && vRecord.body !== undefined) {\n ;(updatedItem as Record<string, unknown>).body = toValue(vRecord.body)\n }\n store.value.splice(itemIndex, 1, updatedItem)\n }\n return promise\n },\n async destroy() {\n const item = store.value.find((el) => el._self === _id)\n if (!item) return\n item.promise.stop?.()\n if (item.modelValue) {\n await new Promise((resolve) => {\n const prev = item['onHidden']\n item['onHidden'] = (e) => {\n prev?.(e)\n resolve(e)\n }\n nextTick(() => {\n this.hide('destroy')\n })\n })\n }\n store.value.splice(\n store.value.findIndex((el) => el._self === _id),\n 1\n )\n },\n async [Symbol.asyncDispose]() {\n await this.destroy()\n },\n } as PromiseWithComponentInternal<TComponent, TParam>)\n\n return {\n value: promise,\n resolve: resolveFunc,\n stop: undefined as WatchHandle | undefined,\n }\n}\n\nexport const _newOrchestratorRegistry = (): {\n store: Ref<OrchestratorArrayValue[]>\n _isOrchestratorInstalled: Ref<boolean>\n _isToastAppend: Ref<boolean>\n} => ({\n store: ref<OrchestratorArrayValue[]>([]),\n _isOrchestratorInstalled: ref(false),\n _isToastAppend: ref(false),\n})\n\nexport const useOrchestratorRegistry = () => {\n const orchestratorRegistry = inject(orchestratorRegistryKey, undefined)\n\n if (orchestratorRegistry) {\n return orchestratorRegistry\n }\n const newOrchestratorRegistry = _newOrchestratorRegistry()\n provide(orchestratorRegistryKey, newOrchestratorRegistry)\n return newOrchestratorRegistry\n}\n"],"names":[],"mappings":"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"}