@webiny/background-tasks 0.0.0-unstable.7be00a75a9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/admin/BackgroundTaskRoutes.d.ts +2 -0
  4. package/admin/BackgroundTaskRoutes.js +50 -0
  5. package/admin/BackgroundTaskRoutes.js.map +1 -0
  6. package/admin/BackgroundTasks.d.ts +2 -0
  7. package/admin/BackgroundTasks.js +46 -0
  8. package/admin/BackgroundTasks.js.map +1 -0
  9. package/admin/features/abortTask/AbortTaskGateway.d.ts +12 -0
  10. package/admin/features/abortTask/AbortTaskGateway.js +62 -0
  11. package/admin/features/abortTask/AbortTaskGateway.js.map +1 -0
  12. package/admin/features/abortTask/AbortTaskUseCase.d.ts +11 -0
  13. package/admin/features/abortTask/AbortTaskUseCase.js +18 -0
  14. package/admin/features/abortTask/AbortTaskUseCase.js.map +1 -0
  15. package/admin/features/abortTask/abstractions.d.ts +19 -0
  16. package/admin/features/abortTask/abstractions.js +6 -0
  17. package/admin/features/abortTask/abstractions.js.map +1 -0
  18. package/admin/features/abortTask/feature.d.ts +3 -0
  19. package/admin/features/abortTask/feature.js +19 -0
  20. package/admin/features/abortTask/feature.js.map +1 -0
  21. package/admin/features/abortTask/index.d.ts +2 -0
  22. package/admin/features/abortTask/index.js +2 -0
  23. package/admin/features/deleteTask/DeleteTaskGateway.d.ts +11 -0
  24. package/admin/features/deleteTask/DeleteTaskGateway.js +41 -0
  25. package/admin/features/deleteTask/DeleteTaskGateway.js.map +1 -0
  26. package/admin/features/deleteTask/DeleteTaskUseCase.d.ts +10 -0
  27. package/admin/features/deleteTask/DeleteTaskUseCase.js +18 -0
  28. package/admin/features/deleteTask/DeleteTaskUseCase.js.map +1 -0
  29. package/admin/features/deleteTask/abstractions.d.ts +14 -0
  30. package/admin/features/deleteTask/abstractions.js +6 -0
  31. package/admin/features/deleteTask/abstractions.js.map +1 -0
  32. package/admin/features/deleteTask/feature.d.ts +3 -0
  33. package/admin/features/deleteTask/feature.js +19 -0
  34. package/admin/features/deleteTask/feature.js.map +1 -0
  35. package/admin/features/deleteTask/index.d.ts +2 -0
  36. package/admin/features/deleteTask/index.js +2 -0
  37. package/admin/features/getTask/GetTaskGateway.d.ts +12 -0
  38. package/admin/features/getTask/GetTaskGateway.js +61 -0
  39. package/admin/features/getTask/GetTaskGateway.js.map +1 -0
  40. package/admin/features/getTask/GetTaskUseCase.d.ts +11 -0
  41. package/admin/features/getTask/GetTaskUseCase.js +18 -0
  42. package/admin/features/getTask/GetTaskUseCase.js.map +1 -0
  43. package/admin/features/getTask/abstractions.d.ts +15 -0
  44. package/admin/features/getTask/abstractions.js +6 -0
  45. package/admin/features/getTask/abstractions.js.map +1 -0
  46. package/admin/features/getTask/feature.d.ts +3 -0
  47. package/admin/features/getTask/feature.js +19 -0
  48. package/admin/features/getTask/feature.js.map +1 -0
  49. package/admin/features/getTask/index.d.ts +2 -0
  50. package/admin/features/getTask/index.js +2 -0
  51. package/admin/features/listDefinitions/ListDefinitionsGateway.d.ts +12 -0
  52. package/admin/features/listDefinitions/ListDefinitionsGateway.js +42 -0
  53. package/admin/features/listDefinitions/ListDefinitionsGateway.js.map +1 -0
  54. package/admin/features/listDefinitions/ListDefinitionsUseCase.d.ts +11 -0
  55. package/admin/features/listDefinitions/ListDefinitionsUseCase.js +18 -0
  56. package/admin/features/listDefinitions/ListDefinitionsUseCase.js.map +1 -0
  57. package/admin/features/listDefinitions/abstractions.d.ts +15 -0
  58. package/admin/features/listDefinitions/abstractions.js +6 -0
  59. package/admin/features/listDefinitions/abstractions.js.map +1 -0
  60. package/admin/features/listDefinitions/feature.d.ts +3 -0
  61. package/admin/features/listDefinitions/feature.js +19 -0
  62. package/admin/features/listDefinitions/feature.js.map +1 -0
  63. package/admin/features/listDefinitions/index.d.ts +2 -0
  64. package/admin/features/listDefinitions/index.js +2 -0
  65. package/admin/features/listLogs/ListLogsGateway.d.ts +11 -0
  66. package/admin/features/listLogs/ListLogsGateway.js +73 -0
  67. package/admin/features/listLogs/ListLogsGateway.js.map +1 -0
  68. package/admin/features/listLogs/ListLogsUseCase.d.ts +10 -0
  69. package/admin/features/listLogs/ListLogsUseCase.js +18 -0
  70. package/admin/features/listLogs/ListLogsUseCase.js.map +1 -0
  71. package/admin/features/listLogs/abstractions.d.ts +30 -0
  72. package/admin/features/listLogs/abstractions.js +6 -0
  73. package/admin/features/listLogs/abstractions.js.map +1 -0
  74. package/admin/features/listLogs/feature.d.ts +3 -0
  75. package/admin/features/listLogs/feature.js +19 -0
  76. package/admin/features/listLogs/feature.js.map +1 -0
  77. package/admin/features/listLogs/index.d.ts +2 -0
  78. package/admin/features/listLogs/index.js +2 -0
  79. package/admin/features/listTasks/ListTasksGateway.d.ts +11 -0
  80. package/admin/features/listTasks/ListTasksGateway.js +79 -0
  81. package/admin/features/listTasks/ListTasksGateway.js.map +1 -0
  82. package/admin/features/listTasks/ListTasksUseCase.d.ts +10 -0
  83. package/admin/features/listTasks/ListTasksUseCase.js +18 -0
  84. package/admin/features/listTasks/ListTasksUseCase.js.map +1 -0
  85. package/admin/features/listTasks/abstractions.d.ts +31 -0
  86. package/admin/features/listTasks/abstractions.js +6 -0
  87. package/admin/features/listTasks/abstractions.js.map +1 -0
  88. package/admin/features/listTasks/feature.d.ts +3 -0
  89. package/admin/features/listTasks/feature.js +19 -0
  90. package/admin/features/listTasks/feature.js.map +1 -0
  91. package/admin/features/listTasks/index.d.ts +2 -0
  92. package/admin/features/listTasks/index.js +2 -0
  93. package/admin/features/permissions/abstractions.d.ts +17 -0
  94. package/admin/features/permissions/abstractions.js +6 -0
  95. package/admin/features/permissions/abstractions.js.map +1 -0
  96. package/admin/features/permissions/feature.d.ts +14 -0
  97. package/admin/features/permissions/feature.js +7 -0
  98. package/admin/features/permissions/feature.js.map +1 -0
  99. package/admin/features/permissions/index.d.ts +2 -0
  100. package/admin/features/permissions/index.js +2 -0
  101. package/admin/index.d.ts +2 -0
  102. package/admin/index.js +2 -0
  103. package/admin/permissions.d.ts +12 -0
  104. package/admin/permissions.js +22 -0
  105. package/admin/permissions.js.map +1 -0
  106. package/admin/presentation/TaskDefinitions/TaskDefinitionsPresenter.d.ts +14 -0
  107. package/admin/presentation/TaskDefinitions/TaskDefinitionsPresenter.js +41 -0
  108. package/admin/presentation/TaskDefinitions/TaskDefinitionsPresenter.js.map +1 -0
  109. package/admin/presentation/TaskDefinitions/abstractions.d.ts +14 -0
  110. package/admin/presentation/TaskDefinitions/abstractions.js +5 -0
  111. package/admin/presentation/TaskDefinitions/abstractions.js.map +1 -0
  112. package/admin/presentation/TaskDefinitions/components/TaskDefinitionsView.d.ts +2 -0
  113. package/admin/presentation/TaskDefinitions/components/TaskDefinitionsView.js +75 -0
  114. package/admin/presentation/TaskDefinitions/components/TaskDefinitionsView.js.map +1 -0
  115. package/admin/presentation/TaskDefinitions/feature.d.ts +3 -0
  116. package/admin/presentation/TaskDefinitions/feature.js +17 -0
  117. package/admin/presentation/TaskDefinitions/feature.js.map +1 -0
  118. package/admin/presentation/TaskDefinitions/index.d.ts +2 -0
  119. package/admin/presentation/TaskDefinitions/index.js +2 -0
  120. package/admin/presentation/TaskDetail/TaskDetailPresenter.d.ts +24 -0
  121. package/admin/presentation/TaskDetail/TaskDetailPresenter.js +87 -0
  122. package/admin/presentation/TaskDetail/TaskDetailPresenter.js.map +1 -0
  123. package/admin/presentation/TaskDetail/abstractions.d.ts +24 -0
  124. package/admin/presentation/TaskDetail/abstractions.js +5 -0
  125. package/admin/presentation/TaskDetail/abstractions.js.map +1 -0
  126. package/admin/presentation/TaskDetail/components/TaskDetailDrawer.d.ts +11 -0
  127. package/admin/presentation/TaskDetail/components/TaskDetailDrawer.js +264 -0
  128. package/admin/presentation/TaskDetail/components/TaskDetailDrawer.js.map +1 -0
  129. package/admin/presentation/TaskDetail/feature.d.ts +3 -0
  130. package/admin/presentation/TaskDetail/feature.js +17 -0
  131. package/admin/presentation/TaskDetail/feature.js.map +1 -0
  132. package/admin/presentation/TaskDetail/index.d.ts +2 -0
  133. package/admin/presentation/TaskDetail/index.js +2 -0
  134. package/admin/presentation/TaskExecutions/TaskExecutionsDataSource.d.ts +15 -0
  135. package/admin/presentation/TaskExecutions/TaskExecutionsDataSource.js +91 -0
  136. package/admin/presentation/TaskExecutions/TaskExecutionsDataSource.js.map +1 -0
  137. package/admin/presentation/TaskExecutions/TaskExecutionsPresenter.d.ts +52 -0
  138. package/admin/presentation/TaskExecutions/TaskExecutionsPresenter.js +107 -0
  139. package/admin/presentation/TaskExecutions/TaskExecutionsPresenter.js.map +1 -0
  140. package/admin/presentation/TaskExecutions/abstractions.d.ts +28 -0
  141. package/admin/presentation/TaskExecutions/abstractions.js +5 -0
  142. package/admin/presentation/TaskExecutions/abstractions.js.map +1 -0
  143. package/admin/presentation/TaskExecutions/components/TaskExecutionsView.d.ts +2 -0
  144. package/admin/presentation/TaskExecutions/components/TaskExecutionsView.js +303 -0
  145. package/admin/presentation/TaskExecutions/components/TaskExecutionsView.js.map +1 -0
  146. package/admin/presentation/TaskExecutions/feature.d.ts +3 -0
  147. package/admin/presentation/TaskExecutions/feature.js +17 -0
  148. package/admin/presentation/TaskExecutions/feature.js.map +1 -0
  149. package/admin/presentation/TaskExecutions/index.d.ts +2 -0
  150. package/admin/presentation/TaskExecutions/index.js +2 -0
  151. package/admin/presentation/security/HasPermission.d.ts +12 -0
  152. package/admin/presentation/security/HasPermission.js +6 -0
  153. package/admin/presentation/security/HasPermission.js.map +1 -0
  154. package/admin/presentation/security/usePermissions.d.ts +12 -0
  155. package/admin/presentation/security/usePermissions.js +6 -0
  156. package/admin/presentation/security/usePermissions.js.map +1 -0
  157. package/admin/routes.d.ts +5 -0
  158. package/admin/routes.js +14 -0
  159. package/admin/routes.js.map +1 -0
  160. package/admin/shared/types.d.ts +15 -0
  161. package/admin/shared/types.js +0 -0
  162. package/api/index.d.ts +0 -0
  163. package/api/index.js +0 -0
  164. package/index.d.ts +1 -0
  165. package/index.js +1 -0
  166. package/package.json +45 -0
