import { useState } from 'react'; import KeymapService from '@joplin/lib/services/KeymapService'; const keymapService = KeymapService.instance(); interface CommandStatus { [commandName: string]: boolean; } const useCommandStatus = (): [CommandStatus, (commandName: string)=> void, (commandName: string)=> void] => { const [status, setStatus] = useState(() => keymapService.getCommandNames().reduce((accumulator: CommandStatus, command: string) => { accumulator[command] = false; return accumulator; }, {}) ); const disableStatus = (commandName: string) => setStatus(prevStatus => ({ ...prevStatus, [commandName]: false })); const enableStatus = (commandName: string) => setStatus(prevStatus => { // Falsify all the commands; Only one command should be truthy at any given time const newStatus = Object.keys(prevStatus).reduce((accumulator: CommandStatus, command: string) => { accumulator[command] = false; return accumulator; }, {}); // Make the appropriate command truthful newStatus[commandName] = true; return newStatus; }); return [status, enableStatus, disableStatus]; }; export default useCommandStatus;