@rytass/bpm-core-react 0.18.1 → 0.20.0
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/CHANGELOG.md +52 -0
- package/dist/chunks/{FormBuilderView-vQfVc08Z.js → FormBuilderView-CFRiw04B.js} +563 -475
- package/dist/chunks/FormBuilderView-CFRiw04B.js.map +1 -0
- package/dist/chunks/FormBuilderView-CpUgbSbt.cjs +3 -0
- package/dist/chunks/FormBuilderView-CpUgbSbt.cjs.map +1 -0
- package/dist/chunks/FormRendererView-GfbVWEGa.js +1321 -0
- package/dist/chunks/FormRendererView-GfbVWEGa.js.map +1 -0
- package/dist/chunks/FormRendererView-lYSaR8CQ.cjs +6 -0
- package/dist/chunks/FormRendererView-lYSaR8CQ.cjs.map +1 -0
- package/dist/chunks/{compose-DtfX8DQ9.cjs → compose-Bb5bUVFd.cjs} +2 -2
- package/dist/chunks/{compose-DtfX8DQ9.cjs.map → compose-Bb5bUVFd.cjs.map} +1 -1
- package/dist/chunks/{compose-D9ipJpF_.js → compose-egQlRjuZ.js} +5 -4
- package/dist/chunks/{compose-D9ipJpF_.js.map → compose-egQlRjuZ.js.map} +1 -1
- package/dist/chunks/{delegations-BfhCDz5e.js → delegations-9-yvWWws.js} +3 -2
- package/dist/chunks/delegations-9-yvWWws.js.map +1 -0
- package/dist/chunks/delegations-CVmtpkRn.cjs +2 -0
- package/dist/chunks/delegations-CVmtpkRn.cjs.map +1 -0
- package/dist/chunks/delegations-CrfjsH94.cjs +2 -0
- package/dist/chunks/delegations-CrfjsH94.cjs.map +1 -0
- package/dist/chunks/{delegations-DBh5TT6G.js → delegations-CxnNvTCc.js} +3 -2
- package/dist/chunks/delegations-CxnNvTCc.js.map +1 -0
- package/dist/chunks/designer-CX9bhYJS.cjs +69 -0
- package/dist/chunks/designer-CX9bhYJS.cjs.map +1 -0
- package/dist/chunks/{designer-ubnZbP-A.js → designer-CZDlQ9Nf.js} +2341 -1584
- package/dist/chunks/designer-CZDlQ9Nf.js.map +1 -0
- package/dist/chunks/{detail-C6XKZjlF.js → detail-ByZV1XaI.js} +853 -840
- package/dist/chunks/detail-ByZV1XaI.js.map +1 -0
- package/dist/chunks/detail-ChseSF55.cjs +5 -0
- package/dist/chunks/detail-ChseSF55.cjs.map +1 -0
- package/dist/chunks/{approver-filled-form-B4zPg9kz.cjs → instance-error-message-DTARGbGo.cjs} +2 -2
- package/dist/chunks/instance-error-message-DTARGbGo.cjs.map +1 -0
- package/dist/chunks/{approver-filled-form-Bgazhbvd.js → instance-error-message-q6gy5evy.js} +44 -36
- package/dist/chunks/instance-error-message-q6gy5evy.js.map +1 -0
- package/dist/chunks/workflow-chat-prompt-B4wCFKPB.js +25 -0
- package/dist/chunks/workflow-chat-prompt-B4wCFKPB.js.map +1 -0
- package/dist/chunks/workflow-chat-prompt-B803qVdt.cjs +27 -0
- package/dist/chunks/workflow-chat-prompt-B803qVdt.cjs.map +1 -0
- package/dist/next/workflow-chat-route.cjs +8 -19
- package/dist/next/workflow-chat-route.cjs.map +1 -1
- package/dist/next/workflow-chat-route.d.cts +92 -4
- package/dist/next/workflow-chat-route.d.ts +92 -4
- package/dist/next/workflow-chat-route.js +127 -19
- package/dist/next/workflow-chat-route.js.map +1 -1
- package/dist/pages/admin/delegations/index.cjs +1 -1
- package/dist/pages/admin/delegations/index.js +1 -1
- package/dist/pages/delegations/index.cjs +1 -1
- package/dist/pages/delegations/index.js +1 -1
- package/dist/pages/instances/detail/index.cjs +1 -1
- package/dist/pages/instances/detail/index.js +1 -1
- package/dist/pages/templates/compose/index.cjs +1 -1
- package/dist/pages/templates/compose/index.js +1 -1
- package/dist/pages/templates/designer/index.cjs +1 -1
- package/dist/pages/templates/designer/index.js +1 -1
- package/dist/views/admin/delegations/index.cjs +1 -1
- package/dist/views/admin/delegations/index.js +1 -1
- package/dist/views/admin/index.cjs +1 -1
- package/dist/views/admin/index.js +1 -1
- package/dist/views/delegations/index.cjs +1 -1
- package/dist/views/delegations/index.js +1 -1
- package/dist/views/forms/builder/index.cjs +1 -1
- package/dist/views/forms/builder/index.js +1 -1
- package/dist/views/forms/renderer/FormRendererView.d.cts +25 -2
- package/dist/views/forms/renderer/FormRendererView.d.ts +25 -2
- package/dist/views/forms/renderer/file-upload-field.d.cts +84 -0
- package/dist/views/forms/renderer/file-upload-field.d.ts +84 -0
- package/dist/views/forms/renderer/form-data-source-field.d.cts +9 -1
- package/dist/views/forms/renderer/form-data-source-field.d.ts +9 -1
- package/dist/views/forms/renderer/form-value-readers.d.cts +7 -0
- package/dist/views/forms/renderer/form-value-readers.d.ts +7 -0
- package/dist/views/forms/renderer/index.cjs +1 -1
- package/dist/views/forms/renderer/index.d.cts +1 -0
- package/dist/views/forms/renderer/index.d.ts +1 -0
- package/dist/views/forms/renderer/index.js +1 -1
- package/dist/views/instances/detail/index.cjs +1 -1
- package/dist/views/instances/detail/index.js +1 -1
- package/dist/views/instances/detail/sections/InstanceFormSection.d.cts +20 -3
- package/dist/views/instances/detail/sections/InstanceFormSection.d.ts +20 -3
- package/dist/views/instances/detail/sections/shared.d.cts +1 -2
- package/dist/views/instances/detail/sections/shared.d.ts +1 -2
- package/dist/views/instances/instance-error-message.d.cts +5 -0
- package/dist/views/instances/instance-error-message.d.ts +5 -0
- package/dist/views/instances/new/index.cjs +1 -1
- package/dist/views/instances/new/index.cjs.map +1 -1
- package/dist/views/instances/new/index.js +79 -76
- package/dist/views/instances/new/index.js.map +1 -1
- package/dist/views/templates/compose/index.cjs +1 -1
- package/dist/views/templates/compose/index.js +1 -1
- package/dist/views/templates/designer/designer-version-labels.d.cts +7 -0
- package/dist/views/templates/designer/designer-version-labels.d.ts +7 -0
- package/dist/views/templates/designer/expression/DialectUpgradeModal.d.cts +25 -0
- package/dist/views/templates/designer/expression/DialectUpgradeModal.d.ts +25 -0
- package/dist/views/templates/designer/expression/ExpressionField.d.cts +79 -0
- package/dist/views/templates/designer/expression/ExpressionField.d.ts +79 -0
- package/dist/views/templates/designer/expression/use-workflow-expression-references.d.cts +22 -0
- package/dist/views/templates/designer/expression/use-workflow-expression-references.d.ts +22 -0
- package/dist/views/templates/designer/expression/workflow-expression-edits.d.cts +58 -0
- package/dist/views/templates/designer/expression/workflow-expression-edits.d.ts +58 -0
- package/dist/views/templates/designer/expression/workflow-expression-tools.d.cts +14 -0
- package/dist/views/templates/designer/expression/workflow-expression-tools.d.ts +14 -0
- package/dist/views/templates/designer/field-access-matrix/FieldAccessMatrixDrawer.d.cts +7 -1
- package/dist/views/templates/designer/field-access-matrix/FieldAccessMatrixDrawer.d.ts +7 -1
- package/dist/views/templates/designer/index.cjs +1 -1
- package/dist/views/templates/designer/index.js +1 -1
- package/dist/views/templates/designer/notify-webhook-designer.d.cts +8 -0
- package/dist/views/templates/designer/notify-webhook-designer.d.ts +8 -0
- package/dist/views/templates/designer/use-workflow-designer-controller.d.cts +8 -2
- package/dist/views/templates/designer/use-workflow-designer-controller.d.ts +8 -2
- package/dist/views/templates/designer/workflow-chat-prompt.d.cts +18 -0
- package/dist/views/templates/designer/workflow-chat-prompt.d.ts +18 -0
- package/package.json +3 -3
- package/dist/chunks/FormBuilderView-CHaAQL5v.cjs +0 -3
- package/dist/chunks/FormBuilderView-CHaAQL5v.cjs.map +0 -1
- package/dist/chunks/FormBuilderView-vQfVc08Z.js.map +0 -1
- package/dist/chunks/FormRendererView-CTLlG13b.js +0 -1106
- package/dist/chunks/FormRendererView-CTLlG13b.js.map +0 -1
- package/dist/chunks/FormRendererView-ChmM_4Yc.cjs +0 -4
- package/dist/chunks/FormRendererView-ChmM_4Yc.cjs.map +0 -1
- package/dist/chunks/approver-filled-form-B4zPg9kz.cjs.map +0 -1
- package/dist/chunks/approver-filled-form-Bgazhbvd.js.map +0 -1
- package/dist/chunks/delegations-BfhCDz5e.js.map +0 -1
- package/dist/chunks/delegations-BmFGcuhA.cjs +0 -2
- package/dist/chunks/delegations-BmFGcuhA.cjs.map +0 -1
- package/dist/chunks/delegations-CcS0SHbf.cjs +0 -2
- package/dist/chunks/delegations-CcS0SHbf.cjs.map +0 -1
- package/dist/chunks/delegations-DBh5TT6G.js.map +0 -1
- package/dist/chunks/designer-Df79YzUn.cjs +0 -65
- package/dist/chunks/designer-Df79YzUn.cjs.map +0 -1
- package/dist/chunks/designer-ubnZbP-A.js.map +0 -1
- package/dist/chunks/detail-BBC9kqXd.cjs +0 -5
- package/dist/chunks/detail-BBC9kqXd.cjs.map +0 -1
- package/dist/chunks/detail-C6XKZjlF.js.map +0 -1
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use client";require('../style.css');require('../detail.css');const e=require("./rolldown-runtime-BocRIvOZ.cjs");;/* empty css */const t=require("./bpm-form-field-Bc6k4ZEO.cjs"),n=require("./format-date-time-D-cx5M8z.cjs"),r=require("./auth-provider-4BeCw7cI.cjs"),i=require("./use-bpm-member-DpNAQtNC.cjs"),a=require("./FormRendererView-lYSaR8CQ.cjs"),o=require("./task-decision-CqZ4WQOC.cjs"),s=require("./format-member-label-t7ANTF62.cjs"),c=require("./instance-error-message-DTARGbGo.cjs");let l=require("react"),u=require("@mezzanine-ui/react"),d=require("react/jsx-runtime"),f=require("@rytass/bpm-core-client/workflow"),p=require("@mezzanine-ui/react/ContentHeader");p=e.t(p,1);let m=require("@mezzanine-ui/icons"),h=require("@rytass/bpm-core-shared"),g=require("@rytass/bpm-core-client/form"),ee=require("@rytass/bpm-core-client/organization"),_=require("@xyflow/react"),v=require("dagre");v=e.t(v,1);let y=require("react-pdf"),b=require("@rytass/bpm-core-shared/workflow-graph"),x=require("@mezzanine-ui/core/stepper");function te(e){let[t,n]=(0,l.useState)(new Map),r=e.join(`
|
|
2
|
+
`);return(0,l.useEffect)(()=>{let e=r?[...new Set(r.split(`
|
|
3
|
+
`))].filter(e=>!t.has(e)):[],i=!1;return e.length===0?()=>void 0:((0,ee.resolveOrgUnitOptions)(e).then(e=>e.map(a.n)).catch(()=>[]).then(t=>{i||n(n=>new Map([...n,...e.map(e=>[e,t.find(t=>t.id.toLowerCase()===e.toLowerCase())?.name??null])]))}),()=>{i=!0})},[r,t]),(0,l.useMemo)(()=>new Map((r?[...new Set(r.split(`
|
|
4
|
+
`))]:[]).flatMap(e=>{let n=t.get(e);return n===null?[]:[[e,n??`讀取中…`]]})),[r,t])}var S={root:`bpm_root_ehm7w`,toolbar:`bpm_toolbar_R-tis`,pageControls:`bpm_pageControls_jM-rC`,zoomControls:`bpm_zoomControls_7RAbJ`,counter:`bpm_counter_ILUsD`,viewport:`bpm_viewport_DQXms`,page:`bpm_page_Cv5Rg`,state:`bpm_state_bpgp3`},C=760,w=920,T=320,ne=32,E=.75,re=1.75,D=.25;function ie({filename:e,fileUrl:t,onDownload:n}){let r=(0,l.useRef)(null),[i,a]=(0,l.useState)(null),[o,s]=(0,l.useState)(1),[c,f]=(0,l.useState)(1),[p,h]=(0,l.useState)(C);(0,l.useEffect)(()=>{let e=r.current;if(!e||typeof ResizeObserver>`u`)return;let t=new ResizeObserver(e=>{let t=e[0]?.contentRect.width;t&&h(t)});return t.observe(e),()=>t.disconnect()},[]),(0,l.useEffect)(()=>{a(null),s(1),f(1)},[t]);let g=(0,l.useMemo)(()=>{let e=Math.max(T,p-ne);return Math.round(Math.min(w,e)*c)},[c,p]),ee=(0,l.useCallback)(e=>{a(e.numPages),s(1)},[]),_=o>1,v=i!==null&&o<i,b=c>E,x=c<re,te=i===null?`第 ${o} 頁`:`第 ${o} / ${i} 頁`,ie=`${Math.round(c*100)}%`;return(0,d.jsxs)(`section`,{"aria-label":`${e} PDF 預覽`,className:S.root,children:[(0,d.jsxs)(`div`,{className:S.toolbar,children:[(0,d.jsxs)(`div`,{className:S.pageControls,"aria-label":`頁面切換`,children:[(0,d.jsx)(u.Button,{"aria-label":`上一頁`,disabled:!_,icon:m.ChevronLeftIcon,onClick:()=>{s(e=>Math.max(1,e-1))},size:`minor`,variant:`base-secondary`}),(0,d.jsx)(u.Typography,{className:S.counter,component:`span`,variant:`body`,children:te}),(0,d.jsx)(u.Button,{"aria-label":`下一頁`,disabled:!v,icon:m.ChevronRightIcon,onClick:()=>{s(e=>i===null?e:Math.min(i,e+1))},size:`minor`,variant:`base-secondary`})]}),(0,d.jsxs)(`div`,{className:S.zoomControls,"aria-label":`縮放`,children:[(0,d.jsx)(u.Button,{"aria-label":`縮小`,disabled:!b,icon:m.ZoomOutIcon,onClick:()=>{f(e=>Math.max(E,e-D))},size:`minor`,variant:`base-secondary`}),(0,d.jsx)(u.Typography,{className:S.counter,component:`span`,variant:`body`,children:ie}),(0,d.jsx)(u.Button,{"aria-label":`放大`,disabled:!x,icon:m.ZoomInIcon,onClick:()=>{f(e=>Math.min(re,e+D))},size:`minor`,variant:`base-secondary`})]}),n?(0,d.jsx)(u.Button,{icon:m.DownloadIcon,iconType:`leading`,onClick:n,size:`minor`,variant:`base-primary`,children:`下載`}):null]}),(0,d.jsx)(`div`,{className:S.viewport,ref:r,children:(0,d.jsx)(y.Document,{error:(0,d.jsx)(O,{message:`PDF 無法載入。`}),file:t,loading:(0,d.jsx)(O,{message:`正在載入 PDF...`}),noData:(0,d.jsx)(O,{message:`沒有可預覽的 PDF。`}),onLoadSuccess:ee,suspense:!1,children:(0,d.jsx)(y.Page,{className:S.page,loading:(0,d.jsx)(O,{message:`正在載入頁面...`}),pageNumber:o,renderAnnotationLayer:!0,renderTextLayer:!0,width:g})})})]})}function O({message:e}){return(0,d.jsx)(`div`,{className:S.state,children:(0,d.jsx)(u.Typography,{color:`text-neutral`,variant:`body`,children:e})})}function ae({initiatorMemberId:e,submittedByMemberId:t}){return t&&t!==e?t:null}function oe(e,t){let n=ae(e);if(!n||!e.initiatorMemberId)return null;let r=e=>t.get(e)?.name??e;return`由 ${r(n)} 代 ${r(e.initiatorMemberId)} 送出`}function se(e){let t=A(e,`from`),n=A(e,`to`),r=A(e,`reason`);return!t||!n||!r?null:{from:t,reason:r,ruleId:A(e,`ruleId`),to:n}}function k(e){try{let t=JSON.parse(e);return Array.isArray(t)?t.map(e=>le(e)?se(e):null).filter(e=>e!==null):[]}catch{return[]}}function A(e,t){let n=e[t];return typeof n==`string`?n:null}function j(e,t){let n=e[t];return Array.isArray(n)?n.filter(e=>typeof e==`string`):[]}function ce(e,t){let n=e[t];return typeof n==`number`?n:null}function M(e){return typeof e==`string`&&e.trim().length>0}function le(e){return typeof e==`object`&&!!e}function ue(e){return e.status===`PENDING`||e.status===`IN_PROGRESS`}function N(e){return!Number.isFinite(e)||e<=0?`-`:e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(1)} MB`}function de(e){return e.length>16?`${e.slice(0,12)}...`:e}function fe(e){return e===`APPROVED`?`已同意`:e===`CANCELLED`?`已取消`:e===`DRAFT`?`草稿`:e===`EXPIRED`?`已逾期`:e===`REJECTED`?`已拒絕`:e===`RETURNED`?`已退回`:e===`RUNNING`?`進行中`:e}function pe(e){return e===`PENDING`?`待處理`:e===`IN_PROGRESS`?`處理中`:e===`COMPLETED`?`已完成`:e===`CANCELLED`?`已取消`:e===`TRANSFERRED`?`已轉派`:e}function me(e){return e===`APPROVED`?`同意`:e===`REJECTED`?`拒絕`:e===`RETURNED`?`退回`:e===`TRANSFERRED`?`轉派`:e}function he(e){return e===`startEvent`?`開始`:e===`endEvent`?`完成`:e===`userTask`?`簽核節點`:e===`serviceTask`?`知會節點`:e===`exclusiveGateway`?`條件分流`:`平行處理`}function ge(e,t){return t?.nodes.find(t=>t.id===e)?.data.label??e}function P(e,t){if(!e)return`-`;let n=t.get(e);return n?s.t(n.name,n.email,`fullwidth`):e}function _e(e,t=new Map){let n=k(e.delegationChainJson);if(!e.assigneeMemberId)return e.candidateMemberIds.length?`候選 ${e.candidateMemberIds.map(e=>P(e,t)).join(`、`)}`:`未指定`;let r=P(e.assigneeMemberId,t),i=P(e.originalAssigneeMemberId,t);return n.length===0||e.originalAssigneeMemberId===e.assigneeMemberId?r:`${r}(原:${i})`}function ve(e,t){return t?e.assigneeMemberId===t||(e.openCandidateMemberIds??e.candidateMemberIds).includes(t):!1}function ye(e,t){let n=e.filter(e=>ve(e,t)&&(e.status===`PENDING`||e.status===`IN_PROGRESS`));return n.find(e=>!e.isAdhoc)??n[0]??null}function F(e,t){if(t.type!==`userTask`||!t.data.returnBehavior.allowReturn)return[];if(t.data.returnBehavior.allowedTargets===`ANY`){let n=(0,b.readSelectableReturnTargetNodeIds)(e,t.id);return e.nodes.filter(e=>n.includes(e.id)).map(e=>({id:e.id,name:`${e.data.label}(${he(e.type)})`}))}let n=t.data.returnBehavior.allowedTargets===`INITIATOR`?e.nodes.find(e=>e.type===`startEvent`)?.id:e.edges.find(e=>e.target===t.id)?.source,r=e.nodes.find(e=>e.id===n);return r?[{id:r.id,name:`${r.data.label}(${he(r.type)})`}]:[]}function be(e){return{email:e.email,id:e.memberId,name:s.t(e.name,e.email,`dot`)}}function xe({memberIds:e,useWebhookTarget:t,webhookUrl:n}){if(t){let e=n.trim();return e?{target:{kind:`WEBHOOK`,webhookUrl:e},valid:!0}:{error:`請輸入 Webhook URL`,valid:!1}}return e.length>0?{target:{kind:`MEMBER`,memberIds:e},valid:!0}:{error:`請選擇對象成員`,valid:!1}}function Se(e){return!!e}function Ce(e){if(!le(e))return null;let t=e.email,n=e.id,r=e.name;return typeof n==`string`&&typeof r==`string`?{email:typeof t==`string`?t:null,id:n,name:r}:null}function we(e,t){let n=e.trim().toLocaleLowerCase();if(!n)return null;let r=t.filter(e=>[e.id,e.name,e.email??``].some(e=>e.toLocaleLowerCase().includes(n)));return r.length===1?r[0]??null:null}function I(e){return M(e)?{text:e,type:`text`}:null}function Te(e,t,n=`neutral`){return M(t)?{label:e,text:t,tone:n,type:`comment`}:null}function Ee(e,t,n,r){let i=t?n.get(t):null;return{email:i?.email??null,label:i?.name??r,memberId:t,prefix:e,type:`member`}}function L(e){return!!e}function De(e){let t=e.findIndex(e=>e.id.startsWith(`pending-task-`)||e.id.startsWith(`future-node-`));return t===-1?e.length:t}function Oe(e){return e.eventType===`INSTANCE_STARTED`||e.eventType===`INSTANCE_CANCELLED`||e.eventType===`INSTANCE_EXPIRED`||e.eventType===`INSTANCE_RESUBMITTED`||e.eventType===`TASK_DECIDED`||e.eventType===`SLA_TRIGGERED`||e.eventType===`TASK_CANDIDATE_ACTIVATED`||e.eventType===`TASK_REASSIGNED`||ke(e)||je(e.eventType,z(e))}function ke(e){return e.eventType===`TASK_CREATED`&&j(z(e),`sequentialCandidateMemberIds`).length>0}function Ae(e){if(e.eventType!==`TASK_CANDIDATE_ACTIVATED`&&e.eventType!==`TASK_CREATED`)return[];let t=z(e);return[...j(t,`sequentialCandidateMemberIds`),A(t,`candidateMemberId`),A(t,`previousMemberId`)].filter(M)}var R=new Set([`SERVICE_TASK_EXECUTED`,`SERVICE_TASK_FAILED`,`WEBHOOK_DELIVERY_RETRIED`]);function je(e,t){return R.has(e)&&A(t,`action`)===`NOTIFY_WEBHOOK`}function Me(e){return A(e,`endpointLabel`)??A(e,`endpointKey`)??`外部系統`}function Ne(e){return e===`APPROVED`?`已同意`:e===`REJECTED`?`已拒絕`:e===`RETURNED`?`已退回`:e===`TRANSFERRED`?`已轉派`:`簽核已決議`}function Pe(e,t){if(e===`INSTANCE_STARTED`)return`案件已發起`;if(e===`INSTANCE_CANCELLED`)return`案件已取消`;if(e===`INSTANCE_EXPIRED`)return`案件逾期,已由系統終止`;if(e===`INSTANCE_RESUBMITTED`)return`申請人重新送出`;if(e===`TOKEN_CREATED`)return`流程路徑已建立`;if(e===`ENGINE_PROCESS_REQUESTED`)return`流程引擎已處理`;if(e===`TOKEN_ADVANCED`)return`流程已前進`;if(e===`TASK_CREATED`)return`待簽任務已建立`;if(e===`TASK_CANDIDATE_ACTIVATED`)return`輪到下一位簽核`;if(e===`TASK_DECIDED`)return Ne(A(t,`action`));if(e===`SLA_TRIGGERED`)return`時限提醒已觸發`;if(e===`TASK_REASSIGNED`)return`管理者改派待辦`;if(je(e,t)){let n=Me(t);return e===`SERVICE_TASK_EXECUTED`?`已通知外部系統:${n}`:e===`SERVICE_TASK_FAILED`?`通知外部系統失敗:${n}`:`管理者重新傳送外部系統通知:${n}`}return e}function z(e){try{let t=JSON.parse(e.payloadJson);return le(t)?t:{}}catch{return{}}}function Fe(e,t){return e.eventType===`SLA_TRIGGERED`||e.eventType===`INSTANCE_EXPIRED`||e.eventType===`SERVICE_TASK_FAILED`&&je(e.eventType,t)||A(t,`action`)===`REJECTED`||A(t,`instanceState`)===`REJECTED`}function Ie(e){return n.t(e)}function Le(e,t,n,r){if(e.eventType===`INSTANCE_STARTED`)return oe({initiatorMemberId:e.actorMemberId,submittedByMemberId:A(t,`submittedByMemberId`)},r);if(e.eventType===`TASK_CANDIDATE_ACTIVATED`){let e=A(t,`candidateMemberId`),n=A(t,`previousMemberId`);if(!e)return null;let i=P(e,r);return n?`輪到:${i}(前一位:${P(n,r)})`:`輪到:${i}`}if(e.eventType===`TASK_CREATED`){let e=j(t,`sequentialCandidateMemberIds`);if(e.length)return`簽核順序:${e.map(e=>P(e,r)).join(` → `)}`;let n=A(t,`assigneeMemberId`),i=A(t,`originalAssigneeMemberId`);if(!n){let e=j(t,`candidateMemberIds`);return e.length?`候選簽核人:${e.map(e=>P(e,r)).join(`、`)}`:null}let a=P(n,r),o=P(i,r);return i&&i!==n?`待簽人:${a}(原簽核人:${o})`:`待簽人:${a}`}if(e.eventType===`TASK_DECIDED`){let e=A(t,`action`),n=A(t,`comment`),i=e?`決議:${me(e)}`:null,a=A(t,`transferToMemberId`);return e===`REJECTED`&&n?[i,`拒絕原因:${n}`].filter(M).join(` · `):e===`APPROVED`&&n?[i,`同意說明:${n}`].filter(M).join(` · `):e===`TRANSFERRED`?[i,`轉派給:${P(a,r)}`].filter(M).join(` · `):i}if(e.eventType===`TOKEN_ADVANCED`){let e=A(t,`action`);if(e)return`流程結果:${me(e)}`;let r=ce(t,`arrivedCount`),i=ce(t,`requiredCount`);if(r!==null&&i!==null)return`等待匯合:${r}/${i}`;let a=A(t,`fromNodeId`),o=A(t,`toNodeId`);if(a&&o)return`由 ${ge(a,n)} 前進至 ${ge(o,n)}`}if(e.eventType===`ENGINE_PROCESS_REQUESTED`){let e=A(t,`state`);return e?`案件狀態:${fe(e)}`:null}return null}function Re(e,t,n,r,i,a,o,s=null,c=null){if(e.eventType===`INSTANCE_RESUBMITTED`)return[Te(`簽核意見`,A(t,`comment`))].filter(L);if(e.eventType!==`TASK_DECIDED`)return[I(Le(e,t,n,o))].filter(L);let l=B(e,t,r,c),u=A(t,`action`)??l?.action??null,d=A(t,`comment`)??l?.comment??null,f=A(t,`transferToMemberId`)??l?.transferToMemberId??null,p=A(t,`signatureId`)??l?.signatureId??null,m=p?i.get(p):null;return[I(u?`決議:${me(u)}`:null),u===`REJECTED`?Te(`拒絕原因`,d??`-`,`danger`):null,u===`APPROVED`?Te(`同意說明`,d):null,u===`RETURNED`?Te(`退回說明`,d??`-`):null,u===`TRANSFERRED`?I(`轉派給:${P(f,o)}`):null,u===`TRANSFERRED`?Te(`轉派說明`,d??`-`):null,I(Be(t,s)),m?I(a?.valid?`簽章:已驗證(${de(m.signedPayloadHash)})`:`簽章:待檢查(${de(m.signedPayloadHash)})`):null].filter(L)}function B(e,t,n,r){let i=e.taskId;if(!i)return null;let a=A(t,`decisionId`),o=t=>a?t.id===a:t.decidedByMemberId===e.actorMemberId;if(!r){let e=n.get(i)??null;return e&&o(e)?e:null}return ze(r.filter(e=>e.taskId===i&&o(e)),new Date(e.createdAt).getTime())}function ze(e,t){let n=e=>Math.abs(o.r(e)-t),r=(e,t)=>{let r=n(e)-n(t);return r<0||!(r>0)&&o.t(e,t)<0};return e.reduce((e,t)=>!e||r(t,e)?t:e,null)}function Be(e,t){let n=e.changedFieldKeys;if(!Array.isArray(n))return null;let r=n.filter(e=>typeof e==`string`&&e!==``);if(r.length===0)return null;let i=r.map(e=>t?.fields.find(t=>t.fieldKey===e)?.label||e);return`補填 ${r.length} 個欄位:${i.join(`、`)}`}function V(e,t,n,r,i){if(e.type===`startEvent`||i.has(e.id))return!1;if(r===`REJECTED`)return!0;let a=Ge(e,t,n,r);return a.tone===`neutral`||a.tone===`waiting`}function H(e,t,n,r,i){if(r!==`RUNNING`&&r!==`REJECTED`)return[];let a=e.nodes.filter(e=>V(e,t,n,r,i)),o=Ve(e,a,t,n,i),s=new Map(e.nodes.map((e,t)=>[e.id,t]));return a.filter(e=>o.has(e.id)).sort((e,t)=>{let n=o.get(e.id)??0,r=o.get(t.id)??0;return n===r?e.position.x===t.position.x?e.position.y===t.position.y?(s.get(e.id)??0)-(s.get(t.id)??0):e.position.y-t.position.y:e.position.x-t.position.x:n-r})}function Ve(e,t,n,r,i){let a=new Set(t.map(e=>e.id)),o=e.edges.reduce((e,t)=>{let n=[...e.get(t.source)??[],t.target];return new Map(e).set(t.source,n)},new Map);return He(e,n,r,i).reduce((e,t)=>Ue(e,U(t,o,a)),new Map)}function He(e,t,n,r){let i=n.filter(e=>e.status===`ACTIVE`||e.status===`WAITING`).map(e=>e.currentNodeId),a=t.filter(ue).map(e=>e.nodeId),o=e.nodes.filter(e=>r.has(e.id)).map(e=>e.id),s=[...new Set([...i,...a,...o])],c=e.nodes.filter(e=>e.type===`startEvent`).map(e=>e.id);return s.length>0?s:c}function U(e,t,n){return W([{distance:0,nodeId:e}],t,n)}function W(e,t,n,r=new Set,i=new Map){let[a,...o]=e;if(!a)return i;if(r.has(a.nodeId))return W(o,t,n,r,i);let s=new Set(r).add(a.nodeId),c=n.has(a.nodeId)?new Map(i).set(a.nodeId,Math.min(i.get(a.nodeId)??a.distance,a.distance)):i;return W([...o,...(t.get(a.nodeId)??[]).map(e=>({distance:a.distance+1,nodeId:e}))],t,n,s,c)}function Ue(e,t){return[...t.entries()].reduce((e,[t,n])=>new Map(e).set(t,Math.min(e.get(t)??n,n)),e)}function We(e){return e.type===`userTask`?`未來簽核:${e.data.label}`:e.type===`serviceTask`?`未來知會:${e.data.label}`:e.type===`exclusiveGateway`?`未來分流:${e.data.label}`:e.type===`parallelGateway`?`未來匯合:${e.data.label}`:e.type===`endEvent`?`流程完成:${e.data.label}`:`未來節點:${e.data.label}`}function G(e,t,n,r,i,a,s,c,l,u=null,d=null){let f=d?o.n(d):null,p=e.filter(Oe).map(e=>{let t=z(e),n=e.nodeId?ge(e.nodeId,r):null;return{descriptionParts:[I(n?`節點:${n}`:`節點:全流程`),Ee(`操作者`,e.actorMemberId,a,`系統`),I(`時間:${Ie(e.createdAt)}`),...Re(e,t,r,s,c,l,a,u,f?f.get(e.taskId??``)??[]:null)].filter(L),error:Fe(e,t),id:e.id,title:Pe(e.eventType,t)}}),m=t.filter(ue).map(e=>({descriptionParts:[I(`節點:${ge(e.nodeId,r)}`),Ee(`處理者`,e.assigneeMemberId,a,`未指定`),I(`建立時間:${Ie(e.createdAt)}`)].filter(L),error:!1,id:`pending-task-${e.id}`,title:e.status===`IN_PROGRESS`?`簽核處理中`:`等待簽核處理`})),h=new Set([...e.filter(Oe).map(e=>e.nodeId),...t.map(e=>e.nodeId)].filter(M)),g=r?H(r,t,n,i,h).map(e=>({descriptionParts:[I(`${he(e.type)} · 尚未抵達`)].filter(L),error:!1,forcePending:!0,id:`future-node-${e.id}`,title:We(e)})):[];return[...p,...m,...g]}var K={APPROVED:{statusLabel:`已完成`,tone:`completed`},CANCELLED:{statusLabel:`已取消`,tone:`cancelled`},EXPIRED:{statusLabel:`已逾期終止`,tone:`cancelled`},REJECTED:{statusLabel:`已拒絕`,tone:`cancelled`}};function Ge(e,t,n,r){let i=t.filter(t=>t.nodeId===e.id),a=i.find(e=>e.status===`PENDING`||e.status===`IN_PROGRESS`),o=i.find(e=>e.status===`CANCELLED`),s=i.find(e=>e.status===`COMPLETED`),c=n.filter(t=>t.currentNodeId===e.id),l=c.find(e=>e.status===`ACTIVE`),u=c.find(e=>e.status===`WAITING`);if(a)return{secondaryLabel:`處理者 ${_e(a)}`,statusLabel:`待處理`,tone:`current`};if(o)return{secondaryLabel:`已取消 ${_e(o)}`,statusLabel:`已取消`,tone:`cancelled`};if(s)return{secondaryLabel:`已完成 ${_e(s)}`,statusLabel:`已完成`,tone:`completed`};if(l)return{secondaryLabel:`token ${l.id}`,statusLabel:`執行中`,tone:`current`};if(u)return{secondaryLabel:`token ${u.id}`,statusLabel:`等待前置`,tone:`waiting`};if(e.type===`startEvent`)return{secondaryLabel:`流程已發起`,statusLabel:`已發起`,tone:`completed`};let d=e.type===`endEvent`?K[r]:void 0;return d?{...d,secondaryLabel:r}:{secondaryLabel:he(e.type),statusLabel:`未抵達`,tone:`neutral`}}async function Ke({activityLogs:e,adhocDirectives:t=[],instance:n,tasks:r}){let i=[...new Set([n?.initiatorMemberId??null,n?.submittedByMemberId??null,...e.map(e=>e.actorMemberId),...e.flatMap(Ae),...r.map(e=>e.assigneeMemberId),...r.map(e=>e.originalAssigneeMemberId),...r.flatMap(e=>e.candidateMemberIds),...r.flatMap(e=>k(e.delegationChainJson).flatMap(e=>[e.from,e.to])),...t.flatMap(e=>[e.createdByMemberId,...qe(e.targetValueJson)])].filter(M))];try{return await(0,f.resolveMemberProfiles)(i)}catch{return[]}}function qe(e){try{return(JSON.parse(e).memberIds??[]).filter(e=>typeof e==`string`)}catch{return[]}}async function Je(e){return(await Promise.all(e.map(e=>(0,f.listTaskDecisions)(e.id)))).flat()}function Ye(e){let[t,n]=(0,l.useState)({instanceId:e,text:``}),r=(0,l.useCallback)(t=>n({instanceId:e,text:t}),[e]);return{clearAfterResubmit:(0,l.useCallback)(e=>n(t=>t.instanceId===e?{instanceId:e,text:``}:t),[]),comment:t.instanceId===e?t.text:``,setComment:r}}var Xe={display:`grid`,gap:16},Ze={display:`flex`,flexWrap:`wrap`,gap:8},Qe=2e3,$e={minWidth:`100%`,width:`100%`};function q(e){e&&(e.style.width=`100%`)}function et({attachments:e,canResubmitInstance:n,deciding:r,error:i,fieldAccess:o,fieldLabelMarkers:s,fill:f=null,instance:p,loading:h,onDataSourceStateChange:g,onDownloadAttachment:ee,onFileUploadStateChange:_,onResubmitFormChange:v,onReloadAfterConflict:y=null,onResubmitCommentChange:b=null,onResubmitInstance:x,onUploadAttachment:te,resubmitComment:S=``,resubmitFormData:C,resubmitFormErrors:w}){let T=p?.formDefinitionSnapshot.schema,ne=p?.workflowSnapshot,E=(0,l.useMemo)(()=>n&&T&&ne?c.r(T,ne):f?.schema??T,[n,f?.schema,T,ne]),re=!n&&f!==null;return(0,d.jsxs)(`div`,{style:Xe,children:[i?(0,d.jsx)(u.Typography,{color:`text-error`,variant:`body`,children:i}):null,h?(0,d.jsx)(u.Typography,{color:`text-neutral`,variant:`body`,children:`載入中...`}):null,y?(0,d.jsxs)(`div`,{style:Xe,children:[(0,d.jsx)(u.InlineMessage,{content:`表單在你填寫期間被更新了,你填的內容還在。請重新載入後確認再同意。`,severity:`error`}),(0,d.jsx)(`div`,{style:Ze,children:(0,d.jsx)(u.Button,{disabled:h,icon:m.RefreshCcwIcon,iconType:`leading`,onClick:y,variant:`base-secondary`,children:`重新載入`})})]}):null,re&&f.fieldCount>0?(0,d.jsx)(u.InlineMessage,{content:`本關需要你補填 ${f.fieldCount} 個欄位,按「同意」時會一起送出並納入簽章。`,severity:`info`}):null,E&&p?.formDefinitionSnapshot.uiSchema?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(a.t,{attachments:e,dataSourceContext:n?{instanceId:p.id,kind:`runtime`}:void 0,dataSourceInitialValues:p.formData,errors:re?f.errors:w,...!n&&o?{fieldAccess:o}:{},...!n&&s?{fieldLabelMarkers:s}:{},onChange:e=>{re?f.onChange(e):v(e)},onDataSourceStateChange:g,onDownloadAttachment:ee,onFileUploadStateChange:_,onUploadAttachment:n?te:void 0,optionSnapshots:p.formDataOptionSnapshot,readonly:!n,schema:E,uiSchema:p.formDefinitionSnapshot.uiSchema,value:n?C:re?f.value:p.formData}),n&&b?(0,d.jsx)(t.t,{label:`簽核意見`,name:`resubmitComment`,children:(0,d.jsx)(u.Textarea,{disabled:r,onChange:e=>b(e.target.value),placeholder:`選填,例如說明這次補正或修改了哪些內容`,maxLength:Qe,ref:q,resize:`vertical`,rows:4,style:$e,value:S})}):null,n?(0,d.jsx)(`div`,{style:Ze,children:(0,d.jsx)(u.Button,{disabled:r,icon:m.RefreshCcwIcon,iconType:`leading`,onClick:x,variant:`base-primary`,children:`重新送出`})}):null]}):(0,d.jsx)(u.Typography,{color:`text-neutral`,variant:`body`,children:`此案件沒有可顯示的表單快照。`})]})}var tt={display:`grid`,gap:16};function nt({attachments:e,onDownload:t,onPreview:r}){let i=(0,l.useMemo)(()=>e.map(e=>({attachment:e,createdAt:e.createdAt,filename:e.filename,id:e.id,key:e.id,mimeType:e.mimeType,sizeLabel:N(Number(e.sizeBytes))})),[e]),a=(0,l.useMemo)(()=>[{dataIndex:`filename`,key:`filename`,title:`檔名`,width:260},{dataIndex:`mimeType`,key:`mimeType`,title:`類型`,width:180},{dataIndex:`sizeLabel`,key:`sizeLabel`,title:`大小`,width:120},{key:`createdAt`,render:e=>(0,d.jsx)(u.Typography,{component:`span`,variant:`body`,children:n.t(e.createdAt)}),title:`上傳時間`,width:220}],[]),o=(0,l.useMemo)(()=>({render:e=>[...e.mimeType===`application/pdf`?[{icon:m.FileSearchIcon,iconType:`leading`,name:`預覽`,onClick:()=>{r(e.attachment)}}]:[],{icon:m.DownloadIcon,iconType:`leading`,name:`下載`,onClick:()=>{t(e.attachment)}}],variant:`base-secondary`,width:160}),[t,r]);return(0,d.jsxs)(`div`,{style:tt,children:[(0,d.jsx)(u.Typography,{component:`h2`,variant:`h3`,children:`附件`}),i.length>0?(0,d.jsx)(u.Table,{actions:o,columns:a,dataSource:i,fullWidth:!0}):(0,d.jsx)(u.Typography,{color:`text-neutral`,variant:`body`,children:`此案件沒有附件。`})]})}var rt={display:`grid`,gap:12,width:`100%`},J={minWidth:`100%`,width:`100%`},it={display:`grid`,gap:12,width:`100%`},at={marginTop:12},ot={marginTop:24};function st(e){e&&(e.style.width=`100%`)}var ct={COMPLETION_NOTIFY:`結案通知`,COUNTERSIGN:`臨時會簽`,PRE_APPROVAL:`臨時加簽`,STAGE_NOTIFY:`階段完成通知`},Y={COMPLETION_NOTIFY:`本張單到達結案狀態(核准 / 拒絕 / 取消)後,通知指定對象。`,COUNTERSIGN:`指定對象會併入下一層簽核,下一層需所有人都完成才會繼續。`,PRE_APPROVAL:`指定對象需先完成加簽,本階段才會往下一層繼續。`,STAGE_NOTIFY:`本階段完成後(不論通過與否)通知指定對象。`},X=[{id:`REJECT_INSTANCE`,name:`加簽拒絕時整單駁回`},{id:`RETURN_TO_ORIGIN`,name:`加簽拒絕時退回給我重新處理`}],Z=[{id:`MEMBER`,name:`指定成員`},{id:`WEBHOOK`,name:`Webhook`}],lt=(0,l.forwardRef)(function({adhocDirectives:e,currentMemberId:r,fill:i=null,instance:a,memberProfilesById:s,onChanged:p,onDecidingChange:m,onFillApproveError:h,tasks:g},ee){let[_,v]=(0,l.useState)(!1),[y,b]=(0,l.useState)(null);(0,l.useEffect)(()=>{m?.(_)},[_,m]);let[x,te]=(0,l.useState)(``),[S,C]=(0,l.useState)(!1),[w,T]=(0,l.useState)(``),[ne,E]=(0,l.useState)(null),[re,D]=(0,l.useState)(!1),[ie,O]=(0,l.useState)(``),[ae,oe]=(0,l.useState)(!1),[se,k]=(0,l.useState)(null),[A,j]=(0,l.useState)(``),[ce,M]=(0,l.useState)(null),[le,ue]=(0,l.useState)(!1),[N,de]=(0,l.useState)([]),[fe,me]=(0,l.useState)(!1),[he,ve]=(0,l.useState)(``),[I,Te]=(0,l.useState)([]),[Ee,L]=(0,l.useState)(!1),[De,Oe]=(0,l.useState)([]),[ke,Ae]=(0,l.useState)(!1),[R,je]=(0,l.useState)(`COUNTERSIGN`),[Me,Ne]=(0,l.useState)(`REJECT_INSTANCE`),[Pe,z]=(0,l.useState)(!1),[Fe,Ie]=(0,l.useState)(`MEMBER`),[Le,Re]=(0,l.useState)(``),B=w.trim(),ze=ie.trim(),Be=A.trim(),V=(0,l.useMemo)(()=>ye(g,r),[r,g]),H=(0,l.useMemo)(()=>V&&a?a.workflowSnapshot.nodes.find(e=>e.id===V.nodeId)??null:null,[V,a]),Ve=(0,l.useMemo)(()=>H&&a?F(a.workflowSnapshot,H):[],[H,a]),He=H?.type===`userTask`&&H.data.returnBehavior.allowReturn,U=H?.type===`userTask`&&H.data.allowReject!==!1,W=H?.type===`userTask`&&H.data.allowTransfer!==!1,Ue=H?.type===`userTask`&&H.data.returnBehavior.requireComment===!0,We=H?.type===`userTask`&&H.data.allowAddSigner,G=(0,l.useMemo)(()=>e.filter(e=>e.status===`PENDING`),[e]),K=Ve.find(e=>e.id===se)??Ve[0]??null,Ge=(0,l.useMemo)(()=>g.map(e=>({...e,assigneeLabel:_e(e,s),fillFieldCount:dt(e,a?.workflowSnapshot??null),key:e.id,nodeLabel:o.o({...e,nodeLabel:ge(e.nodeId,a?.workflowSnapshot??null)}),statusLabel:pe(e.status)})),[a,s,g]),Ke=(0,l.useMemo)(()=>[{dataIndex:`nodeLabel`,key:`nodeLabel`,title:`節點`,width:180},{key:`assigneeMemberId`,title:`處理者`,render:e=>(0,d.jsx)(u.Typography,{component:`span`,variant:`body`,children:e.assigneeLabel}),width:180},{dataIndex:`statusLabel`,key:`statusLabel`,title:`狀態`,width:120},{key:`fill`,render:e=>e.fillFieldCount>0?(0,d.jsx)(u.Badge,{size:`sub`,text:`需補填 ${e.fillFieldCount} 欄`,variant:`dot-warning`}):null,title:`補填`,width:140},{key:`createdAt`,render:e=>(0,d.jsx)(u.Typography,{component:`span`,variant:`body`,children:n.t(e.createdAt)}),title:`建立時間`,width:220}],[]),qe=(0,l.useMemo)(()=>G.map(e=>({...e,createdByLabel:P(e.createdByMemberId,s),key:e.id,targetLabel:ut(e,s),typeLabel:ct[e.type]})),[s,G]),Je=(0,l.useMemo)(()=>[{dataIndex:`typeLabel`,key:`typeLabel`,title:`類型`,width:180},{key:`targetLabel`,render:e=>(0,d.jsx)(u.Typography,{component:`span`,variant:`body`,children:e.targetLabel}),title:`對象`,width:220},{key:`createdByLabel`,render:e=>(0,d.jsx)(u.Typography,{component:`span`,variant:`body`,children:e.createdByLabel}),title:`設定者`,width:180},{key:`createdAt`,render:e=>(0,d.jsx)(u.Typography,{component:`span`,variant:`body`,children:n.t(e.createdAt)}),title:`建立時間`,width:220},{key:`actions`,render:e=>e.createdByMemberId===r?(0,d.jsx)(u.Button,{disabled:Pe,onClick:()=>void xt(e.id),size:`minor`,variant:`destructive-secondary`,children:`撤回`}):(0,d.jsx)(d.Fragment,{}),title:`操作`,width:100}],[Pe,r]);async function Ye({action:e,comment:t,returnToNodeId:n=null,transferToMemberId:a=null}){if(!r||!V||e===`REJECTED`&&!U||e===`TRANSFERRED`&&!W)return!1;v(!0),b(null);let o=e===`APPROVED`&&i!==null&&!V.isAdhoc?{expectedFormDataFingerprint:i.expectedFormDataFingerprint,formData:i.formData}:null;try{await(0,f.decideTask)({action:e,comment:t,decidedByMemberId:r,fill:o,returnToNodeId:n,taskId:V.id,transferToMemberId:a}),D(!1),oe(!1),me(!1),T(``),O(``),j(``),M(null),k(null),E(null)}catch(e){return v(!1),o!==null&&e instanceof Error&&h?.(e.message)===!0?(C(!1),!1):(b(c.t(e)),!1)}try{await p()}catch(e){b(c.t(e))}finally{v(!1)}return!0}function Xe(){r&&V&&(b(null),C(!0))}function Ze(){_||(C(!1),te(``))}async function Qe(){_||await Ye({action:`APPROVED`,comment:x.trim()||null})&&(C(!1),te(``))}function $e(){U&&(T(``),E(null),D(!0))}function q(){_||(D(!1),T(``),E(null))}function et(){O(``),k(Ve[0]?.id??null),oe(!0)}function tt(){_||(oe(!1),O(``),k(null))}function nt(){W&&(j(``),M(null),me(!0),ft(``))}function lt(){_||(me(!1),j(``),M(null))}async function ft(e){ue(!0);try{de((await(0,f.searchMembers)(e)).filter(e=>e.memberId!==r).map(be))}catch(e){b(c.t(e))}finally{ue(!1)}}async function pt(){U&&(B?await Ye({action:`REJECTED`,comment:B}):E(`請輸入拒絕原因`))}async function mt(){W&&(ce?await Ye({action:`TRANSFERRED`,comment:Be||null,transferToMemberId:ce.id}):b(`請選擇轉派對象`))}async function ht(){await Ye({action:`RETURNED`,comment:ze||null,returnToNodeId:K?.id??null})}function gt(){ve(``),Te([]),Ne(`REJECT_INSTANCE`),Ie(`MEMBER`),Re(``)}function _t(e){je(e),gt(),Ae(!0),yt(``)}function vt(){Pe||(Ae(!1),gt())}async function yt(e){L(!0);try{Oe((await(0,f.searchMembers)(e)).map(be))}catch(e){b(c.t(e))}finally{L(!1)}}async function bt(){if(!V)return;let e=(R===`STAGE_NOTIFY`||R===`COMPLETION_NOTIFY`)&&Fe===`WEBHOOK`,t=xe({memberIds:I.map(e=>e.id),useWebhookTarget:e,webhookUrl:Le});if(!t.valid){b(t.error);return}let{target:n}=t,r=he.trim()||null;z(!0),b(null);try{R===`COUNTERSIGN`?await(0,f.requestAdhocCountersign)({comment:r,target:n,taskId:V.id}):R===`PRE_APPROVAL`?await(0,f.requestAdhocPreApproval)({comment:r,onReject:Me,target:n,taskId:V.id}):R===`STAGE_NOTIFY`?await(0,f.configureAdhocStageNotification)({target:n,taskId:V.id}):await(0,f.configureAdhocCompletionNotification)({target:n,taskId:V.id}),Ae(!1),gt(),await p()}catch(e){b(c.t(e))}finally{z(!1)}}async function xt(e){z(!0),b(null);try{await(0,f.cancelAdhocDirective)(e),await p()}catch(e){b(c.t(e))}finally{z(!1)}}(0,l.useImperativeHandle)(ee,()=>({canAddSignerCurrentTask:We,canRejectCurrentTask:U,canReturnCurrentTask:He,canTransferCurrentTask:W,deciding:_,handleApprove:Xe,hasCurrentTask:V!==null,openAdhocModal:_t,openRejectModal:$e,openReturnModal:et,openTransferModal:nt}),[We,U,He,W,r,V,_]);let St=R===`STAGE_NOTIFY`||R===`COMPLETION_NOTIFY`,Ct=St&&Fe===`WEBHOOK`?!Le.trim():I.length===0,Q=X.find(e=>e.id===Me)??X[0],wt=Z.find(e=>e.id===Fe)??Z[0];return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(u.Typography,{component:`h2`,variant:`h3`,children:`任務`}),y?(0,d.jsx)(u.Typography,{color:`text-error`,variant:`body`,children:y}):null,(0,d.jsx)(`div`,{style:at,children:(0,d.jsx)(u.Table,{columns:Ke,dataSource:Ge,fullWidth:!0})}),G.length>0?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(u.Typography,{component:`h3`,style:ot,variant:`h3`,children:`待生效的臨時設定`}),(0,d.jsx)(`div`,{style:at,children:(0,d.jsx)(u.Table,{columns:Je,dataSource:qe,fullWidth:!0})})]}):null,(0,d.jsxs)(u.Modal,{cancelText:`取消`,confirmText:`送出同意`,loading:_,modalType:`standard`,onCancel:Ze,onClose:Ze,onConfirm:()=>void Qe(),open:S,showModalFooter:!0,showModalHeader:!0,size:`regular`,supportingText:`可以留下同意的說明,內容會記錄在簽核歷程;不填也可以直接送出。`,title:`簽核意見`,children:[y?(0,d.jsx)(u.Typography,{color:`text-error`,role:`alert`,variant:`body`,children:y}):null,i!==null&&i.summary.length>0?(0,d.jsxs)(`div`,{style:rt,children:[(0,d.jsx)(u.Typography,{variant:`body`,children:`將一併送出的補填欄位:`}),i.summary.map(e=>(0,d.jsx)(u.Description,{title:e.label,children:(0,d.jsx)(u.DescriptionContent,{children:e.text})},e.fieldKey))]}):null,(0,d.jsx)(`div`,{style:rt,children:(0,d.jsx)(t.t,{label:`簽核意見`,name:`approveComment`,children:(0,d.jsx)(u.Textarea,{autoFocus:!0,onChange:e=>te(e.target.value),placeholder:`選填,例如補充核准的條件或提醒事項`,ref:st,resize:`vertical`,rows:4,style:J,value:x})})})]}),(0,d.jsx)(u.Modal,{cancelText:`取消`,confirmButtonProps:{disabled:!B,variant:`destructive-primary`},confirmText:`送出拒絕`,loading:_,modalStatusType:`error`,modalType:`standard`,onCancel:q,onClose:q,onConfirm:()=>void pt(),open:re,showModalFooter:!0,showModalHeader:!0,size:`regular`,supportingText:`拒絕案件時必須留下原因,供發起人與後續追蹤查看。`,title:`拒絕原因`,children:(0,d.jsxs)(`div`,{style:rt,children:[(0,d.jsx)(t.t,{label:`拒絕原因`,name:`rejectReason`,required:!0,children:(0,d.jsx)(u.Textarea,{autoFocus:!0,onChange:e=>{T(e.target.value),E(null)},placeholder:`請說明拒絕原因`,ref:st,resize:`vertical`,rows:4,style:J,type:ne?`error`:`default`,value:w})}),ne?(0,d.jsx)(u.Typography,{color:`text-error`,variant:`body`,children:ne}):null]})}),(0,d.jsx)(u.Modal,{cancelText:`取消`,confirmButtonProps:{disabled:!ce},confirmText:`送出轉派`,loading:_,modalType:`standard`,onCancel:lt,onClose:lt,onConfirm:()=>void mt(),open:fe,showModalFooter:!0,showModalHeader:!0,size:`regular`,supportingText:`轉派後,原任務會保留轉派紀錄,新的待簽任務會指派給指定成員。`,title:`轉派簽核`,children:(0,d.jsxs)(`div`,{style:it,children:[(0,d.jsx)(t.t,{label:`轉派對象`,name:`transferToMemberId`,required:!0,children:(0,d.jsx)(u.AutoComplete,{asyncData:!0,disabledOptionsFilter:!0,emptyText:`沒有符合的成員`,inputProps:{autoCapitalize:`none`,autoCorrect:`off`,name:`transfer-member-search`,spellCheck:!1},loading:le,loadingText:`搜尋成員中...`,mode:`single`,onChange:e=>M(Ce(e)),onSearch:ft,onSearchTextChange:e=>M(we(e,N)),onVisibilityChange:e=>{e&&ft(``)},options:[...N],placeholder:`搜尋姓名或信箱`,searchDebounceTime:300,value:ce})}),(0,d.jsx)(t.t,{label:`轉派說明`,name:`transferComment`,children:(0,d.jsx)(u.Textarea,{onChange:e=>j(e.target.value),placeholder:`可補充轉派原因`,ref:st,resize:`vertical`,rows:4,style:J,value:A})})]})}),(0,d.jsx)(u.Modal,{cancelText:`取消`,confirmButtonProps:{disabled:!K||Ue&&!ze},confirmText:`送出退回`,loading:_,modalType:`standard`,onCancel:tt,onClose:tt,onConfirm:()=>void ht(),open:ae,showModalFooter:!0,showModalHeader:!0,size:`regular`,supportingText:`退回後,流程會回到指定節點並等待重新處理。`,title:`退回簽核`,children:(0,d.jsxs)(`div`,{style:it,children:[(0,d.jsx)(t.t,{label:`退回節點`,name:`returnTargetNodeId`,required:!0,children:(0,d.jsx)(u.Select,{clearable:!1,fullWidth:!0,onChange:e=>k(e?.id??null),options:[...Ve],placeholder:`選擇退回節點`,value:K})}),(0,d.jsx)(t.t,{hintText:Ue?`此關卡設定退回時必須填寫意見。`:void 0,label:`退回說明`,name:`returnComment`,required:Ue,children:(0,d.jsx)(u.Textarea,{onChange:e=>O(e.target.value),placeholder:Ue?`請說明退回原因`:`可補充需要修改的內容`,ref:st,resize:`vertical`,rows:4,style:J,value:ie})})]})}),(0,d.jsx)(u.Modal,{cancelText:`取消`,confirmButtonProps:{disabled:Ct},confirmText:`送出`,loading:Pe,modalType:`standard`,onCancel:vt,onClose:vt,onConfirm:()=>void bt(),open:ke,showModalFooter:!0,showModalHeader:!0,size:`regular`,supportingText:Y[R],title:ct[R],children:(0,d.jsxs)(`div`,{style:it,children:[St?(0,d.jsx)(t.t,{label:`通知時機`,name:`adhocNotifyMode`,required:!0,children:(0,d.jsx)(u.Select,{clearable:!1,fullWidth:!0,onChange:e=>je(e?.id===`COMPLETION_NOTIFY`?`COMPLETION_NOTIFY`:`STAGE_NOTIFY`),options:[{id:`STAGE_NOTIFY`,name:ct.STAGE_NOTIFY},{id:`COMPLETION_NOTIFY`,name:ct.COMPLETION_NOTIFY}],value:{id:R,name:ct[R]}})}):null,St?(0,d.jsx)(t.t,{label:`通知對象類型`,name:`adhocTargetKind`,required:!0,children:(0,d.jsx)(u.Select,{clearable:!1,fullWidth:!0,onChange:e=>Ie(e?.id===`WEBHOOK`?`WEBHOOK`:`MEMBER`),options:[...Z],value:wt})}):null,St&&Fe===`WEBHOOK`?(0,d.jsx)(t.t,{label:`Webhook URL`,name:`adhocWebhookUrl`,required:!0,children:(0,d.jsx)(u.Input,{fullWidth:!0,onChange:e=>Re(e.target.value),placeholder:`https://example.com/webhook`,value:Le})}):(0,d.jsx)(t.t,{label:St?`通知對象`:`簽核對象`,name:`adhocMemberId`,required:!0,children:(0,d.jsx)(u.AutoComplete,{asyncData:!0,disabledOptionsFilter:!0,emptyText:`沒有符合的成員`,inputProps:{autoCapitalize:`none`,autoCorrect:`off`,name:`adhoc-member-search`,spellCheck:!1},loading:Ee,loadingText:`搜尋成員中...`,menuMaxHeight:320,mode:`multiple`,onChange:e=>Te(e.map(Ce).filter(Se)),onSearch:yt,onVisibilityChange:e=>{e&&yt(``)},options:[...De],overflowStrategy:`wrap`,placeholder:`搜尋姓名或信箱,可加入多位`,searchDebounceTime:300,value:[...I]})}),R===`PRE_APPROVAL`?(0,d.jsx)(t.t,{label:`拒簽處理方式`,name:`adhocOnReject`,required:!0,children:(0,d.jsx)(u.Select,{clearable:!1,fullWidth:!0,onChange:e=>Ne(e?.id===`RETURN_TO_ORIGIN`?`RETURN_TO_ORIGIN`:`REJECT_INSTANCE`),options:[...X],value:Q})}):null,St?null:(0,d.jsx)(t.t,{label:`說明`,name:`adhocComment`,children:(0,d.jsx)(u.Textarea,{onChange:e=>ve(e.target.value),placeholder:`可補充原因`,ref:st,resize:`vertical`,rows:3,style:J,value:he})})]})})]})});function ut(e,t){try{let n=JSON.parse(e.targetValueJson);if(n.memberIds?.length)return n.memberIds.map(e=>P(e,t)).join(`、`);if(n.webhookUrl)return n.webhookUrl;if(n.positionId)return`職位 ${n.positionId}`;if(n.orgUnitId)return`部門 ${n.orgUnitId}`}catch{}return e.targetKind}function dt(e,t){if(e.isAdhoc||e.status!==`PENDING`&&e.status!==`IN_PROGRESS`)return 0;let n=t?.nodes.find(t=>t.id===e.nodeId);return n?.type===`userTask`?(0,h.readNodeFillableFieldKeys)(n).size:0}var ft={display:`grid`,gap:16};function pt({signatureVerification:e,signatures:t}){let r=(0,l.useMemo)(()=>t.map(e=>({algorithm:e.algorithm,hashLabel:de(e.signedPayloadHash),key:e.id,keyVersion:e.keyVersion,signedAtLabel:n.t(e.signedAt),signerMemberId:e.signerMemberId})),[t]),i=(0,l.useMemo)(()=>[{dataIndex:`signerMemberId`,key:`signerMemberId`,title:`簽章者`,width:160},{dataIndex:`algorithm`,key:`algorithm`,title:`演算法`,width:150},{dataIndex:`keyVersion`,key:`keyVersion`,title:`Key 版本`,width:100},{dataIndex:`hashLabel`,key:`hashLabel`,title:`Payload Hash`,width:180},{dataIndex:`signedAtLabel`,key:`signedAtLabel`,title:`簽章時間`,width:220}],[]);return(0,d.jsxs)(`div`,{style:ft,children:[(0,d.jsx)(u.Typography,{component:`h2`,variant:`h3`,children:`簽章`}),(0,d.jsx)(u.Typography,{color:e?.valid?`text-success`:`text-error`,variant:`body`,children:e?e.valid?`簽章鏈已驗證,共 ${e.checkedCount} 筆。`:`簽章鏈驗證失敗:${e.errors.join(`、`)}`:`尚無簽章紀錄。`}),r.length>0?(0,d.jsx)(u.Table,{columns:i,dataSource:r,fullWidth:!0}):null]})}var mt={display:`grid`,gap:16},ht={cursor:`help`,textDecoration:`underline dotted`,textUnderlineOffset:3},gt={borderLeftColor:`var(--mzn-color-border)`,borderLeftStyle:`solid`,borderLeftWidth:2,fontSize:`var(--mzn-typography-h3-font-size)`,lineHeight:`var(--mzn-typography-h3-line-height)`,marginTop:4,paddingLeft:8,whiteSpace:`pre-wrap`},_t={color:`var(--mzn-color-text-secondary)`},vt={...gt,borderLeftColor:`var(--mzn-color-text-error)`,color:`var(--mzn-color-text-error)`};function yt(...e){return e.filter(e=>M(e??null)).join(` `)}var bt=(0,l.forwardRef)(function({className:e,descriptionParts:t,error:n,forcePending:r=!1,index:i=0,orientation:a,status:o=`pending`,title:s,type:c=`number`,...f},p){let m=r?`pending`:o,h=t.filter(e=>e.type!==`comment`),g=t.filter(e=>e.type===`comment`);return(0,d.jsxs)(`div`,{...f,className:yt(x.stepClasses.host,c===`dot`?x.stepClasses.dot:null,n&&m!==`processing`?x.stepClasses.error:null,a===`horizontal`?x.stepClasses.horizontal:null,c===`number`?x.stepClasses.number:null,m===`pending`?x.stepClasses.pending:null,m===`processing`?x.stepClasses.processing:null,n&&m===`processing`?x.stepClasses.processingError:null,!n&&m===`succeeded`?x.stepClasses.succeeded:null,a===`vertical`?x.stepClasses.vertical:null,e),ref:p,children:[c===`dot`?(0,d.jsx)(`span`,{className:yt(x.stepClasses.statusIndicator,x.stepClasses.statusIndicatorDot)}):(0,d.jsx)(`span`,{className:x.stepClasses.statusIndicator,children:i+1}),(0,d.jsxs)(`div`,{className:x.stepClasses.textContainer,children:[(0,d.jsxs)(u.Typography,{className:x.stepClasses.title,variant:`label-primary-highlight`,children:[s,(0,d.jsx)(`span`,{className:x.stepClasses.titleConnectLine})]}),h.length>0?(0,d.jsx)(u.Typography,{className:x.stepClasses.description,component:`div`,variant:`body`,children:h.map((e,t)=>(0,d.jsxs)(l.Fragment,{children:[t>0?` · `:null,xt(e)]},`${e.type}-${t}`))}):null,g.map((e,t)=>(0,d.jsxs)(u.Typography,{style:e.tone===`danger`?vt:gt,variant:`body`,children:[(0,d.jsxs)(`span`,{style:e.tone===`danger`?void 0:_t,children:[e.label,`:`]}),e.text]},`comment-${t}`))]})]})});function xt(e){return e.type===`text`?e.text:e.email?.trim()?(0,d.jsxs)(d.Fragment,{children:[e.prefix,`:`,(0,d.jsx)(u.Tooltip,{title:e.email,children:({ref:t,...n})=>(0,d.jsx)(`span`,{...n,"data-testid":e.memberId?`member-tooltip-${e.memberId}`:void 0,ref:t,style:ht,children:e.label})})]}):`${e.prefix}:${e.label}`}function St({activityLogs:e,formSchema:t=null,instanceState:n,memberProfilesById:r,signatureVerification:i,signaturesById:a,taskDecisions:o=null,taskDecisionsByTaskId:s,tasks:c,workflowSnapshot:f,workflowTokens:p}){let m=(0,l.useMemo)(()=>G(e,c,p,f,n,r,s,a,i,t,o),[e,t,n,r,i,a,o,s,c,f,p]),h=De(m),g=m.map(e=>({...e,descriptionParts:e.descriptionParts.filter(L)}));return(0,d.jsxs)(`div`,{style:mt,children:[(0,d.jsx)(u.Typography,{component:`h2`,variant:`h3`,children:`歷程`}),g.length>0?(0,d.jsx)(u.Stepper,{currentStep:h,orientation:`vertical`,type:`dot`,children:g.map(e=>(0,d.jsx)(bt,{descriptionParts:e.descriptionParts,error:e.error,forcePending:e.forcePending,title:e.title},e.id))}):(0,d.jsx)(u.Typography,{color:`text-neutral`,variant:`body`,children:`尚無歷程紀錄。`})]})}var Ct={display:`grid`,gap:16},Q={display:`grid`,gap:2},wt={overflowWrap:`anywhere`,whiteSpace:`pre-wrap`};function Tt({deliveries:e,onRetry:t,readNodeLabel:n}){let[r,i]=(0,l.useState)(null),[a,o]=(0,l.useState)(!1),[s,c]=(0,l.useState)(null),f=(0,l.useMemo)(()=>e.map(e=>({delivery:e,key:e.id})),[e]),p=(0,l.useMemo)(()=>[{key:`endpoint`,render:({delivery:e})=>(0,d.jsxs)(`div`,{style:Q,children:[(0,d.jsx)(u.Typography,{component:`span`,variant:`body`,children:e.endpointLabel??e.endpointKey}),(0,d.jsxs)(u.Typography,{color:`text-neutral`,component:`span`,variant:`caption`,children:[e.endpointKey,`@`,e.endpointVersion,` ·`,` `,n(e.nodeId)]})]}),title:`外部系統`,width:240},{key:`status`,render:({delivery:e})=>(0,d.jsx)(Et,{status:e.status}),title:`狀態`,width:120},{key:`attemptCount`,render:({delivery:e})=>(0,d.jsx)(u.Typography,{component:`span`,variant:`body`,children:e.attemptCount}),title:`嘗試次數`,width:100},{key:`lastError`,render:({delivery:e})=>e.lastErrorCode&&e.status!==`SENT`?(0,d.jsxs)(`div`,{style:Q,children:[(0,d.jsx)(u.Typography,{color:`text-error`,component:`span`,variant:`body`,children:e.lastErrorCode}),e.lastErrorDetail?(0,d.jsx)(u.Typography,{color:`text-neutral`,component:`span`,style:wt,variant:`caption`,children:e.lastErrorDetail}):null]}):(0,d.jsx)(u.Typography,{color:`text-neutral`,component:`span`,variant:`body`,children:`—`}),title:`最後錯誤`,width:280},{key:`time`,render:({delivery:e})=>(0,d.jsx)(u.Typography,{component:`span`,variant:`body`,children:Dt(e)}),title:`時間`,width:220}],[n]),h=(0,l.useMemo)(()=>({render:({delivery:e})=>e.status===`FAILED`&&e.attemptCount>0?[{disabled:()=>a,icon:m.ResetIcon,iconType:`leading`,name:`重新傳送`,onClick:()=>{c(null),i(e)}}]:[],variant:`base-secondary`,width:140}),[a]);async function g(){if(r){o(!0),c(null);try{await t(r),i(null)}catch(e){i(null),c(e instanceof Error&&e.message?e.message:`重新傳送失敗,請稍後再試。`)}finally{o(!1)}}}return(0,d.jsxs)(`div`,{style:Ct,children:[(0,d.jsx)(u.Typography,{component:`h2`,variant:`h3`,children:`外部系統通知`}),s?(0,d.jsx)(u.Typography,{color:`text-error`,variant:`body`,children:s}):null,f.length>0?(0,d.jsx)(u.Table,{actions:h,columns:p,dataSource:f,fullWidth:!0}):(0,d.jsx)(u.Typography,{color:`text-neutral`,variant:`body`,children:`此案件沒有外部系統通知。`}),(0,d.jsx)(u.Modal,{cancelText:`取消`,confirmText:`重新傳送`,loading:a,modalStatusType:`info`,modalType:`standard`,onCancel:()=>i(null),onClose:()=>i(null),onConfirm:()=>void g(),open:!!r,showModalFooter:!0,showModalHeader:!0,supportingText:`會以相同的投遞編號重新送出,接收端可據此避免重複處理。`,title:`重新傳送通知`,children:(0,d.jsxs)(u.Typography,{variant:`body`,children:[`確定要重新通知「`,r?.endpointLabel??r?.endpointKey??``,`」嗎?`]})})]})}function Et({status:e}){return e===`SENT`?(0,d.jsx)(u.Badge,{size:`sub`,text:`已送達`,variant:`dot-success`}):e===`FAILED`?(0,d.jsx)(u.Badge,{size:`sub`,text:`失敗`,variant:`dot-error`}):(0,d.jsx)(u.Badge,{size:`sub`,text:e===`PENDING`?`等待傳送`:`傳送中`,variant:`dot-info`})}function Dt(e){return e.sentAt?`送達:${n.t(e.sentAt)}`:e.status===`PENDING`&&e.nextRetryAt?`下次重試:${n.t(e.nextRetryAt)}`:e.lastAttemptAt?`最後嘗試:${n.t(e.lastAttemptAt)}`:`建立:${n.t(e.createdAt)}`}function Ot(e,t){let n=new Map(t.map(e=>[e.id,e]));return new Set(e.filter(e=>e.eventType===`TASK_CREATED`).map(e=>e.taskId===null?void 0:n.get(e.taskId)).filter(e=>e!==void 0&&!e.isAdhoc).map(e=>e.nodeId))}function kt({activityLogs:e,actingTask:t,instance:n,tasks:r}){let i=n.workflowSnapshot;return(0,h.resolveFieldAccess)({definition:i,fieldKeys:(n.formDefinitionSnapshot.schema?.fields??[]).map(e=>e.fieldKey),isAdhocTask:t?.isAdhoc??!1,nodeId:t?.nodeId??null,revealedFieldKeys:(0,h.readRevealedFieldKeys)(i,Ot(e,r))})}function At(e){return`還有 ${new Set(Object.keys(e).map(h.readTopLevelFieldKey)).size} 個補填欄位需要完成`}var jt=3e3,Mt=40,Nt=184,Pt=96,Ft={display:`grid`,gap:16},It={background:`#f8fafc`,border:`1px solid #e2e8f0`,borderRadius:8,height:`min(64vh, 620px)`,minHeight:440,overflow:`hidden`,width:`min(80vw, 1040px)`},Lt={background:`#ffffff`,border:`1px solid #cbd5e1`,borderRadius:8,boxShadow:`0 8px 18px rgba(15, 23, 42, 0.08)`,display:`grid`,gap:6,minHeight:82,padding:12,width:184},Rt={borderRadius:999,fontSize:12,fontWeight:600,justifySelf:`start`,lineHeight:`18px`,padding:`0 8px`},zt={color:`#64748b`,fontSize:12,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},Bt={opacity:0},Vt={display:`flex`,flexWrap:`wrap`,gap:8},Ht={alignItems:`center`,background:`#ffffff`,border:`1px solid #cbd5e1`,borderRadius:8,color:`#334155`,display:`inline-flex`,fontSize:12,fontWeight:600,gap:6,lineHeight:`20px`,padding:`4px 8px`},Ut={display:`grid`,gap:16},Wt={workflowRuntime:$t};function Gt({instanceId:e,showAttachments:s=!0,showForm:ee=!0,showHistory:v=!0,showSignatures:y=!0,showTasks:b=!0,showWebhookDeliveries:x=!0}){let{member:S}=r.n(),C=S?.memberId??null,w=x&&i.t(S),[T,ne]=(0,l.useState)([]),[E,re]=(0,l.useState)(null),[D,O]=(0,l.useState)([]),[ae,se]=(0,l.useState)([]),[k,A]=(0,l.useState)([]),[j,ce]=(0,l.useState)([]),[le,ue]=(0,l.useState)(null),[N,de]=(0,l.useState)([]),[pe,me]=(0,l.useState)([]),[he,_e]=(0,l.useState)([]),[ve,F]=(0,l.useState)(null),[be,xe]=(0,l.useState)(!0),[Se,Ce]=(0,l.useState)(!1),[we,I]=(0,l.useState)(!1),[Te,Ee]=(0,l.useState)(!1),[L,De]=(0,l.useState)(!1),[Oe,ke]=(0,l.useState)(``),[Ae,R]=(0,l.useState)(!1),[je,Me]=(0,l.useState)({}),[Ne,Pe]=(0,l.useState)({}),{clearAfterResubmit:z,comment:Fe,setComment:Ie}=Ye(e),[Le,Re]=(0,l.useState)({}),[B,ze]=(0,l.useState)(null),[Be,V]=(0,l.useState)(null),[H,Ve]=(0,l.useState)([]),He=Oe.trim(),U=(0,l.useRef)(null),W=(0,l.useRef)(0),Ue=j.some(e=>e.status===`PENDING`||e.status===`DELIVERY_IN_PROGRESS`);(0,l.useEffect)(()=>{Ot()},[C,e]),(0,l.useEffect)(()=>{if(!w||!Ue||W.current>=Mt)return;let e=setTimeout(()=>{W.current+=1,Lt()},jt);return()=>clearTimeout(e)},[w,Ue,j]),(0,l.useEffect)(()=>{Pe(E?.formData??{}),Re({})},[E]);let We=(0,l.useCallback)((e,t)=>{Re(n=>{let r=n[e];return r?.hasValue===t.hasValue&&r.selectionExpired===(t.selectionExpired===!0)&&r.status===t.status?n:{...n,[e]:{hasValue:t.hasValue,selectionExpired:t.selectionExpired===!0,status:t.status}}})},[]),G=(0,l.useMemo)(()=>ye(N,C),[C,N]),K=(0,l.useMemo)(()=>G&&E?E.workflowSnapshot.nodes.find(e=>e.id===G.nodeId)??null:null,[G,E]),Ge=K?.type===`userTask`&&K.data.returnBehavior.allowReturn,qe=K?.type===`userTask`&&K.data.allowReject!==!1,Xe=K?.type===`userTask`&&K.data.allowTransfer!==!1,Ze=K?.type===`userTask`&&K.data.allowAddSigner,Qe=!(!E||E.initiatorMemberId!==C||E.state!==`RUNNING`&&E.state!==`RETURNED`),$e=!!(E&&E.initiatorMemberId===C&&E.state===`RETURNED`),q=(0,l.useMemo)(()=>G&&!G.isAdhoc&&K?.type===`userTask`&&(0,h.readNodeFillableFieldKeys)(K).size>0?K:null,[G,K]),tt=q?G?.id??null:null,rt=a.o(),[J,it]=(0,l.useState)({}),[at,ot]=(0,l.useState)({}),[st,ct]=(0,l.useState)(!1);(0,l.useEffect)(()=>{it({}),ot({}),ct(!1)},[tt]);let Y=E?.formDefinitionSnapshot.schema??null,X=(0,l.useMemo)(()=>q&&Y?c.o(Y,q):null,[q,Y]),Z=(0,l.useMemo)(()=>X&&E?(0,g.buildFormRendererValues)(X.fields,{...E.formData,...J}):null,[J,X,E]),ut=(0,l.useMemo)(()=>q&&X&&Z&&E?c.a({draft:J,node:q,schema:X,stored:E.formData,values:Z}):{},[J,q,X,Z,E]),dt=(0,l.useMemo)(()=>E?kt({activityLogs:T,actingTask:G,instance:E,tasks:N}):void 0,[T,G,E,N]),ft=(0,l.useMemo)(()=>E?c.s(E.workflowSnapshot,q):void 0,[q,E]),mt=(0,l.useMemo)(()=>new Map(he.map(e=>[e.memberId,e])),[he]),ht=te((0,l.useMemo)(()=>Y?c.c(Y,ut):[],[ut,Y])),gt=(0,l.useMemo)(()=>q&&Z&&Y&&E?.formDataFingerprint?{expectedFormDataFingerprint:E.formDataFingerprint,formData:c.l(ut,q),summary:c.d(Y,q,ut,new Map([...mt.keys()].map(e=>[e,P(e,mt)])),ht)}:null,[ut,q,ht,Z,E,mt,Y]);function _t(e){if(!q)return;let t=(0,h.readNodeFillableFieldKeys)(q),n=Object.entries(e).filter(([e,n])=>t.has(e)&&JSON.stringify(n)!==JSON.stringify(Z?.[e]));it(e=>({...e,...Object.fromEntries(n)})),ot({})}async function vt(){if(q&&!E?.formDataFingerprint)u.Message.error(`無法確認表單版本,請重新整理頁面後再同意。`);else{if(q&&Z&&Y&&E?.formDefinitionSnapshot.uiSchema){I(!0);let e=await(0,g.validateFormRendererValuesInWorker)({schema:c.f(Y,q),uiSchema:E.formDefinitionSnapshot.uiSchema,values:Z}).catch(e=>(u.Message.error(c.t(e)),null)).finally(()=>I(!1));if(!e)return;if(!e.valid){ot(e.errors),e.firstInvalidFieldKey&&(0,g.focusFormRendererField)(e.firstInvalidFieldKey),u.Message.warning(At(e.errors));return}}U.current?.handleApprove()}}function yt(e){if(!q||!Y)return!1;if(c.n(e))return ct(!0),!0;let t=c.u(e,Y,q);return t?(ot(t),(0,g.focusFormRendererField)(Object.keys(t)[0]??``),u.Message.warning(At(t)),!0):!1}async function bt(){await Ot(),ct(!1)}let xt=(0,l.useMemo)(()=>o.a(D),[D]),Ct=(0,l.useMemo)(()=>new Map(k.map(e=>[e.id,e])),[k]),Q=(0,l.useMemo)(()=>E?Yt(E.workflowSnapshot):null,[E]),wt=(0,l.useMemo)(()=>E&&Q?Jt(Q,N,pe,E.state):[],[E,Q,N,pe]),Et=(0,l.useMemo)(()=>Q?Xt(Q):[],[Q]),Dt=(0,l.useMemo)(()=>E?qt(E.workflowSnapshot):[],[E]);async function Ot(){xe(!0),F(null);try{let t=await(0,f.readApprovalInstance)(e);ne(t.activityLogs),re(t.instance),de(t.tasks),me(t.workflowTokens);let n=await(0,f.listAdhocDirectives)(t.instance.id),[r,i,a,o,s]=await Promise.all([Je(t.tasks),Ke({...t,adhocDirectives:n}),(0,f.listAttachments)(t.instance.id),(0,f.readInstanceSignatures)(t.instance.id),Nt(t.instance.id)]);O(r),_e(i),se(a),A(o.signatures),ue(o.verification),Ve(n),ce(s)}catch(e){F(c.t(e))}finally{xe(!1)}}async function Nt(e){return w?(0,f.listWorkflowWebhookDeliveries)(e).catch(()=>[]):[]}async function Pt(e){await(0,f.retryWorkflowWebhookDelivery)(e.id),W.current=0,await Ot()}async function Lt(){let t=await Nt(e);t.some(e=>e.status===`PENDING`||e.status===`DELIVERY_IN_PROGRESS`)?ce(t):await Ot()}async function Rt(e,t){if(!C)throw Error(`尚未登入,無法上傳附件`);return{id:(await(0,f.uploadAttachment)({file:t,formFieldPath:`form.${e.fieldKey}`})).id}}async function zt(e){if(C)try{let t=await(0,f.readAttachmentDownloadUrl)({id:e});window.open(t,`_blank`,`noopener,noreferrer`)}catch(e){u.Message.error(c.t(e))}}async function Bt(e){if(!C)return;let t=await(0,f.readAttachmentPreviewUrl)({id:e.id});ze(e),V(t)}async function Gt(){if(C&&E&&Qe){Ce(!0),F(null),Me({});try{await(0,f.cancelApprovalInstance)({cancelledByMemberId:C,comment:He||null,instanceId:E.id}),ke(``),R(!1),await Ot()}catch(e){F(c.t(e))}finally{Ce(!1)}}}async function Kt(){if(!C||!E||!$e)return;Ce(!0),F(null),Me({});let e=a.l(Object.values(Le));if(e){F(e),Ce(!1);return}if(rt.blockMessage){F(rt.blockMessage),Ce(!1);return}let t=E.formDefinitionSnapshot.schema?c.r(E.formDefinitionSnapshot.schema,E.workflowSnapshot):null,n=c.i(t?(0,g.buildFormRendererValues)(t.fields,Ne):Ne,E.workflowSnapshot);try{if(t&&E.formDefinitionSnapshot.uiSchema){let e=await(0,g.validateFormRendererValuesInWorker)({schema:t,uiSchema:E.formDefinitionSnapshot.uiSchema,values:n});if(!e.valid){Me(e.errors),F(`請先修正表單中標示的欄位。`),e.firstInvalidFieldKey&&(0,g.focusFormRendererField)(e.firstInvalidFieldKey);return}}await(0,f.resubmitApprovalInstance)({comment:Fe,formData:n,initiatorMemberId:C,instanceId:E.id,title:E.title}),z(E.id),await Ot()}catch(e){F(c.t(e))}finally{Ce(!1)}}let $=Se||Te||we;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(u.PageHeader,{children:(0,d.jsxs)(p.default,{description:E?[fe(E.state),n.t(E.startedAt),oe(E,mt)].filter(M).join(` · `):`載入案件內容。`,title:E?.title??`簽核案件`,children:[E?(0,d.jsx)(u.Button,{"aria-label":`查看流程圖`,icon:m.ShareIcon,iconType:`icon-only`,onClick:()=>De(!0),title:`查看流程圖`,variant:`base-secondary`,children:`流程圖`}):null,Qe?(0,d.jsx)(u.Button,{disabled:$,icon:m.DangerousOutlineIcon,iconType:`leading`,onClick:()=>R(!0),variant:`destructive-secondary`,children:`取消案件`}):null,G?(0,d.jsxs)(d.Fragment,{children:[Ze?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(u.Button,{disabled:$,icon:m.PlusIcon,iconType:`leading`,onClick:()=>U.current?.openAdhocModal(`COUNTERSIGN`),variant:`base-secondary`,children:`會簽`},`adhoc-countersign`),(0,d.jsx)(u.Button,{disabled:$,icon:m.PlusIcon,iconType:`leading`,onClick:()=>U.current?.openAdhocModal(`PRE_APPROVAL`),variant:`base-secondary`,children:`加簽`},`adhoc-pre-approval`)]}):null,(0,d.jsx)(u.Button,{disabled:$,icon:m.NotificationUnreadIcon,iconType:`leading`,onClick:()=>U.current?.openAdhocModal(`STAGE_NOTIFY`),variant:`base-secondary`,children:`通知設定`},`adhoc-notify`),Ge?(0,d.jsx)(u.Button,{disabled:$,icon:m.RefreshCcwIcon,iconType:`leading`,onClick:()=>U.current?.openReturnModal(),variant:`base-secondary`,children:`退回`},`task-return`):null,Xe?(0,d.jsx)(u.Button,{disabled:$,icon:m.UserIcon,iconType:`leading`,onClick:()=>U.current?.openTransferModal(),variant:`base-secondary`,children:`轉派`},`task-transfer`):null,qe?(0,d.jsx)(u.Button,{disabled:$,icon:m.DangerousOutlineIcon,iconType:`leading`,onClick:()=>U.current?.openRejectModal(),variant:`destructive-secondary`,children:`拒絕`},`task-reject`):null,(0,d.jsx)(u.Button,{disabled:$,icon:m.CheckedIcon,iconType:`leading`,onClick:()=>{vt()},variant:`base-primary`,children:`同意`},`task-approve`)]}):null]})}),(0,d.jsxs)(u.SectionGroup,{children:[ee?(0,d.jsx)(u.Section,{children:(0,d.jsx)(et,{attachments:ae,canResubmitInstance:$e,deciding:Se,error:ve,fieldAccess:dt,fieldLabelMarkers:ft,fill:X&&Z&&q?{errors:at,fieldCount:(0,h.readNodeFillableFieldKeys)(q).size,onChange:_t,schema:X,value:Z}:null,instance:E,loading:be,onDataSourceStateChange:We,onDownloadAttachment:e=>{zt(e)},onFileUploadStateChange:rt.onFileUploadStateChange,onReloadAfterConflict:st?()=>void bt():null,onResubmitFormChange:e=>{Pe(e),Me({})},onResubmitCommentChange:Ie,onResubmitInstance:()=>void Kt(),onUploadAttachment:Rt,resubmitComment:Fe,resubmitFormData:Ne,resubmitFormErrors:je})}):null,s?(0,d.jsx)(u.Section,{children:(0,d.jsx)(nt,{attachments:ae,onDownload:e=>{zt(e.id)},onPreview:e=>{Bt(e)}})}):null,b?(0,d.jsx)(u.Section,{children:(0,d.jsx)(lt,{adhocDirectives:H,currentMemberId:C,fill:gt,instance:E,memberProfilesById:mt,onChanged:Ot,onDecidingChange:Ee,onFillApproveError:yt,ref:U,tasks:N})}):null,y?(0,d.jsx)(u.Section,{children:(0,d.jsx)(pt,{signatureVerification:le,signatures:k})}):null,w&&j.length>0?(0,d.jsx)(u.Section,{children:(0,d.jsx)(Tt,{deliveries:j,onRetry:Pt,readNodeLabel:e=>ge(e,E?.workflowSnapshot??null)})}):null,v?(0,d.jsx)(u.Section,{children:(0,d.jsx)(St,{activityLogs:T,formSchema:Y,instanceState:E?.state??`RUNNING`,memberProfilesById:mt,signatureVerification:le,signaturesById:Ct,taskDecisions:D,taskDecisionsByTaskId:xt,tasks:N,workflowSnapshot:E?.workflowSnapshot??null,workflowTokens:pe})}):null]}),E?(0,d.jsx)(u.Modal,{modalType:`standard`,onClose:()=>De(!1),open:L,showModalHeader:!0,size:`wide`,supportingText:`${fe(E.state)} · ${n.t(E.startedAt)}`,title:`流程圖`,children:(0,d.jsxs)(`div`,{style:Ft,children:[(0,d.jsx)(`div`,{style:It,children:(0,d.jsxs)(_.ReactFlow,{edges:Et,fitView:!0,fitViewOptions:{padding:.18},maxZoom:1.2,minZoom:.2,nodes:wt,nodesDraggable:!1,nodesFocusable:!1,nodeTypes:Wt,panOnDrag:!0,proOptions:{hideAttribution:!0},children:[(0,d.jsx)(_.Background,{}),(0,d.jsx)(_.Controls,{showInteractive:!1})]})}),Dt.length>0?(0,d.jsx)(`div`,{style:Vt,children:Dt.map(e=>(0,d.jsx)(`span`,{style:Ht,children:e},e))}):null]})}):null,(0,d.jsx)(u.Modal,{modalType:`standard`,onClose:()=>{ze(null),V(null)},open:!!(B&&Be),showModalHeader:!0,size:`wide`,supportingText:B?.filename??void 0,title:`PDF 預覽`,children:Be?(0,d.jsx)(ie,{filename:B?.filename??`PDF 預覽`,fileUrl:Be,onDownload:B?()=>void zt(B.id):void 0}):null}),(0,d.jsx)(u.Modal,{cancelText:`保留案件`,confirmButtonProps:{variant:`destructive-primary`},confirmText:`確認取消`,loading:Se,modalStatusType:`error`,modalType:`standard`,onCancel:()=>R(!1),onClose:()=>R(!1),onConfirm:()=>void Gt(),open:Ae,showModalFooter:!0,showModalHeader:!0,supportingText:`取消後會關閉目前待簽任務與候選簽核人。`,title:`取消案件`,children:(0,d.jsxs)(`div`,{style:Ut,children:[(0,d.jsxs)(u.Typography,{variant:`body`,children:[`確定要取消「`,E?.title??``,`」嗎?`]}),(0,d.jsx)(t.t,{label:`取消原因`,name:`cancelComment`,children:(0,d.jsx)(u.Textarea,{onChange:e=>ke(e.target.value),placeholder:`可填寫取消原因`,resize:`vertical`,rows:3,value:Oe})})]})})]})}function Kt(e){return e.data.label?e.data.label:e.data.isDefault?`其他情況`:e.data.condition??``}function qt(e){return e.edges.map(Kt).filter(e=>e.trim().length>0)}function $(e){return e===`startEvent`?`開始`:e===`endEvent`?`完成`:e===`userTask`?`簽核節點`:e===`serviceTask`?`知會節點`:e===`exclusiveGateway`?`條件分流`:`平行處理`}function Jt(e,t,n,r){return e.nodes.map(e=>{let i=Ge(e,t,n,r);return{data:{kindLabel:$(e.type),label:e.data.label,secondaryLabel:i.secondaryLabel,statusLabel:i.statusLabel,tone:i.tone},id:e.id,position:e.position,sourcePosition:_.Position.Right,targetPosition:_.Position.Left,type:`workflowRuntime`}})}function Yt(e){let t=new v.graphlib.Graph;return t.setDefaultEdgeLabel(()=>({})),t.setGraph({nodesep:56,rankdir:`LR`,ranksep:120}),e.nodes.forEach(e=>{t.setNode(e.id,{height:Pt,width:Nt})}),e.edges.forEach(e=>{t.setEdge(e.source,e.target)}),v.layout(t),{...e,nodes:e.nodes.map(e=>{let n=t.node(e.id);return n?{...e,position:{x:n.x-Nt/2,y:n.y-Pt/2}}:e})}}function Xt(e){return e.edges.map(e=>{let t=Kt(e);return{animated:!1,id:e.id,label:t,labelBgBorderRadius:6,labelBgPadding:[8,4],labelBgStyle:{fill:e.data.isDefault?`#f8fafc`:`#eff6ff`,stroke:e.data.isDefault?`#64748b`:`#2563eb`,strokeWidth:1},labelShowBg:!!t,labelStyle:{fill:e.data.isDefault?`#475569`:`#2563eb`,fontSize:12,fontWeight:600},source:e.source,style:{stroke:`#475569`,strokeWidth:1.5},target:e.target,type:e.type??`smoothstep`}})}function Zt(e){return e===`current`?{...Lt,border:`1px solid var(--mzn-color-primary, #0057ff)`,boxShadow:`0 0 0 3px rgba(0, 87, 255, 0.14)`}:e===`completed`?{...Lt,border:`1px solid #16a34a`}:e===`cancelled`?{...Lt,border:`1px solid #dc2626`,opacity:.72}:e===`waiting`?{...Lt,border:`1px dashed #64748b`}:Lt}function Qt(e){let t=Rt;return e===`current`?{...t,background:`#eff6ff`,color:`#2563eb`}:e===`completed`?{...t,background:`#f0fdf4`,color:`#15803d`}:e===`cancelled`?{...t,background:`#fef2f2`,color:`#dc2626`}:e===`waiting`?{...t,background:`#f8fafc`,color:`#475569`}:{...t,background:`#f1f5f9`,color:`#64748b`}}function $t({data:e}){return(0,d.jsxs)(`div`,{style:Zt(e.tone),children:[(0,d.jsx)(_.Handle,{isConnectable:!1,position:_.Position.Left,style:Bt,type:`target`}),(0,d.jsx)(u.Typography,{component:`span`,ellipsis:!0,title:e.label,variant:`label-primary`,children:e.label}),(0,d.jsx)(`span`,{style:Qt(e.tone),children:e.statusLabel}),(0,d.jsx)(`span`,{title:e.secondaryLabel,style:zt,children:e.secondaryLabel||e.kindLabel}),(0,d.jsx)(_.Handle,{isConnectable:!1,position:_.Position.Right,style:Bt,type:`source`})]})}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return lt}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return pt}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return Tt}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return nt}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return St}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return et}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return Gt}});
|
|
5
|
+
//# sourceMappingURL=detail-ChseSF55.cjs.map
|