@tachybase/module-multi-app 1.3.19 → 1.3.21

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.
@@ -16,8 +16,16 @@ export declare const collectionMultiApp: {
16
16
  'x-validator': string;
17
17
  'x-content'?: undefined;
18
18
  enum?: undefined;
19
+ 'x-component-props'?: undefined;
19
20
  };
20
21
  defaultValue?: undefined;
22
+ target?: undefined;
23
+ through?: undefined;
24
+ foreignKey?: undefined;
25
+ otherKey?: undefined;
26
+ collectionName?: undefined;
27
+ targetKey?: undefined;
28
+ sourceKey?: undefined;
21
29
  } | {
22
30
  type: string;
23
31
  name: string;
@@ -30,10 +38,18 @@ export declare const collectionMultiApp: {
30
38
  'x-validator'?: undefined;
31
39
  'x-content'?: undefined;
32
40
  enum?: undefined;
41
+ 'x-component-props'?: undefined;
33
42
  };
34
43
  primaryKey?: undefined;
35
44
  prefix?: undefined;
36
45
  defaultValue?: undefined;
46
+ target?: undefined;
47
+ through?: undefined;
48
+ foreignKey?: undefined;
49
+ otherKey?: undefined;
50
+ collectionName?: undefined;
51
+ targetKey?: undefined;
52
+ sourceKey?: undefined;
37
53
  } | {
38
54
  type: string;
39
55
  name: string;
@@ -46,10 +62,18 @@ export declare const collectionMultiApp: {
46
62
  required?: undefined;
47
63
  'x-validator'?: undefined;
48
64
  enum?: undefined;
65
+ 'x-component-props'?: undefined;
49
66
  };
50
67
  primaryKey?: undefined;
51
68
  prefix?: undefined;
52
69
  defaultValue?: undefined;
70
+ target?: undefined;
71
+ through?: undefined;
72
+ foreignKey?: undefined;
73
+ otherKey?: undefined;
74
+ collectionName?: undefined;
75
+ targetKey?: undefined;
76
+ sourceKey?: undefined;
53
77
  } | {
54
78
  type: string;
55
79
  name: string;
@@ -66,8 +90,51 @@ export declare const collectionMultiApp: {
66
90
  required?: undefined;
67
91
  'x-validator'?: undefined;
68
92
  'x-content'?: undefined;
93
+ 'x-component-props'?: undefined;
69
94
  };
70
95
  primaryKey?: undefined;
71
96
  prefix?: undefined;
97
+ target?: undefined;
98
+ through?: undefined;
99
+ foreignKey?: undefined;
100
+ otherKey?: undefined;
101
+ collectionName?: undefined;
102
+ targetKey?: undefined;
103
+ sourceKey?: undefined;
104
+ } | {
105
+ interface: string;
106
+ type: string;
107
+ name: string;
108
+ target: string;
109
+ through: string;
110
+ foreignKey: string;
111
+ otherKey: string;
112
+ collectionName: string;
113
+ targetKey: string;
114
+ sourceKey: string;
115
+ uiSchema: {
116
+ type: string;
117
+ title: string;
118
+ 'x-component': string;
119
+ 'x-component-props': {
120
+ service: {
121
+ params: {
122
+ fields: string[];
123
+ };
124
+ };
125
+ multiple: boolean;
126
+ fieldNames: {
127
+ label: string;
128
+ value: string;
129
+ };
130
+ };
131
+ required?: undefined;
132
+ 'x-validator'?: undefined;
133
+ 'x-content'?: undefined;
134
+ enum?: undefined;
135
+ };
136
+ primaryKey?: undefined;
137
+ prefix?: undefined;
138
+ defaultValue?: undefined;
72
139
  })[];
73
140
  };
