@centreon/ui 24.4.59 → 24.4.61

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 (163) hide show
  1. package/package.json +50 -42
  2. package/public/mockServiceWorker.js +1 -1
  3. package/src/ActionsList/ActionsList.styles.ts +40 -71
  4. package/src/Button/Icon/index.tsx +1 -1
  5. package/src/Button/Save/StartIcon.tsx +3 -3
  6. package/src/Button/Save/index.tsx +9 -5
  7. package/src/Checkbox/Checkbox.tsx +2 -2
  8. package/src/Checkbox/CheckboxGroup/index.tsx +2 -2
  9. package/src/Dashboard/Item.tsx +1 -1
  10. package/src/Dashboard/Layout.tsx +2 -2
  11. package/src/Dialog/Confirm/index.tsx +10 -2
  12. package/src/Dialog/UnsavedChanges/index.tsx +21 -20
  13. package/src/Dialog/UnsavedChanges/translatedLabels.ts +4 -6
  14. package/src/Dialog/index.tsx +9 -2
  15. package/src/FallbackPage/FallbackPage.tsx +3 -3
  16. package/src/FileDropZone/index.tsx +3 -1
  17. package/src/Form/Form.cypress.spec.tsx +133 -0
  18. package/src/Form/Inputs/List/Content.tsx +62 -0
  19. package/src/Form/Inputs/List/List.styles.ts +29 -0
  20. package/src/Form/Inputs/List/List.tsx +58 -0
  21. package/src/Form/Inputs/List/useList.ts +81 -0
  22. package/src/Form/Inputs/Text.tsx +3 -1
  23. package/src/Form/Inputs/index.tsx +3 -1
  24. package/src/Form/Inputs/models.ts +10 -1
  25. package/src/Graph/BarStack/BarStack.cypress.spec.tsx +154 -0
  26. package/src/Graph/BarStack/BarStack.stories.tsx +123 -0
  27. package/src/Graph/BarStack/BarStack.styles.ts +37 -0
  28. package/src/Graph/BarStack/BarStack.tsx +14 -0
  29. package/src/Graph/BarStack/ResponsiveBarStack.tsx +222 -0
  30. package/src/Graph/BarStack/index.ts +1 -0
  31. package/src/Graph/BarStack/models.ts +20 -0
  32. package/src/Graph/BarStack/useResponsiveBarStack.ts +137 -0
  33. package/src/Graph/Gauge/Gauge.cypress.spec.tsx +102 -0
  34. package/src/Graph/Gauge/Gauge.tsx +1 -1
  35. package/src/Graph/HeatMap/HeatMap.cypress.spec.tsx +145 -0
  36. package/src/Graph/HeatMap/HeatMap.stories.tsx +0 -25
  37. package/src/Graph/HeatMap/ResponsiveHeatMap.tsx +8 -2
  38. package/src/Graph/Legend/Legend.tsx +21 -0
  39. package/src/Graph/Legend/index.ts +1 -0
  40. package/src/Graph/Legend/models.ts +11 -0
  41. package/src/Graph/LineChart/BasicComponents/Lines/Threshold/Circle.tsx +2 -2
  42. package/src/Graph/LineChart/BasicComponents/Thresholds.tsx +2 -2
  43. package/src/Graph/LineChart/BasicComponents/useFilterLines.ts +1 -1
  44. package/src/Graph/LineChart/InteractiveComponents/AnchorPoint/GuidingLines.tsx +2 -2
  45. package/src/Graph/LineChart/InteractiveComponents/Annotations/EventAnnotations.tsx +1 -1
  46. package/src/Graph/LineChart/Legend/Legend.styles.ts +1 -1
  47. package/src/Graph/LineChart/Legend/LegendHeader.tsx +1 -1
  48. package/src/Graph/LineChart/Legend/useInteractiveValues.ts +2 -2
  49. package/src/Graph/LineChart/Legend/useLegend.ts +3 -3
  50. package/src/Graph/LineChart/helpers/doc.ts +16 -13
  51. package/src/Graph/LineChart/helpers/index.ts +1 -1
  52. package/src/Graph/LineChart/index.stories.tsx +4 -2
  53. package/src/Graph/LineChart/index.tsx +1 -1
  54. package/src/Graph/PieChart/PieChart.cypress.spec.tsx +169 -0
  55. package/src/Graph/PieChart/PieChart.stories.tsx +194 -0
  56. package/src/Graph/PieChart/PieChart.styles.ts +39 -0
  57. package/src/Graph/PieChart/PieChart.tsx +14 -0
  58. package/src/Graph/PieChart/ResponsivePie.tsx +254 -0
  59. package/src/Graph/PieChart/index.ts +1 -0
  60. package/src/Graph/PieChart/models.ts +20 -0
  61. package/src/Graph/PieChart/useResponsivePie.ts +85 -0
  62. package/src/Graph/SingleBar/SingleBar.cypress.spec.tsx +121 -0
  63. package/src/Graph/SingleBar/Thresholds.tsx +2 -2
  64. package/src/Graph/Text/Text.cypress.spec.tsx +101 -0
  65. package/src/Graph/Text/Text.stories.tsx +60 -4
  66. package/src/Graph/Text/Text.tsx +1 -1
  67. package/src/Graph/common/testUtils.ts +71 -0
  68. package/src/Graph/common/timeSeries/index.ts +22 -14
  69. package/src/Graph/common/utils.ts +19 -0
  70. package/src/Graph/index.ts +3 -0
  71. package/src/Graph/translatedLabels.ts +1 -0
  72. package/src/InputField/Select/Autocomplete/Connected/index.tsx +10 -7
  73. package/src/InputField/Select/Autocomplete/Draggable/SortableList.tsx +1 -1
  74. package/src/InputField/Select/Autocomplete/Draggable/SortableListContent.tsx +1 -1
  75. package/src/InputField/Select/Autocomplete/Draggable/index.tsx +1 -1
  76. package/src/InputField/Select/Autocomplete/Multi/index.tsx +4 -2
  77. package/src/InputField/Select/Autocomplete/index.tsx +129 -116
  78. package/src/InputField/Select/IconPopover/index.tsx +2 -2
  79. package/src/InputField/Select/index.tsx +15 -2
  80. package/src/InputField/Text/index.tsx +2 -2
  81. package/src/Listing/ActionBar/index.tsx +9 -8
  82. package/src/Listing/Cell/DataCell.styles.ts +3 -0
  83. package/src/Listing/Cell/DataCell.tsx +23 -5
  84. package/src/Listing/Header/ListingHeader.tsx +1 -1
  85. package/src/Listing/Listing.cypress.spec.tsx +218 -33
  86. package/src/Listing/Listing.styles.ts +4 -7
  87. package/src/Listing/Row/Row.tsx +7 -3
  88. package/src/Listing/index.stories.tsx +37 -3
  89. package/src/Listing/index.test.tsx +1 -1
  90. package/src/Listing/index.tsx +80 -36
  91. package/src/Listing/models.ts +1 -0
  92. package/src/Listing/useStyleTable.ts +1 -0
  93. package/src/Module/Module.cypress.spec.tsx +129 -0
  94. package/src/Module/index.tsx +2 -4
  95. package/src/PopoverMenu/index.tsx +6 -5
  96. package/src/RichTextEditor/RichTextEditor.tsx +12 -1
  97. package/src/SortableItems/index.tsx +2 -7
  98. package/src/ThemeProvider/index.tsx +24 -0
  99. package/src/TimePeriods/CustomTimePeriod/CompactCustomTimePeriod.styles.ts +6 -7
  100. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/PickersStartEndDate.tsx +8 -3
  101. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/models.ts +0 -2
  102. package/src/TimePeriods/DateTimePickerInput.tsx +56 -19
  103. package/src/TimePeriods/ResolutionTimePeriod.cypress.spec.tsx +12 -9
  104. package/src/TimePeriods/TimePeriods.cypress.spec.tsx +9 -33
  105. package/src/TimePeriods/helpers/index.ts +1 -1
  106. package/src/TimePeriods/index.stories.tsx +12 -4
  107. package/src/TimePeriods/index.tsx +2 -2
  108. package/src/Typography/FluidTypography/FluidTypography.cypress.spec.tsx +27 -0
  109. package/src/Typography/FluidTypography/index.stories.tsx +2 -2
  110. package/src/Typography/FluidTypography/index.tsx +21 -28
  111. package/src/api/QueryProvider.tsx +1 -1
  112. package/src/api/TestQueryProvider.tsx +1 -1
  113. package/src/api/index.ts +3 -3
  114. package/src/api/useFetchQuery/index.ts +27 -23
  115. package/src/api/useMutationQuery/index.test.ts +4 -4
  116. package/src/api/useMutationQuery/index.ts +60 -25
  117. package/src/components/Button/Icon/IconButton.tsx +6 -2
  118. package/src/components/DataTable/DataListing.tsx +6 -0
  119. package/src/components/DataTable/DataTable.cypress.spec.tsx +174 -0
  120. package/src/components/DataTable/DataTable.stories.tsx +40 -0
  121. package/src/components/DataTable/DataTable.styles.ts +3 -0
  122. package/src/components/DataTable/DataTable.tsx +3 -3
  123. package/src/components/DataTable/Item/DataTableItem.styles.ts +7 -2
  124. package/src/components/DataTable/Item/DataTableItem.tsx +4 -60
  125. package/src/components/DataTable/index.ts +3 -1
  126. package/src/components/Form/AccessRights/AccessRights.cypress.spec.tsx +13 -13
  127. package/src/components/Form/AccessRights/ShareInput/ContactSwitch.tsx +3 -3
  128. package/src/components/Form/AccessRights/ShareInput/ShareInput.tsx +1 -0
  129. package/src/components/Form/AccessRights/storiesData.ts +22 -22
  130. package/src/components/Form/Dashboard/DashboardDuplicationForm.tsx +85 -0
  131. package/src/components/Form/Dashboard/DashboardForm.tsx +15 -12
  132. package/src/components/Form/Dashboard/index.ts +1 -0
  133. package/src/components/Form/FormActions.tsx +7 -2
  134. package/src/components/ItemComposition/ItemComposition.styles.ts +2 -2
  135. package/src/components/Layout/PageLayout/PageLayout.tsx +1 -1
  136. package/src/components/Layout/PageLayout/PageLayoutActions.tsx +1 -0
  137. package/src/components/Layout/PageLayout/PageLayoutBody.tsx +1 -0
  138. package/src/components/Layout/PageLayout/PageLayoutHeader.tsx +5 -1
  139. package/src/components/Layout/PageLayout/PageQuickAccess.tsx +76 -0
  140. package/src/components/Layout/PageLayout/index.ts +3 -1
  141. package/src/components/Layout/PageLayout.cypress.spec.tsx +66 -0
  142. package/src/components/List/Item/ListItem.tsx +3 -3
  143. package/src/components/Modal/ConfirmationModal/ConfirmationModal.cypress.spec.tsx +168 -0
  144. package/src/components/Modal/ConfirmationModal/ConfirmationModal.stories.tsx +62 -0
  145. package/src/components/Modal/ConfirmationModal/ConfirmationModal.tsx +87 -0
  146. package/src/components/Modal/Modal.styles.ts +8 -3
  147. package/src/components/Modal/index.ts +2 -0
  148. package/src/components/Tooltip/ConfirmationTooltip/ConfirmationTooltip.stories.tsx +3 -3
  149. package/src/components/Tooltip/ConfirmationTooltip/ConfirmationTooltip.tsx +1 -1
  150. package/src/components/Tooltip/ConfirmationTooltip/models.ts +1 -1
  151. package/src/index.ts +2 -2
  152. package/src/queryParameters/url/index.ts +5 -1
  153. package/src/utils/index.ts +1 -1
  154. package/src/utils/useFullscreen/Fullscreen.cypress.spec.tsx +1 -3
  155. package/src/utils/useFullscreen/useFullscreenListener.ts +10 -7
  156. package/src/utils/useInfiniteScrollListing.ts +4 -1
  157. package/src/utils/{useLicenseExpirationWarning.cypress.spec.tsx → useLicenseExpirationWarning.test.tsx} +48 -37
  158. package/src/utils/useLicenseExpirationWarning.ts +18 -18
  159. package/src/utils/usePluralizedTranslation.ts +21 -0
  160. package/src/Typography/FluidTypography/useFluidResizeObserver.ts +0 -56
  161. package/src/screens/dashboard/DashboardsDetail.stories.tsx +0 -108
  162. package/src/screens/dashboard/DashboardsOverview.stories.tsx +0 -281
  163. package/src/utils/useDateTimePickerAdapter.ts +0 -309
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@centreon/ui",
3
- "version": "24.4.59",
3
+ "version": "24.4.61",
4
4
  "description": "Centreon UI Components",
