Loading poolpay/admin/AddPerson.py +3 −26 Original line number Diff line number Diff line Loading @@ -2,16 +2,13 @@ from collections.abc import Sequence from textual.app import ComposeResult from textual.containers import Container, Grid, VerticalGroup from textual.screen import ModalScreen from textual.validation import Length from textual.widgets import Button, Footer, Input, Label, MaskedInput from poolpay.admin.ModalForm import ModalForm class AddPerson(ModalScreen): BINDINGS = [ ("escape", "app.pop_screen", "Abbrechen"), ] class AddPerson(ModalForm): def compose(self) -> ComposeResult: with VerticalGroup(): with Grid(): Loading Loading @@ -41,27 +38,10 @@ class AddPerson(ModalScreen): yield Footer() @property def _person_inputs(self) -> Sequence[Input]: def _form_inputs(self) -> Sequence[Input]: selectors = ("#name", "#cl_account_name", "#card_id") return tuple(self.query_one(s, Input) for s in selectors) def _close(self) -> None: person_details = tuple(i.value for i in self._person_inputs) self.dismiss(person_details) def _close_if_complete(self) -> None: invalid_field_found = self._focus_next_invalid_field() if not invalid_field_found: self._close() def _focus_next_invalid_field(self) -> bool: for field in self._person_inputs: if not field.is_valid or field.value == "": field.focus() return True return False def on_button_pressed(self, event: Button.Pressed) -> None: match event.button.id: case "add_person": Loading @@ -71,6 +51,3 @@ class AddPerson(ModalScreen): match event.input.id: case "cl_account_name": event.input.placeholder = "holner" if event.input.value == "" else "" def on_input_submitted(self, event: Input.Submitted) -> None: self._close_if_complete() poolpay/admin/ModalForm.py 0 → 100644 +34 −0 Original line number Diff line number Diff line from collections.abc import Sequence from textual.screen import ModalScreen from textual.widgets import Input class ModalForm(ModalScreen): BINDINGS = [ ("escape", "app.pop_screen", "Abbrechen"), ] @property def _form_inputs(self) -> Sequence[Input]: # TODO Make this abstract raise NotImplementedError() def _close(self) -> None: form_values = tuple(i.value for i in self._form_inputs) self.dismiss(form_values) def on_input_submitted(self, event: Input.Submitted) -> None: self._close_if_complete() def _close_if_complete(self) -> None: invalid_field_found = self._focus_next_invalid_field() if not invalid_field_found: self._close() def _focus_next_invalid_field(self) -> bool: for field in self._form_inputs: if not field.is_valid or field.value == "": field.focus() return True return False Loading
poolpay/admin/AddPerson.py +3 −26 Original line number Diff line number Diff line Loading @@ -2,16 +2,13 @@ from collections.abc import Sequence from textual.app import ComposeResult from textual.containers import Container, Grid, VerticalGroup from textual.screen import ModalScreen from textual.validation import Length from textual.widgets import Button, Footer, Input, Label, MaskedInput from poolpay.admin.ModalForm import ModalForm class AddPerson(ModalScreen): BINDINGS = [ ("escape", "app.pop_screen", "Abbrechen"), ] class AddPerson(ModalForm): def compose(self) -> ComposeResult: with VerticalGroup(): with Grid(): Loading Loading @@ -41,27 +38,10 @@ class AddPerson(ModalScreen): yield Footer() @property def _person_inputs(self) -> Sequence[Input]: def _form_inputs(self) -> Sequence[Input]: selectors = ("#name", "#cl_account_name", "#card_id") return tuple(self.query_one(s, Input) for s in selectors) def _close(self) -> None: person_details = tuple(i.value for i in self._person_inputs) self.dismiss(person_details) def _close_if_complete(self) -> None: invalid_field_found = self._focus_next_invalid_field() if not invalid_field_found: self._close() def _focus_next_invalid_field(self) -> bool: for field in self._person_inputs: if not field.is_valid or field.value == "": field.focus() return True return False def on_button_pressed(self, event: Button.Pressed) -> None: match event.button.id: case "add_person": Loading @@ -71,6 +51,3 @@ class AddPerson(ModalScreen): match event.input.id: case "cl_account_name": event.input.placeholder = "holner" if event.input.value == "" else "" def on_input_submitted(self, event: Input.Submitted) -> None: self._close_if_complete()
poolpay/admin/ModalForm.py 0 → 100644 +34 −0 Original line number Diff line number Diff line from collections.abc import Sequence from textual.screen import ModalScreen from textual.widgets import Input class ModalForm(ModalScreen): BINDINGS = [ ("escape", "app.pop_screen", "Abbrechen"), ] @property def _form_inputs(self) -> Sequence[Input]: # TODO Make this abstract raise NotImplementedError() def _close(self) -> None: form_values = tuple(i.value for i in self._form_inputs) self.dismiss(form_values) def on_input_submitted(self, event: Input.Submitted) -> None: self._close_if_complete() def _close_if_complete(self) -> None: invalid_field_found = self._focus_next_invalid_field() if not invalid_field_found: self._close() def _focus_next_invalid_field(self) -> bool: for field in self._form_inputs: if not field.is_valid or field.value == "": field.focus() return True return False