|
|
|
|
@ -1,6 +1,14 @@
|
|
|
|
|
import type { ExtendedModalApi, ModalApiOptions, ModalProps } from './modal';
|
|
|
|
|
|
|
|
|
|
import { defineComponent, h, inject, nextTick, provide, reactive } from 'vue';
|
|
|
|
|
import {
|
|
|
|
|
defineComponent,
|
|
|
|
|
h,
|
|
|
|
|
inject,
|
|
|
|
|
nextTick,
|
|
|
|
|
provide,
|
|
|
|
|
reactive,
|
|
|
|
|
ref,
|
|
|
|
|
} from 'vue';
|
|
|
|
|
|
|
|
|
|
import { useStore } from '@vben-core/shared/store';
|
|
|
|
|
|
|
|
|
|
@ -18,6 +26,7 @@ export function useVbenModal<TParentModalProps extends ModalProps = ModalProps>(
|
|
|
|
|
const { connectedComponent } = options;
|
|
|
|
|
if (connectedComponent) {
|
|
|
|
|
const extendedApi = reactive({});
|
|
|
|
|
const isModalReady = ref(true);
|
|
|
|
|
const Modal = defineComponent(
|
|
|
|
|
(props: TParentModalProps, { attrs, slots }) => {
|
|
|
|
|
provide(USER_MODAL_INJECT_KEY, {
|
|
|
|
|
@ -27,6 +36,11 @@ export function useVbenModal<TParentModalProps extends ModalProps = ModalProps>(
|
|
|
|
|
Object.setPrototypeOf(extendedApi, api);
|
|
|
|
|
},
|
|
|
|
|
options,
|
|
|
|
|
async reCreateModal() {
|
|
|
|
|
isModalReady.value = false;
|
|
|
|
|
await nextTick();
|
|
|
|
|
isModalReady.value = true;
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
checkProps(extendedApi as ExtendedModalApi, {
|
|
|
|
|
...props,
|
|
|
|
|
@ -35,7 +49,7 @@ export function useVbenModal<TParentModalProps extends ModalProps = ModalProps>(
|
|
|
|
|
});
|
|
|
|
|
return () =>
|
|
|
|
|
h(
|
|
|
|
|
connectedComponent,
|
|
|
|
|
isModalReady.value ? connectedComponent : 'div',
|
|
|
|
|
{
|
|
|
|
|
...props,
|
|
|
|
|
...attrs,
|
|
|
|
|
@ -62,6 +76,13 @@ export function useVbenModal<TParentModalProps extends ModalProps = ModalProps>(
|
|
|
|
|
options.onOpenChange?.(isOpen);
|
|
|
|
|
injectData.options?.onOpenChange?.(isOpen);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
mergedOptions.onClosed = () => {
|
|
|
|
|
options.onClosed?.();
|
|
|
|
|
if (options.destroyOnClose) {
|
|
|
|
|
injectData.reCreateModal?.();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
const api = new ModalApi(mergedOptions);
|
|
|
|
|
|
|
|
|
|
const extendedApi: ExtendedModalApi = api as never;
|
|
|
|
|
|