5
5
  "scripts": {
6
+ "update:deps": "pnpx npm-check-updates -i --format group",
6
7
  "eslint": "eslint ./src --ext .js,.jsx,.ts,.tsx --max-warnings 0",
7
8
  "eslint:fix": "pnpm eslint --fix",
8
9
  "storybook": "storybook dev -p 9001 -c .storybook",
@@ -12,6 +13,7 @@
12
13
  "test:ci": "jest --silent --reporter=jest-junit",
13
14
  "cypress:ui": "cypress open --component --browser=chrome",
14
15
  "cypress:cli:updateSnapshot": "pnpm cypress:cli --env updateSnapshots=true",
16
+ "cypress:run:coverage": "cypress run --component --browser=chrome --env codeCoverageTasksRegistered=true",
15
17
  "cypress:cli": "cypress run --component --browser=chrome",
16
18
  "tokens:transform": "TS_NODE_PROJECT=tsconfig.node.json ts-node style-dictionary.transform.ts"
17
19
  },
@@ -27,6 +29,7 @@
27
29
  "author": {
28
30
  "name": "centreon@centreon.com"
29
31
  },
32
+ "baseCodeCoveragePercentage": 60,
30
33
  "license": "GPL-2.0",
31
34
  "bugs": {
32
35
  "url": "https://github.com/centreon/centreon/issues"
@@ -46,11 +49,11 @@
46
49
  "test/*"
47
50
  ],
