|
@@ -41,13 +41,12 @@ type CommonProps = {
|
|
|
onClickDuplicateMenuItem?: (pageId: string) => Promise<void> | void,
|
|
onClickDuplicateMenuItem?: (pageId: string) => Promise<void> | void,
|
|
|
onClickDeleteMenuItem?: (pageId: string, pageInfo: IPageInfoAll | undefined) => Promise<void> | void,
|
|
onClickDeleteMenuItem?: (pageId: string, pageInfo: IPageInfoAll | undefined) => Promise<void> | void,
|
|
|
onClickRevertMenuItem?: (pageId: string) => Promise<void> | void,
|
|
onClickRevertMenuItem?: (pageId: string) => Promise<void> | void,
|
|
|
- onClickSwitchContentWidthMenuItem?: (pageId: string, isContainerFluid?: boolean) => Promise<void>,
|
|
|
|
|
onClickPathRecoveryMenuItem?: (pageId: string) => Promise<void> | void,
|
|
onClickPathRecoveryMenuItem?: (pageId: string) => Promise<void> | void,
|
|
|
|
|
|
|
|
|
|
+ additionalMenuItemOnTopRenderer?: React.FunctionComponent<AdditionalMenuItemsRendererProps>,
|
|
|
additionalMenuItemRenderer?: React.FunctionComponent<AdditionalMenuItemsRendererProps>,
|
|
additionalMenuItemRenderer?: React.FunctionComponent<AdditionalMenuItemsRendererProps>,
|
|
|
isInstantRename?: boolean,
|
|
isInstantRename?: boolean,
|
|
|
alignRight?: boolean,
|
|
alignRight?: boolean,
|
|
|
- isContainerFluid?: boolean
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@@ -57,37 +56,18 @@ type DropdownMenuProps = CommonProps & {
|
|
|
operationProcessData?: IPageOperationProcessData,
|
|
operationProcessData?: IPageOperationProcessData,
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// Utility to update body class
|
|
|
|
|
-const updateBodyClassByView = (isContainerFluid: boolean): void => {
|
|
|
|
|
- const bodyClasses = document.body.classList;
|
|
|
|
|
- const isLayoutFluid = bodyClasses.contains('growi-layout-fluid');
|
|
|
|
|
-
|
|
|
|
|
- if (isContainerFluid && !isLayoutFluid) {
|
|
|
|
|
- bodyClasses.add('growi-layout-fluid');
|
|
|
|
|
- }
|
|
|
|
|
- else if (isLayoutFluid) {
|
|
|
|
|
- bodyClasses.remove('growi-layout-fluid');
|
|
|
|
|
- }
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
const PageItemControlDropdownMenu = React.memo((props: DropdownMenuProps): JSX.Element => {
|
|
const PageItemControlDropdownMenu = React.memo((props: DropdownMenuProps): JSX.Element => {
|
|
|
const { t } = useTranslation('');
|
|
const { t } = useTranslation('');
|
|
|
|
|
|
|
|
const {
|
|
const {
|
|
|
pageId, isLoading, pageInfo, isEnableActions, forceHideMenuItems, operationProcessData,
|
|
pageId, isLoading, pageInfo, isEnableActions, forceHideMenuItems, operationProcessData,
|
|
|
onClickBookmarkMenuItem, onClickRenameMenuItem, onClickDuplicateMenuItem, onClickDeleteMenuItem,
|
|
onClickBookmarkMenuItem, onClickRenameMenuItem, onClickDuplicateMenuItem, onClickDeleteMenuItem,
|
|
|
- onClickRevertMenuItem, onClickPathRecoveryMenuItem, onClickSwitchContentWidthMenuItem,
|
|
|
|
|
- additionalMenuItemRenderer: AdditionalMenuItems, isInstantRename, alignRight,
|
|
|
|
|
|
|
+ onClickRevertMenuItem, onClickPathRecoveryMenuItem,
|
|
|
|
|
+ additionalMenuItemOnTopRenderer: AdditionalMenuItemsOnTop,
|
|
|
|
|
+ additionalMenuItemRenderer: AdditionalMenuItems,
|
|
|
|
|
+ isInstantRename, alignRight,
|
|
|
} = props;
|
|
} = props;
|
|
|
|
|
|
|
|
- const switchContentWidthHandler = useCallback(async() => {
|
|
|
|
|
- if (!isIPageInfoForOperation(pageInfo) || onClickSwitchContentWidthMenuItem == null) {
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- await onClickSwitchContentWidthMenuItem(pageId, pageInfo.isContainerFluid);
|
|
|
|
|
- updateBodyClassByView(!pageInfo.isContainerFluid);
|
|
|
|
|
- }, [onClickSwitchContentWidthMenuItem, pageId, pageInfo]);
|
|
|
|
|
-
|
|
|
|
|
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
|
const bookmarkItemClickedHandler = useCallback(async() => {
|
|
const bookmarkItemClickedHandler = useCallback(async() => {
|
|
|
if (!isIPageInfoForOperation(pageInfo) || onClickBookmarkMenuItem == null) {
|
|
if (!isIPageInfoForOperation(pageInfo) || onClickBookmarkMenuItem == null) {
|
|
@@ -172,31 +152,15 @@ const PageItemControlDropdownMenu = React.memo((props: DropdownMenuProps): JSX.E
|
|
|
</DropdownItem>
|
|
</DropdownItem>
|
|
|
) }
|
|
) }
|
|
|
|
|
|
|
|
- {/* Content width switcher */}
|
|
|
|
|
- { !forceHideMenuItems?.includes(MenuItemType.SWITCH_CONTENT_WIDTH) && isEnableActions && !pageInfo.isEmpty && isIPageInfoForOperation(pageInfo) && (
|
|
|
|
|
- <DropdownItem
|
|
|
|
|
- onClick={switchContentWidthHandler}
|
|
|
|
|
- className="grw-page-control-dropdown-item"
|
|
|
|
|
- >
|
|
|
|
|
- <div className="custom-control custom-switch ml-1">
|
|
|
|
|
- <input
|
|
|
|
|
- id="switchContentWidth"
|
|
|
|
|
- className="custom-control-input"
|
|
|
|
|
- type="checkbox"
|
|
|
|
|
- checked={pageInfo.isContainerFluid}
|
|
|
|
|
- onChange={() => {}}
|
|
|
|
|
- />
|
|
|
|
|
- <label className="custom-control-label" htmlFor="switchContentWidth">
|
|
|
|
|
- { t('wide_view') }
|
|
|
|
|
- </label>
|
|
|
|
|
- </div>
|
|
|
|
|
- </DropdownItem>
|
|
|
|
|
|
|
+ { AdditionalMenuItemsOnTop && (
|
|
|
|
|
+ <>
|
|
|
|
|
+ <AdditionalMenuItemsOnTop pageInfo={pageInfo} />
|
|
|
|
|
+ <DropdownItem divider />
|
|
|
|
|
+ </>
|
|
|
) }
|
|
) }
|
|
|
- { !forceHideMenuItems?.includes(MenuItemType.SWITCH_CONTENT_WIDTH) && !pageInfo.isEmpty && <DropdownItem divider /> }
|
|
|
|
|
-
|
|
|
|
|
|
|
|
|
|
{/* Bookmark */}
|
|
{/* Bookmark */}
|
|
|
- { !forceHideMenuItems?.includes(MenuItemType.BOOKMARK) && isEnableActions && !pageInfo.isEmpty && isIPageInfoForOperation(pageInfo) && (
|
|
|
|
|
|
|
+ { !forceHideMenuItems?.includes(MenuItemType.BOOKMARK) && isEnableActions && isIPageInfoForOperation(pageInfo) && (
|
|
|
<DropdownItem
|
|
<DropdownItem
|
|
|
onClick={bookmarkItemClickedHandler}
|
|
onClick={bookmarkItemClickedHandler}
|
|
|
className="grw-page-control-dropdown-item"
|
|
className="grw-page-control-dropdown-item"
|
|
@@ -299,7 +263,7 @@ export const PageItemControlSubstance = (props: PageItemControlSubstanceProps):
|
|
|
|
|
|
|
|
const {
|
|
const {
|
|
|
pageId, pageInfo: presetPageInfo, fetchOnInit, children, onClickBookmarkMenuItem, onClickRenameMenuItem,
|
|
pageId, pageInfo: presetPageInfo, fetchOnInit, children, onClickBookmarkMenuItem, onClickRenameMenuItem,
|
|
|
- onClickDuplicateMenuItem, onClickDeleteMenuItem, onClickPathRecoveryMenuItem, onClickSwitchContentWidthMenuItem,
|
|
|
|
|
|
|
+ onClickDuplicateMenuItem, onClickDeleteMenuItem, onClickPathRecoveryMenuItem,
|
|
|
} = props;
|
|
} = props;
|
|
|
|
|
|
|
|
const [isOpen, setIsOpen] = useState(false);
|
|
const [isOpen, setIsOpen] = useState(false);
|
|
@@ -317,16 +281,6 @@ export const PageItemControlSubstance = (props: PageItemControlSubstanceProps):
|
|
|
}
|
|
}
|
|
|
}, [isOpen, presetPageInfo, shouldFetch]);
|
|
}, [isOpen, presetPageInfo, shouldFetch]);
|
|
|
|
|
|
|
|
- const switchContentWidthMenuItemHandler = useCallback(async(_pageId: string, _isContainerFluid: boolean) => {
|
|
|
|
|
- if (onClickSwitchContentWidthMenuItem != null) {
|
|
|
|
|
- await onClickSwitchContentWidthMenuItem(_pageId, _isContainerFluid);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if (shouldFetch) {
|
|
|
|
|
- mutatePageInfo();
|
|
|
|
|
- }
|
|
|
|
|
- }, [mutatePageInfo, onClickSwitchContentWidthMenuItem, shouldFetch]);
|
|
|
|
|
-
|
|
|
|
|
// mutate after handle event
|
|
// mutate after handle event
|
|
|
const bookmarkMenuItemClickHandler = useCallback(async(_pageId: string, _newValue: boolean) => {
|
|
const bookmarkMenuItemClickHandler = useCallback(async(_pageId: string, _newValue: boolean) => {
|
|
|
if (onClickBookmarkMenuItem != null) {
|
|
if (onClickBookmarkMenuItem != null) {
|
|
@@ -384,7 +338,6 @@ export const PageItemControlSubstance = (props: PageItemControlSubstanceProps):
|
|
|
onClickRenameMenuItem={renameMenuItemClickHandler}
|
|
onClickRenameMenuItem={renameMenuItemClickHandler}
|
|
|
onClickDuplicateMenuItem={duplicateMenuItemClickHandler}
|
|
onClickDuplicateMenuItem={duplicateMenuItemClickHandler}
|
|
|
onClickDeleteMenuItem={deleteMenuItemClickHandler}
|
|
onClickDeleteMenuItem={deleteMenuItemClickHandler}
|
|
|
- onClickSwitchContentWidthMenuItem={switchContentWidthMenuItemHandler}
|
|
|
|
|
onClickPathRecoveryMenuItem={pathRecoveryMenuItemClickHandler}
|
|
onClickPathRecoveryMenuItem={pathRecoveryMenuItemClickHandler}
|
|
|
/>
|
|
/>
|
|
|
</Dropdown>
|
|
</Dropdown>
|