@nocobase/plugin-workflow-manual 1.4.15 → 1.4.17
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/index.js +4 -4
- package/dist/externalVersion.js +9 -9
- package/package.json +2 -2
package/dist/client/index.js
CHANGED
|
@@ -7,16 +7,16 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
(function(C,o){typeof exports=="object"&&typeof module!="undefined"?o(exports,require("@nocobase/client"),require("@nocobase/plugin-workflow/client"),require("react/jsx-runtime"),require("@formily/antd-v5"),require("@formily/core"),require("@formily/react"),require("antd"),require("react"),require("react-i18next"),require("@nocobase/utils/client"),require("lodash"),require("@ant-design/icons"),require("dayjs")):typeof define=="function"&&define.amd?define(["exports","@nocobase/client","@nocobase/plugin-workflow/client","react/jsx-runtime","@formily/antd-v5","@formily/core","@formily/react","antd","react","react-i18next","@nocobase/utils/client","lodash","@ant-design/icons","dayjs"],o):(C=typeof globalThis!="undefined"?globalThis:C||self,o(C["@nocobase/plugin-workflow-manual"]={},C["@nocobase/client"],C["@nocobase/plugin-workflow"],C.jsxRuntime,C["@formily/antd-v5"],C["@formily/core"],C["@formily/react"],C.antd,C.react,C["react-i18next"],C["@nocobase/utils"],C.lodash,C["@ant-design/icons"],C.dayjs))})(this,function(C,o,l,s,_,E,S,b,h,j,M,K,q,me){"use strict";var po=Object.defineProperty,uo=Object.defineProperties;var mo=Object.getOwnPropertyDescriptors;var L=Object.getOwnPropertySymbols;var de=Object.prototype.hasOwnProperty,ue=Object.prototype.propertyIsEnumerable;var H=(C,o,l)=>o in C?po(C,o,{enumerable:!0,configurable:!0,writable:!0,value:l}):C[o]=l,g=(C,o)=>{for(var l in o||(o={}))de.call(o,l)&&H(C,l,o[l]);if(L)for(var l of L(o))ue.call(o,l)&&H(C,l,o[l]);return C},F=(C,o)=>uo(C,mo(o));var $=(C,o)=>{var l={};for(var s in C)de.call(C,s)&&o.indexOf(s)<0&&(l[s]=C[s]);if(C!=null&&L)for(var s of L(C))o.indexOf(s)<0&&ue.call(C,s)&&(l[s]=C[s]);return l};var P=(C,o,l)=>(H(C,typeof o!="symbol"?o+"":o,l),l);var U=(C,o,l)=>new Promise((s,_)=>{var E=h=>{try{b(l.next(h))}catch(j){_(j)}},S=h=>{try{b(l.throw(h))}catch(j){_(j)}},b=h=>h.done?s(h.value):Promise.resolve(h.value).then(E,S);b((l=l.apply(C,o)).next())});const y="workflow-manual";function B(e,n={}){const{t:r}=Y(n);return r(e)}function Y(e){return j.useTranslation(y,e)}function X(e){var z,N;const n=o.useCollectionRecordData(),r=S.useFieldSchema(),t=S.useField(),i=h.useRef(null),a=e.dataSource||o.DEFAULT_DATA_SOURCE_KEY,{token:d}=b.theme.useToken(),{getAssociationAppends:u}=o.useAssociationNames(a),{appends:p,updateAssociationValues:m}=u(),[f]=Object.keys((z=r.toJSON().properties)!=null?z:{}),c=(N=n==null?void 0:n.result)==null?void 0:N[f],x=h.useMemo(()=>E.createForm({initialValues:c}),[c]),v=h.useMemo(()=>g({appends:p},e.params),[p,e.params]),k=h.useMemo(()=>({loading:!1,data:{data:c}}),[c]),w=o.useAPIClient(),I=o.useDataSourceHeaders(a),T=w.resource(e.collection,void 0,I),A=o.useBlockRequestContext(),O=h.useMemo(()=>({params:v,form:x,field:t,service:k,updateAssociationValues:m,formBlockRef:i}),[t,x,v,k,m]);return!(n!=null&&n.status)||c?s.jsx(o.CollectionManagerProvider,{dataSource:a,children:s.jsx(o.CollectionProvider_deprecated,{collection:e.collection,children:s.jsx(o.RecordProvider,{record:c,parent:null,children:s.jsx(o.RerenderDataBlockProvider,{children:s.jsx(o.FormActiveFieldsProvider,{name:"form",children:s.jsx(o.BlockRequestContext_deprecated.Provider,{value:{block:"form",props:e,field:t,service:k,resource:T,__parent:A},children:s.jsxs(o.FormBlockContext.Provider,{value:O,children:[s.jsx(o.FormV2.Templates,{style:{marginBottom:d.margin},form:x}),s.jsx("div",{ref:i,children:e.children})]})})})})})})}):null}function fe(e){return o.createFormBlockSchema(e)}function he(r){var t=r,{schema:e}=t,n=$(t,["schema"]);const{getTemplateSchemaByMode:i}=o.useSchemaTemplateManager(),{insert:a}=o.useSchemaInitializer(),d=o.useRecordCollectionDataSourceItems("FormItem");function u(m){return U(this,arguments,function*({item:p}){var k;const f=p.template?yield i(p):null,c=fe(F(g({actionInitializers:"workflowManual:form:configureActions",actions:{resolve:{type:"void",title:`{{t("Continue the process", { ns: "${y}" })}}`,"x-decorator":"ManualActionStatusProvider","x-decorator-props":{value:l.JOB_STATUS.RESOLVED},"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ useSubmit }}"},"x-designer":"ManualActionDesigner","x-designer-props":{}}}},e),{template:f}));delete c["x-acl-action-props"],delete c["x-acl-action"];const[x]=Object.keys(c.properties),v=((k=Object.entries(c.properties[x].properties).find(([w,I])=>I["x-component"]==="ActionBar"))==null?void 0:k[0])||"actions";c.properties[x].properties[v]["x-decorator"]="ActionBarProvider",c.properties[x].properties[v]["x-component-props"].style={marginTop:"1.5em",flexWrap:"wrap"},l.traverseSchema(c,w=>{w["x-uid"]&&delete w["x-uid"]}),a(c)})}return s.jsx(o.SchemaInitializerItem,F(g({},n),{onClick:u,items:d}))}function Z(){var n,r;const e=o.useSchemaInitializerItem();return s.jsx(o.CollectionProvider_deprecated,{dataSource:(n=e.schema)==null?void 0:n.dataSource,collection:(r=e.schema)==null?void 0:r.collection,children:s.jsx(he,g({},e))})}function V(e,n,r=!1){const t=[];return e?n(e)&&(!r||!e.properties)?(t.push(e),t):(e.properties&&Object.keys(e.properties).forEach(i=>{t.push(...V(e.properties[i],n))}),t):t}function xe(){const{name:e,title:n}=o.useCollection_deprecated();return s.jsxs(o.GeneralSchemaDesigner,{title:n||e,children:[s.jsx(o.SchemaSettingsBlockTitleItem,{}),s.jsx(o.SchemaSettingsLinkageRules,{collectionName:e}),s.jsx(o.SchemaSettingsDataTemplates,{collectionName:e}),s.jsx(o.SchemaSettingsDivider,{}),s.jsx(o.SchemaSettingsRemove,{removeParentsIfNoChildren:!0,breakRemoveOn:{"x-component":"Grid"}})]})}const Ce={title:`{{t("Create record form", { ns: "${y}" })}}`,config:{useInitializer({allCollections:e}){const n=h.useMemo(()=>e.map(({key:a,displayName:d,collections:u})=>({key:a,name:a,label:d,type:"subMenu",children:u.map(p=>({name:K.camelCase(`createRecordForm-child-${p.name}`),type:"item",title:p.title||p.tableName,schema:{collection:p.name,dataSource:a,title:`{{t("Create record", { ns: "${y}" })}}`,formType:"create","x-designer":"CreateFormDesigner"},Component:Z}))})),[e]),[r,t]=h.useState([]),i=o.useMenuSearch({data:n,openKeys:r});return{name:"createRecordForm",key:"createRecordForm",type:"subMenu",title:`{{t("Create record form", { ns: "${y}" })}}`,componentProps:{onOpenChange(a){t(a)}},children:i}},initializers:{},components:{CreateFormDesigner:xe},parseFormOptions(e){const n={};return V(e,t=>t["x-decorator"]==="FormBlockProvider"&&t["x-decorator-props"].formType==="create").forEach(t=>{var u,p;const[i]=Object.keys(t.properties),a=t.properties[i],d=((u=Object.entries(a.properties).find(([m,f])=>f["x-component"]==="ActionBar"))==null?void 0:u[0])||"actions";n[i]={type:"create",title:((p=t["x-component-props"])==null?void 0:p.title)||i,actions:V(a.properties[d],m=>m["x-component"]==="Action").map(m=>{var f,c;return{status:m["x-decorator-props"].value,values:(c=(f=m["x-action-settings"])==null?void 0:f.assignedValues)==null?void 0:c.values,key:m.name}}),collection:t["x-decorator-props"].collection}}),n}},block:{scope:{},components:{}}};function W(e){var m,f,c,x;const[n,r]=h.useState((f=(m=e.collection)==null?void 0:m.fields)!=null?f:[]),t=o.useCollectionRecordData(),i=S.useField(),a=S.useFieldSchema(),[d]=Object.keys((c=a.toJSON().properties)!=null?c:{}),u=(x=t==null?void 0:t.result)==null?void 0:x[d],p=h.useMemo(()=>E.createForm({initialValues:u}),[u]);return!(t!=null&&t.status)||u?s.jsx(o.CollectionProvider_deprecated,{collection:F(g({},e.collection),{fields:n}),children:s.jsx(o.RecordProvider,{record:u,parent:null,children:s.jsx(o.FormBlockContext.Provider,{value:{form:p,field:i,setCollectionFields:r},children:e.children})})}):null}function ge(){const{insert:e}=o.useSchemaInitializer(),n=o.useSchemaInitializerItem();return s.jsx(o.SchemaInitializerItem,F(g({},n),{onClick:()=>{e({type:"void","x-decorator":"CustomFormBlockProvider","x-decorator-props":{collection:{name:M.uid(),fields:[]}},"x-component":"CardItem","x-component-props":{title:'{{t("Form")}}'},"x-designer":"SimpleDesigner","x-designer-props":{type:"customForm"},properties:{[M.uid()]:{type:"void","x-component":"FormV2","x-use-component-props":"useFormBlockProps",properties:{grid:{type:"void","x-component":"Grid","x-initializer":"workflowManual:customForm:configureFields"},actions:{type:"void","x-decorator":"ActionBarProvider","x-component":"ActionBar","x-component-props":{layout:"one-column",style:{marginTop:"1.5em",flexWrap:"wrap"}},"x-initializer":"workflowManual:form:configureActions",properties:{resolve:{type:"void",title:`{{t("Continue the process", { ns: "${y}" })}}`,"x-decorator":"ManualActionStatusProvider","x-decorator-props":{value:l.JOB_STATUS.RESOLVED},"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ useSubmit }}"},"x-designer":"ManualActionDesigner"}}}}}}})}}))}const R={basic:'{{t("Basic")}}',choices:'{{t("Choices")}}',media:'{{t("Media")}}',datetime:'{{t("Date & Time")}}',relation:'{{t("Relation")}}',advanced:'{{t("Advanced type")}}',systemInfo:'{{t("System info")}}',others:'{{t("Others")}}'};function ye(e){const n={};return Object.keys(e).forEach(r=>{const t=e[r],{group:i="others"}=t;n[i]=n[i]||{},K.set(n,[i,r],t)}),Object.keys(R).filter(r=>["basic","choices","datetime","media"].includes(r)).map(r=>({title:R[r],children:Object.keys(n[r]||{}).map(t=>{const i=n[r][t];return g({value:t,title:i.title,name:t},n[r][t])}).sort((t,i)=>t.order-i.order)}))}function be(){const{interfaces:e}=o.useCollectionManager_deprecated();return ye(e).map(r=>({name:r.title,type:"itemGroup",title:r.title,children:r.children.map(t=>({name:t.name,type:"item",title:t.title,Component:Fe,fieldInterface:t.name}))}))}const Q=h.createContext({});function Se(){const{values:e,query:n,reset:r}=S.useForm(),t=[B("Field name existed in form")],{collection:i,interfaceOptions:a,setCollectionFields:d,insert:u,setCallback:p,setInterface:m}=h.useContext(Q);return{run(){return U(this,null,function*(){var w,I,T,A;const{default:c}=a,x=M.uid();if(c.name=(w=e.name)!=null?w:x,c.uiSchema.title=(T=(I=e.uiSchema)==null?void 0:I.title)!=null?T:x,c.interface=a.name,(A=i.fields)==null?void 0:A.find(O=>O.name===c.name)){n("name").take().setFeedback({type:"error",messages:t});return}const k=M.merge(c,e);d([...i.fields,k]),u({name:c.name,type:c.uiSchema.type,"x-decorator":"FormItem","x-component":"CollectionField","x-component-props":{field:k},"x-collection-field":`${i.name}.${c.name}`,"x-toolbar":"FormItemSchemaToolbar","x-settings":"fieldSettings:FormItem"}),r(),p(null),m(null)})}}}const ve=e=>{const[n,r]=h.useState(null),[t,i]=h.useState(),a=be(),d=o.useCollection_deprecated(),{setCollectionFields:u}=h.useContext(o.FormBlockContext),p=h.useMemo(()=>E.createForm(),[]);return s.jsxs(Q.Provider,{value:{collection:d,insert:t,interfaceOptions:n,onAddField(m){const f=K.pick(m,["name","group","title","default","validateSchema"]),{properties:T}=m,A=T,{unique:c,type:x,layout:v,autoIncrement:k}=A,w=$(A,["unique","type","layout","autoIncrement"]);f.properties=w;const I=K.cloneDeep(f);delete I.properties.name["x-disabled"],r(I)},setCallback:i,setInterface:r,setCollectionFields:u},children:[s.jsx(o.SchemaInitializerItems,F(g({},e),{items:a})),s.jsx(o.ActionContextProvider,{value:{visible:!!n,setVisible(m){m||r(null)}},children:n?s.jsx(o.SchemaComponent,{schema:{type:"void",name:"drawer",title:'{{t("Configure field")}}',"x-decorator":"FormV2","x-decorator-props":{form:p},"x-component":"Action.Drawer",properties:F(g({},n.properties),{footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{type:"void",title:'{{t("Cancel")}}',"x-component":"Action","x-component-props":{useAction(){const m=S.useForm();return{run(){return U(this,null,function*(){i(null),r(null),m.reset()})}}}}},submit:{type:"void",title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",useAction:Se}}}}})},components:{ArrayTable:_.ArrayTable}}):null})]})},ee={wrap:o.gridRowColWrap,insertPosition:"beforeEnd",title:"{{t('Configure fields')}}",ItemsComponent:ve},oe=new o.CompatibleSchemaInitializer(g({name:"AddCustomFormField"},ee)),ke=new o.CompatibleSchemaInitializer(g({name:"workflowManual:customForm:configureFields"},ee),oe);function Fe(){const e=o.useSchemaInitializerItem(),{insert:n}=o.useSchemaInitializer(),{onAddField:r,setCallback:t}=h.useContext(Q),{getInterface:i}=o.useCollectionManager_deprecated(),a=i(e.fieldInterface);return s.jsx(o.SchemaInitializerItem,g({onClick:()=>{t(()=>n),r(a)}},e),e.fieldInterface)}const we={title:`{{t("Custom form", { ns: "${y}" })}}`,config:{useInitializer(){return{name:"customForm",type:"item",title:`{{t("Custom form", { ns: "${y}" })}}`,Component:ge}},initializers:{},components:{CustomFormBlockProvider:W},parseFormOptions(e){const n={};return V(e,t=>t["x-decorator"]==="CustomFormBlockProvider").forEach(t=>{var p,m;const[i]=Object.keys(t.properties),a=t.properties[i],d=V(a.properties.grid,f=>f["x-component"]==="CollectionField",!0);t["x-decorator-props"].collection.fields=d.map(f=>{var c,x;return(x=(c=f["x-component-props"])==null?void 0:c.field)!=null?x:f["x-interface-options"]});const u=((p=Object.entries(a.properties).find(([f,c])=>c["x-component"]==="ActionBar"))==null?void 0:p[0])||"actions";n[i]={type:"custom",title:((m=t["x-component-props"])==null?void 0:m.title)||i,actions:V(a.properties[u],f=>f["x-component"]==="Action").map(f=>{var c,x;return{status:f["x-decorator-props"].value,values:(x=(c=f["x-action-settings"])==null?void 0:c.assignedValues)==null?void 0:x.values,key:f.name}}),collection:t["x-decorator-props"].collection}}),n}},block:{scope:{},components:{CustomFormBlockProvider:W}}};function Ie(){const{name:e,title:n}=o.useCollection_deprecated(),r=S.useFieldSchema(),{t}=j.useTranslation(),{dn:i}=o.useDesignable();return s.jsxs(o.GeneralSchemaDesigner,{title:n||e,children:[s.jsx(o.SchemaSettingsBlockTitleItem,{}),s.jsx(o.SchemaSettingsActionModalItem,{title:t("Filter settings",{ns:y}),schema:{name:"filter",type:"object",title:'{{t("Filter")}}',"x-component":"Filter","x-use-component-props":()=>{var d;return{options:o.useCollectionFilterOptions((d=r==null?void 0:r["x-decorator-props"])==null?void 0:d.collection)}},"x-component-props":{dynamicComponent:"FilterDynamicComponent"}},initialValues:r==null?void 0:r["x-decorator-props"],onSubmit:({filter:a})=>{r["x-decorator-props"].filter=a,i.emit("patch",{schema:{"x-decorator-props":r["x-decorator-props"]}}),i.refresh()},width:"60%"}),s.jsx(o.SchemaSettingsLinkageRules,{collectionName:e}),s.jsx(o.SchemaSettingsDivider,{}),s.jsx(o.SchemaSettingsRemove,{removeParentsIfNoChildren:!0,breakRemoveOn:{"x-component":"Grid"}})]})}const Ae={title:`{{t("Update record form", { ns: "${y}" })}}`,config:{useInitializer({allCollections:e}){const n=h.useMemo(()=>e.map(({key:a,displayName:d,collections:u})=>({key:a,name:a,label:d,type:"subMenu",children:u.map(p=>({name:K.camelCase(`updateRecordForm-child-${p.name}`),type:"item",title:p.title||p.tableName,schema:{collection:p.name,dataSource:a,title:`{{t("Update record", { ns: "${y}" })}}`,formType:"update","x-designer":"UpdateFormDesigner"},Component:Z}))})),[e]),[r,t]=h.useState([]),i=o.useMenuSearch({data:n,openKeys:r});return{name:"updateRecordForm",key:"updateRecordForm",type:"subMenu",title:`{{t("Update record form", { ns: "${y}" })}}`,componentProps:{onOpenChange(a){t(a)}},children:i}},initializers:{},components:{FilterDynamicComponent:l.FilterDynamicComponent,UpdateFormDesigner:Ie},parseFormOptions(e){const n={};return V(e,t=>t["x-decorator"]==="FormBlockProvider"&&t["x-decorator-props"].formType==="update").forEach(t=>{var u,p;const[i]=Object.keys(t.properties),a=t.properties[i],d=((u=Object.entries(a.properties).find(([m,f])=>f["x-component"]==="ActionBar"))==null?void 0:u[0])||"actions";n[i]=F(g({},t["x-decorator-props"]),{type:"update",title:((p=t["x-component-props"])==null?void 0:p.title)||i,actions:V(a.properties[d],m=>m["x-component"]==="Action").map(m=>{var f,c;return{status:m["x-decorator-props"].value,values:(c=(f=m["x-action-settings"])==null?void 0:f.assignedValues)==null?void 0:c.values,key:m.name}})})}),n}},block:{scope:{},components:{}},validate({filter:e}){return!e||!M.isValidFilter(e)?"Please check one of your update record form, and add at least one filter condition in form settings.":null}},D=new M.Registry;D.register("custom",we),D.register("create",Ce),D.register("update",Ae);function Be(){const{workflow:e}=l.useFlowContext(),n=l.useTrigger();return n.useInitializers?n.useInitializers(e.config):null}const te={wrap:o.gridRowColWrap,title:'{{t("Add block")}}',items:[{type:"itemGroup",name:"dataBlocks",title:'{{t("Data blocks")}}',hideIfNoChildren:!0,useChildren(){const e=o.usePlugin(l),n=l.useNodeContext(),r=l.useAvailableUpstreams(n),t=[Be()].filter(Boolean),i=r.map(d=>{var p;const u=e.instructions.get(d.type);return(p=u==null?void 0:u.useInitializers)==null?void 0:p.call(u,d)}).filter(Boolean);return[...t,...i.length?[{name:"nodes",type:"subMenu",title:`{{t("Node result", { ns: "${y}" })}}`,children:i}]:[]].filter(Boolean)}},{type:"itemGroup",name:"form",title:'{{t("Form")}}',useChildren(){const n=o.useDataSourceManager().getAllCollections();return Array.from(D.getValues()).map(r=>{const{useInitializer:t}=r.config;return t({allCollections:n})})}},{type:"itemGroup",name:"otherBlocks",title:'{{t("Other blocks")}}',children:[{name:"markdown",title:'{{t("Markdown")}}',Component:"MarkdownBlockInitializer"}]}]},ne=new o.CompatibleSchemaInitializer(g({name:"AddBlockButton"},te)),Te=new o.CompatibleSchemaInitializer(g({name:"workflowManual:popup:configureUserInterface:addBlock"},te),ne);function Me(){var T,A,O;const e=h.useContext(o.SchemaComponentContext),{t:n}=j.useTranslation(),{t:r}=Y(),t=S.useFieldSchema(),i=l.useWorkflowVariableOptions(),[a,d]=h.useState(!1),[u,p]=h.useState((O=(A=(T=t==null?void 0:t["x-action-settings"])==null?void 0:T.assignedValues)==null?void 0:A.schema)!=null?O:{type:"void","x-component":"Grid","x-initializer":"assignFieldValuesForm:configureFields",properties:{}}),[m,f]=h.useState(null),{components:c}=o.useSchemaOptionsContext();h.useEffect(()=>{f(new S.Schema({properties:{grid:u}}))},[u]);const x=h.useMemo(()=>{var N,G;const z=(G=(N=t==null?void 0:t["x-action-settings"])==null?void 0:N.assignedValues)==null?void 0:G.values;return E.createForm({initialValues:M.lodash.cloneDeep(z),values:M.lodash.cloneDeep(z)})},[t]),v=o.useFormActiveFields(),k=n("Assign field values");function w(){d(!1)}function I(){t["x-action-settings"]||(t["x-action-settings"]={}),t["x-action-settings"].assignedValues||(t["x-action-settings"].assignedValues={}),t["x-action-settings"].assignedValues.schema=u,t["x-action-settings"].assignedValues.values=x.values,d(!1),setTimeout(()=>{var z;(z=e.refresh)==null||z.call(e)},300)}return s.jsxs(s.Fragment,{children:[s.jsx(o.SchemaSettingsItem,{title:k,onClick:()=>d(!0),children:k}),s.jsx(b.Modal,{width:"50%",title:k,open:a,onCancel:w,footer:s.jsxs(b.Space,{children:[s.jsx(b.Button,{onClick:w,children:r("Cancel")}),s.jsx(b.Button,{type:"primary",onClick:I,children:r("Submit")})]}),children:s.jsx(o.DefaultValueProvider,{isAllowToSetDefaultValue:()=>!1,children:s.jsx(o.VariableScopeProvider,{scope:i,children:s.jsx(o.FormActiveFieldsProvider,{name:"form",getActiveFieldsName:v==null?void 0:v.getActiveFieldsName,children:s.jsx(S.FormProvider,{form:x,children:s.jsxs(_.FormLayout,{layout:"vertical",children:[s.jsx(b.Alert,{message:r("Values preset in this form will override user submitted ones when continue or reject.")}),s.jsx("br",{}),a&&m&&s.jsx(o.SchemaComponentContext.Provider,{value:F(g({},e),{refresh(){p(M.lodash.get(m.toJSON(),"properties.grid"))}}),children:s.jsx(o.SchemaComponent,{schema:m,components:c})})]})})})})})})]})}function Oe(e){return s.jsxs(o.GeneralSchemaDesigner,F(g({},e),{disableInitializer:!0,children:[s.jsx(o.Action.Designer.ButtonEditor,{}),s.jsx(Me,{}),s.jsx(o.SchemaSettingsDivider,{}),s.jsx(o.SchemaSettingsRemove,{removeParentsIfNoChildren:!0,breakRemoveOn:{"x-component":"ActionBar"}})]}))}function De(){const a=o.useSchemaInitializerItem(),{action:n,actionProps:r}=a,t=$(a,["action","actionProps"]),{insert:i}=o.useSchemaInitializer();return s.jsx(o.SchemaInitializerItem,F(g({},t),{onClick:()=>{i({type:"void",title:t.title,"x-decorator":"ManualActionStatusProvider","x-decorator-props":{value:n},"x-component":"Action","x-component-props":F(g({},r),{useAction:"{{ useSubmit }}"}),"x-designer":"ManualActionDesigner","x-action-settings":{}})}}))}function re(){const e=o.useSchemaInitializerItem(),i=e,{action:n,actionProps:r}=i,t=$(i,["action","actionProps"]);return s.jsx(o.InitializerWithSwitch,F(g({},t),{item:e,schema:{type:"void",title:t.title,"x-decorator":"ManualActionStatusProvider","x-decorator-props":{value:n},"x-component":"Action","x-component-props":F(g({},r),{useAction:"{{ useSubmit }}"}),"x-designer":"ManualActionDesigner","x-action":`${n}`},type:"x-action"}))}const se={title:'{{t("Configure actions")}}',items:[{name:"jobStatusResolved",title:`{{t("Continue the process", { ns: "${y}" })}}`,Component:De,action:l.JOB_STATUS.RESOLVED,actionProps:{type:"primary"}},{name:"jobStatusRejected",title:`{{t("Terminate the process", { ns: "${y}" })}}`,Component:re,action:l.JOB_STATUS.REJECTED,actionProps:{danger:!0}},{name:"jobStatusPending",title:`{{t("Save temporarily", { ns: "${y}" })}}`,Component:re,action:l.JOB_STATUS.PENDING}]},ie=new o.CompatibleSchemaInitializer(g({name:"AddActionButton"},se)),ze=new o.CompatibleSchemaInitializer(g({name:"workflowManual:form:configureActions"},se),ie);function Ve(){return{run(){}}}function Pe({value:e,onChange:n}){const r=o.usePlugin(l),t=h.useContext(o.SchemaComponentContext),i=l.useNodeContext(),a=l.useAvailableUpstreams(i),d=S.useForm(),{workflow:u}=l.useFlowContext(),p={};a.forEach(c=>{const x=r.instructions.get(c.type);Object.assign(p,x.components)});const m=h.useMemo(()=>new S.Schema({properties:{drawer:{type:"void",title:`{{t("User interface", { ns: "${y}" })}}`,"x-decorator":"Form","x-component":"Action.Drawer","x-component-props":{className:o.css`
|
|
10
|
+
(function(C,o){typeof exports=="object"&&typeof module!="undefined"?o(exports,require("@nocobase/client"),require("@nocobase/plugin-workflow/client"),require("react/jsx-runtime"),require("@formily/antd-v5"),require("@formily/core"),require("@formily/react"),require("antd"),require("react"),require("react-i18next"),require("@nocobase/utils/client"),require("lodash"),require("@ant-design/icons"),require("dayjs")):typeof define=="function"&&define.amd?define(["exports","@nocobase/client","@nocobase/plugin-workflow/client","react/jsx-runtime","@formily/antd-v5","@formily/core","@formily/react","antd","react","react-i18next","@nocobase/utils/client","lodash","@ant-design/icons","dayjs"],o):(C=typeof globalThis!="undefined"?globalThis:C||self,o(C["@nocobase/plugin-workflow-manual"]={},C["@nocobase/client"],C["@nocobase/plugin-workflow"],C.jsxRuntime,C["@formily/antd-v5"],C["@formily/core"],C["@formily/react"],C.antd,C.react,C["react-i18next"],C["@nocobase/utils"],C.lodash,C["@ant-design/icons"],C.dayjs))})(this,function(C,o,l,s,_,E,S,b,h,j,M,K,q,me){"use strict";var po=Object.defineProperty,uo=Object.defineProperties;var mo=Object.getOwnPropertyDescriptors;var L=Object.getOwnPropertySymbols;var de=Object.prototype.hasOwnProperty,ue=Object.prototype.propertyIsEnumerable;var H=(C,o,l)=>o in C?po(C,o,{enumerable:!0,configurable:!0,writable:!0,value:l}):C[o]=l,g=(C,o)=>{for(var l in o||(o={}))de.call(o,l)&&H(C,l,o[l]);if(L)for(var l of L(o))ue.call(o,l)&&H(C,l,o[l]);return C},F=(C,o)=>uo(C,mo(o));var $=(C,o)=>{var l={};for(var s in C)de.call(C,s)&&o.indexOf(s)<0&&(l[s]=C[s]);if(C!=null&&L)for(var s of L(C))o.indexOf(s)<0&&ue.call(C,s)&&(l[s]=C[s]);return l};var P=(C,o,l)=>(H(C,typeof o!="symbol"?o+"":o,l),l);var U=(C,o,l)=>new Promise((s,_)=>{var E=h=>{try{b(l.next(h))}catch(j){_(j)}},S=h=>{try{b(l.throw(h))}catch(j){_(j)}},b=h=>h.done?s(h.value):Promise.resolve(h.value).then(E,S);b((l=l.apply(C,o)).next())});const y="workflow-manual";function B(e,n={}){const{t:r}=Y(n);return r(e)}function Y(e){return j.useTranslation(y,e)}function X(e){var D,N;const n=o.useCollectionRecordData(),r=S.useFieldSchema(),t=S.useField(),i=h.useRef(null),a=e.dataSource||o.DEFAULT_DATA_SOURCE_KEY,{token:d}=b.theme.useToken(),{getAssociationAppends:u}=o.useAssociationNames(a),{appends:p,updateAssociationValues:m}=u(),[f]=Object.keys((D=r.toJSON().properties)!=null?D:{}),c=(N=n==null?void 0:n.result)==null?void 0:N[f],x=h.useMemo(()=>E.createForm({initialValues:c}),[c]),v=h.useMemo(()=>g({appends:p},e.params),[p,e.params]),k=h.useMemo(()=>({loading:!1,data:{data:c}}),[c]),w=o.useAPIClient(),I=o.useDataSourceHeaders(a),T=w.resource(e.collection,void 0,I),A=o.useBlockRequestContext(),O=h.useMemo(()=>({params:v,form:x,field:t,service:k,updateAssociationValues:m,formBlockRef:i}),[t,x,v,k,m]);return!(n!=null&&n.status)||c?s.jsx(o.CollectionManagerProvider,{dataSource:a,children:s.jsx(o.CollectionProvider_deprecated,{collection:e.collection,children:s.jsx(o.BlockProvider,F(g({name:e.name||"form"},e),{block:"form",parentRecord:null,children:s.jsx(o.FormActiveFieldsProvider,{name:"form",children:s.jsx(o.BlockRequestContext_deprecated.Provider,{value:{block:"form",props:e,field:t,service:k,resource:T,__parent:A},children:s.jsx(o.FormBlockContext.Provider,{value:O,children:s.jsxs(o.RecordProvider,{record:c,parent:null,children:[s.jsx(o.FormV2.Templates,{style:{marginBottom:d.margin},form:x}),s.jsx("div",{ref:i,children:e.children})]})})})})}))})}):null}function fe(e){return o.createFormBlockSchema(e)}function he(r){var t=r,{schema:e}=t,n=$(t,["schema"]);const{getTemplateSchemaByMode:i}=o.useSchemaTemplateManager(),{insert:a}=o.useSchemaInitializer(),d=o.useRecordCollectionDataSourceItems("FormItem");function u(m){return U(this,arguments,function*({item:p}){var k;const f=p.template?yield i(p):null,c=fe(F(g({actionInitializers:"workflowManual:form:configureActions",actions:{resolve:{type:"void",title:`{{t("Continue the process", { ns: "${y}" })}}`,"x-decorator":"ManualActionStatusProvider","x-decorator-props":{value:l.JOB_STATUS.RESOLVED},"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ useSubmit }}"},"x-designer":"ManualActionDesigner","x-designer-props":{}}}},e),{template:f}));delete c["x-acl-action-props"],delete c["x-acl-action"];const[x]=Object.keys(c.properties),v=((k=Object.entries(c.properties[x].properties).find(([w,I])=>I["x-component"]==="ActionBar"))==null?void 0:k[0])||"actions";c.properties[x].properties[v]["x-decorator"]="ActionBarProvider",c.properties[x].properties[v]["x-component-props"].style={marginTop:"1.5em",flexWrap:"wrap"},l.traverseSchema(c,w=>{w["x-uid"]&&delete w["x-uid"]}),a(c)})}return s.jsx(o.SchemaInitializerItem,F(g({},n),{onClick:u,items:d}))}function Z(){var n,r;const e=o.useSchemaInitializerItem();return s.jsx(o.CollectionProvider_deprecated,{dataSource:(n=e.schema)==null?void 0:n.dataSource,collection:(r=e.schema)==null?void 0:r.collection,children:s.jsx(he,g({},e))})}function V(e,n,r=!1){const t=[];return e?n(e)&&(!r||!e.properties)?(t.push(e),t):(e.properties&&Object.keys(e.properties).forEach(i=>{t.push(...V(e.properties[i],n))}),t):t}function xe(){const{name:e,title:n}=o.useCollection_deprecated();return s.jsxs(o.GeneralSchemaDesigner,{title:n||e,children:[s.jsx(o.SchemaSettingsBlockTitleItem,{}),s.jsx(o.SchemaSettingsLinkageRules,{collectionName:e}),s.jsx(o.SchemaSettingsDataTemplates,{collectionName:e}),s.jsx(o.SchemaSettingsDivider,{}),s.jsx(o.SchemaSettingsRemove,{removeParentsIfNoChildren:!0,breakRemoveOn:{"x-component":"Grid"}})]})}const Ce={title:`{{t("Create record form", { ns: "${y}" })}}`,config:{useInitializer({allCollections:e}){const n=h.useMemo(()=>e.map(({key:a,displayName:d,collections:u})=>({key:a,name:a,label:d,type:"subMenu",children:u.map(p=>({name:K.camelCase(`createRecordForm-child-${p.name}`),type:"item",title:p.title||p.tableName,schema:{collection:p.name,dataSource:a,title:`{{t("Create record", { ns: "${y}" })}}`,formType:"create","x-designer":"CreateFormDesigner"},Component:Z}))})),[e]),[r,t]=h.useState([]),i=o.useMenuSearch({data:n,openKeys:r});return{name:"createRecordForm",key:"createRecordForm",type:"subMenu",title:`{{t("Create record form", { ns: "${y}" })}}`,componentProps:{onOpenChange(a){t(a)}},children:i}},initializers:{},components:{CreateFormDesigner:xe},parseFormOptions(e){const n={};return V(e,t=>t["x-decorator"]==="FormBlockProvider"&&t["x-decorator-props"].formType==="create").forEach(t=>{var u,p;const[i]=Object.keys(t.properties),a=t.properties[i],d=((u=Object.entries(a.properties).find(([m,f])=>f["x-component"]==="ActionBar"))==null?void 0:u[0])||"actions";n[i]={type:"create",title:((p=t["x-component-props"])==null?void 0:p.title)||i,actions:V(a.properties[d],m=>m["x-component"]==="Action").map(m=>{var f,c;return{status:m["x-decorator-props"].value,values:(c=(f=m["x-action-settings"])==null?void 0:f.assignedValues)==null?void 0:c.values,key:m.name}}),collection:t["x-decorator-props"].collection}}),n}},block:{scope:{},components:{}}};function W(e){var m,f,c,x;const[n,r]=h.useState((f=(m=e.collection)==null?void 0:m.fields)!=null?f:[]),t=o.useCollectionRecordData(),i=S.useField(),a=S.useFieldSchema(),[d]=Object.keys((c=a.toJSON().properties)!=null?c:{}),u=(x=t==null?void 0:t.result)==null?void 0:x[d],p=h.useMemo(()=>E.createForm({initialValues:u}),[u]);return!(t!=null&&t.status)||u?s.jsx(o.CollectionProvider_deprecated,{collection:F(g({},e.collection),{fields:n}),children:s.jsx(o.RecordProvider,{record:u,parent:null,children:s.jsx(o.FormBlockContext.Provider,{value:{form:p,field:i,setCollectionFields:r},children:e.children})})}):null}function ge(){const{insert:e}=o.useSchemaInitializer(),n=o.useSchemaInitializerItem();return s.jsx(o.SchemaInitializerItem,F(g({},n),{onClick:()=>{e({type:"void","x-decorator":"CustomFormBlockProvider","x-decorator-props":{collection:{name:M.uid(),fields:[]}},"x-component":"CardItem","x-component-props":{title:'{{t("Form")}}'},"x-designer":"SimpleDesigner","x-designer-props":{type:"customForm"},properties:{[M.uid()]:{type:"void","x-component":"FormV2","x-use-component-props":"useFormBlockProps",properties:{grid:{type:"void","x-component":"Grid","x-initializer":"workflowManual:customForm:configureFields"},actions:{type:"void","x-decorator":"ActionBarProvider","x-component":"ActionBar","x-component-props":{layout:"one-column",style:{marginTop:"1.5em",flexWrap:"wrap"}},"x-initializer":"workflowManual:form:configureActions",properties:{resolve:{type:"void",title:`{{t("Continue the process", { ns: "${y}" })}}`,"x-decorator":"ManualActionStatusProvider","x-decorator-props":{value:l.JOB_STATUS.RESOLVED},"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ useSubmit }}"},"x-designer":"ManualActionDesigner"}}}}}}})}}))}const R={basic:'{{t("Basic")}}',choices:'{{t("Choices")}}',media:'{{t("Media")}}',datetime:'{{t("Date & Time")}}',relation:'{{t("Relation")}}',advanced:'{{t("Advanced type")}}',systemInfo:'{{t("System info")}}',others:'{{t("Others")}}'};function ye(e){const n={};return Object.keys(e).forEach(r=>{const t=e[r],{group:i="others"}=t;n[i]=n[i]||{},K.set(n,[i,r],t)}),Object.keys(R).filter(r=>["basic","choices","datetime","media"].includes(r)).map(r=>({title:R[r],children:Object.keys(n[r]||{}).map(t=>{const i=n[r][t];return g({value:t,title:i.title,name:t},n[r][t])}).sort((t,i)=>t.order-i.order)}))}function be(){const{interfaces:e}=o.useCollectionManager_deprecated();return ye(e).map(r=>({name:r.title,type:"itemGroup",title:r.title,children:r.children.map(t=>({name:t.name,type:"item",title:t.title,Component:Fe,fieldInterface:t.name}))}))}const Q=h.createContext({});function Se(){const{values:e,query:n,reset:r}=S.useForm(),t=[B("Field name existed in form")],{collection:i,interfaceOptions:a,setCollectionFields:d,insert:u,setCallback:p,setInterface:m}=h.useContext(Q);return{run(){return U(this,null,function*(){var w,I,T,A;const{default:c}=a,x=M.uid();if(c.name=(w=e.name)!=null?w:x,c.uiSchema.title=(T=(I=e.uiSchema)==null?void 0:I.title)!=null?T:x,c.interface=a.name,(A=i.fields)==null?void 0:A.find(O=>O.name===c.name)){n("name").take().setFeedback({type:"error",messages:t});return}const k=M.merge(c,e);d([...i.fields,k]),u({name:c.name,type:c.uiSchema.type,"x-decorator":"FormItem","x-component":"CollectionField","x-component-props":{field:k},"x-collection-field":`${i.name}.${c.name}`,"x-toolbar":"FormItemSchemaToolbar","x-settings":"fieldSettings:FormItem"}),r(),p(null),m(null)})}}}const ve=e=>{const[n,r]=h.useState(null),[t,i]=h.useState(),a=be(),d=o.useCollection_deprecated(),{setCollectionFields:u}=h.useContext(o.FormBlockContext),p=h.useMemo(()=>E.createForm(),[]);return s.jsxs(Q.Provider,{value:{collection:d,insert:t,interfaceOptions:n,onAddField(m){const f=K.pick(m,["name","group","title","default","validateSchema"]),{properties:T}=m,A=T,{unique:c,type:x,layout:v,autoIncrement:k}=A,w=$(A,["unique","type","layout","autoIncrement"]);f.properties=w;const I=K.cloneDeep(f);delete I.properties.name["x-disabled"],r(I)},setCallback:i,setInterface:r,setCollectionFields:u},children:[s.jsx(o.SchemaInitializerItems,F(g({},e),{items:a})),s.jsx(o.ActionContextProvider,{value:{visible:!!n,setVisible(m){m||r(null)}},children:n?s.jsx(o.SchemaComponent,{schema:{type:"void",name:"drawer",title:'{{t("Configure field")}}',"x-decorator":"FormV2","x-decorator-props":{form:p},"x-component":"Action.Drawer",properties:F(g({},n.properties),{footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{type:"void",title:'{{t("Cancel")}}',"x-component":"Action","x-component-props":{useAction(){const m=S.useForm();return{run(){return U(this,null,function*(){i(null),r(null),m.reset()})}}}}},submit:{type:"void",title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",useAction:Se}}}}})},components:{ArrayTable:_.ArrayTable}}):null})]})},ee={wrap:o.gridRowColWrap,insertPosition:"beforeEnd",title:"{{t('Configure fields')}}",ItemsComponent:ve},oe=new o.CompatibleSchemaInitializer(g({name:"AddCustomFormField"},ee)),ke=new o.CompatibleSchemaInitializer(g({name:"workflowManual:customForm:configureFields"},ee),oe);function Fe(){const e=o.useSchemaInitializerItem(),{insert:n}=o.useSchemaInitializer(),{onAddField:r,setCallback:t}=h.useContext(Q),{getInterface:i}=o.useCollectionManager_deprecated(),a=i(e.fieldInterface);return s.jsx(o.SchemaInitializerItem,g({onClick:()=>{t(()=>n),r(a)}},e),e.fieldInterface)}const we={title:`{{t("Custom form", { ns: "${y}" })}}`,config:{useInitializer(){return{name:"customForm",type:"item",title:`{{t("Custom form", { ns: "${y}" })}}`,Component:ge}},initializers:{},components:{CustomFormBlockProvider:W},parseFormOptions(e){const n={};return V(e,t=>t["x-decorator"]==="CustomFormBlockProvider").forEach(t=>{var p,m;const[i]=Object.keys(t.properties),a=t.properties[i],d=V(a.properties.grid,f=>f["x-component"]==="CollectionField",!0);t["x-decorator-props"].collection.fields=d.map(f=>{var c,x;return(x=(c=f["x-component-props"])==null?void 0:c.field)!=null?x:f["x-interface-options"]});const u=((p=Object.entries(a.properties).find(([f,c])=>c["x-component"]==="ActionBar"))==null?void 0:p[0])||"actions";n[i]={type:"custom",title:((m=t["x-component-props"])==null?void 0:m.title)||i,actions:V(a.properties[u],f=>f["x-component"]==="Action").map(f=>{var c,x;return{status:f["x-decorator-props"].value,values:(x=(c=f["x-action-settings"])==null?void 0:c.assignedValues)==null?void 0:x.values,key:f.name}}),collection:t["x-decorator-props"].collection}}),n}},block:{scope:{},components:{CustomFormBlockProvider:W}}};function Ie(){const{name:e,title:n}=o.useCollection_deprecated(),r=S.useFieldSchema(),{t}=j.useTranslation(),{dn:i}=o.useDesignable();return s.jsxs(o.GeneralSchemaDesigner,{title:n||e,children:[s.jsx(o.SchemaSettingsBlockTitleItem,{}),s.jsx(o.SchemaSettingsActionModalItem,{title:t("Filter settings",{ns:y}),schema:{name:"filter",type:"object",title:'{{t("Filter")}}',"x-component":"Filter","x-use-component-props":()=>{var d;return{options:o.useCollectionFilterOptions((d=r==null?void 0:r["x-decorator-props"])==null?void 0:d.collection)}},"x-component-props":{dynamicComponent:"FilterDynamicComponent"}},initialValues:r==null?void 0:r["x-decorator-props"],onSubmit:({filter:a})=>{r["x-decorator-props"].filter=a,i.emit("patch",{schema:{"x-decorator-props":r["x-decorator-props"]}}),i.refresh()},width:"60%"}),s.jsx(o.SchemaSettingsLinkageRules,{collectionName:e}),s.jsx(o.SchemaSettingsDivider,{}),s.jsx(o.SchemaSettingsRemove,{removeParentsIfNoChildren:!0,breakRemoveOn:{"x-component":"Grid"}})]})}const Ae={title:`{{t("Update record form", { ns: "${y}" })}}`,config:{useInitializer({allCollections:e}){const n=h.useMemo(()=>e.map(({key:a,displayName:d,collections:u})=>({key:a,name:a,label:d,type:"subMenu",children:u.map(p=>({name:K.camelCase(`updateRecordForm-child-${p.name}`),type:"item",title:p.title||p.tableName,schema:{collection:p.name,dataSource:a,title:`{{t("Update record", { ns: "${y}" })}}`,formType:"update","x-designer":"UpdateFormDesigner"},Component:Z}))})),[e]),[r,t]=h.useState([]),i=o.useMenuSearch({data:n,openKeys:r});return{name:"updateRecordForm",key:"updateRecordForm",type:"subMenu",title:`{{t("Update record form", { ns: "${y}" })}}`,componentProps:{onOpenChange(a){t(a)}},children:i}},initializers:{},components:{FilterDynamicComponent:l.FilterDynamicComponent,UpdateFormDesigner:Ie},parseFormOptions(e){const n={};return V(e,t=>t["x-decorator"]==="FormBlockProvider"&&t["x-decorator-props"].formType==="update").forEach(t=>{var u,p;const[i]=Object.keys(t.properties),a=t.properties[i],d=((u=Object.entries(a.properties).find(([m,f])=>f["x-component"]==="ActionBar"))==null?void 0:u[0])||"actions";n[i]=F(g({},t["x-decorator-props"]),{type:"update",title:((p=t["x-component-props"])==null?void 0:p.title)||i,actions:V(a.properties[d],m=>m["x-component"]==="Action").map(m=>{var f,c;return{status:m["x-decorator-props"].value,values:(c=(f=m["x-action-settings"])==null?void 0:f.assignedValues)==null?void 0:c.values,key:m.name}})})}),n}},block:{scope:{},components:{}},validate({filter:e}){return!e||!M.isValidFilter(e)?"Please check one of your update record form, and add at least one filter condition in form settings.":null}},z=new M.Registry;z.register("custom",we),z.register("create",Ce),z.register("update",Ae);function Be(){const{workflow:e}=l.useFlowContext(),n=l.useTrigger();return n.useInitializers?n.useInitializers(e.config):null}const te={wrap:o.gridRowColWrap,title:'{{t("Add block")}}',items:[{type:"itemGroup",name:"dataBlocks",title:'{{t("Data blocks")}}',hideIfNoChildren:!0,useChildren(){const e=o.usePlugin(l),n=l.useNodeContext(),r=l.useAvailableUpstreams(n),t=[Be()].filter(Boolean),i=r.map(d=>{var p;const u=e.instructions.get(d.type);return(p=u==null?void 0:u.useInitializers)==null?void 0:p.call(u,d)}).filter(Boolean);return[...t,...i.length?[{name:"nodes",type:"subMenu",title:`{{t("Node result", { ns: "${y}" })}}`,children:i}]:[]].filter(Boolean)}},{type:"itemGroup",name:"form",title:'{{t("Form")}}',useChildren(){const n=o.useDataSourceManager().getAllCollections();return Array.from(z.getValues()).map(r=>{const{useInitializer:t}=r.config;return t({allCollections:n})})}},{type:"itemGroup",name:"otherBlocks",title:'{{t("Other blocks")}}',children:[{name:"markdown",title:'{{t("Markdown")}}',Component:"MarkdownBlockInitializer"}]}]},ne=new o.CompatibleSchemaInitializer(g({name:"AddBlockButton"},te)),Te=new o.CompatibleSchemaInitializer(g({name:"workflowManual:popup:configureUserInterface:addBlock"},te),ne);function Me(){var T,A,O;const e=h.useContext(o.SchemaComponentContext),{t:n}=j.useTranslation(),{t:r}=Y(),t=S.useFieldSchema(),i=l.useWorkflowVariableOptions(),[a,d]=h.useState(!1),[u,p]=h.useState((O=(A=(T=t==null?void 0:t["x-action-settings"])==null?void 0:T.assignedValues)==null?void 0:A.schema)!=null?O:{type:"void","x-component":"Grid","x-initializer":"assignFieldValuesForm:configureFields",properties:{}}),[m,f]=h.useState(null),{components:c}=o.useSchemaOptionsContext();h.useEffect(()=>{f(new S.Schema({properties:{grid:u}}))},[u]);const x=h.useMemo(()=>{var N,G;const D=(G=(N=t==null?void 0:t["x-action-settings"])==null?void 0:N.assignedValues)==null?void 0:G.values;return E.createForm({initialValues:M.lodash.cloneDeep(D),values:M.lodash.cloneDeep(D)})},[t]),v=o.useFormActiveFields(),k=n("Assign field values");function w(){d(!1)}function I(){t["x-action-settings"]||(t["x-action-settings"]={}),t["x-action-settings"].assignedValues||(t["x-action-settings"].assignedValues={}),t["x-action-settings"].assignedValues.schema=u,t["x-action-settings"].assignedValues.values=x.values,d(!1),setTimeout(()=>{var D;(D=e.refresh)==null||D.call(e)},300)}return s.jsxs(s.Fragment,{children:[s.jsx(o.SchemaSettingsItem,{title:k,onClick:()=>d(!0),children:k}),s.jsx(b.Modal,{width:"50%",title:k,open:a,onCancel:w,footer:s.jsxs(b.Space,{children:[s.jsx(b.Button,{onClick:w,children:r("Cancel")}),s.jsx(b.Button,{type:"primary",onClick:I,children:r("Submit")})]}),children:s.jsx(o.DefaultValueProvider,{isAllowToSetDefaultValue:()=>!1,children:s.jsx(o.VariableScopeProvider,{scope:i,children:s.jsx(o.FormActiveFieldsProvider,{name:"form",getActiveFieldsName:v==null?void 0:v.getActiveFieldsName,children:s.jsx(S.FormProvider,{form:x,children:s.jsxs(_.FormLayout,{layout:"vertical",children:[s.jsx(b.Alert,{message:r("Values preset in this form will override user submitted ones when continue or reject.")}),s.jsx("br",{}),a&&m&&s.jsx(o.SchemaComponentContext.Provider,{value:F(g({},e),{refresh(){p(M.lodash.get(m.toJSON(),"properties.grid"))}}),children:s.jsx(o.SchemaComponent,{schema:m,components:c})})]})})})})})})]})}function Oe(e){return s.jsxs(o.GeneralSchemaDesigner,F(g({},e),{disableInitializer:!0,children:[s.jsx(o.Action.Designer.ButtonEditor,{}),s.jsx(Me,{}),s.jsx(o.SchemaSettingsDivider,{}),s.jsx(o.SchemaSettingsRemove,{removeParentsIfNoChildren:!0,breakRemoveOn:{"x-component":"ActionBar"}})]}))}function ze(){const a=o.useSchemaInitializerItem(),{action:n,actionProps:r}=a,t=$(a,["action","actionProps"]),{insert:i}=o.useSchemaInitializer();return s.jsx(o.SchemaInitializerItem,F(g({},t),{onClick:()=>{i({type:"void",title:t.title,"x-decorator":"ManualActionStatusProvider","x-decorator-props":{value:n},"x-component":"Action","x-component-props":F(g({},r),{useAction:"{{ useSubmit }}"}),"x-designer":"ManualActionDesigner","x-action-settings":{}})}}))}function re(){const e=o.useSchemaInitializerItem(),i=e,{action:n,actionProps:r}=i,t=$(i,["action","actionProps"]);return s.jsx(o.InitializerWithSwitch,F(g({},t),{item:e,schema:{type:"void",title:t.title,"x-decorator":"ManualActionStatusProvider","x-decorator-props":{value:n},"x-component":"Action","x-component-props":F(g({},r),{useAction:"{{ useSubmit }}"}),"x-designer":"ManualActionDesigner","x-action":`${n}`},type:"x-action"}))}const se={title:'{{t("Configure actions")}}',items:[{name:"jobStatusResolved",title:`{{t("Continue the process", { ns: "${y}" })}}`,Component:ze,action:l.JOB_STATUS.RESOLVED,actionProps:{type:"primary"}},{name:"jobStatusRejected",title:`{{t("Terminate the process", { ns: "${y}" })}}`,Component:re,action:l.JOB_STATUS.REJECTED,actionProps:{danger:!0}},{name:"jobStatusPending",title:`{{t("Save temporarily", { ns: "${y}" })}}`,Component:re,action:l.JOB_STATUS.PENDING}]},ie=new o.CompatibleSchemaInitializer(g({name:"AddActionButton"},se)),De=new o.CompatibleSchemaInitializer(g({name:"workflowManual:form:configureActions"},se),ie);function Ve(){return{run(){}}}function Pe({value:e,onChange:n}){const r=o.usePlugin(l),t=h.useContext(o.SchemaComponentContext),i=l.useNodeContext(),a=l.useAvailableUpstreams(i),d=S.useForm(),{workflow:u}=l.useFlowContext(),p={};a.forEach(c=>{const x=r.instructions.get(c.type);Object.assign(p,x.components)});const m=h.useMemo(()=>new S.Schema({properties:{drawer:{type:"void",title:`{{t("User interface", { ns: "${y}" })}}`,"x-decorator":"Form","x-component":"Action.Drawer","x-component-props":{className:o.css`
|
|
11
11
|
.ant-drawer-body {
|
|
12
12
|
background: var(--nb-box-bg);
|
|
13
13
|
}
|
|
14
|
-
`},properties:{tabs:{type:"void","x-component":"Tabs","x-component-props":{},"x-initializer":"popup:addTab","x-initializer-props":{gridInitializer:"workflowManual:popup:configureUserInterface:addBlock"},properties:e!=null?e:{tab1:{type:"void",title:`{{t("Manual", { ns: "${y}" })}}`,"x-component":"Tabs.TabPane","x-designer":"Tabs.Designer",properties:{grid:{type:"void","x-component":"Grid","x-initializer":"workflowManual:popup:configureUserInterface:addBlock",properties:{}}}}}}}}}}),[]),f=h.useCallback(function(){const{tabs:x}=M.lodash.get(m.toJSON(),"properties.drawer.properties"),v=Array.from(
|
|
14
|
+
`},properties:{tabs:{type:"void","x-component":"Tabs","x-component-props":{},"x-initializer":"popup:addTab","x-initializer-props":{gridInitializer:"workflowManual:popup:configureUserInterface:addBlock"},properties:e!=null?e:{tab1:{type:"void",title:`{{t("Manual", { ns: "${y}" })}}`,"x-component":"Tabs.TabPane","x-designer":"Tabs.Designer",properties:{grid:{type:"void","x-component":"Grid","x-initializer":"workflowManual:popup:configureUserInterface:addBlock",properties:{}}}}}}}}}}),[]),f=h.useCallback(function(){const{tabs:x}=M.lodash.get(m.toJSON(),"properties.drawer.properties"),v=Array.from(z.getValues()).reduce((k,w)=>Object.assign(k,w.config.parseFormOptions(x)),{});d.setValuesIn("forms",v),n(x.properties)},[d,n,m]);return s.jsx(o.SchemaComponentContext.Provider,{value:F(g({},t),{designable:!u.executed,refresh:f}),children:s.jsx(o.SchemaComponent,{schema:m,components:F(g(g({},p),Array.from(z.getValues()).reduce((c,x)=>Object.assign(c,x.config.components),{})),{FormBlockProvider:X,DetailsBlockProvider:l.DetailsBlockProvider,ManualActionStatusProvider(c){return c.children},ActionBarProvider(c){return c.children},SimpleDesigner:l.SimpleDesigner,ManualActionDesigner:Oe}),scope:{useSubmit:Ve,useDetailsBlockProps:o.useFormBlockContext}})})}function je(e={}){for(const n of Object.values(e)){const r=z.get(n.type);if(typeof r.validate=="function"){const t=r.validate(n);if(t)return t}}}function Ne(e){const{workflow:n}=l.useFlowContext(),[r,t]=h.useState(!1),{values:i}=S.useForm(),{t:a}=Y(),d=h.useCallback(u=>{if(!u){const p=je(i.forms);if(p){b.message.error({title:a("Validation failed"),content:a(p)});return}}t(u)},[i.forms]);return s.jsxs(s.Fragment,{children:[s.jsx(b.Button,{type:"primary",onClick:()=>t(!0),disabled:!1,children:a(n.executed?"View user interface":"Configure user interface")}),s.jsx(o.ActionContextProvider,{value:{visible:r,setVisible:d,formValueChanged:!1},children:e.children})]})}function $e({value:e,onChange:n}){const r=s.jsx("fieldset",{children:s.jsx(_.FormLayout,{layout:"vertical",children:s.jsx(o.FormItem,{label:B("Negotiation"),children:s.jsxs(b.Radio.Group,{value:e,onChange:n,children:[s.jsx(b.Radio,{value:1,children:s.jsxs(b.Tooltip,{title:B("Everyone should pass"),placement:"bottom",children:[s.jsx("span",{children:B("All pass")}),s.jsx(q.QuestionCircleOutlined,{style:{color:"#999"}})]})}),s.jsx(b.Radio,{value:-1,children:s.jsxs(b.Tooltip,{title:B("Anyone pass"),placement:"bottom",children:[s.jsx("span",{children:B("Any pass")}),s.jsx(q.QuestionCircleOutlined,{style:{color:"#999"}})]})})]})})})});return s.jsxs("fieldset",{className:o.css`
|
|
15
15
|
.ant-radio-group {
|
|
16
16
|
.anticon {
|
|
17
17
|
margin-left: 0.5em;
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
-
`,children:[s.jsx(b.Form.Item,{children:s.jsxs(b.Radio.Group,{value:!!e,onChange:({target:{value:t}})=>{console.log(t),n(Number(t))},children:[s.jsx(b.Radio,{value:!0,children:s.jsxs(b.Tooltip,{title:B("Each user has own task"),placement:"bottom",children:[s.jsx("span",{children:B("Separately")}),s.jsx(q.QuestionCircleOutlined,{style:{color:"#999"}})]})}),s.jsx(b.Radio,{value:!1,children:s.jsxs(b.Tooltip,{title:B("Everyone shares one task"),placement:"bottom",children:[s.jsx("span",{children:B("Collaboratively")}),s.jsx(q.QuestionCircleOutlined,{style:{color:"#999"}})]})})]})}),e?r:null]})}function Ue(e){return e.isForeignKey?e.target==="users":e.collectionName==="users"&&e.name==="id"}function _e({multiple:e=!1,value:n=[],onChange:r}){const t=l.useWorkflowVariableOptions({types:[Ue]});return s.jsx(o.Variable.Input,{scope:t,value:n[0],onChange:i=>{r([i])},children:s.jsx(o.RemoteSelect,{fieldNames:{label:"nickname",value:"id"},service:{resource:"users"},manual:!1,value:n[0],onChange:i=>{r(i!=null?[i]:[])}})})}function Ee({key:e,title:n,config:r},{types:t,fieldNames:i=l.defaultFieldNames}){var m;const a=o.useCompile(),{getCollectionFields:d}=o.useCollectionManager_deprecated(),u=Object.keys((m=r.forms)!=null?m:{});if(!u.length)return null;const p=u.map(f=>{var k;const c=r.forms[f],x=l.getCollectionFieldOptions({fields:(k=c.collection)==null?void 0:k.fields,collection:c.collection,types:t,compile:a,getCollectionFields:d}),v=a(c.title)||f;return x.length?{key:f,value:f,label:v,title:v,children:x}:null}).filter(Boolean);return p.length?{[i.value]:e,[i.label]:n,[i.children]:p}:null}class Ke extends l.Instruction{constructor(){super(...arguments);P(this,"title",`{{t("Manual", { ns: "${y}" })}}`);P(this,"type","manual");P(this,"group","manual");P(this,"description",`{{t("Could be used for manually submitting data, and determine whether to continue or exit. Workflow will generate a todo item for assigned user when it reaches a manual node, and continue processing after user submits the form.", { ns: "${y}" })}}`);P(this,"fieldset",{assignees:{type:"array",title:`{{t("Assignees", { ns: "${y}" })}}`,"x-decorator":"FormItem","x-component":"AssigneesSelect","x-component-props":{},required:!0,default:[]},mode:{type:"number",title:`{{t("Mode", { ns: "${y}" })}}`,"x-decorator":"FormItem","x-component":"ModeConfig",default:1,"x-reactions":{dependencies:["assignees"],fulfill:{state:{visible:"{{$deps[0].length > 1}}"}}}},schema:{type:"void",title:`{{t("User interface", { ns: "${y}" })}}`,"x-decorator":"FormItem","x-component":"SchemaConfigButton",properties:{schema:{type:"object","x-component":"SchemaConfig",default:null}}},forms:{type:"object",default:{}}});P(this,"components",{SchemaConfigButton:Ne,SchemaConfig:Pe,ModeConfig:$e,AssigneesSelect:_e});P(this,"useVariables",Ee)}useInitializers(r){var d;const{getCollection:t}=o.useCollectionManager_deprecated(),i=Object.keys((d=r.config.forms)!=null?d:{});if(!i.length||r.config.mode)return null;const a=i.map(u=>{var f,c;const p=r.config.forms[u],{fields:m=[]}=t(p.collection);return m.length?{name:(f=p.title)!=null?f:u,type:"item",title:(c=p.title)!=null?c:u,Component:l.CollectionBlockInitializer,collection:p.collection,dataPath:`$jobsMapByNodeKey.${r.key}.${u}`}:null}).filter(Boolean);return a.length?{name:`#${r.id}`,key:"forms",type:"subMenu",title:r.title,children:a}:null}isAvailable({engine:r,workflow:t,upstream:i,branchIndex:a}){return!r.isWorkflowSync(t)}}const qe={title:`{{t("Task", { ns: "${y}" })}}`,name:"flow_nodes",fields:[{type:"bigInt",name:"id",interface:"m2o",uiSchema:{type:"number",title:"ID","x-component":"RemoteSelect","x-component-props":{fieldNames:{label:"title",value:"id"},service:{resource:"flow_nodes",params:{filter:{type:"manual"}}}}}},{type:"string",name:"title",interface:"input",uiSchema:{type:"string",title:'{{t("Title")}}',"x-component":"Input"}}]},Ge={title:`{{t("Workflow", { ns: "${y}" })}}`,name:"workflows",fields:[{type:"string",name:"title",interface:"input",uiSchema:{title:'{{t("Name")}}',type:"string","x-component":"Input",required:!0}}]},Je={title:`{{t("Workflow todos", { ns: "${y}" })}}`,name:"users_jobs",fields:[{type:"belongsTo",name:"user",target:"users",foreignKey:"userId",interface:"m2o",uiSchema:{type:"number",title:'{{t("User")}}',"x-component":"RemoteSelect","x-component-props":{fieldNames:{label:"nickname",value:"id"},service:{resource:"users"}}}},{type:"belongsTo",name:"node",target:"flow_nodes",foreignKey:"nodeId",interface:"m2o",isAssociation:!0,uiSchema:{type:"number",title:`{{t("Task", { ns: "${y}" })}}`,"x-component":"RemoteSelect","x-component-props":{fieldNames:{label:"title",value:"id"},service:{resource:"flow_nodes"}}}},{type:"belongsTo",name:"workflow",target:"workflows",foreignKey:"workflowId",interface:"m2o",uiSchema:{type:"number",title:`{{t("Workflow", { ns: "${y}" })}}`,"x-component":"RemoteSelect","x-component-props":{fieldNames:{label:"title",value:"id"},service:{resource:"workflows"}}}},{type:"integer",name:"status",interface:"select",uiSchema:{type:"number",title:`{{t("Status", { ns: "${y}" })}}`,"x-component":"Select",enum:l.JobStatusOptions}},{name:"createdAt",type:"date",interface:"createdAt",uiSchema:{type:"datetime",title:'{{t("Created at")}}',"x-component":"DatePicker","x-component-props":{showTime:!0}}}]},Le=S.observer(()=>{var n,r,t;const e=S.useField();return(t=(n=e==null?void 0:e.value)==null?void 0:n.title)!=null?t:`#${(r=e.value)==null?void 0:r.id}`},{displayName:"NodeColumn"}),Ye=S.observer(()=>{var n,r,t;const e=S.useField();return(t=(n=e==null?void 0:e.value)==null?void 0:n.title)!=null?t:`#${(r=e.value)==null?void 0:r.id}`},{displayName:"WorkflowColumn"}),Qe=S.observer(()=>{var n,r,t;const e=S.useField();return(t=(n=e==null?void 0:e.value)==null?void 0:n.nickname)!=null?t:(r=e.value)==null?void 0:r.id},{displayName:"UserColumn"});function He(e){var t;const n=o.useCollectionRecordData(),r=B("Unprocessed");return(t=n==null?void 0:n.execution)!=null&&t.status&&!(n!=null&&n.status)?s.jsx(b.Tag,{children:r}):e.children}const J=()=>{const{defaultOpenMode:e}=o.useOpenModeContext(),n=o.useCollection();return s.jsx(o.SchemaComponent,{components:{NodeColumn:Le,WorkflowColumn:Ye,UserColumn:Qe,UserJobStatusColumn:He},schema:{type:"void",properties:{actions:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:"var(--nb-spacing)"}},properties:{filter:{type:"void",title:'{{ t("Filter") }}',"x-action":"filter","x-designer":"Filter.Action.Designer","x-component":"Filter.Action","x-use-component-props":"useFilterActionProps","x-component-props":{icon:"FilterOutlined"},"x-align":"left"},refresher:{type:"void",title:'{{ t("Refresh") }}',"x-action":"refresh","x-component":"Action","x-use-component-props":"useRefreshActionProps","x-toolbar":"ActionSchemaToolbar","x-settings":"actionSettings:refresh","x-component-props":{icon:"ReloadOutlined"},"x-align":"right"}}},table:{type:"array","x-component":"TableV2","x-use-component-props":"useTableBlockProps","x-component-props":{rowKey:"id"},properties:{actions:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column","x-component-props":{width:60},title:'{{t("Actions")}}',properties:{view:ae({defaultOpenMode:e,collectionName:n.name})}},node:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column","x-component-props":{width:null},title:`{{t("Task node", { ns: "${y}" })}}`,properties:{node:{"x-component":"NodeColumn","x-read-pretty":!0}}},workflow:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column","x-component-props":{width:null},title:'{{t("Workflow", { ns: "workflow" })}}',properties:{workflow:{"x-component":"WorkflowColumn","x-read-pretty":!0}}},status:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column","x-component-props":{width:100},title:'{{t("Status", { ns: "workflow" })}}',properties:{status:{type:"number","x-decorator":"UserJobStatusColumn","x-component":"CollectionField","x-read-pretty":!0}}},user:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column","x-component-props":{width:140},title:`{{t("Assignee", { ns: "${y}" })}}`,properties:{user:{"x-component":"UserColumn","x-read-pretty":!0}}},createdAt:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column","x-component-props":{width:160},properties:{createdAt:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}}}}}}})};function ae({defaultOpenMode:e,collectionName:n}){return{name:"view",type:"void","x-component":"Action.Link","x-component-props":{openMode:e},title:'{{t("View")}}',"x-uid":`${n}-view`,"x-action":"view","x-action-context":{dataSource:"main",collection:n,doNotUpdateContext:!0},properties:{drawer:{"x-component":J.Drawer}}}}function Xe(e){var m;const{data:n}=o.useCurrentUserContext(),{userJob:r}=l.useFlowContext(),{status:t,result:i,userId:a}=r,d=S.useFieldSchema(),{name:u}=d.parent.toJSON();let{children:p}=e;return t?i[u]||(p=null):((m=n==null?void 0:n.data)==null?void 0:m.id)!==a&&(p=null),p}const ce=h.createContext(null);ce.displayName="ManualActionStatusContext";function Ze({value:e,children:n}){const{userJob:r,execution:t}=l.useFlowContext(),i=S.useField(),a=S.useFieldSchema(),d=o.useCompile();return h.useEffect(()=>{(t.status||r.status)&&(i.disabled=!0,i.visible=r.status===e&&r.result._===a.name)},[t,r,e,i,a.name]),s.jsx(ce.Provider,{value:e,children:t.status||r.status?s.jsx(b.Button,{type:"primary",disabled:!0,children:d(a.title)}):n})}function We(){var v;const e=o.useAPIClient(),{setVisible:n,setSubmitted:r}=o.useActionContext(),{values:t,submit:i}=S.useForm(),a=S.useField(),d=S.useFieldSchema(),{service:u}=o.useTableBlockContext(),{userJob:p,execution:m}=l.useFlowContext(),{name:f}=d,{name:c}=d.parent.parent,{assignedValues:x={}}=(v=d==null?void 0:d["x-action-settings"])!=null?v:{};return{run(){return U(this,null,function*(){m.status||p.status||(yield i(),a.data=a.data||{},a.data.loading=!0,yield e.resource("users_jobs").submit({filterByTk:p.id,values:{result:{[c]:g(g({},t),x.values),_:f}}}),a.data.loading=!1,r(!0),n(!1),u==null||u.refresh())})}}}function Re(e){var f;const n=o.usePlugin(l),r=o.useAPIClient(),{id:t}=o.useCollectionRecordData()||{},[i,a]=h.useState(null),[d,u]=h.useState(null);h.useEffect(()=>{var c,x;t&&((x=(c=r.resource("users_jobs")).get)==null||x.call(c,{filterByTk:t,appends:["node","job","workflow","workflow.nodes","execution","execution.jobs"]}).then(({data:v})=>{var O;const z=(O=v==null?void 0:v.data)!=null?O:{},{node:k,workflow:N={}}=z,G=N,{nodes:w=[]}=G,I=$(G,["nodes"]),pe=z,{execution:T}=pe,A=$(pe,["node","workflow","execution"]);l.linkNodes(w),u(k),a({userJob:A,workflow:I,nodes:w,execution:T})}))},[r,t]);const m=l.useAvailableUpstreams(i==null?void 0:i.nodes.find(c=>c.id===d.id)).reduce((c,{type:x})=>Object.assign(c,n.instructions.get(x).components),{});return d&&i?s.jsx(l.FlowContext.Provider,{value:i,children:s.jsx(o.SchemaComponent,{components:g(g({FormBlockProvider:X,DetailsBlockProvider:l.DetailsBlockProvider,ActionBarProvider:Xe,ManualActionStatusProvider:Ze},Array.from(D.getValues()).reduce((c,x)=>Object.assign(c,x.block.components),{})),m),scope:g({useSubmit:We,useFormBlockProps:eo,useDetailsBlockProps:oo},Array.from(D.getValues()).reduce((c,x)=>Object.assign(c,x.block.scope),{})),schema:{type:"void",name:"tabs","x-component":"Tabs",properties:(f=d.config)==null?void 0:f.schema}})}):s.jsx(b.Spin,{})}function eo(){var d;const{userJob:e,execution:n}=l.useFlowContext(),r=o.useCollectionRecordData(),{data:t}=o.useCurrentUserContext(),{form:i}=o.useFormBlockContext(),a=n.status||e.status?r?"readPretty":"disabled":((d=t==null?void 0:t.data)==null?void 0:d.id)!==e.userId?"disabled":"editable";return h.useEffect(()=>{i==null||i.setPattern(a)},[a,i]),{form:i}}function oo(){const{form:e}=o.useFormBlockContext();return{form:e}}function to(){const e=o.useCompile(),{status:n,updatedAt:r}=o.useCollectionRecordData()||{},t=l.JobStatusOptionsMap[n];return n?s.jsxs(b.Space,{children:[s.jsx("time",{className:o.css`
|
|
20
|
+
`,children:[s.jsx(b.Form.Item,{children:s.jsxs(b.Radio.Group,{value:!!e,onChange:({target:{value:t}})=>{console.log(t),n(Number(t))},children:[s.jsx(b.Radio,{value:!0,children:s.jsxs(b.Tooltip,{title:B("Each user has own task"),placement:"bottom",children:[s.jsx("span",{children:B("Separately")}),s.jsx(q.QuestionCircleOutlined,{style:{color:"#999"}})]})}),s.jsx(b.Radio,{value:!1,children:s.jsxs(b.Tooltip,{title:B("Everyone shares one task"),placement:"bottom",children:[s.jsx("span",{children:B("Collaboratively")}),s.jsx(q.QuestionCircleOutlined,{style:{color:"#999"}})]})})]})}),e?r:null]})}function Ue(e){return e.isForeignKey?e.target==="users":e.collectionName==="users"&&e.name==="id"}function _e({multiple:e=!1,value:n=[],onChange:r}){const t=l.useWorkflowVariableOptions({types:[Ue]});return s.jsx(o.Variable.Input,{scope:t,value:n[0],onChange:i=>{r([i])},children:s.jsx(o.RemoteSelect,{fieldNames:{label:"nickname",value:"id"},service:{resource:"users"},manual:!1,value:n[0],onChange:i=>{r(i!=null?[i]:[])}})})}function Ee({key:e,title:n,config:r},{types:t,fieldNames:i=l.defaultFieldNames}){var m;const a=o.useCompile(),{getCollectionFields:d}=o.useCollectionManager_deprecated(),u=Object.keys((m=r.forms)!=null?m:{});if(!u.length)return null;const p=u.map(f=>{var k;const c=r.forms[f],x=l.getCollectionFieldOptions({fields:(k=c.collection)==null?void 0:k.fields,collection:c.collection,types:t,compile:a,getCollectionFields:d}),v=a(c.title)||f;return x.length?{key:f,value:f,label:v,title:v,children:x}:null}).filter(Boolean);return p.length?{[i.value]:e,[i.label]:n,[i.children]:p}:null}class Ke extends l.Instruction{constructor(){super(...arguments);P(this,"title",`{{t("Manual", { ns: "${y}" })}}`);P(this,"type","manual");P(this,"group","manual");P(this,"description",`{{t("Could be used for manually submitting data, and determine whether to continue or exit. Workflow will generate a todo item for assigned user when it reaches a manual node, and continue processing after user submits the form.", { ns: "${y}" })}}`);P(this,"fieldset",{assignees:{type:"array",title:`{{t("Assignees", { ns: "${y}" })}}`,"x-decorator":"FormItem","x-component":"AssigneesSelect","x-component-props":{},required:!0,default:[]},mode:{type:"number",title:`{{t("Mode", { ns: "${y}" })}}`,"x-decorator":"FormItem","x-component":"ModeConfig",default:1,"x-reactions":{dependencies:["assignees"],fulfill:{state:{visible:"{{$deps[0].length > 1}}"}}}},schema:{type:"void",title:`{{t("User interface", { ns: "${y}" })}}`,"x-decorator":"FormItem","x-component":"SchemaConfigButton",properties:{schema:{type:"object","x-component":"SchemaConfig",default:null}}},forms:{type:"object",default:{}}});P(this,"components",{SchemaConfigButton:Ne,SchemaConfig:Pe,ModeConfig:$e,AssigneesSelect:_e});P(this,"useVariables",Ee)}useInitializers(r){var d;const{getCollection:t}=o.useCollectionManager_deprecated(),i=Object.keys((d=r.config.forms)!=null?d:{});if(!i.length||r.config.mode)return null;const a=i.map(u=>{var f,c;const p=r.config.forms[u],{fields:m=[]}=t(p.collection);return m.length?{name:(f=p.title)!=null?f:u,type:"item",title:(c=p.title)!=null?c:u,Component:l.CollectionBlockInitializer,collection:p.collection,dataPath:`$jobsMapByNodeKey.${r.key}.${u}`}:null}).filter(Boolean);return a.length?{name:`#${r.id}`,key:"forms",type:"subMenu",title:r.title,children:a}:null}isAvailable({engine:r,workflow:t,upstream:i,branchIndex:a}){return!r.isWorkflowSync(t)}}const qe={title:`{{t("Task", { ns: "${y}" })}}`,name:"flow_nodes",fields:[{type:"bigInt",name:"id",interface:"m2o",uiSchema:{type:"number",title:"ID","x-component":"RemoteSelect","x-component-props":{fieldNames:{label:"title",value:"id"},service:{resource:"flow_nodes",params:{filter:{type:"manual"}}}}}},{type:"string",name:"title",interface:"input",uiSchema:{type:"string",title:'{{t("Title")}}',"x-component":"Input"}}]},Ge={title:`{{t("Workflow", { ns: "${y}" })}}`,name:"workflows",fields:[{type:"string",name:"title",interface:"input",uiSchema:{title:'{{t("Name")}}',type:"string","x-component":"Input",required:!0}}]},Je={title:`{{t("Workflow todos", { ns: "${y}" })}}`,name:"users_jobs",fields:[{type:"belongsTo",name:"user",target:"users",foreignKey:"userId",interface:"m2o",uiSchema:{type:"number",title:'{{t("User")}}',"x-component":"RemoteSelect","x-component-props":{fieldNames:{label:"nickname",value:"id"},service:{resource:"users"}}}},{type:"belongsTo",name:"node",target:"flow_nodes",foreignKey:"nodeId",interface:"m2o",isAssociation:!0,uiSchema:{type:"number",title:`{{t("Task", { ns: "${y}" })}}`,"x-component":"RemoteSelect","x-component-props":{fieldNames:{label:"title",value:"id"},service:{resource:"flow_nodes"}}}},{type:"belongsTo",name:"workflow",target:"workflows",foreignKey:"workflowId",interface:"m2o",uiSchema:{type:"number",title:`{{t("Workflow", { ns: "${y}" })}}`,"x-component":"RemoteSelect","x-component-props":{fieldNames:{label:"title",value:"id"},service:{resource:"workflows"}}}},{type:"integer",name:"status",interface:"select",uiSchema:{type:"number",title:`{{t("Status", { ns: "${y}" })}}`,"x-component":"Select",enum:l.JobStatusOptions}},{name:"createdAt",type:"date",interface:"createdAt",uiSchema:{type:"datetime",title:'{{t("Created at")}}',"x-component":"DatePicker","x-component-props":{showTime:!0}}}]},Le=S.observer(()=>{var n,r,t;const e=S.useField();return(t=(n=e==null?void 0:e.value)==null?void 0:n.title)!=null?t:`#${(r=e.value)==null?void 0:r.id}`},{displayName:"NodeColumn"}),Ye=S.observer(()=>{var n,r,t;const e=S.useField();return(t=(n=e==null?void 0:e.value)==null?void 0:n.title)!=null?t:`#${(r=e.value)==null?void 0:r.id}`},{displayName:"WorkflowColumn"}),Qe=S.observer(()=>{var n,r,t;const e=S.useField();return(t=(n=e==null?void 0:e.value)==null?void 0:n.nickname)!=null?t:(r=e.value)==null?void 0:r.id},{displayName:"UserColumn"});function He(e){var t;const n=o.useCollectionRecordData(),r=B("Unprocessed");return(t=n==null?void 0:n.execution)!=null&&t.status&&!(n!=null&&n.status)?s.jsx(b.Tag,{children:r}):e.children}const J=()=>{const{defaultOpenMode:e}=o.useOpenModeContext(),n=o.useCollection();return s.jsx(o.SchemaComponent,{components:{NodeColumn:Le,WorkflowColumn:Ye,UserColumn:Qe,UserJobStatusColumn:He},schema:{type:"void",properties:{actions:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:"var(--nb-spacing)"}},properties:{filter:{type:"void",title:'{{ t("Filter") }}',"x-action":"filter","x-designer":"Filter.Action.Designer","x-component":"Filter.Action","x-use-component-props":"useFilterActionProps","x-component-props":{icon:"FilterOutlined"},"x-align":"left"},refresher:{type:"void",title:'{{ t("Refresh") }}',"x-action":"refresh","x-component":"Action","x-use-component-props":"useRefreshActionProps","x-toolbar":"ActionSchemaToolbar","x-settings":"actionSettings:refresh","x-component-props":{icon:"ReloadOutlined"},"x-align":"right"}}},table:{type:"array","x-component":"TableV2","x-use-component-props":"useTableBlockProps","x-component-props":{rowKey:"id"},properties:{actions:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column","x-component-props":{width:60},title:'{{t("Actions")}}',properties:{view:ae({defaultOpenMode:e,collectionName:n.name})}},node:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column","x-component-props":{width:null},title:`{{t("Task node", { ns: "${y}" })}}`,properties:{node:{"x-component":"NodeColumn","x-read-pretty":!0}}},workflow:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column","x-component-props":{width:null},title:'{{t("Workflow", { ns: "workflow" })}}',properties:{workflow:{"x-component":"WorkflowColumn","x-read-pretty":!0}}},status:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column","x-component-props":{width:100},title:'{{t("Status", { ns: "workflow" })}}',properties:{status:{type:"number","x-decorator":"UserJobStatusColumn","x-component":"CollectionField","x-read-pretty":!0}}},user:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column","x-component-props":{width:140},title:`{{t("Assignee", { ns: "${y}" })}}`,properties:{user:{"x-component":"UserColumn","x-read-pretty":!0}}},createdAt:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column","x-component-props":{width:160},properties:{createdAt:{type:"string","x-component":"CollectionField","x-read-pretty":!0}}}}}}}})};function ae({defaultOpenMode:e,collectionName:n}){return{name:"view",type:"void","x-component":"Action.Link","x-component-props":{openMode:e},title:'{{t("View")}}',"x-uid":`${n}-view`,"x-action":"view","x-action-context":{dataSource:"main",collection:n,doNotUpdateContext:!0},properties:{drawer:{"x-component":J.Drawer}}}}function Xe(e){var m;const{data:n}=o.useCurrentUserContext(),{userJob:r}=l.useFlowContext(),{status:t,result:i,userId:a}=r,d=S.useFieldSchema(),{name:u}=d.parent.toJSON();let{children:p}=e;return t?i[u]||(p=null):((m=n==null?void 0:n.data)==null?void 0:m.id)!==a&&(p=null),p}const ce=h.createContext(null);ce.displayName="ManualActionStatusContext";function Ze({value:e,children:n}){const{userJob:r,execution:t}=l.useFlowContext(),i=S.useField(),a=S.useFieldSchema(),d=o.useCompile();return h.useEffect(()=>{(t.status||r.status)&&(i.disabled=!0,i.visible=r.status===e&&r.result._===a.name)},[t,r,e,i,a.name]),s.jsx(ce.Provider,{value:e,children:t.status||r.status?s.jsx(b.Button,{type:"primary",disabled:!0,children:d(a.title)}):n})}function We(){var v;const e=o.useAPIClient(),{setVisible:n,setSubmitted:r}=o.useActionContext(),{values:t,submit:i}=S.useForm(),a=S.useField(),d=S.useFieldSchema(),{service:u}=o.useTableBlockContext(),{userJob:p,execution:m}=l.useFlowContext(),{name:f}=d,{name:c}=d.parent.parent,{assignedValues:x={}}=(v=d==null?void 0:d["x-action-settings"])!=null?v:{};return{run(){return U(this,null,function*(){m.status||p.status||(yield i(),a.data=a.data||{},a.data.loading=!0,yield e.resource("users_jobs").submit({filterByTk:p.id,values:{result:{[c]:g(g({},t),x.values),_:f}}}),a.data.loading=!1,r(!0),n(!1),u==null||u.refresh())})}}}function Re(e){var f;const n=o.usePlugin(l),r=o.useAPIClient(),{id:t}=o.useCollectionRecordData()||{},[i,a]=h.useState(null),[d,u]=h.useState(null);h.useEffect(()=>{var c,x;t&&((x=(c=r.resource("users_jobs")).get)==null||x.call(c,{filterByTk:t,appends:["node","job","workflow","workflow.nodes","execution","execution.jobs"]}).then(({data:v})=>{var O;const D=(O=v==null?void 0:v.data)!=null?O:{},{node:k,workflow:N={}}=D,G=N,{nodes:w=[]}=G,I=$(G,["nodes"]),pe=D,{execution:T}=pe,A=$(pe,["node","workflow","execution"]);l.linkNodes(w),u(k),a({userJob:A,workflow:I,nodes:w,execution:T})}))},[r,t]);const m=l.useAvailableUpstreams(i==null?void 0:i.nodes.find(c=>c.id===d.id)).reduce((c,{type:x})=>Object.assign(c,n.instructions.get(x).components),{});return d&&i?s.jsx(l.FlowContext.Provider,{value:i,children:s.jsx(o.SchemaComponent,{components:g(g({FormBlockProvider:X,DetailsBlockProvider:l.DetailsBlockProvider,ActionBarProvider:Xe,ManualActionStatusProvider:Ze},Array.from(z.getValues()).reduce((c,x)=>Object.assign(c,x.block.components),{})),m),scope:g({useSubmit:We,useFormBlockProps:eo,useDetailsBlockProps:oo},Array.from(z.getValues()).reduce((c,x)=>Object.assign(c,x.block.scope),{})),schema:{type:"void",name:"tabs","x-component":"Tabs",properties:(f=d.config)==null?void 0:f.schema}})}):s.jsx(b.Spin,{})}function eo(){var d;const{userJob:e,execution:n}=l.useFlowContext(),r=o.useCollectionRecordData(),{data:t}=o.useCurrentUserContext(),{form:i}=o.useFormBlockContext(),a=n.status||e.status?r?"readPretty":"disabled":((d=t==null?void 0:t.data)==null?void 0:d.id)!==e.userId?"disabled":"editable";return h.useEffect(()=>{i==null||i.setPattern(a)},[a,i]),{form:i}}function oo(){const{form:e}=o.useFormBlockContext();return{form:e}}function to(){const e=o.useCompile(),{status:n,updatedAt:r}=o.useCollectionRecordData()||{},t=l.JobStatusOptionsMap[n];return n?s.jsxs(b.Space,{children:[s.jsx("time",{className:o.css`
|
|
21
21
|
margin-right: 0.5em;
|
|
22
|
-
`,children:me(r).format("YYYY-MM-DD HH:mm:ss")}),s.jsx(b.Tag,{icon:t.icon,color:t.color,children:e(t.label)})]}):null}function no(){var a;const e=h.useContext(o.SchemaComponentContext),{id:n,node:r,workflow:t,status:i}=o.useCollectionRecordData()||{};return s.jsx(o.SchemaComponentContext.Provider,{value:F(g({},e),{reset(){},designable:!1}),children:s.jsx(o.SchemaComponent,{components:{FooterStatus:to,FlowContextProvider:Re},schema:{type:"void",name:`drawer-${n}-${i}`,"x-component":"Action.Container","x-component-props":{className:"nb-action-popup"},title:`${t==null?void 0:t.title} - ${(a=r==null?void 0:r.title)!=null?a:`#${r==null?void 0:r.id}`}`,properties:{tabs:{type:"void","x-component":"FlowContextProvider"},footer:{type:"void","x-component":"Action.Container.Footer",properties:{content:{type:"void","x-component":"FooterStatus"}}}}}})})}function ro({params:e={},children:n}){const r={collection:"users_jobs",resource:"users_jobs",action:"list",params:F(g({pageSize:20,sort:["-createdAt"]},e),{appends:["user","node","workflow","execution.status"],except:["node.config","workflow.config","workflow.options"]}),rowKey:"id",showIndex:!0,dragSort:!1};return s.jsx(o.TableBlockProvider,F(g({name:"workflow-todo"},r),{children:n}))}J.Drawer=no,J.Decorator=ro;const le=[qe,Ge,Je],so=e=>s.jsx(o.ExtendCollectionsProvider,{collections:le,children:e.children});function io(e){e.forEach(n=>{const r=ao()?"drawer":"page",t=ae({defaultOpenMode:r,collectionName:n});o.storePopupContext(t["x-uid"],g({schema:t},t["x-action-context"]))})}io(Object.values(le).map(e=>e.name));function ao(){return window.location.pathname.startsWith("/m/")}const co=()=>{const e=o.useSchemaInitializerItem(),{insert:n}=o.useSchemaInitializer();return s.jsx(o.SchemaInitializerItem,F(g({icon:s.jsx(q.TableOutlined,{})},e),{onClick:()=>{n({type:"void","x-decorator":"WorkflowTodo.Decorator","x-decorator-props":{},"x-component":"CardItem","x-toolbar":"BlockSchemaToolbar","x-settings":"blockSettings:table",properties:{todos:{type:"void","x-component":"WorkflowTodo"}}})}}))};class lo extends o.Plugin{afterAdd(){return U(this,null,function*(){})}load(){return U(this,null,function*(){this.addComponents(),this.app.pm.get("workflow").registerInstruction("manual",Ke),this.app.schemaInitializerManager.add(ne),this.app.schemaInitializerManager.add(Te),this.app.schemaInitializerManager.add(ie),this.app.schemaInitializerManager.add(
|
|
22
|
+
`,children:me(r).format("YYYY-MM-DD HH:mm:ss")}),s.jsx(b.Tag,{icon:t.icon,color:t.color,children:e(t.label)})]}):null}function no(){var a;const e=h.useContext(o.SchemaComponentContext),{id:n,node:r,workflow:t,status:i}=o.useCollectionRecordData()||{};return s.jsx(o.SchemaComponentContext.Provider,{value:F(g({},e),{reset(){},designable:!1}),children:s.jsx(o.SchemaComponent,{components:{FooterStatus:to,FlowContextProvider:Re},schema:{type:"void",name:`drawer-${n}-${i}`,"x-component":"Action.Container","x-component-props":{className:"nb-action-popup"},title:`${t==null?void 0:t.title} - ${(a=r==null?void 0:r.title)!=null?a:`#${r==null?void 0:r.id}`}`,properties:{tabs:{type:"void","x-component":"FlowContextProvider"},footer:{type:"void","x-component":"Action.Container.Footer",properties:{content:{type:"void","x-component":"FooterStatus"}}}}}})})}function ro({params:e={},children:n}){const r={collection:"users_jobs",resource:"users_jobs",action:"list",params:F(g({pageSize:20,sort:["-createdAt"]},e),{appends:["user","node","workflow","execution.status"],except:["node.config","workflow.config","workflow.options"]}),rowKey:"id",showIndex:!0,dragSort:!1};return s.jsx(o.TableBlockProvider,F(g({name:"workflow-todo"},r),{children:n}))}J.Drawer=no,J.Decorator=ro;const le=[qe,Ge,Je],so=e=>s.jsx(o.ExtendCollectionsProvider,{collections:le,children:e.children});function io(e){e.forEach(n=>{const r=ao()?"drawer":"page",t=ae({defaultOpenMode:r,collectionName:n});o.storePopupContext(t["x-uid"],g({schema:t},t["x-action-context"]))})}io(Object.values(le).map(e=>e.name));function ao(){return window.location.pathname.startsWith("/m/")}const co=()=>{const e=o.useSchemaInitializerItem(),{insert:n}=o.useSchemaInitializer();return s.jsx(o.SchemaInitializerItem,F(g({icon:s.jsx(q.TableOutlined,{})},e),{onClick:()=>{n({type:"void","x-decorator":"WorkflowTodo.Decorator","x-decorator-props":{},"x-component":"CardItem","x-toolbar":"BlockSchemaToolbar","x-settings":"blockSettings:table",properties:{todos:{type:"void","x-component":"WorkflowTodo"}}})}}))};class lo extends o.Plugin{afterAdd(){return U(this,null,function*(){})}load(){return U(this,null,function*(){this.addComponents(),this.app.pm.get("workflow").registerInstruction("manual",Ke),this.app.schemaInitializerManager.add(ne),this.app.schemaInitializerManager.add(Te),this.app.schemaInitializerManager.add(ie),this.app.schemaInitializerManager.add(De),this.app.schemaInitializerManager.add(oe),this.app.schemaInitializerManager.add(ke),this.app.schemaInitializerManager.get("page:addBlock").add("otherBlocks.workflowTodos",{title:`{{t("Workflow todos", { ns: "${y}" })}}`,Component:"WorkflowTodoBlockInitializer",icon:"CheckSquareOutlined"}),this.app.schemaInitializerManager.addItem("mobile:addBlock","otherBlocks.workflowTodos",{title:`{{t("Workflow todos", { ns: "${y}" })}}`,Component:"WorkflowTodoBlockInitializer",icon:"CheckSquareOutlined"}),this.app.addProvider(so)})}addComponents(){this.app.addComponents({WorkflowTodo:J,WorkflowTodoBlockInitializer:co})}}C.default=lo,Object.defineProperties(C,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
package/dist/externalVersion.js
CHANGED
|
@@ -8,22 +8,22 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
module.exports = {
|
|
11
|
-
"@nocobase/client": "1.4.
|
|
11
|
+
"@nocobase/client": "1.4.17",
|
|
12
12
|
"react": "18.2.0",
|
|
13
13
|
"@formily/react": "2.3.0",
|
|
14
14
|
"antd": "5.12.8",
|
|
15
15
|
"dayjs": "1.11.10",
|
|
16
|
-
"@nocobase/plugin-workflow": "1.4.
|
|
16
|
+
"@nocobase/plugin-workflow": "1.4.17",
|
|
17
17
|
"@ant-design/icons": "5.2.6",
|
|
18
18
|
"react-i18next": "11.18.6",
|
|
19
|
-
"@nocobase/utils": "1.4.
|
|
20
|
-
"@nocobase/server": "1.4.
|
|
21
|
-
"@nocobase/actions": "1.4.
|
|
22
|
-
"@nocobase/resourcer": "1.4.
|
|
23
|
-
"@nocobase/test": "1.4.
|
|
24
|
-
"@nocobase/plugin-workflow-test": "1.4.
|
|
19
|
+
"@nocobase/utils": "1.4.17",
|
|
20
|
+
"@nocobase/server": "1.4.17",
|
|
21
|
+
"@nocobase/actions": "1.4.17",
|
|
22
|
+
"@nocobase/resourcer": "1.4.17",
|
|
23
|
+
"@nocobase/test": "1.4.17",
|
|
24
|
+
"@nocobase/plugin-workflow-test": "1.4.17",
|
|
25
25
|
"@formily/core": "2.3.0",
|
|
26
26
|
"@formily/antd-v5": "1.1.9",
|
|
27
|
-
"@nocobase/database": "1.4.
|
|
27
|
+
"@nocobase/database": "1.4.17",
|
|
28
28
|
"lodash": "4.17.21"
|
|
29
29
|
};
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"displayName.zh-CN": "工作流:人工处理节点",
|
|
5
5
|
"description": "Could be used for workflows which some of decisions are made by users.",
|
|
6
6
|
"description.zh-CN": "用于人工控制部分决策的流程。",
|
|
7
|
-
"version": "1.4.
|
|
7
|
+
"version": "1.4.17",
|
|
8
8
|
"license": "AGPL-3.0",
|
|
9
9
|
"main": "./dist/server/index.js",
|
|
10
10
|
"homepage": "https://docs.nocobase.com/handbook/workflow-manual",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"@nocobase/test": "1.x",
|
|
31
31
|
"@nocobase/utils": "1.x"
|
|
32
32
|
},
|
|
33
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "fbb23b74bdff489afea67e1f3c9a917dd0a836b7",
|
|
34
34
|
"keywords": [
|
|
35
35
|
"Workflow"
|
|
36
36
|
]
|