@truedat/dd 5.16.2 → 5.16.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 (87) 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 +247 -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 +36 -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/index.js +22 -0
  65. package/src/reducers/structureRedirect.js +2 -3
  66. package/src/routines.js +13 -0
  67. package/src/sagas/__tests__/fetchGrantRequestsFilters.spec.js +91 -0
  68. package/src/sagas/__tests__/fetchGrantRequestsSearch.spec.js +92 -0
  69. package/src/sagas/fetchGrantRequestsFilters.js +32 -0
  70. package/src/sagas/fetchGrantRequestsSearch.js +30 -0
  71. package/src/sagas/index.js +6 -0
  72. package/src/selectors/__tests__/getGrantRequestsAvailableFilters.spec.js +15 -0
  73. package/src/selectors/__tests__/getGrantRequestsFilterTypes.spec.js +19 -0
  74. package/src/selectors/__tests__/getGrantRequestsSearchColumns.spec.js +30 -0
  75. package/src/selectors/__tests__/getGrantRequestsSearchQuery.spec.js +24 -0
  76. package/src/selectors/__tests__/getGrantRequestsSelectedFilterActiveValues.spec.js +15 -0
  77. package/src/selectors/__tests__/getGrantRequestsSelectedFilterValues.spec.js +15 -0
  78. package/src/selectors/__tests__/getGrantRequestsSelectedFilters.spec.js +13 -0
  79. package/src/selectors/getGrantRequestsAvailableFilters.js +17 -0
  80. package/src/selectors/getGrantRequestsFilterTypes.js +7 -0
  81. package/src/selectors/getGrantRequestsSearchColumns.js +119 -0
  82. package/src/selectors/getGrantRequestsSearchQuery.js +19 -0
  83. package/src/selectors/getGrantRequestsSelectedFilterActiveValues.js +8 -0
  84. package/src/selectors/getGrantRequestsSelectedFilterValues.js +12 -0
  85. package/src/selectors/getGrantRequestsSelectedFilters.js +8 -0
  86. package/src/selectors/index.js +10 -0
  87. package/src/components/GrantRequestApprovals.js +0 -41
