@tachybase/plugin-action-custom-request 1.3.20 → 1.3.22

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.
@@ -1,2 +1,2 @@
1
- export type { IResource } from '@tachybase/sdk';
2
- export declare const useCustomRequestsResource: () => import("@tachybase/sdk").IResource;
1
+ export type { IResource } from '@tego/client';
2
+ export declare const useCustomRequestsResource: () => import("@tego/client").IResource;
@@ -1 +1 @@
1
- (function(n,i){typeof exports=="object"&&typeof module!="undefined"?i(exports,require("react/jsx-runtime"),require("@tachybase/client"),require("@tachybase/schema"),require("@tachybase/utils/client"),require("antd"),require("react-router-dom"),require("react-i18next"),require("react"),require("@tachybase/components")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","@tachybase/client","@tachybase/schema","@tachybase/utils/client","antd","react-router-dom","react-i18next","react","@tachybase/components"],i):(n=typeof globalThis!="undefined"?globalThis:n||self,i(n["@tachybase/plugin-action-custom-request"]={},n.jsxRuntime,n["@tachybase/client"],n["@tachybase/schema"],n["@tachybase/utils"],n.antd,n["react-router-dom"],n["react-i18next"],n.react,n["@tachybase/components"]))})(this,function(n,i,e,p,S,M,D,w,C,F){"use strict";var Ae=Object.defineProperty,we=Object.defineProperties;var Fe=Object.getOwnPropertyDescriptors;var B=Object.getOwnPropertySymbols;var re=Object.prototype.hasOwnProperty,ae=Object.prototype.propertyIsEnumerable;var ne=(n,i,e)=>i in n?Ae(n,i,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[i]=e,g=(n,i)=>{for(var e in i||(i={}))re.call(i,e)&&ne(n,e,i[e]);if(B)for(var e of B(i))ae.call(i,e)&&ne(n,e,i[e]);return n},A=(n,i)=>we(n,Fe(i));var ie=(n,i)=>{var e={};for(var p in n)re.call(n,p)&&i.indexOf(p)<0&&(e[p]=n[p]);if(n!=null&&B)for(var p of B(n))i.indexOf(p)<0&&ae.call(n,p)&&(e[p]=n[p]);return e};var T=(n,i,e)=>new Promise((p,S)=>{var M=C=>{try{w(e.next(C))}catch(F){S(F)}},D=C=>{try{w(e.throw(C))}catch(F){S(F)}},w=C=>C.done?p(C.value):Promise.resolve(C.value).then(M,D);w((e=e.apply(n,i)).next())});const k="customRequests:listByCurrentRole";var E=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{},L={exports:{}},ue=L.exports,_;function ce(){return _||(_=1,function(o,r){(function(u,c){c()})(ue,function(){function u(s,a){return typeof a=="undefined"?a={autoBom:!1}:typeof a!="object"&&(console.warn("Deprecated: Expected third argument to be a object"),a={autoBom:!a}),a.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(s.type)?new Blob(["\uFEFF",s],{type:s.type}):s}function c(s,a,b){var m=new XMLHttpRequest;m.open("GET",s),m.responseType="blob",m.onload=function(){h(m.response,a,b)},m.onerror=function(){console.error("could not download file")},m.send()}function l(s){var a=new XMLHttpRequest;a.open("HEAD",s,!1);try{a.send()}catch(b){}return 200<=a.status&&299>=a.status}function d(s){try{s.dispatchEvent(new MouseEvent("click"))}catch(b){var a=document.createEvent("MouseEvents");a.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),s.dispatchEvent(a)}}var f=typeof window=="object"&&window.window===window?window:typeof self=="object"&&self.self===self?self:typeof E=="object"&&E.global===E?E:void 0,x=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),h=f.saveAs||(typeof window!="object"||window!==f?function(){}:"download"in HTMLAnchorElement.prototype&&!x?function(s,a,b){var m=f.URL||f.webkitURL,v=document.createElement("a");a=a||s.name||"download",v.download=a,v.rel="noopener",typeof s=="string"?(v.href=s,v.origin===location.origin?d(v):l(v.href)?c(s,a,b):d(v,v.target="_blank")):(v.href=m.createObjectURL(s),setTimeout(function(){m.revokeObjectURL(v.href)},4e4),setTimeout(function(){d(v)},0))}:"msSaveOrOpenBlob"in navigator?function(s,a,b){if(a=a||s.name||"download",typeof s!="string")navigator.msSaveOrOpenBlob(u(s,b),a);else if(l(s))c(s,a,b);else{var m=document.createElement("a");m.href=s,m.target="_blank",setTimeout(function(){d(m)})}}:function(s,a,b,m){if(m=m||open("","_blank"),m&&(m.document.title=m.document.body.innerText="downloading..."),typeof s=="string")return c(s,a,b);var v=s.type==="application/octet-stream",O=/constructor/i.test(f.HTMLElement)||f.safari,P=/CriOS\/[\d]+/.test(navigator.userAgent);if((P||v&&O||x)&&typeof FileReader!="undefined"){var H=new FileReader;H.onloadend=function(){var R=H.result;R=P?R:R.replace(/^data:[^;]*;/,"data:attachment/file;"),m?m.location.href=R:location=R,m=null},H.readAsDataURL(s)}else{var N=f.URL||f.webkitURL,t=N.createObjectURL(s);m?m.location=t:location.href=t,m=null,setTimeout(function(){N.revokeObjectURL(t)},4e4)}});f.saveAs=h.saveAs=h,o.exports=h})}(L)),L.exports}var le=ce();const G="action-custom-request";function y(o){return`{{t('${o}', { ns: '${G}', nsMode: 'fallback' })}}`}function I(){return w.useTranslation(G,{nsMode:"fallback"})}function me(o){if(!o)return null;let r=o.match(/filename="([^"]+)"/i);return r?r[1]:(r=o.match(/filename\*=UTF-8''(.+)/i),r?decodeURIComponent(r[1]):null)}const pe=()=>{const o=e.useAPIClient(),r=D.useNavigate(),u=p.useFieldSchema(),c=e.useCompile(),l=p.useForm(),{getPrimaryKey:d}=e.useCollection_deprecated(),{resource:f,__parent:x,service:h}=e.useBlockRequestContext(),s=e.useRecord(),a=p.useFieldSchema(),b=p.useField(),{setVisible:m}=e.useActionContext(),{modal:v,message:O}=M.App.useApp(),{t:P}=I();return{onClick(){return T(this,null,function*(){var Y,Z,ee,U,te,oe;const{skipValidator:N,onSuccess:t}=(Y=u==null?void 0:u["x-action-settings"])!=null?Y:{},R=u==null?void 0:u["x-action"];N!==!0&&R==="customize:form:request"&&(yield l.submit());let Q={};R==="customize:form:request"&&(Q=l.values),(Z=b.data)!=null||(b.data={}),b.data.loading=!0;try{const V=yield o.request({url:`/customRequests:send/${a["x-uid"]}`,method:"POST",responseType:t!=null&&t.down?"blob":"json",data:{currentRecord:{id:s[d()],appends:(ee=h.params[0])==null?void 0:ee.appends,data:Q},successMessage:t.successMessage},headers:{"X-Response-Type":t!=null&&t.down?"blob":"json"}}),Te=V.headers.getContentType();let se=me(V.headers["content-disposition"]);if(t!=null&&t.down)if(Te==="application/octet-stream"){const q=t.downTitle;le.saveAs(V.data,S.parse(q)({filename:se||""}))}else O.error(P("The current return type is not a document type"));if(b.data.loading=!1,f instanceof e.TableFieldResource||(te=(U=x==null?void 0:x.service)==null?void 0:U.refresh)==null||te.call(U),(oe=h==null?void 0:h.refresh)==null||oe.call(h),R==="customize:form:request"&&(m==null||m(!1)),t!=null&&t.successMessage){let q=S.parse(t==null?void 0:t.successMessage)({res:V,filename:se});typeof q!="string"&&(q=JSON.stringify(q)),t!=null&&t.manualClose?v.success({title:c(q),onOk:()=>T(null,null,function*(){t!=null&&t.redirecting&&(t!=null&&t.redirectTo)&&(S.isURL(t.redirectTo)?window.location.href=t.redirectTo:r(t.redirectTo))})}):(O.success(c(q)),t!=null&&t.redirecting&&(t!=null&&t.redirectTo)&&(S.isURL(t.redirectTo)?window.location.href=t.redirectTo:r(t.redirectTo)))}else O.success(P("Request success"))}finally{b.data.loading=!1}})}}},K=()=>{const r=`customRequests:get/${p.useFieldSchema()["x-uid"]}`;return e.useRequest({url:r,params:{appends:["roles"]}},{manual:!0,cacheKey:r})},de=()=>{const o=e.useCollection_deprecated(),{t:r}=I(),u=e.useCollectionFilterOptions(o),c=e.useCollectionFilterOptions("users"),l=e.useCompile(),[d,f]=C.useMemo(()=>[l(u),l(c)],[u,c]),x=e.useGlobalVariable("$env");return C.useMemo(()=>{const h=[{name:"currentRecord",title:r("Current record",{ns:"core"}),children:[...d]},{name:"currentUser",title:r("Current user",{ns:"core"}),children:f},{name:"currentTime",title:r("Current time",{ns:"core"}),children:null}];return x&&h.unshift(x),h},[d,f])},j=()=>e.useAPIClient().resource("customRequests"),$={type:"object",properties:{method:{type:"string",required:!0,title:y("HTTP method"),"x-decorator-props":{tooltip:y("When the HTTP method is Post, Put or Patch, and this custom request inside the form, the request body will be automatically filled in with the form data")},"x-decorator":"FormItem","x-component":"Select","x-component-props":{showSearch:!1,allowClear:!1,className:"auto-width"},enum:[{label:"GET",value:"GET"},{label:"POST",value:"POST"},{label:"PUT",value:"PUT"},{label:"PATCH",value:"PATCH"},{label:"DELETE",value:"DELETE"}],default:"POST"},url:{type:"string",required:!0,title:y("URL"),"x-decorator":"FormItem","x-component":"Variable.RawTextArea","x-component-props":{scope:"{{useCustomRequestVariableOptions}}",autoSize:!0,fieldNames:{value:"name",label:"title"},placeholder:"https://www.tachybase.com"}},headers:{type:"array","x-component":"ArrayItems","x-decorator":"FormItem",title:y("Headers"),description:y('"Content-Type" only support "application/json", and no need to specify'),items:{type:"object",properties:{space:{type:"void","x-component":"Space",properties:{name:{type:"string","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:y("Name")}},value:{type:"string","x-decorator":"FormItem","x-component":"Variable.Input","x-component-props":{scope:"{{useCustomRequestVariableOptions}}",fieldNames:{value:"name",label:"title"},useTypedConstant:!0}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}}}},properties:{add:{type:"void",title:y("Add request header"),"x-component":"ArrayItems.Addition"}}},params:{type:"array","x-component":"ArrayItems","x-decorator":"FormItem",title:y("Parameters"),items:{type:"object",properties:{space:{type:"void","x-component":"Space",properties:{name:{type:"string","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:y("Name")}},value:{type:"string","x-decorator":"FormItem","x-component":"Variable.Input","x-component-props":{scope:"{{useCustomRequestVariableOptions}}",fieldNames:{value:"name",label:"title"},useTypedConstant:!0}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}}}},properties:{add:{type:"void",title:y("Add parameter"),"x-component":"ArrayItems.Addition"}}},data:{type:"string",title:y("Body"),"x-decorator":"FormItem","x-decorator-props":{},"x-component":"Variable.JSON","x-component-props":{scope:"{{useCustomRequestVariableOptions}}",fieldNames:{value:"name",label:"title"},changeOnSelect:!0,autoSize:{minRows:10},placeholder:y("Input request data")},description:y("Only support standard JSON data")},timeout:{type:"number",title:y("Timeout config"),"x-decorator":"FormItem","x-decorator-props":{},"x-component":"InputNumber","x-component-props":{addonAfter:y("ms"),min:1,step:1e3,defaultValue:5e3}}}},fe={type:"object",properties:{roles:{type:"array",title:y("Roles"),"x-decorator":"FormItem","x-decorator-props":{tooltip:y("If not set, all roles can see this action")},"x-component":"RemoteSelect","x-component-props":{multiple:!0,objectValue:!0,service:{resource:"roles"},manual:!1,fieldNames:{label:"title",value:"name"}}}}};function J(){var h;const{t:o}=I(),{name:r}=e.useCollection_deprecated(),u=p.useFieldSchema(),c=j(),{data:l,refresh:d}=K(),{dn:f}=e.useDesignable(),x=C.useMemo(()=>{var a;const s=g({},(a=l==null?void 0:l.data)==null?void 0:a.options);return s.data&&typeof s.data!="string"&&(s.data=JSON.stringify(s.data,null,2)),s},[(h=l==null?void 0:l.data)==null?void 0:h.options]);return i.jsx(i.Fragment,{children:i.jsx(e.SchemaSettingsActionModalItem,{title:o("Request settings"),components:{ArrayItems:F.ArrayItems},beforeOpen:()=>!l&&d(),scope:{useCustomRequestVariableOptions:de},schema:$,initialValues:x,onSubmit:s=>T(null,null,function*(){const a=ie(s,[]);yield c.updateOrCreate({values:{key:u["x-uid"],options:A(g({},a),{collectionName:r})},filterKeys:["key"]}),f.refresh(),d()})})})}function X(){var x;const{t:o}=I(),r=p.useFieldSchema(),u=j(),{message:c}=M.App.useApp(),{data:l,refresh:d}=K(),{refresh:f}=e.useRequest({url:k},{manual:!0,cacheKey:k});return i.jsx(i.Fragment,{children:i.jsx(e.SchemaSettingsActionModalItem,{title:o("Access control"),schema:fe,initialValues:{roles:(x=l==null?void 0:l.data)==null?void 0:x.roles},beforeOpen:()=>!l&&d(),onSubmit:s=>T(null,[s],function*({roles:h}){return yield u.updateOrCreate({values:{key:r["x-uid"],roles:h},filterKeys:["key"]}),d(),f(),c.success(o("Saved successfully"))})})})}const he=new e.SchemaSettings({name:"CustomRequestActionSettings",items:[A(g({},e.actionSettingsItems[0]),{children:[...e.actionSettingsItems[0].children,{name:"request settings",Component:J},{name:"accessControl",Component:X}]})]}),ye=()=>{const o=j(),r=p.useFieldSchema();return i.jsx(e.Action.Designer,{linkageAction:!0,schemaSettings:"CustomRequestActionSettings",buttonEditorProps:{isLink:r["x-action"]==="customize:table:request"},linkageRulesProps:{type:"button"},removeButtonProps:{onConfirmOk(){return o.destroy({filterByTk:r["x-uid"]})}}})},xe=o=>{var d;const u=e.useAPIClient().auth.role==="root",c=p.useFieldSchema(),{data:l}=e.useRequest({url:k},{manual:u,cacheKey:k});return!u&&!((d=l==null?void 0:l.data)!=null&&d.includes(c==null?void 0:c["x-uid"]))?null:o.children},be={"customize:table:request":e.Action.Link},z=o=>{const u=p.useFieldSchema()["x-action"],c=be[u]||e.Action;return i.jsx(c,A(g({},o),{useProps:pe}))};z.Designer=ye,z.Decorator=xe;const ve=o=>{const r=j(),u={title:'{{ t("Custom request") }}',"x-component":"CustomRequestAction","x-action":"customize:form:request","x-toolbar":"ActionSchemaToolbar","x-settings":"actionSettings:customRequest","x-decorator":"CustomRequestAction.Decorator","x-uid":p.uid(),"x-action-settings":{onSuccess:{manualClose:!1,redirecting:!1,successMessage:'{{ t("Request success") }}'}}},c=e.useSchemaInitializerItem(),{insert:l}=e.useSchemaInitializer();return i.jsx(e.SchemaInitializerItem,A(g({},c),{onClick:()=>T(null,null,function*(){var f;const d=p.merge(u||{},c.schema||{});(f=c==null?void 0:c.schemaInitialize)==null||f.call(c,d),yield r.create({values:{key:d["x-uid"]}}),l(d)})}))},Ce=o=>{const{t:r}=I(),{value:u,onChange:c}=o,l=[{value:"res.data",label:r("Response body")},{value:"filename",label:r("Download file name")}];return i.jsx(e.Variable.CodeMirror,{value:u,onChange:c,scope:l,fieldNames:{value:"value",label:"value"}})},ge=o=>({type:"object",title:o("After successful submission"),properties:{down:{title:'{{t("Is DownLoad")}}',"x-decorator":"FormItem","x-component":"Checkbox","x-component-props":{}},downTitle:{title:'{{t("Setting Down Title")}}',default:"{{ filename }}","x-decorator":"FormItem","x-component":"Input","x-component-props":{},"x-reactions":{dependencies:["down"],fulfill:{state:{visible:"{{!!$deps[0]}}"}}}},successMessage:{title:'{{t("Popup message")}}',"x-decorator":"FormItem","x-component":Ce,"x-component-props":{}},popupClose:{title:'{{t("Popup close method")}}',enum:[{label:'{{t("Automatic close")}}',value:!1},{label:'{{t("Manually close")}}',value:!0}],"x-decorator":"FormItem","x-component":"Radio.Group","x-component-props":{}},manualClose:{title:'{{t("Message clear metchod")}}',enum:[{label:'{{t("Automatic close")}}',value:!1},{label:'{{t("Manually close")}}',value:!0}],"x-decorator":"FormItem","x-component":"Radio.Group","x-component-props":{}},redirecting:{title:'{{t("Then")}}',enum:[{label:'{{t("Stay on current page")}}',value:!1},{label:'{{t("Redirect to")}}',value:!0}],"x-decorator":"FormItem","x-component":"Radio.Group","x-component-props":{},"x-reactions":{target:"redirectTo",fulfill:{state:{visible:"{{!!$self.value}}"}}}},redirectTo:{title:'{{t("Link")}}',"x-decorator":"FormItem","x-component":"Input","x-component-props":{}}}});function Re(){var x;const{dn:o}=e.useDesignable(),{t:r}=e.useTranslation(),u=p.useFieldSchema(),c=e.useActionContext(),l=e.findSchema(c.fieldSchema),d=u.parent.parent["x-component"],f=g({},ge(r));return((!l||l==="page")&&d.includes("Form")||!d.includes("Form"))&&delete f.properties.popupClose,i.jsx(e.SchemaSettingsModalItem,{title:r("After successful submission"),initialValues:(x=u==null?void 0:u["x-action-settings"])==null?void 0:x.onSuccess,schema:g({},f),onSubmit:h=>{u["x-action-settings"].onSuccess=h,o.emit("patch",{schema:{"x-uid":u["x-uid"],"x-action-settings":u["x-action-settings"]}})}})}const Se=new e.SchemaSettings({name:"actionSettings:customRequest",items:[{name:"editButton",Component:e.ButtonEditor,useComponentProps(){const{buttonEditorProps:o}=e.useSchemaToolbar();return g({isLink:!0},o)}},{name:"linkageRules",Component:e.SchemaSettingsLinkageRules,useComponentProps(){const{name:o}=e.useCollection(),{linkageRulesProps:r}=e.useSchemaToolbar();return A(g({},r),{collectionName:o,type:"button"})}},{name:"secondConFirm",Component:e.SecondConFirm},{name:"afterSuccessfulSubmission",Component:Re},{name:"request settings",Component:J},{name:"accessControl",Component:X},{name:"delete",sort:100,Component:e.RemoveButton,useComponentProps(){const{removeButtonProps:o}=e.useSchemaToolbar();return o}}]}),qe=o=>i.jsx(e.SchemaComponentOptions,{scope:{CustomRequestConfigurationFieldsSchema:$},components:{CustomRequestAction:z,CustomRequestInitializer:ve},children:o.children});class W extends e.Plugin{load(){return T(this,null,function*(){this.app.use(qe),this.app.schemaSettingsManager.add(Se),this.app.schemaSettingsManager.add(he)})}}n.CustomRequestPlugin=W,n.default=W,Object.defineProperties(n,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
1
+ (function(n,i){typeof exports=="object"&&typeof module!="undefined"?i(exports,require("react/jsx-runtime"),require("@tachybase/client"),require("@tachybase/schema"),require("@tego/client"),require("antd"),require("react-router-dom"),require("react-i18next"),require("react")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","@tachybase/client","@tachybase/schema","@tego/client","antd","react-router-dom","react-i18next","react"],i):(n=typeof globalThis!="undefined"?globalThis:n||self,i(n["@tachybase/plugin-action-custom-request"]={},n.jsxRuntime,n["@tachybase/client"],n["@tachybase/schema"],n["@tego/client"],n.antd,n["react-router-dom"],n["react-i18next"],n.react))})(this,function(n,i,e,p,S,M,B,F,v){"use strict";var Te=Object.defineProperty,Ae=Object.defineProperties;var we=Object.getOwnPropertyDescriptors;var V=Object.getOwnPropertySymbols;var ne=Object.prototype.hasOwnProperty,re=Object.prototype.propertyIsEnumerable;var se=(n,i,e)=>i in n?Te(n,i,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[i]=e,C=(n,i)=>{for(var e in i||(i={}))ne.call(i,e)&&se(n,e,i[e]);if(V)for(var e of V(i))re.call(i,e)&&se(n,e,i[e]);return n},w=(n,i)=>Ae(n,we(i));var ae=(n,i)=>{var e={};for(var p in n)ne.call(n,p)&&i.indexOf(p)<0&&(e[p]=n[p]);if(n!=null&&V)for(var p of V(n))i.indexOf(p)<0&&re.call(n,p)&&(e[p]=n[p]);return e};var A=(n,i,e)=>new Promise((p,S)=>{var M=v=>{try{F(e.next(v))}catch(q){S(q)}},B=v=>{try{F(e.throw(v))}catch(q){S(q)}},F=v=>v.done?p(v.value):Promise.resolve(v.value).then(M,B);F((e=e.apply(n,i)).next())});const q="customRequests:listByCurrentRole";var k=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{},E={exports:{}},ie=E.exports,H;function ue(){return H||(H=1,function(o,r){(function(u,c){c()})(ie,function(){function u(s,a){return typeof a=="undefined"?a={autoBom:!1}:typeof a!="object"&&(console.warn("Deprecated: Expected third argument to be a object"),a={autoBom:!a}),a.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(s.type)?new Blob(["\uFEFF",s],{type:s.type}):s}function c(s,a,g){var m=new XMLHttpRequest;m.open("GET",s),m.responseType="blob",m.onload=function(){h(m.response,a,g)},m.onerror=function(){console.error("could not download file")},m.send()}function l(s){var a=new XMLHttpRequest;a.open("HEAD",s,!1);try{a.send()}catch(g){}return 200<=a.status&&299>=a.status}function d(s){try{s.dispatchEvent(new MouseEvent("click"))}catch(g){var a=document.createEvent("MouseEvents");a.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),s.dispatchEvent(a)}}var f=typeof window=="object"&&window.window===window?window:typeof self=="object"&&self.self===self?self:typeof k=="object"&&k.global===k?k:void 0,y=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),h=f.saveAs||(typeof window!="object"||window!==f?function(){}:"download"in HTMLAnchorElement.prototype&&!y?function(s,a,g){var m=f.URL||f.webkitURL,b=document.createElement("a");a=a||s.name||"download",b.download=a,b.rel="noopener",typeof s=="string"?(b.href=s,b.origin===location.origin?d(b):l(b.href)?c(s,a,g):d(b,b.target="_blank")):(b.href=m.createObjectURL(s),setTimeout(function(){m.revokeObjectURL(b.href)},4e4),setTimeout(function(){d(b)},0))}:"msSaveOrOpenBlob"in navigator?function(s,a,g){if(a=a||s.name||"download",typeof s!="string")navigator.msSaveOrOpenBlob(u(s,g),a);else if(l(s))c(s,a,g);else{var m=document.createElement("a");m.href=s,m.target="_blank",setTimeout(function(){d(m)})}}:function(s,a,g,m){if(m=m||open("","_blank"),m&&(m.document.title=m.document.body.innerText="downloading..."),typeof s=="string")return c(s,a,g);var b=s.type==="application/octet-stream",O=/constructor/i.test(f.HTMLElement)||f.safari,P=/CriOS\/[\d]+/.test(navigator.userAgent);if((P||b&&O||y)&&typeof FileReader!="undefined"){var z=new FileReader;z.onloadend=function(){var R=z.result;R=P?R:R.replace(/^data:[^;]*;/,"data:attachment/file;"),m?m.location.href=R:location=R,m=null},z.readAsDataURL(s)}else{var j=f.URL||f.webkitURL,t=j.createObjectURL(s);m?m.location=t:location.href=t,m=null,setTimeout(function(){j.revokeObjectURL(t)},4e4)}});f.saveAs=h.saveAs=h,o.exports=h})}(E)),E.exports}var ce=ue();const _="action-custom-request";function x(o){return`{{t('${o}', { ns: '${_}', nsMode: 'fallback' })}}`}function I(){return F.useTranslation(_,{nsMode:"fallback"})}function le(o){if(!o)return null;let r=o.match(/filename="([^"]+)"/i);return r?r[1]:(r=o.match(/filename\*=UTF-8''(.+)/i),r?decodeURIComponent(r[1]):null)}const me=()=>{const o=e.useAPIClient(),r=B.useNavigate(),u=p.useFieldSchema(),c=e.useCompile(),l=p.useForm(),{getPrimaryKey:d}=e.useCollection_deprecated(),{resource:f,__parent:y,service:h}=e.useBlockRequestContext(),s=e.useRecord(),a=p.useFieldSchema(),g=p.useField(),{setVisible:m}=e.useActionContext(),{modal:b,message:O}=M.App.useApp(),{t:P}=I();return{onClick(){return A(this,null,function*(){var Q,Y,Z,N,ee,te;const{skipValidator:j,onSuccess:t}=(Q=u==null?void 0:u["x-action-settings"])!=null?Q:{},R=u==null?void 0:u["x-action"];j!==!0&&R==="customize:form:request"&&(yield l.submit());let W={};R==="customize:form:request"&&(W=l.values),(Y=g.data)!=null||(g.data={}),g.data.loading=!0;try{const U=yield o.request({url:`/customRequests:send/${a["x-uid"]}`,method:"POST",responseType:t!=null&&t.down?"blob":"json",data:{currentRecord:{id:s[d()],appends:(Z=h.params[0])==null?void 0:Z.appends,data:W},successMessage:t.successMessage},headers:{"X-Response-Type":t!=null&&t.down?"blob":"json"}}),qe=U.headers.getContentType();let oe=le(U.headers["content-disposition"]);if(t!=null&&t.down)if(qe==="application/octet-stream"){const T=t.downTitle;ce.saveAs(U.data,S.parse(T)({filename:oe||""}))}else O.error(P("The current return type is not a document type"));if(g.data.loading=!1,f instanceof e.TableFieldResource||(ee=(N=y==null?void 0:y.service)==null?void 0:N.refresh)==null||ee.call(N),(te=h==null?void 0:h.refresh)==null||te.call(h),R==="customize:form:request"&&(m==null||m(!1)),t!=null&&t.successMessage){let T=S.parse(t==null?void 0:t.successMessage)({res:U,filename:oe});typeof T!="string"&&(T=JSON.stringify(T)),t!=null&&t.manualClose?b.success({title:c(T),onOk:()=>A(null,null,function*(){t!=null&&t.redirecting&&(t!=null&&t.redirectTo)&&(S.isURL(t.redirectTo)?window.location.href=t.redirectTo:r(t.redirectTo))})}):(O.success(c(T)),t!=null&&t.redirecting&&(t!=null&&t.redirectTo)&&(S.isURL(t.redirectTo)?window.location.href=t.redirectTo:r(t.redirectTo)))}else O.success(P("Request success"))}finally{g.data.loading=!1}})}}},G=()=>{const r=`customRequests:get/${p.useFieldSchema()["x-uid"]}`;return e.useRequest({url:r,params:{appends:["roles"]}},{manual:!0,cacheKey:r})},pe=()=>{const o=e.useCollection_deprecated(),{t:r}=I(),u=e.useCollectionFilterOptions(o),c=e.useCollectionFilterOptions("users"),l=e.useCompile(),[d,f]=v.useMemo(()=>[l(u),l(c)],[u,c]),y=e.useGlobalVariable("$env");return v.useMemo(()=>{const h=[{name:"currentRecord",title:r("Current record",{ns:"core"}),children:[...d]},{name:"currentUser",title:r("Current user",{ns:"core"}),children:f},{name:"currentTime",title:r("Current time",{ns:"core"}),children:null}];return y&&h.unshift(y),h},[d,f])},L=()=>e.useAPIClient().resource("customRequests"),K={type:"object",properties:{method:{type:"string",required:!0,title:x("HTTP method"),"x-decorator-props":{tooltip:x("When the HTTP method is Post, Put or Patch, and this custom request inside the form, the request body will be automatically filled in with the form data")},"x-decorator":"FormItem","x-component":"Select","x-component-props":{showSearch:!1,allowClear:!1,className:"auto-width"},enum:[{label:"GET",value:"GET"},{label:"POST",value:"POST"},{label:"PUT",value:"PUT"},{label:"PATCH",value:"PATCH"},{label:"DELETE",value:"DELETE"}],default:"POST"},url:{type:"string",required:!0,title:x("URL"),"x-decorator":"FormItem","x-component":"Variable.RawTextArea","x-component-props":{scope:"{{useCustomRequestVariableOptions}}",autoSize:!0,fieldNames:{value:"name",label:"title"},placeholder:"https://www.tachybase.com"}},headers:{type:"array","x-component":"ArrayItems","x-decorator":"FormItem",title:x("Headers"),description:x('"Content-Type" only support "application/json", and no need to specify'),items:{type:"object",properties:{space:{type:"void","x-component":"Space",properties:{name:{type:"string","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:x("Name")}},value:{type:"string","x-decorator":"FormItem","x-component":"Variable.Input","x-component-props":{scope:"{{useCustomRequestVariableOptions}}",fieldNames:{value:"name",label:"title"},useTypedConstant:!0}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}}}},properties:{add:{type:"void",title:x("Add request header"),"x-component":"ArrayItems.Addition"}}},params:{type:"array","x-component":"ArrayItems","x-decorator":"FormItem",title:x("Parameters"),items:{type:"object",properties:{space:{type:"void","x-component":"Space",properties:{name:{type:"string","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:x("Name")}},value:{type:"string","x-decorator":"FormItem","x-component":"Variable.Input","x-component-props":{scope:"{{useCustomRequestVariableOptions}}",fieldNames:{value:"name",label:"title"},useTypedConstant:!0}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}}}},properties:{add:{type:"void",title:x("Add parameter"),"x-component":"ArrayItems.Addition"}}},data:{type:"string",title:x("Body"),"x-decorator":"FormItem","x-decorator-props":{},"x-component":"Variable.JSON","x-component-props":{scope:"{{useCustomRequestVariableOptions}}",fieldNames:{value:"name",label:"title"},changeOnSelect:!0,autoSize:{minRows:10},placeholder:x("Input request data")},description:x("Only support standard JSON data")},timeout:{type:"number",title:x("Timeout config"),"x-decorator":"FormItem","x-decorator-props":{},"x-component":"InputNumber","x-component-props":{addonAfter:x("ms"),min:1,step:1e3,defaultValue:5e3}}}},de={type:"object",properties:{roles:{type:"array",title:x("Roles"),"x-decorator":"FormItem","x-decorator-props":{tooltip:x("If not set, all roles can see this action")},"x-component":"RemoteSelect","x-component-props":{multiple:!0,objectValue:!0,service:{resource:"roles"},manual:!1,fieldNames:{label:"title",value:"name"}}}}};function $(){var h;const{t:o}=I(),{name:r}=e.useCollection_deprecated(),u=p.useFieldSchema(),c=L(),{data:l,refresh:d}=G(),{dn:f}=e.useDesignable(),y=v.useMemo(()=>{var a;const s=C({},(a=l==null?void 0:l.data)==null?void 0:a.options);return s.data&&typeof s.data!="string"&&(s.data=JSON.stringify(s.data,null,2)),s},[(h=l==null?void 0:l.data)==null?void 0:h.options]);return i.jsx(i.Fragment,{children:i.jsx(e.SchemaSettingsActionModalItem,{title:o("Request settings"),components:{ArrayItems:S.ArrayItems},beforeOpen:()=>!l&&d(),scope:{useCustomRequestVariableOptions:pe},schema:K,initialValues:y,onSubmit:s=>A(null,null,function*(){const a=ae(s,[]);yield c.updateOrCreate({values:{key:u["x-uid"],options:w(C({},a),{collectionName:r})},filterKeys:["key"]}),f.refresh(),d()})})})}function J(){var y;const{t:o}=I(),r=p.useFieldSchema(),u=L(),{message:c}=M.App.useApp(),{data:l,refresh:d}=G(),{refresh:f}=e.useRequest({url:q},{manual:!0,cacheKey:q});return i.jsx(i.Fragment,{children:i.jsx(e.SchemaSettingsActionModalItem,{title:o("Access control"),schema:de,initialValues:{roles:(y=l==null?void 0:l.data)==null?void 0:y.roles},beforeOpen:()=>!l&&d(),onSubmit:s=>A(null,[s],function*({roles:h}){return yield u.updateOrCreate({values:{key:r["x-uid"],roles:h},filterKeys:["key"]}),d(),f(),c.success(o("Saved successfully"))})})})}const fe=new e.SchemaSettings({name:"CustomRequestActionSettings",items:[w(C({},e.actionSettingsItems[0]),{children:[...e.actionSettingsItems[0].children,{name:"request settings",Component:$},{name:"accessControl",Component:J}]})]}),he=()=>{const o=L(),r=p.useFieldSchema();return i.jsx(e.Action.Designer,{linkageAction:!0,schemaSettings:"CustomRequestActionSettings",buttonEditorProps:{isLink:r["x-action"]==="customize:table:request"},linkageRulesProps:{type:"button"},removeButtonProps:{onConfirmOk(){return o.destroy({filterByTk:r["x-uid"]})}}})},xe=o=>{var d;const u=e.useAPIClient().auth.role==="root",c=p.useFieldSchema(),{data:l}=e.useRequest({url:q},{manual:u,cacheKey:q});return!u&&!((d=l==null?void 0:l.data)!=null&&d.includes(c==null?void 0:c["x-uid"]))?null:o.children},ye={"customize:table:request":e.Action.Link},D=o=>{const u=p.useFieldSchema()["x-action"],c=ye[u]||e.Action;return i.jsx(c,w(C({},o),{useProps:me}))};D.Designer=he,D.Decorator=xe;const ge=o=>{const r=L(),u={title:'{{ t("Custom request") }}',"x-component":"CustomRequestAction","x-action":"customize:form:request","x-toolbar":"ActionSchemaToolbar","x-settings":"actionSettings:customRequest","x-decorator":"CustomRequestAction.Decorator","x-uid":p.uid(),"x-action-settings":{onSuccess:{manualClose:!1,redirecting:!1,successMessage:'{{ t("Request success") }}'}}},c=e.useSchemaInitializerItem(),{insert:l}=e.useSchemaInitializer();return i.jsx(e.SchemaInitializerItem,w(C({},c),{onClick:()=>A(null,null,function*(){var f;const d=p.merge(u||{},c.schema||{});(f=c==null?void 0:c.schemaInitialize)==null||f.call(c,d),yield r.create({values:{key:d["x-uid"]}}),l(d)})}))},be=o=>{const{t:r}=I(),{value:u,onChange:c}=o,l=[{value:"res.data",label:r("Response body")},{value:"filename",label:r("Download file name")}];return i.jsx(e.Variable.CodeMirror,{value:u,onChange:c,scope:l,fieldNames:{value:"value",label:"value"}})},ve=o=>({type:"object",title:o("After successful submission"),properties:{down:{title:'{{t("Is DownLoad")}}',"x-decorator":"FormItem","x-component":"Checkbox","x-component-props":{}},downTitle:{title:'{{t("Setting Down Title")}}',default:"{{ filename }}","x-decorator":"FormItem","x-component":"Input","x-component-props":{},"x-reactions":{dependencies:["down"],fulfill:{state:{visible:"{{!!$deps[0]}}"}}}},successMessage:{title:'{{t("Popup message")}}',"x-decorator":"FormItem","x-component":be,"x-component-props":{}},popupClose:{title:'{{t("Popup close method")}}',enum:[{label:'{{t("Automatic close")}}',value:!1},{label:'{{t("Manually close")}}',value:!0}],"x-decorator":"FormItem","x-component":"Radio.Group","x-component-props":{}},manualClose:{title:'{{t("Message clear metchod")}}',enum:[{label:'{{t("Automatic close")}}',value:!1},{label:'{{t("Manually close")}}',value:!0}],"x-decorator":"FormItem","x-component":"Radio.Group","x-component-props":{}},redirecting:{title:'{{t("Then")}}',enum:[{label:'{{t("Stay on current page")}}',value:!1},{label:'{{t("Redirect to")}}',value:!0}],"x-decorator":"FormItem","x-component":"Radio.Group","x-component-props":{},"x-reactions":{target:"redirectTo",fulfill:{state:{visible:"{{!!$self.value}}"}}}},redirectTo:{title:'{{t("Link")}}',"x-decorator":"FormItem","x-component":"Input","x-component-props":{}}}});function Ce(){var y;const{dn:o}=e.useDesignable(),{t:r}=e.useTranslation(),u=p.useFieldSchema(),c=e.useActionContext(),l=e.findSchema(c.fieldSchema),d=u.parent.parent["x-component"],f=C({},ve(r));return((!l||l==="page")&&d.includes("Form")||!d.includes("Form"))&&delete f.properties.popupClose,i.jsx(e.SchemaSettingsModalItem,{title:r("After successful submission"),initialValues:(y=u==null?void 0:u["x-action-settings"])==null?void 0:y.onSuccess,schema:C({},f),onSubmit:h=>{u["x-action-settings"].onSuccess=h,o.emit("patch",{schema:{"x-uid":u["x-uid"],"x-action-settings":u["x-action-settings"]}})}})}const Re=new e.SchemaSettings({name:"actionSettings:customRequest",items:[{name:"editButton",Component:e.ButtonEditor,useComponentProps(){const{buttonEditorProps:o}=e.useSchemaToolbar();return C({isLink:!0},o)}},{name:"linkageRules",Component:e.SchemaSettingsLinkageRules,useComponentProps(){const{name:o}=e.useCollection(),{linkageRulesProps:r}=e.useSchemaToolbar();return w(C({},r),{collectionName:o,type:"button"})}},{name:"secondConFirm",Component:e.SecondConFirm},{name:"afterSuccessfulSubmission",Component:Ce},{name:"request settings",Component:$},{name:"accessControl",Component:J},{name:"delete",sort:100,Component:e.RemoveButton,useComponentProps(){const{removeButtonProps:o}=e.useSchemaToolbar();return o}}]}),Se=o=>i.jsx(e.SchemaComponentOptions,{scope:{CustomRequestConfigurationFieldsSchema:K},components:{CustomRequestAction:D,CustomRequestInitializer:ge},children:o.children});class X extends e.Plugin{load(){return A(this,null,function*(){this.app.use(Se),this.app.schemaSettingsManager.add(Re),this.app.schemaSettingsManager.add(fe)})}}n.CustomRequestPlugin=X,n.default=X,Object.defineProperties(n,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
@@ -1,17 +1,12 @@
1
1
  module.exports = {
2
2
  "react": "18.3.1",
3
- "@tachybase/client": "1.3.20",
3
+ "@tachybase/client": "1.3.22",
4
4
  "react-i18next": "15.2.0",
5
- "@tachybase/logger": "1.3.20",
6
- "@tachybase/server": "1.3.20",
7
- "@tachybase/test": "1.3.20",
8
- "@tachybase/schema": "1.3.20",
9
- "@tachybase/components": "1.3.20",
5
+ "@tego/server": "1.3.39",
6
+ "@tachybase/test": "1.3.39",
7
+ "@tachybase/schema": "1.3.39",
8
+ "@tego/client": "1.3.39",
10
9
  "antd": "5.22.5",
11
- "@tachybase/utils": "1.3.20",
12
10
  "react-router-dom": "6.28.1",
13
- "@tachybase/actions": "1.3.20",
14
- "@tachybase/evaluators": "1.3.20",
15
- "axios": "1.7.7",
16
- "@tachybase/database": "1.3.20"
11
+ "axios": "1.7.7"
17
12
  };
@@ -1,2 +1,2 @@
1
- import { Context } from '@tachybase/actions';
1
+ import { Context } from '@tego/server';
2
2
  export declare function listByCurrentRole(ctx: Context): Promise<void>;
@@ -1,3 +1,3 @@
1
- import { Context, Next } from '@tachybase/actions';
1
+ import { Context, Next } from '@tego/server';
2
2
  import CustomRequestPlugin from '../plugin';
3
3
  export declare function send(this: CustomRequestPlugin, ctx: Context, next: Next): Promise<any>;
@@ -30,9 +30,7 @@ __export(send_exports, {
30
30
  send: () => send
31
31
  });
32
32
  module.exports = __toCommonJS(send_exports);
33
- var import_evaluators = require("@tachybase/evaluators");
34
- var import_server = require("@tachybase/server");
35
- var import_utils = require("@tachybase/utils");
33
+ var import_server = require("@tego/server");
36
34
  var import_axios = __toESM(require("axios"));
37
35
  const getHeaders = (headers) => {
38
36
  return Object.keys(headers).reduce((hds, key) => {
@@ -133,9 +131,9 @@ async function send(ctx, next) {
133
131
  $env: ctx.app.environment.getVariables()
134
132
  };
135
133
  const getParsedValue = (value) => {
136
- const template = (0, import_utils.parse)(value);
134
+ const template = (0, import_server.parse)(value);
137
135
  template.parameters.forEach(({ key }) => {
138
- (0, import_evaluators.appendArrayColumn)(variables, key);
136
+ (0, import_server.appendArrayColumn)(variables, key);
139
137
  });
140
138
  return template(variables);
141
139
  };
@@ -1,2 +1,2 @@
1
- declare const _default: import("@tachybase/database").CollectionOptions;
1
+ declare const _default: import("@tego/server").CollectionOptions;
2
2
  export default _default;
@@ -20,8 +20,8 @@ __export(customRequest_exports, {
20
20
  default: () => customRequest_default
21
21
  });
22
22
  module.exports = __toCommonJS(customRequest_exports);
23
- var import_database = require("@tachybase/database");
24
- var customRequest_default = (0, import_database.defineCollection)({
23
+ var import_server = require("@tego/server");
24
+ var customRequest_default = (0, import_server.defineCollection)({
25
25
  dumpRules: "required",
26
26
  name: "customRequests",
27
27
  fields: [
@@ -1,2 +1,2 @@
1
- declare const _default: import("@tachybase/database").CollectionOptions;
1
+ declare const _default: import("@tego/server").CollectionOptions;
2
2
  export default _default;
@@ -20,8 +20,8 @@ __export(customRequestsRoles_exports, {
20
20
  default: () => customRequestsRoles_default
21
21
  });
22
22
  module.exports = __toCommonJS(customRequestsRoles_exports);
23
- var import_database = require("@tachybase/database");
24
- var customRequestsRoles_default = (0, import_database.defineCollection)({
23
+ var import_server = require("@tego/server");
24
+ var customRequestsRoles_default = (0, import_server.defineCollection)({
25
25
  dumpRules: "required",
26
26
  name: "customRequestsRoles"
27
27
  });
@@ -1,5 +1,4 @@
1
- import { Logger } from '@tachybase/logger';
2
- import { InstallOptions, Plugin } from '@tachybase/server';
1
+ import { InstallOptions, Logger, Plugin } from '@tego/server';
3
2
  export declare class CustomRequestPlugin extends Plugin {
4
3
  logger: Logger;
5
4
  afterAdd(): void;
@@ -21,8 +21,8 @@ __export(plugin_exports, {
21
21
  default: () => plugin_default
22
22
  });
23
23
  module.exports = __toCommonJS(plugin_exports);
24
- var import_path = require("path");
25
- var import_server = require("@tachybase/server");
24
+ var import_node_path = require("node:path");
25
+ var import_server = require("@tego/server");
26
26
  var import_listByCurrentRole = require("./actions/listByCurrentRole");
27
27
  var import_send = require("./actions/send");
28
28
  class CustomRequestPlugin extends import_server.Plugin {
@@ -40,7 +40,7 @@ class CustomRequestPlugin extends import_server.Plugin {
40
40
  return logger;
41
41
  }
42
42
  async load() {
43
- await this.importCollections((0, import_path.resolve)(__dirname, "collections"));
43
+ await this.importCollections((0, import_node_path.resolve)(__dirname, "collections"));
44
44
  this.app.resource({
45
45
  name: "customRequests",
46
46
  actions: {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tachybase/plugin-action-custom-request",
3
3
  "displayName": "Action: Custom request",
4
- "version": "1.3.20",
4
+ "version": "1.3.22",
5
5
  "description": "Sending a request to any HTTP service supports sending context data to the target service.",
6
6
  "keywords": [
7
7
  "Actions"
@@ -10,29 +10,19 @@
10
10
  "main": "dist/server/index.js",
11
11
  "dependencies": {},
12
12
  "devDependencies": {
13
+ "@tachybase/schema": "^1.3.39",
14
+ "@tachybase/test": "^1.3.39",
15
+ "@tego/client": "^1.3.39",
16
+ "@tego/server": "^1.3.39",
13
17
  "antd": "5.22.5",
14
18
  "axios": "1.7.7",
15
19
  "file-saver": "^2.0.5",
16
- "lodash": "~4.17.21",
17
- "react-i18next": "^15.2.0",
20
+ "lodash": "4.17.21",
21
+ "react-i18next": "15.2.0",
18
22
  "react-router-dom": "6.28.1",
19
- "@tachybase/schema": "1.3.20",
20
- "@tachybase/components": "1.3.20"
21
- },
22
- "peerDependencies": {
23
- "@tachybase/actions": "1.3.20",
24
- "@tachybase/client": "1.3.20",
25
- "@tachybase/logger": "1.3.20",
26
- "@tachybase/database": "1.3.20",
27
- "@tachybase/evaluators": "1.3.20",
28
- "@tachybase/sdk": "1.3.20",
29
- "@tachybase/server": "1.3.20",
30
- "@tachybase/test": "1.3.20",
31
- "@tachybase/utils": "1.3.20"
23
+ "@tachybase/client": "1.3.22"
32
24
  },
33
25
  "description.zh-CN": "向任意 HTTP 服务发送请求,支持将上下文数据发送给目标服务。",
34
26
  "displayName.zh-CN": "操作:自定义请求",
35
- "scripts": {
36
- "build": "tachybase-build --no-dts @tachybase/plugin-action-custom-request"
37
- }
27
+ "scripts": {}
38
28
  }