@truedat/bg 6.3.2 → 6.3.4

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.
Files changed (113) hide show
  1. package/package.json +6 -6
  2. package/src/concepts/api.js +3 -7
  3. package/src/concepts/components/ConceptActions.js +1 -0
  4. package/src/concepts/components/ConceptCreate.js +6 -4
  5. package/src/concepts/components/ConceptRoutes.js +10 -33
  6. package/src/concepts/components/Concepts.js +25 -16
  7. package/src/concepts/components/ConceptsActions.js +8 -14
  8. package/src/concepts/components/ConceptsBulkUpdate.js +25 -64
  9. package/src/concepts/components/ConceptsLabelResults.js +13 -26
  10. package/src/concepts/components/ConceptsLinksManagement.js +6 -92
  11. package/src/concepts/components/ConceptsPagination.js +13 -11
  12. package/src/concepts/components/ConceptsPanel.js +51 -22
  13. package/src/concepts/components/ConceptsTable.js +77 -106
  14. package/src/concepts/components/ConceptsUpdateButton.js +49 -37
  15. package/src/concepts/components/DomainConcepts.js +2 -11
  16. package/src/concepts/components/LinkedMessage.js +81 -0
  17. package/src/concepts/components/__tests__/ConceptLinksManagement.spec.js +60 -12
  18. package/src/concepts/components/__tests__/Concepts.spec.js +66 -11
  19. package/src/concepts/components/__tests__/ConceptsActions.spec.js +47 -3
  20. package/src/concepts/components/__tests__/ConceptsBulkUpdate.spec.js +7 -3
  21. package/src/concepts/components/__tests__/ConceptsLabelResults.spec.js +34 -4
  22. package/src/concepts/components/__tests__/ConceptsPanel.spec.js +59 -13
  23. package/src/concepts/components/__tests__/ConceptsTable.spec.js +53 -6
  24. package/src/concepts/components/__tests__/ConceptsUpdateButton.spec.js +26 -13
  25. package/src/concepts/components/__tests__/__snapshots__/ConceptLinksManagement.spec.js.snap +164 -8
  26. package/src/concepts/components/__tests__/__snapshots__/Concepts.spec.js.snap +284 -34
  27. package/src/concepts/components/__tests__/__snapshots__/ConceptsActions.spec.js.snap +1 -1
  28. package/src/concepts/components/__tests__/__snapshots__/ConceptsPanel.spec.js.snap +125 -2
  29. package/src/concepts/components/__tests__/__snapshots__/ConceptsTable.spec.js.snap +28 -44
  30. package/src/concepts/components/__tests__/__snapshots__/ConceptsUpdateButton.spec.js.snap +10 -47
  31. package/src/concepts/hooks/useConcepts.js +34 -0
  32. package/src/concepts/reducers/bulkUpdateQueryInfo.js +12 -0
  33. package/src/concepts/reducers/index.js +2 -26
  34. package/src/concepts/relations/components/ConceptRelationsRoutes.js +39 -35
  35. package/src/concepts/relations/components/ConceptSelector.js +37 -31
  36. package/src/concepts/relations/components/__tests__/ConceptRelationForm.spec.js +63 -23
  37. package/src/concepts/relations/components/__tests__/ConceptSelector.spec.js +74 -41
  38. package/src/concepts/relations/components/__tests__/ConceptSelector2.spec.js +72 -0
  39. package/src/concepts/relations/components/__tests__/__snapshots__/ConceptRelationForm.spec.js.snap +44 -8
  40. package/src/concepts/relations/components/__tests__/__snapshots__/ConceptSelector.spec.js.snap +44 -27
  41. package/src/concepts/routines.js +2 -29
  42. package/src/concepts/sagas/__tests__/bulkUpdate.spec.js +6 -10
  43. package/src/concepts/sagas/__tests__/downloadConcepts.spec.js +4 -8
  44. package/src/concepts/sagas/bulkUpdate.js +6 -5
  45. package/src/concepts/sagas/downloadConcepts.js +3 -4
  46. package/src/concepts/sagas/index.js +2 -17
  47. package/src/concepts/selectors/getConceptColumns.js +12 -21
  48. package/src/concepts/selectors/index.js +1 -7
  49. package/src/concepts/utils/filterOptions.js +6 -5
  50. package/src/concepts/components/ConceptFilters.js +0 -20
  51. package/src/concepts/components/ConceptFiltersLoader.js +0 -27
  52. package/src/concepts/components/ConceptSelectedFilters.js +0 -29
  53. package/src/concepts/components/ConceptSelectedFiltersDefault.js +0 -42
  54. package/src/concepts/components/ConceptSelectedFiltersPending.js +0 -41
  55. package/src/concepts/components/ConceptSelectedFiltersPublished.js +0 -73
  56. package/src/concepts/components/ConceptUserFiltersLoader.js +0 -27
  57. package/src/concepts/components/ConceptsLoader.js +0 -38
  58. package/src/concepts/components/ConceptsSearch.js +0 -32
  59. package/src/concepts/components/__tests__/ConceptFilters.spec.js +0 -19
  60. package/src/concepts/components/__tests__/ConceptSelectedFilters.spec.js +0 -10
  61. package/src/concepts/components/__tests__/ConceptUserFiltersLoader.spec.js +0 -27
  62. package/src/concepts/components/__tests__/ConceptsLoader.spec.js +0 -34
  63. package/src/concepts/components/__tests__/__snapshots__/ConceptFilters.spec.js.snap +0 -47
  64. package/src/concepts/components/__tests__/__snapshots__/ConceptSelectedFilters.spec.js.snap +0 -9
  65. package/src/concepts/components/__tests__/__snapshots__/ConceptUserFiltersLoader.spec.js.snap +0 -3
  66. package/src/concepts/reducers/__tests__/conceptActiveFilters.spec.js +0 -83
  67. package/src/concepts/reducers/__tests__/conceptCount.spec.js +0 -33
  68. package/src/concepts/reducers/__tests__/conceptFilters.spec.js +0 -49
  69. package/src/concepts/reducers/__tests__/conceptFiltersLoading.spec.js +0 -28
  70. package/src/concepts/reducers/__tests__/conceptQuery.spec.js +0 -75
  71. package/src/concepts/reducers/__tests__/conceptSelectedFilter.spec.js +0 -66
  72. package/src/concepts/reducers/__tests__/conceptSelectedUserFilter.spec.js +0 -53
  73. package/src/concepts/reducers/__tests__/conceptUserFilters.spec.js +0 -76
  74. package/src/concepts/reducers/__tests__/concepts.spec.js +0 -40
  75. package/src/concepts/reducers/__tests__/conceptsActions.spec.js +0 -38
  76. package/src/concepts/reducers/__tests__/conceptsLoading.spec.js +0 -32
  77. package/src/concepts/reducers/__tests__/conceptsPageSize.spec.js +0 -33
  78. package/src/concepts/reducers/__tests__/previousConceptQuery.spec.js +0 -23
  79. package/src/concepts/reducers/conceptActiveFilters.js +0 -58
  80. package/src/concepts/reducers/conceptCount.js +0 -20
  81. package/src/concepts/reducers/conceptFilters.js +0 -21
  82. package/src/concepts/reducers/conceptFiltersLoading.js +0 -14
  83. package/src/concepts/reducers/conceptQuery.js +0 -60
  84. package/src/concepts/reducers/conceptSelectedFilter.js +0 -34
  85. package/src/concepts/reducers/conceptSelectedUserFilter.js +0 -31
  86. package/src/concepts/reducers/conceptUserFilters.js +0 -36
  87. package/src/concepts/reducers/concepts.js +0 -21
  88. package/src/concepts/reducers/conceptsActions.js +0 -24
  89. package/src/concepts/reducers/conceptsLoading.js +0 -16
  90. package/src/concepts/reducers/conceptsPageSize.js +0 -16
  91. package/src/concepts/reducers/previousConceptQuery.js +0 -15
  92. package/src/concepts/sagas/__tests__/deleteConceptUserFilter.spec.js +0 -75
  93. package/src/concepts/sagas/__tests__/fetchConceptUserFilters.spec.js +0 -70
  94. package/src/concepts/sagas/__tests__/fetchConcepts.spec.js +0 -87
  95. package/src/concepts/sagas/__tests__/saveConceptFilters.spec.js +0 -78
  96. package/src/concepts/sagas/deleteConceptUserFilter.js +0 -34
  97. package/src/concepts/sagas/fecthConceptUserFilters.js +0 -30
  98. package/src/concepts/sagas/fetchConceptFilters.js +0 -29
  99. package/src/concepts/sagas/fetchConcepts.js +0 -27
  100. package/src/concepts/sagas/saveConceptFilters.js +0 -30
  101. package/src/concepts/selectors/__tests__/getConceptAvailableFilters.spec.js +0 -16
  102. package/src/concepts/selectors/__tests__/getConceptFilterTypes.spec.js +0 -19
  103. package/src/concepts/selectors/__tests__/getConceptSelectedFilterActiveValues.spec.js +0 -16
  104. package/src/concepts/selectors/__tests__/getConceptSelectedFilterValues.spec.js +0 -15
  105. package/src/concepts/selectors/__tests__/getConceptSelectedFilters.spec.js +0 -15
  106. package/src/concepts/selectors/__tests__/mapSelectedFilterStateToPropsByStatus.spec.js +0 -37
  107. package/src/concepts/selectors/getConceptAvailableFilters.js +0 -15
  108. package/src/concepts/selectors/getConceptFilterTypes.js +0 -7
  109. package/src/concepts/selectors/getConceptSelectedFilterActiveValues.js +0 -9
  110. package/src/concepts/selectors/getConceptSelectedFilterValues.js +0 -12
  111. package/src/concepts/selectors/getConceptSelectedFilters.js +0 -7
  112. package/src/concepts/selectors/getPreviousConceptQuery.js +0 -1
  113. package/src/concepts/selectors/mapSelectedFilterStateToPropsByStatus.js +0 -47
