@truedat/dd 8.11.0 → 8.11.2

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 (33) hide show
  1. package/package.json +3 -3
  2. package/src/api/queries.js +4 -0
  3. package/src/components/GrantRequest.js +74 -8
  4. package/src/components/GrantRequestCancel.js +3 -0
  5. package/src/components/GrantRequestHeader.js +45 -14
  6. package/src/components/GrantRequestsDownloadButton.js +9 -1
  7. package/src/components/GrantRequestsTable.js +4 -1
  8. package/src/components/StructureGrantCartCheckout.js +9 -4
  9. package/src/components/StructureGrantCartUserSelector.js +19 -4
  10. package/src/components/StructureGrantDropdown.js +29 -3
  11. package/src/components/StructureGrantListButton.js +3 -1
  12. package/src/components/StructureGrantSummaryButton.js +8 -4
  13. package/src/components/__tests__/GrantRequest.spec.js +437 -0
  14. package/src/components/__tests__/GrantRequestHeader.spec.js +89 -2
  15. package/src/components/__tests__/GrantRequestsDownloadButton.spec.js +52 -0
  16. package/src/components/__tests__/GrantRequestsTable.spec.js +18 -0
  17. package/src/components/__tests__/StructureGrantCartCheckout.spec.js +41 -0
  18. package/src/components/__tests__/StructureGrantCartUserSelector.spec.js +105 -0
  19. package/src/components/__tests__/StructureGrantDropdown.spec.js +126 -0
  20. package/src/components/__tests__/StructureGrantListButton.spec.js +36 -1
  21. package/src/components/__tests__/StructureGrantSummaryButton.spec.js +89 -1
  22. package/src/components/__tests__/__snapshots__/GrantRequest.spec.js.snap +28 -0
  23. package/src/components/__tests__/__snapshots__/GrantRequestHeader.spec.js.snap +5 -0
  24. package/src/messages/en.js +5 -0
  25. package/src/messages/es.js +5 -0
  26. package/src/reducers/__tests__/grantRequestsCart.spec.js +12 -0
  27. package/src/reducers/grantRequestsCart.js +12 -0
  28. package/src/sagas/__tests__/createGrantRequestStatus.spec.js +67 -1
  29. package/src/sagas/__tests__/fetchGrantRequest.spec.js +26 -0
  30. package/src/sagas/createGrantRequestStatus.js +5 -0
  31. package/src/sagas/fetchGrantRequest.js +1 -1
  32. package/src/selectors/__tests__/getGrantRequestsSearchColumns.spec.js +82 -0
  33. package/src/selectors/getGrantRequestsSearchColumns.js +51 -8
@@ -1,4 +1,5 @@
1
1
  import _ from "lodash/fp";
2
+ import { render } from "@truedat/test/render";
2
3
  import {
3
4
  defaultGrantRequestsSearchTableColumns,
4
5
  getGrantRequestsSearchColumns,
@@ -27,4 +28,85 @@ describe("selectors: getGrantRequestsSearchColumns", () => {
27
28
  });
28
29
  expect(columns).toStrictEqual(grantRequestsSearchColumns);
29
30
  });
