@truedat/qx 7.5.9 → 7.5.10

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 (229) hide show
  1. package/package.json +45 -64
  2. package/src/components/QxRoutes.js +38 -19
  3. package/src/components/__tests__/QxRoutes.spec.js +73 -0
  4. package/src/components/__tests__/__snapshots__/QxRoutes.spec.js.snap +60 -0
  5. package/src/components/common/ClauseViewer.js +6 -6
  6. package/src/components/common/DescriptionInput.js +0 -1
  7. package/src/components/common/ResourceSelector.js +2 -3
  8. package/src/components/common/TestFormWrapper.js +2 -13
  9. package/src/components/common/TypeSelector.js +0 -1
  10. package/src/components/common/__tests__/DescriptionInput.spec.js +12 -21
  11. package/src/components/common/__tests__/ResourceSelector.spec.js +42 -87
  12. package/src/components/common/__tests__/TypeSelector.spec.js +0 -1
  13. package/src/components/common/__tests__/__snapshots__/ResourceSelector.spec.js.snap +32 -22
  14. package/src/components/common/expressions/Clauses.js +5 -6
  15. package/src/components/common/expressions/Condition.js +8 -9
  16. package/src/components/common/expressions/ConstantSelector.js +2 -2
  17. package/src/components/common/expressions/Expression.js +2 -2
  18. package/src/components/common/expressions/FieldSelector.js +2 -2
  19. package/src/components/common/expressions/FunctionArgs.js +5 -6
  20. package/src/components/common/expressions/FunctionSelector.js +2 -2
  21. package/src/components/common/expressions/ParamSelector.js +2 -2
  22. package/src/components/common/expressions/ShapeSelector.js +7 -16
  23. package/src/components/common/expressions/__tests__/Clauses.spec.js +10 -9
  24. package/src/components/common/expressions/__tests__/Condition.spec.js +6 -26
  25. package/src/components/common/expressions/__tests__/ConstantSelector.spec.js +14 -30
  26. package/src/components/common/expressions/__tests__/Expression.spec.js +44 -51
  27. package/src/components/common/expressions/__tests__/FieldSelector.spec.js +2 -7
  28. package/src/components/common/expressions/__tests__/FunctionArgs.spec.js +18 -44
  29. package/src/components/common/expressions/__tests__/FunctionSelector.spec.js +19 -27
  30. package/src/components/common/expressions/__tests__/ParamSelector.spec.js +28 -58
  31. package/src/components/common/expressions/__tests__/ShapeSelector.spec.js +42 -43
  32. package/src/components/common/expressions/__tests__/__snapshots__/Condition.spec.js.snap +6 -6
  33. package/src/components/common/expressions/__tests__/__snapshots__/ConstantSelector.spec.js.snap +6 -7
  34. package/src/components/common/expressions/__tests__/__snapshots__/Expression.spec.js.snap +20 -20
  35. package/src/components/common/expressions/__tests__/__snapshots__/FunctionArgs.spec.js.snap +8 -9
  36. package/src/components/common/expressions/__tests__/__snapshots__/FunctionSelector.spec.js.snap +670 -8
  37. package/src/components/common/expressions/__tests__/__snapshots__/ParamSelector.spec.js.snap +5 -5
  38. package/src/components/common/expressions/__tests__/__snapshots__/ShapeSelector.spec.js.snap +9 -9
  39. package/src/components/common/expressions/__tests__/useWatchParams.spec.js +1 -4
  40. package/src/components/common/expressions/constantInputs/AnySelector.js +5 -6
  41. package/src/components/common/expressions/constantInputs/BooleanSelector.js +2 -2
  42. package/src/components/common/expressions/constantInputs/DefaultSelector.js +2 -2
  43. package/src/components/common/expressions/constantInputs/__tests__/AnySelector.spec.js +16 -37
  44. package/src/components/common/expressions/constantInputs/__tests__/BooleanSelector.spec.js +14 -17
  45. package/src/components/common/expressions/constantInputs/__tests__/DefaultSelector.spec.js +12 -27
  46. package/src/components/common/expressions/constantInputs/__tests__/__snapshots__/AnySelector.spec.js.snap +11 -11
  47. package/src/components/common/expressions/constantInputs/__tests__/__snapshots__/DefaultSelector.spec.js.snap +0 -1
  48. package/src/components/common/resourceSelectors/DataStructureSelector.js +2 -2
  49. package/src/components/common/resourceSelectors/DataViewSelector.js +2 -2
  50. package/src/components/common/resourceSelectors/ReferenceDatasetSelector.js +2 -2
  51. package/src/components/common/resourceSelectors/__tests__/DataStructureSelector.spec.js +5 -29
  52. package/src/components/common/resourceSelectors/__tests__/DataViewSelector.spec.js +23 -25
  53. package/src/components/common/resourceSelectors/__tests__/ReferenceDatasetSelector.spec.js +21 -32
  54. package/src/components/common/resourceSelectors/__tests__/__snapshots__/DataStructureSelector.spec.js.snap +3 -4
  55. package/src/components/common/resourceSelectors/__tests__/__snapshots__/DataViewSelector.spec.js.snap +1 -1
  56. package/src/components/common/resourceSelectors/__tests__/__snapshots__/ReferenceDatasetSelector.spec.js.snap +1 -1
  57. package/src/components/dataViews/DataViewEditor.js +5 -6
  58. package/src/components/dataViews/DataViewSelect.js +4 -5
  59. package/src/components/dataViews/DataViews.js +1 -2
  60. package/src/components/dataViews/Queryable.js +4 -4
  61. package/src/components/dataViews/Queryables.js +0 -1
  62. package/src/components/dataViews/__tests__/DataViewEditor.spec.js +36 -111
  63. package/src/components/dataViews/__tests__/DataViewSelect.spec.js +0 -1
  64. package/src/components/dataViews/__tests__/DataViews.spec.js +15 -16
  65. package/src/components/dataViews/__tests__/Queryable.spec.js +0 -1
  66. package/src/components/dataViews/__tests__/Queryables.spec.js +35 -74
  67. package/src/components/dataViews/__tests__/__snapshots__/DataViewEditor.spec.js.snap +61 -55
  68. package/src/components/dataViews/__tests__/__snapshots__/DataViews.spec.js.snap +5 -5
  69. package/src/components/dataViews/__tests__/__snapshots__/Queryables.spec.js.snap +59 -59
  70. package/src/components/dataViews/queryableProperties/From.js +4 -4
  71. package/src/components/dataViews/queryableProperties/GroupBy.js +6 -6
  72. package/src/components/dataViews/queryableProperties/Join.js +6 -6
  73. package/src/components/dataViews/queryableProperties/JoinTypeIcon.js +8 -9
  74. package/src/components/dataViews/queryableProperties/Select.js +4 -5
  75. package/src/components/dataViews/queryableProperties/SelectField.js +4 -4
  76. package/src/components/dataViews/queryableProperties/Where.js +4 -4
  77. package/src/components/dataViews/queryableProperties/__tests__/From.spec.js +0 -1
  78. package/src/components/dataViews/queryableProperties/__tests__/GroupBy.spec.js +16 -42
  79. package/src/components/dataViews/queryableProperties/__tests__/Join.spec.js +6 -29
  80. package/src/components/dataViews/queryableProperties/__tests__/JoinTypeIcon.spec.js +0 -1
  81. package/src/components/dataViews/queryableProperties/__tests__/Select.spec.js +26 -50
  82. package/src/components/dataViews/queryableProperties/__tests__/SelectField.spec.js +22 -42
  83. package/src/components/dataViews/queryableProperties/__tests__/Where.spec.js +6 -17
  84. package/src/components/dataViews/queryableProperties/__tests__/__snapshots__/GroupBy.spec.js.snap +309 -9
  85. package/src/components/dataViews/queryableProperties/__tests__/__snapshots__/Join.spec.js.snap +12 -12
  86. package/src/components/dataViews/queryableProperties/__tests__/__snapshots__/Select.spec.js.snap +192 -18
  87. package/src/components/dataViews/queryableProperties/__tests__/__snapshots__/SelectField.spec.js.snap +6 -8
  88. package/src/components/dataViews/queryableProperties/__tests__/__snapshots__/Where.spec.js.snap +2 -2
  89. package/src/components/functions/FunctionEditor.js +3 -5
  90. package/src/components/functions/FunctionParams.js +2 -3
  91. package/src/components/functions/Functions.js +3 -4
  92. package/src/components/functions/__tests__/FunctionEditor.spec.js +61 -57
  93. package/src/components/functions/__tests__/FunctionParams.spec.js +50 -47
  94. package/src/components/functions/__tests__/Functions.spec.js +5 -12
  95. package/src/components/functions/__tests__/__snapshots__/FunctionParams.spec.js.snap +11 -11
  96. package/src/components/functions/__tests__/__snapshots__/Functions.spec.js.snap +4 -5
  97. package/src/components/qualityControls/ControlProperties.js +4 -4
  98. package/src/components/qualityControls/ControlPropertiesView.js +0 -1
  99. package/src/components/qualityControls/EditQualityControl.js +5 -5
  100. package/src/components/qualityControls/IconPopup.js +0 -1
  101. package/src/components/qualityControls/NewDraftQualityControl.js +8 -6
  102. package/src/components/qualityControls/NewQualityControl.js +5 -6
  103. package/src/components/qualityControls/QualityBadge.js +29 -30
  104. package/src/components/qualityControls/QualityControl.js +4 -7
  105. package/src/components/qualityControls/QualityControlActions.js +7 -7
  106. package/src/components/qualityControls/QualityControlCrumbs.js +1 -3
  107. package/src/components/qualityControls/QualityControlEditor.js +5 -11
  108. package/src/components/qualityControls/QualityControlHeader.js +4 -6
  109. package/src/components/qualityControls/QualityControlHistory.js +3 -3
  110. package/src/components/qualityControls/QualityControlManageDomain.js +2 -2
  111. package/src/components/qualityControls/QualityControlQueryModal.js +1 -1
  112. package/src/components/qualityControls/QualityControlRoutes.js +27 -54
  113. package/src/components/qualityControls/QualityControlRow.js +0 -2
  114. package/src/components/qualityControls/QualityControlScores.js +7 -5
  115. package/src/components/qualityControls/QualityControlTabs.js +2 -2
  116. package/src/components/qualityControls/QualityControls.js +10 -8
  117. package/src/components/qualityControls/QualityControlsLabelResults.js +0 -2
  118. package/src/components/qualityControls/QualityControlsPagination.js +0 -1
  119. package/src/components/qualityControls/QualityControlsTable.js +1 -2
  120. package/src/components/qualityControls/ScoreCriteria.js +4 -4
  121. package/src/components/qualityControls/ScoreCriteriaView.js +0 -1
  122. package/src/components/qualityControls/__tests__/ControlProperties.spec.js +10 -15
  123. package/src/components/qualityControls/__tests__/ControlPropertiesView.spec.js +0 -1
  124. package/src/components/qualityControls/__tests__/EditQualityControl.spec.js +28 -70
  125. package/src/components/qualityControls/__tests__/IconPopup.spec.js +10 -11
  126. package/src/components/qualityControls/__tests__/NewDraftQualityControl.spec.js +33 -70
  127. package/src/components/qualityControls/__tests__/NewQualityControl.spec.js +81 -113
  128. package/src/components/qualityControls/__tests__/QualityBadge.spec.js +50 -58
  129. package/src/components/qualityControls/__tests__/QualityControl.spec.js +19 -31
  130. package/src/components/qualityControls/__tests__/QualityControlActions.spec.js +49 -46
  131. package/src/components/qualityControls/__tests__/QualityControlCrumbs.spec.js +0 -1
  132. package/src/components/qualityControls/__tests__/QualityControlEditor.spec.js +68 -107
  133. package/src/components/qualityControls/__tests__/QualityControlHeader.spec.js +22 -25
  134. package/src/components/qualityControls/__tests__/QualityControlHistory.spec.js +6 -6
  135. package/src/components/qualityControls/__tests__/QualityControlManageDomain.spec.js +0 -1
  136. package/src/components/qualityControls/__tests__/QualityControlQueryModal.spec.js +12 -11
  137. package/src/components/qualityControls/__tests__/QualityControlRow.spec.js +4 -8
  138. package/src/components/qualityControls/__tests__/QualityControlScores.spec.js +23 -19
  139. package/src/components/qualityControls/__tests__/QualityControlTabs.spec.js +2 -3
  140. package/src/components/qualityControls/__tests__/QualityControls.spec.js +69 -53
  141. package/src/components/qualityControls/__tests__/QualityControlsLabelResults.spec.js +0 -1
  142. package/src/components/qualityControls/__tests__/QualityControlsPagination.spec.js +0 -1
  143. package/src/components/qualityControls/__tests__/QualityControlsTable.spec.js +2 -3
  144. package/src/components/qualityControls/__tests__/ScoreCriteria.spec.js +0 -1
  145. package/src/components/qualityControls/__tests__/ScoreCriteriaView.spec.js +0 -1
  146. package/src/components/qualityControls/__tests__/__fixtures__/qualityControlHelper.js +1 -1
  147. package/src/components/qualityControls/__tests__/__snapshots__/EditQualityControl.spec.js.snap +32 -34
  148. package/src/components/qualityControls/__tests__/__snapshots__/NewDraftQualityControl.spec.js.snap +31 -33
  149. package/src/components/qualityControls/__tests__/__snapshots__/NewQualityControl.spec.js.snap +17 -19
  150. package/src/components/qualityControls/__tests__/__snapshots__/QualityControl.spec.js.snap +9 -15
  151. package/src/components/qualityControls/__tests__/__snapshots__/QualityControlActions.spec.js.snap +5 -4
  152. package/src/components/qualityControls/__tests__/__snapshots__/QualityControlCrumbs.spec.js.snap +1 -0
  153. package/src/components/qualityControls/__tests__/__snapshots__/QualityControlEditor.spec.js.snap +0 -3
  154. package/src/components/qualityControls/__tests__/__snapshots__/QualityControlHeader.spec.js.snap +16 -11
  155. package/src/components/qualityControls/__tests__/__snapshots__/QualityControlHistory.spec.js.snap +2 -0
  156. package/src/components/qualityControls/__tests__/__snapshots__/QualityControlRow.spec.js.snap +2 -1
  157. package/src/components/qualityControls/__tests__/__snapshots__/QualityControlScores.spec.js.snap +3 -0
  158. package/src/components/qualityControls/__tests__/__snapshots__/QualityControlTabs.spec.js.snap +3 -0
  159. package/src/components/qualityControls/__tests__/__snapshots__/QualityControls.spec.js.snap +11 -21
  160. package/src/components/qualityControls/__tests__/__snapshots__/QualityControlsTable.spec.js.snap +2 -0
  161. package/src/components/qualityControls/controlProperties/Count.js +5 -5
  162. package/src/components/qualityControls/controlProperties/Ratio.js +6 -8
  163. package/src/components/qualityControls/controlProperties/__tests__/Count.spec.js +6 -11
  164. package/src/components/qualityControls/controlProperties/__tests__/Ratio.spec.js +9 -27
  165. package/src/components/qualityControls/controlProperties/__tests__/__snapshots__/Ratio.spec.js.snap +10 -10
  166. package/src/components/qualityControls/qualityByControlMode.js +14 -14
  167. package/src/components/qualityControls/qualityControlScoresColumns.js +1 -2
  168. package/src/components/qualityControls/scoreCriterias/Deviation.js +2 -2
  169. package/src/components/qualityControls/scoreCriterias/ErrorCount.js +3 -4
  170. package/src/components/qualityControls/scoreCriterias/Percentage.js +2 -2
  171. package/src/components/qualityControls/scoreCriterias/__tests__/Deviation.spec.js +0 -1
  172. package/src/components/qualityControls/scoreCriterias/__tests__/ErrorCount.spec.js +39 -43
  173. package/src/components/qualityControls/scoreCriterias/__tests__/Percentage.spec.js +23 -19
  174. package/src/components/qualityControls/scoreCriterias/__tests__/__snapshots__/ErrorCount.spec.js.snap +4 -7
  175. package/src/components/scores/MyScoreGroups.js +0 -1
  176. package/src/components/scores/QualityBar.js +24 -22
  177. package/src/components/scores/Score.js +4 -5
  178. package/src/components/scores/ScoreCrumbs.js +3 -5
  179. package/src/components/scores/ScoreDetails.js +2 -2
  180. package/src/components/scores/ScoreEvents.js +2 -2
  181. package/src/components/scores/ScoreGroup.js +5 -4
  182. package/src/components/scores/ScoreGroupBreadcrumbs.js +1 -2
  183. package/src/components/scores/ScoreGroupForm.js +2 -4
  184. package/src/components/scores/ScoreGroupLink.js +1 -2
  185. package/src/components/scores/ScoreGroupMessage.js +0 -1
  186. package/src/components/scores/ScoreGroupPopup.js +1 -1
  187. package/src/components/scores/ScoreGroupsRoutes.js +19 -0
  188. package/src/components/scores/ScoreGroupsTable.js +15 -48
  189. package/src/components/scores/ScoreRoutes.js +9 -24
  190. package/src/components/scores/ScoreStatusDecorator.js +1 -2
  191. package/src/components/scores/ScoreTabs.js +2 -2
  192. package/src/components/scores/__tests__/MyScoreGroups.spec.js +0 -1
  193. package/src/components/scores/__tests__/QualityBar.spec.js +19 -26
  194. package/src/components/scores/__tests__/Score.spec.js +2 -3
  195. package/src/components/scores/__tests__/ScoreCrumbs.spec.js +4 -5
  196. package/src/components/scores/__tests__/ScoreDetails.spec.js +4 -5
  197. package/src/components/scores/__tests__/ScoreEvents.spec.js +2 -3
  198. package/src/components/scores/__tests__/ScoreGroup.spec.js +15 -14
  199. package/src/components/scores/__tests__/ScoreGroupBreadcrumbs.spec.js +0 -1
  200. package/src/components/scores/__tests__/ScoreGroupForm.spec.js +18 -34
  201. package/src/components/scores/__tests__/ScoreGroupLink.spec.js +0 -1
  202. package/src/components/scores/__tests__/ScoreGroupMessage.spec.js +0 -1
  203. package/src/components/scores/__tests__/ScoreGroupPopup.spec.js +0 -2
  204. package/src/components/scores/__tests__/ScoreGroupsRoutes.spec.js +32 -0
  205. package/src/components/scores/__tests__/ScoreGroupsTable.spec.js +0 -1
  206. package/src/components/scores/__tests__/ScoreStatusDecorator.spec.js +0 -1
  207. package/src/components/scores/__tests__/ScoreTabs.spec.js +3 -4
  208. package/src/components/scores/__tests__/__snapshots__/MyScoreGroups.spec.js.snap +2 -0
  209. package/src/components/scores/__tests__/__snapshots__/Score.spec.js.snap +4 -0
  210. package/src/components/scores/__tests__/__snapshots__/ScoreCrumbs.spec.js.snap +2 -0
  211. package/src/components/scores/__tests__/__snapshots__/ScoreDetails.spec.js.snap +1 -0
  212. package/src/components/scores/__tests__/__snapshots__/ScoreGroup.spec.js.snap +39 -10
  213. package/src/components/scores/__tests__/__snapshots__/ScoreGroupBreadcrumbs.spec.js.snap +1 -0
  214. package/src/components/scores/__tests__/__snapshots__/ScoreGroupForm.spec.js.snap +10 -10
  215. package/src/components/scores/__tests__/__snapshots__/ScoreGroupLink.spec.js.snap +1 -0
  216. package/src/components/scores/__tests__/__snapshots__/ScoreGroupsRoutes.spec.js.snap +19 -0
  217. package/src/components/scores/__tests__/__snapshots__/ScoreGroupsTable.spec.js.snap +2 -0
  218. package/src/components/scores/__tests__/__snapshots__/ScoreStatusDecorator.spec.js.snap +5 -0
  219. package/src/components/scores/__tests__/__snapshots__/ScoreTabs.spec.js.snap +4 -0
  220. package/src/hooks/__tests__/useDataViews.spec.js +1 -1
  221. package/src/hooks/__tests__/useFunctions.spec.js +5 -5
  222. package/src/hooks/useDataViews.js +2 -2
  223. package/src/hooks/useExecutionGroups.js +1 -1
  224. package/src/hooks/useFunctions.js +4 -4
  225. package/src/hooks/useQualityControls.js +13 -7
  226. package/src/hooks/useScoreGroups.js +1 -1
  227. package/src/hooks/useScores.js +2 -2
  228. package/src/styles/scores.less +21 -21
  229. package/src/types.js +1 -4
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@truedat/qx",
3
- "version": "7.5.9",
3
+ "version": "7.5.10",
4
4
  "description": "Truedat Web Quality Experience package",
