From fa01f1c3ea2bdcf0644b9bc52874d7b419bf4b9c Mon Sep 17 00:00:00 2001 From: shuki Date: Fri, 6 Mar 2026 02:54:11 +0200 Subject: [PATCH] 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 --- tui/screens/target_edit.py | 50 ++++++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/tui/screens/target_edit.py b/tui/screens/target_edit.py index 236fb0c..dee9068 100644 --- a/tui/screens/target_edit.py +++ b/tui/screens/target_edit.py @@ -59,31 +59,51 @@ class TargetEditScreen(Screen): value=target.mysql_enabled, id="te-mysql-enabled", ) - yield Static("MySQL Mode:") + yield Static("MySQL Mode:", classes="mysql-field") yield Select( [("All databases", "all"), ("Select databases", "select")], value=target.mysql_mode, id="te-mysql-mode", + classes="mysql-field", ) - yield Static("Databases (comma-separated, when mode=select):") - yield Input(value=target.mysql_databases, placeholder="db1,db2", id="te-mysql-databases") - yield Static("Exclude databases (comma-separated, when mode=all):") - yield Input(value=target.mysql_exclude, placeholder="test_db,dev_db", id="te-mysql-exclude") - yield Static("MySQL User:") - yield Input(value=target.mysql_user, placeholder="Leave empty for socket/~/.my.cnf auth", id="te-mysql-user") - yield Static("MySQL Password:") - yield Input(value=target.mysql_password, placeholder="Leave empty for socket/~/.my.cnf auth", password=True, id="te-mysql-password") - yield Static("MySQL Host:") - yield Input(value=target.mysql_host, placeholder="localhost", id="te-mysql-host") - yield Static("MySQL Port:") - yield Input(value=target.mysql_port, placeholder="3306", id="te-mysql-port") - yield Static("MySQL Extra Options:") - yield Input(value=target.mysql_extra_opts, placeholder="--single-transaction --routines --triggers", id="te-mysql-extra-opts") + yield Static("Databases (comma-separated):", classes="mysql-field mysql-select-field") + 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):", classes="mysql-field mysql-all-field") + 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:", classes="mysql-field") + 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:", classes="mysql-field") + 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:", classes="mysql-field") + yield Input(value=target.mysql_host, placeholder="localhost", id="te-mysql-host", classes="mysql-field") + yield Static("MySQL Port:", classes="mysql-field") + yield Input(value=target.mysql_port, placeholder="3306", id="te-mysql-port", classes="mysql-field") + 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", classes="mysql-field") with Horizontal(id="te-buttons"): yield Button("Save", variant="primary", id="btn-save") yield Button("Cancel", id="btn-cancel") 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: if event.button.id == "btn-cancel": self.dismiss(None)