@amaster.ai/bpm-ui 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +116 -0
- package/dist/i18n/index.cjs +2 -0
- package/dist/i18n/index.cjs.map +1 -0
- package/dist/i18n/index.d.cts +64 -0
- package/dist/i18n/index.d.ts +64 -0
- package/dist/i18n/index.js +2 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +72 -0
- package/dist/index.d.ts +72 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/package.json +66 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Amaster Team
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# @amaster.ai/bpm-ui
|
|
2
|
+
|
|
3
|
+
BPM task management UI components for React applications.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @amaster.ai/bpm-ui @amaster.ai/bpm-client
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Components
|
|
12
|
+
|
|
13
|
+
### MyTasksPage
|
|
14
|
+
|
|
15
|
+
Displays current user's pending tasks.
|
|
16
|
+
|
|
17
|
+
```tsx
|
|
18
|
+
import { createBpmClient } from "@amaster.ai/bpm-client";
|
|
19
|
+
import { MyTasksPage, addBpmTranslations } from "@amaster.ai/bpm-ui";
|
|
20
|
+
import i18n from "i18next";
|
|
21
|
+
|
|
22
|
+
// Add translations
|
|
23
|
+
addBpmTranslations(i18n);
|
|
24
|
+
|
|
25
|
+
function MyTasks() {
|
|
26
|
+
const bpmClient = createBpmClient();
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<MyTasksPage
|
|
30
|
+
bpmClient={bpmClient}
|
|
31
|
+
currentUser="admin"
|
|
32
|
+
onApprove={(task) => {
|
|
33
|
+
window.location.href = `/approve?taskId=${task.id}`;
|
|
34
|
+
}}
|
|
35
|
+
/>
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### MyHistoryTasksPage
|
|
41
|
+
|
|
42
|
+
Displays current user's completed tasks.
|
|
43
|
+
|
|
44
|
+
```tsx
|
|
45
|
+
import { MyHistoryTasksPage } from "@amaster.ai/bpm-ui";
|
|
46
|
+
|
|
47
|
+
function MyHistory() {
|
|
48
|
+
const bpmClient = createBpmClient();
|
|
49
|
+
|
|
50
|
+
return <MyHistoryTasksPage bpmClient={bpmClient} currentUser="admin" />;
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### ApproveTaskPage
|
|
55
|
+
|
|
56
|
+
Task approval form with customizable fields.
|
|
57
|
+
|
|
58
|
+
```tsx
|
|
59
|
+
import { ApproveTaskPage } from "@amaster.ai/bpm-ui";
|
|
60
|
+
|
|
61
|
+
function ApproveTask({ taskId }: { taskId: string }) {
|
|
62
|
+
const bpmClient = createBpmClient();
|
|
63
|
+
|
|
64
|
+
return (
|
|
65
|
+
<ApproveTaskPage
|
|
66
|
+
taskId={taskId}
|
|
67
|
+
bpmClient={bpmClient}
|
|
68
|
+
renderForm={(formVariables, onChange) => (
|
|
69
|
+
<div>
|
|
70
|
+
{/* Custom form fields based on formVariables */}
|
|
71
|
+
<input type="text" onChange={(e) => onChange("comment", e.target.value)} />
|
|
72
|
+
</div>
|
|
73
|
+
)}
|
|
74
|
+
onApproved={() => {
|
|
75
|
+
window.location.href = "/my-tasks";
|
|
76
|
+
}}
|
|
77
|
+
onRejected={() => {
|
|
78
|
+
window.location.href = "/my-tasks";
|
|
79
|
+
}}
|
|
80
|
+
/>
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## i18n
|
|
86
|
+
|
|
87
|
+
The package includes translations for English and Chinese. Add them to your i18next instance:
|
|
88
|
+
|
|
89
|
+
```tsx
|
|
90
|
+
import { addBpmTranslations } from "@amaster.ai/bpm-ui";
|
|
91
|
+
import i18n from "i18next";
|
|
92
|
+
|
|
93
|
+
addBpmTranslations(i18n);
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Or import translations directly:
|
|
97
|
+
|
|
98
|
+
```tsx
|
|
99
|
+
import { bpmTranslations } from "@amaster.ai/bpm-ui/i18n";
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Styling
|
|
103
|
+
|
|
104
|
+
Components use BEM-style class names (`bpm-*`). Provide your own styles or use with a UI library.
|
|
105
|
+
|
|
106
|
+
CSS class names:
|
|
107
|
+
|
|
108
|
+
- `.bpm-tasks-page` - Tasks page container
|
|
109
|
+
- `.bpm-history-page` - History page container
|
|
110
|
+
- `.bpm-approve-page` - Approve page container
|
|
111
|
+
- `.bpm-table` - Table element
|
|
112
|
+
- `.bpm-btn` - Button base
|
|
113
|
+
- `.bpm-btn-primary` - Primary button
|
|
114
|
+
- `.bpm-btn-danger` - Danger button
|
|
115
|
+
- `.bpm-btn-outline` - Outline button
|
|
116
|
+
- `.bpm-error` - Error message
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var a={en:{taskList:{myTasks:"My Tasks",myHistory:"My Completed Tasks",taskName:"Task Name",processInstance:"Process Instance",createdAt:"Created At",dueDate:"Due Date",startTime:"Start Time",endTime:"End Time",duration:"Duration",actions:"Actions",approve:"Approve",refresh:"Refresh",loading:"Loading...",noTasks:"No pending tasks",noHistory:"No completed tasks"},approveTask:{approve:"Approve",reject:"Reject",cancel:"Cancel",notFound:"Task not found",loading:"Loading...",submitting:"Submitting..."}},"zh-CN":{taskList:{myTasks:"\u6211\u7684\u5F85\u529E",myHistory:"\u6211\u7684\u5DF2\u529E",taskName:"\u4EFB\u52A1\u540D\u79F0",processInstance:"\u6D41\u7A0B\u5B9E\u4F8B",createdAt:"\u521B\u5EFA\u65F6\u95F4",dueDate:"\u622A\u6B62\u65F6\u95F4",startTime:"\u5F00\u59CB\u65F6\u95F4",endTime:"\u7ED3\u675F\u65F6\u95F4",duration:"\u8017\u65F6",actions:"\u64CD\u4F5C",approve:"\u5BA1\u6279",refresh:"\u5237\u65B0",loading:"\u52A0\u8F7D\u4E2D...",noTasks:"\u6682\u65E0\u5F85\u529E\u4EFB\u52A1",noHistory:"\u6682\u65E0\u5DF2\u529E\u4EFB\u52A1"},approveTask:{approve:"\u540C\u610F",reject:"\u62D2\u7EDD",cancel:"\u53D6\u6D88",notFound:"\u4EFB\u52A1\u4E0D\u5B58\u5728",loading:"\u52A0\u8F7D\u4E2D...",submitting:"\u63D0\u4EA4\u4E2D..."}}};function n(e){Object.entries(a).forEach(([t,s])=>{e.addResourceBundle(t,"bpm",s,true,true);});}exports.addBpmTranslations=n;exports.bpmTranslations=a;//# sourceMappingURL=index.cjs.map
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/i18n/index.ts"],"names":["bpmTranslations","addBpmTranslations","i18n","lng","resources"],"mappings":"aAAO,IAAMA,CAAAA,CAAkB,CAC7B,EAAA,CAAI,CACF,QAAA,CAAU,CACR,OAAA,CAAS,UAAA,CACT,SAAA,CAAW,oBAAA,CACX,QAAA,CAAU,WAAA,CACV,eAAA,CAAiB,kBAAA,CACjB,SAAA,CAAW,YAAA,CACX,OAAA,CAAS,UAAA,CACT,SAAA,CAAW,YAAA,CACX,OAAA,CAAS,UAAA,CACT,QAAA,CAAU,UAAA,CACV,OAAA,CAAS,SAAA,CACT,OAAA,CAAS,SAAA,CACT,QAAS,SAAA,CACT,OAAA,CAAS,YAAA,CACT,OAAA,CAAS,kBAAA,CACT,SAAA,CAAW,oBACb,CAAA,CACA,WAAA,CAAa,CACX,OAAA,CAAS,SAAA,CACT,MAAA,CAAQ,QAAA,CACR,MAAA,CAAQ,QAAA,CACR,QAAA,CAAU,gBAAA,CACV,OAAA,CAAS,YAAA,CACT,UAAA,CAAY,eACd,CACF,CAAA,CACA,OAAA,CAAS,CACP,QAAA,CAAU,CACR,OAAA,CAAS,0BAAA,CACT,SAAA,CAAW,0BAAA,CACX,SAAU,0BAAA,CACV,eAAA,CAAiB,0BAAA,CACjB,SAAA,CAAW,0BAAA,CACX,OAAA,CAAS,0BAAA,CACT,SAAA,CAAW,0BAAA,CACX,OAAA,CAAS,0BAAA,CACT,QAAA,CAAU,cAAA,CACV,OAAA,CAAS,cAAA,CACT,OAAA,CAAS,cAAA,CACT,OAAA,CAAS,cAAA,CACT,OAAA,CAAS,uBAAA,CACT,OAAA,CAAS,sCAAA,CACT,SAAA,CAAW,sCACb,CAAA,CACA,WAAA,CAAa,CACX,OAAA,CAAS,cAAA,CACT,MAAA,CAAQ,cAAA,CACR,OAAQ,cAAA,CACR,QAAA,CAAU,gCAAA,CACV,OAAA,CAAS,uBAAA,CACT,UAAA,CAAY,uBACd,CACF,CACF,EAKO,SAASC,CAAAA,CAAmBC,CAAAA,CAQhC,CACD,MAAA,CAAO,OAAA,CAAQF,CAAe,CAAA,CAAE,OAAA,CAAQ,CAAC,CAACG,CAAAA,CAAKC,CAAS,CAAA,GAAM,CAC5DF,CAAAA,CAAK,iBAAA,CAAkBC,CAAAA,CAAK,KAAA,CAAOC,CAAAA,CAAW,IAAA,CAAM,IAAI,EAC1D,CAAC,EACH","file":"index.cjs","sourcesContent":["export const bpmTranslations = {\n en: {\n taskList: {\n myTasks: \"My Tasks\",\n myHistory: \"My Completed Tasks\",\n taskName: \"Task Name\",\n processInstance: \"Process Instance\",\n createdAt: \"Created At\",\n dueDate: \"Due Date\",\n startTime: \"Start Time\",\n endTime: \"End Time\",\n duration: \"Duration\",\n actions: \"Actions\",\n approve: \"Approve\",\n refresh: \"Refresh\",\n loading: \"Loading...\",\n noTasks: \"No pending tasks\",\n noHistory: \"No completed tasks\",\n },\n approveTask: {\n approve: \"Approve\",\n reject: \"Reject\",\n cancel: \"Cancel\",\n notFound: \"Task not found\",\n loading: \"Loading...\",\n submitting: \"Submitting...\",\n },\n },\n \"zh-CN\": {\n taskList: {\n myTasks: \"我的待办\",\n myHistory: \"我的已办\",\n taskName: \"任务名称\",\n processInstance: \"流程实例\",\n createdAt: \"创建时间\",\n dueDate: \"截止时间\",\n startTime: \"开始时间\",\n endTime: \"结束时间\",\n duration: \"耗时\",\n actions: \"操作\",\n approve: \"审批\",\n refresh: \"刷新\",\n loading: \"加载中...\",\n noTasks: \"暂无待办任务\",\n noHistory: \"暂无已办任务\",\n },\n approveTask: {\n approve: \"同意\",\n reject: \"拒绝\",\n cancel: \"取消\",\n notFound: \"任务不存在\",\n loading: \"加载中...\",\n submitting: \"提交中...\",\n },\n },\n};\n\n/**\n * Add BPM translations to i18next instance\n */\nexport function addBpmTranslations(i18n: {\n addResourceBundle: (\n lng: string,\n ns: string,\n resources: Record<string, unknown>,\n deep?: boolean,\n overwrite?: boolean\n ) => void;\n}) {\n Object.entries(bpmTranslations).forEach(([lng, resources]) => {\n i18n.addResourceBundle(lng, \"bpm\", resources, true, true);\n });\n}\n"]}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
declare const bpmTranslations: {
|
|
2
|
+
en: {
|
|
3
|
+
taskList: {
|
|
4
|
+
myTasks: string;
|
|
5
|
+
myHistory: string;
|
|
6
|
+
taskName: string;
|
|
7
|
+
processInstance: string;
|
|
8
|
+
createdAt: string;
|
|
9
|
+
dueDate: string;
|
|
10
|
+
startTime: string;
|
|
11
|
+
endTime: string;
|
|
12
|
+
duration: string;
|
|
13
|
+
actions: string;
|
|
14
|
+
approve: string;
|
|
15
|
+
refresh: string;
|
|
16
|
+
loading: string;
|
|
17
|
+
noTasks: string;
|
|
18
|
+
noHistory: string;
|
|
19
|
+
};
|
|
20
|
+
approveTask: {
|
|
21
|
+
approve: string;
|
|
22
|
+
reject: string;
|
|
23
|
+
cancel: string;
|
|
24
|
+
notFound: string;
|
|
25
|
+
loading: string;
|
|
26
|
+
submitting: string;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
"zh-CN": {
|
|
30
|
+
taskList: {
|
|
31
|
+
myTasks: string;
|
|
32
|
+
myHistory: string;
|
|
33
|
+
taskName: string;
|
|
34
|
+
processInstance: string;
|
|
35
|
+
createdAt: string;
|
|
36
|
+
dueDate: string;
|
|
37
|
+
startTime: string;
|
|
38
|
+
endTime: string;
|
|
39
|
+
duration: string;
|
|
40
|
+
actions: string;
|
|
41
|
+
approve: string;
|
|
42
|
+
refresh: string;
|
|
43
|
+
loading: string;
|
|
44
|
+
noTasks: string;
|
|
45
|
+
noHistory: string;
|
|
46
|
+
};
|
|
47
|
+
approveTask: {
|
|
48
|
+
approve: string;
|
|
49
|
+
reject: string;
|
|
50
|
+
cancel: string;
|
|
51
|
+
notFound: string;
|
|
52
|
+
loading: string;
|
|
53
|
+
submitting: string;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Add BPM translations to i18next instance
|
|
59
|
+
*/
|
|
60
|
+
declare function addBpmTranslations(i18n: {
|
|
61
|
+
addResourceBundle: (lng: string, ns: string, resources: Record<string, unknown>, deep?: boolean, overwrite?: boolean) => void;
|
|
62
|
+
}): void;
|
|
63
|
+
|
|
64
|
+
export { addBpmTranslations, bpmTranslations };
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
declare const bpmTranslations: {
|
|
2
|
+
en: {
|
|
3
|
+
taskList: {
|
|
4
|
+
myTasks: string;
|
|
5
|
+
myHistory: string;
|
|
6
|
+
taskName: string;
|
|
7
|
+
processInstance: string;
|
|
8
|
+
createdAt: string;
|
|
9
|
+
dueDate: string;
|
|
10
|
+
startTime: string;
|
|
11
|
+
endTime: string;
|
|
12
|
+
duration: string;
|
|
13
|
+
actions: string;
|
|
14
|
+
approve: string;
|
|
15
|
+
refresh: string;
|
|
16
|
+
loading: string;
|
|
17
|
+
noTasks: string;
|
|
18
|
+
noHistory: string;
|
|
19
|
+
};
|
|
20
|
+
approveTask: {
|
|
21
|
+
approve: string;
|
|
22
|
+
reject: string;
|
|
23
|
+
cancel: string;
|
|
24
|
+
notFound: string;
|
|
25
|
+
loading: string;
|
|
26
|
+
submitting: string;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
"zh-CN": {
|
|
30
|
+
taskList: {
|
|
31
|
+
myTasks: string;
|
|
32
|
+
myHistory: string;
|
|
33
|
+
taskName: string;
|
|
34
|
+
processInstance: string;
|
|
35
|
+
createdAt: string;
|
|
36
|
+
dueDate: string;
|
|
37
|
+
startTime: string;
|
|
38
|
+
endTime: string;
|
|
39
|
+
duration: string;
|
|
40
|
+
actions: string;
|
|
41
|
+
approve: string;
|
|
42
|
+
refresh: string;
|
|
43
|
+
loading: string;
|
|
44
|
+
noTasks: string;
|
|
45
|
+
noHistory: string;
|
|
46
|
+
};
|
|
47
|
+
approveTask: {
|
|
48
|
+
approve: string;
|
|
49
|
+
reject: string;
|
|
50
|
+
cancel: string;
|
|
51
|
+
notFound: string;
|
|
52
|
+
loading: string;
|
|
53
|
+
submitting: string;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Add BPM translations to i18next instance
|
|
59
|
+
*/
|
|
60
|
+
declare function addBpmTranslations(i18n: {
|
|
61
|
+
addResourceBundle: (lng: string, ns: string, resources: Record<string, unknown>, deep?: boolean, overwrite?: boolean) => void;
|
|
62
|
+
}): void;
|
|
63
|
+
|
|
64
|
+
export { addBpmTranslations, bpmTranslations };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var a={en:{taskList:{myTasks:"My Tasks",myHistory:"My Completed Tasks",taskName:"Task Name",processInstance:"Process Instance",createdAt:"Created At",dueDate:"Due Date",startTime:"Start Time",endTime:"End Time",duration:"Duration",actions:"Actions",approve:"Approve",refresh:"Refresh",loading:"Loading...",noTasks:"No pending tasks",noHistory:"No completed tasks"},approveTask:{approve:"Approve",reject:"Reject",cancel:"Cancel",notFound:"Task not found",loading:"Loading...",submitting:"Submitting..."}},"zh-CN":{taskList:{myTasks:"\u6211\u7684\u5F85\u529E",myHistory:"\u6211\u7684\u5DF2\u529E",taskName:"\u4EFB\u52A1\u540D\u79F0",processInstance:"\u6D41\u7A0B\u5B9E\u4F8B",createdAt:"\u521B\u5EFA\u65F6\u95F4",dueDate:"\u622A\u6B62\u65F6\u95F4",startTime:"\u5F00\u59CB\u65F6\u95F4",endTime:"\u7ED3\u675F\u65F6\u95F4",duration:"\u8017\u65F6",actions:"\u64CD\u4F5C",approve:"\u5BA1\u6279",refresh:"\u5237\u65B0",loading:"\u52A0\u8F7D\u4E2D...",noTasks:"\u6682\u65E0\u5F85\u529E\u4EFB\u52A1",noHistory:"\u6682\u65E0\u5DF2\u529E\u4EFB\u52A1"},approveTask:{approve:"\u540C\u610F",reject:"\u62D2\u7EDD",cancel:"\u53D6\u6D88",notFound:"\u4EFB\u52A1\u4E0D\u5B58\u5728",loading:"\u52A0\u8F7D\u4E2D...",submitting:"\u63D0\u4EA4\u4E2D..."}}};function n(e){Object.entries(a).forEach(([t,s])=>{e.addResourceBundle(t,"bpm",s,true,true);});}export{n as addBpmTranslations,a as bpmTranslations};//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/i18n/index.ts"],"names":["bpmTranslations","addBpmTranslations","i18n","lng","resources"],"mappings":"AAAO,IAAMA,CAAAA,CAAkB,CAC7B,EAAA,CAAI,CACF,QAAA,CAAU,CACR,OAAA,CAAS,UAAA,CACT,SAAA,CAAW,oBAAA,CACX,QAAA,CAAU,WAAA,CACV,eAAA,CAAiB,kBAAA,CACjB,SAAA,CAAW,YAAA,CACX,OAAA,CAAS,UAAA,CACT,SAAA,CAAW,YAAA,CACX,OAAA,CAAS,UAAA,CACT,QAAA,CAAU,UAAA,CACV,OAAA,CAAS,SAAA,CACT,OAAA,CAAS,SAAA,CACT,QAAS,SAAA,CACT,OAAA,CAAS,YAAA,CACT,OAAA,CAAS,kBAAA,CACT,SAAA,CAAW,oBACb,CAAA,CACA,WAAA,CAAa,CACX,OAAA,CAAS,SAAA,CACT,MAAA,CAAQ,QAAA,CACR,MAAA,CAAQ,QAAA,CACR,QAAA,CAAU,gBAAA,CACV,OAAA,CAAS,YAAA,CACT,UAAA,CAAY,eACd,CACF,CAAA,CACA,OAAA,CAAS,CACP,QAAA,CAAU,CACR,OAAA,CAAS,0BAAA,CACT,SAAA,CAAW,0BAAA,CACX,SAAU,0BAAA,CACV,eAAA,CAAiB,0BAAA,CACjB,SAAA,CAAW,0BAAA,CACX,OAAA,CAAS,0BAAA,CACT,SAAA,CAAW,0BAAA,CACX,OAAA,CAAS,0BAAA,CACT,QAAA,CAAU,cAAA,CACV,OAAA,CAAS,cAAA,CACT,OAAA,CAAS,cAAA,CACT,OAAA,CAAS,cAAA,CACT,OAAA,CAAS,uBAAA,CACT,OAAA,CAAS,sCAAA,CACT,SAAA,CAAW,sCACb,CAAA,CACA,WAAA,CAAa,CACX,OAAA,CAAS,cAAA,CACT,MAAA,CAAQ,cAAA,CACR,OAAQ,cAAA,CACR,QAAA,CAAU,gCAAA,CACV,OAAA,CAAS,uBAAA,CACT,UAAA,CAAY,uBACd,CACF,CACF,EAKO,SAASC,CAAAA,CAAmBC,CAAAA,CAQhC,CACD,MAAA,CAAO,OAAA,CAAQF,CAAe,CAAA,CAAE,OAAA,CAAQ,CAAC,CAACG,CAAAA,CAAKC,CAAS,CAAA,GAAM,CAC5DF,CAAAA,CAAK,iBAAA,CAAkBC,CAAAA,CAAK,KAAA,CAAOC,CAAAA,CAAW,IAAA,CAAM,IAAI,EAC1D,CAAC,EACH","file":"index.js","sourcesContent":["export const bpmTranslations = {\n en: {\n taskList: {\n myTasks: \"My Tasks\",\n myHistory: \"My Completed Tasks\",\n taskName: \"Task Name\",\n processInstance: \"Process Instance\",\n createdAt: \"Created At\",\n dueDate: \"Due Date\",\n startTime: \"Start Time\",\n endTime: \"End Time\",\n duration: \"Duration\",\n actions: \"Actions\",\n approve: \"Approve\",\n refresh: \"Refresh\",\n loading: \"Loading...\",\n noTasks: \"No pending tasks\",\n noHistory: \"No completed tasks\",\n },\n approveTask: {\n approve: \"Approve\",\n reject: \"Reject\",\n cancel: \"Cancel\",\n notFound: \"Task not found\",\n loading: \"Loading...\",\n submitting: \"Submitting...\",\n },\n },\n \"zh-CN\": {\n taskList: {\n myTasks: \"我的待办\",\n myHistory: \"我的已办\",\n taskName: \"任务名称\",\n processInstance: \"流程实例\",\n createdAt: \"创建时间\",\n dueDate: \"截止时间\",\n startTime: \"开始时间\",\n endTime: \"结束时间\",\n duration: \"耗时\",\n actions: \"操作\",\n approve: \"审批\",\n refresh: \"刷新\",\n loading: \"加载中...\",\n noTasks: \"暂无待办任务\",\n noHistory: \"暂无已办任务\",\n },\n approveTask: {\n approve: \"同意\",\n reject: \"拒绝\",\n cancel: \"取消\",\n notFound: \"任务不存在\",\n loading: \"加载中...\",\n submitting: \"提交中...\",\n },\n },\n};\n\n/**\n * Add BPM translations to i18next instance\n */\nexport function addBpmTranslations(i18n: {\n addResourceBundle: (\n lng: string,\n ns: string,\n resources: Record<string, unknown>,\n deep?: boolean,\n overwrite?: boolean\n ) => void;\n}) {\n Object.entries(bpmTranslations).forEach(([lng, resources]) => {\n i18n.addResourceBundle(lng, \"bpm\", resources, true, true);\n });\n}\n"]}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var react=require('react'),reactI18next=require('react-i18next'),jsxRuntime=require('react/jsx-runtime');function j({bpmClient:n,currentUser:p,onApprove:f,renderTaskName:k,renderActions:L,onRefresh:P,className:r=""}){let{t:s}=reactI18next.useTranslation("bpm"),[l,g]=react.useState([]),[T,y]=react.useState(false),[v,b]=react.useState(null),h=react.useCallback(async()=>{y(true),b(null);try{let{data:e,error:i}=await n.getTasks({assignee:p});i?b(i.message):g(e||[]);}catch(e){b(e instanceof Error?e.message:"Failed to fetch tasks");}finally{y(false);}},[n,p]);react.useEffect(()=>{h();},[h]);let R=()=>{h(),P?.();},C=e=>{f?.(e);},t=e=>e?new Date(e).toLocaleString():"-",m=e=>jsxRuntime.jsx("button",{type:"button",onClick:()=>C(e),className:"bpm-btn bpm-btn-outline",children:s("taskList.approve","Approve")});return jsxRuntime.jsxs("div",{className:`bpm-tasks-page ${r}`,children:[jsxRuntime.jsxs("div",{className:"bpm-tasks-header",children:[jsxRuntime.jsx("h1",{className:"bpm-tasks-title",children:s("taskList.myTasks","My Tasks")}),jsxRuntime.jsx("button",{type:"button",onClick:R,disabled:T,className:"bpm-btn bpm-btn-outline",children:T?s("taskList.loading","Loading..."):s("taskList.refresh","Refresh")})]}),v&&jsxRuntime.jsx("div",{className:"bpm-error",children:v}),jsxRuntime.jsxs("table",{className:"bpm-table",children:[jsxRuntime.jsx("thead",{children:jsxRuntime.jsxs("tr",{children:[jsxRuntime.jsx("th",{children:s("taskList.taskName","Task Name")}),jsxRuntime.jsx("th",{children:s("taskList.processInstance","Process Instance")}),jsxRuntime.jsx("th",{children:s("taskList.createdAt","Created At")}),jsxRuntime.jsx("th",{children:s("taskList.dueDate","Due Date")}),jsxRuntime.jsx("th",{children:s("taskList.actions","Actions")})]})}),jsxRuntime.jsx("tbody",{children:l.length===0?jsxRuntime.jsx("tr",{children:jsxRuntime.jsx("td",{colSpan:5,className:"bpm-table-empty",children:T?s("taskList.loading","Loading..."):s("taskList.noTasks","No pending tasks")})}):l.map(e=>jsxRuntime.jsxs("tr",{children:[jsxRuntime.jsx("td",{children:k?k(e):e.name}),jsxRuntime.jsxs("td",{className:"bpm-mono",children:[e.processInstanceId?.slice(0,8),"..."]}),jsxRuntime.jsx("td",{children:t(e.created)}),jsxRuntime.jsx("td",{children:t(e.due)}),jsxRuntime.jsx("td",{children:L?L(e,m(e)):m(e)})]},e.id))})]})]})}function G({bpmClient:n,currentUser:p,renderTaskName:f,renderActions:k,onRefresh:L,className:P=""}){let{t:r}=reactI18next.useTranslation("bpm"),[s,l]=react.useState([]),[g,T]=react.useState(false),[y,v]=react.useState(null),b=react.useCallback(async()=>{T(true),v(null);try{let{data:t,error:m}=await n.getHistoryTasks({taskAssignee:p,finished:!0});m?v(m.message):l(t||[]);}catch(t){v(t instanceof Error?t.message:"Failed to fetch history");}finally{T(false);}},[n,p]);react.useEffect(()=>{b();},[b]);let h=()=>{b(),L?.();},R=t=>t?new Date(t).toLocaleString():"-",C=(t,m)=>{if(!t||!m)return "-";let e=new Date(m).getTime()-new Date(t).getTime(),i=Math.floor(e/6e4),N=Math.floor(i/60),D=Math.floor(N/24);return D>0?`${D}d ${N%24}h`:N>0?`${N}h ${i%60}m`:`${i}m`};return jsxRuntime.jsxs("div",{className:`bpm-history-page ${P}`,children:[jsxRuntime.jsxs("div",{className:"bpm-tasks-header",children:[jsxRuntime.jsx("h1",{className:"bpm-tasks-title",children:r("taskList.myHistory","My Completed Tasks")}),jsxRuntime.jsx("button",{type:"button",onClick:h,disabled:g,className:"bpm-btn bpm-btn-outline",children:g?r("taskList.loading","Loading..."):r("taskList.refresh","Refresh")})]}),y&&jsxRuntime.jsx("div",{className:"bpm-error",children:y}),jsxRuntime.jsxs("table",{className:"bpm-table",children:[jsxRuntime.jsx("thead",{children:jsxRuntime.jsxs("tr",{children:[jsxRuntime.jsx("th",{children:r("taskList.taskName","Task Name")}),jsxRuntime.jsx("th",{children:r("taskList.processInstance","Process Instance")}),jsxRuntime.jsx("th",{children:r("taskList.startTime","Start Time")}),jsxRuntime.jsx("th",{children:r("taskList.endTime","End Time")}),jsxRuntime.jsx("th",{children:r("taskList.duration","Duration")}),k&&jsxRuntime.jsx("th",{children:r("taskList.actions","Actions")})]})}),jsxRuntime.jsx("tbody",{children:s.length===0?jsxRuntime.jsx("tr",{children:jsxRuntime.jsx("td",{colSpan:k?6:5,className:"bpm-table-empty",children:g?r("taskList.loading","Loading..."):r("taskList.noHistory","No completed tasks")})}):s.map(t=>jsxRuntime.jsxs("tr",{children:[jsxRuntime.jsx("td",{children:f?f(t):t.name}),jsxRuntime.jsxs("td",{className:"bpm-mono",children:[t.processInstanceId?.slice(0,8),"..."]}),jsxRuntime.jsx("td",{children:R(t.startTime)}),jsxRuntime.jsx("td",{children:R(t.endTime)}),jsxRuntime.jsx("td",{children:C(t.startTime,t.endTime)}),k&&jsxRuntime.jsx("td",{children:k(t)})]},t.id))})]})]})}function U({taskId:n,bpmClient:p,renderForm:f,onApproved:k,onRejected:L,onCancel:P,additionalVariables:r={},className:s=""}){let{t:l}=reactI18next.useTranslation("bpm"),[g,T]=react.useState(null),[y,v]=react.useState({}),[b,h]=react.useState({}),[R,C]=react.useState(true),[t,m]=react.useState(false),[e,i]=react.useState(null),N=react.useCallback(async()=>{C(true),i(null);try{let[d,u]=await Promise.all([p.getTask(n),p.getTaskFormVariables(n)]);if(d.error){i(d.error.message);return}if(u.error){i(u.error.message);return}T(d.data),v(u.data||{});}catch(d){i(d instanceof Error?d.message:"Failed to load task");}finally{C(false);}},[p,n]);react.useEffect(()=>{n&&N();},[n,N]);let D=(d,u)=>{h(F=>({...F,[d]:u}));},B=async d=>{m(true),i(null);try{let u={...b,...r,approvalStatus:d?"approved":"rejected"},{error:F}=await p.completeTask(n,u);if(F){i(F.message);return}d?k?.():L?.();}catch(u){i(u instanceof Error?u.message:"Failed to complete task");}finally{m(false);}};return R?jsxRuntime.jsx("div",{className:`bpm-approve-page bpm-loading ${s}`,children:l("approveTask.loading","Loading...")}):g?jsxRuntime.jsx("div",{className:`bpm-approve-page ${s}`,children:jsxRuntime.jsxs("div",{className:"bpm-approve-card",children:[jsxRuntime.jsx("div",{className:"bpm-approve-header",children:jsxRuntime.jsx("h2",{className:"bpm-approve-title",children:g.name})}),jsxRuntime.jsxs("div",{className:"bpm-approve-content",children:[e&&jsxRuntime.jsx("div",{className:"bpm-error",children:e}),jsxRuntime.jsx("div",{className:"bpm-approve-form",children:f(y,D)}),jsxRuntime.jsxs("div",{className:"bpm-approve-actions",children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>B(true),disabled:t,className:"bpm-btn bpm-btn-primary",children:t?l("approveTask.submitting","Submitting..."):l("approveTask.approve","Approve")}),jsxRuntime.jsx("button",{type:"button",onClick:()=>B(false),disabled:t,className:"bpm-btn bpm-btn-danger",children:t?l("approveTask.submitting","Submitting..."):l("approveTask.reject","Reject")}),P&&jsxRuntime.jsx("button",{type:"button",onClick:P,disabled:t,className:"bpm-btn bpm-btn-outline",children:l("approveTask.cancel","Cancel")})]})]})]})}):jsxRuntime.jsx("div",{className:`bpm-approve-page ${s}`,children:jsxRuntime.jsx("div",{className:"bpm-error",children:l("approveTask.notFound","Task not found")})})}var S={en:{taskList:{myTasks:"My Tasks",myHistory:"My Completed Tasks",taskName:"Task Name",processInstance:"Process Instance",createdAt:"Created At",dueDate:"Due Date",startTime:"Start Time",endTime:"End Time",duration:"Duration",actions:"Actions",approve:"Approve",refresh:"Refresh",loading:"Loading...",noTasks:"No pending tasks",noHistory:"No completed tasks"},approveTask:{approve:"Approve",reject:"Reject",cancel:"Cancel",notFound:"Task not found",loading:"Loading...",submitting:"Submitting..."}},"zh-CN":{taskList:{myTasks:"\u6211\u7684\u5F85\u529E",myHistory:"\u6211\u7684\u5DF2\u529E",taskName:"\u4EFB\u52A1\u540D\u79F0",processInstance:"\u6D41\u7A0B\u5B9E\u4F8B",createdAt:"\u521B\u5EFA\u65F6\u95F4",dueDate:"\u622A\u6B62\u65F6\u95F4",startTime:"\u5F00\u59CB\u65F6\u95F4",endTime:"\u7ED3\u675F\u65F6\u95F4",duration:"\u8017\u65F6",actions:"\u64CD\u4F5C",approve:"\u5BA1\u6279",refresh:"\u5237\u65B0",loading:"\u52A0\u8F7D\u4E2D...",noTasks:"\u6682\u65E0\u5F85\u529E\u4EFB\u52A1",noHistory:"\u6682\u65E0\u5DF2\u529E\u4EFB\u52A1"},approveTask:{approve:"\u540C\u610F",reject:"\u62D2\u7EDD",cancel:"\u53D6\u6D88",notFound:"\u4EFB\u52A1\u4E0D\u5B58\u5728",loading:"\u52A0\u8F7D\u4E2D...",submitting:"\u63D0\u4EA4\u4E2D..."}}};function W(n){Object.entries(S).forEach(([p,f])=>{n.addResourceBundle(p,"bpm",f,true,true);});}exports.ApproveTaskPage=U;exports.MyHistoryTasksPage=G;exports.MyTasksPage=j;exports.addBpmTranslations=W;exports.bpmTranslations=S;//# sourceMappingURL=index.cjs.map
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/pages/MyTasksPage.tsx","../src/pages/MyHistoryTasksPage.tsx","../src/pages/ApproveTaskPage.tsx","../src/i18n/index.ts"],"names":["MyTasksPage","bpmClient","currentUser","onApprove","renderTaskName","renderActions","onRefresh","className","t","useTranslation","tasks","setTasks","useState","loading","setLoading","error","setError","fetchTasks","useCallback","data","fetchError","err","useEffect","handleRefresh","handleApprove","task","formatDate","dateString","defaultActionButton","jsx","jsxs","MyHistoryTasksPage","formatDuration","start","end","diffMs","diffMins","diffHours","diffDays","ApproveTaskPage","taskId","renderForm","onApproved","onRejected","onCancel","additionalVariables","setTask","formVariables","setFormVariables","formValues","setFormValues","submitting","setSubmitting","fetchTaskData","taskRes","varsRes","handleFieldChange","field","value","prev","handleComplete","approved","variables","completeError","bpmTranslations","addBpmTranslations","i18n","lng","resources"],"mappings":"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","file":"index.cjs","sourcesContent":["import { useState, useEffect, useCallback } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport type { Task, BpmClient } from \"@amaster.ai/bpm-client\";\n\nexport interface MyTasksPageProps {\n /** BPM client instance */\n bpmClient: BpmClient;\n /** Current user identifier */\n currentUser: string;\n /** Called when clicking approve button */\n onApprove?: (task: Task) => void;\n /** Custom render for task name cell */\n renderTaskName?: (task: Task) => React.ReactNode;\n /** Custom render for actions cell */\n renderActions?: (task: Task, defaultAction: React.ReactNode) => React.ReactNode;\n /** Called when task list is refreshed */\n onRefresh?: () => void;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * My Tasks Page - displays current user's pending tasks\n *\n * This is a shared component that can be used across different applications.\n * Each application sees the same UI but fetches different data based on the currentUser.\n */\nexport function MyTasksPage({\n bpmClient,\n currentUser,\n onApprove,\n renderTaskName,\n renderActions,\n onRefresh,\n className = \"\",\n}: MyTasksPageProps) {\n const { t } = useTranslation(\"bpm\");\n const [tasks, setTasks] = useState<Task[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchTasks = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const { data, error: fetchError } = await bpmClient.getTasks({\n assignee: currentUser,\n });\n if (fetchError) {\n setError(fetchError.message);\n } else {\n setTasks(data || []);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to fetch tasks\");\n } finally {\n setLoading(false);\n }\n }, [bpmClient, currentUser]);\n\n useEffect(() => {\n fetchTasks();\n }, [fetchTasks]);\n\n const handleRefresh = () => {\n fetchTasks();\n onRefresh?.();\n };\n\n const handleApprove = (task: Task) => {\n onApprove?.(task);\n };\n\n const formatDate = (dateString: string | null | undefined) => {\n if (!dateString) return \"-\";\n return new Date(dateString).toLocaleString();\n };\n\n const defaultActionButton = (task: Task) => (\n <button type=\"button\" onClick={() => handleApprove(task)} className=\"bpm-btn bpm-btn-outline\">\n {t(\"taskList.approve\", \"Approve\")}\n </button>\n );\n\n return (\n <div className={`bpm-tasks-page ${className}`}>\n <div className=\"bpm-tasks-header\">\n <h1 className=\"bpm-tasks-title\">{t(\"taskList.myTasks\", \"My Tasks\")}</h1>\n <button\n type=\"button\"\n onClick={handleRefresh}\n disabled={loading}\n className=\"bpm-btn bpm-btn-outline\"\n >\n {loading ? t(\"taskList.loading\", \"Loading...\") : t(\"taskList.refresh\", \"Refresh\")}\n </button>\n </div>\n\n {error && <div className=\"bpm-error\">{error}</div>}\n\n <table className=\"bpm-table\">\n <thead>\n <tr>\n <th>{t(\"taskList.taskName\", \"Task Name\")}</th>\n <th>{t(\"taskList.processInstance\", \"Process Instance\")}</th>\n <th>{t(\"taskList.createdAt\", \"Created At\")}</th>\n <th>{t(\"taskList.dueDate\", \"Due Date\")}</th>\n <th>{t(\"taskList.actions\", \"Actions\")}</th>\n </tr>\n </thead>\n <tbody>\n {tasks.length === 0 ? (\n <tr>\n <td colSpan={5} className=\"bpm-table-empty\">\n {loading\n ? t(\"taskList.loading\", \"Loading...\")\n : t(\"taskList.noTasks\", \"No pending tasks\")}\n </td>\n </tr>\n ) : (\n tasks.map((task) => (\n <tr key={task.id}>\n <td>{renderTaskName ? renderTaskName(task) : task.name}</td>\n <td className=\"bpm-mono\">{task.processInstanceId?.slice(0, 8)}...</td>\n <td>{formatDate(task.created)}</td>\n <td>{formatDate(task.due)}</td>\n <td>\n {renderActions\n ? renderActions(task, defaultActionButton(task))\n : defaultActionButton(task)}\n </td>\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n );\n}\n\nexport type { Task };\n","import { useState, useEffect, useCallback } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport type { HistoryTask, BpmClient } from \"@amaster.ai/bpm-client\";\n\nexport interface MyHistoryTasksPageProps {\n /** BPM client instance */\n bpmClient: BpmClient;\n /** Current user identifier */\n currentUser: string;\n /** Custom render for task name cell */\n renderTaskName?: (task: HistoryTask) => React.ReactNode;\n /** Custom render for actions cell */\n renderActions?: (task: HistoryTask) => React.ReactNode;\n /** Called when task list is refreshed */\n onRefresh?: () => void;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * My History Tasks Page - displays current user's completed tasks\n */\nexport function MyHistoryTasksPage({\n bpmClient,\n currentUser,\n renderTaskName,\n renderActions,\n onRefresh,\n className = \"\",\n}: MyHistoryTasksPageProps) {\n const { t } = useTranslation(\"bpm\");\n const [tasks, setTasks] = useState<HistoryTask[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchTasks = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const { data, error: fetchError } = await bpmClient.getHistoryTasks({\n taskAssignee: currentUser,\n finished: true,\n });\n if (fetchError) {\n setError(fetchError.message);\n } else {\n setTasks(data || []);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to fetch history\");\n } finally {\n setLoading(false);\n }\n }, [bpmClient, currentUser]);\n\n useEffect(() => {\n fetchTasks();\n }, [fetchTasks]);\n\n const handleRefresh = () => {\n fetchTasks();\n onRefresh?.();\n };\n\n const formatDate = (dateString: string | null | undefined) => {\n if (!dateString) return \"-\";\n return new Date(dateString).toLocaleString();\n };\n\n const formatDuration = (start: string | null | undefined, end: string | null | undefined) => {\n if (!start || !end) return \"-\";\n const diffMs = new Date(end).getTime() - new Date(start).getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMins / 60);\n const diffDays = Math.floor(diffHours / 24);\n\n if (diffDays > 0) return `${diffDays}d ${diffHours % 24}h`;\n if (diffHours > 0) return `${diffHours}h ${diffMins % 60}m`;\n return `${diffMins}m`;\n };\n\n return (\n <div className={`bpm-history-page ${className}`}>\n <div className=\"bpm-tasks-header\">\n <h1 className=\"bpm-tasks-title\">{t(\"taskList.myHistory\", \"My Completed Tasks\")}</h1>\n <button\n type=\"button\"\n onClick={handleRefresh}\n disabled={loading}\n className=\"bpm-btn bpm-btn-outline\"\n >\n {loading ? t(\"taskList.loading\", \"Loading...\") : t(\"taskList.refresh\", \"Refresh\")}\n </button>\n </div>\n\n {error && <div className=\"bpm-error\">{error}</div>}\n\n <table className=\"bpm-table\">\n <thead>\n <tr>\n <th>{t(\"taskList.taskName\", \"Task Name\")}</th>\n <th>{t(\"taskList.processInstance\", \"Process Instance\")}</th>\n <th>{t(\"taskList.startTime\", \"Start Time\")}</th>\n <th>{t(\"taskList.endTime\", \"End Time\")}</th>\n <th>{t(\"taskList.duration\", \"Duration\")}</th>\n {renderActions && <th>{t(\"taskList.actions\", \"Actions\")}</th>}\n </tr>\n </thead>\n <tbody>\n {tasks.length === 0 ? (\n <tr>\n <td colSpan={renderActions ? 6 : 5} className=\"bpm-table-empty\">\n {loading\n ? t(\"taskList.loading\", \"Loading...\")\n : t(\"taskList.noHistory\", \"No completed tasks\")}\n </td>\n </tr>\n ) : (\n tasks.map((task) => (\n <tr key={task.id}>\n <td>{renderTaskName ? renderTaskName(task) : task.name}</td>\n <td className=\"bpm-mono\">{task.processInstanceId?.slice(0, 8)}...</td>\n <td>{formatDate(task.startTime)}</td>\n <td>{formatDate(task.endTime)}</td>\n <td>{formatDuration(task.startTime, task.endTime)}</td>\n {renderActions && <td>{renderActions(task)}</td>}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n );\n}\n\nexport type { HistoryTask };\n","import { useState, useEffect, useCallback } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport type { BpmClient, TaskFormVariables, Task } from \"@amaster.ai/bpm-client\";\n\nexport interface ApproveTaskPageProps {\n /** Task ID to approve */\n taskId: string;\n /** BPM client instance */\n bpmClient: BpmClient;\n /** Render form fields based on form variables */\n renderForm: (\n formVariables: TaskFormVariables,\n onFieldChange: (field: string, value: unknown) => void\n ) => React.ReactNode;\n /** Called after successful approval */\n onApproved?: () => void;\n /** Called after rejection */\n onRejected?: () => void;\n /** Called on cancel */\n onCancel?: () => void;\n /** Additional variables to include when completing task */\n additionalVariables?: Record<string, unknown>;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * Approve Task Page - displays task details and form for approval\n */\nexport function ApproveTaskPage({\n taskId,\n bpmClient,\n renderForm,\n onApproved,\n onRejected,\n onCancel,\n additionalVariables = {},\n className = \"\",\n}: ApproveTaskPageProps) {\n const { t } = useTranslation(\"bpm\");\n const [task, setTask] = useState<Task | null>(null);\n const [formVariables, setFormVariables] = useState<TaskFormVariables>({});\n const [formValues, setFormValues] = useState<Record<string, unknown>>({});\n const [loading, setLoading] = useState(true);\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchTaskData = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const [taskRes, varsRes] = await Promise.all([\n bpmClient.getTask(taskId),\n bpmClient.getTaskFormVariables(taskId),\n ]);\n\n if (taskRes.error) {\n setError(taskRes.error.message);\n return;\n }\n if (varsRes.error) {\n setError(varsRes.error.message);\n return;\n }\n\n setTask(taskRes.data);\n setFormVariables(varsRes.data || {});\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to load task\");\n } finally {\n setLoading(false);\n }\n }, [bpmClient, taskId]);\n\n useEffect(() => {\n if (taskId) {\n fetchTaskData();\n }\n }, [taskId, fetchTaskData]);\n\n const handleFieldChange = (field: string, value: unknown) => {\n setFormValues((prev) => ({ ...prev, [field]: value }));\n };\n\n const handleComplete = async (approved: boolean) => {\n setSubmitting(true);\n setError(null);\n try {\n const variables = {\n ...formValues,\n ...additionalVariables,\n approvalStatus: approved ? \"approved\" : \"rejected\",\n };\n\n const { error: completeError } = await bpmClient.completeTask(taskId, variables);\n\n if (completeError) {\n setError(completeError.message);\n return;\n }\n\n if (approved) {\n onApproved?.();\n } else {\n onRejected?.();\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to complete task\");\n } finally {\n setSubmitting(false);\n }\n };\n\n if (loading) {\n return (\n <div className={`bpm-approve-page bpm-loading ${className}`}>\n {t(\"approveTask.loading\", \"Loading...\")}\n </div>\n );\n }\n\n if (!task) {\n return (\n <div className={`bpm-approve-page ${className}`}>\n <div className=\"bpm-error\">{t(\"approveTask.notFound\", \"Task not found\")}</div>\n </div>\n );\n }\n\n return (\n <div className={`bpm-approve-page ${className}`}>\n <div className=\"bpm-approve-card\">\n <div className=\"bpm-approve-header\">\n <h2 className=\"bpm-approve-title\">{task.name}</h2>\n </div>\n <div className=\"bpm-approve-content\">\n {error && <div className=\"bpm-error\">{error}</div>}\n\n <div className=\"bpm-approve-form\">{renderForm(formVariables, handleFieldChange)}</div>\n\n <div className=\"bpm-approve-actions\">\n <button\n type=\"button\"\n onClick={() => handleComplete(true)}\n disabled={submitting}\n className=\"bpm-btn bpm-btn-primary\"\n >\n {submitting\n ? t(\"approveTask.submitting\", \"Submitting...\")\n : t(\"approveTask.approve\", \"Approve\")}\n </button>\n <button\n type=\"button\"\n onClick={() => handleComplete(false)}\n disabled={submitting}\n className=\"bpm-btn bpm-btn-danger\"\n >\n {submitting\n ? t(\"approveTask.submitting\", \"Submitting...\")\n : t(\"approveTask.reject\", \"Reject\")}\n </button>\n {onCancel && (\n <button\n type=\"button\"\n onClick={onCancel}\n disabled={submitting}\n className=\"bpm-btn bpm-btn-outline\"\n >\n {t(\"approveTask.cancel\", \"Cancel\")}\n </button>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport type { TaskFormVariables };\n","export const bpmTranslations = {\n en: {\n taskList: {\n myTasks: \"My Tasks\",\n myHistory: \"My Completed Tasks\",\n taskName: \"Task Name\",\n processInstance: \"Process Instance\",\n createdAt: \"Created At\",\n dueDate: \"Due Date\",\n startTime: \"Start Time\",\n endTime: \"End Time\",\n duration: \"Duration\",\n actions: \"Actions\",\n approve: \"Approve\",\n refresh: \"Refresh\",\n loading: \"Loading...\",\n noTasks: \"No pending tasks\",\n noHistory: \"No completed tasks\",\n },\n approveTask: {\n approve: \"Approve\",\n reject: \"Reject\",\n cancel: \"Cancel\",\n notFound: \"Task not found\",\n loading: \"Loading...\",\n submitting: \"Submitting...\",\n },\n },\n \"zh-CN\": {\n taskList: {\n myTasks: \"我的待办\",\n myHistory: \"我的已办\",\n taskName: \"任务名称\",\n processInstance: \"流程实例\",\n createdAt: \"创建时间\",\n dueDate: \"截止时间\",\n startTime: \"开始时间\",\n endTime: \"结束时间\",\n duration: \"耗时\",\n actions: \"操作\",\n approve: \"审批\",\n refresh: \"刷新\",\n loading: \"加载中...\",\n noTasks: \"暂无待办任务\",\n noHistory: \"暂无已办任务\",\n },\n approveTask: {\n approve: \"同意\",\n reject: \"拒绝\",\n cancel: \"取消\",\n notFound: \"任务不存在\",\n loading: \"加载中...\",\n submitting: \"提交中...\",\n },\n },\n};\n\n/**\n * Add BPM translations to i18next instance\n */\nexport function addBpmTranslations(i18n: {\n addResourceBundle: (\n lng: string,\n ns: string,\n resources: Record<string, unknown>,\n deep?: boolean,\n overwrite?: boolean\n ) => void;\n}) {\n Object.entries(bpmTranslations).forEach(([lng, resources]) => {\n i18n.addResourceBundle(lng, \"bpm\", resources, true, true);\n });\n}\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { BpmClient, Task, HistoryTask, TaskFormVariables } from '@amaster.ai/bpm-client';
|
|
3
|
+
export { BpmClient, HistoryTask, Task, TaskFormVariables } from '@amaster.ai/bpm-client';
|
|
4
|
+
export { addBpmTranslations, bpmTranslations } from './i18n/index.cjs';
|
|
5
|
+
|
|
6
|
+
interface MyTasksPageProps {
|
|
7
|
+
/** BPM client instance */
|
|
8
|
+
bpmClient: BpmClient;
|
|
9
|
+
/** Current user identifier */
|
|
10
|
+
currentUser: string;
|
|
11
|
+
/** Called when clicking approve button */
|
|
12
|
+
onApprove?: (task: Task) => void;
|
|
13
|
+
/** Custom render for task name cell */
|
|
14
|
+
renderTaskName?: (task: Task) => React.ReactNode;
|
|
15
|
+
/** Custom render for actions cell */
|
|
16
|
+
renderActions?: (task: Task, defaultAction: React.ReactNode) => React.ReactNode;
|
|
17
|
+
/** Called when task list is refreshed */
|
|
18
|
+
onRefresh?: () => void;
|
|
19
|
+
/** Additional class name */
|
|
20
|
+
className?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* My Tasks Page - displays current user's pending tasks
|
|
24
|
+
*
|
|
25
|
+
* This is a shared component that can be used across different applications.
|
|
26
|
+
* Each application sees the same UI but fetches different data based on the currentUser.
|
|
27
|
+
*/
|
|
28
|
+
declare function MyTasksPage({ bpmClient, currentUser, onApprove, renderTaskName, renderActions, onRefresh, className, }: MyTasksPageProps): react_jsx_runtime.JSX.Element;
|
|
29
|
+
|
|
30
|
+
interface MyHistoryTasksPageProps {
|
|
31
|
+
/** BPM client instance */
|
|
32
|
+
bpmClient: BpmClient;
|
|
33
|
+
/** Current user identifier */
|
|
34
|
+
currentUser: string;
|
|
35
|
+
/** Custom render for task name cell */
|
|
36
|
+
renderTaskName?: (task: HistoryTask) => React.ReactNode;
|
|
37
|
+
/** Custom render for actions cell */
|
|
38
|
+
renderActions?: (task: HistoryTask) => React.ReactNode;
|
|
39
|
+
/** Called when task list is refreshed */
|
|
40
|
+
onRefresh?: () => void;
|
|
41
|
+
/** Additional class name */
|
|
42
|
+
className?: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* My History Tasks Page - displays current user's completed tasks
|
|
46
|
+
*/
|
|
47
|
+
declare function MyHistoryTasksPage({ bpmClient, currentUser, renderTaskName, renderActions, onRefresh, className, }: MyHistoryTasksPageProps): react_jsx_runtime.JSX.Element;
|
|
48
|
+
|
|
49
|
+
interface ApproveTaskPageProps {
|
|
50
|
+
/** Task ID to approve */
|
|
51
|
+
taskId: string;
|
|
52
|
+
/** BPM client instance */
|
|
53
|
+
bpmClient: BpmClient;
|
|
54
|
+
/** Render form fields based on form variables */
|
|
55
|
+
renderForm: (formVariables: TaskFormVariables, onFieldChange: (field: string, value: unknown) => void) => React.ReactNode;
|
|
56
|
+
/** Called after successful approval */
|
|
57
|
+
onApproved?: () => void;
|
|
58
|
+
/** Called after rejection */
|
|
59
|
+
onRejected?: () => void;
|
|
60
|
+
/** Called on cancel */
|
|
61
|
+
onCancel?: () => void;
|
|
62
|
+
/** Additional variables to include when completing task */
|
|
63
|
+
additionalVariables?: Record<string, unknown>;
|
|
64
|
+
/** Additional class name */
|
|
65
|
+
className?: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Approve Task Page - displays task details and form for approval
|
|
69
|
+
*/
|
|
70
|
+
declare function ApproveTaskPage({ taskId, bpmClient, renderForm, onApproved, onRejected, onCancel, additionalVariables, className, }: ApproveTaskPageProps): react_jsx_runtime.JSX.Element;
|
|
71
|
+
|
|
72
|
+
export { ApproveTaskPage, type ApproveTaskPageProps, MyHistoryTasksPage, type MyHistoryTasksPageProps, MyTasksPage, type MyTasksPageProps };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { BpmClient, Task, HistoryTask, TaskFormVariables } from '@amaster.ai/bpm-client';
|
|
3
|
+
export { BpmClient, HistoryTask, Task, TaskFormVariables } from '@amaster.ai/bpm-client';
|
|
4
|
+
export { addBpmTranslations, bpmTranslations } from './i18n/index.js';
|
|
5
|
+
|
|
6
|
+
interface MyTasksPageProps {
|
|
7
|
+
/** BPM client instance */
|
|
8
|
+
bpmClient: BpmClient;
|
|
9
|
+
/** Current user identifier */
|
|
10
|
+
currentUser: string;
|
|
11
|
+
/** Called when clicking approve button */
|
|
12
|
+
onApprove?: (task: Task) => void;
|
|
13
|
+
/** Custom render for task name cell */
|
|
14
|
+
renderTaskName?: (task: Task) => React.ReactNode;
|
|
15
|
+
/** Custom render for actions cell */
|
|
16
|
+
renderActions?: (task: Task, defaultAction: React.ReactNode) => React.ReactNode;
|
|
17
|
+
/** Called when task list is refreshed */
|
|
18
|
+
onRefresh?: () => void;
|
|
19
|
+
/** Additional class name */
|
|
20
|
+
className?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* My Tasks Page - displays current user's pending tasks
|
|
24
|
+
*
|
|
25
|
+
* This is a shared component that can be used across different applications.
|
|
26
|
+
* Each application sees the same UI but fetches different data based on the currentUser.
|
|
27
|
+
*/
|
|
28
|
+
declare function MyTasksPage({ bpmClient, currentUser, onApprove, renderTaskName, renderActions, onRefresh, className, }: MyTasksPageProps): react_jsx_runtime.JSX.Element;
|
|
29
|
+
|
|
30
|
+
interface MyHistoryTasksPageProps {
|
|
31
|
+
/** BPM client instance */
|
|
32
|
+
bpmClient: BpmClient;
|
|
33
|
+
/** Current user identifier */
|
|
34
|
+
currentUser: string;
|
|
35
|
+
/** Custom render for task name cell */
|
|
36
|
+
renderTaskName?: (task: HistoryTask) => React.ReactNode;
|
|
37
|
+
/** Custom render for actions cell */
|
|
38
|
+
renderActions?: (task: HistoryTask) => React.ReactNode;
|
|
39
|
+
/** Called when task list is refreshed */
|
|
40
|
+
onRefresh?: () => void;
|
|
41
|
+
/** Additional class name */
|
|
42
|
+
className?: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* My History Tasks Page - displays current user's completed tasks
|
|
46
|
+
*/
|
|
47
|
+
declare function MyHistoryTasksPage({ bpmClient, currentUser, renderTaskName, renderActions, onRefresh, className, }: MyHistoryTasksPageProps): react_jsx_runtime.JSX.Element;
|
|
48
|
+
|
|
49
|
+
interface ApproveTaskPageProps {
|
|
50
|
+
/** Task ID to approve */
|
|
51
|
+
taskId: string;
|
|
52
|
+
/** BPM client instance */
|
|
53
|
+
bpmClient: BpmClient;
|
|
54
|
+
/** Render form fields based on form variables */
|
|
55
|
+
renderForm: (formVariables: TaskFormVariables, onFieldChange: (field: string, value: unknown) => void) => React.ReactNode;
|
|
56
|
+
/** Called after successful approval */
|
|
57
|
+
onApproved?: () => void;
|
|
58
|
+
/** Called after rejection */
|
|
59
|
+
onRejected?: () => void;
|
|
60
|
+
/** Called on cancel */
|
|
61
|
+
onCancel?: () => void;
|
|
62
|
+
/** Additional variables to include when completing task */
|
|
63
|
+
additionalVariables?: Record<string, unknown>;
|
|
64
|
+
/** Additional class name */
|
|
65
|
+
className?: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Approve Task Page - displays task details and form for approval
|
|
69
|
+
*/
|
|
70
|
+
declare function ApproveTaskPage({ taskId, bpmClient, renderForm, onApproved, onRejected, onCancel, additionalVariables, className, }: ApproveTaskPageProps): react_jsx_runtime.JSX.Element;
|
|
71
|
+
|
|
72
|
+
export { ApproveTaskPage, type ApproveTaskPageProps, MyHistoryTasksPage, type MyHistoryTasksPageProps, MyTasksPage, type MyTasksPageProps };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useState,useCallback,useEffect}from'react';import {useTranslation}from'react-i18next';import {jsxs,jsx}from'react/jsx-runtime';function j({bpmClient:n,currentUser:p,onApprove:f,renderTaskName:k,renderActions:L,onRefresh:P,className:r=""}){let{t:s}=useTranslation("bpm"),[l,g]=useState([]),[T,y]=useState(false),[v,b]=useState(null),h=useCallback(async()=>{y(true),b(null);try{let{data:e,error:i}=await n.getTasks({assignee:p});i?b(i.message):g(e||[]);}catch(e){b(e instanceof Error?e.message:"Failed to fetch tasks");}finally{y(false);}},[n,p]);useEffect(()=>{h();},[h]);let R=()=>{h(),P?.();},C=e=>{f?.(e);},t=e=>e?new Date(e).toLocaleString():"-",m=e=>jsx("button",{type:"button",onClick:()=>C(e),className:"bpm-btn bpm-btn-outline",children:s("taskList.approve","Approve")});return jsxs("div",{className:`bpm-tasks-page ${r}`,children:[jsxs("div",{className:"bpm-tasks-header",children:[jsx("h1",{className:"bpm-tasks-title",children:s("taskList.myTasks","My Tasks")}),jsx("button",{type:"button",onClick:R,disabled:T,className:"bpm-btn bpm-btn-outline",children:T?s("taskList.loading","Loading..."):s("taskList.refresh","Refresh")})]}),v&&jsx("div",{className:"bpm-error",children:v}),jsxs("table",{className:"bpm-table",children:[jsx("thead",{children:jsxs("tr",{children:[jsx("th",{children:s("taskList.taskName","Task Name")}),jsx("th",{children:s("taskList.processInstance","Process Instance")}),jsx("th",{children:s("taskList.createdAt","Created At")}),jsx("th",{children:s("taskList.dueDate","Due Date")}),jsx("th",{children:s("taskList.actions","Actions")})]})}),jsx("tbody",{children:l.length===0?jsx("tr",{children:jsx("td",{colSpan:5,className:"bpm-table-empty",children:T?s("taskList.loading","Loading..."):s("taskList.noTasks","No pending tasks")})}):l.map(e=>jsxs("tr",{children:[jsx("td",{children:k?k(e):e.name}),jsxs("td",{className:"bpm-mono",children:[e.processInstanceId?.slice(0,8),"..."]}),jsx("td",{children:t(e.created)}),jsx("td",{children:t(e.due)}),jsx("td",{children:L?L(e,m(e)):m(e)})]},e.id))})]})]})}function G({bpmClient:n,currentUser:p,renderTaskName:f,renderActions:k,onRefresh:L,className:P=""}){let{t:r}=useTranslation("bpm"),[s,l]=useState([]),[g,T]=useState(false),[y,v]=useState(null),b=useCallback(async()=>{T(true),v(null);try{let{data:t,error:m}=await n.getHistoryTasks({taskAssignee:p,finished:!0});m?v(m.message):l(t||[]);}catch(t){v(t instanceof Error?t.message:"Failed to fetch history");}finally{T(false);}},[n,p]);useEffect(()=>{b();},[b]);let h=()=>{b(),L?.();},R=t=>t?new Date(t).toLocaleString():"-",C=(t,m)=>{if(!t||!m)return "-";let e=new Date(m).getTime()-new Date(t).getTime(),i=Math.floor(e/6e4),N=Math.floor(i/60),D=Math.floor(N/24);return D>0?`${D}d ${N%24}h`:N>0?`${N}h ${i%60}m`:`${i}m`};return jsxs("div",{className:`bpm-history-page ${P}`,children:[jsxs("div",{className:"bpm-tasks-header",children:[jsx("h1",{className:"bpm-tasks-title",children:r("taskList.myHistory","My Completed Tasks")}),jsx("button",{type:"button",onClick:h,disabled:g,className:"bpm-btn bpm-btn-outline",children:g?r("taskList.loading","Loading..."):r("taskList.refresh","Refresh")})]}),y&&jsx("div",{className:"bpm-error",children:y}),jsxs("table",{className:"bpm-table",children:[jsx("thead",{children:jsxs("tr",{children:[jsx("th",{children:r("taskList.taskName","Task Name")}),jsx("th",{children:r("taskList.processInstance","Process Instance")}),jsx("th",{children:r("taskList.startTime","Start Time")}),jsx("th",{children:r("taskList.endTime","End Time")}),jsx("th",{children:r("taskList.duration","Duration")}),k&&jsx("th",{children:r("taskList.actions","Actions")})]})}),jsx("tbody",{children:s.length===0?jsx("tr",{children:jsx("td",{colSpan:k?6:5,className:"bpm-table-empty",children:g?r("taskList.loading","Loading..."):r("taskList.noHistory","No completed tasks")})}):s.map(t=>jsxs("tr",{children:[jsx("td",{children:f?f(t):t.name}),jsxs("td",{className:"bpm-mono",children:[t.processInstanceId?.slice(0,8),"..."]}),jsx("td",{children:R(t.startTime)}),jsx("td",{children:R(t.endTime)}),jsx("td",{children:C(t.startTime,t.endTime)}),k&&jsx("td",{children:k(t)})]},t.id))})]})]})}function U({taskId:n,bpmClient:p,renderForm:f,onApproved:k,onRejected:L,onCancel:P,additionalVariables:r={},className:s=""}){let{t:l}=useTranslation("bpm"),[g,T]=useState(null),[y,v]=useState({}),[b,h]=useState({}),[R,C]=useState(true),[t,m]=useState(false),[e,i]=useState(null),N=useCallback(async()=>{C(true),i(null);try{let[d,u]=await Promise.all([p.getTask(n),p.getTaskFormVariables(n)]);if(d.error){i(d.error.message);return}if(u.error){i(u.error.message);return}T(d.data),v(u.data||{});}catch(d){i(d instanceof Error?d.message:"Failed to load task");}finally{C(false);}},[p,n]);useEffect(()=>{n&&N();},[n,N]);let D=(d,u)=>{h(F=>({...F,[d]:u}));},B=async d=>{m(true),i(null);try{let u={...b,...r,approvalStatus:d?"approved":"rejected"},{error:F}=await p.completeTask(n,u);if(F){i(F.message);return}d?k?.():L?.();}catch(u){i(u instanceof Error?u.message:"Failed to complete task");}finally{m(false);}};return R?jsx("div",{className:`bpm-approve-page bpm-loading ${s}`,children:l("approveTask.loading","Loading...")}):g?jsx("div",{className:`bpm-approve-page ${s}`,children:jsxs("div",{className:"bpm-approve-card",children:[jsx("div",{className:"bpm-approve-header",children:jsx("h2",{className:"bpm-approve-title",children:g.name})}),jsxs("div",{className:"bpm-approve-content",children:[e&&jsx("div",{className:"bpm-error",children:e}),jsx("div",{className:"bpm-approve-form",children:f(y,D)}),jsxs("div",{className:"bpm-approve-actions",children:[jsx("button",{type:"button",onClick:()=>B(true),disabled:t,className:"bpm-btn bpm-btn-primary",children:t?l("approveTask.submitting","Submitting..."):l("approveTask.approve","Approve")}),jsx("button",{type:"button",onClick:()=>B(false),disabled:t,className:"bpm-btn bpm-btn-danger",children:t?l("approveTask.submitting","Submitting..."):l("approveTask.reject","Reject")}),P&&jsx("button",{type:"button",onClick:P,disabled:t,className:"bpm-btn bpm-btn-outline",children:l("approveTask.cancel","Cancel")})]})]})]})}):jsx("div",{className:`bpm-approve-page ${s}`,children:jsx("div",{className:"bpm-error",children:l("approveTask.notFound","Task not found")})})}var S={en:{taskList:{myTasks:"My Tasks",myHistory:"My Completed Tasks",taskName:"Task Name",processInstance:"Process Instance",createdAt:"Created At",dueDate:"Due Date",startTime:"Start Time",endTime:"End Time",duration:"Duration",actions:"Actions",approve:"Approve",refresh:"Refresh",loading:"Loading...",noTasks:"No pending tasks",noHistory:"No completed tasks"},approveTask:{approve:"Approve",reject:"Reject",cancel:"Cancel",notFound:"Task not found",loading:"Loading...",submitting:"Submitting..."}},"zh-CN":{taskList:{myTasks:"\u6211\u7684\u5F85\u529E",myHistory:"\u6211\u7684\u5DF2\u529E",taskName:"\u4EFB\u52A1\u540D\u79F0",processInstance:"\u6D41\u7A0B\u5B9E\u4F8B",createdAt:"\u521B\u5EFA\u65F6\u95F4",dueDate:"\u622A\u6B62\u65F6\u95F4",startTime:"\u5F00\u59CB\u65F6\u95F4",endTime:"\u7ED3\u675F\u65F6\u95F4",duration:"\u8017\u65F6",actions:"\u64CD\u4F5C",approve:"\u5BA1\u6279",refresh:"\u5237\u65B0",loading:"\u52A0\u8F7D\u4E2D...",noTasks:"\u6682\u65E0\u5F85\u529E\u4EFB\u52A1",noHistory:"\u6682\u65E0\u5DF2\u529E\u4EFB\u52A1"},approveTask:{approve:"\u540C\u610F",reject:"\u62D2\u7EDD",cancel:"\u53D6\u6D88",notFound:"\u4EFB\u52A1\u4E0D\u5B58\u5728",loading:"\u52A0\u8F7D\u4E2D...",submitting:"\u63D0\u4EA4\u4E2D..."}}};function W(n){Object.entries(S).forEach(([p,f])=>{n.addResourceBundle(p,"bpm",f,true,true);});}export{U as ApproveTaskPage,G as MyHistoryTasksPage,j as MyTasksPage,W as addBpmTranslations,S as bpmTranslations};//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/pages/MyTasksPage.tsx","../src/pages/MyHistoryTasksPage.tsx","../src/pages/ApproveTaskPage.tsx","../src/i18n/index.ts"],"names":["MyTasksPage","bpmClient","currentUser","onApprove","renderTaskName","renderActions","onRefresh","className","t","useTranslation","tasks","setTasks","useState","loading","setLoading","error","setError","fetchTasks","useCallback","data","fetchError","err","useEffect","handleRefresh","handleApprove","task","formatDate","dateString","defaultActionButton","jsx","jsxs","MyHistoryTasksPage","formatDuration","start","end","diffMs","diffMins","diffHours","diffDays","ApproveTaskPage","taskId","renderForm","onApproved","onRejected","onCancel","additionalVariables","setTask","formVariables","setFormVariables","formValues","setFormValues","submitting","setSubmitting","fetchTaskData","taskRes","varsRes","handleFieldChange","field","value","prev","handleComplete","approved","variables","completeError","bpmTranslations","addBpmTranslations","i18n","lng","resources"],"mappings":"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","file":"index.js","sourcesContent":["import { useState, useEffect, useCallback } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport type { Task, BpmClient } from \"@amaster.ai/bpm-client\";\n\nexport interface MyTasksPageProps {\n /** BPM client instance */\n bpmClient: BpmClient;\n /** Current user identifier */\n currentUser: string;\n /** Called when clicking approve button */\n onApprove?: (task: Task) => void;\n /** Custom render for task name cell */\n renderTaskName?: (task: Task) => React.ReactNode;\n /** Custom render for actions cell */\n renderActions?: (task: Task, defaultAction: React.ReactNode) => React.ReactNode;\n /** Called when task list is refreshed */\n onRefresh?: () => void;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * My Tasks Page - displays current user's pending tasks\n *\n * This is a shared component that can be used across different applications.\n * Each application sees the same UI but fetches different data based on the currentUser.\n */\nexport function MyTasksPage({\n bpmClient,\n currentUser,\n onApprove,\n renderTaskName,\n renderActions,\n onRefresh,\n className = \"\",\n}: MyTasksPageProps) {\n const { t } = useTranslation(\"bpm\");\n const [tasks, setTasks] = useState<Task[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchTasks = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const { data, error: fetchError } = await bpmClient.getTasks({\n assignee: currentUser,\n });\n if (fetchError) {\n setError(fetchError.message);\n } else {\n setTasks(data || []);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to fetch tasks\");\n } finally {\n setLoading(false);\n }\n }, [bpmClient, currentUser]);\n\n useEffect(() => {\n fetchTasks();\n }, [fetchTasks]);\n\n const handleRefresh = () => {\n fetchTasks();\n onRefresh?.();\n };\n\n const handleApprove = (task: Task) => {\n onApprove?.(task);\n };\n\n const formatDate = (dateString: string | null | undefined) => {\n if (!dateString) return \"-\";\n return new Date(dateString).toLocaleString();\n };\n\n const defaultActionButton = (task: Task) => (\n <button type=\"button\" onClick={() => handleApprove(task)} className=\"bpm-btn bpm-btn-outline\">\n {t(\"taskList.approve\", \"Approve\")}\n </button>\n );\n\n return (\n <div className={`bpm-tasks-page ${className}`}>\n <div className=\"bpm-tasks-header\">\n <h1 className=\"bpm-tasks-title\">{t(\"taskList.myTasks\", \"My Tasks\")}</h1>\n <button\n type=\"button\"\n onClick={handleRefresh}\n disabled={loading}\n className=\"bpm-btn bpm-btn-outline\"\n >\n {loading ? t(\"taskList.loading\", \"Loading...\") : t(\"taskList.refresh\", \"Refresh\")}\n </button>\n </div>\n\n {error && <div className=\"bpm-error\">{error}</div>}\n\n <table className=\"bpm-table\">\n <thead>\n <tr>\n <th>{t(\"taskList.taskName\", \"Task Name\")}</th>\n <th>{t(\"taskList.processInstance\", \"Process Instance\")}</th>\n <th>{t(\"taskList.createdAt\", \"Created At\")}</th>\n <th>{t(\"taskList.dueDate\", \"Due Date\")}</th>\n <th>{t(\"taskList.actions\", \"Actions\")}</th>\n </tr>\n </thead>\n <tbody>\n {tasks.length === 0 ? (\n <tr>\n <td colSpan={5} className=\"bpm-table-empty\">\n {loading\n ? t(\"taskList.loading\", \"Loading...\")\n : t(\"taskList.noTasks\", \"No pending tasks\")}\n </td>\n </tr>\n ) : (\n tasks.map((task) => (\n <tr key={task.id}>\n <td>{renderTaskName ? renderTaskName(task) : task.name}</td>\n <td className=\"bpm-mono\">{task.processInstanceId?.slice(0, 8)}...</td>\n <td>{formatDate(task.created)}</td>\n <td>{formatDate(task.due)}</td>\n <td>\n {renderActions\n ? renderActions(task, defaultActionButton(task))\n : defaultActionButton(task)}\n </td>\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n );\n}\n\nexport type { Task };\n","import { useState, useEffect, useCallback } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport type { HistoryTask, BpmClient } from \"@amaster.ai/bpm-client\";\n\nexport interface MyHistoryTasksPageProps {\n /** BPM client instance */\n bpmClient: BpmClient;\n /** Current user identifier */\n currentUser: string;\n /** Custom render for task name cell */\n renderTaskName?: (task: HistoryTask) => React.ReactNode;\n /** Custom render for actions cell */\n renderActions?: (task: HistoryTask) => React.ReactNode;\n /** Called when task list is refreshed */\n onRefresh?: () => void;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * My History Tasks Page - displays current user's completed tasks\n */\nexport function MyHistoryTasksPage({\n bpmClient,\n currentUser,\n renderTaskName,\n renderActions,\n onRefresh,\n className = \"\",\n}: MyHistoryTasksPageProps) {\n const { t } = useTranslation(\"bpm\");\n const [tasks, setTasks] = useState<HistoryTask[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchTasks = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const { data, error: fetchError } = await bpmClient.getHistoryTasks({\n taskAssignee: currentUser,\n finished: true,\n });\n if (fetchError) {\n setError(fetchError.message);\n } else {\n setTasks(data || []);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to fetch history\");\n } finally {\n setLoading(false);\n }\n }, [bpmClient, currentUser]);\n\n useEffect(() => {\n fetchTasks();\n }, [fetchTasks]);\n\n const handleRefresh = () => {\n fetchTasks();\n onRefresh?.();\n };\n\n const formatDate = (dateString: string | null | undefined) => {\n if (!dateString) return \"-\";\n return new Date(dateString).toLocaleString();\n };\n\n const formatDuration = (start: string | null | undefined, end: string | null | undefined) => {\n if (!start || !end) return \"-\";\n const diffMs = new Date(end).getTime() - new Date(start).getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMins / 60);\n const diffDays = Math.floor(diffHours / 24);\n\n if (diffDays > 0) return `${diffDays}d ${diffHours % 24}h`;\n if (diffHours > 0) return `${diffHours}h ${diffMins % 60}m`;\n return `${diffMins}m`;\n };\n\n return (\n <div className={`bpm-history-page ${className}`}>\n <div className=\"bpm-tasks-header\">\n <h1 className=\"bpm-tasks-title\">{t(\"taskList.myHistory\", \"My Completed Tasks\")}</h1>\n <button\n type=\"button\"\n onClick={handleRefresh}\n disabled={loading}\n className=\"bpm-btn bpm-btn-outline\"\n >\n {loading ? t(\"taskList.loading\", \"Loading...\") : t(\"taskList.refresh\", \"Refresh\")}\n </button>\n </div>\n\n {error && <div className=\"bpm-error\">{error}</div>}\n\n <table className=\"bpm-table\">\n <thead>\n <tr>\n <th>{t(\"taskList.taskName\", \"Task Name\")}</th>\n <th>{t(\"taskList.processInstance\", \"Process Instance\")}</th>\n <th>{t(\"taskList.startTime\", \"Start Time\")}</th>\n <th>{t(\"taskList.endTime\", \"End Time\")}</th>\n <th>{t(\"taskList.duration\", \"Duration\")}</th>\n {renderActions && <th>{t(\"taskList.actions\", \"Actions\")}</th>}\n </tr>\n </thead>\n <tbody>\n {tasks.length === 0 ? (\n <tr>\n <td colSpan={renderActions ? 6 : 5} className=\"bpm-table-empty\">\n {loading\n ? t(\"taskList.loading\", \"Loading...\")\n : t(\"taskList.noHistory\", \"No completed tasks\")}\n </td>\n </tr>\n ) : (\n tasks.map((task) => (\n <tr key={task.id}>\n <td>{renderTaskName ? renderTaskName(task) : task.name}</td>\n <td className=\"bpm-mono\">{task.processInstanceId?.slice(0, 8)}...</td>\n <td>{formatDate(task.startTime)}</td>\n <td>{formatDate(task.endTime)}</td>\n <td>{formatDuration(task.startTime, task.endTime)}</td>\n {renderActions && <td>{renderActions(task)}</td>}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n );\n}\n\nexport type { HistoryTask };\n","import { useState, useEffect, useCallback } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport type { BpmClient, TaskFormVariables, Task } from \"@amaster.ai/bpm-client\";\n\nexport interface ApproveTaskPageProps {\n /** Task ID to approve */\n taskId: string;\n /** BPM client instance */\n bpmClient: BpmClient;\n /** Render form fields based on form variables */\n renderForm: (\n formVariables: TaskFormVariables,\n onFieldChange: (field: string, value: unknown) => void\n ) => React.ReactNode;\n /** Called after successful approval */\n onApproved?: () => void;\n /** Called after rejection */\n onRejected?: () => void;\n /** Called on cancel */\n onCancel?: () => void;\n /** Additional variables to include when completing task */\n additionalVariables?: Record<string, unknown>;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * Approve Task Page - displays task details and form for approval\n */\nexport function ApproveTaskPage({\n taskId,\n bpmClient,\n renderForm,\n onApproved,\n onRejected,\n onCancel,\n additionalVariables = {},\n className = \"\",\n}: ApproveTaskPageProps) {\n const { t } = useTranslation(\"bpm\");\n const [task, setTask] = useState<Task | null>(null);\n const [formVariables, setFormVariables] = useState<TaskFormVariables>({});\n const [formValues, setFormValues] = useState<Record<string, unknown>>({});\n const [loading, setLoading] = useState(true);\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchTaskData = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const [taskRes, varsRes] = await Promise.all([\n bpmClient.getTask(taskId),\n bpmClient.getTaskFormVariables(taskId),\n ]);\n\n if (taskRes.error) {\n setError(taskRes.error.message);\n return;\n }\n if (varsRes.error) {\n setError(varsRes.error.message);\n return;\n }\n\n setTask(taskRes.data);\n setFormVariables(varsRes.data || {});\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to load task\");\n } finally {\n setLoading(false);\n }\n }, [bpmClient, taskId]);\n\n useEffect(() => {\n if (taskId) {\n fetchTaskData();\n }\n }, [taskId, fetchTaskData]);\n\n const handleFieldChange = (field: string, value: unknown) => {\n setFormValues((prev) => ({ ...prev, [field]: value }));\n };\n\n const handleComplete = async (approved: boolean) => {\n setSubmitting(true);\n setError(null);\n try {\n const variables = {\n ...formValues,\n ...additionalVariables,\n approvalStatus: approved ? \"approved\" : \"rejected\",\n };\n\n const { error: completeError } = await bpmClient.completeTask(taskId, variables);\n\n if (completeError) {\n setError(completeError.message);\n return;\n }\n\n if (approved) {\n onApproved?.();\n } else {\n onRejected?.();\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to complete task\");\n } finally {\n setSubmitting(false);\n }\n };\n\n if (loading) {\n return (\n <div className={`bpm-approve-page bpm-loading ${className}`}>\n {t(\"approveTask.loading\", \"Loading...\")}\n </div>\n );\n }\n\n if (!task) {\n return (\n <div className={`bpm-approve-page ${className}`}>\n <div className=\"bpm-error\">{t(\"approveTask.notFound\", \"Task not found\")}</div>\n </div>\n );\n }\n\n return (\n <div className={`bpm-approve-page ${className}`}>\n <div className=\"bpm-approve-card\">\n <div className=\"bpm-approve-header\">\n <h2 className=\"bpm-approve-title\">{task.name}</h2>\n </div>\n <div className=\"bpm-approve-content\">\n {error && <div className=\"bpm-error\">{error}</div>}\n\n <div className=\"bpm-approve-form\">{renderForm(formVariables, handleFieldChange)}</div>\n\n <div className=\"bpm-approve-actions\">\n <button\n type=\"button\"\n onClick={() => handleComplete(true)}\n disabled={submitting}\n className=\"bpm-btn bpm-btn-primary\"\n >\n {submitting\n ? t(\"approveTask.submitting\", \"Submitting...\")\n : t(\"approveTask.approve\", \"Approve\")}\n </button>\n <button\n type=\"button\"\n onClick={() => handleComplete(false)}\n disabled={submitting}\n className=\"bpm-btn bpm-btn-danger\"\n >\n {submitting\n ? t(\"approveTask.submitting\", \"Submitting...\")\n : t(\"approveTask.reject\", \"Reject\")}\n </button>\n {onCancel && (\n <button\n type=\"button\"\n onClick={onCancel}\n disabled={submitting}\n className=\"bpm-btn bpm-btn-outline\"\n >\n {t(\"approveTask.cancel\", \"Cancel\")}\n </button>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport type { TaskFormVariables };\n","export const bpmTranslations = {\n en: {\n taskList: {\n myTasks: \"My Tasks\",\n myHistory: \"My Completed Tasks\",\n taskName: \"Task Name\",\n processInstance: \"Process Instance\",\n createdAt: \"Created At\",\n dueDate: \"Due Date\",\n startTime: \"Start Time\",\n endTime: \"End Time\",\n duration: \"Duration\",\n actions: \"Actions\",\n approve: \"Approve\",\n refresh: \"Refresh\",\n loading: \"Loading...\",\n noTasks: \"No pending tasks\",\n noHistory: \"No completed tasks\",\n },\n approveTask: {\n approve: \"Approve\",\n reject: \"Reject\",\n cancel: \"Cancel\",\n notFound: \"Task not found\",\n loading: \"Loading...\",\n submitting: \"Submitting...\",\n },\n },\n \"zh-CN\": {\n taskList: {\n myTasks: \"我的待办\",\n myHistory: \"我的已办\",\n taskName: \"任务名称\",\n processInstance: \"流程实例\",\n createdAt: \"创建时间\",\n dueDate: \"截止时间\",\n startTime: \"开始时间\",\n endTime: \"结束时间\",\n duration: \"耗时\",\n actions: \"操作\",\n approve: \"审批\",\n refresh: \"刷新\",\n loading: \"加载中...\",\n noTasks: \"暂无待办任务\",\n noHistory: \"暂无已办任务\",\n },\n approveTask: {\n approve: \"同意\",\n reject: \"拒绝\",\n cancel: \"取消\",\n notFound: \"任务不存在\",\n loading: \"加载中...\",\n submitting: \"提交中...\",\n },\n },\n};\n\n/**\n * Add BPM translations to i18next instance\n */\nexport function addBpmTranslations(i18n: {\n addResourceBundle: (\n lng: string,\n ns: string,\n resources: Record<string, unknown>,\n deep?: boolean,\n overwrite?: boolean\n ) => void;\n}) {\n Object.entries(bpmTranslations).forEach(([lng, resources]) => {\n i18n.addResourceBundle(lng, \"bpm\", resources, true, true);\n });\n}\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@amaster.ai/bpm-ui",
|
|
3
|
+
"version": "1.0.0-beta.1",
|
|
4
|
+
"description": "BPM task management UI components - My Tasks, My History, Approve Task",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"require": "./dist/index.cjs"
|
|
14
|
+
},
|
|
15
|
+
"./i18n": {
|
|
16
|
+
"types": "./dist/i18n/index.d.ts",
|
|
17
|
+
"import": "./dist/i18n/index.js",
|
|
18
|
+
"require": "./dist/i18n/index.cjs"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist",
|
|
23
|
+
"README.md"
|
|
24
|
+
],
|
|
25
|
+
"keywords": [
|
|
26
|
+
"bpm",
|
|
27
|
+
"camunda",
|
|
28
|
+
"workflow",
|
|
29
|
+
"tasks",
|
|
30
|
+
"approval",
|
|
31
|
+
"react",
|
|
32
|
+
"ui",
|
|
33
|
+
"typescript"
|
|
34
|
+
],
|
|
35
|
+
"author": "Amaster Team",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public",
|
|
39
|
+
"registry": "https://registry.npmjs.org/"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"@amaster.ai/bpm-client": "1.0.0-beta.11"
|
|
43
|
+
},
|
|
44
|
+
"peerDependencies": {
|
|
45
|
+
"react": "^18.0.0",
|
|
46
|
+
"react-dom": "^18.0.0",
|
|
47
|
+
"i18next": "^23.0.0",
|
|
48
|
+
"react-i18next": "^13.0.0 || ^14.0.0 || ^15.0.0"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"react": "^18.3.1",
|
|
52
|
+
"react-dom": "^18.3.1",
|
|
53
|
+
"i18next": "^23.16.8",
|
|
54
|
+
"react-i18next": "^15.4.1",
|
|
55
|
+
"@types/react": "^18.3.17",
|
|
56
|
+
"@types/react-dom": "^18.3.5",
|
|
57
|
+
"tsup": "^8.3.5",
|
|
58
|
+
"typescript": "~5.7.2"
|
|
59
|
+
},
|
|
60
|
+
"scripts": {
|
|
61
|
+
"build": "tsup",
|
|
62
|
+
"dev": "tsup --watch",
|
|
63
|
+
"clean": "rm -rf dist *.tsbuildinfo",
|
|
64
|
+
"type-check": "tsc --noEmit"
|
|
65
|
+
}
|
|
66
|
+
}
|