Skip to content

Commit ed2a572

Browse files
authored
use transition to open/collpase 3d visualizer in simulation (#924)
1 parent 3af83da commit ed2a572

File tree

1 file changed

+43
-19
lines changed

1 file changed

+43
-19
lines changed

src/ui/segments/workflows/simulate/single-neuron/shared/steps/neuron-visualizer.tsx

Lines changed: 43 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,20 @@
22

33
import { usePathname, useRouter, useSearchParams } from 'next/navigation';
44
import { MinusOutlined, PlusOutlined } from '@ant-design/icons';
5+
import { useMemo, useTransition } from 'react';
56
import { motion } from 'motion/react';
6-
import { useMemo } from 'react';
77

8+
import { NeuronViewerContainer } from '@/components/neuron-viewer/neuron-viewer-with-actions';
89
import {
910
type ThreeDVisualizerQueryParamKeys,
1011
threeDVisualizerState,
1112
threeDVisualizerQueryParam,
1213
} from '@/ui/segments/workflows/simulate/single-neuron/shared/constant';
13-
import { NeuronViewerContainer } from '@/components/neuron-viewer/neuron-viewer-with-actions';
1414
import { useWorkspace } from '@/ui/hooks/use-workspace';
1515
import { cn } from '@/utils/css-class';
1616

17+
import type { WorkspaceContext } from '@/types/common';
18+
1719
type Props = {
1820
sessionId: string;
1921
memodelId: string;
@@ -22,6 +24,7 @@ type Props = {
2224
export function NeuronVisualizer({ sessionId, memodelId }: Props) {
2325
const { virtualLabId, projectId } = useWorkspace();
2426
const queryParams = useSearchParams();
27+
const [, startTransition] = useTransition();
2528
const { replace } = useRouter();
2629
const visualizerState = queryParams.get('3d') as ThreeDVisualizerQueryParamKeys;
2730

@@ -35,10 +38,13 @@ export function NeuronVisualizer({ sessionId, memodelId }: Props) {
3538
}, [isCollapsed]);
3639

3740
const updateVisualizerState = (v: ThreeDVisualizerQueryParamKeys) => {
38-
const params = new URLSearchParams(queryParams);
39-
params.set(threeDVisualizerQueryParam, v);
40-
replace(`${pathname}?${params.toString()}`);
41+
startTransition(() => {
42+
const params = new URLSearchParams(queryParams);
43+
params.set(threeDVisualizerQueryParam, v);
44+
replace(`${pathname}?${params.toString()}`);
45+
});
4146
};
47+
4248
return (
4349
memodelId && (
4450
<motion.div
@@ -92,23 +98,41 @@ export function NeuronVisualizer({ sessionId, memodelId }: Props) {
9298
</button>
9399
</div>
94100

95-
<div className="relative w-full flex-1 border-none">
96-
<NeuronViewerContainer
97-
useCursor
98-
useEvents
99-
useZoomer
100-
useActions
101-
useLabels
102-
virtualLabId={virtualLabId}
103-
projectId={projectId}
104-
meModelId={memodelId}
105-
sessionId={sessionId}
106-
zoomPlacement="right"
107-
/>
108-
</div>
101+
<ThreeDNeuronVisualizer
102+
{...{
103+
virtualLabId,
104+
projectId,
105+
memodelId,
106+
sessionId,
107+
}}
108+
/>
109109
</div>
110110
)}
111111
</motion.div>
112112
)
113113
);
114114
}
115+
116+
function ThreeDNeuronVisualizer({
117+
virtualLabId,
118+
projectId,
119+
memodelId,
120+
sessionId,
121+
}: WorkspaceContext & Props) {
122+
return (
123+
<div className="relative w-full flex-1 border-none">
124+
<NeuronViewerContainer
125+
useCursor
126+
useEvents
127+
useZoomer
128+
useActions
129+
useLabels
130+
virtualLabId={virtualLabId}
131+
projectId={projectId}
132+
meModelId={memodelId}
133+
sessionId={sessionId}
134+
zoomPlacement="right"
135+
/>
136+
</div>
137+
);
138+
}

0 commit comments

Comments
 (0)