@rytass/bpm-core-react 0.20.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -0
- package/README.md +1 -1
- package/dist/approval-instance-list-page.css +1 -1
- package/dist/chunks/FormBuilderView-DjPGrOJ2.cjs +4 -0
- package/dist/chunks/FormBuilderView-DjPGrOJ2.cjs.map +1 -0
- package/dist/chunks/{FormBuilderView-CFRiw04B.js → FormBuilderView-WtC2iW5f.js} +667 -584
- package/dist/chunks/FormBuilderView-WtC2iW5f.js.map +1 -0
- package/dist/chunks/{FormRendererView-lYSaR8CQ.cjs → FormRendererView-B-xycC9S.cjs} +3 -3
- package/dist/chunks/{FormRendererView-lYSaR8CQ.cjs.map → FormRendererView-B-xycC9S.cjs.map} +1 -1
- package/dist/chunks/{FormRendererView-GfbVWEGa.js → FormRendererView-BcQKUi1A.js} +238 -238
- package/dist/chunks/{FormRendererView-GfbVWEGa.js.map → FormRendererView-BcQKUi1A.js.map} +1 -1
- package/dist/chunks/approval-instance-list-page-Bth7Raya.js +724 -0
- package/dist/chunks/approval-instance-list-page-Bth7Raya.js.map +1 -0
- package/dist/chunks/approval-instance-list-page-Dcvo6TrT.cjs +2 -0
- package/dist/chunks/approval-instance-list-page-Dcvo6TrT.cjs.map +1 -0
- package/dist/chunks/{categories-DQUtVEiV.cjs → categories-CyyqG6wG.cjs} +2 -2
- package/dist/chunks/{categories-DQUtVEiV.cjs.map → categories-CyyqG6wG.cjs.map} +1 -1
- package/dist/chunks/{categories-BAdxjNSA.js → categories-f7E-RJEc.js} +9 -9
- package/dist/chunks/{categories-BAdxjNSA.js.map → categories-f7E-RJEc.js.map} +1 -1
- package/dist/chunks/{compose-Bb5bUVFd.cjs → compose-BKUTsB2W.cjs} +2 -2
- package/dist/chunks/{compose-Bb5bUVFd.cjs.map → compose-BKUTsB2W.cjs.map} +1 -1
- package/dist/chunks/{compose-egQlRjuZ.js → compose-DZvIspW3.js} +4 -4
- package/dist/chunks/{compose-egQlRjuZ.js.map → compose-DZvIspW3.js.map} +1 -1
- package/dist/chunks/{delegations-CVmtpkRn.cjs → delegations-ClRCwD1I.cjs} +2 -2
- package/dist/chunks/{delegations-CVmtpkRn.cjs.map → delegations-ClRCwD1I.cjs.map} +1 -1
- package/dist/chunks/{delegations-9-yvWWws.js → delegations-CqND-Qtz.js} +5 -5
- package/dist/chunks/{delegations-9-yvWWws.js.map → delegations-CqND-Qtz.js.map} +1 -1
- package/dist/chunks/{delegations-CrfjsH94.cjs → delegations-D43VDSz1.cjs} +2 -2
- package/dist/chunks/{delegations-CrfjsH94.cjs.map → delegations-D43VDSz1.cjs.map} +1 -1
- package/dist/chunks/{delegations-CxnNvTCc.js → delegations-zisffLwk.js} +5 -5
- package/dist/chunks/{delegations-CxnNvTCc.js.map → delegations-zisffLwk.js.map} +1 -1
- package/dist/chunks/{designer-CZDlQ9Nf.js → designer-CWubIE69.js} +1425 -1412
- package/dist/chunks/designer-CWubIE69.js.map +1 -0
- package/dist/chunks/designer-C_m8DmMl.cjs +69 -0
- package/dist/chunks/designer-C_m8DmMl.cjs.map +1 -0
- package/dist/chunks/{detail-ByZV1XaI.js → detail-Bv90gvy0.js} +578 -577
- package/dist/chunks/detail-Bv90gvy0.js.map +1 -0
- package/dist/chunks/detail-DNzqesdI.cjs +5 -0
- package/dist/chunks/detail-DNzqesdI.cjs.map +1 -0
- package/dist/chunks/instance-error-message-BW464LRQ.cjs +2 -0
- package/dist/chunks/instance-error-message-BW464LRQ.cjs.map +1 -0
- package/dist/chunks/instance-error-message-CAP1vJhX.js +204 -0
- package/dist/chunks/instance-error-message-CAP1vJhX.js.map +1 -0
- package/dist/components/approval-instance-field-filter-controls.d.cts +12 -0
- package/dist/components/approval-instance-field-filter-controls.d.ts +12 -0
- package/dist/components/approval-instance-field-filters.d.cts +86 -0
- package/dist/components/approval-instance-field-filters.d.ts +86 -0
- package/dist/components/approval-instance-list-page.d.cts +4 -0
- package/dist/components/approval-instance-list-page.d.ts +4 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/next/workflow-chat-route.cjs +2 -2
- package/dist/next/workflow-chat-route.cjs.map +1 -1
- package/dist/next/workflow-chat-route.js +13 -13
- package/dist/pages/admin/delegations/index.cjs +1 -1
- package/dist/pages/admin/delegations/index.js +1 -1
- package/dist/pages/delegations/index.cjs +1 -1
- package/dist/pages/delegations/index.js +1 -1
- package/dist/pages/instances/detail/index.cjs +1 -1
- package/dist/pages/instances/detail/index.js +1 -1
- package/dist/pages/templates/categories/index.cjs +1 -1
- package/dist/pages/templates/categories/index.js +1 -1
- package/dist/pages/templates/compose/index.cjs +1 -1
- package/dist/pages/templates/compose/index.js +1 -1
- package/dist/pages/templates/designer/index.cjs +1 -1
- package/dist/pages/templates/designer/index.js +1 -1
- package/dist/views/admin/delegations/index.cjs +1 -1
- package/dist/views/admin/delegations/index.js +1 -1
- package/dist/views/admin/index.cjs +1 -1
- package/dist/views/admin/index.js +1 -1
- package/dist/views/admin/webhook-endpoints/index.cjs +1 -1
- package/dist/views/admin/webhook-endpoints/index.cjs.map +1 -1
- package/dist/views/admin/webhook-endpoints/index.js +60 -60
- package/dist/views/admin/webhook-endpoints/index.js.map +1 -1
- package/dist/views/cc/index.cjs +1 -1
- package/dist/views/cc/index.js +1 -1
- package/dist/views/delegations/index.cjs +1 -1
- package/dist/views/delegations/index.js +1 -1
- package/dist/views/forms/builder/FormBuilderView.d.cts +8 -1
- package/dist/views/forms/builder/FormBuilderView.d.ts +8 -1
- package/dist/views/forms/builder/index.cjs +1 -1
- package/dist/views/forms/builder/index.js +1 -1
- package/dist/views/forms/renderer/index.cjs +1 -1
- package/dist/views/forms/renderer/index.js +1 -1
- package/dist/views/instances/approver-filled-form.d.cts +8 -5
- package/dist/views/instances/approver-filled-form.d.ts +8 -5
- package/dist/views/instances/detail/index.cjs +1 -1
- package/dist/views/instances/detail/index.js +1 -1
- package/dist/views/instances/detail/sections/InstanceTasksSection.d.cts +2 -1
- package/dist/views/instances/detail/sections/InstanceTasksSection.d.ts +2 -1
- package/dist/views/instances/new/index.cjs +1 -1
- package/dist/views/instances/new/index.cjs.map +1 -1
- package/dist/views/instances/new/index.js +8 -8
- package/dist/views/instances/new/index.js.map +1 -1
- package/dist/views/search/index.cjs +1 -1
- package/dist/views/search/index.js +1 -1
- package/dist/views/sent/index.cjs +1 -1
- package/dist/views/sent/index.js +1 -1
- package/dist/views/templates/categories/index.cjs +1 -1
- package/dist/views/templates/categories/index.js +1 -1
- package/dist/views/templates/compose/index.cjs +1 -1
- package/dist/views/templates/compose/index.js +1 -1
- package/dist/views/templates/designer/NotifyWebhookTargetsEditor.d.cts +2 -0
- package/dist/views/templates/designer/NotifyWebhookTargetsEditor.d.ts +2 -0
- package/dist/views/templates/designer/index.cjs +1 -1
- package/dist/views/templates/designer/index.js +1 -1
- package/dist/views/templates/index.cjs +1 -1
- package/dist/views/templates/index.cjs.map +1 -1
- package/dist/views/templates/index.js +7 -7
- package/package.json +3 -3
- package/dist/chunks/FormBuilderView-CFRiw04B.js.map +0 -1
- package/dist/chunks/FormBuilderView-CpUgbSbt.cjs +0 -3
- package/dist/chunks/FormBuilderView-CpUgbSbt.cjs.map +0 -1
- package/dist/chunks/approval-instance-list-page-BnI4t5mD.js +0 -279
- package/dist/chunks/approval-instance-list-page-BnI4t5mD.js.map +0 -1
- package/dist/chunks/approval-instance-list-page-fqvmkBlg.cjs +0 -2
- package/dist/chunks/approval-instance-list-page-fqvmkBlg.cjs.map +0 -1
- package/dist/chunks/designer-CX9bhYJS.cjs +0 -69
- package/dist/chunks/designer-CX9bhYJS.cjs.map +0 -1
- package/dist/chunks/designer-CZDlQ9Nf.js.map +0 -1
- package/dist/chunks/detail-ByZV1XaI.js.map +0 -1
- package/dist/chunks/detail-ChseSF55.cjs +0 -5
- package/dist/chunks/detail-ChseSF55.cjs.map +0 -1
- package/dist/chunks/instance-error-message-DTARGbGo.cjs +0 -2
- package/dist/chunks/instance-error-message-DTARGbGo.cjs.map +0 -1
- package/dist/chunks/instance-error-message-q6gy5evy.js +0 -120
- package/dist/chunks/instance-error-message-q6gy5evy.js.map +0 -1
|
@@ -1,279 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { r as e } from "./router-adapter-CkxCyzf5.js";
|
|
3
|
-
import { r as t } from "./routes-config-BcNaWJWJ.js";
|
|
4
|
-
import { t as n } from "./format-date-time-B0LdmWg4.js";
|
|
5
|
-
import { useCallback as r, useEffect as i, useMemo as a, useRef as o, useState as s } from "react";
|
|
6
|
-
import { Filter as c, FilterArea as ee, FilterLine as te, FormField as l, Input as u, PageHeader as d, Section as ne, SectionGroup as f, Select as p, Table as m, Typography as h } from "@mezzanine-ui/react";
|
|
7
|
-
import { resolveMembers as re } from "@rytass/bpm-core-client";
|
|
8
|
-
import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
|
|
9
|
-
import { listApprovalInstancesPage as ie, readApprovalInstanceCaseTitle as y } from "@rytass/bpm-core-client/workflow";
|
|
10
|
-
import { FormFieldLayout as b } from "@mezzanine-ui/core/form";
|
|
11
|
-
import x from "@mezzanine-ui/react/ContentHeader";
|
|
12
|
-
import '../approval-instance-list-page.css';var S = { instanceFilterArea: "bpm_instanceFilterArea_qpvJq" }, C = [
|
|
13
|
-
10,
|
|
14
|
-
20,
|
|
15
|
-
50
|
|
16
|
-
], w = [
|
|
17
|
-
{
|
|
18
|
-
id: "ALL",
|
|
19
|
-
name: "全部狀態",
|
|
20
|
-
state: null
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
id: "RUNNING",
|
|
24
|
-
name: "進行中",
|
|
25
|
-
state: "RUNNING"
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
id: "APPROVED",
|
|
29
|
-
name: "已通過",
|
|
30
|
-
state: "APPROVED"
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
id: "REJECTED",
|
|
34
|
-
name: "已拒絕",
|
|
35
|
-
state: "REJECTED"
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
id: "RETURNED",
|
|
39
|
-
name: "已退回",
|
|
40
|
-
state: "RETURNED"
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
id: "CANCELLED",
|
|
44
|
-
name: "已取消",
|
|
45
|
-
state: "CANCELLED"
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
id: "EXPIRED",
|
|
49
|
-
name: "已逾期",
|
|
50
|
-
state: "EXPIRED"
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
id: "DRAFT",
|
|
54
|
-
name: "草稿",
|
|
55
|
-
state: "DRAFT"
|
|
56
|
-
}
|
|
57
|
-
];
|
|
58
|
-
function T({ defaultState: y, description: T, emptyMessage: O, searchPlaceholder: k, title: N, view: P }) {
|
|
59
|
-
let F = e(), I = t(), [L, R] = s(null), [z, B] = s(/* @__PURE__ */ new Map()), [V, H] = s(1), [U, W] = s(10), [G, K] = s(0), [q, J] = s(!0), [Y, se] = s([]), [X, ce] = s(""), [Z, le] = s(D(y)), Q = o(0), $ = r(async () => {
|
|
60
|
-
let e = Q.current + 1;
|
|
61
|
-
Q.current = e, J(!0), R(null);
|
|
62
|
-
try {
|
|
63
|
-
let t = await ie({
|
|
64
|
-
page: V,
|
|
65
|
-
pageSize: U,
|
|
66
|
-
searchText: X,
|
|
67
|
-
state: Z.state,
|
|
68
|
-
templateId: null,
|
|
69
|
-
view: P
|
|
70
|
-
});
|
|
71
|
-
if (e !== Q.current) return;
|
|
72
|
-
se(t.instances.map(E)), K(t.totalCount);
|
|
73
|
-
} catch (t) {
|
|
74
|
-
e === Q.current && R(M(t));
|
|
75
|
-
} finally {
|
|
76
|
-
e === Q.current && J(!1);
|
|
77
|
-
}
|
|
78
|
-
}, [
|
|
79
|
-
V,
|
|
80
|
-
U,
|
|
81
|
-
X,
|
|
82
|
-
Z,
|
|
83
|
-
P
|
|
84
|
-
]);
|
|
85
|
-
i(() => {
|
|
86
|
-
$();
|
|
87
|
-
}, [$]), i(() => {
|
|
88
|
-
let e = Array.from(new Set(Y.map((e) => e.initiatorMemberId).filter(Boolean)));
|
|
89
|
-
if (e.length === 0) {
|
|
90
|
-
B(/* @__PURE__ */ new Map());
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
let t = !1;
|
|
94
|
-
return (async () => {
|
|
95
|
-
try {
|
|
96
|
-
let n = await re(e);
|
|
97
|
-
if (t) return;
|
|
98
|
-
B(new Map(n.map((e) => [e.memberId, e])));
|
|
99
|
-
} catch {
|
|
100
|
-
if (t) return;
|
|
101
|
-
B(/* @__PURE__ */ new Map());
|
|
102
|
-
}
|
|
103
|
-
})(), () => {
|
|
104
|
-
t = !0;
|
|
105
|
-
};
|
|
106
|
-
}, [Y]);
|
|
107
|
-
let ue = a(() => [
|
|
108
|
-
{
|
|
109
|
-
dataIndex: "caseTitle",
|
|
110
|
-
key: "caseTitle",
|
|
111
|
-
title: "案件",
|
|
112
|
-
width: 300
|
|
113
|
-
},
|
|
114
|
-
{
|
|
115
|
-
key: "state",
|
|
116
|
-
render: (e) => /* @__PURE__ */ _(h, {
|
|
117
|
-
color: A(e.state),
|
|
118
|
-
component: "span",
|
|
119
|
-
variant: "body",
|
|
120
|
-
children: e.stateLabel
|
|
121
|
-
}),
|
|
122
|
-
title: "狀態",
|
|
123
|
-
width: 120
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
key: "initiatorMemberId",
|
|
127
|
-
render: (e) => /* @__PURE__ */ _(h, {
|
|
128
|
-
component: "span",
|
|
129
|
-
variant: "body",
|
|
130
|
-
children: j(e.initiatorMemberId, z)
|
|
131
|
-
}),
|
|
132
|
-
title: "發起人",
|
|
133
|
-
width: 180
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
key: "startedAt",
|
|
137
|
-
render: (e) => /* @__PURE__ */ _(h, {
|
|
138
|
-
component: "span",
|
|
139
|
-
variant: "body",
|
|
140
|
-
children: n(e.startedAt)
|
|
141
|
-
}),
|
|
142
|
-
title: "發起時間",
|
|
143
|
-
width: 220
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
key: "completedAt",
|
|
147
|
-
render: (e) => /* @__PURE__ */ _(h, {
|
|
148
|
-
component: "span",
|
|
149
|
-
variant: "body",
|
|
150
|
-
children: n(e.completedAt)
|
|
151
|
-
}),
|
|
152
|
-
title: "完成時間",
|
|
153
|
-
width: 220
|
|
154
|
-
}
|
|
155
|
-
], [z]), de = a(() => ({
|
|
156
|
-
render: (e) => [{
|
|
157
|
-
name: "查看",
|
|
158
|
-
onClick: () => F.push(I.caseDetail(e.id))
|
|
159
|
-
}],
|
|
160
|
-
variant: "base-secondary",
|
|
161
|
-
width: 88
|
|
162
|
-
}), [F]);
|
|
163
|
-
return /* @__PURE__ */ v(g, { children: [/* @__PURE__ */ _(d, { children: /* @__PURE__ */ _(x, {
|
|
164
|
-
description: T,
|
|
165
|
-
title: N
|
|
166
|
-
}) }), /* @__PURE__ */ _(f, { children: /* @__PURE__ */ v(ne, {
|
|
167
|
-
filterArea: /* @__PURE__ */ _(ee, {
|
|
168
|
-
className: S.instanceFilterArea,
|
|
169
|
-
size: "sub",
|
|
170
|
-
children: /* @__PURE__ */ v(te, { children: [/* @__PURE__ */ _(c, {
|
|
171
|
-
span: 3,
|
|
172
|
-
children: /* @__PURE__ */ _(l, {
|
|
173
|
-
fullWidth: !0,
|
|
174
|
-
layout: b.VERTICAL,
|
|
175
|
-
name: "instanceSearchText",
|
|
176
|
-
children: /* @__PURE__ */ _(u, {
|
|
177
|
-
fullWidth: !0,
|
|
178
|
-
onChange: (e) => {
|
|
179
|
-
ce(e.target.value), H(1);
|
|
180
|
-
},
|
|
181
|
-
placeholder: k,
|
|
182
|
-
size: "sub",
|
|
183
|
-
value: X,
|
|
184
|
-
variant: "base"
|
|
185
|
-
})
|
|
186
|
-
})
|
|
187
|
-
}), /* @__PURE__ */ _(c, {
|
|
188
|
-
span: 2,
|
|
189
|
-
children: /* @__PURE__ */ _(l, {
|
|
190
|
-
fullWidth: !0,
|
|
191
|
-
layout: b.VERTICAL,
|
|
192
|
-
name: "instanceState",
|
|
193
|
-
children: /* @__PURE__ */ _(p, {
|
|
194
|
-
clearable: !1,
|
|
195
|
-
fullWidth: !0,
|
|
196
|
-
onChange: (e) => {
|
|
197
|
-
le(ae(e)), H(1);
|
|
198
|
-
},
|
|
199
|
-
options: [...w],
|
|
200
|
-
placeholder: "狀態",
|
|
201
|
-
renderValue: (e) => `狀態:${oe(e)}`,
|
|
202
|
-
size: "sub",
|
|
203
|
-
value: Z
|
|
204
|
-
})
|
|
205
|
-
})
|
|
206
|
-
})] })
|
|
207
|
-
}),
|
|
208
|
-
children: [
|
|
209
|
-
L ? /* @__PURE__ */ _(h, {
|
|
210
|
-
color: "text-error",
|
|
211
|
-
variant: "body",
|
|
212
|
-
children: L
|
|
213
|
-
}) : null,
|
|
214
|
-
!L && !q && Y.length === 0 ? /* @__PURE__ */ _(h, {
|
|
215
|
-
color: "text-neutral",
|
|
216
|
-
variant: "body",
|
|
217
|
-
children: O
|
|
218
|
-
}) : null,
|
|
219
|
-
/* @__PURE__ */ _(m, {
|
|
220
|
-
actions: de,
|
|
221
|
-
columns: ue,
|
|
222
|
-
dataSource: [...Y],
|
|
223
|
-
fullWidth: !0,
|
|
224
|
-
loading: q,
|
|
225
|
-
pagination: {
|
|
226
|
-
current: V,
|
|
227
|
-
onChange: (e) => {
|
|
228
|
-
H(e);
|
|
229
|
-
},
|
|
230
|
-
onChangePageSize: (e) => {
|
|
231
|
-
H(1), W(e);
|
|
232
|
-
},
|
|
233
|
-
pageSize: U,
|
|
234
|
-
pageSizeLabel: "每頁筆數",
|
|
235
|
-
pageSizeOptions: C,
|
|
236
|
-
renderResultSummary: (e, t, n) => `顯示 ${e}-${t} 筆,共 ${n} 筆`,
|
|
237
|
-
showPageSizeOptions: !0,
|
|
238
|
-
total: G
|
|
239
|
-
}
|
|
240
|
-
})
|
|
241
|
-
]
|
|
242
|
-
}) })] });
|
|
243
|
-
}
|
|
244
|
-
function E(e) {
|
|
245
|
-
return {
|
|
246
|
-
...e,
|
|
247
|
-
caseTitle: y(e),
|
|
248
|
-
key: e.id,
|
|
249
|
-
stateLabel: k(e.state)
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
function ae(e) {
|
|
253
|
-
return O(e) ? D(e.state) : w[0];
|
|
254
|
-
}
|
|
255
|
-
function D(e) {
|
|
256
|
-
return w.find((t) => t.state === e) ?? w[0];
|
|
257
|
-
}
|
|
258
|
-
function oe(e) {
|
|
259
|
-
return O(e) ? e.name : w[0].name;
|
|
260
|
-
}
|
|
261
|
-
function O(e) {
|
|
262
|
-
return typeof e == "object" && !!e && "id" in e && "name" in e && "state" in e;
|
|
263
|
-
}
|
|
264
|
-
function k(e) {
|
|
265
|
-
return e === "RUNNING" ? "進行中" : e === "APPROVED" ? "已通過" : e === "REJECTED" ? "已拒絕" : e === "RETURNED" ? "已退回" : e === "CANCELLED" ? "已取消" : e === "EXPIRED" ? "已逾期" : "草稿";
|
|
266
|
-
}
|
|
267
|
-
function A(e) {
|
|
268
|
-
return e === "APPROVED" ? "text-success" : e === "REJECTED" || e === "CANCELLED" || e === "EXPIRED" ? "text-error" : "text-neutral";
|
|
269
|
-
}
|
|
270
|
-
function j(e, t) {
|
|
271
|
-
let n = (e ?? "").trim();
|
|
272
|
-
return n ? t.get(n)?.name ?? n : "未知發起人";
|
|
273
|
-
}
|
|
274
|
-
function M(e) {
|
|
275
|
-
return e instanceof Error ? e.message : "讀取簽核案件失敗。";
|
|
276
|
-
}
|
|
277
|
-
export { T as t };
|
|
278
|
-
|
|
279
|
-
//# sourceMappingURL=approval-instance-list-page-BnI4t5mD.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"approval-instance-list-page-BnI4t5mD.js","names":["_Fragment","styles","useRouterAdapter","useBPMRoutes","formatDateTime","Fragment$1","ContentHeader","approval_instance_list_page_module_default","INSTANCE_PAGE_SIZE_OPTIONS","STATE_FILTER_OPTIONS","ApprovalInstanceListPage","router","routes","error","setError","useState","initiatorProfilesById","setInitiatorProfilesById","instancePage","setInstancePage","instancePageSize","setInstancePageSize","instanceTotalCount","setInstanceTotalCount","loading","setLoading","rows","setRows","searchText","setSearchText","stateFilter","setStateFilter","readStateFilterOption","defaultState","refreshRequestIdRef","useRef","refreshInstances","useCallback","requestId","result","listApprovalInstancesPage","readApprovalInstanceRow","requestError","readErrorMessage","view","useEffect","initiatorMemberIds","row","cancelled","profiles","resolveMembers","profile","columns","useMemo","Typography","readInstanceStateColor","record","readInitiatorLabel","tableActions","PageHeader","SectionGroup","Section","FilterArea","FilterLine","Filter","FormField","FormFieldLayout","Input","event","searchPlaceholder","Select","readSelectedStateFilterOption","option","readStateFilterLabel","value","emptyMessage","Table","page","pageSize","from","to","total","instance","readApprovalInstanceCaseTitle","readInstanceStateLabel","isStateFilterOption","state","trimmedMemberId","initiatorMemberId"],"sources":["../../src/components/approval-instance-list-page.module.scss","../../src/components/approval-instance-list-page.tsx"],"sourcesContent":[".instanceFilterArea {\n :global(.mzn-filter-area__actions) {\n display: none;\n }\n\n :global(.mzn-form-field__label-area) {\n display: none;\n }\n\n :global(.mzn-form-field__control-field-slot--main) {\n width: 100%;\n min-width: 0;\n }\n}\n","'use client';\n\nimport type { ChangeEvent, ReactElement } from 'react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Filter,\n FilterArea,\n FilterLine,\n FormField,\n Input,\n PageHeader,\n Section,\n SectionGroup,\n Select,\n Table,\n Typography,\n} from '@mezzanine-ui/react';\nimport ContentHeader from '@mezzanine-ui/react/ContentHeader';\nimport { FormFieldLayout } from '@mezzanine-ui/core/form';\nimport type { TableActions, TableColumn } from '@mezzanine-ui/core/table';\nimport {\n resolveMembers,\n type MemberProfileRecord,\n} from '@rytass/bpm-core-client';\nimport {\n listApprovalInstancesPage,\n readApprovalInstanceCaseTitle,\n type ApprovalInstanceRecord,\n type ApprovalInstanceState,\n type ApprovalInstanceView,\n} from '@rytass/bpm-core-client/workflow';\nimport { useRouterAdapter } from '../lib/router-adapter';\nimport { useBPMRoutes } from '../lib/routes-config';\nimport { formatDateTime } from '../lib/format-date-time';\nimport styles from './approval-instance-list-page.module.scss';\n\nexport interface ApprovalInstanceListPageProps {\n readonly defaultState: ApprovalInstanceState | null;\n readonly description: string;\n readonly emptyMessage: string;\n readonly searchPlaceholder: string;\n readonly title: string;\n readonly view: ApprovalInstanceView;\n}\n\ntype StateFilterOption = Readonly<{\n id: 'ALL' | ApprovalInstanceState;\n name: string;\n state: ApprovalInstanceState | null;\n}>;\n\ntype ApprovalInstanceRow = Readonly<\n Record<string, unknown> &\n ApprovalInstanceRecord & {\n caseTitle: string;\n key: string;\n stateLabel: string;\n }\n>;\n\nconst INSTANCE_PAGE_SIZE_OPTIONS = [10, 20, 50];\nconst STATE_FILTER_OPTIONS: readonly StateFilterOption[] = [\n { id: 'ALL', name: '全部狀態', state: null },\n { id: 'RUNNING', name: '進行中', state: 'RUNNING' },\n { id: 'APPROVED', name: '已通過', state: 'APPROVED' },\n { id: 'REJECTED', name: '已拒絕', state: 'REJECTED' },\n { id: 'RETURNED', name: '已退回', state: 'RETURNED' },\n { id: 'CANCELLED', name: '已取消', state: 'CANCELLED' },\n { id: 'EXPIRED', name: '已逾期', state: 'EXPIRED' },\n { id: 'DRAFT', name: '草稿', state: 'DRAFT' },\n];\n\n/**\n * Shared list page for any approval-instance \"view\" (inbox / sent / cc /\n * delegated). Caller picks the view + default state filter; the page renders\n * the standard BPM filter bar + paginated table and navigates to\n * `/instances/:id` on row action.\n */\nexport function ApprovalInstanceListPage({\n defaultState,\n description,\n emptyMessage,\n searchPlaceholder,\n title,\n view,\n}: ApprovalInstanceListPageProps): ReactElement {\n const router = useRouterAdapter();\n const routes = useBPMRoutes();\n const [error, setError] = useState<string | null>(null);\n const [initiatorProfilesById, setInitiatorProfilesById] = useState<\n ReadonlyMap<string, MemberProfileRecord>\n >(new Map());\n const [instancePage, setInstancePage] = useState(1);\n const [instancePageSize, setInstancePageSize] = useState(10);\n const [instanceTotalCount, setInstanceTotalCount] = useState(0);\n const [loading, setLoading] = useState(true);\n const [rows, setRows] = useState<readonly ApprovalInstanceRow[]>([]);\n const [searchText, setSearchText] = useState('');\n const [stateFilter, setStateFilter] = useState<StateFilterOption>(\n readStateFilterOption(defaultState),\n );\n const refreshRequestIdRef = useRef(0);\n\n const refreshInstances = useCallback(async (): Promise<void> => {\n const requestId = refreshRequestIdRef.current + 1;\n refreshRequestIdRef.current = requestId;\n setLoading(true);\n setError(null);\n\n try {\n const result = await listApprovalInstancesPage({\n page: instancePage,\n pageSize: instancePageSize,\n searchText,\n state: stateFilter.state,\n templateId: null,\n view,\n });\n\n if (requestId !== refreshRequestIdRef.current) {\n return;\n }\n\n setRows(result.instances.map(readApprovalInstanceRow));\n setInstanceTotalCount(result.totalCount);\n } catch (requestError: unknown) {\n if (requestId === refreshRequestIdRef.current) {\n setError(readErrorMessage(requestError));\n }\n } finally {\n if (requestId === refreshRequestIdRef.current) {\n setLoading(false);\n }\n }\n }, [instancePage, instancePageSize, searchText, stateFilter, view]);\n\n useEffect((): void => {\n void refreshInstances();\n }, [refreshInstances]);\n\n useEffect((): (() => void) | void => {\n const initiatorMemberIds = Array.from(\n new Set(rows.map((row) => row.initiatorMemberId).filter(Boolean)),\n );\n\n if (initiatorMemberIds.length === 0) {\n setInitiatorProfilesById(new Map());\n\n return;\n }\n\n let cancelled = false;\n\n void (async (): Promise<void> => {\n try {\n const profiles = await resolveMembers(initiatorMemberIds);\n\n if (cancelled) {\n return;\n }\n\n setInitiatorProfilesById(\n new Map(profiles.map((profile) => [profile.memberId, profile])),\n );\n } catch {\n if (cancelled) {\n return;\n }\n\n setInitiatorProfilesById(new Map());\n }\n })();\n\n return (): void => {\n cancelled = true;\n };\n }, [rows]);\n\n const columns = useMemo(\n (): TableColumn<ApprovalInstanceRow>[] => [\n { dataIndex: 'caseTitle', key: 'caseTitle', title: '案件', width: 300 },\n {\n key: 'state',\n render: (record: ApprovalInstanceRow): ReactElement => (\n <Typography\n color={readInstanceStateColor(record.state)}\n component=\"span\"\n variant=\"body\"\n >\n {record.stateLabel}\n </Typography>\n ),\n title: '狀態',\n width: 120,\n },\n {\n key: 'initiatorMemberId',\n render: (record: ApprovalInstanceRow): ReactElement => (\n <Typography component=\"span\" variant=\"body\">\n {readInitiatorLabel(\n record.initiatorMemberId,\n initiatorProfilesById,\n )}\n </Typography>\n ),\n title: '發起人',\n width: 180,\n },\n {\n key: 'startedAt',\n render: (record: ApprovalInstanceRow): ReactElement => (\n <Typography component=\"span\" variant=\"body\">\n {formatDateTime(record.startedAt)}\n </Typography>\n ),\n title: '發起時間',\n width: 220,\n },\n {\n key: 'completedAt',\n render: (record: ApprovalInstanceRow): ReactElement => (\n <Typography component=\"span\" variant=\"body\">\n {formatDateTime(record.completedAt)}\n </Typography>\n ),\n title: '完成時間',\n width: 220,\n },\n ],\n [initiatorProfilesById],\n );\n const tableActions = useMemo(\n (): TableActions<ApprovalInstanceRow> => ({\n render: (\n record,\n ): ReturnType<TableActions<ApprovalInstanceRow>['render']> => [\n {\n name: '查看',\n onClick: (): void => router.push(routes.caseDetail(record.id)),\n },\n ],\n variant: 'base-secondary',\n width: 88,\n }),\n [router],\n );\n\n return (\n <>\n <PageHeader>\n <ContentHeader description={description} title={title} />\n </PageHeader>\n\n <SectionGroup>\n <Section\n filterArea={\n <FilterArea className={styles.instanceFilterArea} size=\"sub\">\n <FilterLine>\n <Filter span={3}>\n <FormField\n fullWidth\n layout={FormFieldLayout.VERTICAL}\n name=\"instanceSearchText\"\n >\n <Input\n fullWidth\n onChange={(\n event: ChangeEvent<HTMLInputElement>,\n ): void => {\n setSearchText(event.target.value);\n setInstancePage(1);\n }}\n placeholder={searchPlaceholder}\n size=\"sub\"\n value={searchText}\n variant=\"base\"\n />\n </FormField>\n </Filter>\n <Filter span={2}>\n <FormField\n fullWidth\n layout={FormFieldLayout.VERTICAL}\n name=\"instanceState\"\n >\n <Select\n clearable={false}\n fullWidth\n onChange={(option): void => {\n setStateFilter(readSelectedStateFilterOption(option));\n setInstancePage(1);\n }}\n options={[...STATE_FILTER_OPTIONS]}\n placeholder=\"狀態\"\n renderValue={(value): string =>\n `狀態:${readStateFilterLabel(value)}`\n }\n size=\"sub\"\n value={stateFilter}\n />\n </FormField>\n </Filter>\n </FilterLine>\n </FilterArea>\n }\n >\n {error ? (\n <Typography color=\"text-error\" variant=\"body\">\n {error}\n </Typography>\n ) : null}\n {!error && !loading && rows.length === 0 ? (\n <Typography color=\"text-neutral\" variant=\"body\">\n {emptyMessage}\n </Typography>\n ) : null}\n <Table\n actions={tableActions}\n columns={columns}\n dataSource={[...rows]}\n fullWidth\n loading={loading}\n pagination={{\n current: instancePage,\n onChange: (page): void => {\n setInstancePage(page);\n },\n onChangePageSize: (pageSize): void => {\n setInstancePage(1);\n setInstancePageSize(pageSize);\n },\n pageSize: instancePageSize,\n pageSizeLabel: '每頁筆數',\n pageSizeOptions: INSTANCE_PAGE_SIZE_OPTIONS,\n renderResultSummary: (from, to, total): string =>\n `顯示 ${from}-${to} 筆,共 ${total} 筆`,\n showPageSizeOptions: true,\n total: instanceTotalCount,\n }}\n />\n </Section>\n </SectionGroup>\n </>\n );\n}\n\nfunction readApprovalInstanceRow(\n instance: ApprovalInstanceRecord,\n): ApprovalInstanceRow {\n return {\n ...instance,\n caseTitle: readApprovalInstanceCaseTitle(instance),\n key: instance.id,\n stateLabel: readInstanceStateLabel(instance.state),\n };\n}\n\nfunction readSelectedStateFilterOption(option: unknown): StateFilterOption {\n if (!isStateFilterOption(option)) {\n return STATE_FILTER_OPTIONS[0];\n }\n return readStateFilterOption(option.state);\n}\n\nfunction readStateFilterOption(\n state: ApprovalInstanceState | null,\n): StateFilterOption {\n return (\n STATE_FILTER_OPTIONS.find((option) => option.state === state) ??\n STATE_FILTER_OPTIONS[0]\n );\n}\n\nfunction readStateFilterLabel(value: unknown): string {\n return isStateFilterOption(value) ? value.name : STATE_FILTER_OPTIONS[0].name;\n}\n\nfunction isStateFilterOption(value: unknown): value is StateFilterOption {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'id' in value &&\n 'name' in value &&\n 'state' in value\n );\n}\n\nfunction readInstanceStateLabel(state: ApprovalInstanceState): string {\n if (state === 'RUNNING') return '進行中';\n if (state === 'APPROVED') return '已通過';\n if (state === 'REJECTED') return '已拒絕';\n if (state === 'RETURNED') return '已退回';\n if (state === 'CANCELLED') return '已取消';\n if (state === 'EXPIRED') return '已逾期';\n return '草稿';\n}\n\nfunction readInstanceStateColor(\n state: ApprovalInstanceState,\n): 'text-error' | 'text-neutral' | 'text-success' {\n if (state === 'APPROVED') return 'text-success';\n if (state === 'REJECTED' || state === 'CANCELLED' || state === 'EXPIRED') {\n return 'text-error';\n }\n return 'text-neutral';\n}\n\nfunction readInitiatorLabel(\n initiatorMemberId: string | null | undefined,\n initiatorProfilesById: ReadonlyMap<string, MemberProfileRecord>,\n): string {\n const trimmedMemberId = (initiatorMemberId ?? '').trim();\n if (!trimmedMemberId) return '未知發起人';\n return initiatorProfilesById.get(trimmedMemberId)?.name ?? trimmedMemberId;\n}\n\nfunction readErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : '讀取簽核案件失敗。';\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use client";require('../approval-instance-list-page.css');const e=require("./rolldown-runtime-BocRIvOZ.cjs"),t=require("./router-adapter--gYs13E8.cjs"),n=require("./routes-config-C1j_vFKo.cjs"),r=require("./format-date-time-D-cx5M8z.cjs");let i=require("react"),a=require("@mezzanine-ui/react"),o=require("@rytass/bpm-core-client"),s=require("react/jsx-runtime"),c=require("@rytass/bpm-core-client/workflow"),l=require("@mezzanine-ui/core/form"),u=require("@mezzanine-ui/react/ContentHeader");u=e.t(u,1);var d={instanceFilterArea:`bpm_instanceFilterArea_qpvJq`},f=[10,20,50],p=[{id:`ALL`,name:`全部狀態`,state:null},{id:`RUNNING`,name:`進行中`,state:`RUNNING`},{id:`APPROVED`,name:`已通過`,state:`APPROVED`},{id:`REJECTED`,name:`已拒絕`,state:`REJECTED`},{id:`RETURNED`,name:`已退回`,state:`RETURNED`},{id:`CANCELLED`,name:`已取消`,state:`CANCELLED`},{id:`EXPIRED`,name:`已逾期`,state:`EXPIRED`},{id:`DRAFT`,name:`草稿`,state:`DRAFT`}];function m({defaultState:e,description:m,emptyMessage:y,searchPlaceholder:b,title:w,view:T}){let E=t.r(),D=n.r(),[O,k]=(0,i.useState)(null),[A,j]=(0,i.useState)(new Map),[M,N]=(0,i.useState)(1),[P,F]=(0,i.useState)(10),[I,L]=(0,i.useState)(0),[R,z]=(0,i.useState)(!0),[B,V]=(0,i.useState)([]),[H,U]=(0,i.useState)(``),[W,G]=(0,i.useState)(_(e)),K=(0,i.useRef)(0),q=(0,i.useCallback)(async()=>{let e=K.current+1;K.current=e,z(!0),k(null);try{let t=await(0,c.listApprovalInstancesPage)({page:M,pageSize:P,searchText:H,state:W.state,templateId:null,view:T});if(e!==K.current)return;V(t.instances.map(h)),L(t.totalCount)}catch(t){e===K.current&&k(C(t))}finally{e===K.current&&z(!1)}},[M,P,H,W,T]);(0,i.useEffect)(()=>{q()},[q]),(0,i.useEffect)(()=>{let e=Array.from(new Set(B.map(e=>e.initiatorMemberId).filter(Boolean)));if(e.length===0){j(new Map);return}let t=!1;return(async()=>{try{let n=await(0,o.resolveMembers)(e);if(t)return;j(new Map(n.map(e=>[e.memberId,e])))}catch{if(t)return;j(new Map)}})(),()=>{t=!0}},[B]);let J=(0,i.useMemo)(()=>[{dataIndex:`caseTitle`,key:`caseTitle`,title:`案件`,width:300},{key:`state`,render:e=>(0,s.jsx)(a.Typography,{color:x(e.state),component:`span`,variant:`body`,children:e.stateLabel}),title:`狀態`,width:120},{key:`initiatorMemberId`,render:e=>(0,s.jsx)(a.Typography,{component:`span`,variant:`body`,children:S(e.initiatorMemberId,A)}),title:`發起人`,width:180},{key:`startedAt`,render:e=>(0,s.jsx)(a.Typography,{component:`span`,variant:`body`,children:r.t(e.startedAt)}),title:`發起時間`,width:220},{key:`completedAt`,render:e=>(0,s.jsx)(a.Typography,{component:`span`,variant:`body`,children:r.t(e.completedAt)}),title:`完成時間`,width:220}],[A]),Y=(0,i.useMemo)(()=>({render:e=>[{name:`查看`,onClick:()=>E.push(D.caseDetail(e.id))}],variant:`base-secondary`,width:88}),[E]);return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(a.PageHeader,{children:(0,s.jsx)(u.default,{description:m,title:w})}),(0,s.jsx)(a.SectionGroup,{children:(0,s.jsxs)(a.Section,{filterArea:(0,s.jsx)(a.FilterArea,{className:d.instanceFilterArea,size:`sub`,children:(0,s.jsxs)(a.FilterLine,{children:[(0,s.jsx)(a.Filter,{span:3,children:(0,s.jsx)(a.FormField,{fullWidth:!0,layout:l.FormFieldLayout.VERTICAL,name:`instanceSearchText`,children:(0,s.jsx)(a.Input,{fullWidth:!0,onChange:e=>{U(e.target.value),N(1)},placeholder:b,size:`sub`,value:H,variant:`base`})})}),(0,s.jsx)(a.Filter,{span:2,children:(0,s.jsx)(a.FormField,{fullWidth:!0,layout:l.FormFieldLayout.VERTICAL,name:`instanceState`,children:(0,s.jsx)(a.Select,{clearable:!1,fullWidth:!0,onChange:e=>{G(g(e)),N(1)},options:[...p],placeholder:`狀態`,renderValue:e=>`狀態:${v(e)}`,size:`sub`,value:W})})})]})}),children:[O?(0,s.jsx)(a.Typography,{color:`text-error`,variant:`body`,children:O}):null,!O&&!R&&B.length===0?(0,s.jsx)(a.Typography,{color:`text-neutral`,variant:`body`,children:y}):null,(0,s.jsx)(a.Table,{actions:Y,columns:J,dataSource:[...B],fullWidth:!0,loading:R,pagination:{current:M,onChange:e=>{N(e)},onChangePageSize:e=>{N(1),F(e)},pageSize:P,pageSizeLabel:`每頁筆數`,pageSizeOptions:f,renderResultSummary:(e,t,n)=>`顯示 ${e}-${t} 筆,共 ${n} 筆`,showPageSizeOptions:!0,total:I}})]})})]})}function h(e){return{...e,caseTitle:(0,c.readApprovalInstanceCaseTitle)(e),key:e.id,stateLabel:b(e.state)}}function g(e){return y(e)?_(e.state):p[0]}function _(e){return p.find(t=>t.state===e)??p[0]}function v(e){return y(e)?e.name:p[0].name}function y(e){return typeof e==`object`&&!!e&&`id`in e&&`name`in e&&`state`in e}function b(e){return e===`RUNNING`?`進行中`:e===`APPROVED`?`已通過`:e===`REJECTED`?`已拒絕`:e===`RETURNED`?`已退回`:e===`CANCELLED`?`已取消`:e===`EXPIRED`?`已逾期`:`草稿`}function x(e){return e===`APPROVED`?`text-success`:e===`REJECTED`||e===`CANCELLED`||e===`EXPIRED`?`text-error`:`text-neutral`}function S(e,t){let n=(e??``).trim();return n?t.get(n)?.name??n:`未知發起人`}function C(e){return e instanceof Error?e.message:`讀取簽核案件失敗。`}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return m}});
|
|
2
|
-
//# sourceMappingURL=approval-instance-list-page-fqvmkBlg.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"approval-instance-list-page-fqvmkBlg.cjs","names":["useRouterAdapter","useBPMRoutes","useState","useRef","useCallback","listApprovalInstancesPage","resolveMembers","useMemo","Typography","formatDateTime","_Fragment","PageHeader","ContentHeader","SectionGroup","Section","FilterArea","styles","FilterLine","Filter","FormField","FormFieldLayout","Input","Select","Table","readApprovalInstanceCaseTitle","require_rolldown_runtime","require_router_adapter","require_routes_config","require_format_date_time","react","_mezzanine_ui_react","_rytass_bpm_core_client","react_jsx_runtime","_rytass_bpm_core_client_workflow","_mezzanine_ui_core_form","_mezzanine_ui_react_ContentHeader","approval_instance_list_page_module_default","INSTANCE_PAGE_SIZE_OPTIONS","STATE_FILTER_OPTIONS","ApprovalInstanceListPage","router","routes","error","setError","initiatorProfilesById","setInitiatorProfilesById","instancePage","setInstancePage","instancePageSize","setInstancePageSize","instanceTotalCount","setInstanceTotalCount","loading","setLoading","rows","setRows","searchText","setSearchText","stateFilter","setStateFilter","readStateFilterOption","defaultState","refreshRequestIdRef","refreshInstances","requestId","result","readApprovalInstanceRow","requestError","readErrorMessage","view","initiatorMemberIds","row","cancelled","profiles","profile","columns","readInstanceStateColor","record","readInitiatorLabel","tableActions","event","searchPlaceholder","readSelectedStateFilterOption","option","readStateFilterLabel","value","emptyMessage","page","pageSize","from","to","total","instance","readInstanceStateLabel","isStateFilterOption","state","trimmedMemberId","initiatorMemberId"],"sources":["../../src/components/approval-instance-list-page.module.scss","../../src/components/approval-instance-list-page.tsx"],"sourcesContent":[".instanceFilterArea {\n :global(.mzn-filter-area__actions) {\n display: none;\n }\n\n :global(.mzn-form-field__label-area) {\n display: none;\n }\n\n :global(.mzn-form-field__control-field-slot--main) {\n width: 100%;\n min-width: 0;\n }\n}\n","'use client';\n\nimport type { ChangeEvent, ReactElement } from 'react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Filter,\n FilterArea,\n FilterLine,\n FormField,\n Input,\n PageHeader,\n Section,\n SectionGroup,\n Select,\n Table,\n Typography,\n} from '@mezzanine-ui/react';\nimport ContentHeader from '@mezzanine-ui/react/ContentHeader';\nimport { FormFieldLayout } from '@mezzanine-ui/core/form';\nimport type { TableActions, TableColumn } from '@mezzanine-ui/core/table';\nimport {\n resolveMembers,\n type MemberProfileRecord,\n} from '@rytass/bpm-core-client';\nimport {\n listApprovalInstancesPage,\n readApprovalInstanceCaseTitle,\n type ApprovalInstanceRecord,\n type ApprovalInstanceState,\n type ApprovalInstanceView,\n} from '@rytass/bpm-core-client/workflow';\nimport { useRouterAdapter } from '../lib/router-adapter';\nimport { useBPMRoutes } from '../lib/routes-config';\nimport { formatDateTime } from '../lib/format-date-time';\nimport styles from './approval-instance-list-page.module.scss';\n\nexport interface ApprovalInstanceListPageProps {\n readonly defaultState: ApprovalInstanceState | null;\n readonly description: string;\n readonly emptyMessage: string;\n readonly searchPlaceholder: string;\n readonly title: string;\n readonly view: ApprovalInstanceView;\n}\n\ntype StateFilterOption = Readonly<{\n id: 'ALL' | ApprovalInstanceState;\n name: string;\n state: ApprovalInstanceState | null;\n}>;\n\ntype ApprovalInstanceRow = Readonly<\n Record<string, unknown> &\n ApprovalInstanceRecord & {\n caseTitle: string;\n key: string;\n stateLabel: string;\n }\n>;\n\nconst INSTANCE_PAGE_SIZE_OPTIONS = [10, 20, 50];\nconst STATE_FILTER_OPTIONS: readonly StateFilterOption[] = [\n { id: 'ALL', name: '全部狀態', state: null },\n { id: 'RUNNING', name: '進行中', state: 'RUNNING' },\n { id: 'APPROVED', name: '已通過', state: 'APPROVED' },\n { id: 'REJECTED', name: '已拒絕', state: 'REJECTED' },\n { id: 'RETURNED', name: '已退回', state: 'RETURNED' },\n { id: 'CANCELLED', name: '已取消', state: 'CANCELLED' },\n { id: 'EXPIRED', name: '已逾期', state: 'EXPIRED' },\n { id: 'DRAFT', name: '草稿', state: 'DRAFT' },\n];\n\n/**\n * Shared list page for any approval-instance \"view\" (inbox / sent / cc /\n * delegated). Caller picks the view + default state filter; the page renders\n * the standard BPM filter bar + paginated table and navigates to\n * `/instances/:id` on row action.\n */\nexport function ApprovalInstanceListPage({\n defaultState,\n description,\n emptyMessage,\n searchPlaceholder,\n title,\n view,\n}: ApprovalInstanceListPageProps): ReactElement {\n const router = useRouterAdapter();\n const routes = useBPMRoutes();\n const [error, setError] = useState<string | null>(null);\n const [initiatorProfilesById, setInitiatorProfilesById] = useState<\n ReadonlyMap<string, MemberProfileRecord>\n >(new Map());\n const [instancePage, setInstancePage] = useState(1);\n const [instancePageSize, setInstancePageSize] = useState(10);\n const [instanceTotalCount, setInstanceTotalCount] = useState(0);\n const [loading, setLoading] = useState(true);\n const [rows, setRows] = useState<readonly ApprovalInstanceRow[]>([]);\n const [searchText, setSearchText] = useState('');\n const [stateFilter, setStateFilter] = useState<StateFilterOption>(\n readStateFilterOption(defaultState),\n );\n const refreshRequestIdRef = useRef(0);\n\n const refreshInstances = useCallback(async (): Promise<void> => {\n const requestId = refreshRequestIdRef.current + 1;\n refreshRequestIdRef.current = requestId;\n setLoading(true);\n setError(null);\n\n try {\n const result = await listApprovalInstancesPage({\n page: instancePage,\n pageSize: instancePageSize,\n searchText,\n state: stateFilter.state,\n templateId: null,\n view,\n });\n\n if (requestId !== refreshRequestIdRef.current) {\n return;\n }\n\n setRows(result.instances.map(readApprovalInstanceRow));\n setInstanceTotalCount(result.totalCount);\n } catch (requestError: unknown) {\n if (requestId === refreshRequestIdRef.current) {\n setError(readErrorMessage(requestError));\n }\n } finally {\n if (requestId === refreshRequestIdRef.current) {\n setLoading(false);\n }\n }\n }, [instancePage, instancePageSize, searchText, stateFilter, view]);\n\n useEffect((): void => {\n void refreshInstances();\n }, [refreshInstances]);\n\n useEffect((): (() => void) | void => {\n const initiatorMemberIds = Array.from(\n new Set(rows.map((row) => row.initiatorMemberId).filter(Boolean)),\n );\n\n if (initiatorMemberIds.length === 0) {\n setInitiatorProfilesById(new Map());\n\n return;\n }\n\n let cancelled = false;\n\n void (async (): Promise<void> => {\n try {\n const profiles = await resolveMembers(initiatorMemberIds);\n\n if (cancelled) {\n return;\n }\n\n setInitiatorProfilesById(\n new Map(profiles.map((profile) => [profile.memberId, profile])),\n );\n } catch {\n if (cancelled) {\n return;\n }\n\n setInitiatorProfilesById(new Map());\n }\n })();\n\n return (): void => {\n cancelled = true;\n };\n }, [rows]);\n\n const columns = useMemo(\n (): TableColumn<ApprovalInstanceRow>[] => [\n { dataIndex: 'caseTitle', key: 'caseTitle', title: '案件', width: 300 },\n {\n key: 'state',\n render: (record: ApprovalInstanceRow): ReactElement => (\n <Typography\n color={readInstanceStateColor(record.state)}\n component=\"span\"\n variant=\"body\"\n >\n {record.stateLabel}\n </Typography>\n ),\n title: '狀態',\n width: 120,\n },\n {\n key: 'initiatorMemberId',\n render: (record: ApprovalInstanceRow): ReactElement => (\n <Typography component=\"span\" variant=\"body\">\n {readInitiatorLabel(\n record.initiatorMemberId,\n initiatorProfilesById,\n )}\n </Typography>\n ),\n title: '發起人',\n width: 180,\n },\n {\n key: 'startedAt',\n render: (record: ApprovalInstanceRow): ReactElement => (\n <Typography component=\"span\" variant=\"body\">\n {formatDateTime(record.startedAt)}\n </Typography>\n ),\n title: '發起時間',\n width: 220,\n },\n {\n key: 'completedAt',\n render: (record: ApprovalInstanceRow): ReactElement => (\n <Typography component=\"span\" variant=\"body\">\n {formatDateTime(record.completedAt)}\n </Typography>\n ),\n title: '完成時間',\n width: 220,\n },\n ],\n [initiatorProfilesById],\n );\n const tableActions = useMemo(\n (): TableActions<ApprovalInstanceRow> => ({\n render: (\n record,\n ): ReturnType<TableActions<ApprovalInstanceRow>['render']> => [\n {\n name: '查看',\n onClick: (): void => router.push(routes.caseDetail(record.id)),\n },\n ],\n variant: 'base-secondary',\n width: 88,\n }),\n [router],\n );\n\n return (\n <>\n <PageHeader>\n <ContentHeader description={description} title={title} />\n </PageHeader>\n\n <SectionGroup>\n <Section\n filterArea={\n <FilterArea className={styles.instanceFilterArea} size=\"sub\">\n <FilterLine>\n <Filter span={3}>\n <FormField\n fullWidth\n layout={FormFieldLayout.VERTICAL}\n name=\"instanceSearchText\"\n >\n <Input\n fullWidth\n onChange={(\n event: ChangeEvent<HTMLInputElement>,\n ): void => {\n setSearchText(event.target.value);\n setInstancePage(1);\n }}\n placeholder={searchPlaceholder}\n size=\"sub\"\n value={searchText}\n variant=\"base\"\n />\n </FormField>\n </Filter>\n <Filter span={2}>\n <FormField\n fullWidth\n layout={FormFieldLayout.VERTICAL}\n name=\"instanceState\"\n >\n <Select\n clearable={false}\n fullWidth\n onChange={(option): void => {\n setStateFilter(readSelectedStateFilterOption(option));\n setInstancePage(1);\n }}\n options={[...STATE_FILTER_OPTIONS]}\n placeholder=\"狀態\"\n renderValue={(value): string =>\n `狀態:${readStateFilterLabel(value)}`\n }\n size=\"sub\"\n value={stateFilter}\n />\n </FormField>\n </Filter>\n </FilterLine>\n </FilterArea>\n }\n >\n {error ? (\n <Typography color=\"text-error\" variant=\"body\">\n {error}\n </Typography>\n ) : null}\n {!error && !loading && rows.length === 0 ? (\n <Typography color=\"text-neutral\" variant=\"body\">\n {emptyMessage}\n </Typography>\n ) : null}\n <Table\n actions={tableActions}\n columns={columns}\n dataSource={[...rows]}\n fullWidth\n loading={loading}\n pagination={{\n current: instancePage,\n onChange: (page): void => {\n setInstancePage(page);\n },\n onChangePageSize: (pageSize): void => {\n setInstancePage(1);\n setInstancePageSize(pageSize);\n },\n pageSize: instancePageSize,\n pageSizeLabel: '每頁筆數',\n pageSizeOptions: INSTANCE_PAGE_SIZE_OPTIONS,\n renderResultSummary: (from, to, total): string =>\n `顯示 ${from}-${to} 筆,共 ${total} 筆`,\n showPageSizeOptions: true,\n total: instanceTotalCount,\n }}\n />\n </Section>\n </SectionGroup>\n </>\n );\n}\n\nfunction readApprovalInstanceRow(\n instance: ApprovalInstanceRecord,\n): ApprovalInstanceRow {\n return {\n ...instance,\n caseTitle: readApprovalInstanceCaseTitle(instance),\n key: instance.id,\n stateLabel: readInstanceStateLabel(instance.state),\n };\n}\n\nfunction readSelectedStateFilterOption(option: unknown): StateFilterOption {\n if (!isStateFilterOption(option)) {\n return STATE_FILTER_OPTIONS[0];\n }\n return readStateFilterOption(option.state);\n}\n\nfunction readStateFilterOption(\n state: ApprovalInstanceState | null,\n): StateFilterOption {\n return (\n STATE_FILTER_OPTIONS.find((option) => option.state === state) ??\n STATE_FILTER_OPTIONS[0]\n );\n}\n\nfunction readStateFilterLabel(value: unknown): string {\n return isStateFilterOption(value) ? value.name : STATE_FILTER_OPTIONS[0].name;\n}\n\nfunction isStateFilterOption(value: unknown): value is StateFilterOption {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'id' in value &&\n 'name' in value &&\n 'state' in value\n );\n}\n\nfunction readInstanceStateLabel(state: ApprovalInstanceState): string {\n if (state === 'RUNNING') return '進行中';\n if (state === 'APPROVED') return '已通過';\n if (state === 'REJECTED') return '已拒絕';\n if (state === 'RETURNED') return '已退回';\n if (state === 'CANCELLED') return '已取消';\n if (state === 'EXPIRED') return '已逾期';\n return '草稿';\n}\n\nfunction readInstanceStateColor(\n state: ApprovalInstanceState,\n): 'text-error' | 'text-neutral' | 'text-success' {\n if (state === 'APPROVED') return 'text-success';\n if (state === 'REJECTED' || state === 'CANCELLED' || state === 'EXPIRED') {\n return 'text-error';\n }\n return 'text-neutral';\n}\n\nfunction readInitiatorLabel(\n initiatorMemberId: string | null | undefined,\n initiatorProfilesById: ReadonlyMap<string, MemberProfileRecord>,\n): string {\n const trimmedMemberId = (initiatorMemberId ?? '').trim();\n if (!trimmedMemberId) return '未知發起人';\n return initiatorProfilesById.get(trimmedMemberId)?.name ?? trimmedMemberId;\n}\n\nfunction readErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : '讀取簽核案件失敗。';\n}\n"],"mappings":"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"}
|