@nocobase/client 1.9.34 → 1.9.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/index.mjs +31 -14
- package/lib/index.js +15 -3
- package/package.json +5 -5
package/es/index.mjs
CHANGED
|
@@ -91,7 +91,7 @@ import { TinyColor } from "@ctrl/tinycolor";
|
|
|
91
91
|
import * as i18next from "i18next";
|
|
92
92
|
import i18next__default from "i18next";
|
|
93
93
|
import * as antIcons from "@ant-design/icons";
|
|
94
|
-
import antIcons__default, { LoadingOutlined, createFromIconfontCN, RightOutlined, QuestionCircleOutlined, MenuOutlined, CloseOutlined, CloseCircleOutlined, PlusOutlined, DragOutlined, CopyOutlined, LeftOutlined, FileImageOutlined, ScanOutlined, CloseCircleFilled, ExclamationCircleFilled, UserOutlined, HighlightOutlined, EllipsisOutlined, ArrowLeftOutlined, DownOutlined, DownloadOutlined, UndoOutlined, RedoOutlined, InboxOutlined, DeleteOutlined, CheckOutlined, EditOutlined, ZoomInOutlined, EyeInvisibleOutlined, EyeOutlined, VerticalAlignBottomOutlined, VerticalAlignTopOutlined, VerticalAlignMiddleOutlined, RightSquareOutlined, SyncOutlined, ApiOutlined, SettingOutlined, ReadOutlined, ReloadOutlined, SearchOutlined, TableOutlined, FormOutlined, ProfileOutlined, AppstoreOutlined, OrderedListOutlined, LineOutlined, DisconnectOutlined, TranslationOutlined } from "@ant-design/icons";
|
|
94
|
+
import antIcons__default, { LoadingOutlined, createFromIconfontCN, RightOutlined, QuestionCircleOutlined, MenuOutlined, CloseOutlined, CloseCircleOutlined, PlusOutlined, DragOutlined, CopyOutlined, LeftOutlined, FileImageOutlined, ScanOutlined, CloseCircleFilled, ExclamationCircleFilled, UserOutlined, HighlightOutlined, EllipsisOutlined, ArrowLeftOutlined, DownOutlined, DownloadOutlined, UndoOutlined, RedoOutlined, InboxOutlined, DeleteOutlined, CheckOutlined, EditOutlined, ZoomInOutlined, EyeInvisibleOutlined, EyeOutlined, VerticalAlignBottomOutlined, VerticalAlignTopOutlined, VerticalAlignMiddleOutlined, RightSquareOutlined, SyncOutlined, ApiOutlined, SettingOutlined, WarningFilled, ReadOutlined, ReloadOutlined, SearchOutlined, TableOutlined, FormOutlined, ProfileOutlined, AppstoreOutlined, OrderedListOutlined, LineOutlined, DisconnectOutlined, TranslationOutlined } from "@ant-design/icons";
|
|
95
95
|
import * as ReactRouter from "react-router";
|
|
96
96
|
import { matchRoutes } from "react-router";
|
|
97
97
|
import omit$1 from "lodash/omit";
|
|
@@ -8856,7 +8856,7 @@ function addAppVersion(e, t) {
|
|
|
8856
8856
|
addAppVersion((o = e.properties) == null ? void 0 : o[n], t);
|
|
8857
8857
|
}), e;
|
|
8858
8858
|
}
|
|
8859
|
-
const name = "@nocobase/client", version = "1.9.
|
|
8859
|
+
const name = "@nocobase/client", version = "1.9.36", license = "AGPL-3.0", main = "lib/index.js", module = "es/index.mjs", types = "es/index.d.ts", dependencies = {
|
|
8860
8860
|
"@ahooksjs/use-url-state": "3.5.1",
|
|
8861
8861
|
"@ant-design/cssinjs": "^1.11.1",
|
|
8862
8862
|
"@ant-design/icons": "^5.6.1",
|
|
@@ -8877,9 +8877,9 @@ const name = "@nocobase/client", version = "1.9.34", license = "AGPL-3.0", main
|
|
|
8877
8877
|
"@formily/reactive-react": "^2.2.27",
|
|
8878
8878
|
"@formily/shared": "^2.2.27",
|
|
8879
8879
|
"@formily/validator": "^2.2.27",
|
|
8880
|
-
"@nocobase/evaluators": "1.9.
|
|
8881
|
-
"@nocobase/sdk": "1.9.
|
|
8882
|
-
"@nocobase/utils": "1.9.
|
|
8880
|
+
"@nocobase/evaluators": "1.9.36",
|
|
8881
|
+
"@nocobase/sdk": "1.9.36",
|
|
8882
|
+
"@nocobase/utils": "1.9.36",
|
|
8883
8883
|
ahooks: "^3.7.2",
|
|
8884
8884
|
antd: "5.24.2",
|
|
8885
8885
|
"antd-mobile": "^5.41.1",
|
|
@@ -63457,15 +63457,28 @@ function PluginInfo(e) {
|
|
|
63457
63457
|
role: "button",
|
|
63458
63458
|
"aria-label": w,
|
|
63459
63459
|
size: "small",
|
|
63460
|
-
|
|
63460
|
+
variant: "borderless",
|
|
63461
63461
|
onClick: () => {
|
|
63462
63462
|
!h && n();
|
|
63463
63463
|
},
|
|
63464
|
-
|
|
63465
|
-
|
|
63466
|
-
|
|
63464
|
+
styles: {
|
|
63465
|
+
body: { paddingTop: 10 },
|
|
63466
|
+
header: { border: "none", minHeight: "inherit", paddingTop: 14 }
|
|
63467
|
+
},
|
|
63468
|
+
title: /* @__PURE__ */ jsxs(Space$1, { children: [
|
|
63469
|
+
h ? /* @__PURE__ */ jsx(Tooltip, { title: S("Plugin loading failed. Please check the server logs."), children: /* @__PURE__ */ jsx(Typography.Text, { type: "danger", children: /* @__PURE__ */ jsx(CloseCircleFilled, {}) }) }) : null,
|
|
63470
|
+
i ? null : /* @__PURE__ */ jsx(Tooltip, { title: S("Plugin dependencies check failed"), children: /* @__PURE__ */ jsx(Typography.Text, { type: "warning", children: /* @__PURE__ */ jsx(WarningFilled, {}) }) }),
|
|
63471
|
+
/* @__PURE__ */ jsx("div", { children: w })
|
|
63472
|
+
] }),
|
|
63467
63473
|
hoverable: !0,
|
|
63468
63474
|
className: css`
|
|
63475
|
+
display: flex;
|
|
63476
|
+
flex-direction: column;
|
|
63477
|
+
|
|
63478
|
+
.ant-card-body {
|
|
63479
|
+
flex-grow: 1;
|
|
63480
|
+
}
|
|
63481
|
+
|
|
63469
63482
|
.ant-card-actions {
|
|
63470
63483
|
li .ant-space {
|
|
63471
63484
|
gap: 2px !important;
|
|
@@ -63638,13 +63651,17 @@ function PluginInfo(e) {
|
|
|
63638
63651
|
children: /* @__PURE__ */ jsx(
|
|
63639
63652
|
Card.Meta,
|
|
63640
63653
|
{
|
|
63641
|
-
description:
|
|
63654
|
+
description: /* @__PURE__ */ jsx(
|
|
63642
63655
|
Typography.Paragraph,
|
|
63643
63656
|
{
|
|
63644
|
-
|
|
63645
|
-
|
|
63646
|
-
|
|
63647
|
-
|
|
63657
|
+
type: "secondary",
|
|
63658
|
+
className: css`
|
|
63659
|
+
display: -webkit-box;
|
|
63660
|
+
-webkit-box-orient: vertical;
|
|
63661
|
+
-webkit-line-clamp: 2;
|
|
63662
|
+
overflow: hidden;
|
|
63663
|
+
`,
|
|
63664
|
+
children: m
|
|
63648
63665
|
}
|
|
63649
63666
|
)
|
|
63650
63667
|
}
|
package/lib/index.js
CHANGED
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
width: 100%;
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
|
-
`,items:l},n))})},SchemaInitializerSubMenu=e=>{var t;const o=e,{children:r,items:i,title:n,name:a,onOpenChange:l,icon:c}=o,u=W(o,["children","items","title","name","onOpenChange","icon"]),m=useCompile(),d=useSchemaInitializerItem(),p=(0,import_react2.useMemo)(()=>a||(d==null?void 0:d.name)||(0,import_shared.uid)(),[a,d]),h=(t=i||r)==null?void 0:t.filter(f=>f.useVisible?f.useVisible():!0),g=useSchemaInitializerMenuItems(h,a),_=(0,import_react2.useMemo)(()=>[P(x({},u),{key:p,label:m(n),icon:typeof c=="string"?(0,import_jsx_runtime.jsx)(import_icons.default,{type:c}):c,children:g})],[g,m,c,p,u,n]);return(0,import_jsx_runtime.jsx)(SchemaInitializerMenu,{onOpenChange:l,items:_})},SchemaInitializerSubMenuInternal=()=>{const e=useSchemaInitializerItem();return(0,import_jsx_runtime.jsx)(SchemaInitializerSubMenu,x({},e))},useAriaAttributeOfMenuItem=()=>{const{isInMenu:e}=useSchemaInitializerSubMenuContext();return{attribute:(0,import_react2.useMemo)(()=>e?{}:{role:"menuitem"},[e])}},{Paragraph:Paragraph$1,Text:Text$2}=import_antd.Typography,ErrorFallbackModal=e=>{const[t,o]=import_react2.default.useState(!1),r=(0,import_jsx_runtime.jsx)(Paragraph$1,{style:{display:"flex",marginBottom:0},copyable:{text:e.error.message},children:(0,import_jsx_runtime.jsxs)(Text$2,{type:"danger",style:{whiteSpace:"nowrap",textOverflow:"ellipsis",overflow:"hidden",display:"inline-block",maxWidth:"200px"},children:["Error: ",e.error.message]})});return(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)("div",{onMouseOver:()=>o(!0),children:e.children||r}),(0,import_jsx_runtime.jsx)(import_antd.Modal,{zIndex:1e4,open:t,footer:null,onCancel:()=>o(!1),width:"60%",children:(0,import_jsx_runtime.jsx)(ErrorFallback,x({},e))})]})},{Paragraph,Text:Text$1,Link}=import_antd.Typography,useDownloadLogs=(e,t={})=>{const o=useLocationNoUpdate(),[r,i]=import_react2.default.useState(!1),n=useAPIClient();return{loading:r,download:()=>q(void 0,null,function*(){i(!0);try{const a=yield n.request({url:"logger:collect",method:"post",responseType:"blob",data:x({error:{message:e.message,stack:e.stack},location:o},t)}),l=window.URL.createObjectURL(new Blob([a.data],{type:"application/gzip"})),c=document.createElement("a");c.setAttribute("href",l),c.setAttribute("download","logs.tar.gz"),c.click(),c.remove()}catch(a){console.log(a)}i(!1)})}},ErrorFallback=({error:e})=>{const t=(0,import_react.useFieldSchema)(),{t:o}=(0,import_react_i18next.useTranslation)(),{loading:r,download:i}=useDownloadLogs(e,{schema:t}),n=(0,import_jsx_runtime.jsxs)(import_react_i18next.Trans,{children:["This is likely a NocoBase internals bug. Please open an issue at ",(0,import_jsx_runtime.jsx)(Link,{href:"https://github.com/nocobase/nocobase/issues",target:"_blank",children:"here"})]});return(0,import_jsx_runtime.jsx)("div",{style:{backgroundColor:"white"},children:(0,import_jsx_runtime.jsx)(import_antd.Result,{style:{maxWidth:"60vw",margin:"auto"},status:"error",title:o("Render Failed"),subTitle:n,extra:[(0,import_jsx_runtime.jsx)(import_antd.Button,{type:"primary",href:"https://github.com/nocobase/nocobase/issues",target:"_blank",children:o("Feedback")},"feedback"),(0,import_jsx_runtime.jsx)(import_antd.Button,{loading:r,onClick:i,children:o("Download logs")},"log")],children:(0,import_jsx_runtime.jsx)(Paragraph,{copyable:{text:e.stack},children:(0,import_jsx_runtime.jsx)(Text$1,{type:"danger",style:{whiteSpace:"pre-line",textAlign:"center"},children:e.stack})})})})};ErrorFallback.Modal=ErrorFallbackModal;const AppNotFound=()=>{const e=(0,import_react_router_dom.useNavigate)(),{t}=(0,import_react_i18next.useTranslation)();return(0,import_jsx_runtime.jsx)(import_antd.Result,{status:"404",title:"404",subTitle:t("Sorry, the page you visited does not exist."),extra:(0,import_jsx_runtime.jsx)(import_antd.Button,{onClick:()=>e("/",{replace:!0}),type:"primary",children:"Back Home"})})};class Plugin{constructor(t,o){this.options=t,this.app=o,this.options=t,this.app=o}get pluginManager(){return this.app.pluginManager}get pm(){return this.app.pm}get router(){return this.app.router}get pluginSettingsManager(){return this.app.pluginSettingsManager}get schemaInitializerManager(){return this.app.schemaInitializerManager}get schemaSettingsManager(){return this.app.schemaSettingsManager}get dataSourceManager(){return this.app.dataSourceManager}afterAdd(){return q(this,null,function*(){})}beforeLoad(){return q(this,null,function*(){})}load(){return q(this,null,function*(){})}t(t,o={}){var r;return this.app.i18n.t(t,x({ns:(r=this.options)==null?void 0:r.packageName},o))}}const titleWrapperStyle={display:"flex",alignItems:"center",gap:4},withTooltipComponent=e=>t=>{const{tooltip:o}=t;return o?(0,import_jsx_runtime.jsxs)("div",{style:titleWrapperStyle,children:[(0,import_jsx_runtime.jsx)(e,x({},t)),(0,import_jsx_runtime.jsx)(import_antd.Tooltip,{title:o,children:(0,import_jsx_runtime.jsx)(import_icons.QuestionCircleOutlined,{style:{zIndex:1}})})]}):(0,import_jsx_runtime.jsx)(e,x({},t))},{evaluate}=import_client3.evaluators.get("formula.js"),useEvaluatedExpression=e=>{const t=useVariables$1(),o=useLocalVariables$1(),[r,i]=(0,import_react2.useState)();return(0,import_react2.useEffect)(()=>{q(void 0,null,function*(){if(e==null||e===""){i(void 0);return}const{exp:n,scope:a}=yield replaceVariables(e,{variables:t,localVariables:o});try{const l=evaluate(n,x({now:()=>new Date().toString()},a));i(l)}catch(l){console.error(l)}})},[t.parseVariable,e,o]),r};class SchemaInitializer{constructor(t){k(this,"options"),k(this,"name"),this.options=Object.assign({items:[]},t),this.name=t.name}get items(){return this.options.items}add(t,o){const r=t.split("."),i=r[r.length-1],n=P(x({},o),{name:i}),a=(u,m)=>{const d=this.items.findIndex(p=>p.name===u);d===-1?this.items.push(m):this.items[d]=m};if(r.length===1){a(i,n);return}const l=r.slice(0,-1).join("."),c=this.get(l);if(c){c.children||(c.children=[]);const u=t.replace(`${c.name}.`,""),m=c.children.findIndex(d=>d.name===u);m===-1?c.children.push(n):c.children[m]=n}else a(i,n)}get(t){var o;if(!t)return;const r=t.split(".");let i={children:this.items};for(let n=0;n<r.length;n++){const a=r[n],l=(o=i.children)==null?void 0:o.find(c=>c.name===a);if(l&&(i=l),n===r.length-1)return l}}remove(t){const o=t.split(".");if(o.length===1){const i=this.items.findIndex(n=>n.name===o[0]);i!==-1&&this.items.splice(i,1);return}const r=this.get(o.slice(0,-1).join("."));if(r&&r.children){const i=o[o.length-1],n=r.children.findIndex(a=>a.name===i);n!==-1&&r.children.splice(n,1)}}}var NocoBaseDesktopRouteType=(e=>(e.group="group",e.page="page",e.link="link",e.tabs="tabs",e))(NocoBaseDesktopRouteType||{});const useStyles$h=genStyleHook("nb-menu-item",e=>{const{componentCls:t}=e;return{[t]:{paddingLeft:`${e.padding}px !important`,paddingRight:`${e.padding}px !important`}}}),useAttach=e=>{const t=(0,import_react2.useRef)(null);return(0,import_react2.useEffect)(()=>(t.current&&e!==t.current&&t.current.onUnmount(),t.current=e,e.onMount(),()=>{e.onUnmount()}),[e]),e},compileCache={},hasVariable=e=>/{{.*?}}/g.test(e),useCompile=({noCache:e}={noCache:!1})=>{const t=(0,import_react2.useContext)(import_react.SchemaOptionsContext),o=(0,import_react2.useContext)(import_react.SchemaExpressionScopeContext);return(r,i)=>{let n=!1,a;if(typeof r=="string"&&r.startsWith("{{")&&(n=!0,a=r),r&&typeof r=="object"&&!(0,import_react2.isValidElement)(r)){try{a=JSON.stringify(r)}catch(l){return console.warn("Failed to stringify:",l),r}if(compileCache[a])return compileCache[a];n=hasVariable(a)}if(Array.isArray(r)){try{a=JSON.stringify(r)}catch(l){return console.warn("Failed to stringify:",l),r}if(compileCache[a])return compileCache[a];n=hasVariable(a)}if(n){const l=x(x(x({},t.scope),o),i);if(!a)return import_react.Schema.compile(r,l);try{return e?import_react.Schema.compile(r,l):(compileCache[a]=compileCache[a]||import_react.Schema.compile(r,l),compileCache[a])}catch(c){return console.log("useCompile error",r,c),import_react.Schema.compile(r,l)}}return r}},useComponent=(e,t)=>{const{components:o}=(0,import_react2.useContext)(import_react.SchemaOptionsContext);return e?typeof e!="string"?e:(0,import_lodash.get)(o,e)||t:t},LAZY_COMPONENT_KEY=Symbol("LAZY_COMPONENT_KEY");function lazy(e,...t){if(t.length===0){const o=(0,import_react2.lazy)(()=>e().then(i=>{const n=i.default;return r[LAZY_COMPONENT_KEY]=n,{default:n}})),r=i=>(0,import_jsx_runtime.jsx)(import_react2.default.Suspense,{fallback:(0,import_jsx_runtime.jsx)(import_antd.Spin,{}),children:(0,import_jsx_runtime.jsx)(o,x({},i))});return r}return t.reduce((o,r)=>{const i=(0,import_react2.lazy)(()=>e().then(n=>{const a=(0,import_lodash.get)(n,r);return o[r][LAZY_COMPONENT_KEY]=a,{default:a}}));return o[r]=n=>(0,import_jsx_runtime.jsx)(import_react2.default.Suspense,{fallback:(0,import_jsx_runtime.jsx)(import_antd.Spin,{}),children:(0,import_jsx_runtime.jsx)(i,x({},n))}),o},{})}function useLazy(e,t){const o=typeof t=="function"?t:i=>i[t],r=(0,import_react_imported_component.loadableResource)(e);if(!r.payload)throw new Promise((i,n)=>{r.loadIfNeeded(),r.resolution.then(i).catch(n)});return o(r.payload)}function addAppVersion(e,t){if(e)return e["x-app-version"]||(e["x-app-version"]=t),Object.keys(e.properties||{}).forEach(o=>{var r;addAppVersion((r=e.properties)==null?void 0:r[o],t)}),e}const name="@nocobase/client",version="1.9.34",license="AGPL-3.0",main="lib/index.js",module$1="es/index.mjs",types="es/index.d.ts",dependencies={"@ahooksjs/use-url-state":"3.5.1","@ant-design/cssinjs":"^1.11.1","@ant-design/icons":"^5.6.1","@ant-design/pro-layout":"^7.22.1","@antv/g2plot":"^2.4.18","@budibase/handlebars-helpers":"0.14.0","@ctrl/tinycolor":"^3.6.0","@dnd-kit/core":"^6.0.0","@dnd-kit/sortable":"^7.0.0","@emotion/css":"^11.7.1","@formily/antd-v5":"1.2.3","@formily/core":"^2.2.27","@formily/grid":"^2.2.27","@formily/json-schema":"^2.2.27","@formily/path":"^2.2.27","@formily/react":"^2.2.27","@formily/reactive":"^2.2.27","@formily/reactive-react":"^2.2.27","@formily/shared":"^2.2.27","@formily/validator":"^2.2.27","@nocobase/evaluators":"1.9.34","@nocobase/sdk":"1.9.34","@nocobase/utils":"1.9.34",ahooks:"^3.7.2",antd:"5.24.2","antd-mobile":"^5.41.1","antd-mobile-icons":"^0.3.0","antd-style":"3.7.1",axios:"^1.7.0","bignumber.js":"^9.1.2",classnames:"^2.3.1",cronstrue:"^2.11.0","file-saver":"^2.0.5",filesize:"9.0.11",flat:"^5.0.2","html5-qrcode":"^2.3.8",i18next:"^22.4.9","i18next-http-backend":"^2.1.1",ignore:"^5.2.0",json5:"^2.2.3",lodash:"4.17.21","lru-cache":"6.0.0","markdown-it":"14.1.0","markdown-it-highlightjs":"3.3.1",mathjs:"^10.6.0",mermaid:"9.4.3",mime:"^4.0.4","mime-match":"^1.0.2","react-beautiful-dnd":"^13.1.0","react-device-detect":"2.2.3","react-drag-listview":"^0.1.9","react-error-boundary":"^4.0.10","react-helmet":"^6.1.0","react-hotkeys-hook":"^3.4.7","react-i18next":"^11.15.1","react-iframe":"~1.8.5","react-image-lightbox":"^5.1.4","react-intersection-observer":"9.14.0","react-js-cron":"^3.1.0","react-quill":"^2.0.0","react-router-dom":"^6.11.2","react-to-print":"^2.14.7","sanitize-html":"2.13.0","use-deep-compare-effect":"^1.8.1"},peerDependencies={react:">=18.0.0","react-dom":">=18.0.0","react-is":">=18.0.0"},devDependencies={"@testing-library/react":"^14.0.0","@types/markdown-it":"14.1.1","@types/markdown-it-highlightjs":"3.3.1","@types/react-big-calendar":"^1.6.4","axios-mock-adapter":"^1.20.0",dumi:"2.2.14","dumi-theme-nocobase":"^0.2.28"},clientPkg={name,version,license,main,module:module$1,types,dependencies,peerDependencies,devDependencies};function createDesignable(e){return new Designable(e)}const generateUid=e=>{e&&(e["x-uid"]||(e["x-uid"]=(0,import_shared.uid)()),Object.keys(e.properties||{}).forEach(t=>{generateUid(e.properties[t])}))},defaultWrap=e=>e,matchSchema=(e,t)=>{if(!(!e||!t)){for(const o in t)if(Object.prototype.hasOwnProperty.call(t,o)&&t[o]!==(e==null?void 0:e[o]))return!1;return!0}},splitWrapSchema=(e,t)=>{if(e["x-uid"]&&e["x-uid"]===t["x-uid"])return[null,e.toJSON()];const o=e.toJSON(),r=P(x({},o),{properties:{}});let i=null;const n=(a,l)=>{Object.keys(a||{}).forEach(c=>{const u=a[c];if(u["x-uid"]===t["x-uid"]){i=a[c];return}else l.properties[c]=P(x({},u),{properties:{}}),n(u==null?void 0:u.properties,l.properties[c])})};return n(o.properties,r),[r,i]},translate=e=>e;class Designable{constructor(t){k(this,"current"),k(this,"options"),k(this,"appVersion"),k(this,"events",{}),this.options=t,this.current=t.current,this.appVersion=t.appVersion}get model(){return this.options.model}get query(){return this.options.query}loadAPIClientEvents(){const{api:t,t:o=translate}=this.options;if(!t)return;const r=i=>{if(!i)return[];const n=Object.values(i.properties).length,a=[];return i.mapProperties(l=>{l["x-component-props"]=l["x-component-props"]||{},l["x-component-props"].width=100/n,l["x-uid"]&&a.push({"x-uid":l["x-uid"],"x-component-props":l["x-component-props"]})}),i["x-uid"]&&a.length?a:[]};this.on("insertAdjacent",i=>q(this,[i],function*({onSuccess:n,current:a,position:l,schema:c,wrap:u,wrapped:m,removed:d}){var p;let h=[];if((m==null?void 0:m["x-component"])==="Grid.Col"&&(h=h.concat(r(m.parent))),(d==null?void 0:d["x-component"])==="Grid.Col"&&(h=h.concat(r(d.parent))),this.refresh(),!a["x-uid"])return;const g=yield t.request({url:`/uiSchemas:insertAdjacent/${a["x-uid"]}?position=${l}`,method:"post",data:{schema:addAppVersion(c,this.appVersion),wrap:u}});h.length&&(yield t.request({url:"/uiSchemas:batchPatch",method:"post",data:h})),d!=null&&d["x-uid"]&&(yield t.request({url:`/uiSchemas:remove/${d["x-uid"]}`,method:"post"})),n==null||n((p=g==null?void 0:g.data)==null?void 0:p.data),import_antd.message.success(o("Saved successfully"),.2)})),this.on("patch",i=>q(this,[i],function*({schema:n}){this.refresh(),n!=null&&n["x-uid"]&&(yield t.request({url:"/uiSchemas:patch",method:"post",data:x({},n)}),import_antd.message.success(o("Saved successfully"),.2))})),this.on("initializeActionContext",i=>q(this,[i],function*({schema:n}){n!=null&&n["x-uid"]&&(yield t.request({url:"/uiSchemas:initializeActionContext",method:"post",data:x({},n)}))})),this.on("batchPatch",i=>q(this,[i],function*({schemas:n}){this.refresh(),yield t.request({url:"/uiSchemas:batchPatch",method:"post",data:n}),import_antd.message.success(o("Saved successfully"),.2)})),this.on("remove",i=>q(this,[i],function*({removed:n}){let a=[];(n==null?void 0:n["x-component"])==="Grid.Col"&&(a=r(n.parent)),this.refresh(),n!=null&&n["x-uid"]&&(yield t.request({url:`/uiSchemas:remove/${n["x-uid"]}`,method:"post"}),a.length&&(yield t.request({url:"/uiSchemas:batchPatch",method:"post",data:a})),import_antd.message.success(o("Saved successfully"),.2))}))}prepareProperty(t){t.type||(t.type="void"),t.name||(t.name=(0,import_shared.uid)()),this.current["x-uid"]&&generateUid(t)}on(t,o){this.events[t]||(this.events[t]=[]),this.events[t].push(o)}emit(t,...o){return q(this,null,function*(){if(!this.events[t])return;const[r,...i]=o;return Promise.all(this.events[t].map(n=>n.bind(this)(x({current:this.current},r),...i)))})}parentsIn(t){if(!t||!import_react.Schema.isSchemaInstance(t))return!1;let o=this.current;for(;o!=null&&o.parent;){if(o.parent===t)return!0;o=o.parent}return!1}refresh(t){const{refresh:o}=this.options;return o==null?void 0:o(t)}deepMerge(t){const o={title:"title",description:"description",default:"initialValue",readOnly:"readOnly",writeOnly:"editable",enum:"dataSource","x-pattern":"pattern","x-display":"display","x-validator":"validator","x-decorator":"decorator","x-component":"component","x-reactions":"reactions","x-content":"content","x-visible":"visible","x-hidden":"hidden","x-disabled":"disabled","x-editable":"editable","x-read-only":"readOnly"},r={"x-decorator-props":"decoratorProps","x-component-props":"componentProps","x-data":"data"};Object.keys(t).forEach(i=>{o[i]?(this.current[i]=t[i],this.updateModel(o[i],t[i])):r[i]?Object.keys(t[i]).forEach(n=>{(0,import_set.default)(this.current,[i,n],t[i][n]),this.updateModel([r[i],n],t[i][n])}):this.current[i]=t[i]}),this.emit("patch",{schema:t})}getSchemaAttribute(t,o){return(0,import_get.default)(this.current,t,o)}shallowMerge(t){const o={title:"title",description:"description",default:"initialValue",readOnly:"readOnly",writeOnly:"editable",enum:"dataSource","x-pattern":"pattern","x-display":"display","x-validator":"validator","x-decorator":"decorator","x-component":"component","x-reactions":"reactions","x-content":"content","x-visible":"visible","x-hidden":"hidden","x-disabled":"disabled","x-editable":"editable","x-read-only":"readOnly","x-decorator-props":"decoratorProps","x-component-props":"componentProps","x-data":"data"};Object.keys(t).forEach(r=>{this.current[r]=t[r],o[r]&&this.updateModel(o[r],t[r])}),this.emit("patch",{schema:t})}updateModel(t,o){const r=i=>{(0,import_set.default)(i,t,o)};this.model&&r(this.model),this.query&&this.query.take(r)}insertAdjacent(t,o,r={}){switch(t){case"beforeBegin":return this.insertBeforeBegin(o,r);case"afterBegin":return this.insertAfterBegin(o,r);case"beforeEnd":return this.insertBeforeEnd(o,r);case"afterEnd":return this.insertAfterEnd(o,r)}}recursiveRemoveIfNoChildren(t,o){if(!t)return;let r=t,i;const n=o==null?void 0:o.breakRemoveOn;for(;r;){if(typeof n=="function"){if(n(r))break}else if(matchSchema(r,n))break;if(Object.keys(r.properties||{}).length>0)break;r.parent&&(i=r.parent.removeProperty(r.name)),r=r.parent}return i}remove(t,o={}){const{breakRemoveOn:r,removeParentsIfNoChildren:i}=o,n=t||this.current;let a=n.parent.removeProperty(n.name);if(i){const l=this.recursiveRemoveIfNoChildren(n.parent,{breakRemoveOn:r});l&&(a=l)}return this.emit("remove",{removed:a})}removeWithoutEmit(t,o={}){const{breakRemoveOn:r,removeParentsIfNoChildren:i}=o,n=t||this.current;let a=n.parent.removeProperty(n.name);if(i){const l=this.recursiveRemoveIfNoChildren(n.parent,{breakRemoveOn:r});l&&(a=l)}return a}insertBeforeBeginOrAfterEnd(t,o={}){if(!import_react.Schema.isSchemaInstance(this.current)||!import_react.Schema.isSchemaInstance(t)||this.current.parent!==t.parent)return;let r=0,i=0;return this.current.parent.mapProperties((n,a,l)=>{this.current.name===a&&(i=l),t.name===a&&(r=l)}),r>i?this.insertBeforeBegin(t,o):this.insertAfterEnd(t,o)}insertBeforeBegin(t,o={}){if(!import_react.Schema.isSchemaInstance(this.current))return;const r={onSuccess:o.onSuccess},{wrap:i=defaultWrap,breakRemoveOn:n,removeParentsIfNoChildren:a}=o;if(import_react.Schema.isSchemaInstance(t)){if(this.parentsIn(t)){this.emit("error",{code:"parent_is_not_allowed",schema:t});return}t.parent.removeProperty(t.name),a&&(r.removed=this.recursiveRemoveIfNoChildren(t.parent,{breakRemoveOn:n}))}else t&&(t=(0,import_cloneDeep.default)(t));const l={};let c=!1,u=0,m=0;this.current.parent.mapProperties((_,f)=>{f===this.current.name&&(m=u,c=!0,++u),_["x-index"]=u,++u,c&&(l[f]=_,this.current.parent.removeProperty(f))}),this.prepareProperty(t);const d=i(t),p=this.current.parent.addProperty(d.name||(0,import_shared.uid)(),d);p["x-index"]=m,p.parent=this.current.parent,this.current.parent.setProperties(l);const[h,g]=splitWrapSchema(p,t);this.emit("insertAdjacent",x({position:"beforeBegin",schema:g,wrapped:d,wrap:h},r))}insertAfterBegin(t,o={}){if(!import_react.Schema.isSchemaInstance(this.current))return;const r={onSuccess:o.onSuccess},{wrap:i=defaultWrap,breakRemoveOn:n,removeParentsIfNoChildren:a}=o;if(import_react.Schema.isSchemaInstance(t)){if(this.parentsIn(t)){this.emit("error",{code:"parent_is_not_allowed",schema:t});return}t.parent.removeProperty(t.name),a&&(r.removed=this.recursiveRemoveIfNoChildren(t.parent,{breakRemoveOn:n}))}else t&&(t=(0,import_cloneDeep.default)(t));const l={};let c=1;this.current.mapProperties((h,g)=>{h["x-index"]=c,++c,l[g]=h}),this.current.properties={},this.prepareProperty(t);const u=i(t),m=this.current.addProperty(u.name||(0,import_shared.uid)(),u);m["x-index"]=0,m.parent=this.current,this.current.setProperties(l);const[d,p]=splitWrapSchema(m,t);this.emit("insertAdjacent",x({position:"afterBegin",schema:p,wrap:d,wrapped:u},r))}insertBeforeEnd(t,o={}){if(!import_react.Schema.isSchemaInstance(this.current))return;delete t["x-index"];const r={onSuccess:o.onSuccess},{wrap:i=defaultWrap,breakRemoveOn:n,removeParentsIfNoChildren:a}=o;if(import_react.Schema.isSchemaInstance(t)){if(this.parentsIn(t)){this.emit("error",{code:"parent_is_not_allowed",schema:t});return}t.parent.removeProperty(t.name),a&&(r.removed=this.recursiveRemoveIfNoChildren(t.parent,{breakRemoveOn:n}))}else t&&(t=(0,import_cloneDeep.default)(t));this.prepareProperty(t);const l=i(t),c=this.current.addProperty(l.name||(0,import_shared.uid)(),l);c.parent=this.current;const[u,m]=splitWrapSchema(c,t);return this.emit("insertAdjacent",x({position:"beforeEnd",schema:m,wrap:u,wrapped:l},r))}insertAfterEnd(t,o={}){if(!import_react.Schema.isSchemaInstance(this.current))return;const r={onSuccess:o==null?void 0:o.onSuccess},{wrap:i=defaultWrap,breakRemoveOn:n,removeParentsIfNoChildren:a}=o;let l=0,c=0,u=!1;const m={};if(this.current.parent.mapProperties((_,f)=>{_["x-index"]=l,f===this.current.name&&(++l,c=l,u=!0),++l,u&&f!==this.current.name&&(m[f]=_,this.current.parent.removeProperty(f))}),import_react.Schema.isSchemaInstance(t)){if(this.parentsIn(t)){this.emit("error",{code:"parent_is_not_allowed",schema:t});return}t.parent.removeProperty(t.name),a&&(r.removed=this.recursiveRemoveIfNoChildren(t.parent,{breakRemoveOn:n})),t.parent=null}else t&&(t=(0,import_cloneDeep.default)(t));this.prepareProperty(t);const d=i(t),p=this.current.parent.addProperty(d.name||(0,import_shared.uid)(),d);p.parent=this.current.parent,p["x-index"]=c,this.current.parent.setProperties(m);const[h,g]=splitWrapSchema(p,t);this.emit("insertAdjacent",x({position:"afterEnd",schema:g,wrap:h,wrapped:d},r))}}function useFindComponent(){const e=(0,import_react2.useContext)(import_react.SchemaOptionsContext),t=(0,import_react2.useMemo)(()=>(e==null?void 0:e.components)||{},[e]);return o=>{if(!o)return null;if(typeof o!="string")return o;const r=(0,import_get.default)(t,o);return r||console.error(`[nocobase]: Component "${o}" not found`),r}}function useDesignable(){const{designable:e,setDesignable:t,refresh:o,reset:r}=(0,import_react2.useContext)(SchemaComponentContext),i=(0,import_react2.useContext)(import_react.SchemaOptionsContext),n=(0,import_react2.useMemo)(()=>(i==null?void 0:i.components)||{},[i]),a=(0,import_react2.useMemo)(()=>()=>(0,import_jsx_runtime.jsx)(import_jsx_runtime.Fragment,{}),[]),l=(0,import_ahooks.useUpdate)(),c=useRefreshFieldSchema(),u=useRefreshComponent(),m=(0,import_react2.useCallback)(v=>{o==null||o(),l(),c==null||c(v),u==null||u()},[o,l,c,u]),d=(0,import_react.useField)(),p=(0,import_react.useFieldSchema)(),h=useAPIClient(),{t:g}=(0,import_react_i18next.useTranslation)(),_=(0,import_react2.useMemo)(()=>createDesignable({t:g,api:h,refresh:m,current:p,model:d,appVersion:clientPkg.version}),[g,h,m,p,d]);(0,import_react2.useEffect)(()=>{_.loadAPIClientEvents()},[_]);const{isMobileLayout:f}=useMobileLayout();return{dn:_,designable:f?!1:e,reset:r,refresh:m,setDesignable:t,DesignableBar:a,findComponent:(0,import_react2.useCallback)(v=>{var C;if(!v)return null;if(typeof v!="string")return v;const S=(0,import_get.default)(n,v);return(C=S==null?void 0:S[LAZY_COMPONENT_KEY])!=null?C:S},[import_get.default]),on:_.on.bind(_),patch:(0,import_react2.useCallback)((v,C)=>{const S=b=>{Object.keys(b).forEach(y=>{const F=b[y];y==="title"&&(d.title=F,p.title=F),y==="x-decorator-props"&&(d.decoratorProps||(d.decoratorProps={}),p["x-decorator-props"]||(p["x-decorator-props"]={}),Object.keys(F).forEach(j=>{d.decoratorProps[j]=F[j],p["x-decorator-props"][j]=F[j]})),y==="x-component-props"&&(d.componentProps||(d.componentProps={}),p["x-component-props"]||(p["x-component-props"]={}),Object.keys(F).forEach(j=>{d.componentProps[j]=F[j],p["x-component-props"][j]=F[j]}))})};if(typeof v=="string"){const b={};return(0,import_set.default)(b,v,C),S(b)}S(v),m()},[_]),shallowMerge:(0,import_react2.useCallback)(v=>{_.shallowMerge(v)},[_]),deepMerge:(0,import_react2.useCallback)(v=>{_.deepMerge(v)},[_]),remove:(0,import_react2.useCallback)((v,C)=>{_.remove(v,C)},[_]),insertAdjacent:(0,import_react2.useCallback)((v,C,S)=>{_.insertAdjacent(v,C,S)},[_]),insertBeforeBegin:(0,import_react2.useCallback)(v=>{_.insertBeforeBegin(v)},[_]),insertAfterBegin:(0,import_react2.useCallback)(v=>{_.insertAfterBegin(v)},[_]),insertBeforeEnd:(0,import_react2.useCallback)(v=>{_.insertBeforeEnd(v)},[_]),insertAfterEnd:(0,import_react2.useCallback)(v=>{_.insertAfterEnd(v)},[_])}}const DefaultSchemaToolbar=()=>null;DefaultSchemaToolbar.isNullComponent=!0;const useDesigner=()=>{const{designable:e}=useDesignable(),t=(0,import_react.useFieldSchema)(),o=(0,import_react2.useMemo)(()=>t["x-designer"]||t["x-toolbar"]?t["x-designer"]||t["x-toolbar"]:t["x-settings"]?SchemaToolbar:DefaultSchemaToolbar,[t]),r=useComponent(o);return e&&r||DefaultSchemaToolbar},useFieldProps$1=e=>{const t=(0,import_react2.useContext)(import_react.SchemaOptionsContext),o=(0,import_react2.useContext)(import_react.SchemaExpressionScopeContext),r=(0,import_react2.useRef)();return r.current=o,e.toFieldProps(P(x({},t),{get scope(){return x(x({},t.scope),r.current)}}))};function useSchemaComponentContext(){return(0,import_react2.useContext)(SchemaComponentContext)}const useFieldComponentOptions=()=>{var e;const{getCollectionJoinField:t,getCollection:o}=useCollectionManager_deprecated(),r=(0,import_react.useFieldSchema)(),{getField:i}=useCollection_deprecated(),n=i(r.name)||t(r["x-collection-field"]),{t:a}=(0,import_react_i18next.useTranslation)(),{label:l}=((e=r["x-component-props"])==null?void 0:e.fieldNames)||{};return(0,import_react2.useMemo)(()=>{if(!n||!(n!=null&&n.interface)||!["o2o","oho","obo","o2m","linkTo","m2o","m2m"].includes(n.interface))return;const c=o(n.target);if((c==null?void 0:c.template)==="file")return[{label:a("Record picker"),value:"CollectionField"},{label:a("Select"),value:"AssociationSelect"}];switch(n.interface){case"o2m":return[{label:a("Record picker"),value:"CollectionField"},{label:a("Subtable"),value:"TableField"},{label:a("Select"),value:"AssociationSelect"}];case"m2o":case"m2m":case"linkTo":return[{label:a("Record picker"),value:"CollectionField"},{label:a("Select"),value:"AssociationSelect"}];default:return[{label:a("Record picker"),value:"CollectionField"},{label:a("Subform"),value:"FormField"},{label:a("Select"),value:"AssociationSelect"}]}},[a,n==null?void 0:n.interface,l])},useFieldTitle=()=>{var e;const t=(0,import_react.useField)(),o=(0,import_react.useFieldSchema)(),r=useCollection(),i=useCollectionManager(),n=(r==null?void 0:r.getField(o.name))||(i==null?void 0:i.getCollectionField(o["x-collection-field"])),a=useCompile();(0,import_react2.useEffect)(()=>{var l;t!=null&&t.title||(t.title=a((l=n==null?void 0:n.uiSchema)==null?void 0:l.title))},[(e=n==null?void 0:n.uiSchema)==null?void 0:e.title])},useDef$4=()=>({}),useProps=(e={})=>{const t=e,{useProps:o=useDef$4}=t,r=W(t,["useProps"]);let i=o;typeof o!="function"&&(i=useDef$4);const n=i();return x(x({},r),n)};function useParsedFilter({filterOption:e,onFilterChange:t}){const{parseFilter:o,findVariable:r}=useParseDataScopeFilter(),[i,n]=(0,import_react2.useState)({}),[a,l]=(0,import_react2.useState)(!!e);return(0,import_react2.useEffect)(()=>{if(!e)return;const c=()=>q(this,null,function*(){l(!0);const m=yield o(e);l(!1),n(m),t==null||t(m)});c();const u=import_lodash.default.debounce(c,DEBOUNCE_WAIT);(0,import_reactive.reaction)(()=>(0,import_client.flatten)(e,{breakOn({key:m}){return m.startsWith("$")&&m!=="$and"&&m!=="$or"},transformValue(m){if(!isVariable$1(m))return m;const d=getVariableName(m),p=r(d);let h=null;const g=getPath(m).split(".");return g.forEach((_,f)=>{const v=g.slice(0,f+1).join("."),C=(0,import_client.getValuesByPath)({[d]:(p==null?void 0:p.ctx)||{}},v);import_lodash.default.isEmpty(C)||(h=C)}),h}}),u,{equals:import_lodash.default.isEqual})},[JSON.stringify(e),o,r]),{filter:i,parseVariableLoading:a}}const useParentRecordCommon=e=>{const t=useCollectionRecordData();if(e)return t},useTableBlockDecoratorProps=e=>{var t;const{params:o,parseVariableLoading:r}=useTableBlockParams(e),i=useParentRecordCommon(e.association),n=(t=useDataSourceManager().getDataSource(e.dataSource))==null?void 0:t.collectionManager.getCollection(e.collection);return{params:o,parentRecord:i,parseVariableLoading:r,rowKey:(n==null?void 0:n.filterTargetKey)||"id"}};function useTableBlockParams(e){var t;const o=(0,import_react.useFieldSchema)(),{filter:r,parseVariableLoading:i}=useParsedFilter({filterOption:(t=e.params)==null?void 0:t.filter});return{params:(0,import_react2.useMemo)(()=>{const n=e.params||{},{dragSortBy:a}=(o==null?void 0:o["x-decorator-props"])||{};return e.dragSort&&a&&(n.sort=a),P(x({},n),{filter:r})},[o,r,e.dragSort,e.params]),parseVariableLoading:i}}const key="__isNewRecord__",isNewRecord=e=>(0,import_reactive.untracked)(()=>!!(e!=null&&e[key])),markRecordAsNew=e=>{if(!(0,import_lodash.isObject)(e))throw new Error("markRecordAsNew: record must be an object");return e[key]=!0,e},useDefaultLoading=()=>{var e;return!!((e=useDataBlockRequest())!=null&&e.loading)},withSkeletonComponent=(e,t)=>{const{useLoading:o=useDefaultLoading,displayName:r,SkeletonComponent:i=import_antd.Skeleton}=t||{},n=import_react2.default.memo(a=>{const l=o(),c=(0,import_react2.useRef)(!1),u=(0,import_react2.useDeferredValue)(l);return!c.current&&u?(0,import_jsx_runtime.jsx)(i,{}):(c.current=!0,(0,import_jsx_runtime.jsx)(e,x({},a)))});return n.displayName=r||`${e.displayName}(withSkeletonComponent)`||`${e.name}(withSkeletonComponent)`,n},getActionValue=(e,t)=>{const o=r=>(r==null?void 0:r.mode)==="constant"?r.value:null;switch(!0){case[ActionType.Color,ActionType.BackgroundColor,ActionType.TextAlign,ActionType.FontSize,ActionType.FontWeight,ActionType.FontStyle].includes(e):return o(t);default:return null}},getSatisfiedActions=(e,t)=>q(void 0,[e,t],function*({rules:o,variables:r,localVariables:i},n){return(yield Promise.all(o.filter(a=>!a.disabled).map(a=>q(void 0,null,function*(){return(yield conditionAnalyses({ruleGroup:a.condition,variables:r,localVariables:i,conditionType:a.conditionType},n))?a:null})))).filter(Boolean).map(a=>a.actions).flat()}),getSatisfiedValues=(e,t)=>q(void 0,[e,t],function*({rules:o,variables:r,localVariables:i},n){return(yield getSatisfiedActions({rules:o,variables:r,localVariables:i},n)).map(a=>P(x({},a),{value:getActionValue(a.operator,a.value)}))}),getSatisfiedValueMap=(e,t)=>q(void 0,[e,t],function*({rules:o,variables:r,localVariables:i},n){return(yield getSatisfiedValues({rules:o,variables:r,localVariables:i},n)).reduce((a,l)=>P(x({},a),{[l.operator]:l.value}),{})});function useSatisfiedActionValues({formValues:e,category:t="default",rules:o,schema:r,form:i}){const[n,a]=(0,import_react2.useState)({}),l=(0,import_react.useFieldSchema)(),c=useVariables$1(),u=useLocalVariables$1({currentForm:{values:e}}),m=r??l,d=o??(m[LinkageRuleDataKeyMap[t]]||(m==null?void 0:m.parent[LinkageRuleDataKeyMap[t]])),p=useApp(),h=(0,import_react2.useCallback)(()=>{d&&e&&getSatisfiedValueMap({rules:d,variables:c,localVariables:u},p.jsonLogic).then(g=>{(0,import_lodash.isEmpty)(g)?a({}):a(g)}).catch(g=>{throw new Error(g.message)})},[c,u,d,e]);return(0,import_react2.useEffect)(()=>{if(h(),i){const g=(0,import_shared.uid)();return i.addEffects(g,()=>{(0,import_core.onFormValuesChange)(()=>{h()})}),()=>{i.removeEffects(g)}}},[i,h,e]),{valueMap:n}}const GetStyleRules=import_react2.default.memo(({record:e,schema:t,onStyleChange:o})=>{const{valueMap:r}=useSatisfiedActionValues({formValues:e,category:"style",schema:t});return(0,import_react2.useEffect)(()=>{o(r)},[o,r]),null});GetStyleRules.displayName="GetStyleRules";const opacityStyle={opacity:.5},containerStyle={position:"relative"},spinStyle={display:"flex",alignItems:"center",justifyContent:"center",position:"absolute",left:0,right:0,height:"100%",maxHeight:400,zIndex:1e3},displayNone$3={display:"none"},HighPerformanceSpin=import_react2.default.memo(e=>(0,import_jsx_runtime.jsxs)("div",{style:containerStyle,children:[(0,import_jsx_runtime.jsx)(import_antd.Spin,P(x({},import_lodash.default.omit(e,"children")),{style:e.spinning?spinStyle:displayNone$3})),(0,import_jsx_runtime.jsx)("div",{style:e.spinning?opacityStyle:null,children:e.children})]}));var FilterBlockType=(e=>(e[e.FORM=0]="FORM",e[e.TABLE=1]="TABLE",e[e.TREE=2]="TREE",e[e.COLLAPSE=3]="COLLAPSE",e))(FilterBlockType||{});const mergeFilter=(e,t="$and")=>{const o=e.filter(r=>{if(r&&typeof r=="object"&&!Array.isArray(r))return Object.values(r).filter(i=>i!==void 0).length});return o.length===0?{}:o.length===1?o[0]:{[t]:o}},getSupportFieldsByAssociation=(e,t)=>{var o;return(o=t.associatedFields)==null?void 0:o.filter(r=>e==null?void 0:e.some(i=>i===r.target))},getSupportFieldsByForeignKey=(e,t)=>{var o;return(o=t.foreignKeyFields)==null?void 0:o.filter(r=>e.fields.some(i=>i.type!=="belongsTo"&&i.foreignKey===r.name&&i.target===r.collectionName))},useSupportedBlocks=e=>{const{getDataBlocks:t}=useFilterBlock(),o=(0,import_react.useFieldSchema)(),r=useCollection(),{getAllCollectionsInheritChain:i}=useAllCollectionsInheritChainGetter();if(e===0||e===3)return t().filter(n=>isSameCollection(n.collection,r));if(e===1||e===2)return t().filter(n=>{var a,l;return o["x-uid"]!==n.uid&&(isSameCollection(n.collection,r)||((a=getSupportFieldsByAssociation(i(r.name,r.dataSource),n))==null?void 0:a.length)||((l=getSupportFieldsByForeignKey(r,n))==null?void 0:l.length))})},transformToFilter=(e,t,o,r)=>(e=(0,import_client.flatten)(e,{breakOn({value:i,path:n}){if(["$match","$notMatch","$anyOf","$noneOf","$childIn","$childNotIn","$dateBetween","$in","$notIn"].includes(t[n]))return!0;const a=o(`${r}.${n}`);if(["datetime","datetimeNoTz","date","unixTimestamp","createdAt","updatedAt"].includes(a==null?void 0:a.interface))return!0;if(a!=null&&a.target){if(Array.isArray(i))return!0;const l=a.targetKey||"id";if(i&&i[l]!=null)return!0}return!1}}),{$and:Object.keys(e).map(i=>{let n=import_lodash.default.get(e,i);const a=o(`${r}.${i}`);return a!=null&&a.target&&["hasOne","hasMany","belongsTo","belongsToMany","belongsToArray"].includes(a.type)&&(n=(0,import_client.getValuesByPath)(n,a.targetKey||"id"),i=`${i}.${a.targetKey||"id"}`,(a==null?void 0:a.interface)==="chinaRegion"&&(n=import_lodash.default.last(n))),!n&&n!==0&&n!==!1?null:{[i]:{[t[i]||"$eq"]:n}}}).filter(Boolean)}),useAssociatedFields=()=>{var e;return((e=useCollection())==null?void 0:e.fields.filter(t=>isAssocField(t)))||[]},isAssocField=e=>["o2o","oho","obo","m2o","createdBy","updatedBy","o2m","m2m","linkTo","chinaRegion","mbm"].includes(e==null?void 0:e.interface),isSameCollection=(e,t)=>e.name===t.name&&e.dataSource===t.dataSource,useFilterAPI=()=>{const e=(0,import_react.useFieldSchema)(),{getDataBlocks:t}=useFilterBlock(),{targets:o,uid:r}=findFilterTargets(e),i=t(),[n,a]=(0,import_react2.useState)(()=>o&&o.some(u=>i.some(m=>m.uid===u.uid))),l=Object.keys(o||{});(0,import_react2.useEffect)(()=>{a(o&&o.some(u=>i.some(m=>m.uid===u.uid)))},[l.length,o,i]);const c=(0,import_react2.useCallback)((u,m="id",d="$eq")=>{const p=i.find(h=>h.uid===e.parent["x-uid"]);i.forEach(h=>{var g,_,f,v;let C=m;const S=o.find(j=>j.uid===h.uid);if(!S)return;import_lodash.default.isFunction(u)&&(u=u(S,h,getSourceKey$1(p,S.field))),import_lodash.default.isFunction(m)&&(C=m(S,h)),import_lodash.default.isFunction(d)&&(d=d(S));const b=((g=h.service.params)==null?void 0:g[0])||{},y=((f=(_=h.service.params)==null?void 0:_[1])==null?void 0:f.filters)||{};if(u!=null)y[r]={$and:[{[C]:{[d]:u}}]};else if((v=h.clearSelection)==null||v.call(h),delete y[r],h.dataLoadingMode==="manual")return h.clearData();const F=mergeFilter([...Object.values(y).map(j=>removeNullCondition(j)),h.defaultFilter]);h.doFilter(P(x({},b),{page:1,filter:F}),{filters:y})})},[i,o,r,e]);return{isConnected:n,doFilter:c}},isInFilterFormBlock=e=>{for(;e;){if(e["x-filter-targets"])return e["x-decorator"]==="FilterFormBlockProvider";e=e.parent}return!1};function getSourceKey$1(e,t){var o,r,i;const n=(o=e==null?void 0:e.associatedFields)==null?void 0:o.find(a=>a.foreignKey===t);return(n==null?void 0:n.sourceKey)||((i=(r=t==null?void 0:t.split)==null?void 0:r.call(t,"."))==null?void 0:i[1])}const AssociationFieldContext=(0,import_react2.createContext)({});AssociationFieldContext.displayName="AssociationFieldContext";const useInsertSchema$1=e=>{const t=(0,import_react.useFieldSchema)(),{insertAfterBegin:o}=useDesignable(),{isMobileLayout:r}=useMobileLayout();return(0,import_react2.useCallback)(i=>{r||t.reduceProperties((n,a)=>a["x-component"]==="AssociationField."+e?a:n,null)||o((0,import_cloneDeep.default)(i))},[e,t,o,r])};function useAssociationFieldContext(){return(0,import_react2.useContext)(AssociationFieldContext)}function useServiceOptions$1(e){var t,o,r,i,n,a,l,c,u,m;const{action:d="list",service:p,useOriginalFilter:h}=e,g=(0,import_react.useFieldSchema)(),_=(0,import_react.useField)(),{getField:f}=useCollection_deprecated(),{getCollectionJoinField:v}=useCollectionManager_deprecated(),C=useRecord(),{isNew:S}=useCollectionRecord()||{},b=((0,import_lodash.isString)((r=(o=(t=g==null?void 0:g["x-component-props"])==null?void 0:t.service)==null?void 0:o.params)==null?void 0:r.filter)?(a=(n=(i=_.componentProps)==null?void 0:i.service)==null?void 0:n.params)==null?void 0:a.filter:(u=(c=(l=g==null?void 0:g["x-component-props"])==null?void 0:l.service)==null?void 0:c.params)==null?void 0:u.filter)||((m=p==null?void 0:p.params)==null?void 0:m.filter),{filter:y}=useParsedFilter({filterOption:b,onFilterChange:()=>{S&&_.reset()}}),F=(0,import_react2.useMemo)(()=>f(g.name)||v(g==null?void 0:g["x-collection-field"]),[g]),j=C==null?void 0:C[F==null?void 0:F.sourceKey],A=(0,import_react2.useMemo)(()=>{const D=["oho","o2m"].includes(F==null?void 0:F.interface);return mergeFilter([mergeFilter([D&&!isInFilterFormBlock(g)&&F!=null&&F.foreignKey&&!h?{[F.foreignKey]:{$is:null}}:null,y]),D&&j!==void 0&&j!==null&&!isInFilterFormBlock(g)&&F!=null&&F.foreignKey&&!h?{[F.foreignKey]:{$eq:j}}:null],"$or")},[F==null?void 0:F.interface,F==null?void 0:F.foreignKey,g,y,j,h]);return(0,import_react2.useMemo)(()=>P(x({resource:F==null?void 0:F.target,action:d},p),{params:P(x({},p==null?void 0:p.params),{filter:A})}),[F==null?void 0:F.target,d,A,p])}const useFieldNames$1=(e={})=>{var t,o,r,i,n;const a=(0,import_react.useFieldSchema)(),l=((i=(r=(o=(t=a["x-component-props"])==null?void 0:t.field)==null?void 0:o.uiSchema)==null?void 0:r["x-component-props"])==null?void 0:i.fieldNames)||((n=a["x-component-props"])==null?void 0:n.fieldNames)||e.fieldNames;return x({label:"label",value:"value"},l)},SubFormContext=(0,import_react2.createContext)(null);SubFormContext.displayName="SubFormContext";const SubFormProvider=e=>{const t=(0,import_react2.useContext)(SubFormContext),{value:o,collection:r,fieldSchema:i,parent:n,skip:a}=e.value,l=(0,import_react2.useMemo)(()=>import_lodash.default.omitBy({value:o,collection:r,fieldSchema:i,skip:a,parent:n||(t!=null&&t.skip?t.parent:t)},import_lodash.default.isUndefined),[o,r,i,a,n,t]);return(0,import_jsx_runtime.jsx)(SubFormContext.Provider,{value:l,children:e.children})},useSubFormValue=()=>{const{value:e,collection:t,fieldSchema:o,parent:r}=(0,import_react2.useContext)(SubFormContext)||{};return{formValue:e,collection:t,fieldSchema:o,parent:r}},useColumnSettings=e=>{const{t}=(0,import_react_i18next.useTranslation)(),o=`nocobase_table_column_settings_${e}`,r=(0,import_react2.useCallback)(()=>{try{const a=localStorage.getItem(o);return a?JSON.parse(a):null}catch(a){return console.warn("Failed to parse table column settings from localStorage:",a),null}},[o]),i=(0,import_react2.useCallback)(a=>{try{const l=JSON.stringify(a);localStorage.setItem(o,l);const c=new CustomEvent("nocobase-table-settings-changed",{detail:{key:o,tableId:e,settings:a}});window.dispatchEvent(c)}catch(l){console.warn("Failed to save table column settings to localStorage:",l),import_antd.message.error(t("Failed to save table settings"))}},[o,e,t]),n=(0,import_react2.useCallback)(()=>{try{localStorage.removeItem(o);const a=new CustomEvent("nocobase-table-settings-changed",{detail:{key:o,tableId:e,settings:null}});window.dispatchEvent(a)}catch(a){console.warn("Failed to clear table column settings from localStorage:",a),import_antd.message.error(t("Failed to clear table settings"))}},[o,e,t]);return{getSettings:r,saveSettings:i,clearSettings:n}},useTableColumnIntegration=(e,t=!0)=>{const o=(0,import_react.useFieldSchema)(),r=(o==null?void 0:o["x-uid"])||"default",{getSettings:i}=useColumnSettings(r),[n,a]=(0,import_react2.useState)(0);(0,import_react2.useEffect)(()=>{const c=u=>{const{key:m,tableId:d}=u.detail;(m.includes(r)||d===r)&&a(p=>p+1)};return window.addEventListener("nocobase-table-settings-changed",c),()=>{window.removeEventListener("nocobase-table-settings-changed",c)}},[r]);const l=(0,import_react2.useMemo)(()=>i(),[i,n]);return{columns:(0,import_react2.useMemo)(()=>{if(!t||!l||l.length===0)return e;const c=new Map;l.forEach(h=>{c.set(h.key,h)});const u=e.map(h=>{const g=c.get(h.key);if(g){const _=h.columnHidden||!g.visible,f=g.width||h.width,v=g.fixed||h.fixed;return P(x({},h),{columnHidden:_,fixed:v,width:f,_orderIndex:g.order})}return h}),m=[],d=[];u.forEach(h=>{h._orderIndex!==void 0?m.push(h):d.push(h)}),m.sort((h,g)=>(h._orderIndex||0)-(g._orderIndex||0));const p=[...m,...d];return p.forEach(h=>{delete h._orderIndex}),p},[e,l])}},TableSkeleton=({rows:e=5,columns:t=6})=>{const{token:o}=useToken$1(),r=o.controlHeight*2.06,i=o.controlHeight*1.75,n=(0,import_react2.useMemo)(()=>import_css.css`
|
|
65
|
+
`,items:l},n))})},SchemaInitializerSubMenu=e=>{var t;const o=e,{children:r,items:i,title:n,name:a,onOpenChange:l,icon:c}=o,u=W(o,["children","items","title","name","onOpenChange","icon"]),m=useCompile(),d=useSchemaInitializerItem(),p=(0,import_react2.useMemo)(()=>a||(d==null?void 0:d.name)||(0,import_shared.uid)(),[a,d]),h=(t=i||r)==null?void 0:t.filter(f=>f.useVisible?f.useVisible():!0),g=useSchemaInitializerMenuItems(h,a),_=(0,import_react2.useMemo)(()=>[P(x({},u),{key:p,label:m(n),icon:typeof c=="string"?(0,import_jsx_runtime.jsx)(import_icons.default,{type:c}):c,children:g})],[g,m,c,p,u,n]);return(0,import_jsx_runtime.jsx)(SchemaInitializerMenu,{onOpenChange:l,items:_})},SchemaInitializerSubMenuInternal=()=>{const e=useSchemaInitializerItem();return(0,import_jsx_runtime.jsx)(SchemaInitializerSubMenu,x({},e))},useAriaAttributeOfMenuItem=()=>{const{isInMenu:e}=useSchemaInitializerSubMenuContext();return{attribute:(0,import_react2.useMemo)(()=>e?{}:{role:"menuitem"},[e])}},{Paragraph:Paragraph$1,Text:Text$2}=import_antd.Typography,ErrorFallbackModal=e=>{const[t,o]=import_react2.default.useState(!1),r=(0,import_jsx_runtime.jsx)(Paragraph$1,{style:{display:"flex",marginBottom:0},copyable:{text:e.error.message},children:(0,import_jsx_runtime.jsxs)(Text$2,{type:"danger",style:{whiteSpace:"nowrap",textOverflow:"ellipsis",overflow:"hidden",display:"inline-block",maxWidth:"200px"},children:["Error: ",e.error.message]})});return(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)("div",{onMouseOver:()=>o(!0),children:e.children||r}),(0,import_jsx_runtime.jsx)(import_antd.Modal,{zIndex:1e4,open:t,footer:null,onCancel:()=>o(!1),width:"60%",children:(0,import_jsx_runtime.jsx)(ErrorFallback,x({},e))})]})},{Paragraph,Text:Text$1,Link}=import_antd.Typography,useDownloadLogs=(e,t={})=>{const o=useLocationNoUpdate(),[r,i]=import_react2.default.useState(!1),n=useAPIClient();return{loading:r,download:()=>q(void 0,null,function*(){i(!0);try{const a=yield n.request({url:"logger:collect",method:"post",responseType:"blob",data:x({error:{message:e.message,stack:e.stack},location:o},t)}),l=window.URL.createObjectURL(new Blob([a.data],{type:"application/gzip"})),c=document.createElement("a");c.setAttribute("href",l),c.setAttribute("download","logs.tar.gz"),c.click(),c.remove()}catch(a){console.log(a)}i(!1)})}},ErrorFallback=({error:e})=>{const t=(0,import_react.useFieldSchema)(),{t:o}=(0,import_react_i18next.useTranslation)(),{loading:r,download:i}=useDownloadLogs(e,{schema:t}),n=(0,import_jsx_runtime.jsxs)(import_react_i18next.Trans,{children:["This is likely a NocoBase internals bug. Please open an issue at ",(0,import_jsx_runtime.jsx)(Link,{href:"https://github.com/nocobase/nocobase/issues",target:"_blank",children:"here"})]});return(0,import_jsx_runtime.jsx)("div",{style:{backgroundColor:"white"},children:(0,import_jsx_runtime.jsx)(import_antd.Result,{style:{maxWidth:"60vw",margin:"auto"},status:"error",title:o("Render Failed"),subTitle:n,extra:[(0,import_jsx_runtime.jsx)(import_antd.Button,{type:"primary",href:"https://github.com/nocobase/nocobase/issues",target:"_blank",children:o("Feedback")},"feedback"),(0,import_jsx_runtime.jsx)(import_antd.Button,{loading:r,onClick:i,children:o("Download logs")},"log")],children:(0,import_jsx_runtime.jsx)(Paragraph,{copyable:{text:e.stack},children:(0,import_jsx_runtime.jsx)(Text$1,{type:"danger",style:{whiteSpace:"pre-line",textAlign:"center"},children:e.stack})})})})};ErrorFallback.Modal=ErrorFallbackModal;const AppNotFound=()=>{const e=(0,import_react_router_dom.useNavigate)(),{t}=(0,import_react_i18next.useTranslation)();return(0,import_jsx_runtime.jsx)(import_antd.Result,{status:"404",title:"404",subTitle:t("Sorry, the page you visited does not exist."),extra:(0,import_jsx_runtime.jsx)(import_antd.Button,{onClick:()=>e("/",{replace:!0}),type:"primary",children:"Back Home"})})};class Plugin{constructor(t,o){this.options=t,this.app=o,this.options=t,this.app=o}get pluginManager(){return this.app.pluginManager}get pm(){return this.app.pm}get router(){return this.app.router}get pluginSettingsManager(){return this.app.pluginSettingsManager}get schemaInitializerManager(){return this.app.schemaInitializerManager}get schemaSettingsManager(){return this.app.schemaSettingsManager}get dataSourceManager(){return this.app.dataSourceManager}afterAdd(){return q(this,null,function*(){})}beforeLoad(){return q(this,null,function*(){})}load(){return q(this,null,function*(){})}t(t,o={}){var r;return this.app.i18n.t(t,x({ns:(r=this.options)==null?void 0:r.packageName},o))}}const titleWrapperStyle={display:"flex",alignItems:"center",gap:4},withTooltipComponent=e=>t=>{const{tooltip:o}=t;return o?(0,import_jsx_runtime.jsxs)("div",{style:titleWrapperStyle,children:[(0,import_jsx_runtime.jsx)(e,x({},t)),(0,import_jsx_runtime.jsx)(import_antd.Tooltip,{title:o,children:(0,import_jsx_runtime.jsx)(import_icons.QuestionCircleOutlined,{style:{zIndex:1}})})]}):(0,import_jsx_runtime.jsx)(e,x({},t))},{evaluate}=import_client3.evaluators.get("formula.js"),useEvaluatedExpression=e=>{const t=useVariables$1(),o=useLocalVariables$1(),[r,i]=(0,import_react2.useState)();return(0,import_react2.useEffect)(()=>{q(void 0,null,function*(){if(e==null||e===""){i(void 0);return}const{exp:n,scope:a}=yield replaceVariables(e,{variables:t,localVariables:o});try{const l=evaluate(n,x({now:()=>new Date().toString()},a));i(l)}catch(l){console.error(l)}})},[t.parseVariable,e,o]),r};class SchemaInitializer{constructor(t){k(this,"options"),k(this,"name"),this.options=Object.assign({items:[]},t),this.name=t.name}get items(){return this.options.items}add(t,o){const r=t.split("."),i=r[r.length-1],n=P(x({},o),{name:i}),a=(u,m)=>{const d=this.items.findIndex(p=>p.name===u);d===-1?this.items.push(m):this.items[d]=m};if(r.length===1){a(i,n);return}const l=r.slice(0,-1).join("."),c=this.get(l);if(c){c.children||(c.children=[]);const u=t.replace(`${c.name}.`,""),m=c.children.findIndex(d=>d.name===u);m===-1?c.children.push(n):c.children[m]=n}else a(i,n)}get(t){var o;if(!t)return;const r=t.split(".");let i={children:this.items};for(let n=0;n<r.length;n++){const a=r[n],l=(o=i.children)==null?void 0:o.find(c=>c.name===a);if(l&&(i=l),n===r.length-1)return l}}remove(t){const o=t.split(".");if(o.length===1){const i=this.items.findIndex(n=>n.name===o[0]);i!==-1&&this.items.splice(i,1);return}const r=this.get(o.slice(0,-1).join("."));if(r&&r.children){const i=o[o.length-1],n=r.children.findIndex(a=>a.name===i);n!==-1&&r.children.splice(n,1)}}}var NocoBaseDesktopRouteType=(e=>(e.group="group",e.page="page",e.link="link",e.tabs="tabs",e))(NocoBaseDesktopRouteType||{});const useStyles$h=genStyleHook("nb-menu-item",e=>{const{componentCls:t}=e;return{[t]:{paddingLeft:`${e.padding}px !important`,paddingRight:`${e.padding}px !important`}}}),useAttach=e=>{const t=(0,import_react2.useRef)(null);return(0,import_react2.useEffect)(()=>(t.current&&e!==t.current&&t.current.onUnmount(),t.current=e,e.onMount(),()=>{e.onUnmount()}),[e]),e},compileCache={},hasVariable=e=>/{{.*?}}/g.test(e),useCompile=({noCache:e}={noCache:!1})=>{const t=(0,import_react2.useContext)(import_react.SchemaOptionsContext),o=(0,import_react2.useContext)(import_react.SchemaExpressionScopeContext);return(r,i)=>{let n=!1,a;if(typeof r=="string"&&r.startsWith("{{")&&(n=!0,a=r),r&&typeof r=="object"&&!(0,import_react2.isValidElement)(r)){try{a=JSON.stringify(r)}catch(l){return console.warn("Failed to stringify:",l),r}if(compileCache[a])return compileCache[a];n=hasVariable(a)}if(Array.isArray(r)){try{a=JSON.stringify(r)}catch(l){return console.warn("Failed to stringify:",l),r}if(compileCache[a])return compileCache[a];n=hasVariable(a)}if(n){const l=x(x(x({},t.scope),o),i);if(!a)return import_react.Schema.compile(r,l);try{return e?import_react.Schema.compile(r,l):(compileCache[a]=compileCache[a]||import_react.Schema.compile(r,l),compileCache[a])}catch(c){return console.log("useCompile error",r,c),import_react.Schema.compile(r,l)}}return r}},useComponent=(e,t)=>{const{components:o}=(0,import_react2.useContext)(import_react.SchemaOptionsContext);return e?typeof e!="string"?e:(0,import_lodash.get)(o,e)||t:t},LAZY_COMPONENT_KEY=Symbol("LAZY_COMPONENT_KEY");function lazy(e,...t){if(t.length===0){const o=(0,import_react2.lazy)(()=>e().then(i=>{const n=i.default;return r[LAZY_COMPONENT_KEY]=n,{default:n}})),r=i=>(0,import_jsx_runtime.jsx)(import_react2.default.Suspense,{fallback:(0,import_jsx_runtime.jsx)(import_antd.Spin,{}),children:(0,import_jsx_runtime.jsx)(o,x({},i))});return r}return t.reduce((o,r)=>{const i=(0,import_react2.lazy)(()=>e().then(n=>{const a=(0,import_lodash.get)(n,r);return o[r][LAZY_COMPONENT_KEY]=a,{default:a}}));return o[r]=n=>(0,import_jsx_runtime.jsx)(import_react2.default.Suspense,{fallback:(0,import_jsx_runtime.jsx)(import_antd.Spin,{}),children:(0,import_jsx_runtime.jsx)(i,x({},n))}),o},{})}function useLazy(e,t){const o=typeof t=="function"?t:i=>i[t],r=(0,import_react_imported_component.loadableResource)(e);if(!r.payload)throw new Promise((i,n)=>{r.loadIfNeeded(),r.resolution.then(i).catch(n)});return o(r.payload)}function addAppVersion(e,t){if(e)return e["x-app-version"]||(e["x-app-version"]=t),Object.keys(e.properties||{}).forEach(o=>{var r;addAppVersion((r=e.properties)==null?void 0:r[o],t)}),e}const name="@nocobase/client",version="1.9.36",license="AGPL-3.0",main="lib/index.js",module$1="es/index.mjs",types="es/index.d.ts",dependencies={"@ahooksjs/use-url-state":"3.5.1","@ant-design/cssinjs":"^1.11.1","@ant-design/icons":"^5.6.1","@ant-design/pro-layout":"^7.22.1","@antv/g2plot":"^2.4.18","@budibase/handlebars-helpers":"0.14.0","@ctrl/tinycolor":"^3.6.0","@dnd-kit/core":"^6.0.0","@dnd-kit/sortable":"^7.0.0","@emotion/css":"^11.7.1","@formily/antd-v5":"1.2.3","@formily/core":"^2.2.27","@formily/grid":"^2.2.27","@formily/json-schema":"^2.2.27","@formily/path":"^2.2.27","@formily/react":"^2.2.27","@formily/reactive":"^2.2.27","@formily/reactive-react":"^2.2.27","@formily/shared":"^2.2.27","@formily/validator":"^2.2.27","@nocobase/evaluators":"1.9.36","@nocobase/sdk":"1.9.36","@nocobase/utils":"1.9.36",ahooks:"^3.7.2",antd:"5.24.2","antd-mobile":"^5.41.1","antd-mobile-icons":"^0.3.0","antd-style":"3.7.1",axios:"^1.7.0","bignumber.js":"^9.1.2",classnames:"^2.3.1",cronstrue:"^2.11.0","file-saver":"^2.0.5",filesize:"9.0.11",flat:"^5.0.2","html5-qrcode":"^2.3.8",i18next:"^22.4.9","i18next-http-backend":"^2.1.1",ignore:"^5.2.0",json5:"^2.2.3",lodash:"4.17.21","lru-cache":"6.0.0","markdown-it":"14.1.0","markdown-it-highlightjs":"3.3.1",mathjs:"^10.6.0",mermaid:"9.4.3",mime:"^4.0.4","mime-match":"^1.0.2","react-beautiful-dnd":"^13.1.0","react-device-detect":"2.2.3","react-drag-listview":"^0.1.9","react-error-boundary":"^4.0.10","react-helmet":"^6.1.0","react-hotkeys-hook":"^3.4.7","react-i18next":"^11.15.1","react-iframe":"~1.8.5","react-image-lightbox":"^5.1.4","react-intersection-observer":"9.14.0","react-js-cron":"^3.1.0","react-quill":"^2.0.0","react-router-dom":"^6.11.2","react-to-print":"^2.14.7","sanitize-html":"2.13.0","use-deep-compare-effect":"^1.8.1"},peerDependencies={react:">=18.0.0","react-dom":">=18.0.0","react-is":">=18.0.0"},devDependencies={"@testing-library/react":"^14.0.0","@types/markdown-it":"14.1.1","@types/markdown-it-highlightjs":"3.3.1","@types/react-big-calendar":"^1.6.4","axios-mock-adapter":"^1.20.0",dumi:"2.2.14","dumi-theme-nocobase":"^0.2.28"},clientPkg={name,version,license,main,module:module$1,types,dependencies,peerDependencies,devDependencies};function createDesignable(e){return new Designable(e)}const generateUid=e=>{e&&(e["x-uid"]||(e["x-uid"]=(0,import_shared.uid)()),Object.keys(e.properties||{}).forEach(t=>{generateUid(e.properties[t])}))},defaultWrap=e=>e,matchSchema=(e,t)=>{if(!(!e||!t)){for(const o in t)if(Object.prototype.hasOwnProperty.call(t,o)&&t[o]!==(e==null?void 0:e[o]))return!1;return!0}},splitWrapSchema=(e,t)=>{if(e["x-uid"]&&e["x-uid"]===t["x-uid"])return[null,e.toJSON()];const o=e.toJSON(),r=P(x({},o),{properties:{}});let i=null;const n=(a,l)=>{Object.keys(a||{}).forEach(c=>{const u=a[c];if(u["x-uid"]===t["x-uid"]){i=a[c];return}else l.properties[c]=P(x({},u),{properties:{}}),n(u==null?void 0:u.properties,l.properties[c])})};return n(o.properties,r),[r,i]},translate=e=>e;class Designable{constructor(t){k(this,"current"),k(this,"options"),k(this,"appVersion"),k(this,"events",{}),this.options=t,this.current=t.current,this.appVersion=t.appVersion}get model(){return this.options.model}get query(){return this.options.query}loadAPIClientEvents(){const{api:t,t:o=translate}=this.options;if(!t)return;const r=i=>{if(!i)return[];const n=Object.values(i.properties).length,a=[];return i.mapProperties(l=>{l["x-component-props"]=l["x-component-props"]||{},l["x-component-props"].width=100/n,l["x-uid"]&&a.push({"x-uid":l["x-uid"],"x-component-props":l["x-component-props"]})}),i["x-uid"]&&a.length?a:[]};this.on("insertAdjacent",i=>q(this,[i],function*({onSuccess:n,current:a,position:l,schema:c,wrap:u,wrapped:m,removed:d}){var p;let h=[];if((m==null?void 0:m["x-component"])==="Grid.Col"&&(h=h.concat(r(m.parent))),(d==null?void 0:d["x-component"])==="Grid.Col"&&(h=h.concat(r(d.parent))),this.refresh(),!a["x-uid"])return;const g=yield t.request({url:`/uiSchemas:insertAdjacent/${a["x-uid"]}?position=${l}`,method:"post",data:{schema:addAppVersion(c,this.appVersion),wrap:u}});h.length&&(yield t.request({url:"/uiSchemas:batchPatch",method:"post",data:h})),d!=null&&d["x-uid"]&&(yield t.request({url:`/uiSchemas:remove/${d["x-uid"]}`,method:"post"})),n==null||n((p=g==null?void 0:g.data)==null?void 0:p.data),import_antd.message.success(o("Saved successfully"),.2)})),this.on("patch",i=>q(this,[i],function*({schema:n}){this.refresh(),n!=null&&n["x-uid"]&&(yield t.request({url:"/uiSchemas:patch",method:"post",data:x({},n)}),import_antd.message.success(o("Saved successfully"),.2))})),this.on("initializeActionContext",i=>q(this,[i],function*({schema:n}){n!=null&&n["x-uid"]&&(yield t.request({url:"/uiSchemas:initializeActionContext",method:"post",data:x({},n)}))})),this.on("batchPatch",i=>q(this,[i],function*({schemas:n}){this.refresh(),yield t.request({url:"/uiSchemas:batchPatch",method:"post",data:n}),import_antd.message.success(o("Saved successfully"),.2)})),this.on("remove",i=>q(this,[i],function*({removed:n}){let a=[];(n==null?void 0:n["x-component"])==="Grid.Col"&&(a=r(n.parent)),this.refresh(),n!=null&&n["x-uid"]&&(yield t.request({url:`/uiSchemas:remove/${n["x-uid"]}`,method:"post"}),a.length&&(yield t.request({url:"/uiSchemas:batchPatch",method:"post",data:a})),import_antd.message.success(o("Saved successfully"),.2))}))}prepareProperty(t){t.type||(t.type="void"),t.name||(t.name=(0,import_shared.uid)()),this.current["x-uid"]&&generateUid(t)}on(t,o){this.events[t]||(this.events[t]=[]),this.events[t].push(o)}emit(t,...o){return q(this,null,function*(){if(!this.events[t])return;const[r,...i]=o;return Promise.all(this.events[t].map(n=>n.bind(this)(x({current:this.current},r),...i)))})}parentsIn(t){if(!t||!import_react.Schema.isSchemaInstance(t))return!1;let o=this.current;for(;o!=null&&o.parent;){if(o.parent===t)return!0;o=o.parent}return!1}refresh(t){const{refresh:o}=this.options;return o==null?void 0:o(t)}deepMerge(t){const o={title:"title",description:"description",default:"initialValue",readOnly:"readOnly",writeOnly:"editable",enum:"dataSource","x-pattern":"pattern","x-display":"display","x-validator":"validator","x-decorator":"decorator","x-component":"component","x-reactions":"reactions","x-content":"content","x-visible":"visible","x-hidden":"hidden","x-disabled":"disabled","x-editable":"editable","x-read-only":"readOnly"},r={"x-decorator-props":"decoratorProps","x-component-props":"componentProps","x-data":"data"};Object.keys(t).forEach(i=>{o[i]?(this.current[i]=t[i],this.updateModel(o[i],t[i])):r[i]?Object.keys(t[i]).forEach(n=>{(0,import_set.default)(this.current,[i,n],t[i][n]),this.updateModel([r[i],n],t[i][n])}):this.current[i]=t[i]}),this.emit("patch",{schema:t})}getSchemaAttribute(t,o){return(0,import_get.default)(this.current,t,o)}shallowMerge(t){const o={title:"title",description:"description",default:"initialValue",readOnly:"readOnly",writeOnly:"editable",enum:"dataSource","x-pattern":"pattern","x-display":"display","x-validator":"validator","x-decorator":"decorator","x-component":"component","x-reactions":"reactions","x-content":"content","x-visible":"visible","x-hidden":"hidden","x-disabled":"disabled","x-editable":"editable","x-read-only":"readOnly","x-decorator-props":"decoratorProps","x-component-props":"componentProps","x-data":"data"};Object.keys(t).forEach(r=>{this.current[r]=t[r],o[r]&&this.updateModel(o[r],t[r])}),this.emit("patch",{schema:t})}updateModel(t,o){const r=i=>{(0,import_set.default)(i,t,o)};this.model&&r(this.model),this.query&&this.query.take(r)}insertAdjacent(t,o,r={}){switch(t){case"beforeBegin":return this.insertBeforeBegin(o,r);case"afterBegin":return this.insertAfterBegin(o,r);case"beforeEnd":return this.insertBeforeEnd(o,r);case"afterEnd":return this.insertAfterEnd(o,r)}}recursiveRemoveIfNoChildren(t,o){if(!t)return;let r=t,i;const n=o==null?void 0:o.breakRemoveOn;for(;r;){if(typeof n=="function"){if(n(r))break}else if(matchSchema(r,n))break;if(Object.keys(r.properties||{}).length>0)break;r.parent&&(i=r.parent.removeProperty(r.name)),r=r.parent}return i}remove(t,o={}){const{breakRemoveOn:r,removeParentsIfNoChildren:i}=o,n=t||this.current;let a=n.parent.removeProperty(n.name);if(i){const l=this.recursiveRemoveIfNoChildren(n.parent,{breakRemoveOn:r});l&&(a=l)}return this.emit("remove",{removed:a})}removeWithoutEmit(t,o={}){const{breakRemoveOn:r,removeParentsIfNoChildren:i}=o,n=t||this.current;let a=n.parent.removeProperty(n.name);if(i){const l=this.recursiveRemoveIfNoChildren(n.parent,{breakRemoveOn:r});l&&(a=l)}return a}insertBeforeBeginOrAfterEnd(t,o={}){if(!import_react.Schema.isSchemaInstance(this.current)||!import_react.Schema.isSchemaInstance(t)||this.current.parent!==t.parent)return;let r=0,i=0;return this.current.parent.mapProperties((n,a,l)=>{this.current.name===a&&(i=l),t.name===a&&(r=l)}),r>i?this.insertBeforeBegin(t,o):this.insertAfterEnd(t,o)}insertBeforeBegin(t,o={}){if(!import_react.Schema.isSchemaInstance(this.current))return;const r={onSuccess:o.onSuccess},{wrap:i=defaultWrap,breakRemoveOn:n,removeParentsIfNoChildren:a}=o;if(import_react.Schema.isSchemaInstance(t)){if(this.parentsIn(t)){this.emit("error",{code:"parent_is_not_allowed",schema:t});return}t.parent.removeProperty(t.name),a&&(r.removed=this.recursiveRemoveIfNoChildren(t.parent,{breakRemoveOn:n}))}else t&&(t=(0,import_cloneDeep.default)(t));const l={};let c=!1,u=0,m=0;this.current.parent.mapProperties((_,f)=>{f===this.current.name&&(m=u,c=!0,++u),_["x-index"]=u,++u,c&&(l[f]=_,this.current.parent.removeProperty(f))}),this.prepareProperty(t);const d=i(t),p=this.current.parent.addProperty(d.name||(0,import_shared.uid)(),d);p["x-index"]=m,p.parent=this.current.parent,this.current.parent.setProperties(l);const[h,g]=splitWrapSchema(p,t);this.emit("insertAdjacent",x({position:"beforeBegin",schema:g,wrapped:d,wrap:h},r))}insertAfterBegin(t,o={}){if(!import_react.Schema.isSchemaInstance(this.current))return;const r={onSuccess:o.onSuccess},{wrap:i=defaultWrap,breakRemoveOn:n,removeParentsIfNoChildren:a}=o;if(import_react.Schema.isSchemaInstance(t)){if(this.parentsIn(t)){this.emit("error",{code:"parent_is_not_allowed",schema:t});return}t.parent.removeProperty(t.name),a&&(r.removed=this.recursiveRemoveIfNoChildren(t.parent,{breakRemoveOn:n}))}else t&&(t=(0,import_cloneDeep.default)(t));const l={};let c=1;this.current.mapProperties((h,g)=>{h["x-index"]=c,++c,l[g]=h}),this.current.properties={},this.prepareProperty(t);const u=i(t),m=this.current.addProperty(u.name||(0,import_shared.uid)(),u);m["x-index"]=0,m.parent=this.current,this.current.setProperties(l);const[d,p]=splitWrapSchema(m,t);this.emit("insertAdjacent",x({position:"afterBegin",schema:p,wrap:d,wrapped:u},r))}insertBeforeEnd(t,o={}){if(!import_react.Schema.isSchemaInstance(this.current))return;delete t["x-index"];const r={onSuccess:o.onSuccess},{wrap:i=defaultWrap,breakRemoveOn:n,removeParentsIfNoChildren:a}=o;if(import_react.Schema.isSchemaInstance(t)){if(this.parentsIn(t)){this.emit("error",{code:"parent_is_not_allowed",schema:t});return}t.parent.removeProperty(t.name),a&&(r.removed=this.recursiveRemoveIfNoChildren(t.parent,{breakRemoveOn:n}))}else t&&(t=(0,import_cloneDeep.default)(t));this.prepareProperty(t);const l=i(t),c=this.current.addProperty(l.name||(0,import_shared.uid)(),l);c.parent=this.current;const[u,m]=splitWrapSchema(c,t);return this.emit("insertAdjacent",x({position:"beforeEnd",schema:m,wrap:u,wrapped:l},r))}insertAfterEnd(t,o={}){if(!import_react.Schema.isSchemaInstance(this.current))return;const r={onSuccess:o==null?void 0:o.onSuccess},{wrap:i=defaultWrap,breakRemoveOn:n,removeParentsIfNoChildren:a}=o;let l=0,c=0,u=!1;const m={};if(this.current.parent.mapProperties((_,f)=>{_["x-index"]=l,f===this.current.name&&(++l,c=l,u=!0),++l,u&&f!==this.current.name&&(m[f]=_,this.current.parent.removeProperty(f))}),import_react.Schema.isSchemaInstance(t)){if(this.parentsIn(t)){this.emit("error",{code:"parent_is_not_allowed",schema:t});return}t.parent.removeProperty(t.name),a&&(r.removed=this.recursiveRemoveIfNoChildren(t.parent,{breakRemoveOn:n})),t.parent=null}else t&&(t=(0,import_cloneDeep.default)(t));this.prepareProperty(t);const d=i(t),p=this.current.parent.addProperty(d.name||(0,import_shared.uid)(),d);p.parent=this.current.parent,p["x-index"]=c,this.current.parent.setProperties(m);const[h,g]=splitWrapSchema(p,t);this.emit("insertAdjacent",x({position:"afterEnd",schema:g,wrap:h,wrapped:d},r))}}function useFindComponent(){const e=(0,import_react2.useContext)(import_react.SchemaOptionsContext),t=(0,import_react2.useMemo)(()=>(e==null?void 0:e.components)||{},[e]);return o=>{if(!o)return null;if(typeof o!="string")return o;const r=(0,import_get.default)(t,o);return r||console.error(`[nocobase]: Component "${o}" not found`),r}}function useDesignable(){const{designable:e,setDesignable:t,refresh:o,reset:r}=(0,import_react2.useContext)(SchemaComponentContext),i=(0,import_react2.useContext)(import_react.SchemaOptionsContext),n=(0,import_react2.useMemo)(()=>(i==null?void 0:i.components)||{},[i]),a=(0,import_react2.useMemo)(()=>()=>(0,import_jsx_runtime.jsx)(import_jsx_runtime.Fragment,{}),[]),l=(0,import_ahooks.useUpdate)(),c=useRefreshFieldSchema(),u=useRefreshComponent(),m=(0,import_react2.useCallback)(v=>{o==null||o(),l(),c==null||c(v),u==null||u()},[o,l,c,u]),d=(0,import_react.useField)(),p=(0,import_react.useFieldSchema)(),h=useAPIClient(),{t:g}=(0,import_react_i18next.useTranslation)(),_=(0,import_react2.useMemo)(()=>createDesignable({t:g,api:h,refresh:m,current:p,model:d,appVersion:clientPkg.version}),[g,h,m,p,d]);(0,import_react2.useEffect)(()=>{_.loadAPIClientEvents()},[_]);const{isMobileLayout:f}=useMobileLayout();return{dn:_,designable:f?!1:e,reset:r,refresh:m,setDesignable:t,DesignableBar:a,findComponent:(0,import_react2.useCallback)(v=>{var C;if(!v)return null;if(typeof v!="string")return v;const S=(0,import_get.default)(n,v);return(C=S==null?void 0:S[LAZY_COMPONENT_KEY])!=null?C:S},[import_get.default]),on:_.on.bind(_),patch:(0,import_react2.useCallback)((v,C)=>{const S=b=>{Object.keys(b).forEach(y=>{const F=b[y];y==="title"&&(d.title=F,p.title=F),y==="x-decorator-props"&&(d.decoratorProps||(d.decoratorProps={}),p["x-decorator-props"]||(p["x-decorator-props"]={}),Object.keys(F).forEach(j=>{d.decoratorProps[j]=F[j],p["x-decorator-props"][j]=F[j]})),y==="x-component-props"&&(d.componentProps||(d.componentProps={}),p["x-component-props"]||(p["x-component-props"]={}),Object.keys(F).forEach(j=>{d.componentProps[j]=F[j],p["x-component-props"][j]=F[j]}))})};if(typeof v=="string"){const b={};return(0,import_set.default)(b,v,C),S(b)}S(v),m()},[_]),shallowMerge:(0,import_react2.useCallback)(v=>{_.shallowMerge(v)},[_]),deepMerge:(0,import_react2.useCallback)(v=>{_.deepMerge(v)},[_]),remove:(0,import_react2.useCallback)((v,C)=>{_.remove(v,C)},[_]),insertAdjacent:(0,import_react2.useCallback)((v,C,S)=>{_.insertAdjacent(v,C,S)},[_]),insertBeforeBegin:(0,import_react2.useCallback)(v=>{_.insertBeforeBegin(v)},[_]),insertAfterBegin:(0,import_react2.useCallback)(v=>{_.insertAfterBegin(v)},[_]),insertBeforeEnd:(0,import_react2.useCallback)(v=>{_.insertBeforeEnd(v)},[_]),insertAfterEnd:(0,import_react2.useCallback)(v=>{_.insertAfterEnd(v)},[_])}}const DefaultSchemaToolbar=()=>null;DefaultSchemaToolbar.isNullComponent=!0;const useDesigner=()=>{const{designable:e}=useDesignable(),t=(0,import_react.useFieldSchema)(),o=(0,import_react2.useMemo)(()=>t["x-designer"]||t["x-toolbar"]?t["x-designer"]||t["x-toolbar"]:t["x-settings"]?SchemaToolbar:DefaultSchemaToolbar,[t]),r=useComponent(o);return e&&r||DefaultSchemaToolbar},useFieldProps$1=e=>{const t=(0,import_react2.useContext)(import_react.SchemaOptionsContext),o=(0,import_react2.useContext)(import_react.SchemaExpressionScopeContext),r=(0,import_react2.useRef)();return r.current=o,e.toFieldProps(P(x({},t),{get scope(){return x(x({},t.scope),r.current)}}))};function useSchemaComponentContext(){return(0,import_react2.useContext)(SchemaComponentContext)}const useFieldComponentOptions=()=>{var e;const{getCollectionJoinField:t,getCollection:o}=useCollectionManager_deprecated(),r=(0,import_react.useFieldSchema)(),{getField:i}=useCollection_deprecated(),n=i(r.name)||t(r["x-collection-field"]),{t:a}=(0,import_react_i18next.useTranslation)(),{label:l}=((e=r["x-component-props"])==null?void 0:e.fieldNames)||{};return(0,import_react2.useMemo)(()=>{if(!n||!(n!=null&&n.interface)||!["o2o","oho","obo","o2m","linkTo","m2o","m2m"].includes(n.interface))return;const c=o(n.target);if((c==null?void 0:c.template)==="file")return[{label:a("Record picker"),value:"CollectionField"},{label:a("Select"),value:"AssociationSelect"}];switch(n.interface){case"o2m":return[{label:a("Record picker"),value:"CollectionField"},{label:a("Subtable"),value:"TableField"},{label:a("Select"),value:"AssociationSelect"}];case"m2o":case"m2m":case"linkTo":return[{label:a("Record picker"),value:"CollectionField"},{label:a("Select"),value:"AssociationSelect"}];default:return[{label:a("Record picker"),value:"CollectionField"},{label:a("Subform"),value:"FormField"},{label:a("Select"),value:"AssociationSelect"}]}},[a,n==null?void 0:n.interface,l])},useFieldTitle=()=>{var e;const t=(0,import_react.useField)(),o=(0,import_react.useFieldSchema)(),r=useCollection(),i=useCollectionManager(),n=(r==null?void 0:r.getField(o.name))||(i==null?void 0:i.getCollectionField(o["x-collection-field"])),a=useCompile();(0,import_react2.useEffect)(()=>{var l;t!=null&&t.title||(t.title=a((l=n==null?void 0:n.uiSchema)==null?void 0:l.title))},[(e=n==null?void 0:n.uiSchema)==null?void 0:e.title])},useDef$4=()=>({}),useProps=(e={})=>{const t=e,{useProps:o=useDef$4}=t,r=W(t,["useProps"]);let i=o;typeof o!="function"&&(i=useDef$4);const n=i();return x(x({},r),n)};function useParsedFilter({filterOption:e,onFilterChange:t}){const{parseFilter:o,findVariable:r}=useParseDataScopeFilter(),[i,n]=(0,import_react2.useState)({}),[a,l]=(0,import_react2.useState)(!!e);return(0,import_react2.useEffect)(()=>{if(!e)return;const c=()=>q(this,null,function*(){l(!0);const m=yield o(e);l(!1),n(m),t==null||t(m)});c();const u=import_lodash.default.debounce(c,DEBOUNCE_WAIT);(0,import_reactive.reaction)(()=>(0,import_client.flatten)(e,{breakOn({key:m}){return m.startsWith("$")&&m!=="$and"&&m!=="$or"},transformValue(m){if(!isVariable$1(m))return m;const d=getVariableName(m),p=r(d);let h=null;const g=getPath(m).split(".");return g.forEach((_,f)=>{const v=g.slice(0,f+1).join("."),C=(0,import_client.getValuesByPath)({[d]:(p==null?void 0:p.ctx)||{}},v);import_lodash.default.isEmpty(C)||(h=C)}),h}}),u,{equals:import_lodash.default.isEqual})},[JSON.stringify(e),o,r]),{filter:i,parseVariableLoading:a}}const useParentRecordCommon=e=>{const t=useCollectionRecordData();if(e)return t},useTableBlockDecoratorProps=e=>{var t;const{params:o,parseVariableLoading:r}=useTableBlockParams(e),i=useParentRecordCommon(e.association),n=(t=useDataSourceManager().getDataSource(e.dataSource))==null?void 0:t.collectionManager.getCollection(e.collection);return{params:o,parentRecord:i,parseVariableLoading:r,rowKey:(n==null?void 0:n.filterTargetKey)||"id"}};function useTableBlockParams(e){var t;const o=(0,import_react.useFieldSchema)(),{filter:r,parseVariableLoading:i}=useParsedFilter({filterOption:(t=e.params)==null?void 0:t.filter});return{params:(0,import_react2.useMemo)(()=>{const n=e.params||{},{dragSortBy:a}=(o==null?void 0:o["x-decorator-props"])||{};return e.dragSort&&a&&(n.sort=a),P(x({},n),{filter:r})},[o,r,e.dragSort,e.params]),parseVariableLoading:i}}const key="__isNewRecord__",isNewRecord=e=>(0,import_reactive.untracked)(()=>!!(e!=null&&e[key])),markRecordAsNew=e=>{if(!(0,import_lodash.isObject)(e))throw new Error("markRecordAsNew: record must be an object");return e[key]=!0,e},useDefaultLoading=()=>{var e;return!!((e=useDataBlockRequest())!=null&&e.loading)},withSkeletonComponent=(e,t)=>{const{useLoading:o=useDefaultLoading,displayName:r,SkeletonComponent:i=import_antd.Skeleton}=t||{},n=import_react2.default.memo(a=>{const l=o(),c=(0,import_react2.useRef)(!1),u=(0,import_react2.useDeferredValue)(l);return!c.current&&u?(0,import_jsx_runtime.jsx)(i,{}):(c.current=!0,(0,import_jsx_runtime.jsx)(e,x({},a)))});return n.displayName=r||`${e.displayName}(withSkeletonComponent)`||`${e.name}(withSkeletonComponent)`,n},getActionValue=(e,t)=>{const o=r=>(r==null?void 0:r.mode)==="constant"?r.value:null;switch(!0){case[ActionType.Color,ActionType.BackgroundColor,ActionType.TextAlign,ActionType.FontSize,ActionType.FontWeight,ActionType.FontStyle].includes(e):return o(t);default:return null}},getSatisfiedActions=(e,t)=>q(void 0,[e,t],function*({rules:o,variables:r,localVariables:i},n){return(yield Promise.all(o.filter(a=>!a.disabled).map(a=>q(void 0,null,function*(){return(yield conditionAnalyses({ruleGroup:a.condition,variables:r,localVariables:i,conditionType:a.conditionType},n))?a:null})))).filter(Boolean).map(a=>a.actions).flat()}),getSatisfiedValues=(e,t)=>q(void 0,[e,t],function*({rules:o,variables:r,localVariables:i},n){return(yield getSatisfiedActions({rules:o,variables:r,localVariables:i},n)).map(a=>P(x({},a),{value:getActionValue(a.operator,a.value)}))}),getSatisfiedValueMap=(e,t)=>q(void 0,[e,t],function*({rules:o,variables:r,localVariables:i},n){return(yield getSatisfiedValues({rules:o,variables:r,localVariables:i},n)).reduce((a,l)=>P(x({},a),{[l.operator]:l.value}),{})});function useSatisfiedActionValues({formValues:e,category:t="default",rules:o,schema:r,form:i}){const[n,a]=(0,import_react2.useState)({}),l=(0,import_react.useFieldSchema)(),c=useVariables$1(),u=useLocalVariables$1({currentForm:{values:e}}),m=r??l,d=o??(m[LinkageRuleDataKeyMap[t]]||(m==null?void 0:m.parent[LinkageRuleDataKeyMap[t]])),p=useApp(),h=(0,import_react2.useCallback)(()=>{d&&e&&getSatisfiedValueMap({rules:d,variables:c,localVariables:u},p.jsonLogic).then(g=>{(0,import_lodash.isEmpty)(g)?a({}):a(g)}).catch(g=>{throw new Error(g.message)})},[c,u,d,e]);return(0,import_react2.useEffect)(()=>{if(h(),i){const g=(0,import_shared.uid)();return i.addEffects(g,()=>{(0,import_core.onFormValuesChange)(()=>{h()})}),()=>{i.removeEffects(g)}}},[i,h,e]),{valueMap:n}}const GetStyleRules=import_react2.default.memo(({record:e,schema:t,onStyleChange:o})=>{const{valueMap:r}=useSatisfiedActionValues({formValues:e,category:"style",schema:t});return(0,import_react2.useEffect)(()=>{o(r)},[o,r]),null});GetStyleRules.displayName="GetStyleRules";const opacityStyle={opacity:.5},containerStyle={position:"relative"},spinStyle={display:"flex",alignItems:"center",justifyContent:"center",position:"absolute",left:0,right:0,height:"100%",maxHeight:400,zIndex:1e3},displayNone$3={display:"none"},HighPerformanceSpin=import_react2.default.memo(e=>(0,import_jsx_runtime.jsxs)("div",{style:containerStyle,children:[(0,import_jsx_runtime.jsx)(import_antd.Spin,P(x({},import_lodash.default.omit(e,"children")),{style:e.spinning?spinStyle:displayNone$3})),(0,import_jsx_runtime.jsx)("div",{style:e.spinning?opacityStyle:null,children:e.children})]}));var FilterBlockType=(e=>(e[e.FORM=0]="FORM",e[e.TABLE=1]="TABLE",e[e.TREE=2]="TREE",e[e.COLLAPSE=3]="COLLAPSE",e))(FilterBlockType||{});const mergeFilter=(e,t="$and")=>{const o=e.filter(r=>{if(r&&typeof r=="object"&&!Array.isArray(r))return Object.values(r).filter(i=>i!==void 0).length});return o.length===0?{}:o.length===1?o[0]:{[t]:o}},getSupportFieldsByAssociation=(e,t)=>{var o;return(o=t.associatedFields)==null?void 0:o.filter(r=>e==null?void 0:e.some(i=>i===r.target))},getSupportFieldsByForeignKey=(e,t)=>{var o;return(o=t.foreignKeyFields)==null?void 0:o.filter(r=>e.fields.some(i=>i.type!=="belongsTo"&&i.foreignKey===r.name&&i.target===r.collectionName))},useSupportedBlocks=e=>{const{getDataBlocks:t}=useFilterBlock(),o=(0,import_react.useFieldSchema)(),r=useCollection(),{getAllCollectionsInheritChain:i}=useAllCollectionsInheritChainGetter();if(e===0||e===3)return t().filter(n=>isSameCollection(n.collection,r));if(e===1||e===2)return t().filter(n=>{var a,l;return o["x-uid"]!==n.uid&&(isSameCollection(n.collection,r)||((a=getSupportFieldsByAssociation(i(r.name,r.dataSource),n))==null?void 0:a.length)||((l=getSupportFieldsByForeignKey(r,n))==null?void 0:l.length))})},transformToFilter=(e,t,o,r)=>(e=(0,import_client.flatten)(e,{breakOn({value:i,path:n}){if(["$match","$notMatch","$anyOf","$noneOf","$childIn","$childNotIn","$dateBetween","$in","$notIn"].includes(t[n]))return!0;const a=o(`${r}.${n}`);if(["datetime","datetimeNoTz","date","unixTimestamp","createdAt","updatedAt"].includes(a==null?void 0:a.interface))return!0;if(a!=null&&a.target){if(Array.isArray(i))return!0;const l=a.targetKey||"id";if(i&&i[l]!=null)return!0}return!1}}),{$and:Object.keys(e).map(i=>{let n=import_lodash.default.get(e,i);const a=o(`${r}.${i}`);return a!=null&&a.target&&["hasOne","hasMany","belongsTo","belongsToMany","belongsToArray"].includes(a.type)&&(n=(0,import_client.getValuesByPath)(n,a.targetKey||"id"),i=`${i}.${a.targetKey||"id"}`,(a==null?void 0:a.interface)==="chinaRegion"&&(n=import_lodash.default.last(n))),!n&&n!==0&&n!==!1?null:{[i]:{[t[i]||"$eq"]:n}}}).filter(Boolean)}),useAssociatedFields=()=>{var e;return((e=useCollection())==null?void 0:e.fields.filter(t=>isAssocField(t)))||[]},isAssocField=e=>["o2o","oho","obo","m2o","createdBy","updatedBy","o2m","m2m","linkTo","chinaRegion","mbm"].includes(e==null?void 0:e.interface),isSameCollection=(e,t)=>e.name===t.name&&e.dataSource===t.dataSource,useFilterAPI=()=>{const e=(0,import_react.useFieldSchema)(),{getDataBlocks:t}=useFilterBlock(),{targets:o,uid:r}=findFilterTargets(e),i=t(),[n,a]=(0,import_react2.useState)(()=>o&&o.some(u=>i.some(m=>m.uid===u.uid))),l=Object.keys(o||{});(0,import_react2.useEffect)(()=>{a(o&&o.some(u=>i.some(m=>m.uid===u.uid)))},[l.length,o,i]);const c=(0,import_react2.useCallback)((u,m="id",d="$eq")=>{const p=i.find(h=>h.uid===e.parent["x-uid"]);i.forEach(h=>{var g,_,f,v;let C=m;const S=o.find(j=>j.uid===h.uid);if(!S)return;import_lodash.default.isFunction(u)&&(u=u(S,h,getSourceKey$1(p,S.field))),import_lodash.default.isFunction(m)&&(C=m(S,h)),import_lodash.default.isFunction(d)&&(d=d(S));const b=((g=h.service.params)==null?void 0:g[0])||{},y=((f=(_=h.service.params)==null?void 0:_[1])==null?void 0:f.filters)||{};if(u!=null)y[r]={$and:[{[C]:{[d]:u}}]};else if((v=h.clearSelection)==null||v.call(h),delete y[r],h.dataLoadingMode==="manual")return h.clearData();const F=mergeFilter([...Object.values(y).map(j=>removeNullCondition(j)),h.defaultFilter]);h.doFilter(P(x({},b),{page:1,filter:F}),{filters:y})})},[i,o,r,e]);return{isConnected:n,doFilter:c}},isInFilterFormBlock=e=>{for(;e;){if(e["x-filter-targets"])return e["x-decorator"]==="FilterFormBlockProvider";e=e.parent}return!1};function getSourceKey$1(e,t){var o,r,i;const n=(o=e==null?void 0:e.associatedFields)==null?void 0:o.find(a=>a.foreignKey===t);return(n==null?void 0:n.sourceKey)||((i=(r=t==null?void 0:t.split)==null?void 0:r.call(t,"."))==null?void 0:i[1])}const AssociationFieldContext=(0,import_react2.createContext)({});AssociationFieldContext.displayName="AssociationFieldContext";const useInsertSchema$1=e=>{const t=(0,import_react.useFieldSchema)(),{insertAfterBegin:o}=useDesignable(),{isMobileLayout:r}=useMobileLayout();return(0,import_react2.useCallback)(i=>{r||t.reduceProperties((n,a)=>a["x-component"]==="AssociationField."+e?a:n,null)||o((0,import_cloneDeep.default)(i))},[e,t,o,r])};function useAssociationFieldContext(){return(0,import_react2.useContext)(AssociationFieldContext)}function useServiceOptions$1(e){var t,o,r,i,n,a,l,c,u,m;const{action:d="list",service:p,useOriginalFilter:h}=e,g=(0,import_react.useFieldSchema)(),_=(0,import_react.useField)(),{getField:f}=useCollection_deprecated(),{getCollectionJoinField:v}=useCollectionManager_deprecated(),C=useRecord(),{isNew:S}=useCollectionRecord()||{},b=((0,import_lodash.isString)((r=(o=(t=g==null?void 0:g["x-component-props"])==null?void 0:t.service)==null?void 0:o.params)==null?void 0:r.filter)?(a=(n=(i=_.componentProps)==null?void 0:i.service)==null?void 0:n.params)==null?void 0:a.filter:(u=(c=(l=g==null?void 0:g["x-component-props"])==null?void 0:l.service)==null?void 0:c.params)==null?void 0:u.filter)||((m=p==null?void 0:p.params)==null?void 0:m.filter),{filter:y}=useParsedFilter({filterOption:b,onFilterChange:()=>{S&&_.reset()}}),F=(0,import_react2.useMemo)(()=>f(g.name)||v(g==null?void 0:g["x-collection-field"]),[g]),j=C==null?void 0:C[F==null?void 0:F.sourceKey],A=(0,import_react2.useMemo)(()=>{const D=["oho","o2m"].includes(F==null?void 0:F.interface);return mergeFilter([mergeFilter([D&&!isInFilterFormBlock(g)&&F!=null&&F.foreignKey&&!h?{[F.foreignKey]:{$is:null}}:null,y]),D&&j!==void 0&&j!==null&&!isInFilterFormBlock(g)&&F!=null&&F.foreignKey&&!h?{[F.foreignKey]:{$eq:j}}:null],"$or")},[F==null?void 0:F.interface,F==null?void 0:F.foreignKey,g,y,j,h]);return(0,import_react2.useMemo)(()=>P(x({resource:F==null?void 0:F.target,action:d},p),{params:P(x({},p==null?void 0:p.params),{filter:A})}),[F==null?void 0:F.target,d,A,p])}const useFieldNames$1=(e={})=>{var t,o,r,i,n;const a=(0,import_react.useFieldSchema)(),l=((i=(r=(o=(t=a["x-component-props"])==null?void 0:t.field)==null?void 0:o.uiSchema)==null?void 0:r["x-component-props"])==null?void 0:i.fieldNames)||((n=a["x-component-props"])==null?void 0:n.fieldNames)||e.fieldNames;return x({label:"label",value:"value"},l)},SubFormContext=(0,import_react2.createContext)(null);SubFormContext.displayName="SubFormContext";const SubFormProvider=e=>{const t=(0,import_react2.useContext)(SubFormContext),{value:o,collection:r,fieldSchema:i,parent:n,skip:a}=e.value,l=(0,import_react2.useMemo)(()=>import_lodash.default.omitBy({value:o,collection:r,fieldSchema:i,skip:a,parent:n||(t!=null&&t.skip?t.parent:t)},import_lodash.default.isUndefined),[o,r,i,a,n,t]);return(0,import_jsx_runtime.jsx)(SubFormContext.Provider,{value:l,children:e.children})},useSubFormValue=()=>{const{value:e,collection:t,fieldSchema:o,parent:r}=(0,import_react2.useContext)(SubFormContext)||{};return{formValue:e,collection:t,fieldSchema:o,parent:r}},useColumnSettings=e=>{const{t}=(0,import_react_i18next.useTranslation)(),o=`nocobase_table_column_settings_${e}`,r=(0,import_react2.useCallback)(()=>{try{const a=localStorage.getItem(o);return a?JSON.parse(a):null}catch(a){return console.warn("Failed to parse table column settings from localStorage:",a),null}},[o]),i=(0,import_react2.useCallback)(a=>{try{const l=JSON.stringify(a);localStorage.setItem(o,l);const c=new CustomEvent("nocobase-table-settings-changed",{detail:{key:o,tableId:e,settings:a}});window.dispatchEvent(c)}catch(l){console.warn("Failed to save table column settings to localStorage:",l),import_antd.message.error(t("Failed to save table settings"))}},[o,e,t]),n=(0,import_react2.useCallback)(()=>{try{localStorage.removeItem(o);const a=new CustomEvent("nocobase-table-settings-changed",{detail:{key:o,tableId:e,settings:null}});window.dispatchEvent(a)}catch(a){console.warn("Failed to clear table column settings from localStorage:",a),import_antd.message.error(t("Failed to clear table settings"))}},[o,e,t]);return{getSettings:r,saveSettings:i,clearSettings:n}},useTableColumnIntegration=(e,t=!0)=>{const o=(0,import_react.useFieldSchema)(),r=(o==null?void 0:o["x-uid"])||"default",{getSettings:i}=useColumnSettings(r),[n,a]=(0,import_react2.useState)(0);(0,import_react2.useEffect)(()=>{const c=u=>{const{key:m,tableId:d}=u.detail;(m.includes(r)||d===r)&&a(p=>p+1)};return window.addEventListener("nocobase-table-settings-changed",c),()=>{window.removeEventListener("nocobase-table-settings-changed",c)}},[r]);const l=(0,import_react2.useMemo)(()=>i(),[i,n]);return{columns:(0,import_react2.useMemo)(()=>{if(!t||!l||l.length===0)return e;const c=new Map;l.forEach(h=>{c.set(h.key,h)});const u=e.map(h=>{const g=c.get(h.key);if(g){const _=h.columnHidden||!g.visible,f=g.width||h.width,v=g.fixed||h.fixed;return P(x({},h),{columnHidden:_,fixed:v,width:f,_orderIndex:g.order})}return h}),m=[],d=[];u.forEach(h=>{h._orderIndex!==void 0?m.push(h):d.push(h)}),m.sort((h,g)=>(h._orderIndex||0)-(g._orderIndex||0));const p=[...m,...d];return p.forEach(h=>{delete h._orderIndex}),p},[e,l])}},TableSkeleton=({rows:e=5,columns:t=6})=>{const{token:o}=useToken$1(),r=o.controlHeight*2.06,i=o.controlHeight*1.75,n=(0,import_react2.useMemo)(()=>import_css.css`
|
|
66
66
|
&.skeleton-wrapper {
|
|
67
67
|
width: 100%;
|
|
68
68
|
background: ${o.colorBgContainer};
|
|
@@ -1646,7 +1646,14 @@ https://requirejs.org/docs/errors.html#`+e);return i.requireType=e,i.requireModu
|
|
|
1646
1646
|
const targetValue = field.query('.min').value();
|
|
1647
1647
|
field.selfErrors =
|
|
1648
1648
|
!!targetValue && !!field.value && targetValue > field.value ? '${i18n.t("Max length must greater than min length")}' : ''
|
|
1649
|
-
}}}`},min:{type:"number",title:'{{ t("Min length") }}',minimum:0,"x-decorator":"FormItem","x-component":"InputNumber","x-component-props":{precision:0},"x-reactions":{dependencies:[".max"],fulfill:{state:{selfErrors:`{{!!$deps[0] && !!$self.value && $deps[0] < $self.value ? '${i18n.t("Min length must less than max length")}' : ''}}`}}}}})),k(this,"filterable",{operators:string})}schemaInitialize(t,{block:o}){["Table","Kanban"].includes(o)&&(t["x-component-props"]=t["x-component-props"]||{},t["x-component-props"].ellipsis=!0)}}class TimeFieldInterface extends CollectionFieldInterface{constructor(){super(...arguments),k(this,"name","time"),k(this,"type","object"),k(this,"group","datetime"),k(this,"order",4),k(this,"title",'{{t("Time")}}'),k(this,"sortable",!0),k(this,"default",{type:"time",uiSchema:{type:"string","x-component":"TimePicker"}}),k(this,"availableTypes",["time"]),k(this,"hasDefaultValue",!0),k(this,"properties",x(x({},defaultProps),timeProps)),k(this,"filterable",{operators:time}),k(this,"titleUsable",!0)}}class UpdatedAtFieldInterface extends CollectionFieldInterface{constructor(){super(...arguments),k(this,"name","updatedAt"),k(this,"type","object"),k(this,"group","systemInfo"),k(this,"order",2),k(this,"title",'{{t("Last updated at")}}'),k(this,"sortable",!0),k(this,"default",{type:"date",field:"updatedAt",uiSchema:{type:"datetime",title:'{{t("Last updated at")}}',"x-component":"DatePicker","x-component-props":{},"x-read-pretty":!0}}),k(this,"description",'{{t("Store the last update time of each record")}}'),k(this,"availableTypes",[]),k(this,"properties",x(x({},defaultProps),dateTimeProps)),k(this,"filterable",{operators:datetime}),k(this,"titleUsable",!0)}}class UpdatedByFieldInterface extends CollectionFieldInterface{constructor(){super(...arguments),k(this,"name","updatedBy"),k(this,"type","object"),k(this,"group","systemInfo"),k(this,"order",4),k(this,"title",'{{t("Last updated by")}}'),k(this,"isAssociation",!0),k(this,"default",{type:"belongsTo",target:"users",foreignKey:"updatedById",uiSchema:{type:"object",title:'{{t("Last updated by")}}',"x-component":"AssociationField","x-component-props":{fieldNames:{value:"id",label:"nickname"}},"x-read-pretty":!0}}),k(this,"availableTypes",["belongsTo"]),k(this,"properties",x({},defaultProps)),k(this,"filterable",{nested:!0,children:[]}),k(this,"description",'{{t("Store the last update user of each record")}}')}schemaInitialize(t,{block:o}){t.properties={viewer:(0,import_lodash.cloneDeep)(recordPickerViewer)},["Table","Kanban"].includes(o)&&(t["x-component-props"]=t["x-component-props"]||{},t["x-component-props"].ellipsis=!0)}}class UrlFieldInterface extends CollectionFieldInterface{constructor(){super(...arguments),k(this,"name","url"),k(this,"type","string"),k(this,"group","basic"),k(this,"order",5),k(this,"title",'{{t("URL")}}'),k(this,"default",{type:"text",uiSchema:{type:"string","x-component":"Input.URL"}}),k(this,"componentOptions",[{label:"URL",value:"Input.URL"},{label:"Preview",value:"Input.Preview"}]),k(this,"availableTypes",["string","text"]),k(this,"validationType","string"),k(this,"availableValidationOptions",["uri","pattern"]),k(this,"properties",x({},defaultProps)),k(this,"titleUsable",!0),k(this,"filterable",{operators:string})}schemaInitialize(t,{block:o}){}}class UUIDFieldInterface extends CollectionFieldInterface{constructor(){super(...arguments),k(this,"name","uuid"),k(this,"type","object"),k(this,"group","advanced"),k(this,"order",0),k(this,"title",'{{t("UUID")}}'),k(this,"hidden",!1),k(this,"sortable",!0),k(this,"default",{type:"uuid",uiSchema:{type:"string","x-component":"Input","x-validator":"uuid"}}),k(this,"availableTypes",["uid","uuid"]),k(this,"validationType","string"),k(this,"availableValidationOptions",["uuid","pattern"]),k(this,"properties",{"uiSchema.title":{type:"string",title:'{{t("Field display name")}}',required:!0,"x-decorator":"FormItem","x-component":"Input"},name:{type:"string",title:'{{t("Field name")}}',required:!0,"x-decorator":"FormItem","x-component":"Input","x-disabled":"{{ !createOnly }}",description:"{{t('Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.')}}"},autoFill,layout:{type:"void",title:'{{t("Index")}}',"x-component":"Space","x-decorator":"FormItem","x-decorator-props":{style:{marginBottom:"0px"}},properties:{primaryKey,unique}}}),k(this,"filterable",{operators:string}),k(this,"titleUsable",!0)}}class NanoidFieldInterface extends CollectionFieldInterface{constructor(){super(...arguments),k(this,"name","nanoid"),k(this,"type","object"),k(this,"group","advanced"),k(this,"order",0),k(this,"title",'{{t("Nano ID")}}'),k(this,"hidden",!1),k(this,"sortable",!0),k(this,"default",{type:"nanoid",uiSchema:{type:"string","x-component":"NanoIDInput"}}),k(this,"availableTypes",["nanoid"]),k(this,"properties",{"uiSchema.title":{type:"string",title:'{{t("Field display name")}}',required:!0,"x-decorator":"FormItem","x-component":"Input"},name:{type:"string",title:'{{t("Field name")}}',required:!0,"x-decorator":"FormItem","x-component":"Input","x-disabled":"{{ !createOnly }}",description:"{{t('Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.')}}"},customAlphabet:{type:"string",title:'{{t("Alphabet")}}',default:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz","x-decorator":"FormItem","x-component":"Input"},size:{type:"number",title:'{{t("Length")}}',default:21,"x-decorator":"FormItem","x-component":"InputNumber"},autoFill,layout:{type:"void",title:'{{t("Index")}}',"x-component":"Space","x-decorator":"FormItem","x-decorator-props":{style:{marginBottom:"0px"}},properties:{primaryKey,unique}}}),k(this,"filterable",{operators:string}),k(this,"titleUsable",!0)}}class UnixTimestampFieldInterface extends CollectionFieldInterface{constructor(){super(...arguments),k(this,"name","unixTimestamp"),k(this,"type","object"),k(this,"group","datetime"),k(this,"order",4),k(this,"title",'{{t("Unix Timestamp")}}'),k(this,"sortable",!0),k(this,"default",{type:"unixTimestamp",accuracy:"second",timezone:!0,defaultToCurrentTime:!1,onUpdateToCurrentTime:!1,uiSchema:{type:"number","x-component":"UnixTimestamp","x-component-props":{showTime:!0}}}),k(this,"availableTypes",["unixTimestamp"]),k(this,"hasDefaultValue",!1),k(this,"validationType","date"),k(this,"availableValidationOptions",["timestamp"]),k(this,"properties",P(x(x({},defaultProps),dateTimeProps),{accuracy:{type:"string",title:'{{t("Accuracy")}}',"x-component":"Radio.Group","x-decorator":"FormItem",default:"second",enum:[{value:"millisecond",label:'{{t("Millisecond")}}'},{value:"second",label:'{{t("Second")}}'}]},defaultToCurrentTime:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":'{{t("Default value to current time")}}'},onUpdateToCurrentTime:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":'{{t("Automatically update timestamp on update")}}'}})),k(this,"filterable",{operators:datetime}),k(this,"titleUsable",!0)}}class DateFieldInterface extends CollectionFieldInterface{constructor(){super(...arguments),k(this,"name","date"),k(this,"type","object"),k(this,"group","datetime"),k(this,"order",3),k(this,"title",'{{t("DateOnly")}}'),k(this,"sortable",!0),k(this,"default",{type:"dateOnly",uiSchema:{type:"string","x-component":"DatePicker","x-component-props":{dateOnly:!0,showTime:!1}}}),k(this,"availableTypes",["dateOnly"]),k(this,"hasDefaultValue",!0),k(this,"validationType","date"),k(this,"properties",P(x(x({},defaultProps),dateTimeProps),{"uiSchema.x-component-props.showTime":{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-visible":!1}})),k(this,"filterable",{operators:datetime}),k(this,"titleUsable",!0)}}class DatetimeNoTzFieldInterface extends CollectionFieldInterface{constructor(){super(...arguments),k(this,"name","datetimeNoTz"),k(this,"type","object"),k(this,"group","datetime"),k(this,"order",2),k(this,"title",'{{t("Datetime (without time zone)")}}'),k(this,"sortable",!0),k(this,"default",{type:"datetimeNoTz",defaultToCurrentTime:!1,onUpdateToCurrentTime:!1,timezone:!1,uiSchema:{type:"string","x-component":"DatePicker","x-component-props":{showTime:!1,utc:!1}}}),k(this,"availableTypes",["string","datetimeNoTz"]),k(this,"hasDefaultValue",!0),k(this,"validationType","date"),k(this,"properties",P(x(x({},defaultProps),dateTimeProps),{defaultToCurrentTime:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":'{{t("Default value to current server time")}}'},onUpdateToCurrentTime:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":'{{t("Automatically update timestamp to the current server time on update")}}'},"uiSchema.x-component-props.gmt":{type:"boolean",title:'{{t("GMT")}}',"x-hidden":!0,"x-component":"Checkbox","x-content":'{{t("Use the same time zone (GMT) for all users")}}',"x-decorator":"FormItem",default:!1}})),k(this,"filterable",{operators:datetime}),k(this,"titleUsable",!0)}}class InheritanceCollectionMixin extends Collection{constructor(){super(...arguments),k(this,"parentCollectionsName"),k(this,"parentCollections"),k(this,"childrenCollections",{}),k(this,"childrenCollectionsName",{}),k(this,"inheritsFields"),k(this,"currentFields"),k(this,"allFields"),k(this,"parentCollectionFields",{}),k(this,"allCollectionsInheritChain"),k(this,"inheritCollectionsChain"),k(this,"inheritChain"),k(this,"foreignKeyFields")}getParentCollectionsName(){if(this.parentCollectionsName)return this.parentCollectionsName.slice();const t=[],o=r=>{const i=this.collectionManager.getCollection(r);if(i){const{inherits:n}=i;if(n)for(let a=0;a<n.length;a++){const l=n[a];t.push(l),o(l)}}return(0,import_lodash.uniq)(t)};return this.parentCollectionsName=o(this.name),this.parentCollectionsName}getParentCollections(){return this.parentCollections?this.parentCollections.slice():(this.parentCollections=this.getParentCollectionsName().map(t=>this.collectionManager.getCollection(t)),this.parentCollections)}getChildrenCollectionsName(t=!1){const o=t?"supportView":"notSupportView";if(this.childrenCollectionsName[o])return this.childrenCollectionsName[o].slice();const r=[],i=this.collectionManager.getCollections(),n=a=>(i.filter(l=>{var c;return(c=l.inherits)==null?void 0:c.includes(a)}).forEach(l=>{const c=l.name;return r.push(c),n(c)}),t&&i.filter(l=>{var c;return((c=l.sources)==null?void 0:c.length)===1&&(l==null?void 0:l.sources[0])===a}).forEach(l=>{const c=l.name;return r.push(l.name),n(c)}),(0,import_lodash.uniq)(r));return this.childrenCollectionsName[o]=n(this.name),this.childrenCollectionsName[o]}getChildrenCollections(t=!1){const o=t?"supportView":"notSupportView";return this.childrenCollections[o]?this.childrenCollections[o].slice():(this.childrenCollections[o]=this.getChildrenCollectionsName(t).map(r=>this.collectionManager.getCollection(r)),this.childrenCollections[o])}getInheritedFields(){if(this.inheritsFields)return this.inheritsFields.slice();const t=this.getParentCollectionsName();return this.inheritsFields=t.map(o=>{var r;return(r=this.collectionManager.getCollection(o))==null?void 0:r.getFields()}).flat().filter(Boolean),this.inheritsFields}getFieldsMap(){return this.fieldsMap?this.fieldsMap:(this.fieldsMap=this.getAllFields().reduce((t,o)=>(t[o.name]=o,t),{}),this.fieldsMap)}getCurrentFields(t){return super.getFields(t)}getParentCollectionFields(t){if(this.parentCollectionFields||(this.parentCollectionFields={}),this.parentCollectionFields[t])return this.parentCollectionFields[t];const o=this.getCurrentFields(),r=this.getParentCollectionsName(),i=this.collectionManager.getCollection(t).getCurrentFields(),n=r.indexOf(t);let a=o;return n>0&&(r.splice(n),r.forEach(l=>{const c=this.collectionManager.getCollection(l);a=a.concat(c.getCurrentFields())})),this.parentCollectionFields[t]=i.filter(l=>{const c=a.find(u=>u.name===l.name);return(c==null?void 0:c.collectionName)!==this.name}),this.parentCollectionFields[t]}getAllCollectionsInheritChain(){if(this.allCollectionsInheritChain)return this.allCollectionsInheritChain.slice();const t=[this.name],o=r=>{const i=this.collectionManager.getCollection(r);if(i){const{inherits:n}=i,a=i.getChildrenCollectionsName();if(n)for(let l=0;l<n.length;l++){const c=n[l];t.includes(c)||(t.push(c),o(c))}if(a)for(let l=0;l<a.length;l++){const c=this.collectionManager.getCollection(a[l]).name;t.includes(c)||(t.push(c),o(c))}}return t};return this.allCollectionsInheritChain=o(this.name),this.allCollectionsInheritChain||[]}getInheritCollectionsChain(){if(this.inheritCollectionsChain)return this.inheritCollectionsChain.slice();const t=[this.name],o=r=>{const i=this.collectionManager.getCollection(r);if(i){const{inherits:n}=i;if(n)for(let a=0;a<n.length;a++){const l=n[a];t.includes(l)||(t.push(l),o(l))}}return t};return this.inheritCollectionsChain=o(this.name),this.inheritCollectionsChain}getInheritChain(){if(this.inheritChain)return this.inheritChain.slice();const t=this.getInheritCollectionsChain(),o=this.getChildrenCollectionsName(),r=[...t],i=n=>{for(const a of n)if(!r.includes(a)){r.push(a);const l=this.collectionManager.getCollection(a);if(l){const c=l.getChildrenCollectionsName();i(c)}}};return i(o),this.inheritChain=r,this.inheritChain}getAllFields(t){if(this.allFields)return this.allFields.slice();const o=this.getCurrentFields(),r=this.getInheritedFields(),i=(0,import_lodash.unionBy)((o==null?void 0:o.concat(r))||[],"name");return this.allFields=i,t?(0,import_lodash.filter)(i,t):i}getForeignKeyFields(){if(this.foreignKeyFields)return this.foreignKeyFields.slice();const t=this.getCurrentFields(),o=this.getInheritedFields();return(0,import_lodash.unionBy)((t==null?void 0:t.concat(o))||[],"name")}}class GeneralCollectionTemplate extends CollectionTemplate{constructor(){super(...arguments),k(this,"name","general"),k(this,"title",'{{t("General collection")}}'),k(this,"order",1),k(this,"color","blue"),k(this,"default",{fields:[]}),k(this,"configurableProperties",getConfigurableProperties("title","name","inherits","category","description","simplePaginate","presetFields"))}}class TreeCollectionTemplate extends CollectionTemplate{constructor(){super(...arguments),k(this,"name","tree"),k(this,"title",'{{t("Tree collection")}}'),k(this,"order",3),k(this,"color","blue"),k(this,"default",{tree:"adjacencyList",fields:[{interface:"integer",name:"parentId",type:"bigInt",isForeignKey:!0,uiSchema:{type:"number",title:'{{t("Parent ID")}}',"x-component":"InputNumber","x-read-pretty":!0}},{interface:"m2o",type:"belongsTo",name:"parent",foreignKey:"parentId",treeParent:!0,onDelete:"CASCADE",uiSchema:{title:'{{t("Parent")}}',"x-component":"AssociationField","x-component-props":{multiple:!1,fieldNames:{label:"id",value:"id"}}}},{interface:"o2m",type:"hasMany",name:"children",foreignKey:"parentId",treeChildren:!0,onDelete:"CASCADE",uiSchema:{title:'{{t("Children")}}',"x-component":"AssociationField","x-component-props":{multiple:!0,fieldNames:{label:"id",value:"id"}}}}]}),k(this,"presetFieldsDisabledIncludes",["id"]),k(this,"events",{beforeSubmit(t){Array.isArray(t==null?void 0:t.fields)&&(t==null||t.fields.map(o=>{!o.target&&["belongsToMany","belongsTo","hasMany","hasOne"].includes(o.type)&&(o.target=t.name)}))}}),k(this,"configurableProperties",getConfigurableProperties("title","name","inherits","category","description","presetFields"))}}class ViewCollectionTemplate extends CollectionTemplate{constructor(){super(...arguments),k(this,"name","view"),k(this,"title",'{{t("Connect to database view")}}'),k(this,"order",4),k(this,"color","yellow"),k(this,"default",{fields:[]}),k(this,"divider",!0),k(this,"configurableProperties",x({title:{type:"string",title:'{{ t("Collection display name") }}',required:!0,"x-decorator":"FormItem","x-component":"Input"},databaseView:{title:'{{t("Connect to database view")}}',type:"single",required:!0,"x-decorator":"FormItem","x-component":"Select","x-reactions":["{{useAsyncDataSource(loadDBViews)}}"],"x-disabled":"{{ !createOnly }}","x-visible":"{{!createMainOnly}}"},name:{type:"string",title:'{{t("Collection name")}}',required:!0,"x-disabled":"{{ !createOnly }}","x-decorator":"FormItem","x-component":"Input","x-validator":"uid",description:"{{t('Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.')}}","x-reactions":{dependencies:["databaseView"],when:"{{isPG}}",fulfill:{state:{initialValue:"{{$deps[0]&&$deps[0].match(/^([^_]+)_(.*)$/)?.[2]}}"}},otherwise:{state:{value:null}}}},schema:{type:"string","x-hidden":!0,"x-reactions":{dependencies:["databaseView"],when:"{{isPG}}",fulfill:{state:{value:"{{$deps[0] && $deps[0].split('@')?.[0]}}"}},otherwise:{state:{value:null}}}},viewName:{type:"string","x-hidden":!0,"x-reactions":{dependencies:["databaseView"],when:"{{isPG}}",fulfill:{state:{value:"{{$deps[0] && $deps[0].split('@')?.[1]}}"}},otherwise:{state:{value:"{{$deps[0] || null}}"}}}},writableView:{type:"boolean","x-content":'{{t("Allow add new, update and delete actions")}}',"x-decorator":"FormItem","x-component":"Checkbox",default:!1,"x-visible":"{{!createMainOnly}}"},sources:{type:"array",title:'{{ t("Source collections") }}',"x-decorator":"FormItem","x-component":"Select","x-component-props":{multiple:!0},"x-reactions":["{{useAsyncDataSource(loadCollections)}}"],"x-disabled":!0,"x-visible":"{{!createMainOnly}}"},fields:{type:"array","x-component":PreviewFields,"x-hidden":"{{ !createOnly }}","x-decorator":"FormItem","x-reactions":{dependencies:["name"],fulfill:{schema:{"x-component-props":"{{$form.values}}"}}},description:'{{t("Fields can only be used correctly if they are defined with an interface.")}}'},preview:{type:"void","x-visible":"{{ createOnly }}","x-component":PreviewTable$1,"x-reactions":{dependencies:["name","fields"],fulfill:{schema:{"x-component-props":"{{$form.values}}"}}}},filterTargetKey:{title:'{{ t("Record unique key")}}',type:"single",description:'{{t( "If a collection lacks a primary key, you must configure a unique record key to locate row records within a block, failure to configure this will prevent the creation of data blocks for the collection.")}}',"x-decorator":"FormItem","x-component":"Select","x-component-props":{multiple:!0},"x-reactions":["{{useAsyncDataSource(loadFilterTargetKeys)}}"]}},getConfigurableProperties("category","description")))}}class SqlCollectionTemplate extends CollectionTemplate{constructor(){super(...arguments),k(this,"name","sql"),k(this,"title",'{{t("SQL collection")}}'),k(this,"order",4),k(this,"color","yellow"),k(this,"default",{fields:[]}),k(this,"configurableProperties",x({title:{type:"string",title:'{{ t("Collection display name") }}',required:!0,"x-decorator":"FormItem","x-component":"Input"},name:{type:"string",title:'{{t("Collection name")}}',required:!0,"x-disabled":"{{ !createOnly }}","x-decorator":"FormItem","x-component":"Input","x-validator":"uid",description:"{{t('Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.')}}"},config:{type:"void","x-decorator":SQLRequestProvider,properties:{sql:{type:"string",title:'{{t("SQL")}}',"x-decorator":"FormItem","x-component":SQLInput,required:!0,"x-validator":(t,o,{form:r})=>r.query("sql").take().componentProps.disabled?"":i18n.t("Please confirm the SQL statement first")},sources:{type:"array",title:'{{t("Source collections")}}',"x-decorator":"FormItem","x-component":"Select","x-component-props":{multiple:!0},"x-reactions":["{{useAsyncDataSource(loadCollections)}}"]},fields:{type:"array",title:'{{t("Fields")}}',"x-decorator":"FormItem","x-component":FieldsConfigure,required:!0},table:{type:"void",title:'{{t("Preview")}}',"x-decorator":"FormItem","x-component":PreviewTable}}},filterTargetKey:{title:'{{ t("Record unique key")}}',type:"single",description:'{{t( "If a collection lacks a primary key, you must configure a unique record key to locate row records within a block, failure to configure this will prevent the creation of data blocks for the collection.")}}',"x-decorator":"FormItem","x-component":"Select","x-component-props":{multiple:!0},"x-reactions":["{{useAsyncDataSource(loadFilterTargetKeys)}}"]}},getConfigurableProperties("category","description")))}}class MainDataSource extends DataSource{getDataSource(){return q(this,null,function*(){var t;const o=yield this.app.apiClient.request({resource:"collections",action:"listMeta"});return{collections:((t=o==null?void 0:o.data)==null?void 0:t.data)||[]}})}}class CollectionPlugin extends Plugin{load(){return q(this,null,function*(){this.dataSourceManager.addCollectionMixins([InheritanceCollectionMixin]),this.addFieldInterfaces(),this.addCollectionTemplates(),this.addFieldInterfaces(),this.addFieldInterfaceGroups(),this.addMainDataSource()})}addMainDataSource(){var t,o;((o=(t=this.options)==null?void 0:t.config)==null?void 0:o.enableRemoteDataSource)!==!1&&this.dataSourceManager.addDataSource(MainDataSource,{key:DEFAULT_DATA_SOURCE_KEY,displayName:DEFAULT_DATA_SOURCE_TITLE})}addFieldInterfaceGroups(){this.dataSourceManager.addFieldInterfaceGroups({basic:{label:'{{t("Basic")}}'},choices:{label:'{{t("Choices")}}'},media:{label:'{{t("Media")}}'},datetime:{label:'{{t("Date & Time")}}'},relation:{label:'{{t("Relation")}}'},advanced:{label:'{{t("Advanced type")}}'},systemInfo:{label:'{{t("System info")}}'},others:{label:'{{t("Others")}}'}})}addFieldInterfaces(){this.dataSourceManager.addFieldInterfaces([CheckboxFieldInterface,CheckboxGroupFieldInterface,CollectionSelectFieldInterface,ColorFieldInterface,CreatedAtFieldInterface,CreatedByFieldInterface,DatetimeFieldInterface,EmailFieldInterface,IconFieldInterface,IdFieldInterface,InputFieldInterface,IntegerFieldInterface,JsonFieldInterface,LinkToFieldInterface,M2MFieldInterface,M2OFieldInterface,MarkdownFieldInterface,MultipleSelectFieldInterface,NumberFieldInterface,O2MFieldInterface,O2OFieldInterface,OHOFieldInterface,OBOFieldInterface,PasswordFieldInterface,PercentFieldInterface,PhoneFieldInterface,RadioGroupFieldInterface,RichTextFieldInterface,SelectFieldInterface,SubTableFieldInterface,TableoidFieldInterface,TextareaFieldInterface,TimeFieldInterface,UpdatedAtFieldInterface,UpdatedByFieldInterface,UrlFieldInterface,UUIDFieldInterface,NanoidFieldInterface,UnixTimestampFieldInterface,DateFieldInterface,DatetimeNoTzFieldInterface])}addCollectionTemplates(){this.dataSourceManager.addCollectionTemplates([GeneralCollectionTemplate,SqlCollectionTemplate,TreeCollectionTemplate,ViewCollectionTemplate])}}function parseCollectionName(e){var t;if(!e)return[];const o=e.split(":"),r=o.pop();return[(t=o[0])!=null?t:"main",r]}function joinCollectionName(e,t){return!e||e==="main"?t:`${e}:${t}`}const useSourceId=()=>{const{sourceId:e,association:t}=useDataBlockProps()||{},o=useSourceKey(t),r=useDataBlockParentRecord({association:t});return e||(r==null?void 0:r[o])},BlockResourceContext=(0,import_react2.createContext)(null);BlockResourceContext.displayName="BlockResourceContext";const BlockAssociationContext=(0,import_react2.createContext)(null);BlockAssociationContext.displayName="BlockAssociationContext";const BlockRequestContext_deprecated=(0,import_react2.createContext)({});BlockRequestContext_deprecated.displayName="BlockRequestContext_deprecated";const useBlockResource=()=>{const e=useDataBlockResource();return(0,import_react2.useContext)(BlockResourceContext)||e},MaybeCollectionProvider=e=>{const{collection:t}=e;return t?(0,import_jsx_runtime.jsx)(CollectionProvider_deprecated,{collection:t,children:(0,import_jsx_runtime.jsx)(ACLCollectionProvider,{children:e.children})}):e.children},BlockRequestProvider_deprecated=e=>{const t=(0,import_react.useField)(),o=useDataBlockResource(),r=useDataBlockRequest(),i=useCollectionRecord(),n=useCollectionParentRecord(),a=useBlockRequestContext(),l=(0,import_react2.useMemo)(()=>({block:e.block,props:e,field:t,service:r,resource:o,__parent:a,updateAssociationValues:(e==null?void 0:e.updateAssociationValues)||[]}),[a,t,e,o,r]);return(0,import_jsx_runtime.jsx)(BlockRequestContext_deprecated.Provider,{value:l,children:(0,import_jsx_runtime.jsx)(RecordProvider,{isNew:i==null?void 0:i.isNew,record:i==null?void 0:i.data,parent:n==null?void 0:n.data,children:e.children})})},useBlockRequestContext=()=>(0,import_react2.useContext)(BlockRequestContext_deprecated),RenderChildrenWithAssociationFilter=e=>{var t;const o=(0,import_react.useFieldSchema)(),{findComponent:r}=useDesignable(),i=(0,import_react.useField)(),n=r((t=i.component)==null?void 0:t[0])||import_react2.default.Fragment;return o.reduceProperties((a,l)=>l["x-component"]==="AssociationFilter"?l:a,null)?(0,import_jsx_runtime.jsx)(n,P(x({},i.componentProps),{children:(0,import_jsx_runtime.jsxs)(import_antd.Row,{style:{height:"100%"},gutter:16,wrap:!1,children:[(0,import_jsx_runtime.jsx)(import_antd.Col,{style:x({width:200,flex:"0 0 auto"},e.associationFilterStyle||{}),children:(0,import_jsx_runtime.jsx)(import_react.RecursionField,{schema:o,onlyRenderProperties:!0,filterProperties:a=>a["x-component"]==="AssociationFilter"})}),(0,import_jsx_runtime.jsx)(import_antd.Col,{style:{flex:"1 1 auto",minWidth:0},children:(0,import_jsx_runtime.jsx)("div",{style:{height:"100%",display:"flex",flexDirection:"column"},children:(0,import_jsx_runtime.jsx)(import_react.RecursionField,{schema:o,onlyRenderProperties:!0,filterProperties:a=>a["x-component"]!=="AssociationFilter"})})})]})})):e.children},BlockContext=(0,import_react2.createContext)(null);BlockContext.displayName="BlockContext";const useBlockContext=()=>(0,import_react2.useContext)(BlockContext),useCompatDataBlockParentRecord=e=>(0,import_react.useFieldSchema)()["x-use-decorator-props"]?e.parentRecord:useDataBlockParentRecord(e),BlockProvider=e=>{const{name:t,dataSource:o,useParams:r,parentRecord:i}=e,n=useCompatDataBlockParentRecord(e),a=useRefreshComponent(),l=(0,import_ahooks.useUpdate)(),c=(0,import_react2.useCallback)(()=>{l(),a==null||a()},[l,a]),u=r==null?void 0:r(),{getAssociationAppends:m}=useAssociationNames(o),{appends:d,updateAssociationValues:p}=m(),h=(0,import_react2.useMemo)(()=>{var _;return(_=e.params)!=null&&_.appends?x(x({},e.params),u):x(P(x({},e.params),{appends:d}),u)},[d,u,e.params]),g=(0,import_react2.useMemo)(()=>({name:t}),[t]);return(0,import_jsx_runtime.jsx)(BlockContext.Provider,{value:g,children:(0,import_jsx_runtime.jsx)(DataBlockProvider,P(x({},e),{params:h,parentRecord:i||n,children:(0,import_jsx_runtime.jsx)(BlockRequestProvider_deprecated,P(x({},e),{updateAssociationValues:p,params:h,children:(0,import_jsx_runtime.jsx)(RefreshComponentProvider,{refresh:c,children:e.children})}))}))})},useBlockAssociationContext=()=>{const{association:e}=useDataBlockProps();return(0,import_react2.useContext)(BlockAssociationContext)||e},useFilterByTk=e=>{const{resource:t,__parent:o}=useBlockRequestContext(),r=useRecordIndex(),i=useCollectionRecordData(),n=useCollection_deprecated(),a=useBlockAssociationContext(),l=(e==null?void 0:e.association)||a,c=(0,import_react2.useContext)(WithoutTableFieldResource),u=useCollectionManager();if(!c&&(t instanceof TableFieldResource||(o==null?void 0:o.block)==="TableField"))return r;if(l){const m=u.getCollectionField(l);return i==null?void 0:i[m.targetKey||m.sourceKey||"id"]}if((0,import_lodash.isArray)(n.filterTargetKey)){const m={};for(const d of n.filterTargetKey)m[d]=i==null?void 0:i[d];return m}else return i==null?void 0:i[n.filterTargetKey||"id"]},useSourceIdFromRecord=()=>{const e=useRecord(),{getCollectionField:t}=useCollectionManager_deprecated(),o=useBlockAssociationContext();if(o){const r=t(o);return e==null?void 0:e[r.sourceKey||"id"]}},useSourceIdFromParentRecord=()=>useSourceId(),useParamsFromRecord=e=>{var t,o;const r=useFilterByTk(e),i=useRecord(),{fields:n}=useCollection_deprecated(),a=(0,import_react.useFieldSchema)(),{getCollectionJoinField:l}=useCollectionManager_deprecated(),c=l(((t=a==null?void 0:a["x-decorator-props"])==null?void 0:t.resource)||((o=a==null?void 0:a["x-decorator-props"])==null?void 0:o.association)),u=n.filter(p=>["boolean","date","integer","radio","sort","string","time","uid","uuid"].includes(p.type)).map(p=>p.name),m=Object.keys(i).filter(p=>u.includes(p)).reduce((p,h)=>(p[h]=i[h],p),{}),d={filterByTk:r};return i.__collection&&c&&!["oho","m2o","obo"].includes(c.interface)&&(d.targetCollection=i.__collection),!r&&Object.keys(m).length>0&&(d.filter=m),d},RecordLink=e=>{const t=(0,import_react.useField)(),o=useRecord(),r=e,{title:i,to:n}=r,a=W(r,["title","to"]),l=(0,import_template.default)(n||"");return(0,import_jsx_runtime.jsx)(import_react_router_dom.Link,P(x({},a),{to:l({record:o||{}}),children:t.title}))},ACLContext=(0,import_react2.createContext)({});ACLContext.displayName="ACLContext";const ACLProvider=e=>(0,import_jsx_runtime.jsx)(SchemaComponentOptions,{components:{ACLCollectionFieldProvider,ACLActionProvider,ACLMenuItemProvider,ACLCollectionProvider},children:e.children}),ACLRolesCheckProvider=e=>{const{setDesignable:t}=useDesignable(),{render:o}=useAppSpin(),r=useAPIClient(),i=useApp(),n=useRequest({url:"roles:check"},{onSuccess(a){var l,c,u,m;(l=a==null?void 0:a.data)!=null&&l.snippets.includes("ui.*")||t(!1),((c=a==null?void 0:a.data)==null?void 0:c.role)!==r.auth.role&&r.auth.setRole((u=a==null?void 0:a.data)==null?void 0:u.role),i.pluginSettingsManager.setAclSnippets(((m=a==null?void 0:a.data)==null?void 0:m.snippets)||[])}});return n.loading?o():(0,import_jsx_runtime.jsx)(ACLContext.Provider,{value:n,children:e.children})},useRoleRecheck=()=>{const e=(0,import_react2.useContext)(ACLContext),{allowAll:t}=useACLRoleContext();return()=>{t||e.refresh()}},useCurrentRoleMode=()=>{var e,t;const o=(0,import_react2.useContext)(ACLContext);return(t=(e=o==null?void 0:o.data)==null?void 0:e.data)==null?void 0:t.roleMode},useACLContext=()=>(0,import_react2.useContext)(ACLContext),ACLActionParamsContext=(0,import_react2.createContext)({});ACLActionParamsContext.displayName="ACLActionParamsContext";const ACLCustomContext=(0,import_react2.createContext)({});ACLCustomContext.displayName="ACLCustomContext";const useACLCustomContext=()=>(0,import_react2.useContext)(ACLCustomContext),useACLRolesCheck=()=>{var e,t,o;const r=(0,import_react2.useContext)(ACLContext),i=useDataSourceKey(),{dataSources:n}=((e=r==null?void 0:r.data)==null?void 0:e.meta)||{},a=x(x({},(t=r==null?void 0:r.data)==null?void 0:t.data),(0,import_lodash.omit)(n==null?void 0:n[i],"snippets")),l=(0,import_react2.useCallback)(c=>{var u;const m=c.split(":").pop();return((u=a==null?void 0:a.actionAlias)==null?void 0:u[m])||m},[a==null?void 0:a.actionAlias]);return{data:a,getActionAlias:l,inResources:(0,import_react2.useCallback)(c=>{var u,m;return(m=(u=a==null?void 0:a.resources)==null?void 0:u.includes)==null?void 0:m.call(u,c)},[a==null?void 0:a.resources]),getResourceActionParams:(0,import_react2.useCallback)(c=>{var u,m;const[d]=c.split(":"),p=l(c);return((u=a==null?void 0:a.actions)==null?void 0:u[`${d}:${p}`])||((m=a==null?void 0:a.actions)==null?void 0:m[c])},[a==null?void 0:a.actions,l]),getStrategyActionParams:(0,import_react2.useCallback)(c=>{var u,m;const d=l(c);return(m=(u=a==null?void 0:a.strategy)==null?void 0:u.actions)!=null&&m.find(p=>{const[h]=p.split(":");return h===d})?{}:null},[(o=a==null?void 0:a.strategy)==null?void 0:o.actions,l])}},getIgnoreScope=(e={})=>{var t;const{schema:o,recordPkValue:r}=e;let i=!1;return e.ignoreScope&&(i=!0),o!=null&&o["x-acl-ignore-scope"]&&(i=!0),(t=o==null?void 0:o["x-acl-action-props"])!=null&&t.skipScopeCheck&&(i=!0),r||(i=!0),i},useAllowedActions=()=>{var e,t,o,r;const i=useResourceActionContext(),n=useDataBlockRequest();return((t=(e=i==null?void 0:i.data)==null?void 0:e.meta)==null?void 0:t.allowedActions)||((r=(o=n==null?void 0:n.data)==null?void 0:o.meta)==null?void 0:r.allowedActions)},useResourceName=()=>{var e;const t=useResourceActionContext(),o=useDataBlockProps();return(o==null?void 0:o.resource)||(o==null?void 0:o.association)||(o==null?void 0:o.collection)||((e=t==null?void 0:t.defaultRequest)==null?void 0:e.resource)};function useACLRoleContext(){const{data:e,getActionAlias:t,inResources:o,getResourceActionParams:r,getStrategyActionParams:i}=useACLRolesCheck(),n=useAllowedActions(),a=useCollectionManager(),l=(0,import_react2.useCallback)((c,u)=>{const m=t(c);return Array.isArray(n==null?void 0:n[m])?n[m].includes(u):null},[n,t]);return P(x({},e),{snippets:(e==null?void 0:e.snippets)||[],parseAction:(0,import_react2.useCallback)((c,u={})=>{var m;const[d,p]=(c==null?void 0:c.split(":"))||[],h=(d==null?void 0:d.includes("."))&&((m=a.getCollectionField(d))==null?void 0:m.target);if(!getIgnoreScope(u)){const g=l(p,u.recordPkValue);if(g!==null)return g?{}:null}return e!=null&&e.allowAll?{}:o(h)?r(`${h}:${p}`):o(d)?r(c):i(c)},[a,e==null?void 0:e.allowAll,r,i,o,l])})}function useUIConfigurationPermissions(){const{allowAll:e,snippets:t}=useACLRoleContext();return{allowConfigUI:e||t.includes("ui.*")}}const ACLCollectionProvider=e=>{var t,o;const{allowAll:r,parseAction:i}=useACLRoleContext(),{allowAll:n}=useACLCustomContext(),a=useApp(),l=(0,import_react.useFieldSchema)();let c=(l==null?void 0:l["x-acl-action"])||e.actionPath;const u=((t=l==null?void 0:l["x-decorator-props"])==null?void 0:t.association)||((o=l==null?void 0:l["x-decorator-props"])==null?void 0:o.collection);c==="undefined:list"&&u&&u!=="undefined"&&(c=`${u}:list`);const m=(0,import_react2.useMemo)(()=>c?i(c,{schema:l}):null,[i,c,l]);if(r||a.disableAcl||n)return e.children;if(!c)return(0,import_jsx_runtime.jsx)(ACLActionParamsContext.Provider,{value:{},children:e.children});if(!m)return(0,import_jsx_runtime.jsx)(CollectionNotAllowViewPlaceholder,{});const[d,p]=c.split(":");return m.actionName=p,(0,import_jsx_runtime.jsx)(ACLActionParamsContext.Provider,{value:m,children:e.children})},useACLActionParamsContext=()=>(0,import_react2.useContext)(ACLActionParamsContext),useRecordPkValue=()=>{const e=useCollection(),t=useCollectionRecordData();if(!e)return;const o=e.getPrimaryKey();return t==null?void 0:t[o]},ACLActionProvider=e=>{const t=useCollection(),o=useRecordPkValue(),r=useResourceName(),{parseAction:i,uiButtonSchemasBlacklist:n}=useACLRoleContext(),a=(0,import_react.useFieldSchema)(),l=a["x-uid"];let c=a["x-acl-action"];const u=["create","update","destroy","importXlsx","export"],m=["create","update","destroy","importXlsx","bulkDestroy","bulkUpdate"];!c&&r&&a["x-action"]&&u.includes(a["x-action"])&&(c=`${r}:${a["x-action"]}`),c&&!(c!=null&&c.includes(":"))&&(c=`${r}:${c}`);const d=(0,import_react2.useMemo)(()=>c&&i(c,{schema:a,recordPkValue:o}),[i,c,a,o]);return n!=null&&n.includes(l)?(0,import_jsx_runtime.jsx)(ACLActionParamsContext.Provider,{value:!1,children:e.children}):c?r?d?m.includes(c)||m.includes(c==null?void 0:c.split(":")[1])?t&&t.template!=="view"||t!=null&&t.writableView?(0,import_jsx_runtime.jsx)(ACLActionParamsContext.Provider,{value:d,children:e.children}):(0,import_jsx_runtime.jsx)(ACLActionParamsContext.Provider,{value:!1,children:e.children}):(0,import_jsx_runtime.jsx)(ACLActionParamsContext.Provider,{value:d,children:e.children}):(0,import_jsx_runtime.jsx)(ACLActionParamsContext.Provider,{value:d,children:e.children}):(0,import_jsx_runtime.jsx)(import_jsx_runtime.Fragment,{children:e.children}):(0,import_jsx_runtime.jsx)(import_jsx_runtime.Fragment,{children:e.children})},useACLFieldWhitelist=()=>{const e=(0,import_react2.useContext)(ACLActionParamsContext),t=(0,import_react2.useMemo)(()=>[].concat((e==null?void 0:e.whitelist)||[]).concat((e==null?void 0:e.fields)||[]).concat((e==null?void 0:e.appends)||[]),[e==null?void 0:e.whitelist,e==null?void 0:e.fields,e==null?void 0:e.appends]);return{whitelist:t,schemaInWhitelist:(0,import_react2.useCallback)((o,r)=>{if(r||t.length===0||!o||!o["x-collection-field"])return!0;const[i,n]=o["x-collection-field"].split("."),[a]=o.name.split(".");return t==null?void 0:t.includes(a||n||i)},[t])}},ACLCollectionFieldProvider=e=>{const t=(0,import_react.useFieldSchema)(),o=(0,import_react.useField)(),{allowAll:r}=useACLRoleContext(),{whitelist:i}=useACLFieldWhitelist(),[n]=t.name.split("."),a=!t["x-acl-ignore"]&&i.length>0&&t!=null&&t["x-collection-field"]?i.includes(n):!0;return(0,import_react2.useEffect)(()=>{a||(o.required=!1,o.display="hidden")},[a,o]),r?(0,import_jsx_runtime.jsx)(import_jsx_runtime.Fragment,{children:e.children}):t["x-collection-field"]?a?(0,import_jsx_runtime.jsx)(import_jsx_runtime.Fragment,{children:e.children}):null:(0,import_jsx_runtime.jsx)(import_jsx_runtime.Fragment,{children:e.children})},ACLMenuItemProvider=e=>(0,import_jsx_runtime.jsx)(import_jsx_runtime.Fragment,{children:e.children}),useAdminSchemaUid=()=>"nocobase-admin-menu",useViewportMeta=()=>{const e=(0,import_react2.useRef)("initial-scale=0.1"),t=(0,import_react2.useRef)();return(0,import_react2.useEffect)(()=>{let o=document.querySelector('meta[name="viewport"]');o?e.current=o.content:(o=document.createElement("meta"),o.name="viewport"),o&&(o.content="width=device-width, initial-scale=1, user-scalable=0",t.current=o)},[]),{metaRef:t,restore:()=>{t.current&&(t.current.content=e.current)}}};function useViewport(){const{metaRef:e,restore:t}=useViewportMeta();(0,import_react2.useEffect)(()=>{if(e.current)return document.head.insertBefore(e.current,document.head.firstChild),()=>{t()}},[])}const MenuItemsContext=(0,import_react2.createContext)(null);MenuItemsContext.displayName="MenuItemsContext";const toItems=(e={})=>{const t=[];for(const o in e)if(Object.prototype.hasOwnProperty.call(e,o)){const r=e[o],i={title:r.title,uid:r["x-uid"]};r.properties&&(i.children=toItems(r.properties)),t.push(i)}return t},useMenuItems=()=>(0,import_react2.useContext)(MenuItemsContext),MenuItemsProvider=e=>{var t,o;const r={url:`uiSchemas:getProperties/${useAdminSchemaUid()}`},i=useRequest(r);if(i.loading)return(0,import_jsx_runtime.jsx)(import_antd.Spin,{});const n=toItems((o=(t=i.data)==null?void 0:t.data)==null?void 0:o.properties);return(0,import_jsx_runtime.jsx)(MenuItemsContext.Provider,{value:{service:i,items:n},children:e.children})},findUids=e=>{if(!Array.isArray(e))return[];const t=[];for(const o of e)t.push(o.uid),t.push(...findUids(o.children));return t},getParentUids=(e,t,o=[])=>{if(!e)return[];for(const r of e){if(o.push(r.uid),t(r))return o;if(r.children){const i=getParentUids(r.children,t,o);if(i.length)return i}o.pop()}return[]},getChildrenUids=(e=[],t=[])=>{for(const o of e)t.push(o.uid),o.children&&o.children.length&&getChildrenUids(o.children,t);return t},MenuConfigure=()=>{const e=useRecord(),t=useAPIClient(),{items:o}=useMenuItems(),{t:r}=(0,import_react_i18next.useTranslation)(),i=findUids(o),[n,a]=(0,import_react2.useState)([]),{loading:l,refresh:c}=useRequest({resource:"roles.menuUiSchemas",resourceOf:e.name,action:"list",params:{paginate:!1}},{onSuccess(h){var g;a(((g=h==null?void 0:h.data)==null?void 0:g.map(_=>_["x-uid"]))||[])}}),u=t.resource("roles.menuUiSchemas",e.name),m=i.length===n.length,d=(h,g)=>q(void 0,null,function*(){const _=getParentUids(o,v=>v.uid===g.uid),f=getChildrenUids(g==null?void 0:g.children,[]);if(h){const v=f.concat(g.uid),C=n.filter(S=>!v.includes(S));a([...C]),yield u.remove({values:v})}else{const v=f.concat(_);a(C=>(0,import_lodash.uniq)([...C,...v])),yield u.add({values:v})}import_antd.message.success(r("Saved successfully"))}),p=h=>h.map(g=>{const _=r(g.title);return g.children?P(x({},g),{title:_,children:p(g.children)}):P(x({},g),{title:_})});return(0,import_jsx_runtime.jsx)(import_antd.Table,{className:antTableCell,loading:l,rowKey:"uid",pagination:!1,expandable:{defaultExpandAllRows:!0},columns:[{dataIndex:"title",title:r("Menu item title")},{dataIndex:"accessible",title:(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)(import_antd.Checkbox,{checked:m,onChange:h=>q(void 0,null,function*(){m?yield u.set({values:[]}):yield u.set({values:i}),c(),import_antd.message.success(r("Saved successfully"))})})," ",r("Accessible")]}),render:(h,g)=>{const _=n.includes(g.uid);return(0,import_jsx_runtime.jsx)(import_antd.Checkbox,{checked:_,onChange:()=>d(_,g)})}}],dataSource:p(o)})},SettingCenterPermissionProvider=e=>{var t;const{currentRecord:o}=(0,import_react2.useContext)(PermissionContext);return(t=o==null?void 0:o.snippets)!=null&&t.includes("pm.*")?(0,import_jsx_runtime.jsx)("div",{children:e.children}):null},PermissionContext=(0,import_react2.createContext)(null);PermissionContext.displayName="PermissionContext";const PermissionProvider=e=>{const t=useAPIClient(),o=useRecord(),{t:r}=(0,import_react_i18next.useTranslation)(),{snippets:i}=o;i==null||i.forEach(l=>{o[l]=!0});const[n,a]=(0,import_react2.useState)(o);return(0,import_jsx_runtime.jsx)(PermissionContext.Provider,{value:{currentRecord:n,update:(l,c)=>q(void 0,null,function*(){const{path:u,value:m}=l.getState();if(["ui.*","pm","pm.*"].includes(u)){const d=t.resource("roles.snippets",o.name);m?yield d.add({values:[u]}):yield d.remove({values:[u]}),a(P(x(x({},n),c.values),{[u]:m}))}else yield t.resource("roles").update({filterByTk:o.name,values:c.values}),a(x(x({},n),c.values));import_antd.message.success(r("Saved successfully"))})},children:e.children})},SnippetCheckboxGroup=(0,import_react.connect)(e=>{const{t}=(0,import_react_i18next.useTranslation)();return(0,import_jsx_runtime.jsxs)(import_antd.Checkbox.Group,{style:{width:"100%",display:"block"},value:e.value,onChange:o=>{const r=["ui.*","pm","pm.*","app"],i=r.map(a=>`!${a}`),n=(0,import_uniq.default)([...e.value||[],...o]).filter(a=>a&&!i.includes(a)).map(a=>!r.includes(a)||o!=null&&o.includes(a)?a:`!${a}`);for(const a of r)!n.includes(a)&&!n.includes(`!${a}`)&&n.push(`!${a}`);e.onChange(n)},children:[(0,import_jsx_runtime.jsx)("div",{style:{marginTop:16},children:(0,import_jsx_runtime.jsx)(import_antd.Checkbox,{value:"ui.*",children:t("Allows to configure interface")})}),(0,import_jsx_runtime.jsx)("div",{style:{marginTop:8},children:(0,import_jsx_runtime.jsx)(import_antd.Checkbox,{value:"pm",children:t("Allows to install, activate, disable plugins")})}),(0,import_jsx_runtime.jsx)("div",{style:{marginTop:8},children:(0,import_jsx_runtime.jsx)(import_antd.Checkbox,{value:"pm.*",children:t("Allows to configure plugins")})}),(0,import_jsx_runtime.jsx)("div",{style:{marginTop:8},children:(0,import_jsx_runtime.jsx)(import_antd.Checkbox,{value:"app",children:t("Allows to clear cache, reboot application")})})]})}),RoleConfigure=()=>{const{update:e,currentRecord:t}=(0,import_react2.useContext)(PermissionContext),{t:o}=(0,import_react_i18next.useTranslation)();return(0,import_jsx_runtime.jsx)(SchemaComponent,{components:{SnippetCheckboxGroup},schema:{type:"void",name:"form","x-component":"Form","x-component-props":{useValues:r=>{const i=useAPIClient();return useRequest(()=>i.resource("roles").get({filterByTk:t.name}).then(n=>{var a,l;const c=(a=n==null?void 0:n.data)==null?void 0:a.data;return(l=c.snippets)==null||l.forEach(u=>{c[u]=!0}),{data:c}}),r)},effects(){(0,import_core.onFieldChange)("*",(r,i)=>q(this,null,function*(){i.modified&&(yield e(r,i))}))}},properties:{snippets:{title:o("Configure permissions"),type:"boolean","x-decorator":"FormItem","x-component":"SnippetCheckboxGroup"},allowNewMenu:{title:o("Menu permissions"),"x-decorator":"FormItem","x-component":"Checkbox","x-content":o("New menu items are allowed to be accessed by default.")}}}})},collection={name:"roles",filterTargetKey:"name",targetKey:"name",fields:[{type:"integer",name:"title",interface:"input",uiSchema:{title:'{{t("Role display name")}}',type:"number","x-component":"Input",required:!0}},{type:"string",name:"name",interface:"input",uiSchema:{title:'{{t("Role UID")}}',type:"string","x-component":"Input"}},{type:"boolean",name:"default",interface:"boolean",uiSchema:{title:'{{t("Default role")}}',type:"boolean","x-component":"Checkbox"}}]},roleSchema={type:"object",properties:{block1:{type:"void","x-decorator":"ResourceActionProvider","x-decorator-props":{collection,resourceName:"roles",request:{resource:"roles",action:"list",params:{pageSize:50,filter:{"name.$ne":"root"},showAnonymous:!0,sort:["createdAt"],appends:[]}}},"x-component":"CollectionProvider_deprecated","x-component-props":{collection},properties:{actions:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:16}},properties:{delete:{type:"void",title:'{{ t("Delete") }}',"x-component":"Action","x-component-props":{useAction:"{{ cm.useBulkDestroyAction }}",confirm:{title:"{{t('Delete role')}}",content:"{{t('Are you sure you want to delete it?')}}"}}},create:{type:"void",title:'{{t("Add role")}}',"x-component":"Action","x-component-props":{type:"primary"},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues(e){const t=useActionContext();return useRequest(()=>Promise.resolve({data:{name:`r_${(0,import_shared.uid)()}`,snippets:["!ui.*","!pm","!pm.*"]}}),P(x({},e),{refreshDeps:[t.visible]}))}},title:'{{t("Add role")}}',properties:{title:{"x-component":"CollectionField","x-decorator":"FormItem"},name:{"x-component":"CollectionField","x-decorator":"FormItem",description:'{{t("Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.")}}'},default:{"x-component":"CollectionField","x-decorator":"FormItem",title:"","x-content":'{{t("Default role")}}'},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{t("Cancel")}}',"x-component":"Action","x-component-props":{useAction:"{{ cm.useCancelAction }}"}},submit:{title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ cm.useCreateAction }}"}}}}}}}}}},table:{type:"void","x-uid":"input","x-component":"Table.Void","x-component-props":{rowKey:"name",rowSelection:{type:"checkbox"},useDataSource:"{{ cm.useDataSourceFromRAC }}"},properties:{column1:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",properties:{title:{type:"number","x-component":"CollectionField","x-read-pretty":!0}}},column2:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",properties:{name:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},column3:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",properties:{default:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},column4:{type:"void",title:'{{t("Actions")}}',"x-component":"Table.Column",properties:{actions:{type:"void","x-component":"Space","x-component-props":{split:"|"},properties:{view:{type:"void",title:'{{t("Configure")}}',"x-component":"Action.Link","x-decorator":"ACLActionProvider","x-acl-action":"roles:update","x-component-props":{},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"PermissionProvider",title:'{{t("Configure permissions")}}',properties:{tabs1:{type:"void","x-component":"Tabs","x-component-props":{},properties:{tab1:{type:"void",title:'{{t("General permissions")}}',"x-component":"Tabs.TabPane","x-component-props":{},properties:{role:{"x-component":"RoleConfigure"}}},tab3:{type:"void",title:'{{t("Menu permissions")}}',"x-component":"Tabs.TabPane","x-component-props":{},properties:{menu:{"x-decorator":"MenuItemsProvider","x-component":"MenuConfigure"}}},tab4:{type:"void",title:'{{t("Plugin settings permissions")}}',"x-decorator":"SettingCenterPermissionProvider","x-component":"Tabs.TabPane","x-component-props":{},properties:{menu:{"x-decorator":"SettingCenterProvider","x-component":"SettingsCenterConfigure"}}}}}}}}},update:{type:"void",title:'{{t("Edit")}}',"x-decorator":"ACLActionProvider","x-acl-action":"roles:update","x-component":"Action.Link","x-component-props":{type:"primary"},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues:e=>{const t=useRecord(),o=useRequest(()=>Promise.resolve({data:(0,import_pick.default)(t,["title","name","default"])}),P(x({},e),{manual:!0})),r=useActionContext();return(0,import_react2.useEffect)(()=>{r.visible&&o.run()},[r.visible]),o}},title:'{{t("Edit role")}}',properties:{title:{"x-component":"CollectionField","x-decorator":"FormItem"},name:{"x-component":"CollectionField","x-decorator":"FormItem","x-disabled":!0},default:{title:"","x-component":"CollectionField","x-decorator":"FormItem","x-content":'{{t("Default role")}}'},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{t("Cancel")}}',"x-component":"Action","x-component-props":{useAction:"{{ cm.useCancelAction }}"}},submit:{title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ cm.useUpdateAction }}"}}}}}}}},delete:{type:"void",title:'{{ t("Delete") }}',"x-acl-action":"roles:destroy","x-decorator":"ACLActionProvider","x-component":"Action.Link","x-component-props":{confirm:{title:"{{t('Delete role')}}",content:"{{t('Are you sure you want to delete it?')}}"},useAction:"{{cm.useDestroyAction}}"}}}}}}}}}}}},AvailableActionsContext=(0,import_react2.createContext)([]);AvailableActionsContext.displayName="AvailableActionsContext";const AvailableActionsProver=e=>{const{data:t,loading:o}=useRequest({resource:"availableActions",action:"list"});return o?(0,import_jsx_runtime.jsx)(import_antd.Spin,{}):(0,import_jsx_runtime.jsx)(AvailableActionsContext.Provider,{value:t==null?void 0:t.data,children:e.children})},useAvailableActions=()=>(0,import_react2.useContext)(AvailableActionsContext),RoleTable=()=>(0,import_jsx_runtime.jsx)("div",{children:(0,import_jsx_runtime.jsx)(SchemaComponentContext.Provider,{value:{designable:!1},children:(0,import_jsx_runtime.jsx)(AvailableActionsProver,{children:(0,import_jsx_runtime.jsx)(SchemaComponent,{schema:roleSchema,components:{MenuItemsProvider,SettingCenterPermissionProvider,PermissionProvider}})})})}),rolesResourcesScopesCollection={name:"rolesResourcesScopes",fields:[{type:"string",name:"name",interface:"input",uiSchema:{title:'{{t("Scope name")}}',type:"string","x-component":"Input",required:!0}}]},useFormBlockProps=()=>{const{name:e}=(0,import_react2.useContext)(RoleResourceCollectionContext),t=useFormBlockContext();return(0,import_react2.useEffect)(()=>{t.form.setInitialValues({resourceName:e})},[e]),{form:t.form}},scopesSchema={type:"object",properties:{scope:{"x-component":"RecordPicker","x-component-props":{size:"small",fieldNames:{label:"name",value:"id"},multiple:!1,association:{target:"rolesResourcesScopes"},onChange:"{{ onChange }}"},properties:{selector:{type:"void",title:'{{ t("Select record") }}',"x-component":"RecordPicker.Selector","x-component-props":{className:"nb-record-picker-selector"},properties:{tableBlock:{type:"void","x-decorator":"TableSelectorProvider","x-decorator-props":{collection:rolesResourcesScopesCollection,resource:"rolesResourcesScopes",action:"list",params:{pageSize:20},useParams(){return{filter:{$or:[{resourceName:(0,import_react2.useContext)(RoleResourceCollectionContext).name},{resourceName:null}]}}},rowKey:"id"},"x-component":"BlockItem",properties:{actions:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:16}},properties:{create:{type:"void",title:'{{ t("Add new") }}',"x-action":"create","x-component":"Action","x-component-props":{icon:"PlusOutlined",openMode:"drawer",type:"primary"},properties:{drawer:{type:"void",title:'{{ t("Add record") }}',"x-component":"Action.Container","x-component-props":{className:"nb-action-popup"},properties:{formBlock:{type:"void","x-decorator":"FormBlockProvider","x-decorator-props":{resource:"rolesResourcesScopes",collection:rolesResourcesScopesCollection},"x-component":"CardItem",properties:{form:{type:"void","x-component":"FormV2","x-use-component-props":useFormBlockProps,properties:{name:{type:"string","x-component":"CollectionField","x-decorator":"FormItem"},scope:{type:"object",title:'{{t("Data scope")}}',name:"filter","x-decorator":"FormItem","x-component":"Filter","x-use-component-props":()=>{const e=(0,import_react2.useContext)(RoleResourceCollectionContext);return{options:useFilterOptions(e.name)}},"x-component-props":{dynamicComponent:VariableInput}},actions:{type:"void","x-component":"ActionBar","x-component-props":{layout:"one-column",style:{marginTop:24}},properties:{create:{title:'{{ t("Submit") }}',"x-action":"submit","x-component":"Action","x-use-component-props":"useCreateActionProps","x-component-props":{type:"primary",htmlType:"submit"}}}}}}}}}}}}}},value:{type:"array","x-component":"TableV2.Selector","x-use-component-props":"useTableSelectorProps","x-component-props":{rowKey:"id",rowSelection:{type:"checkbox"}},properties:{column1:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{name:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},actions:{type:"void",title:'{{ t("Actions") }}',"x-action-column":"actions","x-component":"TableV2.Column",properties:{actions:{type:"void","x-decorator":"DndContext","x-component":"Space","x-component-props":{split:"|"},properties:{edit:{type:"void",title:'{{ t("Edit") }}',"x-action":"update","x-decorator":"ACLActionProvider","x-component":"Action.Link","x-component-props":{openMode:"drawer"},properties:{drawer:{type:"void",title:'{{ t("Edit record") }}',"x-component":"Action.Container","x-component-props":{className:"nb-action-popup"},properties:{formBlock:{type:"void","x-decorator":"FormBlockProvider","x-decorator-props":{resource:"rolesResourcesScopes",collection:rolesResourcesScopesCollection,action:"get",useParams:"{{ useParamsFromRecord }}"},"x-component":"CardItem",properties:{form:{type:"void","x-component":"FormV2","x-use-component-props":"useFormBlockProps",properties:{name:{type:"string","x-component":"CollectionField","x-decorator":"FormItem"},scope:{type:"object",title:'{{t("Data scope")}}',name:"filter","x-decorator":"FormItem","x-component":"Filter","x-use-component-props":()=>{const e=(0,import_react2.useContext)(RoleResourceCollectionContext);return{options:useFilterOptions(e.name)}},"x-component-props":{dynamicComponent:VariableInput}},actions:{type:"void","x-component":"ActionBar","x-component-props":{layout:"one-column",style:{marginTop:24}},properties:{update:{title:'{{ t("Submit") }}',"x-action":"submit","x-component":"Action","x-use-component-props":"useUpdateActionProps","x-component-props":{type:"primary",htmlType:"submit"}}}}}}}}}}}},destroy:{title:'{{ t("Delete") }}',"x-action":"destroy","x-decorator":"ACLActionProvider","x-component":"Action.Link","x-use-component-props":"useDestroyActionProps","x-component-props":{icon:"DeleteOutlined",confirm:{title:"{{t('Delete record')}}",content:"{{t('Are you sure you want to delete it?')}}"}}}}}}}}}}},footer:{"x-component":"Action.Container.Footer","x-component-props":{},properties:{actions:{type:"void","x-component":"ActionBar","x-component-props":{},properties:{submit:{title:'{{ t("Submit") }}',"x-action":"submit","x-component":"Action","x-use-component-props":"usePickActionProps","x-component-props":{type:"primary",htmlType:"submit"}}}}}}}}}}}},RolesResourcesScopesSelectedRowKeysContext=(0,import_react2.createContext)(null);RolesResourcesScopesSelectedRowKeysContext.displayName="RolesResourcesScopesSelectedRowKeysContext";const RolesResourcesScopesSelectedRowKeysProvider=e=>{const[t,o]=(0,import_react2.useState)([]);return(0,import_jsx_runtime.jsx)(RolesResourcesScopesSelectedRowKeysContext.Provider,{value:[t,o],children:e.children})},useRolesResourcesScopesSelectedRowKeys=()=>(0,import_react2.useContext)(RolesResourcesScopesSelectedRowKeysContext),ScopeSelect=e=>{const t=(0,import_react2.useMemo)(()=>(0,import_core.createForm)({values:{scope:e.value}}),[]);return(0,import_jsx_runtime.jsx)(FormProvider,{form:t,children:(0,import_jsx_runtime.jsx)(SchemaComponent,{components:{RolesResourcesScopesSelectedRowKeysProvider},scope:{onChange(o){var r;(r=e==null?void 0:e.onChange)==null||r.call(e,o)}},schema:scopesSchema})})},toActionMap=e=>{var t;const o={};return(t=e==null?void 0:e.forEach)==null||t.call(e,r=>{r.name&&(o[r.name]=r,o[r.name].scope=(0,import_lodash.isEmpty)(r.scope)?null:r.scope)}),o},RoleResourceCollectionContext=(0,import_react2.createContext)({});RoleResourceCollectionContext.displayName="RoleResourceCollectionContext";const RolesResourcesActions=(0,import_react.connect)(e=>{var t,o,r,i;const n=F=>{const j=F.map(A=>P(x({},A),{scope:(0,import_lodash.isEmpty)(A.scope)?null:A.scope}));e.onChange(j)};(0,import_react.useForm)();const a=useRecord(),l=useAvailableActions(),{getCollection:c,getCollectionFields:u}=useCollectionManager_deprecated(),m=c(a.collectionName),d=u(a.collectionName),p=useCompile(),{t:h}=(0,import_react_i18next.useTranslation)(),g=(0,import_react.useField)(),_=toActionMap(g.value||[]),f=(F,j)=>{var A;const D=_==null?void 0:_[F];return D?(A=D==null?void 0:D.fields)==null?void 0:A.includes(j):!1},v=l.filter(F=>F.allowConfigureFields),C=(t=d==null?void 0:d.filter(F=>F.interface))==null?void 0:t.map(F=>{const j=x({},F);for(const A of v)j[A.name]=f(A.name,F.name);return j}),S=F=>{var j,A;_[F]?delete _[F]:_[F]={name:F,fields:(A=(j=d==null?void 0:d.filter(D=>D.interface))==null?void 0:j.map)==null?void 0:A.call(j,D=>D.name)},n(Object.values(_))},b=(F,j)=>{_[F]?(_[F].scope=j,n(Object.values(_))):(S(F),_[F].scope=j)},y={};for(const F of v)y[F.name]=((o=d==null?void 0:d.filter(j=>j.interface))==null?void 0:o.length)===((i=(r=_==null?void 0:_[F.name])==null?void 0:r.fields)==null?void 0:i.length);return(0,import_jsx_runtime.jsx)("div",{children:(0,import_jsx_runtime.jsx)(RoleResourceCollectionContext.Provider,{value:m,children:(0,import_jsx_runtime.jsxs)(import_antd_v5.FormLayout,{layout:"vertical",children:[(0,import_jsx_runtime.jsx)(import_antd_v5.FormItem,{label:h("Action permission"),children:(0,import_jsx_runtime.jsx)(import_antd.Table,{className:antTableCell,size:"small",pagination:!1,columns:[{dataIndex:"displayName",title:h("Action display name"),render:F=>p(F)},{dataIndex:"onNewRecord",title:h("Action type"),render:F=>F?(0,import_jsx_runtime.jsx)(import_antd.Tag,{color:"green",children:h("Action on new records")}):(0,import_jsx_runtime.jsx)(import_antd.Tag,{color:"geekblue",children:h("Action on existing records")})},{dataIndex:"enabled",title:h("Allow"),render:(F,j)=>(0,import_jsx_runtime.jsx)(import_antd.Checkbox,{checked:F,onChange:()=>{S(j.name)}})},{dataIndex:"scope",title:h("Data scope"),render:(F,j)=>!j.onNewRecord&&(0,import_jsx_runtime.jsx)(ScopeSelect,{value:F,onChange:A=>{b(j.name,A)}})}],dataSource:l==null?void 0:l.map(F=>{let j=!1,A=null;return _[F.name]&&(j=!0,F.onNewRecord||(A=_[F.name].scope)),P(x({},F),{enabled:j,scope:A})})})}),(0,import_jsx_runtime.jsx)(import_antd_v5.FormItem,{label:h("Field permission"),children:(0,import_jsx_runtime.jsx)(import_antd.Table,{className:antTableCell,pagination:!1,dataSource:C,columns:[{dataIndex:["uiSchema","title"],title:h("Field display name"),render:F=>p(F)},...v.map(F=>{const j=y==null?void 0:y[F.name];return{dataIndex:F.name,title:(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)(import_antd.Checkbox,{checked:j,onChange:()=>{var A;const D=_[F.name]||{name:F.name};j?D.fields=[]:D.fields=(A=d==null?void 0:d.map)==null?void 0:A.call(d,B=>B.name),_[F.name]=D,n(Object.values(_))}})," ",p(F.displayName)]}),render:(A,D)=>(0,import_jsx_runtime.jsx)(import_antd.Checkbox,{checked:A,"aria-label":`${F.name}_checkbox`,onChange:()=>{const B=_[F.name]||{name:F.name},M=B.fields||[];if(A){const w=M.indexOf(D.name);M.splice(w,1)}else M.push(D.name);B.fields=M,_[F.name]=B,n(Object.values(_))}})}})]})})]})})})}),toScopes=e=>{var t;if(!e)return{};const o={};return(t=e==null?void 0:e.forEach)==null||t.call(e,r=>{const[i,n]=r.split(":");o[i]=n||"all"}),o},toFieldValue=e=>{const t=[];for(const o in e)if(Object.prototype.hasOwnProperty.call(e,o)){const r=e[o];r==="all"?t.push(o):t.push(`${o}:${r}`)}return t},StrategyActions=(0,import_react.connect)(e=>{const{onChange:t}=e,o=useAvailableActions(),r=useCompile(),{t:i}=(0,import_react_i18next.useTranslation)(),n=(0,import_react.useField)(),a=toScopes(n.value);return(0,import_jsx_runtime.jsx)("div",{children:(0,import_jsx_runtime.jsx)(import_antd.Table,{size:"small",pagination:!1,rowKey:"name",columns:[{dataIndex:"displayName",title:i("Action display name"),render:l=>r(l)},{dataIndex:"onNewRecord",title:i("Action type"),render:l=>l?(0,import_jsx_runtime.jsx)(import_antd.Tag,{color:"green",children:i("Action on new records")}):(0,import_jsx_runtime.jsx)(import_antd.Tag,{color:"geekblue",children:i("Action on existing records")})},{dataIndex:"enabled",title:i("Allow"),render:(l,c)=>(0,import_jsx_runtime.jsx)(import_antd.Checkbox,{checked:l,"aria-label":`${c.name}_checkbox`,onChange:u=>{l?delete a[c.name]:a[c.name]="all",t(toFieldValue(a))}})},{dataIndex:"scope",title:i("Data scope"),render:(l,c)=>!c.onNewRecord&&(0,import_jsx_runtime.jsx)(import_antd.Select,{"data-testid":"select-data-scope",popupMatchSelectWidth:!1,size:"small",value:l,options:[{label:i("All records"),value:"all"},{label:i("Own records"),value:"own"}],onChange:u=>{a[c.name]=u,t(toFieldValue(a))}})}],dataSource:o==null?void 0:o.map(l=>{let c="all",u=!1;return a[l.name]&&(u=!0,c=a[l.name]),P(x({},l),{enabled:u,scope:c})})})})}),PluginManagerLink=()=>{const{t:e}=(0,import_react_i18next.useTranslation)(),t=useNavigateNoUpdate(),{token:o}=useToken(),{isMobileLayout:r}=useMobileLayout();return r?null:(0,import_jsx_runtime.jsx)(import_antd.Tooltip,{title:e("Plugin manager"),children:(0,import_jsx_runtime.jsx)(import_antd.Button,{"data-testid":"plugin-manager-button",icon:(0,import_jsx_runtime.jsx)(import_icons.ApiOutlined,{style:{color:o.colorTextHeaderMenu}}),title:e("Plugin manager"),onClick:()=>{t("/admin/pm/list")}})})},SettingsCenterDropdown=()=>{const e=useCompile(),{t}=(0,import_react_i18next.useTranslation)(),{token:o}=useToken(),r=useApp(),i=(0,import_react2.useMemo)(()=>r.pluginSettingsManager.getList().filter(a=>a.isTopLevel!==!1).map(a=>({key:a.name,icon:a.icon,label:a.link?(0,import_jsx_runtime.jsx)("div",{onClick:()=>window.open(a.link),children:e(a.title)}):(0,import_jsx_runtime.jsx)(import_react_router_dom.Link,{to:a.path,children:e(a.title)})})),[r,t]);(0,import_react2.useEffect)(()=>()=>{r.pluginSettingsManager.clearCache()},[r.pluginSettingsManager]);const{isMobileLayout:n}=useMobileLayout();return n?null:(0,import_jsx_runtime.jsx)(import_antd.Dropdown,{menu:{style:{maxHeight:"70vh",overflow:"auto"},items:i},children:(0,import_jsx_runtime.jsx)(import_antd.Button,{"data-testid":"plugin-settings-button",icon:(0,import_jsx_runtime.jsx)(import_icons.SettingOutlined,{style:{color:o.colorTextHeaderMenu}})})})},useStyles$1=(0,import_antd_style.createStyles)(({token:e})=>({cardActionDisabled:{color:e.colorTextDisabled,cursor:"not-allowed"},pageHeader:{backgroundColor:e.colorBgContainer,paddingTop:e.paddingSM,paddingBottom:0,paddingInline:e.paddingLG,".ant-page-header-footer":{marginBlockStart:"0"},"& .ant-tabs-nav":{marginBottom:0},".ant-page-header-heading-title":{color:e.colorText}},pageContent:{margin:e.marginLG},PluginDetailBaseInfo:{display:"flex",flexDirection:"column",marginBottom:e.margin},PluginDocument:{background:e.colorBgContainer,padding:e.paddingLG,height:"60vh",overflowY:"auto"},avatar:{".ant-card-meta-avatar":{marginTop:"8px",".ant-avatar":{borderRadius:"2px"}}},version:{display:"block",color:e.colorTextDescription,fontWeight:"normal",fontSize:e.fontSize}}));import_dayjs.default.extend(import_relativeTime.default);const PluginDetail=({plugin:e,onCancel:t})=>{var o,r,i,n,a,l,c,u;const{t:m}=(0,import_react_i18next.useTranslation)(),d=(0,import_react2.useMemo)(()=>[{title:m("Name"),dataIndex:"name",key:"name"},{title:m("Version range"),dataIndex:"versionRange",key:"versionRange"},{title:m("Plugin's version"),dataIndex:"packageVersion",key:"packageVersion"},{title:m("Result"),dataIndex:"result",key:"result",render:S=>(0,import_jsx_runtime.jsx)(import_antd.Tag,{color:S?"success":"error",children:S?"Yes":"No"})}],[m]),{data:p,loading:h}=useRequest({url:"pm:get",params:{filterByTk:e.name}},{refreshDeps:[e.name],ready:!!e.name}),g=(0,import_react2.useMemo)(()=>{var S,b,y;if(!((b=(S=p==null?void 0:p.data)==null?void 0:S.packageJson)!=null&&b.repository))return null;const F=(y=p==null?void 0:p.data)==null?void 0:y.packageJson.repository;return(typeof F=="string"?F:F.url).replace(/\.git$/,"").replace(/^git\+/,"")},[p]),_=(0,import_react2.useMemo)(()=>{var S;const b=(S=p==null?void 0:p.data)==null?void 0:S.packageJson.author;return b?typeof b=="string"?b:b.name:null},[p]),{styles:f,theme:v}=useStyles$1(),C=[{key:"readme",label:m("Readme"),children:(0,import_jsx_runtime.jsxs)(import_antd.Row,{gutter:20,children:[e.name&&(0,import_jsx_runtime.jsx)(import_antd.Col,{span:24,children:(0,import_jsx_runtime.jsxs)("div",{className:f.PluginDetailBaseInfo,children:[(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"secondary",children:m("Name")}),(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{strong:!0,children:e.name})]})}),e.displayName&&(0,import_jsx_runtime.jsx)(import_antd.Col,{span:24,children:(0,import_jsx_runtime.jsxs)("div",{className:f.PluginDetailBaseInfo,children:[(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"secondary",children:m("DisplayName")}),(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{strong:!0,children:e.displayName})]})}),(0,import_jsx_runtime.jsx)(import_antd.Col,{span:24,children:(0,import_jsx_runtime.jsxs)("div",{className:f.PluginDetailBaseInfo,children:[(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"secondary",children:m("PackageName")}),(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{strong:!0,children:e.packageName})]})}),g&&(0,import_jsx_runtime.jsx)(import_antd.Col,{span:24,children:(0,import_jsx_runtime.jsxs)("div",{className:f.PluginDetailBaseInfo,children:[(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"secondary",children:m("Repository")}),(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{strong:!0,children:g})]})}),((o=p==null?void 0:p.data)==null?void 0:o.homepage)&&(0,import_jsx_runtime.jsx)(import_antd.Col,{span:24,children:(0,import_jsx_runtime.jsxs)("div",{className:f.PluginDetailBaseInfo,children:[(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"secondary",children:m("Homepage")}),(0,import_jsx_runtime.jsx)("a",{href:(r=p==null?void 0:p.data)==null?void 0:r.homepage,target:"_blank",rel:"noreferrer",children:(i=p==null?void 0:p.data)==null?void 0:i.homepage})]})}),e.description&&(0,import_jsx_runtime.jsx)(import_antd.Col,{span:24,children:(0,import_jsx_runtime.jsxs)("div",{className:f.PluginDetailBaseInfo,children:[(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"secondary",children:m("Description")}),(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{strong:!0,children:e.description})]})}),((n=p==null?void 0:p.data)==null?void 0:n.packageJson.license)&&(0,import_jsx_runtime.jsx)(import_antd.Col,{span:24,children:(0,import_jsx_runtime.jsxs)("div",{className:f.PluginDetailBaseInfo,children:[(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"secondary",children:m("License")}),(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{strong:!0,children:(a=p==null?void 0:p.data)==null?void 0:a.packageJson.license})]})}),_&&(0,import_jsx_runtime.jsx)(import_antd.Col,{span:24,children:(0,import_jsx_runtime.jsxs)("div",{className:f.PluginDetailBaseInfo,children:[(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"secondary",children:m("Author")}),(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{strong:!0,children:_})]})}),(0,import_jsx_runtime.jsx)(import_antd.Col,{span:24,children:(0,import_jsx_runtime.jsxs)("div",{className:f.PluginDetailBaseInfo,children:[(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"secondary",children:m("Version")}),(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{strong:!0,children:e==null?void 0:e.version})]})})]})},{key:"dependencies",label:m("Dependencies compatibility check"),children:(0,import_jsx_runtime.jsx)(import_jsx_runtime.Fragment,{children:((l=p==null?void 0:p.data)==null?void 0:l.depsCompatible)===!1?(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"danger",children:m("`dist/externalVersion.js` not found or failed to `require`. Please rebuild this plugin.")}):(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[!((c=p==null?void 0:p.data)!=null&&c.isCompatible)&&(0,import_jsx_runtime.jsx)(import_antd.Alert,{showIcon:!0,type:"error",message:m("Plugin dependencies check failed, you should change the dependent version to meet the version requirements.")}),(0,import_jsx_runtime.jsx)(import_antd.Table,{style:{marginTop:v.margin},rowKey:"name",pagination:!1,columns:d,dataSource:(u=p==null?void 0:p.data)==null?void 0:u.depsCompatible})]})})}];return(0,import_jsx_runtime.jsx)(import_antd.Modal,{open:!!e,footer:!1,destroyOnClose:!0,width:600,onCancel:t,children:h?(0,import_jsx_runtime.jsx)(import_antd.Spin,{}):e&&(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)(import_antd.Typography.Title,{level:3,children:e.packageName}),(0,import_jsx_runtime.jsx)(import_antd.Space,{split:(0,import_jsx_runtime.jsx)("span",{children:" • "}),children:(0,import_jsx_runtime.jsx)("span",{children:e.version})}),(0,import_jsx_runtime.jsx)(import_antd.Tabs,{style:{minHeight:"50vh"},items:C,defaultActiveKey:e.isCompatible?void 0:"dependencies"})]})})},PluginNpmForm=({onClose:e,isUpgrade:t,pluginData:o})=>{import_antd.App.useApp();const r=[],i=()=>{const c=useAPIClient();(0,import_react_i18next.useTranslation)();const u=(0,import_react.useForm)();return{run(){return q(this,null,function*(){yield u.submit(),c.request({url:t?"pm:update":"pm:add",method:"post",data:x({},u.values)}),e(!0)})}}},n=c=>useRequest(()=>Promise.resolve({data:t?(0,import_lodash.pick)(o,["name","packageName","version"]):{}}),c),a=()=>({run(){e()}}),l=(0,import_react2.useMemo)(()=>{const c=(0,import_shared.uid)(),u={type:"object",properties:{[c]:{"x-decorator":"Form","x-component":"div",type:"void","x-decorator-props":{useValues:"{{ useValuesFromProps }}"},properties:{packageName:{type:"string",title:"{{t('Npm package name')}}","x-decorator":"FormItem","x-component":"Input",required:!0,"x-component-props":{disabled:!0}},registry:{type:"string",title:"{{t('Registry url')}}",default:"https://registry.npmjs.org/","x-decorator":"FormItem","x-component":"Input","x-decorator-props":{tooltip:"Example: https://registry.npmjs.org/"}},authToken:{type:"string",title:"{{t('Npm authToken')}}","x-decorator":"FormItem","x-component":"Input"},version:{type:"string",title:"{{t('Version')}}","x-decorator":"FormItem","x-component":"Input"},footer:{type:"void","x-component":"ActionBar","x-component-props":{layout:"one-column",style:{justifyContent:"right"}},properties:{cancel:{title:"Cancel","x-component":"Action","x-component-props":{useAction:"{{ useCancel }}"}},submit:{title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",htmlType:"submit",useAction:"{{ useSaveValues }}"}}}}}}}};return u.properties[c].properties.packageName["x-component-props"].disabled=t,t||delete u.properties[c].properties.version,u},[t]);return(0,import_jsx_runtime.jsx)(SchemaComponent,{scope:{useCancel:a,useSaveValues:i,versionList:r,useValuesFromProps:n},schema:l})};PluginNpmForm.displayName="PluginNpmForm";const PluginUploadForm=({onClose:e,pluginData:t,isUpgrade:o})=>{const{message:r}=import_antd.App.useApp(),i=()=>{const l=useAPIClient(),{t:c}=(0,import_react_i18next.useTranslation)(),u=(0,import_react.useForm)();return{run(){return q(this,null,function*(){var m,d;yield u.submit();const p=new FormData;p.append("file",(d=(m=u.values.uploadFile)==null?void 0:m[0])==null?void 0:d.originFileObj),t!=null&&t.packageName&&p.append("packageName",t.packageName),yield l.request({url:`pm:${o?"update":"add"}`,method:"post",data:p}),import_antd.Modal.info({icon:null,width:520,content:(0,import_jsx_runtime.jsx)(import_antd.Result,{icon:(0,import_jsx_runtime.jsx)(import_icons.LoadingOutlined,{}),title:c("Plugin uploading"),subTitle:c("Plugin is uploading, please wait...")}),footer:null}),e(!0);function h(){l.silent().request({url:"__health_check",method:"get"}).then(g=>{(g==null?void 0:g.data)==="ok"&&window.location.reload()}).catch(g=>{})}setInterval(h,1e3)})}}},n=()=>({run(){e()}}),a=(0,import_react2.useMemo)(()=>({type:"object",properties:{[(0,import_shared.uid)()]:{"x-decorator":"Form","x-component":"div",type:"void",properties:{uploadFile:{type:"string","x-decorator":"FormItem","x-component":"Upload.Dragger",required:!0,"x-component-props":{action:"",multiple:!1,maxCount:1,height:"150px",tipContent:"{{t('Drag and drop the file here or click to upload, file size should not exceed 30M')}}",beforeUpload:l=>(/\.(zip|rar|tar|gz|bz2|tgz)$/.test(l.name)||r.error("File only support zip, rar, tar, gz, bz2!"),l.size/1024/1024<30||r.error("File must smaller than 30MB!"),!1)}},footer:{type:"void","x-component":"ActionBar","x-component-props":{layout:"one-column",style:{justifyContent:"right"}},properties:{cancel:{title:"Cancel","x-component":"Action","x-component-props":{useAction:"{{ useCancel }}"}},submit:{title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",htmlType:"submit",useAction:"{{ useSaveValues }}"}}}}}}}}),[r]);return(0,import_jsx_runtime.jsx)(SchemaComponent,{scope:{useCancel:n,useSaveValues:i},schema:a})},PluginUrlForm=({onClose:e,pluginData:t,isUpgrade:o})=>{import_antd.App.useApp();const r=()=>{const l=useAPIClient();(0,import_react_i18next.useTranslation)();const c=(0,import_react.useForm)();return{run(){return q(this,null,function*(){const u=c.values.compressedFileUrl;if(!u)return;yield c.submit();const m={compressedFileUrl:u};t!=null&&t.packageName&&(m.packageName=t.packageName),l.request({url:`pm:${o?"update":"add"}`,method:"post",data:m}),e(!0)})}}},i=l=>useRequest(()=>Promise.resolve({data:{compressedFileUrl:t.compressedFileUrl}}),l),n=()=>({run(){e()}}),a=(0,import_react2.useMemo)(()=>({type:"object",properties:{[(0,import_shared.uid)()]:{"x-decorator":"Form","x-component":"div",type:"void","x-decorator-props":{useValues:"{{ useValuesFromProps }}"},properties:{compressedFileUrl:{type:"string","x-decorator":"FormItem","x-component":"Input",required:!0},footer:{type:"void","x-component":"ActionBar","x-component-props":{layout:"one-column",style:{justifyContent:"right"}},properties:{cancel:{title:"Cancel","x-component":"Action","x-component-props":{useAction:"{{ useCancel }}"}},submit:{title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",htmlType:"submit",useAction:"{{ useSaveValues }}"}}}}}}}}),[]);return(0,import_jsx_runtime.jsx)(SchemaComponent,{scope:{useCancel:n,useValuesFromProps:i,useSaveValues:r},schema:a})},PluginUpgradeModal=({onClose:e,isShow:t,pluginData:o})=>{const{t:r}=(0,import_react_i18next.useTranslation)(),{theme:i}=useStyles$1(),[n,a]=(0,import_react2.useState)("npm");return(0,import_jsx_runtime.jsxs)(import_antd.Modal,{onCancel:()=>e(),footer:null,destroyOnClose:!0,title:r("Update plugin"),width:580,open:t,children:[(0,import_jsx_runtime.jsx)("div",{style:{marginTop:i.marginLG,marginBottom:i.marginLG},children:(0,import_jsx_runtime.jsxs)(import_antd.Radio.Group,{optionType:"button",defaultValue:n,onChange:l=>a(l.target.value),children:[(0,import_jsx_runtime.jsx)(import_antd.Radio,{value:"npm",children:r("Npm package")}),(0,import_jsx_runtime.jsx)(import_antd.Radio,{value:"upload",children:r("Upload plugin")}),(0,import_jsx_runtime.jsx)(import_antd.Radio,{value:"url",children:r("Compressed file url")})]})}),n==="npm"&&(0,import_jsx_runtime.jsx)(PluginNpmForm,{isUpgrade:!0,onClose:e,pluginData:o}),n==="upload"&&(0,import_jsx_runtime.jsx)(PluginUploadForm,{isUpgrade:!0,onClose:e,pluginData:o}),n==="url"&&(0,import_jsx_runtime.jsx)(PluginUrlForm,{isUpgrade:!0,onClose:e,pluginData:o})]})};function PluginInfo(e){const{data:t,onClick:o}=e,r=useApp(),{name:i,displayName:n,isCompatible:a,packageName:l,updatable:c,builtIn:u,enabled:m,removable:d,description:p,error:h,homepage:g}=t,{styles:_,theme:f}=useStyles$1(),v=(0,import_react_router_dom.useNavigate)(),{t:C}=(0,import_react_i18next.useTranslation)(),S=useAPIClient(),{modal:b}=import_antd.App.useApp(),[y,F]=(0,import_react2.useState)(!1),j=n||i||l;return(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[y&&(0,import_jsx_runtime.jsx)(PluginUpgradeModal,{isShow:y,pluginData:t,onClose:A=>{F(!1)}}),(0,import_jsx_runtime.jsx)(import_antd.Card,{role:"button","aria-label":j,size:"small",bordered:!1,onClick:()=>{!h&&o()},headStyle:{border:"none",minHeight:"inherit",paddingTop:14},bodyStyle:{paddingTop:10},title:(0,import_jsx_runtime.jsx)("div",{children:j}),hoverable:!0,className:import_css.css`
|
|
1649
|
+
}}}`},min:{type:"number",title:'{{ t("Min length") }}',minimum:0,"x-decorator":"FormItem","x-component":"InputNumber","x-component-props":{precision:0},"x-reactions":{dependencies:[".max"],fulfill:{state:{selfErrors:`{{!!$deps[0] && !!$self.value && $deps[0] < $self.value ? '${i18n.t("Min length must less than max length")}' : ''}}`}}}}})),k(this,"filterable",{operators:string})}schemaInitialize(t,{block:o}){["Table","Kanban"].includes(o)&&(t["x-component-props"]=t["x-component-props"]||{},t["x-component-props"].ellipsis=!0)}}class TimeFieldInterface extends CollectionFieldInterface{constructor(){super(...arguments),k(this,"name","time"),k(this,"type","object"),k(this,"group","datetime"),k(this,"order",4),k(this,"title",'{{t("Time")}}'),k(this,"sortable",!0),k(this,"default",{type:"time",uiSchema:{type:"string","x-component":"TimePicker"}}),k(this,"availableTypes",["time"]),k(this,"hasDefaultValue",!0),k(this,"properties",x(x({},defaultProps),timeProps)),k(this,"filterable",{operators:time}),k(this,"titleUsable",!0)}}class UpdatedAtFieldInterface extends CollectionFieldInterface{constructor(){super(...arguments),k(this,"name","updatedAt"),k(this,"type","object"),k(this,"group","systemInfo"),k(this,"order",2),k(this,"title",'{{t("Last updated at")}}'),k(this,"sortable",!0),k(this,"default",{type:"date",field:"updatedAt",uiSchema:{type:"datetime",title:'{{t("Last updated at")}}',"x-component":"DatePicker","x-component-props":{},"x-read-pretty":!0}}),k(this,"description",'{{t("Store the last update time of each record")}}'),k(this,"availableTypes",[]),k(this,"properties",x(x({},defaultProps),dateTimeProps)),k(this,"filterable",{operators:datetime}),k(this,"titleUsable",!0)}}class UpdatedByFieldInterface extends CollectionFieldInterface{constructor(){super(...arguments),k(this,"name","updatedBy"),k(this,"type","object"),k(this,"group","systemInfo"),k(this,"order",4),k(this,"title",'{{t("Last updated by")}}'),k(this,"isAssociation",!0),k(this,"default",{type:"belongsTo",target:"users",foreignKey:"updatedById",uiSchema:{type:"object",title:'{{t("Last updated by")}}',"x-component":"AssociationField","x-component-props":{fieldNames:{value:"id",label:"nickname"}},"x-read-pretty":!0}}),k(this,"availableTypes",["belongsTo"]),k(this,"properties",x({},defaultProps)),k(this,"filterable",{nested:!0,children:[]}),k(this,"description",'{{t("Store the last update user of each record")}}')}schemaInitialize(t,{block:o}){t.properties={viewer:(0,import_lodash.cloneDeep)(recordPickerViewer)},["Table","Kanban"].includes(o)&&(t["x-component-props"]=t["x-component-props"]||{},t["x-component-props"].ellipsis=!0)}}class UrlFieldInterface extends CollectionFieldInterface{constructor(){super(...arguments),k(this,"name","url"),k(this,"type","string"),k(this,"group","basic"),k(this,"order",5),k(this,"title",'{{t("URL")}}'),k(this,"default",{type:"text",uiSchema:{type:"string","x-component":"Input.URL"}}),k(this,"componentOptions",[{label:"URL",value:"Input.URL"},{label:"Preview",value:"Input.Preview"}]),k(this,"availableTypes",["string","text"]),k(this,"validationType","string"),k(this,"availableValidationOptions",["uri","pattern"]),k(this,"properties",x({},defaultProps)),k(this,"titleUsable",!0),k(this,"filterable",{operators:string})}schemaInitialize(t,{block:o}){}}class UUIDFieldInterface extends CollectionFieldInterface{constructor(){super(...arguments),k(this,"name","uuid"),k(this,"type","object"),k(this,"group","advanced"),k(this,"order",0),k(this,"title",'{{t("UUID")}}'),k(this,"hidden",!1),k(this,"sortable",!0),k(this,"default",{type:"uuid",uiSchema:{type:"string","x-component":"Input","x-validator":"uuid"}}),k(this,"availableTypes",["uid","uuid"]),k(this,"validationType","string"),k(this,"availableValidationOptions",["uuid","pattern"]),k(this,"properties",{"uiSchema.title":{type:"string",title:'{{t("Field display name")}}',required:!0,"x-decorator":"FormItem","x-component":"Input"},name:{type:"string",title:'{{t("Field name")}}',required:!0,"x-decorator":"FormItem","x-component":"Input","x-disabled":"{{ !createOnly }}",description:"{{t('Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.')}}"},autoFill,layout:{type:"void",title:'{{t("Index")}}',"x-component":"Space","x-decorator":"FormItem","x-decorator-props":{style:{marginBottom:"0px"}},properties:{primaryKey,unique}}}),k(this,"filterable",{operators:string}),k(this,"titleUsable",!0)}}class NanoidFieldInterface extends CollectionFieldInterface{constructor(){super(...arguments),k(this,"name","nanoid"),k(this,"type","object"),k(this,"group","advanced"),k(this,"order",0),k(this,"title",'{{t("Nano ID")}}'),k(this,"hidden",!1),k(this,"sortable",!0),k(this,"default",{type:"nanoid",uiSchema:{type:"string","x-component":"NanoIDInput"}}),k(this,"availableTypes",["nanoid"]),k(this,"properties",{"uiSchema.title":{type:"string",title:'{{t("Field display name")}}',required:!0,"x-decorator":"FormItem","x-component":"Input"},name:{type:"string",title:'{{t("Field name")}}',required:!0,"x-decorator":"FormItem","x-component":"Input","x-disabled":"{{ !createOnly }}",description:"{{t('Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.')}}"},customAlphabet:{type:"string",title:'{{t("Alphabet")}}',default:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz","x-decorator":"FormItem","x-component":"Input"},size:{type:"number",title:'{{t("Length")}}',default:21,"x-decorator":"FormItem","x-component":"InputNumber"},autoFill,layout:{type:"void",title:'{{t("Index")}}',"x-component":"Space","x-decorator":"FormItem","x-decorator-props":{style:{marginBottom:"0px"}},properties:{primaryKey,unique}}}),k(this,"filterable",{operators:string}),k(this,"titleUsable",!0)}}class UnixTimestampFieldInterface extends CollectionFieldInterface{constructor(){super(...arguments),k(this,"name","unixTimestamp"),k(this,"type","object"),k(this,"group","datetime"),k(this,"order",4),k(this,"title",'{{t("Unix Timestamp")}}'),k(this,"sortable",!0),k(this,"default",{type:"unixTimestamp",accuracy:"second",timezone:!0,defaultToCurrentTime:!1,onUpdateToCurrentTime:!1,uiSchema:{type:"number","x-component":"UnixTimestamp","x-component-props":{showTime:!0}}}),k(this,"availableTypes",["unixTimestamp"]),k(this,"hasDefaultValue",!1),k(this,"validationType","date"),k(this,"availableValidationOptions",["timestamp"]),k(this,"properties",P(x(x({},defaultProps),dateTimeProps),{accuracy:{type:"string",title:'{{t("Accuracy")}}',"x-component":"Radio.Group","x-decorator":"FormItem",default:"second",enum:[{value:"millisecond",label:'{{t("Millisecond")}}'},{value:"second",label:'{{t("Second")}}'}]},defaultToCurrentTime:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":'{{t("Default value to current time")}}'},onUpdateToCurrentTime:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":'{{t("Automatically update timestamp on update")}}'}})),k(this,"filterable",{operators:datetime}),k(this,"titleUsable",!0)}}class DateFieldInterface extends CollectionFieldInterface{constructor(){super(...arguments),k(this,"name","date"),k(this,"type","object"),k(this,"group","datetime"),k(this,"order",3),k(this,"title",'{{t("DateOnly")}}'),k(this,"sortable",!0),k(this,"default",{type:"dateOnly",uiSchema:{type:"string","x-component":"DatePicker","x-component-props":{dateOnly:!0,showTime:!1}}}),k(this,"availableTypes",["dateOnly"]),k(this,"hasDefaultValue",!0),k(this,"validationType","date"),k(this,"properties",P(x(x({},defaultProps),dateTimeProps),{"uiSchema.x-component-props.showTime":{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-visible":!1}})),k(this,"filterable",{operators:datetime}),k(this,"titleUsable",!0)}}class DatetimeNoTzFieldInterface extends CollectionFieldInterface{constructor(){super(...arguments),k(this,"name","datetimeNoTz"),k(this,"type","object"),k(this,"group","datetime"),k(this,"order",2),k(this,"title",'{{t("Datetime (without time zone)")}}'),k(this,"sortable",!0),k(this,"default",{type:"datetimeNoTz",defaultToCurrentTime:!1,onUpdateToCurrentTime:!1,timezone:!1,uiSchema:{type:"string","x-component":"DatePicker","x-component-props":{showTime:!1,utc:!1}}}),k(this,"availableTypes",["string","datetimeNoTz"]),k(this,"hasDefaultValue",!0),k(this,"validationType","date"),k(this,"properties",P(x(x({},defaultProps),dateTimeProps),{defaultToCurrentTime:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":'{{t("Default value to current server time")}}'},onUpdateToCurrentTime:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-content":'{{t("Automatically update timestamp to the current server time on update")}}'},"uiSchema.x-component-props.gmt":{type:"boolean",title:'{{t("GMT")}}',"x-hidden":!0,"x-component":"Checkbox","x-content":'{{t("Use the same time zone (GMT) for all users")}}',"x-decorator":"FormItem",default:!1}})),k(this,"filterable",{operators:datetime}),k(this,"titleUsable",!0)}}class InheritanceCollectionMixin extends Collection{constructor(){super(...arguments),k(this,"parentCollectionsName"),k(this,"parentCollections"),k(this,"childrenCollections",{}),k(this,"childrenCollectionsName",{}),k(this,"inheritsFields"),k(this,"currentFields"),k(this,"allFields"),k(this,"parentCollectionFields",{}),k(this,"allCollectionsInheritChain"),k(this,"inheritCollectionsChain"),k(this,"inheritChain"),k(this,"foreignKeyFields")}getParentCollectionsName(){if(this.parentCollectionsName)return this.parentCollectionsName.slice();const t=[],o=r=>{const i=this.collectionManager.getCollection(r);if(i){const{inherits:n}=i;if(n)for(let a=0;a<n.length;a++){const l=n[a];t.push(l),o(l)}}return(0,import_lodash.uniq)(t)};return this.parentCollectionsName=o(this.name),this.parentCollectionsName}getParentCollections(){return this.parentCollections?this.parentCollections.slice():(this.parentCollections=this.getParentCollectionsName().map(t=>this.collectionManager.getCollection(t)),this.parentCollections)}getChildrenCollectionsName(t=!1){const o=t?"supportView":"notSupportView";if(this.childrenCollectionsName[o])return this.childrenCollectionsName[o].slice();const r=[],i=this.collectionManager.getCollections(),n=a=>(i.filter(l=>{var c;return(c=l.inherits)==null?void 0:c.includes(a)}).forEach(l=>{const c=l.name;return r.push(c),n(c)}),t&&i.filter(l=>{var c;return((c=l.sources)==null?void 0:c.length)===1&&(l==null?void 0:l.sources[0])===a}).forEach(l=>{const c=l.name;return r.push(l.name),n(c)}),(0,import_lodash.uniq)(r));return this.childrenCollectionsName[o]=n(this.name),this.childrenCollectionsName[o]}getChildrenCollections(t=!1){const o=t?"supportView":"notSupportView";return this.childrenCollections[o]?this.childrenCollections[o].slice():(this.childrenCollections[o]=this.getChildrenCollectionsName(t).map(r=>this.collectionManager.getCollection(r)),this.childrenCollections[o])}getInheritedFields(){if(this.inheritsFields)return this.inheritsFields.slice();const t=this.getParentCollectionsName();return this.inheritsFields=t.map(o=>{var r;return(r=this.collectionManager.getCollection(o))==null?void 0:r.getFields()}).flat().filter(Boolean),this.inheritsFields}getFieldsMap(){return this.fieldsMap?this.fieldsMap:(this.fieldsMap=this.getAllFields().reduce((t,o)=>(t[o.name]=o,t),{}),this.fieldsMap)}getCurrentFields(t){return super.getFields(t)}getParentCollectionFields(t){if(this.parentCollectionFields||(this.parentCollectionFields={}),this.parentCollectionFields[t])return this.parentCollectionFields[t];const o=this.getCurrentFields(),r=this.getParentCollectionsName(),i=this.collectionManager.getCollection(t).getCurrentFields(),n=r.indexOf(t);let a=o;return n>0&&(r.splice(n),r.forEach(l=>{const c=this.collectionManager.getCollection(l);a=a.concat(c.getCurrentFields())})),this.parentCollectionFields[t]=i.filter(l=>{const c=a.find(u=>u.name===l.name);return(c==null?void 0:c.collectionName)!==this.name}),this.parentCollectionFields[t]}getAllCollectionsInheritChain(){if(this.allCollectionsInheritChain)return this.allCollectionsInheritChain.slice();const t=[this.name],o=r=>{const i=this.collectionManager.getCollection(r);if(i){const{inherits:n}=i,a=i.getChildrenCollectionsName();if(n)for(let l=0;l<n.length;l++){const c=n[l];t.includes(c)||(t.push(c),o(c))}if(a)for(let l=0;l<a.length;l++){const c=this.collectionManager.getCollection(a[l]).name;t.includes(c)||(t.push(c),o(c))}}return t};return this.allCollectionsInheritChain=o(this.name),this.allCollectionsInheritChain||[]}getInheritCollectionsChain(){if(this.inheritCollectionsChain)return this.inheritCollectionsChain.slice();const t=[this.name],o=r=>{const i=this.collectionManager.getCollection(r);if(i){const{inherits:n}=i;if(n)for(let a=0;a<n.length;a++){const l=n[a];t.includes(l)||(t.push(l),o(l))}}return t};return this.inheritCollectionsChain=o(this.name),this.inheritCollectionsChain}getInheritChain(){if(this.inheritChain)return this.inheritChain.slice();const t=this.getInheritCollectionsChain(),o=this.getChildrenCollectionsName(),r=[...t],i=n=>{for(const a of n)if(!r.includes(a)){r.push(a);const l=this.collectionManager.getCollection(a);if(l){const c=l.getChildrenCollectionsName();i(c)}}};return i(o),this.inheritChain=r,this.inheritChain}getAllFields(t){if(this.allFields)return this.allFields.slice();const o=this.getCurrentFields(),r=this.getInheritedFields(),i=(0,import_lodash.unionBy)((o==null?void 0:o.concat(r))||[],"name");return this.allFields=i,t?(0,import_lodash.filter)(i,t):i}getForeignKeyFields(){if(this.foreignKeyFields)return this.foreignKeyFields.slice();const t=this.getCurrentFields(),o=this.getInheritedFields();return(0,import_lodash.unionBy)((t==null?void 0:t.concat(o))||[],"name")}}class GeneralCollectionTemplate extends CollectionTemplate{constructor(){super(...arguments),k(this,"name","general"),k(this,"title",'{{t("General collection")}}'),k(this,"order",1),k(this,"color","blue"),k(this,"default",{fields:[]}),k(this,"configurableProperties",getConfigurableProperties("title","name","inherits","category","description","simplePaginate","presetFields"))}}class TreeCollectionTemplate extends CollectionTemplate{constructor(){super(...arguments),k(this,"name","tree"),k(this,"title",'{{t("Tree collection")}}'),k(this,"order",3),k(this,"color","blue"),k(this,"default",{tree:"adjacencyList",fields:[{interface:"integer",name:"parentId",type:"bigInt",isForeignKey:!0,uiSchema:{type:"number",title:'{{t("Parent ID")}}',"x-component":"InputNumber","x-read-pretty":!0}},{interface:"m2o",type:"belongsTo",name:"parent",foreignKey:"parentId",treeParent:!0,onDelete:"CASCADE",uiSchema:{title:'{{t("Parent")}}',"x-component":"AssociationField","x-component-props":{multiple:!1,fieldNames:{label:"id",value:"id"}}}},{interface:"o2m",type:"hasMany",name:"children",foreignKey:"parentId",treeChildren:!0,onDelete:"CASCADE",uiSchema:{title:'{{t("Children")}}',"x-component":"AssociationField","x-component-props":{multiple:!0,fieldNames:{label:"id",value:"id"}}}}]}),k(this,"presetFieldsDisabledIncludes",["id"]),k(this,"events",{beforeSubmit(t){Array.isArray(t==null?void 0:t.fields)&&(t==null||t.fields.map(o=>{!o.target&&["belongsToMany","belongsTo","hasMany","hasOne"].includes(o.type)&&(o.target=t.name)}))}}),k(this,"configurableProperties",getConfigurableProperties("title","name","inherits","category","description","presetFields"))}}class ViewCollectionTemplate extends CollectionTemplate{constructor(){super(...arguments),k(this,"name","view"),k(this,"title",'{{t("Connect to database view")}}'),k(this,"order",4),k(this,"color","yellow"),k(this,"default",{fields:[]}),k(this,"divider",!0),k(this,"configurableProperties",x({title:{type:"string",title:'{{ t("Collection display name") }}',required:!0,"x-decorator":"FormItem","x-component":"Input"},databaseView:{title:'{{t("Connect to database view")}}',type:"single",required:!0,"x-decorator":"FormItem","x-component":"Select","x-reactions":["{{useAsyncDataSource(loadDBViews)}}"],"x-disabled":"{{ !createOnly }}","x-visible":"{{!createMainOnly}}"},name:{type:"string",title:'{{t("Collection name")}}',required:!0,"x-disabled":"{{ !createOnly }}","x-decorator":"FormItem","x-component":"Input","x-validator":"uid",description:"{{t('Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.')}}","x-reactions":{dependencies:["databaseView"],when:"{{isPG}}",fulfill:{state:{initialValue:"{{$deps[0]&&$deps[0].match(/^([^_]+)_(.*)$/)?.[2]}}"}},otherwise:{state:{value:null}}}},schema:{type:"string","x-hidden":!0,"x-reactions":{dependencies:["databaseView"],when:"{{isPG}}",fulfill:{state:{value:"{{$deps[0] && $deps[0].split('@')?.[0]}}"}},otherwise:{state:{value:null}}}},viewName:{type:"string","x-hidden":!0,"x-reactions":{dependencies:["databaseView"],when:"{{isPG}}",fulfill:{state:{value:"{{$deps[0] && $deps[0].split('@')?.[1]}}"}},otherwise:{state:{value:"{{$deps[0] || null}}"}}}},writableView:{type:"boolean","x-content":'{{t("Allow add new, update and delete actions")}}',"x-decorator":"FormItem","x-component":"Checkbox",default:!1,"x-visible":"{{!createMainOnly}}"},sources:{type:"array",title:'{{ t("Source collections") }}',"x-decorator":"FormItem","x-component":"Select","x-component-props":{multiple:!0},"x-reactions":["{{useAsyncDataSource(loadCollections)}}"],"x-disabled":!0,"x-visible":"{{!createMainOnly}}"},fields:{type:"array","x-component":PreviewFields,"x-hidden":"{{ !createOnly }}","x-decorator":"FormItem","x-reactions":{dependencies:["name"],fulfill:{schema:{"x-component-props":"{{$form.values}}"}}},description:'{{t("Fields can only be used correctly if they are defined with an interface.")}}'},preview:{type:"void","x-visible":"{{ createOnly }}","x-component":PreviewTable$1,"x-reactions":{dependencies:["name","fields"],fulfill:{schema:{"x-component-props":"{{$form.values}}"}}}},filterTargetKey:{title:'{{ t("Record unique key")}}',type:"single",description:'{{t( "If a collection lacks a primary key, you must configure a unique record key to locate row records within a block, failure to configure this will prevent the creation of data blocks for the collection.")}}',"x-decorator":"FormItem","x-component":"Select","x-component-props":{multiple:!0},"x-reactions":["{{useAsyncDataSource(loadFilterTargetKeys)}}"]}},getConfigurableProperties("category","description")))}}class SqlCollectionTemplate extends CollectionTemplate{constructor(){super(...arguments),k(this,"name","sql"),k(this,"title",'{{t("SQL collection")}}'),k(this,"order",4),k(this,"color","yellow"),k(this,"default",{fields:[]}),k(this,"configurableProperties",x({title:{type:"string",title:'{{ t("Collection display name") }}',required:!0,"x-decorator":"FormItem","x-component":"Input"},name:{type:"string",title:'{{t("Collection name")}}',required:!0,"x-disabled":"{{ !createOnly }}","x-decorator":"FormItem","x-component":"Input","x-validator":"uid",description:"{{t('Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.')}}"},config:{type:"void","x-decorator":SQLRequestProvider,properties:{sql:{type:"string",title:'{{t("SQL")}}',"x-decorator":"FormItem","x-component":SQLInput,required:!0,"x-validator":(t,o,{form:r})=>r.query("sql").take().componentProps.disabled?"":i18n.t("Please confirm the SQL statement first")},sources:{type:"array",title:'{{t("Source collections")}}',"x-decorator":"FormItem","x-component":"Select","x-component-props":{multiple:!0},"x-reactions":["{{useAsyncDataSource(loadCollections)}}"]},fields:{type:"array",title:'{{t("Fields")}}',"x-decorator":"FormItem","x-component":FieldsConfigure,required:!0},table:{type:"void",title:'{{t("Preview")}}',"x-decorator":"FormItem","x-component":PreviewTable}}},filterTargetKey:{title:'{{ t("Record unique key")}}',type:"single",description:'{{t( "If a collection lacks a primary key, you must configure a unique record key to locate row records within a block, failure to configure this will prevent the creation of data blocks for the collection.")}}',"x-decorator":"FormItem","x-component":"Select","x-component-props":{multiple:!0},"x-reactions":["{{useAsyncDataSource(loadFilterTargetKeys)}}"]}},getConfigurableProperties("category","description")))}}class MainDataSource extends DataSource{getDataSource(){return q(this,null,function*(){var t;const o=yield this.app.apiClient.request({resource:"collections",action:"listMeta"});return{collections:((t=o==null?void 0:o.data)==null?void 0:t.data)||[]}})}}class CollectionPlugin extends Plugin{load(){return q(this,null,function*(){this.dataSourceManager.addCollectionMixins([InheritanceCollectionMixin]),this.addFieldInterfaces(),this.addCollectionTemplates(),this.addFieldInterfaces(),this.addFieldInterfaceGroups(),this.addMainDataSource()})}addMainDataSource(){var t,o;((o=(t=this.options)==null?void 0:t.config)==null?void 0:o.enableRemoteDataSource)!==!1&&this.dataSourceManager.addDataSource(MainDataSource,{key:DEFAULT_DATA_SOURCE_KEY,displayName:DEFAULT_DATA_SOURCE_TITLE})}addFieldInterfaceGroups(){this.dataSourceManager.addFieldInterfaceGroups({basic:{label:'{{t("Basic")}}'},choices:{label:'{{t("Choices")}}'},media:{label:'{{t("Media")}}'},datetime:{label:'{{t("Date & Time")}}'},relation:{label:'{{t("Relation")}}'},advanced:{label:'{{t("Advanced type")}}'},systemInfo:{label:'{{t("System info")}}'},others:{label:'{{t("Others")}}'}})}addFieldInterfaces(){this.dataSourceManager.addFieldInterfaces([CheckboxFieldInterface,CheckboxGroupFieldInterface,CollectionSelectFieldInterface,ColorFieldInterface,CreatedAtFieldInterface,CreatedByFieldInterface,DatetimeFieldInterface,EmailFieldInterface,IconFieldInterface,IdFieldInterface,InputFieldInterface,IntegerFieldInterface,JsonFieldInterface,LinkToFieldInterface,M2MFieldInterface,M2OFieldInterface,MarkdownFieldInterface,MultipleSelectFieldInterface,NumberFieldInterface,O2MFieldInterface,O2OFieldInterface,OHOFieldInterface,OBOFieldInterface,PasswordFieldInterface,PercentFieldInterface,PhoneFieldInterface,RadioGroupFieldInterface,RichTextFieldInterface,SelectFieldInterface,SubTableFieldInterface,TableoidFieldInterface,TextareaFieldInterface,TimeFieldInterface,UpdatedAtFieldInterface,UpdatedByFieldInterface,UrlFieldInterface,UUIDFieldInterface,NanoidFieldInterface,UnixTimestampFieldInterface,DateFieldInterface,DatetimeNoTzFieldInterface])}addCollectionTemplates(){this.dataSourceManager.addCollectionTemplates([GeneralCollectionTemplate,SqlCollectionTemplate,TreeCollectionTemplate,ViewCollectionTemplate])}}function parseCollectionName(e){var t;if(!e)return[];const o=e.split(":"),r=o.pop();return[(t=o[0])!=null?t:"main",r]}function joinCollectionName(e,t){return!e||e==="main"?t:`${e}:${t}`}const useSourceId=()=>{const{sourceId:e,association:t}=useDataBlockProps()||{},o=useSourceKey(t),r=useDataBlockParentRecord({association:t});return e||(r==null?void 0:r[o])},BlockResourceContext=(0,import_react2.createContext)(null);BlockResourceContext.displayName="BlockResourceContext";const BlockAssociationContext=(0,import_react2.createContext)(null);BlockAssociationContext.displayName="BlockAssociationContext";const BlockRequestContext_deprecated=(0,import_react2.createContext)({});BlockRequestContext_deprecated.displayName="BlockRequestContext_deprecated";const useBlockResource=()=>{const e=useDataBlockResource();return(0,import_react2.useContext)(BlockResourceContext)||e},MaybeCollectionProvider=e=>{const{collection:t}=e;return t?(0,import_jsx_runtime.jsx)(CollectionProvider_deprecated,{collection:t,children:(0,import_jsx_runtime.jsx)(ACLCollectionProvider,{children:e.children})}):e.children},BlockRequestProvider_deprecated=e=>{const t=(0,import_react.useField)(),o=useDataBlockResource(),r=useDataBlockRequest(),i=useCollectionRecord(),n=useCollectionParentRecord(),a=useBlockRequestContext(),l=(0,import_react2.useMemo)(()=>({block:e.block,props:e,field:t,service:r,resource:o,__parent:a,updateAssociationValues:(e==null?void 0:e.updateAssociationValues)||[]}),[a,t,e,o,r]);return(0,import_jsx_runtime.jsx)(BlockRequestContext_deprecated.Provider,{value:l,children:(0,import_jsx_runtime.jsx)(RecordProvider,{isNew:i==null?void 0:i.isNew,record:i==null?void 0:i.data,parent:n==null?void 0:n.data,children:e.children})})},useBlockRequestContext=()=>(0,import_react2.useContext)(BlockRequestContext_deprecated),RenderChildrenWithAssociationFilter=e=>{var t;const o=(0,import_react.useFieldSchema)(),{findComponent:r}=useDesignable(),i=(0,import_react.useField)(),n=r((t=i.component)==null?void 0:t[0])||import_react2.default.Fragment;return o.reduceProperties((a,l)=>l["x-component"]==="AssociationFilter"?l:a,null)?(0,import_jsx_runtime.jsx)(n,P(x({},i.componentProps),{children:(0,import_jsx_runtime.jsxs)(import_antd.Row,{style:{height:"100%"},gutter:16,wrap:!1,children:[(0,import_jsx_runtime.jsx)(import_antd.Col,{style:x({width:200,flex:"0 0 auto"},e.associationFilterStyle||{}),children:(0,import_jsx_runtime.jsx)(import_react.RecursionField,{schema:o,onlyRenderProperties:!0,filterProperties:a=>a["x-component"]==="AssociationFilter"})}),(0,import_jsx_runtime.jsx)(import_antd.Col,{style:{flex:"1 1 auto",minWidth:0},children:(0,import_jsx_runtime.jsx)("div",{style:{height:"100%",display:"flex",flexDirection:"column"},children:(0,import_jsx_runtime.jsx)(import_react.RecursionField,{schema:o,onlyRenderProperties:!0,filterProperties:a=>a["x-component"]!=="AssociationFilter"})})})]})})):e.children},BlockContext=(0,import_react2.createContext)(null);BlockContext.displayName="BlockContext";const useBlockContext=()=>(0,import_react2.useContext)(BlockContext),useCompatDataBlockParentRecord=e=>(0,import_react.useFieldSchema)()["x-use-decorator-props"]?e.parentRecord:useDataBlockParentRecord(e),BlockProvider=e=>{const{name:t,dataSource:o,useParams:r,parentRecord:i}=e,n=useCompatDataBlockParentRecord(e),a=useRefreshComponent(),l=(0,import_ahooks.useUpdate)(),c=(0,import_react2.useCallback)(()=>{l(),a==null||a()},[l,a]),u=r==null?void 0:r(),{getAssociationAppends:m}=useAssociationNames(o),{appends:d,updateAssociationValues:p}=m(),h=(0,import_react2.useMemo)(()=>{var _;return(_=e.params)!=null&&_.appends?x(x({},e.params),u):x(P(x({},e.params),{appends:d}),u)},[d,u,e.params]),g=(0,import_react2.useMemo)(()=>({name:t}),[t]);return(0,import_jsx_runtime.jsx)(BlockContext.Provider,{value:g,children:(0,import_jsx_runtime.jsx)(DataBlockProvider,P(x({},e),{params:h,parentRecord:i||n,children:(0,import_jsx_runtime.jsx)(BlockRequestProvider_deprecated,P(x({},e),{updateAssociationValues:p,params:h,children:(0,import_jsx_runtime.jsx)(RefreshComponentProvider,{refresh:c,children:e.children})}))}))})},useBlockAssociationContext=()=>{const{association:e}=useDataBlockProps();return(0,import_react2.useContext)(BlockAssociationContext)||e},useFilterByTk=e=>{const{resource:t,__parent:o}=useBlockRequestContext(),r=useRecordIndex(),i=useCollectionRecordData(),n=useCollection_deprecated(),a=useBlockAssociationContext(),l=(e==null?void 0:e.association)||a,c=(0,import_react2.useContext)(WithoutTableFieldResource),u=useCollectionManager();if(!c&&(t instanceof TableFieldResource||(o==null?void 0:o.block)==="TableField"))return r;if(l){const m=u.getCollectionField(l);return i==null?void 0:i[m.targetKey||m.sourceKey||"id"]}if((0,import_lodash.isArray)(n.filterTargetKey)){const m={};for(const d of n.filterTargetKey)m[d]=i==null?void 0:i[d];return m}else return i==null?void 0:i[n.filterTargetKey||"id"]},useSourceIdFromRecord=()=>{const e=useRecord(),{getCollectionField:t}=useCollectionManager_deprecated(),o=useBlockAssociationContext();if(o){const r=t(o);return e==null?void 0:e[r.sourceKey||"id"]}},useSourceIdFromParentRecord=()=>useSourceId(),useParamsFromRecord=e=>{var t,o;const r=useFilterByTk(e),i=useRecord(),{fields:n}=useCollection_deprecated(),a=(0,import_react.useFieldSchema)(),{getCollectionJoinField:l}=useCollectionManager_deprecated(),c=l(((t=a==null?void 0:a["x-decorator-props"])==null?void 0:t.resource)||((o=a==null?void 0:a["x-decorator-props"])==null?void 0:o.association)),u=n.filter(p=>["boolean","date","integer","radio","sort","string","time","uid","uuid"].includes(p.type)).map(p=>p.name),m=Object.keys(i).filter(p=>u.includes(p)).reduce((p,h)=>(p[h]=i[h],p),{}),d={filterByTk:r};return i.__collection&&c&&!["oho","m2o","obo"].includes(c.interface)&&(d.targetCollection=i.__collection),!r&&Object.keys(m).length>0&&(d.filter=m),d},RecordLink=e=>{const t=(0,import_react.useField)(),o=useRecord(),r=e,{title:i,to:n}=r,a=W(r,["title","to"]),l=(0,import_template.default)(n||"");return(0,import_jsx_runtime.jsx)(import_react_router_dom.Link,P(x({},a),{to:l({record:o||{}}),children:t.title}))},ACLContext=(0,import_react2.createContext)({});ACLContext.displayName="ACLContext";const ACLProvider=e=>(0,import_jsx_runtime.jsx)(SchemaComponentOptions,{components:{ACLCollectionFieldProvider,ACLActionProvider,ACLMenuItemProvider,ACLCollectionProvider},children:e.children}),ACLRolesCheckProvider=e=>{const{setDesignable:t}=useDesignable(),{render:o}=useAppSpin(),r=useAPIClient(),i=useApp(),n=useRequest({url:"roles:check"},{onSuccess(a){var l,c,u,m;(l=a==null?void 0:a.data)!=null&&l.snippets.includes("ui.*")||t(!1),((c=a==null?void 0:a.data)==null?void 0:c.role)!==r.auth.role&&r.auth.setRole((u=a==null?void 0:a.data)==null?void 0:u.role),i.pluginSettingsManager.setAclSnippets(((m=a==null?void 0:a.data)==null?void 0:m.snippets)||[])}});return n.loading?o():(0,import_jsx_runtime.jsx)(ACLContext.Provider,{value:n,children:e.children})},useRoleRecheck=()=>{const e=(0,import_react2.useContext)(ACLContext),{allowAll:t}=useACLRoleContext();return()=>{t||e.refresh()}},useCurrentRoleMode=()=>{var e,t;const o=(0,import_react2.useContext)(ACLContext);return(t=(e=o==null?void 0:o.data)==null?void 0:e.data)==null?void 0:t.roleMode},useACLContext=()=>(0,import_react2.useContext)(ACLContext),ACLActionParamsContext=(0,import_react2.createContext)({});ACLActionParamsContext.displayName="ACLActionParamsContext";const ACLCustomContext=(0,import_react2.createContext)({});ACLCustomContext.displayName="ACLCustomContext";const useACLCustomContext=()=>(0,import_react2.useContext)(ACLCustomContext),useACLRolesCheck=()=>{var e,t,o;const r=(0,import_react2.useContext)(ACLContext),i=useDataSourceKey(),{dataSources:n}=((e=r==null?void 0:r.data)==null?void 0:e.meta)||{},a=x(x({},(t=r==null?void 0:r.data)==null?void 0:t.data),(0,import_lodash.omit)(n==null?void 0:n[i],"snippets")),l=(0,import_react2.useCallback)(c=>{var u;const m=c.split(":").pop();return((u=a==null?void 0:a.actionAlias)==null?void 0:u[m])||m},[a==null?void 0:a.actionAlias]);return{data:a,getActionAlias:l,inResources:(0,import_react2.useCallback)(c=>{var u,m;return(m=(u=a==null?void 0:a.resources)==null?void 0:u.includes)==null?void 0:m.call(u,c)},[a==null?void 0:a.resources]),getResourceActionParams:(0,import_react2.useCallback)(c=>{var u,m;const[d]=c.split(":"),p=l(c);return((u=a==null?void 0:a.actions)==null?void 0:u[`${d}:${p}`])||((m=a==null?void 0:a.actions)==null?void 0:m[c])},[a==null?void 0:a.actions,l]),getStrategyActionParams:(0,import_react2.useCallback)(c=>{var u,m;const d=l(c);return(m=(u=a==null?void 0:a.strategy)==null?void 0:u.actions)!=null&&m.find(p=>{const[h]=p.split(":");return h===d})?{}:null},[(o=a==null?void 0:a.strategy)==null?void 0:o.actions,l])}},getIgnoreScope=(e={})=>{var t;const{schema:o,recordPkValue:r}=e;let i=!1;return e.ignoreScope&&(i=!0),o!=null&&o["x-acl-ignore-scope"]&&(i=!0),(t=o==null?void 0:o["x-acl-action-props"])!=null&&t.skipScopeCheck&&(i=!0),r||(i=!0),i},useAllowedActions=()=>{var e,t,o,r;const i=useResourceActionContext(),n=useDataBlockRequest();return((t=(e=i==null?void 0:i.data)==null?void 0:e.meta)==null?void 0:t.allowedActions)||((r=(o=n==null?void 0:n.data)==null?void 0:o.meta)==null?void 0:r.allowedActions)},useResourceName=()=>{var e;const t=useResourceActionContext(),o=useDataBlockProps();return(o==null?void 0:o.resource)||(o==null?void 0:o.association)||(o==null?void 0:o.collection)||((e=t==null?void 0:t.defaultRequest)==null?void 0:e.resource)};function useACLRoleContext(){const{data:e,getActionAlias:t,inResources:o,getResourceActionParams:r,getStrategyActionParams:i}=useACLRolesCheck(),n=useAllowedActions(),a=useCollectionManager(),l=(0,import_react2.useCallback)((c,u)=>{const m=t(c);return Array.isArray(n==null?void 0:n[m])?n[m].includes(u):null},[n,t]);return P(x({},e),{snippets:(e==null?void 0:e.snippets)||[],parseAction:(0,import_react2.useCallback)((c,u={})=>{var m;const[d,p]=(c==null?void 0:c.split(":"))||[],h=(d==null?void 0:d.includes("."))&&((m=a.getCollectionField(d))==null?void 0:m.target);if(!getIgnoreScope(u)){const g=l(p,u.recordPkValue);if(g!==null)return g?{}:null}return e!=null&&e.allowAll?{}:o(h)?r(`${h}:${p}`):o(d)?r(c):i(c)},[a,e==null?void 0:e.allowAll,r,i,o,l])})}function useUIConfigurationPermissions(){const{allowAll:e,snippets:t}=useACLRoleContext();return{allowConfigUI:e||t.includes("ui.*")}}const ACLCollectionProvider=e=>{var t,o;const{allowAll:r,parseAction:i}=useACLRoleContext(),{allowAll:n}=useACLCustomContext(),a=useApp(),l=(0,import_react.useFieldSchema)();let c=(l==null?void 0:l["x-acl-action"])||e.actionPath;const u=((t=l==null?void 0:l["x-decorator-props"])==null?void 0:t.association)||((o=l==null?void 0:l["x-decorator-props"])==null?void 0:o.collection);c==="undefined:list"&&u&&u!=="undefined"&&(c=`${u}:list`);const m=(0,import_react2.useMemo)(()=>c?i(c,{schema:l}):null,[i,c,l]);if(r||a.disableAcl||n)return e.children;if(!c)return(0,import_jsx_runtime.jsx)(ACLActionParamsContext.Provider,{value:{},children:e.children});if(!m)return(0,import_jsx_runtime.jsx)(CollectionNotAllowViewPlaceholder,{});const[d,p]=c.split(":");return m.actionName=p,(0,import_jsx_runtime.jsx)(ACLActionParamsContext.Provider,{value:m,children:e.children})},useACLActionParamsContext=()=>(0,import_react2.useContext)(ACLActionParamsContext),useRecordPkValue=()=>{const e=useCollection(),t=useCollectionRecordData();if(!e)return;const o=e.getPrimaryKey();return t==null?void 0:t[o]},ACLActionProvider=e=>{const t=useCollection(),o=useRecordPkValue(),r=useResourceName(),{parseAction:i,uiButtonSchemasBlacklist:n}=useACLRoleContext(),a=(0,import_react.useFieldSchema)(),l=a["x-uid"];let c=a["x-acl-action"];const u=["create","update","destroy","importXlsx","export"],m=["create","update","destroy","importXlsx","bulkDestroy","bulkUpdate"];!c&&r&&a["x-action"]&&u.includes(a["x-action"])&&(c=`${r}:${a["x-action"]}`),c&&!(c!=null&&c.includes(":"))&&(c=`${r}:${c}`);const d=(0,import_react2.useMemo)(()=>c&&i(c,{schema:a,recordPkValue:o}),[i,c,a,o]);return n!=null&&n.includes(l)?(0,import_jsx_runtime.jsx)(ACLActionParamsContext.Provider,{value:!1,children:e.children}):c?r?d?m.includes(c)||m.includes(c==null?void 0:c.split(":")[1])?t&&t.template!=="view"||t!=null&&t.writableView?(0,import_jsx_runtime.jsx)(ACLActionParamsContext.Provider,{value:d,children:e.children}):(0,import_jsx_runtime.jsx)(ACLActionParamsContext.Provider,{value:!1,children:e.children}):(0,import_jsx_runtime.jsx)(ACLActionParamsContext.Provider,{value:d,children:e.children}):(0,import_jsx_runtime.jsx)(ACLActionParamsContext.Provider,{value:d,children:e.children}):(0,import_jsx_runtime.jsx)(import_jsx_runtime.Fragment,{children:e.children}):(0,import_jsx_runtime.jsx)(import_jsx_runtime.Fragment,{children:e.children})},useACLFieldWhitelist=()=>{const e=(0,import_react2.useContext)(ACLActionParamsContext),t=(0,import_react2.useMemo)(()=>[].concat((e==null?void 0:e.whitelist)||[]).concat((e==null?void 0:e.fields)||[]).concat((e==null?void 0:e.appends)||[]),[e==null?void 0:e.whitelist,e==null?void 0:e.fields,e==null?void 0:e.appends]);return{whitelist:t,schemaInWhitelist:(0,import_react2.useCallback)((o,r)=>{if(r||t.length===0||!o||!o["x-collection-field"])return!0;const[i,n]=o["x-collection-field"].split("."),[a]=o.name.split(".");return t==null?void 0:t.includes(a||n||i)},[t])}},ACLCollectionFieldProvider=e=>{const t=(0,import_react.useFieldSchema)(),o=(0,import_react.useField)(),{allowAll:r}=useACLRoleContext(),{whitelist:i}=useACLFieldWhitelist(),[n]=t.name.split("."),a=!t["x-acl-ignore"]&&i.length>0&&t!=null&&t["x-collection-field"]?i.includes(n):!0;return(0,import_react2.useEffect)(()=>{a||(o.required=!1,o.display="hidden")},[a,o]),r?(0,import_jsx_runtime.jsx)(import_jsx_runtime.Fragment,{children:e.children}):t["x-collection-field"]?a?(0,import_jsx_runtime.jsx)(import_jsx_runtime.Fragment,{children:e.children}):null:(0,import_jsx_runtime.jsx)(import_jsx_runtime.Fragment,{children:e.children})},ACLMenuItemProvider=e=>(0,import_jsx_runtime.jsx)(import_jsx_runtime.Fragment,{children:e.children}),useAdminSchemaUid=()=>"nocobase-admin-menu",useViewportMeta=()=>{const e=(0,import_react2.useRef)("initial-scale=0.1"),t=(0,import_react2.useRef)();return(0,import_react2.useEffect)(()=>{let o=document.querySelector('meta[name="viewport"]');o?e.current=o.content:(o=document.createElement("meta"),o.name="viewport"),o&&(o.content="width=device-width, initial-scale=1, user-scalable=0",t.current=o)},[]),{metaRef:t,restore:()=>{t.current&&(t.current.content=e.current)}}};function useViewport(){const{metaRef:e,restore:t}=useViewportMeta();(0,import_react2.useEffect)(()=>{if(e.current)return document.head.insertBefore(e.current,document.head.firstChild),()=>{t()}},[])}const MenuItemsContext=(0,import_react2.createContext)(null);MenuItemsContext.displayName="MenuItemsContext";const toItems=(e={})=>{const t=[];for(const o in e)if(Object.prototype.hasOwnProperty.call(e,o)){const r=e[o],i={title:r.title,uid:r["x-uid"]};r.properties&&(i.children=toItems(r.properties)),t.push(i)}return t},useMenuItems=()=>(0,import_react2.useContext)(MenuItemsContext),MenuItemsProvider=e=>{var t,o;const r={url:`uiSchemas:getProperties/${useAdminSchemaUid()}`},i=useRequest(r);if(i.loading)return(0,import_jsx_runtime.jsx)(import_antd.Spin,{});const n=toItems((o=(t=i.data)==null?void 0:t.data)==null?void 0:o.properties);return(0,import_jsx_runtime.jsx)(MenuItemsContext.Provider,{value:{service:i,items:n},children:e.children})},findUids=e=>{if(!Array.isArray(e))return[];const t=[];for(const o of e)t.push(o.uid),t.push(...findUids(o.children));return t},getParentUids=(e,t,o=[])=>{if(!e)return[];for(const r of e){if(o.push(r.uid),t(r))return o;if(r.children){const i=getParentUids(r.children,t,o);if(i.length)return i}o.pop()}return[]},getChildrenUids=(e=[],t=[])=>{for(const o of e)t.push(o.uid),o.children&&o.children.length&&getChildrenUids(o.children,t);return t},MenuConfigure=()=>{const e=useRecord(),t=useAPIClient(),{items:o}=useMenuItems(),{t:r}=(0,import_react_i18next.useTranslation)(),i=findUids(o),[n,a]=(0,import_react2.useState)([]),{loading:l,refresh:c}=useRequest({resource:"roles.menuUiSchemas",resourceOf:e.name,action:"list",params:{paginate:!1}},{onSuccess(h){var g;a(((g=h==null?void 0:h.data)==null?void 0:g.map(_=>_["x-uid"]))||[])}}),u=t.resource("roles.menuUiSchemas",e.name),m=i.length===n.length,d=(h,g)=>q(void 0,null,function*(){const _=getParentUids(o,v=>v.uid===g.uid),f=getChildrenUids(g==null?void 0:g.children,[]);if(h){const v=f.concat(g.uid),C=n.filter(S=>!v.includes(S));a([...C]),yield u.remove({values:v})}else{const v=f.concat(_);a(C=>(0,import_lodash.uniq)([...C,...v])),yield u.add({values:v})}import_antd.message.success(r("Saved successfully"))}),p=h=>h.map(g=>{const _=r(g.title);return g.children?P(x({},g),{title:_,children:p(g.children)}):P(x({},g),{title:_})});return(0,import_jsx_runtime.jsx)(import_antd.Table,{className:antTableCell,loading:l,rowKey:"uid",pagination:!1,expandable:{defaultExpandAllRows:!0},columns:[{dataIndex:"title",title:r("Menu item title")},{dataIndex:"accessible",title:(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)(import_antd.Checkbox,{checked:m,onChange:h=>q(void 0,null,function*(){m?yield u.set({values:[]}):yield u.set({values:i}),c(),import_antd.message.success(r("Saved successfully"))})})," ",r("Accessible")]}),render:(h,g)=>{const _=n.includes(g.uid);return(0,import_jsx_runtime.jsx)(import_antd.Checkbox,{checked:_,onChange:()=>d(_,g)})}}],dataSource:p(o)})},SettingCenterPermissionProvider=e=>{var t;const{currentRecord:o}=(0,import_react2.useContext)(PermissionContext);return(t=o==null?void 0:o.snippets)!=null&&t.includes("pm.*")?(0,import_jsx_runtime.jsx)("div",{children:e.children}):null},PermissionContext=(0,import_react2.createContext)(null);PermissionContext.displayName="PermissionContext";const PermissionProvider=e=>{const t=useAPIClient(),o=useRecord(),{t:r}=(0,import_react_i18next.useTranslation)(),{snippets:i}=o;i==null||i.forEach(l=>{o[l]=!0});const[n,a]=(0,import_react2.useState)(o);return(0,import_jsx_runtime.jsx)(PermissionContext.Provider,{value:{currentRecord:n,update:(l,c)=>q(void 0,null,function*(){const{path:u,value:m}=l.getState();if(["ui.*","pm","pm.*"].includes(u)){const d=t.resource("roles.snippets",o.name);m?yield d.add({values:[u]}):yield d.remove({values:[u]}),a(P(x(x({},n),c.values),{[u]:m}))}else yield t.resource("roles").update({filterByTk:o.name,values:c.values}),a(x(x({},n),c.values));import_antd.message.success(r("Saved successfully"))})},children:e.children})},SnippetCheckboxGroup=(0,import_react.connect)(e=>{const{t}=(0,import_react_i18next.useTranslation)();return(0,import_jsx_runtime.jsxs)(import_antd.Checkbox.Group,{style:{width:"100%",display:"block"},value:e.value,onChange:o=>{const r=["ui.*","pm","pm.*","app"],i=r.map(a=>`!${a}`),n=(0,import_uniq.default)([...e.value||[],...o]).filter(a=>a&&!i.includes(a)).map(a=>!r.includes(a)||o!=null&&o.includes(a)?a:`!${a}`);for(const a of r)!n.includes(a)&&!n.includes(`!${a}`)&&n.push(`!${a}`);e.onChange(n)},children:[(0,import_jsx_runtime.jsx)("div",{style:{marginTop:16},children:(0,import_jsx_runtime.jsx)(import_antd.Checkbox,{value:"ui.*",children:t("Allows to configure interface")})}),(0,import_jsx_runtime.jsx)("div",{style:{marginTop:8},children:(0,import_jsx_runtime.jsx)(import_antd.Checkbox,{value:"pm",children:t("Allows to install, activate, disable plugins")})}),(0,import_jsx_runtime.jsx)("div",{style:{marginTop:8},children:(0,import_jsx_runtime.jsx)(import_antd.Checkbox,{value:"pm.*",children:t("Allows to configure plugins")})}),(0,import_jsx_runtime.jsx)("div",{style:{marginTop:8},children:(0,import_jsx_runtime.jsx)(import_antd.Checkbox,{value:"app",children:t("Allows to clear cache, reboot application")})})]})}),RoleConfigure=()=>{const{update:e,currentRecord:t}=(0,import_react2.useContext)(PermissionContext),{t:o}=(0,import_react_i18next.useTranslation)();return(0,import_jsx_runtime.jsx)(SchemaComponent,{components:{SnippetCheckboxGroup},schema:{type:"void",name:"form","x-component":"Form","x-component-props":{useValues:r=>{const i=useAPIClient();return useRequest(()=>i.resource("roles").get({filterByTk:t.name}).then(n=>{var a,l;const c=(a=n==null?void 0:n.data)==null?void 0:a.data;return(l=c.snippets)==null||l.forEach(u=>{c[u]=!0}),{data:c}}),r)},effects(){(0,import_core.onFieldChange)("*",(r,i)=>q(this,null,function*(){i.modified&&(yield e(r,i))}))}},properties:{snippets:{title:o("Configure permissions"),type:"boolean","x-decorator":"FormItem","x-component":"SnippetCheckboxGroup"},allowNewMenu:{title:o("Menu permissions"),"x-decorator":"FormItem","x-component":"Checkbox","x-content":o("New menu items are allowed to be accessed by default.")}}}})},collection={name:"roles",filterTargetKey:"name",targetKey:"name",fields:[{type:"integer",name:"title",interface:"input",uiSchema:{title:'{{t("Role display name")}}',type:"number","x-component":"Input",required:!0}},{type:"string",name:"name",interface:"input",uiSchema:{title:'{{t("Role UID")}}',type:"string","x-component":"Input"}},{type:"boolean",name:"default",interface:"boolean",uiSchema:{title:'{{t("Default role")}}',type:"boolean","x-component":"Checkbox"}}]},roleSchema={type:"object",properties:{block1:{type:"void","x-decorator":"ResourceActionProvider","x-decorator-props":{collection,resourceName:"roles",request:{resource:"roles",action:"list",params:{pageSize:50,filter:{"name.$ne":"root"},showAnonymous:!0,sort:["createdAt"],appends:[]}}},"x-component":"CollectionProvider_deprecated","x-component-props":{collection},properties:{actions:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:16}},properties:{delete:{type:"void",title:'{{ t("Delete") }}',"x-component":"Action","x-component-props":{useAction:"{{ cm.useBulkDestroyAction }}",confirm:{title:"{{t('Delete role')}}",content:"{{t('Are you sure you want to delete it?')}}"}}},create:{type:"void",title:'{{t("Add role")}}',"x-component":"Action","x-component-props":{type:"primary"},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues(e){const t=useActionContext();return useRequest(()=>Promise.resolve({data:{name:`r_${(0,import_shared.uid)()}`,snippets:["!ui.*","!pm","!pm.*"]}}),P(x({},e),{refreshDeps:[t.visible]}))}},title:'{{t("Add role")}}',properties:{title:{"x-component":"CollectionField","x-decorator":"FormItem"},name:{"x-component":"CollectionField","x-decorator":"FormItem",description:'{{t("Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.")}}'},default:{"x-component":"CollectionField","x-decorator":"FormItem",title:"","x-content":'{{t("Default role")}}'},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{t("Cancel")}}',"x-component":"Action","x-component-props":{useAction:"{{ cm.useCancelAction }}"}},submit:{title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ cm.useCreateAction }}"}}}}}}}}}},table:{type:"void","x-uid":"input","x-component":"Table.Void","x-component-props":{rowKey:"name",rowSelection:{type:"checkbox"},useDataSource:"{{ cm.useDataSourceFromRAC }}"},properties:{column1:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",properties:{title:{type:"number","x-component":"CollectionField","x-read-pretty":!0}}},column2:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",properties:{name:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},column3:{type:"void","x-decorator":"Table.Column.Decorator","x-component":"Table.Column",properties:{default:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},column4:{type:"void",title:'{{t("Actions")}}',"x-component":"Table.Column",properties:{actions:{type:"void","x-component":"Space","x-component-props":{split:"|"},properties:{view:{type:"void",title:'{{t("Configure")}}',"x-component":"Action.Link","x-decorator":"ACLActionProvider","x-acl-action":"roles:update","x-component-props":{},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"PermissionProvider",title:'{{t("Configure permissions")}}',properties:{tabs1:{type:"void","x-component":"Tabs","x-component-props":{},properties:{tab1:{type:"void",title:'{{t("General permissions")}}',"x-component":"Tabs.TabPane","x-component-props":{},properties:{role:{"x-component":"RoleConfigure"}}},tab3:{type:"void",title:'{{t("Menu permissions")}}',"x-component":"Tabs.TabPane","x-component-props":{},properties:{menu:{"x-decorator":"MenuItemsProvider","x-component":"MenuConfigure"}}},tab4:{type:"void",title:'{{t("Plugin settings permissions")}}',"x-decorator":"SettingCenterPermissionProvider","x-component":"Tabs.TabPane","x-component-props":{},properties:{menu:{"x-decorator":"SettingCenterProvider","x-component":"SettingsCenterConfigure"}}}}}}}}},update:{type:"void",title:'{{t("Edit")}}',"x-decorator":"ACLActionProvider","x-acl-action":"roles:update","x-component":"Action.Link","x-component-props":{type:"primary"},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues:e=>{const t=useRecord(),o=useRequest(()=>Promise.resolve({data:(0,import_pick.default)(t,["title","name","default"])}),P(x({},e),{manual:!0})),r=useActionContext();return(0,import_react2.useEffect)(()=>{r.visible&&o.run()},[r.visible]),o}},title:'{{t("Edit role")}}',properties:{title:{"x-component":"CollectionField","x-decorator":"FormItem"},name:{"x-component":"CollectionField","x-decorator":"FormItem","x-disabled":!0},default:{title:"","x-component":"CollectionField","x-decorator":"FormItem","x-content":'{{t("Default role")}}'},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{t("Cancel")}}',"x-component":"Action","x-component-props":{useAction:"{{ cm.useCancelAction }}"}},submit:{title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ cm.useUpdateAction }}"}}}}}}}},delete:{type:"void",title:'{{ t("Delete") }}',"x-acl-action":"roles:destroy","x-decorator":"ACLActionProvider","x-component":"Action.Link","x-component-props":{confirm:{title:"{{t('Delete role')}}",content:"{{t('Are you sure you want to delete it?')}}"},useAction:"{{cm.useDestroyAction}}"}}}}}}}}}}}},AvailableActionsContext=(0,import_react2.createContext)([]);AvailableActionsContext.displayName="AvailableActionsContext";const AvailableActionsProver=e=>{const{data:t,loading:o}=useRequest({resource:"availableActions",action:"list"});return o?(0,import_jsx_runtime.jsx)(import_antd.Spin,{}):(0,import_jsx_runtime.jsx)(AvailableActionsContext.Provider,{value:t==null?void 0:t.data,children:e.children})},useAvailableActions=()=>(0,import_react2.useContext)(AvailableActionsContext),RoleTable=()=>(0,import_jsx_runtime.jsx)("div",{children:(0,import_jsx_runtime.jsx)(SchemaComponentContext.Provider,{value:{designable:!1},children:(0,import_jsx_runtime.jsx)(AvailableActionsProver,{children:(0,import_jsx_runtime.jsx)(SchemaComponent,{schema:roleSchema,components:{MenuItemsProvider,SettingCenterPermissionProvider,PermissionProvider}})})})}),rolesResourcesScopesCollection={name:"rolesResourcesScopes",fields:[{type:"string",name:"name",interface:"input",uiSchema:{title:'{{t("Scope name")}}',type:"string","x-component":"Input",required:!0}}]},useFormBlockProps=()=>{const{name:e}=(0,import_react2.useContext)(RoleResourceCollectionContext),t=useFormBlockContext();return(0,import_react2.useEffect)(()=>{t.form.setInitialValues({resourceName:e})},[e]),{form:t.form}},scopesSchema={type:"object",properties:{scope:{"x-component":"RecordPicker","x-component-props":{size:"small",fieldNames:{label:"name",value:"id"},multiple:!1,association:{target:"rolesResourcesScopes"},onChange:"{{ onChange }}"},properties:{selector:{type:"void",title:'{{ t("Select record") }}',"x-component":"RecordPicker.Selector","x-component-props":{className:"nb-record-picker-selector"},properties:{tableBlock:{type:"void","x-decorator":"TableSelectorProvider","x-decorator-props":{collection:rolesResourcesScopesCollection,resource:"rolesResourcesScopes",action:"list",params:{pageSize:20},useParams(){return{filter:{$or:[{resourceName:(0,import_react2.useContext)(RoleResourceCollectionContext).name},{resourceName:null}]}}},rowKey:"id"},"x-component":"BlockItem",properties:{actions:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:16}},properties:{create:{type:"void",title:'{{ t("Add new") }}',"x-action":"create","x-component":"Action","x-component-props":{icon:"PlusOutlined",openMode:"drawer",type:"primary"},properties:{drawer:{type:"void",title:'{{ t("Add record") }}',"x-component":"Action.Container","x-component-props":{className:"nb-action-popup"},properties:{formBlock:{type:"void","x-decorator":"FormBlockProvider","x-decorator-props":{resource:"rolesResourcesScopes",collection:rolesResourcesScopesCollection},"x-component":"CardItem",properties:{form:{type:"void","x-component":"FormV2","x-use-component-props":useFormBlockProps,properties:{name:{type:"string","x-component":"CollectionField","x-decorator":"FormItem"},scope:{type:"object",title:'{{t("Data scope")}}',name:"filter","x-decorator":"FormItem","x-component":"Filter","x-use-component-props":()=>{const e=(0,import_react2.useContext)(RoleResourceCollectionContext);return{options:useFilterOptions(e.name)}},"x-component-props":{dynamicComponent:VariableInput}},actions:{type:"void","x-component":"ActionBar","x-component-props":{layout:"one-column",style:{marginTop:24}},properties:{create:{title:'{{ t("Submit") }}',"x-action":"submit","x-component":"Action","x-use-component-props":"useCreateActionProps","x-component-props":{type:"primary",htmlType:"submit"}}}}}}}}}}}}}},value:{type:"array","x-component":"TableV2.Selector","x-use-component-props":"useTableSelectorProps","x-component-props":{rowKey:"id",rowSelection:{type:"checkbox"}},properties:{column1:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{name:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},actions:{type:"void",title:'{{ t("Actions") }}',"x-action-column":"actions","x-component":"TableV2.Column",properties:{actions:{type:"void","x-decorator":"DndContext","x-component":"Space","x-component-props":{split:"|"},properties:{edit:{type:"void",title:'{{ t("Edit") }}',"x-action":"update","x-decorator":"ACLActionProvider","x-component":"Action.Link","x-component-props":{openMode:"drawer"},properties:{drawer:{type:"void",title:'{{ t("Edit record") }}',"x-component":"Action.Container","x-component-props":{className:"nb-action-popup"},properties:{formBlock:{type:"void","x-decorator":"FormBlockProvider","x-decorator-props":{resource:"rolesResourcesScopes",collection:rolesResourcesScopesCollection,action:"get",useParams:"{{ useParamsFromRecord }}"},"x-component":"CardItem",properties:{form:{type:"void","x-component":"FormV2","x-use-component-props":"useFormBlockProps",properties:{name:{type:"string","x-component":"CollectionField","x-decorator":"FormItem"},scope:{type:"object",title:'{{t("Data scope")}}',name:"filter","x-decorator":"FormItem","x-component":"Filter","x-use-component-props":()=>{const e=(0,import_react2.useContext)(RoleResourceCollectionContext);return{options:useFilterOptions(e.name)}},"x-component-props":{dynamicComponent:VariableInput}},actions:{type:"void","x-component":"ActionBar","x-component-props":{layout:"one-column",style:{marginTop:24}},properties:{update:{title:'{{ t("Submit") }}',"x-action":"submit","x-component":"Action","x-use-component-props":"useUpdateActionProps","x-component-props":{type:"primary",htmlType:"submit"}}}}}}}}}}}},destroy:{title:'{{ t("Delete") }}',"x-action":"destroy","x-decorator":"ACLActionProvider","x-component":"Action.Link","x-use-component-props":"useDestroyActionProps","x-component-props":{icon:"DeleteOutlined",confirm:{title:"{{t('Delete record')}}",content:"{{t('Are you sure you want to delete it?')}}"}}}}}}}}}}},footer:{"x-component":"Action.Container.Footer","x-component-props":{},properties:{actions:{type:"void","x-component":"ActionBar","x-component-props":{},properties:{submit:{title:'{{ t("Submit") }}',"x-action":"submit","x-component":"Action","x-use-component-props":"usePickActionProps","x-component-props":{type:"primary",htmlType:"submit"}}}}}}}}}}}},RolesResourcesScopesSelectedRowKeysContext=(0,import_react2.createContext)(null);RolesResourcesScopesSelectedRowKeysContext.displayName="RolesResourcesScopesSelectedRowKeysContext";const RolesResourcesScopesSelectedRowKeysProvider=e=>{const[t,o]=(0,import_react2.useState)([]);return(0,import_jsx_runtime.jsx)(RolesResourcesScopesSelectedRowKeysContext.Provider,{value:[t,o],children:e.children})},useRolesResourcesScopesSelectedRowKeys=()=>(0,import_react2.useContext)(RolesResourcesScopesSelectedRowKeysContext),ScopeSelect=e=>{const t=(0,import_react2.useMemo)(()=>(0,import_core.createForm)({values:{scope:e.value}}),[]);return(0,import_jsx_runtime.jsx)(FormProvider,{form:t,children:(0,import_jsx_runtime.jsx)(SchemaComponent,{components:{RolesResourcesScopesSelectedRowKeysProvider},scope:{onChange(o){var r;(r=e==null?void 0:e.onChange)==null||r.call(e,o)}},schema:scopesSchema})})},toActionMap=e=>{var t;const o={};return(t=e==null?void 0:e.forEach)==null||t.call(e,r=>{r.name&&(o[r.name]=r,o[r.name].scope=(0,import_lodash.isEmpty)(r.scope)?null:r.scope)}),o},RoleResourceCollectionContext=(0,import_react2.createContext)({});RoleResourceCollectionContext.displayName="RoleResourceCollectionContext";const RolesResourcesActions=(0,import_react.connect)(e=>{var t,o,r,i;const n=F=>{const j=F.map(A=>P(x({},A),{scope:(0,import_lodash.isEmpty)(A.scope)?null:A.scope}));e.onChange(j)};(0,import_react.useForm)();const a=useRecord(),l=useAvailableActions(),{getCollection:c,getCollectionFields:u}=useCollectionManager_deprecated(),m=c(a.collectionName),d=u(a.collectionName),p=useCompile(),{t:h}=(0,import_react_i18next.useTranslation)(),g=(0,import_react.useField)(),_=toActionMap(g.value||[]),f=(F,j)=>{var A;const D=_==null?void 0:_[F];return D?(A=D==null?void 0:D.fields)==null?void 0:A.includes(j):!1},v=l.filter(F=>F.allowConfigureFields),C=(t=d==null?void 0:d.filter(F=>F.interface))==null?void 0:t.map(F=>{const j=x({},F);for(const A of v)j[A.name]=f(A.name,F.name);return j}),S=F=>{var j,A;_[F]?delete _[F]:_[F]={name:F,fields:(A=(j=d==null?void 0:d.filter(D=>D.interface))==null?void 0:j.map)==null?void 0:A.call(j,D=>D.name)},n(Object.values(_))},b=(F,j)=>{_[F]?(_[F].scope=j,n(Object.values(_))):(S(F),_[F].scope=j)},y={};for(const F of v)y[F.name]=((o=d==null?void 0:d.filter(j=>j.interface))==null?void 0:o.length)===((i=(r=_==null?void 0:_[F.name])==null?void 0:r.fields)==null?void 0:i.length);return(0,import_jsx_runtime.jsx)("div",{children:(0,import_jsx_runtime.jsx)(RoleResourceCollectionContext.Provider,{value:m,children:(0,import_jsx_runtime.jsxs)(import_antd_v5.FormLayout,{layout:"vertical",children:[(0,import_jsx_runtime.jsx)(import_antd_v5.FormItem,{label:h("Action permission"),children:(0,import_jsx_runtime.jsx)(import_antd.Table,{className:antTableCell,size:"small",pagination:!1,columns:[{dataIndex:"displayName",title:h("Action display name"),render:F=>p(F)},{dataIndex:"onNewRecord",title:h("Action type"),render:F=>F?(0,import_jsx_runtime.jsx)(import_antd.Tag,{color:"green",children:h("Action on new records")}):(0,import_jsx_runtime.jsx)(import_antd.Tag,{color:"geekblue",children:h("Action on existing records")})},{dataIndex:"enabled",title:h("Allow"),render:(F,j)=>(0,import_jsx_runtime.jsx)(import_antd.Checkbox,{checked:F,onChange:()=>{S(j.name)}})},{dataIndex:"scope",title:h("Data scope"),render:(F,j)=>!j.onNewRecord&&(0,import_jsx_runtime.jsx)(ScopeSelect,{value:F,onChange:A=>{b(j.name,A)}})}],dataSource:l==null?void 0:l.map(F=>{let j=!1,A=null;return _[F.name]&&(j=!0,F.onNewRecord||(A=_[F.name].scope)),P(x({},F),{enabled:j,scope:A})})})}),(0,import_jsx_runtime.jsx)(import_antd_v5.FormItem,{label:h("Field permission"),children:(0,import_jsx_runtime.jsx)(import_antd.Table,{className:antTableCell,pagination:!1,dataSource:C,columns:[{dataIndex:["uiSchema","title"],title:h("Field display name"),render:F=>p(F)},...v.map(F=>{const j=y==null?void 0:y[F.name];return{dataIndex:F.name,title:(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)(import_antd.Checkbox,{checked:j,onChange:()=>{var A;const D=_[F.name]||{name:F.name};j?D.fields=[]:D.fields=(A=d==null?void 0:d.map)==null?void 0:A.call(d,B=>B.name),_[F.name]=D,n(Object.values(_))}})," ",p(F.displayName)]}),render:(A,D)=>(0,import_jsx_runtime.jsx)(import_antd.Checkbox,{checked:A,"aria-label":`${F.name}_checkbox`,onChange:()=>{const B=_[F.name]||{name:F.name},M=B.fields||[];if(A){const w=M.indexOf(D.name);M.splice(w,1)}else M.push(D.name);B.fields=M,_[F.name]=B,n(Object.values(_))}})}})]})})]})})})}),toScopes=e=>{var t;if(!e)return{};const o={};return(t=e==null?void 0:e.forEach)==null||t.call(e,r=>{const[i,n]=r.split(":");o[i]=n||"all"}),o},toFieldValue=e=>{const t=[];for(const o in e)if(Object.prototype.hasOwnProperty.call(e,o)){const r=e[o];r==="all"?t.push(o):t.push(`${o}:${r}`)}return t},StrategyActions=(0,import_react.connect)(e=>{const{onChange:t}=e,o=useAvailableActions(),r=useCompile(),{t:i}=(0,import_react_i18next.useTranslation)(),n=(0,import_react.useField)(),a=toScopes(n.value);return(0,import_jsx_runtime.jsx)("div",{children:(0,import_jsx_runtime.jsx)(import_antd.Table,{size:"small",pagination:!1,rowKey:"name",columns:[{dataIndex:"displayName",title:i("Action display name"),render:l=>r(l)},{dataIndex:"onNewRecord",title:i("Action type"),render:l=>l?(0,import_jsx_runtime.jsx)(import_antd.Tag,{color:"green",children:i("Action on new records")}):(0,import_jsx_runtime.jsx)(import_antd.Tag,{color:"geekblue",children:i("Action on existing records")})},{dataIndex:"enabled",title:i("Allow"),render:(l,c)=>(0,import_jsx_runtime.jsx)(import_antd.Checkbox,{checked:l,"aria-label":`${c.name}_checkbox`,onChange:u=>{l?delete a[c.name]:a[c.name]="all",t(toFieldValue(a))}})},{dataIndex:"scope",title:i("Data scope"),render:(l,c)=>!c.onNewRecord&&(0,import_jsx_runtime.jsx)(import_antd.Select,{"data-testid":"select-data-scope",popupMatchSelectWidth:!1,size:"small",value:l,options:[{label:i("All records"),value:"all"},{label:i("Own records"),value:"own"}],onChange:u=>{a[c.name]=u,t(toFieldValue(a))}})}],dataSource:o==null?void 0:o.map(l=>{let c="all",u=!1;return a[l.name]&&(u=!0,c=a[l.name]),P(x({},l),{enabled:u,scope:c})})})})}),PluginManagerLink=()=>{const{t:e}=(0,import_react_i18next.useTranslation)(),t=useNavigateNoUpdate(),{token:o}=useToken(),{isMobileLayout:r}=useMobileLayout();return r?null:(0,import_jsx_runtime.jsx)(import_antd.Tooltip,{title:e("Plugin manager"),children:(0,import_jsx_runtime.jsx)(import_antd.Button,{"data-testid":"plugin-manager-button",icon:(0,import_jsx_runtime.jsx)(import_icons.ApiOutlined,{style:{color:o.colorTextHeaderMenu}}),title:e("Plugin manager"),onClick:()=>{t("/admin/pm/list")}})})},SettingsCenterDropdown=()=>{const e=useCompile(),{t}=(0,import_react_i18next.useTranslation)(),{token:o}=useToken(),r=useApp(),i=(0,import_react2.useMemo)(()=>r.pluginSettingsManager.getList().filter(a=>a.isTopLevel!==!1).map(a=>({key:a.name,icon:a.icon,label:a.link?(0,import_jsx_runtime.jsx)("div",{onClick:()=>window.open(a.link),children:e(a.title)}):(0,import_jsx_runtime.jsx)(import_react_router_dom.Link,{to:a.path,children:e(a.title)})})),[r,t]);(0,import_react2.useEffect)(()=>()=>{r.pluginSettingsManager.clearCache()},[r.pluginSettingsManager]);const{isMobileLayout:n}=useMobileLayout();return n?null:(0,import_jsx_runtime.jsx)(import_antd.Dropdown,{menu:{style:{maxHeight:"70vh",overflow:"auto"},items:i},children:(0,import_jsx_runtime.jsx)(import_antd.Button,{"data-testid":"plugin-settings-button",icon:(0,import_jsx_runtime.jsx)(import_icons.SettingOutlined,{style:{color:o.colorTextHeaderMenu}})})})},useStyles$1=(0,import_antd_style.createStyles)(({token:e})=>({cardActionDisabled:{color:e.colorTextDisabled,cursor:"not-allowed"},pageHeader:{backgroundColor:e.colorBgContainer,paddingTop:e.paddingSM,paddingBottom:0,paddingInline:e.paddingLG,".ant-page-header-footer":{marginBlockStart:"0"},"& .ant-tabs-nav":{marginBottom:0},".ant-page-header-heading-title":{color:e.colorText}},pageContent:{margin:e.marginLG},PluginDetailBaseInfo:{display:"flex",flexDirection:"column",marginBottom:e.margin},PluginDocument:{background:e.colorBgContainer,padding:e.paddingLG,height:"60vh",overflowY:"auto"},avatar:{".ant-card-meta-avatar":{marginTop:"8px",".ant-avatar":{borderRadius:"2px"}}},version:{display:"block",color:e.colorTextDescription,fontWeight:"normal",fontSize:e.fontSize}}));import_dayjs.default.extend(import_relativeTime.default);const PluginDetail=({plugin:e,onCancel:t})=>{var o,r,i,n,a,l,c,u;const{t:m}=(0,import_react_i18next.useTranslation)(),d=(0,import_react2.useMemo)(()=>[{title:m("Name"),dataIndex:"name",key:"name"},{title:m("Version range"),dataIndex:"versionRange",key:"versionRange"},{title:m("Plugin's version"),dataIndex:"packageVersion",key:"packageVersion"},{title:m("Result"),dataIndex:"result",key:"result",render:S=>(0,import_jsx_runtime.jsx)(import_antd.Tag,{color:S?"success":"error",children:S?"Yes":"No"})}],[m]),{data:p,loading:h}=useRequest({url:"pm:get",params:{filterByTk:e.name}},{refreshDeps:[e.name],ready:!!e.name}),g=(0,import_react2.useMemo)(()=>{var S,b,y;if(!((b=(S=p==null?void 0:p.data)==null?void 0:S.packageJson)!=null&&b.repository))return null;const F=(y=p==null?void 0:p.data)==null?void 0:y.packageJson.repository;return(typeof F=="string"?F:F.url).replace(/\.git$/,"").replace(/^git\+/,"")},[p]),_=(0,import_react2.useMemo)(()=>{var S;const b=(S=p==null?void 0:p.data)==null?void 0:S.packageJson.author;return b?typeof b=="string"?b:b.name:null},[p]),{styles:f,theme:v}=useStyles$1(),C=[{key:"readme",label:m("Readme"),children:(0,import_jsx_runtime.jsxs)(import_antd.Row,{gutter:20,children:[e.name&&(0,import_jsx_runtime.jsx)(import_antd.Col,{span:24,children:(0,import_jsx_runtime.jsxs)("div",{className:f.PluginDetailBaseInfo,children:[(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"secondary",children:m("Name")}),(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{strong:!0,children:e.name})]})}),e.displayName&&(0,import_jsx_runtime.jsx)(import_antd.Col,{span:24,children:(0,import_jsx_runtime.jsxs)("div",{className:f.PluginDetailBaseInfo,children:[(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"secondary",children:m("DisplayName")}),(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{strong:!0,children:e.displayName})]})}),(0,import_jsx_runtime.jsx)(import_antd.Col,{span:24,children:(0,import_jsx_runtime.jsxs)("div",{className:f.PluginDetailBaseInfo,children:[(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"secondary",children:m("PackageName")}),(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{strong:!0,children:e.packageName})]})}),g&&(0,import_jsx_runtime.jsx)(import_antd.Col,{span:24,children:(0,import_jsx_runtime.jsxs)("div",{className:f.PluginDetailBaseInfo,children:[(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"secondary",children:m("Repository")}),(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{strong:!0,children:g})]})}),((o=p==null?void 0:p.data)==null?void 0:o.homepage)&&(0,import_jsx_runtime.jsx)(import_antd.Col,{span:24,children:(0,import_jsx_runtime.jsxs)("div",{className:f.PluginDetailBaseInfo,children:[(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"secondary",children:m("Homepage")}),(0,import_jsx_runtime.jsx)("a",{href:(r=p==null?void 0:p.data)==null?void 0:r.homepage,target:"_blank",rel:"noreferrer",children:(i=p==null?void 0:p.data)==null?void 0:i.homepage})]})}),e.description&&(0,import_jsx_runtime.jsx)(import_antd.Col,{span:24,children:(0,import_jsx_runtime.jsxs)("div",{className:f.PluginDetailBaseInfo,children:[(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"secondary",children:m("Description")}),(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{strong:!0,children:e.description})]})}),((n=p==null?void 0:p.data)==null?void 0:n.packageJson.license)&&(0,import_jsx_runtime.jsx)(import_antd.Col,{span:24,children:(0,import_jsx_runtime.jsxs)("div",{className:f.PluginDetailBaseInfo,children:[(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"secondary",children:m("License")}),(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{strong:!0,children:(a=p==null?void 0:p.data)==null?void 0:a.packageJson.license})]})}),_&&(0,import_jsx_runtime.jsx)(import_antd.Col,{span:24,children:(0,import_jsx_runtime.jsxs)("div",{className:f.PluginDetailBaseInfo,children:[(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"secondary",children:m("Author")}),(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{strong:!0,children:_})]})}),(0,import_jsx_runtime.jsx)(import_antd.Col,{span:24,children:(0,import_jsx_runtime.jsxs)("div",{className:f.PluginDetailBaseInfo,children:[(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"secondary",children:m("Version")}),(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{strong:!0,children:e==null?void 0:e.version})]})})]})},{key:"dependencies",label:m("Dependencies compatibility check"),children:(0,import_jsx_runtime.jsx)(import_jsx_runtime.Fragment,{children:((l=p==null?void 0:p.data)==null?void 0:l.depsCompatible)===!1?(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"danger",children:m("`dist/externalVersion.js` not found or failed to `require`. Please rebuild this plugin.")}):(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[!((c=p==null?void 0:p.data)!=null&&c.isCompatible)&&(0,import_jsx_runtime.jsx)(import_antd.Alert,{showIcon:!0,type:"error",message:m("Plugin dependencies check failed, you should change the dependent version to meet the version requirements.")}),(0,import_jsx_runtime.jsx)(import_antd.Table,{style:{marginTop:v.margin},rowKey:"name",pagination:!1,columns:d,dataSource:(u=p==null?void 0:p.data)==null?void 0:u.depsCompatible})]})})}];return(0,import_jsx_runtime.jsx)(import_antd.Modal,{open:!!e,footer:!1,destroyOnClose:!0,width:600,onCancel:t,children:h?(0,import_jsx_runtime.jsx)(import_antd.Spin,{}):e&&(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)(import_antd.Typography.Title,{level:3,children:e.packageName}),(0,import_jsx_runtime.jsx)(import_antd.Space,{split:(0,import_jsx_runtime.jsx)("span",{children:" • "}),children:(0,import_jsx_runtime.jsx)("span",{children:e.version})}),(0,import_jsx_runtime.jsx)(import_antd.Tabs,{style:{minHeight:"50vh"},items:C,defaultActiveKey:e.isCompatible?void 0:"dependencies"})]})})},PluginNpmForm=({onClose:e,isUpgrade:t,pluginData:o})=>{import_antd.App.useApp();const r=[],i=()=>{const c=useAPIClient();(0,import_react_i18next.useTranslation)();const u=(0,import_react.useForm)();return{run(){return q(this,null,function*(){yield u.submit(),c.request({url:t?"pm:update":"pm:add",method:"post",data:x({},u.values)}),e(!0)})}}},n=c=>useRequest(()=>Promise.resolve({data:t?(0,import_lodash.pick)(o,["name","packageName","version"]):{}}),c),a=()=>({run(){e()}}),l=(0,import_react2.useMemo)(()=>{const c=(0,import_shared.uid)(),u={type:"object",properties:{[c]:{"x-decorator":"Form","x-component":"div",type:"void","x-decorator-props":{useValues:"{{ useValuesFromProps }}"},properties:{packageName:{type:"string",title:"{{t('Npm package name')}}","x-decorator":"FormItem","x-component":"Input",required:!0,"x-component-props":{disabled:!0}},registry:{type:"string",title:"{{t('Registry url')}}",default:"https://registry.npmjs.org/","x-decorator":"FormItem","x-component":"Input","x-decorator-props":{tooltip:"Example: https://registry.npmjs.org/"}},authToken:{type:"string",title:"{{t('Npm authToken')}}","x-decorator":"FormItem","x-component":"Input"},version:{type:"string",title:"{{t('Version')}}","x-decorator":"FormItem","x-component":"Input"},footer:{type:"void","x-component":"ActionBar","x-component-props":{layout:"one-column",style:{justifyContent:"right"}},properties:{cancel:{title:"Cancel","x-component":"Action","x-component-props":{useAction:"{{ useCancel }}"}},submit:{title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",htmlType:"submit",useAction:"{{ useSaveValues }}"}}}}}}}};return u.properties[c].properties.packageName["x-component-props"].disabled=t,t||delete u.properties[c].properties.version,u},[t]);return(0,import_jsx_runtime.jsx)(SchemaComponent,{scope:{useCancel:a,useSaveValues:i,versionList:r,useValuesFromProps:n},schema:l})};PluginNpmForm.displayName="PluginNpmForm";const PluginUploadForm=({onClose:e,pluginData:t,isUpgrade:o})=>{const{message:r}=import_antd.App.useApp(),i=()=>{const l=useAPIClient(),{t:c}=(0,import_react_i18next.useTranslation)(),u=(0,import_react.useForm)();return{run(){return q(this,null,function*(){var m,d;yield u.submit();const p=new FormData;p.append("file",(d=(m=u.values.uploadFile)==null?void 0:m[0])==null?void 0:d.originFileObj),t!=null&&t.packageName&&p.append("packageName",t.packageName),yield l.request({url:`pm:${o?"update":"add"}`,method:"post",data:p}),import_antd.Modal.info({icon:null,width:520,content:(0,import_jsx_runtime.jsx)(import_antd.Result,{icon:(0,import_jsx_runtime.jsx)(import_icons.LoadingOutlined,{}),title:c("Plugin uploading"),subTitle:c("Plugin is uploading, please wait...")}),footer:null}),e(!0);function h(){l.silent().request({url:"__health_check",method:"get"}).then(g=>{(g==null?void 0:g.data)==="ok"&&window.location.reload()}).catch(g=>{})}setInterval(h,1e3)})}}},n=()=>({run(){e()}}),a=(0,import_react2.useMemo)(()=>({type:"object",properties:{[(0,import_shared.uid)()]:{"x-decorator":"Form","x-component":"div",type:"void",properties:{uploadFile:{type:"string","x-decorator":"FormItem","x-component":"Upload.Dragger",required:!0,"x-component-props":{action:"",multiple:!1,maxCount:1,height:"150px",tipContent:"{{t('Drag and drop the file here or click to upload, file size should not exceed 30M')}}",beforeUpload:l=>(/\.(zip|rar|tar|gz|bz2|tgz)$/.test(l.name)||r.error("File only support zip, rar, tar, gz, bz2!"),l.size/1024/1024<30||r.error("File must smaller than 30MB!"),!1)}},footer:{type:"void","x-component":"ActionBar","x-component-props":{layout:"one-column",style:{justifyContent:"right"}},properties:{cancel:{title:"Cancel","x-component":"Action","x-component-props":{useAction:"{{ useCancel }}"}},submit:{title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",htmlType:"submit",useAction:"{{ useSaveValues }}"}}}}}}}}),[r]);return(0,import_jsx_runtime.jsx)(SchemaComponent,{scope:{useCancel:n,useSaveValues:i},schema:a})},PluginUrlForm=({onClose:e,pluginData:t,isUpgrade:o})=>{import_antd.App.useApp();const r=()=>{const l=useAPIClient();(0,import_react_i18next.useTranslation)();const c=(0,import_react.useForm)();return{run(){return q(this,null,function*(){const u=c.values.compressedFileUrl;if(!u)return;yield c.submit();const m={compressedFileUrl:u};t!=null&&t.packageName&&(m.packageName=t.packageName),l.request({url:`pm:${o?"update":"add"}`,method:"post",data:m}),e(!0)})}}},i=l=>useRequest(()=>Promise.resolve({data:{compressedFileUrl:t.compressedFileUrl}}),l),n=()=>({run(){e()}}),a=(0,import_react2.useMemo)(()=>({type:"object",properties:{[(0,import_shared.uid)()]:{"x-decorator":"Form","x-component":"div",type:"void","x-decorator-props":{useValues:"{{ useValuesFromProps }}"},properties:{compressedFileUrl:{type:"string","x-decorator":"FormItem","x-component":"Input",required:!0},footer:{type:"void","x-component":"ActionBar","x-component-props":{layout:"one-column",style:{justifyContent:"right"}},properties:{cancel:{title:"Cancel","x-component":"Action","x-component-props":{useAction:"{{ useCancel }}"}},submit:{title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",htmlType:"submit",useAction:"{{ useSaveValues }}"}}}}}}}}),[]);return(0,import_jsx_runtime.jsx)(SchemaComponent,{scope:{useCancel:n,useValuesFromProps:i,useSaveValues:r},schema:a})},PluginUpgradeModal=({onClose:e,isShow:t,pluginData:o})=>{const{t:r}=(0,import_react_i18next.useTranslation)(),{theme:i}=useStyles$1(),[n,a]=(0,import_react2.useState)("npm");return(0,import_jsx_runtime.jsxs)(import_antd.Modal,{onCancel:()=>e(),footer:null,destroyOnClose:!0,title:r("Update plugin"),width:580,open:t,children:[(0,import_jsx_runtime.jsx)("div",{style:{marginTop:i.marginLG,marginBottom:i.marginLG},children:(0,import_jsx_runtime.jsxs)(import_antd.Radio.Group,{optionType:"button",defaultValue:n,onChange:l=>a(l.target.value),children:[(0,import_jsx_runtime.jsx)(import_antd.Radio,{value:"npm",children:r("Npm package")}),(0,import_jsx_runtime.jsx)(import_antd.Radio,{value:"upload",children:r("Upload plugin")}),(0,import_jsx_runtime.jsx)(import_antd.Radio,{value:"url",children:r("Compressed file url")})]})}),n==="npm"&&(0,import_jsx_runtime.jsx)(PluginNpmForm,{isUpgrade:!0,onClose:e,pluginData:o}),n==="upload"&&(0,import_jsx_runtime.jsx)(PluginUploadForm,{isUpgrade:!0,onClose:e,pluginData:o}),n==="url"&&(0,import_jsx_runtime.jsx)(PluginUrlForm,{isUpgrade:!0,onClose:e,pluginData:o})]})};function PluginInfo(e){const{data:t,onClick:o}=e,r=useApp(),{name:i,displayName:n,isCompatible:a,packageName:l,updatable:c,builtIn:u,enabled:m,removable:d,description:p,error:h,homepage:g}=t,{styles:_,theme:f}=useStyles$1(),v=(0,import_react_router_dom.useNavigate)(),{t:C}=(0,import_react_i18next.useTranslation)(),S=useAPIClient(),{modal:b}=import_antd.App.useApp(),[y,F]=(0,import_react2.useState)(!1),j=n||i||l;return(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[y&&(0,import_jsx_runtime.jsx)(PluginUpgradeModal,{isShow:y,pluginData:t,onClose:A=>{F(!1)}}),(0,import_jsx_runtime.jsx)(import_antd.Card,{role:"button","aria-label":j,size:"small",variant:"borderless",onClick:()=>{!h&&o()},styles:{body:{paddingTop:10},header:{border:"none",minHeight:"inherit",paddingTop:14}},title:(0,import_jsx_runtime.jsxs)(import_antd.Space,{children:[h?(0,import_jsx_runtime.jsx)(import_antd.Tooltip,{title:C("Plugin loading failed. Please check the server logs."),children:(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"danger",children:(0,import_jsx_runtime.jsx)(import_icons.CloseCircleFilled,{})})}):null,a?null:(0,import_jsx_runtime.jsx)(import_antd.Tooltip,{title:C("Plugin dependencies check failed"),children:(0,import_jsx_runtime.jsx)(import_antd.Typography.Text,{type:"warning",children:(0,import_jsx_runtime.jsx)(import_icons.WarningFilled,{})})}),(0,import_jsx_runtime.jsx)("div",{children:j})]}),hoverable:!0,className:import_css.css`
|
|
1650
|
+
display: flex;
|
|
1651
|
+
flex-direction: column;
|
|
1652
|
+
|
|
1653
|
+
.ant-card-body {
|
|
1654
|
+
flex-grow: 1;
|
|
1655
|
+
}
|
|
1656
|
+
|
|
1650
1657
|
.ant-card-actions {
|
|
1651
1658
|
li .ant-space {
|
|
1652
1659
|
gap: 2px !important;
|
|
@@ -1667,7 +1674,12 @@ https://requirejs.org/docs/errors.html#`+e);return i.requireType=e,i.requireModu
|
|
|
1667
1674
|
padding-left: 16px;
|
|
1668
1675
|
}
|
|
1669
1676
|
}
|
|
1670
|
-
`,actions:[(0,import_jsx_runtime.jsxs)(import_antd.Space,{split:(0,import_jsx_runtime.jsx)(import_antd.Divider,{type:"vertical"}),children:[g&&(0,import_jsx_runtime.jsxs)("a",{href:g,target:"_blank",onClick:A=>{A.stopPropagation()},rel:"noreferrer",children:[(0,import_jsx_runtime.jsx)(import_icons.ReadOutlined,{})," ",C("Docs")]},"5"),c&&(0,import_jsx_runtime.jsxs)("a",{onClick:A=>{A.stopPropagation(),F(!0)},children:[(0,import_jsx_runtime.jsx)(import_icons.ReloadOutlined,{})," ",C("Update")]},"3"),m&&r.pluginSettingsManager.has(i)&&(0,import_jsx_runtime.jsxs)("a",{onClick:A=>{A.stopPropagation(),v(r.pluginSettingsManager.getRoutePath(i))},children:[(0,import_jsx_runtime.jsx)(import_icons.SettingOutlined,{})," ",C("Settings")]}),d&&(0,import_jsx_runtime.jsx)(import_antd.Popconfirm,{disabled:u,title:C("Are you sure to delete this plugin?"),onConfirm:A=>q(this,null,function*(){A.stopPropagation(),yield S.request({url:"pm:remove",params:{filterByTk:i}}),import_antd.Modal.info({icon:null,width:520,content:(0,import_jsx_runtime.jsx)(import_antd.Result,{icon:(0,import_jsx_runtime.jsx)(import_icons.LoadingOutlined,{}),title:C("Plugin removing"),subTitle:C("Plugin is removing, please wait...")}),footer:null});function D(){S.silent().request({url:"__health_check",method:"get"}).then(B=>{(B==null?void 0:B.data)==="ok"&&window.location.reload()}).catch(B=>{})}setInterval(D,1e3)}),onCancel:A=>A.stopPropagation(),okText:C("Yes"),cancelText:C("No"),children:(0,import_jsx_runtime.jsxs)("a",{onClick:A=>{A.stopPropagation()},className:(0,import_classnames.default)({[_.cardActionDisabled]:u}),children:[(0,import_jsx_runtime.jsx)(import_icons.DeleteOutlined,{})," ",C("Remove")]})},"delete")]},"1"),(0,import_jsx_runtime.jsx)(import_antd.Switch,{"aria-label":"enable",size:"small",disabled:u||h,onChange:(A,D)=>q(this,null,function*(){if(D.stopPropagation(),!a&&A){b.confirm({title:C("Plugin dependency version mismatch"),content:C("The current dependency version of the plugin does not match the version of the application and may not work properly. Are you sure you want to continue enabling the plugin?"),onOk:()=>q(this,null,function*(){yield S.request({url:"pm:enable",params:{filterByTk:i}})})});return}A?yield S.request({url:"pm:enable",params:{filterByTk:i}}):b.confirm({title:C("Are you sure to disable this plugin?"),onOk:()=>q(this,null,function*(){yield S.request({url:"pm:disable",params:{filterByTk:i}})})})}),checked:!!m},"enable")].filter(Boolean),children:(0,import_jsx_runtime.jsx)(import_antd.Card.Meta,{description:
|
|
1677
|
+
`,actions:[(0,import_jsx_runtime.jsxs)(import_antd.Space,{split:(0,import_jsx_runtime.jsx)(import_antd.Divider,{type:"vertical"}),children:[g&&(0,import_jsx_runtime.jsxs)("a",{href:g,target:"_blank",onClick:A=>{A.stopPropagation()},rel:"noreferrer",children:[(0,import_jsx_runtime.jsx)(import_icons.ReadOutlined,{})," ",C("Docs")]},"5"),c&&(0,import_jsx_runtime.jsxs)("a",{onClick:A=>{A.stopPropagation(),F(!0)},children:[(0,import_jsx_runtime.jsx)(import_icons.ReloadOutlined,{})," ",C("Update")]},"3"),m&&r.pluginSettingsManager.has(i)&&(0,import_jsx_runtime.jsxs)("a",{onClick:A=>{A.stopPropagation(),v(r.pluginSettingsManager.getRoutePath(i))},children:[(0,import_jsx_runtime.jsx)(import_icons.SettingOutlined,{})," ",C("Settings")]}),d&&(0,import_jsx_runtime.jsx)(import_antd.Popconfirm,{disabled:u,title:C("Are you sure to delete this plugin?"),onConfirm:A=>q(this,null,function*(){A.stopPropagation(),yield S.request({url:"pm:remove",params:{filterByTk:i}}),import_antd.Modal.info({icon:null,width:520,content:(0,import_jsx_runtime.jsx)(import_antd.Result,{icon:(0,import_jsx_runtime.jsx)(import_icons.LoadingOutlined,{}),title:C("Plugin removing"),subTitle:C("Plugin is removing, please wait...")}),footer:null});function D(){S.silent().request({url:"__health_check",method:"get"}).then(B=>{(B==null?void 0:B.data)==="ok"&&window.location.reload()}).catch(B=>{})}setInterval(D,1e3)}),onCancel:A=>A.stopPropagation(),okText:C("Yes"),cancelText:C("No"),children:(0,import_jsx_runtime.jsxs)("a",{onClick:A=>{A.stopPropagation()},className:(0,import_classnames.default)({[_.cardActionDisabled]:u}),children:[(0,import_jsx_runtime.jsx)(import_icons.DeleteOutlined,{})," ",C("Remove")]})},"delete")]},"1"),(0,import_jsx_runtime.jsx)(import_antd.Switch,{"aria-label":"enable",size:"small",disabled:u||h,onChange:(A,D)=>q(this,null,function*(){if(D.stopPropagation(),!a&&A){b.confirm({title:C("Plugin dependency version mismatch"),content:C("The current dependency version of the plugin does not match the version of the application and may not work properly. Are you sure you want to continue enabling the plugin?"),onOk:()=>q(this,null,function*(){yield S.request({url:"pm:enable",params:{filterByTk:i}})})});return}A?yield S.request({url:"pm:enable",params:{filterByTk:i}}):b.confirm({title:C("Are you sure to disable this plugin?"),onOk:()=>q(this,null,function*(){yield S.request({url:"pm:disable",params:{filterByTk:i}})})})}),checked:!!m},"enable")].filter(Boolean),children:(0,import_jsx_runtime.jsx)(import_antd.Card.Meta,{description:(0,import_jsx_runtime.jsx)(import_antd.Typography.Paragraph,{type:"secondary",className:import_css.css`
|
|
1678
|
+
display: -webkit-box;
|
|
1679
|
+
-webkit-box-orient: vertical;
|
|
1680
|
+
-webkit-line-clamp: 2;
|
|
1681
|
+
overflow: hidden;
|
|
1682
|
+
`,children:p})})})]})}const PluginCard=e=>{const{data:t}=e,[o,r]=(0,import_react2.useState)(void 0);return(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[o&&(0,import_jsx_runtime.jsx)(PluginDetail,{plugin:o,onCancel:()=>r(void 0)}),(0,import_jsx_runtime.jsx)(PluginInfo,{onClick:()=>{r(t)},data:t})]})},PluginAddModal=({onClose:e,isShow:t})=>{const{t:o}=(0,import_react_i18next.useTranslation)(),{theme:r}=useStyles$1(),[i,n]=(0,import_react2.useState)("npm");return(0,import_jsx_runtime.jsxs)(import_antd.Modal,{onCancel:()=>e(),footer:null,destroyOnClose:!0,title:o("Add & Update"),width:580,open:t,children:[(0,import_jsx_runtime.jsx)("div",{style:{marginTop:r.marginLG,marginBottom:r.marginLG},children:(0,import_jsx_runtime.jsxs)(import_antd.Radio.Group,{optionType:"button",defaultValue:i,onChange:a=>n(a.target.value),children:[(0,import_jsx_runtime.jsx)(import_antd.Radio,{value:"npm",children:o("Npm package")}),(0,import_jsx_runtime.jsx)(import_antd.Radio,{value:"upload",children:o("Upload plugin")}),(0,import_jsx_runtime.jsx)(import_antd.Radio,{value:"url",children:o("Compressed file url")})]})}),i==="npm"&&(0,import_jsx_runtime.jsx)(PluginNpmForm,{onClose:e,isUpgrade:!1}),i==="upload"&&(0,import_jsx_runtime.jsx)(PluginUploadForm,{onClose:e,isUpgrade:!1}),i==="url"&&(0,import_jsx_runtime.jsx)(PluginUrlForm,{onClose:e})]})};function hasIntersection(e,t){return!Array.isArray(e)||!Array.isArray(t)?!1:e.some(o=>t.includes(o))}function BulkEnableButton({plugins:e=[]}){const{t}=(0,import_react_i18next.useTranslation)(),o=useAPIClient(),[r,i]=(0,import_react2.useState)(e.filter(u=>!u.enabled)),[n,a]=(0,import_react2.useState)(!1),[l,c]=(0,import_react2.useState)([]);return(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)(import_antd.Button,{onClick:()=>a(!0),children:t("Bulk enable")}),(0,import_jsx_runtime.jsxs)(import_antd.Modal,{width:1e3,title:t("Bulk enable"),open:n,onOk:()=>q(this,null,function*(){yield o.request({url:"pm:enable",params:{filterByTk:l}}),a(!1)}),onCancel:()=>{c([]),a(!1)},children:[(0,import_jsx_runtime.jsx)(import_antd.Input,{style:{marginBottom:"1em"},placeholder:t("Search plugin..."),onChange:u=>{i(e.filter(m=>{var d;const p=u.target.value;return!m.enabled&&(m.displayName.toLowerCase().includes(p.toLowerCase())||((d=m.description)==null?void 0:d.toLowerCase().includes(p.toLowerCase())))}))}}),(0,import_jsx_runtime.jsx)(import_antd.Table,{rowSelection:{type:"checkbox",selectedRowKeys:l,onChange(u){const m=r.map(d=>d.name);c(d=>u.length===0?d.filter(p=>!m.includes(p)):u.length===m.length?import_lodash.default.uniq([...d,...u]):d)},onSelect(u){c(m=>m.includes(u.name)?m.filter(d=>d!==u.name):m.concat(u.name))}},rowKey:"name",scroll:{y:"60vh"},size:"small",pagination:!1,columns:[{title:t("Plugin"),dataIndex:"displayName",ellipsis:!0},{title:t("Description"),dataIndex:"description",ellipsis:!0,width:300},{title:t("Package name"),dataIndex:"packageName",width:300,ellipsis:!0}],dataSource:r})]})]})}const LocalPlugins=()=>{const{t:e}=(0,import_react_i18next.useTranslation)(),{theme:t}=useStyles$1(),{data:o,loading:r,refresh:i}=useRequest({url:"pm:list"}),n=(0,import_react2.useMemo)(()=>{let S=(o==null?void 0:o.data)||[];return S=S.reverse(),[{type:"All",list:S},{type:"Built-in",list:import_lodash.default.filter(S,b=>b.builtIn)},{type:"Enabled",list:import_lodash.default.filter(S,b=>b.enabled)},{type:"Not enabled",list:import_lodash.default.filter(S,b=>!b.enabled)},{type:"Problematic",list:import_lodash.default.filter(S,b=>!b.isCompatible)}]},[o==null?void 0:o.data]),[a,l]=(0,import_react2.useState)(0),[c,u]=(0,import_react2.useState)(!1),[m,d]=(0,import_react2.useState)(""),[p,h]=(0,import_react2.useState)(null),g=(0,import_ahooks.useDebounce)(m,{wait:100}),_=["Data model tools","Data sources","Collections","Collection fields","Blocks","Actions","Workflow","Users & permissions","Authentication","Notification","System management","Security","Logging and monitoring","Others"],f=(0,import_react2.useMemo)(()=>_.map(S=>{if(S==="Others"){const y=o==null?void 0:o.data.filter(F=>!hasIntersection(F.keywords,_));return{key:S,list:y}}const b=o==null?void 0:o.data.filter(y=>{var F;return(F=y.keywords)==null?void 0:F.includes(S)});return{key:S,list:b}}),[_]),v=(0,import_react2.useMemo)(()=>{var S;let b=((S=n[a])==null?void 0:S.list)||[];!a&&p?b=f.find(F=>F.key===p).list:a&&p&&(b=f.find(F=>F.key===p).list.filter(F=>b.find(j=>j.name===F.name)));const y=g.toLocaleLowerCase().trim();return y&&(b=import_lodash.default.filter(b,F=>String(F.displayName||"").toLocaleLowerCase().includes(y)||String(F.description||"").toLocaleLowerCase().includes(y))),b.sort((F,j)=>F.displayName.localeCompare(j.displayName))},[a,n,g,p]),C=S=>{d(S)};return r?(0,import_jsx_runtime.jsx)(import_antd.Spin,{}):(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)(PluginAddModal,{isShow:c,onClose:S=>{u(!1)}}),(0,import_jsx_runtime.jsxs)("div",{style:{width:"100%"},children:[(0,import_jsx_runtime.jsxs)("div",{style:{marginBottom:t.marginLG},className:import_css.css`
|
|
1671
1683
|
justify-content: space-between;
|
|
1672
1684
|
display: flex;
|
|
1673
1685
|
align-items: center;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nocobase/client",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.36",
|
|
4
4
|
"license": "AGPL-3.0",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "es/index.mjs",
|
|
@@ -26,9 +26,9 @@
|
|
|
26
26
|
"@formily/reactive-react": "^2.2.27",
|
|
27
27
|
"@formily/shared": "^2.2.27",
|
|
28
28
|
"@formily/validator": "^2.2.27",
|
|
29
|
-
"@nocobase/evaluators": "1.9.
|
|
30
|
-
"@nocobase/sdk": "1.9.
|
|
31
|
-
"@nocobase/utils": "1.9.
|
|
29
|
+
"@nocobase/evaluators": "1.9.36",
|
|
30
|
+
"@nocobase/sdk": "1.9.36",
|
|
31
|
+
"@nocobase/utils": "1.9.36",
|
|
32
32
|
"ahooks": "^3.7.2",
|
|
33
33
|
"antd": "5.24.2",
|
|
34
34
|
"antd-mobile": "^5.41.1",
|
|
@@ -85,5 +85,5 @@
|
|
|
85
85
|
"dumi": "2.2.14",
|
|
86
86
|
"dumi-theme-nocobase": "^0.2.28"
|
|
87
87
|
},
|
|
88
|
-
"gitHead": "
|
|
88
|
+
"gitHead": "974d939c227392b8b2fa04078f2b67a810dc48d3"
|
|
89
89
|
}
|