import React, { useCallback, type JSX } from 'react'; import { useTranslation } from 'next-i18next'; import { useIsGuestUser, useIsReadOnlyUser } from '~/stores-universal/context'; import { useEditorMode } from '~/stores-universal/ui'; import { usePageStatusAlert } from '~/stores/alert'; import { useSWRxCurrentPage } from '~/stores/page'; import { useRemoteRevisionId, useRemoteRevisionLastUpdateUser } from '~/stores/remote-latest-page'; import { Username } from '../../components/User/Username'; import styles from './PageStatusAlert.module.scss'; export const PageStatusAlert = (): JSX.Element => { const { t } = useTranslation(); const { data: editorMode } = useEditorMode(); const { data: isGuestUser } = useIsGuestUser(); const { data: isReadOnlyUser } = useIsReadOnlyUser(); const { data: pageStatusAlertData } = usePageStatusAlert(); const { data: remoteRevisionId } = useRemoteRevisionId(); const { data: remoteRevisionLastUpdateUser } = useRemoteRevisionLastUpdateUser(); const { data: pageData } = useSWRxCurrentPage(); const onClickRefreshPage = useCallback(() => { pageStatusAlertData?.onRefleshPage?.(); }, [pageStatusAlertData]); const onClickResolveConflict = useCallback(() => { pageStatusAlertData?.onResolveConflict?.(); }, [pageStatusAlertData]); const hasResolveConflictHandler = pageStatusAlertData?.onResolveConflict != null; const hasRefreshPageHandler = pageStatusAlertData?.onRefleshPage != null; const currentRevisionId = pageData?.revision?._id; const isRevisionOutdated = (currentRevisionId != null || remoteRevisionId != null) && currentRevisionId !== remoteRevisionId; if (!pageStatusAlertData?.isOpen || !!isGuestUser || !!isReadOnlyUser || !isRevisionOutdated) { return <>>; } if (editorMode === pageStatusAlertData?.hideEditorMode) { return <>>; } return (
{ hasResolveConflictHandler
? <>{t('modal_resolve_conflict.file_conflicting_with_newer_remote')}>
: <>
{hasRefreshPageHandler && ( )} {hasResolveConflictHandler && ( )}