@cccsaurora/howler-ui 3.1.0-dev.1466 → 3.1.0-dev.1602

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 (729) hide show
  1. package/api/action/execute.d.ts +1 -1
  2. package/api/action/index.d.ts +10 -6
  3. package/api/action/index.js +5 -9
  4. package/api/action/operations.js +2 -2
  5. package/api/analytic/comments/index.d.ts +4 -6
  6. package/api/analytic/comments/react.d.ts +2 -2
  7. package/api/analytic/favourite.d.ts +2 -4
  8. package/api/analytic/index.d.ts +7 -4
  9. package/api/analytic/index.js +2 -2
  10. package/api/analytic/notebooks/index.d.ts +2 -4
  11. package/api/analytic/owner.d.ts +1 -1
  12. package/api/auth/apikey.d.ts +2 -2
  13. package/api/auth/login.d.ts +2 -2
  14. package/api/configs/index.d.ts +1 -1
  15. package/api/dossier.d.ts +16 -0
  16. package/api/{dossier/index.js → dossier.js} +6 -4
  17. package/api/help.d.ts +2 -2
  18. package/api/hit/assign.d.ts +6 -2
  19. package/api/hit/comments/index.d.ts +4 -6
  20. package/api/hit/comments/react.d.ts +2 -2
  21. package/api/hit/index.d.ts +3 -8
  22. package/api/hit/labels.d.ts +2 -2
  23. package/api/hit/overwrite.d.ts +1 -1
  24. package/api/hit/transition.d.ts +1 -1
  25. package/api/index.d.ts +6 -6
  26. package/api/index.js +7 -6
  27. package/api/notebook/environments.d.ts +1 -1
  28. package/api/notebook/index.d.ts +1 -1
  29. package/api/overview/index.d.ts +4 -4
  30. package/api/search/action.d.ts +1 -1
  31. package/api/search/analytic.d.ts +1 -1
  32. package/api/search/case.d.ts +1 -1
  33. package/api/search/count/hit.d.ts +1 -1
  34. package/api/search/dossier.d.ts +1 -1
  35. package/api/search/eql/hit.d.ts +1 -1
  36. package/api/search/explain/hit.d.ts +1 -1
  37. package/api/search/facet/hit.d.ts +1 -1
  38. package/api/search/fields/hit.js +1 -2
  39. package/api/search/fields/user.js +2 -4
  40. package/api/search/grouped/hit.d.ts +1 -1
  41. package/api/search/grouped/user.js +3 -0
  42. package/api/search/histogram/hit.d.ts +1 -1
  43. package/api/search/hit.d.ts +1 -1
  44. package/api/search/overview.d.ts +1 -1
  45. package/api/search/sigma/hit.d.ts +1 -1
  46. package/api/search/template.d.ts +1 -1
  47. package/api/search/user.d.ts +30 -2
  48. package/api/search/user.js +3 -0
  49. package/api/search/view.d.ts +1 -1
  50. package/api/socket/viewers.d.ts +1 -1
  51. package/api/socket/viewers.js +1 -1
  52. package/api/template/index.d.ts +3 -3
  53. package/api/template/index.js +2 -2
  54. package/api/user/avatar/index.d.ts +1 -1
  55. package/api/user/groups.d.ts +1 -1
  56. package/api/user/index.d.ts +2 -2
  57. package/api/user/whoami.d.ts +1 -1
  58. package/api/utils/createPermissionsApi.d.ts +10 -0
  59. package/api/utils/createPermissionsApi.js +10 -0
  60. package/api/v2/case/index.d.ts +4 -4
  61. package/api/v2/case/items.d.ts +3 -3
  62. package/api/v2/case/rules.d.ts +3 -3
  63. package/api/v2/fuzzy.d.ts +1 -1
  64. package/api/v2/search/facet.d.ts +1 -1
  65. package/api/v2/search/index.d.ts +1 -1
  66. package/api/view/favourite.d.ts +2 -4
  67. package/api/view/index.d.ts +9 -5
  68. package/api/view/index.js +3 -1
  69. package/branding/AppBrand.d.ts +2 -2
  70. package/branding/AppBrand.js +4 -6
  71. package/components/app/App.js +248 -51
  72. package/components/app/AppContainer.js +1 -1
  73. package/components/app/drawers/ApiKeyDrawer.js +13 -5
  74. package/components/app/drawers/AssignUserDrawer.js +11 -4
  75. package/components/app/hooks/useMatchers.d.ts +3 -3
  76. package/components/app/hooks/useMatchers.js +12 -12
  77. package/components/app/hooks/useMatchers.test.js +15 -14
  78. package/components/app/hooks/useTitle.js +8 -7
  79. package/components/app/providers/AnalyticProvider.d.ts +1 -1
  80. package/components/app/providers/AnalyticProvider.js +7 -4
  81. package/components/app/providers/ApiConfigProvider.d.ts +2 -1
  82. package/components/app/providers/ApiConfigProvider.js +12 -10
  83. package/components/app/providers/AppDrawerProvider.js +2 -2
  84. package/components/app/providers/AvatarProvider.js +18 -11
  85. package/components/app/providers/FavouritesProvider.js +56 -86
  86. package/components/app/providers/FieldProvider.js +1 -1
  87. package/components/app/providers/GridColumnsProvider.d.ts +1 -1
  88. package/components/app/providers/GridColumnsProvider.js +17 -4
  89. package/components/app/providers/GridColumnsProvider.test.js +2 -1
  90. package/components/app/providers/LocalStorageProvider.d.ts +2 -2
  91. package/components/app/providers/LocalStorageProvider.js +4 -3
  92. package/components/app/providers/ModalProvider.js +8 -1
  93. package/components/app/providers/OverviewProvider.js +10 -2
  94. package/components/app/providers/ParameterProvider.d.ts +7 -7
  95. package/components/app/providers/ParameterProvider.js +42 -5
  96. package/components/app/providers/ParameterProvider.test.js +1 -0
  97. package/components/app/providers/RecordProvider.js +7 -1
  98. package/components/app/providers/RecordSearchProvider.d.ts +1 -2
  99. package/components/app/providers/RecordSearchProvider.js +32 -23
  100. package/components/app/providers/RecordSearchProvider.test.js +2 -1
  101. package/components/app/providers/SearchResponseProvider.d.ts +9 -6
  102. package/components/app/providers/SearchResponseProvider.js +37 -19
  103. package/components/app/providers/SearchResponseProvider.test.js +37 -11
  104. package/components/app/providers/SocketProvider.js +6 -4
  105. package/components/app/providers/UserListProvider.d.ts +1 -1
  106. package/components/app/providers/ViewProvider.d.ts +2 -2
  107. package/components/app/providers/ViewProvider.js +22 -12
  108. package/components/app/providers/ViewProvider.test.js +2 -2
  109. package/components/app/providers/contextUtils.d.ts +1 -0
  110. package/components/app/providers/contextUtils.js +3 -0
  111. package/components/elements/Comment.d.ts +1 -1
  112. package/components/elements/Comment.js +11 -9
  113. package/components/elements/ContextMenu.js +1 -1
  114. package/components/elements/ContextMenu.test.js +2 -2
  115. package/components/elements/EditRow.d.ts +9 -4
  116. package/components/elements/EditRow.js +5 -4
  117. package/components/elements/MarkdownEditor.js +1 -1
  118. package/components/elements/MembershipManagement.test.js +178 -0
  119. package/components/elements/ObjectDetails.js +6 -6
  120. package/components/elements/ThemedEditor.js +17 -17
  121. package/components/elements/UserList.d.ts +2 -0
  122. package/components/elements/UserList.js +26 -18
  123. package/components/elements/UserList.test.js +24 -1
  124. package/components/elements/addons/buttons/CustomButton.d.ts +1 -1
  125. package/components/elements/addons/buttons/CustomButton.js +2 -2
  126. package/components/elements/addons/buttons/CustomIconButton.d.ts +1 -1
  127. package/components/elements/addons/buttons/CustomIconButton.js +3 -3
  128. package/components/elements/addons/buttons/index.d.ts +1 -1
  129. package/components/elements/addons/layout/FlexOne.d.ts +2 -2
  130. package/components/elements/addons/layout/FlexOne.test.js +1 -0
  131. package/components/elements/addons/layout/FlexPort.d.ts +1 -1
  132. package/components/elements/addons/layout/FlexPort.js +9 -2
  133. package/components/elements/addons/layout/FlexVertical.d.ts +2 -2
  134. package/components/elements/addons/layout/FlexVertical.js +1 -1
  135. package/components/elements/addons/layout/vsbox/VSBox.d.ts +2 -2
  136. package/components/elements/addons/layout/vsbox/VSBox.js +5 -4
  137. package/components/elements/addons/layout/vsbox/VSBoxElement.d.ts +1 -1
  138. package/components/elements/addons/layout/vsbox/VSBoxHeader.js +4 -3
  139. package/components/elements/addons/lists/TuiList.d.ts +2 -2
  140. package/components/elements/addons/lists/TuiList.js +1 -1
  141. package/components/elements/addons/lists/TuiListBase.d.ts +2 -2
  142. package/components/elements/addons/lists/TuiListBase.js +4 -4
  143. package/components/elements/addons/lists/TuiListElement.d.ts +2 -2
  144. package/components/elements/addons/lists/TuiListElement.js +2 -2
  145. package/components/elements/addons/lists/TuiListMenu.d.ts +13 -37
  146. package/components/elements/addons/lists/TuiListMenu.js +8 -8
  147. package/components/elements/addons/lists/TuiListProvider.d.ts +2 -2
  148. package/components/elements/addons/lists/TuiListProvider.js +4 -4
  149. package/components/elements/addons/lists/hooks/useTuiListKeyboard.js +1 -1
  150. package/components/elements/addons/lists/table/TuiTable.d.ts +1 -1
  151. package/components/elements/addons/lists/table/TuiTable.js +1 -1
  152. package/components/elements/addons/lists/table/TuiTableBody.d.ts +1 -1
  153. package/components/elements/addons/lists/table/TuiTableBody.js +1 -1
  154. package/components/elements/addons/lists/table/TuiTableHead.d.ts +1 -1
  155. package/components/elements/addons/lists/table/TuiTableHead.js +1 -1
  156. package/components/elements/addons/lists/table/TuiTableHeader.d.ts +1 -1
  157. package/components/elements/addons/lists/table/TuiTableLayout.js +1 -1
  158. package/components/elements/addons/search/SearchPagination.d.ts +1 -1
  159. package/components/elements/addons/search/SearchPagination.test.js +1 -1
  160. package/components/elements/addons/search/SearchTotal.d.ts +1 -1
  161. package/components/elements/addons/search/phrase/Phrase.d.ts +2 -2
  162. package/components/elements/addons/search/phrase/Phrase.js +7 -7
  163. package/components/elements/addons/search/phrase/PhraseConsumer.d.ts +2 -2
  164. package/components/elements/addons/search/phrase/PhraseLexer.d.ts +1 -1
  165. package/components/elements/addons/search/phrase/PhraseLexer.js +6 -6
  166. package/components/elements/addons/search/phrase/WordLexer.test.js +1 -0
  167. package/components/elements/addons/search/phrase/index.d.ts +2 -2
  168. package/components/elements/addons/search/phrase/index.js +3 -2
  169. package/components/elements/addons/search/phrase/word/consumers/WhitespaceConsumer.d.ts +1 -1
  170. package/components/elements/addons/search/phrase/word/consumers/WhitespaceConsumer.js +1 -1
  171. package/components/elements/addons/search/phrase/word/consumers/WordConsumer.d.ts +1 -1
  172. package/components/elements/case/CaseCard.js +10 -4
  173. package/components/elements/case/CasePreview.js +1 -1
  174. package/components/elements/display/ActionButton.js +3 -1
  175. package/components/elements/display/ChipPopper.js +1 -1
  176. package/components/elements/display/ChipPopper.test.js +1 -0
  177. package/components/elements/display/Classification.js +6 -5
  178. package/components/elements/display/ClassificationChip.d.ts +2 -4
  179. package/components/elements/display/ClassificationChip.js +5 -3
  180. package/components/elements/display/DocumentationButton.js +1 -1
  181. package/components/elements/display/DocumentationButton.test.js +1 -1
  182. package/components/elements/display/HandlebarsMarkdown.js +2 -2
  183. package/components/elements/display/HowlerAvatar.d.ts +1 -0
  184. package/components/elements/display/HowlerAvatar.js +5 -4
  185. package/components/elements/display/HowlerAvatarHeader.js +2 -2
  186. package/components/elements/display/Image.test.js +1 -0
  187. package/components/elements/display/ItemManager.d.ts +6 -6
  188. package/components/elements/display/ItemManager.js +1 -1
  189. package/components/elements/display/Markdown.js +9 -3
  190. package/components/elements/display/Modal.js +3 -3
  191. package/components/elements/display/QueryResultText.js +1 -1
  192. package/components/elements/display/TextDivider.test.js +1 -0
  193. package/components/elements/display/TypingIndicator.d.ts +1 -1
  194. package/components/elements/display/UserPageWrapper.js +2 -2
  195. package/components/elements/display/handlebars/helpers.js +1 -1
  196. package/components/elements/display/json/JSONViewer.js +2 -2
  197. package/components/elements/display/markdownPlugins/tabs.js +4 -0
  198. package/components/elements/display/modals/CreateActionModal.js +1 -1
  199. package/components/elements/display/modals/RationaleModal.js +1 -2
  200. package/components/elements/display/modals/RationaleModal.test.js +9 -5
  201. package/components/elements/event/EventPreview.js +1 -1
  202. package/components/elements/hit/HitActions.js +5 -7
  203. package/components/elements/hit/HitBanner.js +4 -16
  204. package/components/elements/hit/HitBanner.test.js +11 -20
  205. package/components/elements/hit/HitLabels.js +23 -13
  206. package/components/elements/hit/HitLinks.js +4 -4
  207. package/components/elements/hit/HitNotebooks.js +28 -10
  208. package/components/elements/hit/HitOutline.js +9 -15
  209. package/components/elements/hit/HitOutline.test.js +5 -5
  210. package/components/elements/hit/HitOverview.js +3 -3
  211. package/components/elements/hit/HitPreview.d.ts +1 -1
  212. package/components/elements/hit/HitPreview.js +6 -7
  213. package/components/elements/hit/HitSummary.js +8 -8
  214. package/components/elements/hit/PivotTooltip.js +1 -1
  215. package/components/elements/hit/actions/ButtonActions.js +2 -2
  216. package/components/elements/hit/actions/DropdownActions.js +4 -4
  217. package/components/elements/hit/aggregate/HitGraph.js +28 -11
  218. package/components/elements/hit/elements/AnalyticLink.js +2 -2
  219. package/components/elements/hit/elements/AnalyticLink.test.js +1 -1
  220. package/components/elements/hit/elements/Assigned.js +1 -1
  221. package/components/elements/hit/elements/Assigned.test.js +1 -1
  222. package/components/elements/hit/elements/EscalationChip.js +2 -2
  223. package/components/elements/hit/elements/HitTimestamp.js +2 -2
  224. package/components/elements/hit/grid/AddColumnModal.js +2 -2
  225. package/components/elements/hit/grid/ColumnHeader.js +1 -1
  226. package/components/elements/hit/grid/RecordRow.js +1 -1
  227. package/components/elements/hit/grid/RecordTable.d.ts +4 -3
  228. package/components/elements/hit/grid/RecordTable.js +6 -6
  229. package/components/elements/hit/related/PivotLink.js +2 -2
  230. package/components/elements/hit/related/RelatedIcon.js +2 -2
  231. package/components/elements/hit/related/RelatedLink.js +1 -1
  232. package/components/elements/hit/related/RelatedRecords.js +1 -1
  233. package/components/elements/membership/Members.d.ts +6 -0
  234. package/components/elements/membership/Members.js +14 -0
  235. package/components/elements/membership/MembershipManagement.d.ts +9 -0
  236. package/components/elements/membership/MembershipManagement.js +119 -0
  237. package/components/elements/membership/types.d.ts +7 -0
  238. package/components/elements/membership/utils.d.ts +2 -0
  239. package/components/elements/membership/utils.js +6 -0
  240. package/components/elements/record/RecordComments.js +16 -10
  241. package/components/elements/record/RecordContextMenu.d.ts +2 -2
  242. package/components/elements/record/RecordContextMenu.js +11 -5
  243. package/components/elements/record/RecordContextMenu.test.js +14 -6
  244. package/components/elements/record/RecordRelated.js +2 -2
  245. package/components/elements/search/FuzzySearchBar.js +1 -1
  246. package/components/elements/view/LayoutToggle.d.ts +1 -1
  247. package/components/elements/view/ViewTitle.js +3 -4
  248. package/components/hooks/useHitActions.d.ts +1 -1
  249. package/components/hooks/useHitActions.js +25 -15
  250. package/components/hooks/useLocalStorage.d.ts +1 -1
  251. package/components/hooks/useLocalStorage.js +1 -1
  252. package/components/hooks/useLocalStorageItem.d.ts +11 -1
  253. package/components/hooks/useLocalStorageItem.js +7 -5
  254. package/components/hooks/useLocalStorageItem.test.js +23 -0
  255. package/components/hooks/useMyAccessibility.d.ts +7 -0
  256. package/components/hooks/useMyAccessibility.js +21 -0
  257. package/components/hooks/useMyApi.d.ts +1 -1
  258. package/components/hooks/useMyApi.js +4 -4
  259. package/components/hooks/useMyChart.d.ts +46 -48
  260. package/components/hooks/useMyChart.js +30 -9
  261. package/components/hooks/useMyCookies.d.ts +3 -0
  262. package/components/hooks/useMyCookies.js +8 -0
  263. package/components/hooks/useMyLocalStorage.d.ts +8 -2
  264. package/components/hooks/useMyLocalStorage.js +1 -1
  265. package/components/hooks/useMyPreferences.d.ts +1 -1
  266. package/components/hooks/useMyPreferences.js +93 -127
  267. package/components/hooks/useMyRouter.d.ts +2 -0
  268. package/components/hooks/useMyRouter.js +24 -0
  269. package/components/hooks/useMySearch.d.ts +1 -1
  270. package/components/hooks/useMySearch.js +17 -7
  271. package/components/hooks/useMySnackbar.js +1 -1
  272. package/components/hooks/useMyTheme.d.ts +1 -1
  273. package/components/hooks/useMyTheme.js +13 -8
  274. package/components/hooks/useMyTheme.test.js +11 -6
  275. package/components/hooks/useMyUser.d.ts +1 -1
  276. package/components/hooks/useMyUser.js +6 -5
  277. package/components/hooks/useMyUserFunctions.d.ts +2 -2
  278. package/components/hooks/useMyUserFunctions.js +14 -10
  279. package/components/hooks/useMyUserList.d.ts +1 -1
  280. package/components/hooks/useMyUtils.js +1 -1
  281. package/components/hooks/useParamState.js +5 -3
  282. package/components/hooks/useParamState.test.js +1 -1
  283. package/components/hooks/useRecordSelection.d.ts +4 -3
  284. package/components/hooks/useRecordSelection.js +5 -5
  285. package/components/hooks/useScrollRestoration.js +3 -3
  286. package/components/logins/Login.d.ts +1 -1
  287. package/components/logins/Login.js +4 -6
  288. package/components/logins/auth/OAuthLogin.js +1 -1
  289. package/components/logins/auth/UserPassLogin.d.ts +1 -1
  290. package/components/logins/hooks/useLogin.js +10 -6
  291. package/components/routes/403.js +1 -1
  292. package/components/routes/403.test.js +7 -3
  293. package/components/routes/404.js +1 -1
  294. package/components/routes/404.test.js +7 -3
  295. package/components/routes/ErrorBoundary.d.ts +2 -2
  296. package/components/routes/ErrorBoundary.js +2 -2
  297. package/components/routes/ErrorBoundary.test.js +1 -4
  298. package/components/routes/ErrorOccured.js +1 -1
  299. package/components/routes/ErrorOccured.test.js +7 -3
  300. package/components/routes/Logout.js +3 -4
  301. package/components/routes/Logout.test.js +12 -11
  302. package/components/routes/action/edit/ActionEditor.js +38 -30
  303. package/components/routes/action/shared/ActionReportDisplay.js +1 -1
  304. package/components/routes/action/shared/OperationEntry.js +2 -2
  305. package/components/routes/action/shared/OperationStep.js +12 -10
  306. package/components/routes/action/useMyActionFunctions.d.ts +3 -3
  307. package/components/routes/action/useMyActionFunctions.js +13 -13
  308. package/components/routes/action/view/ActionDetails.d.ts +1 -1
  309. package/components/routes/action/view/ActionDetails.js +46 -26
  310. package/components/routes/action/view/ActionSearch.js +11 -10
  311. package/components/routes/action/view/Integrations.js +2 -2
  312. package/components/routes/action/view/markdown/integrations.en.md.js +1 -1
  313. package/components/routes/action/view/markdown/integrations.fr.md.js +1 -1
  314. package/components/routes/admin/users/UserEditor.js +21 -8
  315. package/components/routes/admin/users/UserSearch.js +10 -9
  316. package/components/routes/advanced/QueryBuilder.js +17 -11
  317. package/components/routes/advanced/luceneCompletionProvider.js +42 -21
  318. package/components/routes/analytics/AnalyticComments.js +19 -14
  319. package/components/routes/analytics/AnalyticDetails.d.ts +1 -1
  320. package/components/routes/analytics/AnalyticDetails.js +20 -16
  321. package/components/routes/analytics/AnalyticHitComments.js +13 -6
  322. package/components/routes/analytics/AnalyticHitComments.test.js +5 -4
  323. package/components/routes/analytics/AnalyticNotebooks.js +5 -5
  324. package/components/routes/analytics/AnalyticOverview.js +28 -15
  325. package/components/routes/analytics/AnalyticOverviews.js +2 -2
  326. package/components/routes/analytics/AnalyticSearch.js +11 -10
  327. package/components/routes/analytics/AnalyticTemplates.js +3 -3
  328. package/components/routes/analytics/TriageSettings.d.ts +1 -1
  329. package/components/routes/analytics/TriageSettings.js +1 -1
  330. package/components/routes/analytics/widgets/Assessment.js +1 -1
  331. package/components/routes/analytics/widgets/Created.js +9 -9
  332. package/components/routes/analytics/widgets/Escalation.js +3 -3
  333. package/components/routes/analytics/widgets/Stacked.js +5 -5
  334. package/components/routes/analytics/widgets/Status.js +2 -2
  335. package/components/routes/cases/CaseViewer.js +1 -1
  336. package/components/routes/cases/CaseViewer.test.js +2 -2
  337. package/components/routes/cases/Cases.d.ts +1 -1
  338. package/components/routes/cases/Cases.js +8 -7
  339. package/components/routes/cases/constants.d.ts +3 -3
  340. package/components/routes/cases/detail/AlertPanel.js +1 -1
  341. package/components/routes/cases/detail/AlertPanel.test.js +4 -6
  342. package/components/routes/cases/detail/CaseDashboard.js +8 -4
  343. package/components/routes/cases/detail/CaseDashboard.test.js +2 -2
  344. package/components/routes/cases/detail/CaseDetails.js +7 -2
  345. package/components/routes/cases/detail/CaseDetails.test.js +1 -1
  346. package/components/routes/cases/detail/CaseObservables.js +5 -4
  347. package/components/routes/cases/detail/CaseObservables.test.js +1 -1
  348. package/components/routes/cases/detail/CaseOverview.js +2 -2
  349. package/components/routes/cases/detail/CaseRules.js +10 -6
  350. package/components/routes/cases/detail/CaseRules.test.js +2 -2
  351. package/components/routes/cases/detail/CaseSearch.js +5 -5
  352. package/components/routes/cases/detail/CaseSearch.test.js +2 -2
  353. package/components/routes/cases/detail/CaseSidebar.js +12 -7
  354. package/components/routes/cases/detail/CaseSidebar.test.js +5 -6
  355. package/components/routes/cases/detail/CaseTask.js +27 -15
  356. package/components/routes/cases/detail/CaseTask.test.js +8 -1
  357. package/components/routes/cases/detail/CaseTimeline.js +8 -8
  358. package/components/routes/cases/detail/CaseTimeline.test.js +6 -6
  359. package/components/routes/cases/detail/CreateRuleDialog.js +4 -4
  360. package/components/routes/cases/detail/CreateRuleDialog.test.js +2 -2
  361. package/components/routes/cases/detail/ItemPage.js +3 -3
  362. package/components/routes/cases/detail/MarkdownPage.test.js +0 -4
  363. package/components/routes/cases/detail/RelatedCasePanel.js +1 -1
  364. package/components/routes/cases/detail/RelatedCasePanel.test.js +4 -6
  365. package/components/routes/cases/detail/TaskPanel.js +8 -8
  366. package/components/routes/cases/detail/TaskPanel.test.js +3 -3
  367. package/components/routes/cases/detail/aggregates/CaseAggregate.js +1 -1
  368. package/components/routes/cases/detail/aggregates/SourceAggregate.js +3 -3
  369. package/components/routes/cases/detail/observables/Observable.js +4 -5
  370. package/components/routes/cases/detail/observables/Observable.test.js +1 -1
  371. package/components/routes/cases/detail/observables/ObservableTable.js +3 -3
  372. package/components/routes/cases/detail/observables/ObservableTable.test.js +1 -1
  373. package/components/routes/cases/detail/sidebar/CaseFolder.js +24 -20
  374. package/components/routes/cases/detail/sidebar/CaseFolder.test.js +1 -1
  375. package/components/routes/cases/detail/sidebar/CaseFolderContextMenu.js +4 -2
  376. package/components/routes/cases/detail/sidebar/CaseFolderContextMenu.test.js +3 -2
  377. package/components/routes/cases/detail/sidebar/FolderEntry.js +3 -3
  378. package/components/routes/cases/detail/sidebar/FolderEntry.test.js +3 -3
  379. package/components/routes/cases/detail/sidebar/types.d.ts +1 -1
  380. package/components/routes/cases/detail/sidebar/utils.js +1 -1
  381. package/components/routes/cases/detail/sidebar/utils.test.js +8 -8
  382. package/components/routes/cases/detail/utils.d.ts +1 -1
  383. package/components/routes/cases/detail/utils.js +3 -2
  384. package/components/routes/cases/hooks/useCase.js +14 -2
  385. package/components/routes/cases/modals/AddRecordToCaseModal.test.js +1 -1
  386. package/components/routes/cases/modals/AddToCaseModal.d.ts +1 -1
  387. package/components/routes/cases/modals/AddToCaseModal.js +2 -2
  388. package/components/routes/cases/modals/CreateCaseModal.test.js +1 -1
  389. package/components/routes/cases/modals/ResolveModal.js +8 -5
  390. package/components/routes/cases/modals/ResolveModal.test.js +5 -5
  391. package/components/routes/cases/modals/hooks.js +1 -2
  392. package/components/routes/cases/modals/types.d.ts +1 -1
  393. package/components/routes/cases/search/CaseAssigneeFilter.js +1 -1
  394. package/components/routes/cases/search/CaseAssigneeFilter.test.js +8 -3
  395. package/components/routes/cases/search/CaseStatusFilter.test.js +1 -0
  396. package/components/routes/cases/utils.d.ts +0 -1
  397. package/components/routes/cases/utils.js +4 -13
  398. package/components/routes/dossiers/DossierCard.js +3 -3
  399. package/components/routes/dossiers/DossierCard.test.js +6 -6
  400. package/components/routes/dossiers/DossierEditor.js +61 -25
  401. package/components/routes/dossiers/DossierEditor.test.js +16 -9
  402. package/components/routes/dossiers/Dossiers.d.ts +1 -1
  403. package/components/routes/dossiers/Dossiers.js +6 -5
  404. package/components/routes/dossiers/LeadEditor.d.ts +1 -1
  405. package/components/routes/dossiers/LeadEditor.js +2 -2
  406. package/components/routes/dossiers/LeadForm.js +2 -2
  407. package/components/routes/dossiers/PivotForm.d.ts +1 -1
  408. package/components/routes/dossiers/PivotForm.js +10 -9
  409. package/components/routes/events/EventViewer.js +1 -1
  410. package/components/routes/help/ActionDocumentation.js +2 -2
  411. package/components/routes/help/ActionIntroductionDocumentation.js +2 -2
  412. package/components/routes/help/ApiDocumentation.js +3 -4
  413. package/components/routes/help/AuthDocumentation.js +1 -1
  414. package/components/routes/help/ClientDocumentation.js +1 -1
  415. package/components/routes/help/Help.d.ts +1 -1
  416. package/components/routes/help/Help.js +5 -4
  417. package/components/routes/help/HitDocumentation.js +3 -3
  418. package/components/routes/help/HitLabelsDocumentation.js +12 -12
  419. package/components/routes/help/HitLinksDocumentation.js +2 -2
  420. package/components/routes/help/HitSchemaDocumentation.js +14 -8
  421. package/components/routes/help/NotebookDocumentation.js +1 -1
  422. package/components/routes/help/OverviewDocumentation.js +1 -1
  423. package/components/routes/help/RetentionDocumentation.js +3 -3
  424. package/components/routes/help/SearchDocumentation.js +6 -4
  425. package/components/routes/help/TemplateDocumentation.js +2 -2
  426. package/components/routes/help/ViewDocumentation.js +1 -1
  427. package/components/routes/help/markdown/en/views.md.js +1 -1
  428. package/components/routes/help/markdown/fr/views.md.js +1 -1
  429. package/components/routes/hits/search/InformationPane.js +10 -20
  430. package/components/routes/hits/search/QuerySettings.js +1 -1
  431. package/components/routes/hits/search/QuerySettings.test.js +8 -4
  432. package/components/routes/hits/search/RecordBrowser.js +12 -9
  433. package/components/routes/hits/search/RecordQuery.js +13 -10
  434. package/components/routes/hits/search/SearchPane.js +2 -3
  435. package/components/routes/hits/search/ViewLink.js +4 -4
  436. package/components/routes/hits/search/ViewLink.test.js +1 -0
  437. package/components/routes/hits/search/grid/RecordGrid.js +1 -1
  438. package/components/routes/hits/search/shared/CustomSort.js +3 -2
  439. package/components/routes/hits/search/shared/CustomSpan.js +9 -1
  440. package/components/routes/hits/search/shared/HitFilter.js +8 -3
  441. package/components/routes/hits/search/shared/HitSort.js +8 -6
  442. package/components/routes/hits/search/shared/IndexPicker.js +1 -1
  443. package/components/routes/hits/search/shared/LayoutSettings.js +1 -1
  444. package/components/routes/hits/search/shared/SearchActionMenu.d.ts +1 -1
  445. package/components/routes/hits/search/shared/SearchActionMenu.js +1 -1
  446. package/components/routes/hits/search/shared/SearchSpan.js +1 -1
  447. package/components/routes/hits/shared/PluginViewing.d.ts +10 -0
  448. package/components/routes/hits/shared/PluginViewing.js +13 -0
  449. package/components/routes/hits/view/HitViewer.js +52 -52
  450. package/components/routes/hits/view/HitViewer.test.js +8 -6
  451. package/components/routes/home/AddNewCard.d.ts +2 -1
  452. package/components/routes/home/AddNewCard.js +7 -4
  453. package/components/routes/home/AnalyticCard.js +3 -3
  454. package/components/routes/home/EntryWrapper.js +1 -1
  455. package/components/routes/home/ViewCard.js +11 -7
  456. package/components/routes/home/ViewCard.test.js +3 -6
  457. package/components/routes/home/index.js +20 -17
  458. package/components/routes/overviews/OverviewCard.js +6 -2
  459. package/components/routes/overviews/OverviewViewer.d.ts +1 -1
  460. package/components/routes/overviews/OverviewViewer.js +48 -39
  461. package/components/routes/overviews/Overviews.d.ts +1 -1
  462. package/components/routes/overviews/Overviews.js +7 -6
  463. package/components/routes/overviews/markdownExtendedTokenProvider.test.js +1 -0
  464. package/components/routes/overviews/startingTemplate.js +1 -1
  465. package/components/routes/settings/ProfileSection.d.ts +1 -1
  466. package/components/routes/settings/ProfileSection.js +2 -2
  467. package/components/routes/settings/SecuritySection.d.ts +1 -1
  468. package/components/routes/settings/SecuritySection.js +2 -2
  469. package/components/routes/settings/Settings.js +6 -6
  470. package/components/routes/templates/TemplateCard.js +1 -1
  471. package/components/routes/templates/TemplateEditor.d.ts +1 -1
  472. package/components/routes/templates/TemplateEditor.js +3 -3
  473. package/components/routes/templates/TemplateViewer.d.ts +1 -1
  474. package/components/routes/templates/TemplateViewer.js +54 -52
  475. package/components/routes/templates/Templates.d.ts +1 -1
  476. package/components/routes/templates/Templates.js +10 -9
  477. package/components/routes/views/ViewComposer.js +38 -30
  478. package/components/routes/views/Views.d.ts +2 -1
  479. package/components/routes/views/Views.js +20 -14
  480. package/i18n.js +4 -0
  481. package/locales/en/translation.json +10 -0
  482. package/locales/fr/translation.json +10 -0
  483. package/models/entities/HowlerUser.d.ts +1 -1
  484. package/models/entities/generated/Action.d.ts +3 -1
  485. package/models/entities/generated/ApiType.d.ts +2 -3
  486. package/models/entities/generated/Dossier.d.ts +2 -0
  487. package/models/entities/generated/HowlerDossier.d.ts +2 -0
  488. package/models/entities/generated/Item.d.ts +2 -2
  489. package/models/entities/generated/Settings.d.ts +1 -1
  490. package/models/entities/generated/View.d.ts +2 -0
  491. package/package.json +102 -117
  492. package/plugins/HowlerPlugin.d.ts +9 -50
  493. package/plugins/HowlerPlugin.js +7 -113
  494. package/plugins/clue/Provider.js +1 -1
  495. package/plugins/clue/components/ClueLeadForm.js +2 -2
  496. package/plugins/clue/components/CluePivot.js +6 -7
  497. package/plugins/clue/components/CluePivotForm.js +26 -15
  498. package/plugins/clue/components/ClueTypography.js +2 -2
  499. package/plugins/clue/helpers.js +5 -5
  500. package/plugins/clue/index.d.ts +2 -2
  501. package/plugins/clue/index.js +1 -1
  502. package/plugins/clue/setup.js +1 -1
  503. package/plugins/clue/utils.d.ts +1 -1
  504. package/plugins/store.d.ts +26 -43
  505. package/plugins/store.js +2 -15
  506. package/rest/AxiosClient.js +3 -3
  507. package/rest/FetchClient.d.ts +1 -1
  508. package/rest/FetchClient.js +8 -5
  509. package/rest/FetchClient.test.js +7 -4
  510. package/rest/index.d.ts +4 -3
  511. package/setupTests.d.ts +3 -0
  512. package/tests/MockLocalStorage.js +2 -1
  513. package/tests/mocks.d.ts +2 -2
  514. package/tests/mocks.js +3 -3
  515. package/tests/server-handlers.js +1 -1
  516. package/utils/Throttler.js +1 -1
  517. package/utils/actionUtils.d.ts +1 -1
  518. package/utils/actionUtils.js +10 -6
  519. package/utils/classificationParser.js +56 -63
  520. package/utils/constants.d.ts +0 -17
  521. package/utils/constants.js +1 -18
  522. package/utils/exampleHit.d.ts +2 -0
  523. package/utils/exampleHit.js +18 -0
  524. package/utils/localStorage.d.ts +2 -2
  525. package/utils/localStorage.js +1 -1
  526. package/utils/menuUtils.d.ts +3 -89
  527. package/utils/menuUtils.js +66 -227
  528. package/utils/menuUtils.test.js +45 -181
  529. package/utils/sessionStorage.js +1 -1
  530. package/utils/sessionStorage.test.js +1 -0
  531. package/utils/stringUtils.d.ts +1 -1
  532. package/utils/utils.d.ts +30 -6
  533. package/utils/utils.js +66 -9
  534. package/utils/utils.test.js +1 -0
  535. package/utils/xsrf.d.ts +1 -1
  536. package/utils/xsrf.js +5 -10
  537. package/api/dossier/hit.d.ts +0 -2
  538. package/api/dossier/hit.js +0 -7
  539. package/api/dossier/index.d.ts +0 -9
  540. package/commons/components/app/AppConfigs.d.ts +0 -137
  541. package/commons/components/app/AppConstants.d.ts +0 -10
  542. package/commons/components/app/AppConstants.js +0 -10
  543. package/commons/components/app/AppContexts.d.ts +0 -105
  544. package/commons/components/app/AppContexts.js +0 -21
  545. package/commons/components/app/AppDefaults.d.ts +0 -6
  546. package/commons/components/app/AppDefaults.js +0 -40
  547. package/commons/components/app/AppNotificationService.d.ts +0 -6
  548. package/commons/components/app/AppNotificationService.js +0 -1
  549. package/commons/components/app/AppProvider.d.ts +0 -15
  550. package/commons/components/app/AppProvider.js +0 -41
  551. package/commons/components/app/AppSearchService.d.ts +0 -21
  552. package/commons/components/app/AppSearchService.js +0 -1
  553. package/commons/components/app/AppSkeleton.d.ts +0 -5
  554. package/commons/components/app/AppSkeleton.js +0 -152
  555. package/commons/components/app/AppUserService.d.ts +0 -17
  556. package/commons/components/app/AppUserService.js +0 -1
  557. package/commons/components/app/hooks/index.d.ts +0 -18
  558. package/commons/components/app/hooks/index.js +0 -18
  559. package/commons/components/app/hooks/useApp.d.ts +0 -1
  560. package/commons/components/app/hooks/useApp.js +0 -5
  561. package/commons/components/app/hooks/useAppBanner.d.ts +0 -1
  562. package/commons/components/app/hooks/useAppBanner.js +0 -6
  563. package/commons/components/app/hooks/useAppBar.d.ts +0 -1
  564. package/commons/components/app/hooks/useAppBar.js +0 -5
  565. package/commons/components/app/hooks/useAppBarHeight.d.ts +0 -2
  566. package/commons/components/app/hooks/useAppBarHeight.js +0 -22
  567. package/commons/components/app/hooks/useAppBarScrollTrigger.d.ts +0 -1
  568. package/commons/components/app/hooks/useAppBarScrollTrigger.js +0 -7
  569. package/commons/components/app/hooks/useAppBreadcrumbs.d.ts +0 -1
  570. package/commons/components/app/hooks/useAppBreadcrumbs.js +0 -5
  571. package/commons/components/app/hooks/useAppConfigs.d.ts +0 -59
  572. package/commons/components/app/hooks/useAppConfigs.js +0 -44
  573. package/commons/components/app/hooks/useAppLanguage.d.ts +0 -6
  574. package/commons/components/app/hooks/useAppLanguage.js +0 -17
  575. package/commons/components/app/hooks/useAppLayout.d.ts +0 -1
  576. package/commons/components/app/hooks/useAppLayout.js +0 -5
  577. package/commons/components/app/hooks/useAppLeftNav.d.ts +0 -1
  578. package/commons/components/app/hooks/useAppLeftNav.js +0 -5
  579. package/commons/components/app/hooks/useAppLogo.d.ts +0 -1
  580. package/commons/components/app/hooks/useAppLogo.js +0 -8
  581. package/commons/components/app/hooks/useAppNotification.d.ts +0 -1
  582. package/commons/components/app/hooks/useAppNotification.js +0 -5
  583. package/commons/components/app/hooks/useAppQuickSearch.d.ts +0 -1
  584. package/commons/components/app/hooks/useAppQuickSearch.js +0 -5
  585. package/commons/components/app/hooks/useAppSearchService.d.ts +0 -2
  586. package/commons/components/app/hooks/useAppSearchService.js +0 -5
  587. package/commons/components/app/hooks/useAppSitemap.d.ts +0 -16
  588. package/commons/components/app/hooks/useAppSitemap.js +0 -70
  589. package/commons/components/app/hooks/useAppSwitcher.d.ts +0 -1
  590. package/commons/components/app/hooks/useAppSwitcher.js +0 -5
  591. package/commons/components/app/hooks/useAppTheme.d.ts +0 -8
  592. package/commons/components/app/hooks/useAppTheme.js +0 -12
  593. package/commons/components/app/hooks/useAppUser.d.ts +0 -2
  594. package/commons/components/app/hooks/useAppUser.js +0 -5
  595. package/commons/components/app/providers/AppBarProvider.d.ts +0 -10
  596. package/commons/components/app/providers/AppBarProvider.js +0 -24
  597. package/commons/components/app/providers/AppBreadcrumbsProvider.d.ts +0 -6
  598. package/commons/components/app/providers/AppBreadcrumbsProvider.js +0 -43
  599. package/commons/components/app/providers/AppLayoutProvider.d.ts +0 -6
  600. package/commons/components/app/providers/AppLayoutProvider.js +0 -73
  601. package/commons/components/app/providers/AppLeftNavProvider.d.ts +0 -6
  602. package/commons/components/app/providers/AppLeftNavProvider.js +0 -22
  603. package/commons/components/app/providers/AppNotificationProvider.d.ts +0 -6
  604. package/commons/components/app/providers/AppNotificationProvider.js +0 -31
  605. package/commons/components/app/providers/AppQuickSearchProvider.d.ts +0 -8
  606. package/commons/components/app/providers/AppQuickSearchProvider.js +0 -19
  607. package/commons/components/app/providers/AppSearchServiceProvider.d.ts +0 -6
  608. package/commons/components/app/providers/AppSearchServiceProvider.js +0 -46
  609. package/commons/components/app/providers/AppSnackbarProvider.d.ts +0 -3
  610. package/commons/components/app/providers/AppSnackbarProvider.js +0 -15
  611. package/commons/components/app/providers/AppSwitcherProvider.d.ts +0 -6
  612. package/commons/components/app/providers/AppSwitcherProvider.js +0 -10
  613. package/commons/components/app/providers/AppUserProvider.d.ts +0 -8
  614. package/commons/components/app/providers/AppUserProvider.js +0 -12
  615. package/commons/components/breadcrumbs/BreadcrumbIcon.d.ts +0 -6
  616. package/commons/components/breadcrumbs/BreadcrumbIcon.js +0 -9
  617. package/commons/components/breadcrumbs/BreadcrumbLastItem.d.ts +0 -7
  618. package/commons/components/breadcrumbs/BreadcrumbLastItem.js +0 -19
  619. package/commons/components/breadcrumbs/BreadcrumbLinkItem.d.ts +0 -7
  620. package/commons/components/breadcrumbs/BreadcrumbLinkItem.js +0 -20
  621. package/commons/components/breadcrumbs/BreadcrumbList.d.ts +0 -11
  622. package/commons/components/breadcrumbs/BreadcrumbList.js +0 -44
  623. package/commons/components/breadcrumbs/Breadcrumbs.d.ts +0 -5
  624. package/commons/components/breadcrumbs/Breadcrumbs.js +0 -31
  625. package/commons/components/display/AppAvatar.d.ts +0 -8
  626. package/commons/components/display/AppAvatar.js +0 -18
  627. package/commons/components/display/AppInfoPanel.d.ts +0 -5
  628. package/commons/components/display/AppInfoPanel.js +0 -17
  629. package/commons/components/display/AppListEmpty.d.ts +0 -2
  630. package/commons/components/display/AppListEmpty.js +0 -5
  631. package/commons/components/display/AppToc.d.ts +0 -20
  632. package/commons/components/display/AppToc.js +0 -98
  633. package/commons/components/display/hooks/useAppColor.d.ts +0 -5
  634. package/commons/components/display/hooks/useAppColor.js +0 -10
  635. package/commons/components/leftnav/LeftNavDrawer.d.ts +0 -3
  636. package/commons/components/leftnav/LeftNavDrawer.js +0 -99
  637. package/commons/components/leftnav/LeftNavGroup.d.ts +0 -8
  638. package/commons/components/leftnav/LeftNavGroup.js +0 -55
  639. package/commons/components/leftnav/LeftNavItem.d.ts +0 -11
  640. package/commons/components/leftnav/LeftNavItem.js +0 -29
  641. package/commons/components/notification/FeedModels.d.ts +0 -64
  642. package/commons/components/notification/FeedModels.js +0 -94
  643. package/commons/components/notification/Notification.d.ts +0 -10
  644. package/commons/components/notification/Notification.js +0 -95
  645. package/commons/components/notification/elements/NotificationCloseButton.d.ts +0 -3
  646. package/commons/components/notification/elements/NotificationCloseButton.js +0 -6
  647. package/commons/components/notification/elements/NotificationContainer.d.ts +0 -16
  648. package/commons/components/notification/elements/NotificationContainer.js +0 -29
  649. package/commons/components/notification/elements/NotificationEndOfPage.d.ts +0 -5
  650. package/commons/components/notification/elements/NotificationEndOfPage.js +0 -36
  651. package/commons/components/notification/elements/NotificationError.d.ts +0 -2
  652. package/commons/components/notification/elements/NotificationError.js +0 -10
  653. package/commons/components/notification/elements/NotificationHeader.d.ts +0 -8
  654. package/commons/components/notification/elements/NotificationHeader.js +0 -18
  655. package/commons/components/notification/elements/NotificationItems.d.ts +0 -12
  656. package/commons/components/notification/elements/NotificationItems.js +0 -12
  657. package/commons/components/notification/elements/NotificationSkeleton.d.ts +0 -2
  658. package/commons/components/notification/elements/NotificationSkeleton.js +0 -12
  659. package/commons/components/notification/elements/NotificationTopNavButton.d.ts +0 -9
  660. package/commons/components/notification/elements/NotificationTopNavButton.js +0 -9
  661. package/commons/components/notification/elements/item/NotificationItem.d.ts +0 -5
  662. package/commons/components/notification/elements/item/NotificationItem.js +0 -25
  663. package/commons/components/notification/elements/item/NotificationItemAuthor.d.ts +0 -5
  664. package/commons/components/notification/elements/item/NotificationItemAuthor.js +0 -31
  665. package/commons/components/notification/elements/item/NotificationItemContent.d.ts +0 -3
  666. package/commons/components/notification/elements/item/NotificationItemContent.js +0 -9
  667. package/commons/components/notification/elements/item/NotificationItemDate.d.ts +0 -3
  668. package/commons/components/notification/elements/item/NotificationItemDate.js +0 -10
  669. package/commons/components/notification/elements/item/NotificationItemImage.d.ts +0 -4
  670. package/commons/components/notification/elements/item/NotificationItemImage.js +0 -8
  671. package/commons/components/notification/elements/item/NotificationItemTag.d.ts +0 -4
  672. package/commons/components/notification/elements/item/NotificationItemTag.js +0 -12
  673. package/commons/components/notification/elements/item/NotificationItemTitle.d.ts +0 -3
  674. package/commons/components/notification/elements/item/NotificationItemTitle.js +0 -15
  675. package/commons/components/notification/index.d.ts +0 -2
  676. package/commons/components/notification/index.js +0 -2
  677. package/commons/components/pages/PageCardCentered.d.ts +0 -5
  678. package/commons/components/pages/PageCardCentered.js +0 -30
  679. package/commons/components/pages/PageCenter.d.ts +0 -9
  680. package/commons/components/pages/PageCenter.js +0 -20
  681. package/commons/components/pages/PageContent.d.ts +0 -8
  682. package/commons/components/pages/PageContent.js +0 -8
  683. package/commons/components/pages/PageFullScreen.d.ts +0 -11
  684. package/commons/components/pages/PageFullScreen.js +0 -40
  685. package/commons/components/pages/PageFullWidth.d.ts +0 -11
  686. package/commons/components/pages/PageFullWidth.js +0 -7
  687. package/commons/components/pages/PageHeader.d.ts +0 -23
  688. package/commons/components/pages/PageHeader.js +0 -27
  689. package/commons/components/pages/hooks/usePageProps.d.ts +0 -24
  690. package/commons/components/pages/hooks/usePageProps.js +0 -19
  691. package/commons/components/search/AppSearch.d.ts +0 -1
  692. package/commons/components/search/AppSearch.js +0 -135
  693. package/commons/components/search/AppSearchInput.d.ts +0 -12
  694. package/commons/components/search/AppSearchInput.js +0 -35
  695. package/commons/components/search/AppSearchResult.d.ts +0 -5
  696. package/commons/components/search/AppSearchResult.js +0 -28
  697. package/commons/components/topnav/AppBar.d.ts +0 -6
  698. package/commons/components/topnav/AppBar.js +0 -80
  699. package/commons/components/topnav/AppName.d.ts +0 -5
  700. package/commons/components/topnav/AppName.js +0 -31
  701. package/commons/components/topnav/AppSwitcher.d.ts +0 -3
  702. package/commons/components/topnav/AppSwitcher.js +0 -44
  703. package/commons/components/topnav/Notifications.d.ts +0 -2
  704. package/commons/components/topnav/Notifications.js +0 -8
  705. package/commons/components/topnav/ThemeSelection.d.ts +0 -3
  706. package/commons/components/topnav/ThemeSelection.js +0 -33
  707. package/commons/components/topnav/ThemeSelectionIcon.d.ts +0 -2
  708. package/commons/components/topnav/ThemeSelectionIcon.js +0 -16
  709. package/commons/components/topnav/UserProfile.d.ts +0 -6
  710. package/commons/components/topnav/UserProfile.js +0 -71
  711. package/commons/components/utils/hooks/useClipboard.d.ts +0 -3
  712. package/commons/components/utils/hooks/useClipboard.js +0 -29
  713. package/commons/components/utils/hooks/useEnv.d.ts +0 -1
  714. package/commons/components/utils/hooks/useEnv.js +0 -11
  715. package/commons/components/utils/hooks/useFullscreenStatus.d.ts +0 -2
  716. package/commons/components/utils/hooks/useFullscreenStatus.js +0 -41
  717. package/commons/components/utils/hooks/useGravatar.d.ts +0 -2
  718. package/commons/components/utils/hooks/useGravatar.js +0 -9
  719. package/commons/components/utils/hooks/useLocalStorage.d.ts +0 -12
  720. package/commons/components/utils/hooks/useLocalStorage.js +0 -52
  721. package/commons/components/utils/hooks/useLocalStorageItem.d.ts +0 -14
  722. package/commons/components/utils/hooks/useLocalStorageItem.js +0 -39
  723. package/commons/components/utils/hooks/useThemeBuilder.d.ts +0 -7
  724. package/commons/components/utils/hooks/useThemeBuilder.js +0 -48
  725. package/commons/components/utils/keyboard.d.ts +0 -30
  726. package/commons/components/utils/keyboard.js +0 -50
  727. package/components/hooks/useMySitemap.d.ts +0 -3
  728. package/components/hooks/useMySitemap.js +0 -219
  729. /package/{commons/components/app/AppConfigs.js → components/elements/MembershipManagement.test.d.ts} +0 -0
