diff --git a/ui/src/Pages/AlbumPage/AlbumPage.js b/ui/src/Pages/AlbumPage/AlbumPage.js index fd969b36..8fef0066 100644 --- a/ui/src/Pages/AlbumPage/AlbumPage.js +++ b/ui/src/Pages/AlbumPage/AlbumPage.js @@ -1,10 +1,10 @@ -import React, { useCallback, useState, useEffect } from 'react' +import React, { useCallback } from 'react' import ReactRouterPropTypes from 'react-router-prop-types' -import { useLocation } from 'react-router-dom' import { useQuery, gql } from '@apollo/client' import AlbumGallery from '../../components/albumGallery/AlbumGallery' import PropTypes from 'prop-types' import Layout from '../../Layout' +import useURLParameters from '../../components/useUrlParameters' const albumQuery = gql` query albumQuery( @@ -56,37 +56,39 @@ let refetchNeededFavorites = false function AlbumPage({ match }) { const albumId = match.params.id - const [onlyFavorites, setOnlyFavorites] = useState( - match.params.subPage === 'favorites' - ) - const urlParams = new URLSearchParams(useLocation().search) - const [ordering, setOrdering] = useState({ - orderBy: urlParams.get('orderBy') || 'date_shot', - orderDirection: urlParams.get('orderDirection') || 'ASC', - }) + const { getParam, setParam, setParams } = useURLParameters() + + const onlyFavorites = getParam('favorites') == '1' ? true : false + const setOnlyFavorites = favorites => setParam('favorites', favorites ? 1 : 0) + + const orderBy = getParam('orderBy', 'date_shot') + const orderDirection = getParam('orderDirection', 'ASC') + + const setOrdering = useCallback( + ({ orderBy, orderDirection }) => { + let updatedParams = [] + if (orderBy !== undefined) { + updatedParams.push({ key: 'orderBy', value: orderBy }) + } + if (orderDirection !== undefined) { + updatedParams.push({ key: 'orderDirection', value: orderDirection }) + } + + setParams(updatedParams) + }, + [setParams] + ) const { loading, error, data, refetch } = useQuery(albumQuery, { variables: { id: albumId, onlyFavorites, - mediaOrderBy: ordering.orderBy, - mediaOrderDirection: ordering.orderDirection, + mediaOrderBy: orderBy, + mediaOrderDirection: orderDirection, }, }) - const setOrderingCallback = useCallback( - ordering => { - setOrdering(prevState => { - return { - ...prevState, - ...ordering, - } - }) - }, - [setOrdering, onlyFavorites] - ) - const toggleFavorites = useCallback( onlyFavorites => { if ( @@ -108,13 +110,6 @@ function AlbumPage({ match }) { [setOnlyFavorites, refetch] ) - useEffect(() => { - const pathName = `/album/${albumId + (onlyFavorites ? '/favorites' : '')}` - const queryString = `orderBy=${ordering.orderBy}&orderDirection=${ordering.orderDirection}` - - history.replaceState({}, '', pathName + '?' + queryString) - }, [onlyFavorites, ordering]) - if (error) return