@truedat/bg 7.10.4 → 7.11.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 (27) hide show
  1. package/package.json +3 -3
  2. package/src/concepts/components/ConceptLinksUploadButton.js +0 -4
  3. package/src/concepts/components/ConceptRoutes.js +28 -46
  4. package/src/concepts/components/__tests__/ConceptRoutes.spec.js +201 -0
  5. package/src/concepts/components/__tests__/__snapshots__/ConceptRoutes.spec.js.snap +165 -0
  6. package/src/concepts/relations/api.js +9 -1
  7. package/src/concepts/relations/components/ConceptImplementationLinks.js +2 -1
  8. package/src/concepts/relations/components/ConceptLinksApprovalResults.js +91 -0
  9. package/src/concepts/relations/components/ConceptLinksApprovals.js +225 -0
  10. package/src/concepts/relations/components/ConceptLinksApprovalsLabelResults.js +42 -0
  11. package/src/concepts/relations/components/ConceptLinksApprovalsRow.js +43 -0
  12. package/src/concepts/relations/components/ConceptLinksApprovalsTable.js +104 -0
  13. package/src/concepts/relations/components/__tests__/ConceptLinksApprovalResults.spec.js +123 -0
  14. package/src/concepts/relations/components/__tests__/ConceptLinksApprovals.spec.js +77 -0
  15. package/src/concepts/relations/components/__tests__/ConceptLinksApprovalsLabelResults.spec.js +46 -0
  16. package/src/concepts/relations/components/__tests__/ConceptLinksApprovalsRow.spec.js +68 -0
  17. package/src/concepts/relations/components/__tests__/ConceptLinksApprovalsTable.spec.js +107 -0
  18. package/src/concepts/relations/components/__tests__/__snapshots__/ConceptImplementationLinks.spec.js.snap +32 -32
  19. package/src/concepts/relations/components/__tests__/__snapshots__/ConceptLinksApprovalResults.spec.js.snap +217 -0
  20. package/src/concepts/relations/components/__tests__/__snapshots__/ConceptLinksApprovals.spec.js.snap +559 -0
  21. package/src/concepts/relations/components/__tests__/__snapshots__/ConceptLinksApprovalsLabelResults.spec.js.snap +34 -0
  22. package/src/concepts/relations/components/__tests__/__snapshots__/ConceptLinksApprovalsRow.spec.js.snap +47 -0
  23. package/src/concepts/relations/components/__tests__/__snapshots__/ConceptLinksApprovalsTable.spec.js.snap +132 -0
  24. package/src/concepts/relations/hooks/useLinks.js +25 -0
  25. package/src/concepts/relations/selectors/getLinksSearchColumns.js +106 -0
  26. package/src/concepts/relations/selectors/index.js +2 -0
  27. package/src/concepts/relations/styles/ConceptLinksApprovals.less +15 -0