@@ -1,19 +1,18 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Autocomplete, Button, CircularProgress, Divider, FormControl, LinearProgress, Stack, TextField, ToggleButton, ToggleButtonGroup, Tooltip } from '@mui/material';
3
+ import { AppInfoPanel, PageCenter } from '@tui/core';
3
4
  import api from '@cccsaurora/howler-ui/api';
4
- import PageCenter from '@cccsaurora/howler-ui/commons/components/pages/PageCenter';
5
5
  import TemplateEditor from '@cccsaurora/howler-ui/components/routes/templates/TemplateEditor';
6
6
  import { useCallback, useContext, useEffect, useMemo, useState } from 'react';
7
7
  import { useTranslation } from 'react-i18next';
8
8
  import { Check, Delete, SsidChart } from '@mui/icons-material';
9
- import AppInfoPanel from '@cccsaurora/howler-ui/commons/components/display/AppInfoPanel';
10
9
  import { ModalContext } from '@cccsaurora/howler-ui/components/app/providers/ModalProvider';
11
10
  import { DEFAULT_FIELDS } from '@cccsaurora/howler-ui/components/elements/hit/HitOutline';
12
11
  import useMyApi from '@cccsaurora/howler-ui/components/hooks/useMyApi';
13
12
  import useMySnackbar from '@cccsaurora/howler-ui/components/hooks/useMySnackbar';
