@centreon/ui 23.10.121 → 24.4.1-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 (365) hide show
  1. package/package.json +59 -41
  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 +139 -0
  42. package/src/Graph/BarStack/BarStack.stories.tsx +123 -0
  43. package/src/Graph/BarStack/BarStack.styles.ts +37 -0
  44. package/src/Graph/BarStack/BarStack.tsx +14 -0
  45. package/src/Graph/BarStack/ResponsiveBarStack.tsx +211 -0
  46. package/src/Graph/BarStack/index.ts +1 -0
  47. package/src/Graph/BarStack/models.ts +20 -0
  48. package/src/Graph/BarStack/useResponsiveBarStack.ts +131 -0
  49. package/src/Graph/Gauge/Gauge.cypress.spec.tsx +102 -0
  50. package/src/Graph/Gauge/Gauge.tsx +1 -1
  51. package/src/Graph/HeatMap/HeatMap.cypress.spec.tsx +145 -0
  52. package/src/Graph/HeatMap/HeatMap.stories.tsx +0 -25
  53. package/src/Graph/HeatMap/HeatMap.styles.tsx +1 -0
  54. package/src/Graph/HeatMap/ResponsiveHeatMap.tsx +20 -10
  55. package/src/Graph/HeatMap/model.ts +1 -0
  56. package/src/Graph/Legend/Legend.tsx +21 -0
  57. package/src/Graph/Legend/index.ts +1 -0
  58. package/src/Graph/Legend/models.ts +11 -0
  59. package/src/Graph/LineChart/BasicComponents/Lines/RegularLines/index.tsx +2 -1
  60. package/src/Graph/LineChart/BasicComponents/Lines/StackedLines/index.tsx +3 -4
  61. package/src/Graph/LineChart/BasicComponents/Lines/Threshold/Circle.tsx +2 -2
  62. package/src/Graph/LineChart/BasicComponents/ThresholdLine.tsx +3 -1
  63. package/src/Graph/LineChart/BasicComponents/Thresholds.tsx +2 -2
  64. package/src/Graph/LineChart/BasicComponents/useFilterLines.ts +3 -5
  65. package/src/Graph/LineChart/Header/index.tsx +3 -31
  66. package/src/Graph/LineChart/Icons/Downtime.tsx +3 -3
  67. package/src/Graph/LineChart/InteractiveComponents/AnchorPoint/GuidingLines.tsx +2 -2
  68. package/src/Graph/LineChart/InteractiveComponents/AnchorPoint/useTickGraph.ts +9 -11
  69. package/src/Graph/LineChart/InteractiveComponents/Annotations/EventAnnotations.tsx +1 -1
  70. package/src/Graph/LineChart/InteractiveComponents/GraphValueTooltip/GraphValueTooltip.tsx +68 -0
  71. package/src/Graph/LineChart/InteractiveComponents/GraphValueTooltip/useGraphValueTooltip.ts +27 -0
  72. package/src/Graph/LineChart/InteractiveComponents/GraphValueTooltip/useGraphValueTooltipStyles.ts +31 -0
  73. package/src/Graph/LineChart/InteractiveComponents/ZoomPreview/index.tsx +2 -1
  74. package/src/Graph/LineChart/InteractiveComponents/index.tsx +132 -17
  75. package/src/Graph/LineChart/InteractiveComponents/interactionWithGraphAtoms.ts +7 -27
  76. package/src/Graph/LineChart/Legend/Legend.styles.ts +75 -33
  77. package/src/Graph/LineChart/Legend/LegendContent.tsx +12 -6
  78. package/src/Graph/LineChart/Legend/LegendHeader.tsx +66 -27
  79. package/src/Graph/LineChart/Legend/index.tsx +35 -45
  80. package/src/Graph/LineChart/Legend/models.ts +5 -0
  81. package/src/Graph/LineChart/Legend/useLegend.ts +12 -13
  82. package/src/Graph/LineChart/LineChart.cypress.spec.tsx +144 -0
  83. package/src/Graph/LineChart/LineChart.styles.ts +8 -0
  84. package/src/Graph/LineChart/LineChart.tsx +118 -117
  85. package/src/Graph/LineChart/LoadingSkeleton.tsx +2 -2
  86. package/src/Graph/LineChart/helpers/doc.ts +16 -13
  87. package/src/Graph/LineChart/helpers/index.ts +1 -1
  88. package/src/Graph/LineChart/index.stories.tsx +17 -2
  89. package/src/Graph/LineChart/index.tsx +6 -7
  90. package/src/Graph/LineChart/mockedData/curvesWithSameColor.json +252 -0
  91. package/src/Graph/LineChart/mockedData/lastDayWithIncompleteValues.json +1320 -0
  92. package/src/Graph/LineChart/mockedData/lastDayWithNullValues.json +1314 -0
  93. package/src/Graph/LineChart/models.ts +12 -1
  94. package/src/Graph/LineChart/useLineChartData.ts +57 -18
  95. package/src/Graph/PieChart/PieChart.cypress.spec.tsx +154 -0
  96. package/src/Graph/PieChart/PieChart.stories.tsx +194 -0
  97. package/src/Graph/PieChart/PieChart.styles.ts +39 -0
  98. package/src/Graph/PieChart/PieChart.tsx +14 -0
  99. package/src/Graph/PieChart/ResponsivePie.tsx +245 -0
  100. package/src/Graph/PieChart/index.ts +1 -0
  101. package/src/Graph/PieChart/models.ts +20 -0
  102. package/src/Graph/PieChart/useResponsivePie.ts +81 -0
  103. package/src/Graph/SingleBar/SingleBar.cypress.spec.tsx +121 -0
  104. package/src/Graph/SingleBar/Thresholds.tsx +2 -2
  105. package/src/Graph/Text/Text.cypress.spec.tsx +101 -0
  106. package/src/Graph/Text/Text.stories.tsx +60 -4
  107. package/src/Graph/Text/Text.styles.ts +12 -1
  108. package/src/Graph/Text/Text.tsx +17 -12
  109. package/src/Graph/Tree/DescendantNodes.tsx +88 -0
  110. package/src/Graph/Tree/Links.tsx +64 -0
  111. package/src/Graph/Tree/StandaloneTree.tsx +32 -0
  112. package/src/Graph/Tree/Tree.cypress.spec.tsx +171 -0
  113. package/src/Graph/Tree/Tree.stories.tsx +144 -0
  114. package/src/Graph/Tree/Tree.tsx +116 -0
  115. package/src/Graph/Tree/constants.ts +2 -0
  116. package/src/Graph/Tree/index.ts +4 -0
  117. package/src/Graph/Tree/models.ts +52 -0
  118. package/src/Graph/Tree/stories/contents.tsx +164 -0
  119. package/src/Graph/Tree/stories/datas.ts +305 -0
  120. package/src/Graph/Tree/utils.ts +49 -0
  121. package/src/Graph/common/testUtils.ts +71 -0
  122. package/src/Graph/common/timeSeries/index.ts +53 -15
  123. package/src/Graph/common/utils.ts +68 -1
  124. package/src/Graph/index.ts +4 -0
  125. package/src/Icon/BaseIcon.tsx +32 -0
  126. package/src/Icon/DowntimeIcon.tsx +14 -0
  127. package/src/InputField/Number/Number.cypress.spec.tsx +85 -0
  128. package/src/InputField/Number/Number.stories.tsx +66 -0
  129. package/src/InputField/Number/Number.tsx +74 -0
  130. package/src/InputField/Search/index.tsx +2 -2
  131. package/src/InputField/Select/Autocomplete/Connected/Multi/index.test.tsx +1 -0
  132. package/src/InputField/Select/Autocomplete/Connected/index.test.tsx +1 -0
  133. package/src/InputField/Select/Autocomplete/Connected/index.tsx +25 -10
  134. package/src/InputField/Select/Autocomplete/Draggable/SortableList.tsx +1 -1
  135. package/src/InputField/Select/Autocomplete/Draggable/SortableListContent.tsx +1 -1
  136. package/src/InputField/Select/Autocomplete/Draggable/index.tsx +1 -1
  137. package/src/InputField/Select/Autocomplete/Multi/index.tsx +4 -2
  138. package/src/InputField/Select/Autocomplete/index.tsx +129 -116
  139. package/src/InputField/Select/IconPopover/index.tsx +3 -3
  140. package/src/InputField/Select/index.tsx +15 -2
  141. package/src/InputField/Text/index.tsx +46 -41
  142. package/src/Listing/ActionBar/index.tsx +11 -10
  143. package/src/Listing/Cell/DataCell.styles.ts +3 -0
  144. package/src/Listing/Cell/DataCell.tsx +23 -5
  145. package/src/Listing/Header/ListingHeader.tsx +1 -1
  146. package/src/Listing/Listing.cypress.spec.tsx +218 -33
  147. package/src/Listing/Listing.styles.ts +4 -7
  148. package/src/Listing/Row/Row.tsx +7 -3
  149. package/src/Listing/index.stories.tsx +39 -5
  150. package/src/Listing/index.test.tsx +1 -1
  151. package/src/Listing/index.tsx +207 -149
  152. package/src/Listing/models.ts +1 -0
  153. package/src/Listing/useStyleTable.ts +1 -0
  154. package/src/Module/LicensedModule/LicenseCheck/index.tsx +24 -9
  155. package/src/Module/LicensedModule/index.tsx +7 -1
  156. package/src/Module/Module.cypress.spec.tsx +129 -0
  157. package/src/Module/index.tsx +2 -4
  158. package/src/Panel/index.tsx +1 -1
  159. package/src/PopoverMenu/index.tsx +9 -8
  160. package/src/RichTextEditor/ContentEditable.tsx +195 -195
  161. package/src/RichTextEditor/RichTextEditor.cypress.spec.tsx +100 -52
  162. package/src/RichTextEditor/RichTextEditor.tsx +21 -4
  163. package/src/RichTextEditor/plugins/ToolbarPlugin/AlignPicker.tsx +21 -20
  164. package/src/RichTextEditor/plugins/ToolbarPlugin/BlockButtons.tsx +35 -77
  165. package/src/RichTextEditor/plugins/ToolbarPlugin/FormatButtons.tsx +29 -83
  166. package/src/RichTextEditor/plugins/ToolbarPlugin/LinkButton.tsx +106 -0
  167. package/src/RichTextEditor/plugins/ToolbarPlugin/ListButton.tsx +155 -0
  168. package/src/RichTextEditor/plugins/ToolbarPlugin/MacrosButton.tsx +23 -39
  169. package/src/RichTextEditor/plugins/ToolbarPlugin/ToolbarPlugin.styles.ts +24 -14
  170. package/src/RichTextEditor/plugins/ToolbarPlugin/UndoRedoButtons.tsx +6 -0
  171. package/src/RichTextEditor/plugins/ToolbarPlugin/index.tsx +5 -10
  172. package/src/RichTextEditor/translatedLabels.ts +3 -0
  173. package/src/SortableItems/index.tsx +2 -7
  174. package/src/StoryBookThemeProvider/index.tsx +35 -36
  175. package/src/ThemeProvider/index.tsx +39 -12
  176. package/src/ThemeProvider/palettes.ts +15 -12
  177. package/src/TimePeriods/CustomTimePeriod/CompactCustomTimePeriod.styles.ts +6 -7
  178. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/PickersStartEndDate.tsx +8 -3
  179. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/models.ts +0 -2
  180. package/src/TimePeriods/DateTimePickerInput.tsx +56 -19
  181. package/src/TimePeriods/ResolutionTimePeriod.cypress.spec.tsx +12 -9
  182. package/src/TimePeriods/TimePeriods.cypress.spec.tsx +9 -33
  183. package/src/TimePeriods/helpers/index.ts +1 -1
  184. package/src/TimePeriods/index.stories.tsx +12 -4
  185. package/src/TimePeriods/index.tsx +2 -2
  186. package/src/TopCounterElements/TopCounterLayout.tsx +3 -0
  187. package/src/TopCounterElements/useCloseOnLegacyPage.tsx +42 -0
  188. package/src/Typography/FluidTypography/FluidTypography.cypress.spec.tsx +27 -0
  189. package/src/Typography/FluidTypography/index.stories.tsx +2 -2
  190. package/src/Typography/FluidTypography/index.tsx +21 -28
  191. package/src/Typography/Subtitle.tsx +55 -0
  192. package/src/api/QueryProvider.tsx +1 -1
  193. package/src/api/TestQueryProvider.tsx +1 -1
  194. package/src/api/buildListingEndpoint/models.ts +2 -1
  195. package/src/api/customFetch.ts +12 -3
  196. package/src/api/index.ts +3 -3
  197. package/src/api/useFetchQuery/index.ts +49 -28
  198. package/src/api/useGraphQuery/index.ts +26 -5
  199. package/src/api/useGraphQuery/models.ts +5 -0
  200. package/src/api/useMutationQuery/index.test.ts +4 -4
  201. package/src/api/useMutationQuery/index.ts +65 -20
  202. package/src/components/Button/Icon/IconButton.tsx +6 -2
  203. package/src/components/CollapsibleItem/CollapsibleItem.cypress.spec.tsx +76 -0
  204. package/src/components/CollapsibleItem/CollapsibleItem.stories.tsx +26 -0
  205. package/src/components/CollapsibleItem/CollapsibleItem.tsx +43 -14
  206. package/src/components/CollapsibleItem/useCollapsibleItemStyles.ts +24 -1
  207. package/src/components/DataTable/DataListing.tsx +6 -0
  208. package/src/components/DataTable/DataTable.cypress.spec.tsx +174 -0
  209. package/src/components/DataTable/DataTable.stories.tsx +40 -0
  210. package/src/components/DataTable/DataTable.styles.ts +3 -0
  211. package/src/components/DataTable/DataTable.tsx +3 -3
  212. package/src/components/DataTable/Item/DataTableItem.styles.ts +7 -2
  213. package/src/components/DataTable/Item/DataTableItem.tsx +4 -60
  214. package/src/components/DataTable/index.ts +3 -1
  215. package/src/components/Form/AccessRights/AccessRights.cypress.spec.tsx +373 -0
  216. package/src/components/Form/AccessRights/AccessRights.stories.tsx +119 -0
  217. package/src/components/Form/AccessRights/AccessRights.styles.ts +10 -0
  218. package/src/components/Form/AccessRights/AccessRights.tsx +60 -0
  219. package/src/components/Form/AccessRights/Actions/Actions.styles.ts +14 -0
  220. package/src/components/Form/AccessRights/Actions/Actions.tsx +81 -0
  221. package/src/components/Form/AccessRights/Actions/useActions.ts +79 -0
  222. package/src/components/Form/AccessRights/List/Item.tsx +90 -0
  223. package/src/components/Form/AccessRights/List/List.styles.tsx +45 -0
  224. package/src/components/Form/AccessRights/List/List.tsx +52 -0
  225. package/src/components/Form/AccessRights/List/ListItemSkeleton.tsx +18 -0
  226. package/src/components/Form/AccessRights/List/ListSkeleton.tsx +22 -0
  227. package/src/components/Form/AccessRights/List/RemoveAccessRight.tsx +38 -0
  228. package/src/components/Form/AccessRights/List/StateChip.tsx +28 -0
  229. package/src/components/Form/AccessRights/List/useItem.ts +64 -0
  230. package/src/components/Form/AccessRights/Provider.tsx +15 -0
  231. package/src/components/Form/AccessRights/ShareInput/ContactSwitch.tsx +50 -0
  232. package/src/components/Form/AccessRights/ShareInput/ShareInput.styles.ts +17 -0
  233. package/src/components/Form/AccessRights/ShareInput/ShareInput.tsx +78 -0
  234. package/src/components/Form/AccessRights/ShareInput/useShareInput.tsx +113 -0
  235. package/src/components/Form/AccessRights/Stats/Stats.tsx +36 -0
  236. package/src/components/Form/AccessRights/atoms.ts +97 -0
  237. package/src/components/Form/AccessRights/common/RoleSelectField.styles.tsx +7 -0
  238. package/src/components/Form/AccessRights/common/RoleSelectField.tsx +45 -0
  239. package/src/components/Form/AccessRights/models.ts +55 -0
  240. package/src/components/Form/AccessRights/storiesData.ts +222 -0
  241. package/src/components/Form/AccessRights/useAccessRightsInitValues.ts +51 -0
  242. package/src/components/Form/Dashboard/DashboardDuplicationForm.tsx +85 -0
  243. package/src/components/Form/Dashboard/DashboardForm.tsx +15 -12
  244. package/src/components/Form/Dashboard/index.ts +1 -0
  245. package/src/components/Form/FormActions.tsx +7 -2
  246. package/src/components/Form/index.ts +2 -1
  247. package/src/components/ItemComposition/Item.tsx +1 -1
  248. package/src/components/ItemComposition/ItemComposition.cypress.spec.tsx +113 -0
  249. package/src/components/ItemComposition/ItemComposition.stories.tsx +14 -0
  250. package/src/components/ItemComposition/ItemComposition.styles.ts +36 -3
  251. package/src/components/ItemComposition/ItemComposition.tsx +41 -17
  252. package/src/components/Layout/PageLayout/PageLayout.tsx +1 -1
  253. package/src/components/Layout/PageLayout/PageLayoutActions.tsx +1 -0
  254. package/src/components/Layout/PageLayout/PageLayoutBody.tsx +1 -0
  255. package/src/components/Layout/PageLayout/PageLayoutHeader.tsx +5 -1
  256. package/src/components/Layout/PageLayout/PageQuickAccess.tsx +76 -0
  257. package/src/components/Layout/PageLayout/index.ts +3 -1
  258. package/src/components/Layout/PageLayout.cypress.spec.tsx +66 -0
  259. package/src/components/List/Item/ListItem.styles.ts +6 -0
  260. package/src/components/List/Item/ListItem.tsx +6 -4
  261. package/src/components/List/Item/Text.tsx +5 -3
  262. package/src/components/Menu/Button/MenuButton.tsx +4 -2
  263. package/src/components/Menu/MenuItem.tsx +5 -3
  264. package/src/components/Menu/MenuItems.tsx +4 -3
  265. package/src/components/Modal/ConfirmationModal/ConfirmationModal.cypress.spec.tsx +168 -0
  266. package/src/components/Modal/ConfirmationModal/ConfirmationModal.stories.tsx +62 -0
  267. package/src/components/Modal/ConfirmationModal/ConfirmationModal.tsx +87 -0
  268. package/src/components/Modal/Modal.styles.ts +10 -2
  269. package/src/components/Modal/ModalActions.tsx +4 -2
  270. package/src/components/Modal/index.ts +2 -0
  271. package/src/components/Tooltip/ConfirmationTooltip/ConfirmationTooltip.stories.tsx +3 -3
  272. package/src/components/Tooltip/ConfirmationTooltip/ConfirmationTooltip.tsx +1 -1
  273. package/src/components/Tooltip/ConfirmationTooltip/models.ts +1 -1
  274. package/src/components/Zoom/Minimap.tsx +127 -0
  275. package/src/components/Zoom/Zoom.cypress.spec.tsx +246 -0
  276. package/src/components/Zoom/Zoom.stories.tsx +115 -0
  277. package/src/components/Zoom/Zoom.styles.tsx +68 -0
  278. package/src/components/Zoom/Zoom.tsx +61 -0
  279. package/src/components/Zoom/ZoomContent.tsx +167 -0
  280. package/src/components/Zoom/constants.ts +2 -0
  281. package/src/components/Zoom/localPoint.ts +51 -0
  282. package/src/components/Zoom/models.ts +25 -0
  283. package/src/components/Zoom/useMinimap.ts +156 -0
  284. package/src/components/Zoom/useZoom.ts +70 -0
  285. package/src/components/Zoom/utils.ts +55 -0
  286. package/src/components/index.ts +1 -0
  287. package/src/fonts/roboto-bold-webfont.ttf +0 -0
  288. package/src/fonts/roboto-bold-webfont.woff +0 -0
  289. package/src/fonts/roboto-bold-webfont.woff2 +0 -0
  290. package/src/fonts/roboto-light-webfont.ttf +0 -0
  291. package/src/fonts/roboto-light-webfont.woff +0 -0
  292. package/src/fonts/roboto-light-webfont.woff2 +0 -0
  293. package/src/fonts/roboto-medium-webfont.ttf +0 -0
  294. package/src/fonts/roboto-medium-webfont.woff +0 -0
  295. package/src/fonts/roboto-medium-webfont.woff2 +0 -0
  296. package/src/fonts/roboto-regular-webfont.ttf +0 -0
  297. package/src/fonts/roboto-regular-webfont.woff +0 -0
  298. package/src/fonts/roboto-regular-webfont.woff2 +0 -0
  299. package/src/index.ts +6 -0
  300. package/src/queryParameters/url/index.ts +5 -1
  301. package/src/utils/index.ts +3 -1
  302. package/src/utils/useFullscreen/Fullscreen.cypress.spec.tsx +130 -0
  303. package/src/utils/useFullscreen/atoms.ts +3 -0
  304. package/src/utils/useFullscreen/index.ts +2 -0
  305. package/src/utils/useFullscreen/translatedLabels.ts +1 -0
  306. package/src/utils/useFullscreen/useFullscreen.ts +73 -0
  307. package/src/utils/useFullscreen/useFullscreenListener.ts +62 -0
  308. package/src/utils/useInfiniteScrollListing.ts +31 -8
  309. package/src/utils/{useLicenseExpirationWarning.cypress.spec.tsx → useLicenseExpirationWarning.test.tsx} +48 -37
  310. package/src/utils/useLicenseExpirationWarning.ts +18 -18
  311. package/src/utils/useLocaleDateTimeFormat/index.ts +3 -0
  312. package/src/utils/usePluralizedTranslation.ts +21 -0
  313. package/src/@assets/icons/downtime.icon.svg +0 -1
  314. package/src/Graph/LineChart/BasicComponents/LoadingProgress.tsx +0 -46
  315. package/src/Graph/LineChart/InteractiveComponents/AnchorPoint/TooltipAnchorPoint.tsx +0 -96
  316. package/src/Graph/LineChart/InteractiveComponents/AnchorPoint/useTooltipAnchorPoint.ts +0 -107
  317. package/src/Graph/LineChart/Legend/InteractiveValue.tsx +0 -22
  318. package/src/Graph/LineChart/Legend/Marker.tsx +0 -43
  319. package/src/Graph/LineChart/Legend/useInteractiveValues.ts +0 -99
  320. package/src/Typography/FluidTypography/useFluidResizeObserver.ts +0 -56
  321. package/src/components/Form/AccessRights/AccessRights.resource.ts +0 -45
  322. package/src/components/Form/AccessRights/AccessRightsForm.stories.tsx +0 -59
  323. package/src/components/Form/AccessRights/AccessRightsForm.styles.ts +0 -21
  324. package/src/components/Form/AccessRights/AccessRightsForm.tsx +0 -67
  325. package/src/components/Form/AccessRights/AccessRightsFormActions.tsx +0 -80
  326. package/src/components/Form/AccessRights/Input/AddAction.tsx +0 -31
  327. package/src/components/Form/AccessRights/Input/ContactAccessRightInput.stories.tsx +0 -54
  328. package/src/components/Form/AccessRights/Input/ContactAccessRightInput.tsx +0 -72
  329. package/src/components/Form/AccessRights/Input/ContactAccessRightsInput.styles.ts +0 -22
  330. package/src/components/Form/AccessRights/Input/ContactInputField.tsx +0 -105
  331. package/src/components/Form/AccessRights/Input/RoleInputField.tsx +0 -29
  332. package/src/components/Form/AccessRights/List/ContactAccessRightsList.stories.tsx +0 -97
  333. package/src/components/Form/AccessRights/List/ContactAccessRightsList.styles.ts +0 -71
  334. package/src/components/Form/AccessRights/List/ContactAccessRightsList.tsx +0 -51
  335. package/src/components/Form/AccessRights/List/ContactAccessRightsListItem.stories.tsx +0 -116
  336. package/src/components/Form/AccessRights/List/ContactAccessRightsListItem.tsx +0 -118
  337. package/src/components/Form/AccessRights/List/ContactAccessRightsListItemSkeleton.tsx +0 -26
  338. package/src/components/Form/AccessRights/List/ContactAccessRightsListSkeleton.tsx +0 -28
  339. package/src/components/Form/AccessRights/Stats/AccessRightsStats.styles.ts +0 -18
  340. package/src/components/Form/AccessRights/Stats/AccessRightsStats.tsx +0 -41
  341. package/src/components/Form/AccessRights/__fixtures__/contactAccessRight.mock.ts +0 -52
  342. package/src/components/Form/AccessRights/common/GroupLabel.styles.ts +0 -18
  343. package/src/components/Form/AccessRights/common/GroupLabel.tsx +0 -15
  344. package/src/components/Form/AccessRights/common/Input.styles.ts +0 -48
  345. package/src/components/Form/AccessRights/common/RoleInputSelect.styles.ts +0 -11
  346. package/src/components/Form/AccessRights/common/RoleInputSelect.tsx +0 -57
  347. package/src/components/Form/AccessRights/index.ts +0 -3
  348. package/src/components/Form/AccessRights/useAccessRightsForm.test.tsx +0 -531
  349. package/src/components/Form/AccessRights/useAccessRightsForm.tsx +0 -282
  350. package/src/components/Form/AccessRights/useAccessRightsForm.utils.ts +0 -41
  351. package/src/screens/dashboard/DashboardsDetail.stories.tsx +0 -108
  352. package/src/screens/dashboard/DashboardsOverview.stories.tsx +0 -281
  353. package/src/utils/useDateTimePickerAdapter.ts +0 -309
  354. /package/{public → src/Button}/fonts/roboto-bold-webfont.ttf +0 -0
  355. /package/{public → src/Button}/fonts/roboto-bold-webfont.woff +0 -0
  356. /package/{public → src/Button}/fonts/roboto-bold-webfont.woff2 +0 -0
  357. /package/{public → src/Button}/fonts/roboto-light-webfont.ttf +0 -0
  358. /package/{public → src/Button}/fonts/roboto-light-webfont.woff +0 -0
  359. /package/{public → src/Button}/fonts/roboto-light-webfont.woff2 +0 -0
  360. /package/{public → src/Button}/fonts/roboto-medium-webfont.ttf +0 -0
  361. /package/{public → src/Button}/fonts/roboto-medium-webfont.woff +0 -0
  362. /package/{public → src/Button}/fonts/roboto-medium-webfont.woff2 +0 -0
  363. /package/{public → src/Button}/fonts/roboto-regular-webfont.ttf +0 -0
  364. /package/{public → src/Button}/fonts/roboto-regular-webfont.woff +0 -0
  365. /package/{public → src/Button}/fonts/roboto-regular-webfont.woff2 +0 -0
