@truedat/core 8.6.7 → 8.7.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 (131) hide show
  1. package/package.json +3 -3
  2. package/src/components/AddMemberForm.js +3 -3
  3. package/src/components/Alert.js +3 -3
  4. package/src/components/AlertExporter.js +4 -4
  5. package/src/components/AvailableFilters.js +5 -5
  6. package/src/components/CSVFileModal.js +1 -1
  7. package/src/components/CardGroupsAccordion.js +4 -4
  8. package/src/components/CatalogMenu.js +2 -2
  9. package/src/components/CommentsForm.js +1 -1
  10. package/src/components/DomainSearchFilter.js +9 -9
  11. package/src/components/DomainSelector.js +1 -1
  12. package/src/components/FilterDropdown.js +5 -5
  13. package/src/components/FilterMultilevelDropdown.js +9 -9
  14. package/src/components/GlossaryMenu.js +10 -7
  15. package/src/components/Graph.js +199 -127
  16. package/src/components/GroupActions.js +2 -2
  17. package/src/components/Hierarchy.js +1 -1
  18. package/src/components/HierarchyFilterDropdown.js +7 -7
  19. package/src/components/HierarchySelector.js +1 -1
  20. package/src/components/LanguagesTabs.js +2 -2
  21. package/src/components/OptionGroup.js +8 -9
  22. package/src/components/QualityMenu.js +6 -8
  23. package/src/components/ResourceMembers.js +3 -3
  24. package/src/components/SearchFilterDropdown.js +3 -3
  25. package/src/components/SidebarToggle.js +1 -1
  26. package/src/components/Submenu.js +46 -27
  27. package/src/components/SystemsLoader.js +1 -1
  28. package/src/components/TemplatesLoader.js +1 -1
  29. package/src/components/TreeSelector.js +2 -2
  30. package/src/components/UploadJob.js +3 -3
  31. package/src/components/UploadJobBreadcrumbs.js +4 -1
  32. package/src/components/UploadJobParser.js +4 -3
  33. package/src/components/UploadModal.js +1 -1
  34. package/src/components/UserFilter.js +1 -1
  35. package/src/components/UserFilters.js +2 -2
  36. package/src/components/__tests__/ArrayDecorator.spec.js +2 -2
  37. package/src/components/__tests__/CardGroupsAccordion.spec.js +6 -6
  38. package/src/components/__tests__/CatalogMenu.spec.js +1 -1
  39. package/src/components/__tests__/DateTime.spec.js +1 -1
  40. package/src/components/__tests__/DomainSearchFilter.spec.js +2 -2
  41. package/src/components/__tests__/DomainSearchFilterItem.spec.js +7 -7
  42. package/src/components/__tests__/DomainSelector.spec.js +3 -3
  43. package/src/components/__tests__/DropdownMenuItem.spec.js +3 -3
  44. package/src/components/__tests__/FilterDropdown.spec.js +11 -11
  45. package/src/components/__tests__/FilterMultilevelDropdown.spec.js +2 -2
  46. package/src/components/__tests__/GlossaryMenu.spec.js +2 -2
  47. package/src/components/__tests__/Graph.spec.js +12 -4
  48. package/src/components/__tests__/GroupActions.spec.js +4 -4
  49. package/src/components/__tests__/Hierarchy.spec.js +1 -1
  50. package/src/components/__tests__/HierarchyFilterDropdown.spec.js +5 -5
  51. package/src/components/__tests__/HierarchyNodeFinder.spec.js +4 -4
  52. package/src/components/__tests__/HierarchySelector.spec.js +7 -5
  53. package/src/components/__tests__/Markdown.spec.js +22 -8
  54. package/src/components/__tests__/ModalSaveFilter.spec.js +1 -1
  55. package/src/components/__tests__/Pagination.spec.js +2 -2
  56. package/src/components/__tests__/ResourceMembers.spec.js +4 -4
  57. package/src/components/__tests__/SearchDateFilter.spec.js +10 -5
  58. package/src/components/__tests__/SearchFilterDropdown.spec.js +1 -1
  59. package/src/components/__tests__/SelectedFilters.spec.js +7 -7
  60. package/src/components/__tests__/SideMenu.spec.js +1 -1
  61. package/src/components/__tests__/Submenu.spec.js +1 -1
  62. package/src/components/__tests__/TemplateSelector.spec.js +5 -5
  63. package/src/components/__tests__/TreeSelector.spec.js +23 -24
  64. package/src/components/__tests__/UploadJob.spec.js +1 -3
  65. package/src/components/__tests__/UploadJobBreadcrumbs.spec.js +4 -4
  66. package/src/components/__tests__/UploadJobParser.spec.js +42 -38
  67. package/src/components/__tests__/UploadModal.spec.js +9 -9
  68. package/src/components/__tests__/UserFilters.spec.js +1 -1
  69. package/src/components/graph/ColoredEdge.js +29 -23
  70. package/src/components/graph/edgeLayout.js +4 -1
  71. package/src/hooks/__tests__/useActiveRoutes.spec.js +32 -18
  72. package/src/hooks/useAclEntries.js +2 -2
  73. package/src/hooks/useActiveRoutes.js +14 -6
  74. package/src/hooks/useAuthorized.js +3 -3
  75. package/src/hooks/useHierarchies.js +8 -8
  76. package/src/hooks/useLocales.js +3 -3
  77. package/src/hooks/useMessages.js +1 -1
  78. package/src/hooks/useOnScreen.js +1 -1
  79. package/src/hooks/useUploadJobs.js +2 -8
  80. package/src/hooks/useUserFilters.js +1 -1
  81. package/src/i18n/components/LangProvider.js +6 -6
  82. package/src/i18n/components/Languages.js +4 -4
  83. package/src/i18n/components/MessageForm.js +24 -13
  84. package/src/i18n/components/Messages.js +5 -5
  85. package/src/i18n/components/__tests__/I18nRoutes.spec.js +1 -1
  86. package/src/messages/index.js +1 -1
  87. package/src/reducers/comments.js +3 -3
  88. package/src/router/__tests__/ProtectedRoute.spec.js +1 -1
  89. package/src/routes.js +1 -1
  90. package/src/routesTree.js +6 -1
  91. package/src/routines.js +2 -2
  92. package/src/search/FilterDropdown.js +1 -1
  93. package/src/search/FilterMultilevelDropdown.js +10 -10
  94. package/src/search/FilterQueryDropdown.js +4 -4
  95. package/src/search/HierarchyFilterDropdown.js +7 -7
  96. package/src/search/SearchContext.js +19 -19
  97. package/src/search/SearchDateFilter.js +12 -2
  98. package/src/search/SearchFilters.js +1 -1
  99. package/src/search/SearchSelectedFilters.js +1 -1
  100. package/src/search/SearchWidget.js +6 -2
  101. package/src/search/UserFilter.js +1 -1
  102. package/src/search/UserFilters.js +4 -4
  103. package/src/search/__tests__/FilterDropdown.spec.js +3 -3
  104. package/src/search/__tests__/FilterQueryDropdown.spec.js +20 -18
  105. package/src/search/__tests__/ModalSaveFilter.spec.js +2 -2
  106. package/src/search/__tests__/SearchContext.spec.js +42 -42
  107. package/src/search/__tests__/SearchSelectedFilters.spec.js +21 -17
  108. package/src/search/__tests__/SearchWidget.spec.js +4 -4
  109. package/src/selectors/__tests__/getRiSubscopes.spec.js +1 -1
  110. package/src/selectors/__tests__/makeSearchQuerySelector.spec.js +2 -2
  111. package/src/selectors/getConceptSubscope.js +1 -1
  112. package/src/selectors/getDashboardConfig.js +3 -3
  113. package/src/selectors/getMessage.js +3 -3
  114. package/src/selectors/getRecipients.js +3 -3
  115. package/src/selectors/getRiSubscopes.js +2 -2
  116. package/src/selectors/getSidemenuGlossarySubscopes.js +1 -1
  117. package/src/selectors/makeActiveFiltersSelector.js +2 -2
  118. package/src/selectors/makeDateFiltersSelector.js +1 -1
  119. package/src/selectors/makeSearchQuerySelector.js +10 -10
  120. package/src/selectors/makeTagOptionsSelector.js +1 -4
  121. package/src/selectors/subscopedTemplates.js +2 -2
  122. package/src/services/columnPredicate.js +1 -1
  123. package/src/services/dateFilterFormatter.js +1 -1
  124. package/src/services/fieldType.js +1 -1
  125. package/src/services/formRules.js +16 -13
  126. package/src/services/getHierarchyOptions.js +2 -2
  127. package/src/services/message.js +7 -8
  128. package/src/services/operators.js +5 -5
  129. package/src/services/sort.js +2 -2
  130. package/src/services/swr.js +1 -1
  131. package/src/services/tree.js +2 -2
