@centreon/ui 23.10.122 → 24.4.0

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 (360) hide show
  1. package/package.json +64 -45
  2. package/public/mockServiceWorker.js +2 -2
  3. package/src/ActionsList/ActionsList.styles.ts +40 -71
  4. package/src/Button/Icon/index.stories.tsx +1 -1
  5. package/src/Button/Icon/index.tsx +2 -2
  6. package/src/Button/Save/StartIcon.tsx +3 -3
  7. package/src/Button/Save/index.tsx +9 -5
  8. package/src/Checkbox/Checkbox.tsx +2 -2
  9. package/src/Checkbox/CheckboxGroup/index.tsx +2 -2
  10. package/src/Checkbox/fonts/roboto-bold-webfont.ttf +0 -0
  11. package/src/Checkbox/fonts/roboto-bold-webfont.woff +0 -0
  12. package/src/Checkbox/fonts/roboto-bold-webfont.woff2 +0 -0
  13. package/src/Checkbox/fonts/roboto-light-webfont.ttf +0 -0
  14. package/src/Checkbox/fonts/roboto-light-webfont.woff +0 -0
  15. package/src/Checkbox/fonts/roboto-light-webfont.woff2 +0 -0
  16. package/src/Checkbox/fonts/roboto-medium-webfont.ttf +0 -0
  17. package/src/Checkbox/fonts/roboto-medium-webfont.woff +0 -0
  18. package/src/Checkbox/fonts/roboto-medium-webfont.woff2 +0 -0
  19. package/src/Checkbox/fonts/roboto-regular-webfont.ttf +0 -0
  20. package/src/Checkbox/fonts/roboto-regular-webfont.woff +0 -0
  21. package/src/Checkbox/fonts/roboto-regular-webfont.woff2 +0 -0
  22. package/src/Dashboard/Dashboard.styles.ts +6 -5
  23. package/src/Dashboard/Item.tsx +1 -1
  24. package/src/Dashboard/Layout.tsx +2 -2
  25. package/src/Dashboard/utils.ts +1 -1
  26. package/src/Dialog/Confirm/index.tsx +10 -2
  27. package/src/Dialog/UnsavedChanges/index.tsx +21 -20
  28. package/src/Dialog/UnsavedChanges/translatedLabels.ts +4 -6
  29. package/src/Dialog/index.tsx +9 -2
  30. package/src/FallbackPage/FallbackPage.tsx +3 -3
  31. package/src/FileDropZone/index.tsx +3 -1
  32. package/src/Form/Form.cypress.spec.tsx +133 -0
  33. package/src/Form/Inputs/Grid.tsx +8 -4
  34. package/src/Form/Inputs/List/Content.tsx +62 -0
  35. package/src/Form/Inputs/List/List.styles.ts +29 -0
  36. package/src/Form/Inputs/List/List.tsx +58 -0
  37. package/src/Form/Inputs/List/useList.ts +81 -0
  38. package/src/Form/Inputs/Text.tsx +3 -1
  39. package/src/Form/Inputs/index.tsx +3 -1
  40. package/src/Form/Inputs/models.ts +23 -13
  41. package/src/Graph/BarStack/BarStack.cypress.spec.tsx +217 -0
  42. package/src/Graph/BarStack/BarStack.stories.tsx +125 -0
  43. package/src/Graph/BarStack/BarStack.styles.ts +66 -0
  44. package/src/Graph/BarStack/BarStack.tsx +14 -0
  45. package/src/Graph/BarStack/Graph.tsx +176 -0
  46. package/src/Graph/BarStack/GraphAndLegend.tsx +119 -0
  47. package/src/Graph/BarStack/ResponsiveBarStack.tsx +114 -0
  48. package/src/Graph/BarStack/constants.ts +5 -0
  49. package/src/Graph/BarStack/index.ts +1 -0
  50. package/src/Graph/BarStack/models.ts +19 -0
  51. package/src/Graph/BarStack/useGraphAndLegend.ts +86 -0
  52. package/src/Graph/BarStack/useResponsiveBarStack.ts +106 -0
  53. package/src/Graph/Gauge/Gauge.cypress.spec.tsx +102 -0
  54. package/src/Graph/Gauge/Gauge.tsx +1 -1
  55. package/src/Graph/HeatMap/HeatMap.cypress.spec.tsx +145 -0
  56. package/src/Graph/HeatMap/HeatMap.stories.tsx +0 -25
  57. package/src/Graph/HeatMap/HeatMap.styles.tsx +1 -0
  58. package/src/Graph/HeatMap/ResponsiveHeatMap.tsx +39 -12
  59. package/src/Graph/HeatMap/model.ts +6 -1
  60. package/src/Graph/Legend/Legend.styles.ts +10 -0
  61. package/src/Graph/Legend/Legend.tsx +26 -0
  62. package/src/Graph/Legend/index.ts +1 -0
  63. package/src/Graph/Legend/models.ts +11 -0
  64. package/src/Graph/LineChart/BasicComponents/Lines/RegularLines/index.tsx +2 -1
  65. package/src/Graph/LineChart/BasicComponents/Lines/StackedLines/index.tsx +3 -4
  66. package/src/Graph/LineChart/BasicComponents/Lines/Threshold/Circle.tsx +2 -2
  67. package/src/Graph/LineChart/BasicComponents/ThresholdLine.tsx +3 -1
  68. package/src/Graph/LineChart/BasicComponents/Thresholds.tsx +2 -2
  69. package/src/Graph/LineChart/BasicComponents/useFilterLines.ts +3 -5
  70. package/src/Graph/LineChart/Header/index.tsx +3 -31
  71. package/src/Graph/LineChart/Icons/Downtime.tsx +3 -3
  72. package/src/Graph/LineChart/InteractiveComponents/AnchorPoint/GuidingLines.tsx +2 -2
  73. package/src/Graph/LineChart/InteractiveComponents/AnchorPoint/useTickGraph.ts +9 -11
  74. package/src/Graph/LineChart/InteractiveComponents/Annotations/EventAnnotations.tsx +1 -1
  75. package/src/Graph/LineChart/InteractiveComponents/GraphValueTooltip/GraphValueTooltip.tsx +68 -0
  76. package/src/Graph/LineChart/InteractiveComponents/GraphValueTooltip/useGraphValueTooltip.ts +27 -0
  77. package/src/Graph/LineChart/InteractiveComponents/GraphValueTooltip/useGraphValueTooltipStyles.ts +31 -0
  78. package/src/Graph/LineChart/InteractiveComponents/ZoomPreview/index.tsx +2 -1
  79. package/src/Graph/LineChart/InteractiveComponents/index.tsx +132 -17
  80. package/src/Graph/LineChart/InteractiveComponents/interactionWithGraphAtoms.ts +7 -27
  81. package/src/Graph/LineChart/Legend/Legend.styles.ts +85 -32
  82. package/src/Graph/LineChart/Legend/LegendContent.tsx +12 -6
  83. package/src/Graph/LineChart/Legend/LegendHeader.tsx +66 -27
  84. package/src/Graph/LineChart/Legend/index.tsx +43 -46
  85. package/src/Graph/LineChart/Legend/models.ts +5 -0
  86. package/src/Graph/LineChart/Legend/useLegend.ts +12 -13
  87. package/src/Graph/LineChart/LineChart.cypress.spec.tsx +144 -0
  88. package/src/Graph/LineChart/LineChart.styles.ts +8 -0
  89. package/src/Graph/LineChart/LineChart.tsx +125 -123
  90. package/src/Graph/LineChart/LoadingSkeleton.tsx +2 -2
  91. package/src/Graph/LineChart/helpers/doc.ts +16 -13
  92. package/src/Graph/LineChart/helpers/index.ts +1 -1
  93. package/src/Graph/LineChart/index.stories.tsx +17 -2
  94. package/src/Graph/LineChart/index.tsx +6 -7
  95. package/src/Graph/LineChart/mockedData/curvesWithSameColor.json +252 -0
  96. package/src/Graph/LineChart/mockedData/lastDayWithIncompleteValues.json +1320 -0
  97. package/src/Graph/LineChart/mockedData/lastDayWithNullValues.json +1314 -0
  98. package/src/Graph/LineChart/models.ts +12 -1
  99. package/src/Graph/LineChart/useLineChartData.ts +68 -18
  100. package/src/Graph/PieChart/PieChart.cypress.spec.tsx +154 -0
  101. package/src/Graph/PieChart/PieChart.stories.tsx +194 -0
  102. package/src/Graph/PieChart/PieChart.styles.ts +39 -0
  103. package/src/Graph/PieChart/PieChart.tsx +14 -0
  104. package/src/Graph/PieChart/ResponsivePie.tsx +245 -0
  105. package/src/Graph/PieChart/index.ts +1 -0
  106. package/src/Graph/PieChart/models.ts +20 -0
  107. package/src/Graph/PieChart/useResponsivePie.ts +81 -0
  108. package/src/Graph/SingleBar/SingleBar.cypress.spec.tsx +121 -0
  109. package/src/Graph/SingleBar/Thresholds.tsx +2 -2
  110. package/src/Graph/Text/Text.cypress.spec.tsx +101 -0
  111. package/src/Graph/Text/Text.stories.tsx +60 -4
  112. package/src/Graph/Text/Text.styles.ts +12 -1
  113. package/src/Graph/Text/Text.tsx +17 -12
  114. package/src/Graph/Tree/DescendantNodes.tsx +88 -0
  115. package/src/Graph/Tree/Links.tsx +64 -0
  116. package/src/Graph/Tree/StandaloneTree.tsx +32 -0
  117. package/src/Graph/Tree/Tree.cypress.spec.tsx +171 -0
  118. package/src/Graph/Tree/Tree.stories.tsx +144 -0
  119. package/src/Graph/Tree/Tree.tsx +116 -0
  120. package/src/Graph/Tree/constants.ts +2 -0
  121. package/src/Graph/Tree/index.ts +4 -0
  122. package/src/Graph/Tree/models.ts +52 -0
  123. package/src/Graph/Tree/stories/contents.tsx +164 -0
  124. package/src/Graph/Tree/stories/datas.ts +305 -0
  125. package/src/Graph/Tree/utils.ts +49 -0
  126. package/src/Graph/common/testUtils.ts +71 -0
  127. package/src/Graph/common/timeSeries/index.ts +53 -15
  128. package/src/Graph/common/utils.ts +69 -1
  129. package/src/Graph/index.ts +4 -0
  130. package/src/Icon/BaseIcon.tsx +32 -0
  131. package/src/Icon/DowntimeIcon.tsx +14 -0
  132. package/src/InputField/Number/Number.cypress.spec.tsx +85 -0
  133. package/src/InputField/Number/Number.stories.tsx +66 -0
  134. package/src/InputField/Number/Number.tsx +74 -0
  135. package/src/InputField/Search/index.tsx +2 -2
  136. package/src/InputField/Select/Autocomplete/Connected/Multi/index.test.tsx +22 -1
  137. package/src/InputField/Select/Autocomplete/Connected/index.test.tsx +3 -2
  138. package/src/InputField/Select/Autocomplete/Connected/index.tsx +35 -17
  139. package/src/InputField/Select/Autocomplete/Draggable/SortableList.tsx +1 -1
  140. package/src/InputField/Select/Autocomplete/Draggable/SortableListContent.tsx +1 -1
  141. package/src/InputField/Select/Autocomplete/Draggable/index.tsx +1 -1
  142. package/src/InputField/Select/Autocomplete/Multi/index.stories.tsx +19 -0
  143. package/src/InputField/Select/Autocomplete/Multi/index.tsx +12 -7
  144. package/src/InputField/Select/Autocomplete/index.tsx +129 -116
  145. package/src/InputField/Select/IconPopover/index.tsx +3 -3
  146. package/src/InputField/Select/index.tsx +15 -2
  147. package/src/InputField/Text/index.tsx +53 -46
  148. package/src/Listing/ActionBar/index.tsx +11 -10
  149. package/src/Listing/Cell/DataCell.styles.ts +3 -0
  150. package/src/Listing/Cell/DataCell.tsx +23 -5
  151. package/src/Listing/Header/ListingHeader.tsx +1 -1
  152. package/src/Listing/Listing.cypress.spec.tsx +218 -33
  153. package/src/Listing/Listing.styles.ts +4 -7
  154. package/src/Listing/Row/Row.tsx +7 -3
  155. package/src/Listing/index.stories.tsx +39 -5
  156. package/src/Listing/index.test.tsx +1 -1
  157. package/src/Listing/index.tsx +207 -149
  158. package/src/Listing/models.ts +1 -0
  159. package/src/Listing/useStyleTable.ts +1 -0
  160. package/src/Module/LicensedModule/LicenseCheck/index.tsx +24 -9
  161. package/src/Module/LicensedModule/index.tsx +7 -1
  162. package/src/Module/Module.cypress.spec.tsx +129 -0
  163. package/src/Module/index.tsx +2 -4
  164. package/src/Panel/index.tsx +1 -1
  165. package/src/PopoverMenu/index.tsx +9 -8
  166. package/src/RichTextEditor/ContentEditable.tsx +195 -195
  167. package/src/RichTextEditor/RichTextEditor.tsx +12 -1
  168. package/src/SortableItems/index.tsx +2 -7
  169. package/src/StoryBookThemeProvider/index.tsx +35 -36
  170. package/src/ThemeProvider/index.tsx +39 -12
  171. package/src/ThemeProvider/palettes.ts +15 -12
  172. package/src/TimePeriods/CustomTimePeriod/CompactCustomTimePeriod.styles.ts +6 -7
  173. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/PickersStartEndDate.tsx +10 -6
  174. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/models.ts +0 -2
  175. package/src/TimePeriods/DateTimePickerInput.tsx +59 -19
  176. package/src/TimePeriods/ResolutionTimePeriod.cypress.spec.tsx +12 -9
  177. package/src/TimePeriods/TimePeriods.cypress.spec.tsx +9 -33
  178. package/src/TimePeriods/helpers/index.ts +1 -1
  179. package/src/TimePeriods/index.stories.tsx +12 -4
  180. package/src/TimePeriods/index.tsx +2 -2
  181. package/src/TopCounterElements/TopCounterLayout.tsx +3 -0
  182. package/src/TopCounterElements/useCloseOnLegacyPage.tsx +42 -0
  183. package/src/Typography/FluidTypography/FluidTypography.cypress.spec.tsx +27 -0
  184. package/src/Typography/FluidTypography/index.stories.tsx +2 -2
  185. package/src/Typography/FluidTypography/index.tsx +21 -28
  186. package/src/Typography/Subtitle.tsx +55 -0
  187. package/src/api/QueryProvider.tsx +1 -1
  188. package/src/api/TestQueryProvider.tsx +1 -1
  189. package/src/api/buildListingEndpoint/getSearchQueryParameterValue.ts +7 -1
  190. package/src/api/buildListingEndpoint/models.ts +3 -1
  191. package/src/api/customFetch.ts +12 -3
  192. package/src/api/index.ts +3 -3
  193. package/src/api/useFetchQuery/index.ts +49 -28
  194. package/src/api/useGraphQuery/index.ts +26 -5
  195. package/src/api/useGraphQuery/models.ts +5 -0
  196. package/src/api/useMutationQuery/index.test.ts +4 -4
  197. package/src/api/useMutationQuery/index.ts +65 -20
  198. package/src/components/Button/Icon/IconButton.tsx +6 -2
  199. package/src/components/CollapsibleItem/CollapsibleItem.cypress.spec.tsx +76 -0
  200. package/src/components/CollapsibleItem/CollapsibleItem.stories.tsx +26 -0
  201. package/src/components/CollapsibleItem/CollapsibleItem.tsx +43 -14
  202. package/src/components/CollapsibleItem/useCollapsibleItemStyles.ts +24 -1
  203. package/src/components/DataTable/DataListing.tsx +6 -0
  204. package/src/components/DataTable/DataTable.cypress.spec.tsx +174 -0
  205. package/src/components/DataTable/DataTable.stories.tsx +40 -0
  206. package/src/components/DataTable/DataTable.styles.ts +3 -0
  207. package/src/components/DataTable/DataTable.tsx +3 -3
  208. package/src/components/DataTable/Item/DataTableItem.styles.ts +7 -2
  209. package/src/components/DataTable/Item/DataTableItem.tsx +4 -60
  210. package/src/components/DataTable/index.ts +3 -1
  211. package/src/components/Form/AccessRights/AccessRights.cypress.spec.tsx +373 -0
  212. package/src/components/Form/AccessRights/AccessRights.stories.tsx +119 -0
  213. package/src/components/Form/AccessRights/AccessRights.styles.ts +10 -0
  214. package/src/components/Form/AccessRights/AccessRights.tsx +60 -0
  215. package/src/components/Form/AccessRights/Actions/Actions.styles.ts +14 -0
  216. package/src/components/Form/AccessRights/Actions/Actions.tsx +81 -0
  217. package/src/components/Form/AccessRights/Actions/useActions.ts +79 -0
  218. package/src/components/Form/AccessRights/List/Item.tsx +90 -0
  219. package/src/components/Form/AccessRights/List/List.styles.tsx +45 -0
  220. package/src/components/Form/AccessRights/List/List.tsx +52 -0
  221. package/src/components/Form/AccessRights/List/ListItemSkeleton.tsx +18 -0
  222. package/src/components/Form/AccessRights/List/ListSkeleton.tsx +22 -0
  223. package/src/components/Form/AccessRights/List/RemoveAccessRight.tsx +38 -0
  224. package/src/components/Form/AccessRights/List/StateChip.tsx +28 -0
  225. package/src/components/Form/AccessRights/List/useItem.ts +64 -0
  226. package/src/components/Form/AccessRights/Provider.tsx +15 -0
  227. package/src/components/Form/AccessRights/ShareInput/ContactSwitch.tsx +50 -0
  228. package/src/components/Form/AccessRights/ShareInput/ShareInput.styles.ts +17 -0
  229. package/src/components/Form/AccessRights/ShareInput/ShareInput.tsx +78 -0
  230. package/src/components/Form/AccessRights/ShareInput/useShareInput.tsx +113 -0
  231. package/src/components/Form/AccessRights/Stats/Stats.tsx +36 -0
  232. package/src/components/Form/AccessRights/atoms.ts +97 -0
  233. package/src/components/Form/AccessRights/common/RoleSelectField.styles.tsx +7 -0
  234. package/src/components/Form/AccessRights/common/RoleSelectField.tsx +45 -0
  235. package/src/components/Form/AccessRights/models.ts +55 -0
  236. package/src/components/Form/AccessRights/storiesData.ts +222 -0
  237. package/src/components/Form/AccessRights/useAccessRightsInitValues.ts +51 -0
  238. package/src/components/Form/Dashboard/DashboardDuplicationForm.tsx +85 -0
  239. package/src/components/Form/Dashboard/DashboardForm.tsx +15 -12
  240. package/src/components/Form/Dashboard/index.ts +1 -0
  241. package/src/components/Form/FormActions.tsx +7 -2
  242. package/src/components/Form/index.ts +2 -1
  243. package/src/components/ItemComposition/Item.tsx +1 -1
  244. package/src/components/ItemComposition/ItemComposition.cypress.spec.tsx +113 -0
  245. package/src/components/ItemComposition/ItemComposition.stories.tsx +14 -0
  246. package/src/components/ItemComposition/ItemComposition.styles.ts +36 -3
  247. package/src/components/ItemComposition/ItemComposition.tsx +41 -17
  248. package/src/components/Layout/PageLayout/PageLayout.tsx +1 -1
  249. package/src/components/Layout/PageLayout/PageLayoutActions.tsx +1 -0
  250. package/src/components/Layout/PageLayout/PageLayoutBody.tsx +1 -0
  251. package/src/components/Layout/PageLayout/PageLayoutHeader.tsx +5 -1
  252. package/src/components/Layout/PageLayout/PageQuickAccess.tsx +76 -0
  253. package/src/components/Layout/PageLayout/index.ts +3 -1
  254. package/src/components/Layout/PageLayout.cypress.spec.tsx +66 -0
  255. package/src/components/List/Item/ListItem.styles.ts +6 -0
  256. package/src/components/List/Item/ListItem.tsx +6 -4
  257. package/src/components/List/Item/Text.tsx +5 -3
  258. package/src/components/Modal/ConfirmationModal/ConfirmationModal.cypress.spec.tsx +168 -0
  259. package/src/components/Modal/ConfirmationModal/ConfirmationModal.stories.tsx +62 -0
  260. package/src/components/Modal/ConfirmationModal/ConfirmationModal.tsx +87 -0
  261. package/src/components/Modal/Modal.styles.ts +10 -2
  262. package/src/components/Modal/ModalActions.tsx +4 -2
  263. package/src/components/Modal/index.ts +2 -0
  264. package/src/components/Tooltip/ConfirmationTooltip/ConfirmationTooltip.stories.tsx +3 -3
  265. package/src/components/Tooltip/ConfirmationTooltip/ConfirmationTooltip.tsx +1 -1
  266. package/src/components/Tooltip/ConfirmationTooltip/models.ts +1 -1
  267. package/src/components/Zoom/Minimap.tsx +127 -0
  268. package/src/components/Zoom/Zoom.cypress.spec.tsx +246 -0
  269. package/src/components/Zoom/Zoom.stories.tsx +115 -0
  270. package/src/components/Zoom/Zoom.styles.tsx +68 -0
  271. package/src/components/Zoom/Zoom.tsx +61 -0
  272. package/src/components/Zoom/ZoomContent.tsx +167 -0
  273. package/src/components/Zoom/constants.ts +2 -0
  274. package/src/components/Zoom/localPoint.ts +51 -0
  275. package/src/components/Zoom/models.ts +25 -0
  276. package/src/components/Zoom/useMinimap.ts +156 -0
  277. package/src/components/Zoom/useZoom.ts +70 -0
  278. package/src/components/Zoom/utils.ts +55 -0
  279. package/src/components/index.ts +1 -0
  280. package/src/fonts/roboto-bold-webfont.ttf +0 -0
  281. package/src/fonts/roboto-bold-webfont.woff +0 -0
  282. package/src/fonts/roboto-bold-webfont.woff2 +0 -0
  283. package/src/fonts/roboto-light-webfont.ttf +0 -0
  284. package/src/fonts/roboto-light-webfont.woff +0 -0
  285. package/src/fonts/roboto-light-webfont.woff2 +0 -0
  286. package/src/fonts/roboto-medium-webfont.ttf +0 -0
  287. package/src/fonts/roboto-medium-webfont.woff +0 -0
  288. package/src/fonts/roboto-medium-webfont.woff2 +0 -0
  289. package/src/fonts/roboto-regular-webfont.ttf +0 -0
  290. package/src/fonts/roboto-regular-webfont.woff +0 -0
  291. package/src/fonts/roboto-regular-webfont.woff2 +0 -0
  292. package/src/index.ts +6 -0
  293. package/src/queryParameters/url/index.ts +5 -1
  294. package/src/utils/index.ts +25 -22
  295. package/src/utils/useFullscreen/Fullscreen.cypress.spec.tsx +133 -0
  296. package/src/utils/useFullscreen/atoms.ts +3 -0
  297. package/src/utils/useFullscreen/index.ts +2 -0
  298. package/src/utils/useFullscreen/translatedLabels.ts +1 -0
  299. package/src/utils/useFullscreen/useFullscreen.ts +73 -0
  300. package/src/utils/useFullscreen/useFullscreenListener.ts +62 -0
  301. package/src/utils/useInfiniteScrollListing.ts +31 -8
  302. package/src/utils/{useLicenseExpirationWarning.cypress.spec.tsx → useLicenseExpirationWarning.test.tsx} +48 -37
  303. package/src/utils/useLicenseExpirationWarning.ts +18 -18
  304. package/src/utils/useLocale/index.ts +10 -0
  305. package/src/utils/useLocale/useLocale.cypress.spec.tsx +40 -0
  306. package/src/utils/useLocaleDateTimeFormat/index.ts +8 -2
  307. package/src/utils/usePluralizedTranslation.ts +21 -0
  308. package/src/@assets/icons/downtime.icon.svg +0 -1
  309. package/src/Graph/LineChart/BasicComponents/LoadingProgress.tsx +0 -46
  310. package/src/Graph/LineChart/InteractiveComponents/AnchorPoint/TooltipAnchorPoint.tsx +0 -96
  311. package/src/Graph/LineChart/InteractiveComponents/AnchorPoint/useTooltipAnchorPoint.ts +0 -107
  312. package/src/Graph/LineChart/Legend/InteractiveValue.tsx +0 -22
  313. package/src/Graph/LineChart/Legend/Marker.tsx +0 -43
  314. package/src/Graph/LineChart/Legend/useInteractiveValues.ts +0 -99
  315. package/src/Typography/FluidTypography/useFluidResizeObserver.ts +0 -56
  316. package/src/components/Form/AccessRights/AccessRights.resource.ts +0 -45
  317. package/src/components/Form/AccessRights/AccessRightsForm.stories.tsx +0 -59
  318. package/src/components/Form/AccessRights/AccessRightsForm.styles.ts +0 -21
  319. package/src/components/Form/AccessRights/AccessRightsForm.tsx +0 -67
  320. package/src/components/Form/AccessRights/AccessRightsFormActions.tsx +0 -80
  321. package/src/components/Form/AccessRights/Input/AddAction.tsx +0 -31
  322. package/src/components/Form/AccessRights/Input/ContactAccessRightInput.stories.tsx +0 -54
  323. package/src/components/Form/AccessRights/Input/ContactAccessRightInput.tsx +0 -72
  324. package/src/components/Form/AccessRights/Input/ContactAccessRightsInput.styles.ts +0 -22
  325. package/src/components/Form/AccessRights/Input/ContactInputField.tsx +0 -105
  326. package/src/components/Form/AccessRights/Input/RoleInputField.tsx +0 -29
  327. package/src/components/Form/AccessRights/List/ContactAccessRightsList.stories.tsx +0 -97
  328. package/src/components/Form/AccessRights/List/ContactAccessRightsList.styles.ts +0 -71
  329. package/src/components/Form/AccessRights/List/ContactAccessRightsList.tsx +0 -51
  330. package/src/components/Form/AccessRights/List/ContactAccessRightsListItem.stories.tsx +0 -116
  331. package/src/components/Form/AccessRights/List/ContactAccessRightsListItem.tsx +0 -118
  332. package/src/components/Form/AccessRights/List/ContactAccessRightsListItemSkeleton.tsx +0 -26
  333. package/src/components/Form/AccessRights/List/ContactAccessRightsListSkeleton.tsx +0 -28
  334. package/src/components/Form/AccessRights/Stats/AccessRightsStats.styles.ts +0 -18
  335. package/src/components/Form/AccessRights/Stats/AccessRightsStats.tsx +0 -41
  336. package/src/components/Form/AccessRights/__fixtures__/contactAccessRight.mock.ts +0 -52
  337. package/src/components/Form/AccessRights/common/GroupLabel.styles.ts +0 -18
  338. package/src/components/Form/AccessRights/common/GroupLabel.tsx +0 -15
  339. package/src/components/Form/AccessRights/common/Input.styles.ts +0 -48
  340. package/src/components/Form/AccessRights/common/RoleInputSelect.styles.ts +0 -11
  341. package/src/components/Form/AccessRights/common/RoleInputSelect.tsx +0 -57
  342. package/src/components/Form/AccessRights/index.ts +0 -3
  343. package/src/components/Form/AccessRights/useAccessRightsForm.test.tsx +0 -531
  344. package/src/components/Form/AccessRights/useAccessRightsForm.tsx +0 -282
  345. package/src/components/Form/AccessRights/useAccessRightsForm.utils.ts +0 -41
  346. package/src/screens/dashboard/DashboardsDetail.stories.tsx +0 -108
  347. package/src/screens/dashboard/DashboardsOverview.stories.tsx +0 -281
  348. package/src/utils/useDateTimePickerAdapter.ts +0 -309
  349. /package/{public → src/Button}/fonts/roboto-bold-webfont.ttf +0 -0
  350. /package/{public → src/Button}/fonts/roboto-bold-webfont.woff +0 -0
  351. /package/{public → src/Button}/fonts/roboto-bold-webfont.woff2 +0 -0
  352. /package/{public → src/Button}/fonts/roboto-light-webfont.ttf +0 -0
  353. /package/{public → src/Button}/fonts/roboto-light-webfont.woff +0 -0
  354. /package/{public → src/Button}/fonts/roboto-light-webfont.woff2 +0 -0
  355. /package/{public → src/Button}/fonts/roboto-medium-webfont.ttf +0 -0
  356. /package/{public → src/Button}/fonts/roboto-medium-webfont.woff +0 -0
  357. /package/{public → src/Button}/fonts/roboto-medium-webfont.woff2 +0 -0
  358. /package/{public → src/Button}/fonts/roboto-regular-webfont.ttf +0 -0
  359. /package/{public → src/Button}/fonts/roboto-regular-webfont.woff +0 -0
  360. /package/{public → src/Button}/fonts/roboto-regular-webfont.woff2 +0 -0
