@truedat/dd 6.10.1 → 6.10.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 (73) hide show
  1. package/package.json +5 -5
  2. package/src/components/GrantRequestBulkActions.js +67 -90
  3. package/src/components/GrantRequestBulkApprovalForm.js +1 -0
  4. package/src/components/GrantRequestBulkRoleSelector.js +0 -3
  5. package/src/components/GrantRequestRow.js +6 -8
  6. package/src/components/GrantRequestsLabelResults.js +31 -42
  7. package/src/components/GrantRequestsSearchResults.js +88 -107
  8. package/src/components/GrantRequestsTable.js +22 -51
  9. package/src/components/GrantRoutes.js +32 -19
  10. package/src/components/__tests__/GrantRequestBulkActions.spec.js +101 -8
  11. package/src/components/__tests__/GrantRequestRow.spec.js +3 -4
  12. package/src/components/__tests__/GrantRequestsLabelResults.spec.js +21 -9
  13. package/src/components/__tests__/GrantRequestsSearchResults.spec.js +21 -21
  14. package/src/components/__tests__/GrantRequestsTable.spec.js +26 -9
  15. package/src/components/__tests__/__snapshots__/GrantRequestBulkActions.spec.js.snap +48 -34
  16. package/src/components/__tests__/__snapshots__/GrantRequestBulkApprovalForm.spec.js.snap +1 -0
  17. package/src/components/__tests__/__snapshots__/GrantRequestBulkRoleSelector.spec.js.snap +0 -1
  18. package/src/components/__tests__/__snapshots__/GrantRequestRow.spec.js.snap +20 -0
  19. package/src/components/__tests__/__snapshots__/GrantRequestsLabelResults.spec.js.snap +25 -12
  20. package/src/components/__tests__/__snapshots__/GrantRequestsSearchResults.spec.js.snap +182 -120
  21. package/src/components/__tests__/__snapshots__/GrantRequestsTable.spec.js.snap +109 -11
  22. package/src/components/index.js +0 -4
  23. package/src/hooks/useGrantRequest.js +13 -0
  24. package/src/reducers/index.js +0 -24
  25. package/src/routines.js +2 -33
  26. package/src/sagas/index.js +0 -3
  27. package/src/selectors/index.js +0 -6
  28. package/src/components/GrantRequestPagination.js +0 -18
  29. package/src/components/GrantRequestSearchFilters.js +0 -23
  30. package/src/components/GrantRequestsFiltersLoader.js +0 -33
  31. package/src/components/GrantRequestsSearch.js +0 -35
  32. package/src/components/GrantRequestsSearchLoader.js +0 -47
  33. package/src/components/GrantRequestsSelectedFilters.js +0 -55
  34. package/src/components/__tests__/GrantRequestFiltersLoader.spec.js +0 -20
  35. package/src/components/__tests__/GrantRequestSearchFilters.spec.js +0 -19
  36. package/src/components/__tests__/GrantRequestsSearch.spec.js +0 -23
  37. package/src/components/__tests__/GrantRequestsSearchLoader.spec.js +0 -15
  38. package/src/components/__tests__/__snapshots__/GrantRequestSearchFilters.spec.js.snap +0 -47
  39. package/src/components/__tests__/__snapshots__/GrantRequestsSearch.spec.js.snap +0 -50
  40. package/src/components/__tests__/__snapshots__/GrantRequestsSearchLoader.spec.js.snap +0 -3
  41. package/src/reducers/__tests__/grantRequestCount.spec.js +0 -38
  42. package/src/reducers/__tests__/grantRequestPageSize.spec.js +0 -36
  43. package/src/reducers/__tests__/grantRequestPermissions.spec.js +0 -66
  44. package/src/reducers/__tests__/grantRequestsActiveFilters.spec.js +0 -90
  45. package/src/reducers/__tests__/grantRequestsFiltersLoading.spec.js +0 -34
  46. package/src/reducers/__tests__/grantRequestsSearch.spec.js +0 -38
  47. package/src/reducers/__tests__/grantRequestsSearchLoading.spec.js +0 -36
  48. package/src/reducers/__tests__/grantRequestsSearchQuery.spec.js +0 -96
  49. package/src/reducers/__tests__/grantRequestsSelectedFilter.spec.js +0 -72
  50. package/src/reducers/grantRequestCount.js +0 -23
  51. package/src/reducers/grantRequestPageSize.js +0 -15
  52. package/src/reducers/grantRequestPermissions.js +0 -36
  53. package/src/reducers/grantRequestSearchQuery.js +0 -60
  54. package/src/reducers/grantRequestsActiveFilters.js +0 -58
  55. package/src/reducers/grantRequestsFilters.js +0 -23
  56. package/src/reducers/grantRequestsFiltersLoading.js +0 -14
  57. package/src/reducers/grantRequestsSearch.js +0 -19
  58. package/src/reducers/grantRequestsSearchLoading.js +0 -14
  59. package/src/reducers/grantRequestsSelectedFilter.js +0 -34
  60. package/src/sagas/__tests__/fetchGrantRequestsSearch.spec.js +0 -92
  61. package/src/sagas/fetchGrantRequestsSearch.js +0 -30
  62. package/src/selectors/__tests__/getGrantRequestsAvailableFilters.spec.js +0 -15
  63. package/src/selectors/__tests__/getGrantRequestsFilterTypes.spec.js +0 -19
  64. package/src/selectors/__tests__/getGrantRequestsSearchQuery.spec.js +0 -24
  65. package/src/selectors/__tests__/getGrantRequestsSelectedFilterActiveValues.spec.js +0 -15
  66. package/src/selectors/__tests__/getGrantRequestsSelectedFilterValues.spec.js +0 -15
  67. package/src/selectors/__tests__/getGrantRequestsSelectedFilters.spec.js +0 -13
  68. package/src/selectors/getGrantRequestsAvailableFilters.js +0 -17
  69. package/src/selectors/getGrantRequestsFilterTypes.js +0 -7
  70. package/src/selectors/getGrantRequestsSearchQuery.js +0 -19
  71. package/src/selectors/getGrantRequestsSelectedFilterActiveValues.js +0 -8
  72. package/src/selectors/getGrantRequestsSelectedFilterValues.js +0 -12
  73. package/src/selectors/getGrantRequestsSelectedFilters.js +0 -10
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@truedat/dd",
3
- "version": "6.10.1",
3
+ "version": "6.10.3",
4
4
  "description": "Truedat Web Data Dictionary",
