@truedat/core 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 (277) hide show
  1. package/package.json +34 -68
  2. package/src/__tests__/routesTree.spec.js +108 -0
  3. package/src/api/queries.js +10 -0
  4. package/src/api.js +3 -0
  5. package/src/components/AddMemberForm.js +10 -10
  6. package/src/components/AddResourceMember.js +0 -2
  7. package/src/components/AdminMenu.js +0 -1
  8. package/src/components/AiMenu.js +0 -1
  9. package/src/components/Alert.js +1 -1
  10. package/src/components/AlertExporter.js +0 -1
  11. package/src/components/ArrayDecorator.js +0 -1
  12. package/src/components/Authorized.js +2 -2
  13. package/src/components/AvailableFilters.js +1 -2
  14. package/src/components/CSVFileModal.js +1 -1
  15. package/src/components/CardGroupsAccordion.js +1 -1
  16. package/src/components/CatalogMenu.js +1 -2
  17. package/src/components/CommentRow.js +7 -8
  18. package/src/components/Comments.js +3 -4
  19. package/src/components/CommentsForm.js +2 -2
  20. package/src/components/ConfirmModal.js +0 -1
  21. package/src/components/CursorPagination.js +1 -2
  22. package/src/components/DashboardMenu.js +0 -1
  23. package/src/components/Date.js +0 -1
  24. package/src/components/DateFilter.js +1 -1
  25. package/src/components/DateRangeFilter.js +1 -1
  26. package/src/components/DateTime.js +0 -1
  27. package/src/components/DescriptionInput.js +1 -1
  28. package/src/components/DomainSelector.js +2 -3
  29. package/src/components/DropdownMenuItem.js +0 -1
  30. package/src/components/ErrorBoundary.js +8 -7
  31. package/src/components/FieldLabel.js +0 -1
  32. package/src/components/FilterDropdown.js +3 -3
  33. package/src/components/FilterItem.js +0 -1
  34. package/src/components/FilterMultilevelDropdown.js +1 -1
  35. package/src/components/GenericCrumbs.js +3 -4
  36. package/src/components/GlossaryMenu.js +24 -31
  37. package/src/components/GrantMenu.js +0 -1
  38. package/src/components/GroupActions.js +15 -15
  39. package/src/components/Hierarchy.js +7 -10
  40. package/src/components/HierarchyFilterDropdown.js +1 -2
  41. package/src/components/HierarchyNodeFinder.js +4 -4
  42. package/src/components/HierarchySelector.js +1 -2
  43. package/src/components/HistoryBackButton.js +6 -6
  44. package/src/components/IngestMenu.js +0 -1
  45. package/src/components/LanguagesTabs.js +4 -4
  46. package/src/components/LineageMenu.js +0 -1
  47. package/src/components/Loading.js +1 -2
  48. package/src/components/MembersMenu.js +0 -1
  49. package/src/components/ModalSaveFilter.js +1 -1
  50. package/src/components/NodeOpenActions.js +0 -1
  51. package/src/components/OptionGroup.js +1 -2
  52. package/src/components/OptionModal.js +0 -1
  53. package/src/components/Pagination.js +0 -1
  54. package/src/components/QualityMenu.js +0 -1
  55. package/src/components/QxMenu.js +0 -1
  56. package/src/components/Redirector.js +3 -3
  57. package/src/components/ResourceMember.js +1 -2
  58. package/src/components/ResourceMembers.js +3 -3
  59. package/src/components/ResourceMembersActions.js +1 -2
  60. package/src/components/RichTextEditor.js +7 -8
  61. package/src/components/RouteListener.js +11 -32
  62. package/src/components/SafeLink.js +0 -1
  63. package/src/components/ScrollToTop.js +13 -16
  64. package/src/components/SearchFilterDropdown.js +1 -1
  65. package/src/components/SearchInput.js +3 -3
  66. package/src/components/SearchMenu.js +0 -1
  67. package/src/components/SelectedFilters.js +1 -2
  68. package/src/components/SideMenu.js +0 -1
  69. package/src/components/SidebarToggle.js +2 -2
  70. package/src/components/StructureFilterItem.js +0 -1
  71. package/src/components/Submenu.js +8 -7
  72. package/src/components/SystemsLoader.js +27 -0
  73. package/src/components/TaxonomyMenu.js +0 -1
  74. package/src/components/TemplateSelector.js +1 -1
  75. package/src/components/TemplatesLoader.js +24 -0
  76. package/src/components/TreeSelector.js +4 -4
  77. package/src/components/Unauthorized.js +0 -1
  78. package/src/components/UploadModal.js +152 -176
  79. package/src/components/UserFilter.js +0 -2
  80. package/src/components/UserFilters.js +0 -2
  81. package/src/components/__tests__/AddMemberForm.spec.js +26 -38
  82. package/src/components/__tests__/AddResourceMember.spec.js +0 -1
  83. package/src/components/__tests__/AdminMenu.spec.js +0 -1
  84. package/src/components/__tests__/Alert.spec.js +17 -21
  85. package/src/components/__tests__/AvailableFilters.spec.js +19 -14
  86. package/src/components/__tests__/CardGroupsAccordion.spec.js +24 -15
  87. package/src/components/__tests__/CatalogMenu.spec.js +27 -45
  88. package/src/components/__tests__/CommentsLoader.spec.js +17 -14
  89. package/src/components/__tests__/CursorPagination.spec.js +0 -1
  90. package/src/components/__tests__/DashboardMenu.spec.js +0 -1
  91. package/src/components/__tests__/DateFilter.spec.js +6 -28
  92. package/src/components/__tests__/DateTime.spec.js +0 -1
  93. package/src/components/__tests__/DomainSelector.spec.js +4 -4
  94. package/src/components/__tests__/DropdownMenuItem.spec.js +0 -1
  95. package/src/components/__tests__/FilterDropdown.spec.js +28 -27
  96. package/src/components/__tests__/FilterItem.spec.js +19 -20
  97. package/src/components/__tests__/FilterMultilevelDropdown.spec.js +16 -16
  98. package/src/components/__tests__/FiltersLoader.spec.js +25 -20
  99. package/src/components/__tests__/GenericCrumbs.spec.js +0 -1
  100. package/src/components/__tests__/GlossaryMenu.spec.js +0 -1
  101. package/src/components/__tests__/GrantMenu.spec.js +0 -1
  102. package/src/components/__tests__/GroupActions.spec.js +0 -1
  103. package/src/components/__tests__/Hierarchy.spec.js +0 -1
  104. package/src/components/__tests__/HierarchyFilterDropdown.spec.js +16 -14
  105. package/src/components/__tests__/HierarchyNodeFinder.spec.js +0 -1
  106. package/src/components/__tests__/HierarchySelector.spec.js +28 -35
  107. package/src/components/__tests__/HistoryBackButton.spec.js +23 -23
  108. package/src/components/__tests__/IngestMenu.spec.js +0 -1
  109. package/src/components/__tests__/LineageMenu.spec.js +0 -1
  110. package/src/components/__tests__/Loading.spec.js +4 -5
  111. package/src/components/__tests__/MembersMenu.spec.js +0 -1
  112. package/src/components/__tests__/ModalSaveFilter.spec.js +0 -1
  113. package/src/components/__tests__/OptionGroup.spec.js +5 -7
  114. package/src/components/__tests__/Pagination.spec.js +22 -16
  115. package/src/components/__tests__/QualityMenu.spec.js +0 -1
  116. package/src/components/__tests__/Redirector.spec.js +5 -10
  117. package/src/components/__tests__/ResourceMembers.spec.js +36 -27
  118. package/src/components/__tests__/ResourceMembersAction.spec.js +1 -2
  119. package/src/components/__tests__/RouteListener.spec.js +25 -26
  120. package/src/components/__tests__/SafeLink.spec.js +0 -1
  121. package/src/components/__tests__/SearchDateFilter.spec.js +0 -1
  122. package/src/components/__tests__/SearchFilterDropdown.spec.js +32 -24
  123. package/src/components/__tests__/SearchInput.spec.js +5 -5
  124. package/src/components/__tests__/SearchMenu.spec.js +0 -1
  125. package/src/components/__tests__/SelectedFilters.spec.js +50 -47
  126. package/src/components/__tests__/SideMenu.spec.js +5 -8
  127. package/src/components/__tests__/StructureFilterItem.spec.js +13 -11
  128. package/src/components/__tests__/Submenu.spec.js +0 -1
  129. package/src/components/__tests__/SystemsLoader.spec.js +40 -0
  130. package/src/components/__tests__/TaxonomyMenu.spec.js +0 -1
  131. package/src/components/__tests__/TemplateSelector.spec.js +27 -29
  132. package/src/components/__tests__/TemplatesLoader.spec.js +30 -0
  133. package/src/components/__tests__/TreeSelector.spec.js +110 -83
  134. package/src/components/__tests__/UploadModal.spec.js +171 -0
  135. package/src/components/__tests__/UserFilters.spec.js +44 -37
  136. package/src/components/__tests__/__snapshots__/AddMemberForm.spec.js.snap +1 -0
  137. package/src/components/__tests__/__snapshots__/AddResourceMember.spec.js.snap +10 -9
  138. package/src/components/__tests__/__snapshots__/AdminMenu.spec.js.snap +22 -11
  139. package/src/components/__tests__/__snapshots__/Alert.spec.js.snap +29 -17
  140. package/src/components/__tests__/__snapshots__/AvailableFilters.spec.js.snap +1 -1
  141. package/src/components/__tests__/__snapshots__/CatalogMenu.spec.js.snap +18 -8
  142. package/src/components/__tests__/__snapshots__/CursorPagination.spec.js.snap +3 -0
  143. package/src/components/__tests__/__snapshots__/DateFilter.spec.js.snap +165 -107
  144. package/src/components/__tests__/__snapshots__/DomainSelector.spec.js.snap +1 -1
  145. package/src/components/__tests__/__snapshots__/FilterItem.spec.js.snap +13 -20
  146. package/src/components/__tests__/__snapshots__/GlossaryMenu.spec.js.snap +8 -0
  147. package/src/components/__tests__/__snapshots__/GrantMenu.spec.js.snap +14 -7
  148. package/src/components/__tests__/__snapshots__/GroupActions.spec.js.snap +0 -1
  149. package/src/components/__tests__/__snapshots__/Hierarchy.spec.js.snap +0 -1
  150. package/src/components/__tests__/__snapshots__/HierarchySelector.spec.js.snap +1 -1
  151. package/src/components/__tests__/__snapshots__/HistoryBackButton.spec.js.snap +10 -20
  152. package/src/components/__tests__/__snapshots__/IngestMenu.spec.js.snap +3 -1
  153. package/src/components/__tests__/__snapshots__/LineageMenu.spec.js.snap +6 -3
  154. package/src/components/__tests__/__snapshots__/Loading.spec.js.snap +5 -4
  155. package/src/components/__tests__/__snapshots__/MembersMenu.spec.js.snap +6 -3
  156. package/src/components/__tests__/__snapshots__/OptionGroup.spec.js.snap +38 -28
  157. package/src/components/__tests__/__snapshots__/Pagination.spec.js.snap +213 -64
  158. package/src/components/__tests__/__snapshots__/QualityMenu.spec.js.snap +14 -8
  159. package/src/components/__tests__/__snapshots__/ResourceMembers.spec.js.snap +1 -0
  160. package/src/components/__tests__/__snapshots__/ResourceMembersAction.spec.js.snap +2 -1
  161. package/src/components/__tests__/__snapshots__/RouteListener.spec.js.snap +1 -1
  162. package/src/components/__tests__/__snapshots__/SearchInput.spec.js.snap +10 -12
  163. package/src/components/__tests__/__snapshots__/SearchMenu.spec.js.snap +3 -1
  164. package/src/components/__tests__/__snapshots__/SelectedFilters.spec.js.snap +8 -8
  165. package/src/components/__tests__/__snapshots__/SideMenu.spec.js.snap +112 -50
  166. package/src/components/__tests__/__snapshots__/Submenu.spec.js.snap +3 -0
  167. package/src/components/__tests__/__snapshots__/SystemsLoader.spec.js.snap +3 -0
  168. package/src/components/__tests__/__snapshots__/TaxonomyMenu.spec.js.snap +3 -1
  169. package/src/components/__tests__/__snapshots__/TemplateSelector.spec.js.snap +7 -7
  170. package/src/components/common/SearchContextWrapper.js +1 -4
  171. package/src/hooks/__mocks__/useAuthorized.js +2 -0
  172. package/src/hooks/__mocks__/useUserFilters.js +17 -0
  173. package/src/hooks/__tests__/{useAclEntries.spec.js → useAclEntries.spec.js.disabled} +1 -1
  174. package/src/hooks/__tests__/useAuthorized.spec.js +1 -1
  175. package/src/hooks/useAclEntries.js +6 -3
  176. package/src/hooks/useActiveRoute.js +3 -3
  177. package/src/hooks/useActiveRoutes.js +4 -4
  178. package/src/hooks/useHierarchies.js +112 -0
  179. package/src/hooks/useLocales.js +1 -1
  180. package/src/hooks/useMessages.js +1 -1
  181. package/src/hooks/usePath.js +4 -4
  182. package/src/hooks/useUserFilters.js +1 -1
  183. package/src/i18n/components/EditableCell.js +1 -1
  184. package/src/i18n/components/I18nRoutes.js +11 -16
  185. package/src/i18n/components/LangProvider.js +56 -101
  186. package/src/i18n/components/LangProviderWrapper.js +26 -33
  187. package/src/i18n/components/Languages.js +8 -7
  188. package/src/i18n/components/MessageForm.js +9 -23
  189. package/src/i18n/components/Messages.js +5 -4
  190. package/src/i18n/components/MessagesTable.js +0 -1
  191. package/src/i18n/components/NewMessage.js +5 -4
  192. package/src/i18n/components/__tests__/EditableCell.spec.js +18 -20
  193. package/src/i18n/components/__tests__/I18nRoutes.spec.js +39 -5
  194. package/src/i18n/components/__tests__/MessageForm.spec.js +0 -1
  195. package/src/i18n/components/__tests__/Messages.spec.js +9 -21
  196. package/src/i18n/components/__tests__/NewMessage.spec.js +0 -1
  197. package/src/i18n/components/__tests__/__snapshots__/I18nRoutes.spec.js.snap +25 -1
  198. package/src/i18n/components/__tests__/__snapshots__/MessageForm.spec.js.snap +1 -0
  199. package/src/i18n/components/__tests__/__snapshots__/Messages.spec.js.snap +5 -13
  200. package/src/i18n/components/__tests__/__snapshots__/NewMessage.spec.js.snap +2 -0
  201. package/src/reducers/__tests__/comments.spec.js +9 -6
  202. package/src/reducers/__tests__/commentsResource.spec.js +5 -2
  203. package/src/reducers/__tests__/coreMessage.spec.js +1 -1
  204. package/src/reducers/__tests__/dashboardDomains.spec.js +5 -5
  205. package/src/reducers/__tests__/systems.spec.js +42 -0
  206. package/src/reducers/__tests__/systemsLoading.spec.js +22 -0
  207. package/src/reducers/index.js +5 -1
  208. package/src/reducers/systems.js +19 -0
  209. package/src/reducers/systemsLoading.js +14 -0
  210. package/src/router/Loader.js +10 -0
  211. package/src/router/ProtectedRoute.js +11 -0
  212. package/src/router/Unauthorized.js +16 -0
  213. package/src/router/__tests__/ProtectedRoute.spec.js +49 -0
  214. package/src/router/__tests__/Unauthorized.spec.js +15 -0
  215. package/src/router/__tests__/__snapshots__/ProtectedRoute.spec.js.snap +44 -0
  216. package/src/router/__tests__/__snapshots__/Unauthorized.spec.js.snap +26 -0
  217. package/src/router/index.js +5 -0
  218. package/src/routes.js +7 -7
  219. package/src/routesTree.js +93 -0
  220. package/src/routines.js +8 -0
  221. package/src/sagas/__tests__/addComment.spec.js +3 -5
  222. package/src/sagas/__tests__/fetchComments.spec.js +1 -1
  223. package/src/sagas/__tests__/fetchSystems.spec.js +69 -0
  224. package/src/sagas/fetchSystems.js +25 -0
  225. package/src/sagas/index.js +3 -0
  226. package/src/search/FilterDropdown.js +0 -1
  227. package/src/search/FilterItem.js +0 -1
  228. package/src/search/FilterMultilevelDropdown.js +1 -1
  229. package/src/search/FilterQueryDropdown.js +38 -42
  230. package/src/search/HierarchyFilterDropdown.js +3 -4
  231. package/src/search/ModalSaveFilter.js +1 -1
  232. package/src/search/Pagination.js +0 -1
  233. package/src/search/SearchContext.js +9 -11
  234. package/src/search/SearchDateFilter.js +0 -1
  235. package/src/search/SearchFilters.js +1 -2
  236. package/src/search/SearchSelectedFilters.js +4 -4
  237. package/src/search/SearchWidget.js +0 -4
  238. package/src/search/UserFilter.js +0 -2
  239. package/src/search/UserFilters.js +4 -3
  240. package/src/search/__tests__/FilterDropdown.spec.js +54 -51
  241. package/src/search/__tests__/FilterItem.spec.js +20 -15
  242. package/src/search/__tests__/FilterQueryDropdown.spec.js +106 -84
  243. package/src/search/__tests__/ModalSaveFilter.spec.js +4 -5
  244. package/src/search/__tests__/SearchContext.spec.js +3 -4
  245. package/src/search/__tests__/SearchWidget.spec.js +0 -1
  246. package/src/selectors/__tests__/getConceptSubscope.spec.js +37 -0
  247. package/src/selectors/__tests__/getDashboardConfig.spec.js +9 -9
  248. package/src/selectors/__tests__/getMessage.spec.js +1 -1
  249. package/src/selectors/__tests__/getSidemenuGlossarySubscopes.spec.js +17 -0
  250. package/src/selectors/__tests__/makeActiveFiltersSelector.spec.js +2 -2
  251. package/src/selectors/__tests__/makeSearchQuerySelector.spec.js +1 -1
  252. package/src/selectors/__tests__/makeTagOptionsSelector.spec.js +6 -6
  253. package/src/selectors/getConceptSubscope.js +19 -0
  254. package/src/selectors/getMessage.js +2 -2
  255. package/src/selectors/getRecipients.js +34 -0
  256. package/src/selectors/getSidemenuGlossarySubscopes.js +8 -0
  257. package/src/selectors/index.js +5 -0
  258. package/src/selectors/makeActiveFiltersSelector.js +2 -6
  259. package/src/selectors/makeSearchQuerySelector.js +4 -11
  260. package/src/selectors/makeTagOptionsSelector.js +4 -8
  261. package/src/selectors/subscopedTemplates.js +16 -0
  262. package/src/selectors/taxonomy.js +170 -0
  263. package/src/services/__tests__/columnDecorator.spec.js +1 -1
  264. package/src/services/__tests__/dateFilterFormatter.spec.js +2 -2
  265. package/src/services/__tests__/fieldType.spec.js +2 -2
  266. package/src/services/__tests__/filters.spec.js +1 -1
  267. package/src/services/__tests__/message.spec.js +2 -2
  268. package/src/services/__tests__/operators.spec.js +5 -5
  269. package/src/services/__tests__/sort.spec.js +8 -8
  270. package/src/services/__tests__/storage.spec.js +17 -0
  271. package/src/services/arrays.js +16 -14
  272. package/src/services/columnDecoratorComponent.js +2 -2
  273. package/src/services/columnDecorators.js +0 -1
  274. package/src/services/fieldType.js +8 -8
  275. package/src/services/filters.js +5 -5
  276. package/src/services/message.js +1 -4
  277. package/src/services/operators.js +1 -1
