0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2026-01-10 20:03:03 +00:00

refactor slider onChange and button onClick

Moved the zoomLevel state assignment to a newer useState hook function, making it easier (and shorter) to update that state within event handlers.

The slider onChange is a single easy line, and the buttons handlers are two lines for clarity.
This commit is contained in:
Gazook89
2024-08-18 00:02:49 -05:00
parent 36ab6923ed
commit 5a11b7918e

View File

@@ -10,13 +10,14 @@ const ToolBar = ({ onZoomChange, currentPage, onPageChange, totalPages })=>{
const [state, setState] = useState({ const [state, setState] = useState({
currentPage : currentPage, currentPage : currentPage,
totalPages : totalPages, totalPages : totalPages,
zoomLevel : 100,
pageNumberInput : currentPage, pageNumberInput : currentPage,
}); });
const [zoomLevel, setZoomLevel] = useState(100);
useEffect(()=>{ useEffect(()=>{
onZoomChange(state.zoomLevel); onZoomChange(zoomLevel);
}, [state.zoomLevel]); }, [zoomLevel]);
useEffect(()=>{ useEffect(()=>{
setState((prevState)=>({ setState((prevState)=>({
@@ -26,21 +27,18 @@ const ToolBar = ({ onZoomChange, currentPage, onPageChange, totalPages })=>{
})); }));
}, [currentPage]); }, [currentPage]);
const setZoomLevel = (delta)=>{ const handleZoomChange = (delta)=>{
const zoomChange = _.clamp(state.zoomLevel + delta, minZoom, maxZoom); const zoomChange = _.clamp(zoomLevel + delta, minZoom, maxZoom);
setState((prevState)=>({ setZoomLevel(zoomChange);
...prevState,
zoomLevel : zoomChange
}));
}; };
return ( return (
<div className='toolBar'> <div className='toolBar'>
<div className='tool'> <div className='tool'>
<button <button
onClick={()=>setZoomLevel(-20)} onClick={()=>handleZoomChange(-20)}
disabled={state.zoomLevel <= minZoom} disabled={zoomLevel <= minZoom}
> >
<i className='fas fa-magnifying-glass-minus' /> <i className='fas fa-magnifying-glass-minus' />
</button> </button>
@@ -54,17 +52,8 @@ const ToolBar = ({ onZoomChange, currentPage, onPageChange, totalPages })=>{
min={minZoom} min={minZoom}
max={maxZoom} max={maxZoom}
step='1' step='1'
value={state.zoomLevel} value={zoomLevel}
onChange={(e)=>{ onChange={(e)=>{setZoomLevel(parseInt(e.target.value));}}
const newZoomLevel = parseInt(e.target.value, 10);
if(newZoomLevel !== state.zoomLevel) {
setState((prevState)=>({
...prevState,
zoomLevel : newZoomLevel
}));
onZoomChange(newZoomLevel);
}
}}
/> />
<datalist id='zoomLevels'> <datalist id='zoomLevels'>
<option value='100' /> <option value='100' />
@@ -73,8 +62,8 @@ const ToolBar = ({ onZoomChange, currentPage, onPageChange, totalPages })=>{
<div className='tool'> <div className='tool'>
<button <button
onClick={()=>setZoomLevel(20)} onClick={()=>handleZoomChange(20)}
disabled={state.zoomLevel >= maxZoom} disabled={zoomLevel >= maxZoom}
> >
<i className='fas fa-magnifying-glass-plus' /> <i className='fas fa-magnifying-glass-plus' />
</button> </button>