main

mattermost/focalboard

Last updated at: 29/12/2023 09:48

undoRedoHotKeys.tsx

TLDR

This file contains a React component called UndoRedoHotKeys that adds hotkey functionality to perform undo and redo actions. It uses the react-hotkeys-hook and react-intl libraries for handling the hotkeys and internationalization respectively.

Methods

This file does not contain any methods.

Classes

This file does not contain any classes.

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {useHotkeys} from 'react-hotkeys-hook'
import {useIntl} from 'react-intl'

import {sendFlashMessage} from '../../components/flashMessages'
import mutator from '../../mutator'
import {Utils} from '../../utils'

const UndoRedoHotKeys = (): null => {
    const intl = useIntl()

    useHotkeys('ctrl+z,cmd+z', () => {
        Utils.log('Undo')
        if (mutator.canUndo) {
            const description = mutator.undoDescription
            mutator.undo().then(() => {
                if (description) {
                    sendFlashMessage({
                        content: intl.formatMessage({id: 'UndoRedoHotKeys.canUndo-with-description', defaultMessage: 'Undo {description}'}, {description}),
                        severity: 'low',
                    })
                } else {
                    sendFlashMessage({
                        content: intl.formatMessage({id: 'UndoRedoHotKeys.canUndo', defaultMessage: 'Undo'}),
                        severity: 'low'})
                }
            })
        } else {
            sendFlashMessage({
                content: intl.formatMessage({id: 'UndoRedoHotKeys.cannotUndo', defaultMessage: 'Nothing to Undo'}),
                severity: 'low',
            })
        }
    })

    useHotkeys('shift+ctrl+z,shift+cmd+z', () => {
        Utils.log('Redo')
        if (mutator.canRedo) {
            const description = mutator.redoDescription
            mutator.redo().then(() => {
                if (description) {
                    sendFlashMessage({
                        content: intl.formatMessage({id: 'UndoRedoHotKeys.canRedo-with-description', defaultMessage: 'Redo {description}'}, {description}),
                        severity: 'low',
                    })
                } else {
                    sendFlashMessage({
                        content: intl.formatMessage({id: 'UndoRedoHotKeys.canRedo', defaultMessage: 'Redo'}),
                        severity: 'low',
                    })
                }
            })
        } else {
            sendFlashMessage({
                content: intl.formatMessage({id: 'UndoRedoHotKeys.cannotRedo', defaultMessage: 'Nothing to Redo'}),
                severity: 'low',
            })
        }
    })
    return null
}

export default UndoRedoHotKeys