@truedat/dd 4.43.5 → 4.44.1

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/CHANGELOG.md +12 -0
  2. package/package.json +6 -6
  3. package/src/api/fragments.js +10 -0
  4. package/src/api/mutations.js +28 -0
  5. package/src/api/queries.js +20 -0
  6. package/src/api.js +0 -4
  7. package/src/components/DictionaryRoutes.js +2 -10
  8. package/src/components/LinkStructureTagForm.js +2 -2
  9. package/src/components/LinkedStructureTag.js +16 -7
  10. package/src/components/StructureLinkTagButton.js +8 -11
  11. package/src/components/StructureSummary.js +1 -1
  12. package/src/components/StructureTag.js +59 -20
  13. package/src/components/StructureTagForm.js +30 -35
  14. package/src/components/StructureTags.js +7 -6
  15. package/src/components/StructureTagsCards.js +56 -59
  16. package/src/components/StructureTagsCrumbs.js +4 -4
  17. package/src/components/StructureTagsRoutes.js +33 -57
  18. package/src/components/StructuresRoutes.js +0 -3
  19. package/src/components/TagsHeader.js +14 -21
  20. package/src/components/__tests__/PendingStructureNoteRow.spec.js +5 -1
  21. package/src/components/__tests__/PendingStructureNotes.spec.js +2 -2
  22. package/src/components/__tests__/StructureTag.spec.js +4 -1
  23. package/src/components/__tests__/StructureTagForm.spec.js +40 -82
  24. package/src/components/__tests__/StructureTags.spec.js +7 -7
  25. package/src/components/__tests__/StructureTagsCards.spec.js +38 -36
  26. package/src/components/__tests__/StructuresUploadEventsTable.spec.js +36 -42
  27. package/src/components/__tests__/__snapshots__/DictionaryRoutes.spec.js.snap +3 -3
  28. package/src/components/__tests__/__snapshots__/PendingStructureNoteRow.spec.js.snap +33 -29
  29. package/src/components/__tests__/__snapshots__/StructureTag.spec.js.snap +13 -2
  30. package/src/components/__tests__/__snapshots__/StructureTagForm.spec.js.snap +7 -56
  31. package/src/components/__tests__/__snapshots__/StructureTags.spec.js.snap +32 -44
  32. package/src/components/__tests__/__snapshots__/StructureTagsCards.spec.js.snap +53 -118
  33. package/src/components/__tests__/__snapshots__/StructureTagsCrumbs.spec.js.snap +1 -1
  34. package/src/components/__tests__/__snapshots__/StructureTypes.spec.js.snap +1 -1
  35. package/src/components/__tests__/__snapshots__/StructureTypesCrumbs.spec.js.snap +1 -1
  36. package/src/components/__tests__/__snapshots__/StructureTypesTable.spec.js.snap +2 -2
  37. package/src/messages/en.js +4 -2
  38. package/src/messages/es.js +8 -4
  39. package/src/reducers/__tests__/editableStructureTags.spec.js +39 -0
  40. package/src/reducers/__tests__/structureTagsSaving.spec.js +40 -0
  41. package/src/reducers/__tests__/structuresUploadEventsLoading.spec.js +18 -4
  42. package/src/reducers/ddMessage.js +8 -9
  43. package/src/reducers/editableStructureTags.js +19 -0
  44. package/src/reducers/index.js +4 -9
  45. package/src/reducers/structureTagSaving.js +18 -0
  46. package/src/routines.js +3 -5
  47. package/src/sagas/__tests__/createStructureTag.spec.js +28 -13
  48. package/src/sagas/__tests__/deleteStructureTag.spec.js +27 -15
  49. package/src/sagas/__tests__/updateStructureTag.spec.js +26 -13
  50. package/src/sagas/createStructureTag.js +15 -13
  51. package/src/sagas/deleteStructureTag.js +13 -8
  52. package/src/sagas/index.js +0 -6
  53. package/src/sagas/updateStructureTag.js +8 -15
  54. package/src/selectors/__tests__/getStructuresUploadEventColumns.spec.js +1 -1
  55. package/src/components/StructureTagLoader.js +0 -28
  56. package/src/components/StructureTagsLoader.js +0 -26
  57. package/src/components/__tests__/StructureTagLoader.spec.js +0 -29
  58. package/src/components/__tests__/StructureTagsLoader.spec.js +0 -24
  59. package/src/components/__tests__/__snapshots__/StructureTagLoader.spec.js.snap +0 -3
  60. package/src/components/__tests__/__snapshots__/StructureTagsLoader.spec.js.snap +0 -3
  61. package/src/reducers/__tests__/structureTag.spec.js +0 -80
  62. package/src/reducers/__tests__/structureTagLoading.spec.js +0 -40
  63. package/src/reducers/__tests__/structureTags.spec.js +0 -32
  64. package/src/reducers/__tests__/structureTagsLoading.spec.js +0 -40
  65. package/src/reducers/structureTag.js +0 -38
  66. package/src/reducers/structureTagLoading.js +0 -16
  67. package/src/reducers/structureTags.js +0 -19
  68. package/src/reducers/structureTagsLoading.js +0 -16
  69. package/src/sagas/__tests__/deleteStructureType.spec.js +0 -70
  70. package/src/sagas/__tests__/fetchStructureTag.spec.js +0 -74
  71. package/src/sagas/__tests__/fetchStructureTags.spec.js +0 -72
  72. package/src/sagas/fetchStructureTag.js +0 -29
  73. package/src/sagas/fetchStructureTags.js +0 -25
