|
7 | 7 | unref,
|
8 | 8 | warn,
|
9 | 9 | }from'@vue/runtime-core';
|
10 |
| -import{NSVElement}from'../dom'; |
| 10 | +import{NSVElement,NSVRoot}from'../dom'; |
11 | 11 | import{createNativeView}from'../runtimeHelpers';
|
12 | 12 | import{isObject}from'@vue/shared';
|
13 | 13 |
|
@@ -74,29 +74,56 @@ export async function $showModal<T = any>(
|
74 | 74 |
|
75 | 75 | returnnewPromise((resolve)=>{
|
76 | 76 | letisResolved=false;
|
77 |
| -letview=createNativeView(component,options.props); |
| 77 | +letisReloading=false; |
| 78 | +letroot=newNSVRoot(); |
| 79 | + |
| 80 | +constreloadModal=()=>{ |
| 81 | +isReloading=true; |
| 82 | +closeModal(); |
| 83 | +// reopening is done in `closeCallback` |
| 84 | +}; |
| 85 | + |
| 86 | +letview=createNativeView(component,options.props,{ |
| 87 | +reload:reloadModal, |
| 88 | +}); |
78 | 89 |
|
79 |
| -constcloseModal=(...args:any[])=>modalContent.closeModal(...args); |
80 | 90 | constcloseCallback=(data?:T)=>{
|
81 | 91 | if(isResolved)return;
|
| 92 | + |
| 93 | +if(isReloading){ |
| 94 | +view.unmount(); |
| 95 | +view.mount(root); |
| 96 | +openModal({ |
| 97 | +// todo: for this to work nicely, we'd need to add `animated: false` to `closeModal` as well |
| 98 | +// but not currently possible without a core change. |
| 99 | +// animated: false, |
| 100 | +}); |
| 101 | +isReloading=false; |
| 102 | + |
| 103 | +return; |
| 104 | +} |
| 105 | + |
82 | 106 | isResolved=true;
|
83 | 107 | view.unmount();
|
84 | 108 | view=null;
|
85 | 109 |
|
86 | 110 | resolve(data);
|
87 | 111 | };
|
88 | 112 |
|
| 113 | +constopenModal=(additionalOptions?:Partial<ShowModalOptions>)=>{ |
| 114 | +modalTarget.showModal(view.nativeView,{ |
| 115 | + ...options, |
| 116 | +context:null, |
| 117 | + closeCallback, |
| 118 | + ...additionalOptions, |
| 119 | +}); |
| 120 | +}; |
| 121 | +constcloseModal=(...args:any[])=>view.nativeView?.closeModal(...args); |
| 122 | + |
89 | 123 | view.context.config.globalProperties.$closeModal=closeModal;
|
90 | 124 | view.context.config.globalProperties.$modal={close:closeModal};
|
91 | 125 |
|
92 |
| -view.mount(); |
93 |
| - |
94 |
| -constmodalContent=view.nativeView; |
95 |
| - |
96 |
| -modalTarget.showModal(modalContent,{ |
97 |
| - ...options, |
98 |
| -context:null, |
99 |
| - closeCallback, |
100 |
| -}); |
| 126 | +view.mount(root); |
| 127 | +openModal(); |
101 | 128 | });
|
102 | 129 | }
|