@@ -0,0 +1,96 @@
1
+ import {
2
+ clearGrantRequestsFilters,
3
+ removeGrantRequestsFilter,
4
+ searchGrantRequests,
5
+ sortGrantRequests,
6
+ toggleGrantRequestsFilterValue,
7
+ clearGrantRequestsSort,
8
+ } from "../../routines";
9
+ import { grantRequestSearchQuery } from "..";
10
+
11
+ const fooState = { foo: "bar" };
12
+
13
+ describe("reducers: grantRequestSearchQuery", () => {
14
+ const defaultPage = 1;
15
+ const query = "";
16
+ const sort = [{ inserted_at: "asc" }];
17
+ const page = 1;
18
+ const size = 1000;
19
+
20
+ const initialState = { query, sort, page, size };
21
+
22
+ it("should provide the initialState", () => {
23
+ expect(grantRequestSearchQuery(undefined, {})).toEqual(initialState);
24
+ });
25
+
26
+ it("should handle the clearGrantRequestsFilters.TRIGGER action", () => {
27
+ expect(
28
+ grantRequestSearchQuery(fooState, {
29
+ type: clearGrantRequestsFilters.TRIGGER,
30
+ payload: { ...fooState, page },
31
+ })
32
+ ).toEqual({
33
+ ...fooState,
34
+ page,
35
+ });
36
+ });
37
+
38
+ it("should handle the removeGrantRequestsFilter.TRIGGER action", () => {
39
+ expect(
40
+ grantRequestSearchQuery(fooState, {
41
+ type: removeGrantRequestsFilter.TRIGGER,
42
+ payload: { ...fooState, page },
43
+ })
44
+ ).toEqual({
45
+ ...fooState,
46
+ page,
47
+ });
48
+ });
49
+
50
+ it("should handle the searchGrantRequests.TRIGGER action", () => {
51
+ expect(
52
+ grantRequestSearchQuery(fooState, {
53
+ type: searchGrantRequests.TRIGGER,
54
+ payload: { ...fooState, page },
55
+ })
56
+ ).toEqual({
57
+ ...fooState,
58
+ query,
59
+ page,
60
+ sort,
61
+ });
62
+ });
63
+
64
+ it("should handle the sortGrantRequests.TRIGGER action", () => {
65
+ expect(
66
+ grantRequestSearchQuery(fooState, {
67
+ type: sortGrantRequests.TRIGGER,
68
+ payload: { ...fooState, page },
69
+ })
70
+ ).toEqual({ ...fooState, sort: { ...fooState, page }, page: defaultPage });
71
+ });
72
+
73
+ it("should handle the toggleGrantRequestsFilterValue.TRIGGER action", () => {
74
+ expect(
75
+ grantRequestSearchQuery(fooState, {
76
+ type: toggleGrantRequestsFilterValue.TRIGGER,
77
+ payload: { ...fooState, page },
78
+ })
79
+ ).toEqual({
80
+ ...fooState,
81
+ page,
82
+ });
83
+ });
84
+
85
+ it("should handle the clearGrantRequestsSort.TRIGGER action", () => {
86
+ expect(
87
+ grantRequestSearchQuery(fooState, {
88
+ type: clearGrantRequestsSort.TRIGGER,
89
+ payload: { ...fooState, page },
90
+ })
91
+ ).toEqual({
92
+ ...fooState,
93
+ sort,
94
+ });
95
+ });
96
+ });
@@ -0,0 +1,72 @@
1
+ import { initialState } from "../grantRequestsSelectedFilter";
2
+ import {
3
+ addGrantRequestsFilter,
4
+ closeGrantRequestsFilter,
5
+ openGrantRequestsFilter,
6
+ removeGrantRequestsFilter,
7
+ resetGrantRequestsFilters,
8
+ } from "../../routines";
9
+ import { grantRequestsSelectedFilter } from "..";
10
+
11
+ const fooState = { foo: "bar" };
12
+
13
+ describe("reducers: grantRequestsSelectedFilter", () => {
14
+ it("should provide the initial state", () => {
15
+ expect(grantRequestsSelectedFilter(undefined, {})).toEqual(initialState);
16
+ });
17
+
18
+ it("should handle the addGrantRequestsFilter.TRIGGER action", () => {
19
+ const filter = "baz";
20
+ const payload = { filter };
21
+ expect(
22
+ grantRequestsSelectedFilter(fooState, {
23
+ type: addGrantRequestsFilter.TRIGGER,
24
+ payload,
25
+ })
26
+ ).toEqual(filter);
27
+ });
28
+
29
+ it("should handle the closeGrantRequestsFilter.TRIGGER action", () => {
30
+ expect(
31
+ grantRequestsSelectedFilter(fooState, {
32
+ type: closeGrantRequestsFilter.TRIGGER,
33
+ })
34
+ ).toEqual(initialState);
35
+ });
36
+
37
+ it("should handle the openGrantRequestsFilter.TRIGGER action", () => {
38
+ const filter = "baz";
39
+ const payload = { filter };
40
+ expect(
41
+ grantRequestsSelectedFilter(fooState, {
42
+ type: openGrantRequestsFilter.TRIGGER,
43
+ payload,
44
+ })
45
+ ).toEqual(filter);
46
+ });
47
+
48
+ it("should handle the removeGrantRequestsFilter.TRIGGER action", () => {
49
+ const filter = "baz";
50
+ const payload = { filter };
51
+ expect(
52
+ grantRequestsSelectedFilter(fooState, {
53
+ type: removeGrantRequestsFilter.TRIGGER,
54
+ payload,
55
+ })
56
+ ).toEqual(initialState);
57
+ });
58
+
59
+ it("should handle the resetGrantRequestsFilters.TRIGGER action", () => {
60
+ expect(
61
+ grantRequestsSelectedFilter(fooState, {
62
+ type: resetGrantRequestsFilters.TRIGGER,
63
+ })
64
+ ).toEqual(initialState);
65
+ });
66
+
67
+ it("should ignore unknown actions", () => {
68
+ expect(grantRequestsSelectedFilter(fooState, { type: "FOO" })).toBe(
69
+ fooState
70
+ );
71
+ });
72
+ });
@@ -0,0 +1,23 @@
1
+ import _ from "lodash/fp";
2
+ import {
3
+ fetchGrantRequestsSearch,
4
+ clearGrantRequestsSearch,
5
+ } from "../routines";
6
+
7
+ const initialState = 0;
8
+
9
+ const grantRequestCount = (state = initialState, { type, payload }) => {
10
+ switch (type) {
11
+ case clearGrantRequestsSearch.TRIGGER:
12
+ return initialState;
13
+ case fetchGrantRequestsSearch.SUCCESS: {
14
+ const headers = _.propOr({}, "headers")(payload);
15
+ const count = _.propOr("0", "x-total-count")(headers);
16
+ return parseInt(count);
17
+ }
18
+ default:
19
+ return state;
20
+ }
21
+ };
22
+
23
+ export { grantRequestCount };
@@ -0,0 +1,36 @@
1
+ import _ from "lodash/fp";
2
+ import {
3
+ clearGrantRequestsSearch,
4
+ fetchGrantRequestsSearch,
5
+ } from "../routines";
6
+
7
+ const initialState = {};
8
+
9
+ const grantRequestPermissions = (state = initialState, { type, payload }) => {
10
+ switch (type) {
11
+ case fetchGrantRequestsSearch.SUCCESS:
12
+ return _.pathOr(initialState, "data._permissions")(payload);
13
+ case clearGrantRequestsSearch.TRIGGER:
14
+ return initialState;
15
+ default:
16
+ return state;
17
+ }
18
+ };
19
+
20
+ const initialStateLoading = false;
21
+
22
+ const grantRequestPermissionsLoading = (
23
+ state = initialStateLoading,
24
+ { type }
25
+ ) => {
26
+ switch (type) {
27
+ case fetchGrantRequestsSearch.TRIGGER:
28
+ return true;
29
+ case fetchGrantRequestsSearch.FULFILL:
30
+ return false;
31
+ default:
32
+ return state;
33
+ }
34
+ };
35
+
36
+ export { grantRequestPermissions, grantRequestPermissionsLoading };
@@ -0,0 +1,55 @@
1
+ import _ from "lodash/fp";
2
+ import {
3
+ clearGrantRequestsFilters,
4
+ removeGrantRequestsFilter,
5
+ searchGrantRequests,
6
+ sortGrantRequests,
7
+ toggleGrantRequestsFilterValue,
8
+ clearGrantRequestsSort,
9
+ } from "../routines";
10
+
11
+ const defaultPage = 1;
12
+ const defaultSize = 1000;
13
+ const defaultSearchSort = [{ _score: "desc" }, { inserted_at: "asc" }];
14
+ const byInsertedSort = [{ inserted_at: "asc" }];
15
+
16
+ export const initialState = {
17
+ query: "",
18
+ page: defaultPage,
19
+ size: defaultSize,
20
+ sort: byInsertedSort,
21
+ };
22
+
23
+ export const grantRequestSearchQuery = (
24
+ state = initialState,
25
+ { type, payload }
26
+ ) => {
27
+ switch (type) {
28
+ case clearGrantRequestsFilters.TRIGGER:
29
+ const page = defaultPage;
30
+ return { ...state, page };
31
+ case removeGrantRequestsFilter.TRIGGER: {
32
+ const page = defaultPage;
33
+ return { ...state, page };
34
+ }
35
+ case toggleGrantRequestsFilterValue.TRIGGER: {
36
+ const page = defaultPage;
37
+ return { ...state, page };
38
+ }
39
+ case searchGrantRequests.TRIGGER: {
40
+ const page = defaultPage;
41
+ const query = _.propOr("", "query")(payload);
42
+ const sort = query != "" ? defaultSearchSort : byInsertedSort;
43
+ return { ...state, query, page, sort };
44
+ }
45
+ case sortGrantRequests.TRIGGER: {
46
+ const sort = payload;
47
+ return { ...state, sort, page: defaultPage };
48
+ }
49
+ case clearGrantRequestsSort.TRIGGER: {
50
+ return { ...state, sort: byInsertedSort };
51
+ }
52
+ default:
53
+ return state;
54
+ }
55
+ };
@@ -0,0 +1,56 @@
1
+ import _ from "lodash/fp";
2
+ import {
3
+ addGrantRequestsFilter,
4
+ closeGrantRequestsFilter,
5
+ removeGrantRequestsFilter,
6
+ resetGrantRequestsFilters,
7
+ toggleGrantRequestsFilterValue,
8
+ clearGrantRequestsFilters,
9
+ } from "../routines";
10
+
11
+ export const initialState = {};
12
+
13
+ export const grantRequestsActiveFilters = (
14
+ state = initialState,
15
+ { type, payload }
16
+ ) => {
17
+ switch (type) {
18
+ case clearGrantRequestsFilters.TRIGGER: {
19
+ return initialState;
20
+ }
21
+ case addGrantRequestsFilter.TRIGGER: {
22
+ const { filter } = payload;
23
+ return { ...state, [filter]: [] };
24
+ }
25
+ case closeGrantRequestsFilter.TRIGGER: {
26
+ const { filter } = payload;
27
+ const values = _.propOr([], filter)(state);
28
+ return _.isEmpty(values)
29
+ ? _.omit(filter)(state)
30
+ : { ...state, [filter]: values };
31
+ }
32
+ case removeGrantRequestsFilter.TRIGGER: {
33
+ const { filter } = payload;
34
+ return _.omit(filter)(state);
35
+ }
36
+ case resetGrantRequestsFilters.TRIGGER: {
37
+ return {
38
+ ..._.pick(["status", "must_not_approved_by"])(state),
39
+ ...initialState,
40
+ };
41
+ }
42
+ case toggleGrantRequestsFilterValue.TRIGGER: {
43
+ const { filter, value } = payload;
44
+ if (_.isArray(value)) {
45
+ return { ...state, [filter]: value };
46
+ }
47
+ const values = _.propOr([], filter)(state);
48
+ const nextValues = _.includes(value)(values)
49
+ ? _.without([value])(values)
50
+ : _.union([value])(values);
51
+ return { ...state, [filter]: nextValues };
52
+ }
53
+ default:
54
+ return state;
55
+ }
56
+ };
@@ -0,0 +1,23 @@
1
+ import _ from "lodash/fp";
2
+ import {
3
+ clearGrantRequestsFilters,
4
+ fetchGrantRequestsFilters,
5
+ } from "../routines";
6
+
7
+ const initialState = {};
8
+
9
+ const grantRequestsFilters = (state = initialState, { type, payload }) => {
10
+ switch (type) {
11
+ case clearGrantRequestsFilters.TRIGGER:
12
+ return initialState;
13
+ case fetchGrantRequestsFilters.SUCCESS:
14
+ return _.flow(
15
+ _.propOr({}, "data.data"),
16
+ _.omitBy(_.flow(_.getOr([], "values"), _.isEmpty))
17
+ )(payload);
18
+ default:
19
+ return state;
20
+ }
21
+ };
22
+
23
+ export { grantRequestsFilters };
@@ -0,0 +1,14 @@
1
+ import { fetchGrantRequestsFilters } from "../routines";
2
+
3
+ const grantRequestsFiltersLoading = (state = false, { type }) => {
4
+ switch (type) {
5
+ case fetchGrantRequestsFilters.REQUEST:
6
+ return true;
7
+ case fetchGrantRequestsFilters.FULFILL:
8
+ return false;
9
+ default:
10
+ return state;
11
+ }
12
+ };
13
+
14
+ export { grantRequestsFiltersLoading };
@@ -0,0 +1,19 @@
1
+ import {
2
+ clearGrantRequestsSearch,
3
+ fetchGrantRequestsSearch,
4
+ } from "../routines";
5
+
6
+ export const initialState = [];
7
+
8
+ const grantRequestsSearch = (state = initialState, { type, payload }) => {
9
+ switch (type) {
10
+ case clearGrantRequestsSearch.TRIGGER:
11
+ return initialState;
12
+ case fetchGrantRequestsSearch.SUCCESS:
13
+ return payload?.data?.data;
14
+ default:
15
+ return state;
16
+ }
17
+ };
18
+
19
+ export { grantRequestsSearch };
@@ -0,0 +1,14 @@
1
+ import { fetchGrantRequestsSearch } from "../routines";
2
+
3
+ export const initialState = false;
4
+
5
+ export const grantRequestsSearchLoading = (state = initialState, { type }) => {
6
+ switch (type) {
7
+ case fetchGrantRequestsSearch.TRIGGER:
8
+ return true;
9
+ case fetchGrantRequestsSearch.FULFILL:
10
+ return initialState;
11
+ default:
12
+ return state;
13
+ }
14
+ };
@@ -0,0 +1,34 @@
1
+ import {
2
+ addGrantRequestsFilter,
3
+ closeGrantRequestsFilter,
4
+ openGrantRequestsFilter,
5
+ removeGrantRequestsFilter,
6
+ resetGrantRequestsFilters,
7
+ } from "../routines";
8
+
9
+ /** @type {string} */
10
+ export const initialState = null;
11
+
12
+ export const grantRequestsSelectedFilter = (
13
+ state = initialState,
14
+ { type, payload }
15
+ ) => {
16
+ switch (type) {
17
+ case addGrantRequestsFilter.TRIGGER: {
18
+ const { filter } = payload;
19
+ return filter;
20
+ }
21
+ case closeGrantRequestsFilter.TRIGGER:
22
+ return initialState;
23
+ case openGrantRequestsFilter.TRIGGER: {
24
+ const { filter } = payload;
25
+ return filter;
26
+ }
27
+ case removeGrantRequestsFilter.TRIGGER:
28
+ return initialState;
29
+ case resetGrantRequestsFilters.TRIGGER:
30
+ return initialState;
31
+ default:
32
+ return state;
33
+ }
34
+ };
@@ -15,6 +15,18 @@ import { grantQuery } from "./grantQuery";
15
15
  import { grantRequest } from "./grantRequest";
