Toggle MySQL fields visibility by enabled/mode selection

Hide all MySQL fields when MySQL is disabled. When enabled, show
databases input only for mode=select and exclude input only for
mode=all.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
shuki
2026-03-06 02:54:11 +02:00
parent e6aa828111
commit fa01f1c3ea

View File

@@ -59,31 +59,51 @@ class TargetEditScreen(Screen):
value=target.mysql_enabled, value=target.mysql_enabled,
id="te-mysql-enabled", id="te-mysql-enabled",
) )
yield Static("MySQL Mode:") yield Static("MySQL Mode:", classes="mysql-field")
yield Select( yield Select(
[("All databases", "all"), ("Select databases", "select")], [("All databases", "all"), ("Select databases", "select")],
value=target.mysql_mode, value=target.mysql_mode,
id="te-mysql-mode", id="te-mysql-mode",
classes="mysql-field",
) )
yield Static("Databases (comma-separated, when mode=select):") yield Static("Databases (comma-separated):", classes="mysql-field mysql-select-field")
yield Input(value=target.mysql_databases, placeholder="db1,db2", id="te-mysql-databases") yield Input(value=target.mysql_databases, placeholder="db1,db2", id="te-mysql-databases", classes="mysql-field mysql-select-field")
yield Static("Exclude databases (comma-separated, when mode=all):") yield Static("Exclude databases (comma-separated):", classes="mysql-field mysql-all-field")
yield Input(value=target.mysql_exclude, placeholder="test_db,dev_db", id="te-mysql-exclude") yield Input(value=target.mysql_exclude, placeholder="test_db,dev_db", id="te-mysql-exclude", classes="mysql-field mysql-all-field")
yield Static("MySQL User:") yield Static("MySQL User:", classes="mysql-field")
yield Input(value=target.mysql_user, placeholder="Leave empty for socket/~/.my.cnf auth", id="te-mysql-user") yield Input(value=target.mysql_user, placeholder="Leave empty for socket/~/.my.cnf auth", id="te-mysql-user", classes="mysql-field")
yield Static("MySQL Password:") yield Static("MySQL Password:", classes="mysql-field")
yield Input(value=target.mysql_password, placeholder="Leave empty for socket/~/.my.cnf auth", password=True, id="te-mysql-password") yield Input(value=target.mysql_password, placeholder="Leave empty for socket/~/.my.cnf auth", password=True, id="te-mysql-password", classes="mysql-field")
yield Static("MySQL Host:") yield Static("MySQL Host:", classes="mysql-field")
yield Input(value=target.mysql_host, placeholder="localhost", id="te-mysql-host") yield Input(value=target.mysql_host, placeholder="localhost", id="te-mysql-host", classes="mysql-field")
yield Static("MySQL Port:") yield Static("MySQL Port:", classes="mysql-field")
yield Input(value=target.mysql_port, placeholder="3306", id="te-mysql-port") yield Input(value=target.mysql_port, placeholder="3306", id="te-mysql-port", classes="mysql-field")
yield Static("MySQL Extra Options:") yield Static("MySQL Extra Options:", classes="mysql-field")
yield Input(value=target.mysql_extra_opts, placeholder="--single-transaction --routines --triggers", id="te-mysql-extra-opts") yield Input(value=target.mysql_extra_opts, placeholder="--single-transaction --routines --triggers", id="te-mysql-extra-opts", classes="mysql-field")
with Horizontal(id="te-buttons"): with Horizontal(id="te-buttons"):
yield Button("Save", variant="primary", id="btn-save") yield Button("Save", variant="primary", id="btn-save")
yield Button("Cancel", id="btn-cancel") yield Button("Cancel", id="btn-cancel")
yield Footer() yield Footer()
def on_mount(self) -> None:
self._update_mysql_visibility()
def on_select_changed(self, event: Select.Changed) -> None:
if event.select.id in ("te-mysql-enabled", "te-mysql-mode"):
self._update_mysql_visibility()
def _update_mysql_visibility(self) -> None:
enabled = str(self.query_one("#te-mysql-enabled", Select).value)
is_enabled = enabled == "yes"
for w in self.query(".mysql-field"):
w.display = is_enabled
if is_enabled:
mode = str(self.query_one("#te-mysql-mode", Select).value)
for w in self.query(".mysql-select-field"):
w.display = mode == "select"
for w in self.query(".mysql-all-field"):
w.display = mode == "all"
def on_button_pressed(self, event: Button.Pressed) -> None: def on_button_pressed(self, event: Button.Pressed) -> None:
if event.button.id == "btn-cancel": if event.button.id == "btn-cancel":
self.dismiss(None) self.dismiss(None)