@nocobase/plugin-multi-portal 2.2.0-alpha.12 → 2.4.0-alpha.2

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.
Files changed (32) hide show
  1. package/README.md +7 -5
  2. package/dist/client-v2/354.87f18462949b5c23.js +10 -0
  3. package/dist/client-v2/499.245037eea4cc7266.js +10 -0
  4. package/dist/client-v2/556.443e73c9ca4c18b9.js +10 -0
  5. package/dist/client-v2/778.affaa69b23857ef2.js +10 -0
  6. package/dist/client-v2/993.7a1cc7aa6cec0160.js +10 -0
  7. package/dist/client-v2/PortalAccessBoundary.d.ts +49 -0
  8. package/dist/client-v2/RootLanding.d.ts +4 -5
  9. package/dist/client-v2/index.js +1 -1
  10. package/dist/client-v2/interceptor.d.ts +13 -0
  11. package/dist/client-v2/layoutRegistration.d.ts +3 -6
  12. package/dist/client-v2/models/MultiPortalLayoutModels.d.ts +14 -0
  13. package/dist/client-v2/models/MultiPortalMobilePageModels.d.ts +2 -0
  14. package/dist/client-v2/pages/MultiPortalsPage.d.ts +10 -27
  15. package/dist/client-v2/portalAccess.d.ts +73 -0
  16. package/dist/client-v2/routeUrl.d.ts +1 -0
  17. package/dist/constants.d.ts +8 -0
  18. package/dist/constants.js +30 -2
  19. package/dist/externalVersion.js +9 -8
  20. package/dist/locale/en-US.json +45 -14
  21. package/dist/locale/zh-CN.json +43 -12
  22. package/dist/node_modules/tar/package.json +1 -1
  23. package/dist/server/collections/multiPortals.js +12 -11
  24. package/dist/server/plugin.d.ts +6 -4
  25. package/dist/server/plugin.js +487 -312
  26. package/dist/swagger/index.d.ts +152 -0
  27. package/dist/swagger/index.js +142 -0
  28. package/package.json +3 -3
  29. package/dist/client-v2/354.7be267ae5d61a878.js +0 -10
  30. package/dist/client-v2/499.ef2ff0c022687485.js +0 -10
  31. package/dist/client-v2/556.5faf86d4f8faef40.js +0 -10
  32. package/dist/client-v2/778.c98e7ec542d931fe.js +0 -10
package/README.md CHANGED
@@ -1,14 +1,16 @@
1
1
  # @nocobase/plugin-multi-portal
2
2
 
3
3
  `@nocobase/plugin-multi-portal` is the built-in Portal registration and
4
- permission layer built on top of `@nocobase/plugin-ui-layout`. A Portal selects
5
- an enabled UI Layout and provides a concrete application entry point.
4
+ permission layer built on top of `@nocobase/plugin-ui-layout`. A Portal stores
5
+ its device type in `uiLayoutUid`: `admin-layout-model` means Desktop and
6
+ `mobile-layout-model` means Mobile. Portal availability depends on the Portal's
7
+ own `enabled` state, not on a matching UI Layout record.
6
8
 
7
9
  For Client V2, enabled No-code Portals are the only source of registered Portal
8
10
  routes. Fresh applications use Portal-scoped entry and route permissions.
9
- Portals created while upgrading an existing application continue to use the
10
- backing UI Layout's route ownership and role permissions, so Client V1 and
11
- Client V2 share the same route tree without copying ACL data.
11
+ The fixed Admin and Mobile Portals created while upgrading an existing
12
+ application continue to use UI Layout route ownership and role permissions, so
13
+ Client V1 and Client V2 share the same route tree without copying ACL data.
12
14
 
13
15
  UI Layout remains the layout and route-model base, and Client V1 keeps its
14
16
  existing UI Layout registration behavior. AI Portals remain separate `/x`