14
13
  import isEqual from 'lodash-es/isEqual';
15
- import { useSearchParams } from 'react-router-dom';
16
- import hitsData from '@cccsaurora/howler-ui/utils/hit.json';
14
+ import { useSearchParams } from 'react-router';
15
+ import { getExampleHit } from '@cccsaurora/howler-ui/utils/exampleHit';
17
16
  import { sanitizeLuceneQuery } from '@cccsaurora/howler-ui/utils/stringUtils';
18
17
  const TemplateViewer = () => {
19
18
  const { t } = useTranslation();
@@ -40,14 +39,14 @@ const TemplateViewer = () => {
40
39
  throwError: true
41
40
  })
42
41
  .finally(() => setLoading(false))
43
- .then(result => result.items)
42
+ .then(result => result?.items ?? [])
44
43
  .then(_analytics => {
45
44
  if (!_analytics.some(_analytic => _analytic.name.toLowerCase() === analytic.toLowerCase())) {
46
45
  setAnalytic('');
47
46
  }
48
47
  setAnalytics(_analytics);
49
48
  });
50
- void dispatchApi(api.template.get()).then(setTemplateList);
49
+ void dispatchApi(api.template.get()).then(result => setTemplateList(result ?? []));
51
50
  // eslint-disable-next-line react-hooks/exhaustive-deps
