import React, { useState, useCallback, useEffect } from 'react'; import PropTypes from 'prop-types'; import { withTranslation } from 'react-i18next'; import loggerFactory from '~/utils/logger'; import { withUnstatedContainers } from '../UnstatedUtils'; import AppContainer from '~/client/services/AppContainer'; import { toastError } from '~/client/util/apiNotification'; import PaginationWrapper from '../PaginationWrapper'; import PageListItemS from './PageListItemS'; const logger = loggerFactory('growi:BookmarkList'); const BookmarkList = (props) => { const { t, appContainer, userId } = props; const [pages, setPages] = useState([]); const [activePage, setActivePage] = useState(1); const [totalItemsCount, setTotalItemsCount] = useState(0); const [pagingLimit, setPagingLimit] = useState(10); const setPageNumber = (selectedPageNumber) => { setActivePage(selectedPageNumber); }; const getMyBookmarkList = useCallback(async() => { const page = activePage; try { const res = await appContainer.apiv3Get(`/bookmarks/${userId}`, { page }); const { paginationResult } = res.data; setPages(paginationResult.docs); setTotalItemsCount(paginationResult.totalDocs); setPagingLimit(paginationResult.limit); } catch (error) { logger.error('failed to fetch data', error); toastError(error, 'Error occurred in bookmark page list'); } }, [appContainer, activePage, userId]); useEffect(() => { getMyBookmarkList(); }, [getMyBookmarkList]); /** * generate Elements of Page * * @param {any} pages Array of pages Model Obj * */ const generatePageList = pages.map(page => (
  • )); return (
    {pages.length === 0 ? t('No bookmarks yet') : ( <> )}
    ); }; /** * Wrapper component for using unstated */ const BookmarkListWrapper = withUnstatedContainers(BookmarkList, [AppContainer]); BookmarkList.propTypes = { t: PropTypes.func.isRequired, appContainer: PropTypes.instanceOf(AppContainer).isRequired, userId: PropTypes.string.isRequired, }; export default withTranslation()(BookmarkListWrapper);