@reltio/components 1.4.2208 → 1.4.2210
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/AttributesErrorsPanel/components/Error/Error.js +2 -2
- package/cjs/AttributesErrorsPanel/components/Error/Error.js +2 -2
- 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/workflow/ChangeRequestEditor/components/ChangeItemLabel/ChangeItemLabel.js +8 -3
- package/cjs/features/workflow/ChangeRequestEditor/components/ChangeItemRow/ChangeItemRow.js +45 -4
- package/cjs/features/workflow/ChangeRequestEditor/components/ChangeItemRow/ChangeItemRow.module.css.js +2 -2
- package/cjs/features/workflow/ChangeRequestEditor/components/DCRValueEditor/DCRValueEditor.d.ts +1 -1
- package/cjs/features/workflow/ChangeRequestEditor/components/DCRValueEditorFactory/DCRValueEditorFactory.d.ts +1 -1
- package/cjs/features/workflow/ChangeRequestEditor/hooks/useChangeRequestEditor.d.ts +1 -1
- package/cjs/features/workflow/ReviewDCRDialog/DCRErrorsPanel/DCRErrorsPanel.d.ts +2 -0
- package/cjs/features/workflow/ReviewDCRDialog/DCRErrorsPanel/DCRErrorsPanel.js +44 -0
- package/cjs/features/workflow/ReviewDCRDialog/DCRErrorsPanel/DCRErrorsPanel.module.css.js +9 -0
- package/cjs/features/workflow/ReviewDCRDialog/ReviewDCRDialog.js +2 -0
- package/cjs/features/workflow/WorkflowTaskCard/components/DataChangeRequestTaskCard/DataChangeRequestTaskCard.js +3 -1
- package/cjs/features/workflow/WorkflowTaskCard/components/DataChangeRequestTaskCard/DataChangeRequestTaskCard.spec.js +15 -7
- package/cjs/features/workflow/contexts/ChangeRequestEditorContext/index.d.ts +19 -10
- package/cjs/features/workflow/contexts/ChangeRequestEditorContext/index.js +28 -2
- package/cjs/features/workflow/helpers/dcr.d.ts +1 -1
- package/cjs/features/workflow/helpers/merge.js +3 -3
- package/cjs/features/workflow/helpers/validation.d.ts +17 -0
- package/cjs/features/workflow/helpers/validation.js +333 -0
- package/cjs/features/workflow/hooks/useApplyDcrChanges.js +34 -24
- package/cjs/features/workflow/hooks/useDCRValidation.d.ts +5 -0
- package/cjs/features/workflow/hooks/useDCRValidation.js +153 -0
- package/cjs/features/workflow/types.d.ts +8 -1
- package/cjs/hooks/useScrollToAttributeError/useScrollToAttributeError.d.ts +2 -1
- package/cjs/hooks/useScrollToAttributeError/useScrollToAttributeError.js +2 -2
- 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/workflow/ChangeRequestEditor/components/ChangeItemLabel/ChangeItemLabel.js +8 -3
- package/features/workflow/ChangeRequestEditor/components/ChangeItemRow/ChangeItemRow.js +22 -4
- package/features/workflow/ChangeRequestEditor/components/ChangeItemRow/ChangeItemRow.module.css.js +2 -2
- package/features/workflow/ChangeRequestEditor/components/DCRValueEditor/DCRValueEditor.d.ts +1 -1
- package/features/workflow/ChangeRequestEditor/components/DCRValueEditorFactory/DCRValueEditorFactory.d.ts +1 -1
- package/features/workflow/ChangeRequestEditor/hooks/useChangeRequestEditor.d.ts +1 -1
- package/features/workflow/ReviewDCRDialog/DCRErrorsPanel/DCRErrorsPanel.d.ts +2 -0
- package/features/workflow/ReviewDCRDialog/DCRErrorsPanel/DCRErrorsPanel.js +14 -0
- package/features/workflow/ReviewDCRDialog/DCRErrorsPanel/DCRErrorsPanel.module.css.js +9 -0
- package/features/workflow/ReviewDCRDialog/ReviewDCRDialog.js +2 -0
- package/features/workflow/WorkflowTaskCard/components/DataChangeRequestTaskCard/DataChangeRequestTaskCard.js +3 -1
- package/features/workflow/WorkflowTaskCard/components/DataChangeRequestTaskCard/DataChangeRequestTaskCard.spec.js +16 -8
- package/features/workflow/contexts/ChangeRequestEditorContext/index.d.ts +19 -10
- package/features/workflow/contexts/ChangeRequestEditorContext/index.js +28 -2
- package/features/workflow/helpers/dcr.d.ts +1 -1
- package/features/workflow/helpers/merge.js +3 -3
- package/features/workflow/helpers/validation.d.ts +17 -0
- package/features/workflow/helpers/validation.js +326 -0
- package/features/workflow/hooks/useApplyDcrChanges.js +34 -24
- package/features/workflow/hooks/useDCRValidation.d.ts +5 -0
- package/features/workflow/hooks/useDCRValidation.js +149 -0
- package/features/workflow/types.d.ts +8 -1
- package/hooks/useScrollToAttributeError/useScrollToAttributeError.d.ts +2 -1
- package/hooks/useScrollToAttributeError/useScrollToAttributeError.js +2 -2
- package/package.json +2 -2
|
@@ -0,0 +1,333 @@
|
|
|
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 __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
14
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
15
|
+
if (ar || !(i in from)) {
|
|
16
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
17
|
+
ar[i] = from[i];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
21
|
+
};
|
|
22
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
23
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.getValidationErrors = void 0;
|
|
27
|
+
var ramda_1 = require("ramda");
|
|
28
|
+
var ui_i18n_1 = __importDefault(require("ui-i18n"));
|
|
29
|
+
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
30
|
+
var ALLOWED_CHANGE_TYPES = [
|
|
31
|
+
mdm_sdk_1.DCRTypes.UPDATE_ATTRIBUTE,
|
|
32
|
+
mdm_sdk_1.DCRTypes.INSERT_ATTRIBUTE,
|
|
33
|
+
mdm_sdk_1.DCRTypes.DELETE_ATTRIBUTE,
|
|
34
|
+
mdm_sdk_1.DCRTypes.IGNORE_ATTRIBUTE
|
|
35
|
+
];
|
|
36
|
+
var getValidationErrors = function (_a) {
|
|
37
|
+
var changes = _a.changes, userChanges = _a.userChanges, entitiesOrRelations = _a.entitiesOrRelations, metadata = _a.metadata;
|
|
38
|
+
var _b = validateTopLevelAttributes({
|
|
39
|
+
changes: changes,
|
|
40
|
+
userChanges: userChanges,
|
|
41
|
+
entitiesOrRelations: entitiesOrRelations,
|
|
42
|
+
metadata: metadata
|
|
43
|
+
}), topLevelErrors = _b.errors, topRejectedChangeIds = _b.topRejectedChangeIds;
|
|
44
|
+
var complexErrors = validateComplexAttributes({ changes: changes, userChanges: userChanges, metadata: metadata, topRejectedChangeIds: topRejectedChangeIds });
|
|
45
|
+
return __spreadArray(__spreadArray([], topLevelErrors, true), complexErrors, true);
|
|
46
|
+
};
|
|
47
|
+
exports.getValidationErrors = getValidationErrors;
|
|
48
|
+
var validateTopLevelAttributes = function (_a) {
|
|
49
|
+
var changes = _a.changes, userChanges = _a.userChanges, entitiesOrRelations = _a.entitiesOrRelations, metadata = _a.metadata;
|
|
50
|
+
var errors = [];
|
|
51
|
+
var topRejectedChangeIds = [];
|
|
52
|
+
var _loop_1 = function (entityUri) {
|
|
53
|
+
var entityOrRelation = entitiesOrRelations[entityUri];
|
|
54
|
+
var objectChanges = changes[entityUri] || [];
|
|
55
|
+
var requiredAttributeUris = getRequiredAttributeUris(metadata, entityOrRelation.type);
|
|
56
|
+
var changesByAttributePath = {};
|
|
57
|
+
objectChanges.forEach(function (change) {
|
|
58
|
+
var _a;
|
|
59
|
+
var attributeTypeUri = change.refAttributeType || change.attributeType;
|
|
60
|
+
if (!change.type ||
|
|
61
|
+
!ALLOWED_CHANGE_TYPES.includes(change.type) ||
|
|
62
|
+
!requiredAttributeUris.includes(change.attributeType || '')) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
var foundUserChanges = getTopLevelUserChangesByChangeId(userChanges, change.id);
|
|
66
|
+
foundUserChanges.forEach(function (userChange) {
|
|
67
|
+
if (userChange.data.isRejected) {
|
|
68
|
+
topRejectedChangeIds.push(change.id);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
var hasUserChanges = foundUserChanges.length > 0;
|
|
72
|
+
var adjustedChange = adjustChangeWithUserChanges(change, foundUserChanges);
|
|
73
|
+
var currentAttributePath = getCurrentAttributePath(change.attributePath);
|
|
74
|
+
if (!changesByAttributePath[currentAttributePath]) {
|
|
75
|
+
var objectValues = (0, mdm_sdk_1.findAttributeValuesByTypeUri)(metadata, entityOrRelation, attributeTypeUri);
|
|
76
|
+
changesByAttributePath[currentAttributePath] = {
|
|
77
|
+
changes: [],
|
|
78
|
+
objectValues: objectValues,
|
|
79
|
+
attributeTypeUri: attributeTypeUri,
|
|
80
|
+
attributeType: (0, mdm_sdk_1.findAttributeTypeByUri)(metadata, attributeTypeUri),
|
|
81
|
+
parentUri: (0, mdm_sdk_1.getParentUri)(change.attributePath),
|
|
82
|
+
lineIds: []
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
if (adjustedChange) {
|
|
86
|
+
changesByAttributePath[currentAttributePath].changes.push(adjustedChange);
|
|
87
|
+
}
|
|
88
|
+
if (hasUserChanges) {
|
|
89
|
+
changesByAttributePath[currentAttributePath].hasUserChanges = true;
|
|
90
|
+
}
|
|
91
|
+
(_a = changesByAttributePath[currentAttributePath].lineIds).push.apply(_a, foundUserChanges.map(function (userChange) { return userChange.lineId; }));
|
|
92
|
+
});
|
|
93
|
+
Object.values(changesByAttributePath).forEach(function (_a) {
|
|
94
|
+
var _b;
|
|
95
|
+
var hasUserChanges = _a.hasUserChanges, objectValues = _a.objectValues, attributeChanges = _a.changes, attributeTypeUri = _a.attributeTypeUri, attributeType = _a.attributeType, parentUri = _a.parentUri, lineIds = _a.lineIds;
|
|
96
|
+
if (hasUserChanges && !hasAttributeValue(objectValues, attributeChanges, entityUri)) {
|
|
97
|
+
var valueUri = (_b = objectValues === null || objectValues === void 0 ? void 0 : objectValues[0]) === null || _b === void 0 ? void 0 : _b.uri;
|
|
98
|
+
errors.push(createRequiredError({
|
|
99
|
+
attributeType: attributeType,
|
|
100
|
+
attributeTypeUri: attributeTypeUri,
|
|
101
|
+
parentUri: parentUri,
|
|
102
|
+
lineIds: lineIds,
|
|
103
|
+
metadata: metadata,
|
|
104
|
+
entityUri: entityUri,
|
|
105
|
+
entitiesMap: entitiesOrRelations,
|
|
106
|
+
valueUri: valueUri
|
|
107
|
+
}));
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
};
|
|
111
|
+
for (var entityUri in entitiesOrRelations) {
|
|
112
|
+
_loop_1(entityUri);
|
|
113
|
+
}
|
|
114
|
+
return { errors: errors, topRejectedChangeIds: topRejectedChangeIds };
|
|
115
|
+
};
|
|
116
|
+
var validateComplexAttributes = function (_a) {
|
|
117
|
+
var changes = _a.changes, userChanges = _a.userChanges, metadata = _a.metadata, _b = _a.topRejectedChangeIds, topRejectedChangeIds = _b === void 0 ? [] : _b;
|
|
118
|
+
var errors = [];
|
|
119
|
+
var _loop_2 = function (entityUri) {
|
|
120
|
+
var objectChanges = changes[entityUri] || [];
|
|
121
|
+
objectChanges.forEach(function (change) {
|
|
122
|
+
var _a, _b, _c, _d;
|
|
123
|
+
if (topRejectedChangeIds.includes(change.id)) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
var hasComplexValue = (typeof ((_a = change.newValue) === null || _a === void 0 ? void 0 : _a.value) === 'object' &&
|
|
127
|
+
!Array.isArray((_b = change.newValue) === null || _b === void 0 ? void 0 : _b.value)) ||
|
|
128
|
+
(typeof ((_c = change.oldValue) === null || _c === void 0 ? void 0 : _c.value) === 'object' &&
|
|
129
|
+
!Array.isArray((_d = change.oldValue) === null || _d === void 0 ? void 0 : _d.value));
|
|
130
|
+
var isCreateType = change.type === mdm_sdk_1.DCRTypes.CREATE_ENTITY || change.type === mdm_sdk_1.DCRTypes.CREATE_RELATIONSHIP;
|
|
131
|
+
if (!hasComplexValue && !isCreateType) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
var foundUserChanges = getUserChangesByChangeId(userChanges, change.id);
|
|
135
|
+
var complexErrors = validateRequiredComplexAttributes({
|
|
136
|
+
metadata: metadata,
|
|
137
|
+
change: change,
|
|
138
|
+
userChanges: foundUserChanges,
|
|
139
|
+
entityUri: entityUri
|
|
140
|
+
});
|
|
141
|
+
errors.push.apply(errors, complexErrors);
|
|
142
|
+
});
|
|
143
|
+
};
|
|
144
|
+
for (var entityUri in changes) {
|
|
145
|
+
_loop_2(entityUri);
|
|
146
|
+
}
|
|
147
|
+
return errors;
|
|
148
|
+
};
|
|
149
|
+
var getTopLevelUserChangesByChangeId = function (userChanges, changeId) {
|
|
150
|
+
return getUserChangesByChangeId(userChanges, changeId).filter(function (userChange) { return userChange.lineId.split('/').length === 3; });
|
|
151
|
+
};
|
|
152
|
+
var getUserChangesByChangeId = function (userChanges, changeId) {
|
|
153
|
+
return userChanges.filter(function (userChange) { return userChange.lineId.split('/')[1] === changeId; });
|
|
154
|
+
};
|
|
155
|
+
var getIsChangeRejected = function (userChanges, changeType) {
|
|
156
|
+
if (userChanges.length === 0)
|
|
157
|
+
return false;
|
|
158
|
+
var isInsertType = changeType === mdm_sdk_1.DCRTypes.INSERT_ATTRIBUTE;
|
|
159
|
+
return userChanges.some(function (userChange) { var _a; return userChange.data.isRejected || (isInsertType && (0, mdm_sdk_1.isEmptyValue)((_a = userChange.data.value) === null || _a === void 0 ? void 0 : _a.value)); });
|
|
160
|
+
};
|
|
161
|
+
var adjustChangeWithUserChanges = function (change, userChanges) {
|
|
162
|
+
var _a;
|
|
163
|
+
if (getIsChangeRejected(userChanges, change.type)) {
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
if (change.type === mdm_sdk_1.DCRTypes.UPDATE_ATTRIBUTE && userChanges.length > 0) {
|
|
167
|
+
if ((0, mdm_sdk_1.isEmptyValue)((_a = userChanges[0].data.value) === null || _a === void 0 ? void 0 : _a.value)) {
|
|
168
|
+
return __assign(__assign({}, change), { type: mdm_sdk_1.DCRTypes.DELETE_ATTRIBUTE });
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return change;
|
|
172
|
+
};
|
|
173
|
+
var getCurrentAttributePath = function (attributePath) {
|
|
174
|
+
var parts = attributePath.split('/');
|
|
175
|
+
return parts.slice(0, parts.length % 2 === 0 ? parts.length - 1 : parts.length).join('/');
|
|
176
|
+
};
|
|
177
|
+
var getEntityValueUri = function (entityOrRelationTypeUri, change) {
|
|
178
|
+
if (change.refObjectURI) {
|
|
179
|
+
var relationId = change.refObjectURI.split('/').pop();
|
|
180
|
+
var refAttributeTypeParts = change.refAttributeType.split('/attributes/');
|
|
181
|
+
return "".concat(entityOrRelationTypeUri, "/attributes/").concat(refAttributeTypeParts[1], "/").concat(relationId, "/").concat(change.attributePath);
|
|
182
|
+
}
|
|
183
|
+
return "".concat(entityOrRelationTypeUri, "/attributes/").concat(change.attributePath);
|
|
184
|
+
};
|
|
185
|
+
var hasAttributeValue = function (objectValues, changes, entityUri) {
|
|
186
|
+
var values = (0, ramda_1.clone)(objectValues);
|
|
187
|
+
var _loop_3 = function (change) {
|
|
188
|
+
if (change.type === mdm_sdk_1.DCRTypes.UPDATE_ATTRIBUTE || change.type === mdm_sdk_1.DCRTypes.INSERT_ATTRIBUTE) {
|
|
189
|
+
return { value: true };
|
|
190
|
+
}
|
|
191
|
+
var valueUri = getEntityValueUri(entityUri, change);
|
|
192
|
+
var valueIndex = values.findIndex(function (value) { return value.uri === valueUri; });
|
|
193
|
+
if (change.type === mdm_sdk_1.DCRTypes.DELETE_ATTRIBUTE) {
|
|
194
|
+
if (valueIndex !== -1) {
|
|
195
|
+
values.splice(valueIndex, 1);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
else if (change.type === mdm_sdk_1.DCRTypes.IGNORE_ATTRIBUTE && valueIndex !== -1) {
|
|
199
|
+
values[valueIndex].ignored = change.newPinOrIgnoreValue;
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
for (var _i = 0, changes_1 = changes; _i < changes_1.length; _i++) {
|
|
203
|
+
var change = changes_1[_i];
|
|
204
|
+
var state_1 = _loop_3(change);
|
|
205
|
+
if (typeof state_1 === "object")
|
|
206
|
+
return state_1.value;
|
|
207
|
+
}
|
|
208
|
+
return values.filter(mdm_sdk_1.isOv).filter(function (value) { return !(0, mdm_sdk_1.isIgnored)(value); }).length > 0;
|
|
209
|
+
};
|
|
210
|
+
var getEntityTypeUriFromAttributeUri = function (attributeUri) {
|
|
211
|
+
return attributeUri.split('/').slice(0, 3).join('/');
|
|
212
|
+
};
|
|
213
|
+
var getAttributeTypeUriFromLineId = function (attributeTypeUri, lineId) {
|
|
214
|
+
var EXCLUDED_PARTS = new Set(['value', 'newValue', 'oldValue', 'attributes']);
|
|
215
|
+
var lineParts = lineId
|
|
216
|
+
.split('/')
|
|
217
|
+
.slice(2)
|
|
218
|
+
.filter(function (part) {
|
|
219
|
+
if (!isNaN(Number(part)))
|
|
220
|
+
return false;
|
|
221
|
+
return !EXCLUDED_PARTS.has(part);
|
|
222
|
+
});
|
|
223
|
+
return __spreadArray([attributeTypeUri], lineParts, true).join('/attributes/');
|
|
224
|
+
};
|
|
225
|
+
var getEntityTypeUriFromChange = function (change) {
|
|
226
|
+
if (change.type === mdm_sdk_1.DCRTypes.CREATE_ENTITY || change.type === mdm_sdk_1.DCRTypes.CREATE_RELATIONSHIP) {
|
|
227
|
+
return change.objectType || '';
|
|
228
|
+
}
|
|
229
|
+
return getEntityTypeUriFromAttributeUri(change.attributeType || change.objectType || '');
|
|
230
|
+
};
|
|
231
|
+
var getRequiredAttributeUris = function (metadata, typeUri) {
|
|
232
|
+
var requiredAttrTypes = (0, mdm_sdk_1.getRequiredAttributeTypesByTypeUri)(metadata, typeUri, true) || [];
|
|
233
|
+
return requiredAttrTypes.map(function (attr) { return attr.uri; });
|
|
234
|
+
};
|
|
235
|
+
var createRequiredError = function (_a) {
|
|
236
|
+
var attributeType = _a.attributeType, attributeTypeUri = _a.attributeTypeUri, parentUri = _a.parentUri, lineIds = _a.lineIds, metadata = _a.metadata, entityUri = _a.entityUri, entitiesMap = _a.entitiesMap, valueUri = _a.valueUri;
|
|
237
|
+
var error = (0, mdm_sdk_1.buildError)({
|
|
238
|
+
type: mdm_sdk_1.ErrorType.missed,
|
|
239
|
+
attributeType: attributeType,
|
|
240
|
+
attributeTypeUri: attributeTypeUri,
|
|
241
|
+
parentUri: parentUri,
|
|
242
|
+
message: ui_i18n_1.default.text('Attribute is required'),
|
|
243
|
+
source: mdm_sdk_1.ErrorSource.local,
|
|
244
|
+
alwaysShow: true,
|
|
245
|
+
uri: lineIds[0]
|
|
246
|
+
});
|
|
247
|
+
var path = [];
|
|
248
|
+
if ((entitiesMap === null || entitiesMap === void 0 ? void 0 : entitiesMap[entityUri]) && valueUri) {
|
|
249
|
+
path = (0, mdm_sdk_1.evaluateErrorPath)({
|
|
250
|
+
entityUri: entityUri,
|
|
251
|
+
metadata: metadata,
|
|
252
|
+
entitiesMap: entitiesMap
|
|
253
|
+
}, valueUri);
|
|
254
|
+
}
|
|
255
|
+
return {
|
|
256
|
+
error: __assign(__assign({}, error), { path: path }),
|
|
257
|
+
lineIds: lineIds
|
|
258
|
+
};
|
|
259
|
+
};
|
|
260
|
+
var validateRequiredComplexAttributes = function (_a) {
|
|
261
|
+
var _b;
|
|
262
|
+
var metadata = _a.metadata, change = _a.change, userChanges = _a.userChanges, entityUri = _a.entityUri;
|
|
263
|
+
if (userChanges.length === 0 || change.type === mdm_sdk_1.DCRTypes.DELETE_ATTRIBUTE) {
|
|
264
|
+
return [];
|
|
265
|
+
}
|
|
266
|
+
var valueHolder = change.type === mdm_sdk_1.DCRTypes.CREATE_ENTITY || change.type === mdm_sdk_1.DCRTypes.CREATE_RELATIONSHIP ? 'attributes' : 'value';
|
|
267
|
+
var rootAttributeTypeUri = change.refAttributeType || change.attributeType || change.objectType;
|
|
268
|
+
var attributeType = (0, mdm_sdk_1.findAttributeTypeByUri)(metadata, rootAttributeTypeUri);
|
|
269
|
+
var isReferenceType = (0, mdm_sdk_1.isReference)(attributeType);
|
|
270
|
+
var entityTypeUri = isReferenceType ? attributeType.relationshipTypeURI : getEntityTypeUriFromChange(change);
|
|
271
|
+
var requiredAttributeUris = getRequiredAttributeUris(metadata, entityTypeUri);
|
|
272
|
+
var calculateLineIdFromPath = function (path) {
|
|
273
|
+
if (path === void 0) { path = ''; }
|
|
274
|
+
var entityId = entityUri.split('/').pop() || '';
|
|
275
|
+
return "".concat(entityId, "/").concat(change.id, "/newValue").concat(path ? "/".concat(path) : '');
|
|
276
|
+
};
|
|
277
|
+
var checkIsChangeRejected = function (path) {
|
|
278
|
+
var _a, _b, _c;
|
|
279
|
+
var searchLineId = calculateLineIdFromPath(path);
|
|
280
|
+
var lineUserChanges = userChanges.find(function (userChange) { return userChange.lineId === searchLineId; });
|
|
281
|
+
return (((_a = lineUserChanges === null || lineUserChanges === void 0 ? void 0 : lineUserChanges.data) === null || _a === void 0 ? void 0 : _a.isRejected) || (lineUserChanges && (0, mdm_sdk_1.isEmptyValue)((_c = (_b = lineUserChanges === null || lineUserChanges === void 0 ? void 0 : lineUserChanges.data) === null || _b === void 0 ? void 0 : _b.value) === null || _c === void 0 ? void 0 : _c.value)));
|
|
282
|
+
};
|
|
283
|
+
var collectErrors = function (attributes) {
|
|
284
|
+
var errors = [];
|
|
285
|
+
var visitValue = function (value, path) {
|
|
286
|
+
var isRejected = checkIsChangeRejected(path.slice(0, -1).join('/'));
|
|
287
|
+
if (typeof value === 'string') {
|
|
288
|
+
return !isRejected;
|
|
289
|
+
}
|
|
290
|
+
if (isRejected) {
|
|
291
|
+
return false;
|
|
292
|
+
}
|
|
293
|
+
var anyFieldHasValue = false;
|
|
294
|
+
Object.entries(value).forEach(function (_a) {
|
|
295
|
+
var fieldName = _a[0], subAttributes = _a[1];
|
|
296
|
+
var anyChildHasValue = false;
|
|
297
|
+
var attributePath = __spreadArray(__spreadArray([], path, true), [fieldName], false);
|
|
298
|
+
var rejectedLineIds = [];
|
|
299
|
+
subAttributes.forEach(function (subAttribute, index) {
|
|
300
|
+
var childPath = __spreadArray(__spreadArray([], attributePath, true), [index, 'value'], false);
|
|
301
|
+
var childHasValue = visitValue(subAttribute.value, childPath);
|
|
302
|
+
if (!childHasValue) {
|
|
303
|
+
rejectedLineIds.push(calculateLineIdFromPath(childPath.slice(0, -1).join('/')));
|
|
304
|
+
}
|
|
305
|
+
anyChildHasValue = anyChildHasValue || childHasValue;
|
|
306
|
+
});
|
|
307
|
+
anyFieldHasValue = anyFieldHasValue || anyChildHasValue;
|
|
308
|
+
if (!anyChildHasValue) {
|
|
309
|
+
var attributeTypeUri = getAttributeTypeUriFromLineId(isReferenceType ? entityTypeUri : rootAttributeTypeUri, rejectedLineIds[0]);
|
|
310
|
+
var isRequired = requiredAttributeUris.includes(attributeTypeUri);
|
|
311
|
+
if (isRequired) {
|
|
312
|
+
errors.push(createRequiredError({
|
|
313
|
+
attributeType: (0, mdm_sdk_1.findAttributeTypeByUri)(metadata, attributeTypeUri),
|
|
314
|
+
attributeTypeUri: attributeTypeUri,
|
|
315
|
+
lineIds: rejectedLineIds
|
|
316
|
+
}));
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
});
|
|
320
|
+
return anyFieldHasValue;
|
|
321
|
+
};
|
|
322
|
+
var hasValue = visitValue(attributes, [valueHolder]);
|
|
323
|
+
if (!hasValue && attributeType.required) {
|
|
324
|
+
errors.push(createRequiredError({
|
|
325
|
+
attributeType: attributeType,
|
|
326
|
+
attributeTypeUri: attributeType.uri,
|
|
327
|
+
lineIds: [calculateLineIdFromPath()]
|
|
328
|
+
}));
|
|
329
|
+
}
|
|
330
|
+
return errors;
|
|
331
|
+
};
|
|
332
|
+
return collectErrors((_b = change.newValue) === null || _b === void 0 ? void 0 : _b[valueHolder]);
|
|
333
|
+
};
|
|
@@ -44,30 +44,40 @@ var ramda_1 = require("ramda");
|
|
|
44
44
|
var MdmModuleContext_1 = require("../../../contexts/MdmModuleContext");
|
|
45
45
|
var ChangeRequestEditorContext_1 = require("../contexts/ChangeRequestEditorContext");
|
|
46
46
|
var dcr_1 = require("../helpers/dcr");
|
|
47
|
+
var useDCRValidation_1 = require("./useDCRValidation");
|
|
47
48
|
var withChangeRequestId = function (dcrUri) { return function (url) {
|
|
48
49
|
return url + (url.includes('?') ? '&' : '?') + "changeRequestId=".concat(encodeURIComponent(dcrUri.split('/')[1]));
|
|
49
50
|
}; };
|
|
50
51
|
var useApplyDcrChanges = function (dcr) {
|
|
51
52
|
var getLinesByChangeId = (0, react_context_selector_1.useContextSelector)(ChangeRequestEditorContext_1.ChangeRequestEditorContext, function (context) { return context.getLinesByChangeId; });
|
|
52
53
|
var metadata = (0, MdmModuleContext_1.useMdmMetadata)();
|
|
54
|
+
var getErrors = (0, useDCRValidation_1.useDCRValidation)(dcr);
|
|
53
55
|
var applyDcrChanges = (0, react_1.useCallback)(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
54
|
-
var _a, rejectedChangeIds, updatedChanges, deleteEntityAttributes, deleteRelationAttributes, deleteChangeResults, deleteEntityAttributesResults, deleteRelationAttributesResults, deleteChangeFailures, error_1, deleteEntityAttributesFailures, deleteRelationAttributesFailures;
|
|
56
|
+
var errors, _a, rejectedChangeIds, updatedChanges, deleteEntityAttributes, deleteRelationAttributes, deleteChangeResults, deleteEntityAttributesResults, deleteRelationAttributesResults, deleteChangeFailures, error_1, deleteEntityAttributesFailures, deleteRelationAttributesFailures;
|
|
55
57
|
return __generator(this, function (_b) {
|
|
56
58
|
switch (_b.label) {
|
|
57
59
|
case 0:
|
|
58
|
-
if (!(dcr === null || dcr === void 0 ? void 0 : dcr.changes)) return [3 /*break*/,
|
|
60
|
+
if (!(dcr === null || dcr === void 0 ? void 0 : dcr.changes)) return [3 /*break*/, 12];
|
|
61
|
+
return [4 /*yield*/, getErrors()];
|
|
62
|
+
case 1:
|
|
63
|
+
errors = _b.sent();
|
|
64
|
+
if (errors.length > 0) {
|
|
65
|
+
return [2 /*return*/, {
|
|
66
|
+
proceed: false
|
|
67
|
+
}];
|
|
68
|
+
}
|
|
59
69
|
_a = (0, dcr_1.buildDCRSavePlan)(dcr.changes, getLinesByChangeId, metadata), rejectedChangeIds = _a.rejectedChangeIds, updatedChanges = _a.updatedChanges, deleteEntityAttributes = _a.deleteEntityAttributes, deleteRelationAttributes = _a.deleteRelationAttributes;
|
|
60
70
|
deleteChangeResults = [];
|
|
61
71
|
deleteEntityAttributesResults = [];
|
|
62
72
|
deleteRelationAttributesResults = [];
|
|
63
|
-
if (!(rejectedChangeIds.length > 0)) return [3 /*break*/,
|
|
73
|
+
if (!(rejectedChangeIds.length > 0)) return [3 /*break*/, 3];
|
|
64
74
|
return [4 /*yield*/, (0, mdm_sdk_1.promiseAllSettled)(rejectedChangeIds.map(function (changeId) {
|
|
65
75
|
return (0, mdm_sdk_1.deleteChangeRequestItem)({ dcrUri: dcr.uri, changeItemId: changeId });
|
|
66
76
|
}))];
|
|
67
|
-
case 1:
|
|
68
|
-
deleteChangeResults = _b.sent();
|
|
69
|
-
_b.label = 2;
|
|
70
77
|
case 2:
|
|
78
|
+
deleteChangeResults = _b.sent();
|
|
79
|
+
_b.label = 3;
|
|
80
|
+
case 3:
|
|
71
81
|
deleteChangeFailures = deleteChangeResults.filter(function (result) { return result.status === 'rejected'; });
|
|
72
82
|
if (deleteChangeFailures.length) {
|
|
73
83
|
return [2 /*return*/, {
|
|
@@ -75,22 +85,22 @@ var useApplyDcrChanges = function (dcr) {
|
|
|
75
85
|
error: new Error("Failed to delete DCR change(s): ".concat(deleteChangeFailures.map(function (result) { return result.reason; }).join(', ')))
|
|
76
86
|
}];
|
|
77
87
|
}
|
|
78
|
-
if (!!(0, ramda_1.isEmpty)(updatedChanges)) return [3 /*break*/,
|
|
79
|
-
_b.label =
|
|
80
|
-
case 3:
|
|
81
|
-
_b.trys.push([3, 5, , 6]);
|
|
82
|
-
return [4 /*yield*/, (0, mdm_sdk_1.updateChangeRequest)({ dcrUri: dcr.uri, payload: updatedChanges })];
|
|
88
|
+
if (!!(0, ramda_1.isEmpty)(updatedChanges)) return [3 /*break*/, 7];
|
|
89
|
+
_b.label = 4;
|
|
83
90
|
case 4:
|
|
84
|
-
_b.
|
|
85
|
-
return [
|
|
91
|
+
_b.trys.push([4, 6, , 7]);
|
|
92
|
+
return [4 /*yield*/, (0, mdm_sdk_1.updateChangeRequest)({ dcrUri: dcr.uri, payload: updatedChanges })];
|
|
86
93
|
case 5:
|
|
94
|
+
_b.sent();
|
|
95
|
+
return [3 /*break*/, 7];
|
|
96
|
+
case 6:
|
|
87
97
|
error_1 = _b.sent();
|
|
88
98
|
return [2 /*return*/, {
|
|
89
99
|
proceed: false,
|
|
90
100
|
error: error_1
|
|
91
101
|
}];
|
|
92
|
-
case
|
|
93
|
-
if (!!(0, ramda_1.isEmpty)(deleteEntityAttributes)) return [3 /*break*/,
|
|
102
|
+
case 7:
|
|
103
|
+
if (!!(0, ramda_1.isEmpty)(deleteEntityAttributes)) return [3 /*break*/, 9];
|
|
94
104
|
return [4 /*yield*/, (0, mdm_sdk_1.promiseAllSettled)(Object.entries(deleteEntityAttributes).map(function (_a) {
|
|
95
105
|
var entityUri = _a[0], diff = _a[1];
|
|
96
106
|
return (0, mdm_sdk_1.entityCumulativeUpdate)({
|
|
@@ -99,10 +109,10 @@ var useApplyDcrChanges = function (dcr) {
|
|
|
99
109
|
uriPreprocessor: withChangeRequestId(dcr.uri)
|
|
100
110
|
});
|
|
101
111
|
}))];
|
|
102
|
-
case 7:
|
|
103
|
-
deleteEntityAttributesResults = _b.sent();
|
|
104
|
-
_b.label = 8;
|
|
105
112
|
case 8:
|
|
113
|
+
deleteEntityAttributesResults = _b.sent();
|
|
114
|
+
_b.label = 9;
|
|
115
|
+
case 9:
|
|
106
116
|
deleteEntityAttributesFailures = deleteEntityAttributesResults.filter(function (result) { return result.status === 'rejected'; });
|
|
107
117
|
if (deleteEntityAttributesFailures.length) {
|
|
108
118
|
return [2 /*return*/, {
|
|
@@ -110,7 +120,7 @@ var useApplyDcrChanges = function (dcr) {
|
|
|
110
120
|
error: new Error("Failed to delete entity attributes: ".concat(deleteEntityAttributesFailures.map(function (result) { return result.reason; }).join(', ')))
|
|
111
121
|
}];
|
|
112
122
|
}
|
|
113
|
-
if (!!(0, ramda_1.isEmpty)(deleteRelationAttributes)) return [3 /*break*/,
|
|
123
|
+
if (!!(0, ramda_1.isEmpty)(deleteRelationAttributes)) return [3 /*break*/, 11];
|
|
114
124
|
return [4 /*yield*/, (0, mdm_sdk_1.promiseAllSettled)(Object.entries(deleteRelationAttributes).map(function (_a) {
|
|
115
125
|
var relationUri = _a[0], diff = _a[1];
|
|
116
126
|
return (0, mdm_sdk_1.updateRelationWithDiff)({
|
|
@@ -119,10 +129,10 @@ var useApplyDcrChanges = function (dcr) {
|
|
|
119
129
|
uriPreprocessor: withChangeRequestId(dcr.uri)
|
|
120
130
|
});
|
|
121
131
|
}))];
|
|
122
|
-
case 9:
|
|
123
|
-
deleteRelationAttributesResults = _b.sent();
|
|
124
|
-
_b.label = 10;
|
|
125
132
|
case 10:
|
|
133
|
+
deleteRelationAttributesResults = _b.sent();
|
|
134
|
+
_b.label = 11;
|
|
135
|
+
case 11:
|
|
126
136
|
deleteRelationAttributesFailures = deleteRelationAttributesResults.filter(function (result) { return result.status === 'rejected'; });
|
|
127
137
|
if (deleteRelationAttributesFailures.length) {
|
|
128
138
|
return [2 /*return*/, {
|
|
@@ -133,13 +143,13 @@ var useApplyDcrChanges = function (dcr) {
|
|
|
133
143
|
return [2 /*return*/, {
|
|
134
144
|
proceed: true
|
|
135
145
|
}];
|
|
136
|
-
case
|
|
146
|
+
case 12: return [2 /*return*/, {
|
|
137
147
|
proceed: false,
|
|
138
148
|
error: new Error('No changes to apply')
|
|
139
149
|
}];
|
|
140
150
|
}
|
|
141
151
|
});
|
|
142
|
-
}); }, [dcr, getLinesByChangeId, metadata]);
|
|
152
|
+
}); }, [dcr, getLinesByChangeId, metadata, getErrors]);
|
|
143
153
|
return applyDcrChanges;
|
|
144
154
|
};
|
|
145
155
|
exports.useApplyDcrChanges = useApplyDcrChanges;
|
|
@@ -0,0 +1,153 @@
|
|
|
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
24
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
+
function step(op) {
|
|
27
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
29
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
30
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
+
switch (op[0]) {
|
|
32
|
+
case 0: case 1: t = op; break;
|
|
33
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
+
default:
|
|
37
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
+
if (t[2]) _.ops.pop();
|
|
42
|
+
_.trys.pop(); continue;
|
|
43
|
+
}
|
|
44
|
+
op = body.call(thisArg, _);
|
|
45
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.useDCRValidation = void 0;
|
|
51
|
+
var react_1 = require("react");
|
|
52
|
+
var react_context_selector_1 = require("@fluentui/react-context-selector");
|
|
53
|
+
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
54
|
+
var MdmModuleContext_1 = require("../../../contexts/MdmModuleContext");
|
|
55
|
+
var useSafePromise_1 = require("../../../hooks/useSafePromise");
|
|
56
|
+
var context_1 = require("../../../contexts/MdmModuleContext/context");
|
|
57
|
+
var ChangeRequestEditorContext_1 = require("../contexts/ChangeRequestEditorContext");
|
|
58
|
+
var validation_1 = require("../helpers/validation");
|
|
59
|
+
var useDCRValidation = function (dcr) {
|
|
60
|
+
var metadata = (0, MdmModuleContext_1.useMdmMetadata)();
|
|
61
|
+
var currentEntity = (0, MdmModuleContext_1.useMdmEntity)();
|
|
62
|
+
var dcrReviewValidation = (0, MdmModuleContext_1.useMdmDcrReviewValidation)();
|
|
63
|
+
var relationsState = (0, react_context_selector_1.useContextSelector)(context_1.MdmModuleValuesContext, function (context) { return context.relations; });
|
|
64
|
+
var getAllChanges = (0, react_context_selector_1.useContextSelector)(ChangeRequestEditorContext_1.ChangeRequestEditorContext, function (context) { return context.getAllChanges; });
|
|
65
|
+
var setErrors = (0, react_context_selector_1.useContextSelector)(ChangeRequestEditorContext_1.ChangeRequestEditorContext, function (context) { return context.setErrors; });
|
|
66
|
+
var relationsRef = (0, react_1.useRef)(null);
|
|
67
|
+
var safePromise = (0, useSafePromise_1.useSafePromise)();
|
|
68
|
+
var findRelationInStore = (0, react_1.useCallback)(function (uri) {
|
|
69
|
+
if (!relationsState)
|
|
70
|
+
return null;
|
|
71
|
+
for (var viewId in relationsState) {
|
|
72
|
+
var viewState = relationsState[viewId];
|
|
73
|
+
if (viewState === null || viewState === void 0 ? void 0 : viewState.connections) {
|
|
74
|
+
return (0, mdm_sdk_1.findConnectionRelationObjectByRelationUri)(viewState.connections, uri);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
}, [relationsState]);
|
|
79
|
+
var urisFromDcr = (0, react_1.useMemo)(function () {
|
|
80
|
+
var result = [];
|
|
81
|
+
if (!(dcr === null || dcr === void 0 ? void 0 : dcr.changes))
|
|
82
|
+
return result;
|
|
83
|
+
for (var key in dcr.changes) {
|
|
84
|
+
var changes = dcr.changes[key] || [];
|
|
85
|
+
var hasCreate = changes.some(function (c) { return (c === null || c === void 0 ? void 0 : c.type) === mdm_sdk_1.DCRTypes.CREATE_ENTITY || (c === null || c === void 0 ? void 0 : c.type) === mdm_sdk_1.DCRTypes.CREATE_RELATIONSHIP; });
|
|
86
|
+
if (!hasCreate) {
|
|
87
|
+
result.push(key);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return result;
|
|
91
|
+
}, [dcr]);
|
|
92
|
+
var localObjects = (0, react_1.useMemo)(function () {
|
|
93
|
+
var currentEntityObject = {};
|
|
94
|
+
currentEntityObject[currentEntity === null || currentEntity === void 0 ? void 0 : currentEntity.uri] = currentEntity;
|
|
95
|
+
return urisFromDcr.reduce(function (acc, uri) {
|
|
96
|
+
if ((0, mdm_sdk_1.isRelationUri)(uri)) {
|
|
97
|
+
var localRelation = findRelationInStore(uri);
|
|
98
|
+
if (localRelation) {
|
|
99
|
+
acc[uri] = localRelation;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return acc;
|
|
103
|
+
}, currentEntityObject);
|
|
104
|
+
}, [urisFromDcr, findRelationInStore, currentEntity]);
|
|
105
|
+
(0, react_1.useEffect)(function () {
|
|
106
|
+
if (!dcrReviewValidation || !urisFromDcr.length || (relationsRef === null || relationsRef === void 0 ? void 0 : relationsRef.current))
|
|
107
|
+
return;
|
|
108
|
+
var relationsPromises = [];
|
|
109
|
+
urisFromDcr.forEach(function (uri) {
|
|
110
|
+
if ((0, mdm_sdk_1.isRelationUri)(uri) && !localObjects[uri]) {
|
|
111
|
+
relationsPromises.push((0, mdm_sdk_1.getRelation)(uri));
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
relationsRef.current = safePromise(Promise.all(relationsPromises));
|
|
115
|
+
}, [dcrReviewValidation, urisFromDcr, findRelationInStore, safePromise, localObjects]);
|
|
116
|
+
var getErrors = (0, react_1.useCallback)(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
117
|
+
var relations, _a, loadedRelationsObject, objectsByUri, userChanges, errors;
|
|
118
|
+
return __generator(this, function (_b) {
|
|
119
|
+
switch (_b.label) {
|
|
120
|
+
case 0:
|
|
121
|
+
if (!dcrReviewValidation) {
|
|
122
|
+
return [2 /*return*/, []];
|
|
123
|
+
}
|
|
124
|
+
if (!relationsRef.current) return [3 /*break*/, 2];
|
|
125
|
+
return [4 /*yield*/, relationsRef.current];
|
|
126
|
+
case 1:
|
|
127
|
+
_a = _b.sent();
|
|
128
|
+
return [3 /*break*/, 3];
|
|
129
|
+
case 2:
|
|
130
|
+
_a = [];
|
|
131
|
+
_b.label = 3;
|
|
132
|
+
case 3:
|
|
133
|
+
relations = _a;
|
|
134
|
+
loadedRelationsObject = relations.reduce(function (acc, relation) {
|
|
135
|
+
acc[relation.uri] = relation;
|
|
136
|
+
return acc;
|
|
137
|
+
}, {});
|
|
138
|
+
objectsByUri = __assign(__assign({}, localObjects), loadedRelationsObject);
|
|
139
|
+
userChanges = getAllChanges();
|
|
140
|
+
errors = (0, validation_1.getValidationErrors)({
|
|
141
|
+
changes: dcr === null || dcr === void 0 ? void 0 : dcr.changes,
|
|
142
|
+
userChanges: userChanges,
|
|
143
|
+
entitiesOrRelations: objectsByUri,
|
|
144
|
+
metadata: metadata
|
|
145
|
+
});
|
|
146
|
+
setErrors(errors);
|
|
147
|
+
return [2 /*return*/, errors];
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}); }, [dcrReviewValidation, dcr === null || dcr === void 0 ? void 0 : dcr.changes, getAllChanges, localObjects, metadata, setErrors]);
|
|
151
|
+
return getErrors;
|
|
152
|
+
};
|
|
153
|
+
exports.useDCRValidation = useDCRValidation;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AttributeType, DCRAttributeValue, DCROperationTypes, DCRRelationInfo, EnrichedChangeValue, TRelationType, ChangeValue } from '@reltio/mdm-sdk';
|
|
1
|
+
import { AttributeType, DCRAttributeValue, DCROperationTypes, DCRRelationInfo, EnrichedChangeValue, TRelationType, ChangeValue, SimpleAttributeValue, PrimitiveValue } from '@reltio/mdm-sdk';
|
|
2
2
|
export type TaskAction = {
|
|
3
3
|
text: string;
|
|
4
4
|
onClick: (comment: string) => void;
|
|
@@ -23,3 +23,10 @@ export type BeforeActionOutcome = {
|
|
|
23
23
|
proceed: boolean;
|
|
24
24
|
error?: unknown;
|
|
25
25
|
};
|
|
26
|
+
export type LineDataValue = SimpleAttributeValue | {
|
|
27
|
+
value: string[] | PrimitiveValue;
|
|
28
|
+
};
|
|
29
|
+
export type LineData = {
|
|
30
|
+
value?: LineDataValue;
|
|
31
|
+
isRejected?: boolean;
|
|
32
|
+
};
|
|
@@ -3,8 +3,9 @@ import { ScrollToElementContext } from '../../contexts/ScrollToElementContext';
|
|
|
3
3
|
type Props = {
|
|
4
4
|
highlightedError: ContextType<typeof ScrollToElementContext> | null;
|
|
5
5
|
isSimple?: boolean;
|
|
6
|
+
className?: string;
|
|
6
7
|
};
|
|
7
|
-
export declare const useScrollToAttributeError: ({ highlightedError: context, isSimple }: Props) => {
|
|
8
|
+
export declare const useScrollToAttributeError: ({ highlightedError: context, isSimple, className }: Props) => {
|
|
8
9
|
ref: import("react").MutableRefObject<HTMLDivElement>;
|
|
9
10
|
errorClassName: string;
|
|
10
11
|
} | {
|