Paginate: add option to disable history and url param
This commit is contained in:
parent
33c52be56c
commit
b6f1b00f7d
1 changed files with 15 additions and 9 deletions
|
@ -10,16 +10,18 @@ const PAGINATE_PARAM = 'page';
|
||||||
type Props = {
|
type Props = {
|
||||||
totalPages: number,
|
totalPages: number,
|
||||||
location: { search: string },
|
location: { search: string },
|
||||||
history: { push: string => void },
|
history: { push: (string) => void },
|
||||||
onPageChange?: number => void,
|
onPageChange?: (number) => void,
|
||||||
|
disableHistory?: boolean, // Disables the use of '&page=' param and history stack.
|
||||||
};
|
};
|
||||||
|
|
||||||
function Paginate(props: Props) {
|
function Paginate(props: Props) {
|
||||||
const { totalPages = 1, location, history, onPageChange } = props;
|
const { totalPages = 1, location, history, onPageChange, disableHistory } = props;
|
||||||
const { search } = location;
|
const { search } = location;
|
||||||
const [textValue, setTextValue] = React.useState('');
|
const [textValue, setTextValue] = React.useState('');
|
||||||
const urlParams = new URLSearchParams(search);
|
const urlParams = new URLSearchParams(search);
|
||||||
const currentPage = Number(urlParams.get(PAGINATE_PARAM)) || 1;
|
const initialPage = disableHistory ? 1 : Number(urlParams.get(PAGINATE_PARAM)) || 1;
|
||||||
|
const [currentPage, setCurrentPage] = React.useState(initialPage);
|
||||||
const isMobile = useIsMobile();
|
const isMobile = useIsMobile();
|
||||||
|
|
||||||
function handleChangePage(newPageNumber: number) {
|
function handleChangePage(newPageNumber: number) {
|
||||||
|
@ -28,11 +30,15 @@ function Paginate(props: Props) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentPage !== newPageNumber) {
|
if (currentPage !== newPageNumber) {
|
||||||
|
setCurrentPage(newPageNumber);
|
||||||
|
|
||||||
|
if (!disableHistory) {
|
||||||
const params = new URLSearchParams(search);
|
const params = new URLSearchParams(search);
|
||||||
params.set(PAGINATE_PARAM, newPageNumber.toString());
|
params.set(PAGINATE_PARAM, newPageNumber.toString());
|
||||||
history.push('?' + params.toString());
|
history.push('?' + params.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function handlePaginateKeyUp() {
|
function handlePaginateKeyUp() {
|
||||||
const newPage = Number(textValue);
|
const newPage = Number(textValue);
|
||||||
|
@ -58,7 +64,7 @@ function Paginate(props: Props) {
|
||||||
nextClassName="pagination__item pagination__item--next"
|
nextClassName="pagination__item pagination__item--next"
|
||||||
breakClassName="pagination__item pagination__item--break"
|
breakClassName="pagination__item pagination__item--break"
|
||||||
marginPagesDisplayed={2}
|
marginPagesDisplayed={2}
|
||||||
onPageChange={e => handleChangePage(e.selected + 1)}
|
onPageChange={(e) => handleChangePage(e.selected + 1)}
|
||||||
forcePage={currentPage - 1}
|
forcePage={currentPage - 1}
|
||||||
initialPage={currentPage - 1}
|
initialPage={currentPage - 1}
|
||||||
containerClassName="pagination"
|
containerClassName="pagination"
|
||||||
|
@ -67,7 +73,7 @@ function Paginate(props: Props) {
|
||||||
{!isMobile && (
|
{!isMobile && (
|
||||||
<FormField
|
<FormField
|
||||||
value={textValue}
|
value={textValue}
|
||||||
onChange={e => setTextValue(e.target.value)}
|
onChange={(e) => setTextValue(e.target.value)}
|
||||||
className="paginate-channel"
|
className="paginate-channel"
|
||||||
label={__('Go to page:')}
|
label={__('Go to page:')}
|
||||||
type="text"
|
type="text"
|
||||||
|
|
Loading…
Reference in a new issue