@rytass/bpm-core-react 0.17.9 → 0.18.1

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.
Files changed (275) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/README.md +8 -0
  3. package/dist/chunks/FormBuilderView-CHaAQL5v.cjs +3 -0
  4. package/dist/chunks/FormBuilderView-CHaAQL5v.cjs.map +1 -0
  5. package/dist/chunks/{FormBuilderView-ClLnQ1e_.js → FormBuilderView-vQfVc08Z.js} +493 -437
  6. package/dist/chunks/FormBuilderView-vQfVc08Z.js.map +1 -0
  7. package/dist/chunks/{FormRendererView-BsTwZkqU.js → FormRendererView-CTLlG13b.js} +300 -189
  8. package/dist/chunks/FormRendererView-CTLlG13b.js.map +1 -0
  9. package/dist/chunks/FormRendererView-ChmM_4Yc.cjs +4 -0
  10. package/dist/chunks/FormRendererView-ChmM_4Yc.cjs.map +1 -0
  11. package/dist/chunks/admin-pickers-BjbkBpSJ.cjs +2 -0
  12. package/dist/chunks/admin-pickers-BjbkBpSJ.cjs.map +1 -0
  13. package/dist/chunks/{admin-pickers-Djq3h-UR.js → admin-pickers-DfGxsjpp.js} +42 -42
  14. package/dist/chunks/admin-pickers-DfGxsjpp.js.map +1 -0
  15. package/dist/chunks/{approval-instance-list-page-CPXMP3PL.js → approval-instance-list-page-BnI4t5mD.js} +7 -8
  16. package/dist/chunks/{approval-instance-list-page-CPXMP3PL.js.map → approval-instance-list-page-BnI4t5mD.js.map} +1 -1
  17. package/dist/chunks/{approval-instance-list-page-ax0pm8bt.cjs → approval-instance-list-page-fqvmkBlg.cjs} +2 -2
  18. package/dist/chunks/{approval-instance-list-page-ax0pm8bt.cjs.map → approval-instance-list-page-fqvmkBlg.cjs.map} +1 -1
  19. package/dist/chunks/approver-filled-form-B4zPg9kz.cjs +2 -0
  20. package/dist/chunks/approver-filled-form-B4zPg9kz.cjs.map +1 -0
  21. package/dist/chunks/approver-filled-form-Bgazhbvd.js +112 -0
  22. package/dist/chunks/approver-filled-form-Bgazhbvd.js.map +1 -0
  23. package/dist/chunks/auth-provider-4BeCw7cI.cjs.map +1 -1
  24. package/dist/chunks/{auth-provider-B5oPmvk2.js → auth-provider-C2b-5mGt.js} +2 -3
  25. package/dist/chunks/{auth-provider-B5oPmvk2.js.map → auth-provider-C2b-5mGt.js.map} +1 -1
  26. package/dist/chunks/{bpm-form-field-Cao0rMol.js → bpm-form-field-9B-Det0u.js} +2 -3
  27. package/dist/chunks/{bpm-form-field-Cao0rMol.js.map → bpm-form-field-9B-Det0u.js.map} +1 -1
  28. package/dist/chunks/bpm-form-field-Bc6k4ZEO.cjs.map +1 -1
  29. package/dist/chunks/{categories-riC33J_j.js → categories-BAdxjNSA.js} +14 -15
  30. package/dist/chunks/{categories-riC33J_j.js.map → categories-BAdxjNSA.js.map} +1 -1
  31. package/dist/chunks/{categories-AxxhqjLZ.cjs → categories-DQUtVEiV.cjs} +2 -2
  32. package/dist/chunks/{categories-AxxhqjLZ.cjs.map → categories-DQUtVEiV.cjs.map} +1 -1
  33. package/dist/chunks/{compose-jnvnnVfN.js → compose-D9ipJpF_.js} +131 -148
  34. package/dist/chunks/compose-D9ipJpF_.js.map +1 -0
  35. package/dist/chunks/compose-DtfX8DQ9.cjs +2 -0
  36. package/dist/chunks/compose-DtfX8DQ9.cjs.map +1 -0
  37. package/dist/chunks/{dashboard-page-DdBvV6YI.js → dashboard-page-BoqNhjT_.js} +5 -6
  38. package/dist/chunks/{dashboard-page-DdBvV6YI.js.map → dashboard-page-BoqNhjT_.js.map} +1 -1
  39. package/dist/chunks/{dashboard-page-BWQBSGDq.cjs → dashboard-page-D7YJ3udk.cjs} +2 -2
  40. package/dist/chunks/{dashboard-page-BWQBSGDq.cjs.map → dashboard-page-D7YJ3udk.cjs.map} +1 -1
  41. package/dist/chunks/{delegations-MxF3uJGW.js → delegations-BfhCDz5e.js} +15 -16
  42. package/dist/chunks/{delegations-MxF3uJGW.js.map → delegations-BfhCDz5e.js.map} +1 -1
  43. package/dist/chunks/{delegations-Ckf03icM.cjs → delegations-BmFGcuhA.cjs} +2 -2
  44. package/dist/chunks/{delegations-Ckf03icM.cjs.map → delegations-BmFGcuhA.cjs.map} +1 -1
  45. package/dist/chunks/{delegations-V9HIe3_P.cjs → delegations-CcS0SHbf.cjs} +2 -2
  46. package/dist/chunks/{delegations-V9HIe3_P.cjs.map → delegations-CcS0SHbf.cjs.map} +1 -1
  47. package/dist/chunks/{delegations-xUt1tj8d.js → delegations-DBh5TT6G.js} +16 -17
  48. package/dist/chunks/{delegations-xUt1tj8d.js.map → delegations-DBh5TT6G.js.map} +1 -1
  49. package/dist/chunks/designer-Df79YzUn.cjs +65 -0
  50. package/dist/chunks/designer-Df79YzUn.cjs.map +1 -0
  51. package/dist/chunks/{designer-B8Gvew_k.js → designer-ubnZbP-A.js} +1779 -1360
  52. package/dist/chunks/designer-ubnZbP-A.js.map +1 -0
  53. package/dist/chunks/detail-BBC9kqXd.cjs +5 -0
  54. package/dist/chunks/detail-BBC9kqXd.cjs.map +1 -0
  55. package/dist/chunks/detail-C6XKZjlF.js +2665 -0
  56. package/dist/chunks/detail-C6XKZjlF.js.map +1 -0
  57. package/dist/chunks/{format-date-time-CB-LxzqT.js → format-date-time-B0LdmWg4.js} +2 -3
  58. package/dist/chunks/{format-date-time-CB-LxzqT.js.map → format-date-time-B0LdmWg4.js.map} +1 -1
  59. package/dist/chunks/format-date-time-D-cx5M8z.cjs.map +1 -1
  60. package/dist/chunks/{format-member-label-DudVI55w.js → format-member-label-C73FuP-d.js} +2 -3
  61. package/dist/chunks/{format-member-label-DudVI55w.js.map → format-member-label-C73FuP-d.js.map} +1 -1
  62. package/dist/chunks/format-member-label-t7ANTF62.cjs.map +1 -1
  63. package/dist/chunks/language-provider-Bdnx3Gxl.cjs.map +1 -1
  64. package/dist/chunks/{language-provider-B3cEbLe4.js → language-provider-phkWOapf.js} +2 -3
  65. package/dist/chunks/{language-provider-B3cEbLe4.js.map → language-provider-phkWOapf.js.map} +1 -1
  66. package/dist/chunks/{login-C6qlTC6F.js → login-D6cc3bo7.js} +4 -5
  67. package/dist/chunks/{login-C6qlTC6F.js.map → login-D6cc3bo7.js.map} +1 -1
  68. package/dist/chunks/{login-AtVxZBsC.cjs → login-uvVcltrS.cjs} +2 -2
  69. package/dist/chunks/{login-AtVxZBsC.cjs.map → login-uvVcltrS.cjs.map} +1 -1
  70. package/dist/chunks/notifications-Bc4mgSds.cjs.map +1 -1
  71. package/dist/chunks/{notifications-DJ5wzCye.js → notifications-Cvme5Qbl.js} +2 -3
  72. package/dist/chunks/{notifications-DJ5wzCye.js.map → notifications-Cvme5Qbl.js.map} +1 -1
  73. package/dist/chunks/orgs-B_2J2tLX.cjs +2 -0
  74. package/dist/chunks/{orgs-BeeDDWL1.cjs.map → orgs-B_2J2tLX.cjs.map} +1 -1
  75. package/dist/chunks/{orgs-8hje_l2n.js → orgs-DqxMds26.js} +48 -49
  76. package/dist/chunks/{orgs-8hje_l2n.js.map → orgs-DqxMds26.js.map} +1 -1
  77. package/dist/chunks/{providers-B_d5tbCL.js → providers-BbCs23sk.js} +21 -25
  78. package/dist/chunks/{providers-B_d5tbCL.js.map → providers-BbCs23sk.js.map} +1 -1
  79. package/dist/chunks/{providers-chuJvMgv.cjs → providers-D_KAgOOu.cjs} +2 -2
  80. package/dist/chunks/{providers-chuJvMgv.cjs.map → providers-D_KAgOOu.cjs.map} +1 -1
  81. package/dist/chunks/router-adapter--gYs13E8.cjs.map +1 -1
  82. package/dist/chunks/{router-adapter-DftlFTOd.js → router-adapter-CkxCyzf5.js} +2 -3
  83. package/dist/chunks/{router-adapter-DftlFTOd.js.map → router-adapter-CkxCyzf5.js.map} +1 -1
  84. package/dist/chunks/{routes-config-yZbESPlw.js → routes-config-BcNaWJWJ.js} +2 -3
  85. package/dist/chunks/{routes-config-yZbESPlw.js.map → routes-config-BcNaWJWJ.js.map} +1 -1
  86. package/dist/chunks/routes-config-C1j_vFKo.cjs.map +1 -1
  87. package/dist/chunks/task-decision-3d17ZvZE.js +29 -0
  88. package/dist/chunks/task-decision-3d17ZvZE.js.map +1 -0
  89. package/dist/chunks/task-decision-CqZ4WQOC.cjs +2 -0
  90. package/dist/chunks/task-decision-CqZ4WQOC.cjs.map +1 -0
  91. package/dist/chunks/{use-bpm-member-D57LKe_u.js → use-bpm-member-BPzcNU1g.js} +3 -4
  92. package/dist/chunks/{use-bpm-member-D57LKe_u.js.map → use-bpm-member-BPzcNU1g.js.map} +1 -1
  93. package/dist/chunks/use-bpm-member-DpNAQtNC.cjs.map +1 -1
  94. package/dist/chunks/{users-Pl6hY5Y5.js → users-BBtiZ9QQ.js} +22 -25
  95. package/dist/chunks/{users-Pl6hY5Y5.js.map → users-BBtiZ9QQ.js.map} +1 -1
  96. package/dist/chunks/{users-O2L_M3BK.cjs → users-EqSzDhuj.cjs} +2 -2
  97. package/dist/chunks/{users-O2L_M3BK.cjs.map → users-EqSzDhuj.cjs.map} +1 -1
  98. package/dist/components/admin-picker-options.d.cts +11 -0
  99. package/dist/components/admin-picker-options.d.ts +11 -0
  100. package/dist/components/admin-pickers.d.cts +2 -11
  101. package/dist/components/admin-pickers.d.ts +2 -11
  102. package/dist/index.cjs +1 -1
  103. package/dist/index.cjs.map +1 -1
  104. package/dist/index.js +17 -19
  105. package/dist/index.js.map +1 -1
  106. package/dist/lib/task-decision.d.cts +16 -0
  107. package/dist/lib/task-decision.d.ts +16 -0
  108. package/dist/lib/use-org-unit-names.d.cts +10 -0
  109. package/dist/lib/use-org-unit-names.d.ts +10 -0
  110. package/dist/next/index.cjs +1 -1
  111. package/dist/next/index.cjs.map +1 -1
  112. package/dist/next/index.js +7 -8
  113. package/dist/next/index.js.map +1 -1
  114. package/dist/next/workflow-chat-route.cjs +19 -1
  115. package/dist/next/workflow-chat-route.cjs.map +1 -1
  116. package/dist/next/workflow-chat-route.js +2 -3
  117. package/dist/next/workflow-chat-route.js.map +1 -1
  118. package/dist/pages/admin/delegations/index.cjs +1 -1
  119. package/dist/pages/admin/delegations/index.cjs.map +1 -1
  120. package/dist/pages/admin/delegations/index.js +2 -3
  121. package/dist/pages/admin/orgs/index.cjs +1 -1
  122. package/dist/pages/admin/orgs/index.cjs.map +1 -1
  123. package/dist/pages/admin/orgs/index.js +2 -3
  124. package/dist/pages/admin/users/index.cjs +1 -1
  125. package/dist/pages/admin/users/index.cjs.map +1 -1
  126. package/dist/pages/admin/users/index.js +2 -3
  127. package/dist/pages/admin/webhook-endpoints/index.cjs.map +1 -1
  128. package/dist/pages/admin/webhook-endpoints/index.js +1 -2
  129. package/dist/pages/cc/index.cjs.map +1 -1
  130. package/dist/pages/cc/index.js +1 -2
  131. package/dist/pages/dashboard/index.cjs.map +1 -1
  132. package/dist/pages/dashboard/index.js +1 -2
  133. package/dist/pages/delegations/index.cjs +1 -1
  134. package/dist/pages/delegations/index.cjs.map +1 -1
  135. package/dist/pages/delegations/index.js +2 -3
  136. package/dist/pages/inbox/index.cjs.map +1 -1
  137. package/dist/pages/inbox/index.js +1 -2
  138. package/dist/pages/instances/detail/index.cjs +1 -1
  139. package/dist/pages/instances/detail/index.cjs.map +1 -1
  140. package/dist/pages/instances/detail/index.js +2 -3
  141. package/dist/pages/instances/new/index.cjs.map +1 -1
  142. package/dist/pages/instances/new/index.js +1 -2
  143. package/dist/pages/login/index.cjs +1 -1
  144. package/dist/pages/login/index.cjs.map +1 -1
  145. package/dist/pages/login/index.js +2 -3
  146. package/dist/pages/root/index.cjs.map +1 -1
  147. package/dist/pages/root/index.js +1 -2
  148. package/dist/pages/search/index.cjs.map +1 -1
  149. package/dist/pages/search/index.js +1 -2
  150. package/dist/pages/sent/index.cjs.map +1 -1
  151. package/dist/pages/sent/index.js +1 -2
  152. package/dist/pages/settings/notifications/index.cjs.map +1 -1
  153. package/dist/pages/settings/notifications/index.js +2 -3
  154. package/dist/pages/templates/categories/index.cjs +1 -1
  155. package/dist/pages/templates/categories/index.cjs.map +1 -1
  156. package/dist/pages/templates/categories/index.js +2 -3
  157. package/dist/pages/templates/compose/index.cjs +1 -1
  158. package/dist/pages/templates/compose/index.cjs.map +1 -1
  159. package/dist/pages/templates/compose/index.js +2 -3
  160. package/dist/pages/templates/designer/index.cjs +1 -1
  161. package/dist/pages/templates/designer/index.cjs.map +1 -1
  162. package/dist/pages/templates/designer/index.js +2 -3
  163. package/dist/pages/templates/index.cjs.map +1 -1
  164. package/dist/pages/templates/index.js +1 -2
  165. package/dist/pages/templates/versions/index.cjs.map +1 -1
  166. package/dist/pages/templates/versions/index.js +1 -2
  167. package/dist/views/admin/delegations/index.cjs +1 -1
  168. package/dist/views/admin/delegations/index.js +1 -1
  169. package/dist/views/admin/index.cjs +1 -1
  170. package/dist/views/admin/index.js +3 -3
  171. package/dist/views/admin/orgs/index.cjs +1 -1
  172. package/dist/views/admin/orgs/index.js +1 -1
  173. package/dist/views/admin/users/index.cjs +1 -1
  174. package/dist/views/admin/users/index.js +1 -1
  175. package/dist/views/admin/webhook-endpoints/index.cjs +1 -1
  176. package/dist/views/admin/webhook-endpoints/index.cjs.map +1 -1
  177. package/dist/views/admin/webhook-endpoints/index.js +52 -53
  178. package/dist/views/admin/webhook-endpoints/index.js.map +1 -1
  179. package/dist/views/cc/index.cjs +1 -1
  180. package/dist/views/cc/index.cjs.map +1 -1
  181. package/dist/views/cc/index.js +2 -3
  182. package/dist/views/dashboard/index.cjs +1 -1
  183. package/dist/views/dashboard/index.cjs.map +1 -1
  184. package/dist/views/dashboard/index.js +2 -3
  185. package/dist/views/delegations/index.cjs +1 -1
  186. package/dist/views/delegations/index.js +1 -1
  187. package/dist/views/forms/builder/index.cjs +1 -1
  188. package/dist/views/forms/builder/index.js +1 -1
  189. package/dist/views/forms/renderer/index.cjs +1 -1
  190. package/dist/views/forms/renderer/index.js +1 -1
  191. package/dist/views/forms/renderer/org-unit-field-options.d.cts +44 -0
  192. package/dist/views/forms/renderer/org-unit-field-options.d.ts +44 -0
  193. package/dist/views/forms/renderer/org-unit-field.d.cts +23 -0
  194. package/dist/views/forms/renderer/org-unit-field.d.ts +23 -0
  195. package/dist/views/inbox/index.cjs +1 -1
  196. package/dist/views/inbox/index.cjs.map +1 -1
  197. package/dist/views/inbox/index.js +133 -137
  198. package/dist/views/inbox/index.js.map +1 -1
  199. package/dist/views/instances/approver-filled-form.d.cts +9 -2
  200. package/dist/views/instances/approver-filled-form.d.ts +9 -2
  201. package/dist/views/instances/detail/index.cjs +1 -1
  202. package/dist/views/instances/detail/index.js +1 -1
  203. package/dist/views/instances/detail/sections/InstanceHistorySection.d.cts +8 -1
  204. package/dist/views/instances/detail/sections/InstanceHistorySection.d.ts +8 -1
  205. package/dist/views/instances/detail/sections/container-helpers.d.cts +0 -1
  206. package/dist/views/instances/detail/sections/container-helpers.d.ts +0 -1
  207. package/dist/views/instances/detail/sections/shared.d.cts +2 -2
  208. package/dist/views/instances/detail/sections/shared.d.ts +2 -2
  209. package/dist/views/instances/new/index.cjs +1 -1
  210. package/dist/views/instances/new/index.cjs.map +1 -1
  211. package/dist/views/instances/new/index.js +24 -21
  212. package/dist/views/instances/new/index.js.map +1 -1
  213. package/dist/views/login/index.cjs +1 -1
  214. package/dist/views/login/index.js +1 -1
  215. package/dist/views/search/index.cjs +1 -1
  216. package/dist/views/search/index.cjs.map +1 -1
  217. package/dist/views/search/index.js +2 -3
  218. package/dist/views/sent/index.cjs +1 -1
  219. package/dist/views/sent/index.cjs.map +1 -1
  220. package/dist/views/sent/index.js +2 -3
  221. package/dist/views/settings/index.js +1 -1
  222. package/dist/views/settings/notifications/index.js +1 -1
  223. package/dist/views/templates/categories/index.cjs +1 -1
  224. package/dist/views/templates/categories/index.js +1 -1
  225. package/dist/views/templates/compose/index.cjs +1 -1
  226. package/dist/views/templates/compose/index.js +1 -1
  227. package/dist/views/templates/designer/approver-resolver-model.d.cts +211 -0
  228. package/dist/views/templates/designer/approver-resolver-model.d.ts +211 -0
  229. package/dist/views/templates/designer/dry-run-assignee-label.d.cts +2 -0
  230. package/dist/views/templates/designer/dry-run-assignee-label.d.ts +2 -0
  231. package/dist/views/templates/designer/dry-run-sample-data.d.cts +6 -0
  232. package/dist/views/templates/designer/dry-run-sample-data.d.ts +6 -0
  233. package/dist/views/templates/designer/dynamic-form-resolver-options.d.cts +25 -0
  234. package/dist/views/templates/designer/dynamic-form-resolver-options.d.ts +25 -0
  235. package/dist/views/templates/designer/index.cjs +1 -1
  236. package/dist/views/templates/designer/index.js +1 -1
  237. package/dist/views/templates/designer/node-actor-resolver-options.d.cts +38 -0
  238. package/dist/views/templates/designer/node-actor-resolver-options.d.ts +38 -0
  239. package/dist/views/templates/index.cjs +1 -1
  240. package/dist/views/templates/index.cjs.map +1 -1
  241. package/dist/views/templates/index.js +50 -51
  242. package/dist/views/templates/index.js.map +1 -1
  243. package/dist/views/templates/versions/index.cjs +1 -1
  244. package/dist/views/templates/versions/index.cjs.map +1 -1
  245. package/dist/views/templates/versions/index.js +7 -8
  246. package/dist/views/templates/versions/index.js.map +1 -1
  247. package/package.json +3 -3
  248. package/dist/chunks/FormBuilderView-CUOyS07f.cjs +0 -3
  249. package/dist/chunks/FormBuilderView-CUOyS07f.cjs.map +0 -1
  250. package/dist/chunks/FormBuilderView-ClLnQ1e_.js.map +0 -1
  251. package/dist/chunks/FormRendererView-BsTwZkqU.js.map +0 -1
  252. package/dist/chunks/FormRendererView-GpsE03np.cjs +0 -4
  253. package/dist/chunks/FormRendererView-GpsE03np.cjs.map +0 -1
  254. package/dist/chunks/admin-pickers-BRHk3qKq.cjs +0 -2
  255. package/dist/chunks/admin-pickers-BRHk3qKq.cjs.map +0 -1
  256. package/dist/chunks/admin-pickers-Djq3h-UR.js.map +0 -1
  257. package/dist/chunks/approver-filled-form-D1DmqDVP.cjs +0 -2
  258. package/dist/chunks/approver-filled-form-D1DmqDVP.cjs.map +0 -1
  259. package/dist/chunks/approver-filled-form-DuQGPtNB.js +0 -95
  260. package/dist/chunks/approver-filled-form-DuQGPtNB.js.map +0 -1
  261. package/dist/chunks/compose-Cock_B2Q.cjs +0 -2
  262. package/dist/chunks/compose-Cock_B2Q.cjs.map +0 -1
  263. package/dist/chunks/compose-jnvnnVfN.js.map +0 -1
  264. package/dist/chunks/designer-B8Gvew_k.js.map +0 -1
  265. package/dist/chunks/designer-CAEFV1ve.cjs +0 -65
  266. package/dist/chunks/designer-CAEFV1ve.cjs.map +0 -1
  267. package/dist/chunks/detail-CExpbazF.js +0 -2629
  268. package/dist/chunks/detail-CExpbazF.js.map +0 -1
  269. package/dist/chunks/detail-DIY-L4i-.cjs +0 -2
  270. package/dist/chunks/detail-DIY-L4i-.cjs.map +0 -1
  271. package/dist/chunks/orgs-BeeDDWL1.cjs +0 -2
  272. package/dist/chunks/task-node-label-BF6UllxP.cjs +0 -2
  273. package/dist/chunks/task-node-label-BF6UllxP.cjs.map +0 -1
  274. package/dist/chunks/task-node-label-CWZgOBj0.js +0 -9
  275. package/dist/chunks/task-node-label-CWZgOBj0.js.map +0 -1
