Skip to content

Commit bf7b93b

Browse files
committed
prevent horizontal scrollbars
1 parent b7e5615 commit bf7b93b

File tree

3 files changed

+14
-54
lines changed

3 files changed

+14
-54
lines changed

src/main/client/src/component/Chat.jsx

Lines changed: 12 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import {
1010
} from "tailwind-merge"
1111
import {
1212
useAuthStore,
13-
useGameTicker,
1413
} from "src/store.js"
1514
import {
1615
StompContext,
@@ -135,31 +134,18 @@ function isLastChildVisible(container) {
135134
}
136135

137136
function SplitPane({className, messageRef, topElement, bottomElement}) {
138-
let [initialized, setInitialized] = useState(false)
139137
let [dragOffset, setDragOffset] = useState(Number.NaN)
140138
let [splitPos, setSplitPos] = useState(60)
141139
let splitPosRef = useRef()
142140
splitPosRef.current = splitPos
143141
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])
156142

157143
useEffect(() => {
158144
let onMouseMove = (e) => {
159145
if (Number.isNaN(dragOffset)) {
160146
return
161147
}
162-
setSplitPos(getSplitPos(e.clientY + dragOffset, containerRef.current))
148+
setSplitPos(e.clientY + dragOffset)
163149
}
164150
let onMouseUp = () => setDragOffset(Number.NaN)
165151
window.document.addEventListener("mousemove", onMouseMove)
@@ -175,50 +161,31 @@ function SplitPane({className, messageRef, topElement, bottomElement}) {
175161
setDragOffset(splitPosRef.current - e.clientY)
176162
}, [setDragOffset])
177163

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-
184164
return (
185165
<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}
199167
className={twJoin(
200-
"grow flex flex-col gap-y-2 overflow-y-hidden",
168+
"grow flex flex-col overflow-hidden",
201169
!Number.isNaN(dragOffset) && "cursor-row-resize",
202170
className,
203171
)}>
204172
<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">
207175
{topElement}
208176
</div>
209177
<SplitBar
210178
container={containerRef.current}
211-
splitPos={splitPos}
212179
dragOffset={dragOffset}
213180
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">
215182
{bottomElement}
216183
</div>
217184
</div>
218185
)
219186
}
220187

221-
function SplitBar({splitPos, dragOffset, onMouseDown, container}) {
188+
function SplitBar({dragOffset, onMouseDown, container}) {
222189
if (!container) {
223190
return <div />
224191
}
@@ -228,22 +195,21 @@ function SplitBar({splitPos, dragOffset, onMouseDown, container}) {
228195
<div
229196
onMouseDown={Number.isNaN(dragOffset) ? onMouseDown : undefined}
230197
style={{
231-
top: Math.trunc(getSplitPos(splitPos, container)) - 1,
232198
height: Math.trunc(getRemInPixel() * 0.5) + 2,
233199
width: rect.width,
234200
left: rect.left - parentRect.left,
235201
}}
236-
className="absolute z-20 cursor-row-resize bg-transparent" />
202+
className="flex-none cursor-row-resize bg-transparent" />
237203
)
238204
}
239205

240-
function getSplitPos(clientY, container) {
206+
function getTopHeight(splitPos, container) {
241207
if (!container) {
242-
return Math.trunc(clientY)
208+
return Math.trunc(splitPos)
243209
}
244210
let rect = container.getBoundingClientRect()
245211
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)
248214
return Math.trunc(result)
249215
}

src/main/client/src/feature/lobby/Lobby.jsx

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import {
1818
StompContext,
1919
tfetch,
2020
doTry,
21-
vw,
2221
} from "src/util.js"
2322
import {
2423
LobbyPanel,
@@ -32,9 +31,6 @@ import {
3231
import {
3332
useAuthStore,
3433
} from "src/store.js"
35-
import {
36-
useLayoutStore,
37-
} from "src/layout.js"
3834
import {
3935
CgClose,
4036
} from "react-icons/cg"
@@ -80,11 +76,8 @@ export function Lobby() {
8076
})
8177
navigate(base + "/game/" + response.id)
8278
}), [auth, navigate])
83-
let sidebarWidth = useLayoutStore(state => state.sidebarWidth.lobby)
8479
return (
85-
<div
86-
style={{ width: vw() - sidebarWidth }}
87-
className="h-full">
80+
<div className="h-full">
8881
<div className={twJoin(
8982
"mt-2 inline-flex py-2 pr-4 gap-x-1 border-r-2 border-y-2",
9083
isNewGameOpen && "rounded-r-full border-slate-600",

src/main/client/src/index.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
@layer base {
66
html {
77
@apply h-full;
8+
@apply overflow-x-hidden;
89
}
910
body {
1011
@apply bg-stone-800;

0 commit comments

Comments
 (0)