package/package.json CHANGED
@@ -1,9 +1,8 @@
1
1
  {
2
2
  "name": "@truedat/core",
3
- "version": "7.5.9",
3
+ "version": "7.5.10",
4
4
  "description": "Truedat Web Core",
5
5
  "sideEffects": false,
6
- "jsnext:main": "src/index.js",
7
6
  "module": "src/index.js",
8
7
  "files": [
9
8
  "src",
@@ -16,69 +15,25 @@
16
15
  },
17
16
  "scripts": {
18
17
  "clean": "rimraf yarn-error.log",
19
- "debug": "node --inspect-brk node_modules/.bin/jest --runInBand",
20
18
  "test": "TZ=UTC jest --coverage",
21
- "test:watch": "TZ=UTC jest --watch",
22
19
  "eslint": "eslint src/**",
23
20
  "eslint:fix": "eslint --fix src/**"
24
21
  },
25
- "devDependencies": {
26
- "@babel/cli": "^7.19.3",
27
- "@babel/core": "^7.20.5",
28
- "@babel/plugin-proposal-class-properties": "^7.18.6",
29
- "@babel/plugin-proposal-object-rest-spread": "^7.20.2",
30
- "@babel/plugin-proposal-optional-chaining": "^7.18.9",
31
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
32
- "@babel/plugin-transform-modules-commonjs": "^7.19.6",
33
- "@babel/preset-env": "^7.20.2",
34
- "@babel/preset-react": "^7.18.6",
35
- "@testing-library/jest-dom": "^5.16.5",
36
- "@testing-library/react": "^12.0.0",
37
- "@testing-library/react-hooks": "^8.0.1",
38
- "@testing-library/user-event": "^13.2.1",
39
- "@truedat/test": "7.5.9",
40
- "babel-jest": "^28.1.0",
41
- "babel-plugin-dynamic-import-node": "^2.3.3",
42
- "babel-plugin-lodash": "^3.3.4",
43
- "babel-plugin-react-intl": "^5.1.18",
44
- "babel-plugin-transform-semantic-ui-react-imports": "^1.4.1",
45
- "enzyme": "^3.11.0",
46
- "enzyme-to-json": "^3.6.2",
47
- "identity-obj-proxy": "^3.0.0",
48
- "jest": "^29.0.0",
49
- "jest-environment-jsdom": "^29.0.0",
50
- "jest-localstorage-mock": "^2.4.14",
51
- "react": "^16.14.0",
52
- "react-dom": "^16.14.0",
53
- "redux-saga-test-plan": "^4.0.4",
54
- "rimraf": "^3.0.2",
55
- "semantic-ui-react": "^2.1.4"
56
- },
57
22
  "jest": {
58
23
  "maxWorkers": "50%",
59
24
  "testTimeout": 10000,
60
25
  "moduleDirectories": [
61
- "<rootDir>/src",
62
- "../../node_modules"
26
+ "<rootDir>/src"
63
27
  ],
64
28
  "moduleNameMapper": {
65
29
  "\\.(css|less|png)$": "identity-obj-proxy",
66
30
  "^@truedat/([^/]+)$": "<rootDir>/../$1/src/index",
67
31
  "^@truedat/([^/]+)/(.*)$": "<rootDir>/../$1/src/$2"
68
32
  },
69
- "setupFiles": [
70
- "jest-localstorage-mock"
71
- ],
72
33
  "setupFilesAfterEnv": [
73
34
  "@truedat/test/setup"
74
35
  ],
75
- "snapshotSerializers": [
76
- "enzyme-to-json/serializer"
77
- ],
78
36
  "testEnvironment": "jsdom",
79
- "testPathIgnorePatterns": [
80
- "<rootDir>/node_modules/"
81
- ],
82
37
  "transform": {
83
38
  "\\.js$": [
84
39
  "babel-jest",
@@ -88,35 +43,46 @@
88
43
  ]
89
44
  }
90
45
  },
46
+ "devDependencies": {
47
+ "@testing-library/dom": "^10.4.0",
48
+ "@testing-library/jest-dom": "^6.6.3",
49
+ "@testing-library/react": "^16.2.0",
50
+ "@testing-library/user-event": "^14.6.1",
51
+ "@truedat/test": "7.5.10",
52
+ "identity-obj-proxy": "^3.0.0",
53
+ "jest": "^29.7.0",
54
+ "redux-saga-test-plan": "^4.0.6"
55
+ },
91
56
  "dependencies": {
92
- "@apollo/client": "^3.7.1",
93
- "axios": "^1.6.0",
94
- "decode-uri-component": "^0.2.2",
57
+ "@apollo/client": "^3.13.5",
58
+ "axios": "^1.8.4",
59
+ "graphql": "^16.10.0",
95
60
  "immutable": "^4.1.0",
96
- "is-hotkey": "^0.1.6",
61
+ "is-hotkey": "^0.2.0",
97
62
  "is-url": "^1.2.4",
98
- "moment": "^2.29.4",
63
+ "lodash": "^4.17.21",
64
+ "moment": "^2.30.1",
65
+ "path-to-regexp": "^8.2.0",
99
66
  "prop-types": "^15.8.1",
100
67
  "query-string": "^7.1.2",
68
+ "react": "^19.0.0",
101
69
  "react-csv": "^2.2.2",
102
- "react-dropzone": "^4.2.13",
103
- "react-intl": "^5.20.10",
104
- "react-moment": "^1.1.2",
105
- "react-redux": "^7.2.4",
106
- "react-router-dom": "^5.2.0",
107
- "redux": "^4.1.1",
108
- "redux-saga": "^1.2.1",
70
+ "react-dom": "^19.0.0",
71
+ "react-dropzone": "^14.3.8",
72
+ "react-hook-form": "^7.54.2",
73
+ "react-intl": "^7.1.10",
74
+ "react-moment": "^1.1.3",
75
+ "react-redux": "^9.2.0",
76
+ "react-router": "^7.4.0",
77
+ "redux": "^5.0.1",
78
+ "redux-saga": "^1.3.0",
109
79
  "redux-saga-routines": "^3.2.3",
110
- "semantic-ui-react": "^2.1.4",
80
+ "reselect": "^5.1.1",
81
+ "semantic-ui-calendar-react": "^0.15.3",
82
+ "semantic-ui-react": "^3.0.0-beta.2",
111
83
  "slate": "^0.47.3",
112
84
  "slate-react": "^0.22.3",
113
- "swr": "^2.0.0",
114
- "validator": "^13.6.0"
115
- },
116
- "peerDependencies": {
117
- "react": ">= 16.8.6 < 17",
118
- "react-dom": ">= 16.8.6 < 17",
119
- "semantic-ui-react": ">= 2.0.3 < 2.2"
85
+ "swr": "^2.3.3"
120
86
  },
121
- "gitHead": "03770e3241daa955de2e6e40fdaea91e3d147860"
87
+ "gitHead": "8a8c49e9d5d6bb4e5f2b503b063bfd6dd20a503d"
122
88
  }