@@ -0,0 +1,68 @@
1
+ import { render, waitForLoad } from "@truedat/test/render";
2
+ import { ConceptLinksApprovalsRow } from "../ConceptLinksApprovalsRow";
3
+
4
+ describe("ConceptLinksApprovalsRow", () => {
5
+ const defaultProps = {
6
+ checked: false,
7
+ columns: [
8
+ {
9
+ key: "name",
10
+ textAlign: "left",
11
+ },
12
+ ],
13
+ onCheckboxChange: jest.fn(),
14
+ link: {
15
+ id: "123",
16
+ name: "Test Link",
17
+ },
18
+ approveView: false,
19
+ };
20
+
21
+ it("renders null when columns are empty", async () => {
22
+ const rendered = render(
23
+ <ConceptLinksApprovalsRow {...defaultProps} columns={[]} />
24
+ );
25
+ await waitForLoad(rendered);
26
+ expect(rendered.container).toMatchSnapshot();
27
+ });
28
+
29
+ it("renders null when link is empty", async () => {
30
+ const rendered = render(
31
+ <ConceptLinksApprovalsRow {...defaultProps} link={{}} />
32
+ );
33
+ await waitForLoad(rendered);
34
+ expect(rendered.container).toMatchSnapshot();
35
+ });
36
+
37
+ it("renders row with checkbox when approveView is true", async () => {
38
+ const rendered = render(
39
+ <ConceptLinksApprovalsRow {...defaultProps} approveView={true} />
40
+ );
41
+ await waitForLoad(rendered);
42
+ expect(rendered.container).toMatchSnapshot();
43
+ });
44
+
45
+ it("renders row without checkbox when approveView is false", async () => {
46
+ const rendered = render(
47
+ <ConceptLinksApprovalsRow {...defaultProps} approveView={false} />
48
+ );
49
+ await waitForLoad(rendered);
50
+ expect(rendered.container).toMatchSnapshot();
51
+ });
52
+
53
+ it("calls onCheckboxChange when checkbox is clicked", async () => {
54
+ const onCheckboxChange = jest.fn();
55
+ const rendered = render(
56
+ <ConceptLinksApprovalsRow
57
+ {...defaultProps}
58
+ approveView={true}
59
+ onCheckboxChange={onCheckboxChange}
60
+ />
61
+ );
62
+ await waitForLoad(rendered);
63
+
64
+ const checkbox = rendered.container.querySelector("input[type='checkbox']");
65
+ checkbox.click();
66
+ expect(onCheckboxChange).toHaveBeenCalled();
67
+ });
68
+ });
@@ -0,0 +1,107 @@
1
+ import { render, waitForLoad } from "@truedat/test/render";
2
+ import { useSearchContext } from "@truedat/core/search/SearchContext";
3
+ import { ConceptLinksApprovalsTable } from "../ConceptLinksApprovalsTable";
4
+
5
+ jest.mock("@truedat/core/search/SearchContext", () => {
6
+ const originalModule = jest.requireActual(
7
+ "@truedat/core/search/SearchContext"
8
+ );
9
+
10
+ return {
11
+ __esModule: true,
12
+ ...originalModule,
13
+ useSearchContext: jest.fn(),
14
+ };
15
+ });
16
+
17
+ describe("ConceptLinksApprovalsTable", () => {
18
+ const mockColumns = [
19
+ { name: "source_name", width: 4 },
20
+ { name: "target_name", width: 4 },
21
+ { name: "tag_type", width: 2 },
22
+ { name: "status", width: 2 },
23
+ { name: "updated_at", width: 2 },
24
+ ];
25
+
26
+ beforeEach(() => {
27
+ useSearchContext.mockReturnValue({
28
+ searchData: {
29
+ data: [
30
+ {
31
+ id: 1,
32
+ source_name: "Concept 1",
33
+ target_name: "Structure 1",
34
+ tag_type: "relates_to",
35
+ status: "pending",
36
+ updated_at: "2023-01-01",
37
+ },
38
+ ],
39
+ },
40
+ loading: false,
41
+ sortColumn: null,
42
+ sortDirection: null,
43
+ handleSortSelection: jest.fn(),
44
+ });
45
+ });
46
+
47
+ it("matches the latest snapshot with data", async () => {
48
+ const props = {
49
+ columns: mockColumns,
50
+ approveView: true,
51
+ checkedAll: false,
52
+ addAll: jest.fn(),
53
+ checkRow: jest.fn(),
54
+ isRowChecked: jest.fn(),
55
+ };
56
+
57
+ const rendered = render(<ConceptLinksApprovalsTable {...props} />);
58
+ await waitForLoad(rendered);
59
+ expect(rendered.container).toMatchSnapshot();
60
+ });
61
+
62
+ it("matches the latest snapshot with empty data", async () => {
63
+ useSearchContext.mockReturnValue({
64
+ searchData: { data: [] },
65
+ loading: false,
66
+ sortColumn: null,
67
+ sortDirection: null,
68
+ handleSortSelection: jest.fn(),
69
+ });
70
+
71
+ const props = {
72
+ columns: mockColumns,
73
+ approveView: true,
74
+ checkedAll: false,
75
+ addAll: jest.fn(),
76
+ checkRow: jest.fn(),
77
+ isRowChecked: jest.fn(),
78
+ };
79
+
80
+ const rendered = render(<ConceptLinksApprovalsTable {...props} />);
81
+ await waitForLoad(rendered);
82
+ expect(rendered.container).toMatchSnapshot();
83
+ });
84
+
85
+ it("matches the latest snapshot while loading", async () => {
86
+ useSearchContext.mockReturnValue({
87
+ searchData: { data: [] },
88
+ loading: true,
89
+ sortColumn: null,
90
+ sortDirection: null,
91
+ handleSortSelection: jest.fn(),
92
+ });
93
+
94
+ const props = {
95
+ columns: mockColumns,
96
+ approveView: true,
97
+ checkedAll: false,
98
+ addAll: jest.fn(),
99
+ checkRow: jest.fn(),
100
+ isRowChecked: jest.fn(),
101
+ };
102
+
103
+ const rendered = render(<ConceptLinksApprovalsTable {...props} />);
104
+ await waitForLoad(rendered);
105
+ expect(rendered.container).toMatchSnapshot();
106
+ });
107
+ });
@@ -29,42 +29,42 @@ exports[`<ConceptImplementationLinks /> matches the latest snapshot 1`] = `
29
29
  class=""
30
30
  >
31
31
  <th
32
- class="two wide ascending sorted disabled"
32
+ class="two wide disabled"
33
33
  >
34
34
  ruleImplementations.props.implementation_key
35
35
  </th>
36
36
  <th
37
- class="two wide ascending sorted disabled"
37
+ class="two wide disabled"
38
38
  >
39
39
  ruleImplementations.props.rule
40
40
  </th>
41
41
  <th
42
- class="two wide ascending sorted disabled"
42
+ class="two wide disabled"
43
43
  >
44
44
  ruleImplementations.props.status
45
45
  </th>
46
46
  <th
47
- class="two wide ascending sorted disabled"
47
+ class="two wide disabled"
48
48
  >
49
49
  ruleImplementations.props.last_execution_at
50
50
  </th>
51
51
  <th
52
- class="two wide ascending sorted disabled"
52
+ class="two wide disabled"
53
53
  >
54
54
  ruleImplementations.props.result_type
55
55
  </th>
56
56
  <th
57
- class="one wide ascending sorted disabled"
57
+ class="one wide disabled"
58
58
  >
59
59
  ruleImplementations.props.minimum
60
60
  </th>
61
61
  <th
62
- class="one wide ascending sorted disabled"
62
+ class="one wide disabled"
63
63
  >
64
64
  ruleImplementations.props.goal
65
65
  </th>
66
66
  <th
67
- class="two wide ascending sorted disabled"
67
+ class="two wide disabled"
68
68
  >
69
69
  ruleImplementations.props.result
70
70
  </th>
@@ -151,42 +151,42 @@ exports[`<ConceptImplementationLinks /> show create implementations buttons when
151
151
  class=""
