PageList.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import React from 'react';
  2. import { useTranslation } from 'next-i18next';
  3. import { IPageInfoForEntity, IPageWithMeta } from '~/interfaces/page';
  4. import { OnDeletedFunction, OnPutBackedFunction } from '~/interfaces/ui';
  5. import { ForceHideMenuItems } from '../Common/Dropdown/PageItemControl';
  6. import { PageListItemL } from './PageListItemL';
  7. import styles from './PageList.module.scss';
  8. type Props<M extends IPageInfoForEntity> = {
  9. pages: IPageWithMeta<M>[],
  10. isEnableActions?: boolean,
  11. isReadOnlyUser: boolean,
  12. forceHideMenuItems?: ForceHideMenuItems,
  13. onPagesDeleted?: OnDeletedFunction,
  14. onPagePutBacked?: OnPutBackedFunction,
  15. }
  16. const PageList = (props: Props<IPageInfoForEntity>): JSX.Element => {
  17. const { t } = useTranslation();
  18. const {
  19. pages, isEnableActions, isReadOnlyUser, forceHideMenuItems, onPagesDeleted, onPagePutBacked,
  20. } = props;
  21. if (pages == null) {
  22. return (
  23. <div className="wiki">
  24. <div className="text-muted text-center">
  25. <i className="fa fa-2x fa-spinner fa-pulse mr-1"></i>
  26. </div>
  27. </div>
  28. );
  29. }
  30. const pageList = pages.map(page => (
  31. <PageListItemL
  32. key={page.data._id}
  33. page={page}
  34. isEnableActions={isEnableActions}
  35. isReadOnlyUser={isReadOnlyUser}
  36. forceHideMenuItems={forceHideMenuItems}
  37. onPageDeleted={onPagesDeleted}
  38. onPagePutBacked={onPagePutBacked}
  39. />
  40. ));
  41. if (pageList.length === 0) {
  42. return (
  43. <div className="mt-2">
  44. <p>{t('custom_navigation.no_pages_under_this_page')}</p>
  45. </div>
  46. );
  47. }
  48. return (
  49. <div className={`page-list ${styles['page-list']}`}>
  50. <ul className="page-list-ul list-group list-group-flush">
  51. {pageList}
  52. </ul>
  53. </div>
  54. );
  55. };
  56. export default PageList;