@truedat/dd 4.40.12 → 4.41.0
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.
- package/CHANGELOG.md +12 -0
- package/package.json +6 -6
- package/src/api.js +3 -0
- package/src/components/DictionaryRoutes.js +17 -1
- package/src/components/PendingStructureNoteRow.js +45 -0
- package/src/components/PendingStructureNotes.js +149 -0
- package/src/components/PendingStructureNotesTable.js +73 -0
- package/src/components/StructuresDomainsUploadOption.js +52 -0
- package/src/components/StructuresOptions.js +4 -0
- package/src/components/__tests__/PendingStructureNoteRow.spec.js +48 -0
- package/src/components/__tests__/PendingStructureNotes.spec.js +102 -0
- package/src/components/__tests__/PendingStructureNotesTable.spec.js +83 -0
- package/src/components/__tests__/StructuresOptions.spec.js +6 -1
- package/src/components/__tests__/__snapshots__/DictionaryRoutes.spec.js.snap +4 -0
- package/src/components/__tests__/__snapshots__/PendingStructureNoteRow.spec.js.snap +35 -0
- package/src/components/__tests__/__snapshots__/PendingStructureNotes.spec.js.snap +126 -0
- package/src/components/__tests__/__snapshots__/PendingStructureNotesTable.spec.js.snap +123 -0
- package/src/components/__tests__/__snapshots__/StructuresOptions.spec.js.snap +14 -0
- package/src/messages/en.js +27 -0
- package/src/messages/es.js +30 -0
- package/src/reducers/__tests__/ddMessage.spec.js +76 -0
- package/src/reducers/ddMessage.js +51 -8
- package/src/routines.js +1 -0
- package/src/sagas/__tests__/uploadStructuresDomains.spec.js +81 -0
- package/src/sagas/index.js +3 -0
- package/src/sagas/uploadStructuresDomains.js +35 -0
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
bulkUpdateStructures,
|
|
5
5
|
uploadStructures,
|
|
6
6
|
updateStructureType,
|
|
7
|
+
uploadStructuresDomains,
|
|
7
8
|
} from "../routines";
|
|
8
9
|
|
|
9
10
|
const initialState = null;
|
|
@@ -18,10 +19,7 @@ const ddMessage = (state = initialState, { type, payload }) => {
|
|
|
18
19
|
? _.flow(
|
|
19
20
|
_.propOr([], "errors"),
|
|
20
21
|
_.map((error) => ({
|
|
21
|
-
id:
|
|
22
|
-
type == bulkUpdateStructures.SUCCESS
|
|
23
|
-
? `structures.bulkUpdateStructures.failed.note.${error.message}`
|
|
24
|
-
: `structures.uploadStructures.failed.note.${error.message}`,
|
|
22
|
+
id: `structures.bulkUpdateStructures.failed.note.${error.message}`,
|
|
25
23
|
fields: {
|
|
26
24
|
row: error.row,
|
|
27
25
|
id: error.id,
|
|
@@ -29,10 +27,7 @@ const ddMessage = (state = initialState, { type, payload }) => {
|
|
|
29
27
|
externalId: error.external_id,
|
|
30
28
|
message: error.message,
|
|
31
29
|
},
|
|
32
|
-
defaultMessage:
|
|
33
|
-
type == bulkUpdateStructures.SUCCESS
|
|
34
|
-
? "structures.bulkUpdateStructures.success.errors"
|
|
35
|
-
: "structures.bulkUploadStructures.success.errors",
|
|
30
|
+
defaultMessage: "structures.bulkUploadStructures.success.errors",
|
|
36
31
|
}))
|
|
37
32
|
)(payload.data)
|
|
38
33
|
: "";
|
|
@@ -51,6 +46,54 @@ const ddMessage = (state = initialState, { type, payload }) => {
|
|
|
51
46
|
initialMaxListItems: 5,
|
|
52
47
|
};
|
|
53
48
|
}
|
|
49
|
+
|
|
50
|
+
case uploadStructuresDomains.SUCCESS: {
|
|
51
|
+
const messagesImp = _.has("errors")(payload.data)
|
|
52
|
+
? _.flow(
|
|
53
|
+
_.propOr([], "errors"),
|
|
54
|
+
_.map((error) => {
|
|
55
|
+
const errorMessage = Object.entries(error.message)
|
|
56
|
+
.map(([field, messages]) => `${field}: ${messages.join(", ")}`)
|
|
57
|
+
.join(" | ");
|
|
58
|
+
return {
|
|
59
|
+
id: `structures.bulkUploadStructuresDomains.success.errors.${errorMessage}`,
|
|
60
|
+
fields: {
|
|
61
|
+
row: error.row,
|
|
62
|
+
id: error.id,
|
|
63
|
+
field: error.field,
|
|
64
|
+
externalId: error.external_id,
|
|
65
|
+
message: errorMessage,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
})
|
|
69
|
+
)(payload.data)
|
|
70
|
+
: "";
|
|
71
|
+
return {
|
|
72
|
+
error: false,
|
|
73
|
+
header: "structures.bulkUploadStructuresDomains.success.header",
|
|
74
|
+
icon: "check",
|
|
75
|
+
color: payload.data.errors.length >= 1 ? "orange" : "green",
|
|
76
|
+
text: "",
|
|
77
|
+
messages: messagesImp,
|
|
78
|
+
fields: {
|
|
79
|
+
count_ids: payload.data.ids.length,
|
|
80
|
+
count_errors: payload.data.errors.length,
|
|
81
|
+
},
|
|
82
|
+
downloadable: true,
|
|
83
|
+
initialMaxListItems: 5,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
case uploadStructuresDomains.FAILURE:
|
|
88
|
+
return payload.status !== 422
|
|
89
|
+
? state
|
|
90
|
+
: {
|
|
91
|
+
error: true,
|
|
92
|
+
header: "structures.uploadStructuresDomains.failed.header",
|
|
93
|
+
icon: "attention",
|
|
94
|
+
content: payload?.data?.error?.message,
|
|
95
|
+
};
|
|
96
|
+
|
|
54
97
|
case updateStructureType.SUCCESS:
|
|
55
98
|
return {
|
|
56
99
|
error: false,
|
package/src/routines.js
CHANGED
|
@@ -132,6 +132,7 @@ export const updateStructureTag = createRoutine("UPDATE_STRUCTURE_TAG");
|
|
|
132
132
|
export const updateStructureType = createRoutine("UPDATE_STRUCTURE_TYPE");
|
|
133
133
|
export const updateSystem = createRoutine("UPDATE_SYSTEM");
|
|
134
134
|
export const uploadStructures = createRoutine("UPLOAD_STRUCTURES");
|
|
135
|
+
export const uploadStructuresDomains = createRoutine("UPLOAD_STRUCTURES_DOMAINS");
|
|
135
136
|
export const addGrantRequestToCart = createRoutine("ADD_GRANT_REQUEST_TO_CART");
|
|
136
137
|
export const removeGrantRequestFromCart = createRoutine(
|
|
137
138
|
"REMOVE_GRANT_REQUEST_FROM_CART"
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { testSaga } from "redux-saga-test-plan";
|
|
2
|
+
import { apiJsonPost, UPLOAD_JSON_OPTS } from "@truedat/core/services/api";
|
|
3
|
+
import {
|
|
4
|
+
uploadStructuresDomainsRequestSaga,
|
|
5
|
+
uploadStructuresDomainsSaga,
|
|
6
|
+
} from "../uploadStructuresDomains";
|
|
7
|
+
import { uploadStructuresDomains } from "../../routines";
|
|
8
|
+
import { API_STRUCTURES_DOMAINS_UPLOAD } from "../../api";
|
|
9
|
+
|
|
10
|
+
describe("sagas: uploadStructuresDomainsRequestSaga", () => {
|
|
11
|
+
it("should invoke uploadStructuresDomainsSaga on trigger", () => {
|
|
12
|
+
expect(() => {
|
|
13
|
+
testSaga(uploadStructuresDomainsRequestSaga)
|
|
14
|
+
.next()
|
|
15
|
+
.takeLatest(
|
|
16
|
+
uploadStructuresDomains.TRIGGER,
|
|
17
|
+
uploadStructuresDomainsSaga
|
|
18
|
+
)
|
|
19
|
+
.finish()
|
|
20
|
+
.isDone();
|
|
21
|
+
}).not.toThrow();
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it("should throw exception if an unhandled action is received", () => {
|
|
25
|
+
expect(() => {
|
|
26
|
+
testSaga(uploadStructuresDomainsRequestSaga)
|
|
27
|
+
.next()
|
|
28
|
+
.takeLatest("FOO", uploadStructuresDomainsSaga);
|
|
29
|
+
}).toThrow();
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
describe("sagas: uploadStructuresDomainsSaga", () => {
|
|
34
|
+
const body = { structures_domains: "content" };
|
|
35
|
+
const payload = { data: body };
|
|
36
|
+
const data = { message: [1, 2] };
|
|
37
|
+
it("should put a success action when a response is returned", () => {
|
|
38
|
+
expect(() => {
|
|
39
|
+
testSaga(uploadStructuresDomainsSaga, { payload })
|
|
40
|
+
.next()
|
|
41
|
+
.put(uploadStructuresDomains.request())
|
|
42
|
+
.next()
|
|
43
|
+
.call(
|
|
44
|
+
apiJsonPost,
|
|
45
|
+
API_STRUCTURES_DOMAINS_UPLOAD,
|
|
46
|
+
body,
|
|
47
|
+
UPLOAD_JSON_OPTS
|
|
48
|
+
)
|
|
49
|
+
.next({ data })
|
|
50
|
+
.put(uploadStructuresDomains.success({ data }))
|
|
51
|
+
.next()
|
|
52
|
+
.put(uploadStructuresDomains.fulfill())
|
|
53
|
+
.next()
|
|
54
|
+
.isDone();
|
|
55
|
+
}).not.toThrow();
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it("should put a failure action when the call returns an error", () => {
|
|
59
|
+
const message = "Request failed";
|
|
60
|
+
const error = { message };
|
|
61
|
+
|
|
62
|
+
expect(() => {
|
|
63
|
+
testSaga(uploadStructuresDomainsSaga, { payload })
|
|
64
|
+
.next()
|
|
65
|
+
.put(uploadStructuresDomains.request())
|
|
66
|
+
.next()
|
|
67
|
+
.call(
|
|
68
|
+
apiJsonPost,
|
|
69
|
+
API_STRUCTURES_DOMAINS_UPLOAD,
|
|
70
|
+
body,
|
|
71
|
+
UPLOAD_JSON_OPTS
|
|
72
|
+
)
|
|
73
|
+
.throw(error)
|
|
74
|
+
.put(uploadStructuresDomains.failure(message))
|
|
75
|
+
.next()
|
|
76
|
+
.put(uploadStructuresDomains.fulfill())
|
|
77
|
+
.next()
|
|
78
|
+
.isDone();
|
|
79
|
+
}).not.toThrow();
|
|
80
|
+
});
|
|
81
|
+
});
|
package/src/sagas/index.js
CHANGED
|
@@ -46,6 +46,7 @@ import { updateStructureTagRequestSaga } from "./updateStructureTag";
|
|
|
46
46
|
import { updateStructureTypeRequestSaga } from "./updateStructureType";
|
|
47
47
|
import { updateSystemRequestSaga } from "./updateSystem";
|
|
48
48
|
import { uploadStructuresRequestSaga } from "./uploadStructures";
|
|
49
|
+
import { uploadStructuresDomainsRequestSaga } from "./uploadStructuresDomains";
|
|
49
50
|
import { operateGrantRequestToCartRequestSaga } from "./operateGrantRequestCart";
|
|
50
51
|
|
|
51
52
|
export {
|
|
@@ -97,6 +98,7 @@ export {
|
|
|
97
98
|
updateStructureTypeRequestSaga,
|
|
98
99
|
updateSystemRequestSaga,
|
|
99
100
|
uploadStructuresRequestSaga,
|
|
101
|
+
uploadStructuresDomainsRequestSaga,
|
|
100
102
|
operateGrantRequestToCartRequestSaga,
|
|
101
103
|
};
|
|
102
104
|
|
|
@@ -149,5 +151,6 @@ export default [
|
|
|
149
151
|
updateStructureTypeRequestSaga(),
|
|
150
152
|
updateSystemRequestSaga(),
|
|
151
153
|
uploadStructuresRequestSaga(),
|
|
154
|
+
uploadStructuresDomainsRequestSaga(),
|
|
152
155
|
operateGrantRequestToCartRequestSaga(),
|
|
153
156
|
];
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { call, put, takeLatest } from "redux-saga/effects";
|
|
2
|
+
import { apiJsonPost, UPLOAD_JSON_OPTS } from "@truedat/core/services/api";
|
|
3
|
+
import { uploadStructuresDomains } from "../routines";
|
|
4
|
+
import { API_STRUCTURES_DOMAINS_UPLOAD } from "../api";
|
|
5
|
+
|
|
6
|
+
export function* uploadStructuresDomainsSaga({ payload }) {
|
|
7
|
+
try {
|
|
8
|
+
const { data: body } = payload;
|
|
9
|
+
yield put(uploadStructuresDomains.request());
|
|
10
|
+
const { data } = yield call(
|
|
11
|
+
apiJsonPost,
|
|
12
|
+
API_STRUCTURES_DOMAINS_UPLOAD,
|
|
13
|
+
body,
|
|
14
|
+
UPLOAD_JSON_OPTS
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
yield put(uploadStructuresDomains.success({ data }));
|
|
18
|
+
} catch (error) {
|
|
19
|
+
if (error.response) {
|
|
20
|
+
const { status, data } = error.response;
|
|
21
|
+
yield put(uploadStructuresDomains.failure({ status, data }));
|
|
22
|
+
} else {
|
|
23
|
+
yield put(uploadStructuresDomains.failure(error.message));
|
|
24
|
+
}
|
|
25
|
+
} finally {
|
|
26
|
+
yield put(uploadStructuresDomains.fulfill());
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function* uploadStructuresDomainsRequestSaga() {
|
|
31
|
+
yield takeLatest(
|
|
32
|
+
uploadStructuresDomains.TRIGGER,
|
|
33
|
+
uploadStructuresDomainsSaga
|
|
34
|
+
);
|
|
35
|
+
}
|