5
5
  "sideEffects": false,
6
6
  "jsnext:main": "src/index.js",
@@ -88,9 +88,9 @@
88
88
  },
89
89
  "dependencies": {
90
90
  "@apollo/client": "^3.7.1",
91
- "@truedat/auth": "6.10.1",
92
- "@truedat/core": "6.10.1",
93
- "@truedat/df": "6.10.1",
91
+ "@truedat/auth": "6.10.3",
92
+ "@truedat/core": "6.10.3",
93
+ "@truedat/df": "6.10.3",
94
94
  "lodash": "^4.17.21",
95
95
  "moment": "^2.29.4",
96
96
  "path-to-regexp": "^1.7.0",
@@ -115,5 +115,5 @@
115
115
  "react-dom": ">= 16.8.6 < 17",
116
116
  "semantic-ui-react": ">= 2.0.3 < 2.2"
117
117
  },
118
- "gitHead": "24842b079c16460f87d1fae762d9aab6feb6f8db"
118
+ "gitHead": "a1cf73b088952f0488a80001bef16a45f40b3829"
119
119
  }
@@ -1,61 +1,66 @@
1
1
  import _ from "lodash/fp";
2
- import React, { useState, useEffect, useRef } from "react";
3
- import { connect } from "react-redux";
2
+ import React, { useState, useEffect } from "react";
4
3
  import PropTypes from "prop-types";
5
4
  import { useHistory } from "react-router-dom";
6
5
  import { useIntl } from "react-intl";
7
- import { Grid } from "semantic-ui-react";
8
- import { makeSearchQuerySelector } from "@truedat/core/selectors";
6
+ import { Dropdown } from "semantic-ui-react";
7
+ import { useSearchContext } from "@truedat/core/search/SearchContext";
9
8
  import { GRANT_REQUESTS_APPROVALS_RESULT } from "@truedat/core/routes";
10
- import { useGrantRequestBulkApproval } from "../hooks/useGrantRequest";
11
- import { fetchGrantRequestsSearch } from "../routines";
9
+ import { useGrantRequestBulkApproval } from "@truedat/dd/hooks/useGrantRequest";
12
10
  import GrantRequestBulkApprovalPopup from "./GrantRequestBulkApprovalPopup";
