UNPKG

tdesign-vue-next

Version:
1 lines 5.89 kB
{"version":3,"file":"usePopupManager.mjs","sources":["../../../components/hooks/usePopupManager.ts"],"sourcesContent":["// https://github.dev/arco-design/arco-design-vue\nimport { onMounted, onBeforeUnmount, readonly, Ref, ref, watch } from 'vue';\nexport type PopupType = 'popup' | 'dialog' | 'message';\n\nconst POPUP_BASE_Z_INDEX = 1000;\nconst MESSAGE_BASE_Z_INDEX = 5000;\nconst Z_INDEX_STEP = 1;\n\nclass PopupManager {\n private popupStack = {\n popup: new Set<number>(),\n dialog: new Set<number>(),\n message: new Set<number>(),\n };\n\n private getNextZIndex = (type: PopupType) => {\n const current =\n type === 'message'\n ? Array.from(this.popupStack.message).pop() || MESSAGE_BASE_Z_INDEX\n : Array.from(this.popupStack.popup).pop() || POPUP_BASE_Z_INDEX;\n return current + Z_INDEX_STEP;\n };\n\n public add = (type: PopupType) => {\n const zIndex = this.getNextZIndex(type);\n this.popupStack[type].add(zIndex);\n if (type === 'dialog') {\n this.popupStack.popup.add(zIndex);\n }\n return zIndex;\n };\n\n public delete = (zIndex: number, type: PopupType) => {\n this.popupStack[type].delete(zIndex);\n if (type === 'dialog') {\n this.popupStack.popup.delete(zIndex);\n }\n };\n\n public isLastDialog = (zIndex: number) => {\n if (this.popupStack.dialog.size > 1) {\n return zIndex === Array.from(this.popupStack.dialog).pop();\n }\n return true;\n };\n}\n\nconst popupManager = new PopupManager();\n\nexport default function usePopupManager(\n type: PopupType,\n {\n visible,\n runOnMounted,\n }: {\n visible?: Ref<boolean>;\n runOnMounted?: boolean;\n } = {},\n) {\n const zIndex = ref(0);\n\n const open = () => {\n zIndex.value = popupManager.add(type);\n };\n\n const close = () => {\n popupManager.delete(zIndex.value, type);\n };\n\n const isLastDialog = () => {\n if (type === 'dialog') {\n return popupManager.isLastDialog(zIndex.value);\n }\n return false;\n };\n\n watch(\n () => visible?.value,\n (visible) => {\n if (visible) {\n open();\n } else {\n close();\n }\n },\n {\n immediate: true,\n },\n );\n\n if (runOnMounted) {\n onMounted(() => {\n open();\n });\n\n onBeforeUnmount(() => {\n close();\n });\n }\n\n return {\n zIndex: readonly(zIndex),\n open,\n close,\n isLastDialog,\n };\n}\n"],"names":["POPUP_BASE_Z_INDEX","MESSAGE_BASE_Z_INDEX","Z_INDEX_STEP","PopupManager","_createClass","_this","_classCallCheck","_defineProperty","popup","Set","dialog","message","type","current","Array","from","popupStack","pop","zIndex","getNextZIndex","add","size","popupManager","usePopupManager","_ref","arguments","length","undefined","visible","runOnMounted","ref","open","value","close","isLastDialog","watch","immediate","onMounted","onBeforeUnmount","readonly"],"mappings":"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"}