UNPKG

tav-ui

Version:
131 lines (128 loc) 3.77 kB
import { reactive, ref, getCurrentInstance, onUnmounted, unref, computed, toRaw, watchEffect, nextTick } from 'vue'; import { tryOnUnmounted } from '@vueuse/core'; import { isEqual } from 'lodash-es'; import { isFunction } from '../../../../utils/is2.mjs'; import { error } from '../../../../utils/log2.mjs'; const dataTransfer = reactive({}); const isProdMode = () => true; const visibleData = reactive({}); function useModal() { const modal = ref(null); const loaded = ref(false); const uid = ref(""); function register(modalMethod, uuid) { if (!getCurrentInstance()) throw new Error("useModal() can only be used inside setup() or functional components!"); uid.value = uuid; isProdMode() && onUnmounted(() => { modal.value = null; loaded.value = false; dataTransfer[unref(uid)] = null; }); if (unref(loaded) && isProdMode() && modalMethod === unref(modal)) return; modal.value = modalMethod; loaded.value = true; modalMethod.emitVisible = (visible, uid2) => { visibleData[uid2] = visible; }; } const getInstance = () => { const instance = unref(modal); if (!instance) error("useModal instance is undefined!"); return instance; }; const methods = { setModalProps: (props) => { getInstance()?.setModalProps(props); }, getVisible: computed(() => { return visibleData[~~unref(uid)]; }), redoModalHeight: () => { getInstance()?.redoModalHeight?.(); }, redoThumbHeight: () => { getInstance()?.redoThumbHeight?.(); }, openModal: (visible = true, data, openOnSet = true) => { getInstance()?.setModalProps({ visible }); if (!data) return; const id = unref(uid); if (openOnSet) { dataTransfer[id] = null; dataTransfer[id] = toRaw(data); return; } const equal = isEqual(toRaw(dataTransfer[id]), toRaw(data)); if (!equal) dataTransfer[id] = toRaw(data); }, closeModal: () => { getInstance()?.setModalProps({ visible: false }); } }; return [register, methods]; } const useModalInner = (callbackFn) => { const modalInstanceRef = ref(null); const currentInstance = getCurrentInstance(); const uidRef = ref(""); const getInstance = () => { const instance = unref(modalInstanceRef); if (!instance) error("useModalInner instance is undefined!"); return instance; }; const register = (modalInstance, uuid) => { isProdMode() && tryOnUnmounted(() => { modalInstanceRef.value = null; }); uidRef.value = uuid; modalInstanceRef.value = modalInstance; currentInstance?.emit("register", modalInstance, uuid); }; watchEffect(() => { const data = dataTransfer[unref(uidRef)]; if (!data) return; if (!callbackFn || !isFunction(callbackFn)) return; nextTick(() => { callbackFn(data); }); }); return [ register, { changeLoading: (loading = true) => { getInstance()?.setModalProps({ loading }); }, getVisible: computed(() => { return visibleData[~~unref(uidRef)]; }), changeOkLoading: (loading = true) => { getInstance()?.setModalProps({ confirmLoading: loading }); }, closeModal: () => { getInstance()?.setModalProps({ visible: false }); }, setModalProps: (props) => { getInstance()?.setModalProps(props); }, redoModalHeight: () => { const callRedo = getInstance()?.redoModalHeight; callRedo && callRedo(); }, redoThumbHeight() { getInstance()?.redoThumbHeight?.(); } } ]; }; export { useModal, useModalInner }; //# sourceMappingURL=useModal2.mjs.map