52
51
  }, [analytic, dispatchApi]);
53
52
  useEffect(() => {
@@ -64,7 +63,7 @@ const TemplateViewer = () => {
64
63
  throwError: true
65
64
  })
66
65
  .finally(() => setLoading(false))
67
- .then(result => result.items.map(i => i.value))
66
+ .then(result => result?.items.map(i => i.value) ?? [])
68
67
  .then(_detections => {
69
68
  if (_detections.length < 1) {
70
69
  setDetection('ANY');
@@ -85,11 +84,11 @@ const TemplateViewer = () => {
85
84
  const sessionTemplate = findTemplate(sessionTemplateList);
86
85
  if (template) {
87
86
  setSelectedTemplate(template);
88
- setDisplayFields(sessionTemplate ? sessionTemplate.keys : template.keys);
87
+ setDisplayFields((sessionTemplate ? sessionTemplate.keys : template.keys) ?? DEFAULT_FIELDS);
89
88
  }
90
89
  else {
91
90
  setSelectedTemplate(null);
92
- setDisplayFields(sessionTemplate ? sessionTemplate.keys : DEFAULT_FIELDS);
91
+ setDisplayFields(sessionTemplate ? (sessionTemplate.keys ?? DEFAULT_FIELDS) : DEFAULT_FIELDS);
93
92
  }
94
93
  }
95
94
  }, [analytic, detection, sessionTemplateList, templateList, type]);
@@ -113,62 +112,65 @@ const TemplateViewer = () => {
113
112
  });
114
113
  }, [analytic, detection, params, setParams, type]);