16
16
  import { grantRequests } from "./grantRequests";
17
17
  import { grantRequestsCart } from "./grantRequestsCart";
18
+ import { grantRequestCount } from "./grantRequestCount";
19
+ import { grantRequestsSelectedFilter } from "./grantRequestsSelectedFilter";
20
+ import { grantRequestSearchQuery } from "./grantRequestSearchQuery";
21
+ import { grantRequestsActiveFilters } from "./grantRequestsActiveFilters";
22
+ import { grantRequestsFilters } from "./grantRequestsFilters";
23
+ import { grantRequestsFiltersLoading } from "./grantRequestsFiltersLoading";
24
+ import {
25
+ grantRequestPermissions,
26
+ grantRequestPermissionsLoading,
27
+ } from "./grantRequestPermissions";
28
+ import { grantRequestsSearch } from "./grantRequestsSearch";
29
+ import { grantRequestsSearchLoading } from "./grantRequestsSearchLoading";
18
30
  import { grantRequestsLoading } from "./grantRequestsLoading";
19
31
  import { grantRequestsQuery } from "./grantRequestsQuery";
20
32
  import { grantSelectedFilter } from "./grantSelectedFilter";
@@ -107,7 +119,17 @@ export {
107
119
  grantLoading,
108
120
  grantQuery,
109
121
  grantRequest,
122
+ grantRequestCount,
123
+ grantRequestsSelectedFilter,
124
+ grantRequestSearchQuery,
110
125
  grantRequests,
126
+ grantRequestsActiveFilters,
127
+ grantRequestsFilters,
128
+ grantRequestsFiltersLoading,
129
+ grantRequestPermissions,
130
+ grantRequestPermissionsLoading,
131
+ grantRequestsSearch,
132
+ grantRequestsSearchLoading,
111
133
  grantRequestsCart,
112
134
  grantRequestsLoading,
113
135
  grantRequestsQuery,
@@ -2,14 +2,13 @@ import _ from "lodash/fp";
2
2
  import { clearRedirect } from "@truedat/core/routines";
3
3
  import {
4
4
  BUCKET_VIEW_CONFIGS,
5
- GRANT_REQUEST_APPROVALS,
5
+ GRANT_REQUESTS,
6
6
  GRANT_APPROVAL_RULES,
7
7
  MY_GRANT_REQUESTS,
8
8
  REFERENCE_DATASETS,
9
9
  STRUCTURE_TAGS,
10
10
  STRUCTURE_TYPES,
11
11
  STRUCTURES,
12
- STRUCTURE_STRUCTURE_LINKS,
13
12
  linkTo,
14
13
  } from "@truedat/core/routes";
15
14
  import {
@@ -97,7 +96,7 @@ export const structureRedirect = (
97
96
  return linkTo.PROFILE_GROUP({ id });
98
97
  }
99
98
  case createGrantRequestApproval.SUCCESS: {
100
- return GRANT_REQUEST_APPROVALS;
99
+ return GRANT_REQUESTS;
101
100
  }
102
101
  case createReferenceDataset.SUCCESS: {
103
102
  const id = payload?.createReferenceDataset?.id;
package/src/routines.js CHANGED
@@ -2,6 +2,7 @@
2
2
  import { createRoutine } from "redux-saga-routines";
3
3
 
4
4
  export const addGrantFilter = createRoutine("ADD_GRANT_FILTER");
5
+ export const addGrantRequestsFilter = createRoutine("ADD_GRANT_REQUESTS_FILTER");
5
6
  export const addGrantRequestToCart = createRoutine("ADD_GRANT_REQUEST_TO_CART");
6
7
  export const addStructureFilter = createRoutine("ADD_STRUCTURE_FILTER");
7
8
  export const addStructureSelectedFilter = createRoutine("ADD_STRUCTURE_SELECTED_FILTER");
@@ -15,6 +16,9 @@ export const clearNavFilter = createRoutine("CLEAR_BUCKET_FILTER");
15
16
  export const clearGrantFilters = createRoutine("CLEAR_GRANT_FILTERS");
16
17
  export const clearGrantRequest = createRoutine("CLEAR_GRANT_REQUEST");
17
18
  export const clearGrantRequests = createRoutine("CLEAR_GRANT_REQUESTS");
19
+ export const clearGrantRequestsSearch = createRoutine("CLEAR_GRANT_REQUESTS_SEARCH");
20
+ export const clearGrantRequestsSort = createRoutine("CLEAR_GRANT_REQUESTS_SORT");
21
+ export const clearGrantRequestsFilters = createRoutine("CLEAR_GRANT_REQUESTS_FILTERS")
18
22
  export const clearGrants = createRoutine("CLEAR_GRANTS");
19
23
  export const clearGrantsSort = createRoutine("CLEAR_GRANTS_SORT");
20
24
  export const clearGraph = createRoutine("CLEAR_GRAPH");
@@ -37,6 +41,7 @@ export const clearSystemStructures = createRoutine("CLEAR_SYSTEM_STRUCTURES");
37
41
  export const clearSystems = createRoutine("CLEAR_SYSTEMS");
38
42
  export const clearUserSearchFilters = createRoutine("CLEAR_USER_SEARCH_FILTERS");
39
43
  export const closeGrantFilter = createRoutine("CLOSE_GRANT_FILTER");
44
+ export const closeGrantRequestsFilter = createRoutine("CLOSE_GRANT_REQUESTS_FILTERS")
40
45
  export const closeStructureFilter = createRoutine("CLOSE_STRUCTURE_FILTER");
41
46
  export const createGrantApprovalRule = createRoutine("CREATE_GRANT_APPROVAL_RULE");
42
47
  export const createGrantRequestApproval = createRoutine("CREATE_GRANT_REQUEST_APPROVAL");
@@ -68,6 +73,8 @@ export const fetchGrant = createRoutine("FETCH_GRANT");
68
73
  export const fetchGrantFilters = createRoutine("FETCH_GRANT_FILTERS");
69
74
  export const fetchGrantRequest = createRoutine("FETCH_GRANT_REQUEST");
70
75
  export const fetchGrantRequests = createRoutine("FETCH_GRANT_REQUESTS");
76
+ export const fetchGrantRequestsSearch = createRoutine("FETCH_GRANT_REQUESTS_SEARCH")
77
+ export const fetchGrantRequestsFilters = createRoutine("FETCH_GRANT_REQUESTS_FILTERS")
71
78
  export const fetchGrants = createRoutine("FETCH_GRANTS");
72
79
  export const fetchGraph = createRoutine("FETCH_GRAPH");
73
80
  export const fetchLineageEvents = createRoutine("FETCH_LINEAGE_EVENTS");
@@ -91,19 +98,23 @@ export const hoverNode = createRoutine("HOVER_NODE");
91
98
  export const initSvg = createRoutine("INIT_SVG");
92
99
  export const linkStructureToStructure = createRoutine("LINK_STRUCTURE_TO_STRUCTURE");
93
100
  export const loadLineageEvents = createRoutine("LOAD_LINEAGE_EVENTS");
101
+ export const openGrantRequestsFilter = createRoutine("OPEN_GRANT_REQUESTS_FILTER")
94
102
  export const openGrantFilter = createRoutine("OPEN_GRANT_FILTER");
95
103
  export const openStructureFilter = createRoutine("OPEN_STRUCTURE_FILTER");
96
104
  export const requestGrantRemoval = createRoutine("REQUEST_GRANT_REMOVAL");
97
105
  export const removeGrantFilter = createRoutine("REMOVE_GRANT_FILTER");
106
+ export const removeGrantRequestsFilter = createRoutine("REMOVE_GRANT_REQUESTS_FILTER")
98
107
  export const removeGrantRequestFromCart = createRoutine("REMOVE_GRANT_REQUEST_FROM_CART");
99
108
  export const removeGrantRequestsQuery = createRoutine("REMOVE_GRANT_REQUESTS_QUERY");
100
109
  export const removeStructureFilter = createRoutine("REMOVE_STRUCTURE_FILTER");
101
110
  export const removeStructureSelectedFilter = createRoutine("REMOVE_STRUCTURE_SELECTED_FILTER");
102
111
  export const resetGrantFilters = createRoutine("RESET_GRANT_FILTERS");
112
+ export const resetGrantRequestsFilters = createRoutine("RESERT_GRANT_REQUESTS_FILTERS");
103
113
  export const resetStructureFilters = createRoutine("RESET_STRUCTURE_FILTERS");
104
114
  export const saveUserSearchFilters = createRoutine("SAVE_USER_SEARCH_FILTERS");
105
115
  export const saveNavFilter = createRoutine("SAVE_BUCKET_FILTER");
106
116
  export const searchGrants = createRoutine("SEARCH_GRANTS");
117
+ export const searchGrantRequests = createRoutine("SEARCH_GRANT_REQUESTS");
107
118
  export const searchStructures = createRoutine("SEARCH_STRUCTURES");
108
119
  export const selectGrantPage = createRoutine("SELECT_GRANT_PAGE");
109
120
  export const selectGrantRequestTemplate = createRoutine("SELECT_GRANT_REQUEST_TEMPLATE");
@@ -116,10 +127,12 @@ export const selectStructurePage = createRoutine("SELECT_STRUCTURE_PAGE");
116
127
  export const setGrantChangeRequestCart = createRoutine("SET_GRANT_CHANGE_REQUEST_CART");
117
128
  export const setGrantRequestsQuery = createRoutine("SET_GRANT_REQUESTS_QUERY");
118
129
  export const sortGrants = createRoutine("SORT_GRANTS");
130
+ export const sortGrantRequests = createRoutine("SORT_GRANT_REQUESTS");
119
131
  export const sortStructures = createRoutine("SORT_STRUCTURES");
120
132
  export const tagStructure = createRoutine("TAG_STRUCTURE");
121
133
  export const toggleGrantDateFilter = createRoutine("TOGGLE_GRANT_DATE_FILTER");
122
134
  export const toggleGrantFilterValue = createRoutine("TOGGLE_GRANT_FILTER_VALUE");
135
+ export const toggleGrantRequestsFilterValue = createRoutine("TOGGLE_GRANT_REQUESTS_FILTER_VALUE");
123
136
  export const toggleStructureDateFilter = createRoutine("TOGGLE_STRUCTURE_DATE_FILTER");
124
137
  export const toggleStructureFilterValue = createRoutine("TOGGLE_STRUCTURE_FILTER_VALUE");
125
138
  export const upsertCatalogViewConfig = createRoutine("UPDATE_CATALOG_VIEW_CONFIG");
@@ -0,0 +1,91 @@
1
+ import { testSaga } from "redux-saga-test-plan";
2
+ import { apiJsonPost, JSON_OPTS } from "@truedat/core/services/api";
3
+ import {
4
+ fetchGrantRequestsFiltersRequestSaga,
5
+ fetchGrantRequestsFiltersSaga,
6
+ } from "../fetchGrantRequestsFilters";
7
+ import { fetchGrantRequestsFilters } from "../../routines";
8
+ import { API_GRANT_REQUESTS_FILTERS_SEARCH } from "../../api";
9
+
10
+ const filters = {
11
+ filters: {
12
+ current_status: ["pending"],
13
+ },
14
+ };
15
+ const payload = {
16
+ filters: filters,
17
+ };
18
+
19
+ describe("sagas: fetchGrantRequestsFiltersRequestSaga", () => {
20
+ it("should invoke fetchGrantRequestsFiltersSaga on fetchGrantRequestsFilters.TRIGGER", () => {
21
+ expect(() => {
22
+ testSaga(fetchGrantRequestsFiltersRequestSaga)
23
+ .next()
24
+ .takeLatest(
25
+ fetchGrantRequestsFilters.TRIGGER,
26
+ fetchGrantRequestsFiltersSaga
27
+ )
28
+ .finish()
29
+ .isDone();
30
+ }).not.toThrow();
31
+ });
32
+
33
+ it("should throw exception if an unhandled action is received", () => {
34
+ expect(() => {
35
+ testSaga(fetchGrantRequestsFiltersRequestSaga)
36
+ .next()
37
+ .takeLatest("FOO", fetchGrantRequestsFiltersRequestSaga);
38
+ }).toThrow();
39
+ });
40
+ });
41
+
42
+ describe("sagas: fetchGrantRequestsFiltersSaga", () => {
43
+ const data = {
44
+ data: { foo: {}, var: {} },
45
+ };
46
+
47
+ it("should put a success action when a response is returned", () => {
48
+ expect(() => {
49
+ testSaga(fetchGrantRequestsFiltersSaga, { payload })
50
+ .next()
51
+ .put(fetchGrantRequestsFilters.request())
52
+ .next()
53
+ .call(
54
+ apiJsonPost,
55
+ API_GRANT_REQUESTS_FILTERS_SEARCH,
56
+ payload,
57
+ JSON_OPTS
58
+ )
59
+ .next({ data })
60
+ .put(fetchGrantRequestsFilters.success({ data }))
61
+ .next()
62
+ .put(fetchGrantRequestsFilters.fulfill())
63
+ .next()
64
+ .isDone();
65
+ }).not.toThrow();
66
+ });
67
+
68
+ it("should put a failure action when the call returns an error", () => {
69
+ const message = "Request failed";
70
+ const error = { message };
71
+
72
+ expect(() => {
73
+ testSaga(fetchGrantRequestsFiltersSaga, { payload })
74
+ .next()
75
+ .put(fetchGrantRequestsFilters.request())
76
+ .next()
77
+ .call(
78
+ apiJsonPost,
79
+ API_GRANT_REQUESTS_FILTERS_SEARCH,
80
+ payload,
81
+ JSON_OPTS
82
+ )
83
+ .throw(error)
84
+ .put(fetchGrantRequestsFilters.failure(message))
85
+ .next()
86
+ .put(fetchGrantRequestsFilters.fulfill())
87
+ .next()
88
+ .isDone();
89
+ }).not.toThrow();
90
+ });
91
+ });