0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2025-12-26 18:12:40 +00:00

change page works, added change zoom via input too

This commit is contained in:
Víctor Losada Hernández
2024-05-31 19:43:09 +02:00
parent 933dc372d2
commit 69db1e2cb7
3 changed files with 89 additions and 24 deletions

View File

@@ -88,7 +88,8 @@ const BrewRenderer = (props)=>{
iframe.contentWindow.document.querySelector('.brewRenderer');
if (brewRenderer) {
const pages = brewRenderer.querySelectorAll('.page');
if (pageNumber > pages.length) {
if (pageNumber + 1 > pages.length) {
console.log(pageNumber, pages.length);
console.log('page not found');
} else {
pages[pageNumber].scrollIntoView({ block: 'start' });
@@ -234,6 +235,11 @@ const BrewRenderer = (props)=>{
);
}
const handlePageChange = (pageNumber) => {
// Scroll to the desired page
scrollToPage(pageNumber);
};
return (
<>
{/*render dummy page while iFrame is mounting.*/}
@@ -251,7 +257,7 @@ const BrewRenderer = (props)=>{
contentDidMount={frameDidMount}
onClick={()=>{emitClick();}}
>
<ToolBar updateZoom={updateZoom} />
<ToolBar updateZoom={updateZoom} currentPage={state.viewablePageNumber} onPageChange={handlePageChange} totalPages={rawPages.length}/>
<div className={'brewRenderer'}
onScroll={handleScroll}
onKeyDown={handleControlKeys}

View File

@@ -3,18 +3,33 @@ const React = require('react');
const { useState, useRef, useEffect } = React;
const _ = require('lodash');
const ToolBar = ({updateZoom}) => {
const ToolBar = ({ updateZoom, currentPage, onPageChange, totalPages }) => {
const [state, setState] = useState({
currentPage: 1,
totalPages: 10,
currentPage: currentPage,
totalPages: totalPages,
zoomLevel: 100,
});
const [pageNumberInput, setPageNumberInput] = useState(
state.currentPage + 1
);
const [zoomInput, setZoomInput] = useState(state.zoomLevel);
useEffect(() => {
console.log(`Zoom to: ${state.zoomLevel}`);
updateZoom(state.zoomLevel);
}, [state.zoomLevel]);
// Update currentPage whenever page prop changes
useEffect(() => {
console.log(`page number from props ${currentPage}`);
setState((prevState) => ({
...prevState,
currentPage: currentPage,
}));
setPageNumberInput(currentPage + 1);
}, [currentPage]);
const setZoomLevel = (direction) => {
let zoomLevel = state.zoomLevel;
if (direction === 'in') {
@@ -29,17 +44,22 @@ const ToolBar = ({updateZoom}) => {
}));
};
const scrollToPage = (direction) => {
let currentPage = state.currentPage;
if (direction === 'next') {
currentPage += 1;
} else {
currentPage = currentPage - 1;
const handleInputChange = (value, type) => {
// Remove the "%" symbol from the input value
const newValue = parseInt(value.replace('%', ''), 10);
// Check the type of input (zoom or page)
if (type === 'zoom') {
// Check if zoom level is within the allowed range
if (newValue >= 10 && newValue <= 300) {
setZoomInput(newValue + '%'); // Add "%" back to the value
}
} else if (type === 'page') {
// Check if page number is within the allowed range
if (newValue >= 1 && newValue <= totalPages) {
setPageNumberInput(newValue);
}
}
setState((prevState) => ({
...prevState,
currentPage,
}));
};
return (
@@ -53,7 +73,27 @@ const ToolBar = ({updateZoom}) => {
</button>
</div>
<span className="currentZoom">{state.zoomLevel}%</span>
<div className="tool">
<input
type="number"
name="zoom"
min={10}
max={300}
value={zoomInput}
onChange={(e) => handleInputChange(e.target.value, 'zoom')}
onBlur={(e) => {
const newZoomLevel = parseInt(
e.target.value.replace('%', ''),
10
);
if (newZoomLevel !== state.zoomLevel) {
updateZoom(newZoomLevel);
}
}}
/>
<span>%</span>
</div>
<div className="tool">
<button
onClick={() => setZoomLevel('out')}
@@ -66,19 +106,38 @@ const ToolBar = ({updateZoom}) => {
<div className="tool">
<button
className="previousPage"
onClick={() => scrollToPage('previous')}
disabled={state.currentPage <= 1}
onClick={() => {
console.log(`page is ${state.currentPage}`);
onPageChange(state.currentPage - 1);
}}
disabled={state.currentPage === 0}
>
<i className="fas fa-arrow-left"></i>
</button>
</div>
<span className="currentPage">{state.currentPage}</span>
<input
type="number"
name="page"
min={1}
max={state.totalPages}
id="pageInput"
value={pageNumberInput}
onChange={(e) => handleInputChange(e.target.value, 'page')}
onBlur={(e) => {
parseInt(pageNumberInput) === state.currentPage + 1 ||
onPageChange(parseInt(pageNumberInput) - 1);
}}
/>
<div className="tool">
<button
className="nextPage"
onClick={() => scrollToPage('next')}
disabled={state.currentPage >= 10}
onClick={() => {
console.log(`page is ${state.currentPage}`);
onPageChange(state.currentPage + 1);
}}
disabled={state.currentPage + 1 === state.totalPages}
>
<i className="fas fa-arrow-right"></i>
</button>

View File

@@ -13,12 +13,12 @@
z-index: 1;
display: flex;
justify-content: center;
align-items: baseline;
align-items: center;
column-gap: 15px;
row-gap: 5px;
flex-wrap: wrap;
span {
input {
background: #eee;
font-family: 'Open Sans', sans-serif;
text-transform: uppercase;
@@ -27,7 +27,7 @@
color: #000;
padding: 2px 5px;
border-radius: 7px;
width: 50px;
height:1.5em;
}
.tool {