Skip to content

Commit 1a2ac0e

Browse files
danilsomsikovDevtools-frontend LUCI CQ
authored andcommitted
Streamline DataGridWithPreview API.
Consistently use key/value pairs instead of string array. Also properly alias long identifiers. Bug: 301364727 Change-Id: I2ab6820a196c085f4119735d0720e83e267b9072 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6225901 Commit-Queue: Benedikt Meurer <[email protected]> Reviewed-by: Benedikt Meurer <[email protected]> Auto-Submit: Danil Somsikov <[email protected]>
1 parent 6971900 commit 1a2ac0e

File tree

4 files changed

+57
-38
lines changed

4 files changed

+57
-38
lines changed

front_end/panels/application/DOMStorageItemsView.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ export class DOMStorageItemsView extends StorageItemsView {
167167
return;
168168
}
169169

170-
this.grid.addItem([event.data.key, event.data.value]);
170+
this.grid.addItem(event.data.key, event.data.value);
171171
}
172172

173173
private domStorageItemUpdated(event: Common.EventTarget.EventTargetEvent<DOMStorage.DOMStorageItemUpdatedEvent>):
@@ -184,8 +184,17 @@ export class DOMStorageItemsView extends StorageItemsView {
184184
}
185185

186186
override refreshItems(): void {
187-
const filteredItems = (item: string[]): string => `${item[0]} ${item[1]}`;
188-
void this.domStorage.getItems().then(items => items && this.grid.showItems(this.filter(items, filteredItems)));
187+
void this.#refreshItems();
188+
}
189+
190+
async #refreshItems(): Promise<void> {
191+
const items = await this.domStorage.getItems();
192+
if (!items) {
193+
return;
194+
}
195+
const filteredItems =
196+
this.filter(items.map(item => ({key: item[0], value: item[1]})), item => `${item.key} ${item.value}`);
197+
this.grid.showItems(filteredItems);
189198
}
190199

191200
override deleteAllItems(): void {

front_end/panels/application/ExtensionStorageItemsView.ts

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -205,14 +205,21 @@ export class ExtensionStorageItemsView extends StorageItemsView {
205205
}
206206

207207
override refreshItems(): void {
208-
const filteredItems = (item: string[]): string => `${item[0]} ${item[1]}`;
209-
void this.#extensionStorage.getItems().then(items => {
210-
const itemsArray =
211-
Object.entries(items).map(([key, value]) => [key, typeof value === 'string' ? value : JSON.stringify(value)]);
212-
items && this.#grid.showItems(this.filter(itemsArray, filteredItems));
213-
this.extensionStorageItemsDispatcher.dispatchEventToListeners(
214-
ExtensionStorageItemsDispatcher.Events.ITEMS_REFRESHED);
215-
});
208+
void this.#refreshItems();
209+
}
210+
211+
async #refreshItems(): Promise<void> {
212+
const items = await this.#extensionStorage.getItems();
213+
if (!items) {
214+
return;
215+
}
216+
const filteredItems = this.filter(
217+
Object.entries(items).map(
218+
([key, value]) => ({key, value: typeof value === 'string' ? value : JSON.stringify(value)})),
219+
item => `${item.key} ${item.value}`);
220+
this.#grid.showItems(filteredItems);
221+
this.extensionStorageItemsDispatcher.dispatchEventToListeners(
222+
ExtensionStorageItemsDispatcher.Events.ITEMS_REFRESHED);
216223
}
217224

