import React, { useEffect } from 'react'; import { makeStyles } from '@material-ui/core/styles'; import { borders } from '@material-ui/system'; import Box from '@material-ui/core/Box'; import { SearchBar } from './searchbar.js'; import { InternalErrorPage } from './error.js'; import { LoadingPage } from './loading.js'; import { ProvideDB, DBTypeEnum, DBSourceEnum } from './database.js'; import { GridGallery } from './gridgallery.js'; import { UserQuery, user_query_from_search_string, maybe_image_query, do_image_query, maybe_album_query, do_album_query } from './queries.js'; import { Browser } from './browser.js'; const useStyles = makeStyles(theme => ({ root: { display: "table", "border-spacing": "6px", width: "100%", }, navigator: { display: "table-cell", "width": "300px", border: "1px solid black", "border-radius": "3px", "vertical-align": "top", }, searchandview: { display: "table-cell", width: "auto", border: "1px solid black", "border-radius": "3px", "vertical-align": "top", }, margined: { margin: "6px", } })); export function LoadedMainPage(props) { const classes = useStyles(); const [gallery_user_query, setGalleryUserQuery] = React.useState(false); const [photos, setPhotos] = React.useState(false); const [albums, setAlbums] = React.useState(false); useEffect(() => { // Single-fire effect to start retrieving the albums list. var blank_user_query = new UserQuery; var sql_album_query = maybe_album_query(blank_user_query); do_album_query(sql_album_query, props.database) .then(albums => { setAlbums(albums); }); }, []); useEffect(() => { var sql_image_query = maybe_image_query(gallery_user_query); setPhotos(false); do_image_query(sql_image_query, props.database, props.photos_dir, props.thumbs_dir) .then(got_photos => { // Make each photo fetch its thumbnail size before proceeding var promises = []; got_photos.forEach(elem => { promises.push(elem.fetch_thumb_size()); }) Promise.all(promises) .then(() => { setPhotos(got_photos); }); }); }, [gallery_user_query]); function onSearch(q) { var query = user_query_from_search_string(q); setGalleryUserQuery(query); } function onBrowser(q) { setGalleryUserQuery(q); } return ( <> {albums && } {photos && } ); } export const MainPage = () => ( {({ loading, error, done, db }) => ( <> {loading && } {error && } {done && } )} )