import React from 'react'; import { useTranslation } from 'next-i18next'; import PropTypes from 'prop-types'; // import AppContainer from '~/client/services/AppContainer'; // import PageContainer from '~/client/services/PageContainer'; import Username from '~/components/User/Username'; import { withUnstatedContainers } from './UnstatedUtils'; /** * * @author Yuki Takei * * @export * @class PageStatusAlert * @extends {React.Component} */ class PageStatusAlert extends React.Component { constructor(props) { super(props); this.state = { }; this.getContentsForSomeoneEditingAlert = this.getContentsForSomeoneEditingAlert.bind(this); this.getContentsForDraftExistsAlert = this.getContentsForDraftExistsAlert.bind(this); this.getContentsForUpdatedAlert = this.getContentsForUpdatedAlert.bind(this); this.onClickResolveConflict = this.onClickResolveConflict.bind(this); } refreshPage() { window.location.reload(); } onClickResolveConflict() { this.props.pageContainer.setState({ isConflictDiffModalOpen: true, }); } getContentsForSomeoneEditingAlert() { const { t } = this.props; return [ ['bg-success', 'd-hackmd-none'], <> {t('hackmd.someone_editing')} , Open HackMD Editor , ]; } getContentsForDraftExistsAlert(isRealtime) { const { t } = this.props; return [ ['bg-success', 'd-hackmd-none'], <> {t('hackmd.this_page_has_draft')} , Open HackMD Editor , ]; } getContentsForUpdatedAlert() { const { t } = this.props; // const pageEditor = appContainer.getComponentInstance('PageEditor'); const isConflictOnEdit = false; // if (pageEditor != null) { // const markdownOnEdit = pageEditor.getMarkdown(); // isConflictOnEdit = markdownOnEdit !== pageContainer.state.markdown; // } // TODO: re-impl with Next.js way // const usernameComponentToString = ReactDOMServer.renderToString(); // const label1 = isConflictOnEdit // ? t('modal_resolve_conflict.file_conflicting_with_newer_remote') // // eslint-disable-next-line react/no-danger // : ; const label1 = '(TBD -- 2022.09.13)'; return [ ['bg-warning'], <> {label1} , <> { isConflictOnEdit && ( )} , ]; } render() { const { revisionId, revisionIdHackmdSynced, remoteRevisionId, hasDraftOnHackmd, isHackmdDraftUpdatingInRealtime, } = this.props.pageContainer.state; const isRevisionOutdated = revisionId !== remoteRevisionId; const isHackmdDocumentOutdated = revisionIdHackmdSynced !== remoteRevisionId; let getContentsFunc = null; // when remote revision is newer than both if (isHackmdDocumentOutdated && isRevisionOutdated) { getContentsFunc = this.getContentsForUpdatedAlert; } // when someone editing with HackMD else if (isHackmdDraftUpdatingInRealtime) { getContentsFunc = this.getContentsForSomeoneEditingAlert; } // when the draft of HackMD is newest else if (hasDraftOnHackmd) { getContentsFunc = this.getContentsForDraftExistsAlert; } // do not render anything else { return null; } const [additionalClasses, label, btn] = getContentsFunc(); return (

{label}

{btn}

); } } PageStatusAlert.propTypes = { t: PropTypes.func.isRequired, // i18next // appContainer: PropTypes.instanceOf(AppContainer).isRequired, // pageContainer: PropTypes.instanceOf(PageContainer).isRequired, }; const PageStatusAlertWrapperFC = (props) => { const { t } = useTranslation(); return ; }; export default PageStatusAlertWrapperFC;