Issue #1881Opened March 12, 2019by lucasschirm0 reactions

Commands with a stop method, never programmatically stoped don`t run again!

Question

Code SnippetTEXT
# Problem

When you add a custom command with stop and don`t stop will not run again if I don`t set force: 1 as a parameter when running.

When you add a custom command with a stop method like:

var fired = 0;
editor.Commands.add('custom-command', {
   run() {
      fired++;
      console.log("fired ", fired);
   },
   stop() {
      console.log("Command stoped");
   }
});

and if never run stop, the run method will never fired again.

editor.Commands.run('custom-command');
editor.Commands.run('custom-command');
editor.Commands.stop('custom-command');
editor.Commands.run('custom-command');

should print

fired 1
fired 2
stoped
fired 3

Other solution would add a property to Command Collection to be like:

editor.Commands.add('custom-command', {
   runType: 'always' || 'after-stop' || 'after-stop-or-force',
   run() {
      fired++;
      console.log("fired ", fired);
   },
   stop() {
      console.log("Command stoped");
   }
});


# GrapeJS Fiddle

https://jsfiddle.net/lucasschirm/85juepgs/5/

# How to replicate

 - Create a new command with a stop function
 - add a listener to modal:open to run it
 - add a listener to modal:close to stop it
 - add a listener on component:toggled to open a modal

## What happens is:
 - (click on any block) Command runs
 - Modal Opens
 - (close the modal) don`t fire modal:close
 - (click outside of the block) Modal Opens

## What should be happening and previous version behaviour:

 - (click on any block) Command Runs
 - Modal Opens
 - (close the modal) don`t fire modal:close
 - (click outside of the block) Command runs
 - Modal Opens

Answers (3)

artfMarch 22, 20190 reactions

Hi @lucasschirm and thanks for the report. As you've might notice this is the breaking change we've introduced in the latest version https://github.com/artf/grapesjs/releases/tag/v0.14.55 The reason behind it is quite simple. If you create a command with start and stop command you explicitly declare it as stateful one, so you activate it on start and disable it on stop. When the command is active (you can get all currently active commands with editor.Commands.getActive()) it doesn't make sense running its activation instructions again (this prevents also weird issues you might face by running this instructions multiple times) and the same is once the command is disabled. Apart from that you can always force it with force option so I don't see it as a problem. One thing I can think about to add (just to keep it behave like the previous version, but I don't suggest it, because probably you're creating your command not properly) is some kind of a global option, eg:

grapesjs.init({
	...,
	commands: {
		strict: false, // by default is true
	},
})
lucasschirmMarch 22, 20190 reactions

Thank you, I've sended an PR about the modal closing not firing the modal I close trigger.

On Thu, Mar 21, 2019, 3:14 PM Artur Arseniev [email protected] wrote:

Hi @lucasschirm https://github.com/lucasschirm and thanks for the report. As you've might notice this is the breaking change we've introduced in the latest version https://github.com/artf/grapesjs/releases/tag/v0.14.55 The reason behind it is quite simple. If you create a command with start and stop command you explicitly declare it as stateful one, so you activate it on start and disable it on stop. When the command is active (you can get all currently active commands with editor.Commands.getActive()) it doesn't make sense running its activation instructions again (this prevents also weird issues you might face by running this instructions multiple times) and the same is once the command is disabled. Apart from that you can always force it with force option so I don't see it as a problem. One thing I can think about to add (just to keep it behave like the previous version, but I don't suggest it, because probably you're creating your command not properly) is some kind of a global option, eg:

grapesjs.init({ ..., commands: { strict: false, // by default is true }, })

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/artf/grapesjs/issues/1881#issuecomment-475423347, or mute the thread https://github.com/notifications/unsubscribe-auth/AFFgEmhHBOjwigByVdovuV-iEwj4FrWTks5vZAQ1gaJpZM4bp2N8 .

lock[bot]March 21, 20200 reactions

This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

Related Questions and Answers

Continue research with similar issue discussions.

Paid Plugins That Match This Issue

Curated by issue keywords and label relevance to help you ship faster.

View all plugins

Loading paid plugin recommendations...

Browse Plugin Categories

Jump directly to plugin category pages on the marketplace.