48
51
  "devDependencies": {
49
- "@cypress/react": "^7.0.2",
50
- "@cypress/webpack-dev-server": "^3.2.3",
51
- "@faker-js/faker": "^8.0.2",
52
- "@mdx-js/react": "^2.1.4",
53
- "@simonsmith/cypress-image-snapshot": "^6.1.0",
52
+ "@cypress/react": "^8.0.0",
53
+ "@cypress/webpack-dev-server": "^3.7.4",
54
+ "@faker-js/faker": "^8.4.1",
55
+ "@mdx-js/react": "^3.0.1",
56
+ "@simonsmith/cypress-image-snapshot": "^9.0.1",
54
57
  "@storybook/addon-a11y": "^7.0.9",
55
58
  "@storybook/addon-docs": "^7.0.9",
56
59
  "@storybook/addon-essentials": "^7.0.9",
@@ -60,73 +63,78 @@
60
63
  "@storybook/builder-vite": "^7.0.9",
61
64
  "@storybook/jest": "^0.1.0",
62
65
  "@storybook/manager-api": "^7.0.9",
63
- "@storybook/mdx2-csf": "^1.0.0",
66
+ "@storybook/mdx2-csf": "^1.1.0",
64
67
  "@storybook/preview-api": "^7.0.9",
65
68
  "@storybook/react": "^7.0.9",
66
69
  "@storybook/react-vite": "^7.0.9",
67
- "@storybook/test-runner": "^0.10.0",
70
+ "@storybook/test-runner": "^0.16.0",
68
71
  "@storybook/testing-library": "^0.1.0",
69
72
  "@storybook/theming": "^7.0.9",
70
73
  "@testing-library/cypress": "^8.0.7",
71
74
  "@testing-library/jest-dom": "^5.16.5",
72
75
  "@testing-library/react": "^13.4.0",
73
76
  "@testing-library/react-hooks": "^8.0.1",
74
- "@types/cypress": "^1.1.3",
75
- "@types/jest": "^27.5.0",
76
- "@types/ramda": "^0.28.12",
77
- "@types/react": "^18.0.26",
78
- "@types/testing-library__jest-dom": "^5.14.6",
79
- "@vitejs/plugin-react": "^4.0.0",
80
- "@vitejs/plugin-react-swc": "^3.3.0",
81
- "axios-mock-adapter": "^1.21.4",
82
- "cypress": "^12.8.0",
77
+ "@types/jest": "^29.5.12",
78
+ "@types/mocha": "^10.0.6",
79
+ "@types/ramda": "^0.29.9",
80
+ "@types/react": "^18.2.65",
81
+ "@types/testing-library__jest-dom": "^6.0.0",
82
+ "@vitejs/plugin-react": "^4.2.1",
83
+ "@vitejs/plugin-react-swc": "^3.6.0",
84
+ "axios-mock-adapter": "^1.22.0",
85
+ "cypress": "^13.7.0",
83
86
  "identity-obj-proxy": "^3.0.0",
84
87
  "jest-transform-stub": "^2.0.0",
85
88
  "mochawesome": "^7.1.3",
89
+ "msw": "1.3.2",
90
+ "msw-storybook-addon": "^1.10.0",
86
91
  "puppeteer": "^13.7.0",
87
92
  "react": "^18.2.0",
88
93
  "react-dom": "^18.2.0",
89
94
  "react-test-renderer": "^18.2.0",
90
95
  "remark-gfm": "^3.0.1",
91
- "sass": "^1.62.1",
92
96
  "speed-measure-vite-plugin": "^0.1.2",
93
- "storybook": "^7.0.9",
94
- "storybook-addon-mock": "^4.0.0",
95
- "storybook-dark-mode": "^3.0.0",
96
- "style-dictionary": "^3.8.0",
97
- "ts-node": "^10.9.1",
97
+ "storybook": "^7.6.8",
98
+ "storybook-addon-mock": "^4.3.0",
99
+ "storybook-dark-mode": "^3.0.3",
100
+ "style-dictionary": "^3.9.2",
101
+ "ts-node": "^10.9.2",
98
102
  "use-resize-observer": "^9.1.0",
99
103
  "vite": "^4.3.5",
104
+ "vite-plugin-istanbul": "^5.0.0",
100
105
  "vite-plugin-svgr": "^3.2.0",
101
- "vite-plugin-turbosnap": "^1.0.2"
106
+ "vite-plugin-turbosnap": "^1.0.3"
102
107
  },
