Verified Commit 14b10619 authored by Jakob Moser's avatar Jakob Moser
Browse files

Add genericity to ModalForm, generalize result to hook

The result is now not autogenerated anymore, because the implementers have too much variance in what they want to return
parent a21d3fec
Loading
Loading
Loading
Loading
+4 −10
Changes for poolpay/admin/ModalForm.py: 4 added lines, 10 removed lines.
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):
class ModalForm[T](ModalScreen[T]):
    BINDINGS = [
        ("escape", "app.pop_screen", "Abbrechen"),
    ]

    @property
    def _form_inputs(self) -> Sequence[Input]:  # TODO Make this abstract
    def _result(self) -> T:
        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()
            self.dismiss(self._result)

    def _focus_next_invalid_field(self) -> bool:
        for field in self._form_inputs:
        for field in self.query(Input):
            if not field.is_valid or field.value == "":
                field.focus()
                return True