@centreon/ui 24.4.1-sync-release-34022.1 → 24.4.1-test-code-coverage.1

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 (220) hide show
  1. package/package.json +48 -40
  2. package/src/ActionsList/ActionsList.styles.ts +40 -71
  3. package/src/Button/Icon/index.stories.tsx +1 -1
  4. package/src/Button/Icon/index.tsx +1 -1
  5. package/src/Dashboard/Dashboard.styles.ts +6 -5
  6. package/src/Dialog/Confirm/index.tsx +10 -2
  7. package/src/Dialog/UnsavedChanges/index.tsx +21 -20
  8. package/src/Dialog/UnsavedChanges/translatedLabels.ts +4 -6
  9. package/src/Dialog/index.tsx +8 -1
  10. package/src/Form/Inputs/CheckboxGroup.tsx +4 -1
  11. package/src/Form/Inputs/Text.tsx +3 -1
  12. package/src/Form/Inputs/models.ts +1 -0
  13. package/src/Graph/BarStack/BarStack.cypress.spec.tsx +139 -0
  14. package/src/Graph/BarStack/BarStack.stories.tsx +123 -0
  15. package/src/Graph/BarStack/BarStack.styles.ts +37 -0
  16. package/src/Graph/BarStack/BarStack.tsx +14 -0
  17. package/src/Graph/BarStack/ResponsiveBarStack.tsx +209 -0
  18. package/src/Graph/BarStack/index.ts +1 -0
  19. package/src/Graph/BarStack/models.ts +19 -0
  20. package/src/Graph/BarStack/useResponsiveBarStack.ts +131 -0
  21. package/src/Graph/Gauge/Gauge.cypress.spec.tsx +102 -0
  22. package/src/Graph/Gauge/Gauge.tsx +1 -1
  23. package/src/Graph/HeatMap/HeatMap.cypress.spec.tsx +145 -0
  24. package/src/Graph/HeatMap/HeatMap.stories.tsx +0 -25
  25. package/src/Graph/HeatMap/ResponsiveHeatMap.tsx +8 -2
  26. package/src/Graph/Legend/Legend.tsx +21 -0
  27. package/src/Graph/Legend/index.ts +1 -0
  28. package/src/Graph/Legend/models.ts +11 -0
  29. package/src/Graph/LineChart/BasicComponents/Lines/Threshold/index.tsx +4 -5
  30. package/src/Graph/LineChart/BasicComponents/ThresholdLine.tsx +3 -1
  31. package/src/Graph/LineChart/Header/index.tsx +3 -31
  32. package/src/Graph/LineChart/InteractiveComponents/AnchorPoint/useTickGraph.ts +9 -11
  33. package/src/Graph/LineChart/InteractiveComponents/Annotations/Annotation/index.tsx +3 -2
  34. package/src/Graph/LineChart/InteractiveComponents/GraphValueTooltip/GraphValueTooltip.tsx +68 -0
  35. package/src/Graph/LineChart/InteractiveComponents/GraphValueTooltip/useGraphValueTooltip.ts +27 -0
  36. package/src/Graph/LineChart/InteractiveComponents/GraphValueTooltip/useGraphValueTooltipStyles.ts +31 -0
  37. package/src/Graph/LineChart/InteractiveComponents/index.tsx +132 -17
  38. package/src/Graph/LineChart/InteractiveComponents/interactionWithGraphAtoms.ts +7 -27
  39. package/src/Graph/LineChart/Legend/Legend.styles.ts +5 -9
  40. package/src/Graph/LineChart/Legend/LegendHeader.tsx +10 -22
  41. package/src/Graph/LineChart/Legend/index.tsx +17 -55
  42. package/src/Graph/LineChart/LineChart.cypress.spec.tsx +91 -0
  43. package/src/Graph/LineChart/LineChart.styles.ts +8 -0
  44. package/src/Graph/LineChart/LineChart.tsx +106 -116
  45. package/src/Graph/LineChart/LoadingSkeleton.tsx +2 -2
  46. package/src/Graph/LineChart/index.tsx +6 -7
  47. package/src/Graph/LineChart/mockedData/lastDayWithIncompleteValues.json +1320 -0
  48. package/src/Graph/LineChart/mockedData/lastDayWithNullValues.json +1314 -0
  49. package/src/Graph/LineChart/models.ts +12 -1
  50. package/src/Graph/PieChart/PieChart.cypress.spec.tsx +154 -0
  51. package/src/Graph/PieChart/PieChart.stories.tsx +194 -0
  52. package/src/Graph/PieChart/PieChart.styles.ts +39 -0
  53. package/src/Graph/PieChart/PieChart.tsx +14 -0
  54. package/src/Graph/PieChart/ResponsivePie.tsx +243 -0
  55. package/src/Graph/PieChart/index.ts +1 -0
  56. package/src/Graph/PieChart/models.ts +19 -0
  57. package/src/Graph/PieChart/useResponsivePie.ts +81 -0
  58. package/src/Graph/SingleBar/SingleBar.cypress.spec.tsx +121 -0
  59. package/src/Graph/Text/Text.cypress.spec.tsx +101 -0
  60. package/src/Graph/Text/Text.styles.ts +12 -1
  61. package/src/Graph/Text/Text.tsx +17 -12
  62. package/src/Graph/Tree/DescendantNodes.tsx +89 -0
  63. package/src/Graph/Tree/Links.tsx +77 -0
  64. package/src/Graph/Tree/StandaloneTree.tsx +32 -0
  65. package/src/Graph/Tree/Tree.cypress.spec.tsx +195 -0
  66. package/src/Graph/Tree/Tree.stories.tsx +160 -0
  67. package/src/Graph/Tree/Tree.tsx +116 -0
  68. package/src/Graph/Tree/constants.ts +2 -0
  69. package/src/Graph/Tree/index.ts +4 -0
  70. package/src/Graph/Tree/models.ts +55 -0
  71. package/src/Graph/Tree/stories/contents.tsx +164 -0
  72. package/src/Graph/Tree/stories/datas.ts +305 -0
  73. package/src/Graph/Tree/utils.ts +49 -0
  74. package/src/Graph/common/testUtils.ts +71 -0
  75. package/src/Graph/common/timeSeries/index.ts +50 -12
  76. package/src/Graph/common/utils.ts +19 -0
  77. package/src/Graph/index.ts +4 -0
  78. package/src/InputField/Number/Number.cypress.spec.tsx +85 -0
  79. package/src/InputField/Number/Number.stories.tsx +66 -0
  80. package/src/InputField/Number/Number.tsx +74 -0
  81. package/src/InputField/Search/index.tsx +2 -2
  82. package/src/InputField/Select/Autocomplete/Multi/index.tsx +4 -2
  83. package/src/InputField/Select/Autocomplete/index.tsx +10 -3
  84. package/src/InputField/Select/IconPopover/index.tsx +1 -1
  85. package/src/InputField/Select/index.tsx +14 -1
  86. package/src/InputField/Text/index.tsx +38 -38
  87. package/src/Listing/ActionBar/index.tsx +10 -10
  88. package/src/Listing/Cell/DataCell.styles.ts +3 -0
  89. package/src/Listing/Cell/DataCell.tsx +8 -4
  90. package/src/Listing/Listing.cypress.spec.tsx +217 -33
  91. package/src/Listing/Listing.styles.ts +3 -5
  92. package/src/Listing/Row/Row.tsx +7 -3
  93. package/src/Listing/index.stories.tsx +25 -2
  94. package/src/Listing/index.test.tsx +1 -1
  95. package/src/Listing/index.tsx +202 -143
  96. package/src/Listing/models.ts +1 -0
  97. package/src/Listing/useStyleTable.ts +1 -0
  98. package/src/Panel/index.tsx +1 -1
  99. package/src/PopoverMenu/index.tsx +6 -5
  100. package/src/ThemeProvider/index.tsx +3 -0
  101. package/src/TimePeriods/CustomTimePeriod/CompactCustomTimePeriod.styles.ts +6 -7
  102. package/src/TimePeriods/ResolutionTimePeriod.cypress.spec.tsx +12 -9
  103. package/src/Typography/FluidTypography/FluidTypography.cypress.spec.tsx +27 -0
  104. package/src/Typography/FluidTypography/index.stories.tsx +2 -2
  105. package/src/Typography/FluidTypography/index.tsx +21 -28
  106. package/src/api/index.ts +3 -3
  107. package/src/api/useGraphQuery/index.ts +26 -5
  108. package/src/api/useGraphQuery/models.ts +5 -0
  109. package/src/api/useMutationQuery/index.test.ts +4 -4
  110. package/src/api/useMutationQuery/index.ts +24 -13
  111. package/src/components/CollapsibleItem/CollapsibleItem.cypress.spec.tsx +76 -0
  112. package/src/components/CollapsibleItem/CollapsibleItem.stories.tsx +26 -0
  113. package/src/components/CollapsibleItem/CollapsibleItem.tsx +43 -14
  114. package/src/components/CollapsibleItem/useCollapsibleItemStyles.ts +24 -1
  115. package/src/components/DataTable/DataTable.cypress.spec.tsx +14 -33
  116. package/src/components/DataTable/Item/DataTableItem.tsx +4 -60
  117. package/src/components/Form/{AccessRightsV2 → AccessRights}/AccessRights.cypress.spec.tsx +36 -13
  118. package/src/components/Form/{AccessRightsV2 → AccessRights}/ShareInput/ContactSwitch.tsx +11 -3
  119. package/src/components/Form/{AccessRightsV2 → AccessRights}/ShareInput/ShareInput.styles.ts +8 -0
  120. package/src/components/Form/{AccessRightsV2 → AccessRights}/ShareInput/ShareInput.tsx +1 -0
  121. package/src/components/Form/{AccessRightsV2 → AccessRights}/ShareInput/useShareInput.tsx +4 -0
  122. package/src/components/Form/{AccessRightsV2 → AccessRights}/models.ts +1 -0
  123. package/src/components/Form/{AccessRightsV2 → AccessRights}/storiesData.ts +23 -22
  124. package/src/components/Form/Dashboard/DashboardDuplicationForm.tsx +85 -0
  125. package/src/components/Form/Dashboard/index.ts +1 -0
  126. package/src/components/Form/FormActions.tsx +7 -2
  127. package/src/components/Form/index.ts +2 -2
  128. package/src/components/ItemComposition/Item.tsx +1 -1
  129. package/src/components/ItemComposition/ItemComposition.cypress.spec.tsx +113 -0
  130. package/src/components/ItemComposition/ItemComposition.stories.tsx +14 -0
  131. package/src/components/ItemComposition/ItemComposition.styles.ts +36 -3
  132. package/src/components/ItemComposition/ItemComposition.tsx +41 -17
  133. package/src/components/List/Item/ListItem.tsx +3 -3
  134. package/src/components/Modal/ConfirmationModal/ConfirmationModal.cypress.spec.tsx +168 -0
  135. package/src/components/Modal/ConfirmationModal/ConfirmationModal.stories.tsx +62 -0
  136. package/src/components/Modal/ConfirmationModal/ConfirmationModal.tsx +87 -0
  137. package/src/components/Modal/Modal.styles.ts +8 -3
  138. package/src/components/Modal/index.ts +2 -0
  139. package/src/components/Tooltip/ConfirmationTooltip/ConfirmationTooltip.stories.tsx +3 -3
  140. package/src/components/Tooltip/ConfirmationTooltip/ConfirmationTooltip.tsx +1 -1
  141. package/src/components/Tooltip/ConfirmationTooltip/models.ts +1 -1
  142. package/src/components/Zoom/Minimap.tsx +129 -0
  143. package/src/components/Zoom/Zoom.cypress.spec.tsx +246 -0
  144. package/src/components/Zoom/Zoom.stories.tsx +115 -0
  145. package/src/components/Zoom/Zoom.styles.tsx +68 -0
  146. package/src/components/Zoom/Zoom.tsx +64 -0
  147. package/src/components/Zoom/ZoomContent.tsx +170 -0
  148. package/src/components/Zoom/constants.ts +2 -0
  149. package/src/components/Zoom/localPoint.ts +51 -0
  150. package/src/components/Zoom/models.ts +25 -0
  151. package/src/components/Zoom/useMinimap.ts +156 -0
  152. package/src/components/Zoom/useZoom.ts +70 -0
  153. package/src/components/Zoom/utils.ts +55 -0
  154. package/src/components/index.ts +1 -0
  155. package/src/index.ts +1 -0
  156. package/src/utils/index.ts +3 -0
  157. package/src/utils/resourcesStatusURL.ts +166 -0
  158. package/src/utils/useFullscreen/Fullscreen.cypress.spec.tsx +130 -0
  159. package/src/utils/useFullscreen/atoms.ts +3 -0
  160. package/src/utils/useFullscreen/index.ts +2 -0
  161. package/src/utils/useFullscreen/translatedLabels.ts +1 -0
  162. package/src/utils/useFullscreen/useFullscreen.ts +73 -0
  163. package/src/utils/useFullscreen/useFullscreenListener.ts +62 -0
  164. package/src/utils/useInfiniteScrollListing.ts +4 -1
  165. package/src/Graph/LineChart/BasicComponents/LoadingProgress.tsx +0 -46
  166. package/src/Graph/LineChart/InteractiveComponents/AnchorPoint/TooltipAnchorPoint.tsx +0 -96
  167. package/src/Graph/LineChart/InteractiveComponents/AnchorPoint/useTooltipAnchorPoint.ts +0 -107
  168. package/src/Graph/LineChart/Legend/InteractiveValue.tsx +0 -22
  169. package/src/Graph/LineChart/Legend/useInteractiveValues.ts +0 -99
  170. package/src/Typography/FluidTypography/useFluidResizeObserver.ts +0 -56
  171. package/src/components/Form/AccessRights/AccessRights.resource.ts +0 -45
  172. package/src/components/Form/AccessRights/AccessRightsForm.stories.tsx +0 -59
  173. package/src/components/Form/AccessRights/AccessRightsForm.styles.ts +0 -21
  174. package/src/components/Form/AccessRights/AccessRightsForm.tsx +0 -67
  175. package/src/components/Form/AccessRights/AccessRightsFormActions.tsx +0 -80
  176. package/src/components/Form/AccessRights/Input/AddAction.tsx +0 -31
  177. package/src/components/Form/AccessRights/Input/ContactAccessRightInput.stories.tsx +0 -54
  178. package/src/components/Form/AccessRights/Input/ContactAccessRightInput.tsx +0 -72
  179. package/src/components/Form/AccessRights/Input/ContactAccessRightsInput.styles.ts +0 -22
  180. package/src/components/Form/AccessRights/Input/ContactInputField.tsx +0 -105
  181. package/src/components/Form/AccessRights/Input/RoleInputField.tsx +0 -29
  182. package/src/components/Form/AccessRights/List/ContactAccessRightsList.stories.tsx +0 -97
  183. package/src/components/Form/AccessRights/List/ContactAccessRightsList.styles.ts +0 -71
  184. package/src/components/Form/AccessRights/List/ContactAccessRightsList.tsx +0 -51
  185. package/src/components/Form/AccessRights/List/ContactAccessRightsListItem.stories.tsx +0 -116
  186. package/src/components/Form/AccessRights/List/ContactAccessRightsListItem.tsx +0 -118
  187. package/src/components/Form/AccessRights/List/ContactAccessRightsListItemSkeleton.tsx +0 -26
  188. package/src/components/Form/AccessRights/List/ContactAccessRightsListSkeleton.tsx +0 -28
  189. package/src/components/Form/AccessRights/Stats/AccessRightsStats.styles.ts +0 -18
  190. package/src/components/Form/AccessRights/Stats/AccessRightsStats.tsx +0 -41
  191. package/src/components/Form/AccessRights/__fixtures__/contactAccessRight.mock.ts +0 -54
  192. package/src/components/Form/AccessRights/common/GroupLabel.styles.ts +0 -18
  193. package/src/components/Form/AccessRights/common/GroupLabel.tsx +0 -15
  194. package/src/components/Form/AccessRights/common/Input.styles.ts +0 -48
  195. package/src/components/Form/AccessRights/common/RoleInputSelect.styles.ts +0 -11
  196. package/src/components/Form/AccessRights/common/RoleInputSelect.tsx +0 -57
  197. package/src/components/Form/AccessRights/index.ts +0 -3
  198. package/src/components/Form/AccessRights/useAccessRightsForm.test.tsx +0 -531
  199. package/src/components/Form/AccessRights/useAccessRightsForm.tsx +0 -282
  200. package/src/components/Form/AccessRights/useAccessRightsForm.utils.ts +0 -41
  201. /package/src/components/Form/{AccessRightsV2 → AccessRights}/AccessRights.stories.tsx +0 -0
  202. /package/src/components/Form/{AccessRightsV2 → AccessRights}/AccessRights.styles.ts +0 -0
  203. /package/src/components/Form/{AccessRightsV2 → AccessRights}/AccessRights.tsx +0 -0
  204. /package/src/components/Form/{AccessRightsV2 → AccessRights}/Actions/Actions.styles.ts +0 -0
  205. /package/src/components/Form/{AccessRightsV2 → AccessRights}/Actions/Actions.tsx +0 -0
  206. /package/src/components/Form/{AccessRightsV2 → AccessRights}/Actions/useActions.ts +0 -0
  207. /package/src/components/Form/{AccessRightsV2 → AccessRights}/List/Item.tsx +0 -0
  208. /package/src/components/Form/{AccessRightsV2 → AccessRights}/List/List.styles.tsx +0 -0
  209. /package/src/components/Form/{AccessRightsV2 → AccessRights}/List/List.tsx +0 -0
  210. /package/src/components/Form/{AccessRightsV2 → AccessRights}/List/ListItemSkeleton.tsx +0 -0
  211. /package/src/components/Form/{AccessRightsV2 → AccessRights}/List/ListSkeleton.tsx +0 -0
  212. /package/src/components/Form/{AccessRightsV2 → AccessRights}/List/RemoveAccessRight.tsx +0 -0
  213. /package/src/components/Form/{AccessRightsV2 → AccessRights}/List/StateChip.tsx +0 -0
  214. /package/src/components/Form/{AccessRightsV2 → AccessRights}/List/useItem.ts +0 -0
  215. /package/src/components/Form/{AccessRightsV2 → AccessRights}/Provider.tsx +0 -0
  216. /package/src/components/Form/{AccessRightsV2 → AccessRights}/Stats/Stats.tsx +0 -0
  217. /package/src/components/Form/{AccessRightsV2 → AccessRights}/atoms.ts +0 -0
  218. /package/src/components/Form/{AccessRightsV2 → AccessRights}/common/RoleSelectField.styles.tsx +0 -0
  219. /package/src/components/Form/{AccessRightsV2 → AccessRights}/common/RoleSelectField.tsx +0 -0
  220. /package/src/components/Form/{AccessRightsV2 → AccessRights}/useAccessRightsInitValues.ts +0 -0