13
- import GrantRequestBulkRoleSelector from "./GrantRequestBulkRoleSelector";
14
11
 
15
- const usePrevious = (value) => {
16
- const ref = useRef();
17
- useEffect(() => {
18
- ref.current = value;
19
- });
20
- return ref.current;
21
- };
12
+ // import GrantRequestBulkRoleSelector from "./GrantRequestBulkRoleSelector";
22
13
 
23
14
  export const GrantRequestBulkActions = ({
24
15
  selectedGrantRequests,
25
- loading,
26
- onChangeRole,
27
- rolesPermission,
28
- roleSelected,
29
- query,
30
16
  cleanSelectedGrantRequests,
31
- zeroResults,
32
- canApprove,
33
17
  }) => {
18
+ const {
19
+ searchData,
20
+ loading,
21
+ toggleHiddenFilterValue,
22
+ resetFilters,
23
+ searchMust,
24
+ cleanQuery,
25
+ } = useSearchContext();
34
26
  const history = useHistory();
27
+ const [selectedRole, setSelectedRole] = useState(null);
35
28
  const [saving, setSaving] = useState();
36
29
  const { formatMessage } = useIntl();
37
30
  const { trigger } = useGrantRequestBulkApproval();
38
31
 
39
- const previousQuery = usePrevious(query);
40
- const clean = !_.isEqual(query)(previousQuery);
32
+ const selectRole = (role) => {
33
+ setSelectedRole(role);
34
+ resetFilters();
35
+ cleanSelectedGrantRequests();
36
+ cleanQuery();
37
+ toggleHiddenFilterValue({
38
+ filter: "must_not_approved_by",
39
+ value: [role],
40
+ });
41
+ };
42
+
43
+ const rolesPermission = _.propOr([], "_permissions")(searchData);
44
+ const grantRequests = _.propOr([], "data")(searchData);
45
+ const zeroResults = _.isEmpty(grantRequests);
41
46
 
47
+ const firstRole = _.first(rolesPermission);
42
48
  useEffect(() => {
43
- cleanSelectedGrantRequests();
44
- }, [clean]);
49
+ selectRole(firstRole);
50
+ }, [firstRole]);
45
51
 
