@truedat/core 7.5.9 → 7.5.10
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 +34 -68
- package/src/__tests__/routesTree.spec.js +108 -0
- package/src/api/queries.js +10 -0
- package/src/api.js +3 -0
- package/src/components/AddMemberForm.js +10 -10
- package/src/components/AddResourceMember.js +0 -2
- package/src/components/AdminMenu.js +0 -1
- package/src/components/AiMenu.js +0 -1
- package/src/components/Alert.js +1 -1
- package/src/components/AlertExporter.js +0 -1
- package/src/components/ArrayDecorator.js +0 -1
- package/src/components/Authorized.js +2 -2
- package/src/components/AvailableFilters.js +1 -2
- package/src/components/CSVFileModal.js +1 -1
- package/src/components/CardGroupsAccordion.js +1 -1
- package/src/components/CatalogMenu.js +1 -2
- package/src/components/CommentRow.js +7 -8
- package/src/components/Comments.js +3 -4
- package/src/components/CommentsForm.js +2 -2
- package/src/components/ConfirmModal.js +0 -1
- package/src/components/CursorPagination.js +1 -2
- package/src/components/DashboardMenu.js +0 -1
- package/src/components/Date.js +0 -1
- package/src/components/DateFilter.js +1 -1
- package/src/components/DateRangeFilter.js +1 -1
- package/src/components/DateTime.js +0 -1
- package/src/components/DescriptionInput.js +1 -1
- package/src/components/DomainSelector.js +2 -3
- package/src/components/DropdownMenuItem.js +0 -1
- package/src/components/ErrorBoundary.js +8 -7
- package/src/components/FieldLabel.js +0 -1
- package/src/components/FilterDropdown.js +3 -3
- package/src/components/FilterItem.js +0 -1
- package/src/components/FilterMultilevelDropdown.js +1 -1
- package/src/components/GenericCrumbs.js +3 -4
- package/src/components/GlossaryMenu.js +24 -31
- package/src/components/GrantMenu.js +0 -1
- package/src/components/GroupActions.js +15 -15
- package/src/components/Hierarchy.js +7 -10
- package/src/components/HierarchyFilterDropdown.js +1 -2
- package/src/components/HierarchyNodeFinder.js +4 -4
- package/src/components/HierarchySelector.js +1 -2
- package/src/components/HistoryBackButton.js +6 -6
- package/src/components/IngestMenu.js +0 -1
- package/src/components/LanguagesTabs.js +4 -4
- package/src/components/LineageMenu.js +0 -1
- package/src/components/Loading.js +1 -2
- package/src/components/MembersMenu.js +0 -1
- package/src/components/ModalSaveFilter.js +1 -1
- package/src/components/NodeOpenActions.js +0 -1
- package/src/components/OptionGroup.js +1 -2
- package/src/components/OptionModal.js +0 -1
- package/src/components/Pagination.js +0 -1
- package/src/components/QualityMenu.js +0 -1
- package/src/components/QxMenu.js +0 -1
- package/src/components/Redirector.js +3 -3
- package/src/components/ResourceMember.js +1 -2
- package/src/components/ResourceMembers.js +3 -3
- package/src/components/ResourceMembersActions.js +1 -2
- package/src/components/RichTextEditor.js +7 -8
- package/src/components/RouteListener.js +11 -32
- package/src/components/SafeLink.js +0 -1
- package/src/components/ScrollToTop.js +13 -16
- package/src/components/SearchFilterDropdown.js +1 -1
- package/src/components/SearchInput.js +3 -3
- package/src/components/SearchMenu.js +0 -1
- package/src/components/SelectedFilters.js +1 -2
- package/src/components/SideMenu.js +0 -1
- package/src/components/SidebarToggle.js +2 -2
- package/src/components/StructureFilterItem.js +0 -1
- package/src/components/Submenu.js +8 -7
- package/src/components/SystemsLoader.js +27 -0
- package/src/components/TaxonomyMenu.js +0 -1
- package/src/components/TemplateSelector.js +1 -1
- package/src/components/TemplatesLoader.js +24 -0
- package/src/components/TreeSelector.js +4 -4
- package/src/components/Unauthorized.js +0 -1
- package/src/components/UploadModal.js +152 -176
- package/src/components/UserFilter.js +0 -2
- package/src/components/UserFilters.js +0 -2
- package/src/components/__tests__/AddMemberForm.spec.js +26 -38
- package/src/components/__tests__/AddResourceMember.spec.js +0 -1
- package/src/components/__tests__/AdminMenu.spec.js +0 -1
- package/src/components/__tests__/Alert.spec.js +17 -21
- package/src/components/__tests__/AvailableFilters.spec.js +19 -14
- package/src/components/__tests__/CardGroupsAccordion.spec.js +24 -15
- package/src/components/__tests__/CatalogMenu.spec.js +27 -45
- package/src/components/__tests__/CommentsLoader.spec.js +17 -14
- package/src/components/__tests__/CursorPagination.spec.js +0 -1
- package/src/components/__tests__/DashboardMenu.spec.js +0 -1
- package/src/components/__tests__/DateFilter.spec.js +6 -28
- package/src/components/__tests__/DateTime.spec.js +0 -1
- package/src/components/__tests__/DomainSelector.spec.js +4 -4
- package/src/components/__tests__/DropdownMenuItem.spec.js +0 -1
- package/src/components/__tests__/FilterDropdown.spec.js +28 -27
- package/src/components/__tests__/FilterItem.spec.js +19 -20
- package/src/components/__tests__/FilterMultilevelDropdown.spec.js +16 -16
- package/src/components/__tests__/FiltersLoader.spec.js +25 -20
- package/src/components/__tests__/GenericCrumbs.spec.js +0 -1
- package/src/components/__tests__/GlossaryMenu.spec.js +0 -1
- package/src/components/__tests__/GrantMenu.spec.js +0 -1
- package/src/components/__tests__/GroupActions.spec.js +0 -1
- package/src/components/__tests__/Hierarchy.spec.js +0 -1
- package/src/components/__tests__/HierarchyFilterDropdown.spec.js +16 -14
- package/src/components/__tests__/HierarchyNodeFinder.spec.js +0 -1
- package/src/components/__tests__/HierarchySelector.spec.js +28 -35
- package/src/components/__tests__/HistoryBackButton.spec.js +23 -23
- package/src/components/__tests__/IngestMenu.spec.js +0 -1
- package/src/components/__tests__/LineageMenu.spec.js +0 -1
- package/src/components/__tests__/Loading.spec.js +4 -5
- package/src/components/__tests__/MembersMenu.spec.js +0 -1
- package/src/components/__tests__/ModalSaveFilter.spec.js +0 -1
- package/src/components/__tests__/OptionGroup.spec.js +5 -7
- package/src/components/__tests__/Pagination.spec.js +22 -16
- package/src/components/__tests__/QualityMenu.spec.js +0 -1
- package/src/components/__tests__/Redirector.spec.js +5 -10
- package/src/components/__tests__/ResourceMembers.spec.js +36 -27
- package/src/components/__tests__/ResourceMembersAction.spec.js +1 -2
- package/src/components/__tests__/RouteListener.spec.js +25 -26
- package/src/components/__tests__/SafeLink.spec.js +0 -1
- package/src/components/__tests__/SearchDateFilter.spec.js +0 -1
- package/src/components/__tests__/SearchFilterDropdown.spec.js +32 -24
- package/src/components/__tests__/SearchInput.spec.js +5 -5
- package/src/components/__tests__/SearchMenu.spec.js +0 -1
- package/src/components/__tests__/SelectedFilters.spec.js +50 -47
- package/src/components/__tests__/SideMenu.spec.js +5 -8
- package/src/components/__tests__/StructureFilterItem.spec.js +13 -11
- package/src/components/__tests__/Submenu.spec.js +0 -1
- package/src/components/__tests__/SystemsLoader.spec.js +40 -0
- package/src/components/__tests__/TaxonomyMenu.spec.js +0 -1
- package/src/components/__tests__/TemplateSelector.spec.js +27 -29
- package/src/components/__tests__/TemplatesLoader.spec.js +30 -0
- package/src/components/__tests__/TreeSelector.spec.js +110 -83
- package/src/components/__tests__/UploadModal.spec.js +171 -0
- package/src/components/__tests__/UserFilters.spec.js +44 -37
- package/src/components/__tests__/__snapshots__/AddMemberForm.spec.js.snap +1 -0
- package/src/components/__tests__/__snapshots__/AddResourceMember.spec.js.snap +10 -9
- package/src/components/__tests__/__snapshots__/AdminMenu.spec.js.snap +22 -11
- package/src/components/__tests__/__snapshots__/Alert.spec.js.snap +29 -17
- package/src/components/__tests__/__snapshots__/AvailableFilters.spec.js.snap +1 -1
- package/src/components/__tests__/__snapshots__/CatalogMenu.spec.js.snap +18 -8
- package/src/components/__tests__/__snapshots__/CursorPagination.spec.js.snap +3 -0
- package/src/components/__tests__/__snapshots__/DateFilter.spec.js.snap +165 -107
- package/src/components/__tests__/__snapshots__/DomainSelector.spec.js.snap +1 -1
- package/src/components/__tests__/__snapshots__/FilterItem.spec.js.snap +13 -20
- package/src/components/__tests__/__snapshots__/GlossaryMenu.spec.js.snap +8 -0
- package/src/components/__tests__/__snapshots__/GrantMenu.spec.js.snap +14 -7
- package/src/components/__tests__/__snapshots__/GroupActions.spec.js.snap +0 -1
- package/src/components/__tests__/__snapshots__/Hierarchy.spec.js.snap +0 -1
- package/src/components/__tests__/__snapshots__/HierarchySelector.spec.js.snap +1 -1
- package/src/components/__tests__/__snapshots__/HistoryBackButton.spec.js.snap +10 -20
- package/src/components/__tests__/__snapshots__/IngestMenu.spec.js.snap +3 -1
- package/src/components/__tests__/__snapshots__/LineageMenu.spec.js.snap +6 -3
- package/src/components/__tests__/__snapshots__/Loading.spec.js.snap +5 -4
- package/src/components/__tests__/__snapshots__/MembersMenu.spec.js.snap +6 -3
- package/src/components/__tests__/__snapshots__/OptionGroup.spec.js.snap +38 -28
- package/src/components/__tests__/__snapshots__/Pagination.spec.js.snap +213 -64
- package/src/components/__tests__/__snapshots__/QualityMenu.spec.js.snap +14 -8
- package/src/components/__tests__/__snapshots__/ResourceMembers.spec.js.snap +1 -0
- package/src/components/__tests__/__snapshots__/ResourceMembersAction.spec.js.snap +2 -1
- package/src/components/__tests__/__snapshots__/RouteListener.spec.js.snap +1 -1
- package/src/components/__tests__/__snapshots__/SearchInput.spec.js.snap +10 -12
- package/src/components/__tests__/__snapshots__/SearchMenu.spec.js.snap +3 -1
- package/src/components/__tests__/__snapshots__/SelectedFilters.spec.js.snap +8 -8
- package/src/components/__tests__/__snapshots__/SideMenu.spec.js.snap +112 -50
- package/src/components/__tests__/__snapshots__/Submenu.spec.js.snap +3 -0
- package/src/components/__tests__/__snapshots__/SystemsLoader.spec.js.snap +3 -0
- package/src/components/__tests__/__snapshots__/TaxonomyMenu.spec.js.snap +3 -1
- package/src/components/__tests__/__snapshots__/TemplateSelector.spec.js.snap +7 -7
- package/src/components/common/SearchContextWrapper.js +1 -4
- package/src/hooks/__mocks__/useAuthorized.js +2 -0
- package/src/hooks/__mocks__/useUserFilters.js +17 -0
- package/src/hooks/__tests__/{useAclEntries.spec.js → useAclEntries.spec.js.disabled} +1 -1
- package/src/hooks/__tests__/useAuthorized.spec.js +1 -1
- package/src/hooks/useAclEntries.js +6 -3
- package/src/hooks/useActiveRoute.js +3 -3
- package/src/hooks/useActiveRoutes.js +4 -4
- package/src/hooks/useHierarchies.js +112 -0
- package/src/hooks/useLocales.js +1 -1
- package/src/hooks/useMessages.js +1 -1
- package/src/hooks/usePath.js +4 -4
- package/src/hooks/useUserFilters.js +1 -1
- package/src/i18n/components/EditableCell.js +1 -1
- package/src/i18n/components/I18nRoutes.js +11 -16
- package/src/i18n/components/LangProvider.js +56 -101
- package/src/i18n/components/LangProviderWrapper.js +26 -33
- package/src/i18n/components/Languages.js +8 -7
- package/src/i18n/components/MessageForm.js +9 -23
- package/src/i18n/components/Messages.js +5 -4
- package/src/i18n/components/MessagesTable.js +0 -1
- package/src/i18n/components/NewMessage.js +5 -4
- package/src/i18n/components/__tests__/EditableCell.spec.js +18 -20
- package/src/i18n/components/__tests__/I18nRoutes.spec.js +39 -5
- package/src/i18n/components/__tests__/MessageForm.spec.js +0 -1
- package/src/i18n/components/__tests__/Messages.spec.js +9 -21
- package/src/i18n/components/__tests__/NewMessage.spec.js +0 -1
- package/src/i18n/components/__tests__/__snapshots__/I18nRoutes.spec.js.snap +25 -1
- package/src/i18n/components/__tests__/__snapshots__/MessageForm.spec.js.snap +1 -0
- package/src/i18n/components/__tests__/__snapshots__/Messages.spec.js.snap +5 -13
- package/src/i18n/components/__tests__/__snapshots__/NewMessage.spec.js.snap +2 -0
- package/src/reducers/__tests__/comments.spec.js +9 -6
- package/src/reducers/__tests__/commentsResource.spec.js +5 -2
- package/src/reducers/__tests__/coreMessage.spec.js +1 -1
- package/src/reducers/__tests__/dashboardDomains.spec.js +5 -5
- package/src/reducers/__tests__/systems.spec.js +42 -0
- package/src/reducers/__tests__/systemsLoading.spec.js +22 -0
- package/src/reducers/index.js +5 -1
- package/src/reducers/systems.js +19 -0
- package/src/reducers/systemsLoading.js +14 -0
- package/src/router/Loader.js +10 -0
- package/src/router/ProtectedRoute.js +11 -0
- package/src/router/Unauthorized.js +16 -0
- package/src/router/__tests__/ProtectedRoute.spec.js +49 -0
- package/src/router/__tests__/Unauthorized.spec.js +15 -0
- package/src/router/__tests__/__snapshots__/ProtectedRoute.spec.js.snap +44 -0
- package/src/router/__tests__/__snapshots__/Unauthorized.spec.js.snap +26 -0
- package/src/router/index.js +5 -0
- package/src/routes.js +7 -7
- package/src/routesTree.js +93 -0
- package/src/routines.js +8 -0
- package/src/sagas/__tests__/addComment.spec.js +3 -5
- package/src/sagas/__tests__/fetchComments.spec.js +1 -1
- package/src/sagas/__tests__/fetchSystems.spec.js +69 -0
- package/src/sagas/fetchSystems.js +25 -0
- package/src/sagas/index.js +3 -0
- package/src/search/FilterDropdown.js +0 -1
- package/src/search/FilterItem.js +0 -1
- package/src/search/FilterMultilevelDropdown.js +1 -1
- package/src/search/FilterQueryDropdown.js +38 -42
- package/src/search/HierarchyFilterDropdown.js +3 -4
- package/src/search/ModalSaveFilter.js +1 -1
- package/src/search/Pagination.js +0 -1
- package/src/search/SearchContext.js +9 -11
- package/src/search/SearchDateFilter.js +0 -1
- package/src/search/SearchFilters.js +1 -2
- package/src/search/SearchSelectedFilters.js +4 -4
- package/src/search/SearchWidget.js +0 -4
- package/src/search/UserFilter.js +0 -2
- package/src/search/UserFilters.js +4 -3
- package/src/search/__tests__/FilterDropdown.spec.js +54 -51
- package/src/search/__tests__/FilterItem.spec.js +20 -15
- package/src/search/__tests__/FilterQueryDropdown.spec.js +106 -84
- package/src/search/__tests__/ModalSaveFilter.spec.js +4 -5
- package/src/search/__tests__/SearchContext.spec.js +3 -4
- package/src/search/__tests__/SearchWidget.spec.js +0 -1
- package/src/selectors/__tests__/getConceptSubscope.spec.js +37 -0
- package/src/selectors/__tests__/getDashboardConfig.spec.js +9 -9
- package/src/selectors/__tests__/getMessage.spec.js +1 -1
- package/src/selectors/__tests__/getSidemenuGlossarySubscopes.spec.js +17 -0
- package/src/selectors/__tests__/makeActiveFiltersSelector.spec.js +2 -2
- package/src/selectors/__tests__/makeSearchQuerySelector.spec.js +1 -1
- package/src/selectors/__tests__/makeTagOptionsSelector.spec.js +6 -6
- package/src/selectors/getConceptSubscope.js +19 -0
- package/src/selectors/getMessage.js +2 -2
- package/src/selectors/getRecipients.js +34 -0
- package/src/selectors/getSidemenuGlossarySubscopes.js +8 -0
- package/src/selectors/index.js +5 -0
- package/src/selectors/makeActiveFiltersSelector.js +2 -6
- package/src/selectors/makeSearchQuerySelector.js +4 -11
- package/src/selectors/makeTagOptionsSelector.js +4 -8
- package/src/selectors/subscopedTemplates.js +16 -0
- package/src/selectors/taxonomy.js +170 -0
- package/src/services/__tests__/columnDecorator.spec.js +1 -1
- package/src/services/__tests__/dateFilterFormatter.spec.js +2 -2
- package/src/services/__tests__/fieldType.spec.js +2 -2
- package/src/services/__tests__/filters.spec.js +1 -1
- package/src/services/__tests__/message.spec.js +2 -2
- package/src/services/__tests__/operators.spec.js +5 -5
- package/src/services/__tests__/sort.spec.js +8 -8
- package/src/services/__tests__/storage.spec.js +17 -0
- package/src/services/arrays.js +16 -14
- package/src/services/columnDecoratorComponent.js +2 -2
- package/src/services/columnDecorators.js +0 -1
- package/src/services/fieldType.js +8 -8
- package/src/services/filters.js +5 -5
- package/src/services/message.js +1 -4
- package/src/services/operators.js +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import _ from "lodash/fp";
|
|
2
|
-
import
|
|
2
|
+
import { useState } from "react";
|
|
3
3
|
import PropTypes from "prop-types";
|
|
4
4
|
import { useIntl } from "react-intl";
|
|
5
5
|
import {
|
|
@@ -83,7 +83,6 @@ const LanguageRow = ({
|
|
|
83
83
|
/>
|
|
84
84
|
</TableCell>
|
|
85
85
|
) : null}
|
|
86
|
-
|
|
87
86
|
<TableCell>
|
|
88
87
|
{!is_default ? (
|
|
89
88
|
<ConfirmModal
|
|
@@ -187,13 +186,15 @@ const Languages = () => {
|
|
|
187
186
|
</Button>
|
|
188
187
|
</Form>
|
|
189
188
|
<Dimmer.Dimmable dimmed={loading}>
|
|
190
|
-
|
|
191
|
-
<
|
|
192
|
-
|
|
189
|
+
{loading ? (
|
|
190
|
+
<Dimmer active inverted>
|
|
191
|
+
<Loader />
|
|
192
|
+
</Dimmer>
|
|
193
|
+
) : null}
|
|
193
194
|
<Table collapsing striped>
|
|
194
195
|
<TableHeader>
|
|
195
196
|
<TableRow>
|
|
196
|
-
<TableCell
|
|
197
|
+
<TableCell />
|
|
197
198
|
<TableCell textAlign="center">
|
|
198
199
|
{formatMessage({
|
|
199
200
|
id: "i18n.messages.locale.required",
|
|
@@ -206,7 +207,7 @@ const Languages = () => {
|
|
|
206
207
|
})}
|
|
207
208
|
</TableCell>
|
|
208
209
|
) : null}
|
|
209
|
-
<TableCell
|
|
210
|
+
<TableCell />
|
|
210
211
|
</TableRow>
|
|
211
212
|
</TableHeader>
|
|
212
213
|
<TableBody>
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import _ from "lodash/fp";
|
|
2
2
|
import PropTypes from "prop-types";
|
|
3
|
-
import React from "react";
|
|
4
3
|
import { useForm, Controller } from "react-hook-form";
|
|
5
4
|
import { useIntl } from "react-intl";
|
|
6
5
|
import { Button, Form, Segment, Header, Loader } from "semantic-ui-react";
|
|
@@ -14,15 +13,13 @@ export const LangForm = ({
|
|
|
14
13
|
formatMessage,
|
|
15
14
|
}) => {
|
|
16
15
|
return (
|
|
17
|
-
<Segment
|
|
18
|
-
<Header
|
|
16
|
+
(<Segment><Header
|
|
19
17
|
as="h4"
|
|
20
18
|
content={formatMessage({
|
|
21
19
|
id: `i18n.messages.locale.${lang}`,
|
|
22
20
|
defaultMessage: `${name} ( ${local_name} )`,
|
|
23
21
|
})}
|
|
24
|
-
|
|
25
|
-
<Controller
|
|
22
|
+
/><Controller
|
|
26
23
|
control={control}
|
|
27
24
|
name={`langs.${id}.definition`}
|
|
28
25
|
rules={{
|
|
@@ -45,8 +42,7 @@ export const LangForm = ({
|
|
|
45
42
|
required
|
|
46
43
|
/>
|
|
47
44
|
)}
|
|
48
|
-
|
|
49
|
-
<Controller
|
|
45
|
+
/><Controller
|
|
50
46
|
control={control}
|
|
51
47
|
name={`langs.${id}.description`}
|
|
52
48
|
render={({ field: { onBlur, onChange, value } }) => (
|
|
@@ -61,8 +57,7 @@ export const LangForm = ({
|
|
|
61
57
|
value={value || ""}
|
|
62
58
|
/>
|
|
63
59
|
)}
|
|
64
|
-
|
|
65
|
-
</Segment>
|
|
60
|
+
/></Segment>)
|
|
66
61
|
);
|
|
67
62
|
};
|
|
68
63
|
|
|
@@ -86,8 +81,7 @@ export const MessageForm = ({ onSubmit, isSubmitting }) => {
|
|
|
86
81
|
const { errors, isDirty, isValid } = formState;
|
|
87
82
|
|
|
88
83
|
return (
|
|
89
|
-
<Form onSubmit={handleSubmit(onSubmit)}
|
|
90
|
-
<Controller
|
|
84
|
+
(<Form onSubmit={handleSubmit(onSubmit)}><Controller
|
|
91
85
|
control={control}
|
|
92
86
|
name="message_id"
|
|
93
87
|
rules={{
|
|
@@ -110,9 +104,7 @@ export const MessageForm = ({ onSubmit, isSubmitting }) => {
|
|
|
110
104
|
required
|
|
111
105
|
/>
|
|
112
106
|
)}
|
|
113
|
-
/>
|
|
114
|
-
|
|
115
|
-
{_.flow(
|
|
107
|
+
/>{_.flow(
|
|
116
108
|
_.filter("is_enabled"),
|
|
117
109
|
_.orderBy(
|
|
118
110
|
["is_default", "is_required", "lang"],
|
|
@@ -127,23 +119,17 @@ export const MessageForm = ({ onSubmit, isSubmitting }) => {
|
|
|
127
119
|
formatMessage={formatMessage}
|
|
128
120
|
/>
|
|
129
121
|
))
|
|
130
|
-
)(locales)}
|
|
131
|
-
|
|
132
|
-
<div className="actions">
|
|
133
|
-
<Button
|
|
122
|
+
)(locales)}<div className="actions"><Button
|
|
134
123
|
floated="right"
|
|
135
124
|
type="submit"
|
|
136
125
|
primary
|
|
137
126
|
loading={isSubmitting}
|
|
138
127
|
disabled={isSubmitting || !isDirty || !isValid}
|
|
139
128
|
content={formatMessage({ id: "actions.save" })}
|
|
140
|
-
|
|
141
|
-
<HistoryBackButton
|
|
129
|
+
/><HistoryBackButton
|
|
142
130
|
content={formatMessage({ id: "actions.cancel" })}
|
|
143
131
|
disabled={isSubmitting}
|
|
144
|
-
|
|
145
|
-
</div>
|
|
146
|
-
</Form>
|
|
132
|
+
/></div></Form>)
|
|
147
133
|
);
|
|
148
134
|
};
|
|
149
135
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import _ from "lodash/fp";
|
|
2
|
-
import
|
|
3
|
-
import { Link, useLocation
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { Link, useLocation } from "react-router";
|
|
4
|
+
import { useNavigate } from "react-router";
|
|
4
5
|
import { useIntl, FormattedMessage } from "react-intl";
|
|
5
6
|
import {
|
|
6
7
|
Button,
|
|
@@ -23,7 +24,7 @@ const ITEMS_PER_PAGE = 30;
|
|
|
23
24
|
export function MessagesContent() {
|
|
24
25
|
const { locales, loading } = useLanguage();
|
|
25
26
|
|
|
26
|
-
const
|
|
27
|
+
const navigate = useNavigate();
|
|
27
28
|
const location = useLocation();
|
|
28
29
|
const searchParams = new URLSearchParams(location.search);
|
|
29
30
|
const selectedLang = searchParams.get("lang");
|
|
@@ -50,7 +51,7 @@ export function MessagesContent() {
|
|
|
50
51
|
const handleSearch = (_e, data) => {
|
|
51
52
|
const filter = _.propOr("", "value")(data);
|
|
52
53
|
setPage(1);
|
|
53
|
-
|
|
54
|
+
navigate(urlTo({ filter }));
|
|
54
55
|
};
|
|
55
56
|
|
|
56
57
|
const messages = selectedLang
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import React from "react";
|
|
2
1
|
import PropTypes from "prop-types";
|
|
3
2
|
import { Breadcrumb, Header, Container, Segment } from "semantic-ui-react";
|
|
4
3
|
import { useIntl, FormattedMessage } from "react-intl";
|
|
5
|
-
import {
|
|
4
|
+
import { Link } from "react-router";
|
|
5
|
+
import { useNavigate } from "react-router";
|
|
6
6
|
import { useMessagePost } from "@truedat/core/hooks";
|
|
7
7
|
import { I18N_MESSAGES } from "@truedat/core/routes";
|
|
8
8
|
import { useLanguage } from "./LangProvider";
|
|
@@ -12,13 +12,14 @@ const NewMessage = () => {
|
|
|
12
12
|
const { formatMessage } = useIntl();
|
|
13
13
|
const { trigger } = useMessagePost();
|
|
14
14
|
const { mutate } = useLanguage();
|
|
15
|
-
|
|
15
|
+
|
|
16
|
+
const navigate = useNavigate();
|
|
16
17
|
|
|
17
18
|
const onSubmit = (message) => {
|
|
18
19
|
trigger({ message }).then(() => {
|
|
19
20
|
mutate();
|
|
20
21
|
});
|
|
21
|
-
|
|
22
|
+
navigate(I18N_MESSAGES);
|
|
22
23
|
};
|
|
23
24
|
|
|
24
25
|
return (
|
|
@@ -1,24 +1,22 @@
|
|
|
1
|
-
import React from "react";
|
|
2
1
|
import userEvent from "@testing-library/user-event";
|
|
3
|
-
import { render } from "@truedat/test/render";
|
|
2
|
+
import { render, waitForLoad } from "@truedat/test/render";
|
|
4
3
|
import messages from "@truedat/core/messages";
|
|
5
4
|
import EditableCell from "../EditableCell";
|
|
6
5
|
|
|
7
|
-
const renderOpts = { messages };
|
|
8
|
-
|
|
9
6
|
describe("<EditableCell />", () => {
|
|
10
7
|
const onChange = jest.fn();
|
|
11
8
|
const value = "value";
|
|
12
9
|
const placeholder = "placeholder";
|
|
13
10
|
|
|
14
|
-
it("matches the latest snapshot", () => {
|
|
11
|
+
it("matches the latest snapshot", async () => {
|
|
15
12
|
const props = {
|
|
16
13
|
onChange,
|
|
17
14
|
value,
|
|
18
15
|
placeholder,
|
|
19
16
|
};
|
|
20
|
-
const
|
|
21
|
-
|
|
17
|
+
const rendered = render(<EditableCell {...props} />, { messages });
|
|
18
|
+
await waitForLoad(rendered);
|
|
19
|
+
expect(rendered.container).toMatchSnapshot();
|
|
22
20
|
});
|
|
23
21
|
|
|
24
22
|
it("clicking the cell will enter edition mode and match snapshot", async () => {
|
|
@@ -27,12 +25,12 @@ describe("<EditableCell />", () => {
|
|
|
27
25
|
value,
|
|
28
26
|
placeholder,
|
|
29
27
|
};
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
);
|
|
34
|
-
|
|
35
|
-
expect(container).toMatchSnapshot();
|
|
28
|
+
const rendered = render(<EditableCell {...props} />, { messages });
|
|
29
|
+
await waitForLoad(rendered);
|
|
30
|
+
|
|
31
|
+
const user = userEvent.setup({ delay: null });
|
|
32
|
+
await user.click(await rendered.findByText(value));
|
|
33
|
+
expect(rendered.container).toMatchSnapshot();
|
|
36
34
|
});
|
|
37
35
|
|
|
38
36
|
it("on edition mode edition mode will call onChange on blur", async () => {
|
|
@@ -41,14 +39,14 @@ describe("<EditableCell />", () => {
|
|
|
41
39
|
value,
|
|
42
40
|
placeholder,
|
|
43
41
|
};
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
);
|
|
48
|
-
|
|
42
|
+
const rendered = render(<EditableCell {...props} />, { messages });
|
|
43
|
+
await waitForLoad(rendered);
|
|
44
|
+
|
|
45
|
+
const user = userEvent.setup({ delay: null });
|
|
46
|
+
await user.click(await rendered.findByText(value));
|
|
49
47
|
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
await user.type(rendered.getByRole("textbox", { type: /text/i }), "foo");
|
|
49
|
+
await user.tab();
|
|
52
50
|
expect(onChange).toHaveBeenCalledWith("valuefoo");
|
|
53
51
|
});
|
|
54
52
|
});
|
|
@@ -1,14 +1,48 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { render } from "@truedat/test/render";
|
|
2
|
+
import { render, waitForLoad } from "@truedat/test/render";
|
|
3
3
|
import I18nRoutes from "../I18nRoutes";
|
|
4
|
+
import { useAuthorized } from "@truedat/core/hooks/useAuthorized";
|
|
4
5
|
|
|
5
|
-
jest.mock("@truedat/core/hooks", () => ({
|
|
6
|
+
jest.mock("@truedat/core/hooks/useAuthorized", () => ({
|
|
6
7
|
useAuthorized: jest.fn(() => true),
|
|
7
8
|
}));
|
|
8
9
|
|
|
10
|
+
// Mock all components used in I18nRoutes
|
|
11
|
+
jest.mock("../Messages", () => () => <div>Messages</div>);
|
|
12
|
+
jest.mock("../NewMessage", () => () => <div>NewMessage</div>);
|
|
13
|
+
jest.mock("@truedat/core/router/Unauthorized", () => () => (
|
|
14
|
+
<div>Unauthorized</div>
|
|
15
|
+
));
|
|
16
|
+
|
|
9
17
|
describe("<I18nRoutes />", () => {
|
|
10
|
-
it("
|
|
11
|
-
const
|
|
12
|
-
|
|
18
|
+
it("renders correctly with default route", async () => {
|
|
19
|
+
const rendered = render(<I18nRoutes />);
|
|
20
|
+
await waitForLoad(rendered);
|
|
21
|
+
expect(rendered.container).toMatchSnapshot();
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it("renders correctly with i18n/messages route", async () => {
|
|
25
|
+
const rendered = render(<I18nRoutes />, {
|
|
26
|
+
routes: ["/i18n/messages"],
|
|
27
|
+
});
|
|
28
|
+
await waitForLoad(rendered);
|
|
29
|
+
expect(rendered.container).toMatchSnapshot();
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it("renders correctly with i18n/messages/new route", async () => {
|
|
33
|
+
const rendered = render(<I18nRoutes />, {
|
|
34
|
+
routes: ["/i18n/messages/new"],
|
|
35
|
+
});
|
|
36
|
+
await waitForLoad(rendered);
|
|
37
|
+
expect(rendered.container).toMatchSnapshot();
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it("renders unauthorized component when not authorized", async () => {
|
|
41
|
+
useAuthorized.mockReturnValueOnce(false);
|
|
42
|
+
const rendered = render(<I18nRoutes />, {
|
|
43
|
+
routes: ["/i18n/messages"],
|
|
44
|
+
});
|
|
45
|
+
await waitForLoad(rendered);
|
|
46
|
+
expect(rendered.container).toMatchSnapshot();
|
|
13
47
|
});
|
|
14
48
|
});
|
|
@@ -1,31 +1,19 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { render } from "@truedat/test/render";
|
|
1
|
+
import { render, waitForLoad } from "@truedat/test/render";
|
|
3
2
|
import { LangProviderWrapper } from "@truedat/core/i18n";
|
|
4
3
|
import Messages from "../Messages";
|
|
5
4
|
|
|
6
|
-
const renderOpts = {
|
|
7
|
-
messages: {
|
|
8
|
-
en: {
|
|
9
|
-
"i18n.actions.refreshMessages": "Refresh messages",
|
|
10
|
-
},
|
|
11
|
-
},
|
|
12
|
-
};
|
|
13
|
-
|
|
14
5
|
jest.mock("@truedat/core/hooks", () => ({
|
|
15
6
|
useMessagePatch: jest.fn(() => ({ trigger: jest.fn() })),
|
|
16
7
|
}));
|
|
17
8
|
|
|
18
|
-
const renderComponent = () =>
|
|
19
|
-
render(
|
|
20
|
-
<LangProviderWrapper langs={["es"]}>
|
|
21
|
-
<Messages />
|
|
22
|
-
</LangProviderWrapper>,
|
|
23
|
-
renderOpts
|
|
24
|
-
);
|
|
25
|
-
|
|
26
9
|
describe("<Messages />", () => {
|
|
27
|
-
it("matches the latest snapshot", () => {
|
|
28
|
-
const
|
|
29
|
-
|
|
10
|
+
it("matches the latest snapshot", async () => {
|
|
11
|
+
const rendered = render(
|
|
12
|
+
<LangProviderWrapper langs={["es"]}>
|
|
13
|
+
<Messages />
|
|
14
|
+
</LangProviderWrapper>,
|
|
15
|
+
);
|
|
16
|
+
await waitForLoad(rendered);
|
|
17
|
+
expect(rendered.container).toMatchSnapshot();
|
|
30
18
|
});
|
|
31
19
|
});
|
|
@@ -1,3 +1,27 @@
|
|
|
1
1
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
2
|
|
|
3
|
-
exports[`<I18nRoutes />
|
|
3
|
+
exports[`<I18nRoutes /> renders correctly with default route 1`] = `<div />`;
|
|
4
|
+
|
|
5
|
+
exports[`<I18nRoutes /> renders correctly with i18n/messages route 1`] = `
|
|
6
|
+
<div>
|
|
7
|
+
<div>
|
|
8
|
+
Messages
|
|
9
|
+
</div>
|
|
10
|
+
</div>
|
|
11
|
+
`;
|
|
12
|
+
|
|
13
|
+
exports[`<I18nRoutes /> renders correctly with i18n/messages/new route 1`] = `
|
|
14
|
+
<div>
|
|
15
|
+
<div>
|
|
16
|
+
NewMessage
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
`;
|
|
20
|
+
|
|
21
|
+
exports[`<I18nRoutes /> renders unauthorized component when not authorized 1`] = `
|
|
22
|
+
<div>
|
|
23
|
+
<div>
|
|
24
|
+
Unauthorized
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
`;
|
|
@@ -29,10 +29,11 @@ exports[`<Messages /> matches the latest snapshot 1`] = `
|
|
|
29
29
|
<button
|
|
30
30
|
class="ui right floated button"
|
|
31
31
|
>
|
|
32
|
-
|
|
32
|
+
i18n.actions.refreshMessages
|
|
33
33
|
</button>
|
|
34
34
|
<a
|
|
35
35
|
class="ui primary right floated button"
|
|
36
|
+
data-discover="true"
|
|
36
37
|
href="/i18n/messages/new"
|
|
37
38
|
role="button"
|
|
38
39
|
>
|
|
@@ -47,15 +48,17 @@ exports[`<Messages /> matches the latest snapshot 1`] = `
|
|
|
47
48
|
>
|
|
48
49
|
<a
|
|
49
50
|
class="active item"
|
|
51
|
+
data-discover="true"
|
|
50
52
|
href="/i18n/messages"
|
|
51
53
|
>
|
|
52
54
|
i18n.messages.locale.manage
|
|
53
55
|
</a>
|
|
54
56
|
<a
|
|
55
57
|
class="item"
|
|
58
|
+
data-discover="true"
|
|
56
59
|
href="/i18n/messages?lang=es"
|
|
57
60
|
>
|
|
58
|
-
|
|
61
|
+
es ( es )
|
|
59
62
|
</a>
|
|
60
63
|
</div>
|
|
61
64
|
<div
|
|
@@ -114,17 +117,6 @@ exports[`<Messages /> matches the latest snapshot 1`] = `
|
|
|
114
117
|
<div
|
|
115
118
|
class="dimmable"
|
|
116
119
|
>
|
|
117
|
-
<div
|
|
118
|
-
class="ui inverted dimmer"
|
|
119
|
-
>
|
|
120
|
-
<div
|
|
121
|
-
class="content"
|
|
122
|
-
>
|
|
123
|
-
<div
|
|
124
|
-
class="ui loader"
|
|
125
|
-
/>
|
|
126
|
-
</div>
|
|
127
|
-
</div>
|
|
128
120
|
<table
|
|
129
121
|
class="ui collapsing striped table"
|
|
130
122
|
>
|
|
@@ -7,6 +7,7 @@ exports[`<NewMessage /> matches the latest snapshot 1`] = `
|
|
|
7
7
|
>
|
|
8
8
|
<a
|
|
9
9
|
class="section"
|
|
10
|
+
data-discover="true"
|
|
10
11
|
href="/i18n/messages"
|
|
11
12
|
>
|
|
12
13
|
Translations
|
|
@@ -71,6 +72,7 @@ exports[`<NewMessage /> matches the latest snapshot 1`] = `
|
|
|
71
72
|
</button>
|
|
72
73
|
<a
|
|
73
74
|
class="ui secondary button"
|
|
75
|
+
data-discover="true"
|
|
74
76
|
href="/"
|
|
75
77
|
role="button"
|
|
76
78
|
>
|
|
@@ -10,39 +10,42 @@ describe("reducers: comments", () => {
|
|
|
10
10
|
|
|
11
11
|
it("should handle the clearComments.TRIGGER action", () => {
|
|
12
12
|
expect(comments(fooState, { type: clearComments.TRIGGER })).toBe(
|
|
13
|
-
initialState
|
|
13
|
+
initialState,
|
|
14
14
|
);
|
|
15
15
|
});
|
|
16
16
|
|
|
17
17
|
it("should handle the fetchComments.TRIGGER action", () => {
|
|
18
18
|
expect(comments(fooState, { type: fetchComments.TRIGGER })).toBe(
|
|
19
|
-
initialState
|
|
19
|
+
initialState,
|
|
20
20
|
);
|
|
21
21
|
});
|
|
22
22
|
|
|
23
23
|
it("should handle the fetchComments.SUCCESS action", () => {
|
|
24
24
|
const someComments = [
|
|
25
25
|
{ content: "My first comment", resource_id: 2 },
|
|
26
|
-
{ content: "My second comment", resource_id: 2 }
|
|
26
|
+
{ content: "My second comment", resource_id: 2 },
|
|
27
27
|
];
|
|
28
28
|
|
|
29
29
|
const data = someComments;
|
|
30
30
|
|
|
31
31
|
expect(
|
|
32
|
-
comments(fooState, { type: fetchComments.SUCCESS, payload: { data } })
|
|
32
|
+
comments(fooState, { type: fetchComments.SUCCESS, payload: { data } }),
|
|
33
33
|
).toMatchObject(someComments);
|
|
34
34
|
});
|
|
35
35
|
|
|
36
36
|
it("should handle the createComment.SUCCESS action", () => {
|
|
37
37
|
const someComments = [
|
|
38
38
|
{ content: "My first comment", resource_id: 2 },
|
|
39
|
-
{ content: "My second comment", resource_id: 2 }
|
|
39
|
+
{ content: "My second comment", resource_id: 2 },
|
|
40
40
|
];
|
|
41
41
|
const newComment = { content: "My third comment", resource_id: 2 };
|
|
42
42
|
const data = newComment;
|
|
43
43
|
const resultState = [newComment, ...someComments];
|
|
44
44
|
expect(
|
|
45
|
-
comments(someComments, {
|
|
45
|
+
comments(someComments, {
|
|
46
|
+
type: createComment.SUCCESS,
|
|
47
|
+
payload: { data },
|
|
48
|
+
}),
|
|
46
49
|
).toMatchObject(resultState);
|
|
47
50
|
});
|
|
48
51
|
|
|
@@ -11,13 +11,16 @@ describe("reducers: commentsLoading", () => {
|
|
|
11
11
|
|
|
12
12
|
it("should be true after receiving the fetchComments.REQUEST action", () => {
|
|
13
13
|
expect(
|
|
14
|
-
commentsResource(fooState, {
|
|
14
|
+
commentsResource(fooState, {
|
|
15
|
+
type: fetchComments.REQUEST,
|
|
16
|
+
payload: data,
|
|
17
|
+
}),
|
|
15
18
|
).toMatchObject(data);
|
|
16
19
|
});
|
|
17
20
|
|
|
18
21
|
it("should be false after receiving the clearComments.TRIGGER action", () => {
|
|
19
22
|
expect(
|
|
20
|
-
commentsResource(fooState, { type: clearComments.TRIGGER })
|
|
23
|
+
commentsResource(fooState, { type: clearComments.TRIGGER }),
|
|
21
24
|
).toMatchObject({});
|
|
22
25
|
});
|
|
23
26
|
});
|
|
@@ -11,7 +11,7 @@ describe("reducers: dashboardDomains", () => {
|
|
|
11
11
|
|
|
12
12
|
it("should handle the clearDashboardDomains.TRIGGER action", () => {
|
|
13
13
|
expect(
|
|
14
|
-
dashboardDomains(fooState, { type: clearDashboardDomains.TRIGGER })
|
|
14
|
+
dashboardDomains(fooState, { type: clearDashboardDomains.TRIGGER }),
|
|
15
15
|
).toEqual(initialState);
|
|
16
16
|
});
|
|
17
17
|
|
|
@@ -21,8 +21,8 @@ describe("reducers: dashboardDomains", () => {
|
|
|
21
21
|
expect(
|
|
22
22
|
dashboardDomains(fooState, {
|
|
23
23
|
type: setDashboardDomains.TRIGGER,
|
|
24
|
-
payload: domains
|
|
25
|
-
})
|
|
24
|
+
payload: domains,
|
|
25
|
+
}),
|
|
26
26
|
).toMatchObject(domains);
|
|
27
27
|
});
|
|
28
28
|
|
|
@@ -32,8 +32,8 @@ describe("reducers: dashboardDomains", () => {
|
|
|
32
32
|
expect(
|
|
33
33
|
dashboardDomains(domains, {
|
|
34
34
|
type: setDashboardDomains.TRIGGER,
|
|
35
|
-
payload: domains
|
|
36
|
-
})
|
|
35
|
+
payload: domains,
|
|
36
|
+
}),
|
|
37
37
|
).toEqual(domains);
|
|
38
38
|
});
|
|
39
39
|
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { fetchSystems, clearSystems } from "../../routines";
|
|
2
|
+
import { systems } from "..";
|
|
3
|
+
|
|
4
|
+
const fooState = { foo: "bar" };
|
|
5
|
+
|
|
6
|
+
describe("reducers: systems", () => {
|
|
7
|
+
const initialState = [];
|
|
8
|
+
|
|
9
|
+
it("should provide the initial state", () => {
|
|
10
|
+
expect(systems(undefined, {})).toEqual(initialState);
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it("should handle the fetchSystems.TRIGGER action", () => {
|
|
14
|
+
expect(systems(fooState, { type: fetchSystems.TRIGGER })).toEqual(
|
|
15
|
+
initialState,
|
|
16
|
+
);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it("should handle the clearSystems.TRIGGER action", () => {
|
|
20
|
+
expect(systems(fooState, { type: clearSystems.TRIGGER })).toEqual(
|
|
21
|
+
initialState,
|
|
22
|
+
);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it("should handle the fetchSystems.SUCCESS action", () => {
|
|
26
|
+
const someSystems = [
|
|
27
|
+
{ id: 1, name: "System 1", description: "Desc 1" },
|
|
28
|
+
{ id: 2, name: "System 2", description: "Desc 2" },
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
expect(
|
|
32
|
+
systems(fooState, {
|
|
33
|
+
type: fetchSystems.SUCCESS,
|
|
34
|
+
payload: { data: someSystems },
|
|
35
|
+
}),
|
|
36
|
+
).toEqual(someSystems);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it("should ignore unknown actions", () => {
|
|
40
|
+
expect(systems(fooState, { type: "FOO" })).toBe(fooState);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { fetchSystems } from "../../routines";
|
|
2
|
+
import { systemsLoading } from "..";
|
|
3
|
+
|
|
4
|
+
const fooState = { foo: "bar" };
|
|
5
|
+
|
|
6
|
+
describe("reducers: systemsLoading", () => {
|
|
7
|
+
it("should provide the initial state", () => {
|
|
8
|
+
expect(systemsLoading(undefined, {})).toBe(false);
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it("should be true after receiving the fetchSystems.TRIGGER action", () => {
|
|
12
|
+
expect(systemsLoading(false, { type: fetchSystems.TRIGGER })).toBe(true);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it("should be false after receiving the fetchSystems.FULFILL action", () => {
|
|
16
|
+
expect(systemsLoading(true, { type: fetchSystems.FULFILL })).toBe(false);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it("should ignore unhandled actions", () => {
|
|
20
|
+
expect(systemsLoading(fooState, { type: "FOO" })).toBe(fooState);
|
|
21
|
+
});
|
|
22
|
+
});
|