import React, { useCallback } from 'react'; import { pagePathUtils, PageGrant } from '@growi/core'; import { useTranslation } from 'next-i18next'; import { UncontrolledButtonDropdown, Button, DropdownToggle, DropdownMenu, DropdownItem, } from 'reactstrap'; // import PageContainer from '~/client/services/PageContainer'; import { CustomWindow } from '~/interfaces/global'; import { IPageGrantData } from '~/interfaces/page'; import { useCurrentPagePath, useIsEditable, useCurrentPageId, useIsAclEnabled, } from '~/stores/context'; import { useIsEnabledUnsavedWarning } from '~/stores/editor'; import { useSelectedGrant } from '~/stores/ui'; import loggerFactory from '~/utils/logger'; import GrantSelector from './SavePageControls/GrantSelector'; // import { withUnstatedContainers } from './UnstatedUtils'; const logger = loggerFactory('growi:SavePageControls'); type Props = { // pageContainer: PropTypes.instanceOf(PageContainer).isRequired, } const { isTopPage } = pagePathUtils; export const SavePageControls = (props: Props): JSX.Element | null => { const { t } = useTranslation(); const { data: currentPagePath } = useCurrentPagePath(); const { data: isEditable } = useIsEditable(); const { data: isAclEnabled } = useIsAclEnabled(); const { data: grantData, mutate: mutateGrant } = useSelectedGrant(); const { data: pageId } = useCurrentPageId(); const { mutate: mutateIsEnabledUnsavedWarning } = useIsEnabledUnsavedWarning(); const updateGrantHandler = useCallback((grantData: IPageGrantData): void => { mutateGrant(grantData); }, [mutateGrant]); const save = useCallback(async(): Promise => { // disable unsaved warning mutateIsEnabledUnsavedWarning(false); // save (window as CustomWindow).globalEmitter.emit('saveAndReturnToView'); }, [mutateIsEnabledUnsavedWarning]); const saveAndOverwriteScopesOfDescendants = useCallback(() => { // disable unsaved warning mutateIsEnabledUnsavedWarning(false); // save (window as CustomWindow).globalEmitter.emit('saveAndReturnToView', { overwriteScopesOfDescendants: true }); }, [mutateIsEnabledUnsavedWarning]); if (isEditable == null || isAclEnabled == null || grantData == null) { return null; } if (!isEditable) { return null; } const { grant, grantedGroup } = grantData; const isRootPage = isTopPage(currentPagePath ?? ''); const labelSubmitButton = pageId == null ? t('Create') : t('Update'); const labelOverwriteScopes = t('page_edit.overwrite_scopes', { operation: labelSubmitButton }); return (
{isAclEnabled && (
) } {labelOverwriteScopes}
); };