@@ -1,11 +1,11 @@
1
- (function(i,t){typeof exports=="object"&&typeof module!="undefined"?t(exports,require("@tachybase/client"),require("react/jsx-runtime"),require("antd"),require("react-router-dom"),require("react-i18next"),require("react"),require("@tachybase/schema"),require("@tachybase/utils/client"),require("@ant-design/icons")):typeof define=="function"&&define.amd?define(["exports","@tachybase/client","react/jsx-runtime","antd","react-router-dom","react-i18next","react","@tachybase/schema","@tachybase/utils/client","@ant-design/icons"],t):(i=typeof globalThis!="undefined"?globalThis:i||self,t(i["@tachybase/module-multi-app"]={},i["@tachybase/client"],i.jsxRuntime,i.antd,i["react-router-dom"],i["react-i18next"],i.react,i["@tachybase/schema"],i["@tachybase/utils"],i["@ant-design/icons"]))})(this,function(i,t,n,c,I,P,b,y,f,m){"use strict";var fe=Object.defineProperty,he=Object.defineProperties;var Ae=Object.getOwnPropertyDescriptors;var L=Object.getOwnPropertySymbols;var ge=Object.prototype.hasOwnProperty,be=Object.prototype.propertyIsEnumerable;var E=(i,t,n)=>t in i?fe(i,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):i[t]=n,A=(i,t)=>{for(var n in t||(t={}))ge.call(t,n)&&E(i,n,t[n]);if(L)for(var n of L(t))be.call(t,n)&&E(i,n,t[n]);return i},v=(i,t)=>he(i,Ae(t));var g=(i,t,n)=>new Promise((c,I)=>{var P=f=>{try{y(n.next(f))}catch(m){I(m)}},b=f=>{try{y(n.throw(f))}catch(m){I(m)}},y=f=>f.done?c(f.value):Promise.resolve(f.value).then(P,b);y((n=n.apply(i,t)).next())});const C="multi-app",_="subAppsChange",h="subAppsChange",S=()=>{const{t:e}=P.useTranslation([C,"core"]);return{t:e}},l=e=>`{{t("${e}", { ns: ["${C}", "client"] })}}`,K={type:"void","x-component":"CardItem","x-toolbar":"BlockSchemaToolbar","x-settings":"blockSettings:table",properties:{app:{type:"void","x-component":"AppManager","x-component-props":{admin:!1}}}},F=()=>{const{insert:e}=t.useSchemaInitializer(),o=t.useSchemaInitializerItem(),a=b.useCallback(()=>e(K),[e]);return n.jsx(t.SchemaInitializerItem,v(A({},o),{onClick:a}))},U=e=>{const o=t.useApp(),a=e.value&&n.jsx("a",{target:"_blank",href:o.getRouteUrl(`/apps/${e.value}/admin`),rel:"noreferrer",children:e.value});return n.jsxs("div",{style:e.style,children:[e.addonBefore,e.prefix,a,e.suffix,e.addonAfter]})},j=y.connect(c.Input,y.mapReadPretty(U)),H=t.createStyles(({token:e})=>({button:{color:e.colorTextHeaderMenu+" !important"}})),G=()=>{const{styles:e}=H(),{data:o,run:a}=t.useRequest({resource:"applications",action:"listPinned"},{manual:!0}),{t:s}=S(),r=t.useApp(),d=[...((o==null?void 0:o.data)||[]).map(p=>{let u=r.getRouteUrl(`/apps/${p.name}/admin/`);return p.cname&&(u=`//${p.cname}`),{key:p.name,label:n.jsx("a",{href:u,target:"_blank",rel:"noopener noreferrer",children:p.displayName||p.name})}}),{key:".manager",label:n.jsx(I.Link,{to:r.systemSettingsManager.getRoutePath("system-services."+C),children:s("Manage applications")})}];return n.jsx(c.Dropdown,{onOpenChange:p=>{a()},menu:{items:d},children:n.jsx(c.Button,{className:e.button,title:"Apps",icon:n.jsx(t.Icon,{type:"AppstoreOutlined"})})})},Y=e=>n.jsx(t.PinnedPluginListProvider,{items:{am:{order:201,component:"MultiAppManager",pin:!0,snippet:"pm.*",belongTo:"pinnedmenu"}},children:n.jsx(t.SchemaComponentOptions,{components:{MultiAppManager:G,AppNameInput:j,MultiAppBlockInitializer:F},children:e.children})});class W extends t.Plugin{load(){return g(this,null,function*(){this.app.use(Y)})}}const M={name:"applications",filterTargetKey:"name",targetKey:"name",fields:[{type:"uid",name:"name",primaryKey:!0,prefix:"a",interface:"input",uiSchema:{type:"string",title:l("App ID"),required:!0,"x-component":"Input","x-validator":"uid"}},{type:"string",name:"displayName",interface:"input",uiSchema:{type:"string",title:l("App display name"),required:!0,"x-component":"Input"}},{type:"string",name:"pinned",interface:"checkbox",uiSchema:{type:"boolean","x-content":l("Pin to menu"),"x-component":"Checkbox"}},{type:"string",name:"status",interface:"radioGroup",defaultValue:"pending",uiSchema:{type:"string",title:l("App status"),enum:[{label:l("Initializing"),value:"initializing"},{label:l("Initialized"),value:"initialized"},{label:l("Running"),value:"running"},{label:l("Commanding"),value:"commanding"},{label:l("Stopped"),value:"stopped"},{label:l("Error"),value:"error"},{label:l("Not found"),value:"not_found"}],"x-component":"Radio.Group"}},{type:"string",name:"isTemplate",interface:"checkbox",uiSchema:{type:"boolean","x-content":l("Is template"),"x-component":"Checkbox"}}]},w={type:"void","x-component":"div",properties:{displayName:{"x-component":"CollectionField","x-decorator":"FormItem"},name:{"x-component":"CollectionField","x-decorator":"FormItem","x-disabled":"{{ !createOnly }}","x-hidden":"{{ !admin }}"},cnamePrefix:{title:l("Custom domain prefix"),"x-component":"Input","x-decorator":"FormItem","x-validator":`{{(value) => {
1
+ (function(i,t){typeof exports=="object"&&typeof module!="undefined"?t(exports,require("@tachybase/client"),require("react/jsx-runtime"),require("antd"),require("react-router-dom"),require("react-i18next"),require("react"),require("@tachybase/schema"),require("@tachybase/utils/client"),require("@ant-design/icons")):typeof define=="function"&&define.amd?define(["exports","@tachybase/client","react/jsx-runtime","antd","react-router-dom","react-i18next","react","@tachybase/schema","@tachybase/utils/client","@ant-design/icons"],t):(i=typeof globalThis!="undefined"?globalThis:i||self,t(i["@tachybase/module-multi-app"]={},i["@tachybase/client"],i.jsxRuntime,i.antd,i["react-router-dom"],i["react-i18next"],i.react,i["@tachybase/schema"],i["@tachybase/utils"],i["@ant-design/icons"]))})(this,function(i,t,o,c,I,F,b,y,h,m){"use strict";var he=Object.defineProperty,fe=Object.defineProperties;var Ae=Object.getOwnPropertyDescriptors;var q=Object.getOwnPropertySymbols;var ge=Object.prototype.hasOwnProperty,be=Object.prototype.propertyIsEnumerable;var E=(i,t,o)=>t in i?he(i,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):i[t]=o,A=(i,t)=>{for(var o in t||(t={}))ge.call(t,o)&&E(i,o,t[o]);if(q)for(var o of q(t))be.call(t,o)&&E(i,o,t[o]);return i},v=(i,t)=>fe(i,Ae(t));var g=(i,t,o)=>new Promise((c,I)=>{var F=h=>{try{y(o.next(h))}catch(m){I(m)}},b=h=>{try{y(o.throw(h))}catch(m){I(m)}},y=h=>h.done?c(h.value):Promise.resolve(h.value).then(F,b);y((o=o.apply(i,t)).next())});const S="multi-app",K="subAppsChange",f="subAppsChange",C=()=>{const{t:e}=F.useTranslation([S,"core"]);return{t:e}},l=e=>`{{t("${e}", { ns: ["${S}", "client"] })}}`,_={type:"void","x-component":"CardItem","x-toolbar":"BlockSchemaToolbar","x-settings":"blockSettings:table",properties:{app:{type:"void","x-component":"AppManager","x-component-props":{admin:!1}}}},M=()=>{const{insert:e}=t.useSchemaInitializer(),n=t.useSchemaInitializerItem(),r=b.useCallback(()=>e(_),[e]);return o.jsx(t.SchemaInitializerItem,v(A({},n),{onClick:r}))},U=e=>{const n=t.useApp(),r=e.value&&o.jsx("a",{target:"_blank",href:n.getRouteUrl(`/apps/${e.value}/admin`),rel:"noreferrer",children:e.value});return o.jsxs("div",{style:e.style,children:[e.addonBefore,e.prefix,r,e.suffix,e.addonAfter]})},j=y.connect(c.Input,y.mapReadPretty(U)),H=t.createStyles(({token:e})=>({button:{color:e.colorTextHeaderMenu+" !important"}})),G=()=>{const{styles:e}=H(),{data:n,run:r}=t.useRequest({resource:"applications",action:"listPinned"},{manual:!0}),{t:s}=C(),a=t.useApp(),d=[...((n==null?void 0:n.data)||[]).map(p=>{let u=a.getRouteUrl(`/apps/${p.name}/admin/`);return p.cname&&(u=`//${p.cname}`),{key:p.name,label:o.jsx("a",{href:u,target:"_blank",rel:"noopener noreferrer",children:p.displayName||p.name})}}),{key:".manager",label:o.jsx(I.Link,{to:a.systemSettingsManager.getRoutePath("system-services."+S),children:s("Manage applications")})}];return o.jsx(c.Dropdown,{onOpenChange:p=>{r()},menu:{items:d},children:o.jsx(c.Button,{className:e.button,title:"Apps",icon:o.jsx(t.Icon,{type:"AppstoreOutlined"})})})},Y=e=>o.jsx(t.PinnedPluginListProvider,{items:{am:{order:201,component:"MultiAppManager",pin:!0,snippet:"pm.*",belongTo:"pinnedmenu"}},children:o.jsx(t.SchemaComponentOptions,{components:{MultiAppManager:G,AppNameInput:j,MultiAppBlockInitializer:M},children:e.children})});class W extends t.Plugin{load(){return g(this,null,function*(){this.app.use(Y)})}}const D={name:"applications",filterTargetKey:"name",targetKey:"name",fields:[{type:"uid",name:"name",primaryKey:!0,prefix:"a",interface:"input",uiSchema:{type:"string",title:l("App ID"),required:!0,"x-component":"Input","x-validator":"uid"}},{type:"string",name:"displayName",interface:"input",uiSchema:{type:"string",title:l("App display name"),required:!0,"x-component":"Input"}},{type:"string",name:"pinned",interface:"checkbox",uiSchema:{type:"boolean","x-content":l("Pin to menu"),"x-component":"Checkbox"}},{type:"string",name:"status",interface:"radioGroup",defaultValue:"pending",uiSchema:{type:"string",title:l("App status"),enum:[{label:l("Initializing"),value:"initializing"},{label:l("Initialized"),value:"initialized"},{label:l("Running"),value:"running"},{label:l("Commanding"),value:"commanding"},{label:l("Stopped"),value:"stopped"},{label:l("Error"),value:"error"},{label:l("Not found"),value:"not_found"}],"x-component":"Radio.Group"}},{type:"string",name:"isTemplate",interface:"checkbox",uiSchema:{type:"boolean","x-content":l("Is template"),"x-component":"Checkbox"}},{interface:"m2m",type:"belongsToMany",name:"partners",target:"users",through:"applicationsPartners",foreignKey:"applicationName",otherKey:"userId",collectionName:"applications",targetKey:"id",sourceKey:"name",uiSchema:{type:"array",title:l("Collaborator"),"x-component":"AssociationField","x-component-props":{service:{params:{fields:["id","username","nickname"]}},multiple:!0,fieldNames:{label:"username",value:"id"}}}}]},w={type:"void","x-component":"div",properties:{displayName:{"x-component":"CollectionField","x-decorator":"FormItem"},name:{"x-component":"CollectionField","x-decorator":"FormItem","x-disabled":"{{ !createOnly }}","x-hidden":"{{ !admin }}"},cnamePrefix:{title:l("Custom domain prefix"),"x-component":"Input","x-decorator":"FormItem","x-validator":`{{(value) => {
2
2
  if (!value) {
3
3
  return null;
4
4
  }
5
5
  if (!/^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$/.test(value)) {
6
6
  return t("Custom domain prefix must be 1-63 characters, lowercase letters, numbers, or hyphens (-), and cannot start or end with a hyphen (-)");
7
7
  }
8
- }}}`,"x-component-props":{addonAfter:`.${window.location.hostname}`},"x-reactions":[{dependencies:["cname"],fulfill:{state:{value:'{{ ($deps[0] && $deps[0].replace(new RegExp("\\."+window.location.hostname+"$"), "")) || "" }}'}}}]},cname:{"x-hidden":!0,"x-component":"Input","x-decorator":"FormItem","x-read-pretty":!0,"x-reactions":{dependencies:["cnamePrefix"],fulfill:{state:{value:`{{$deps[0] ? $deps[0] + ".${window.location.hostname}" : null}}`}}}},tmpl:{title:l("Template"),"x-component":"RemoteSelect","x-component-props":{placeholder:l("Can be empty, or selected from the template library or personal applications"),fieldNames:{label:"displayName",value:"name"},service:{resource:"applications",params:{filter:{$or:[{isTemplate:!0},{createdById:"{{ userId }}"}]}}}},"x-decorator":"FormItem","x-disabled":"{{ !createOnly }}"},"options.startEnvs":{type:"string",title:l("Start environment variables"),"x-component":"Input.TextArea","x-decorator":"FormItem","x-hidden":!0},pinned:{"x-component":"CollectionField","x-decorator":"FormItem","x-hidden":"{{ !admin }}"},isTemplate:{"x-component":"CollectionField","x-decorator":"FormItem","x-hidden":"{{ !admin }}"},icon:{type:"string",title:'{{ t("Icon") }}',"x-component":"IconPicker","x-decorator":"FormItem"},color:{type:"string",title:'{{ t("Color") }}',"x-component":"ColorPicker","x-decorator":"FormItem",default:"#e5e5e5"}}},B={properties:{view:{type:"void","x-component":"AppVisitor","x-component-props":{admin:"{{ admin }}"}},update:{type:"void",title:'{{t("Edit")}}',"x-component":"Action.Link",properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues:"{{ cm.useValuesFromRecord }}"},title:'{{t("Edit")}}',properties:{formSchema:w,footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{t("Cancel")}}',"x-component":"Action","x-use-component-props":"useCancelActionProps"},submit:{title:'{{t("Submit")}}',"x-action":"submit","x-component":"Action","x-use-component-props":"useMultiAppUpdateAction","x-component-props":{type:"primary"}}}}}}}},delete:{type:"void",title:'{{ t("Delete") }}',"x-component":"Action.Link","x-use-component-props":"useDestroyActionProps","x-component-props":{confirm:{title:"{{t('Delete')}}",content:"{{t('Are you sure you want to delete it?')}}"}}}}},J={type:"void",properties:{applicationsTable:{type:"void","x-decorator":"TableBlockProvider","x-decorator-props":{collection:M,action:"list",params:{pageSize:20,sort:["-createdAt"],appends:[],filter:{createdById:"{{ admin ? undefined : userId }}"}},rowKey:"name"},properties:{GlobalNotificationHandler:{type:"void","x-component":"GlobalNotificationHandler"},actions:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:16}},properties:{fuzzySearch:{type:"void","x-component":"FuzzySearchInput","x-align":"left"},refresh:{type:"void",title:'{{ t("Refresh") }}',"x-component":"Action","x-use-component-props":"useRefreshActionProps","x-component-props":{icon:"ReloadOutlined"}},delete:{type:"void",title:'{{ t("Delete") }}',"x-action":"destroy","x-component":"Action","x-decorator":"ACLActionProvider","x-use-component-props":"useBulkDestroyActionProps","x-component-props":{icon:"DeleteOutlined",confirm:{title:"{{t('Delete')}}",content:"{{t('Are you sure you want to delete it?')}}"}},"x-hidden":"{{ !admin }}"},startAll:{type:"void",title:'{{ t("Start all") }}',"x-component":"Action","x-use-component-props":"useStartAllAction","x-component-props":{icon:"FastForwardOutlined",danger:!0,confirm:{title:l("Start all"),content:l("Starting all sub-applications may cause lag. The more applications you have, the longer the waiting time")}},"x-hidden":"{{ !admin }}"},stopAll:{type:"void",title:'{{ t("Stop all") }}',"x-component":"Action","x-use-component-props":"useStopAllAction","x-component-props":{icon:"StopOutlined",danger:!0,confirm:{title:l("Stop all"),content:l("All sub-applications have stopped serving, unless you restart them")}},"x-hidden":"{{ !admin }}"},create:{type:"void",title:'{{t("Add new")}}',"x-decorator":e=>b.createElement(t.SchemaComponentOptions,v(A({},e),{scope:{createOnly:!0}})),"x-component":"Action","x-component-props":{type:"primary",icon:"PlusOutlined"},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues(e){const o=t.useActionContext();return t.useRequest(()=>Promise.resolve({data:{name:`a_${y.uid()}`}}),v(A({},e),{refreshDeps:[o.visible]}))}},title:'{{t("Add new")}}',properties:{formSchema:w,footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{t("Cancel")}}',"x-component":"Action","x-use-component-props":"useCancelActionProps"},submit:{title:'{{ t("Submit") }}',"x-component":"Action","x-use-component-props":"useCreateDatabaseConnectionAction","x-component-props":{type:"primary"}}}}}}}}}},table:{type:"array","x-uid":"input","x-component":"TableV2","x-use-component-props":"useTableBlockProps","x-component-props":{rowKey:"name",rowSelection:{type:"checkbox"}},properties:{displayName:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{displayName:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},name:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{name:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},pinned:{type:"void",title:l("Pin to menu"),"x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{pinned:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},isTemplate:{type:"void",title:l("Is template"),"x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{isTemplate:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},status:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{status:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},actions:{type:"void",title:'{{t("Actions")}}',"x-component":"TableV2.Column",properties:{actions:A({type:"void","x-component":"Space","x-component-props":{split:"|"}},B)}}}}}}}},Q=()=>{const e=y.useForm(),o=y.useField(),a=t.useActionContext(),s=t.useDataBlockRequest(),r=t.useDataBlockResource();return{onClick(){return g(this,null,function*(){try{yield e.submit(),o.data=o.data||{},o.data.loading=!0,yield r.create({values:e.values}),a.setVisible(!1),yield e.reset(),o.data.loading=!1,s.refresh()}catch(p){o.data&&(o.data.loading=!1)}})}}},z=e=>{const{t:o}=S(),a=t.useAPIClient(),s=b.useMemo(()=>a.resource("applications"),[a]);return{handleStart:()=>g(null,null,function*(){try{c.notification.info({key:h,message:n.jsxs("span",{children:[o("Processing..."),"    ",n.jsx(c.Spin,{indicator:n.jsx(m.LoadingOutlined,{style:{fontSize:24},spin:!0})})]}),duration:0});const p=yield s.start({filterByTk:e.name});(p==null?void 0:p.status)===205&&c.notification.info({key:h,message:o("App is already running")})}catch(p){c.notification.error({key:h,message:o("Failed to start app")})}}),handleStop:()=>{s.stop({filterByTk:e.name}).then(()=>{c.notification.info({key:h,message:n.jsxs("span",{children:[o("Processing..."),"    ",n.jsx(c.Spin,{indicator:n.jsx(m.LoadingOutlined,{style:{fontSize:24},spin:!0})})]}),duration:0})})}}},V=e=>{const o=y.useField(),a=y.useForm(),s=t.useActionContext(),r=t.useDataBlockRequest(),d=t.useDataBlockResource(),p=t.useCollectionRecordData(),{record:u}=t.useRecord(),x=(p==null?void 0:p.name)||(u==null?void 0:u.name);return{onClick(){return g(this,null,function*(){var D;yield a.submit(),o.data=o.data||{},o.data.loading=!0;try{const k=yield d.update({filterByTk:x,values:a.values});s.setVisible(!1),yield a.reset(),r.refresh(),e==null||e(x,(D=k==null?void 0:k.data)==null?void 0:D.data)}catch(k){console.error(k)}finally{o.data.loading=!1}})}}};function O({name:e,cname:o}){const a=t.useApp();return o?`//${o}`:a.getRouteUrl(`/apps/${e}/admin/`)}const N=()=>{const e=t.useDataBlockResource(),{t:o}=S();return{onClick(){return g(this,null,function*(){var r,d;const s=yield e.startAll();c.notification.info({key:h,message:n.jsxs("span",{children:[o("Processing..."),"    ",n.jsx(c.Spin,{indicator:n.jsx(m.LoadingOutlined,{style:{fontSize:24},spin:!0})})]}),duration:0}),((d=(r=s==null?void 0:s.data)==null?void 0:r.data)==null?void 0:d.all)===0&&c.notification.info({key:h,message:`${o("Start count")}: 0/0!`})})}}},$=()=>{const e=t.useDataBlockResource(),{t:o}=S();return{onClick(){return g(this,null,function*(){var r,d;const s=yield e.stopAll();if(((d=(r=s==null?void 0:s.data)==null?void 0:r.data)==null?void 0:d.all)===0){c.notification.info({key:h,message:`${o("Stop count")}: 0/0!`});return}c.notification.info({key:h,message:n.jsxs("span",{children:[o("Processing..."),"    ",n.jsx(c.Spin,{indicator:n.jsx(m.LoadingOutlined,{style:{fontSize:24},spin:!0})})]}),duration:0})})}}},X=()=>{const e=t.useCollectionRecordData();return O({name:e.name,cname:e.cname})},Z=()=>{const{t:e}=S(),o=X(),a=t.useCollectionRecordData(),{handleStart:s,handleStop:r}=z(a);return n.jsxs(c.Space,{split:n.jsx(c.Divider,{type:"horizontal"}),children:[n.jsx(t.TrackingLink,{href:o,target:"_blank",rel:"noreferrer",trackingKey:"multiapp_linkView",children:e("View",{ns:C})}),a.status!=="running"&&n.jsx("a",{onClick:()=>s(),children:e("Start",{ns:C})}),a.status!=="stopped"&&n.jsx("a",{onClick:()=>r(),children:e("Stop",{ns:C})})]})},R=e=>{const{data:o,mutate:a,refresh:s}=t.useDataBlockRequest();return t.useNoticeSub(_,r=>{const d=c.notification[r.level]||c.notification.info;if(r.message?d({key:h,message:r.message}):r.status!=="commanding"&&r.status!=="initializing"&&c.notification.destroy(h),!(o!=null&&o.data)||r.refresh){s();return}if(!r.app&&!r.status||!o.data.some(x=>x.name===r.app))return;const u=[...o.data];u.find(x=>x.name===r.app).status=r.status,a(v(A({},o),{data:u}))}),null},q=e=>{var d,p;const{admin:o=!0}=e,a=t.useCurrentUserContext(),s=(p=(d=a==null?void 0:a.data)==null?void 0:d.data)==null?void 0:p.id,{t:r}=P.useTranslation([C,"core"],{nsMode:"fallback"});return n.jsx(c.Card,{bordered:!1,children:n.jsx(t.SchemaComponent,{schema:J,scope:{admin:o,userId:s,useCreateDatabaseConnectionAction:Q,useMultiAppUpdateAction:V,useStartAllAction:N,useStopAllAction:$,t:r,uid:f.uid},components:{AppVisitor:Z,GlobalNotificationHandler:R}})})};class ee extends t.Plugin{load(){return g(this,null,function*(){this.app.systemSettingsManager.add(`system-services.${C}`,{title:l("Multi-app manager"),icon:"AppstoreOutlined",Component:q,aclSnippet:"pm.multi-app.applications"})})}}const te={type:"void","x-component":"CardItem","x-toolbar":"BlockSchemaToolbar","x-settings":"blockSettings:table",properties:{app:{type:"void","x-component":"ViewMultiAppPane","x-component-props":{admin:!1}}}},oe=()=>{const{insert:e}=t.useSchemaInitializer(),o=t.useSchemaInitializerItem(),a=b.useCallback(()=>e(te),[e]);return n.jsx(t.SchemaInitializerItem,v(A({},o),{onClick:a}))},ne={type:"void",properties:{update:{type:"void","x-component":"Action","x-component-props":{icon:"editoutlined"},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues:"{{ cm.useValuesFromRecord }}"},title:'{{t("Edit")}}',properties:{formSchema:w,footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{t("Cancel")}}',"x-component":"Action","x-use-component-props":"useCancelActionProps"},submit:{title:'{{t("Submit")}}',"x-action":"submit","x-component":"Action","x-use-component-props":"useMultiAppUpdateAction","x-component-props":{type:"primary"}}}}}}}},delete:{type:"void","x-component":"Action","x-use-component-props":"useDestroyActionProps","x-component-props":{icon:"deleteoutlined",confirm:{title:"{{t('Delete')}}",content:"{{t('Are you sure you want to delete it?')}}"}}}}},ae={type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:16}},properties:{create:{type:"void",title:'{{t("Add new")}}',"x-decorator":e=>b.createElement(t.SchemaComponentOptions,v(A({},e),{scope:{createOnly:!0}})),"x-component":"Action","x-component-props":{type:"primary",icon:"PlusOutlined"},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues(e){const o=t.useActionContext();return t.useRequest(()=>Promise.resolve({data:{name:`a_${f.uid()}`}}),v(A({},e),{refreshDeps:[o.visible]}))}},title:'{{t("Add new")}}',properties:{formSchema:w,footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{t("Cancel")}}',"x-component":"Action","x-use-component-props":"useCancelActionProps"},submit:{title:'{{ t("Submit") }}',"x-component":"Action","x-use-component-props":"useCreateDatabaseConnectionAction","x-component-props":{type:"primary"}}}}}}}}}},re=t.createStyles(({css:e,token:o})=>({appAction:e`
8
+ }}}`,"x-component-props":{addonAfter:`.${window.location.hostname}`},"x-reactions":[{dependencies:["cname"],fulfill:{state:{value:'{{ ($deps[0] && $deps[0].replace(new RegExp("\\."+window.location.hostname+"$"), "")) || "" }}'}}}]},cname:{"x-hidden":!0,"x-component":"Input","x-decorator":"FormItem","x-read-pretty":!0,"x-reactions":{dependencies:["cnamePrefix"],fulfill:{state:{value:`{{$deps[0] ? $deps[0] + ".${window.location.hostname}" : null}}`}}}},tmpl:{title:l("Template"),"x-component":"RemoteSelect","x-component-props":{placeholder:l("Can be empty, or selected from the template library or personal applications"),fieldNames:{label:"displayName",value:"name"},service:{resource:"applications",params:{filter:{$or:[{isTemplate:!0},{createdById:"{{ userId }}"}]}}}},"x-decorator":"FormItem","x-disabled":"{{ !createOnly }}"},"options.startEnvs":{type:"string",title:l("Start environment variables"),"x-component":"Input.TextArea","x-decorator":"FormItem","x-hidden":!0},pinned:{"x-component":"CollectionField","x-decorator":"FormItem","x-hidden":"{{ !admin }}"},isTemplate:{"x-component":"CollectionField","x-decorator":"FormItem","x-hidden":"{{ !admin }}"},icon:{type:"string",title:'{{ t("Icon") }}',"x-component":"IconPicker","x-decorator":"FormItem"},color:{type:"string",title:'{{ t("Color") }}',"x-component":"ColorPicker","x-decorator":"FormItem",default:"#e5e5e5"}}},B={properties:{view:{type:"void","x-component":"AppVisitor","x-component-props":{admin:"{{ admin }}"}},update:{type:"void",title:'{{t("Edit")}}',"x-component":"Action.Link",properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues:"{{ cm.useValuesFromRecord }}"},title:'{{t("Edit")}}',properties:{formSchema:w,footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{t("Cancel")}}',"x-component":"Action","x-use-component-props":"useCancelActionProps"},submit:{title:'{{t("Submit")}}',"x-action":"submit","x-component":"Action","x-use-component-props":"useMultiAppUpdateAction","x-component-props":{type:"primary"}}}}}}}},delete:{type:"void",title:'{{ t("Delete") }}',"x-component":"Action.Link","x-use-component-props":"useDestroyActionProps","x-component-props":{confirm:{title:"{{t('Delete')}}",content:"{{t('Are you sure you want to delete it?')}}"}}},share:{type:"void",title:'{{t("Share")}}',"x-component":"Action.Link",properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues:"{{ cm.useValuesFromRecord }}"},title:'{{t("Share")}}',properties:{partners:{"x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"applications.partners"},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{t("Cancel")}}',"x-component":"Action","x-use-component-props":"useCancelActionProps"},submit:{title:'{{t("Submit")}}',"x-action":"submit","x-component":"Action","x-use-component-props":"useMultiAppUpdateAction","x-component-props":{type:"primary"}}}}}}}}}},J={type:"void",properties:{applicationsTable:{type:"void","x-decorator":"TableBlockProvider","x-decorator-props":{collection:D,action:"list",params:{pageSize:20,sort:["-createdAt"],appends:["partners.id","partners.username"],filter:"{{ admin ? {} : { '$or': [ { createdById: userId }, { 'partners.id': { '$in': [userId] } } ] } }}"},rowKey:"name"},properties:{GlobalNotificationHandler:{type:"void","x-component":"GlobalNotificationHandler"},actions:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:16}},properties:{fuzzySearch:{type:"void","x-component":"FuzzySearchInput","x-align":"left"},refresh:{type:"void",title:'{{ t("Refresh") }}',"x-component":"Action","x-use-component-props":"useRefreshActionProps","x-component-props":{icon:"ReloadOutlined"}},delete:{type:"void",title:'{{ t("Delete") }}',"x-action":"destroy","x-component":"Action","x-decorator":"ACLActionProvider","x-use-component-props":"useBulkDestroyActionProps","x-component-props":{icon:"DeleteOutlined",confirm:{title:"{{t('Delete')}}",content:"{{t('Are you sure you want to delete it?')}}"}},"x-hidden":"{{ !admin }}"},startAll:{type:"void",title:'{{ t("Start all") }}',"x-component":"Action","x-use-component-props":"useStartAllAction","x-component-props":{icon:"FastForwardOutlined",danger:!0,confirm:{title:l("Start all"),content:l("Starting all sub-applications may cause lag. The more applications you have, the longer the waiting time")}},"x-hidden":"{{ !admin }}"},stopAll:{type:"void",title:'{{ t("Stop all") }}',"x-component":"Action","x-use-component-props":"useStopAllAction","x-component-props":{icon:"StopOutlined",danger:!0,confirm:{title:l("Stop all"),content:l("All sub-applications have stopped serving, unless you restart them")}},"x-hidden":"{{ !admin }}"},create:{type:"void",title:'{{t("Add new")}}',"x-decorator":e=>b.createElement(t.SchemaComponentOptions,v(A({},e),{scope:{createOnly:!0}})),"x-component":"Action","x-component-props":{type:"primary",icon:"PlusOutlined"},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues(e){const n=t.useActionContext();return t.useRequest(()=>Promise.resolve({data:{name:`a_${y.uid()}`}}),v(A({},e),{refreshDeps:[n.visible]}))}},title:'{{t("Add new")}}',properties:{formSchema:w,footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{t("Cancel")}}',"x-component":"Action","x-use-component-props":"useCancelActionProps"},submit:{title:'{{ t("Submit") }}',"x-component":"Action","x-use-component-props":"useCreateDatabaseConnectionAction","x-component-props":{type:"primary"}}}}}}}}}},table:{type:"array","x-uid":"input","x-component":"TableV2","x-use-component-props":"useTableBlockProps","x-component-props":{rowKey:"name",rowSelection:{type:"checkbox"}},properties:{displayName:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{displayName:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},name:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{name:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},pinned:{type:"void",title:l("Pin to menu"),"x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{pinned:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},isTemplate:{type:"void",title:l("Is template"),"x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{isTemplate:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},status:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{status:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}},actions:{type:"void",title:'{{t("Actions")}}',"x-component":"TableV2.Column",properties:{actions:A({type:"void","x-component":"Space","x-component-props":{split:"|"}},B)}}}}}}}},Q=()=>{const e=y.useForm(),n=y.useField(),r=t.useActionContext(),s=t.useDataBlockRequest(),a=t.useDataBlockResource();return{onClick(){return g(this,null,function*(){try{yield e.submit(),n.data=n.data||{},n.data.loading=!0,yield a.create({values:e.values}),r.setVisible(!1),yield e.reset(),n.data.loading=!1,s.refresh()}catch(p){n.data&&(n.data.loading=!1)}})}}},z=e=>{const{t:n}=C(),r=t.useAPIClient(),s=b.useMemo(()=>r.resource("applications"),[r]);return{handleStart:()=>g(null,null,function*(){try{c.notification.info({key:f,message:o.jsxs("span",{children:[n("Processing..."),"    ",o.jsx(c.Spin,{indicator:o.jsx(m.LoadingOutlined,{style:{fontSize:24},spin:!0})})]}),duration:0});const p=yield s.start({filterByTk:e.name});(p==null?void 0:p.status)===205&&c.notification.info({key:f,message:n("App is already running")})}catch(p){c.notification.error({key:f,message:n("Failed to start app")})}}),handleStop:()=>{s.stop({filterByTk:e.name}).then(()=>{c.notification.info({key:f,message:o.jsxs("span",{children:[n("Processing..."),"    ",o.jsx(c.Spin,{indicator:o.jsx(m.LoadingOutlined,{style:{fontSize:24},spin:!0})})]}),duration:0})})}}},V=e=>{const n=y.useField(),r=y.useForm(),s=t.useActionContext(),a=t.useDataBlockRequest(),d=t.useDataBlockResource(),p=t.useCollectionRecordData(),{record:u}=t.useRecord(),x=(p==null?void 0:p.name)||(u==null?void 0:u.name);return{onClick(){return g(this,null,function*(){var T;yield r.submit(),n.data=n.data||{},n.data.loading=!0;try{const k=yield d.update({filterByTk:x,values:r.values});s.setVisible(!1),yield r.reset(),a.refresh(),e==null||e(x,(T=k==null?void 0:k.data)==null?void 0:T.data)}catch(k){console.error(k)}finally{n.data.loading=!1}})}}};function N({name:e,cname:n}){const r=t.useApp();return n?`//${n}`:r.getRouteUrl(`/apps/${e}/admin/`)}const O=()=>{const e=t.useDataBlockResource(),{t:n}=C();return{onClick(){return g(this,null,function*(){var a,d;const s=yield e.startAll();c.notification.info({key:f,message:o.jsxs("span",{children:[n("Processing..."),"    ",o.jsx(c.Spin,{indicator:o.jsx(m.LoadingOutlined,{style:{fontSize:24},spin:!0})})]}),duration:0}),((d=(a=s==null?void 0:s.data)==null?void 0:a.data)==null?void 0:d.all)===0&&c.notification.info({key:f,message:`${n("Start count")}: 0/0!`})})}}},$=()=>{const e=t.useDataBlockResource(),{t:n}=C();return{onClick(){return g(this,null,function*(){var a,d;const s=yield e.stopAll();if(((d=(a=s==null?void 0:s.data)==null?void 0:a.data)==null?void 0:d.all)===0){c.notification.info({key:f,message:`${n("Stop count")}: 0/0!`});return}c.notification.info({key:f,message:o.jsxs("span",{children:[n("Processing..."),"    ",o.jsx(c.Spin,{indicator:o.jsx(m.LoadingOutlined,{style:{fontSize:24},spin:!0})})]}),duration:0})})}}},X=()=>{const e=t.useCollectionRecordData();return N({name:e.name,cname:e.cname})},Z=()=>{const{t:e}=C(),n=X(),r=t.useCollectionRecordData(),{handleStart:s,handleStop:a}=z(r);return o.jsxs(c.Space,{split:o.jsx(c.Divider,{type:"horizontal"}),children:[o.jsx(t.TrackingLink,{href:n,target:"_blank",rel:"noreferrer",trackingKey:"multiapp_linkView",children:e("View",{ns:S})}),r.status!=="running"&&o.jsx("a",{onClick:()=>s(),children:e("Start",{ns:S})}),r.status!=="stopped"&&o.jsx("a",{onClick:()=>a(),children:e("Stop",{ns:S})})]})},R=e=>{const{data:n,mutate:r,refresh:s}=t.useDataBlockRequest();return t.useNoticeSub(K,a=>{const d=c.notification[a.level]||c.notification.info;if(a.message?d({key:f,message:a.message}):a.status!=="commanding"&&a.status!=="initializing"&&c.notification.destroy(f),!(n!=null&&n.data)||a.refresh){s();return}if(!a.app&&!a.status||!n.data.some(x=>x.name===a.app))return;const u=[...n.data];u.find(x=>x.name===a.app).status=a.status,r(v(A({},n),{data:u}))}),null},L=e=>{var d,p;const{admin:n=!0}=e,r=t.useCurrentUserContext(),s=(p=(d=r==null?void 0:r.data)==null?void 0:d.data)==null?void 0:p.id,{t:a}=C();return o.jsx(c.Card,{bordered:!1,children:o.jsx(t.ExtendCollectionsProvider,{collections:[D],children:o.jsx(t.SchemaComponent,{schema:J,scope:{admin:n,userId:s,useCreateDatabaseConnectionAction:Q,useMultiAppUpdateAction:V,useStartAllAction:O,useStopAllAction:$,t:a,uid:h.uid},components:{AppVisitor:Z,GlobalNotificationHandler:R}})})})};class ee extends t.Plugin{load(){return g(this,null,function*(){this.app.systemSettingsManager.add(`system-services.${S}`,{title:l("Multi-app manager"),icon:"AppstoreOutlined",Component:L,aclSnippet:"pm.multi-app.applications"})})}}const te={type:"void","x-component":"CardItem","x-toolbar":"BlockSchemaToolbar","x-settings":"blockSettings:table",properties:{app:{type:"void","x-component":"ViewMultiAppPane","x-component-props":{admin:!1}}}},oe=()=>{const{insert:e}=t.useSchemaInitializer(),n=t.useSchemaInitializerItem(),r=b.useCallback(()=>e(te),[e]);return o.jsx(t.SchemaInitializerItem,v(A({},n),{onClick:r}))},ne={type:"void",properties:{update:{type:"void","x-component":"Action","x-component-props":{icon:"editoutlined"},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues:"{{ cm.useValuesFromRecord }}"},title:'{{t("Edit")}}',properties:{formSchema:w,footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{t("Cancel")}}',"x-component":"Action","x-use-component-props":"useCancelActionProps"},submit:{title:'{{t("Submit")}}',"x-action":"submit","x-component":"Action","x-use-component-props":"useMultiAppUpdateAction","x-component-props":{type:"primary"}}}}}}}},delete:{type:"void","x-component":"Action","x-use-component-props":"useDestroyActionProps","x-component-props":{icon:"deleteoutlined",confirm:{title:"{{t('Delete')}}",content:"{{t('Are you sure you want to delete it?')}}"}}}}},re={type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:16}},properties:{create:{type:"void",title:'{{t("Add new")}}',"x-decorator":e=>b.createElement(t.SchemaComponentOptions,v(A({},e),{scope:{createOnly:!0}})),"x-component":"Action","x-component-props":{type:"primary",icon:"PlusOutlined"},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues(e){const n=t.useActionContext();return t.useRequest(()=>Promise.resolve({data:{name:`a_${h.uid()}`}}),v(A({},e),{refreshDeps:[n.visible]}))}},title:'{{t("Add new")}}',properties:{formSchema:w,footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{t("Cancel")}}',"x-component":"Action","x-use-component-props":"useCancelActionProps"},submit:{title:'{{ t("Submit") }}',"x-component":"Action","x-use-component-props":"useCreateDatabaseConnectionAction","x-component-props":{type:"primary"}}}}}}}}}},ae=t.createStyles(({css:e,token:n})=>({appAction:e`
9
9
  width: 100%;
