diff --git a/shared/naturalcrit/splitPane/splitPane.jsx b/shared/naturalcrit/splitPane/splitPane.jsx index 60fc5c997..70dd98e43 100644 --- a/shared/naturalcrit/splitPane/splitPane.jsx +++ b/shared/naturalcrit/splitPane/splitPane.jsx @@ -3,112 +3,90 @@ const React = require('react'); const { useState, useEffect, useRef } = React; const cx = require('classnames'); -const SplitPane = (props) => { - props = { - storageKey : 'naturalcrit-pane-split', - onDragFinish : function(){}, //fires when dragging - showDividerButtons : true, - ...props - }; - const pane1 = useRef(null); - const pane2 = useRef(null); - const [currentDividerPos, setCurrentDividerPos] = useState(null); - const [userSetDividerPos, setUserSetDividerPos] = useState(null); - const [windowWidth, setWindowWidth] = useState(null); +const SplitPane = (props)=>{ + const { + storageKey = 'naturalcrit-pane-split', + onDragFinish = ()=>{}, + showDividerButtons = true + } = props; + const [isDragging, setIsDragging] = useState(false); + const [dividerPos, setDividerPos] = useState(null); // Initial divider position is set to `null` const [moveSource, setMoveSource] = useState(false); const [moveBrew, setMoveBrew] = useState(false); const [showMoveArrows, setShowMoveArrows] = useState(true); const [liveScroll, setLiveScroll] = useState(false); - const storageKey = props.storageKey || 'naturalcrit-pane-split'; - const onDragFinish = props.onDragFinish || (() => {}); + const dividerRef = useRef(null); - // Fetch saved divider position and scroll state on mount - useEffect(() => { - setWindowWidth(window.innerWidth); - const dividerPos = window.localStorage.getItem(storageKey); - const liveScrollSetting = window.localStorage.getItem('liveScroll') === 'true'; - setLiveScroll(liveScrollSetting); + // Set initial divider position and liveScroll only after mounting + useEffect(()=>{ + const savedPos = window.localStorage.getItem(storageKey); + setDividerPos(savedPos ? parseInt(savedPos, 10) : window.innerWidth / 2); + setLiveScroll(window.localStorage.getItem('liveScroll') === 'true'); - if (dividerPos) { - const limitedPos = limitPosition(dividerPos, 0.1 * (window.innerWidth - 13), 0.9 * (window.innerWidth - 13)); - setCurrentDividerPos(limitedPos); - setUserSetDividerPos(dividerPos); - } else { - setCurrentDividerPos(window.innerWidth / 2); - setUserSetDividerPos(window.innerWidth / 2); - } - - const handleResize = () => { - const newPos = limitPosition(userSetDividerPos, 0.1 * (window.innerWidth - 13), 0.9 * (window.innerWidth - 13)); - setCurrentDividerPos(newPos); - setWindowWidth(window.innerWidth); + const handleResize = ()=>{ + setDividerPos((pos)=>limitPosition(pos,0.1 * (window.innerWidth - 13), 0.9 * (window.innerWidth - 13)) + ); }; window.addEventListener('resize', handleResize); + return ()=>window.removeEventListener('resize', handleResize); + }, [storageKey]); - return () => { - window.removeEventListener('resize', handleResize); - }; - }, []); - - const limitPosition = (x, min = 1, max = window.innerWidth - 13) => { + const limitPosition = (x, min = 1, max = window.innerWidth - 13)=>{ return Math.round(Math.min(max, Math.max(min, x))); }; - const handleUp = (e) => { + const handleUp =(e)=>{ e.preventDefault(); - if (isDragging) { - onDragFinish(currentDividerPos); - window.localStorage.setItem(storageKey, currentDividerPos); + if(isDragging) { + onDragFinish(dividerPos); + window.localStorage.setItem(storageKey, dividerPos); } setIsDragging(false); }; - const handleDown = (e) => { + const handleDown = (e)=>{ e.preventDefault(); setIsDragging(true); }; - const handleMove = (e) => { - if (!isDragging) return; + const handleMove = (e)=>{ + if(!isDragging) return; e.preventDefault(); const newSize = limitPosition(e.pageX); - setCurrentDividerPos(newSize); - setUserSetDividerPos(newSize); + setDividerPos(newSize); }; - const liveScrollToggle = () => { - const newScrollState = !liveScroll; - window.localStorage.setItem('liveScroll', String(newScrollState)); - setLiveScroll(newScrollState); + const liveScrollToggle = ()=>{ + window.localStorage.setItem('liveScroll', String(!liveScroll)); + setLiveScroll(!liveScroll); }; - const renderMoveArrows = () => { - console.log('showMoveArrows: ', showMoveArrows); - if (showMoveArrows) { - return ( - <> -