require('./toolBar.less'); const React = require('react'); const { useState, useEffect } = React; const _ = require('lodash'); const MAX_ZOOM = 300; const MIN_ZOOM = 10; const ToolBar = ({ onZoomChange, currentPage, onPageChange, totalPages })=>{ const [zoomLevel, setZoomLevel] = useState(100); const [pageNum, setPageNum] = useState(currentPage); useEffect(()=>{ onZoomChange(zoomLevel); }, [zoomLevel]); useEffect(()=>{ setPageNum(currentPage); }, [currentPage]); const handleZoomButton = (delta)=>{ const newZoomLevel = _.clamp(zoomLevel + delta, MIN_ZOOM, MAX_ZOOM); setZoomLevel(newZoomLevel); }; const handlePageChange = (page)=>{ const regex = /[0-9]/; if(regex.test(page)){ const num = parseInt(page); // input type is 'text', so `page` comes in as a string, not number. setPageNum(num) } else { return; } }; const scrollToPage = (pageNumber)=>{ pageNumber = _.clamp(pageNumber, 1, totalPages); const iframe = document.getElementById('BrewRenderer'); if(iframe && iframe.contentWindow) { const brewRenderer = iframe.contentWindow.document.querySelector('.brewRenderer'); if(brewRenderer) { const pages = brewRenderer.querySelectorAll('.page'); pages[pageNumber - 1]?.scrollIntoView({ block: 'start' }); } } setPageNum(pageNumber); }; return (
{setZoomLevel(parseInt(e.target.value));}} />
{e.target.select()}} onChange={(e)=>{handlePageChange(e.target.value);}} onBlur={()=>scrollToPage(pageNum)} onKeyDown={(e)=>{e.key == 'Enter' ? scrollToPage(pageNum) : null;}} /> / {totalPages}
); }; module.exports = ToolBar;