@@ -1,5 +1,6 @@
1
1
  import RichTextEditor from './RichTextEditor';
2
2
  import { standardMacros } from './plugins/ToolbarPlugin/MacrosButton';
3
+ import { labelAlignPicker } from './translatedLabels';
3
4
 
4
5
  interface CheckElementStyleOnRichTextEditorProps {
5
6
  check: boolean;
@@ -47,16 +48,30 @@ describe('Rich Text Editor', () => {
47
48
  it('displays all elements when RichTextEditor is called with required props', () => {
48
49
  cy.findByLabelText('Undo').should('be.visible');
49
50
  cy.findByLabelText('Redo').should('be.visible');
50
- cy.findByLabelText('bold').should('be.visible');
51
- cy.findByLabelText('italic').should('be.visible');
52
- cy.findByLabelText('underline').should('be.visible');
53
- cy.findByLabelText('strikethrough').should('be.visible');
51
+ cy.findByLabelText('align picker').should('be.visible');
52
+ cy.findByLabelText('block').should('be.visible');
53
+ cy.findByLabelText('format').should('be.visible');
54
54
  cy.findByLabelText('link').should('be.visible');
55
+ cy.findByLabelText('list').should('be.visible');
56
+
55
57
  cy.findByLabelText('RichTextEditor')
56
58
  .should('be.visible')
57
59
  .and('have.value', '');
58
60
 
59
61
  cy.findByLabelText('RichTextEditor').parent().contains('Type here...');
62
+
63
+ cy.makeSnapshot();
64
+ });
65
+
66
+ it('displays all format actions when the format button is clicked', () => {
67
+ cy.findByLabelText('format').click();
68
+
69
+ cy.findByLabelText('bold').should('be.visible');
70
+ cy.findByLabelText('italic').should('be.visible');
71
+ cy.findByLabelText('underline').should('be.visible');
72
+ cy.findByLabelText('strikethrough').should('be.visible');
73
+
74
+ cy.makeSnapshot();
60
75
  });
61
76
 
62
77
  it('displays changes with undo redo buttons', () => {
@@ -80,21 +95,36 @@ describe('Rich Text Editor', () => {
80
95
 
81
96
  it('displays changes with bold, italic, underline and strikethrough buttons', () => {
82
97
  cy.get('[data-testid="RichTextEditor"]').type('cypress test');
98
+
83
99
  cy.get('[data-testid="RichTextEditor"]').focus().type('{selectAll}');
84
100
 
85
- cy.get('#bold').click();
86
- cy.get('#italic').click();
87
- cy.get('#underline').click();
88
- cy.get('#strikethrough').click();
101
+ cy.findByLabelText('format').click();
102
+ cy.findByLabelText('bold').click();
103
+
104
+ cy.findByLabelText('format').click();
105
+ cy.findByLabelText('italic').click();
106
+
107
+ cy.findByLabelText('format').click();
108
+ cy.findByLabelText('underline').click();
109
+
110
+ cy.findByLabelText('format').click();
111
+ cy.findByLabelText('strikethrough').click();
89
112
 
90
113
  cy.findByTestId('RichTextEditor').then((element: HTMLElement) => {
91
114
  checkElementStyleOnRichTextEditor({ check: true, element });
92
115
  });
93
116
 
94
- cy.get('#bold').click();
95
- cy.get('#italic').click();
96
- cy.get('#underline').click();
97
- cy.get('#strikethrough').click();
117
+ cy.findByLabelText('format').click();
118
+ cy.findByLabelText('bold').click();
119
+
120
+ cy.findByLabelText('format').click();
121
+ cy.findByLabelText('italic').click();
122
+
123
+ cy.findByLabelText('format').click();
124
+ cy.findByLabelText('underline').click();
125
+
126
+ cy.findByLabelText('format').click();
127
+ cy.findByLabelText('strikethrough').click();
98
128
 
99
129
  cy.findByTestId('RichTextEditor').then((element: HTMLElement) => {
100
130
  checkElementStyleOnRichTextEditor({ check: false, element });
@@ -105,7 +135,7 @@ describe('Rich Text Editor', () => {
105
135
  cy.get('[data-testid="RichTextEditor"]').type('cypress');
106
136
  cy.get('[data-testid="RichTextEditor"]').focus().type('{selectAll}');
107
137
 
108
- cy.get('#link').click();
138
+ cy.findByLabelText('link').click();
109
139
 
110
140
  cy.findByLabelText('Saved link').should('have.text', 'https://');
111
141
 
@@ -130,7 +160,7 @@ describe('Rich Text Editor', () => {
130
160
 
131
161
  cy.get('[data-testid="RichTextEditor"]').focus().type('{selectAll}');
132
162
 
133
- cy.get('#link').click({ force: true });
163
+ cy.findByLabelText('link').click();
134
164
 
135
165
  cy.findByText('cypress')
136
166
  .parent()
@@ -153,7 +183,7 @@ describe('Rich Text Editor', () => {
153
183
  cy.get('[data-testid="RichTextEditor"]').type('cypress');
154
184
  cy.get('[data-testid="RichTextEditor"]').focus().type('{selectAll}');
155
185
 
156
- cy.get('#link').click();
186
+ cy.findByLabelText('link').click();
157
187
 
158
188
  cy.findByLabelText('Saved link').should('have.text', 'https://');
159
189
 
@@ -189,11 +219,11 @@ describe('Rich Text Editor', () => {
189
219
  it('displays editor when editable props is false and an initialState exist', () => {
190
220
  cy.findByLabelText('Undo').should('not.exist');
191
221
  cy.findByLabelText('Redo').should('not.exist');
192
- cy.findByLabelText('bold').should('not.exist');
193
- cy.findByLabelText('italic').should('not.exist');
194
- cy.findByLabelText('underline').should('not.exist');
195
- cy.findByLabelText('strikethrough').should('not.exist');
222
+ cy.findByLabelText(labelAlignPicker).should('not.exist');
223
+ cy.findByLabelText('block').should('not.exist');
224
+ cy.findByLabelText('format').should('not.exist');
196
225
  cy.findByLabelText('link').should('not.exist');
226
+ cy.findByLabelText('list').should('not.exist');
197
227
  });
198
228
  });
199
229
 
@@ -213,11 +243,11 @@ describe('Rich Text Editor', () => {
213
243
  it('displays editor when editable props is false and an initialState exist', () => {
214
244
  cy.findByLabelText('Undo').should('be.disabled');
215
245
  cy.findByLabelText('Redo').should('be.disabled');
216
- cy.findByLabelText('bold').should('be.disabled');
217
- cy.findByLabelText('italic').should('be.disabled');
218
- cy.findByLabelText('underline').should('be.disabled');
219
- cy.findByLabelText('strikethrough').should('be.disabled');
246
+ cy.findByLabelText(labelAlignPicker).should('be.disabled');
247
+ cy.findByLabelText('block').should('be.disabled');
248
+ cy.findByLabelText('format').should('be.disabled');
220
249
  cy.findByLabelText('link').should('be.disabled');
250
+ cy.findByLabelText('list').should('be.disabled');
221
251
  });
222
252
  });
223
253
 
@@ -262,7 +292,6 @@ describe('Rich Text Editor', () => {
262
292
  });
263
293
 
264
294
  it('displays the Macros button when the "displayMacrosButton" prop is set to true', () => {
265
- cy.findByLabelText('Macros').should('be.visible');
266
295
  cy.findByLabelText('Macros').click();
267
296
 
268
297
  standardMacros.forEach((macro) => {
@@ -273,10 +302,10 @@ describe('Rich Text Editor', () => {
273
302
  it('ensures that the selected macro is inserted into the RichTextEditor', () => {
274
303
  cy.get('[data-testid="RichTextEditor"]').type('macro : ');
275
304
 
276
- cy.findByLabelText('Macros').click({});
277
-
278
305
  standardMacros.forEach((macro) => {
279
- cy.findByText(macro).should('be.visible').click({ force: true });
306
+ cy.findByLabelText('Macros').click();
307
+ cy.findByText(macro).click();
308
+
280
309
  cy.get('[data-testid="RichTextEditor"]').should('contain', macro);
281
310
  });
282
311
  });
@@ -291,44 +320,59 @@ describe('Rich Text Editor', () => {
291
320
 
292
321
  const testCases = [
293
322
  {
294
- blockType: 'Heading 1',
295
- tag: 'h1'
296
- },
297
- {
298
- blockType: 'Heading 2',
299
- tag: 'h2'
300
- },
301
- {
302
- blockType: 'Heading 3',
323
+ blockType: 'Huge',
303
324
  tag: 'h3'
304
325
  },
305
326
  {
306
- blockType: 'Heading 4',
307
- tag: 'h4'
327
+ blockType: 'Large',
328
+ tag: 'h5'
308
329
  },
309
330
  {
310
- blockType: 'Heading 5',
311
- tag: 'h5'
331
+ blockType: 'Normal',
332
+ tag: 'p'
312
333
  },
313
334
  {
314
- blockType: 'Heading 6',
335
+ blockType: 'Small',
315
336
  tag: 'h6'
316
- },
337
+ }
338
+ ];
339
+
340
+ testCases.forEach(({ blockType, tag }) => {
341
+ it(`displays ${blockType} when the corresponding block type button is selected`, () => {
342
+ cy.get('[data-testid="RichTextEditor"]').type('Example');
343
+ cy.findByLabelText('block').click();
344
+ cy.findByText(blockType).click();
345
+
346
+ cy.get('[data-testid="RichTextEditor"]').find(tag).should('be.visible');
347
+
348
+ cy.makeSnapshot();
349
+ });
350
+ });
351
+ });
352
+
353
+ describe('List type', () => {
354
+ beforeEach(() => {
355
+ cy.mount({
356
+ Component: <RichTextEditor editable />
357
+ });
358
+ });
359
+
360
+ const testCases = [
317
361
  {
318
- blockType: 'Bullet List',
362
+ listType: 'Unordered List',
319
363
  tag: 'ul'
320
364
  },
321
365
  {
322
- blockType: 'Number List',
366
+ listType: 'Ordered List',
323
367
  tag: 'ol'
324
368
  }
325
369
  ];
326
370
 
327
- testCases.forEach(({ blockType, tag }) => {
328
- it(`displays ${blockType} when the corresponding block type button is selected`, () => {
371
+ testCases.forEach(({ listType, tag }) => {
372
+ it(`displays ${listType} when the corresponding list type button is selected`, () => {
329
373
  cy.get('[data-testid="RichTextEditor"]').type('Example');
330
- cy.findByTestId('Block type').click();
331
- cy.findByText(blockType).click();
374
+ cy.findByLabelText('list').click();
375
+ cy.findByLabelText(listType).click();
332
376
 
333
377
  cy.get('[data-testid="RichTextEditor"]').find(tag).should('be.visible');
334
378
 
@@ -344,14 +388,18 @@ describe('Rich Text Editor', () => {
344
388
  });
345
389
  });
346
390
 
347
- const testCases = ['Center', 'Right'];
391
+ const testCases = ['Center', 'Right', 'Left'];
348
392
 
349
393
  testCases.forEach((label) => {
350
- it(`aligns the text to the ${label} when the corresponding button is clicked`, () => {
394
+ it(`aligns the text to the ${label} when the corresponding button was clicked`, () => {
351
395
  cy.get('[data-testid="RichTextEditor"]').type('Example');
352
396
 
353
- cy.findByLabelText('left').click();
354
- cy.contains(label).click();
397
+ cy.findByLabelText(labelAlignPicker).click();
398
+ cy.findByLabelText(label).click();
399
+
400
+ cy.findByText('Example')
401
+ .parent()
402
+ .should('have.css', 'text-align', label.toLowerCase());
355
403
 
356
404
  cy.makeSnapshot();
357
405
  });
@@ -12,6 +12,7 @@ import { LinkPlugin } from '@lexical/react/LexicalLinkPlugin';
12
12
  import { equals } from 'ramda';
13
13
  import { ListPlugin } from '@lexical/react/LexicalListPlugin';
14
14
  import { OnChangePlugin } from '@lexical/react/LexicalOnChangePlugin';
15
+ import { $generateHtmlFromNodes } from '@lexical/html';
15
16
 
16
17
  import { Typography } from '@mui/material';
17
18
 
@@ -38,6 +39,7 @@ export interface RichTextEditorProps {
38
39
  openLinkInNewTab?: boolean;
39
40
  placeholder?: string;
40
41
  resetEditorToInitialStateCondition?: () => boolean;
42
+ setHtmlString?: (htmlString: string) => void;
41
43
  toolbarClassName?: string;
42
44
  toolbarPositions?: 'start' | 'end';
43
45
  }
@@ -92,9 +94,9 @@ const useStyles = makeStyles<{ toolbarPositions: 'start' | 'end' }>()(
92
94
  lineHeight: theme.typography.h5.lineHeight
93
95
  },
94
96
  h6: {
95
- fontSize: theme.typography.h6.fontSize,
96
- fontWeight: theme.typography.h6.fontWeight,
97
- lineHeight: theme.typography.h6.lineHeight
97
+ fontSize: theme.typography.body2.fontSize,
98
+ fontWeight: theme.typography.body2.fontWeight,
99
+ lineHeight: theme.typography.body2.lineHeight
98
100
  },
99
101
  italic: {
100
102
  fontStyle: 'italic'
@@ -102,6 +104,11 @@ const useStyles = makeStyles<{ toolbarPositions: 'start' | 'end' }>()(
102
104
  link: {
103
105
  color: theme.palette.primary.main
104
106
  },
107
+ paragraph: {
108
+ fontSize: theme.typography.body1.fontSize,
109
+ fontWeight: theme.typography.body1.fontWeight,
110
+ lineHeight: theme.typography.body1.lineHeight
111
+ },
105
112
  strikethrough: {
106
113
  textDecoration: 'line-through'
107
114
  },
@@ -138,6 +145,7 @@ const RichTextEditor = ({
138
145
  openLinkInNewTab = true,
139
146
  initialize,
140
147
  displayBlockButtons = true,
148
+ setHtmlString,
141
149
  toolbarClassName
142
150
  }: RichTextEditorProps): JSX.Element => {
143
151
  const { classes } = useStyles({ toolbarPositions });
@@ -162,6 +170,7 @@ const RichTextEditor = ({
162
170
  h6: classes.h6
163
171
  },
164
172
  link: classes.link,
173
+ paragraph: classes.paragraph,
165
174
  text: {
166
175
  bold: classes.bold,
167
176
  italic: classes.italic,
@@ -172,6 +181,13 @@ const RichTextEditor = ({
172
181
  }
173
182
  };
174
183
 
184
+ const change = (state: EditorState, editor: LexicalEditor): void => {
185
+ editor.update(() => {
186
+ setHtmlString?.($generateHtmlFromNodes(editor, null));
187
+ });
188
+ getEditorState?.(state, editor);
189
+ };
190
+
175
191
  return (
176
192
  <LexicalComposer initialConfig={initialConfig}>
177
193
  <div className={classes.container}>
@@ -204,6 +220,7 @@ const RichTextEditor = ({
204
220
  resetEditorToInitialStateCondition={
205
221
  resetEditorToInitialStateCondition
206
222
  }
223
+ setHtmlString={setHtmlString}
207
224
  onBlur={onBlur}
208
225
  />
209
226
  }
@@ -212,7 +229,7 @@ const RichTextEditor = ({
212
229
  <HistoryPlugin />
213
230
  <LinkPlugin />
214
231
  <ListPlugin />
215
- <OnChangePlugin onChange={getEditorState} />
232
+ <OnChangePlugin onChange={change} />
216
233
  <AutoCompleteLinkPlugin openLinkInNewTab={openLinkInNewTab} />
217
234
  <FloatingLinkEditorPlugin
218
235
  editable={editable}
@@ -18,8 +18,9 @@ import { SvgIconTypeMap } from '@mui/material';
18
18
 
19
19
  import { Menu } from '../../../components';
20
20
  import { getSelectedNode } from '../../utils/getSelectedNode';
21
+ import { labelAlignPicker } from '../../translatedLabels';
21
22
 
22
- import { useAlignPickerStyles } from './ToolbarPlugin.styles';
23
+ import { useStyles } from './ToolbarPlugin.styles';
23
24
 
24
25
  const formatOptions: Array<{
25
26
  Icon: OverridableComponent<SvgIconTypeMap<object, 'svg'>>;
@@ -48,7 +49,7 @@ interface Props {
48
49
  }
49
50
 
50
51
  const AlignPicker = ({ disabled }: Props): JSX.Element => {
51
- const { classes } = useAlignPickerStyles();
52
+ const { classes } = useStyles();
52
53
 
53
54
  const [elementFormat, setElementFormat] = useState<ElementFormatType>('left');
54
55
 
@@ -88,25 +89,25 @@ const AlignPicker = ({ disabled }: Props): JSX.Element => {
88
89
 
89
90
  return (
90
91
  <Menu>
91
- <Menu.Button ariaLabel={elementFormat} disabled={disabled}>
92
- {selectedFormat && (
93
- <div className={classes.button}>
94
- <selectedFormat.Icon /> {selectedFormat.label}
95
- </div>
96
- )}
92
+ <Menu.Button
93
+ ariaLabel={labelAlignPicker}
94
+ className={classes.button}
95
+ disabled={disabled}
96
+ >
97
+ {selectedFormat && <selectedFormat.Icon />}
97
98
  </Menu.Button>
98
- <Menu.Items>
99
- {formatOptions.map(({ Icon, label, value }) => (
100
- <Menu.Item
101
- isActive={equals(value, elementFormat)}
102
- key={value}
103
- onClick={dispatchAlignment(value)}
104
- >
105
- <div className={classes.option}>
106
- <Icon /> {label}
107
- </div>
108
- </Menu.Item>
109
- ))}
99
+ <Menu.Items className={classes.menuItems}>
100
+ <div className={classes.menu}>
101
+ {formatOptions.map(({ Icon, value, label }) => (
102
+ <Menu.Item
103
+ isActive={equals(value, elementFormat)}
104
+ key={value}
105
+ onClick={dispatchAlignment(value)}
106
+ >
107
+ <Icon aria-label={label} />
108
+ </Menu.Item>
109
+ ))}
110
+ </div>
110
111
  </Menu.Items>
111
112
  </Menu>
112
113
  );
@@ -1,13 +1,6 @@
1
1
  import { useCallback, useEffect, useState } from 'react';
2
2
 
3
3
  import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
4
- import {
5
- $isListNode,
6
- INSERT_ORDERED_LIST_COMMAND,
7
- INSERT_UNORDERED_LIST_COMMAND,
8
- ListNode,
9
- REMOVE_LIST_COMMAND
10
- } from '@lexical/list';
11
4
  import {
12
5
  $createParagraphNode,
13
6
  $getSelection,
@@ -23,43 +16,27 @@ import {
23
16
  } from '@lexical/rich-text';
24
17
  import { $setBlocksType } from '@lexical/selection';
25
18
  import { T, always, cond, equals, isNil } from 'ramda';
26
- import {
27
- $findMatchingParent,
28
- $getNearestNodeOfType,
29
- mergeRegister
30
- } from '@lexical/utils';
19
+ import { $findMatchingParent, mergeRegister } from '@lexical/utils';
20
+ import { useTranslation } from 'react-i18next';
31
21
 
32
- import { SingleAutocompleteField } from '../../..';
22
+ import TextSizeIcon from '@mui/icons-material/TextFields';
33
23
 
34
- import { useBlockButtonsStyles } from './ToolbarPlugin.styles';
24
+ import { Menu } from '../../../components';
25
+
26
+ import { useStyles } from './ToolbarPlugin.styles';
35
27
 
36
28
  interface Props {
37
29
  disabled: boolean;
38
30
  }
39
31
 
40
32
  const blockTypeToBlockName = {
41
- bullet: 'Bullet List',
42
- h1: 'Heading 1',
43
- h2: 'Heading 2',
44
- h3: 'Heading 3',
45
- h4: 'Heading 4',
46
- h5: 'Heading 5',
47
- h6: 'Heading 6',
48
- number: 'Number List',
33
+ h3: 'Huge',
34
+ h5: 'Large',
35
+ h6: 'Small',
49
36
  paragraph: 'Normal'
50
37
  };
51
38
 
52
- const blockTypes = [
53
- 'h1',
54
- 'h2',
55
- 'h3',
56
- 'h4',
57
- 'h5',
58
- 'h6',
59
- 'bullet',
60
- 'number',
61
- 'paragraph'
62
- ];
39
+ const blockTypes = ['h3', 'h5', 'paragraph', 'h6'];
63
40
 
64
41
  const blockTypeOptions = blockTypes.map((blockType) => ({
65
42
  id: blockType,
@@ -67,7 +44,8 @@ const blockTypeOptions = blockTypes.map((blockType) => ({
67
44
  }));
68
45
 
69
46
  const BlockButtons = ({ disabled }: Props): JSX.Element => {
70
- const { classes } = useBlockButtonsStyles();
47
+ const { classes } = useStyles();
48
+ const { t } = useTranslation();
71
49
 
72
50
  const [blockType, setBlockType] =
73
51
  useState<keyof typeof blockTypeToBlockName>('paragraph');
@@ -81,22 +59,6 @@ const BlockButtons = ({ disabled }: Props): JSX.Element => {
81
59
  });
82
60
  };
83
61
 
84
- const formatBulletList = (): void => {
85
- if (blockType !== 'bullet') {
86
- editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);
87
- } else {
88
- editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);
89
- }
90
- };
91
-
92
- const formatNumberedList = (): void => {
93
- if (blockType !== 'number') {
94
- editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);
95
- } else {
96
- editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);
97
- }
98
- };
99
-
100
62
  const formatHeading = (headingSize: HeadingTagType): void => {
101
63
  if (blockType !== headingSize) {
102
64
  editor.update(() => {
@@ -108,18 +70,13 @@ const BlockButtons = ({ disabled }: Props): JSX.Element => {
108
70
  }
109
71
  };
110
72
 
111
- const changeBlockType = (_, newBlockType): void => {
73
+ const changeBlockType = (newBlockType): void => {
112
74
  const formatFunction = cond<Array<string>, (value?) => void>([
113
- [equals('bullet'), always(formatBulletList)],
114
- [equals('number'), always(formatNumberedList)],
115
- [equals('h1'), always(() => formatHeading('h1'))],
116
- [equals('h2'), always(() => formatHeading('h2'))],
117
75
  [equals('h3'), always(() => formatHeading('h3'))],
118
- [equals('h4'), always(() => formatHeading('h4'))],
119
76
  [equals('h5'), always(() => formatHeading('h5'))],
120
77
  [equals('h6'), always(() => formatHeading('h6'))],
121
78
  [T, always(formatParagraph)]
122
- ])(newBlockType?.id || '');
79
+ ])(newBlockType || '');
123
80
 
124
81
  formatFunction();
125
82
  };
@@ -142,23 +99,13 @@ const BlockButtons = ({ disabled }: Props): JSX.Element => {
142
99
  return;
143
100
  }
144
101
 
145
- if ($isListNode(element)) {
146
- const parentList = $getNearestNodeOfType(anchorNode, ListNode);
147
- const type = parentList
148
- ? parentList.getListType()
149
- : element.getListType();
150
- setBlockType(type);
151
-
152
- return;
153
- }
154
102
  const type = $isHeadingNode(element) ? element.getTag() : element.getType();
103
+
155
104
  if (type in blockTypeToBlockName) {
156
105
  setBlockType(type as keyof typeof blockTypeToBlockName);
157
106
  }
158
107
  }, [editor]);
159
108
 
160
- const value = blockTypeOptions.find((option) => option.id === blockType);
161
-
162
109
  useEffect(() => {
163
110
  return editor.registerCommand(
164
111
  SELECTION_CHANGE_COMMAND,
@@ -182,15 +129,26 @@ const BlockButtons = ({ disabled }: Props): JSX.Element => {
182
129
  }, [editor, updateToolbar]);
183
130
 
184
131
  return (
185
- <SingleAutocompleteField
186
- className={classes.autocomplete}
187
- dataTestId="Block type"
188
- disabled={disabled}
189
- label=""
190
- options={blockTypeOptions}
191
- value={value}
192
- onChange={changeBlockType}
193
- />
132
+ <Menu>
133
+ <Menu.Button
134
+ ariaLabel="block"
135
+ className={classes.button}
136
+ disabled={disabled}
137
+ >
138
+ <TextSizeIcon />
139
+ </Menu.Button>
140
+ <Menu.Items className={classes.menuItems}>
141
+ {blockTypeOptions.map(({ id, name }) => (
142
+ <Menu.Item
143
+ isActive={equals(id, blockType)}
144
+ key={name}
145
+ onClick={() => changeBlockType(id)}
146
+ >
147
+ {t(name)}
148
+ </Menu.Item>
149
+ ))}
150
+ </Menu.Items>
151
+ </Menu>
194
152
  );
195
153
  };
196
154