{"version":3,"file":"use-dock-container.mjs","sources":["../../../../../../packages/components/dock-container/src/use-dock-container.ts"],"sourcesContent":["import { ref, watch, onMounted, getCurrentInstance, computed, onBeforeUnmount, nextTick } from 'vue'\nimport { useTimeoutFn } from '@vueuse/core'\nimport { useZIndex } from 'hongluan-ui'\nimport { ModelessDialogManager } from '@hongluan-business-ui/components/modeless-dialog'\nimport isServer from '@hongluan-business-ui/utils/isServer'\nimport { useRestoreActive } from '@hongluan-business-ui/utils/use-restore-active'\n\nimport type { Ref } from 'vue'\nimport type { DockContainerProps, DockItem } from './dock-container'\n\nexport const CLOSE_EVENT = 'close'\nexport const OPEN_EVENT = 'open'\nexport const CLOSED_EVENT = 'closed'\nexport const OPENED_EVENT = 'opened'\nexport const ITEM_ADDED_EVENT = 'item-added'\nexport const ITEM_CLOSED_EVENT = 'item-closed'\nexport const ITEM_RESTORED_EVENT = 'item-restored'\nexport const UPDATE_MODEL_EVENT = 'update:modelValue'\n\nexport const useDockContainer = (\n  props: DockContainerProps,\n  scrollbarRef: Ref<{ update: () => void; }>,\n) => {\n  const { nextZIndex } = useZIndex()\n  const visible = ref(false)\n  const closed = ref(false)\n  const zIndex = ref(props.zIndex || nextZIndex())\n  const dockItems = ref<Array<DockItem>>([])\n\n  const animName = computed(() => {\n    let name = props.animationName\n    if (!name) {\n      switch (props.placement) {\n        case 'left':\n          name = 'slideRightSide'\n          break\n        case 'right':\n          name = 'slideLeftSide'\n          break\n        case 'bottom':\n          name = 'slideTopSide'\n          break\n        case 'top':\n          name = 'slideBottomSide'\n          break\n      }\n    }\n    return name\n  })\n\n  let stopOpenTimer: (() => void) | undefined = undefined\n  let stopCloseTimer: (() => void) | undefined = undefined\n\n  const { emit } = getCurrentInstance()\n\n  function afterEnter() {\n    emit(OPENED_EVENT)\n  }\n\n  function afterLeave() {\n    emit(CLOSED_EVENT)\n    emit(UPDATE_MODEL_EVENT, false)\n  }\n\n  function beforeLeave() {\n    emit(CLOSE_EVENT)\n  }\n\n  function open() {\n    stopCloseTimer?.()\n    stopOpenTimer?.()\n    if (props.openDelay && props.openDelay > 0) {\n      ({ stop: stopOpenTimer } = useTimeoutFn(() => doOpen(), props.openDelay))\n    } else {\n      doOpen()\n    }\n  }\n\n  function close() {\n    // if (this.willClose && !this.willClose()) return;\n    stopOpenTimer?.()\n    stopCloseTimer?.()\n\n    if (props.closeDelay && props.closeDelay > 0) {\n      ({ stop: stopCloseTimer } = useTimeoutFn(() => doClose(), props.closeDelay))\n    } else {\n      doClose()\n    }\n  }\n\n  function hide(shouldCancel: boolean) {\n    if (shouldCancel) return\n    closed.value = true\n    visible.value = false\n  }\n\n  function handleClose() {\n    if (props.beforeClose) {\n      props.beforeClose(hide)\n    } else {\n      close()\n    }\n  }\n\n  function doOpen() {\n    if (isServer) {\n      return\n    }\n    visible.value = true\n  }\n\n  function doClose() {\n    visible.value = false\n  }\n\n  useRestoreActive(visible)\n\n  watch(() => props.modelValue, val => {\n    if (val) {\n      closed.value = false\n      open()\n      emit(OPEN_EVENT)\n      zIndex.value = props.zIndex ? zIndex.value++ : nextZIndex()\n    } else {\n      if (visible.value) {\n        close()\n      }\n    }\n  })\n\n  watch(() => dockItems.value.length, () => {\n    nextTick(() => {\n      scrollbarRef.value?.update()\n    })\n  })\n\n  function addDockItems(id: string) {\n    const dialog = ModelessDialogManager.get(id)\n    const item = {\n      id,\n      title: dialog.title || (document.querySelector(`#${id} .panel-header`) as HTMLElement).innerText,\n      snapshot: dialog.snapshot,\n    }\n    dockItems.value.push(item)\n\n    emit(ITEM_ADDED_EVENT, item, dockItems.value)\n  }\n  function closeDockItem(id: string) {\n    const itemIdx = dockItems.value.findIndex(i => i.id === id)\n    const itemsDel = dockItems.value.splice(itemIdx, 1)\n    ModelessDialogManager.get(id).close()\n\n    emit(ITEM_CLOSED_EVENT, itemsDel[0], dockItems.value)\n  }\n  function restoreDockItem(id: string) {\n    const itemIdx = dockItems.value.findIndex(i => i.id === id)\n    const itemsDel = dockItems.value.splice(itemIdx, 1)\n    ModelessDialogManager.get(id).toggleShow()\n\n    emit(ITEM_RESTORED_EVENT, itemsDel[0], dockItems.value)\n  }\n  const eventRemover = ModelessDialogManager.addEventListener({\n    collapse: addDockItems,\n  })\n\n  onMounted(() => {\n    if (props.modelValue) {\n      visible.value = true\n      open()\n    }\n  })\n\n  onBeforeUnmount(() => {\n    eventRemover()\n  })\n\n  return {\n    afterEnter,\n    afterLeave,\n    beforeLeave,\n    handleClose,\n    closed,\n    visible,\n    zIndex,\n    animName,\n    dockItems,\n    closeDockItem,\n    restoreDockItem,\n  }\n}\n"],"names":[],"mappings":"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"}