@rytass/bpm-core-react 0.3.1 → 0.3.2
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 +131 -0
- package/dist/chunks/app-navigation-BSkMsEhy.js +268 -0
- package/dist/chunks/app-navigation-BSkMsEhy.js.map +1 -0
- package/dist/chunks/app-navigation-KnlJCUp1.cjs +2 -0
- package/dist/chunks/app-navigation-KnlJCUp1.cjs.map +1 -0
- package/dist/chunks/approval-instance-list-page-CVXgE2K3.cjs +2 -0
- package/dist/chunks/approval-instance-list-page-CVXgE2K3.cjs.map +1 -0
- package/dist/chunks/{approval-instance-list-page-nmzMrj0b.js → approval-instance-list-page-CqNdoZqx.js} +73 -72
- package/dist/chunks/approval-instance-list-page-CqNdoZqx.js.map +1 -0
- package/dist/chunks/builder-CMlJfQHE.cjs +3 -0
- package/dist/chunks/builder-CMlJfQHE.cjs.map +1 -0
- package/dist/chunks/{builder-DqZskyXC.js → builder-D950gct_.js} +492 -491
- package/dist/chunks/builder-D950gct_.js.map +1 -0
- package/dist/chunks/categories-5yEM3p3N.cjs +2 -0
- package/dist/chunks/categories-5yEM3p3N.cjs.map +1 -0
- package/dist/chunks/{categories-DTEl182t.js → categories-BIpOG451.js} +115 -114
- package/dist/chunks/categories-BIpOG451.js.map +1 -0
- package/dist/chunks/dashboard-page-1K_jQXQk.cjs +2 -0
- package/dist/chunks/dashboard-page-1K_jQXQk.cjs.map +1 -0
- package/dist/chunks/dashboard-page-R_T2OEiE.js +122 -0
- package/dist/chunks/dashboard-page-R_T2OEiE.js.map +1 -0
- package/dist/chunks/{delegations-C5PzZ5Kn.js → delegations-B2j-wNEO.js} +193 -192
- package/dist/chunks/delegations-B2j-wNEO.js.map +1 -0
- package/dist/chunks/delegations-CsB9ozLu.cjs +2 -0
- package/dist/chunks/delegations-CsB9ozLu.cjs.map +1 -0
- package/dist/chunks/delegations-CvtwTXNP.cjs +2 -0
- package/dist/chunks/delegations-CvtwTXNP.cjs.map +1 -0
- package/dist/chunks/{delegations-C-ZrwzvU.js → delegations-dKodb0WW.js} +175 -174
- package/dist/chunks/delegations-dKodb0WW.js.map +1 -0
- package/dist/chunks/{detail-CfFyU5zC.js → detail-BcGAqJ_R.js} +465 -464
- package/dist/chunks/detail-BcGAqJ_R.js.map +1 -0
- package/dist/chunks/detail-CqjqLd65.cjs +2 -0
- package/dist/chunks/detail-CqjqLd65.cjs.map +1 -0
- package/dist/chunks/{format-date-time-isOa3e9q.cjs → format-date-time-26_pFvv4.cjs} +2 -2
- package/dist/chunks/{format-date-time-isOa3e9q.cjs.map → format-date-time-26_pFvv4.cjs.map} +1 -1
- package/dist/chunks/notifications-2swRqDPF.js +198 -0
- package/dist/chunks/notifications-2swRqDPF.js.map +1 -0
- package/dist/chunks/notifications-BaYDebFt.cjs +2 -0
- package/dist/chunks/notifications-BaYDebFt.cjs.map +1 -0
- package/dist/chunks/{orgs-xrdhb3hS.js → orgs-CuHxxd_n.js} +608 -607
- package/dist/chunks/orgs-CuHxxd_n.js.map +1 -0
- package/dist/chunks/orgs-YMiVLNvL.cjs +2 -0
- package/dist/chunks/orgs-YMiVLNvL.cjs.map +1 -0
- package/dist/chunks/routes-config-2aKbWq2H.cjs +2 -0
- package/dist/chunks/routes-config-2aKbWq2H.cjs.map +1 -0
- package/dist/chunks/routes-config-dxahImVe.js +43 -0
- package/dist/chunks/routes-config-dxahImVe.js.map +1 -0
- package/dist/chunks/templates-DTkbSgFY.cjs +2 -0
- package/dist/chunks/templates-DTkbSgFY.cjs.map +1 -0
- package/dist/chunks/templates-DoDWM68t.js +384 -0
- package/dist/chunks/templates-DoDWM68t.js.map +1 -0
- package/dist/chunks/users-3ySyUW4u.cjs +2 -0
- package/dist/chunks/users-3ySyUW4u.cjs.map +1 -0
- package/dist/chunks/{users-CY4-NK3j.js → users-sMfrSjRQ.js} +75 -74
- package/dist/chunks/users-sMfrSjRQ.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +101 -99
- package/dist/index.js.map +1 -1
- package/dist/lib/routes-config.d.ts +96 -0
- package/dist/next/index.cjs +1 -1
- package/dist/next/index.cjs.map +1 -1
- package/dist/next/index.d.ts +1 -0
- package/dist/next/index.js +22 -21
- package/dist/next/index.js.map +1 -1
- package/dist/pages/admin/delegations/index.cjs +1 -1
- package/dist/pages/admin/delegations/index.js +1 -1
- package/dist/pages/admin/orgs/index.cjs +1 -1
- package/dist/pages/admin/orgs/index.js +1 -1
- package/dist/pages/admin/users/index.cjs +1 -1
- package/dist/pages/admin/users/index.js +1 -1
- package/dist/pages/delegations/index.cjs +1 -1
- package/dist/pages/delegations/index.js +1 -1
- package/dist/pages/forms/builder/index.cjs +1 -1
- package/dist/pages/forms/builder/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/settings/notifications/index.cjs +1 -1
- package/dist/pages/settings/notifications/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/index.cjs +1 -1
- package/dist/pages/templates/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 +3 -3
- package/dist/views/admin/orgs/index.cjs +1 -1
- package/dist/views/admin/orgs/index.js +1 -1
- package/dist/views/admin/users/index.cjs +1 -1
- package/dist/views/admin/users/index.js +1 -1
- package/dist/views/cc/index.cjs +1 -1
- package/dist/views/cc/index.js +1 -1
- package/dist/views/dashboard/index.cjs +1 -1
- package/dist/views/dashboard/index.js +1 -1
- package/dist/views/delegations/index.cjs +1 -1
- package/dist/views/delegations/index.js +1 -1
- package/dist/views/forms/builder/index.cjs +1 -1
- package/dist/views/forms/builder/index.js +1 -1
- package/dist/views/forms/index.cjs +1 -1
- package/dist/views/forms/index.cjs.map +1 -1
- package/dist/views/forms/index.js +78 -77
- package/dist/views/forms/index.js.map +1 -1
- package/dist/views/inbox/index.cjs +1 -1
- package/dist/views/inbox/index.cjs.map +1 -1
- package/dist/views/inbox/index.js +106 -105
- package/dist/views/inbox/index.js.map +1 -1
- package/dist/views/instances/detail/index.cjs +1 -1
- package/dist/views/instances/detail/index.js +1 -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 +90 -89
- 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/settings/index.cjs +1 -1
- package/dist/views/settings/index.js +1 -1
- package/dist/views/settings/notifications/index.cjs +1 -1
- package/dist/views/settings/notifications/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/designer/index.cjs +6 -6
- package/dist/views/templates/designer/index.cjs.map +1 -1
- package/dist/views/templates/designer/index.js +589 -588
- package/dist/views/templates/designer/index.js.map +1 -1
- package/dist/views/templates/index.cjs +1 -1
- package/dist/views/templates/index.js +2 -2
- package/dist/views/templates/versions/index.cjs +1 -1
- package/dist/views/templates/versions/index.cjs.map +1 -1
- package/dist/views/templates/versions/index.js +44 -43
- package/dist/views/templates/versions/index.js.map +1 -1
- package/package.json +3 -3
- package/dist/chunks/app-navigation-C_mbz7jx.cjs +0 -2
- package/dist/chunks/app-navigation-C_mbz7jx.cjs.map +0 -1
- package/dist/chunks/app-navigation-uwbNEw9P.js +0 -262
- package/dist/chunks/app-navigation-uwbNEw9P.js.map +0 -1
- package/dist/chunks/approval-instance-list-page-Mo6wpDPb.cjs +0 -2
- package/dist/chunks/approval-instance-list-page-Mo6wpDPb.cjs.map +0 -1
- package/dist/chunks/approval-instance-list-page-nmzMrj0b.js.map +0 -1
- package/dist/chunks/builder-DPhAH381.cjs +0 -3
- package/dist/chunks/builder-DPhAH381.cjs.map +0 -1
- package/dist/chunks/builder-DqZskyXC.js.map +0 -1
- package/dist/chunks/categories-DEijUOnw.cjs +0 -2
- package/dist/chunks/categories-DEijUOnw.cjs.map +0 -1
- package/dist/chunks/categories-DTEl182t.js.map +0 -1
- package/dist/chunks/dashboard-page-DCmuB0Rw.cjs +0 -2
- package/dist/chunks/dashboard-page-DCmuB0Rw.cjs.map +0 -1
- package/dist/chunks/dashboard-page-Dx5PeEeN.js +0 -117
- package/dist/chunks/dashboard-page-Dx5PeEeN.js.map +0 -1
- package/dist/chunks/delegations-C-ZrwzvU.js.map +0 -1
- package/dist/chunks/delegations-C5PzZ5Kn.js.map +0 -1
- package/dist/chunks/delegations-DOGDvybX.cjs +0 -2
- package/dist/chunks/delegations-DOGDvybX.cjs.map +0 -1
- package/dist/chunks/delegations-DkDBWOQ7.cjs +0 -2
- package/dist/chunks/delegations-DkDBWOQ7.cjs.map +0 -1
- package/dist/chunks/detail-B2gcOPkd.cjs +0 -2
- package/dist/chunks/detail-B2gcOPkd.cjs.map +0 -1
- package/dist/chunks/detail-CfFyU5zC.js.map +0 -1
- package/dist/chunks/notifications-CPQ-nVar.cjs +0 -2
- package/dist/chunks/notifications-CPQ-nVar.cjs.map +0 -1
- package/dist/chunks/notifications-DweexUVy.js +0 -197
- package/dist/chunks/notifications-DweexUVy.js.map +0 -1
- package/dist/chunks/orgs-DgZ0DQ3-.cjs +0 -2
- package/dist/chunks/orgs-DgZ0DQ3-.cjs.map +0 -1
- package/dist/chunks/orgs-xrdhb3hS.js.map +0 -1
- package/dist/chunks/templates-PK_VYvcy.js +0 -383
- package/dist/chunks/templates-PK_VYvcy.js.map +0 -1
- package/dist/chunks/templates-x1OJZmsG.cjs +0 -2
- package/dist/chunks/templates-x1OJZmsG.cjs.map +0 -1
- package/dist/chunks/users-CY4-NK3j.js.map +0 -1
- package/dist/chunks/users-DHnu_056.cjs +0 -2
- package/dist/chunks/users-DHnu_056.cjs.map +0 -1
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { a as e } from "./auth-provider-Bnox5gsx.js";
|
|
3
3
|
import { t } from "./format-date-time-CB-LxzqT.js";
|
|
4
|
-
import { t as n } from "./app-navigation-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import b from "@
|
|
11
|
-
import
|
|
12
|
-
import
|
|
4
|
+
import { t as n } from "./app-navigation-BSkMsEhy.js";
|
|
5
|
+
import { r } from "./routes-config-dxahImVe.js";
|
|
6
|
+
import { useCallback as ee, useEffect as i, useMemo as a, useState as o } from "react";
|
|
7
|
+
import { Filter as s, FilterArea as te, FilterLine as c, FormField as l, Input as u, PageHeader as d, Section as f, SectionGroup as p, Select as m, Table as ne, Typography as h } from "@mezzanine-ui/react";
|
|
8
|
+
import { resolveMembers as g } from "@rytass/bpm-core-client";
|
|
9
|
+
import { jsx as _, jsxs as v } from "react/jsx-runtime";
|
|
10
|
+
import { listApprovalInstancesPage as y, readApprovalInstanceCaseTitle as b } from "@rytass/bpm-core-client/workflow";
|
|
11
|
+
import x from "@mezzanine-ui/react/ContentHeader";
|
|
12
|
+
import { FormFieldLayout as S } from "@mezzanine-ui/core/form";
|
|
13
|
+
import '../approval-instance-list-page.css';var C = { instanceFilterArea: "bpm_instanceFilterArea_qpvJq" }, w = [
|
|
13
14
|
10,
|
|
14
15
|
20,
|
|
15
16
|
50
|
|
16
|
-
],
|
|
17
|
+
], T = [
|
|
17
18
|
{
|
|
18
19
|
id: "ALL",
|
|
19
20
|
name: "全部狀態",
|
|
@@ -55,21 +56,21 @@ import '../approval-instance-list-page.css';var S = { instanceFilterArea: "bpm_i
|
|
|
55
56
|
state: "DRAFT"
|
|
56
57
|
}
|
|
57
58
|
];
|
|
58
|
-
function
|
|
59
|
-
let
|
|
59
|
+
function E({ activeHref: b, defaultState: E, description: O, emptyMessage: k, searchPlaceholder: N, title: P, view: F }) {
|
|
60
|
+
let I = e(), L = r(), [R, z] = o(null), [B, V] = o(/* @__PURE__ */ new Map()), [H, U] = o(1), [W, G] = o(10), [K, q] = o(0), [J, Y] = o(!0), [X, oe] = o([]), [Z, se] = o(""), [Q, ce] = o(D(E)), $ = ee(async () => {
|
|
60
61
|
Y(!0), z(null);
|
|
61
62
|
try {
|
|
62
|
-
let e = await
|
|
63
|
+
let e = await y({
|
|
63
64
|
page: H,
|
|
64
65
|
pageSize: W,
|
|
65
66
|
searchText: Z,
|
|
66
67
|
state: Q.state,
|
|
67
68
|
templateId: null,
|
|
68
|
-
view:
|
|
69
|
+
view: F
|
|
69
70
|
});
|
|
70
|
-
|
|
71
|
+
oe(e.instances.map(re)), q(e.totalCount);
|
|
71
72
|
} catch (e) {
|
|
72
|
-
z(
|
|
73
|
+
z(M(e));
|
|
73
74
|
} finally {
|
|
74
75
|
Y(!1);
|
|
75
76
|
}
|
|
@@ -78,7 +79,7 @@ function T({ activeHref: y, defaultState: T, description: k, emptyMessage: A, se
|
|
|
78
79
|
W,
|
|
79
80
|
Z,
|
|
80
81
|
Q,
|
|
81
|
-
|
|
82
|
+
F
|
|
82
83
|
]);
|
|
83
84
|
i(() => {
|
|
84
85
|
$();
|
|
@@ -91,7 +92,7 @@ function T({ activeHref: y, defaultState: T, description: k, emptyMessage: A, se
|
|
|
91
92
|
let t = !1;
|
|
92
93
|
return (async () => {
|
|
93
94
|
try {
|
|
94
|
-
let n = await
|
|
95
|
+
let n = await g(e);
|
|
95
96
|
if (t) return;
|
|
96
97
|
V(new Map(n.map((e) => [e.memberId, e])));
|
|
97
98
|
} catch {
|
|
@@ -102,7 +103,7 @@ function T({ activeHref: y, defaultState: T, description: k, emptyMessage: A, se
|
|
|
102
103
|
t = !0;
|
|
103
104
|
};
|
|
104
105
|
}, [X]);
|
|
105
|
-
let
|
|
106
|
+
let le = a(() => [
|
|
106
107
|
{
|
|
107
108
|
dataIndex: "caseTitle",
|
|
108
109
|
key: "caseTitle",
|
|
@@ -111,8 +112,8 @@ function T({ activeHref: y, defaultState: T, description: k, emptyMessage: A, se
|
|
|
111
112
|
},
|
|
112
113
|
{
|
|
113
114
|
key: "state",
|
|
114
|
-
render: (e) => /* @__PURE__ */
|
|
115
|
-
color:
|
|
115
|
+
render: (e) => /* @__PURE__ */ _(h, {
|
|
116
|
+
color: A(e.state),
|
|
116
117
|
component: "span",
|
|
117
118
|
variant: "body",
|
|
118
119
|
children: e.stateLabel
|
|
@@ -122,17 +123,17 @@ function T({ activeHref: y, defaultState: T, description: k, emptyMessage: A, se
|
|
|
122
123
|
},
|
|
123
124
|
{
|
|
124
125
|
key: "initiatorMemberId",
|
|
125
|
-
render: (e) => /* @__PURE__ */
|
|
126
|
+
render: (e) => /* @__PURE__ */ _(h, {
|
|
126
127
|
component: "span",
|
|
127
128
|
variant: "body",
|
|
128
|
-
children:
|
|
129
|
+
children: j(e.initiatorMemberId, B)
|
|
129
130
|
}),
|
|
130
131
|
title: "發起人",
|
|
131
132
|
width: 180
|
|
132
133
|
},
|
|
133
134
|
{
|
|
134
135
|
key: "startedAt",
|
|
135
|
-
render: (e) => /* @__PURE__ */
|
|
136
|
+
render: (e) => /* @__PURE__ */ _(h, {
|
|
136
137
|
component: "span",
|
|
137
138
|
variant: "body",
|
|
138
139
|
children: t(e.startedAt)
|
|
@@ -142,7 +143,7 @@ function T({ activeHref: y, defaultState: T, description: k, emptyMessage: A, se
|
|
|
142
143
|
},
|
|
143
144
|
{
|
|
144
145
|
key: "completedAt",
|
|
145
|
-
render: (e) => /* @__PURE__ */
|
|
146
|
+
render: (e) => /* @__PURE__ */ _(h, {
|
|
146
147
|
component: "span",
|
|
147
148
|
variant: "body",
|
|
148
149
|
children: t(e.completedAt)
|
|
@@ -150,55 +151,55 @@ function T({ activeHref: y, defaultState: T, description: k, emptyMessage: A, se
|
|
|
150
151
|
title: "完成時間",
|
|
151
152
|
width: 220
|
|
152
153
|
}
|
|
153
|
-
], [B]),
|
|
154
|
+
], [B]), ue = a(() => ({
|
|
154
155
|
render: (e) => [{
|
|
155
156
|
name: "查看",
|
|
156
|
-
onClick: () =>
|
|
157
|
+
onClick: () => I.push(L.caseDetail(e.id))
|
|
157
158
|
}],
|
|
158
159
|
variant: "base-secondary",
|
|
159
160
|
width: 88
|
|
160
|
-
}), [
|
|
161
|
-
return /* @__PURE__ */
|
|
162
|
-
activeHref:
|
|
163
|
-
children: [/* @__PURE__ */
|
|
164
|
-
description:
|
|
165
|
-
title:
|
|
166
|
-
}) }), /* @__PURE__ */
|
|
167
|
-
filterArea: /* @__PURE__ */
|
|
168
|
-
className:
|
|
161
|
+
}), [I]);
|
|
162
|
+
return /* @__PURE__ */ v(n, {
|
|
163
|
+
activeHref: b,
|
|
164
|
+
children: [/* @__PURE__ */ _(d, { children: /* @__PURE__ */ _(x, {
|
|
165
|
+
description: O,
|
|
166
|
+
title: P
|
|
167
|
+
}) }), /* @__PURE__ */ _(p, { children: /* @__PURE__ */ v(f, {
|
|
168
|
+
filterArea: /* @__PURE__ */ _(te, {
|
|
169
|
+
className: C.instanceFilterArea,
|
|
169
170
|
size: "sub",
|
|
170
|
-
children: /* @__PURE__ */
|
|
171
|
+
children: /* @__PURE__ */ v(c, { children: [/* @__PURE__ */ _(s, {
|
|
171
172
|
span: 3,
|
|
172
|
-
children: /* @__PURE__ */
|
|
173
|
+
children: /* @__PURE__ */ _(l, {
|
|
173
174
|
fullWidth: !0,
|
|
174
|
-
layout:
|
|
175
|
+
layout: S.VERTICAL,
|
|
175
176
|
name: "instanceSearchText",
|
|
176
|
-
children: /* @__PURE__ */
|
|
177
|
+
children: /* @__PURE__ */ _(u, {
|
|
177
178
|
fullWidth: !0,
|
|
178
179
|
onChange: (e) => {
|
|
179
|
-
|
|
180
|
+
se(e.target.value), U(1);
|
|
180
181
|
},
|
|
181
|
-
placeholder:
|
|
182
|
+
placeholder: N,
|
|
182
183
|
size: "sub",
|
|
183
184
|
value: Z,
|
|
184
185
|
variant: "base"
|
|
185
186
|
})
|
|
186
187
|
})
|
|
187
|
-
}), /* @__PURE__ */
|
|
188
|
+
}), /* @__PURE__ */ _(s, {
|
|
188
189
|
span: 2,
|
|
189
|
-
children: /* @__PURE__ */
|
|
190
|
+
children: /* @__PURE__ */ _(l, {
|
|
190
191
|
fullWidth: !0,
|
|
191
|
-
layout:
|
|
192
|
+
layout: S.VERTICAL,
|
|
192
193
|
name: "instanceState",
|
|
193
|
-
children: /* @__PURE__ */
|
|
194
|
+
children: /* @__PURE__ */ _(m, {
|
|
194
195
|
clearable: !1,
|
|
195
196
|
fullWidth: !0,
|
|
196
197
|
onChange: (e) => {
|
|
197
|
-
|
|
198
|
+
ce(ie(e)), U(1);
|
|
198
199
|
},
|
|
199
|
-
options: [...
|
|
200
|
+
options: [...T],
|
|
200
201
|
placeholder: "狀態",
|
|
201
|
-
renderValue: (e) => `狀態:${
|
|
202
|
+
renderValue: (e) => `狀態:${ae(e)}`,
|
|
202
203
|
size: "sub",
|
|
203
204
|
value: Q
|
|
204
205
|
})
|
|
@@ -206,19 +207,19 @@ function T({ activeHref: y, defaultState: T, description: k, emptyMessage: A, se
|
|
|
206
207
|
})] })
|
|
207
208
|
}),
|
|
208
209
|
children: [
|
|
209
|
-
R ? /* @__PURE__ */
|
|
210
|
+
R ? /* @__PURE__ */ _(h, {
|
|
210
211
|
color: "text-error",
|
|
211
212
|
variant: "body",
|
|
212
213
|
children: R
|
|
213
214
|
}) : null,
|
|
214
|
-
!R && !J && X.length === 0 ? /* @__PURE__ */
|
|
215
|
+
!R && !J && X.length === 0 ? /* @__PURE__ */ _(h, {
|
|
215
216
|
color: "text-neutral",
|
|
216
217
|
variant: "body",
|
|
217
|
-
children:
|
|
218
|
+
children: k
|
|
218
219
|
}) : null,
|
|
219
|
-
/* @__PURE__ */
|
|
220
|
-
actions:
|
|
221
|
-
columns:
|
|
220
|
+
/* @__PURE__ */ _(ne, {
|
|
221
|
+
actions: ue,
|
|
222
|
+
columns: le,
|
|
222
223
|
dataSource: [...X],
|
|
223
224
|
fullWidth: !0,
|
|
224
225
|
loading: J,
|
|
@@ -232,7 +233,7 @@ function T({ activeHref: y, defaultState: T, description: k, emptyMessage: A, se
|
|
|
232
233
|
},
|
|
233
234
|
pageSize: W,
|
|
234
235
|
pageSizeLabel: "每頁筆數",
|
|
235
|
-
pageSizeOptions:
|
|
236
|
+
pageSizeOptions: w,
|
|
236
237
|
renderResultSummary: (e, t, n) => `顯示 ${e}-${t} 筆,共 ${n} 筆`,
|
|
237
238
|
showPageSizeOptions: !0,
|
|
238
239
|
total: K
|
|
@@ -242,40 +243,40 @@ function T({ activeHref: y, defaultState: T, description: k, emptyMessage: A, se
|
|
|
242
243
|
}) })]
|
|
243
244
|
});
|
|
244
245
|
}
|
|
245
|
-
function
|
|
246
|
+
function re(e) {
|
|
246
247
|
return {
|
|
247
248
|
...e,
|
|
248
|
-
caseTitle:
|
|
249
|
+
caseTitle: b(e),
|
|
249
250
|
key: e.id,
|
|
250
|
-
stateLabel:
|
|
251
|
+
stateLabel: k(e.state)
|
|
251
252
|
};
|
|
252
253
|
}
|
|
253
|
-
function
|
|
254
|
-
return
|
|
254
|
+
function ie(e) {
|
|
255
|
+
return O(e) ? D(e.state) : T[0];
|
|
255
256
|
}
|
|
256
|
-
function
|
|
257
|
-
return
|
|
257
|
+
function D(e) {
|
|
258
|
+
return T.find((t) => t.state === e) ?? T[0];
|
|
258
259
|
}
|
|
259
|
-
function
|
|
260
|
-
return
|
|
260
|
+
function ae(e) {
|
|
261
|
+
return O(e) ? e.name : T[0].name;
|
|
261
262
|
}
|
|
262
|
-
function
|
|
263
|
+
function O(e) {
|
|
263
264
|
return typeof e == "object" && !!e && "id" in e && "name" in e && "state" in e;
|
|
264
265
|
}
|
|
265
|
-
function
|
|
266
|
+
function k(e) {
|
|
266
267
|
return e === "RUNNING" ? "進行中" : e === "APPROVED" ? "已通過" : e === "REJECTED" ? "已拒絕" : e === "RETURNED" ? "已退回" : e === "CANCELLED" ? "已取消" : e === "EXPIRED" ? "已逾期" : "草稿";
|
|
267
268
|
}
|
|
268
|
-
function
|
|
269
|
+
function A(e) {
|
|
269
270
|
return e === "APPROVED" ? "text-success" : e === "REJECTED" || e === "CANCELLED" || e === "EXPIRED" ? "text-error" : "text-neutral";
|
|
270
271
|
}
|
|
271
|
-
function
|
|
272
|
+
function j(e, t) {
|
|
272
273
|
let n = (e ?? "").trim();
|
|
273
274
|
return n ? t.get(n)?.name ?? n : "未知發起人";
|
|
274
275
|
}
|
|
275
|
-
function
|
|
276
|
+
function M(e) {
|
|
276
277
|
return e instanceof Error ? e.message : "讀取簽核案件失敗。";
|
|
277
278
|
}
|
|
278
279
|
//#endregion
|
|
279
|
-
export {
|
|
280
|
+
export { E as t };
|
|
280
281
|
|
|
281
|
-
//# sourceMappingURL=approval-instance-list-page-
|
|
282
|
+
//# sourceMappingURL=approval-instance-list-page-CqNdoZqx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-instance-list-page-CqNdoZqx.js","names":[],"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, 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 { resolveMembers, type MemberProfileRecord } 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 { AppLayout } from './app-navigation';\nimport styles from './approval-instance-list-page.module.scss';\n\nexport interface ApprovalInstanceListPageProps {\n readonly activeHref: string;\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 activeHref,\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\n const refreshInstances = useCallback(async (): Promise<void> => {\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 setRows(result.instances.map(readApprovalInstanceRow));\n setInstanceTotalCount(result.totalCount);\n } catch (requestError: unknown) {\n setError(readErrorMessage(requestError));\n } finally {\n setLoading(false);\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 <AppLayout activeHref={activeHref}>\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 </AppLayout>\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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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";const e=require("./app-navigation-KnlJCUp1.cjs"),t=require("./auth-provider-BV8Iiwfb.cjs"),n=require("./format-date-time-26_pFvv4.cjs"),r=require("./routes-config-2aKbWq2H.cjs"),i=require("./bpm-form-field-Bc6k4ZEO.cjs"),a=require("./FormRendererView-BwVsH2eX.cjs"),o=require("./form-name-modal-uZCHbtRH.cjs");let s=require("react"),c=require("@mezzanine-ui/react"),l=require("react/jsx-runtime"),u=require("@mezzanine-ui/icons"),d=require("@mezzanine-ui/react/ContentHeader");d=e.o(d,1);let f=require("@rytass/bpm-core-client/form"),p=require("@hello-pangea/dnd"),m=require("next/dynamic");m=e.o(m,1);let h=require("@codemirror/lang-json"),g=require("@codemirror/view");var _={alignItems:`center`,border:`1px solid var(--mzn-color-border-neutral)`,borderRadius:4,color:`var(--mzn-color-text-neutral)`,display:`flex`,minHeight:160,padding:12,width:`100%`},v=[(0,h.json)(),g.EditorView.lineWrapping,g.EditorView.theme({"&":{border:`1px solid var(--mzn-color-border-neutral)`,borderRadius:`4px`,fontSize:`13px`,width:`100%`},"&.cm-focused":{outline:`1px solid var(--mzn-color-border-primary)`},".cm-content":{fontFamily:`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace`,minHeight:`100%`},".cm-editor":{width:`100%`},".cm-gutters":{borderRight:`1px solid var(--mzn-color-border-neutral)`},".cm-scroller":{fontFamily:`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace`}})],y=(0,m.default)(()=>import(`@uiw/react-codemirror`),{loading:()=>(0,l.jsx)(`div`,{style:_,children:`載入 JSON 編輯器`}),ssr:!1});function ee({disabled:e,height:t,name:n,onChange:r,placeholder:i,value:a}){return(0,l.jsx)(y,{"aria-label":n,basicSetup:{autocompletion:!0,bracketMatching:!0,closeBrackets:!0,defaultKeymap:!0,foldGutter:!0,highlightActiveLine:!0,highlightSelectionMatches:!0,lineNumbers:!0,syntaxHighlighting:!0},editable:!e,extensions:[...v],height:t,indentWithTab:!1,onChange:r,placeholder:i,readOnly:e,theme:`light`,value:a,width:`100%`})}var te=[{description:`單行文字、姓名、編號`,icon:u.AlignLeftIcon,label:`文字`,type:`text`},{description:`多行補充內容`,icon:u.FileIcon,label:`長文字`,type:`textarea`},{description:`金額、數量、分數`,icon:u.CurrencyDollarIcon,label:`數字`,type:`number`},{description:`金額與費用`,icon:u.CurrencyDollarIcon,label:`金額`,type:`money`},{description:`日期或到期日`,icon:u.CalendarIcon,label:`日期`,type:`date`},{description:`日期與時間`,icon:u.CalendarIcon,label:`日期時間`,type:`datetime`},{description:`是 / 否狀態`,icon:u.CheckedIcon,label:`開關`,type:`boolean`},{description:`固定選項擇一`,icon:u.ListIcon,label:`下拉選單`,type:`select`},{description:`固定選項單選`,icon:u.DotGridIcon,label:`單選`,type:`radio`},{description:`固定選項複選`,icon:u.CheckedOutlineIcon,label:`複選`,type:`checkbox`},{description:`附件或佐證資料`,icon:u.FileAttachmentIcon,label:`附件`,type:`file_upload`}],ne={alignItems:`start`,display:`flex`,flexWrap:`wrap`,gap:16},re={flex:`0.55 1 300px`,minWidth:0},ie={flex:`1.45 1 720px`,minWidth:620},b={display:`grid`,gap:12},ae={display:`flex`,flexWrap:`wrap`,gap:6},oe={flex:`0 0 auto`,whiteSpace:`nowrap`},se={display:`grid`,gap:8},ce={alignItems:`center`,cursor:`grab`,display:`flex`,gap:12,touchAction:`none`},le={display:`grid`,flex:`1 1 auto`,gap:2,minWidth:0},ue={alignItems:`center`,display:`flex`,flex:`0 0 auto`,gap:4},de={alignItems:`center`,display:`flex`,gap:6},fe={userSelect:`none`},pe={filter:`drop-shadow(0 8px 18px rgba(0, 0, 0, 0.12))`},me={alignItems:`center`,border:`1px dashed var(--mzn-color-border-neutral)`,borderRadius:6,display:`grid`,gap:12,minHeight:240,padding:32,textAlign:`center`},he={display:`flex`,gap:8,justifyContent:`center`},ge={display:`grid`,gap:14},_e={display:`grid`,columnGap:16,gridTemplateColumns:`repeat(auto-fit, minmax(280px, 1fr))`,rowGap:8},ve={gridColumn:`1 / -1`},ye={alignItems:`center`,display:`flex`,gap:8,gridColumn:`1 / -1`,justifyContent:`flex-end`},be={gridColumn:`1 / -1`},xe={alignItems:`start`,display:`block`,width:`100%`},Se={...xe,gridColumn:`1 / -1`},Ce={minWidth:0,width:`100%`},we={minWidth:`100%`,width:`100%`},Te={display:`grid`,gap:14},Ee={alignItems:`start`,display:`block`,width:`100%`},De={minWidth:0,width:`100%`},Oe={gridColumn:`2 / -1`},ke={display:`grid`,gap:10,width:`100%`},Ae={display:`grid`,gap:8,gridTemplateColumns:`repeat(auto-fit, minmax(160px, 1fr))`},je={display:`inline-flex`},Me={display:`grid`,gap:16},Ne={display:`grid`,gap:8},Pe={display:`flex`,justifyContent:`flex-end`},Fe={color:`var(--mzn-color-text-error)`,fontSize:`0.72em`,lineHeight:0,marginLeft:2,verticalAlign:`super`};function Ie(e){e&&(e.style.width=`100%`)}var x={fields:[],schemaVersion:1},S={layout:[],schemaVersion:1},Le=[{id:`unset`,name:`不預設`},{id:`true`,name:`是`},{id:`false`,name:`否`}],Re=[{id:`true`,name:`是`},{id:`false`,name:`否`}],ze=[{label:`顯示`,name:`fieldVisibleWhen`,supportingText:`符合條件時才顯示這個欄位。`,target:`visibleWhen`},{label:`必填`,name:`fieldRequiredWhen`,supportingText:`符合條件時才要求填寫這個欄位。`,target:`requiredWhen`},{label:`唯讀`,name:`fieldReadonlyWhen`,supportingText:`符合條件時不允許修改這個欄位。`,target:`readonlyWhen`}];function C({formId:m}){let h=t.a(),g=r.r(),_=m,[v,y]=(0,s.useState)(null),[C,E]=(0,s.useState)(null),[O,A]=(0,s.useState)(x),[j,M]=(0,s.useState)(S),[Qe,N]=(0,s.useState)(T(x)),[$e,P]=(0,s.useState)(T(S)),[et,tt]=(0,s.useState)({}),[nt,F]=(0,s.useState)(null),[I,rt]=(0,s.useState)(`design`),[L,R]=(0,s.useState)(null),[it,z]=(0,s.useState)(null),[at,B]=(0,s.useState)(!1),[ot,st]=(0,s.useState)(D(x,S)),[ct,lt]=(0,s.useState)(!0),[ut,dt]=(0,s.useState)(!1),[V,H]=(0,s.useState)(!1);(0,s.useEffect)(()=>{K()},[_]),(0,s.useEffect)(()=>{O.fields.some(e=>e.fieldKey===L)||R(O.fields[0]?.fieldKey??null)},[O.fields,L]),(0,s.useEffect)(()=>{tt(e=>(0,f.buildFormRendererValues)(O.fields,e))},[O.fields]),(0,s.useEffect)(()=>{I!==`advanced`&&(N(T(O)),P(T(j)))},[I,O,j]);let U=(0,s.useMemo)(()=>O.fields.find(e=>e.fieldKey===L)??O.fields[0]??null,[O.fields,L]),ft=(0,s.useMemo)(()=>(v?.versions??[]).map(e=>({key:e.id,publishedAt:n.t(e.publishedAt),status:e.status,updatedAt:n.t(e.updatedAt),version:`v${e.version}`})),[v]),pt=(0,s.useMemo)(()=>[{dataIndex:`version`,key:`version`,title:`版本`,width:120},{key:`status`,render:e=>(0,l.jsx)(Ze,{status:e.status}),title:`狀態`,width:140},{dataIndex:`updatedAt`,key:`updatedAt`,title:`最後更新`,width:180},{dataIndex:`publishedAt`,key:`publishedAt`,title:`發布時間`,width:180}],[]),mt=(0,s.useMemo)(()=>D(O,j),[O,j]),W=mt.schemaJson!==ot.schemaJson||mt.uiSchemaJson!==ot.uiSchemaJson;(0,s.useEffect)(()=>{function e(e){W&&(e.preventDefault(),e.returnValue=``)}return window.addEventListener(`beforeunload`,e),()=>{window.removeEventListener(`beforeunload`,e)}},[W]);function ht(){W&&!window.confirm(`目前有尚未儲存的表單草稿,確定要離開嗎?`)||h.push(g.forms())}let gt=(0,s.useMemo)(()=>Je(v?.versions??[],v?.definition.currentVersionId),[v?.definition.currentVersionId,v?.versions]),_t=C??gt??v?.versions[0]??null,G=!W&&_t?.status===`PUBLISHED`,vt=Ye({hasUnsavedChanges:W,latestPublishedVersion:gt,openedContentPublished:G,openedVersion:_t}),yt=V||!W&&G&&!C,bt=W?`保存並發布`:C?`發布草稿`:G?`已發布`:`發布版本`;async function K(){lt(!0),z(null);try{let e=await(0,f.readFormBuilder)(_),t=e.versions.find(e=>e.status===`DRAFT`)??null;y(e),E(t);let n=t?.schema??e.versions[0]?.schema??x,r=t?.uiSchema??e.versions[0]?.uiSchema??S;A(n),M(r),st(D(n,r)),N(T(n)),P(T(r)),R(t?.schema.fields[0]?.fieldKey??e.versions[0]?.schema.fields[0]?.fieldKey??null),F(null)}catch(e){z(k(e))}finally{lt(!1)}}async function xt(){let e=await(0,f.updateFormDefinitionDraft)((C??await(0,f.forkFormDefinition)(_)).id,O,j);return E(e),e}async function St(){H(!0),z(null);try{await xt(),await K()}catch(e){z(k(e))}finally{H(!1)}}async function Ct(){H(!0),z(null);try{await(0,f.publishFormDefinitionVersion)((await xt()).id),await K()}catch(e){z(k(e))}finally{H(!1)}}async function wt(e){if(!v)throw Error(`尚未載入表單資料`);dt(!0);try{let t=await(0,f.updateFormDefinition)(v.definition.id,e);y({...v,definition:t}),B(!1)}finally{dt(!1)}}function Tt(e){let t=(0,f.createFieldDefinition)(e,O.fields.length+1);A({...O,fields:[...O.fields,t]}),M({...j,layout:[...j.layout,{fieldKey:t.fieldKey,width:e===`textarea`||e===`file_upload`?`FULL`:`HALF`}]}),R(t.fieldKey),rt(`design`),F(null)}function Et(e){let t=e;t===`advanced`&&I!==`advanced`&&(N(T(O)),P(T(j))),rt(t)}function Dt(e){let t=O.fields.filter(t=>t.fieldKey!==e);A({...O,fields:t}),M({...j,layout:j.layout.filter(t=>t.fieldKey!==e)}),R(L===e?t[0]?.fieldKey??null:L),F(null)}function Ot(e){let t=e.destination;t&&e.source.index!==t.index&&(A(n=>({...n,fields:Xe(n.fields,e.source.index,t.index)})),M(n=>({...n,layout:Xe(n.layout,e.source.index,t.index)})),F(null))}function q(e){J(t=>({...t,...e}))}function J(e){if(!U)return;let t=U.fieldKey,n=e(U),r=n.fieldKey;A({...O,fields:O.fields.map(e=>e.fieldKey===t?n:e)}),M({...j,layout:j.layout.map(e=>e.fieldKey===t?{...e,fieldKey:r}:e)}),R(r),F(null)}function Y(e){J(t=>Ue(t)?{...t,...e}:t)}function kt(e){J(t=>(0,f.isNumberFieldDefinition)(t)?{...t,...e}:t)}function At(e){J(t=>(0,f.isDateFieldDefinition)(t)?{...t,...e}:t)}function X(e){J(t=>(0,f.isSelectFieldDefinition)(t)?{...t,...e}:t)}function jt(e){J(t=>t.type===`boolean`?{...t,...e}:t)}function Mt(e){J(t=>t.type===`file_upload`?{...t,...e}:t)}function Nt(e){tt(e)}function Pt(e,t){A(n=>({...n,fields:n.fields.map(n=>n.fieldKey===e?{...n,required:t}:n)})),F(null)}function Ft(e){N(e);try{A(JSON.parse(e)),F(null)}catch{F(`Form Schema JSON 格式不正確`)}}function It(e){P(e);try{M(JSON.parse(e)),F(null)}catch{F(`UI Schema JSON 格式不正確`)}}return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)(e.t,{activeHref:g.forms(),children:[(0,l.jsx)(c.PageHeader,{children:(0,l.jsxs)(d.default,{description:vt,onBackClick:ht,title:v?.definition.name??`表單設計器`,children:[(0,l.jsx)(c.Button,{"aria-label":`修改表單名稱`,disabled:ut||!v,icon:u.EditIcon,iconType:`icon-only`,onClick:()=>B(!0),variant:`base-ghost`,children:`修改表單名稱`}),(0,l.jsx)(c.Button,{"aria-label":`儲存草稿`,disabled:V||!W,icon:u.SaveIcon,iconType:`icon-only`,onClick:()=>void St(),variant:`base-secondary`,children:`儲存草稿`}),(0,l.jsx)(c.Button,{disabled:yt,icon:u.CheckedIcon,iconType:`leading`,onClick:()=>void Ct(),variant:`base-primary`,children:bt})]})}),(0,l.jsx)(c.SectionGroup,{children:(0,l.jsx)(c.Section,{children:(0,l.jsxs)(`div`,{style:Me,children:[it?(0,l.jsx)(c.Typography,{color:`text-error`,variant:`body`,children:it}):null,(0,l.jsxs)(c.Tab,{activeKey:I,onChange:Et,size:`sub`,children:[(0,l.jsx)(c.TabItem,{children:`設計`},`design`),(0,l.jsx)(c.TabItem,{children:`預覽`},`preview`),(0,l.jsx)(c.TabItem,{children:`版本`},`versions`),(0,l.jsx)(c.TabItem,{children:`進階`},`advanced`)]}),I===`design`?Lt():null,I===`preview`?nn():null,I===`versions`?rn():null,I===`advanced`?an():null]})})})]}),(0,l.jsx)(o.t,{confirmText:`儲存`,initialName:v?.definition.name??``,loading:ut,onClose:()=>B(!1),onSubmit:wt,open:at,title:`修改表單名稱`})]});function Lt(){return(0,l.jsxs)(`div`,{style:b,children:[(0,l.jsxs)(`div`,{style:se,children:[(0,l.jsx)(c.Typography,{component:`h2`,variant:`label-primary`,children:`新增欄位`}),(0,l.jsx)(`div`,{style:ae,children:te.map(e=>(0,l.jsx)(c.Button,{disabled:V,icon:e.icon,iconType:`leading`,onClick:()=>Tt(e.type),size:`sub`,style:oe,type:`button`,variant:`base-secondary`,children:e.label},e.type))})]}),(0,l.jsxs)(`div`,{style:ne,children:[(0,l.jsxs)(`div`,{style:{...b,...re},children:[(0,l.jsx)(c.Typography,{component:`h2`,variant:`label-primary`,children:`表單畫布`}),O.fields.length>0?(0,l.jsx)(p.DragDropContext,{onDragEnd:Ot,children:(0,l.jsx)(p.Droppable,{droppableId:`form-builder-fields`,children:e=>(0,l.jsxs)(`div`,{...e.droppableProps,ref:e.innerRef,style:b,children:[O.fields.map((e,t)=>(0,l.jsx)(p.Draggable,{draggableId:e.fieldKey,index:t,isDragDisabled:V,children:(t,n)=>en(e,t,n.isDragging)},e.fieldKey)),e.placeholder]})})}):(0,l.jsxs)(`div`,{style:me,children:[(0,l.jsxs)(`div`,{style:b,children:[(0,l.jsx)(c.Typography,{component:`h3`,variant:`h3`,children:`尚未建立欄位`}),(0,l.jsx)(c.Typography,{color:`text-neutral`,variant:`body`,children:`從上方新增第一個欄位,或直接建立常用文字欄位開始設計。`})]}),(0,l.jsxs)(`div`,{style:he,children:[(0,l.jsx)(c.Button,{disabled:V,onClick:()=>Tt(`text`),variant:`base-primary`,children:`新增文字欄位`}),(0,l.jsx)(c.Button,{disabled:V,onClick:()=>Tt(`textarea`),variant:`base-secondary`,children:`新增長文字`})]})]})]}),(0,l.jsxs)(`div`,{style:{...b,...ie},children:[(0,l.jsx)(c.Typography,{component:`h2`,variant:`label-primary`,children:`欄位設定`}),U?Rt(U):(0,l.jsx)(c.Typography,{color:`text-neutral`,variant:`body`,children:`請先新增或選取欄位。`})]})]})]})}function Rt(e){return(0,l.jsxs)(`div`,{style:ge,children:[zt(e),Bt(e)]})}function zt(e){return(0,l.jsxs)(`div`,{style:_e,children:[(0,l.jsx)(`div`,{style:ye,children:(0,l.jsx)(c.Badge,{size:`main`,text:Be(e.type),variant:`text-info`})}),$(`標題`,`fieldLabel`,(0,l.jsx)(c.Input,{onChange:e=>q({label:e.target.value}),placeholder:`例如:申請金額`,value:e.label,variant:`base`}),V),$(`欄位 Key`,`fieldKey`,(0,l.jsx)(c.Input,{onChange:e=>q({fieldKey:e.target.value}),placeholder:`例如:amount`,value:e.fieldKey,variant:`base`}),V),$(`提示文字`,`fieldPlaceholder`,(0,l.jsx)(c.Input,{onChange:e=>q({placeholder:e.target.value||void 0}),placeholder:`例如:請輸入申請金額`,value:e.placeholder??``,variant:`base`}),V),Vt(e)]})}function Bt(e){return(0,l.jsx)(c.Accordion,{defaultExpanded:Ve(e),size:`sub`,title:`進階設定`,children:(0,l.jsxs)(`div`,{style:_e,children:[(0,l.jsx)(c.Typography,{component:`h3`,style:ve,variant:`label-primary`,children:`條件規則`}),(0,l.jsx)(c.Typography,{color:`text-neutral`,style:be,variant:`body`,children:`只有需要根據其他欄位改變顯示、必填或唯讀狀態時才需要設定。`}),Jt(e)]})})}function Vt(e){return Ue(e)?Ht(e):(0,f.isNumberFieldDefinition)(e)?Ut(e):(0,f.isDateFieldDefinition)(e)?Wt(e):(0,f.isSelectFieldDefinition)(e)?Gt(e):e.type===`boolean`?Kt(e):qt(e)}function Ht(e){return(0,l.jsxs)(l.Fragment,{children:[$(`預設值`,`fieldDefaultValue`,e.type===`textarea`?Zt({disabled:V,name:`fieldDefaultValue`,onChange:e=>Y({defaultValue:e||void 0}),placeholder:`輸入此欄位的預設文字`,rows:3,value:w(e.defaultValue)}):(0,l.jsx)(c.Input,{onChange:e=>Y({defaultValue:e.target.value||void 0}),placeholder:`輸入此欄位的預設文字`,value:w(e.defaultValue),variant:`base`}),V),$(`最小長度`,`fieldMinLength`,Q(e.minLength,e=>Y({minLength:e}),`例如:2`,{min:0}),V),$(`最大長度`,`fieldMaxLength`,Q(e.maxLength,e=>Y({maxLength:e}),`例如:100`,{min:1}),V)]})}function Ut(e){return(0,l.jsxs)(l.Fragment,{children:[$(`預設值`,`fieldDefaultValue`,Q(typeof e.defaultValue==`number`?e.defaultValue:void 0,e=>kt({defaultValue:e}),e.type===`money`?`例如:1000`:`輸入預設數值`,{max:e.maximum,min:e.minimum}),V),$(`最小值`,`fieldMinimum`,Q(e.minimum,e=>kt({minimum:e}),`例如:0`),V),$(`最大值`,`fieldMaximum`,Q(e.maximum,e=>kt({maximum:e}),`例如:999999`),V)]})}function Wt(e){return $(`預設值`,`fieldDefaultValue`,Qt(e,w(e.defaultValue),e=>At({defaultValue:e})),V)}function Gt(e){let t=Array.isArray(e.defaultValue)?e.defaultValue:[],n=e.options.filter(e=>t.includes(e.value)).map(f.readFieldOptionAsSelectOption);return(0,l.jsxs)(l.Fragment,{children:[$(`預設值`,`fieldDefaultValue`,e.type===`checkbox`?(0,l.jsx)(c.Select,{clearable:!0,mode:`multiple`,onChange:e=>X({defaultValue:e.length?e.map(e=>e.id):void 0}),options:e.options.map(f.readFieldOptionAsSelectOption),placeholder:`選擇一或多個預設選項`,value:n}):(0,l.jsx)(c.Select,{clearable:!0,onChange:e=>X({defaultValue:e?.id||void 0}),options:e.options.map(f.readFieldOptionAsSelectOption),placeholder:`選擇預設選項`,value:typeof e.defaultValue==`string`?(0,f.readSelectOption)(e.options.map(f.readFieldOptionAsSelectOption),e.defaultValue):null}),V),$(`選項`,`fieldOptions`,$t(e),V,!0)]})}function Kt(e){let t=typeof e.defaultValue==`boolean`?String(e.defaultValue):`unset`;return $(`預設值`,`fieldDefaultValue`,(0,l.jsx)(c.Select,{clearable:!1,onChange:e=>jt({defaultValue:e?.id===`true`?!0:e?.id===`false`?!1:void 0}),options:[...Le],placeholder:`選擇預設狀態`,value:(0,f.readSelectOption)(Le,t)}),V)}function qt(e){return(0,l.jsxs)(l.Fragment,{children:[$(`檔案數`,`fieldMaxFiles`,Q(e.maxFiles,e=>Mt({maxFiles:e}),`例如:1`,{min:1}),V),$(`MIME`,`fieldAcceptedMimeTypes`,Zt({disabled:V,name:`fieldAcceptedMimeTypes`,onChange:e=>Mt({acceptedMimeTypes:We(e)}),placeholder:`每行一個 MIME type,例如:application/pdf`,rows:3,value:Ge(e.acceptedMimeTypes)}),!1)]})}function Jt(e){let t=O.fields.filter(t=>t.fieldKey!==e.fieldKey);return t.length?(0,l.jsx)(l.Fragment,{children:ze.map(n=>Yt(e,n,t))}):(0,l.jsx)(c.Typography,{color:`text-neutral`,style:be,variant:`body`,children:`目前沒有其他欄位可作為條件來源。新增更多欄位後即可設定條件規則。`})}function Yt(e,t,n){let r=e[t.target],i=r?(0,f.parseConditionRule)(r):null,a=n.find(e=>e.fieldKey===i?.fieldKey),o=a??n[0],s=n.map(He),u=(0,f.readConditionOperatorOptions)(o),d=i&&u.some(e=>e.id===i.operator)?i.operator:(0,f.readDefaultConditionOperator)(o),p=i?.value??(0,f.readDefaultConditionValue)(o),m=!!r,h=m&&(!i||!a);return $(t.label,t.name,(0,l.jsxs)(`div`,{style:ke,children:[(0,l.jsx)(c.Toggle,{checked:m,disabled:V,label:m?`已啟用`:`不啟用`,onChange:e=>Z(t.target,e.target.checked?(0,f.buildConditionExpression)(o,(0,f.readDefaultConditionOperator)(o),(0,f.readDefaultConditionValue)(o)):void 0),size:`sub`,supportingText:t.supportingText}),m?h?(0,l.jsx)(c.Typography,{color:`text-warning`,variant:`body`,children:`這個規則不是目前 UI 支援的格式。重新選擇條件後會取代既有規則。`}):(0,l.jsxs)(`div`,{style:Ae,children:[(0,l.jsx)(c.Select,{clearable:!1,onChange:e=>{let r=n.find(t=>t.fieldKey===e?.id)??o;Z(t.target,(0,f.buildConditionExpression)(r,(0,f.readDefaultConditionOperator)(r),(0,f.readDefaultConditionValue)(r)))},options:s,placeholder:`選擇欄位`,value:(0,f.readSelectOption)(s,o.fieldKey)}),(0,l.jsx)(c.Select,{clearable:!1,onChange:e=>Z(t.target,(0,f.buildConditionExpression)(o,(0,f.readConditionOperatorOption)(e?.id)??d,p)),options:[...u],placeholder:`判斷方式`,value:(0,f.readSelectOption)(u,d)}),Xt(o,p,e=>Z(t.target,(0,f.buildConditionExpression)(o,d,e)))]}):null]}),V,!0)}function Z(e,t){q({[e]:t})}function Xt(e,t,n){if(e.type===`boolean`)return(0,l.jsx)(c.Select,{clearable:!1,onChange:e=>n(e?.id??`true`),options:[...Re],placeholder:`比較值`,value:(0,f.readSelectOption)(Re,t===`false`?`false`:`true`)});if((0,f.isSelectFieldDefinition)(e)){let r=e.options.map(f.readFieldOptionAsSelectOption);return(0,l.jsx)(c.Select,{clearable:!1,onChange:e=>n(e?.id??r[0]?.id??``),options:r,placeholder:`比較值`,value:(0,f.readSelectOption)(r,t)})}return(0,f.isNumberFieldDefinition)(e)?Q((0,f.parseOptionalNumberInput)(t),e=>n(String(e??0)),`比較值`):(0,f.isDateFieldDefinition)(e)?Qt(e,t,e=>n(e??``)):(0,l.jsx)(c.Input,{onChange:e=>n(e.target.value),placeholder:`比較值`,value:t,variant:`base`})}function Zt({disabled:e,name:t,onChange:n,placeholder:r,rows:i,value:a}){return(0,l.jsx)(c.Textarea,{"aria-label":t,disabled:e,onChange:e=>n(e.target.value),placeholder:r,ref:Ie,resize:`vertical`,rows:i,style:we,value:a})}function Q(e,t,n,r={}){return(0,l.jsx)(c.Input,{max:r.max,min:r.min,onChange:e=>t((0,f.clampOptionalNumber)((0,f.parseOptionalNumberInput)(e.target.value),r)),placeholder:n,showSpinner:!0,step:r.step??1,value:typeof e==`number`?String(e):``,variant:`measure`})}function Qt(e,t,n){return e.type===`datetime`?(0,l.jsx)(c.DateTimePicker,{formatDate:`YYYY-MM-DD`,formatTime:`HH:mm`,hideSecond:!0,onChange:e=>n((0,f.formatDateTimePickerValue)(e)),placeholderLeft:`選擇日期`,placeholderRight:`選擇時間`,value:(0,f.readDatePickerValue)(t)}):(0,l.jsx)(c.DatePicker,{format:`YYYY-MM-DD`,onChange:e=>n((0,f.formatDatePickerValue)(e)),placeholder:`選擇日期`,value:(0,f.readDatePickerValue)(t)})}function $t(e){return(0,l.jsxs)(`div`,{style:Ne,children:[(0,l.jsx)(c.Table,{actions:{render:t=>[{disabled:()=>V||e.options.length<=1,icon:u.TrashIcon,iconType:`icon-only`,name:`移除選項`,onClick:()=>X({options:e.options.filter((e,n)=>n!==t.index)}),variant:`destructive-ghost`}],width:56},columns:[{key:`label`,render:t=>(0,l.jsx)(c.Input,{onChange:n=>X({options:Ke(e.options,t.index,{label:n.target.value})}),placeholder:`例如:主管`,size:`sub`,value:t.label,variant:`base`}),title:`Label`},{key:`value`,render:t=>(0,l.jsx)(c.Input,{onChange:n=>X({options:Ke(e.options,t.index,{value:n.target.value})}),placeholder:`例如:manager`,size:`sub`,value:t.value,variant:`base`}),title:`Value`}],dataSource:e.options.map((t,n)=>({index:n,key:`${e.fieldKey}-${n}`,label:t.label,value:t.value})),showHeader:!0,size:`sub`}),(0,l.jsx)(`div`,{style:Pe,children:(0,l.jsx)(c.Button,{disabled:V,icon:u.PlusIcon,iconType:`leading`,onClick:()=>X({options:[...e.options,qe(e.options)]}),variant:`base-secondary`,children:`新增選項`})})]})}function en(e,t,n){return(0,l.jsx)(`div`,{...t.draggableProps,"data-form-builder-field-key":e.fieldKey,ref:t.innerRef,style:{...fe,...n?pe:null,...t.draggableProps.style},children:(0,l.jsx)(c.BaseCard,{children:tn(e,t,n)})})}function $(e,t,n,r,a=!1){return(0,l.jsx)(`div`,{style:a?Se:xe,children:(0,l.jsx)(`div`,{style:Ce,children:(0,l.jsx)(i.t,{disabled:r,label:e,name:t,children:n})})})}function tn(e,t,n){return(0,l.jsxs)(`div`,{...t.dragHandleProps??{},"aria-label":`拖曳排序欄位`,style:ce,title:`拖曳排序`,children:[(0,l.jsx)(`span`,{"aria-label":`拖曳排序`,role:`img`,style:je,title:`拖曳排序`,children:(0,l.jsx)(c.Icon,{icon:u.DotDragVerticalIcon,size:20})}),(0,l.jsxs)(`div`,{style:le,children:[(0,l.jsxs)(c.Typography,{component:`span`,ellipsis:!0,variant:`label-primary`,children:[e.label,e.required?(0,l.jsx)(`sup`,{"aria-label":`必填`,style:Fe,children:`*`}):null]}),(0,l.jsxs)(c.Typography,{color:`text-neutral`,component:`span`,ellipsis:!0,variant:`caption`,children:[Be(e.type),` ·`,e.required?` 必填`:` 選填`,` ·`,e.fieldKey]})]}),(0,l.jsxs)(`div`,{style:ue,children:[(0,l.jsx)(`div`,{style:de,children:(0,l.jsx)(c.Toggle,{checked:!!e.required,disabled:V||n,label:`必填`,onChange:t=>Pt(e.fieldKey,t.target.checked)})}),(0,l.jsx)(c.Button,{disabled:n,icon:u.EditIcon,iconType:`icon-only`,onClick:()=>R(e.fieldKey),variant:e.fieldKey===U?.fieldKey?`base-primary`:`base-ghost`,children:`編輯欄位`}),(0,l.jsx)(c.Button,{disabled:V||n,icon:u.TrashIcon,iconType:`icon-only`,onClick:()=>Dt(e.fieldKey),variant:`destructive-ghost`,children:`移除欄位`})]})]})}function nn(){return(0,l.jsxs)(`div`,{style:b,children:[(0,l.jsx)(c.Typography,{component:`h2`,variant:`h3`,children:`填寫預覽`}),(0,l.jsx)(a.t,{onChange:Nt,schema:O,uiSchema:j,value:et})]})}function rn(){return(0,l.jsxs)(`div`,{style:b,children:[(0,l.jsx)(c.Typography,{component:`h2`,variant:`h3`,children:`版本紀錄`}),(0,l.jsx)(c.Table,{columns:pt,dataSource:ft,loading:ct})]})}function an(){return(0,l.jsxs)(`div`,{style:b,children:[(0,l.jsx)(c.Typography,{component:`h2`,variant:`h3`,children:`Schema`}),(0,l.jsxs)(`div`,{style:Te,children:[on(`Form Schema`,`schemaJson`,(0,l.jsx)(ee,{disabled:V,height:`360px`,name:`schemaJson`,onChange:Ft,placeholder:`輸入 Form Schema JSON`,value:Qe})),on(`UI Schema`,`uiSchemaJson`,(0,l.jsx)(ee,{disabled:V,height:`240px`,name:`uiSchemaJson`,onChange:It,placeholder:`輸入 UI Schema JSON`,value:$e})),nt?(0,l.jsx)(c.Typography,{color:`text-error`,style:Oe,variant:`body`,children:nt}):null]})]})}function on(e,t,n){return(0,l.jsx)(`div`,{style:Ee,children:(0,l.jsx)(`div`,{style:De,children:(0,l.jsx)(i.t,{disabled:V,label:e,name:t,children:n})})})}}function Be(e){return te.find(t=>t.type===e)?.label??e}function Ve(e){return!!(e.visibleWhen||e.requiredWhen||e.readonlyWhen)}function He(e){return{id:e.fieldKey,name:e.label}}function Ue(e){return e.type===`text`||e.type===`textarea`}function w(e){return typeof e==`string`?e:``}function We(e){let t=e.split(/[\n,]/u).map(e=>e.trim()).filter(Boolean);return t.length?t:void 0}function Ge(e){return e?.join(`
|
|
2
|
+
`)??``}function T(e){return JSON.stringify(e,null,2)}function Ke(e,t,n){return e.map((e,r)=>r===t?{...e,...n}:e)}function qe(e){let t=e.length+1;return{label:`選項 ${t}`,value:E(e,t)}}function E(e,t){let n=`option_${t}`;return e.some(e=>e.value===n)?E(e,t+1):n}function D(e,t){return{schemaJson:T(e),uiSchemaJson:T(t)}}function Je(e,t){return(t?e.find(e=>e.id===t):null)??e.find(e=>e.status===`PUBLISHED`)??null}function Ye({hasUnsavedChanges:e,latestPublishedVersion:t,openedContentPublished:r,openedVersion:i}){return`${e?`有未儲存修改`:`沒有未儲存修改`} · ${O({hasUnsavedChanges:e,openedContentPublished:r,openedVersion:i})} · ${t?`目前發布 v${t.version}:${n.t(t.publishedAt)}`:`目前沒有已發布版本`}`}function O({hasUnsavedChanges:e,openedContentPublished:t,openedVersion:n}){return e?n?`修改尚未發布,來源 v${n.version}`:`修改尚未發布`:t&&n?`當前內容已發布 v${n.version}`:n?`當前內容尚未發布 v${n.version}`:`當前內容尚未發布`}function Xe(e,t,n){let r=e[t];if(!r||t===n)return[...e];let i=e.filter((e,n)=>n!==t);return[...i.slice(0,n),r,...i.slice(n)]}function Ze({status:e}){return e===`PUBLISHED`?(0,l.jsx)(c.Badge,{size:`sub`,text:`已發布`,variant:`dot-success`}):e===`ARCHIVED`?(0,l.jsx)(c.Badge,{size:`sub`,text:`已封存`,variant:`dot-inactive`}):(0,l.jsx)(c.Badge,{size:`sub`,text:`草稿`,variant:`dot-warning`})}function k(e){return e instanceof Error?e.message:`發生未知錯誤`}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return C}});
|
|
3
|
+
//# sourceMappingURL=builder-CMlJfQHE.cjs.map
|