@centreon/ui 23.10.30-MON-19324-dashboard-section-navigation.3 → 23.10.30

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 (205) hide show
  1. package/package.json +9 -12
  2. package/src/@assets/icons/downtime.icon.svg +1 -0
  3. package/src/Dashboard/DashboardLayout.stories.tsx +5 -3
  4. package/src/Dashboard/Layout.tsx +4 -4
  5. package/src/Dashboard/utils.ts +28 -28
  6. package/src/Graph/BasicComponents/Axes/UnitLabel.tsx +20 -0
  7. package/src/Graph/BasicComponents/Axes/index.tsx +88 -0
  8. package/src/Graph/BasicComponents/Axes/models.ts +26 -0
  9. package/src/Graph/BasicComponents/Axes/useAxisY.ts +100 -0
  10. package/src/Graph/BasicComponents/Grids/index.tsx +20 -0
  11. package/src/Graph/BasicComponents/Lines/RegularLines/index.tsx +91 -0
  12. package/src/Graph/BasicComponents/Lines/RegularLines/useRegularLines.ts +15 -0
  13. package/src/Graph/BasicComponents/Lines/StackedLines/index.tsx +76 -0
  14. package/src/Graph/BasicComponents/Lines/StackedLines/useStackedLines.ts +39 -0
  15. package/src/Graph/BasicComponents/Lines/Threshold/BasicThreshold.tsx +51 -0
  16. package/src/Graph/BasicComponents/Lines/Threshold/Circle.tsx +43 -0
  17. package/src/Graph/BasicComponents/Lines/Threshold/ThresholdWithPatternLines.tsx +73 -0
  18. package/src/Graph/BasicComponents/Lines/Threshold/ThresholdWithVariation.tsx +59 -0
  19. package/src/Graph/BasicComponents/Lines/Threshold/helpers/index.ts +69 -0
  20. package/src/Graph/BasicComponents/Lines/Threshold/index.tsx +138 -0
  21. package/src/Graph/BasicComponents/Lines/Threshold/models.ts +105 -0
  22. package/src/Graph/BasicComponents/Lines/Threshold/useCoordinateCircle.ts +46 -0
  23. package/src/Graph/BasicComponents/Lines/Threshold/useScaleThreshold.ts +171 -0
  24. package/src/Graph/BasicComponents/Lines/index.tsx +180 -0
  25. package/src/Graph/BasicComponents/Lines/models.ts +42 -0
  26. package/src/Graph/BasicComponents/LoadingProgress.tsx +46 -0
  27. package/src/Graph/BasicComponents/useFilterLines.ts +60 -0
  28. package/src/Graph/Graph.styles.ts +45 -0
  29. package/src/Graph/Graph.tsx +217 -0
  30. package/src/Graph/Header/index.tsx +65 -0
  31. package/src/Graph/Icons/Downtime.tsx +9 -0
  32. package/src/Graph/InteractiveComponents/AnchorPoint/AnchorPoint.styles.ts +58 -0
  33. package/src/Graph/InteractiveComponents/AnchorPoint/GuidingLines.tsx +45 -0
  34. package/src/Graph/InteractiveComponents/AnchorPoint/RegularAnchorPoint.tsx +66 -0
  35. package/src/Graph/InteractiveComponents/AnchorPoint/StackedAnchorPoint.tsx +76 -0
  36. package/src/Graph/InteractiveComponents/AnchorPoint/TooltipAnchorPoint.tsx +70 -0
  37. package/src/Graph/InteractiveComponents/AnchorPoint/index.tsx +20 -0
  38. package/src/Graph/InteractiveComponents/AnchorPoint/models.ts +62 -0
  39. package/src/Graph/InteractiveComponents/AnchorPoint/useTickGraph.ts +94 -0
  40. package/src/Graph/InteractiveComponents/AnchorPoint/useTooltipAnchorPoint.ts +107 -0
  41. package/src/Graph/InteractiveComponents/Annotations/Annotation/Area.tsx +114 -0
  42. package/src/Graph/InteractiveComponents/Annotations/Annotation/Line.tsx +103 -0
  43. package/src/Graph/InteractiveComponents/Annotations/Annotation/index.tsx +81 -0
  44. package/src/Graph/InteractiveComponents/Annotations/Area/Downtime.tsx +27 -0
  45. package/src/Graph/InteractiveComponents/Annotations/EventAnnotations.tsx +61 -0
  46. package/src/Graph/InteractiveComponents/Annotations/Line/Acknowledgement.tsx +27 -0
  47. package/src/Graph/InteractiveComponents/Annotations/Line/Comments.tsx +25 -0
  48. package/src/Graph/InteractiveComponents/Annotations/annotationsAtoms.ts +183 -0
  49. package/src/Graph/InteractiveComponents/Annotations/index.tsx +49 -0
  50. package/src/Graph/InteractiveComponents/Annotations/models.ts +25 -0
  51. package/src/Graph/InteractiveComponents/Annotations/useAnnotation.ts +56 -0
  52. package/src/Graph/InteractiveComponents/Bar.tsx +21 -0
  53. package/src/Graph/InteractiveComponents/TimeShiftZones/TimeShiftIcon.tsx +62 -0
  54. package/src/Graph/InteractiveComponents/TimeShiftZones/TimeShiftZone.tsx +74 -0
  55. package/src/Graph/InteractiveComponents/TimeShiftZones/index.tsx +85 -0
  56. package/src/Graph/InteractiveComponents/TimeShiftZones/models.ts +12 -0
  57. package/src/Graph/InteractiveComponents/TimeShiftZones/useTimeShiftZones.ts +72 -0
  58. package/src/Graph/InteractiveComponents/Tooltip/index.tsx +59 -0
  59. package/src/Graph/InteractiveComponents/Tooltip/models.ts +9 -0
  60. package/src/Graph/InteractiveComponents/Tooltip/useGraphTooltip.ts +67 -0
  61. package/src/Graph/InteractiveComponents/ZoomPreview/index.tsx +38 -0
  62. package/src/Graph/InteractiveComponents/ZoomPreview/models.ts +9 -0
  63. package/src/Graph/InteractiveComponents/ZoomPreview/useZoomPreview.ts +107 -0
  64. package/src/Graph/InteractiveComponents/ZoomPreview/zoomPreviewAtoms.ts +3 -0
  65. package/src/Graph/InteractiveComponents/index.tsx +168 -0
  66. package/src/Graph/InteractiveComponents/interactionWithGraphAtoms.ts +51 -0
  67. package/src/Graph/Legend/InteractiveValue.tsx +22 -0
  68. package/src/Graph/Legend/Legend.styles.ts +71 -0
  69. package/src/Graph/Legend/LegendContent.tsx +27 -0
  70. package/src/Graph/Legend/LegendHeader.tsx +45 -0
  71. package/src/Graph/Legend/Marker.tsx +43 -0
  72. package/src/Graph/Legend/index.tsx +166 -0
  73. package/src/Graph/Legend/models.ts +11 -0
  74. package/src/Graph/Legend/useInteractiveValues.ts +86 -0
  75. package/src/Graph/Legend/useLegend.ts +114 -0
  76. package/src/Graph/LoadingSkeleton.tsx +44 -0
  77. package/src/Graph/common/index.ts +35 -0
  78. package/src/Graph/graphAtoms.ts +6 -0
  79. package/src/Graph/helpers/doc.ts +560 -0
  80. package/src/Graph/helpers/index.ts +58 -0
  81. package/src/Graph/index.stories.tsx +372 -0
  82. package/src/Graph/index.tsx +90 -0
  83. package/src/Graph/mockedData/annotationData.json +326 -0
  84. package/src/Graph/mockedData/exclusionPeriodFirstPeriod.json +588 -0
  85. package/src/Graph/mockedData/exclusionPeriodSecondPeriod.json +588 -0
  86. package/src/Graph/mockedData/exclusionPeriodThirdPeriod.json +581 -0
  87. package/src/Graph/mockedData/lastDay.json +1326 -0
  88. package/src/Graph/mockedData/lastDayAreaStack.json +3106 -0
  89. package/src/Graph/mockedData/lastDayForward.json +1338 -0
  90. package/src/Graph/mockedData/lastDayThreshold.json +2352 -0
  91. package/src/Graph/mockedData/lastMonth.json +1674 -0
  92. package/src/Graph/mockedData/lastWeek.json +2202 -0
  93. package/src/Graph/mockedData/zoomPreview.json +742 -0
  94. package/src/Graph/models.ts +150 -0
  95. package/src/Graph/timeSeries/index.test.ts +506 -0
  96. package/src/Graph/timeSeries/index.ts +512 -0
  97. package/src/Graph/timeSeries/models.ts +120 -0
  98. package/src/Graph/translatedLabels.ts +9 -0
  99. package/src/Graph/useGraphData.ts +47 -0
  100. package/src/Graph/useGraphIntersection.ts +36 -0
  101. package/src/ThemeProvider/index.tsx +5 -6
  102. package/src/ThemeProvider/palettes.ts +215 -385
  103. package/src/TimePeriods/CustomTimePeriod/CompactCustomTimePeriod.styles.ts +51 -0
  104. package/src/TimePeriods/CustomTimePeriod/CompactCustomTimePeriod.tsx +95 -0
  105. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/ErrorText.tsx +14 -0
  106. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/PickersStartEndDate.tsx +163 -0
  107. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/index.tsx +76 -0
  108. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/models.ts +61 -0
  109. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/usePickersStartEndDate.ts +82 -0
  110. package/src/TimePeriods/CustomTimePeriod/index.tsx +66 -0
  111. package/src/TimePeriods/DateTimePickerInput.tsx +49 -0
  112. package/src/TimePeriods/ResolutionTimePeriod.cypress.spec.tsx +65 -0
  113. package/src/TimePeriods/SelectedTimePeriod.tsx +102 -0
  114. package/src/TimePeriods/TimePeriods.cypress.spec.tsx +510 -0
  115. package/src/TimePeriods/TimePeriods.styles.ts +22 -0
  116. package/src/TimePeriods/helpers/index.ts +26 -0
  117. package/src/TimePeriods/index.stories.tsx +98 -0
  118. package/src/TimePeriods/index.tsx +78 -0
  119. package/src/TimePeriods/mockedData.ts +12 -0
  120. package/src/TimePeriods/models.ts +97 -0
  121. package/src/TimePeriods/timePeriodsAtoms.ts +102 -0
  122. package/src/TimePeriods/translatedLabels.ts +9 -0
  123. package/src/TimePeriods/useSortTimePeriods.ts +31 -0
  124. package/src/TimePeriods/useTimePeriod.ts +49 -0
  125. package/src/api/TestQueryProvider.tsx +1 -2
  126. package/src/api/useFetchQuery/index.ts +7 -8
  127. package/src/api/useMutationQuery/index.ts +10 -11
  128. package/src/components/Button/Button.styles.ts +3 -17
  129. package/src/components/Button/Button.tsx +3 -6
  130. package/src/components/Button/Icon/IconButton.styles.ts +2 -9
  131. package/src/components/DataTable/DataTable.stories.tsx +0 -9
  132. package/src/components/DataTable/DataTable.styles.ts +0 -5
  133. package/src/components/DataTable/DataTable.tsx +6 -8
  134. package/src/components/DataTable/EmptyState/DataTableEmptyState.tsx +1 -4
  135. package/src/components/DataTable/Item/DataTableItem.styles.ts +2 -5
  136. package/src/components/DataTable/Item/DataTableItem.tsx +18 -36
  137. package/src/components/Header/Header.stories.tsx +27 -0
  138. package/src/components/Header/Header.styles.ts +27 -0
  139. package/src/components/Header/Header.tsx +23 -0
  140. package/src/components/Header/index.ts +1 -1
  141. package/src/components/Modal/index.ts +0 -2
  142. package/src/components/index.ts +0 -3
  143. package/src/index.ts +2 -0
  144. package/src/layout/TiledListingPage/TiledListingActions.tsx +15 -0
  145. package/src/layout/TiledListingPage/TiledListingContent.tsx +21 -0
  146. package/src/layout/TiledListingPage/TiledListingList.tsx +11 -0
  147. package/src/layout/TiledListingPage/TiledListingPage.styles.ts +16 -0
  148. package/src/layout/TiledListingPage/TiledListingPage.tsx +15 -0
  149. package/src/layout/TiledListingPage/index.ts +4 -0
  150. package/src/screens/dashboard/DashboardsOverview.stories.tsx +102 -110
  151. package/src/utils/index.ts +1 -1
  152. package/src/utils/sanitizedHTML.ts +1 -1
  153. package/test/setupTests.js +0 -3
  154. package/src/base/tokens/README.md +0 -3
  155. package/src/base/tokens/source/$metadata.json +0 -5
  156. package/src/base/tokens/source/base.json +0 -142
  157. package/src/base/tokens/themes/base.tokens.d.ts +0 -38
  158. package/src/base/tokens/themes/base.tokens.json +0 -695
  159. package/src/base/tokens/themes/base.tokens.ts +0 -38
  160. package/src/base/tokens/themes/ui-dark.tokens.d.ts +0 -38
  161. package/src/base/tokens/themes/ui-dark.tokens.json +0 -695
  162. package/src/base/tokens/themes/ui-dark.tokens.ts +0 -38
  163. package/src/base/tokens/themes/ui-light.tokens.d.ts +0 -38
  164. package/src/base/tokens/themes/ui-light.tokens.json +0 -695
  165. package/src/base/tokens/themes/ui-light.tokens.ts +0 -38
  166. package/src/components/Header/PageHeader/PageHeader.stories.tsx +0 -88
  167. package/src/components/Header/PageHeader/PageHeader.styles.ts +0 -99
  168. package/src/components/Header/PageHeader/PageHeader.tsx +0 -15
  169. package/src/components/Header/PageHeader/PageHeaderActions.tsx +0 -17
  170. package/src/components/Header/PageHeader/PageHeaderMain.tsx +0 -15
  171. package/src/components/Header/PageHeader/PageHeaderMenu.tsx +0 -15
  172. package/src/components/Header/PageHeader/PageHeaderTitle.tsx +0 -47
  173. package/src/components/Header/PageHeader/index.ts +0 -12
  174. package/src/components/Layout/AreaIndicator.styles.ts +0 -33
  175. package/src/components/Layout/AreaIndicator.tsx +0 -35
  176. package/src/components/Layout/PageLayout/PageLayout.stories.tsx +0 -81
  177. package/src/components/Layout/PageLayout/PageLayout.styles.ts +0 -40
  178. package/src/components/Layout/PageLayout/PageLayout.tsx +0 -21
  179. package/src/components/Layout/PageLayout/PageLayoutActions.tsx +0 -15
  180. package/src/components/Layout/PageLayout/PageLayoutBody.tsx +0 -24
  181. package/src/components/Layout/PageLayout/PageLayoutHeader.tsx +0 -15
  182. package/src/components/Layout/PageLayout/index.ts +0 -10
  183. package/src/components/Layout/index.ts +0 -1
  184. package/src/components/Menu/Button/MenuButton.stories.tsx +0 -16
  185. package/src/components/Menu/Button/MenuButton.styles.ts +0 -27
  186. package/src/components/Menu/Button/MenuButton.tsx +0 -59
  187. package/src/components/Menu/Button/index.ts +0 -1
  188. package/src/components/Menu/Menu.stories.tsx +0 -71
  189. package/src/components/Menu/Menu.styles.ts +0 -70
  190. package/src/components/Menu/Menu.tsx +0 -25
  191. package/src/components/Menu/MenuDivider.tsx +0 -13
  192. package/src/components/Menu/MenuItem.tsx +0 -36
  193. package/src/components/Menu/MenuItems.tsx +0 -35
  194. package/src/components/Menu/index.ts +0 -12
  195. package/src/components/Menu/useMenu.tsx +0 -79
  196. package/src/components/Tooltip/TextOverflowTooltip/TextOverflowTooltip.stories.tsx +0 -71
  197. package/src/components/Tooltip/TextOverflowTooltip/TextOverflowTooltip.styles.ts +0 -5
  198. package/src/components/Tooltip/TextOverflowTooltip/TextOverflowTooltip.tsx +0 -115
  199. package/src/components/Tooltip/TextOverflowTooltip/index.tsx +0 -1
  200. package/src/components/Tooltip/Tooltip.stories.tsx +0 -41
  201. package/src/components/Tooltip/Tooltip.styles.ts +0 -5
  202. package/src/components/Tooltip/Tooltip.tsx +0 -46
  203. package/src/components/Tooltip/index.ts +0 -1
  204. package/src/screens/dashboard/DashboardsDetail.stories.tsx +0 -108
  205. package/src/utils/useResizeObserver.ts +0 -6