@@ -5,11 +5,12 @@ import { FormattedMessage } from "react-intl";
5
5
  import { createSelector } from "reselect";
6
6
  import Moment from "react-moment";
7
7
 
8
- const iconDecorator = field => (field > 0 ? <Icon name="check circle" /> : "");
8
+ const iconDecorator = (field) =>
9
+ field > 0 ? <Icon name="check circle" /> : "";
9
10
 
10
- const translateDecorator = text => <FormattedMessage id={text} />;
11
+ const translateDecorator = (text) => <FormattedMessage id={text} />;
11
12
 
12
- const dateDecorator = date => (
13
+ const dateDecorator = (date) => (
13
14
  <Moment locale="es" date={date} format="YYYY-MM-DD HH:mm" />
14
15
  );
15
16
 
@@ -19,50 +20,40 @@ const defaultConceptColumns = [
19
20
  name: "domain",
20
21
  sort: { name: "domain.name.sort" },
21
22
  fieldSelector: _.path("domain.name"),
22
- width: 3
23
+ width: 3,
23
24
  },
24
25
  {
25
26
  name: "status",
26
27
  sort: { name: "status" },
27
- fieldDecorator: field => translateDecorator(`concepts.status.${field}`),
28
- width: 2
28
+ fieldDecorator: (field) => translateDecorator(`concepts.status.${field}`),
29
+ width: 2,
29
30
  },
30
31
  {
31
32
  name: "rule_count",
32
33
  sort: { name: "rule_count" },
33
34
  fieldDecorator: iconDecorator,
34
35
  textAlign: "center",
35
- width: 1
36
+ width: 1,
36
37
  },
37
38
  {
38
39
  name: "link_count",
39
40
  sort: { name: "link_count" },
40
41
  fieldDecorator: iconDecorator,
41
42
  textAlign: "center",
42
- width: 1
43
+ width: 1,
43
44
  },
44
45
  {
45
46
  name: "last_change_at",
46
47
  sort: { name: "last_change_at" },
47
48
  fieldDecorator: dateDecorator,
48
49
  textAlign: "center",
49
- width: 2
50
- }
50
+ width: 2,
51
+ },
51
52
  ];
