antd-overlay 0.1.2 → 0.3.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 +91 -1
- package/dist/index.cjs +205 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +119 -1
- package/dist/index.d.ts +119 -1
- package/dist/index.js +197 -1
- package/dist/index.js.map +1 -1
- package/docs/ai/api-manifest.json +327 -0
- package/docs/ai/constraints.md +83 -0
- package/docs/ai/contracts.json +88 -0
- package/docs/ai/quick-reference.md +112 -0
- package/package.json +9 -3
package/dist/index.d.cts
CHANGED
|
@@ -678,4 +678,122 @@ declare function generateUseDrawerHook<T extends CustomDrawerProps>(DrawerCompon
|
|
|
678
678
|
useGlobalDrawer: (options?: UseDrawerOptions<T>) => OverlayOpener<T>;
|
|
679
679
|
};
|
|
680
680
|
|
|
681
|
-
|
|
681
|
+
/**
|
|
682
|
+
* @file usePromiseOverlay - 命令式 Promise 风格的覆盖层管理 Hook
|
|
683
|
+
* @description
|
|
684
|
+
* 在 useOverlay / useGlobalOverlay 之上叠加 Promise 语义:
|
|
685
|
+
* - opener 返回 `Promise<V | undefined>`
|
|
686
|
+
* - customOk(value) 成功 → resolve(value)(解析值为入参,非 customOk 返回值)
|
|
687
|
+
* - 任意非 OK 关闭路径(customClose / 蒙层 / antd 取消按钮 / 组件卸载 / 再次 open 抢占)→ resolve(undefined)
|
|
688
|
+
* - customOk 抛错 / Promise reject → reject(error),覆盖层保持打开
|
|
689
|
+
*
|
|
690
|
+
* 实现思路:通过包装 propsAdapter 拦截 customOk 与 customClose;
|
|
691
|
+
* 让内层适配器(默认 / Modal / Drawer)先完成 defaultProps 合并与 wrapCustomOk 的
|
|
692
|
+
* 自动关闭链路,再在外层包一层用于结算 Promise。这样 Provider 上的
|
|
693
|
+
* defaultModalProps.customOk / defaultDrawerProps.customOk 也能被正常消费。
|
|
694
|
+
*/
|
|
695
|
+
|
|
696
|
+
/**
|
|
697
|
+
* 从覆盖层组件 props 推断 customOk 入参类型
|
|
698
|
+
*
|
|
699
|
+
* - 若 `T['customOk']` 为 `(value: V) => any`,则 `V`
|
|
700
|
+
* - 若组件未声明 `customOk`,则 `never`(外层 Promise 实际类型为 `Promise<undefined>`)
|
|
701
|
+
*/
|
|
702
|
+
type CustomOkValue<T extends CustomOverlayProps> = T['customOk'] extends ((value: infer V) => unknown) | undefined ? V : never;
|
|
703
|
+
/**
|
|
704
|
+
* usePromiseOverlay 系列的 opener 类型
|
|
705
|
+
*
|
|
706
|
+
* 调用 opener 即打开覆盖层并返回 Promise<V | undefined>。
|
|
707
|
+
*/
|
|
708
|
+
type PromiseOverlayOpener<T extends CustomOverlayProps, V = CustomOkValue<T>> = (initialize?: InternalOverlayProps<T>) => Promise<V | undefined>;
|
|
709
|
+
/**
|
|
710
|
+
* usePromiseOverlay 的配置选项(与 useOverlay 完全一致)
|
|
711
|
+
*/
|
|
712
|
+
type UsePromiseOverlayOptions<T extends CustomOverlayProps> = UseOverlayOptions<T>;
|
|
713
|
+
/**
|
|
714
|
+
* usePromiseOverlay
|
|
715
|
+
*
|
|
716
|
+
* @returns `[openPromise, holder]`
|
|
717
|
+
* @example
|
|
718
|
+
* const [openPromise, holder] = usePromiseOverlay(MyOverlay, {
|
|
719
|
+
* propsAdapter: (props, state) => ({ ...props, open: state.open, customClose: state.onClose }),
|
|
720
|
+
* });
|
|
721
|
+
* const value = await openPromise({ ...props });
|
|
722
|
+
*/
|
|
723
|
+
declare function usePromiseOverlay<T extends CustomOverlayProps>(OverlayComponent: React__default.FC<T>, options?: UsePromiseOverlayOptions<T>): [PromiseOverlayOpener<T>, React__default.ReactNode];
|
|
724
|
+
/**
|
|
725
|
+
* useGlobalPromiseOverlay
|
|
726
|
+
*
|
|
727
|
+
* 与 usePromiseOverlay 等价,但 holder 自动挂载到 AntdOverlayProvider。
|
|
728
|
+
* 必须在 AntdOverlayProvider 内部使用。
|
|
729
|
+
*/
|
|
730
|
+
declare function useGlobalPromiseOverlay<T extends CustomOverlayProps>(OverlayComponent: React__default.FC<T>, options?: UsePromiseOverlayOptions<T>): PromiseOverlayOpener<T>;
|
|
731
|
+
/**
|
|
732
|
+
* 生成绑定特定组件的 Promise 版 Hook 工厂
|
|
733
|
+
*
|
|
734
|
+
* @example
|
|
735
|
+
* export const {
|
|
736
|
+
* usePromiseOverlay: useMyPromiseOverlay,
|
|
737
|
+
* useGlobalPromiseOverlay: useGlobalMyPromiseOverlay,
|
|
738
|
+
* } = generateUsePromiseOverlayHook(MyOverlay, { propsAdapter });
|
|
739
|
+
*/
|
|
740
|
+
declare function generateUsePromiseOverlayHook<T extends CustomOverlayProps>(OverlayComponent: React__default.FC<T>, defaultOptions?: UsePromiseOverlayOptions<T>): {
|
|
741
|
+
usePromiseOverlay: (options?: UsePromiseOverlayOptions<T>) => [PromiseOverlayOpener<T, CustomOkValue<T>>, React__default.ReactNode];
|
|
742
|
+
useGlobalPromiseOverlay: (options?: UsePromiseOverlayOptions<T>) => PromiseOverlayOpener<T, CustomOkValue<T>>;
|
|
743
|
+
};
|
|
744
|
+
|
|
745
|
+
/**
|
|
746
|
+
* @file usePromiseModal - Promise 风格的 Modal 管理 Hook
|
|
747
|
+
* @description
|
|
748
|
+
* 在 usePromiseOverlay 上使用 Modal 专用的 propsAdapter,行为与 useModal 完全对齐:
|
|
749
|
+
* - opener 返回 `Promise<V | undefined>`
|
|
750
|
+
* - customOk(value) → resolve(value);非 OK 关闭 → resolve(undefined);customOk 抛错 / reject → reject 透传
|
|
751
|
+
*
|
|
752
|
+
* @example
|
|
753
|
+
* const [openConfirm, holder] = usePromiseModal(ConfirmModal);
|
|
754
|
+
* const result = await openConfirm({ title: 'Confirm?' });
|
|
755
|
+
* if (result === undefined) return; // 用户取消
|
|
756
|
+
*/
|
|
757
|
+
|
|
758
|
+
/**
|
|
759
|
+
* usePromiseModal 的配置选项(与 useModal 一致:不含 propsAdapter / keyPrefix)
|
|
760
|
+
*/
|
|
761
|
+
type UsePromiseModalOptions<T extends CustomModalProps = CustomModalProps> = UseModalOptions<T>;
|
|
762
|
+
declare function usePromiseModal<T extends CustomModalProps>(ModalComponent: React__default.FC<T>, options?: UsePromiseModalOptions<T>): [PromiseOverlayOpener<T>, React__default.ReactNode];
|
|
763
|
+
declare function useGlobalPromiseModal<T extends CustomModalProps>(ModalComponent: React__default.FC<T>, options?: UsePromiseModalOptions<T>): PromiseOverlayOpener<T>;
|
|
764
|
+
/**
|
|
765
|
+
* 生成绑定了特定 Modal 组件的 Promise Hook 工厂
|
|
766
|
+
*/
|
|
767
|
+
declare function generateUsePromiseModalHook<T extends CustomModalProps>(ModalComponent: React__default.FC<T>): {
|
|
768
|
+
usePromiseModal: (options?: UsePromiseModalOptions<T>) => [PromiseOverlayOpener<T>, React__default.ReactNode];
|
|
769
|
+
useGlobalPromiseModal: (options?: UsePromiseModalOptions<T>) => PromiseOverlayOpener<T>;
|
|
770
|
+
};
|
|
771
|
+
|
|
772
|
+
/**
|
|
773
|
+
* @file usePromiseDrawer - Promise 风格的 Drawer 管理 Hook
|
|
774
|
+
* @description
|
|
775
|
+
* 在 usePromiseOverlay 上使用 Drawer 专用的 propsAdapter,行为与 useDrawer 完全对齐:
|
|
776
|
+
* - opener 返回 `Promise<V | undefined>`
|
|
777
|
+
* - customOk(value) → resolve(value);非 OK 关闭 → resolve(undefined);customOk 抛错 / reject → reject 透传
|
|
778
|
+
*
|
|
779
|
+
* @example
|
|
780
|
+
* const [openPromiseDrawer, holder] = usePromiseDrawer(MyDrawer);
|
|
781
|
+
* const result = await openPromiseDrawer({ title: 'Edit' });
|
|
782
|
+
* if (result === undefined) return; // 用户取消
|
|
783
|
+
*/
|
|
784
|
+
|
|
785
|
+
/**
|
|
786
|
+
* usePromiseDrawer 的配置选项(与 useDrawer 一致:不含 propsAdapter / keyPrefix)
|
|
787
|
+
*/
|
|
788
|
+
type UsePromiseDrawerOptions<T extends CustomDrawerProps = CustomDrawerProps> = UseDrawerOptions<T>;
|
|
789
|
+
declare function usePromiseDrawer<T extends CustomDrawerProps>(DrawerComponent: React__default.FC<T>, options?: UsePromiseDrawerOptions<T>): [PromiseOverlayOpener<T>, React__default.ReactNode];
|
|
790
|
+
declare function useGlobalPromiseDrawer<T extends CustomDrawerProps>(DrawerComponent: React__default.FC<T>, options?: UsePromiseDrawerOptions<T>): PromiseOverlayOpener<T>;
|
|
791
|
+
/**
|
|
792
|
+
* 生成绑定了特定 Drawer 组件的 Promise Hook 工厂
|
|
793
|
+
*/
|
|
794
|
+
declare function generateUsePromiseDrawerHook<T extends CustomDrawerProps>(DrawerComponent: React__default.FC<T>): {
|
|
795
|
+
usePromiseDrawer: (options?: UsePromiseDrawerOptions<T>) => [PromiseOverlayOpener<T>, React__default.ReactNode];
|
|
796
|
+
useGlobalPromiseDrawer: (options?: UsePromiseDrawerOptions<T>) => PromiseOverlayOpener<T>;
|
|
797
|
+
};
|
|
798
|
+
|
|
799
|
+
export { AntdOverlayProvider, type AntdOverlayProviderProps, type CustomDrawerProps, type CustomModalProps, type CustomOkValue, type CustomOverlayProps, type DefaultDrawerProps, type DefaultModalProps, type InternalOverlayProps, type OverlayController, type OverlayOpener, type PromiseOverlayOpener, type UseDrawerOptions, type UseModalOptions, type UseOverlayOptions, type UsePromiseDrawerOptions, type UsePromiseModalOptions, type UsePromiseOverlayOptions, generateUseDrawerHook, generateUseModalHook, generateUseOverlayHook, generateUsePromiseDrawerHook, generateUsePromiseModalHook, generateUsePromiseOverlayHook, useAntdOverlayContext, useDrawer, useGlobalDrawer, useGlobalModal, useGlobalOverlay, useGlobalPromiseDrawer, useGlobalPromiseModal, useGlobalPromiseOverlay, useModal, useOverlay, usePromiseDrawer, usePromiseModal, usePromiseOverlay };
|
package/dist/index.d.ts
CHANGED
|
@@ -678,4 +678,122 @@ declare function generateUseDrawerHook<T extends CustomDrawerProps>(DrawerCompon
|
|
|
678
678
|
useGlobalDrawer: (options?: UseDrawerOptions<T>) => OverlayOpener<T>;
|
|
679
679
|
};
|
|
680
680
|
|
|
681
|
-
|
|
681
|
+
/**
|
|
682
|
+
* @file usePromiseOverlay - 命令式 Promise 风格的覆盖层管理 Hook
|
|
683
|
+
* @description
|
|
684
|
+
* 在 useOverlay / useGlobalOverlay 之上叠加 Promise 语义:
|
|
685
|
+
* - opener 返回 `Promise<V | undefined>`
|
|
686
|
+
* - customOk(value) 成功 → resolve(value)(解析值为入参,非 customOk 返回值)
|
|
687
|
+
* - 任意非 OK 关闭路径(customClose / 蒙层 / antd 取消按钮 / 组件卸载 / 再次 open 抢占)→ resolve(undefined)
|
|
688
|
+
* - customOk 抛错 / Promise reject → reject(error),覆盖层保持打开
|
|
689
|
+
*
|
|
690
|
+
* 实现思路:通过包装 propsAdapter 拦截 customOk 与 customClose;
|
|
691
|
+
* 让内层适配器(默认 / Modal / Drawer)先完成 defaultProps 合并与 wrapCustomOk 的
|
|
692
|
+
* 自动关闭链路,再在外层包一层用于结算 Promise。这样 Provider 上的
|
|
693
|
+
* defaultModalProps.customOk / defaultDrawerProps.customOk 也能被正常消费。
|
|
694
|
+
*/
|
|
695
|
+
|
|
696
|
+
/**
|
|
697
|
+
* 从覆盖层组件 props 推断 customOk 入参类型
|
|
698
|
+
*
|
|
699
|
+
* - 若 `T['customOk']` 为 `(value: V) => any`,则 `V`
|
|
700
|
+
* - 若组件未声明 `customOk`,则 `never`(外层 Promise 实际类型为 `Promise<undefined>`)
|
|
701
|
+
*/
|
|
702
|
+
type CustomOkValue<T extends CustomOverlayProps> = T['customOk'] extends ((value: infer V) => unknown) | undefined ? V : never;
|
|
703
|
+
/**
|
|
704
|
+
* usePromiseOverlay 系列的 opener 类型
|
|
705
|
+
*
|
|
706
|
+
* 调用 opener 即打开覆盖层并返回 Promise<V | undefined>。
|
|
707
|
+
*/
|
|
708
|
+
type PromiseOverlayOpener<T extends CustomOverlayProps, V = CustomOkValue<T>> = (initialize?: InternalOverlayProps<T>) => Promise<V | undefined>;
|
|
709
|
+
/**
|
|
710
|
+
* usePromiseOverlay 的配置选项(与 useOverlay 完全一致)
|
|
711
|
+
*/
|
|
712
|
+
type UsePromiseOverlayOptions<T extends CustomOverlayProps> = UseOverlayOptions<T>;
|
|
713
|
+
/**
|
|
714
|
+
* usePromiseOverlay
|
|
715
|
+
*
|
|
716
|
+
* @returns `[openPromise, holder]`
|
|
717
|
+
* @example
|
|
718
|
+
* const [openPromise, holder] = usePromiseOverlay(MyOverlay, {
|
|
719
|
+
* propsAdapter: (props, state) => ({ ...props, open: state.open, customClose: state.onClose }),
|
|
720
|
+
* });
|
|
721
|
+
* const value = await openPromise({ ...props });
|
|
722
|
+
*/
|
|
723
|
+
declare function usePromiseOverlay<T extends CustomOverlayProps>(OverlayComponent: React__default.FC<T>, options?: UsePromiseOverlayOptions<T>): [PromiseOverlayOpener<T>, React__default.ReactNode];
|
|
724
|
+
/**
|
|
725
|
+
* useGlobalPromiseOverlay
|
|
726
|
+
*
|
|
727
|
+
* 与 usePromiseOverlay 等价,但 holder 自动挂载到 AntdOverlayProvider。
|
|
728
|
+
* 必须在 AntdOverlayProvider 内部使用。
|
|
729
|
+
*/
|
|
730
|
+
declare function useGlobalPromiseOverlay<T extends CustomOverlayProps>(OverlayComponent: React__default.FC<T>, options?: UsePromiseOverlayOptions<T>): PromiseOverlayOpener<T>;
|
|
731
|
+
/**
|
|
732
|
+
* 生成绑定特定组件的 Promise 版 Hook 工厂
|
|
733
|
+
*
|
|
734
|
+
* @example
|
|
735
|
+
* export const {
|
|
736
|
+
* usePromiseOverlay: useMyPromiseOverlay,
|
|
737
|
+
* useGlobalPromiseOverlay: useGlobalMyPromiseOverlay,
|
|
738
|
+
* } = generateUsePromiseOverlayHook(MyOverlay, { propsAdapter });
|
|
739
|
+
*/
|
|
740
|
+
declare function generateUsePromiseOverlayHook<T extends CustomOverlayProps>(OverlayComponent: React__default.FC<T>, defaultOptions?: UsePromiseOverlayOptions<T>): {
|
|
741
|
+
usePromiseOverlay: (options?: UsePromiseOverlayOptions<T>) => [PromiseOverlayOpener<T, CustomOkValue<T>>, React__default.ReactNode];
|
|
742
|
+
useGlobalPromiseOverlay: (options?: UsePromiseOverlayOptions<T>) => PromiseOverlayOpener<T, CustomOkValue<T>>;
|
|
743
|
+
};
|
|
744
|
+
|
|
745
|
+
/**
|
|
746
|
+
* @file usePromiseModal - Promise 风格的 Modal 管理 Hook
|
|
747
|
+
* @description
|
|
748
|
+
* 在 usePromiseOverlay 上使用 Modal 专用的 propsAdapter,行为与 useModal 完全对齐:
|
|
749
|
+
* - opener 返回 `Promise<V | undefined>`
|
|
750
|
+
* - customOk(value) → resolve(value);非 OK 关闭 → resolve(undefined);customOk 抛错 / reject → reject 透传
|
|
751
|
+
*
|
|
752
|
+
* @example
|
|
753
|
+
* const [openConfirm, holder] = usePromiseModal(ConfirmModal);
|
|
754
|
+
* const result = await openConfirm({ title: 'Confirm?' });
|
|
755
|
+
* if (result === undefined) return; // 用户取消
|
|
756
|
+
*/
|
|
757
|
+
|
|
758
|
+
/**
|
|
759
|
+
* usePromiseModal 的配置选项(与 useModal 一致:不含 propsAdapter / keyPrefix)
|
|
760
|
+
*/
|
|
761
|
+
type UsePromiseModalOptions<T extends CustomModalProps = CustomModalProps> = UseModalOptions<T>;
|
|
762
|
+
declare function usePromiseModal<T extends CustomModalProps>(ModalComponent: React__default.FC<T>, options?: UsePromiseModalOptions<T>): [PromiseOverlayOpener<T>, React__default.ReactNode];
|
|
763
|
+
declare function useGlobalPromiseModal<T extends CustomModalProps>(ModalComponent: React__default.FC<T>, options?: UsePromiseModalOptions<T>): PromiseOverlayOpener<T>;
|
|
764
|
+
/**
|
|
765
|
+
* 生成绑定了特定 Modal 组件的 Promise Hook 工厂
|
|
766
|
+
*/
|
|
767
|
+
declare function generateUsePromiseModalHook<T extends CustomModalProps>(ModalComponent: React__default.FC<T>): {
|
|
768
|
+
usePromiseModal: (options?: UsePromiseModalOptions<T>) => [PromiseOverlayOpener<T>, React__default.ReactNode];
|
|
769
|
+
useGlobalPromiseModal: (options?: UsePromiseModalOptions<T>) => PromiseOverlayOpener<T>;
|
|
770
|
+
};
|
|
771
|
+
|
|
772
|
+
/**
|
|
773
|
+
* @file usePromiseDrawer - Promise 风格的 Drawer 管理 Hook
|
|
774
|
+
* @description
|
|
775
|
+
* 在 usePromiseOverlay 上使用 Drawer 专用的 propsAdapter,行为与 useDrawer 完全对齐:
|
|
776
|
+
* - opener 返回 `Promise<V | undefined>`
|
|
777
|
+
* - customOk(value) → resolve(value);非 OK 关闭 → resolve(undefined);customOk 抛错 / reject → reject 透传
|
|
778
|
+
*
|
|
779
|
+
* @example
|
|
780
|
+
* const [openPromiseDrawer, holder] = usePromiseDrawer(MyDrawer);
|
|
781
|
+
* const result = await openPromiseDrawer({ title: 'Edit' });
|
|
782
|
+
* if (result === undefined) return; // 用户取消
|
|
783
|
+
*/
|
|
784
|
+
|
|
785
|
+
/**
|
|
786
|
+
* usePromiseDrawer 的配置选项(与 useDrawer 一致:不含 propsAdapter / keyPrefix)
|
|
787
|
+
*/
|
|
788
|
+
type UsePromiseDrawerOptions<T extends CustomDrawerProps = CustomDrawerProps> = UseDrawerOptions<T>;
|
|
789
|
+
declare function usePromiseDrawer<T extends CustomDrawerProps>(DrawerComponent: React__default.FC<T>, options?: UsePromiseDrawerOptions<T>): [PromiseOverlayOpener<T>, React__default.ReactNode];
|
|
790
|
+
declare function useGlobalPromiseDrawer<T extends CustomDrawerProps>(DrawerComponent: React__default.FC<T>, options?: UsePromiseDrawerOptions<T>): PromiseOverlayOpener<T>;
|
|
791
|
+
/**
|
|
792
|
+
* 生成绑定了特定 Drawer 组件的 Promise Hook 工厂
|
|
793
|
+
*/
|
|
794
|
+
declare function generateUsePromiseDrawerHook<T extends CustomDrawerProps>(DrawerComponent: React__default.FC<T>): {
|
|
795
|
+
usePromiseDrawer: (options?: UsePromiseDrawerOptions<T>) => [PromiseOverlayOpener<T>, React__default.ReactNode];
|
|
796
|
+
useGlobalPromiseDrawer: (options?: UsePromiseDrawerOptions<T>) => PromiseOverlayOpener<T>;
|
|
797
|
+
};
|
|
798
|
+
|
|
799
|
+
export { AntdOverlayProvider, type AntdOverlayProviderProps, type CustomDrawerProps, type CustomModalProps, type CustomOkValue, type CustomOverlayProps, type DefaultDrawerProps, type DefaultModalProps, type InternalOverlayProps, type OverlayController, type OverlayOpener, type PromiseOverlayOpener, type UseDrawerOptions, type UseModalOptions, type UseOverlayOptions, type UsePromiseDrawerOptions, type UsePromiseModalOptions, type UsePromiseOverlayOptions, generateUseDrawerHook, generateUseModalHook, generateUseOverlayHook, generateUsePromiseDrawerHook, generateUsePromiseModalHook, generateUsePromiseOverlayHook, useAntdOverlayContext, useDrawer, useGlobalDrawer, useGlobalModal, useGlobalOverlay, useGlobalPromiseDrawer, useGlobalPromiseModal, useGlobalPromiseOverlay, useModal, useOverlay, usePromiseDrawer, usePromiseModal, usePromiseOverlay };
|
package/dist/index.js
CHANGED
|
@@ -260,7 +260,203 @@ function generateUseDrawerHook(DrawerComponent) {
|
|
|
260
260
|
useGlobalDrawer: (options) => useGlobalDrawer(DrawerComponent, options)
|
|
261
261
|
};
|
|
262
262
|
}
|
|
263
|
+
var createSettler = (rawResolve, rawReject) => {
|
|
264
|
+
let settled = false;
|
|
265
|
+
return {
|
|
266
|
+
resolve: (value) => {
|
|
267
|
+
if (settled) return;
|
|
268
|
+
settled = true;
|
|
269
|
+
rawResolve(value);
|
|
270
|
+
},
|
|
271
|
+
reject: (err) => {
|
|
272
|
+
if (settled) return;
|
|
273
|
+
settled = true;
|
|
274
|
+
rawReject(err);
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
};
|
|
278
|
+
var passthroughAdapter = (props, state) => {
|
|
279
|
+
const result = {
|
|
280
|
+
...props,
|
|
281
|
+
open: state.open,
|
|
282
|
+
customClose: state.onClose
|
|
283
|
+
};
|
|
284
|
+
if (result.customOk) {
|
|
285
|
+
result.customOk = wrapCustomOk(result.customOk, state.onClose);
|
|
286
|
+
}
|
|
287
|
+
return result;
|
|
288
|
+
};
|
|
289
|
+
var withPromiseAdapter = (innerAdapter, settleRef) => {
|
|
290
|
+
return (props, state) => {
|
|
291
|
+
const inner = innerAdapter(props, state);
|
|
292
|
+
const innerCustomOk = inner.customOk;
|
|
293
|
+
const innerCustomClose = inner.customClose;
|
|
294
|
+
return {
|
|
295
|
+
...inner,
|
|
296
|
+
customOk: ((value) => {
|
|
297
|
+
if (innerCustomOk) {
|
|
298
|
+
try {
|
|
299
|
+
const result = innerCustomOk(value);
|
|
300
|
+
if (result instanceof Promise) {
|
|
301
|
+
return result.then(
|
|
302
|
+
(resolved) => {
|
|
303
|
+
settleRef.current?.resolve(value);
|
|
304
|
+
return resolved;
|
|
305
|
+
},
|
|
306
|
+
(err) => {
|
|
307
|
+
settleRef.current?.reject(err);
|
|
308
|
+
throw err;
|
|
309
|
+
}
|
|
310
|
+
);
|
|
311
|
+
}
|
|
312
|
+
settleRef.current?.resolve(value);
|
|
313
|
+
return result;
|
|
314
|
+
} catch (err) {
|
|
315
|
+
settleRef.current?.reject(err);
|
|
316
|
+
throw err;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
settleRef.current?.resolve(value);
|
|
320
|
+
state.onClose();
|
|
321
|
+
return void 0;
|
|
322
|
+
}),
|
|
323
|
+
customClose: () => {
|
|
324
|
+
settleRef.current?.resolve(void 0);
|
|
325
|
+
innerCustomClose();
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
};
|
|
329
|
+
};
|
|
330
|
+
var makePromiseOpener = (openOverlay, settleRef) => {
|
|
331
|
+
return (initialize) => {
|
|
332
|
+
settleRef.current?.resolve(void 0);
|
|
333
|
+
let rawResolve = () => void 0;
|
|
334
|
+
let rawReject = () => void 0;
|
|
335
|
+
const promise = new Promise((resolve, reject) => {
|
|
336
|
+
rawResolve = resolve;
|
|
337
|
+
rawReject = reject;
|
|
338
|
+
});
|
|
339
|
+
settleRef.current = createSettler(rawResolve, rawReject);
|
|
340
|
+
openOverlay(initialize);
|
|
341
|
+
return promise;
|
|
342
|
+
};
|
|
343
|
+
};
|
|
344
|
+
function usePromiseOverlay(OverlayComponent, options = {}) {
|
|
345
|
+
const settleRef = useRef(null);
|
|
346
|
+
const { propsAdapter: userAdapter, ...rest } = options;
|
|
347
|
+
const wrappedAdapter = useMemo(
|
|
348
|
+
() => withPromiseAdapter(
|
|
349
|
+
userAdapter ?? passthroughAdapter,
|
|
350
|
+
settleRef
|
|
351
|
+
),
|
|
352
|
+
[userAdapter]
|
|
353
|
+
);
|
|
354
|
+
const [openOverlay, holder] = useOverlay(OverlayComponent, {
|
|
355
|
+
...rest,
|
|
356
|
+
propsAdapter: wrappedAdapter
|
|
357
|
+
});
|
|
358
|
+
useEffect(() => {
|
|
359
|
+
return () => {
|
|
360
|
+
settleRef.current?.resolve(void 0);
|
|
361
|
+
};
|
|
362
|
+
}, []);
|
|
363
|
+
const openPromise = useMemo(() => makePromiseOpener(openOverlay, settleRef), [openOverlay]);
|
|
364
|
+
return [openPromise, holder];
|
|
365
|
+
}
|
|
366
|
+
function useGlobalPromiseOverlay(OverlayComponent, options = {}) {
|
|
367
|
+
const settleRef = useRef(null);
|
|
368
|
+
const { propsAdapter: userAdapter, ...rest } = options;
|
|
369
|
+
const wrappedAdapter = useMemo(
|
|
370
|
+
() => withPromiseAdapter(
|
|
371
|
+
userAdapter ?? passthroughAdapter,
|
|
372
|
+
settleRef
|
|
373
|
+
),
|
|
374
|
+
[userAdapter]
|
|
375
|
+
);
|
|
376
|
+
const openOverlay = useGlobalOverlay(OverlayComponent, {
|
|
377
|
+
...rest,
|
|
378
|
+
propsAdapter: wrappedAdapter
|
|
379
|
+
});
|
|
380
|
+
useEffect(() => {
|
|
381
|
+
return () => {
|
|
382
|
+
settleRef.current?.resolve(void 0);
|
|
383
|
+
};
|
|
384
|
+
}, []);
|
|
385
|
+
return useMemo(() => makePromiseOpener(openOverlay, settleRef), [openOverlay]);
|
|
386
|
+
}
|
|
387
|
+
function generateUsePromiseOverlayHook(OverlayComponent, defaultOptions) {
|
|
388
|
+
return {
|
|
389
|
+
usePromiseOverlay: (options) => usePromiseOverlay(OverlayComponent, {
|
|
390
|
+
...defaultOptions,
|
|
391
|
+
...options
|
|
392
|
+
}),
|
|
393
|
+
useGlobalPromiseOverlay: (options) => useGlobalPromiseOverlay(OverlayComponent, {
|
|
394
|
+
...defaultOptions,
|
|
395
|
+
...options
|
|
396
|
+
})
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
function usePromiseModal(ModalComponent, options) {
|
|
400
|
+
const context = useAntdOverlayContext();
|
|
401
|
+
const propsAdapter = useMemo(
|
|
402
|
+
() => createModalPropsAdapter(context?.defaultModalProps),
|
|
403
|
+
[context?.defaultModalProps]
|
|
404
|
+
);
|
|
405
|
+
return usePromiseOverlay(ModalComponent, {
|
|
406
|
+
...options,
|
|
407
|
+
keyPrefix: "use-modal",
|
|
408
|
+
propsAdapter
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
function useGlobalPromiseModal(ModalComponent, options) {
|
|
412
|
+
const context = useAntdOverlayContext();
|
|
413
|
+
const propsAdapter = useMemo(
|
|
414
|
+
() => createModalPropsAdapter(context?.defaultModalProps),
|
|
415
|
+
[context?.defaultModalProps]
|
|
416
|
+
);
|
|
417
|
+
return useGlobalPromiseOverlay(ModalComponent, {
|
|
418
|
+
...options,
|
|
419
|
+
keyPrefix: "use-modal",
|
|
420
|
+
propsAdapter
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
function generateUsePromiseModalHook(ModalComponent) {
|
|
424
|
+
return {
|
|
425
|
+
usePromiseModal: (options) => usePromiseModal(ModalComponent, options),
|
|
426
|
+
useGlobalPromiseModal: (options) => useGlobalPromiseModal(ModalComponent, options)
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
function usePromiseDrawer(DrawerComponent, options) {
|
|
430
|
+
const context = useAntdOverlayContext();
|
|
431
|
+
const propsAdapter = useMemo(
|
|
432
|
+
() => createDrawerPropsAdapter(context?.defaultDrawerProps),
|
|
433
|
+
[context?.defaultDrawerProps]
|
|
434
|
+
);
|
|
435
|
+
return usePromiseOverlay(DrawerComponent, {
|
|
436
|
+
...options,
|
|
437
|
+
keyPrefix: "use-drawer",
|
|
438
|
+
propsAdapter
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
function useGlobalPromiseDrawer(DrawerComponent, options) {
|
|
442
|
+
const context = useAntdOverlayContext();
|
|
443
|
+
const propsAdapter = useMemo(
|
|
444
|
+
() => createDrawerPropsAdapter(context?.defaultDrawerProps),
|
|
445
|
+
[context?.defaultDrawerProps]
|
|
446
|
+
);
|
|
447
|
+
return useGlobalPromiseOverlay(DrawerComponent, {
|
|
448
|
+
...options,
|
|
449
|
+
keyPrefix: "use-drawer",
|
|
450
|
+
propsAdapter
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
function generateUsePromiseDrawerHook(DrawerComponent) {
|
|
454
|
+
return {
|
|
455
|
+
usePromiseDrawer: (options) => usePromiseDrawer(DrawerComponent, options),
|
|
456
|
+
useGlobalPromiseDrawer: (options) => useGlobalPromiseDrawer(DrawerComponent, options)
|
|
457
|
+
};
|
|
458
|
+
}
|
|
263
459
|
|
|
264
|
-
export { AntdOverlayProvider, generateUseDrawerHook, generateUseModalHook, generateUseOverlayHook, useAntdOverlayContext, useDrawer, useGlobalDrawer, useGlobalModal, useGlobalOverlay, useModal, useOverlay };
|
|
460
|
+
export { AntdOverlayProvider, generateUseDrawerHook, generateUseModalHook, generateUseOverlayHook, generateUsePromiseDrawerHook, generateUsePromiseModalHook, generateUsePromiseOverlayHook, useAntdOverlayContext, useDrawer, useGlobalDrawer, useGlobalModal, useGlobalOverlay, useGlobalPromiseDrawer, useGlobalPromiseModal, useGlobalPromiseOverlay, useModal, useOverlay, usePromiseDrawer, usePromiseModal, usePromiseOverlay };
|
|
265
461
|
//# sourceMappingURL=index.js.map
|
|
266
462
|
//# sourceMappingURL=index.js.map
|