5
5
  "sideEffects": false,
6
- "jsnext:main": "src/index.js",
7
6
  "module": "src/index.js",
8
7
  "files": [
9
- "src"
8
+ "src",
9
+ "index.js"
10
10
  ],
11
11
  "author": "Bluetab Solutions",
12
12
  "license": "GPL-3.0",
@@ -15,58 +15,23 @@
15
15
  },
16
16
  "scripts": {
17
17
  "clean": "rimraf yarn-error.log",
18
- "debug": "node --inspect-brk node_modules/.bin/jest --runInBand",
19
18
  "test": "TZ=UTC jest --coverage",
20
- "test:watch": "TZ=UTC jest --watch",
21
19
  "eslint": "eslint src/**",
22
20
  "eslint:fix": "eslint --fix src/**"
23
21
  },
24
- "devDependencies": {
25
- "@babel/cli": "^7.19.3",
26
- "@babel/core": "^7.20.5",
27
- "@babel/plugin-proposal-class-properties": "^7.18.6",
28
- "@babel/plugin-proposal-object-rest-spread": "^7.20.2",
29
- "@babel/plugin-proposal-optional-chaining": "^7.18.9",
30
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
31
- "@babel/plugin-transform-modules-commonjs": "^7.19.6",
32
- "@babel/preset-env": "^7.20.2",
33
- "@babel/preset-react": "^7.18.6",
34
- "@testing-library/jest-dom": "^5.16.5",
35
- "@testing-library/react": "^12.0.0",
36
- "@testing-library/react-hooks": "^8.0.1",
37
- "@testing-library/user-event": "^13.2.1",
38
- "@truedat/test": "7.5.9",
39
- "babel-jest": "^28.1.0",
40
- "babel-plugin-dynamic-import-node": "^2.3.3",
41
- "babel-plugin-lodash": "^3.3.4",
42
- "babel-plugin-react-intl": "^5.1.18",
43
- "babel-plugin-transform-semantic-ui-react-imports": "^1.4.1",
44
- "identity-obj-proxy": "^3.0.0",
45
- "jest": "^29.0.0",
46
- "jest-environment-jsdom": "^29.0.0",
47
- "jsdom": "^26.0.0",
48
- "react": "^16.14.0",
49
- "react-dom": "^16.14.0",
50
- "rimraf": "^3.0.2",
51
- "semantic-ui-react": "^2.1.4"
52
- },
53
22
  "jest": {
54
23
  "maxWorkers": "50%",
55
24
  "testTimeout": 10000,
56
25
  "moduleDirectories": [
57
- "<rootDir>/src",
58
- "../../node_modules"
59
- ],
60
- "setupFilesAfterEnv": [
61
- "@truedat/test/setup"
26
+ "<rootDir>/src"
62
27
  ],
63
28
  "moduleNameMapper": {
64
- "\\.(css|less)$": "identity-obj-proxy",
29
+ "\\.(css|less|png)$": "identity-obj-proxy",
65
30
  "^@truedat/([^/]+)$": "<rootDir>/../$1/src/index",
66
31
  "^@truedat/([^/]+)/(.*)$": "<rootDir>/../$1/src/$2"
67
32
  },
68
- "snapshotSerializers": [
69
- "enzyme-to-json/serializer"
33
+ "setupFilesAfterEnv": [
34
+ "@truedat/test/setup"
70
35
  ],
71
36
  "testEnvironment": "jsdom",
72
37
  "testMatch": [
@@ -74,9 +39,6 @@
74
39
  "**/?(*.)+(spec|test).[jt]s?(x)",
75
40
  "!**/__fixtures__/**"
76
41
  ],
77
- "testPathIgnorePatterns": [
78
- "<rootDir>/node_modules/"
79
- ],
80
42
  "transform": {
81
43
  "\\.js$": [
82
44
  "babel-jest",
@@ -84,27 +46,46 @@
84
46
  "rootMode": "upward"
85
47
  }
86
48
  ]
87
- },
88
- "transformIgnorePatterns": [
89
- "/node_modules/(?!@truedat).*"
90
- ]
49
+ }
50
+ },
51
+ "devDependencies": {
52
+ "@testing-library/dom": "^10.4.0",
53
+ "@testing-library/jest-dom": "^6.6.3",
54
+ "@testing-library/react": "^16.2.0",
55
+ "@testing-library/user-event": "^14.6.1",
56
+ "@truedat/test": "7.5.10",
57
+ "identity-obj-proxy": "^3.0.0",
58
+ "jest": "^29.7.0",
59
+ "redux-saga-test-plan": "^4.0.6"
91
60
  },
