@nocobase/plugin-multi-portal 3.0.0-alpha.3 → 3.0.0-alpha.4

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.
@@ -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 Z},default:function(){return eR},deleteMultiPortals:function(){return et},derivePortalNamingFromGitUrl:function(){return ev},getRepoNameFromGitUrl:function(){return eh},setDefaultMultiPortal:function(){return er},updateMultiPortal:function(){return ee}});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 v(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 g(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 P(e){return e===a.NocoBaseDesktopRouteType.page||e===a.NocoBaseDesktopRouteType.flowPage}function B(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=B(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 N(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=B(r,e.parentId);return(null==n?void 0:n.schemaUid)?N(t.routePath,"".concat(n.schemaUid,"/tab/").concat(e.schemaUid)):""}return N(t.routePath,e.schemaUid)}function C(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=P(e.type),u=e.type===a.NocoBaseDesktopRouteType.tabs,c=g(v({},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=v({},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?g(v({},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),v=null!=(t=null==(r=e.initialRoute)?void 0:r.type)?t:h,g=(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 v===a.NocoBaseDesktopRouteType.tabs?void 0:[{message:o("Title field is required"),required:!0,whitespace:!0}]},[v,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:v}))):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:g})),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)),v===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"))),P(v)?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 L(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,r=e.portal,l=(0,o.useFlowContext)(),s=(0,d.kj)(),p=c().useRef(s),f=i.App.useApp(),y=f.message,h=f.modal,S=i.theme.useToken().token,D=w((0,u.useState)([]),2),O=D[0],N=D[1],U=w((0,u.useState)(!1),2),z=U[0],q=U[1],G=w((0,u.useState)({}),2),_=G[0],V=G[1],X=w((0,u.useState)([]),2),W=X[0],H=X[1],$=(0,u.useMemo)(function(){return l.api.resource("desktopRoutes")},[l.api]),K=r.uid,Q=(null==(t=r.uiLayout)?void 0:t.layoutType)==="mobile";c().useEffect(function(){p.current=s},[s]);var J=(0,u.useCallback)(function(){return b(function(){var e,t;return T(this,function(r){switch(r.label){case 0:q(!0),r.label=1;case 1:return r.trys.push([1,3,4,5]),[4,l.api.request({url:"/desktopRoutes:list",method:"get",params:{paginate:!1,portal:K,sort:"sort",tree:!0},skipNotify:!0})];case 2:var n;return N(null!=(e=(!(n=null==(t=r.sent())?void 0:t.data)||(void 0===n?"undefined":k(n))!=="object"?{}:{data:Array.isArray(n.data)?n.data:[]}).data)?e:[]),H([]),[3,5];case 3:return r.sent(),y.error(p.current("Failed to load routes")),N([]),[3,5];case 4:return q(!1),[7];case 5:return[2]}})})()},[l.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,l,i,u,c,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=P(t.type)&&!!n.enableTabs!==t.enableTabs,[4,$.update({filterByTk:t.id,portal:K,values:C(n,t,{mobile:Q})})];case 1:if(f.sent(),!o)return[3,9];l=!0,i=!1,u=void 0,f.label=2;case 2:var b;f.trys.push([2,7,8,9]),c=(null!=(b=t.children)?b:[]).filter(function(e){return e.type===a.NocoBaseDesktopRouteType.tabs})[Symbol.iterator](),f.label=3;case 3:if(l=(p=c.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 l=!0,[3,3];case 6:return[3,9];case 7:return m=f.sent(),i=!0,u=m,[3,9];case 8:try{l||null==c.return||c.return()}finally{if(i)throw u}return[7];case 9:return y.success(s("Updated successfully")),[3,12];case 10:return[4,$.create({portal:K,values:v({},C(n,void 0,{mobile:Q,withInitialPageTab:!0}),(null==r?void 0:r.id)!==void 0?{parentId:r.id}:{})})];case 11:f.sent(),y.success(s("Saved successfully")),f.label=12;case 12:return[4,Y()];case 13:return f.sent(),[2]}})})()},[$,y,Q,K,Y,s]),ee=(0,u.useCallback)(function(e){var t,r,n=e.editingRoute?null!=(t=B(O,e.editingRoute.id))?t:e.editingRoute:null,a=null!=(r=e.parentRoute)?r:null;l.viewer.drawer({width:S.screenSM,closable:!0,content:function(){return c().createElement(M,{initialRoute:n,mobile:Q,onSubmit:function(e){return Z({editingRoute:n,parentRoute:a,values:e})},parentRoute:a,title:n?s("Edit route"):a?s("Add child route"):s("Add new")})}})},[l.viewer,Q,O,Z,s,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(s("Deleted successfully")),[4,Y()];case 2:return t.sent(),[2]}})})()},[$,y,K,Y,s]),er=(0,u.useMemo)(function(){return W.filter(function(e){return"number"==typeof e||"string"==typeof e})},[W]),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?g(v({},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(g(v({},r),{children:l.length?l:r.children})),t},[]):t}(ea,_.keyword||"",s)},[_.keyword,s,ea]),el=(0,u.useCallback)(function(e){return b(function(){var t,r,n,a,o,l,i;return T(this,function(u){switch(u.label){case 0:t=!0,r=!1,n=void 0,u.label=1;case 1:u.trys.push([1,6,7,8]),a=er[Symbol.iterator](),u.label=2;case 2:if(t=(o=a.next()).done)return[3,5];return l=o.value,[4,$.update({filterByTk:l,portal:K,values:e})];case 3:u.sent(),u.label=4;case 4:return t=!0,[3,2];case 5:return[3,8];case 6:return i=u.sent(),r=!0,n=i,[3,8];case 7:try{t||null==a.return||a.return()}finally{if(r)throw n}return[7];case 8:return y.success(s("Updated successfully")),[4,Y()];case 9:return u.sent(),[2]}})})()},[$,y,K,Y,er,s]),ei=(0,u.useCallback)(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];h.confirm({cancelText:s("Cancel"),content:s("Are you sure you want to delete it?"),okText:s("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?s("Delete routes"):s("Delete route")})},[et,h,s]),eu=(0,u.useMemo)(function(){return[{dataIndex:"title",title:s("Title"),width:260,render:function(e,t){return I(t,s)}},{dataIndex:"type",title:s("Type"),width:160,render:function(e){return c().createElement(A,{type:e})}},{dataIndex:"hideInMenu",title:s("Show in menu"),width:140,render:function(e){return e?c().createElement(n.CloseOutlined,{"aria-label":s("Hidden"),style:{color:S.colorError}}):c().createElement(n.CheckOutlined,{"aria-label":s("Shown"),style:{color:S.colorSuccess}})}},{dataIndex:"routePath",title:s("Path"),width:320,render:function(e,t){var n=j(t,r,O);return n?c().createElement(i.Typography.Paragraph,{copyable:!0,ellipsis:!0,style:{marginBottom:0}},n):null}},{dataIndex:"actions",title:s("Actions"),width:260,render:function(e,t){var n=I(t,s),o=j(t,r,O),u=o?(0,m.u)(l.app,o,r.portalType):"";return c().createElement(i.Space,{size:"small"},c().createElement(i.Button,{"aria-label":s("Add child {{route}}",{route:n}),disabled:!(t.type===a.NocoBaseDesktopRouteType.group||(t.type===a.NocoBaseDesktopRouteType.page||t.type===a.NocoBaseDesktopRouteType.flowPage)&&t.enableTabs),onClick:function(){return ee({parentRoute:t})},size:"small",style:R,type:"link"},s("Add child")),c().createElement(i.Button,{"aria-label":s("Edit {{route}}",{route:n}),onClick:function(){return ee({editingRoute:t})},size:"small",style:R,type:"link"},s("Edit")),c().createElement(i.Button,{"aria-label":s("View {{route}}",{route:n}),disabled:!o,href:u||void 0,rel:"noopener noreferrer",size:"small",style:R,target:"_blank",type:"link"},s("View")),c().createElement(i.Button,{"aria-label":s("Delete {{route}}",{route:n}),onClick:function(){return void 0!==t.id&&ei(t.id)},size:"small",style:R,type:"link"},s("Delete")))}}]},[l.app,ei,ee,r,O,s,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(L,{onApply:V}),c().createElement(i.Space,null,c().createElement(i.Button,{icon:c().createElement(n.ReloadOutlined,null),loading:z,onClick:J},s("Refresh")),c().createElement(i.Button,{"aria-label":s("Delete"),disabled:!en,icon:c().createElement(n.DeleteOutlined,null),onClick:function(){return ei(er,!0)}},s("Delete")),c().createElement(i.Button,{"aria-label":s("Hide in menu"),disabled:!en,icon:c().createElement(n.EyeInvisibleOutlined,null),onClick:function(){return el({hideInMenu:!0})}},s("Hide in menu")),c().createElement(i.Button,{"aria-label":s("Show in menu"),disabled:!en,icon:c().createElement(n.EyeOutlined,null),onClick:function(){return el({hideInMenu:!1})}},s("Show in menu")),c().createElement(i.Button,{"aria-label":s("Add new"),icon:c().createElement(n.PlusOutlined,null),onClick:function(){return ee({})},type:"primary"},s("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:z,locale:{emptyText:s("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:W}}))}function z(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 V(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 X(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 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)||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){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 ee(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 et(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 er(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 en="no-code",ea=["no-code","ai"],eo="nocobase",el="main",ei={portalType:en,enabled:!0},eu={alignItems:"flex-start"},ec="multi-portal-described-radio",es="\n.".concat(ec," .ant-radio {\n align-self: flex-start;\n margin-top: 3px;\n}\n"),ep=/^[a-z0-9_-]+$/,ed=c().forwardRef(function(e,t){return c().createElement("div",{ref:t},c().createElement(a.IconPicker,e))});function em(e){var t=null==e?void 0:e.trim();if(t&&!ep.test(t))return"Portal name can only contain lowercase letters, numbers, hyphens, and underscores"}function ef(e){return"string"!=typeof e?null:e.trim()||null}function ey(e){var t=ef(e);return t&&ea.some(function(e){return e===t})?t:en}function eb(e){var t=ef(e);return"nocobase"===t||"git"===t?t:eo}function eh(e){var t=(e||"").trim().replace(/\.git$/i,"").replace(/\/+$/,"");if(t)return t.split(/[/:]/).filter(Boolean).pop()||void 0}function ev(e){var t=eh(e);if(t){var r=t.toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"");if(r){var n=r.split(/[-_]+/).filter(Boolean).map(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}).join(" ");return{portalName:r,title:n||r}}}}function eg(e,t){return"desktop"===e.layoutType?t("Desktop"):"mobile"===e.layoutType?t("Mobile"):e.title||e.uid}function eE(e){var t,r,n=function(e){if(e&&(void 0===e?"undefined":$(e))==="object"){var t,r,n,a=eb(e.sourceStorage);return"git"!==a?X(V({},e),{sourceStorage:a}):X(V({},e),{sourceStorage:a,git:X(V({},e.git),{repo:ef(null==(t=e.git)?void 0:t.repo)||"",branch:ef(null==(r=e.git)?void 0:r.branch)||el,path:ef(null==(n=e.git)?void 0:n.path)||""})})}}(e.options);return V({title:e.title,uid:e.uid,portalType:ey(e.portalType),portalName:e.portalName,routePath:e.routePath,uiLayoutUid:e.uiLayoutUid||(null==(r=e.uiLayout)?void 0:r.uid)||"",icon:null!=(t=e.icon)?t:null,enabled:e.enabled},n?{options:n}:{})}ed.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,v=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)),g=c().createElement("div",{className:"nb-portal-cover",style:{borderRadius:m.borderRadiusLG,height:56,overflow:"hidden",width:56}},v,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}},g)}function eT(e){var t,r=e.record,n=e.onSubmitted,p=(0,d.kj)(),m=(0,o.useFlowContext)(),f=i.theme.useToken().token,y=i.App.useApp().notification,b=W(i.Form.useForm(),1)[0],h=W((0,u.useState)(!1),2),v=h[0],g=h[1],E=(0,u.useMemo)(function(){return m.api.resource("multiPortals")},[m.api]),w=(0,l.useRequest)(function(){return _(function(){var e,t;return Q(this,function(r){switch(r.label){case 0:return[4,m.api.request({url:"uiLayouts:listEnabled",method:"get",params:{pageSize:200,sort:["uid"]},skipNotify:!0})];case 1:return[2,Array.isArray(null==(t=r.sent())||null==(e=t.data)?void 0:e.data)?t.data.data:[]]}})})()}),k=(0,u.useMemo)(function(){var e;return(null!=(e=w.data)?e:[]).map(function(e){return{value:e.uid,label:eg(e,p)}})},[w.data,p]),S=i.Form.useWatch("portalType",b),T=i.Form.useWatch("enabled",b);(0,u.useEffect)(function(){if(!(r||b.getFieldValue("uiLayoutUid"))){var e,t,n=null==(e=w.data)||null==(t=e.find(function(e){return"desktop"===e.layoutType}))?void 0:t.uid;n&&b.setFieldValue("uiLayoutUid",n)}},[b,w.data,r]);var R=(0,u.useMemo)(function(){var e,t,n,a,l,i;return r?X(V({},(i=eb(null==(l=(a=eE(r)).options)?void 0:l.sourceStorage),X(V({},a),{sourceStorage:i,gitRepo:"git"===i&&(null==l||null==(e=l.git)?void 0:e.repo)||"",gitBranch:(null==l||null==(t=l.git)?void 0:t.branch)||el,gitPath:(null==l||null==(n=l.git)?void 0:n.path)||"",cover:(null==l?void 0:l.cover)||null}))),{setAsDefault:!1}):X(V({},ei),{portalType:"ai",uid:"portal-".concat((0,o.randomId)()),sourceStorage:eo,gitBranch:el,gitPath:"",cover:null})},[r]),D=(0,s.Xc)(null==r?void 0:r.uid),I=D||!!r,O=(0,u.useRef)({}),x=(0,u.useCallback)(function(e){if("gitRepo"in e){var t,r,n=ev(e.gitRepo);if(n){var a=b.getFieldsValue(["title","portalName"]),o={};(null==(t=a.title)?void 0:t.trim())&&a.title!==O.current.title||(o.title=n.title),(null==(r=a.portalName)?void 0:r.trim())&&a.portalName!==O.current.portalName||(o.portalName=n.portalName),Object.keys(o).length&&(b.setFieldsValue(o),O.current=V({},O.current,o))}}},[b]),P=(0,u.useCallback)(function(){return _(function(){var e,t,a;return Q(this,function(o){switch(o.label){case 0:return[4,b.validateFields()];case 1:t=function(e){var t,r=e.portalName.trim(),n=em(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=ey(e.portalType);return X(V({},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:function(e){var t=e.options||{},r=e.cover||null;if("ai"!==ey(e.portalType))return X(V({},t),{cover:r});var n=eb(e.sourceStorage);return"git"!==n?X(V({},t),{cover:r,sourceStorage:n}):X(V({},t),{cover:r,sourceStorage:n,git:X(V({},t.git),{repo:ef(e.gitRepo)||"",branch:ef(e.gitBranch)||el,path:ef(e.gitPath)||""})})}(e)})}(e=o.sent()),g(!0),o.label=2;case 2:if(o.trys.push([2,7,8,9]),!r)return[3,4];return[4,ee({resource:E,filterByTk:r.uid,values:t,setAsDefault:!0!==r.isDefault&&e.enabled&&!0===e.setAsDefault,onSubmitted:n})];case 3:return o.sent(),[3,6];case 4:return[4,Z({resource:E,values:t,onSubmitted:n})];case 5:o.sent(),o.label=6;case 6:return[3,9];case 7:throw a=o.sent(),y.error({message:function(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"))}(a)||p("Failed to save portal"),role:"alert"}),a;case 8:return g(!1),[7];case 9:return[2]}})})()},[b,y,n,r,E,p]);return c().createElement(a.DrawerFormLayout,{title:r?p("Edit portal"):p("Add portal"),onSubmit:P,submitting:v,submitText:p("Submit"),cancelText:p("Cancel")},c().createElement("style",null,es),c().createElement(i.Form,{form:b,layout:"vertical",initialValues:R,onValuesChange:x},c().createElement(i.Form.Item,{name:"uid",hidden:!0,rules:[{required:!0,whitespace:!0,message:p("The field value is required")}]},c().createElement(i.Input,null)),c().createElement(i.Form.Item,{name:"portalName",label:p("Portal name"),extra:p("Used in the access path."),rules:[{required:!0,whitespace:!0,message:p("The field value is required")},{validator:function(e,t){var r=em(t);return r?Promise.reject(Error(p(r))):Promise.resolve()}}]},c().createElement(i.Input,{disabled:I,addonBefore:"ai"===S?"/x/":"/v/"})),c().createElement(i.Form.Item,{name:"title",label:p("Title"),rules:[{required:!0,whitespace:!0,message:p("Title field is required")}]},c().createElement(i.Input,null)),c().createElement(i.Form.Item,{name:"portalType",label:p("Portal type"),htmlFor:"multi-portal-portal-type-ai",rules:[{required:!0,message:p("The field value is required")}]},c().createElement(i.Radio.Group,{name:"multi-portal-portal-type",disabled:I,style:{width:"100%"}},c().createElement(i.Space,{direction:"vertical",style:{width:"100%"}},c().createElement(i.Radio,{className:ec,id:"multi-portal-portal-type-ai",style:eu,value:"ai"},c().createElement("span",null,p("AI portal")),c().createElement("div",{style:{color:f.colorTextDescription,fontSize:f.fontSizeSM}},p("Create with AI Agent and code. Users can request changes in natural language. Path: /x/<name>"))),c().createElement(i.Radio,{className:ec,style:eu,value:"no-code"},c().createElement("span",null,p("No-code portal")),c().createElement("div",{style:{color:f.colorTextDescription,fontSize:f.fontSizeSM}},p("Create with visual configuration. AI can help adjust the configuration. Path: /v/<name>")))))),c().createElement(i.Form.Item,{noStyle:!0,shouldUpdate:function(e,t){return e.portalType!==t.portalType}},function(e){return"ai"===(0,e.getFieldValue)("portalType")?c().createElement(c().Fragment,null,c().createElement(i.Form.Item,{name:"sourceStorage",label:p("Source storage"),htmlFor:"multi-portal-source-storage-nocobase",rules:[{required:!0,message:p("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:ec,id:"multi-portal-source-storage-nocobase",style:eu,value:"nocobase"},c().createElement("span",null,p("NocoBase")),c().createElement("div",{style:{color:f.colorTextDescription,fontSize:f.fontSizeSM}},p("Manage portal source code in NocoBase."))),c().createElement(i.Radio,{className:ec,style:eu,value:"git"},c().createElement("span",null,p("Git")),c().createElement("div",{style:{color:f.colorTextDescription,fontSize:f.fontSizeSM}},p("Manage portal 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:p("Git repository URL"),extra:p("The title and name below are filled in from the repository name."),rules:[{required:!0,whitespace:!0,message:p("The field value is required")}]},c().createElement(i.Input,{placeholder:"git@github.com:nocobase/customer-portal.git",allowClear:!0})),c().createElement(i.Space,{size:f.marginSM,style:{display:"flex"},align:"start"},c().createElement(i.Form.Item,{name:"gitBranch",label:p("Git branch"),style:{flex:1}},c().createElement(i.Input,{placeholder:el})),c().createElement(i.Form.Item,{name:"gitPath",label:p("Git path"),style:{flex:1},extra:p("Directory inside the Git repository for this portal. Leave empty for the root.")},c().createElement(i.Input,{placeholder:"/"})))):null})):null}),c().createElement(i.Divider,{style:{marginBlock:f.marginSM}}),c().createElement(i.Form.Item,{name:"uiLayoutUid",label:p("Device"),extra:p("No-code portals render with the components of this device; AI portals use it for grouping."),dependencies:["portalType"],rules:[{validator:function(e,t){return"ai"===b.getFieldValue("portalType")||t?Promise.resolve():Promise.reject(Error(p("The field value is required")))}}]},c().createElement(i.Select,{disabled:D||!!((null==r?void 0:r.uiLayoutUid)||(null==r||null==(t=r.uiLayout)?void 0:t.uid)),loading:w.loading,options:k,showSearch:!0,optionFilterProp:"label"})),c().createElement(i.Form.Item,{name:"cover",label:p("Cover"),extra:p("Shown on the portal card.")},c().createElement(a.AttachmentUpload,{accept:"image/*",preview:{width:160,height:90,fit:"cover"},uploadText:p("Upload cover")})),c().createElement(i.Form.Item,{name:"icon",label:p("Icon"),extra:p("Used as the cover placeholder when no cover is uploaded.")},c().createElement(ed,null)),c().createElement(i.Form.Item,{name:"enabled",label:p("Enabled"),valuePropName:"checked",extra:p("When disabled, this portal will not be registered or accessible.")},c().createElement(i.Switch,null)),r?c().createElement(i.Form.Item,{label:p("Default portal"),extra:p("Users enter this portal by default when they open the application without specifying one.")},r.isDefault?c().createElement(i.Switch,{"aria-label":p("Default portal"),checked:!0,disabled:!0}):c().createElement(i.Form.Item,{name:"setAsDefault",noStyle:!0,valuePropName:"checked"},c().createElement(i.Switch,{"aria-label":p("Default portal"),disabled:!1===T}))):null))}var eR=function(){var e,t=(0,d.kj)(),r=(0,o.useFlowContext)(),a=i.theme.useToken().token,s=i.App.useApp(),f=s.message,y=s.modal,b=W((0,u.useState)([]),2),h=b[0],v=b[1],g=W((0,u.useState)(),2),E=g[0],w=g[1],k=(0,u.useMemo)(function(){return r.api.resource("multiPortals")},[r.api]),S=(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,k.list({page:e,pageSize:20,sort:["createdAt"],appends:["uiLayout"]})];case 1:return[2,null!=(t=null==(r=n.sent())?void 0:r.data)?t:{data:[]}]}})})()}),T=S.data,R=S.loading,D=(0,u.useMemo)(function(){return Array.isArray(null==T?void 0:T.data)?T.data:[]},[null==T?void 0:T.data]),I=(0,u.useMemo)(function(){var e=[{key:"ai",title:"AI",records:[]},{key:"no-code",title:"No-code",records:[]}],t=!0,r=!1,n=void 0;try{for(var a,o=D[Symbol.iterator]();!(t=(a=o.next()).done);t=!0){var l=a.value;e[+(ey(l.portalType)===en)].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})},[D]),O=(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]),x=(0,u.useMemo)(function(){var e,t,r,n=null==T?void 0:T.meta;return!!n&&{total:null!=(e=n.count)?e:D.length,pageSize:null!=(t=n.pageSize)?t:20,current:null!=(r=n.page)?r:1}},[null==T?void 0:T.meta,D.length]),P=(0,u.useCallback)(function(){var e,t;S.run(null!=(e=null==T||null==(t=T.meta)?void 0:t.page)?e:1)},[S,null==T||null==(e=T.meta)?void 0:e.page]),B=(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]),F=(0,u.useCallback)(function(){P(),B()},[B,P]),N=(0,u.useCallback)(function(e){r.viewer.drawer({width:a.screenMD,closable:!0,content:function(){return c().createElement(eT,{record:e,onSubmitted:F})}})},[r.viewer,F,a.screenMD]),j=(0,u.useCallback)(function(e){r.viewer.drawer({width:"80%",closable:!0,content:function(){return c().createElement(z,{portal:e})}})},[r.viewer]),C=(0,u.useCallback)(function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};y.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,et({resource:k,filterByTk:e,onDeleted:F})];case 1:return t.sent(),[2]}})})()}})},[y,F,k,t]),A=(0,u.useCallback)(function(e,r){return _(function(){return Q(this,function(n){switch(n.label){case 0:v(function(t){return t.includes(e.uid)?t:H(t).concat([e.uid])}),n.label=1;case 1:return n.trys.push([1,,3,4]),[4,ee({resource:k,filterByTk:e.uid,values:X(V({},eE(e)),{enabled:r}),onSubmitted:F})];case 2:return n.sent(),f.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]}})})()},[f,F,k,t]),M=(0,l.useMemoizedFn)(function(e){return _(function(){return Q(this,function(r){switch(r.label){case 0:w(e.uid),r.label=1;case 1:return r.trys.push([1,,3,4]),[4,er({resource:k,filterByTk:e.uid,onSubmitted:F})];case 2:return r.sent(),f.success(t("Default portal updated successfully")),[3,4];case 3:return w(void 0),[7];case 4:return[2]}})})()}),L=(0,u.useCallback)(function(e){var o,l=(0,m.u)(r.app,e.routePath,e.portalType),u=ey(e.portalType)!==en||!e.enabled,s=e.uiLayout?eg({layoutType:e.uiLayout.layoutType,title:e.uiLayout.title,uid:e.uiLayout.uid||e.uiLayoutUid||""},t):e.uiLayoutUid,p=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(i.Typography.Text,{strong:!0,ellipsis:!0,style:{minWidth:0}},e.title),s?c().createElement(i.Tooltip,{title:s},(null==(o=e.uiLayout)?void 0:o.layoutType)==="mobile"?c().createElement(n.MobileOutlined,{"aria-label":s,style:{color:a.colorTextDescription,fontSize:a.fontSizeSM}}):c().createElement(n.DesktopOutlined,{"aria-label":s,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:h.includes(e.uid)||E===e.uid,size:"small",onChange:function(t){return _(function(){return Q(this,function(r){switch(r.label){case 0:return[4,A(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:"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?N(e):"routes"===r?j(e):"default"===r?M(e):"delete"===r&&C(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"},p):p)},[r.app,C,M,A,N,j,t,a.fontSizeSM,a.colorTextDescription,a.colorWarning,a.margin,a.marginXS,a.marginXXS,a.paddingLG,E,h]);return c().createElement("div",null,c().createElement("style",null,O),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:F},t("Refresh")),c().createElement(i.Button,{type:"primary",icon:c().createElement(n.PlusOutlined,null),onClick:function(){return N()}},t("Add portal")))),c().createElement(i.Spin,{spinning:R},0!==D.length||R?I.map(function(e){return c().createElement("div",{key:e.key,style:{marginBottom:a.marginXL}},c().createElement(i.Flex,{align:"center",gap:a.marginXS,style:{marginBottom:a.marginSM}},c().createElement(i.Typography.Text,{strong:!0},t(e.title)),c().createElement(i.Typography.Text,{type:"secondary",style:{fontSize:a.fontSizeSM}},e.records.length),c().createElement("div",{style:{background:a.colorSplit,flex:1,height:a.lineWidth}})),c().createElement("div",{style:ew},e.records.map(L)))}):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 N()}},t("Add portal")))),x?c().createElement(i.Flex,{justify:"flex-end",style:{marginTop:a.marginMD}},c().createElement(i.Pagination,{current:x.current,pageSize:x.pageSize,total:x.total,showSizeChanger:!1,onChange:function(e){return S.run(e)}})):null)}}}]);
@@ -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;
@@ -7,4 +7,4 @@
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
9
 
10
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("ahooks"),require("@nocobase/client-v2"),require("react-router-dom"),require("@nocobase/plugin-ui-layout/client-v2"),require("react"),require("antd"),require("antd-style"),require("@nocobase/flow-engine"),require("@ant-design/icons")):"function"==typeof define&&define.amd?define("@nocobase/plugin-multi-portal/client-v2",["ahooks","@nocobase/client-v2","react-router-dom","@nocobase/plugin-ui-layout/client-v2","react","antd","antd-style","@nocobase/flow-engine","@ant-design/icons"],t):"object"==typeof exports?exports["@nocobase/plugin-multi-portal/client-v2"]=t(require("ahooks"),require("@nocobase/client-v2"),require("react-router-dom"),require("@nocobase/plugin-ui-layout/client-v2"),require("react"),require("antd"),require("antd-style"),require("@nocobase/flow-engine"),require("@ant-design/icons")):e["@nocobase/plugin-multi-portal/client-v2"]=t(e.ahooks,e["@nocobase/client-v2"],e["react-router-dom"],e["@nocobase/plugin-ui-layout/client-v2"],e.react,e.antd,e["antd-style"],e["@nocobase/flow-engine"],e["@ant-design/icons"])}(self,function(e,t,r,n,o,a,i,l,u){return function(){"use strict";var c,s,f,p={337:function(e,t,r){r.d(t,{G:function(){return u}});var n=r(694);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e){var t=e||{};return{apps:Array.isArray(t.apps)?t.apps:[],portals:Array.isArray(t.portals)?t.portals:[]}}var i=function(){var e;function t(e){if(!(this instanceof t))throw TypeError("Cannot call a class as a function");o(this,"app",void 0),o(this,"payload",void 0),o(this,"loading",void 0),o(this,"revision",void 0),o(this,"loaded",void 0),o(this,"request",void 0),o(this,"requestId",void 0),this.app=e,this.payload=a(null),this.loading=!1,this.revision=0,this.loaded=!1,this.requestId=0,(0,n.define)(this,{payload:n.observable.ref,loading:n.observable.ref,revision:n.observable.ref})}return e=[{key:"load",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.app.apiClient;return this.loaded&&!this.request?Promise.resolve(this.payload):this.requestPortals(e)}},{key:"reload",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.app.apiClient;return this.requestPortals(e,{force:!0,invalidateEntryActions:!0})}},{key:"requestPortals",value:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!this.request||r.force){var n,o=++this.requestId;this.loading=!0,this.request=((null==(n=e.silent)?void 0:n.call(e))||e).request({url:"app:getPortals",skipNotify:!0}).then(function(e){var n,i,l,u=a(null!=(n=null==e||null==(i=e.data)?void 0:i.data)?n:null==e?void 0:e.data);return o===t.requestId&&(t.payload=u,t.loaded=!0,t.revision+=1,r.invalidateEntryActions&&(null==(l=t.app.entryActionManager)||l.invalidate())),u}).catch(function(e){throw e}).finally(function(){o===t.requestId&&(t.loading=!1,t.request=void 0)})}return this.request}}],function(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}(t.prototype,e),t}(),l=new WeakMap;function u(e){var t=l.get(e);return t||(t=new i(e),l.set(e,t)),t}},143:function(e,t,r){r.d(t,{Dj:function(){return l},kj:function(){return i},MZ:function(){return u}});var n=r(694),o=JSON.parse('{"UU":"@nocobase/plugin-multi-portal"}');function a(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 i(){var e=(0,n.useFlowEngine)();return function(t,r){return e.context.t(t,a({ns:[o.UU,"client"]},r))}}function l(e){return a({ns:[o.UU,"client"]},e)}function u(e){return(0,n.tExpr)(e,{ns:[o.UU,"client"]})}},756:function(e,t,r){r.d(t,{u:function(){return v}});var n=r(485);function o(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 a(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e){if(e){if("string"==typeof e)return o(e,void 0);var t=Object.prototype.toString.call(e).slice(8,-1);if("Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t)return Array.from(t);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return o(e,void 0)}}(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.")}()}var i="no-code",l=function(e){var t=null==e?void 0:e.trim();return t&&"/"!==t?"/".concat(t.replace(/^\/+/,"")):"/"},u=function(e){var t=l(e).replace(/\/+$/,"");return""===t||"/"===t?"":t},c=function(e,t){var r=u(e),n=l(t);return!r||n===r||n.startsWith("".concat(r,"/"))?n:"".concat(r).concat(n)};function s(e){return"ai"===e?"ai":i}function f(e){return"ai"===s(e)?"/x":"/".concat((0,n.getModernClientPrefix)())}function p(){return Array.from(new Set([f(i),"/x","/v"]))}function d(e,t){var r=!(arguments.length>2)||void 0===arguments[2]||arguments[2],n=u(e),o=f(t);if(!n)return o;var i=r?n.match(/^(.*)\/(apps|_app)\/([^/]+)$/):null;if(i){var l=i[1]||"",c=!0,d=!1,y=void 0;try{for(var b,v=a(p()).concat(["/settings"])[Symbol.iterator]();!(c=(b=v.next()).done);c=!0){var h=b.value;if(l===h){l="";break}if(l.endsWith(h)){l=l.slice(0,-h.length);break}}}catch(e){d=!0,y=e}finally{try{c||null==v.return||v.return()}finally{if(d)throw y}}var g="ai"===s(t)?"apps":i[2];return"".concat(l).concat(o,"/").concat(g,"/").concat(i[3])}var m=!0,w=!1,P=void 0;try{for(var S,O=p()[Symbol.iterator]();!(m=(S=O.next()).done);m=!0){var j=S.value;if(n===j)return o;if(n.endsWith(j))return"".concat(n.slice(0,-j.length)).concat(o)}}catch(e){w=!0,P=e}finally{try{m||null==O.return||O.return()}finally{if(w)throw P}}return"".concat(n).concat(o)}function y(e,t,r){var n=!(arguments.length>3)||void 0===arguments[3]||arguments[3],o=l(e),i=!0,c=!1,f=void 0;try{for(var y,b=[d(t,r,n),d(t,"ai"===s(r)?"no-code":"ai",n)].concat(a(p()))[Symbol.iterator]();!(i=(y=b.next()).done);i=!0){var v=y.value;o=function(e,t){var r=u(t),n=l(e);return r?n===r?"/":n.startsWith("".concat(r,"/"))?n.slice(r.length)||"/":n:n}(o,v)}}catch(e){c=!0,f=e}finally{try{i||null==b.return||b.return()}finally{if(c)throw f}}return o}function b(e,t){var r,n=null==e||null==(r=e.getPublicPath)?void 0:r.call(e);return!("main"===(e&&"name"in e&&"string"==typeof e.name?e.name:void 0)&&n&&u(n)===u(t))}function v(e,t,r){var o,a,i,s,f=t.trim();if(/^[a-z][a-z\d+\-.]*:\/\//i.test(f)||f.startsWith("//"))return f;var p=(null==e||null==(a=e.router)||null==(o=a.getBasename)?void 0:o.call(a))||(null==e||null==(i=e.router)?void 0:i.basename);if(p){var v="function"==typeof(null==e?void 0:e.getPublicPath)?(0,n.getV2EffectiveBasePath)({getPublicPath:e.getPublicPath,router:{getBasename:function(){var t,r,n;return(null==(r=e.router)||null==(t=r.getBasename)?void 0:t.call(r))||(null==(n=e.router)?void 0:n.basename)}}}):p,h=b(e,v);return c(d(v,r,h),y(f,v,r,h))}if(null==e?void 0:e.getRouteUrl){var g,m,w=e.getRouteUrl(f),P=(g=l(w))===(m=l(f))?"":g.endsWith(m)?u(g.slice(0,-m.length)):void 0;if(void 0!==P){var S=b(e,P);return c(d(P,r,S),y(f,P,r,S))}return l(w)}var O=null==e||null==(s=e.getPublicPath)?void 0:s.call(e),j=b(e,O);return c(d(O,r,j),y(f,O,r,j))}},624:function(e,t,r){r.d(t,{GN:function(){return n},Jx:function(){return o},Xc:function(){return i}});var n="__default_admin__",o="__default_mobile__",a=new Set([n,o]);function i(e){return"string"==typeof e&&a.has(e)}},375:function(e){e.exports=u},485:function(e){e.exports=t},694:function(e){e.exports=l},69:function(e){e.exports=n},625:function(t){t.exports=e},59:function(e){e.exports=a},235:function(e){e.exports=i},155:function(e){e.exports=o},442:function(e){e.exports=r}},d={};function y(e){var t=d[e];if(void 0!==t)return t.exports;var r=d[e]={exports:{}};return p[e](r,r.exports,y),r.exports}y.m=p,y.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return y.d(t,{a:t}),t},y.d=function(e,t){for(var r in t)y.o(t,r)&&!y.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},y.f={},y.e=function(e){return Promise.all(Object.keys(y.f).reduce(function(t,r){return y.f[r](e,t),t},[]))},y.u=function(e){return""+e+"."+({354:"7be267ae5d61a878",499:"ef2ff0c022687485",556:"5faf86d4f8faef40",778:"c98e7ec542d931fe"})[e]+".js"},y.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),y.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},b={},y.l=function(e,t,r,n){if(b[e])return void b[e].push(t);if(void 0!==r)for(var o,a,i=document.getElementsByTagName("script"),l=0;l<i.length;l++){var u=i[l];if(u.getAttribute("src")==e||u.getAttribute("data-rspack")=="@nocobase/plugin-multi-portal/client-v2:"+r){o=u;break}}o||(a=!0,(o=document.createElement("script")).timeout=120,y.nc&&o.setAttribute("nonce",y.nc),o.setAttribute("data-rspack","@nocobase/plugin-multi-portal/client-v2:"+r),o.src=e),b[e]=[t];var c=function(t,r){o.onerror=o.onload=null,clearTimeout(s);var n=b[e];if(delete b[e],o.parentNode&&o.parentNode.removeChild(o),n&&n.forEach(function(e){return e(r)}),t)return t(r)},s=setTimeout(c.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=c.bind(null,o.onerror),o.onload=c.bind(null,o.onload),a&&document.head.appendChild(o)},y.r=function(e){"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},y.g.importScripts&&(v=y.g.location+"");var b,v,h=y.g.document;if(!v&&h&&(h.currentScript&&"SCRIPT"===h.currentScript.tagName.toUpperCase()&&(v=h.currentScript.src),!v)){var g=h.getElementsByTagName("script");if(g.length)for(var m=g.length-1;m>-1&&(!v||!/^http(s?):/.test(v));)v=g[m--].src}if(!v)throw Error("Automatic publicPath is not supported in this browser");y.p=v.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),c={889:0},y.f.j=function(e,t){var r=y.o(c,e)?c[e]:void 0;if(0!==r)if(r)t.push(r[2]);else{var n=new Promise(function(t,n){r=c[e]=[t,n]});t.push(r[2]=n);var o=y.p+y.u(e),a=Error();y.l(o,function(t){if(y.o(c,e)&&(0!==(r=c[e])&&(c[e]=void 0),r)){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;a.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",a.name="ChunkLoadError",a.type=n,a.request=o,r[1](a)}},"chunk-"+e,e)}},s=function(e,t){var r,n,o=t[0],a=t[1],i=t[2],l=0;if(o.some(function(e){return 0!==c[e]})){for(r in a)y.o(a,r)&&(y.m[r]=a[r]);i&&i(y)}for(e&&e(t);l<o.length;l++)n=o[l],y.o(c,n)&&c[n]&&c[n][0](),c[n]=0},(f=self.webpackChunk_nocobase_plugin_multi_portal_client_v2=self.webpackChunk_nocobase_plugin_multi_portal_client_v2||[]).forEach(s.bind(null,0)),f.push=s.bind(null,f.push.bind(f));var w={};return!function(){var e="",t="u">typeof document?document.currentScript:null;if(t&&t.src){var r=t.src.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"");r.indexOf("/static/plugins/@nocobase/plugin-multi-portal/dist/client-v2/")>=0&&(e=r.replace(/\/[^\/]+$/,"/"))}if(!e){var n=window.__webpack_public_path__||"";n&&("/"!==n.charAt(n.length-1)&&(n+="/"),e=n+"static/plugins/@nocobase/plugin-multi-portal/dist/client-v2/")}if(!e){var o=window.__nocobase_modern_client_prefix__||"v",a="/"+(o=String(o).replace(/^\/+|\/+$/g,"")||"v")+"/";if(!(e=window.__nocobase_public_path__||"")&&window.location&&window.location.pathname){var i=window.location.pathname||"/",l=i.indexOf(a);e=l>=0?i.slice(0,l+1):"/"}e&&(e=e.replace(RegExp("/"+o+"/?$"),"/")),e||(e="/"),"/"!==e.charAt(e.length-1)&&(e+="/"),e+="static/plugins/@nocobase/plugin-multi-portal/dist/client-v2/"}y.p=e}(),!function(){y.r(w),y.d(w,{default:function(){return em}});var e,t=y(485),r=y(59),n=y(155),o=y.n(n),a=y(442),i=y(624),l=y(143),u=y(756);function c(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 s(e,t,r,n,o,a,i){try{var l=e[a](i),u=l.value}catch(e){r(e);return}l.done?t(u):Promise.resolve(u).then(n,o)}function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,o=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(r=o.next()).done)&&(a.push(r.value),!t||a.length!==t);i=!0);}catch(e){l=!0,n=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw n}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(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 c(e,t)}}(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 p(){var e=(0,t.useApp)(),c=(0,l.kj)(),p=f((0,n.useState)(),2),d=p[0],y=p[1],b=f((0,n.useState)(),2),v=b[0],h=b[1],g=(0,n.useRef)();(0,n.useEffect)(function(){var t,r=!0;return(t=function(){var t,n,o;return function(e,t){var r,n,o,a={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),l=Object.defineProperty;return l(i,"next",{value:u(0)}),l(i,"throw",{value:u(1)}),l(i,"return",{value:u(2)}),"function"==typeof Symbol&&l(i,Symbol.iterator,{value:function(){return this}}),i;function u(l){return function(u){var c=[l,u];if(r)throw TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(a=0)),a;)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 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(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],n=0}finally{r=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(a){switch(a.label){case 0:return a.trys.push([0,2,,3]),[4,e.apiClient.request({url:"multiPortals:listAccessible",method:"get",skipNotify:!0})];case 1:return t=a.sent(),r&&(y(Array.isArray(null==t||null==(n=t.data)?void 0:n.data)?t.data.data:[]),h(void 0)),[3,3];case 2:var i;return o=a.sent(),r&&h((null!=(i=Error)&&"u">typeof Symbol&&i[Symbol.hasInstance]?!!i[Symbol.hasInstance](o):o instanceof i)?o:Error(String(o))),[3,3];case 3:return[2]}})},function(){var e=this,r=arguments;return new Promise(function(n,o){var a=t.apply(e,r);function i(e){s(a,n,o,i,l,"next",e)}function l(e){s(a,n,o,i,l,"throw",e)}i(void 0)})})(),function(){r=!1}},[e]);var m=(0,n.useMemo)(function(){var e;return null==(e=(null!=d?d:[]).filter(function(e){return"no-code"===e.portalType||"ai"===e.portalType}).map(function(e,t){var r,n;return{index:t,portal:e,priority:e.uid===i.GN&&"no-code"===e.portalType?0:"no-code"===e.portalType&&(null==(r=e.uiLayout)?void 0:r.layoutType)==="desktop"?1:"no-code"===e.portalType&&(null==(n=e.uiLayout)?void 0:n.layoutType)==="mobile"?2:3}}).sort(function(e,t){return e.priority-t.priority||e.index-t.index})[0])?void 0:e.portal},[d]);return((0,n.useEffect)(function(){if(m&&"ai"===m.portalType){var t=(0,u.u)(e,m.routePath,m.portalType);g.current!==t&&(g.current=t,window.location.replace(t))}},[e,m]),v)?o().createElement(r.Result,{status:"error",title:c("Failed to load portals")}):!d||m&&"ai"===m.portalType?o().createElement(r.Flex,{align:"center",justify:"center",style:{minHeight:"100vh"}},o().createElement(r.Spin,{size:"large"})):m?o().createElement(a.Navigate,{replace:!0,to:m.routePath}):o().createElement(r.Result,{status:"info",title:c("No accessible portals")})}var d=y(337);function b(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 v(e,t,r,n,o,a,i){try{var l=e[a](i),u=l.value}catch(e){r(e);return}l.done?t(u):Promise.resolve(u).then(n,o)}function h(e){return function(e){if(Array.isArray(e))return b(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e){if(e){if("string"==typeof e)return b(e,void 0);var t=Object.prototype.toString.call(e).slice(8,-1);if("Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t)return Array.from(t);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return b(e,void 0)}}(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.")}()}var g=["action-panel","app-switcher"],m="desktop",P="mobile",S="main";function O(e){return!!e&&(void 0===e?"undefined":e&&"u">typeof Symbol&&e.constructor===Symbol?"symbol":typeof e)=="object"}function j(e){return"string"==typeof e&&e?e:null}function k(e){var t=j(e);return!!t&&t.toLowerCase().includes(P)}function M(e){return e.title||e.routePath}function x(e){var t=new Set;return e.filter(function(e){return!t.has(e)&&(t.add(e),!0)})}function A(e,t,r){return e===S?r("Main application"):(null==t?void 0:t.title)||e}function E(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 _(e,t,r,n,o,a,i){try{var l=e[a](i),u=l.value}catch(e){r(e);return}l.done?t(u):Promise.resolve(u).then(n,o)}function R(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var a=e.apply(t,r);function i(e){_(a,n,o,i,l,"next",e)}function l(e){_(a,n,o,i,l,"throw",e)}i(void 0)})}}function T(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 I(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 C(e,t){if(null==e)return{};var r,n,o,a={};if("u">typeof Reflect&&Reflect.ownKeys){for(o=0,r=Reflect.ownKeys(Object(e));o<r.length;o++)n=r[o],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n]);return a}if(a=function(e,t){if(null==e)return{};var r,n,o={},a=Object.getOwnPropertyNames(e);for(n=0;n<a.length;n++)r=a[n],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r]);return o}(e,t),Object.getOwnPropertySymbols)for(o=0,r=Object.getOwnPropertySymbols(e);o<r.length;o++)n=r[o],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n]);return a}function q(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,o=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(r=o.next()).done)&&(a.push(r.value),!t||a.length!==t);i=!0);}catch(e){l=!0,n=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw n}}return a}}(e,t)||N(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 L(e){return function(e){if(Array.isArray(e))return E(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||N(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 U(e){return e&&"u">typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function N(e,t){if(e){if("string"==typeof e)return E(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 E(e,t)}}function B(e,t){var r,n,o,a={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),l=Object.defineProperty;return l(i,"next",{value:u(0)}),l(i,"throw",{value:u(1)}),l(i,"return",{value:u(2)}),"function"==typeof Symbol&&l(i,Symbol.iterator,{value:function(){return this}}),i;function u(l){return function(u){var c=[l,u];if(r)throw TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(a=0)),a;)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 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(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],n=0}finally{r=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var D=Symbol("multiPortalRouteRepositoryState");function G(e){var t;return(null==(t=e.scopeStack[e.scopeStack.length-1])?void 0:t.scope)||{cacheKey:"admin-layout-model",uiLayoutUid:"admin-layout-model"}}function K(e){return e.getAPIClient()}function W(e){return"string"==typeof e.portalUid}function z(e){var t=e.children;return T({},(e.multiPortals,e.uiLayouts,C(e,["children","multiPortals","uiLayouts"])),Array.isArray(t)?{children:t.map(function(e){return z(e)})}:{})}function $(e,t,r){return R(function(){var n,o,a,i;return B(this,function(l){switch(l.label){case 0:return o=(r.refreshRequestIds.get(t.cacheKey)||0)+1,r.refreshRequestIds.set(t.cacheKey,o),[4,K(e).request({url:"/desktopRoutes:listAccessible",params:{tree:!0,sort:"sort",portal:t.portalUid}})];case 1:return i=Array.isArray(null==(a=l.sent())||null==(n=a.data)?void 0:n.data)?a.data.data:[],r.refreshRequestIds.get(t.cacheKey)===o&&e.setRoutes(i,t.cacheKey),[2,i]}})})()}function H(e,t,r,n,o,a,i){try{var l=e[a](i),u=l.value}catch(e){r(e);return}l.done?t(u):Promise.resolve(u).then(n,o)}function F(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var a=e.apply(t,r);function i(e){H(a,n,o,i,l,"next",e)}function l(e){H(a,n,o,i,l,"throw",e)}i(void 0)})}}function X(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function J(e,t){var r,n,o,a={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),l=Object.defineProperty;return l(i,"next",{value:u(0)}),l(i,"throw",{value:u(1)}),l(i,"return",{value:u(2)}),"function"==typeof Symbol&&l(i,Symbol.iterator,{value:function(){return this}}),i;function u(l){return function(u){var c=[l,u];if(r)throw TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(a=0)),a;)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 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(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],n=0}finally{r=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var Z="mobile",V=(X(e={},"desktop",{layoutModelClass:"AdminLayoutModel"}),X(e,Z,{layoutModelClass:"MultiPortalMobileLayoutModel",rootPageModelClass:"MultiPortalMobileRootPageModel",childPageModelClass:"MultiPortalMobileChildPageModel"}),e),Y={layoutModelClass:"MobileLayoutModel",rootPageModelClass:"MobileRootPageModel",childPageModelClass:"MobileChildPageModel"};function Q(e){return"no-code"===(e.portalType||"no-code")}var ee=y(625),et=y(235);function er(e,t,r,n,o,a,i){try{var l=e[a](i),u=l.value}catch(e){r(e);return}l.done?t(u):Promise.resolve(u).then(n,o)}function en(e){return(en=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function eo(e,t){return(eo=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function ea(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(ea=function(){return!!e})()}var ei=r.Typography.Text;function el(e){var t=e.controlHeightLG+e.paddingSM+e.paddingXXS,r=e.paddingLG-e.paddingXXS;return{avatarSize:t,cardHeight:t+2*r,gridMinColumnWidth:9*e.controlHeightLG,iconSize:e.fontSizeHeading3+e.marginXXS,paddingBlock:r}}var eu=(0,et.createStyles)(function(e){var t=e.token;return{portalItem:{"&:hover":{background:t.colorBgTextHover,borderColor:t.colorBorder,boxShadow:t.boxShadowTertiary,color:t.colorText,transform:"translateY(-".concat(t.lineWidth,"px)")},"&:focus-visible":{outline:"".concat(t.controlOutlineWidth,"px solid ").concat(t.colorPrimaryBorder),outlineOffset:t.controlOutlineWidth},".ant-typography":{color:"inherit"}}}});function ec(e){var t;return(null==(t=e.title)?void 0:t.trim())||e.uid}function es(e){var n,a,i,l,u=e.record,c=e.token,s=el(c),f=null==(l=u.icon)?void 0:l.trim(),p={alignItems:"center",background:c.colorFillTertiary,borderRadius:c.borderRadiusLG,color:c.colorText,display:"flex",flex:"0 0 ".concat(s.avatarSize,"px"),fontSize:c.fontSizeHeading3,height:s.avatarSize,justifyContent:"center",lineHeight:1,width:s.avatarSize};if(f)return o().createElement(r.Avatar,{shape:"square",size:s.avatarSize,style:p,icon:null},o().createElement(t.Icon,{type:f,"aria-hidden":!0,style:{color:c.colorPrimary,fontSize:s.iconSize}}));var d=(n=[{background:c.colorPrimaryBg,color:c.colorPrimary},{background:c.colorSuccessBg,color:c.colorSuccess},{background:c.colorWarningBg,color:c.colorWarning},{background:c.colorErrorBg,color:c.colorError},{background:c.colorInfoBg,color:c.colorInfo}])[function(e,t){var r=0,n=!0,o=!1,a=void 0;try{for(var i,l=e[Symbol.iterator]();!(n=(i=l.next()).done);n=!0){var u=i.value;r=(31*r+u.charCodeAt(0))%0x7fffffff}}catch(e){o=!0,a=e}finally{try{n||null==l.return||l.return()}finally{if(o)throw a}}return Math.abs(r)%t}("".concat(u.uid,":").concat(u.title||""),n.length)];return o().createElement(r.Avatar,{"aria-hidden":!0,shape:"square",size:s.avatarSize,style:(a=function(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}({},p),i=i={background:d.background,color:d.color,fontWeight:c.fontWeightStrong},Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(i)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(i)).forEach(function(e){Object.defineProperty(a,e,Object.getOwnPropertyDescriptor(i,e))}),a)},(ec(u).trim()[0]||"P").toUpperCase())}function ef(e){var t=e.model,a=r.theme.useToken().token,i=eu().styles,l=(0,n.useMemo)(function(){return el(a)},[a]),c=t.context.app,s=t.translate,f=(0,ee.useRequest)(function(){var e;return(e=function(){var e,t,r;return function(e,t){var r,n,o,a={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),l=Object.defineProperty;return l(i,"next",{value:u(0)}),l(i,"throw",{value:u(1)}),l(i,"return",{value:u(2)}),"function"==typeof Symbol&&l(i,Symbol.iterator,{value:function(){return this}}),i;function u(l){return function(u){var c=[l,u];if(r)throw TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(a=0)),a;)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 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(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],n=0}finally{r=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(n){switch(n.label){case 0:return[4,null==c||null==(e=c.apiClient)?void 0:e.request({url:"multiPortals:listAccessible",method:"get",skipNotify:!0})];case 1:return[2,Array.isArray(null==(r=n.sent())||null==(t=r.data)?void 0:t.data)?r.data.data:[]]}})},function(){var t=this,r=arguments;return new Promise(function(n,o){var a=e.apply(t,r);function i(e){er(a,n,o,i,l,"next",e)}function l(e){er(a,n,o,i,l,"throw",e)}i(void 0)})})()}),p=f.data,d=f.error,y=f.loading,b=null!=p?p:[],v=(0,n.useMemo)(function(){return{display:"grid",gap:a.marginSM,gridTemplateColumns:"repeat(auto-fill, minmax(min(100%, ".concat(l.gridMinColumnWidth,"px), 1fr))")}},[l.gridMinColumnWidth,a.marginSM]),h=(0,n.useMemo)(function(){return{alignItems:"center",background:a.colorBgContainer,border:"".concat(a.lineWidth,"px solid ").concat(a.colorBorderSecondary),borderRadius:a.borderRadiusLG,boxSizing:"border-box",color:a.colorText,display:"flex",gap:a.marginSM,height:l.cardHeight,padding:"".concat(l.paddingBlock,"px ").concat(a.paddingLG,"px"),textDecoration:"none",transition:"background ".concat(a.motionDurationMid,", border-color ").concat(a.motionDurationMid,", box-shadow ").concat(a.motionDurationMid,", transform ").concat(a.motionDurationMid)}},[l.cardHeight,l.paddingBlock,a.borderRadiusLG,a.colorBgContainer,a.colorBorderSecondary,a.colorText,a.lineWidth,a.marginSM,a.motionDurationMid,a.paddingLG]);return d?o().createElement(r.Alert,{type:"warning",message:s("Failed to load portals"),showIcon:!0}):y?o().createElement("div",{style:{minHeight:l.cardHeight}}):0===b.length?o().createElement(r.Empty,{image:r.Empty.PRESENTED_IMAGE_SIMPLE,description:s("No portals")}):o().createElement("div",{"data-testid":"multi-portal-block-grid",style:v},b.map(function(e){var t=ec(e);return o().createElement("a",{key:e.uid,href:(0,u.u)(c,e.routePath,e.portalType),target:"_blank",rel:"noopener noreferrer","data-testid":"multi-portal-block-card",className:i.portalItem,style:h},o().createElement(es,{record:e,token:a}),o().createElement(ei,{strong:!0,ellipsis:!0,style:{flex:1,fontSize:a.fontSizeLG,lineHeight:a.lineHeightLG,marginBottom:0,minWidth:0},title:t},t))}))}var ep=function(e){var t;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function r(){var e,t;if(!(this instanceof r))throw TypeError("Cannot call a class as a function");return e=r,t=arguments,e=en(e),function(e,t){var r;if(t&&("object"==((r=t)&&"u">typeof Symbol&&r.constructor===Symbol?"symbol":typeof r)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,ea()?Reflect.construct(e,t||[],en(this).constructor):e.apply(this,t))}return r.prototype=Object.create(e&&e.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),e&&eo(r,e),t=[{key:"renderComponent",value:function(){return o().createElement(ef,{model:this})}}],function(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}(r.prototype,t),r}(t.BlockModel);function ed(e,t,r,n,o,a,i){try{var l=e[a](i),u=l.value}catch(e){r(e);return}l.done?t(u):Promise.resolve(u).then(n,o)}function ey(e,t,r){return(ey=eg()?Reflect.construct:function(e,t,r){var n=[null];n.push.apply(n,t);var o=new(Function.bind.apply(e,n));return r&&ev(o,r.prototype),o}).apply(null,arguments)}ep.define({label:(0,l.MZ)("Portals"),hide:!0,createModelOptions:{use:"MultiPortalBlockModel",stepParams:{cardSettings:{titleDescription:{title:(0,l.MZ)("Portals")}}}},sort:600});function eb(e){return(eb=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function ev(e,t){return(ev=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function eh(e){var t="function"==typeof Map?new Map:void 0;return(eh=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return ey(e,arguments,eb(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),ev(r,e)})(e)}function eg(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(eg=function(){return!!e})()}var em=function(e){var t;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function r(){var e,t;if(!(this instanceof r))throw TypeError("Cannot call a class as a function");return e=r,t=arguments,e=eb(e),function(e,t){var r;if(t&&("object"==((r=t)&&"u">typeof Symbol&&r.constructor===Symbol?"symbol":typeof r)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,eg()?Reflect.construct(e,t||[],eb(this).constructor):e.apply(this,t))}return r.prototype=Object.create(e&&e.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),e&&ev(r,e),t=[{key:"load",value:function(){var e;return(e=function(){var e,t;return function(e,t){var r,n,o,a={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),l=Object.defineProperty;return l(i,"next",{value:u(0)}),l(i,"throw",{value:u(1)}),l(i,"return",{value:u(2)}),"function"==typeof Symbol&&l(i,Symbol.iterator,{value:function(){return this}}),i;function u(l){return function(u){var c=[l,u];if(r)throw TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(a=0)),a;)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 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(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],n=0}finally{r=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(r){switch(r.label){case 0:var n;if(e=this,t=String(this.t("Portal manager")),this.app.flowEngine.registerModels({MultiPortalBlockModel:ep}),this.app.flowEngine.registerModelLoaders({MultiPortalMobileLayoutModel:{loader:function(){return y.e("354").then(y.bind(y,833))}},MultiPortalMobileRootPageModel:{loader:function(){return y.e("354").then(y.bind(y,833))}},MultiPortalMobileChildPageModel:{loader:function(){return y.e("354").then(y.bind(y,833))}},MultiPortalMobileRootPageTabModel:{loader:function(){return y.e("354").then(y.bind(y,833))}},MultiPortalMobileChildPageTabModel:{loader:function(){return y.e("354").then(y.bind(y,833))}}}),this.app.entryActionManager&&this.app.flowEngine.registerModelLoaders({PortalEntryActionModel:{loader:function(){return y.e("499").then(y.bind(y,918))}}}),this.pluginSettingsManager.addMenuItem({key:"multi-portal",title:t,icon:"PartitionOutlined",aclSnippet:"pm.multi-portal",showTabs:!0,sort:-300}),this.pluginSettingsManager.addPageTabItem({menuKey:"multi-portal",key:"index",title:t,aclSnippet:"pm.multi-portal",componentLoader:function(){return y.e("556").then(y.bind(y,524))}}),!function(e,t){var r,n=e.pm;if(null==n?void 0:n.get){var o=n.get("acl")||n.get("@nocobase/plugin-acl");(null==o||null==(r=o.settingsUI)?void 0:r.addPermissionsTab)&&o.settingsUI.addPermissionsTab({key:"multi-portals",label:String(t("Portals")),sort:22,componentLoader:function(){return y.e("778").then(y.bind(y,177))}})}}(this.app,function(t){return e.t(t)}),!function(e,t){if(e.entryActionManager){var r=(0,d.G)(e),n=!0,o=!1,a=void 0;try{for(var i,l=g[Symbol.iterator]();!(n=(i=l.next()).done);n=!0){var u=i.value;e.entryActionManager.register("multi-portal:portals:".concat(u),{scope:u,sort:200,provider:function(e){return(function(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var a=e.apply(t,r);function i(e){v(a,n,o,i,l,"next",e)}function l(e){v(a,n,o,i,l,"throw",e)}i(void 0)})}})(function(){var n,o,a,i,l,u,c,s;return function(e,t){var r,n,o,a={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),l=Object.defineProperty;return l(i,"next",{value:u(0)}),l(i,"throw",{value:u(1)}),l(i,"return",{value:u(2)}),"function"==typeof Symbol&&l(i,Symbol.iterator,{value:function(){return this}}),i;function u(l){return function(u){var c=[l,u];if(r)throw TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(a=0)),a;)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 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(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],n=0}finally{r=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(f){switch(f.label){case 0:return[4,r.load()];case 1:var p;if(n=f.sent(),(a=(o=function(e){var t=function e(t){var r,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new Set;if(!O(t)||o.has(t))return n;o.add(t);var a=O(t)?t:null;return a&&(n.push(a),e(a.layoutContext,n,o),e(null==(r=a.model)?void 0:r.context,n,o)),n}(e),r=!0,n=!1,o=void 0;try{for(var a,i=t[Symbol.iterator]();!(r=(a=i.next()).done);r=!0){var l,u=a.value,c=j(null==(l=u.layout)?void 0:l.layoutType);if(c)return c}}catch(e){n=!0,o=e}finally{try{r||null==i.return||i.return()}finally{if(n)throw o}}if(t.some(function(e){var t,r,n;return!0===e.isMobileLayout||(null==(t=e.inputArgs)?void 0:t.isMobileLayout)===!0||(null==(n=e.view)||null==(r=n.inputArgs)?void 0:r.isMobileLayout)===!0}))return P;var s=!0,f=!1,p=void 0;try{for(var d,y=t[Symbol.iterator]();!(s=(d=y.next()).done);s=!0){var b=d.value,v=function(e){var t=[null==e?void 0:e.layoutModelClass,null==e?void 0:e.rootPageModelClass,null==e?void 0:e.childPageModelClass];return t.some(k)?P:t.some(j)?m:null}(b.layout);if(v)return v}}catch(e){f=!0,p=e}finally{try{s||null==y.return||y.return()}finally{if(f)throw p}}return t.some(function(e){var t,r,n;return!1===e.isMobileLayout||(null==(t=e.inputArgs)?void 0:t.isMobileLayout)===!1||(null==(n=e.view)||null==(r=n.inputArgs)?void 0:r.isMobileLayout)===!1})?m:null}(e))?n.portals.filter(function(e){return e.layout===o}):n.portals).length<=1)return[2,[]];return i=new Map(n.apps.map(function(e){return[e.name,e]})),l=function(e){var t=new Map,r=!0,n=!1,o=void 0;try{for(var a,i=e[Symbol.iterator]();!(r=(a=i.next()).done);r=!0){var l=a.value,u=M(l);t.set(u,(t.get(u)||0)+1)}}catch(e){n=!0,o=e}finally{try{r||null==i.return||i.return()}finally{if(n)throw o}}return t}(a),p=n.apps,u=p.length>0||x(a.map(function(e){return e.appName})).length>1,c=function(e,r){var n=u||(l.get(M(e))||0)>1?function(e,t,r){var n=M(e),o=A(e.appName,t,r);return o?"".concat(o," / ").concat(n):n}(e,r,t):M(e),o=function(e,t,r){var n=M(e),o=A(e.appName,t,r);return o?"".concat(o," / ").concat(n):n}(e,r,t);return function(e,t,r,n){var o=M(e);return{key:"multi-portal:portal:".concat(e.appName,":").concat(e.uid||e.routePath),label:o,createModelOptions:{use:"PortalEntryActionModel",props:{title:r,icon:e.icon||"PartitionOutlined",entryPortalTitle:r,entryPortalTargetTitle:n,entryPortal:e,entryPortalApp:t}}}}(e,r,n,o)},s=u?(function(e,t){var r=x(t.map(function(e){return e.appName})),n=e.map(function(e){return e.name});return x(h(r.includes(S)?[S]:[]).concat(h(n),h(r)))})(n.apps,a).map(function(e){var r=i.get(e),n=a.filter(function(t){return t.appName===e});return n.length?{key:"multi-portal:app:".concat(e),label:A(e,r,t),children:n.map(function(e){return c(e,r)})}:null}).filter(function(e){return!!e}):a.map(function(e){return c(e,i.get(e.appName))}),[2,s.length?[{key:"multi-portal:portals",label:t("Portals"),children:s}]:[]]}})})()}})}}catch(e){o=!0,a=e}finally{try{n||null==l.return||l.return()}finally{if(o)throw a}}}}(this.app,function(t){return String(e.t(t))}),"settings."===this.pluginSettingsManager.getRouteName(""))return[2];return[4,(n=this.app,F(function(){var e,t,r;return J(this,function(o){switch(o.label){case 0:var a;return[4,(a=n.apiClient,F(function(){var e,t,r;return J(this,function(n){switch(n.label){case 0:return[4,a.request({url:"multiPortals:listEnabled",method:"get",skipNotify:!0})];case 1:return[2,Array.isArray(r=null==(t=n.sent())||null==(e=t.data)?void 0:e.data)?r:[]]}})})())];case 1:return e=o.sent(),t=new Set(function(e,t){var r=[],n=new Set(e.listLayouts().map(function(e){return e.uid})),o=new Set,a=new Set,l=!0,u=!1,c=void 0;try{for(var s,f=t[Symbol.iterator]();!(l=(s=f.next()).done);l=!0){var p,d=s.value;if(d.enabled&&Q(d)){var y=function(e){if(!e.enabled||!Q(e))return null;var t,r,n,o=(null==(n=e.uiLayout)?void 0:n.layoutType)||"",a=o===Z&&e.uid===i.Jx?Y:V[o];return a?(t=function(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){X(e,t,r[t])})}return e}({routeName:e.portalName,routePath:e.routePath,uid:e.uid},a),r=r={authCheck:e.authCheck},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t):null}(d);if(!y)throw Error("Portal '".concat(d.uid,"' uses an unknown UI layout type '").concat((null==(p=d.uiLayout)?void 0:p.layoutType)||"","'."));if(o.has(d.uid)||n.has(d.uid))throw Error("Duplicate portal uid '".concat(d.uid,"'."));if(a.has(y.routeName)||e.hasLayout(y.routeName))throw Error("Duplicate portal route name '".concat(y.routeName,"'."));o.add(d.uid),a.add(y.routeName),r.push({options:y,record:d})}}}catch(e){u=!0,c=e}finally{try{l||null==f.return||f.return()}finally{if(u)throw c}}var b=[],v=!0,h=!1,g=void 0;try{for(var m,w=r[Symbol.iterator]();!(v=(m=w.next()).done);v=!0){var P=m.value,S=P.options,O=P.record;e.registerLayout(S),b.push(O.uid)}}catch(e){h=!0,g=e}finally{try{v||null==w.return||w.return()}finally{if(h)throw g}}return b}(n.layoutManager,e)),r=e.filter(function(e){return t.has(e.uid)}).map(function(e){var t;return{cacheKey:(t=e.uid,"".concat("portal:").concat(t)),portalUid:e.uid}}),!function(e,t){if(e&&(void 0===e?"undefined":U(e))==="object"){if(e[D]){e[D].portalScopes=t;return}var r=K(e),n={loadingPromises:new Map,layoutScopes:new Map,originalActivateLayout:e.activateLayout.bind(e),originalApiRequest:r.request.bind(r),originalCreateRoute:e.createRoute.bind(e),originalDeleteRoute:e.deleteRoute.bind(e),originalEnsureAccessibleLoaded:e.ensureAccessibleLoaded.bind(e),originalMoveRoute:e.moveRoute.bind(e),originalRefreshAccessible:e.refreshAccessible.bind(e),originalUpdateRoute:e.updateRoute.bind(e),portalScopes:t,refreshRequestIds:new Map,scopeStack:[]};e[D]=n,r.request=function(e){return n.originalApiRequest(function(e,t){var r,n=G(t);if(!n.portalUid||!("string"==typeof e.url&&e.url.replace(/^\/+/,"").startsWith("desktopRoutes:")))return e;var o=(r=e.params)&&(void 0===r?"undefined":U(r))==="object"&&!Array.isArray(r)?T({},e.params):{};return delete o.layout,delete o.portal,I(T({},e),{params:I(T({},o),{portal:n.portalUid})})}(e,n))},e.activateLayout=function(e){var t,r,o,a,i,l,u=(t="string"==typeof(l=null==e?void 0:e.uid)&&l.trim()?l:"admin-layout-model",r=n.portalScopes,o=n.layoutScopes,(i=(a=new Map(r().filter(function(e){return"string"==typeof(null==e?void 0:e.portalUid)&&!!e.portalUid.trim()&&"string"==typeof e.cacheKey&&!!e.cacheKey.trim()}).map(function(e){return[e.portalUid,e]}))).get(t))||function(e,t,r){var n=new Set(L(t.values()).map(function(e){return e.cacheKey})),o=new Set(L(r.entries()).filter(function(t){return q(t,1)[0]!==e}).map(function(e){return q(e,2)[1].cacheKey})),a=r.get(e);if(a&&!n.has(a.cacheKey)&&!o.has(a.cacheKey))return a;for(var i=e;n.has(i)||o.has(i);)i="layout:".concat(i);var l={cacheKey:i,uiLayoutUid:e};return r.set(e,l),l}(t,a,o)),c=Symbol("multi-portal-route-scope"),s=n.originalActivateLayout(I(T({},e),{uid:u.cacheKey}));return n.scopeStack.push({deactivate:s,scope:u,token:c}),function(){var e=n.scopeStack.findIndex(function(e){return e.token===c});e>=0&&n.scopeStack.splice(e,1),s()}},e.refreshAccessible=function(){return R(function(){var t;return B(this,function(r){return W(t=G(n))?[2,$(e,t,n)]:[2,n.originalRefreshAccessible()]})})()},e.ensureAccessibleLoaded=function(){return R(function(){var t,r,o;return B(this,function(a){return W(t=G(n))?e.isAccessibleLoaded()?[2,e.listAccessible()]:(r=n.loadingPromises.get(t.cacheKey))?[2,r]:(o=$(e,t,n).finally(function(){n.loadingPromises.get(t.cacheKey)===o&&n.loadingPromises.delete(t.cacheKey)}),n.loadingPromises.set(t.cacheKey,o),[2,o]):[2,n.originalEnsureAccessibleLoaded()]})})()},e.createRoute=function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return R(function(){var o,a,i,l;return B(this,function(u){switch(u.label){case 0:if(!(o=G(n)).portalUid)return[2,n.originalCreateRoute(t,r)];return i=void 0===(a=r.refreshAfterMutation)||a,[4,K(e).resource("desktopRoutes").create({values:z(t),portal:o.portalUid})];case 1:if(l=u.sent(),!i)return[3,3];return[4,e.refreshAccessible()];case 2:u.sent(),u.label=3;case 3:return[2,l]}})})()},e.updateRoute=function(t,r){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return R(function(){var a,i,l,u,c;return B(this,function(s){switch(s.label){case 0:if(!(a=G(n)).portalUid)return[2,n.originalUpdateRoute(t,r,o)];return l=void 0===(i=o.refreshAfterMutation)||i,u=z(r),[4,K(e).resource("desktopRoutes").update(Array.isArray(t)?{filter:{id:{$in:t}},values:u,portal:a.portalUid}:{filterByTk:t,values:u,portal:a.portalUid})];case 1:if(c=s.sent(),!l)return[3,3];return[4,e.refreshAccessible()];case 2:s.sent(),s.label=3;case 3:return[2,c]}})})()},e.deleteRoute=function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return R(function(){var o,a,i,l;return B(this,function(u){switch(u.label){case 0:if(!(o=G(n)).portalUid)return[2,n.originalDeleteRoute(t,r)];return i=void 0===(a=r.refreshAfterMutation)||a,[4,K(e).resource("desktopRoutes").destroy({filterByTk:t,portal:o.portalUid})];case 1:if(l=u.sent(),!i)return[3,3];return[4,e.refreshAccessible()];case 2:u.sent(),u.label=3;case 3:return[2,l]}})})()},e.moveRoute=function(t){return R(function(){var r,o,a,i,l;return B(this,function(u){switch(u.label){case 0:if(!(r=G(n)).portalUid)return[2,n.originalMoveRoute(t)];return a=void 0===(o=t.refreshAfterMove)||o,i=C(t,["refreshAfterMove"]),[4,K(e).resource("desktopRoutes").move(I(T({},i),{portal:r.portalUid}))];case 1:if(l=u.sent(),!a)return[3,3];return[4,e.refreshAccessible()];case 2:u.sent(),u.label=3;case 3:return[2,l]}})})()}}}(function(e){if(null==(t=e.context)?void 0:t.routeRepository)return e.context.routeRepository;var t,r,n=null==(r=e.flowEngine)?void 0:r.context;if(n&&(void 0===n?"undefined":n&&"u">typeof Symbol&&n.constructor===Symbol?"symbol":typeof n)=="object"&&"routeRepository"in n)return n.routeRepository}(n),function(){return r}),[2]}})})())];case 1:return r.sent(),this.router.add("root",{path:"/",Component:p,authCheck:!0}),[2]}})},function(){var t=this,r=arguments;return new Promise(function(n,o){var a=e.apply(t,r);function i(e){ed(a,n,o,i,l,"next",e)}function l(e){ed(a,n,o,i,l,"throw",e)}i(void 0)})}).call(this)}}],function(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}(r.prototype,t),r}(eh(t.Plugin))}(),w}()});
10
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("ahooks"),require("@nocobase/client-v2"),require("react-router-dom"),require("@nocobase/plugin-ui-layout/client-v2"),require("react"),require("antd"),require("antd-style"),require("@nocobase/flow-engine"),require("@ant-design/icons")):"function"==typeof define&&define.amd?define("@nocobase/plugin-multi-portal/client-v2",["ahooks","@nocobase/client-v2","react-router-dom","@nocobase/plugin-ui-layout/client-v2","react","antd","antd-style","@nocobase/flow-engine","@ant-design/icons"],e):"object"==typeof exports?exports["@nocobase/plugin-multi-portal/client-v2"]=e(require("ahooks"),require("@nocobase/client-v2"),require("react-router-dom"),require("@nocobase/plugin-ui-layout/client-v2"),require("react"),require("antd"),require("antd-style"),require("@nocobase/flow-engine"),require("@ant-design/icons")):t["@nocobase/plugin-multi-portal/client-v2"]=e(t.ahooks,t["@nocobase/client-v2"],t["react-router-dom"],t["@nocobase/plugin-ui-layout/client-v2"],t.react,t.antd,t["antd-style"],t["@nocobase/flow-engine"],t["@ant-design/icons"])}(self,function(t,e,r,n,o,a,i,l,u){return function(){"use strict";var c,s,f,p={337:function(t,e,r){r.d(e,{G:function(){return u}});var n=r(694);function o(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function a(t){var e=t||{};return{apps:Array.isArray(e.apps)?e.apps:[],portals:Array.isArray(e.portals)?e.portals:[]}}var i=function(){var t;function e(t){if(!(this instanceof e))throw TypeError("Cannot call a class as a function");o(this,"app",void 0),o(this,"payload",void 0),o(this,"loading",void 0),o(this,"revision",void 0),o(this,"loaded",void 0),o(this,"request",void 0),o(this,"requestId",void 0),this.app=t,this.payload=a(null),this.loading=!1,this.revision=0,this.loaded=!1,this.requestId=0,(0,n.define)(this,{payload:n.observable.ref,loading:n.observable.ref,revision:n.observable.ref})}return t=[{key:"load",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.app.apiClient;return this.loaded&&!this.request?Promise.resolve(this.payload):this.requestPortals(t)}},{key:"reload",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.app.apiClient;return this.requestPortals(t,{force:!0,invalidateEntryActions:!0})}},{key:"requestPortals",value:function(t){var e=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!this.request||r.force){var n,o=++this.requestId;this.loading=!0,this.request=((null==(n=t.silent)?void 0:n.call(t))||t).request({url:"app:getPortals",skipNotify:!0}).then(function(t){var n,i,l,u=a(null!=(n=null==t||null==(i=t.data)?void 0:i.data)?n:null==t?void 0:t.data);return o===e.requestId&&(e.payload=u,e.loaded=!0,e.revision+=1,r.invalidateEntryActions&&(null==(l=e.app.entryActionManager)||l.invalidate())),u}).catch(function(t){throw t}).finally(function(){o===e.requestId&&(e.loading=!1,e.request=void 0)})}return this.request}}],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)}}(e.prototype,t),e}(),l=new WeakMap;function u(t){var e=l.get(t);return e||(e=new i(t),l.set(t,e)),e}},143:function(t,e,r){r.d(e,{Dj:function(){return l},kj:function(){return i},MZ:function(){return u}});var n=r(694),o=JSON.parse('{"UU":"@nocobase/plugin-multi-portal"}');function a(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 i(){var t=(0,n.useFlowEngine)();return function(e,r){return t.context.t(e,a({ns:[o.UU,"client"]},r))}}function l(t){return a({ns:[o.UU,"client"]},t)}function u(t){return(0,n.tExpr)(t,{ns:[o.UU,"client"]})}},756:function(t,e,r){r.d(e,{Q:function(){return w},u:function(){return g}});var n=r(485);function o(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function a(t){return function(t){if(Array.isArray(t))return o(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 o(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 o(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.")}()}var i="no-code",l="/settings",u=function(t){var e=null==t?void 0:t.trim();return e&&"/"!==e?"/".concat(e.replace(/^\/+/,"")):"/"},c=function(t){var e=u(t).replace(/\/+$/,"");return""===e||"/"===e?"":e},s=function(t,e){var r=c(t),n=u(e);return!r||n===r||n.startsWith("".concat(r,"/"))?n:"".concat(r).concat(n)};function f(t){return"ai"===t?"ai":i}function p(t){return"ai"===f(t)?"/x":"/".concat((0,n.getModernClientPrefix)())}function d(){return Array.from(new Set([p(i),"/x","/v"]))}function y(t,e){var r=!(arguments.length>2)||void 0===arguments[2]||arguments[2],n=c(t),o=p(e);if(!n)return o;var i=r?n.match(/^(.*)\/(apps|_app)\/([^/]+)$/):null;if(i){var u=i[1]||"",s=!0,y=!1,v=void 0;try{for(var b,h=a(d()).concat([l])[Symbol.iterator]();!(s=(b=h.next()).done);s=!0){var g=b.value;if(u===g){u="";break}if(u.endsWith(g)){u=u.slice(0,-g.length);break}}}catch(t){y=!0,v=t}finally{try{s||null==h.return||h.return()}finally{if(y)throw v}}var m="ai"===f(e)?"apps":i[2];return"".concat(u).concat(o,"/").concat(m,"/").concat(i[3])}var w=!0,P=!1,S=void 0;try{for(var O,j=d()[Symbol.iterator]();!(w=(O=j.next()).done);w=!0){var k=O.value;if(n===k)return o;if(n.endsWith(k))return"".concat(n.slice(0,-k.length)).concat(o)}}catch(t){P=!0,S=t}finally{try{w||null==j.return||j.return()}finally{if(P)throw S}}return"".concat(n).concat(o)}function v(t,e,r){var n=!(arguments.length>3)||void 0===arguments[3]||arguments[3],o=u(t),i=!0,l=!1,s=void 0;try{for(var p,v=[y(e,r,n),y(e,"ai"===f(r)?"no-code":"ai",n)].concat(a(d()))[Symbol.iterator]();!(i=(p=v.next()).done);i=!0){var b=p.value;o=function(t,e){var r=c(e),n=u(t);return r?n===r?"/":n.startsWith("".concat(r,"/"))?n.slice(r.length)||"/":n:n}(o,b)}}catch(t){l=!0,s=t}finally{try{i||null==v.return||v.return()}finally{if(l)throw s}}return o}function b(t){return"function"==typeof(null==t?void 0:t.getPublicPath)}function h(t,e){var r,n=null==t||null==(r=t.getPublicPath)?void 0:r.call(t);return!("main"===(t&&"name"in t&&"string"==typeof t.name?t.name:void 0)&&n&&c(n)===c(e))}function g(t,e,r){var o,a,i,l,f=e.trim();if(/^[a-z][a-z\d+\-.]*:\/\//i.test(f)||f.startsWith("//"))return f;var p=(null==t||null==(a=t.router)||null==(o=a.getBasename)?void 0:o.call(a))||(null==t||null==(i=t.router)?void 0:i.basename);if(p){var d=b(t)?(0,n.getV2EffectiveBasePath)({getPublicPath:t.getPublicPath,router:{getBasename:function(){var e,r,n;return(null==(r=t.router)||null==(e=r.getBasename)?void 0:e.call(r))||(null==(n=t.router)?void 0:n.basename)}}}):p,g=h(t,d);return s(y(d,r,g),v(f,d,r,g))}if(null==t?void 0:t.getRouteUrl){var m,w,P=t.getRouteUrl(f),S=(m=u(P))===(w=u(f))?"":m.endsWith(w)?c(m.slice(0,-w.length)):void 0;if(void 0!==S){var O=h(t,S);return s(y(S,r,O),v(f,S,r,O))}return u(P)}var j=null==t||null==(l=t.getPublicPath)?void 0:l.call(t),k=h(t,j);return s(y(j,r,k),v(f,j,r,k))}function m(t){var e=c(t),r=Array.from(new Set([p(i),"/v"])),n=!0,o=!1,a=void 0;try{for(var u,f=r[Symbol.iterator]();!(n=(u=f.next()).done);n=!0){var d=u.value;if(e===d)return l;var y=e.match(new RegExp("^(.*)".concat(d,"/(apps|_app)/([^/]+)$")));if(y)return"".concat(y[1]).concat(l,"/").concat(y[2],"/").concat(y[3]);if(e.endsWith(d))return"".concat(e.slice(0,-d.length)).concat(l)}}catch(t){o=!0,a=t}finally{try{n||null==f.return||f.return()}finally{if(o)throw a}}return s(e,l)}function w(t){var e,r,o,a,i=(null==t||null==(r=t.router)||null==(e=r.getBasename)?void 0:e.call(r))||(null==t||null==(o=t.router)?void 0:o.basename);return i?m(b(t)?(0,n.getV2EffectiveBasePath)({getPublicPath:t.getPublicPath,router:{getBasename:function(){var e,r,n;return(null==(r=t.router)||null==(e=r.getBasename)?void 0:e.call(r))||(null==(n=t.router)?void 0:n.basename)}}}):i):m(null==t||null==(a=t.getPublicPath)?void 0:a.call(t))}},624:function(t,e,r){r.d(e,{Jx:function(){return n},Xc:function(){return a}});var n="__default_mobile__",o=new Set(["__default_admin__",n]);function a(t){return"string"==typeof t&&o.has(t)}},375:function(t){t.exports=u},485:function(t){t.exports=e},694:function(t){t.exports=l},69:function(t){t.exports=n},625:function(e){e.exports=t},59:function(t){t.exports=a},235:function(t){t.exports=i},155:function(t){t.exports=o},442:function(t){t.exports=r}},d={};function y(t){var e=d[t];if(void 0!==e)return e.exports;var r=d[t]={exports:{}};return p[t](r,r.exports,y),r.exports}y.m=p,y.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return y.d(e,{a:e}),e},y.d=function(t,e){for(var r in e)y.o(e,r)&&!y.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},y.f={},y.e=function(t){return Promise.all(Object.keys(y.f).reduce(function(e,r){return y.f[r](t,e),e},[]))},y.u=function(t){return""+t+"."+({354:"7be267ae5d61a878",499:"ef2ff0c022687485",556:"37df9197ce5c3452",778:"c98e7ec542d931fe"})[t]+".js"},y.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(t){if("object"==typeof window)return window}}(),y.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},v={},y.l=function(t,e,r,n){if(v[t])return void v[t].push(e);if(void 0!==r)for(var o,a,i=document.getElementsByTagName("script"),l=0;l<i.length;l++){var u=i[l];if(u.getAttribute("src")==t||u.getAttribute("data-rspack")=="@nocobase/plugin-multi-portal/client-v2:"+r){o=u;break}}o||(a=!0,(o=document.createElement("script")).timeout=120,y.nc&&o.setAttribute("nonce",y.nc),o.setAttribute("data-rspack","@nocobase/plugin-multi-portal/client-v2:"+r),o.src=t),v[t]=[e];var c=function(e,r){o.onerror=o.onload=null,clearTimeout(s);var n=v[t];if(delete v[t],o.parentNode&&o.parentNode.removeChild(o),n&&n.forEach(function(t){return t(r)}),e)return e(r)},s=setTimeout(c.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=c.bind(null,o.onerror),o.onload=c.bind(null,o.onload),a&&document.head.appendChild(o)},y.r=function(t){"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},y.g.importScripts&&(b=y.g.location+"");var v,b,h=y.g.document;if(!b&&h&&(h.currentScript&&"SCRIPT"===h.currentScript.tagName.toUpperCase()&&(b=h.currentScript.src),!b)){var g=h.getElementsByTagName("script");if(g.length)for(var m=g.length-1;m>-1&&(!b||!/^http(s?):/.test(b));)b=g[m--].src}if(!b)throw Error("Automatic publicPath is not supported in this browser");y.p=b.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),c={889:0},y.f.j=function(t,e){var r=y.o(c,t)?c[t]:void 0;if(0!==r)if(r)e.push(r[2]);else{var n=new Promise(function(e,n){r=c[t]=[e,n]});e.push(r[2]=n);var o=y.p+y.u(t),a=Error();y.l(o,function(e){if(y.o(c,t)&&(0!==(r=c[t])&&(c[t]=void 0),r)){var n=e&&("load"===e.type?"missing":e.type),o=e&&e.target&&e.target.src;a.message="Loading chunk "+t+" failed.\n("+n+": "+o+")",a.name="ChunkLoadError",a.type=n,a.request=o,r[1](a)}},"chunk-"+t,t)}},s=function(t,e){var r,n,o=e[0],a=e[1],i=e[2],l=0;if(o.some(function(t){return 0!==c[t]})){for(r in a)y.o(a,r)&&(y.m[r]=a[r]);i&&i(y)}for(t&&t(e);l<o.length;l++)n=o[l],y.o(c,n)&&c[n]&&c[n][0](),c[n]=0},(f=self.webpackChunk_nocobase_plugin_multi_portal_client_v2=self.webpackChunk_nocobase_plugin_multi_portal_client_v2||[]).forEach(s.bind(null,0)),f.push=s.bind(null,f.push.bind(f));var w={};return!function(){var t="",e="u">typeof document?document.currentScript:null;if(e&&e.src){var r=e.src.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"");r.indexOf("/static/plugins/@nocobase/plugin-multi-portal/dist/client-v2/")>=0&&(t=r.replace(/\/[^\/]+$/,"/"))}if(!t){var n=window.__webpack_public_path__||"";n&&("/"!==n.charAt(n.length-1)&&(n+="/"),t=n+"static/plugins/@nocobase/plugin-multi-portal/dist/client-v2/")}if(!t){var o=window.__nocobase_modern_client_prefix__||"v",a="/"+(o=String(o).replace(/^\/+|\/+$/g,"")||"v")+"/";if(!(t=window.__nocobase_public_path__||"")&&window.location&&window.location.pathname){var i=window.location.pathname||"/",l=i.indexOf(a);t=l>=0?i.slice(0,l+1):"/"}t&&(t=t.replace(RegExp("/"+o+"/?$"),"/")),t||(t="/"),"/"!==t.charAt(t.length-1)&&(t+="/"),t+="static/plugins/@nocobase/plugin-multi-portal/dist/client-v2/"}y.p=t}(),!function(){y.r(w),y.d(w,{default:function(){return th}});var t,e=y(485),r=y(155),n=y.n(r),o=y(442),a=y(756);function i(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function l(t,e,r,n,o,a,i){try{var l=t[a](i),u=l.value}catch(t){r(t);return}l.done?e(u):Promise.resolve(u).then(n,o)}function u(t){return"".concat(t.search||"").concat(t.hash||"")}function c(t){var c,s=t.runtimeRegistrationFailed,f=void 0!==s&&s,p=(0,e.useApp)(),d=(0,o.useLocation)(),y=function(t){if(Array.isArray(t))return t}(c=(0,r.useState)())||function(t){var e,r,n=null==t?null:"u">typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var o=[],a=!0,i=!1;try{for(n=n.call(t);!(a=(e=n.next()).done)&&(o.push(e.value),2!==o.length);a=!0);}catch(t){i=!0,r=t}finally{try{a||null==n.return||n.return()}finally{if(i)throw r}}return o}}(c)||function(t){if(t){if("string"==typeof t)return i(t,2);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 i(t,2)}}(c)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),v=y[0],b=y[1],h=(0,r.useRef)();return((0,r.useEffect)(function(){if(f)return void window.location.replace("".concat((0,a.Q)(p)).concat(u(d)));var t,e=!0;return(t=function(){var t,r,n;return function(t,e){var r,n,o,a={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),l=Object.defineProperty;return l(i,"next",{value:u(0)}),l(i,"throw",{value:u(1)}),l(i,"return",{value:u(2)}),"function"==typeof Symbol&&l(i,Symbol.iterator,{value:function(){return this}}),i;function u(l){return function(u){var c=[l,u];if(r)throw TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(a=0)),a;)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 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(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=e.call(t,a)}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}}}}(this,function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),[4,p.apiClient.request({url:"multiPortals:getDefault",method:"get",skipAuth:!0,skipNotify:!0})];case 1:var i;if(r=o.sent(),!e)return[2];if((i=n=null==r||null==(t=r.data)?void 0:t.data)&&(void 0===i?"undefined":i&&"u">typeof Symbol&&i.constructor===Symbol?"symbol":typeof i)=="object"&&"string"==typeof i.uid&&i.uid.length>0&&("no-code"===i.portalType||"ai"===i.portalType)&&"string"==typeof i.routePath&&i.routePath.trim().length>0){if("no-code"===n.portalType&&!p.layoutManager.listLayouts().some(function(t){return t.uid===n.uid}))return window.location.replace("".concat((0,a.Q)(p)).concat(u(d))),[2];return b(n),[2]}return window.location.replace("".concat((0,a.Q)(p)).concat(u(d))),[3,3];case 2:if(o.sent(),!e)return[2];return window.location.replace("".concat((0,a.Q)(p)).concat(u(d))),[3,3];case 3:return[2]}})},function(){var e=this,r=arguments;return new Promise(function(n,o){var a=t.apply(e,r);function i(t){l(a,n,o,i,u,"next",t)}function u(t){l(a,n,o,i,u,"throw",t)}i(void 0)})})(),function(){e=!1}},[p,d,f]),(0,r.useEffect)(function(){if(v&&"ai"===v.portalType){var t="".concat((0,a.u)(p,v.routePath,v.portalType)).concat(u(d));h.current!==t&&(h.current=t,window.location.replace(t))}},[p,d,v]),v&&"ai"!==v.portalType)?n().createElement(o.Navigate,{replace:!0,to:{pathname:v.routePath,search:d.search,hash:d.hash}}):null}var s=y(337);function f(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function p(t,e,r,n,o,a,i){try{var l=t[a](i),u=l.value}catch(t){r(t);return}l.done?e(u):Promise.resolve(u).then(n,o)}function d(t){return function(t){if(Array.isArray(t))return f(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 f(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 f(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.")}()}var v=["action-panel","app-switcher"],b="desktop",h="mobile",g="main";function m(t){return!!t&&(void 0===t?"undefined":t&&"u">typeof Symbol&&t.constructor===Symbol?"symbol":typeof t)=="object"}function P(t){return"string"==typeof t&&t?t:null}function S(t){var e=P(t);return!!e&&e.toLowerCase().includes(h)}function O(t){return t.title||t.routePath}function j(t){var e=new Set;return t.filter(function(t){return!e.has(t)&&(e.add(t),!0)})}function k(t,e,r){return t===g?r("Main application"):(null==e?void 0:e.title)||t}var M=y(624);function x(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function A(t,e,r,n,o,a,i){try{var l=t[a](i),u=l.value}catch(t){r(t);return}l.done?e(u):Promise.resolve(u).then(n,o)}function E(t){return function(){var e=this,r=arguments;return new Promise(function(n,o){var a=t.apply(e,r);function i(t){A(a,n,o,i,l,"next",t)}function l(t){A(a,n,o,i,l,"throw",t)}i(void 0)})}}function R(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 _(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 T(t,e){if(null==t)return{};var r,n,o,a={};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)&&(a[n]=t[n]);return a}if(a=function(t,e){if(null==t)return{};var r,n,o={},a=Object.getOwnPropertyNames(t);for(n=0;n<a.length;n++)r=a[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)&&(a[n]=t[n]);return a}function I(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r,n,o=null==t?null:"u">typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(t);!(i=(r=o.next()).done)&&(a.push(r.value),!e||a.length!==e);i=!0);}catch(t){l=!0,n=t}finally{try{i||null==o.return||o.return()}finally{if(l)throw n}}return a}}(t,e)||L(t,e)||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 C(t){return function(t){if(Array.isArray(t))return x(t)}(t)||function(t){if("u">typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||L(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 q(t){return t&&"u">typeof Symbol&&t.constructor===Symbol?"symbol":typeof t}function L(t,e){if(t){if("string"==typeof t)return x(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if("Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return x(t,e)}}function U(t,e){var r,n,o,a={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),l=Object.defineProperty;return l(i,"next",{value:u(0)}),l(i,"throw",{value:u(1)}),l(i,"return",{value:u(2)}),"function"==typeof Symbol&&l(i,Symbol.iterator,{value:function(){return this}}),i;function u(l){return function(u){var c=[l,u];if(r)throw TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(a=0)),a;)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 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(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=e.call(t,a)}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}}}}var B=Symbol("multiPortalRouteRepositoryState");function N(t){var e;return(null==(e=t.scopeStack[t.scopeStack.length-1])?void 0:e.scope)||{cacheKey:"admin-layout-model",uiLayoutUid:"admin-layout-model"}}function D(t){return t.getAPIClient()}function W(t){return"string"==typeof t.portalUid}function K(t){var e=t.children;return R({},(t.multiPortals,t.uiLayouts,T(t,["children","multiPortals","uiLayouts"])),Array.isArray(e)?{children:e.map(function(t){return K(t)})}:{})}function z(t,e,r){return E(function(){var n,o,a,i;return U(this,function(l){switch(l.label){case 0:return o=(r.refreshRequestIds.get(e.cacheKey)||0)+1,r.refreshRequestIds.set(e.cacheKey,o),[4,D(t).request({url:"/desktopRoutes:listAccessible",params:{tree:!0,sort:"sort",portal:e.portalUid}})];case 1:return i=Array.isArray(null==(a=l.sent())||null==(n=a.data)?void 0:n.data)?a.data.data:[],r.refreshRequestIds.get(e.cacheKey)===o&&t.setRoutes(i,e.cacheKey),[2,i]}})})()}function G(t,e,r,n,o,a,i){try{var l=t[a](i),u=l.value}catch(t){r(t);return}l.done?e(u):Promise.resolve(u).then(n,o)}function $(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var H="mobile",F=($(t={},"desktop",{layoutModelClass:"AdminLayoutModel"}),$(t,H,{layoutModelClass:"MultiPortalMobileLayoutModel",rootPageModelClass:"MultiPortalMobileRootPageModel",childPageModelClass:"MultiPortalMobileChildPageModel"}),t),X={layoutModelClass:"MobileLayoutModel",rootPageModelClass:"MobileRootPageModel",childPageModelClass:"MobileChildPageModel"};function Q(t){return"no-code"===(t.portalType||"no-code")}var J=y(625),Z=y(59),V=y(235),Y=y(143);function tt(t,e,r,n,o,a,i){try{var l=t[a](i),u=l.value}catch(t){r(t);return}l.done?e(u):Promise.resolve(u).then(n,o)}function te(t){return(te=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function tr(t,e){return(tr=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function tn(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(tn=function(){return!!t})()}var to=Z.Typography.Text;function ta(t){var e=t.controlHeightLG+t.paddingSM+t.paddingXXS,r=t.paddingLG-t.paddingXXS;return{avatarSize:e,cardHeight:e+2*r,gridMinColumnWidth:9*t.controlHeightLG,iconSize:t.fontSizeHeading3+t.marginXXS,paddingBlock:r}}var ti=(0,V.createStyles)(function(t){var e=t.token;return{portalItem:{"&:hover":{background:e.colorBgTextHover,borderColor:e.colorBorder,boxShadow:e.boxShadowTertiary,color:e.colorText,transform:"translateY(-".concat(e.lineWidth,"px)")},"&:focus-visible":{outline:"".concat(e.controlOutlineWidth,"px solid ").concat(e.colorPrimaryBorder),outlineOffset:e.controlOutlineWidth},".ant-typography":{color:"inherit"}}}});function tl(t){var e;return(null==(e=t.title)?void 0:e.trim())||t.uid}function tu(t){var r,o,a,i,l=t.record,u=t.token,c=ta(u),s=null==(i=l.icon)?void 0:i.trim(),f={alignItems:"center",background:u.colorFillTertiary,borderRadius:u.borderRadiusLG,color:u.colorText,display:"flex",flex:"0 0 ".concat(c.avatarSize,"px"),fontSize:u.fontSizeHeading3,height:c.avatarSize,justifyContent:"center",lineHeight:1,width:c.avatarSize};if(s)return n().createElement(Z.Avatar,{shape:"square",size:c.avatarSize,style:f,icon:null},n().createElement(e.Icon,{type:s,"aria-hidden":!0,style:{color:u.colorPrimary,fontSize:c.iconSize}}));var p=(r=[{background:u.colorPrimaryBg,color:u.colorPrimary},{background:u.colorSuccessBg,color:u.colorSuccess},{background:u.colorWarningBg,color:u.colorWarning},{background:u.colorErrorBg,color:u.colorError},{background:u.colorInfoBg,color:u.colorInfo}])[function(t,e){var r=0,n=!0,o=!1,a=void 0;try{for(var i,l=t[Symbol.iterator]();!(n=(i=l.next()).done);n=!0){var u=i.value;r=(31*r+u.charCodeAt(0))%0x7fffffff}}catch(t){o=!0,a=t}finally{try{n||null==l.return||l.return()}finally{if(o)throw a}}return Math.abs(r)%e}("".concat(l.uid,":").concat(l.title||""),r.length)];return n().createElement(Z.Avatar,{"aria-hidden":!0,shape:"square",size:c.avatarSize,style:(o=function(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}({},f),a=a={background:p.background,color:p.color,fontWeight:u.fontWeightStrong},Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(a)):(function(t){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e.push.apply(e,r)}return e})(Object(a)).forEach(function(t){Object.defineProperty(o,t,Object.getOwnPropertyDescriptor(a,t))}),o)},(tl(l).trim()[0]||"P").toUpperCase())}function tc(t){var e=t.model,o=Z.theme.useToken().token,i=ti().styles,l=(0,r.useMemo)(function(){return ta(o)},[o]),u=e.context.app,c=e.translate,s=(0,J.useRequest)(function(){var t;return(t=function(){var t,e,r;return function(t,e){var r,n,o,a={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),l=Object.defineProperty;return l(i,"next",{value:u(0)}),l(i,"throw",{value:u(1)}),l(i,"return",{value:u(2)}),"function"==typeof Symbol&&l(i,Symbol.iterator,{value:function(){return this}}),i;function u(l){return function(u){var c=[l,u];if(r)throw TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(a=0)),a;)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 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(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=e.call(t,a)}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}}}}(this,function(n){switch(n.label){case 0:return[4,null==u||null==(t=u.apiClient)?void 0:t.request({url:"multiPortals:listAccessible",method:"get",skipNotify:!0})];case 1:return[2,Array.isArray(null==(r=n.sent())||null==(e=r.data)?void 0:e.data)?r.data.data:[]]}})},function(){var e=this,r=arguments;return new Promise(function(n,o){var a=t.apply(e,r);function i(t){tt(a,n,o,i,l,"next",t)}function l(t){tt(a,n,o,i,l,"throw",t)}i(void 0)})})()}),f=s.data,p=s.error,d=s.loading,y=null!=f?f:[],v=(0,r.useMemo)(function(){return{display:"grid",gap:o.marginSM,gridTemplateColumns:"repeat(auto-fill, minmax(min(100%, ".concat(l.gridMinColumnWidth,"px), 1fr))")}},[l.gridMinColumnWidth,o.marginSM]),b=(0,r.useMemo)(function(){return{alignItems:"center",background:o.colorBgContainer,border:"".concat(o.lineWidth,"px solid ").concat(o.colorBorderSecondary),borderRadius:o.borderRadiusLG,boxSizing:"border-box",color:o.colorText,display:"flex",gap:o.marginSM,height:l.cardHeight,padding:"".concat(l.paddingBlock,"px ").concat(o.paddingLG,"px"),textDecoration:"none",transition:"background ".concat(o.motionDurationMid,", border-color ").concat(o.motionDurationMid,", box-shadow ").concat(o.motionDurationMid,", transform ").concat(o.motionDurationMid)}},[l.cardHeight,l.paddingBlock,o.borderRadiusLG,o.colorBgContainer,o.colorBorderSecondary,o.colorText,o.lineWidth,o.marginSM,o.motionDurationMid,o.paddingLG]);return p?n().createElement(Z.Alert,{type:"warning",message:c("Failed to load portals"),showIcon:!0}):d?n().createElement("div",{style:{minHeight:l.cardHeight}}):0===y.length?n().createElement(Z.Empty,{image:Z.Empty.PRESENTED_IMAGE_SIMPLE,description:c("No portals")}):n().createElement("div",{"data-testid":"multi-portal-block-grid",style:v},y.map(function(t){var e=tl(t);return n().createElement("a",{key:t.uid,href:(0,a.u)(u,t.routePath,t.portalType),target:"_blank",rel:"noopener noreferrer","data-testid":"multi-portal-block-card",className:i.portalItem,style:b},n().createElement(tu,{record:t,token:o}),n().createElement(to,{strong:!0,ellipsis:!0,style:{flex:1,fontSize:o.fontSizeLG,lineHeight:o.lineHeightLG,marginBottom:0,minWidth:0},title:e},e))}))}var ts=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=te(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,tn()?Reflect.construct(t,e||[],te(this).constructor):t.apply(this,e))}return r.prototype=Object.create(t&&t.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),t&&tr(r,t),e=[{key:"renderComponent",value:function(){return n().createElement(tc,{model:this})}}],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}(e.BlockModel);function tf(t,e,r,n,o,a,i){try{var l=t[a](i),u=l.value}catch(t){r(t);return}l.done?e(u):Promise.resolve(u).then(n,o)}function tp(t,e,r){return(tp=tb()?Reflect.construct:function(t,e,r){var n=[null];n.push.apply(n,e);var o=new(Function.bind.apply(t,n));return r&&ty(o,r.prototype),o}).apply(null,arguments)}ts.define({label:(0,Y.MZ)("Portals"),hide:!0,createModelOptions:{use:"MultiPortalBlockModel",stepParams:{cardSettings:{titleDescription:{title:(0,Y.MZ)("Portals")}}}},sort:600});function td(t){return(td=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function ty(t,e){return(ty=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function tv(t){var e="function"==typeof Map?new Map:void 0;return(tv=function(t){if(null===t||-1===Function.toString.call(t).indexOf("[native code]"))return t;if("function"!=typeof t)throw TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,r)}function r(){return tp(t,arguments,td(this).constructor)}return r.prototype=Object.create(t.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),ty(r,t)})(t)}function tb(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(tb=function(){return!!t})()}var th=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=td(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,tb()?Reflect.construct(t,e||[],td(this).constructor):t.apply(this,e))}return r.prototype=Object.create(t&&t.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),t&&ty(r,t),e=[{key:"load",value:function(){var t;return(t=function(){var t,e,r,o;return function(t,e){var r,n,o,a={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),l=Object.defineProperty;return l(i,"next",{value:u(0)}),l(i,"throw",{value:u(1)}),l(i,"return",{value:u(2)}),"function"==typeof Symbol&&l(i,Symbol.iterator,{value:function(){return this}}),i;function u(l){return function(u){var c=[l,u];if(r)throw TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(a=0)),a;)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 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(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=e.call(t,a)}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}}}}(this,function(a){var i,l,u,f,w;switch(a.label){case 0:if(t=this,e=String(this.t("Portal manager")),this.app.flowEngine.registerModels({MultiPortalBlockModel:ts}),this.app.flowEngine.registerModelLoaders({MultiPortalMobileLayoutModel:{loader:function(){return y.e("354").then(y.bind(y,833))}},MultiPortalMobileRootPageModel:{loader:function(){return y.e("354").then(y.bind(y,833))}},MultiPortalMobileChildPageModel:{loader:function(){return y.e("354").then(y.bind(y,833))}},MultiPortalMobileRootPageTabModel:{loader:function(){return y.e("354").then(y.bind(y,833))}},MultiPortalMobileChildPageTabModel:{loader:function(){return y.e("354").then(y.bind(y,833))}}}),this.app.entryActionManager&&this.app.flowEngine.registerModelLoaders({PortalEntryActionModel:{loader:function(){return y.e("499").then(y.bind(y,918))}}}),this.pluginSettingsManager.addMenuItem({key:"multi-portal",title:e,icon:"PartitionOutlined",aclSnippet:"pm.multi-portal",showTabs:!0,sort:-300}),this.pluginSettingsManager.addPageTabItem({menuKey:"multi-portal",key:"index",title:e,aclSnippet:"pm.multi-portal",componentLoader:function(){return y.e("556").then(y.bind(y,524))}}),!function(t,e){var r,n=t.pm;if(null==n?void 0:n.get){var o=n.get("acl")||n.get("@nocobase/plugin-acl");(null==o||null==(r=o.settingsUI)?void 0:r.addPermissionsTab)&&o.settingsUI.addPermissionsTab({key:"multi-portals",label:String(e("Portals")),sort:22,componentLoader:function(){return y.e("778").then(y.bind(y,177))}})}}(this.app,function(e){return t.t(e)}),!function(t,e){if(t.entryActionManager){var r=(0,s.G)(t),n=!0,o=!1,a=void 0;try{for(var i,l=v[Symbol.iterator]();!(n=(i=l.next()).done);n=!0){var u=i.value;t.entryActionManager.register("multi-portal:portals:".concat(u),{scope:u,sort:200,provider:function(t){return(function(t){return function(){var e=this,r=arguments;return new Promise(function(n,o){var a=t.apply(e,r);function i(t){p(a,n,o,i,l,"next",t)}function l(t){p(a,n,o,i,l,"throw",t)}i(void 0)})}})(function(){var n,o,a,i,l,u,c,s;return function(t,e){var r,n,o,a={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),l=Object.defineProperty;return l(i,"next",{value:u(0)}),l(i,"throw",{value:u(1)}),l(i,"return",{value:u(2)}),"function"==typeof Symbol&&l(i,Symbol.iterator,{value:function(){return this}}),i;function u(l){return function(u){var c=[l,u];if(r)throw TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(a=0)),a;)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 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(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=e.call(t,a)}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}}}}(this,function(f){switch(f.label){case 0:return[4,r.load()];case 1:var p;if(n=f.sent(),(a=(o=function(t){var e=function t(e){var r,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new Set;if(!m(e)||o.has(e))return n;o.add(e);var a=m(e)?e:null;return a&&(n.push(a),t(a.layoutContext,n,o),t(null==(r=a.model)?void 0:r.context,n,o)),n}(t),r=!0,n=!1,o=void 0;try{for(var a,i=e[Symbol.iterator]();!(r=(a=i.next()).done);r=!0){var l,u=a.value,c=P(null==(l=u.layout)?void 0:l.layoutType);if(c)return c}}catch(t){n=!0,o=t}finally{try{r||null==i.return||i.return()}finally{if(n)throw o}}if(e.some(function(t){var e,r,n;return!0===t.isMobileLayout||(null==(e=t.inputArgs)?void 0:e.isMobileLayout)===!0||(null==(n=t.view)||null==(r=n.inputArgs)?void 0:r.isMobileLayout)===!0}))return h;var s=!0,f=!1,p=void 0;try{for(var d,y=e[Symbol.iterator]();!(s=(d=y.next()).done);s=!0){var v=d.value,g=function(t){var e=[null==t?void 0:t.layoutModelClass,null==t?void 0:t.rootPageModelClass,null==t?void 0:t.childPageModelClass];return e.some(S)?h:e.some(P)?b:null}(v.layout);if(g)return g}}catch(t){f=!0,p=t}finally{try{s||null==y.return||y.return()}finally{if(f)throw p}}return e.some(function(t){var e,r,n;return!1===t.isMobileLayout||(null==(e=t.inputArgs)?void 0:e.isMobileLayout)===!1||(null==(n=t.view)||null==(r=n.inputArgs)?void 0:r.isMobileLayout)===!1})?b:null}(t))?n.portals.filter(function(t){return t.layout===o}):n.portals).length<=1)return[2,[]];return i=new Map(n.apps.map(function(t){return[t.name,t]})),l=function(t){var e=new Map,r=!0,n=!1,o=void 0;try{for(var a,i=t[Symbol.iterator]();!(r=(a=i.next()).done);r=!0){var l=a.value,u=O(l);e.set(u,(e.get(u)||0)+1)}}catch(t){n=!0,o=t}finally{try{r||null==i.return||i.return()}finally{if(n)throw o}}return e}(a),p=n.apps,u=p.length>0||j(a.map(function(t){return t.appName})).length>1,c=function(t,r){var n=u||(l.get(O(t))||0)>1?function(t,e,r){var n=O(t),o=k(t.appName,e,r);return o?"".concat(o," / ").concat(n):n}(t,r,e):O(t),o=function(t,e,r){var n=O(t),o=k(t.appName,e,r);return o?"".concat(o," / ").concat(n):n}(t,r,e);return function(t,e,r,n){var o=O(t);return{key:"multi-portal:portal:".concat(t.appName,":").concat(t.uid||t.routePath),label:o,createModelOptions:{use:"PortalEntryActionModel",props:{title:r,icon:t.icon||"PartitionOutlined",entryPortalTitle:r,entryPortalTargetTitle:n,entryPortal:t,entryPortalApp:e}}}}(t,r,n,o)},s=u?(function(t,e){var r=j(e.map(function(t){return t.appName})),n=t.map(function(t){return t.name});return j(d(r.includes(g)?[g]:[]).concat(d(n),d(r)))})(n.apps,a).map(function(t){var r=i.get(t),n=a.filter(function(e){return e.appName===t});return n.length?{key:"multi-portal:app:".concat(t),label:k(t,r,e),children:n.map(function(t){return c(t,r)})}:null}).filter(function(t){return!!t}):a.map(function(t){return c(t,i.get(t.appName))}),[2,s.length?[{key:"multi-portal:portals",label:e("Portals"),children:s}]:[]]}})})()}})}}catch(t){o=!0,a=t}finally{try{n||null==l.return||l.return()}finally{if(o)throw a}}}}(this.app,function(e){return String(t.t(e))}),"settings."===this.pluginSettingsManager.getRouteName(""))return[2];r=!1,this.router.add("root",{path:"/",Component:function(){return n().createElement(c,{runtimeRegistrationFailed:r})},authCheck:!1,skipAuthCheck:!0}),a.label=1;case 1:return a.trys.push([1,3,,4]),[4,(i=this.app.apiClient,(l=function(){var t,e,r;return function(t,e){var r,n,o,a={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),l=Object.defineProperty;return l(i,"next",{value:u(0)}),l(i,"throw",{value:u(1)}),l(i,"return",{value:u(2)}),"function"==typeof Symbol&&l(i,Symbol.iterator,{value:function(){return this}}),i;function u(l){return function(u){var c=[l,u];if(r)throw TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(a=0)),a;)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 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(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=e.call(t,a)}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}}}}(this,function(n){switch(n.label){case 0:return[4,i.request({url:"multiPortals:listEnabled",method:"get",skipAuth:!0,skipNotify:!0})];case 1:if(!Array.isArray(r=null==(e=n.sent())||null==(t=e.data)?void 0:t.data))throw Error("multiPortals:listEnabled returned an invalid response");return[2,r]}})},function(){var t=this,e=arguments;return new Promise(function(r,n){var o=l.apply(t,e);function a(t){G(o,r,n,a,i,"next",t)}function i(t){G(o,r,n,a,i,"throw",t)}a(void 0)})})())];case 2:return o=a.sent(),u=this.app,f=new Set(function(t,e){var r=[],n=new Set(t.listLayouts().map(function(t){return t.uid})),o=new Set,a=new Set,i=new Set,l=!0,u=!1,c=void 0;try{for(var s,f=e[Symbol.iterator]();!(l=(s=f.next()).done);l=!0){var p,d=s.value;if(d.enabled&&Q(d)){var y=function(t){if(!t.enabled||!Q(t))return null;var e,r,n,o,a=(null==(o=t.uiLayout)?void 0:o.layoutType)||"",i=a===H&&t.uid===M.Jx?X:F[a];return i?(r=function(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){$(t,e,r[e])})}return t}({routeName:(e=t.uid,"".concat("multiPortalLayout_").concat(encodeURIComponent(e).replace(/\./g,"%2E"))),routePath:t.routePath,uid:t.uid},i),n=n={authCheck:t.authCheck},Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(n)):(function(t){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e.push.apply(e,r)}return e})(Object(n)).forEach(function(t){Object.defineProperty(r,t,Object.getOwnPropertyDescriptor(n,t))}),r):null}(d);if(!y)throw Error("Portal '".concat(d.uid,"' uses an unknown UI layout type '").concat((null==(p=d.uiLayout)?void 0:p.layoutType)||"","'."));if(o.has(d.uid)||n.has(d.uid))throw Error("Duplicate portal uid '".concat(d.uid,"'."));if(a.has(d.portalName))throw Error("Duplicate portal name '".concat(d.portalName,"'."));if(i.has(y.routeName)||t.hasLayout(y.routeName))throw Error("Duplicate portal layout route name '".concat(y.routeName,"'."));o.add(d.uid),a.add(d.portalName),i.add(y.routeName),r.push({options:y,record:d})}}}catch(t){u=!0,c=t}finally{try{l||null==f.return||f.return()}finally{if(u)throw c}}var v=[],b=!0,h=!1,g=void 0;try{for(var m,w=r[Symbol.iterator]();!(b=(m=w.next()).done);b=!0){var P=m.value,S=P.options,O=P.record;t.registerLayout(S),v.push(O.uid)}}catch(t){h=!0,g=t}finally{try{b||null==w.return||w.return()}finally{if(h)throw g}}return v}(u.layoutManager,o)),w=o.filter(function(t){return f.has(t.uid)}).map(function(t){var e;return{cacheKey:(e=t.uid,"".concat("portal:").concat(e)),portalUid:t.uid}}),function(t,e){if(t&&(void 0===t?"undefined":q(t))==="object"){if(t[B]){t[B].portalScopes=e;return}var r=D(t),n={loadingPromises:new Map,layoutScopes:new Map,originalActivateLayout:t.activateLayout.bind(t),originalApiRequest:r.request.bind(r),originalCreateRoute:t.createRoute.bind(t),originalDeleteRoute:t.deleteRoute.bind(t),originalEnsureAccessibleLoaded:t.ensureAccessibleLoaded.bind(t),originalMoveRoute:t.moveRoute.bind(t),originalRefreshAccessible:t.refreshAccessible.bind(t),originalUpdateRoute:t.updateRoute.bind(t),portalScopes:e,refreshRequestIds:new Map,scopeStack:[]};t[B]=n,r.request=function(t){return n.originalApiRequest(function(t,e){var r,n=N(e);if(!n.portalUid||!("string"==typeof t.url&&t.url.replace(/^\/+/,"").startsWith("desktopRoutes:")))return t;var o=(r=t.params)&&(void 0===r?"undefined":q(r))==="object"&&!Array.isArray(r)?R({},t.params):{};return delete o.layout,delete o.portal,_(R({},t),{params:_(R({},o),{portal:n.portalUid})})}(t,n))},t.activateLayout=function(t){var e,r,o,a,i,l,u=(e="string"==typeof(l=null==t?void 0:t.uid)&&l.trim()?l:"admin-layout-model",r=n.portalScopes,o=n.layoutScopes,(i=(a=new Map(r().filter(function(t){return"string"==typeof(null==t?void 0:t.portalUid)&&!!t.portalUid.trim()&&"string"==typeof t.cacheKey&&!!t.cacheKey.trim()}).map(function(t){return[t.portalUid,t]}))).get(e))||function(t,e,r){var n=new Set(C(e.values()).map(function(t){return t.cacheKey})),o=new Set(C(r.entries()).filter(function(e){return I(e,1)[0]!==t}).map(function(t){return I(t,2)[1].cacheKey})),a=r.get(t);if(a&&!n.has(a.cacheKey)&&!o.has(a.cacheKey))return a;for(var i=t;n.has(i)||o.has(i);)i="layout:".concat(i);var l={cacheKey:i,uiLayoutUid:t};return r.set(t,l),l}(e,a,o)),c=Symbol("multi-portal-route-scope"),s=n.originalActivateLayout(_(R({},t),{uid:u.cacheKey}));return n.scopeStack.push({deactivate:s,scope:u,token:c}),function(){var t=n.scopeStack.findIndex(function(t){return t.token===c});t>=0&&n.scopeStack.splice(t,1),s()}},t.refreshAccessible=function(){return E(function(){var e;return U(this,function(r){return W(e=N(n))?[2,z(t,e,n)]:[2,n.originalRefreshAccessible()]})})()},t.ensureAccessibleLoaded=function(){return E(function(){var e,r,o;return U(this,function(a){return W(e=N(n))?t.isAccessibleLoaded()?[2,t.listAccessible()]:(r=n.loadingPromises.get(e.cacheKey))?[2,r]:(o=z(t,e,n).finally(function(){n.loadingPromises.get(e.cacheKey)===o&&n.loadingPromises.delete(e.cacheKey)}),n.loadingPromises.set(e.cacheKey,o),[2,o]):[2,n.originalEnsureAccessibleLoaded()]})})()},t.createRoute=function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return E(function(){var o,a,i,l;return U(this,function(u){switch(u.label){case 0:if(!(o=N(n)).portalUid)return[2,n.originalCreateRoute(e,r)];return i=void 0===(a=r.refreshAfterMutation)||a,[4,D(t).resource("desktopRoutes").create({values:K(e),portal:o.portalUid})];case 1:if(l=u.sent(),!i)return[3,3];return[4,t.refreshAccessible()];case 2:u.sent(),u.label=3;case 3:return[2,l]}})})()},t.updateRoute=function(e,r){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return E(function(){var a,i,l,u,c;return U(this,function(s){switch(s.label){case 0:if(!(a=N(n)).portalUid)return[2,n.originalUpdateRoute(e,r,o)];return l=void 0===(i=o.refreshAfterMutation)||i,u=K(r),[4,D(t).resource("desktopRoutes").update(Array.isArray(e)?{filter:{id:{$in:e}},values:u,portal:a.portalUid}:{filterByTk:e,values:u,portal:a.portalUid})];case 1:if(c=s.sent(),!l)return[3,3];return[4,t.refreshAccessible()];case 2:s.sent(),s.label=3;case 3:return[2,c]}})})()},t.deleteRoute=function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return E(function(){var o,a,i,l;return U(this,function(u){switch(u.label){case 0:if(!(o=N(n)).portalUid)return[2,n.originalDeleteRoute(e,r)];return i=void 0===(a=r.refreshAfterMutation)||a,[4,D(t).resource("desktopRoutes").destroy({filterByTk:e,portal:o.portalUid})];case 1:if(l=u.sent(),!i)return[3,3];return[4,t.refreshAccessible()];case 2:u.sent(),u.label=3;case 3:return[2,l]}})})()},t.moveRoute=function(e){return E(function(){var r,o,a,i,l;return U(this,function(u){switch(u.label){case 0:if(!(r=N(n)).portalUid)return[2,n.originalMoveRoute(e)];return a=void 0===(o=e.refreshAfterMove)||o,i=T(e,["refreshAfterMove"]),[4,D(t).resource("desktopRoutes").move(_(R({},i),{portal:r.portalUid}))];case 1:if(l=u.sent(),!a)return[3,3];return[4,t.refreshAccessible()];case 2:u.sent(),u.label=3;case 3:return[2,l]}})})()}}}(function(t){if(null==(e=t.context)?void 0:e.routeRepository)return t.context.routeRepository;var e,r,n=null==(r=t.flowEngine)?void 0:r.context;if(n&&(void 0===n?"undefined":n&&"u">typeof Symbol&&n.constructor===Symbol?"symbol":typeof n)=="object"&&"routeRepository"in n)return n.routeRepository}(u),function(){return w}),!function(t,e){if(t&&"function"==typeof t.registerSignInRoute){var r=!0,n=!1,o=void 0;try{for(var a,i=e[Symbol.iterator]();!(r=(a=i.next()).done);r=!0){var l=a.value;if(l.enabled&&"no-code"===(l.portalType||"no-code")){var u="multiPortalSignin_".concat(encodeURIComponent(l.uid).replace(/\./g,"%2E")),c="".concat(l.routePath.replace(/\/+$/g,""),"/signin");t.registerSignInRoute(u,c)}}}catch(t){n=!0,o=t}finally{try{r||null==i.return||i.return()}finally{if(n)throw o}}}}(this.app.pm.get("@nocobase/plugin-auth"),o),[3,4];case 3:return console.error("[NocoBase] Failed to register multi-portals.",a.sent()),r=!0,[3,4];case 4:return[2]}})},function(){var e=this,r=arguments;return new Promise(function(n,o){var a=t.apply(e,r);function i(t){tf(a,n,o,i,l,"next",t)}function l(t){tf(a,n,o,i,l,"throw",t)}i(void 0)})}).call(this)}}],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}(tv(e.Plugin))}(),w}()});
@@ -36,4 +36,5 @@ type MultiPortalRegistrationApp = {
36
36
  export declare function toMultiPortalLayoutRegisterOptions(record: MultiPortalRuntimeRecord): LayoutRegisterOptions | null;
37
37
  export declare function fetchMultiPortals(apiClient: MultiPortalRegistrationApp['apiClient']): Promise<MultiPortalRuntimeRecord[]>;
38
38
  export declare function registerMultiPortalRecords(layoutManager: MultiPortalRegistrationApp['layoutManager'], records: MultiPortalRuntimeRecord[]): string[];
39
- export declare function registerMultiPortalsFromApi(app: MultiPortalRegistrationApp): Promise<void>;
39
+ export declare function registerMultiPortals(app: MultiPortalRegistrationApp, records: MultiPortalRuntimeRecord[]): MultiPortalRuntimeRecord[];
40
+ export declare function registerMultiPortalsFromApi(app: MultiPortalRegistrationApp): Promise<MultiPortalRuntimeRecord[]>;
@@ -22,7 +22,7 @@ type MultiPortalOptions = {
22
22
  cover?: UploadedAttachment | null;
23
23
  };
24
24
  export type MultiPortalRecord = MultiPortalFormValues & {
25
- defaultPortal?: boolean;
25
+ isDefault?: boolean | null;
26
26
  uiLayout?: {
27
27
  layoutType?: string;
28
28
  title?: string;
@@ -62,6 +62,9 @@ export type MultiPortalResource = {
62
62
  list: (params: Record<string, unknown>) => Promise<{
63
63
  data?: MultiPortalListBody;
64
64
  }>;
65
+ setDefault: (params: {
66
+ filterByTk: MultiPortalPrimaryKey;
67
+ }) => Promise<unknown>;
65
68
  };
66
69
  export declare function createMultiPortal(args: {
67
70
  resource: MultiPortalResource;
@@ -72,6 +75,7 @@ export declare function updateMultiPortal(args: {
72
75
  resource: MultiPortalResource;
73
76
  filterByTk: MultiPortalPrimaryKey;
74
77
  values: MultiPortalFormValues;
78
+ setAsDefault?: boolean;
75
79
  onSubmitted: () => void;
76
80
  }): Promise<void>;
77
81
  export declare function deleteMultiPortals(args: {
@@ -79,6 +83,11 @@ export declare function deleteMultiPortals(args: {
79
83
  filterByTk: MultiPortalPrimaryKey | MultiPortalPrimaryKey[];
80
84
  onDeleted: () => void;
81
85
  }): Promise<void>;
86
+ export declare function setDefaultMultiPortal(args: {
87
+ resource: MultiPortalResource;
88
+ filterByTk: MultiPortalPrimaryKey;
89
+ onSubmitted: () => void;
90
+ }): Promise<void>;
82
91
  /**
83
92
  * 从 git 仓库地址里取出仓库名。
84
93
  *
@@ -16,3 +16,4 @@ export type MultiPortalAppLike = {
16
16
  };
17
17
  export type MultiPortalType = 'no-code' | 'ai';
18
18
  export declare function getMultiPortalRouteUrl(app: MultiPortalAppLike | undefined, routePath: string, portalType?: string | null): string;
19
+ export declare function getMultiPortalSettingsUrl(app?: MultiPortalAppLike): string;
@@ -8,4 +8,5 @@
8
8
  */
9
9
  export declare const DEFAULT_ADMIN_MULTI_PORTAL_UID = "__default_admin__";
10
10
  export declare const DEFAULT_MOBILE_MULTI_PORTAL_UID = "__default_mobile__";
11
+ export declare const NAMESPACE = "@nocobase/plugin-multi-portal";
11
12
  export declare function isDefaultLayoutMultiPortalUid(uid: unknown): uid is string;
package/dist/constants.js CHANGED
@@ -28,11 +28,13 @@ var constants_exports = {};
28
28
  __export(constants_exports, {
29
29
  DEFAULT_ADMIN_MULTI_PORTAL_UID: () => DEFAULT_ADMIN_MULTI_PORTAL_UID,
30
30
  DEFAULT_MOBILE_MULTI_PORTAL_UID: () => DEFAULT_MOBILE_MULTI_PORTAL_UID,
31
+ NAMESPACE: () => NAMESPACE,
31
32
  isDefaultLayoutMultiPortalUid: () => isDefaultLayoutMultiPortalUid
32
33
  });
33
34
  module.exports = __toCommonJS(constants_exports);
34
35
  const DEFAULT_ADMIN_MULTI_PORTAL_UID = "__default_admin__";
35
36
  const DEFAULT_MOBILE_MULTI_PORTAL_UID = "__default_mobile__";
37
+ const NAMESPACE = "@nocobase/plugin-multi-portal";
36
38
  const DEFAULT_LAYOUT_MULTI_PORTAL_UIDS = /* @__PURE__ */ new Set([
37
39
  DEFAULT_ADMIN_MULTI_PORTAL_UID,
38
40
  DEFAULT_MOBILE_MULTI_PORTAL_UID
@@ -44,5 +46,6 @@ function isDefaultLayoutMultiPortalUid(uid) {
44
46
  0 && (module.exports = {
45
47
  DEFAULT_ADMIN_MULTI_PORTAL_UID,
46
48
  DEFAULT_MOBILE_MULTI_PORTAL_UID,
49
+ NAMESPACE,
47
50
  isDefaultLayoutMultiPortalUid
48
51
  });
@@ -8,19 +8,19 @@
8
8
  */
9
9
 
10
10
  module.exports = {
11
- "@nocobase/flow-engine": "3.0.0-alpha.3",
12
- "@nocobase/client": "3.0.0-alpha.3",
13
- "@nocobase/client-v2": "3.0.0-alpha.3",
14
- "antd": "5.24.2",
11
+ "@nocobase/flow-engine": "3.0.0-alpha.4",
12
+ "@nocobase/client": "3.0.0-alpha.4",
13
+ "@nocobase/client-v2": "3.0.0-alpha.4",
15
14
  "react": "18.2.0",
16
15
  "react-router-dom": "6.30.1",
17
- "@nocobase/database": "3.0.0-alpha.3",
18
- "@nocobase/server": "3.0.0-alpha.3",
19
- "@nocobase/resourcer": "3.0.0-alpha.3",
20
- "@nocobase/utils": "3.0.0-alpha.3",
16
+ "@nocobase/database": "3.0.0-alpha.4",
17
+ "@nocobase/server": "3.0.0-alpha.4",
18
+ "@nocobase/resourcer": "3.0.0-alpha.4",
19
+ "@nocobase/utils": "3.0.0-alpha.4",
20
+ "antd": "5.24.2",
21
21
  "ahooks": "3.7.8",
22
22
  "antd-style": "3.7.1",
23
- "@nocobase/plugin-ui-layout": "3.0.0-alpha.3",
23
+ "@nocobase/plugin-ui-layout": "3.0.0-alpha.4",
24
24
  "@ant-design/icons": "5.6.1",
25
25
  "sequelize": "6.35.2"
26
26
  };
@@ -33,6 +33,7 @@
33
33
  "Routes permissions": "Routes permissions",
34
34
  "Multi-portal": "Portal manager",
35
35
  "Mobile": "Mobile",
36
+ "More": "More",
36
37
  "New portals are allowed to be accessed by default": "New portals are allowed to be accessed by default",
37
38
  "New routes are allowed to be accessed by default": "New routes are allowed to be accessed by default",
38
39
  "Must start with /. For example: /portal.": "Must start with /. For example: /portal.",
@@ -57,6 +58,7 @@
57
58
  "No-code portal": "No-code portal",
58
59
  "Portal manager": "Portal manager",
59
60
  "Portal name": "Portal name",
61
+ "Portal name \"{{portalName}}\" already exists": "Portal name \"{{portalName}}\" already exists",
60
62
  "Portal name can only contain lowercase letters, numbers, hyphens, and underscores": "Portal name can only contain lowercase letters, numbers, hyphens, and underscores",
61
63
  "Portals": "Portals",
62
64
  "Refresh": "Refresh",
@@ -70,6 +72,7 @@
70
72
  "Source storage": "Source storage",
71
73
  "Submit": "Submit",
72
74
  "Target portal": "Target portal",
75
+ "The default portal cannot be disabled": "The default portal cannot be disabled. Set another portal as default first.",
73
76
  "The corresponding portal directory will also be deleted.": "The corresponding portal directory will also be deleted.",
74
77
  "This entry is currently unavailable. Please check the application status.": "This entry is currently unavailable. Please check the application status.",
75
78
  "This entry is no longer available. Please remove this button.": "This entry is no longer available. Please remove this button.",
@@ -119,6 +122,16 @@
119
122
  "No-code": "No-code mode",
120
123
  "AI": "AI mode",
121
124
  "Default": "Default",
125
+ "Default portal": "Default portal",
126
+ "Set as default": "Set as default",
127
+ "Default portal updated successfully": "Default portal updated successfully",
128
+ "Users enter this portal by default when they open the application without specifying one.": "Users enter this portal by default when they open the application without specifying one.",
129
+ "Use multiPortals:setDefault to update the default Portal": "Use multiPortals:setDefault to update the default Portal",
130
+ "filterByTk is required": "filterByTk is required",
131
+ "Portal not found": "Portal not found",
132
+ "Disabled Portal cannot be set as default": "Disabled Portal cannot be set as default",
133
+ "Portal layout must be enabled before setting it as default": "Portal layout must be enabled before setting it as default",
134
+ "Unsupported Portal type cannot be set as default": "Unsupported Portal type cannot be set as default",
122
135
  "No portals yet": "No portals yet",
123
136
  "Each portal is a standalone front end with its own routes and menus.": "Each portal is a standalone front end with its own routes and menus.",
124
137
  "Cover": "Cover",
@@ -126,7 +139,7 @@
126
139
  "Replace cover": "Replace cover",
127
140
  "Used as the cover placeholder when no cover is uploaded.": "Used as the cover placeholder when no cover is uploaded.",
128
141
  "Used in the access path.": "Used in the access path.",
129
- "Shown on the portal card. A 16:9 image works best.": "Shown on the portal card. A 16:9 image works best.",
142
+ "Shown on the portal card.": "Shown on the portal card.",
130
143
  "Device": "Device",
131
144
  "No-code portals render with the components of this device; AI portals use it for grouping.": "No-code portals render with the components of this device; AI portals use it for grouping.",
132
145
  "The title and name below are filled in from the repository name.": "The title and name below are filled in from the repository name."
@@ -33,6 +33,7 @@
33
33
  "Routes permissions": "路由权限",
34
34
  "Multi-portal": "门户管理",
35
35
  "Mobile": "移动端",
36
+ "More": "更多",
36
37
  "New portals are allowed to be accessed by default": "新建门户默认允许访问",
37
38
  "New routes are allowed to be accessed by default": "新建路由默认允许访问",
38
39
  "Must start with /. For example: /portal.": "必须以 / 开头,例如 /门户。",
@@ -57,6 +58,7 @@
57
58
  "No-code portal": "无代码门户",
58
59
  "Portal manager": "门户管理",
59
60
  "Portal name": "门户名称",
61
+ "Portal name \"{{portalName}}\" already exists": "门户名称“{{portalName}}”已存在",
60
62
  "Portal name can only contain lowercase letters, numbers, hyphens, and underscores": "门户名称只能包含小写英文字母、数字、连字符和下划线",
61
63
  "Portals": "门户",
62
64
  "Refresh": "刷新",
@@ -70,6 +72,7 @@
70
72
  "Source storage": "源码存储",
71
73
  "Submit": "提交",
72
74
  "Target portal": "目标门户",
75
+ "The default portal cannot be disabled": "默认门户不能停用,请先把默认设置给其他门户。",
73
76
  "The corresponding portal directory will also be deleted.": "对应的门户目录也会被删除。",
74
77
  "This entry is currently unavailable. Please check the application status.": "当前不可用,请检查应用状态。",
75
78
  "This entry is no longer available. Please remove this button.": "该入口当前不可用,请移除此按钮。",
@@ -119,6 +122,16 @@
119
122
  "No-code": "无代码模式",
120
123
  "AI": "AI 模式",
121
124
  "Default": "默认",
125
+ "Default portal": "默认门户",
126
+ "Set as default": "设为默认",
127
+ "Default portal updated successfully": "默认门户更新成功",
128
+ "Users enter this portal by default when they open the application without specifying one.": "用户未指定门户访问应用时,将默认进入此门户。",
129
+ "Use multiPortals:setDefault to update the default Portal": "请使用 multiPortals:setDefault 更新默认门户",
130
+ "filterByTk is required": "filterByTk 为必填项",
131
+ "Portal not found": "门户不存在",
132
+ "Disabled Portal cannot be set as default": "已禁用的门户不能设为默认",
133
+ "Portal layout must be enabled before setting it as default": "设为默认门户前必须先启用该门户布局",
134
+ "Unsupported Portal type cannot be set as default": "不支持的门户类型不能设为默认",
122
135
  "No portals yet": "还没有门户",
123
136
  "Each portal is a standalone front end with its own routes and menus.": "每个门户是一套独立的前台,有自己的路由和菜单。",
124
137
  "Cover": "封面",
@@ -126,7 +139,7 @@
126
139
  "Replace cover": "更换封面",
127
140
  "Used as the cover placeholder when no cover is uploaded.": "没有上传封面时,用它作为封面占位。",
128
141
  "Used in the access path.": "用于访问路径。",
129
- "Shown on the portal card. A 16:9 image works best.": "显示在门户卡片上,建议使用 16:9 的图片。",
142
+ "Shown on the portal card.": "显示在门户卡片上。",
130
143
  "Device": "设备",
131
144
  "No-code portals render with the components of this device; AI portals use it for grouping.": "无代码门户按此选择组件形态;AI 门户用它做归类。",
132
145
  "The title and name below are filled in from the repository name.": "下面的标题和名称会按仓库名自动填写。"
@@ -1 +1 @@
1
- {"author":"Isaac Z. Schlueter","name":"tar","description":"tar for node","version":"7.5.15","repository":{"type":"git","url":"https://github.com/isaacs/node-tar.git"},"scripts":{"genparse":"node scripts/generate-parse-fixtures.js","snap":"tap","test":"tap","pretest":"npm run prepare","presnap":"npm run prepare","prepare":"tshy && bash scripts/build.sh","preversion":"npm test","postversion":"npm publish","prepublishOnly":"git push origin --follow-tags","format":"prettier --write . --log-level warn","typedoc":"typedoc --tsconfig .tshy/esm.json ./src/*.ts","lint":"oxlint --fix src test","postsnap":"npm run lint","postlint":"npm run format"},"dependencies":{"@isaacs/fs-minipass":"^4.0.0","chownr":"^3.0.0","minipass":"^7.1.2","minizlib":"^3.1.0","yallist":"^5.0.0"},"devDependencies":{"@types/node":"^25.5.0","chmodr":"^2.0.2","end-of-stream":"^1.4.3","esbuild":"^0.27.4","events-to-array":"^2.0.3","mutate-fs":"^2.1.1","nock":"^13.5.4","oxlint":"^1.57.0","oxlint-tsgolint":"^0.17.3","prettier":"^3.8.1","rimraf":"^6.1.2","tap":"^21.6.2","tshy":"^3.3.2","typedoc":"^0.28.18"},"license":"BlueOak-1.0.0","engines":{"node":">=18"},"files":["dist"],"tshy":{"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.min.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.min.js"}},"./raw":"./src/index.ts","./c":"./src/create.ts","./create":"./src/create.ts","./replace":"./src/create.ts","./r":"./src/create.ts","./list":"./src/list.ts","./t":"./src/list.ts","./update":"./src/update.ts","./u":"./src/update.ts","./extract":"./src/extract.ts","./x":"./src/extract.ts","./pack":"./src/pack.ts","./unpack":"./src/unpack.ts","./parse":"./src/parse.ts","./read-entry":"./src/read-entry.ts","./write-entry":"./src/write-entry.ts","./header":"./src/header.ts","./pax":"./src/pax.ts","./types":"./src/types.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.min.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.min.js"}},"./raw":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./c":{"import":{"types":"./dist/esm/create.d.ts","default":"./dist/esm/create.js"},"require":{"types":"./dist/commonjs/create.d.ts","default":"./dist/commonjs/create.js"}},"./create":{"import":{"types":"./dist/esm/create.d.ts","default":"./dist/esm/create.js"},"require":{"types":"./dist/commonjs/create.d.ts","default":"./dist/commonjs/create.js"}},"./replace":{"import":{"types":"./dist/esm/create.d.ts","default":"./dist/esm/create.js"},"require":{"types":"./dist/commonjs/create.d.ts","default":"./dist/commonjs/create.js"}},"./r":{"import":{"types":"./dist/esm/create.d.ts","default":"./dist/esm/create.js"},"require":{"types":"./dist/commonjs/create.d.ts","default":"./dist/commonjs/create.js"}},"./list":{"import":{"types":"./dist/esm/list.d.ts","default":"./dist/esm/list.js"},"require":{"types":"./dist/commonjs/list.d.ts","default":"./dist/commonjs/list.js"}},"./t":{"import":{"types":"./dist/esm/list.d.ts","default":"./dist/esm/list.js"},"require":{"types":"./dist/commonjs/list.d.ts","default":"./dist/commonjs/list.js"}},"./update":{"import":{"types":"./dist/esm/update.d.ts","default":"./dist/esm/update.js"},"require":{"types":"./dist/commonjs/update.d.ts","default":"./dist/commonjs/update.js"}},"./u":{"import":{"types":"./dist/esm/update.d.ts","default":"./dist/esm/update.js"},"require":{"types":"./dist/commonjs/update.d.ts","default":"./dist/commonjs/update.js"}},"./extract":{"import":{"types":"./dist/esm/extract.d.ts","default":"./dist/esm/extract.js"},"require":{"types":"./dist/commonjs/extract.d.ts","default":"./dist/commonjs/extract.js"}},"./x":{"import":{"types":"./dist/esm/extract.d.ts","default":"./dist/esm/extract.js"},"require":{"types":"./dist/commonjs/extract.d.ts","default":"./dist/commonjs/extract.js"}},"./pack":{"import":{"types":"./dist/esm/pack.d.ts","default":"./dist/esm/pack.js"},"require":{"types":"./dist/commonjs/pack.d.ts","default":"./dist/commonjs/pack.js"}},"./unpack":{"import":{"types":"./dist/esm/unpack.d.ts","default":"./dist/esm/unpack.js"},"require":{"types":"./dist/commonjs/unpack.d.ts","default":"./dist/commonjs/unpack.js"}},"./parse":{"import":{"types":"./dist/esm/parse.d.ts","default":"./dist/esm/parse.js"},"require":{"types":"./dist/commonjs/parse.d.ts","default":"./dist/commonjs/parse.js"}},"./read-entry":{"import":{"types":"./dist/esm/read-entry.d.ts","default":"./dist/esm/read-entry.js"},"require":{"types":"./dist/commonjs/read-entry.d.ts","default":"./dist/commonjs/read-entry.js"}},"./write-entry":{"import":{"types":"./dist/esm/write-entry.d.ts","default":"./dist/esm/write-entry.js"},"require":{"types":"./dist/commonjs/write-entry.d.ts","default":"./dist/commonjs/write-entry.js"}},"./header":{"import":{"types":"./dist/esm/header.d.ts","default":"./dist/esm/header.js"},"require":{"types":"./dist/commonjs/header.d.ts","default":"./dist/commonjs/header.js"}},"./pax":{"import":{"types":"./dist/esm/pax.d.ts","default":"./dist/esm/pax.js"},"require":{"types":"./dist/commonjs/pax.d.ts","default":"./dist/commonjs/pax.js"}},"./types":{"import":{"types":"./dist/esm/types.d.ts","default":"./dist/esm/types.js"},"require":{"types":"./dist/commonjs/types.d.ts","default":"./dist/commonjs/types.js"}}},"type":"module","main":"./dist/commonjs/index.min.js","types":"./dist/commonjs/index.d.ts","module":"./dist/esm/index.min.js","_lastModified":"2026-07-30T10:32:21.491Z"}
1
+ {"author":"Isaac Z. Schlueter","name":"tar","description":"tar for node","version":"7.5.15","repository":{"type":"git","url":"https://github.com/isaacs/node-tar.git"},"scripts":{"genparse":"node scripts/generate-parse-fixtures.js","snap":"tap","test":"tap","pretest":"npm run prepare","presnap":"npm run prepare","prepare":"tshy && bash scripts/build.sh","preversion":"npm test","postversion":"npm publish","prepublishOnly":"git push origin --follow-tags","format":"prettier --write . --log-level warn","typedoc":"typedoc --tsconfig .tshy/esm.json ./src/*.ts","lint":"oxlint --fix src test","postsnap":"npm run lint","postlint":"npm run format"},"dependencies":{"@isaacs/fs-minipass":"^4.0.0","chownr":"^3.0.0","minipass":"^7.1.2","minizlib":"^3.1.0","yallist":"^5.0.0"},"devDependencies":{"@types/node":"^25.5.0","chmodr":"^2.0.2","end-of-stream":"^1.4.3","esbuild":"^0.27.4","events-to-array":"^2.0.3","mutate-fs":"^2.1.1","nock":"^13.5.4","oxlint":"^1.57.0","oxlint-tsgolint":"^0.17.3","prettier":"^3.8.1","rimraf":"^6.1.2","tap":"^21.6.2","tshy":"^3.3.2","typedoc":"^0.28.18"},"license":"BlueOak-1.0.0","engines":{"node":">=18"},"files":["dist"],"tshy":{"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.min.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.min.js"}},"./raw":"./src/index.ts","./c":"./src/create.ts","./create":"./src/create.ts","./replace":"./src/create.ts","./r":"./src/create.ts","./list":"./src/list.ts","./t":"./src/list.ts","./update":"./src/update.ts","./u":"./src/update.ts","./extract":"./src/extract.ts","./x":"./src/extract.ts","./pack":"./src/pack.ts","./unpack":"./src/unpack.ts","./parse":"./src/parse.ts","./read-entry":"./src/read-entry.ts","./write-entry":"./src/write-entry.ts","./header":"./src/header.ts","./pax":"./src/pax.ts","./types":"./src/types.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.min.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.min.js"}},"./raw":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./c":{"import":{"types":"./dist/esm/create.d.ts","default":"./dist/esm/create.js"},"require":{"types":"./dist/commonjs/create.d.ts","default":"./dist/commonjs/create.js"}},"./create":{"import":{"types":"./dist/esm/create.d.ts","default":"./dist/esm/create.js"},"require":{"types":"./dist/commonjs/create.d.ts","default":"./dist/commonjs/create.js"}},"./replace":{"import":{"types":"./dist/esm/create.d.ts","default":"./dist/esm/create.js"},"require":{"types":"./dist/commonjs/create.d.ts","default":"./dist/commonjs/create.js"}},"./r":{"import":{"types":"./dist/esm/create.d.ts","default":"./dist/esm/create.js"},"require":{"types":"./dist/commonjs/create.d.ts","default":"./dist/commonjs/create.js"}},"./list":{"import":{"types":"./dist/esm/list.d.ts","default":"./dist/esm/list.js"},"require":{"types":"./dist/commonjs/list.d.ts","default":"./dist/commonjs/list.js"}},"./t":{"import":{"types":"./dist/esm/list.d.ts","default":"./dist/esm/list.js"},"require":{"types":"./dist/commonjs/list.d.ts","default":"./dist/commonjs/list.js"}},"./update":{"import":{"types":"./dist/esm/update.d.ts","default":"./dist/esm/update.js"},"require":{"types":"./dist/commonjs/update.d.ts","default":"./dist/commonjs/update.js"}},"./u":{"import":{"types":"./dist/esm/update.d.ts","default":"./dist/esm/update.js"},"require":{"types":"./dist/commonjs/update.d.ts","default":"./dist/commonjs/update.js"}},"./extract":{"import":{"types":"./dist/esm/extract.d.ts","default":"./dist/esm/extract.js"},"require":{"types":"./dist/commonjs/extract.d.ts","default":"./dist/commonjs/extract.js"}},"./x":{"import":{"types":"./dist/esm/extract.d.ts","default":"./dist/esm/extract.js"},"require":{"types":"./dist/commonjs/extract.d.ts","default":"./dist/commonjs/extract.js"}},"./pack":{"import":{"types":"./dist/esm/pack.d.ts","default":"./dist/esm/pack.js"},"require":{"types":"./dist/commonjs/pack.d.ts","default":"./dist/commonjs/pack.js"}},"./unpack":{"import":{"types":"./dist/esm/unpack.d.ts","default":"./dist/esm/unpack.js"},"require":{"types":"./dist/commonjs/unpack.d.ts","default":"./dist/commonjs/unpack.js"}},"./parse":{"import":{"types":"./dist/esm/parse.d.ts","default":"./dist/esm/parse.js"},"require":{"types":"./dist/commonjs/parse.d.ts","default":"./dist/commonjs/parse.js"}},"./read-entry":{"import":{"types":"./dist/esm/read-entry.d.ts","default":"./dist/esm/read-entry.js"},"require":{"types":"./dist/commonjs/read-entry.d.ts","default":"./dist/commonjs/read-entry.js"}},"./write-entry":{"import":{"types":"./dist/esm/write-entry.d.ts","default":"./dist/esm/write-entry.js"},"require":{"types":"./dist/commonjs/write-entry.d.ts","default":"./dist/commonjs/write-entry.js"}},"./header":{"import":{"types":"./dist/esm/header.d.ts","default":"./dist/esm/header.js"},"require":{"types":"./dist/commonjs/header.d.ts","default":"./dist/commonjs/header.js"}},"./pax":{"import":{"types":"./dist/esm/pax.d.ts","default":"./dist/esm/pax.js"},"require":{"types":"./dist/commonjs/pax.d.ts","default":"./dist/commonjs/pax.js"}},"./types":{"import":{"types":"./dist/esm/types.d.ts","default":"./dist/esm/types.js"},"require":{"types":"./dist/commonjs/types.d.ts","default":"./dist/commonjs/types.js"}}},"type":"module","main":"./dist/commonjs/index.min.js","types":"./dist/commonjs/index.d.ts","module":"./dist/esm/index.min.js","_lastModified":"2026-07-31T14:20:49.707Z"}
@@ -40,6 +40,10 @@ var multiPortals_default = (0, import_database.defineCollection)({
40
40
  {
41
41
  type: "UNIQUE",
42
42
  fields: ["portalName"]
43
+ },
44
+ {
45
+ type: "UNIQUE",
46
+ fields: ["isDefault"]
43
47
  }
44
48
  ],
45
49
  fields: [
@@ -89,6 +93,12 @@ var multiPortals_default = (0, import_database.defineCollection)({
89
93
  defaultValue: true,
90
94
  allowNull: false
91
95
  },
96
+ {
97
+ name: "isDefault",
98
+ type: "boolean",
99
+ defaultValue: null,
100
+ allowNull: true
101
+ },
92
102
  {
93
103
  name: "options",
94
104
  type: "json",
@@ -100,6 +100,7 @@ const MULTI_PORTAL_MANAGEMENT_ACTIONS = [
100
100
  "multiPortals:create",
101
101
  "multiPortals:update",
102
102
  "multiPortals:firstOrCreate",
103
+ "multiPortals:setDefault",
103
104
  "multiPortals:destroy",
104
105
  "multiPortals:deploy",
105
106
  "multiPortals:pullSource",
@@ -168,7 +169,7 @@ function formatInitPortalTitle(portalName) {
168
169
  const title = portalName.split(/[-_]/).filter(Boolean).map((segment) => `${segment.charAt(0).toUpperCase()}${segment.slice(1)}`).join(" ");
169
170
  return title || portalName;
170
171
  }
171
- function getDefaultMultiPortalRecord() {
172
+ function getDefaultMultiPortalRecord(options = {}) {
172
173
  const portalName = getInitPortalName();
173
174
  return {
174
175
  uid: DEFAULT_MULTI_PORTAL_UID,
@@ -179,11 +180,12 @@ function getDefaultMultiPortalRecord() {
179
180
  routePath: `/${portalName}`,
180
181
  authCheck: true,
181
182
  enabled: true,
183
+ ...options.isDefault ? { isDefault: true } : {},
182
184
  uiLayoutUid: "admin-layout-model"
183
185
  };
184
186
  }
185
187
  function getFreshMultiPortalRecords() {
186
- return [getDefaultMultiPortalRecord()];
188
+ return [getDefaultMultiPortalRecord({ isDefault: true })];
187
189
  }
188
190
  function getFixedLayoutMultiPortalRecords() {
189
191
  return [
@@ -1035,6 +1037,37 @@ async function normalizeMultiPortalSlugValues(ctx, next) {
1035
1037
  values.portalName = slug;
1036
1038
  values.routePath = `/${slug}`;
1037
1039
  }
1040
+ const repository = ctx.db.getRepository("multiPortals");
1041
+ const pendingPortalNames = /* @__PURE__ */ new Set();
1042
+ const targets = await getMultiPortalWriteTargets(ctx, ["uid"]);
1043
+ for (const { existing, values } of targets) {
1044
+ const portalName = values.portalName;
1045
+ if (typeof portalName !== "string" || !portalName) {
1046
+ continue;
1047
+ }
1048
+ if (pendingPortalNames.has(portalName)) {
1049
+ ctx.throw(409, ctx.t('Portal name "{{portalName}}" already exists', { ns: import_constants.NAMESPACE, portalName }));
1050
+ return;
1051
+ }
1052
+ pendingPortalNames.add(portalName);
1053
+ const conflict = await repository.findOne({
1054
+ filter: { portalName },
1055
+ fields: ["uid"]
1056
+ });
1057
+ if (conflict && conflict.get("uid") !== (existing == null ? void 0 : existing.get("uid"))) {
1058
+ ctx.throw(409, ctx.t('Portal name "{{portalName}}" already exists', { ns: import_constants.NAMESPACE, portalName }));
1059
+ return;
1060
+ }
1061
+ }
1062
+ await next();
1063
+ }
1064
+ async function preventDirectDefaultPortalMutation(ctx, next) {
1065
+ for (const values of getMultiPortalWriteRecords(ctx)) {
1066
+ if (Object.prototype.hasOwnProperty.call(values, "isDefault")) {
1067
+ ctx.throw(400, ctx.t("Use multiPortals:setDefault to update the default Portal", { ns: import_constants.NAMESPACE }));
1068
+ return;
1069
+ }
1070
+ }
1038
1071
  await next();
1039
1072
  }
1040
1073
  function isUniqueConstraintViolation(error) {
@@ -2167,6 +2200,115 @@ async function listEnabledMultiPortals(ctx, next) {
2167
2200
  ctx.body = records.map((record) => pickMultiPortalRuntimeFields(record));
2168
2201
  await next();
2169
2202
  }
2203
+ const DEFAULT_MULTI_PORTAL_RESPONSE_FIELDS = ["uid", "portalType", "routePath"];
2204
+ function getDefaultMultiPortalType(record) {
2205
+ const portalType = record.get("portalType");
2206
+ if (portalType === null || portalType === void 0) {
2207
+ return "no-code";
2208
+ }
2209
+ return typeof portalType === "string" && isInitPortalType(portalType) ? portalType : null;
2210
+ }
2211
+ function pickDefaultMultiPortalFields(record) {
2212
+ return {
2213
+ uid: String(record.get("uid")),
2214
+ portalType: getDefaultMultiPortalType(record) || "no-code",
2215
+ routePath: String(record.get("routePath"))
2216
+ };
2217
+ }
2218
+ async function findEnabledDefaultMultiPortal(ctx, transaction) {
2219
+ const record = await ctx.db.getRepository("multiPortals").findOne({
2220
+ filter: {
2221
+ enabled: true,
2222
+ isDefault: true
2223
+ },
2224
+ fields: [...DEFAULT_MULTI_PORTAL_RESPONSE_FIELDS, "uiLayoutUid"],
2225
+ appends: ["uiLayout"],
2226
+ transaction
2227
+ });
2228
+ if (!record) {
2229
+ return null;
2230
+ }
2231
+ const portalType = getDefaultMultiPortalType(record);
2232
+ if (!portalType) {
2233
+ return null;
2234
+ }
2235
+ if (portalType === "no-code") {
2236
+ const uiLayout = record.get("uiLayout");
2237
+ if (!uiLayout || uiLayout.get("enabled") !== true) {
2238
+ return null;
2239
+ }
2240
+ }
2241
+ return record;
2242
+ }
2243
+ async function getDefaultMultiPortal(ctx, next) {
2244
+ const record = await findEnabledDefaultMultiPortal(ctx);
2245
+ ctx.body = record ? pickDefaultMultiPortalFields(record) : null;
2246
+ ctx.status = 200;
2247
+ await next();
2248
+ }
2249
+ async function setDefaultMultiPortal(ctx, next) {
2250
+ var _a;
2251
+ const filterByTk = (_a = ctx.action) == null ? void 0 : _a.params.filterByTk;
2252
+ if (filterByTk === void 0 || filterByTk === null || filterByTk === "") {
2253
+ ctx.throw(400, ctx.t("filterByTk is required", { ns: import_constants.NAMESPACE }));
2254
+ return;
2255
+ }
2256
+ const repository = ctx.db.getRepository("multiPortals");
2257
+ const updated = await ctx.db.sequelize.transaction(async (transaction) => {
2258
+ const target = await repository.findOne({
2259
+ filterByTk,
2260
+ fields: [...DEFAULT_MULTI_PORTAL_RESPONSE_FIELDS, "enabled", "uiLayoutUid"],
2261
+ lock: transaction.LOCK.UPDATE,
2262
+ transaction
2263
+ });
2264
+ if (!target) {
2265
+ ctx.throw(404, ctx.t("Portal not found", { ns: import_constants.NAMESPACE }));
2266
+ return null;
2267
+ }
2268
+ if (target.get("enabled") !== true) {
2269
+ ctx.throw(400, ctx.t("Disabled Portal cannot be set as default", { ns: import_constants.NAMESPACE }));
2270
+ return null;
2271
+ }
2272
+ const portalType = getDefaultMultiPortalType(target);
2273
+ if (!portalType) {
2274
+ ctx.throw(400, ctx.t("Unsupported Portal type cannot be set as default", { ns: import_constants.NAMESPACE }));
2275
+ return null;
2276
+ }
2277
+ if (portalType === "no-code") {
2278
+ const uiLayoutUid = target.get("uiLayoutUid");
2279
+ const uiLayout = typeof uiLayoutUid === "string" && uiLayoutUid ? await ctx.db.getRepository("uiLayouts").findOne({
2280
+ filter: {
2281
+ uid: uiLayoutUid,
2282
+ enabled: true
2283
+ },
2284
+ fields: ["uid"],
2285
+ lock: transaction.LOCK.UPDATE,
2286
+ transaction
2287
+ }) : null;
2288
+ if (!uiLayout) {
2289
+ ctx.throw(400, ctx.t("Portal layout must be enabled before setting it as default", { ns: import_constants.NAMESPACE }));
2290
+ return null;
2291
+ }
2292
+ }
2293
+ await repository.update({
2294
+ filter: { isDefault: true },
2295
+ values: { isDefault: null },
2296
+ transaction
2297
+ });
2298
+ await repository.update({
2299
+ filterByTk,
2300
+ values: { isDefault: true },
2301
+ transaction
2302
+ });
2303
+ return repository.findOne({
2304
+ filterByTk,
2305
+ fields: [...DEFAULT_MULTI_PORTAL_RESPONSE_FIELDS],
2306
+ transaction
2307
+ });
2308
+ });
2309
+ ctx.body = updated ? pickDefaultMultiPortalFields(updated) : null;
2310
+ await next();
2311
+ }
2170
2312
  async function listAccessibleMultiPortals(ctx, next) {
2171
2313
  const accessiblePortalUids = await listCurrentRoleAccessibleMultiPortalUids(ctx);
2172
2314
  const records = await ctx.db.getRepository("multiPortals").find({
@@ -2817,16 +2959,23 @@ class PluginMultiPortalServer extends import_server.Plugin {
2817
2959
  "desktopRoutes:listRolePermissionTargets",
2818
2960
  mapMultiPortalLayoutToUiLayoutForRolePermissionTargets
2819
2961
  );
2962
+ this.app.resourceManager.registerPreActionHandler("multiPortals:create", preventDirectDefaultPortalMutation);
2820
2963
  this.app.resourceManager.registerPreActionHandler("multiPortals:create", captureSkipCreatePortalDirectory);
2821
2964
  this.app.resourceManager.registerPreActionHandler("multiPortals:create", normalizeMultiPortalSlugValues);
2965
+ this.app.resourceManager.registerPreActionHandler("multiPortals:update", preventDirectDefaultPortalMutation);
2822
2966
  this.app.resourceManager.registerPreActionHandler("multiPortals:update", preventMultiPortalBackingLayoutChange);
2823
2967
  this.app.resourceManager.registerPreActionHandler("multiPortals:update", normalizeMultiPortalSlugValues);
2968
+ this.app.resourceManager.registerPreActionHandler("multiPortals:firstOrCreate", preventDirectDefaultPortalMutation);
2824
2969
  this.app.resourceManager.registerPreActionHandler(
2825
2970
  "multiPortals:firstOrCreate",
2826
2971
  preventMultiPortalBackingLayoutChange
2827
2972
  );
2828
2973
  this.app.resourceManager.registerPreActionHandler("multiPortals:firstOrCreate", captureSkipCreatePortalDirectory);
2829
2974
  this.app.resourceManager.registerPreActionHandler("multiPortals:firstOrCreate", normalizeMultiPortalSlugValues);
2975
+ this.app.resourceManager.registerPreActionHandler(
2976
+ "multiPortals:updateOrCreate",
2977
+ preventDirectDefaultPortalMutation
2978
+ );
2830
2979
  this.app.resourceManager.registerPreActionHandler(
2831
2980
  "multiPortals:updateOrCreate",
2832
2981
  preventMultiPortalBackingLayoutChange
@@ -2857,12 +3006,15 @@ class PluginMultiPortalServer extends import_server.Plugin {
2857
3006
  actions: ROLE_MULTI_PORTAL_PERMISSION_ACTIONS
2858
3007
  });
2859
3008
  this.app.acl.allow("multiPortals", "listEnabled", "public");
3009
+ this.app.acl.allow("multiPortals", "getDefault", "public");
2860
3010
  this.app.acl.allow("multiPortals", "listAccessible", "loggedIn");
2861
3011
  this.app.resourceManager.use(createPortalDeployUploadMiddleware(), {
2862
3012
  tag: "multiPortalDeployUpload",
2863
3013
  after: "acl"
2864
3014
  });
2865
3015
  this.app.resourceManager.registerActionHandler("multiPortals:listEnabled", listEnabledMultiPortals);
3016
+ this.app.resourceManager.registerActionHandler("multiPortals:getDefault", getDefaultMultiPortal);
3017
+ this.app.resourceManager.registerActionHandler("multiPortals:setDefault", setDefaultMultiPortal);
2866
3018
  this.app.resourceManager.registerActionHandler("multiPortals:listAccessible", listAccessibleMultiPortals);
2867
3019
  this.app.resourceManager.registerActionHandler("multiPortals:deploy", async (ctx, next) => {
2868
3020
  await this.deployPortalDist(ctx, next);
@@ -2887,6 +3039,11 @@ class PluginMultiPortalServer extends import_server.Plugin {
2887
3039
  (0, import_ensureDefaultRoleMultiPortalAccess.applyDefaultRoleMultiPortalAccess)(role);
2888
3040
  });
2889
3041
  this.app.db.on("desktopRoutes.afterCreate", reconcileCreatedDesktopRoutePermissions);
3042
+ this.app.db.on("multiPortals.beforeUpdate", (multiPortal) => {
3043
+ if (multiPortal.get("enabled") === false && multiPortal.get("isDefault") === true) {
3044
+ multiPortal.set("isDefault", null);
3045
+ }
3046
+ });
2890
3047
  this.app.db.on("multiPortals.afterCreate", async (multiPortal, options) => {
2891
3048
  await grantDefaultAccessToNewMultiPortal(this.app.db, multiPortal, options);
2892
3049
  await this.publishAppManifestItem(multiPortal, options);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nocobase/plugin-multi-portal",
3
- "version": "3.0.0-alpha.3",
3
+ "version": "3.0.0-alpha.4",
4
4
  "main": "dist/server/index.js",
5
5
  "nocobase": {
6
6
  "supportedVersions": [
@@ -13,7 +13,7 @@
13
13
  "description.zh-CN": "为 Client V2 提供内置 Portal 注册、入口访问与路由权限管理。",
14
14
  "devDependencies": {
15
15
  "@ant-design/icons": "5.x",
16
- "@nocobase/plugin-ui-layout": "3.0.0-alpha.3",
16
+ "@nocobase/plugin-ui-layout": "3.0.0-alpha.4",
17
17
  "ahooks": "3.x",
18
18
  "antd": "5.x",
19
19
  "react": "^18.2.0",
@@ -29,5 +29,5 @@
29
29
  "@nocobase/server": "2.x",
30
30
  "@nocobase/test": "2.x"
31
31
  },
32
- "gitHead": "9899cd799c070c7bd85140148ea5b100b046bdc7"
32
+ "gitHead": "6658768567378382de758c4e814ac510d688400c"
33
33
  }
@@ -1,10 +0,0 @@
1
- /**
2
- * This file is part of the NocoBase (R) project.
3
- * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
- * Authors: NocoBase Team.
5
- *
6
- * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
- * For more information, please refer to: https://www.nocobase.com/agreement.
8
- */
9
-
10
- "use strict";(self.webpackChunk_nocobase_plugin_multi_portal_client_v2=self.webpackChunk_nocobase_plugin_multi_portal_client_v2||[]).push([["556"],{524:function(e,t,r){r.r(t),r.d(t,{createMultiPortal:function(){return Y},default:function(){return eT},deleteMultiPortals:function(){return ee},derivePortalNamingFromGitUrl:function(){return eb},getRepoNameFromGitUrl:function(){return ey},updateMultiPortal:function(){return Z}});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 v(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 g(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},I=c().forwardRef(function(e,t){return c().createElement("div",{ref:t},c().createElement(a.IconPicker,e))});function O(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 P(e,t){var r,n=null==(r=e.options)?void 0:r[t];return"string"==typeof n&&n.trim()?n.trim():""}function B(e){return P(e,"path")||P(e,"href")||P(e,"url")}function x(e){return e===a.NocoBaseDesktopRouteType.page||e===a.NocoBaseDesktopRouteType.flowPage}function D(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=D(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 C(e){return!0!==e.hidden&&e.type!==a.NocoBaseDesktopRouteType.page}function N(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=D(r,e.parentId);return(null==n?void 0:n.schemaUid)?N(t.routePath,"".concat(n.schemaUid,"/tab/").concat(e.schemaUid)):""}return N(t.routePath,e.schemaUid)}function F(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=x(e.type),u=e.type===a.NocoBaseDesktopRouteType.tabs,c=g(v({},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=v({},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?g(v({},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),v=null!=(t=null==(r=e.initialRoute)?void 0:r.type)?t:h,g=(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?B(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 v===a.NocoBaseDesktopRouteType.tabs?void 0:[{message:o("Title field is required"),required:!0,whitespace:!0}]},[v,o]),O=(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:O,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:v}))):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:g})),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(I,null)),v===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"))),x(v)?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 U(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 z(e){var t,r=e.portal,l=(0,o.useFlowContext)(),s=(0,d.kj)(),p=c().useRef(s),f=i.App.useApp(),y=f.message,h=f.modal,S=i.theme.useToken().token,I=w((0,u.useState)([]),2),P=I[0],N=I[1],z=w((0,u.useState)(!1),2),L=z[0],q=z[1],_=w((0,u.useState)({}),2),G=_[0],V=_[1],H=w((0,u.useState)([]),2),X=H[0],$=H[1],K=(0,u.useMemo)(function(){return l.api.resource("desktopRoutes")},[l.api]),W=r.uid,Q=(null==(t=r.uiLayout)?void 0:t.layoutType)==="mobile";c().useEffect(function(){p.current=s},[s]);var J=(0,u.useCallback)(function(){return b(function(){var e,t;return T(this,function(r){switch(r.label){case 0:q(!0),r.label=1;case 1:return r.trys.push([1,3,4,5]),[4,l.api.request({url:"/desktopRoutes:list",method:"get",params:{paginate:!1,portal:W,sort:"sort",tree:!0},skipNotify:!0})];case 2:var n;return N(null!=(e=(!(n=null==(t=r.sent())?void 0:t.data)||(void 0===n?"undefined":k(n))!=="object"?{}:{data:Array.isArray(n.data)?n.data:[]}).data)?e:[]),$([]),[3,5];case 3:return r.sent(),y.error(p.current("Failed to load routes")),N([]),[3,5];case 4:return q(!1),[7];case 5:return[2]}})})()},[l.api,y,W]);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,l,i,u,c,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=x(t.type)&&!!n.enableTabs!==t.enableTabs,[4,K.update({filterByTk:t.id,portal:W,values:F(n,t,{mobile:Q})})];case 1:if(f.sent(),!o)return[3,9];l=!0,i=!1,u=void 0,f.label=2;case 2:var b;f.trys.push([2,7,8,9]),c=(null!=(b=t.children)?b:[]).filter(function(e){return e.type===a.NocoBaseDesktopRouteType.tabs})[Symbol.iterator](),f.label=3;case 3:if(l=(p=c.next()).done)return[3,6];if(void 0===(d=p.value).id)return[3,5];return[4,K.update({filterByTk:d.id,portal:W,values:{hidden:!n.enableTabs}})];case 4:f.sent(),f.label=5;case 5:return l=!0,[3,3];case 6:return[3,9];case 7:return m=f.sent(),i=!0,u=m,[3,9];case 8:try{l||null==c.return||c.return()}finally{if(i)throw u}return[7];case 9:return y.success(s("Updated successfully")),[3,12];case 10:return[4,K.create({portal:W,values:v({},F(n,void 0,{mobile:Q,withInitialPageTab:!0}),(null==r?void 0:r.id)!==void 0?{parentId:r.id}:{})})];case 11:f.sent(),y.success(s("Saved successfully")),f.label=12;case 12:return[4,Y()];case 13:return f.sent(),[2]}})})()},[K,y,Q,W,Y,s]),ee=(0,u.useCallback)(function(e){var t,r,n=e.editingRoute?null!=(t=D(P,e.editingRoute.id))?t:e.editingRoute:null,a=null!=(r=e.parentRoute)?r:null;l.viewer.drawer({width:S.screenSM,closable:!0,content:function(){return c().createElement(M,{initialRoute:n,mobile:Q,onSubmit:function(e){return Z({editingRoute:n,parentRoute:a,values:e})},parentRoute:a,title:n?s("Edit route"):a?s("Add child route"):s("Add new")})}})},[l.viewer,Q,P,Z,s,S.screenSM]),et=(0,u.useCallback)(function(e){return b(function(){return T(this,function(t){switch(t.label){case 0:return[4,K.destroy({filterByTk:e,portal:W})];case 1:return t.sent(),y.success(s("Deleted successfully")),[4,Y()];case 2:return t.sent(),[2]}})})()},[K,y,W,Y,s]),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(C).map(function(t){var r=t.children,n=E(t,["children"]),a=r?e(r):[];return a.length?g(v({},n),{children:a}):n})}(P)},[P]),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(O(r,n).toLowerCase().includes(a)||String(r.schemaUid||"").toLowerCase().includes(a)||String(r.type||"").toLowerCase().includes(a)||B(r).toLowerCase().includes(a)||l.length)&&t.push(g(v({},r),{children:l.length?l:r.children})),t},[]):t}(ea,G.keyword||"",s)},[G.keyword,s,ea]),el=(0,u.useCallback)(function(e){return b(function(){var t,r,n,a,o,l,i;return T(this,function(u){switch(u.label){case 0:t=!0,r=!1,n=void 0,u.label=1;case 1:u.trys.push([1,6,7,8]),a=er[Symbol.iterator](),u.label=2;case 2:if(t=(o=a.next()).done)return[3,5];return l=o.value,[4,K.update({filterByTk:l,portal:W,values:e})];case 3:u.sent(),u.label=4;case 4:return t=!0,[3,2];case 5:return[3,8];case 6:return i=u.sent(),r=!0,n=i,[3,8];case 7:try{t||null==a.return||a.return()}finally{if(r)throw n}return[7];case 8:return y.success(s("Updated successfully")),[4,Y()];case 9:return u.sent(),[2]}})})()},[K,y,W,Y,er,s]),ei=(0,u.useCallback)(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];h.confirm({cancelText:s("Cancel"),content:s("Are you sure you want to delete it?"),okText:s("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?s("Delete routes"):s("Delete route")})},[et,h,s]),eu=(0,u.useMemo)(function(){return[{dataIndex:"title",title:s("Title"),width:260,render:function(e,t){return O(t,s)}},{dataIndex:"type",title:s("Type"),width:160,render:function(e){return c().createElement(A,{type:e})}},{dataIndex:"hideInMenu",title:s("Show in menu"),width:140,render:function(e){return e?c().createElement(n.CloseOutlined,{"aria-label":s("Hidden"),style:{color:S.colorError}}):c().createElement(n.CheckOutlined,{"aria-label":s("Shown"),style:{color:S.colorSuccess}})}},{dataIndex:"routePath",title:s("Path"),width:320,render:function(e,t){var n=j(t,r,P);return n?c().createElement(i.Typography.Paragraph,{copyable:!0,ellipsis:!0,style:{marginBottom:0}},n):null}},{dataIndex:"actions",title:s("Actions"),width:260,render:function(e,t){var n=O(t,s),o=j(t,r,P),u=o?(0,m.u)(l.app,o,r.portalType):"";return c().createElement(i.Space,{size:"small"},c().createElement(i.Button,{"aria-label":s("Add child {{route}}",{route:n}),disabled:!(t.type===a.NocoBaseDesktopRouteType.group||(t.type===a.NocoBaseDesktopRouteType.page||t.type===a.NocoBaseDesktopRouteType.flowPage)&&t.enableTabs),onClick:function(){return ee({parentRoute:t})},size:"small",style:R,type:"link"},s("Add child")),c().createElement(i.Button,{"aria-label":s("Edit {{route}}",{route:n}),onClick:function(){return ee({editingRoute:t})},size:"small",style:R,type:"link"},s("Edit")),c().createElement(i.Button,{"aria-label":s("View {{route}}",{route:n}),disabled:!o,href:u||void 0,rel:"noopener noreferrer",size:"small",style:R,target:"_blank",type:"link"},s("View")),c().createElement(i.Button,{"aria-label":s("Delete {{route}}",{route:n}),onClick:function(){return void 0!==t.id&&ei(t.id)},size:"small",style:R,type:"link"},s("Delete")))}}]},[l.app,ei,ee,r,P,s,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(U,{onApply:V}),c().createElement(i.Space,null,c().createElement(i.Button,{icon:c().createElement(n.ReloadOutlined,null),loading:L,onClick:J},s("Refresh")),c().createElement(i.Button,{"aria-label":s("Delete"),disabled:!en,icon:c().createElement(n.DeleteOutlined,null),onClick:function(){return ei(er,!0)}},s("Delete")),c().createElement(i.Button,{"aria-label":s("Hide in menu"),disabled:!en,icon:c().createElement(n.EyeInvisibleOutlined,null),onClick:function(){return el({hideInMenu:!0})}},s("Hide in menu")),c().createElement(i.Button,{"aria-label":s("Show in menu"),disabled:!en,icon:c().createElement(n.EyeOutlined,null),onClick:function(){return el({hideInMenu:!1})}},s("Show in menu")),c().createElement(i.Button,{"aria-label":s("Add new"),icon:c().createElement(n.PlusOutlined,null),onClick:function(){return ee({})},type:"primary"},s("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:s("No routes")},pagination:{pageSize:20,total:eo.length},rowKey:function(e){var t;return null!=(t=e.id)?t:String(e.schemaUid)},rowSelection:{onChange:$,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(z,{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 _(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 G(e){return function(){var t=this,r=arguments;return new Promise(function(n,a){var o=e.apply(t,r);function l(e){_(o,n,a,l,i,"next",e)}function i(e){_(o,n,a,l,i,"throw",e)}l(void 0)})}}function V(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 H(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 $(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 W(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 Q(e,t){if(e&&(void 0===e?"undefined":$(e))==="object")return e[t]}function J(e){return"string"==typeof e&&e?e:void 0}function Y(e){return G(function(){return W(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 Z(e){return G(function(){return W(this,function(t){switch(t.label){case 0:return[4,e.resource.update({filterByTk:e.filterByTk,values:e.values})];case 1:return t.sent(),e.onSubmitted(),[2]}})})()}function ee(e){return G(function(){return W(this,function(t){switch(t.label){case 0:return[4,e.resource.destroy({filterByTk:e.filterByTk})];case 1:return t.sent(),e.onDeleted(),[2]}})})()}I.displayName="IconPickerFormControl";var et="no-code",er=["no-code","ai"],en="nocobase",ea="main",eo={portalType:et,enabled:!0},el={alignItems:"flex-start"},ei="multi-portal-described-radio",eu="\n.".concat(ei," .ant-radio {\n align-self: flex-start;\n margin-top: 3px;\n}\n"),ec=/^[a-z0-9_-]+$/,es=c().forwardRef(function(e,t){return c().createElement("div",{ref:t},c().createElement(a.IconPicker,e))});function ep(e){var t=null==e?void 0:e.trim();if(t&&!ec.test(t))return"Portal name can only contain lowercase letters, numbers, hyphens, and underscores"}function ed(e){return"string"!=typeof e?null:e.trim()||null}function em(e){var t=ed(e);return t&&er.some(function(e){return e===t})?t:et}function ef(e){var t=ed(e);return"nocobase"===t||"git"===t?t:en}function ey(e){var t=(e||"").trim().replace(/\.git$/i,"").replace(/\/+$/,"");if(t)return t.split(/[/:]/).filter(Boolean).pop()||void 0}function eb(e){var t=ey(e);if(t){var r=t.toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"");if(r){var n=r.split(/[-_]+/).filter(Boolean).map(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}).join(" ");return{portalName:r,title:n||r}}}}function eh(e){var t,r=e.portalName.trim(),n=ep(r);if(n)throw Error(n);e.cover,e.gitBranch,e.gitPath,e.gitRepo,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","sourceStorage"]),o=em(e.portalType);return H(V({},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:function(e){var t=e.options||{},r=e.cover||null;if("ai"!==em(e.portalType))return H(V({},t),{cover:r});var n=ef(e.sourceStorage);return"git"!==n?H(V({},t),{cover:r,sourceStorage:n}):H(V({},t),{cover:r,sourceStorage:n,git:H(V({},t.git),{repo:ed(e.gitRepo)||"",branch:ed(e.gitBranch)||ea,path:ed(e.gitPath)||""})})}(e)})}function ev(e,t){return"desktop"===e.layoutType?t("Desktop"):"mobile"===e.layoutType?t("Mobile"):e.title||e.uid}function eg(e){var t,r,n=function(e){if(e&&(void 0===e?"undefined":$(e))==="object"){var t,r,n,a=ef(e.sourceStorage);return"git"!==a?H(V({},e),{sourceStorage:a}):H(V({},e),{sourceStorage:a,git:H(V({},e.git),{repo:ed(null==(t=e.git)?void 0:t.repo)||"",branch:ed(null==(r=e.git)?void 0:r.branch)||ea,path:ed(null==(n=e.git)?void 0:n.path)||""})})}}(e.options);return V({title:e.title,uid:e.uid,portalType:em(e.portalType),portalName:e.portalName,routePath:e.routePath,uiLayoutUid:e.uiLayoutUid||(null==(r=e.uiLayout)?void 0:r.uid)||"",icon:null!=(t=e.icon)?t:null,enabled:e.enabled},n?{options:n}:{})}function eE(e){return H(V({},e),{defaultPortal:"__default_portal__"===e.uid||(0,s.Xc)(e.uid)})}es.displayName="IconPickerFormControl";var ew={display:"grid",gap:16,gridTemplateColumns:"repeat(auto-fill, minmax(272px, 1fr))"};function ek(e){var t,r,n,o,l,u=e.record,s=i.theme.useToken().token,p=!(6!==(t=(s.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,d=(r=u.uid||u.portalName||"",n=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)%360,p?"linear-gradient(135deg, hsl(".concat(n,", 14%, 26%) 0%, hsl(").concat((n+40)%360,", 16%, 18%) 100%)"):"linear-gradient(135deg, hsl(".concat(n,", 26%, 93%) 0%, hsl(").concat((n+40)%360,", 22%, 85%) 100%)")),m=(u.title||u.portalName||"?").trim().charAt(0).toUpperCase(),f=null==(l=u.options)||null==(o=l.cover)?void 0:o.url;return f?c().createElement("div",{"aria-hidden":!0,style:{background:"".concat(s.colorFillQuaternary,' center / cover no-repeat url("').concat(f,'")'),height:132}}):c().createElement("div",{"aria-hidden":!0,style:{alignItems:"center",background:d,display:"flex",height:132,justifyContent:"center",overflow:"hidden"}},u.icon?c().createElement(a.Icon,{type:u.icon,style:{color:s.colorTextSecondary,fontSize:44}}):c().createElement("span",{style:{color:s.colorTextSecondary,fontSize:44,fontWeight:600,lineHeight:1}},m))}function eS(e){var t,r=e.record,n=e.onSubmitted,p=(0,d.kj)(),m=(0,o.useFlowContext)(),f=i.theme.useToken().token,y=i.App.useApp().notification,b=X(i.Form.useForm(),1)[0],h=X((0,u.useState)(!1),2),v=h[0],g=h[1],E=(0,u.useMemo)(function(){return m.api.resource("multiPortals")},[m.api]),w=(0,l.useRequest)(function(){return G(function(){var e,t;return W(this,function(r){switch(r.label){case 0:return[4,m.api.request({url:"uiLayouts:listEnabled",method:"get",params:{pageSize:200,sort:["uid"]},skipNotify:!0})];case 1:return[2,Array.isArray(null==(t=r.sent())||null==(e=t.data)?void 0:e.data)?t.data.data:[]]}})})()}),k=(0,u.useMemo)(function(){var e;return(null!=(e=w.data)?e:[]).map(function(e){return{value:e.uid,label:ev(e,p)}})},[w.data,p]),S=i.Form.useWatch("portalType",b);(0,u.useEffect)(function(){if(!(r||b.getFieldValue("uiLayoutUid"))){var e,t,n=null==(e=w.data)||null==(t=e.find(function(e){return"desktop"===e.layoutType}))?void 0:t.uid;n&&b.setFieldValue("uiLayoutUid",n)}},[b,w.data,r]);var T=(0,u.useMemo)(function(){var e,t,n,a,l,i;return r?(i=ef(null==(l=(a=eg(r)).options)?void 0:l.sourceStorage),H(V({},a),{sourceStorage:i,gitRepo:"git"===i&&(null==l||null==(e=l.git)?void 0:e.repo)||"",gitBranch:(null==l||null==(t=l.git)?void 0:t.branch)||ea,gitPath:(null==l||null==(n=l.git)?void 0:n.path)||"",cover:(null==l?void 0:l.cover)||null})):H(V({},eo),{portalType:"ai",uid:"portal-".concat((0,o.randomId)()),sourceStorage:en,gitBranch:ea,gitPath:"",cover:null})},[r]),R=(0,s.Xc)(null==r?void 0:r.uid),I=R||!!r,O=(0,u.useRef)({}),P=(0,u.useCallback)(function(e){if("gitRepo"in e){var t,r,n=eb(e.gitRepo);if(n){var a=b.getFieldsValue(["title","portalName"]),o={};(null==(t=a.title)?void 0:t.trim())&&a.title!==O.current.title||(o.title=n.title),(null==(r=a.portalName)?void 0:r.trim())&&a.portalName!==O.current.portalName||(o.portalName=n.portalName),Object.keys(o).length&&(b.setFieldsValue(o),O.current=V({},O.current,o))}}},[b]),B=(0,u.useCallback)(function(){return G(function(){var e,t;return W(this,function(a){switch(a.label){case 0:return[4,b.validateFields()];case 1:e=eh.apply(void 0,[a.sent()]),g(!0),a.label=2;case 2:if(a.trys.push([2,7,8,9]),!r)return[3,4];return[4,Z({resource:E,filterByTk:r.uid,values:e,onSubmitted:n})];case 3:return a.sent(),[3,6];case 4:return[4,Y({resource:E,values:e,onSubmitted:n})];case 5:a.sent(),a.label=6;case 6:return[3,9];case 7:throw t=a.sent(),y.error({message:function(e){var t=Q(e,"response"),r=Q(t,"data"),n=Q(r,"errors");if(Array.isArray(n)){var a=n.map(function(e){return J(Q(e,"message"))}).filter(function(e){return!!e}).join("\n");if(a)return a}return J(Q(Q(r,"error"),"message"))||J(Q(r,"message"))||J(Q(e,"message"))}(t)||p("Failed to save portal"),role:"alert"}),t;case 8:return g(!1),[7];case 9:return[2]}})})()},[b,y,n,r,E,p]);return c().createElement(a.DrawerFormLayout,{title:r?p("Edit portal"):p("Add portal"),onSubmit:B,submitting:v,submitText:p("Submit"),cancelText:p("Cancel")},c().createElement("style",null,eu),c().createElement(i.Form,{form:b,layout:"vertical",initialValues:T,onValuesChange:P},c().createElement(i.Form.Item,{name:"uid",hidden:!0,rules:[{required:!0,whitespace:!0,message:p("The field value is required")}]},c().createElement(i.Input,null)),c().createElement(i.Form.Item,{name:"portalName",label:p("Portal name"),extra:p("Used in the access path."),rules:[{required:!0,whitespace:!0,message:p("The field value is required")},{validator:function(e,t){var r=ep(t);return r?Promise.reject(Error(p(r))):Promise.resolve()}}]},c().createElement(i.Input,{disabled:I,addonBefore:"ai"===S?"/x/":"/v/"})),c().createElement(i.Form.Item,{name:"title",label:p("Title"),rules:[{required:!0,whitespace:!0,message:p("Title field is required")}]},c().createElement(i.Input,null)),c().createElement(i.Form.Item,{name:"portalType",label:p("Portal type"),htmlFor:"multi-portal-portal-type-ai",rules:[{required:!0,message:p("The field value is required")}]},c().createElement(i.Radio.Group,{name:"multi-portal-portal-type",disabled:I,style:{width:"100%"}},c().createElement(i.Space,{direction:"vertical",style:{width:"100%"}},c().createElement(i.Radio,{className:ei,id:"multi-portal-portal-type-ai",style:el,value:"ai"},c().createElement("span",null,p("AI portal")),c().createElement("div",{style:{color:f.colorTextDescription,fontSize:f.fontSizeSM}},p("Create with AI Agent and code. Users can request changes in natural language. Path: /x/<name>"))),c().createElement(i.Radio,{className:ei,style:el,value:"no-code"},c().createElement("span",null,p("No-code portal")),c().createElement("div",{style:{color:f.colorTextDescription,fontSize:f.fontSizeSM}},p("Create with visual configuration. AI can help adjust the configuration. Path: /v/<name>")))))),c().createElement(i.Form.Item,{noStyle:!0,shouldUpdate:function(e,t){return e.portalType!==t.portalType}},function(e){return"ai"===(0,e.getFieldValue)("portalType")?c().createElement(c().Fragment,null,c().createElement(i.Form.Item,{name:"sourceStorage",label:p("Source storage"),htmlFor:"multi-portal-source-storage-nocobase",rules:[{required:!0,message:p("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:ei,id:"multi-portal-source-storage-nocobase",style:el,value:"nocobase"},c().createElement("span",null,p("NocoBase")),c().createElement("div",{style:{color:f.colorTextDescription,fontSize:f.fontSizeSM}},p("Manage portal source code in NocoBase."))),c().createElement(i.Radio,{className:ei,style:el,value:"git"},c().createElement("span",null,p("Git")),c().createElement("div",{style:{color:f.colorTextDescription,fontSize:f.fontSizeSM}},p("Manage portal 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:p("Git repository URL"),extra:p("The title and name below are filled in from the repository name."),rules:[{required:!0,whitespace:!0,message:p("The field value is required")}]},c().createElement(i.Input,{placeholder:"git@github.com:nocobase/customer-portal.git",allowClear:!0})),c().createElement(i.Space,{size:f.marginSM,style:{display:"flex"},align:"start"},c().createElement(i.Form.Item,{name:"gitBranch",label:p("Git branch"),style:{flex:1}},c().createElement(i.Input,{placeholder:ea})),c().createElement(i.Form.Item,{name:"gitPath",label:p("Git path"),style:{flex:1},extra:p("Directory inside the Git repository for this portal. Leave empty for the root.")},c().createElement(i.Input,{placeholder:"/"})))):null})):null}),c().createElement(i.Divider,{style:{marginBlock:f.marginSM}}),c().createElement(i.Form.Item,{name:"uiLayoutUid",label:p("Device"),extra:p("No-code portals render with the components of this device; AI portals use it for grouping."),dependencies:["portalType"],rules:[{validator:function(e,t){return"ai"===b.getFieldValue("portalType")||t?Promise.resolve():Promise.reject(Error(p("The field value is required")))}}]},c().createElement(i.Select,{disabled:R||!!((null==r?void 0:r.uiLayoutUid)||(null==r||null==(t=r.uiLayout)?void 0:t.uid)),loading:w.loading,options:k,showSearch:!0,optionFilterProp:"label"})),c().createElement(i.Form.Item,{name:"cover",label:p("Cover"),extra:p("Shown on the portal card. A 16:9 image works best.")},c().createElement(a.AttachmentUpload,{accept:"image/*",preview:{width:160,height:90,fit:"cover"},uploadText:p("Upload cover")})),c().createElement(i.Form.Item,{name:"icon",label:p("Icon"),extra:p("Used as the cover placeholder when no cover is uploaded.")},c().createElement(es,null)),c().createElement(i.Form.Item,{name:"enabled",label:p("Enabled"),valuePropName:"checked",extra:p("When disabled, this portal will not be registered or accessible.")},c().createElement(i.Switch,null))))}var eT=function(){var e,t=(0,d.kj)(),r=(0,o.useFlowContext)(),a=i.theme.useToken().token,s=i.App.useApp(),f=s.message,y=s.modal,b=X((0,u.useState)([]),2),h=b[0],v=b[1],g=(0,u.useMemo)(function(){return r.api.resource("multiPortals")},[r.api]),E=(0,l.useRequest)(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;return G(function(){var t,r;return W(this,function(n){switch(n.label){case 0:return[4,g.list({page:e,pageSize:20,sort:["createdAt"],appends:["uiLayout"]})];case 1:return[2,null!=(t=null==(r=n.sent())?void 0:r.data)?t:{data:[]}]}})})()}),w=E.data,k=E.loading,S=(0,u.useMemo)(function(){return Array.isArray(null==w?void 0:w.data)?w.data.map(eE):[]},[null==w?void 0:w.data]),T=(0,u.useMemo)(function(){var e,t,r,n=null==w?void 0:w.meta;return!!n&&{total:null!=(e=n.count)?e:S.length,pageSize:null!=(t=n.pageSize)?t:20,current:null!=(r=n.page)?r:1}},[null==w?void 0:w.meta,S.length]),R=(0,u.useCallback)(function(){var e,t;E.run(null!=(e=null==w||null==(t=w.meta)?void 0:t.page)?e:1)},[E,null==w||null==(e=w.meta)?void 0:e.page]),I=(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]),O=(0,u.useCallback)(function(){R(),I()},[I,R]),P=(0,u.useCallback)(function(e){r.viewer.drawer({width:a.screenMD,closable:!0,content:function(){return c().createElement(eS,{record:e,onSubmitted:O})}})},[r.viewer,O,a.screenMD]),B=(0,u.useCallback)(function(e){r.viewer.drawer({width:"80%",closable:!0,content:function(){return c().createElement(L,{portal:e})}})},[r.viewer]),x=(0,u.useCallback)(function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};y.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 G(function(){return W(this,function(t){switch(t.label){case 0:return[4,ee({resource:g,filterByTk:e,onDeleted:O})];case 1:return t.sent(),[2]}})})()}})},[y,O,g,t]),D=(0,u.useCallback)(function(e,r){return G(function(){return W(this,function(n){switch(n.label){case 0:v(function(t){return t.includes(e.uid)?t:((function(e){if(Array.isArray(e))return q(e)})(t)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||K(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.")}()).concat([e.uid])}),n.label=1;case 1:return n.trys.push([1,,3,4]),[4,Z({resource:g,filterByTk:e.uid,values:H(V({},eg(e)),{enabled:r}),onSubmitted:O})];case 2:return n.sent(),f.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]}})})()},[f,O,g,t]),C=(0,u.useCallback)(function(e){var o,l=(0,m.u)(r.app,e.routePath,e.portalType),u=em(e.portalType)===et,s=!u||!e.enabled,p=e.uiLayout?ev({layoutType:e.uiLayout.layoutType,title:e.uiLayout.title,uid:e.uiLayout.uid||e.uiLayoutUid||""},t):e.uiLayoutUid;return c().createElement(i.Card,{key:e.uid,size:"small",cover:c().createElement(ek,{record:e}),styles:{body:{padding:a.paddingSM}},style:{opacity:e.enabled?1:.6},actions:[c().createElement(i.Tooltip,{key:"view",title:t("View")},c().createElement(i.Button,{"aria-label":t("View"),type:"text",size:"small",icon:c().createElement(n.ExportOutlined,null),onClick:function(){return window.open(l,"_blank","noopener,noreferrer")}})),c().createElement(i.Tooltip,{key:"edit",title:t("Edit")},c().createElement(i.Button,{"aria-label":t("Edit"),type:"text",size:"small",icon:c().createElement(n.EditOutlined,null),onClick:function(){return P(e)}})),c().createElement(i.Tooltip,{key:"routes",title:s?"":t("Routes")},c().createElement(i.Button,{"aria-label":t("Routes"),type:"text",size:"small",icon:c().createElement(n.ApartmentOutlined,null),disabled:s,onClick:function(){return B(e)}})),c().createElement(i.Tooltip,{key:"delete",title:t("Delete")},c().createElement(i.Button,{"aria-label":t("Delete"),type:"text",size:"small",icon:c().createElement(n.DeleteOutlined,null),onClick:function(){return x(e.uid)}}))]},c().createElement(i.Flex,{align:"flex-start",justify:"space-between",gap:a.marginXS},c().createElement("div",{style:{minWidth:0}},c().createElement(i.Typography.Text,{strong:!0,ellipsis:!0,style:{display:"block"}},e.title),c().createElement(i.Typography.Link,{href:l,target:"_blank",rel:"noopener noreferrer",ellipsis:!0,style:{display:"block",fontSize:a.fontSizeSM}},l)),c().createElement(i.Switch,{"aria-label":t("Enabled"),checked:e.enabled,loading:h.includes(e.uid),size:"small",onChange:function(t){return G(function(){return W(this,function(r){switch(r.label){case 0:return[4,D(e,t)];case 1:return r.sent(),[2]}})})()}})),c().createElement(i.Space,{size:[4,4],wrap:!0,style:{marginTop:a.marginXS}},c().createElement(i.Tag,null,u?t("No-code"):t("AI")),p?c().createElement(i.Tag,{color:(null==(o=e.uiLayout)||o.layoutType,"default")},p):null,e.defaultPortal?c().createElement(i.Tag,null,t("Default")):null))},[r.app,x,D,P,B,t,a.fontSizeSM,a.marginXS,a.paddingSM,h]);return c().createElement("div",null,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:O},t("Refresh")),c().createElement(i.Button,{type:"primary",icon:c().createElement(n.PlusOutlined,null),onClick:function(){return P()}},t("Add portal")))),c().createElement(i.Spin,{spinning:k},0!==S.length||k?c().createElement("div",{style:ew},S.map(C),c().createElement("button",{type:"button",onClick:function(){return P()},style:{alignItems:"center",background:"transparent",border:"".concat(a.lineWidth,"px dashed ").concat(a.colorBorder),borderRadius:a.borderRadiusLG,color:a.colorTextDescription,cursor:"pointer",display:"flex",flexDirection:"column",gap:a.marginXS,justifyContent:"center",minHeight:228,width:"100%"}},c().createElement(n.PlusOutlined,{style:{fontSize:22}}),c().createElement("span",null,t("Add portal")))):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 P()}},t("Add portal")))),T?c().createElement(i.Flex,{justify:"flex-end",style:{marginTop:a.marginMD}},c().createElement(i.Pagination,{current:T.current,pageSize:T.pageSize,total:T.total,showSizeChanger:!1,onChange:function(e){return E.run(e)}})):null)}}}]);