Open Webbrother opened 1 year ago
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.
attachment
Promise
Current implementation: commandController.executeCommand('myCommandName');
commandController.executeCommand('myCommandName');
The idea: commandController.executeCommand('myCommandName', commandContext);
commandController.executeCommand('myCommandName', commandContext);
To implement such functionality it is necessary
ICommand
ICommand<CommandContext>
update CommandController so the instance could understand ICommand generic 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 error
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 error
Such 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.
Play with idea 1
Play with idea 2
Patterns that probably can be used
At the moment there is no way to pass command context which could be necessary for such a command like
attachment
to passPromise
to the command.Current implementation:
commandController.executeCommand('myCommandName');
1st Idea
The idea:
commandController.executeCommand('myCommandName', commandContext);
To implement such functionality it is necessary
ICommand
make it generic something likeICommand<CommandContext>
update CommandController so the instance could understand
ICommand
generic type2nd Idea
Current API can be changed this way:
Such 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.