-
Notifications
You must be signed in to change notification settings - Fork 3
Open
Description
At the moment there is no way to pass command context which could be necessary for such a command like attachment to pass Promise to the command.
Current implementation: commandController.executeCommand('myCommandName');
1st Idea
The idea: commandController.executeCommand('myCommandName', commandContext);
To implement such functionality it is necessary
- update the command type
ICommandmake it generic something likeICommand<CommandContext> - update CommandController so the instance could understand
ICommandgeneric type
const commandWithoutContext: ICommand = {...};
const commandWithContext: ICommand<number> = {...};
const { ref, commandController } = useTextAreaMarkdownEditor({
commandMap: {
commandName1: commandWithoutContext,
commandName2: commandWithContext,
},
});
commandController.executeCommand('commandName1'); // No error
commandController.executeCommand('commandName1', 42); // Error: only 1 argument expected
commandController.executeCommand('commandName2'); // Error: only 2 arguments expected
commandController.executeCommand('commandName2', 42); // No error2nd Idea
Current API can be changed this way:
class CommandWithoutContext extends BaseCommand {...};
class CommandWithContext extends BaseCommand<number> {...};
const { ref, commands {
commandName1,
commandName2,
}} = useTextAreaMarkdownEditor({
commandMap: {
commandName1: CommandWithoutContext,
commandName2: CommandWithContext,
},
});
commandName1(); // No error
commandName1(42); // Error: 0 arguments expected
commandName2(); // Error: 1 argument expected
commandName2(42); // No errorSuch changes require complex types inference logic wich I didn't implement at the moment.
If anyone has code examples of such type inference logic please share them here. Any idea will be highly appreciated.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels