@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.
- package/package.json +50 -42
- package/public/mockServiceWorker.js +1 -1
- package/src/ActionsList/ActionsList.styles.ts +40 -71
- package/src/Button/Icon/index.tsx +1 -1
- package/src/Button/Save/StartIcon.tsx +3 -3
- package/src/Button/Save/index.tsx +9 -5
- package/src/Checkbox/Checkbox.tsx +2 -2
- package/src/Checkbox/CheckboxGroup/index.tsx +2 -2
- package/src/Dashboard/Item.tsx +1 -1
- package/src/Dashboard/Layout.tsx +2 -2
- package/src/Dialog/Confirm/index.tsx +10 -2
- package/src/Dialog/UnsavedChanges/index.tsx +21 -20
- package/src/Dialog/UnsavedChanges/translatedLabels.ts +4 -6
- package/src/Dialog/index.tsx +9 -2
- package/src/FallbackPage/FallbackPage.tsx +3 -3
- package/src/FileDropZone/index.tsx +3 -1
- package/src/Form/Form.cypress.spec.tsx +133 -0
- package/src/Form/Inputs/List/Content.tsx +62 -0
- package/src/Form/Inputs/List/List.styles.ts +29 -0
- package/src/Form/Inputs/List/List.tsx +58 -0
- package/src/Form/Inputs/List/useList.ts +81 -0
- package/src/Form/Inputs/Text.tsx +3 -1
- package/src/Form/Inputs/index.tsx +3 -1
- package/src/Form/Inputs/models.ts +10 -1
- package/src/Graph/BarStack/BarStack.cypress.spec.tsx +154 -0
- package/src/Graph/BarStack/BarStack.stories.tsx +123 -0
- package/src/Graph/BarStack/BarStack.styles.ts +37 -0
- package/src/Graph/BarStack/BarStack.tsx +14 -0
- package/src/Graph/BarStack/ResponsiveBarStack.tsx +222 -0
- package/src/Graph/BarStack/index.ts +1 -0
- package/src/Graph/BarStack/models.ts +20 -0
- package/src/Graph/BarStack/useResponsiveBarStack.ts +137 -0
- package/src/Graph/Gauge/Gauge.cypress.spec.tsx +102 -0
- package/src/Graph/Gauge/Gauge.tsx +1 -1
- package/src/Graph/HeatMap/HeatMap.cypress.spec.tsx +145 -0
- package/src/Graph/HeatMap/HeatMap.stories.tsx +0 -25
- package/src/Graph/HeatMap/ResponsiveHeatMap.tsx +8 -2
- package/src/Graph/Legend/Legend.tsx +21 -0
- package/src/Graph/Legend/index.ts +1 -0
- package/src/Graph/Legend/models.ts +11 -0
- package/src/Graph/LineChart/BasicComponents/Lines/Threshold/Circle.tsx +2 -2
- package/src/Graph/LineChart/BasicComponents/Thresholds.tsx +2 -2
- package/src/Graph/LineChart/BasicComponents/useFilterLines.ts +1 -1
- package/src/Graph/LineChart/InteractiveComponents/AnchorPoint/GuidingLines.tsx +2 -2
- package/src/Graph/LineChart/InteractiveComponents/Annotations/EventAnnotations.tsx +1 -1
- package/src/Graph/LineChart/Legend/Legend.styles.ts +1 -1
- package/src/Graph/LineChart/Legend/LegendHeader.tsx +1 -1
- package/src/Graph/LineChart/Legend/useInteractiveValues.ts +2 -2
- package/src/Graph/LineChart/Legend/useLegend.ts +3 -3
- package/src/Graph/LineChart/helpers/doc.ts +16 -13
- package/src/Graph/LineChart/helpers/index.ts +1 -1
- package/src/Graph/LineChart/index.stories.tsx +4 -2
- package/src/Graph/LineChart/index.tsx +1 -1
- package/src/Graph/PieChart/PieChart.cypress.spec.tsx +169 -0
- package/src/Graph/PieChart/PieChart.stories.tsx +194 -0
- package/src/Graph/PieChart/PieChart.styles.ts +39 -0
- package/src/Graph/PieChart/PieChart.tsx +14 -0
- package/src/Graph/PieChart/ResponsivePie.tsx +254 -0
- package/src/Graph/PieChart/index.ts +1 -0
- package/src/Graph/PieChart/models.ts +20 -0
- package/src/Graph/PieChart/useResponsivePie.ts +85 -0
- package/src/Graph/SingleBar/SingleBar.cypress.spec.tsx +121 -0
- package/src/Graph/SingleBar/Thresholds.tsx +2 -2
- package/src/Graph/Text/Text.cypress.spec.tsx +101 -0
- package/src/Graph/Text/Text.stories.tsx +60 -4
- package/src/Graph/Text/Text.tsx +1 -1
- package/src/Graph/common/testUtils.ts +71 -0
- package/src/Graph/common/timeSeries/index.ts +22 -14
- package/src/Graph/common/utils.ts +19 -0
- package/src/Graph/index.ts +3 -0
- package/src/Graph/translatedLabels.ts +1 -0
- package/src/InputField/Select/Autocomplete/Connected/index.tsx +10 -7
- package/src/InputField/Select/Autocomplete/Draggable/SortableList.tsx +1 -1
- package/src/InputField/Select/Autocomplete/Draggable/SortableListContent.tsx +1 -1
- package/src/InputField/Select/Autocomplete/Draggable/index.tsx +1 -1
- package/src/InputField/Select/Autocomplete/Multi/index.tsx +4 -2
- package/src/InputField/Select/Autocomplete/index.tsx +129 -116
- package/src/InputField/Select/IconPopover/index.tsx +2 -2
- package/src/InputField/Select/index.tsx +15 -2
- package/src/InputField/Text/index.tsx +2 -2
- package/src/Listing/ActionBar/index.tsx +9 -8
- package/src/Listing/Cell/DataCell.styles.ts +3 -0
- package/src/Listing/Cell/DataCell.tsx +23 -5
- package/src/Listing/Header/ListingHeader.tsx +1 -1
- package/src/Listing/Listing.cypress.spec.tsx +218 -33
- package/src/Listing/Listing.styles.ts +4 -7
- package/src/Listing/Row/Row.tsx +7 -3
- package/src/Listing/index.stories.tsx +37 -3
- package/src/Listing/index.test.tsx +1 -1
- package/src/Listing/index.tsx +80 -36
- package/src/Listing/models.ts +1 -0
- package/src/Listing/useStyleTable.ts +1 -0
- package/src/Module/Module.cypress.spec.tsx +129 -0
- package/src/Module/index.tsx +2 -4
- package/src/PopoverMenu/index.tsx +6 -5
- package/src/RichTextEditor/RichTextEditor.tsx +12 -1
- package/src/SortableItems/index.tsx +2 -7
- package/src/ThemeProvider/index.tsx +24 -0
- package/src/TimePeriods/CustomTimePeriod/CompactCustomTimePeriod.styles.ts +6 -7
- package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/PickersStartEndDate.tsx +8 -3
- package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/models.ts +0 -2
- package/src/TimePeriods/DateTimePickerInput.tsx +56 -19
- package/src/TimePeriods/ResolutionTimePeriod.cypress.spec.tsx +12 -9
- package/src/TimePeriods/TimePeriods.cypress.spec.tsx +9 -33
- package/src/TimePeriods/helpers/index.ts +1 -1
- package/src/TimePeriods/index.stories.tsx +12 -4
- package/src/TimePeriods/index.tsx +2 -2
- package/src/Typography/FluidTypography/FluidTypography.cypress.spec.tsx +27 -0
- package/src/Typography/FluidTypography/index.stories.tsx +2 -2
- package/src/Typography/FluidTypography/index.tsx +21 -28
- package/src/api/QueryProvider.tsx +1 -1
- package/src/api/TestQueryProvider.tsx +1 -1
- package/src/api/index.ts +3 -3
- package/src/api/useFetchQuery/index.ts +27 -23
- package/src/api/useMutationQuery/index.test.ts +4 -4
- package/src/api/useMutationQuery/index.ts +60 -25
- package/src/components/Button/Icon/IconButton.tsx +6 -2
- package/src/components/DataTable/DataListing.tsx +6 -0
- package/src/components/DataTable/DataTable.cypress.spec.tsx +174 -0
- package/src/components/DataTable/DataTable.stories.tsx +40 -0
- package/src/components/DataTable/DataTable.styles.ts +3 -0
- package/src/components/DataTable/DataTable.tsx +3 -3
- package/src/components/DataTable/Item/DataTableItem.styles.ts +7 -2
- package/src/components/DataTable/Item/DataTableItem.tsx +4 -60
- package/src/components/DataTable/index.ts +3 -1
- package/src/components/Form/AccessRights/AccessRights.cypress.spec.tsx +13 -13
- package/src/components/Form/AccessRights/ShareInput/ContactSwitch.tsx +3 -3
- package/src/components/Form/AccessRights/ShareInput/ShareInput.tsx +1 -0
- package/src/components/Form/AccessRights/storiesData.ts +22 -22
- package/src/components/Form/Dashboard/DashboardDuplicationForm.tsx +85 -0
- package/src/components/Form/Dashboard/DashboardForm.tsx +15 -12
- package/src/components/Form/Dashboard/index.ts +1 -0
- package/src/components/Form/FormActions.tsx +7 -2
- package/src/components/ItemComposition/ItemComposition.styles.ts +2 -2
- package/src/components/Layout/PageLayout/PageLayout.tsx +1 -1
- package/src/components/Layout/PageLayout/PageLayoutActions.tsx +1 -0
- package/src/components/Layout/PageLayout/PageLayoutBody.tsx +1 -0
- package/src/components/Layout/PageLayout/PageLayoutHeader.tsx +5 -1
- package/src/components/Layout/PageLayout/PageQuickAccess.tsx +76 -0
- package/src/components/Layout/PageLayout/index.ts +3 -1
- package/src/components/Layout/PageLayout.cypress.spec.tsx +66 -0
- package/src/components/List/Item/ListItem.tsx +3 -3
- package/src/components/Modal/ConfirmationModal/ConfirmationModal.cypress.spec.tsx +168 -0
- package/src/components/Modal/ConfirmationModal/ConfirmationModal.stories.tsx +62 -0
- package/src/components/Modal/ConfirmationModal/ConfirmationModal.tsx +87 -0
- package/src/components/Modal/Modal.styles.ts +8 -3
- package/src/components/Modal/index.ts +2 -0
- package/src/components/Tooltip/ConfirmationTooltip/ConfirmationTooltip.stories.tsx +3 -3
- package/src/components/Tooltip/ConfirmationTooltip/ConfirmationTooltip.tsx +1 -1
- package/src/components/Tooltip/ConfirmationTooltip/models.ts +1 -1
- package/src/index.ts +2 -2
- package/src/queryParameters/url/index.ts +5 -1
- package/src/utils/index.ts +1 -1
- package/src/utils/useFullscreen/Fullscreen.cypress.spec.tsx +1 -3
- package/src/utils/useFullscreen/useFullscreenListener.ts +10 -7
- package/src/utils/useInfiniteScrollListing.ts +4 -1
- package/src/utils/{useLicenseExpirationWarning.cypress.spec.tsx → useLicenseExpirationWarning.test.tsx} +48 -37
- package/src/utils/useLicenseExpirationWarning.ts +18 -18
- package/src/utils/usePluralizedTranslation.ts +21 -0
- package/src/Typography/FluidTypography/useFluidResizeObserver.ts +0 -56
- package/src/screens/dashboard/DashboardsDetail.stories.tsx +0 -108
- package/src/screens/dashboard/DashboardsOverview.stories.tsx +0 -281
- package/src/utils/useDateTimePickerAdapter.ts +0 -309
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
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
|
|
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
|
|
30
|
+
description: `Sub item ${subIndex * 10} description`,
|
|
19
31
|
disableCheckbox: false,
|
|
20
32
|
disableRow: false,
|
|
21
|
-
id: subIndex
|
|
22
|
-
name: `Sub Item ${subIndex
|
|
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(
|
|
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
|
|
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
|
-
|
|
73
|
-
columns={
|
|
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
|
-
|
|
181
|
+
describe('Sub items', () => {
|
|
182
|
+
it('expands the row when the corresponding icon is clicked', () => {
|
|
183
|
+
mountListingForSubItems({});
|
|
93
184
|
|
|
94
|
-
|
|
95
|
-
cy.contains('E0').should('be.visible');
|
|
185
|
+
cy.contains('E0').should('be.visible');
|
|
96
186
|
|
|
97
|
-
|
|
98
|
-
|
|
187
|
+
expandedItems.forEach((index) => {
|
|
188
|
+
const subItems = generateSubItems(index);
|
|
99
189
|
|
|
100
|
-
|
|
190
|
+
cy.findByLabelText(`Expand ${index}`).click();
|
|
101
191
|
|
|
102
|
-
|
|
192
|
+
cy.findByLabelText(`Collapse ${index}`).should('exist');
|
|
103
193
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
-
|
|
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('
|
|
114
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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,
|
|
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 ||
|
|
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: {
|
package/src/Listing/Row/Row.tsx
CHANGED
|
@@ -197,7 +197,7 @@ const Row = memo<RowProps>(
|
|
|
197
197
|
}
|
|
198
198
|
);
|
|
199
199
|
|
|
200
|
-
const IntersectionRow = (
|
|
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
|
|
218
|
-
|
|
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
|
};
|