Skip to content

Commit b8ecfed

Browse files
fix(tui): improve timelock input handling
- Separate mode toggle (M key) from field navigation (Tab key) - Fix field indices for TimelockRelative (use 0-based) - Update render to show correct navigation hints - Ensure both Blocks and Time modes have proper input fields
1 parent 1cb2080 commit b8ecfed

2 files changed

Lines changed: 36 additions & 39 deletions

File tree

src/tui/mod.rs

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1417,24 +1417,28 @@ fn handle_send_keys(app: &mut App, key: KeyEvent) {
14171417
use crate::tui::screens::{ScriptType, TimelockMode};
14181418
let config = &mut app.send_form.script_config;
14191419

1420-
// For TimelockRelative with mode toggle
1421-
if config.script_type == ScriptType::TimelockRelative && config.focused_field == 0 {
1422-
// Toggle mode when Tab pressed on mode field
1423-
config.timelock_mode = config.timelock_mode.toggle();
1424-
} else {
1425-
let max_fields = match &config.script_type {
1426-
ScriptType::None => 0,
1427-
ScriptType::TimelockAbsolute => 1,
1428-
ScriptType::TimelockRelative => match config.timelock_mode {
1429-
TimelockMode::Blocks => 2, // mode + blocks
1430-
TimelockMode::Time => 3, // mode + days + hours
1431-
},
1432-
ScriptType::Recovery => 2,
1433-
ScriptType::HTLC => 3,
1434-
};
1435-
if max_fields > 0 {
1436-
config.focused_field = (config.focused_field + 1) % max_fields;
1437-
}
1420+
let max_fields = match &config.script_type {
1421+
ScriptType::None => 0,
1422+
ScriptType::TimelockAbsolute => 1,
1423+
ScriptType::TimelockRelative => match config.timelock_mode {
1424+
TimelockMode::Blocks => 1, // blocks only
1425+
TimelockMode::Time => 2, // days + hours
1426+
},
1427+
ScriptType::Recovery => 2,
1428+
ScriptType::HTLC => 3,
1429+
};
1430+
if max_fields > 0 {
1431+
config.focused_field = (config.focused_field + 1) % max_fields;
1432+
}
1433+
}
1434+
KeyCode::Char('m') | KeyCode::Char('M') => {
1435+
// Toggle timelock mode (blocks vs time)
1436+
use crate::tui::screens::ScriptType;
1437+
if app.send_form.script_config.script_type == ScriptType::TimelockRelative {
1438+
app.send_form.script_config.timelock_mode =
1439+
app.send_form.script_config.timelock_mode.toggle();
1440+
// Reset to first input field after mode change
1441+
app.send_form.script_config.focused_field = 0;
14381442
}
14391443
}
14401444
KeyCode::Char(_) | KeyCode::Backspace => {
@@ -1449,15 +1453,15 @@ fn handle_send_keys(app: &mut App, key: KeyEvent) {
14491453
}
14501454
ScriptType::TimelockRelative => match config.timelock_mode {
14511455
TimelockMode::Blocks => {
1452-
if config.focused_field == 1 {
1456+
if config.focused_field == 0 {
14531457
config.timelock_blocks.handle_key(key);
14541458
}
14551459
}
14561460
TimelockMode::Time => match config.focused_field {
1457-
1 => {
1461+
0 => {
14581462
config.timelock_days.handle_key(key);
14591463
}
1460-
2 => {
1464+
1 => {
14611465
config.timelock_hours.handle_key(key);
14621466
}
14631467
_ => {}

src/tui/screens/send.rs

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1152,33 +1152,25 @@ fn render_configure_script(frame: &mut Frame, form: &SendFormData, area: Rect) {
11521152
}
11531153
ScriptType::TimelockRelative => {
11541154
let mode = &form.script_config.timelock_mode;
1155-
let mode_focused = form.script_config.focused_field == 0;
11561155

11571156
let mut lines = vec![
1158-
// Mode toggle
1157+
// Mode indicator
11591158
Line::from(vec![
1160-
Span::styled(
1161-
if mode_focused { "▶ " } else { " " },
1162-
Style::default().fg(Color::Yellow),
1163-
),
11641159
Span::styled("Mode: ", Style::default().fg(Color::Gray)),
11651160
Span::styled(
11661161
format!("[{}]", mode.label()),
1167-
if mode_focused {
1168-
Style::default()
1169-
.fg(Color::Yellow)
1170-
.add_modifier(Modifier::BOLD)
1171-
} else {
1172-
Style::default().fg(Color::Cyan)
1173-
},
1162+
Style::default()
1163+
.fg(Color::Cyan)
1164+
.add_modifier(Modifier::BOLD),
11741165
),
1175-
Span::styled(" (Tab to toggle)", Style::default().fg(Color::DarkGray)),
1166+
Span::styled(" (M to toggle)", Style::default().fg(Color::DarkGray)),
11761167
]),
1168+
Line::from(""),
11771169
];
11781170

11791171
match mode {
11801172
TimelockMode::Blocks => {
1181-
let blocks_focused = form.script_config.focused_field == 1;
1173+
let blocks_focused = form.script_config.focused_field == 0;
11821174
lines.push(Line::from(vec![
11831175
Span::styled(
11841176
if blocks_focused { "▶ " } else { " " },
@@ -1201,8 +1193,8 @@ fn render_configure_script(frame: &mut Frame, form: &SendFormData, area: Rect) {
12011193
)]));
12021194
}
12031195
TimelockMode::Time => {
1204-
let days_focused = form.script_config.focused_field == 1;
1205-
let hours_focused = form.script_config.focused_field == 2;
1196+
let days_focused = form.script_config.focused_field == 0;
1197+
let hours_focused = form.script_config.focused_field == 1;
12061198
lines.push(Line::from(vec![
12071199
Span::styled(
12081200
if days_focused { "▶ " } else { " " },
@@ -1217,7 +1209,8 @@ fn render_configure_script(frame: &mut Frame, form: &SendFormData, area: Rect) {
12171209
Style::default().fg(Color::White)
12181210
},
12191211
),
1220-
Span::raw(" "),
1212+
]));
1213+
lines.push(Line::from(vec![
12211214
Span::styled(
12221215
if hours_focused { "▶ " } else { " " },
12231216
Style::default().fg(Color::Yellow),

0 commit comments

Comments
 (0)