92
61
  "dependencies": {
93
- "@truedat/core": "7.5.9",
62
+ "@apollo/client": "^3.13.5",
63
+ "axios": "^1.8.4",
64
+ "graphql": "^16.10.0",
65
+ "is-hotkey": "^0.2.0",
66
+ "is-url": "^1.2.4",
67
+ "lodash": "^4.17.21",
68
+ "match-sorter": "^8.0.0",
69
+ "moment": "^2.30.1",
70
+ "path-to-regexp": "^8.2.0",
94
71
  "prop-types": "^15.8.1",
95
- "react-hook-form": "^7.45.4",
96
- "react-intl": "^5.20.10",
97
- "react-router-dom": "^5.2.0",
98
- "semantic-ui-react": "^2.1.4",
99
- "swr": "^2.0.0"
100
- },
101
- "peerDependencies": {
102
- "react": ">= 16.8.6 < 17",
103
- "react-dom": ">= 16.8.6 < 17",
104
- "semantic-ui-react": ">= 2.0.3 < 2.2"
105
- },
106
- "overrides": {
107
- "jsdom": "26.0.0"
72
+ "query-string": "^7.1.2",
73
+ "react": "^19.0.0",
74
+ "react-csv": "^2.2.2",
75
+ "react-dom": "^19.0.0",
76
+ "react-dropzone": "^14.3.8",
77
+ "react-hook-form": "^7.54.2",
78
+ "react-intl": "^7.1.10",
79
+ "react-moment": "^1.1.3",
80
+ "react-redux": "^9.2.0",
81
+ "react-router": "^7.4.0",
82
+ "redux": "^5.0.1",
83
+ "redux-saga": "^1.3.0",
84
+ "redux-saga-routines": "^3.2.3",
85
+ "reselect": "^5.1.1",
86
+ "semantic-ui-calendar-react": "^0.15.3",
87
+ "semantic-ui-react": "^3.0.0-beta.2",
88
+ "swr": "^2.3.3"
108
89
  },
