SearchResultList.tsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import React, { FC } from 'react';
  2. import { IPageWithMeta } from '~/interfaces/page';
  3. import { IPageSearchMeta } from '~/interfaces/search';
  4. import { PageListItemL } from '../PageList/PageListItemL';
  5. import PaginationWrapper from '../PaginationWrapper';
  6. type Props = {
  7. pages: IPageWithMeta<IPageSearchMeta>[],
  8. selectedPagesIdList: Set<string>
  9. isEnableActions: boolean,
  10. searchResultCount?: number,
  11. activePage?: number,
  12. pagingLimit?: number,
  13. shortBodiesMap?: Record<string, string>
  14. focusedSearchResultData?: IPageWithMeta<IPageSearchMeta>,
  15. onPagingNumberChanged?: (activePage: number) => void,
  16. onClickItem?: (pageId: string) => void,
  17. onClickCheckbox?: (pageId: string) => void,
  18. onClickInvoked?: (pageId: string) => void,
  19. onClickDeleteButton?: (pageId: string) => void,
  20. }
  21. const SearchResultList: FC<Props> = (props:Props) => {
  22. const {
  23. focusedSearchResultData, selectedPagesIdList, isEnableActions, shortBodiesMap,
  24. } = props;
  25. const focusedPageId = (focusedSearchResultData != null && focusedSearchResultData.pageData != null) ? focusedSearchResultData.pageData._id : '';
  26. return (
  27. <ul className="page-list-ul list-group list-group-flush">
  28. {Array.isArray(props.pages) && props.pages.map((page) => {
  29. const isChecked = selectedPagesIdList.has(page.pageData._id);
  30. return (
  31. <PageListItemL
  32. key={page.pageData._id}
  33. page={page}
  34. isEnableActions={isEnableActions}
  35. shortBody={shortBodiesMap?.[page.pageData._id]}
  36. onClickItem={props.onClickItem}
  37. onClickCheckbox={props.onClickCheckbox}
  38. isChecked={isChecked}
  39. isSelected={page.pageData._id === focusedPageId || false}
  40. onClickDeleteButton={props.onClickDeleteButton}
  41. />
  42. );
  43. })}
  44. {props.searchResultCount != null && props.searchResultCount > 0 && (
  45. <div className="my-4 mx-auto">
  46. <PaginationWrapper
  47. activePage={props.activePage || 1}
  48. changePage={props.onPagingNumberChanged}
  49. totalItemsCount={props.searchResultCount || 0}
  50. pagingLimit={props.pagingLimit}
  51. />
  52. </div>
  53. )}
  54. </ul>
  55. );
  56. };
  57. export default SearchResultList;