@@ -0,0 +1,108 @@
1
+ import { path, absolutePath, relativePath } from "../routesTree";
2
+
3
+ describe("routesTree", () => {
4
+ describe("path function", () => {
5
+ it("should return root path when no location is provided", () => {
6
+ expect(path()).toBe("/");
7
+ expect(path("")).toBe("/");
8
+ });
9
+
10
+ it("should return root path for empty segments", () => {
11
+ expect(path("/")).toBe("/");
12
+ expect(path("///")).toBe("/");
13
+ });
14
+
15
+ it("should return the correct path for valid locations", () => {
16
+ expect(path("i18n")).toBe("i18n");
17
+ expect(path("i18n/messages")).toBe("messages");
18
+ expect(path("i18n/messages/new")).toBe("new");
19
+ });
20
+
21
+ it("should handle leading and trailing slashes", () => {
22
+ expect(path("/i18n")).toBe("i18n");
23
+ expect(path("i18n/")).toBe("i18n");
24
+ expect(path("/i18n/messages/")).toBe("messages");
25
+ expect(path("/i18n/messages/new/")).toBe("new");
26
+ });
27
+
28
+ it("should return undefined for invalid locations", () => {
29
+ expect(path("invalid")).toBeUndefined();
30
+ expect(path("i18n/invalid")).toBeUndefined();
31
+ expect(path("i18n/messages/invalid")).toBeUndefined();
32
+ });
33
+
34
+ it("should handle nested paths correctly", () => {
35
+ expect(path("i18n/messages")).toBe("messages");
36
+ });
37
+ });
38
+
39
+ describe("absolutePath function", () => {
40
+ it("should return root path when no location is provided", () => {
41
+ expect(absolutePath()).toBe("/");
42
+ expect(absolutePath("")).toBe("/");
43
+ });
44
+
45
+ it("should return root path for empty segments", () => {
46
+ expect(absolutePath("/")).toBe("/");
47
+ expect(absolutePath("///")).toBe("/");
48
+ });
49
+
50
+ it("should return the correct absolute path for valid locations", () => {
51
+ expect(absolutePath("i18n")).toBe("/i18n");
52
+ expect(absolutePath("i18n/messages")).toBe("/i18n/messages");
53
+ expect(absolutePath("i18n/messages/new")).toBe("/i18n/messages/new");
54
+ });
55
+
56
+ it("should handle leading and trailing slashes", () => {
57
+ expect(absolutePath("/i18n")).toBe("/i18n");
58
+ expect(absolutePath("i18n/")).toBe("/i18n");
59
+ expect(absolutePath("/i18n/messages/")).toBe("/i18n/messages");
60
+ expect(absolutePath("/i18n/messages/new/")).toBe("/i18n/messages/new");
61
+ });
62
+
63
+ it("should return undefined for invalid locations", () => {
64
+ expect(absolutePath("invalid")).toBeUndefined();
65
+ expect(absolutePath("i18n/invalid")).toBeUndefined();
66
+ expect(absolutePath("i18n/messages/invalid")).toBeUndefined();
67
+ });
68
+
69
+ it("should handle nested paths correctly", () => {
70
+ expect(absolutePath("i18n/messages")).toBe("/i18n/messages");
71
+ });
72
+ });
73
+
74
+ describe("relativePath function", () => {
75
+ it("should return empty string when no location is provided", () => {
76
+ expect(relativePath()).toBe("");
77
+ expect(relativePath("")).toBe("");
78
+ });
79
+
80
+ it("should return empty string for root path", () => {
81
+ expect(relativePath("/")).toBe("");
82
+ expect(relativePath("///")).toBe("");
83
+ });
84
+
85
+ it("should return the correct relative path for valid locations", () => {
86
+ expect(relativePath("i18n")).toBe("i18n");
87
+ expect(relativePath("i18n/messages")).toBe("i18n/messages");
88
+ expect(relativePath("i18n/messages/new")).toBe("i18n/messages/new");
89
+ });
90
+
91
+ it("should handle leading and trailing slashes", () => {
92
+ expect(relativePath("/i18n")).toBe("i18n");
93
+ expect(relativePath("i18n/")).toBe("i18n");
94
+ expect(relativePath("/i18n/messages/")).toBe("i18n/messages");
95
+ expect(relativePath("/i18n/messages/new/")).toBe("i18n/messages/new");
96
+ });
97
+
98
+ it("should return undefined for invalid locations", () => {
99
+ expect(relativePath("invalid")).toBeUndefined();
100
+ expect(relativePath("i18n/invalid")).toBeUndefined();
101
+ expect(relativePath("i18n/messages/invalid")).toBeUndefined();
102
+ });
103
+
104
+ it("should handle nested paths correctly", () => {
105
+ expect(relativePath("i18n/messages")).toBe("i18n/messages");
106
+ });
107
+ });
108
+ });
@@ -73,3 +73,13 @@ export const FUNCTIONS_QUERY = gql`
73
73
  }
74
74
  }
75
75
  `;
