2
2
3
3
import { usePathname , useRouter , useSearchParams } from 'next/navigation' ;
4
4
import { MinusOutlined , PlusOutlined } from '@ant-design/icons' ;
5
+ import { useMemo , useTransition } from 'react' ;
5
6
import { motion } from 'motion/react' ;
6
- import { useMemo } from 'react' ;
7
7
8
+ import { NeuronViewerContainer } from '@/components/neuron-viewer/neuron-viewer-with-actions' ;
8
9
import {
9
10
type ThreeDVisualizerQueryParamKeys ,
10
11
threeDVisualizerState ,
11
12
threeDVisualizerQueryParam ,
12
13
} from '@/ui/segments/workflows/simulate/single-neuron/shared/constant' ;
13
- import { NeuronViewerContainer } from '@/components/neuron-viewer/neuron-viewer-with-actions' ;
14
14
import { useWorkspace } from '@/ui/hooks/use-workspace' ;
15
15
import { cn } from '@/utils/css-class' ;
16
16
17
+ import type { WorkspaceContext } from '@/types/common' ;
18
+
17
19
type Props = {
18
20
sessionId : string ;
19
21
memodelId : string ;
@@ -22,6 +24,7 @@ type Props = {
22
24
export function NeuronVisualizer ( { sessionId, memodelId } : Props ) {
23
25
const { virtualLabId, projectId } = useWorkspace ( ) ;
24
26
const queryParams = useSearchParams ( ) ;
27
+ const [ , startTransition ] = useTransition ( ) ;
25
28
const { replace } = useRouter ( ) ;
26
29
const visualizerState = queryParams . get ( '3d' ) as ThreeDVisualizerQueryParamKeys ;
27
30
@@ -35,10 +38,13 @@ export function NeuronVisualizer({ sessionId, memodelId }: Props) {
35
38
} , [ isCollapsed ] ) ;
36
39
37
40
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
+ } ) ;
41
46
} ;
47
+
42
48
return (
43
49
memodelId && (
44
50
< motion . div
@@ -92,23 +98,41 @@ export function NeuronVisualizer({ sessionId, memodelId }: Props) {
92
98
</ button >
93
99
</ div >
94
100
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
+ />
109
109
</ div >
110
110
) }
111
111
</ motion . div >
112
112
)
113
113
) ;
114
114
}
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