@tachybase/plugin-data-source-common 1.3.21 → 1.3.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/features/rest-api/request-configs/request-tab/debounceClick.util.d.ts +1 -1
- package/dist/client/index.js +8 -8
- package/dist/externalVersion.js +7 -9
- package/dist/server/http/plugin.d.ts +1 -1
- package/dist/server/http/plugin.js +1 -1
- package/dist/server/http/services/http-collection-manager.d.ts +2 -2
- package/dist/server/http/services/http-collection-manager.js +2 -2
- package/dist/server/http/services/http-collection.d.ts +2 -2
- package/dist/server/http/services/http-collection.js +8 -8
- package/dist/server/http/services/http-data-source.d.ts +1 -1
- package/dist/server/http/services/http-data-source.js +2 -2
- package/dist/server/http/services/transform-response.js +2 -2
- package/dist/server/mysql/database-introspector.d.ts +1 -1
- package/dist/server/mysql/database-introspector.js +4 -4
- package/dist/server/mysql/mysql-collection-manager.d.ts +1 -1
- package/dist/server/mysql/mysql-collection-manager.js +2 -2
- package/dist/server/mysql/mysql-data-source.d.ts +1 -1
- package/dist/server/mysql/mysql-data-source.js +4 -5
- package/dist/server/pg/database-introspector.d.ts +1 -1
- package/dist/server/pg/database-introspector.js +4 -4
- package/dist/server/pg/postgres-collection-manager.d.ts +1 -1
- package/dist/server/pg/postgres-collection-manager.js +2 -2
- package/dist/server/pg/postgres-data-source.d.ts +1 -2
- package/dist/server/pg/postgres-data-source.js +4 -5
- package/dist/server/plugin.d.ts +1 -1
- package/dist/server/plugin.js +1 -1
- package/package.json +14 -20
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
1
|
+
import lodash from 'lodash';
|
|
2
2
|
export declare const debounceClick: lodash.DebouncedFunc<(parentForm: any, actionKey: any, keyName: any, headerValue: any) => void>;
|
package/dist/client/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(y,r){typeof exports=="object"&&typeof module!="undefined"?r(exports,require("@tachybase/client"),require("@tachybase/module-data-source/client"),require("react/jsx-runtime"),require("react"),require("@ant-design/icons"),require("antd"),require("@
|
|
1
|
+
(function(y,r){typeof exports=="object"&&typeof module!="undefined"?r(exports,require("@tachybase/client"),require("@tachybase/module-data-source/client"),require("react/jsx-runtime"),require("react"),require("@ant-design/icons"),require("antd"),require("@tego/client"),require("@tachybase/schema"),require("lodash"),require("react-router-dom")):typeof define=="function"&&define.amd?define(["exports","@tachybase/client","@tachybase/module-data-source/client","react/jsx-runtime","react","@ant-design/icons","antd","@tego/client","@tachybase/schema","lodash","react-router-dom"],r):(y=typeof globalThis!="undefined"?globalThis:y||self,r(y["@tachybase/plugin-data-source-common"]={},y["@tachybase/client"],y["@tachybase/module-data-source"],y.jsxRuntime,y.react,y["@ant-design/icons"],y.antd,y["@tego/client"],y["@tachybase/schema"],y.lodash,y["react-router-dom"]))})(this,function(y,r,P,c,v,X,g,q,x,V,L){"use strict";var bt=Object.defineProperty,gt=Object.defineProperties;var It=Object.getOwnPropertyDescriptors;var R=Object.getOwnPropertySymbols;var ie=Object.prototype.hasOwnProperty,pe=Object.prototype.propertyIsEnumerable;var ce=(y,r,P)=>r in y?bt(y,r,{enumerable:!0,configurable:!0,writable:!0,value:P}):y[r]=P,f=(y,r)=>{for(var P in r||(r={}))ie.call(r,P)&&ce(y,P,r[P]);if(R)for(var P of R(r))pe.call(r,P)&&ce(y,P,r[P]);return y},A=(y,r)=>gt(y,It(r));var le=(y,r)=>{var P={};for(var c in y)ie.call(y,c)&&r.indexOf(c)<0&&(P[c]=y[c]);if(y!=null&&R)for(var c of R(y))r.indexOf(c)<0&&pe.call(y,c)&&(P[c]=y[c]);return P};var D=(y,r,P)=>new Promise((c,v)=>{var X=x=>{try{q(P.next(x))}catch(V){v(V)}},g=x=>{try{q(P.throw(x))}catch(V){v(V)}},q=x=>x.done?c(x.value):Promise.resolve(x.value).then(X,g);q((P=P.apply(y,r)).next())});const C="data-source-common",F=(e,t=!1)=>r.tval(e,{ns:t?void 0:C});function _(e,t={}){return r.i18n.t(e,A(f({},t),{ns:[C,"core"]}))}const k=(e=!1)=>{const{i18n:t}=r.useApp();return{t:(o,n={})=>t.t(o,f({ns:e?void 0:C},n))}},$=v.createContext({}),de=$.Provider;function O(){return v.useContext($)}const J=v.createContext({}),ue=J.Provider;function j(){return v.useContext(J)}const me=e=>{const{visible:t,setVisible:s}=e,[o,n]=v.useState(null),[a,i]=v.useState(null),[p,l]=v.useState(null);return c.jsx(r.ActionContextProvider,{visible:t,setVisible:s,children:c.jsx(ue,{value:{rawResponse:o,debugResponse:a,responseValidationErrorMessage:p,setRawResponse:n,setDebugResponse:i,setResponseValidationErrorMessage:l},children:e.children})})},G={list:["page","pageSize","filter","sort","appends","fields","except"],get:["filterByTk","filter","sort","appends","fields","except"],create:["whiteList","blacklist","body"],update:["filterByTk","filter","whiteList","blacklist","body"],destroy:["filterByTk","filter"]},ye=[{name:"X-App",title:"X-App"},{name:"X-Locale",title:"X-Locale"},{name:"X-Hostname",title:"X-Hostname"},{name:"X-Timezone",title:"X-Timezone"},{name:"X-Role",title:"X-Role"},{name:"X-Authenticator",title:"X-Authenticator"}],K=e=>{var p,l;const t=r.useCompile(),{t:s}=k(),o=v.useContext(r.SchemaComponentContext),{actionKey:n}=O(),{variables:a}=((l=(p=o.dataSourceData)==null?void 0:p.data)==null?void 0:l.options)||{};return v.useMemo(()=>xe({t:s,variables:a,compile:t,actionKey:n,showResponse:e}),[n])},xe=e=>{const{t,variables:s,compile:o,actionKey:n,showResponse:a}=e,i=[];return s&&i.push({name:"dataSourceVariables",title:t("Custom variables"),children:s==null?void 0:s.map(p=>({name:o(p.name),title:p.name}))}),i.push({name:"request",title:t("TachyBase request"),children:[{name:"params",title:"params",children:(G[n]||[]).map(p=>({name:p,title:p}))},{name:"header",title:"headers",children:ye},{name:"body",title:"Body"},{name:"token",title:"Token"}]}),a&&i.push({name:"rawResponse",title:t("Third party response"),children:[{name:"body",title:"body"}]}),i},fe=e=>{const{t,method:s,setFormValue:o}=e;return{name:"method",title:"HTTP method",default:s,"x-decorator":"FormItem","x-decorator-props":{validator:{required:!0,message:t("Method is required")},feedbackLayout:"popover"},required:!0,"x-component":"Select","x-component-props":{defaultValue:s,onChange:n=>{o(n,"method")},options:[{value:"GET",label:"GET"},{value:"POST",label:"POST"},{value:"PUT",label:"PUT"},{value:"PATCH",label:"PATCH"},{value:"DELETE",label:"DELETE"}]}}},he=e=>{const{t}=k(),{method:s,setFormValue:o}=e,n=fe({t,method:s,setFormValue:o});return c.jsx(r.SchemaComponent,{schema:n})},be=e=>{const{t,path:s,setFormValue:o,baseUrl:n}=e;return{name:"path",title:"URL",required:!0,default:s,"x-decorator":"FormItem","x-decorator-props":{feedbackLayout:"popover",addonBefore:c.jsx(r.EllipsisWithTooltip,{ellipsis:!0,children:c.jsx(r.Input.ReadPretty,{value:n})}),validator:{required:!0,message:t("Path is required")},className:r.css`
|
|
2
2
|
.ant-formily-item-addon-before {
|
|
3
3
|
border-width: 1px;
|
|
4
4
|
border-style: solid;
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
text-overflow: ellipsis;
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
-
`,style:{width:"100%"}},"x-component":r.Variable.RawTextArea,"x-component-props":{defaultValue:s,autoSize:!0,onChange:a=>{o(a.target.value,"path")},scope:
|
|
20
|
+
`,style:{width:"100%"}},"x-component":r.Variable.RawTextArea,"x-component-props":{defaultValue:s,autoSize:!0,onChange:a=>{o(a.target.value,"path")},scope:K,fieldNames:{value:"name",label:"title"},style:{borderTopLeftRadius:"0",borderBottomLeftRadius:"0"}}}},ge=e=>{var l,d,u;const{t}=k(),{path:s,setFormValue:o,dataSourceKey:n}=e,i=(u=(d=(l=r.useApp().dataSourceManager.getDataSource(n))==null?void 0:l.getOptions())==null?void 0:d.options)==null?void 0:u.baseUrl,p=be({t,path:s,setFormValue:o,baseUrl:i});return c.jsx(r.SchemaComponent,{schema:p})},Y=e=>{var h;const{data:t}=r.useCollectionRecord(),{form:s,actionKey:o,requestActionForm:n}=O(),a=r.useSchemaComponentContext(),{path:i,method:p}=((h=t==null?void 0:t.actions)==null?void 0:h[o])||{},{name:l}=L.useParams(),d=V.debounce((T,w)=>D(null,null,function*(){const{actions:b}=(s==null?void 0:s.values)||{};s.setValuesIn("actions",A(f({},b),{[o]:A(f({},b==null?void 0:b[o]),{[w]:T})})),n.setValuesIn(w,T)}),100),u=v.useMemo(()=>x.createForm({initialValues:n.values}),[]);return c.jsxs(r.FormProvider,{form:e!=null&&e.actionForm?u:n,children:[c.jsx(he,{method:p,setFormValue:d}),c.jsx(x.SchemaOptionsContext.Provider,{value:a,children:c.jsx(ge,{path:i,setFormValue:d,dataSourceKey:l})})]})},W=V.debounce((e,t,s,o)=>{const{actions:n}=e.values||{};e.setValuesIn("actions",A(f({},n),{[t]:A(f({},n==null?void 0:n[t]),{[s]:o})}))},400),Ie=({defaultValue:e,actionKey:t,parentForm:s,field:o})=>({type:"object",properties:{contentType:{type:"string","x-decorator":"FormItem","x-component":"Select",placeholder:`{{t("Content-Type",{ ns: "${C}" })}}`,default:e==null?void 0:e.contentType,"x-component-props":{onChange:n=>{W(s,t,"contentType",n)}},enum:[{value:"application/x-www-form-urlencoded",label:"application/x-www-form-urlencoded "},{value:"application/json",label:"application/json"}],"x-reactions":n=>{const a=s.values.actions[t],i=a==null?void 0:a.contentType;(n==null?void 0:n.value)!==i&&n.setValue(i!=null?i:"application/json"),n.value||W(s,t,"contentType","application/json")}},body:{type:"array","x-component":"ArrayItems","x-decorator":"FormItem",default:e.body,items:{type:"object",properties:{space:{type:"void","x-component":"Space","x-component-props":{style:{flexWrap:"nowrap",maxWidth:"100%",display:"flex"},className:r.css`
|
|
21
21
|
& > .ant-space-item:first-child,
|
|
22
22
|
& > .ant-space-item:last-child {
|
|
23
23
|
flex-shrink: 0;
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
& > .ant-space-item:nth-of-type(2) {
|
|
27
27
|
flex: 1;
|
|
28
28
|
}
|
|
29
|
-
`},properties:{name:{type:"string","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:'{{t("Name")}}'}},value:{type:"string","x-decorator":"FormItem","x-component":"Variable.RawTextArea","x-component-props":{scope:"{{useVariableOptions}}",autoSize:!0,fieldNames:{value:"name",label:"title"},style:{minWidth:"220px"}}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove","x-component-props":{onClick:()=>{
|
|
29
|
+
`},properties:{name:{type:"string","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:'{{t("Name")}}'}},value:{type:"string","x-decorator":"FormItem","x-component":"Variable.RawTextArea","x-component-props":{scope:"{{useVariableOptions}}",autoSize:!0,fieldNames:{value:"name",label:"title"},style:{minWidth:"220px"}}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove","x-component-props":{onClick:()=>{W(s,t,"body",o.form.values.body)}}}}}}},properties:{add:{type:"void",title:`{{t("Add", { ns: "${C}" })}}`,"x-component":"ArrayItems.Addition"}},"x-reactions":[{dependencies:[".contentType"],fulfill:{state:{visible:'{{ $deps[0]==="application/x-www-form-urlencoded"}}'}}}]},jsonBody:{type:"string","x-decorator":"FormItem","x-component":"Variable.JSON",default:e.jsonBody,"x-component-props":{scope:"{{useVariableOptions}}",autoSize:!0,fieldNames:{value:"name",label:"title"},placeholder:'{{t("Value")}}',style:{minHeight:200},onChange:n=>{const{actions:a}=s.values||{};s.setValuesIn("actions",A(f({},a),{[t]:A(f({},a==null?void 0:a[t]),{body:n})}))}},"x-reactions":[{dependencies:[".contentType"],fulfill:{state:{visible:'{{ $deps[0]==="application/json"}}'}}},n=>{var i,p,l;const a=(l=(p=(i=s==null?void 0:s.values)==null?void 0:i.actions)==null?void 0:p[t])==null?void 0:l.body;(n==null?void 0:n.value)!==a&&n.setValue(s.values.actions[t].body)}]}}}),ve=()=>{var a,i;const e=x.useField(),{form:t,actionKey:s}=O(),o=(i=(a=t==null?void 0:t.values)==null?void 0:a.actions)==null?void 0:i[s],n=Ie({parentForm:t,actionKey:s,defaultValue:{contentType:o==null?void 0:o.contentType,body:o==null?void 0:o.body,jsonBody:o==null?void 0:o.body},field:e});return c.jsx(r.SchemaComponent,{schema:n,components:{ArrayItems:q.ArrayItems,FormItem:r.FormItem,Input:g.Input,FormProvider:r.FormProvider},scope:{useVariableOptions:K}})},Ce=({title:e,defaultValue:t,field:s,parentForm:o,actionKey:n})=>{const a=p=>{var d,u,h;const l=(h=(u=(d=o==null?void 0:o.values)==null?void 0:d.actions)==null?void 0:u[n])==null?void 0:h.headers;(l==null?void 0:l.length)>0&&l!==t&&p.setValue(l)},i=()=>{W(o,n,"headers",s.form.values.headers)};return{type:"object","x-decorator":"Form",properties:{headers:{type:"array","x-component":"ArrayItems",default:t,"x-decorator":"FormItem","x-reactions":a,items:{type:"object",properties:{space:{type:"void","x-component":"Space","x-component-props":{style:{flexWrap:"nowrap",maxWidth:"100%",display:"flex"},className:r.css`
|
|
30
30
|
& > .ant-space-item:first-child,
|
|
31
31
|
& > .ant-space-item:last-child {
|
|
32
32
|
flex-shrink: 0;
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
& > .ant-space-item:nth-of-type(2) {
|
|
36
36
|
flex: 1;
|
|
37
37
|
}
|
|
38
|
-
`},properties:{name:{type:"string","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:'{{t("Name")}}'}},value:{type:"string","x-decorator":"FormItem","x-component":"Variable.RawTextArea","x-component-props":{scope:"{{useVariableOptions}}",autoSize:!0,fieldNames:{value:"name",label:"title"},style:{minWidth:"220px"}}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove","x-component-props":{onClick:i}}}}}},properties:{add:{title:e,type:"void","x-component":"ArrayItems.Addition"}}}}}},
|
|
38
|
+
`},properties:{name:{type:"string","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:'{{t("Name")}}'}},value:{type:"string","x-decorator":"FormItem","x-component":"Variable.RawTextArea","x-component-props":{scope:"{{useVariableOptions}}",autoSize:!0,fieldNames:{value:"name",label:"title"},style:{minWidth:"220px"}}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove","x-component-props":{onClick:i}}}}}},properties:{add:{title:e,type:"void","x-component":"ArrayItems.Addition"}}}}}},Fe=()=>{var i,p;const{t:e}=k(),t=x.useField(),{form:s,actionKey:o}=O(),n=(p=(i=s==null?void 0:s.values)==null?void 0:i.actions)==null?void 0:p[o],a=Ce({title:e("Add header"),defaultValue:(n==null?void 0:n.headers)||[],field:t,parentForm:s,actionKey:o});return c.jsx(r.SchemaComponent,{schema:a,components:{ArrayItems:q.ArrayItems,FormItem:r.FormItem,Input:g.Input},scope:{useVariableOptions:K}})},Ae=({title:e,defaultValue:t,field:s,parentForm:o,actionKey:n})=>({type:"object","x-decorator":"Form",properties:{params:{type:"array","x-component":"ArrayItems",default:t,"x-decorator":"FormItem","x-reactions":a=>{var p,l,d;const i=(d=(l=(p=o.values)==null?void 0:p.actions)==null?void 0:l[n])==null?void 0:d.params;i!=null&&i.length&&i!==t&&a.setValue(i)},items:{type:"object",properties:{space:{type:"void","x-component":"Space","x-component-props":{style:{flexWrap:"nowrap",maxWidth:"100%",display:"flex"},className:r.css`
|
|
39
39
|
& > .ant-space-item:first-child,
|
|
40
40
|
& > .ant-space-item:last-child {
|
|
41
41
|
flex-shrink: 0;
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
& > .ant-space-item:nth-of-type(2) {
|
|
45
45
|
flex: 1;
|
|
46
46
|
}
|
|
47
|
-
`},properties:{name:{type:"string","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:'{{t("Name")}}',style:{width:"100%"}}},value:{type:"string","x-decorator":"FormItem","x-component":"Variable.RawTextArea","x-component-props":{scope:"{{useVariableOptions}}",autoSize:!0,fieldNames:{value:"name",label:"title"},style:{minWidth:"230px",width:"100%"}}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove","x-component-props":{onClick:()=>{var a;
|
|
47
|
+
`},properties:{name:{type:"string","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:'{{t("Name")}}',style:{width:"100%"}}},value:{type:"string","x-decorator":"FormItem","x-component":"Variable.RawTextArea","x-component-props":{scope:"{{useVariableOptions}}",autoSize:!0,fieldNames:{value:"name",label:"title"},style:{minWidth:"230px",width:"100%"}}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove","x-component-props":{onClick:()=>{var a;W(o,n,"params",(a=s.form.values)==null?void 0:a.params)}}}}}}},properties:{add:{type:"void",title:e,"x-component":"ArrayItems.Addition"}}}}}),Se=()=>{var i,p;const{t:e}=k(),t=x.useField(),{form:s,actionKey:o}=O(),n=(p=(i=s==null?void 0:s.values)==null?void 0:i.actions)==null?void 0:p[o],a=Ae({title:e("Add parameter"),defaultValue:n==null?void 0:n.params,field:t,parentForm:s,actionKey:o});return c.jsx(r.SchemaComponent,{schema:a,components:{ArrayItems:q.ArrayItems,FormItem:r.FormItem,Input:g.Input},scope:{useVariableOptions:K}})},we=e=>{const{t}=e;return[{key:"parameters",label:t("Parameters"),children:c.jsx(Se,{})},{key:"body",label:t("Body"),children:c.jsx(ve,{})},{key:"headers",label:t("Headers"),children:c.jsx(Fe,{})}]},Q=()=>{const{t:e}=k(),t=we({t:e});return c.jsx(g.Tabs,{items:t})},Te={data:"{{rawResponse.body}}",meta:{}},Pe=(e,t,s)=>D(null,null,function*(){const{actions:o}=e.values||{};e.setValuesIn("actions",A(f({},o),{[t]:A(f({},o==null?void 0:o[t]),{responseTransformer:s})}))}),Z=()=>{var l,d,u;const{form:e,actionKey:t,responseTransformer:s,setResponseTransformer:o}=O(),n=(u=(d=(l=e==null?void 0:e.values)==null?void 0:l.actions)==null?void 0:d[t])==null?void 0:u.responseTransformer,a=s!=null?s:n,{data:i}=r.useCollectionRecord();v.useEffect(()=>{var h,T;if(!((T=(h=i==null?void 0:i.actions)==null?void 0:h[t])!=null&&T.responseTransformer)&&!n){const{actions:w}=e.values||{};e.setValuesIn("actions",A(f({},w),{[t]:A(f({},w==null?void 0:w[t]),{responseTransformer:Te})}))}},[]);const p=K(!0);return c.jsx(r.Variable.JSON,{value:a,onChange:h=>{o(h),Pe(e,t,h)},autoSize:{minRows:5},fieldNames:{value:"name",label:"title"},scope:()=>p})},qe=()=>{const{responseValidationErrorMessage:e}=j();return e?c.jsxs(c.Fragment,{children:[c.jsx(g.Alert,{type:"error",showIcon:!0,message:e}),c.jsx("br",{})]}):null},ke=e=>({type:"object","x-decorator":"Form","x-decorator-props":{useValues(t){return r.useRequest(()=>Promise.resolve({data:{}}),t)}},properties:{[x.uid()]:{type:"string",default:e,"x-read-pretty":!0,"x-decorator":"FormItem","x-component":"Input.JSON","x-component-props":{style:{maxHeight:"350px"}}}}}),Ve=()=>{const{debugResponse:e}=j(),t=ke(e);return c.jsx(r.SchemaComponent,{schema:t,components:{ArrayTable:q.ArrayTable,FormItem:r.FormItem,Input:r.Input}})},De=e=>{const{t}=e;return[{key:"body",label:t("Body"),children:c.jsx(Ve,{})}]},Me=()=>{const{t:e}=k(),{debugResponse:t}=j(),s=De({t:e});return t?c.jsx(g.Tabs,{defaultActiveKey:"body",items:s}):null},Be=e=>{const{t}=k(),s=t("Extract field metadata from the response data");return c.jsx(g.Tooltip,{title:s,children:e.children})},Ne=()=>{const e=x.useForm(),t=r.useAPIClient(),{t:s}=k(),{setVisible:o}=v.useContext(r.ActionContext),{name:n}=L.useParams(),{rawResponse:a,responseValidationErrorMessage:i}=j(),{form:p,actionKey:l}=O(),{fields:d}=p.values,[u,h]=v.useState(!1),T=V.omit(e.values,"responseTab"),w=()=>D(null,null,function*(){var b,I;try{h(!0);const S=(I=(b=p==null?void 0:p.values)==null?void 0:b.actions)==null?void 0:I[l],m=t.resource("dataSources.httpCollections",n),{data:{data:M}}=yield m.runAction({values:{debug:!1,inferFields:!0,actionOptions:A(f({},S),{type:l,responseTransformer:S==null?void 0:S.responseTransformer}),debugVars:T}});o(!1),h(!1);const{transformedResponse:B,fields:E,filterTargetKey:H}=M;if(H&&p.setValuesIn("filterTargetKey",H),E){const N=V.unionBy(d,E,"name");p.setValuesIn("fields",N)}if(typeof(B==null?void 0:B.data)=="object"){let N=[];l==="get"?N=[B==null?void 0:B.data]:N=B==null?void 0:B.data,p.setValuesIn("preview",N)}}catch(S){h(!1),console.log(S)}});return["list","get"].includes(l)?c.jsx(Be,{children:c.jsx(g.Button,{type:"primary",disabled:!a||i,loading:u,onClick:w,children:s("Extract field metadata")})}):null},ee=({key:e,defaultValue:t})=>({type:"object",properties:{[e]:{type:"array","x-decorator":"FormItem","x-component":"ArrayTable",default:t,"x-component-props":{scroll:{y:300}},items:{type:"object",properties:{column1:{type:"void","x-component":"ArrayTable.Column","x-component-props":{width:200,title:`{{t("Name",{ ns: "${C}" })}}`},properties:{name:{type:"string","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:'{{t("Name")}}'}}}},column2:{type:"void","x-component":"ArrayTable.Column","x-component-props":{width:200,title:`{{t("Value",{ ns: "${C}" })}}`},properties:{value:{type:"string","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:'{{t("Value")}}'}}}}}}}}}),Oe=()=>{const{rawResponse:e}=j(),{request:t}=e||{},s=Object.entries((t==null?void 0:t.headers)||{}).map(([n,a])=>({name:n,value:a})),o=ee({key:"requestHeaders",defaultValue:s});return c.jsx(r.SchemaComponent,{schema:o,components:{ArrayTable:q.ArrayTable,FormItem:r.FormItem,Input:r.Input}})},je=e=>({type:"object","x-decorator":"Form","x-decorator-props":{useValues(t){return r.useRequest(()=>Promise.resolve({data:{}}),t)}},properties:{[x.uid()]:{type:"string",default:e,"x-read-pretty":!0,"x-decorator":"FormItem","x-component":"Input.JSON","x-component-props":{style:{maxHeight:"400px"}}}}}),Ee=()=>{const{rawResponse:e}=j(),{data:t}=e||{},s=je(t);return c.jsx(r.SchemaComponent,{schema:s,components:{ArrayTable:q.ArrayTable,FormItem:r.FormItem,Input:r.Input}})},He=()=>{const{rawResponse:e}=j(),{headers:t}=e||{},s=Object.entries(t||{}).map(([n,a])=>({name:n,value:a})),o=ee({key:"responseHeaders",defaultValue:s});return c.jsx(r.SchemaComponent,{schema:o,components:{ArrayTable:q.ArrayTable,FormItem:r.FormItem,Input:r.Input}})},Le=e=>{const{t}=e;return[{key:"body",label:t("Body"),children:c.jsx(Ee,{})},{key:"responseHeaders",label:t("Response headers"),children:c.jsx(He,{})},{key:"requestHeaders",label:t("Request headers"),children:c.jsx(Oe,{})}]},Ke=()=>{const{t:e}=k(),{rawResponse:t}=j(),{status:s}=t||{},o=Le({t:e});if(!t)return null;const n=s.toString().startsWith("2")?"success":"error",a=c.jsx(g.Tag,{color:n,children:`HTTP Code:${s}`});return c.jsx(g.Card,{title:a,children:c.jsx(g.Tabs,{defaultActiveKey:"body",items:o})})};function We(e,t){var p,l;const s=(l=(p=e==null?void 0:e.values)==null?void 0:p.actions)==null?void 0:l[t];let o=[];const{params:n=[],headers:a=[],body:i=[]}=s||{};return o=[...n,...a].map(d=>{var u;return(u=d==null?void 0:d.value)==null?void 0:u.replace(/{{|}}/g,"")}),typeof i=="string"?o.concat(i==null?void 0:i.replace(/{{|}}/g,"")):o.concat(i==null?void 0:i.map(d=>d==null?void 0:d.value.replace(/{{|}}/g,""))),o.filter(Boolean)}const ze=(e,t)=>{const s=(o,n)=>{We(e,t).find(p=>((p==null?void 0:p.split("."))||[]).pop()===o)&&(n.description=null)};return{page:{type:"number",title:"Page","x-decorator":"FormItem","x-component":"InputNumber",description:"{{t('Page variable not used. Pagination based on total current request data.')}}","x-reactions":o=>s("page",o)},pageSize:{type:"number",title:"PageSize","x-decorator":"FormItem","x-component":"InputNumber",description:"{{t('PageSize variable not used. Pagination based on total current request data.')}}","x-reactions":o=>s("pageSize",o)},filter:{type:"object",title:"Filter","x-decorator":"FormItem","x-component":"Input.JSON",description:"{{t('Filter variable not used. Filtering will apply to the current request data.')}}","x-reactions":o=>s("filter",o)},sort:{type:"string",title:"Sort","x-decorator":"FormItem","x-component":"Input",description:"{{t('Sort variable not used. Sorting will apply to the current request data.')}}","x-reactions":o=>s("sort",o)},appends:{type:"string",title:"Appends","x-decorator":"FormItem","x-component":"Input"},fields:{type:"string",title:"Fields","x-decorator":"FormItem","x-component":"Input",description:"{{t('Fields variable not used. Filtering will be based on the current request data.')}}","x-reactions":o=>s("fields",o)},except:{type:"string",title:"Except","x-decorator":"FormItem","x-component":"Input",description:"{{t('Except variable not used. Filtering will be based on the current request data.')}}","x-reactions":o=>s("except",o)},filterByTk:{type:"string",title:"FilterByTk","x-decorator":"FormItem","x-component":"Input",description:"{{t('The current parameters are not adapted')}}","x-reactions":o=>s("filterByTk",o)},whiteList:{type:"string",title:"whiteList","x-decorator":"FormItem","x-component":"Input"},blacklist:{type:"string",title:"blacklist","x-decorator":"FormItem","x-component":"Input"},body:{type:"object",title:"Body","x-decorator":"FormItem","x-component":"Input.JSON","x-component-props":{autoSize:{minRows:5,maxRows:20}}}}};function Ue(e,t){const s={},o=G[e]||[],n=ze(t,e);for(const a of o)s[a]=n[a];return s}const Xe=()=>{const{t:e}=k(),{actionKey:t,form:s,requestActionForm:o}=O(),n=Ue(t,s),a=()=>{const i=l=>D(null,null,function*(){const{actions:d}=s.values||{},{path:u,value:h}=l.getState();u.includes("add")||(yield s.setValuesIn("actions",A(f({},d),{[t]:q.unflatten(A(f({},d==null?void 0:d[t]),{[u]:h}))})),["method","path"].includes(u)&&(yield o.setValuesIn([u],h)))}),p=V.debounce(i,400);x.onFieldChange("*",(l,d)=>{d.modified&&p(l)})};return{type:"object",properties:{modal:{type:"void","x-decorator":"Form","x-component":"Action.Modal","x-component-props":{className:r.cx("tb-action-popup",r.css`
|
|
48
48
|
.ant-modal-footer {
|
|
49
49
|
position: absolute;
|
|
50
50
|
bottom: 24px;
|
|
@@ -58,11 +58,11 @@
|
|
|
58
58
|
.ant-formily-item-feedback-layout-loose {
|
|
59
59
|
margin-bottom: 10px;
|
|
60
60
|
}
|
|
61
|
-
`},properties:{requestAction:{type:"string","x-component":
|
|
61
|
+
`},properties:{requestAction:{type:"string","x-component":Y,"x-component-props":{actionForm:!0}},requestTab:{type:"void","x-decorator":"FormItem","x-component":Q},responseTab:{type:"string","x-component":Ke}}}}},tachyBaseResponse:{type:"void","x-decorator":"Col","x-decorator-props":{span:8},"x-component":"Card","x-component-props":{bordered:!1,title:e("TachyBase response"),style:{height:"80vh",overflowY:"auto",borderTopLeftRadius:0,borderBottomLeftRadius:0}},properties:{responseContainer:{type:"void","x-decorator":"Form",properties:{alertError:{type:"string","x-component":qe},responseTransformer:{type:"string","x-decorator":"FormItem","x-component":Z},debugResponse:{type:"string","x-component":Me}}}}}}},footer:{type:"void","x-component":"Action.Modal.Footer",properties:{debug:{title:'{{t("Debug")}}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ useDebugAction }}"}},extractFieldMetadata:{"x-component":Ne}}}}}}}},Re=()=>{const e=x.useForm(),{setVisible:t}=v.useContext(r.ActionContext),{setRawResponse:s,setDebugResponse:o}=j();return{run(){t(!1),e.reset(),e.setValuesIn("responseTab",null),s(null),o(null)}}},_e=()=>{const e=x.useField(),t=r.useAPIClient(),s=x.useForm(),{form:o,actionKey:n,requestActionForm:a}=O(),{name:i}=L.useParams(),{setRawResponse:p,setDebugResponse:l,setResponseValidationErrorMessage:d}=j();return{run(){return D(this,null,function*(){var T,w;const h=(w=(T=o==null?void 0:o.values)==null?void 0:T.actions)==null?void 0:w[n];try{e.data=(e==null?void 0:e.data)||{},e.data.loading=!0,yield a.submit();const b=t.resource("dataSources.httpCollections",i),I=V.omit(s.values,"responseTab"),{data:{data:S}}=yield b.runAction({values:{debug:!0,inferFields:!1,actionOptions:A(f({},h),{type:n,responseTransformer:h==null?void 0:h.responseTransformer}),debugVars:I}});e.data.loading=!1;const{rawResponse:m,debugBody:M,responseValidationErrorMessage:B}=S;p(m),l(M),d(B)}catch(b){e.data.loading=!1,console.error(b)}})}}},$e=()=>{const{t:e}=k(),t=Xe();return c.jsx(r.SchemaComponent,{schema:t,components:{Form:q.Form,Input:r.Input,Action:r.Action,FormItem:r.FormItem,InputNumber:r.InputNumber,Card:g.Card,Variable:r.Variable,Space:r.Space,Select:g.Select,FormLayout:q.FormLayout,Row:g.Row,Col:g.Col},scope:{t:e,useDebugAction:_e,useCancelAction:Re,useVariableOptions:K}})},Je=()=>{const{t:e}=k(),{requestActionForm:t}=O(),[s,o]=v.useState(!1),n=()=>D(null,null,function*(){yield t.submit(),o(!0)});return c.jsxs(c.Fragment,{children:[c.jsx(g.Button,{type:"primary",onClick:n,children:e("Try it out")}),c.jsx(me,{visible:s,setVisible:o,children:c.jsx($e,{})})]})},Ge=e=>{const t=x.useForm(),{actionKey:s}=e,o=v.useMemo(()=>x.createForm({}),[]),[n,a]=v.useState(null);return c.jsx(de,{value:{form:A(f({},t),{[s]:o}),actionKey:s,requestActionForm:o,responseTransformer:n,setResponseTransformer:a},children:e.children})},z=(e,t)=>{const s=v.useRef();return{type:"void","x-decorator":Ge,"x-decorator-props":{actionKey:e},"x-component":"FormCollapse.CollapsePanel","x-component-props":{header:t,key:e},properties:{form:{"x-decorator":"Form","x-decorator-props":{className:r.css`
|
|
62
62
|
.ant-formily-item-feedback-layout-loose {
|
|
63
63
|
margin-bottom: 10px;
|
|
64
64
|
}
|
|
65
|
-
`,useValues(o){return s.current=x.useForm(),r.useRequest(()=>Promise.resolve(),o)},effects:()=>{const o=a=>{const i=s.current,{actions:p}=i.values||{},{path:l,value:d}=a.getState();l.includes("add")||i.setValuesIn("actions",A(f({},p),{[e]:R.unflatten(A(f({},p==null?void 0:p[e]),{[l]:d}))}))},n=V.debounce((a,i)=>D(null,null,function*(){i.modified&&(yield o(a))}),400);x.onFieldChange("*",(a,i)=>{i.modified&&n(a,i)})}},type:"void",properties:{[x.uid()]:{type:"void",properties:{requestAction:{type:"string","x-component":Q},requestTab:{type:"void","x-decorator":"FormItem",title:`{{t("Adapt request parameters",{ ns: "${C}" })}}`,"x-component":Z,"x-decorator-props":{tooltip:`{{t("Provide request variables from TachyBase for use by third-party APIs.",{ ns: "${C}" })}}`}},responseTransformer:{type:"string","x-decorator":"FormItem",title:`{{t("Convert third-party response results to TachyBase standard",{ ns: "${C}" })}}`,"x-component":ee,"x-decorator-props":{tooltip:`{{t("The response results from third-party APIs need to be converted to the TachyBase standard to display correctly on the frontend.",{ ns: "${C}" })}}`}},debug:{type:"void","x-component":Ge}}}}}}}},Qe=e=>{const t=x.useForm(),s=r.useCompile(),{t:o}=q(),{fields:n,preview:a}=e,[i,p]=v.useState([]),[l,d]=v.useState(a),{getInterface:u}=r.useCollectionManager_deprecated(),h=T=>{const w=T.filter(I=>I.source||I.interface);return w?w.map(I=>{var M,B;const S=((M=I==null?void 0:I.uiSchema)==null?void 0:M.title)||I.name,m=(B=u(I.interface))==null?void 0:B.default.uiSchema;return{key:I.name,title:s(S),dataIndex:I.name,width:200,render:(E,H,N)=>{const z=H[I.name],bt={type:"object",properties:{[I.name]:A(f({name:`${I.name}`},m),{"x-read-pretty":!0,default:I.interface==="json"||typeof z=="object"?JSON.stringify(z):z})}};return c.jsx(r.EllipsisWithTooltip,{ellipsis:!0,children:c.jsx(x.RecursionField,{schema:bt,name:N,onlyRenderProperties:!0})})}}}):void 0};return v.useEffect(()=>{d(a)},[a,n]),v.useEffect(()=>{p([]);const T=h(n);p(T)},[t.values.fields]),c.jsx("div",{style:{marginBottom:"var(--tb-spacing)"},children:(l==null?void 0:l.length)>0&&c.jsxs(c.Fragment,{children:[c.jsxs("div",{className:"ant-formily-item-label",style:{marginTop:"var(--tb-spacing)",display:"flex",padding:"0 0 8px"},children:[c.jsx("div",{className:"ant-formily-item-label-content",children:c.jsx("span",{children:c.jsx("label",{children:o("Preview")})})}),c.jsx("span",{className:"ant-formily-item-colon",children:":"})]}),c.jsx(g.Table,{size:"middle",pagination:!1,bordered:!0,columns:i,dataSource:l,scroll:{x:1e3,y:300}},"preview")]})},x.uid())},Ze=(e,t)=>e.filter(o=>o.children.filter(a=>a.availableTypes&&a.availableTypes.includes(t)).length>0).map(o=>({label:o.label,key:o.key,children:o.children.filter(n=>n.availableTypes&&n.availableTypes.includes(t))})),oe=e=>{const t=r.useCompile(),{getInterface:s}=r.useCollectionManager_deprecated(),{t:o}=q(),n=x.useForm(),a=x.useField(),[i,p]=v.useState(a.value),l=r.useFieldInterfaceOptions().filter(b=>!["relation","systemInfo"].includes(b.key)),{modal:d}=g.App.useApp(),u=(b,I)=>{setTimeout(()=>{i.splice(I,1,b),p(i),a.value=i.concat()},300)},h=b=>{i.splice(b,1);const I=i.concat();a.value=I,p(I)},T=()=>{d.confirm({title:o("Are you sure you want to clear fields?"),onOk:()=>{n.setValuesIn("fields",[]),n.setValuesIn("preview",[])}})},w=v.useMemo(()=>[{dataIndex:"index",width:60,key:"index",render:(b,I,S)=>S+1},{title:o("Field display name"),dataIndex:"title",key:"title",width:150,render:(b,I,S)=>{const m=i[S];return c.jsx(g.Input,{defaultValue:m.uiSchema.title,onChange:V.debounce(M=>{u(A(f({},m),{uiSchema:A(f({},V.omit(m==null?void 0:m.uiSchema,"rawTitle")),{title:M.target.value})}),S)},300)})}},{title:o("Field name"),dataIndex:"name",key:"name",width:130},{title:o("Field type"),dataIndex:"type",width:140,key:"type",render:(b,I,S)=>{const m=i[S];return m!=null&&m.source||!(m!=null&&m.possibleTypes)?c.jsxs(g.Tag,{children:[" ",b]}):c.jsx(g.Select,{defaultValue:b,popupMatchSelectWidth:!1,style:{width:"100%"},options:(m==null?void 0:m.possibleTypes.map(M=>({label:M,value:M})))||[],onChange:M=>{u(A(f({},m),{type:M}),S)}})}},{title:o("Field interface"),dataIndex:"interface",key:"interface",width:150,render:(b,I,S)=>{const m=i[S],M=(m==null?void 0:m.type)&&Ze(l,m==null?void 0:m.type),B=E=>{var N;const H=s(E);u(A(f({},m),{interface:E,uiSchema:f(f({},m.uiSchema),(N=H==null?void 0:H.default)==null?void 0:N.uiSchema)}),S)};return c.jsx(g.Select,{defaultValue:b,style:{width:"100%"},popupMatchSelectWidth:!1,onChange:B,children:M==null?void 0:M.map(E=>c.jsx(g.Select.OptGroup,{label:t(E.label),children:E.children.map(({label:H,value:N,name:z})=>c.jsx(g.Select.Option,{value:z,children:t(H)},N))},E.key))})}},{title:o("Actions"),dataIndex:"actions",fixed:"right",key:"actions",align:"center",width:100,render:(b,I,S)=>c.jsxs("a",{onClick:()=>h(S),children:[" ",o("Delete")]})}],[i]);return v.useEffect(()=>{p(a.value)},[a.value]),c.jsxs(c.Fragment,{children:[i.length?c.jsx(g.Button,{style:{position:"absolute",top:"-10px",right:"0px"},onClick:T,children:o("Clear")}):null,c.jsx(g.Table,{bordered:!0,size:"middle",columns:w,dataSource:i,scroll:{y:300},pagination:!1})]})};oe.displayName="PreviewFields";function re(e,t,s={}){const o=V.cloneDeep(s),n=f({name:`t_${x.uid()}`},o);n.reverseField&&(n.reverseField.name=`f_${x.uid()}`);const a=W("list",`{{t("List",{ ns: "${C}" })}}`),i=W("get",`{{t("Get",{ ns: "${C}" })}}`),p=W("create",`{{t("Create",{ ns: "${C}" })}}`),l=W("update",`{{t("Update",{ ns: "${C}" })}}`),d=W("destroy",`{{t("Destroy",{ ns: "${C}" })}}`);return{type:"object",properties:{[x.uid()]:{type:"void","x-component":"Action.Drawer","x-component-props":{getContainer:"{{ getContainer }}"},"x-decorator":"Form","x-decorator-props":{useValues(u){return r.useRequest(()=>Promise.resolve({data:n}),u)}},title:e,properties:{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.')}}"},description:{title:'{{t("Description")}}',type:"string",name:"description","x-decorator":"FormItem","x-component":"Input"},actions:{type:"void",title:F("Request actions"),"x-decorator":"FormItem","x-component":"FormCollapse","x-component-props":{size:"small",accordion:!0,defaultActiveKey:[]},properties:{list:a,get:i,create:p,update:l,destroy:d}},fields:{type:"array",required:!0,"x-component":oe,"x-decorator":"FormItem",title:F("Fields",!0)},filterTargetKey:{title:F("Record unique key"),required:!0,type:"single",description:F("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-reactions":["{{useAsyncDataSource(loadFilterTargetKeys)}}"]},preview:{type:"void","x-visible":"{{ createOnly }}","x-component":Qe,"x-reactions":{dependencies:["fields"],fulfill:{schema:{"x-component-props":"{{$form.values}}"}}}},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{action1:{title:'{{ t("Cancel") }}',"x-component":"Action","x-component-props":{useAction:"{{ useCancelAction }}"}},action2:{title:'{{ t("Submit") }}',"x-component":"Action","x-component-props":{type:"primary",useAction:t}}}}}}}}}function se(e){return Object.keys(e).filter(n=>{const a=e[n];return a.method&&a.path}).reduce((n,a)=>A(f({},n),{[a]:e[a]}),{})}function ne(e){return["list","get"].filter(t=>!e.includes(t))}function et(){const e=x.useForm(),{refreshCM:t}=r.useCollectionManager_deprecated(),s=r.useActionContext(),{refresh:o}=r.useResourceActionContext(),n=r.useAPIClient(),{name:a}=$.useParams(),i=n.resource("dataSources.collections",a),p=x.useField(),l=r.useDataSourceManager();return q(),{run(){return D(this,null,function*(){p.data=p.data||{},p.data.loading=!0;try{yield e.submit();const u=V.cloneDeep(e.values),h=se(u==null?void 0:u.actions),T=ne(Object.keys(h)),w=V.pick(u,["fields","name","title","filterTargetKey"]),b=T[0];b?(e.query(`*.actions.${b}`).take(I=>{I.setComponentProps({style:{border:"1px solid #ff4d4f"}})}),yield e[b].submit()):(yield i.create({values:A(f({logging:!0},w),{actions:h})}),s.setVisible(!1),yield e.reset(),p.data.loading=!1,o(),yield t(),l.getDataSource(a).reload())}catch(u){console.error(u),p.data.loading=!1}})}}}const tt=e=>{const{scope:t,getContainer:s,item:o}=e,n=F("Create collection",!0),a=re(n,et);return c.jsx(r.SchemaComponent,{schema:a,components:{ArrayTable:k.ArrayTable,TemplateSummay:r.TemplateSummary,FormCollapse:k.FormCollapse,ArrayItems:k.ArrayItems,FormLayout:k.FormLayout,FormItem:r.FormItem},scope:f({createOnly:!0,record:o,showReverseFieldConfig:!0,presetFieldsDisabled:!0,getContainer:s,useCancelAction:r.useCancelAction},t)})},ot=e=>{const{t}=q(!0),{scope:s,getContainer:o,item:n}=e,[a,i]=v.useState(!1),p=()=>i(!0);return c.jsx(r.RecordProvider,{record:n,children:c.jsxs(r.ActionContextProvider,{value:{visible:a,setVisible:i},children:[c.jsx(g.Button,{type:"primary",icon:c.jsx(U.PlusOutlined,{}),onClick:p,children:t("Create collection")}),c.jsx(tt,{scope:s,getContainer:o,item:n})]})})},rt=e=>{const t=r.useRecord();return c.jsx(ot,f({item:t},e))};function st(){const{run:e}=nt(),{refreshCM:t}=r.useCollectionManager_deprecated();return{run(){return D(this,null,function*(){yield e(),yield t()})}}}function nt(){const e=r.useAPIClient(),{t}=q(),s=x.useForm(),o=r.useActionContext(),{name:n}=$.useParams(),{state:a,setState:i,refresh:p}=r.useResourceActionContext();return{run(){return D(this,null,function*(){var d;if(!(a!=null&&a.selectedRowKeys)||a.selectedRowKeys.length===0)return g.message.error(t("Please select the records you want to delete"));yield e.resource("dataSources.collections",n).destroy({filterByTk:(a==null?void 0:a.selectedRowKeys)||[]}),s.reset(),(d=o==null?void 0:o.setVisible)==null||d.call(o,!1),i==null||i({selectedRowKeys:[]}),p()})}}}function at(){const{run:e}=ct(),{refreshCM:t}=r.useCollectionManager_deprecated();return{run(){return D(this,null,function*(){yield e(),yield t()})}}}function ct(){const e=r.useAPIClient(),t=r.useActionContext(),{key:s}=r.useRecord(),{name:o}=$.useParams(),{refresh:n}=r.useResourceActionContext();return{run(){return D(this,null,function*(){var i;yield e.resource("dataSources.collections",o).destroy({filterByTk:s}),(i=t==null?void 0:t.setVisible)==null||i.call(t,!1),n()})}}}const ae=e=>{const{t}=q(),{modal:s}=g.App.useApp(),b=e,{item:o,isBulk:n,children:a}=b,i=de(b,["item","isBulk","children"]),p=V.omit(i,["scope","getContainer","useAction"]),[l,d]=v.useState(!1),{run:u}=st(),{run:h}=at(),T=n?u:h,w=()=>{s.confirm({title:t("Delete collection"),content:t("Are you sure you want to delete it?"),onOk:T})};return c.jsx(r.RecordProvider,{record:o,children:c.jsx(r.ActionContextProvider,{value:{visible:l,setVisible:d},children:n?c.jsx(g.Button,{icon:c.jsx(U.DeleteOutlined,{}),onClick:w,children:a||_("Delete")}):c.jsx("a",A(f({onClick:w},p),{children:a||_("Delete")}))})})};ae.displayName="DeleteCollectionAction";const it=e=>{const t=r.useRecord();return c.jsx(ae,f({item:t},e))},pt=e=>{const t=r.useAPIClient(),s=r.useDataSourceManager(),{refreshCM:o}=r.useCollectionManager_deprecated(),{refresh:n}=r.useResourceActionContext(),a=x.useForm(),i=r.useActionContext(),{targetKey:p}=r.useResourceContext(),{name:l}=$.useParams(),{[p]:d}=r.useRecord(),u=t.resource("dataSources.collections",l);return{run(){return D(this,null,function*(){yield a.submit();const T=V.cloneDeep(a.values),w=se(T==null?void 0:T.actions),b=ne(Object.keys(w)),I=V.pick(a.values,["fields","name","title","filterTargetKey","description"]),S=b[0];if(S)a.query(`*.actions.${S}`).take(m=>{m.setComponentProps({style:{border:"1px solid #ff4d4f"}})}),yield a[S].submit();else{yield u.update({filterByTk:d,values:A(f({},I),{actions:w})}),i.setVisible(!1);const m=s.getDataSource(l);m!=null&&m.reload||m.reload.call(m),yield a.reset(),n(),yield o()}})}}},lt=e=>{const{scope:t,getContainer:s,item:o}=e,n=re('{{ t("Edit collection") }}',pt,o);return c.jsx(r.SchemaComponent,{schema:n,components:{ArrayTable:k.ArrayTable,TemplateSummay:r.TemplateSummary,FormCollapse:k.FormCollapse,ArrayItems:k.ArrayItems,FormLayout:k.FormLayout,FormItem:r.FormItem},scope:f({createOnly:!0,record:o,showReverseFieldConfig:!0,presetFieldsDisabled:!0,getContainer:s,useCancelAction:r.useCancelAction},t)})},dt=e=>{q();const{scope:t,getContainer:s,item:o}=e,[n,a]=v.useState(!1),[i,p]=v.useState(null),d=r.useAPIClient().resource("dataSources.collections",o.dataSourceKey);return c.jsx(r.RecordProvider,{record:o,children:c.jsxs(r.ActionContextProvider,{value:{visible:n,setVisible:a},children:[c.jsx("a",{onClick:()=>D(null,null,function*(){var h;const u=yield d.get({filterByTk:o.key,appends:["fields"]});p((h=u==null?void 0:u.data)==null?void 0:h.data),a(!0)}),children:_("Edit")}),c.jsx(lt,{scope:t,item:i,getContainer:s})]})})},ut=e=>{const t=r.useRecord();return c.jsx(dt,f({item:t},e))},mt={type:"object",properties:{displayName:{type:"string",title:`{{t("Data source display name",{ ns: "${C}" })}}`,required:!0,"x-decorator":"FormItem","x-component":"Input"},key:{type:"string",title:`{{t("Data source name",{ ns: "${C}" })}}`,required:!0,"x-decorator":"FormItem","x-component":"Input","x-validator":"uid","x-disabled":"{{ createOnly }}",description:`{{t('Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.',{ ns: "${C}" })}}`},options:{type:"object",properties:{baseUrl:{type:"string",title:`{{t("BaseURL",{ ns: "${C}" })}}`,required:!0,"x-decorator":"FormItem","x-component":"Input.URL","x-validator":{type:"pattern",pattern:/^(https?|ftp):\/\/((([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,})|(\d{1,3}\.){3}\d{1,3}|localhost)(:(\d{1,5}))?(\/[^\s]*)?$/,message:`{{t("Invalid URL",{ ns: "${C}" })}}`}},headers:{type:"array","x-component":"ArrayItems","x-decorator":"FormItem",title:`{{t("Headers", { ns: "${C}" })}}`,items:{type:"object",properties:{space:{type:"void","x-component":"Space","x-component-props":{style:{flexWrap:"nowrap",maxWidth:"100%",display:"flex"},className:r.css`
|
|
65
|
+
`,useValues(o){return s.current=x.useForm(),r.useRequest(()=>Promise.resolve(),o)},effects:()=>{const o=a=>{const i=s.current,{actions:p}=i.values||{},{path:l,value:d}=a.getState();l.includes("add")||i.setValuesIn("actions",A(f({},p),{[e]:q.unflatten(A(f({},p==null?void 0:p[e]),{[l]:d}))}))},n=V.debounce((a,i)=>D(null,null,function*(){i.modified&&(yield o(a))}),400);x.onFieldChange("*",(a,i)=>{i.modified&&n(a,i)})}},type:"void",properties:{[x.uid()]:{type:"void",properties:{requestAction:{type:"string","x-component":Y},requestTab:{type:"void","x-decorator":"FormItem",title:`{{t("Adapt request parameters",{ ns: "${C}" })}}`,"x-component":Q,"x-decorator-props":{tooltip:`{{t("Provide request variables from TachyBase for use by third-party APIs.",{ ns: "${C}" })}}`}},responseTransformer:{type:"string","x-decorator":"FormItem",title:`{{t("Convert third-party response results to TachyBase standard",{ ns: "${C}" })}}`,"x-component":Z,"x-decorator-props":{tooltip:`{{t("The response results from third-party APIs need to be converted to the TachyBase standard to display correctly on the frontend.",{ ns: "${C}" })}}`}},debug:{type:"void","x-component":Je}}}}}}}},Ye=e=>{const t=x.useForm(),s=r.useCompile(),{t:o}=k(),{fields:n,preview:a}=e,[i,p]=v.useState([]),[l,d]=v.useState(a),{getInterface:u}=r.useCollectionManager_deprecated(),h=T=>{const w=T.filter(I=>I.source||I.interface);return w?w.map(I=>{var M,B;const S=((M=I==null?void 0:I.uiSchema)==null?void 0:M.title)||I.name,m=(B=u(I.interface))==null?void 0:B.default.uiSchema;return{key:I.name,title:s(S),dataIndex:I.name,width:200,render:(E,H,N)=>{const U=H[I.name],ht={type:"object",properties:{[I.name]:A(f({name:`${I.name}`},m),{"x-read-pretty":!0,default:I.interface==="json"||typeof U=="object"?JSON.stringify(U):U})}};return c.jsx(r.EllipsisWithTooltip,{ellipsis:!0,children:c.jsx(x.RecursionField,{schema:ht,name:N,onlyRenderProperties:!0})})}}}):void 0};return v.useEffect(()=>{d(a)},[a,n]),v.useEffect(()=>{p([]);const T=h(n);p(T)},[t.values.fields]),c.jsx("div",{style:{marginBottom:"var(--tb-spacing)"},children:(l==null?void 0:l.length)>0&&c.jsxs(c.Fragment,{children:[c.jsxs("div",{className:"ant-formily-item-label",style:{marginTop:"var(--tb-spacing)",display:"flex",padding:"0 0 8px"},children:[c.jsx("div",{className:"ant-formily-item-label-content",children:c.jsx("span",{children:c.jsx("label",{children:o("Preview")})})}),c.jsx("span",{className:"ant-formily-item-colon",children:":"})]}),c.jsx(g.Table,{size:"middle",pagination:!1,bordered:!0,columns:i,dataSource:l,scroll:{x:1e3,y:300}},"preview")]})},x.uid())},Qe=(e,t)=>e.filter(o=>o.children.filter(a=>a.availableTypes&&a.availableTypes.includes(t)).length>0).map(o=>({label:o.label,key:o.key,children:o.children.filter(n=>n.availableTypes&&n.availableTypes.includes(t))})),te=e=>{const t=r.useCompile(),{getInterface:s}=r.useCollectionManager_deprecated(),{t:o}=k(),n=x.useForm(),a=x.useField(),[i,p]=v.useState(a.value),l=r.useFieldInterfaceOptions().filter(b=>!["relation","systemInfo"].includes(b.key)),{modal:d}=g.App.useApp(),u=(b,I)=>{setTimeout(()=>{i.splice(I,1,b),p(i),a.value=i.concat()},300)},h=b=>{i.splice(b,1);const I=i.concat();a.value=I,p(I)},T=()=>{d.confirm({title:o("Are you sure you want to clear fields?"),onOk:()=>{n.setValuesIn("fields",[]),n.setValuesIn("preview",[])}})},w=v.useMemo(()=>[{dataIndex:"index",width:60,key:"index",render:(b,I,S)=>S+1},{title:o("Field display name"),dataIndex:"title",key:"title",width:150,render:(b,I,S)=>{const m=i[S];return c.jsx(g.Input,{defaultValue:m.uiSchema.title,onChange:V.debounce(M=>{u(A(f({},m),{uiSchema:A(f({},V.omit(m==null?void 0:m.uiSchema,"rawTitle")),{title:M.target.value})}),S)},300)})}},{title:o("Field name"),dataIndex:"name",key:"name",width:130},{title:o("Field type"),dataIndex:"type",width:140,key:"type",render:(b,I,S)=>{const m=i[S];return m!=null&&m.source||!(m!=null&&m.possibleTypes)?c.jsxs(g.Tag,{children:[" ",b]}):c.jsx(g.Select,{defaultValue:b,popupMatchSelectWidth:!1,style:{width:"100%"},options:(m==null?void 0:m.possibleTypes.map(M=>({label:M,value:M})))||[],onChange:M=>{u(A(f({},m),{type:M}),S)}})}},{title:o("Field interface"),dataIndex:"interface",key:"interface",width:150,render:(b,I,S)=>{const m=i[S],M=(m==null?void 0:m.type)&&Qe(l,m==null?void 0:m.type),B=E=>{var N;const H=s(E);u(A(f({},m),{interface:E,uiSchema:f(f({},m.uiSchema),(N=H==null?void 0:H.default)==null?void 0:N.uiSchema)}),S)};return c.jsx(g.Select,{defaultValue:b,style:{width:"100%"},popupMatchSelectWidth:!1,onChange:B,children:M==null?void 0:M.map(E=>c.jsx(g.Select.OptGroup,{label:t(E.label),children:E.children.map(({label:H,value:N,name:U})=>c.jsx(g.Select.Option,{value:U,children:t(H)},N))},E.key))})}},{title:o("Actions"),dataIndex:"actions",fixed:"right",key:"actions",align:"center",width:100,render:(b,I,S)=>c.jsxs("a",{onClick:()=>h(S),children:[" ",o("Delete")]})}],[i]);return v.useEffect(()=>{p(a.value)},[a.value]),c.jsxs(c.Fragment,{children:[i.length?c.jsx(g.Button,{style:{position:"absolute",top:"-10px",right:"0px"},onClick:T,children:o("Clear")}):null,c.jsx(g.Table,{bordered:!0,size:"middle",columns:w,dataSource:i,scroll:{y:300},pagination:!1})]})};te.displayName="PreviewFields";function oe(e,t,s={}){const o=V.cloneDeep(s),n=f({name:`t_${x.uid()}`},o);n.reverseField&&(n.reverseField.name=`f_${x.uid()}`);const a=z("list",`{{t("List",{ ns: "${C}" })}}`),i=z("get",`{{t("Get",{ ns: "${C}" })}}`),p=z("create",`{{t("Create",{ ns: "${C}" })}}`),l=z("update",`{{t("Update",{ ns: "${C}" })}}`),d=z("destroy",`{{t("Destroy",{ ns: "${C}" })}}`);return{type:"object",properties:{[x.uid()]:{type:"void","x-component":"Action.Drawer","x-component-props":{getContainer:"{{ getContainer }}"},"x-decorator":"Form","x-decorator-props":{useValues(u){return r.useRequest(()=>Promise.resolve({data:n}),u)}},title:e,properties:{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.')}}"},description:{title:'{{t("Description")}}',type:"string",name:"description","x-decorator":"FormItem","x-component":"Input"},actions:{type:"void",title:F("Request actions"),"x-decorator":"FormItem","x-component":"FormCollapse","x-component-props":{size:"small",accordion:!0,defaultActiveKey:[]},properties:{list:a,get:i,create:p,update:l,destroy:d}},fields:{type:"array",required:!0,"x-component":te,"x-decorator":"FormItem",title:F("Fields",!0)},filterTargetKey:{title:F("Record unique key"),required:!0,type:"single",description:F("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-reactions":["{{useAsyncDataSource(loadFilterTargetKeys)}}"]},preview:{type:"void","x-visible":"{{ createOnly }}","x-component":Ye,"x-reactions":{dependencies:["fields"],fulfill:{schema:{"x-component-props":"{{$form.values}}"}}}},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{action1:{title:'{{ t("Cancel") }}',"x-component":"Action","x-component-props":{useAction:"{{ useCancelAction }}"}},action2:{title:'{{ t("Submit") }}',"x-component":"Action","x-component-props":{type:"primary",useAction:t}}}}}}}}}function re(e){return Object.keys(e).filter(n=>{const a=e[n];return a.method&&a.path}).reduce((n,a)=>A(f({},n),{[a]:e[a]}),{})}function se(e){return["list","get"].filter(t=>!e.includes(t))}function Ze(){const e=x.useForm(),{refreshCM:t}=r.useCollectionManager_deprecated(),s=r.useActionContext(),{refresh:o}=r.useResourceActionContext(),n=r.useAPIClient(),{name:a}=L.useParams(),i=n.resource("dataSources.collections",a),p=x.useField(),l=r.useDataSourceManager();return k(),{run(){return D(this,null,function*(){p.data=p.data||{},p.data.loading=!0;try{yield e.submit();const u=V.cloneDeep(e.values),h=re(u==null?void 0:u.actions),T=se(Object.keys(h)),w=V.pick(u,["fields","name","title","filterTargetKey"]),b=T[0];b?(e.query(`*.actions.${b}`).take(I=>{I.setComponentProps({style:{border:"1px solid #ff4d4f"}})}),yield e[b].submit()):(yield i.create({values:A(f({logging:!0},w),{actions:h})}),s.setVisible(!1),yield e.reset(),p.data.loading=!1,o(),yield t(),l.getDataSource(a).reload())}catch(u){console.error(u),p.data.loading=!1}})}}}const et=e=>{const{scope:t,getContainer:s,item:o}=e,n=F("Create collection",!0),a=oe(n,Ze);return c.jsx(r.SchemaComponent,{schema:a,components:{ArrayTable:q.ArrayTable,TemplateSummay:r.TemplateSummary,FormCollapse:q.FormCollapse,ArrayItems:q.ArrayItems,FormLayout:q.FormLayout,FormItem:r.FormItem},scope:f({createOnly:!0,record:o,showReverseFieldConfig:!0,presetFieldsDisabled:!0,getContainer:s,useCancelAction:r.useCancelAction},t)})},tt=e=>{const{t}=k(!0),{scope:s,getContainer:o,item:n}=e,[a,i]=v.useState(!1),p=()=>i(!0);return c.jsx(r.RecordProvider,{record:n,children:c.jsxs(r.ActionContextProvider,{value:{visible:a,setVisible:i},children:[c.jsx(g.Button,{type:"primary",icon:c.jsx(X.PlusOutlined,{}),onClick:p,children:t("Create collection")}),c.jsx(et,{scope:s,getContainer:o,item:n})]})})},ot=e=>{const t=r.useRecord();return c.jsx(tt,f({item:t},e))};function rt(){const{run:e}=st(),{refreshCM:t}=r.useCollectionManager_deprecated();return{run(){return D(this,null,function*(){yield e(),yield t()})}}}function st(){const e=r.useAPIClient(),{t}=k(),s=x.useForm(),o=r.useActionContext(),{name:n}=L.useParams(),{state:a,setState:i,refresh:p}=r.useResourceActionContext();return{run(){return D(this,null,function*(){var d;if(!(a!=null&&a.selectedRowKeys)||a.selectedRowKeys.length===0)return g.message.error(t("Please select the records you want to delete"));yield e.resource("dataSources.collections",n).destroy({filterByTk:(a==null?void 0:a.selectedRowKeys)||[]}),s.reset(),(d=o==null?void 0:o.setVisible)==null||d.call(o,!1),i==null||i({selectedRowKeys:[]}),p()})}}}function nt(){const{run:e}=at(),{refreshCM:t}=r.useCollectionManager_deprecated();return{run(){return D(this,null,function*(){yield e(),yield t()})}}}function at(){const e=r.useAPIClient(),t=r.useActionContext(),{key:s}=r.useRecord(),{name:o}=L.useParams(),{refresh:n}=r.useResourceActionContext();return{run(){return D(this,null,function*(){var i;yield e.resource("dataSources.collections",o).destroy({filterByTk:s}),(i=t==null?void 0:t.setVisible)==null||i.call(t,!1),n()})}}}const ne=e=>{const{t}=k(),{modal:s}=g.App.useApp(),b=e,{item:o,isBulk:n,children:a}=b,i=le(b,["item","isBulk","children"]),p=V.omit(i,["scope","getContainer","useAction"]),[l,d]=v.useState(!1),{run:u}=rt(),{run:h}=nt(),T=n?u:h,w=()=>{s.confirm({title:t("Delete collection"),content:t("Are you sure you want to delete it?"),onOk:T})};return c.jsx(r.RecordProvider,{record:o,children:c.jsx(r.ActionContextProvider,{value:{visible:l,setVisible:d},children:n?c.jsx(g.Button,{icon:c.jsx(X.DeleteOutlined,{}),onClick:w,children:a||_("Delete")}):c.jsx("a",A(f({onClick:w},p),{children:a||_("Delete")}))})})};ne.displayName="DeleteCollectionAction";const ct=e=>{const t=r.useRecord();return c.jsx(ne,f({item:t},e))},it=e=>{const t=r.useAPIClient(),s=r.useDataSourceManager(),{refreshCM:o}=r.useCollectionManager_deprecated(),{refresh:n}=r.useResourceActionContext(),a=x.useForm(),i=r.useActionContext(),{targetKey:p}=r.useResourceContext(),{name:l}=L.useParams(),{[p]:d}=r.useRecord(),u=t.resource("dataSources.collections",l);return{run(){return D(this,null,function*(){yield a.submit();const T=V.cloneDeep(a.values),w=re(T==null?void 0:T.actions),b=se(Object.keys(w)),I=V.pick(a.values,["fields","name","title","filterTargetKey","description"]),S=b[0];if(S)a.query(`*.actions.${S}`).take(m=>{m.setComponentProps({style:{border:"1px solid #ff4d4f"}})}),yield a[S].submit();else{yield u.update({filterByTk:d,values:A(f({},I),{actions:w})}),i.setVisible(!1);const m=s.getDataSource(l);m!=null&&m.reload||m.reload.call(m),yield a.reset(),n(),yield o()}})}}},pt=e=>{const{scope:t,getContainer:s,item:o}=e,n=oe('{{ t("Edit collection") }}',it,o);return c.jsx(r.SchemaComponent,{schema:n,components:{ArrayTable:q.ArrayTable,TemplateSummay:r.TemplateSummary,FormCollapse:q.FormCollapse,ArrayItems:q.ArrayItems,FormLayout:q.FormLayout,FormItem:r.FormItem},scope:f({createOnly:!0,record:o,showReverseFieldConfig:!0,presetFieldsDisabled:!0,getContainer:s,useCancelAction:r.useCancelAction},t)})},lt=e=>{k();const{scope:t,getContainer:s,item:o}=e,[n,a]=v.useState(!1),[i,p]=v.useState(null),d=r.useAPIClient().resource("dataSources.collections",o.dataSourceKey);return c.jsx(r.RecordProvider,{record:o,children:c.jsxs(r.ActionContextProvider,{value:{visible:n,setVisible:a},children:[c.jsx("a",{onClick:()=>D(null,null,function*(){var h;const u=yield d.get({filterByTk:o.key,appends:["fields"]});p((h=u==null?void 0:u.data)==null?void 0:h.data),a(!0)}),children:_("Edit")}),c.jsx(pt,{scope:t,item:i,getContainer:s})]})})},dt=e=>{const t=r.useRecord();return c.jsx(lt,f({item:t},e))},ut={type:"object",properties:{displayName:{type:"string",title:`{{t("Data source display name",{ ns: "${C}" })}}`,required:!0,"x-decorator":"FormItem","x-component":"Input"},key:{type:"string",title:`{{t("Data source name",{ ns: "${C}" })}}`,required:!0,"x-decorator":"FormItem","x-component":"Input","x-validator":"uid","x-disabled":"{{ createOnly }}",description:`{{t('Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.',{ ns: "${C}" })}}`},options:{type:"object",properties:{baseUrl:{type:"string",title:`{{t("BaseURL",{ ns: "${C}" })}}`,required:!0,"x-decorator":"FormItem","x-component":"Input.URL","x-validator":{type:"pattern",pattern:/^(https?|ftp):\/\/((([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,})|(\d{1,3}\.){3}\d{1,3}|localhost)(:(\d{1,5}))?(\/[^\s]*)?$/,message:`{{t("Invalid URL",{ ns: "${C}" })}}`}},headers:{type:"array","x-component":"ArrayItems","x-decorator":"FormItem",title:`{{t("Headers", { ns: "${C}" })}}`,items:{type:"object",properties:{space:{type:"void","x-component":"Space","x-component-props":{style:{flexWrap:"nowrap",maxWidth:"100%",display:"flex"},className:r.css`
|
|
66
66
|
& > .ant-space-item:first-child,
|
|
67
67
|
& > .ant-space-item:last-child {
|
|
68
68
|
flex-shrink: 0;
|
|
@@ -80,4 +80,4 @@
|
|
|
80
80
|
& > .ant-space-item:nth-of-type(2) {
|
|
81
81
|
flex: 1;
|
|
82
82
|
}
|
|
83
|
-
`},properties:{name:{type:"string","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:'{{t("Name")}}'}},value:{type:"string","x-decorator":"FormItem","x-component":"Input","x-component-props":{useTypedConstant:!0}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}}}},properties:{add:{type:"void",title:`{{t("Add variable", { ns: "${C}" })}}`,"x-component":"ArrayItems.Addition"}}},timeout:{type:"string",title:`{{t("Timeout",{ ns: "${C}" })}}`,"x-decorator":"FormItem","x-component":"InputNumber","x-component-props":{addonAfter:"ms",style:{minWidth:200}},default:5e3},responseType:{type:"string",title:`{{t("Response type",{ ns: "${C}" })}}`,"x-decorator":"FormItem","x-component":"Select",default:"json",enum:[{value:"json",label:`{{t("JSON",{ ns: "${C}" })}}`}]}}},enabled:{type:"string","x-content":`{{t("Enabled the data source",{ ns: "${C}" })}}`,"x-decorator":"FormItem","x-component":"Checkbox",default:!0}}},
|
|
83
|
+
`},properties:{name:{type:"string","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:'{{t("Name")}}'}},value:{type:"string","x-decorator":"FormItem","x-component":"Input","x-component-props":{useTypedConstant:!0}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}}}},properties:{add:{type:"void",title:`{{t("Add variable", { ns: "${C}" })}}`,"x-component":"ArrayItems.Addition"}}},timeout:{type:"string",title:`{{t("Timeout",{ ns: "${C}" })}}`,"x-decorator":"FormItem","x-component":"InputNumber","x-component-props":{addonAfter:"ms",style:{minWidth:200}},default:5e3},responseType:{type:"string",title:`{{t("Response type",{ ns: "${C}" })}}`,"x-decorator":"FormItem","x-component":"Select",default:"json",enum:[{value:"json",label:`{{t("JSON",{ ns: "${C}" })}}`}]}}},enabled:{type:"string","x-content":`{{t("Enabled the data source",{ ns: "${C}" })}}`,"x-decorator":"FormItem","x-component":"Checkbox",default:!0}}},mt=()=>{const{t:e}=k();return c.jsx(r.SchemaComponent,{schema:ut,components:{Space:r.Space},scope:{t:e}})};class yt extends r.Plugin{load(){return D(this,null,function*(){this.app.pm.get(P).registerType("http",{label:F("HTTP"),allowCollectionCreate:!0,allowCollectionDeletion:!0,disabledConfigureFields:!1,disableAddFields:!0,disableTestConnection:!0,DataSourceSettingsForm:mt,AddCollection:ot,EditCollection:dt,DeleteCollection:ct})})}}const xt=()=>{const{t:e}=k();return c.jsx(r.SchemaComponent,{scope:{t:e},schema:{type:"object",properties:{key:{type:"string",title:F("Data source name"),required:!0,"x-decorator":"FormItem","x-component":"Input","x-validator":"uid","x-disabled":"{{ createOnly }}",description:F("Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.")},displayName:{type:"string",title:F("Data source display name"),required:!0,"x-decorator":"FormItem","x-component":"Input"},options:{type:"object",properties:{host:{type:"string",title:F("Host"),required:!0,"x-decorator":"FormItem","x-component":"Input",default:"localhost"},port:{type:"string",title:F("Port"),required:!0,"x-decorator":"FormItem","x-component":"Input",default:3306},database:{type:"string",title:F("Database"),required:!0,"x-decorator":"FormItem","x-component":"Input"},username:{type:"string",title:F("Username"),required:!0,"x-decorator":"FormItem","x-component":"Input"},password:{type:"string",title:F("Password"),"x-decorator":"FormItem","x-component":"Password"},tablePrefix:{type:"string",title:F("Table prefix"),"x-decorator":"FormItem","x-component":"Input"}}},enabled:{type:"string","x-content":F("Enabled the data source"),"x-decorator":"FormItem","x-component":"Checkbox",default:!0}}}})},ft=()=>{const{t:e}=k();return c.jsx(r.SchemaComponent,{scope:{t:e},components:{Space:g.Space},schema:{type:"object",properties:{key:{type:"string",title:F("Data source name"),required:!0,"x-decorator":"FormItem","x-component":"Input","x-validator":"uid","x-disabled":"{{ createOnly }}",description:F("Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.")},displayName:{type:"string",title:F("Data source display name"),required:!0,"x-decorator":"FormItem","x-component":"Input"},options:{type:"object",properties:{host:{type:"string",title:F("Host"),required:!0,"x-decorator":"FormItem","x-component":"Input",default:"localhost"},port:{type:"string",title:F("Port"),required:!0,"x-decorator":"FormItem","x-component":"Input",default:5432},database:{type:"string",title:F("Database"),required:!0,"x-decorator":"FormItem","x-component":"Input"},username:{type:"string",title:F("Username"),required:!0,"x-decorator":"FormItem","x-component":"Input"},password:{type:"string",title:F("Password"),"x-decorator":"FormItem","x-component":"Password"},tablePrefix:{type:"string",title:F("Table prefix"),"x-decorator":"FormItem","x-component":"Input"},schema:{type:"string",title:F("Schema"),"x-decorator":"FormItem","x-component":"Input"}}},enabled:{type:"string","x-content":F("Enabled the data source"),"x-decorator":"FormItem","x-component":"Checkbox",default:!0}}}})};class ae extends r.Plugin{afterAdd(){return D(this,null,function*(){this.app.pm.add(yt)})}load(){return D(this,null,function*(){this.app.pm.get(P.PluginDataSourceManagerClient).registerType("postgres",{DataSourceSettingsForm:ft,label:F("PostgreSQL")}),this.app.pm.get(P.PluginDataSourceManagerClient).registerType("mysql",{DataSourceSettingsForm:xt,label:F("MySQL")})})}}y.PluginExternalDataSourceClient=ae,y.default=ae,Object.defineProperties(y,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
package/dist/externalVersion.js
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
module.exports = {
|
|
2
|
-
"@tachybase/client": "1.3.
|
|
3
|
-
"@tachybase/module-data-source": "1.3.
|
|
4
|
-
"@
|
|
2
|
+
"@tachybase/client": "1.3.23",
|
|
3
|
+
"@tachybase/module-data-source": "1.3.23",
|
|
4
|
+
"@tego/server": "1.3.43",
|
|
5
5
|
"react": "18.3.1",
|
|
6
6
|
"antd": "5.22.5",
|
|
7
7
|
"lodash": "4.17.21",
|
|
8
|
-
"@tachybase/database": "1.3.21",
|
|
9
|
-
"@tachybase/data-source": "1.3.21",
|
|
10
|
-
"@tachybase/utils": "1.3.21",
|
|
11
8
|
"axios": "1.7.7",
|
|
12
|
-
"
|
|
13
|
-
"@
|
|
14
|
-
"@tachybase/
|
|
9
|
+
"dayjs": "1.11.13",
|
|
10
|
+
"@ant-design/icons": "5.6.1",
|
|
11
|
+
"@tachybase/schema": "1.3.43",
|
|
12
|
+
"@tego/client": "1.3.43",
|
|
15
13
|
"react-router-dom": "6.28.1"
|
|
16
14
|
};
|
|
@@ -30,7 +30,7 @@ __export(plugin_exports, {
|
|
|
30
30
|
PluginHttpDatasource: () => PluginHttpDatasource
|
|
31
31
|
});
|
|
32
32
|
module.exports = __toCommonJS(plugin_exports);
|
|
33
|
-
var import_server = require("@
|
|
33
|
+
var import_server = require("@tego/server");
|
|
34
34
|
var import_lodash = __toESM(require("lodash"));
|
|
35
35
|
var import_http_collection = require("./services/http-collection");
|
|
36
36
|
var import_http_data_source = require("./services/http-data-source");
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { CollectionManager,
|
|
1
|
+
import { CollectionManager, DataSourceCollectionOptions } from '@tego/server';
|
|
2
2
|
import { HttpCollection } from './http-collection';
|
|
3
3
|
export declare class HttpCollectionManager extends CollectionManager {
|
|
4
4
|
dataSource: any;
|
|
5
5
|
constructor(options?: {
|
|
6
6
|
dataSource?: any;
|
|
7
7
|
});
|
|
8
|
-
newCollection(options:
|
|
8
|
+
newCollection(options: DataSourceCollectionOptions): HttpCollection;
|
|
9
9
|
}
|
|
@@ -20,9 +20,9 @@ __export(http_collection_manager_exports, {
|
|
|
20
20
|
HttpCollectionManager: () => HttpCollectionManager
|
|
21
21
|
});
|
|
22
22
|
module.exports = __toCommonJS(http_collection_manager_exports);
|
|
23
|
-
var
|
|
23
|
+
var import_server = require("@tego/server");
|
|
24
24
|
var import_http_collection = require("./http-collection");
|
|
25
|
-
class HttpCollectionManager extends
|
|
25
|
+
class HttpCollectionManager extends import_server.CollectionManager {
|
|
26
26
|
constructor(options = {}) {
|
|
27
27
|
super(options);
|
|
28
28
|
this.dataSource = options.dataSource;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DataSourceCollection } from '@tego/server';
|
|
2
2
|
import { HttpDataSource } from './http-data-source';
|
|
3
|
-
export declare class HttpCollection extends
|
|
3
|
+
export declare class HttpCollection extends DataSourceCollection {
|
|
4
4
|
availableActions(): string[];
|
|
5
5
|
static runAction(options: {
|
|
6
6
|
dataSource: HttpDataSource;
|
|
@@ -30,15 +30,15 @@ __export(http_collection_exports, {
|
|
|
30
30
|
HttpCollection: () => HttpCollection
|
|
31
31
|
});
|
|
32
32
|
module.exports = __toCommonJS(http_collection_exports);
|
|
33
|
-
var
|
|
34
|
-
var import_utils = require("@tachybase/utils");
|
|
33
|
+
var import_server = require("@tego/server");
|
|
35
34
|
var import_axios = __toESM(require("axios"));
|
|
35
|
+
var import_dayjs = __toESM(require("dayjs"));
|
|
36
36
|
var import_lodash = __toESM(require("lodash"));
|
|
37
37
|
var import_transform_response = require("./transform-response");
|
|
38
38
|
var import_type_interface_map = require("./type-interface-map");
|
|
39
|
-
var
|
|
39
|
+
var import_utils = require("./utils");
|
|
40
40
|
function compileTemplate(template, context) {
|
|
41
|
-
return (0,
|
|
41
|
+
return (0, import_server.parse)(template)(context);
|
|
42
42
|
}
|
|
43
43
|
function mergeRequestOptions(options) {
|
|
44
44
|
const { baseRequestConfig, actionOptions, templateContext = {}, environment } = options;
|
|
@@ -75,7 +75,7 @@ function mergeRequestOptions(options) {
|
|
|
75
75
|
rawConfig.headers["Content-Type"] = actionOptions.contentType;
|
|
76
76
|
}
|
|
77
77
|
if (actionOptions.contentType === "application/x-www-form-urlencoded") {
|
|
78
|
-
rawConfig.data = (0,
|
|
78
|
+
rawConfig.data = (0, import_utils.normalizeRequestOptionsKey)(rawConfig.data);
|
|
79
79
|
}
|
|
80
80
|
const config = compileTemplate(rawConfig, templateContext);
|
|
81
81
|
if (templateContext.values && !rawConfig.data) {
|
|
@@ -109,7 +109,7 @@ function buildTemplateContext(options) {
|
|
|
109
109
|
function rawTypeToFieldType(rawType, exampleValue) {
|
|
110
110
|
const typeInfers = {
|
|
111
111
|
string: () => {
|
|
112
|
-
if ((0,
|
|
112
|
+
if ((0, import_dayjs.default)(exampleValue).isValid()) {
|
|
113
113
|
return ["string", "date"];
|
|
114
114
|
}
|
|
115
115
|
return "string";
|
|
@@ -182,7 +182,7 @@ function guessFilterTargetKeyName(fields) {
|
|
|
182
182
|
}
|
|
183
183
|
return void 0;
|
|
184
184
|
}
|
|
185
|
-
class HttpCollection extends
|
|
185
|
+
class HttpCollection extends import_server.DataSourceCollection {
|
|
186
186
|
availableActions() {
|
|
187
187
|
const allActionOptions = this.options.actions || {};
|
|
188
188
|
const actions = ["list", "get", "create", "update", "destroy"];
|
|
@@ -191,7 +191,7 @@ class HttpCollection extends import_data_source.Collection {
|
|
|
191
191
|
// send http request to external server
|
|
192
192
|
static async runAction(options) {
|
|
193
193
|
const { dataSource, actionOptions, templateContext = {}, parseField, debugVars, runAsDebug, environment } = options;
|
|
194
|
-
(0,
|
|
194
|
+
(0, import_utils.normalizeRequestOptions)(actionOptions);
|
|
195
195
|
const dataSourceRequestConfig = dataSource.requestConfig();
|
|
196
196
|
buildTemplateContext({
|
|
197
197
|
dataSourceRequestConfig,
|
|
@@ -30,12 +30,12 @@ __export(http_data_source_exports, {
|
|
|
30
30
|
HttpDataSource: () => HttpDataSource
|
|
31
31
|
});
|
|
32
32
|
module.exports = __toCommonJS(http_data_source_exports);
|
|
33
|
-
var
|
|
33
|
+
var import_server = require("@tego/server");
|
|
34
34
|
var import_lodash = __toESM(require("lodash"));
|
|
35
35
|
var import_http_api_repository = require("./http-api-repository");
|
|
36
36
|
var import_http_collection_manager = require("./http-collection-manager");
|
|
37
37
|
var import_utils = require("./utils");
|
|
38
|
-
class HttpDataSource extends
|
|
38
|
+
class HttpDataSource extends import_server.DataSource {
|
|
39
39
|
async load(options = {}) {
|
|
40
40
|
const { localData } = options;
|
|
41
41
|
for (const collectionName of Object.keys(localData)) {
|
|
@@ -30,7 +30,7 @@ __export(transform_response_exports, {
|
|
|
30
30
|
transformResponseThroughMiddleware: () => transformResponseThroughMiddleware
|
|
31
31
|
});
|
|
32
32
|
module.exports = __toCommonJS(transform_response_exports);
|
|
33
|
-
var
|
|
33
|
+
var import_server = require("@tego/server");
|
|
34
34
|
var import_lodash = __toESM(require("lodash"));
|
|
35
35
|
const middlewares = {
|
|
36
36
|
list: [
|
|
@@ -53,7 +53,7 @@ const middlewares = {
|
|
|
53
53
|
const filter = import_lodash.default.get(options.templateContext, "request.params.filter") || {};
|
|
54
54
|
const { data } = options.transformedResponse;
|
|
55
55
|
options.transformedResponse.data = data.filter((item) => {
|
|
56
|
-
return (0,
|
|
56
|
+
return (0, import_server.filterMatch)(item, filter);
|
|
57
57
|
});
|
|
58
58
|
},
|
|
59
59
|
function handleSort(options) {
|
|
@@ -30,11 +30,11 @@ __export(database_introspector_exports, {
|
|
|
30
30
|
DatabaseIntrospector: () => DatabaseIntrospector
|
|
31
31
|
});
|
|
32
32
|
module.exports = __toCommonJS(database_introspector_exports);
|
|
33
|
-
var
|
|
34
|
-
var import_database = require("@tachybase/database");
|
|
33
|
+
var import_node_events = require("node:events");
|
|
35
34
|
var import_module_data_source = require("@tachybase/module-data-source");
|
|
35
|
+
var import_server = require("@tego/server");
|
|
36
36
|
var import_lodash = __toESM(require("lodash"));
|
|
37
|
-
class DatabaseIntrospector extends
|
|
37
|
+
class DatabaseIntrospector extends import_node_events.EventEmitter {
|
|
38
38
|
constructor(options) {
|
|
39
39
|
super();
|
|
40
40
|
this.db = options.db;
|
|
@@ -188,7 +188,7 @@ class DatabaseIntrospector extends import_events.EventEmitter {
|
|
|
188
188
|
const columnInfo = columnsInfo[columnName];
|
|
189
189
|
let fieldOptions = {
|
|
190
190
|
...this.columnAttribute(columnsInfo, columnName, indexes),
|
|
191
|
-
...
|
|
191
|
+
...import_server.ViewFieldInference.inferToFieldType({
|
|
192
192
|
dialect: this.db.options.dialect,
|
|
193
193
|
type: columnInfo.type,
|
|
194
194
|
name: columnName
|
|
@@ -20,8 +20,8 @@ __export(mysql_collection_manager_exports, {
|
|
|
20
20
|
MySQLCollectionManager: () => MySQLCollectionManager
|
|
21
21
|
});
|
|
22
22
|
module.exports = __toCommonJS(mysql_collection_manager_exports);
|
|
23
|
-
var
|
|
24
|
-
class MySQLCollectionManager extends
|
|
23
|
+
var import_server = require("@tego/server");
|
|
24
|
+
class MySQLCollectionManager extends import_server.SequelizeCollectionManager {
|
|
25
25
|
}
|
|
26
26
|
// Annotate the CommonJS export names for ESM import in node:
|
|
27
27
|
0 && (module.exports = {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DataSource } from '@
|
|
1
|
+
import { DataSource } from '@tego/server';
|
|
2
2
|
import { MySQLCollectionManager } from './mysql-collection-manager';
|
|
3
3
|
export declare class MySQLDataSource extends DataSource {
|
|
4
4
|
static testConnection(options: any): Promise<boolean>;
|
|
@@ -30,14 +30,13 @@ __export(mysql_data_source_exports, {
|
|
|
30
30
|
MySQLDataSource: () => MySQLDataSource
|
|
31
31
|
});
|
|
32
32
|
module.exports = __toCommonJS(mysql_data_source_exports);
|
|
33
|
-
var
|
|
34
|
-
var import_database = require("@tachybase/database");
|
|
33
|
+
var import_server = require("@tego/server");
|
|
35
34
|
var import_database_introspector = require("./database-introspector");
|
|
36
35
|
var import_mysql_collection_manager = require("./mysql-collection-manager");
|
|
37
36
|
var import_type_interface_map = __toESM(require("./type-interface-map"));
|
|
38
|
-
class MySQLDataSource extends
|
|
37
|
+
class MySQLDataSource extends import_server.DataSource {
|
|
39
38
|
static async testConnection(options) {
|
|
40
|
-
const database = new
|
|
39
|
+
const database = new import_server.Database({
|
|
41
40
|
dialect: "mysql",
|
|
42
41
|
...options
|
|
43
42
|
});
|
|
@@ -96,7 +95,7 @@ class MySQLDataSource extends import_data_source.DataSource {
|
|
|
96
95
|
}
|
|
97
96
|
}
|
|
98
97
|
createCollectionManager(options) {
|
|
99
|
-
const database = new
|
|
98
|
+
const database = new import_server.Database({
|
|
100
99
|
dialect: "mysql",
|
|
101
100
|
...options
|
|
102
101
|
});
|
|
@@ -30,12 +30,12 @@ __export(database_introspector_exports, {
|
|
|
30
30
|
DatabaseIntrospector: () => DatabaseIntrospector
|
|
31
31
|
});
|
|
32
32
|
module.exports = __toCommonJS(database_introspector_exports);
|
|
33
|
-
var
|
|
34
|
-
var import_database = require("@tachybase/database");
|
|
33
|
+
var import_node_events = require("node:events");
|
|
35
34
|
var import_module_data_source = require("@tachybase/module-data-source");
|
|
35
|
+
var import_server = require("@tego/server");
|
|
36
36
|
var import_lodash = __toESM(require("lodash"));
|
|
37
37
|
var import_utils = require("./utils");
|
|
38
|
-
class DatabaseIntrospector extends
|
|
38
|
+
class DatabaseIntrospector extends import_node_events.EventEmitter {
|
|
39
39
|
constructor(options) {
|
|
40
40
|
super();
|
|
41
41
|
this.db = options.db;
|
|
@@ -220,7 +220,7 @@ class DatabaseIntrospector extends import_events.EventEmitter {
|
|
|
220
220
|
const columnInfo = columnsInfo[columnName];
|
|
221
221
|
let fieldOptions = {
|
|
222
222
|
...this.columnAttribute(columnsInfo, columnName, indexes),
|
|
223
|
-
...
|
|
223
|
+
...import_server.ViewFieldInference.inferToFieldType({
|
|
224
224
|
dialect: this.db.options.dialect,
|
|
225
225
|
type: columnInfo.type,
|
|
226
226
|
name: columnName
|
|
@@ -20,8 +20,8 @@ __export(postgres_collection_manager_exports, {
|
|
|
20
20
|
PostgresCollectionManager: () => PostgresCollectionManager
|
|
21
21
|
});
|
|
22
22
|
module.exports = __toCommonJS(postgres_collection_manager_exports);
|
|
23
|
-
var
|
|
24
|
-
class PostgresCollectionManager extends
|
|
23
|
+
var import_server = require("@tego/server");
|
|
24
|
+
class PostgresCollectionManager extends import_server.SequelizeCollectionManager {
|
|
25
25
|
}
|
|
26
26
|
// Annotate the CommonJS export names for ESM import in node:
|
|
27
27
|
0 && (module.exports = {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { DataSource } from '@
|
|
2
|
-
import { type IDatabaseOptions } from '@tachybase/database';
|
|
1
|
+
import { DataSource, type IDatabaseOptions } from '@tego/server';
|
|
3
2
|
import { PostgresCollectionManager } from './postgres-collection-manager';
|
|
4
3
|
export declare class PostgresDataSource extends DataSource {
|
|
5
4
|
static testConnection(options: IDatabaseOptions): Promise<boolean>;
|
|
@@ -30,14 +30,13 @@ __export(postgres_data_source_exports, {
|
|
|
30
30
|
PostgresDataSource: () => PostgresDataSource
|
|
31
31
|
});
|
|
32
32
|
module.exports = __toCommonJS(postgres_data_source_exports);
|
|
33
|
-
var
|
|
34
|
-
var import_database = require("@tachybase/database");
|
|
33
|
+
var import_server = require("@tego/server");
|
|
35
34
|
var import_database_introspector = require("./database-introspector");
|
|
36
35
|
var import_postgres_collection_manager = require("./postgres-collection-manager");
|
|
37
36
|
var import_type_interface_map = __toESM(require("./type-interface-map"));
|
|
38
|
-
class PostgresDataSource extends
|
|
37
|
+
class PostgresDataSource extends import_server.DataSource {
|
|
39
38
|
static async testConnection(options) {
|
|
40
|
-
const database = new
|
|
39
|
+
const database = new import_server.Database({
|
|
41
40
|
dialect: "postgres",
|
|
42
41
|
...options
|
|
43
42
|
});
|
|
@@ -112,7 +111,7 @@ WHERE schema_name = $1;
|
|
|
112
111
|
}
|
|
113
112
|
}
|
|
114
113
|
createCollectionManager(options) {
|
|
115
|
-
const database = new
|
|
114
|
+
const database = new import_server.Database({
|
|
116
115
|
dialect: "postgres",
|
|
117
116
|
...options
|
|
118
117
|
});
|
package/dist/server/plugin.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import Application,
|
|
1
|
+
import { Application, Plugin, PluginOptions } from '@tego/server';
|
|
2
2
|
export declare class PluginExternalDataSourceServer extends Plugin {
|
|
3
3
|
constructor(app: Application, options?: PluginOptions);
|
|
4
4
|
afterAdd(): Promise<void>;
|
package/dist/server/plugin.js
CHANGED
|
@@ -21,7 +21,7 @@ __export(plugin_exports, {
|
|
|
21
21
|
default: () => plugin_default
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(plugin_exports);
|
|
24
|
-
var import_server = require("@
|
|
24
|
+
var import_server = require("@tego/server");
|
|
25
25
|
var import_plugin = require("./http/plugin");
|
|
26
26
|
var import_http_data_source = require("./http/services/http-data-source");
|
|
27
27
|
var import_mysql_data_source = require("./mysql/mysql-data-source");
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tachybase/plugin-data-source-common",
|
|
3
3
|
"displayName": "External DataSource Support",
|
|
4
|
-
"version": "1.3.
|
|
4
|
+
"version": "1.3.23",
|
|
5
5
|
"description": "Supports more data sources",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"Data sources"
|
|
@@ -9,30 +9,24 @@
|
|
|
9
9
|
"main": "dist/server/index.js",
|
|
10
10
|
"dependencies": {},
|
|
11
11
|
"devDependencies": {
|
|
12
|
-
"@ant-design/icons": "^5.
|
|
12
|
+
"@ant-design/icons": "^5.6.1",
|
|
13
|
+
"@tachybase/schema": "^1.3.43",
|
|
14
|
+
"@tachybase/test": "^1.3.43",
|
|
15
|
+
"@tego/client": "^1.3.43",
|
|
16
|
+
"@tego/server": "^1.3.43",
|
|
13
17
|
"@types/lodash": "^4.17.20",
|
|
14
18
|
"antd": "5.22.5",
|
|
15
19
|
"axios": "1.7.7",
|
|
16
|
-
"
|
|
17
|
-
"
|
|
20
|
+
"dayjs": "^1.11.13",
|
|
21
|
+
"lodash": "4.17.21",
|
|
22
|
+
"mysql2": "^3.14.3",
|
|
18
23
|
"pg": "^8.16.3",
|
|
19
|
-
"react-i18next": "
|
|
20
|
-
"react-router-dom": "6.28.1"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
"@tachybase/client": "1.3.21",
|
|
24
|
-
"@tachybase/components": "1.3.21",
|
|
25
|
-
"@tachybase/database": "1.3.21",
|
|
26
|
-
"@tachybase/data-source": "1.3.21",
|
|
27
|
-
"@tachybase/module-data-source": "1.3.21",
|
|
28
|
-
"@tachybase/server": "1.3.21",
|
|
29
|
-
"@tachybase/schema": "1.3.21",
|
|
30
|
-
"@tachybase/test": "1.3.21",
|
|
31
|
-
"@tachybase/utils": "1.3.21"
|
|
24
|
+
"react-i18next": "15.2.0",
|
|
25
|
+
"react-router-dom": "6.28.1",
|
|
26
|
+
"@tachybase/module-data-source": "1.3.23",
|
|
27
|
+
"@tachybase/client": "1.3.23"
|
|
32
28
|
},
|
|
33
29
|
"description.zh-CN": "支持更多的数据源",
|
|
34
30
|
"displayName.zh-CN": "外部数据源支持",
|
|
35
|
-
"scripts": {
|
|
36
|
-
"build": "tachybase-build --no-dts @tachybase/plugin-data-source-common"
|
|
37
|
-
}
|
|
31
|
+
"scripts": {}
|
|
38
32
|
}
|