76
+
77
+ export const CATALOG_VIEW_CONFIGS_QUERY = gql`
78
+ query CatalogViewConfigs {
79
+ catalogViewConfigs {
80
+ id
81
+ fieldType
82
+ fieldName
83
+ }
84
+ }
85
+ `;
package/src/api.js CHANGED
@@ -11,3 +11,6 @@ export const API_USER_FILTER = "/api/:type/:id";
11
11
  export const API_GET_USER_FILTERS = "/api/:type/me";
12
12
  export const API_ACL_ENTRY = "/api/acl_entries/:id";
13
13
  export const API_ACL_RESOURCE_ENTRIES = "/api/acl_entries/:type/:id";
14
+ export const API_HIERARCHIES = "/api/hierarchies";
15
+ export const API_HIERARCHY = "/api/hierarchies/:id";
16
+ export const API_SYSTEMS = "/api/systems";
@@ -1,7 +1,7 @@
1
1
  import _ from "lodash/fp";
2
- import React, { useState } from "react";
2
+ import { lazy, useState } from "react";
3
3
  import PropTypes from "prop-types";
4
- import { Button, Form } from "semantic-ui-react";
4
+ import { Button, Form, FormInput, FormSelect } from "semantic-ui-react";
5
5
  import { useForm, Controller } from "react-hook-form";