10
10
  display: flex;
11
11
  justify-content: flex-end;
@@ -16,7 +16,7 @@
16
16
  .media-card {
17
17
  position: relative;
18
18
  transition: background-color 0.3s ease;
19
- border-radius: ${`${o.borderRadius}px`};
19
+ border-radius: ${`${n.borderRadius}px`};
20
20
  overflow: hidden;
21
21
  .media-actions {
22
22
  width: 100%;
@@ -47,4 +47,4 @@
47
47
  visibility: visible;
48
48
  }
49
49
  }
50
- `})),ie=()=>{S();const{styles:e}=re(),o=t.useTableBlockContext(),a=o==null?void 0:o.service,{data:s,loading:r,run:d}=a||{},[p,u]=b.useState(!1);if(r)return n.jsx(c.Spin,{});const{data:x}=s||{};return n.jsxs(c.Card,{style:{backgroundColor:"transparent",border:"none",boxShadow:"none"},children:[n.jsx("div",{className:e.appAction,children:n.jsx(t.SchemaComponent,{schema:ae})}),n.jsx("div",{className:e.appListStyle,children:x==null?void 0:x.map(T=>n.jsx(se,v(A({},T),{service:a,appStatus:p,setAppStatus:u}),T.name))})]})},se=e=>{const{name:o,cname:a,displayName:s,icon:r,color:d,status:p,service:u,appStatus:x,setAppStatus:T}=e,{t:D}=S(),k=O({name:o,cname:a}),ue=b.useCallback(()=>{window&&p==="running"?window.open(k,"_blank"):c.message.warning(D("App is not running"))},[a,p]),{handleStart:me,handleStop:xe}=z(e),ye=()=>{p==="running"?xe():me(),T(!x),u.refresh()};return n.jsx("div",{className:"media-card",children:n.jsxs(t.RecordProvider,{record:e,children:[n.jsxs("div",{className:"media-actions",children:[n.jsx(c.Button,{icon:p==="running"?n.jsx(m.StopOutlined,{}):n.jsx(m.CheckCircleOutlined,{}),onClick:ye}),n.jsx(t.SchemaComponent,{schema:ne,scope:{useMultiAppUpdateAction:V,useStartAllAction:N,useStopAllAction:$}})]}),n.jsx(t.MediaCard,{layout:"vertical",title:s,icon:r,color:p==="running"?d:void 0,needHover:!1,onClick:ue})]})})},pe={type:"void",properties:{multiApp:{"x-decorator":"TableBlockProvider","x-decorator-props":{collection:M,action:"list",params:{pageSize:20,sort:["-createdAt"],appends:[],filter:{createdById:"{{ userId }}"}},rowKey:"name"},"x-component":"AppList"}}},ce=()=>{var a,s;const e=t.useCurrentUserContext(),o=(s=(a=e==null?void 0:e.data)==null?void 0:a.data)==null?void 0:s.id;return n.jsx(t.SchemaComponent,{schema:pe,scope:{userId:o},components:{AppList:ie}})};class le extends t.Plugin{load(){return g(this,null,function*(){this.app.addComponents({AppManager:q,ViewMultiAppPane:ce});const o=this.app.schemaInitializerManager.get("page:addBlock");o.add("otherBlocks.multiApp",{name:"multiApp",title:l("Multi-app manager"),icon:n.jsx(m.AppstoreOutlined,{}),Component:F}),o.add("otherBlocks.showMultiApp",{name:"showMultiApp",title:l("Multi-app display"),icon:n.jsx(m.WindowsOutlined,{}),Component:oe})})}}class de extends t.Plugin{afterAdd(){return g(this,null,function*(){yield this.app.pm.add(W),yield this.app.pm.add(le),yield this.app.pm.add(ee)})}}i.default=de,i.formSchema=w,i.tableActionColumnSchema=B,Object.defineProperties(i,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
50
+ `})),ie=()=>{C();const{styles:e}=ae(),n=t.useTableBlockContext(),r=n==null?void 0:n.service,{data:s,loading:a,run:d}=r||{},[p,u]=b.useState(!1);if(a)return o.jsx(c.Spin,{});const{data:x}=s||{};return o.jsxs(c.Card,{style:{backgroundColor:"transparent",border:"none",boxShadow:"none"},children:[o.jsx("div",{className:e.appAction,children:o.jsx(t.SchemaComponent,{schema:re})}),o.jsx("div",{className:e.appListStyle,children:x==null?void 0:x.map(P=>o.jsx(se,v(A({},P),{service:r,appStatus:p,setAppStatus:u}),P.name))})]})},se=e=>{const{name:n,cname:r,displayName:s,icon:a,color:d,status:p,service:u,appStatus:x,setAppStatus:P}=e,{t:T}=C(),k=N({name:n,cname:r}),ue=b.useCallback(()=>{window&&p==="running"?window.open(k,"_blank"):c.message.warning(T("App is not running"))},[r,p]),{handleStart:me,handleStop:xe}=z(e),ye=()=>{p==="running"?xe():me(),P(!x),u.refresh()};return o.jsx("div",{className:"media-card",children:o.jsxs(t.RecordProvider,{record:e,children:[o.jsxs("div",{className:"media-actions",children:[o.jsx(c.Button,{icon:p==="running"?o.jsx(m.StopOutlined,{}):o.jsx(m.CheckCircleOutlined,{}),onClick:ye}),o.jsx(t.SchemaComponent,{schema:ne,scope:{useMultiAppUpdateAction:V,useStartAllAction:O,useStopAllAction:$}})]}),o.jsx(t.MediaCard,{layout:"vertical",title:s,icon:a,color:p==="running"?d:void 0,needHover:!1,onClick:ue})]})})},pe={type:"void",properties:{multiApp:{"x-decorator":"TableBlockProvider","x-decorator-props":{collection:D,action:"list",params:{pageSize:20,sort:["-createdAt"],filter:"{{ admin ? {} : { '$or': [ { createdById: userId }, { 'partners.id': { '$in': [userId] } } ] } }}"},rowKey:"name"},"x-component":"AppList"}}},ce=()=>{var r,s;const e=t.useCurrentUserContext(),n=(s=(r=e==null?void 0:e.data)==null?void 0:r.data)==null?void 0:s.id;return o.jsx(t.SchemaComponent,{schema:pe,scope:{userId:n,admin:!1},components:{AppList:ie}})};class le extends t.Plugin{load(){return g(this,null,function*(){this.app.addComponents({AppManager:L,ViewMultiAppPane:ce});const n=this.app.schemaInitializerManager.get("page:addBlock");n.add("otherBlocks.multiApp",{name:"multiApp",title:l("Multi-app manager"),icon:o.jsx(m.AppstoreOutlined,{}),Component:M}),n.add("otherBlocks.showMultiApp",{name:"showMultiApp",title:l("Multi-app display"),icon:o.jsx(m.WindowsOutlined,{}),Component:oe})})}}class de extends t.Plugin{afterAdd(){return g(this,null,function*(){yield this.app.pm.add(W),yield this.app.pm.add(le),yield this.app.pm.add(ee)})}}i.default=de,i.formSchema=w,i.tableActionColumnSchema=B,Object.defineProperties(i,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
@@ -22,8 +22,16 @@ export declare const schemaViewMultiAppPane: {
22
22
  'x-validator': string;
23
23
  'x-content'?: undefined;
24
24
  enum?: undefined;
25
+ 'x-component-props'?: undefined;
25
26
  };
26
27
  defaultValue?: undefined;
28
+ target?: undefined;
29
+ through?: undefined;
30
+ foreignKey?: undefined;
31
+ otherKey?: undefined;
32
+ collectionName?: undefined;
33
+ targetKey?: undefined;
34
+ sourceKey?: undefined;
27
35
  } | {
28
36
  type: string;
29
37
  name: string;
@@ -36,10 +44,18 @@ export declare const schemaViewMultiAppPane: {
36
44
  'x-validator'?: undefined;
37
45
  'x-content'?: undefined;
38
46
  enum?: undefined;
47
+ 'x-component-props'?: undefined;
39
48
  };
40
49
  primaryKey?: undefined;
41
50
  prefix?: undefined;
42
51
  defaultValue?: undefined;
52
+ target?: undefined;
53
+ through?: undefined;
54
+ foreignKey?: undefined;
55
+ otherKey?: undefined;
56
+ collectionName?: undefined;
57
+ targetKey?: undefined;
58
+ sourceKey?: undefined;
43
59
  } | {
44
60
  type: string;
45
61
  name: string;
@@ -52,10 +68,18 @@ export declare const schemaViewMultiAppPane: {
52
68
  required?: undefined;
53
69
  'x-validator'?: undefined;
54
70
  enum?: undefined;
71
+ 'x-component-props'?: undefined;
55
72
  };
56
73
  primaryKey?: undefined;
57
74
  prefix?: undefined;
58
75
  defaultValue?: undefined;
76
+ target?: undefined;
77
+ through?: undefined;
78
+ foreignKey?: undefined;
79
+ otherKey?: undefined;
80
+ collectionName?: undefined;
81
+ targetKey?: undefined;
82
+ sourceKey?: undefined;
59
83
  } | {
60
84
  type: string;
61
85
  name: string;
@@ -72,19 +96,59 @@ export declare const schemaViewMultiAppPane: {
72
96
  required?: undefined;
73
97
  'x-validator'?: undefined;
74
98
  'x-content'?: undefined;
99
+ 'x-component-props'?: undefined;
75
100
  };
76
101
  primaryKey?: undefined;
77
102
  prefix?: undefined;
103
+ target?: undefined;
104
+ through?: undefined;
105
+ foreignKey?: undefined;
106
+ otherKey?: undefined;
107
+ collectionName?: undefined;
108
+ targetKey?: undefined;
109
+ sourceKey?: undefined;
110
+ } | {
111
+ interface: string;
112
+ type: string;
113
+ name: string;
114
+ target: string;
115
+ through: string;
116
+ foreignKey: string;
117
+ otherKey: string;
118
+ collectionName: string;
119
+ targetKey: string;
120
+ sourceKey: string;
121
+ uiSchema: {
122
+ type: string;
123
+ title: string;
124
+ 'x-component': string;
125
+ 'x-component-props': {
126
+ service: {
127
+ params: {
128
+ fields: string[];
129
+ };
130
+ };
131
+ multiple: boolean;
132
+ fieldNames: {
133
+ label: string;
134
+ value: string;
135
+ };
136
+ };
137
+ required?: undefined;
138
+ 'x-validator'?: undefined;
139
+ 'x-content'?: undefined;
140
+ enum?: undefined;
141
+ };
142
+ primaryKey?: undefined;
143
+ prefix?: undefined;
144
+ defaultValue?: undefined;
78
145
  })[];
