|
@@ -52,6 +52,7 @@ type CommonProps = {
|
|
|
additionalMenuItemRenderer?: React.FunctionComponent<AdditionalMenuItemsRendererProps>,
|
|
additionalMenuItemRenderer?: React.FunctionComponent<AdditionalMenuItemsRendererProps>,
|
|
|
isInstantRename?: boolean,
|
|
isInstantRename?: boolean,
|
|
|
alignEnd?: boolean,
|
|
alignEnd?: boolean,
|
|
|
|
|
+ isUsersHomepageDeletionEnabled?: boolean,
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@@ -66,11 +67,11 @@ const PageItemControlDropdownMenu = React.memo((props: DropdownMenuProps): JSX.E
|
|
|
|
|
|
|
|
const {
|
|
const {
|
|
|
pageId, isLoading, pageInfo, isEnableActions, isReadOnlyUser, forceHideMenuItems, operationProcessData,
|
|
pageId, isLoading, pageInfo, isEnableActions, isReadOnlyUser, forceHideMenuItems, operationProcessData,
|
|
|
- onClickBookmarkMenuItem, onClickRenameMenuItem, onClickDuplicateMenuItem,
|
|
|
|
|
|
|
+ onClickBookmarkMenuItem, onClickRenameMenuItem, onClickDuplicateMenuItem, onClickDeleteMenuItem,
|
|
|
onClickRevertMenuItem, onClickPathRecoveryMenuItem,
|
|
onClickRevertMenuItem, onClickPathRecoveryMenuItem,
|
|
|
additionalMenuItemOnTopRenderer: AdditionalMenuItemsOnTop,
|
|
additionalMenuItemOnTopRenderer: AdditionalMenuItemsOnTop,
|
|
|
additionalMenuItemRenderer: AdditionalMenuItems,
|
|
additionalMenuItemRenderer: AdditionalMenuItems,
|
|
|
- isInstantRename, alignEnd,
|
|
|
|
|
|
|
+ isInstantRename, alignEnd, isUsersHomepageDeletionEnabled,
|
|
|
} = props;
|
|
} = props;
|
|
|
|
|
|
|
|
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
@@ -109,7 +110,16 @@ const PageItemControlDropdownMenu = React.memo((props: DropdownMenuProps): JSX.E
|
|
|
}, [onClickRevertMenuItem, pageId]);
|
|
}, [onClickRevertMenuItem, pageId]);
|
|
|
|
|
|
|
|
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
|
-
|
|
|
|
|
|
|
+ const deleteItemClickedHandler = useCallback(async() => {
|
|
|
|
|
+ if (pageInfo == null || onClickDeleteMenuItem == null) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!pageInfo.isDeletable) {
|
|
|
|
|
+ logger.warn('This page could not be deleted.');
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ await onClickDeleteMenuItem(pageId, pageInfo);
|
|
|
|
|
+ }, [onClickDeleteMenuItem, pageId, pageInfo]);
|
|
|
|
|
|
|
|
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
|
const pathRecoveryItemClickedHandler = useCallback(async() => {
|
|
const pathRecoveryItemClickedHandler = useCallback(async() => {
|
|
@@ -131,7 +141,7 @@ const PageItemControlDropdownMenu = React.memo((props: DropdownMenuProps): JSX.E
|
|
|
else if (pageId != null && pageInfo != null) {
|
|
else if (pageId != null && pageInfo != null) {
|
|
|
|
|
|
|
|
const showDeviderBeforeAdditionalMenuItems = (forceHideMenuItems?.length ?? 0) < 3;
|
|
const showDeviderBeforeAdditionalMenuItems = (forceHideMenuItems?.length ?? 0) < 3;
|
|
|
-
|
|
|
|
|
|
|
+ const showDeviderBeforeDelete = AdditionalMenuItems != null || showDeviderBeforeAdditionalMenuItems;
|
|
|
|
|
|
|
|
// PathRecovery
|
|
// PathRecovery
|
|
|
// Todo: It is wanted to find a better way to pass operationProcessData to PageItemControl
|
|
// Todo: It is wanted to find a better way to pass operationProcessData to PageItemControl
|
|
@@ -221,7 +231,20 @@ const PageItemControlDropdownMenu = React.memo((props: DropdownMenuProps): JSX.E
|
|
|
|
|
|
|
|
{/* divider */}
|
|
{/* divider */}
|
|
|
{/* Delete */}
|
|
{/* Delete */}
|
|
|
-
|
|
|
|
|
|
|
+ { !forceHideMenuItems?.includes(MenuItemType.DELETE) && isEnableActions && !isReadOnlyUser && isUsersHomepageDeletionEnabled && (
|
|
|
|
|
+ <>
|
|
|
|
|
+ { showDeviderBeforeDelete && <DropdownItem divider /> }
|
|
|
|
|
+ <DropdownItem
|
|
|
|
|
+ className={`pt-2 grw-page-control-dropdown-item ${pageInfo.isDeletable ? 'text-danger' : ''}`}
|
|
|
|
|
+ disabled={!pageInfo.isDeletable}
|
|
|
|
|
+ onClick={deleteItemClickedHandler}
|
|
|
|
|
+ data-testid="open-page-delete-modal-btn"
|
|
|
|
|
+ >
|
|
|
|
|
+ <span className="material-symbols-outlined me-1 grw-page-control-dropdown-icon">delete</span>
|
|
|
|
|
+ {t('Delete')}
|
|
|
|
|
+ </DropdownItem>
|
|
|
|
|
+ </>
|
|
|
|
|
+ )}
|
|
|
</>
|
|
</>
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|