Working on undo redo

This commit is contained in:
Kodjo Sossouvi
2025-07-25 17:22:18 +02:00
parent fb82365980
commit 72f5f30da6
6 changed files with 86 additions and 34 deletions

View File

@@ -1,6 +1,23 @@
from components.BaseCommandManager import BaseCommandManager
from components.undo_redo.components.UndoRedo import CommandHistory
from components.workflows.constants import Routes, ROUTE_ROOT
class AddConnectorCommand(CommandHistory):
def __init__(self, owner, connector):
super().__init__("Add connector", "Add connector", owner)
self.connector = connector
def undo(self):
del self.owner.get_state().components[self.connector.id]
self.owner.get_db().save_state(self.owner.get_key(), self.owner.get_state()) # update db
return self.owner.refresh_designer(True)
def redo(self, oob=True):
self.owner.get_state().components[self.connector.id] = self.connector
self.owner.get_db().save_state(self.owner.get_key(), self.owner.get_state()) # update db
return self.owner.refresh_designer(oob)
class WorkflowsCommandManager(BaseCommandManager):
def __init__(self, owner):

View File

@@ -7,7 +7,7 @@ from fasthtml.xtend import Script
from assets.icons import icon_error
from components.BaseComponent import BaseComponent
from components.workflows.assets.icons import icon_play, icon_pause, icon_stop
from components.workflows.commands import WorkflowDesignerCommandManager
from components.workflows.commands import WorkflowDesignerCommandManager, AddConnectorCommand
from components.workflows.components.WorkflowPlayer import WorkflowPlayer
from components.workflows.constants import WORKFLOW_DESIGNER_INSTANCE_ID, ProcessorTypes
from components.workflows.db_management import WorkflowsDesignerSettings, WorkflowComponent, \
@@ -16,6 +16,7 @@ from components_helpers import apply_boundaries, mk_tooltip, mk_dialog_buttons,
from core.instance_manager import InstanceManager
from core.jira import JiraRequestTypes, DEFAULT_SEARCH_FIELDS
from core.utils import get_unique_id, make_safe_id
from utils.ComponentsInstancesHelper import ComponentsInstancesHelper
from utils.DbManagementHelper import DbManagementHelper
logger = logging.getLogger("WorkflowDesigner")
@@ -80,8 +81,17 @@ class WorkflowDesigner(BaseComponent):
def set_boundaries(self, boundaries: dict):
self._boundaries = boundaries
def refresh_designer(self):
return self._mk_elements()
def get_state(self):
return self._state
def get_db(self):
return self._db
def get_key(self):
return self._key
def refresh_designer(self, oob=False):
return self._mk_canvas(oob)
def refresh_properties(self, oob=False):
return self._mk_properties(oob)
@@ -102,9 +112,16 @@ class WorkflowDesigner(BaseComponent):
properties={"processor_name": PROCESSOR_TYPES[component_type][0]}
)
command = AddConnectorCommand(self, component)
undo_redo = ComponentsInstancesHelper.get_undo_redo(self._session)
#undo_redo.push(command)
self._state.components[component_id] = component
self._db.save_state(self._key, self._state) # update db
return self.refresh_designer()
undo_redo.snapshot("add_component")
return command.redo(), undo_redo.refresh()
# self._state.components[component_id] = component
# self._db.save_state(self._key, self._state) # update db
# return self.refresh_designer()
def move_component(self, component_id, x, y):
if component_id in self._state.components:

View File

@@ -5,6 +5,7 @@ from dataclasses import dataclass, field
from components.workflows.constants import WORKFLOWS_DB_ENTRY, WORKFLOW_DESIGNER_DB_ENTRY, \
WORKFLOW_DESIGNER_DB_SETTINGS_ENTRY, WORKFLOW_DESIGNER_DB_STATE_ENTRY
from core.settings_management import SettingsManager
from core.utils import make_safe_id
logger = logging.getLogger("WorkflowsSettings")
@@ -160,7 +161,7 @@ class WorkflowsDesignerDbManager:
@staticmethod
def _get_db_entry(key):
return f"{WORKFLOW_DESIGNER_DB_ENTRY}_{key}"
return make_safe_id(f"{WORKFLOW_DESIGNER_DB_ENTRY}_{key}")
def save_settings(self, key: str, settings: WorkflowsDesignerSettings):
self._settings_manager.put(self._session,