@@ -0,0 +1,372 @@
1
+ import { useEffect, useState } from 'react';
2
+
3
+ import { Meta, StoryObj } from '@storybook/react';
4
+
5
+ import { Button } from '@mui/material';
6
+ import ButtonGroup from '@mui/material/ButtonGroup';
7
+ import Switch from '@mui/material/Switch';
8
+ import Tooltip from '@mui/material/Tooltip';
9
+
10
+ import { useLocaleDateTimeFormat } from '@centreon/ui';
11
+
12
+ import TimePeriod from '../TimePeriods';
13
+
14
+ import { dateTimeFormat } from './common';
15
+ import {
16
+ argTypes,
17
+ args as argumentsData,
18
+ defaultEnd,
19
+ defaultLast7days,
20
+ defaultLastMonth,
21
+ defaultStart,
22
+ lastDayForwardDate,
23
+ zoomPreviewDate
24
+ } from './helpers/doc';
25
+ import annotationData from './mockedData/annotationData.json';
26
+ import exclusionPeriodFirstPeriod from './mockedData/exclusionPeriodFirstPeriod.json';
27
+ import exclusionPeriodSecondPeriod from './mockedData/exclusionPeriodSecondPeriod.json';
28
+ import exclusionPeriodThirdPeriod from './mockedData/exclusionPeriodThirdPeriod.json';
29
+ import dataLastDayForword from './mockedData/lastDayForward.json';
30
+ import dataLastDay from './mockedData/lastDayThreshold.json';
31
+ import dataLastMonth from './mockedData/lastMonth.json';
32
+ import dataLastWeek from './mockedData/lastWeek.json';
33
+ import dataZoomPreview from './mockedData/zoomPreview.json';
34
+ import { GraphData, Interval, ThresholdType, TooltipData } from './models';
35
+
36
+ import WrapperGraph from './index';
37
+
38
+ const meta: Meta<typeof WrapperGraph> = {
39
+ component: WrapperGraph,
40
+ tags: ['autodocs']
41
+ };
42
+ export default meta;
43
+
44
+ type Story = StoryObj<typeof WrapperGraph>;
45
+
46
+ interface Random {
47
+ max: number;
48
+ min: number;
49
+ }
50
+
51
+ const Threshold = (args): JSX.Element => {
52
+ const [currentFactorMultiplication, setCurrentFactorMultiplication] =
53
+ useState<number>(2.5);
54
+ const [countedCircles, setCountedCircles] = useState<number>();
55
+
56
+ const getRandomInt = ({ min, max }: Random): number => {
57
+ return Math.floor(Math.random() * (max - min) + min);
58
+ };
59
+
60
+ const handleClick = (): void => {
61
+ setCurrentFactorMultiplication(getRandomInt({ max: 5, min: 1 }));
62
+ };
63
+
64
+ const getCountDisplayedCircles = (value: number): void => {
65
+ setCountedCircles(value);
66
+ };
67
+
68
+ return (
69
+ <>
70
+ <Tooltip title={`number of displayed circles :${countedCircles}`}>
71
+ <Button onClick={handleClick}>change envelope size randomly</Button>
72
+ </Tooltip>
73
+
74
+ <WrapperGraph
75
+ {...args}
76
+ data={dataLastDay}
77
+ shapeLines={{
78
+ areaThresholdLines: [
79
+ { type: ThresholdType.basic },
80
+ {
81
+ factors: {
82
+ currentFactorMultiplication,
83
+ simulatedFactorMultiplication: 1.5
84
+ },
85
+ getCountDisplayedCircles,
86
+ type: ThresholdType.variation
87
+ }
88
+ ]
89
+ }}
90
+ />
91
+ </>
92
+ );
93
+ };
94
+
95
+ const ExternalComponent = (tooltipData): JSX.Element => {
96
+ const { hideTooltip, data } = tooltipData;
97
+ const { format } = useLocaleDateTimeFormat();
98
+
99
+ return (
100
+ <>
101
+ External component
102
+ <br />
103
+ <br />
104
+ {format({
105
+ date: data,
106
+ formatString: dateTimeFormat
107
+ })}
108
+ <br />
109
+ <br />
110
+ <button type="button" onClick={(): void => hideTooltip()}>
111
+ hide tooltip
112
+ </button>
113
+ </>
114
+ );
115
+ };
116
+
117
+ const GraphAndCLS = (args): JSX.Element => {
118
+ const [data, setData] = useState<GraphData | null>(null);
119
+ const [loading, setLoading] = useState(true);
120
+
121
+ useEffect(() => {
122
+ setTimeout(() => {
123
+ setLoading(false);
124
+ setData(dataLastDay as unknown as GraphData);
125
+ }, 100000);
126
+ }, []);
127
+
128
+ return (
129
+ <WrapperGraph
130
+ {...args}
131
+ data={data}
132
+ loading={loading}
133
+ shapeLines={{ areaThresholdLines: [{ type: ThresholdType.basic }] }}
134
+ />
135
+ );
136
+ };
137
+
138
+ interface TimePeriodSwitchProps {
139
+ getDataSwitch: (value: boolean) => void;
140
+ }
141
+
142
+ const TimePeriodSwitch = ({
143
+ getDataSwitch
144
+ }: TimePeriodSwitchProps): JSX.Element => {
145
+ const [checked, setChecked] = useState(false);
146
+
147
+ const handleChange = (event: React.ChangeEvent<HTMLInputElement>): void => {
148
+ setChecked(event.target.checked);
149
+ };
150
+
151
+ useEffect(() => {
152
+ getDataSwitch?.(checked);
153
+ }, [checked]);
154
+
155
+ return (
156
+ <Switch
157
+ checked={checked}
158
+ inputProps={{ 'aria-label': 'controlled' }}
159
+ onChange={handleChange}
160
+ />
161
+ );
162
+ };
163
+
164
+ const GraphAndTimePeriod = (args): JSX.Element => {
165
+ const [currentData, setCurrentData] = useState<GraphData>();
166
+ const [start, setStart] = useState<string>();
167
+ const [end, setEnd] = useState<string>();
168
+ const [displayAnnotation, setDisplayAnnotation] = useState();
169
+ const [adjustedTimePeriodInterval, setAdjustedTimePeriodInterval] =
170
+ useState<Interval>();
171
+
172
+ const getParameters = (interval): void => {
173
+ setStart(interval.start);
174
+ setEnd(interval.end);
175
+ };
176
+
177
+ useEffect(() => {
178
+ if (!start || !end) {
179
+ return;
180
+ }
181
+ if (start.includes(lastDayForwardDate)) {
182
+ setCurrentData(dataLastDayForword as unknown as GraphData);
183
+
184
+ return;
185
+ }
186
+
187
+ if (start.includes(`${defaultStart.split('T')[0]}`)) {
188
+ setCurrentData(dataLastDay as unknown as GraphData);
189
+
190
+ return;
191
+ }
192
+ if (start.includes(defaultLast7days.split('T')[0])) {
193
+ setCurrentData(dataLastWeek as unknown as GraphData);
194
+
195
+ return;
196
+ }
197
+ if (start.includes(defaultLastMonth.split('T')[0])) {
198
+ setCurrentData(dataLastMonth as unknown as GraphData);
199
+
200
+ return;
201
+ }
202
+ if (start.includes(zoomPreviewDate)) {
203
+ setCurrentData(dataZoomPreview as unknown as GraphData);
204
+ }
205
+ }, [start, end, adjustedTimePeriodInterval]);
206
+
207
+ const getInterval = (interval: Interval): void => {
208
+ setAdjustedTimePeriodInterval(interval);
209
+ };
210
+
211
+ const getDataSwitch = (value): void => {
212
+ setDisplayAnnotation(value);
213
+ };
214
+
215
+ const annotationEventData = displayAnnotation && {
216
+ data: annotationData.result
217
+ };
218
+
219
+ return (
220
+ <>
221
+ <TimePeriod
222
+ adjustTimePeriodData={adjustedTimePeriodInterval}
223
+ getParameters={getParameters}
224
+ renderExternalComponent={
225
+ <TimePeriodSwitch getDataSwitch={getDataSwitch} />
226
+ }
227
+ />
228
+ <WrapperGraph
229
+ data={currentData}
230
+ {...args}
231
+ annotationEvent={annotationEventData}
232
+ end={end}
233
+ loading={false}
234
+ shapeLines={{ areaThresholdLines: [{ type: ThresholdType.basic }] }}
235
+ start={start}
236
+ timeShiftZones={{ enable: true, getInterval }}
237
+ tooltip={{
238
+ enable: true,
239
+ renderComponent: ({
240
+ data,
241
+ tooltipOpen,
242
+ hideTooltip
243
+ }: TooltipData): JSX.Element => (
244
+ <ExternalComponent
245
+ data={data}
246
+ hideTooltip={hideTooltip}
247
+ openTooltip={tooltipOpen}
248
+ />
249
+ )
250
+ }}
251
+ zoomPreview={{ enable: true, getInterval }}
252
+ />
253
+ </>
254
+ );
255
+ };
256
+
257
+ const GraphAndExclusionPeriod = (args): JSX.Element => {
258
+ const [dataExclusionPeriods, setDataExclusionPeriods] = useState<
259
+ Array<GraphData>
260
+ >([exclusionPeriodFirstPeriod as unknown as GraphData]);
261
+
262
+ const handleClick = (data): void => {
263
+ setDataExclusionPeriods([...dataExclusionPeriods, data]);
264
+ };
265
+
266
+ return (
267
+ <>
268
+ <div>Add exclusion periods:</div>
269
+ <ButtonGroup
270
+ aria-label="outlined primary button group"
271
+ variant="contained"
272
+ >
273
+ <Button onClick={(): void => handleClick(exclusionPeriodSecondPeriod)}>
274
+ first
275
+ </Button>
276
+ <Button onClick={(): void => handleClick(exclusionPeriodThirdPeriod)}>
277
+ second
278
+ </Button>
279
+ </ButtonGroup>
280
+ <WrapperGraph
281
+ {...args}
282
+ data={dataLastDay as unknown as GraphData}
283
+ shapeLines={{
284
+ areaThresholdLines: [
285
+ {
286
+ type: ThresholdType.basic
287
+ },
288
+ {
289
+ data: dataExclusionPeriods,
290
+ orientation: ['diagonal'],
291
+ type: ThresholdType.pattern
292
+ }
293
+ ]
294
+ }}
295
+ />
296
+ </>
297
+ );
298
+ };
299
+
300
+ const Template: Story = {
301
+ render: (args) => (
302
+ <WrapperGraph
303
+ {...args}
304
+ data={dataLastDay as unknown as GraphData}
305
+ shapeLines={{
306
+ areaThresholdLines: [
307
+ {
308
+ type: ThresholdType.basic
309
+ }
310
+ ]
311
+ }}
312
+ />
313
+ )
314
+ };
315
+
316
+ const WithTimePeriod = {
317
+ render: (args): JSX.Element => <GraphAndTimePeriod {...args} />
318
+ };
319
+
320
+ const GraphWithExclusionPeriod: Story = {
321
+ render: (args) => <GraphAndExclusionPeriod {...args} />
322
+ };
323
+
324
+ const GraphWithEnvelopVariation: Story = {
325
+ render: (args) => <Threshold {...args} />
326
+ };
327
+
328
+ const GraphWithCLS: Story = {
329
+ render: (args) => <GraphAndCLS {...args} />
330
+ };
331
+
332
+ export const Graph: Story = {
333
+ ...Template,
334
+ argTypes,
335
+ args: argumentsData
336
+ };
337
+
338
+ export const GraphWithTimePeriod: Story = {
339
+ ...WithTimePeriod,
340
+ args: {
341
+ end: defaultEnd,
342
+ height: 500,
343
+ start: defaultStart
344
+ }
345
+ };
346
+
347
+ export const WithEnvelopVariation: Story = {
348
+ ...GraphWithEnvelopVariation,
349
+ args: {
350
+ end: defaultEnd,
351
+ height: 500,
352
+ start: defaultStart
353
+ }
354
+ };
355
+
356
+ export const withExclusionPeriods: Story = {
357
+ ...GraphWithExclusionPeriod,
358
+ args: {
359
+ end: defaultEnd,
360
+ height: 500,
361
+ start: defaultStart
362
+ }
363
+ };
364
+
365
+ export const withCLS: Story = {
366
+ ...GraphWithCLS,
367
+ args: {
368
+ end: defaultEnd,
369
+ height: 500,
370
+ start: defaultStart
371
+ }
372
+ };
@@ -0,0 +1,90 @@
1
+ import { MutableRefObject, useRef } from 'react';
2
+
3
+ import { Responsive } from '@visx/visx';
4
+ import dayjs from 'dayjs';
5
+ import 'dayjs/locale/en';
6
+ import 'dayjs/locale/es';
7
+ import 'dayjs/locale/fr';
8
+ import 'dayjs/locale/pt';
9
+ import localizedFormat from 'dayjs/plugin/localizedFormat';
10
+ import timezonePlugin from 'dayjs/plugin/timezone';
11
+ import utcPlugin from 'dayjs/plugin/utc';
12
+
13
+ import Graph from './Graph';
14
+ import LoadingSkeleton from './LoadingSkeleton';
15
+ import { GlobalAreaLines, GraphData, GraphProps, LegendModel } from './models';
16
+ import useGraphData from './useGraphData';
17
+
18
+ dayjs.extend(localizedFormat);
19
+ dayjs.extend(utcPlugin);
20
+ dayjs.extend(timezonePlugin);
21
+
22
+ interface Props extends Partial<GraphProps> {
23
+ data?: GraphData;
24
+ end: string;
25
+ legend: LegendModel;
26
+ loading: boolean;
27
+ shapeLines?: GlobalAreaLines;
28
+ start: string;
29
+ }
30
+
31
+ const WrapperGraph = ({
32
+ end,
33
+ start,
34
+ height = 500,
35
+ width,
36
+ shapeLines,
37
+ axis,
38
+ displayAnchor,
39
+ zoomPreview,
40
+ data,
41
+ loading,
42
+ timeShiftZones,
43
+ tooltip,
44
+ annotationEvent,
45
+ legend,
46
+ header
47
+ }: Props): JSX.Element | null => {
48
+ const { adjustedData } = useGraphData({ data, end, start });
49
+ const graphRef = useRef<HTMLDivElement | null>(null);
50
+
51
+ if (loading || !adjustedData) {
52
+ return (
53
+ <LoadingSkeleton
54
+ displayTitleSkeleton={header?.displayTitle ?? true}
55
+ graphHeight={height}
56
+ />
57
+ );
58
+ }
59
+
60
+ return (
61
+ <div ref={graphRef as MutableRefObject<HTMLDivElement>}>
62
+ <Responsive.ParentSize>
63
+ {({
64
+ height: responsiveHeight,
65
+ width: responsiveWidth
66
+ }): JSX.Element => (
67
+ <Graph
68
+ annotationEvent={annotationEvent}
69
+ axis={axis}
70
+ displayAnchor={displayAnchor}
71
+ graphData={adjustedData}
72
+ graphInterval={{ end, start }}
73
+ graphRef={graphRef}
74
+ header={header}
75
+ height={height ?? responsiveHeight}
76
+ legend={legend}
77
+ loading={loading}
78
+ shapeLines={shapeLines}
79
+ timeShiftZones={timeShiftZones}
80
+ tooltip={tooltip}
81
+ width={width ?? responsiveWidth}
82
+ zoomPreview={zoomPreview}
83
+ />
84
+ )}
85
+ </Responsive.ParentSize>
86
+ </div>
87
+ );
88
+ };
89
+
90
+ export default WrapperGraph;