152
152
  >
153
153
  <th
154
- class="two wide ascending sorted disabled"
154
+ class="two wide disabled"
155
155
  >
156
156
  ruleImplementations.props.implementation_key
157
157
  </th>
158
158
  <th
159
- class="two wide ascending sorted disabled"
159
+ class="two wide disabled"
160
160
  >
161
161
  ruleImplementations.props.rule
162
162
  </th>
163
163
  <th
164
- class="two wide ascending sorted disabled"
164
+ class="two wide disabled"
165
165
  >
166
166
  ruleImplementations.props.status
167
167
  </th>
168
168
  <th
169
- class="two wide ascending sorted disabled"
169
+ class="two wide disabled"
170
170
  >
171
171
  ruleImplementations.props.last_execution_at
172
172
  </th>
173
173
  <th
174
- class="two wide ascending sorted disabled"
174
+ class="two wide disabled"
175
175
  >
176
176
  ruleImplementations.props.result_type
177
177
  </th>
178
178
  <th
179
- class="one wide ascending sorted disabled"
179
+ class="one wide disabled"
180
180
  >
181
181
  ruleImplementations.props.minimum
182
182
  </th>
183
183
  <th
184
- class="one wide ascending sorted disabled"
184
+ class="one wide disabled"
185
185
  >
186
186
  ruleImplementations.props.goal
187
187
  </th>
188
188
  <th
189
- class="two wide ascending sorted disabled"
189
+ class="two wide disabled"
190
190
  >
191
191
  ruleImplementations.props.result
192
192
  </th>
