import { FormEvent, useEffect, useState } from "react";
import Modal from "../modals/Modal";
import Constants from "../../../application/Constants";
import clsx from "clsx";
import InputSelector from "../input/InputSelector";
import InputNumber from "../input/InputNumber";
import {ButtonPrimary} from "../buttons/ButtonPrimary";
import {ButtonSecondary} from "../buttons/ButtonSecondary";
import { useApp } from "../../../hooks";
import { useRouter, useSearchParams } from "next/navigation";
interface Props {
page: number;
pageSize: number;
totalItems: number;
totalPages: number;
defaultPageSize?: number;
}
export default function GridPagination({ page, pageSize, totalItems, totalPages, defaultPageSize = Constants.DEFAULT_PAGE_SIZE }: Props) {
const { t } = useApp();
const [state, setState] = useState<{ page: number; pageSize: number | undefined }>({ page, pageSize });
const [from, setFrom] = useState(0);
const [to, setTo] = useState(0);
// const submit = useSubmit();
const navigation = useRouter();
const loading = false //navigation.state === "loading" || navigation.state === "submitting";
const [searchParams, setSearchParams] = useSearchParams();
const [showPageSizeModal, setShowPageSizeModal] = useState(false);
const [showPageNumberModal, setShowPageNumberModal] = useState(false);
useEffect(() => {
setFrom(page * pageSize - pageSize + 1);
let to = page * pageSize;
if (to > totalItems) {
to = totalItems;
}
setTo(to);
}, [page, pageSize, totalItems]);
useEffect(() => {
/* const pageSizeParam = searchParams.get("pageSize")?.toString() ?? defaultPageSize.toString();
const pageParam = searchParams.get("page")?.toString() ?? "1";
if (state.page.toString() !== pageParam || state.pageSize?.toString() !== pageSizeParam) {
if (state.page.toString() !== pageParam) {
searchParams.set("page", state.page.toString());
}
if (state.pageSize?.toString() !== pageSizeParam) {
if (state.pageSize) {
searchParams.set("pageSize", state.pageSize.toString());
} else {
searchParams.delete("pageSize");
}
}
setSearchParams(searchParams);
} */
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [state]);
return (
{totalItems > 0 && (
)}
{showPageNumberModal ? (
setState({ ...state, page: parseInt(e.target.value) })}
onBlur={() => setShowPageNumberModal(false)}
className="block w-full min-w-0 flex-1 rounded border-gray-200 text-xs focus:border-accent-500 focus:ring-accent-500"
/>
) : (
)}
{
setState({
page: e.currentPage,
pageSize: e.pageSize,
});
setShowPageSizeModal(false);
}}
/>
);
}
function PageOptionsForm({
page,
pageSize,
onChange,
totalItems,
}: {
page: number;
pageSize?: number;
totalItems?: number;
onChange: (state: { currentPage: number; pageSize?: number }) => void;
}) {
const { t } = useApp();
const [totalPages, setTotalPages] = useState(0);
const [state, setState] = useState({ currentPage: page, pageSize: pageSize });
useEffect(() => {
if (totalItems) {
setTotalPages(Math.ceil(totalItems / (state.pageSize || Constants.DEFAULT_PAGE_SIZE)));
}
}, [state.pageSize, totalItems]);
function handleSubmit(e: FormEvent) {
e.stopPropagation();
e.preventDefault();
onChange(state);
}
function onReset() {
onChange({ currentPage: 1, pageSize: undefined });
}
function existingChanges() {
return state.pageSize !== Constants.DEFAULT_PAGE_SIZE || state.currentPage !== 1;
}
return (
);
}
// function PageSize({ number, onSelected }: { number?: number; onSelected: () => void }) {
// const { t } = useTranslation();
// const [searchParams] = useSearchParams();
// return (
//
// );
// }