79
146
  };
80
147
  action: string;
81
148
  params: {
82
149
  pageSize: number;
83
150
  sort: string[];
84
- appends: any[];
85
- filter: {
86
- createdById: string;
87
- };
151
+ filter: string;
88
152
  };
89
153
  rowKey: string;
90
154
  };
@@ -1,16 +1,16 @@
1
1
  module.exports = {
2
2
  "react-i18next": "15.2.0",
3
- "@tachybase/client": "1.3.19",
4
- "@tachybase/server": "1.3.19",
5
- "@tachybase/database": "1.3.19",
3
+ "@tachybase/client": "1.3.21",
4
+ "@tachybase/server": "1.3.21",
5
+ "@tachybase/database": "1.3.21",
6
6
  "lodash": "4.17.21",
7
7
  "mysql2": "3.14.1",
8
- "pg": "8.13.1",
8
+ "pg": "8.16.3",
9
9
  "react": "18.3.1",
10
- "@tachybase/schema": "1.3.19",
10
+ "@tachybase/schema": "1.3.21",
11
11
  "antd": "5.22.5",
12
12
  "react-router-dom": "6.28.1",
13
- "@tachybase/utils": "1.3.19",
13
+ "@tachybase/utils": "1.3.21",
14
14
  "@ant-design/icons": "5.5.2",
15
- "@tachybase/actions": "1.3.19"
15
+ "@tachybase/actions": "1.3.21"
16
16
  };