115
114
  const exampleHit = useMemo(() => {
116
- const _hit = hitsData.GET[Object.keys(hitsData.GET)[0]];
115
+ const _hit = getExampleHit();
117
116
  if (analytic) {
118
117
  _hit.howler.analytic = analytic;
119
118
  }
120
119
  return { ..._hit };
121
120
  }, [analytic]);
122
121
  const onDelete = useCallback(() => {
122
+ const template = selectedTemplate;
123
+ if (!template?.template_id) {
124
+ return;
125
+ }
126
+ const templateId = template.template_id;
127
+ const templateAnalytic = template.analytic;
128
+ const templateDetection = template.detection;
129
+ const templateType = template.type;
123
130
  withConfirmDeleteModal(async () => {
124
- await dispatchApi(api.template.del(selectedTemplate.template_id), {
131
+ await dispatchApi(api.template.del(templateId), {
125
132
  logError: false,
126
133
  showError: true,
127
134
  throwError: true
128
135
  });
129
- setSessionTemplateList(l => l.filter(v => v.analytic != selectedTemplate.analytic ||
130
- v.detection != selectedTemplate.detection ||
131
- v.type != selectedTemplate.type));
132
- setTemplateList(l => l.filter(v => v.analytic != selectedTemplate.analytic ||
133
- v.detection != selectedTemplate.detection ||
134
- v.type != selectedTemplate.type));
136
+ setSessionTemplateList(l => l.filter(v => v.analytic !== templateAnalytic || v.detection !== templateDetection || v.type !== templateType));
137
+ setTemplateList(l => l.filter(v => v.analytic !== templateAnalytic || v.detection !== templateDetection || v.type !== templateType));
135
138
  showSuccessMessage(t('route.templates.manager.delete.success'));
136
139
  });
137
- }, [
138
- dispatchApi,
139
- selectedTemplate?.analytic,
140
- selectedTemplate?.detection,
141
- selectedTemplate?.template_id,
142
- selectedTemplate?.type,
143
- withConfirmDeleteModal,
144
- showSuccessMessage,
145
- t
146
- ]);
140
+ }, [dispatchApi, selectedTemplate, withConfirmDeleteModal, showSuccessMessage, t]);
147
141
  const onSave = useCallback(async () => {
148
- if (analytic && detection) {
149
- try {
150
- setTemplateLoading(true);
151
- const result = await dispatchApi(selectedTemplate
152
- ? api.template.put(selectedTemplate.template_id, displayFields)
153
- : api.template.post({
154
- analytic,
155
- detection: detection !== 'ANY' ? detection : null,
156
- type,
157
- keys: displayFields
158
- }), {
159
- logError: false,
160
- showError: true,
161
- throwError: true
162
- });
163
- setSelectedTemplate(result);
164
- const newList = [result, ...templateList];
165
- setTemplateList(newList.filter((v1, i) => newList.findIndex(v2 => v1.template_id === v2.template_id) === i));
166
- const updatedSessionList = sessionTemplateList.filter(v => v.analytic !== result.analytic || v.detection !== result.detection || v.type !== result.type);
167
- setSessionTemplateList(updatedSessionList);
168
- }
169
- finally {
170
- setTemplateLoading(false);
142
+ if (!analytic || !detection) {
143
+ return;
144
+ }
145
+ const selectedTemplateId = selectedTemplate?.template_id;
146
+ if (selectedTemplate && !selectedTemplateId) {
147
+ return;
148
+ }
149
+ try {
150
+ setTemplateLoading(true);
151
+ const result = await dispatchApi(selectedTemplateId
152
+ ? api.template.put(selectedTemplateId, displayFields)
153
+ : api.template.post({
154
+ analytic,
155
+ detection: detection !== 'ANY' ? detection : undefined,
156
+ type,
157
+ keys: displayFields
158
+ }), {
159
+ logError: false,
160
+ showError: true,
161
+ throwError: true
162
+ });
163
+ if (!result) {
164
+ return;
171
165
  }
166
+ setSelectedTemplate(result);
167
+ const newList = [result, ...templateList];
168
+ setTemplateList(newList.filter((v1, i) => newList.findIndex(v2 => v1.template_id === v2.template_id) === i));
169
+ const updatedSessionList = sessionTemplateList.filter(v => v.analytic !== result.analytic || v.detection !== result.detection || v.type !== result.type);
170
+ setSessionTemplateList(updatedSessionList);
171
+ }
172
+ finally {
173
+ setTemplateLoading(false);
172
174
  }
173
175
  }, [analytic, detection, dispatchApi, displayFields, selectedTemplate, sessionTemplateList, templateList, type]);
174
176
  const analyticOrDetectionMissing = useMemo(() => !analytic || !detection, [analytic, detection]);
@@ -180,7 +182,7 @@ const TemplateViewer = () => {
180
182
  }
181
183
  const sessionTemplate = {
182
184
  analytic: analytic,
183
- detection: detection !== 'ANY' ? detection : null,
185
+ detection: detection !== 'ANY' ? detection : undefined,
184
186
  type: type,
185
187
  keys: displayFields
186
188
  };
@@ -191,7 +193,7 @@ const TemplateViewer = () => {
191
193
  setAnalytic(newValue ? newValue.name : '');
192
194
  setSessionTemplateList([]); // do not keep session memory if analytic or detection is changed
193
195
  }, renderInput: autocompleteAnalyticParams => (_jsx(TextField, { ...autocompleteAnalyticParams, label: t('route.templates.analytic'), size: "small" })) }) }), !(detections?.length < 2 && detections[0]?.toLowerCase() === 'rule') ? (_jsx(FormControl, { sx: { flex: 1, maxWidth: '300px' }, disabled: !analytic, children: _jsx(Autocomplete, { id: "detection", options: ['ANY', ...detections.sort()], getOptionLabel: option => option, value: detection ?? '', onChange: (__, newValue) => {
194
- setDetection(newValue);
196
+ setDetection(newValue ?? 'ANY');
195
197
  setSessionTemplateList([]); // do not keep session memory if analytic or detection is changed
196
198
  }, renderInput: autocompleteDetectionParams => (_jsx(TextField, { ...autocompleteDetectionParams, label: t('route.templates.detection'), size: "small" })) }) })) : (_jsx(Tooltip, { title: t('route.templates.rule.explanation'), children: _jsx(SsidChart, { color: "info", sx: { alignSelf: 'center' } }) })), _jsxs(ToggleButtonGroup, { sx: { display: 'grid', gridTemplateColumns: '1fr 1fr' }, size: "small", exclusive: true, value: type, disabled: analyticOrDetectionMissing, onChange: (__, _type) => {
197
199
  if (_type) {
@@ -1,2 +1,2 @@
1
- declare const Templates: () => import("react/jsx-runtime").JSX.Element;
1
+ declare const Templates: () => import("react").JSX.Element;
2
2
  export default Templates;
@@ -1,10 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useAppUser } from '@tui/core';
2
3
  import { Article } from '@mui/icons-material';
3
4
  import { Stack, ToggleButton, ToggleButtonGroup, Typography } from '@mui/material';
4
5
  import api from '@cccsaurora/howler-ui/api';
5
- import { useAppUser } from '@cccsaurora/howler-ui/commons/components/app/hooks';
6
6
  import { AnalyticContext } from '@cccsaurora/howler-ui/components/app/providers/AnalyticProvider';
7
- import SearchResponseProvider, { SearchResponseContext } from '@cccsaurora/howler-ui/components/app/providers/SearchResponseProvider';
7
+ import SearchResponseProvider, { createSearchResponseContext, useSearchResponseContext } from '@cccsaurora/howler-ui/components/app/providers/SearchResponseProvider';
8
8
  import { TuiListProvider } from '@cccsaurora/howler-ui/components/elements/addons/lists';
9
9
  import { TuiListMethodContext } from '@cccsaurora/howler-ui/components/elements/addons/lists/TuiListProvider';
10
10
  import ItemManager from '@cccsaurora/howler-ui/components/elements/display/ItemManager';
@@ -13,9 +13,10 @@ import { useMyLocalStorageItem } from '@cccsaurora/howler-ui/components/hooks/us
13
13
  import useMySnackbar from '@cccsaurora/howler-ui/components/hooks/useMySnackbar';
14
14
  import { useCallback, useContext, useEffect, useState } from 'react';
15
15
  import { useTranslation } from 'react-i18next';
16
- import { useNavigate, useSearchParams } from 'react-router-dom';
16
+ import { useNavigate, useSearchParams } from 'react-router';
17
17
  import { StorageKey } from '@cccsaurora/howler-ui/utils/constants';
18
18
  import TemplateCard from './TemplateCard';
19
+ const SearchResponseContext = createSearchResponseContext();
19
20
  const TemplatesBase = () => {
20
21
  const { t } = useTranslation();
21
22
  const { user } = useAppUser();
@@ -26,7 +27,7 @@ const TemplatesBase = () => {
26
27
  const pageCount = useMyLocalStorageItem(StorageKey.PAGE_COUNT, 25)[0];
27
28
  const { showSuccessMessage } = useMySnackbar();
28
29
  const { analytics } = useContext(AnalyticContext);
29
- const { response, request, remove, getSearchRequestData } = useContext(SearchResponseContext);
30
+ const { response, request, remove, getSearchRequestData } = useSearchResponseContext(SearchResponseContext);
30
31
  const [phrase, setPhrase] = useState('');
31
32
  const [offset, setOffset] = useState(parseInt(searchParams.get('offset')) || 0);
32
33
  const [types, setTypes] = useState([]);
@@ -70,11 +71,11 @@ const TemplatesBase = () => {
70
71
  item,
71
72
  selected: false,
72
73
  cursor: false,
73
- disabled: item.detection &&
74
+ disabled: !!(item.detection &&
74
75
  !analytics
75
76
  .find(v => v.name === item.analytic)
76
77
  ?.detections?.map((s) => s.toLowerCase())
77
- ?.includes(item.detection?.toLowerCase())
78
+ ?.includes(item.detection?.toLowerCase()))
78
79
  })));
79
80
  }
80
81
  }, [response, load, analytics]);
