Hello. I have a question regarding the HyperFormula plugin.
I am unable to make ‘redo’ work in my table. After 3h of digging (
) I think I found out where it all goes wrong, so I wanted to ask you:
Why is it that everytime I make a change to my table (and by change I mean I manually change a value inside one of the cells), this method ‘setCellContents
’ from ‘CrudOperations.ts
’ clears the redo stack?
This is the reason I always have an error when I want to redo something in my table:
Yeah… i imagine there is no operation to redo because the redoStack has just been emptied… 
I know it’s difficult to understand exactly what is happening, I have no real way to replicate in a jsfiddle my entire behaviour, I have tried, but I really just wanted to understand the reasoning behind the clearRedoStack()
inside the setCellContents
, or when is it specifically that the setCellContents
method is called? Because maybe it’s an error of my side in how I am using the table.
I want to mention a few other things, maybe it matters:
- undo works very well, so it’s just a redo problem
- in my other HoT tables that do not have formulas, undo and redo work perfectly fine, so it’s just the one with the formulas that is creating this issue.
- i have defined my formulas engine like this:
Thank you!
Hi @vitorialipan
Thank you for detailed report. I tried to recreate this issue, but I’m not able to. Can you please tell me which version of Handsontable you use? I saw that we were fixing an issue related to undo/redo some time ago.
Hello,
Thank you for your reply!
Yes, I also tried to recreate it in a jsfiddle but I was unable to… :’)
Currently I am working with Handsontable version 13.1.0.
Thank you. So, the fix I mentioned was introduced in v. 12.4.0 so apparently, that’s not the case here.
However, without a replicable example it would be not possible to determine what causes this issue.
I can only ask our HyperFormula developer about this method and reason why the stack is cleared there. I’ll get back to you when I have more info on this.
Hi @vitorialipan
This is the explanation of the whole undo/redo operation process I got from our HyperFormula developer.
The redo() method is a way to "undo the last undo operation" . So calling redo() makes sense only immediately after an undo operation . When you trigger any data modification operation after the undo operation , the redo stack is reset, because it’s not clear which operation should be re-done.The redo() method is useful in such scenarios:
- Do some read and write operations
- Call undo() a few times
- (optionally) Do some read operations
- Call redo() to "undo the last undo operation "
The redo() method is not useful in such scenarios:
- Do some read and write operations
- Call undo() a few times
- Do some write operations
- Call redo() <- it’s not clear what should be re-done in this situation
Thank you!
I have created a custom redo function, as there is no other solution right now.
I have not been able to recreate this, so until I do, you can close this topic.
Thank you so much!
Have a great day!
Thank you for the update, if you find other solution feel free to share it here 