2020-09-06 14:00:25 +02:00
|
|
|
import { useState } from 'react';
|
2020-11-07 17:59:37 +02:00
|
|
|
import KeymapService from '@joplin/lib/services/KeymapService';
|
2020-09-06 14:00:25 +02:00
|
|
|
|
|
|
|
const keymapService = KeymapService.instance();
|
|
|
|
|
|
|
|
interface CommandStatus {
|
|
|
|
[commandName: string]: boolean
|
|
|
|
}
|
|
|
|
|
2020-11-12 21:13:28 +02:00
|
|
|
const useCommandStatus = (): [CommandStatus, (commandName: string)=> void, (commandName: string)=> void] => {
|
2020-09-06 14:00:25 +02:00
|
|
|
const [status, setStatus] = useState<CommandStatus>(() =>
|
|
|
|
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;
|