@@ -48,16 +48,14 @@ describe("<TreeSelector />", () => {
48
48
 
49
49
  await waitFor(() => {
50
50
  expect(
51
- rendered.getByRole("option", { name: /foo/i })
51
+ rendered.getByRole("option", { name: /foo/i }),
52
52
  ).toBeInTheDocument();
53
53
  });
54
54
 
55
55
  await user.click(rendered.getByRole("option", { name: /foo/i }));
56
56
  expect(props.onChange.mock.calls.length).toBe(1);
57
57
  expect(props.onChange.mock.calls[0][1]).toEqual({ value: ["1"] });
58
- expect(
59
- rendered.getByRole("option", { name: /foo/i })
60
- ).toBeInTheDocument();
58
+ expect(rendered.getByRole("option", { name: /foo/i })).toBeInTheDocument();
61
59
  });
62
60
 
63
61
  it("calls onChange with selected values (single)", async () => {
@@ -75,7 +73,7 @@ describe("<TreeSelector />", () => {
75
73
 
76
74
  await waitFor(() => {
77
75
  expect(
78
- rendered.getByRole("option", { name: /foo/i })
76
+ rendered.getByRole("option", { name: /foo/i }),
79
77
  ).toBeInTheDocument();
80
78
  });
81
79
 
@@ -83,9 +81,10 @@ describe("<TreeSelector />", () => {
83
81
  expect(props.onChange.mock.calls.length).toBe(1);
84
82
  expect(props.onChange.mock.calls[0][1]).toEqual({ value: "1" });
85
83
  await waitFor(() => {
86
- expect(
87
- rendered.getByRole("listbox")
88
- ).toHaveAttribute("aria-expanded", "false");
84
+ expect(rendered.getByRole("listbox")).toHaveAttribute(
85
+ "aria-expanded",
86
+ "false",
87
+ );
89
88
  });
90
89
  });
91
90
 
@@ -109,31 +108,31 @@ describe("<TreeSelector />", () => {
109
108
 
110
109
  await waitFor(() => {
111
110
  expect(
112
- rendered.getByRole("option", { name: /foo/i })
111
+ rendered.getByRole("option", { name: /foo/i }),
113
112
  ).toBeInTheDocument();
114
113
  });
115
114
 
116
115
  await user.click(
117
116
  rendered
118
117
  .getByRole("option", { name: /foo/i })
119
- .querySelector('i[class="chevron right icon"]')
118
+ .querySelector('i[class="chevron right icon"]'),
120
119
  );
121
120
 
122
121
  await waitFor(() => {
123
122
  expect(
124
- rendered.getByRole("option", { name: /bar/i })
123
+ rendered.getByRole("option", { name: /bar/i }),
125
124
  ).toBeInTheDocument();
126
125
  });
127
126
 
128
127
  await user.click(
129
128
  rendered
130
129
  .getByRole("option", { name: /bar/i })
131
- .querySelector('i[class="chevron right icon"]')
130
+ .querySelector('i[class="chevron right icon"]'),
132
131
  );
133
132
 
134
133
  await waitFor(() => {
135
134
  expect(
136
- rendered.getByRole("option", { name: /baz/i })
135
+ rendered.getByRole("option", { name: /baz/i }),
137
136
  ).toBeInTheDocument();
138
137
  });
139
138
 
@@ -163,19 +162,19 @@ describe("<TreeSelector />", () => {
163
162
 
164
163
  await waitFor(() => {
165
164
  expect(
166
- rendered.getByRole("option", { name: /foo/i })
165
+ rendered.getByRole("option", { name: /foo/i }),
167
166
  ).toBeInTheDocument();
168
167
  });
169
168
 
170
169
  await user.click(
171
170
  rendered
172
171
  .getByRole("option", { name: /foo/i })
173
- .querySelector('i[class="chevron right icon"]')
172
+ .querySelector('i[class="chevron right icon"]'),
174
173
  );
175
174
 
176
175
  await waitFor(() => {
177
176
  expect(
178
- rendered.getByRole("option", { name: /bar/i })
177
+ rendered.getByRole("option", { name: /bar/i }),
179
178
  ).toBeInTheDocument();
180
179
  });
181
180
 
@@ -203,31 +202,31 @@ describe("<TreeSelector />", () => {
203
202
 
204
203
  await waitFor(() => {
205
204
  expect(
206
- rendered.getByRole("option", { name: /foo/i })
205
+ rendered.getByRole("option", { name: /foo/i }),
207
206
  ).toBeInTheDocument();
208
207
  });
209
208
 
210
209
  await user.click(
211
210
  rendered
212
211
  .getByRole("option", { name: /foo/i })
213
- .querySelector('i[class="chevron right icon"]')
212
+ .querySelector('i[class="chevron right icon"]'),
214
213
  );
215
214
 
216
215
  await waitFor(() => {
217
216
  expect(
218
- rendered.getByRole("option", { name: /bar/i })
217
+ rendered.getByRole("option", { name: /bar/i }),
219
218
  ).toBeInTheDocument();
220
219
  });
221
220
 
222
221
  await user.click(
223
222
  rendered
224
223
  .getByRole("option", { name: /bar/i })
225
- .querySelector('i[class="chevron right icon"]')
224
+ .querySelector('i[class="chevron right icon"]'),
226
225
  );
227
226
 
228
227
  await waitFor(() => {
229
228
  expect(
230
- rendered.getByRole("option", { name: /baz/i })
229
+ rendered.getByRole("option", { name: /baz/i }),
231
230
  ).toBeInTheDocument();
232
231
  });
233
232
 
@@ -256,19 +255,19 @@ describe("<TreeSelector />", () => {
256
255
 
257
256
  await waitFor(() => {
258
257
  expect(
259
- rendered.getByRole("option", { name: /foo/i })
258
+ rendered.getByRole("option", { name: /foo/i }),
260
259
  ).toBeInTheDocument();
261
260
  });
262
261
 
263
262
  await user.click(
264
263
  rendered
265
264
  .getByRole("option", { name: /foo/i })
266
- .querySelector('i[class="chevron right icon"]')
265
+ .querySelector('i[class="chevron right icon"]'),
267
266
  );
268
267
 
269
268
  await waitFor(() => {
270
269
  expect(
271
- rendered.getByRole("option", { name: /bar/i })
270
+ rendered.getByRole("option", { name: /bar/i }),
272
271
  ).toBeInTheDocument();
273
272
  });
274
273
 
@@ -104,9 +104,7 @@ describe("<UploadJob />", () => {
104
104
 
105
105
  // COMPLETED events are always visible
106
106
  expect(
107
- rendered.getAllByText(
108
- /uploadJob.parser.event.status.COMPLETED/i
109
- )
107
+ rendered.getAllByText(/uploadJob.parser.event.status.COMPLETED/i),
110
108
  ).toHaveLength(2);
111
109
  });
112
110
  });
@@ -7,7 +7,7 @@ describe("ImplementationUploadJobBreadcrumbs", () => {
7
7
  await waitForLoad(rendered);
8
8
 
9
9
  expect(
10
- rendered.getByText(/uploadJobs.implementations.header/i)
10
+ rendered.getByText(/uploadJobs.implementations.header/i),
11
11
  ).toBeInTheDocument();
12
12
  expect(rendered.container).toMatchSnapshot();
13
13
  });
@@ -17,19 +17,19 @@ describe("ImplementationUploadJobBreadcrumbs", () => {
17
17
  await waitForLoad(rendered);
18
18
 
19
19
  expect(
20
- rendered.getByText(/uploadJobs.myscope.header/i)
20
+ rendered.getByText(/uploadJobs.myscope.header/i),
21
21
  ).toBeInTheDocument();
22
22
  });
23
23
 
24
24
  it("renders breadcrumbs with filename", async () => {
25
25
  const filename = "test.csv";
26
26
  const rendered = render(
27
- <UploadJobBreadcrumbs scope="implementations" filename={filename} />
27
+ <UploadJobBreadcrumbs scope="implementations" filename={filename} />,
28
28
  );
29
29
  await waitForLoad(rendered);
30
30
 
31
31
  expect(
32
- rendered.getByText(/uploadJobs.implementations.header/i)
32
+ rendered.getByText(/uploadJobs.implementations.header/i),
33
33
  ).toBeInTheDocument();
34
34
  expect(rendered.getByText(filename)).toBeInTheDocument();
35
35
  expect(rendered.container).toMatchSnapshot();
@@ -13,8 +13,8 @@ describe("<StatusPill />", () => {
13
13
  expect(label).toHaveClass(expectedColors[index]);
14
14
  expect(
15
15
  rendered.getByText(
16
- new RegExp(`uploadJob.parser.event.status.${status}`, "i")
17
- )
16
+ new RegExp(`uploadJob.parser.event.status.${status}`, "i"),
17
+ ),
18
18
  ).toBeInTheDocument();
19
19
  });
20
20
  });
@@ -23,7 +23,7 @@ describe("<StatusPill />", () => {
23
23
  describe("<ResponseCell />", () => {
24
24
  it("returns null when response is empty", () => {
25
25
  const rendered = render(
26
- <ResponseCell response={null} status="COMPLETED" />
26
+ <ResponseCell response={null} status="COMPLETED" />,
27
27
  );
28
28
  expect(rendered.container.firstChild).toBeNull();
29
29
 
@@ -34,7 +34,7 @@ describe("<ResponseCell />", () => {
34
34
  it("renders FAILED status with message", () => {
35
35
  const response = { message: "missing_required_headers" };
36
36
  const rendered = render(
37
- <ResponseCell response={response} status="FAILED" />
37
+ <ResponseCell response={response} status="FAILED" />,
38
38
  );
39
39
  expect(rendered.getByText(/missing_required_headers/i)).toBeInTheDocument();
40
40
  });
@@ -47,10 +47,10 @@ describe("<ResponseCell />", () => {
47
47
  },
48
48
  };
49
49
  const rendered = render(
50
- <ResponseCell response={response} status="ERROR" />
50
+ <ResponseCell response={response} status="ERROR" />,
51
51
  );
52
52
  expect(
53
- rendered.getByText(/uploadJob.parser.error.missing_required_headers/i)
53
+ rendered.getByText(/uploadJob.parser.error.missing_required_headers/i),
54
54
  ).toBeInTheDocument();
55
55
  expect(rendered.getByText(/header1, header2/i)).toBeInTheDocument();
56
56
  });
@@ -62,13 +62,13 @@ describe("<ResponseCell />", () => {
62
62
  error_count: 0,
63
63
  };
64
64
  const rendered = render(
65
- <ResponseCell response={response} status="COMPLETED" />
65
+ <ResponseCell response={response} status="COMPLETED" />,
66
66
  );
67
67
  expect(
68
- rendered.getByText(/uploadJob.parser.result.summary.created/i)
68
+ rendered.getByText(/uploadJob.parser.result.summary.created/i),
69
69
  ).toBeInTheDocument();
70
70
  expect(
71
- rendered.getByText(/uploadJob.parser.result.summary.updated/i)
71
+ rendered.getByText(/uploadJob.parser.result.summary.updated/i),
72
72
  ).toBeInTheDocument();
73
73
  });
74
74
 
@@ -84,7 +84,7 @@ describe("<ResponseCell />", () => {
84
84
  };
85
85
  const rendered = render(<ResponseCell response={response} status="INFO" />);
86
86
  expect(
87
- rendered.getByText(/uploadJob.parser.info.implementation_updated/i)
87
+ rendered.getByText(/uploadJob.parser.info.implementation_updated/i),
88
88
  ).toBeInTheDocument();
89
89
  });
90
90
 
@@ -97,13 +97,15 @@ describe("<ResponseCell />", () => {
97
97
  },
98
98
  };
99
99
  const rendered = render(<ResponseCell response={response} status="INFO" />);
100
- expect(rendered.getByText(/uploadJob.parser.info.deprecated_implementation/i)).toBeInTheDocument();
100
+ expect(
101
+ rendered.getByText(/uploadJob.parser.info.deprecated_implementation/i),
102
+ ).toBeInTheDocument();
101
103
  });
102
104
 
103
105
  it("renders default case for unknown status", () => {
104
106
  const response = "some text";
105
107
  const rendered = render(
106
- <ResponseCell response={response} status="UNKNOWN" />
108
+ <ResponseCell response={response} status="UNKNOWN" />,
107
109
  );
108
110
  expect(rendered.getByText(/some text/i)).toBeInTheDocument();
109
111
  });
@@ -131,7 +133,7 @@ describe("<ResponseCell />", () => {
131
133
  };
132
134
  const rendered = render(
133
135
  <ResponseCell response={response} status="ERROR" />,
134
- renderOpts
136
+ renderOpts,
135
137
  );
136
138
  expect(rendered.getByText(/structure note error/i)).toBeInTheDocument();
137
139
  expect(rendered.getByText(/content unchanged/i)).toBeInTheDocument();
@@ -140,7 +142,7 @@ describe("<ResponseCell />", () => {
140
142
  it("returns null when ERROR response has no type", () => {
141
143
  const response = { details: {} };
142
144
  const rendered = render(
143
- <ResponseCell response={response} status="ERROR" />
145
+ <ResponseCell response={response} status="ERROR" />,
144
146
  );
145
147
  expect(rendered.container.firstChild).toBeNull();
146
148
  });
@@ -151,10 +153,10 @@ describe("<ResponseCell />", () => {
151
153
  details: { template_name: "My Template" },
152
154
  };
153
155
  const rendered = render(
154
- <ResponseCell response={response} status="ERROR" />
156
+ <ResponseCell response={response} status="ERROR" />,
155
157
  );
156
158
  expect(
157
- rendered.getByText(/uploadJob.parser.error.invalid_template_name/i)
159
+ rendered.getByText(/uploadJob.parser.error.invalid_template_name/i),
158
160
  ).toBeInTheDocument();
159
161
  expect(rendered.getByText(/My Template/i)).toBeInTheDocument();
160
162
  });
@@ -165,10 +167,10 @@ describe("<ResponseCell />", () => {
165
167
  details: { duplicate_fields: ["col_a", "col_b"] },
166
168
  };
167
169
  const rendered = render(
168
- <ResponseCell response={response} status="ERROR" />
170
+ <ResponseCell response={response} status="ERROR" />,
169
171
  );
170
172
  expect(
171
- rendered.getByText(/uploadJob.parser.error.duplicate_field_names/i)
173
+ rendered.getByText(/uploadJob.parser.error.duplicate_field_names/i),
172
174
  ).toBeInTheDocument();
173
175
  expect(rendered.getByText(/col_a, col_b/i)).toBeInTheDocument();
174
176
  });
@@ -182,12 +184,12 @@ describe("<ResponseCell />", () => {
182
184
  ],
183
185
  };
184
186
  const rendered = render(
185
- <ResponseCell response={response} status="ERROR" />
187
+ <ResponseCell response={response} status="ERROR" />,
186
188
  );
187
189
  expect(
188
190
  rendered.getByText(
189
- /uploadJob.parser.error.implementation_creation_error/i
190
- )
191
+ /uploadJob.parser.error.implementation_creation_error/i,
192
+ ),
191
193
  ).toBeInTheDocument();
192
194
  expect(rendered.getByText(/Name is required/i)).toBeInTheDocument();
193
195
  expect(rendered.getByText(/Key is invalid/i)).toBeInTheDocument();
@@ -202,7 +204,7 @@ describe("<ResponseCell />", () => {
202
204
  ],
203
205
  };
204
206
  const rendered = render(
205
- <ResponseCell response={response} status="ERROR" />
207
+ <ResponseCell response={response} status="ERROR" />,
206
208
  );
207
209
  expect(rendered.getByText(/Invalid/i)).toBeInTheDocument();
208
210
  expect(rendered.getByText(/Duplicate/i)).toBeInTheDocument();
@@ -219,10 +221,10 @@ describe("<ResponseCell />", () => {
219
221
  },
220
222
  };
221
223
  const rendered = render(
222
- <ResponseCell response={response} status="ERROR" />
224
+ <ResponseCell response={response} status="ERROR" />,
223
225
  );
224
226
  expect(
225
- rendered.getByText(/uploadJob.parser.error.field_validation_error/i)
227
+ rendered.getByText(/uploadJob.parser.error.field_validation_error/i),
226
228
  ).toBeInTheDocument();
227
229
  expect(rendered.getByText(/Required/i)).toBeInTheDocument();
228
230
  expect(rendered.getByText(/Already exists/i)).toBeInTheDocument();
@@ -234,10 +236,10 @@ describe("<ResponseCell />", () => {
234
236
  details: { implementation_key: "old_impl_key" },
235
237
  };
236
238
  const rendered = render(
237
- <ResponseCell response={response} status="ERROR" />
239
+ <ResponseCell response={response} status="ERROR" />,
238
240
  );
239
241
  expect(
240
- rendered.getByText(/uploadJob.parser.error.deprecated_implementation/i)
242
+ rendered.getByText(/uploadJob.parser.error.deprecated_implementation/i),
241
243
  ).toBeInTheDocument();
242
244
  expect(rendered.getByText(/old_impl_key/i)).toBeInTheDocument();
243
245
  });
@@ -257,7 +259,7 @@ describe("<ResponseCell />", () => {
257
259
  };
258
260
  const rendered = render(
259
261
  <ResponseCell response={response} status="ERROR" />,
260
- renderOpts
262
+ renderOpts,
261
263
  );
262
264
  expect(rendered.getByText(/unreject failed/i)).toBeInTheDocument();
263
265
  expect(rendered.getByText(/Workflow in progress/i)).toBeInTheDocument();
@@ -272,21 +274,21 @@ describe("<ResponseCell />", () => {
272
274
  invalid_sheet_count: 0,
273
275
  };
274
276
  const rendered = render(
275
- <ResponseCell response={response} status="COMPLETED" />
277
+ <ResponseCell response={response} status="COMPLETED" />,
276
278
  );
277
279
  expect(
278
- rendered.queryByText(/uploadJob.parser.result.summary.created/i)
280
+ rendered.queryByText(/uploadJob.parser.result.summary.created/i),
279
281
  ).not.toBeInTheDocument();
280
282
  });
281
283
 
282
284
  it("renders default case with object response as JSON", () => {
283
285
  const response = { code: "ERR_001", description: "Something failed" };
284
286
  const rendered = render(
285
- <ResponseCell response={response} status="UNKNOWN" />
287
+ <ResponseCell response={response} status="UNKNOWN" />,
286
288
  );
287
289
  expect(rendered.getByText(/"code":\s*"ERR_001"/i)).toBeInTheDocument();
288
290
  expect(
289
- rendered.getByText(/"description":\s*"Something failed"/i)
291
+ rendered.getByText(/"description":\s*"Something failed"/i),
290
292
  ).toBeInTheDocument();
291
293
  });
292
294
 
@@ -303,14 +305,16 @@ describe("<ResponseCell />", () => {
303
305
  const user = userEvent.setup({ delay: null });
304
306
  const rendered = render(<ResponseCell response={response} status="INFO" />);
305
307
  expect(
306
- rendered.getByText(/uploadJob.parser.info.implementation_updated/i)
308
+ rendered.getByText(/uploadJob.parser.info.implementation_updated/i),
307
309
  ).toBeInTheDocument();
308
310
  expect(
309
- rendered.getByText(/uploadJob.parser.result.prop.changes/i)
311
+ rendered.getByText(/uploadJob.parser.result.prop.changes/i),
310
312
  ).toBeInTheDocument();
311
313
  expect(rendered.getByText(/\(2\)/)).toBeInTheDocument();
312
314
  await user.click(
313
- rendered.getByText(/uploadJob.parser.result.prop.changes/i).closest("div")
315
+ rendered
316
+ .getByText(/uploadJob.parser.result.prop.changes/i)
317
+ .closest("div"),
314
318
  );
315
319
  expect(rendered.getByText(/New Name/i)).toBeInTheDocument();
316
320
  expect(rendered.getByText(/Updated description/i)).toBeInTheDocument();
@@ -330,11 +334,11 @@ describe("<ResponseCell />", () => {
330
334
  const user = userEvent.setup({ delay: null });
331
335
  const rendered = render(<ResponseCell response={response} status="INFO" />);
332
336
  const changesHeader = rendered.getByText(
333
- /uploadJob.parser.result.prop.changes/i
337
+ /uploadJob.parser.result.prop.changes/i,
334
338
  );
335
339
  await user.click(changesHeader.closest("div"));
336
340
  expect(
337
- rendered.getByText(/ruleImplementations.props.df_content/i)
341
+ rendered.getByText(/ruleImplementations.props.df_content/i),
338
342
  ).toBeInTheDocument();
339
343
  });
340
344
 
@@ -346,7 +350,7 @@ describe("<ResponseCell />", () => {
346
350
  details: { missing_headers: ["H1"] },
347
351
  };
348
352
  const rendered = render(
349
- <ResponseCell response={response} status="ERROR" />
353
+ <ResponseCell response={response} status="ERROR" />,
350
354
  );
351
355
  expect(rendered.getByText(/Sheet1/i)).toBeInTheDocument();
352
356
  expect(rendered.getByText(/5/)).toBeInTheDocument();
@@ -356,7 +360,7 @@ describe("<ResponseCell />", () => {
356
360
  const response = { type: "some_info" };
357
361
  const rendered = render(<ResponseCell response={response} status="INFO" />);
358
362
  expect(
359
- rendered.getByText(/uploadJob.parser.info.some_info/i)
363
+ rendered.getByText(/uploadJob.parser.info.some_info/i),
360
364
  ).toBeInTheDocument();
361
365
  });
362
366
 
@@ -43,12 +43,12 @@ describe.skip("<UploadModal />", () => {
43
43
  param: "implementations",
44
44
  handleSubmit: onClickYesAction,
45
45
  }}
46
- />
46
+ />,
47
47
  );
48
48
  await waitForLoad(rendered);
49
49
 
50
50
  await user.click(
51
- rendered.getByRole("option", { name: /trigger element/i })
51
+ rendered.getByRole("option", { name: /trigger element/i }),
52
52
  );
53
53
 
54
54
  const yesActionButton = rendered.getByRole("button", {
@@ -63,7 +63,7 @@ describe.skip("<UploadModal />", () => {
63
63
 
64
64
  expect(rendered.getByText(/trigger element/i)).toBeInTheDocument();
65
65
  expect(
66
- rendered.getByText(/uploadModal.actions.upload.confirmation.content/i)
66
+ rendered.getByText(/uploadModal.actions.upload.confirmation.content/i),
67
67
  ).toBeInTheDocument();
68
68
  });
69
69
 
@@ -77,12 +77,12 @@ describe.skip("<UploadModal />", () => {
77
77
  param: "implementations",
78
78
  handleSubmit: onClickYesAction,
79
79
  }}
80
- />
80
+ />,
81
81
  );
82
82
  await waitForLoad(rendered);
83
83
 
84
84
  await user.click(
85
- rendered.getByRole("option", { name: /trigger element/i })
85
+ rendered.getByRole("option", { name: /trigger element/i }),
86
86
  );
87
87
 
88
88
  const yesActionButton = rendered.getByRole("button", {
@@ -100,7 +100,7 @@ describe.skip("<UploadModal />", () => {
100
100
  });
101
101
 
102
102
  const dropZone = rendered.getByText(
103
- /uploadModal.actions.upload.confirmation.content/i
103
+ /uploadModal.actions.upload.confirmation.content/i,
104
104
  );
105
105
  const data = mockData([fakeFile]);
106
106
 
@@ -128,12 +128,12 @@ describe.skip("<UploadModal />", () => {
128
128
  param: "implementations",
129
129
  handleSubmit: onClickYesAction,
130
130
  }}
131
- />
131
+ />,
132
132
  );
133
133
  await waitForLoad(rendered);
134
134
 
135
135
  await user.click(
136
- rendered.getByRole("option", { name: /trigger element/i })
136
+ rendered.getByRole("option", { name: /trigger element/i }),
137
137
  );
138
138
 
139
139
  const yesActionButton = rendered.getByRole("button", {
@@ -151,7 +151,7 @@ describe.skip("<UploadModal />", () => {
151
151
  });
152
152
 
153
153
  const dropZone = rendered.getByText(
154
- /uploadModal.actions.upload.confirmation.content/i
154
+ /uploadModal.actions.upload.confirmation.content/i,
155
155
  );
156
156
  const data = mockData([fakeFile]);
157
157
 
@@ -186,7 +186,7 @@ describe("<UserFilters /> for taxonomy screens", () => {
186
186
  expect(rendered.queryByText(/hide multiple domain filter/i)).toBeNull();
187
187
  expect(rendered.queryByText(/hide other domain filter/i)).toBeNull();
188
188
  expect(
189
- rendered.getByText(/show status and domain filter/i)
189
+ rendered.getByText(/show status and domain filter/i),
190
190
  ).toBeInTheDocument();
191
191
  });
192
192
  });
@@ -14,7 +14,10 @@ const getCurveOffset = ({ sourceX, sourceY, targetX, targetY }) => {
14
14
 
15
15
  return Math.max(
16
16
  MIN_CURVE_OFFSET,
17
- Math.min(MAX_CURVE_OFFSET, horizontalDistance * 0.28 + verticalDistance * 0.04)
17
+ Math.min(
18
+ MAX_CURVE_OFFSET,
19
+ horizontalDistance * 0.28 + verticalDistance * 0.04,
20
+ ),
18
21
  );
19
22
  };
20
23
 
@@ -38,21 +41,14 @@ const getBezierPoint = (t, p0, p1, p2, p3) => {
38
41
  const mt2 = mt * mt;
39
42
  const t2 = t * t;
40
43
 
41
- return (
42
- mt2 * mt * p0 +
43
- 3 * mt2 * t * p1 +
44
- 3 * mt * t2 * p2 +
45
- t2 * t * p3
46
- );
44
+ return mt2 * mt * p0 + 3 * mt2 * t * p1 + 3 * mt * t2 * p2 + t2 * t * p3;
47
45
  };
48
46
 
49
47
  const getBezierDerivative = (t, p0, p1, p2, p3) => {
50
48
  const mt = 1 - t;
51
49
 
52
50
  return (
53
- 3 * mt * mt * (p1 - p0) +
54
- 6 * mt * t * (p2 - p1) +
55
- 3 * t * t * (p3 - p2)
51
+ 3 * mt * mt * (p1 - p0) + 6 * mt * t * (p2 - p1) + 3 * t * t * (p3 - p2)
56
52
  );
57
53
  };
58
54
 
@@ -76,7 +72,7 @@ const ColoredEdge = ({
76
72
  const [hovered, setHovered] = useState(false);
77
73
  const targetSlotOffset = getTargetSlotOffset(
78
74
  data.targetSlotIndex,
79
- data.targetSlotCount
75
+ data.targetSlotCount,
80
76
  );
81
77
  const adjustedTargetY = targetY + targetSlotOffset;
82
78
  const curveOffset = getCurveOffset({
@@ -90,13 +86,13 @@ const ColoredEdge = ({
90
86
  sourceX,
91
87
  sourceY,
92
88
  sourcePosition,
93
- curveOffset
89
+ curveOffset,
94
90
  );
95
91
  const targetControl = getControlPoint(
96
92
  targetX,
97
93
  adjustedTargetY,
98
94
  targetPosition,
99
- curveOffset
95
+ curveOffset,
100
96
  );
101
97
  const targetTangent = normalizeVector(
102
98
  getBezierDerivative(1, sourceX, sourceControl.x, targetControl.x, targetX),
@@ -105,14 +101,26 @@ const ColoredEdge = ({
105
101
  sourceY,
106
102
  sourceControl.y,
107
103
  targetControl.y,
108
- adjustedTargetY
109
- )
104
+ adjustedTargetY,
105
+ ),
110
106
  );
111
107
  const lineTargetX = targetX - targetTangent.x * EDGE_ARROW_LENGTH;
112
108
  const lineTargetY = adjustedTargetY - targetTangent.y * EDGE_ARROW_LENGTH;
113
109
  const edgePath = `M ${sourceX},${sourceY} C ${sourceControl.x},${sourceControl.y} ${targetControl.x},${targetControl.y} ${lineTargetX},${lineTargetY}`;
114
- const labelX = getBezierPoint(0.5, sourceX, sourceControl.x, targetControl.x, lineTargetX);
115
- const labelY = getBezierPoint(0.5, sourceY, sourceControl.y, targetControl.y, lineTargetY);
110
+ const labelX = getBezierPoint(
111
+ 0.5,
112
+ sourceX,
113
+ sourceControl.x,
114
+ targetControl.x,
115
+ lineTargetX,
116
+ );
117
+ const labelY = getBezierPoint(
118
+ 0.5,
119
+ sourceY,
120
+ sourceControl.y,
121
+ targetControl.y,
122
+ lineTargetY,
123
+ );
116
124
  const arrowNormalX = -targetTangent.y;
117
125
  const arrowNormalY = targetTangent.x;
118
126
  const arrowLeftX = lineTargetX + arrowNormalX * (EDGE_ARROW_WIDTH / 2);
@@ -122,11 +130,7 @@ const ColoredEdge = ({
122
130
 
123
131
  return (
124
132
  <>
125
- <BaseEdge
126
- id={id}
127
- path={edgePath}
128
- style={style}
129
- />
133
+ <BaseEdge id={id} path={edgePath} style={style} />
130
134
  <circle
131
135
  cx={sourceX}
132
136
  cy={sourceY}
@@ -153,7 +157,9 @@ const ColoredEdge = ({
153
157
  <EdgeLabelRenderer>
154
158
  <div
155
159
  className="td-graph-edge-label nodrag nopan"
156
- style={{ transform: `translate(-50%, -50%) translate(${labelX}px,${labelY}px)` }}
160
+ style={{
161
+ transform: `translate(-50%, -50%) translate(${labelX}px,${labelY}px)`,
162
+ }}
157
163
  >
158
164
  {data.label}
159
165
  </div>
@@ -4,7 +4,10 @@ const MAX_TARGET_SLOT_SPAN = 22;
4
4
  export const getTargetSlotOffset = (slotIndex = 0, slotCount = 1) => {
5
5
  if (!slotCount || slotCount <= 1) return 0;
6
6
 
7
- const totalSpan = Math.min((slotCount - 1) * TARGET_SLOT_STEP, MAX_TARGET_SLOT_SPAN);
7
+ const totalSpan = Math.min(
8
+ (slotCount - 1) * TARGET_SLOT_STEP,
9
+ MAX_TARGET_SLOT_SPAN,
10
+ );
8
11
  const step = totalSpan / (slotCount - 1);
9
12
 
10
13
  return -totalSpan / 2 + slotIndex * step;