@nocobase/plugin-multi-portal 3.0.0-alpha.6 → 3.0.0-alpha.8
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/dist/client-v2/354.87f18462949b5c23.js +10 -0
- package/dist/client-v2/556.443e73c9ca4c18b9.js +10 -0
- package/dist/client-v2/778.affaa69b23857ef2.js +10 -0
- package/dist/client-v2/993.7a1cc7aa6cec0160.js +10 -0
- package/dist/client-v2/PortalAccessBoundary.d.ts +49 -0
- package/dist/client-v2/index.js +1 -1
- package/dist/client-v2/interceptor.d.ts +13 -0
- package/dist/client-v2/models/MultiPortalLayoutModels.d.ts +14 -0
- package/dist/client-v2/models/MultiPortalMobilePageModels.d.ts +2 -0
- package/dist/client-v2/portalAccess.d.ts +73 -0
- package/dist/externalVersion.js +10 -9
- package/dist/locale/en-US.json +16 -2
- package/dist/locale/zh-CN.json +16 -2
- package/dist/node_modules/tar/package.json +1 -1
- package/dist/server/plugin.d.ts +1 -0
- package/dist/server/plugin.js +107 -44
- package/package.json +3 -3
- package/dist/client-v2/354.7be267ae5d61a878.js +0 -10
- package/dist/client-v2/556.64742ccddb8fe2f0.js +0 -10
- package/dist/client-v2/778.c98e7ec542d931fe.js +0 -10
package/dist/server/plugin.js
CHANGED
|
@@ -80,8 +80,6 @@ const MAIN_APP_NAME = "main";
|
|
|
80
80
|
const UNION_ROLE_KEY = "__union__";
|
|
81
81
|
const MULTI_PORTAL_MANIFEST_NAMESPACE = "multi-portal";
|
|
82
82
|
const MULTI_PORTAL_MANIFEST_SYNC_MESSAGE_TYPE = "multi-portal:app-manifest-changed";
|
|
83
|
-
const DEFAULT_INIT_PORTAL_TYPE = "ai";
|
|
84
|
-
const DEFAULT_INIT_PORTAL_NAME = "main";
|
|
85
83
|
const DEFAULT_INIT_PORTAL_TEMPLATE = "@nocobase/portal-template-default";
|
|
86
84
|
const PORTAL_CLIENT_PREFIX = "x";
|
|
87
85
|
const PORTAL_DEPLOY_UPLOAD_LIMIT = 200 * 1024 * 1024;
|
|
@@ -91,7 +89,9 @@ const PORTAL_PUBLIC_FILE_MODE = 420;
|
|
|
91
89
|
const PORTAL_TEMPLATE_NPM_PACK_TIMEOUT_MS = 3e4;
|
|
92
90
|
const DEFAULT_MULTI_PORTAL_UID = "__default_portal__";
|
|
93
91
|
const MULTI_PORTAL_SLUG_PATTERN = /^[a-z0-9_-]+$/;
|
|
94
|
-
const
|
|
92
|
+
const PORTAL_ACCESS_DENIED_CODE = "PORTAL_ACCESS_DENIED";
|
|
93
|
+
const PORTAL_CONTEXT_INVALID_CODE = "PORTAL_CONTEXT_INVALID";
|
|
94
|
+
const PORTAL_NOT_FOUND_CODE = "PORTAL_NOT_FOUND";
|
|
95
95
|
const MULTI_PORTAL_MANAGEMENT_ACTIONS = [
|
|
96
96
|
"multiPortals:list",
|
|
97
97
|
"multiPortals:get",
|
|
@@ -119,6 +119,11 @@ const ROLE_MULTI_PORTAL_PERMISSION_ACTIONS = [
|
|
|
119
119
|
"rolesMultiPortalDesktopRoutes:*",
|
|
120
120
|
"rolesMultiPortalRoutePolicies:*"
|
|
121
121
|
];
|
|
122
|
+
const MULTI_PORTAL_SEED_TYPES = ["no-code", "ai"];
|
|
123
|
+
const MULTI_PORTAL_SEED_TYPE_SET = new Set(MULTI_PORTAL_SEED_TYPES);
|
|
124
|
+
function isMultiPortalSeedType(value) {
|
|
125
|
+
return typeof value === "string" && MULTI_PORTAL_SEED_TYPE_SET.has(value);
|
|
126
|
+
}
|
|
122
127
|
const SKIP_CREATE_PORTAL_DIRECTORY = Symbol("skipCreatePortalDirectory");
|
|
123
128
|
function getRecordField(record, field) {
|
|
124
129
|
if (!record || typeof record !== "object") {
|
|
@@ -144,39 +149,20 @@ async function pathExists(filePath) {
|
|
|
144
149
|
function trimString(value) {
|
|
145
150
|
return String(value ?? "").trim();
|
|
146
151
|
}
|
|
147
|
-
function isInitPortalType(value) {
|
|
148
|
-
return INIT_PORTAL_TYPES.includes(value);
|
|
149
|
-
}
|
|
150
|
-
function getInitPortalType() {
|
|
151
|
-
const portalType = trimString(process.env.INIT_PORTAL_TYPE) || DEFAULT_INIT_PORTAL_TYPE;
|
|
152
|
-
if (!isInitPortalType(portalType)) {
|
|
153
|
-
throw new Error('INIT_PORTAL_TYPE must be either "no-code" or "ai".');
|
|
154
|
-
}
|
|
155
|
-
return portalType;
|
|
156
|
-
}
|
|
157
|
-
function getInitPortalName() {
|
|
158
|
-
const portalName = trimString(process.env.INIT_PORTAL_NAME) || DEFAULT_INIT_PORTAL_NAME;
|
|
159
|
-
if (!MULTI_PORTAL_SLUG_PATTERN.test(portalName)) {
|
|
160
|
-
throw new Error("INIT_PORTAL_NAME can only contain lowercase letters, numbers, hyphens, and underscores.");
|
|
161
|
-
}
|
|
162
|
-
return portalName;
|
|
163
|
-
}
|
|
164
152
|
function getInitPortalTemplate() {
|
|
165
153
|
return trimString(process.env.INIT_PORTAL_TEMPLATE) || DEFAULT_INIT_PORTAL_TEMPLATE;
|
|
166
154
|
}
|
|
167
|
-
function
|
|
168
|
-
|
|
169
|
-
return title || portalName;
|
|
155
|
+
function hasDeprecatedInitPortalEnv() {
|
|
156
|
+
return Boolean(trimString(process.env.INIT_PORTAL_TYPE) || trimString(process.env.INIT_PORTAL_NAME));
|
|
170
157
|
}
|
|
171
|
-
function
|
|
172
|
-
const portalName = getInitPortalName();
|
|
158
|
+
function getDefaultAiMultiPortalRecord(options = {}) {
|
|
173
159
|
return {
|
|
174
160
|
uid: DEFAULT_MULTI_PORTAL_UID,
|
|
175
|
-
title:
|
|
161
|
+
title: "Main",
|
|
176
162
|
icon: "DesktopOutlined",
|
|
177
|
-
portalType:
|
|
178
|
-
portalName,
|
|
179
|
-
routePath:
|
|
163
|
+
portalType: "ai",
|
|
164
|
+
portalName: "main",
|
|
165
|
+
routePath: "/main",
|
|
180
166
|
authCheck: true,
|
|
181
167
|
enabled: true,
|
|
182
168
|
...options.isDefault ? { isDefault: true } : {},
|
|
@@ -184,7 +170,7 @@ function getDefaultMultiPortalRecord(options = {}) {
|
|
|
184
170
|
};
|
|
185
171
|
}
|
|
186
172
|
function getFreshMultiPortalRecords() {
|
|
187
|
-
return [
|
|
173
|
+
return [getDefaultAiMultiPortalRecord({ isDefault: true }), ...getFixedLayoutMultiPortalRecords()];
|
|
188
174
|
}
|
|
189
175
|
function getFixedLayoutMultiPortalRecords() {
|
|
190
176
|
return [
|
|
@@ -533,11 +519,16 @@ async function runPortalStorageCommandOnce(command, args, options) {
|
|
|
533
519
|
throw error;
|
|
534
520
|
}
|
|
535
521
|
}
|
|
536
|
-
|
|
522
|
+
function hasRequestAppHeader(options) {
|
|
523
|
+
var _a;
|
|
524
|
+
return Boolean(trimString((_a = options == null ? void 0 : options.context) == null ? void 0 : _a.get("X-App")));
|
|
525
|
+
}
|
|
526
|
+
async function buildPortalStorageItem(portalDir, item, options) {
|
|
537
527
|
const logPath = getPortalStorageLogPath(item);
|
|
528
|
+
const buildAppName = hasRequestAppHeader(options) ? item.appName : MAIN_APP_NAME;
|
|
538
529
|
const buildEnv = getPortalStorageCommandEnv({
|
|
539
|
-
NOCOBASE_API_URL: getPortalStorageApiUrl(
|
|
540
|
-
NOCOBASE_PORTAL_BASE: getPortalDeployBasePath(
|
|
530
|
+
NOCOBASE_API_URL: getPortalStorageApiUrl(buildAppName),
|
|
531
|
+
NOCOBASE_PORTAL_BASE: getPortalDeployBasePath(buildAppName, item.portalName),
|
|
541
532
|
SKIP_YARN_COREPACK_CHECK: "1",
|
|
542
533
|
COREPACK_ENABLE_STRICT: "0",
|
|
543
534
|
COREPACK_ENABLE_PROJECT_SPEC: "0"
|
|
@@ -1052,9 +1043,7 @@ async function seedFreshMultiPortals(db) {
|
|
|
1052
1043
|
}
|
|
1053
1044
|
}
|
|
1054
1045
|
async function seedHistoricalMultiPortals(db) {
|
|
1055
|
-
|
|
1056
|
-
await createDefaultMultiPortalBestEffort(db, getDefaultMultiPortalRecord());
|
|
1057
|
-
}
|
|
1046
|
+
await createDefaultMultiPortalBestEffort(db, getDefaultAiMultiPortalRecord());
|
|
1058
1047
|
for (const portal of getFixedLayoutMultiPortalRecords()) {
|
|
1059
1048
|
await createDefaultMultiPortalBestEffort(db, portal);
|
|
1060
1049
|
}
|
|
@@ -1225,13 +1214,77 @@ async function canAccessMultiPortal(ctx, multiPortalUid) {
|
|
|
1225
1214
|
if (!currentRoles.length) {
|
|
1226
1215
|
return false;
|
|
1227
1216
|
}
|
|
1228
|
-
const
|
|
1217
|
+
const access = await ctx.db.getRepository("rolesMultiPortals").findOne({
|
|
1218
|
+
fields: ["id"],
|
|
1229
1219
|
filter: {
|
|
1230
1220
|
roleName: currentRoles,
|
|
1231
1221
|
multiPortalUid
|
|
1232
1222
|
}
|
|
1233
1223
|
});
|
|
1234
|
-
return
|
|
1224
|
+
return access !== null;
|
|
1225
|
+
}
|
|
1226
|
+
function throwPortalAccessGateError(ctx, status, code, message) {
|
|
1227
|
+
ctx.throw(status, ctx.t(message, { ns: import_constants.NAMESPACE }), { code });
|
|
1228
|
+
throw new Error(message);
|
|
1229
|
+
}
|
|
1230
|
+
function getRequestedPortalNameFromHeader(ctx) {
|
|
1231
|
+
var _a;
|
|
1232
|
+
const headers = (_a = ctx.request) == null ? void 0 : _a.headers;
|
|
1233
|
+
if (!isRecordLike(headers) || !Object.prototype.hasOwnProperty.call(headers, "x-portal")) {
|
|
1234
|
+
return;
|
|
1235
|
+
}
|
|
1236
|
+
const rawPortalName = headers["x-portal"];
|
|
1237
|
+
if (typeof rawPortalName !== "string") {
|
|
1238
|
+
throwPortalAccessGateError(ctx, 400, PORTAL_CONTEXT_INVALID_CODE, "Invalid Portal context");
|
|
1239
|
+
}
|
|
1240
|
+
const portalName = rawPortalName.startsWith("/x/") ? rawPortalName.slice("/x/".length) : rawPortalName;
|
|
1241
|
+
if (!MULTI_PORTAL_SLUG_PATTERN.test(portalName)) {
|
|
1242
|
+
throwPortalAccessGateError(ctx, 400, PORTAL_CONTEXT_INVALID_CODE, "Invalid Portal context");
|
|
1243
|
+
}
|
|
1244
|
+
return portalName;
|
|
1245
|
+
}
|
|
1246
|
+
function pickPortalAccessDeniedData(ctx, portalName) {
|
|
1247
|
+
const roleCheckBody = isRecordLike(ctx.body) ? ctx.body : {};
|
|
1248
|
+
return {
|
|
1249
|
+
portalName,
|
|
1250
|
+
role: typeof roleCheckBody.role === "string" ? roleCheckBody.role : "",
|
|
1251
|
+
roles: Array.isArray(roleCheckBody.roles) ? roleCheckBody.roles.filter((role) => typeof role === "string") : [],
|
|
1252
|
+
roleMode: typeof roleCheckBody.roleMode === "string" ? roleCheckBody.roleMode : "default",
|
|
1253
|
+
allowAnonymous: roleCheckBody.allowAnonymous === true
|
|
1254
|
+
};
|
|
1255
|
+
}
|
|
1256
|
+
async function checkMultiPortalAccessForRolesCheck(ctx, next) {
|
|
1257
|
+
const portalName = getRequestedPortalNameFromHeader(ctx);
|
|
1258
|
+
if (portalName === void 0) {
|
|
1259
|
+
await next();
|
|
1260
|
+
return;
|
|
1261
|
+
}
|
|
1262
|
+
const portal = await ctx.db.getRepository("multiPortals").findOne({
|
|
1263
|
+
filter: {
|
|
1264
|
+
portalName
|
|
1265
|
+
},
|
|
1266
|
+
fields: ["uid", "portalType", "enabled", "uiLayoutUid"]
|
|
1267
|
+
});
|
|
1268
|
+
if (!portal || portal.get("enabled") !== true || !getDefaultMultiPortalType(portal) || !(0, import_constants.isMultiPortalUiLayoutUid)(portal.get("uiLayoutUid"))) {
|
|
1269
|
+
throwPortalAccessGateError(ctx, 404, PORTAL_NOT_FOUND_CODE, "Portal not found");
|
|
1270
|
+
}
|
|
1271
|
+
const portalUid = String(portal.get("uid"));
|
|
1272
|
+
if ((0, import_constants.isDefaultLayoutMultiPortalUid)(portalUid) || await canAccessMultiPortal(ctx, portalUid)) {
|
|
1273
|
+
await next();
|
|
1274
|
+
return;
|
|
1275
|
+
}
|
|
1276
|
+
await next();
|
|
1277
|
+
ctx.status = 403;
|
|
1278
|
+
ctx.withoutDataWrapping = true;
|
|
1279
|
+
ctx.body = {
|
|
1280
|
+
errors: [
|
|
1281
|
+
{
|
|
1282
|
+
code: PORTAL_ACCESS_DENIED_CODE,
|
|
1283
|
+
message: ctx.t("You do not have access to this Portal", { ns: import_constants.NAMESPACE })
|
|
1284
|
+
}
|
|
1285
|
+
],
|
|
1286
|
+
data: pickPortalAccessDeniedData(ctx, portalName)
|
|
1287
|
+
};
|
|
1235
1288
|
}
|
|
1236
1289
|
async function listCurrentRoleAccessibleMultiPortalUids(ctx) {
|
|
1237
1290
|
const currentRoles = getCurrentRoles(ctx);
|
|
@@ -2229,7 +2282,7 @@ function getDefaultMultiPortalType(record) {
|
|
|
2229
2282
|
if (portalType === null || portalType === void 0) {
|
|
2230
2283
|
return "no-code";
|
|
2231
2284
|
}
|
|
2232
|
-
return
|
|
2285
|
+
return isMultiPortalSeedType(portalType) ? portalType : null;
|
|
2233
2286
|
}
|
|
2234
2287
|
function pickDefaultMultiPortalFields(record) {
|
|
2235
2288
|
return {
|
|
@@ -2464,6 +2517,7 @@ async function grantDefaultAccessToNewMultiPortal(db, multiPortal, options) {
|
|
|
2464
2517
|
class PluginMultiPortalServer extends import_server.Plugin {
|
|
2465
2518
|
portalStorageTaskKeys = /* @__PURE__ */ new Set();
|
|
2466
2519
|
portalStorageTasks = /* @__PURE__ */ new Map();
|
|
2520
|
+
deprecatedInitPortalEnvWarningEmitted = false;
|
|
2467
2521
|
async afterAdd() {
|
|
2468
2522
|
}
|
|
2469
2523
|
getAppName() {
|
|
@@ -2534,7 +2588,7 @@ class PluginMultiPortalServer extends import_server.Plugin {
|
|
|
2534
2588
|
}
|
|
2535
2589
|
return Promise.allSettled(tasks).then(() => void 0);
|
|
2536
2590
|
}
|
|
2537
|
-
async schedulePortalTemplateCopyAndBuild(item, template, portalDir) {
|
|
2591
|
+
async schedulePortalTemplateCopyAndBuild(item, template, portalDir, options) {
|
|
2538
2592
|
var _a;
|
|
2539
2593
|
const taskKey = this.getPortalStorageTaskKey(item);
|
|
2540
2594
|
if (this.portalStorageTaskKeys.has(taskKey)) {
|
|
@@ -2561,7 +2615,7 @@ class PluginMultiPortalServer extends import_server.Plugin {
|
|
|
2561
2615
|
}
|
|
2562
2616
|
if (item.enabled) {
|
|
2563
2617
|
this.logPortalBuildHtml(item, "requested", "storage directory was initialized");
|
|
2564
|
-
await buildPortalStorageItem(portalDir, item);
|
|
2618
|
+
await buildPortalStorageItem(portalDir, item, options);
|
|
2565
2619
|
this.logPortalBuildHtml(item, "completed", "yarn build:html finished successfully");
|
|
2566
2620
|
return;
|
|
2567
2621
|
}
|
|
@@ -2587,7 +2641,7 @@ class PluginMultiPortalServer extends import_server.Plugin {
|
|
|
2587
2641
|
const logPath = getPortalStorageLogPath(item);
|
|
2588
2642
|
if (!await pathExists(portalDir)) {
|
|
2589
2643
|
const template = await resolvePortalTemplate(getInitPortalTemplate(), logPath);
|
|
2590
|
-
await this.schedulePortalTemplateCopyAndBuild(item, template, portalDir);
|
|
2644
|
+
await this.schedulePortalTemplateCopyAndBuild(item, template, portalDir, options);
|
|
2591
2645
|
return;
|
|
2592
2646
|
}
|
|
2593
2647
|
if (item.enabled) {
|
|
@@ -2598,7 +2652,7 @@ class PluginMultiPortalServer extends import_server.Plugin {
|
|
|
2598
2652
|
"requested",
|
|
2599
2653
|
options.forceBuild ? "forceBuild is enabled" : "dist/index.html does not exist"
|
|
2600
2654
|
);
|
|
2601
|
-
await buildPortalStorageItem(portalDir, item);
|
|
2655
|
+
await buildPortalStorageItem(portalDir, item, options);
|
|
2602
2656
|
this.logPortalBuildHtml(item, "completed", "yarn build:html finished successfully");
|
|
2603
2657
|
} else {
|
|
2604
2658
|
this.logPortalBuildHtml(item, "skipped", "dist/index.html already exists");
|
|
@@ -2615,7 +2669,7 @@ class PluginMultiPortalServer extends import_server.Plugin {
|
|
|
2615
2669
|
await this.removePortalStorageIndexHtml(previousItem);
|
|
2616
2670
|
}
|
|
2617
2671
|
if (currentItem) {
|
|
2618
|
-
await this.ensurePortalStorageItem(currentItem, { forceBuild });
|
|
2672
|
+
await this.ensurePortalStorageItem(currentItem, { ...options, forceBuild });
|
|
2619
2673
|
}
|
|
2620
2674
|
}, options);
|
|
2621
2675
|
}
|
|
@@ -2915,6 +2969,7 @@ class PluginMultiPortalServer extends import_server.Plugin {
|
|
|
2915
2969
|
}
|
|
2916
2970
|
async beforeLoad() {
|
|
2917
2971
|
this.app.db.registerRepositories({ MultiPortalDesktopRouteRepository });
|
|
2972
|
+
this.app.resourceManager.registerPreActionHandler("roles:check", checkMultiPortalAccessForRolesCheck);
|
|
2918
2973
|
this.app.resourceManager.registerPreActionHandler("desktopRoutes:list", addDesktopRouteEffectiveScopeFilter);
|
|
2919
2974
|
this.app.resourceManager.registerPreActionHandler("desktopRoutes:get", addDesktopRouteEffectiveScopeFilter);
|
|
2920
2975
|
this.app.resourceManager.registerPreActionHandler(
|
|
@@ -3033,6 +3088,14 @@ class PluginMultiPortalServer extends import_server.Plugin {
|
|
|
3033
3088
|
});
|
|
3034
3089
|
}
|
|
3035
3090
|
async install() {
|
|
3091
|
+
var _a, _b;
|
|
3092
|
+
if (!this.deprecatedInitPortalEnvWarningEmitted && hasDeprecatedInitPortalEnv()) {
|
|
3093
|
+
this.deprecatedInitPortalEnvWarningEmitted = true;
|
|
3094
|
+
(_b = (_a = this.app.logger) == null ? void 0 : _a.warn) == null ? void 0 : _b.call(
|
|
3095
|
+
_a,
|
|
3096
|
+
'INIT_PORTAL_TYPE and INIT_PORTAL_NAME are deprecated and no longer affect multi-portal seeding; NocoBase now creates the AI Portal "main" plus the fixed no-code "admin" and "mobile" portals by default.'
|
|
3097
|
+
);
|
|
3098
|
+
}
|
|
3036
3099
|
const version = await this.app.version.get();
|
|
3037
3100
|
if (!version) {
|
|
3038
3101
|
await (0, import_ensureDefaultRoleMultiPortalAccess.ensureDefaultRoleMultiPortalAccess)(this.db);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nocobase/plugin-multi-portal",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.8",
|
|
4
4
|
"main": "dist/server/index.js",
|
|
5
5
|
"nocobase": {
|
|
6
6
|
"supportedVersions": [
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"description.zh-CN": "为 Client V2 提供内置 Portal 注册、入口访问与路由权限管理。",
|
|
14
14
|
"devDependencies": {
|
|
15
15
|
"@ant-design/icons": "5.x",
|
|
16
|
-
"@nocobase/plugin-ui-layout": "3.0.0-alpha.
|
|
16
|
+
"@nocobase/plugin-ui-layout": "3.0.0-alpha.8",
|
|
17
17
|
"ahooks": "3.x",
|
|
18
18
|
"antd": "5.x",
|
|
19
19
|
"react": "^18.2.0",
|
|
@@ -29,5 +29,5 @@
|
|
|
29
29
|
"@nocobase/server": "2.x",
|
|
30
30
|
"@nocobase/test": "2.x"
|
|
31
31
|
},
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "ce017f3deb8b2414c6b13818042c4187270d1d8a"
|
|
33
33
|
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This file is part of the NocoBase (R) project.
|
|
3
|
-
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
-
* Authors: NocoBase Team.
|
|
5
|
-
*
|
|
6
|
-
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
-
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
"use strict";(self.webpackChunk_nocobase_plugin_multi_portal_client_v2=self.webpackChunk_nocobase_plugin_multi_portal_client_v2||[]).push([["354"],{833:function(t,e,r){r.r(e),r.d(e,{MultiPortalMobileChildPageModel:function(){return k},MultiPortalMobileChildPageTabModel:function(){return x},MultiPortalMobileLayoutModel:function(){return _},MultiPortalMobileRootPageModel:function(){return R},MultiPortalMobileRootPageTabModel:function(){return T}});var n=r(485),o=r(69);function u(t,e,r,n,o,u,i){try{var a=t[u](i),l=a.value}catch(t){r(t);return}a.done?e(l):Promise.resolve(l).then(n,o)}function i(t){return function(){var e=this,r=arguments;return new Promise(function(n,o){var i=t.apply(e,r);function a(t){u(i,n,o,a,l,"next",t)}function l(t){u(i,n,o,a,l,"throw",t)}a(void 0)})}}function a(t,e,r){return e=p(e),function(t,e){if(e&&("object"===O(e)||"function"==typeof e))return e;if(void 0===t)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t,P()?Reflect.construct(e,r||[],p(t).constructor):e.apply(t,r))}function l(t,e){if(!(t instanceof e))throw TypeError("Cannot call a class as a function")}function c(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function f(t,e,r){return e&&c(t.prototype,e),r&&c(t,r),t}function s(t,e,r){return(s="u">typeof Reflect&&Reflect.get?Reflect.get:function(t,e,r){var n=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=p(t)););return t}(t,e);if(n){var o=Object.getOwnPropertyDescriptor(n,e);return o.get?o.get.call(r||t):o.value}})(t,e,r||t)}function p(t){return(p=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function b(t,e){if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&d(t,e)}function y(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable}))),n.forEach(function(e){var n;n=r[e],e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n})}return t}function h(t,e){return e=null!=e?e:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):(function(t){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e.push.apply(e,r)}return e})(Object(e)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r))}),t}function v(t,e){if(null==t)return{};var r,n,o,u={};if("u">typeof Reflect&&Reflect.ownKeys){for(o=0,r=Reflect.ownKeys(Object(t));o<r.length;o++)n=r[o],!(e.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(t,n)&&(u[n]=t[n]);return u}if(u=function(t,e){if(null==t)return{};var r,n,o={},u=Object.getOwnPropertyNames(t);for(n=0;n<u.length;n++)r=u[n],!(e.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r]);return o}(t,e),Object.getOwnPropertySymbols)for(o=0,r=Object.getOwnPropertySymbols(t);o<r.length;o++)n=r[o],!(e.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(t,n)&&(u[n]=t[n]);return u}function d(t,e){return(d=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function O(t){return t&&"u">typeof Symbol&&t.constructor===Symbol?"symbol":typeof t}function P(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(P=function(){return!!t})()}function g(t,e){var r,n,o,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),a=Object.defineProperty;return a(i,"next",{value:l(0)}),a(i,"throw",{value:l(1)}),a(i,"return",{value:l(2)}),"function"==typeof Symbol&&a(i,Symbol.iterator,{value:function(){return this}}),i;function l(a){return function(l){var c=[a,l];if(r)throw TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(u=0)),u;)try{if(r=1,n&&(o=2&c[0]?n.return:c[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,c[1])).done)return o;switch(n=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return u.label++,{value:c[1],done:!1};case 5:u.label++,n=c[1],c=[0];continue;case 7:c=u.ops.pop(),u.trys.pop();continue;default:if(!(o=(o=u.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){u=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){u.label=c[1];break}if(6===c[0]&&u.label<o[1]){u.label=o[1],o=c;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(c);break}o[2]&&u.ops.pop(),u.trys.pop();continue}c=e.call(t,u)}catch(t){c=[6,t],n=0}finally{r=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}function j(t){return t&&(void 0===t?"undefined":O(t))==="object"&&!Array.isArray(t)?(t.uiLayouts,t.multiPortals,v(t,["uiLayouts","multiPortals"])):t}function w(t){var e=t.flowEngine.context.api;if(!(!e||(void 0===e?"undefined":O(e))!=="object"||Array.isArray(e))&&"request"in e&&"function"==typeof e.request){var r=new Proxy(e,{get:function(e,r){if("request"===r)return function(r){return e.request(function(t,e){if(!function(t){if(!t||(void 0===t?"undefined":O(t))!=="object"||Array.isArray(t))return!1;var e=t.url;return"string"==typeof e&&e.replace(/^\/+/,"").startsWith("desktopRoutes:")}(e))return e;var r=function(t){var e,r=null==(e=t.context)?void 0:e.layout,n=null==r?void 0:r.uid;if("string"==typeof n&&n.trim())return n}(t);if(!r)return e;var n=e.params&&"object"===O(e.params)&&!Array.isArray(e.params)?e.params:{};n.layout,n.portal;var o=v(n,["layout","portal"]),u=h(y({},e),{params:h(y({},o),{portal:r})});return Object.prototype.hasOwnProperty.call(e,"data")?h(y({},u),{data:j(e.data)}):u}(t,r))};var n=Reflect.get(e,r,e);return"function"==typeof n?n.bind(e):n}});t.context.defineProperty("api",{value:r})}}function M(t,e){var r,n=null==(r=t.props)?void 0:r.route;return h(y({},t),{use:e,props:h(y({},t.props),{route:j(n)})})}function m(t){t.setProps("route",j(t.props.route))}var _=function(t){function e(){return l(this,e),a(this,e,arguments)}return b(e,t),e}(o.MobileLayoutModel),R=function(t){function e(t){l(this,e),w(r=a(this,e,[t]));var r,n=r.createPageTabModelOptions.bind(r);return r.createPageTabModelOptions=function(){return M(n(),"MultiPortalMobileRootPageTabModel")},r}return b(e,t),e}(o.MobileRootPageModel),k=function(t){function e(t){l(this,e),w(r=a(this,e,[t]));var r,n=r.createPageTabModelOptions.bind(r);return r.createPageTabModelOptions=function(){return M(n(),"MultiPortalMobileChildPageTabModel")},r}return b(e,t),e}(o.MobileChildPageModel),T=function(t){function e(t){var r;return l(this,e),w(r=a(this,e,[t])),m(r),r}return b(e,t),f(e,[{key:"save",value:function(){var t=this,r=this;return i(function(){return g(this,function(n){switch(n.label){case 0:return m(this),[4,s(p(e.prototype),"save",t).call(r)];case 1:return n.sent(),m(this),[2]}})}).call(this)}}]),e}(n.RootPageTabModel),x=function(t){function e(t){var r;return l(this,e),w(r=a(this,e,[t])),m(r),r}return b(e,t),f(e,[{key:"save",value:function(){var t=this,r=this;return i(function(){return g(this,function(n){switch(n.label){case 0:return m(this),[4,s(p(e.prototype),"save",t).call(r)];case 1:return n.sent(),m(this),[2]}})}).call(this)}}]),e}(n.ChildPageTabModel)}}]);
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This file is part of the NocoBase (R) project.
|
|
3
|
-
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
-
* Authors: NocoBase Team.
|
|
5
|
-
*
|
|
6
|
-
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
-
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
"use strict";(self.webpackChunk_nocobase_plugin_multi_portal_client_v2=self.webpackChunk_nocobase_plugin_multi_portal_client_v2||[]).push([["556"],{524:function(e,t,r){r.r(t),r.d(t,{createMultiPortal:function(){return ee},default:function(){return eI},deleteMultiPortals:function(){return er},setDefaultMultiPortal:function(){return en},updateMultiPortal:function(){return et}});var n=r(375),a=r(485),o=r(694),l=r(625),i=r(59),u=r(155),c=r.n(u),s=r(624),p=r(337),d=r(143),m=r(756);function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function y(e,t,r,n,a,o,l){try{var i=e[o](l),u=i.value}catch(e){r(e);return}i.done?t(u):Promise.resolve(u).then(n,a)}function b(e){return function(){var t=this,r=arguments;return new Promise(function(n,a){var o=e.apply(t,r);function l(e){y(o,n,a,l,i,"next",e)}function i(e){y(o,n,a,l,i,"throw",e)}l(void 0)})}}function h(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function g(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){h(e,t,r[t])})}return e}function v(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function E(e,t){if(null==e)return{};var r,n,a,o={};if("u">typeof Reflect&&Reflect.ownKeys){for(a=0,r=Reflect.ownKeys(Object(e));a<r.length;a++)n=r[a],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n]);return o}if(o=function(e,t){if(null==e)return{};var r,n,a={},o=Object.getOwnPropertyNames(e);for(n=0;n<o.length;n++)r=o[n],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r]);return a}(e,t),Object.getOwnPropertySymbols)for(a=0,r=Object.getOwnPropertySymbols(e);a<r.length;a++)n=r[a],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n]);return o}function w(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var o=[],l=!0,i=!1;try{for(a=a.call(e);!(l=(r=a.next()).done)&&(o.push(r.value),!t||o.length!==t);l=!0);}catch(e){i=!0,n=e}finally{try{l||null==a.return||a.return()}finally{if(i)throw n}}return o}}(e,t)||S(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function k(e){return e&&"u">typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function S(e,t){if(e){if("string"==typeof e)return f(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return f(e,t)}}function T(e,t){var r,n,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(l,"next",{value:u(0)}),i(l,"throw",{value:u(1)}),i(l,"return",{value:u(2)}),"function"==typeof Symbol&&i(l,Symbol.iterator,{value:function(){return this}}),l;function u(i){return function(u){var c=[i,u];if(r)throw TypeError("Generator is already executing.");for(;l&&(l=0,c[0]&&(o=0)),o;)try{if(r=1,n&&(a=2&c[0]?n.return:c[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,c[1])).done)return a;switch(n=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,n=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],n=0}finally{r=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var R={paddingInline:0},D=c().forwardRef(function(e,t){return c().createElement("div",{ref:t},c().createElement(a.IconPicker,e))});function I(e,t){var r="string"==typeof e.title?e.title.trim():"";return r||(e.type===a.NocoBaseDesktopRouteType.tabs?t("Untitled"):e.schemaUid||t("Untitled"))}function O(e,t){var r,n=null==(r=e.options)?void 0:r[t];return"string"==typeof n&&n.trim()?n.trim():""}function x(e){return O(e,"path")||O(e,"href")||O(e,"url")}function B(e){return e===a.NocoBaseDesktopRouteType.page||e===a.NocoBaseDesktopRouteType.flowPage}function P(e,t){if(void 0!==t){var r=!0,n=!1,a=void 0;try{for(var o,l=e[Symbol.iterator]();!(r=(o=l.next()).done);r=!0){var i,u=o.value;if(u.id===t)return u;var c=P(null!=(i=u.children)?i:[],t);if(c)return c}}catch(e){n=!0,a=e}finally{try{r||null==l.return||l.return()}finally{if(n)throw a}}}}function F(e){return!0!==e.hidden&&e.type!==a.NocoBaseDesktopRouteType.page}function C(e,t){return"".concat(e.replace(/\/+$/,""),"/").concat(t.replace(/^\/+/,""))}function j(e,t,r){if(e.type===a.NocoBaseDesktopRouteType.group||e.type===a.NocoBaseDesktopRouteType.link||!e.schemaUid)return"";if(e.type===a.NocoBaseDesktopRouteType.tabs){var n=P(r,e.parentId);return(null==n?void 0:n.schemaUid)?C(t.routePath,"".concat(n.schemaUid,"/tab/").concat(e.schemaUid)):""}return C(t.routePath,e.schemaUid)}function N(e,t,r){var n=null==(d=e.routePath)?void 0:d.trim(),l=(null!=(s=e.params)?s:[]).filter(function(e){var t,r;return!!(null==e||null==(t=e.name)?void 0:t.trim())||!!(null==e||null==(r=e.value)?void 0:r.trim())}),i=B(e.type),u=e.type===a.NocoBaseDesktopRouteType.tabs,c=v(g({},i||u?{schemaUid:(null==t?void 0:t.schemaUid)||(0,o.randomId)()}:{},u?{tabSchemaName:(null==t?void 0:t.tabSchemaName)||(0,o.randomId)()}:{},i?{enableTabs:!!e.enableTabs}:{}),{hideInMenu:!1===e.showInMenu,icon:e.icon,title:(null!=(p=e.title)?p:"").trim(),type:e.type});if(e.type===a.NocoBaseDesktopRouteType.link){var s,p,d,m,f=null!=(m=null==t?void 0:t.options)?m:{};f.href,f.params,f.path,f.url,c.options=g({},E(f,["href","params","path","url"]),n?h({},(null==r?void 0:r.mobile)?"url":"href",n):{},l.length?{params:l}:{})}return(null==r?void 0:r.withInitialPageTab)&&i?v(g({},c),{menuSchemaUid:(0,o.randomId)(),children:[{type:a.NocoBaseDesktopRouteType.tabs,schemaUid:(0,o.randomId)(),tabSchemaName:(0,o.randomId)(),hidden:!e.enableTabs}]}):c}function A(e){var t=e.type,r=(0,d.kj)();return c().createElement(i.Tag,{color:t===a.NocoBaseDesktopRouteType.flowPage||t===a.NocoBaseDesktopRouteType.page?"purple":t===a.NocoBaseDesktopRouteType.link?"red":t===a.NocoBaseDesktopRouteType.group?"blue":"default"},r(t===a.NocoBaseDesktopRouteType.group?"Group":t===a.NocoBaseDesktopRouteType.page||t===a.NocoBaseDesktopRouteType.flowPage?"Page":t===a.NocoBaseDesktopRouteType.link?"Link":t===a.NocoBaseDesktopRouteType.tabs?"Tab":"Unknown"))}function M(e){var t,r,o=(0,d.kj)(),l=i.theme.useToken().token,s=w(i.Form.useForm(),1)[0],p=w((0,u.useState)(!1),2),m=p[0],y=p[1],h=i.Form.useWatch("type",s),g=null!=(t=null==(r=e.initialRoute)?void 0:r.type)?t:h,v=(0,u.useMemo)(function(){var t,r,n,l,i,u;return t=o,(null==(n=(r={mobile:e.mobile,parentRoute:e.parentRoute}).parentRoute)?void 0:n.type)===a.NocoBaseDesktopRouteType.page||(null==(l=r.parentRoute)?void 0:l.type)===a.NocoBaseDesktopRouteType.flowPage?[{label:t("Tab"),value:a.NocoBaseDesktopRouteType.tabs}]:(null==(i=r.parentRoute)?void 0:i.type)===a.NocoBaseDesktopRouteType.group?[{label:t("Group"),value:a.NocoBaseDesktopRouteType.group},{label:t("Page"),value:a.NocoBaseDesktopRouteType.flowPage},{label:t("Link"),value:a.NocoBaseDesktopRouteType.link}]:((function(e){if(Array.isArray(e))return f(e)})(u=r.mobile?[]:[{label:t("Group"),value:a.NocoBaseDesktopRouteType.group}])||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(u)||S(u)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).concat([{label:t("Page"),value:a.NocoBaseDesktopRouteType.flowPage},{label:t("Link"),value:a.NocoBaseDesktopRouteType.link}])},[e.mobile,e.parentRoute,o]),E=(0,u.useMemo)(function(){var t,r,n,o,l,i,u,c,s;return{enableTabs:!!(null==(t=e.initialRoute)?void 0:t.enableTabs),icon:null==(r=e.initialRoute)?void 0:r.icon,params:e.initialRoute&&Array.isArray(i=null==(l=e.initialRoute.options)?void 0:l.params)?i.reduce(function(e,t){return t&&(void 0===t?"undefined":k(t))==="object"&&e.push({name:"string"==typeof t.name?t.name:"",value:"string"==typeof t.value?t.value:""}),e},[]):[],routePath:e.initialRoute?x(e.initialRoute):"",showInMenu:!e.initialRoute||!e.initialRoute.hideInMenu,title:(null==(n=e.initialRoute)?void 0:n.title)||"",type:(null==(o=e.initialRoute)?void 0:o.type)||((null==(c=(u={mobile:e.mobile,parentRoute:e.parentRoute}).parentRoute)?void 0:c.type)===a.NocoBaseDesktopRouteType.page||(null==(s=u.parentRoute)?void 0:s.type)===a.NocoBaseDesktopRouteType.flowPage?a.NocoBaseDesktopRouteType.tabs:a.NocoBaseDesktopRouteType.flowPage)}},[e.initialRoute,e.mobile,e.parentRoute]),R=(0,u.useMemo)(function(){return g===a.NocoBaseDesktopRouteType.tabs?void 0:[{message:o("Title field is required"),required:!0,whitespace:!0}]},[g,o]),I=(0,u.useCallback)(function(){return b(function(){var t;return T(this,function(r){switch(r.label){case 0:return[4,s.validateFields()];case 1:t=r.sent(),y(!0),r.label=2;case 2:return r.trys.push([2,,4,5]),[4,e.onSubmit(t)];case 3:return r.sent(),[3,5];case 4:return y(!1),[7];case 5:return[2]}})})()},[s,e]);return c().createElement(a.DrawerFormLayout,{cancelText:o("Cancel"),onSubmit:I,submitText:o("Submit"),submitting:m,title:e.title},c().createElement(i.Form,{form:s,initialValues:E,layout:"vertical"},e.initialRoute?c().createElement(c().Fragment,null,c().createElement(i.Form.Item,{hidden:!0,name:"type"},c().createElement(i.Input,null)),c().createElement(i.Form.Item,{label:o("Type")},c().createElement(A,{type:g}))):c().createElement(i.Form.Item,{label:o("Type"),name:"type",rules:[{message:o("The field value is required"),required:!0}]},c().createElement(i.Radio.Group,{options:v})),c().createElement(i.Form.Item,{label:o("Title"),name:"title",rules:R},c().createElement(i.Input,null)),c().createElement(i.Form.Item,{label:o("Icon"),name:"icon",rules:e.mobile?[{message:o("Icon field is required"),required:!0}]:void 0},c().createElement(D,null)),g===a.NocoBaseDesktopRouteType.link?c().createElement(c().Fragment,null,c().createElement(i.Form.Item,{extra:o("Do not concatenate search params in the URL"),label:o("URL"),name:"routePath",rules:[{message:o("URL field is required"),required:!0,whitespace:!0}]},c().createElement(i.Input.TextArea,{autoSize:!0})),c().createElement(i.Form.Item,{label:o("Search parameters")},c().createElement(i.Form.List,{name:"params"},function(e,t){var r=t.add,a=t.remove;return c().createElement(i.Space,{direction:"vertical",size:l.marginXS,style:{width:"100%"}},e.map(function(e){return c().createElement(i.Space.Compact,{block:!0,key:e.key},c().createElement(i.Form.Item,{name:[e.name,"name"],noStyle:!0},c().createElement(i.Input,{placeholder:o("Name")})),c().createElement(i.Form.Item,{name:[e.name,"value"],noStyle:!0},c().createElement(i.Input,{placeholder:o("Value")})),c().createElement(i.Button,{"aria-label":o("Delete"),icon:c().createElement(n.DeleteOutlined,null),onClick:function(){return a(e.name)}}))}),c().createElement(i.Button,{onClick:function(){return r()},type:"dashed"},o("Add parameter")))}))):null,c().createElement(i.Form.Item,{extra:o("If selected, the route will be displayed in the menu."),name:"showInMenu",valuePropName:"checked"},c().createElement(i.Checkbox,null,o("Show in menu"))),B(g)?c().createElement(i.Form.Item,{extra:o("If selected, the page will display Tab pages."),name:"enableTabs",valuePropName:"checked"},c().createElement(i.Checkbox,null,o("Enable page tabs"))):null))}function z(e){var t=(0,d.kj)(),r=w(i.Form.useForm(),1)[0],a=w((0,u.useState)(!1),2),o=a[0],l=a[1];return c().createElement(i.Popover,{content:c().createElement(i.Form,{form:r,layout:"vertical",onFinish:function(t){e.onApply(t),l(!1)},style:{width:260}},c().createElement(i.Form.Item,{label:t("Search routes"),name:"keyword"},c().createElement(i.Input,{allowClear:!0})),c().createElement(i.Space,null,c().createElement(i.Button,{htmlType:"submit",type:"primary"},t("Submit")),c().createElement(i.Button,{onClick:function(){r.resetFields(),e.onApply({}),l(!1)}},t("Cancel")))),onOpenChange:l,open:o,placement:"bottomLeft",trigger:"click"},c().createElement(i.Button,{"aria-label":t("Filter"),icon:c().createElement(n.FilterOutlined,null)},t("Filter")))}function U(e){var t=e.portal,r=(0,o.useFlowContext)(),l=(0,d.kj)(),p=c().useRef(l),f=i.App.useApp(),y=f.message,h=f.modal,S=i.theme.useToken().token,D=w((0,u.useState)([]),2),O=D[0],C=D[1],U=w((0,u.useState)(!1),2),L=U[0],q=U[1],G=w((0,u.useState)({}),2),_=G[0],W=G[1],V=w((0,u.useState)([]),2),X=V[0],H=V[1],$=(0,u.useMemo)(function(){return r.api.resource("desktopRoutes")},[r.api]),K=t.uid,Q=t.uiLayoutUid===s.ig;c().useEffect(function(){p.current=l},[l]);var J=(0,u.useCallback)(function(){return b(function(){var e,t;return T(this,function(n){switch(n.label){case 0:q(!0),n.label=1;case 1:return n.trys.push([1,3,4,5]),[4,r.api.request({url:"/desktopRoutes:list",method:"get",params:{paginate:!1,portal:K,sort:"sort",tree:!0},skipNotify:!0})];case 2:var a;return C(null!=(e=(!(a=null==(t=n.sent())?void 0:t.data)||(void 0===a?"undefined":k(a))!=="object"?{}:{data:Array.isArray(a.data)?a.data:[]}).data)?e:[]),H([]),[3,5];case 3:return n.sent(),y.error(p.current("Failed to load routes")),C([]),[3,5];case 4:return q(!1),[7];case 5:return[2]}})})()},[r.api,y,K]);c().useEffect(function(){J().catch(function(){})},[J]);var Y=(0,u.useCallback)(function(){return b(function(){return T(this,function(e){switch(e.label){case 0:return[4,J()];case 1:return e.sent(),[2]}})})()},[J]),Z=(0,u.useCallback)(function(e){return b(function(){var t,r,n,o,i,u,c,s,p,d,m;return T(this,function(f){switch(f.label){case 0:if(t=e.editingRoute,r=e.parentRoute,n=e.values,(null==t?void 0:t.id)===void 0)return[3,10];return o=B(t.type)&&!!n.enableTabs!==t.enableTabs,[4,$.update({filterByTk:t.id,portal:K,values:N(n,t,{mobile:Q})})];case 1:if(f.sent(),!o)return[3,9];i=!0,u=!1,c=void 0,f.label=2;case 2:var b;f.trys.push([2,7,8,9]),s=(null!=(b=t.children)?b:[]).filter(function(e){return e.type===a.NocoBaseDesktopRouteType.tabs})[Symbol.iterator](),f.label=3;case 3:if(i=(p=s.next()).done)return[3,6];if(void 0===(d=p.value).id)return[3,5];return[4,$.update({filterByTk:d.id,portal:K,values:{hidden:!n.enableTabs}})];case 4:f.sent(),f.label=5;case 5:return i=!0,[3,3];case 6:return[3,9];case 7:return m=f.sent(),u=!0,c=m,[3,9];case 8:try{i||null==s.return||s.return()}finally{if(u)throw c}return[7];case 9:return y.success(l("Updated successfully")),[3,12];case 10:return[4,$.create({portal:K,values:g({},N(n,void 0,{mobile:Q,withInitialPageTab:!0}),(null==r?void 0:r.id)!==void 0?{parentId:r.id}:{})})];case 11:f.sent(),y.success(l("Saved successfully")),f.label=12;case 12:return[4,Y()];case 13:return f.sent(),[2]}})})()},[$,y,Q,K,Y,l]),ee=(0,u.useCallback)(function(e){var t,n,a=e.editingRoute?null!=(t=P(O,e.editingRoute.id))?t:e.editingRoute:null,o=null!=(n=e.parentRoute)?n:null;r.viewer.drawer({width:S.screenSM,closable:!0,content:function(){return c().createElement(M,{initialRoute:a,mobile:Q,onSubmit:function(e){return Z({editingRoute:a,parentRoute:o,values:e})},parentRoute:o,title:a?l("Edit route"):o?l("Add child route"):l("Add new")})}})},[r.viewer,Q,O,Z,l,S.screenSM]),et=(0,u.useCallback)(function(e){return b(function(){return T(this,function(t){switch(t.label){case 0:return[4,$.destroy({filterByTk:e,portal:K})];case 1:return t.sent(),y.success(l("Deleted successfully")),[4,Y()];case 2:return t.sent(),[2]}})})()},[$,y,K,Y,l]),er=(0,u.useMemo)(function(){return X.filter(function(e){return"number"==typeof e||"string"==typeof e})},[X]),en=er.length>0,ea=(0,u.useMemo)(function(){return function e(t){return t.filter(F).map(function(t){var r=t.children,n=E(t,["children"]),a=r?e(r):[];return a.length?v(g({},n),{children:a}):n})}(O)},[O]),eo=(0,u.useMemo)(function(){return function e(t,r,n){var a=r.trim().toLowerCase();return a?t.reduce(function(t,r){var o,l=e(null!=(o=r.children)?o:[],a,n);return(I(r,n).toLowerCase().includes(a)||String(r.schemaUid||"").toLowerCase().includes(a)||String(r.type||"").toLowerCase().includes(a)||x(r).toLowerCase().includes(a)||l.length)&&t.push(v(g({},r),{children:l.length?l:r.children})),t},[]):t}(ea,_.keyword||"",l)},[_.keyword,l,ea]),el=(0,u.useCallback)(function(e){return b(function(){var t,r,n,a,o,i,u;return T(this,function(c){switch(c.label){case 0:t=!0,r=!1,n=void 0,c.label=1;case 1:c.trys.push([1,6,7,8]),a=er[Symbol.iterator](),c.label=2;case 2:if(t=(o=a.next()).done)return[3,5];return i=o.value,[4,$.update({filterByTk:i,portal:K,values:e})];case 3:c.sent(),c.label=4;case 4:return t=!0,[3,2];case 5:return[3,8];case 6:return u=c.sent(),r=!0,n=u,[3,8];case 7:try{t||null==a.return||a.return()}finally{if(r)throw n}return[7];case 8:return y.success(l("Updated successfully")),[4,Y()];case 9:return c.sent(),[2]}})})()},[$,y,K,Y,er,l]),ei=(0,u.useCallback)(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];h.confirm({cancelText:l("Cancel"),content:l("Are you sure you want to delete it?"),okText:l("Delete"),onOk:function(){return b(function(){return T(this,function(t){switch(t.label){case 0:return[4,et(e)];case 1:return t.sent(),[2]}})})()},title:t?l("Delete routes"):l("Delete route")})},[et,h,l]),eu=(0,u.useMemo)(function(){return[{dataIndex:"title",title:l("Title"),width:260,render:function(e,t){return I(t,l)}},{dataIndex:"type",title:l("Type"),width:160,render:function(e){return c().createElement(A,{type:e})}},{dataIndex:"hideInMenu",title:l("Show in menu"),width:140,render:function(e){return e?c().createElement(n.CloseOutlined,{"aria-label":l("Hidden"),style:{color:S.colorError}}):c().createElement(n.CheckOutlined,{"aria-label":l("Shown"),style:{color:S.colorSuccess}})}},{dataIndex:"routePath",title:l("Path"),width:320,render:function(e,r){var n=j(r,t,O);return n?c().createElement(i.Typography.Paragraph,{copyable:!0,ellipsis:!0,style:{marginBottom:0}},n):null}},{dataIndex:"actions",title:l("Actions"),width:260,render:function(e,n){var o=I(n,l),u=j(n,t,O),s=u?(0,m.u)(r.app,u,t.portalType):"";return c().createElement(i.Space,{size:"small"},c().createElement(i.Button,{"aria-label":l("Add child {{route}}",{route:o}),disabled:!(n.type===a.NocoBaseDesktopRouteType.group||(n.type===a.NocoBaseDesktopRouteType.page||n.type===a.NocoBaseDesktopRouteType.flowPage)&&n.enableTabs),onClick:function(){return ee({parentRoute:n})},size:"small",style:R,type:"link"},l("Add child")),c().createElement(i.Button,{"aria-label":l("Edit {{route}}",{route:o}),onClick:function(){return ee({editingRoute:n})},size:"small",style:R,type:"link"},l("Edit")),c().createElement(i.Button,{"aria-label":l("View {{route}}",{route:o}),disabled:!u,href:s||void 0,rel:"noopener noreferrer",size:"small",style:R,target:"_blank",type:"link"},l("View")),c().createElement(i.Button,{"aria-label":l("Delete {{route}}",{route:o}),onClick:function(){return void 0!==n.id&&ei(n.id)},size:"small",style:R,type:"link"},l("Delete")))}}]},[r.app,ei,ee,t,O,l,S.colorError,S.colorSuccess]);return c().createElement(i.Space,{direction:"vertical",size:S.marginSM,style:{width:"100%"}},c().createElement(i.Space,{style:{justifyContent:"space-between",width:"100%"}},c().createElement(z,{onApply:W}),c().createElement(i.Space,null,c().createElement(i.Button,{icon:c().createElement(n.ReloadOutlined,null),loading:L,onClick:J},l("Refresh")),c().createElement(i.Button,{"aria-label":l("Delete"),disabled:!en,icon:c().createElement(n.DeleteOutlined,null),onClick:function(){return ei(er,!0)}},l("Delete")),c().createElement(i.Button,{"aria-label":l("Hide in menu"),disabled:!en,icon:c().createElement(n.EyeInvisibleOutlined,null),onClick:function(){return el({hideInMenu:!0})}},l("Hide in menu")),c().createElement(i.Button,{"aria-label":l("Show in menu"),disabled:!en,icon:c().createElement(n.EyeOutlined,null),onClick:function(){return el({hideInMenu:!1})}},l("Show in menu")),c().createElement(i.Button,{"aria-label":l("Add new"),icon:c().createElement(n.PlusOutlined,null),onClick:function(){return ee({})},type:"primary"},l("Add new")))),c().createElement(a.Table,{columns:eu,dataSource:eo,expandable:{rowExpandable:function(e){var t;return!!(null==(t=e.children)?void 0:t.length)}},loading:L,locale:{emptyText:l("No routes")},pagination:{pageSize:20,total:eo.length},rowKey:function(e){var t;return null!=(t=e.id)?t:String(e.schemaUid)},rowSelection:{onChange:H,selectedRowKeys:X}}))}function L(e){var t=e.portal,r=(0,d.kj)(),n=(0,o.useFlowView)(),a=i.theme.useToken().token;return c().createElement("div",{style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0}},n.Header?c().createElement(n.Header,{title:r("Routes")}):null,c().createElement("div",{style:{flex:1,minHeight:0,overflow:"auto",padding:a.paddingLG}},c().createElement(U,{portal:t})))}function q(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function G(e,t,r,n,a,o,l){try{var i=e[o](l),u=i.value}catch(e){r(e);return}i.done?t(u):Promise.resolve(u).then(n,a)}function _(e){return function(){var t=this,r=arguments;return new Promise(function(n,a){var o=e.apply(t,r);function l(e){G(o,n,a,l,i,"next",e)}function i(e){G(o,n,a,l,i,"throw",e)}l(void 0)})}}function W(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}function V(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function X(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var o=[],l=!0,i=!1;try{for(a=a.call(e);!(l=(r=a.next()).done)&&(o.push(r.value),!t||o.length!==t);l=!0);}catch(e){i=!0,n=e}finally{try{l||null==a.return||a.return()}finally{if(i)throw n}}return o}}(e,t)||K(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function H(e){return function(e){if(Array.isArray(e))return q(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||K(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function $(e){return e&&"u">typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function K(e,t){if(e){if("string"==typeof e)return q(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return q(e,t)}}function Q(e,t){var r,n,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(l,"next",{value:u(0)}),i(l,"throw",{value:u(1)}),i(l,"return",{value:u(2)}),"function"==typeof Symbol&&i(l,Symbol.iterator,{value:function(){return this}}),l;function u(i){return function(u){var c=[i,u];if(r)throw TypeError("Generator is already executing.");for(;l&&(l=0,c[0]&&(o=0)),o;)try{if(r=1,n&&(a=2&c[0]?n.return:c[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,c[1])).done)return a;switch(n=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,n=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],n=0}finally{r=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}function J(e,t){if(e&&(void 0===e?"undefined":$(e))==="object")return e[t]}function Y(e){return"string"==typeof e&&e?e:void 0}function Z(e){var t=J(e,"response"),r=J(t,"data"),n=J(r,"errors");if(Array.isArray(n)){var a=n.map(function(e){return Y(J(e,"message"))}).filter(function(e){return!!e}).join("\n");if(a)return a}return Y(J(J(r,"error"),"message"))||Y(J(r,"message"))||Y(J(e,"message"))}function ee(e){return _(function(){return Q(this,function(t){switch(t.label){case 0:return[4,e.resource.create({values:e.values})];case 1:return t.sent(),e.onSubmitted(),[2]}})})()}function et(e){return _(function(){return Q(this,function(t){switch(t.label){case 0:return[4,e.resource.update({filterByTk:e.filterByTk,values:e.values})];case 1:if(t.sent(),!e.setAsDefault)return[3,3];return[4,e.resource.setDefault({filterByTk:e.filterByTk})];case 2:t.sent(),t.label=3;case 3:return e.onSubmitted(),[2]}})})()}function er(e){return _(function(){return Q(this,function(t){switch(t.label){case 0:return[4,e.resource.destroy({filterByTk:e.filterByTk})];case 1:return t.sent(),e.onDeleted(),[2]}})})()}function en(e){return _(function(){return Q(this,function(t){switch(t.label){case 0:return[4,e.resource.setDefault({filterByTk:e.filterByTk})];case 1:return t.sent(),e.onSubmitted(),[2]}})})()}D.displayName="IconPickerFormControl";var ea="no-code",eo=["no-code","ai"],el="nocobase",ei="main",eu={portalType:ea,uiLayoutUid:s.R$,enabled:!0},ec={alignItems:"flex-start"},es="multi-portal-described-radio",ep="\n.".concat(es," .ant-radio {\n align-self: flex-start;\n margin-top: 3px;\n}\n"),ed=/^[a-z0-9_-]+$/,em=c().forwardRef(function(e,t){return c().createElement("div",{ref:t},c().createElement(a.IconPicker,e))});function ef(e){var t=null==e?void 0:e.trim();if(t&&!ed.test(t))return"Portal name can only contain lowercase letters, numbers, hyphens, and underscores"}function ey(e){return"string"!=typeof e?null:e.trim()||null}function eb(e){var t=ey(e);return t&&eo.some(function(e){return e===t})?t:ea}function eh(e){var t=ey(e);return"nocobase"===t||"git"===t?t:el}function eg(e){var t,r,n,a,o,l,i,u=e.options||{},c=e.cover||null;if("ai"!==eb(e.portalType))return V(W({},u),{cover:c});var s=eh(null!=(t=e.sourceStorage)?t:u.sourceStorage);return"git"!==s?V(W({},u),{cover:c,sourceStorage:s}):V(W({},u),{cover:c,sourceStorage:s,git:V(W({},u.git),{repo:ey(null!=(r=e.gitRepo)?r:null==(o=u.git)?void 0:o.repo)||"",branch:ey(null!=(n=e.gitBranch)?n:null==(l=u.git)?void 0:l.branch)||ei,path:ey(null!=(a=e.gitPath)?a:null==(i=u.git)?void 0:i.path)||""})})}function ev(e){var t,r=function(e){if(e&&(void 0===e?"undefined":$(e))==="object"){var t,r,n,a=eh(e.sourceStorage);return"git"!==a?V(W({},e),{sourceStorage:a}):V(W({},e),{sourceStorage:a,git:V(W({},e.git),{repo:ey(null==(t=e.git)?void 0:t.repo)||"",branch:ey(null==(r=e.git)?void 0:r.branch)||ei,path:ey(null==(n=e.git)?void 0:n.path)||""})})}}(e.options);return W({title:e.title,uid:e.uid,portalType:eb(e.portalType),portalName:e.portalName,routePath:e.routePath,uiLayoutUid:e.uiLayoutUid||"",icon:null!=(t=e.icon)?t:null,enabled:e.enabled},r?{options:r}:{})}function eE(e){var t,r,n,a=ev(e),o=a.options,l=eh(null==o?void 0:o.sourceStorage);return V(W({},a),{sourceStorage:l,gitRepo:"git"===l&&(null==o||null==(t=o.git)?void 0:t.repo)||"",gitBranch:(null==o||null==(r=o.git)?void 0:r.branch)||ei,gitPath:(null==o||null==(n=o.git)?void 0:n.path)||"",cover:(null==o?void 0:o.cover)||null})}em.displayName="IconPickerFormControl";var ew={display:"grid",gap:16,gridTemplateColumns:"repeat(auto-fill, minmax(300px, 1fr))"},ek=[210,145,25,340,265,190,45,300,165,120];function eS(e){var t,r,o,l,u,s=e.href,p=e.openLabel,d=e.record,m=i.theme.useToken().token,f=!(6!==(t=(m.colorBgContainer||"").trim().replace("#","")).length||/[^0-9a-f]/i.test(t))&&(299*parseInt(t.slice(0,2),16)+587*parseInt(t.slice(2,4),16)+114*parseInt(t.slice(4,6),16))/1e3<128,y=(r=d.uid||d.portalName||"",o=ek[function(e){for(var t=0,r=0;r<e.length;r+=1)t=(t<<5)-t+e.charCodeAt(r)|0;return Math.abs(t)}(r)%ek.length],f?"hsl(".concat(o,", 32%, 38%)"):"hsl(".concat(o,", 38%, 46%)")),b=(d.title||d.portalName||"?").trim().charAt(0).toUpperCase(),h=null==(u=d.options)||null==(l=u.cover)?void 0:l.url,g=h?c().createElement("div",{"aria-hidden":!0,style:{background:"".concat(m.colorFillQuaternary,' center / cover no-repeat url("').concat(h,'")'),height:"100%",width:"100%"}}):c().createElement("div",{"aria-hidden":!0,style:{alignItems:"center",background:y,display:"flex",height:"100%",justifyContent:"center",overflow:"hidden",width:"100%"}},d.icon?c().createElement(a.Icon,{type:d.icon,style:{color:"#fff",fontSize:24}}):c().createElement("span",{style:{color:"#fff",fontSize:22,fontWeight:600,lineHeight:1}},b)),v=c().createElement("div",{className:"nb-portal-cover",style:{borderRadius:m.borderRadiusLG,height:56,overflow:"hidden",width:56}},g,c().createElement("button",{type:"button","aria-label":p,className:"nb-portal-cover-overlay",onClick:function(){return window.open(s,"_blank","noopener,noreferrer")}},c().createElement(n.ExportOutlined,{style:{fontSize:20}})));return c().createElement("div",{style:{flexShrink:0}},v)}function eT(e){var t=e.title,r=(0,u.useRef)(null),n=X((0,u.useState)(!1),2),a=n[0],o=n[1],l=(0,u.useCallback)(function(e){var t=r.current;o(!!(e&&t&&t.scrollWidth>t.clientWidth))},[]);return c().createElement("span",{style:{display:"block",minWidth:0,position:"relative"}},c().createElement(i.Typography.Text,{ref:r,strong:!0,ellipsis:!0,style:{display:"block",minWidth:0}},t),c().createElement(i.Tooltip,{title:t,open:a,onOpenChange:l},c().createElement("span",{"data-testid":"portal-title-tooltip-trigger",style:{inset:0,position:"absolute"}})))}function eR(e){var t=e.record,r=e.onSubmitted,n=(0,d.kj)(),l=(0,o.useFlowContext)(),s=i.theme.useToken().token,p=i.App.useApp().notification,m=X(i.Form.useForm(),1)[0],f=X((0,u.useState)(!1),2),y=f[0],b=f[1],h=(0,u.useMemo)(function(){return l.api.resource("multiPortals")},[l.api]),g=(0,u.useMemo)(function(){return eE(t)},[t]),v=(0,u.useCallback)(function(){return _(function(){var e,a,o;return Q(this,function(l){switch(l.label){case 0:return[4,m.validateFields()];case 1:l.sent(),e=m.getFieldsValue(!0),(a=ev(t)).options=eg(V(W({},eE(t),e),{portalType:"ai"})),b(!0),l.label=2;case 2:return l.trys.push([2,4,5,6]),[4,et({resource:h,filterByTk:t.uid,values:a,onSubmitted:r})];case 3:return l.sent(),[3,6];case 4:throw o=l.sent(),p.error({message:Z(o)||n("Failed to save portal"),role:"alert"}),o;case 5:return b(!1),[7];case 6:return[2]}})})()},[m,p,r,t,h,n]);return c().createElement(a.DrawerFormLayout,{title:n("Source management"),onSubmit:v,submitting:y,submitText:n("Submit"),cancelText:n("Cancel")},c().createElement("style",null,ep),c().createElement(i.Form,{form:m,layout:"vertical",initialValues:g},c().createElement(i.Form.Item,{name:"sourceStorage",label:n("Source management"),extra:n("Select how the application source code is stored and managed."),htmlFor:"multi-portal-source-storage-nocobase",rules:[{required:!0,message:n("The field value is required")}]},c().createElement(i.Radio.Group,{name:"multi-portal-source-storage",style:{width:"100%"}},c().createElement(i.Space,{direction:"vertical",style:{width:"100%"}},c().createElement(i.Radio,{className:es,id:"multi-portal-source-storage-nocobase",style:ec,value:"nocobase"},c().createElement("span",null,n("NocoBase")),c().createElement("div",{style:{color:s.colorTextDescription,fontSize:s.fontSizeSM}},n("Store and manage application source code in NocoBase."))),c().createElement(i.Radio,{className:es,style:ec,value:"git"},c().createElement("span",null,n("Git")),c().createElement("div",{style:{color:s.colorTextDescription,fontSize:s.fontSizeSM}},n("Store and manage application source code in a Git repository.")))))),c().createElement(i.Form.Item,{noStyle:!0,shouldUpdate:function(e,t){return e.sourceStorage!==t.sourceStorage}},function(e){return"git"===(0,e.getFieldValue)("sourceStorage")?c().createElement(c().Fragment,null,c().createElement(i.Form.Item,{name:"gitRepo",label:n("Git repository URL"),rules:[{required:!0,whitespace:!0,message:n("The field value is required")}]},c().createElement(i.Input,{placeholder:"git@github.com:nocobase/customer-portal.git",allowClear:!0})),c().createElement(i.Space,{size:s.marginSM,style:{display:"flex"},align:"start"},c().createElement(i.Form.Item,{name:"gitBranch",label:n("Git branch"),style:{flex:1}},c().createElement(i.Input,{placeholder:ei})),c().createElement(i.Form.Item,{name:"gitPath",label:n("Git path"),style:{flex:1},extra:n("Directory inside the Git repository for this portal. Leave empty for the root.")},c().createElement(i.Input,{placeholder:"/"})))):null})))}function eD(e){var t=e.record,r=e.onSubmitted,n=(0,d.kj)(),l=(0,o.useFlowContext)(),p=i.theme.useToken().token,m=i.App.useApp().notification,f=X(i.Form.useForm(),1)[0],y=X((0,u.useState)(!1),2),b=y[0],h=y[1],g=(0,u.useMemo)(function(){return l.api.resource("multiPortals")},[l.api]),v=(0,u.useMemo)(function(){return[{value:s.R$,label:n("Desktop")},{value:s.ig,label:n("Mobile")}]},[n]),E=i.Form.useWatch("enabled",f),w=(0,u.useMemo)(function(){return t?V(W({},eE(t)),{setAsDefault:!1}):V(W({},eu),{portalType:"ai",uid:"portal-".concat((0,o.randomId)()),sourceStorage:el,gitBranch:ei,gitPath:"",cover:null})},[t]),k=i.Form.useWatch("portalType",f),S=null!=k?k:w.portalType,T="ai"===S?"/x/":"/v/",R=(0,s.Xc)(null==t?void 0:t.uid)||!!t,D=(0,u.useCallback)(function(e){t||"ai"!==e.portalType||f.setFieldsValue({uiLayoutUid:s.R$})},[f,t]),I=(0,u.useCallback)(function(){return _(function(){var e,a,o;return Q(this,function(l){switch(l.label){case 0:return[4,f.validateFields()];case 1:l.sent(),a=function(e){var t,r=e.portalName.trim(),n=ef(r);if(n)throw Error(n);e.cover,e.gitBranch,e.gitPath,e.gitRepo,e.setAsDefault,e.sourceStorage;var a=function(e,t){if(null==e)return{};var r,n,a,o={};if("u">typeof Reflect&&Reflect.ownKeys){for(a=0,r=Reflect.ownKeys(Object(e));a<r.length;a++)n=r[a],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n]);return o}if(o=function(e,t){if(null==e)return{};var r,n,a={},o=Object.getOwnPropertyNames(e);for(n=0;n<o.length;n++)r=o[n],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r]);return a}(e,t),Object.getOwnPropertySymbols)for(a=0,r=Object.getOwnPropertySymbols(e);a<r.length;a++)n=r[a],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n]);return o}(e,["cover","gitBranch","gitPath","gitRepo","setAsDefault","sourceStorage"]),o=eb(e.portalType);return V(W({},a),{title:e.title.trim(),uid:e.uid.trim(),portalType:o,portalName:r,routePath:"/".concat(r),icon:"string"!=typeof(t=e.icon)?null:t.trim()||null,options:eg(e)})}(e=f.getFieldsValue(!0)),h(!0),l.label=2;case 2:if(l.trys.push([2,7,8,9]),!t)return[3,4];return[4,et({resource:g,filterByTk:t.uid,values:a,setAsDefault:!0!==t.isDefault&&e.enabled&&!0===e.setAsDefault,onSubmitted:r})];case 3:return l.sent(),[3,6];case 4:return[4,ee({resource:g,values:a,onSubmitted:r})];case 5:l.sent(),l.label=6;case 6:return[3,9];case 7:throw o=l.sent(),m.error({message:Z(o)||n("Failed to save portal"),role:"alert"}),o;case 8:return h(!1),[7];case 9:return[2]}})})()},[f,m,r,t,g,n]);return c().createElement(a.DrawerFormLayout,{title:t?n("Edit portal"):n("Add portal"),onSubmit:I,submitting:b,submitText:n("Submit"),cancelText:n("Cancel")},c().createElement("style",null,ep),c().createElement(i.Form,{form:f,layout:"vertical",initialValues:w,onValuesChange:D},c().createElement(i.Form.Item,{name:"uid",hidden:!0,rules:[{required:!0,whitespace:!0,message:n("The field value is required")}]},c().createElement(i.Input,null)),c().createElement(i.Form.Item,{name:"portalName",label:n("Portal name"),extra:c().createElement(c().Fragment,null,c().createElement("div",null,n("Used to generate the portal URL.")),c().createElement("div",null,n("Example:")," ","".concat(T,"<name>"))),rules:[{required:!0,whitespace:!0,message:n("The field value is required")},{validator:function(e,t){var r=ef(t);return r?Promise.reject(Error(n(r))):Promise.resolve()}}]},c().createElement(i.Input,{disabled:R,addonBefore:T})),c().createElement(i.Form.Item,{name:"title",label:n("Title"),extra:n("Display name of the portal."),rules:[{required:!0,whitespace:!0,message:n("Title field is required")}]},c().createElement(i.Input,null)),c().createElement(i.Form.Item,{name:"portalType",label:n("Development mode"),htmlFor:"multi-portal-portal-type-ai",rules:[{required:!0,message:n("The field value is required")}]},c().createElement(i.Radio.Group,{name:"multi-portal-portal-type",disabled:R,style:{width:"100%"}},c().createElement(i.Space,{direction:"vertical",style:{width:"100%"}},c().createElement(i.Radio,{className:es,id:"multi-portal-portal-type-ai",style:ec,value:"ai"},c().createElement("span",null,n("AI mode")),c().createElement("div",{style:{color:p.colorTextDescription,fontSize:p.fontSizeSM}},n("Build complete business systems with AI agents and code.")),c().createElement("div",{style:{color:p.colorTextDescription,fontSize:p.fontSizeSM}},n("Users describe requirements in natural language, and AI agents create and modify applications, including interfaces, data models, business logic, roles and permissions, and more."))),c().createElement(i.Radio,{className:es,style:ec,value:"no-code"},c().createElement("span",null,n("No-code mode")),c().createElement("div",{style:{color:p.colorTextDescription,fontSize:p.fontSizeSM}},n("Build business systems through visual configuration.")),c().createElement("div",{style:{color:p.colorTextDescription,fontSize:p.fontSizeSM}},n("Users create applications through drag-and-drop configuration. AI can assist with creating, adjusting, and optimizing configurations such as data models, interfaces, workflows, and more.")))))),c().createElement(i.Divider,{style:{marginBlock:p.marginSM}}),c().createElement(i.Form.Item,{name:"uiLayoutUid",label:n("Device"),extra:n("No-code portals render with the components of this device; AI portals use it for grouping."),hidden:"ai"===S,dependencies:["portalType"],rules:[{validator:function(e,t){return(0,s.Cn)(t)?Promise.resolve():Promise.reject(Error(n("The field value is required")))}}]},c().createElement(i.Select,{disabled:!!t,options:v,showSearch:!0,optionFilterProp:"label"})),c().createElement(i.Form.Item,{name:"cover",label:n("Cover"),extra:n("Shown on the portal card.")},c().createElement(a.AttachmentUpload,{accept:"image/*",preview:{width:160,height:90,fit:"cover"},uploadText:n("Upload cover")})),c().createElement(i.Form.Item,{name:"icon",label:n("Icon"),extra:n("Used as the cover placeholder when no cover is uploaded.")},c().createElement(em,null)),c().createElement(i.Form.Item,{name:"enabled",label:n("Enabled"),valuePropName:"checked",extra:n("When disabled, this portal will not be registered or accessible.")},c().createElement(i.Switch,null)),t?c().createElement(i.Form.Item,{label:n("Default portal"),extra:n("Users enter this portal by default when they open the application without specifying one.")},t.isDefault?c().createElement(i.Switch,{"aria-label":n("Default portal"),checked:!0,disabled:!0}):c().createElement(i.Form.Item,{name:"setAsDefault",noStyle:!0,valuePropName:"checked"},c().createElement(i.Switch,{"aria-label":n("Default portal"),disabled:!1===E}))):null))}var eI=function(){var e,t=(0,d.kj)(),r=(0,o.useFlowContext)(),a=i.theme.useToken().token,f=i.App.useApp(),y=f.message,b=f.modal,h=X((0,u.useState)([]),2),g=h[0],v=h[1],E=X((0,u.useState)(),2),w=E[0],k=E[1],S=(0,u.useMemo)(function(){return r.api.resource("multiPortals")},[r.api]),T=(0,l.useRequest)(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;return _(function(){var t,r;return Q(this,function(n){switch(n.label){case 0:return[4,S.list({page:e,pageSize:20,sort:["createdAt"]})];case 1:return[2,null!=(t=null==(r=n.sent())?void 0:r.data)?t:{data:[]}]}})})()}),R=T.data,D=T.loading,I=(0,u.useMemo)(function(){return Array.isArray(null==R?void 0:R.data)?R.data:[]},[null==R?void 0:R.data]),O=(0,u.useMemo)(function(){var e=[{key:"ai",title:"AI",records:[]},{key:"no-code",title:"No-code",records:[]}],t=!0,r=!1,n=void 0;try{for(var a,o=I[Symbol.iterator]();!(t=(a=o.next()).done);t=!0){var l=a.value;e[+(eb(l.portalType)===ea)].records.push(l)}}catch(e){r=!0,n=e}finally{try{t||null==o.return||o.return()}finally{if(r)throw n}}return e.filter(function(e){return e.records.length>0})},[I]),x=(0,u.useMemo)(function(){return"\n.nb-portal-card {\n transition: box-shadow ".concat(a.motionDurationMid,";\n}\n.nb-portal-card:hover {\n box-shadow: ").concat(a.boxShadowSecondary,";\n}\n.nb-portal-cover {\n position: relative;\n}\n.nb-portal-cover-overlay {\n align-items: center;\n background: rgba(0, 0, 0, 0.45);\n border: 0;\n color: #fff;\n cursor: pointer;\n display: flex;\n inset: 0;\n justify-content: center;\n opacity: 0;\n padding: 0;\n position: absolute;\n transition: opacity ").concat(a.motionDurationMid,";\n}\n.nb-portal-card:hover .nb-portal-cover-overlay,\n.nb-portal-cover-overlay:focus-visible {\n opacity: 1;\n}\n")},[a]),B=(0,u.useMemo)(function(){var e,t,r,n=null==R?void 0:R.meta;return!!n&&{total:null!=(e=n.count)?e:I.length,pageSize:null!=(t=n.pageSize)?t:20,current:null!=(r=n.page)?r:1}},[null==R?void 0:R.meta,I.length]),P=(0,u.useCallback)(function(){var e,t;T.run(null!=(e=null==R||null==(t=R.meta)?void 0:t.page)?e:1)},[T,null==R||null==(e=R.meta)?void 0:e.page]),F=(0,u.useCallback)(function(){(0,p.G)(r.app).reload(r.api).catch(function(e){console.error("[NocoBase] Failed to refresh portal entry actions.",e)})},[r.api,r.app]),C=(0,u.useCallback)(function(){P(),F()},[F,P]),j=(0,u.useCallback)(function(e){r.viewer.drawer({width:a.screenMD,closable:!0,content:function(){return c().createElement(eD,{record:e,onSubmitted:C})}})},[r.viewer,C,a.screenMD]),N=(0,u.useCallback)(function(e){r.viewer.drawer({width:"80%",closable:!0,content:function(){return c().createElement(L,{portal:e})}})},[r.viewer]),A=(0,u.useCallback)(function(e){r.viewer.drawer({width:a.screenSM,closable:!0,content:function(){return c().createElement(eR,{record:e,onSubmitted:C})}})},[r.viewer,C,a.screenSM]),M=(0,u.useCallback)(function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};b.confirm({title:t("Delete portal"),content:c().createElement(c().Fragment,null,c().createElement("div",null,r.isBatch?t("Are you sure you want to delete the selected Multi-portal records?"):t("Are you sure you want to delete it?")),c().createElement("div",null,t("The corresponding portal directory will also be deleted."))),onOk:function(){return _(function(){return Q(this,function(t){switch(t.label){case 0:return[4,er({resource:S,filterByTk:e,onDeleted:C})];case 1:return t.sent(),[2]}})})()}})},[b,C,S,t]),z=(0,u.useCallback)(function(e,r){return _(function(){var n;return Q(this,function(a){switch(a.label){case 0:v(function(t){return t.includes(e.uid)?t:H(t).concat([e.uid])}),a.label=1;case 1:return a.trys.push([1,,3,4]),n=ev(e),delete n.uiLayoutUid,n.enabled=r,[4,et({resource:S,filterByTk:e.uid,values:n,onSubmitted:C})];case 2:return a.sent(),y.success(t("Updated successfully")),[3,4];case 3:return v(function(t){return t.filter(function(t){return t!==e.uid})}),[7];case 4:return[2]}})})()},[y,C,S,t]),U=(0,l.useMemoizedFn)(function(e){return _(function(){return Q(this,function(r){switch(r.label){case 0:k(e.uid),r.label=1;case 1:return r.trys.push([1,,3,4]),[4,en({resource:S,filterByTk:e.uid,onSubmitted:C})];case 2:return r.sent(),y.success(t("Default portal updated successfully")),[3,4];case 3:return k(void 0),[7];case 4:return[2]}})})()}),q=(0,u.useCallback)(function(e){var o,l=(0,m.u)(r.app,e.routePath,e.portalType),u=eb(e.portalType)===ea,p=!u||!e.enabled,d=(o=e.uiLayoutUid,o===s.R$?t("Desktop"):o===s.ig?t("Mobile"):o||""),f=c().createElement(i.Card,{className:"nb-portal-card",size:"small",styles:{body:{padding:a.paddingLG}},style:{cursor:"pointer",opacity:e.enabled?1:.6,overflow:"visible"},onClick:function(e){var t=e.target;!e.currentTarget.contains(t)||t.closest("button, a, .ant-switch")||window.open(l,"_blank","noopener,noreferrer")}},c().createElement(i.Flex,{align:"center",gap:a.margin},c().createElement(eS,{record:e,href:l,openLabel:t("View")}),c().createElement("div",{style:{flex:1,minWidth:0}},c().createElement(i.Flex,{align:"center",gap:a.marginXXS},c().createElement(eT,{title:e.title}),u&&d?c().createElement(i.Tooltip,{title:d},e.uiLayoutUid===s.ig?c().createElement(n.MobileOutlined,{"aria-label":d,style:{color:a.colorTextDescription,fontSize:a.fontSizeSM}}):c().createElement(n.DesktopOutlined,{"aria-label":d,style:{color:a.colorTextDescription,fontSize:a.fontSizeSM}})):null),c().createElement(i.Flex,{align:"center",gap:a.marginXXS,style:{minWidth:0}},c().createElement(i.Typography.Link,{href:l,target:"_blank",rel:"noopener noreferrer",ellipsis:!0,type:"secondary",style:{fontSize:a.fontSizeSM,minWidth:0}},l))),c().createElement(i.Flex,{align:"center",gap:a.marginXS,style:{alignSelf:"flex-start",flexShrink:0}},c().createElement(i.Tooltip,{title:e.isDefault?t("The default portal cannot be disabled"):""},c().createElement(i.Switch,{"aria-label":t("Enabled"),checked:e.enabled,disabled:!0===e.isDefault,loading:g.includes(e.uid)||w===e.uid,size:"small",onChange:function(t){return _(function(){return Q(this,function(r){switch(r.label){case 0:return[4,z(e,t)];case 1:return r.sent(),[2]}})})()}})),c().createElement(i.Dropdown,{trigger:["click"],menu:{items:[{key:"edit",icon:c().createElement(n.EditOutlined,null),label:t("Edit")}].concat(H(u?[]:[{key:"sourceManagement",icon:c().createElement(n.CodeOutlined,null),label:t("Source management")}]),H(p?[]:[{key:"routes",icon:c().createElement(n.ApartmentOutlined,null),label:t("Routes")}]),H(!0!==e.isDefault&&e.enabled?[{key:"default",icon:c().createElement(n.StarOutlined,null),label:t("Set as default")}]:[]),[{type:"divider"},{key:"delete",icon:c().createElement(n.DeleteOutlined,null),label:t("Delete")}]),onClick:function(t){var r=t.key;"edit"===r?j(e):"sourceManagement"===r?A(e):"routes"===r?N(e):"default"===r?U(e):"delete"===r&&M(e.uid)}}},c().createElement(i.Button,{"aria-label":t("More"),type:"text",size:"small",icon:c().createElement(n.EllipsisOutlined,null)})))));return c().createElement("div",{key:e.uid},e.isDefault?c().createElement(i.Badge.Ribbon,{text:t("Default"),color:a.colorWarning,placement:"start"},f):f)},[r.app,M,U,z,j,N,A,t,a.fontSizeSM,a.colorTextDescription,a.colorWarning,a.margin,a.marginXS,a.marginXXS,a.paddingLG,w,g]);return c().createElement("div",null,c().createElement("style",null,x),c().createElement(i.Flex,{justify:"space-between",align:"center",wrap:!0,gap:a.marginSM,style:{marginBottom:a.marginMD}},c().createElement(i.Typography.Text,{type:"secondary"},t("Each portal is a standalone front end with its own routes and menus.")),c().createElement(i.Space,null,c().createElement(i.Button,{icon:c().createElement(n.ReloadOutlined,null),onClick:C},t("Refresh")),c().createElement(i.Button,{type:"primary",icon:c().createElement(n.PlusOutlined,null),onClick:function(){return j()}},t("Add portal")))),c().createElement(i.Spin,{spinning:D},0!==I.length||D?O.map(function(e){return c().createElement("div",{key:e.key,style:{marginBottom:a.marginXL}},c().createElement(i.Flex,{align:"center",gap:a.marginXS,style:{marginBottom:a.marginSM}},c().createElement(i.Typography.Text,{strong:!0},t(e.title)),c().createElement(i.Typography.Text,{type:"secondary",style:{fontSize:a.fontSizeSM}},e.records.length),c().createElement("div",{style:{background:a.colorSplit,flex:1,height:a.lineWidth}})),c().createElement("div",{style:ew},e.records.map(q)))}):c().createElement(i.Empty,{description:t("No portals yet"),style:{padding:a.paddingXL}},c().createElement(i.Button,{type:"primary",icon:c().createElement(n.PlusOutlined,null),onClick:function(){return j()}},t("Add portal")))),B?c().createElement(i.Flex,{justify:"flex-end",style:{marginTop:a.marginMD}},c().createElement(i.Pagination,{current:B.current,pageSize:B.pageSize,total:B.total,showSizeChanger:!1,onChange:function(e){return T.run(e)}})):null)}}}]);
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This file is part of the NocoBase (R) project.
|
|
3
|
-
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
-
* Authors: NocoBase Team.
|
|
5
|
-
*
|
|
6
|
-
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
-
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
"use strict";(self.webpackChunk_nocobase_plugin_multi_portal_client_v2=self.webpackChunk_nocobase_plugin_multi_portal_client_v2||[]).push([["778"],{177:function(e,t,r){r.r(t),r.d(t,{default:function(){return x}});var n=r(485),u=r(694),a=r(625),o=r(59),i=r(155),l=r.n(i),c=r(624),s=r(143);function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function f(e,t,r,n,u,a,o){try{var i=e[a](o),l=i.value}catch(e){r(e);return}i.done?t(l):Promise.resolve(l).then(n,u)}function p(e){return function(){var t=this,r=arguments;return new Promise(function(n,u){var a=e.apply(t,r);function o(e){f(a,n,u,o,i,"next",e)}function i(e){f(a,n,u,o,i,"throw",e)}o(void 0)})}}function h(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}function m(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function y(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,u=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=u){var a=[],o=!0,i=!1;try{for(u=u.call(e);!(o=(r=u.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==u.return||u.return()}finally{if(i)throw n}}return a}}(e,t)||g(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(e){return function(e){if(Array.isArray(e))return d(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||g(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function b(e){return e&&"u">typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function g(e,t){if(e){if("string"==typeof e)return d(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return d(e,t)}}function w(e,t){var r,n,u,a={label:0,sent:function(){if(1&u[0])throw u[1];return u[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:l(0)}),i(o,"throw",{value:l(1)}),i(o,"return",{value:l(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function l(i){return function(l){var c=[i,l];if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,c[0]&&(a=0)),a;)try{if(r=1,n&&(u=2&c[0]?n.return:c[0]?n.throw||((u=n.return)&&u.call(n),0):n.next)&&!(u=u.call(n,c[1])).done)return u;switch(n=0,u&&(c=[2&c[0],u.value]),c[0]){case 0:case 1:u=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,n=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(u=(u=a.trys).length>0&&u[u.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!u||c[1]>u[0]&&c[1]<u[3])){a.label=c[1];break}if(6===c[0]&&a.label<u[1]){a.label=u[1],u=c;break}if(u&&a.label<u[2]){a.label=u[2],a.ops.push(c);break}u[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],n=0}finally{r=u=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}function S(e){return e&&(void 0===e?"undefined":b(e))==="object"?{data:Array.isArray(e.data)?e.data:[]}:{}}function M(e){return Array.isArray(e)?e.flatMap(function(e){return[e.id].concat(v(M(e.children)))}):[]}function k(e){var t=new Set;return e.filter(function(e){return!t.has(e)&&(t.add(e),!0)})}function A(e,t){return"string"!=typeof e?t("Unnamed"):t(e)||t("Unnamed")}function P(e){return(0,c.Xc)(null==e?void 0:e.uid)}function I(e){return(null==e?void 0:e.portalType)==="no-code"}function x(e){var t,r=(0,u.useFlowContext)(),c=(0,s.kj)(),d=o.theme.useToken().token,f=e.activeRole,g="multi-portals"===e.activeKey,x=y((0,i.useState)([]),2),j=x[0],O=x[1],E=y((0,i.useState)(),2),C=E[0],R=E[1],N=y((0,i.useState)([]),2),T=N[0],_=N[1],D=y((0,i.useState)(),2),F=D[0],z=D[1],U=y((0,i.useState)(!1),2),q=U[0],K=U[1],L=y((0,i.useState)(""),2),B=L[0],G=L[1],X=(0,i.useMemo)(function(){return f?r.api.resource("roles.multiPortals",f.name):void 0},[r.api,f]),$=(0,i.useMemo)(function(){return r.api.resource("rolesMultiPortalDesktopRoutes")},[r.api]),H=(0,i.useMemo)(function(){return r.api.resource("rolesMultiPortalRoutePolicies")},[r.api]),J=(0,i.useMemo)(function(){return f?r.api.resource("roles.desktopRoutes",f.name):void 0},[r.api,f]),Q=(0,a.useRequest)(function(){return p(function(){var e,t;return w(this,function(n){switch(n.label){case 0:return[4,r.api.request({url:"multiPortals:listEnabled",method:"get",skipNotify:!0})];case 1:return[2,null!=(e=S(null==(t=n.sent())?void 0:t.data).data)?e:[]]}})})()},{ready:g,refreshDeps:[g]}),V=(0,a.useRequest)(function(){return p(function(){var e,t;return w(this,function(r){switch(r.label){case 0:if(!X)return[2,[]];return[4,X.list({paginate:!1})];case 1:return[2,(null!=(e=S(null==(t=r.sent())?void 0:t.data).data)?e:[]).map(function(e){return e.uid}).filter(function(e){return"string"==typeof e&&!!e})]}})})()},{ready:g&&!!X,refreshDeps:[g,null==f?void 0:f.name],onSuccess:function(e){O(e)}}),W=(0,i.useMemo)(function(){var e;return null==(e=Q.data)?void 0:e.find(function(e){return e.uid===C})},[Q.data,C]),Y=W?A(W.title,c):"",Z=P(W),ee=I(W),et=W?c("Configure routes permissions for {{portal}}",{portal:Y}):c("Routes permissions"),er=(0,a.useRequest)(function(){return p(function(){var e,t;return w(this,function(n){switch(n.label){case 0:if(!C||!ee)return[2,[]];return[4,r.api.request({url:"desktopRoutes:listRolePermissionTargets",method:"get",params:{portal:C},skipNotify:!0})];case 1:var u;return[2,null!=(e=(!(u=null==(t=n.sent())?void 0:t.data)||(void 0===u?"undefined":b(u))!=="object"?{}:{data:Array.isArray(u.data)?u.data:[]}).data)?e:[]]}})})()},{ready:g&&!!C&&ee,refreshDeps:[g,C,ee]}),en=(0,i.useMemo)(function(){return function e(t,r){return Array.isArray(t)?t.map(function(t){var n,u,a=e(t.children,t.id);return{id:t.id,title:t.title,hidden:t.hidden,routePath:"string"==typeof(u=null==(n=t.options)?void 0:n.path)&&u.trim()?u.trim():void 0,parentId:r,children:a.length?a:void 0}}):[]}(er.data)},[er.data]),eu=(0,i.useMemo)(function(){return M(en)},[en]),ea=(0,i.useMemo)(function(){return function e(t){return t.flatMap(function(t){var r;return[t].concat(v(e(null!=(r=t.children)?r:[])))})}(en)},[en]),eo=(0,i.useMemo)(function(){return new Map(ea.map(function(e){return[e.id,e]}))},[ea]),ei=(0,i.useMemo)(function(){return function e(t,r,n){var u=r.trim().toLowerCase();return u?t.reduce(function(t,r){var a,o,i,l=e(null!=(a=r.children)?a:[],u,n),c=A(r.title,n).toLowerCase(),s=null!=(o=null==(i=r.routePath)?void 0:i.toLowerCase())?o:"";return(c.includes(u)||s.includes(u)||l.length)&&t.push(m(h({},r),{children:l.length?l:void 0})),t},[]):t}(function e(t){return t.reduce(function(t,r){if(r.hidden)return t;var n,u=e(null!=(n=r.children)?n:[]);return t.push(m(h({},r),{children:u.length?u:void 0})),t},[])}(en),B,c)},[en,B,c]),el=(0,i.useMemo)(function(){return M(ei)},[ei]),ec=(0,i.useMemo)(function(){return function e(t,r){return Array.isArray(t)?k(t.flatMap(function(t){var n,u=null!=(n=r.get(t.id))?n:t;return[t.id].concat(v(M(u.children)),v(e(t.children,r)))})):[]}(ei,eo)},[eo,ei]),es=(0,i.useMemo)(function(){var e=new Set(T);return el.filter(function(t){return e.has(t)}).length},[T,el]),ed=er.error?c("Failed to load routes"):B.trim()?c("No matching routes"):c("No routes"),ef=(0,a.useRequest)(function(){return p(function(){var e,t;return w(this,function(r){var n,u;switch(r.label){case 0:if(!f||!C||!ee)return[2,[]];if(!Z)return[3,2];if(!J)return[2,[]];return[4,J.list({paginate:!1,filter:{id:eu}})];case 1:return[2,(n=null==(e=r.sent())?void 0:e.data)&&(void 0===n?"undefined":b(n))==="object"&&Array.isArray(n.data)?n.data.map(function(e){return e.id}).filter(function(e){return"number"==typeof e}):[]];case 2:return[4,$.list({paginate:!1,filter:{roleName:f.name,multiPortalUid:C}})];case 3:return[2,(!(u=null==(t=r.sent())?void 0:t.data)||(void 0===u?"undefined":b(u))!=="object"?[]:Array.isArray(u.data)?u.data:[]).map(function(e){return e.desktopRouteId}).filter(function(e){return"number"==typeof e})]}})})()},{ready:g&&!!f&&!!C&&ee,refreshDeps:[g,eu,null==f?void 0:f.name,ee,C,Z],onSuccess:function(e){_(e)}}),ep=(0,a.useRequest)(function(){return p(function(){var e;return w(this,function(t){switch(t.label){case 0:if(!f||!C||Z||!ee)return[2,void 0];return[4,H.list({paginate:!1,filter:{roleName:f.name,multiPortalUid:C}})];case 1:return[2,function(e){if(e&&(void 0===e?"undefined":b(e))==="object")return Array.isArray(e.data)?e.data[0]:void 0}(null==(e=t.sent())?void 0:e.data)]}})})()},{ready:g&&!!f&&!!C&&ee&&!Z,refreshDeps:[g,null==f?void 0:f.name,ee,C,Z],onSuccess:function(e){z(e),K(!!(null==e?void 0:e.allowNewMenu))}});(0,i.useEffect)(function(){R(void 0),_([]),z(void 0),K(!1),G("")},[null==f?void 0:f.name]),(0,i.useEffect)(function(){_([]),z(void 0),K(!1),G("")},[C]);var eh=(0,a.useMemoizedFn)(function(e){return p(function(){var t;return w(this,function(n){switch(n.label){case 0:var u,a;if(!X)return[2];u=new Set(j),a=new Set(e),t={add:e.filter(function(e){return!u.has(e)}),remove:j.filter(function(e){return!a.has(e)})},n.label=1;case 1:if(n.trys.push([1,7,,9]),!t.remove.length)return[3,3];return[4,X.remove({values:t.remove})];case 2:n.sent(),n.label=3;case 3:if(!t.add.length)return[3,5];return[4,X.add({values:t.add})];case 4:n.sent(),n.label=5;case 5:return[4,V.refreshAsync()];case 6:return n.sent(),O(e),r.message.success(c("Saved successfully")),[3,9];case 7:return n.sent(),[4,V.refreshAsync().catch(function(){})];case 8:return n.sent(),[3,9];case 9:return[2]}})})()}),em=(0,a.useMemoizedFn)(function(e){return p(function(){return w(this,function(t){switch(t.label){case 0:return[4,eh(j.includes(e.uid)?j.filter(function(t){return t!==e.uid}):v(j).concat([e.uid]))];case 1:return t.sent(),[2]}})})()}),ey=(0,a.useMemoizedFn)(function(t){return p(function(){var n;return w(this,function(u){switch(u.label){case 0:if(!f)return[2];u.label=1;case 1:return u.trys.push([1,3,,4]),[4,r.api.resource("roles").update({filterByTk:f.name,values:t})];case 2:return u.sent(),[3,4];case 3:return u.sent(),[2];case 4:return null==(n=e.onRoleChange)||n.call(e,h({},f,t)),r.message.success(c("Saved successfully")),[2]}})})()}),ev=(0,i.useMemo)(function(){return[{dataIndex:"title",title:c("Portal"),render:function(e){return A(e,c)}},{dataIndex:"accessible",title:c("Allow access"),render:function(e,t){if(P(t))return l().createElement(o.Typography.Text,{type:"secondary"},c("Managed by layout permissions"));var r=A(t.title,c);return l().createElement(o.Checkbox,{"aria-label":c("Allow access to {{portal}}",{portal:r}),checked:j.includes(t.uid),onChange:function(){return em(t)}})}},{dataIndex:"routePermissions",title:c("Routes permissions"),render:function(e,t){if(!I(t))return l().createElement(o.Typography.Text,{type:"secondary"},"-");var r=A(t.title,c);return l().createElement(o.Button,{"aria-label":c("Configure routes permissions for {{portal}}",{portal:r}),type:"link",onClick:function(){return R(t.uid)}},c("Configure"))}}]},[j,c,em]),eb=(0,a.useMemoizedFn)(function(e){return p(function(){var t,n,u,a,o,i,l,s;return w(this,function(d){switch(d.label){case 0:var p,h,m,y,b;if(!f||!C||!ee)return[2];h=new Set((p={currentRouteIds:eu,nextSelectedIds:e,selectedIds:T}).currentRouteIds),m=new Set(p.selectedIds.filter(function(e){return h.has(e)})),y=new Set(p.nextSelectedIds.filter(function(e){return h.has(e)})),t={add:(b=k(v(p.currentRouteIds).concat(v(p.selectedIds),v(p.nextSelectedIds)))).filter(function(e){return h.has(e)&&y.has(e)&&!m.has(e)}),remove:b.filter(function(e){return h.has(e)&&m.has(e)&&!y.has(e)})},d.label=1;case 1:if(d.trys.push([1,18,,20]),!(Z&&J))return[3,6];if(!t.remove.length)return[3,3];return[4,J.remove({values:t.remove})];case 2:d.sent(),d.label=3;case 3:if(!t.add.length)return[3,5];return[4,J.add({values:t.add})];case 4:d.sent(),d.label=5;case 5:return[3,8];case 6:if(!t.remove.length)return[3,8];return[4,$.destroy({filter:{roleName:f.name,multiPortalUid:C,desktopRouteId:t.remove}})];case 7:d.sent(),d.label=8;case 8:if(Z)return[3,16];n=!0,u=!1,a=void 0,d.label=9;case 9:d.trys.push([9,14,15,16]),o=t.add[Symbol.iterator](),d.label=10;case 10:if(n=(i=o.next()).done)return[3,13];return l=i.value,[4,$.create({values:{roleName:f.name,multiPortalUid:C,desktopRouteId:l}})];case 11:d.sent(),d.label=12;case 12:return n=!0,[3,10];case 13:return[3,16];case 14:return s=d.sent(),u=!0,a=s,[3,16];case 15:try{n||null==o.return||o.return()}finally{if(u)throw a}return[7];case 16:return[4,ef.refreshAsync()];case 17:return d.sent(),_(e),r.message.success(c("Saved successfully")),[3,20];case 18:return d.sent(),[4,ef.refreshAsync().catch(function(){})];case 19:return d.sent(),[3,20];case 20:return[2]}})})()}),eg=(0,a.useMemoizedFn)(function(e){return p(function(){return w(this,function(t){switch(t.label){case 0:if(!f||!C)return[2];if(!Z)return[3,2];return[4,ey({allowNewMenu:e})];case 1:return t.sent(),[2];case 2:if(t.trys.push([2,8,,10]),!F)return[3,4];return[4,H.update({filter:{roleName:f.name,multiPortalUid:C},values:{allowNewMenu:e}})];case 3:return t.sent(),[3,6];case 4:return[4,H.create({values:{roleName:f.name,multiPortalUid:C,allowNewMenu:e}})];case 5:t.sent(),t.label=6;case 6:return[4,ep.refreshAsync()];case 7:return t.sent(),K(e),r.message.success(c("Saved successfully")),[3,10];case 8:return t.sent(),[4,ep.refreshAsync().catch(function(){})];case 9:return t.sent(),[3,10];case 10:return[2]}})})()}),ew=(0,a.useMemoizedFn)(function(){return p(function(){var e,t;return w(this,function(r){switch(r.label){case 0:return e=new Set(T),t=new Set(el),[4,eb(el.length&&el.every(function(t){return e.has(t)})?T.filter(function(e){return!t.has(e)&&!ec.includes(e)}):k(v(T).concat(v(ec))))];case 1:return r.sent(),[2]}})})()}),eS=(0,a.useMemoizedFn)(function(e){return p(function(){var t,r,n,u,a,o,i;return w(this,function(l){switch(l.label){case 0:return r=T.includes(e.id),n=M((null!=(t=eo.get(e.id))?t:e).children),u=r?T.filter(function(t){return t!==e.id&&!n.includes(t)}):k(v(T).concat([e.id],v(n))),e.parentId&&(i=null==(o=eo.get(e.parentId))||null==(a=o.children)?void 0:a.some(function(e){return u.includes(e.id)}),r&&!i&&(u=u.filter(function(t){return t!==e.parentId})),r||u.includes(e.parentId)||u.push(e.parentId)),[4,eb(u)];case 1:return l.sent(),[2]}})})()}),eM=(0,i.useMemo)(function(){return[{dataIndex:"title",title:c("Route name"),render:function(e){return A(e,c)}},{dataIndex:"accessible",title:l().createElement(o.Checkbox,{checked:!!el.length&&es===el.length,disabled:!el.length,indeterminate:es>0&&es<el.length,onChange:ew},c("Allow access")),render:function(e,t){var r=A(t.title,c);return l().createElement(o.Checkbox,{"aria-label":c("Allow access to {{route}}",{route:r}),checked:T.includes(t.id),onChange:function(){return eS(t)}})}}]},[T,ew,c,eS,el.length,es]);return f?l().createElement(l().Fragment,null,l().createElement(o.Space,{direction:"vertical",size:d.marginSM,style:{width:"100%"}},l().createElement(o.Typography.Text,{strong:!0},c("Portals")),l().createElement(o.Checkbox,{checked:!!f.allowNewMultiPortal,onChange:function(e){ey({allowNewMultiPortal:e.target.checked})}},c("New portals are allowed to be accessed by default")),l().createElement(n.Table,{rowKey:"uid",loading:Q.loading||V.loading,pagination:!1,columns:ev,dataSource:null!=(t=Q.data)?t:[],locale:{emptyText:Q.error?c("Failed to load portals"):c("No portals")}})),l().createElement(o.Drawer,{title:et,"aria-label":et,width:d.screenLG,open:g&&!!W,onClose:function(){return R(void 0)}},W&&ee?l().createElement(o.Space,{direction:"vertical",size:d.marginSM,style:{width:"100%"}},l().createElement(o.Checkbox,{checked:Z?!!f.allowNewMenu:q,onChange:function(e){return eg(e.target.checked)}},c("New routes are allowed to be accessed by default")),l().createElement(o.Input.Search,{allowClear:!0,"aria-label":c("Search routes"),placeholder:c("Search routes"),value:B,onChange:function(e){return G(e.target.value)}}),l().createElement(n.Table,{rowKey:"id",loading:er.loading||ef.loading||!Z&&ep.loading,pagination:!1,expandable:{defaultExpandAllRows:!1,expandedRowKeys:B.trim()?el:void 0},columns:eM,dataSource:ei,locale:{emptyText:ed}})):null)):l().createElement(o.Typography.Text,{type:"secondary"},c("Select a role to configure permissions"))}}}]);
|