@centreon/ui 24.4.59 → 24.4.61

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/package.json +50 -42
  2. package/public/mockServiceWorker.js +1 -1
  3. package/src/ActionsList/ActionsList.styles.ts +40 -71
  4. package/src/Button/Icon/index.tsx +1 -1
  5. package/src/Button/Save/StartIcon.tsx +3 -3
  6. package/src/Button/Save/index.tsx +9 -5
  7. package/src/Checkbox/Checkbox.tsx +2 -2
  8. package/src/Checkbox/CheckboxGroup/index.tsx +2 -2
  9. package/src/Dashboard/Item.tsx +1 -1
  10. package/src/Dashboard/Layout.tsx +2 -2
  11. package/src/Dialog/Confirm/index.tsx +10 -2
  12. package/src/Dialog/UnsavedChanges/index.tsx +21 -20
  13. package/src/Dialog/UnsavedChanges/translatedLabels.ts +4 -6
  14. package/src/Dialog/index.tsx +9 -2
  15. package/src/FallbackPage/FallbackPage.tsx +3 -3
  16. package/src/FileDropZone/index.tsx +3 -1
  17. package/src/Form/Form.cypress.spec.tsx +133 -0
  18. package/src/Form/Inputs/List/Content.tsx +62 -0
  19. package/src/Form/Inputs/List/List.styles.ts +29 -0
  20. package/src/Form/Inputs/List/List.tsx +58 -0
  21. package/src/Form/Inputs/List/useList.ts +81 -0
  22. package/src/Form/Inputs/Text.tsx +3 -1
  23. package/src/Form/Inputs/index.tsx +3 -1
  24. package/src/Form/Inputs/models.ts +10 -1
  25. package/src/Graph/BarStack/BarStack.cypress.spec.tsx +154 -0
  26. package/src/Graph/BarStack/BarStack.stories.tsx +123 -0
  27. package/src/Graph/BarStack/BarStack.styles.ts +37 -0
  28. package/src/Graph/BarStack/BarStack.tsx +14 -0
  29. package/src/Graph/BarStack/ResponsiveBarStack.tsx +222 -0
  30. package/src/Graph/BarStack/index.ts +1 -0
  31. package/src/Graph/BarStack/models.ts +20 -0
  32. package/src/Graph/BarStack/useResponsiveBarStack.ts +137 -0
  33. package/src/Graph/Gauge/Gauge.cypress.spec.tsx +102 -0
  34. package/src/Graph/Gauge/Gauge.tsx +1 -1
  35. package/src/Graph/HeatMap/HeatMap.cypress.spec.tsx +145 -0
  36. package/src/Graph/HeatMap/HeatMap.stories.tsx +0 -25
  37. package/src/Graph/HeatMap/ResponsiveHeatMap.tsx +8 -2
  38. package/src/Graph/Legend/Legend.tsx +21 -0
  39. package/src/Graph/Legend/index.ts +1 -0
  40. package/src/Graph/Legend/models.ts +11 -0
  41. package/src/Graph/LineChart/BasicComponents/Lines/Threshold/Circle.tsx +2 -2
  42. package/src/Graph/LineChart/BasicComponents/Thresholds.tsx +2 -2
  43. package/src/Graph/LineChart/BasicComponents/useFilterLines.ts +1 -1
  44. package/src/Graph/LineChart/InteractiveComponents/AnchorPoint/GuidingLines.tsx +2 -2
  45. package/src/Graph/LineChart/InteractiveComponents/Annotations/EventAnnotations.tsx +1 -1
  46. package/src/Graph/LineChart/Legend/Legend.styles.ts +1 -1
  47. package/src/Graph/LineChart/Legend/LegendHeader.tsx +1 -1
  48. package/src/Graph/LineChart/Legend/useInteractiveValues.ts +2 -2
  49. package/src/Graph/LineChart/Legend/useLegend.ts +3 -3
  50. package/src/Graph/LineChart/helpers/doc.ts +16 -13
  51. package/src/Graph/LineChart/helpers/index.ts +1 -1
  52. package/src/Graph/LineChart/index.stories.tsx +4 -2
  53. package/src/Graph/LineChart/index.tsx +1 -1
  54. package/src/Graph/PieChart/PieChart.cypress.spec.tsx +169 -0
  55. package/src/Graph/PieChart/PieChart.stories.tsx +194 -0
  56. package/src/Graph/PieChart/PieChart.styles.ts +39 -0
  57. package/src/Graph/PieChart/PieChart.tsx +14 -0
  58. package/src/Graph/PieChart/ResponsivePie.tsx +254 -0
  59. package/src/Graph/PieChart/index.ts +1 -0
  60. package/src/Graph/PieChart/models.ts +20 -0
  61. package/src/Graph/PieChart/useResponsivePie.ts +85 -0
  62. package/src/Graph/SingleBar/SingleBar.cypress.spec.tsx +121 -0
  63. package/src/Graph/SingleBar/Thresholds.tsx +2 -2
  64. package/src/Graph/Text/Text.cypress.spec.tsx +101 -0
  65. package/src/Graph/Text/Text.stories.tsx +60 -4
  66. package/src/Graph/Text/Text.tsx +1 -1
  67. package/src/Graph/common/testUtils.ts +71 -0
  68. package/src/Graph/common/timeSeries/index.ts +22 -14
  69. package/src/Graph/common/utils.ts +19 -0
  70. package/src/Graph/index.ts +3 -0
  71. package/src/Graph/translatedLabels.ts +1 -0
  72. package/src/InputField/Select/Autocomplete/Connected/index.tsx +10 -7
  73. package/src/InputField/Select/Autocomplete/Draggable/SortableList.tsx +1 -1
  74. package/src/InputField/Select/Autocomplete/Draggable/SortableListContent.tsx +1 -1
  75. package/src/InputField/Select/Autocomplete/Draggable/index.tsx +1 -1
  76. package/src/InputField/Select/Autocomplete/Multi/index.tsx +4 -2
  77. package/src/InputField/Select/Autocomplete/index.tsx +129 -116
  78. package/src/InputField/Select/IconPopover/index.tsx +2 -2
  79. package/src/InputField/Select/index.tsx +15 -2
  80. package/src/InputField/Text/index.tsx +2 -2
  81. package/src/Listing/ActionBar/index.tsx +9 -8
  82. package/src/Listing/Cell/DataCell.styles.ts +3 -0
  83. package/src/Listing/Cell/DataCell.tsx +23 -5
  84. package/src/Listing/Header/ListingHeader.tsx +1 -1
  85. package/src/Listing/Listing.cypress.spec.tsx +218 -33
  86. package/src/Listing/Listing.styles.ts +4 -7
  87. package/src/Listing/Row/Row.tsx +7 -3
  88. package/src/Listing/index.stories.tsx +37 -3
  89. package/src/Listing/index.test.tsx +1 -1
  90. package/src/Listing/index.tsx +80 -36
  91. package/src/Listing/models.ts +1 -0
  92. package/src/Listing/useStyleTable.ts +1 -0
  93. package/src/Module/Module.cypress.spec.tsx +129 -0
  94. package/src/Module/index.tsx +2 -4
  95. package/src/PopoverMenu/index.tsx +6 -5
  96. package/src/RichTextEditor/RichTextEditor.tsx +12 -1
  97. package/src/SortableItems/index.tsx +2 -7
  98. package/src/ThemeProvider/index.tsx +24 -0
  99. package/src/TimePeriods/CustomTimePeriod/CompactCustomTimePeriod.styles.ts +6 -7
  100. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/PickersStartEndDate.tsx +8 -3
  101. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/models.ts +0 -2
  102. package/src/TimePeriods/DateTimePickerInput.tsx +56 -19
  103. package/src/TimePeriods/ResolutionTimePeriod.cypress.spec.tsx +12 -9
  104. package/src/TimePeriods/TimePeriods.cypress.spec.tsx +9 -33
  105. package/src/TimePeriods/helpers/index.ts +1 -1
  106. package/src/TimePeriods/index.stories.tsx +12 -4
  107. package/src/TimePeriods/index.tsx +2 -2
  108. package/src/Typography/FluidTypography/FluidTypography.cypress.spec.tsx +27 -0
  109. package/src/Typography/FluidTypography/index.stories.tsx +2 -2
  110. package/src/Typography/FluidTypography/index.tsx +21 -28
  111. package/src/api/QueryProvider.tsx +1 -1
  112. package/src/api/TestQueryProvider.tsx +1 -1
  113. package/src/api/index.ts +3 -3
  114. package/src/api/useFetchQuery/index.ts +27 -23
  115. package/src/api/useMutationQuery/index.test.ts +4 -4
  116. package/src/api/useMutationQuery/index.ts +60 -25
  117. package/src/components/Button/Icon/IconButton.tsx +6 -2
  118. package/src/components/DataTable/DataListing.tsx +6 -0
  119. package/src/components/DataTable/DataTable.cypress.spec.tsx +174 -0
  120. package/src/components/DataTable/DataTable.stories.tsx +40 -0
  121. package/src/components/DataTable/DataTable.styles.ts +3 -0
  122. package/src/components/DataTable/DataTable.tsx +3 -3
  123. package/src/components/DataTable/Item/DataTableItem.styles.ts +7 -2
  124. package/src/components/DataTable/Item/DataTableItem.tsx +4 -60
  125. package/src/components/DataTable/index.ts +3 -1
  126. package/src/components/Form/AccessRights/AccessRights.cypress.spec.tsx +13 -13
  127. package/src/components/Form/AccessRights/ShareInput/ContactSwitch.tsx +3 -3
  128. package/src/components/Form/AccessRights/ShareInput/ShareInput.tsx +1 -0
  129. package/src/components/Form/AccessRights/storiesData.ts +22 -22
  130. package/src/components/Form/Dashboard/DashboardDuplicationForm.tsx +85 -0
  131. package/src/components/Form/Dashboard/DashboardForm.tsx +15 -12
  132. package/src/components/Form/Dashboard/index.ts +1 -0
  133. package/src/components/Form/FormActions.tsx +7 -2
  134. package/src/components/ItemComposition/ItemComposition.styles.ts +2 -2
  135. package/src/components/Layout/PageLayout/PageLayout.tsx +1 -1
  136. package/src/components/Layout/PageLayout/PageLayoutActions.tsx +1 -0
  137. package/src/components/Layout/PageLayout/PageLayoutBody.tsx +1 -0
  138. package/src/components/Layout/PageLayout/PageLayoutHeader.tsx +5 -1
  139. package/src/components/Layout/PageLayout/PageQuickAccess.tsx +76 -0
  140. package/src/components/Layout/PageLayout/index.ts +3 -1
  141. package/src/components/Layout/PageLayout.cypress.spec.tsx +66 -0
  142. package/src/components/List/Item/ListItem.tsx +3 -3
  143. package/src/components/Modal/ConfirmationModal/ConfirmationModal.cypress.spec.tsx +168 -0
  144. package/src/components/Modal/ConfirmationModal/ConfirmationModal.stories.tsx +62 -0
  145. package/src/components/Modal/ConfirmationModal/ConfirmationModal.tsx +87 -0
  146. package/src/components/Modal/Modal.styles.ts +8 -3
  147. package/src/components/Modal/index.ts +2 -0
  148. package/src/components/Tooltip/ConfirmationTooltip/ConfirmationTooltip.stories.tsx +3 -3
  149. package/src/components/Tooltip/ConfirmationTooltip/ConfirmationTooltip.tsx +1 -1
  150. package/src/components/Tooltip/ConfirmationTooltip/models.ts +1 -1
  151. package/src/index.ts +2 -2
  152. package/src/queryParameters/url/index.ts +5 -1
  153. package/src/utils/index.ts +1 -1
  154. package/src/utils/useFullscreen/Fullscreen.cypress.spec.tsx +1 -3
  155. package/src/utils/useFullscreen/useFullscreenListener.ts +10 -7
  156. package/src/utils/useInfiniteScrollListing.ts +4 -1
  157. package/src/utils/{useLicenseExpirationWarning.cypress.spec.tsx → useLicenseExpirationWarning.test.tsx} +48 -37
  158. package/src/utils/useLicenseExpirationWarning.ts +18 -18
  159. package/src/utils/usePluralizedTranslation.ts +21 -0
  160. package/src/Typography/FluidTypography/useFluidResizeObserver.ts +0 -56
  161. package/src/screens/dashboard/DashboardsDetail.stories.tsx +0 -108
  162. package/src/screens/dashboard/DashboardsOverview.stories.tsx +0 -281
  163. package/src/utils/useDateTimePickerAdapter.ts +0 -309
