@@ -10,7 +10,6 @@ import {
10
10
} from "tailwind-merge"
11
11
import {
12
12
useAuthStore ,
13
- useGameTicker ,
14
13
} from "src/store.js"
15
14
import {
16
15
StompContext ,
@@ -135,31 +134,18 @@ function isLastChildVisible(container) {
135
134
}
136
135
137
136
function SplitPane ( { className, messageRef, topElement, bottomElement} ) {
138
- let [ initialized , setInitialized ] = useState ( false )
139
137
let [ dragOffset , setDragOffset ] = useState ( Number . NaN )
140
138
let [ splitPos , setSplitPos ] = useState ( 60 )
141
139
let splitPosRef = useRef ( )
142
140
splitPosRef . current = splitPos
143
141
let containerRef = useRef ( )
144
- let gameTicker = useGameTicker ( state => state . gameTicker )
145
-
146
- // re-render after each move: sidebar layout may have changed
147
- useEffect ( ( ) => {
148
- let container = containerRef . current
149
- if ( initialized && container ) {
150
- setTimeout ( ( ) => {
151
- let pos = getSplitPos ( splitPosRef . current , container )
152
- setSplitPos ( pos )
153
- } , 0 )
154
- }
155
- } , [ gameTicker , initialized ] )
156
142
157
143
useEffect ( ( ) => {
158
144
let onMouseMove = ( e ) => {
159
145
if ( Number . isNaN ( dragOffset ) ) {
160
146
return
161
147
}
162
- setSplitPos ( getSplitPos ( e . clientY + dragOffset , containerRef . current ) )
148
+ setSplitPos ( e . clientY + dragOffset )
163
149
}
164
150
let onMouseUp = ( ) => setDragOffset ( Number . NaN )
165
151
window . document . addEventListener ( "mousemove" , onMouseMove )
@@ -175,50 +161,31 @@ function SplitPane({className, messageRef, topElement, bottomElement}) {
175
161
setDragOffset ( splitPosRef . current - e . clientY )
176
162
} , [ setDragOffset ] )
177
163
178
- let topElementHeight = Math . trunc ( splitPos )
179
- if ( containerRef . current ) {
180
- let rect = containerRef . current . getBoundingClientRect ( )
181
- topElementHeight = Math . trunc ( getSplitPos ( splitPos , containerRef . current ) - rect . top )
182
- }
183
-
184
164
return (
185
165
< div
186
- ref = { ( ref ) => {
187
- if ( ! ref ) {
188
- return
189
- }
190
- if ( ! containerRef . current ) {
191
- let rect = ref . getBoundingClientRect ( )
192
- let pos = getSplitPos ( rect . top + 60 , ref )
193
- setSplitPos ( pos )
194
- splitPosRef . current = pos
195
- setInitialized ( true )
196
- }
197
- containerRef . current = ref
198
- } }
166
+ ref = { containerRef }
199
167
className = { twJoin (
200
- "grow flex flex-col gap-y-2 overflow-y -hidden" ,
168
+ "grow flex flex-col overflow-hidden" ,
201
169
! Number . isNaN ( dragOffset ) && "cursor-row-resize" ,
202
170
className ,
203
171
) } >
204
172
< div
205
- style = { { height : topElementHeight + "px" } }
206
- className = "p-1 bg-gray-900 border border-gray-500 flex-none overflow-y-scroll" >
173
+ style = { { height : getTopHeight ( splitPos , containerRef . current ) } }
174
+ className = "p-1 bg-gray-900 border border-gray-500 flex-none overflow-x-hidden overflow- y-scroll" >
207
175
{ topElement }
208
176
</ div >
209
177
< SplitBar
210
178
container = { containerRef . current }
211
- splitPos = { splitPos }
212
179
dragOffset = { dragOffset }
213
180
onMouseDown = { onMouseDown } />
214
- < div ref = { messageRef } className = "p-1 bg-gray-900 border-t border-x border-gray-500 h-full overflow-y-scroll" >
181
+ < div ref = { messageRef } className = "p-1 bg-gray-900 border-t border-x border-gray-500 h-full overflow-x-hidden overflow- y-scroll" >
215
182
{ bottomElement }
216
183
</ div >
217
184
</ div >
218
185
)
219
186
}
220
187
221
- function SplitBar ( { splitPos , dragOffset, onMouseDown, container} ) {
188
+ function SplitBar ( { dragOffset, onMouseDown, container} ) {
222
189
if ( ! container ) {
223
190
return < div />
224
191
}
@@ -228,22 +195,21 @@ function SplitBar({splitPos, dragOffset, onMouseDown, container}) {
228
195
< div
229
196
onMouseDown = { Number . isNaN ( dragOffset ) ? onMouseDown : undefined }
230
197
style = { {
231
- top : Math . trunc ( getSplitPos ( splitPos , container ) ) - 1 ,
232
198
height : Math . trunc ( getRemInPixel ( ) * 0.5 ) + 2 ,
233
199
width : rect . width ,
234
200
left : rect . left - parentRect . left ,
235
201
} }
236
- className = "absolute z-20 cursor-row-resize bg-transparent" />
202
+ className = "flex-none cursor-row-resize bg-transparent" />
237
203
)
238
204
}
239
205
240
- function getSplitPos ( clientY , container ) {
206
+ function getTopHeight ( splitPos , container ) {
241
207
if ( ! container ) {
242
- return Math . trunc ( clientY )
208
+ return Math . trunc ( splitPos )
243
209
}
244
210
let rect = container . getBoundingClientRect ( )
245
211
let safety = 1 * getRemInPixel ( )
246
- let result = Math . max ( rect . top + safety , clientY )
247
- result = Math . min ( rect . bottom - safety - 5 , result )
212
+ let result = Math . max ( safety , splitPos )
213
+ result = Math . min ( rect . height - safety - Math . trunc ( getRemInPixel ( ) * 0.5 ) - 2 , result )
248
214
return Math . trunc ( result )
249
215
}
0 commit comments