| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- import React, { type JSX, useCallback, useEffect, useState } from 'react';
- import type { IPageHasId } from '@growi/core';
- import { apiv3Get } from '~/client/util/apiv3-client';
- import { toastError } from '~/client/util/toastr';
- import loggerFactory from '~/utils/logger';
- import { PageListItemS } from '../PageList/PageListItemS';
- import PaginationWrapper from '../PaginationWrapper';
- const logger = loggerFactory('growi:RecentCreated');
- type RecentCreatedProps = {
- userId: string;
- };
- export const RecentCreated = (props: RecentCreatedProps): JSX.Element => {
- const { userId } = props;
- const [pages, setPages] = useState<IPageHasId[]>([]);
- const [activePage, setActivePage] = useState(1);
- const [totalPages, setTotalPages] = useState(0);
- const [pagingLimit, setPagingLimit] = useState(10);
- const getMyRecentCreatedList = useCallback(
- async (selectedPage) => {
- const page = selectedPage;
- try {
- const res = await apiv3Get(`/users/${userId}/recent`, { page });
- const { totalCount, pages, limit } = res.data;
- setPages(pages);
- setActivePage(selectedPage);
- setTotalPages(totalCount);
- setPagingLimit(limit);
- } catch (error) {
- logger.error('failed to fetch data', error);
- toastError(error);
- }
- },
- [userId],
- );
- useEffect(() => {
- getMyRecentCreatedList(1);
- }, [getMyRecentCreatedList]);
- const handlePage = useCallback(
- async (selectedPage) => {
- await getMyRecentCreatedList(selectedPage);
- },
- [getMyRecentCreatedList],
- );
- return (
- <div className="page-list-container-create">
- <ul className="page-list-ul page-list-ul-flat mb-3">
- {pages.map((page) => (
- <li key={`recent-created:list-view:${page._id}`} className="mt-4">
- <PageListItemS page={page} />
- </li>
- ))}
- </ul>
- <PaginationWrapper
- activePage={activePage}
- changePage={handlePage}
- totalItemsCount={totalPages}
- pagingLimit={pagingLimit}
- align="center"
- size="sm"
- />
- </div>
- );
- };
|