@@ -1,4 +1,8 @@
1
- import { Button } from '@mui/material';
1
+ import { useState } from 'react';
2
+
3
+ import { Button, Typography } from '@mui/material';
4
+
5
+ import { ListingVariant } from '@centreon/ui-context';
2
6
 
3
7
  import { ColumnType } from './models';
4
8
 
@@ -12,20 +16,26 @@ const ButtonColumn = ({ row }: Props): JSX.Element => (
12
16
  <Button size="small">Click to reveal details about {row.name}</Button>
13
17
  );
14
18
 
15
- const generateSubItems = (parentIndex: number): Array<unknown> => {
19
+ const LargeText = (): JSX.Element => (
20
+ <Typography sx={{ whiteSpace: 'normal' }}>
21
+ This is a large text that fills the content
22
+ </Typography>
23
+ );
24
+
25
+ const tenElements = new Array(10).fill(0);
26
+
27
+ const generateSubItems = (): Array<unknown> => {
16
28
  return tenElements.map((__, subIndex) => ({
17
29
  active: false,
18
- description: `Sub item ${subIndex + (parentIndex + 10) * 10} description`,
30
+ description: `Sub item ${subIndex * 10} description`,
19
31
  disableCheckbox: false,
20
32
  disableRow: false,
21
- id: subIndex + (parentIndex + 10) * 10,
22
- name: `Sub Item ${subIndex + (parentIndex + 10) * 10}`,
33
+ id: subIndex * 10,
34
+ name: `Sub Item ${subIndex * 10}`,
23
35
  selected: false
24
36
  }));
25
37
  };
26
38
 
27
- const tenElements = new Array(10).fill(0);
28
-
29
39
  const listingWithSubItems = tenElements.map((_, index) => ({
30
40
  active: false,
31
41
  description: `Entity ${index}`,
@@ -34,9 +44,44 @@ const listingWithSubItems = tenElements.map((_, index) => ({
34
44
  id: index,
35
45
  name: `E${index}`,
36
46
  selected: false,
37
- subItems: index % 2 === 0 ? generateSubItems(index) : undefined
47
+ subItems: index % 2 === 0 ? generateSubItems() : undefined
38
48
  }));
39
49
 
50
+ const listingWithSubItems3Rows = Array(3)
51
+ .fill(0)
52
+ .map((_, index) => ({
53
+ active: false,
54
+ description: `Entity ${index}`,
55
+ disableCheckbox: false,
56
+ disableRow: false,
57
+ id: index,
58
+ name: `E${index}`,
59
+ selected: false,
60
+ subItems: index % 2 === 0 ? generateSubItems() : undefined
61
+ }));
62
+
63
+ const defaultColumn = [
64
+ {
65
+ getFormattedString: ({ name }): string => name,
66
+ id: 'name',
67
+ label: 'Name',
68
+ type: ColumnType.string
69
+ },
70
+ {
71
+ getFormattedString: ({ description }): string => description,
72
+ id: 'description',
73
+ label: 'Description',
74
+ type: ColumnType.string
75
+ },
76
+ {
77
+ Component: LargeText,
78
+ id: '#',
79
+ label: 'Custom',
80
+ type: ColumnType.component,
81
+ width: '100px'
82
+ }
83
+ ];
84
+
40
85
  const columnsWithSubItems = [
41
86
  {
42
87
  getFormattedString: ({ name }): string => name,
@@ -62,25 +107,19 @@ const columnsWithSubItems = [
62
107
 
63
108
  const expandedItems = [0, 8];
64
109
 
65
- const mountListing = (): void => {
110
+ const mountListingResponsive = (listingVariant: ListingVariant): void => {
66
111
  cy.viewport('macbook-13');
67
112
 
68
113
  cy.mount({
69
114
  Component: (
70
115
  <div style={{ height: '100vh' }}>
71
116
  <Listing
72
- checkable
73
- columns={columnsWithSubItems}
117
+ isResponsive
118
+ columns={defaultColumn}
74
119
  currentPage={1}
75
120
  limit={10}
121
+ listingVariant={listingVariant}
76
122
  rows={listingWithSubItems}
77
- subItems={{
78
- canCheckSubItems: false,
79
- enable: true,
80
- getRowProperty: () => 'subItems',
81
- labelCollapse: 'Collapse',
82
- labelExpand: 'Expand'
83
- }}
84
123
  totalRows={10}
85
124
  />
86
125
  </div>
@@ -88,34 +127,180 @@ const mountListing = (): void => {
88
127
  });
89
128
  };
90
129
 
130
+ interface TestComponentProps {
131
+ canCheckSubItems?: boolean;
132
+ isSmallListing?: boolean;
133
+ }
134
+
135
+ const TestComponent = ({
136
+ isSmallListing = false,
137
+ canCheckSubItems = false
138
+ }: TestComponentProps): JSX.Element => {
139
+ const [selectedRows, setSelectedRows] = useState([]);
140
+
141
+ return (
142
+ <Listing
143
+ checkable
144
+ columns={columnsWithSubItems}
145
+ currentPage={1}
146
+ limit={10}
147
+ rows={isSmallListing ? listingWithSubItems3Rows : listingWithSubItems}
148
+ selectedRows={selectedRows}
149
+ subItems={{
150
+ canCheckSubItems,
151
+ enable: true,
152
+ getRowProperty: () => 'subItems',
153
+ labelCollapse: 'Collapse',
154
+ labelExpand: 'Expand'
155
+ }}
156
+ totalRows={10}
157
+ onSelectRows={setSelectedRows}
158
+ />
159
+ );
160
+ };
161
+
162
+ const mountListingForSubItems = ({
163
+ isSmallListing = false,
164
+ canCheckSubItems = false
165
+ }: TestComponentProps): void => {
166
+ cy.viewport('macbook-13');
167
+
168
+ cy.mount({
169
+ Component: (
170
+ <div style={{ height: '100vh' }}>
171
+ <TestComponent
172
+ canCheckSubItems={canCheckSubItems}
173
+ isSmallListing={isSmallListing}
174
+ />
175
+ </div>
176
+ )
177
+ });
178
+ };
179
+
91
180
  describe('Listing', () => {
92
- beforeEach(mountListing);
181
+ describe('Sub items', () => {
182
+ it('expands the row when the corresponding icon is clicked', () => {
183
+ mountListingForSubItems({});
93
184
 
94
- it('expands the row when the corresponding icon si clicked', () => {
95
- cy.contains('E0').should('be.visible');
185
+ cy.contains('E0').should('be.visible');
96
186
 
97
- expandedItems.forEach((index) => {
98
- const subItems = generateSubItems(index);
187
+ expandedItems.forEach((index) => {
188
+ const subItems = generateSubItems(index);
99
189
 
100
- cy.findByLabelText(`Expand ${index}`).click();
190
+ cy.findByLabelText(`Expand ${index}`).click();
101
191
 
102
- cy.findByLabelText(`Collapse ${index}`).should('exist');
192
+ cy.findByLabelText(`Collapse ${index}`).should('exist');
103
193
 
104
- subItems.forEach(({ name, description }) => {
105
- cy.contains(name).should('exist');
106
- cy.contains(description).should('exist');
194
+ subItems.forEach(({ name, description }) => {
195
+ cy.contains(name).should('exist');
196
+ cy.contains(description).should('exist');
197
+ });
198
+
199
+ cy.findByLabelText(`Collapse ${index}`).click();
107
200
  });
201
+
202
+ cy.makeSnapshot();
108
203
  });
109
204
 
110
- cy.makeSnapshot();
205
+ it('collapses the row when the corresponding icon is clicked', () => {
206
+ mountListingForSubItems({});
207
+
208
+ cy.findByLabelText(`Expand 0`).click();
209
+
210
+ cy.contains('Sub item 10').should('be.visible');
211
+
212
+ cy.findByLabelText('Collapse 0').click();
213
+
214
+ cy.contains('Sub item 10').should('not.exist');
215
+
216
+ cy.makeSnapshot();
217
+ });
218
+
219
+ it('displays only one row as hovered when mutilple rows are expanded and a sub item row is hovered', () => {
220
+ mountListingForSubItems({ isSmallListing: true });
221
+
222
+ cy.findByLabelText('Expand 2').click();
223
+ cy.findByLabelText('Expand 0').click();
224
+
225
+ cy.findByLabelText('Collapse 0').should('be.visible');
226
+ cy.findByLabelText('Collapse 2').should('be.visible');
227
+
228
+ cy.contains('Sub Item 0').realHover();
229
+
230
+ cy.get('[data-isHovered="true"]').should('have.length', 1);
231
+ cy.get('[data-isHovered="true"]').contains('Sub Item 0').should('exist');
232
+
233
+ cy.findByLabelText('Collapse 0').click();
234
+ cy.findByLabelText('Collapse 2').click();
235
+ });
236
+
237
+ it('selects displayed rows when a row is selected and another row is selected with the shift key', () => {
238
+ mountListingForSubItems({ canCheckSubItems: true, isSmallListing: true });
239
+
240
+ cy.findByLabelText('Expand 0').click();
241
+
242
+ cy.findByLabelText('Collapse 0').should('be.visible');
243
+
244
+ cy.findAllByLabelText('Select row 0').eq(0).click();
245
+ cy.get('body').type('{shift}', { release: false });
246
+ cy.findByLabelText('Select row 50').eq(0).click();
247
+
248
+ cy.findAllByLabelText('Select row 0').eq(0).should('be.checked');
249
+ cy.findAllByLabelText('Select row 0').eq(1).should('be.checked');
250
+ cy.findByLabelText('Select row 10').should('be.checked');
251
+ cy.findByLabelText('Select row 20').should('be.checked');
252
+ cy.findByLabelText('Select row 30').should('be.checked');
253
+ cy.findByLabelText('Select row 40').should('be.checked');
254
+ cy.findByLabelText('Select row 50').should('be.checked');
255
+
256
+ cy.findByLabelText('Collapse 0').click();
257
+ });
258
+
259
+ it('selects displayed rows when the corresponding checkbox is clicked', () => {
260
+ mountListingForSubItems({ canCheckSubItems: true, isSmallListing: true });
261
+
262
+ cy.findByLabelText('Expand 0').click();
263
+
264
+ cy.findByLabelText('Collapse 0').should('be.visible');
265
+
266
+ cy.findAllByLabelText('Select all').eq(0).click();
267
+
268
+ cy.findAllByLabelText('Select row 0').eq(0).should('be.checked');
269
+ tenElements.forEach((_, index) => {
270
+ if (index === 0) {
271
+ cy.findAllByLabelText('Select row 0').eq(1).should('be.checked');
272
+
273
+ return;
274
+ }
275
+ cy.findByLabelText(`Select row ${index * 10}`).should('be.checked');
276
+ });
277
+ cy.findByLabelText('Select row 1').should('be.checked');
278
+ cy.findByLabelText('Select row 2').should('be.checked');
279
+
280
+ cy.findByLabelText('Collapse 0').click();
281
+ });
111
282
  });
112
283
 
113
- it('collapses the row when the corresponding icon si clicked', () => {
114
- cy.contains('Sub item 100').should('be.visible');
284
+ it('displays the last column on several lines in compact mode when the isResponsive prop is set', () => {
285
+ mountListingResponsive(ListingVariant.compact);
286
+
287
+ cy.get('.MuiTable-root').should(
288
+ 'have.css',
289
+ 'grid-template-rows',
290
+ '30px 85px 85px 85px 85px 85px 85px 85px 85px 85px 85px'
291
+ );
292
+
293
+ cy.makeSnapshot();
294
+ });
115
295
 
116
- cy.findByLabelText('Collapse 0').click();
296
+ it('displays the last column on several lines in extended mode when the isResponsive prop is set', () => {
297
+ mountListingResponsive(ListingVariant.extended);
117
298
 
118
- cy.contains('Sub item 100').should('not.exist');
299
+ cy.get('.MuiTable-root').should(
300
+ 'have.css',
301
+ 'grid-template-rows',
302
+ '38px 85px 85px 85px 85px 85px 85px 85px 85px 85px 85px'
303
+ );
119
304
 
120
305
  cy.makeSnapshot();
121
306
  });
@@ -1,7 +1,5 @@
1
1
  import { makeStyles } from 'tss-react/mui';
2
2
 
3
- import { ListingVariant } from '@centreon/ui-context';
4
-
5
3
  import { TableStyleAtom as TableStyle } from './models';
6
4
 
7
5
  const loadingIndicatorHeight = 3;
@@ -9,13 +7,12 @@ const loadingIndicatorHeight = 3;
9
7
  interface StylesProps {
10
8
  dataStyle: TableStyle;
11
9
  getGridTemplateColumn: string;
12
- limit: number;
13
- listingVariant: ListingVariant;
10
+ isResponsive: string;
14
11
  rows: Array<unknown>;
15
12
  }
16
13
 
17
14
  const useListingStyles = makeStyles<StylesProps>()(
18
- (theme, { dataStyle, getGridTemplateColumn, rows, limit }) => ({
15
+ (theme, { dataStyle, getGridTemplateColumn, rows, isResponsive }) => ({
19
16
  actionBar: {
20
17
  alignItems: 'center',
21
18
  display: 'flex'
@@ -56,8 +53,8 @@ const useListingStyles = makeStyles<StylesProps>()(
56
53
  display: 'grid',
57
54
  gridTemplateColumns: getGridTemplateColumn,
58
55
  gridTemplateRows: `${theme.spacing(dataStyle.header.height / 8)} repeat(${
59
- rows?.length || limit
60
- }, ${dataStyle.body.height}px)`,
56
+ rows?.length || 1
57
+ }, ${isResponsive ? 'auto' : `${dataStyle.body.height}px`})`,
61
58
  position: 'relative'
62
59
  },
63
60
  tableBody: {
@@ -197,7 +197,7 @@ const Row = memo<RowProps>(
197
197
  }
198
198
  );
199
199
 
200
- const IntersectionRow = (props: Props): JSX.Element => {
200
+ const IntersectionRow = ({ isHovered, ...rest }: Props): JSX.Element => {
201
201
  const rowRef = useRef<HTMLDivElement | null>(null);
202
202
  const theme = useTheme();
203
203
  const { isInViewport, setElement } = useViewportIntersection({
@@ -214,8 +214,12 @@ const IntersectionRow = (props: Props): JSX.Element => {
214
214
  }, [getFirstCellElement()]);
215
215
 
216
216
  return (
217
- <div className={classes.intersectionRow} ref={rowRef}>
218
- <Row {...props} isInViewport={isInViewport} />
217
+ <div
218
+ className={classes.intersectionRow}
219
+ data-isHovered={isHovered}
220
+ ref={rowRef}
221
+ >
222
+ <Row {...rest} isHovered={isHovered} isInViewport={isInViewport} />
219
223
  </div>
220
224
  );
221
225
  };
@@ -40,7 +40,7 @@ const useStyles = makeStyles()((theme) => ({
40
40
  }));
41
41
 
42
42
  const ComponentColumn = ({ row, isSelected }): JSX.Element => (
43
- <>
43
+ <div style={{ display: 'flex', flexDirection: 'row', flexWrap: 'wrap' }}>
44
44
  <span>
45
45
  {'I am '}
46
46
  <b>{`${isSelected ? 'selected' : 'not selected'}`}</b>
@@ -50,7 +50,7 @@ const ComponentColumn = ({ row, isSelected }): JSX.Element => (
50
50
  {'I am '}
51
51
  <b>{`${row.active ? 'active' : 'not active'}`}</b>
52
52
  </span>
53
- </>
53
+ </div>
54
54
  );
55
55
 
56
56
  const ButtonColumn = ({ row }): JSX.Element => (
@@ -366,6 +366,16 @@ const columnsWithSubItems = [
366
366
  }
367
367
  ];
368
368
 
369
+ const TemplateSubItems = (args): JSX.Element => {
370
+ const { classes } = useStyles();
371
+
372
+ return (
373
+ <div className={classes.listing}>
374
+ <Listing {...args} />
375
+ </div>
376
+ );
377
+ };
378
+
369
379
  export const ListingWithSubItems = {
370
380
  args: {
371
381
  checkable: true,
@@ -382,5 +392,29 @@ export const ListingWithSubItems = {
382
392
  labelExpand: 'Expand'
383
393
  },
384
394
  totalRows: 10
385
- }
395
+ },
396
+ render: TemplateSubItems
397
+ };
398
+
399
+ export const ListingWithResponsive = {
400
+ args: {
401
+ checkable: true,
402
+ columns: [
403
+ ...defaultColumns,
404
+ {
405
+ Component: ComponentColumn,
406
+ id: '##',
407
+ label: 'Responsive',
408
+ type: ColumnType.component,
409
+ width: '140px'
410
+ }
411
+ ],
412
+ currentPage: 1,
413
+ isResponsive: true,
414
+ limit: 10,
415
+ loading: false,
416
+ rows: listingWithSubItems,
417
+ totalRows: 10
418
+ },
419
+ render: TemplateSubItems
386
420
  };
@@ -216,7 +216,7 @@ describe('Listing', () => {
216
216
  <Listing
217
217
  columnConfiguration={{
218
218
  selectedColumnIds: columns.map(prop('id')),
219
- sortable: false
219
+ sortable: true
220
220
  }}
221
221
  columns={columns}
222
222
  rows={rows}