31
+
32
+ it("shows user group alias and users icon when hit is for a group", () => {
33
+ const userColumn = _.find({ name: "user" })(
34
+ defaultGrantRequestsSearchTableColumns,
35
+ );
36
+ const grantRequest = {
37
+ user_group: { id: 10, name: "finance", alias: "Fin" },
38
+ };
39
+ const FieldDecorator = userColumn.fieldDecorator;
40
+ const rendered = render(
41
+ <FieldDecorator {...userColumn.fieldSelector(grantRequest)} />,
42
+ );
43
+ expect(rendered.getByText(/fin/i)).toBeInTheDocument();
44
+ });
45
+
46
+ it("shows user group name when alias is empty", () => {
47
+ const userColumn = _.find({ name: "user" })(
48
+ defaultGrantRequestsSearchTableColumns,
49
+ );
50
+ const grantRequest = {
51
+ user_group: { id: 11, name: "legal", alias: "" },
52
+ };
53
+ const FieldDecorator = userColumn.fieldDecorator;
54
+ const rendered = render(
55
+ <FieldDecorator {...userColumn.fieldSelector(grantRequest)} />,
56
+ );
57
+ expect(rendered.getByText(/legal/i)).toBeInTheDocument();
58
+ });
59
+
60
+ it("shows Deleted user when the hit user has empty names", () => {
61
+ const userColumn = _.find({ name: "user" })(
62
+ defaultGrantRequestsSearchTableColumns,
63
+ );
64
+ const grantRequest = {
65
+ user_id: 7,
66
+ user: { email: "", full_name: "", user_name: "" },
67
+ };
68
+ const FieldDecorator = userColumn.fieldDecorator;
69
+ const rendered = render(
70
+ <FieldDecorator {...userColumn.fieldSelector(grantRequest)} />,
71
+ {
72
+ messages: {
73
+ en: {
74
+ "grantRequest.header.user": "User",
75
+ "grantRequest.header.group": "User group",
76
+ "grantRequest.deleted.user": "Deleted user",
77
+ "grantRequest.deleted.group": "Deleted group",
78
+ },
79
+ },
80
+ },
81
+ );
82
+ expect(rendered.getByText(/^deleted user$/i)).toBeInTheDocument();
83
+ expect(rendered.queryByText(/^deleted group$/i)).not.toBeInTheDocument();
84
+ });
85
+
86
+ it("shows Deleted group when the hit has user_group_id and no user_group", () => {
87
+ const userColumn = _.find({ name: "user" })(
88
+ defaultGrantRequestsSearchTableColumns,
89
+ );
90
+ const grantRequest = {
91
+ user_group_id: 10,
92
+ user_group: null,
93
+ user: { email: "", full_name: "", user_name: "" },
94
+ };
95
+ const FieldDecorator = userColumn.fieldDecorator;
96
+ const rendered = render(
97
+ <FieldDecorator {...userColumn.fieldSelector(grantRequest)} />,
98
+ {
99
+ messages: {
100
+ en: {
101
+ "grantRequest.header.user": "User",
102
+ "grantRequest.header.group": "User group",
103
+ "grantRequest.deleted.user": "Deleted user",
104
+ "grantRequest.deleted.group": "Deleted group",
105
+ },
106
+ },
107
+ },
108
+ );
109
+ expect(rendered.getByText(/^deleted group$/i)).toBeInTheDocument();
110
+ expect(rendered.queryByText(/^deleted user$/i)).not.toBeInTheDocument();
111
+ });
30
112
  });
@@ -7,18 +7,58 @@ import { useIntl } from "react-intl";
7
7
  import PropTypes from "prop-types";
8
8
  import Moment from "react-moment";
9
9
 
10
- export const UserDecorator = ({ user }) => {
11
- return user ? (
12
- <Header as="h4">
13
- <Header.Content>{user.full_name}</Header.Content>
14
- </Header>
15
- ) : (
16
- "null"
17
- );
10
+ export const UserDecorator = ({ user, user_group, user_id, user_group_id }) => {
11
+ const { formatMessage } = useIntl();
12
+ const userGroupText = user_group
13
+ ? _.isEmpty(user_group.alias)
14
+ ? user_group.name
15
+ : user_group.alias
16
+ : undefined;
17
+
18
+ if (userGroupText) {
19
+ return (
20
+ <Header as="h4">
21
+ <Header.Content>{userGroupText}</Header.Content>
22
+ </Header>
23
+ );
24
+ }
25
+
26
+ if (user_group_id) {
27
+ return (
28
+ <Header as="h4">
29
+ <Header.Content>
30
+ {formatMessage({ id: "grantRequest.deleted.group" })}
31
+ </Header.Content>
32
+ </Header>
33
+ );
34
+ }
35
+
36
+ if (!_.isEmpty(user?.full_name)) {
37
+ return (
38
+ <Header as="h4">
39
+ <Header.Content>{user.full_name}</Header.Content>
40
+ </Header>
41
+ );
42
+ }
43
+
44
+ if (user_id || user) {
45
+ return (
46
+ <Header as="h4">
47
+ <Header.Content>
48
+ {formatMessage({ id: "grantRequest.deleted.user" })}
49
+ </Header.Content>
50
+ </Header>
51
+ );
52
+ }
53
+
54
+ return "null";
18
55
  };
19
56
 
20
57
  UserDecorator.propTypes = {
21
58
  user: PropTypes.object,
59
+ user_group: PropTypes.object,
60
+ user_id: PropTypes.number,
61
+ user_group_id: PropTypes.number,
22
62
  };
23
63
 
24
64
  export const PathDecorator = ({ data_structure_version }) => {
@@ -102,6 +142,9 @@ export const defaultGrantRequestsSearchTableColumns = [
102
142
  sort: { name: "user.user_name" },
103
143
  fieldSelector: (grantRequest) => ({
104
144
  user: grantRequest?.user,
145
+ user_group: grantRequest?.user_group,
146
+ user_id: grantRequest?.user_id,
147
+ user_group_id: grantRequest?.user_group_id,
105
148
  }),
106
149
  fieldDecorator: UserDecorator,
107
150
  },