@centreon/ui 24.4.44 → 24.4.45

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 (138) hide show
  1. package/package.json +23 -14
  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 +9 -5
  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 +3 -1
  13. package/src/Form/Form.cypress.spec.tsx +133 -0
  14. package/src/Form/Inputs/CheckboxGroup.tsx +1 -4
  15. package/src/Form/Inputs/List/Content.tsx +62 -0
  16. package/src/Form/Inputs/List/List.styles.ts +29 -0
  17. package/src/Form/Inputs/List/List.tsx +58 -0
  18. package/src/Form/Inputs/List/useList.ts +81 -0
  19. package/src/Form/Inputs/index.tsx +3 -1
  20. package/src/Form/Inputs/models.ts +9 -1
  21. package/src/Graph/BarStack/BarStack.cypress.spec.tsx +154 -0
  22. package/src/Graph/BarStack/BarStack.stories.tsx +123 -0
  23. package/src/Graph/BarStack/BarStack.styles.ts +36 -0
  24. package/src/Graph/BarStack/BarStack.tsx +14 -0
  25. package/src/Graph/BarStack/ResponsiveBarStack.tsx +208 -0
  26. package/src/Graph/BarStack/index.ts +1 -0
  27. package/src/Graph/BarStack/models.ts +19 -0
  28. package/src/Graph/BarStack/useResponsiveBarStack.ts +139 -0
  29. package/src/Graph/Gauge/Gauge.cypress.spec.tsx +102 -0
  30. package/src/Graph/Gauge/Gauge.tsx +1 -1
  31. package/src/Graph/HeatMap/HeatMap.cypress.spec.tsx +145 -0
  32. package/src/Graph/HeatMap/HeatMap.stories.tsx +0 -25
  33. package/src/Graph/HeatMap/ResponsiveHeatMap.tsx +8 -2
  34. package/src/Graph/Legend/Legend.tsx +21 -0
  35. package/src/Graph/Legend/index.ts +1 -0
  36. package/src/Graph/Legend/models.ts +11 -0
  37. package/src/Graph/LineChart/BasicComponents/Lines/Threshold/Circle.tsx +2 -2
  38. package/src/Graph/LineChart/BasicComponents/Lines/Threshold/index.tsx +5 -4
  39. package/src/Graph/LineChart/BasicComponents/Thresholds.tsx +2 -2
  40. package/src/Graph/LineChart/BasicComponents/useFilterLines.ts +1 -1
  41. package/src/Graph/LineChart/InteractiveComponents/AnchorPoint/GuidingLines.tsx +2 -2
  42. package/src/Graph/LineChart/InteractiveComponents/Annotations/Annotation/index.tsx +2 -3
  43. package/src/Graph/LineChart/InteractiveComponents/Annotations/EventAnnotations.tsx +1 -1
  44. package/src/Graph/LineChart/Legend/Legend.styles.ts +1 -1
  45. package/src/Graph/LineChart/Legend/LegendHeader.tsx +1 -1
  46. package/src/Graph/LineChart/Legend/useInteractiveValues.ts +2 -2
  47. package/src/Graph/LineChart/Legend/useLegend.ts +3 -3
  48. package/src/Graph/LineChart/helpers/doc.ts +16 -13
  49. package/src/Graph/LineChart/helpers/index.ts +1 -1
  50. package/src/Graph/LineChart/index.stories.tsx +4 -2
  51. package/src/Graph/LineChart/index.tsx +1 -1
  52. package/src/Graph/PieChart/PieChart.cypress.spec.tsx +169 -0
  53. package/src/Graph/PieChart/PieChart.stories.tsx +194 -0
  54. package/src/Graph/PieChart/PieChart.styles.ts +39 -0
  55. package/src/Graph/PieChart/PieChart.tsx +14 -0
  56. package/src/Graph/PieChart/ResponsivePie.tsx +251 -0
  57. package/src/Graph/PieChart/index.ts +1 -0
  58. package/src/Graph/PieChart/models.ts +19 -0
  59. package/src/Graph/PieChart/useResponsivePie.ts +86 -0
  60. package/src/Graph/SingleBar/SingleBar.cypress.spec.tsx +121 -0
  61. package/src/Graph/SingleBar/Thresholds.tsx +2 -2
  62. package/src/Graph/Text/Text.cypress.spec.tsx +101 -0
  63. package/src/Graph/Text/Text.stories.tsx +60 -4
  64. package/src/Graph/Text/Text.tsx +1 -1
  65. package/src/Graph/common/testUtils.ts +71 -0
  66. package/src/Graph/common/timeSeries/index.ts +22 -14
  67. package/src/Graph/common/utils.ts +19 -0
  68. package/src/Graph/index.ts +3 -0
  69. package/src/Graph/translatedLabels.ts +1 -0
  70. package/src/InputField/Select/Autocomplete/Connected/index.tsx +10 -7
  71. package/src/InputField/Select/Autocomplete/Draggable/SortableList.tsx +1 -1
  72. package/src/InputField/Select/Autocomplete/Draggable/SortableListContent.tsx +1 -1
  73. package/src/InputField/Select/Autocomplete/Draggable/index.tsx +1 -1
  74. package/src/InputField/Select/Autocomplete/index.tsx +121 -115
  75. package/src/InputField/Select/IconPopover/index.tsx +2 -2
  76. package/src/InputField/Select/index.tsx +1 -1
  77. package/src/InputField/Text/index.tsx +2 -2
  78. package/src/Listing/ActionBar/index.tsx +9 -8
  79. package/src/Listing/Cell/DataCell.styles.ts +3 -0
  80. package/src/Listing/Cell/DataCell.tsx +23 -5
  81. package/src/Listing/Header/ListingHeader.tsx +1 -1
  82. package/src/Listing/Listing.cypress.spec.tsx +80 -4
  83. package/src/Listing/Listing.styles.ts +4 -7
  84. package/src/Listing/index.stories.tsx +37 -3
  85. package/src/Listing/index.test.tsx +1 -1
  86. package/src/Listing/index.tsx +4 -3
  87. package/src/Listing/models.ts +1 -0
  88. package/src/Module/Module.cypress.spec.tsx +129 -0
  89. package/src/Module/index.tsx +2 -4
  90. package/src/RichTextEditor/RichTextEditor.tsx +12 -1
  91. package/src/SortableItems/index.tsx +2 -7
  92. package/src/ThemeProvider/index.tsx +24 -0
  93. package/src/TimePeriods/CustomTimePeriod/CompactCustomTimePeriod.styles.ts +6 -7
  94. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/PickersStartEndDate.tsx +8 -3
  95. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/models.ts +0 -2
  96. package/src/TimePeriods/DateTimePickerInput.tsx +56 -19
  97. package/src/TimePeriods/ResolutionTimePeriod.cypress.spec.tsx +12 -9
  98. package/src/TimePeriods/TimePeriods.cypress.spec.tsx +9 -33
  99. package/src/TimePeriods/helpers/index.ts +1 -1
  100. package/src/TimePeriods/index.stories.tsx +12 -4
  101. package/src/TimePeriods/index.tsx +2 -2
  102. package/src/api/QueryProvider.tsx +1 -1
  103. package/src/api/TestQueryProvider.tsx +1 -1
  104. package/src/api/useFetchQuery/index.ts +27 -23
  105. package/src/api/useMutationQuery/index.test.ts +4 -4
  106. package/src/api/useMutationQuery/index.ts +60 -25
  107. package/src/components/Button/Icon/IconButton.tsx +6 -2
  108. package/src/components/DataTable/DataListing.tsx +6 -0
  109. package/src/components/DataTable/DataTable.cypress.spec.tsx +193 -0
  110. package/src/components/DataTable/DataTable.stories.tsx +40 -0
  111. package/src/components/DataTable/DataTable.styles.ts +3 -0
  112. package/src/components/DataTable/DataTable.tsx +3 -3
  113. package/src/components/DataTable/Item/DataTableItem.styles.ts +7 -2
  114. package/src/components/DataTable/Item/DataTableItem.tsx +4 -4
  115. package/src/components/DataTable/index.ts +3 -1
  116. package/src/components/Form/AccessRights/ShareInput/ContactSwitch.tsx +3 -3
  117. package/src/components/Form/AccessRights/ShareInput/ShareInput.tsx +1 -0
  118. package/src/components/Form/Dashboard/DashboardForm.tsx +15 -12
  119. package/src/components/Layout/PageLayout/PageLayout.tsx +1 -1
  120. package/src/components/Layout/PageLayout/PageLayoutActions.tsx +1 -0
  121. package/src/components/Layout/PageLayout/PageLayoutBody.tsx +1 -0
  122. package/src/components/Layout/PageLayout/PageLayoutHeader.tsx +5 -1
  123. package/src/components/Layout/PageLayout/PageQuickAccess.tsx +76 -0
  124. package/src/components/Layout/PageLayout/index.ts +3 -1
  125. package/src/components/Layout/PageLayout.cypress.spec.tsx +66 -0
  126. package/src/components/Modal/Modal.styles.ts +1 -1
  127. package/src/components/Tooltip/ConfirmationTooltip/ConfirmationTooltip.stories.tsx +3 -3
  128. package/src/components/Tooltip/ConfirmationTooltip/ConfirmationTooltip.tsx +1 -1
  129. package/src/components/Tooltip/ConfirmationTooltip/models.ts +1 -1
  130. package/src/index.ts +2 -2
  131. package/src/queryParameters/url/index.ts +5 -1
  132. package/src/utils/index.ts +2 -1
  133. package/src/utils/{useLicenseExpirationWarning.cypress.spec.tsx → useLicenseExpirationWarning.test.tsx} +48 -37
  134. package/src/utils/useLicenseExpirationWarning.ts +18 -18
  135. package/src/utils/usePluralizedTranslation.ts +21 -0
  136. package/src/screens/dashboard/DashboardsDetail.stories.tsx +0 -108
  137. package/src/screens/dashboard/DashboardsOverview.stories.tsx +0 -281
  138. package/src/utils/useDateTimePickerAdapter.ts +0 -309
