HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/buyercall/node_modules/bootstrap-vue-next/src/composables/useModal.ts
import {
  type ComponentInternalInstance,
  computed,
  getCurrentInstance,
  type MaybeRefOrGetter,
  toRef,
  toValue,
} from 'vue'
import {useSharedModalStack} from './useModalManager'

export default (id: MaybeRefOrGetter<string | undefined> = undefined) => {
  const {registry} = useSharedModalStack()
  const instance = getCurrentInstance()

  const modalComponent = computed(() => {
    const resolvedId = toValue(id)
    if (resolvedId) {
      return registry.value.find((modal) => modal.exposed?.id.value === resolvedId) || null
    }

    if (!instance) {
      return null
    }

    return findBModal(instance)
  })

  const modal = toRef(() => modalComponent.value?.proxy)

  return {
    show() {
      modalComponent.value?.exposed?.show()
    },
    hide(trigger = '') {
      modalComponent.value?.exposed?.hide(trigger)
    },
    modal,
  }
}

const findBModal = (component: ComponentInternalInstance): ComponentInternalInstance | null => {
  if (!component.parent) {
    return null
  }

  if (component.parent.type.__name === 'BModal') {
    return component.parent
  }

  return findBModal(component.parent)
}