@centreon/ui 24.4.46 → 24.4.48

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 (139) hide show
  1. package/package.json +14 -23
  2. package/public/mockServiceWorker.js +1 -1
  3. package/src/Button/Icon/index.tsx +1 -1
  4. package/src/Button/Save/StartIcon.tsx +3 -3
  5. package/src/Button/Save/index.tsx +5 -9
  6. package/src/Checkbox/Checkbox.tsx +2 -2
  7. package/src/Checkbox/CheckboxGroup/index.tsx +2 -2
  8. package/src/Dashboard/Item.tsx +1 -1
  9. package/src/Dashboard/Layout.tsx +2 -2
  10. package/src/Dialog/index.tsx +1 -1
  11. package/src/FallbackPage/FallbackPage.tsx +3 -3
  12. package/src/FileDropZone/index.tsx +1 -3
  13. package/src/Form/Inputs/CheckboxGroup.tsx +4 -1
  14. package/src/Form/Inputs/index.tsx +1 -3
  15. package/src/Form/Inputs/models.ts +1 -9
  16. package/src/Graph/Gauge/Gauge.tsx +1 -1
  17. package/src/Graph/HeatMap/HeatMap.stories.tsx +25 -0
  18. package/src/Graph/HeatMap/ResponsiveHeatMap.tsx +2 -8
  19. package/src/Graph/LineChart/BasicComponents/Lines/Threshold/Circle.tsx +2 -2
  20. package/src/Graph/LineChart/BasicComponents/Lines/Threshold/index.tsx +4 -5
  21. package/src/Graph/LineChart/BasicComponents/Thresholds.tsx +2 -2
  22. package/src/Graph/LineChart/BasicComponents/useFilterLines.ts +1 -1
  23. package/src/Graph/LineChart/InteractiveComponents/AnchorPoint/GuidingLines.tsx +2 -2
  24. package/src/Graph/LineChart/InteractiveComponents/Annotations/Annotation/index.tsx +3 -2
  25. package/src/Graph/LineChart/InteractiveComponents/Annotations/EventAnnotations.tsx +1 -1
  26. package/src/Graph/LineChart/Legend/Legend.styles.ts +1 -1
  27. package/src/Graph/LineChart/Legend/LegendHeader.tsx +1 -1
  28. package/src/Graph/LineChart/Legend/useInteractiveValues.ts +2 -2
  29. package/src/Graph/LineChart/Legend/useLegend.ts +3 -3
  30. package/src/Graph/LineChart/helpers/doc.ts +13 -16
  31. package/src/Graph/LineChart/helpers/index.ts +1 -1
  32. package/src/Graph/LineChart/index.stories.tsx +2 -4
  33. package/src/Graph/LineChart/index.tsx +1 -1
  34. package/src/Graph/SingleBar/Thresholds.tsx +2 -2
  35. package/src/Graph/Text/Text.stories.tsx +4 -60
  36. package/src/Graph/Text/Text.tsx +1 -1
  37. package/src/Graph/common/timeSeries/index.ts +14 -22
  38. package/src/Graph/common/utils.ts +0 -19
  39. package/src/Graph/index.ts +0 -3
  40. package/src/InputField/Select/Autocomplete/Connected/index.tsx +7 -10
  41. package/src/InputField/Select/Autocomplete/Draggable/SortableList.tsx +1 -1
  42. package/src/InputField/Select/Autocomplete/Draggable/SortableListContent.tsx +1 -1
  43. package/src/InputField/Select/Autocomplete/Draggable/index.tsx +1 -1
  44. package/src/InputField/Select/Autocomplete/index.tsx +115 -121
  45. package/src/InputField/Select/IconPopover/index.tsx +2 -2
  46. package/src/InputField/Select/index.tsx +1 -1
  47. package/src/InputField/Text/index.tsx +2 -2
  48. package/src/Listing/ActionBar/index.tsx +8 -9
  49. package/src/Listing/Cell/DataCell.styles.ts +0 -3
  50. package/src/Listing/Cell/DataCell.tsx +5 -23
  51. package/src/Listing/Header/ListingHeader.tsx +1 -1
  52. package/src/Listing/Listing.cypress.spec.tsx +4 -80
  53. package/src/Listing/Listing.styles.ts +7 -4
  54. package/src/Listing/index.stories.tsx +3 -37
  55. package/src/Listing/index.test.tsx +1 -1
  56. package/src/Listing/index.tsx +3 -4
  57. package/src/Listing/models.ts +0 -1
  58. package/src/Module/index.tsx +4 -2
  59. package/src/RichTextEditor/RichTextEditor.tsx +1 -12
  60. package/src/SortableItems/index.tsx +7 -2
  61. package/src/ThemeProvider/index.tsx +0 -24
  62. package/src/TimePeriods/CustomTimePeriod/CompactCustomTimePeriod.styles.ts +7 -6
  63. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/PickersStartEndDate.tsx +3 -8
  64. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/models.ts +2 -0
  65. package/src/TimePeriods/DateTimePickerInput.tsx +19 -56
  66. package/src/TimePeriods/ResolutionTimePeriod.cypress.spec.tsx +9 -12
  67. package/src/TimePeriods/TimePeriods.cypress.spec.tsx +33 -9
  68. package/src/TimePeriods/helpers/index.ts +1 -1
  69. package/src/TimePeriods/index.stories.tsx +4 -12
  70. package/src/TimePeriods/index.tsx +2 -2
  71. package/src/api/QueryProvider.tsx +1 -1
  72. package/src/api/TestQueryProvider.tsx +1 -1
  73. package/src/api/useFetchQuery/index.ts +23 -27
  74. package/src/api/useMutationQuery/index.test.ts +4 -4
  75. package/src/api/useMutationQuery/index.ts +25 -60
  76. package/src/components/Button/Icon/IconButton.tsx +2 -6
  77. package/src/components/DataTable/DataTable.stories.tsx +0 -40
  78. package/src/components/DataTable/DataTable.styles.ts +0 -3
  79. package/src/components/DataTable/DataTable.tsx +3 -3
  80. package/src/components/DataTable/Item/DataTableItem.styles.ts +2 -7
  81. package/src/components/DataTable/Item/DataTableItem.tsx +4 -4
  82. package/src/components/DataTable/index.ts +1 -3
  83. package/src/components/Form/AccessRights/ShareInput/ContactSwitch.tsx +3 -3
  84. package/src/components/Form/AccessRights/ShareInput/ShareInput.tsx +0 -1
  85. package/src/components/Form/Dashboard/DashboardForm.tsx +12 -15
  86. package/src/components/Layout/PageLayout/PageLayout.tsx +1 -1
  87. package/src/components/Layout/PageLayout/PageLayoutActions.tsx +0 -1
  88. package/src/components/Layout/PageLayout/PageLayoutBody.tsx +0 -1
  89. package/src/components/Layout/PageLayout/PageLayoutHeader.tsx +1 -5
  90. package/src/components/Layout/PageLayout/index.ts +1 -3
  91. package/src/components/Modal/Modal.styles.ts +1 -1
  92. package/src/components/Tooltip/ConfirmationTooltip/ConfirmationTooltip.stories.tsx +3 -3
  93. package/src/components/Tooltip/ConfirmationTooltip/ConfirmationTooltip.tsx +1 -1
  94. package/src/components/Tooltip/ConfirmationTooltip/models.ts +1 -1
  95. package/src/index.ts +2 -2
  96. package/src/queryParameters/url/index.ts +1 -5
  97. package/src/screens/dashboard/DashboardsDetail.stories.tsx +108 -0
  98. package/src/screens/dashboard/DashboardsOverview.stories.tsx +281 -0
  99. package/src/utils/index.ts +1 -1
  100. package/src/utils/useDateTimePickerAdapter.ts +309 -0
  101. package/src/utils/useFullscreen/useFullscreenListener.ts +7 -10
  102. package/src/utils/{useLicenseExpirationWarning.test.tsx → useLicenseExpirationWarning.cypress.spec.tsx} +37 -48
  103. package/src/utils/useLicenseExpirationWarning.ts +18 -18
  104. package/src/Form/Form.cypress.spec.tsx +0 -133
  105. package/src/Form/Inputs/List/Content.tsx +0 -62
  106. package/src/Form/Inputs/List/List.styles.ts +0 -29
  107. package/src/Form/Inputs/List/List.tsx +0 -58
  108. package/src/Form/Inputs/List/useList.ts +0 -81
  109. package/src/Graph/BarStack/BarStack.cypress.spec.tsx +0 -154
  110. package/src/Graph/BarStack/BarStack.stories.tsx +0 -123
  111. package/src/Graph/BarStack/BarStack.styles.ts +0 -36
  112. package/src/Graph/BarStack/BarStack.tsx +0 -14
  113. package/src/Graph/BarStack/ResponsiveBarStack.tsx +0 -208
  114. package/src/Graph/BarStack/index.ts +0 -1
  115. package/src/Graph/BarStack/models.ts +0 -19
  116. package/src/Graph/BarStack/useResponsiveBarStack.ts +0 -139
  117. package/src/Graph/Gauge/Gauge.cypress.spec.tsx +0 -102
  118. package/src/Graph/HeatMap/HeatMap.cypress.spec.tsx +0 -145
  119. package/src/Graph/Legend/Legend.tsx +0 -21
  120. package/src/Graph/Legend/index.ts +0 -1
  121. package/src/Graph/Legend/models.ts +0 -11
  122. package/src/Graph/PieChart/PieChart.cypress.spec.tsx +0 -169
  123. package/src/Graph/PieChart/PieChart.stories.tsx +0 -194
  124. package/src/Graph/PieChart/PieChart.styles.ts +0 -39
  125. package/src/Graph/PieChart/PieChart.tsx +0 -14
  126. package/src/Graph/PieChart/ResponsivePie.tsx +0 -251
  127. package/src/Graph/PieChart/index.ts +0 -1
  128. package/src/Graph/PieChart/models.ts +0 -19
  129. package/src/Graph/PieChart/useResponsivePie.ts +0 -86
  130. package/src/Graph/SingleBar/SingleBar.cypress.spec.tsx +0 -121
  131. package/src/Graph/Text/Text.cypress.spec.tsx +0 -101
  132. package/src/Graph/common/testUtils.ts +0 -71
  133. package/src/Graph/translatedLabels.ts +0 -1
  134. package/src/Module/Module.cypress.spec.tsx +0 -129
  135. package/src/components/DataTable/DataListing.tsx +0 -6
  136. package/src/components/DataTable/DataTable.cypress.spec.tsx +0 -193
  137. package/src/components/Layout/PageLayout/PageQuickAccess.tsx +0 -76
  138. package/src/components/Layout/PageLayout.cypress.spec.tsx +0 -66
  139. package/src/utils/usePluralizedTranslation.ts +0 -21
