react-toolkits 2.22.9 → 2.22.11
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/CHANGELOG.md +12 -0
- package/README.md +63 -10
- package/lib/components.d.ts +10 -111
- package/lib/components.js +1 -1
- package/lib/constants.js +2 -1
- package/lib/hooks.d.ts +108 -0
- package/lib/hooks.js +1 -0
- package/lib/index.css +808 -1
- package/lib/index.d.ts +5 -4
- package/lib/index.js +2 -1
- package/lib/modules.js +1 -1
- package/lib/pages.js +2 -1
- package/lib/services.js +1 -1
- package/lib/types.js +0 -1
- package/lib/utils.js +1 -1
- package/locale/context.js +1 -9
- package/locale/en_GB.js +1 -96
- package/locale/hooks.js +1 -29
- package/locale/index.js +1 -29
- package/locale/ja_JP.js +1 -96
- package/locale/ko_KR.js +1 -96
- package/locale/zh_CN.js +1 -96
- package/package.json +12 -6
- package/lib/chunk-3OYXD4UE.js +0 -1
- package/lib/chunk-4GULXGNG.js +0 -1
- package/lib/chunk-7NM3DK6A.js +0 -1
- package/lib/chunk-FXPGR372.js +0 -0
- package/lib/chunk-JIBSYGRB.js +0 -1
- package/lib/chunk-JTDKSGJR.js +0 -1
- package/lib/chunk-K5HXGCZ4.js +0 -1
- package/lib/chunk-LRMME3YZ.js +0 -2
- package/lib/chunk-OLM4QNJB.js +0 -1
- package/lib/chunk-P5SX5RW3.js +0 -1
- package/lib/chunk-RITI5HRV.js +0 -1
- package/lib/chunk-TRRCT3ST.js +0 -1
- package/lib/chunk-TYDTFWYK.js +0 -1
- package/lib/chunk-WHOTHZUW.js +0 -1
- package/lib/chunk-X6ZI7RL7.js +0 -1
- package/lib/chunk-XQERUQGQ.js +0 -1
- package/lib/chunk-XWIQENHQ.js +0 -2
- package/lib/components.js.map +0 -1
- package/lib/constants.js.map +0 -1
- package/lib/createMenuItem-HUQG2HQY.js +0 -1
- package/lib/index.css.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/menuItemList-AS6ZDOTZ.js +0 -1
- package/lib/modules.js.map +0 -1
- package/lib/pages.js.map +0 -1
- package/lib/roleDetail-PFVKUPYB.js +0 -1
- package/lib/roleList-AHH4PNYW.js +0 -1
- package/lib/services.js.map +0 -1
- package/lib/types.js.map +0 -1
- package/lib/updateMenuItem-7SUIOBXS.js +0 -1
- package/lib/userDetail-JJNDBV5T.js +0 -1
- package/lib/userList-KX3POGAU.js +0 -1
- package/lib/utils.js.map +0 -1
- package/locale/chunk-GHHHKGNN.js +0 -1
- package/locale/context.js.map +0 -1
- package/locale/en_GB.js.map +0 -1
- package/locale/hooks.js.map +0 -1
- package/locale/index.js.map +0 -1
- package/locale/ja_JP.js.map +0 -1
- package/locale/ko_KR.js.map +0 -1
- package/locale/zh_CN.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# react-toolkits
|
|
2
2
|
|
|
3
|
+
## 2.22.11
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- dc31008: 优化InfiniteList组件,统一使用filters替代formValue,重构请求参数构建逻辑,增强代码可读性。同时引入默认payload以稳定状态管理,简化实例注册和更新流程。
|
|
8
|
+
|
|
9
|
+
## 2.22.10
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 426c6cb: 新增hooks子路径导出,重构相关组件,移除不再使用的drawer和modal组件,优化README文档以反映最新的结构和使用方式,提升代码可读性和用户体验。
|
|
14
|
+
|
|
3
15
|
## 2.22.9
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -66,7 +66,8 @@ root.render(
|
|
|
66
66
|
|
|
67
67
|
## 子路径导出(推荐)
|
|
68
68
|
|
|
69
|
-
- `react-toolkits/components`:组件与 Hooks(如 `Layout`、`ToolkitsProvider`、`
|
|
69
|
+
- `react-toolkits/components`:组件与 Hooks(如 `Layout`、`ToolkitsProvider`、`InfiniteList`)
|
|
70
|
+
- `react-toolkits/hooks`:表单弹层 Hooks(如 `useFormDrawer`、`useFormModal`)
|
|
70
71
|
- `react-toolkits/pages`:内置页面与路由片段(如 `permissionRoutes`、`menuRoutes`、`SignIn`)
|
|
71
72
|
- `react-toolkits/services`:请求相关 Hooks(如 `usePermission`、`useMenuList`、`useGames`)
|
|
72
73
|
- `react-toolkits/constants`:常量与枚举(如 `APP_ID_HEADER`、`PermissionVersion`)
|
|
@@ -77,7 +78,8 @@ root.render(
|
|
|
77
78
|
示例:
|
|
78
79
|
|
|
79
80
|
```ts
|
|
80
|
-
import { Layout
|
|
81
|
+
import { Layout } from 'react-toolkits/components'
|
|
82
|
+
import { useFormDrawer } from 'react-toolkits/hooks'
|
|
81
83
|
import { permissionRoutes } from 'react-toolkits/pages'
|
|
82
84
|
import { usePermission } from 'react-toolkits/services'
|
|
83
85
|
import { APP_ID_HEADER } from 'react-toolkits/constants'
|
|
@@ -132,6 +134,7 @@ const { t } = useTranslation()
|
|
|
132
134
|
```
|
|
133
135
|
src/
|
|
134
136
|
components/ // 组件与 Hooks(以 react-toolkits/components 导出)
|
|
137
|
+
hooks/ // 表单弹层 Hooks(以 react-toolkits/hooks 导出)
|
|
135
138
|
features/ // 特性模块(权限/菜单等:hooks/组件/服务聚合)
|
|
136
139
|
pages/ // 内置页面与路由片段
|
|
137
140
|
services/ // 数据服务 hooks(依赖 libs/ky 与全局上下文)
|
|
@@ -189,18 +192,29 @@ export default function LogList() {
|
|
|
189
192
|
|
|
190
193
|
```tsx
|
|
191
194
|
import { Button } from 'antd'
|
|
192
|
-
import { useFormDrawer } from 'react-toolkits/
|
|
195
|
+
import { useFormDrawer } from 'react-toolkits/hooks'
|
|
193
196
|
|
|
194
197
|
export default function CreateUser() {
|
|
195
198
|
const { show, drawer } = useFormDrawer({
|
|
196
199
|
title: '新建用户',
|
|
197
|
-
|
|
200
|
+
onConfirm: async values => {
|
|
198
201
|
await fetch('/api/users', { method: 'POST', body: JSON.stringify(values) })
|
|
199
202
|
},
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
203
|
+
content: (
|
|
204
|
+
<>
|
|
205
|
+
<Form.Item name="name" label="姓名" rules={[{ required: true }]}>
|
|
206
|
+
<Input />
|
|
207
|
+
</Form.Item>
|
|
208
|
+
<Form.Item name="role" label="角色" rules={[{ required: true }]}>
|
|
209
|
+
<Select
|
|
210
|
+
options={[
|
|
211
|
+
{ value: 'admin', label: '管理员' },
|
|
212
|
+
{ value: 'user', label: '用户' },
|
|
213
|
+
]}
|
|
214
|
+
/>
|
|
215
|
+
</Form.Item>
|
|
216
|
+
</>
|
|
217
|
+
),
|
|
204
218
|
})
|
|
205
219
|
|
|
206
220
|
return (
|
|
@@ -212,6 +226,44 @@ export default function CreateUser() {
|
|
|
212
226
|
}
|
|
213
227
|
```
|
|
214
228
|
|
|
229
|
+
### 表单弹层(`useFormModal`)
|
|
230
|
+
|
|
231
|
+
```tsx
|
|
232
|
+
import { Button, Form, Input, Select } from 'antd'
|
|
233
|
+
import { useFormModal } from 'react-toolkits/hooks'
|
|
234
|
+
|
|
235
|
+
export default function EditUser() {
|
|
236
|
+
const { show, modal } = useFormModal({
|
|
237
|
+
title: '编辑用户',
|
|
238
|
+
onConfirm: async values => {
|
|
239
|
+
await fetch('/api/users', { method: 'PUT', body: JSON.stringify(values) })
|
|
240
|
+
},
|
|
241
|
+
content: (
|
|
242
|
+
<>
|
|
243
|
+
<Form.Item name="name" label="姓名" rules={[{ required: true }]}>
|
|
244
|
+
<Input />
|
|
245
|
+
</Form.Item>
|
|
246
|
+
<Form.Item name="role" label="角色" rules={[{ required: true }]}>
|
|
247
|
+
<Select
|
|
248
|
+
options={[
|
|
249
|
+
{ value: 'admin', label: '管理员' },
|
|
250
|
+
{ value: 'user', label: '用户' },
|
|
251
|
+
]}
|
|
252
|
+
/>
|
|
253
|
+
</Form.Item>
|
|
254
|
+
</>
|
|
255
|
+
),
|
|
256
|
+
})
|
|
257
|
+
|
|
258
|
+
return (
|
|
259
|
+
<>
|
|
260
|
+
<Button onClick={() => show({ initialValues: { name: 'John', role: 'user' } })}>编辑</Button>
|
|
261
|
+
{modal}
|
|
262
|
+
</>
|
|
263
|
+
)
|
|
264
|
+
}
|
|
265
|
+
```
|
|
266
|
+
|
|
215
267
|
### 服务层 Hooks(`react-toolkits/services`)
|
|
216
268
|
|
|
217
269
|
```tsx
|
|
@@ -257,13 +309,14 @@ export default function FetchWithKy() {
|
|
|
257
309
|
过去:
|
|
258
310
|
|
|
259
311
|
```ts
|
|
260
|
-
import { ToolkitsProvider, Layout } from 'react-toolkits'
|
|
312
|
+
import { ToolkitsProvider, Layout, useFormDrawer } from 'react-toolkits'
|
|
261
313
|
```
|
|
262
314
|
|
|
263
315
|
现在(推荐):
|
|
264
316
|
|
|
265
317
|
```ts
|
|
266
318
|
import { ToolkitsProvider, Layout } from 'react-toolkits/components'
|
|
319
|
+
import { useFormDrawer, useFormModal } from 'react-toolkits/hooks'
|
|
267
320
|
import { permissionRoutes } from 'react-toolkits/pages'
|
|
268
321
|
import { usePermission } from 'react-toolkits/services'
|
|
269
322
|
```
|
|
@@ -301,7 +354,7 @@ pnpm -C packages/react-toolkits build
|
|
|
301
354
|
pnpm -C packages/react-toolkits dev
|
|
302
355
|
```
|
|
303
356
|
|
|
304
|
-
构建将产出多入口:`lib/index.js`、`lib/components.js`、`lib/pages.js`、`lib/services.js`、`lib/types.js`、`lib/utils.js`,以及 `locale/*`。
|
|
357
|
+
构建将产出多入口:`lib/index.js`、`lib/components.js`、`lib/hooks.js`、`lib/pages.js`、`lib/services.js`、`lib/types.js`、`lib/utils.js`,以及 `locale/*`。
|
|
305
358
|
|
|
306
359
|
提示:发布前请确保示例应用验证通过,并更新 `CHANGELOG.md` 描述变更与迁移说明。
|
|
307
360
|
|
package/lib/components.d.ts
CHANGED
|
@@ -1,71 +1,17 @@
|
|
|
1
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { DrawerProps, Button, FormProps, FormInstance, MenuProps, SelectProps, ModalProps, ButtonProps } from 'antd';
|
|
3
1
|
import * as react from 'react';
|
|
4
|
-
import {
|
|
5
|
-
import { AnyObject } from 'antd/es/_util/type';
|
|
6
|
-
import { RecursivePartial } from './types.js';
|
|
7
|
-
import * as zustand from 'zustand';
|
|
2
|
+
import { FC, PropsWithChildren, Key, ReactNode, ReactElement, Ref, DetailedHTMLProps, ImgHTMLAttributes, ComponentType } from 'react';
|
|
8
3
|
import { ParagraphProps } from 'antd/es/typography/Paragraph';
|
|
4
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
5
|
+
import { FormInstance, MenuProps, SelectProps, ButtonProps } from 'antd';
|
|
6
|
+
import { AnyObject } from 'antd/es/_util/type';
|
|
9
7
|
import { TableProps } from 'antd/es/table';
|
|
8
|
+
import * as zustand from 'zustand';
|
|
10
9
|
import { ItemType, SubMenuType, MenuItemGroupType, MenuItemType } from 'antd/es/menu/interface';
|
|
11
10
|
import { Merge } from 'ts-essentials';
|
|
12
11
|
import { G as Game } from './types-DVKf5poe.js';
|
|
13
12
|
import { Options } from 'ky';
|
|
14
13
|
import { PermissionVersion } from './constants.js';
|
|
15
14
|
|
|
16
|
-
interface UseDrawerOperation {
|
|
17
|
-
hide: () => void;
|
|
18
|
-
}
|
|
19
|
-
interface UseDrawerProps extends Omit<DrawerProps, 'open' | 'confirmLoading' | 'onClose' | 'footer'> {
|
|
20
|
-
content?: ReactNode | ((operation: UseDrawerOperation) => ReactNode);
|
|
21
|
-
onConfirm?: () => void | Promise<void>;
|
|
22
|
-
afterOpen?: () => void | Promise<void>;
|
|
23
|
-
afterClose?: () => void | Promise<void>;
|
|
24
|
-
footer?: ReactNode | null;
|
|
25
|
-
confirmText?: string;
|
|
26
|
-
cancelText?: string;
|
|
27
|
-
confirmButtonProps?: ComponentProps<typeof Button>;
|
|
28
|
-
cancelButtonProps?: ComponentProps<typeof Button>;
|
|
29
|
-
}
|
|
30
|
-
declare function useDrawer(props: UseDrawerProps): {
|
|
31
|
-
id: number;
|
|
32
|
-
show: () => Promise<void>;
|
|
33
|
-
hide: () => void;
|
|
34
|
-
confirmLoading: boolean;
|
|
35
|
-
drawer: react_jsx_runtime.JSX.Element;
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
interface UseFormDrawerProps<Values extends AnyObject = AnyObject, ExtraValues = any> extends Omit<UseDrawerProps, 'onConfirm' | 'content' | 'onShow' | 'afterClose'> {
|
|
39
|
-
formProps?: Omit<FormProps, 'form'>;
|
|
40
|
-
form?: FormInstance<Values>;
|
|
41
|
-
content?: ReactNode | ((extraValues: ExtraValues, operation: UseDrawerOperation) => ReactNode);
|
|
42
|
-
onConfirm?: (values: Values, extraValues: ExtraValues) => void | Promise<void>;
|
|
43
|
-
onSuccess?: () => void;
|
|
44
|
-
afterClose?: (form: FormInstance<Values>) => void;
|
|
45
|
-
}
|
|
46
|
-
declare function useFormDrawer<Values extends AnyObject = AnyObject, ExtraValues = any>(props: UseFormDrawerProps<Values, ExtraValues>): {
|
|
47
|
-
id: number;
|
|
48
|
-
show: (options?: {
|
|
49
|
-
initialValues?: RecursivePartial<Values>;
|
|
50
|
-
extraValues?: ExtraValues;
|
|
51
|
-
}) => void;
|
|
52
|
-
hide: () => void;
|
|
53
|
-
drawer: react_jsx_runtime.JSX.Element;
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
interface DrawerState {
|
|
57
|
-
open: Map<number, boolean>;
|
|
58
|
-
usedIds: Set<number>;
|
|
59
|
-
isOpen: (uuid: number) => boolean;
|
|
60
|
-
show: (uuid: number) => void;
|
|
61
|
-
hide: (uuid: number) => void;
|
|
62
|
-
hideAll: () => void;
|
|
63
|
-
checkUniqueness: (uuid: number) => boolean;
|
|
64
|
-
registerIds: (uuid: number) => boolean;
|
|
65
|
-
cleanup: (uuid: number) => void;
|
|
66
|
-
}
|
|
67
|
-
declare const useDrawerStore: zustand.UseBoundStore<zustand.StoreApi<DrawerState>>;
|
|
68
|
-
|
|
69
15
|
interface DynamicTagsProps {
|
|
70
16
|
initialTags?: string[];
|
|
71
17
|
addable?: boolean;
|
|
@@ -98,7 +44,7 @@ declare const Highlight: (props: HighlightProps) => react_jsx_runtime.JSX.Elemen
|
|
|
98
44
|
|
|
99
45
|
interface InfiniteListPayload<Values = any> {
|
|
100
46
|
page?: number;
|
|
101
|
-
|
|
47
|
+
filters?: Values;
|
|
102
48
|
}
|
|
103
49
|
interface InfiniteListRequestConfig<Values = any> {
|
|
104
50
|
url: string;
|
|
@@ -129,8 +75,8 @@ interface InfiniteListRef<Item = any, Values = any, Data = any> {
|
|
|
129
75
|
hasNextPage: boolean;
|
|
130
76
|
isFetchingNextPage: boolean;
|
|
131
77
|
}
|
|
132
|
-
interface InfiniteListProps<Item, Values, Data> extends
|
|
133
|
-
identifier
|
|
78
|
+
interface InfiniteListProps<Item, Values, Data> extends Omit<TableProps<Item>, 'pagination' | 'dataSource' | 'loading' | 'footer'>, Pick<FilterFormWrapperProps, 'buttonsAlign' | 'showReset'> {
|
|
79
|
+
identifier?: string;
|
|
134
80
|
code?: string;
|
|
135
81
|
form?: FormInstance<Values>;
|
|
136
82
|
refreshInterval?: number;
|
|
@@ -144,7 +90,7 @@ interface InfiniteListProps<Item, Values, Data> extends Pick<TableProps<Item>, '
|
|
|
144
90
|
footer?: (data: Data[] | undefined) => ReactNode;
|
|
145
91
|
}
|
|
146
92
|
declare const InfiniteList: <Item extends AnyObject = AnyObject, Values extends object | undefined = undefined, Data = any>(props: InfiniteListProps<Item, Values, Data> & {
|
|
147
|
-
ref?: Ref<InfiniteListRef<Item, Data>>;
|
|
93
|
+
ref?: Ref<InfiniteListRef<Item, Values, Data>>;
|
|
148
94
|
}) => ReactElement;
|
|
149
95
|
|
|
150
96
|
type InfiniteQueryRefetchFunction = () => void | Promise<unknown>;
|
|
@@ -236,53 +182,6 @@ declare const Layout: FC<PropsWithChildren<LayoutProps>>;
|
|
|
236
182
|
type LogoProps = Omit<DetailedHTMLProps<ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, 'src' | 'alt'>;
|
|
237
183
|
declare const Logo: FC<LogoProps>;
|
|
238
184
|
|
|
239
|
-
interface UseModalOperation {
|
|
240
|
-
hide: () => void;
|
|
241
|
-
}
|
|
242
|
-
interface UseModalProps extends Omit<ModalProps, 'open' | 'confirmLoading' | 'onOk' | 'onCancel'> {
|
|
243
|
-
content?: ReactNode | ((operation: UseModalOperation) => ReactNode);
|
|
244
|
-
onConfirm?: () => void | Promise<void>;
|
|
245
|
-
afterOpen?: () => void | Promise<void>;
|
|
246
|
-
afterClose?: () => void | Promise<void>;
|
|
247
|
-
}
|
|
248
|
-
declare function useModal(props: UseModalProps): {
|
|
249
|
-
id: number;
|
|
250
|
-
show: () => Promise<void>;
|
|
251
|
-
hide: () => void;
|
|
252
|
-
modal: react_jsx_runtime.JSX.Element;
|
|
253
|
-
};
|
|
254
|
-
|
|
255
|
-
interface UseFormModalProps<Values extends AnyObject = AnyObject, ExtraValues = any> extends Omit<UseModalProps, 'onConfirm' | 'content' | 'onShow' | 'afterClose'> {
|
|
256
|
-
formProps?: Omit<FormProps, 'form'>;
|
|
257
|
-
form?: FormInstance<Values>;
|
|
258
|
-
content?: ReactNode | ((extraValues: ExtraValues, operation: UseModalOperation) => ReactNode);
|
|
259
|
-
onConfirm?: (values: Values, extraValues: ExtraValues) => void | Promise<void>;
|
|
260
|
-
onSuccess?: () => void;
|
|
261
|
-
afterClose?: (form: FormInstance<Values>) => void;
|
|
262
|
-
}
|
|
263
|
-
declare function useFormModal<Values extends AnyObject = AnyObject, ExtraValues = any>(props: UseFormModalProps<Values, ExtraValues>): {
|
|
264
|
-
id: number;
|
|
265
|
-
show: (options?: {
|
|
266
|
-
initialValues?: RecursivePartial<Values>;
|
|
267
|
-
extraValues?: ExtraValues;
|
|
268
|
-
}) => void;
|
|
269
|
-
hide: () => void;
|
|
270
|
-
modal: react_jsx_runtime.JSX.Element;
|
|
271
|
-
};
|
|
272
|
-
|
|
273
|
-
interface ModalState {
|
|
274
|
-
open: Map<number, boolean>;
|
|
275
|
-
usedIds: Set<number>;
|
|
276
|
-
isOpen: (uuid: number) => boolean;
|
|
277
|
-
show: (uuid: number) => void;
|
|
278
|
-
hide: (uuid: number) => void;
|
|
279
|
-
hideAll: () => void;
|
|
280
|
-
checkUniqueness: (uuid: number) => boolean;
|
|
281
|
-
registerIds: (uuid: number) => boolean;
|
|
282
|
-
cleanup: (uuid: number) => void;
|
|
283
|
-
}
|
|
284
|
-
declare const useModalStore: zustand.UseBoundStore<zustand.StoreApi<ModalState>>;
|
|
285
|
-
|
|
286
185
|
interface PermissionButtonProps extends ButtonProps {
|
|
287
186
|
code?: string | string[];
|
|
288
187
|
showLoading?: boolean;
|
|
@@ -527,4 +426,4 @@ declare const withContext: (Component: ComponentType, providerProps: Omit<Toolki
|
|
|
527
426
|
|
|
528
427
|
declare const UserWidget: FC;
|
|
529
428
|
|
|
530
|
-
export { DynamicTags, type DynamicTagsProps, ExpandableParagraph, type ExpandableParagraphProps, FilterFormWrapper, type FilterFormWrapperProps, Game, Highlight, type HighlightProps, InfiniteList, InfiniteListAction, type InfiniteListPayload, type InfiniteListProps, type InfiniteListRef, type InfiniteListRequestConfig, Layout, type LayoutProps, Logo, type LogoProps, NavMenu, type NavMenuItem, PermissionButton, type PermissionButtonProps, QueryList, QueryListAction, type QueryListPayload, type QueryListProps, type QueryListRef, RequireGame, RequirePermission, type RequirePermissionProps, ToolkitsProvider, type ToolkitsProviderProps,
|
|
429
|
+
export { DynamicTags, type DynamicTagsProps, ExpandableParagraph, type ExpandableParagraphProps, FilterFormWrapper, type FilterFormWrapperProps, Game, Highlight, type HighlightProps, InfiniteList, InfiniteListAction, type InfiniteListPayload, type InfiniteListProps, type InfiniteListRef, type InfiniteListRequestConfig, Layout, type LayoutProps, Logo, type LogoProps, NavMenu, type NavMenuItem, PermissionButton, type PermissionButtonProps, QueryList, QueryListAction, type QueryListPayload, type QueryListProps, type QueryListRef, RequireGame, RequirePermission, type RequirePermissionProps, ToolkitsProvider, type ToolkitsProviderProps, UserWidget, useInfiniteListStore, useQueryListStore, useToolkitsStore, withContext };
|
package/lib/components.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{d as DynamicTags,f as InfiniteList,j as Layout,g as NavMenu,h as RequireGame,k as RequirePermission,i as UserWidget,b as useDrawer,a as useDrawerStore,c as useFormDrawer,e as useInfiniteListStore}from'./chunk-K5HXGCZ4.js';export{a as Highlight}from'./chunk-RITI5HRV.js';export{d as PermissionButton,c as useFormModal,b as useModal,a as useModalStore}from'./chunk-3OYXD4UE.js';export{a as ExpandableParagraph,b as Logo}from'./chunk-JTDKSGJR.js';export{a as FilterFormWrapper,d as QueryList,c as QueryListAction,b as useQueryListStore}from'./chunk-4GULXGNG.js';import'./chunk-7NM3DK6A.js';import'./chunk-X6ZI7RL7.js';export{c as ToolkitsProvider,a as useToolkitsStore,b as withContext}from'./chunk-WHOTHZUW.js';import'./chunk-LRMME3YZ.js';import'./chunk-OLM4QNJB.js';
|
|
1
|
+
import {PlusOutlined,LogoutOutlined,UserOutlined,MenuUnfoldOutlined,MenuFoldOutlined}from'@ant-design/icons';import*as ge from'antd';import {Spin,Menu,Form,Result,Table,Button,App,theme,Space,Input,Tag,Typography,Empty,Dropdown,Divider,Tooltip,Select}from'antd';import {createContext,forwardRef,memo,useRef,useMemo,useCallback,useEffect,useContext,useState,useImperativeHandle,cloneElement,Fragment as Fragment$1,Suspense}from'react';import {isEqual,has,template,get}from'lodash-es';import {create,useStore,createStore}from'zustand';import {persist,createJSONStorage,devtools,subscribeWithSelector}from'zustand/middleware';import {jwtDecode}from'jwt-decode';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {flushSync}from'react-dom';import {createRoot}from'react-dom/client';import {useInfiniteQuery,useQuery,useQueryClient}from'@tanstack/react-query';import kr from'ky';import {Link,useLocation,useNavigate}from'react-router-dom';import Nn from'./logo-L6MFCL6M.png';var Xe={getItem:e=>sessionStorage.getItem(e)||localStorage.getItem(e),setItem:(e,r)=>{sessionStorage.setItem(e,r),localStorage.setItem(e,r);},removeItem(e){sessionStorage.removeItem(e),localStorage.removeItem(e);}};var ae="App-ID";var _t={global:{noEntitlement:"No permission, please contact the administrator.",name:"Name",creationTime:"Creation Time",operation:"Operation",update:"Update",edit:"Edit",delete:"Delete",selectAll:"Select All",game:"Game",user:"User",role:"Role",username:"Username",password:"Password",label:"Label",method:"Method",route:"Route",request:"Request",response:"Response",add:"Add",signIn:"Sign In",projectGroup:"Project Group",view:"View"},SignIn:{title:"Sign In Method",thirdParty:"Third party sign in",signInWithIDass:"Sign in with IDass",unregistered:"You are not yet registered on the platform, please contact the administrator",welcome:"Welcome"},NotFound:{subTitle:"The page you visited does not exist",buttonText:"Return to homepage"},FilterFormWrapper:{confirmText:"Search",resetText:"Reset"},FormModal:{confirmText:"Confirm",cancelText:"Cancel"},GameSelect:{label:"Current Game",placeholder:"Please select a game"},RequireGame:{description:"Please select a game"},UserWidget:{signOutText:"Sign Out"},User:{createTitle:"Create User",createSuccessfully:"User created successfully",updateTitle:"Update User",updateSuccessfully:"User updated successfully",deleteTitle:"Delete User",deleteContent:"Are you sure you want to delete user <%= user %>?",deleteSuccessfully:"User deleted successfully"},Role:{createTitle:"Create Role",createSuccessfully:"Role created successfully",updateTitle:"Update Role",updateSuccessfully:"Role updated successfully",deleteTitle:"Delete Role",deleteContent:"Are you sure you want to delete role <%= role %>?",deleteSuccessfully:"Role deleted successfully"},PermissionList:{failedDescription:"Failed to get permission list",baseSectionTitle:"Platform Basic Permissions",gameSectionTitle:"Game Permissions",gameSectionDescription:"Please select a game first",gameSelectPlaceholder:"Please select a game first",removeText:"Remove",addText:"Add Game Permissions"},RoleDetail:{title:"Role Details"},InfiniteList:{loadingText:"Loading...",reachEndText:"You've reached the end",loadMoreText:"Load more"}},Ze=_t;var et=e=>({locale:Ze,gameApiV2:!1,isGlobal:!1,signInPath:"/sign_in",mainPagePath:"/",permissionVersion:"v1",setContext(r){e(t=>({...t,...r}));}});var tt=e=>({setGameId:r=>{e({gameId:r});}});var rt=(e,r)=>({getUser:()=>{let t=r().token;if(t)try{return jwtDecode(t)}catch{return null}return null},setToken:t=>e({token:t})});var nt=e=>createStore()(persist((...r)=>{let[,t,n]=r,o=()=>{t().setToken(""),n.persist.clearStorage();};return {...rt(...r),...tt(...r),...et(...r),clearToken:o,...e}},{name:"toolkits",storage:createJSONStorage(()=>Xe),partialize:r=>({token:r.token,gameId:r.gameId,collapsed:r.collapsed})}));var qe=createContext(null);function O(e){let r=useContext(qe);if(!r)throw new Error("Missing ToolkitsProvider in the tree");return useStore(r,e||(t=>t))}var st=e=>{let{children:r,...t}=e,n=useRef(),o=useContext(qe)?.getState();if(n.current||(n.current=nt({...o,...t})),!n.current.getState().signInPath)throw new Error('ToolkitsProvider: \u8BF7\u914D\u7F6E "signInPath"');return jsx(qe.Provider,{value:n.current,children:jsx(App,{children:r})})},Xt=(e,r)=>{let t=n=>jsx(st,{...r,children:jsx(e,{...n})});return t.displayName=`withContext(${e.displayName||e.name||"Component"})`,t},Zt=st;function E(){let e=O(t=>t.locale);return {t:useMemo(()=>(t,n)=>has(e,t)?template(get(e,t))(n):t,[e])}}var ar=e=>{let{initialTags:r,addable:t,removable:n,addCallback:o,removeCallback:a}=e,{t:s}=E(),{token:i}=theme.useToken(),[l,g]=useState([]),[u,P]=useState(!1),[b,F]=useState(""),[h,f]=useState(-1),[v,k]=useState(""),V=useRef(null),D=useRef(null);useEffect(()=>{g(r??[]);},[r]),useEffect(()=>{u&&V.current?.focus();},[u]),useEffect(()=>{D.current?.focus();},[b]);let d=async c=>{if(await a?.(c)){let R=l.filter(w=>w!==c);g(R);}},I=()=>{P(!0);},M=c=>{F(c.target.value);},q=async()=>{b&&l.indexOf(b)===-1&&await o?.(b)&&g([...l,b]),P(!1),F("");},p=c=>{k(c.target.value);},m=()=>{let c=[...l];c[h]=v,g(c),f(-1),F("");},y={width:78,verticalAlign:"top"},L={background:i.colorBgContainer,borderStyle:"dashed"};return jsxs(Space,{wrap:!0,size:[0,8],children:[jsx(Space,{wrap:!0,size:[0,8],children:l.map((c,C)=>h===C?jsx(Input,{ref:D,size:"small",style:y,value:v,onChange:p,onBlur:m,onPressEnter:m},c):jsx(Tag,{closable:n,style:{userSelect:"none"},onClose:async R=>{R.preventDefault(),await d(c);},children:jsx("span",{onDoubleClick:R=>{C!==0&&(f(C),k(c),R.preventDefault());},children:c})},c))}),t&&(u?jsx(Input,{ref:V,type:"text",size:"small",style:y,value:b,onChange:M,onBlur:q,onPressEnter:q}):jsxs(Tag,{style:L,onClick:I,children:[jsx(PlusOutlined,{}),"\xA0",s("global.add")]}))]})},ir=ar;var ur=e=>{let{children:r,...t}=e,[n,o]=useState(!1);return jsx(Typography.Paragraph,{...t,className:"mb-0",ellipsis:{rows:2,expandable:"collapsible",expanded:n,onExpand:(a,s)=>{o(s.expanded);}},children:r})},pr=ur;var gr=e=>{let{extras:r,isConfirming:t,onConfirm:n,onReset:o,children:a,buttonsAlign:s="left",showReset:i}=e,{t:l}=E(),{token:{colorFillAlter:g,lineWidth:u,lineType:P,colorBorder:b,borderRadiusLG:F}}=theme.useToken();return jsx("div",{style:{maxWidth:"none",background:g,borderWidth:u,borderStyle:P,borderColor:b,borderRadius:F,padding:24,marginBottom:24},children:jsxs("div",{className:`flex ${s==="bottom"?"flex-col":"flex-row"}`,children:[jsx("div",{className:`${s==="left"?"flex-grow-0":"flex-1"}`,children:a}),jsx("div",{className:`${s==="bottom"?"text-end":"text-start"} ml-4`,children:jsxs(Space,{children:[jsx(Button,{type:"primary",disabled:t,onClick:n,children:l("FilterFormWrapper.confirmText")}),r?.map(f=>jsx(Fragment$1,{children:f.children},f.key)),i&&jsx(Button,{onClick:o,children:l("FilterFormWrapper.resetText")})]})})]})})},ye=gr;var xr=e=>{let r=/(<[^>]*>)/;return e.split(r).filter(t=>t!=="")};function Ir(e){let r=document.createElement("div"),t=createRoot(r);return new Promise(n=>{setTimeout(()=>{flushSync(()=>{t.render(e);}),n(r.innerHTML);});})}var Sr=e=>{let{texts:r,children:t}=e,[n,o]=useState("");return useEffect(()=>{Ir(t).then(a=>{let s=xr(a);for(let i of r)for(let l=0;l<s.length;l++)s[l]=s[l].replace(String(i),`<span style='color: #DC143C;'>${i}</span>`);o(s.join(""));});},[t,r]),jsx("div",{dangerouslySetInnerHTML:{__html:n}})},vr=Sr;var Ge=[0,1,200],Le={OK:200,UNAUTHORIZED:401,FORBIDDEN:403,UNREGISTERED:412},Er=3e4;var mt=e=>!e||typeof e!="object"?"Unknown error":e.msg||e.message||e.error||"Unknown error",Fr=e=>{let{value:r,allowedCodes:t}=e;return r==null||typeof r!="number"?!1:t.includes(r)},Dr=(e,r)=>{if(r<Le.OK||r>=300)return !1;if(!e||typeof e!="object")return !0;let t=[{field:"code",value:e.code,allowedCodes:Ge},{field:"status",value:e.status,allowedCodes:Ge},{field:"errno",value:e.errno,allowedCodes:Ge}];return t.some(o=>o.value!==void 0&&o.value!==null)?t.every(o=>o.value===void 0||o.value===null||Fr(o)):!0},Or=async(e,r)=>{switch(r){case"blob":return e.blob();case"text":return e.text();case"arrayBuffer":return e.arrayBuffer();case"formData":return e.formData();case"json":default:return e.json()}},j=e=>{let{notification:r}=App.useApp(),t=O(),{token:n,isGlobal:o,gameId:a,permissionVersion:s,signInPath:i,clearToken:l}=t,g=()=>{l(),i&&(window.location.href=i);},u=()=>{if(l(),i){let p=new URL(i,window.location.origin);p.searchParams.set("unregistered","true"),window.location.href=p.toString();}},P=()=>{r.error({message:"\u8BBF\u95EE\u88AB\u7981\u6B62",description:"\u60A8\u6CA1\u6709\u6743\u9650\u8BBF\u95EE\u6B64\u8D44\u6E90\u3002"});},b=p=>async(m,y,L)=>{if(p==="blob"||p==="arrayBuffer"||p==="text"||p==="formData")return L;let c;try{c=await L.clone().json();}catch{return L}if(Dr(c,L.status)){let w=c.data!==void 0?c.data:c;return new Response(JSON.stringify(w),{status:L.status,statusText:L.statusText,headers:L.headers})}let C=mt(c);r.error({message:"Request failed",description:C});let R=new Error(C);throw R.response=L,R.data=c,R},F=(p,m)=>{switch(p){case Le.UNAUTHORIZED:g();break;case Le.UNREGISTERED:u();break;case Le.FORBIDDEN:P();break;default:{let y=mt(m)||`HTTP ${p} Error`;r.error({message:"Request failed",description:y});break}}},h=useMemo(()=>kr.create({prefixUrl:e,retry:0,timeout:Er,headers:{Accept:"application/json","Content-Type":"application/json"},hooks:{beforeRequest:[m=>{n&&m.headers.set("Authorization",`Bearer ${n}`),!m.headers.has(ae)&&s!=="v1"&&(o||!a?m.headers.set(ae,"global"):m.headers.set(ae,encodeURIComponent(String(a))));}],beforeError:[async m=>{let{response:y}=m;if(y){let L=y.status,c;try{let C=y.headers.get("content-type")||"";(C.includes("application/json")||C.startsWith("text/"))&&(c=await y.clone().json());}catch{}F(L,c);}else r.error({message:"Network Error",description:m.message||"Network request failed"});return m}]}}),[e,n,o,a,s]),f=async(p,m,y,L)=>{let{responseType:c,...C}=L||{},R={...C,hooks:{...C.hooks,afterResponse:[...C.hooks?.afterResponse||[],b(c)]}},w;return y?w=await h(m,{method:p,json:y,...R}):w=await h(m,{method:p,...R}),Or(w,c)};return {get:(p,m)=>f("GET",p,void 0,m),post:(p,m,y)=>f("POST",p,m,y),put:(p,m,y)=>f("PUT",p,m,y),delete:(p,m)=>f("DELETE",p,void 0,m),patch:(p,m,y)=>f("PATCH",p,m,y),options:(p,m)=>f("OPTIONS",p,void 0,m),head:(p,m)=>f("HEAD",p,void 0,m),request:p=>{let{url:m,...y}=p;return f(y.method||"GET",m,void 0,y)},instance:h}};var Qe={permissions:{check:(e,r)=>["permissions","check",e,r],allPermissions:["permissions","all"],allPermissionsV2:["permissions","allV2"]},users:{all:["users"],detail:e=>["users","detail",e],create:["users","create"],update:["users","update"],delete:["users","delete"]},roles:{all:["roles"],detail:(e,r)=>["roles","detail",e,r],create:e=>["roles","create",e],update:e=>["roles","update",e],delete:["roles","delete"]},menus:{all:["menus"],navbar:e=>["menus","navbar",e],detail:e=>["menus","detail",e],create:["menus","create"],update:["menus","update"],delete:["menus","delete"]},enums:{gameGroups:["enums","gameGroups"],gameIds:e=>["enums","gameIds",e]}};function z(e,r){let t=j(),{permissionVersion:n}=O(),o=n!=="v1"?"/api/usystem/user/checkV2":"/api/usystem/user/check",a=typeof e<"u"?typeof e=="string"?[e]:e:[],s=n!=="v1"?"v2":"v1",{data:i,...l}=useQuery({queryKey:a.length>0?Qe.permissions.check(a,s):["permissions","disabled"],queryFn:()=>t.post(o,{json:{permissions:a},...r}),enabled:a.length>0}),g=!0;return typeof e=="string"?g=i?.has_all?!0:i?.[e]??!1:Array.isArray(e)&&e.length>0&&(g=a.reduce((u,P)=>(u[P]=i?.has_all?!0:i?.[P]??!1,u),{})),{...l,data:g}}var Ce=()=>{let{gameApiV2:e,permissionVersion:r}=O(),t=j(),n=r!=="v1"?e?"/api/game/list":"/api/usystem/game/all":null;return useQuery({queryKey:Qe.enums.gameGroups,queryFn:async()=>{if(!n)return [];let o={headers:{[ae]:"global"}};return e?(await t.get(n,o))?.list??[]:await t.get(n,o)??[]},enabled:!!n,staleTime:1/0})};var gt=Object.freeze({page:0,filters:Object.freeze({})}),Vr=()=>create()(devtools(subscribeWithSelector((e,r)=>({instances:new Map,registerInstance(t,n,o,a,s){e(i=>{let l=i.instances.get(t);if(l){if(l.refetch!==a||l.fetchNextPage!==s){let P={...l,refetch:a,fetchNextPage:s},b=new Map(i.instances);return b.set(t,P),{instances:b}}return i}let g={id:t,url:n,queryKey:o,payload:gt,refetch:a,fetchNextPage:s},u=new Map(i.instances);return u.set(t,g),{instances:u}});},unregisterInstance(t){e(n=>{let o=new Map(n.instances);return o.delete(t)?{instances:o}:n});},updatePayload(t,n){e(o=>{let a=o.instances.get(t);if(!a)return o;let s={...a.payload,...n};if(!isEqual(a.payload,s)){let i={...a,payload:s},l=new Map(o.instances);return l.set(t,i),{instances:l}}return o});},getPayload(t){return r().instances.get(t)?.payload??gt},async refetch(t,n){let o=r().instances.get(t);if(!o)return;let a=!1;if(n){let s=o.payload,i={...s,...n};isEqual(s,i)||(r().updatePayload(t,n),a=!0);}if(!a)try{await o.refetch();}catch(s){throw s}},async fetchNextPage(t){let n=r().instances.get(t);if(n)try{await n.fetchNextPage();}catch(o){throw o}},getInstance(t){return r().instances.get(t)},getAllInstances(){return Array.from(r().instances.values())}})),{name:"infinite-list-store"})),qr=Vr(),G=qr;var zr=5*60*1e3,$r=30*1e3,Yr={display:"flex",justifyContent:"center",alignItems:"center",height:300},Jr=0,Xr=()=>`infiniteList_${Date.now()}_${++Jr}`,Zr=(e,r)=>{let n={refreshInterval:0,initialPageParam:0,...e,dataAdapter:{...{items:T=>T?T.flatMap(S=>S?.list||S||[]):[],hasMore:T=>{if(!T)return !1;let S=T;return S?.hasMore||S?.has_more||!1},nextPageParam:(T,S,B)=>(_=>{if(!_)return !1;let X=_;return X?.hasMore||X?.has_more||!1})(T)?S.length:void 0},...e.dataAdapter}},{identifier:o,code:a,buttonsAlign:s,showReset:i,refreshInterval:l,request:g,tableExtra:u,renderForm:P,afterSuccess:b,afterError:F,dataAdapter:h,initialPageParam:f,footer:v,form:k,...V}=n,{t:D}=E(),[d]=Form.useForm(k),[I,M]=useState(!1),q=useRef(!1),p=useRef(3),m=j(),{data:y,isLoading:L}=z(a),c=useMemo(()=>o||Xr(),[o]),C=G(T=>T.getPayload(c)),R=useMemo(()=>d,[d]),{url:w,method:$="GET",body:K,params:Pe,headers:te,cacheTime:re=zr,staleTime:Me=$r}=g,ue=useMemo(()=>typeof te=="function"?te(R):te,[te,R]),pe=useMemo(()=>["infiniteList",w,c,y,I,C,ue],[w,c,y,I,C,ue]),{data:ne,fetchNextPage:de,hasNextPage:Te,isFetchingNextPage:Y,refetch:Ne,isFetching:be}=useInfiniteQuery({queryKey:pe,queryFn:async({pageParam:T=f})=>{try{let S=C,B=typeof Pe=="function"?Pe(S,T):Pe,J=typeof K=="function"?K(S,T):K,_={method:$,searchParams:B,headers:ue};J&&(J instanceof FormData?_.body=J:_.json=J);let X=await m.request({url:w,..._});return q.current=!0,b?.(p.current,R,[X]),X}catch(S){let B=S instanceof Error?S:new Error(String(S));throw F?.(B,p.current,R),B}},initialPageParam:f,getNextPageParam:(T,S)=>h?.nextPageParam?.(T,S,f),enabled:y&&I,retry:(T,S)=>!(T>=3||S?.message?.includes("401")),retryDelay:T=>Math.min(1e3*2**T,3e4),refetchOnWindowFocus:!1,refetchInterval:q.current?l:0,gcTime:re,staleTime:Me});useEffect(()=>(G.getState().registerInstance(c,w,pe,Ne,de),()=>{G.getState().unregisterInstance(c);}),[c,w,pe,Ne,de]);let oe=h?.items?.(ne?.pages,R),se=Y,U=!Te,Ve=!oe||oe.length===0,xe=async()=>{p.current=0;let T=await d.getFieldsValue();try{await d.validateFields(),M(!0),G.getState().refetch(c,{page:0,filters:T});}catch{M(!1);}},Ie=()=>{p.current=2,de();},Se=async()=>{p.current=1;try{d.resetFields();let T=await d.getFieldsValue();G.getState().updatePayload(c,{page:0,filters:T}),await d.validateFields({validateOnly:!0}),G.getState().refetch(c);}catch{}};if(useEffect(()=>{setTimeout(()=>{y&&d.validateFields({validateOnly:!0}).then(T=>{M(!0),G.getState().updatePayload(c,{page:0,filters:T});}).catch(()=>{M(!1);});},300);},[y,d,c]),useImperativeHandle(r,()=>({data:ne?.pages,dataSource:oe,form:d,refetch:()=>G.getState().refetch(c),fetchNextPage:()=>G.getState().fetchNextPage(c),hasNextPage:!!Te,isFetchingNextPage:Y})),L)return jsx(Spin,{style:Yr});if(!y)return jsx(Result,{status:403,subTitle:D("global.noEntitlement")});let Q=v&&(()=>v(ne?.pages)),ve=()=>typeof u=="function"?u(R,ne?.pages):u,me=typeof P=="function"?jsx(ye,{showReset:i,buttonsAlign:s,isConfirming:be,onReset:Se,onConfirm:xe,children:cloneElement(P(d),{onKeyUp:T=>{T.key==="Enter"&&xe();}})}):jsx(Form,{form:d});return jsxs(Fragment,{children:[me,ve(),jsx("div",{style:{minHeight:"400px"},children:jsx(Table,{...V,dataSource:oe,loading:be,pagination:!1,footer:Q})}),!Ve&&jsx(Button,{block:!0,loading:se,type:"link",htmlType:"button",disabled:se||U,onClick:Ie,children:D(se?"InfiniteList.loadingText":U?"InfiniteList.reachEndText":"InfiniteList.loadMoreText")})]})},en=forwardRef(Zr),tn=en;var bt=create()(persist((e,r)=>({openKeys:[],setOpenKeys:t=>{let n=r();(n.openKeys.length!==t.length||!n.openKeys.every((o,a)=>o===t[a]))&&e({openKeys:t});},selectedKeys:[],setSelectedKeys:t=>{let n=r();(n.selectedKeys.length!==t.length||!n.selectedKeys.every((o,a)=>o===t[a]))&&e({selectedKeys:t});}}),{name:"nav",storage:createJSONStorage(()=>localStorage),partialize:e=>({openKeys:e.openKeys,selectedKeys:e.selectedKeys}),skipHydration:!1,version:1}));var xt=memo(({to:e,children:r})=>jsx(Link,{to:e,children:r}));xt.displayName="MemoizedLink";function we(e){let r=[];if(e)for(let t=0;t<e.length;t++)if(e[t]===null||e[t].type==="divider")r[t]=e[t];else if(e[t].children){let{children:n,...o}=e[t];r[t]={...o,children:we(n)};}else {let{route:n,label:o,...a}=e[t],s=n?jsx(xt,{to:n,children:o}):o;r[t]={...a,label:s};}return r}function Ee(e,r=[],t=[]){for(let n of e){let o=n?.children;if(Array.isArray(o)){let a=n.type!=="group"&&n.key?[...t,n.key]:t;Ee(o,r,a);}else n&&r.push(Object.assign(n,{keypath:t}));}return r}var gn=memo(function(r){let{items:t=[],theme:n,loading:o}=r,a=useLocation(),s=useRef(),i=useRef(),l=useMemo(()=>s.current===t?s.current?Ee(s.current):[]:(s.current=t,Ee(t)),[t]),g=useMemo(()=>s.current===t?s.current?we(s.current):[]:we(t),[t]),{openKeys:u,selectedKeys:P,setOpenKeys:b,setSelectedKeys:F}=bt(),h=useCallback(f=>{let v=f.find(k=>!u.includes(k));if(v){let k=l.find(D=>D.key===v),V=k?.keypath?[...k.keypath,v]:[v];b(V);}else b(f);},[l,u,b]);return useEffect(()=>{if(i.current===a.pathname)return;i.current=a.pathname;let f=l.find(v=>a.pathname===v.route);if(f){let v=f.key,k=f.keypath;(P[0]!==v||!u.every((V,D)=>V===k[D]))&&(F([v]),b(k));}},[l,a.pathname,P,u,F,b]),o?jsx("div",{className:"flex justify-center items-center",style:{height:"calc(100vh - 64px)"},children:jsx(Spin,{})}):jsx(Menu,{theme:n,style:{borderRight:"none"},items:g,mode:"inline",openKeys:u,selectedKeys:P,onOpenChange:h})}),_e=gn;var {Spin:Tn}=ge,bn=({children:e})=>{let{permissionVersion:r,gameId:t,isGlobal:n}=O(s=>s),{isLoading:o}=Ce(),{t:a}=E();return o?jsx("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:400},children:jsx(Tn,{})}):r==="v1"||n?e:t?jsx(Fragment$1,{children:e},t):jsx(Empty,{image:Empty.PRESENTED_IMAGE_SIMPLE,description:a("RequireGame.description")})},He=bn;var Ln=()=>{let{t:e}=E(),r=useNavigate(),{clearToken:t,getUser:n,signInPath:o}=O(u=>u),a=n(),s=()=>{t(),r(o);},i=u=>{(u.key==="Enter"||u.key===" ")&&(u.preventDefault(),s());},l=u=>{(u.key==="Enter"||u.key===" ")&&u.preventDefault();},g=[{key:"1",icon:jsx(LogoutOutlined,{}),label:jsx("a",{role:"button",tabIndex:0,onClick:s,onKeyDown:i,children:e("UserWidget.signOutText")})}];return jsx("div",{children:jsx(Dropdown,{menu:{selectable:!0,items:g},placement:"bottomRight",children:jsx("a",{role:"button",tabIndex:0,onClick:u=>{u.preventDefault();},onKeyDown:l,children:jsxs(Space,{align:"center",children:[jsx("span",{children:a?.authorityId}),jsx(UserOutlined,{style:{fontSize:"16px"}})]})})})})},We=Ln;var{Text:On}=Typography,An=e=>{let{filter:r,options:t}=e,{t:n}=E(),{gameApiV2:o,gameId:a,setGameId:s}=O(h=>h),{data:i,isLoading:l}=Ce(),g=useQueryClient(),u=i?.filter(h=>r?.(h)??!0),P=typeof t=="function"?t(u):u?.map(h=>({label:h.name,value:o?h.game_id:h.id})),b=h=>{F(),s(h);},F=()=>{g.removeQueries({predicate:h=>{let f=h.queryKey;return !f.includes("/api/game/list")&&!f.includes("/api/usystem/game/all")}});};return useEffect(()=>{if(i&&i.length>0){let h=o?i[0].game_id:i[0].id;i.every(f=>String(f.game_id||f.id)!==String(a))&&s(h);}},[i]),jsxs(Space,{children:[jsx(On,{children:n("GameSelect.label")}),jsx(Select,{showSearch:!0,optionFilterProp:"label",value:a,placeholder:n("GameSelect.placeholder"),loading:l,style:{width:"200px"},options:P,onChange:b})]})},Ct=An;var Vn=e=>jsx("img",{src:Nn,alt:"logo",...e}),Be=Vn;var wt=memo(({title:e,subtitle:r,mainPagePath:t,collapsed:n})=>jsxs("div",{className:"px-6 py-2 font-bold relative bg-gradient-to-r from-white to-gray-50/30",style:{height:"auto",display:"flex",flexDirection:"column",justifyContent:"center",backdropFilter:"blur(4px)",WebkitBackdropFilter:"blur(4px)"},children:[jsxs("div",{className:`flex items-center w-full ${n?"justify-center":""}`,children:[jsx(Link,{to:t,className:"hover:opacity-80 transition-all duration-300 ease-out block rounded-lg p-1 hover:bg-white/50 hover:shadow-sm",style:{transition:"all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)",opacity:n?.8:1,transform:"translateX(0)"},children:jsx(Be,{width:36,style:{objectFit:"contain",display:"block",filter:"drop-shadow(0 1px 1px rgba(0, 0, 0, 0.05))",transition:"all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)"}})}),e&&jsx("div",{className:"ml-4 overflow-hidden min-w-0",style:{transition:"all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)",opacity:n?0:1,width:n?"0px":"auto",marginLeft:n?"0px":"16px",transform:n?"translateX(-8px)":"translateX(0)"},children:jsx(Link,{to:t,className:"text-xl leading-tight hover:text-blue-600 transition-all duration-300 font-bold text-ellipsis overflow-hidden whitespace-nowrap block bg-gradient-to-r from-gray-800 to-gray-600 bg-clip-text text-transparent hover:from-blue-600 hover:to-blue-500",title:e,style:{letterSpacing:"0.02em",textShadow:"0 1px 2px rgba(0, 0, 0, 0.05)"},children:e})})]}),jsx("div",{className:"w-full mt-2 overflow-hidden",style:{height:r&&!n?"20px":"1px",transition:"height 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)"},children:jsxs("div",{className:"flex items-center justify-center h-full w-full",children:[jsx("div",{className:"w-full border-t border-gray-200 absolute",style:{opacity:!r||n?1:0,transition:"opacity 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)"}}),r&&jsxs("div",{className:"flex items-center w-full text-sm",style:{opacity:n?0:1,transform:n?"translateY(-3px)":"translateY(0)",transition:"all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)"},children:[jsx("div",{className:"flex-1 border-t border-gray-200"}),jsx("span",{className:"px-3 text-gray-500 font-medium whitespace-nowrap",title:r,children:r}),jsx("div",{className:"flex-1 border-t border-gray-200"})]})]})})]}));wt.displayName="LayoutHeader";var Et=wt;var {Spin:Wn,theme:Bn}=ge,{Header:jn,Sider:zn,Content:$n}=ge.Layout,Yn=e=>{let{collapsible:r,isMenuLoading:t,items:n,headerExtra:o,children:a,navWidth:s,filter:i,gameSelectOptions:l,title:g,subtitle:u}=e,{token:{colorBgContainer:P,colorBorder:b}}=Bn.useToken(),{permissionVersion:F,navWidth:h,collapsible:f,mainPagePath:v,collapsed:k,setContext:V,isGlobal:D}=O(),[d,I]=useState(k),M=async()=>{I(!d),V({collapsed:!d});},q=r??f??!1;return jsxs(ge.Layout,{children:[jsxs(zn,{collapsible:q,theme:"light",trigger:null,collapsed:d,width:s??h,style:{height:"100vh",overflowX:"hidden",overflowY:"auto",borderRightWidth:1,borderRightStyle:"solid",borderRightColor:b,transition:"all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)"},children:[jsx(Et,{title:g,subtitle:u,mainPagePath:v,collapsed:d||!1}),jsx(_e,{items:n,loading:t})]}),jsxs(ge.Layout,{children:[jsx(jn,{style:{padding:"0 24px",background:P},children:jsxs("div",{className:"flex justify-between items-center h-full",children:[jsxs(Space,{size:"small",split:jsx(Divider,{type:"vertical"}),className:"mr-6",children:[q&&jsx(Button,{type:"text",icon:d?jsx(MenuUnfoldOutlined,{}):jsx(MenuFoldOutlined,{}),style:{fontSize:"16px"},onClick:M}),F!=="v1"&&!D&&jsx(Ct,{filter:i,options:l}),o?.left?.map(p=>jsx("span",{children:p.children},p.key))]}),jsxs(Space,{size:"small",split:jsx(Divider,{type:"vertical"}),children:[o?.right?.map(p=>jsx("span",{children:p.children},p.key)),jsx(We,{})]})]})}),jsx($n,{style:{overflow:"auto",padding:"24px 16px",maxHeight:"calc(100vh - 64px)",transition:"margin-left 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)"},children:jsx(Suspense,{fallback:jsx(Wn,{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"200px"}}),children:jsx(He,{children:a})})})]})]})},Jn=Yn;var Zn=e=>{let{children:r,code:t,showLoading:n,disabled:o,config:a,...s}=e,i=t?Array.isArray(t)?t:[t]:[],{data:l,isLoading:g}=z(i,a),{t:u}=E();return g?jsx(Button,{loading:n,disabled:!n,...s,children:r}):typeof l=="boolean"||l&&Object.values(l).some(Boolean)?jsx(Button,{disabled:o,...s,children:r}):jsx(Tooltip,{defaultOpen:!1,title:u("global.noEntitlement"),children:jsx(Button,{disabled:!0,...s,children:r})})},eo=Zn;var At=Object.freeze({page:1,size:10,filters:Object.freeze({})}),oo=()=>create()(devtools(subscribeWithSelector((e,r)=>({instances:new Map,registerInstance(t,n,o,a){e(s=>{let i=s.instances.get(t);if(i){if(i.refetch!==a){let u={...i,refetch:a},P=new Map(s.instances);return P.set(t,u),{instances:P}}return s}let l={id:t,url:n,queryKey:o,payload:At,refetch:a},g=new Map(s.instances);return g.set(t,l),{instances:g}});},unregisterInstance(t){e(n=>{let o=new Map(n.instances);return o.delete(t)?{instances:o}:n});},updatePayload(t,n){e(o=>{let a=o.instances.get(t);if(!a)return o;let s={...a.payload,...n};if(!isEqual(a.payload,s)){let i={...a,payload:s},l=new Map(o.instances);return l.set(t,i),{instances:l}}return o});},getPayload(t){return r().instances.get(t)?.payload??At},async refetch(t,n){let o=r().instances.get(t);if(!o)return;let a=!1;if(n){let s=o.payload,i={...s,...n};isEqual(s,i)||(r().updatePayload(t,n),a=!0);}if(!a)try{await o.refetch();}catch(s){throw s}},getInstance(t){return r().instances.get(t)},getAllInstances(){return Array.from(r().instances.values())}})),{name:"query-list-store"})),so=oo(),W=so;var Kt=(o=>(o[o.Confirm=0]="Confirm",o[o.Reset=1]="Reset",o[o.Jump=2]="Jump",o[o.Init=3]="Init",o))(Kt||{}),go=5*60*1e3,ho=30*1e3,Vt=["GET","HEAD"],qt=["POST","PUT","PATCH","DELETE"],Po={display:"flex",justifyContent:"center",alignItems:"center",height:300},To=0,bo=()=>`queryList_${Date.now()}_${++To}`,xo=(e,r)=>{let{t}=E(),{form:n,identifier:o,code:a,onePage:s,buttonsAlign:i,showReset:l,defaultSize:g=10,refreshInterval:u=0,tableExtra:P,renderForm:b,afterSuccess:F,afterError:h,footer:f,pageSizeOptions:v,request:k,dataAdapter:V,...D}=e,[d]=Form.useForm(n),I=useMemo(()=>o||bo(),[o]),M=useRef(3),{data:q,isLoading:p}=z(a),[m,y]=useState(!1),L=useRef(!1),c=useRef(!1),C=W(x=>x.getPayload(I)),R=j(),{page:w,size:$=g,filters:K}=C,te=typeof k=="function"?k({page:w,size:$,filters:K}):k,{url:re,method:Me="GET",body:ue,searchParams:pe,headers:ne,cacheTime:de=go,staleTime:Te=ho}=te,Y=Me.toUpperCase();let be=Vt.includes(Y),oe=qt.includes(Y),se={...K,...!s&&{page:w,size:$}},U=ue||(oe?se:void 0),Ve=pe||se,xe=ne,Ie=useRef(!1),Se=["queryList",re,I,w,$,K],{data:Q,isLoading:ve,refetch:me}=useQuery({queryKey:Se,queryFn:async()=>{try{let x={method:Y,searchParams:Ve,headers:xe};U&&!be&&(U instanceof FormData||typeof U=="string"?x.body=U:x.json=U);let N=await R.request({url:re,...x});return Ie.current=!0,F?.(M.current,d,N),N}catch(x){let N=x instanceof Error?x:new Error(String(x));throw h?.(N,M.current,d),N}},retry:(x,N)=>!(x>=3||N?.message?.includes("401")),retryDelay:x=>Math.min(1e3*2**x,3e4),refetchOnWindowFocus:!1,refetchInterval:Ie.current?u:0,gcTime:de,staleTime:Te,enabled:q&&m}),T=useMemo(()=>{let x=V,N={total:Q?.total,items:Q?.list};return typeof x=="function"?{...N,...x(Q)}:{...N,...x}},[V,Q]);useEffect(()=>(W.getState().registerInstance(I,re,Se,me),()=>{W.getState().unregisterInstance(I);}),[I,re]);let S=T.items,B=T.total,J=useMemo(()=>s?!1:{pageSizeOptions:v,showSizeChanger:!0,showQuickJumper:!0,current:w,pageSize:$,total:B,onChange:async(x,N)=>{M.current=2,W.getState().refetch(I,{page:x,size:N});}},[s,v,w,$,B,I]),_=useCallback(async()=>{M.current=0;try{await d.validateFields(),y(!0),W.getState().refetch(I,{page:1,filters:d.getFieldsValue()});}catch{y(!1);}},[d,I]),X=useCallback(async()=>{M.current=1,d.resetFields();try{await d.validateFields({validateOnly:!0}),y(!0),W.getState().refetch(I,{page:1,filters:d.getFieldsValue()});}catch{y(!1);}},[d,I]),Gt=typeof b=="function"?jsx(ye,{showReset:l,buttonsAlign:i,isConfirming:ve,onReset:X,onConfirm:_,children:cloneElement(b(d),{onKeyUp:x=>{x.key==="Enter"&&_();}})}):jsx(Form,{form:d}),Qt=typeof P=="function"?P(d,Q):P,Ut=f?()=>f(Q):void 0;return useEffect(()=>{if(!L.current||c.current)return;let x=d.getFieldsValue();K&&!isEqual(x,K)&&(c.current=!0,d.setFieldsValue(K),setTimeout(()=>{c.current=!1;},0));},[K,d]),useEffect(()=>{if(!q||L.current)return;let x=async()=>{try{d.resetFields();let Je=await d.validateFields({validateOnly:!0});W.getState().updatePayload(I,{page:1,filters:Je}),y(!0);}catch{y(!1);}finally{L.current=!0;}},N=requestAnimationFrame(()=>{Promise.resolve().then(x);});return ()=>{N&&cancelAnimationFrame(N);}},[q,I,d]),useImperativeHandle(r,()=>({data:Q,dataSource:S,form:d,refetch:me}),[Q,S,d,me]),p?jsx(Spin,{style:Po}):q?jsxs("div",{children:[Gt,Qt,jsx(Table,{...D,dataSource:S,loading:ve,pagination:J,footer:Ut})]}):jsx(Result,{status:403,subTitle:t("global.noEntitlement")})},Io=forwardRef(xo),So=Io;var Co=e=>{let{code:r,config:t,children:n}=e,{data:o,isLoading:a}=z(r,t),{t:s}=E();return a?jsx(Spin,{style:{display:"flex",justifyContent:"center",alignItems:"center",height:200}}):o?jsx(Fragment,{children:n}):jsx(Result,{status:"403",subTitle:s("global.noEntitlement")})},ko=Co;export{ir as DynamicTags,pr as ExpandableParagraph,ye as FilterFormWrapper,vr as Highlight,tn as InfiniteList,Jn as Layout,Be as Logo,_e as NavMenu,eo as PermissionButton,So as QueryList,Kt as QueryListAction,He as RequireGame,ko as RequirePermission,Zt as ToolkitsProvider,We as UserWidget,G as useInfiniteListStore,W as useQueryListStore,O as useToolkitsStore,Xt as withContext};
|
package/lib/constants.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
var c="https://idaas.ifunplus.cn/enduser/api/application/plugin_FunPlus/sso/v1",o="App-ID",u="/console/",t=(p=>(p.V1="v1",p.V2="v2",p.V3="v3",p))(t||{}),n="*";
|
|
2
|
+
export{o as APP_ID_HEADER,u as FRONTEND_ROUTE_PREFIX,t as PermissionVersion,c as SSO_URL,n as WILDCARD};
|
package/lib/hooks.d.ts
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { DrawerProps, Button, FormProps, FormInstance, ModalProps } from 'antd';
|
|
3
|
+
import { ReactNode, ComponentProps } from 'react';
|
|
4
|
+
import { AnyObject } from 'antd/es/_util/type';
|
|
5
|
+
import { RecursivePartial } from './types.js';
|
|
6
|
+
import * as zustand from 'zustand';
|
|
7
|
+
|
|
8
|
+
interface UseDrawerOperation {
|
|
9
|
+
hide: () => void;
|
|
10
|
+
}
|
|
11
|
+
interface UseDrawerProps extends Omit<DrawerProps, 'open' | 'confirmLoading' | 'onClose' | 'footer'> {
|
|
12
|
+
content?: ReactNode | ((operation: UseDrawerOperation) => ReactNode);
|
|
13
|
+
onConfirm?: () => void | Promise<void>;
|
|
14
|
+
afterOpen?: () => void | Promise<void>;
|
|
15
|
+
afterClose?: () => void | Promise<void>;
|
|
16
|
+
footer?: ReactNode | null;
|
|
17
|
+
confirmText?: string;
|
|
18
|
+
cancelText?: string;
|
|
19
|
+
confirmButtonProps?: ComponentProps<typeof Button>;
|
|
20
|
+
cancelButtonProps?: ComponentProps<typeof Button>;
|
|
21
|
+
}
|
|
22
|
+
declare function useDrawer(props: UseDrawerProps): {
|
|
23
|
+
id: number;
|
|
24
|
+
show: () => Promise<void>;
|
|
25
|
+
hide: () => void;
|
|
26
|
+
confirmLoading: boolean;
|
|
27
|
+
drawer: react_jsx_runtime.JSX.Element;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
interface UseFormDrawerProps<Values extends AnyObject = AnyObject, ExtraValues = any> extends Omit<UseDrawerProps, 'onConfirm' | 'content' | 'onShow' | 'afterClose'> {
|
|
31
|
+
formProps?: Omit<FormProps, 'form'>;
|
|
32
|
+
form?: FormInstance<Values>;
|
|
33
|
+
content?: ReactNode | ((extraValues: ExtraValues, operation: UseDrawerOperation) => ReactNode);
|
|
34
|
+
onConfirm?: (values: Values, extraValues: ExtraValues) => void | Promise<void>;
|
|
35
|
+
onSuccess?: () => void;
|
|
36
|
+
afterClose?: (form: FormInstance<Values>) => void;
|
|
37
|
+
}
|
|
38
|
+
declare function useFormDrawer<Values extends AnyObject = AnyObject, ExtraValues = any>(props: UseFormDrawerProps<Values, ExtraValues>): {
|
|
39
|
+
id: number;
|
|
40
|
+
show: (options?: {
|
|
41
|
+
initialValues?: RecursivePartial<Values>;
|
|
42
|
+
extraValues?: ExtraValues;
|
|
43
|
+
}) => void;
|
|
44
|
+
hide: () => void;
|
|
45
|
+
drawer: react_jsx_runtime.JSX.Element;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
interface DrawerState {
|
|
49
|
+
open: Map<number, boolean>;
|
|
50
|
+
usedIds: Set<number>;
|
|
51
|
+
isOpen: (uuid: number) => boolean;
|
|
52
|
+
show: (uuid: number) => void;
|
|
53
|
+
hide: (uuid: number) => void;
|
|
54
|
+
hideAll: () => void;
|
|
55
|
+
checkUniqueness: (uuid: number) => boolean;
|
|
56
|
+
registerIds: (uuid: number) => boolean;
|
|
57
|
+
cleanup: (uuid: number) => void;
|
|
58
|
+
}
|
|
59
|
+
declare const useDrawerStore: zustand.UseBoundStore<zustand.StoreApi<DrawerState>>;
|
|
60
|
+
|
|
61
|
+
interface UseModalOperation {
|
|
62
|
+
hide: () => void;
|
|
63
|
+
}
|
|
64
|
+
interface UseModalProps extends Omit<ModalProps, 'open' | 'confirmLoading' | 'onOk' | 'onCancel'> {
|
|
65
|
+
content?: ReactNode | ((operation: UseModalOperation) => ReactNode);
|
|
66
|
+
onConfirm?: () => void | Promise<void>;
|
|
67
|
+
afterOpen?: () => void | Promise<void>;
|
|
68
|
+
afterClose?: () => void | Promise<void>;
|
|
69
|
+
}
|
|
70
|
+
declare function useModal(props: UseModalProps): {
|
|
71
|
+
id: number;
|
|
72
|
+
show: () => Promise<void>;
|
|
73
|
+
hide: () => void;
|
|
74
|
+
modal: react_jsx_runtime.JSX.Element;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
interface UseFormModalProps<Values extends AnyObject = AnyObject, ExtraValues = any> extends Omit<UseModalProps, 'onConfirm' | 'content' | 'onShow' | 'afterClose'> {
|
|
78
|
+
formProps?: Omit<FormProps, 'form'>;
|
|
79
|
+
form?: FormInstance<Values>;
|
|
80
|
+
content?: ReactNode | ((extraValues: ExtraValues, operation: UseModalOperation) => ReactNode);
|
|
81
|
+
onConfirm?: (values: Values, extraValues: ExtraValues) => void | Promise<void>;
|
|
82
|
+
onSuccess?: () => void;
|
|
83
|
+
afterClose?: (form: FormInstance<Values>) => void;
|
|
84
|
+
}
|
|
85
|
+
declare function useFormModal<Values extends AnyObject = AnyObject, ExtraValues = any>(props: UseFormModalProps<Values, ExtraValues>): {
|
|
86
|
+
id: number;
|
|
87
|
+
show: (options?: {
|
|
88
|
+
initialValues?: RecursivePartial<Values>;
|
|
89
|
+
extraValues?: ExtraValues;
|
|
90
|
+
}) => void;
|
|
91
|
+
hide: () => void;
|
|
92
|
+
modal: react_jsx_runtime.JSX.Element;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
interface ModalState {
|
|
96
|
+
open: Map<number, boolean>;
|
|
97
|
+
usedIds: Set<number>;
|
|
98
|
+
isOpen: (uuid: number) => boolean;
|
|
99
|
+
show: (uuid: number) => void;
|
|
100
|
+
hide: (uuid: number) => void;
|
|
101
|
+
hideAll: () => void;
|
|
102
|
+
checkUniqueness: (uuid: number) => boolean;
|
|
103
|
+
registerIds: (uuid: number) => boolean;
|
|
104
|
+
cleanup: (uuid: number) => void;
|
|
105
|
+
}
|
|
106
|
+
declare const useModalStore: zustand.UseBoundStore<zustand.StoreApi<ModalState>>;
|
|
107
|
+
|
|
108
|
+
export { type UseFormDrawerProps, type UseFormModalProps, useDrawer, useDrawerStore, useFormDrawer, useFormModal, useModal, useModalStore };
|
package/lib/hooks.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {Button,Drawer,Form,Modal}from'antd';import {useMemo,useEffect,useState,useCallback}from'react';import {create}from'zustand';import {jsxs,jsx}from'react/jsx-runtime';var _=0,v=()=>{let t=Date.now(),o=Math.floor(Math.random()*1e3),e=++_%1e3;return t*1e6+o*1e3+e};var F=create((t,o)=>({open:new Map,usedIds:new Set,isOpen:e=>o().open.get(e)??!1,show(e){t({open:new Map(o().open).set(e,!0)});},hide(e){t({open:new Map(o().open).set(e,!1)});},hideAll(){t({open:new Map});},checkUniqueness(e){let{usedIds:r}=o();return !r.has(e)},registerIds(e){let{usedIds:r}=o();return r.has(e)?!1:(t({usedIds:new Set(r).add(e)}),!0)},cleanup(e){let{open:r,usedIds:i}=o(),l=new Map(r),n=new Set(i);l.delete(e),n.delete(e),t({open:l,usedIds:n});}}));function O(t){let{content:o,onConfirm:e,afterOpen:r,afterClose:i,footer:l,confirmText:n="\u786E\u8BA4",cancelText:x="\u53D6\u6D88",confirmButtonProps:p,cancelButtonProps:P,...s}=t,d=useMemo(()=>v(),[]),{show:y,hide:u,isOpen:f,cleanup:h}=F();useEffect(()=>()=>{h(d);},[d,h]);let c=f(d),[a,m]=useState(!1),w=typeof o=="function",b=useCallback(async()=>{y(d),await r?.();},[d,y,r]),V=useCallback(()=>{u(d);},[d,u]),g=useCallback(async()=>{V(),await i?.();},[V,i]),A=useCallback(async()=>{try{m(!0),await e?.();}catch(B){throw B}finally{m(!1);}},[e]),N=l!==void 0?l:jsxs("div",{className:"flex gap-4 mx-4",children:[jsx(Button,{type:"primary",loading:a,...p,onClick:A,children:n}),jsx(Button,{...P,onClick:g,children:x})]}),k=jsx(Drawer,{...s,open:c,footer:N,onClose:g,children:w?o({hide:V}):o});return {id:d,show:b,hide:V,confirmLoading:a,drawer:k}}function K(t){let{content:o,form:e,formProps:r,onConfirm:i,onSuccess:l,afterClose:n,...x}=t,[p,P]=useState({}),[s]=Form.useForm();s=e||s;let d=typeof o=="function",{id:y,show:u,hide:f,drawer:h}=O({...x,content:a=>jsx(Form,{...r,form:s,children:d?o(p,a):o}),onConfirm:async()=>{try{let a=await s.validateFields();await i?.(a,p),l?.(),f();}catch(a){throw a}},afterClose:()=>{n?.(s);}}),c=useCallback(a=>{let{initialValues:m,extraValues:w}=a||{};w&&P(w),m&&s.setFieldsValue(m),u();},[s,u]);return {id:y,show:c,hide:f,drawer:h}}var S=create((t,o)=>({open:new Map,usedIds:new Set,isOpen:e=>o().open.get(e)??!1,show(e){t({open:new Map(o().open).set(e,!0)});},hide(e){t({open:new Map(o().open).set(e,!1)});},hideAll(){t({open:new Map});},checkUniqueness(e){let{usedIds:r}=o();return !r.has(e)},registerIds(e){let{usedIds:r}=o();return r.has(e)?!1:(t({usedIds:new Set(r).add(e)}),!0)},cleanup(e){let{open:r,usedIds:i}=o(),l=new Map(r),n=new Set(i);l.delete(e),n.delete(e),t({open:l,usedIds:n});}}));function D(t){let{content:o,onConfirm:e,afterOpen:r,afterClose:i,...l}=t,n=useMemo(()=>v(),[]),{show:x,hide:p,isOpen:P,cleanup:s}=S();useEffect(()=>()=>{s(n);},[n,s]);let d=P(n),[y,u]=useState(!1),f=typeof o=="function",h=useCallback(async()=>{x(n),await r?.();},[n,x,r]),c=useCallback(()=>{p(n);},[n,p]),a=useCallback(async()=>{c(),await i?.();},[c,i]),m=useCallback(async()=>{try{u(!0),await e?.(),c(),await i?.();}catch(b){throw b}finally{u(!1);}},[e,c,i]),w=jsx(Modal,{...l,open:d,confirmLoading:y,onOk:m,onCancel:a,children:f?o({hide:c}):o});return {id:n,show:h,hide:c,modal:w}}function te(t){let{content:o,form:e,formProps:r,onConfirm:i,onSuccess:l,afterClose:n,...x}=t,[p,P]=useState({}),[s]=Form.useForm();s=e||s;let d=typeof o=="function",{id:y,show:u,hide:f,modal:h}=D({...x,content:a=>jsx(Form,{...r,form:s,children:d?o(p,a):o}),onConfirm:async()=>{try{let a=await s.validateFields();await i?.(a,p),l?.(),f();}catch(a){throw a}},afterClose:()=>{n?.(s);}}),c=useCallback(a=>{let{initialValues:m,extraValues:w}=a||{};w&&P(w),m&&s.setFieldsValue(m),u();},[s,u]);return {id:y,show:c,hide:f,modal:h}}export{O as useDrawer,F as useDrawerStore,K as useFormDrawer,te as useFormModal,D as useModal,S as useModalStore};
|