antd-overlay 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +134 -9
- package/dist/index.cjs +269 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +163 -4
- package/dist/index.d.ts +163 -4
- package/dist/index.js +258 -4
- package/dist/index.js.map +1 -1
- package/docs/ai/api-manifest.json +217 -3
- package/docs/ai/constraints.md +33 -1
- package/docs/ai/contracts.json +40 -2
- package/docs/ai/quick-reference.md +75 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# antd-overlay
|
|
2
2
|
|
|
3
|
-
Ant Design Modal/Drawer 命令式调用方案。
|
|
3
|
+
Ant Design Modal/Drawer/Tour 命令式调用方案。
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/antd-overlay)
|
|
6
6
|
[](https://github.com/RaineySpace/antd-overlay/blob/main/LICENSE)
|
|
@@ -8,7 +8,7 @@ Ant Design Modal/Drawer 命令式调用方案。
|
|
|
8
8
|
## 特性
|
|
9
9
|
|
|
10
10
|
- 🚀 **命令式调用** - 通过函数调用打开/关闭覆盖层,无需在业务里维护 `open` 状态
|
|
11
|
-
- 🎨 **动画支持** - 正确处理打开/关闭动画(Modal 使用 `afterClose`,Drawer 使用 `afterOpenChange
|
|
11
|
+
- 🎨 **动画支持** - 正确处理打开/关闭动画(Modal 使用 `afterClose`,Drawer 使用 `afterOpenChange`;Tour 默认直接卸载)
|
|
12
12
|
- 🌍 **全局挂载** - 支持跨组件调用,覆盖层挂载到 `AntdOverlayProvider` 统一容器
|
|
13
13
|
- 📦 **类型安全** - 完整的 TypeScript 类型支持
|
|
14
14
|
- 🔧 **灵活扩展** - `useOverlay` + `propsAdapter` 可对接自定义覆盖层组件
|
|
@@ -38,7 +38,7 @@ yarn add antd-overlay
|
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
40
|
pnpm install
|
|
41
|
-
pnpm dev:demo # 启动 Vite 演示(demo/:Modal / Drawer / useOverlay)
|
|
41
|
+
pnpm dev:demo # 启动 Vite 演示(demo/:Modal / Drawer / Tour / useOverlay)
|
|
42
42
|
pnpm build # 使用 tsup 构建 dist
|
|
43
43
|
pnpm typecheck # TypeScript 检查
|
|
44
44
|
```
|
|
@@ -137,7 +137,7 @@ function GlobalUsage() {
|
|
|
137
137
|
|
|
138
138
|
`openModal(...)` 返回 `OverlayController`:可调用 `update` 传入要更新的字段(与当前已保存的 props 及 Hook 的 `defaultProps` **浅合并**,同名键以本次 `update` 入参为准)、`close` 关闭(会尊重动画配置)。
|
|
139
139
|
|
|
140
|
-
`customOk` 关闭语义(适用于 `useOverlay` / `useModal` / `useDrawer`):
|
|
140
|
+
`customOk` 关闭语义(适用于 `useOverlay` / `useModal` / `useDrawer` / `useTour`):
|
|
141
141
|
|
|
142
142
|
- 同步回调正常返回:自动关闭覆盖层
|
|
143
143
|
- 异步回调 `Promise resolve`:在 Promise 完成后自动关闭覆盖层
|
|
@@ -152,7 +152,7 @@ function GlobalUsage() {
|
|
|
152
152
|
- `docs/ai/api-manifest.json`:机器可读 API 清单
|
|
153
153
|
- `docs/ai/contracts.json`:能力、约束、错误语义和推荐模板
|
|
154
154
|
|
|
155
|
-
若 AI 生成的是全局 Hook(`useGlobalModal`、`useGlobalDrawer`、`useGlobalOverlay`)用法,务必同时生成 `AntdOverlayProvider` 包裹代码。
|
|
155
|
+
若 AI 生成的是全局 Hook(`useGlobalModal`、`useGlobalDrawer`、`useGlobalTour`、`useGlobalOverlay`)用法,务必同时生成 `AntdOverlayProvider` 包裹代码。
|
|
156
156
|
|
|
157
157
|
## API
|
|
158
158
|
|
|
@@ -167,11 +167,13 @@ function GlobalUsage() {
|
|
|
167
167
|
- `children: React.ReactNode`
|
|
168
168
|
- `defaultModalProps?: Partial<ModalProps>` — 默认 Modal 属性,与每次 `open` / `update` 传入的 props 合并(传入方优先)
|
|
169
169
|
- `defaultDrawerProps?: Partial<DrawerProps>` — 同上,作用于 Drawer
|
|
170
|
+
- `defaultTourProps?: Partial<TourProps>` — 同上,作用于 Tour
|
|
170
171
|
|
|
171
172
|
```tsx
|
|
172
173
|
<AntdOverlayProvider
|
|
173
174
|
defaultModalProps={{ centered: true, maskClosable: false }}
|
|
174
175
|
defaultDrawerProps={{ width: 600 }}
|
|
176
|
+
defaultTourProps={{ mask: true }}
|
|
175
177
|
>
|
|
176
178
|
<App />
|
|
177
179
|
</AntdOverlayProvider>
|
|
@@ -179,7 +181,7 @@ function GlobalUsage() {
|
|
|
179
181
|
|
|
180
182
|
#### `useAntdOverlayContext()`
|
|
181
183
|
|
|
182
|
-
读取 Context(含 `holders`、`addHolder`、`removeHolder` 及默认 Modal/Drawer 配置)。**必须在 `AntdOverlayProvider` 内使用**;一般供扩展或库内集成,业务侧很少直接使用。
|
|
184
|
+
读取 Context(含 `holders`、`addHolder`、`removeHolder` 及默认 Modal/Drawer/Tour 配置)。**必须在 `AntdOverlayProvider` 内使用**;一般供扩展或库内集成,业务侧很少直接使用。
|
|
183
185
|
|
|
184
186
|
### Modal Hooks
|
|
185
187
|
|
|
@@ -220,6 +222,58 @@ export const {
|
|
|
220
222
|
|
|
221
223
|
生成 `{ useDrawer, useGlobalDrawer }`。
|
|
222
224
|
|
|
225
|
+
### Tour Hooks
|
|
226
|
+
|
|
227
|
+
#### `useTour<T>(Component, options?)` / `useGlobalTour<T>(Component, options?)`
|
|
228
|
+
|
|
229
|
+
语义与 Modal / Drawer 侧相同,选项类型为 `UseTourOptions<T>`(`T` 由 Tour 组件推断;同样支持 `animation`、`defaultProps`、顶层 Tour 属性及组件自定义扩展字段)。
|
|
230
|
+
|
|
231
|
+
Tour 没有类似 Modal `afterClose` 或 Drawer `afterOpenChange` 的关闭动画完成回调,因此 `useTour` / `useGlobalTour` 默认使用 `animation: false`,关闭时直接卸载;如调用方显式传入 `animation`,会尊重传入值。
|
|
232
|
+
|
|
233
|
+
```tsx
|
|
234
|
+
import { Tour } from 'antd';
|
|
235
|
+
import { CustomTourProps, useTour } from 'antd-overlay';
|
|
236
|
+
|
|
237
|
+
const GuideTour: React.FC<CustomTourProps> = ({ customClose, customOk, ...props }) => {
|
|
238
|
+
void customClose;
|
|
239
|
+
void customOk;
|
|
240
|
+
return <Tour {...props} />;
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
function Page() {
|
|
244
|
+
const targetRef = React.useRef<HTMLButtonElement>(null);
|
|
245
|
+
const [openTour, holder] = useTour(GuideTour, {
|
|
246
|
+
mask: true,
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
return (
|
|
250
|
+
<>
|
|
251
|
+
<button
|
|
252
|
+
ref={targetRef}
|
|
253
|
+
onClick={() =>
|
|
254
|
+
openTour({
|
|
255
|
+
steps: [
|
|
256
|
+
{
|
|
257
|
+
title: '第一步',
|
|
258
|
+
description: '这里是引导内容',
|
|
259
|
+
target: () => targetRef.current,
|
|
260
|
+
},
|
|
261
|
+
],
|
|
262
|
+
})
|
|
263
|
+
}
|
|
264
|
+
>
|
|
265
|
+
打开 Tour
|
|
266
|
+
</button>
|
|
267
|
+
{holder}
|
|
268
|
+
</>
|
|
269
|
+
);
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
#### `generateUseTourHook<T>(Component)`
|
|
274
|
+
|
|
275
|
+
生成 `{ useTour, useGlobalTour }`。
|
|
276
|
+
|
|
223
277
|
### 通用 Overlay Hooks
|
|
224
278
|
|
|
225
279
|
#### `useOverlay<T>(Component, options?)`
|
|
@@ -247,6 +301,77 @@ const [openOverlay, holder] = useOverlay(MyOverlay, {
|
|
|
247
301
|
|
|
248
302
|
生成绑定组件的 `useOverlay` / `useGlobalOverlay`;调用时可再传 `options` 与 `defaultOptions` 浅合并。
|
|
249
303
|
|
|
304
|
+
### Promise Hooks
|
|
305
|
+
|
|
306
|
+
如果业务流程希望在调用处直接 `await` 用户的确认结果,使用 Promise 版本:
|
|
307
|
+
|
|
308
|
+
- `usePromiseOverlay<T>(Component, options?) => [openPromise, holder]`
|
|
309
|
+
- `useGlobalPromiseOverlay<T>(Component, options?) => openPromise`
|
|
310
|
+
- `generateUsePromiseOverlayHook<T>(Component, defaultOptions?) => { usePromiseOverlay, useGlobalPromiseOverlay }`
|
|
311
|
+
- `usePromiseModal<T>(Component, options?) => [openPromise, holder]`
|
|
312
|
+
- `useGlobalPromiseModal<T>(Component, options?) => openPromise`
|
|
313
|
+
- `generateUsePromiseModalHook<T>(Component) => { usePromiseModal, useGlobalPromiseModal }`
|
|
314
|
+
- `usePromiseDrawer<T>(Component, options?) => [openPromise, holder]`
|
|
315
|
+
- `useGlobalPromiseDrawer<T>(Component, options?) => openPromise`
|
|
316
|
+
- `generateUsePromiseDrawerHook<T>(Component) => { usePromiseDrawer, useGlobalPromiseDrawer }`
|
|
317
|
+
|
|
318
|
+
`openPromise(initialize?)` 返回 `Promise<V | undefined>`,`V` 由组件 `CustomOverlayProps<V>` 的 `customOk` 入参类型推断。
|
|
319
|
+
|
|
320
|
+
**行为契约:**
|
|
321
|
+
|
|
322
|
+
| 场景 | 外层 Promise | 覆盖层 |
|
|
323
|
+
| --- | --- | --- |
|
|
324
|
+
| `customOk(value)` 同步成功 | `resolve(value)` —— 入参,非 customOk 返回值 | 自动关闭 |
|
|
325
|
+
| `customOk(value)` 异步 resolve | resolve 后 `resolve(value)` | 自动关闭 |
|
|
326
|
+
| `customOk` 同步抛错 / 异步 reject | `reject(error)`,错误透传给 `await` 调用方 | **保持打开** |
|
|
327
|
+
| `customClose` / antd 取消按钮 / 蒙层 / esc | `resolve(undefined)` | 自动关闭 |
|
|
328
|
+
| 同一 hook 实例再次 `openPromise` | 前一个 Promise 立即 `resolve(undefined)` | 旧覆盖层被新一次打开覆盖 |
|
|
329
|
+
| 调用 `usePromise*` 的组件卸载 | `resolve(undefined)` | — |
|
|
330
|
+
|
|
331
|
+
Promise 仅结算一次(幂等);解析时机为决策时刻,**不等待关闭动画**。
|
|
332
|
+
|
|
333
|
+
```tsx
|
|
334
|
+
import { usePromiseModal, CustomModalProps } from 'antd-overlay';
|
|
335
|
+
import { Modal } from 'antd';
|
|
336
|
+
|
|
337
|
+
interface ConfirmModalProps extends CustomModalProps<{ value: string }> {
|
|
338
|
+
initialValue?: string;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
const ConfirmModal: React.FC<ConfirmModalProps> = ({
|
|
342
|
+
open,
|
|
343
|
+
customClose,
|
|
344
|
+
customOk,
|
|
345
|
+
initialValue = '',
|
|
346
|
+
}) => {
|
|
347
|
+
const [value, setValue] = React.useState(initialValue);
|
|
348
|
+
return (
|
|
349
|
+
<Modal open={open} onCancel={customClose} onOk={() => customOk?.({ value })}>
|
|
350
|
+
<input value={value} onChange={(e) => setValue(e.target.value)} />
|
|
351
|
+
</Modal>
|
|
352
|
+
);
|
|
353
|
+
};
|
|
354
|
+
|
|
355
|
+
function Page() {
|
|
356
|
+
const [openConfirm, holder] = usePromiseModal(ConfirmModal);
|
|
357
|
+
|
|
358
|
+
const handleClick = async () => {
|
|
359
|
+
const result = await openConfirm({ initialValue: 'hello' });
|
|
360
|
+
if (result === undefined) return; // 用户取消 / 关闭
|
|
361
|
+
console.log(result.value);
|
|
362
|
+
};
|
|
363
|
+
|
|
364
|
+
return (
|
|
365
|
+
<>
|
|
366
|
+
<button onClick={handleClick}>Open</button>
|
|
367
|
+
{holder}
|
|
368
|
+
</>
|
|
369
|
+
);
|
|
370
|
+
}
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
如需在 `customOk` 中做异步校验:抛错 / reject 即可让 `await` 进入 `catch`,覆盖层会保持打开供用户修改后重新提交。
|
|
374
|
+
|
|
250
375
|
### 类型定义
|
|
251
376
|
|
|
252
377
|
#### `CustomOverlayProps<T, R>`
|
|
@@ -261,9 +386,9 @@ interface CustomOverlayProps<T = any, R = void> {
|
|
|
261
386
|
|
|
262
387
|
如需本地验证异步行为,可运行 demo 中的 `AsyncCustomOkDemo`(包含 Overlay / Modal / Drawer 的异步成功与失败场景)。
|
|
263
388
|
|
|
264
|
-
#### `CustomModalProps<T, R>` / `CustomDrawerProps<T, R>`
|
|
389
|
+
#### `CustomModalProps<T, R>` / `CustomDrawerProps<T, R>` / `CustomTourProps<T, R>`
|
|
265
390
|
|
|
266
|
-
分别为 `ModalProps` / `DrawerProps` 与 `CustomOverlayProps` 的交叉类型。
|
|
391
|
+
分别为 `ModalProps` / `DrawerProps` / `TourProps` 与 `CustomOverlayProps` 的交叉类型。
|
|
267
392
|
|
|
268
393
|
#### `InternalOverlayProps<T>`
|
|
269
394
|
|
|
@@ -456,7 +581,7 @@ function ProgressModal() {
|
|
|
456
581
|
|
|
457
582
|
```
|
|
458
583
|
┌─────────────────────────────────────────────────────────┐
|
|
459
|
-
│
|
|
584
|
+
│ useModal / useDrawer / useTour │ 业务层封装
|
|
460
585
|
├─────────────────────────────────────────────────────────┤
|
|
461
586
|
│ useOverlay / useGlobalOverlay │ 核心逻辑层
|
|
462
587
|
├─────────────────────────────────────────────────────────┤
|
package/dist/index.cjs
CHANGED
|
@@ -12,7 +12,8 @@ var AntdOverlayContext = React2.createContext(null);
|
|
|
12
12
|
function AntdOverlayProvider({
|
|
13
13
|
children,
|
|
14
14
|
defaultModalProps,
|
|
15
|
-
defaultDrawerProps
|
|
15
|
+
defaultDrawerProps,
|
|
16
|
+
defaultTourProps
|
|
16
17
|
}) {
|
|
17
18
|
const [holders, setHolders] = React2.useState([]);
|
|
18
19
|
const addHolder = React2.useCallback((holder) => {
|
|
@@ -22,8 +23,15 @@ function AntdOverlayProvider({
|
|
|
22
23
|
setHolders((prev) => prev.filter((h) => h !== holder));
|
|
23
24
|
}, []);
|
|
24
25
|
const value = React2.useMemo(
|
|
25
|
-
() => ({
|
|
26
|
-
|
|
26
|
+
() => ({
|
|
27
|
+
holders,
|
|
28
|
+
addHolder,
|
|
29
|
+
removeHolder,
|
|
30
|
+
defaultModalProps,
|
|
31
|
+
defaultDrawerProps,
|
|
32
|
+
defaultTourProps
|
|
33
|
+
}),
|
|
34
|
+
[holders, addHolder, removeHolder, defaultModalProps, defaultDrawerProps, defaultTourProps]
|
|
27
35
|
);
|
|
28
36
|
return /* @__PURE__ */ jsxRuntime.jsxs(AntdOverlayContext.Provider, { value, children: [
|
|
29
37
|
children,
|
|
@@ -266,17 +274,275 @@ function generateUseDrawerHook(DrawerComponent) {
|
|
|
266
274
|
useGlobalDrawer: (options) => useGlobalDrawer(DrawerComponent, options)
|
|
267
275
|
};
|
|
268
276
|
}
|
|
277
|
+
var createTourPropsAdapter = (defaultProps) => {
|
|
278
|
+
return (props, state) => {
|
|
279
|
+
const result = {
|
|
280
|
+
...defaultProps,
|
|
281
|
+
...props,
|
|
282
|
+
open: state.open,
|
|
283
|
+
customClose: state.onClose,
|
|
284
|
+
onClose: (current) => {
|
|
285
|
+
props?.onClose?.(current);
|
|
286
|
+
state.onClose();
|
|
287
|
+
}
|
|
288
|
+
};
|
|
289
|
+
if (result.customOk) {
|
|
290
|
+
result.customOk = wrapCustomOk(result.customOk, state.onClose);
|
|
291
|
+
}
|
|
292
|
+
return result;
|
|
293
|
+
};
|
|
294
|
+
};
|
|
295
|
+
function useTour(TourComponent, options) {
|
|
296
|
+
const context = useAntdOverlayContext();
|
|
297
|
+
const propsAdapter = React2.useMemo(
|
|
298
|
+
() => createTourPropsAdapter(context?.defaultTourProps),
|
|
299
|
+
[context?.defaultTourProps]
|
|
300
|
+
);
|
|
301
|
+
return useOverlay(TourComponent, {
|
|
302
|
+
animation: false,
|
|
303
|
+
...options,
|
|
304
|
+
keyPrefix: "use-tour",
|
|
305
|
+
propsAdapter
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
function useGlobalTour(TourComponent, options) {
|
|
309
|
+
const context = useAntdOverlayContext();
|
|
310
|
+
const propsAdapter = React2.useMemo(
|
|
311
|
+
() => createTourPropsAdapter(context?.defaultTourProps),
|
|
312
|
+
[context?.defaultTourProps]
|
|
313
|
+
);
|
|
314
|
+
return useGlobalOverlay(TourComponent, {
|
|
315
|
+
animation: false,
|
|
316
|
+
...options,
|
|
317
|
+
keyPrefix: "use-tour",
|
|
318
|
+
propsAdapter
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
function generateUseTourHook(TourComponent) {
|
|
322
|
+
return {
|
|
323
|
+
useTour: (options) => useTour(TourComponent, options),
|
|
324
|
+
useGlobalTour: (options) => useGlobalTour(TourComponent, options)
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
var createSettler = (rawResolve, rawReject) => {
|
|
328
|
+
let settled = false;
|
|
329
|
+
return {
|
|
330
|
+
resolve: (value) => {
|
|
331
|
+
if (settled) return;
|
|
332
|
+
settled = true;
|
|
333
|
+
rawResolve(value);
|
|
334
|
+
},
|
|
335
|
+
reject: (err) => {
|
|
336
|
+
if (settled) return;
|
|
337
|
+
settled = true;
|
|
338
|
+
rawReject(err);
|
|
339
|
+
}
|
|
340
|
+
};
|
|
341
|
+
};
|
|
342
|
+
var passthroughAdapter = (props, state) => {
|
|
343
|
+
const result = {
|
|
344
|
+
...props,
|
|
345
|
+
open: state.open,
|
|
346
|
+
customClose: state.onClose
|
|
347
|
+
};
|
|
348
|
+
if (result.customOk) {
|
|
349
|
+
result.customOk = wrapCustomOk(result.customOk, state.onClose);
|
|
350
|
+
}
|
|
351
|
+
return result;
|
|
352
|
+
};
|
|
353
|
+
var withPromiseAdapter = (innerAdapter, settleRef) => {
|
|
354
|
+
return (props, state) => {
|
|
355
|
+
const inner = innerAdapter(props, state);
|
|
356
|
+
const innerCustomOk = inner.customOk;
|
|
357
|
+
const innerCustomClose = inner.customClose;
|
|
358
|
+
return {
|
|
359
|
+
...inner,
|
|
360
|
+
customOk: ((value) => {
|
|
361
|
+
if (innerCustomOk) {
|
|
362
|
+
try {
|
|
363
|
+
const result = innerCustomOk(value);
|
|
364
|
+
if (result instanceof Promise) {
|
|
365
|
+
return result.then(
|
|
366
|
+
(resolved) => {
|
|
367
|
+
settleRef.current?.resolve(value);
|
|
368
|
+
return resolved;
|
|
369
|
+
},
|
|
370
|
+
(err) => {
|
|
371
|
+
settleRef.current?.reject(err);
|
|
372
|
+
throw err;
|
|
373
|
+
}
|
|
374
|
+
);
|
|
375
|
+
}
|
|
376
|
+
settleRef.current?.resolve(value);
|
|
377
|
+
return result;
|
|
378
|
+
} catch (err) {
|
|
379
|
+
settleRef.current?.reject(err);
|
|
380
|
+
throw err;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
settleRef.current?.resolve(value);
|
|
384
|
+
state.onClose();
|
|
385
|
+
return void 0;
|
|
386
|
+
}),
|
|
387
|
+
customClose: () => {
|
|
388
|
+
settleRef.current?.resolve(void 0);
|
|
389
|
+
innerCustomClose();
|
|
390
|
+
}
|
|
391
|
+
};
|
|
392
|
+
};
|
|
393
|
+
};
|
|
394
|
+
var makePromiseOpener = (openOverlay, settleRef) => {
|
|
395
|
+
return (initialize) => {
|
|
396
|
+
settleRef.current?.resolve(void 0);
|
|
397
|
+
let rawResolve = () => void 0;
|
|
398
|
+
let rawReject = () => void 0;
|
|
399
|
+
const promise = new Promise((resolve, reject) => {
|
|
400
|
+
rawResolve = resolve;
|
|
401
|
+
rawReject = reject;
|
|
402
|
+
});
|
|
403
|
+
settleRef.current = createSettler(rawResolve, rawReject);
|
|
404
|
+
openOverlay(initialize);
|
|
405
|
+
return promise;
|
|
406
|
+
};
|
|
407
|
+
};
|
|
408
|
+
function usePromiseOverlay(OverlayComponent, options = {}) {
|
|
409
|
+
const settleRef = React2.useRef(null);
|
|
410
|
+
const { propsAdapter: userAdapter, ...rest } = options;
|
|
411
|
+
const wrappedAdapter = React2.useMemo(
|
|
412
|
+
() => withPromiseAdapter(
|
|
413
|
+
userAdapter ?? passthroughAdapter,
|
|
414
|
+
settleRef
|
|
415
|
+
),
|
|
416
|
+
[userAdapter]
|
|
417
|
+
);
|
|
418
|
+
const [openOverlay, holder] = useOverlay(OverlayComponent, {
|
|
419
|
+
...rest,
|
|
420
|
+
propsAdapter: wrappedAdapter
|
|
421
|
+
});
|
|
422
|
+
React2.useEffect(() => {
|
|
423
|
+
return () => {
|
|
424
|
+
settleRef.current?.resolve(void 0);
|
|
425
|
+
};
|
|
426
|
+
}, []);
|
|
427
|
+
const openPromise = React2.useMemo(() => makePromiseOpener(openOverlay, settleRef), [openOverlay]);
|
|
428
|
+
return [openPromise, holder];
|
|
429
|
+
}
|
|
430
|
+
function useGlobalPromiseOverlay(OverlayComponent, options = {}) {
|
|
431
|
+
const settleRef = React2.useRef(null);
|
|
432
|
+
const { propsAdapter: userAdapter, ...rest } = options;
|
|
433
|
+
const wrappedAdapter = React2.useMemo(
|
|
434
|
+
() => withPromiseAdapter(
|
|
435
|
+
userAdapter ?? passthroughAdapter,
|
|
436
|
+
settleRef
|
|
437
|
+
),
|
|
438
|
+
[userAdapter]
|
|
439
|
+
);
|
|
440
|
+
const openOverlay = useGlobalOverlay(OverlayComponent, {
|
|
441
|
+
...rest,
|
|
442
|
+
propsAdapter: wrappedAdapter
|
|
443
|
+
});
|
|
444
|
+
React2.useEffect(() => {
|
|
445
|
+
return () => {
|
|
446
|
+
settleRef.current?.resolve(void 0);
|
|
447
|
+
};
|
|
448
|
+
}, []);
|
|
449
|
+
return React2.useMemo(() => makePromiseOpener(openOverlay, settleRef), [openOverlay]);
|
|
450
|
+
}
|
|
451
|
+
function generateUsePromiseOverlayHook(OverlayComponent, defaultOptions) {
|
|
452
|
+
return {
|
|
453
|
+
usePromiseOverlay: (options) => usePromiseOverlay(OverlayComponent, {
|
|
454
|
+
...defaultOptions,
|
|
455
|
+
...options
|
|
456
|
+
}),
|
|
457
|
+
useGlobalPromiseOverlay: (options) => useGlobalPromiseOverlay(OverlayComponent, {
|
|
458
|
+
...defaultOptions,
|
|
459
|
+
...options
|
|
460
|
+
})
|
|
461
|
+
};
|
|
462
|
+
}
|
|
463
|
+
function usePromiseModal(ModalComponent, options) {
|
|
464
|
+
const context = useAntdOverlayContext();
|
|
465
|
+
const propsAdapter = React2.useMemo(
|
|
466
|
+
() => createModalPropsAdapter(context?.defaultModalProps),
|
|
467
|
+
[context?.defaultModalProps]
|
|
468
|
+
);
|
|
469
|
+
return usePromiseOverlay(ModalComponent, {
|
|
470
|
+
...options,
|
|
471
|
+
keyPrefix: "use-modal",
|
|
472
|
+
propsAdapter
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
function useGlobalPromiseModal(ModalComponent, options) {
|
|
476
|
+
const context = useAntdOverlayContext();
|
|
477
|
+
const propsAdapter = React2.useMemo(
|
|
478
|
+
() => createModalPropsAdapter(context?.defaultModalProps),
|
|
479
|
+
[context?.defaultModalProps]
|
|
480
|
+
);
|
|
481
|
+
return useGlobalPromiseOverlay(ModalComponent, {
|
|
482
|
+
...options,
|
|
483
|
+
keyPrefix: "use-modal",
|
|
484
|
+
propsAdapter
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
function generateUsePromiseModalHook(ModalComponent) {
|
|
488
|
+
return {
|
|
489
|
+
usePromiseModal: (options) => usePromiseModal(ModalComponent, options),
|
|
490
|
+
useGlobalPromiseModal: (options) => useGlobalPromiseModal(ModalComponent, options)
|
|
491
|
+
};
|
|
492
|
+
}
|
|
493
|
+
function usePromiseDrawer(DrawerComponent, options) {
|
|
494
|
+
const context = useAntdOverlayContext();
|
|
495
|
+
const propsAdapter = React2.useMemo(
|
|
496
|
+
() => createDrawerPropsAdapter(context?.defaultDrawerProps),
|
|
497
|
+
[context?.defaultDrawerProps]
|
|
498
|
+
);
|
|
499
|
+
return usePromiseOverlay(DrawerComponent, {
|
|
500
|
+
...options,
|
|
501
|
+
keyPrefix: "use-drawer",
|
|
502
|
+
propsAdapter
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
function useGlobalPromiseDrawer(DrawerComponent, options) {
|
|
506
|
+
const context = useAntdOverlayContext();
|
|
507
|
+
const propsAdapter = React2.useMemo(
|
|
508
|
+
() => createDrawerPropsAdapter(context?.defaultDrawerProps),
|
|
509
|
+
[context?.defaultDrawerProps]
|
|
510
|
+
);
|
|
511
|
+
return useGlobalPromiseOverlay(DrawerComponent, {
|
|
512
|
+
...options,
|
|
513
|
+
keyPrefix: "use-drawer",
|
|
514
|
+
propsAdapter
|
|
515
|
+
});
|
|
516
|
+
}
|
|
517
|
+
function generateUsePromiseDrawerHook(DrawerComponent) {
|
|
518
|
+
return {
|
|
519
|
+
usePromiseDrawer: (options) => usePromiseDrawer(DrawerComponent, options),
|
|
520
|
+
useGlobalPromiseDrawer: (options) => useGlobalPromiseDrawer(DrawerComponent, options)
|
|
521
|
+
};
|
|
522
|
+
}
|
|
269
523
|
|
|
270
524
|
exports.AntdOverlayProvider = AntdOverlayProvider;
|
|
271
525
|
exports.generateUseDrawerHook = generateUseDrawerHook;
|
|
272
526
|
exports.generateUseModalHook = generateUseModalHook;
|
|
273
527
|
exports.generateUseOverlayHook = generateUseOverlayHook;
|
|
528
|
+
exports.generateUsePromiseDrawerHook = generateUsePromiseDrawerHook;
|
|
529
|
+
exports.generateUsePromiseModalHook = generateUsePromiseModalHook;
|
|
530
|
+
exports.generateUsePromiseOverlayHook = generateUsePromiseOverlayHook;
|
|
531
|
+
exports.generateUseTourHook = generateUseTourHook;
|
|
274
532
|
exports.useAntdOverlayContext = useAntdOverlayContext;
|
|
275
533
|
exports.useDrawer = useDrawer;
|
|
276
534
|
exports.useGlobalDrawer = useGlobalDrawer;
|
|
277
535
|
exports.useGlobalModal = useGlobalModal;
|
|
278
536
|
exports.useGlobalOverlay = useGlobalOverlay;
|
|
537
|
+
exports.useGlobalPromiseDrawer = useGlobalPromiseDrawer;
|
|
538
|
+
exports.useGlobalPromiseModal = useGlobalPromiseModal;
|
|
539
|
+
exports.useGlobalPromiseOverlay = useGlobalPromiseOverlay;
|
|
540
|
+
exports.useGlobalTour = useGlobalTour;
|
|
279
541
|
exports.useModal = useModal;
|
|
280
542
|
exports.useOverlay = useOverlay;
|
|
543
|
+
exports.usePromiseDrawer = usePromiseDrawer;
|
|
544
|
+
exports.usePromiseModal = usePromiseModal;
|
|
545
|
+
exports.usePromiseOverlay = usePromiseOverlay;
|
|
546
|
+
exports.useTour = useTour;
|
|
281
547
|
//# sourceMappingURL=index.cjs.map
|
|
282
548
|
//# sourceMappingURL=index.cjs.map
|