46
52
  const onSubmit = ({ comment, isRejection }) => {
47
53
  setSaving(true);
48
54
  const payload = {
49
55
  comment,
50
56
  is_rejection: isRejection,
51
- role: roleSelected,
57
+ role: selectedRole,
52
58
  };
53
- const must = _.prop("must")(query);
54
59
  trigger(
55
60
  _.isEmpty(selectedGrantRequests)
56
61
  ? {
57
62
  ...payload,
58
- must,
63
+ must: searchMust,
59
64
  }
60
65
  : {
61
66
  ...payload,
@@ -66,74 +71,46 @@ export const GrantRequestBulkActions = ({
66
71
  });
67
72
  };
68
73
 
74
+ const roleOptions = _.flow(
75
+ _.sortBy(_.identity),
76
+ _.map((role) => ({ key: role, value: role, text: role }))
77
+ )(rolesPermission);
78
+
69
79
  return (
70
- <div className="grant-requests-bulk-actions">
71
- <Grid.Column width={4} textAlign="right">
72
- <GrantRequestBulkRoleSelector
73
- roles={rolesPermission}
74
- disabled={_.size(rolesPermission) == 1 || !canApprove}
75
- selectedRole={roleSelected}
76
- onChange={onChangeRole}
77
- />
80
+ <>
81
+ <Dropdown
82
+ className="grant-requests-bulk-role-selector"
83
+ placeholder={formatMessage({
84
+ id: "grantRequestApproval.form.role.select",
85
+ })}
86
+ selection
87
+ options={roleOptions}
88
+ onChange={(_e, { value }) => selectRole(value)}
89
+ value={selectedRole}
90
+ />
78
91
 
79
- <GrantRequestBulkApprovalPopup
80
- onSubmit={onSubmit}
81
- content={formatMessage({ id: "grantRequest.actions.approve" })}
82
- disabled={
83
- _.isNull(roleSelected) ||
84
- loading ||
85
- zeroResults ||
86
- _.size(selectedGrantRequests) == 0 ||
87
- !canApprove
88
- }
89
- loading={saving}
90
- primary
91
- />
92
- <GrantRequestBulkApprovalPopup
93
- onSubmit={onSubmit}
94
- isRejection
95
- content={formatMessage({ id: "grantRequest.actions.reject" })}
96
- disabled={
97
- _.isNull(roleSelected) ||
98
- loading ||
99
- zeroResults ||
100
- _.size(selectedGrantRequests) == 0 ||
101
- !canApprove
102
- }
103
- loading={saving}
104
- secondary
105
- />
106
- </Grid.Column>
107
- </div>
92
+ <GrantRequestBulkApprovalPopup
93
+ onSubmit={onSubmit}
94
+ content={formatMessage({ id: "grantRequest.actions.approve" })}
95
+ disabled={_.isNil(selectedRole) || loading || zeroResults}
96
+ loading={saving}
97
+ primary
98
+ />
99
+ <GrantRequestBulkApprovalPopup
100
+ onSubmit={onSubmit}
101
+ isRejection
102
+ content={formatMessage({ id: "grantRequest.actions.reject" })}
103
+ disabled={_.isNil(selectedRole) || loading || zeroResults}
104
+ loading={saving}
105
+ secondary
106
+ />
107
+ </>
108
108
  );
109
109
  };
110
110
 
111
111
  GrantRequestBulkActions.propTypes = {
112
- roleSelected: PropTypes.string,
113
- onChangeRole: PropTypes.func,
114
- rolesPermission: PropTypes.array,
115
112
  selectedGrantRequests: PropTypes.array,
116
- role: PropTypes.string,
117
- addGrantRequestsFilter: PropTypes.func,
118
- toggleGrantRequestsFilterValue: PropTypes.func,
119
- createGrantRequestBulkApproval: PropTypes.func,
120
- closeGrantRequestsFilter: PropTypes.func,
121
- loading: PropTypes.bool,
122
- zeroResults: PropTypes.bool,
123
- };
124
-
125
- const makeMapStateToProps = () => {
126
- const searchQuerySelector = makeSearchQuerySelector(
127
- "grantRequestSearchQuery",
128
- "grantRequestsActiveFilters"
129
- );
130
-
131
- const mapStateToProps = (state, props) => ({
132
- query: searchQuerySelector(state, { ...props, pageSize: 1000 }),
133
- });
134
- return mapStateToProps;
113
+ cleanSelectedGrantRequests: PropTypes.func,
135
114
  };
136
115
 
137
- export default connect(makeMapStateToProps, { fetchGrantRequestsSearch })(
138
- GrantRequestBulkActions
139
- );
116
+ export default GrantRequestBulkActions;
@@ -47,6 +47,7 @@ export const GrantRequestBulkApprovalForm = ({ isRejection, onSubmit }) => {
47
47
  />
48
48
  <div className="actions">
49
49
  <Button
50
+ data-testid="approve-button-id"
50
51
  type="submit"
51
52
  primary
52
53
  content={formatMessage({
@@ -7,7 +7,6 @@ import { Dropdown } from "semantic-ui-react";
7
7
  export const GrantRequestBulkRoleSelector = ({
8
8
  roles,
9
9
  selectedRole,
10
- disabled,
11
10
  onChange,
12
11
  }) => {
13
12
  const { formatMessage } = useIntl();
@@ -24,7 +23,6 @@ export const GrantRequestBulkRoleSelector = ({
24
23
  })}
25
24
  clearable
26
25
  selection
27
- disabled={disabled}
28
26
  options={options}
29
27
  onChange={(_e, { value }) => onChange(value)}
30
28
  value={selectedRole}
@@ -35,7 +33,6 @@ export const GrantRequestBulkRoleSelector = ({
35
33
  GrantRequestBulkRoleSelector.propTypes = {
36
34
  roles: PropTypes.array,
37
35
  selectedRole: PropTypes.string,
38
- disabled: PropTypes.bool,
39
36
  onChange: PropTypes.func,
40
37
  };
41
38
 
@@ -12,10 +12,9 @@ export const GrantRequestRow = ({
12
12
  columns,
13
13
  disabled,
14
14
  onClick,
15
- onChange,
15
+ onCheckboxChange,
16
16
  grantRequest,
17
- roleSelected,
18
- canApprove,
17
+ approveView,
19
18
  }) => {
20
19
  const history = useHistory();
21
20
  const createdById = _.path("created_by_id")(grantRequest);
@@ -28,12 +27,12 @@ export const GrantRequestRow = ({
28
27
  onClick={() => onClick && onClick(grantRequest)}
29
28
  warning={createdById !== userId}
30
29
  >
31
- {roleSelected && canApprove ? (
30
+ {approveView ? (
32
31
  <Table.Cell collapsing width="1" textAlign="center">
33
32
  <Checkbox
34
33
  id={grantRequest.id}
35
34
  checked={checked}
36
- onChange={onChange}
35
+ onChange={onCheckboxChange}
37
36
  />
38
37
  </Table.Cell>
39
38
  ) : null}
@@ -58,13 +57,12 @@ export const GrantRequestRow = ({
58
57
 
59
58
  GrantRequestRow.propTypes = {
60
59
  active: PropTypes.bool,
61
- canApprove: PropTypes.bool,
60
+ approveView: PropTypes.bool,
62
61
  checked: PropTypes.bool,
63
62
  disabled: PropTypes.bool,
64
63
  grantRequest: PropTypes.object,
65
- roleSelected: PropTypes.string,
66
64
  columns: PropTypes.array,
67
- onChange: PropTypes.func,
65
+ onCheckboxChange: PropTypes.func,
68
66
  onClick: PropTypes.func,
69
67
  };
70
68
 
@@ -1,52 +1,41 @@
1
1
  import React from "react";
2
2
  import PropTypes from "prop-types";
3
- import { connect } from "react-redux";
4
3
  import { FormattedMessage } from "react-intl";
5
4
  import { Label } from "semantic-ui-react";
5
+ import { useSearchContext } from "@truedat/core/search/SearchContext";
6
6
 
7
- export const GrantRequestsLabelResults = ({
8
- grantRequestCount,
9
- grantRequestsSearchLoading,
10
- grantRequestToExecute,
11
- roleSelected,
12
- }) => (
13
- <>
14
- <Label className="grant-requests-bulk-label-results">
15
- {grantRequestsSearchLoading ? (
16
- <FormattedMessage id="grantRequests.searching" />
17
- ) : (
18
- <FormattedMessage
19
- id="grantRequests.retrieved.results"
20
- values={{ count: grantRequestCount }}
21
- />
22
- )}
23
- </Label>
24
- {!grantRequestsSearchLoading && roleSelected ? (
25
- <Label className="grant-requests-bulk-label-results">
26
- <FormattedMessage
27
- id="grantRequests.bulk.selected"
28
- values={{
29
- count: grantRequestToExecute,
30
- }}
31
- />
7
+ export const GrantRequestsLabelResults = ({ selectedCount, approveView }) => {
8
+ const { count, loading } = useSearchContext();
9
+
10
+ return (
11
+ <div className="grant-requests-bulk-label-results">
12
+ <Label>
13
+ {loading ? (
14
+ <FormattedMessage id="grantRequests.searching" />
15
+ ) : (
16
+ <FormattedMessage
17
+ id="grantRequests.retrieved.results"
18
+ values={{ count }}
19
+ />
20
+ )}
32
21
  </Label>
33
- ) : null}
34
- </>
35
- );
22
+ {!loading && approveView ? (
23
+ <Label>
24
+ <FormattedMessage
25
+ id="grantRequests.bulk.selected"
26
+ values={{
27
+ count: selectedCount || count,
28
+ }}
29
+ />
30
+ </Label>
31
+ ) : null}
32
+ </div>
33
+ );
34
+ };
36
35
 
37
36
  GrantRequestsLabelResults.propTypes = {
38
- grantRequestCount: PropTypes.number,
39
- grantRequestToExecute: PropTypes.number,
40
- grantRequestsSearchLoading: PropTypes.bool,
41
- roleSelected: PropTypes.string,
37
+ selectedCount: PropTypes.number,
38
+ approveView: PropTypes.bool,
42
39
  };
43
40
 
44
- const mapStateToProps = ({
45
- grantRequestCount,
46
- grantRequestsSearchLoading,
47
- }) => ({
48
- grantRequestCount,
49
- grantRequestsSearchLoading,
50
- });
51
-
52
- export default connect(mapStateToProps)(GrantRequestsLabelResults);
41
+ export default GrantRequestsLabelResults;
@@ -1,65 +1,48 @@
1
1
  import _ from "lodash/fp";
2
2
  import React, { useEffect, useState } from "react";
3
- import { connect } from "react-redux";
4
- import PropTypes from "prop-types";
5
- import { Header, Icon, Segment, Dimmer, Loader } from "semantic-ui-react";
6
- import { FormattedMessage } from "react-intl";
7
3
  import {
8
- toggleGrantRequestsFilterValue,
9
- removeGrantRequestsFilter,
10
- } from "../routines";
4
+ Header,
5
+ Button,
6
+ Icon,
7
+ Segment,
8
+ Dimmer,
9
+ Loader,
10
+ GridColumn,
11
+ GridRow,
12
+ } from "semantic-ui-react";
13
+ import { FormattedMessage } from "react-intl";
14
+ import SearchWidget from "@truedat/core/search/SearchWidget";
15
+ import { useSearchContext } from "@truedat/core/search/SearchContext";
16
+ import Pagination from "@truedat/core/search/Pagination";
11
17
  import GrantRequestBulkActions from "./GrantRequestBulkActions";
12
- import GrantRequestsSearch from "./GrantRequestsSearch";
13
- import GrantRequestsSelectedFilters from "./GrantRequestsSelectedFilters";
14
18
  import GrantRequestsTable from "./GrantRequestsTable";
15
19
  import GrantRequestsLabelResults from "./GrantRequestsLabelResults";
16
- import GrantRequestPagination from "./GrantRequestPagination";
17
-
18
- export const GrantRequestsSearchResults = ({
19
- grantRequests,
20
- loading,
21
- rolesPermission,
22
- defaultFilters,
23
- activeFilters,
24
- toggleGrantRequestsFilterValue,
25
- removeGrantRequestsFilter,
26
- }) => {
20
+
21
+ export const GrantRequestsSearchResults = () => {
22
+ const { searchData, loading, setOnSearchChange, setHiddenFilters } =
23
+ useSearchContext();
24
+
25
+ const rolesPermission = _.propOr([], "_permissions")(searchData);
26
+ const grantRequests = _.propOr([], "data")(searchData);
27
+ const hasApproveRoles = !_.isEmpty(rolesPermission);
28
+
27
29
  const [selectedGrantRequests, setSelectedGrantRequests] = useState([]);
28
- const [roleSelected, setSelectedRole] = useState(null);
29
- const [canApprove, setCanApprove] = useState(false);
30
+ const [approveView, setApproveView] = useState(hasApproveRoles);
30
31
 
31
- const isOnlyPending = (status) => {
32
- return _.size(_.uniq(status)) === 1 && _.includes("pending", status);
33
- };
32
+ const cleanSelection = () => setSelectedGrantRequests([]);
34
33
 
35
34
  useEffect(() => {
36
- if (_.size(rolesPermission) == 1) {
37
- setSelectedRole(_.first(rolesPermission));
38
- }
39
- }, [rolesPermission]);
35
+ setOnSearchChange(() => cleanSelection);
36
+ }, []);
40
37
 
41
38
  useEffect(() => {
42
- if (canApprove && roleSelected) {
43
- toggleGrantRequestsFilterValue({
44
- filter: "must_not_approved_by",
45
- value: [roleSelected],
46
- });
47
- } else {
48
- removeGrantRequestsFilter({ filter: "must_not_approved_by" });
49
- }
50
- }, [canApprove, roleSelected]);
39
+ setApproveView(hasApproveRoles);
40
+ }, [hasApproveRoles]);
51
41
 
52
- useEffect(() => {
53
- const canApprove = _.flow(
54
- _.propOr([], "current_status"),
55
- _.cond([
56
- [_.isEmpty, _.negate(_.stubTrue)],
57
- [isOnlyPending, _.stubTrue],
58
- [_.stubTrue, _.negate(_.stubTrue)],
59
- ])
60
- )(activeFilters);
61
- setCanApprove(canApprove);
62
- }, [activeFilters]);
42
+ const setSearchView = () => {
43
+ setApproveView(false);
44
+ setHiddenFilters({});
45
+ };
63
46
 
64
47
  const allChecked = () => {
65
48
  const ids = _.map(_.prop("id"))(grantRequests);
@@ -106,9 +89,6 @@ export const GrantRequestsSearchResults = ({
106
89
  return _.some((selectedId) => _.eq(id, selectedId))(selectedGrantRequests);
107
90
  };
108
91
 
109
- const loadingDone =
110
- _.size(rolesPermission) > 1 || (!loading && !_.isNull(roleSelected));
111
-
112
92
  return (
113
93
  <Segment>
114
94
  <Header as="h2">
@@ -122,69 +102,70 @@ export const GrantRequestsSearchResults = ({
122
102
  </Header>
123
103
 
124
104
  <Segment attached="bottom">
125
- <GrantRequestBulkActions
126
- selectedGrantRequests={selectedGrantRequests}
127
- rolesPermission={rolesPermission}
128
- onChangeRole={setSelectedRole}
129
- roleSelected={roleSelected}
130
- loading={loading}
131
- cleanSelectedGrantRequests={() => setSelectedGrantRequests([])}
132
- defaultFilters={defaultFilters}
133
- zeroResults={_.isEmpty(grantRequests)}
134
- canApprove={canApprove}
135
- />
136
-
137
- <GrantRequestsSearch />
138
- <GrantRequestsSelectedFilters />
105
+ <div className="grant-requests-bulk-actions">
106
+ <div>
107
+ <SearchWidget />
108
+ </div>
109
+ <div>
110
+ {hasApproveRoles ? (
111
+ <>
112
+ <GridRow className="grant-requests-approve-actions">
113
+ <GridColumn width={5}>
114
+ <Button.Group>
115
+ <Button
116
+ active={approveView}
117
+ icon
118
+ onClick={() => setApproveView(true)}
119
+ >
120
+ Approve view
121
+ </Button>
122
+ <Button
123
+ active={!approveView}
124
+ icon
125
+ onClick={() => setSearchView()}
126
+ >
127
+ Search view
128
+ </Button>
129
+ </Button.Group>
130
+ </GridColumn>
131
+ </GridRow>
132
+
133
+ {approveView ? (
134
+ <GridRow>
135
+ <GridColumn textAlign="right" width={5}>
136
+ <GrantRequestBulkActions
137
+ selectedGrantRequests={selectedGrantRequests}
138
+ cleanSelectedGrantRequests={cleanSelection}
139
+ />
140
+ </GridColumn>
141
+ </GridRow>
142
+ ) : null}
143
+ </>
144
+ ) : null}
145
+ </div>
146
+ </div>
147
+
139
148
  <Dimmer.Dimmable dimmed={loading}>
140
149
  <Dimmer active={loading} inverted>
141
150
  <Loader />
142
151
  </Dimmer>
143
152
 
144
- {loadingDone ? (
145
- <>
146
- <GrantRequestsLabelResults
147
- roleSelected={roleSelected}
148
- grantRequestToExecute={_.size(selectedGrantRequests)}
149
- />
150
- <GrantRequestsTable
151
- addAll={addAll}
152
- canApprove={canApprove}
153
- checkedAll={allChecked()}
154
- checkRow={checkRow}
155
- isRowChecked={isRowChecked}
156
- selectedGrantRequests={selectedGrantRequests}
157
- roleSelected={roleSelected}
158
- />
159
- </>
160
- ) : null}
161
- <GrantRequestPagination />
153
+ <GrantRequestsLabelResults
154
+ approveView={approveView}
155
+ selectedCount={_.size(selectedGrantRequests)}
156
+ />
157
+ <GrantRequestsTable
158
+ approveView={approveView}
159
+ addAll={addAll}
160
+ checkedAll={allChecked()}
161
+ checkRow={checkRow}
162
+ isRowChecked={isRowChecked}
163
+ />
164
+ <Pagination />
162
165
  </Dimmer.Dimmable>
163
166
  </Segment>
164
167
  </Segment>
165
168
  );
166
169
  };
167
170
 
168
- GrantRequestsSearchResults.propTypes = {
169
- grantRequests: PropTypes.array,
170
- loading: PropTypes.bool,
171
- role: PropTypes.string,
172
- rolesPermission: PropTypes.array,
173
- defaultFilters: PropTypes.object,
174
- activeFilters: PropTypes.object,
175
- toggleGrantRequestsFilterValue: PropTypes.func,
176
- removeGrantRequestsFilter: PropTypes.func,
177
- };
178
-
179
- const mapStateToProps = (state) => ({
180
- loading:
181
- state.grantRequestsSearchLoading || state.grantRequestPermissionsLoading,
182
- grantRequests: state.grantRequestsSearch,
183
- rolesPermission: state.grantRequestPermissions,
184
- activeFilters: state.grantRequestsActiveFilters,
185
- });
186
-
187
- export default connect(mapStateToProps, {
188
- toggleGrantRequestsFilterValue,
189
- removeGrantRequestsFilter,
190
- })(GrantRequestsSearchResults);
171
+ export default GrantRequestsSearchResults;