@truedat/core 8.6.7 → 8.7.1
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 +3 -3
- package/src/components/AddMemberForm.js +3 -3
- package/src/components/Alert.js +3 -3
- package/src/components/AlertExporter.js +4 -4
- package/src/components/AvailableFilters.js +5 -5
- package/src/components/CSVFileModal.js +1 -1
- package/src/components/CardGroupsAccordion.js +4 -4
- package/src/components/CatalogMenu.js +2 -2
- package/src/components/CommentsForm.js +1 -1
- package/src/components/DomainSearchFilter.js +9 -9
- package/src/components/DomainSelector.js +1 -1
- package/src/components/FilterDropdown.js +5 -5
- package/src/components/FilterMultilevelDropdown.js +9 -9
- package/src/components/GlossaryMenu.js +10 -7
- package/src/components/Graph.js +199 -127
- package/src/components/GroupActions.js +2 -2
- package/src/components/Hierarchy.js +1 -1
- package/src/components/HierarchyFilterDropdown.js +7 -7
- package/src/components/HierarchySelector.js +1 -1
- package/src/components/LanguagesTabs.js +2 -2
- package/src/components/OptionGroup.js +8 -9
- package/src/components/QualityMenu.js +6 -8
- package/src/components/ResourceMembers.js +3 -3
- package/src/components/SearchFilterDropdown.js +3 -3
- package/src/components/SidebarToggle.js +1 -1
- package/src/components/Submenu.js +46 -27
- package/src/components/SystemsLoader.js +1 -1
- package/src/components/TemplatesLoader.js +1 -1
- package/src/components/TreeSelector.js +2 -2
- package/src/components/UploadJob.js +3 -3
- package/src/components/UploadJobBreadcrumbs.js +4 -1
- package/src/components/UploadJobParser.js +4 -3
- package/src/components/UploadModal.js +1 -1
- package/src/components/UserFilter.js +1 -1
- package/src/components/UserFilters.js +2 -2
- package/src/components/__tests__/ArrayDecorator.spec.js +2 -2
- package/src/components/__tests__/CardGroupsAccordion.spec.js +6 -6
- package/src/components/__tests__/CatalogMenu.spec.js +1 -1
- package/src/components/__tests__/DateTime.spec.js +1 -1
- package/src/components/__tests__/DomainSearchFilter.spec.js +2 -2
- package/src/components/__tests__/DomainSearchFilterItem.spec.js +7 -7
- package/src/components/__tests__/DomainSelector.spec.js +3 -3
- package/src/components/__tests__/DropdownMenuItem.spec.js +3 -3
- package/src/components/__tests__/FilterDropdown.spec.js +11 -11
- package/src/components/__tests__/FilterMultilevelDropdown.spec.js +2 -2
- package/src/components/__tests__/GlossaryMenu.spec.js +2 -2
- package/src/components/__tests__/Graph.spec.js +12 -4
- package/src/components/__tests__/GroupActions.spec.js +4 -4
- package/src/components/__tests__/Hierarchy.spec.js +1 -1
- package/src/components/__tests__/HierarchyFilterDropdown.spec.js +5 -5
- package/src/components/__tests__/HierarchyNodeFinder.spec.js +4 -4
- package/src/components/__tests__/HierarchySelector.spec.js +7 -5
- package/src/components/__tests__/Markdown.spec.js +22 -8
- package/src/components/__tests__/ModalSaveFilter.spec.js +1 -1
- package/src/components/__tests__/Pagination.spec.js +2 -2
- package/src/components/__tests__/ResourceMembers.spec.js +4 -4
- package/src/components/__tests__/SearchDateFilter.spec.js +10 -5
- package/src/components/__tests__/SearchFilterDropdown.spec.js +1 -1
- package/src/components/__tests__/SelectedFilters.spec.js +7 -7
- package/src/components/__tests__/SideMenu.spec.js +1 -1
- package/src/components/__tests__/Submenu.spec.js +1 -1
- package/src/components/__tests__/TemplateSelector.spec.js +5 -5
- package/src/components/__tests__/TreeSelector.spec.js +23 -24
- package/src/components/__tests__/UploadJob.spec.js +1 -3
- package/src/components/__tests__/UploadJobBreadcrumbs.spec.js +4 -4
- package/src/components/__tests__/UploadJobParser.spec.js +42 -38
- package/src/components/__tests__/UploadModal.spec.js +9 -9
- package/src/components/__tests__/UserFilters.spec.js +1 -1
- package/src/components/graph/ColoredEdge.js +29 -23
- package/src/components/graph/edgeLayout.js +4 -1
- package/src/hooks/__tests__/useActiveRoutes.spec.js +32 -18
- package/src/hooks/useAclEntries.js +2 -2
- package/src/hooks/useActiveRoutes.js +14 -6
- package/src/hooks/useAuthorized.js +3 -3
- package/src/hooks/useHierarchies.js +8 -8
- package/src/hooks/useLocales.js +3 -3
- package/src/hooks/useMessages.js +1 -1
- package/src/hooks/useOnScreen.js +1 -1
- package/src/hooks/useUploadJobs.js +2 -8
- package/src/hooks/useUserFilters.js +1 -1
- package/src/i18n/components/LangProvider.js +6 -6
- package/src/i18n/components/Languages.js +4 -4
- package/src/i18n/components/MessageForm.js +24 -13
- package/src/i18n/components/Messages.js +5 -5
- package/src/i18n/components/__tests__/I18nRoutes.spec.js +1 -1
- package/src/messages/index.js +1 -1
- package/src/reducers/comments.js +3 -3
- package/src/router/__tests__/ProtectedRoute.spec.js +1 -1
- package/src/routes.js +1 -1
- package/src/routesTree.js +6 -1
- package/src/routines.js +2 -2
- package/src/search/FilterDropdown.js +1 -1
- package/src/search/FilterMultilevelDropdown.js +10 -10
- package/src/search/FilterQueryDropdown.js +4 -4
- package/src/search/HierarchyFilterDropdown.js +7 -7
- package/src/search/SearchContext.js +19 -19
- package/src/search/SearchDateFilter.js +12 -2
- package/src/search/SearchFilters.js +1 -1
- package/src/search/SearchSelectedFilters.js +1 -1
- package/src/search/SearchWidget.js +6 -2
- package/src/search/UserFilter.js +1 -1
- package/src/search/UserFilters.js +4 -4
- package/src/search/__tests__/FilterDropdown.spec.js +3 -3
- package/src/search/__tests__/FilterQueryDropdown.spec.js +20 -18
- package/src/search/__tests__/ModalSaveFilter.spec.js +2 -2
- package/src/search/__tests__/SearchContext.spec.js +42 -42
- package/src/search/__tests__/SearchSelectedFilters.spec.js +21 -17
- package/src/search/__tests__/SearchWidget.spec.js +4 -4
- package/src/selectors/__tests__/getRiSubscopes.spec.js +1 -1
- package/src/selectors/__tests__/makeSearchQuerySelector.spec.js +2 -2
- package/src/selectors/getConceptSubscope.js +1 -1
- package/src/selectors/getDashboardConfig.js +3 -3
- package/src/selectors/getMessage.js +3 -3
- package/src/selectors/getRecipients.js +3 -3
- package/src/selectors/getRiSubscopes.js +2 -2
- package/src/selectors/getSidemenuGlossarySubscopes.js +1 -1
- package/src/selectors/makeActiveFiltersSelector.js +2 -2
- package/src/selectors/makeDateFiltersSelector.js +1 -1
- package/src/selectors/makeSearchQuerySelector.js +10 -10
- package/src/selectors/makeTagOptionsSelector.js +1 -4
- package/src/selectors/subscopedTemplates.js +2 -2
- package/src/services/columnPredicate.js +1 -1
- package/src/services/dateFilterFormatter.js +1 -1
- package/src/services/fieldType.js +1 -1
- package/src/services/formRules.js +16 -13
- package/src/services/getHierarchyOptions.js +2 -2
- package/src/services/message.js +7 -8
- package/src/services/operators.js +5 -5
- package/src/services/sort.js +2 -2
- package/src/services/swr.js +1 -1
- package/src/services/tree.js +2 -2
|
@@ -34,7 +34,7 @@ export default function FilterMultilevelDropdown() {
|
|
|
34
34
|
|
|
35
35
|
useEffect(() => {
|
|
36
36
|
const activeOptions = _.filter((option) =>
|
|
37
|
-
_.includes(option.id)(activeFilterSelectedValues)
|
|
37
|
+
_.includes(option.id)(activeFilterSelectedValues),
|
|
38
38
|
)(options);
|
|
39
39
|
|
|
40
40
|
_.flow(
|
|
@@ -44,18 +44,18 @@ export default function FilterMultilevelDropdown() {
|
|
|
44
44
|
option.id,
|
|
45
45
|
..._.map("id")(option.descendents),
|
|
46
46
|
],
|
|
47
|
-
[]
|
|
47
|
+
[],
|
|
48
48
|
),
|
|
49
49
|
_.uniq,
|
|
50
|
-
setSelected
|
|
50
|
+
setSelected,
|
|
51
51
|
)(activeOptions);
|
|
52
52
|
if (_.isEmpty(open) && _.isEmpty(displayed)) {
|
|
53
53
|
const withAncestors = _.flow(
|
|
54
54
|
_.reduce(
|
|
55
55
|
(acc, option) => [...acc, ..._.map("id")(option.ancestors)],
|
|
56
|
-
[]
|
|
56
|
+
[],
|
|
57
57
|
),
|
|
58
|
-
_.uniq
|
|
58
|
+
_.uniq,
|
|
59
59
|
)(activeOptions);
|
|
60
60
|
const newDisplayed = [..._.map("id")(activeOptions), ...withAncestors];
|
|
61
61
|
!_.isEqual(open, withAncestors) && setOpen(withAncestors);
|
|
@@ -81,7 +81,7 @@ export default function FilterMultilevelDropdown() {
|
|
|
81
81
|
const handleClick = (e, selection) => {
|
|
82
82
|
const option = _.find({ id: selection })(options);
|
|
83
83
|
const ancestorsToDelete = _.intersection(_.map("id")(option.ancestors))(
|
|
84
|
-
activeFilterSelectedValues
|
|
84
|
+
activeFilterSelectedValues,
|
|
85
85
|
);
|
|
86
86
|
if (!_.isEmpty(ancestorsToDelete)) {
|
|
87
87
|
const active = _.union([selection])(activeFilterSelectedValues);
|
|
@@ -90,7 +90,7 @@ export default function FilterMultilevelDropdown() {
|
|
|
90
90
|
} else if (_.includes(selection)(activeFilterSelectedValues)) {
|
|
91
91
|
const descendents = _.map("id")(option.descendents);
|
|
92
92
|
const value = _.without([selection, ...descendents])(
|
|
93
|
-
activeFilterSelectedValues
|
|
93
|
+
activeFilterSelectedValues,
|
|
94
94
|
);
|
|
95
95
|
toggleFilterValue({ filter, value });
|
|
96
96
|
} else {
|
|
@@ -121,8 +121,8 @@ export default function FilterMultilevelDropdown() {
|
|
|
121
121
|
(domain) =>
|
|
122
122
|
match(domain.name, query) ||
|
|
123
123
|
_.some((descendent) => match(descendent.name, query))(
|
|
124
|
-
domain.descendents
|
|
125
|
-
)
|
|
124
|
+
domain.descendents,
|
|
125
|
+
),
|
|
126
126
|
)(all);
|
|
127
127
|
}
|
|
128
128
|
return all;
|
|
@@ -130,7 +130,7 @@ export default function FilterMultilevelDropdown() {
|
|
|
130
130
|
|
|
131
131
|
const filterDisplayed = (all) =>
|
|
132
132
|
_.filter((domain) => domain.level == 0 || _.contains(domain.id)(displayed))(
|
|
133
|
-
all
|
|
133
|
+
all,
|
|
134
134
|
);
|
|
135
135
|
|
|
136
136
|
const filteredOptions = _.flow(filterSearch, filterDisplayed)(options);
|
|
@@ -38,13 +38,13 @@ export default function FilterQueryDropdown() {
|
|
|
38
38
|
|
|
39
39
|
useEffect(() => {
|
|
40
40
|
const activeOptions = _.filter((option) =>
|
|
41
|
-
_.includes(option.value)(activeFilterSelectedValues)
|
|
41
|
+
_.includes(option.value)(activeFilterSelectedValues),
|
|
42
42
|
)(options);
|
|
43
43
|
|
|
44
44
|
_.flow(
|
|
45
45
|
_.reduce((acc, option) => [...acc, option], []),
|
|
46
46
|
_.uniq,
|
|
47
|
-
setSelected
|
|
47
|
+
setSelected,
|
|
48
48
|
)(activeOptions);
|
|
49
49
|
}, [activeFilterSelectedValues, options]);
|
|
50
50
|
|
|
@@ -57,7 +57,7 @@ export default function FilterQueryDropdown() {
|
|
|
57
57
|
const filteredOptions = _.filter(
|
|
58
58
|
(option) =>
|
|
59
59
|
match(option.text, localQuery) &&
|
|
60
|
-
!_.includes(option.value)(activeFilterSelectedValues)
|
|
60
|
+
!_.includes(option.value)(activeFilterSelectedValues),
|
|
61
61
|
)(sortedOptions);
|
|
62
62
|
|
|
63
63
|
return (
|
|
@@ -126,7 +126,7 @@ export default function FilterQueryDropdown() {
|
|
|
126
126
|
toggleFilterValue={toggleFilterValue}
|
|
127
127
|
option={option}
|
|
128
128
|
active={_.includes(_.prop("value")(option))(
|
|
129
|
-
activeFilterSelectedValues
|
|
129
|
+
activeFilterSelectedValues,
|
|
130
130
|
)}
|
|
131
131
|
/>
|
|
132
132
|
))}
|
|
@@ -18,7 +18,7 @@ const PopulatedHierarchyFilterDropdown = () => {
|
|
|
18
18
|
_.first,
|
|
19
19
|
_.prop("value"),
|
|
20
20
|
(value) => value.split("_"),
|
|
21
|
-
_.first
|
|
21
|
+
_.first,
|
|
22
22
|
)(options);
|
|
23
23
|
|
|
24
24
|
const { data, error, loading: hierarchyLoading } = useHierarchy(hierarchyId);
|
|
@@ -30,29 +30,29 @@ const PopulatedHierarchyFilterDropdown = () => {
|
|
|
30
30
|
const includedKeys = _.flow(
|
|
31
31
|
_.map("value"),
|
|
32
32
|
_.flatMap(getKeyAndParents(hierarchyOptions)),
|
|
33
|
-
_.uniq
|
|
33
|
+
_.uniq,
|
|
34
34
|
)(options);
|
|
35
35
|
|
|
36
36
|
const filterIncludedKeys = _.filter(({ key }) =>
|
|
37
|
-
_.includes(key)(includedKeys)
|
|
37
|
+
_.includes(key)(includedKeys),
|
|
38
38
|
);
|
|
39
39
|
|
|
40
40
|
const filteredChildren = _.flow(_.prop("children"), filterIncludedKeys);
|
|
41
41
|
|
|
42
42
|
const filteredOptions = _.flow(
|
|
43
43
|
filterIncludedKeys,
|
|
44
|
-
_.map((node) => ({ ...node, children: filteredChildren(node) }))
|
|
44
|
+
_.map((node) => ({ ...node, children: filteredChildren(node) })),
|
|
45
45
|
)(hierarchyOptions);
|
|
46
46
|
|
|
47
47
|
const idActiveValues = _.map((key) =>
|
|
48
|
-
_.flow(_.find({ key }), _.prop("id"))(filteredOptions)
|
|
48
|
+
_.flow(_.find({ key }), _.prop("id"))(filteredOptions),
|
|
49
49
|
)(activeFilterSelectedValues);
|
|
50
50
|
|
|
51
51
|
const handleToggleFilterValue = ({ filter, value }) => {
|
|
52
52
|
const getChildrenKeys = (id) => {
|
|
53
53
|
const { key, descendents } = _.flow(
|
|
54
54
|
_.find({ id }),
|
|
55
|
-
_.pick(["key", "descendents"])
|
|
55
|
+
_.pick(["key", "descendents"]),
|
|
56
56
|
)(filteredOptions);
|
|
57
57
|
const descendentKeys = _.map("key")(descendents);
|
|
58
58
|
return [key, ...descendentKeys];
|
|
@@ -61,7 +61,7 @@ const PopulatedHierarchyFilterDropdown = () => {
|
|
|
61
61
|
const newValue = _.flow(
|
|
62
62
|
_.flatMap(getChildrenKeys),
|
|
63
63
|
_.uniq,
|
|
64
|
-
_.reject(_.isNil)
|
|
64
|
+
_.reject(_.isNil),
|
|
65
65
|
)(value);
|
|
66
66
|
|
|
67
67
|
toggleFilterValue({ filter, value: newValue });
|
|
@@ -68,7 +68,7 @@ export const SearchContextProvider = (props) => {
|
|
|
68
68
|
setLoading(false);
|
|
69
69
|
});
|
|
70
70
|
}),
|
|
71
|
-
[]
|
|
71
|
+
[],
|
|
72
72
|
);
|
|
73
73
|
|
|
74
74
|
const debouncedTriggerSearchFilters = useCallback(
|
|
@@ -78,7 +78,7 @@ export const SearchContextProvider = (props) => {
|
|
|
78
78
|
setLoadingFilters(false);
|
|
79
79
|
});
|
|
80
80
|
}),
|
|
81
|
-
[]
|
|
81
|
+
[],
|
|
82
82
|
);
|
|
83
83
|
|
|
84
84
|
useEffect(() => {
|
|
@@ -147,12 +147,12 @@ export const SearchContextProvider = (props) => {
|
|
|
147
147
|
const filters = _.flow(
|
|
148
148
|
_.propOr({}, "data"),
|
|
149
149
|
_.omit(omitFilters),
|
|
150
|
-
_.omitBy(_.flow(_.propOr([], "values"), (values) => _.size(values) < 2))
|
|
150
|
+
_.omitBy(_.flow(_.propOr([], "values"), (values) => _.size(values) < 2)),
|
|
151
151
|
)(filtersPayload);
|
|
152
152
|
|
|
153
153
|
const allFilters = _.flow(
|
|
154
154
|
_.propOr({}, "data"),
|
|
155
|
-
_.omit(omitFilters)
|
|
155
|
+
_.omit(omitFilters),
|
|
156
156
|
)(filtersPayload);
|
|
157
157
|
|
|
158
158
|
const availableFilters = _.flow(_.keys, _.without(selectedFilters))(filters);
|
|
@@ -163,18 +163,18 @@ export const SearchContextProvider = (props) => {
|
|
|
163
163
|
({ values, type }) => ({
|
|
164
164
|
values: _.flow(
|
|
165
165
|
_.concat(_.prop(activeFilterName)(allActiveFilters)),
|
|
166
|
-
_.uniq
|
|
166
|
+
_.uniq,
|
|
167
167
|
)(values),
|
|
168
168
|
type,
|
|
169
169
|
}),
|
|
170
170
|
formatFilterValues,
|
|
171
171
|
_.map(makeOption(translations(formatMessage), activeFilterName)),
|
|
172
|
-
_.reject((item) => _.values(item).includes(undefined))
|
|
172
|
+
_.reject((item) => _.values(item).includes(undefined)),
|
|
173
173
|
)(filters);
|
|
174
174
|
|
|
175
175
|
const activeFilterSelectedValues = _.flow(
|
|
176
176
|
_.propOr([], activeFilterName),
|
|
177
|
-
toFilterValues
|
|
177
|
+
toFilterValues,
|
|
178
178
|
)(allActiveFilters);
|
|
179
179
|
|
|
180
180
|
const [customSearchMust, setCustomSearchMust] = useState({});
|
|
@@ -193,7 +193,7 @@ export const SearchContextProvider = (props) => {
|
|
|
193
193
|
dateFilters,
|
|
194
194
|
hiddenFilters,
|
|
195
195
|
customSearchMust,
|
|
196
|
-
]
|
|
196
|
+
],
|
|
197
197
|
);
|
|
198
198
|
|
|
199
199
|
const filterMust = useMemo(
|
|
@@ -202,11 +202,11 @@ export const SearchContextProvider = (props) => {
|
|
|
202
202
|
...hiddenFilters,
|
|
203
203
|
..._.flow(
|
|
204
204
|
_.pickBy(_.negate(_.isEmpty)),
|
|
205
|
-
_.omit(activeFilterName)
|
|
205
|
+
_.omit(activeFilterName),
|
|
206
206
|
)(allActiveFilters),
|
|
207
207
|
}),
|
|
208
208
|
|
|
209
|
-
[allActiveFilters, activeFilterName, defaultFilters, hiddenFilters]
|
|
209
|
+
[allActiveFilters, activeFilterName, defaultFilters, hiddenFilters],
|
|
210
210
|
);
|
|
211
211
|
|
|
212
212
|
const sort = useMemo(
|
|
@@ -214,7 +214,7 @@ export const SearchContextProvider = (props) => {
|
|
|
214
214
|
sortColumn
|
|
215
215
|
? { [sortColumn]: sortDirection === "ascending" ? "asc" : "desc" }
|
|
216
216
|
: null,
|
|
217
|
-
[sortColumn, sortDirection]
|
|
217
|
+
[sortColumn, sortDirection],
|
|
218
218
|
);
|
|
219
219
|
|
|
220
220
|
const triggerFilters = useFilters?.()?.trigger;
|
|
@@ -266,14 +266,14 @@ export const SearchContextProvider = (props) => {
|
|
|
266
266
|
const getMustFilters = (filters) =>
|
|
267
267
|
_.flow(
|
|
268
268
|
_.pickBy((value, key) => !key.startsWith("mustnot.")),
|
|
269
|
-
_.mapKeys(mapDomainFilterKey)
|
|
269
|
+
_.mapKeys(mapDomainFilterKey),
|
|
270
270
|
)(filters);
|
|
271
271
|
|
|
272
272
|
const getMustNotFilters = (filters) =>
|
|
273
273
|
_.flow(
|
|
274
274
|
_.pickBy((value, key) => key.startsWith("mustnot.")),
|
|
275
275
|
_.mapKeys((key) => key.replace("mustnot.", "")),
|
|
276
|
-
_.mapKeys(mapDomainFilterKey)
|
|
276
|
+
_.mapKeys(mapDomainFilterKey),
|
|
277
277
|
)(filters);
|
|
278
278
|
|
|
279
279
|
const makeFiltersGroup = (filters, groups) =>
|
|
@@ -281,14 +281,14 @@ export const SearchContextProvider = (props) => {
|
|
|
281
281
|
_.groupBy((filter) =>
|
|
282
282
|
_.flow(
|
|
283
283
|
_.find(([_group, fields]) => _.contains(filter)(fields)),
|
|
284
|
-
_.prop("[0]")
|
|
285
|
-
)(groups)
|
|
284
|
+
_.prop("[0]"),
|
|
285
|
+
)(groups),
|
|
286
286
|
),
|
|
287
287
|
_.toPairs,
|
|
288
288
|
_.remove(([key, _value]) => {
|
|
289
289
|
return _.startsWith("_")(key);
|
|
290
290
|
}),
|
|
291
|
-
_.fromPairs
|
|
291
|
+
_.fromPairs,
|
|
292
292
|
)(filters);
|
|
293
293
|
|
|
294
294
|
const filtersByGroup = makeFiltersGroup(availableFilters, filtersGroup);
|
|
@@ -297,7 +297,7 @@ export const SearchContextProvider = (props) => {
|
|
|
297
297
|
_.flow(
|
|
298
298
|
_.prop("[0]"),
|
|
299
299
|
(groupName) => _.prop(groupName)(filtersByGroup),
|
|
300
|
-
_.isEmpty
|
|
300
|
+
_.isEmpty,
|
|
301
301
|
)(groups);
|
|
302
302
|
|
|
303
303
|
const availableGroupedFilters = _.flow(
|
|
@@ -306,7 +306,7 @@ export const SearchContextProvider = (props) => {
|
|
|
306
306
|
_.map(([groupName, _filters]) => [
|
|
307
307
|
groupName,
|
|
308
308
|
_.prop(groupName)(filtersByGroup),
|
|
309
|
-
])
|
|
309
|
+
]),
|
|
310
310
|
)(filtersGroup);
|
|
311
311
|
|
|
312
312
|
const handleSortSelection = (columnName) => {
|
|
@@ -317,7 +317,7 @@ export const SearchContextProvider = (props) => {
|
|
|
317
317
|
setSortDirection("ascending");
|
|
318
318
|
} else {
|
|
319
319
|
setSortDirection(
|
|
320
|
-
sortDirection === "ascending" ? "descending" : "ascending"
|
|
320
|
+
sortDirection === "ascending" ? "descending" : "ascending",
|
|
321
321
|
);
|
|
322
322
|
}
|
|
323
323
|
};
|
|
@@ -11,7 +11,9 @@ const SearchDateFilter = ({
|
|
|
11
11
|
searchField = "updated_at",
|
|
12
12
|
isGrantDateRange = false,
|
|
13
13
|
}) => {
|
|
14
|
-
const dateFormatter = dateFilterFormatter(
|
|
14
|
+
const dateFormatter = dateFilterFormatter(
|
|
15
|
+
isGrantDateRange ? "grantDateFilter" : undefined,
|
|
16
|
+
);
|
|
15
17
|
|
|
16
18
|
const { setDateFilters } = useSearchContext();
|
|
17
19
|
|
|
@@ -24,7 +26,15 @@ const SearchDateFilter = ({
|
|
|
24
26
|
|
|
25
27
|
return active ? (
|
|
26
28
|
<DateFilter
|
|
27
|
-
label={
|
|
29
|
+
label={
|
|
30
|
+
<FormattedMessage
|
|
31
|
+
id={
|
|
32
|
+
isGrantDateRange
|
|
33
|
+
? "filter.start_date_end_date"
|
|
34
|
+
: "filter.updated_at"
|
|
35
|
+
}
|
|
36
|
+
/>
|
|
37
|
+
}
|
|
28
38
|
name={searchField}
|
|
29
39
|
onChange={onChangeDateFilter}
|
|
30
40
|
defaultValues={defaultValues}
|
|
@@ -2,12 +2,12 @@ import _ from "lodash/fp";
|
|
|
2
2
|
import { useState } from "react";
|
|
3
3
|
import { FormattedMessage } from "react-intl";
|
|
4
4
|
import { useLocation } from "react-router";
|
|
5
|
+
import DomainSearchFilter from "../components/DomainSearchFilter";
|
|
5
6
|
import ModalSaveFilter from "./ModalSaveFilter";
|
|
6
7
|
import UserFilters from "./UserFilters";
|
|
7
8
|
import FilterDropdown from "./FilterDropdown";
|
|
8
9
|
import FilterQueryDropdown from "./FilterQueryDropdown";
|
|
9
10
|
import FilterMultilevelDropdown from "./FilterMultilevelDropdown";
|
|
10
|
-
import DomainSearchFilter from "../components/DomainSearchFilter";
|
|
11
11
|
import HierarchyFilterDropdown from "./HierarchyFilterDropdown";
|
|
12
12
|
import SearchContext, { useSearchContext } from "./SearchContext";
|
|
13
13
|
|
|
@@ -6,7 +6,11 @@ import SearchSelectedFilters from "./SearchSelectedFilters";
|
|
|
6
6
|
import { useSearchContext } from "./SearchContext";
|
|
7
7
|
import SearchDateFilter from "./SearchDateFilter";
|
|
8
8
|
|
|
9
|
-
export default function SearchWidget({
|
|
9
|
+
export default function SearchWidget({
|
|
10
|
+
dateFilter = false,
|
|
11
|
+
searchField,
|
|
12
|
+
isGrantDateRange = false,
|
|
13
|
+
}) {
|
|
10
14
|
const { formatMessage } = useIntl();
|
|
11
15
|
|
|
12
16
|
const {
|
|
@@ -29,7 +33,7 @@ export default function SearchWidget({ dateFilter = false, searchField, isGrantD
|
|
|
29
33
|
name: "start_date,end_date",
|
|
30
34
|
type: "range",
|
|
31
35
|
rangeStart: "",
|
|
32
|
-
rangeEnd: "",
|
|
36
|
+
rangeEnd: "",
|
|
33
37
|
};
|
|
34
38
|
|
|
35
39
|
const onClickSearchDateFilter = () => {
|
package/src/search/UserFilter.js
CHANGED
|
@@ -13,7 +13,7 @@ import { ConfirmModal } from "../components/ConfirmModal";
|
|
|
13
13
|
export const DeleteModal = ({ userFilter, userFiltersType, mutate }) => {
|
|
14
14
|
const { trigger: deleteUserFilter } = useUserFiltersDelete(
|
|
15
15
|
userFilter.id,
|
|
16
|
-
userFiltersType
|
|
16
|
+
userFiltersType,
|
|
17
17
|
);
|
|
18
18
|
const handleDelete = () => {
|
|
19
19
|
deleteUserFilter().then(() => {
|
|
@@ -95,9 +95,9 @@ export const UserFilters = ({
|
|
|
95
95
|
|
|
96
96
|
const sortedUserFilters = _.flow(
|
|
97
97
|
_.filter(({ filters }) =>
|
|
98
|
-
_.isNull(domainId) ? true : showDomainFilter(filters)
|
|
98
|
+
_.isNull(domainId) ? true : showDomainFilter(filters),
|
|
99
99
|
),
|
|
100
|
-
_.orderBy(["is_global", "id"], ["desc", "asc"])
|
|
100
|
+
_.orderBy(["is_global", "id"], ["desc", "asc"]),
|
|
101
101
|
)(userFilters);
|
|
102
102
|
|
|
103
103
|
return _.isEmpty(userFilters) ? null : (
|
|
@@ -124,7 +124,7 @@ export const UserFilters = ({
|
|
|
124
124
|
setSelectedUserFilter(null);
|
|
125
125
|
} else {
|
|
126
126
|
setAllActiveFilters(
|
|
127
|
-
_.propOr({}, "filters")(userFilter)
|
|
127
|
+
_.propOr({}, "filters")(userFilter),
|
|
128
128
|
);
|
|
129
129
|
setSelectedUserFilter(userFilter.name);
|
|
130
130
|
}
|
|
@@ -28,7 +28,7 @@ describe("<FilterDropdown/>", () => {
|
|
|
28
28
|
const rendered = render(
|
|
29
29
|
<SearchContext value={searchProps}>
|
|
30
30
|
<FilterDropdown />
|
|
31
|
-
</SearchContext
|
|
31
|
+
</SearchContext>,
|
|
32
32
|
);
|
|
33
33
|
await waitForLoad(rendered);
|
|
34
34
|
expect(rendered.container).toMatchSnapshot();
|
|
@@ -38,7 +38,7 @@ describe("<FilterDropdown/>", () => {
|
|
|
38
38
|
const rendered = render(
|
|
39
39
|
<SearchContext value={searchProps}>
|
|
40
40
|
<FilterDropdown />
|
|
41
|
-
</SearchContext
|
|
41
|
+
</SearchContext>,
|
|
42
42
|
);
|
|
43
43
|
await waitForLoad(rendered);
|
|
44
44
|
expect(rendered.queryByRole("textbox")).not.toBeInTheDocument();
|
|
@@ -91,7 +91,7 @@ describe("<FilterDropdown/>", () => {
|
|
|
91
91
|
const rendered = render(
|
|
92
92
|
<SearchContext value={searchProps}>
|
|
93
93
|
<FilterDropdown />
|
|
94
|
-
</SearchContext
|
|
94
|
+
</SearchContext>,
|
|
95
95
|
);
|
|
96
96
|
await waitForLoad(rendered);
|
|
97
97
|
userEvent.click(rendered.container.querySelector('[class="delete icon"]'));
|
|
@@ -27,7 +27,7 @@ describe("<FilterQueryDropdown/>", () => {
|
|
|
27
27
|
const rendered = render(
|
|
28
28
|
<SearchContext value={searchProps}>
|
|
29
29
|
<FilterQueryDropdown />
|
|
30
|
-
</SearchContext
|
|
30
|
+
</SearchContext>,
|
|
31
31
|
);
|
|
32
32
|
await waitForLoad(rendered);
|
|
33
33
|
expect(rendered.container).toMatchSnapshot();
|
|
@@ -37,11 +37,11 @@ describe("<FilterQueryDropdown/>", () => {
|
|
|
37
37
|
const rendered = render(
|
|
38
38
|
<SearchContext value={searchProps}>
|
|
39
39
|
<FilterQueryDropdown />
|
|
40
|
-
</SearchContext
|
|
40
|
+
</SearchContext>,
|
|
41
41
|
);
|
|
42
42
|
await waitForLoad(rendered);
|
|
43
43
|
const searchInput = rendered.container.querySelector(
|
|
44
|
-
".search input[type='text']"
|
|
44
|
+
".search input[type='text']",
|
|
45
45
|
);
|
|
46
46
|
expect(searchInput).toBeInTheDocument();
|
|
47
47
|
});
|
|
@@ -52,7 +52,7 @@ describe("<FilterQueryDropdown/>", () => {
|
|
|
52
52
|
const rendered = render(
|
|
53
53
|
<SearchContext value={searchProps}>
|
|
54
54
|
<FilterQueryDropdown />
|
|
55
|
-
</SearchContext
|
|
55
|
+
</SearchContext>,
|
|
56
56
|
);
|
|
57
57
|
await waitForLoad(rendered);
|
|
58
58
|
|
|
@@ -60,7 +60,7 @@ describe("<FilterQueryDropdown/>", () => {
|
|
|
60
60
|
|
|
61
61
|
expect(searchProps.toggleFilterValue).toBeCalledTimes(0);
|
|
62
62
|
await user.click(
|
|
63
|
-
rendered.getByRole("option", { name: new RegExp(selectedOption, "i") })
|
|
63
|
+
rendered.getByRole("option", { name: new RegExp(selectedOption, "i") }),
|
|
64
64
|
);
|
|
65
65
|
expect(searchProps.toggleFilterValue).toBeCalledWith({
|
|
66
66
|
filter: searchProps.filter,
|
|
@@ -74,11 +74,11 @@ describe("<FilterQueryDropdown/>", () => {
|
|
|
74
74
|
rendered.rerender(
|
|
75
75
|
<SearchContext value={rerenderProps}>
|
|
76
76
|
<FilterQueryDropdown />
|
|
77
|
-
</SearchContext
|
|
77
|
+
</SearchContext>,
|
|
78
78
|
);
|
|
79
79
|
|
|
80
80
|
expect(
|
|
81
|
-
within(rendered.getAllByRole("option")[0]).queryByText(selectedOption)
|
|
81
|
+
within(rendered.getAllByRole("option")[0]).queryByText(selectedOption),
|
|
82
82
|
).not.toBeNull();
|
|
83
83
|
});
|
|
84
84
|
|
|
@@ -88,18 +88,18 @@ describe("<FilterQueryDropdown/>", () => {
|
|
|
88
88
|
const rendered = render(
|
|
89
89
|
<SearchContext value={searchProps}>
|
|
90
90
|
<FilterQueryDropdown />
|
|
91
|
-
</SearchContext
|
|
91
|
+
</SearchContext>,
|
|
92
92
|
);
|
|
93
93
|
await waitForLoad(rendered);
|
|
94
94
|
|
|
95
95
|
const input = rendered.container.querySelector(
|
|
96
|
-
".search input[type='text']"
|
|
96
|
+
".search input[type='text']",
|
|
97
97
|
);
|
|
98
98
|
|
|
99
99
|
expect(
|
|
100
100
|
rendered.getByRole("option", {
|
|
101
101
|
name: new RegExp(searchProps.options[1].text, "i"),
|
|
102
|
-
})
|
|
102
|
+
}),
|
|
103
103
|
).toBeInTheDocument();
|
|
104
104
|
|
|
105
105
|
const user = userEvent.setup({ delay: null });
|
|
@@ -108,11 +108,11 @@ describe("<FilterQueryDropdown/>", () => {
|
|
|
108
108
|
expect(
|
|
109
109
|
rendered.queryByRole("option", {
|
|
110
110
|
name: new RegExp(searchProps.options[1].text, "i"),
|
|
111
|
-
})
|
|
111
|
+
}),
|
|
112
112
|
).toBeNull();
|
|
113
113
|
|
|
114
114
|
expect(
|
|
115
|
-
within(rendered.getByRole("option")).getByText(`value${searchText}`)
|
|
115
|
+
within(rendered.getByRole("option")).getByText(`value${searchText}`),
|
|
116
116
|
).toBeInTheDocument();
|
|
117
117
|
|
|
118
118
|
expect(rendered.getAllByRole("option").length).toBe(1);
|
|
@@ -131,29 +131,31 @@ describe("<FilterQueryDropdown/>", () => {
|
|
|
131
131
|
const rendered = render(
|
|
132
132
|
<SearchContext value={customProps}>
|
|
133
133
|
<FilterQueryDropdown />
|
|
134
|
-
</SearchContext
|
|
134
|
+
</SearchContext>,
|
|
135
135
|
);
|
|
136
136
|
await waitForLoad(rendered);
|
|
137
137
|
|
|
138
138
|
const input = rendered.container.querySelector(
|
|
139
|
-
".search input[type='text']"
|
|
139
|
+
".search input[type='text']",
|
|
140
140
|
);
|
|
141
141
|
|
|
142
142
|
const user = userEvent.setup({ delay: null });
|
|
143
143
|
await user.type(input, searchText);
|
|
144
144
|
|
|
145
145
|
expect(
|
|
146
|
-
within(rendered.getAllByRole("option")[0]).getByText(selectedOption)
|
|
146
|
+
within(rendered.getAllByRole("option")[0]).getByText(selectedOption),
|
|
147
147
|
).toBeInTheDocument();
|
|
148
148
|
|
|
149
149
|
expect(
|
|
150
|
-
within(rendered.getAllByRole("option")[1]).getByText(
|
|
150
|
+
within(rendered.getAllByRole("option")[1]).getByText(
|
|
151
|
+
`value${searchText}`,
|
|
152
|
+
),
|
|
151
153
|
).toBeInTheDocument();
|
|
152
154
|
|
|
153
155
|
expect(
|
|
154
156
|
rendered.queryByRole("option", {
|
|
155
157
|
name: new RegExp(customProps.options[1].text, "i"),
|
|
156
|
-
})
|
|
158
|
+
}),
|
|
157
159
|
).toBeNull();
|
|
158
160
|
|
|
159
161
|
expect(rendered.getAllByRole("option").length).toBe(2);
|
|
@@ -208,7 +210,7 @@ describe("<FilterQueryDropdown/>", () => {
|
|
|
208
210
|
const rendered = render(
|
|
209
211
|
<SearchContext value={searchProps}>
|
|
210
212
|
<FilterQueryDropdown />
|
|
211
|
-
</SearchContext
|
|
213
|
+
</SearchContext>,
|
|
212
214
|
);
|
|
213
215
|
await waitForLoad(rendered);
|
|
214
216
|
|
|
@@ -29,7 +29,7 @@ describe("<ModalSaveFilter /> admin", () => {
|
|
|
29
29
|
<SearchContext value={searchProps}>
|
|
30
30
|
<ModalSaveFilter />
|
|
31
31
|
</SearchContext>,
|
|
32
|
-
renderOpts
|
|
32
|
+
renderOpts,
|
|
33
33
|
);
|
|
34
34
|
expect(container).toMatchSnapshot();
|
|
35
35
|
});
|
|
@@ -39,7 +39,7 @@ describe("<ModalSaveFilter /> admin", () => {
|
|
|
39
39
|
<SearchContext value={searchProps}>
|
|
40
40
|
<ModalSaveFilter />
|
|
41
41
|
</SearchContext>,
|
|
42
|
-
renderOpts
|
|
42
|
+
renderOpts,
|
|
43
43
|
);
|
|
44
44
|
userEvent.click(await findByText(/save/i));
|
|
45
45
|
expect(container).toMatchSnapshot();
|