@@ -69,21 +69,24 @@ export const getDescription = ({ sections }: Description): string => {
69
69
  })}<br></details>`;
70
70
  }
71
71
 
72
- const formattedProps = props.reduce((accumulator, currentValue, index) => {
73
- const key = Object.keys(currentValue)[0];
74
- const { description, type } = currentValue[key];
75
- const body = `${accumulator} ${getBodyDescription({
76
- description,
77
- key,
78
- type
79
- })}`;
72
+ const formattedProps = props.reduce(
73
+ (accumulator, currentValue, index) => {
74
+ const key = Object.keys(currentValue)[0];
75
+ const { description, type } = currentValue[key];
76
+ const body = `${accumulator} ${getBodyDescription({
77
+ description,
78
+ key,
79
+ type
80
+ })}`;
80
81
 
81
- if (!equals(index, props.length - 1)) {
82
- return body;
83
- }
82
+ if (!equals(index, props.length - 1)) {
83
+ return body;
84
+ }
84
85
 
85
- return `${body}</details>`;
86
- }, getInitialValue({ section: name, type: item?.type }));
86
+ return `${body}</details>`;
87
+ },
88
+ getInitialValue({ section: name, type: item?.type })
89
+ );
87
90
 
88
91
  return formattedProps as string;
89
92
  });
@@ -14,7 +14,7 @@ import { LineChartData } from '../../common/models';
14
14
  export const adjustGraphData = (graphData: LineChartData): LinesData => {
15
15
  const lines = getLineData(graphData);
16
16
  const sortedLines = sortBy(prop('name'), lines);
17
- const displayedLines = reject(propEq('display', false), sortedLines);
17
+ const displayedLines = reject(propEq(false, 'display'), sortedLines);
18
18
 
19
19
  const timeSeries = getTimeSeries(graphData);
20
20
 
@@ -39,8 +39,7 @@ import { Interval, ThresholdType, TooltipData } from './models';
39
39
  import WrapperLineChart from './index';
40
40
 
41
41
  const meta: Meta<typeof WrapperLineChart> = {
42
- component: WrapperLineChart,
43
- tags: ['autodocs']
42
+ component: WrapperLineChart
44
43
  };
45
44
  export default meta;
46
45
 
@@ -353,6 +352,9 @@ export const LineChartWithTimePeriod: Story = {
353
352
  end: defaultEnd,
354
353
  height: 500,
355
354
  start: defaultStart
355
+ },
356
+ parameters: {
357
+ chromatic: { diffThreshold: 0.1 }
356
358
  }
357
359
  };
358
360
 
@@ -78,7 +78,7 @@ const WrapperLineChart = ({
78
78
  return (
79
79
  <div
80
80
  ref={lineChartRef as MutableRefObject<HTMLDivElement>}
81
- style={{ height: '100%', width: '100%' }}
81
+ style={{ height: '100%', overflowY: 'hidden', width: '100%' }}
82
82
  >
83
83
  <ParentSize>
84
84
  {({
@@ -0,0 +1,169 @@
1
+ import numeral from 'numeral';
2
+
3
+ import PieChart from './PieChart';
4
+ import { ArcType, PieProps } from './models';
5
+
6
+ const defaultData = [
7
+ { color: '#88B922', label: 'Ok', value: 148 },
8
+ { color: '#999999', label: 'Unknown', value: 13 },
9
+ { color: '#F7931A', label: 'Warning', value: 16 },
10
+ { color: '#FF6666', label: 'Down', value: 62 }
11
+ ];
12
+
13
+ const dataWithNullValues = [
14
+ { color: '#88B922', label: 'Ok', value: 0 },
15
+ { color: '#999999', label: 'Unknown', value: 0 },
16
+ { color: '#F7931A', label: 'Warning', value: 0 },
17
+ { color: '#FF6666', label: 'Down', value: 0 }
18
+ ];
19
+
20
+ const total = Math.floor(
21
+ defaultData.reduce((acc, { value }) => acc + value, 0)
22
+ );
23
+
24
+ const TooltipContent = ({ label, color, value }: ArcType): JSX.Element => {
25
+ return (
26
+ <div data-testid={`tooltip-${label}`} style={{ color }}>
27
+ {label} : {value}
28
+ </div>
29
+ );
30
+ };
31
+
32
+ const initialize = ({
33
+ width = '500px',
34
+ height = '500px',
35
+ data = defaultData,
36
+ ...args
37
+ }: Omit<PieProps, 'data'> & {
38
+ data?;
39
+ height?: string;
40
+ width?: string;
41
+ }): void => {
42
+ cy.mount({
43
+ Component: (
44
+ <div style={{ height, width }}>
45
+ <PieChart {...args} data={data} />
46
+ </div>
47
+ )
48
+ });
49
+ };
50
+
51
+ describe('Pie chart', () => {
52
+ it('renders pie chart correctly with provided data', () => {
53
+ initialize({});
54
+
55
+ defaultData.forEach(({ label }) => {
56
+ cy.findByTestId(label).should('be.visible');
57
+ });
58
+
59
+ cy.makeSnapshot();
60
+ });
61
+
62
+ it('adjusts size based on the provided width and height', () => {
63
+ initialize({ displayLegend: false, height: '300px', width: '300px' });
64
+
65
+ cy.findByTestId('pieChart')
66
+ .should('have.css', 'width', '300px')
67
+ .and('have.css', 'height', '300px');
68
+
69
+ cy.makeSnapshot();
70
+ });
71
+
72
+ it('renders as a donut when variant is set to "donut"', () => {
73
+ initialize({ variant: 'donut' });
74
+ cy.get('[data-variant="donut"]').should('exist');
75
+
76
+ cy.makeSnapshot();
77
+ });
78
+
79
+ it('renders as a pie when variant is set to "pie"', () => {
80
+ initialize({ variant: 'pie' });
81
+ cy.get('[data-variant="pie"]').should('exist');
82
+
83
+ cy.makeSnapshot();
84
+ });
85
+
86
+ it('displays tooltip with correct information on hover', () => {
87
+ initialize({ TooltipContent });
88
+
89
+ defaultData.forEach(({ label, value }) => {
90
+ cy.findByTestId(label).trigger('mouseover', { force: true });
91
+
92
+ cy.findByTestId(`tooltip-${label}`)
93
+ .should('contain', label)
94
+ .and('contain', numeral(value).format('0a').toUpperCase());
95
+ });
96
+
97
+ cy.makeSnapshot();
98
+ });
99
+ it('conditionally displays values on arcs based on displayValues prop', () => {
100
+ initialize({ displayValues: true });
101
+ defaultData.forEach(({ value }, index) => {
102
+ cy.findAllByTestId('value')
103
+ .eq(index)
104
+ .children()
105
+ .eq(0)
106
+ .should('have.text', value);
107
+ });
108
+
109
+ initialize({ displayValues: false });
110
+ cy.findAllByTestId('value').should('not.exist');
111
+
112
+ cy.makeSnapshot();
113
+ });
114
+
115
+ it('displays values on arcs in percentage unit when displayValues is set to true and unit to percentage', () => {
116
+ initialize({ displayValues: true, unit: 'percentage' });
117
+ defaultData.forEach(({ value }, index) => {
118
+ cy.findAllByTestId('value')
119
+ .eq(index)
120
+ .children()
121
+ .eq(0)
122
+ .should('have.text', `${((value * 100) / total).toFixed(1)}%`);
123
+ });
124
+
125
+ cy.makeSnapshot();
126
+ });
127
+
128
+ it('displays Legend component based on displayLegend prop', () => {
129
+ initialize({ displayLegend: true });
130
+ cy.findByTestId('Legend').should('be.visible');
131
+
132
+ initialize({ displayLegend: false });
133
+ cy.findByTestId('Legend').should('not.exist');
134
+
135
+ cy.makeSnapshot();
136
+ });
137
+
138
+ it('displays the title when the title is giving', () => {
139
+ initialize({ title: 'host' });
140
+ cy.findByTestId('Title').should('be.visible');
141
+
142
+ initialize({});
143
+ cy.findByTestId('Title').should('not.exist');
144
+
145
+ cy.makeSnapshot();
146
+ });
147
+
148
+ it('adjusts outer radius when chart dimensions are too small', () => {
149
+ initialize({
150
+ displayLegend: false,
151
+ height: '120px',
152
+ title: 'hosts',
153
+ variant: 'donut',
154
+ width: '120px'
155
+ });
156
+
157
+ cy.get('[data-variant="donut"]').should('have.css', 'width', '100px');
158
+
159
+ cy.makeSnapshot();
160
+ });
161
+
162
+ it('displays a message "No Data Available" when all values are null', () => {
163
+ initialize({ data: dataWithNullValues, title: 'host' });
164
+
165
+ cy.contains('No Data Available');
166
+
167
+ cy.makeSnapshot();
168
+ });
169
+ });
@@ -0,0 +1,194 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+
3
+ import { ArcType } from './models';
4
+
5
+ import { PieChart } from '.';
6
+
7
+ const data = [
8
+ { color: '#88B922', label: 'Ok', value: 148 },
9
+ { color: '#999999', label: 'Unknown', value: 13 },
10
+ { color: '#F7931A', label: 'Warning', value: 16 },
11
+ { color: '#FF6666', label: 'Down', value: 62 }
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 meta: Meta<typeof PieChart> = {
22
+ component: PieChart
23
+ };
24
+
25
+ export default meta;
26
+ type Story = StoryObj<typeof PieChart>;
27
+
28
+ const Template = (args): JSX.Element => {
29
+ return (
30
+ <div style={{ height: '350px', width: '350px' }}>
31
+ <PieChart {...args} />
32
+ </div>
33
+ );
34
+ };
35
+
36
+ export const Pie: Story = {
37
+ args: {
38
+ data,
39
+ title: 'hosts'
40
+ },
41
+ render: Template
42
+ };
43
+
44
+ export const Donut: Story = {
45
+ args: {
46
+ data,
47
+ title: 'hosts',
48
+ variant: 'donut'
49
+ },
50
+ render: Template
51
+ };
52
+
53
+ export const WithPencentage: Story = {
54
+ args: {
55
+ data,
56
+ title: 'hosts',
57
+ unit: 'percentage',
58
+ variant: 'donut'
59
+ },
60
+ render: Template
61
+ };
62
+
63
+ export const WithBigNumbers: Story = {
64
+ args: {
65
+ data: dataWithBigNumbers,
66
+ title: 'hosts',
67
+ unit: 'number',
68
+ variant: 'donut'
69
+ },
70
+ render: Template
71
+ };
72
+
73
+ export const WithoutLegend: Story = {
74
+ args: {
75
+ data,
76
+ displayLegend: false,
77
+ title: 'hosts',
78
+ variant: 'donut'
79
+ },
80
+ render: Template
81
+ };
82
+
83
+ export const DonutWithoutTitle: Story = {
84
+ args: {
85
+ data,
86
+ variant: 'donut'
87
+ },
88
+ render: Template
89
+ };
90
+
91
+ export const PieWithoutTitle: Story = {
92
+ args: {
93
+ data
94
+ },
95
+ render: Template
96
+ };
97
+
98
+ export const DonutWithDisplayedValues: Story = {
99
+ args: {
100
+ data,
101
+ displayValues: true,
102
+ variant: 'donut'
103
+ },
104
+ render: Template
105
+ };
106
+
107
+ export const PieWithDisplayedValues: Story = {
108
+ args: {
109
+ data,
110
+ displayValues: true
111
+ },
112
+ render: Template
113
+ };
114
+
115
+ const TooltipContent = ({ label, color, value }: ArcType): JSX.Element => {
116
+ return (
117
+ <div style={{ color }}>
118
+ {label} : {value}
119
+ </div>
120
+ );
121
+ };
122
+
123
+ export const PieWithTooltip: Story = {
124
+ args: {
125
+ TooltipContent,
126
+ data,
127
+ displayValues: true,
128
+ unit: 'percentage'
129
+ },
130
+ render: Template
131
+ };
132
+
133
+ export const DonutWithTooltip: Story = {
134
+ args: {
135
+ TooltipContent,
136
+ data,
137
+ displayValues: true,
138
+ variant: 'donut'
139
+ },
140
+ render: Template
141
+ };
142
+
143
+ const TemplateForSmallDimensions = (args): JSX.Element => {
144
+ return (
145
+ <div style={{ height: '130px', width: '130px' }}>
146
+ <PieChart {...args} />
147
+ </div>
148
+ );
149
+ };
150
+
151
+ export const PieWithSmallDimensions: Story = {
152
+ args: {
153
+ data,
154
+ displayLegend: false
155
+ },
156
+ render: TemplateForSmallDimensions
157
+ };
158
+
159
+ export const DonutWithSmallDimensions: Story = {
160
+ args: {
161
+ data,
162
+ displayLegend: false,
163
+ title: 'hosts',
164
+ variant: 'donut'
165
+ },
166
+ render: TemplateForSmallDimensions
167
+ };
168
+
169
+ const dataWidthOneNoZeroValue = [
170
+ { color: '#88B922', label: 'Ok', value: 13 },
171
+ { color: '#999999', label: 'Unknown', value: 0 },
172
+ { color: '#F7931A', label: 'Warning', value: 0 },
173
+ { color: '#FF6666', label: 'Down', value: 0 }
174
+ ];
175
+
176
+ export const PieWithOneNoZeroValue: Story = {
177
+ args: {
178
+ data: dataWidthOneNoZeroValue,
179
+ displayLegend: false,
180
+ title: 'hosts',
181
+ variant: 'pie'
182
+ },
183
+ render: Template
184
+ };
185
+
186
+ export const donutWithOneNoZeroValue: Story = {
187
+ args: {
188
+ data: dataWidthOneNoZeroValue,
189
+ displayLegend: false,
190
+ title: 'hosts',
191
+ variant: 'donut'
192
+ },
193
+ render: Template
194
+ };
@@ -0,0 +1,39 @@
1
+ import { lt } from 'ramda';
2
+ import { makeStyles } from 'tss-react/mui';
3
+
4
+ export const usePieStyles = makeStyles<{ svgSize: number }>()(
5
+ (theme, { svgSize }) => ({
6
+ container: {
7
+ alignItems: 'center',
8
+ display: 'flex',
9
+ gap: theme.spacing(2),
10
+ justifyContent: 'center'
11
+ },
12
+ pieChartTooltip: {
13
+ backgroundColor: theme.palette.background.paper,
14
+ color: theme.palette.text.primary,
15
+ padding: 0,
16
+ position: 'relative'
17
+ },
18
+ svgContainer: {
19
+ alignItems: 'center',
20
+ backgroundColor: theme.palette.background.panelGroups,
21
+ borderRadius: '100%',
22
+ display: 'flex',
23
+ justifyContent: 'center'
24
+ },
25
+ svgWrapper: {
26
+ alignItems: 'center',
27
+ display: 'flex',
28
+ flexDirection: 'column',
29
+ gap: theme.spacing(1),
30
+ justifyContent: 'center'
31
+ },
32
+ title: {
33
+ fontSize: lt(svgSize, 150)
34
+ ? theme.typography.body1.fontSize
35
+ : theme.typography.h6.fontSize,
36
+ fontWeight: theme.typography.fontWeightMedium
37
+ }
38
+ })
39
+ );
@@ -0,0 +1,14 @@
1
+ import { ParentSize } from '../..';
2
+
3
+ import ResponsivePie from './ResponsivePie';
4
+ import { PieProps } from './models';
5
+
6
+ const PieChart = (props: PieProps): JSX.Element => (
7
+ <ParentSize>
8
+ {({ width, height }) => (
9
+ <ResponsivePie {...props} height={height} width={width} />
10
+ )}
11
+ </ParentSize>
12
+ );
13
+
14
+ export default PieChart;