@@ -10,6 +10,7 @@
10
10
  "Applications": "应用",
11
11
  "Auto start": "自动启动",
12
12
  "Can be empty, or selected from the template library or personal applications": "可以为空,或从模板库和个人应用中选择",
13
+ "Collaborator": "协作者",
13
14
  "Commanding": "命令中",
14
15
  "Custom domain": "自定义域名",
15
16
  "Custom domain prefix": "自定义域名前缀",
@@ -1 +1 @@
1
- {"name":"mariadb","version":"2.5.6","description":"fast mariadb/mysql connector.","main":"promise.js","types":"types/index.d.ts","directories":{"lib":"lib","test":"test"},"private":false,"scripts":{"test":"npm run test:types-prettier && npm run test:prettier && npm run test:types && npm run test:lint && npm run test:base","test:base":"mocha --no-parallel --timeout 5000 \"test/**/*.js\" ","test:lint":"eslint \"{lib,test}/**/*.js\" ","test:types":"eslint \"types/*.ts\" ","test:types-prettier":"prettier --write \"types/*.ts\"","test:prettier":"prettier --write \"{tools,lib,test,benchmarks}/**/*.js\"","coverage":"npm run coverage:test && npm run coverage:report","coverage:test":"nyc mocha --no-parallel --timeout 5000 \"test/**/*.js\"","coverage:report":"nyc report --reporter=text-lcov > coverage.lcov && codecov","benchmark":"node ./benchmarks/benchmarks.js","generate":"node ./tools/generate-mariadb.js"},"repository":{"type":"git","url":"git+https://github.com/mariadb-corporation/mariadb-connector-nodejs.git"},"keywords":["mariadb","mysql","client","driver","connector"],"files":["lib","types/index.d.ts","promise.js","callback.js"],"engines":{"node":">= 10.13"},"author":"Diego Dupin <diego.dupin@mariadb.com>","license":"LGPL-2.1-or-later","dependencies":{"@types/geojson":"^7946.0.8","@types/node":"^17.0.10","denque":"^2.0.1","iconv-lite":"^0.6.3","long":"^5.2.0","moment-timezone":"^0.5.34","please-upgrade-node":"^3.2.0"},"devDependencies":{"@typescript-eslint/eslint-plugin":"^5.10.0","@typescript-eslint/parser":"^5.10.0","benchmark":"^2.1.4","chai":"^4.3.4","codecov":"^3.8.2","chalk":"^4.1.2","dom-parser":"^0.1.6","error-stack-parser":"^2.0.6","eslint":"^8.7.0","eslint-config-prettier":"^8.3.0","eslint-plugin-markdown":"^2.2.1","eslint-plugin-prettier":"^4.0.0","mocha":"^9.2.0","mocha-lcov-reporter":"^1.3.0","nyc":"^15.1.0","prettier":"^2.5.1","typescript":"^4.5.5"},"bugs":{"url":"https://jira.mariadb.org/projects/CONJS/"},"homepage":"https://github.com/mariadb-corporation/mariadb-connector-nodejs#readme","_lastModified":"2025-07-17T10:55:43.164Z"}
1
+ {"name":"mariadb","version":"2.5.6","description":"fast mariadb/mysql connector.","main":"promise.js","types":"types/index.d.ts","directories":{"lib":"lib","test":"test"},"private":false,"scripts":{"test":"npm run test:types-prettier && npm run test:prettier && npm run test:types && npm run test:lint && npm run test:base","test:base":"mocha --no-parallel --timeout 5000 \"test/**/*.js\" ","test:lint":"eslint \"{lib,test}/**/*.js\" ","test:types":"eslint \"types/*.ts\" ","test:types-prettier":"prettier --write \"types/*.ts\"","test:prettier":"prettier --write \"{tools,lib,test,benchmarks}/**/*.js\"","coverage":"npm run coverage:test && npm run coverage:report","coverage:test":"nyc mocha --no-parallel --timeout 5000 \"test/**/*.js\"","coverage:report":"nyc report --reporter=text-lcov > coverage.lcov && codecov","benchmark":"node ./benchmarks/benchmarks.js","generate":"node ./tools/generate-mariadb.js"},"repository":{"type":"git","url":"git+https://github.com/mariadb-corporation/mariadb-connector-nodejs.git"},"keywords":["mariadb","mysql","client","driver","connector"],"files":["lib","types/index.d.ts","promise.js","callback.js"],"engines":{"node":">= 10.13"},"author":"Diego Dupin <diego.dupin@mariadb.com>","license":"LGPL-2.1-or-later","dependencies":{"@types/geojson":"^7946.0.8","@types/node":"^17.0.10","denque":"^2.0.1","iconv-lite":"^0.6.3","long":"^5.2.0","moment-timezone":"^0.5.34","please-upgrade-node":"^3.2.0"},"devDependencies":{"@typescript-eslint/eslint-plugin":"^5.10.0","@typescript-eslint/parser":"^5.10.0","benchmark":"^2.1.4","chai":"^4.3.4","codecov":"^3.8.2","chalk":"^4.1.2","dom-parser":"^0.1.6","error-stack-parser":"^2.0.6","eslint":"^8.7.0","eslint-config-prettier":"^8.3.0","eslint-plugin-markdown":"^2.2.1","eslint-plugin-prettier":"^4.0.0","mocha":"^9.2.0","mocha-lcov-reporter":"^1.3.0","nyc":"^15.1.0","prettier":"^2.5.1","typescript":"^4.5.5"},"bugs":{"url":"https://jira.mariadb.org/projects/CONJS/"},"homepage":"https://github.com/mariadb-corporation/mariadb-connector-nodejs#readme","_lastModified":"2025-07-25T05:48:51.245Z"}
@@ -1 +1 @@
1
- {"name":"qs","description":"A querystring parser that supports nesting and arrays, with a depth limit","homepage":"https://github.com/ljharb/qs","version":"6.14.0","repository":{"type":"git","url":"https://github.com/ljharb/qs.git"},"funding":{"url":"https://github.com/sponsors/ljharb"},"main":"lib/index.js","sideEffects":false,"contributors":[{"name":"Jordan Harband","email":"ljharb@gmail.com","url":"http://ljharb.codes"}],"keywords":["querystring","qs","query","url","parse","stringify"],"engines":{"node":">=0.6"},"dependencies":{"side-channel":"^1.1.0"},"devDependencies":{"@browserify/envify":"^6.0.0","@browserify/uglifyify":"^6.0.0","@ljharb/eslint-config":"^21.1.1","browserify":"^16.5.2","bundle-collapser":"^1.4.0","common-shakeify":"~1.0.0","eclint":"^2.8.1","es-value-fixtures":"^1.7.0","eslint":"=8.8.0","evalmd":"^0.0.19","for-each":"^0.3.3","glob":"=10.3.7","has-bigints":"^1.1.0","has-override-mistake":"^1.0.1","has-property-descriptors":"^1.0.2","has-proto":"^1.2.0","has-symbols":"^1.1.0","iconv-lite":"^0.5.1","in-publish":"^2.0.1","jackspeak":"=2.1.1","mkdirp":"^0.5.5","mock-property":"^1.1.0","module-deps":"^6.2.3","npmignore":"^0.3.1","nyc":"^10.3.2","object-inspect":"^1.13.3","qs-iconv":"^1.0.4","safe-publish-latest":"^2.0.0","safer-buffer":"^2.1.2","tape":"^5.9.0","unassertify":"^3.0.1"},"scripts":{"prepack":"npmignore --auto --commentLines=autogenerated && npm run dist","prepublishOnly":"safe-publish-latest","prepublish":"not-in-publish || npm run prepublishOnly","pretest":"npm run --silent readme && npm run --silent lint","test":"npm run tests-only","tests-only":"nyc tape 'test/**/*.js'","posttest":"npx npm@'>=10.2' audit --production","readme":"evalmd README.md","postlint":"eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git' | grep -v dist/)","lint":"eslint --ext=js,mjs .","dist":"mkdirp dist && browserify --standalone Qs -g unassertify -g @browserify/envify -g [@browserify/uglifyify --mangle.keep_fnames --compress.keep_fnames --format.indent_level=1 --compress.arrows=false --compress.passes=4 --compress.typeofs=false] -p common-shakeify -p bundle-collapser/plugin lib/index.js > dist/qs.js"},"license":"BSD-3-Clause","publishConfig":{"ignore":["!dist/*","bower.json","component.json",".github/workflows","logos","tea.yaml"]},"_lastModified":"2025-07-17T10:55:43.474Z"}
1
+ {"name":"qs","description":"A querystring parser that supports nesting and arrays, with a depth limit","homepage":"https://github.com/ljharb/qs","version":"6.14.0","repository":{"type":"git","url":"https://github.com/ljharb/qs.git"},"funding":{"url":"https://github.com/sponsors/ljharb"},"main":"lib/index.js","sideEffects":false,"contributors":[{"name":"Jordan Harband","email":"ljharb@gmail.com","url":"http://ljharb.codes"}],"keywords":["querystring","qs","query","url","parse","stringify"],"engines":{"node":">=0.6"},"dependencies":{"side-channel":"^1.1.0"},"devDependencies":{"@browserify/envify":"^6.0.0","@browserify/uglifyify":"^6.0.0","@ljharb/eslint-config":"^21.1.1","browserify":"^16.5.2","bundle-collapser":"^1.4.0","common-shakeify":"~1.0.0","eclint":"^2.8.1","es-value-fixtures":"^1.7.0","eslint":"=8.8.0","evalmd":"^0.0.19","for-each":"^0.3.3","glob":"=10.3.7","has-bigints":"^1.1.0","has-override-mistake":"^1.0.1","has-property-descriptors":"^1.0.2","has-proto":"^1.2.0","has-symbols":"^1.1.0","iconv-lite":"^0.5.1","in-publish":"^2.0.1","jackspeak":"=2.1.1","mkdirp":"^0.5.5","mock-property":"^1.1.0","module-deps":"^6.2.3","npmignore":"^0.3.1","nyc":"^10.3.2","object-inspect":"^1.13.3","qs-iconv":"^1.0.4","safe-publish-latest":"^2.0.0","safer-buffer":"^2.1.2","tape":"^5.9.0","unassertify":"^3.0.1"},"scripts":{"prepack":"npmignore --auto --commentLines=autogenerated && npm run dist","prepublishOnly":"safe-publish-latest","prepublish":"not-in-publish || npm run prepublishOnly","pretest":"npm run --silent readme && npm run --silent lint","test":"npm run tests-only","tests-only":"nyc tape 'test/**/*.js'","posttest":"npx npm@'>=10.2' audit --production","readme":"evalmd README.md","postlint":"eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git' | grep -v dist/)","lint":"eslint --ext=js,mjs .","dist":"mkdirp dist && browserify --standalone Qs -g unassertify -g @browserify/envify -g [@browserify/uglifyify --mangle.keep_fnames --compress.keep_fnames --format.indent_level=1 --compress.arrows=false --compress.passes=4 --compress.typeofs=false] -p common-shakeify -p bundle-collapser/plugin lib/index.js > dist/qs.js"},"license":"BSD-3-Clause","publishConfig":{"ignore":["!dist/*","bower.json","component.json",".github/workflows","logos","tea.yaml"]},"_lastModified":"2025-07-25T05:48:51.562Z"}
@@ -5,3 +5,4 @@ export declare function listPinned(ctx: Context, next: Next): Promise<void>;
5
5
  export declare function create(ctx: Context, next: Next): Promise<void>;