103
108
  "dependencies": {
104
- "@lexical/link": "0.11.3",
105
- "@lexical/list": "^0.11.3",
106
- "@lexical/react": "0.11.3",
107
- "@lexical/rich-text": "^0.11.3",
108
- "@lexical/selection": "0.11.3",
109
- "@lexical/utils": "0.11.3",
109
+ "@lexical/html": "^0.12.6",
110
+ "@lexical/link": "^0.12.6",
111
+ "@lexical/list": "^0.12.6",
112
+ "@lexical/react": "^0.12.6",
113
+ "@lexical/rich-text": "^0.12.6",
114
+ "@lexical/selection": "^0.12.6",
115
+ "@lexical/utils": "^0.12.6",
110
116
  "@react-spring/web": "^9.7.3",
111
117
  "@visx/curve": "^2.1.0",
112
118
  "@visx/group": "^3.3.0",
113
- "@visx/pattern": "^3.0.0",
114
- "@visx/scale": "^3.0.0",
119
+ "@visx/legend": "^3.5.0",
120
+ "@visx/pattern": "^3.3.0",
121
+ "@visx/scale": "^3.5.0",
115
122
  "@visx/shape": "^2.12.2",
123
+ "@visx/text": "^3.3.0",
116
124
  "@visx/threshold": "^2.12.2",
117
125
  "@visx/visx": "2.16.0",
118
126
  "anylogger": "^1.0.11",
119
- "d3-array": "3.2.0",
120
- "humanize-duration": "^3.27.3",
121
- "lexical": "0.11.3",
122
- "msw": "0.49.1",
123
- "msw-storybook-addon": "^1.10.0",
124
- "notistack": "^2.0.8",
125
- "react-grid-layout": "^1.3.4",
127
+ "d3-array": "3.2.4",
128
+ "humanize-duration": "^3.31.0",
129
+ "lexical": "^0.12.6",
130
+ "notistack": "^3.0.1",
131
+ "numeral": "^2.0.6",
132
+ "ramda": "0.29.1",
133
+ "react-grid-layout": "^1.4.4",
126
134
  "react-html-parser": "^2.0.2",
127
135
  "react-resizable": "^3.0.5",
128
136
  "react-transition-group": "^4.4.5",
129
- "sanitize-html": "^2.10.0",
137
+ "sanitize-html": "^2.12.1",
130
138
  "ulog": "^2.0.0-beta.19"
131
139
  },
