@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 @@
1
+ {"version":3,"file":"admin/presentation/TaskExecutions/TaskExecutionsPresenter.js","sources":["../../../../src/admin/presentation/TaskExecutions/TaskExecutionsPresenter.ts"],"sourcesContent":["import { makeAutoObservable, runInAction, computed } from \"mobx\";\nimport { ListPresenter } from \"@webiny/app-admin/presentation/listPresenter/abstractions.js\";\nimport type { Task } from \"~/admin/shared/types.js\";\nimport type { IDefinitionOption } from \"./abstractions.js\";\nimport {\n TaskExecutionsPresenter as Abstraction,\n type ITaskExecutionsPresenter,\n type ITaskExecutionsViewModel\n} from \"./abstractions.js\";\nimport { TaskExecutionsDataSource } from \"./TaskExecutionsDataSource.js\";\nimport { ListTasksUseCase } from \"~/admin/features/listTasks/abstractions.js\";\nimport { DeleteTaskUseCase } from \"~/admin/features/deleteTask/abstractions.js\";\nimport { AbortTaskUseCase } from \"~/admin/features/abortTask/abstractions.js\";\nimport { ListDefinitionsUseCase } from \"~/admin/features/listDefinitions/abstractions.js\";\nimport { TaskPermissions } from \"~/admin/features/permissions/abstractions.js\";\n\nclass TaskExecutionsPresenterImpl implements ITaskExecutionsPresenter {\n private _selectedTask: Task | null = null;\n private _definitionOptions: IDefinitionOption[] = [];\n\n constructor(\n private readonly listPresenter: ListPresenter.Interface<Task>,\n private readonly listTasksUseCase: ListTasksUseCase.Interface,\n private readonly deleteTaskUseCase: DeleteTaskUseCase.Interface,\n private readonly abortTaskUseCase: AbortTaskUseCase.Interface,\n private readonly listDefinitionsUseCase: ListDefinitionsUseCase.Interface,\n private readonly permissions: TaskPermissions.Interface\n ) {\n makeAutoObservable(this, { vm: computed });\n }\n\n get vm(): ITaskExecutionsViewModel {\n return {\n list: this.listPresenter.vm,\n definitionOptions: this._definitionOptions,\n permissions: {\n canRead: this.permissions.canRead(\"task\"),\n canDelete: this.permissions.canDelete(\"task\")\n }\n };\n }\n\n get selectedTask(): Task | null {\n return this._selectedTask;\n }\n\n search = {\n set: (query: string) => this.listPresenter.actions.search.set(query),\n clear: () => this.listPresenter.actions.search.clear()\n };\n\n sort = {\n set: (field: string, direction: \"ASC\" | \"DESC\") =>\n this.listPresenter.actions.sort.set(field, direction),\n toggle: (field: string) => this.listPresenter.actions.sort.toggle(field)\n };\n\n filter = {\n set: (key: string, value: unknown) => this.listPresenter.actions.filter.set(key, value),\n clear: (key: string) => this.listPresenter.actions.filter.clear(key),\n clearAll: () => this.listPresenter.actions.filter.clearAll()\n };\n\n selection = {\n toggle: (id: string) => this.listPresenter.actions.selection.toggle(id),\n selectRangeTo: (id: string) => this.listPresenter.actions.selection.selectRangeTo(id),\n selectAll: () => this.listPresenter.actions.selection.selectAll(),\n deselectAll: () => this.listPresenter.actions.selection.deselectAll(),\n selectRows: (ids: string[]) => this.listPresenter.actions.selection.selectRows(ids),\n isSelected: (id: string) => this.listPresenter.actions.selection.isSelected(id)\n };\n\n loadMore = () => this.listPresenter.actions.loadMore();\n refresh = () => this.listPresenter.actions.refresh();\n\n deleteTask = async (id: string) => {\n await this.deleteTaskUseCase.execute(id);\n this._selectedTask = null;\n await this.listPresenter.actions.refresh();\n };\n\n abortTask = async (id: string) => {\n await this.abortTaskUseCase.execute({ id });\n await this.listPresenter.actions.refresh();\n };\n\n selectTask = (task: Task | null) => {\n this._selectedTask = task;\n };\n\n init(): void {\n const dataSource = new TaskExecutionsDataSource(this.listTasksUseCase);\n this.listPresenter.init({\n dataSource,\n initialSort: { field: \"createdOn\", direction: \"DESC\" },\n limit: 25\n });\n\n void this.listDefinitionsUseCase\n .execute()\n .then(definitions => {\n runInAction(() => {\n this._definitionOptions = definitions.map(d => ({\n label: d.title,\n value: d.id\n }));\n });\n })\n .catch(() => {\n /* Definitions are used for filter labels only; safe to ignore. */\n });\n }\n}\n\nexport const TaskExecutionsPresenter = Abstraction.createImplementation({\n implementation: TaskExecutionsPresenterImpl,\n dependencies: [\n ListPresenter,\n ListTasksUseCase,\n DeleteTaskUseCase,\n AbortTaskUseCase,\n ListDefinitionsUseCase,\n TaskPermissions\n ]\n});\n"],"names":["TaskExecutionsPresenterImpl","listPresenter","listTasksUseCase","deleteTaskUseCase","abortTaskUseCase","listDefinitionsUseCase","permissions","query","field","direction","key","value","id","ids","task","makeAutoObservable","computed","dataSource","TaskExecutionsDataSource","definitions","runInAction","d","TaskExecutionsPresenter","Abstraction","ListPresenter","ListTasksUseCase","DeleteTaskUseCase","AbortTaskUseCase","ListDefinitionsUseCase","TaskPermissions"],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { Task } from "../../../admin/shared/types.js";
2
+ import type { IListViewModel } from "@webiny/app-admin/presentation/listPresenter/abstractions.js";
3
+ import type { IListActions } from "@webiny/app-admin/presentation/listPresenter/abstractions.js";
4
+ export interface IDefinitionOption {
5
+ label: string;
6
+ value: string;
7
+ }
8
+ export interface ITaskExecutionsViewModel {
9
+ list: IListViewModel<Task>;
10
+ definitionOptions: IDefinitionOption[];
11
+ permissions: {
12
+ canRead: boolean;
13
+ canDelete: boolean;
14
+ };
15
+ }
16
+ export interface ITaskExecutionsPresenter extends IListActions {
17
+ vm: ITaskExecutionsViewModel;
18
+ selectedTask: Task | null;
19
+ deleteTask(id: string): Promise<void>;
20
+ abortTask(id: string): Promise<void>;
21
+ selectTask(task: Task | null): void;
22
+ init(): void;
23
+ }
24
+ export declare const TaskExecutionsPresenter: import("@webiny/di").Abstraction<ITaskExecutionsPresenter>;
25
+ export declare namespace TaskExecutionsPresenter {
26
+ type Interface = ITaskExecutionsPresenter;
27
+ type ViewModel = ITaskExecutionsViewModel;
28
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/admin";
2
+ const TaskExecutionsPresenter = createAbstraction("TaskExecutionsPresenter");
3
+ export { TaskExecutionsPresenter };
4
+
5
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/TaskExecutions/abstractions.js","sources":["../../../../src/admin/presentation/TaskExecutions/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport type { Task } from \"~/admin/shared/types.js\";\nimport type { IListViewModel } from \"@webiny/app-admin/presentation/listPresenter/abstractions.js\";\nimport type { IListActions } from \"@webiny/app-admin/presentation/listPresenter/abstractions.js\";\n\nexport interface IDefinitionOption {\n label: string;\n value: string;\n}\n\nexport interface ITaskExecutionsViewModel {\n list: IListViewModel<Task>;\n definitionOptions: IDefinitionOption[];\n permissions: {\n canRead: boolean;\n canDelete: boolean;\n };\n}\n\nexport interface ITaskExecutionsPresenter extends IListActions {\n vm: ITaskExecutionsViewModel;\n selectedTask: Task | null;\n deleteTask(id: string): Promise<void>;\n abortTask(id: string): Promise<void>;\n selectTask(task: Task | null): void;\n init(): void;\n}\n\nexport const TaskExecutionsPresenter =\n createAbstraction<ITaskExecutionsPresenter>(\"TaskExecutionsPresenter\");\n\nexport namespace TaskExecutionsPresenter {\n export type Interface = ITaskExecutionsPresenter;\n export type ViewModel = ITaskExecutionsViewModel;\n}\n"],"names":["TaskExecutionsPresenter","createAbstraction"],"mappings":";AA4BO,MAAMA,0BACTC,kBAA4C"}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const TaskExecutionsView: () => React.JSX.Element;
@@ -0,0 +1,303 @@
1
+ import react, { useCallback, useEffect, useMemo } from "react";
2
+ import debounce from "lodash/debounce.js";
3
+ import { observer } from "mobx-react-lite";
4
+ import { DiContainerProvider, useContainer, useFeature } from "@webiny/app";
5
+ import { Button, DataTable, DatePicker, DropdownMenu, Heading, IconButton, Input, Scrollbar, Select, Separator, Tag, Text, TimeAgo } from "@webiny/admin-ui";
6
+ import { useConfirmationDialog, useSnackbar } from "@webiny/app-admin/hooks/index.js";
7
+ import { ReactComponent } from "@webiny/icons/more_vert.svg";
8
+ import { ReactComponent as delete_svg_ReactComponent } from "@webiny/icons/delete.svg";
9
+ import { ReactComponent as stop_circle_svg_ReactComponent } from "@webiny/icons/stop_circle.svg";
10
+ import { TaskExecutionsPresenterFeature } from "../feature.js";
11
+ import { ListTasksFeature } from "../../../features/listTasks/feature.js";
12
+ import { DeleteTaskFeature } from "../../../features/deleteTask/feature.js";
13
+ import { AbortTaskFeature } from "../../../features/abortTask/feature.js";
14
+ import { ListDefinitionsFeature } from "../../../features/listDefinitions/feature.js";
15
+ import { TaskPermissionsFeature } from "../../../features/permissions/feature.js";
16
+ import { TaskDetailDrawer } from "../../TaskDetail/components/TaskDetailDrawer.js";
17
+ const STATUS_TAG_VARIANT = {
18
+ pending: "neutral-light",
19
+ running: "accent",
20
+ success: "success",
21
+ failed: "destructive",
22
+ aborted: "warning"
23
+ };
24
+ const STATUS_OPTIONS = [
25
+ {
26
+ label: "Pending",
27
+ value: "pending"
28
+ },
29
+ {
30
+ label: "Running",
31
+ value: "running"
32
+ },
33
+ {
34
+ label: "Success",
35
+ value: "success"
36
+ },
37
+ {
38
+ label: "Failed",
39
+ value: "failed"
40
+ },
41
+ {
42
+ label: "Aborted",
43
+ value: "aborted"
44
+ }
45
+ ];
46
+ const TaskExecutionsView_TaskExecutionsViewInner = observer(function() {
47
+ const { presenter } = useFeature(TaskExecutionsPresenterFeature);
48
+ const { showSnackbar } = useSnackbar();
49
+ useEffect(()=>{
50
+ presenter.init();
51
+ }, [
52
+ presenter
53
+ ]);
54
+ const { vm } = presenter;
55
+ const loadMoreOnScroll = useMemo(()=>debounce(({ scrollFrame })=>{
56
+ if (scrollFrame.top > 0.8) presenter.loadMore();
57
+ }, 200), [
58
+ presenter
59
+ ]);
60
+ const { showConfirmation: showDeleteConfirmation } = useConfirmationDialog({
61
+ title: "Delete Task",
62
+ message: "Are you sure you want to delete this task?"
63
+ });
64
+ const { showConfirmation: showAbortConfirmation } = useConfirmationDialog({
65
+ title: "Abort Task",
66
+ message: "Are you sure you want to abort this running task?"
67
+ });
68
+ const sorting = useMemo(()=>{
69
+ const sort = vm.list.sort;
70
+ if (!sort || !sort.field) return [];
71
+ return [
72
+ {
73
+ id: sort.field,
74
+ desc: "DESC" === sort.direction
75
+ }
76
+ ];
77
+ }, [
78
+ vm.list.sort
79
+ ]);
80
+ const onSortingChange = useCallback((updater)=>{
81
+ const next = "function" == typeof updater ? updater(sorting) : updater;
82
+ if (next.length > 0) {
83
+ const { id, desc } = next[0];
84
+ presenter.sort.set(id, desc ? "DESC" : "ASC");
85
+ }
86
+ }, [
87
+ sorting,
88
+ presenter.sort
89
+ ]);
90
+ const columns = useMemo(()=>({
91
+ name: {
92
+ header: "Name",
93
+ cell: (row)=>/*#__PURE__*/ react.createElement(Text, {
94
+ className: "cursor-pointer text-primary hover:underline",
95
+ onClick: ()=>presenter.selectTask(row)
96
+ }, row.name || row.definitionId),
97
+ enableSorting: true,
98
+ size: 200
99
+ },
100
+ definitionId: {
101
+ header: "Definition",
102
+ cell: (row)=>{
103
+ const def = vm.definitionOptions.find((d)=>d.value === row.definitionId);
104
+ return /*#__PURE__*/ react.createElement(Text, {
105
+ size: "sm"
106
+ }, def ? def.label : row.definitionId);
107
+ },
108
+ enableSorting: true,
109
+ size: 160
110
+ },
111
+ taskStatus: {
112
+ header: "Status",
113
+ cell: (row)=>/*#__PURE__*/ react.createElement(Tag, {
114
+ variant: STATUS_TAG_VARIANT[row.taskStatus] ?? "neutral-light",
115
+ content: row.taskStatus
116
+ }),
117
+ enableSorting: true,
118
+ size: 100
119
+ },
120
+ createdOn: {
121
+ header: "Created",
122
+ cell: (row)=>row.createdOn ? /*#__PURE__*/ react.createElement(TimeAgo, {
123
+ datetime: row.createdOn
124
+ }) : /*#__PURE__*/ react.createElement(Text, {
125
+ size: "sm"
126
+ }, "—"),
127
+ enableSorting: true,
128
+ size: 120
129
+ },
130
+ startedOn: {
131
+ header: "Started",
132
+ cell: (row)=>row.startedOn ? /*#__PURE__*/ react.createElement(TimeAgo, {
133
+ datetime: row.startedOn
134
+ }) : /*#__PURE__*/ react.createElement(Text, {
135
+ size: "sm"
136
+ }, "—"),
137
+ enableSorting: true,
138
+ size: 120
139
+ },
140
+ finishedOn: {
141
+ header: "Finished",
142
+ cell: (row)=>row.finishedOn ? /*#__PURE__*/ react.createElement(TimeAgo, {
143
+ datetime: row.finishedOn
144
+ }) : /*#__PURE__*/ react.createElement(Text, {
145
+ size: "sm"
146
+ }, "—"),
147
+ enableSorting: true,
148
+ size: 120
149
+ },
150
+ actions: {
151
+ header: " ",
152
+ cell: (row)=>{
153
+ const isRunning = "running" === row.taskStatus;
154
+ const isTerminal = "success" === row.taskStatus || "failed" === row.taskStatus || "aborted" === row.taskStatus;
155
+ if (!isRunning && !isTerminal) return null;
156
+ return /*#__PURE__*/ react.createElement(DropdownMenu, {
157
+ trigger: /*#__PURE__*/ react.createElement(IconButton, {
158
+ icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
159
+ variant: "ghost",
160
+ size: "sm",
161
+ "aria-label": "Actions"
162
+ })
163
+ }, isRunning && /*#__PURE__*/ react.createElement(DropdownMenu.Item, {
164
+ icon: /*#__PURE__*/ react.createElement(stop_circle_svg_ReactComponent, null),
165
+ onClick: ()=>{
166
+ showAbortConfirmation(()=>presenter.abortTask(row.id).then(()=>{
167
+ showSnackbar("Task aborted.");
168
+ }));
169
+ },
170
+ text: "Abort"
171
+ }), isTerminal && vm.permissions.canDelete && /*#__PURE__*/ react.createElement(react.Fragment, null, isRunning && /*#__PURE__*/ react.createElement(DropdownMenu.Separator, null), /*#__PURE__*/ react.createElement(DropdownMenu.Item, {
172
+ icon: /*#__PURE__*/ react.createElement(delete_svg_ReactComponent, null),
173
+ onClick: ()=>{
174
+ showDeleteConfirmation(()=>presenter.deleteTask(row.id).then(()=>{
175
+ showSnackbar("Task deleted.");
176
+ }));
177
+ },
178
+ text: "Delete"
179
+ })));
180
+ },
181
+ size: 56,
182
+ enableSorting: false,
183
+ enableHiding: false,
184
+ enableResizing: false
185
+ }
186
+ }), [
187
+ vm.permissions,
188
+ vm.definitionOptions,
189
+ presenter,
190
+ showDeleteConfirmation,
191
+ showAbortConfirmation,
192
+ showSnackbar
193
+ ]);
194
+ return /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement("div", {
195
+ className: "flex flex-col h-main-content"
196
+ }, /*#__PURE__*/ react.createElement("div", {
197
+ className: "flex items-center justify-between py-sm px-md"
198
+ }, /*#__PURE__*/ react.createElement(Heading, {
199
+ level: 5
200
+ }, "Task Executions")), /*#__PURE__*/ react.createElement(Separator, null), /*#__PURE__*/ react.createElement("div", {
201
+ className: "flex items-center gap-sm px-md py-xs flex-wrap"
202
+ }, /*#__PURE__*/ react.createElement("div", {
203
+ className: "w-[240px]"
204
+ }, /*#__PURE__*/ react.createElement(Input, {
205
+ placeholder: "Search by name...",
206
+ value: vm.list.search,
207
+ onChange: (value)=>{
208
+ presenter.search.set(value);
209
+ }
210
+ })), /*#__PURE__*/ react.createElement("div", {
211
+ className: "w-[160px]"
212
+ }, /*#__PURE__*/ react.createElement(Select, {
213
+ placeholder: "Status",
214
+ options: STATUS_OPTIONS,
215
+ value: vm.list.filters.taskStatus_in ?? "",
216
+ onChange: (value)=>{
217
+ if (value) presenter.filter.set("taskStatus_in", value);
218
+ else presenter.filter.clear("taskStatus_in");
219
+ }
220
+ })), vm.definitionOptions.length > 0 && /*#__PURE__*/ react.createElement("div", {
221
+ className: "w-[200px]"
222
+ }, /*#__PURE__*/ react.createElement(Select, {
223
+ placeholder: "Definition",
224
+ options: vm.definitionOptions,
225
+ value: vm.list.filters.definitionId,
226
+ onChange: (value)=>{
227
+ if (value) presenter.filter.set("definitionId", value);
228
+ else presenter.filter.clear("definitionId");
229
+ }
230
+ })), /*#__PURE__*/ react.createElement("div", {
231
+ className: "w-[240px]"
232
+ }, /*#__PURE__*/ react.createElement(DatePicker, {
233
+ type: "dateTimeTz",
234
+ placeholder: "Created from",
235
+ value: vm.list.filters.createdOn_gte,
236
+ onChange: (value)=>{
237
+ if (value) presenter.filter.set("createdOn_gte", value);
238
+ else presenter.filter.clear("createdOn_gte");
239
+ }
240
+ })), /*#__PURE__*/ react.createElement("div", {
241
+ className: "w-[240px]"
242
+ }, /*#__PURE__*/ react.createElement(DatePicker, {
243
+ type: "dateTimeTz",
244
+ placeholder: "Created to",
245
+ value: vm.list.filters.createdOn_lte,
246
+ onChange: (value)=>{
247
+ if (value) presenter.filter.set("createdOn_lte", value);
248
+ else presenter.filter.clear("createdOn_lte");
249
+ }
250
+ })), Object.keys(vm.list.filters).length > 0 && /*#__PURE__*/ react.createElement(Button, {
251
+ variant: "tertiary",
252
+ size: "sm",
253
+ onClick: ()=>presenter.filter.clearAll()
254
+ }, "Clear filters")), /*#__PURE__*/ react.createElement(Separator, null), /*#__PURE__*/ react.createElement("div", {
255
+ className: "flex-1 overflow-hidden"
256
+ }, vm.list.pagination.loading || 0 !== vm.list.rows.length ? /*#__PURE__*/ react.createElement(Scrollbar, {
257
+ onScrollFrame: (scrollFrame)=>loadMoreOnScroll({
258
+ scrollFrame
259
+ })
260
+ }, /*#__PURE__*/ react.createElement(DataTable, {
261
+ columns: columns,
262
+ data: vm.list.rows,
263
+ loading: vm.list.pagination.loading && 0 === vm.list.rows.length,
264
+ sorting: sorting,
265
+ onSortingChange: onSortingChange,
266
+ stickyHeader: true
267
+ })) : /*#__PURE__*/ react.createElement("div", {
268
+ className: "flex flex-col items-center justify-center h-full gap-md"
269
+ }, /*#__PURE__*/ react.createElement(Text, {
270
+ className: "text-neutral-strong"
271
+ }, "No tasks found.")))), presenter.selectedTask && /*#__PURE__*/ react.createElement(TaskDetailDrawer, {
272
+ task: presenter.selectedTask,
273
+ open: !!presenter.selectedTask,
274
+ onClose: ()=>presenter.selectTask(null),
275
+ onAbort: async (id)=>{
276
+ await presenter.abortTask(id);
277
+ showSnackbar("Task aborted.");
278
+ },
279
+ onDelete: async (id)=>{
280
+ await presenter.deleteTask(id);
281
+ showSnackbar("Task deleted.");
282
+ }
283
+ }));
284
+ });
285
+ const TaskExecutionsView = ()=>{
286
+ const container = useContainer();
287
+ const scopedContainer = useMemo(()=>{
288
+ const child = container.createChildContainer();
289
+ ListTasksFeature.register(child);
290
+ DeleteTaskFeature.register(child);
291
+ AbortTaskFeature.register(child);
292
+ ListDefinitionsFeature.register(child);
293
+ TaskPermissionsFeature.register(child);
294
+ TaskExecutionsPresenterFeature.register(child);
295
+ return child;
296
+ }, []);
297
+ return /*#__PURE__*/ react.createElement(DiContainerProvider, {
298
+ container: scopedContainer
299
+ }, /*#__PURE__*/ react.createElement(TaskExecutionsView_TaskExecutionsViewInner, null));
300
+ };
301
+ export { TaskExecutionsView };
302
+
303
+ //# sourceMappingURL=TaskExecutionsView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/TaskExecutions/components/TaskExecutionsView.js","sources":["../../../../../src/admin/presentation/TaskExecutions/components/TaskExecutionsView.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo } from \"react\";\nimport debounce from \"lodash/debounce.js\";\nimport { observer } from \"mobx-react-lite\";\nimport { DiContainerProvider, useContainer, useFeature } from \"@webiny/app\";\nimport type { DataTableSorting, OnDataTableSortingChange } from \"@webiny/admin-ui\";\nimport {\n Button,\n DataTable,\n DatePicker,\n DropdownMenu,\n Heading,\n IconButton,\n Input,\n Scrollbar,\n Select,\n Separator,\n Tag,\n Text,\n TimeAgo\n} from \"@webiny/admin-ui\";\nimport { useConfirmationDialog, useSnackbar } from \"@webiny/app-admin/hooks/index.js\";\nimport { ReactComponent as MoreVerticalIcon } from \"@webiny/icons/more_vert.svg\";\nimport { ReactComponent as DeleteIcon } from \"@webiny/icons/delete.svg\";\nimport { ReactComponent as StopCircleIcon } from \"@webiny/icons/stop_circle.svg\";\nimport { TaskExecutionsPresenterFeature } from \"../feature.js\";\nimport { ListTasksFeature } from \"~/admin/features/listTasks/feature.js\";\nimport { DeleteTaskFeature } from \"~/admin/features/deleteTask/feature.js\";\nimport { AbortTaskFeature } from \"~/admin/features/abortTask/feature.js\";\nimport { ListDefinitionsFeature } from \"~/admin/features/listDefinitions/feature.js\";\nimport { TaskPermissionsFeature } from \"~/admin/features/permissions/feature.js\";\nimport type { Task, TaskStatus } from \"~/admin/shared/types.js\";\nimport { TaskDetailDrawer } from \"~/admin/presentation/TaskDetail/components/TaskDetailDrawer.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 STATUS_OPTIONS: { label: string; value: TaskStatus }[] = [\n { label: \"Pending\", value: \"pending\" },\n { label: \"Running\", value: \"running\" },\n { label: \"Success\", value: \"success\" },\n { label: \"Failed\", value: \"failed\" },\n { label: \"Aborted\", value: \"aborted\" }\n];\n\nconst TaskExecutionsViewInner = observer(function TaskExecutionsViewInner() {\n const { presenter } = useFeature(TaskExecutionsPresenterFeature);\n const { showSnackbar } = useSnackbar();\n\n useEffect(() => {\n presenter.init();\n }, [presenter]);\n\n const { vm } = presenter;\n\n const loadMoreOnScroll = useMemo(\n () =>\n debounce(({ scrollFrame }: { scrollFrame: { top: number } }) => {\n if (scrollFrame.top > 0.8) {\n presenter.loadMore();\n }\n }, 200),\n [presenter]\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 { showConfirmation: showAbortConfirmation } = useConfirmationDialog({\n title: \"Abort Task\",\n message: \"Are you sure you want to abort this running task?\"\n });\n\n const sorting: DataTableSorting = useMemo(() => {\n const sort = vm.list.sort;\n if (!sort || !sort.field) {\n return [];\n }\n return [{ id: sort.field, desc: sort.direction === \"DESC\" }];\n }, [vm.list.sort]);\n\n const onSortingChange: OnDataTableSortingChange = useCallback(\n updater => {\n const next = typeof updater === \"function\" ? updater(sorting) : updater;\n if (next.length > 0) {\n const { id, desc } = next[0];\n presenter.sort.set(id, desc ? \"DESC\" : \"ASC\");\n }\n },\n [sorting, presenter.sort]\n );\n\n const columns = useMemo(\n () => ({\n name: {\n header: \"Name\",\n cell: (row: Task) => (\n <Text\n className=\"cursor-pointer text-primary hover:underline\"\n onClick={() => presenter.selectTask(row)}\n >\n {row.name || row.definitionId}\n </Text>\n ),\n enableSorting: true,\n size: 200\n },\n definitionId: {\n header: \"Definition\",\n cell: (row: Task) => {\n const def = vm.definitionOptions.find(d => d.value === row.definitionId);\n return <Text size=\"sm\">{def ? def.label : row.definitionId}</Text>;\n },\n enableSorting: true,\n size: 160\n },\n taskStatus: {\n header: \"Status\",\n cell: (row: Task) => (\n <Tag\n variant={STATUS_TAG_VARIANT[row.taskStatus] ?? \"neutral-light\"}\n content={row.taskStatus}\n />\n ),\n enableSorting: true,\n size: 100\n },\n createdOn: {\n header: \"Created\",\n cell: (row: Task) =>\n row.createdOn ? <TimeAgo datetime={row.createdOn} /> : <Text size=\"sm\">—</Text>,\n enableSorting: true,\n size: 120\n },\n startedOn: {\n header: \"Started\",\n cell: (row: Task) =>\n row.startedOn ? <TimeAgo datetime={row.startedOn} /> : <Text size=\"sm\">—</Text>,\n enableSorting: true,\n size: 120\n },\n finishedOn: {\n header: \"Finished\",\n cell: (row: Task) =>\n row.finishedOn ? (\n <TimeAgo datetime={row.finishedOn} />\n ) : (\n <Text size=\"sm\">—</Text>\n ),\n enableSorting: true,\n size: 120\n },\n actions: {\n header: \" \",\n cell: (row: Task) => {\n const isRunning = row.taskStatus === \"running\";\n const isTerminal =\n row.taskStatus === \"success\" ||\n row.taskStatus === \"failed\" ||\n row.taskStatus === \"aborted\";\n\n if (!isRunning && !isTerminal) {\n return null;\n }\n\n return (\n <DropdownMenu\n trigger={\n <IconButton\n icon={<MoreVerticalIcon />}\n variant=\"ghost\"\n size=\"sm\"\n aria-label=\"Actions\"\n />\n }\n >\n {isRunning && (\n <DropdownMenu.Item\n icon={<StopCircleIcon />}\n onClick={() => {\n showAbortConfirmation(() =>\n presenter.abortTask(row.id).then(() => {\n showSnackbar(\"Task aborted.\");\n })\n );\n }}\n text=\"Abort\"\n />\n )}\n {isTerminal && vm.permissions.canDelete && (\n <>\n {isRunning && <DropdownMenu.Separator />}\n <DropdownMenu.Item\n icon={<DeleteIcon />}\n onClick={() => {\n showDeleteConfirmation(() =>\n presenter.deleteTask(row.id).then(() => {\n showSnackbar(\"Task deleted.\");\n })\n );\n }}\n text=\"Delete\"\n />\n </>\n )}\n </DropdownMenu>\n );\n },\n size: 56,\n enableSorting: false,\n enableHiding: false,\n enableResizing: false\n }\n }),\n [\n vm.permissions,\n vm.definitionOptions,\n presenter,\n showDeleteConfirmation,\n showAbortConfirmation,\n showSnackbar\n ]\n );\n\n return (\n <>\n <div className=\"flex flex-col h-main-content\">\n <div className=\"flex items-center justify-between py-sm px-md\">\n <Heading level={5}>Task Executions</Heading>\n </div>\n <Separator />\n <div className=\"flex items-center gap-sm px-md py-xs flex-wrap\">\n <div className=\"w-[240px]\">\n <Input\n placeholder=\"Search by name...\"\n value={vm.list.search}\n onChange={value => {\n presenter.search.set(value);\n }}\n />\n </div>\n <div className=\"w-[160px]\">\n <Select\n placeholder=\"Status\"\n options={STATUS_OPTIONS}\n value={(vm.list.filters.taskStatus_in as string) ?? \"\"}\n onChange={value => {\n if (value) {\n presenter.filter.set(\"taskStatus_in\", value);\n } else {\n presenter.filter.clear(\"taskStatus_in\");\n }\n }}\n />\n </div>\n {vm.definitionOptions.length > 0 && (\n <div className=\"w-[200px]\">\n <Select\n placeholder=\"Definition\"\n options={vm.definitionOptions}\n value={vm.list.filters.definitionId as string}\n onChange={value => {\n if (value) {\n presenter.filter.set(\"definitionId\", value);\n } else {\n presenter.filter.clear(\"definitionId\");\n }\n }}\n />\n </div>\n )}\n <div className=\"w-[240px]\">\n <DatePicker\n type=\"dateTimeTz\"\n placeholder=\"Created from\"\n value={vm.list.filters.createdOn_gte as string}\n onChange={value => {\n if (value) {\n presenter.filter.set(\"createdOn_gte\", value);\n } else {\n presenter.filter.clear(\"createdOn_gte\");\n }\n }}\n />\n </div>\n <div className=\"w-[240px]\">\n <DatePicker\n type=\"dateTimeTz\"\n placeholder=\"Created to\"\n value={vm.list.filters.createdOn_lte as string}\n onChange={value => {\n if (value) {\n presenter.filter.set(\"createdOn_lte\", value);\n } else {\n presenter.filter.clear(\"createdOn_lte\");\n }\n }}\n />\n </div>\n {Object.keys(vm.list.filters).length > 0 && (\n <Button\n variant=\"tertiary\"\n size=\"sm\"\n onClick={() => presenter.filter.clearAll()}\n >\n Clear filters\n </Button>\n )}\n </div>\n <Separator />\n <div className=\"flex-1 overflow-hidden\">\n {!vm.list.pagination.loading && vm.list.rows.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center h-full gap-md\">\n <Text className=\"text-neutral-strong\">No tasks found.</Text>\n </div>\n ) : (\n <Scrollbar onScrollFrame={scrollFrame => loadMoreOnScroll({ scrollFrame })}>\n <DataTable<Task>\n columns={columns}\n data={vm.list.rows}\n loading={vm.list.pagination.loading && vm.list.rows.length === 0}\n sorting={sorting}\n onSortingChange={onSortingChange}\n stickyHeader\n />\n </Scrollbar>\n )}\n </div>\n </div>\n {presenter.selectedTask && (\n <TaskDetailDrawer\n task={presenter.selectedTask}\n open={!!presenter.selectedTask}\n onClose={() => presenter.selectTask(null)}\n onAbort={async (id: string) => {\n await presenter.abortTask(id);\n showSnackbar(\"Task aborted.\");\n }}\n onDelete={async (id: string) => {\n await presenter.deleteTask(id);\n showSnackbar(\"Task deleted.\");\n }}\n />\n )}\n </>\n );\n});\n\nexport const TaskExecutionsView = () => {\n const container = useContainer();\n\n const scopedContainer = useMemo(() => {\n const child = container.createChildContainer();\n ListTasksFeature.register(child);\n DeleteTaskFeature.register(child);\n AbortTaskFeature.register(child);\n ListDefinitionsFeature.register(child);\n TaskPermissionsFeature.register(child);\n TaskExecutionsPresenterFeature.register(child);\n return child;\n }, []);\n\n return (\n <DiContainerProvider container={scopedContainer}>\n <TaskExecutionsViewInner />\n </DiContainerProvider>\n );\n};\n"],"names":["STATUS_TAG_VARIANT","STATUS_OPTIONS","TaskExecutionsViewInner","observer","presenter","useFeature","TaskExecutionsPresenterFeature","showSnackbar","useSnackbar","useEffect","vm","loadMoreOnScroll","useMemo","debounce","scrollFrame","showDeleteConfirmation","useConfirmationDialog","showAbortConfirmation","sorting","sort","onSortingChange","useCallback","updater","next","id","desc","columns","row","Text","def","d","Tag","TimeAgo","isRunning","isTerminal","DropdownMenu","IconButton","MoreVerticalIcon","StopCircleIcon","DeleteIcon","Heading","Separator","Input","value","Select","DatePicker","Object","Button","Scrollbar","DataTable","TaskDetailDrawer","TaskExecutionsView","container","useContainer","scopedContainer","child","ListTasksFeature","DeleteTaskFeature","AbortTaskFeature","ListDefinitionsFeature","TaskPermissionsFeature","DiContainerProvider"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const TaskExecutionsPresenterFeature: import("@webiny/feature/admin").FeatureDefinition<{
2
+ presenter: import("./abstractions.js").ITaskExecutionsPresenter;
3
+ }, []>;
@@ -0,0 +1,17 @@
1
+ import { createFeature } from "@webiny/feature/admin";
2
+ import { TaskExecutionsPresenter } from "./abstractions.js";
3
+ import { TaskExecutionsPresenter as external_TaskExecutionsPresenter_js_TaskExecutionsPresenter } from "./TaskExecutionsPresenter.js";
4
+ const TaskExecutionsPresenterFeature = createFeature({
5
+ name: "BackgroundTasks/TaskExecutionsPresenter",
6
+ register (container) {
7
+ container.register(external_TaskExecutionsPresenter_js_TaskExecutionsPresenter).inSingletonScope();
8
+ },
9
+ resolve (container) {
10
+ return {
11
+ presenter: container.resolve(TaskExecutionsPresenter)
12
+ };
13
+ }
14
+ });
15
+ export { TaskExecutionsPresenterFeature };
16
+
17
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/TaskExecutions/feature.js","sources":["../../../../src/admin/presentation/TaskExecutions/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { TaskExecutionsPresenter as PresenterAbstraction } from \"./abstractions.js\";\nimport { TaskExecutionsPresenter } from \"./TaskExecutionsPresenter.js\";\n\nexport const TaskExecutionsPresenterFeature = createFeature({\n name: \"BackgroundTasks/TaskExecutionsPresenter\",\n register(container) {\n container.register(TaskExecutionsPresenter).inSingletonScope();\n },\n resolve(container) {\n return { presenter: container.resolve(PresenterAbstraction) };\n }\n});\n"],"names":["TaskExecutionsPresenterFeature","createFeature","container","TaskExecutionsPresenter","PresenterAbstraction"],"mappings":";;;AAIO,MAAMA,iCAAiCC,cAAc;IACxD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,6DAAyB,gBAAgB;IAChE;IACA,SAAQD,SAAS;QACb,OAAO;YAAE,WAAWA,UAAU,OAAO,CAACE;QAAsB;IAChE;AACJ"}
@@ -0,0 +1,2 @@
1
+ export { TaskExecutionsPresenter } from "./abstractions.js";
2
+ export { TaskExecutionsPresenterFeature } from "./feature.js";
@@ -0,0 +1,2 @@
1
+ export { TaskExecutionsPresenter } from "./abstractions.js";
2
+ export { TaskExecutionsPresenterFeature } from "./feature.js";
@@ -0,0 +1,12 @@
1
+ export declare const HasPermission: import("react").FC<import("@webiny/app-admin/permissions").HasPermissionProps<{
2
+ readonly prefix: "backgroundTasks";
3
+ readonly fullAccess: true;
4
+ readonly entities: [{
5
+ readonly id: "task";
6
+ readonly permission: "backgroundTasks.task";
7
+ readonly scopes: ["full"];
8
+ readonly actions: [{
9
+ readonly name: "rwd";
10
+ }];
11
+ }];
12
+ }>>;
@@ -0,0 +1,6 @@
1
+ import { createHasPermission } from "@webiny/app-admin/exports/admin/security.js";
2
+ import { TaskPermissions } from "../../features/permissions/abstractions.js";
3
+ const HasPermission = createHasPermission(TaskPermissions);
4
+ export { HasPermission };
5
+
6
+ //# sourceMappingURL=HasPermission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/security/HasPermission.js","sources":["../../../../src/admin/presentation/security/HasPermission.tsx"],"sourcesContent":["import { createHasPermission } from \"@webiny/app-admin/exports/admin/security.js\";\nimport { TaskPermissions } from \"~/admin/features/permissions/abstractions.js\";\nimport { BACKGROUND_TASK_PERMISSIONS_SCHEMA } from \"~/admin/permissions.js\";\n\nexport const HasPermission =\n createHasPermission<typeof BACKGROUND_TASK_PERMISSIONS_SCHEMA>(TaskPermissions);\n"],"names":["HasPermission","createHasPermission","TaskPermissions"],"mappings":";;AAIO,MAAMA,gBACTC,oBAA+DC"}
@@ -0,0 +1,12 @@
1
+ export declare const usePermissions: () => {
2
+ canAccess: (entityId: "task") => boolean;
3
+ canAction: (action: string, entityId: "task") => boolean;
4
+ } & {
5
+ canRead: (entityId: "task") => boolean;
6
+ canCreate: (entityId: "task") => boolean;
7
+ canEdit: (entityId: "task", item?: import("@webiny/app-admin/permissions").OwnableItem) => boolean;
8
+ canDelete: (entityId: "task", item?: import("@webiny/app-admin/permissions").OwnableItem) => boolean;
9
+ } & {
10
+ canPublish: (entityId: string) => boolean;
11
+ canUnpublish: (entityId: string) => boolean;
12
+ };
@@ -0,0 +1,6 @@
1
+ import { createUsePermissions } from "@webiny/app-admin/exports/admin/security.js";
2
+ import { TaskPermissions } from "../../features/permissions/abstractions.js";
3
+ const usePermissions = createUsePermissions(TaskPermissions);
4
+ export { usePermissions };
5
+
6
+ //# sourceMappingURL=usePermissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/security/usePermissions.js","sources":["../../../../src/admin/presentation/security/usePermissions.ts"],"sourcesContent":["import { createUsePermissions } from \"@webiny/app-admin/exports/admin/security.js\";\nimport { TaskPermissions } from \"~/admin/features/permissions/abstractions.js\";\n\nexport const usePermissions = createUsePermissions(TaskPermissions);\n"],"names":["usePermissions","createUsePermissions","TaskPermissions"],"mappings":";;AAGO,MAAMA,iBAAiBC,qBAAqBC"}
@@ -0,0 +1,5 @@
1
+ import { Route } from "@webiny/app-admin";
2
+ export declare const Routes: {
3
+ Definitions: Route<undefined>;
4
+ Executions: Route<undefined>;
5
+ };
@@ -0,0 +1,14 @@
1
+ import { Route } from "@webiny/app-admin";
2
+ const Routes = {
3
+ Definitions: new Route({
4
+ name: "BackgroundTasks/Definitions",
5
+ path: "/background-tasks/definitions"
6
+ }),
7
+ Executions: new Route({
8
+ name: "BackgroundTasks/Executions",
9
+ path: "/background-tasks/executions"
10
+ })
11
+ };
12
+ export { Routes };
13
+
14
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/routes.js","sources":["../../src/admin/routes.ts"],"sourcesContent":["import { Route } from \"@webiny/app-admin\";\n\nexport const Routes = {\n Definitions: new Route({\n name: \"BackgroundTasks/Definitions\",\n path: \"/background-tasks/definitions\"\n }),\n Executions: new Route({\n name: \"BackgroundTasks/Executions\",\n path: \"/background-tasks/executions\"\n })\n};\n"],"names":["Routes","Route"],"mappings":";AAEO,MAAMA,SAAS;IAClB,aAAa,IAAIC,MAAM;QACnB,MAAM;QACN,MAAM;IACV;IACA,YAAY,IAAIA,MAAM;QAClB,MAAM;QACN,MAAM;IACV;AACJ"}
@@ -0,0 +1,15 @@
1
+ import type { TaskRun } from "@webiny/sdk";
2
+ export type TaskStatus = "pending" | "running" | "success" | "failed" | "aborted";
3
+ export type Task = Omit<TaskRun, "taskStatus"> & {
4
+ taskStatus: TaskStatus;
5
+ createdOn?: string;
6
+ savedOn?: string;
7
+ createdBy?: {
8
+ id: string;
9
+ displayName: string;
10
+ type?: string;
11
+ };
12
+ };
13
+ export type { TaskLog } from "@webiny/sdk";
14
+ export type { TaskLogItem } from "@webiny/sdk";
15
+ export type { TaskDefinition } from "@webiny/sdk";
File without changes
package/api/index.d.ts ADDED
File without changes
package/api/index.js ADDED
File without changes
package/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "./admin/index.js";
package/index.js ADDED
@@ -0,0 +1 @@
1
+ export * from "./admin/index.js";
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@webiny/background-tasks",
3
+ "version": "0.0.0-unstable.7be00a75a9",
4
+ "type": "module",
5
+ "exports": {
6
+ ".": "./index.js",
7
+ "./api": "./api/index.js",
8
+ "./admin/*": "./admin/*",
9
+ "./*": "./*"
10
+ },
11
+ "description": "Background Tasks feature for Webiny",
12
+ "keywords": [
13
+ "background-tasks:base"
14
+ ],
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://github.com/webiny/webiny-js.git",
18
+ "directory": "packages/background-tasks"
19
+ },
20
+ "license": "MIT",
21
+ "dependencies": {
22
+ "@webiny/admin-ui": "0.0.0-unstable.7be00a75a9",
23
+ "@webiny/app": "0.0.0-unstable.7be00a75a9",
24
+ "@webiny/app-admin": "0.0.0-unstable.7be00a75a9",
25
+ "@webiny/feature": "0.0.0-unstable.7be00a75a9",
26
+ "@webiny/icons": "0.0.0-unstable.7be00a75a9",
27
+ "@webiny/sdk": "0.0.0-unstable.7be00a75a9",
28
+ "lodash": "4.18.1",
29
+ "mobx": "6.15.3",
30
+ "mobx-react-lite": "4.1.1",
31
+ "react": "18.3.1",
32
+ "react-dom": "18.3.1"
33
+ },
34
+ "devDependencies": {
35
+ "@webiny/build-tools": "0.0.0-unstable.7be00a75a9",
36
+ "@webiny/project-utils": "0.0.0-unstable.7be00a75a9",
37
+ "typescript": "6.0.3"
38
+ },
39
+ "publishConfig": {
40
+ "access": "public"
41
+ },
42
+ "webiny": {
43
+ "publishFrom": "dist"
44
+ }
45
+ }