diff --git a/src/components/NotePage/NoteDetail/NoteDetail.tsx b/src/components/NotePage/NoteDetail/NoteDetail.tsx index 8da3c400a8..576528db81 100644 --- a/src/components/NotePage/NoteDetail/NoteDetail.tsx +++ b/src/components/NotePage/NoteDetail/NoteDetail.tsx @@ -14,7 +14,6 @@ import { import ToolbarIconButton from '../../atoms/ToolbarIconButton' import Toolbar from '../../atoms/Toolbar' import ToolbarSeparator from '../../atoms/ToolbarSeparator' -import { GeneralNoteEditModeOptions } from '../../../lib/generalStatus' import { secondaryBackgroundColor, textColor, @@ -97,8 +96,10 @@ type NoteDetailProps = { ) => Promise trashNote: (storageId: string, noteId: string) => Promise removeNote: (storageId: string, noteId: string) => Promise - editMode: GeneralNoteEditModeOptions - selectEditMode: (editMode: GeneralNoteEditModeOptions) => void + splitMode: boolean + previewMode: boolean + toggleSplitMode: () => void + togglePreviewMode: () => void } type NoteDetailState = { @@ -286,7 +287,13 @@ export default class NoteDetail extends React.Component< } render() { - const { note, editMode, selectEditMode } = this.props + const { + note, + splitMode, + previewMode, + toggleSplitMode, + togglePreviewMode + } = this.props const codeEditor = (
- {editMode === 'edit' ? ( - codeEditor - ) : editMode === 'split' ? ( + {previewMode ? ( + markdownPreviewer + ) : splitMode ? ( <>
{codeEditor}
{markdownPreviewer}
) : ( - markdownPreviewer + codeEditor )}
@@ -340,16 +347,15 @@ export default class NoteDetail extends React.Component< onKeyDown={this.handleNewTagNameInputKeyDown} /> + {}} path={mdiFormatText} /> selectEditMode('edit')} - path={mdiFormatText} - /> - selectEditMode('split')} + className={splitMode ? 'active' : ''} + onClick={toggleSplitMode} path={mdiArrowSplitVertical} /> selectEditMode('preview')} + className={previewMode ? 'active' : ''} + onClick={togglePreviewMode} path={mdiEyeOutline} /> diff --git a/src/components/NotePage/NotePage.tsx b/src/components/NotePage/NotePage.tsx index 13a82fb545..6a200a9fff 100644 --- a/src/components/NotePage/NotePage.tsx +++ b/src/components/NotePage/NotePage.tsx @@ -132,14 +132,17 @@ export default () => { [setGeneralStatus] ) - const selectEditMode = useCallback( - (editMode: 'edit' | 'split' | 'preview') => { - setGeneralStatus({ - noteEditMode: editMode - }) - }, - [setGeneralStatus] - ) + const toggleSplitMode = useCallback(() => { + setGeneralStatus(prevState => ({ + noteSplitMode: !prevState.noteSplitMode + })) + }, [setGeneralStatus]) + + const togglePreviewMode = useCallback(() => { + setGeneralStatus(prevState => ({ + notePreviewMode: !prevState.notePreviewMode + })) + }, [setGeneralStatus]) return storageId != null ? ( { updateNote={db.updateNote} trashNote={db.trashNote} removeNote={removeNote} - editMode={generalStatus.noteEditMode} - selectEditMode={selectEditMode} + splitMode={generalStatus.noteSplitMode} + previewMode={generalStatus.notePreviewMode} + toggleSplitMode={toggleSplitMode} + togglePreviewMode={togglePreviewMode} /> ) } diff --git a/src/components/atoms/ToolbarIconButton.tsx b/src/components/atoms/ToolbarIconButton.tsx index 85269585f7..2d6ed7154f 100644 --- a/src/components/atoms/ToolbarIconButton.tsx +++ b/src/components/atoms/ToolbarIconButton.tsx @@ -23,15 +23,17 @@ const StyledButton = styled.button<{ active: boolean }>` interface ToolbarButtonProps { active?: boolean path: string + className?: string onClick: React.MouseEventHandler } const ToolbarButton = ({ path, onClick, - active = false + active = false, + className }: ToolbarButtonProps) => ( - + ) diff --git a/src/lib/generalStatus/store.ts b/src/lib/generalStatus/store.ts index e55f64c15d..5e9b5fbbc7 100644 --- a/src/lib/generalStatus/store.ts +++ b/src/lib/generalStatus/store.ts @@ -26,7 +26,8 @@ const initialGeneralStatus = loadGeneralStatus() const baseGeneralStatus: GeneralStatus = { sideBarWidth: 160, noteListWidth: 250, - noteEditMode: 'split' + noteSplitMode: true, + notePreviewMode: false } function useGeneralStatusStore() { diff --git a/src/lib/generalStatus/types.ts b/src/lib/generalStatus/types.ts index c1bc5075fb..3927b02b70 100644 --- a/src/lib/generalStatus/types.ts +++ b/src/lib/generalStatus/types.ts @@ -1,7 +1,6 @@ -export type GeneralNoteEditModeOptions = 'preview' | 'split' | 'edit' - export interface GeneralStatus { sideBarWidth: number noteListWidth: number - noteEditMode: GeneralNoteEditModeOptions + noteSplitMode: boolean + notePreviewMode: boolean } diff --git a/src/lib/styled/styleFunctions.ts b/src/lib/styled/styleFunctions.ts index 23ae3d9261..0d217bee05 100644 --- a/src/lib/styled/styleFunctions.ts +++ b/src/lib/styled/styleFunctions.ts @@ -15,10 +15,12 @@ export const activeBackgroundColor = ({ theme }: StyledProps) => export const iconColor = ({ theme }: StyledProps) => `color: ${theme.iconColor}; &:hover, -&:focus, +&:focus { + color: ${theme.activeIconColor}; +} &:active, &.active { - color: ${theme.activeIconColor}; + color: ${theme.primaryColor}; }` export const textColor = ({ theme }: StyledProps) =>