Commit 147cdb0e authored by Chunchi Che's avatar Chunchi Che

add pagination

parent 4a4f028b
Pipeline #27610 passed with stages
in 7 minutes and 58 seconds
...@@ -88,7 +88,7 @@ export const CardResults: React.FC<{ ...@@ -88,7 +88,7 @@ export const CardResults: React.FC<{
))} ))}
</div> </div>
{results.length > itemsPerPage && ( {results.length > itemsPerPage && (
<div style={{ textAlign: "center", padding: "10px 0 20px" }}> <div style={{ textAlign: "center", padding: "0.625rem 0 1.25rem" }}>
<Pagination <Pagination
current={currentPage} current={currentPage}
onChange={(page) => { onChange={(page) => {
......
.container {
}
.empty { .empty {
gap: 1.25rem; gap: 1.25rem;
width: 100%; width: 100%;
......
import { message, Pagination } from "antd";
import React, { memo, useEffect } from "react"; import React, { memo, useEffect } from "react";
import { proxy, useSnapshot } from "valtio"; import { proxy, useSnapshot } from "valtio";
...@@ -11,13 +12,14 @@ interface Props { ...@@ -11,13 +12,14 @@ interface Props {
query: string; query: string;
page: number; page: number;
decks: MdproDeck[]; decks: MdproDeck[];
pages: number; total: number;
} }
// TODO: useConfig // TODO: useConfig
const PAGE_SIZE = 20; const PAGE_SIZE = 20;
const SORT_LIKE = true;
const store = proxy<Props>({ query: "", page: 1, decks: [], pages: 0 }); const store = proxy<Props>({ query: "", page: 1, decks: [], total: 0 });
export const DeckResults: React.FC = memo(() => { export const DeckResults: React.FC = memo(() => {
const snap = useSnapshot(store); const snap = useSnapshot(store);
...@@ -28,12 +30,12 @@ export const DeckResults: React.FC = memo(() => { ...@@ -28,12 +30,12 @@ export const DeckResults: React.FC = memo(() => {
page: snap.page, page: snap.page,
size: PAGE_SIZE, size: PAGE_SIZE,
keyWord: snap.query !== "" ? snap.query : undefined, keyWord: snap.query !== "" ? snap.query : undefined,
sortLike: true, sortLike: SORT_LIKE,
}); });
if (resp?.data) { if (resp?.data) {
const { pages, records: newDecks } = resp.data; const { total, records: newDecks } = resp.data;
store.pages = pages; store.total = total;
store.decks = newDecks; store.decks = newDecks;
} else { } else {
store.decks = []; store.decks = [];
...@@ -43,10 +45,41 @@ export const DeckResults: React.FC = memo(() => { ...@@ -43,10 +45,41 @@ export const DeckResults: React.FC = memo(() => {
update(); update();
}, [snap.query, snap.page]); }, [snap.query, snap.page]);
const onchangePage = async (page: number) => {
const resp = await pullDecks({
page,
size: PAGE_SIZE,
keyWord: store.query !== "" ? store.query : undefined,
sortLike: SORT_LIKE,
});
console.log(resp);
if (resp?.data) {
const { current, total, records } = resp.data;
store.page = current;
store.total = total;
store.decks = records;
} else {
message.error("翻页失败,请检查您的网络状况。");
}
};
return ( return (
<> <>
{snap.decks.length ? ( {snap.decks.length ? (
<div></div> <div className={styles.container}>
<div style={{ textAlign: "center", padding: "0.625rem 0 1.25rem" }}>
<Pagination
current={snap.page}
onChange={onchangePage}
total={snap.total}
pageSize={PAGE_SIZE}
showLessItems
hideOnSinglePage
/>
</div>
</div>
) : ( ) : (
<div className={styles.empty}> <div className={styles.empty}>
<IconFont type="icon-empty" size={40} /> <IconFont type="icon-empty" size={40} />
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment