@rytass/bpm-core-react 0.22.0 → 0.24.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 +84 -0
- package/README.md +1 -0
- package/dist/chunks/FormBuilderView-Bg9ftYz-.cjs +4 -0
- package/dist/chunks/FormBuilderView-Bg9ftYz-.cjs.map +1 -0
- package/dist/chunks/{FormBuilderView-DbfbLZCI.js → FormBuilderView-CBvdcg_t.js} +675 -614
- package/dist/chunks/FormBuilderView-CBvdcg_t.js.map +1 -0
- package/dist/chunks/FormRendererView-D-p6GDQB.cjs +6 -0
- package/dist/chunks/FormRendererView-D-p6GDQB.cjs.map +1 -0
- package/dist/chunks/FormRendererView-DHXmekC3.js +1319 -0
- package/dist/chunks/FormRendererView-DHXmekC3.js.map +1 -0
- package/dist/chunks/{approval-instance-list-page-Cv5I1YPX.cjs → approval-instance-list-page-BqkG9jiR.cjs} +2 -2
- package/dist/chunks/{approval-instance-list-page-Cv5I1YPX.cjs.map → approval-instance-list-page-BqkG9jiR.cjs.map} +1 -1
- package/dist/chunks/{approval-instance-list-page-BI5fIXc-.js → approval-instance-list-page-CsSpIN4C.js} +2 -2
- package/dist/chunks/{approval-instance-list-page-BI5fIXc-.js.map → approval-instance-list-page-CsSpIN4C.js.map} +1 -1
- package/dist/chunks/compose-B43jtdyL.cjs +2 -0
- package/dist/chunks/compose-B43jtdyL.cjs.map +1 -0
- package/dist/chunks/{compose-U1zs3Yof.js → compose-C7yS6bJm.js} +162 -148
- package/dist/chunks/compose-C7yS6bJm.js.map +1 -0
- package/dist/chunks/{dashboard-page-BoqNhjT_.js → dashboard-page-DBJCsPya.js} +2 -2
- package/dist/chunks/{dashboard-page-BoqNhjT_.js.map → dashboard-page-DBJCsPya.js.map} +1 -1
- package/dist/chunks/{dashboard-page-D7YJ3udk.cjs → dashboard-page-lqlLELKs.cjs} +2 -2
- package/dist/chunks/{dashboard-page-D7YJ3udk.cjs.map → dashboard-page-lqlLELKs.cjs.map} +1 -1
- package/dist/chunks/{designer-DPG7R_WP.js → designer-B9Ut4xze.js} +1786 -1463
- package/dist/chunks/designer-B9Ut4xze.js.map +1 -0
- package/dist/chunks/designer-eXw7R9ug.cjs +69 -0
- package/dist/chunks/designer-eXw7R9ug.cjs.map +1 -0
- package/dist/chunks/{detail-CHZDNNM6.js → detail-BB_uYaoM.js} +904 -896
- package/dist/chunks/detail-BB_uYaoM.js.map +1 -0
- package/dist/chunks/detail-DN8pEzUJ.cjs +5 -0
- package/dist/chunks/detail-DN8pEzUJ.cjs.map +1 -0
- package/dist/chunks/instance-error-message-BKt07-Bo.js +270 -0
- package/dist/chunks/instance-error-message-BKt07-Bo.js.map +1 -0
- package/dist/chunks/instance-error-message-BL_X7Af8.cjs +2 -0
- package/dist/chunks/instance-error-message-BL_X7Af8.cjs.map +1 -0
- package/dist/chunks/member-profile-resolution-CJlgVdTR.js +44 -0
- package/dist/chunks/member-profile-resolution-CJlgVdTR.js.map +1 -0
- package/dist/chunks/member-profile-resolution-DiH-P-Vh.cjs +2 -0
- package/dist/chunks/member-profile-resolution-DiH-P-Vh.cjs.map +1 -0
- package/dist/chunks/{providers-CQWekD7_.js → providers-D35lBOTd.js} +2 -2
- package/dist/chunks/{providers-CQWekD7_.js.map → providers-D35lBOTd.js.map} +1 -1
- package/dist/chunks/{providers-VUOh6i0i.cjs → providers-Dz4Wqxr6.cjs} +2 -2
- package/dist/chunks/{providers-VUOh6i0i.cjs.map → providers-Dz4Wqxr6.cjs.map} +1 -1
- package/dist/chunks/{routes-config-C1j_vFKo.cjs → routes-config-BWjZDAU3.cjs} +2 -2
- package/dist/chunks/{routes-config-C1j_vFKo.cjs.map → routes-config-BWjZDAU3.cjs.map} +1 -1
- package/dist/chunks/{routes-config-BcNaWJWJ.js → routes-config-DjEOE9eP.js} +3 -2
- package/dist/chunks/{routes-config-BcNaWJWJ.js.map → routes-config-DjEOE9eP.js.map} +1 -1
- package/dist/chunks/users-C_Dtw_sR.cjs +2 -0
- package/dist/chunks/users-C_Dtw_sR.cjs.map +1 -0
- package/dist/chunks/users-wgM3TqU3.js +513 -0
- package/dist/chunks/users-wgM3TqU3.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +4 -4
- package/dist/lib/routes-config.d.cts +2 -0
- package/dist/lib/routes-config.d.ts +2 -0
- package/dist/next/index.cjs +1 -1
- package/dist/next/index.js +2 -2
- package/dist/pages/admin/stuck-instances/index.cjs +2 -0
- package/dist/pages/admin/stuck-instances/index.cjs.map +1 -0
- package/dist/pages/admin/stuck-instances/index.d.cts +4 -0
- package/dist/pages/admin/stuck-instances/index.d.ts +4 -0
- package/dist/pages/admin/stuck-instances/index.js +13 -0
- package/dist/pages/admin/stuck-instances/index.js.map +1 -0
- package/dist/pages/admin/users/index.cjs +1 -1
- package/dist/pages/admin/users/index.js +1 -1
- package/dist/pages/instances/detail/index.cjs +1 -1
- package/dist/pages/instances/detail/index.js +1 -1
- package/dist/pages/templates/compose/index.cjs +1 -1
- package/dist/pages/templates/compose/index.js +1 -1
- package/dist/pages/templates/designer/index.cjs +1 -1
- package/dist/pages/templates/designer/index.js +1 -1
- package/dist/views/admin/index.cjs +1 -1
- package/dist/views/admin/index.d.cts +1 -0
- package/dist/views/admin/index.d.ts +1 -0
- package/dist/views/admin/index.js +3 -2
- package/dist/views/admin/stuck-instances/AdminStuckInstancesView.d.cts +10 -0
- package/dist/views/admin/stuck-instances/AdminStuckInstancesView.d.ts +10 -0
- package/dist/views/admin/stuck-instances/StuckInstanceCancelModal.d.cts +14 -0
- package/dist/views/admin/stuck-instances/StuckInstanceCancelModal.d.ts +14 -0
- package/dist/views/admin/stuck-instances/index.cjs +2 -0
- package/dist/views/admin/stuck-instances/index.cjs.map +1 -0
- package/dist/views/admin/stuck-instances/index.d.cts +2 -0
- package/dist/views/admin/stuck-instances/index.d.ts +2 -0
- package/dist/views/admin/stuck-instances/index.js +237 -0
- package/dist/views/admin/stuck-instances/index.js.map +1 -0
- 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/forms/builder/index.cjs +1 -1
- package/dist/views/forms/builder/index.js +1 -1
- package/dist/views/forms/renderer/FormRendererView.d.cts +26 -1
- package/dist/views/forms/renderer/FormRendererView.d.ts +26 -1
- package/dist/views/forms/renderer/index.cjs +1 -1
- package/dist/views/forms/renderer/index.js +1 -1
- package/dist/views/inbox/index.cjs +1 -1
- package/dist/views/inbox/index.js +1 -1
- package/dist/views/instances/approver-filled-form.d.cts +56 -20
- package/dist/views/instances/approver-filled-form.d.ts +56 -20
- package/dist/views/instances/detail/index.cjs +1 -1
- package/dist/views/instances/detail/index.js +1 -1
- package/dist/views/instances/detail/sections/InstanceFormSection.d.cts +7 -0
- package/dist/views/instances/detail/sections/InstanceFormSection.d.ts +7 -0
- package/dist/views/instances/detail/sections/InstanceTasksSection.d.cts +1 -1
- package/dist/views/instances/detail/sections/InstanceTasksSection.d.ts +1 -1
- package/dist/views/instances/new/index.cjs +1 -1
- package/dist/views/instances/new/index.js +5 -5
- 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/compose/index.cjs +1 -1
- package/dist/views/templates/compose/index.js +1 -1
- package/dist/views/templates/compose/steps/ComposeReviewStep.d.cts +3 -1
- package/dist/views/templates/compose/steps/ComposeReviewStep.d.ts +3 -1
- package/dist/views/templates/compose/steps/ComposeWorkflowStep.d.cts +4 -1
- package/dist/views/templates/compose/steps/ComposeWorkflowStep.d.ts +4 -1
- package/dist/views/templates/compose/use-template-compose-wizard.d.cts +3 -1
- package/dist/views/templates/compose/use-template-compose-wizard.d.ts +3 -1
- package/dist/views/templates/designer/TemplateDesignerView.d.cts +10 -1
- package/dist/views/templates/designer/TemplateDesignerView.d.ts +10 -1
- package/dist/views/templates/designer/approver-resolver-model.d.cts +31 -0
- package/dist/views/templates/designer/approver-resolver-model.d.ts +31 -0
- package/dist/views/templates/designer/field-access-matrix/FieldAccessMatrixDrawer.d.cts +3 -1
- package/dist/views/templates/designer/field-access-matrix/FieldAccessMatrixDrawer.d.ts +3 -1
- package/dist/views/templates/designer/field-access-matrix/field-access-copy.d.cts +3 -2
- package/dist/views/templates/designer/field-access-matrix/field-access-copy.d.ts +3 -2
- package/dist/views/templates/designer/index.cjs +1 -1
- package/dist/views/templates/designer/index.js +1 -1
- package/dist/views/templates/designer/launch-mode.d.cts +19 -0
- package/dist/views/templates/designer/launch-mode.d.ts +19 -0
- package/dist/views/templates/designer/node-actor-resolver-options.d.cts +30 -3
- package/dist/views/templates/designer/node-actor-resolver-options.d.ts +30 -3
- package/dist/views/templates/designer/publish-default-value-check.d.cts +36 -0
- package/dist/views/templates/designer/publish-default-value-check.d.ts +36 -0
- package/dist/views/templates/index.cjs +1 -1
- package/dist/views/templates/index.js +1 -1
- package/dist/views/templates/versions/index.cjs +1 -1
- package/dist/views/templates/versions/index.js +1 -1
- package/package.json +23 -3
- package/dist/chunks/FormBuilderView-Bok4Y59D.cjs +0 -4
- package/dist/chunks/FormBuilderView-Bok4Y59D.cjs.map +0 -1
- package/dist/chunks/FormBuilderView-DbfbLZCI.js.map +0 -1
- package/dist/chunks/FormRendererView-CAyPXhPq.js +0 -1351
- package/dist/chunks/FormRendererView-CAyPXhPq.js.map +0 -1
- package/dist/chunks/FormRendererView-iLlHFIUR.cjs +0 -6
- package/dist/chunks/FormRendererView-iLlHFIUR.cjs.map +0 -1
- package/dist/chunks/compose-DP1N4twA.cjs +0 -2
- package/dist/chunks/compose-DP1N4twA.cjs.map +0 -1
- package/dist/chunks/compose-U1zs3Yof.js.map +0 -1
- package/dist/chunks/designer-CWL-dCQ_.cjs +0 -69
- package/dist/chunks/designer-CWL-dCQ_.cjs.map +0 -1
- package/dist/chunks/designer-DPG7R_WP.js.map +0 -1
- package/dist/chunks/detail-BUfsSal0.cjs +0 -5
- package/dist/chunks/detail-BUfsSal0.cjs.map +0 -1
- package/dist/chunks/detail-CHZDNNM6.js.map +0 -1
- package/dist/chunks/instance-error-message-BEM4O_Kj.js +0 -208
- package/dist/chunks/instance-error-message-BEM4O_Kj.js.map +0 -1
- package/dist/chunks/instance-error-message-BpCLCOjp.cjs +0 -2
- package/dist/chunks/instance-error-message-BpCLCOjp.cjs.map +0 -1
- package/dist/chunks/users-BBtiZ9QQ.js +0 -486
- package/dist/chunks/users-BBtiZ9QQ.js.map +0 -1
- package/dist/chunks/users-EqSzDhuj.cjs +0 -2
- package/dist/chunks/users-EqSzDhuj.cjs.map +0 -1
|
@@ -1,78 +1,78 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { r as e } from "./router-adapter-CkxCyzf5.js";
|
|
3
|
-
import { r as t } from "./routes-config-
|
|
4
|
-
import { t as n } from "./FormBuilderView-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { o as
|
|
8
|
-
import { useCallback as
|
|
9
|
-
import { Button as
|
|
10
|
-
import { Fragment as
|
|
11
|
-
import { FormFieldLayout as
|
|
12
|
-
import
|
|
13
|
-
import { composeApprovalTemplateWithForm as
|
|
3
|
+
import { r as t } from "./routes-config-DjEOE9eP.js";
|
|
4
|
+
import { t as n } from "./FormBuilderView-CBvdcg_t.js";
|
|
5
|
+
import { a as r, i, n as a, r as o, t as s } from "./designer-B9Ut4xze.js";
|
|
6
|
+
import { t as c } from "./FormRendererView-DHXmekC3.js";
|
|
7
|
+
import { o as l } from "./organization-time-zone-provider-DNL8yo4-.js";
|
|
8
|
+
import { useCallback as u, useEffect as d, useState as f } from "react";
|
|
9
|
+
import { Button as p, Empty as m, FormField as h, Input as g, PageHeader as _, Section as v, SectionGroup as y, Select as b, Step as x, Stepper as S, Table as C, Tag as w, Typography as T } from "@mezzanine-ui/react";
|
|
10
|
+
import { Fragment as E, jsx as D, jsxs as O } from "react/jsx-runtime";
|
|
11
|
+
import { FormFieldLayout as k } from "@mezzanine-ui/core/form";
|
|
12
|
+
import A from "@mezzanine-ui/react/ContentHeader";
|
|
13
|
+
import { composeApprovalTemplateWithForm as j, listApprovalTemplateCategoriesPage as M } from "@rytass/bpm-core-client/template";
|
|
14
14
|
// src/views/templates/compose/steps/ComposeFormStep.tsx
|
|
15
|
-
var
|
|
15
|
+
var N = {
|
|
16
16
|
id: "UNCATEGORIZED",
|
|
17
17
|
name: "未分類"
|
|
18
|
-
},
|
|
19
|
-
function
|
|
20
|
-
let [c,
|
|
21
|
-
|
|
18
|
+
}, P = 100;
|
|
19
|
+
function F({ categoryId: e, formSchema: t, formUiSchema: r, name: i, onCategoryIdChange: a, onFormChange: o, onNameChange: s }) {
|
|
20
|
+
let [c, l] = f([]);
|
|
21
|
+
d(() => {
|
|
22
22
|
let e = !0;
|
|
23
23
|
return (async () => {
|
|
24
24
|
try {
|
|
25
|
-
let t = await
|
|
25
|
+
let t = await M({
|
|
26
26
|
page: 1,
|
|
27
|
-
pageSize:
|
|
27
|
+
pageSize: P,
|
|
28
28
|
searchText: "",
|
|
29
29
|
status: "ACTIVE"
|
|
30
30
|
});
|
|
31
|
-
e &&
|
|
31
|
+
e && l(t.categories);
|
|
32
32
|
} catch {
|
|
33
|
-
e &&
|
|
33
|
+
e && l([]);
|
|
34
34
|
}
|
|
35
35
|
})(), () => {
|
|
36
36
|
e = !1;
|
|
37
37
|
};
|
|
38
38
|
}, []);
|
|
39
|
-
let
|
|
39
|
+
let u = [N, ...c.map((e) => ({
|
|
40
40
|
id: e.id,
|
|
41
41
|
name: e.name
|
|
42
|
-
}))],
|
|
43
|
-
return /* @__PURE__ */ E
|
|
44
|
-
/* @__PURE__ */
|
|
45
|
-
style:
|
|
46
|
-
children: [/* @__PURE__ */
|
|
42
|
+
}))], p = u.find((t) => t.id === e) ?? N;
|
|
43
|
+
return /* @__PURE__ */ O(E, { children: [
|
|
44
|
+
/* @__PURE__ */ O("div", {
|
|
45
|
+
style: I,
|
|
46
|
+
children: [/* @__PURE__ */ D(h, {
|
|
47
47
|
label: "名稱",
|
|
48
|
-
layout:
|
|
48
|
+
layout: k.VERTICAL,
|
|
49
49
|
name: "composeName",
|
|
50
|
-
children: /* @__PURE__ */
|
|
50
|
+
children: /* @__PURE__ */ D(g, {
|
|
51
51
|
fullWidth: !0,
|
|
52
52
|
onChange: (e) => s(e.target.value),
|
|
53
53
|
placeholder: "例如:請款簽核",
|
|
54
54
|
value: i
|
|
55
55
|
})
|
|
56
|
-
}), /* @__PURE__ */
|
|
56
|
+
}), /* @__PURE__ */ D(h, {
|
|
57
57
|
label: "分類(選填)",
|
|
58
|
-
layout:
|
|
58
|
+
layout: k.VERTICAL,
|
|
59
59
|
name: "composeCategory",
|
|
60
|
-
children: /* @__PURE__ */
|
|
60
|
+
children: /* @__PURE__ */ D(b, {
|
|
61
61
|
clearable: !1,
|
|
62
62
|
fullWidth: !0,
|
|
63
|
-
onChange: (e) => a(e && e.id !==
|
|
64
|
-
options:
|
|
63
|
+
onChange: (e) => a(e && e.id !== N.id ? e.id : null),
|
|
64
|
+
options: u,
|
|
65
65
|
placeholder: "未分類",
|
|
66
|
-
value:
|
|
66
|
+
value: p
|
|
67
67
|
})
|
|
68
68
|
})]
|
|
69
69
|
}),
|
|
70
|
-
/* @__PURE__ */ T
|
|
70
|
+
/* @__PURE__ */ D(T, {
|
|
71
71
|
color: "text-neutral",
|
|
72
72
|
variant: "caption",
|
|
73
73
|
children: "先設計表單欄位,下一步的流程條件分流即可直接引用這些欄位。"
|
|
74
74
|
}),
|
|
75
|
-
/* @__PURE__ */
|
|
75
|
+
/* @__PURE__ */ D(n, {
|
|
76
76
|
onChange: o,
|
|
77
77
|
value: {
|
|
78
78
|
schema: t,
|
|
@@ -81,85 +81,90 @@ function N({ categoryId: e, formSchema: t, formUiSchema: r, name: i, onCategoryI
|
|
|
81
81
|
})
|
|
82
82
|
] });
|
|
83
83
|
}
|
|
84
|
-
var
|
|
84
|
+
var I = {
|
|
85
85
|
display: "grid",
|
|
86
86
|
gap: 16,
|
|
87
87
|
gridTemplateColumns: "repeat(auto-fit, minmax(220px, 1fr))"
|
|
88
88
|
};
|
|
89
89
|
// src/views/templates/compose/steps/ComposeReviewStep.tsx
|
|
90
|
-
function
|
|
91
|
-
let
|
|
92
|
-
detail:
|
|
90
|
+
function L({ formSchema: e, formUiSchema: t, initiatorPolicyCel: n, launchMode: i, name: a, publishError: o, workflowDefinition: s }) {
|
|
91
|
+
let l = s?.nodes ?? [], u = s?.edges ?? [], d = e.fields.length, f = new Map(l.map((e) => [e.id, e.data.label])), p = l.map((e) => ({
|
|
92
|
+
detail: V(e) ?? "—",
|
|
93
93
|
key: e.id,
|
|
94
94
|
label: e.data.label,
|
|
95
|
-
typeLabel:
|
|
96
|
-
})),
|
|
95
|
+
typeLabel: B(e)
|
|
96
|
+
})), h = u.filter((e) => !!e.data.condition).map((e) => ({
|
|
97
97
|
condition: e.data.condition ?? "",
|
|
98
98
|
key: e.id,
|
|
99
|
-
source:
|
|
100
|
-
target:
|
|
99
|
+
source: f.get(e.source) ?? e.source,
|
|
100
|
+
target: f.get(e.target) ?? e.target
|
|
101
101
|
}));
|
|
102
|
-
return /* @__PURE__ */
|
|
103
|
-
style:
|
|
102
|
+
return /* @__PURE__ */ O("div", {
|
|
103
|
+
style: H,
|
|
104
104
|
children: [
|
|
105
|
-
/* @__PURE__ */ T
|
|
105
|
+
/* @__PURE__ */ D(T, {
|
|
106
106
|
component: "h2",
|
|
107
|
-
style:
|
|
107
|
+
style: U,
|
|
108
108
|
variant: "h2",
|
|
109
|
-
children:
|
|
109
|
+
children: a || "(未命名)"
|
|
110
110
|
}),
|
|
111
|
-
/* @__PURE__ */
|
|
112
|
-
style:
|
|
113
|
-
children: [/* @__PURE__ */ T
|
|
111
|
+
/* @__PURE__ */ O("div", {
|
|
112
|
+
style: H,
|
|
113
|
+
children: [/* @__PURE__ */ D(T, {
|
|
114
114
|
variant: "h3",
|
|
115
115
|
children: "表單預覽"
|
|
116
|
-
}),
|
|
116
|
+
}), d > 0 ? /* @__PURE__ */ D(c, {
|
|
117
117
|
dataSourceContext: { kind: "preview" },
|
|
118
118
|
readonly: !0,
|
|
119
119
|
schema: e,
|
|
120
120
|
uiSchema: t
|
|
121
|
-
}) : /* @__PURE__ */
|
|
121
|
+
}) : /* @__PURE__ */ D(m, { title: "尚未設計表單欄位" })]
|
|
122
122
|
}),
|
|
123
|
-
/* @__PURE__ */
|
|
124
|
-
style:
|
|
123
|
+
/* @__PURE__ */ O("div", {
|
|
124
|
+
style: H,
|
|
125
125
|
children: [
|
|
126
|
-
/* @__PURE__ */ T
|
|
126
|
+
/* @__PURE__ */ D(T, {
|
|
127
127
|
variant: "h3",
|
|
128
128
|
children: "流程概覽"
|
|
129
129
|
}),
|
|
130
|
-
|
|
131
|
-
columns:
|
|
132
|
-
dataSource:
|
|
130
|
+
l.length > 0 ? /* @__PURE__ */ D(C, {
|
|
131
|
+
columns: R,
|
|
132
|
+
dataSource: p,
|
|
133
133
|
fullWidth: !0
|
|
134
|
-
}) : /* @__PURE__ */
|
|
135
|
-
|
|
134
|
+
}) : /* @__PURE__ */ D(m, { title: "尚未設計流程節點" }),
|
|
135
|
+
h.length > 0 ? /* @__PURE__ */ O(E, { children: [/* @__PURE__ */ D(T, {
|
|
136
136
|
color: "text-neutral",
|
|
137
137
|
variant: "caption",
|
|
138
138
|
children: "條件分流"
|
|
139
|
-
}), /* @__PURE__ */
|
|
140
|
-
columns:
|
|
141
|
-
dataSource:
|
|
139
|
+
}), /* @__PURE__ */ D(C, {
|
|
140
|
+
columns: z,
|
|
141
|
+
dataSource: h,
|
|
142
142
|
fullWidth: !0
|
|
143
143
|
})] }) : null,
|
|
144
|
-
|
|
144
|
+
/* @__PURE__ */ O(T, {
|
|
145
|
+
color: "text-neutral",
|
|
146
|
+
variant: "caption",
|
|
147
|
+
children: ["發起方式:", r(i).name]
|
|
148
|
+
}),
|
|
149
|
+
n ? /* @__PURE__ */ O(T, {
|
|
145
150
|
color: "text-neutral",
|
|
146
151
|
variant: "caption",
|
|
147
152
|
children: ["發起權限:", n]
|
|
148
153
|
}) : null
|
|
149
154
|
]
|
|
150
155
|
}),
|
|
151
|
-
|
|
156
|
+
o ? /* @__PURE__ */ D(T, {
|
|
152
157
|
color: "text-error",
|
|
153
158
|
variant: "body",
|
|
154
|
-
children:
|
|
159
|
+
children: o
|
|
155
160
|
}) : null
|
|
156
161
|
]
|
|
157
162
|
});
|
|
158
163
|
}
|
|
159
|
-
var
|
|
164
|
+
var R = [
|
|
160
165
|
{
|
|
161
166
|
key: "type",
|
|
162
|
-
render: (e) => /* @__PURE__ */
|
|
167
|
+
render: (e) => /* @__PURE__ */ D(w, {
|
|
163
168
|
label: e.typeLabel,
|
|
164
169
|
size: "sub",
|
|
165
170
|
type: "static"
|
|
@@ -178,7 +183,7 @@ var I = [
|
|
|
178
183
|
title: "簽核方式",
|
|
179
184
|
width: 160
|
|
180
185
|
}
|
|
181
|
-
],
|
|
186
|
+
], z = [
|
|
182
187
|
{
|
|
183
188
|
dataIndex: "source",
|
|
184
189
|
key: "source",
|
|
@@ -197,7 +202,7 @@ var I = [
|
|
|
197
202
|
title: "條件"
|
|
198
203
|
}
|
|
199
204
|
];
|
|
200
|
-
function
|
|
205
|
+
function B(e) {
|
|
201
206
|
switch (e.type) {
|
|
202
207
|
case "startEvent": return "開始";
|
|
203
208
|
case "endEvent": return e.data.endState === "REJECTED" ? "結束(駁回)" : "結束(核准)";
|
|
@@ -208,74 +213,78 @@ function R(e) {
|
|
|
208
213
|
default: return "節點";
|
|
209
214
|
}
|
|
210
215
|
}
|
|
211
|
-
function
|
|
212
|
-
return e.type === "userTask" ?
|
|
216
|
+
function V(e) {
|
|
217
|
+
return e.type === "userTask" ? o(e.data.approverResolver) : null;
|
|
213
218
|
}
|
|
214
|
-
var
|
|
219
|
+
var H = {
|
|
215
220
|
display: "grid",
|
|
216
221
|
gap: 12
|
|
217
|
-
},
|
|
222
|
+
}, U = { marginTop: "var(--mzn-spacing-padding-vertical-spacious)" };
|
|
218
223
|
// src/views/templates/compose/steps/ComposeWorkflowStep.tsx
|
|
219
|
-
function
|
|
220
|
-
return /* @__PURE__ */ E
|
|
224
|
+
function W({ aiAssistantAvailable: e = !1, formSchema: t, initiatorPolicyCel: n, launchMode: r, onInitiatorPolicyChange: i, onLaunchModeChange: a, onWorkflowChange: o, showAiAssistant: c = !1, workflowDefinition: l }) {
|
|
225
|
+
return /* @__PURE__ */ O(E, { children: [/* @__PURE__ */ D(T, {
|
|
221
226
|
color: "text-neutral",
|
|
222
227
|
variant: "caption",
|
|
223
228
|
children: "設計簽核節點與條件分流;條件可直接引用上一步設計的表單欄位。"
|
|
224
|
-
}), /* @__PURE__ */
|
|
229
|
+
}), /* @__PURE__ */ D(s, {
|
|
225
230
|
aiAssistantAvailable: e,
|
|
226
231
|
embedded: !0,
|
|
227
232
|
formSchemaOverride: t,
|
|
228
233
|
initialInitiatorPolicyCel: n,
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
234
|
+
initialLaunchMode: r,
|
|
235
|
+
initialWorkflowDefinition: l ?? void 0,
|
|
236
|
+
onInitiatorPolicyChange: i,
|
|
237
|
+
onLaunchModeChange: a,
|
|
238
|
+
onWorkflowChange: o,
|
|
239
|
+
showAiAssistant: c
|
|
233
240
|
})] });
|
|
234
241
|
}
|
|
235
242
|
// src/views/templates/compose/use-template-compose-wizard.ts
|
|
236
|
-
var
|
|
243
|
+
var G = {
|
|
237
244
|
fields: [],
|
|
238
245
|
schemaVersion: 1
|
|
239
|
-
},
|
|
246
|
+
}, K = {
|
|
240
247
|
layout: [],
|
|
241
248
|
schemaVersion: 1
|
|
242
249
|
};
|
|
243
|
-
function
|
|
244
|
-
let e =
|
|
250
|
+
function q() {
|
|
251
|
+
let e = l(), [t, n] = f(0), [r, o] = f(""), [s, c] = f(null), [d, p] = f(G), [m, h] = f(K), [g, _] = f(null), [v, y] = f(null), [b, x] = f(i), [S, C] = f("idle"), [w, T] = f(null), E = r.trim().length > 0 && d.fields.length > 0, D = u((e) => {
|
|
245
252
|
n(e);
|
|
246
|
-
}, []),
|
|
253
|
+
}, []), O = u(() => {
|
|
247
254
|
n((e) => e < 2 ? e + 1 : e);
|
|
248
|
-
}, []),
|
|
255
|
+
}, []), k = u(() => {
|
|
249
256
|
n((e) => e > 0 ? e - 1 : e);
|
|
250
|
-
}, []),
|
|
251
|
-
|
|
252
|
-
}, []),
|
|
253
|
-
|
|
254
|
-
}, []),
|
|
255
|
-
|
|
257
|
+
}, []), A = u((e) => {
|
|
258
|
+
p(e.schema), h(e.uiSchema);
|
|
259
|
+
}, []), M = u((e) => {
|
|
260
|
+
_(e);
|
|
261
|
+
}, []), N = u((e) => {
|
|
262
|
+
y(e);
|
|
256
263
|
}, []);
|
|
257
264
|
return {
|
|
258
|
-
canLeaveBasics:
|
|
259
|
-
categoryId:
|
|
265
|
+
canLeaveBasics: E,
|
|
266
|
+
categoryId: s,
|
|
260
267
|
currentStep: t,
|
|
261
268
|
formSchema: d,
|
|
262
|
-
formUiSchema:
|
|
263
|
-
goBack:
|
|
264
|
-
goNext:
|
|
265
|
-
goToStep:
|
|
266
|
-
initiatorPolicyCel:
|
|
269
|
+
formUiSchema: m,
|
|
270
|
+
goBack: k,
|
|
271
|
+
goNext: O,
|
|
272
|
+
goToStep: D,
|
|
273
|
+
initiatorPolicyCel: v,
|
|
274
|
+
launchMode: b,
|
|
267
275
|
name: r,
|
|
268
|
-
publish:
|
|
269
|
-
|
|
270
|
-
let t =
|
|
276
|
+
publish: u(async () => {
|
|
277
|
+
C("submitting"), T(null);
|
|
278
|
+
let t = g ?? J;
|
|
271
279
|
try {
|
|
272
|
-
let e = await
|
|
280
|
+
let e = await j({
|
|
273
281
|
category: null,
|
|
274
|
-
categoryId:
|
|
282
|
+
categoryId: s,
|
|
275
283
|
formDefinitionId: null,
|
|
276
284
|
formDescription: null,
|
|
277
285
|
formName: r,
|
|
278
|
-
initiatorPolicyCel:
|
|
286
|
+
initiatorPolicyCel: v,
|
|
287
|
+
launchMode: b,
|
|
279
288
|
notificationConfig: null,
|
|
280
289
|
publish: !0,
|
|
281
290
|
schema: d,
|
|
@@ -283,33 +292,35 @@ function G() {
|
|
|
283
292
|
templateDescription: null,
|
|
284
293
|
templateId: null,
|
|
285
294
|
templateName: r,
|
|
286
|
-
uiSchema:
|
|
295
|
+
uiSchema: m,
|
|
287
296
|
workflowDefinition: t
|
|
288
297
|
});
|
|
289
|
-
return
|
|
298
|
+
return C("success"), e;
|
|
290
299
|
} catch (n) {
|
|
291
|
-
return
|
|
300
|
+
return T(a(n, e, t)), C("error"), null;
|
|
292
301
|
}
|
|
293
302
|
}, [
|
|
294
|
-
|
|
303
|
+
s,
|
|
295
304
|
d,
|
|
296
|
-
|
|
297
|
-
|
|
305
|
+
m,
|
|
306
|
+
v,
|
|
298
307
|
e,
|
|
308
|
+
b,
|
|
299
309
|
r,
|
|
300
|
-
|
|
310
|
+
g
|
|
301
311
|
]),
|
|
302
|
-
publishError:
|
|
303
|
-
publishPhase:
|
|
304
|
-
setCategoryId:
|
|
305
|
-
setFormValue:
|
|
306
|
-
setInitiatorPolicyCel:
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
312
|
+
publishError: w,
|
|
313
|
+
publishPhase: S,
|
|
314
|
+
setCategoryId: c,
|
|
315
|
+
setFormValue: A,
|
|
316
|
+
setInitiatorPolicyCel: N,
|
|
317
|
+
setLaunchMode: x,
|
|
318
|
+
setName: o,
|
|
319
|
+
setWorkflowDefinition: M,
|
|
320
|
+
workflowDefinition: g
|
|
310
321
|
};
|
|
311
322
|
}
|
|
312
|
-
var
|
|
323
|
+
var J = {
|
|
313
324
|
edges: [],
|
|
314
325
|
expressionDialect: "cel-v2",
|
|
315
326
|
meta: { schemaVersion: 1 },
|
|
@@ -336,40 +347,40 @@ var K = {
|
|
|
336
347
|
}]
|
|
337
348
|
};
|
|
338
349
|
// src/views/templates/compose/TemplateComposeWizardView.tsx
|
|
339
|
-
function
|
|
340
|
-
let i = e(), a = t(), o =
|
|
350
|
+
function Y({ aiAssistantAvailable: n = !1, showAiAssistant: r = !1 } = {}) {
|
|
351
|
+
let i = e(), a = t(), o = q(), s = o.publishPhase === "submitting";
|
|
341
352
|
async function c() {
|
|
342
353
|
let e = await o.publish();
|
|
343
354
|
e && i.push(a.templateDesigner(e.templateId));
|
|
344
355
|
}
|
|
345
|
-
return /* @__PURE__ */ E
|
|
356
|
+
return /* @__PURE__ */ O(E, { children: [/* @__PURE__ */ D(_, { children: /* @__PURE__ */ D(A, {
|
|
346
357
|
description: "一次完成表單與流程設計,發佈後即可直接發起。",
|
|
347
358
|
title: "建立模板(表單 + 流程)",
|
|
348
|
-
children: /* @__PURE__ */
|
|
359
|
+
children: /* @__PURE__ */ D(p, {
|
|
349
360
|
disabled: s,
|
|
350
361
|
onClick: () => i.push(a.templates()),
|
|
351
362
|
variant: "base-secondary",
|
|
352
363
|
children: "返回模板列表"
|
|
353
364
|
})
|
|
354
|
-
}) }), /* @__PURE__ */
|
|
355
|
-
/* @__PURE__ */
|
|
365
|
+
}) }), /* @__PURE__ */ D(y, { children: /* @__PURE__ */ O(v, { children: [
|
|
366
|
+
/* @__PURE__ */ O(S, {
|
|
356
367
|
currentStep: o.currentStep,
|
|
357
368
|
children: [
|
|
358
|
-
/* @__PURE__ */
|
|
369
|
+
/* @__PURE__ */ D(x, {
|
|
359
370
|
description: "設計欄位與版面",
|
|
360
371
|
title: "表單設計"
|
|
361
372
|
}),
|
|
362
|
-
/* @__PURE__ */
|
|
373
|
+
/* @__PURE__ */ D(x, {
|
|
363
374
|
description: "設計簽核節點與條件",
|
|
364
375
|
title: "流程設計"
|
|
365
376
|
}),
|
|
366
|
-
/* @__PURE__ */
|
|
377
|
+
/* @__PURE__ */ D(x, {
|
|
367
378
|
description: "確認後發佈",
|
|
368
379
|
title: "檢視並發佈"
|
|
369
380
|
})
|
|
370
381
|
]
|
|
371
382
|
}),
|
|
372
|
-
o.currentStep === 0 ? /* @__PURE__ */
|
|
383
|
+
o.currentStep === 0 ? /* @__PURE__ */ D(F, {
|
|
373
384
|
categoryId: o.categoryId,
|
|
374
385
|
formSchema: o.formSchema,
|
|
375
386
|
formUiSchema: o.formUiSchema,
|
|
@@ -378,42 +389,45 @@ function q({ aiAssistantAvailable: n = !1, showAiAssistant: r = !1 } = {}) {
|
|
|
378
389
|
onFormChange: o.setFormValue,
|
|
379
390
|
onNameChange: o.setName
|
|
380
391
|
}) : null,
|
|
381
|
-
o.currentStep === 1 ? /* @__PURE__ */
|
|
392
|
+
o.currentStep === 1 ? /* @__PURE__ */ D(W, {
|
|
382
393
|
aiAssistantAvailable: n,
|
|
383
394
|
formSchema: o.formSchema,
|
|
384
395
|
initiatorPolicyCel: o.initiatorPolicyCel,
|
|
396
|
+
launchMode: o.launchMode,
|
|
385
397
|
onInitiatorPolicyChange: o.setInitiatorPolicyCel,
|
|
398
|
+
onLaunchModeChange: o.setLaunchMode,
|
|
386
399
|
onWorkflowChange: o.setWorkflowDefinition,
|
|
387
400
|
showAiAssistant: r,
|
|
388
401
|
workflowDefinition: o.workflowDefinition
|
|
389
402
|
}) : null,
|
|
390
|
-
o.currentStep === 2 ? /* @__PURE__ */
|
|
403
|
+
o.currentStep === 2 ? /* @__PURE__ */ D(L, {
|
|
391
404
|
formSchema: o.formSchema,
|
|
392
405
|
formUiSchema: o.formUiSchema,
|
|
393
406
|
initiatorPolicyCel: o.initiatorPolicyCel,
|
|
407
|
+
launchMode: o.launchMode,
|
|
394
408
|
name: o.name,
|
|
395
409
|
publishError: o.publishError,
|
|
396
410
|
workflowDefinition: o.workflowDefinition
|
|
397
411
|
}) : null,
|
|
398
|
-
/* @__PURE__ */
|
|
399
|
-
style:
|
|
400
|
-
children: [o.currentStep === 0 && !o.canLeaveBasics ? /* @__PURE__ */ T
|
|
412
|
+
/* @__PURE__ */ O("div", {
|
|
413
|
+
style: X,
|
|
414
|
+
children: [o.currentStep === 0 && !o.canLeaveBasics ? /* @__PURE__ */ D(T, {
|
|
401
415
|
color: "text-neutral",
|
|
402
416
|
variant: "caption",
|
|
403
417
|
children: "請填寫模板名稱、表單名稱,並至少新增一個表單欄位。"
|
|
404
|
-
}) : /* @__PURE__ */
|
|
405
|
-
style:
|
|
406
|
-
children: [/* @__PURE__ */
|
|
418
|
+
}) : /* @__PURE__ */ D("span", {}), /* @__PURE__ */ O("div", {
|
|
419
|
+
style: Z,
|
|
420
|
+
children: [/* @__PURE__ */ D(p, {
|
|
407
421
|
disabled: o.currentStep === 0 || s,
|
|
408
422
|
onClick: o.goBack,
|
|
409
423
|
variant: "base-secondary",
|
|
410
424
|
children: "上一步"
|
|
411
|
-
}), o.currentStep < 2 ? /* @__PURE__ */
|
|
425
|
+
}), o.currentStep < 2 ? /* @__PURE__ */ D(p, {
|
|
412
426
|
disabled: o.currentStep === 0 && !o.canLeaveBasics,
|
|
413
427
|
onClick: o.goNext,
|
|
414
428
|
variant: "base-primary",
|
|
415
429
|
children: "下一步"
|
|
416
|
-
}) : /* @__PURE__ */
|
|
430
|
+
}) : /* @__PURE__ */ D(p, {
|
|
417
431
|
disabled: s,
|
|
418
432
|
loading: s,
|
|
419
433
|
onClick: () => {
|
|
@@ -426,16 +440,16 @@ function q({ aiAssistantAvailable: n = !1, showAiAssistant: r = !1 } = {}) {
|
|
|
426
440
|
})
|
|
427
441
|
] }) })] });
|
|
428
442
|
}
|
|
429
|
-
var
|
|
443
|
+
var X = {
|
|
430
444
|
alignItems: "center",
|
|
431
445
|
display: "flex",
|
|
432
446
|
marginTop: "var(--mzn-spacing-padding-vertical-spacious)",
|
|
433
447
|
justifyContent: "space-between",
|
|
434
448
|
gap: 16
|
|
435
|
-
},
|
|
449
|
+
}, Z = {
|
|
436
450
|
display: "flex",
|
|
437
451
|
gap: 8
|
|
438
452
|
};
|
|
439
|
-
export {
|
|
453
|
+
export { q as i, G as n, K as r, Y as t };
|
|
440
454
|
|
|
441
|
-
//# sourceMappingURL=compose-
|
|
455
|
+
//# sourceMappingURL=compose-C7yS6bJm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-C7yS6bJm.js","names":["_Fragment","_Fragment","_Fragment","_Fragment","useRouterAdapter","useBPMRoutes","FormBuilderView","readLaunchModeOption","readTemplateErrorMessage","readApproverResolverDetail","TemplateDesignerView","FormRenderer","useBPMLanguage","Fragment$1","ContentHeader","UNCATEGORIZED_OPTION","CATEGORY_PAGE_SIZE","ComposeFormStep","categoryOptions","setCategoryOptions","useState","active","result","listApprovalTemplateCategoriesPage","selectOptions","category","selectedOption","option","categoryId","BASICS_GRID_STYLE","FormField","FormFieldLayout","Input","onNameChange","event","name","Select","onCategoryIdChange","Typography","onFormChange","formSchema","formUiSchema","ComposeReviewStep","nodes","workflowDefinition","edges","fieldCount","nodeLabelById","node","nodeRows","readNodeDetail","readNodeTypeLabel","branchRows","edge","STACK_STYLE","TITLE_STYLE","Empty","Table","NODE_COLUMNS","BRANCH_COLUMNS","launchMode","initiatorPolicyCel","publishError","Tag","record","ComposeWorkflowStep","EMPTY_COMPOSE_FORM_SCHEMA","EMPTY_COMPOSE_FORM_UI_SCHEMA","useTemplateComposeWizard","language","currentStep","setCurrentStep","setName","setCategoryId","setFormSchema","setFormUiSchema","setWorkflowDefinitionState","setInitiatorPolicyCelState","setLaunchMode","DEFAULT_LAUNCH_MODE","publishPhase","setPublishPhase","setPublishError","canLeaveBasics","goToStep","useCallback","step","goNext","goBack","setFormValue","next","setWorkflowDefinition","definition","setInitiatorPolicyCel","cel","submittedDefinition","EMPTY_WORKFLOW_DEFINITION","composeApprovalTemplateWithForm","requestError","TemplateComposeWizardView","router","routes","wizard","submitting","handlePublish","PageHeader","Button","SectionGroup","Section","Stepper","Step","FOOTER_STYLE","FOOTER_ACTIONS_STYLE"],"sources":["../../src/views/templates/compose/steps/ComposeFormStep.tsx","../../src/views/templates/compose/steps/ComposeReviewStep.tsx","../../src/views/templates/compose/steps/ComposeWorkflowStep.tsx","../../src/views/templates/compose/use-template-compose-wizard.ts","../../src/views/templates/compose/TemplateComposeWizardView.tsx"],"sourcesContent":["'use client';\n\nimport type { ChangeEvent, ReactElement } from 'react';\nimport { useEffect, useState } from 'react';\nimport { FormField, Input, Select, Typography } from '@mezzanine-ui/react';\nimport { FormFieldLayout } from '@mezzanine-ui/core/form';\nimport type { SelectValue } from '@mezzanine-ui/react/Select';\nimport type {\n FormDefinitionSchema,\n FormUiSchema,\n} from '@rytass/bpm-core-shared/form';\nimport {\n ApprovalTemplateCategoryRecord,\n listApprovalTemplateCategoriesPage,\n} from '@rytass/bpm-core-client/template';\nimport { FormBuilderView } from '../../../forms/builder';\n\nconst UNCATEGORIZED_OPTION: SelectValue = {\n id: 'UNCATEGORIZED',\n name: '未分類',\n};\n\nconst CATEGORY_PAGE_SIZE = 100;\n\nexport interface ComposeFormStepProps {\n readonly name: string;\n readonly categoryId: string | null;\n readonly formSchema: FormDefinitionSchema;\n readonly formUiSchema: FormUiSchema;\n readonly onNameChange: (value: string) => void;\n readonly onCategoryIdChange: (value: string | null) => void;\n readonly onFormChange: (next: {\n readonly schema: FormDefinitionSchema;\n readonly uiSchema: FormUiSchema;\n }) => void;\n}\n\nexport function ComposeFormStep({\n categoryId,\n formSchema,\n formUiSchema,\n name,\n onCategoryIdChange,\n onFormChange,\n onNameChange,\n}: ComposeFormStepProps): ReactElement {\n const [categoryOptions, setCategoryOptions] = useState<\n readonly ApprovalTemplateCategoryRecord[]\n >([]);\n\n useEffect((): (() => void) => {\n let active = true;\n\n void (async (): Promise<void> => {\n try {\n const result = await listApprovalTemplateCategoriesPage({\n page: 1,\n pageSize: CATEGORY_PAGE_SIZE,\n searchText: '',\n status: 'ACTIVE',\n });\n\n if (active) {\n setCategoryOptions(result.categories);\n }\n } catch {\n if (active) {\n setCategoryOptions([]);\n }\n }\n })();\n\n return (): void => {\n active = false;\n };\n }, []);\n\n const selectOptions: SelectValue[] = [\n UNCATEGORIZED_OPTION,\n ...categoryOptions.map((category) => ({\n id: category.id,\n name: category.name,\n })),\n ];\n const selectedOption =\n selectOptions.find((option) => option.id === categoryId) ??\n UNCATEGORIZED_OPTION;\n\n return (\n <>\n <div style={BASICS_GRID_STYLE}>\n <FormField\n label=\"名稱\"\n layout={FormFieldLayout.VERTICAL}\n name=\"composeName\"\n >\n <Input\n fullWidth\n onChange={(event: ChangeEvent<HTMLInputElement>): void =>\n onNameChange(event.target.value)\n }\n placeholder=\"例如:請款簽核\"\n value={name}\n />\n </FormField>\n <FormField\n label=\"分類(選填)\"\n layout={FormFieldLayout.VERTICAL}\n name=\"composeCategory\"\n >\n <Select\n clearable={false}\n fullWidth\n onChange={(option): void =>\n onCategoryIdChange(\n option && option.id !== UNCATEGORIZED_OPTION.id\n ? option.id\n : null,\n )\n }\n options={selectOptions}\n placeholder=\"未分類\"\n value={selectedOption}\n />\n </FormField>\n </div>\n <Typography color=\"text-neutral\" variant=\"caption\">\n 先設計表單欄位,下一步的流程條件分流即可直接引用這些欄位。\n </Typography>\n <FormBuilderView\n onChange={onFormChange}\n value={{ schema: formSchema, uiSchema: formUiSchema }}\n />\n </>\n );\n}\n\nconst BASICS_GRID_STYLE = {\n display: 'grid',\n gap: 16,\n gridTemplateColumns: 'repeat(auto-fit, minmax(220px, 1fr))',\n} as const;\n","'use client';\n\nimport type { CSSProperties, ReactElement } from 'react';\nimport { Empty, Table, Tag, Typography } from '@mezzanine-ui/react';\nimport type { TableColumn } from '@mezzanine-ui/core/table';\nimport type {\n FormDefinitionSchema,\n FormUiSchema,\n} from '@rytass/bpm-core-shared/form';\nimport type { ApprovalTemplateLaunchMode } from '@rytass/bpm-core-client/template';\nimport { readLaunchModeOption } from '../../designer/launch-mode';\nimport type {\n WorkflowDefinition,\n WorkflowNode,\n} from '@rytass/bpm-core-shared/workflow';\nimport { FormRenderer } from '../../../forms/renderer/FormRendererView';\nimport { readApproverResolverDetail } from '../../designer/approver-resolver-model';\n\ntype FlowNodeRow = Readonly<\n Record<string, unknown> & {\n detail: string;\n key: string;\n label: string;\n typeLabel: string;\n }\n>;\n\ntype BranchRow = Readonly<\n Record<string, unknown> & {\n condition: string;\n key: string;\n source: string;\n target: string;\n }\n>;\n\nexport interface ComposeReviewStepProps {\n readonly name: string;\n readonly formSchema: FormDefinitionSchema;\n readonly formUiSchema: FormUiSchema;\n readonly workflowDefinition: WorkflowDefinition | null;\n readonly initiatorPolicyCel: string | null;\n readonly launchMode: ApprovalTemplateLaunchMode;\n readonly publishError: string | null;\n}\n\nexport function ComposeReviewStep({\n formSchema,\n formUiSchema,\n initiatorPolicyCel,\n launchMode,\n name,\n publishError,\n workflowDefinition,\n}: ComposeReviewStepProps): ReactElement {\n const nodes = workflowDefinition?.nodes ?? [];\n const edges = workflowDefinition?.edges ?? [];\n const fieldCount = formSchema.fields.length;\n const nodeLabelById = new Map(\n nodes.map((node) => [node.id, node.data.label] as const),\n );\n const nodeRows: FlowNodeRow[] = nodes.map((node) => ({\n detail: readNodeDetail(node) ?? '—',\n key: node.id,\n label: node.data.label,\n typeLabel: readNodeTypeLabel(node),\n }));\n const branchRows: BranchRow[] = edges\n .filter((edge) => Boolean(edge.data.condition))\n .map((edge) => ({\n condition: edge.data.condition ?? '',\n key: edge.id,\n source: nodeLabelById.get(edge.source) ?? edge.source,\n target: nodeLabelById.get(edge.target) ?? edge.target,\n }));\n\n return (\n <div style={STACK_STYLE}>\n <Typography component=\"h2\" style={TITLE_STYLE} variant=\"h2\">\n {name || '(未命名)'}\n </Typography>\n\n <div style={STACK_STYLE}>\n <Typography variant=\"h3\">表單預覽</Typography>\n {fieldCount > 0 ? (\n <FormRenderer\n dataSourceContext={{ kind: 'preview' }}\n readonly\n schema={formSchema}\n uiSchema={formUiSchema}\n />\n ) : (\n <Empty title=\"尚未設計表單欄位\" />\n )}\n </div>\n\n <div style={STACK_STYLE}>\n <Typography variant=\"h3\">流程概覽</Typography>\n {nodes.length > 0 ? (\n <Table columns={NODE_COLUMNS} dataSource={nodeRows} fullWidth />\n ) : (\n <Empty title=\"尚未設計流程節點\" />\n )}\n {branchRows.length > 0 ? (\n <>\n <Typography color=\"text-neutral\" variant=\"caption\">\n 條件分流\n </Typography>\n <Table columns={BRANCH_COLUMNS} dataSource={branchRows} fullWidth />\n </>\n ) : null}\n <Typography color=\"text-neutral\" variant=\"caption\">\n 發起方式:{readLaunchModeOption(launchMode).name}\n </Typography>\n {initiatorPolicyCel ? (\n <Typography color=\"text-neutral\" variant=\"caption\">\n 發起權限:{initiatorPolicyCel}\n </Typography>\n ) : null}\n </div>\n\n {publishError ? (\n <Typography color=\"text-error\" variant=\"body\">\n {publishError}\n </Typography>\n ) : null}\n </div>\n );\n}\n\nconst NODE_COLUMNS: TableColumn<FlowNodeRow>[] = [\n {\n key: 'type',\n render: (record: FlowNodeRow): ReactElement => (\n <Tag label={record.typeLabel} size=\"sub\" type=\"static\" />\n ),\n title: '類型',\n width: 130,\n },\n { dataIndex: 'label', key: 'label', title: '節點' },\n { dataIndex: 'detail', key: 'detail', title: '簽核方式', width: 160 },\n];\n\nconst BRANCH_COLUMNS: TableColumn<BranchRow>[] = [\n { dataIndex: 'source', key: 'source', title: '來源', width: 180 },\n { dataIndex: 'target', key: 'target', title: '目標', width: 180 },\n { dataIndex: 'condition', key: 'condition', title: '條件' },\n];\n\nfunction readNodeTypeLabel(node: WorkflowNode): string {\n switch (node.type) {\n case 'startEvent':\n return '開始';\n case 'endEvent':\n return node.data.endState === 'REJECTED' ? '結束(駁回)' : '結束(核准)';\n case 'userTask':\n return '簽核';\n case 'serviceTask':\n return '服務';\n case 'exclusiveGateway':\n return '條件閘道';\n case 'parallelGateway':\n return '平行閘道';\n default:\n return '節點';\n }\n}\n\nfunction readNodeDetail(node: WorkflowNode): string | null {\n if (node.type !== 'userTask') {\n return null;\n }\n\n return readApproverResolverDetail(node.data.approverResolver);\n}\n\nconst STACK_STYLE: CSSProperties = {\n display: 'grid',\n gap: 12,\n};\n\n// Match the breathing room between the stepper and the PageHeader, which is the\n// Section's top padding token.\nconst TITLE_STYLE: CSSProperties = {\n marginTop: 'var(--mzn-spacing-padding-vertical-spacious)',\n};\n","'use client';\n\nimport type { ReactElement } from 'react';\nimport { Typography } from '@mezzanine-ui/react';\nimport type { FormDefinitionSchema } from '@rytass/bpm-core-shared/form';\nimport type { WorkflowDefinition } from '@rytass/bpm-core-shared/workflow';\nimport type { ApprovalTemplateLaunchMode } from '@rytass/bpm-core-client/template';\nimport { TemplateDesignerView } from '../../designer';\n\nexport interface ComposeWorkflowStepProps {\n readonly formSchema: FormDefinitionSchema;\n readonly workflowDefinition: WorkflowDefinition | null;\n readonly initiatorPolicyCel: string | null;\n readonly onWorkflowChange: (definition: WorkflowDefinition) => void;\n readonly onInitiatorPolicyChange: (cel: string | null) => void;\n readonly launchMode: ApprovalTemplateLaunchMode;\n readonly onLaunchModeChange: (launchMode: ApprovalTemplateLaunchMode) => void;\n /**\n * Show the AI assistant button inside the embedded designer's side panel.\n * Follows the same opt-in contract as the standalone designer page; default\n * hidden. Wired up the stack from the server page's `BPM_AI_ASSISTANT_ENABLED`.\n */\n readonly showAiAssistant?: boolean;\n /**\n * Whether the LLM backend is configured (host has an API key). When `false`\n * the AI button shows disabled as a placeholder. Default `false`.\n */\n readonly aiAssistantAvailable?: boolean;\n}\n\nexport function ComposeWorkflowStep({\n aiAssistantAvailable = false,\n formSchema,\n initiatorPolicyCel,\n launchMode,\n onInitiatorPolicyChange,\n onLaunchModeChange,\n onWorkflowChange,\n showAiAssistant = false,\n workflowDefinition,\n}: ComposeWorkflowStepProps): ReactElement {\n return (\n <>\n <Typography color=\"text-neutral\" variant=\"caption\">\n 設計簽核節點與條件分流;條件可直接引用上一步設計的表單欄位。\n </Typography>\n <TemplateDesignerView\n aiAssistantAvailable={aiAssistantAvailable}\n embedded\n formSchemaOverride={formSchema}\n initialInitiatorPolicyCel={initiatorPolicyCel}\n initialLaunchMode={launchMode}\n initialWorkflowDefinition={workflowDefinition ?? undefined}\n onInitiatorPolicyChange={onInitiatorPolicyChange}\n onLaunchModeChange={onLaunchModeChange}\n onWorkflowChange={onWorkflowChange}\n showAiAssistant={showAiAssistant}\n />\n </>\n );\n}\n","'use client';\n\nimport { useCallback, useState } from 'react';\nimport type {\n FormDefinitionSchema,\n FormUiSchema,\n} from '@rytass/bpm-core-shared/form';\nimport type { WorkflowDefinition } from '@rytass/bpm-core-shared/workflow';\nimport { useBPMLanguage } from '../../../lib/language-provider';\nimport {\n ApprovalTemplateLaunchMode,\n ComposeApprovalTemplateWithFormResult,\n composeApprovalTemplateWithForm,\n} from '@rytass/bpm-core-client/template';\nimport { DEFAULT_LAUNCH_MODE } from '../designer/launch-mode';\nimport { readTemplateErrorMessage } from '../template-error-message';\n\nexport type ComposeWizardStep = 0 | 1 | 2;\n\nexport type ComposePublishPhase = 'error' | 'idle' | 'submitting' | 'success';\n\nexport const EMPTY_COMPOSE_FORM_SCHEMA: FormDefinitionSchema = {\n fields: [],\n schemaVersion: 1,\n};\n\nexport const EMPTY_COMPOSE_FORM_UI_SCHEMA: FormUiSchema = {\n layout: [],\n schemaVersion: 1,\n};\n\nexport interface TemplateComposeWizard {\n readonly currentStep: ComposeWizardStep;\n /**\n * Single user-facing name. Persisted to both the template and the form\n * (`templateName` / `formName`) at the `composeApprovalTemplateWithForm`\n * boundary — the DB keeps two columns, the UI keeps one field.\n */\n readonly name: string;\n readonly categoryId: string | null;\n readonly formSchema: FormDefinitionSchema;\n readonly formUiSchema: FormUiSchema;\n readonly workflowDefinition: WorkflowDefinition | null;\n readonly initiatorPolicyCel: string | null;\n readonly launchMode: ApprovalTemplateLaunchMode;\n readonly publishPhase: ComposePublishPhase;\n readonly publishError: string | null;\n readonly canLeaveBasics: boolean;\n readonly goToStep: (step: ComposeWizardStep) => void;\n readonly goNext: () => void;\n readonly goBack: () => void;\n readonly setName: (value: string) => void;\n readonly setCategoryId: (value: string | null) => void;\n readonly setFormValue: (next: {\n readonly schema: FormDefinitionSchema;\n readonly uiSchema: FormUiSchema;\n }) => void;\n readonly setWorkflowDefinition: (definition: WorkflowDefinition) => void;\n readonly setInitiatorPolicyCel: (cel: string | null) => void;\n readonly setLaunchMode: (launchMode: ApprovalTemplateLaunchMode) => void;\n readonly publish: () => Promise<ComposeApprovalTemplateWithFormResult | null>;\n}\n\n/**\n * Owns the cross-step state for the unified \"form + flow\" template wizard.\n *\n * Step 0 (表單) edits `formSchema`/`formUiSchema`; that same in-memory schema\n * feeds Step 1 (流程) as the field source for condition branches, so the\n * embedded designer never needs a published form version. Step 2 (檢視發佈)\n * submits everything through the atomic `composeApprovalTemplateWithForm`\n * mutation.\n */\nexport function useTemplateComposeWizard(): TemplateComposeWizard {\n const language = useBPMLanguage();\n const [currentStep, setCurrentStep] = useState<ComposeWizardStep>(0);\n const [name, setName] = useState('');\n const [categoryId, setCategoryId] = useState<string | null>(null);\n const [formSchema, setFormSchema] = useState<FormDefinitionSchema>(\n EMPTY_COMPOSE_FORM_SCHEMA,\n );\n const [formUiSchema, setFormUiSchema] = useState<FormUiSchema>(\n EMPTY_COMPOSE_FORM_UI_SCHEMA,\n );\n const [workflowDefinition, setWorkflowDefinitionState] =\n useState<WorkflowDefinition | null>(null);\n const [initiatorPolicyCel, setInitiatorPolicyCelState] = useState<\n string | null\n >(null);\n const [launchMode, setLaunchMode] = useState<ApprovalTemplateLaunchMode>(\n DEFAULT_LAUNCH_MODE,\n );\n const [publishPhase, setPublishPhase] = useState<ComposePublishPhase>('idle');\n const [publishError, setPublishError] = useState<string | null>(null);\n\n const canLeaveBasics = name.trim().length > 0 && formSchema.fields.length > 0;\n\n const goToStep = useCallback((step: ComposeWizardStep): void => {\n setCurrentStep(step);\n }, []);\n\n const goNext = useCallback((): void => {\n setCurrentStep((step) =>\n step < 2 ? ((step + 1) as ComposeWizardStep) : step,\n );\n }, []);\n\n const goBack = useCallback((): void => {\n setCurrentStep((step) =>\n step > 0 ? ((step - 1) as ComposeWizardStep) : step,\n );\n }, []);\n\n const setFormValue = useCallback(\n (next: {\n readonly schema: FormDefinitionSchema;\n readonly uiSchema: FormUiSchema;\n }): void => {\n setFormSchema(next.schema);\n setFormUiSchema(next.uiSchema);\n },\n [],\n );\n\n const setWorkflowDefinition = useCallback(\n (definition: WorkflowDefinition): void => {\n setWorkflowDefinitionState(definition);\n },\n [],\n );\n\n const setInitiatorPolicyCel = useCallback((cel: string | null): void => {\n setInitiatorPolicyCelState(cel);\n }, []);\n\n const publish =\n useCallback(async (): Promise<ComposeApprovalTemplateWithFormResult | null> => {\n setPublishPhase('submitting');\n setPublishError(null);\n\n const submittedDefinition =\n workflowDefinition ?? EMPTY_WORKFLOW_DEFINITION;\n\n try {\n const result = await composeApprovalTemplateWithForm({\n category: null,\n categoryId,\n formDefinitionId: null,\n formDescription: null,\n // One UI name fans out to both persisted columns.\n formName: name,\n initiatorPolicyCel,\n launchMode,\n notificationConfig: null,\n publish: true,\n schema: formSchema,\n slaDefaults: null,\n templateDescription: null,\n templateId: null,\n templateName: name,\n uiSchema: formUiSchema,\n workflowDefinition: submittedDefinition,\n });\n\n setPublishPhase('success');\n\n return result;\n } catch (requestError: unknown) {\n setPublishError(\n readTemplateErrorMessage(requestError, language, submittedDefinition),\n );\n setPublishPhase('error');\n\n return null;\n }\n }, [\n categoryId,\n formSchema,\n formUiSchema,\n initiatorPolicyCel,\n language,\n launchMode,\n name,\n workflowDefinition,\n ]);\n\n return {\n canLeaveBasics,\n categoryId,\n currentStep,\n formSchema,\n formUiSchema,\n goBack,\n goNext,\n goToStep,\n initiatorPolicyCel,\n launchMode,\n name,\n publish,\n publishError,\n publishPhase,\n setCategoryId,\n setFormValue,\n setInitiatorPolicyCel,\n setLaunchMode,\n setName,\n setWorkflowDefinition,\n workflowDefinition,\n };\n}\n\n// Phase 23 P4: templates created through the wizard start on cel-v2.\nconst EMPTY_WORKFLOW_DEFINITION: WorkflowDefinition = {\n edges: [],\n expressionDialect: 'cel-v2',\n meta: { schemaVersion: 1 },\n nodes: [\n {\n data: { label: '開始' },\n id: 'start',\n position: { x: 80, y: 160 },\n type: 'startEvent',\n },\n {\n data: { endState: 'APPROVED', label: '完成', triggerMode: 'AND' },\n id: 'end',\n position: { x: 560, y: 160 },\n type: 'endEvent',\n },\n ],\n};\n","'use client';\n\nimport type { ReactElement } from 'react';\nimport {\n Button,\n PageHeader,\n Section,\n SectionGroup,\n Step,\n Stepper,\n Typography,\n} from '@mezzanine-ui/react';\nimport ContentHeader from '@mezzanine-ui/react/ContentHeader';\nimport { useRouterAdapter } from '../../../lib/router-adapter';\nimport { useBPMRoutes } from '../../../lib/routes-config';\nimport { ComposeFormStep } from './steps/ComposeFormStep';\nimport { ComposeReviewStep } from './steps/ComposeReviewStep';\nimport { ComposeWorkflowStep } from './steps/ComposeWorkflowStep';\nimport { useTemplateComposeWizard } from './use-template-compose-wizard';\n\nexport interface TemplateComposeWizardViewProps {\n /**\n * Show the workflow designer AI assistant inside Step 1 (流程設計). Opt-in,\n * default hidden — the server page maps `BPM_AI_ASSISTANT_ENABLED` to it.\n */\n readonly showAiAssistant?: boolean;\n /**\n * Whether the LLM backend is configured (host has an API key). When `false`\n * the AI button shows disabled as a placeholder. Default `false`.\n */\n readonly aiAssistantAvailable?: boolean;\n}\n\n/**\n * Unified \"form + flow\" template creation wizard. Walks the user through\n * Step 0 表單設計 → Step 1 流程設計 → Step 2 檢視並發佈, then commits both\n * sides atomically through `composeApprovalTemplateWithForm`. This is the\n * template entry point; the form builder is intentionally controlled here\n * instead of exposed as a standalone `/forms` page.\n */\nexport function TemplateComposeWizardView({\n aiAssistantAvailable = false,\n showAiAssistant = false,\n}: TemplateComposeWizardViewProps = {}): ReactElement {\n const router = useRouterAdapter();\n const routes = useBPMRoutes();\n const wizard = useTemplateComposeWizard();\n const submitting = wizard.publishPhase === 'submitting';\n\n async function handlePublish(): Promise<void> {\n const result = await wizard.publish();\n\n if (result) {\n router.push(routes.templateDesigner(result.templateId));\n }\n }\n\n return (\n <>\n <PageHeader>\n <ContentHeader\n description=\"一次完成表單與流程設計,發佈後即可直接發起。\"\n title=\"建立模板(表單 + 流程)\"\n >\n <Button\n disabled={submitting}\n onClick={(): void => router.push(routes.templates())}\n variant=\"base-secondary\"\n >\n 返回模板列表\n </Button>\n </ContentHeader>\n </PageHeader>\n\n <SectionGroup>\n <Section>\n <Stepper currentStep={wizard.currentStep}>\n <Step description=\"設計欄位與版面\" title=\"表單設計\" />\n <Step description=\"設計簽核節點與條件\" title=\"流程設計\" />\n <Step description=\"確認後發佈\" title=\"檢視並發佈\" />\n </Stepper>\n\n {wizard.currentStep === 0 ? (\n <ComposeFormStep\n categoryId={wizard.categoryId}\n formSchema={wizard.formSchema}\n formUiSchema={wizard.formUiSchema}\n name={wizard.name}\n onCategoryIdChange={wizard.setCategoryId}\n onFormChange={wizard.setFormValue}\n onNameChange={wizard.setName}\n />\n ) : null}\n\n {wizard.currentStep === 1 ? (\n <ComposeWorkflowStep\n aiAssistantAvailable={aiAssistantAvailable}\n formSchema={wizard.formSchema}\n initiatorPolicyCel={wizard.initiatorPolicyCel}\n launchMode={wizard.launchMode}\n onInitiatorPolicyChange={wizard.setInitiatorPolicyCel}\n onLaunchModeChange={wizard.setLaunchMode}\n onWorkflowChange={wizard.setWorkflowDefinition}\n showAiAssistant={showAiAssistant}\n workflowDefinition={wizard.workflowDefinition}\n />\n ) : null}\n\n {wizard.currentStep === 2 ? (\n <ComposeReviewStep\n formSchema={wizard.formSchema}\n formUiSchema={wizard.formUiSchema}\n initiatorPolicyCel={wizard.initiatorPolicyCel}\n launchMode={wizard.launchMode}\n name={wizard.name}\n publishError={wizard.publishError}\n workflowDefinition={wizard.workflowDefinition}\n />\n ) : null}\n\n <div style={FOOTER_STYLE}>\n {wizard.currentStep === 0 && !wizard.canLeaveBasics ? (\n <Typography color=\"text-neutral\" variant=\"caption\">\n 請填寫模板名稱、表單名稱,並至少新增一個表單欄位。\n </Typography>\n ) : (\n <span />\n )}\n <div style={FOOTER_ACTIONS_STYLE}>\n <Button\n disabled={wizard.currentStep === 0 || submitting}\n onClick={wizard.goBack}\n variant=\"base-secondary\"\n >\n 上一步\n </Button>\n {wizard.currentStep < 2 ? (\n <Button\n disabled={wizard.currentStep === 0 && !wizard.canLeaveBasics}\n onClick={wizard.goNext}\n variant=\"base-primary\"\n >\n 下一步\n </Button>\n ) : (\n <Button\n disabled={submitting}\n loading={submitting}\n onClick={(): void => {\n void handlePublish();\n }}\n variant=\"base-primary\"\n >\n 發佈\n </Button>\n )}\n </div>\n </div>\n </Section>\n </SectionGroup>\n </>\n );\n}\n\nconst FOOTER_STYLE = {\n alignItems: 'center',\n display: 'flex',\n // Match the breathing room used elsewhere (the Section's top padding token).\n marginTop: 'var(--mzn-spacing-padding-vertical-spacious)',\n justifyContent: 'space-between',\n gap: 16,\n} as const;\n\nconst FOOTER_ACTIONS_STYLE = {\n display: 'flex',\n gap: 8,\n} as const;\n"],"mappings":"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"}
|