SearchResultContentSubNavigation.tsx 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import React, { FC } from 'react';
  2. import LinkedPagePath from '../../models/linked-page-path';
  3. import PagePathHierarchicalLink from '../PagePathHierarchicalLink';
  4. import CopyDropdown from '../Page/CopyDropdown';
  5. import SubNavButton from '../Navbar/SubNavButtons';
  6. const { DevidedPagePath } = require('@growi/core');
  7. // TODO : change SubNavButtons in a way that they can be used not depending on pageContainer.
  8. // note: SubNavButtons contains PageManagement and PageReactionsButtons. PageManagement has muliple modals...
  9. type PagePathNavProps = {
  10. pageId: string,
  11. pagePath: string,
  12. isCompactMode: boolean,
  13. }
  14. const PagePathNav: FC<PagePathNavProps> = (props:PagePathNavProps) => {
  15. const { pageId, pagePath, isCompactMode } = props;
  16. const dPagePath = new DevidedPagePath(pagePath, false, true);
  17. let formerLink;
  18. let latterLink;
  19. // one line
  20. if (dPagePath.isRoot || dPagePath.isFormerRoot) {
  21. const linkedPagePath = new LinkedPagePath(pagePath);
  22. latterLink = <PagePathHierarchicalLink linkedPagePath={linkedPagePath} />;
  23. }
  24. // two line
  25. else {
  26. const linkedPagePathFormer = new LinkedPagePath(dPagePath.former);
  27. const linkedPagePathLatter = new LinkedPagePath(dPagePath.latter);
  28. formerLink = <PagePathHierarchicalLink linkedPagePath={linkedPagePathFormer} />;
  29. latterLink = <PagePathHierarchicalLink linkedPagePath={linkedPagePathLatter} basePath={dPagePath.former} />;
  30. }
  31. const copyDropdownId = `copydropdown${isCompactMode ? '-subnav-compact' : ''}-${pageId}`;
  32. const copyDropdownToggleClassName = 'd-block text-muted bg-transparent btn-copy border-0 py-0';
  33. return (
  34. <div className="grw-page-path-nav">
  35. {formerLink}
  36. <span className="d-flex align-items-center">
  37. <h1 className="m-0">{latterLink}</h1>
  38. <div className="mx-2">
  39. <CopyDropdown
  40. pageId={pageId}
  41. pagePath={pagePath}
  42. dropdownToggleId={copyDropdownId}
  43. dropdownToggleClassName={copyDropdownToggleClassName}
  44. >
  45. <i className="ti-clipboard"></i>
  46. </CopyDropdown>
  47. </div>
  48. </span>
  49. </div>
  50. );
  51. };
  52. type SearchResultContentSubNavigationProps = {
  53. pageId: string,
  54. pagePath: string,
  55. isCompactMode: boolean,
  56. }
  57. const SearchResultContentSubNavigation: FC<SearchResultContentSubNavigationProps> = (props:SearchResultContentSubNavigationProps) => {
  58. const SubNavButtonsTypeAny : any = SubNavButton;
  59. return (
  60. <div className="grw-subnav container-fluid d-flex align-items-center justify-content-between grw-subnav-compact d-print-none">
  61. {/* Left side */}
  62. <div className="d-flex grw-subnav-left-side">
  63. <div className="grw-path-nav-container">
  64. {/* tags info */}
  65. <PagePathNav pageId={props.pageId} pagePath={props.pagePath} isCompactMode />
  66. </div>
  67. </div>
  68. {/* Right side */}
  69. <div className="d-flex">
  70. <div className="d-flex flex-column align-items-end">
  71. <div className="d-flex">
  72. <SubNavButtonsTypeAny isSearchPageMode></SubNavButtonsTypeAny>
  73. </div>
  74. </div>
  75. </div>
  76. </div>
  77. );
  78. };
  79. export default SearchResultContentSubNavigation;