@@ -0,0 +1,305 @@
1
+ import { Node } from '../models';
2
+
3
+ export interface SimpleData {
4
+ id: number;
5
+ name: string;
6
+ status: 'critical' | 'warning' | 'ok';
7
+ }
8
+
9
+ export interface ComplexData {
10
+ count?: number;
11
+ id: number;
12
+ name: string;
13
+ status: 'critical' | 'warning' | 'ok';
14
+ }
15
+
16
+ export const simpleData: Node<SimpleData> = {
17
+ children: [
18
+ {
19
+ children: [
20
+ { data: { id: 2, name: 'A1', status: 'ok' } },
21
+ { data: { id: 3, name: 'A2', status: 'ok' } },
22
+ { data: { id: 4, name: 'A3', status: 'critical' } },
23
+ {
24
+ children: [
25
+ {
26
+ data: { id: 10, name: 'C1', status: 'warning' }
27
+ },
28
+ {
29
+ children: [
30
+ {
31
+ data: { id: 11, name: 'D1', status: 'ok' }
32
+ },
33
+ {
34
+ data: { id: 12, name: 'D2', status: 'ok' }
35
+ },
36
+ {
37
+ data: { id: 13, name: 'D3', status: 'ok' }
38
+ }
39
+ ],
40
+ data: { id: 14, name: 'D', status: 'ok' }
41
+ },
42
+ {
43
+ children: [
44
+ {
45
+ data: { id: 21, name: 'E1', status: 'critical' }
46
+ }
47
+ ],
48
+ data: { id: 20, name: 'E', status: 'critical' }
49
+ }
50
+ ],
51
+ data: { id: 3, name: 'C', status: 'critical' }
52
+ }
53
+ ],
54
+ data: { id: 6273286320, name: 'A', status: 'critical' }
55
+ },
56
+ { data: { id: 1, name: 'Z', status: 'ok' } },
57
+ {
58
+ children: [{ data: { id: 50, name: 'B1', status: 'warning' } }],
59
+ data: { id: 2, name: 'B', status: 'warning' }
60
+ }
61
+ ],
62
+ data: {
63
+ id: 0,
64
+ name: 'T',
65
+ status: 'critical'
66
+ }
67
+ };
68
+
69
+ export const complexData: Node<ComplexData> = {
70
+ children: [
71
+ {
72
+ children: [
73
+ { data: { id: 2, name: 'Indicator 1', status: 'critical' } },
74
+ {
75
+ children: [
76
+ {
77
+ children: [
78
+ { data: { id: 6, name: 'Indicator 6', status: 'critical' } },
79
+ { data: { id: 7, name: 'Indicator 7', status: 'ok' } }
80
+ ],
81
+ data: { count: 2, id: 0, name: 'critical', status: 'critical' }
82
+ },
83
+ {
84
+ children: [
85
+ {
86
+ children: [
87
+ {
88
+ children: [
89
+ {
90
+ data: {
91
+ id: 8,
92
+ name: 'Indicator 8',
93
+ status: 'warning'
94
+ }
95
+ }
96
+ ],
97
+ data: {
98
+ count: 1,
99
+ id: 4,
100
+ name: 'warning',
101
+ status: 'warning'
102
+ }
103
+ },
104
+ {
105
+ children: [
106
+ {
107
+ data: {
108
+ id: 10,
109
+ name: 'Indicator 10',
110
+ status: 'ok'
111
+ }
112
+ }
113
+ ],
114
+ data: {
115
+ count: 1,
116
+ id: 0,
117
+ name: 'ok',
118
+ status: 'ok'
119
+ }
120
+ }
121
+ ],
122
+ data: {
123
+ id: 6,
124
+ name: 'BA 3',
125
+ status: 'warning'
126
+ }
127
+ }
128
+ ],
129
+ data: {
130
+ count: 1,
131
+ id: 4,
132
+ name: 'warning',
133
+ status: 'warning'
134
+ }
135
+ },
136
+ {
137
+ children: [
138
+ { data: { id: 9, name: 'Indicator 9', status: 'ok' } }
139
+ ],
140
+ data: { count: 1, id: 0, name: 'ok', status: 'ok' }
141
+ }
142
+ ],
143
+ data: { id: 3, name: 'BA 2', status: 'critical' }
144
+ }
145
+ ],
146
+ data: { count: 2, id: 6, name: 'critical', status: 'critical' }
147
+ },
148
+ {
149
+ children: [
150
+ { data: { id: 4, name: 'Indicator 4', status: 'warning' } },
151
+ { data: { id: 5, name: 'Indicator 5', status: 'warning' } }
152
+ ],
153
+ data: { count: 2, id: 4, name: 'warning', status: 'warning' }
154
+ },
155
+ {
156
+ children: [
157
+ { data: { id: 6, name: 'Indicator 2', status: 'ok' } },
158
+ {
159
+ children: [
160
+ {
161
+ children: [
162
+ { data: { id: 6, name: 'Indicator 2', status: 'ok' } }
163
+ ],
164
+ data: {
165
+ count: 1,
166
+ name: 'ok',
167
+ status: 'ok'
168
+ }
169
+ }
170
+ ],
171
+ data: { id: 0, name: 'BA 4', status: 'ok' }
172
+ }
173
+ ],
174
+ data: { count: 2, id: 0, name: 'ok', status: 'ok' }
175
+ }
176
+ ],
177
+ data: {
178
+ id: 1,
179
+ name: 'BA 1',
180
+ status: 'critical'
181
+ }
182
+ };
183
+
184
+ export const moreComplexData: Node<ComplexData> = {
185
+ children: [
186
+ {
187
+ children: [
188
+ { data: { id: 2, name: 'Indicator 1', status: 'critical' } },
189
+ {
190
+ children: [
191
+ {
192
+ children: [
193
+ { data: { id: 6, name: 'Indicator 6', status: 'critical' } },
194
+ { data: { id: 7, name: 'Indicator 7', status: 'ok' } }
195
+ ],
196
+ data: { count: 2, id: 0, name: 'critical', status: 'critical' }
197
+ },
198
+ {
199
+ children: [
200
+ {
201
+ children: [
202
+ {
203
+ children: [
204
+ {
205
+ data: {
206
+ id: 8,
207
+ name: 'Indicator 8',
208
+ status: 'warning'
209
+ }
210
+ }
211
+ ],
212
+ data: {
213
+ count: 1,
214
+ id: 4,
215
+ name: 'warning',
216
+ status: 'warning'
217
+ }
218
+ },
219
+ {
220
+ children: [
221
+ {
222
+ data: {
223
+ id: 10,
224
+ name: 'Indicator 10',
225
+ status: 'ok'
226
+ }
227
+ }
228
+ ],
229
+ data: {
230
+ count: 1,
231
+ id: 0,
232
+ name: 'ok',
233
+ status: 'ok'
234
+ }
235
+ }
236
+ ],
237
+ data: {
238
+ id: 6,
239
+ name: 'BA 3',
240
+ status: 'warning'
241
+ }
242
+ }
243
+ ],
244
+ data: {
245
+ count: 1,
246
+ id: 4,
247
+ name: 'warning',
248
+ status: 'warning'
249
+ }
250
+ },
251
+ {
252
+ children: [
253
+ { data: { id: 9, name: 'Indicator 9', status: 'ok' } }
254
+ ],
255
+ data: { count: 1, id: 0, name: 'ok', status: 'ok' }
256
+ }
257
+ ],
258
+ data: { id: 3, name: 'BA 2', status: 'critical' }
259
+ }
260
+ ],
261
+ data: { count: 2, id: 6, name: 'critical', status: 'critical' }
262
+ },
263
+ {
264
+ children: [
265
+ { data: { id: 4, name: 'Indicator 4', status: 'warning' } },
266
+ { data: { id: 5, name: 'Indicator 5', status: 'warning' } }
267
+ ],
268
+ data: { count: 2, id: 4, name: 'warning', status: 'warning' }
269
+ },
270
+ {
271
+ children: [
272
+ {
273
+ children: [
274
+ {
275
+ children: [
276
+ { data: { id: 11, name: 'Indicator 11', status: 'ok' } }
277
+ ],
278
+ data: {
279
+ count: 1,
280
+ name: 'ok',
281
+ status: 'ok'
282
+ }
283
+ }
284
+ ],
285
+ data: { id: 0, name: 'BA 3', status: 'ok' }
286
+ },
287
+ { data: { id: 30, name: 'Indicator 30', status: 'ok' } },
288
+ { data: { id: 31, name: 'Indicator 31', status: 'ok' } },
289
+ { data: { id: 32, name: 'Indicator 32', status: 'ok' } },
290
+ { data: { id: 33, name: 'Indicator 33', status: 'ok' } },
291
+ { data: { id: 34, name: 'Indicator 34', status: 'ok' } },
292
+ { data: { id: 35, name: 'Indicator 35', status: 'ok' } },
293
+ { data: { id: 36, name: 'Indicator 36', status: 'ok' } },
294
+ { data: { id: 37, name: 'Indicator 37', status: 'ok' } },
295
+ { data: { id: 38, name: 'Indicator 38', status: 'ok' } }
296
+ ],
297
+ data: { count: 9, id: 0, name: 'ok', status: 'ok' }
298
+ }
299
+ ],
300
+ data: {
301
+ id: 1,
302
+ name: 'BA 1',
303
+ status: 'critical'
304
+ }
305
+ };
@@ -0,0 +1,49 @@
1
+ import { equals, omit } from 'ramda';
2
+
3
+ import { BaseProp, Node } from './models';
4
+
5
+ interface UpdateNodeFromTreeProps<TData> {
6
+ callback: (tree: Node<TData>) => Partial<Node<TData>>;
7
+ targetNode: Node<TData>;
8
+ tree: Node<TData>;
9
+ }
10
+
11
+ export const updateNodeFromTree = <TData extends BaseProp>({
12
+ tree,
13
+ targetNode,
14
+ callback
15
+ }: UpdateNodeFromTreeProps<TData>): Node<TData> => {
16
+ if (!tree.children) {
17
+ return tree;
18
+ }
19
+
20
+ if (
21
+ equals(tree.data, targetNode.data) &&
22
+ equals(tree.children, targetNode.children)
23
+ ) {
24
+ return {
25
+ ...tree,
26
+ ...callback(tree)
27
+ };
28
+ }
29
+
30
+ return {
31
+ ...tree,
32
+ children: tree.children?.map((child) =>
33
+ updateNodeFromTree({ callback, targetNode, tree: child })
34
+ )
35
+ };
36
+ };
37
+
38
+ export const cleanUpTree = <TData extends BaseProp>(
39
+ tree: Node<TData>
40
+ ): Node<TData> => {
41
+ if (!tree.children) {
42
+ return tree;
43
+ }
44
+
45
+ return {
46
+ ...omit(['isExpanded'], tree),
47
+ children: tree.children?.map((child) => cleanUpTree(child))
48
+ };
49
+ };
@@ -0,0 +1,71 @@
1
+ export const successThresholds = {
2
+ critical: [
3
+ {
4
+ label: 'Critical',
5
+ value: 1.5
6
+ }
7
+ ],
8
+ enabled: true,
9
+ warning: [
10
+ {
11
+ label: 'Warning',
12
+ value: 0.5
13
+ }
14
+ ]
15
+ };
16
+
17
+ export const warningThresholds = {
18
+ critical: [
19
+ {
20
+ label: 'Critical',
21
+ value: 1.5
22
+ }
23
+ ],
24
+ enabled: true,
25
+ warning: [
26
+ {
27
+ label: 'Warning',
28
+ value: 0.4
29
+ }
30
+ ]
31
+ };
32
+
33
+ export const criticalThresholds = {
34
+ critical: [
35
+ {
36
+ label: 'Critical',
37
+ value: 0.3
38
+ }
39
+ ],
40
+ enabled: true,
41
+ warning: [
42
+ {
43
+ label: 'Warning',
44
+ value: 0.2
45
+ }
46
+ ]
47
+ };
48
+
49
+ export const rangedThresholds = {
50
+ critical: [
51
+ {
52
+ label: 'Critical',
53
+ value: 0.55
54
+ },
55
+ {
56
+ label: 'Critical',
57
+ value: 0.65
58
+ }
59
+ ],
60
+ enabled: true,
61
+ warning: [
62
+ {
63
+ label: 'Warning',
64
+ value: 0.13
65
+ },
66
+ {
67
+ label: 'Warning',
68
+ value: 0.5
69
+ }
70
+ ]
71
+ };
@@ -31,7 +31,9 @@ import {
31
31
  last,
32
32
  cond,
33
33
  always,
34
- T
34
+ T,
35
+ includes,
36
+ split
35
37
  } from 'ramda';