@@ -95,7 +96,7 @@ const TemplatesBase = () => {
95
96
  // eslint-disable-next-line react-hooks/exhaustive-deps
96
97
  }, [dispatchApi, types]);
97
98
  useEffect(() => {
98
- if (response?.total <= offset) {
99
+ if ((response?.total ?? 0) <= offset) {
99
100
  setOffset(0);
100
101
  searchParams.set('offset', '0');
101
102
  setSearchParams(searchParams, { replace: true });
@@ -122,10 +123,10 @@ const TemplatesBase = () => {
122
123
  setTypes(_types.length < 2 ? _types : []);
123
124
  }
124
125
  }, children: [_jsx(ToggleButton, { value: "personal", "aria-label": "personal", children: t('route.templates.manager.personal') }), _jsx(ToggleButton, { value: "global", "aria-label": "global", children: t('route.templates.manager.global') })] }) }), aboveSearch: _jsx(Typography, { sx: theme => ({ fontStyle: 'italic', color: theme.palette.text.disabled, mb: 0.5 }), variant: "body2", children: t('route.templates.search.prompt') }), renderer: ({ item }, classRenderer) => renderer(item.item, !!item.disabled, classRenderer()), response: response, onSelect: (item) => {
125
- navigate(`/templates/view?type=${item.item.type}&analytic=${item.item.analytic}${item.item.detection ? '&detection=' + item.item.detection : ''}`);
126
+ void navigate(`/templates/view?type=${item.item.type}&analytic=${item.item.analytic}${item.item.detection ? '&detection=' + item.item.detection : ''}`);
126
127
  }, onCreate: () => navigate('/templates/view'), createPrompt: "route.templates.create", searchPrompt: "route.templates.manager.search", createIcon: _jsx(Article, { sx: { mr: 1 } }) }));
127
128
  };
128
129
  const Templates = () => {
129
- return (_jsx(TuiListProvider, { children: _jsx(SearchResponseProvider, { idField: "template_id", children: _jsx(TemplatesBase, {}) }) }));
130
+ return (_jsx(TuiListProvider, { children: _jsx(SearchResponseProvider, { context: SearchResponseContext, idField: "template_id", children: _jsx(TemplatesBase, {}) }) }));
130
131
  };
131
132
  export default Templates;
@@ -1,11 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { AppListEmpty, PageCenter } from '@tui/core';
2
3
  import { useCallback, useContext, useEffect, useState } from 'react';
3
4
  import { useTranslation } from 'react-i18next';
4
5
  import { HelpOutline, Save, Settings } from '@mui/icons-material';
5
6
  import { Alert, Checkbox, CircularProgress, LinearProgress, Paper, Stack, TextField, ToggleButton, ToggleButtonGroup, Tooltip, Typography } from '@mui/material';
6
7
  import api from '@cccsaurora/howler-ui/api';
7
- import AppListEmpty from '@cccsaurora/howler-ui/commons/components/display/AppListEmpty';
8
- import PageCenter from '@cccsaurora/howler-ui/commons/components/pages/PageCenter';
9
8
  import { GridColumnsContext } from '@cccsaurora/howler-ui/components/app/providers/GridColumnsProvider';
10
9
  import { ParameterContext } from '@cccsaurora/howler-ui/components/app/providers/ParameterProvider';
11
10
  import { RecordContext } from '@cccsaurora/howler-ui/components/app/providers/RecordProvider';
@@ -24,16 +23,17 @@ import AddColumnModal from '@cccsaurora/howler-ui/components/elements/hit/grid/A
24
23
  import RecordTable from '@cccsaurora/howler-ui/components/elements/hit/grid/RecordTable';
25
24
  import HitCard from '@cccsaurora/howler-ui/components/elements/hit/HitCard';
26
25
  import { HitLayout } from '@cccsaurora/howler-ui/components/elements/hit/HitLayout';
27
- import LayoutToggle, {} from '@cccsaurora/howler-ui/components/elements/view/LayoutToggle';
26
+ import LayoutToggle from '@cccsaurora/howler-ui/components/elements/view/LayoutToggle';
28
27
  import useMyApi from '@cccsaurora/howler-ui/components/hooks/useMyApi';
29
28
  import { useMyLocalStorageItem } from '@cccsaurora/howler-ui/components/hooks/useMyLocalStorage';
30
29
  import useMySnackbar from '@cccsaurora/howler-ui/components/hooks/useMySnackbar';
31
30
  import { uniq } from 'lodash-es';
32
- import { useNavigate, useParams } from 'react-router-dom';
31
+ import { useNavigate, useParams } from 'react-router';
33
32
  import { useContextSelector } from 'use-context-selector';
34
33
  import { DEFAULT_QUERY, StorageKey } from '@cccsaurora/howler-ui/utils/constants';
35
34
  import { convertDateToLucene } from '@cccsaurora/howler-ui/utils/utils';
36
35
  import { buildViewUrl } from '@cccsaurora/howler-ui/utils/viewUtils';
36
+ import { MembershipManagement } from '../../elements/membership/MembershipManagement';
37
37
  import ErrorBoundary from '../ErrorBoundary';
38
38
  import RecordQuery from '../hits/search/RecordQuery';
39
39
  import HitSort from '../hits/search/shared/HitSort';
@@ -52,6 +52,7 @@ const ViewComposer = () => {
52
52
  const setIndexes = useContextSelector(ParameterContext, ctx => ctx.setIndexes);
53
53
  const pageCount = useMyLocalStorageItem(StorageKey.PAGE_COUNT, 25)[0];
54
54
  const loadRecords = useContextSelector(RecordContext, ctx => ctx.loadRecords);
55
+ const [view, setView] = useState();
55
56
  // view state
56
57
  const [title, setTitle] = useState('');
57
58
  const [type, setType] = useState('global');
@@ -79,22 +80,22 @@ const ViewComposer = () => {
79
80
  width: columnWidths[column] ?? null
80
81
  }));
