Skip to content

Commit 64311ba

Browse files
committed
refactor(web-ts-results): replace redux with zustand
1 parent 411909d commit 64311ba

File tree

10 files changed

+290
-512
lines changed

10 files changed

+290
-512
lines changed

webdriver-ts-results/package-lock.json

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

webdriver-ts-results/package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
"plotly.js-cartesian-dist": "2.18.2",
99
"react": "^18.2.0",
1010
"react-dom": "^18.2.0",
11-
"react-redux": "^8.0.5",
12-
"redux": "^4.2.1"
11+
"zustand": "^4.4.1"
1312
},
1413
"scripts": {
1514
"start": "webpack serve --mode development -c webpack.config.dev.js",

webdriver-ts-results/src/components/ResultTable.tsx

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ import {
88
import CpuResultsTable from "./tables/CpuResultsTable";
99
import MemResultsTable from "./tables/MemResultsTable";
1010
import StartupResultsTable from "./tables/StartupResultsTable";
11-
import { useDispatch, useSelector } from "react-redux";
12-
import { sort, State } from "../reducer";
1311
import { benchmarks } from "../results";
12+
import { useRootStore } from "../reducer";
1413

1514
const BoxPlotTable = React.lazy(
1615
() => import(/* webpackChunkName: "BoxPlotTable" */ "./BoxPlotTable"),
@@ -34,14 +33,13 @@ const ResultTable = ({ type }: Props) => {
3433
},
3534
};
3635

37-
const dispatch = useDispatch();
36+
const data = useRootStore((state) => state.resultTables[type]);
37+
const currentSortKey = useRootStore((state) => state.sortKey);
38+
const displayMode = useRootStore((state) => state.displayMode);
39+
const cpuDurationMode = useRootStore((state) => state.cpuDurationMode);
40+
const sort = useRootStore((state) => state.sort);
3841

39-
const data = useSelector((state: State) => state.resultTables[type]);
40-
const currentSortKey = useSelector((state: State) => state.sortKey);
41-
const displayMode = useSelector((state: State) => state.displayMode);
42-
const cpuDurationMode = useSelector((state: State) => state.cpuDurationMode);
43-
44-
const sortBy = (sortKey: string) => dispatch(sort(sortKey));
42+
const sortBy = (sortKey: string) => sort(sortKey);
4543

4644
if (
4745
!data ||

webdriver-ts-results/src/components/selection/BenchmarkSelector/BenchmarkSelectorCategory.tsx

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
11
import React from "react";
2-
import { useSelector, useDispatch } from "react-redux";
32
import { BenchmarkType } from "../../../Common";
4-
import {
5-
areAllBenchmarksSelected,
6-
isNoneBenchmarkSelected,
7-
selectBenchmark,
8-
selectAllBenchmarks,
9-
State,
10-
} from "../../../reducer";
3+
import { useRootStore } from "../../../reducer";
114
import DropDownContents from "../../DropDown/DropDownContents";
125
import BenchmarkSelectorList from "./BenchmarkSelectorList";
136

@@ -19,32 +12,30 @@ interface Props {
1912
const BenchmarkSelectorCategory = ({ label, benchmarkType }: Props) => {
2013
console.log("BenchmarkSelectorCategory");
2114

22-
const dispatch = useDispatch();
23-
24-
const benchmarks = useSelector(
25-
(state: State) => state.benchmarkLists[benchmarkType],
26-
);
27-
const selectedBenchmarks = useSelector(
28-
(state: State) => state.selectedBenchmarks,
15+
const benchmarks = useRootStore(
16+
(state) => state.benchmarkLists[benchmarkType],
2917
);
30-
const isNoneSelected = useSelector((state: State) =>
31-
isNoneBenchmarkSelected(state, benchmarkType),
18+
const selectedBenchmarks = useRootStore((state) => state.selectedBenchmarks);
19+
const isNoneSelected = useRootStore((state) => state.isNoneBenchmarkSelected);
20+
const areAllSelected = useRootStore(
21+
(state) => state.areAllBenchmarksSelected,
3222
);
33-
const areAllSelected = useSelector((state: State) =>
34-
areAllBenchmarksSelected(state, benchmarkType),
23+
const selectAllBenchmarks = useRootStore(
24+
(state) => state.selectAllBenchmarks,
3525
);
26+
const selectBenchmark = useRootStore((state) => state.selectBenchmark);
3627

3728
return (
3829
<DropDownContents
39-
isNoneSelected={isNoneSelected}
40-
areAllSelected={areAllSelected}
41-
selectNone={() => dispatch(selectAllBenchmarks(benchmarkType, false))}
42-
selectAll={() => dispatch(selectAllBenchmarks(benchmarkType, true))}
30+
isNoneSelected={isNoneSelected(benchmarkType)}
31+
areAllSelected={areAllSelected(benchmarkType)}
32+
selectNone={() => selectAllBenchmarks(benchmarkType, false)}
33+
selectAll={() => selectAllBenchmarks(benchmarkType, true)}
4334
>
4435
<h3>{label}</h3>
4536
<BenchmarkSelectorList
4637
isSelected={(benchmark) => selectedBenchmarks.has(benchmark)}
47-
select={(benchmark, add) => dispatch(selectBenchmark(benchmark, add))}
38+
select={(benchmark, add) => selectBenchmark(benchmark, add)}
4839
benchmarks={benchmarks}
4940
/>
5041
</DropDownContents>

webdriver-ts-results/src/components/selection/CopyPasteSelection.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import React from "react";
22
import { useCallback } from "react";
33
import { useEffect } from "react";
4-
import { useDispatch, useSelector } from "react-redux";
5-
import { setStateFromClipboard, State } from "../../reducer";
4+
import { useRootStore } from "../../reducer";
65
import PasteIcon from "../../assets/icons/PasteIcon";
76
import CopyIcon from "../../assets/icons/CopyIcon";
87

98
const CopyPasteSelection = () => {
109
console.log("CopyPasteSelection");
1110

12-
const dispatch = useDispatch();
13-
14-
const state = useSelector((state: State) => state);
11+
const state = useRootStore((state) => state);
12+
const setStateFromClipboard = useRootStore(
13+
(state) => state.setStateFromClipboard,
14+
);
1515

1616
const handlePasteError = (error: Error) => {
1717
alert("Sorry - couldn't parse pasted selection");
@@ -22,12 +22,12 @@ const CopyPasteSelection = () => {
2222
(text: string) => {
2323
try {
2424
const parsedState = JSON.parse(text);
25-
dispatch(setStateFromClipboard(parsedState));
25+
setStateFromClipboard(parsedState);
2626
} catch (error) {
2727
handlePasteError(error as Error);
2828
}
2929
},
30-
[dispatch],
30+
[setStateFromClipboard],
3131
);
3232

3333
const handleClipboardPaste = useCallback(

0 commit comments

Comments
 (0)