import React, { type ReactNode, useCallback } from 'react'; import { useTranslation } from 'next-i18next'; import { EditorMode, useIsDeviceSmallerThanMd } from '~/stores/ui'; import styles from './PageEditorModeManager.module.scss'; type PageEditorModeButtonProps = { currentEditorMode: EditorMode, editorMode: EditorMode, icon: ReactNode, label: ReactNode, isBtnDisabled?: boolean, onClick?: (mode: EditorMode) => void, } const PageEditorModeButton = React.memo((props: PageEditorModeButtonProps) => { const { currentEditorMode, isBtnDisabled, editorMode, icon, label, onClick, } = props; const classNames = ['btn btn-outline-primary px-1']; if (currentEditorMode === editorMode) { classNames.push('active'); } if (isBtnDisabled) { classNames.push('disabled'); } return ( ); }); type Props = { editorMode: EditorMode | undefined, onPageEditorModeButtonClicked?: (editorMode: EditorMode) => void, isBtnDisabled?: boolean, } export const PageEditorModeManager = (props: Props): JSX.Element => { const { editorMode = EditorMode.View, isBtnDisabled, onPageEditorModeButtonClicked, } = props; const { t } = useTranslation(); const { data: isDeviceSmallerThanMd } = useIsDeviceSmallerThanMd(); const pageEditorModeButtonClickedHandler = useCallback((viewType) => { if (isBtnDisabled ?? false) { return; } if (onPageEditorModeButtonClicked != null) { onPageEditorModeButtonClicked(viewType); } }, [isBtnDisabled, onPageEditorModeButtonClicked]); return ( <>