react-toolkits 2.26.0 → 2.27.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/CHANGELOG.md +12 -0
- package/lib/chunk-56C2GQCB.js +2 -0
- package/lib/chunk-56C2GQCB.js.map +1 -0
- package/lib/chunk-6SMI25Y3.js +19 -0
- package/lib/chunk-6SMI25Y3.js.map +1 -0
- package/lib/{chunk-D5YXBSTI.js → chunk-7XR7V6IS.js} +2 -2
- package/lib/{chunk-D5YXBSTI.js.map → chunk-7XR7V6IS.js.map} +1 -1
- package/lib/chunk-AFURMXX2.js +2 -0
- package/lib/chunk-AFURMXX2.js.map +1 -0
- package/lib/{chunk-MVG7YFPB.js → chunk-COONHXCY.js} +2 -2
- package/lib/{chunk-MVG7YFPB.js.map → chunk-COONHXCY.js.map} +1 -1
- package/lib/chunk-DBYHBFI6.js +206 -0
- package/lib/chunk-DBYHBFI6.js.map +1 -0
- package/lib/chunk-JJR5NJTU.js +75 -0
- package/lib/chunk-JJR5NJTU.js.map +1 -0
- package/lib/chunk-LUVKLLW7.js +2 -0
- package/lib/chunk-LUVKLLW7.js.map +1 -0
- package/lib/chunk-M2C4DTSM.js +46 -0
- package/lib/chunk-M2C4DTSM.js.map +1 -0
- package/lib/{chunk-5QAEUAZE.js → chunk-NEOHLVWG.js} +2 -2
- package/lib/{chunk-5QAEUAZE.js.map → chunk-NEOHLVWG.js.map} +1 -1
- package/lib/chunk-O7INKFFW.js +161 -0
- package/lib/chunk-O7INKFFW.js.map +1 -0
- package/lib/chunk-Q6MAXVON.js +2 -0
- package/lib/chunk-Q6MAXVON.js.map +1 -0
- package/lib/chunk-QEUTBIBK.js +125 -0
- package/lib/chunk-QEUTBIBK.js.map +1 -0
- package/lib/chunk-R72QFX5M.js +495 -0
- package/lib/chunk-R72QFX5M.js.map +1 -0
- package/lib/chunk-TYMPX257.js +268 -0
- package/lib/chunk-TYMPX257.js.map +1 -0
- package/lib/chunk-UICHZXQP.js +3 -0
- package/lib/chunk-UICHZXQP.js.map +1 -0
- package/lib/chunk-WFRMJYD3.js +2 -0
- package/lib/chunk-WFRMJYD3.js.map +1 -0
- package/lib/chunk-Z7GW3RVV.js +658 -0
- package/lib/chunk-Z7GW3RVV.js.map +1 -0
- package/lib/createMenuItem-7R7QR4R6.js +83 -0
- package/lib/createMenuItem-7R7QR4R6.js.map +1 -0
- package/lib/{createMenuItem-Q5TJGFKZ.js → createMenuItem-A3ES4CDV.js} +2 -2
- package/lib/{createMenuItem-Q5TJGFKZ.js.map → createMenuItem-A3ES4CDV.js.map} +1 -1
- package/lib/index.css +1 -1
- package/lib/index.d.ts +26 -11
- package/lib/index.js +1446 -2
- package/lib/index.js.map +1 -1
- package/lib/menuItemList-BUUJMOU7.js +129 -0
- package/lib/menuItemList-BUUJMOU7.js.map +1 -0
- package/lib/{menuItemList-2QZXJVWZ.js → menuItemList-YFQB4BCS.js} +2 -2
- package/lib/{menuItemList-2QZXJVWZ.js.map → menuItemList-YFQB4BCS.js.map} +1 -1
- package/lib/{roleDetail-ODJVDVB4.js → roleDetail-H2X34J57.js} +2 -2
- package/lib/{roleDetail-ODJVDVB4.js.map → roleDetail-H2X34J57.js.map} +1 -1
- package/lib/roleDetail-IP654MAU.js +72 -0
- package/lib/roleDetail-IP654MAU.js.map +1 -0
- package/lib/roleList-QMAYO4MG.js +161 -0
- package/lib/roleList-QMAYO4MG.js.map +1 -0
- package/lib/roleList-UCMHN5NJ.js +2 -0
- package/lib/roleList-UCMHN5NJ.js.map +1 -0
- package/lib/updateMenuItem-NUYWRAV5.js +2 -0
- package/lib/updateMenuItem-NUYWRAV5.js.map +1 -0
- package/lib/updateMenuItem-SZVEK3TL.js +106 -0
- package/lib/updateMenuItem-SZVEK3TL.js.map +1 -0
- package/lib/userDetail-6XMOY3I4.js +2 -0
- package/lib/userDetail-6XMOY3I4.js.map +1 -0
- package/lib/userDetail-MPTJGRMY.js +118 -0
- package/lib/userDetail-MPTJGRMY.js.map +1 -0
- package/lib/{userList-QHQHRPSV.js → userList-3WABI7V4.js} +2 -2
- package/lib/{userList-QHQHRPSV.js.map → userList-3WABI7V4.js.map} +1 -1
- package/lib/userList-KXYDP7V5.js +166 -0
- package/lib/userList-KXYDP7V5.js.map +1 -0
- package/locale/context.js +7 -1
- package/locale/context.js.map +1 -1
- package/locale/en_GB.js +94 -1
- package/locale/en_GB.js.map +1 -1
- package/locale/hooks.js +20 -1
- package/locale/hooks.js.map +1 -1
- package/locale/index.js +2 -1
- package/locale/ja_JP.js +94 -1
- package/locale/ja_JP.js.map +1 -1
- package/locale/ko_KR.js +94 -1
- package/locale/ko_KR.js.map +1 -1
- package/locale/zh_CN.js +94 -1
- package/locale/zh_CN.js.map +1 -1
- package/package.json +22 -22
- package/lib/chunk-24U2EF5M.js +0 -2
- package/lib/chunk-24U2EF5M.js.map +0 -1
- package/lib/chunk-F2GDEOP4.js +0 -3
- package/lib/chunk-F2GDEOP4.js.map +0 -1
- package/lib/chunk-FIT6S4UM.js +0 -2
- package/lib/chunk-FIT6S4UM.js.map +0 -1
- package/lib/chunk-IKGXKB6T.js +0 -2
- package/lib/chunk-IKGXKB6T.js.map +0 -1
- package/lib/chunk-JDCSIJL7.js +0 -2
- package/lib/chunk-JDCSIJL7.js.map +0 -1
- package/lib/chunk-KZHYK554.js +0 -2
- package/lib/chunk-KZHYK554.js.map +0 -1
- package/lib/roleList-MQOFJ3LH.js +0 -2
- package/lib/roleList-MQOFJ3LH.js.map +0 -1
- package/lib/updateMenuItem-4HDRJAY7.js +0 -2
- package/lib/updateMenuItem-4HDRJAY7.js.map +0 -1
- package/lib/userDetail-B5H4A4X2.js +0 -2
- package/lib/userDetail-B5H4A4X2.js.map +0 -1
|
@@ -0,0 +1,658 @@
|
|
|
1
|
+
import { createStore, create, useStore } from 'zustand';
|
|
2
|
+
import { App } from 'antd';
|
|
3
|
+
import { createContext, useRef, useContext, useMemo } from 'react';
|
|
4
|
+
import { persist, createJSONStorage } from 'zustand/middleware';
|
|
5
|
+
import { jwtDecode } from 'jwt-decode';
|
|
6
|
+
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
7
|
+
import { useQueryClient } from '@tanstack/react-query';
|
|
8
|
+
import ky from 'ky';
|
|
9
|
+
import { useNavigate } from 'react-router-dom';
|
|
10
|
+
|
|
11
|
+
var __defProp = Object.defineProperty;
|
|
12
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
13
|
+
function createVisibilityStore() {
|
|
14
|
+
return create()((set, get) => ({
|
|
15
|
+
open: /* @__PURE__ */ new Map(),
|
|
16
|
+
usedIds: /* @__PURE__ */ new Set(),
|
|
17
|
+
isOpen(uuid) {
|
|
18
|
+
return get().open.get(uuid) ?? false;
|
|
19
|
+
},
|
|
20
|
+
show(uuid) {
|
|
21
|
+
set({ open: new Map(get().open).set(uuid, true) });
|
|
22
|
+
},
|
|
23
|
+
hide(uuid) {
|
|
24
|
+
set({ open: new Map(get().open).set(uuid, false) });
|
|
25
|
+
},
|
|
26
|
+
hideAll() {
|
|
27
|
+
set({ open: /* @__PURE__ */ new Map() });
|
|
28
|
+
},
|
|
29
|
+
checkUniqueness(uuid) {
|
|
30
|
+
return !get().usedIds.has(uuid);
|
|
31
|
+
},
|
|
32
|
+
registerIds(uuid) {
|
|
33
|
+
const { usedIds } = get();
|
|
34
|
+
if (usedIds.has(uuid)) return false;
|
|
35
|
+
set({ usedIds: new Set(usedIds).add(uuid) });
|
|
36
|
+
return true;
|
|
37
|
+
},
|
|
38
|
+
cleanup(uuid) {
|
|
39
|
+
const { open, usedIds } = get();
|
|
40
|
+
const newOpen = new Map(open);
|
|
41
|
+
const newUsedIds = new Set(usedIds);
|
|
42
|
+
newOpen.delete(uuid);
|
|
43
|
+
newUsedIds.delete(uuid);
|
|
44
|
+
set({ open: newOpen, usedIds: newUsedIds });
|
|
45
|
+
}
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
__name(createVisibilityStore, "createVisibilityStore");
|
|
49
|
+
|
|
50
|
+
// src/utils/generateId.ts
|
|
51
|
+
var globalCounter = 0;
|
|
52
|
+
var generateId = /* @__PURE__ */ __name(() => {
|
|
53
|
+
const timestamp = Date.now();
|
|
54
|
+
const random = Math.floor(Math.random() * 1e3);
|
|
55
|
+
const counter = ++globalCounter % 1e3;
|
|
56
|
+
return timestamp * 1e6 + random * 1e3 + counter;
|
|
57
|
+
}, "generateId");
|
|
58
|
+
|
|
59
|
+
// src/utils/mixedStorage.ts
|
|
60
|
+
var mixedStorage = {
|
|
61
|
+
getItem(name) {
|
|
62
|
+
return sessionStorage.getItem(name) ?? localStorage.getItem(name);
|
|
63
|
+
},
|
|
64
|
+
setItem(name, value) {
|
|
65
|
+
sessionStorage.setItem(name, value);
|
|
66
|
+
localStorage.setItem(name, value);
|
|
67
|
+
},
|
|
68
|
+
removeItem(name) {
|
|
69
|
+
sessionStorage.removeItem(name);
|
|
70
|
+
localStorage.removeItem(name);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
// src/constants/index.ts
|
|
75
|
+
var SSO_URL = "https://idaas.ifunplus.cn/enduser/api/application/plugin_FunPlus/sso/v1";
|
|
76
|
+
var APP_ID_HEADER = "App-ID";
|
|
77
|
+
var FRONTEND_ROUTE_PREFIX = "/console/";
|
|
78
|
+
var PermissionMode = /* @__PURE__ */ ((PermissionMode2) => {
|
|
79
|
+
PermissionMode2["GAME_SCOPED"] = "game_scoped";
|
|
80
|
+
PermissionMode2["GROUP_BASED"] = "group_based";
|
|
81
|
+
PermissionMode2["DIRECT_GAME"] = "direct_game";
|
|
82
|
+
return PermissionMode2;
|
|
83
|
+
})(PermissionMode || {});
|
|
84
|
+
var WILDCARD = "*";
|
|
85
|
+
|
|
86
|
+
// src/locale/zh_CN.ts
|
|
87
|
+
var locale = {
|
|
88
|
+
global: {
|
|
89
|
+
noEntitlement: "\u65E0\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458",
|
|
90
|
+
name: "\u540D\u79F0",
|
|
91
|
+
creationTime: "\u521B\u5EFA\u65F6\u95F4",
|
|
92
|
+
operation: "\u64CD\u4F5C",
|
|
93
|
+
update: "\u66F4\u65B0",
|
|
94
|
+
edit: "\u7F16\u8F91",
|
|
95
|
+
delete: "\u5220\u9664",
|
|
96
|
+
selectAll: "\u5168\u9009",
|
|
97
|
+
game: "\u6E38\u620F",
|
|
98
|
+
user: "\u7528\u6237",
|
|
99
|
+
role: "\u89D2\u8272",
|
|
100
|
+
username: "\u7528\u6237\u540D",
|
|
101
|
+
password: "\u5BC6\u7801",
|
|
102
|
+
label: "\u6807\u7B7E",
|
|
103
|
+
method: "\u65B9\u6CD5",
|
|
104
|
+
route: "\u8DEF\u7531",
|
|
105
|
+
request: "\u8BF7\u6C42",
|
|
106
|
+
response: "\u54CD\u5E94",
|
|
107
|
+
add: "\u6DFB\u52A0",
|
|
108
|
+
signIn: "\u767B\u5F55",
|
|
109
|
+
projectGroup: "\u9879\u76EE\u7EC4",
|
|
110
|
+
view: "\u67E5\u770B",
|
|
111
|
+
back: "\u8FD4\u56DE"
|
|
112
|
+
},
|
|
113
|
+
SignIn: {
|
|
114
|
+
title: "\u767B\u5F55\u65B9\u5F0F",
|
|
115
|
+
signInWithIDass: "IDass \u767B\u5F55",
|
|
116
|
+
unregistered: "\u60A8\u8FD8\u672A\u5728\u5E73\u53F0\u6CE8\u518C\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458",
|
|
117
|
+
welcome: "\u6B22\u8FCE"
|
|
118
|
+
},
|
|
119
|
+
NotFound: {
|
|
120
|
+
subTitle: "\u8BBF\u95EE\u7684\u9875\u9762\u4E0D\u5B58\u5728",
|
|
121
|
+
buttonText: "\u8FD4\u56DE\u9996\u9875"
|
|
122
|
+
},
|
|
123
|
+
FilterFormWrapper: {
|
|
124
|
+
confirmText: "\u67E5\u8BE2",
|
|
125
|
+
resetText: "\u91CD\u7F6E"
|
|
126
|
+
},
|
|
127
|
+
FormModal: {
|
|
128
|
+
confirmText: "\u786E\u8BA4",
|
|
129
|
+
cancelText: "\u53D6\u6D88"
|
|
130
|
+
},
|
|
131
|
+
GameSelect: {
|
|
132
|
+
label: "\u5F53\u524D\u6E38\u620F",
|
|
133
|
+
placeholder: "\u8BF7\u9009\u62E9\u6E38\u620F"
|
|
134
|
+
},
|
|
135
|
+
RequireGame: {
|
|
136
|
+
description: "\u8BF7\u9009\u62E9\u6E38\u620F"
|
|
137
|
+
},
|
|
138
|
+
UserDropdown: {
|
|
139
|
+
signOutText: "\u767B\u51FA"
|
|
140
|
+
},
|
|
141
|
+
User: {
|
|
142
|
+
createTitle: "\u521B\u5EFA\u7528\u6237",
|
|
143
|
+
createSuccessfully: "\u7528\u6237\u521B\u5EFA\u6210\u529F",
|
|
144
|
+
updateTitle: "\u66F4\u65B0\u7528\u6237",
|
|
145
|
+
updateSuccessfully: "\u7528\u6237\u66F4\u65B0\u6210\u529F",
|
|
146
|
+
deleteTitle: "\u5220\u9664\u7528\u6237",
|
|
147
|
+
deleteContent: "\u786E\u5B9A\u8981\u5220\u9664\u7528\u6237 <%= user %> \u5417\uFF1F",
|
|
148
|
+
deleteSuccessfully: "\u7528\u6237\u5220\u9664\u6210\u529F"
|
|
149
|
+
},
|
|
150
|
+
Role: {
|
|
151
|
+
createTitle: "\u521B\u5EFA\u89D2\u8272",
|
|
152
|
+
createSuccessfully: "\u89D2\u8272\u521B\u5EFA\u6210\u529F",
|
|
153
|
+
updateTitle: "\u66F4\u65B0\u89D2\u8272",
|
|
154
|
+
updateSuccessfully: "\u89D2\u8272\u66F4\u65B0\u6210\u529F",
|
|
155
|
+
deleteTitle: "\u5220\u9664\u89D2\u8272",
|
|
156
|
+
deleteContent: "\u786E\u5B9A\u8981\u5220\u9664\u89D2\u8272 <%= role %> \u5417\uFF1F",
|
|
157
|
+
deleteSuccessfully: "\u89D2\u8272\u5220\u9664\u6210\u529F"
|
|
158
|
+
},
|
|
159
|
+
PermissionList: {
|
|
160
|
+
failedDescription: "\u83B7\u53D6\u6743\u9650\u5217\u8868\u5931\u8D25",
|
|
161
|
+
baseSectionTitle: "\u5E73\u53F0\u57FA\u7840\u6743\u9650",
|
|
162
|
+
gameSectionTitle: "\u6E38\u620F\u6743\u9650",
|
|
163
|
+
gameSectionDescription: "\u8BF7\u5148\u9009\u62E9\u6E38\u620F",
|
|
164
|
+
gameSelectPlaceholder: "\u8BF7\u5148\u9009\u62E9\u6E38\u620F",
|
|
165
|
+
removeText: "\u79FB\u9664",
|
|
166
|
+
addText: "\u6DFB\u52A0\u6E38\u620F\u6743\u9650"
|
|
167
|
+
},
|
|
168
|
+
RoleDetail: {
|
|
169
|
+
title: "\u89D2\u8272\u8BE6\u60C5"
|
|
170
|
+
},
|
|
171
|
+
InfiniteList: {
|
|
172
|
+
loadingText: "\u52A0\u8F7D\u4E2D",
|
|
173
|
+
reachEndText: "\u5DF2\u7ECF\u5230\u5E95\u4E86",
|
|
174
|
+
loadMoreText: "\u52A0\u8F7D\u66F4\u591A"
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
var zh_CN_default = locale;
|
|
178
|
+
|
|
179
|
+
// src/stores/context.ts
|
|
180
|
+
var defaultContextSlice = {
|
|
181
|
+
locale: zh_CN_default,
|
|
182
|
+
useGameApiV2: false,
|
|
183
|
+
isGlobalMode: false,
|
|
184
|
+
gameScoped: false,
|
|
185
|
+
loginPath: "/sign_in",
|
|
186
|
+
homePath: "/",
|
|
187
|
+
permissionMode: "game_scoped" /* GAME_SCOPED */,
|
|
188
|
+
sidebarWidth: 250
|
|
189
|
+
};
|
|
190
|
+
var createContextSlice = /* @__PURE__ */ __name(() => ({
|
|
191
|
+
...defaultContextSlice
|
|
192
|
+
}), "createContextSlice");
|
|
193
|
+
|
|
194
|
+
// src/stores/game.ts
|
|
195
|
+
var createGameSlice = /* @__PURE__ */ __name((set) => ({
|
|
196
|
+
setAppId: /* @__PURE__ */ __name((id) => set(() => ({ appId: id })), "setAppId")
|
|
197
|
+
}), "createGameSlice");
|
|
198
|
+
|
|
199
|
+
// src/stores/layout.ts
|
|
200
|
+
var createLayoutSlice = /* @__PURE__ */ __name((set) => ({
|
|
201
|
+
collapsed: false,
|
|
202
|
+
toggleCollapsed: /* @__PURE__ */ __name(() => set((s) => ({ collapsed: !s.collapsed })), "toggleCollapsed")
|
|
203
|
+
}), "createLayoutSlice");
|
|
204
|
+
var decodeToken = /* @__PURE__ */ __name((token) => {
|
|
205
|
+
if (!token) return null;
|
|
206
|
+
try {
|
|
207
|
+
return jwtDecode(token);
|
|
208
|
+
} catch {
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
}, "decodeToken");
|
|
212
|
+
var createTokenSlice = /* @__PURE__ */ __name((set) => ({
|
|
213
|
+
token: void 0,
|
|
214
|
+
user: null,
|
|
215
|
+
setToken: /* @__PURE__ */ __name((token) => set(() => ({ token, user: decodeToken(token) })), "setToken"),
|
|
216
|
+
clearToken: /* @__PURE__ */ __name(() => set(() => ({ token: void 0, user: null })), "clearToken")
|
|
217
|
+
}), "createTokenSlice");
|
|
218
|
+
|
|
219
|
+
// src/stores/index.ts
|
|
220
|
+
function createSliceAdapter(set, get, key) {
|
|
221
|
+
const sliceSet = /* @__PURE__ */ __name((partial, replace) => {
|
|
222
|
+
if (replace) {
|
|
223
|
+
const update = typeof partial === "function" ? partial(get()[key]) : partial;
|
|
224
|
+
set({ ...get(), [key]: update }, true);
|
|
225
|
+
} else if (typeof partial === "function") {
|
|
226
|
+
set((state) => {
|
|
227
|
+
const updated = { ...state[key], ...partial(state[key]) };
|
|
228
|
+
return { [key]: updated };
|
|
229
|
+
});
|
|
230
|
+
} else {
|
|
231
|
+
set((state) => {
|
|
232
|
+
const updated = { ...state[key], ...partial };
|
|
233
|
+
return { [key]: updated };
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
}, "sliceSet");
|
|
237
|
+
const sliceGet = /* @__PURE__ */ __name(() => get()[key], "sliceGet");
|
|
238
|
+
return { set: sliceSet, get: sliceGet };
|
|
239
|
+
}
|
|
240
|
+
__name(createSliceAdapter, "createSliceAdapter");
|
|
241
|
+
var createToolkitsStore = /* @__PURE__ */ __name((initProps) => {
|
|
242
|
+
return createStore()(
|
|
243
|
+
persist(
|
|
244
|
+
(set, get, store) => {
|
|
245
|
+
const createSlice = /* @__PURE__ */ __name((key, creator) => {
|
|
246
|
+
const adapter = createSliceAdapter(set, get, key);
|
|
247
|
+
const sliceStore = store;
|
|
248
|
+
return creator(adapter.set, adapter.get, sliceStore);
|
|
249
|
+
}, "createSlice");
|
|
250
|
+
const tokenSlice = createSlice("token", createTokenSlice);
|
|
251
|
+
const gameSlice = createSlice("game", createGameSlice);
|
|
252
|
+
const layoutSlice = createSlice("layout", createLayoutSlice);
|
|
253
|
+
const contextSlice = createSlice("context", createContextSlice);
|
|
254
|
+
return {
|
|
255
|
+
context: {
|
|
256
|
+
...contextSlice,
|
|
257
|
+
...initProps
|
|
258
|
+
},
|
|
259
|
+
token: tokenSlice,
|
|
260
|
+
game: gameSlice,
|
|
261
|
+
layout: layoutSlice,
|
|
262
|
+
clear: /* @__PURE__ */ __name(() => {
|
|
263
|
+
get().token.clearToken();
|
|
264
|
+
store.persist.clearStorage();
|
|
265
|
+
}, "clear")
|
|
266
|
+
};
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
name: "ToolkitsStore",
|
|
270
|
+
storage: createJSONStorage(() => mixedStorage),
|
|
271
|
+
partialize: /* @__PURE__ */ __name((state) => ({
|
|
272
|
+
token: state.token.token,
|
|
273
|
+
appId: state.game.appId,
|
|
274
|
+
user: state.token.user,
|
|
275
|
+
collapsed: state.layout.collapsed
|
|
276
|
+
}), "partialize"),
|
|
277
|
+
merge: /* @__PURE__ */ __name((persistedState, currentState) => {
|
|
278
|
+
const { token, user, appId, collapsed } = persistedState;
|
|
279
|
+
return {
|
|
280
|
+
...currentState,
|
|
281
|
+
token: { ...currentState.token, token, user },
|
|
282
|
+
game: { ...currentState.game, appId },
|
|
283
|
+
layout: { ...currentState.layout, collapsed: collapsed ?? currentState.layout.collapsed }
|
|
284
|
+
};
|
|
285
|
+
}, "merge")
|
|
286
|
+
}
|
|
287
|
+
)
|
|
288
|
+
);
|
|
289
|
+
}, "createToolkitsStore");
|
|
290
|
+
var ToolkitsContext = createContext(null);
|
|
291
|
+
function useToolkitsStore(selector) {
|
|
292
|
+
const store = useContext(ToolkitsContext);
|
|
293
|
+
if (!store) {
|
|
294
|
+
const componentStack = new Error().stack;
|
|
295
|
+
const componentName = componentStack?.split("\n")[2]?.trim() || "Unknown";
|
|
296
|
+
throw new Error(
|
|
297
|
+
`Missing ToolkitsProvider in the tree. Component "${componentName}" must be wrapped with <ToolkitsProvider>. Please ensure ToolkitsProvider is rendered above this component in the component tree.`
|
|
298
|
+
);
|
|
299
|
+
}
|
|
300
|
+
return useStore(store, selector ?? ((state) => state));
|
|
301
|
+
}
|
|
302
|
+
__name(useToolkitsStore, "useToolkitsStore");
|
|
303
|
+
var ToolkitsProvider = /* @__PURE__ */ __name((props) => {
|
|
304
|
+
const { children, ...restProps } = props;
|
|
305
|
+
const storeRef = useRef(void 0);
|
|
306
|
+
const parentStore = useContext(ToolkitsContext);
|
|
307
|
+
if (!storeRef.current) {
|
|
308
|
+
const parentContext = parentStore?.getState().context ?? {};
|
|
309
|
+
storeRef.current = createToolkitsStore({ ...parentContext, ...restProps });
|
|
310
|
+
}
|
|
311
|
+
if (!storeRef.current.getState().context.loginPath) {
|
|
312
|
+
throw new Error('ToolkitsProvider: \u8BF7\u914D\u7F6E "loginPath"');
|
|
313
|
+
}
|
|
314
|
+
return /* @__PURE__ */ jsx(ToolkitsContext.Provider, { value: storeRef.current, children: /* @__PURE__ */ jsx(App, { children: /* @__PURE__ */ jsx(Fragment, { children }) }) });
|
|
315
|
+
}, "ToolkitsProvider");
|
|
316
|
+
{
|
|
317
|
+
ToolkitsProvider.displayName = "ToolkitsProvider";
|
|
318
|
+
}
|
|
319
|
+
var ToolkitsProvider_default = ToolkitsProvider;
|
|
320
|
+
var SUCCESS_RESPONSE_CODES = [0, 1, 200];
|
|
321
|
+
var HTTP_STATUS = {
|
|
322
|
+
OK: 200,
|
|
323
|
+
UNAUTHORIZED: 401,
|
|
324
|
+
FORBIDDEN: 403,
|
|
325
|
+
UNREGISTERED: 412
|
|
326
|
+
};
|
|
327
|
+
var REQUEST_TIMEOUT = 3e4;
|
|
328
|
+
var extractErrorMessage = /* @__PURE__ */ __name((data) => {
|
|
329
|
+
if (!data || typeof data !== "object") {
|
|
330
|
+
return "Unknown error";
|
|
331
|
+
}
|
|
332
|
+
return data.msg || data.message || data.error || "Unknown error";
|
|
333
|
+
}, "extractErrorMessage");
|
|
334
|
+
var isStatusCodeSuccess = /* @__PURE__ */ __name((config) => {
|
|
335
|
+
const { value, allowedCodes } = config;
|
|
336
|
+
if (value === void 0 || value === null) {
|
|
337
|
+
return false;
|
|
338
|
+
}
|
|
339
|
+
if (typeof value !== "number") {
|
|
340
|
+
return false;
|
|
341
|
+
}
|
|
342
|
+
return allowedCodes.includes(value);
|
|
343
|
+
}, "isStatusCodeSuccess");
|
|
344
|
+
var isSuccessResponse = /* @__PURE__ */ __name((data, status) => {
|
|
345
|
+
if (status < HTTP_STATUS.OK || status >= 300) {
|
|
346
|
+
return false;
|
|
347
|
+
}
|
|
348
|
+
if (!data || typeof data !== "object") {
|
|
349
|
+
return true;
|
|
350
|
+
}
|
|
351
|
+
const statusChecks = [
|
|
352
|
+
{ field: "code", value: data.code, allowedCodes: SUCCESS_RESPONSE_CODES },
|
|
353
|
+
{ field: "status", value: data.status, allowedCodes: SUCCESS_RESPONSE_CODES },
|
|
354
|
+
{ field: "errno", value: data.errno, allowedCodes: SUCCESS_RESPONSE_CODES }
|
|
355
|
+
];
|
|
356
|
+
const hasBusinessStatusCode = statusChecks.some((config) => config.value !== void 0 && config.value !== null);
|
|
357
|
+
if (hasBusinessStatusCode) {
|
|
358
|
+
return statusChecks.every(
|
|
359
|
+
(config) => config.value === void 0 || config.value === null || isStatusCodeSuccess(config)
|
|
360
|
+
);
|
|
361
|
+
}
|
|
362
|
+
return true;
|
|
363
|
+
}, "isSuccessResponse");
|
|
364
|
+
var processResponseByType = /* @__PURE__ */ __name(async (response, responseType) => {
|
|
365
|
+
switch (responseType) {
|
|
366
|
+
case "blob":
|
|
367
|
+
return response.blob();
|
|
368
|
+
case "text":
|
|
369
|
+
return response.text();
|
|
370
|
+
case "arrayBuffer":
|
|
371
|
+
return response.arrayBuffer();
|
|
372
|
+
case "formData":
|
|
373
|
+
return response.formData();
|
|
374
|
+
case "json":
|
|
375
|
+
default:
|
|
376
|
+
return response.json();
|
|
377
|
+
}
|
|
378
|
+
}, "processResponseByType");
|
|
379
|
+
var useKy = /* @__PURE__ */ __name((config) => {
|
|
380
|
+
const { baseURL } = config || {};
|
|
381
|
+
const { notification } = App.useApp();
|
|
382
|
+
const navigate = useNavigate();
|
|
383
|
+
const queryClient = useQueryClient();
|
|
384
|
+
const {
|
|
385
|
+
token: { token },
|
|
386
|
+
context: { isGlobalMode, loginPath, apiBaseUrl },
|
|
387
|
+
game: { appId },
|
|
388
|
+
clear
|
|
389
|
+
} = useToolkitsStore();
|
|
390
|
+
const handleUnauthorized = /* @__PURE__ */ __name(() => {
|
|
391
|
+
clear();
|
|
392
|
+
queryClient.clear();
|
|
393
|
+
navigate(loginPath);
|
|
394
|
+
}, "handleUnauthorized");
|
|
395
|
+
const handleUnregistered = /* @__PURE__ */ __name(() => {
|
|
396
|
+
clear();
|
|
397
|
+
queryClient.clear();
|
|
398
|
+
if (loginPath) {
|
|
399
|
+
const url = new URL(loginPath, window.location.origin);
|
|
400
|
+
url.searchParams.set("unregistered", "true");
|
|
401
|
+
navigate(url.toString());
|
|
402
|
+
}
|
|
403
|
+
}, "handleUnregistered");
|
|
404
|
+
const handleForbidden = /* @__PURE__ */ __name(() => {
|
|
405
|
+
notification.error({
|
|
406
|
+
title: "\u8BBF\u95EE\u88AB\u7981\u6B62",
|
|
407
|
+
description: "\u60A8\u6CA1\u6709\u6743\u9650\u8BBF\u95EE\u6B64\u8D44\u6E90\u3002"
|
|
408
|
+
});
|
|
409
|
+
}, "handleForbidden");
|
|
410
|
+
const createResponseHandler = /* @__PURE__ */ __name((responseType) => {
|
|
411
|
+
return async (_request, _options, response) => {
|
|
412
|
+
if (responseType === "blob" || responseType === "arrayBuffer" || responseType === "text" || responseType === "formData") {
|
|
413
|
+
return response;
|
|
414
|
+
}
|
|
415
|
+
let data;
|
|
416
|
+
try {
|
|
417
|
+
data = await response.clone().json();
|
|
418
|
+
} catch {
|
|
419
|
+
return response;
|
|
420
|
+
}
|
|
421
|
+
if (isSuccessResponse(data, response.status)) {
|
|
422
|
+
return new Response(JSON.stringify(data), {
|
|
423
|
+
status: response.status,
|
|
424
|
+
statusText: response.statusText,
|
|
425
|
+
headers: response.headers
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
const errorMessage = extractErrorMessage(data);
|
|
429
|
+
notification.error({
|
|
430
|
+
title: "Request failed",
|
|
431
|
+
description: errorMessage
|
|
432
|
+
});
|
|
433
|
+
const error = new Error(errorMessage);
|
|
434
|
+
error.response = response;
|
|
435
|
+
error.data = data;
|
|
436
|
+
throw error;
|
|
437
|
+
};
|
|
438
|
+
}, "createResponseHandler");
|
|
439
|
+
const handleHttpStatusError = /* @__PURE__ */ __name((status, data) => {
|
|
440
|
+
switch (status) {
|
|
441
|
+
case HTTP_STATUS.UNAUTHORIZED:
|
|
442
|
+
handleUnauthorized();
|
|
443
|
+
break;
|
|
444
|
+
case HTTP_STATUS.UNREGISTERED:
|
|
445
|
+
handleUnregistered();
|
|
446
|
+
break;
|
|
447
|
+
case HTTP_STATUS.FORBIDDEN:
|
|
448
|
+
handleForbidden();
|
|
449
|
+
break;
|
|
450
|
+
default: {
|
|
451
|
+
const errorMessage = extractErrorMessage(data) || `HTTP ${status} Error`;
|
|
452
|
+
notification.error({
|
|
453
|
+
title: "Request failed",
|
|
454
|
+
description: errorMessage
|
|
455
|
+
});
|
|
456
|
+
break;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
}, "handleHttpStatusError");
|
|
460
|
+
const instance = useMemo(() => {
|
|
461
|
+
return ky.create({
|
|
462
|
+
prefixUrl: baseURL ?? apiBaseUrl,
|
|
463
|
+
retry: 0,
|
|
464
|
+
timeout: REQUEST_TIMEOUT,
|
|
465
|
+
headers: {
|
|
466
|
+
Accept: "application/json",
|
|
467
|
+
"Content-Type": "application/json"
|
|
468
|
+
},
|
|
469
|
+
hooks: {
|
|
470
|
+
beforeRequest: [
|
|
471
|
+
(request2) => {
|
|
472
|
+
if (token) {
|
|
473
|
+
request2.headers.set("Authorization", `Bearer ${token}`);
|
|
474
|
+
}
|
|
475
|
+
if (!request2.headers.has(APP_ID_HEADER)) {
|
|
476
|
+
if (isGlobalMode || !appId) {
|
|
477
|
+
request2.headers.set(APP_ID_HEADER, "global");
|
|
478
|
+
} else {
|
|
479
|
+
request2.headers.set(APP_ID_HEADER, encodeURIComponent(String(appId)));
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
],
|
|
484
|
+
beforeError: [
|
|
485
|
+
async (error) => {
|
|
486
|
+
const { response } = error;
|
|
487
|
+
if (response) {
|
|
488
|
+
const status = response.status;
|
|
489
|
+
let data;
|
|
490
|
+
try {
|
|
491
|
+
const contentType = response.headers.get("content-type") || "";
|
|
492
|
+
if (contentType.includes("application/json") || contentType.startsWith("text/")) {
|
|
493
|
+
data = await response.clone().json();
|
|
494
|
+
}
|
|
495
|
+
} catch {
|
|
496
|
+
}
|
|
497
|
+
handleHttpStatusError(status, data);
|
|
498
|
+
} else {
|
|
499
|
+
notification.error({
|
|
500
|
+
title: "Network Error",
|
|
501
|
+
description: error.message || "Network request failed"
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
return error;
|
|
505
|
+
}
|
|
506
|
+
]
|
|
507
|
+
}
|
|
508
|
+
});
|
|
509
|
+
}, [baseURL, token, isGlobalMode, appId, notification, loginPath, clear, queryClient, apiBaseUrl]);
|
|
510
|
+
const makeRequest = /* @__PURE__ */ __name(async (method, url, data, requestOptions) => {
|
|
511
|
+
const { responseType, ...kyOptions } = requestOptions || {};
|
|
512
|
+
const finalOptions = {
|
|
513
|
+
...kyOptions,
|
|
514
|
+
hooks: {
|
|
515
|
+
...kyOptions.hooks,
|
|
516
|
+
afterResponse: [...kyOptions.hooks?.afterResponse || [], createResponseHandler(responseType)]
|
|
517
|
+
}
|
|
518
|
+
};
|
|
519
|
+
let response;
|
|
520
|
+
if (data) {
|
|
521
|
+
response = await instance(url, { method, json: data, ...finalOptions });
|
|
522
|
+
} else {
|
|
523
|
+
response = await instance(url, { method, ...finalOptions });
|
|
524
|
+
}
|
|
525
|
+
return processResponseByType(response, responseType);
|
|
526
|
+
}, "makeRequest");
|
|
527
|
+
const get = /* @__PURE__ */ __name((url, options2) => {
|
|
528
|
+
return makeRequest("GET", url, void 0, options2);
|
|
529
|
+
}, "get");
|
|
530
|
+
const post = /* @__PURE__ */ __name((url, data, options2) => {
|
|
531
|
+
return makeRequest("POST", url, data, options2);
|
|
532
|
+
}, "post");
|
|
533
|
+
const put = /* @__PURE__ */ __name((url, data, options2) => {
|
|
534
|
+
return makeRequest("PUT", url, data, options2);
|
|
535
|
+
}, "put");
|
|
536
|
+
const del = /* @__PURE__ */ __name((url, options2) => {
|
|
537
|
+
return makeRequest("DELETE", url, void 0, options2);
|
|
538
|
+
}, "del");
|
|
539
|
+
const patch = /* @__PURE__ */ __name((url, data, options2) => {
|
|
540
|
+
return makeRequest("PATCH", url, data, options2);
|
|
541
|
+
}, "patch");
|
|
542
|
+
const options = /* @__PURE__ */ __name((url, requestOptions) => {
|
|
543
|
+
return makeRequest("OPTIONS", url, void 0, requestOptions);
|
|
544
|
+
}, "options");
|
|
545
|
+
const head = /* @__PURE__ */ __name((url, requestOptions) => {
|
|
546
|
+
return makeRequest("HEAD", url, void 0, requestOptions);
|
|
547
|
+
}, "head");
|
|
548
|
+
const request = /* @__PURE__ */ __name((requestOptions) => {
|
|
549
|
+
const { url, ...requestOpts } = requestOptions;
|
|
550
|
+
return makeRequest(requestOpts.method || "GET", url, void 0, requestOpts);
|
|
551
|
+
}, "request");
|
|
552
|
+
return {
|
|
553
|
+
get,
|
|
554
|
+
post,
|
|
555
|
+
put,
|
|
556
|
+
delete: del,
|
|
557
|
+
patch,
|
|
558
|
+
options,
|
|
559
|
+
head,
|
|
560
|
+
request,
|
|
561
|
+
instance
|
|
562
|
+
};
|
|
563
|
+
}, "useKy");
|
|
564
|
+
var extractData = /* @__PURE__ */ __name((response) => {
|
|
565
|
+
if (response && typeof response === "object" && "data" in response && response.data !== void 0) {
|
|
566
|
+
return response.data;
|
|
567
|
+
}
|
|
568
|
+
return response;
|
|
569
|
+
}, "extractData");
|
|
570
|
+
var useHttpRequest = /* @__PURE__ */ __name((config) => {
|
|
571
|
+
const kyClient = useKy(config);
|
|
572
|
+
return {
|
|
573
|
+
get: /* @__PURE__ */ __name((url, options) => {
|
|
574
|
+
return kyClient.get(url, options).then(extractData);
|
|
575
|
+
}, "get"),
|
|
576
|
+
post: /* @__PURE__ */ __name((url, data, options) => {
|
|
577
|
+
return kyClient.post(url, data, options).then(extractData);
|
|
578
|
+
}, "post"),
|
|
579
|
+
put: /* @__PURE__ */ __name((url, data, options) => {
|
|
580
|
+
return kyClient.put(url, data, options).then(extractData);
|
|
581
|
+
}, "put"),
|
|
582
|
+
delete: /* @__PURE__ */ __name((url, options) => {
|
|
583
|
+
return kyClient.delete(url, options).then(extractData);
|
|
584
|
+
}, "delete"),
|
|
585
|
+
patch: /* @__PURE__ */ __name((url, data, options) => {
|
|
586
|
+
return kyClient.patch(url, data, options).then(extractData);
|
|
587
|
+
}, "patch"),
|
|
588
|
+
options: /* @__PURE__ */ __name((url, requestOptions) => {
|
|
589
|
+
return kyClient.options(url, requestOptions).then(extractData);
|
|
590
|
+
}, "options"),
|
|
591
|
+
head: /* @__PURE__ */ __name((url, requestOptions) => {
|
|
592
|
+
return kyClient.head(url, requestOptions).then(extractData);
|
|
593
|
+
}, "head"),
|
|
594
|
+
request: /* @__PURE__ */ __name((requestOptions) => {
|
|
595
|
+
return kyClient.request(requestOptions).then(extractData);
|
|
596
|
+
}, "request")
|
|
597
|
+
};
|
|
598
|
+
}, "useHttpRequest");
|
|
599
|
+
var useHttpGet = /* @__PURE__ */ __name((config) => {
|
|
600
|
+
const http = useHttpRequest(config);
|
|
601
|
+
return http.get;
|
|
602
|
+
}, "useHttpGet");
|
|
603
|
+
var useHttpPost = /* @__PURE__ */ __name((config) => {
|
|
604
|
+
const http = useHttpRequest(config);
|
|
605
|
+
return http.post;
|
|
606
|
+
}, "useHttpPost");
|
|
607
|
+
|
|
608
|
+
// src/queryKeys.ts
|
|
609
|
+
var queryKeys = {
|
|
610
|
+
// 权限相关
|
|
611
|
+
permissions: {
|
|
612
|
+
check: /* @__PURE__ */ __name((permissions, mode) => ["permissions", "check", permissions, mode], "check"),
|
|
613
|
+
allPermissions: ["permissions", "all"],
|
|
614
|
+
allPermissionsV2: ["permissions", "allV2"]
|
|
615
|
+
},
|
|
616
|
+
// 用户相关
|
|
617
|
+
users: {
|
|
618
|
+
all: ["users"],
|
|
619
|
+
detail: /* @__PURE__ */ __name((id) => ["users", "detail", id], "detail"),
|
|
620
|
+
create: ["users", "create"],
|
|
621
|
+
update: ["users", "update"],
|
|
622
|
+
delete: ["users", "delete"]
|
|
623
|
+
},
|
|
624
|
+
// 角色相关
|
|
625
|
+
roles: {
|
|
626
|
+
all: ["roles"],
|
|
627
|
+
detail: /* @__PURE__ */ __name((name, mode) => ["roles", "detail", name, mode], "detail"),
|
|
628
|
+
create: /* @__PURE__ */ __name((mode) => ["roles", "create", mode], "create"),
|
|
629
|
+
update: /* @__PURE__ */ __name((mode) => ["roles", "update", mode], "update"),
|
|
630
|
+
delete: ["roles", "delete"]
|
|
631
|
+
},
|
|
632
|
+
// 菜单相关
|
|
633
|
+
menus: {
|
|
634
|
+
all: ["menus"],
|
|
635
|
+
navbar: /* @__PURE__ */ __name((appId) => ["menus", "navbar", appId], "navbar"),
|
|
636
|
+
detail: /* @__PURE__ */ __name((id) => ["menus", "detail", id], "detail"),
|
|
637
|
+
create: ["menus", "create"],
|
|
638
|
+
update: ["menus", "update"],
|
|
639
|
+
delete: ["menus", "delete"]
|
|
640
|
+
},
|
|
641
|
+
// 枚举相关
|
|
642
|
+
enums: {
|
|
643
|
+
gameGroups: ["enums", "gameGroups"],
|
|
644
|
+
gameIds: /* @__PURE__ */ __name((gameGroups) => ["enums", "gameIds", gameGroups], "gameIds")
|
|
645
|
+
},
|
|
646
|
+
// 游戏相关
|
|
647
|
+
games: {
|
|
648
|
+
all: ["games", "all"]
|
|
649
|
+
},
|
|
650
|
+
// 认证相关
|
|
651
|
+
auth: {
|
|
652
|
+
ticketLogin: /* @__PURE__ */ __name((ticket) => ["auth", "ticket-login", ticket], "ticketLogin")
|
|
653
|
+
}
|
|
654
|
+
};
|
|
655
|
+
|
|
656
|
+
export { APP_ID_HEADER, FRONTEND_ROUTE_PREFIX, PermissionMode, SSO_URL, ToolkitsProvider_default, WILDCARD, __name, createVisibilityStore, generateId, mixedStorage, queryKeys, useHttpGet, useHttpPost, useKy, useToolkitsStore };
|
|
657
|
+
//# sourceMappingURL=chunk-Z7GW3RVV.js.map
|
|
658
|
+
//# sourceMappingURL=chunk-Z7GW3RVV.js.map
|