@@ -1,123 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react';
2
-
3
- import { BarType } from './models';
4
-
5
- import { BarStack } from '.';
6
-
7
- const data = [
8
- { color: '#88B922', label: 'Ok', value: 148 },
9
- { color: '#999999', label: 'Unknown', value: 63 },
10
- { color: '#F7931A', label: 'Warning', value: 16 },
11
- { color: '#FF6666', label: 'Down', value: 13 }
12
- ];
13
-
14
- const dataWithBigNumbers = [
15
- { color: '#88B922', label: 'Ok', value: 260000 },
16
- { color: '#999999', label: 'Unknown', value: 1010900 },
17
- { color: '#F7931A', label: 'Warning', value: 63114 },
18
- { color: '#FF6666', label: 'Down', value: 122222 }
19
- ];
20
-
21
- const dataWithSmallNumber = [
22
- { color: '#88B922', label: 'Ok', value: 148 },
23
- { color: '#999999', label: 'Unknown', value: 42 },
24
- { color: '#F7931A', label: 'Warning', value: 7 },
25
- { color: '#FF6666', label: 'Down', value: 5 }
26
- ];
27
-
28
- const meta: Meta<typeof BarStack> = {
29
- component: BarStack
30
- };
31
-
32
- export default meta;
33
- type Story = StoryObj<typeof BarStack>;
34
-
35
- const TooltipContent = ({ label, color, value }: BarType): JSX.Element => {
36
- return (
37
- <div style={{ color }}>
38
- {label} : {value}
39
- </div>
40
- );
41
- };
42
-
43
- const Template = (args): JSX.Element => {
44
- return (
45
- <div style={{ height: '300px', width: '500px' }}>
46
- <BarStack {...args} />
47
- </div>
48
- );
49
- };
50
-
51
- export const Vertical: Story = {
52
- args: { data, title: 'hosts' },
53
- render: Template
54
- };
55
-
56
- export const WithoutTitle: Story = {
57
- args: { data },
58
- render: Template
59
- };
60
-
61
- export const WithPencentage: Story = {
62
- args: { data, title: 'hosts', unit: 'percentage' },
63
- render: Template
64
- };
65
-
66
- export const WithoutLegend: Story = {
67
- args: { data, displayLegend: false, title: 'hosts' },
68
-
69
- render: Template
70
- };
71
-
72
- export const withDisplayedValues: Story = {
73
- args: { data, displayValues: true, title: 'hosts' },
74
- render: Template
75
- };
76
-
77
- export const WithTooltip: Story = {
78
- args: { TooltipContent, data, title: 'hosts' },
79
- render: Template
80
- };
81
-
82
- export const WithBigNumbers: Story = {
83
- args: {
84
- TooltipContent,
85
- data: dataWithBigNumbers,
86
- displayValues: true,
87
- title: 'hosts'
88
- },
89
- render: Template
90
- };
91
-
92
- export const WithSmallNumbers: Story = {
93
- args: {
94
- TooltipContent,
95
- data: dataWithSmallNumber,
96
- displayValues: true,
97
- title: 'hosts'
98
- },
99
- render: Template
100
- };
101
-
102
- export const Horizontal: Story = {
103
- args: {
104
- TooltipContent,
105
- data,
106
- displayValues: true,
107
- title: 'hosts',
108
- variant: 'horizontal'
109
- },
110
- render: Template
111
- };
112
-
113
- export const HorizontalWithoutLegend: Story = {
114
- args: {
115
- TooltipContent,
116
- data,
117
- displayLegend: false,
118
- displayValues: true,
119
- title: 'hosts',
120
- variant: 'horizontal'
121
- },
122
- render: Template
123
- };
@@ -1,36 +0,0 @@
1
- import { makeStyles } from 'tss-react/mui';
2
-
3
- export const useBarStackStyles = makeStyles()((theme) => ({
4
- barStackTooltip: {
5
- backgroundColor: theme.palette.background.paper,
6
- color: theme.palette.text.primary,
7
- padding: 0,
8
- position: 'relative'
9
- },
10
- container: {
11
- alignItems: 'center',
12
- display: 'flex',
13
- gap: theme.spacing(1.5),
14
- justifyContent: 'center'
15
- },
16
- svgContainer: {
17
- alignItems: 'center',
18
- backgroundColor: theme.palette.background.panelGroups,
19
- borderRadius: theme.shape.borderRadius,
20
- display: 'flex',
21
- justifyContent: 'center'
22
- },
23
- svgWrapper: {
24
- alignItems: 'center',
25
- display: 'flex',
26
- flexDirection: 'column',
27
- gap: theme.spacing(1),
28
- justifyContent: 'center'
29
- },
30
- title: {
31
- fontSize: theme.typography.h6.fontSize,
32
- fontWeight: theme.typography.fontWeightMedium,
33
- margin: 0,
34
- padding: 0
35
- }
36
- }));
@@ -1,14 +0,0 @@
1
- import { ParentSize } from '../..';
2
-
3
- import ResponsiveBarStack from './ResponsiveBarStack';
4
- import { BarStackProps } from './models';
5
-
6
- const Bar = (props: BarStackProps): JSX.Element => (
7
- <ParentSize>
8
- {({ width, height }) => (
9
- <ResponsiveBarStack {...props} height={height} width={width} />
10
- )}
11
- </ParentSize>
12
- );
13
-
14
- export default Bar;
@@ -1,208 +0,0 @@
1
- import { useRef } from 'react';
2
-
3
- import { BarStack as BarStackVertical, BarStackHorizontal } from '@visx/shape';
4
- import { Group } from '@visx/group';
5
- import numeral from 'numeral';
6
- import { Text } from '@visx/text';
7
- import { useTranslation } from 'react-i18next';
8
-
9
- import { Typography } from '@mui/material';
10
-
11
- import { Tooltip } from '../../components';
12
- import { LegendProps } from '../Legend/models';
13
- import { Legend as LegendComponent } from '../Legend';
14
- import { getValueByUnit } from '../common/utils';
15
- import { labelNoDataFound } from '../translatedLabels';
16
-
17
- import { BarStackProps } from './models';
18
- import { useBarStackStyles } from './BarStack.styles';
19
- import useResponsiveBarStack from './useResponsiveBarStack';
20
-
21
- const DefaultLengd = ({ scale, direction }: LegendProps): JSX.Element => (
22
- <LegendComponent direction={direction} scale={scale} />
23
- );
24
-
25
- const BarStack = ({
26
- title,
27
- data,
28
- width,
29
- height,
30
- size = 72,
31
- onSingleBarClick,
32
- displayLegend = true,
33
- TooltipContent,
34
- Legend = DefaultLengd,
35
- unit = 'number',
36
- displayValues,
37
- variant = 'vertical',
38
- legendDirection = 'column'
39
- }: BarStackProps & { height: number; width: number }): JSX.Element => {
40
- const { t } = useTranslation();
41
- const { classes } = useBarStackStyles();
42
-
43
- const titleRef = useRef(null);
44
- const legendRef = useRef(null);
45
-
46
- const {
47
- barSize,
48
- colorScale,
49
- input,
50
- keys,
51
- legendScale,
52
- total,
53
- xScale,
54
- yScale,
55
- svgWrapperWidth,
56
- svgContainerSize,
57
- isVerticalBar,
58
- areAllValuesNull
59
- } = useResponsiveBarStack({
60
- data,
61
- height,
62
- legendRef,
63
- size,
64
- titleRef,
65
- unit,
66
- variant,
67
- width
68
- });
69
-
70
- const BarStackComponent = isVerticalBar
71
- ? BarStackVertical
72
- : BarStackHorizontal;
73
-
74
- if (areAllValuesNull) {
75
- return (
76
- <div className={classes.container} style={{ height, width }}>
77
- <Typography variant="h3">{t(labelNoDataFound)}</Typography>
78
- </div>
79
- );
80
- }
81
-
82
- return (
83
- <div className={classes.container} style={{ height, width }}>
84
- <div
85
- className={classes.svgWrapper}
86
- style={{
87
- height,
88
- width: svgWrapperWidth
89
- }}
90
- >
91
- {title && (
92
- <div className={classes.title} data-testid="Title" ref={titleRef}>
93
- {`${numeral(total).format('0a').toUpperCase()} `} {title}
94
- </div>
95
- )}
96
- <div
97
- className={classes.svgContainer}
98
- data-testid="barStack"
99
- style={svgContainerSize}
100
- >
101
- <svg
102
- data-variant={variant}
103
- height={barSize.height}
104
- width={barSize.width}
105
- >
106
- <Group>
107
- <BarStackComponent
108
- color={colorScale}
109
- data={[input]}
110
- keys={keys}
111
- {...(isVerticalBar
112
- ? { x: () => undefined }
113
- : { y: () => undefined })}
114
- xScale={xScale}
115
- yScale={yScale}
116
- >
117
- {(barStacks) =>
118
- barStacks.map((barStack) =>
119
- barStack.bars.map((bar) => {
120
- const onClick = (): void => {
121
- onSingleBarClick?.(bar);
122
- };
123
-
124
- return (
125
- <Tooltip
126
- hasCaret
127
- classes={{
128
- tooltip: classes.barStackTooltip
129
- }}
130
- followCursor={false}
131
- key={`bar-stack-${barStack.index}-${bar.index}`}
132
- label={
133
- TooltipContent && (
134
- <TooltipContent
135
- color={bar.color}
136
- label={bar.key}
137
- title={title}
138
- total={total}
139
- value={barStack.bars[0].bar.data[barStack.key]}
140
- />
141
- )
142
- }
143
- position={
144
- isVerticalBar ? 'right-start' : 'bottom-start'
145
- }
146
- >
147
- <g data-testid={bar.key}>
148
- <rect
149
- fill={bar.color}
150
- height={
151
- isVerticalBar ? bar.height - 1 : bar.height
152
- }
153
- key={`bar-stack-${barStack.index}-${bar.index}`}
154
- ry={5}
155
- width={isVerticalBar ? bar.width : bar.width - 1}
156
- x={bar.x}
157
- y={bar.y}
158
- onClick={onClick}
159
- />
160
- {displayValues &&
161
- bar.height > 10 &&
162
- bar.width > 10 && (
163
- <Text
164
- cursor="pointer"
165
- data-testid="value"
166
- fill="#000"
167
- fontSize={12}
168
- textAnchor="middle"
169
- verticalAnchor="middle"
170
- x={bar.x + bar.width / 2}
171
- y={bar.y + bar.height / 2}
172
- >
173
- {getValueByUnit({
174
- total,
175
- unit,
176
- value:
177
- barStack.bars[0].bar.data[barStack.key]
178
- })}
179
- </Text>
180
- )}
181
- </g>
182
- </Tooltip>
183
- );
184
- })
185
- )
186
- }
187
- </BarStackComponent>
188
- </Group>
189
- </svg>
190
- </div>
191
- </div>
192
- {displayLegend && (
193
- <div data-testid="Legend" ref={legendRef}>
194
- <Legend
195
- data={data}
196
- direction={legendDirection}
197
- scale={legendScale}
198
- title={title}
199
- total={total}
200
- unit={unit}
201
- />
202
- </div>
203
- )}
204
- </div>
205
- );
206
- };
207
-
208
- export default BarStack;
@@ -1 +0,0 @@
1
- export { default as BarStack } from './BarStack';
@@ -1,19 +0,0 @@
1
- export interface BarType {
2
- color: string;
3
- label: string;
4
- value: number;
5
- }
6
-
7
- export type BarStackProps = {
8
- Legend?: ({ scale, data, title, total, unit, direction }) => JSX.Element;
9
- TooltipContent?: (barData) => JSX.Element | boolean | null;
10
- data: Array<BarType>;
11
- displayLegend?: boolean;
12
- displayValues?: boolean;
13
- legendDirection?: 'row' | 'column';
14
- onSingleBarClick?: (barData) => void;
15
- size?: number;
16
- title?: string;
17
- unit?: 'percentage' | 'number';
18
- variant?: 'vertical' | 'horizontal';
19
- };
@@ -1,139 +0,0 @@
1
- import { scaleBand, scaleLinear, scaleOrdinal } from '@visx/scale';
2
- import { equals, isEmpty, pluck, reject } from 'ramda';
3
-
4
- import { getValueByUnit } from '../common/utils';
5
- import { LegendScale } from '../Legend/models';
6
-
7
- import { BarType } from './models';
8
-
9
- interface Size {
10
- height: number;
11
- width: number;
12
- }
13
-
14
- interface useBarStackProps {
15
- data: Array<BarType>;
16
- height: number;
17
- legendRef;
18
- size: number;
19
- titleRef;
20
- unit?: 'percentage' | 'number';
21
- variant?: 'vertical' | 'horizontal';
22
- width: number;
23
- }
24
- interface useBarStackState {
25
- areAllValuesNull: boolean;
26
- barSize: Size;
27
- colorScale;
28
- input;
29
- isVerticalBar: boolean;
30
- keys: Array<string>;
31
- legendScale: LegendScale;
32
- svgContainerSize: Size;
33
- svgWrapperWidth: number;
34
- total: number;
35
- xScale;
36
- yScale;
37
- }
38
-
39
- const useResponsiveBarStack = ({
40
- data,
41
- variant,
42
- height,
43
- width,
44
- unit = 'number',
45
- titleRef,
46
- legendRef,
47
- size
48
- }: useBarStackProps): useBarStackState => {
49
- const isVerticalBar = equals(variant, 'vertical');
50
-
51
- const heightOfTitle = titleRef.current?.offsetHeight || 0;
52
- const widthOfLegend = legendRef.current?.offsetWidth || 0;
53
-
54
- const horizontalGap = widthOfLegend > 0 ? 12 : 0;
55
- const verticalGap = heightOfTitle > 0 ? 8 : 0;
56
-
57
- const svgWrapperWidth = isVerticalBar
58
- ? size + 24
59
- : width - widthOfLegend - horizontalGap;
60
-
61
- const svgContainerSize = {
62
- height: isVerticalBar ? height - heightOfTitle - verticalGap : size,
63
- width: isVerticalBar ? size : width - widthOfLegend - horizontalGap
64
- };
65
-
66
- const barSize = {
67
- height: svgContainerSize.height - 16,
68
- width: svgContainerSize.width - 16
69
- };
70
-
71
- const total = Math.floor(data.reduce((acc, { value }) => acc + value, 0));
72
-
73
- const yScale = isVerticalBar
74
- ? scaleLinear({
75
- domain: [0, total],
76
- nice: true
77
- })
78
- : scaleBand({
79
- domain: [0, 0],
80
- padding: 0
81
- });
82
-
83
- const xScale = isVerticalBar
84
- ? scaleBand({
85
- domain: [0, 0],
86
- padding: 0
87
- })
88
- : scaleLinear({
89
- domain: [0, total],
90
- nice: true
91
- });
92
-
93
- const keys = pluck('label', data);
94
-
95
- const colorsRange = pluck('color', data);
96
-
97
- const colorScale = scaleOrdinal({
98
- domain: keys,
99
- range: colorsRange
100
- });
101
-
102
- const legendScale = {
103
- domain: data.map(({ value }) => getValueByUnit({ total, unit, value })),
104
- range: colorsRange
105
- };
106
-
107
- const xMax = barSize.width;
108
- const yMax = barSize.height;
109
-
110
- xScale.rangeRound([0, xMax]);
111
- yScale.range([yMax, 0]);
112
-
113
- const input = data.reduce((acc, { label, value }) => {
114
- acc[label] = value;
115
-
116
- return acc;
117
- }, {});
118
-
119
- const values = pluck('value', data);
120
-
121
- const areAllValuesNull = isEmpty(reject((value) => equals(value, 0), values));
122
-
123
- return {
124
- areAllValuesNull,
125
- barSize,
126
- colorScale,
127
- input,
128
- isVerticalBar,
129
- keys,
130
- legendScale,
131
- svgContainerSize,
132
- svgWrapperWidth,
133
- total,
134
- xScale,
135
- yScale
136
- };
137
- };
138
-
139
- export default useResponsiveBarStack;
@@ -1,102 +0,0 @@
1
- import dataLastWeek from '../LineChart/mockedData/lastWeek.json';
2
- import {
3
- criticalThresholds,
4
- rangedThresholds,
5
- successThresholds,
6
- warningThresholds
7
- } from '../common/testUtils';
8
-
9
- import { Props, Gauge } from './Gauge';
10
-
11
- const initialize = (
12
- args: Omit<Props, 'data' | 'labels' | 'baseColor'>
13
- ): void => {
14
- cy.mount({
15
- Component: (
16
- <div style={{ height: '100vh', width: '100vw' }}>
17
- <Gauge
18
- baseColor="#000"
19
- data={dataLastWeek}
20
- labels={{
21
- critical: 'Critical',
22
- warning: 'Warning'
23
- }}
24
- {...args}
25
- />
26
- </div>
27
- )
28
- });
29
- };
30
-
31
- describe('Gauge', () => {
32
- it('does not display the gauge when there is no data', () => {
33
- initialize({ data: undefined, thresholds: successThresholds });
34
-
35
- cy.contains('0.41 s').should('not.exist');
36
- });
37
-
38
- it('displays the gauge as success when corresponding thresholds are set', () => {
39
- initialize({ thresholds: successThresholds });
40
-
41
- cy.contains('0.41 s').should('have.css', 'fill', 'rgb(136, 185, 34)');
42
- cy.findByTestId('1.1500000000000001-arc').should('be.visible');
43
- cy.findByTestId('0.15000000000000013-arc').should('be.visible');
44
-
45
- cy.makeSnapshot();
46
- });
47
-
48
- it('displays the gauge as warning when corresponding thresholds are set', () => {
49
- initialize({ thresholds: warningThresholds });
50
-
51
- cy.contains('0.41 s').should('have.css', 'fill', 'rgb(253, 155, 39)');
52
- cy.findByTestId('1.25-arc').should('be.visible');
53
- cy.findByTestId('0.15000000000000013-arc').should('be.visible');
54
-
55
- cy.makeSnapshot();
56
- });
57
-
58
- it('displays the gauge as critical when corresponding thresholds are set', () => {
59
- initialize({ thresholds: criticalThresholds });
60
-
61
- cy.contains('0.41 s').should('have.css', 'fill', 'rgb(255, 74, 74)');
62
- cy.findByTestId('0.6399999999999999-arc').should('be.visible');
63
- cy.findByTestId('0.54-arc').should('be.visible');
64
-
65
- cy.makeSnapshot();
66
- });
67
-
68
- it('displays ranged thresholds', () => {
69
- initialize({ thresholds: rangedThresholds });
70
-
71
- cy.findByTestId('0.37-arc').should('be.visible');
72
- cy.findByTestId('0.09999999999999998-arc').should('be.visible');
73
-
74
- cy.makeSnapshot();
75
- });
76
-
77
- it('displays the threshold tooltip when a threshold is hovered', () => {
78
- initialize({ thresholds: successThresholds });
79
-
80
- cy.findByTestId('1.1500000000000001-arc').trigger('mouseover', {
81
- force: true
82
- });
83
-
84
- cy.contains('Warning').should('be.visible');
85
-
86
- cy.findByTestId('0.15000000000000013-arc').trigger('mouseover', {
87
- force: true
88
- });
89
-
90
- cy.contains('Critical').should('be.visible');
91
-
92
- cy.makeSnapshot();
93
- });
94
-
95
- it('displays the value as raw when the prop is set', () => {
96
- initialize({ displayAsRaw: true, thresholds: successThresholds });
97
-
98
- cy.contains('0.40663333333 s').should('be.visible');
99
-
100
- cy.makeSnapshot();
101
- });
102
- });