Skip to content

Commit b39e904

Browse files
introduce ValueChangeEventArguments.previous_value
1 parent a366de0 commit b39e904

File tree

5 files changed

+22
-6
lines changed

5 files changed

+22
-6
lines changed

nicegui/elements/mixins/selectable_element.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,9 @@ def _handle_selection_change(self, selected: bool) -> None:
102102
103103
:param selected: The new selection state.
104104
"""
105+
previous_value = self._props.get('selected')
105106
self._props['selected'] = selected
106107
self.update()
107-
args = ValueChangeEventArguments(sender=self, client=self.client, value=self._props['selected'])
108+
args = ValueChangeEventArguments(sender=self, client=self.client, value=selected, previous_value=previous_value)
108109
for handler in self._selection_change_handlers:
109110
handle_event(handler, args)

nicegui/elements/mixins/value_element.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,13 @@ def set_value(self, value: Any) -> None:
108108
self.value = value
109109

110110
def _handle_value_change(self, value: Any) -> None:
111+
previous_value = self._props.get(self.VALUE_PROP)
111112
self._props[self.VALUE_PROP] = self._value_to_model_value(value)
112113
if self._send_update_on_value_change:
113114
self.update()
114-
args = ValueChangeEventArguments(sender=self, client=self.client, value=self._value_to_event_value(value))
115+
args = ValueChangeEventArguments(sender=self, client=self.client,
116+
value=self._value_to_event_value(value),
117+
previous_value=self._value_to_event_value(previous_value))
115118
for handler in self._change_handlers:
116119
handle_event(handler, args)
117120

nicegui/elements/table.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,11 @@ def handle_selection(e: GenericEventArguments) -> None:
9090
self.on('selection', handle_selection, ['added', 'rows', 'keys'])
9191

9292
def handle_pagination_change(e: GenericEventArguments) -> None:
93+
previous_value = self.pagination
9394
self.pagination = e.args
9495
self.update()
95-
arguments = ValueChangeEventArguments(sender=self, client=self.client, value=self.pagination)
96+
arguments = ValueChangeEventArguments(sender=self, client=self.client,
97+
value=self.pagination, previous_value=previous_value)
9698
for handler in self._pagination_change_handlers:
9799
handle_event(handler, arguments)
98100
self.on('update:pagination', handle_pagination_change)

nicegui/elements/tree.py

+12-3
Original file line numberDiff line numberDiff line change
@@ -62,21 +62,30 @@ def update_prop(name: str, value: Any) -> None:
6262
self.update()
6363

6464
def handle_selected(e: GenericEventArguments) -> None:
65+
previous_value = self._props.get('selected')
6566
update_prop('selected', e.args)
67+
args = ValueChangeEventArguments(sender=self, client=self.client,
68+
value=e.args, previous_value=previous_value)
6669
for handler in self._select_handlers:
67-
handle_event(handler, ValueChangeEventArguments(sender=self, client=self.client, value=e.args))
70+
handle_event(handler, args)
6871
self.on('update:selected', handle_selected)
6972

7073
def handle_expanded(e: GenericEventArguments) -> None:
74+
previous_value = self._props.get('expanded')
7175
update_prop('expanded', e.args)
76+
args = ValueChangeEventArguments(sender=self, client=self.client,
77+
value=e.args, previous_value=previous_value)
7278
for handler in self._expand_handlers:
73-
handle_event(handler, ValueChangeEventArguments(sender=self, client=self.client, value=e.args))
79+
handle_event(handler, args)
7480
self.on('update:expanded', handle_expanded)
7581

7682
def handle_ticked(e: GenericEventArguments) -> None:
83+
previous_value = self._props.get('ticked')
7784
update_prop('ticked', e.args)
85+
args = ValueChangeEventArguments(sender=self, client=self.client,
86+
value=e.args, previous_value=previous_value)
7887
for handler in self._tick_handlers:
79-
handle_event(handler, ValueChangeEventArguments(sender=self, client=self.client, value=e.args))
88+
handle_event(handler, args)
8089
self.on('update:ticked', handle_ticked)
8190

8291
def on_select(self, callback: Handler[ValueChangeEventArguments]) -> Self:

nicegui/events.py

+1
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ class MultiUploadEventArguments(UiEventArguments):
147147
@dataclass(**KWONLY_SLOTS)
148148
class ValueChangeEventArguments(UiEventArguments):
149149
value: Any
150+
previous_value: Any
150151

151152

152153
@dataclass(**KWONLY_SLOTS)

0 commit comments

Comments
 (0)