@truedat/dd 5.15.2 → 5.16.3

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 (92) hide show
  1. package/package.json +5 -5
  2. package/src/api.js +6 -0
  3. package/src/components/GrantRequestApprovalResults.js +40 -0
  4. package/src/components/GrantRequestBulkActions.js +136 -0
  5. package/src/components/GrantRequestBulkApprovalForm.js +69 -0
  6. package/src/components/GrantRequestBulkApprovalPopup.js +43 -0
  7. package/src/components/GrantRequestBulkRoleSelector.js +41 -0
  8. package/src/components/GrantRequestRow.js +62 -0
  9. package/src/components/GrantRequestSearchFilters.js +22 -0
  10. package/src/components/GrantRequestsFiltersLoader.js +33 -0
  11. package/src/components/GrantRequestsLabelResults.js +52 -0
  12. package/src/components/GrantRequestsSearch.js +35 -0
  13. package/src/components/GrantRequestsSearchLoader.js +47 -0
  14. package/src/components/GrantRequestsSearchResults.js +156 -0
  15. package/src/components/GrantRequestsSelectedFilters.js +54 -0
  16. package/src/components/GrantRequestsTable.js +131 -0
  17. package/src/components/GrantRoutes.js +34 -16
  18. package/src/components/Grants.js +1 -0
  19. package/src/components/__tests__/GrantRequestApprovalResults.spec.js +30 -0
  20. package/src/components/__tests__/GrantRequestBulkActions.spec.js +31 -0
  21. package/src/components/__tests__/GrantRequestBulkApprovalForm.spec.js +54 -0
  22. package/src/components/__tests__/GrantRequestBulkApprovalPopup.spec.js +17 -0
  23. package/src/components/__tests__/GrantRequestBulkRoleSelector.spec.js +48 -0
  24. package/src/components/__tests__/GrantRequestFiltersLoader.spec.js +20 -0
  25. package/src/components/__tests__/GrantRequestRow.spec.js +95 -0
  26. package/src/components/__tests__/GrantRequestSearchFilters.spec.js +19 -0
  27. package/src/components/__tests__/GrantRequestsLabelResults.spec.js +45 -0
  28. package/src/components/__tests__/GrantRequestsSearch.spec.js +23 -0
  29. package/src/components/__tests__/GrantRequestsSearchLoader.spec.js +15 -0
  30. package/src/components/__tests__/GrantRequestsSearchResults.spec.js +59 -0
  31. package/src/components/__tests__/GrantRequestsTable.spec.js +35 -0
  32. package/src/components/__tests__/__snapshots__/GrantRequestApprovalResults.spec.js.snap +69 -0
  33. package/src/components/__tests__/__snapshots__/GrantRequestBulkActions.spec.js.snap +51 -0
  34. package/src/components/__tests__/__snapshots__/GrantRequestBulkApprovalForm.spec.js.snap +41 -0
  35. package/src/components/__tests__/__snapshots__/GrantRequestBulkApprovalPopup.spec.js.snap +11 -0
  36. package/src/components/__tests__/__snapshots__/GrantRequestBulkRoleSelector.spec.js.snap +56 -0
  37. package/src/components/__tests__/__snapshots__/GrantRequestRow.spec.js.snap +55 -0
  38. package/src/components/__tests__/__snapshots__/GrantRequestSearchFilters.spec.js.snap +47 -0
  39. package/src/components/__tests__/__snapshots__/GrantRequestsLabelResults.spec.js.snap +36 -0
  40. package/src/components/__tests__/__snapshots__/GrantRequestsSearch.spec.js.snap +50 -0
  41. package/src/components/__tests__/__snapshots__/GrantRequestsSearchLoader.spec.js.snap +3 -0
  42. package/src/components/__tests__/__snapshots__/GrantRequestsSearchResults.spec.js.snap +248 -0
  43. package/src/components/__tests__/__snapshots__/GrantRequestsTable.spec.js.snap +19 -0
  44. package/src/components/__tests__/__snapshots__/GrantRoutes.spec.js.snap +0 -4
  45. package/src/components/index.js +8 -0
  46. package/src/hooks/useGrantRequest.js +9 -0
  47. package/src/reducers/__tests__/grantRequestCount.spec.js +38 -0
  48. package/src/reducers/__tests__/grantRequestPermissions.spec.js +66 -0
  49. package/src/reducers/__tests__/grantRequestsActiveFilters.spec.js +90 -0
  50. package/src/reducers/__tests__/grantRequestsFiltersLoading.spec.js +34 -0
  51. package/src/reducers/__tests__/grantRequestsSearch.spec.js +38 -0
  52. package/src/reducers/__tests__/grantRequestsSearchLoading.spec.js +36 -0
  53. package/src/reducers/__tests__/grantRequestsSearchQuery.spec.js +96 -0
  54. package/src/reducers/__tests__/grantRequestsSelectedFilter.spec.js +72 -0
  55. package/src/reducers/grantRequestCount.js +23 -0
  56. package/src/reducers/grantRequestPermissions.js +31 -0
  57. package/src/reducers/grantRequestSearchQuery.js +55 -0
  58. package/src/reducers/grantRequestsActiveFilters.js +56 -0
  59. package/src/reducers/grantRequestsFilters.js +23 -0
  60. package/src/reducers/grantRequestsFiltersLoading.js +14 -0
  61. package/src/reducers/grantRequestsSearch.js +19 -0
  62. package/src/reducers/grantRequestsSearchLoading.js +14 -0
  63. package/src/reducers/grantRequestsSelectedFilter.js +34 -0
  64. package/src/reducers/graphLoading.js +2 -0
  65. package/src/reducers/index.js +22 -0
  66. package/src/reducers/structureRedirect.js +2 -3
  67. package/src/routines.js +13 -0
  68. package/src/sagas/__tests__/createGraph.spec.js +4 -4
  69. package/src/sagas/__tests__/fetchGrantRequestsFilters.spec.js +91 -0
  70. package/src/sagas/__tests__/fetchGrantRequestsSearch.spec.js +92 -0
  71. package/src/sagas/createGraph.js +7 -71
  72. package/src/sagas/fetchGrantRequestsFilters.js +32 -0
  73. package/src/sagas/fetchGrantRequestsSearch.js +30 -0
  74. package/src/sagas/fetchGraph.js +26 -4
  75. package/src/sagas/graph/polling.js +70 -0
  76. package/src/sagas/index.js +6 -0
  77. package/src/selectors/__tests__/getGrantRequestsAvailableFilters.spec.js +15 -0
  78. package/src/selectors/__tests__/getGrantRequestsFilterTypes.spec.js +19 -0
  79. package/src/selectors/__tests__/getGrantRequestsSearchColumns.spec.js +30 -0
  80. package/src/selectors/__tests__/getGrantRequestsSearchQuery.spec.js +24 -0
  81. package/src/selectors/__tests__/getGrantRequestsSelectedFilterActiveValues.spec.js +15 -0
  82. package/src/selectors/__tests__/getGrantRequestsSelectedFilterValues.spec.js +15 -0
  83. package/src/selectors/__tests__/getGrantRequestsSelectedFilters.spec.js +13 -0
  84. package/src/selectors/getGrantRequestsAvailableFilters.js +17 -0
  85. package/src/selectors/getGrantRequestsFilterTypes.js +7 -0
  86. package/src/selectors/getGrantRequestsSearchColumns.js +119 -0
  87. package/src/selectors/getGrantRequestsSearchQuery.js +19 -0
  88. package/src/selectors/getGrantRequestsSelectedFilterActiveValues.js +8 -0
  89. package/src/selectors/getGrantRequestsSelectedFilterValues.js +12 -0
  90. package/src/selectors/getGrantRequestsSelectedFilters.js +8 -0
  91. package/src/selectors/index.js +10 -0
  92. package/src/components/GrantRequestApprovals.js +0 -41
