Skip to content

Commit 56eabc8

Browse files
authored
chore: grid dev page fixes (#10098)
1 parent b662b2a commit 56eabc8

File tree

1 file changed

+34
-13
lines changed

1 file changed

+34
-13
lines changed

dev/grid.html

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@
9191
</div>
9292
</div>
9393

94-
<vaadin-grid multi-sort column-reordering-allowed>
94+
<vaadin-grid multi-sort column-reordering-allowed item-id-path="id">
9595
<vaadin-grid-selection-column></vaadin-grid-selection-column>
9696

9797
<vaadin-grid-column-group header="Personal Information">
@@ -116,16 +116,33 @@
116116
import '@vaadin/select';
117117
import '@vaadin/list-box';
118118

119+
const createItem = (id, children) => ({
120+
name: `First Lastname ${id}`,
121+
email: `first.lastname${id}@example.com`,
122+
address: `${id} Main Street`,
123+
city: `City ${id}`,
124+
country: `Country ${id}`,
125+
children,
126+
id,
127+
});
128+
119129
// Generate sample data
120130
const generateItems = (count) => {
121-
return Array.from({ length: count }, (_, i) => ({
122-
name: `First Lastname ${i + 1}`,
123-
email: `first.lastname${i + 1}@example.com`,
124-
address: `${i + 1} Main Street`,
125-
city: `City ${i + 1}`,
126-
country: `Country ${i + 1}`,
127-
children: i % 3 === 0,
128-
}));
131+
return Array.from({ length: count }, (_, i) => createItem(i + 1, i % 3 === 0));
132+
};
133+
134+
const generateDataProvider = (rootLevelSize) => {
135+
return ({ parentItem, page, pageSize }, cb) => {
136+
if (!parentItem) {
137+
const rootItems = generateItems(rootLevelSize);
138+
const offset = page * pageSize;
139+
cb(rootItems.slice(offset, offset + pageSize), rootItems.length);
140+
} else {
141+
const childId = parentItem.id + '-1';
142+
const childItem = createItem(childId, parentItem.children);
143+
cb([childItem], 1);
144+
}
145+
};
129146
};
130147

131148
// Setup grid and controls
@@ -134,7 +151,7 @@
134151
const treeColumn = grid.querySelector('vaadin-grid-tree-column');
135152

136153
// Initialize grid with data
137-
grid.items = generateItems(100);
154+
grid.dataProvider = generateDataProvider(100);
138155

139156
// Setup row details renderer
140157
const rowDetailsRenderer = (root, grid, model) => {
@@ -177,15 +194,17 @@ <h4>Details for ${model.item.name}</h4>
177194

178195
// Items Controls
179196
document.getElementById('items').addEventListener('value-changed', (e) => {
180-
grid.items = generateItems(parseInt(e.detail.value));
197+
grid.dataProvider = generateDataProvider(parseInt(e.detail.value));
181198
});
182199

183200
document.getElementById('details').addEventListener('checked-changed', (e) => {
184201
grid.rowDetailsRenderer = e.detail.value ? rowDetailsRenderer : undefined;
202+
grid.detailsOpenedItems = [];
185203
});
186204

187205
document.getElementById('children').addEventListener('checked-changed', (e) => {
188206
grid.itemHasChildrenPath = e.detail.value ? 'children' : '';
207+
grid.requestContentUpdate();
189208
});
190209

191210
// Column Controls
@@ -276,8 +295,10 @@ <h4>Details for ${model.item.name}</h4>
276295

277296
// Handle active item changes for details
278297
grid.addEventListener('active-item-changed', (e) => {
279-
const item = e.detail.value;
280-
grid.detailsOpenedItems = item ? [item] : [];
298+
if (grid.rowDetailsRenderer) {
299+
const item = e.detail.value;
300+
grid.detailsOpenedItems = item ? [item] : [];
301+
}
281302
});
282303

283304
// Drag & Drop Controls

0 commit comments

Comments
 (0)