@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
@@ -1,6 +1,9 @@
1
1
  import { equals } from 'ramda';
2
2
 
3
- import { alpha, PaletteOptions } from '@mui/material';
3
+ import {
4
+ type PaletteOptions as PaletteOptionsModel,
5
+ alpha
6
+ } from '@mui/material';
4
7
 
5
8
  import { ThemeMode } from '@centreon/ui-context';
6
9
 
@@ -140,10 +143,10 @@ declare module '@mui/material/Badge' {
140
143
  }
141
144
  }
142
145
 
143
- export const lightPalette: PaletteOptions = {
146
+ export const lightPalette: PaletteOptionsModel = {
144
147
  action: {
145
- acknowledged: '#67532C',
146
- acknowledgedBackground: '#F5F1E9',
148
+ acknowledged: '#745F35',
149
+ acknowledgedBackground: '#DFD2B9',
147
150
  activatedOpacity: 0.12,
148
151
  active: '#666666',
149
152
  disabled: '#999999',
@@ -152,8 +155,8 @@ export const lightPalette: PaletteOptions = {
152
155
  focusOpacity: 0.12,
153
156
  hover: 'rgba(0, 0, 0, 0.06)',
154
157
  hoverOpacity: 0.06,
155
- inDowntime: '#4B2352',
156
- inDowntimeBackground: '#F0E9F8',
158
+ inDowntime: '#512980',
159
+ inDowntimeBackground: '#E5D8F3',
157
160
  selected: 'rgba(102, 102, 102, 0.3)',
158
161
  selectedOpacity: 0.3
159
162
  },
@@ -280,10 +283,10 @@ export const lightPalette: PaletteOptions = {
280
283
  }
281
284
  };
282
285
 
283
- export const darkPalette: PaletteOptions = {
286
+ export const darkPalette: PaletteOptionsModel = {
284
287
  action: {
285
- acknowledged: '#67532C',
286
- acknowledgedBackground: '#67532C',
288
+ acknowledged: '#DFD2B9',
289
+ acknowledgedBackground: '#745F35',
287
290
  activatedOpacity: 0.3,
288
291
  active: '#B5B5B5',
289
292
  disabled: '#999999',
@@ -292,8 +295,8 @@ export const darkPalette: PaletteOptions = {
292
295
  focusOpacity: 0.3,
293
296
  hover: 'rgba(255, 255, 255, 0.16)',
294
297
  hoverOpacity: 0.16,
295
- inDowntime: '#4B2352',
296
- inDowntimeBackground: '#4B2352',
298
+ inDowntime: '#E5D8F3',
299
+ inDowntimeBackground: '#512980',
297
300
  selected: 'rgba(255, 255, 255, 0.5)',
298
301
  selectedOpacity: 0.5
299
302
  },
@@ -418,5 +421,5 @@ export const darkPalette: PaletteOptions = {
418
421
  }
419
422
  };
420
423
 
421
- export const getPalette = (mode: ThemeMode): PaletteOptions =>
424
+ export const getPalette = (mode: ThemeMode): PaletteOptionsModel =>
422
425
  equals(mode, ThemeMode.dark) ? darkPalette : lightPalette;
@@ -12,22 +12,21 @@ const useStyles = makeStyles()((theme) => ({
12
12
  },
13
13
  containerDates: {
14
14
  display: 'flex',
15
- gap: theme.spacing(0.5),
16
15
  [theme.breakpoints.down('sm')]: {
17
- columnGap: theme.spacing(0.5),
18
- flexDirection: 'column'
16
+ flexDirection: 'column',
17
+ gap: theme.spacing(0.5)
19
18
  }
20
19
  },
21
20
  date: {
22
- minWidth: theme.spacing(12.5),
21
+ minWidth: theme.spacing(12),
23
22
  textAlign: 'start'
24
23
  },
25
24
  error: {
26
25
  textAlign: 'center'
27
26
  },
28
27
  label: {
29
- minWidth: theme.spacing(3),
30
- textAlign: 'start'
28
+ minWidth: theme.spacing(3.5),
29
+ textAlign: 'end'
31
30
  },
32
31
 
33
32
  picker: {
@@ -39,7 +38,7 @@ const useStyles = makeStyles()((theme) => ({
39
38
  },
40
39
  timeContainer: {
41
40
  alignItems: 'center',
42
- columnGap: theme.spacing(1),
41
+ columnGap: theme.spacing(0.5),
43
42
  display: 'flex',
44
43
  flexDirection: 'row',
45
44
  [theme.breakpoints.down('sm')]: {
@@ -2,24 +2,29 @@ import { useAtomValue } from 'jotai';
2
2
  import { makeStyles } from 'tss-react/mui';
3
3
  import { equals } from 'ramda';
4
4
  import { useTranslation } from 'react-i18next';
5
+ import dayjs from 'dayjs';
6
+ import utc from 'dayjs/plugin/utc';
7
+ import timezone from 'dayjs/plugin/timezone';
5
8
 
9
+ import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
6
10
  import { Typography } from '@mui/material';
7
11
  import { LocalizationProvider } from '@mui/x-date-pickers';
8
12
 
9
- import { userAtom } from '@centreon/ui-context';
10
- import { useDateTimePickerAdapter } from '@centreon/ui';
11
-
12
13
  import DateTimePickerInput from '../../DateTimePickerInput';
13
14
  import {
14
15
  CustomTimePeriodProperty,
15
16
  DateTimePickerInputModel
16
17
  } from '../../models';
17
18
  import { errorTimePeriodAtom } from '../../timePeriodsAtoms';
19
+ import { useLocale } from '../../../utils';
18
20
 
19
21
  import ErrorText from './ErrorText';
20
22
  import { PickersData, PickersStartEndDateDirection } from './models';
21
23
  import { PickersStartEndDateModel } from './usePickersStartEndDate';
22
24
 
25
+ dayjs.extend(utc);
26
+ dayjs.extend(timezone);
27
+
23
28
  const useStyles = makeStyles()((theme) => ({
24
29
  error: {
25
30
  textAlign: 'center'
@@ -104,9 +109,8 @@ const PickersStartEndDate = ({
104
109
  direction = PickersStartEndDateDirection.column
105
110
  }: Props): JSX.Element => {
106
111
  const { classes, cx } = useStyles();
107
- const { Adapter } = useDateTimePickerAdapter();
108
112
 
109
- const { locale } = useAtomValue(userAtom);
113
+ const locale = useLocale();
110
114
  const error = useAtomValue(errorTimePeriodAtom);
111
115
 
112
116
  const maxStart = rangeStartDate?.max || endDate;
@@ -126,7 +130,7 @@ const PickersStartEndDate = ({
126
130
  return (
127
131
  <LocalizationProvider
128
132
  adapterLocale={locale.substring(0, 2)}
129
- dateAdapter={Adapter}
133
+ dateAdapter={AdapterDayjs}
130
134
  >
131
135
  <div className={styleContainer}>
132
136
  <PickerDateWithLabel
@@ -18,8 +18,6 @@ export interface PickersData {
18
18
  getError?: (value: boolean) => void;
19
19
  isDisabledEndPicker?: boolean;
20
20
  isDisabledStartPicker?: boolean;
21
- onCloseEndPicker?: (isClosed: boolean) => void;
22
- onCloseStartPicker?: (isClosed: boolean) => void;
23
21
  rangeEndDate?: RangeDate;
24
22
  rangeStartDate?: RangeDate;
25
23
  }
@@ -1,48 +1,88 @@
1
- import dayjs from 'dayjs';
1
+ import { useCallback } from 'react';
2
2
 
3
- import { DateTimePicker } from '@mui/x-date-pickers';
3
+ import dayjs, { Dayjs } from 'dayjs';
4
+ import { useAtomValue } from 'jotai';
5
+ import { equals } from 'ramda';
4
6
 
5
- import { useDateTimePickerAdapter } from '@centreon/ui';
7
+ import {
8
+ DateTimePicker,
9
+ DateTimePickerProps,
10
+ LocalizationProvider
11
+ } from '@mui/x-date-pickers';
12
+ import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
13
+
14
+ import { userAtom } from '@centreon/ui-context';
15
+
16
+ import { useLocale } from '../utils';
6
17
 
7
18
  import { CustomTimePeriodProperty } from './models';
8
19
 
20
+ interface ChangeDateProps {
21
+ date: Date;
22
+ property: CustomTimePeriodProperty | string;
23
+ }
24
+
9
25
  interface Props {
10
- changeDate: (props) => void;
26
+ changeDate: (props: ChangeDateProps) => void;
11
27
  date: Date | null;
12
28
  desktopMediaQuery?: string;
13
29
  disabled?: boolean;
14
30
  maxDate?: Date;
15
31
  minDate?: Date;
16
- property: CustomTimePeriodProperty;
32
+ minDateTime?: Date;
33
+ property: CustomTimePeriodProperty | string;
17
34
  }
18
35
 
19
36
  const DateTimePickerInput = ({
20
37
  date,
21
38
  maxDate,
22
39
  minDate,
40
+ minDateTime,
23
41
  property,
24
42
  changeDate,
25
43
  disabled = false,
26
- desktopMediaQuery
27
- }: Props): JSX.Element => {
28
- const { desktopPickerMediaQuery } = useDateTimePickerAdapter();
44
+ desktopMediaQuery,
45
+ ...rest
46
+ }: Props & DateTimePickerProps<dayjs.Dayjs>): JSX.Element => {
47
+ const desktopPickerMediaQuery =
48
+ '@media (min-width: 1024px) or (pointer: fine)';
49
+
50
+ const { timezone, locale } = useAtomValue(userAtom);
51
+ const localeToUse = useLocale();
52
+
53
+ const isUTC = equals(timezone, 'UTC');
29
54
 
30
55
  const changeTime = (newValue: dayjs.Dayjs | null): void => {
31
56
  changeDate({ date: dayjs(newValue).toDate(), property });
32
57
  };
33
58
 
59
+ const formatDate = useCallback(
60
+ (currentDate: Date | null): Dayjs => {
61
+ return isUTC ? dayjs.utc(currentDate) : dayjs.tz(currentDate, timezone);
62
+ },
63
+ [isUTC, timezone]
64
+ );
65
+
34
66
  return (
35
- <DateTimePicker<dayjs.Dayjs>
36
- dayOfWeekFormatter={(day: string): string =>
37
- day.substring(0, 2).toUpperCase()
38
- }
39
- desktopModeMediaQuery={desktopMediaQuery ?? desktopPickerMediaQuery}
40
- disabled={disabled}
41
- maxDate={maxDate && dayjs(maxDate)}
42
- minDate={minDate && dayjs(minDate)}
43
- value={dayjs(date)}
44
- onChange={changeTime}
45
- />
67
+ <LocalizationProvider
68
+ adapterLocale={(locale ?? localeToUse).substring(0, 2)}
69
+ dateAdapter={AdapterDayjs}
70
+ dateLibInstance={dayjs}
71
+ >
72
+ <DateTimePicker<dayjs.Dayjs>
73
+ dayOfWeekFormatter={(dayOfWeek) =>
74
+ dayOfWeek.substring(0, 2).toLocaleUpperCase()
75
+ }
76
+ desktopModeMediaQuery={desktopMediaQuery ?? desktopPickerMediaQuery}
77
+ disabled={disabled}
78
+ maxDate={maxDate && formatDate(maxDate)}
79
+ minDate={minDate && formatDate(minDate)}
80
+ minDateTime={minDateTime && formatDate(minDateTime)}
81
+ value={formatDate(date)}
82
+ onChange={changeTime}
83
+ {...rest}
84
+ />
85
+ </LocalizationProvider>
46
86
  );
47
87
  };
48
88
 
@@ -1,5 +1,5 @@
1
1
  import dayjs from 'dayjs';
2
- import 'dayjs/locale/fr';
2
+ import 'dayjs/locale/en';
3
3
  import localizedFormatPlugin from 'dayjs/plugin/localizedFormat';
4
4
  import timezonePlugin from 'dayjs/plugin/timezone';
5
5
  import utcPlugin from 'dayjs/plugin/utc';
@@ -19,18 +19,18 @@ dayjs.extend(localizedFormatPlugin);
19
19
 
20
20
  const data = [
21
21
  {
22
- locale: 'fr_FR',
23
- resolution: { height: 720, width: 500 },
22
+ locale: 'en_US',
23
+ resolution: { height: 590, width: 500 },
24
24
  timezone: 'Europe/Paris'
25
25
  },
26
26
  {
27
- locale: 'fr_FR',
28
- resolution: { height: 720, width: 200 },
27
+ locale: 'en_US',
28
+ resolution: { height: 590, width: 200 },
29
29
  timezone: 'Europe/Paris'
30
30
  },
31
31
  {
32
- locale: 'fr_FR',
33
- resolution: { height: 720, width: 1024 },
32
+ locale: 'en_US',
33
+ resolution: { height: 590, width: 1024 },
34
34
  timezone: 'Europe/Paris'
35
35
  }
36
36
  ];
@@ -45,7 +45,7 @@ data.forEach((item) =>
45
45
 
46
46
  store.set(userAtom, {
47
47
  ...retrievedUser,
48
- locale: 'fr_FR',
48
+ locale: 'en_US',
49
49
  timezone: 'Europe/Paris'
50
50
  });
51
51
 
@@ -59,7 +59,10 @@ data.forEach((item) =>
59
59
  });
60
60
 
61
61
  it(`displays correctly the dates design when screen resolution is ${width}px`, () => {
62
- cy.makeSnapshot(`${width}px`);
62
+ cy.makeSnapshotWithCustomResolution({
63
+ resolution: { height, width },
64
+ title: `${width}px`
65
+ });
63
66
  });
64
67
  })
65
68
  );
@@ -3,15 +3,10 @@ import localizedFormatPlugin from 'dayjs/plugin/localizedFormat';
3
3
  import timezonePlugin from 'dayjs/plugin/timezone';
4
4
  import utcPlugin from 'dayjs/plugin/utc';
5
5
  import { Provider, createStore } from 'jotai';
6
- import { equals, inc } from 'ramda';
6
+ import { equals } from 'ramda';
7
7
  import { renderHook } from '@testing-library/react';
8
8
 
9
- import { LocalizationProvider } from '@mui/x-date-pickers';
10
-
11
- import {
12
- useLocaleDateTimeFormat,
13
- useDateTimePickerAdapter
14
- } from '@centreon/ui';
9
+ import { useLocaleDateTimeFormat } from '@centreon/ui';
15
10
  import { ListingVariant, userAtom } from '@centreon/ui-context';
16
11
 
17
12
  import { CustomTimePeriodProperty } from './models';
@@ -297,10 +292,6 @@ testData.forEach((item) =>
297
292
  beforeEach(() => {
298
293
  cy.viewport('macbook-13');
299
294
 
300
- const { result } = renderHook(() => useDateTimePickerAdapter());
301
-
302
- const { Adapter } = result.current;
303
-
304
295
  const store = createStore();
305
296
  store.set(userAtom, {
306
297
  ...retrievedUser,
@@ -311,31 +302,16 @@ testData.forEach((item) =>
311
302
  cy.mount({
312
303
  Component: (
313
304
  <Provider store={store}>
314
- <LocalizationProvider adapterLocale="en" dateAdapter={Adapter}>
315
- <DateTimePickerInput
316
- changeDate={cy.stub()}
317
- date={new Date(item.initialDate)}
318
- desktopMediaQuery="@media (min-width: 1024px)"
319
- property={CustomTimePeriodProperty.start}
320
- />
321
- </LocalizationProvider>
305
+ <DateTimePickerInput
306
+ changeDate={cy.stub()}
307
+ date={new Date(item.initialDate)}
308
+ property={CustomTimePeriodProperty.start}
309
+ />
322
310
  </Provider>
323
311
  )
324
312
  });
325
313
  });
326
314
 
327
- it('checks input calendar value contains correct date', () => {
328
- const { result } = renderHook(() => useLocaleDateTimeFormat());
329
- const { format } = result.current;
330
-
331
- const dateInput = format({
332
- date: dayjs(item.initialDate).tz(item.timezone),
333
- formatString: 'L hh:mm A'
334
- });
335
-
336
- cy.get('input').should('have.value', dateInput);
337
- });
338
-
339
315
  it(`displays the correct number of days for the current month when the ${item.button} button is clicked`, () => {
340
316
  cy.get('button').click();
341
317
  item.data.forEach((element) => {
@@ -389,7 +365,7 @@ testData.forEach((item) =>
389
365
 
390
366
  cy.get('[role="rowgroup"]').children().as('listWeeks');
391
367
 
392
- cy.get('@listWeeks').should('have.length', inc(numberWeeks));
368
+ cy.get('@listWeeks').should('have.length', numberWeeks);
393
369
  cy.get('@listWeeks').eq(0).as('firstWeek');
394
370
  cy.get('@firstWeek').children().as('listDaysInFirstWeek');
395
371
 
@@ -416,7 +392,7 @@ testData.forEach((item) =>
416
392
 
417
393
  cy.get('[role="rowgroup"]').children().as('listWeeks');
418
394
 
419
- cy.get('@listWeeks').should('have.length', inc(numberWeeks));
395
+ cy.get('@listWeeks').should('have.length', numberWeeks);
420
396
 
421
397
  cy.get('@listWeeks')
422
398
  .eq(numberWeeks - 1)
@@ -23,4 +23,4 @@ export const getTimePeriodById = ({
23
23
  id,
24
24
  timePeriods
25
25
  }: TimePeriodById): TimePeriod =>
26
- find<TimePeriod>(propEq('id', id))(timePeriods) as TimePeriod;
26
+ find<TimePeriod>(propEq(id, 'id'))(timePeriods) as TimePeriod;
@@ -88,20 +88,27 @@ const args = {
88
88
  ]
89
89
  };
90
90
 
91
+ const parameters = {
92
+ chromatic: { diffThreshold: 0.1 }
93
+ };
94
+
91
95
  export const BasicTimePeriod: Story = {
92
96
  ...Template,
93
- argTypes
97
+ argTypes,
98
+ parameters
94
99
  };
95
100
 
96
101
  export const WithExtraTimePeriods: Story = {
97
102
  ...Template,
98
103
  argTypes,
99
- args
104
+ args,
105
+ parameters
100
106
  };
101
107
 
102
108
  export const WithExternalComponent: Story = {
103
109
  ...TemplateWithExternalComponent,
104
- argTypes
110
+ argTypes,
111
+ parameters
105
112
  };
106
113
 
107
114
  export const SimpleTimePeriod: StorySimpleTimePeriod = {
@@ -109,5 +116,6 @@ export const SimpleTimePeriod: StorySimpleTimePeriod = {
109
116
  args: {
110
117
  endDate: dayjs(Date.now()).toDate(),
111
118
  startDate: dayjs(Date.now()).subtract(29, 'day').toDate()
112
- }
119
+ },
120
+ parameters
113
121
  };
@@ -20,7 +20,7 @@ import { useStyles } from './TimePeriods.styles';
20
20
  import {
21
21
  CustomTimePeriod as CustomTimePeriodModel,
22
22
  EndStartInterval,
23
- TimePeriod
23
+ TimePeriod as TimePeriodModel
24
24
  } from './models';
25
25
  import useTimePeriod from './useTimePeriod';
26
26
 
@@ -34,7 +34,7 @@ interface Parameters extends EndStartInterval {
34
34
  export interface Props {
35
35
  adjustTimePeriodData?: Omit<CustomTimePeriodModel, 'timelineEventsLimit'>;
36
36
  disabled?: boolean;
37
- extraTimePeriods?: Array<Omit<TimePeriod, 'timelineEventsLimit'>>;
37
+ extraTimePeriods?: Array<Omit<TimePeriodModel, 'timelineEventsLimit'>>;
38
38
  getIsError?: (value: boolean) => void;
39
39
  getParameters?: ({ start, end, timelineEventsLimit }: Parameters) => void;
40
40
  renderExternalComponent?: ReactNode;
@@ -7,6 +7,8 @@ import ExpandLessIcon from '@mui/icons-material/ExpandLess';
7
7
  import { Badge, ClickAwayListener } from '@mui/material';
8
8
  import type { SvgIcon } from '@mui/material';
9
9
 
10
+ import useCloseOnLegacyPage from './useCloseOnLegacyPage';
11
+
10
12
  const useStyles = makeStyles()((theme) => ({
11
13
  button: {
12
14
  '& > svg': {
@@ -115,6 +117,7 @@ const TopCounterLayout = ({
115
117
  const [toggled, setToggled] = useState(false);
116
118
 
117
119
  const subMenuId = title.replace(/[^A-Za-z]/, '-');
120
+ useCloseOnLegacyPage({ setToggled });
118
121
 
119
122
  useEffect(() => {
120
123
  const closeMenu = (): void => setToggled(false);
@@ -0,0 +1,42 @@
1
+ import { Dispatch, SetStateAction, useEffect } from 'react';
2
+
3
+ import { isNil } from 'ramda';
4
+ import { useLocation } from 'react-router-dom';
5
+
6
+ interface Props {
7
+ setToggled: Dispatch<SetStateAction<boolean>>;
8
+ }
9
+ const useCloseOnLegacyPage = ({ setToggled }: Props): void => {
10
+ const { pathname, search } = useLocation();
11
+ const isLegacyRoute = pathname.includes('main.php');
12
+
13
+ const closeSubMenu = (): void => {
14
+ setToggled(false);
15
+ };
16
+
17
+ useEffect(() => {
18
+ const iframe = document.getElementById(
19
+ 'main-content'
20
+ ) as HTMLIFrameElement | null;
21
+
22
+ if (!isLegacyRoute || isNil(iframe)) {
23
+ return () => undefined;
24
+ }
25
+
26
+ const closeSubMenuOnLegacyPage = (): void => {
27
+ iframe?.contentWindow?.document?.addEventListener('click', closeSubMenu);
28
+ };
29
+
30
+ iframe?.addEventListener('load', closeSubMenuOnLegacyPage);
31
+
32
+ return () => {
33
+ iframe?.removeEventListener('load', closeSubMenuOnLegacyPage);
34
+ iframe?.contentWindow?.document?.removeEventListener(
35
+ 'click',
36
+ closeSubMenu
37
+ );
38
+ };
39
+ }, [pathname, search]);
40
+ };
41
+
42
+ export default useCloseOnLegacyPage;
@@ -0,0 +1,27 @@
1
+ import FluidTypography from '.';
2
+
3
+ const initialize = ({ width, min, max, pref }): void => {
4
+ cy.viewport(width, 590);
5
+
6
+ cy.mount({
7
+ Component: (
8
+ <FluidTypography max={max} min={min} pref={pref} text="Unreachable" />
9
+ )
10
+ });
11
+ };
12
+
13
+ describe('FluidTypography', () => {
14
+ [500, 300, 150].forEach((width) => {
15
+ Object.entries({ max: '80px', min: '30px', pref: 10 }).forEach(
16
+ ([key, value]) => {
17
+ it(`displays the text when the viewport is ${width}px and the ${key} is ${value}`, () => {
18
+ initialize({ [key]: value, width });
19
+
20
+ cy.contains('Unreachable').should('be.visible');
21
+
22
+ cy.matchImageSnapshot();
23
+ });
24
+ }
25
+ );
26
+ });
27
+ });
@@ -40,9 +40,9 @@ basic.args = {
40
40
 
41
41
  export const with200pxWidth = FluidTypographyTemplate.bind({});
42
42
  with200pxWidth.args = {
43
- height: '200px',
43
+ height: '50%',
44
44
  text: 'Hello world',
45
- width: '200px'
45
+ width: '50%'
46
46
  };
47
47
 
48
48
  export const with20pxHeight = FluidTypographyTemplate.bind({});
@@ -1,49 +1,42 @@
1
- import { useRef } from 'react';
2
-
3
1
  import { Typography, TypographyProps } from '@mui/material';
4
2
 
5
- import useFluidResizeObserver from './useFluidResizeObserver';
6
-
7
3
  type CustomTypographyProps = Pick<TypographyProps, 'variant'>;
8
4
  export interface FluidTypographyProps extends CustomTypographyProps {
9
5
  className?: string;
6
+ containerClassName?: string;
7
+ max?: string;
8
+ min?: string;
9
+ pref?: number;
10
10
  text: string;
11
11
  }
12
12
 
13
13
  const FluidTypography = ({
14
14
  text,
15
15
  variant = 'body1',
16
- className
16
+ className,
17
+ containerClassName,
18
+ min = '10px',
19
+ max = '1000px',
20
+ pref = 19
17
21
  }: FluidTypographyProps): JSX.Element => {
18
- const containerRef = useRef<HTMLElement>();
19
- const parentRef = useRef<HTMLElement>();
20
-
21
- const size = useFluidResizeObserver({ ref: containerRef });
22
- const parentSize = useFluidResizeObserver({ isParent: true, ref: parentRef });
23
-
24
22
  return (
25
23
  <div
26
- ref={parentRef}
24
+ className={containerClassName}
27
25
  style={{
28
- height: `${parentSize.height}px`,
26
+ containerType: 'inline-size',
27
+ height: `100%`,
29
28
  width: `100%`
30
29
  }}
31
30
  >
32
- <div ref={containerRef} style={{ height: '100%', width: '100%' }}>
33
- <Typography
34
- className={className}
35
- sx={{
36
- fontSize: `clamp(10px, min(${Math.floor(
37
- size.width / 6
38
- )}px, ${Math.floor(size.height / 6)}px), min(${size.width}px, ${
39
- size.height
40
- }px))`
41
- }}
42
- variant={variant}
43
- >
44
- {text}
45
- </Typography>
46
- </div>
31
+ <Typography
32
+ className={className}
33
+ sx={{
34
+ fontSize: `clamp(${min}, ${pref}cqi, ${max})`
35
+ }}
36
+ variant={variant}
37
+ >
38
+ {text}
39
+ </Typography>
47
40
  </div>
48
41
  );
49
42
  };