@@ -0,0 +1,119 @@
1
+ import _ from "lodash/fp";
2
+ import React from "react";
3
+ import { Header, Icon, Popup } from "semantic-ui-react";
4
+ import { createSelector } from "reselect";
5
+ import { useIntl } from "react-intl";
6
+ import PropTypes from "prop-types";
7
+ import Moment from "react-moment";
8
+
9
+ export const UserDecorator = ({ user }) => {
10
+ return user ? (
11
+ <Header as="h4">
12
+ <Header.Content>{user.full_name}</Header.Content>
13
+ </Header>
14
+ ) : (
15
+ "null"
16
+ );
17
+ };
18
+
19
+ UserDecorator.propTypes = {
20
+ user: PropTypes.object,
21
+ };
22
+
23
+ export const PathDecorator = ({ data_structure_version }) => {
24
+ const path = _.flow(_.prop("path"), _.join(" › "))(data_structure_version);
25
+ return <>{path}</>;
26
+ };
27
+
28
+ PathDecorator.propTypes = {
29
+ data_structure: PropTypes.object,
30
+ };
31
+
32
+ export const StructureDecorator = ({ name, modificationGrant }) => {
33
+ const { formatMessage } = useIntl();
34
+ return (
35
+ <>
36
+ {modificationGrant ? (
37
+ <Popup
38
+ content={formatMessage({ id: "grantRequest.modification_grant_id" })}
39
+ trigger={<Icon name="edit" />}
40
+ />
41
+ ) : null}
42
+ {name}
43
+ </>
44
+ );
45
+ };
46
+
47
+ StructureDecorator.propTypes = {
48
+ name: PropTypes.string,
49
+ modificationGrant: PropTypes.string,
50
+ };
51
+
52
+ const DateDecorator = ({ date }) => {
53
+ const { locale } = useIntl();
54
+ return date ? (
55
+ <Moment locale={locale} date={date} format="YYYY-MM-DD HH:mm" />
56
+ ) : null;
57
+ };
58
+
59
+ DateDecorator.propTypes = {
60
+ date: PropTypes.string,
61
+ };
62
+
63
+ const StatusDecorator = ({ status }) => {
64
+ const { formatMessage } = useIntl();
65
+ return status ? (
66
+ <>{formatMessage({ id: `grantRequest.content.${status}` })}</>
67
+ ) : null;
68
+ };
69
+
70
+ StatusDecorator.propTypes = {
71
+ status: PropTypes.string,
72
+ };
73
+
74
+ export const defaultGrantRequestsSearchTableColumns = [
75
+ {
76
+ name: "user",
77
+ sort: { name: "user.user_name" },
78
+ fieldSelector: (grantRequest) => ({
79
+ user: grantRequest?.user,
80
+ }),
81
+ fieldDecorator: UserDecorator,
82
+ },
83
+ {
84
+ name: "data_structure",
85
+ sort: { name: "data_structure_version.name.raw" },
86
+ fieldSelector: (grantRequest) => ({
87
+ name: grantRequest?.data_structure_version?.name,
88
+ modificationGrant: _.prop("modification_grant_id")(grantRequest),
89
+ }),
90
+ fieldDecorator: StructureDecorator,
91
+ },
92
+ {
93
+ name: "path",
94
+ fieldSelector: (grantRequest) => ({
95
+ data_structure_version: grantRequest?.data_structure_version,
96
+ }),
97
+ fieldDecorator: PathDecorator,
98
+ },
99
+ {
100
+ name: "inserted_at",
101
+ sort: { name: "inserted_at" },
102
+ fieldSelector: (grantRequest) => ({
103
+ date: grantRequest?.inserted_at,
104
+ }),
105
+ fieldDecorator: DateDecorator,
106
+ textAlign: "center",
107
+ width: 2,
108
+ },
109
+ ];
110
+
111
+ export const getGrantRequestsSearchColumns = createSelector(
112
+ [_.prop("grantRequestsSearchColumns")],
113
+ (grantRequestsSearchColumns) => {
114
+ return _.flow(
115
+ _.defaultTo(defaultGrantRequestsSearchTableColumns),
116
+ _.reject({ name: "status" })
117
+ )(grantRequestsSearchColumns);
118
+ }
119
+ );
@@ -0,0 +1,19 @@
1
+ import _ from "lodash/fp";
2
+ import { createSelector } from "reselect";
3
+
4
+ export const getGrantRequestsSearchQuery = createSelector(
5
+ _.prop("grantRequestSearchQuery"),
6
+ _.prop("grantRequestsActiveFilters"),
7
+ _.prop("grantRequestsDefaultFilters"),
8
+ (grantRequestQuery, grantRequestsActiveFilters, defaultFilters) => {
9
+ const query = _.trim(grantRequestQuery?.query);
10
+ const filters = _.omitBy(_.isEmpty)(grantRequestsActiveFilters);
11
+ const filtersWithDefaults = {
12
+ ...defaultFilters,
13
+ ...filters,
14
+ };
15
+ return query
16
+ ? { filters: filtersWithDefaults, query }
17
+ : { filters: filtersWithDefaults };
18
+ }
19
+ );
@@ -0,0 +1,8 @@
1
+ import _ from "lodash/fp";
2
+ import { createSelector } from "reselect";
3
+
4
+ export const getGrantRequestsSelectedFilterActiveValues = createSelector(
5
+ [_.prop("grantRequestsSelectedFilter"), _.prop("grantRequestsActiveFilters")],
6
+ (grantRequestsSelectedFilter, grantRequestsActiveFilters) =>
7
+ _.propOr([], grantRequestsSelectedFilter)(grantRequestsActiveFilters)
8
+ );
@@ -0,0 +1,12 @@
1
+ import _ from "lodash/fp";
2
+ import { createSelector } from "reselect";
3
+ import { formatFilterValues } from "@truedat/core/services/filters";
4
+
5
+ export const getGrantRequestsSelectedFilterValues = createSelector(
6
+ [_.prop("grantRequestsSelectedFilter"), _.prop("grantRequestsFilters")],
7
+ (grantRequestsSelectedFilter, grantRequestsFilters) =>
8
+ _.flow(
9
+ _.propOr({ values: [] }, grantRequestsSelectedFilter),
10
+ formatFilterValues
11
+ )(grantRequestsFilters)
12
+ );
@@ -0,0 +1,8 @@
1
+ import _ from "lodash/fp";
2
+ import { createSelector } from "reselect";
3
+
4
+ export const getGrantRequestsSelectedFilters = createSelector(
5
+ [_.prop("grantRequestsActiveFilters")],
6
+ (grantRequestsActiveFilters) =>
7
+ _.without(["must_not_approved_by"])(_.keys(grantRequestsActiveFilters))
8
+ );
@@ -3,6 +3,16 @@ export {
3
3
  structureColumnsSelector,
4
4
  structureRowsSelector,
5
5
  } from "./structureColumnsSelector";