81
82
  try {
82
- const normalizedIndexes = indexes?.length > 0 ? indexes : ['hit'];
83
+ const normalizedIndexes = (indexes?.length ?? 0) > 0 ? indexes : ['hit'];
83
84
  if (!routeParams.id) {
84
85
  const newView = await addView({
85
86
  title,
86
87
  type,
87
88
  query,
88
89
  indexes: normalizedIndexes,
89
- sort: sort || null,
90
- span: span || null,
90
+ sort,
91
+ span,
91
92
  settings: {
92
93
  advance_on_triage: advanceOnTriage,
93
94
  display: displayType,
94
- columns: displayType === 'grid' ? _columnData : null
95
+ columns: displayType === 'grid' ? _columnData : undefined
95
96
  }
96
97
  });
97
- navigate(buildViewUrl(newView));
98
+ void navigate(buildViewUrl(newView));
98
99
  }
99
100
  else {
100
101
  await editView(routeParams.id, {
@@ -107,14 +108,14 @@ const ViewComposer = () => {
107
108
  settings: {
108
109
  advance_on_triage: advanceOnTriage,
109
110
  display: displayType,
110
- columns: displayType === 'grid' ? _columnData : null
111
+ columns: displayType === 'grid' ? _columnData : undefined
111
112
  }
112
113
  });
113
114
  }
114
115
  showSuccessMessage(t(routeParams.id ? 'route.views.update.success' : 'route.views.create.success'));
115
116
  }
116
117
  catch (e) {
117
- showErrorMessage(e.message);
118
+ showErrorMessage(e instanceof Error ? e.message : String(e));
118
119
  }
119
120
  finally {
120
121
  setLoading(false);
@@ -142,7 +143,7 @@ const ViewComposer = () => {
142
143
  setSearching(true);
143
144
  setError(null);
144
145
  try {
145
- const normalizedIndexes = searchIndexes?.length > 0 ? searchIndexes : ['hit'];
146
+ const normalizedIndexes = (searchIndexes?.length ?? 0) > 0 ? searchIndexes : ['hit'];
146
147
  const _response = await dispatchApi(api.v2.search.post(normalizedIndexes, {
147
148
  rows: pageCount,
148
149
  query: searchQuery,
@@ -150,11 +151,17 @@ const ViewComposer = () => {
150
151
  filters: searchSpan ? [`event.created:${convertDateToLucene(searchSpan)}`] : [],
151
152
  metadata: ['template', 'analytic']
152
153
  }), { showError: false, throwError: true });
153
- loadRecords(_response.items);
154
- setResponse(_response);
154
+ const searchResponse = _response ?? {
155
+ items: [],
156
+ offset: 0,
157
+ rows: pageCount,
158
+ total: 0
159
+ };
160
+ loadRecords(searchResponse.items);
161
+ setResponse(searchResponse);
155
162
  }
156
163
  catch (e) {
157
- setError(e.message);
164
+ setError(e instanceof Error ? e.message : String(e));
158
165
  }
159
166
  finally {
160
167
  setSearching(false);
@@ -183,30 +190,31 @@ const ViewComposer = () => {
183
190
  return;
184
191
  }
185
192
  void (async () => {
186
- const viewToEdit = (await getCurrentViews({ views: [routeParams.id] }))[0];
187
- if (!viewToEdit) {
193
+ const _view = (await getCurrentViews({ views: [routeParams.id] }))[0];
194
+ setView(_view);
195
+ if (!_view) {
188
196
  setError('route.views.missing');
189
197
  return;
190
198
  }
191
199
  else {
192
200
  setError(null);
193
201
  }
194
- setTitle(viewToEdit.title);
195
- setAdvanceOnTriage(viewToEdit.settings?.advance_on_triage ?? false);
196
- setDisplayType((viewToEdit.settings?.display ?? null));
197
- setType(viewToEdit.type);
198
- const loadedQuery = viewToEdit.query || DEFAULT_QUERY;
199
- const loadedIndexes = viewToEdit.indexes || indexes;
200
- const loadedSort = viewToEdit.sort || sort;
201
- const loadedSpan = viewToEdit.span || span;
202
+ setTitle(_view.title ?? '');
203
+ setAdvanceOnTriage(_view.settings?.advance_on_triage ?? false);
204
+ setDisplayType(_view.settings?.display ?? 'list');
205
+ setType(_view.type);
206
+ const loadedQuery = _view.query || DEFAULT_QUERY;
207
+ const loadedIndexes = _view.indexes || indexes || ['hit'];
208
+ const loadedSort = _view.sort || sort;
209
+ const loadedSpan = _view.span || span;
202
210
  setQuery(loadedQuery);
203
- if (viewToEdit.indexes) {
211
+ if (_view.indexes) {
204
212
  setIndexes(loadedIndexes);
205
213
  }
206
- if (viewToEdit.sort) {
214
+ if (_view.sort) {
207
215
  setSort(loadedSort);
208
216
  }
209
- if (viewToEdit.span) {
217
+ if (_view.span) {
210
218
  setSpan(loadedSpan);
211
219
  }
212
220
  // Perform search with the loaded values to avoid using stale state
@@ -219,11 +227,11 @@ const ViewComposer = () => {
219
227
  if (_type) {
220
228
  setType(_type);
221
229
  }
222
- }, children: [_jsx(ToggleButton, { value: "personal", "aria-label": "personal", children: t('route.views.manager.personal') }), _jsx(ToggleButton, { value: "global", "aria-label": "global", children: t('route.views.manager.global') })] }), _jsx(CustomButton, { variant: "outlined", disabled: !title || !type || !query || !response || loading || searching || isSearchDirty, startIcon: loading ? _jsx(CircularProgress, { size: 20 }) : _jsx(Save, {}), onClick: onSave, children: t('save') })] }), _jsx(Typography, { sx: theme => ({
230
+ }, children: [_jsx(ToggleButton, { value: "personal", "aria-label": "personal", children: t('route.views.manager.personal') }), _jsx(ToggleButton, { value: "global", "aria-label": "global", children: t('route.views.manager.global') })] }), _jsx(CustomButton, { variant: "outlined", disabled: !title || !type || !query || !response || loading || searching || isSearchDirty, startIcon: loading ? _jsx(CircularProgress, { size: 20 }) : _jsx(Save, {}), onClick: onSave, children: t('save') }), _jsx(MembershipManagement, { type: "view", entity: view, onChange: _view => setView(_view) })] }), _jsx(Typography, { sx: theme => ({
223
231
  color: theme.palette.text.secondary,
224
232
  fontSize: '0.9em',
225
233
  fontStyle: 'italic',
226
234
  mb: 0.5
227
- }), variant: "body2", children: t('hit.search.prompt') }), _jsx(Stack, { direction: "row", width: "100%", spacing: 2, alignItems: "flex-start", paddingBottom: 1, children: _jsxs(Stack, { direction: "column", width: "100%", spacing: 1, children: [_jsx(RecordQuery, { triggerSearch: search, searching: searching, onChange: (_query, isDirty) => setIsSearchDirty(isDirty) }), _jsxs(Stack, { direction: "row", spacing: 1, children: [_jsx(IndexPicker, {}), _jsx(HitSort, {}), _jsx(SearchSpan, { omitCustom: true }), _jsx("div", { style: { flex: 1 } }), _jsx(ChipPopper, { label: _jsx(Typography, { variant: "body2", children: t('view.settings') }), deleteIcon: _jsx(Settings, {}), toggleOnDelete: true, slotProps: { chip: { size: 'small' } }, placement: "bottom-end", children: _jsxs(Stack, { direction: "column", spacing: 1, children: [_jsxs(Stack, { spacing: 1, direction: "row", alignItems: "center", sx: { flex: '0 !important', minWidth: '300px' }, children: [_jsx(Typography, { component: "span", children: t('view.settings.advance_on_triage') }), _jsx(Tooltip, { title: t('view.settings.advance_on_triage.description'), children: _jsx(HelpOutline, { sx: { fontSize: '16px' } }) }), _jsx(FlexOne, {}), _jsx(Checkbox, { size: "small", checked: advanceOnTriage, onChange: (_event, checked) => setAdvanceOnTriage(checked) })] }), _jsxs(Stack, { direction: "row", spacing: 1, alignItems: "center", justifyContent: "space-between", children: [_jsx(Typography, { component: "span", children: t('view.settings.layout') }), _jsx(LayoutToggle, { displayType: displayType, setDisplayType: setDisplayType, size: "small", allowNullValue: true })] })] }) })] })] }) }), _jsxs(Stack, { direction: "row", spacing: 1, alignItems: "flex-end", justifyContent: "space-between", children: [response && (_jsx(SearchTotal, { total: response.total, pageLength: response.items.length, offset: response.offset, sx: theme => ({ color: theme.palette.text.secondary, fontSize: '0.9em', fontStyle: 'italic' }) })), _jsx(FlexOne, {}), displayType === 'grid' && (_jsx(AddColumnModal, { columns: columns, addColumn: key => isReady && setColumns(uniq([...columns, key])) }))] }), _jsx(LinearProgress, { sx: [!searching && { opacity: 0 }] })] }) }), _jsx(VSBoxContent, { children: displayType === 'grid' ? (_jsx(Stack, { component: Paper, spacing: 1, width: "100%", height: "100%", sx: { overflow: 'auto', flex: 1 }, children: _jsx(RecordTable, { query: query, items: response?.items }) })) : (_jsxs(Stack, { spacing: 1, children: [!response?.total && _jsx(AppListEmpty, {}), response?.items.map(record => record.__index === 'hit' ? (_jsx(HitCard, { id: record.howler.id, layout: HitLayout.DENSE }, record.howler.id)) : (_jsx(EventCard, { event: record }, record.howler.id)))] })) })] }) }) }) }));
235
+ }), variant: "body2", children: t('hit.search.prompt') }), _jsx(Stack, { direction: "row", width: "100%", spacing: 2, alignItems: "flex-start", paddingBottom: 1, children: _jsxs(Stack, { direction: "column", width: "100%", spacing: 1, children: [_jsx(RecordQuery, { triggerSearch: search, searching: searching, onChange: (_query, isDirty) => setIsSearchDirty(isDirty) }), _jsxs(Stack, { direction: "row", spacing: 1, children: [_jsx(IndexPicker, {}), _jsx(HitSort, {}), _jsx(SearchSpan, { omitCustom: true }), _jsx("div", { style: { flex: 1 } }), _jsx(ChipPopper, { label: _jsx(Typography, { variant: "body2", children: t('view.settings') }), deleteIcon: _jsx(Settings, {}), toggleOnDelete: true, slotProps: { chip: { size: 'small' } }, placement: "bottom-end", children: _jsxs(Stack, { direction: "column", spacing: 1, children: [_jsxs(Stack, { spacing: 1, direction: "row", alignItems: "center", sx: { flex: '0 !important', minWidth: '300px' }, children: [_jsx(Typography, { component: "span", children: t('view.settings.advance_on_triage') }), _jsx(Tooltip, { title: t('view.settings.advance_on_triage.description'), children: _jsx(HelpOutline, { sx: { fontSize: '16px' } }) }), _jsx(FlexOne, {}), _jsx(Checkbox, { size: "small", checked: advanceOnTriage, onChange: (_event, checked) => setAdvanceOnTriage(checked) })] }), _jsxs(Stack, { direction: "row", spacing: 1, alignItems: "center", justifyContent: "space-between", children: [_jsx(Typography, { component: "span", children: t('view.settings.layout') }), _jsx(LayoutToggle, { displayType: displayType, setDisplayType: type => type && setDisplayType(type), size: "small", allowNullValue: true })] })] }) })] })] }) }), _jsxs(Stack, { direction: "row", spacing: 1, alignItems: "flex-end", justifyContent: "space-between", children: [response && (_jsx(SearchTotal, { total: response.total, pageLength: response.items.length, offset: response.offset, sx: theme => ({ color: theme.palette.text.secondary, fontSize: '0.9em', fontStyle: 'italic' }) })), _jsx(FlexOne, {}), displayType === 'grid' && (_jsx(AddColumnModal, { columns: columns, addColumn: key => isReady && setColumns(uniq([...columns, key])) }))] }), _jsx(LinearProgress, { sx: [!searching && { opacity: 0 }] })] }) }), _jsx(VSBoxContent, { children: displayType === 'grid' ? (_jsx(Stack, { component: Paper, spacing: 1, width: "100%", height: "100%", sx: { overflow: 'auto', flex: 1 }, children: _jsx(RecordTable, { query: query ?? DEFAULT_QUERY, items: response?.items }) })) : (_jsxs(Stack, { spacing: 1, children: [!response?.total && _jsx(AppListEmpty, {}), response?.items.map(record => record.__index === 'hit' ? (_jsx(HitCard, { id: record.howler.id, layout: HitLayout.DENSE }, record.howler.id)) : (_jsx(EventCard, { event: record }, record.howler.id)))] })) })] }) }) }) }));
228
236
  };
229
237
  export default ViewComposer;
@@ -1,2 +1,3 @@
1
- declare const Views: () => import("react/jsx-runtime").JSX.Element;
1
+ import React from 'react';
2
+ declare const Views: () => React.JSX.Element;
2
3
  export default Views;
@@ -2,28 +2,29 @@ import { createElement as _createElement } from "react";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { Clear, Edit, SavedSearch, Star, StarBorder } from '@mui/icons-material';
4
4
  import { Autocomplete, Card, Checkbox, IconButton, Skeleton, Stack, TextField, ToggleButton, ToggleButtonGroup, Tooltip, Typography } from '@mui/material';
5
+ import { useAppUser } from '@tui/core';
5
6
  import api from '@cccsaurora/howler-ui/api';
6
- import { useAppUser } from '@cccsaurora/howler-ui/commons/components/app/hooks';
7
7
  import { ModalContext } from '@cccsaurora/howler-ui/components/app/providers/ModalProvider';
8
- import SearchResponseProvider, { SearchResponseContext } from '@cccsaurora/howler-ui/components/app/providers/SearchResponseProvider';
8
+ import SearchResponseProvider, { createSearchResponseContext, useSearchResponseContext } from '@cccsaurora/howler-ui/components/app/providers/SearchResponseProvider';
9
9
  import { ViewContext } from '@cccsaurora/howler-ui/components/app/providers/ViewProvider';
10
10
  import FlexOne from '@cccsaurora/howler-ui/components/elements/addons/layout/FlexOne';
11
11
  import { TuiListProvider } from '@cccsaurora/howler-ui/components/elements/addons/lists';
12
12
  import { TuiListMethodContext } from '@cccsaurora/howler-ui/components/elements/addons/lists/TuiListProvider';
13
- import HowlerAvatar from '@cccsaurora/howler-ui/components/elements/display/HowlerAvatar';
14
13
  import ItemManager from '@cccsaurora/howler-ui/components/elements/display/ItemManager';
14
+ import Members from '@cccsaurora/howler-ui/components/elements/membership/Members';
15
15
  import { ViewTitle } from '@cccsaurora/howler-ui/components/elements/view/ViewTitle';
16
16
  import { useMyLocalStorageItem } from '@cccsaurora/howler-ui/components/hooks/useMyLocalStorage';
17
17
  import useMySnackbar from '@cccsaurora/howler-ui/components/hooks/useMySnackbar';
18
- import { isNull, omitBy, size } from 'lodash-es';
18
+ import { isNil, omitBy, size } from 'lodash-es';
19
19
  import React, { useCallback, useContext, useEffect, useState } from 'react';
20
20
  import { useTranslation } from 'react-i18next';
21
- import { Link, useNavigate, useSearchParams } from 'react-router-dom';
21
+ import { Link, useNavigate, useSearchParams } from 'react-router';
22
22
  import { useContextSelector } from 'use-context-selector';
23
23
  import { StorageKey } from '@cccsaurora/howler-ui/utils/constants';
24
24
  import { sanitizeLuceneQuery } from '@cccsaurora/howler-ui/utils/stringUtils';
25
25
  import { buildViewUrl } from '@cccsaurora/howler-ui/utils/viewUtils';
26
26
  const FIELDS_TO_SEARCH = ['title', 'query', 'sort', 'type', 'owner'];