@@ -273,42 +273,42 @@ exports[`<ConceptImplementationLinks /> show implementations with groups 1`] = `
273
273
  class=""
274
274
  >
275
275
  <th
276
- class="two wide ascending sorted disabled"
276
+ class="two wide disabled"
277
277
  >
278
278
  ruleImplementations.props.implementation_key
279
279
  </th>
280
280
  <th
281
- class="two wide ascending sorted disabled"
281
+ class="two wide disabled"
282
282
  >
283
283
  ruleImplementations.props.rule
284
284
  </th>
285
285
  <th
286
- class="two wide ascending sorted disabled"
286
+ class="two wide disabled"
287
287
  >
288
288
  ruleImplementations.props.status
289
289
  </th>
290
290
  <th
291
- class="two wide ascending sorted disabled"
291
+ class="two wide disabled"
292
292
  >
293
293
  ruleImplementations.props.last_execution_at
294
294
  </th>
295
295
  <th
296
- class="two wide ascending sorted disabled"
296
+ class="two wide disabled"
297
297
  >
298
298
  ruleImplementations.props.result_type
299
299
  </th>
300
300
  <th
301
- class="one wide ascending sorted disabled"
301
+ class="one wide disabled"
302
302
  >
303
303
  ruleImplementations.props.minimum
304
304
  </th>
305
305
  <th
306
- class="one wide ascending sorted disabled"
306
+ class="one wide disabled"
307
307
  >
308
308
  ruleImplementations.props.goal
309
309
  </th>
310
310
  <th
311
- class="two wide ascending sorted disabled"
311
+ class="two wide disabled"
312
312
  >
313
313
  ruleImplementations.props.result
314
314
  </th>
@@ -383,42 +383,42 @@ exports[`<ConceptImplementationLinks /> show implementations with groups 1`] = `
383
383
  class=""
384
384
  >
385
385
  <th
386
- class="two wide ascending sorted disabled"
386
+ class="two wide disabled"
387
387
  >
388
388
  ruleImplementations.props.implementation_key
389
389
  </th>
390
390
  <th
391
- class="two wide ascending sorted disabled"
391
+ class="two wide disabled"
392
392
  >
393
393
  ruleImplementations.props.rule
394
394
  </th>
395
395
  <th
396
- class="two wide ascending sorted disabled"
396
+ class="two wide disabled"
397
397
  >
398
398
  ruleImplementations.props.status
399
399
  </th>
400
400
  <th
401
- class="two wide ascending sorted disabled"
401
+ class="two wide disabled"
402
402
  >
403
403
  ruleImplementations.props.last_execution_at
404
404
  </th>
405
405
  <th
406
- class="two wide ascending sorted disabled"
406
+ class="two wide disabled"
407
407
  >
408
408
  ruleImplementations.props.result_type
409
409
  </th>
410
410
  <th
411
- class="one wide ascending sorted disabled"
411
+ class="one wide disabled"
412
412
  >
413
413
  ruleImplementations.props.minimum
414
414
  </th>
415
415
  <th
416
- class="one wide ascending sorted disabled"
416
+ class="one wide disabled"
417
417
  >
418
418
  ruleImplementations.props.goal
419
419
  </th>
420
420
  <th
421
- class="two wide ascending sorted disabled"
421
+ class="two wide disabled"
422
422
  >
423
423
  ruleImplementations.props.result
424
424
  </th>