6
6
  import { useIntl } from "react-intl";
7
7
  import { connect } from "react-redux";
@@ -10,14 +10,14 @@ import {
10
10
  lowerDeburrTrim,
11
11
  } from "@truedat/core/services/sort";
12
12
  import { HistoryBackButton } from "@truedat/core/components";
13
- import { getRecipients } from "@truedat/audit/selectors";
13
+ import { getRecipients } from "@truedat/core/selectors";
14
14
  import { useAclEntryCreate } from "@truedat/core/hooks/useAclEntries";
15
15
 
16
- const UsersSearchLoader = React.lazy(() =>
17
- import("@truedat/auth/users/components/UsersSearchLoader")
16
+ const UsersSearchLoader = lazy(
17
+ () => import("@truedat/auth/users/components/UsersSearchLoader")
18
18
  );
19
- const GroupsSearchLoader = React.lazy(() =>
20
- import("@truedat/auth/groups/components/GroupsSearchLoader")
19
+ const GroupsSearchLoader = lazy(
20
+ () => import("@truedat/auth/groups/components/GroupsSearchLoader")
21
21
  );
22
22
 
23
23
  const MIN_SEARCH_CHARACTERS = 2;
@@ -72,7 +72,7 @@ export const AddMemberForm = ({ resource, onSuccess, roles, options }) => {
72
72
  field: { onBlur, onChange, value },
73
73
  fieldState: { error },
74
74
  }) => (
75
- <Form.Dropdown
75
+ <FormSelect
76
76
  placeholder={formatMessage({
77
77
  id: "domain.member",
78
78
  })}
@@ -103,7 +103,7 @@ export const AddMemberForm = ({ resource, onSuccess, roles, options }) => {
103
103
  field: { onBlur, onChange, value },
104
104
  fieldState: { error },
105
105
  }) => (
106
- <Form.Select
106
+ <FormSelect
107
107
  basic
108
108
  clearable
109
109
  error={!!error}
@@ -129,7 +129,7 @@ export const AddMemberForm = ({ resource, onSuccess, roles, options }) => {
129
129
  field: { onBlur, onChange, value },
130
130
  fieldState: { error },
131
131
  }) => (
132
- <Form.Input
132
+ <FormInput
133
133
  autoComplete="off"
134
134
  error={!!error}
135
135
  id="description"
@@ -1,6 +1,4 @@
1
- import React from "react";
2
1
  import PropTypes from "prop-types";
3
-
4
2
  import { Container, Header, Icon, Segment } from "semantic-ui-react";
5
3
  import { FormattedMessage } from "react-intl";
6
4
 
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import { useIntl } from "react-intl";
3
2
  import { useAuthorized } from "../hooks";
4
3
  import {
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import { useIntl } from "react-intl";
3
2
  import { useAuthorized } from "../hooks";
4
3
  import {
@@ -1,5 +1,5 @@
1
1
  import _ from "lodash/fp";
2
- import React, { useEffect, useState } from "react";
2
+ import { useEffect, useState } from "react";
3
3
  import PropTypes from "prop-types";
4
4
  import { useIntl } from "react-intl";
5
5
  import { connect } from "react-redux";
@@ -1,7 +1,6 @@
1
1
  /* eslint-disable fp/no-mutation */
2
2
  /* eslint-disable fp/no-let */
3
3
  import _ from "lodash/fp";
4
- import React from "react";
5
4
  import PropTypes from "prop-types";
6
5
  import { useIntl } from "react-intl";
7
6
  import { CSVLink } from "react-csv";
@@ -1,6 +1,5 @@
1
1
  import _ from "lodash/fp";
2
2
  import PropTypes from "prop-types";
3
- import React from "react";
4
3
  import { Label, Popup } from "semantic-ui-react";
5
4
 
6
5
  const ArrayDecorator = (limit, concatenator) => (list) => {
@@ -1,14 +1,14 @@
1
1
  import PropTypes from "prop-types";
2
2
  import { useAuthorized } from "../hooks/useAuthorized";
3
3
 
4
- export const Authorized = props => {
4
+ export const Authorized = (props) => {
5
5
  const authorized = useAuthorized(props.roles);
6
6
  return authorized ? props.children : null;
7
7
  };
8
8
 
9
9
  Authorized.propTypes = {
10
10
  children: PropTypes.node,
11
- roles: PropTypes.array
11
+ roles: PropTypes.array,
12
12
  };
13
13
 
14
14
  export default Authorized;
@@ -1,5 +1,5 @@
1
1
  import _ from "lodash/fp";
2
- import React, { Fragment } from "react";
2
+ import { Fragment } from "react";
3
3
  import PropTypes from "prop-types";
4
4
  import { Dropdown } from "semantic-ui-react";
5
5
  import { FormattedMessage, useIntl } from "react-intl";
@@ -77,7 +77,6 @@ export const AvailableFilters = ({
77
77
  </b>
78
78
  </Dropdown.Header>
79
79
  ) : null}
80
-
81
80
  {_.flow(
82
81
  _.defaultTo([]),
83
82
  _.sortBy(i18nOrder(formatMessage, "filters")),
@@ -1,5 +1,5 @@
1
1
  import _ from "lodash/fp";
2
- import React, { useState } from "react";
2
+ import { useState } from "react";
3
3
  import PropTypes from "prop-types";
4
4
  import { Button } from "semantic-ui-react";
5
5
  import { useIntl } from "react-intl";
@@ -1,4 +1,4 @@
1
- import React, { useState } from "react";
1
+ import { useState } from "react";
2
2
  import PropTypes from "prop-types";
3
3
  import _ from "lodash/fp";
4
4
  import { useIntl } from "react-intl";
@@ -1,8 +1,7 @@
1
1
  import _ from "lodash/fp";
2
2
  import PropTypes from "prop-types";
3
- import React from "react";
4
3
  import { useQuery } from "@apollo/client";
5
- import { CATALOG_VIEW_CONFIGS_QUERY } from "@truedat/dd/api/queries";
4
+ import { CATALOG_VIEW_CONFIGS_QUERY } from "@truedat/core/api/queries";
6
5
  import { linkTo } from "@truedat/core/routes";
7
6
  import { useIntl } from "react-intl";
8
7
  import { useAuthorized } from "../hooks";
@@ -1,5 +1,4 @@
1
1
  import _ from "lodash/fp";
2
- import React from "react";
3
2
  import PropTypes from "prop-types";
4
3
  import { Comment } from "semantic-ui-react";
5
4
  import Moment from "react-moment";
@@ -16,7 +15,7 @@ const avatarStyle = {
16
15
  float: "left",
17
16
  textAlign: "center",
18
17
  lineHeight: "35px",
19
- textTransform: "uppercase"
18
+ textTransform: "uppercase",
20
19
  };
21
20
 
22
21
  const avatarSeparatorStyle = {
@@ -25,7 +24,7 @@ const avatarSeparatorStyle = {
25
24
  marginLeft: "15px",
26
25
  marginTop: "5px",
27
26
  width: "5px",
28
- position: "absolute"
27
+ position: "absolute",
29
28
  };
30
29
 
31
30
  const colors = [
@@ -40,13 +39,13 @@ const colors = [
40
39
  "#4C3F54",
41
40
  "#A10115",
42
41
  "#F78B2D",
43
- "#556DAC"
42
+ "#556DAC",
44
43
  ];
45
44
 
46
- const getHashString = str =>
45
+ const getHashString = (str) =>
47
46
  str.split("").reduce((a, b) => a + b.charCodeAt(0), 0);
48
47
 
49
- const getColor = user =>
48
+ const getColor = (user) =>
50
49
  typeof user === "string"
51
50
  ? colors[getHashString(user) % colors.length]
52
51
  : _.sample(colors);
@@ -62,7 +61,7 @@ const UserAvatar = ({ userName }) => (
62
61
  );
63
62
 
64
63
  UserAvatar.propTypes = {
65
- userName: PropTypes.string
64
+ userName: PropTypes.string,
66
65
  };
67
66
 
68
67
  export const CommentRow = ({ user, content, created_at }, i) => (
@@ -81,7 +80,7 @@ export const CommentRow = ({ user, content, created_at }, i) => (
81
80
  CommentRow.propTypes = {
82
81
  user: PropTypes.object,
83
82
  content: PropTypes.string,
84
- created_at: PropTypes.string
83
+ created_at: PropTypes.string,
85
84
  };
86
85
 
87
86
  export default CommentRow;
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import PropTypes from "prop-types";
3
2
  import { connect } from "react-redux";
4
3
  import { useIntl } from "react-intl";
@@ -23,13 +22,13 @@ export const Comments = ({ comments, commentsResource }) => {
23
22
  Comments.propTypes = {
24
23
  comments: PropTypes.array,
25
24
  commentsResource: PropTypes.object,
26
- intl: PropTypes.object
25
+ intl: PropTypes.object,
27
26
  };
28
27
 
29
- const mapStateToProps = state => ({
28
+ const mapStateToProps = (state) => ({
30
29
  comments: state.comments,
31
30
  commentsLoading: state.commentsLoading,
32
- commentsResource: state.commentsResource
31
+ commentsResource: state.commentsResource,
33
32
  });
34
33
 
35
34
  export default connect(mapStateToProps)(Comments);
@@ -1,4 +1,4 @@
1
- import React from "react";
1
+ import { Component } from "react";
2
2
  import PropTypes from "prop-types";
3
3
  import { Button, Form } from "semantic-ui-react";
4
4
  import { connect } from "react-redux";
@@ -6,7 +6,7 @@ import { compose } from "redux";
6
6
  import { injectIntl } from "react-intl";
7
7
  import { createComment } from "../routines";
8
8
 
9
- class CommentsForm extends React.Component {
9
+ class CommentsForm extends Component {
10
10
  static propTypes = {
11
11
  createComment: PropTypes.func,
12
12
  commentsResource: PropTypes.object,
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import PropTypes from "prop-types";
3
2
  import { Modal } from "semantic-ui-react";
4
3
  import { FormattedMessage } from "react-intl";
@@ -1,8 +1,7 @@
1
1
  import _ from "lodash/fp";
2
- import React from "react";
3
2
  import PropTypes from "prop-types";
4
3
  import queryString from "query-string";
5
- import { useLocation, Link } from "react-router-dom";
4
+ import { useLocation, Link } from "react-router";
6
5
  import { Menu } from "semantic-ui-react";
7
6
 
8
7
  export const CursorPagination = ({ pageInfo, className }) => {
@@ -1,5 +1,4 @@
1
1
  import _ from "lodash/fp";
2
- import React from "react";
3
2
  import PropTypes from "prop-types";
4
3
  import { connect } from "react-redux";
5
4
  import { useIntl } from "react-intl";
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import PropTypes from "prop-types";
3
2
  import Moment from "react-moment";
4
3
 
@@ -1,4 +1,4 @@
1
- import React, { useEffect, useState } from "react";
1
+ import { useEffect, useState } from "react";
2
2
  import moment from "moment";
3
3
  import PropTypes from "prop-types";
4
4
  import { useIntl } from "react-intl";
@@ -1,4 +1,4 @@
1
- import React, { useEffect, useState } from "react";
1
+ import { useEffect, useState } from "react";
2
2
  import moment from "moment";
3
3
  import PropTypes from "prop-types";
4
4
  import { DatesRangeInput } from "semantic-ui-calendar-react";
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import PropTypes from "prop-types";
3
2
  import Moment from "react-moment";
4
3
 
@@ -1,4 +1,4 @@
1
- import React, { useState } from "react";
1
+ import { useState } from "react";
2
2
  import PropTypes from "prop-types";
3
3
  import { useIntl } from "react-intl";
4
4
  import { Input } from "semantic-ui-react";
@@ -1,5 +1,4 @@
1
1
  import _ from "lodash/fp";
2
- import React from "react";
3
2
  import PropTypes from "prop-types";
4
3
  import { useIntl } from "react-intl";
5
4
  import { useQuery } from "@apollo/client";
@@ -7,7 +6,7 @@ import { accentInsensitivePathOrder } from "../services/sort";
7
6
  import { stratify, flatten } from "../services/tree";
8
7
  import { DOMAINS_QUERY } from "../api/queries";
9
8
  import TreeSelector from "./TreeSelector";
10
-
9
+ import Loading from "./Loading";
11
10
  export const DomainSelector = ({
12
11
  allNodesOpen,
13
12
  action,
@@ -33,7 +32,7 @@ export const DomainSelector = ({
33
32
  onCompleted: onLoad,
34
33
  });
35
34
  if (error) return null;
36
- if (loading) return null;
35
+ if (loading) return <Loading />;
37
36
 
38
37
  const options = _.flow(
39
38
  _.propOr([], "domains"),
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import PropTypes from "prop-types";
3
2
  import { Icon, Dropdown } from "semantic-ui-react";
4
3