Commit 9a8ee688 authored by Yakubov, Sergey's avatar Yakubov, Sergey
Browse files

trame binding: run callback only if model changed

parent e31e330f
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -178,22 +178,25 @@ class StateConnection:

                @self.state.change(state_variable_name)
                def update_viewmodel_callback(**kwargs: dict) -> None:
                    success = True
                    updated = True
                    if self.viewmodel_linked_object and issubclass(type(self.viewmodel_linked_object), BaseModel):
                        json_str = json.dumps(kwargs[state_variable_name])
                        try:
                            model = self.viewmodel_linked_object.model_validate_json(json_str)
                            if model != self.viewmodel_linked_object:
                                for field, value in model:
                                    setattr(self.viewmodel_linked_object, field, value)
                            else:
                                updated = False
                        except Exception:
                            success = False
                            updated = False
                    elif isinstance(self.viewmodel_linked_object, dict):
                        self.viewmodel_linked_object.update(kwargs[state_variable_name])
                    elif is_callable(self.viewmodel_linked_object):
                        cast(Callable, self.viewmodel_linked_object)(kwargs[state_variable_name])
                    else:
                        raise Exception("cannot update", self.viewmodel_linked_object)
                    if self.viewmodel_callback_after_update and success:
                    if self.viewmodel_callback_after_update and updated:
                        self.viewmodel_callback_after_update(state_variable_name)

    def update_in_view(self, value: Any) -> None: