in src/theme/BlogListPage/index.tsx [69:146]
function BlogListPageContent(props) {
const { metadata, items, sidebar } = props;
const isBrowser = useIsBrowser();
const [blogs, setBlogs] = useState([]);
const blogCategories = getBlogCategories(props);
const ALL_BLOG = blogCategories.find(item => item.label === allText).values;
const { siteConfig } = useDocusaurusContext();
const isCN = siteConfig.baseUrl.indexOf('zh-CN') > -1;
const [active, setActive] = useState(() => {
const tag = isBrowser ? sessionStorage.getItem('tag') : allText;
return tag || allText;
});
const [pageSize, setPageSize] = useState<number>(9);
let [pageNumber, setPageNumber] = useState<number>(1);
const [currentBlogs, setCurrentBlogs] = useState([]);
const [currentPage, setCurrentPage] = useState<number>(0);
const location = useLocation();
const history = useHistory();
const changeCategory = category => {
history.push(
`${location.pathname}?currentPage=1¤tCategory=${category ? category : ''}#blog`,
location.state,
);
};
useEffect(() => {
let currentPageNumber = 1;
let currentCategoryName = allText;
if (location.search && location.search.split('?').length > 0) {
const params = location.search.split('?')[1].split('&');
if (params) {
params.map(e => {
const [key, value] = e.split('=');
if (key === 'currentPage') {
if (value) currentPageNumber = +value;
} else {
if (value) currentCategoryName = decodeURI(value);
}
});
}
}
setActive(currentCategoryName);
setCurrentPage(currentPageNumber);
let currentCategory = blogCategories.find(item => item.label === currentCategoryName);
if (!currentCategory) {
currentCategory = blogCategories.find(item => item.label === allText);
}
setBlogs(currentCategory.values);
setCurrentBlogs(currentCategory.values.slice((currentPageNumber - 1) * pageSize, currentPageNumber * pageSize));
}, [location.search]);
useEffect(() => {
changeCategory(active);
isBrowser && sessionStorage.setItem('tag', active);
}, [active]);
return (
<BlogLayout sidebar={sidebar} pageType="blogList" className="lg:max-w-7xl">
<PageHeader title="Blog" className="bg-white" {...props} />
<HeadBlogs blogs={ALL_BLOG} />
<div className="flex flex-col lg:max-w-7xl">
<ul className="scrollbar-none w-[100%] mt-6 custom-scrollbar m-auto flex gap-3 overflow-auto text-[#4C576C] lg:mt-[5.5rem] lg:justify-center lg:gap-6">
{blogCategories.map((item: any, index) => (
<li className=" py-px" key={index} onClick={() => changeCategory(item.label)}>
<span
className={`block cursor-pointer whitespace-nowrap rounded-[2.5rem] px-4 py-2 text-sm shadow-[0px_1px_4px_0px_rgba(49,77,136,0.10)] hover:bg-[#444FD9] hover:text-white lg:px-6 lg:py-3 lg:text-base ${
active === item.label && 'bg-[#444FD9] text-white'
}`}
>
{item.label}
</span>
</li>
))}