36
38
 
37
39
  import { margin } from '../../LineChart/common';
@@ -205,6 +207,17 @@ const getLineForMetric = ({
205
207
  }: LineForMetricProps): Line | undefined =>
206
208
  find(propEq(metric_id, 'metric_id'), lines);
207
209
 
210
+ interface LinesForMetricsProps {
211
+ lines: Array<Line>;
212
+ metricIds: Array<number>;
213
+ }
214
+
215
+ export const getLinesForMetrics = ({
216
+ lines,
217
+ metricIds
218
+ }: LinesForMetricsProps): Array<Line> =>
219
+ filter(({ metric_id }) => metricIds.includes(metric_id), lines);
220
+
208
221
  interface LinesTimeSeries {
209
222
  lines: Array<Line>;
210
223
  timeSeries: Array<TimeValue>;
@@ -476,15 +489,7 @@ const registerMsUnitToNumeral = (): null => {
476
489
 
477
490
  registerMsUnitToNumeral();
478
491
 
479
- const formatMetricValue = ({
480
- value,
481
- unit,
482
- base = 1000
483
- }: FormatMetricValueProps): string | null => {
484
- if (isNil(value)) {
485
- return null;
486
- }
487
-
492
+ const getBase1024 = ({ unit, base }): boolean => {
488
493
  const base2Units = [
489
494
  'B',
490
495
  'bytes',
@@ -497,7 +502,19 @@ const formatMetricValue = ({
497
502
  'b'
498
503
  ];
499
504
 
500
- const base1024 = base2Units.includes(unit) || Number(base) === 1024;
505
+ return base2Units.includes(unit) || Number(base) === 1024;
506
+ };
507
+
508
+ const formatMetricValue = ({
509
+ value,
510
+ unit,
511
+ base = 1000
512
+ }: FormatMetricValueProps): string | null => {
513
+ if (isNil(value)) {
514
+ return null;
515
+ }
516
+
517
+ const base1024 = getBase1024({ base, unit });
501
518
 
502
519
  const formatSuffix = cond([
503
520
  [equals('ms'), always(' ms')],
@@ -525,6 +542,8 @@ const formatMetricValueWithUnit = ({
525
542
  return null;
526
543
  }
527
544
 
545
+ const base1024 = getBase1024({ base, unit });
546
+
528
547
  if (isRaw) {
529
548
  const unitText = equals('%', unit) ? unit : ` ${unit}`;
530
549
 
@@ -537,7 +556,9 @@ const formatMetricValueWithUnit = ({
537
556
 
538
557
  const formattedMetricValue = formatMetricValue({ base, unit, value });
539
558
 
540
- return formattedMetricValue;
559
+ return base1024 || !unit || equals(unit, 'ms')
560
+ ? formattedMetricValue
561
+ : `${formattedMetricValue} ${unit}`;
541
562
  };
542
563
 
543
564
  const getStackedYScale = ({
@@ -593,6 +614,23 @@ const getMetricWithLatestData = (
593
614
  };
594
615
  };
595
616
 
617
+ interface FormatMetricNameProps {
618
+ legend: string | null;
619
+ name: string;
620
+ }
621
+
622
+ export const formatMetricName = ({
623
+ legend,
624
+ name
625
+ }: FormatMetricNameProps): string => {
626
+ const legendName = legend || name;
627
+ const metricName = includes('#', legendName)
628
+ ? split('#')(legendName)[1]
629
+ : legendName;
630
+
631
+ return metricName;
632
+ };
633
+
596
634
  export {
597
635
  getTimeSeries,
598
636
  getLineData,
@@ -11,6 +11,7 @@ import {
11
11
  lte,
12
12
  pluck
13
13
  } from 'ramda';
14
+ import numeral from 'numeral';
14
15
 
15
16
  import { Theme } from '@mui/material';
16
17
 
@@ -73,3 +74,21 @@ export const getColorFromDataAndTresholds = ({
73
74
  [T, always(theme.palette.error.main)]
74
75
  ])(data);
75
76
  };
77
+
78
+ interface ValueByUnitProps {
79
+ total: number;
80
+ unit: 'percentage' | 'number';
81
+ value: number;
82
+ }
83
+
84
+ export const getValueByUnit = ({
85
+ unit,
86
+ value,
87
+ total
88
+ }: ValueByUnitProps): string => {
89
+ if (equals(unit, 'number')) {
90
+ return numeral(value).format('0a').toUpperCase();
91
+ }
92
+
93
+ return `${((value * 100) / total).toFixed(1)}%`;
94
+ };
@@ -2,4 +2,8 @@ export { default as LineChart } from './LineChart';
2
2
  export { Gauge } from './Gauge';
3
3
  export { SingleBar } from './SingleBar';
4
4
  export { Text as GraphText } from './Text';
5
+
5
6
  export { HeatMap } from './HeatMap';
7
+ export { BarStack } from './BarStack';
8
+ export { PieChart } from './PieChart';
9
+ export * from './Tree';
@@ -0,0 +1,85 @@
1
+ import NumberField, { NumberProps } from './Number';
2
+
3
+ const initialize = (props: NumberProps): void => {
4
+ cy.mount({
5
+ Component: <NumberField {...props} />
6
+ });
7
+ };
8
+
9
+ describe('Number field', () => {
10
+ it('displays the placeholder when the field has no default or fallback values', () => {
11
+ initialize({ dataTestId: 'test', onChange: cy.stub() });
12
+
13
+ cy.get('input').should('have.value', '');
14
+ cy.get('input').should('have.attr', 'placeholder', '0');
15
+
16
+ cy.makeSnapshot();
17
+ });
18
+
19
+ it('displays the fallback value as placeholder when the field as no default value', () => {
20
+ initialize({ dataTestId: 'test', fallbackValue: 25, onChange: cy.stub() });
21
+
22
+ cy.get('input').should('have.value', '');
23
+ cy.get('input').should('have.attr', 'placeholder', '25');
24
+
25
+ cy.makeSnapshot();
26
+ });
27
+
28
+ it('displays the default value as placeholder when the field as default value', () => {
29
+ initialize({ dataTestId: 'test', defaultValue: 25, onChange: cy.stub() });
30
+
31
+ cy.get('input').should('have.value', '25');
32
+
33
+ cy.makeSnapshot();
34
+ });
35
+
36
+ it('displays the fallback value when the field is cleared out', () => {
37
+ initialize({
38
+ dataTestId: 'test',
39
+ defaultValue: 25,
40
+ fallbackValue: 10,
41
+ onChange: cy.stub()
42
+ });
43
+
44
+ cy.get('input').should('have.value', '25');
45
+ cy.get('input').clear();
46
+ cy.get('input').should('have.value', '');
47
+ cy.get('input').should('have.attr', 'placeholder', '10');
48
+
49
+ cy.makeSnapshot();
50
+ });
51
+
52
+ it('displays the field using auto size', () => {
53
+ initialize({
54
+ autoSize: true,
55
+ dataTestId: 'test',
56
+ defaultValue: 25,
57
+ onChange: cy.stub()
58
+ });
59
+
60
+ cy.get('input').should('have.value', '25');
61
+
62
+ cy.get('input').type('0');
63
+
64
+ cy.makeSnapshot();
65
+ });
66
+
67
+ it('sets the value to the minimum value configured when a value less than the minimum value is typed in the field', () => {
68
+ initialize({
69
+ dataTestId: 'test',
70
+ defaultValue: 25,
71
+ inputProps: {
72
+ min: 2
73
+ },
74
+ onChange: cy.stub()
75
+ });
76
+
77
+ cy.get('input').should('have.value', '25');
78
+
79
+ cy.get('input').clear().type('-1');
80
+
81
+ cy.get('input').should('have.value', '2');
82
+
83
+ cy.makeSnapshot();
84
+ });
85
+ });