@truedat/core 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 +36 -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/Graph.js +101 -0
- 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/components/index.js +4 -2
- 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
|
@@ -6,7 +6,7 @@ exports[`<TemplateSelector /> matches the latest snapshot (loading) 1`] = `
|
|
|
6
6
|
class="field"
|
|
7
7
|
>
|
|
8
8
|
<label>
|
|
9
|
-
|
|
9
|
+
template.selector.label
|
|
10
10
|
</label>
|
|
11
11
|
<div
|
|
12
12
|
class="field"
|
|
@@ -32,7 +32,7 @@ exports[`<TemplateSelector /> matches the latest snapshot (loading) 1`] = `
|
|
|
32
32
|
class="divider default text"
|
|
33
33
|
role="alert"
|
|
34
34
|
>
|
|
35
|
-
loading
|
|
35
|
+
loading
|
|
36
36
|
</div>
|
|
37
37
|
<i
|
|
38
38
|
aria-hidden="true"
|
|
@@ -60,7 +60,7 @@ exports[`<TemplateSelector /> matches the latest snapshot 1`] = `
|
|
|
60
60
|
class="field"
|
|
61
61
|
>
|
|
62
62
|
<label>
|
|
63
|
-
|
|
63
|
+
template.selector.label
|
|
64
64
|
</label>
|
|
65
65
|
<div
|
|
66
66
|
class="field"
|
|
@@ -86,7 +86,7 @@ exports[`<TemplateSelector /> matches the latest snapshot 1`] = `
|
|
|
86
86
|
class="divider default text"
|
|
87
87
|
role="alert"
|
|
88
88
|
>
|
|
89
|
-
|
|
89
|
+
template.selector.placeholder
|
|
90
90
|
</div>
|
|
91
91
|
<i
|
|
92
92
|
aria-hidden="true"
|
|
@@ -135,11 +135,11 @@ exports[`<TemplateSelector /> matches the latest snapshot when required 1`] = `
|
|
|
135
135
|
class="required field"
|
|
136
136
|
>
|
|
137
137
|
<label>
|
|
138
|
-
|
|
138
|
+
template.selector.label
|
|
139
139
|
<div
|
|
140
140
|
class="ui left pointing label"
|
|
141
141
|
>
|
|
142
|
-
|
|
142
|
+
template.form.validation.empty_required
|
|
143
143
|
</div>
|
|
144
144
|
</label>
|
|
145
145
|
<div
|
|
@@ -166,7 +166,7 @@ exports[`<TemplateSelector /> matches the latest snapshot when required 1`] = `
|
|
|
166
166
|
class="divider default text"
|
|
167
167
|
role="alert"
|
|
168
168
|
>
|
|
169
|
-
|
|
169
|
+
template.selector.placeholder
|
|
170
170
|
</div>
|
|
171
171
|
<i
|
|
172
172
|
aria-hidden="true"
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import React from "react";
|
|
2
1
|
import PropTypes from "prop-types";
|
|
3
2
|
import SearchContext from "@truedat/core/search/SearchContext";
|
|
4
3
|
import SearchContextProvider from "@truedat/core/search/SearchContext";
|
|
@@ -36,9 +35,7 @@ export default function SearchContextWrapper({
|
|
|
36
35
|
};
|
|
37
36
|
|
|
38
37
|
return provider ? (
|
|
39
|
-
<SearchContext
|
|
40
|
-
{children}
|
|
41
|
-
</SearchContext.Provider>
|
|
38
|
+
<SearchContext value={searchProps}>{children}</SearchContext>
|
|
42
39
|
) : (
|
|
43
40
|
<SearchContextProvider {...searchProps}>{children}</SearchContextProvider>
|
|
44
41
|
);
|
package/src/components/index.js
CHANGED
|
@@ -3,7 +3,6 @@ import AdminMenu from "./AdminMenu";
|
|
|
3
3
|
import Alert from "./Alert";
|
|
4
4
|
import Authorized from "./Authorized";
|
|
5
5
|
import AvailableFilters from "./AvailableFilters";
|
|
6
|
-
import HierarchyNodeFinder from "./HierarchyNodeFinder";
|
|
7
6
|
import CardGroupsAccordion from "./CardGroupsAccordion";
|
|
8
7
|
import CatalogMenu from "./CatalogMenu";
|
|
9
8
|
import Comments from "./Comments";
|
|
@@ -24,7 +23,9 @@ import FieldLabel from "./FieldLabel";
|
|
|
24
23
|
import FiltersLoader from "./FiltersLoader";
|
|
25
24
|
import GlossaryMenu from "./GlossaryMenu";
|
|
26
25
|
import GrantMenu from "./GrantMenu";
|
|
26
|
+
import Graph from "./Graph";
|
|
27
27
|
import GroupActions from "./GroupActions";
|
|
28
|
+
import HierarchyNodeFinder from "./HierarchyNodeFinder";
|
|
28
29
|
import HierarchySelector from "./HierarchySelector";
|
|
29
30
|
import HistoryBackButton from "./HistoryBackButton";
|
|
30
31
|
import IngestMenu from "./IngestMenu";
|
|
@@ -61,7 +62,6 @@ export {
|
|
|
61
62
|
Alert,
|
|
62
63
|
Authorized,
|
|
63
64
|
AvailableFilters,
|
|
64
|
-
HierarchyNodeFinder,
|
|
65
65
|
CardGroupsAccordion,
|
|
66
66
|
CatalogMenu,
|
|
67
67
|
Comments,
|
|
@@ -82,7 +82,9 @@ export {
|
|
|
82
82
|
FiltersLoader,
|
|
83
83
|
GlossaryMenu,
|
|
84
84
|
GrantMenu,
|
|
85
|
+
Graph,
|
|
85
86
|
GroupActions,
|
|
87
|
+
HierarchyNodeFinder,
|
|
86
88
|
HierarchySelector,
|
|
87
89
|
HistoryBackButton,
|
|
88
90
|
IngestMenu,
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const mutateUserFilters = jest.fn();
|
|
2
|
+
export const useUserFilters = jest.fn(() => ({
|
|
3
|
+
userFilters: [],
|
|
4
|
+
loading: false,
|
|
5
|
+
mutate: jest.fn(),
|
|
6
|
+
}));
|
|
7
|
+
|
|
8
|
+
export const useUserFiltersCreate = jest.fn(() => ({
|
|
9
|
+
trigger: jest.fn(() => ({
|
|
10
|
+
then: jest.fn(),
|
|
11
|
+
})),
|
|
12
|
+
}));
|
|
13
|
+
export const useUserFiltersDelete = jest.fn(() => ({
|
|
14
|
+
trigger: jest.fn(() => ({
|
|
15
|
+
then: jest.fn(),
|
|
16
|
+
})),
|
|
17
|
+
}));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { compile } from "path-to-regexp";
|
|
2
2
|
import { waitFor } from "@testing-library/react";
|
|
3
|
-
import { renderHook } from "@testing-library/react
|
|
3
|
+
import { renderHook } from "@testing-library/react";
|
|
4
4
|
import { API_ACL_RESOURCE_ENTRIES, API_ACL_ENTRY } from "../../api";
|
|
5
5
|
import { apiJsonPost, apiJsonPatch, apiJsonDelete } from "../../services/api";
|
|
6
6
|
import {
|
|
@@ -13,7 +13,10 @@ import {
|
|
|
13
13
|
} from "../services/api";
|
|
14
14
|
|
|
15
15
|
export const useAclEntries = (resource) => {
|
|
16
|
-
const url = compile(API_ACL_RESOURCE_ENTRIES)(
|
|
16
|
+
const url = compile(API_ACL_RESOURCE_ENTRIES)({
|
|
17
|
+
type: resource.type,
|
|
18
|
+
id: `${resource.id}`,
|
|
19
|
+
});
|
|
17
20
|
const { data, error, loading, mutate } = useSWR(url, apiJson);
|
|
18
21
|
const aclEntries = _.flow(
|
|
19
22
|
_.pathOr([], "_embedded.acl_entries"),
|
|
@@ -34,11 +37,11 @@ export const useAclEntryCreate = (resource) => {
|
|
|
34
37
|
};
|
|
35
38
|
|
|
36
39
|
export const useAclEntryUpdate = (id) => {
|
|
37
|
-
const url = compile(API_ACL_ENTRY)({ id });
|
|
40
|
+
const url = compile(API_ACL_ENTRY)({ id: `${id}` });
|
|
38
41
|
return useSWRMutation(url, (url, { arg }) => apiJsonPatch(url, arg));
|
|
39
42
|
};
|
|
40
43
|
|
|
41
44
|
export const useAclEntryDelete = (id) => {
|
|
42
|
-
const url = compile(API_ACL_ENTRY)({ id });
|
|
45
|
+
const url = compile(API_ACL_ENTRY)({ id: `${id}` });
|
|
43
46
|
return useSWRMutation(url, (url) => apiJsonDelete(url, JSON_OPTS));
|
|
44
47
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _ from "lodash/fp";
|
|
2
|
-
import {
|
|
2
|
+
import { useMatch } from "react-router";
|
|
3
3
|
|
|
4
4
|
export const useActiveRoute = (props) => {
|
|
5
|
-
const match =
|
|
6
|
-
return _.
|
|
5
|
+
const match = useMatch(props);
|
|
6
|
+
return !_.isEmpty(match);
|
|
7
7
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import _ from "lodash/fp";
|
|
2
|
-
import { useLocation } from "react-router
|
|
2
|
+
import { useLocation } from "react-router";
|
|
3
3
|
import { BUCKETS_VIEW } from "@truedat/core/routes";
|
|
4
4
|
import { matchPath } from "react-router";
|
|
5
5
|
|
|
@@ -11,7 +11,7 @@ export const useActiveRoutes = (route, navFilter) => {
|
|
|
11
11
|
return _.flow(
|
|
12
12
|
_.map((route) => ({
|
|
13
13
|
route,
|
|
14
|
-
filterMatch: matchPath(
|
|
14
|
+
filterMatch: matchPath({ path: BUCKETS_VIEW }, route),
|
|
15
15
|
})),
|
|
16
16
|
_.reduce(
|
|
17
17
|
(acc, { route, filterMatch }) => {
|
|
@@ -21,8 +21,8 @@ export const useActiveRoutes = (route, navFilter) => {
|
|
|
21
21
|
_.includes(filterMatch?.params?.propertyPath, Object.keys(navFilter))
|
|
22
22
|
? { ...acc, filterMatchRoutes: route }
|
|
23
23
|
: route === pathname || _.startsWith(`${route}/`)(pathname)
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
? { ...acc, pathMatchRoutes: route }
|
|
25
|
+
: { filterMatchRoutes, pathMatchRoutes };
|
|
26
26
|
},
|
|
27
27
|
{ filterMatchRoutes: null, pathMatchRoutes: null }
|
|
28
28
|
),
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import _ from "lodash/fp";
|
|
2
|
+
import { compile } from "path-to-regexp";
|
|
3
|
+
import { mutate } from "swr";
|
|
4
|
+
import useSWR from "swr";
|
|
5
|
+
import useSWRMutations from "swr/mutation";
|
|
6
|
+
import {
|
|
7
|
+
apiJson,
|
|
8
|
+
apiJsonPatch,
|
|
9
|
+
apiJsonPost,
|
|
10
|
+
apiJsonDelete,
|
|
11
|
+
} from "@truedat/core/services/api";
|
|
12
|
+
import { API_HIERARCHIES, API_HIERARCHY } from "@truedat/core/api";
|
|
13
|
+
|
|
14
|
+
const newHierarchy = {
|
|
15
|
+
name: "",
|
|
16
|
+
description: null,
|
|
17
|
+
nodes: [],
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export const useHierarchies = () => {
|
|
21
|
+
const toApiPath = compile(API_HIERARCHIES);
|
|
22
|
+
const url = toApiPath();
|
|
23
|
+
const { data, error } = useSWR(url, apiJson);
|
|
24
|
+
return { data: data?.data?.data, error, loading: !error && !data };
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export const useInitialHiearchy = () => {
|
|
28
|
+
return {
|
|
29
|
+
data: newHierarchy,
|
|
30
|
+
error: null,
|
|
31
|
+
loading: false,
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export const useHierarchy = (id) => {
|
|
36
|
+
const toApiPath = compile(API_HIERARCHY);
|
|
37
|
+
const url = toApiPath({ id: `${id}` });
|
|
38
|
+
const { data, error } = useSWR(url, apiJson);
|
|
39
|
+
const back_hierarchy = data?.data?.data;
|
|
40
|
+
const front_hierarchy = toFront(back_hierarchy);
|
|
41
|
+
return { data: front_hierarchy, error, loading: !error && !data };
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export const useHierarchyPatch = (id, callback) => {
|
|
45
|
+
const toApiPath = compile(API_HIERARCHY);
|
|
46
|
+
const url = toApiPath({ id: `${id}` });
|
|
47
|
+
return useSWRMutations(url, (url, { arg }) =>
|
|
48
|
+
apiJsonPatch(url, toBack(arg)).then(
|
|
49
|
+
({ data }) =>
|
|
50
|
+
mutate(API_HIERARCHIES) && mutate(url, data) && callback(data?.data)
|
|
51
|
+
)
|
|
52
|
+
);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export const useHierarchyPost = (callback) => {
|
|
56
|
+
return useSWRMutations(API_HIERARCHIES, (url, { arg }) =>
|
|
57
|
+
apiJsonPost(url, toBack(arg)).then(
|
|
58
|
+
({ data }) => mutate(API_HIERARCHIES) && callback(data?.data)
|
|
59
|
+
)
|
|
60
|
+
);
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export const useHierarchyDelete = (id, callback) => {
|
|
64
|
+
const toApiPath = compile(API_HIERARCHY);
|
|
65
|
+
const url = toApiPath({ id: `${id}` });
|
|
66
|
+
return useSWRMutations(url, (url, { arg }) =>
|
|
67
|
+
apiJsonDelete(url, toBack(arg)).then(
|
|
68
|
+
({ data }) => mutate(API_HIERARCHIES) && callback(data?.data)
|
|
69
|
+
)
|
|
70
|
+
);
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const toFront = (hierarchy) => {
|
|
74
|
+
return hierarchy
|
|
75
|
+
? {
|
|
76
|
+
...hierarchy,
|
|
77
|
+
nodes: _.flow(
|
|
78
|
+
_.pathOr([], "nodes"),
|
|
79
|
+
_.map((node) => {
|
|
80
|
+
return {
|
|
81
|
+
id: node.node_id,
|
|
82
|
+
key: node.key,
|
|
83
|
+
parentId: node.parent_id,
|
|
84
|
+
name: node.name,
|
|
85
|
+
description: node.description,
|
|
86
|
+
};
|
|
87
|
+
})
|
|
88
|
+
)(hierarchy),
|
|
89
|
+
}
|
|
90
|
+
: hierarchy;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const toBack = (hierarchy) => {
|
|
94
|
+
return hierarchy
|
|
95
|
+
? {
|
|
96
|
+
hierarchy: {
|
|
97
|
+
...hierarchy,
|
|
98
|
+
nodes: _.flow(
|
|
99
|
+
_.pathOr([], "nodes"),
|
|
100
|
+
_.map((node) => {
|
|
101
|
+
return {
|
|
102
|
+
node_id: node.id,
|
|
103
|
+
parent_id: node.parentId,
|
|
104
|
+
name: node.name,
|
|
105
|
+
description: node.description,
|
|
106
|
+
};
|
|
107
|
+
})
|
|
108
|
+
)(hierarchy),
|
|
109
|
+
},
|
|
110
|
+
}
|
|
111
|
+
: hierarchy;
|
|
112
|
+
};
|
package/src/hooks/useLocales.js
CHANGED
|
@@ -38,6 +38,6 @@ export const useLocalesUpdate = () => {
|
|
|
38
38
|
return useSWRMutations("api/locales", (_url, { arg }) => {
|
|
39
39
|
const { id, locale } = arg;
|
|
40
40
|
const toApiPath = compile(API_LOCALE);
|
|
41
|
-
return apiJsonPatch(toApiPath({ id }), { id, locale });
|
|
41
|
+
return apiJsonPatch(toApiPath({ id: `${id}` }), { id, locale });
|
|
42
42
|
});
|
|
43
43
|
};
|
package/src/hooks/useMessages.js
CHANGED
|
@@ -20,7 +20,7 @@ export const useMessages = (lang) => {
|
|
|
20
20
|
};
|
|
21
21
|
|
|
22
22
|
export const useMessagePatch = (id) => {
|
|
23
|
-
const url = toApiMessagePath({ id });
|
|
23
|
+
const url = toApiMessagePath({ id: `${id}` });
|
|
24
24
|
return useSWRMutations(url, (url, { arg }) =>
|
|
25
25
|
apiJsonPatch(url, arg).then(() => mutate(API_LOCALES))
|
|
26
26
|
);
|
package/src/hooks/usePath.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _ from "lodash/fp";
|
|
2
|
-
import {
|
|
2
|
+
import { useLocation } from "react-router";
|
|
3
3
|
|
|
4
|
-
export const usePath = (
|
|
5
|
-
const
|
|
6
|
-
return
|
|
4
|
+
export const usePath = () => {
|
|
5
|
+
const { pathname } = useLocation();
|
|
6
|
+
return pathname;
|
|
7
7
|
};
|
|
@@ -39,6 +39,6 @@ export const useUserFiltersCreate = (type) => {
|
|
|
39
39
|
};
|
|
40
40
|
|
|
41
41
|
export const useUserFiltersDelete = (id, type) => {
|
|
42
|
-
const url = compile(API_USER_FILTER)({ id
|
|
42
|
+
const url = compile(API_USER_FILTER)({ id: `${id}`, type });
|
|
43
43
|
return useSWRMutations(url, (url, { arg }) => apiJsonDelete(url, arg));
|
|
44
44
|
};
|
|
@@ -1,24 +1,19 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { Route,
|
|
3
|
-
import {
|
|
4
|
-
import { useAuthorized } from "@truedat/core/hooks";
|
|
5
|
-
import { I18N, I18N_MESSAGES, I18N_MESSAGES_NEW } from "@truedat/core/routes";
|
|
2
|
+
import { Route, Routes } from "react-router";
|
|
3
|
+
import { ProtectedRoute } from "@truedat/core/router";
|
|
6
4
|
import Messages from "./Messages";
|
|
7
5
|
import NewMessage from "./NewMessage";
|
|
8
6
|
|
|
9
|
-
export const AuthorizedI18nRoutes = () => (
|
|
10
|
-
<Switch>
|
|
11
|
-
<Route exact path={I18N_MESSAGES} render={() => <Messages />} />
|
|
12
|
-
<Route exact path={I18N_MESSAGES_NEW} render={() => <NewMessage />} />
|
|
13
|
-
</Switch>
|
|
14
|
-
);
|
|
15
|
-
|
|
16
7
|
export default function I18nRoutes() {
|
|
17
|
-
const authorized = useAuthorized();
|
|
18
8
|
return (
|
|
19
|
-
<
|
|
20
|
-
path={
|
|
21
|
-
|
|
22
|
-
|
|
9
|
+
<Routes>
|
|
10
|
+
<Route path={"i18n"} element={<ProtectedRoute />}>
|
|
11
|
+
<Route path={"messages"}>
|
|
12
|
+
<Route index element={<Messages />} />
|
|
13
|
+
<Route path={"new"} element={<NewMessage />} />
|
|
14
|
+
</Route>
|
|
15
|
+
</Route>
|
|
16
|
+
<Route path="*" element={null} />
|
|
17
|
+
</Routes>
|
|
23
18
|
);
|
|
24
19
|
}
|
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
import _ from "lodash/fp";
|
|
2
|
-
import
|
|
3
|
-
useCallback,
|
|
4
|
-
useContext,
|
|
5
|
-
createContext,
|
|
6
|
-
useEffect,
|
|
7
|
-
useMemo,
|
|
8
|
-
useState,
|
|
9
|
-
} from "react";
|
|
2
|
+
import { use, createContext, useEffect, useState } from "react";
|
|
10
3
|
import { IntlProvider } from "react-intl";
|
|
11
4
|
import PropTypes from "prop-types";
|
|
12
5
|
import { Loading } from "@truedat/core/components";
|
|
@@ -26,10 +19,11 @@ const defaultContext = {
|
|
|
26
19
|
localesError: null,
|
|
27
20
|
mutate: () => {},
|
|
28
21
|
setAltLang: () => {},
|
|
22
|
+
onIntlError: () => {},
|
|
29
23
|
};
|
|
30
24
|
|
|
31
25
|
export const LanguageContext = createContext(defaultContext);
|
|
32
|
-
export const useLanguage = () =>
|
|
26
|
+
export const useLanguage = () => use(LanguageContext);
|
|
33
27
|
|
|
34
28
|
const LanguageContextProvider = ({ children, defaultMessages }) => {
|
|
35
29
|
const {
|
|
@@ -45,106 +39,70 @@ const LanguageContextProvider = ({ children, defaultMessages }) => {
|
|
|
45
39
|
} = useLocales(false);
|
|
46
40
|
|
|
47
41
|
const loading = loadingLocales || loadingAllLocales;
|
|
48
|
-
const mutate =
|
|
42
|
+
const mutate = () => {
|
|
49
43
|
mutateLocales();
|
|
50
44
|
mutateAllLocales();
|
|
51
|
-
}
|
|
45
|
+
};
|
|
52
46
|
|
|
53
47
|
const langsOf = _.map(({ lang }) => lang);
|
|
54
|
-
const enabledLangs =
|
|
55
|
-
() =>
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
_.flow(
|
|
76
|
-
_.filter(({ is_required }) => is_required),
|
|
77
|
-
langsOf
|
|
78
|
-
)(locales),
|
|
79
|
-
[locales, langsOf]
|
|
80
|
-
);
|
|
81
|
-
|
|
82
|
-
const defaultLang = useMemo(
|
|
83
|
-
() =>
|
|
84
|
-
_.flow(
|
|
85
|
-
_.find(({ is_default }) => is_default),
|
|
86
|
-
_.prop("lang")
|
|
87
|
-
)(locales),
|
|
88
|
-
[locales]
|
|
89
|
-
);
|
|
48
|
+
const enabledLangs = _.flow(
|
|
49
|
+
_.filter(({ is_enabled }) => is_enabled),
|
|
50
|
+
langsOf
|
|
51
|
+
)(locales);
|
|
52
|
+
|
|
53
|
+
const altLangs = _.flow(
|
|
54
|
+
_.filter(({ is_enabled, is_default }) => is_enabled && !is_default),
|
|
55
|
+
_.orderBy(["is_required", "lang"], ["desc", "asc"]),
|
|
56
|
+
langsOf
|
|
57
|
+
)(locales);
|
|
58
|
+
|
|
59
|
+
const requiredLangs = _.flow(
|
|
60
|
+
_.filter(({ is_required }) => is_required),
|
|
61
|
+
langsOf
|
|
62
|
+
)(locales);
|
|
63
|
+
|
|
64
|
+
const defaultLang = _.flow(
|
|
65
|
+
_.find(({ is_default }) => is_default),
|
|
66
|
+
_.prop("lang"),
|
|
67
|
+
_.defaultTo("en")
|
|
68
|
+
)(locales);
|
|
90
69
|
|
|
91
70
|
const mapMessages = _.flow(
|
|
92
71
|
_.map(({ message_id, definition }) => [message_id, definition]),
|
|
93
72
|
_.fromPairs
|
|
94
73
|
);
|
|
95
74
|
|
|
96
|
-
const messages =
|
|
97
|
-
() =>
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
_.fromPairs
|
|
101
|
-
)(locales),
|
|
102
|
-
[locales, mapMessages]
|
|
103
|
-
);
|
|
75
|
+
const messages = _.flow(
|
|
76
|
+
_.map(({ lang, messages }) => [lang, mapMessages(messages)]),
|
|
77
|
+
_.fromPairs
|
|
78
|
+
)(locales);
|
|
104
79
|
|
|
105
80
|
const [lang, setLang] = useState(defaultLang);
|
|
106
81
|
const [altLang, setAltLang] = useState();
|
|
107
82
|
|
|
108
|
-
const getMessagesForLang =
|
|
109
|
-
(requestedLang)
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
mutate,
|
|
132
|
-
}),
|
|
133
|
-
[
|
|
134
|
-
defaultLang,
|
|
135
|
-
altLangs,
|
|
136
|
-
allLocales,
|
|
137
|
-
locales,
|
|
138
|
-
enabledLangs,
|
|
139
|
-
altLang,
|
|
140
|
-
requiredLangs,
|
|
141
|
-
lang,
|
|
142
|
-
loading,
|
|
143
|
-
getMessagesForLang,
|
|
144
|
-
localesError,
|
|
145
|
-
mutate,
|
|
146
|
-
]
|
|
147
|
-
);
|
|
83
|
+
const getMessagesForLang = (requestedLang) => {
|
|
84
|
+
if (loading || !requestedLang) return null;
|
|
85
|
+
return messages[requestedLang] || defaultMessages[requestedLang];
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
const context = {
|
|
89
|
+
defaultLang,
|
|
90
|
+
altLangs,
|
|
91
|
+
requiredLangs,
|
|
92
|
+
enabledLangs,
|
|
93
|
+
isMultilingual: enabledLangs.length > 1,
|
|
94
|
+
setAltLang,
|
|
95
|
+
altLang,
|
|
96
|
+
getMessagesForLang,
|
|
97
|
+
lang,
|
|
98
|
+
loading,
|
|
99
|
+
allLocales,
|
|
100
|
+
locales,
|
|
101
|
+
localesError,
|
|
102
|
+
mutate,
|
|
103
|
+
// onIntlError: console.error,
|
|
104
|
+
onIntlError: () => {},
|
|
105
|
+
};
|
|
148
106
|
|
|
149
107
|
useEffect(() => {
|
|
150
108
|
if (enabledLangs.length > 0) {
|
|
@@ -169,11 +127,7 @@ const LanguageContextProvider = ({ children, defaultMessages }) => {
|
|
|
169
127
|
|
|
170
128
|
if (localesError) return <div>Error loading language data</div>;
|
|
171
129
|
|
|
172
|
-
return
|
|
173
|
-
<LanguageContext.Provider value={context}>
|
|
174
|
-
{children}
|
|
175
|
-
</LanguageContext.Provider>
|
|
176
|
-
);
|
|
130
|
+
return <LanguageContext value={context}>{children}</LanguageContext>;
|
|
177
131
|
};
|
|
178
132
|
|
|
179
133
|
LanguageContextProvider.propTypes = {
|
|
@@ -182,11 +136,12 @@ LanguageContextProvider.propTypes = {
|
|
|
182
136
|
};
|
|
183
137
|
|
|
184
138
|
export const I18nProvider = ({ children, lang }) => {
|
|
185
|
-
const { lang: contextLang, getMessagesForLang } = useLanguage();
|
|
139
|
+
const { lang: contextLang, getMessagesForLang, onIntlError } = useLanguage();
|
|
186
140
|
const currentLang = lang || contextLang;
|
|
187
141
|
|
|
188
142
|
return (
|
|
189
143
|
<IntlProvider
|
|
144
|
+
onError={onIntlError}
|
|
190
145
|
locale={currentLang}
|
|
191
146
|
defaultLocale={currentLang}
|
|
192
147
|
messages={getMessagesForLang(currentLang)}
|