@@ -0,0 +1,264 @@
1
+ import react, { useEffect, useMemo, useState } from "react";
2
+ import { observer } from "mobx-react-lite";
3
+ import { DiContainerProvider, useContainer, useFeature } from "@webiny/app";
4
+ import { Button, CodeEditor, Drawer, Grid, Heading, Separator, Tag, Text, TimeAgo } from "@webiny/admin-ui";
5
+ import { useConfirmationDialog } from "@webiny/app-admin/hooks/index.js";
6
+ import { ReactComponent } from "@webiny/icons/stop_circle.svg";
7
+ import { ReactComponent as delete_svg_ReactComponent } from "@webiny/icons/delete.svg";
8
+ import { ReactComponent as expand_more_svg_ReactComponent } from "@webiny/icons/expand_more.svg";
9
+ import { ReactComponent as expand_less_svg_ReactComponent } from "@webiny/icons/expand_less.svg";
10
+ import { TaskDetailPresenterFeature } from "../feature.js";
11
+ import { GetTaskFeature } from "../../../features/getTask/feature.js";
12
+ import { ListLogsFeature } from "../../../features/listLogs/feature.js";
13
+ const STATUS_TAG_VARIANT = {
14
+ pending: "neutral-light",
15
+ running: "accent",
16
+ success: "success",
17
+ failed: "destructive",
18
+ aborted: "warning"
19
+ };
20
+ const formatJson = (value)=>{
21
+ if (null == value) return "";
22
+ if ("string" == typeof value) try {
23
+ return JSON.stringify(JSON.parse(value), null, 2);
24
+ } catch {
25
+ return value;
26
+ }
27
+ return JSON.stringify(value, null, 2);
28
+ };
29
+ const ExpandButton = ({ show, expanded, onClick })=>{
30
+ if (!show) return null;
31
+ return /*#__PURE__*/ react.createElement(Button, {
32
+ variant: "tertiary",
33
+ size: "sm",
34
+ icon: expanded ? /*#__PURE__*/ react.createElement(expand_less_svg_ReactComponent, null) : /*#__PURE__*/ react.createElement(expand_more_svg_ReactComponent, null),
35
+ onClick: onClick
36
+ });
37
+ };
38
+ const ExpandedPayload = ({ show, label, value, variant = "default" })=>{
39
+ if (!show) return null;
40
+ const textClass = "destructive" === variant ? " text-destructive" : "";
41
+ return /*#__PURE__*/ react.createElement("div", {
42
+ className: "mt-xs"
43
+ }, /*#__PURE__*/ react.createElement(Text, {
44
+ size: "sm",
45
+ className: "text-neutral-strong mb-xs"
46
+ }, label), /*#__PURE__*/ react.createElement("pre", {
47
+ className: `bg-neutral-light rounded-sm p-sm text-xs overflow-auto max-h-[200px]${textClass}`
48
+ }, formatJson(value)));
49
+ };
50
+ const JsonSection = ({ show, title, value })=>{
51
+ if (!show) return null;
52
+ return /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(Separator, null), /*#__PURE__*/ react.createElement("div", null, /*#__PURE__*/ react.createElement(Heading, {
53
+ level: 6,
54
+ className: "mb-sm"
55
+ }, title), /*#__PURE__*/ react.createElement(CodeEditor, {
56
+ value: value,
57
+ language: "json",
58
+ disabled: true
59
+ })));
60
+ };
61
+ const LoadMoreLogsButton = ({ show, loading, onClick })=>{
62
+ if (!show) return null;
63
+ return /*#__PURE__*/ react.createElement("div", {
64
+ className: "mt-sm"
65
+ }, /*#__PURE__*/ react.createElement(Button, {
66
+ variant: "tertiary",
67
+ size: "sm",
68
+ onClick: onClick,
69
+ disabled: loading
70
+ }, loading ? "Loading..." : "Load more logs"));
71
+ };
72
+ const DrawerActions = ({ isRunning, isTerminal, onAbort, onDelete })=>{
73
+ if (!isRunning && !isTerminal) return null;
74
+ return /*#__PURE__*/ react.createElement("div", {
75
+ className: "flex gap-sm"
76
+ }, isRunning ? /*#__PURE__*/ react.createElement(Button, {
77
+ variant: "secondary",
78
+ size: "sm",
79
+ icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
80
+ onClick: onAbort
81
+ }, "Abort") : null, isTerminal ? /*#__PURE__*/ react.createElement(Button, {
82
+ variant: "secondary",
83
+ size: "sm",
84
+ icon: /*#__PURE__*/ react.createElement(delete_svg_ReactComponent, null),
85
+ onClick: onDelete
86
+ }, "Delete") : null);
87
+ };
88
+ const LogItemView = ({ item })=>{
89
+ const [expanded, setExpanded] = useState(false);
90
+ const hasData = null !== item.data && void 0 !== item.data;
91
+ const hasError = null !== item.error && void 0 !== item.error;
92
+ const expandable = hasData || hasError;
93
+ return /*#__PURE__*/ react.createElement("div", {
94
+ className: "border-b-sm border-neutral-muted py-xs px-sm"
95
+ }, /*#__PURE__*/ react.createElement("div", {
96
+ className: "flex items-start gap-sm"
97
+ }, /*#__PURE__*/ react.createElement("div", {
98
+ className: "flex-shrink-0 pt-[2px]"
99
+ }, /*#__PURE__*/ react.createElement(Tag, {
100
+ variant: "error" === item.type ? "destructive" : "neutral-light",
101
+ content: item.type
102
+ })), /*#__PURE__*/ react.createElement("div", {
103
+ className: "flex-1 min-w-0"
104
+ }, /*#__PURE__*/ react.createElement(Text, {
105
+ size: "sm"
106
+ }, item.message)), /*#__PURE__*/ react.createElement("div", {
107
+ className: "flex items-center gap-xs flex-shrink-0"
108
+ }, /*#__PURE__*/ react.createElement(Text, {
109
+ size: "sm",
110
+ className: "text-neutral-strong"
111
+ }, /*#__PURE__*/ react.createElement(TimeAgo, {
112
+ datetime: item.createdOn
113
+ })), /*#__PURE__*/ react.createElement(ExpandButton, {
114
+ show: expandable,
115
+ expanded: expanded,
116
+ onClick: ()=>setExpanded(!expanded)
117
+ }))), /*#__PURE__*/ react.createElement(ExpandedPayload, {
118
+ show: expanded && hasData,
119
+ label: "Data",
120
+ value: item.data
121
+ }), /*#__PURE__*/ react.createElement(ExpandedPayload, {
122
+ show: expanded && hasError,
123
+ label: "Error",
124
+ value: item.error,
125
+ variant: "destructive"
126
+ }));
127
+ };
128
+ const TaskDetailDrawer_TaskDetailDrawerInner = observer(function({ task, open, onClose, onAbort, onDelete }) {
129
+ const { presenter } = useFeature(TaskDetailPresenterFeature);
130
+ useEffect(()=>{
131
+ if (open) presenter.init(task.id);
132
+ }, [
133
+ presenter,
134
+ task.id,
135
+ open
136
+ ]);
137
+ const { vm } = presenter;
138
+ const { showConfirmation: showAbortConfirmation } = useConfirmationDialog({
139
+ title: "Abort Task",
140
+ message: "Are you sure you want to abort this running task?"
141
+ });
142
+ const { showConfirmation: showDeleteConfirmation } = useConfirmationDialog({
143
+ title: "Delete Task",
144
+ message: "Are you sure you want to delete this task?"
145
+ });
146
+ const displayTask = vm.task ?? task;
147
+ const isRunning = "running" === displayTask.taskStatus;
148
+ const isTerminal = "success" === displayTask.taskStatus || "failed" === displayTask.taskStatus || "aborted" === displayTask.taskStatus;
149
+ const inputJson = formatJson(displayTask.input);
150
+ const outputJson = formatJson(displayTask.output);
151
+ return /*#__PURE__*/ react.createElement(Drawer, {
152
+ open: open,
153
+ onOpenChange: (isOpen)=>!isOpen && onClose(),
154
+ title: /*#__PURE__*/ react.createElement("div", {
155
+ className: "flex items-center gap-sm"
156
+ }, /*#__PURE__*/ react.createElement("span", null, displayTask.name || displayTask.definitionId), /*#__PURE__*/ react.createElement(Tag, {
157
+ variant: STATUS_TAG_VARIANT[displayTask.taskStatus] ?? "neutral-light",
158
+ content: displayTask.taskStatus
159
+ })),
160
+ modal: true,
161
+ width: "900px",
162
+ bodyPadding: false,
163
+ actions: /*#__PURE__*/ react.createElement(DrawerActions, {
164
+ isRunning: isRunning,
165
+ isTerminal: isTerminal,
166
+ onAbort: ()=>showAbortConfirmation(()=>onAbort(displayTask.id)),
167
+ onDelete: ()=>showDeleteConfirmation(()=>onDelete(displayTask.id))
168
+ })
169
+ }, /*#__PURE__*/ react.createElement("div", {
170
+ className: "flex flex-col gap-md p-md overflow-auto"
171
+ }, /*#__PURE__*/ react.createElement("div", null, /*#__PURE__*/ react.createElement(Heading, {
172
+ level: 6,
173
+ className: "mb-sm"
174
+ }, "General Info"), /*#__PURE__*/ react.createElement(Grid, {
175
+ gap: "comfortable"
176
+ }, /*#__PURE__*/ react.createElement(Grid.Column, {
177
+ span: 6
178
+ }, /*#__PURE__*/ react.createElement(Text, {
179
+ size: "sm",
180
+ className: "text-neutral-strong"
181
+ }, "Definition"), /*#__PURE__*/ react.createElement(Text, {
182
+ size: "sm"
183
+ }, displayTask.definitionId)), /*#__PURE__*/ react.createElement(Grid.Column, {
184
+ span: 6
185
+ }, /*#__PURE__*/ react.createElement(Text, {
186
+ size: "sm",
187
+ className: "text-neutral-strong"
188
+ }, "Created By"), /*#__PURE__*/ react.createElement(Text, {
189
+ size: "sm"
190
+ }, displayTask.createdBy?.displayName ?? "—")), /*#__PURE__*/ react.createElement(Grid.Column, {
191
+ span: 6
192
+ }, /*#__PURE__*/ react.createElement(Text, {
193
+ size: "sm",
194
+ className: "text-neutral-strong"
195
+ }, "Created On"), /*#__PURE__*/ react.createElement(Text, {
196
+ size: "sm"
197
+ }, displayTask.createdOn ? /*#__PURE__*/ react.createElement(TimeAgo, {
198
+ datetime: displayTask.createdOn
199
+ }) : "—")), /*#__PURE__*/ react.createElement(Grid.Column, {
200
+ span: 6
201
+ }, /*#__PURE__*/ react.createElement(Text, {
202
+ size: "sm",
203
+ className: "text-neutral-strong"
204
+ }, "Started On"), /*#__PURE__*/ react.createElement(Text, {
205
+ size: "sm"
206
+ }, displayTask.startedOn ? /*#__PURE__*/ react.createElement(TimeAgo, {
207
+ datetime: displayTask.startedOn
208
+ }) : "—")), /*#__PURE__*/ react.createElement(Grid.Column, {
209
+ span: 6
210
+ }, /*#__PURE__*/ react.createElement(Text, {
211
+ size: "sm",
212
+ className: "text-neutral-strong"
213
+ }, "Finished On"), /*#__PURE__*/ react.createElement(Text, {
214
+ size: "sm"
215
+ }, displayTask.finishedOn ? /*#__PURE__*/ react.createElement(TimeAgo, {
216
+ datetime: displayTask.finishedOn
217
+ }) : "—")), /*#__PURE__*/ react.createElement(Grid.Column, {
218
+ span: 6
219
+ }, /*#__PURE__*/ react.createElement(Text, {
220
+ size: "sm",
221
+ className: "text-neutral-strong"
222
+ }, "Iterations"), /*#__PURE__*/ react.createElement(Text, {
223
+ size: "sm"
224
+ }, displayTask.iterations ?? 0)))), /*#__PURE__*/ react.createElement(JsonSection, {
225
+ show: !!inputJson,
226
+ title: "Input",
227
+ value: inputJson
228
+ }), /*#__PURE__*/ react.createElement(JsonSection, {
229
+ show: !!outputJson,
230
+ title: "Output",
231
+ value: outputJson
232
+ }), /*#__PURE__*/ react.createElement(Separator, null), /*#__PURE__*/ react.createElement("div", null, /*#__PURE__*/ react.createElement(Heading, {
233
+ level: 6,
234
+ className: "mb-sm"
235
+ }, "Logs (", vm.logs.pagination.totalCount, ")"), 0 !== vm.logs.rows.length || vm.logs.pagination.loading ? /*#__PURE__*/ react.createElement("div", {
236
+ className: "border-sm border-neutral-muted rounded-sm"
237
+ }, vm.logs.rows.map((log)=>log.items.map((item, idx)=>/*#__PURE__*/ react.createElement(LogItemView, {
238
+ key: `${log.id}-${idx}`,
239
+ item: item
240
+ })))) : /*#__PURE__*/ react.createElement(Text, {
241
+ size: "sm",
242
+ className: "text-neutral-strong"
243
+ }, "No logs available."), /*#__PURE__*/ react.createElement(LoadMoreLogsButton, {
244
+ show: vm.logs.pagination.hasMore,
245
+ loading: vm.logs.pagination.loading,
246
+ onClick: ()=>presenter.loadMore()
247
+ }))));
248
+ });
249
+ const TaskDetailDrawer = (props)=>{
250
+ const container = useContainer();
251
+ const scopedContainer = useMemo(()=>{
252
+ const child = container.createChildContainer();
253
+ GetTaskFeature.register(child);
254
+ ListLogsFeature.register(child);
255
+ TaskDetailPresenterFeature.register(child);
256
+ return child;
257
+ }, []);
258
+ return /*#__PURE__*/ react.createElement(DiContainerProvider, {
259
+ container: scopedContainer
260
+ }, /*#__PURE__*/ react.createElement(TaskDetailDrawer_TaskDetailDrawerInner, props));
261
+ };
262
+ export { TaskDetailDrawer };
263
+
264
+ //# sourceMappingURL=TaskDetailDrawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/TaskDetail/components/TaskDetailDrawer.js","sources":["../../../../../src/admin/presentation/TaskDetail/components/TaskDetailDrawer.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { DiContainerProvider, useContainer, useFeature } from \"@webiny/app\";\nimport { Button, Drawer, Grid, Heading, Separator, Tag, Text, TimeAgo } from \"@webiny/admin-ui\";\nimport { CodeEditor } from \"@webiny/admin-ui\";\nimport { useConfirmationDialog } from \"@webiny/app-admin/hooks/index.js\";\nimport { ReactComponent as StopCircleIcon } from \"@webiny/icons/stop_circle.svg\";\nimport { ReactComponent as DeleteIcon } from \"@webiny/icons/delete.svg\";\nimport { ReactComponent as ExpandMoreIcon } from \"@webiny/icons/expand_more.svg\";\nimport { ReactComponent as ExpandLessIcon } from \"@webiny/icons/expand_less.svg\";\nimport { TaskDetailPresenterFeature } from \"../feature.js\";\nimport { GetTaskFeature } from \"~/admin/features/getTask/feature.js\";\nimport { ListLogsFeature } from \"~/admin/features/listLogs/feature.js\";\nimport type { Task, TaskLog, TaskLogItem } from \"~/admin/shared/types.js\";\n\nconst STATUS_TAG_VARIANT: Record<\n string,\n \"neutral-light\" | \"accent\" | \"success\" | \"destructive\" | \"warning\"\n> = {\n pending: \"neutral-light\",\n running: \"accent\",\n success: \"success\",\n failed: \"destructive\",\n aborted: \"warning\"\n};\n\nconst formatJson = (value: unknown): string => {\n if (value === null || value === undefined) {\n return \"\";\n }\n if (typeof value === \"string\") {\n try {\n return JSON.stringify(JSON.parse(value), null, 2);\n } catch {\n return value;\n }\n }\n return JSON.stringify(value, null, 2);\n};\n\ninterface ExpandButtonProps {\n show: boolean;\n expanded: boolean;\n onClick: () => void;\n}\n\nconst ExpandButton = ({ show, expanded, onClick }: ExpandButtonProps) => {\n if (!show) {\n return null;\n }\n\n return (\n <Button\n variant=\"tertiary\"\n size=\"sm\"\n icon={expanded ? <ExpandLessIcon /> : <ExpandMoreIcon />}\n onClick={onClick}\n />\n );\n};\n\ninterface ExpandedPayloadProps {\n show: boolean;\n label: string;\n value: unknown;\n variant?: \"default\" | \"destructive\";\n}\n\nconst ExpandedPayload = ({ show, label, value, variant = \"default\" }: ExpandedPayloadProps) => {\n if (!show) {\n return null;\n }\n\n const textClass = variant === \"destructive\" ? \" text-destructive\" : \"\";\n\n return (\n <div className=\"mt-xs\">\n <Text size=\"sm\" className=\"text-neutral-strong mb-xs\">\n {label}\n </Text>\n <pre\n className={`bg-neutral-light rounded-sm p-sm text-xs overflow-auto max-h-[200px]${textClass}`}\n >\n {formatJson(value)}\n </pre>\n </div>\n );\n};\n\ninterface JsonSectionProps {\n show: boolean;\n title: string;\n value: string;\n}\n\nconst JsonSection = ({ show, title, value }: JsonSectionProps) => {\n if (!show) {\n return null;\n }\n\n return (\n <>\n <Separator />\n <div>\n <Heading level={6} className=\"mb-sm\">\n {title}\n </Heading>\n <CodeEditor value={value} language=\"json\" disabled={true} />\n </div>\n </>\n );\n};\n\ninterface LoadMoreLogsButtonProps {\n show: boolean;\n loading: boolean;\n onClick: () => void;\n}\n\nconst LoadMoreLogsButton = ({ show, loading, onClick }: LoadMoreLogsButtonProps) => {\n if (!show) {\n return null;\n }\n\n return (\n <div className=\"mt-sm\">\n <Button variant=\"tertiary\" size=\"sm\" onClick={onClick} disabled={loading}>\n {loading ? \"Loading...\" : \"Load more logs\"}\n </Button>\n </div>\n );\n};\n\ninterface DrawerActionsProps {\n isRunning: boolean;\n isTerminal: boolean;\n onAbort: () => void;\n onDelete: () => void;\n}\n\nconst DrawerActions = ({ isRunning, isTerminal, onAbort, onDelete }: DrawerActionsProps) => {\n if (!isRunning && !isTerminal) {\n return null;\n }\n\n return (\n <div className=\"flex gap-sm\">\n {isRunning ? (\n <Button variant=\"secondary\" size=\"sm\" icon={<StopCircleIcon />} onClick={onAbort}>\n Abort\n </Button>\n ) : null}\n {isTerminal ? (\n <Button variant=\"secondary\" size=\"sm\" icon={<DeleteIcon />} onClick={onDelete}>\n Delete\n </Button>\n ) : null}\n </div>\n );\n};\n\ninterface LogItemViewProps {\n item: TaskLogItem;\n}\n\nconst LogItemView = ({ item }: LogItemViewProps) => {\n const [expanded, setExpanded] = useState(false);\n const hasData = item.data !== null && item.data !== undefined;\n const hasError = item.error !== null && item.error !== undefined;\n const expandable = hasData || hasError;\n\n return (\n <div className=\"border-b-sm border-neutral-muted py-xs px-sm\">\n <div className=\"flex items-start gap-sm\">\n <div className=\"flex-shrink-0 pt-[2px]\">\n <Tag\n variant={item.type === \"error\" ? \"destructive\" : \"neutral-light\"}\n content={item.type}\n />\n </div>\n <div className=\"flex-1 min-w-0\">\n <Text size=\"sm\">{item.message}</Text>\n </div>\n <div className=\"flex items-center gap-xs flex-shrink-0\">\n <Text size=\"sm\" className=\"text-neutral-strong\">\n <TimeAgo datetime={item.createdOn} />\n </Text>\n <ExpandButton\n show={expandable}\n expanded={expanded}\n onClick={() => setExpanded(!expanded)}\n />\n </div>\n </div>\n <ExpandedPayload show={expanded && hasData} label=\"Data\" value={item.data} />\n <ExpandedPayload\n show={expanded && hasError}\n label=\"Error\"\n value={item.error}\n variant=\"destructive\"\n />\n </div>\n );\n};\n\ninterface TaskDetailDrawerProps {\n task: Task;\n open: boolean;\n onClose: () => void;\n onAbort: (id: string) => Promise<void>;\n onDelete: (id: string) => Promise<void>;\n}\n\nconst TaskDetailDrawerInner = observer(function TaskDetailDrawerInner({\n task,\n open,\n onClose,\n onAbort,\n onDelete\n}: TaskDetailDrawerProps) {\n const { presenter } = useFeature(TaskDetailPresenterFeature);\n\n useEffect(() => {\n if (open) {\n void presenter.init(task.id);\n }\n }, [presenter, task.id, open]);\n\n const { vm } = presenter;\n\n const { showConfirmation: showAbortConfirmation } = useConfirmationDialog({\n title: \"Abort Task\",\n message: \"Are you sure you want to abort this running task?\"\n });\n\n const { showConfirmation: showDeleteConfirmation } = useConfirmationDialog({\n title: \"Delete Task\",\n message: \"Are you sure you want to delete this task?\"\n });\n\n const displayTask = vm.task ?? task;\n const isRunning = displayTask.taskStatus === \"running\";\n const isTerminal =\n displayTask.taskStatus === \"success\" ||\n displayTask.taskStatus === \"failed\" ||\n displayTask.taskStatus === \"aborted\";\n\n const inputJson = formatJson(displayTask.input);\n const outputJson = formatJson(displayTask.output);\n\n return (\n <Drawer\n open={open}\n onOpenChange={isOpen => !isOpen && onClose()}\n title={\n <div className=\"flex items-center gap-sm\">\n <span>{displayTask.name || displayTask.definitionId}</span>\n <Tag\n variant={STATUS_TAG_VARIANT[displayTask.taskStatus] ?? \"neutral-light\"}\n content={displayTask.taskStatus}\n />\n </div>\n }\n modal={true}\n width=\"900px\"\n bodyPadding={false}\n actions={\n <DrawerActions\n isRunning={isRunning}\n isTerminal={isTerminal}\n onAbort={() => showAbortConfirmation(() => onAbort(displayTask.id))}\n onDelete={() => showDeleteConfirmation(() => onDelete(displayTask.id))}\n />\n }\n >\n <div className=\"flex flex-col gap-md p-md overflow-auto\">\n <div>\n <Heading level={6} className=\"mb-sm\">\n General Info\n </Heading>\n <Grid gap=\"comfortable\">\n <Grid.Column span={6}>\n <Text size=\"sm\" className=\"text-neutral-strong\">\n Definition\n </Text>\n <Text size=\"sm\">{displayTask.definitionId}</Text>\n </Grid.Column>\n <Grid.Column span={6}>\n <Text size=\"sm\" className=\"text-neutral-strong\">\n Created By\n </Text>\n <Text size=\"sm\">{displayTask.createdBy?.displayName ?? \"—\"}</Text>\n </Grid.Column>\n <Grid.Column span={6}>\n <Text size=\"sm\" className=\"text-neutral-strong\">\n Created On\n </Text>\n <Text size=\"sm\">\n {displayTask.createdOn ? (\n <TimeAgo datetime={displayTask.createdOn} />\n ) : (\n \"—\"\n )}\n </Text>\n </Grid.Column>\n <Grid.Column span={6}>\n <Text size=\"sm\" className=\"text-neutral-strong\">\n Started On\n </Text>\n <Text size=\"sm\">\n {displayTask.startedOn ? (\n <TimeAgo datetime={displayTask.startedOn} />\n ) : (\n \"—\"\n )}\n </Text>\n </Grid.Column>\n <Grid.Column span={6}>\n <Text size=\"sm\" className=\"text-neutral-strong\">\n Finished On\n </Text>\n <Text size=\"sm\">\n {displayTask.finishedOn ? (\n <TimeAgo datetime={displayTask.finishedOn} />\n ) : (\n \"—\"\n )}\n </Text>\n </Grid.Column>\n <Grid.Column span={6}>\n <Text size=\"sm\" className=\"text-neutral-strong\">\n Iterations\n </Text>\n <Text size=\"sm\">{displayTask.iterations ?? 0}</Text>\n </Grid.Column>\n </Grid>\n </div>\n\n <JsonSection show={!!inputJson} title=\"Input\" value={inputJson} />\n <JsonSection show={!!outputJson} title=\"Output\" value={outputJson} />\n\n <Separator />\n <div>\n <Heading level={6} className=\"mb-sm\">\n Logs ({vm.logs.pagination.totalCount})\n </Heading>\n {vm.logs.rows.length === 0 && !vm.logs.pagination.loading ? (\n <Text size=\"sm\" className=\"text-neutral-strong\">\n No logs available.\n </Text>\n ) : (\n <div className=\"border-sm border-neutral-muted rounded-sm\">\n {vm.logs.rows.map((log: TaskLog) =>\n log.items.map((item, idx) => (\n <LogItemView key={`${log.id}-${idx}`} item={item} />\n ))\n )}\n </div>\n )}\n <LoadMoreLogsButton\n show={vm.logs.pagination.hasMore}\n loading={vm.logs.pagination.loading}\n onClick={() => presenter.loadMore()}\n />\n </div>\n </div>\n </Drawer>\n );\n});\n\nexport const TaskDetailDrawer = (props: TaskDetailDrawerProps) => {\n const container = useContainer();\n\n const scopedContainer = useMemo(() => {\n const child = container.createChildContainer();\n GetTaskFeature.register(child);\n ListLogsFeature.register(child);\n TaskDetailPresenterFeature.register(child);\n return child;\n }, []);\n\n return (\n <DiContainerProvider container={scopedContainer}>\n <TaskDetailDrawerInner {...props} />\n </DiContainerProvider>\n );\n};\n"],"names":["STATUS_TAG_VARIANT","formatJson","value","JSON","ExpandButton","show","expanded","onClick","Button","ExpandLessIcon","ExpandMoreIcon","ExpandedPayload","label","variant","textClass","Text","JsonSection","title","Separator","Heading","CodeEditor","LoadMoreLogsButton","loading","DrawerActions","isRunning","isTerminal","onAbort","onDelete","StopCircleIcon","DeleteIcon","LogItemView","item","setExpanded","useState","hasData","undefined","hasError","expandable","Tag","TimeAgo","TaskDetailDrawerInner","observer","task","open","onClose","presenter","useFeature","TaskDetailPresenterFeature","useEffect","vm","showAbortConfirmation","useConfirmationDialog","showDeleteConfirmation","displayTask","inputJson","outputJson","Drawer","isOpen","Grid","log","idx","TaskDetailDrawer","props","container","useContainer","scopedContainer","useMemo","child","GetTaskFeature","ListLogsFeature","DiContainerProvider"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const TaskDetailPresenterFeature: import("@webiny/feature/admin").FeatureDefinition<{
2
+ presenter: import("./abstractions.js").ITaskDetailPresenter;
3
+ }, []>;
@@ -0,0 +1,17 @@
1
+ import { createFeature } from "@webiny/feature/admin";
2
+ import { TaskDetailPresenter } from "./abstractions.js";
3
+ import { TaskDetailPresenter as external_TaskDetailPresenter_js_TaskDetailPresenter } from "./TaskDetailPresenter.js";
4
+ const TaskDetailPresenterFeature = createFeature({
5
+ name: "BackgroundTasks/TaskDetailPresenter",
6
+ register (container) {
7
+ container.register(external_TaskDetailPresenter_js_TaskDetailPresenter).inSingletonScope();
8
+ },
9
+ resolve (container) {
10
+ return {
11
+ presenter: container.resolve(TaskDetailPresenter)
12
+ };
13
+ }
14
+ });
15
+ export { TaskDetailPresenterFeature };
16
+
17
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/TaskDetail/feature.js","sources":["../../../../src/admin/presentation/TaskDetail/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { TaskDetailPresenter as PresenterAbstraction } from \"./abstractions.js\";\nimport { TaskDetailPresenter } from \"./TaskDetailPresenter.js\";\n\nexport const TaskDetailPresenterFeature = createFeature({\n name: \"BackgroundTasks/TaskDetailPresenter\",\n register(container) {\n container.register(TaskDetailPresenter).inSingletonScope();\n },\n resolve(container) {\n return { presenter: container.resolve(PresenterAbstraction) };\n }\n});\n"],"names":["TaskDetailPresenterFeature","createFeature","container","TaskDetailPresenter","PresenterAbstraction"],"mappings":";;;AAIO,MAAMA,6BAA6BC,cAAc;IACpD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,qDAAqB,gBAAgB;IAC5D;IACA,SAAQD,SAAS;QACb,OAAO;YAAE,WAAWA,UAAU,OAAO,CAACE;QAAsB;IAChE;AACJ"}
@@ -0,0 +1,2 @@
1
+ export { TaskDetailPresenter } from "./abstractions.js";
2
+ export { TaskDetailPresenterFeature } from "./feature.js";
@@ -0,0 +1,2 @@
1
+ export { TaskDetailPresenter } from "./abstractions.js";
2
+ export { TaskDetailPresenterFeature } from "./feature.js";
@@ -0,0 +1,15 @@
1
+ import type { IDataSource, IDataSourceQuery, IDataSourceMeta } from "@webiny/app-admin/presentation/listPresenter/abstractions.js";
2
+ import type { Task } from "../../../admin/shared/types.js";
3
+ import type { IListTasksUseCase } from "../../../admin/features/listTasks/abstractions.js";
4
+ export declare class TaskExecutionsDataSource implements IDataSource<Task> {
5
+ private readonly listTasksUseCase;
6
+ private _rows;
7
+ private _meta;
8
+ private _loading;
9
+ constructor(listTasksUseCase: IListTasksUseCase);
10
+ get rows(): Task[];
11
+ get meta(): IDataSourceMeta;
12
+ get loading(): boolean;
13
+ query(params: IDataSourceQuery): Promise<void>;
14
+ loadMore(params: IDataSourceQuery): Promise<void>;
15
+ }
@@ -0,0 +1,91 @@
1
+ import { computed, makeAutoObservable, runInAction } from "mobx";
2
+ const ENTRY_META_SORT_FIELDS = new Set([
3
+ "id",
4
+ "createdOn",
5
+ "modifiedOn",
6
+ "savedOn",
7
+ "deletedOn",
8
+ "restoredOn",
9
+ "firstPublishedOn",
10
+ "lastPublishedOn"
11
+ ]);
12
+ function toSortEnum(field, direction) {
13
+ const prefix = ENTRY_META_SORT_FIELDS.has(field) ? "" : "values_";
14
+ return `${prefix}${field}_${direction}`;
15
+ }
16
+ class TaskExecutionsDataSource {
17
+ constructor(listTasksUseCase){
18
+ this.listTasksUseCase = listTasksUseCase;
19
+ this._rows = [];
20
+ this._meta = {
21
+ cursor: null,
22
+ hasMoreItems: false,
23
+ totalCount: 0
24
+ };
25
+ this._loading = false;
26
+ makeAutoObservable(this, {
27
+ listTasksUseCase: false,
28
+ rows: computed
29
+ });
30
+ }
31
+ get rows() {
32
+ return this._rows;
33
+ }
34
+ get meta() {
35
+ return this._meta;
36
+ }
37
+ get loading() {
38
+ return this._loading;
39
+ }
40
+ async query(params) {
41
+ this._loading = true;
42
+ const sort = params.sort ? [
43
+ toSortEnum(params.sort.field, params.sort.direction)
44
+ ] : void 0;
45
+ const result = await this.listTasksUseCase.execute({
46
+ where: params.filters,
47
+ sort,
48
+ limit: params.limit,
49
+ after: params.cursor,
50
+ search: params.search
51
+ });
52
+ runInAction(()=>{
53
+ this._rows = result.items;
54
+ this._meta = {
55
+ cursor: result.meta.cursor,
56
+ hasMoreItems: result.meta.hasMoreItems,
57
+ totalCount: result.meta.totalCount
58
+ };
59
+ this._loading = false;
60
+ });
61
+ }
62
+ async loadMore(params) {
63
+ if (!this._meta.hasMoreItems || this._loading) return;
64
+ this._loading = true;
65
+ const sort = params.sort ? [
66
+ toSortEnum(params.sort.field, params.sort.direction)
67
+ ] : void 0;
68
+ const result = await this.listTasksUseCase.execute({
69
+ where: params.filters,
70
+ sort,
71
+ limit: params.limit,
72
+ after: this._meta.cursor ?? void 0,
73
+ search: params.search
74
+ });
75
+ runInAction(()=>{
76
+ this._rows = [
77
+ ...this._rows,
78
+ ...result.items
79
+ ];
80
+ this._meta = {
81
+ cursor: result.meta.cursor,
82
+ hasMoreItems: result.meta.hasMoreItems,
83
+ totalCount: result.meta.totalCount
84
+ };
85
+ this._loading = false;
86
+ });
87
+ }
88
+ }
89
+ export { TaskExecutionsDataSource };
90
+
91
+ //# sourceMappingURL=TaskExecutionsDataSource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/TaskExecutions/TaskExecutionsDataSource.js","sources":["../../../../src/admin/presentation/TaskExecutions/TaskExecutionsDataSource.ts"],"sourcesContent":["import { makeAutoObservable, runInAction, computed } from \"mobx\";\nimport type {\n IDataSource,\n IDataSourceQuery,\n IDataSourceMeta\n} from \"@webiny/app-admin/presentation/listPresenter/abstractions.js\";\nimport type { Task } from \"~/admin/shared/types.js\";\nimport type { IListTasksUseCase } from \"~/admin/features/listTasks/abstractions.js\";\n\nconst ENTRY_META_SORT_FIELDS = new Set([\n \"id\",\n \"createdOn\",\n \"modifiedOn\",\n \"savedOn\",\n \"deletedOn\",\n \"restoredOn\",\n \"firstPublishedOn\",\n \"lastPublishedOn\"\n]);\n\nfunction toSortEnum(field: string, direction: \"ASC\" | \"DESC\"): string {\n const prefix = ENTRY_META_SORT_FIELDS.has(field) ? \"\" : \"values_\";\n return `${prefix}${field}_${direction}`;\n}\n\nexport class TaskExecutionsDataSource implements IDataSource<Task> {\n private _rows: Task[] = [];\n private _meta: IDataSourceMeta = { cursor: null, hasMoreItems: false, totalCount: 0 };\n private _loading = false;\n\n constructor(private readonly listTasksUseCase: IListTasksUseCase) {\n makeAutoObservable<TaskExecutionsDataSource, \"listTasksUseCase\">(this, {\n listTasksUseCase: false,\n rows: computed\n });\n }\n\n get rows(): Task[] {\n return this._rows;\n }\n\n get meta(): IDataSourceMeta {\n return this._meta;\n }\n\n get loading(): boolean {\n return this._loading;\n }\n\n async query(params: IDataSourceQuery): Promise<void> {\n this._loading = true;\n const sort = params.sort\n ? [toSortEnum(params.sort.field, params.sort.direction)]\n : undefined;\n const result = await this.listTasksUseCase.execute({\n where: params.filters,\n sort,\n limit: params.limit,\n after: params.cursor,\n search: params.search\n });\n runInAction(() => {\n this._rows = result.items;\n this._meta = {\n cursor: result.meta.cursor,\n hasMoreItems: result.meta.hasMoreItems,\n totalCount: result.meta.totalCount\n };\n this._loading = false;\n });\n }\n\n async loadMore(params: IDataSourceQuery): Promise<void> {\n if (!this._meta.hasMoreItems || this._loading) {\n return;\n }\n this._loading = true;\n const sort = params.sort\n ? [toSortEnum(params.sort.field, params.sort.direction)]\n : undefined;\n const result = await this.listTasksUseCase.execute({\n where: params.filters,\n sort,\n limit: params.limit,\n after: this._meta.cursor ?? undefined,\n search: params.search\n });\n runInAction(() => {\n this._rows = [...this._rows, ...result.items];\n this._meta = {\n cursor: result.meta.cursor,\n hasMoreItems: result.meta.hasMoreItems,\n totalCount: result.meta.totalCount\n };\n this._loading = false;\n });\n }\n}\n"],"names":["ENTRY_META_SORT_FIELDS","Set","toSortEnum","field","direction","prefix","TaskExecutionsDataSource","listTasksUseCase","makeAutoObservable","computed","params","sort","undefined","result","runInAction"],"mappings":";AASA,MAAMA,yBAAyB,IAAIC,IAAI;IACnC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACH;AAED,SAASC,WAAWC,KAAa,EAAEC,SAAyB;IACxD,MAAMC,SAASL,uBAAuB,GAAG,CAACG,SAAS,KAAK;IACxD,OAAO,GAAGE,SAASF,MAAM,CAAC,EAAEC,WAAW;AAC3C;AAEO,MAAME;IAKT,YAA6BC,gBAAmC,CAAE;aAArCA,gBAAgB,GAAhBA;aAJrB,KAAK,GAAW,EAAE;aAClB,KAAK,GAAoB;YAAE,QAAQ;YAAM,cAAc;YAAO,YAAY;QAAE;aAC5E,QAAQ,GAAG;QAGfC,mBAAiE,IAAI,EAAE;YACnE,kBAAkB;YAClB,MAAMC;QACV;IACJ;IAEA,IAAI,OAAe;QACf,OAAO,IAAI,CAAC,KAAK;IACrB;IAEA,IAAI,OAAwB;QACxB,OAAO,IAAI,CAAC,KAAK;IACrB;IAEA,IAAI,UAAmB;QACnB,OAAO,IAAI,CAAC,QAAQ;IACxB;IAEA,MAAM,MAAMC,MAAwB,EAAiB;QACjD,IAAI,CAAC,QAAQ,GAAG;QAChB,MAAMC,OAAOD,OAAO,IAAI,GAClB;YAACR,WAAWQ,OAAO,IAAI,CAAC,KAAK,EAAEA,OAAO,IAAI,CAAC,SAAS;SAAE,GACtDE;QACN,MAAMC,SAAS,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;YAC/C,OAAOH,OAAO,OAAO;YACrBC;YACA,OAAOD,OAAO,KAAK;YACnB,OAAOA,OAAO,MAAM;YACpB,QAAQA,OAAO,MAAM;QACzB;QACAI,YAAY;YACR,IAAI,CAAC,KAAK,GAAGD,OAAO,KAAK;YACzB,IAAI,CAAC,KAAK,GAAG;gBACT,QAAQA,OAAO,IAAI,CAAC,MAAM;gBAC1B,cAAcA,OAAO,IAAI,CAAC,YAAY;gBACtC,YAAYA,OAAO,IAAI,CAAC,UAAU;YACtC;YACA,IAAI,CAAC,QAAQ,GAAG;QACpB;IACJ;IAEA,MAAM,SAASH,MAAwB,EAAiB;QACpD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EACzC;QAEJ,IAAI,CAAC,QAAQ,GAAG;QAChB,MAAMC,OAAOD,OAAO,IAAI,GAClB;YAACR,WAAWQ,OAAO,IAAI,CAAC,KAAK,EAAEA,OAAO,IAAI,CAAC,SAAS;SAAE,GACtDE;QACN,MAAMC,SAAS,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;YAC/C,OAAOH,OAAO,OAAO;YACrBC;YACA,OAAOD,OAAO,KAAK;YACnB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAIE;YAC5B,QAAQF,OAAO,MAAM;QACzB;QACAI,YAAY;YACR,IAAI,CAAC,KAAK,GAAG;mBAAI,IAAI,CAAC,KAAK;mBAAKD,OAAO,KAAK;aAAC;YAC7C,IAAI,CAAC,KAAK,GAAG;gBACT,QAAQA,OAAO,IAAI,CAAC,MAAM;gBAC1B,cAAcA,OAAO,IAAI,CAAC,YAAY;gBACtC,YAAYA,OAAO,IAAI,CAAC,UAAU;YACtC;YACA,IAAI,CAAC,QAAQ,GAAG;QACpB;IACJ;AACJ"}
@@ -0,0 +1,52 @@
1
+ import { ListPresenter } from "@webiny/app-admin/presentation/listPresenter/abstractions.js";
2
+ import type { Task } from "../../../admin/shared/types.js";
3
+ import { type ITaskExecutionsPresenter, type ITaskExecutionsViewModel } from "./abstractions.js";
4
+ import { ListTasksUseCase } from "../../../admin/features/listTasks/abstractions.js";
5
+ import { DeleteTaskUseCase } from "../../../admin/features/deleteTask/abstractions.js";
6
+ import { AbortTaskUseCase } from "../../../admin/features/abortTask/abstractions.js";
7
+ import { ListDefinitionsUseCase } from "../../../admin/features/listDefinitions/abstractions.js";
8
+ import { TaskPermissions } from "../../../admin/features/permissions/abstractions.js";
9
+ declare class TaskExecutionsPresenterImpl implements ITaskExecutionsPresenter {
10
+ private readonly listPresenter;
11
+ private readonly listTasksUseCase;
12
+ private readonly deleteTaskUseCase;
13
+ private readonly abortTaskUseCase;
14
+ private readonly listDefinitionsUseCase;
15
+ private readonly permissions;
16
+ private _selectedTask;
17
+ private _definitionOptions;
18
+ constructor(listPresenter: ListPresenter.Interface<Task>, listTasksUseCase: ListTasksUseCase.Interface, deleteTaskUseCase: DeleteTaskUseCase.Interface, abortTaskUseCase: AbortTaskUseCase.Interface, listDefinitionsUseCase: ListDefinitionsUseCase.Interface, permissions: TaskPermissions.Interface);
19
+ get vm(): ITaskExecutionsViewModel;
20
+ get selectedTask(): Task | null;
21
+ search: {
22
+ set: (query: string) => void;
23
+ clear: () => void;
24
+ };
25
+ sort: {
26
+ set: (field: string, direction: "ASC" | "DESC") => void;
27
+ toggle: (field: string) => void;
28
+ };
29
+ filter: {
30
+ set: (key: string, value: unknown) => void;
31
+ clear: (key: string) => void;
32
+ clearAll: () => void;
33
+ };
34
+ selection: {
35
+ toggle: (id: string) => void;
36
+ selectRangeTo: (id: string) => void;
37
+ selectAll: () => void;
38
+ deselectAll: () => void;
39
+ selectRows: (ids: string[]) => void;
40
+ isSelected: (id: string) => boolean;
41
+ };
42
+ loadMore: () => Promise<void>;
43
+ refresh: () => Promise<void>;
44
+ deleteTask: (id: string) => Promise<void>;
45
+ abortTask: (id: string) => Promise<void>;
46
+ selectTask: (task: Task | null) => void;
47
+ init(): void;
48
+ }
49
+ export declare const TaskExecutionsPresenter: typeof TaskExecutionsPresenterImpl & {
50
+ __abstraction: import("@webiny/di").Abstraction<ITaskExecutionsPresenter>;
51
+ };
52
+ export {};
@@ -0,0 +1,107 @@
1
+ import { computed, makeAutoObservable, runInAction } from "mobx";
2
+ import { ListPresenter } from "@webiny/app-admin/presentation/listPresenter/abstractions.js";
3
+ import { TaskExecutionsPresenter } from "./abstractions.js";
4
+ import { TaskExecutionsDataSource } from "./TaskExecutionsDataSource.js";
5
+ import { ListTasksUseCase } from "../../features/listTasks/abstractions.js";
6
+ import { DeleteTaskUseCase } from "../../features/deleteTask/abstractions.js";
7
+ import { AbortTaskUseCase } from "../../features/abortTask/abstractions.js";
8
+ import { ListDefinitionsUseCase } from "../../features/listDefinitions/abstractions.js";
9
+ import { TaskPermissions } from "../../features/permissions/abstractions.js";
10
+ class TaskExecutionsPresenterImpl {
11
+ constructor(listPresenter, listTasksUseCase, deleteTaskUseCase, abortTaskUseCase, listDefinitionsUseCase, permissions){
12
+ this.listPresenter = listPresenter;
13
+ this.listTasksUseCase = listTasksUseCase;
14
+ this.deleteTaskUseCase = deleteTaskUseCase;
15
+ this.abortTaskUseCase = abortTaskUseCase;
16
+ this.listDefinitionsUseCase = listDefinitionsUseCase;
17
+ this.permissions = permissions;
18
+ this._selectedTask = null;
19
+ this._definitionOptions = [];
20
+ this.search = {
21
+ set: (query)=>this.listPresenter.actions.search.set(query),
22
+ clear: ()=>this.listPresenter.actions.search.clear()
23
+ };
24
+ this.sort = {
25
+ set: (field, direction)=>this.listPresenter.actions.sort.set(field, direction),
26
+ toggle: (field)=>this.listPresenter.actions.sort.toggle(field)
27
+ };
28
+ this.filter = {
29
+ set: (key, value)=>this.listPresenter.actions.filter.set(key, value),
30
+ clear: (key)=>this.listPresenter.actions.filter.clear(key),
31
+ clearAll: ()=>this.listPresenter.actions.filter.clearAll()
32
+ };
33
+ this.selection = {
34
+ toggle: (id)=>this.listPresenter.actions.selection.toggle(id),
35
+ selectRangeTo: (id)=>this.listPresenter.actions.selection.selectRangeTo(id),
36
+ selectAll: ()=>this.listPresenter.actions.selection.selectAll(),
37
+ deselectAll: ()=>this.listPresenter.actions.selection.deselectAll(),
38
+ selectRows: (ids)=>this.listPresenter.actions.selection.selectRows(ids),
39
+ isSelected: (id)=>this.listPresenter.actions.selection.isSelected(id)
40
+ };
41
+ this.loadMore = ()=>this.listPresenter.actions.loadMore();
42
+ this.refresh = ()=>this.listPresenter.actions.refresh();
43
+ this.deleteTask = async (id)=>{
44
+ await this.deleteTaskUseCase.execute(id);
45
+ this._selectedTask = null;
46
+ await this.listPresenter.actions.refresh();
47
+ };
48
+ this.abortTask = async (id)=>{
49
+ await this.abortTaskUseCase.execute({
50
+ id
51
+ });
52
+ await this.listPresenter.actions.refresh();
53
+ };
54
+ this.selectTask = (task)=>{
55
+ this._selectedTask = task;
56
+ };
57
+ makeAutoObservable(this, {
58
+ vm: computed
59
+ });
60
+ }
61
+ get vm() {
62
+ return {
63
+ list: this.listPresenter.vm,
64
+ definitionOptions: this._definitionOptions,
65
+ permissions: {
66
+ canRead: this.permissions.canRead("task"),
67
+ canDelete: this.permissions.canDelete("task")
68
+ }
69
+ };
70
+ }
71
+ get selectedTask() {
72
+ return this._selectedTask;
73
+ }
74
+ init() {
75
+ const dataSource = new TaskExecutionsDataSource(this.listTasksUseCase);
76
+ this.listPresenter.init({
77
+ dataSource,
78
+ initialSort: {
79
+ field: "createdOn",
80
+ direction: "DESC"
81
+ },
82
+ limit: 25
83
+ });
84
+ this.listDefinitionsUseCase.execute().then((definitions)=>{
85
+ runInAction(()=>{
86
+ this._definitionOptions = definitions.map((d)=>({
87
+ label: d.title,
88
+ value: d.id
89
+ }));
90
+ });
91
+ }).catch(()=>{});
92
+ }
93
+ }
94
+ const TaskExecutionsPresenter_TaskExecutionsPresenter = TaskExecutionsPresenter.createImplementation({
95
+ implementation: TaskExecutionsPresenterImpl,
96
+ dependencies: [
97
+ ListPresenter,
98
+ ListTasksUseCase,
99
+ DeleteTaskUseCase,
100
+ AbortTaskUseCase,
101
+ ListDefinitionsUseCase,
102
+ TaskPermissions
103
+ ]
104
+ });
105
+ export { TaskExecutionsPresenter_TaskExecutionsPresenter as TaskExecutionsPresenter };
106
+
107
+ //# sourceMappingURL=TaskExecutionsPresenter.js.map