52
53
 
53
- const getConcepts = state => state.concepts;
54
- const getColumns = state => state.conceptsColumns;
54
+ const getColumns = (state) => state.conceptsColumns;
55
55
 
56
56
  export const getConceptColumns = createSelector(
57
57
  getColumns,
58
58
  _.defaultTo(defaultConceptColumns)
59
59
  );
60
-
61
- const getConceptColumnNames = createSelector(getConceptColumns, _.map("name"));
62
-
63
- export const getConceptsRows = createSelector(
64
- getConcepts,
65
- getConceptColumnNames,
66
- (concepts, columnNames) =>
67
- _.map(_.pick([...columnNames, "id", "business_concept_id"]))(concepts)
68
- );
@@ -1,16 +1,10 @@
1
- export { getConceptsRows, getConceptColumns } from "./getConceptColumns";
2
- export { getConceptAvailableFilters } from "./getConceptAvailableFilters";
1
+ export { getConceptColumns } from "./getConceptColumns";
3
2
  export { getConceptDomainPath } from "./getConceptDomainPath";
4
- export { getConceptFilterTypes } from "./getConceptFilterTypes";
5
- export { getConceptSelectedFilters } from "./getConceptSelectedFilters";
6
- export { getConceptSelectedFilterActiveValues } from "./getConceptSelectedFilterActiveValues";
7
- export { getConceptSelectedFilterValues } from "./getConceptSelectedFilterValues";
8
3
  export {
9
4
  getConceptUploadEventColumns,
10
5
  defaultConceptsUploadEventColumns,
11
6
  } from "./getConceptUploadEventColumns";
