SearchResultContent.tsx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import React, { FC } from 'react';
  2. import RevisionLoader from '../Page/RevisionLoader';
  3. import AppContainer from '../../client/services/AppContainer';
  4. import { IPageSearchResultData } from '../../interfaces/search';
  5. type Props ={
  6. appContainer: AppContainer,
  7. searchingKeyword:string,
  8. focusedPage: IPageSearchResultData,
  9. }
  10. const SearchResultContent: FC<Props> = (props: Props) => {
  11. // Temporaly workaround for lint error
  12. // later needs to be fixed: RevisoinRender to typescriptcomponet
  13. const RevisionRenderTypeAny: any = RevisionLoader;
  14. const renderPage = (page: IPageSearchResultData) => {
  15. const { pageData } = page;
  16. if (pageData == null) {
  17. return null;
  18. }
  19. const growiRenderer = props.appContainer.getRenderer('searchresult');
  20. let showTags = false;
  21. if (pageData.tags != null && pageData.tags.length > 0) { showTags = true }
  22. return (
  23. <div key={pageData._id} className="search-result-page mb-5">
  24. <h2>
  25. <a href={pageData.path} className="text-break">
  26. {pageData.path}
  27. </a>
  28. {showTags && (
  29. <div className="mt-1 small">
  30. <i className="tag-icon icon-tag"></i> {pageData.tags.join(', ')}
  31. </div>
  32. )}
  33. </h2>
  34. <RevisionRenderTypeAny
  35. growiRenderer={growiRenderer}
  36. pageId={pageData._id}
  37. pagePath={pageData.path}
  38. revisionId={pageData.revision}
  39. highlightKeywords={props.searchingKeyword}
  40. />
  41. </div>
  42. );
  43. };
  44. const content = renderPage(props.focusedPage);
  45. return (
  46. <div>{content}</div>
  47. );
  48. };
  49. export default SearchResultContent;