Skip to content

Commit df09853

Browse files
committed
fix: prevent full body re-render when selecting a sample from Load Sample dropdown
Signed-off-by: surya4419 <[email protected]>
1 parent e4fd150 commit df09853

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

src/components/SampleDropdown.tsx

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,27 @@
11
import React from "react";
22
import { Button, Dropdown, Space, message, MenuProps } from "antd";
33
import { DownOutlined } from "@ant-design/icons";
4-
import { useCallback, useMemo, useState } from "react";
4+
import { useCallback, useMemo } from "react";
55
import useAppStore from "../store/store";
66
import { shallow } from "zustand/shallow";
77
import { useStoreWithEqualityFn } from "zustand/traditional";
88

9-
const SampleDropdown = React.memo(function SampleDropdown({
9+
const SampleDropdown = function SampleDropdown({
1010
setLoading,
1111
}: {
1212
setLoading: React.Dispatch<React.SetStateAction<boolean>>;
1313
}): JSX.Element {
14-
const { samples, loadSample } = useStoreWithEqualityFn(
14+
const { samples, loadSample, sampleName } = useStoreWithEqualityFn(
1515
useAppStore,
1616
(state) => ({
1717
samples: state.samples,
1818
loadSample: state.loadSample as (key: string) => Promise<void>,
19+
sampleName: state.sampleName
1920
}),
2021
shallow
2122
);
2223

23-
const [selectedSample, setSelectedSample] = useState<string | null>(null);
24+
2425

2526
const items: MenuProps["items"] = useMemo(
2627
() =>
@@ -38,7 +39,7 @@ const SampleDropdown = React.memo(function SampleDropdown({
3839
try {
3940
await loadSample(e.key);
4041
void message.info(`Loaded ${e.key} sample`);
41-
setSelectedSample(e.key);
42+
4243
} catch (error) {
4344
void message.error("Failed to load sample");
4445
} finally {
@@ -55,11 +56,11 @@ const SampleDropdown = React.memo(function SampleDropdown({
5556
<Dropdown menu={{ items, onClick: (e) => void handleMenuClick(e) }} trigger={["click"]}>
5657
<div className="samples-element">
5758
<Button aria-label="Load sample dropdown">
58-
{selectedSample ? selectedSample : "Load Sample"} <DownOutlined />
59+
{sampleName || "Load Sample"} <DownOutlined />
5960
</Button>
6061
</div>
6162
</Dropdown>
6263
</Space>
6364
);
64-
})
65+
}
6566
export default SampleDropdown;

src/store/store.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,9 @@ const useAppStore = create<AppState>()(
8989
const compressedData = params.get("data");
9090
if (compressedData) {
9191
await get().loadFromLink(compressedData);
92-
}
92+
} else {
93+
await get().loadSample(playground.NAME);
94+
}
9395
},
9496
loadSample: async (name: string) => {
9597
const sample = SAMPLES.find((s) => s.NAME === name);

0 commit comments

Comments
 (0)