import React, { useCallback } from 'react'; import PropTypes from 'prop-types'; import { useTranslation } from 'react-i18next'; import { UncontrolledTooltip } from 'reactstrap'; import AppContainer from '~/client/services/AppContainer'; import { EditorMode, useIsDeviceSmallerThanMd } from '~/stores/ui'; import { withUnstatedContainers } from '../UnstatedUtils'; /* eslint-disable react/prop-types */ const PageEditorModeButtonWrapper = React.memo(({ editorMode, isBtnDisabled, onClick, targetMode, icon, label, id, }) => { const classNames = [`btn btn-outline-primary ${targetMode}-button px-1`]; if (editorMode === targetMode) { classNames.push('active'); } if (isBtnDisabled) { classNames.push('disabled'); } return ( ); }); /* eslint-enable react/prop-types */ function PageEditorModeManager(props) { const { appContainer, editorMode, onPageEditorModeButtonClicked, isBtnDisabled, } = props; const { t } = useTranslation(); const { data: isDeviceSmallerThanMd } = useIsDeviceSmallerThanMd(); const isAdmin = appContainer.isAdmin; const isHackmdEnabled = appContainer.config.env.HACKMD_URI != null; const showHackmdBtn = isHackmdEnabled || isAdmin; const pageEditorModeButtonClickedHandler = useCallback((viewType) => { if (isBtnDisabled) { return; } if (onPageEditorModeButtonClicked != null) { onPageEditorModeButtonClicked(viewType); } }, [isBtnDisabled, onPageEditorModeButtonClicked]); return ( <>
{(!isDeviceSmallerThanMd || editorMode !== EditorMode.View) && ( } label={t('view')} /> )} {(!isDeviceSmallerThanMd || editorMode === EditorMode.View) && ( } label={t('Edit')} /> )} {(!isDeviceSmallerThanMd || editorMode === EditorMode.View) && showHackmdBtn && ( <> } label={t('hackmd.hack_md')} id="grw-page-editor-mode-manager-hackmd-button" /> { !isHackmdEnabled && ( {t('hackmd.not_set_up')} )} )}
{isBtnDisabled && ( {t('Not available for guest')} )} ); } PageEditorModeManager.propTypes = { appContainer: PropTypes.instanceOf(AppContainer).isRequired, onPageEditorModeButtonClicked: PropTypes.func, isBtnDisabled: PropTypes.bool, editorMode: PropTypes.string, }; PageEditorModeManager.defaultProps = { isBtnDisabled: false, }; /** * Wrapper component for using unstated */ const PageEditorModeManagerWrapper = withUnstatedContainers(PageEditorModeManager, [AppContainer]); export default PageEditorModeManagerWrapper;