27
+ const SearchResponseContext = createSearchResponseContext();
27
28
  const ViewsBase = () => {
28
29
  const { t } = useTranslation();
29
30
  const { user } = useAppUser();
@@ -40,10 +41,10 @@ const ViewsBase = () => {
40
41
  const [searchParams, setSearchParams] = useSearchParams();
41
42
  const { load } = useContext(TuiListMethodContext);
42
43
  const pageCount = useMyLocalStorageItem(StorageKey.PAGE_COUNT, 25)[0];
43
- const { response, request, remove, getSearchRequestData } = useContext(SearchResponseContext);
44
+ const { response, request, remove, getSearchRequestData } = useSearchResponseContext(SearchResponseContext);
44
45
  const [phrase, setPhrase] = useState('');
45
46
  const [offset, setOffset] = useState(parseInt(searchParams.get('offset')) || 0);
46
- const [type, setType] = useState(searchParams.get('type') || null);
47
+ const [type, setType] = useState(searchParams.get('type'));
47
48
  const [hasError, setHasError] = useState(false);
48
49
  const [searching, setSearching] = useState(false);
49
50
  const [favouritesOnly, setFavouritesOnly] = useState(false);
@@ -62,8 +63,10 @@ const ViewsBase = () => {
62
63
  setSearchParams(searchParams, { replace: true });
63
64
  const searchTerm = phrase ? `*${sanitizeLuceneQuery(phrase)}*` : '*';
64
65
  const phraseQuery = FIELDS_TO_SEARCH.map(_field => `${_field}:${searchTerm}`).join(' OR ');
65
- const typeQuery = `(type:global OR owner:(${user.username} OR none)) AND type:(${type ?? '*'}${type === 'personal' ? ' OR readonly' : ''})`;
66
- const favouritesQuery = favouritesOnly && user.favourite_views.length > 0 ? ` AND view_id:(${user.favourite_views.join(' OR ')})` : '';
66
+ const typeQuery = `(type:global OR owner:(${user.username} OR none) OR admins:${user.username} OR members:${user.username}) AND type:(${type ?? '*'}${type === 'personal' ? ' OR readonly' : ''})`;
67
+ const favouritesQuery = favouritesOnly && (user.favourite_views?.length ?? 0) > 0
68
+ ? ` AND view_id:(${user.favourite_views.join(' OR ')})`
69
+ : '';
67
70
  await request(api.search.view.post, {
68
71
  query: `(${phraseQuery}) AND ${typeQuery}${favouritesQuery}`,
69
72
  rows: pageCount,
@@ -167,7 +170,7 @@ const ViewsBase = () => {
167
170
  }
168
171
  }, [searchParams, setSearchParams]);
169
172
  useEffect(() => {
170
- if (response?.total <= offset) {
173
+ if ((response?.total ?? 0) <= offset) {
171
174
  setOffset(0);
172
175
  searchParams.set('offset', '0');
173
176
  setSearchParams(searchParams, { replace: true });
@@ -179,12 +182,15 @@ const ViewsBase = () => {
179
182
  }
180
183
  // eslint-disable-next-line react-hooks/exhaustive-deps
181
184
  }, [offset, favouritesOnly, type]);
182
- return (_jsx(ItemManager, { onSearch: onSearch, onPageChange: onPageChange, phrase: phrase, setPhrase: setPhrase, hasError: hasError, searching: searching, searchFilters: _jsx(Stack, { direction: "row", spacing: 1, alignItems: "center", children: _jsxs(ToggleButtonGroup, { sx: { display: 'grid', gridTemplateColumns: '1fr 1fr' }, size: "small", value: type, exclusive: true, onChange: (__, _type) => onTypeChange(_type), children: [_jsx(ToggleButton, { value: "personal", "aria-label": "personal", children: t('route.views.manager.personal') }), _jsx(ToggleButton, { value: "global", "aria-label": "global", children: t('route.views.manager.global') })] }) }), aboveSearch: _jsx(Typography, { sx: theme => ({ fontStyle: 'italic', color: theme.palette.text.disabled, mb: 0.5 }), variant: "body2", children: t('route.views.search.prompt') }), afterSearch: size(views) > 0 ? (_jsx(Autocomplete, { open: defaultViewOpen, loading: defaultViewLoading, onOpen: onDefaultViewOpen, onClose: () => setDefaultViewOpen(false), options: Object.values(omitBy(views, isNull)), renderOption: ({ key, ...props }, o) => (_createElement("li", { ...props, key: key },
185
+ return (_jsx(ItemManager, { onSearch: onSearch, onPageChange: onPageChange, phrase: phrase, setPhrase: setPhrase, hasError: hasError, searching: searching, searchFilters: _jsx(Stack, { direction: "row", spacing: 1, alignItems: "center", children: _jsxs(ToggleButtonGroup, { sx: { display: 'grid', gridTemplateColumns: '1fr 1fr' }, size: "small", value: type, exclusive: true, onChange: (__, _type) => onTypeChange(_type), children: [_jsx(ToggleButton, { value: "personal", "aria-label": "personal", children: t('route.views.manager.personal') }), _jsx(ToggleButton, { value: "global", "aria-label": "global", children: t('route.views.manager.global') })] }) }), aboveSearch: _jsx(Typography, { sx: theme => ({ fontStyle: 'italic', color: theme.palette.text.disabled, mb: 0.5 }), variant: "body2", children: t('route.views.search.prompt') }), afterSearch: size(views) > 0 ? (_jsx(Autocomplete, { open: defaultViewOpen, loading: defaultViewLoading, onOpen: onDefaultViewOpen, onClose: () => setDefaultViewOpen(false), options: Object.values(omitBy(views, isNil)), renderOption: ({ key, ...props }, o) => (_createElement("li", { ...props, key: key },
183
186
  _jsxs(Stack, { children: [_jsx(Typography, { variant: "body1", children: t(o.title) }), _jsx(Typography, { variant: "caption", children: _jsx("code", { children: o.query }) })] }))), renderInput: params => (_jsx(TextField, { ...params, label: t('route.views.manager.default'), sx: { minWidth: '300px' } })), filterOptions: (_views, { inputValue }) => _views.filter(v => t(v.title).toLowerCase().includes(inputValue.toLowerCase()) ||
184
- v.query.toLowerCase().includes(inputValue.toLowerCase())), getOptionLabel: (v) => t(v.title), isOptionEqualToValue: (view, value) => view.view_id === value.view_id, value: views[defaultView] ?? null, onChange: (_, option) => setDefaultView(option?.view_id) })) : (_jsx(Skeleton, { variant: "rounded", width: "300px", height: "initial" })), belowSearch: _jsxs(Stack, { direction: "row", spacing: 1, alignItems: "center", children: [_jsx(Checkbox, { size: "small", disabled: user.favourite_views?.length < 1, checked: favouritesOnly, onChange: (_, checked) => setFavouritesOnly(checked) }), _jsx(Typography, { variant: "body1", sx: theme => ({ color: theme.palette.text.disabled }), children: t('route.views.manager.favourites') })] }), renderer: ({ item }, classRenderer) => (_jsx(Card, { variant: "outlined", sx: { p: 1, mb: 1, transitionProperty: 'border-color', '&:hover': { borderColor: 'primary.main' } }, className: classRenderer(), children: _jsxs(Stack, { direction: "row", alignItems: "center", spacing: 1, sx: { color: 'inherit', textDecoration: 'none' }, component: Link, to: buildViewUrl(item.item), children: [_jsx(ViewTitle, { ...item.item }), _jsx(FlexOne, {}), ((item.item.owner === user.username && item.item.type !== 'readonly') ||
185
- (item.item.type === 'global' && user.is_admin)) && (_jsx(Tooltip, { title: t('button.edit'), children: _jsx(IconButton, { component: Link, to: `/views/${item.item.view_id}/edit?query=${item.item.query}`, children: _jsx(Edit, {}) }) })), item.item.owner === user.username && item.item.type !== 'readonly' && (_jsx(Tooltip, { title: t('button.delete'), children: _jsx(IconButton, { onClick: event => onDelete(event, item.item.view_id), children: _jsx(Clear, {}) }) })), item.item.type === 'global' && item.item.owner !== user.username && (_jsx(Tooltip, { title: item.item.owner, children: _jsx("div", { children: _jsx(HowlerAvatar, { sx: { width: 24, height: 24, marginRight: '8px !important', marginLeft: '8px !important' }, userId: item.item.owner }) }) })), _jsx(Tooltip, { title: t('button.pin'), children: _jsx(IconButton, { onClick: e => onFavourite(e, item.item.view_id), children: user.favourite_views?.includes(item.item.view_id) ? _jsx(Star, {}) : _jsx(StarBorder, {}) }) })] }) }, item.item.view_id)), response: response, searchPrompt: "route.views.manager.search", onCreate: () => navigate('/views/create'), createPrompt: "route.views.create", createIcon: _jsx(SavedSearch, { sx: { mr: 1 } }) }));
187
+ v.query.toLowerCase().includes(inputValue.toLowerCase())), getOptionLabel: (v) => t(v.title), isOptionEqualToValue: (view, value) => view.view_id === value.view_id, value: views[defaultView] ?? null, onChange: (_, option) => setDefaultView(option?.view_id) })) : (_jsx(Skeleton, { variant: "rounded", width: "300px", height: "initial" })), belowSearch: _jsxs(Stack, { direction: "row", spacing: 1, alignItems: "center", children: [_jsx(Checkbox, { size: "small", disabled: (user.favourite_views?.length ?? 0) < 1, checked: favouritesOnly, onChange: (_, checked) => setFavouritesOnly(checked) }), _jsx(Typography, { variant: "body1", sx: theme => ({ color: theme.palette.text.disabled }), children: t('route.views.manager.favourites') })] }), renderer: ({ item }, classRenderer) => (_jsx(Card, { variant: "outlined", sx: { p: 1, mb: 1, transitionProperty: 'border-color', '&:hover': { borderColor: 'primary.main' } }, className: classRenderer(), children: _jsxs(Stack, { direction: "row", alignItems: "center", spacing: 1, sx: { color: 'inherit', textDecoration: 'none' }, component: Link, to: buildViewUrl(item.item), children: [_jsx(ViewTitle, { ...item.item }), _jsx(FlexOne, {}), _jsx(Members, { item: item.item }), item.item.type !== 'readonly' &&
188
+ (item.item.owner === user.username ||
189
+ item.item.admins?.includes(user.username) ||
190
+ item.item.members?.includes(user.username) ||
191
+ (item.item.type === 'global' && user.is_admin)) && (_jsx(Tooltip, { title: t('button.edit'), children: _jsx(IconButton, { component: Link, to: `/views/${item.item.view_id}/edit?query=${item.item.query}`, children: _jsx(Edit, {}) }) })), item.item.owner === user.username && item.item.type !== 'readonly' && (_jsx(Tooltip, { title: t('button.delete'), children: _jsx(IconButton, { onClick: event => onDelete(event, item.item.view_id), children: _jsx(Clear, {}) }) })), _jsx(Tooltip, { title: t('button.pin'), children: _jsx(IconButton, { onClick: e => onFavourite(e, item.item.view_id), children: user.favourite_views?.includes(item.item.view_id) ? _jsx(Star, {}) : _jsx(StarBorder, {}) }) })] }) }, item.item.view_id)), response: response, searchPrompt: "route.views.manager.search", onCreate: () => navigate('/views/create'), createPrompt: "route.views.create", createIcon: _jsx(SavedSearch, { sx: { mr: 1 } }) }));
186
192
  };
187
193
  const Views = () => {
188
- return (_jsx(TuiListProvider, { children: _jsx(SearchResponseProvider, { idField: "view_id", children: _jsx(ViewsBase, {}) }) }));
194
+ return (_jsx(TuiListProvider, { children: _jsx(SearchResponseProvider, { context: SearchResponseContext, idField: "view_id", children: _jsx(ViewsBase, {}) }) }));
189
195
  };
190
196
  export default Views;
package/i18n.js CHANGED
@@ -1,3 +1,5 @@
1
+ import { addTranslations as addA11yTranslations } from '@tui/a11y';
2
+ import { addTranslations as addCoreTranslations } from '@tui/core';
1
3
  import { createInstance } from 'i18next';
2
4
  import LanguageDetector from 'i18next-browser-languagedetector';
3
5
  import helpMainEN from '@cccsaurora/howler-ui/locales/en/help/main.json';
@@ -40,4 +42,6 @@ void i18nInstance
40
42
  },
41
43
  resources
42
44
  });
45
+ addCoreTranslations(i18nInstance);
46
+ addA11yTranslations(i18nInstance);
43
47
  export default i18nInstance;
@@ -20,6 +20,7 @@
20
20
  "api.user.apikey.removed": "API key removed successfully.",
21
21
  "api.user.apikey.updated": "New API key added successfully.",
22
22
  "api.user.email.updated": "User's email updated successfully.",
23
+ "api.user.groups.empty": "No user groups to show.",
23
24
  "api.user.name.updated": "User's name updated successfully.",
24
25
  "api.user.quota.updated": "API quota updated successfully.",
25
26
  "api.user.role.updated": "User's roles updated successfully.",
@@ -318,6 +319,14 @@
318
319
  "markdown.error": "An Error Has Occurred.",
319
320
  "markdown.json.invalid": "Invalid JSON Provided. Consider using the {{json <data>}} utility to convert objects into JSON strings.",
320
321
  "markdown.props.missing": "You are missing keyword arguments for this helper:",
322
+ "membership.manage": "Manage Membership",
323
+ "membership.message.error": "There was an error when updating permissions.",
324
+ "membership.message.success": "Permissions updated.",
325
+ "membership.message.warning": "No users selected.",
326
+ "membership.privilege.admins": "Administrator",
327
+ "membership.privilege.manage": "Manage Privileges",
328
+ "membership.privilege.members": "Member",
329
+ "membership.privilege.owner": "Owner",
321
330
  "modal.action.description": "Provide a name that allows other users to identify the purpose of this action.",
322
331
  "modal.action.empty": "Action Name cannot be empty.",
323
332
  "modal.action.label": "Action Name",
@@ -871,6 +880,7 @@
871
880
  "rule.interval.thirty.minutes": "Every thirty minutes",
872
881
  "rule.interval.three.hours": "Every three hours",
873
882
  "save": "Save",
883
+ "search": "Search",
874
884
  "search.fuzzy.no_results": "No results found.",
875
885
  "search.fuzzy.placeholder": "Search by IP, domain, hash, email, or keyword...",
876
886
  "search.fuzzy.results.cases": "Cases",