import {
Box,
Button,
HStack,
Select,
SelectContent,
SelectListbox,
SelectOption,
SelectOptionText,
SelectTrigger,
Text,
} from "@hope-ui/solid"
import { createMemo, Match, onCleanup, onMount, Show, Switch } from "solid-js"
import { TbSelector } from "solid-icons/tb"
import { FullLoading, Paginator } from "~/components"
import { getGlobalPage, usePath, useRouter, useT } from "~/hooks"
import {
clearHistory,
DEFAULT_PAGE_SIZE,
getPagination,
MAX_PAGE_SIZE,
objStore,
State,
} from "~/store"
const Pagination = () => {
const pagination = getPagination()
const { pathname, searchParams, setSearchParams } = useRouter()
const pageSizeOptions = [50, 100, 200, 300, 500].filter(
(size) => size <= MAX_PAGE_SIZE,
)
const currentPerPage = createMemo(() => {
const value = parseInt(searchParams["per_page"], 10)
if (Number.isFinite(value) && value > 0) {
return Math.min(MAX_PAGE_SIZE, value)
}
return pagination.size || DEFAULT_PAGE_SIZE
})
return (
{/*Per page*/}
{(pageSize) => (
{
clearHistory(pathname(), page)
setSearchParams({ page, per_page: pageSize })
}}
/>
)}
)
}
const LoadMore = () => {
const { loadMore, allLoaded } = usePath()
const t = useT()
return (
{t("home.no_more")}}
>
)
}
const AutoLoadMore = () => {
const { loadMore, allLoaded } = usePath()
const t = useT()
const ob = new IntersectionObserver(
(entries) => {
if (entries[0].isIntersecting) {
loadMore()
}
},
{
threshold: 0.1,
},
)
let el: HTMLDivElement
onMount(() => {
if (!allLoaded()) {
ob.observe(el)
}
})
onCleanup(() => {
ob.disconnect()
})
return (
{t("home.no_more")}}
>
)
}
export const Pager = () => {
const pagination = getPagination()
return (
)
}