@@ -1,2629 +0,0 @@
1
- "use client";
2
- import { n as e } from "./auth-provider-B5oPmvk2.js";
3
- import { t } from "./format-date-time-CB-LxzqT.js";
4
- import { t as n } from "./bpm-form-field-Cao0rMol.js";
5
- import { t as r } from "./use-bpm-member-D57LKe_u.js";
6
- import { t as i } from "./format-member-label-DudVI55w.js";
7
- import { t as a } from "./task-node-label-CWZgOBj0.js";
8
- import { a as o, c as s, i as c, l, n as u, o as d, r as f, s as p, t as ee, u as te } from "./approver-filled-form-DuQGPtNB.js";
9
- import { o as m, t as ne } from "./FormRendererView-BsTwZkqU.js";
10
- import '../style.css';import '../detail.css';/* empty css */
11
- import { Fragment as re, forwardRef as ie, useCallback as h, useEffect as g, useImperativeHandle as ae, useMemo as _, useRef as v, useState as y } from "react";
12
- import { AutoComplete as oe, Badge as se, Button as b, Description as x, DescriptionContent as ce, InlineMessage as S, Input as le, Message as ue, Modal as C, PageHeader as de, Section as fe, SectionGroup as pe, Select as w, Stepper as me, Table as he, Textarea as ge, Tooltip as _e, Typography as T } from "@mezzanine-ui/react";
13
- import { Fragment as ve, jsx as E, jsxs as D } from "react/jsx-runtime";
14
- import { cancelAdhocDirective as ye, cancelApprovalInstance as be, configureAdhocCompletionNotification as xe, configureAdhocStageNotification as Se, decideTask as Ce, listAdhocDirectives as we, listAttachments as Te, listTaskDecisions as O, listWorkflowWebhookDeliveries as Ee, readApprovalInstance as De, readAttachmentDownloadUrl as Oe, readAttachmentPreviewUrl as ke, readInstanceSignatures as Ae, requestAdhocCountersign as je, requestAdhocPreApproval as Me, resolveMemberProfiles as Ne, resubmitApprovalInstance as Pe, retryWorkflowWebhookDelivery as Fe, searchMembers as k, uploadAttachment as Ie } from "@rytass/bpm-core-client/workflow";
15
- import Le from "@mezzanine-ui/react/ContentHeader";
16
- import { CheckedIcon as Re, ChevronLeftIcon as ze, ChevronRightIcon as Be, DangerousOutlineIcon as Ve, DownloadIcon as He, FileSearchIcon as Ue, NotificationUnreadIcon as We, PlusIcon as Ge, RefreshCcwIcon as Ke, ResetIcon as qe, ShareIcon as A, UserIcon as Je, ZoomInIcon as Ye, ZoomOutIcon as j } from "@mezzanine-ui/icons";
17
- import { readNodeFillableFieldKeys as Xe, readRevealedFieldKeys as Ze, readTopLevelFieldKey as Qe, resolveFieldAccess as $e } from "@rytass/bpm-core-shared";
18
- import { buildFormRendererValues as et, focusFormRendererField as tt, readFormDataSourceErrorMessage as M, validateFormRendererValues as nt } from "@rytass/bpm-core-client/form";
19
- import { Background as rt, Controls as N, Handle as P, Position as F, ReactFlow as it } from "@xyflow/react";
20
- import * as I from "dagre";
21
- import { Document as at, Page as ot } from "react-pdf";
22
- import { stepClasses as L } from "@mezzanine-ui/core/stepper";
23
- var R = {
24
- root: "bpm_root_ehm7w",
25
- toolbar: "bpm_toolbar_R-tis",
26
- pageControls: "bpm_pageControls_jM-rC",
27
- zoomControls: "bpm_zoomControls_7RAbJ",
28
- counter: "bpm_counter_ILUsD",
29
- viewport: "bpm_viewport_DQXms",
30
- page: "bpm_page_Cv5Rg",
31
- state: "bpm_state_bpgp3"
32
- }, st = 760, ct = 920, lt = 320, ut = 32, dt = .75, ft = 1.75, pt = .25;
33
- function mt({ filename: e, fileUrl: t, onDownload: n }) {
34
- let r = v(null), [i, a] = y(null), [o, s] = y(1), [c, l] = y(1), [u, d] = y(st);
35
- g(() => {
36
- let e = r.current;
37
- if (!e || typeof ResizeObserver > "u") return;
38
- let t = new ResizeObserver((e) => {
39
- let t = e[0]?.contentRect.width;
40
- t && d(t);
41
- });
42
- return t.observe(e), () => t.disconnect();
43
- }, []), g(() => {
44
- a(null), s(1), l(1);
45
- }, [t]);
46
- let f = _(() => {
47
- let e = Math.max(lt, u - ut);
48
- return Math.round(Math.min(ct, e) * c);
49
- }, [c, u]), p = h((e) => {
50
- a(e.numPages), s(1);
51
- }, []), ee = o > 1, te = i !== null && o < i, m = c > dt, ne = c < ft, re = i === null ? `第 ${o} 頁` : `第 ${o} / ${i} 頁`, ie = `${Math.round(c * 100)}%`;
52
- return /* @__PURE__ */ D("section", {
53
- "aria-label": `${e} PDF 預覽`,
54
- className: R.root,
55
- children: [/* @__PURE__ */ D("div", {
56
- className: R.toolbar,
57
- children: [
58
- /* @__PURE__ */ D("div", {
59
- className: R.pageControls,
60
- "aria-label": "頁面切換",
61
- children: [
62
- /* @__PURE__ */ E(b, {
63
- "aria-label": "上一頁",
64
- disabled: !ee,
65
- icon: ze,
66
- onClick: () => {
67
- s((e) => Math.max(1, e - 1));
68
- },
69
- size: "minor",
70
- variant: "base-secondary"
71
- }),
72
- /* @__PURE__ */ E(T, {
73
- className: R.counter,
74
- component: "span",
75
- variant: "body",
76
- children: re
77
- }),
78
- /* @__PURE__ */ E(b, {
79
- "aria-label": "下一頁",
80
- disabled: !te,
81
- icon: Be,
82
- onClick: () => {
83
- s((e) => i === null ? e : Math.min(i, e + 1));
84
- },
85
- size: "minor",
86
- variant: "base-secondary"
87
- })
88
- ]
89
- }),
90
- /* @__PURE__ */ D("div", {
91
- className: R.zoomControls,
92
- "aria-label": "縮放",
93
- children: [
94
- /* @__PURE__ */ E(b, {
95
- "aria-label": "縮小",
96
- disabled: !m,
97
- icon: j,
98
- onClick: () => {
99
- l((e) => Math.max(dt, e - pt));
100
- },
101
- size: "minor",
102
- variant: "base-secondary"
103
- }),
104
- /* @__PURE__ */ E(T, {
105
- className: R.counter,
106
- component: "span",
107
- variant: "body",
108
- children: ie
109
- }),
110
- /* @__PURE__ */ E(b, {
111
- "aria-label": "放大",
112
- disabled: !ne,
113
- icon: Ye,
114
- onClick: () => {
115
- l((e) => Math.min(ft, e + pt));
116
- },
117
- size: "minor",
118
- variant: "base-secondary"
119
- })
120
- ]
121
- }),
122
- n ? /* @__PURE__ */ E(b, {
123
- icon: He,
124
- iconType: "leading",
125
- onClick: n,
126
- size: "minor",
127
- variant: "base-primary",
128
- children: "下載"
129
- }) : null
130
- ]
131
- }), /* @__PURE__ */ E("div", {
132
- className: R.viewport,
133
- ref: r,
134
- children: /* @__PURE__ */ E(at, {
135
- error: /* @__PURE__ */ E(ht, { message: "PDF 無法載入。" }),
136
- file: t,
137
- loading: /* @__PURE__ */ E(ht, { message: "正在載入 PDF..." }),
138
- noData: /* @__PURE__ */ E(ht, { message: "沒有可預覽的 PDF。" }),
139
- onLoadSuccess: p,
140
- suspense: !1,
141
- children: /* @__PURE__ */ E(ot, {
142
- className: R.page,
143
- loading: /* @__PURE__ */ E(ht, { message: "正在載入頁面..." }),
144
- pageNumber: o,
145
- renderAnnotationLayer: !0,
146
- renderTextLayer: !0,
147
- width: f
148
- })
149
- })
150
- })]
151
- });
152
- }
153
- function ht({ message: e }) {
154
- return /* @__PURE__ */ E("div", {
155
- className: R.state,
156
- children: /* @__PURE__ */ E(T, {
157
- color: "text-neutral",
158
- variant: "body",
159
- children: e
160
- })
161
- });
162
- }
163
- //#endregion
164
- //#region src/views/instances/detail/submitted-by.ts
165
- function gt({ initiatorMemberId: e, submittedByMemberId: t }) {
166
- return t && t !== e ? t : null;
167
- }
168
- function _t(e, t) {
169
- let n = gt(e);
170
- if (!n || !e.initiatorMemberId) return null;
171
- let r = (e) => t.get(e)?.name ?? e;
172
- return `由 ${r(n)} 代 ${r(e.initiatorMemberId)} 送出`;
173
- }
174
- //#endregion
175
- //#region src/views/instances/detail/sections/shared.ts
176
- function vt(e) {
177
- let t = B(e, "from"), n = B(e, "to"), r = B(e, "reason");
178
- return !t || !n || !r ? null : {
179
- from: t,
180
- reason: r,
181
- ruleId: B(e, "ruleId"),
182
- to: n
183
- };
184
- }
185
- function z(e) {
186
- try {
187
- let t = JSON.parse(e);
188
- return Array.isArray(t) ? t.map((e) => bt(e) ? vt(e) : null).filter((e) => e !== null) : [];
189
- } catch {
190
- return [];
191
- }
192
- }
193
- function B(e, t) {
194
- let n = e[t];
195
- return typeof n == "string" ? n : null;
196
- }
197
- function V(e, t) {
198
- let n = e[t];
199
- return Array.isArray(n) ? n.filter((e) => typeof e == "string") : [];
200
- }
201
- function yt(e, t) {
202
- let n = e[t];
203
- return typeof n == "number" ? n : null;
204
- }
205
- function H(e) {
206
- return typeof e == "string" && e.trim().length > 0;
207
- }
208
- function bt(e) {
209
- return typeof e == "object" && !!e;
210
- }
211
- function xt(e) {
212
- return e.status === "PENDING" || e.status === "IN_PROGRESS";
213
- }
214
- function U(e) {
215
- return M(e) || (e instanceof Error ? e.message : "發生未知錯誤");
216
- }
217
- function St(e) {
218
- return !Number.isFinite(e) || e <= 0 ? "-" : e < 1024 ? `${e} B` : e < 1048576 ? `${(e / 1024).toFixed(1)} KB` : `${(e / 1024 / 1024).toFixed(1)} MB`;
219
- }
220
- function W(e) {
221
- return e.length > 16 ? `${e.slice(0, 12)}...` : e;
222
- }
223
- function Ct(e) {
224
- return e === "APPROVED" ? "已同意" : e === "CANCELLED" ? "已取消" : e === "DRAFT" ? "草稿" : e === "EXPIRED" ? "已逾期" : e === "REJECTED" ? "已拒絕" : e === "RETURNED" ? "已退回" : e === "RUNNING" ? "進行中" : e;
225
- }
226
- function wt(e) {
227
- return e === "PENDING" ? "待處理" : e === "IN_PROGRESS" ? "處理中" : e === "COMPLETED" ? "已完成" : e === "CANCELLED" ? "已取消" : e === "TRANSFERRED" ? "已轉派" : e;
228
- }
229
- function Tt(e) {
230
- return e === "APPROVED" ? "同意" : e === "REJECTED" ? "拒絕" : e === "RETURNED" ? "退回" : e === "TRANSFERRED" ? "轉派" : e;
231
- }
232
- function Et(e) {
233
- return e === "startEvent" ? "開始" : e === "endEvent" ? "完成" : e === "userTask" ? "簽核節點" : e === "serviceTask" ? "知會節點" : e === "exclusiveGateway" ? "條件分流" : "平行處理";
234
- }
235
- function Dt(e, t) {
236
- return t?.nodes.find((t) => t.id === e)?.data.label ?? e;
237
- }
238
- function G(e, t) {
239
- if (!e) return "-";
240
- let n = t.get(e);
241
- return n ? i(n.name, n.email, "fullwidth") : e;
242
- }
243
- function K(e, t = /* @__PURE__ */ new Map()) {
244
- let n = z(e.delegationChainJson);
245
- if (!e.assigneeMemberId) return e.candidateMemberIds.length ? `候選 ${e.candidateMemberIds.map((e) => G(e, t)).join("、")}` : "未指定";
246
- let r = G(e.assigneeMemberId, t), i = G(e.originalAssigneeMemberId, t);
247
- return n.length === 0 || e.originalAssigneeMemberId === e.assigneeMemberId ? r : `${r}(原:${i})`;
248
- }
249
- function q(e, t) {
250
- return t ? e.assigneeMemberId === t || (e.openCandidateMemberIds ?? e.candidateMemberIds).includes(t) : !1;
251
- }
252
- function Ot(e, t) {
253
- let n = e.filter((e) => q(e, t) && (e.status === "PENDING" || e.status === "IN_PROGRESS"));
254
- return n.find((e) => !e.isAdhoc) ?? n[0] ?? null;
255
- }
256
- function kt(e, t) {
257
- if (t.type !== "userTask" || !t.data.returnBehavior.allowReturn) return [];
258
- if (t.data.returnBehavior.allowedTargets === "ANY") return e.nodes.filter((e) => e.id !== t.id).map((e) => ({
259
- id: e.id,
260
- name: `${e.data.label}(${Et(e.type)})`
261
- }));
262
- 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);
263
- return r ? [{
264
- id: r.id,
265
- name: `${r.data.label}(${Et(r.type)})`
266
- }] : [];
267
- }
268
- function At(e) {
269
- return {
270
- email: e.email,
271
- id: e.memberId,
272
- name: i(e.name, e.email, "dot")
273
- };
274
- }
275
- function jt({ memberIds: e, useWebhookTarget: t, webhookUrl: n }) {
276
- if (t) {
277
- let e = n.trim();
278
- return e ? {
279
- target: {
280
- kind: "WEBHOOK",
281
- webhookUrl: e
282
- },
283
- valid: !0
284
- } : {
285
- error: "請輸入 Webhook URL",
286
- valid: !1
287
- };
288
- }
289
- return e.length > 0 ? {
290
- target: {
291
- kind: "MEMBER",
292
- memberIds: e
293
- },
294
- valid: !0
295
- } : {
296
- error: "請選擇對象成員",
297
- valid: !1
298
- };
299
- }
300
- function Mt(e) {
301
- return !!e;
302
- }
303
- function Nt(e) {
304
- if (!bt(e)) return null;
305
- let t = e.email, n = e.id, r = e.name;
306
- return typeof n == "string" && typeof r == "string" ? {
307
- email: typeof t == "string" ? t : null,
308
- id: n,
309
- name: r
310
- } : null;
311
- }
312
- function Pt(e, t) {
313
- let n = e.trim().toLocaleLowerCase();
314
- if (!n) return null;
315
- let r = t.filter((e) => [
316
- e.id,
317
- e.name,
318
- e.email ?? ""
319
- ].some((e) => e.toLocaleLowerCase().includes(n)));
320
- return r.length === 1 ? r[0] ?? null : null;
321
- }
322
- function J(e) {
323
- return H(e) ? {
324
- text: e,
325
- type: "text"
326
- } : null;
327
- }
328
- function Ft(e, t, n = "neutral") {
329
- return H(t) ? {
330
- label: e,
331
- text: t,
332
- tone: n,
333
- type: "comment"
334
- } : null;
335
- }
336
- function It(e, t, n, r) {
337
- let i = t ? n.get(t) : null;
338
- return {
339
- email: i?.email ?? null,
340
- label: i?.name ?? r,
341
- memberId: t,
342
- prefix: e,
343
- type: "member"
344
- };
345
- }
346
- function Y(e) {
347
- return !!e;
348
- }
349
- function Lt(e) {
350
- let t = e.findIndex((e) => e.id.startsWith("pending-task-") || e.id.startsWith("future-node-"));
351
- return t === -1 ? e.length : t;
352
- }
353
- function Rt(e) {
354
- 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" || zt(e) || Z(e.eventType, Ut(e));
355
- }
356
- function zt(e) {
357
- return e.eventType === "TASK_CREATED" && V(Ut(e), "sequentialCandidateMemberIds").length > 0;
358
- }
359
- function Bt(e) {
360
- if (e.eventType !== "TASK_CANDIDATE_ACTIVATED" && e.eventType !== "TASK_CREATED") return [];
361
- let t = Ut(e);
362
- return [
363
- ...V(t, "sequentialCandidateMemberIds"),
364
- B(t, "candidateMemberId"),
365
- B(t, "previousMemberId")
366
- ].filter(H);
367
- }
368
- var X = /* @__PURE__ */ new Set([
369
- "SERVICE_TASK_EXECUTED",
370
- "SERVICE_TASK_FAILED",
371
- "WEBHOOK_DELIVERY_RETRIED"
372
- ]);
373
- function Z(e, t) {
374
- return X.has(e) && B(t, "action") === "NOTIFY_WEBHOOK";
375
- }
376
- function Q(e) {
377
- return B(e, "endpointLabel") ?? B(e, "endpointKey") ?? "外部系統";
378
- }
379
- function Vt(e) {
380
- return e === "APPROVED" ? "已同意" : e === "REJECTED" ? "已拒絕" : e === "RETURNED" ? "已退回" : e === "TRANSFERRED" ? "已轉派" : "簽核已決議";
381
- }
382
- function Ht(e, t) {
383
- if (e === "INSTANCE_STARTED") return "案件已發起";
384
- if (e === "INSTANCE_CANCELLED") return "案件已取消";
385
- if (e === "INSTANCE_EXPIRED") return "案件逾期,已由系統終止";
386
- if (e === "INSTANCE_RESUBMITTED") return "申請人重新送出";
387
- if (e === "TOKEN_CREATED") return "流程路徑已建立";
388
- if (e === "ENGINE_PROCESS_REQUESTED") return "流程引擎已處理";
389
- if (e === "TOKEN_ADVANCED") return "流程已前進";
390
- if (e === "TASK_CREATED") return "待簽任務已建立";
391
- if (e === "TASK_CANDIDATE_ACTIVATED") return "輪到下一位簽核";
392
- if (e === "TASK_DECIDED") return Vt(B(t, "action"));
393
- if (e === "SLA_TRIGGERED") return "時限提醒已觸發";
394
- if (e === "TASK_REASSIGNED") return "管理者改派待辦";
395
- if (Z(e, t)) {
396
- let n = Q(t);
397
- return e === "SERVICE_TASK_EXECUTED" ? `已通知外部系統:${n}` : e === "SERVICE_TASK_FAILED" ? `通知外部系統失敗:${n}` : `管理者重新傳送外部系統通知:${n}`;
398
- }
399
- return e;
400
- }
401
- function Ut(e) {
402
- try {
403
- let t = JSON.parse(e.payloadJson);
404
- return bt(t) ? t : {};
405
- } catch {
406
- return {};
407
- }
408
- }
409
- function Wt(e, t) {
410
- return e.eventType === "SLA_TRIGGERED" || e.eventType === "INSTANCE_EXPIRED" || e.eventType === "SERVICE_TASK_FAILED" && Z(e.eventType, t) || B(t, "action") === "REJECTED" || B(t, "instanceState") === "REJECTED";
411
- }
412
- function Gt(e) {
413
- return t(e);
414
- }
415
- function Kt(e, t, n, r) {
416
- if (e.eventType === "INSTANCE_STARTED") return _t({
417
- initiatorMemberId: e.actorMemberId,
418
- submittedByMemberId: B(t, "submittedByMemberId")
419
- }, r);
420
- if (e.eventType === "TASK_CANDIDATE_ACTIVATED") {
421
- let e = B(t, "candidateMemberId"), n = B(t, "previousMemberId");
422
- if (!e) return null;
423
- let i = G(e, r);
424
- return n ? `輪到:${i}(前一位:${G(n, r)})` : `輪到:${i}`;
425
- }
426
- if (e.eventType === "TASK_CREATED") {
427
- let e = V(t, "sequentialCandidateMemberIds");
428
- if (e.length) return `簽核順序:${e.map((e) => G(e, r)).join(" → ")}`;
429
- let n = B(t, "assigneeMemberId"), i = B(t, "originalAssigneeMemberId");
430
- if (!n) {
431
- let e = V(t, "candidateMemberIds");
432
- return e.length ? `候選簽核人:${e.map((e) => G(e, r)).join("、")}` : null;
433
- }
434
- let a = G(n, r), o = G(i, r);
435
- return i && i !== n ? `待簽人:${a}(原簽核人:${o})` : `待簽人:${a}`;
436
- }
437
- if (e.eventType === "TASK_DECIDED") {
438
- let e = B(t, "action"), n = B(t, "comment"), i = e ? `決議:${Tt(e)}` : null, a = B(t, "transferToMemberId");
439
- return e === "REJECTED" && n ? [i, `拒絕原因:${n}`].filter(H).join(" · ") : e === "APPROVED" && n ? [i, `同意說明:${n}`].filter(H).join(" · ") : e === "TRANSFERRED" ? [i, `轉派給:${G(a, r)}`].filter(H).join(" · ") : i;
440
- }
441
- if (e.eventType === "TOKEN_ADVANCED") {
442
- let e = B(t, "action");
443
- if (e) return `流程結果:${Tt(e)}`;
444
- let r = yt(t, "arrivedCount"), i = yt(t, "requiredCount");
445
- if (r !== null && i !== null) return `等待匯合:${r}/${i}`;
446
- let a = B(t, "fromNodeId"), o = B(t, "toNodeId");
447
- if (a && o) return `由 ${Dt(a, n)} 前進至 ${Dt(o, n)}`;
448
- }
449
- if (e.eventType === "ENGINE_PROCESS_REQUESTED") {
450
- let e = B(t, "state");
451
- return e ? `案件狀態:${Ct(e)}` : null;
452
- }
453
- return null;
454
- }
455
- function qt(e, t, n, r, i, a, o, s = null) {
456
- if (e.eventType === "INSTANCE_RESUBMITTED") return [Ft("簽核意見", B(t, "comment"))].filter(Y);
457
- if (e.eventType !== "TASK_DECIDED") return [J(Kt(e, t, n, o))].filter(Y);
458
- let c = e.taskId ? r.get(e.taskId) : null, l = B(t, "action") ?? c?.action ?? null, u = B(t, "comment") ?? c?.comment ?? null, d = B(t, "transferToMemberId") ?? c?.transferToMemberId ?? null, f = B(t, "signatureId") ?? c?.signatureId ?? null, p = f ? i.get(f) : null;
459
- return [
460
- J(l ? `決議:${Tt(l)}` : null),
461
- l === "REJECTED" ? Ft("拒絕原因", u ?? "-", "danger") : null,
462
- l === "APPROVED" ? Ft("同意說明", u) : null,
463
- l === "RETURNED" ? Ft("退回說明", u ?? "-") : null,
464
- l === "TRANSFERRED" ? J(`轉派給:${G(d, o)}`) : null,
465
- l === "TRANSFERRED" ? Ft("轉派說明", u ?? "-") : null,
466
- J(Jt(t, s)),
467
- p ? J(a?.valid ? `簽章:已驗證(${W(p.signedPayloadHash)})` : `簽章:待檢查(${W(p.signedPayloadHash)})`) : null
468
- ].filter(Y);
469
- }
470
- function Jt(e, t) {
471
- let n = e.changedFieldKeys;
472
- if (!Array.isArray(n)) return null;
473
- let r = n.filter((e) => typeof e == "string" && e !== "");
474
- if (r.length === 0) return null;
475
- let i = r.map((e) => t?.fields.find((t) => t.fieldKey === e)?.label || e);
476
- return `補填 ${r.length} 個欄位:${i.join("、")}`;
477
- }
478
- function Yt(e, t, n, r, i) {
479
- if (e.type === "startEvent" || i.has(e.id)) return !1;
480
- if (r === "REJECTED") return !0;
481
- let a = on(e, t, n, r);
482
- return a.tone === "neutral" || a.tone === "waiting";
483
- }
484
- function Xt(e, t, n, r, i) {
485
- if (r !== "RUNNING" && r !== "REJECTED") return [];
486
- let a = e.nodes.filter((e) => Yt(e, t, n, r, i)), o = Zt(e, a, t, n, i), s = new Map(e.nodes.map((e, t) => [e.id, t]));
487
- return a.filter((e) => o.has(e.id)).sort((e, t) => {
488
- let n = o.get(e.id) ?? 0, r = o.get(t.id) ?? 0;
489
- 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;
490
- });
491
- }
492
- function Zt(e, t, n, r, i) {
493
- let a = new Set(t.map((e) => e.id)), o = e.edges.reduce((e, t) => {
494
- let n = [...e.get(t.source) ?? [], t.target];
495
- return new Map(e).set(t.source, n);
496
- }, /* @__PURE__ */ new Map());
497
- return Qt(e, n, r, i).reduce((e, t) => tn(e, $t(t, o, a)), /* @__PURE__ */ new Map());
498
- }
499
- function Qt(e, t, n, r) {
500
- let i = n.filter((e) => e.status === "ACTIVE" || e.status === "WAITING").map((e) => e.currentNodeId), a = t.filter(xt).map((e) => e.nodeId), o = e.nodes.filter((e) => r.has(e.id)).map((e) => e.id), s = [.../* @__PURE__ */ new Set([
501
- ...i,
502
- ...a,
503
- ...o
504
- ])], c = e.nodes.filter((e) => e.type === "startEvent").map((e) => e.id);
505
- return s.length > 0 ? s : c;
506
- }
507
- function $t(e, t, n) {
508
- return en([{
509
- distance: 0,
510
- nodeId: e
511
- }], t, n);
512
- }
513
- function en(e, t, n, r = /* @__PURE__ */ new Set(), i = /* @__PURE__ */ new Map()) {
514
- let [a, ...o] = e;
515
- if (!a) return i;
516
- if (r.has(a.nodeId)) return en(o, t, n, r, i);
517
- 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;
518
- return en([...o, ...(t.get(a.nodeId) ?? []).map((e) => ({
519
- distance: a.distance + 1,
520
- nodeId: e
521
- }))], t, n, s, c);
522
- }
523
- function tn(e, t) {
524
- return [...t.entries()].reduce((e, [t, n]) => new Map(e).set(t, Math.min(e.get(t) ?? n, n)), e);
525
- }
526
- function nn(e) {
527
- 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}`;
528
- }
529
- function rn(e, t, n, r, i, a, o, s, c, l = null) {
530
- let u = e.filter(Rt).map((e) => {
531
- let t = Ut(e), n = e.nodeId ? Dt(e.nodeId, r) : null;
532
- return {
533
- descriptionParts: [
534
- J(n ? `節點:${n}` : "節點:全流程"),
535
- It("操作者", e.actorMemberId, a, "系統"),
536
- J(`時間:${Gt(e.createdAt)}`),
537
- ...qt(e, t, r, o, s, c, a, l)
538
- ].filter(Y),
539
- error: Wt(e, t),
540
- id: e.id,
541
- title: Ht(e.eventType, t)
542
- };
543
- }), d = t.filter(xt).map((e) => ({
544
- descriptionParts: [
545
- J(`節點:${Dt(e.nodeId, r)}`),
546
- It("處理者", e.assigneeMemberId, a, "未指定"),
547
- J(`建立時間:${Gt(e.createdAt)}`)
548
- ].filter(Y),
549
- error: !1,
550
- id: `pending-task-${e.id}`,
551
- title: e.status === "IN_PROGRESS" ? "簽核處理中" : "等待簽核處理"
552
- })), f = new Set([...e.filter(Rt).map((e) => e.nodeId), ...t.map((e) => e.nodeId)].filter(H)), p = r ? Xt(r, t, n, i, f).map((e) => ({
553
- descriptionParts: [J(`${Et(e.type)} · 尚未抵達`)].filter(Y),
554
- error: !1,
555
- forcePending: !0,
556
- id: `future-node-${e.id}`,
557
- title: nn(e)
558
- })) : [];
559
- return [
560
- ...u,
561
- ...d,
562
- ...p
563
- ];
564
- }
565
- var an = {
566
- APPROVED: {
567
- statusLabel: "已完成",
568
- tone: "completed"
569
- },
570
- CANCELLED: {
571
- statusLabel: "已取消",
572
- tone: "cancelled"
573
- },
574
- EXPIRED: {
575
- statusLabel: "已逾期終止",
576
- tone: "cancelled"
577
- },
578
- REJECTED: {
579
- statusLabel: "已拒絕",
580
- tone: "cancelled"
581
- }
582
- };
583
- function on(e, t, n, r) {
584
- 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");
585
- if (a) return {
586
- secondaryLabel: `處理者 ${K(a)}`,
587
- statusLabel: "待處理",
588
- tone: "current"
589
- };
590
- if (o) return {
591
- secondaryLabel: `已取消 ${K(o)}`,
592
- statusLabel: "已取消",
593
- tone: "cancelled"
594
- };
595
- if (s) return {
596
- secondaryLabel: `已完成 ${K(s)}`,
597
- statusLabel: "已完成",
598
- tone: "completed"
599
- };
600
- if (l) return {
601
- secondaryLabel: `token ${l.id}`,
602
- statusLabel: "執行中",
603
- tone: "current"
604
- };
605
- if (u) return {
606
- secondaryLabel: `token ${u.id}`,
607
- statusLabel: "等待前置",
608
- tone: "waiting"
609
- };
610
- if (e.type === "startEvent") return {
611
- secondaryLabel: "流程已發起",
612
- statusLabel: "已發起",
613
- tone: "completed"
614
- };
615
- let d = e.type === "endEvent" ? an[r] : void 0;
616
- return d ? {
617
- ...d,
618
- secondaryLabel: r
619
- } : {
620
- secondaryLabel: Et(e.type),
621
- statusLabel: "未抵達",
622
- tone: "neutral"
623
- };
624
- }
625
- //#endregion
626
- //#region src/views/instances/detail/sections/container-helpers.ts
627
- async function sn({ activityLogs: e, adhocDirectives: t = [], instance: n, tasks: r }) {
628
- let i = [...new Set([
629
- n?.initiatorMemberId ?? null,
630
- n?.submittedByMemberId ?? null,
631
- ...e.map((e) => e.actorMemberId),
632
- ...e.flatMap(Bt),
633
- ...r.map((e) => e.assigneeMemberId),
634
- ...r.map((e) => e.originalAssigneeMemberId),
635
- ...r.flatMap((e) => e.candidateMemberIds),
636
- ...r.flatMap((e) => z(e.delegationChainJson).flatMap((e) => [e.from, e.to])),
637
- ...t.flatMap((e) => [e.createdByMemberId, ...cn(e.targetValueJson)])
638
- ].filter(H))];
639
- try {
640
- return await Ne(i);
641
- } catch {
642
- return [];
643
- }
644
- }
645
- function cn(e) {
646
- try {
647
- return (JSON.parse(e).memberIds ?? []).filter((e) => typeof e == "string");
648
- } catch {
649
- return [];
650
- }
651
- }
652
- async function ln(e) {
653
- return (await Promise.all(e.map((e) => O(e.id)))).flat();
654
- }
655
- function un(e) {
656
- return e.reduce((e, t) => {
657
- let n = e.get(t.taskId), r = !n || new Date(t.decidedAt).getTime() > new Date(n.decidedAt).getTime() ? t : n;
658
- return new Map(e).set(t.taskId, r);
659
- }, /* @__PURE__ */ new Map());
660
- }
661
- //#endregion
662
- //#region src/views/instances/detail/use-resubmit-comment-draft.ts
663
- function dn(e) {
664
- let [t, n] = y({
665
- instanceId: e,
666
- text: ""
667
- }), r = h((t) => n({
668
- instanceId: e,
669
- text: t
670
- }), [e]);
671
- return {
672
- clearAfterResubmit: h((e) => n((t) => t.instanceId === e ? {
673
- instanceId: e,
674
- text: ""
675
- } : t), []),
676
- comment: t.instanceId === e ? t.text : "",
677
- setComment: r
678
- };
679
- }
680
- //#endregion
681
- //#region src/views/instances/detail/sections/InstanceFormSection.tsx
682
- var fn = {
683
- display: "grid",
684
- gap: 16
685
- }, pn = {
686
- display: "flex",
687
- flexWrap: "wrap",
688
- gap: 8
689
- }, mn = 2e3, hn = {
690
- minWidth: "100%",
691
- width: "100%"
692
- };
693
- function $(e) {
694
- e && (e.style.width = "100%");
695
- }
696
- function gn({ canResubmitInstance: e, deciding: t, error: r, fieldAccess: i, fieldLabelMarkers: a, fill: o = null, instance: s, loading: c, onDataSourceStateChange: l, onResubmitFormChange: d, onReloadAfterConflict: f = null, onResubmitCommentChange: p = null, onResubmitInstance: ee, onUploadAttachment: te, resubmitComment: m = "", resubmitFormData: re, resubmitFormErrors: ie }) {
697
- let h = s?.formDefinitionSnapshot.schema, g = s?.workflowSnapshot, ae = _(() => e && h && g ? u(h, g) : o?.schema ?? h, [
698
- e,
699
- o?.schema,
700
- h,
701
- g
702
- ]), v = !e && o !== null;
703
- return /* @__PURE__ */ D("div", {
704
- style: fn,
705
- children: [
706
- r ? /* @__PURE__ */ E(T, {
707
- color: "text-error",
708
- variant: "body",
709
- children: r
710
- }) : null,
711
- c ? /* @__PURE__ */ E(T, {
712
- color: "text-neutral",
713
- variant: "body",
714
- children: "載入中..."
715
- }) : null,
716
- f ? /* @__PURE__ */ D("div", {
717
- style: fn,
718
- children: [/* @__PURE__ */ E(S, {
719
- content: "表單在你填寫期間被更新了,你填的內容還在。請重新載入後確認再同意。",
720
- severity: "error"
721
- }), /* @__PURE__ */ E("div", {
722
- style: pn,
723
- children: /* @__PURE__ */ E(b, {
724
- disabled: c,
725
- icon: Ke,
726
- iconType: "leading",
727
- onClick: f,
728
- variant: "base-secondary",
729
- children: "重新載入"
730
- })
731
- })]
732
- }) : null,
733
- v && o.fieldCount > 0 ? /* @__PURE__ */ E(S, {
734
- content: `本關需要你補填 ${o.fieldCount} 個欄位,按「同意」時會一起送出並納入簽章。`,
735
- severity: "info"
736
- }) : null,
737
- ae && s?.formDefinitionSnapshot.uiSchema ? /* @__PURE__ */ D(ve, { children: [
738
- /* @__PURE__ */ E(ne, {
739
- dataSourceContext: e ? {
740
- instanceId: s.id,
741
- kind: "runtime"
742
- } : void 0,
743
- dataSourceInitialValues: s.formData,
744
- errors: v ? o.errors : ie,
745
- ...!e && i ? { fieldAccess: i } : {},
746
- ...!e && a ? { fieldLabelMarkers: a } : {},
747
- onChange: (e) => {
748
- v ? o.onChange(e) : d(e);
749
- },
750
- onDataSourceStateChange: l,
751
- onUploadAttachment: e ? te : void 0,
752
- optionSnapshots: s.formDataOptionSnapshot,
753
- readonly: !e,
754
- schema: ae,
755
- uiSchema: s.formDefinitionSnapshot.uiSchema,
756
- value: e ? re : v ? o.value : s.formData
757
- }),
758
- e && p ? /* @__PURE__ */ E(n, {
759
- label: "簽核意見",
760
- name: "resubmitComment",
761
- children: /* @__PURE__ */ E(ge, {
762
- disabled: t,
763
- onChange: (e) => p(e.target.value),
764
- placeholder: "選填,例如說明這次補正或修改了哪些內容",
765
- maxLength: mn,
766
- ref: $,
767
- resize: "vertical",
768
- rows: 4,
769
- style: hn,
770
- value: m
771
- })
772
- }) : null,
773
- e ? /* @__PURE__ */ E("div", {
774
- style: pn,
775
- children: /* @__PURE__ */ E(b, {
776
- disabled: t,
777
- icon: Ke,
778
- iconType: "leading",
779
- onClick: ee,
780
- variant: "base-primary",
781
- children: "重新送出"
782
- })
783
- }) : null
784
- ] }) : /* @__PURE__ */ E(T, {
785
- color: "text-neutral",
786
- variant: "body",
787
- children: "此案件沒有可顯示的表單快照。"
788
- })
789
- ]
790
- });
791
- }
792
- //#endregion
793
- //#region src/views/instances/detail/sections/InstanceAttachmentsSection.tsx
794
- var _n = {
795
- display: "grid",
796
- gap: 16
797
- };
798
- function vn({ attachments: e, onDownload: n, onPreview: r }) {
799
- let i = _(() => e.map((e) => ({
800
- attachment: e,
801
- createdAt: e.createdAt,
802
- filename: e.filename,
803
- id: e.id,
804
- key: e.id,
805
- mimeType: e.mimeType,
806
- sizeLabel: St(Number(e.sizeBytes))
807
- })), [e]), a = _(() => [
808
- {
809
- dataIndex: "filename",
810
- key: "filename",
811
- title: "檔名",
812
- width: 260
813
- },
814
- {
815
- dataIndex: "mimeType",
816
- key: "mimeType",
817
- title: "類型",
818
- width: 180
819
- },
820
- {
821
- dataIndex: "sizeLabel",
822
- key: "sizeLabel",
823
- title: "大小",
824
- width: 120
825
- },
826
- {
827
- key: "createdAt",
828
- render: (e) => /* @__PURE__ */ E(T, {
829
- component: "span",
830
- variant: "body",
831
- children: t(e.createdAt)
832
- }),
833
- title: "上傳時間",
834
- width: 220
835
- }
836
- ], []), o = _(() => ({
837
- render: (e) => [...e.mimeType === "application/pdf" ? [{
838
- icon: Ue,
839
- iconType: "leading",
840
- name: "預覽",
841
- onClick: () => {
842
- r(e.attachment);
843
- }
844
- }] : [], {
845
- icon: He,
846
- iconType: "leading",
847
- name: "下載",
848
- onClick: () => {
849
- n(e.attachment);
850
- }
851
- }],
852
- variant: "base-secondary",
853
- width: 160
854
- }), [n, r]);
855
- return /* @__PURE__ */ D("div", {
856
- style: _n,
857
- children: [/* @__PURE__ */ E(T, {
858
- component: "h2",
859
- variant: "h3",
860
- children: "附件"
861
- }), i.length > 0 ? /* @__PURE__ */ E(he, {
862
- actions: o,
863
- columns: a,
864
- dataSource: i,
865
- fullWidth: !0
866
- }) : /* @__PURE__ */ E(T, {
867
- color: "text-neutral",
868
- variant: "body",
869
- children: "此案件沒有附件。"
870
- })]
871
- });
872
- }
873
- //#endregion
874
- //#region src/views/instances/detail/sections/InstanceTasksSection.tsx
875
- var yn = {
876
- display: "grid",
877
- gap: 12,
878
- width: "100%"
879
- }, bn = {
880
- minWidth: "100%",
881
- width: "100%"
882
- }, xn = {
883
- display: "grid",
884
- gap: 12,
885
- width: "100%"
886
- }, Sn = { marginTop: 12 }, Cn = { marginTop: 24 };
887
- function wn(e) {
888
- e && (e.style.width = "100%");
889
- }
890
- var Tn = {
891
- COMPLETION_NOTIFY: "結案通知",
892
- COUNTERSIGN: "臨時會簽",
893
- PRE_APPROVAL: "臨時加簽",
894
- STAGE_NOTIFY: "階段完成通知"
895
- }, En = {
896
- COMPLETION_NOTIFY: "本張單到達結案狀態(核准 / 拒絕 / 取消)後,通知指定對象。",
897
- COUNTERSIGN: "指定對象會併入下一層簽核,下一層需所有人都完成才會繼續。",
898
- PRE_APPROVAL: "指定對象需先完成加簽,本階段才會往下一層繼續。",
899
- STAGE_NOTIFY: "本階段完成後(不論通過與否)通知指定對象。"
900
- }, Dn = [{
901
- id: "REJECT_INSTANCE",
902
- name: "加簽拒絕時整單駁回"
903
- }, {
904
- id: "RETURN_TO_ORIGIN",
905
- name: "加簽拒絕時退回給我重新處理"
906
- }], On = [{
907
- id: "MEMBER",
908
- name: "指定成員"
909
- }, {
910
- id: "WEBHOOK",
911
- name: "Webhook"
912
- }], kn = ie(function({ adhocDirectives: e, currentMemberId: r, fill: i = null, instance: o, memberProfilesById: s, onChanged: c, onDecidingChange: l, onFillApproveError: u, tasks: d }, f) {
913
- let [p, ee] = y(!1), [te, m] = y(null);
914
- g(() => {
915
- l?.(p);
916
- }, [p, l]);
917
- let [ne, re] = y(""), [ie, h] = y(!1), [v, S] = y(""), [ue, de] = y(null), [fe, pe] = y(!1), [me, _e] = y(""), [be, we] = y(!1), [Te, O] = y(null), [Ee, De] = y(""), [Oe, ke] = y(null), [Ae, Ne] = y(!1), [Pe, Fe] = y([]), [Ie, Le] = y(!1), [Re, ze] = y(""), [Be, Ve] = y([]), [He, Ue] = y(!1), [We, Ge] = y([]), [Ke, qe] = y(!1), [A, Je] = y("COUNTERSIGN"), [Ye, j] = y("REJECT_INSTANCE"), [Xe, Ze] = y(!1), [Qe, $e] = y("MEMBER"), [et, tt] = y(""), M = v.trim(), nt = me.trim(), rt = Ee.trim(), N = _(() => Ot(d, r), [r, d]), P = _(() => N && o ? o.workflowSnapshot.nodes.find((e) => e.id === N.nodeId) ?? null : null, [N, o]), F = _(() => P && o ? kt(o.workflowSnapshot, P) : [], [P, o]), it = P?.type === "userTask" && P.data.returnBehavior.allowReturn, I = P?.type === "userTask" && P.data.allowReject !== !1, at = P?.type === "userTask" && P.data.allowTransfer !== !1, ot = P?.type === "userTask" && P.data.returnBehavior.requireComment === !0, L = P?.type === "userTask" && P.data.allowAddSigner, R = _(() => e.filter((e) => e.status === "PENDING"), [e]), st = F.find((e) => e.id === Te) ?? F[0] ?? null, ct = _(() => d.map((e) => ({
918
- ...e,
919
- assigneeLabel: K(e, s),
920
- fillFieldCount: jn(e, o?.workflowSnapshot ?? null),
921
- key: e.id,
922
- nodeLabel: a({
923
- ...e,
924
- nodeLabel: Dt(e.nodeId, o?.workflowSnapshot ?? null)
925
- }),
926
- statusLabel: wt(e.status)
927
- })), [
928
- o,
929
- s,
930
- d
931
- ]), lt = _(() => [
932
- {
933
- dataIndex: "nodeLabel",
934
- key: "nodeLabel",
935
- title: "節點",
936
- width: 180
937
- },
938
- {
939
- key: "assigneeMemberId",
940
- title: "處理者",
941
- render: (e) => /* @__PURE__ */ E(T, {
942
- component: "span",
943
- variant: "body",
944
- children: e.assigneeLabel
945
- }),
946
- width: 180
947
- },
948
- {
949
- dataIndex: "statusLabel",
950
- key: "statusLabel",
951
- title: "狀態",
952
- width: 120
953
- },
954
- {
955
- key: "fill",
956
- render: (e) => e.fillFieldCount > 0 ? /* @__PURE__ */ E(se, {
957
- size: "sub",
958
- text: `需補填 ${e.fillFieldCount} 欄`,
959
- variant: "dot-warning"
960
- }) : null,
961
- title: "補填",
962
- width: 140
963
- },
964
- {
965
- key: "createdAt",
966
- render: (e) => /* @__PURE__ */ E(T, {
967
- component: "span",
968
- variant: "body",
969
- children: t(e.createdAt)
970
- }),
971
- title: "建立時間",
972
- width: 220
973
- }
974
- ], []), ut = _(() => R.map((e) => ({
975
- ...e,
976
- createdByLabel: G(e.createdByMemberId, s),
977
- key: e.id,
978
- targetLabel: An(e, s),
979
- typeLabel: Tn[e.type]
980
- })), [s, R]), dt = _(() => [
981
- {
982
- dataIndex: "typeLabel",
983
- key: "typeLabel",
984
- title: "類型",
985
- width: 180
986
- },
987
- {
988
- key: "targetLabel",
989
- render: (e) => /* @__PURE__ */ E(T, {
990
- component: "span",
991
- variant: "body",
992
- children: e.targetLabel
993
- }),
994
- title: "對象",
995
- width: 220
996
- },
997
- {
998
- key: "createdByLabel",
999
- render: (e) => /* @__PURE__ */ E(T, {
1000
- component: "span",
1001
- variant: "body",
1002
- children: e.createdByLabel
1003
- }),
1004
- title: "設定者",
1005
- width: 180
1006
- },
1007
- {
1008
- key: "createdAt",
1009
- render: (e) => /* @__PURE__ */ E(T, {
1010
- component: "span",
1011
- variant: "body",
1012
- children: t(e.createdAt)
1013
- }),
1014
- title: "建立時間",
1015
- width: 220
1016
- },
1017
- {
1018
- key: "actions",
1019
- render: (e) => e.createdByMemberId === r ? /* @__PURE__ */ E(b, {
1020
- disabled: Xe,
1021
- onClick: () => void q(e.id),
1022
- size: "minor",
1023
- variant: "destructive-secondary",
1024
- children: "撤回"
1025
- }) : /* @__PURE__ */ E(ve, {}),
1026
- title: "操作",
1027
- width: 100
1028
- }
1029
- ], [Xe, r]);
1030
- async function ft({ action: e, comment: t, returnToNodeId: n = null, transferToMemberId: a = null }) {
1031
- if (!r || !N || e === "REJECTED" && !I || e === "TRANSFERRED" && !at) return !1;
1032
- ee(!0), m(null);
1033
- let o = e === "APPROVED" && i !== null && !N.isAdhoc ? {
1034
- expectedFormDataFingerprint: i.expectedFormDataFingerprint,
1035
- formData: i.formData
1036
- } : null;
1037
- try {
1038
- await Ce({
1039
- action: e,
1040
- comment: t,
1041
- decidedByMemberId: r,
1042
- fill: o,
1043
- returnToNodeId: n,
1044
- taskId: N.id,
1045
- transferToMemberId: a
1046
- }), pe(!1), we(!1), Le(!1), S(""), _e(""), De(""), ke(null), O(null), de(null);
1047
- } catch (e) {
1048
- return ee(!1), o !== null && e instanceof Error && u?.(e.message) === !0 ? (h(!1), !1) : (m(U(e)), !1);
1049
- }
1050
- try {
1051
- await c();
1052
- } catch (e) {
1053
- m(U(e));
1054
- } finally {
1055
- ee(!1);
1056
- }
1057
- return !0;
1058
- }
1059
- function pt() {
1060
- r && N && (m(null), h(!0));
1061
- }
1062
- function mt() {
1063
- p || (h(!1), re(""));
1064
- }
1065
- async function ht() {
1066
- p || await ft({
1067
- action: "APPROVED",
1068
- comment: ne.trim() || null
1069
- }) && (h(!1), re(""));
1070
- }
1071
- function gt() {
1072
- I && (S(""), de(null), pe(!0));
1073
- }
1074
- function _t() {
1075
- p || (pe(!1), S(""), de(null));
1076
- }
1077
- function vt() {
1078
- _e(""), O(F[0]?.id ?? null), we(!0);
1079
- }
1080
- function z() {
1081
- p || (we(!1), _e(""), O(null));
1082
- }
1083
- function B() {
1084
- at && (De(""), ke(null), Le(!0), yt(""));
1085
- }
1086
- function V() {
1087
- p || (Le(!1), De(""), ke(null));
1088
- }
1089
- async function yt(e) {
1090
- Ne(!0);
1091
- try {
1092
- Fe((await k(e)).filter((e) => e.memberId !== r).map(At));
1093
- } catch (e) {
1094
- m(U(e));
1095
- } finally {
1096
- Ne(!1);
1097
- }
1098
- }
1099
- async function H() {
1100
- I && (M ? await ft({
1101
- action: "REJECTED",
1102
- comment: M
1103
- }) : de("請輸入拒絕原因"));
1104
- }
1105
- async function bt() {
1106
- at && (Oe ? await ft({
1107
- action: "TRANSFERRED",
1108
- comment: rt || null,
1109
- transferToMemberId: Oe.id
1110
- }) : m("請選擇轉派對象"));
1111
- }
1112
- async function xt() {
1113
- await ft({
1114
- action: "RETURNED",
1115
- comment: nt || null,
1116
- returnToNodeId: st?.id ?? null
1117
- });
1118
- }
1119
- function St() {
1120
- ze(""), Ve([]), j("REJECT_INSTANCE"), $e("MEMBER"), tt("");
1121
- }
1122
- function W(e) {
1123
- Je(e), St(), qe(!0), Tt("");
1124
- }
1125
- function Ct() {
1126
- Xe || (qe(!1), St());
1127
- }
1128
- async function Tt(e) {
1129
- Ue(!0);
1130
- try {
1131
- Ge((await k(e)).map(At));
1132
- } catch (e) {
1133
- m(U(e));
1134
- } finally {
1135
- Ue(!1);
1136
- }
1137
- }
1138
- async function Et() {
1139
- if (!N) return;
1140
- let e = (A === "STAGE_NOTIFY" || A === "COMPLETION_NOTIFY") && Qe === "WEBHOOK", t = jt({
1141
- memberIds: Be.map((e) => e.id),
1142
- useWebhookTarget: e,
1143
- webhookUrl: et
1144
- });
1145
- if (!t.valid) {
1146
- m(t.error);
1147
- return;
1148
- }
1149
- let { target: n } = t, r = Re.trim() || null;
1150
- Ze(!0), m(null);
1151
- try {
1152
- A === "COUNTERSIGN" ? await je({
1153
- comment: r,
1154
- target: n,
1155
- taskId: N.id
1156
- }) : A === "PRE_APPROVAL" ? await Me({
1157
- comment: r,
1158
- onReject: Ye,
1159
- target: n,
1160
- taskId: N.id
1161
- }) : A === "STAGE_NOTIFY" ? await Se({
1162
- target: n,
1163
- taskId: N.id
1164
- }) : await xe({
1165
- target: n,
1166
- taskId: N.id
1167
- }), qe(!1), St(), await c();
1168
- } catch (e) {
1169
- m(U(e));
1170
- } finally {
1171
- Ze(!1);
1172
- }
1173
- }
1174
- async function q(e) {
1175
- Ze(!0), m(null);
1176
- try {
1177
- await ye(e), await c();
1178
- } catch (e) {
1179
- m(U(e));
1180
- } finally {
1181
- Ze(!1);
1182
- }
1183
- }
1184
- ae(f, () => ({
1185
- canAddSignerCurrentTask: L,
1186
- canRejectCurrentTask: I,
1187
- canReturnCurrentTask: it,
1188
- canTransferCurrentTask: at,
1189
- deciding: p,
1190
- handleApprove: pt,
1191
- hasCurrentTask: N !== null,
1192
- openAdhocModal: W,
1193
- openRejectModal: gt,
1194
- openReturnModal: vt,
1195
- openTransferModal: B
1196
- }), [
1197
- L,
1198
- I,
1199
- it,
1200
- at,
1201
- r,
1202
- N,
1203
- p
1204
- ]);
1205
- let J = A === "STAGE_NOTIFY" || A === "COMPLETION_NOTIFY", Ft = J && Qe === "WEBHOOK" ? !et.trim() : Be.length === 0, It = Dn.find((e) => e.id === Ye) ?? Dn[0], Y = On.find((e) => e.id === Qe) ?? On[0];
1206
- return /* @__PURE__ */ D(ve, { children: [
1207
- /* @__PURE__ */ E(T, {
1208
- component: "h2",
1209
- variant: "h3",
1210
- children: "任務"
1211
- }),
1212
- te ? /* @__PURE__ */ E(T, {
1213
- color: "text-error",
1214
- variant: "body",
1215
- children: te
1216
- }) : null,
1217
- /* @__PURE__ */ E("div", {
1218
- style: Sn,
1219
- children: /* @__PURE__ */ E(he, {
1220
- columns: lt,
1221
- dataSource: ct,
1222
- fullWidth: !0
1223
- })
1224
- }),
1225
- R.length > 0 ? /* @__PURE__ */ D(ve, { children: [/* @__PURE__ */ E(T, {
1226
- component: "h3",
1227
- style: Cn,
1228
- variant: "h3",
1229
- children: "待生效的臨時設定"
1230
- }), /* @__PURE__ */ E("div", {
1231
- style: Sn,
1232
- children: /* @__PURE__ */ E(he, {
1233
- columns: dt,
1234
- dataSource: ut,
1235
- fullWidth: !0
1236
- })
1237
- })] }) : null,
1238
- /* @__PURE__ */ D(C, {
1239
- cancelText: "取消",
1240
- confirmText: "送出同意",
1241
- loading: p,
1242
- modalType: "standard",
1243
- onCancel: mt,
1244
- onClose: mt,
1245
- onConfirm: () => void ht(),
1246
- open: ie,
1247
- showModalFooter: !0,
1248
- showModalHeader: !0,
1249
- size: "regular",
1250
- supportingText: "可以留下同意的說明,內容會記錄在簽核歷程;不填也可以直接送出。",
1251
- title: "簽核意見",
1252
- children: [
1253
- te ? /* @__PURE__ */ E(T, {
1254
- color: "text-error",
1255
- role: "alert",
1256
- variant: "body",
1257
- children: te
1258
- }) : null,
1259
- i !== null && i.summary.length > 0 ? /* @__PURE__ */ D("div", {
1260
- style: yn,
1261
- children: [/* @__PURE__ */ E(T, {
1262
- variant: "body",
1263
- children: "將一併送出的補填欄位:"
1264
- }), i.summary.map((e) => /* @__PURE__ */ E(x, {
1265
- title: e.label,
1266
- children: /* @__PURE__ */ E(ce, { children: e.text })
1267
- }, e.fieldKey))]
1268
- }) : null,
1269
- /* @__PURE__ */ E("div", {
1270
- style: yn,
1271
- children: /* @__PURE__ */ E(n, {
1272
- label: "簽核意見",
1273
- name: "approveComment",
1274
- children: /* @__PURE__ */ E(ge, {
1275
- autoFocus: !0,
1276
- onChange: (e) => re(e.target.value),
1277
- placeholder: "選填,例如補充核准的條件或提醒事項",
1278
- ref: wn,
1279
- resize: "vertical",
1280
- rows: 4,
1281
- style: bn,
1282
- value: ne
1283
- })
1284
- })
1285
- })
1286
- ]
1287
- }),
1288
- /* @__PURE__ */ E(C, {
1289
- cancelText: "取消",
1290
- confirmButtonProps: {
1291
- disabled: !M,
1292
- variant: "destructive-primary"
1293
- },
1294
- confirmText: "送出拒絕",
1295
- loading: p,
1296
- modalStatusType: "error",
1297
- modalType: "standard",
1298
- onCancel: _t,
1299
- onClose: _t,
1300
- onConfirm: () => void H(),
1301
- open: fe,
1302
- showModalFooter: !0,
1303
- showModalHeader: !0,
1304
- size: "regular",
1305
- supportingText: "拒絕案件時必須留下原因,供發起人與後續追蹤查看。",
1306
- title: "拒絕原因",
1307
- children: /* @__PURE__ */ D("div", {
1308
- style: yn,
1309
- children: [/* @__PURE__ */ E(n, {
1310
- label: "拒絕原因",
1311
- name: "rejectReason",
1312
- required: !0,
1313
- children: /* @__PURE__ */ E(ge, {
1314
- autoFocus: !0,
1315
- onChange: (e) => {
1316
- S(e.target.value), de(null);
1317
- },
1318
- placeholder: "請說明拒絕原因",
1319
- ref: wn,
1320
- resize: "vertical",
1321
- rows: 4,
1322
- style: bn,
1323
- type: ue ? "error" : "default",
1324
- value: v
1325
- })
1326
- }), ue ? /* @__PURE__ */ E(T, {
1327
- color: "text-error",
1328
- variant: "body",
1329
- children: ue
1330
- }) : null]
1331
- })
1332
- }),
1333
- /* @__PURE__ */ E(C, {
1334
- cancelText: "取消",
1335
- confirmButtonProps: { disabled: !Oe },
1336
- confirmText: "送出轉派",
1337
- loading: p,
1338
- modalType: "standard",
1339
- onCancel: V,
1340
- onClose: V,
1341
- onConfirm: () => void bt(),
1342
- open: Ie,
1343
- showModalFooter: !0,
1344
- showModalHeader: !0,
1345
- size: "regular",
1346
- supportingText: "轉派後,原任務會保留轉派紀錄,新的待簽任務會指派給指定成員。",
1347
- title: "轉派簽核",
1348
- children: /* @__PURE__ */ D("div", {
1349
- style: xn,
1350
- children: [/* @__PURE__ */ E(n, {
1351
- label: "轉派對象",
1352
- name: "transferToMemberId",
1353
- required: !0,
1354
- children: /* @__PURE__ */ E(oe, {
1355
- asyncData: !0,
1356
- disabledOptionsFilter: !0,
1357
- emptyText: "沒有符合的成員",
1358
- inputProps: {
1359
- autoCapitalize: "none",
1360
- autoCorrect: "off",
1361
- name: "transfer-member-search",
1362
- spellCheck: !1
1363
- },
1364
- loading: Ae,
1365
- loadingText: "搜尋成員中...",
1366
- mode: "single",
1367
- onChange: (e) => ke(Nt(e)),
1368
- onSearch: yt,
1369
- onSearchTextChange: (e) => ke(Pt(e, Pe)),
1370
- onVisibilityChange: (e) => {
1371
- e && yt("");
1372
- },
1373
- options: [...Pe],
1374
- placeholder: "搜尋姓名或信箱",
1375
- searchDebounceTime: 300,
1376
- value: Oe
1377
- })
1378
- }), /* @__PURE__ */ E(n, {
1379
- label: "轉派說明",
1380
- name: "transferComment",
1381
- children: /* @__PURE__ */ E(ge, {
1382
- onChange: (e) => De(e.target.value),
1383
- placeholder: "可補充轉派原因",
1384
- ref: wn,
1385
- resize: "vertical",
1386
- rows: 4,
1387
- style: bn,
1388
- value: Ee
1389
- })
1390
- })]
1391
- })
1392
- }),
1393
- /* @__PURE__ */ E(C, {
1394
- cancelText: "取消",
1395
- confirmButtonProps: { disabled: !st || ot && !nt },
1396
- confirmText: "送出退回",
1397
- loading: p,
1398
- modalType: "standard",
1399
- onCancel: z,
1400
- onClose: z,
1401
- onConfirm: () => void xt(),
1402
- open: be,
1403
- showModalFooter: !0,
1404
- showModalHeader: !0,
1405
- size: "regular",
1406
- supportingText: "退回後,流程會回到指定節點並等待重新處理。",
1407
- title: "退回簽核",
1408
- children: /* @__PURE__ */ D("div", {
1409
- style: xn,
1410
- children: [/* @__PURE__ */ E(n, {
1411
- label: "退回節點",
1412
- name: "returnTargetNodeId",
1413
- required: !0,
1414
- children: /* @__PURE__ */ E(w, {
1415
- clearable: !1,
1416
- fullWidth: !0,
1417
- onChange: (e) => O(e?.id ?? null),
1418
- options: [...F],
1419
- placeholder: "選擇退回節點",
1420
- value: st
1421
- })
1422
- }), /* @__PURE__ */ E(n, {
1423
- hintText: ot ? "此關卡設定退回時必須填寫意見。" : void 0,
1424
- label: "退回說明",
1425
- name: "returnComment",
1426
- required: ot,
1427
- children: /* @__PURE__ */ E(ge, {
1428
- onChange: (e) => _e(e.target.value),
1429
- placeholder: ot ? "請說明退回原因" : "可補充需要修改的內容",
1430
- ref: wn,
1431
- resize: "vertical",
1432
- rows: 4,
1433
- style: bn,
1434
- value: me
1435
- })
1436
- })]
1437
- })
1438
- }),
1439
- /* @__PURE__ */ E(C, {
1440
- cancelText: "取消",
1441
- confirmButtonProps: { disabled: Ft },
1442
- confirmText: "送出",
1443
- loading: Xe,
1444
- modalType: "standard",
1445
- onCancel: Ct,
1446
- onClose: Ct,
1447
- onConfirm: () => void Et(),
1448
- open: Ke,
1449
- showModalFooter: !0,
1450
- showModalHeader: !0,
1451
- size: "regular",
1452
- supportingText: En[A],
1453
- title: Tn[A],
1454
- children: /* @__PURE__ */ D("div", {
1455
- style: xn,
1456
- children: [
1457
- J ? /* @__PURE__ */ E(n, {
1458
- label: "通知時機",
1459
- name: "adhocNotifyMode",
1460
- required: !0,
1461
- children: /* @__PURE__ */ E(w, {
1462
- clearable: !1,
1463
- fullWidth: !0,
1464
- onChange: (e) => Je(e?.id === "COMPLETION_NOTIFY" ? "COMPLETION_NOTIFY" : "STAGE_NOTIFY"),
1465
- options: [{
1466
- id: "STAGE_NOTIFY",
1467
- name: Tn.STAGE_NOTIFY
1468
- }, {
1469
- id: "COMPLETION_NOTIFY",
1470
- name: Tn.COMPLETION_NOTIFY
1471
- }],
1472
- value: {
1473
- id: A,
1474
- name: Tn[A]
1475
- }
1476
- })
1477
- }) : null,
1478
- J ? /* @__PURE__ */ E(n, {
1479
- label: "通知對象類型",
1480
- name: "adhocTargetKind",
1481
- required: !0,
1482
- children: /* @__PURE__ */ E(w, {
1483
- clearable: !1,
1484
- fullWidth: !0,
1485
- onChange: (e) => $e(e?.id === "WEBHOOK" ? "WEBHOOK" : "MEMBER"),
1486
- options: [...On],
1487
- value: Y
1488
- })
1489
- }) : null,
1490
- J && Qe === "WEBHOOK" ? /* @__PURE__ */ E(n, {
1491
- label: "Webhook URL",
1492
- name: "adhocWebhookUrl",
1493
- required: !0,
1494
- children: /* @__PURE__ */ E(le, {
1495
- fullWidth: !0,
1496
- onChange: (e) => tt(e.target.value),
1497
- placeholder: "https://example.com/webhook",
1498
- value: et
1499
- })
1500
- }) : /* @__PURE__ */ E(n, {
1501
- label: J ? "通知對象" : "簽核對象",
1502
- name: "adhocMemberId",
1503
- required: !0,
1504
- children: /* @__PURE__ */ E(oe, {
1505
- asyncData: !0,
1506
- disabledOptionsFilter: !0,
1507
- emptyText: "沒有符合的成員",
1508
- inputProps: {
1509
- autoCapitalize: "none",
1510
- autoCorrect: "off",
1511
- name: "adhoc-member-search",
1512
- spellCheck: !1
1513
- },
1514
- loading: He,
1515
- loadingText: "搜尋成員中...",
1516
- menuMaxHeight: 320,
1517
- mode: "multiple",
1518
- onChange: (e) => Ve(e.map(Nt).filter(Mt)),
1519
- onSearch: Tt,
1520
- onVisibilityChange: (e) => {
1521
- e && Tt("");
1522
- },
1523
- options: [...We],
1524
- overflowStrategy: "wrap",
1525
- placeholder: "搜尋姓名或信箱,可加入多位",
1526
- searchDebounceTime: 300,
1527
- value: [...Be]
1528
- })
1529
- }),
1530
- A === "PRE_APPROVAL" ? /* @__PURE__ */ E(n, {
1531
- label: "拒簽處理方式",
1532
- name: "adhocOnReject",
1533
- required: !0,
1534
- children: /* @__PURE__ */ E(w, {
1535
- clearable: !1,
1536
- fullWidth: !0,
1537
- onChange: (e) => j(e?.id === "RETURN_TO_ORIGIN" ? "RETURN_TO_ORIGIN" : "REJECT_INSTANCE"),
1538
- options: [...Dn],
1539
- value: It
1540
- })
1541
- }) : null,
1542
- J ? null : /* @__PURE__ */ E(n, {
1543
- label: "說明",
1544
- name: "adhocComment",
1545
- children: /* @__PURE__ */ E(ge, {
1546
- onChange: (e) => ze(e.target.value),
1547
- placeholder: "可補充原因",
1548
- ref: wn,
1549
- resize: "vertical",
1550
- rows: 3,
1551
- style: bn,
1552
- value: Re
1553
- })
1554
- })
1555
- ]
1556
- })
1557
- })
1558
- ] });
1559
- });
1560
- function An(e, t) {
1561
- try {
1562
- let n = JSON.parse(e.targetValueJson);
1563
- if (n.memberIds?.length) return n.memberIds.map((e) => G(e, t)).join("、");
1564
- if (n.webhookUrl) return n.webhookUrl;
1565
- if (n.positionId) return `職位 ${n.positionId}`;
1566
- if (n.orgUnitId) return `部門 ${n.orgUnitId}`;
1567
- } catch {}
1568
- return e.targetKind;
1569
- }
1570
- function jn(e, t) {
1571
- if (e.isAdhoc || e.status !== "PENDING" && e.status !== "IN_PROGRESS") return 0;
1572
- let n = t?.nodes.find((t) => t.id === e.nodeId);
1573
- return n?.type === "userTask" ? Xe(n).size : 0;
1574
- }
1575
- //#endregion
1576
- //#region src/views/instances/detail/sections/InstanceSignaturesSection.tsx
1577
- var Mn = {
1578
- display: "grid",
1579
- gap: 16
1580
- };
1581
- function Nn({ signatureVerification: e, signatures: n }) {
1582
- let r = _(() => n.map((e) => ({
1583
- algorithm: e.algorithm,
1584
- hashLabel: W(e.signedPayloadHash),
1585
- key: e.id,
1586
- keyVersion: e.keyVersion,
1587
- signedAtLabel: t(e.signedAt),
1588
- signerMemberId: e.signerMemberId
1589
- })), [n]), i = _(() => [
1590
- {
1591
- dataIndex: "signerMemberId",
1592
- key: "signerMemberId",
1593
- title: "簽章者",
1594
- width: 160
1595
- },
1596
- {
1597
- dataIndex: "algorithm",
1598
- key: "algorithm",
1599
- title: "演算法",
1600
- width: 150
1601
- },
1602
- {
1603
- dataIndex: "keyVersion",
1604
- key: "keyVersion",
1605
- title: "Key 版本",
1606
- width: 100
1607
- },
1608
- {
1609
- dataIndex: "hashLabel",
1610
- key: "hashLabel",
1611
- title: "Payload Hash",
1612
- width: 180
1613
- },
1614
- {
1615
- dataIndex: "signedAtLabel",
1616
- key: "signedAtLabel",
1617
- title: "簽章時間",
1618
- width: 220
1619
- }
1620
- ], []);
1621
- return /* @__PURE__ */ D("div", {
1622
- style: Mn,
1623
- children: [
1624
- /* @__PURE__ */ E(T, {
1625
- component: "h2",
1626
- variant: "h3",
1627
- children: "簽章"
1628
- }),
1629
- /* @__PURE__ */ E(T, {
1630
- color: e?.valid ? "text-success" : "text-error",
1631
- variant: "body",
1632
- children: e ? e.valid ? `簽章鏈已驗證,共 ${e.checkedCount} 筆。` : `簽章鏈驗證失敗:${e.errors.join("、")}` : "尚無簽章紀錄。"
1633
- }),
1634
- r.length > 0 ? /* @__PURE__ */ E(he, {
1635
- columns: i,
1636
- dataSource: r,
1637
- fullWidth: !0
1638
- }) : null
1639
- ]
1640
- });
1641
- }
1642
- //#endregion
1643
- //#region src/views/instances/detail/sections/InstanceHistorySection.tsx
1644
- var Pn = {
1645
- display: "grid",
1646
- gap: 16
1647
- }, Fn = {
1648
- cursor: "help",
1649
- textDecoration: "underline dotted",
1650
- textUnderlineOffset: 3
1651
- }, In = {
1652
- borderLeftColor: "var(--mzn-color-border)",
1653
- borderLeftStyle: "solid",
1654
- borderLeftWidth: 2,
1655
- fontSize: "var(--mzn-typography-h3-font-size)",
1656
- lineHeight: "var(--mzn-typography-h3-line-height)",
1657
- marginTop: 4,
1658
- paddingLeft: 8,
1659
- whiteSpace: "pre-wrap"
1660
- }, Ln = { color: "var(--mzn-color-text-secondary)" }, Rn = {
1661
- ...In,
1662
- borderLeftColor: "var(--mzn-color-text-error)",
1663
- color: "var(--mzn-color-text-error)"
1664
- };
1665
- function zn(...e) {
1666
- return e.filter((e) => H(e ?? null)).join(" ");
1667
- }
1668
- var Bn = ie(function({ className: e, descriptionParts: t, error: n, forcePending: r = !1, index: i = 0, orientation: a, status: o = "pending", title: s, type: c = "number", ...l }, u) {
1669
- let d = r ? "pending" : o, f = t.filter((e) => e.type !== "comment"), p = t.filter((e) => e.type === "comment");
1670
- return /* @__PURE__ */ D("div", {
1671
- ...l,
1672
- className: zn(L.host, c === "dot" ? L.dot : null, n && d !== "processing" ? L.error : null, a === "horizontal" ? L.horizontal : null, c === "number" ? L.number : null, d === "pending" ? L.pending : null, d === "processing" ? L.processing : null, n && d === "processing" ? L.processingError : null, !n && d === "succeeded" ? L.succeeded : null, a === "vertical" ? L.vertical : null, e),
1673
- ref: u,
1674
- children: [c === "dot" ? /* @__PURE__ */ E("span", { className: zn(L.statusIndicator, L.statusIndicatorDot) }) : /* @__PURE__ */ E("span", {
1675
- className: L.statusIndicator,
1676
- children: i + 1
1677
- }), /* @__PURE__ */ D("div", {
1678
- className: L.textContainer,
1679
- children: [
1680
- /* @__PURE__ */ D(T, {
1681
- className: L.title,
1682
- variant: "label-primary-highlight",
1683
- children: [s, /* @__PURE__ */ E("span", { className: L.titleConnectLine })]
1684
- }),
1685
- f.length > 0 ? /* @__PURE__ */ E(T, {
1686
- className: L.description,
1687
- variant: "caption",
1688
- children: f.map((e, t) => /* @__PURE__ */ D(re, { children: [t > 0 ? " · " : null, Vn(e)] }, `${e.type}-${t}`))
1689
- }) : null,
1690
- p.map((e, t) => /* @__PURE__ */ D(T, {
1691
- style: e.tone === "danger" ? Rn : In,
1692
- variant: "body",
1693
- children: [/* @__PURE__ */ D("span", {
1694
- style: e.tone === "danger" ? void 0 : Ln,
1695
- children: [e.label, ":"]
1696
- }), e.text]
1697
- }, `comment-${t}`))
1698
- ]
1699
- })]
1700
- });
1701
- });
1702
- function Vn(e) {
1703
- return e.type === "text" ? e.text : e.email?.trim() ? /* @__PURE__ */ D(ve, { children: [
1704
- e.prefix,
1705
- ":",
1706
- /* @__PURE__ */ E(_e, {
1707
- title: e.email,
1708
- children: ({ ref: t, ...n }) => /* @__PURE__ */ E("span", {
1709
- ...n,
1710
- "data-testid": e.memberId ? `member-tooltip-${e.memberId}` : void 0,
1711
- ref: t,
1712
- style: Fn,
1713
- children: e.label
1714
- })
1715
- })
1716
- ] }) : `${e.prefix}:${e.label}`;
1717
- }
1718
- function Hn({ activityLogs: e, formSchema: t = null, instanceState: n, memberProfilesById: r, signatureVerification: i, signaturesById: a, taskDecisionsByTaskId: o, tasks: s, workflowSnapshot: c, workflowTokens: l }) {
1719
- let u = rn(e, s, l, c, n, r, o, a, i, t), d = Lt(u), f = u.map((e) => ({
1720
- ...e,
1721
- descriptionParts: e.descriptionParts.filter(Y)
1722
- }));
1723
- return /* @__PURE__ */ D("div", {
1724
- style: Pn,
1725
- children: [/* @__PURE__ */ E(T, {
1726
- component: "h2",
1727
- variant: "h3",
1728
- children: "歷程"
1729
- }), f.length > 0 ? /* @__PURE__ */ E(me, {
1730
- currentStep: d,
1731
- orientation: "vertical",
1732
- type: "dot",
1733
- children: f.map((e) => /* @__PURE__ */ E(Bn, {
1734
- descriptionParts: e.descriptionParts,
1735
- error: e.error,
1736
- forcePending: e.forcePending,
1737
- title: e.title
1738
- }, e.id))
1739
- }) : /* @__PURE__ */ E(T, {
1740
- color: "text-neutral",
1741
- variant: "body",
1742
- children: "尚無歷程紀錄。"
1743
- })]
1744
- });
1745
- }
1746
- //#endregion
1747
- //#region src/views/instances/detail/sections/InstanceWebhookDeliveriesSection.tsx
1748
- var Un = {
1749
- display: "grid",
1750
- gap: 16
1751
- }, Wn = {
1752
- display: "grid",
1753
- gap: 2
1754
- }, Gn = {
1755
- overflowWrap: "anywhere",
1756
- whiteSpace: "pre-wrap"
1757
- };
1758
- function Kn({ deliveries: e, onRetry: t, readNodeLabel: n }) {
1759
- let [r, i] = y(null), [a, o] = y(!1), [s, c] = y(null), l = _(() => e.map((e) => ({
1760
- delivery: e,
1761
- key: e.id
1762
- })), [e]), u = _(() => [
1763
- {
1764
- key: "endpoint",
1765
- render: ({ delivery: e }) => /* @__PURE__ */ D("div", {
1766
- style: Wn,
1767
- children: [/* @__PURE__ */ E(T, {
1768
- component: "span",
1769
- variant: "body",
1770
- children: e.endpointLabel ?? e.endpointKey
1771
- }), /* @__PURE__ */ D(T, {
1772
- color: "text-neutral",
1773
- component: "span",
1774
- variant: "caption",
1775
- children: [
1776
- e.endpointKey,
1777
- "@",
1778
- e.endpointVersion,
1779
- " ·",
1780
- " ",
1781
- n(e.nodeId)
1782
- ]
1783
- })]
1784
- }),
1785
- title: "外部系統",
1786
- width: 240
1787
- },
1788
- {
1789
- key: "status",
1790
- render: ({ delivery: e }) => /* @__PURE__ */ E(qn, { status: e.status }),
1791
- title: "狀態",
1792
- width: 120
1793
- },
1794
- {
1795
- key: "attemptCount",
1796
- render: ({ delivery: e }) => /* @__PURE__ */ E(T, {
1797
- component: "span",
1798
- variant: "body",
1799
- children: e.attemptCount
1800
- }),
1801
- title: "嘗試次數",
1802
- width: 100
1803
- },
1804
- {
1805
- key: "lastError",
1806
- render: ({ delivery: e }) => e.lastErrorCode && e.status !== "SENT" ? /* @__PURE__ */ D("div", {
1807
- style: Wn,
1808
- children: [/* @__PURE__ */ E(T, {
1809
- color: "text-error",
1810
- component: "span",
1811
- variant: "body",
1812
- children: e.lastErrorCode
1813
- }), e.lastErrorDetail ? /* @__PURE__ */ E(T, {
1814
- color: "text-neutral",
1815
- component: "span",
1816
- style: Gn,
1817
- variant: "caption",
1818
- children: e.lastErrorDetail
1819
- }) : null]
1820
- }) : /* @__PURE__ */ E(T, {
1821
- color: "text-neutral",
1822
- component: "span",
1823
- variant: "body",
1824
- children: "—"
1825
- }),
1826
- title: "最後錯誤",
1827
- width: 280
1828
- },
1829
- {
1830
- key: "time",
1831
- render: ({ delivery: e }) => /* @__PURE__ */ E(T, {
1832
- component: "span",
1833
- variant: "body",
1834
- children: Jn(e)
1835
- }),
1836
- title: "時間",
1837
- width: 220
1838
- }
1839
- ], [n]), d = _(() => ({
1840
- render: ({ delivery: e }) => e.status === "FAILED" && e.attemptCount > 0 ? [{
1841
- disabled: () => a,
1842
- icon: qe,
1843
- iconType: "leading",
1844
- name: "重新傳送",
1845
- onClick: () => {
1846
- c(null), i(e);
1847
- }
1848
- }] : [],
1849
- variant: "base-secondary",
1850
- width: 140
1851
- }), [a]);
1852
- async function f() {
1853
- if (r) {
1854
- o(!0), c(null);
1855
- try {
1856
- await t(r), i(null);
1857
- } catch (e) {
1858
- i(null), c(e instanceof Error && e.message ? e.message : "重新傳送失敗,請稍後再試。");
1859
- } finally {
1860
- o(!1);
1861
- }
1862
- }
1863
- }
1864
- return /* @__PURE__ */ D("div", {
1865
- style: Un,
1866
- children: [
1867
- /* @__PURE__ */ E(T, {
1868
- component: "h2",
1869
- variant: "h3",
1870
- children: "外部系統通知"
1871
- }),
1872
- s ? /* @__PURE__ */ E(T, {
1873
- color: "text-error",
1874
- variant: "body",
1875
- children: s
1876
- }) : null,
1877
- l.length > 0 ? /* @__PURE__ */ E(he, {
1878
- actions: d,
1879
- columns: u,
1880
- dataSource: l,
1881
- fullWidth: !0
1882
- }) : /* @__PURE__ */ E(T, {
1883
- color: "text-neutral",
1884
- variant: "body",
1885
- children: "此案件沒有外部系統通知。"
1886
- }),
1887
- /* @__PURE__ */ E(C, {
1888
- cancelText: "取消",
1889
- confirmText: "重新傳送",
1890
- loading: a,
1891
- modalStatusType: "info",
1892
- modalType: "standard",
1893
- onCancel: () => i(null),
1894
- onClose: () => i(null),
1895
- onConfirm: () => void f(),
1896
- open: !!r,
1897
- showModalFooter: !0,
1898
- showModalHeader: !0,
1899
- supportingText: "會以相同的投遞編號重新送出,接收端可據此避免重複處理。",
1900
- title: "重新傳送通知",
1901
- children: /* @__PURE__ */ D(T, {
1902
- variant: "body",
1903
- children: [
1904
- "確定要重新通知「",
1905
- r?.endpointLabel ?? r?.endpointKey ?? "",
1906
- "」嗎?"
1907
- ]
1908
- })
1909
- })
1910
- ]
1911
- });
1912
- }
1913
- function qn({ status: e }) {
1914
- return e === "SENT" ? /* @__PURE__ */ E(se, {
1915
- size: "sub",
1916
- text: "已送達",
1917
- variant: "dot-success"
1918
- }) : e === "FAILED" ? /* @__PURE__ */ E(se, {
1919
- size: "sub",
1920
- text: "失敗",
1921
- variant: "dot-error"
1922
- }) : /* @__PURE__ */ E(se, {
1923
- size: "sub",
1924
- text: e === "PENDING" ? "等待傳送" : "傳送中",
1925
- variant: "dot-info"
1926
- });
1927
- }
1928
- function Jn(e) {
1929
- return e.sentAt ? `送達:${t(e.sentAt)}` : e.status === "PENDING" && e.nextRetryAt ? `下次重試:${t(e.nextRetryAt)}` : e.lastAttemptAt ? `最後嘗試:${t(e.lastAttemptAt)}` : `建立:${t(e.createdAt)}`;
1930
- }
1931
- //#endregion
1932
- //#region src/views/instances/viewer-field-access.ts
1933
- function Yn(e, t) {
1934
- let n = new Map(t.map((e) => [e.id, e]));
1935
- 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));
1936
- }
1937
- function Xn({ activityLogs: e, actingTask: t, instance: n, tasks: r }) {
1938
- let i = n.workflowSnapshot;
1939
- return $e({
1940
- definition: i,
1941
- fieldKeys: (n.formDefinitionSnapshot.schema?.fields ?? []).map((e) => e.fieldKey),
1942
- isAdhocTask: t?.isAdhoc ?? !1,
1943
- nodeId: t?.nodeId ?? null,
1944
- revealedFieldKeys: Ze(i, Yn(e, r))
1945
- });
1946
- }
1947
- //#endregion
1948
- //#region src/views/instances/detail/InstanceDetailView.tsx
1949
- function Zn(e) {
1950
- return `還有 ${new Set(Object.keys(e).map(Qe)).size} 個補填欄位需要完成`;
1951
- }
1952
- var Qn = 3e3, $n = 40, er = 184, tr = 96, nr = {
1953
- display: "grid",
1954
- gap: 16
1955
- }, rr = {
1956
- background: "#f8fafc",
1957
- border: "1px solid #e2e8f0",
1958
- borderRadius: 8,
1959
- height: "min(64vh, 620px)",
1960
- minHeight: 440,
1961
- overflow: "hidden",
1962
- width: "min(80vw, 1040px)"
1963
- }, ir = {
1964
- background: "#ffffff",
1965
- border: "1px solid #cbd5e1",
1966
- borderRadius: 8,
1967
- boxShadow: "0 8px 18px rgba(15, 23, 42, 0.08)",
1968
- display: "grid",
1969
- gap: 6,
1970
- minHeight: 82,
1971
- padding: 12,
1972
- width: 184
1973
- }, ar = {
1974
- borderRadius: 999,
1975
- fontSize: 12,
1976
- fontWeight: 600,
1977
- justifySelf: "start",
1978
- lineHeight: "18px",
1979
- padding: "0 8px"
1980
- }, or = {
1981
- color: "#64748b",
1982
- fontSize: 12,
1983
- overflow: "hidden",
1984
- textOverflow: "ellipsis",
1985
- whiteSpace: "nowrap"
1986
- }, sr = { opacity: 0 }, cr = {
1987
- display: "flex",
1988
- flexWrap: "wrap",
1989
- gap: 8
1990
- }, lr = {
1991
- alignItems: "center",
1992
- background: "#ffffff",
1993
- border: "1px solid #cbd5e1",
1994
- borderRadius: 8,
1995
- color: "#334155",
1996
- display: "inline-flex",
1997
- fontSize: 12,
1998
- fontWeight: 600,
1999
- gap: 6,
2000
- lineHeight: "20px",
2001
- padding: "4px 8px"
2002
- }, ur = {
2003
- display: "grid",
2004
- gap: 16
2005
- }, dr = { workflowRuntime: xr };
2006
- function fr({ instanceId: i, showAttachments: a = !0, showForm: ne = !0, showHistory: re = !0, showSignatures: ie = !0, showTasks: ae = !0, showWebhookDeliveries: oe = !0 }) {
2007
- let { member: se } = e(), x = se?.memberId ?? null, ce = oe && r(se), [S, le] = y([]), [w, me] = y(null), [he, _e] = y([]), [ye, xe] = y([]), [Se, Ce] = y([]), [O, je] = y([]), [Me, Ne] = y(null), [k, ze] = y([]), [Be, He] = y([]), [Ue, qe] = y([]), [Ye, j] = y(null), [Ze, Qe] = y(!0), [$e, M] = y(!1), [P, F] = y(!1), [I, at] = y(!1), [ot, L] = y(""), [R, st] = y(!1), [ct, lt] = y({}), [ut, dt] = y({}), { clearAfterResubmit: ft, comment: pt, setComment: ht } = dn(i), [gt, vt] = y({}), [z, B] = y(null), [V, yt] = y(null), [bt, xt] = y([]), St = ot.trim(), W = v(null), wt = v(0), Tt = O.some((e) => e.status === "PENDING" || e.status === "DELIVERY_IN_PROGRESS");
2008
- g(() => {
2009
- nn();
2010
- }, [x, i]), g(() => {
2011
- if (!ce || !Tt || wt.current >= $n) return;
2012
- let e = setTimeout(() => {
2013
- wt.current += 1, on();
2014
- }, Qn);
2015
- return () => clearTimeout(e);
2016
- }, [
2017
- ce,
2018
- Tt,
2019
- O
2020
- ]), g(() => {
2021
- dt(w?.formData ?? {}), vt({});
2022
- }, [w]);
2023
- let Et = h((e, t) => {
2024
- vt((n) => {
2025
- let r = n[e];
2026
- return r?.hasValue === t.hasValue && r.status === t.status ? n : {
2027
- ...n,
2028
- [e]: {
2029
- hasValue: t.hasValue,
2030
- status: t.status
2031
- }
2032
- };
2033
- });
2034
- }, []), K = _(() => Ot(k, x), [x, k]), q = _(() => K && w ? w.workflowSnapshot.nodes.find((e) => e.id === K.nodeId) ?? null : null, [K, w]), kt = q?.type === "userTask" && q.data.returnBehavior.allowReturn, At = q?.type === "userTask" && q.data.allowReject !== !1, jt = q?.type === "userTask" && q.data.allowTransfer !== !1, Mt = q?.type === "userTask" && q.data.allowAddSigner, Nt = !(!w || w.initiatorMemberId !== x || w.state !== "RUNNING" && w.state !== "RETURNED"), Pt = !!(w && w.initiatorMemberId === x && w.state === "RETURNED"), J = _(() => K && !K.isAdhoc && q?.type === "userTask" && Xe(q).size > 0 ? q : null, [K, q]), Ft = J ? K?.id ?? null : null, [It, Y] = y({}), [Lt, Rt] = y({}), [zt, Bt] = y(!1);
2035
- g(() => {
2036
- Y({}), Rt({}), Bt(!1);
2037
- }, [Ft]);
2038
- let X = w?.formDefinitionSnapshot.schema ?? null, Z = _(() => J && X ? o(X, J) : null, [J, X]), Q = _(() => Z && w ? et(Z.fields, {
2039
- ...w.formData,
2040
- ...It
2041
- }) : null, [
2042
- It,
2043
- Z,
2044
- w
2045
- ]), Vt = _(() => J && Z && Q && w ? c({
2046
- draft: It,
2047
- node: J,
2048
- schema: Z,
2049
- stored: w.formData,
2050
- values: Q
2051
- }) : {}, [
2052
- It,
2053
- J,
2054
- Z,
2055
- Q,
2056
- w
2057
- ]), Ht = _(() => w ? Xn({
2058
- activityLogs: S,
2059
- actingTask: K,
2060
- instance: w,
2061
- tasks: k
2062
- }) : void 0, [
2063
- S,
2064
- K,
2065
- w,
2066
- k
2067
- ]), Ut = _(() => w ? d(w.workflowSnapshot, J) : void 0, [J, w]), Wt = _(() => new Map(Ue.map((e) => [e.memberId, e])), [Ue]), Gt = _(() => J && Q && X && w?.formDataFingerprint ? {
2068
- expectedFormDataFingerprint: w.formDataFingerprint,
2069
- formData: p(Vt, J),
2070
- summary: l(X, J, Vt, new Map([...Wt.keys()].map((e) => [e, G(e, Wt)])))
2071
- } : null, [
2072
- Vt,
2073
- J,
2074
- Q,
2075
- w,
2076
- Wt,
2077
- X
2078
- ]);
2079
- function Kt(e) {
2080
- if (!J) return;
2081
- let t = Xe(J), n = Object.entries(e).filter(([e, n]) => t.has(e) && JSON.stringify(n) !== JSON.stringify(Q?.[e]));
2082
- Y((e) => ({
2083
- ...e,
2084
- ...Object.fromEntries(n)
2085
- })), Rt({});
2086
- }
2087
- function qt() {
2088
- if (J && !w?.formDataFingerprint) ue.error("無法確認表單版本,請重新整理頁面後再同意。");
2089
- else {
2090
- if (J && Q && X && w?.formDefinitionSnapshot.uiSchema) {
2091
- let e = nt({
2092
- schema: te(X, J),
2093
- uiSchema: w.formDefinitionSnapshot.uiSchema,
2094
- values: Q
2095
- });
2096
- if (!e.valid) {
2097
- Rt(e.errors), e.firstInvalidFieldKey && tt(e.firstInvalidFieldKey), ue.warning(Zn(e.errors));
2098
- return;
2099
- }
2100
- }
2101
- W.current?.handleApprove();
2102
- }
2103
- }
2104
- function Jt(e) {
2105
- if (!J || !X) return !1;
2106
- if (ee(e)) return Bt(!0), !0;
2107
- let t = s(e, X, J);
2108
- return t ? (Rt(t), tt(Object.keys(t)[0] ?? ""), ue.warning(Zn(t)), !0) : !1;
2109
- }
2110
- async function Yt() {
2111
- await nn(), Bt(!1);
2112
- }
2113
- let Xt = _(() => un(he), [he]), Zt = _(() => new Map(Se.map((e) => [e.id, e])), [Se]), Qt = _(() => w ? _r(w.workflowSnapshot) : null, [w]), $t = _(() => w && Qt ? gr(Qt, k, Be, w.state) : [], [
2114
- w,
2115
- Qt,
2116
- k,
2117
- Be
2118
- ]), en = _(() => Qt ? vr(Qt) : [], [Qt]), tn = _(() => w ? mr(w.workflowSnapshot) : [], [w]);
2119
- async function nn() {
2120
- Qe(!0), j(null);
2121
- try {
2122
- let e = await De(i);
2123
- le(e.activityLogs), me(e.instance), ze(e.tasks), He(e.workflowTokens);
2124
- let t = await we(e.instance.id), [n, r, a, o, s] = await Promise.all([
2125
- ln(e.tasks),
2126
- sn({
2127
- ...e,
2128
- adhocDirectives: t
2129
- }),
2130
- Te(e.instance.id),
2131
- Ae(e.instance.id),
2132
- rn(e.instance.id)
2133
- ]);
2134
- _e(n), qe(r), xe(a), Ce(o.signatures), Ne(o.verification), xt(t), je(s);
2135
- } catch (e) {
2136
- j(U(e));
2137
- } finally {
2138
- Qe(!1);
2139
- }
2140
- }
2141
- async function rn(e) {
2142
- return ce ? Ee(e).catch(() => []) : [];
2143
- }
2144
- async function an(e) {
2145
- await Fe(e.id), wt.current = 0, await nn();
2146
- }
2147
- async function on() {
2148
- let e = await rn(i);
2149
- e.some((e) => e.status === "PENDING" || e.status === "DELIVERY_IN_PROGRESS") ? je(e) : await nn();
2150
- }
2151
- async function cn(e, t) {
2152
- if (!x) throw Error("尚未登入,無法上傳附件");
2153
- return { id: (await Ie({
2154
- file: t,
2155
- formFieldPath: `form.${e.fieldKey}`
2156
- })).id };
2157
- }
2158
- async function fn(e) {
2159
- if (!x) return;
2160
- let t = await Oe({ id: e.id });
2161
- window.open(t, "_blank", "noopener,noreferrer");
2162
- }
2163
- async function pn(e) {
2164
- if (!x) return;
2165
- let t = await ke({ id: e.id });
2166
- B(e), yt(t);
2167
- }
2168
- async function mn() {
2169
- if (x && w && Nt) {
2170
- M(!0), j(null), lt({});
2171
- try {
2172
- await be({
2173
- cancelledByMemberId: x,
2174
- comment: St || null,
2175
- instanceId: w.id
2176
- }), L(""), st(!1), await nn();
2177
- } catch (e) {
2178
- j(U(e));
2179
- } finally {
2180
- M(!1);
2181
- }
2182
- }
2183
- }
2184
- async function hn() {
2185
- if (!x || !w || !Pt) return;
2186
- M(!0), j(null), lt({});
2187
- let e = m(Object.values(gt));
2188
- if (e) {
2189
- j(e), M(!1);
2190
- return;
2191
- }
2192
- let t = w.formDefinitionSnapshot.schema ? u(w.formDefinitionSnapshot.schema, w.workflowSnapshot) : null, n = f(t ? et(t.fields, ut) : ut, w.workflowSnapshot);
2193
- if (t && w.formDefinitionSnapshot.uiSchema) {
2194
- let e = nt({
2195
- schema: t,
2196
- uiSchema: w.formDefinitionSnapshot.uiSchema,
2197
- values: n
2198
- });
2199
- if (!e.valid) {
2200
- lt(e.errors), j("請先補齊必填欄位。"), e.firstInvalidFieldKey && tt(e.firstInvalidFieldKey), M(!1);
2201
- return;
2202
- }
2203
- }
2204
- try {
2205
- await Pe({
2206
- comment: pt,
2207
- formData: n,
2208
- initiatorMemberId: x,
2209
- instanceId: w.id,
2210
- title: w.title
2211
- }), ft(w.id), await nn();
2212
- } catch (e) {
2213
- j(U(e));
2214
- } finally {
2215
- M(!1);
2216
- }
2217
- }
2218
- let $ = $e || P;
2219
- return /* @__PURE__ */ D(ve, { children: [
2220
- /* @__PURE__ */ E(de, { children: /* @__PURE__ */ D(Le, {
2221
- description: w ? [
2222
- Ct(w.state),
2223
- t(w.startedAt),
2224
- _t(w, Wt)
2225
- ].filter(H).join(" · ") : "載入案件內容。",
2226
- title: w?.title ?? "簽核案件",
2227
- children: [
2228
- w ? /* @__PURE__ */ E(b, {
2229
- "aria-label": "查看流程圖",
2230
- icon: A,
2231
- iconType: "icon-only",
2232
- onClick: () => at(!0),
2233
- title: "查看流程圖",
2234
- variant: "base-secondary",
2235
- children: "流程圖"
2236
- }) : null,
2237
- Nt ? /* @__PURE__ */ E(b, {
2238
- disabled: $,
2239
- icon: Ve,
2240
- iconType: "leading",
2241
- onClick: () => st(!0),
2242
- variant: "destructive-secondary",
2243
- children: "取消案件"
2244
- }) : null,
2245
- K ? /* @__PURE__ */ D(ve, { children: [
2246
- Mt ? /* @__PURE__ */ D(ve, { children: [/* @__PURE__ */ E(b, {
2247
- disabled: $,
2248
- icon: Ge,
2249
- iconType: "leading",
2250
- onClick: () => W.current?.openAdhocModal("COUNTERSIGN"),
2251
- variant: "base-secondary",
2252
- children: "會簽"
2253
- }, "adhoc-countersign"), /* @__PURE__ */ E(b, {
2254
- disabled: $,
2255
- icon: Ge,
2256
- iconType: "leading",
2257
- onClick: () => W.current?.openAdhocModal("PRE_APPROVAL"),
2258
- variant: "base-secondary",
2259
- children: "加簽"
2260
- }, "adhoc-pre-approval")] }) : null,
2261
- /* @__PURE__ */ E(b, {
2262
- disabled: $,
2263
- icon: We,
2264
- iconType: "leading",
2265
- onClick: () => W.current?.openAdhocModal("STAGE_NOTIFY"),
2266
- variant: "base-secondary",
2267
- children: "通知設定"
2268
- }, "adhoc-notify"),
2269
- kt ? /* @__PURE__ */ E(b, {
2270
- disabled: $,
2271
- icon: Ke,
2272
- iconType: "leading",
2273
- onClick: () => W.current?.openReturnModal(),
2274
- variant: "base-secondary",
2275
- children: "退回"
2276
- }, "task-return") : null,
2277
- jt ? /* @__PURE__ */ E(b, {
2278
- disabled: $,
2279
- icon: Je,
2280
- iconType: "leading",
2281
- onClick: () => W.current?.openTransferModal(),
2282
- variant: "base-secondary",
2283
- children: "轉派"
2284
- }, "task-transfer") : null,
2285
- At ? /* @__PURE__ */ E(b, {
2286
- disabled: $,
2287
- icon: Ve,
2288
- iconType: "leading",
2289
- onClick: () => W.current?.openRejectModal(),
2290
- variant: "destructive-secondary",
2291
- children: "拒絕"
2292
- }, "task-reject") : null,
2293
- /* @__PURE__ */ E(b, {
2294
- disabled: $,
2295
- icon: Re,
2296
- iconType: "leading",
2297
- onClick: qt,
2298
- variant: "base-primary",
2299
- children: "同意"
2300
- }, "task-approve")
2301
- ] }) : null
2302
- ]
2303
- }) }),
2304
- /* @__PURE__ */ D(pe, { children: [
2305
- ne ? /* @__PURE__ */ E(fe, { children: /* @__PURE__ */ E(gn, {
2306
- canResubmitInstance: Pt,
2307
- deciding: $e,
2308
- error: Ye,
2309
- fieldAccess: Ht,
2310
- fieldLabelMarkers: Ut,
2311
- fill: Z && Q && J ? {
2312
- errors: Lt,
2313
- fieldCount: Xe(J).size,
2314
- onChange: Kt,
2315
- schema: Z,
2316
- value: Q
2317
- } : null,
2318
- instance: w,
2319
- loading: Ze,
2320
- onDataSourceStateChange: Et,
2321
- onReloadAfterConflict: zt ? () => void Yt() : null,
2322
- onResubmitFormChange: (e) => {
2323
- dt(e), lt({});
2324
- },
2325
- onResubmitCommentChange: ht,
2326
- onResubmitInstance: () => void hn(),
2327
- onUploadAttachment: cn,
2328
- resubmitComment: pt,
2329
- resubmitFormData: ut,
2330
- resubmitFormErrors: ct
2331
- }) }) : null,
2332
- a ? /* @__PURE__ */ E(fe, { children: /* @__PURE__ */ E(vn, {
2333
- attachments: ye,
2334
- onDownload: (e) => {
2335
- fn(e);
2336
- },
2337
- onPreview: (e) => {
2338
- pn(e);
2339
- }
2340
- }) }) : null,
2341
- ae ? /* @__PURE__ */ E(fe, { children: /* @__PURE__ */ E(kn, {
2342
- adhocDirectives: bt,
2343
- currentMemberId: x,
2344
- fill: Gt,
2345
- instance: w,
2346
- memberProfilesById: Wt,
2347
- onChanged: nn,
2348
- onDecidingChange: F,
2349
- onFillApproveError: Jt,
2350
- ref: W,
2351
- tasks: k
2352
- }) }) : null,
2353
- ie ? /* @__PURE__ */ E(fe, { children: /* @__PURE__ */ E(Nn, {
2354
- signatureVerification: Me,
2355
- signatures: Se
2356
- }) }) : null,
2357
- ce && O.length > 0 ? /* @__PURE__ */ E(fe, { children: /* @__PURE__ */ E(Kn, {
2358
- deliveries: O,
2359
- onRetry: an,
2360
- readNodeLabel: (e) => Dt(e, w?.workflowSnapshot ?? null)
2361
- }) }) : null,
2362
- re ? /* @__PURE__ */ E(fe, { children: /* @__PURE__ */ E(Hn, {
2363
- activityLogs: S,
2364
- formSchema: X,
2365
- instanceState: w?.state ?? "RUNNING",
2366
- memberProfilesById: Wt,
2367
- signatureVerification: Me,
2368
- signaturesById: Zt,
2369
- taskDecisionsByTaskId: Xt,
2370
- tasks: k,
2371
- workflowSnapshot: w?.workflowSnapshot ?? null,
2372
- workflowTokens: Be
2373
- }) }) : null
2374
- ] }),
2375
- w ? /* @__PURE__ */ E(C, {
2376
- modalType: "standard",
2377
- onClose: () => at(!1),
2378
- open: I,
2379
- showModalHeader: !0,
2380
- size: "wide",
2381
- supportingText: `${Ct(w.state)} · ${t(w.startedAt)}`,
2382
- title: "流程圖",
2383
- children: /* @__PURE__ */ D("div", {
2384
- style: nr,
2385
- children: [/* @__PURE__ */ E("div", {
2386
- style: rr,
2387
- children: /* @__PURE__ */ D(it, {
2388
- edges: en,
2389
- fitView: !0,
2390
- fitViewOptions: { padding: .18 },
2391
- maxZoom: 1.2,
2392
- minZoom: .2,
2393
- nodes: $t,
2394
- nodesDraggable: !1,
2395
- nodesFocusable: !1,
2396
- nodeTypes: dr,
2397
- panOnDrag: !0,
2398
- proOptions: { hideAttribution: !0 },
2399
- children: [/* @__PURE__ */ E(rt, {}), /* @__PURE__ */ E(N, { showInteractive: !1 })]
2400
- })
2401
- }), tn.length > 0 ? /* @__PURE__ */ E("div", {
2402
- style: cr,
2403
- children: tn.map((e) => /* @__PURE__ */ E("span", {
2404
- style: lr,
2405
- children: e
2406
- }, e))
2407
- }) : null]
2408
- })
2409
- }) : null,
2410
- /* @__PURE__ */ E(C, {
2411
- modalType: "standard",
2412
- onClose: () => {
2413
- B(null), yt(null);
2414
- },
2415
- open: !!(z && V),
2416
- showModalHeader: !0,
2417
- size: "wide",
2418
- supportingText: z?.filename ?? void 0,
2419
- title: "PDF 預覽",
2420
- children: V ? /* @__PURE__ */ E(mt, {
2421
- filename: z?.filename ?? "PDF 預覽",
2422
- fileUrl: V,
2423
- onDownload: z ? () => void fn(z) : void 0
2424
- }) : null
2425
- }),
2426
- /* @__PURE__ */ E(C, {
2427
- cancelText: "保留案件",
2428
- confirmButtonProps: { variant: "destructive-primary" },
2429
- confirmText: "確認取消",
2430
- loading: $e,
2431
- modalStatusType: "error",
2432
- modalType: "standard",
2433
- onCancel: () => st(!1),
2434
- onClose: () => st(!1),
2435
- onConfirm: () => void mn(),
2436
- open: R,
2437
- showModalFooter: !0,
2438
- showModalHeader: !0,
2439
- supportingText: "取消後會關閉目前待簽任務與候選簽核人。",
2440
- title: "取消案件",
2441
- children: /* @__PURE__ */ D("div", {
2442
- style: ur,
2443
- children: [/* @__PURE__ */ D(T, {
2444
- variant: "body",
2445
- children: [
2446
- "確定要取消「",
2447
- w?.title ?? "",
2448
- "」嗎?"
2449
- ]
2450
- }), /* @__PURE__ */ E(n, {
2451
- label: "取消原因",
2452
- name: "cancelComment",
2453
- children: /* @__PURE__ */ E(ge, {
2454
- onChange: (e) => L(e.target.value),
2455
- placeholder: "可填寫取消原因",
2456
- resize: "vertical",
2457
- rows: 3,
2458
- value: ot
2459
- })
2460
- })]
2461
- })
2462
- })
2463
- ] });
2464
- }
2465
- function pr(e) {
2466
- return e.data.label ? e.data.label : e.data.isDefault ? "其他情況" : e.data.condition ?? "";
2467
- }
2468
- function mr(e) {
2469
- return e.edges.map(pr).filter((e) => e.trim().length > 0);
2470
- }
2471
- function hr(e) {
2472
- return e === "startEvent" ? "開始" : e === "endEvent" ? "完成" : e === "userTask" ? "簽核節點" : e === "serviceTask" ? "知會節點" : e === "exclusiveGateway" ? "條件分流" : "平行處理";
2473
- }
2474
- function gr(e, t, n, r) {
2475
- return e.nodes.map((e) => {
2476
- let i = on(e, t, n, r);
2477
- return {
2478
- data: {
2479
- kindLabel: hr(e.type),
2480
- label: e.data.label,
2481
- secondaryLabel: i.secondaryLabel,
2482
- statusLabel: i.statusLabel,
2483
- tone: i.tone
2484
- },
2485
- id: e.id,
2486
- position: e.position,
2487
- sourcePosition: F.Right,
2488
- targetPosition: F.Left,
2489
- type: "workflowRuntime"
2490
- };
2491
- });
2492
- }
2493
- function _r(e) {
2494
- let t = new I.graphlib.Graph();
2495
- return t.setDefaultEdgeLabel(() => ({})), t.setGraph({
2496
- nodesep: 56,
2497
- rankdir: "LR",
2498
- ranksep: 120
2499
- }), e.nodes.forEach((e) => {
2500
- t.setNode(e.id, {
2501
- height: tr,
2502
- width: er
2503
- });
2504
- }), e.edges.forEach((e) => {
2505
- t.setEdge(e.source, e.target);
2506
- }), I.layout(t), {
2507
- ...e,
2508
- nodes: e.nodes.map((e) => {
2509
- let n = t.node(e.id);
2510
- return n ? {
2511
- ...e,
2512
- position: {
2513
- x: n.x - er / 2,
2514
- y: n.y - tr / 2
2515
- }
2516
- } : e;
2517
- })
2518
- };
2519
- }
2520
- function vr(e) {
2521
- return e.edges.map((e) => {
2522
- let t = pr(e);
2523
- return {
2524
- animated: !1,
2525
- id: e.id,
2526
- label: t,
2527
- labelBgBorderRadius: 6,
2528
- labelBgPadding: [8, 4],
2529
- labelBgStyle: {
2530
- fill: e.data.isDefault ? "#f8fafc" : "#eff6ff",
2531
- stroke: e.data.isDefault ? "#64748b" : "#2563eb",
2532
- strokeWidth: 1
2533
- },
2534
- labelShowBg: !!t,
2535
- labelStyle: {
2536
- fill: e.data.isDefault ? "#475569" : "#2563eb",
2537
- fontSize: 12,
2538
- fontWeight: 600
2539
- },
2540
- source: e.source,
2541
- style: {
2542
- stroke: "#475569",
2543
- strokeWidth: 1.5
2544
- },
2545
- target: e.target,
2546
- type: e.type ?? "smoothstep"
2547
- };
2548
- });
2549
- }
2550
- function yr(e) {
2551
- return e === "current" ? {
2552
- ...ir,
2553
- border: "1px solid var(--mzn-color-primary, #0057ff)",
2554
- boxShadow: "0 0 0 3px rgba(0, 87, 255, 0.14)"
2555
- } : e === "completed" ? {
2556
- ...ir,
2557
- border: "1px solid #16a34a"
2558
- } : e === "cancelled" ? {
2559
- ...ir,
2560
- border: "1px solid #dc2626",
2561
- opacity: .72
2562
- } : e === "waiting" ? {
2563
- ...ir,
2564
- border: "1px dashed #64748b"
2565
- } : ir;
2566
- }
2567
- function br(e) {
2568
- let t = ar;
2569
- return e === "current" ? {
2570
- ...t,
2571
- background: "#eff6ff",
2572
- color: "#2563eb"
2573
- } : e === "completed" ? {
2574
- ...t,
2575
- background: "#f0fdf4",
2576
- color: "#15803d"
2577
- } : e === "cancelled" ? {
2578
- ...t,
2579
- background: "#fef2f2",
2580
- color: "#dc2626"
2581
- } : e === "waiting" ? {
2582
- ...t,
2583
- background: "#f8fafc",
2584
- color: "#475569"
2585
- } : {
2586
- ...t,
2587
- background: "#f1f5f9",
2588
- color: "#64748b"
2589
- };
2590
- }
2591
- function xr({ data: e }) {
2592
- return /* @__PURE__ */ D("div", {
2593
- style: yr(e.tone),
2594
- children: [
2595
- /* @__PURE__ */ E(P, {
2596
- isConnectable: !1,
2597
- position: F.Left,
2598
- style: sr,
2599
- type: "target"
2600
- }),
2601
- /* @__PURE__ */ E(T, {
2602
- component: "span",
2603
- ellipsis: !0,
2604
- title: e.label,
2605
- variant: "label-primary",
2606
- children: e.label
2607
- }),
2608
- /* @__PURE__ */ E("span", {
2609
- style: br(e.tone),
2610
- children: e.statusLabel
2611
- }),
2612
- /* @__PURE__ */ E("span", {
2613
- title: e.secondaryLabel,
2614
- style: or,
2615
- children: e.secondaryLabel || e.kindLabel
2616
- }),
2617
- /* @__PURE__ */ E(P, {
2618
- isConnectable: !1,
2619
- position: F.Right,
2620
- style: sr,
2621
- type: "source"
2622
- })
2623
- ]
2624
- });
2625
- }
2626
- //#endregion
2627
- export { kn as a, Nn as i, Kn as n, vn as o, Hn as r, gn as s, fr as t };
2628
-
2629
- //# sourceMappingURL=detail-CExpbazF.js.map