109
- "gitHead": "03770e3241daa955de2e6e40fdaea91e3d147860"
90
+ "gitHead": "8a8c49e9d5d6bb4e5f2b503b063bfd6dd20a503d"
110
91
  }
@@ -1,7 +1,6 @@
1
1
  import React from "react";
2
- import { Route, Switch } from "react-router-dom";
3
- import { Unauthorized } from "@truedat/core/components";
4
- import { useAuthorized } from "@truedat/core/hooks";
2
+ import { Route, Routes } from "react-router";
3
+ import { ProtectedRoute } from "@truedat/core/router";
5
4
  import {
6
5
  DATA_VIEWS,
7
6
  FUNCTIONS,
@@ -14,38 +13,58 @@ import DataViews from "./dataViews/DataViews";
14
13
  import Functions from "./functions/Functions";
15
14
  import QualityControlRoutes from "./qualityControls/QualityControlRoutes";
16
15
  import ScoreRoutes from "./scores/ScoreRoutes";
17
-
16
+ import ScoreGroupsRoutes from "./scores/ScoreGroupsRoutes";
18
17
  export default function QxRoutes() {
19
- const authorized = useAuthorized("quality_control");
20
-
21
18
  return (
22
- <Switch>
19
+ <Routes>
23
20
  <Route
24
21
  path={DATA_VIEWS}
25
- render={() => (authorized ? <DataViews /> : <Unauthorized />)}
22
+ element={
23
+ <ProtectedRoute authorization="quality_control">
24
+ <DataViews />
25
+ </ProtectedRoute>
26
+ }
26
27
  />
27
28
  <Route
28
29
  path={FUNCTIONS}
29
- render={() => (authorized ? <Functions /> : <Unauthorized />)}
30
+ element={
31
+ <ProtectedRoute authorization="quality_control">
32
+ <Functions />
33
+ </ProtectedRoute>
34
+ }
30
35
  />
31
36
  <Route
32
- path={QUALITY_CONTROLS}
33
- render={() =>
34
- authorized ? <QualityControlRoutes /> : <Unauthorized />
37
+ path={`${QUALITY_CONTROLS}/*`}
38
+ element={
39
+ <ProtectedRoute authorization="quality_control">
40
+ <QualityControlRoutes />
41
+ </ProtectedRoute>
35
42
  }
36
43
  />
37
44
  <Route
38
- path={SCORES}
39
- render={() => (authorized ? <ScoreRoutes /> : <Unauthorized />)}
45
+ path={`${SCORES}/*`}
46
+ element={
47
+ <ProtectedRoute authorization="quality_control">
48
+ <ScoreRoutes />
49
+ </ProtectedRoute>
50
+ }
40
51
  />
41
52
  <Route
42
- path={SCORE_GROUPS}
43
- render={() => (authorized ? <ScoreRoutes /> : <Unauthorized />)}
53
+ path={`${SCORE_GROUPS}/*`}
54
+ element={
55
+ <ProtectedRoute authorization="quality_control">
56
+ <ScoreGroupsRoutes />
57
+ </ProtectedRoute>
58
+ }
44
59
  />
45
60
  <Route
46
- path={MY_SCORE_GROUPS}
47
- render={() => (authorized ? <ScoreRoutes /> : <Unauthorized />)}
61
+ path={`${MY_SCORE_GROUPS}/*`}
62
+ element={
63
+ <ProtectedRoute authorization="quality_control">
64
+ <ScoreGroupsRoutes />
65
+ </ProtectedRoute>
66
+ }
48
67
  />
49
- </Switch>
68
+ </Routes>
50
69
  );
51
70
  }
@@ -0,0 +1,73 @@
1
+ import React from "react";
2
+ import { render, waitForLoad } from "@truedat/test/render";
3
+ import QxRoutes from "../QxRoutes";
4
+ import { useAuthorized } from "@truedat/core/hooks/useAuthorized";
5
+ import {
6
+ DATA_VIEWS,
7
+ FUNCTIONS,
8
+ QUALITY_CONTROLS,
9
+ MY_SCORE_GROUPS,
10
+ SCORE_GROUPS,
11
+ SCORES,
12
+ } from "@truedat/core/routes";
13
+
14
+ jest.mock("@truedat/core/hooks/useAuthorized", () => ({
15
+ useAuthorized: jest.fn(() => true),
16
+ }));
17
+
18
+ // Mock all child components
19
+ jest.mock("../dataViews/DataViews", () => () => <div>DataViews</div>);
20
+ jest.mock("../functions/Functions", () => () => <div>Functions</div>);
21
+ jest.mock("../qualityControls/QualityControlRoutes", () => () => (
22
+ <div>QualityControlRoutes</div>
23
+ ));
24
+ jest.mock("../scores/ScoreRoutes", () => () => <div>ScoreRoutes</div>);
25
+
26
+ describe("<QxRoutes />", () => {
27
+ it("renders correctly with default route", async () => {
28
+ const rendered = render(<QxRoutes />);
29
+ await waitForLoad(rendered);
30
+ expect(rendered.container).toMatchSnapshot();
31
+ });
32
+
33
+ it("renders correctly with data views route", async () => {
34
+ const rendered = render(<QxRoutes />, {
35
+ routes: [DATA_VIEWS],
36
+ });
37
+ await waitForLoad(rendered);
38
+ expect(rendered.container).toMatchSnapshot();
39
+ });
40
+
41
+ it("renders correctly with functions route", async () => {
42
+ const rendered = render(<QxRoutes />, {
43
+ routes: [FUNCTIONS],
44
+ });
45
+ await waitForLoad(rendered);
46
+ expect(rendered.container).toMatchSnapshot();
47
+ });
48
+
49
+ it("renders correctly with quality controls route", async () => {
50
+ const rendered = render(<QxRoutes />, {
51
+ routes: [QUALITY_CONTROLS],
52
+ });
53
+ await waitForLoad(rendered);
54
+ expect(rendered.container).toMatchSnapshot();
55
+ });
56
+
57
+ it("renders correctly with scores route", async () => {
58
+ const rendered = render(<QxRoutes />, {
59
+ routes: [SCORES],
60
+ });
61
+ await waitForLoad(rendered);
62
+ expect(rendered.container).toMatchSnapshot();
63
+ });
64
+
65
+ it("renders unauthorized component when not authorized", async () => {
66
+ useAuthorized.mockReturnValueOnce(false);
67
+ const rendered = render(<QxRoutes />, {
68
+ routes: [QUALITY_CONTROLS],
69
+ });
70
+ await waitForLoad(rendered);
71
+ expect(rendered.container).toMatchSnapshot();
72
+ });
73
+ });
@@ -0,0 +1,60 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`<QxRoutes /> renders correctly with data views route 1`] = `
4
+ <div>
5
+ <div>
6
+ DataViews
7
+ </div>
8
+ </div>
9
+ `;
10
+
11
+ exports[`<QxRoutes /> renders correctly with default route 1`] = `<div />`;
12
+
13
+ exports[`<QxRoutes /> renders correctly with functions route 1`] = `
14
+ <div>
15
+ <div>
16
+ Functions
17
+ </div>
18
+ </div>
19
+ `;
20
+
21
+ exports[`<QxRoutes /> renders correctly with quality controls route 1`] = `
22
+ <div>
23
+ <div>
24
+ QualityControlRoutes
25
+ </div>
26
+ </div>
27
+ `;
28
+
29
+ exports[`<QxRoutes /> renders correctly with scores route 1`] = `
30
+ <div>
31
+ <div>
32
+ ScoreRoutes
33
+ </div>
34
+ </div>
35
+ `;
36
+
37
+ exports[`<QxRoutes /> renders unauthorized component when not authorized 1`] = `
38
+ <div>
39
+ <div
40
+ class="ui icon visible bottom attached message center"
41
+ >
42
+ <i
43
+ aria-hidden="true"
44
+ class="warning sign icon"
45
+ />
46
+ <div
47
+ class="content"
48
+ >
49
+ <div
50
+ class="header"
51
+ >
52
+ view.unauthorized.head
53
+ </div>
54
+ <p>
55
+ view.unauthorized.content
56
+ </p>
57
+ </div>
58
+ </div>
59
+ </div>
60
+ `;
@@ -1,5 +1,5 @@
1
1
  import _ from "lodash/fp";
2
- import React, { useContext } from "react";
2
+ import { Fragment, use } from "react";
3
3
  import PropTypes from "prop-types";
4
4
  import { Divider, Label, Segment } from "semantic-ui-react";
5
5
  import { useFunctions } from "@truedat/qx/hooks/useFunctions";
@@ -16,17 +16,17 @@ export default function ClauseViewer({ clause }) {
16
16
  {loading
17
17
  ? null
18
18
  : _map(({ expressions }, idx) => (
19
- <QxContext.Provider value={{ functions }} key={idx}>
19
+ <QxContext value={{ functions }} key={idx}>
20
20
  <Segment textAlign="center" className="no-margin">
21
21
  {_map((expression, idx) => (
22
- <React.Fragment key={idx}>
22
+ <Fragment key={idx}>
23
23
  <ExpressionViewer expression={expression} />
24
24
  {idx == _.size(expressions) - 1 ? null : (
25
25
  <Divider horizontal className="divider-compact">
26
26
  OR
27
27
  </Divider>
28
28
  )}
29
- </React.Fragment>
29
+ </Fragment>
30
30
  ))(expressions)}
31
31
  </Segment>
32
32
  {idx == _.size(clause) - 1 ? null : (
@@ -34,7 +34,7 @@ export default function ClauseViewer({ clause }) {
34
34
  AND
35
35
  </Divider>
36
36
  )}
37
- </QxContext.Provider>
37
+ </QxContext>
38
38
  ))(clause)}
39
39
  </Segment>
40
40
  );
@@ -58,7 +58,7 @@ ExpressionViewer.propTypes = {
58
58
  };
59
59
 
60
60
  function ExpressionFunctionViewer({ value }) {
61
- const { functions } = useContext(QxContext);
61
+ const { functions } = use(QxContext);
62
62
  const { name, type } = value;
63
63
  const func = _.find({ name, type })(functions);
64
64
  return isConditionFunction(func) ? (
@@ -1,5 +1,4 @@
1
1
  import _ from "lodash/fp";
2
- import React from "react";
3
2
  import { useState } from "react";
4
3
  import { useIntl } from "react-intl";
5
4
  import { Input, List } from "semantic-ui-react";
@@ -1,6 +1,6 @@
1
1
  import _ from "lodash/fp";
2
2
  import PropTypes from "prop-types";
3
- import React, { useContext } from "react";
3
+ import { use } from "react";
4
4
  import { useIntl } from "react-intl";
5
5
  import { Controller, useFormContext } from "react-hook-form";
6
6
  import { Form, Dropdown } from "semantic-ui-react";
@@ -13,8 +13,7 @@ import {
13
13
 
14
14
  export default function ResourceSelector({ required, labelId }) {
15
15
  const { formatMessage } = useIntl();
16
- const { field, referenceDatasets, dataViews, sourceId } =
17
- useContext(QxContext);
16
+ const { field, referenceDatasets, dataViews, sourceId } = use(QxContext);
18
17
  const { control, setValue, watch } = useFormContext();
19
18
 
20
19
  const sourceDataViews = _.filter({ source_id: parseInt(sourceId) })(
@@ -1,20 +1,9 @@
1
- import React from "react";
2
1
  import PropTypes from "prop-types";
3
2
  import { FormProvider, useForm } from "react-hook-form";
4
3
  import QxContext from "@truedat/qx/components/QxContext";
5
4
  import { useFunctions } from "@truedat/qx/hooks/useFunctions";
6
5
 
7
- jest.mock("@truedat/core/hooks/useUserFilters", () => {
8
- const originalModule = jest.requireActual(
9
- "@truedat/core/hooks/useUserFilters"
10
- );
11
-
12
- return {
13
- __esModule: true,
14
- ...originalModule,
15
- useUserFilters: jest.fn(() => ({})),
16
- };
17
- });
6
+ jest.mock("@truedat/core/hooks/useUserFilters");
18
7
  jest.mock("@truedat/qx/hooks/useFunctions", () => {
19
8
  const originalModule = jest.requireActual("@truedat/qx/hooks/useFunctions");
20
9
 
@@ -59,7 +48,7 @@ export default function TestFormWrapper({
59
48
 
60
49
  return (
61
50
  <FormProvider {...form}>
62
- <QxContext.Provider value={qxContext}>{children}</QxContext.Provider>
51
+ <QxContext value={qxContext}>{children}</QxContext>
63
52
  </FormProvider>
64
53
  );
65
54
  }
@@ -1,5 +1,4 @@
1
1
  import _ from "lodash/fp";
2
- import React from "react";
3
2
  import { useIntl } from "react-intl";
4
3
  import { Dropdown } from "semantic-ui-react";
5
4
  import { typeToIcon, types } from "@truedat/qx/types";
@@ -1,8 +1,5 @@
1
- import _ from "lodash/fp";
2
- import React from "react";
3
- import { act } from "react-dom/test-utils";
4
1
  import userEvent from "@testing-library/user-event";
5
- import { render } from "@truedat/test/render";
2
+ import { render, waitForLoad } from "@truedat/test/render";
6
3
  import DescriptionInput from "../DescriptionInput";
7
4
 
8
5
  const renderOpts = {
@@ -15,30 +12,24 @@ const renderOpts = {
15
12
  };
16
13
 
17
14
  describe("<DescriptionInput />", () => {
18
- it("matches the latest snapshot", () => {
19
- const { container } = render(
20
- <DescriptionInput value="value" />,
21
- renderOpts
22
- );
23
-
24
- expect(container).toMatchSnapshot();
15
+ it("matches the latest snapshot", async () => {
16
+ const rendered = render(<DescriptionInput value="value" />, renderOpts);
17
+ await waitForLoad(rendered);
18
+ expect(rendered.container).toMatchSnapshot();
25
19
  });
20
+
26
21
  it("handles user input", async () => {
22
+ const user = userEvent.setup({ delay: null });
27
23
  const props = {
28
24
  onBlur: jest.fn(),
29
25
  onChange: jest.fn(),
30
26
  };
31
- const { getByRole } = render(<DescriptionInput {...props} />, renderOpts);
32
-
33
- await act(async () => {
34
- userEvent.click(getByRole("listitem"));
35
- });
36
-
37
- userEvent.type(getByRole("textbox"), "description");
27
+ const rendered = render(<DescriptionInput {...props} />, renderOpts);
28
+ await waitForLoad(rendered);
38
29
 
39
- await act(async () => {
40
- userEvent.click(getByRole("list"));
41
- });
30
+ await user.click(rendered.getByRole("listitem"));
31
+ await user.type(rendered.getByRole("textbox"), "description");
32
+ await user.click(rendered.getByRole("list"));
42
33
 
43
34
  const [_event, { value: lastValue }] = props.onChange.mock.lastCall;
44
35