@@ -0,0 +1,10 @@
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 E},MultiPortalMobileChildPageTabModel:function(){return A},MultiPortalMobileLayoutModel:function(){return T},MultiPortalMobileRootPageModel:function(){return x},MultiPortalMobileRootPageTabModel:function(){return S}});var n=r(485),o=r(69),u=r(155),i=r.n(u),a=r(344);function l(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 c(t){return function(){var e=this,r=arguments;return new Promise(function(n,o){var u=t.apply(e,r);function i(t){l(u,n,o,i,a,"next",t)}function a(t){l(u,n,o,i,a,"throw",t)}i(void 0)})}}function f(t,e,r){return e=d(e),function(t,e){if(e&&("object"===j(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,w()?Reflect.construct(e,r||[],d(t).constructor):e.apply(t,r))}function s(t,e){if(!(t instanceof e))throw TypeError("Cannot call a class as a function")}function p(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 b(t,e,r){return e&&p(t.prototype,e),r&&p(t,r),t}function y(t,e,r){return(y="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=d(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 d(t){return(d=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function h(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&&P(t,e)}function v(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 O(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 g(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 P(t,e){return(P=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function j(t){return t&&"u">typeof Symbol&&t.constructor===Symbol?"symbol":typeof t}function w(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(w=function(){return!!t})()}function m(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 M(t){return t&&(void 0===t?"undefined":j(t))==="object"&&!Array.isArray(t)?(t.uiLayouts,t.multiPortals,g(t,["uiLayouts","multiPortals"])):t}function _(t){var e=t.flowEngine.context.api;if(!(!e||(void 0===e?"undefined":j(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":j(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"===j(e.params)&&!Array.isArray(e.params)?e.params:{};n.layout,n.portal;var o=g(n,["layout","portal"]),u=O(v({},e),{params:O(v({},o),{portal:r})});return Object.prototype.hasOwnProperty.call(e,"data")?O(v({},u),{data:M(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 R(t,e){var r,n=null==(r=t.props)?void 0:r.route;return O(v({},t),{use:e,props:O(v({},t.props),{route:M(n)})})}function k(t){t.setProps("route",M(t.props.route))}var T=function(t){function e(){return s(this,e),f(this,e,arguments)}return h(e,t),b(e,[{key:"render",value:function(){var t=this;return i().createElement(a.g_,{portalUid:this.layout.uid,renderAllowed:function(){return y(d(e.prototype),"render",t).call(t)}})}}]),e}(o.MobileLayoutModel),x=function(t){function e(t){s(this,e),_(r=f(this,e,[t]));var r,n=r.createPageTabModelOptions.bind(r);return r.createPageTabModelOptions=function(){return R(n(),"MultiPortalMobileRootPageTabModel")},r}return h(e,t),e}(o.MobileRootPageModel),E=function(t){function e(t){s(this,e),_(r=f(this,e,[t]));var r,n=r.createPageTabModelOptions.bind(r);return r.createPageTabModelOptions=function(){return R(n(),"MultiPortalMobileChildPageTabModel")},r}return h(e,t),e}(o.MobileChildPageModel),S=function(t){function e(t){var r;return s(this,e),_(r=f(this,e,[t])),k(r),r}return h(e,t),b(e,[{key:"save",value:function(){var t=this,r=this;return c(function(){return m(this,function(n){switch(n.label){case 0:return k(this),[4,y(d(e.prototype),"save",t).call(r)];case 1:return n.sent(),k(this),[2]}})}).call(this)}}]),e}(n.RootPageTabModel),A=function(t){function e(t){var r;return s(this,e),_(r=f(this,e,[t])),k(r),r}return h(e,t),b(e,[{key:"save",value:function(){var t=this,r=this;return c(function(){return m(this,function(n){switch(n.label){case 0:return k(this),[4,y(d(e.prototype),"save",t).call(r)];case 1:return n.sent(),k(this),[2]}})}).call(this)}}]),e}(n.ChildPageTabModel)}}]);
@@ -0,0 +1,10 @@
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([["499"],{918:function(t,e,n){n.r(e),n.d(e,{PortalEntryActionModel:function(){return $}});var r=n(485),i=n(694),o=n(143),a=n(337),l=n(756);function u(t){var e=null==t?void 0:t.trim();return e&&"/"!==e?"/".concat(e.replace(/^\/+/,"")):"/"}function c(t){var e=u(t).replace(/\/+$/,"");return""===e||"/"===e?"":e}function s(t,e){var n=c(t),r=u(e);return!n||r===n||r.startsWith("".concat(n,"/"))?r:"".concat(n).concat(r)}function p(t){return/^[a-z][a-z\d+\-.]*:\/\//i.test(t)||t.startsWith("//")}function f(t){var e=u(t);return[(0,r.getModernClientPrefix)(),"v","x"].some(function(t){return e===u(t)})}function y(t,e){var n=u(t),r=c(e);if(r){if(n===r)return"/";if(n.startsWith("".concat(r,"/")))return n.slice(r.length)||"/"}}function h(t,e,n){var r=e.trim();if(p(r))return r;var i=(0,l.u)(t,"/",n);if(f(r))return b(i,r);var o=u(r);if(void 0!==y(o,i))return o;var a="ai"===n?"no-code":"ai",c=y(o,(0,l.u)(t,"/",a));return void 0!==c?b(i,c):(0,l.u)(t,o,n)}function v(t){return c((function(t){var e,n,i,o;return"function"==typeof(null==t?void 0:t.getPublicPath)?c((0,r.getV2EffectiveBasePath)({getPublicPath:t.getPublicPath,router:{getBasename:function(){var e,n,r;return(null==(n=t.router)||null==(e=n.getBasename)?void 0:e.call(n))||(null==(r=t.router)?void 0:r.basename)}}})):c((null==t||null==(n=t.router)||null==(e=n.getBasename)?void 0:e.call(n))||(null==t||null==(i=t.router)?void 0:i.basename)||(null==t||null==(o=t.getPublicPath)?void 0:o.call(t)))})(t).replace(/\/(?:apps|_app)\/[^/]+$/,"")||"")}function b(t,e){return"".concat(t.replace(/\/+$/,"")).concat(u(e))}function d(t,e){return h({router:{basename:s(v(t),"/apps/".concat(e.appName))}},e.routePath,e.portalType)}function P(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function m(t,e,n,r,i,o,a){try{var l=t[o](a),u=l.value}catch(t){n(t);return}l.done?e(u):Promise.resolve(u).then(r,i)}function g(t){return function(){var e=this,n=arguments;return new Promise(function(r,i){var o=t.apply(e,n);function a(t){m(o,r,i,a,l,"next",t)}function l(t){m(o,r,i,a,l,"throw",t)}a(void 0)})}}function A(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function k(t,e,n){return(k="u">typeof Reflect&&Reflect.get?Reflect.get:function(t,e,n){var r=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=T(t)););return t}(t,e);if(r){var i=Object.getOwnPropertyDescriptor(r,e);return i.get?i.get.call(n||t):i.value}})(t,e,n||t)}function T(t){return(T=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function E(t,e){return(E=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function O(t){return function(t){if(Array.isArray(t))return P(t)}(t)||function(t){if("u">typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t){if(t){if("string"==typeof t)return P(t,void 0);var e=Object.prototype.toString.call(t).slice(8,-1);if("Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e)return Array.from(e);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return P(t,void 0)}}(t)||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 w(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(w=function(){return!!t})()}function _(t,e){var n,r,i,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),l=Object.defineProperty;return l(a,"next",{value:u(0)}),l(a,"throw",{value:u(1)}),l(a,"return",{value:u(2)}),"function"==typeof Symbol&&l(a,Symbol.iterator,{value:function(){return this}}),a;function u(l){return function(u){var c=[l,u];if(n)throw TypeError("Generator is already executing.");for(;a&&(a=0,c[0]&&(o=0)),o;)try{if(n=1,r&&(i=2&c[0]?r.return:c[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,c[1])).done)return i;switch(r=0,i&&(c=[2&c[0],i.value]),c[0]){case 0:case 1:i=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(i=(i=o.trys).length>0&&i[i.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!i||c[1]>i[0]&&c[1]<i[3])){o.label=c[1];break}if(6===c[0]&&o.label<i[1]){o.label=i[1],i=c;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(c);break}i[2]&&o.ops.pop(),o.trys.pop();continue}c=e.call(t,o)}catch(t){c=[6,t],r=0}finally{n=i=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var j="PartitionOutlined",R="buttonSettings",S="general";function x(t){return(null==t?void 0:t.title)||(null==t?void 0:t.routePath)}function D(t,e,n){if(t)return"main"===t.appName?(null==n?void 0:n("Main application"))||"Main":(null==e?void 0:e.title)||(null==e?void 0:e.name)||t.appName}function M(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:x(t),i=D(t,e,n);return i&&r?"".concat(i," / ").concat(r):r}function N(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:x(t),i=D(t,e,n);return i&&r?"".concat(i," / ").concat(r):r}function I(t){return t.entryPortalTitle||x(t.entryPortal)}function C(t,e){return t.entryPortalTargetTitle||N(t.entryPortal,t.entryPortalApp,e)||I(t)}function U(t,e){if(t)return e.portals.find(function(e){return t.appName===e.appName&&(!!t.uid&&!!e.uid&&t.uid===e.uid||t.routePath===e.routePath)})}function B(t){return O(new Set(t.filter(function(t){return!!t})))}function q(t,e,n){var r=x(t);return t&&r&&e.portals.some(function(e){return e.appName===t.appName&&x(e)===r&&e.layout!==t.layout})?"".concat(r," (").concat(n("mobile"===t.layout?"Mobile":"Desktop"),")"):r}var $=function(t){var e;if("function"!=typeof t&&null!==t)throw TypeError("Super expression must either be null or a function");function n(){var t,e,r;if(!(this instanceof n))throw TypeError("Cannot call a class as a function");return e=n,r=arguments,e=T(e),A(t=function(t,e){var n;if(e&&("object"==((n=e)&&"u">typeof Symbol&&n.constructor===Symbol?"symbol":typeof n)||"function"==typeof e))return e;if(void 0===t)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(this,w()?Reflect.construct(e,r||[],T(this).constructor):e.apply(this,r)),"entryActionAvailability","available"),A(t,"availabilityRequest",void 0),A(t,"disposeAppPortalsReaction",void 0),A(t,"defaultProps",{type:"default",title:(0,o.MZ)("Portal"),icon:j}),A(t,"enableEditType",!1),A(t,"enableEditDanger",!1),A(t,"enableEditTitle",!0),A(t,"enableEditIconOnly",!1),t}return n.prototype=Object.create(t&&t.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),t&&E(n,t),e=[{key:"onInit",value:function(t){k(T(n.prototype),"onInit",this).call(this,t),(0,i.define)(this,{entryActionAvailability:i.observable.ref}),this.syncEntryTitle(),this.checkEntryPortalAvailability()}},{key:"afterAddAsSubModel",value:function(){var t=this,e=this;return g(function(){return _(this,function(r){switch(r.label){case 0:return[4,k(T(n.prototype),"afterAddAsSubModel",t).call(e)];case 1:return r.sent(),this.syncEntryTitle(),[4,this.checkEntryPortalAvailability()];case 2:return r.sent(),[2]}})}).call(this)}},{key:"onMount",value:function(){var t=this;if(k(T(n.prototype),"onMount",this).call(this),!this.disposeAppPortalsReaction){var e=this.context.app;if(e){var r=(0,a.G)(e);this.disposeAppPortalsReaction=(0,i.reaction)(function(){return r.revision},function(){t.checkEntryPortalAvailability()})}}}},{key:"onUnmount",value:function(){var t;k(T(n.prototype),"onUnmount",this).call(this),null==(t=this.disposeAppPortalsReaction)||t.call(this),this.disposeAppPortalsReaction=void 0}},{key:"setProps",value:function(t,e){"string"==typeof t?k(T(n.prototype),"setProps",this).call(this,t,e):k(T(n.prototype),"setProps",this).call(this,t),this.syncEntryTitle()}},{key:"getTitle",value:function(){return k(T(n.prototype),"getTitle",this).call(this)||I(this.props)}},{key:"getTitleFieldDescription",value:function(){var t,e,n,r,i=(n=C(t=this.props,this.t),r=null==(e=t.entryPortal)?void 0:e.routePath,n&&r?"".concat(n," (").concat(r,")"):n||r);return i?"".concat(this.context.t("Target portal",(0,o.Dj)()),": ").concat(i):void 0}},{key:"isEntryActionAvailable",value:function(){return"available"===this.entryActionAvailability}},{key:"getEntryActionUnavailableMessage",value:function(){if("unavailable"===this.entryActionAvailability)return this.context.t("This entry is currently unavailable. Please check the application status.",(0,o.Dj)())}},{key:"isDefaultTitle",value:function(t){return"string"==typeof t&&[this.defaultProps.title,this.context.t("Portal",(0,o.Dj)()),"Portal"].filter(Boolean).includes(t)}},{key:"isDefaultIcon",value:function(t){return"string"==typeof t&&t===j}},{key:"isAutoTitle",value:function(t,e){return"string"==typeof t&&e.includes(t)}},{key:"syncEntryTitle",value:function(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],r=I(this.props),i=B([x(this.props.entryPortal),this.props.entryPortalTitle,C(this.props,this.t)].concat(O(e)));r&&(!this.props.title||this.isDefaultTitle(this.props.title)||this.isAutoTitle(this.props.title,i))&&k(T(n.prototype),"setProps",this).call(this,"title",r);var o=(null==(t=this.props.entryPortal)?void 0:t.icon)||j;o&&(!this.props.icon||this.isDefaultIcon(this.props.icon))&&k(T(n.prototype),"setProps",this).call(this,"icon",o),r&&this.syncTitleStepParams(r,o,i)}},{key:"syncTitleStepParams",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],r=this.getStepParams(R,S)||{},i={};(!r.title||this.isDefaultTitle(r.title)||this.isAutoTitle(r.title,n))&&(i.title=t),e&&(!r.icon||this.isDefaultIcon(r.icon))&&(i.icon=e),Object.keys(i).length&&this.setStepParams(R,S,i)}},{key:"onClick",value:function(){var t=this.props.entryPortal;if(t&&!this.hidden&&"available"===this.entryActionAvailability){var e=this.context.app,n=e?(0,a.G)(e).payload:void 0,r=n&&U(t,n)||t,i=(null==n?void 0:n.apps.find(function(t){return t.name===r.appName}))||this.props.entryPortalApp,o=function(t,e,n){if("main"===e.appName)return a=e.routePath,l=e.portalType,p(c=a.trim())?c:h({router:{basename:v(t)}},c,l);var r=u(e.routePath),i=(null==n?void 0:n.ssoEnabled)===!0,o=e.appName===((null==t?void 0:t.name)||"main");if(null==n?void 0:n.cname){var a,l,c,y,P=e.routePath.trim();if(p(P))return P;var m=(y=n.cname,/^https?:\/\//i.test(y)||y.startsWith("//")?y:"//".concat(y)),g=r;return("ai"===e.portalType?g=d(t,e):f(r)&&(g=h(void 0,r,e.portalType)),i)?"".concat(m.replace(/\/+$/,""),"/app-sso?redirect=").concat(encodeURIComponent(g)):b(m,g)}if(o&&!i)return h(t,e.routePath,e.portalType);if(!i)return d(t,e);var A="/apps/".concat(e.appName,"/app-sso?redirect=").concat(encodeURIComponent(r));return(null==t?void 0:t.getRouteUrl)?t.getRouteUrl(A):s(v(t),A)}(e,r,i);window.open(o,"_blank","noopener,noreferrer")}}},{key:"t",get:function(){var t=this;return function(e){return String(t.context.t(e,(0,o.Dj)()))}}},{key:"setEntryActionAvailability",value:function(t){this.entryActionAvailability!==t&&(this.entryActionAvailability=t)}},{key:"getAvailabilityForExistingPortal",value:function(t,e){var n,r,i,o,a=(n=t.appName,r=this.props.entryPortalApp,e.apps.find(function(t){return t.name===n})||((null==r?void 0:r.name)===n?r:void 0));return!(o=!(i=null==a?void 0:a.status)?[]:"string"==typeof i?[i]:Object.values(i).filter(function(t){return"string"==typeof t})).length||o.includes("running")?"available":"unavailable"}},{key:"syncCurrentPortal",value:function(t,e){var r=this.props.entryPortal,i=this.props.entryPortalApp,o=I(this.props),a=C(this.props,this.t),l=q(r,e,this.t),u=M(r,i,this.t,l),c=e.apps.find(function(e){return e.name===t.appName})||i,s=q(t,e,this.t),p=e.apps.length>0||B(e.portals.map(function(t){return t.appName})).length>1||o===u?M(t,c,this.t,s):s,f=N(t,c,this.t,s);k(T(n.prototype),"setProps",this).call(this,{entryPortal:t,entryPortalApp:c,entryPortalTitle:p,entryPortalTargetTitle:f}),this.syncEntryTitle(B([o,a,u,x(r)]))}},{key:"checkEntryPortalAvailability",value:function(){var t=this;return this.availabilityRequest||(this.availabilityRequest=this.loadEntryPortalAvailability().finally(function(){t.availabilityRequest=void 0})),this.availabilityRequest}},{key:"loadEntryPortalAvailability",value:function(){return g(function(){var t,e,n,r;return _(this,function(i){switch(i.label){case 0:if(t=this.props.entryPortal,e=this.context.app,!t||!e)return[2];i.label=1;case 1:return i.trys.push([1,3,,4]),[4,(0,a.G)(e).load()];case 2:return n=i.sent(),(r=U(t,n))?(this.setEntryActionAvailability(this.getAvailabilityForExistingPortal(r,n)),this.syncCurrentPortal(r,n)):this.setEntryActionAvailability("unavailable"),[3,4];case 3:return i.sent(),[2];case 4:return[2]}})}).call(this)}}],function(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}(n.prototype,e),n}(r.ActionModel);$.define({label:(0,o.MZ)("Portal")})}}]);
@@ -0,0 +1,10 @@
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,"".concat(n.schemaUid,"/tab/").concat(e.schemaUid)):""}return C(t,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.routePath,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.routePath,O),s=u?j(n,(0,m.u)(r.app,t.routePath,t.portalType),O):"";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("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("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",description:"Build complete business systems with AI agents and code.",records:[]},{key:"no-code",title:"No-code",description:"Build business systems through visual configuration.",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("div",{style:{marginBottom:a.marginSM}},c().createElement(i.Flex,{align:"center",gap:a.marginXS},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(i.Typography.Text,{type:"secondary",style:{fontSize:a.fontSizeSM}},t(e.description))),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)}}}]);
@@ -0,0 +1,10 @@
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 j}});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,t){return"string"==typeof e&&e?e:t("Unnamed")}function I(e){return(0,c.Xc)(null==e?void 0:e.uid)}function x(e){return(null==e?void 0:e.portalType)==="no-code"}function j(e){var t,r=(0,u.useFlowContext)(),c=(0,s.kj)(),d=o.theme.useToken().token,f=e.activeRole,g="multi-portals"===e.activeKey,j=y((0,i.useState)([]),2),O=j[0],E=j[1],C=y((0,i.useState)(),2),R=C[0],N=C[1],T=y((0,i.useState)([]),2),_=T[0],D=T[1],F=y((0,i.useState)(),2),U=F[0],z=F[1],q=y((0,i.useState)(!1),2),K=q[0],L=q[1],B=y((0,i.useState)(""),2),G=B[0],X=B[1],$=(0,i.useMemo)(function(){return f?r.api.resource("roles.multiPortals",f.name):void 0},[r.api,f]),H=(0,i.useMemo)(function(){return r.api.resource("rolesMultiPortalDesktopRoutes")},[r.api]),J=(0,i.useMemo)(function(){return r.api.resource("rolesMultiPortalRoutePolicies")},[r.api]),Q=(0,i.useMemo)(function(){return f?r.api.resource("roles.desktopRoutes",f.name):void 0},[r.api,f]),V=(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]}),W=(0,a.useRequest)(function(){return p(function(){var e,t;return w(this,function(r){switch(r.label){case 0:if(!$)return[2,[]];return[4,$.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&&!!$,refreshDeps:[g,null==f?void 0:f.name],onSuccess:function(e){E(e)}}),Y=(0,i.useMemo)(function(){var e;return null==(e=V.data)?void 0:e.find(function(e){return e.uid===R})},[V.data,R]),Z=Y?P(Y.title,c):"",ee=I(Y),et=x(Y),er=Y?c("Configure routes permissions for {{portal}}",{portal:Z}):c("Routes permissions"),en=(0,a.useRequest)(function(){return p(function(){var e,t;return w(this,function(n){switch(n.label){case 0:if(!R||!et)return[2,[]];return[4,r.api.request({url:"desktopRoutes:listRolePermissionTargets",method:"get",params:{portal:R},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&&!!R&&et,refreshDeps:[g,R,et]}),eu=(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}}):[]}(en.data)},[en.data]),ea=(0,i.useMemo)(function(){return M(eu)},[eu]),eo=(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:[])))})}(eu)},[eu]),ei=(0,i.useMemo)(function(){return new Map(eo.map(function(e){return[e.id,e]}))},[eo]),el=(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},[])}(eu),G,c)},[eu,G,c]),ec=(0,i.useMemo)(function(){return M(el)},[el]),es=(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)))})):[]}(el,ei)},[ei,el]),ed=(0,i.useMemo)(function(){var e=new Set(_);return ec.filter(function(t){return e.has(t)}).length},[_,ec]),ef=en.error?c("Failed to load routes"):G.trim()?c("No matching routes"):c("No routes"),ep=(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||!R||!et)return[2,[]];if(!ee)return[3,2];if(!Q)return[2,[]];return[4,Q.list({paginate:!1,filter:{id:ea}})];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,H.list({paginate:!1,filter:{roleName:f.name,multiPortalUid:R}})];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&&!!R&&et,refreshDeps:[g,ea,null==f?void 0:f.name,et,R,ee],onSuccess:function(e){D(e)}}),eh=(0,a.useRequest)(function(){return p(function(){var e;return w(this,function(t){switch(t.label){case 0:if(!f||!R||ee||!et)return[2,void 0];return[4,J.list({paginate:!1,filter:{roleName:f.name,multiPortalUid:R}})];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&&!!R&&et&&!ee,refreshDeps:[g,null==f?void 0:f.name,et,R,ee],onSuccess:function(e){z(e),L(!!(null==e?void 0:e.allowNewMenu))}});(0,i.useEffect)(function(){N(void 0),D([]),z(void 0),L(!1),X("")},[null==f?void 0:f.name]),(0,i.useEffect)(function(){D([]),z(void 0),L(!1),X("")},[R]);var em=(0,a.useMemoizedFn)(function(e){return p(function(){var t;return w(this,function(n){switch(n.label){case 0:var u,a;if(!$)return[2];u=new Set(O),a=new Set(e),t={add:e.filter(function(e){return!u.has(e)}),remove:O.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,$.remove({values:t.remove})];case 2:n.sent(),n.label=3;case 3:if(!t.add.length)return[3,5];return[4,$.add({values:t.add})];case 4:n.sent(),n.label=5;case 5:return[4,W.refreshAsync()];case 6:return n.sent(),E(e),r.message.success(c("Saved successfully")),[3,9];case 7:return n.sent(),[4,W.refreshAsync().catch(function(){})];case 8:return n.sent(),[3,9];case 9:return[2]}})})()}),ey=(0,a.useMemoizedFn)(function(e){return p(function(){return w(this,function(t){switch(t.label){case 0:return[4,em(O.includes(e.uid)?O.filter(function(t){return t!==e.uid}):v(O).concat([e.uid]))];case 1:return t.sent(),[2]}})})()}),ev=(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]}})})()}),eb=(0,i.useMemo)(function(){return[{dataIndex:"title",title:c("Portal"),render:function(e){return P(e,c)}},{dataIndex:"accessible",title:c("Allow access"),render:function(e,t){if(I(t))return l().createElement(o.Typography.Text,{type:"secondary"},"-");var r=P(t.title,c);return l().createElement(o.Checkbox,{"aria-label":c("Allow access to {{portal}}",{portal:r}),checked:O.includes(t.uid),onChange:function(){return ey(t)}})}},{dataIndex:"routePermissions",title:c("Routes permissions"),render:function(e,t){if(!x(t))return l().createElement(o.Typography.Text,{type:"secondary"},"-");var r=P(t.title,c);return l().createElement(o.Button,{"aria-label":c("Configure routes permissions for {{portal}}",{portal:r}),type:"link",onClick:function(){return N(t.uid)}},c("Configure"))}}]},[O,c,ey]),eg=(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||!R||!et)return[2];h=new Set((p={currentRouteIds:ea,nextSelectedIds:e,selectedIds:_}).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]),!(ee&&Q))return[3,6];if(!t.remove.length)return[3,3];return[4,Q.remove({values:t.remove})];case 2:d.sent(),d.label=3;case 3:if(!t.add.length)return[3,5];return[4,Q.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,H.destroy({filter:{roleName:f.name,multiPortalUid:R,desktopRouteId:t.remove}})];case 7:d.sent(),d.label=8;case 8:if(ee)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,H.create({values:{roleName:f.name,multiPortalUid:R,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,ep.refreshAsync()];case 17:return d.sent(),D(e),r.message.success(c("Saved successfully")),[3,20];case 18:return d.sent(),[4,ep.refreshAsync().catch(function(){})];case 19:return d.sent(),[3,20];case 20:return[2]}})})()}),ew=(0,a.useMemoizedFn)(function(e){return p(function(){return w(this,function(t){switch(t.label){case 0:if(!f||!R)return[2];if(!ee)return[3,2];return[4,ev({allowNewMenu:e})];case 1:return t.sent(),[2];case 2:if(t.trys.push([2,8,,10]),!U)return[3,4];return[4,J.update({filter:{roleName:f.name,multiPortalUid:R},values:{allowNewMenu:e}})];case 3:return t.sent(),[3,6];case 4:return[4,J.create({values:{roleName:f.name,multiPortalUid:R,allowNewMenu:e}})];case 5:t.sent(),t.label=6;case 6:return[4,eh.refreshAsync()];case 7:return t.sent(),L(e),r.message.success(c("Saved successfully")),[3,10];case 8:return t.sent(),[4,eh.refreshAsync().catch(function(){})];case 9:return t.sent(),[3,10];case 10:return[2]}})})()}),eS=(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=new Set(ec),[4,eg(ec.length&&ec.every(function(t){return e.has(t)})?_.filter(function(e){return!t.has(e)&&!es.includes(e)}):k(v(_).concat(v(es))))];case 1:return r.sent(),[2]}})})()}),eM=(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=_.includes(e.id),n=M((null!=(t=ei.get(e.id))?t:e).children),u=r?_.filter(function(t){return t!==e.id&&!n.includes(t)}):k(v(_).concat([e.id],v(n))),e.parentId&&(i=null==(o=ei.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,eg(u)];case 1:return l.sent(),[2]}})})()}),ek=(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:!!ec.length&&ed===ec.length,disabled:!ec.length,indeterminate:ed>0&&ed<ec.length,onChange:eS},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:_.includes(t.id),onChange:function(){return eM(t)}})}}]},[_,eS,c,eM,ec.length,ed]);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){ev({allowNewMultiPortal:e.target.checked})}},c("New portals are allowed to be accessed by default")),l().createElement(n.Table,{rowKey:"uid",loading:V.loading||W.loading,pagination:!1,columns:eb,dataSource:null!=(t=V.data)?t:[],locale:{emptyText:V.error?c("Failed to load portals"):c("No portals")}})),l().createElement(o.Drawer,{title:er,"aria-label":er,width:d.screenLG,open:g&&!!Y,onClose:function(){return N(void 0)}},Y&&et?l().createElement(o.Space,{direction:"vertical",size:d.marginSM,style:{width:"100%"}},l().createElement(o.Checkbox,{checked:ee?!!f.allowNewMenu:K,onChange:function(e){return ew(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:G,onChange:function(e){return X(e.target.value)}}),l().createElement(n.Table,{rowKey:"id",loading:en.loading||ep.loading||!ee&&eh.loading,pagination:!1,expandable:{defaultExpandAllRows:!1,expandedRowKeys:G.trim()?ec:void 0},columns:ek,dataSource:el,locale:{emptyText:ef}})):null)):l().createElement(o.Typography.Text,{type:"secondary"},c("Select a role to configure permissions"))}}}]);
@@ -0,0 +1,10 @@
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([["993"],{984:function(t,e,r){r.r(e),r.d(e,{MultiPortalDesktopLayoutModel:function(){return p}});var n=r(485),o=r(155),u=r.n(o),c=r(344);function l(t,e,r){return(l="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=i(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 i(t){return(i=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function a(t,e){return(a=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function f(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(f=function(){return!!t})()}var p=function(t){var e;if("function"!=typeof t&&null!==t)throw TypeError("Super expression must either be null or a function");function r(){var t,e;if(!(this instanceof r))throw TypeError("Cannot call a class as a function");return t=r,e=arguments,t=i(t),function(t,e){var r;if(e&&("object"==((r=e)&&"u">typeof Symbol&&r.constructor===Symbol?"symbol":typeof r)||"function"==typeof e))return e;if(void 0===t)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(this,f()?Reflect.construct(t,e||[],i(this).constructor):t.apply(this,e))}return r.prototype=Object.create(t&&t.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),t&&a(r,t),e=[{key:"render",value:function(){var t=this;return u().createElement(c.g_,{portalUid:this.layout.uid,renderAllowed:function(){return l(i(r.prototype),"render",t).call(t)}})}}],function(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)}}(r.prototype,e),r}(n.AdminLayoutModel);e.default=p}}]);
@@ -0,0 +1,49 @@
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
+ import { type CurrentRoleOption } from '@nocobase/client-v2';
10
+ import React from 'react';
11
+ import { type PortalAccessApiClient, type PortalAccessController, type PortalAccessDeniedContext, type PortalAccessState } from './portalAccess';
12
+ type RoleSwitcherApiClient = Pick<PortalAccessApiClient, 'auth'> & {
13
+ resource: (name: string) => {
14
+ setDefaultRole: (params: {
15
+ values: {
16
+ roleName: string;
17
+ };
18
+ }) => Promise<unknown>;
19
+ };
20
+ };
21
+ type PortalDeniedRoleSwitcherProps = {
22
+ apiClient: RoleSwitcherApiClient;
23
+ denied: PortalAccessDeniedContext;
24
+ reload: () => void;
25
+ t: (key: string) => string;
26
+ userRoles: CurrentRoleOption[];
27
+ };
28
+ export declare function PortalDeniedRoleSwitcher(props: PortalDeniedRoleSwitcherProps): React.JSX.Element;
29
+ export type PortalAccessViewProps = {
30
+ access: PortalAccessState;
31
+ apiClient: RoleSwitcherApiClient;
32
+ reload?: () => void;
33
+ renderAllowed: () => React.ReactNode;
34
+ retry: () => Promise<unknown>;
35
+ t: (key: string) => string;
36
+ userRoles: CurrentRoleOption[];
37
+ };
38
+ export declare function PortalAccessView(props: PortalAccessViewProps): React.JSX.Element;
39
+ type PortalAccessRuntimeProviderProps = React.PropsWithChildren<{
40
+ controller: PortalAccessController;
41
+ }>;
42
+ export declare function PortalAccessRuntimeProvider({ children, controller }: PortalAccessRuntimeProviderProps): React.JSX.Element;
43
+ export declare function getPortalUserRoles(value: unknown, compile: (title?: string) => string): CurrentRoleOption[];
44
+ export type MultiPortalLayoutAccessBoundaryProps = {
45
+ portalUid: string;
46
+ renderAllowed: () => React.ReactNode;
47
+ };
48
+ export declare function MultiPortalLayoutAccessBoundary({ portalUid, renderAllowed }: MultiPortalLayoutAccessBoundaryProps): React.JSX.Element;
49
+ export {};
@@ -11,9 +11,8 @@ export type RootLandingPortal = {
11
11
  uid: string;
12
12
  portalType?: string | null;
13
13
  routePath: string;
14
- uiLayout?: {
15
- layoutType?: string | null;
16
- };
17
14
  };
18
- export declare function selectRootLandingPortal(portals: RootLandingPortal[]): RootLandingPortal;
19
- export declare function RootLanding(): React.JSX.Element;
15
+ export type RootLandingProps = {
16
+ runtimeRegistrationFailed?: boolean;
17
+ };
18
+ export declare function RootLanding({ runtimeRegistrationFailed }: RootLandingProps): React.JSX.Element;