@reltio/components 1.4.2189 → 1.4.2191
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ProfileBand/ProfileBand.d.ts +5 -4
- package/ProfileBand/ProfileBand.js +4 -5
- package/ProfileBand/ProfileBand.module.css.js +9 -0
- package/cjs/ProfileBand/ProfileBand.d.ts +5 -4
- package/cjs/ProfileBand/ProfileBand.js +14 -15
- package/cjs/ProfileBand/ProfileBand.module.css.js +9 -0
- package/cjs/contexts/MdmModuleContext/context.d.ts +2 -0
- package/cjs/contexts/MdmModuleContext/hooks.d.ts +1 -0
- package/cjs/contexts/MdmModuleContext/hooks.js +3 -1
- package/cjs/contexts/MdmModuleContext/index.d.ts +1 -1
- package/cjs/contexts/MdmModuleContext/index.js +2 -1
- package/cjs/features/history/HistoryRow/styles.d.ts +1 -1
- package/cjs/features/workflow/AddWorkflowDialog/AddWorkflowDialog.spec.js +67 -0
- package/cjs/features/workflow/ChangeRequestEditor/ChangeRequestEditor.d.ts +8 -0
- package/cjs/features/workflow/ChangeRequestEditor/ChangeRequestEditor.js +18 -0
- package/cjs/features/workflow/ChangeRequestEditor/ChangeRequestEditor.module.css.js +9 -0
- package/cjs/features/workflow/ChangeRequestEditor/index.d.ts +1 -0
- package/cjs/features/workflow/ChangeRequestEditor/index.js +5 -0
- package/cjs/features/workflow/ReviewDCRButton/ReviewDCRButton.d.ts +6 -0
- package/cjs/features/workflow/ReviewDCRButton/ReviewDCRButton.js +19 -0
- package/cjs/features/workflow/ReviewDCRButton/ReviewDCRButton.module.css.js +9 -0
- package/cjs/features/workflow/ReviewDCRButton/index.d.ts +1 -0
- package/cjs/features/workflow/ReviewDCRButton/index.js +5 -0
- package/cjs/features/workflow/ReviewDCRDialog/ReviewDCRDialog.d.ts +11 -0
- package/cjs/features/workflow/ReviewDCRDialog/ReviewDCRDialog.js +63 -0
- package/cjs/features/workflow/ReviewDCRDialog/ReviewDCRDialog.module.css.js +9 -0
- package/cjs/features/workflow/ReviewDCRDialog/components/DCRChangesSummary/DCRChangesSummary.d.ts +8 -0
- package/cjs/features/workflow/ReviewDCRDialog/components/DCRChangesSummary/DCRChangesSummary.js +73 -0
- package/cjs/features/workflow/ReviewDCRDialog/components/DCRChangesSummary/DCRChangesSummary.module.css.js +9 -0
- package/cjs/features/workflow/ReviewDCRDialog/components/DCRChangesSummary/index.d.ts +1 -0
- package/cjs/features/workflow/ReviewDCRDialog/components/DCRChangesSummary/index.js +5 -0
- package/cjs/features/workflow/ReviewDCRDialog/components/DCRSummaryInfo/DCRSummaryInfo.d.ts +9 -0
- package/cjs/features/workflow/ReviewDCRDialog/components/DCRSummaryInfo/DCRSummaryInfo.js +40 -0
- package/cjs/features/workflow/ReviewDCRDialog/components/DCRSummaryInfo/DCRSummaryInfo.module.css.js +9 -0
- package/cjs/features/workflow/ReviewDCRDialog/helpers/calculateDCRChanges.d.ts +3 -0
- package/cjs/features/workflow/ReviewDCRDialog/helpers/calculateDCRChanges.js +19 -0
- package/cjs/features/workflow/ReviewDCRDialog/helpers/calculateDCRChanges.test.d.ts +1 -0
- package/cjs/features/workflow/ReviewDCRDialog/helpers/calculateDCRChanges.test.js +124 -0
- package/cjs/features/workflow/ReviewDCRDialog/helpers/index.d.ts +1 -0
- package/cjs/features/workflow/ReviewDCRDialog/helpers/index.js +5 -0
- package/cjs/features/workflow/ReviewDCRDialog/index.d.ts +1 -0
- package/cjs/features/workflow/ReviewDCRDialog/index.js +5 -0
- package/cjs/features/workflow/TaskActionButtons/TaskActionButtons.spec.js +1 -1
- package/cjs/features/workflow/WorkflowActionButtons/WorkflowActionButtons.d.ts +12 -0
- package/cjs/features/workflow/WorkflowActionButtons/WorkflowActionButtons.js +57 -0
- package/cjs/features/workflow/WorkflowActionButtons/index.d.ts +1 -0
- package/cjs/features/workflow/WorkflowActionButtons/index.js +5 -0
- package/cjs/features/workflow/WorkflowComments/WorkflowComments.d.ts +7 -1
- package/cjs/features/workflow/WorkflowComments/WorkflowComments.js +15 -31
- package/cjs/features/workflow/WorkflowComments/WorkflowComments.module.css.js +9 -0
- package/cjs/features/workflow/WorkflowTaskCard/components/DataChangeRequestTaskCard/DataChangeRequestTaskCard.js +46 -6
- package/cjs/features/workflow/WorkflowTaskCard/components/DataChangeRequestTaskCard/DataChangeRequestTaskCard.spec.js +80 -5
- package/cjs/features/workflow/WorkflowTaskCard/components/GenericWorkflowTaskCard/GenericWorkflowTaskCard.d.ts +2 -1
- package/cjs/features/workflow/WorkflowTaskCard/components/GenericWorkflowTaskCard/GenericWorkflowTaskCard.js +30 -29
- package/cjs/features/workflow/WorkflowTaskCard/components/GenericWorkflowTaskCard/GenericWorkflowTaskCard.module.css.js +9 -0
- package/cjs/features/workflow/WorkflowTaskCard/components/GenericWorkflowTaskCard/GenericWorkflowTaskCard.spec.js +124 -2
- package/cjs/features/workflow/WorkflowTaskCard/components/PotentialMatchTaskCard/PotentialMatchTaskCard.spec.js +69 -3
- package/cjs/features/workflow/index.d.ts +2 -0
- package/cjs/features/workflow/index.js +5 -1
- package/cjs/icons/RequestSummary.d.ts +3 -0
- package/cjs/icons/RequestSummary.js +24 -0
- package/cjs/icons/ReviewDCR.d.ts +3 -0
- package/cjs/icons/ReviewDCR.js +22 -0
- package/contexts/MdmModuleContext/context.d.ts +2 -0
- package/contexts/MdmModuleContext/hooks.d.ts +1 -0
- package/contexts/MdmModuleContext/hooks.js +1 -0
- package/contexts/MdmModuleContext/index.d.ts +1 -1
- package/contexts/MdmModuleContext/index.js +1 -1
- package/features/history/HistoryRow/styles.d.ts +1 -1
- package/features/workflow/AddWorkflowDialog/AddWorkflowDialog.spec.js +67 -0
- package/features/workflow/ChangeRequestEditor/ChangeRequestEditor.d.ts +8 -0
- package/features/workflow/ChangeRequestEditor/ChangeRequestEditor.js +11 -0
- package/features/workflow/ChangeRequestEditor/ChangeRequestEditor.module.css.js +9 -0
- package/features/workflow/ChangeRequestEditor/index.d.ts +1 -0
- package/features/workflow/ChangeRequestEditor/index.js +1 -0
- package/features/workflow/ReviewDCRButton/ReviewDCRButton.d.ts +6 -0
- package/features/workflow/ReviewDCRButton/ReviewDCRButton.js +12 -0
- package/features/workflow/ReviewDCRButton/ReviewDCRButton.module.css.js +9 -0
- package/features/workflow/ReviewDCRButton/index.d.ts +1 -0
- package/features/workflow/ReviewDCRButton/index.js +1 -0
- package/features/workflow/ReviewDCRDialog/ReviewDCRDialog.d.ts +11 -0
- package/features/workflow/ReviewDCRDialog/ReviewDCRDialog.js +56 -0
- package/features/workflow/ReviewDCRDialog/ReviewDCRDialog.module.css.js +9 -0
- package/features/workflow/ReviewDCRDialog/components/DCRChangesSummary/DCRChangesSummary.d.ts +8 -0
- package/features/workflow/ReviewDCRDialog/components/DCRChangesSummary/DCRChangesSummary.js +43 -0
- package/features/workflow/ReviewDCRDialog/components/DCRChangesSummary/DCRChangesSummary.module.css.js +9 -0
- package/features/workflow/ReviewDCRDialog/components/DCRChangesSummary/index.d.ts +1 -0
- package/features/workflow/ReviewDCRDialog/components/DCRChangesSummary/index.js +1 -0
- package/features/workflow/ReviewDCRDialog/components/DCRSummaryInfo/DCRSummaryInfo.d.ts +9 -0
- package/features/workflow/ReviewDCRDialog/components/DCRSummaryInfo/DCRSummaryInfo.js +33 -0
- package/features/workflow/ReviewDCRDialog/components/DCRSummaryInfo/DCRSummaryInfo.module.css.js +9 -0
- package/features/workflow/ReviewDCRDialog/helpers/calculateDCRChanges.d.ts +3 -0
- package/features/workflow/ReviewDCRDialog/helpers/calculateDCRChanges.js +15 -0
- package/features/workflow/ReviewDCRDialog/helpers/calculateDCRChanges.test.d.ts +1 -0
- package/features/workflow/ReviewDCRDialog/helpers/calculateDCRChanges.test.js +122 -0
- package/features/workflow/ReviewDCRDialog/helpers/index.d.ts +1 -0
- package/features/workflow/ReviewDCRDialog/helpers/index.js +1 -0
- package/features/workflow/ReviewDCRDialog/index.d.ts +1 -0
- package/features/workflow/ReviewDCRDialog/index.js +1 -0
- package/features/workflow/TaskActionButtons/TaskActionButtons.spec.js +1 -1
- package/features/workflow/WorkflowActionButtons/WorkflowActionButtons.d.ts +12 -0
- package/features/workflow/WorkflowActionButtons/WorkflowActionButtons.js +27 -0
- package/features/workflow/WorkflowActionButtons/index.d.ts +1 -0
- package/features/workflow/WorkflowActionButtons/index.js +1 -0
- package/features/workflow/WorkflowComments/WorkflowComments.d.ts +7 -1
- package/features/workflow/WorkflowComments/WorkflowComments.js +13 -29
- package/features/workflow/WorkflowComments/WorkflowComments.module.css.js +9 -0
- package/features/workflow/WorkflowTaskCard/components/DataChangeRequestTaskCard/DataChangeRequestTaskCard.js +23 -6
- package/features/workflow/WorkflowTaskCard/components/DataChangeRequestTaskCard/DataChangeRequestTaskCard.spec.js +82 -7
- package/features/workflow/WorkflowTaskCard/components/GenericWorkflowTaskCard/GenericWorkflowTaskCard.d.ts +2 -1
- package/features/workflow/WorkflowTaskCard/components/GenericWorkflowTaskCard/GenericWorkflowTaskCard.js +8 -7
- package/features/workflow/WorkflowTaskCard/components/GenericWorkflowTaskCard/GenericWorkflowTaskCard.module.css.js +9 -0
- package/features/workflow/WorkflowTaskCard/components/GenericWorkflowTaskCard/GenericWorkflowTaskCard.spec.js +125 -3
- package/features/workflow/WorkflowTaskCard/components/PotentialMatchTaskCard/PotentialMatchTaskCard.spec.js +71 -5
- package/features/workflow/index.d.ts +2 -0
- package/features/workflow/index.js +2 -0
- package/icons/RequestSummary.d.ts +3 -0
- package/icons/RequestSummary.js +19 -0
- package/icons/ReviewDCR.d.ts +3 -0
- package/icons/ReviewDCR.js +17 -0
- package/package.json +2 -2
- package/ProfileBand/styles.d.ts +0 -1
- package/ProfileBand/styles.js +0 -87
- package/cjs/ProfileBand/styles.d.ts +0 -1
- package/cjs/ProfileBand/styles.js +0 -90
- package/cjs/features/workflow/WorkflowComments/styles.d.ts +0 -1
- package/cjs/features/workflow/WorkflowComments/styles.js +0 -42
- package/cjs/features/workflow/WorkflowTaskCard/components/GenericWorkflowTaskCard/styles.d.ts +0 -3
- package/cjs/features/workflow/WorkflowTaskCard/components/GenericWorkflowTaskCard/styles.js +0 -113
- package/features/workflow/WorkflowComments/styles.d.ts +0 -1
- package/features/workflow/WorkflowComments/styles.js +0 -39
- package/features/workflow/WorkflowTaskCard/components/GenericWorkflowTaskCard/styles.d.ts +0 -3
- package/features/workflow/WorkflowTaskCard/components/GenericWorkflowTaskCard/styles.js +0 -110
|
@@ -69,8 +69,11 @@ var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
|
69
69
|
var MdmModuleContext_1 = require("../../../../../contexts/MdmModuleContext");
|
|
70
70
|
var CommentDialogContext_1 = require("../../../../../contexts/CommentDialogContext");
|
|
71
71
|
var DataChangeRequestTaskCard_1 = require("./DataChangeRequestTaskCard");
|
|
72
|
-
|
|
72
|
+
var WorkflowTasksContext_1 = require("../../../../../contexts/WorkflowTasksContext");
|
|
73
|
+
jest.mock('@reltio/mdm-sdk', function () { return (__assign(__assign({}, jest.requireActual('@reltio/mdm-sdk')), { getDataChangeRequest: jest.fn(), getEntitiesByUris: jest.fn(), runTaskAction: jest.fn() })); });
|
|
73
74
|
jest.mock('../../../../../contexts/MdmModuleContext', function () { return (__assign(__assign({}, jest.requireActual('../../../../../contexts/MdmModuleContext')), { useMdmMetadata: jest.fn() })); });
|
|
75
|
+
var onActionSuccess = jest.fn();
|
|
76
|
+
var workflowTaskContextValue = { onActionSuccess: onActionSuccess };
|
|
74
77
|
describe('DataChangeRequestTaskCard tests', function () {
|
|
75
78
|
var _a, _b;
|
|
76
79
|
var metadata = {
|
|
@@ -180,7 +183,7 @@ describe('DataChangeRequestTaskCard tests', function () {
|
|
|
180
183
|
var dcrUri = "changeRequests/".concat(dcrId);
|
|
181
184
|
var dueDate = 1731825314640;
|
|
182
185
|
var newStartDate = (0, moment_1.default)('11/15/2024', 'MM/DD/YYYY').valueOf();
|
|
183
|
-
var
|
|
186
|
+
var defaultTask = {
|
|
184
187
|
assignee: userName,
|
|
185
188
|
processInstanceId: '60260030',
|
|
186
189
|
processType: 'dataChangeRequestReview',
|
|
@@ -260,17 +263,32 @@ describe('DataChangeRequestTaskCard tests', function () {
|
|
|
260
263
|
label: relationEntityLabel
|
|
261
264
|
}
|
|
262
265
|
];
|
|
263
|
-
var
|
|
266
|
+
var tenant = { id: 't1', name: 't1' };
|
|
267
|
+
var workflowPath = 'workflowPath';
|
|
268
|
+
var workflowEnvironmentUrl = 'workflowEnvironmentUrl';
|
|
269
|
+
var mdmValues = {
|
|
270
|
+
user: {
|
|
271
|
+
username: userName
|
|
272
|
+
},
|
|
273
|
+
tenant: tenant,
|
|
274
|
+
workflowPath: workflowPath,
|
|
275
|
+
workflowEnvironmentUrl: workflowEnvironmentUrl
|
|
276
|
+
};
|
|
277
|
+
var setUp = function (_a) {
|
|
278
|
+
var _b = _a === void 0 ? {} : _a, _c = _b.task, task = _c === void 0 ? defaultTask : _c;
|
|
264
279
|
var user = user_event_1.default.setup();
|
|
265
280
|
var Providers = function (_a) {
|
|
266
281
|
var children = _a.children;
|
|
267
|
-
return (react_1.default.createElement(
|
|
268
|
-
react_1.default.createElement(
|
|
282
|
+
return (react_1.default.createElement(MdmModuleContext_1.MdmModuleProvider, { values: mdmValues },
|
|
283
|
+
react_1.default.createElement(LocalizationProvider_1.LocalizationProvider, { dateAdapter: AdapterMoment_1.AdapterMoment },
|
|
284
|
+
react_1.default.createElement(WorkflowTasksContext_1.WorkflowTasksContext.Provider, { value: workflowTaskContextValue },
|
|
285
|
+
react_1.default.createElement(CommentDialogContext_1.CommentDialogProvider, null, children)))));
|
|
269
286
|
};
|
|
270
287
|
return __assign(__assign({}, (0, react_2.render)(react_1.default.createElement(DataChangeRequestTaskCard_1.DataChangeRequestTaskCard, { task: task }), { wrapper: Providers })), { user: user });
|
|
271
288
|
};
|
|
272
289
|
beforeAll(function () {
|
|
273
290
|
mdm_sdk_1.getEntitiesByUris.mockResolvedValue(entities);
|
|
291
|
+
mdm_sdk_1.runTaskAction.mockResolvedValue(null);
|
|
274
292
|
});
|
|
275
293
|
beforeEach(function () {
|
|
276
294
|
MdmModuleContext_1.useMdmMetadata.mockReturnValue(metadata);
|
|
@@ -517,4 +535,61 @@ describe('DataChangeRequestTaskCard tests', function () {
|
|
|
517
535
|
}
|
|
518
536
|
});
|
|
519
537
|
}); });
|
|
538
|
+
describe('Required comments', function () {
|
|
539
|
+
it('should show comment dialog when user runs action and comment is required', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
540
|
+
var task, user, dialog, comment, commentInput;
|
|
541
|
+
return __generator(this, function (_a) {
|
|
542
|
+
switch (_a.label) {
|
|
543
|
+
case 0:
|
|
544
|
+
task = __assign(__assign({}, defaultTask), { possibleActions: [
|
|
545
|
+
{
|
|
546
|
+
action: 'Approve',
|
|
547
|
+
label: 'Approve',
|
|
548
|
+
commentRequired: true
|
|
549
|
+
},
|
|
550
|
+
{
|
|
551
|
+
action: 'Reject',
|
|
552
|
+
label: 'Reject',
|
|
553
|
+
commentRequired: false
|
|
554
|
+
}
|
|
555
|
+
] });
|
|
556
|
+
mdm_sdk_1.getDataChangeRequest.mockResolvedValue(dcr);
|
|
557
|
+
user = setUp({ task: task }).user;
|
|
558
|
+
return [4 /*yield*/, user.click(react_2.screen.getByTestId('task-actions'))];
|
|
559
|
+
case 1:
|
|
560
|
+
_a.sent();
|
|
561
|
+
return [4 /*yield*/, user.click(react_2.screen.getByText(task.possibleActions[0].label))];
|
|
562
|
+
case 2:
|
|
563
|
+
_a.sent();
|
|
564
|
+
expect(mdm_sdk_1.runTaskAction).not.toHaveBeenCalled();
|
|
565
|
+
dialog = react_2.screen.getAllByRole('presentation')[1];
|
|
566
|
+
expect((0, react_2.within)(dialog).getByText('Please provide a comment for your action')).toBeInTheDocument();
|
|
567
|
+
expect((0, react_2.within)(dialog).getByText('Type a comment')).toBeInTheDocument();
|
|
568
|
+
expect((0, react_2.within)(dialog).getByText('Cancel')).toBeInTheDocument();
|
|
569
|
+
expect((0, react_2.within)(dialog).getByText('Done')).toBeInTheDocument();
|
|
570
|
+
comment = 'Some comment';
|
|
571
|
+
commentInput = react_2.screen.getAllByRole('textbox')[0];
|
|
572
|
+
return [4 /*yield*/, user.click(commentInput)];
|
|
573
|
+
case 3:
|
|
574
|
+
_a.sent();
|
|
575
|
+
return [4 /*yield*/, user.paste(comment)];
|
|
576
|
+
case 4:
|
|
577
|
+
_a.sent();
|
|
578
|
+
return [4 /*yield*/, user.click((0, react_2.within)(dialog).getByText('Done'))];
|
|
579
|
+
case 5:
|
|
580
|
+
_a.sent();
|
|
581
|
+
expect(react_2.screen.queryByText('Please provide a comment for your action')).not.toBeInTheDocument();
|
|
582
|
+
expect(mdm_sdk_1.runTaskAction).toHaveBeenCalledWith({
|
|
583
|
+
workflowPath: workflowPath,
|
|
584
|
+
environment: workflowEnvironmentUrl,
|
|
585
|
+
tenant: tenant.id,
|
|
586
|
+
taskId: task.taskId,
|
|
587
|
+
action: task.possibleActions[0].action,
|
|
588
|
+
processInstanceComment: comment
|
|
589
|
+
});
|
|
590
|
+
return [2 /*return*/];
|
|
591
|
+
}
|
|
592
|
+
});
|
|
593
|
+
}); });
|
|
594
|
+
});
|
|
520
595
|
});
|
|
@@ -5,6 +5,7 @@ type Props = {
|
|
|
5
5
|
children?: React.ReactNode;
|
|
6
6
|
actions?: React.ReactNode;
|
|
7
7
|
Icon?: React.ElementType;
|
|
8
|
+
customActionsSlot?: React.ReactNode;
|
|
8
9
|
};
|
|
9
|
-
export declare const GenericWorkflowTaskCard: ({ task, children, actions, Icon }: Props) => React.JSX.Element;
|
|
10
|
+
export declare const GenericWorkflowTaskCard: ({ task, children, actions, Icon, customActionsSlot }: Props) => React.JSX.Element;
|
|
10
11
|
export {};
|
|
@@ -44,14 +44,13 @@ var useWorkflowCheckPermission_1 = require("../../../hooks/useWorkflowCheckPermi
|
|
|
44
44
|
var CollaborationIcon_1 = __importDefault(require("../../../../../icons/CollaborationIcon"));
|
|
45
45
|
var useWorkflowActions_1 = require("../../../hooks/useWorkflowActions");
|
|
46
46
|
var common_1 = require("../../../helpers/common");
|
|
47
|
-
var
|
|
47
|
+
var GenericWorkflowTaskCard_module_css_1 = __importDefault(require("./GenericWorkflowTaskCard.module.css"));
|
|
48
48
|
var GenericWorkflowTaskCard = function (_a) {
|
|
49
49
|
var _b;
|
|
50
|
-
var task = _a.task, children = _a.children, actions = _a.actions, Icon = _a.Icon;
|
|
50
|
+
var task = _a.task, children = _a.children, actions = _a.actions, Icon = _a.Icon, customActionsSlot = _a.customActionsSlot;
|
|
51
51
|
var taskId = task.taskId, dueDate = task.dueDate, priority = task.priority, assignee = task.assignee, createdBy = task.createdBy, createTime = task.createTime, step = task.displayName, processDefinitionDisplayName = task.processDefinitionDisplayName, objectURIs = task.objectURIs, processInstanceComments = task.processInstanceComments, possibleActions = task.possibleActions, isTaskOpen = task.isOpen, preferredAction = task.preferredAction;
|
|
52
52
|
var dcrId = (0, common_1.getDCRId)(objectURIs);
|
|
53
53
|
var color = (0, useWorkflowColor_1.useWorkflowColor)({ processDefinitionDisplayName: processDefinitionDisplayName });
|
|
54
|
-
var styles = (0, styles_1.useStyles)({ color: color });
|
|
55
54
|
var _c = (0, react_1.useState)(false), isExpanded = _c[0], setExpanded = _c[1];
|
|
56
55
|
var checkWorkflowPermission = (0, useWorkflowCheckPermission_1.useWorkflowCheckPermission)();
|
|
57
56
|
var canViewComments = checkWorkflowPermission('VIEW_PROCESS_INSTANCE_COMMENTS');
|
|
@@ -61,52 +60,54 @@ var GenericWorkflowTaskCard = function (_a) {
|
|
|
61
60
|
assignee: assignee,
|
|
62
61
|
isOpen: isTaskOpen
|
|
63
62
|
}), workflowActions = _d.actions, actionRequestIsInProgress = _d.actionRequestIsInProgress;
|
|
64
|
-
return (react_1.default.createElement("div", { className:
|
|
65
|
-
react_1.default.createElement("div", { className: (0, classnames_1.default)((_b = {}, _b[
|
|
66
|
-
react_1.default.createElement("div", { className:
|
|
67
|
-
react_1.default.createElement("div", { className:
|
|
68
|
-
Icon && react_1.default.createElement(Icon, { className:
|
|
63
|
+
return (react_1.default.createElement("div", { className: GenericWorkflowTaskCard_module_css_1.default.card },
|
|
64
|
+
react_1.default.createElement("div", { className: (0, classnames_1.default)((_b = {}, _b[GenericWorkflowTaskCard_module_css_1.default.withBackground] = isExpanded, _b)) },
|
|
65
|
+
react_1.default.createElement("div", { className: GenericWorkflowTaskCard_module_css_1.default.lineWrapper, style: { '--workflow-color': color } },
|
|
66
|
+
react_1.default.createElement("div", { className: GenericWorkflowTaskCard_module_css_1.default.line }),
|
|
67
|
+
Icon && react_1.default.createElement(Icon, { className: GenericWorkflowTaskCard_module_css_1.default.icon }),
|
|
69
68
|
react_1.default.createElement(LineDecorator_1.LineDecorator, { plain: true, first: true, transparent: !isExpanded },
|
|
70
|
-
react_1.default.createElement("div", { className:
|
|
71
|
-
react_1.default.createElement("div", { className:
|
|
72
|
-
react_1.default.createElement("div", { className: (0, classnames_1.default)(
|
|
73
|
-
react_1.default.createElement(Flag_1.default, { className:
|
|
69
|
+
react_1.default.createElement("div", { className: GenericWorkflowTaskCard_module_css_1.default.mainInfo },
|
|
70
|
+
react_1.default.createElement("div", { className: GenericWorkflowTaskCard_module_css_1.default.title },
|
|
71
|
+
react_1.default.createElement("div", { className: (0, classnames_1.default)(GenericWorkflowTaskCard_module_css_1.default.caption, GenericWorkflowTaskCard_module_css_1.default.flex) }, ui_i18n_1.default.text(processDefinitionDisplayName)),
|
|
72
|
+
react_1.default.createElement(Flag_1.default, { className: GenericWorkflowTaskCard_module_css_1.default.flag }),
|
|
74
73
|
react_1.default.createElement(Tooltip_1.default, { title: ui_i18n_1.default.text('Due date') },
|
|
75
|
-
react_1.default.createElement("span", { className:
|
|
74
|
+
react_1.default.createElement("span", { className: GenericWorkflowTaskCard_module_css_1.default.date }, ui_i18n_1.default.date(dueDate, 'L'))),
|
|
76
75
|
react_1.default.createElement(CollapseButton_1.CollapseButton, { isOpen: isExpanded, size: "L", onClick: function () {
|
|
77
76
|
setExpanded(!isExpanded);
|
|
78
77
|
} })),
|
|
79
|
-
react_1.default.createElement("div", { className:
|
|
80
|
-
react_1.default.createElement("div", { className:
|
|
81
|
-
dcrId && (react_1.default.createElement("div", { className:
|
|
78
|
+
react_1.default.createElement("div", { className: GenericWorkflowTaskCard_module_css_1.default.infoBlock, "data-reltio-id": "info-block" },
|
|
79
|
+
react_1.default.createElement("div", { className: GenericWorkflowTaskCard_module_css_1.default.flex },
|
|
80
|
+
dcrId && (react_1.default.createElement("div", { className: GenericWorkflowTaskCard_module_css_1.default.info },
|
|
82
81
|
ui_i18n_1.default.text('DCR ID'),
|
|
83
82
|
': ',
|
|
84
|
-
react_1.default.createElement("span", { className:
|
|
85
|
-
react_1.default.createElement("div", { className:
|
|
83
|
+
react_1.default.createElement("span", { className: GenericWorkflowTaskCard_module_css_1.default.infoValue }, dcrId))),
|
|
84
|
+
react_1.default.createElement("div", { className: GenericWorkflowTaskCard_module_css_1.default.info },
|
|
86
85
|
ui_i18n_1.default.text('Created by'),
|
|
87
86
|
': ',
|
|
88
|
-
react_1.default.createElement("span", { className:
|
|
87
|
+
react_1.default.createElement("span", { className: GenericWorkflowTaskCard_module_css_1.default.infoValue }, createdBy),
|
|
89
88
|
" ",
|
|
90
89
|
ui_i18n_1.default.text('on'),
|
|
91
90
|
' ',
|
|
92
|
-
react_1.default.createElement("span", { className:
|
|
93
|
-
react_1.default.createElement("div", { className:
|
|
91
|
+
react_1.default.createElement("span", { className: GenericWorkflowTaskCard_module_css_1.default.infoValue }, ui_i18n_1.default.date(createTime, 'L'))),
|
|
92
|
+
react_1.default.createElement("div", { className: GenericWorkflowTaskCard_module_css_1.default.info },
|
|
94
93
|
ui_i18n_1.default.text('Step'),
|
|
95
94
|
': ',
|
|
96
|
-
react_1.default.createElement("span", { className:
|
|
97
|
-
|
|
98
|
-
react_1.default.createElement(
|
|
99
|
-
|
|
95
|
+
react_1.default.createElement("span", { className: GenericWorkflowTaskCard_module_css_1.default.infoValue }, step)),
|
|
96
|
+
react_1.default.createElement("div", { className: GenericWorkflowTaskCard_module_css_1.default.bottomInfo },
|
|
97
|
+
canViewComments && (processInstanceComments === null || processInstanceComments === void 0 ? void 0 : processInstanceComments.length) > 0 && (react_1.default.createElement("div", { className: GenericWorkflowTaskCard_module_css_1.default.commentsInfo },
|
|
98
|
+
react_1.default.createElement(CollaborationIcon_1.default, { className: GenericWorkflowTaskCard_module_css_1.default.commentsIcon }),
|
|
99
|
+
react_1.default.createElement("div", { className: GenericWorkflowTaskCard_module_css_1.default.infoValue }, processInstanceComments.length))),
|
|
100
|
+
customActionsSlot && (react_1.default.createElement("div", { className: GenericWorkflowTaskCard_module_css_1.default.customActionsSlot }, customActionsSlot)))),
|
|
100
101
|
actions || (react_1.default.createElement(TaskActions_1.TaskActions, { actions: workflowActions, isInProgress: actionRequestIsInProgress })))))),
|
|
101
102
|
isExpanded && (react_1.default.createElement(LineDecorator_1.LineDecorator, { plain: true },
|
|
102
|
-
react_1.default.createElement("div", { className:
|
|
103
|
-
react_1.default.createElement("div", { className:
|
|
103
|
+
react_1.default.createElement("div", { className: GenericWorkflowTaskCard_module_css_1.default.controlsBox },
|
|
104
|
+
react_1.default.createElement("div", { className: GenericWorkflowTaskCard_module_css_1.default.controlsInRow },
|
|
104
105
|
react_1.default.createElement(DueDateField_1.DueDateField, { taskId: taskId, dueDate: dueDate, isTaskOpen: isTaskOpen }),
|
|
105
|
-
react_1.default.createElement(PrioritySelector_1.PrioritySelector, { taskId: taskId, priority: priority, className:
|
|
106
|
+
react_1.default.createElement(PrioritySelector_1.PrioritySelector, { taskId: taskId, priority: priority, className: GenericWorkflowTaskCard_module_css_1.default.priority, isTaskOpen: isTaskOpen })),
|
|
106
107
|
react_1.default.createElement(AssigneeSelector_1.AssigneeSelector, { taskId: taskId, assignee: assignee, isTaskOpen: isTaskOpen }))))),
|
|
107
108
|
isExpanded && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
108
109
|
children,
|
|
109
|
-
canViewComments && (react_1.default.createElement("div", { className:
|
|
110
|
+
canViewComments && (react_1.default.createElement("div", { className: GenericWorkflowTaskCard_module_css_1.default.comments },
|
|
110
111
|
react_1.default.createElement(WorkflowComments_1.WorkflowComments, { workflowActions: workflowActions, actionRequestIsInProgress: actionRequestIsInProgress, preferredAction: preferredAction, taskId: taskId, processInstanceComments: processInstanceComments, isTaskOpen: isTaskOpen })))))));
|
|
111
112
|
};
|
|
112
113
|
exports.GenericWorkflowTaskCard = GenericWorkflowTaskCard;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
const styles = {"card":"GenericWorkflowTaskCard-card--EMo-i","withBackground":"GenericWorkflowTaskCard-withBackground--Y--db","lineWrapper":"GenericWorkflowTaskCard-lineWrapper--15MN6","icon":"GenericWorkflowTaskCard-icon--eoHOp","line":"GenericWorkflowTaskCard-line--Z1Emv","info":"GenericWorkflowTaskCard-info--2OyKu","bottomInfo":"GenericWorkflowTaskCard-bottomInfo--4bsc4","commentsInfo":"GenericWorkflowTaskCard-commentsInfo--Q6M07","commentsIcon":"GenericWorkflowTaskCard-commentsIcon--crUiN","infoValue":"GenericWorkflowTaskCard-infoValue---gkaX","infoBlock":"GenericWorkflowTaskCard-infoBlock--VyI2O","header":"GenericWorkflowTaskCard-header--bN0nh","flex":"GenericWorkflowTaskCard-flex--5oWde","caption":"GenericWorkflowTaskCard-caption--vxnNJ","title":"GenericWorkflowTaskCard-title--zyCft","flag":"GenericWorkflowTaskCard-flag--dfydb","date":"GenericWorkflowTaskCard-date--MHd-G","mainInfo":"GenericWorkflowTaskCard-mainInfo--l5b9R","controlsBox":"GenericWorkflowTaskCard-controlsBox--ZHDhQ","controlsInRow":"GenericWorkflowTaskCard-controlsInRow--c48Nv","priority":"GenericWorkflowTaskCard-priority--xnnl9","comments":"GenericWorkflowTaskCard-comments--OG-db","customActionsSlot":"GenericWorkflowTaskCard-customActionsSlot--J-mXk"};
|
|
2
|
+
if (typeof document !== 'undefined') {
|
|
3
|
+
const head = document.head || document.getElementsByTagName('head')[0]
|
|
4
|
+
const style = document.createElement('style');
|
|
5
|
+
style.type = 'text/css'
|
|
6
|
+
style.innerHTML = `.GenericWorkflowTaskCard-card--EMo-i{border-bottom:1px solid rgba(0,0,0,.06)}.GenericWorkflowTaskCard-withBackground--Y--db{background-color:rgba(0,0,0,.03)}.GenericWorkflowTaskCard-lineWrapper--15MN6{position:relative}.GenericWorkflowTaskCard-icon--eoHOp{height:32px;left:16px;position:absolute;top:8px;width:32px;z-index:1}.GenericWorkflowTaskCard-line--Z1Emv{border-left:3px solid var(--workflow-color);bottom:0;left:0;position:absolute;top:0}.GenericWorkflowTaskCard-info--2OyKu{color:rgba(0,0,0,.54);font-size:13px;word-wrap:break-word;line-height:15px}.GenericWorkflowTaskCard-bottomInfo--4bsc4{align-items:flex-start;display:flex}.GenericWorkflowTaskCard-commentsInfo--Q6M07{align-items:center;display:flex;margin-bottom:-4px;margin-top:7px}.GenericWorkflowTaskCard-commentsIcon--crUiN{height:11px;margin-left:2px;margin-right:6px;margin-top:-2px;width:11px}.GenericWorkflowTaskCard-infoValue---gkaX{color:rgba(0,0,0,.87)}.GenericWorkflowTaskCard-infoBlock--VyI2O{display:flex;flex-direction:row;margin-bottom:5px}.GenericWorkflowTaskCard-header--bN0nh{display:flex;flex-direction:row;padding-bottom:12px}.GenericWorkflowTaskCard-flex--5oWde{flex:1}.GenericWorkflowTaskCard-caption--vxnNJ{color:rgba(0,0,0,.87);font-size:16px}.GenericWorkflowTaskCard-title--zyCft{align-items:center;display:flex;flex-direction:row;margin-bottom:-4px}.GenericWorkflowTaskCard-flag--dfydb{height:13px;width:13px;stroke:#000;fill:none;margin:2px 5px 0}.GenericWorkflowTaskCard-date--MHd-G{color:rgba(0,0,0,.87);font-size:13px}.GenericWorkflowTaskCard-mainInfo--l5b9R{display:flex;flex:1;flex-direction:column}.GenericWorkflowTaskCard-controlsBox--ZHDhQ{margin-bottom:12px;margin-right:16px;margin-top:13px}.GenericWorkflowTaskCard-controlsInRow--c48Nv{align-items:center;display:flex;flex-direction:row;justify-content:space-between;margin-bottom:20px}.GenericWorkflowTaskCard-priority--xnnl9{width:162px}.GenericWorkflowTaskCard-comments--OG-db{margin-left:11px}.GenericWorkflowTaskCard-customActionsSlot--J-mXk{display:flex;flex-grow:1;justify-content:flex-end;margin-right:-30px}`;
|
|
7
|
+
head.appendChild(style);
|
|
8
|
+
}
|
|
9
|
+
module.exports = styles;
|
|
@@ -76,6 +76,7 @@ var CommentDialogContext_1 = require("../../../../../contexts/CommentDialogConte
|
|
|
76
76
|
var ErrorPopup_1 = require("../../../../../ErrorPopup");
|
|
77
77
|
var task_test_data_1 = require("./task.test-data");
|
|
78
78
|
var GenericWorkflowTaskCard_1 = require("./GenericWorkflowTaskCard");
|
|
79
|
+
var ReviewDCRButton_1 = require("../../../ReviewDCRButton");
|
|
79
80
|
jest.mock('@reltio/mdm-sdk', function () { return (__assign(__assign({}, jest.requireActual('@reltio/mdm-sdk')), { runTaskAction: jest.fn().mockReturnValue(Promise.resolve()), getAssigneeForTask: jest.fn().mockResolvedValue({ data: ['assignee1', 'assignee2'] }), addCommentForTask: jest.fn().mockResolvedValue({ status: 'success' }), getTaskById: jest.fn() })); });
|
|
80
81
|
var onActionSuccess = jest.fn();
|
|
81
82
|
var workflowTaskContextValue = { onActionSuccess: onActionSuccess };
|
|
@@ -107,14 +108,14 @@ var defaultMdmValues = {
|
|
|
107
108
|
var errorSet = jest.fn();
|
|
108
109
|
var defaultTask = (0, task_test_data_1.getDefaultTask)();
|
|
109
110
|
var setUp = function (_a) {
|
|
110
|
-
var _b = _a === void 0 ? {} : _a, _c = _b.mdmValues, mdmValues = _c === void 0 ? defaultMdmValues : _c, _d = _b.task, task = _d === void 0 ? defaultTask : _d;
|
|
111
|
+
var _b = _a === void 0 ? {} : _a, _c = _b.mdmValues, mdmValues = _c === void 0 ? defaultMdmValues : _c, _d = _b.task, task = _d === void 0 ? defaultTask : _d, customActionsSlot = _b.customActionsSlot;
|
|
111
112
|
var user = user_event_1.default.setup();
|
|
112
113
|
return __assign(__assign({}, (0, react_2.render)(react_1.default.createElement(MdmModuleContext_1.MdmModuleProvider, { values: mdmValues, actions: { errorSet: errorSet } },
|
|
113
114
|
react_1.default.createElement(styles_2.ThemeProvider, { theme: (0, styles_1.createTheme)(constants_1.theme) },
|
|
114
115
|
react_1.default.createElement(LocalizationProvider_1.LocalizationProvider, { dateAdapter: AdapterMoment_1.AdapterMoment },
|
|
115
116
|
react_1.default.createElement(CommentDialogContext_1.CommentDialogProvider, null,
|
|
116
117
|
react_1.default.createElement(WorkflowTasksContext_1.WorkflowTasksContext.Provider, { value: workflowTaskContextValue },
|
|
117
|
-
react_1.default.createElement(GenericWorkflowTaskCard_1.GenericWorkflowTaskCard, { task: task },
|
|
118
|
+
react_1.default.createElement(GenericWorkflowTaskCard_1.GenericWorkflowTaskCard, { task: task, customActionsSlot: customActionsSlot },
|
|
118
119
|
react_1.default.createElement("div", { className: "someChildren" }, "some children")),
|
|
119
120
|
react_1.default.createElement(ErrorPopup_1.ErrorPopup, { showErrorFromStore: true })))))))), { user: user });
|
|
120
121
|
};
|
|
@@ -456,4 +457,125 @@ describe('GenericWorkflowTaskCard tests', function () {
|
|
|
456
457
|
}
|
|
457
458
|
});
|
|
458
459
|
}); });
|
|
460
|
+
it('should render custom actions slot if it is provided', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
461
|
+
var openReviewDialog, user, reviewDCRButton;
|
|
462
|
+
return __generator(this, function (_a) {
|
|
463
|
+
switch (_a.label) {
|
|
464
|
+
case 0:
|
|
465
|
+
openReviewDialog = jest.fn();
|
|
466
|
+
user = setUp({ customActionsSlot: react_1.default.createElement(ReviewDCRButton_1.ReviewDCRButton, { onClick: openReviewDialog }) }).user;
|
|
467
|
+
reviewDCRButton = react_2.screen.getByRole('button', { name: 'Review DCR' });
|
|
468
|
+
expect(reviewDCRButton).toBeInTheDocument();
|
|
469
|
+
return [4 /*yield*/, user.click(reviewDCRButton)];
|
|
470
|
+
case 1:
|
|
471
|
+
_a.sent();
|
|
472
|
+
expect(openReviewDialog).toHaveBeenCalled();
|
|
473
|
+
return [2 /*return*/];
|
|
474
|
+
}
|
|
475
|
+
});
|
|
476
|
+
}); });
|
|
477
|
+
describe('Required comments', function () {
|
|
478
|
+
it('should show comment dialog when user runs action and comment is required', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
479
|
+
var task, user, dialog, comment, commentInput;
|
|
480
|
+
return __generator(this, function (_a) {
|
|
481
|
+
switch (_a.label) {
|
|
482
|
+
case 0:
|
|
483
|
+
task = __assign(__assign({}, defaultTask), { possibleActions: [
|
|
484
|
+
{
|
|
485
|
+
action: 'Delete',
|
|
486
|
+
label: 'Delete',
|
|
487
|
+
commentRequired: true
|
|
488
|
+
},
|
|
489
|
+
{
|
|
490
|
+
action: 'Cancel',
|
|
491
|
+
label: 'Cancel',
|
|
492
|
+
commentRequired: false
|
|
493
|
+
}
|
|
494
|
+
] });
|
|
495
|
+
user = setUp({ task: task }).user;
|
|
496
|
+
return [4 /*yield*/, user.click(react_2.screen.getByTestId('task-actions'))];
|
|
497
|
+
case 1:
|
|
498
|
+
_a.sent();
|
|
499
|
+
return [4 /*yield*/, user.click(react_2.screen.getByText(task.possibleActions[0].label))];
|
|
500
|
+
case 2:
|
|
501
|
+
_a.sent();
|
|
502
|
+
expect(mdm_sdk_1.runTaskAction).not.toHaveBeenCalled();
|
|
503
|
+
dialog = react_2.screen.getAllByRole('presentation')[1];
|
|
504
|
+
expect((0, react_2.within)(dialog).getByText('Please provide a comment for your action')).toBeInTheDocument();
|
|
505
|
+
expect((0, react_2.within)(dialog).getByText('Type a comment')).toBeInTheDocument();
|
|
506
|
+
expect((0, react_2.within)(dialog).getByText('Cancel')).toBeInTheDocument();
|
|
507
|
+
expect((0, react_2.within)(dialog).getByText('Done')).toBeInTheDocument();
|
|
508
|
+
comment = 'comment';
|
|
509
|
+
commentInput = react_2.screen.getAllByRole('textbox')[0];
|
|
510
|
+
return [4 /*yield*/, user.click(commentInput)];
|
|
511
|
+
case 3:
|
|
512
|
+
_a.sent();
|
|
513
|
+
return [4 /*yield*/, user.paste(comment)];
|
|
514
|
+
case 4:
|
|
515
|
+
_a.sent();
|
|
516
|
+
return [4 /*yield*/, user.click((0, react_2.within)(react_2.screen.getAllByRole('presentation')[1]).getByText('Done'))];
|
|
517
|
+
case 5:
|
|
518
|
+
_a.sent();
|
|
519
|
+
expect(mdm_sdk_1.runTaskAction).toHaveBeenCalledWith({
|
|
520
|
+
workflowPath: workflowPath,
|
|
521
|
+
environment: workflowEnvironmentUrl,
|
|
522
|
+
tenant: tenant.id,
|
|
523
|
+
taskId: defaultTask.taskId,
|
|
524
|
+
action: defaultTask.possibleActions[0].action,
|
|
525
|
+
processInstanceComment: comment
|
|
526
|
+
});
|
|
527
|
+
return [2 /*return*/];
|
|
528
|
+
}
|
|
529
|
+
});
|
|
530
|
+
}); });
|
|
531
|
+
it('should not show comment dialog when user types comment and run action', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
532
|
+
var task, user, comment, commentInput;
|
|
533
|
+
var _a;
|
|
534
|
+
return __generator(this, function (_b) {
|
|
535
|
+
switch (_b.label) {
|
|
536
|
+
case 0:
|
|
537
|
+
task = __assign(__assign({}, defaultTask), { possibleActions: [
|
|
538
|
+
{
|
|
539
|
+
action: 'Delete',
|
|
540
|
+
label: 'Delete',
|
|
541
|
+
commentRequired: true
|
|
542
|
+
},
|
|
543
|
+
{
|
|
544
|
+
action: 'Cancel',
|
|
545
|
+
label: 'Cancel',
|
|
546
|
+
commentRequired: false
|
|
547
|
+
}
|
|
548
|
+
] });
|
|
549
|
+
user = setUp({ task: task }).user;
|
|
550
|
+
return [4 /*yield*/, user.click(react_2.screen.getByTestId('collapse-button'))];
|
|
551
|
+
case 1:
|
|
552
|
+
_b.sent();
|
|
553
|
+
comment = 'comment';
|
|
554
|
+
commentInput = react_2.screen.getByPlaceholderText('Write a comment');
|
|
555
|
+
return [4 /*yield*/, user.click(commentInput)];
|
|
556
|
+
case 2:
|
|
557
|
+
_b.sent();
|
|
558
|
+
return [4 /*yield*/, user.paste(comment)];
|
|
559
|
+
case 3:
|
|
560
|
+
_b.sent();
|
|
561
|
+
return [4 /*yield*/, user.click(react_2.screen.getByRole('button', { name: (_a = task.preferredAction) === null || _a === void 0 ? void 0 : _a.label }))];
|
|
562
|
+
case 4:
|
|
563
|
+
_b.sent();
|
|
564
|
+
return [4 /*yield*/, user.click(react_2.screen.getByTestId("reltio-profile-select-mode-".concat(task.possibleActions[0].label)))];
|
|
565
|
+
case 5:
|
|
566
|
+
_b.sent();
|
|
567
|
+
expect(react_2.screen.queryByText('Please provide a comment for your action')).not.toBeInTheDocument();
|
|
568
|
+
expect(mdm_sdk_1.runTaskAction).toHaveBeenCalledWith({
|
|
569
|
+
workflowPath: workflowPath,
|
|
570
|
+
environment: workflowEnvironmentUrl,
|
|
571
|
+
tenant: tenant.id,
|
|
572
|
+
taskId: defaultTask.taskId,
|
|
573
|
+
action: defaultTask.possibleActions[0].action,
|
|
574
|
+
processInstanceComment: comment
|
|
575
|
+
});
|
|
576
|
+
return [2 /*return*/];
|
|
577
|
+
}
|
|
578
|
+
});
|
|
579
|
+
}); });
|
|
580
|
+
});
|
|
459
581
|
});
|
|
@@ -59,17 +59,24 @@ var AdapterMoment_1 = require("@mui/x-date-pickers/AdapterMoment");
|
|
|
59
59
|
var MdmModuleContext_1 = require("../../../../../contexts/MdmModuleContext");
|
|
60
60
|
var CommentDialogContext_1 = require("../../../../../contexts/CommentDialogContext");
|
|
61
61
|
var PotentialMatchTaskCard_1 = require("./PotentialMatchTaskCard");
|
|
62
|
+
jest.mock('@reltio/mdm-sdk', function () { return (__assign(__assign({}, jest.requireActual('@reltio/mdm-sdk')), { runTaskAction: jest.fn() })); });
|
|
62
63
|
describe('PotentialMatchTaskCard tests', function () {
|
|
64
|
+
var tenant = { id: 't1', name: 't1' };
|
|
65
|
+
var workflowPath = 'workflowPath';
|
|
66
|
+
var workflowEnvironmentUrl = 'workflowEnvironmentUrl';
|
|
63
67
|
var mdmValues = {
|
|
64
68
|
metadata: { entityTypes: [], relationTypes: [] },
|
|
65
69
|
entity: { uri: 'entities/uri1', type: 'configuration/entityTypes/HCO' },
|
|
66
|
-
tenant:
|
|
70
|
+
tenant: tenant,
|
|
71
|
+
workflowPath: workflowPath,
|
|
72
|
+
workflowEnvironmentUrl: workflowEnvironmentUrl,
|
|
73
|
+
user: { username: 'egorshkov' },
|
|
67
74
|
dtssPath: 'path',
|
|
68
75
|
dataTenants: [],
|
|
69
76
|
activityFilter: mdm_sdk_1.ActivityFilter.ACTIVE_ONLY
|
|
70
77
|
};
|
|
71
78
|
var relatedEntityUri = 'entities/6hj8baQ';
|
|
72
|
-
var
|
|
79
|
+
var defaultTask = {
|
|
73
80
|
assignee: 'egorshkov',
|
|
74
81
|
objectURIs: [relatedEntityUri, 'entities/1RdgehCi'],
|
|
75
82
|
createdBy: 'egorshkov',
|
|
@@ -103,7 +110,7 @@ describe('PotentialMatchTaskCard tests', function () {
|
|
|
103
110
|
uri: 'entities/6hj8baQ'
|
|
104
111
|
}
|
|
105
112
|
};
|
|
106
|
-
var defaultProps = { task:
|
|
113
|
+
var defaultProps = { task: defaultTask, match: match, entitiesMap: entitiesMap };
|
|
107
114
|
var setUp = function (props) {
|
|
108
115
|
if (props === void 0) { props = {}; }
|
|
109
116
|
var user = user_event_1.default.setup();
|
|
@@ -115,6 +122,9 @@ describe('PotentialMatchTaskCard tests', function () {
|
|
|
115
122
|
};
|
|
116
123
|
return __assign({ user: user }, (0, react_2.render)(react_1.default.createElement(PotentialMatchTaskCard_1.PotentialMatchTaskCard, __assign({}, defaultProps, props)), { wrapper: Providers }));
|
|
117
124
|
};
|
|
125
|
+
beforeAll(function () {
|
|
126
|
+
mdm_sdk_1.runTaskAction.mockResolvedValue(null);
|
|
127
|
+
});
|
|
118
128
|
afterEach(function () {
|
|
119
129
|
jest.clearAllMocks();
|
|
120
130
|
});
|
|
@@ -163,4 +173,60 @@ describe('PotentialMatchTaskCard tests', function () {
|
|
|
163
173
|
}
|
|
164
174
|
});
|
|
165
175
|
}); });
|
|
176
|
+
describe('Required comments', function () {
|
|
177
|
+
it('should show comment dialog when user runs action and comment is required', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
178
|
+
var task, user, dialog, comment, commentInput;
|
|
179
|
+
return __generator(this, function (_a) {
|
|
180
|
+
switch (_a.label) {
|
|
181
|
+
case 0:
|
|
182
|
+
task = __assign(__assign({}, defaultTask), { isOpen: true, possibleActions: [
|
|
183
|
+
{
|
|
184
|
+
action: 'Approve',
|
|
185
|
+
label: 'Approve',
|
|
186
|
+
commentRequired: true
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
action: 'Reject',
|
|
190
|
+
label: 'Reject',
|
|
191
|
+
commentRequired: false
|
|
192
|
+
}
|
|
193
|
+
] });
|
|
194
|
+
user = setUp({ task: task }).user;
|
|
195
|
+
return [4 /*yield*/, user.click(react_2.screen.getByTestId('task-actions'))];
|
|
196
|
+
case 1:
|
|
197
|
+
_a.sent();
|
|
198
|
+
return [4 /*yield*/, user.click(react_2.screen.getByText(task.possibleActions[0].label))];
|
|
199
|
+
case 2:
|
|
200
|
+
_a.sent();
|
|
201
|
+
expect(mdm_sdk_1.runTaskAction).not.toHaveBeenCalled();
|
|
202
|
+
dialog = react_2.screen.getAllByRole('presentation')[1];
|
|
203
|
+
expect((0, react_2.within)(dialog).getByText('Please provide a comment for your action')).toBeInTheDocument();
|
|
204
|
+
expect((0, react_2.within)(dialog).getByText('Type a comment')).toBeInTheDocument();
|
|
205
|
+
expect((0, react_2.within)(dialog).getByText('Cancel')).toBeInTheDocument();
|
|
206
|
+
expect((0, react_2.within)(dialog).getByText('Done')).toBeInTheDocument();
|
|
207
|
+
comment = 'Some comment';
|
|
208
|
+
commentInput = react_2.screen.getAllByRole('textbox')[0];
|
|
209
|
+
return [4 /*yield*/, user.click(commentInput)];
|
|
210
|
+
case 3:
|
|
211
|
+
_a.sent();
|
|
212
|
+
return [4 /*yield*/, user.paste(comment)];
|
|
213
|
+
case 4:
|
|
214
|
+
_a.sent();
|
|
215
|
+
return [4 /*yield*/, user.click((0, react_2.within)(dialog).getByText('Done'))];
|
|
216
|
+
case 5:
|
|
217
|
+
_a.sent();
|
|
218
|
+
expect(react_2.screen.queryByText('Please provide a comment for your action')).not.toBeInTheDocument();
|
|
219
|
+
expect(mdm_sdk_1.runTaskAction).toHaveBeenCalledWith({
|
|
220
|
+
workflowPath: workflowPath,
|
|
221
|
+
environment: workflowEnvironmentUrl,
|
|
222
|
+
tenant: tenant.id,
|
|
223
|
+
taskId: task.taskId,
|
|
224
|
+
action: task.possibleActions[0].action,
|
|
225
|
+
processInstanceComment: comment
|
|
226
|
+
});
|
|
227
|
+
return [2 /*return*/];
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
}); });
|
|
231
|
+
});
|
|
166
232
|
});
|
|
@@ -5,6 +5,8 @@ export { AssigneeSelector } from './AssigneeSelector';
|
|
|
5
5
|
export { ReassignButton } from './ReassignButton';
|
|
6
6
|
export { WorkflowComments } from './WorkflowComments';
|
|
7
7
|
export { TaskActionButtons } from './TaskActionButtons';
|
|
8
|
+
export { ReviewDCRButton } from './ReviewDCRButton';
|
|
9
|
+
export { ReviewDCRDialog } from './ReviewDCRDialog';
|
|
8
10
|
export { useWorkflowAssignee } from './hooks/useWorkflowAssignee';
|
|
9
11
|
export { useWorkflowComments } from './hooks/useWorkflowComments';
|
|
10
12
|
export { useWorkflowActions } from './hooks/useWorkflowActions';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.findWorkflowDefinitionByType = exports.useWorkflowDefaultActionSuccessHandler = exports.useWorkflowTasks = exports.useWorkflowCheckPermission = exports.useWorkflowActions = exports.useWorkflowComments = exports.useWorkflowAssignee = exports.TaskActionButtons = exports.WorkflowComments = exports.ReassignButton = exports.AssigneeSelector = exports.TaskActions = exports.AddWorkflowButton = exports.WorkflowTaskCard = void 0;
|
|
3
|
+
exports.findWorkflowDefinitionByType = exports.useWorkflowDefaultActionSuccessHandler = exports.useWorkflowTasks = exports.useWorkflowCheckPermission = exports.useWorkflowActions = exports.useWorkflowComments = exports.useWorkflowAssignee = exports.ReviewDCRDialog = exports.ReviewDCRButton = exports.TaskActionButtons = exports.WorkflowComments = exports.ReassignButton = exports.AssigneeSelector = exports.TaskActions = exports.AddWorkflowButton = exports.WorkflowTaskCard = void 0;
|
|
4
4
|
// components
|
|
5
5
|
var WorkflowTaskCard_1 = require("./WorkflowTaskCard");
|
|
6
6
|
Object.defineProperty(exports, "WorkflowTaskCard", { enumerable: true, get: function () { return WorkflowTaskCard_1.WorkflowTaskCard; } });
|
|
@@ -16,6 +16,10 @@ var WorkflowComments_1 = require("./WorkflowComments");
|
|
|
16
16
|
Object.defineProperty(exports, "WorkflowComments", { enumerable: true, get: function () { return WorkflowComments_1.WorkflowComments; } });
|
|
17
17
|
var TaskActionButtons_1 = require("./TaskActionButtons");
|
|
18
18
|
Object.defineProperty(exports, "TaskActionButtons", { enumerable: true, get: function () { return TaskActionButtons_1.TaskActionButtons; } });
|
|
19
|
+
var ReviewDCRButton_1 = require("./ReviewDCRButton");
|
|
20
|
+
Object.defineProperty(exports, "ReviewDCRButton", { enumerable: true, get: function () { return ReviewDCRButton_1.ReviewDCRButton; } });
|
|
21
|
+
var ReviewDCRDialog_1 = require("./ReviewDCRDialog");
|
|
22
|
+
Object.defineProperty(exports, "ReviewDCRDialog", { enumerable: true, get: function () { return ReviewDCRDialog_1.ReviewDCRDialog; } });
|
|
19
23
|
// hooks
|
|
20
24
|
var useWorkflowAssignee_1 = require("./hooks/useWorkflowAssignee");
|
|
21
25
|
Object.defineProperty(exports, "useWorkflowAssignee", { enumerable: true, get: function () { return useWorkflowAssignee_1.useWorkflowAssignee; } });
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
var react_1 = __importDefault(require("react"));
|
|
18
|
+
var SvgRequestSummary = function (props) {
|
|
19
|
+
return (react_1.default.createElement("svg", __assign({ width: "32", height: "32", viewBox: "0 0 32 32", fill: "none", xmlns: "http://www.w3.org/2000/svg", "data-reltio-id": "SvgRequestSummary" }, props),
|
|
20
|
+
react_1.default.createElement("ellipse", { cx: "15.972", cy: "16", rx: "15.972", ry: "16", fill: "#1D4E99" }),
|
|
21
|
+
react_1.default.createElement("path", { opacity: "0.54", d: "M24.4771 14.7002C23.972 14.3772 23.4183 14.1244 22.8286 13.9561V8.42871H8.50342V19.415H14.8589C14.8411 19.6077 14.8316 19.8027 14.8315 20C14.8315 20.3358 14.8581 20.6657 14.9087 20.9873H6.84521V6.85742H24.4771V14.7002ZM11.8091 17.8428H10.1519V16.2803H11.8091V17.8428ZM16.0483 16.2803C15.7 16.7547 15.4168 17.2799 15.2114 17.8428H13.4575V16.2803H16.0483ZM11.8091 14.708H10.1519V13.1357H11.8091V14.708ZM21.1714 13.7158C21.1496 13.7156 21.1278 13.7148 21.106 13.7148C19.8597 13.7148 18.6995 14.0804 17.7231 14.708H13.4575V13.1357H21.1714V13.7158ZM11.8091 11.5645H10.1519V10.001H11.8091V11.5645ZM21.1714 11.5645H13.4575V10.001H21.1714V11.5645Z", fill: "white" }),
|
|
22
|
+
react_1.default.createElement("path", { opacity: "0.87", d: "M21.106 14.8574C22.2479 14.8575 23.3031 15.2315 24.1558 15.8633L23.2349 16.7861C22.6252 16.3801 21.8929 16.1426 21.106 16.1426C18.9797 16.1428 17.2565 17.87 17.2563 20C17.2563 22.1301 18.9796 23.8572 21.106 23.8574C23.0435 23.8572 24.6461 22.4229 24.9155 20.5566L26.189 19.2822C26.2217 19.5168 26.2407 19.7564 26.2407 20C26.2407 22.8402 23.9412 25.1424 21.106 25.1426C18.2708 25.1423 15.9722 22.8402 15.9722 20C15.9723 17.16 18.2709 14.8577 21.106 14.8574ZM26.7075 17.208L21.2622 22.6631L20.354 21.7539V21.7529L18.5396 19.9355L19.4468 19.0264L21.2612 20.8438L25.7993 16.2988L26.7075 17.208Z", fill: "white" })));
|
|
23
|
+
};
|
|
24
|
+
exports.default = SvgRequestSummary;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
var react_1 = __importDefault(require("react"));
|
|
18
|
+
var SvgReviewDCR = function (props) {
|
|
19
|
+
return (react_1.default.createElement("svg", __assign({ width: "16", height: "15", viewBox: "0 0 16 15", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, props),
|
|
20
|
+
react_1.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M2.5 9H5.51415C5.53356 8.74392 5.57268 8.49341 5.63 8.25H2.5V6.75H6.26449C6.43659 6.48075 6.63444 6.2296 6.85458 6H2.5V4.5H10V4.51415C10.1238 4.50477 10.2488 4.5 10.375 4.5C11.0397 4.5 11.673 4.63248 12.25 4.87252V1.5C12.25 0.675 11.575 0 10.75 0H1.75C0.925 0 0.25 0.675 0.25 1.5V11.25C0.25 12.075 0.925 12.75 1.75 12.75H6.85373C6.26293 12.1331 5.8327 11.3608 5.63001 10.5H2.5V9ZM10 3.75H2.5V2.25H10V3.75ZM13.225 11.1675L15.565 13.5L14.5 14.565L12.16 12.225C11.6425 12.555 11.0275 12.75 10.3675 12.75C8.5075 12.75 7 11.2425 7 9.375C7 7.5075 8.5075 6 10.375 6C12.2425 6 13.75 7.5075 13.75 9.375C13.75 10.035 13.555 10.6425 13.225 11.1675ZM10.375 11.25C11.41 11.25 12.25 10.41 12.25 9.375C12.25 8.34 11.41 7.5 10.375 7.5C9.34 7.5 8.5 8.34 8.5 9.375C8.5 10.41 9.34 11.25 10.375 11.25Z", fill: "#0072CE" })));
|
|
21
|
+
};
|
|
22
|
+
exports.default = SvgReviewDCR;
|
|
@@ -56,6 +56,7 @@ export type MdmModuleValuesContextProps = Partial<{
|
|
|
56
56
|
uiConfigLayout: Layout;
|
|
57
57
|
uiConfigProfile: Profile;
|
|
58
58
|
showMasking: boolean;
|
|
59
|
+
reviewDCREnabled: boolean;
|
|
59
60
|
}>;
|
|
60
61
|
export type MdmModuleActionsContextProps = Partial<{
|
|
61
62
|
openSearch: (payload: SearchState) => void;
|
|
@@ -260,6 +261,7 @@ export declare const MdmModuleValuesContext: import("@fluentui/react-context-sel
|
|
|
260
261
|
uiConfigLayout: Layout;
|
|
261
262
|
uiConfigProfile: Profile;
|
|
262
263
|
showMasking: boolean;
|
|
264
|
+
reviewDCREnabled: boolean;
|
|
263
265
|
}>>;
|
|
264
266
|
export declare const MdmModuleListenersContext: import("@fluentui/react-context-selector").Context<Partial<{
|
|
265
267
|
expandInvalidRelatonsListener: (callback: () => void) => (action: any) => void;
|
|
@@ -151,3 +151,4 @@ export declare const useMdmListener: <T extends keyof MdmModuleListenersContextP
|
|
|
151
151
|
export declare const useMdmHiddenAttributes: () => Record<string, string[]>;
|
|
152
152
|
export declare const useMdmControlAttributes: () => string[];
|
|
153
153
|
export declare const useMdmShowMasking: () => boolean;
|
|
154
|
+
export declare const useMdmReviewDCREnabled: () => boolean;
|