132
140
  "peerDependencies": {
@@ -137,8 +145,8 @@
137
145
  "@mui/icons-material": "5.x",
138
146
  "@mui/material": "5.x",
139
147
  "@mui/styles": "5.x",
140
- "@tanstack/react-query": "4.x",
141
- "axios": "0.x",
148
+ "@tanstack/react-query": "5.x",
149
+ "axios": ">= 1.6.4",
142
150
  "dayjs": "1.x",
143
151
  "formik": "2.x",
144
152
  "jotai": "2.x",
@@ -2,7 +2,7 @@
2
2
  /* tslint:disable */
3
3
 
4
4
  /**
5
- * Mock Service Worker (0.49.1).
5
+ * Mock Service Worker (1.3.2).
6
6
  * @see https://github.com/mswjs/msw
7
7
  * - Please do NOT modify this file.
8
8
  * - Please do NOT serve this file on production.
@@ -1,7 +1,7 @@
1
1
  import { makeStyles } from 'tss-react/mui';
2
2
  import { equals } from 'ramda';
3
3
 
4
- import { Theme, alpha } from '@mui/material';
4
+ import { Theme } from '@mui/material';
5
5
 
6
6
  interface GetBackgroundAndColorProps {
7
7
  status: string;
@@ -18,96 +18,65 @@ export const useStyles = makeStyles()((theme) => ({
18
18
  '& .MuiListItemText-secondary': {
19
19
  textWrap: 'pretty'
20
20
  },
21
- '&[data-variant="error"]': {
21
+
22
+ '&:hover': {
22
23
  '& .MuiListItemIcon-root': {
23
- color: getColor({ status: 'error', theme })
24
- },
24
+ color: getColor({ status: 'info', theme })
25
+ }
26
+ },
27
+ '&[data-variant="error"]': {
25
28
  '&:hover': {
26
- background: alpha(
27
- theme.palette.error.main,
28
- theme.palette.action.focusOpacity
29
- ),
30
- color: getColor({ status: 'error', theme })
31
- },
32
- color: theme.palette.error.main
29
+ '& .MuiListItemIcon-root': {
30
+ color: getColor({ status: 'error', theme })
31
+ }
32
+ }
33
33
  },
34
34
  '&[data-variant="info"]': {
35
- '& .MuiListItemIcon-root': {
36
- color: getColor({ status: 'info', theme })
37
- },
38
35
  '&:hover': {
39
- background: alpha(
40
- theme.palette.info.main,
41
- theme.palette.action.focusOpacity
42
- ),
43
- color: getColor({ status: 'info', theme })
44
- },
45
- color: theme.palette.info.main
36
+ '& .MuiListItemIcon-root': {
37
+ color: getColor({ status: 'info', theme })
38
+ }
39
+ }
46
40
  },
41
+
47
42
  '&[data-variant="pending"]': {
48
- '& .MuiListItemIcon-root': {
49
- color: getColor({ status: 'pending', theme })
50
- },
51
43
  '&:hover': {
52
- background: alpha(
53
- theme.palette.pending.main,
54
- theme.palette.action.focusOpacity
55
- ),
56
- color: getColor({ status: 'pending', theme })
57
- },
58
- color: theme.palette.pending.main
44
+ '& .MuiListItemIcon-root': {
45
+ color: getColor({ status: 'pending', theme })
46
+ }
47
+ }
59
48
  },
49
+
60
50
  '&[data-variant="primary"]': {
61
- '& .MuiListItemIcon-root': {
62
- color: getColor({ status: 'primary', theme })
63
- },
64
51
  '&:hover': {
65
- background: alpha(
66
- theme.palette.primary.main,
67
- theme.palette.action.focusOpacity
68
- ),
69
- color: getColor({ status: 'primary', theme })
70
- },
71
- color: theme.palette.primary.main
52
+ '& .MuiListItemIcon-root': {
53
+ color: getColor({ status: 'primary', theme })
54
+ }
55
+ }
72
56
  },
57
+
73
58
  '&[data-variant="secondary"]': {
74
- '& .MuiListItemIcon-root': {
75
- color: getColor({ status: 'secondary', theme })
76
- },
77
59
  '&:hover': {
78
- background: alpha(
79
- theme.palette.secondary.main,
80
- theme.palette.action.focusOpacity
81
- ),
82
- color: getColor({ status: 'secondary', theme })
83
- },
84
- color: theme.palette.secondary.main
60
+ '& .MuiListItemIcon-root': {
61
+ color: getColor({ status: 'secondary', theme })
62
+ }
63
+ }
85
64
  },
65
+
86
66
  '&[data-variant="success"]': {
87
- '& .MuiListItemIcon-root': {
88
- color: getColor({ status: 'success', theme })
89
- },
90
67
  '&:hover': {
91
- background: alpha(
92
- theme.palette.success.main,
93
- theme.palette.action.focusOpacity
94
- ),
95
- color: getColor({ status: 'success', theme })
96
- },
97
- color: theme.palette.success.main
68
+ '& .MuiListItemIcon-root': {
69
+ color: getColor({ status: 'success', theme })
70
+ }
71
+ }
98
72
  },
73
+
99
74
  '&[data-variant="warning"]': {
100
- '& .MuiListItemIcon-root': {
101
- color: getColor({ status: 'warning', theme })
102
- },
103
75
  '&:hover': {
104
- background: alpha(
105
- theme.palette.warning.main,
106
- theme.palette.action.focusOpacity
107
- ),
108
- color: getColor({ status: 'warning', theme })
109
- },
110
- color: theme.palette.warning.main
76
+ '& .MuiListItemIcon-root': {
77
+ color: getColor({ status: 'warning', theme })
78
+ }
79
+ }
111
80
  }
112
81
  },
113
82
  list: {
@@ -21,7 +21,7 @@ type Props = {
21
21
  ariaLabel?: string;
22
22
  className?: string;
23
23
  onClick: (event) => void;
24
- title?: string;
24
+ title?: string | JSX.Element;
25
25
  tooltipClassName?: string;
26
26
  tooltipPlacement?:
27
27
  | 'bottom'
@@ -15,9 +15,9 @@ interface Props {
15
15
 
16
16
  const StartIcon = ({ startIconConfig }: Props): JSX.Element | null =>
17
17
  cond<Array<StartIconConfigProps>, JSX.Element | null>([
18
- [pipe(propEq('hasLabel', true), not), always(null)],
19
- [propEq('succeeded', true), always(<CheckIcon />)],
20
- [propEq('loading', true), always(<SaveIcon />)],
18
+ [pipe(propEq(true, 'hasLabel'), not), always(null)],
19
+ [propEq(true, 'succeeded'), always(<CheckIcon />)],
20
+ [propEq(true, 'loading'), always(<SaveIcon />)],
21
21
  [T, always(<SaveIcon />)]
22
22
  ])(startIconConfig);
23
23
 
@@ -1,13 +1,13 @@
1
1
  import { any, isEmpty, isNil, not, or, pipe } from 'ramda';
2
2
  import { makeStyles } from 'tss-react/mui';
3
3
 
4
+ import { LoadingButton, LoadingButtonProps } from '@mui/lab';
4
5
  import { Theme, Tooltip } from '@mui/material';
5
- import { LoadingButton } from '@mui/lab';
6
6
 
7
7
  import { getNormalizedId } from '../../utils';
8
8
 
9
- import StartIcon from './StartIcon';
10
9
  import Content from './Content';
10
+ import StartIcon from './StartIcon';
11
11
 
12
12
  const useStyles = makeStyles()((theme: Theme) => ({
13
13
  loadingButton: {
@@ -15,13 +15,14 @@ const useStyles = makeStyles()((theme: Theme) => ({
15
15
  }
16
16
  }));
17
17
 
18
- interface Props extends Record<string, unknown> {
18
+ interface Props {
19
19
  className?: string;
20
20
  labelLoading?: string;
21
21
  labelSave?: string;
22
22
  labelSucceeded?: string;
23
23
  loading?: boolean;
24
24
  size?: 'small' | 'medium' | 'large';
25
+ startIcon?: boolean;
25
26
  succeeded?: boolean;
26
27
  tooltip?: string;
27
28
  tooltipLabel?: string;
@@ -45,8 +46,9 @@ const SaveButton = ({
45
46
  labelSave = '',
46
47
  size = 'small',
47
48
  className,
49
+ startIcon = true,
48
50
  ...rest
49
- }: Props): JSX.Element => {
51
+ }: Props & LoadingButtonProps): JSX.Element => {
50
52
  const { classes, cx } = useStyles();
51
53
  const hasLabel = hasValue([labelLoading, labelSave, labelSucceeded]);
52
54
 
@@ -73,7 +75,9 @@ const SaveButton = ({
73
75
  loading={loading}
74
76
  loadingPosition={labelLoading ? 'start' : 'center'}
75
77
  size={size}
76
- startIcon={<StartIcon startIconConfig={startIconConfig} />}
78
+ startIcon={
79
+ startIcon && <StartIcon startIconConfig={startIconConfig} />
80
+ }
77
81
  variant="contained"
78
82
  {...rest}
79
83
  >
@@ -2,7 +2,7 @@ import { makeStyles } from 'tss-react/mui';
2
2
  import { T, always, cond, equals } from 'ramda';
3
3
 
4
4
  import { SvgIconComponent } from '@mui/icons-material';
5
- import Typography, { TypographyTypeMap } from '@mui/material/Typography';
5
+ import Typography, { TypographyProps } from '@mui/material/Typography';
6
6
  import { FormControlLabel, Checkbox as MuiCheckbox, Box } from '@mui/material';
7
7
 
8
8
  export type LabelPlacement = 'bottom' | 'top' | 'end' | 'start' | undefined;
@@ -56,7 +56,7 @@ interface Props {
56
56
  disabled?: boolean;
57
57
  label: string;
58
58
  labelPlacement?: LabelPlacement;
59
- labelProps?: TypographyTypeMap['props'];
59
+ labelProps?: TypographyProps;
60
60
  onChange?: (e) => void;
61
61
  }
62
62
 
@@ -2,7 +2,7 @@ import { equals, includes } from 'ramda';
2
2
  import { makeStyles } from 'tss-react/mui';
3
3
 
4
4
  import FormGroup, { FormGroupProps } from '@mui/material/FormGroup';
5
- import { TypographyTypeMap } from '@mui/material/Typography';
5
+ import { TypographyProps } from '@mui/material/Typography';
6
6
 
7
7
  import Checkbox, { LabelPlacement } from '../Checkbox';
8
8
 
@@ -13,7 +13,7 @@ interface Props {
13
13
  disabled?: boolean;
14
14
  formGroupProps?: FormGroupProps;
15
15
  labelPlacement?: LabelPlacement;
16
- labelProps?: TypographyTypeMap['props'];
16
+ labelProps?: TypographyProps;
17
17
  onChange?: (e) => void;
18
18
  options: Array<string>;
19
19
  values: Array<string>;
@@ -27,7 +27,7 @@ interface DashboardItemProps {
27
27
  style?: CSSProperties;
28
28
  }
29
29
 
30
- const Item = forwardRef(
30
+ const Item = forwardRef<HTMLDivElement, DashboardItemProps>(
31
31
  (
32
32
  {
33
33
  children,
@@ -23,7 +23,7 @@ interface DashboardLayoutProps<T> {
23
23
  layout: Array<T>;
24
24
  }
25
25
 
26
- const Layout = <T extends Layout>({
26
+ const DashboardLayout = <T extends Layout>({
27
27
  children,
28
28
  changeLayout,
29
29
  displayGrid,
@@ -76,4 +76,4 @@ const Layout = <T extends Layout>({
76
76
  });
77
77
  };
78
78
 
79
- export default Layout;
79
+ export default DashboardLayout;
@@ -1,4 +1,4 @@
1
- import { DialogContentText, Typography } from '@mui/material';
1
+ import { ButtonProps, DialogContentText, Typography } from '@mui/material';
2
2
 
3
3
  import Dialog, { Props as DialogProps } from '..';
4
4
 
@@ -6,15 +6,23 @@ type Props = DialogProps & {
6
6
  children?: JSX.Element;
7
7
  labelMessage?: string | null;
8
8
  labelSecondMessage?: string | null;
9
+ restCancelButtonProps?: ButtonProps;
10
+ restConfirmButtonProps?: ButtonProps;
9
11
  };
10
12
 
11
13
  const Confirm = ({
12
14
  labelMessage,
13
15
  labelSecondMessage,
14
16
  children,
17
+ restCancelButtonProps,
18
+ restConfirmButtonProps,
15
19
  ...rest
16
20
  }: Props): JSX.Element => (
17
- <Dialog {...rest}>
21
+ <Dialog
22
+ restCancelButtonProps={restCancelButtonProps}
23
+ restConfirmButtonProps={restConfirmButtonProps}
24
+ {...rest}
25
+ >
18
26
  <DialogContentText>
19
27
  {labelMessage && <Typography>{labelMessage}</Typography>}
20
28
  {labelSecondMessage && <Typography>{labelSecondMessage}</Typography>}
@@ -1,18 +1,17 @@
1
1
  import { not } from 'ramda';
2
2
  import { useTranslation } from 'react-i18next';
3
3
 
4
- import { ConfirmDialog } from '../..';
4
+ import { Modal } from '../../components/Modal';
5
5
 
6
6
  import {
7
7
  labelDiscard,
8
8
  labelDoYouWantToQuitWithoutResolving,
9
- labelDoYouWantToQuitWithoutSaving,
10
9
  labelDoYouWantToResolveErrors,
11
10
  labelDoYouWantToSaveChanges,
12
11
  labelResolve,
13
12
  labelSave,
14
13
  labelThereAreErrorsInTheForm,
15
- labelYourFormHasUnsavedChanges
14
+ labelIfYouClickOnDiscard
16
15
  } from './translatedLabels';
17
16
 
18
17
  interface Props {
@@ -40,30 +39,32 @@ const UnsavedChangesDialog = ({
40
39
  const labelConfirm = isValidForm ? labelSave : labelResolve;
41
40
 
42
41
  const labelMessage = `${
43
- isValidForm ? labelYourFormHasUnsavedChanges : labelThereAreErrorsInTheForm
44
- }. ${
45
- isValidForm
46
- ? labelDoYouWantToQuitWithoutSaving
47
- : labelDoYouWantToQuitWithoutResolving
48
- }`;
42
+ isValidForm ? labelIfYouClickOnDiscard : labelThereAreErrorsInTheForm
43
+ }. ${isValidForm ? '' : labelDoYouWantToQuitWithoutResolving}`;
49
44
 
50
45
  if (not(dialogOpened)) {
51
46
  return null;
52
47
  }
53
48
 
54
49
  return (
55
- <ConfirmDialog
56
- confirmDisabled={isSubmitting}
57
- labelCancel={t(labelDiscard)}
58
- labelConfirm={t(labelConfirm)}
59
- labelMessage={t(labelMessage)}
60
- labelTitle={t(labelTitle)}
50
+ <Modal
51
+ hasCloseButton
61
52
  open={dialogOpened}
62
- submitting={isSubmitting}
63
- onBackdropClick={closeDialog}
64
- onCancel={discardChanges}
65
- onConfirm={isValidForm ? saveChanges : closeDialog}
66
- />
53
+ size="medium"
54
+ onClose={closeDialog}
55
+ >
56
+ <Modal.Header>{t(labelTitle)}</Modal.Header>
57
+ <Modal.Body>{t(labelMessage)}</Modal.Body>
58
+ <Modal.Actions
59
+ disabled={isSubmitting}
60
+ labels={{
61
+ cancel: t(labelDiscard),
62
+ confirm: t(labelConfirm)
63
+ }}
64
+ onCancel={discardChanges}
65
+ onConfirm={isValidForm ? saveChanges : closeDialog}
66
+ />
67
+ </Modal>
67
68
  );
68
69
  };
69
70
 
@@ -1,9 +1,8 @@
1
1
  export const labelDiscard = 'Discard';
2
2
  export const labelResolve = 'Resolve';
3
- export const labelYourFormHasUnsavedChanges = 'Your form has unsaved changes';
3
+ export const labelIfYouClickOnDiscard =
4
+ 'If you click on Discard, your changes will not be saved.';
4
5
  export const labelThereAreErrorsInTheForm = 'There are errors in the form';
5
- export const labelDoYouWantToQuitWithoutSaving =
6
- 'Do you want to quit the form without saving the changes?';
7
6
  export const labelDoYouWantToQuitWithoutResolving =
8
7
  'Do you want to quit the form without resolving the errors?';
9
8
  export const labelDoYouWantToSaveChanges = 'Do you want to save the changes?';
@@ -14,11 +13,10 @@ export const labelSave = 'Save';
14
13
  export default {
15
14
  labelDiscard,
16
15
  labelDoYouWantToQuitWithoutResolving,
17
- labelDoYouWantToQuitWithoutSaving,
18
16
  labelDoYouWantToResolveErrors,
19
17
  labelDoYouWantToSaveChanges,
18
+ labelIfYouClickOnDiscard,
20
19
  labelResolve,
21
20
  labelSave,
22
- labelThereAreErrorsInTheForm,
23
- labelYourFormHasUnsavedChanges
21
+ labelThereAreErrorsInTheForm
24
22
  };
@@ -9,7 +9,8 @@ import {
9
9
  DialogContent,
10
10
  DialogActions,
11
11
  DialogProps,
12
- CircularProgress
12
+ CircularProgress,
13
+ ButtonProps
13
14
  } from '@mui/material';
14
15
 
15
16
  import { DataTestAttributes } from '../@types/data-attributes';
@@ -43,11 +44,13 @@ export type Props = {
43
44
  dialogTitleClassName?: string;
44
45
  labelCancel?: string | null;
45
46
  labelConfirm?: string | null;
46
- labelTitle?: string | null;
47
+ labelTitle?: ReactNode;
47
48
  onCancel?: () => void;
48
49
  onClose?: () => void;
49
50
  onConfirm: (event, value?) => void;
50
51
  open: boolean;
52
+ restCancelButtonProps?: ButtonProps;
53
+ restConfirmButtonProps?: ButtonProps;
51
54
  submitting?: boolean;
52
55
  } & DialogProps &
53
56
  DataTestAttributes;
@@ -70,6 +73,8 @@ const Dialog = ({
70
73
  dialogContentClassName,
71
74
  dialogActionsClassName,
72
75
  dialogConfirmButtonClassName,
76
+ restCancelButtonProps,
77
+ restConfirmButtonProps,
73
78
  ...rest
74
79
  }: Props): JSX.Element => {
75
80
  const { classes, cx } = useStyles({ contentWidth });
@@ -101,6 +106,7 @@ const Dialog = ({
101
106
  data-testid="Cancel"
102
107
  disabled={cancelDisabled}
103
108
  onClick={onCancel}
109
+ {...restCancelButtonProps}
104
110
  >
105
111
  {labelCancel}
106
112
  </Button>
@@ -113,6 +119,7 @@ const Dialog = ({
113
119
  disabled={confirmDisabled}
114
120
  endIcon={submitting && <CircularProgress size={15} />}
115
121
  onClick={onConfirm}
122
+ {...restConfirmButtonProps}
116
123
  >
117
124
  {labelConfirm}
118
125
  </Button>
@@ -17,7 +17,7 @@ const useStyles = makeStyles()((theme) => ({
17
17
  logo: {
18
18
  alignSelf: 'flex-end',
19
19
  height: theme.spacing(11),
20
- width: '22rem'
20
+ width: '239px'
21
21
  },
22
22
  message: {
23
23
  color: theme.palette.text.primary
@@ -66,9 +66,9 @@ export const FallbackPage: FC<FallbackPageProps> = typedMemo(
66
66
 
67
67
  return (
68
68
  <div className={classes.notAuthorizedContainer}>
69
- <section className={classes.logo}>
69
+ <div className={classes.logo}>
70
70
  <CentreonLogo />
71
- </section>
71
+ </div>
72
72
  <section className={classes.messageBlock}>
73
73
  <header>
74
74
  <Typography color="primary" fontWeight="bold" variant="h3">