218225
override deleteAllItems(): void {

front_end/ui/legacy/components/data_grid/DataGridWithPreview.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ describeWithEnvironment('DataGridWithPreview', () => {
2424
] as DataGrid.DataGrid.ColumnDescriptor[];
2525

2626
const MOCK_ITEMS = [
27-
['foo', 'value1'],
28-
['bar', 'value2'],
27+
{key: 'foo', value: 'value1'},
28+
{key: 'bar', value: 'value2'},
2929
];
3030

3131
const createPreviewFunc = sinon.stub<[string, string]>();
@@ -72,7 +72,7 @@ describeWithEnvironment('DataGridWithPreview', () => {
7272
});
7373

7474
it('updates preview when key selected', async () => {
75-
const [key, value] = MOCK_ITEMS[0];
75+
const {key, value} = MOCK_ITEMS[0];
7676

7777
const createPreviewPromise = expectCreatePreviewCalled(key, value);
7878

@@ -90,7 +90,7 @@ describeWithEnvironment('DataGridWithPreview', () => {
9090

9191
it('shows empty preview when no row is selected', async () => {
9292
// Select the first item by key.
93-
const node = selectNodeByKey(dataGridWithPreview.dataGridForTesting, MOCK_ITEMS[0][0]);
93+
const node = selectNodeByKey(dataGridWithPreview.dataGridForTesting, MOCK_ITEMS[0].key);
9494
assert.isNotNull(node);
9595

9696
await raf();
@@ -106,7 +106,7 @@ describeWithEnvironment('DataGridWithPreview', () => {
106106
});
107107

108108
it('preview changed when value changes', async () => {
109-
const [key, value] = MOCK_ITEMS[0];
109+
const {key, value} = MOCK_ITEMS[0];
110110

111111
let createPreviewPromise = expectCreatePreviewCalled(key, value);
112112

@@ -121,7 +121,7 @@ describeWithEnvironment('DataGridWithPreview', () => {
121121
// would trigger the refreshItems callback - which would fetch new data and
122122
// call showItems again).
123123
const updatedItems = structuredClone(MOCK_ITEMS);
124-
updatedItems[0][1] = 'newValue';
124+
updatedItems[0].value = 'newValue';
125125

126126
createPreviewPromise = expectCreatePreviewCalled(key, 'newValue');
127127
dataGridWithPreview.showItems(updatedItems);

front_end/ui/legacy/components/data_grid/DataGridWithPreview.ts

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,19 @@
2929
*/
3030
import * as i18n from '../../../../core/i18n/i18n.js';
3131
import * as VisualLogging from '../../../visual_logging/visual_logging.js';
32-
import {ARIAUtils, EmptyWidget, SplitWidget, Widget} from '../../legacy.js';
32+
import * as UI from '../../legacy.js';
3333

3434
import {type ColumnDescriptor, DataGridImpl, DataGridNode, Events} from './DataGrid.js';
3535

36+
const {ARIAUtils} = UI;
37+
const {EmptyWidget} = UI.EmptyWidget;
38+
const {SplitWidget} = UI.SplitWidget;
39+
const {Widget, VBox} = UI.Widget;
40+
41+
type Widget = UI.Widget.Widget;
42+
type SplitWidget = UI.SplitWidget.SplitWidget;
43+
type VBox = UI.Widget.VBox;
44+
3645
const UIStrings = {
3746
/**
3847
*@description Text that shows in the Applicaiton Panel if no value is selected for preview
@@ -64,7 +73,7 @@ interface Callbacks {
6473
// Called when the selection state changes.
6574
setCanDeleteSelected: (canSelect: boolean) => void;
6675
// Called to create the preview widget when a new item is selected.
67-
createPreview: (key: string, value: string) => Promise<Widget.Widget|null>;
76+
createPreview: (key: string, value: string) => Promise<Widget|null>;
6877
}
6978

7079
interface Messages {
@@ -79,9 +88,9 @@ interface Messages {
7988
*/
8089
export class DataGridWithPreview {
8190
#dataGrid: DataGridImpl<unknown>;
82-
readonly #splitWidget: SplitWidget.SplitWidget;
83-
readonly #previewPanel: Widget.VBox;
84-
#preview: Widget.Widget|null;
91+
readonly #splitWidget: SplitWidget;
92+
readonly #previewPanel: VBox;
93+
#preview: Widget|null;
8594
#previewValue: string|null;
8695

8796
#callbacks: Callbacks;
@@ -110,11 +119,11 @@ export class DataGridWithPreview {
110119
this.#dataGrid.setStriped(true);
111120
this.#dataGrid.setName(`${id}-datagrid-with-preview`);
112121

113-
this.#splitWidget = new SplitWidget.SplitWidget(
122+
this.#splitWidget = new SplitWidget(
114123
/* isVertical: */ false, /* secondIsSidebar: */ true, `${id}-split-view-state`);
115124
this.#splitWidget.show(parent);
116125

117-
this.#previewPanel = new Widget.VBox();
126+
this.#previewPanel = new VBox();
118127
this.#previewPanel.setMinimumSize(0, 50);
119128
this.#previewPanel.element.setAttribute('jslog', `${VisualLogging.pane('preview').track({resize: true})}`);
120129
const resizer = this.#previewPanel.element.createChild('div', 'preview-panel-resizer');
@@ -134,7 +143,7 @@ export class DataGridWithPreview {
134143
return this.#dataGrid;
135144
}
136145

137-
get previewPanelForTesting(): Widget.VBox {
146+
get previewPanelForTesting(): VBox {
138147
return this.#previewPanel;
139148
}
140149

@@ -159,13 +168,10 @@ export class DataGridWithPreview {
159168
}
160169
}
161170

162-
addItem(item: string[]): void {
171+
addItem(key: string, value: string): void {
163172
const rootNode = this.#dataGrid.rootNode();
164173
const children = rootNode.children;
165174

166-
const key = item[0];
167-
const value = item[1];
168-
169175
for (let i = 0; i < children.length; ++i) {
170176
if (children[i].data.key === key) {
171177
return;
@@ -194,7 +200,7 @@ export class DataGridWithPreview {
194200
this.#callbacks.setCanDeleteSelected(true);
195201
}
196202

197-
showItems(items: string[][]): void {
203+
showItems(items: {key: string, value: string}[]): void {
198204
const rootNode = this.#dataGrid.rootNode();
199205
let selectedKey: null = null;
200206
for (const node of rootNode.children) {
@@ -208,12 +214,10 @@ export class DataGridWithPreview {
208214
let selectedNode: DataGridNode<unknown>|null = null;
209215
const sortDirection = this.#dataGrid.isSortOrderAscending() ? 1 : -1;
210216
// Make a copy to avoid sorting the original array.
211-
const filteredList = [...items].sort(function(item1: string[], item2: string[]): number {
212-
return sortDirection * (item1[0] > item2[0] ? 1 : -1);
217+
const filteredList = [...items].sort((item1, item2) => {
218+
return sortDirection * (item1.key > item2.key ? 1 : -1);
213219
});
214-
for (const item of filteredList) {
215-
const key = item[0];
216-
const value = item[1];
220+
for (const {key, value} of filteredList) {
217221
const node = new DataGridNode({key, value}, false);
218222
node.selectable = true;
219223
rootNode.appendChild(node);
@@ -271,16 +275,15 @@ export class DataGridWithPreview {
271275
ARIAUtils.alert(this.#messages.itemDeleted);
272276
}
273277

274-
showPreview(preview: Widget.Widget|null, value: string|null): void {
278+
showPreview(preview: Widget|null, value: string|null): void {
275279
if (this.#preview && this.#previewValue === value) {
276280
return;
277281
}
278282
if (this.#preview) {
279283
this.#preview.detach();
280284
}
281285
if (!preview) {
282-
preview = new EmptyWidget.EmptyWidget(
283-
i18nString(UIStrings.noPreviewSelected), i18nString(UIStrings.selectAValueToPreview));
286+
preview = new EmptyWidget(i18nString(UIStrings.noPreviewSelected), i18nString(UIStrings.selectAValueToPreview));
284287
}
285288
this.#previewValue = value;
286289
this.#preview = preview;

0 commit comments

Comments
 (0)