12
7
  export { getParsedEvents } from "./getParsedEvents";
13
- export { getPreviousConceptQuery } from "./getPreviousConceptQuery";
14
8
  export { getTemplateFields } from "./getTemplateFields";
15
9
  export { getTemplateGroups } from "./getTemplateGroups";
16
10
  export * from "../relations/selectors";
@@ -1,7 +1,8 @@
1
- export const translations = formatMessage => ({
2
- status: v => formatMessage({ id: `concepts.status.${v}`, defaultMessage: v }),
3
- rule_count: v =>
1
+ export const translations = (formatMessage) => ({
2
+ status: (v) =>
3
+ formatMessage({ id: `concepts.status.${v}`, defaultMessage: v }),
4
+ rule_count: (v) =>
4
5
  formatMessage({ id: `concepts.rule_count.${v}`, defaultMessage: v }),
5
- link_count: v =>
6
- formatMessage({ id: `concepts.link_count.${v}`, defaultMessage: v })
6
+ link_count: (v) =>
7
+ formatMessage({ id: `concepts.link_count.${v}`, defaultMessage: v }),
7
8
  });
@@ -1,20 +0,0 @@
1
- import { bindActionCreators } from "redux";
2
- import { connect } from "react-redux";
3
- import { AvailableFilters } from "@truedat/core/components";
4
- import { addConceptFilter, resetConceptFilters } from "../routines";
5
- import { getConceptAvailableFilters } from "../selectors";
6
-
7
- const mapStateToProps = (state) => ({
8
- filters: getConceptAvailableFilters(state),
9
- disabled: state.conceptFiltersLoading,
10
- loading: state.conceptFiltersLoading,
11
- filtersGroup: state.conceptFiltersGroup || [],
12
- });
13
-
14
- const mapDispatchToProps = (dispatch) =>
15
- bindActionCreators(
16
- { addFilter: addConceptFilter, resetFilters: resetConceptFilters },
17
- dispatch
18
- );
19
-
20
- export default connect(mapStateToProps, mapDispatchToProps)(AvailableFilters);
@@ -1,27 +0,0 @@
1
- import { connect } from "react-redux";
2
- import { bindActionCreators } from "redux";
3
- import { FiltersLoader } from "@truedat/core/components";
4
- import { makeActiveFiltersSelector } from "@truedat/core/selectors";
5
- import { clearConceptFilters, fetchConceptFilters } from "../routines";
6
-
7
- const EMPTY = {};
8
-
9
- const mapDispatchToProps = (dispatch) =>
10
- bindActionCreators(
11
- { clearFilters: clearConceptFilters, fetchFilters: fetchConceptFilters },
12
- dispatch
13
- );
14
-
15
- const makeMapStateToProps = () => {
16
- const activeFiltersSelector = makeActiveFiltersSelector(
17
- "conceptActiveFilters"
18
- );
19
- const mapStateToProps = (state, props) => ({
20
- selectedFilter: state.conceptSelectedFilter,
21
- filters: activeFiltersSelector(state, props),
22
- defaultFilters: props?.defaultFilters || EMPTY,
23
- });
24
- return mapStateToProps;
25
- };
26
-
27
- export default connect(makeMapStateToProps, mapDispatchToProps)(FiltersLoader);
@@ -1,29 +0,0 @@
1
- import React from "react";
2
- import { Route, Switch } from "react-router-dom";
3
- import {
4
- CONCEPTS,
5
- CONCEPTS_PENDING,
6
- DOMAIN_CONCEPTS,
7
- } from "@truedat/core/routes";
8
- import ConceptSelectedFiltersDefault from "./ConceptSelectedFiltersDefault";
9
- import ConceptSelectedFiltersPending from "./ConceptSelectedFiltersPending";
10
- import ConceptSelectedFiltersPublished from "./ConceptSelectedFiltersPublished";
11
-
12
- export const ConceptSelectedFilters = () => (
13
- <Switch>
14
- <Route
15
- exact
16
- path={DOMAIN_CONCEPTS}
17
- component={ConceptSelectedFiltersPublished}
18
- />
19
- <Route exact path={CONCEPTS} component={ConceptSelectedFiltersPublished} />
20
- <Route
21
- exact
22
- path={CONCEPTS_PENDING}
23
- component={ConceptSelectedFiltersPending}
24
- />
25
- <Route component={ConceptSelectedFiltersDefault} />
26
- </Switch>
27
- );
28
-
29
- export default ConceptSelectedFilters;
@@ -1,42 +0,0 @@
1
- import { injectIntl } from "react-intl";
2
- import { bindActionCreators, compose } from "redux";
3
- import { connect } from "react-redux";
4
- import { SelectedFilters } from "@truedat/core/components";
5
- import {
6
- applyConceptUserFilter,
7
- deleteConceptUserFilter,
8
- saveConceptFilters,
9
- closeConceptFilter,
10
- openConceptFilter,
11
- removeConceptFilter,
12
- resetConceptFilters,
13
- toggleConceptFilterValue,
14
- } from "../routines";
15
- import { mapSelectedFilterStateToPropsByStatus } from "../selectors/mapSelectedFilterStateToPropsByStatus";
16
-
17
- const mapStateToProps = mapSelectedFilterStateToPropsByStatus([
18
- "draft",
19
- "pending_approval",
20
- "published",
21
- "rejected",
22
- ]);
23
-
24
- const mapDispatchToProps = (dispatch) =>
25
- bindActionCreators(
26
- {
27
- applyUserFilter: applyConceptUserFilter,
28
- deleteUserFilter: deleteConceptUserFilter,
29
- saveFilters: saveConceptFilters,
30
- closeFilter: closeConceptFilter,
31
- openFilter: openConceptFilter,
32
- removeFilter: removeConceptFilter,
33
- resetFilters: resetConceptFilters,
34
- toggleFilterValue: toggleConceptFilterValue,
35
- },
36
- dispatch
37
- );
38
-
39
- export default compose(
40
- injectIntl,
41
- connect(mapStateToProps, mapDispatchToProps)
42
- )(SelectedFilters);
@@ -1,41 +0,0 @@
1
- import { injectIntl } from "react-intl";
2
- import { bindActionCreators, compose } from "redux";
3
- import { connect } from "react-redux";
4
- import { SelectedFilters } from "@truedat/core/components";
5
- import {
6
- applyConceptUserFilter,
7
- closeConceptFilter,
8
- deleteConceptUserFilter,
9
- openConceptFilter,
10
- removeConceptFilter,
11
- resetConceptFilters,
12
- saveConceptFilters,
13
- toggleConceptFilterValue,
14
- } from "../routines";
15
- import { mapSelectedFilterStateToPropsByStatus } from "../selectors/mapSelectedFilterStateToPropsByStatus";
16
-
17
- const mapStateToProps = mapSelectedFilterStateToPropsByStatus([
18
- "draft",
19
- "pending_approval",
20
- "rejected",
21
- ]);
22
-
23
- const mapDispatchToProps = (dispatch) =>
24
- bindActionCreators(
25
- {
26
- applyUserFilter: applyConceptUserFilter,
27
- closeFilter: closeConceptFilter,
28
- deleteUserFilter: deleteConceptUserFilter,
29
- openFilter: openConceptFilter,
30
- removeFilter: removeConceptFilter,
31
- resetFilters: resetConceptFilters,
32
- saveFilters: saveConceptFilters,
33
- toggleFilterValue: toggleConceptFilterValue,
34
- },
35
- dispatch
36
- );
37
-
38
- export default compose(
39
- injectIntl,
40
- connect(mapStateToProps, mapDispatchToProps)
41
- )(SelectedFilters);
@@ -1,73 +0,0 @@
1
- import _ from "lodash/fp";
2
- import { bindActionCreators, compose } from "redux";
3
- import { connect } from "react-redux";
4
- import { injectIntl } from "react-intl";
5
- import { SelectedFilters } from "@truedat/core/components";
6
- import { makeOption } from "@truedat/core/services/i18n";
7
- import {
8
- applyConceptUserFilter,
9
- closeConceptFilter,
10
- deleteConceptUserFilter,
11
- openConceptFilter,
12
- removeConceptFilter,
13
- resetConceptFilters,
14
- saveConceptFilters,
15
- toggleConceptFilterValue,
16
- } from "../routines";
17
- import {
18
- getConceptSelectedFilterActiveValues,
19
- getConceptSelectedFilters,
20
- getConceptSelectedFilterValues,
21
- getConceptFilterTypes,
22
- } from "../selectors";
23
- import { translations } from "../utils/filterOptions";
24
-
25
- export const mapStateToProps = (state, ownProps) => {
26
- const formatMessage = _.pathOr(_.prop("id"), "intl.formatMessage")(ownProps);
27
- const {
28
- conceptSelectedFilter: selectedFilter,
29
- conceptSelectedUserFilter: selectedUserFilter,
30
- conceptActiveFilters: activeFilters,
31
- conceptUserFilters: userFilters,
32
- conceptFiltersLoading: loading,
33
- } = state;
34
- const selectedFilterValues = getConceptSelectedFilterValues(state);
35
- const selectedFilterActiveValues =
36
- getConceptSelectedFilterActiveValues(state);
37
- return {
38
- activeFilters,
39
- loading,
40
- filterTypes: getConceptFilterTypes(state),
41
- selectedFilter,
42
- selectedFilters: _.flow(
43
- getConceptSelectedFilters,
44
- _.without(["status"])
45
- )(state),
46
- selectedFilterActiveValues,
47
- selectedFilterValues: _.map(
48
- makeOption(translations(formatMessage), selectedFilter)
49
- )(selectedFilterValues),
50
- selectedUserFilter,
51
- userFilters,
52
- };
53
- };
54
-
55
- const mapDispatchToProps = (dispatch) =>
56
- bindActionCreators(
57
- {
58
- applyUserFilter: applyConceptUserFilter,
59
- closeFilter: closeConceptFilter,
60
- deleteUserFilter: deleteConceptUserFilter,
61
- openFilter: openConceptFilter,
62
- removeFilter: removeConceptFilter,
63
- resetFilters: resetConceptFilters,
64
- saveFilters: saveConceptFilters,
65
- toggleFilterValue: toggleConceptFilterValue,
66
- },
67
- dispatch
68
- );
69
-
70
- export default compose(
71
- injectIntl,
72
- connect(mapStateToProps, mapDispatchToProps)
73
- )(SelectedFilters);
@@ -1,27 +0,0 @@
1
- import { useEffect } from "react";
2
- import PropTypes from "prop-types";
3
- import { connect } from "react-redux";
4
- import { clearConceptUserFilters, fetchConceptUserFilters } from "../routines";
5
-
6
- export const ConceptUserFiltersLoader = ({
7
- clearConceptUserFilters,
8
- fetchConceptUserFilters,
9
- }) => {
10
- useEffect(() => {
11
- fetchConceptUserFilters();
12
- return () => {
13
- clearConceptUserFilters();
14
- };
15
- }, [clearConceptUserFilters, fetchConceptUserFilters]);
16
- return null;
17
- };
18
-
19
- ConceptUserFiltersLoader.propTypes = {
20
- clearConceptUserFilters: PropTypes.func,
21
- fetchConceptUserFilters: PropTypes.func,
22
- };
23
-
24
- export default connect(null, {
25
- clearConceptUserFilters,
26
- fetchConceptUserFilters,
27
- })(ConceptUserFiltersLoader);
@@ -1,38 +0,0 @@
1
- import { useEffect } from "react";
2
- import PropTypes from "prop-types";
3
- import { connect } from "react-redux";
4
- import { makeSearchQuerySelector } from "@truedat/core/selectors";
5
- import { clearConcepts, fetchConcepts } from "../routines";
6
-
7
- export const ConceptsLoader = ({ clearConcepts, fetchConcepts, payload }) => {
8
- useEffect(() => {
9
- return () => {
10
- clearConcepts();
11
- };
12
- }, [clearConcepts]);
13
- useEffect(() => {
14
- fetchConcepts(payload);
15
- }, [payload, fetchConcepts]);
16
- return null;
17
- };
18
-
19
- ConceptsLoader.propTypes = {
20
- clearConcepts: PropTypes.func,
21
- fetchConcepts: PropTypes.func,
22
- payload: PropTypes.object,
23
- };
24
-
25
- const makeMapStateToProps = () => {
26
- const searchQuerySelector = makeSearchQuerySelector(
27
- "conceptQuery",
28
- "conceptActiveFilters"
29
- );
30
- const mapStateToProps = (state, props) => ({
31
- payload: searchQuerySelector(state, props),
32
- });
33
- return mapStateToProps;
34
- };
35
-
36
- export default connect(makeMapStateToProps, { clearConcepts, fetchConcepts })(
37
- ConceptsLoader
38
- );
@@ -1,32 +0,0 @@
1
- import React from "react";
2
- import PropTypes from "prop-types";
3
- import { connect } from "react-redux";
4
- import { Input } from "semantic-ui-react";
5
- import { useIntl } from "react-intl";
6
- import { searchConcepts } from "../routines";
7
- import ConceptFilters from "./ConceptFilters";
8
-
9
- const ConceptsSearch = ({ query, searchConcepts, loading }) => {
10
- const { formatMessage } = useIntl();
11
- return (
12
- <Input
13
- value={query}
14
- onChange={(_e, data) => searchConcepts({ query: data.value })}
15
- icon={{ name: "search", link: true }}
16
- iconPosition="left"
17
- action={<ConceptFilters />}
18
- placeholder={formatMessage({ id: "concepts.search.placeholder" })}
19
- loading={loading}
20
- />
21
- );
22
- };
23
-
24
- ConceptsSearch.propTypes = {
25
- query: PropTypes.string,
26
- searchConcepts: PropTypes.func,
27
- loading: PropTypes.bool,
28
- };
29
-
30
- const mapStateToProps = ({ conceptQuery }) => ({ query: conceptQuery?.query });
31
-
32
- export default connect(mapStateToProps, { searchConcepts })(ConceptsSearch);
@@ -1,19 +0,0 @@
1
- import React from "react";
2
- import { render } from "@truedat/test/render";
3
- import ConceptFilters from "../ConceptFilters";
4
-
5
- const state = {
6
- conceptFilters: {
7
- domain_id: { values: [1, 2] },
8
- confidential: { values: ["yes", "no"] },
9
- },
10
- conceptActiveFilters: { domain_id: [1] },
11
- };
12
- const renderOpts = { state };
13
-
14
- describe("<ConceptFilters />", () => {
15
- it("matches the latest snapshot", () => {
16
- const { container } = render(<ConceptFilters />, renderOpts);
17
- expect(container).toMatchSnapshot();
18
- });
19
- });
@@ -1,10 +0,0 @@
1
- import React from "react";
2
- import { render } from "@truedat/test/render";
3
- import { ConceptSelectedFilters } from "../ConceptSelectedFilters";
4
-
5
- describe("<ConceptSelectedFilters />", () => {
6
- it("matches the latest snapshot", () => {
7
- const { container } = render(<ConceptSelectedFilters />);
8
- expect(container).toMatchSnapshot();
9
- });
10
- });
@@ -1,27 +0,0 @@
1
- import React from "react";
2
- import { shallow, mount } from "enzyme";
3
- import { ConceptUserFiltersLoader } from "../ConceptUserFiltersLoader";
4
-
5
- describe("<ConceptUserFiltersLoader />", () => {
6
- const fetchConceptUserFilters = jest.fn();
7
- const clearConceptUserFilters = jest.fn();
8
-
9
- it("matches the latest snapshot", () => {
10
- const props = { clearConceptUserFilters, fetchConceptUserFilters };
11
- const wrapper = shallow(<ConceptUserFiltersLoader {...props} />);
12
- expect(wrapper).toMatchSnapshot();
13
- });
14
-
15
- it("calls fetchConceptUserFilters when component mounts, clearConceptUserFilters when component unmounts", () => {
16
- const fetchConceptUserFilters = jest.fn();
17
- const clearConceptUserFilters = jest.fn();
18
-
19
- const props = { fetchConceptUserFilters, clearConceptUserFilters };
20
- const wrapper = mount(<ConceptUserFiltersLoader {...props} />);
21
- expect(clearConceptUserFilters.mock.calls.length).toBe(0);
22
- expect(fetchConceptUserFilters.mock.calls.length).toBe(1);
23
- wrapper.unmount();
24
- expect(clearConceptUserFilters.mock.calls.length).toBe(1);
25
- expect(fetchConceptUserFilters.mock.calls.length).toBe(1);
26
- });
27
- });
@@ -1,34 +0,0 @@
1
- import React from "react";
2
- import { mount } from "enzyme";
3
- import { ConceptsLoader } from "../ConceptsLoader";
4
-
5
- const getProps = () => ({
6
- clearConcepts: jest.fn(),
7
- conceptsLoading: false,
8
- fetchConcepts: jest.fn(),
9
- });
10
-
11
- describe("<ConceptsLoader />", () => {
12
- it("calls fetchConcepts when component mounts but not when it unmounts", () => {
13
- const props = getProps();
14
- const wrapper = mount(<ConceptsLoader {...props} />);
15
- expect(props.fetchConcepts).toHaveBeenCalledTimes(1);
16
- wrapper.unmount();
17
- expect(props.fetchConcepts).toHaveBeenCalledTimes(1);
18
- });
19
-
20
- it("calls clearConcepts when component unmounts but not when it mounts", () => {
21
- const props = getProps();
22
- const wrapper = mount(<ConceptsLoader {...props} />);
23
- expect(props.clearConcepts).toHaveBeenCalledTimes(0);
24
- wrapper.unmount();
25
- expect(props.clearConcepts).toHaveBeenCalledTimes(1);
26
- });
27
-
28
- it("merges default filters with query filters", () => {
29
- const props = getProps();
30
- const payload = { foo: "foo" };
31
- mount(<ConceptsLoader payload={payload} {...props} />);
32
- expect(props.fetchConcepts).toHaveBeenCalledWith(payload);
33
- });
34
- });
@@ -1,47 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`<ConceptFilters /> matches the latest snapshot 1`] = `
4
- <div>
5
- <div
6
- aria-expanded="false"
7
- class="ui button floating labeled scrolling dropdown icon"
8
- role="listbox"
9
- tabindex="0"
10
- >
11
- <div
12
- aria-atomic="true"
13
- aria-live="polite"
14
- class="divider text"
15
- role="alert"
16
- >
17
- Filters
18
- </div>
19
- <i
20
- aria-hidden="true"
21
- class="filter icon"
22
- />
23
- <div
24
- class="menu transition"
25
- >
26
- <div
27
- class="item"
28
- role="option"
29
- >
30
- <em>
31
- (reset all filters)
32
- </em>
33
- </div>
34
- <div
35
- class="item"
36
- role="option"
37
- >
38
- <span
39
- class="text"
40
- >
41
- confidential
42
- </span>
43
- </div>
44
- </div>
45
- </div>
46
- </div>
47
- `;
@@ -1,9 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`<ConceptSelectedFilters /> matches the latest snapshot 1`] = `
4
- <div>
5
- <div
6
- class="selectedFilters"
7
- />
8
- </div>
9
- `;
@@ -1,3 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`<ConceptUserFiltersLoader /> matches the latest snapshot 1`] = `""`;