UNPKG

hongluan-business-ui

Version:
178 lines (173 loc) 4.99 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var vue = require('vue'); var core = require('@vueuse/core'); var hongluanUi = require('hongluan-ui'); require('../../modeless-dialog/index.js'); var isServer = require('../../../utils/isServer.js'); var useRestoreActive = require('../../../utils/use-restore-active.js'); var manager = require('../../modeless-dialog/src/manager.js'); const CLOSE_EVENT = "close"; const OPEN_EVENT = "open"; const CLOSED_EVENT = "closed"; const OPENED_EVENT = "opened"; const ITEM_ADDED_EVENT = "item-added"; const ITEM_CLOSED_EVENT = "item-closed"; const ITEM_RESTORED_EVENT = "item-restored"; const UPDATE_MODEL_EVENT = "update:modelValue"; const useDockContainer = (props, scrollbarRef) => { const { nextZIndex } = hongluanUi.useZIndex(); const visible = vue.ref(false); const closed = vue.ref(false); const zIndex = vue.ref(props.zIndex || nextZIndex()); const dockItems = vue.ref([]); const animName = vue.computed(() => { let name = props.animationName; if (!name) { switch (props.placement) { case "left": name = "slideRightSide"; break; case "right": name = "slideLeftSide"; break; case "bottom": name = "slideTopSide"; break; case "top": name = "slideBottomSide"; break; } } return name; }); let stopOpenTimer = void 0; let stopCloseTimer = void 0; const { emit } = vue.getCurrentInstance(); function afterEnter() { emit(OPENED_EVENT); } function afterLeave() { emit(CLOSED_EVENT); emit(UPDATE_MODEL_EVENT, false); } function beforeLeave() { emit(CLOSE_EVENT); } function open() { stopCloseTimer == null ? void 0 : stopCloseTimer(); stopOpenTimer == null ? void 0 : stopOpenTimer(); if (props.openDelay && props.openDelay > 0) { ({ stop: stopOpenTimer } = core.useTimeoutFn(() => doOpen(), props.openDelay)); } else { doOpen(); } } function close() { stopOpenTimer == null ? void 0 : stopOpenTimer(); stopCloseTimer == null ? void 0 : stopCloseTimer(); if (props.closeDelay && props.closeDelay > 0) { ({ stop: stopCloseTimer } = core.useTimeoutFn(() => doClose(), props.closeDelay)); } else { doClose(); } } function hide(shouldCancel) { if (shouldCancel) return; closed.value = true; visible.value = false; } function handleClose() { if (props.beforeClose) { props.beforeClose(hide); } else { close(); } } function doOpen() { if (isServer["default"]) { return; } visible.value = true; } function doClose() { visible.value = false; } useRestoreActive.useRestoreActive(visible); vue.watch(() => props.modelValue, (val) => { if (val) { closed.value = false; open(); emit(OPEN_EVENT); zIndex.value = props.zIndex ? zIndex.value++ : nextZIndex(); } else { if (visible.value) { close(); } } }); vue.watch(() => dockItems.value.length, () => { vue.nextTick(() => { var _a; (_a = scrollbarRef.value) == null ? void 0 : _a.update(); }); }); function addDockItems(id) { const dialog = manager.ModelessDialogManager.get(id); const item = { id, title: dialog.title || document.querySelector(`#${id} .panel-header`).innerText, snapshot: dialog.snapshot }; dockItems.value.push(item); emit(ITEM_ADDED_EVENT, item, dockItems.value); } function closeDockItem(id) { const itemIdx = dockItems.value.findIndex((i) => i.id === id); const itemsDel = dockItems.value.splice(itemIdx, 1); manager.ModelessDialogManager.get(id).close(); emit(ITEM_CLOSED_EVENT, itemsDel[0], dockItems.value); } function restoreDockItem(id) { const itemIdx = dockItems.value.findIndex((i) => i.id === id); const itemsDel = dockItems.value.splice(itemIdx, 1); manager.ModelessDialogManager.get(id).toggleShow(); emit(ITEM_RESTORED_EVENT, itemsDel[0], dockItems.value); } const eventRemover = manager.ModelessDialogManager.addEventListener({ collapse: addDockItems }); vue.onMounted(() => { if (props.modelValue) { visible.value = true; open(); } }); vue.onBeforeUnmount(() => { eventRemover(); }); return { afterEnter, afterLeave, beforeLeave, handleClose, closed, visible, zIndex, animName, dockItems, closeDockItem, restoreDockItem }; }; exports.CLOSED_EVENT = CLOSED_EVENT; exports.CLOSE_EVENT = CLOSE_EVENT; exports.ITEM_ADDED_EVENT = ITEM_ADDED_EVENT; exports.ITEM_CLOSED_EVENT = ITEM_CLOSED_EVENT; exports.ITEM_RESTORED_EVENT = ITEM_RESTORED_EVENT; exports.OPENED_EVENT = OPENED_EVENT; exports.OPEN_EVENT = OPEN_EVENT; exports.UPDATE_MODEL_EVENT = UPDATE_MODEL_EVENT; exports.useDockContainer = useDockContainer; //# sourceMappingURL=use-dock-container.js.map