6
6
  export declare function startAll(ctx: Context, next: Next): Promise<void>;
7
7
  export declare function stopAll(ctx: Context, next: Next): Promise<void>;
8
+ export declare function share(ctx: Context, next: Next): Promise<void>;
@@ -19,6 +19,7 @@ var apps_exports = {};
19
19
  __export(apps_exports, {
20
20
  create: () => create,
21
21
  listPinned: () => listPinned,
22
+ share: () => share,
22
23
  start: () => start,
23
24
  startAll: () => startAll,
24
25
  stop: () => stop,
@@ -167,10 +168,22 @@ async function stopAll(ctx, next) {
167
168
  all
168
169
  };
169
170
  }
171
+ async function share(ctx, next) {
172
+ const { filterByTk } = ctx.action.params;
173
+ const { partners } = ctx.action.params.values;
174
+ const repo = ctx.db.getRepository("applications");
175
+ await repo.update({
176
+ filterByTk,
177
+ values: {
178
+ partners
179
+ }
180
+ });
181
+ }
170
182
  // Annotate the CommonJS export names for ESM import in node:
171
183
  0 && (module.exports = {
172
184
  create,
173
185
  listPinned,
186
+ share,
174
187
  start,
175
188
  startAll,
176
189
  stop,
@@ -92,6 +92,15 @@ var applications_default = (0, import_database.defineCollection)({
92
92
  defaultValue: () => {
93
93
  return (0, import_utils.uid)(16);
94
94
  }
95
+ },
96
+ {
97
+ type: "belongsToMany",
98
+ name: "partners",
99
+ target: "users",
100
+ foreignKey: "applicationName",
101
+ otherKey: "userId",
102
+ targetKey: "id",
103
+ through: "applicationsPartners"
95
104
  }
96
105
  ]
97
106
  });
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@tachybase/database").CollectionOptions;
2
+ export default _default;
@@ -0,0 +1,44 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var applicationsPartners_exports = {};
19
+ __export(applicationsPartners_exports, {
20
+ default: () => applicationsPartners_default
21
+ });
22
+ module.exports = __toCommonJS(applicationsPartners_exports);
23
+ var import_database = require("@tachybase/database");
24
+ var applicationsPartners_default = (0, import_database.defineCollection)({
25
+ dumpRules: {
26
+ group: "third-party"
27
+ },
28
+ name: "applicationsPartners",
29
+ autoGenId: false,
30
+ createdBy: true,
31
+ updatedBy: true,
32
+ fields: [
33
+ {
34
+ name: "applicationName",
35
+ type: "string",
36
+ primaryKey: true
37
+ },
38
+ {
39
+ name: "userId",
40
+ type: "bigInt",
41
+ primaryKey: true
42
+ }
43
+ ]
44
+ });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tachybase/module-multi-app",
3
3
  "displayName": "Multi-app manager",
4
- "version": "1.3.19",
4
+ "version": "1.3.21",
5
5
  "description": "Dynamically create multiple apps without separate deployments.",
6
6
  "keywords": [
7
7
  "System management"
@@ -10,25 +10,25 @@
10
10
  "main": "./dist/server/index.js",
11
11
  "devDependencies": {
12
12
  "@ant-design/icons": "^5.5.2",
13
- "@types/lodash": "4.17.18",
13
+ "@types/lodash": "4.17.20",
14
14
  "antd": "5.22.5",
15
- "async-mutex": "^0.3.2",
15
+ "async-mutex": "^0.5.0",
16
16
  "lodash": "4.17.21",
17
17
  "mysql2": "^3.14.1",
18
- "pg": "^8.13.1",
18
+ "pg": "^8.16.3",
19
19
  "qs": "^6.14.0",
20
20
  "react": "~18.3.1",
21
21
  "react-i18next": "^15.2.0",
22
22
  "react-router-dom": "6.28.1",
23
- "@tachybase/schema": "1.3.19"
23
+ "@tachybase/schema": "1.3.21"
24
24
  },
25
25
  "peerDependencies": {
26
- "@tachybase/actions": "1.3.19",
27
- "@tachybase/client": "1.3.19",
28
- "@tachybase/database": "1.3.19",
29
- "@tachybase/server": "1.3.19",
30
- "@tachybase/test": "1.3.19",
31
- "@tachybase/utils": "1.3.19"
26
+ "@tachybase/actions": "1.3.21",
27
+ "@tachybase/client": "1.3.21",
28
+ "@tachybase/database": "1.3.21",
29
+ "@tachybase/server": "1.3.21",
30
+ "@tachybase/test": "1.3.21",
31
+ "@tachybase/utils": "1.3.21"
32
32
  },
33
33
  "description.zh-CN": "无需单独部署即可动态创建多个应用。",
34
34
  "displayName.zh-CN": "多应用管理器",