@@ -9,18 +9,32 @@ describe("reducers: structuresUploadEventsLoading", () => {
9
9
  });
10
10
 
11
11
  it("should be true after receiving the fetchStructuresUploadEvents.REQUEST action", () => {
12
- expect(structuresUploadEventsLoading(fooState, { type: fetchStructuresUploadEvents.REQUEST })).toBe(true);
12
+ expect(
13
+ structuresUploadEventsLoading(fooState, {
14
+ type: fetchStructuresUploadEvents.REQUEST,
15
+ })
16
+ ).toBe(true);
13
17
  });
14
18
 
15
19
  it("should be false after receiving the fetchStructuresUploadEvents.SUCCESS action", () => {
16
- expect(structuresUploadEventsLoading(fooState, { type: fetchStructuresUploadEvents.SUCCESS })).toBe(false);
20
+ expect(
21
+ structuresUploadEventsLoading(fooState, {
22
+ type: fetchStructuresUploadEvents.SUCCESS,
23
+ })
24
+ ).toBe(false);
17
25
  });
18
26
 
19
27
  it("should be false after receiving the fetchStructuresUploadEvents.FAILURE action", () => {
20
- expect(structuresUploadEventsLoading(fooState, { type: fetchStructuresUploadEvents.FAILURE })).toBe(false);
28
+ expect(
29
+ structuresUploadEventsLoading(fooState, {
30
+ type: fetchStructuresUploadEvents.FAILURE,
31
+ })
32
+ ).toBe(false);
21
33
  });
22
34
 
23
35
  it("should ignore unhandled actions", () => {
24
- expect(structuresUploadEventsLoading(fooState, { type: "FOO" })).toBe(fooState);
36
+ expect(structuresUploadEventsLoading(fooState, { type: "FOO" })).toBe(
37
+ fooState
38
+ );
25
39
  });
26
40
  });
@@ -1,5 +1,6 @@
1
1
  import _ from "lodash/fp";
2
2
  import { dismissAlert } from "@truedat/core/routines";
3
+ import { STRUCTURES_UPLOAD_EVENTS } from "@truedat/core/routes";
3
4
  import {
4
5
  bulkUpdateStructures,
5
6
  uploadStructures,
@@ -42,33 +43,31 @@ const bulkUpdateErrors = (payload) => {
42
43
  };
43
44
  };
44
45
 
