{"version":3,"file":"PortalWrapper.cjs","sources":["../../../../../../packages/vue-components/portal/src/PortalWrapper.tsx"],"sourcesContent":["import { useScrollLocker } from '@antdv/hooks';\nimport { booleanType, canUseDom, PropTypes, raf } from '@antdv/utils';\nimport {\n  computed,\n  defineComponent,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  onUpdated,\n  shallowRef,\n  watch,\n} from 'vue';\nimport Portal from './Portal';\n\nlet openCount = 0;\nconst supportDom = canUseDom();\n\n/** @private Test usage only */\nexport function getOpenCount() {\n  return process.env.NODE_ENV === 'test' ? openCount : 0;\n}\n\nfunction getParent(getContainer: GetContainer) {\n  if (!supportDom)\n    return null;\n\n  if (getContainer) {\n    if (typeof getContainer === 'string')\n      return document.querySelectorAll(getContainer)[0] as HTMLElement;\n\n    if (typeof getContainer === 'function')\n      return getContainer();\n\n    if (typeof getContainer === 'object' && getContainer instanceof window.HTMLElement)\n      return getContainer;\n  }\n  return document.body;\n}\n\nexport type GetContainer = string | HTMLElement | (() => HTMLElement);\n\nexport default defineComponent({\n  compatConfig: { MODE: 3 },\n  name: 'PortalWrapper',\n  inheritAttrs: false,\n  props: {\n    wrapperClassName: String,\n    forceRender: { type: Boolean, default: undefined },\n    getContainer: PropTypes.any,\n    visible: { type: Boolean, default: undefined },\n    autoLock: booleanType(),\n    didUpdate: Function,\n  },\n\n  setup(props, { slots }) {\n    const container = shallowRef<HTMLElement>();\n    const componentRef = shallowRef();\n    const rafId = shallowRef<number>();\n    const triggerUpdate = shallowRef(1);\n    const defaultContainer = canUseDom() && document.createElement('div');\n    const removeCurrentContainer = () => {\n      // Portal will remove from `parentNode`.\n      // Let's handle this again to avoid refactor issue.\n      if (container.value === defaultContainer)\n        container.value?.parentNode?.removeChild(container.value);\n\n      container.value = null;\n    };\n    let parent: HTMLElement = null;\n    const attachToParent = (force = false) => {\n      if (force || (container.value && !container.value.parentNode)) {\n        parent = getParent(props.getContainer);\n        if (parent) {\n          parent.appendChild(container.value);\n          return true;\n        }\n\n        return false;\n      }\n\n      return true;\n    };\n    const getContainer = () => {\n      if (!supportDom)\n        return null;\n\n      if (!container.value) {\n        container.value = defaultContainer;\n        attachToParent(true);\n      }\n      setWrapperClassName();\n      return container.value;\n    };\n    const setWrapperClassName = () => {\n      const { wrapperClassName } = props;\n      if (container.value && wrapperClassName && wrapperClassName !== container.value.className)\n        container.value.className = wrapperClassName;\n    };\n    onUpdated(() => {\n      setWrapperClassName();\n      attachToParent();\n    });\n\n    useScrollLocker(\n      computed(() => {\n        return (\n          props.autoLock\n          && props.visible\n          && canUseDom()\n          && (container.value === document.body || container.value === defaultContainer)\n        );\n      }),\n    );\n    onMounted(() => {\n      let init = false;\n      watch(\n        [() => props.visible, () => props.getContainer],\n        ([visible, _], [prevVisible, prevGetContainer]) => {\n          // Update count\n          if (supportDom) {\n            parent = getParent(props.getContainer);\n            if (parent === document.body) {\n              if (visible && !prevVisible)\n                openCount += 1;\n              else if (init)\n                openCount -= 1;\n            }\n          }\n\n          if (init) {\n            // Clean up container if needed\n            const getContainerIsFunc\n              = typeof props.getContainer === 'function' && typeof prevGetContainer === 'function';\n            if (\n              getContainerIsFunc\n                ? props.getContainer.toString() !== prevGetContainer.toString()\n                : props.getContainer !== prevGetContainer\n            ) {\n              removeCurrentContainer();\n            }\n          }\n          init = true;\n        },\n        { immediate: true, flush: 'post' },\n      );\n\n      nextTick(() => {\n        if (!attachToParent()) {\n          rafId.value = raf(() => {\n            triggerUpdate.value += 1;\n          });\n        }\n      });\n    });\n\n    onBeforeUnmount(() => {\n      const { visible } = props;\n      if (supportDom && parent === document.body) {\n        // 离开时不会 render， 导到离开时数值不变，改用 func 。。\n        openCount = visible && openCount ? openCount - 1 : openCount;\n      }\n      removeCurrentContainer();\n      raf.cancel(rafId.value);\n    });\n    return () => {\n      const { forceRender, visible } = props;\n      let portal = null;\n      const childProps = {\n        getOpenCount: () => openCount,\n        getContainer,\n      };\n      if (triggerUpdate.value && (forceRender || visible || componentRef.value)) {\n        portal = (\n          <Portal\n            getContainer={getContainer}\n            ref={componentRef}\n            didUpdate={props.didUpdate}\n            v-slots={{ default: () => slots.default?.(childProps) }}\n          >\n          </Portal>\n        );\n      }\n      return portal;\n    };\n  },\n});\n"],"names":["openCount","supportDom","canUseDom","getOpenCount","process","env","NODE_ENV","getParent","getContainer","document","querySelectorAll","window","HTMLElement","body","defineComponent","compatConfig","MODE","name","inheritAttrs","props","wrapperClassName","String","forceRender","type","Boolean","default","undefined","PropTypes","any","visible","autoLock","booleanType","didUpdate","Function","setup","slots","container","shallowRef","componentRef","rafId","triggerUpdate","defaultContainer","createElement","removeCurrentContainer","value","parentNode","removeChild","parent","attachToParent","force","appendChild","setWrapperClassName","className","onUpdated","useScrollLocker","computed","onMounted","init","watch","_","prevVisible","prevGetContainer","getContainerIsFunc","toString","immediate","flush","nextTick","raf","onBeforeUnmount","cancel","portal","childProps","_createVNode","Portal"],"mappings":"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"}