6
+ export { getGrantRequestsSelectedFilterActiveValues } from "./getGrantRequestsSelectedFilterActiveValues";
7
+ export { getGrantRequestsFilterTypes } from "./getGrantRequestsFilterTypes";
8
+ export { getGrantRequestsSelectedFilterValues } from "./getGrantRequestsSelectedFilterValues";
9
+ export { getGrantRequestsSelectedFilters } from "./getGrantRequestsSelectedFilters";
10
+ export {
11
+ getGrantRequestsSearchColumns,
12
+ defaultGrantRequestsSearchTableColumns,
13
+ } from "./getGrantRequestsSearchColumns";
14
+ export { getGrantRequestsSearchQuery } from "./getGrantRequestsSearchQuery";
15
+ export { getGrantRequestsAvailableFilters } from "./getGrantRequestsAvailableFilters";
6
16
  export { getGrantAvailableFilters } from "./getGrantAvailableFilters";
7
17
  export { getGrantSelectedFilters } from "./getGrantSelectedFilters";
8
18
  export { getGrantFilterTypes } from "./getGrantFilterTypes";
@@ -1,41 +0,0 @@
1
- import React from "react";
2
- import { connect } from "react-redux";
3
- import PropTypes from "prop-types";
4
- import { useIntl } from "react-intl";
5
- import { Header, Icon, Segment } from "semantic-ui-react";
6
- import {
7
- getGrantRequests,
8
- getGrantRequestsApprovalColumns
9
- } from "../selectors";
10
- import GrantRequests from "./GrantRequests";
11
-
12
- export const GrantRequestApprovals = ({ columns, grantRequests }) => {
13
- const { formatMessage } = useIntl();
14
-
15
- return (
16
- <Segment>
17
- <Header as="h2">
18
- <Icon circular name="key" />
19
- <Header.Content>
20
- {formatMessage({ id: "grantRequests.header.approve" })}
21
- <Header.Subheader>
22
- {formatMessage({ id: "grantRequests.subheader.approve" })}
23
- </Header.Subheader>
24
- </Header.Content>
25
- </Header>
26
- <GrantRequests columns={columns} grantRequests={grantRequests} />
27
- </Segment>
28
- );
29
- };
30
-
31
- const mapStateToProps = state => ({
32
- columns: getGrantRequestsApprovalColumns(state),
33
- grantRequests: getGrantRequests(state)
34
- });
35
-
36
- GrantRequestApprovals.propTypes = {
37
- columns: PropTypes.array,
38
- grantRequests: PropTypes.array
39
- };
40
-
41
- export default connect(mapStateToProps)(GrantRequestApprovals);