@@ -0,0 +1,217 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`<LinksApprovalResults /> renders approval results with relations and errors 1`] = `
4
+ <div>
5
+ <div
6
+ class="ui breadcrumb"
7
+ >
8
+ <a
9
+ class="section"
10
+ data-discover="true"
11
+ href="/concepts/management/approvals"
12
+ >
13
+ conceptRelations.approvals.header
14
+ </a>
15
+ <i
16
+ aria-hidden="true"
17
+ class="right angle icon divider"
18
+ />
19
+ <div
20
+ class="active section"
21
+ >
22
+ conceptRelations.approvals.results.header
23
+ </div>
24
+ </div>
25
+ <div
26
+ class="ui positive message"
27
+ >
28
+ <div
29
+ class="header"
30
+ >
31
+ conceptRelations.approvals.results.approved.header
32
+ </div>
33
+ <li
34
+ class="content"
35
+ >
36
+ conceptRelations.approvals.results.message.source_name
37
+ <a
38
+ data-discover="true"
39
+ href="/concepts/10/versions/current"
40
+ target="_blank"
41
+ >
42
+ Source 1
43
+ </a>
44
+ conceptRelations.approvals.results.message.target_name
45
+ <a
46
+ data-discover="true"
47
+ href="/structures/20"
48
+ target="_blank"
49
+ >
50
+ Target 1
51
+ </a>
52
+ </li>
53
+ </div>
54
+ <div
55
+ class="ui error message"
56
+ >
57
+ <div
58
+ class="header"
59
+ >
60
+ conceptRelations.approvals.results.errors.permissions.header
61
+ </div>
62
+ <li
63
+ class="content"
64
+ >
65
+ conceptRelations.approvals.results.message.source_name
66
+ <a
67
+ data-discover="true"
68
+ href="/concepts/11/versions/current"
69
+ target="_blank"
70
+ >
71
+ Source 2
72
+ </a>
73
+ conceptRelations.approvals.results.message.target_name
74
+ <a
75
+ data-discover="true"
76
+ href="/structures/21"
77
+ target="_blank"
78
+ >
79
+ Target 2
80
+ </a>
81
+ </li>
82
+ </div>
83
+ </div>
84
+ `;
85
+
86
+ exports[`<LinksApprovalResults /> renders rejection results 1`] = `
87
+ <div>
88
+ <div
89
+ class="ui breadcrumb"
90
+ >
91
+ <a
92
+ class="section"
93
+ data-discover="true"
94
+ href="/concepts/management/approvals"
95
+ >
96
+ conceptRelations.approvals.header
97
+ </a>
98
+ <i
99
+ aria-hidden="true"
100
+ class="right angle icon divider"
101
+ />
102
+ <div
103
+ class="active section"
104
+ >
105
+ conceptRelations.approvals.results.header
106
+ </div>
107
+ </div>
108
+ <div
109
+ class="ui warning message"
110
+ >
111
+ <div
112
+ class="header"
113
+ >
114
+ conceptRelations.approvals.results.rejected.header
115
+ </div>
116
+ <li
117
+ class="content"
118
+ >
119
+ conceptRelations.approvals.results.message.source_name
120
+ <a
121
+ data-discover="true"
122
+ href="/concepts/12/versions/current"
123
+ target="_blank"
124
+ >
125
+ Source 3
126
+ </a>
127
+ conceptRelations.approvals.results.message.target_name
128
+ <a
129
+ data-discover="true"
130
+ href="/structures/22"
131
+ target="_blank"
132
+ >
133
+ Target 3
134
+ </a>
135
+ </li>
136
+ </div>
137
+ </div>
138
+ `;
139
+
140
+ exports[`<LinksApprovalResults /> renders with empty relations and errors 1`] = `
141
+ <div>
142
+ <div
143
+ class="ui breadcrumb"
144
+ >
145
+ <a
146
+ class="section"
147
+ data-discover="true"
148
+ href="/concepts/management/approvals"
149
+ >
150
+ conceptRelations.approvals.header
151
+ </a>
152
+ <i
153
+ aria-hidden="true"
154
+ class="right angle icon divider"
155
+ />
156
+ <div
157
+ class="active section"
158
+ >
159
+ conceptRelations.approvals.results.header
160
+ </div>
161
+ </div>
162
+ </div>
163
+ `;
164
+
165
+ exports[`<LinksApprovalResults /> renders with no errors 1`] = `
166
+ <div>
167
+ <div
168
+ class="ui breadcrumb"
169
+ >
170
+ <a
171
+ class="section"
172
+ data-discover="true"
173
+ href="/concepts/management/approvals"
174
+ >
175
+ conceptRelations.approvals.header
176
+ </a>
177
+ <i
178
+ aria-hidden="true"
179
+ class="right angle icon divider"
180
+ />
181
+ <div
182
+ class="active section"
183
+ >
184
+ conceptRelations.approvals.results.header
185
+ </div>
186
+ </div>
187
+ <div
188
+ class="ui positive message"
189
+ >
190
+ <div
191
+ class="header"
192
+ >
193
+ conceptRelations.approvals.results.approved.header
194
+ </div>
195
+ <li
196
+ class="content"
197
+ >
198
+ conceptRelations.approvals.results.message.source_name
199
+ <a
200
+ data-discover="true"
201
+ href="/concepts/13/versions/current"
202
+ target="_blank"
203
+ >
204
+ Source 4
205
+ </a>
206
+ conceptRelations.approvals.results.message.target_name
207
+ <a
208
+ data-discover="true"
209
+ href="/structures/23"
210
+ target="_blank"
211
+ >
212
+ Target 4
213
+ </a>
214
+ </li>
215
+ </div>
216
+ </div>
217
+ `;