GrowiSubNavigation.tsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import React from 'react';
  2. import {
  3. EditorMode, useEditorMode,
  4. } from '~/stores/ui';
  5. import PagePathNav from '../PagePathNav';
  6. import DrawerToggler from './DrawerToggler';
  7. import styles from './GrowiSubNavigation.module.scss';
  8. export type GrowiSubNavigationProps = {
  9. pagePath?: string,
  10. pageId?: string,
  11. isNotFound?: boolean,
  12. showDrawerToggler?: boolean,
  13. isTagLabelsDisabled?: boolean,
  14. isDrawerMode?: boolean,
  15. isCompactMode?: boolean,
  16. tags?: string[],
  17. rightComponent?: React.FunctionComponent,
  18. additionalClasses?: string[],
  19. }
  20. export const GrowiSubNavigation = (props: GrowiSubNavigationProps): JSX.Element => {
  21. const { data: editorMode } = useEditorMode();
  22. const {
  23. pageId, pagePath,
  24. showDrawerToggler,
  25. isDrawerMode, isCompactMode,
  26. rightComponent: RightComponent,
  27. additionalClasses = [],
  28. } = props;
  29. const isViewMode = editorMode === EditorMode.View;
  30. const isEditorMode = !isViewMode;
  31. const compactModeClasses = isCompactMode ? 'grw-subnav-compact d-print-none' : '';
  32. return (
  33. <div className={`
  34. grw-subnav ${styles['grw-subnav']} d-flex align-items-center justify-content-between
  35. ${additionalClasses.join(' ')}
  36. ${compactModeClasses}`}
  37. >
  38. {/* Left side */}
  39. <div className="d-flex grw-subnav-start-side">
  40. { (showDrawerToggler && isDrawerMode) && (
  41. <div className={`d-none d-md-flex align-items-center ${isEditorMode ? 'me-2 pe-2' : 'border-end me-4 pe-4'}`}>
  42. <DrawerToggler />
  43. </div>
  44. ) }
  45. <div className="grw-path-nav-container">
  46. { pagePath != null && (
  47. <PagePathNav pageId={pageId} pagePath={pagePath} isSingleLineMode={isEditorMode} isCompactMode={isCompactMode} />
  48. ) }
  49. </div>
  50. </div>
  51. {/* Right side. */}
  52. { RightComponent && (
  53. <RightComponent />
  54. ) }
  55. </div>
  56. );
  57. };