|
@@ -1,4 +1,4 @@
|
|
|
-import React from 'react';
|
|
|
|
|
|
|
+import React, { useEffect, useState } from 'react';
|
|
|
|
|
|
|
|
import dynamic from 'next/dynamic';
|
|
import dynamic from 'next/dynamic';
|
|
|
|
|
|
|
@@ -13,42 +13,38 @@ import { Skelton } from '../Skelton';
|
|
|
|
|
|
|
|
import DrawerToggler from './DrawerToggler';
|
|
import DrawerToggler from './DrawerToggler';
|
|
|
|
|
|
|
|
-
|
|
|
|
|
import TagLabelsStyles from '../Page/TagLabels.module.scss';
|
|
import TagLabelsStyles from '../Page/TagLabels.module.scss';
|
|
|
import AuthorInfoStyles from './AuthorInfo.module.scss';
|
|
import AuthorInfoStyles from './AuthorInfo.module.scss';
|
|
|
import styles from './GrowiSubNavigation.module.scss';
|
|
import styles from './GrowiSubNavigation.module.scss';
|
|
|
|
|
|
|
|
|
|
+const TagLabels = dynamic(() => import('../Page/TagLabels'), {
|
|
|
|
|
+ ssr: false,
|
|
|
|
|
+ loading: () => <Skelton additionalClass={`${TagLabelsStyles['grw-tag-labels-skelton']} py-1`} />,
|
|
|
|
|
+});
|
|
|
|
|
+const AuthorInfo = dynamic(() => import('./AuthorInfo'), {
|
|
|
|
|
+ ssr: false,
|
|
|
|
|
+ loading: () => <Skelton additionalClass={`${AuthorInfoStyles['grw-author-info-skelton']} py-1`} />,
|
|
|
|
|
+});
|
|
|
|
|
+
|
|
|
|
|
|
|
|
export type GrowiSubNavigationProps = {
|
|
export type GrowiSubNavigationProps = {
|
|
|
page: Partial<IPageHasId>,
|
|
page: Partial<IPageHasId>,
|
|
|
-
|
|
|
|
|
showDrawerToggler?: boolean,
|
|
showDrawerToggler?: boolean,
|
|
|
showTagLabel?: boolean,
|
|
showTagLabel?: boolean,
|
|
|
showPageAuthors?: boolean,
|
|
showPageAuthors?: boolean,
|
|
|
-
|
|
|
|
|
isGuestUser?: boolean,
|
|
isGuestUser?: boolean,
|
|
|
isDrawerMode?: boolean,
|
|
isDrawerMode?: boolean,
|
|
|
isCompactMode?: boolean,
|
|
isCompactMode?: boolean,
|
|
|
-
|
|
|
|
|
tags?: string[],
|
|
tags?: string[],
|
|
|
tagsUpdatedHandler?: (newTags: string[]) => Promise<void> | void,
|
|
tagsUpdatedHandler?: (newTags: string[]) => Promise<void> | void,
|
|
|
-
|
|
|
|
|
- controls?: React.FunctionComponent,
|
|
|
|
|
|
|
+ controls: React.FunctionComponent,
|
|
|
additionalClasses?: string[],
|
|
additionalClasses?: string[],
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
export const GrowiSubNavigation = (props: GrowiSubNavigationProps): JSX.Element => {
|
|
export const GrowiSubNavigation = (props: GrowiSubNavigationProps): JSX.Element => {
|
|
|
|
|
|
|
|
- const TagLabels = dynamic(() => import('../Page/TagLabels'), {
|
|
|
|
|
- ssr: false,
|
|
|
|
|
- loading: () => <Skelton additionalClass={`${TagLabelsStyles['grw-tag-labels-skelton']} py-1`} />,
|
|
|
|
|
- });
|
|
|
|
|
- const AuthorInfo = dynamic(() => import('./AuthorInfo'), {
|
|
|
|
|
- ssr: false,
|
|
|
|
|
- loading: () => <Skelton additionalClass={`${AuthorInfoStyles['grw-author-info-skelton']} py-1`} />,
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
const { data: editorMode } = useEditorMode();
|
|
const { data: editorMode } = useEditorMode();
|
|
|
|
|
+ const [isControls, setControls] = useState(false);
|
|
|
|
|
|
|
|
const {
|
|
const {
|
|
|
page,
|
|
page,
|
|
@@ -59,35 +55,39 @@ export const GrowiSubNavigation = (props: GrowiSubNavigationProps): JSX.Element
|
|
|
additionalClasses = [],
|
|
additionalClasses = [],
|
|
|
} = props;
|
|
} = props;
|
|
|
|
|
|
|
|
|
|
+ const isViewMode = editorMode === EditorMode.View;
|
|
|
|
|
+ const isEditorMode = !isViewMode;
|
|
|
|
|
+ const compactModeClasses = isCompactMode ? 'grw-subnav-compact d-print-none' : '';
|
|
|
|
|
+
|
|
|
const {
|
|
const {
|
|
|
_id: pageId, path, creator, lastUpdateUser,
|
|
_id: pageId, path, creator, lastUpdateUser,
|
|
|
createdAt, updatedAt,
|
|
createdAt, updatedAt,
|
|
|
} = page;
|
|
} = page;
|
|
|
|
|
|
|
|
- const isViewMode = editorMode === EditorMode.View;
|
|
|
|
|
- const isEditorMode = !isViewMode;
|
|
|
|
|
|
|
+ useEffect(() => {
|
|
|
|
|
+ if (Controls != null) {
|
|
|
|
|
+ setControls(true);
|
|
|
|
|
+ }
|
|
|
|
|
+ }, [Controls]);
|
|
|
|
|
|
|
|
if (path == null) {
|
|
if (path == null) {
|
|
|
return <></>;
|
|
return <></>;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- return (
|
|
|
|
|
- <div className={
|
|
|
|
|
- `grw-subnav ${styles['grw-subnav']} d-flex align-items-center justify-content-between`
|
|
|
|
|
- + ` ${additionalClasses.join(' ')}`
|
|
|
|
|
- + ` ${isCompactMode ? 'grw-subnav-compact d-print-none' : ''}`}
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ console.log(isCompactMode);
|
|
|
|
|
|
|
|
|
|
+ return (
|
|
|
|
|
+ <div className={`grw-subnav ${styles['grw-subnav']} d-flex align-items-center justify-content-between ${additionalClasses.join(' ')}
|
|
|
|
|
+ ${compactModeClasses}`} >
|
|
|
{/* Left side */}
|
|
{/* Left side */}
|
|
|
<div className="d-flex grw-subnav-left-side">
|
|
<div className="d-flex grw-subnav-left-side">
|
|
|
- { showDrawerToggler && isDrawerMode && (
|
|
|
|
|
|
|
+ { (showDrawerToggler && isDrawerMode) && (
|
|
|
<div className={`d-none d-md-flex align-items-center ${isEditorMode ? 'mr-2 pr-2' : 'border-right mr-4 pr-4'}`}>
|
|
<div className={`d-none d-md-flex align-items-center ${isEditorMode ? 'mr-2 pr-2' : 'border-right mr-4 pr-4'}`}>
|
|
|
<DrawerToggler />
|
|
<DrawerToggler />
|
|
|
</div>
|
|
</div>
|
|
|
) }
|
|
) }
|
|
|
-
|
|
|
|
|
<div className="grw-path-nav-container">
|
|
<div className="grw-path-nav-container">
|
|
|
- { showTagLabel && !isCompactMode && (
|
|
|
|
|
|
|
+ { (showTagLabel && !isCompactMode) && (
|
|
|
<div className="grw-taglabels-container">
|
|
<div className="grw-taglabels-container">
|
|
|
<TagLabels tags={tags} isGuestUser={isGuestUser ?? false} tagsUpdateInvoked={tagsUpdatedHandler} />
|
|
<TagLabels tags={tags} isGuestUser={isGuestUser ?? false} tagsUpdateInvoked={tagsUpdatedHandler} />
|
|
|
</div>
|
|
</div>
|
|
@@ -95,12 +95,9 @@ export const GrowiSubNavigation = (props: GrowiSubNavigationProps): JSX.Element
|
|
|
<PagePathNav pageId={pageId} pagePath={path} isSingleLineMode={isEditorMode} isCompactMode={isCompactMode} />
|
|
<PagePathNav pageId={pageId} pagePath={path} isSingleLineMode={isEditorMode} isCompactMode={isCompactMode} />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
-
|
|
|
|
|
{/* Right side */}
|
|
{/* Right side */}
|
|
|
<div className="d-flex">
|
|
<div className="d-flex">
|
|
|
-
|
|
|
|
|
- { Controls && <Controls></Controls> }
|
|
|
|
|
-
|
|
|
|
|
|
|
+ { isControls && <Controls /> }
|
|
|
{/* Page Authors */}
|
|
{/* Page Authors */}
|
|
|
{ (showPageAuthors && !isCompactMode) && (
|
|
{ (showPageAuthors && !isCompactMode) && (
|
|
|
<ul className={`${AuthorInfoStyles['grw-author-info']} text-nowrap border-left d-none d-lg-block d-edit-none py-2 pl-4 mb-0 ml-3`}>
|
|
<ul className={`${AuthorInfoStyles['grw-author-info']} text-nowrap border-left d-none d-lg-block d-edit-none py-2 pl-4 mb-0 ml-3`}>
|