Address comments
This commit is contained in:
parent
0b6ac63202
commit
6dea011c02
|
|
@ -24,9 +24,11 @@ import { PlaceholderPanel } from './placeholderPanel';
|
||||||
import { context, type MultiTraceModel } from './modelUtil';
|
import { context, type MultiTraceModel } from './modelUtil';
|
||||||
import { GridView, type RenderedGridCell } from '@web/components/gridView';
|
import { GridView, type RenderedGridCell } from '@web/components/gridView';
|
||||||
import { SplitView } from '@web/components/splitView';
|
import { SplitView } from '@web/components/splitView';
|
||||||
|
import type { ContextEntry } from '../entries';
|
||||||
|
|
||||||
type NetworkTabModel = {
|
type NetworkTabModel = {
|
||||||
resources: Entry[],
|
resources: Entry[],
|
||||||
|
contextIdMap: ContextIdMap,
|
||||||
};
|
};
|
||||||
|
|
||||||
type RenderedEntry = {
|
type RenderedEntry = {
|
||||||
|
|
@ -55,25 +57,24 @@ export function useNetworkTabModel(model: MultiTraceModel | undefined, selectedT
|
||||||
});
|
});
|
||||||
return filtered;
|
return filtered;
|
||||||
}, [model, selectedTime]);
|
}, [model, selectedTime]);
|
||||||
return { resources };
|
const contextIdMap = React.useMemo(() => new ContextIdMap(model), [model]);
|
||||||
|
return { resources, contextIdMap };
|
||||||
}
|
}
|
||||||
|
|
||||||
export const NetworkTab: React.FunctionComponent<{
|
export const NetworkTab: React.FunctionComponent<{
|
||||||
boundaries: Boundaries,
|
boundaries: Boundaries,
|
||||||
networkModel: NetworkTabModel,
|
networkModel: NetworkTabModel,
|
||||||
model?: MultiTraceModel,
|
|
||||||
onEntryHovered: (entry: Entry | undefined) => void,
|
onEntryHovered: (entry: Entry | undefined) => void,
|
||||||
}> = ({ boundaries, networkModel, model, onEntryHovered }) => {
|
}> = ({ boundaries, networkModel, onEntryHovered }) => {
|
||||||
const [sorting, setSorting] = React.useState<Sorting | undefined>(undefined);
|
const [sorting, setSorting] = React.useState<Sorting | undefined>(undefined);
|
||||||
const [selectedEntry, setSelectedEntry] = React.useState<RenderedEntry | undefined>(undefined);
|
const [selectedEntry, setSelectedEntry] = React.useState<RenderedEntry | undefined>(undefined);
|
||||||
|
|
||||||
const { renderedEntries } = React.useMemo(() => {
|
const { renderedEntries } = React.useMemo(() => {
|
||||||
const generator = ContextIdGenerator.forModel(model);
|
const renderedEntries = networkModel.resources.map(entry => renderEntry(entry, boundaries, networkModel.contextIdMap));
|
||||||
const renderedEntries = networkModel.resources.map(entry => renderEntry(entry, boundaries, generator));
|
|
||||||
if (sorting)
|
if (sorting)
|
||||||
sort(renderedEntries, sorting);
|
sort(renderedEntries, sorting);
|
||||||
return { renderedEntries };
|
return { renderedEntries };
|
||||||
}, [networkModel.resources, sorting, boundaries, model]);
|
}, [networkModel.resources, networkModel.contextIdMap, sorting, boundaries]);
|
||||||
|
|
||||||
if (!networkModel.resources.length)
|
if (!networkModel.resources.length)
|
||||||
return <PlaceholderPanel text='No network calls' />;
|
return <PlaceholderPanel text='No network calls' />;
|
||||||
|
|
@ -182,23 +183,13 @@ const renderCell = (entry: RenderedEntry, column: ColumnName): RenderedGridCell
|
||||||
return { body: '' };
|
return { body: '' };
|
||||||
};
|
};
|
||||||
|
|
||||||
class ContextIdGenerator {
|
class ContextIdMap {
|
||||||
private _pagerefToShortId = new Map<string, string>();
|
private _pagerefToShortId = new Map<string, string>();
|
||||||
|
private _contextToId = new Map<ContextEntry, string>();
|
||||||
private _lastPageId = 0;
|
private _lastPageId = 0;
|
||||||
private _lastApiRequestContextId = 0;
|
private _lastApiRequestContextId = 0;
|
||||||
private static _apiRequestContextIdSymbol = Symbol('apiRequestContextId');
|
|
||||||
private static _contextIdGeneratorSymbol = Symbol('contextIdGenerator');
|
|
||||||
|
|
||||||
static forModel(model?: MultiTraceModel): ContextIdGenerator {
|
constructor(model: MultiTraceModel | undefined) {}
|
||||||
if (!model)
|
|
||||||
return new ContextIdGenerator();
|
|
||||||
let generator = (model as any)[ContextIdGenerator._contextIdGeneratorSymbol];
|
|
||||||
if (!generator) {
|
|
||||||
generator = new ContextIdGenerator();
|
|
||||||
(model as any)[ContextIdGenerator._contextIdGeneratorSymbol] = generator;
|
|
||||||
}
|
|
||||||
return generator;
|
|
||||||
}
|
|
||||||
|
|
||||||
contextId(resource: Entry): string {
|
contextId(resource: Entry): string {
|
||||||
if (resource.pageref)
|
if (resource.pageref)
|
||||||
|
|
@ -222,11 +213,11 @@ class ContextIdGenerator {
|
||||||
const contextEntry = context(resource);
|
const contextEntry = context(resource);
|
||||||
if (!contextEntry)
|
if (!contextEntry)
|
||||||
return '';
|
return '';
|
||||||
let contextId = (contextEntry as any)[ContextIdGenerator._apiRequestContextIdSymbol];
|
let contextId = this._contextToId.get(contextEntry);
|
||||||
if (!contextId) {
|
if (!contextId) {
|
||||||
++this._lastApiRequestContextId;
|
++this._lastApiRequestContextId;
|
||||||
contextId = 'api#' + this._lastApiRequestContextId;
|
contextId = 'api#' + this._lastApiRequestContextId;
|
||||||
(contextEntry as any)[ContextIdGenerator._apiRequestContextIdSymbol] = contextId;
|
this._contextToId.set(contextEntry, contextId);
|
||||||
}
|
}
|
||||||
return contextId;
|
return contextId;
|
||||||
}
|
}
|
||||||
|
|
@ -242,7 +233,7 @@ function hasMultipleContexts(renderedEntries: RenderedEntry[]): boolean {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const renderEntry = (resource: Entry, boundaries: Boundaries, contextIdGenerator: ContextIdGenerator): RenderedEntry => {
|
const renderEntry = (resource: Entry, boundaries: Boundaries, contextIdGenerator: ContextIdMap): RenderedEntry => {
|
||||||
const routeStatus = formatRouteStatus(resource);
|
const routeStatus = formatRouteStatus(resource);
|
||||||
let resourceName: string;
|
let resourceName: string;
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue