Skip to content

Commit 577e2ac

Browse files
committed
feat: remember view selection
1 parent 7ddab08 commit 577e2ac

5 files changed

Lines changed: 46 additions & 11 deletions

File tree

packages/web-extension/entrypoints/devtools-panel/App.tsx

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { useMemo, useState } from "react";
2+
import { SpanFilter, useSpanFilter } from "~/utils/span-filter";
23
import {
34
filterInBetweenSpans,
45
filterServerSpans,
@@ -20,20 +21,14 @@ import WaterfallChart, {
2021

2122
const WS_URL = "ws://localhost:3300/";
2223

23-
enum SpanFilter {
24-
ALL = "All",
25-
ROOT_SPANS = "Condensed",
26-
REQUESTS_ONLY = "Requests",
27-
}
28-
2924
export default function App() {
3025
const [spans, setSpans] = useState<SpanTree>({});
3126
const [selectedRequestId, setSelectedRequestId] = useState<string | null>(
3227
null,
3328
);
3429
const [isPanelOpen, setIsPanelOpen] = useState(false);
3530
const [catchUpReceived, setCatchUpReceived] = useState(false);
36-
const [spanFilter, setSpanFilter] = useState(SpanFilter.ROOT_SPANS);
31+
const [spanFilter, setSpanFilter] = useSpanFilter();
3732
const {
3833
send,
3934
status: wsStatus,

packages/web-extension/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"test:watch": "vitest"
1818
},
1919
"dependencies": {
20+
"@wxt-dev/storage": "^1.2.0",
2021
"clsx": "^2.1.1",
2122
"debounce": "^2.2.0",
2223
"react": "^19.1.1",
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { storage } from "@wxt-dev/storage";
2+
import { useCallback, useEffect, useState } from "react";
3+
4+
export enum SpanFilter {
5+
ALL = "All",
6+
ROOT_SPANS = "Condensed",
7+
REQUESTS_ONLY = "Requests",
8+
}
9+
10+
export const spanFilterStorage = storage.defineItem<SpanFilter>(
11+
"sync:spanFilter",
12+
{
13+
fallback: SpanFilter.ROOT_SPANS,
14+
},
15+
);
16+
17+
export const useSpanFilter = () => {
18+
const [spanFilter, setSpanFilterValue] = useState<SpanFilter>(
19+
spanFilterStorage.fallback,
20+
);
21+
22+
const setSpanFilter = useCallback((value: SpanFilter) => {
23+
spanFilterStorage.setValue(value);
24+
}, []);
25+
26+
useEffect(() => {
27+
spanFilterStorage.getValue().then(setSpanFilterValue);
28+
return spanFilterStorage.watch(setSpanFilterValue);
29+
}, []);
30+
31+
return [spanFilter, setSpanFilter] as const;
32+
};

packages/web-extension/wxt.config.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ import { defineConfig } from "wxt";
33

44
// See https://wxt.dev/api/config.html
55
export default defineConfig({
6+
manifest: {
7+
permissions: ["storage"],
8+
},
69
vite: () => ({
710
plugins: [tailwindcss()],
811
}),

pnpm-lock.yaml

Lines changed: 8 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)