@truedat/df 7.5.9 → 7.5.11
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/package.json +43 -67
- package/src/components/DynamicFieldValue.js +0 -1
- package/src/components/DynamicForm.js +5 -4
- package/src/components/DynamicFormViewer.js +0 -1
- package/src/components/DynamicFormWithTranslations.js +3 -3
- package/src/components/EditableDynamicFieldValue.js +1 -2
- package/src/components/FieldGroupDetail.js +0 -1
- package/src/components/FieldGroupSegment.js +17 -29
- package/src/components/FieldGroupWithTranslations.js +19 -38
- package/src/components/FieldViewerValue.js +4 -7
- package/src/components/OriginLabel.js +0 -1
- package/src/components/SelectDynamicFormWithTranslations.js +4 -6
- package/src/components/SelectableDynamicForm.js +5 -11
- package/src/components/__tests__/DynamicFieldValue.spec.js +0 -1
- package/src/components/__tests__/DynamicForm.spec.js +25 -23
- package/src/components/__tests__/EditableDynamicFieldValue.spec.js +0 -1
- package/src/components/__tests__/FieldGroupDetail.spec.js +0 -1
- package/src/components/__tests__/FieldViewerValue.spec.js +1 -6
- package/src/components/__tests__/SelectableDynamicForm.spec.js +102 -46
- package/src/components/__tests__/__snapshots__/DynamicFieldValue.spec.js.snap +2 -2
- package/src/components/__tests__/__snapshots__/DynamicForm.spec.js.snap +94 -81
- package/src/components/__tests__/__snapshots__/FieldGroupDetail.spec.js.snap +2 -2
- package/src/components/__tests__/__snapshots__/FieldViewerValue.spec.js.snap +1 -7
- package/src/components/__tests__/__snapshots__/SelectableDynamicForm.spec.js.snap +39 -39
- package/src/components/hierarchies/Hierarchies.js +2 -4
- package/src/components/hierarchies/HierarchiesView.js +1 -2
- package/src/components/hierarchies/HierarchyCrumbs.js +1 -2
- package/src/components/hierarchies/HierarchyRoutes.js +44 -39
- package/src/components/hierarchies/HierarchyView.js +4 -7
- package/src/components/hierarchies/__tests__/Hierarchies.spec.js +2 -3
- package/src/components/hierarchies/__tests__/HierarchiesView.spec.js +3 -7
- package/src/components/hierarchies/__tests__/HierarchyCrumbs.spec.js +0 -1
- package/src/components/hierarchies/__tests__/HierarchyRoutes.spec.js +79 -0
- package/src/components/hierarchies/__tests__/HierarchyView.spec.js +2 -10
- package/src/components/hierarchies/__tests__/__snapshots__/Hierarchies.spec.js.snap +1 -0
- package/src/components/hierarchies/__tests__/__snapshots__/HierarchiesView.spec.js.snap +7 -5
- package/src/components/hierarchies/__tests__/__snapshots__/HierarchyCrumbs.spec.js.snap +4 -2
- package/src/components/hierarchies/__tests__/__snapshots__/HierarchyRoutes.spec.js.snap +60 -0
- package/src/components/hierarchies/__tests__/__snapshots__/HierarchyView.spec.js.snap +8 -6
- package/src/components/widgets/CheckboxField.js +0 -1
- package/src/components/widgets/ColorPickerField.js +2 -3
- package/src/components/widgets/DateField.js +0 -1
- package/src/components/widgets/DateTimeField.js +0 -1
- package/src/components/widgets/DomainDropdown.js +1 -1
- package/src/components/widgets/DomainPreview.js +1 -2
- package/src/components/widgets/DropdownDataLoader.js +3 -3
- package/src/components/widgets/DropdownField.js +5 -4
- package/src/components/widgets/DynamicField.js +0 -5
- package/src/components/widgets/EnrichedTextField.js +0 -1
- package/src/components/widgets/HierarchyDropdown.js +1 -1
- package/src/components/widgets/HierarchyPreview.js +0 -1
- package/src/components/widgets/IdentifierField.js +0 -1
- package/src/components/widgets/ImageField.js +1 -1
- package/src/components/widgets/ImagePreview.js +0 -1
- package/src/components/widgets/NumberField.js +6 -7
- package/src/components/widgets/PairListField.js +5 -6
- package/src/components/widgets/PasswordField.js +1 -2
- package/src/components/widgets/RadioField.js +0 -1
- package/src/components/widgets/StandardDropdown.js +0 -1
- package/src/components/widgets/StringField.js +0 -1
- package/src/components/widgets/SystemPreview.js +2 -3
- package/src/components/widgets/TableField.js +5 -5
- package/src/components/widgets/TextField.js +1 -2
- package/src/components/widgets/__tests__/CheckboxField.spec.js +33 -23
- package/src/components/widgets/__tests__/ColorPickerField.spec.js +5 -12
- package/src/components/widgets/__tests__/DateField.spec.js +5 -5
- package/src/components/widgets/__tests__/DateTimeField.spec.js +5 -5
- package/src/components/widgets/__tests__/DomainPreview.spec.js +12 -14
- package/src/components/widgets/__tests__/DropdownDataLoader.spec.js +5 -5
- package/src/components/widgets/__tests__/DropdownField.spec.js +18 -29
- package/src/components/widgets/__tests__/DynamicField.spec.js +0 -1
- package/src/components/widgets/__tests__/HierarchyDropdown.spec.js +4 -5
- package/src/components/widgets/__tests__/HierarchyPreview.spec.js +0 -1
- package/src/components/widgets/__tests__/ImageField.spec.js +5 -10
- package/src/components/widgets/__tests__/NumberField.spec.js +23 -5
- package/src/components/widgets/__tests__/PairListField.spec.js +69 -59
- package/src/components/widgets/__tests__/PasswordField.spec.js +3 -4
- package/src/components/widgets/__tests__/RadioField.spec.js +5 -5
- package/src/components/widgets/__tests__/StandardDropdown.spec.js +45 -46
- package/src/components/widgets/__tests__/StringField.spec.js +10 -13
- package/src/components/widgets/__tests__/SystemPreview.spec.js +13 -15
- package/src/components/widgets/__tests__/TableField.spec.js +32 -32
- package/src/components/widgets/__tests__/TextField.spec.js +5 -5
- package/src/components/widgets/__tests__/__snapshots__/CheckboxField.spec.js.snap +58 -29
- package/src/components/widgets/__tests__/__snapshots__/ColorPickerField.spec.js.snap +221 -36
- package/src/components/widgets/__tests__/__snapshots__/DateField.spec.js.snap +21 -16
- package/src/components/widgets/__tests__/__snapshots__/DateTimeField.spec.js.snap +21 -20
- package/src/components/widgets/__tests__/__snapshots__/DomainPreview.spec.js.snap +26 -21
- package/src/components/widgets/__tests__/__snapshots__/DropdownDataLoader.spec.js.snap +1 -1
- package/src/components/widgets/__tests__/__snapshots__/DropdownField.spec.js.snap +93 -43
- package/src/components/widgets/__tests__/__snapshots__/DynamicField.spec.js.snap +2 -14
- package/src/components/widgets/__tests__/__snapshots__/ImageField.spec.js.snap +16 -28
- package/src/components/widgets/__tests__/__snapshots__/NumberField.spec.js.snap +11 -9
- package/src/components/widgets/__tests__/__snapshots__/PairListField.spec.js.snap +53 -39
- package/src/components/widgets/__tests__/__snapshots__/PasswordField.spec.js.snap +15 -8
- package/src/components/widgets/__tests__/__snapshots__/RadioField.spec.js.snap +41 -22
- package/src/components/widgets/__tests__/__snapshots__/StandardDropdown.spec.js.snap +78 -31
- package/src/components/widgets/__tests__/__snapshots__/StringField.spec.js.snap +78 -38
- package/src/components/widgets/__tests__/__snapshots__/SystemPreview.spec.js.snap +24 -21
- package/src/components/widgets/__tests__/__snapshots__/TableField.spec.js.snap +138 -174
- package/src/components/widgets/__tests__/__snapshots__/TextField.spec.js.snap +12 -7
- package/src/reducers/__tests__/dfMessage.spec.js +14 -18
- package/src/reducers/dfMessage.js +8 -7
- package/src/selectors/index.js +0 -1
- package/src/templates/components/NewTemplate.js +0 -1
- package/src/templates/components/Template.js +10 -3
- package/src/templates/components/TemplateCard.js +3 -4
- package/src/templates/components/TemplateCrumbs.js +2 -3
- package/src/templates/components/TemplateFilters.js +0 -1
- package/src/templates/components/TemplateLoader.js +25 -101
- package/src/templates/components/TemplateRoutes.js +29 -45
- package/src/templates/components/Templates.js +1 -5
- package/src/templates/components/TemplatesContext.js +3 -7
- package/src/templates/components/TemplatesTable.js +1 -2
- package/src/templates/components/__tests__/NewTemplate.spec.js +5 -10
- package/src/templates/components/__tests__/Template.spec.js +0 -1
- package/src/templates/components/__tests__/TemplateLoader.spec.js +71 -109
- package/src/templates/components/__tests__/TemplateRoutes.spec.js +63 -0
- package/src/templates/components/__tests__/TemplatesTable.spec.js +15 -9
- package/src/templates/components/__tests__/__snapshots__/NewTemplate.spec.js.snap +335 -22
- package/src/templates/components/__tests__/__snapshots__/Template.spec.js.snap +49 -48
- package/src/templates/components/__tests__/__snapshots__/TemplateLoader.spec.js.snap +7 -1
- package/src/templates/components/__tests__/__snapshots__/TemplateRoutes.spec.js.snap +38 -0
- package/src/templates/components/__tests__/__snapshots__/TemplatesTable.spec.js.snap +94 -1
- package/src/templates/components/index.js +1 -2
- package/src/templates/components/templateForm/ActiveGroupForm.js +1 -4
- package/src/templates/components/templateForm/ConditionalFieldForm.js +0 -1
- package/src/templates/components/templateForm/DefaultValue.js +0 -1
- package/src/templates/components/templateForm/DependentDomain.js +0 -1
- package/src/templates/components/templateForm/DependentFormField.js +0 -1
- package/src/templates/components/templateForm/FieldForm.js +5 -5
- package/src/templates/components/templateForm/GroupsList.js +0 -1
- package/src/templates/components/templateForm/HierarchiesList.js +1 -2
- package/src/templates/components/templateForm/MandatoryConditional.js +0 -1
- package/src/templates/components/templateForm/SwitchListForm.js +2 -2
- package/src/templates/components/templateForm/SwitchSegment.js +0 -1
- package/src/templates/components/templateForm/TemplateForm.js +1 -1
- package/src/templates/components/templateForm/TemplateFormActions.js +3 -4
- package/src/templates/components/templateForm/ValuesField.js +1 -3
- package/src/templates/components/templateForm/ValuesListForm.js +3 -3
- package/src/templates/components/templateForm/ValuesSelector.js +0 -1
- package/src/templates/components/templateForm/__tests__/ActiveGroupForm.spec.js +8 -13
- package/src/templates/components/templateForm/__tests__/DefaultValue.spec.js +198 -113
- package/src/templates/components/templateForm/__tests__/DependentDomain.spec.js +0 -1
- package/src/templates/components/templateForm/__tests__/DependentFormField.spec.js +0 -1
- package/src/templates/components/templateForm/__tests__/FieldForm.spec.js +106 -72
- package/src/templates/components/templateForm/__tests__/GroupsList.spec.js +7 -12
- package/src/templates/components/templateForm/__tests__/MandatoryConditional.spec.js +0 -1
- package/src/templates/components/templateForm/__tests__/SwitchListForm.spec.js +71 -50
- package/src/templates/components/templateForm/__tests__/SwitchSegment.spec.js +37 -62
- package/src/templates/components/templateForm/__tests__/TemplateForm.spec.js +0 -1
- package/src/templates/components/templateForm/__tests__/TemplateFormActions.spec.js +19 -15
- package/src/templates/components/templateForm/__tests__/ValuesField.spec.js +84 -62
- package/src/templates/components/templateForm/__tests__/ValuesListForm.spec.js +108 -144
- package/src/templates/components/templateForm/__tests__/ValuesSelector.spec.js +36 -36
- package/src/templates/components/templateForm/__tests__/__snapshots__/ActiveGroupForm.spec.js.snap +654 -86
- package/src/templates/components/templateForm/__tests__/__snapshots__/DefaultValue.spec.js.snap +45 -23
- package/src/templates/components/templateForm/__tests__/__snapshots__/FieldForm.spec.js.snap +1700 -1025
- package/src/templates/components/templateForm/__tests__/__snapshots__/GroupsList.spec.js.snap +44 -39
- package/src/templates/components/templateForm/__tests__/__snapshots__/SwitchListForm.spec.js.snap +225 -60
- package/src/templates/components/templateForm/__tests__/__snapshots__/SwitchSegment.spec.js.snap +1 -1
- package/src/templates/components/templateForm/__tests__/__snapshots__/TemplateForm.spec.js.snap +89 -92
- package/src/templates/components/templateForm/__tests__/__snapshots__/TemplateFormActions.spec.js.snap +66 -100
- package/src/templates/components/templateForm/__tests__/__snapshots__/ValuesField.spec.js.snap +542 -231
- package/src/templates/components/templateForm/__tests__/__snapshots__/ValuesListForm.spec.js.snap +264 -268
- package/src/templates/components/templateForm/__tests__/__snapshots__/ValuesSelector.spec.js.snap +146 -11
- package/src/templates/reducers/__tests__/allTemplates.spec.js +1 -1
- package/src/templates/reducers/__tests__/template.spec.js +3 -2
- package/src/templates/reducers/__tests__/templateLoading.spec.js +2 -2
- package/src/templates/reducers/__tests__/templates.spec.js +1 -1
- package/src/templates/reducers/__tests__/templatesLoading.spec.js +1 -1
- package/src/templates/reducers/allTemplates.js +1 -2
- package/src/templates/reducers/template.js +2 -1
- package/src/templates/reducers/templateRedirect.js +1 -1
- package/src/templates/reducers/templates.js +1 -1
- package/src/templates/reducers/templatesLoading.js +1 -1
- package/src/templates/routines.js +0 -2
- package/src/templates/sagas/__tests__/deleteTemplate.spec.js +2 -2
- package/src/templates/sagas/__tests__/fetchTemplates.spec.js +3 -6
- package/src/templates/sagas/__tests__/updateTemplate.spec.js +4 -4
- package/src/templates/sagas/deleteTemplate.js +1 -1
- package/src/templates/sagas/fetchTemplate.js +1 -1
- package/src/templates/sagas/fetchTemplates.js +1 -1
- package/src/templates/sagas/updateTemplate.js +1 -1
- package/src/templates/utils/filterSwitches.js +2 -2
- package/src/templates/utils/filterValues.js +2 -2
- package/src/api/hierarchies.js +0 -4
- package/src/components/FieldGroupCopy.js +0 -108
- package/src/components/FieldGroupSubSegment/FieldGroupSubSegment.js +0 -181
- package/src/components/FieldGroupSubSegment/__tests__/FieldGroupSubSegment.spec.js +0 -221
- package/src/components/FieldGroupSubSegment/__tests__/__snapshots__/FieldGroupSubSegment.spec.js.snap +0 -230
- package/src/components/FieldGroupSubSegment/constants.js +0 -68
- package/src/components/FieldGroupSubSegment/copyValidations.js +0 -75
- package/src/components/FieldGroupSubSegment/handleCopyModule.js +0 -186
- package/src/components/__tests__/FieldGroupCopy.spec.js +0 -14
- package/src/components/__tests__/__snapshots__/FieldGroupCopy.spec.js.snap +0 -307
- package/src/components/widgets/CopyField/CopyField.js +0 -270
- package/src/components/widgets/CopyField/CopyFieldCell.js +0 -138
- package/src/components/widgets/CopyField/CopyFieldColumn.js +0 -53
- package/src/components/widgets/CopyField/CopyFieldSelectableCell.js +0 -71
- package/src/components/widgets/CopyField/CustomStyles.js +0 -91
- package/src/components/widgets/CopyField/__tests__/CopyField.spec.js +0 -82
- package/src/components/widgets/CopyField/__tests__/CopyFieldCell.spec.js +0 -67
- package/src/components/widgets/CopyField/__tests__/CopyFieldColumn.spec.js +0 -33
- package/src/components/widgets/CopyField/__tests__/CopyFieldSelectableCell.spec.js +0 -49
- package/src/components/widgets/CopyField/__tests__/__snapshots__/CopyField.spec.js.snap +0 -279
- package/src/components/widgets/CopyField/__tests__/__snapshots__/CopyFieldCell.spec.js.snap +0 -67
- package/src/components/widgets/CopyField/__tests__/__snapshots__/CopyFieldColumn.spec.js.snap +0 -42
- package/src/components/widgets/CopyField/__tests__/__snapshots__/CopyFieldSelectableCell.spec.js.snap +0 -60
- package/src/hooks/useHierarchies.js +0 -112
- package/src/selectors/subscopedTemplates.js +0 -16
- package/src/templates/components/TemplatesLoader.js +0 -24
- package/src/templates/components/__tests__/TemplatesLoader.spec.js +0 -29
|
@@ -1,110 +1,34 @@
|
|
|
1
1
|
import _ from "lodash/fp";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import { connect } from "react-redux";
|
|
6
|
-
import { withRouter } from "react-router-dom";
|
|
2
|
+
import { useEffect } from "react";
|
|
3
|
+
import { useParams } from "react-router";
|
|
4
|
+
import { useDispatch, useSelector } from "react-redux";
|
|
7
5
|
import { Loading } from "@truedat/core/components";
|
|
8
|
-
import {
|
|
9
|
-
import { clearSelectedDomain, clearSelectedDomains } from "../../routines";
|
|
6
|
+
import { fetchTemplate } from "../routines";
|
|
10
7
|
|
|
11
|
-
export
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
domainIds: PropTypes.array,
|
|
18
|
-
fetchTemplate: PropTypes.func,
|
|
19
|
-
match: PropTypes.object.isRequired,
|
|
20
|
-
templateId: PropTypes.number,
|
|
21
|
-
templateLoading: PropTypes.bool,
|
|
22
|
-
};
|
|
8
|
+
export function TemplateLoader() {
|
|
9
|
+
const dispatch = useDispatch();
|
|
10
|
+
const selectedDomain = useSelector((state) => state.selectedDomain);
|
|
11
|
+
const selectedDomains = useSelector((state) => state.selectedDomains);
|
|
12
|
+
const selectedTemplate = useSelector((state) => state.selectedTemplate);
|
|
13
|
+
const templateLoading = useSelector((state) => state.templateLoading);
|
|
23
14
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (match?.params?.templateId) {
|
|
28
|
-
fetchTemplate({ templateId: match.params.templateId });
|
|
29
|
-
} else if (templateId) {
|
|
30
|
-
fetchTemplate({ domainId, domainIds, templateId });
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
componentDidUpdate(prevProps) {
|
|
35
|
-
const {
|
|
36
|
-
clearTemplate,
|
|
37
|
-
domainId,
|
|
38
|
-
domainIds,
|
|
39
|
-
fetchTemplate,
|
|
40
|
-
match,
|
|
41
|
-
templateId,
|
|
42
|
-
} = this.props;
|
|
43
|
-
const {
|
|
44
|
-
domainId: prevDomainId,
|
|
45
|
-
domainIds: prevDomainIds,
|
|
46
|
-
match: prevMatch,
|
|
47
|
-
templateId: prevTemplateId,
|
|
48
|
-
} = prevProps;
|
|
49
|
-
if (match?.params?.templateId) {
|
|
50
|
-
if (match.params.templateId === prevMatch?.params?.templateId) {
|
|
51
|
-
// No change
|
|
52
|
-
} else {
|
|
53
|
-
fetchTemplate({ templateId: match.params.templateId });
|
|
54
|
-
}
|
|
55
|
-
} else if (templateId) {
|
|
56
|
-
if (
|
|
57
|
-
domainId !== prevDomainId ||
|
|
58
|
-
domainIds !== prevDomainIds ||
|
|
59
|
-
templateId !== prevTemplateId
|
|
60
|
-
) {
|
|
61
|
-
fetchTemplate({
|
|
62
|
-
domainId,
|
|
63
|
-
domainIds,
|
|
64
|
-
templateId,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
} else if (templateId !== prevTemplateId) {
|
|
68
|
-
clearTemplate();
|
|
69
|
-
}
|
|
70
|
-
}
|
|
15
|
+
const domainId = _.prop("id")(selectedDomain);
|
|
16
|
+
const domainIds = selectedDomains;
|
|
17
|
+
const selectedTemplateId = _.prop("id")(selectedTemplate);
|
|
71
18
|
|
|
72
|
-
|
|
73
|
-
const { clearTemplate, clearSelectedDomain, clearSelectedDomains } =
|
|
74
|
-
this.props;
|
|
75
|
-
clearTemplate();
|
|
76
|
-
clearSelectedDomain();
|
|
77
|
-
clearSelectedDomains();
|
|
78
|
-
}
|
|
19
|
+
const { templateId } = useParams();
|
|
79
20
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (templateId) {
|
|
23
|
+
dispatch(fetchTemplate({ templateId }));
|
|
24
|
+
} else if (selectedTemplateId) {
|
|
25
|
+
dispatch(
|
|
26
|
+
fetchTemplate({ domainId, domainIds, templateId: selectedTemplateId })
|
|
27
|
+
);
|
|
86
28
|
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
29
|
+
}, [domainId, domainIds, templateId, selectedTemplateId]);
|
|
89
30
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
selectedDomains,
|
|
93
|
-
selectedTemplate,
|
|
94
|
-
templateLoading,
|
|
95
|
-
}) => ({
|
|
96
|
-
domainId: _.prop("id")(selectedDomain),
|
|
97
|
-
domainIds: selectedDomains,
|
|
98
|
-
templateId: _.prop("id")(selectedTemplate),
|
|
99
|
-
templateLoading,
|
|
100
|
-
});
|
|
31
|
+
return templateLoading ? <Loading /> : null;
|
|
32
|
+
}
|
|
101
33
|
|
|
102
|
-
export default
|
|
103
|
-
withRouter,
|
|
104
|
-
connect(mapStateToProps, {
|
|
105
|
-
clearSelectedDomain,
|
|
106
|
-
clearSelectedDomains,
|
|
107
|
-
clearTemplate,
|
|
108
|
-
fetchTemplate,
|
|
109
|
-
})
|
|
110
|
-
)(TemplateLoader);
|
|
34
|
+
export default TemplateLoader;
|
|
@@ -1,58 +1,42 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { Route,
|
|
3
|
-
import { Unauthorized } from "@truedat/core/components";
|
|
4
|
-
import { useAuthorized } from "@truedat/core/hooks";
|
|
2
|
+
import { Route, Routes } from "react-router";
|
|
5
3
|
import { TEMPLATE, TEMPLATES, TEMPLATES_NEW } from "@truedat/core/routes";
|
|
4
|
+
import { ProtectedRoute, Loader } from "@truedat/core/router";
|
|
6
5
|
import NewTemplate from "./NewTemplate";
|
|
7
6
|
import Templates from "./Templates";
|
|
8
7
|
import Template from "./Template";
|
|
9
|
-
import TemplatesLoader from "
|
|
8
|
+
import TemplatesLoader from "@truedat/core/components/TemplatesLoader";
|
|
10
9
|
import TemplateLoader from "./TemplateLoader";
|
|
11
10
|
import TemplatesContextProvider from "./TemplatesContext";
|
|
12
11
|
|
|
13
12
|
export const TemplateRoutes = () => {
|
|
14
|
-
const authorized = useAuthorized();
|
|
15
13
|
return (
|
|
16
|
-
<
|
|
17
|
-
path={TEMPLATES}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
<
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
/>
|
|
35
|
-
<
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
render={() => (
|
|
43
|
-
<>
|
|
44
|
-
<TemplateLoader />
|
|
45
|
-
<Template />
|
|
46
|
-
</>
|
|
47
|
-
)}
|
|
48
|
-
/>
|
|
49
|
-
</Switch>
|
|
50
|
-
</TemplatesContextProvider>
|
|
51
|
-
) : (
|
|
52
|
-
<Unauthorized />
|
|
53
|
-
)
|
|
54
|
-
}
|
|
55
|
-
/>
|
|
14
|
+
<Routes>
|
|
15
|
+
<Route path={TEMPLATES} element={<ProtectedRoute />}>
|
|
16
|
+
<Route
|
|
17
|
+
index
|
|
18
|
+
element={
|
|
19
|
+
<TemplatesContextProvider
|
|
20
|
+
initialSortColumn="updated_at"
|
|
21
|
+
initialSortDirection="descending"
|
|
22
|
+
>
|
|
23
|
+
<TemplatesLoader /> <Templates />
|
|
24
|
+
</TemplatesContextProvider>
|
|
25
|
+
}
|
|
26
|
+
/>
|
|
27
|
+
<Route path={TEMPLATES_NEW} element={<NewTemplate />} />
|
|
28
|
+
<Route
|
|
29
|
+
path={TEMPLATE}
|
|
30
|
+
element={
|
|
31
|
+
<>
|
|
32
|
+
<TemplateLoader />
|
|
33
|
+
<Template />
|
|
34
|
+
</>
|
|
35
|
+
}
|
|
36
|
+
/>
|
|
37
|
+
</Route>
|
|
38
|
+
<Route path="*" element={null} />
|
|
39
|
+
</Routes>
|
|
56
40
|
);
|
|
57
41
|
};
|
|
58
42
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import React from "react";
|
|
2
1
|
import { FormattedMessage, useIntl } from "react-intl";
|
|
3
2
|
import {
|
|
4
3
|
Header,
|
|
@@ -8,7 +7,7 @@ import {
|
|
|
8
7
|
Container,
|
|
9
8
|
Button,
|
|
10
9
|
} from "semantic-ui-react";
|
|
11
|
-
import { Link } from "react-router
|
|
10
|
+
import { Link } from "react-router";
|
|
12
11
|
import { TEMPLATES_NEW } from "@truedat/core/routes";
|
|
13
12
|
import TemplateFilters from "./TemplateFilters";
|
|
14
13
|
import TemplatesTable from "./TemplatesTable";
|
|
@@ -32,12 +31,10 @@ export default function Templates() {
|
|
|
32
31
|
</Header.Subheader>
|
|
33
32
|
</Header.Content>
|
|
34
33
|
</Header>
|
|
35
|
-
|
|
36
34
|
<Grid>
|
|
37
35
|
<Grid.Column width={8}>
|
|
38
36
|
<TemplateFilters />
|
|
39
37
|
</Grid.Column>
|
|
40
|
-
|
|
41
38
|
<Grid.Column width={8}>
|
|
42
39
|
<Container textAlign="right">
|
|
43
40
|
<Button
|
|
@@ -49,7 +46,6 @@ export default function Templates() {
|
|
|
49
46
|
</Container>
|
|
50
47
|
</Grid.Column>
|
|
51
48
|
</Grid>
|
|
52
|
-
|
|
53
49
|
<TemplatesTable />
|
|
54
50
|
</Segment>
|
|
55
51
|
);
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import _ from "lodash/fp";
|
|
2
|
-
import
|
|
2
|
+
import { useState, use, createContext } from "react";
|
|
3
3
|
import { useSelector } from "react-redux";
|
|
4
4
|
import { matchSorter } from "match-sorter";
|
|
5
5
|
|
|
6
6
|
export const TemplatesContext = createContext();
|
|
7
|
-
export const useTemplatesContext = () =>
|
|
7
|
+
export const useTemplatesContext = () => use(TemplatesContext);
|
|
8
8
|
|
|
9
9
|
const HIDDEN_SCOPES = ["cx", "ca", "actions"];
|
|
10
10
|
const isHiddenScope = (scope) => _.includes(scope)(HIDDEN_SCOPES);
|
|
@@ -57,9 +57,5 @@ export default function TemplatesContextProvider(props) {
|
|
|
57
57
|
setSortDirection,
|
|
58
58
|
};
|
|
59
59
|
|
|
60
|
-
return
|
|
61
|
-
<TemplatesContext.Provider value={context}>
|
|
62
|
-
{children}
|
|
63
|
-
</TemplatesContext.Provider>
|
|
64
|
-
);
|
|
60
|
+
return <TemplatesContext value={context}>{children}</TemplatesContext>;
|
|
65
61
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import _ from "lodash/fp";
|
|
2
|
-
import React from "react";
|
|
3
2
|
import { FormattedMessage } from "react-intl";
|
|
4
|
-
import { Link } from "react-router
|
|
3
|
+
import { Link } from "react-router";
|
|
5
4
|
import { Table, Header, Icon } from "semantic-ui-react";
|
|
6
5
|
import { linkTo } from "@truedat/core/routes";
|
|
7
6
|
import { sortColumn as sortHandler } from "@truedat/core/services/sort";
|
|
@@ -1,17 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { shallow } from "enzyme";
|
|
3
|
-
import { intl } from "@truedat/test/intl-stub";
|
|
1
|
+
import { render, waitForLoad } from "@truedat/test/render";
|
|
4
2
|
import { NewTemplate } from "../NewTemplate";
|
|
5
3
|
|
|
6
|
-
// workaround for enzyme issue with React.useContext
|
|
7
|
-
// see https://github.com/airbnb/enzyme/issues/2176#issuecomment-532361526
|
|
8
|
-
jest.spyOn(React, "useContext").mockImplementation(() => intl);
|
|
9
|
-
|
|
10
4
|
describe("<NewTemplate />", () => {
|
|
11
|
-
it("matches the latest snapshot", () => {
|
|
5
|
+
it("matches the latest snapshot", async () => {
|
|
12
6
|
const createTemplate = jest.fn();
|
|
13
7
|
const props = { createTemplate };
|
|
14
|
-
const
|
|
15
|
-
|
|
8
|
+
const rendered = render(<NewTemplate {...props} />);
|
|
9
|
+
await waitForLoad(rendered);
|
|
10
|
+
expect(rendered.container).toMatchSnapshot();
|
|
16
11
|
});
|
|
17
12
|
});
|
|
@@ -1,128 +1,90 @@
|
|
|
1
|
-
import
|
|
2
|
-
import ReactDOM from "react-dom";
|
|
3
|
-
import { shallow } from "enzyme";
|
|
1
|
+
import { render, waitForLoad } from "@truedat/test/render";
|
|
4
2
|
import { TemplateLoader } from "../TemplateLoader";
|
|
3
|
+
import { clearTemplate, fetchTemplate } from "../../routines";
|
|
4
|
+
import { clearSelectedDomain, clearSelectedDomains } from "../../../routines";
|
|
5
|
+
|
|
6
|
+
jest.mock("react-router", () => ({
|
|
7
|
+
...jest.requireActual("react-router"),
|
|
8
|
+
useParams: () => ({ templateId: "1" }),
|
|
9
|
+
}));
|
|
5
10
|
|
|
6
11
|
describe("<TemplateLoader />", () => {
|
|
7
|
-
|
|
8
|
-
const fetchTemplate = jest.fn();
|
|
9
|
-
const clearSelectedDomain = jest.fn();
|
|
10
|
-
const clearSelectedDomains = jest.fn();
|
|
11
|
-
const match = {};
|
|
12
|
+
let mockDispatch;
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
clearSelectedDomain,
|
|
17
|
-
clearSelectedDomains,
|
|
18
|
-
clearTemplate,
|
|
19
|
-
fetchTemplate,
|
|
20
|
-
templateLoading,
|
|
21
|
-
match,
|
|
22
|
-
};
|
|
23
|
-
const wrapper = shallow(<TemplateLoader {...props} />);
|
|
24
|
-
expect(wrapper).toMatchSnapshot();
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
jest.clearAllMocks();
|
|
16
|
+
mockDispatch = jest.fn();
|
|
25
17
|
});
|
|
26
18
|
|
|
27
|
-
it("
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
fetchTemplate,
|
|
34
|
-
templateLoading,
|
|
35
|
-
match,
|
|
36
|
-
};
|
|
37
|
-
const wrapper = shallow(<TemplateLoader {...props} />);
|
|
38
|
-
expect(wrapper.find("Loading").length).toBe(1);
|
|
19
|
+
it("matches the latest snapshot", async () => {
|
|
20
|
+
const rendered = render(<TemplateLoader />, {
|
|
21
|
+
state: { templateLoading: true },
|
|
22
|
+
dispatch: mockDispatch,
|
|
23
|
+
});
|
|
24
|
+
expect(rendered.container).toMatchSnapshot();
|
|
39
25
|
});
|
|
40
26
|
|
|
41
|
-
it("renders
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
fetchTemplate,
|
|
48
|
-
templateLoading,
|
|
49
|
-
match,
|
|
50
|
-
};
|
|
51
|
-
const wrapper = shallow(<TemplateLoader {...props} />);
|
|
52
|
-
expect(wrapper.getElement()).toBeNull();
|
|
27
|
+
it("renders a loader if templateLoading is true", async () => {
|
|
28
|
+
const rendered = render(<TemplateLoader />, {
|
|
29
|
+
state: { templateLoading: true },
|
|
30
|
+
dispatch: mockDispatch,
|
|
31
|
+
});
|
|
32
|
+
expect(rendered.container.querySelector(".loader")).toBeInTheDocument();
|
|
53
33
|
});
|
|
54
34
|
|
|
55
|
-
it("
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const templateId = 2;
|
|
63
|
-
const props = {
|
|
64
|
-
clearSelectedDomain,
|
|
65
|
-
clearSelectedDomains,
|
|
66
|
-
fetchTemplate,
|
|
67
|
-
templateLoading,
|
|
68
|
-
clearTemplate,
|
|
69
|
-
domainId,
|
|
70
|
-
templateId,
|
|
71
|
-
match,
|
|
72
|
-
};
|
|
73
|
-
jest.spyOn(TemplateLoader.prototype, "componentDidMount");
|
|
74
|
-
const wrapper = shallow(<TemplateLoader {...props} />);
|
|
75
|
-
expect(TemplateLoader.prototype.componentDidMount.mock.calls.length).toBe(
|
|
76
|
-
1
|
|
77
|
-
);
|
|
78
|
-
expect(clearTemplate.mock.calls.length).toBe(0);
|
|
79
|
-
expect(fetchTemplate.mock.calls.length).toBe(1);
|
|
80
|
-
expect(fetchTemplate.mock.calls[0]).toEqual([
|
|
81
|
-
{ domainId: 1, templateId: 2 },
|
|
82
|
-
]);
|
|
83
|
-
expect(clearSelectedDomain.mock.calls.length).toBe(0);
|
|
84
|
-
expect(clearSelectedDomains.mock.calls.length).toBe(0);
|
|
85
|
-
wrapper.unmount();
|
|
86
|
-
expect(clearTemplate.mock.calls.length).toBe(1);
|
|
87
|
-
expect(fetchTemplate.mock.calls.length).toBe(1);
|
|
88
|
-
expect(clearSelectedDomain.mock.calls.length).toBe(1);
|
|
89
|
-
expect(clearSelectedDomains.mock.calls.length).toBe(1);
|
|
35
|
+
it("renders null if templateLoading is false", async () => {
|
|
36
|
+
const rendered = render(<TemplateLoader />, {
|
|
37
|
+
state: { templateLoading: false },
|
|
38
|
+
dispatch: mockDispatch,
|
|
39
|
+
});
|
|
40
|
+
await waitForLoad(rendered);
|
|
41
|
+
expect(rendered.container.firstChild).toBeNull();
|
|
90
42
|
});
|
|
91
43
|
|
|
92
|
-
it("
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
domainId,
|
|
103
|
-
templateId,
|
|
104
|
-
match,
|
|
105
|
-
};
|
|
106
|
-
const newProps = { ...props, templateId: 3 };
|
|
107
|
-
const newNullProps = { ...props, templateId: null };
|
|
44
|
+
it("dispatches fetchTemplate when mounted", async () => {
|
|
45
|
+
const rendered = render(<TemplateLoader />, {
|
|
46
|
+
state: {
|
|
47
|
+
selectedDomain: { id: 1 },
|
|
48
|
+
selectedDomains: [2, 3],
|
|
49
|
+
selectedTemplate: { id: 4 },
|
|
50
|
+
templateLoading: false,
|
|
51
|
+
},
|
|
52
|
+
dispatch: mockDispatch,
|
|
53
|
+
});
|
|
108
54
|
|
|
109
|
-
|
|
110
|
-
ReactDOM.render(<TemplateLoader {...props} />, node);
|
|
111
|
-
jest.spyOn(TemplateLoader.prototype, "componentDidUpdate");
|
|
112
|
-
ReactDOM.render(<TemplateLoader {...newProps} />, node);
|
|
55
|
+
await waitForLoad(rendered);
|
|
113
56
|
|
|
114
|
-
|
|
115
|
-
|
|
57
|
+
// Check that fetchTemplate was called with the right params
|
|
58
|
+
expect(mockDispatch).toHaveBeenCalledWith(
|
|
59
|
+
fetchTemplate({ templateId: "1" })
|
|
116
60
|
);
|
|
117
|
-
expect(clearTemplate.mock.calls.length).toBe(0);
|
|
118
|
-
expect(fetchTemplate.mock.calls.length).toBe(2);
|
|
119
|
-
expect(fetchTemplate.mock.calls[1]).toEqual([
|
|
120
|
-
{ domainId: 1, templateId: 3 },
|
|
121
|
-
]);
|
|
122
61
|
|
|
123
|
-
|
|
124
|
-
|
|
62
|
+
mockDispatch.mockClear();
|
|
63
|
+
rendered.unmount();
|
|
125
64
|
});
|
|
126
65
|
|
|
127
|
-
|
|
66
|
+
it("dispatches fetchTemplate with selectedTemplateId when no templateId is present", async () => {
|
|
67
|
+
// Mock useParams to return an empty object for this test only
|
|
68
|
+
jest.spyOn(require("react-router"), "useParams").mockReturnValue({});
|
|
69
|
+
|
|
70
|
+
const rendered = render(<TemplateLoader />, {
|
|
71
|
+
state: {
|
|
72
|
+
selectedDomain: { id: 5 },
|
|
73
|
+
selectedDomains: [6, 7],
|
|
74
|
+
selectedTemplate: { id: 8 },
|
|
75
|
+
templateLoading: false,
|
|
76
|
+
},
|
|
77
|
+
dispatch: mockDispatch,
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
await waitForLoad(rendered);
|
|
81
|
+
|
|
82
|
+
expect(mockDispatch).toHaveBeenCalledWith(
|
|
83
|
+
fetchTemplate({
|
|
84
|
+
domainId: 5,
|
|
85
|
+
domainIds: [6, 7],
|
|
86
|
+
templateId: 8,
|
|
87
|
+
})
|
|
88
|
+
);
|
|
89
|
+
});
|
|
128
90
|
});
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { render, waitForLoad } from "@truedat/test/render";
|
|
3
|
+
import { TemplateRoutes } from "../TemplateRoutes";
|
|
4
|
+
import { useAuthorized } from "@truedat/core/hooks/useAuthorized";
|
|
5
|
+
import { TEMPLATE, TEMPLATES, TEMPLATES_NEW } from "@truedat/core/routes";
|
|
6
|
+
|
|
7
|
+
jest.mock("@truedat/core/hooks/useAuthorized", () => ({
|
|
8
|
+
useAuthorized: jest.fn(() => true),
|
|
9
|
+
}));
|
|
10
|
+
|
|
11
|
+
// Mock all child components
|
|
12
|
+
jest.mock("../NewTemplate", () => () => <div>NewTemplate</div>);
|
|
13
|
+
jest.mock("../Templates", () => () => <div>Templates</div>);
|
|
14
|
+
jest.mock("../Template", () => () => <div>Template</div>);
|
|
15
|
+
jest.mock("../TemplateLoader", () => () => <div>TemplateLoader</div>);
|
|
16
|
+
jest.mock("../TemplatesContext", () => () => <div>TemplatesContext</div>);
|
|
17
|
+
jest.mock("@truedat/core/components/TemplatesLoader", () => () => (
|
|
18
|
+
<div>TemplatesLoader</div>
|
|
19
|
+
));
|
|
20
|
+
jest.mock("@truedat/core/router/Unauthorized", () => () => (
|
|
21
|
+
<div>Unauthorized</div>
|
|
22
|
+
));
|
|
23
|
+
|
|
24
|
+
describe("<TemplateRoutes />", () => {
|
|
25
|
+
it("renders correctly with default route", async () => {
|
|
26
|
+
const rendered = render(<TemplateRoutes />);
|
|
27
|
+
await waitForLoad(rendered);
|
|
28
|
+
expect(rendered.container).toMatchSnapshot();
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it("renders correctly with templates route", async () => {
|
|
32
|
+
const rendered = render(<TemplateRoutes />, {
|
|
33
|
+
routes: [TEMPLATES],
|
|
34
|
+
});
|
|
35
|
+
await waitForLoad(rendered);
|
|
36
|
+
expect(rendered.container).toMatchSnapshot();
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it("renders correctly with templates new route", async () => {
|
|
40
|
+
const rendered = render(<TemplateRoutes />, {
|
|
41
|
+
routes: [TEMPLATES_NEW],
|
|
42
|
+
});
|
|
43
|
+
await waitForLoad(rendered);
|
|
44
|
+
expect(rendered.container).toMatchSnapshot();
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it("renders correctly with template route", async () => {
|
|
48
|
+
const rendered = render(<TemplateRoutes />, {
|
|
49
|
+
routes: [TEMPLATE.replace(":id", "123")],
|
|
50
|
+
});
|
|
51
|
+
await waitForLoad(rendered);
|
|
52
|
+
expect(rendered.container).toMatchSnapshot();
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it("renders unauthorized component when not authorized", async () => {
|
|
56
|
+
useAuthorized.mockReturnValueOnce(false);
|
|
57
|
+
const rendered = render(<TemplateRoutes />, {
|
|
58
|
+
routes: [TEMPLATES],
|
|
59
|
+
});
|
|
60
|
+
await waitForLoad(rendered);
|
|
61
|
+
expect(rendered.container).toMatchSnapshot();
|
|
62
|
+
});
|
|
63
|
+
});
|
|
@@ -1,29 +1,35 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { shallowWithIntl } from "@truedat/test/intl-stub";
|
|
1
|
+
import { render, waitForLoad } from "@truedat/test/render";
|
|
3
2
|
import TemplatesTable from "../TemplatesTable";
|
|
4
|
-
import
|
|
3
|
+
import TemplatesContext from "../TemplatesContext";
|
|
5
4
|
|
|
6
5
|
describe("<TemplatesTable />", () => {
|
|
7
6
|
const templates = [
|
|
8
7
|
{
|
|
8
|
+
id: "1",
|
|
9
9
|
scope: "bg",
|
|
10
10
|
name: "testbg",
|
|
11
11
|
label: "testbg",
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
|
+
id: "2",
|
|
14
15
|
scope: "dq",
|
|
15
16
|
name: "testdq",
|
|
16
17
|
label: "testdq",
|
|
17
18
|
},
|
|
18
19
|
];
|
|
19
|
-
const context = { templates };
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
const renderOpts = {
|
|
22
|
+
state: { templates },
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
it("matches the latest snapshot", async () => {
|
|
26
|
+
const rendered = render(
|
|
27
|
+
<TemplatesContext>
|
|
24
28
|
<TemplatesTable />
|
|
25
|
-
</TemplatesContext
|
|
29
|
+
</TemplatesContext>,
|
|
30
|
+
renderOpts
|
|
26
31
|
);
|
|
27
|
-
|
|
32
|
+
await waitForLoad(rendered);
|
|
33
|
+
expect(rendered.container).toMatchSnapshot();
|
|
28
34
|
});
|
|
29
35
|
});
|