45
- const bulkUpdateAccepted = ({ csv_hash, status, task_reference }) => {
46
+ const bulkUpdateAccepted = () => {
46
47
  return {
47
48
  error: false,
48
49
  header: "structures.bulkUpdateStructures.success.accepted.header",
49
50
  icon: "check",
50
51
  color: "blue",
51
52
  text: "",
52
- fields: { csv_hash, status, task_reference },
53
+ anchor: {
54
+ reference: STRUCTURES_UPLOAD_EVENTS,
55
+ label: "sidemenu.structures_upload_events",
56
+ },
53
57
  };
54
58
  };
55
59
 
56
60
  const ddMessage = (state = initialState, { type, payload }) => {
57
-
58
61
  switch (type) {
59
62
  case dismissAlert.TRIGGER:
60
63
  return initialState;
61
64
  case uploadStructures.SUCCESS:
62
65
  case bulkUpdateStructures.SUCCESS: {
63
-
64
-
65
66
  if (payload.status === 202) {
66
- return bulkUpdateAccepted(payload.data)
67
+ return bulkUpdateAccepted(payload.data);
67
68
  } else if (payload.status === 200) {
68
- return bulkUpdateErrors(payload)
69
+ return bulkUpdateErrors(payload);
69
70
  }
70
-
71
-
72
71
  }
73
72
 
74
73
  case uploadStructuresDomains.SUCCESS: {
@@ -0,0 +1,19 @@
1
+ import _ from "lodash/fp";
2
+ import { clearStructure, fetchStructure } from "../routines";
3
+
4
+ export const initialState = [];
5
+
6
+ const editableStructureTags = (state = initialState, { type, payload }) => {
7
+ switch (type) {
8
+ case clearStructure.TRIGGER:
9
+ return initialState;
10
+ case fetchStructure.TRIGGER:
11
+ return initialState;
12
+ case fetchStructure.SUCCESS:
13
+ return _.pathOr(initialState, "_actions.manage_tags.data")(payload);
14
+ default:
15
+ return state;
16
+ }
17
+ };
18
+
19
+ export { editableStructureTags };
@@ -4,6 +4,7 @@ import { creatingGrantRequestApproval } from "./creatingGrantRequestApproval";
4
4
  import { csvGraphDownloading } from "./csvGraphDownloading";
5
5
  import { ddMessage } from "./ddMessage";
6
6
  import { deletingStructureTags } from "./deletingStructureTags";
7
+ import { editableStructureTags } from "./editableStructureTags";
7
8
  import { grantActiveFilters } from "./grantActiveFilters";
8
9
  import { grantCount } from "./grantCount";
9
10
  import { grantDateFilter } from "./grantDateFilter";
@@ -65,10 +66,7 @@ import { structureRedirect } from "./structureRedirect";
65
66
  import { structureSelectedFilter } from "./structureSelectedFilter";
66
67
  import { structureSiblings } from "./structureSiblings";
67
68
  import { structureSystem } from "./structureSystem";
68
- import { structureTagCreating, structureTag } from "./structureTag";
69
- import { structureTagLoading } from "./structureTagLoading";
70
- import { structureTags } from "./structureTags";
71
- import { structureTagsLoading } from "./structureTagsLoading";
69
+ import { structureTagSaving } from "./structureTagSaving";
72
70
  import { structureType } from "./structureType";
73
71
  import { structureTypeLoading } from "./structureTypeLoading";
74
72
  import { structureTypes } from "./structureTypes";
@@ -103,6 +101,7 @@ export {
103
101
  csvGraphDownloading,
104
102
  ddMessage,
105
103
  deletingStructureTags,
104
+ editableStructureTags,
106
105
  grantActiveFilters,
107
106
  grantCount,
108
107
  grantDateFilter,
@@ -165,11 +164,7 @@ export {
165
164
  structureSelectedFilter,
166
165
  structureSiblings,
167
166
  structureSystem,
168
- structureTag,
169
- structureTagCreating,
170
- structureTagLoading,
171
- structureTags,
172
- structureTagsLoading,
167
+ structureTagSaving,
173
168
  structureType,
174
169
  structureTypeLoading,
175
170
  structureTypes,
@@ -0,0 +1,18 @@
1
+ import { updateStructureTag, createStructureTag } from "../routines";
2
+
3
+ const structureTagSaving = (state = false, { type }) => {
4
+ switch (type) {
5
+ case updateStructureTag.TRIGGER:
6
+ return true;
7
+ case updateStructureTag.FULFILL:
8
+ return false;
9
+ case createStructureTag.TRIGGER:
10
+ return true;
11
+ case createStructureTag.FULFILL:
12
+ return false;
13
+ default:
14
+ return state;
15
+ }
16
+ };
17
+
18
+ export { structureTagSaving };
package/src/routines.js CHANGED
@@ -26,8 +26,6 @@ export const clearResources = createRoutine("CLEAR_RESOURCES");
26
26
  export const clearStructure = createRoutine("CLEAR_STRUCTURE");
27
27
  export const clearStructureFilters = createRoutine("CLEAR_STRUCTURE_FILTERS");
28
28
  export const clearStructureNotes = createRoutine("CLEAR_STRUCTURE_NOTES");
29
- export const clearStructureTag = createRoutine("CLEAR_STRUCTURE_TAG");
30
- export const clearStructureTags = createRoutine("CLEAR_STRUCTURE_TAGS");
31
29
  export const clearStructureType = createRoutine("CLEAR_STRUCTURE_TYPE");
32
30
  export const clearStructureTypes = createRoutine("CLEAR_STRUCTURE_TYPES");
33
31
  export const clearUserSearchFilters = createRoutine(
@@ -78,15 +76,15 @@ export const fetchStructure = createRoutine("FETCH_STRUCTURE");
78
76
  export const fetchStructureFilters = createRoutine("FETCH_STRUCTURE_FILTERS");
79
77
  export const fetchStructureGraph = createRoutine("FETCH_STRUCTURE_GRAPH");
80
78
  export const fetchStructureNotes = createRoutine("FETCH_STRUCTURE_NOTES");
81
- export const fetchStructureTag = createRoutine("FETCH_STRUCTURE_TAG");
82
- export const fetchStructureTags = createRoutine("FETCH_STRUCTURE_TAGS");
83
79
  export const fetchStructureType = createRoutine("FETCH_STRUCTURE_TYPE");
84
80
  export const fetchStructureTypes = createRoutine("FETCH_STRUCTURE_TYPES");
85
81
  export const fetchUserSearchFilters = createRoutine(
86
82
  "FETCH_USER_SEARCH_FILTERS"
87
83
  );
88
84
  export const fetchStructures = createRoutine("FETCH_STRUCTURES");
89
- export const fetchStructuresUploadEvents = createRoutine("FETCH_STRUCTURES_UPLOAD_EVENTS");
85
+ export const fetchStructuresUploadEvents = createRoutine(
86
+ "FETCH_STRUCTURES_UPLOAD_EVENTS"
87
+ );
90
88
  export const fetchSystem = createRoutine("FETCH_SYSTEM");
91
89
  export const fetchSystemStructures = createRoutine("FETCH_SYSTEM_STRUCTURES");
92
90
  export const fetchSystems = createRoutine("FETCH_SYSTEMS");
@@ -1,13 +1,13 @@
1
1
  import { testSaga } from "redux-saga-test-plan";
2
- import { apiJsonPost, JSON_OPTS } from "@truedat/core/services/api";
3
2
  import {
4
3
  createStructureTagRequestSaga,
5
4
  createStructureTagSaga,
5
+ onSuccess,
6
6
  } from "../createStructureTag";
7
+ import { CREATE_STRUCTURE_TAG } from "../../api/mutations";
7
8
  import { createStructureTag } from "../../routines";
8
- import { API_STRUCTURE_TAGS } from "../../api";
9
9
 
10
- describe("sagas: createStructureTagSaga", () => {
10
+ describe("sagas: createStructureTagRequestSaga", () => {
11
11
  it("should invoke createStructureTagSaga on createStructureTag.TRIGGER", () => {
12
12
  expect(() => {
13
13
  testSaga(createStructureTagRequestSaga)
@@ -27,21 +27,30 @@ describe("sagas: createStructureTagSaga", () => {
27
27
  });
28
28
  });
29
29
 
30
- describe("sagas: createSourceSaga", () => {
31
- const payload = { name: "tag1" };
32
- const request_data = {
33
- data_structure_tag: { name: "tag1" },
30
+ describe("sagas: createStructureTagSaga", () => {
31
+ const client = { mutate: jest.fn() };
32
+ const structureTag = {
33
+ name: "tag1",
34
+ domainIds: ["1", "2"],
34
35
  };
36
+ const payload = structureTag;
37
+ const data = { foo: "bar" };
35
38
 
36
39
  it("should put a success action when a response is returned", () => {
37
40
  expect(() => {
38
41
  testSaga(createStructureTagSaga, { payload })
39
42
  .next()
40
- .put({ ...createStructureTag.request() })
43
+ .getContext("client")
44
+ .next(client)
45
+ .put(createStructureTag.request(payload))
41
46
  .next()
42
- .call(apiJsonPost, API_STRUCTURE_TAGS, request_data, JSON_OPTS)
43
- .next({ data: payload })
44
- .put({ ...createStructureTag.success(payload) })
47
+ .call(client.mutate, {
48
+ mutation: CREATE_STRUCTURE_TAG,
49
+ update: onSuccess,
50
+ variables: { structureTag },
51
+ })
52
+ .next({ data })
53
+ .put(createStructureTag.success(data))
45
54
  .next()
46
55
  .put(createStructureTag.fulfill())
47
56
  .next()
@@ -56,9 +65,15 @@ describe("sagas: createSourceSaga", () => {
56
65
  expect(() => {
57
66
  testSaga(createStructureTagSaga, { payload })
58
67
  .next()
59
- .put({ ...createStructureTag.request() })
68
+ .getContext("client")
69
+ .next(client)
70
+ .put(createStructureTag.request(payload))
60
71
  .next()
61
- .call(apiJsonPost, API_STRUCTURE_TAGS, request_data, JSON_OPTS)
72
+ .call(client.mutate, {
73
+ mutation: CREATE_STRUCTURE_TAG,
74
+ update: onSuccess,
75
+ variables: { structureTag },
76
+ })
62
77
  .throw(error)
63
78
  .put(createStructureTag.failure(message))
64
79
  .next()
@@ -1,15 +1,14 @@
1
- import { compile } from "path-to-regexp";
2
1
  import { testSaga } from "redux-saga-test-plan";
3
- import { apiJsonDelete, JSON_OPTS } from "@truedat/core/services/api";
2
+ import { DELETE_STRUCTURE_TAG } from "../../api/mutations";
3
+ import { deleteStructureTag } from "../../routines";
4
4
  import {
5
- deleteStructureTagSaga,
6
5
  deleteStructureTagRequestSaga,
6
+ deleteStructureTagSaga,
7
+ onSuccess,
7
8
  } from "../deleteStructureTag";
8
- import { deleteStructureTag } from "../../routines";
9
- import { API_STRUCTURE_TAG } from "../../api";
10
9
 
11
10
  describe("sagas: deleteStructureTagRequestSaga", () => {
12
- it("should invoke deleteStructureTagSaga on deleteStructureTag.TRIGGER", () => {
11
+ it("should invoke deleteStructureTagSaga on trigger", () => {
13
12
  expect(() => {
14
13
  testSaga(deleteStructureTagRequestSaga)
15
14
  .next()
@@ -23,23 +22,29 @@ describe("sagas: deleteStructureTagRequestSaga", () => {
23
22
  expect(() => {
24
23
  testSaga(deleteStructureTagRequestSaga)
25
24
  .next()
26
- .takeLatest("FOO", deleteStructureTagRequestSaga);
25
+ .takeLatest("FOO", deleteStructureTagSaga);
27
26
  }).toThrow();
28
27
  });
29
28
  });
30
29
 
31
30
  describe("sagas: deleteStructureTagSaga", () => {
32
- const payload = { id: 1 };
33
- const { id } = payload;
34
- const url = compile(API_STRUCTURE_TAG)({ id });
31
+ const id = 1;
32
+ const payload = { id };
33
+ const client = { mutate: jest.fn() };
35
34
 
36
35
  it("should put a success action when a response is returned", () => {
37
36
  expect(() => {
38
37
  testSaga(deleteStructureTagSaga, { payload })
39
38
  .next()
40
- .put(deleteStructureTag.request())
39
+ .getContext("client")
40
+ .next(client)
41
+ .put(deleteStructureTag.request(payload))
41
42
  .next()
42
- .call(apiJsonDelete, url, JSON_OPTS)
43
+ .call(client.mutate, {
44
+ mutation: DELETE_STRUCTURE_TAG,
45
+ update: onSuccess,
46
+ variables: payload,
47
+ })
43
48
  .next({ data: payload })
44
49
  .put(deleteStructureTag.success(payload))
45
50
  .next()
@@ -49,16 +54,23 @@ describe("sagas: deleteStructureTagSaga", () => {
49
54
  }).not.toThrow();
50
55
  });
51
56
 
52
- it("should put a failure action when the call returns an error", () => {
57
+ it("should put a failure action when the call throws an error", () => {
53
58
  const message = "Request failed";
54
59
  const error = { message };
60
+ const client = { mutate: jest.fn() };
55
61
 
56
62
  expect(() => {
57
63
  testSaga(deleteStructureTagSaga, { payload })
58
64
  .next()
59
- .put(deleteStructureTag.request())
65
+ .getContext("client")
66
+ .next(client)
67
+ .put(deleteStructureTag.request(payload))
60
68
  .next()
61
- .call(apiJsonDelete, url, JSON_OPTS)
69
+ .call(client.mutate, {
70
+ mutation: DELETE_STRUCTURE_TAG,
71
+ update: onSuccess,
72
+ variables: payload,
73
+ })
62
74
  .throw(error)
63
75
  .put(deleteStructureTag.failure(message))
64
76
  .next()
@@ -1,15 +1,13 @@
1
- import { compile } from "path-to-regexp";
2
1
  import { testSaga } from "redux-saga-test-plan";
3
- import { apiJsonPatch, JSON_OPTS } from "@truedat/core/services/api";
4
2
  import {
5
3
  updateStructureTagRequestSaga,
6
4
  updateStructureTagSaga,
7
5
  } from "../updateStructureTag";
6
+ import { UPDATE_STRUCTURE_TAG } from "../../api/mutations";
8
7
  import { updateStructureTag } from "../../routines";
9
- import { API_STRUCTURE_TAG } from "../../api";
10
8
 
11
9
  describe("sagas: updateStructureTagRequestSaga", () => {
12
- it("should invoke updateStructureTagSaga on trigger", () => {
10
+ it("should invoke updateStructureTagSaga on updateStructureTag.TRIGGER", () => {
13
11
  expect(() => {
14
12
  testSaga(updateStructureTagRequestSaga)
15
13
  .next()
@@ -23,26 +21,36 @@ describe("sagas: updateStructureTagRequestSaga", () => {
23
21
  expect(() => {
24
22
  testSaga(updateStructureTagRequestSaga)
25
23
  .next()
26
- .takeLatest("FOO", updateStructureTagSaga);
24
+ .takeLatest("FOO", updateStructureTagRequestSaga);
27
25
  }).toThrow();
28
26
  });
29
27
  });
30
28
 
31
29
  describe("sagas: updateStructureTagSaga", () => {
32
- const id = 1;
33
- const url = compile(API_STRUCTURE_TAG)({ id });
34
- const payload = { id, name: "tag1" };
35
- const requestData = { data_structure_tag: payload };
30
+ const client = { mutate: jest.fn() };
31
+ const structureTag = {
32
+ id: "123",
33
+ name: "tag1",
34
+ domainIds: ["1", "2"],
35
+ };
36
+ const payload = structureTag;
37
+ const variables = { id: structureTag.id, structureTag };
38
+ const data = { foo: "bar" };
36
39
 
37
40
  it("should put a success action when a response is returned", () => {
38
41
  expect(() => {
39
42
  testSaga(updateStructureTagSaga, { payload })
40
43
  .next()
44
+ .getContext("client")
45
+ .next(client)
41
46
  .put(updateStructureTag.request(payload))
42
47
  .next()
43
- .call(apiJsonPatch, url, requestData, JSON_OPTS)
44
- .next({ data: payload })
45
- .put(updateStructureTag.success(payload))
48
+ .call(client.mutate, {
49
+ mutation: UPDATE_STRUCTURE_TAG,
50
+ variables,
51
+ })
52
+ .next({ data })
53
+ .put(updateStructureTag.success(data))
46
54
  .next()
47
55
  .put(updateStructureTag.fulfill())
48
56
  .next()
@@ -57,9 +65,14 @@ describe("sagas: updateStructureTagSaga", () => {
57
65
  expect(() => {
58
66
  testSaga(updateStructureTagSaga, { payload })
59
67
  .next()
68
+ .getContext("client")
69
+ .next(client)
60
70
  .put(updateStructureTag.request(payload))
61
71
  .next()
62
- .call(apiJsonPatch, url, requestData, JSON_OPTS)
72
+ .call(client.mutate, {
73
+ mutation: UPDATE_STRUCTURE_TAG,
74
+ variables,
75
+ })
63
76
  .throw(error)
64
77
  .put(updateStructureTag.failure(message))
65
78
  .next()
@@ -1,22 +1,24 @@
1
- import { call, put, takeLatest } from "redux-saga/effects";
2
- import { apiJsonPost, JSON_OPTS } from "@truedat/core/services/api";
1
+ import { call, put, takeLatest, getContext } from "redux-saga/effects";
2
+ import { CREATE_STRUCTURE_TAG } from "../api/mutations";
3
3
  import { createStructureTag } from "../routines";
4
- import { API_STRUCTURE_TAGS } from "../api";
4
+
5
+ export const onSuccess = (cache) => {
6
+ cache.evict({ id: "ROOT_QUERY", fieldName: "structureTags" });
7
+ cache.gc();
8
+ };
5
9
 
6
10
  export function* createStructureTagSaga({ payload }) {
11
+ const client = yield getContext("client");
7
12
  try {
8
- const url = API_STRUCTURE_TAGS;
9
- const requestData = { data_structure_tag: payload };
10
- yield put(createStructureTag.request());
11
- const { data } = yield call(apiJsonPost, url, requestData, JSON_OPTS);
13
+ yield put(createStructureTag.request(payload));
14
+ const { data } = yield call(client.mutate, {
15
+ mutation: CREATE_STRUCTURE_TAG,
16
+ update: onSuccess,
17
+ variables: { structureTag: payload },
18
+ });
12
19
  yield put(createStructureTag.success(data));
13
20
  } catch (error) {
14
- if (error.response) {
15
- const { status, data } = error.response;
16
- yield put(createStructureTag.failure({ status, data }));
17
- } else {
18
- yield put(createStructureTag.failure(error.message));
19
- }
21
+ yield put(createStructureTag.failure(error.message));
20
22
  } finally {
21
23
  yield put(createStructureTag.fulfill());
22
24
  }
@@ -1,16 +1,21 @@
1
- import { compile } from "path-to-regexp";
2
- import { call, put, takeLatest } from "redux-saga/effects";
3
- import { apiJsonDelete, JSON_OPTS } from "@truedat/core/services/api";
1
+ import { call, put, takeLatest, getContext } from "redux-saga/effects";
4
2
  import { deleteStructureTag } from "../routines";
5
- import { API_STRUCTURE_TAG } from "../api";
3
+ import { DELETE_STRUCTURE_TAG } from "../api/mutations";
6
4
 
7
- const toApiPath = compile(API_STRUCTURE_TAG);
5
+ export const onSuccess = (cache, { data: { deleteStructureTag } }) => {
6
+ cache.evict({ id: cache.identify(deleteStructureTag) });
7
+ cache.gc();
8
+ };
8
9
 
9
10
  export function* deleteStructureTagSaga({ payload }) {
11
+ const client = yield getContext("client");
10
12
  try {
11
- const url = toApiPath(payload);
12
- yield put(deleteStructureTag.request());
13
- const { data } = yield call(apiJsonDelete, url, JSON_OPTS);
13
+ yield put(deleteStructureTag.request(payload));
14
+ const { data } = yield call(client.mutate, {
15
+ mutation: DELETE_STRUCTURE_TAG,
16
+ update: onSuccess,
17
+ variables: payload,
18
+ });
14
19
  yield put(deleteStructureTag.success(data));
15
20
  } catch (error) {
16
21
  if (error.response) {
@@ -29,8 +29,6 @@ import { fetchStructureFiltersRequestSaga } from "./fetchStructureFilters";
29
29
  import { fetchStructureGraphRequestSaga } from "./fetchStructureGraph";
30
30
  import { fetchStructureNotesRequestSaga } from "./fetchStructureNotes";
31
31
  import { fetchStructureRequestSaga } from "./fetchStructure";
32
- import { fetchStructureTagRequestSaga } from "./fetchStructureTag";
33
- import { fetchStructureTagsRequestSaga } from "./fetchStructureTags";
34
32
  import { fetchStructureTypeRequestSaga } from "./fetchStructureType";
35
33
  import { fetchStructureTypesRequestSaga } from "./fetchStructureTypes";
36
34
  import { fetchUserSearchFiltersRequestSaga } from "./fetchUserSearchFilters";
@@ -82,8 +80,6 @@ export {
82
80
  fetchStructureGraphRequestSaga,
83
81
  fetchStructureNotesRequestSaga,
84
82
  fetchStructureRequestSaga,
85
- fetchStructureTagRequestSaga,
86
- fetchStructureTagsRequestSaga,
87
83
  fetchStructureTypeRequestSaga,
88
84
  fetchStructureTypesRequestSaga,
89
85
  fetchStructuresUploadEventsRequestSaga,
@@ -136,8 +132,6 @@ export default [
136
132
  fetchStructureGraphRequestSaga(),
137
133
  fetchStructureNotesRequestSaga(),
138
134
  fetchStructureRequestSaga(),
139
- fetchStructureTagRequestSaga(),
140
- fetchStructureTagsRequestSaga(),
141
135
  fetchStructureTypeRequestSaga(),
142
136
  fetchStructureTypesRequestSaga(),
143
137
  fetchUserSearchFiltersRequestSaga(),
@@ -1,25 +1,18 @@
1
- import { compile } from "path-to-regexp";
2
- import { call, put, takeLatest } from "redux-saga/effects";
3
- import { apiJsonPatch, JSON_OPTS } from "@truedat/core/services/api";
1
+ import { call, put, takeLatest, getContext } from "redux-saga/effects";
4
2
  import { updateStructureTag } from "../routines";
5
- import { API_STRUCTURE_TAG } from "../api";
6
-
7
- const structureTagPath = compile(API_STRUCTURE_TAG);
3
+ import { UPDATE_STRUCTURE_TAG } from "../api/mutations";
8
4
 
9
5
  export function* updateStructureTagSaga({ payload }) {
6
+ const client = yield getContext("client");
10
7
  try {
11
- const url = structureTagPath(payload);
12
- const requestData = { data_structure_tag: payload };
13
8
  yield put(updateStructureTag.request(payload));
14
- const { data } = yield call(apiJsonPatch, url, requestData, JSON_OPTS);
9
+ const { data } = yield call(client.mutate, {
10
+ mutation: UPDATE_STRUCTURE_TAG,
11
+ variables: { id: payload?.id, structureTag: payload },
12
+ });
15
13
  yield put(updateStructureTag.success(data));
16
14
  } catch (error) {
17
- if (error.response) {
18
- const { status, data } = error.response;
19
- yield put(updateStructureTag.failure({ status, data }));
20
- } else {
21
- yield put(updateStructureTag.failure(error.message));
22
- }
15
+ yield put(updateStructureTag.failure(error.message));
23
16
  } finally {
24
17
  yield put(updateStructureTag.fulfill());
25
18
  }
@@ -7,7 +7,7 @@ describe("selectors: getStructuresUploadEventColumns", () => {
7
7
  it("should return custom structuresUploadEventColumns when present", () => {
8
8
  const structuresUploadEventColumns = [{ name: "test" }];
9
9
  const res = getStructuresUploadEventColumns({
10
- structuresUploadEventColumns
10
+ structuresUploadEventColumns,
11
11
  });
12
12
  expect(res).toHaveLength(1);
13
13
  expect(res).toEqual(structuresUploadEventColumns);
@@ -1,28 +0,0 @@
1
- import { useEffect } from "react";
2
- import PropTypes from "prop-types";
3
- import { connect } from "react-redux";
4
- import { useParams } from "react-router-dom";
5
- import { clearStructureTag, fetchStructureTag } from "../routines";
6
-
7
- export const StructureTagLoader = ({
8
- clearStructureTag,
9
- fetchStructureTag,
10
- }) => {
11
- const { id } = useParams();
12
- useEffect(() => {
13
- fetchStructureTag({ id });
14
- return () => {
15
- clearStructureTag();
16
- };
17
- }, [clearStructureTag, fetchStructureTag, id]);
18
- return null;
19
- };
20
-
21
- StructureTagLoader.propTypes = {
22
- clearStructureTag: PropTypes.func,
23
- fetchStructureTag: PropTypes.func,
24
- };
25
-
26
- export default connect(null, { clearStructureTag, fetchStructureTag })(
27
- StructureTagLoader
28
- );
@@ -1,26 +0,0 @@
1
- import { useEffect } from "react";
2
- import PropTypes from "prop-types";
3
- import { connect } from "react-redux";
4
- import { clearStructureTags, fetchStructureTags } from "../routines";
5
-
6
- export const StructureTagsLoader = ({
7
- clearStructureTags,
8
- fetchStructureTags,
9
- }) => {
10
- useEffect(() => {
11
- fetchStructureTags();
12
- return () => {
13
- clearStructureTags();
14
- };
15
- }, [clearStructureTags, fetchStructureTags]);
16
- return null;
17
- };
18
-
19
- StructureTagsLoader.propTypes = {
20
- clearStructureTags: PropTypes.func,
21
- fetchStructureTags: PropTypes.func,
22
- };
23
-
24
- export default connect(null, { clearStructureTags, fetchStructureTags })(
25
- StructureTagsLoader
26
- );
@@ -1,29 +0,0 @@
1
- import React from "react";
2
- import { shallow, mount } from "enzyme";
3
- import { StructureTagLoader } from "../StructureTagLoader";
4
-
5
- jest.mock("react-router-dom", () => ({
6
- ...jest.requireActual("react-router-dom"),
7
- useParams: () => ({ id: 1 })
8
- }));
9
-
10
- describe("<StructureTagLoader />", () => {
11
- it("matches the latest snapshot", () => {
12
- const fetchStructureTag = jest.fn();
13
- const props = { fetchStructureTag };
14
- const wrapper = shallow(<StructureTagLoader {...props} />);
15
- expect(wrapper).toMatchSnapshot();
16
- });
17
-
18
- it("calls fetchStructureTag when component mounts, clearStructureTag when component unmounts", () => {
19
- const fetchStructureTag = jest.fn();
20
- const clearStructureTag = jest.fn();
21
- const props = { fetchStructureTag, clearStructureTag };
22
- const wrapper = mount(<StructureTagLoader {...props} />);
23
- expect(clearStructureTag.mock.calls.length).toBe(0);
24
- expect(fetchStructureTag.mock.calls.length).toBe(1);
25
- wrapper.unmount();
26
- expect(clearStructureTag.mock.calls.length).toBe(1);
27
- expect(fetchStructureTag.mock.calls.length).toBe(1);
28
- });
29
- });