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 ( ) }