@@ -0,0 +1,55 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ import { type, equals } from 'ramda';
4
+ import { useTranslation } from 'react-i18next';
5
+
6
+ import { Typography } from '@mui/material';
7
+ import HelpOutlineIcon from '@mui/icons-material/HelpOutline';
8
+
9
+ import { Tooltip } from '../components';
10
+
11
+ interface Props {
12
+ children: ReactNode;
13
+ secondaryLabel?: string | Array<string>;
14
+ }
15
+
16
+ const Subtitle = ({ children, secondaryLabel }: Props): JSX.Element => {
17
+ const { t } = useTranslation();
18
+
19
+ const containsSeveralSecondaryLabels = equals(type(secondaryLabel), 'Array');
20
+
21
+ return (
22
+ <Typography variant="subtitle1">
23
+ <strong>{children}</strong>
24
+ {secondaryLabel && (
25
+ <Tooltip
26
+ aria-label={
27
+ containsSeveralSecondaryLabels
28
+ ? secondaryLabel[0]
29
+ : (secondaryLabel as string)
30
+ }
31
+ followCursor={false}
32
+ label={
33
+ containsSeveralSecondaryLabels ? (
34
+ <>
35
+ {secondaryLabel.map((label) => (
36
+ <p key={label}>{t(label)}</p>
37
+ ))}
38
+ </>
39
+ ) : (
40
+ t(secondaryLabel)
41
+ )
42
+ }
43
+ placement="right"
44
+ >
45
+ <HelpOutlineIcon
46
+ color="primary"
47
+ sx={{ ml: 1, verticalAlign: 'middle' }}
48
+ />
49
+ </Tooltip>
50
+ )}
51
+ </Typography>
52
+ );
53
+ };
54
+
55
+ export default Subtitle;
@@ -7,7 +7,7 @@ const defaultCacheTime = 5 * 1_000;
7
7
  const client = new QueryClient({
8
8
  defaultOptions: {
9
9
  queries: {
10
- cacheTime: defaultCacheTime,
10
+ gcTime: defaultCacheTime,
11
11
  refetchOnWindowFocus: false,
12
12
  staleTime: defaultCacheTime,
13
13
  suspense: true
@@ -5,7 +5,7 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
5
5
  const client = new QueryClient({
6
6
  defaultOptions: {
7
7
  queries: {
8
- cacheTime: 0,
8
+ gcTime: 0,
9
9
  retry: false
10
10
  }
11
11
  }
@@ -93,8 +93,14 @@ const getConditionsSearchQueryParameterValue = (
93
93
  equals(listField, field)
94
94
  );
95
95
 
96
+ const globalOperator = filteredItems.every(({ operator }) =>
97
+ equals(operator, filteredItems[0].operator)
98
+ )
99
+ ? filteredItems[0].operator || '$or'
100
+ : '$or';
101
+
96
102
  return {
97
- $or: flatten(
103
+ [globalOperator]: flatten(
98
104
  filteredItems.map(({ value, values }) => {
99
105
  if (!isNil(value)) {
100
106
  return [
@@ -52,7 +52,8 @@ export type Operator =
52
52
  | '$lk'
53
53
  | '$nk'
54
54
  | '$in'
55
- | '$ni';
55
+ | '$ni'
56
+ | '$rg';
56
57
 
57
58
  export type ConditionValue = {
58
59
  [value in Operator]?: string | Array<string>;
@@ -60,6 +61,7 @@ export type ConditionValue = {
60
61
 
61
62
  export interface ConditionsSearchParameter {
62
63
  field: string;
64
+ operator?: '$and' | '$or';
63
65
  value?: unknown;
64
66
  values?: ConditionValue;
65
67
  }
@@ -1,4 +1,4 @@
1
- import { equals } from 'ramda';
1
+ import { equals, isNil, startsWith } from 'ramda';
2
2
  import { JsonDecoder } from 'ts.data.json';
3
3
 
4
4
  import { Method } from './useMutationQuery';
@@ -22,6 +22,7 @@ export interface CatchErrorProps {
22
22
  }
23
23
 
24
24
  interface CustomFetchProps<T> {
25
+ baseEndpoint?: string;
25
26
  catchError?: (props: CatchErrorProps) => void;
26
27
  decoder?: JsonDecoder.Decoder<T>;
27
28
  defaultFailureMessage?: string;
@@ -42,10 +43,18 @@ export const customFetch = <T>({
42
43
  defaultFailureMessage = 'Something went wrong',
43
44
  isMutation = false,
44
45
  payload,
45
- method = 'GET'
46
+ method = 'GET',
47
+ baseEndpoint = './api/latest'
46
48
  }: CustomFetchProps<T>): Promise<T | ResponseError> => {
47
49
  const defaultOptions = { headers, method, signal };
48
50
 
51
+ const formattedEndpoint =
52
+ !isNil(baseEndpoint) &&
53
+ !startsWith(baseEndpoint, endpoint) &&
54
+ !startsWith('./api/internal.php', endpoint)
55
+ ? `${baseEndpoint}${endpoint}`
56
+ : endpoint;
57
+
49
58
  const options = isMutation
50
59
  ? {
51
60
  ...defaultOptions,
@@ -53,7 +62,7 @@ export const customFetch = <T>({
53
62
  }
54
63
  : defaultOptions;
55
64
 
56
- return fetch(endpoint, options)
65
+ return fetch(formattedEndpoint, options)
57
66
  .then((response) => {
58
67
  if (equals(response.status, 204)) {
59
68
  return {
package/src/api/index.ts CHANGED
@@ -30,7 +30,7 @@ const patchData =
30
30
  <TData, TResult>(cancelToken: CancelToken) =>
31
31
  ({ endpoint, data }: RequestWithData<TData>): Promise<TResult> =>
32
32
  axios
33
- .patch(endpoint, data, {
33
+ .patch(endpoint, JSON.stringify(data), {
34
34
  cancelToken,
35
35
  headers: contentTypeHeaders
36
36
  })
@@ -40,7 +40,7 @@ const postData =
40
40
  <TData, TResult>(cancelToken: CancelToken) =>
41
41
  ({ endpoint, data }: RequestWithData<TData>): Promise<TResult> =>
42
42
  axios
43
- .post(endpoint, data, {
43
+ .post(endpoint, JSON.stringify(data), {
44
44
  cancelToken,
45
45
  headers: contentTypeHeaders
46
46
  })
@@ -50,7 +50,7 @@ const putData =
50
50
  <TData, TResult>(cancelToken: CancelToken) =>
51
51
  ({ endpoint, data }: RequestWithData<TData>): Promise<TResult> =>
52
52
  axios
53
- .put(endpoint, data, {
53
+ .put(endpoint, JSON.stringify(data), {
54
54
  cancelToken,
55
55
  headers: contentTypeHeaders
56
56
  })
@@ -1,4 +1,4 @@
1
- import { useEffect, useMemo } from 'react';
1
+ import { useEffect, useMemo, useRef } from 'react';
2
2
 
3
3
  import 'ulog';
4
4
  import {
@@ -10,22 +10,26 @@ import {
10
10
  } from '@tanstack/react-query';
11
11
  import { JsonDecoder } from 'ts.data.json';
12
12
  import anylogger from 'anylogger';
13
- import { has, includes, not, omit } from 'ramda';
13
+ import { has, includes, isNil, not, omit } from 'ramda';
14
14
 
15
15
  import { CatchErrorProps, customFetch, ResponseError } from '../customFetch';
16
16
  import useSnackbar from '../../Snackbar/useSnackbar';
17
17
  import { useDeepCompare } from '../../utils';
18
18
 
19
19
  export interface UseFetchQueryProps<T> {
20
+ baseEndpoint?: string;
20
21
  catchError?: (props: CatchErrorProps) => void;
21
22
  decoder?: JsonDecoder.Decoder<T>;
22
23
  defaultFailureMessage?: string;
24
+ doNotCancelCallsOnUnmount?: boolean;
23
25
  fetchHeaders?: HeadersInit;
24
26
  getEndpoint: (params?: PrefetchEndpointParams) => string;
25
27
  getQueryKey: () => QueryKey;
26
28
  httpCodesBypassErrorSnackbar?: Array<number>;
27
29
  isPaginated?: boolean;
28
- queryOptions?: Omit<
30
+ queryOptions?: {
31
+ suspense?: boolean;
32
+ } & Omit<
29
33
  UseQueryOptions<T | ResponseError, Error, T | ResponseError, QueryKey>,
30
34
  'queryKey' | 'queryFn'
31
35
  >;
@@ -33,11 +37,12 @@ export interface UseFetchQueryProps<T> {
33
37
 
34
38
  export type UseFetchQueryState<T> = {
35
39
  data?: T;
40
+ error: Omit<ResponseError, 'isError'> | null;
36
41
  fetchQuery: () => Promise<T | ResponseError>;
37
42
  prefetchNextPage: ({ page, getPrefetchQueryKey }) => void;
38
43
  prefetchPreviousPage: ({ page, getPrefetchQueryKey }) => void;
39
44
  prefetchQuery: ({ endpointParams, queryKey }) => void;
40
- } & Omit<QueryObserverBaseResult, 'data'>;
45
+ } & Omit<QueryObserverBaseResult, 'data' | 'error'>;
41
46
 
42
47
  export interface PrefetchEndpointParams {
43
48
  page: number;
@@ -54,14 +59,18 @@ const useFetchQuery = <T extends object>({
54
59
  fetchHeaders,
55
60
  isPaginated,
56
61
  queryOptions,
57
- httpCodesBypassErrorSnackbar = []
62
+ httpCodesBypassErrorSnackbar = [],
63
+ baseEndpoint,
64
+ doNotCancelCallsOnUnmount = false
58
65
  }: UseFetchQueryProps<T>): UseFetchQueryState<T> => {
66
+ const dataRef = useRef<T | undefined>(undefined);
67
+
59
68
  const { showErrorMessage } = useSnackbar();
60
69
 
61
- const queryData = useQuery<T | ResponseError, Error>(
62
- getQueryKey(),
63
- ({ signal }): Promise<T | ResponseError> =>
70
+ const queryData = useQuery<T | ResponseError, Error>({
71
+ queryFn: ({ signal }): Promise<T | ResponseError> =>
64
72
  customFetch<T>({
73
+ baseEndpoint,
65
74
  catchError,
66
75
  decoder,
67
76
  defaultFailureMessage,
@@ -69,10 +78,9 @@ const useFetchQuery = <T extends object>({
69
78
  headers: new Headers(fetchHeaders),
70
79
  signal
71
80
  }),
72
- {
73
- ...queryOptions
74
- }
75
- );
81
+ queryKey: getQueryKey(),
82
+ ...queryOptions
83
+ });
76
84
 
77
85
  const queryClient = useQueryClient();
78
86
 
@@ -92,18 +100,19 @@ const useFetchQuery = <T extends object>({
92
100
  };
93
101
 
94
102
  const prefetchQuery = ({ endpointParams, queryKey }): void => {
95
- queryClient.prefetchQuery(
96
- queryKey,
97
- ({ signal }): Promise<T | ResponseError> =>
103
+ queryClient.prefetchQuery({
104
+ queryFn: ({ signal }): Promise<T | ResponseError> =>
98
105
  customFetch<T>({
106
+ baseEndpoint,
99
107
  catchError,
100
108
  decoder,
101
109
  defaultFailureMessage,
102
110
  endpoint: getEndpoint(endpointParams),
103
111
  headers: new Headers(fetchHeaders),
104
112
  signal
105
- })
106
- );
113
+ }),
114
+ queryKey
115
+ });
107
116
  };
108
117
 
109
118
  const prefetchNextPage = ({ page, getPrefetchQueryKey }): void => {
@@ -133,18 +142,19 @@ const useFetchQuery = <T extends object>({
133
142
  };
134
143
 
135
144
  const fetchQuery = (): Promise<T | ResponseError> => {
136
- return queryClient.fetchQuery(
137
- getQueryKey(),
138
- ({ signal }): Promise<T | ResponseError> =>
145
+ return queryClient.fetchQuery({
146
+ queryFn: ({ signal }): Promise<T | ResponseError> =>
139
147
  customFetch<T>({
148
+ baseEndpoint,
140
149
  catchError,
141
150
  decoder,
142
151
  defaultFailureMessage,
143
152
  endpoint: getEndpoint(),
144
153
  headers: new Headers(fetchHeaders),
145
154
  signal
146
- })
147
- );
155
+ }),
156
+ queryKey: getQueryKey()
157
+ });
148
158
  };
149
159
 
150
160
  const data = useMemo(
@@ -153,21 +163,32 @@ const useFetchQuery = <T extends object>({
153
163
  [queryData.data]
154
164
  );
155
165
 
166
+ if (!isNil(data)) {
167
+ dataRef.current = data;
168
+ }
169
+
156
170
  const errorData = queryData.data as ResponseError | undefined;
157
171
 
158
172
  useEffect(() => {
159
173
  return (): void => {
160
- queryClient.cancelQueries(getQueryKey());
174
+ if (doNotCancelCallsOnUnmount) {
175
+ return;
176
+ }
177
+
178
+ queryClient.cancelQueries({ queryKey: getQueryKey() });
161
179
  };
162
180
  }, []);
163
181
 
164
- useEffect(() => {
165
- manageError();
166
- }, useDeepCompare([queryData.data]));
182
+ useEffect(
183
+ () => {
184
+ manageError();
185
+ },
186
+ useDeepCompare([queryData.data])
187
+ );
167
188
 
168
189
  return {
169
- ...omit(['data'], queryData),
170
- data,
190
+ ...omit(['data', 'error'], queryData),
191
+ data: dataRef.current,
171
192
  error: errorData?.isError ? omit(['isError'], errorData) : null,
172
193
  fetchQuery,
173
194
  prefetchNextPage,
@@ -1,11 +1,20 @@
1
1
  import { useRef } from 'react';
2
2
 
3
- import { equals, has, isEmpty, pluck } from 'ramda';
3
+ import {
4
+ equals,
5
+ flatten,
6
+ has,
7
+ includes,
8
+ isEmpty,
9
+ not,
10
+ pipe,
11
+ pluck
12
+ } from 'ramda';
4
13
  import dayjs from 'dayjs';
5
14
 
6
15
  import { LineChartData, buildListingEndpoint, useFetchQuery } from '../..';
7
16
 
8
- import { Resource, WidgetResourceType } from './models';
17
+ import { Metric, Resource, WidgetResourceType } from './models';
9
18
 
10
19
  interface CustomTimePeriod {
11
20
  end: string;
@@ -14,7 +23,9 @@ interface CustomTimePeriod {
14
23
 
15
24
  interface UseMetricsQueryProps {
16
25
  baseEndpoint: string;
17
- metrics: Array<string>;
26
+ bypassMetricsExclusion?: boolean;
27
+ includeAllResources?: boolean;
28
+ metrics: Array<Metric>;
18
29
  refreshCount?: number;
19
30
  refreshInterval?: number | false;
20
31
  resources?: Array<Resource>;
@@ -71,6 +82,7 @@ const areResourcesFullfilled = (value: Array<Resource>): boolean =>
71
82
  );
72
83
 
73
84
  const useGraphQuery = ({
85
+ bypassMetricsExclusion,
74
86
  metrics,
75
87
  resources = [],
76
88
  baseEndpoint,
@@ -93,7 +105,7 @@ const useGraphQuery = ({
93
105
 
94
106
  const definedMetrics = metrics.filter((metric) => metric);
95
107
  const formattedDefinedMetrics = definedMetrics.map((metric) =>
96
- encodeURIComponent(metric)
108
+ encodeURIComponent(metric.name)
97
109
  );
98
110
 
99
111
  const {
@@ -145,7 +157,16 @@ const useGraphQuery = ({
145
157
  base: data.current.base,
146
158
  title: ''
147
159
  },
148
- metrics: data.current.metrics,
160
+ metrics: bypassMetricsExclusion
161
+ ? data.current.metrics
162
+ : data.current.metrics.filter(({ metric_id }) => {
163
+ return pipe(
164
+ pluck('excludedMetrics'),
165
+ flatten,
166
+ includes(metric_id),
167
+ not
168
+ )(metrics);
169
+ }),
149
170
  times: data.current.times
150
171
  }
151
172
  : undefined;
@@ -13,3 +13,8 @@ export enum WidgetResourceType {
13
13
  serviceCategory = 'service-category',
14
14
  serviceGroup = 'service-group'
15
15
  }
16
+
17
+ export interface Metric {
18
+ excludedMetrics: Array<number>;
19
+ name: string;
20
+ }
@@ -48,7 +48,7 @@ describe('useFetchQuery', () => {
48
48
  method: Method.POST
49
49
  });
50
50
 
51
- result.current.mutate(user);
51
+ result.current.mutate({ payload: user });
52
52
 
53
53
  await waitFor(() => {
54
54
  expect(result.current?.isError).toEqual(false);
@@ -64,7 +64,7 @@ describe('useFetchQuery', () => {
64
64
  method: Method.POST
65
65
  });
66
66
 
67
- result.current.mutate(user);
67
+ result.current.mutate({ payload: user });
68
68
 
69
69
  await waitFor(() => {
70
70
  expect(result.current?.isError).toEqual(true);
@@ -85,7 +85,7 @@ describe('useFetchQuery', () => {
85
85
  method: Method.POST
86
86
  });
87
87
 
88
- result.current.mutate(user);
88
+ result.current.mutate({ payload: user });
89
89
 
90
90
  await waitFor(() => {
91
91
  expect(result.current?.isError).toEqual(true);
@@ -109,7 +109,7 @@ describe('useFetchQuery', () => {
109
109
  method: Method.POST
110
110
  });
111
111
 
112
- result.current.mutate(user);
112
+ result.current.mutate({ payload: user });
113
113
 
114
114
  await waitFor(() => {
115
115
  expect(mockedShowErrorMessage).not.toHaveBeenCalled();
@@ -8,7 +8,7 @@ import {
8
8
  } from '@tanstack/react-query';
9
9
  import { JsonDecoder } from 'ts.data.json';
10
10
  import anylogger from 'anylogger';
11
- import { includes } from 'ramda';
11
+ import { includes, omit } from 'ramda';
12
12
 
13
13
  import { CatchErrorProps, customFetch, ResponseError } from '../customFetch';
14
14
  import useSnackbar from '../../Snackbar/useSnackbar';
@@ -22,7 +22,13 @@ export enum Method {
22
22
  PUT = 'PUT'
23
23
  }
24
24
 
25
+ interface Variables<TMeta, T> {
26
+ _meta?: TMeta;
27
+ payload?: T;
28
+ }
29
+
25
30
  export type UseMutationQueryProps<T, TMeta> = {
31
+ baseEndpoint?: string;
26
32
  catchError?: (props: CatchErrorProps) => void;
27
33
  decoder?: JsonDecoder.Decoder<T>;
28
34
  defaultFailureMessage?: string;
@@ -30,14 +36,39 @@ export type UseMutationQueryProps<T, TMeta> = {
30
36
  getEndpoint: (_meta: TMeta) => string;
31
37
  httpCodesBypassErrorSnackbar?: Array<number>;
32
38
  method: Method;
33
- } & Omit<UseMutationOptions<T & { _meta?: TMeta }>, 'mutationFn'>;
39
+ onError?: (
40
+ error: ResponseError,
41
+ variables: Variables<TMeta, T>,
42
+ context: unknown
43
+ ) => unknown;
44
+ onMutate?: (variables: Variables<TMeta, T>) => Promise<unknown> | unknown;
45
+ onSuccess?: (
46
+ data: ResponseError | T,
47
+ variables: Variables<TMeta, T>,
48
+ context: unknown
49
+ ) => unknown;
50
+ } & Omit<
51
+ UseMutationOptions<{ _meta?: TMeta; payload: T }>,
52
+ 'mutationFn' | 'onError' | 'onMutate' | 'onSuccess' | 'mutateAsync' | 'mutate'
53
+ >;
34
54
 
35
55
  const log = anylogger('API Request');
36
56
 
37
- export type UseMutationQueryState<T> = {
57
+ export type UseMutationQueryState<T, TMeta> = Omit<
58
+ UseMutationResult<T | ResponseError>,
59
+ 'isError' | 'mutate' | 'mutateAsync'
60
+ > & {
38
61
  isError: boolean;
39
62
  isMutating: boolean;
40
- } & UseMutationResult<T | ResponseError>;
63
+ mutate: (variables: Variables<TMeta, T>) => ResponseError | T;
64
+ mutateAsync: (
65
+ variables: Variables<TMeta, T>,
66
+ rest?: Pick<
67
+ UseMutationQueryProps<T, TMeta>,
68
+ 'onError' | 'onMutate' | 'onSettled' | 'onSuccess'
69
+ >
70
+ ) => Promise<ResponseError | T>;
71
+ };
41
72
 
42
73
  const useMutationQuery = <T extends object, TMeta>({
43
74
  getEndpoint,
@@ -49,19 +80,24 @@ const useMutationQuery = <T extends object, TMeta>({
49
80
  method,
50
81
  onMutate,
51
82
  onError,
52
- onSuccess
53
- }: UseMutationQueryProps<T, TMeta>): UseMutationQueryState<T> => {
83
+ onSuccess,
84
+ onSettled,
85
+ baseEndpoint
86
+ }: UseMutationQueryProps<T, TMeta>): UseMutationQueryState<T, TMeta> => {
54
87
  const { showErrorMessage } = useSnackbar();
55
88
 
56
89
  const queryData = useMutation<
57
90
  T | ResponseError,
58
91
  ResponseError,
59
- T & { _meta: TMeta }
60
- >(
61
- (_payload: T & { _meta: TMeta }): Promise<T | ResponseError> => {
62
- const { _meta, ...payload } = _payload || {};
92
+ Variables<TMeta, T>
93
+ >({
94
+ mutationFn: (
95
+ variables: Variables<TMeta, T>
96
+ ): Promise<T | ResponseError> => {
97
+ const { _meta, payload } = variables || {};
63
98
 
64
99
  return customFetch<T>({
100
+ baseEndpoint,
65
101
  catchError,
66
102
  decoder,
67
103
  defaultFailureMessage,
@@ -75,12 +111,18 @@ const useMutationQuery = <T extends object, TMeta>({
75
111
  payload
76
112
  });
77
113
  },
78
- {
79
- onError,
80
- onMutate,
81
- onSuccess
114
+ onError,
115
+ onMutate,
116
+ onSettled,
117
+ onSuccess: (data, variables, context) => {
118
+ if (data?.isError) {
119
+ onError?.(data, variables, context);
120
+
121
+ return;
122
+ }
123
+ onSuccess?.(data, variables, context);
82
124
  }
83
- );
125
+ });
84
126
 
85
127
  const manageError = (): void => {
86
128
  const data = queryData.data as ResponseError | undefined;
@@ -97,14 +139,17 @@ const useMutationQuery = <T extends object, TMeta>({
97
139
  }
98
140
  };
99
141
 
100
- useEffect(() => {
101
- manageError();
102
- }, useDeepCompare([queryData.data]));
142
+ useEffect(
143
+ () => {
144
+ manageError();
145
+ },
146
+ useDeepCompare([queryData.data])
147
+ );
103
148
 
104
149
  return {
105
- ...queryData,
150
+ ...omit(['isError'], queryData),
106
151
  isError: (queryData.data as ResponseError | undefined)?.isError || false,
107
- isMutating: queryData.isLoading
152
+ isMutating: queryData.isPending
108
153
  };
109
154
  };
110
155
 
@@ -1,6 +1,9 @@
1
1
  import React, { ReactElement, ReactNode } from 'react';
2
2
 
3
- import { IconButton as MuiIconButton } from '@mui/material';
3
+ import {
4
+ IconButton as MuiIconButton,
5
+ IconButtonProps as MuiIconButtonProps
6
+ } from '@mui/material';
4
7
 
5
8
  import { AriaLabelingAttributes } from '../../../@types/aria-attributes';
6
9
  import { DataTestAttributes } from '../../../@types/data-attributes';
@@ -23,7 +26,8 @@ type IconButtonProps = {
23
26
  size?: 'small' | 'medium' | 'large';
24
27
  variant?: 'primary' | 'secondary' | 'ghost';
25
28
  } & AriaLabelingAttributes &
26
- DataTestAttributes;
29
+ DataTestAttributes &
30
+ MuiIconButtonProps;
27
31
 
28
32
  /**
29
33
  * @todo re-factor as `iconVariant: 'icon-only'` Button variant, and remove IconButton component (reason: code duplication)