Skip to content

Commit 2bfe0fe

Browse files
committed
feat(tui): add parent picker modal for changing bean parents
- Add parentpicker.go with filterable parent selection - Press 'p' in list or detail view to open the picker - Renders as a centered modal overlay with dimmed background - Filters eligible parents based on type hierarchy - Prevents cycles by excluding descendants - Includes "(No Parent)" option to clear parent assignment
1 parent ec3e159 commit 2bfe0fe

File tree

5 files changed

+493
-16
lines changed

5 files changed

+493
-16
lines changed

.beans/beans-8ddb--tui-change-bean-parent.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
---
2-
title: "TUI: Change bean parent"
3-
status: backlog
2+
title: 'TUI: Change bean parent'
3+
status: completed
44
type: feature
5+
priority: normal
56
created_at: 2025-12-12T22:23:04Z
6-
updated_at: 2025-12-12T22:23:04Z
7+
updated_at: 2025-12-12T22:41:33Z
78
parent: beans-xnp8
89
---
910

internal/tui/detail.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,16 @@ func (m detailModel) Update(msg tea.Msg) (detailModel, tea.Cmd) {
314314
}
315315
}
316316
}
317+
318+
case "p":
319+
// Open parent picker
320+
return m, func() tea.Msg {
321+
return openParentPickerMsg{
322+
beanID: m.bean.ID,
323+
beanType: m.bean.Type,
324+
currentParent: m.bean.Parent,
325+
}
326+
}
317327
}
318328
}
319329

@@ -382,7 +392,8 @@ func (m detailModel) View() string {
382392
}
383393
footer += helpKeyStyle.Render("enter") + " " + helpStyle.Render("go to") + " "
384394
}
385-
footer += helpKeyStyle.Render("j/k") + " " + helpStyle.Render("scroll") + " " +
395+
footer += helpKeyStyle.Render("p") + " " + helpStyle.Render("parent") + " " +
396+
helpKeyStyle.Render("j/k") + " " + helpStyle.Render("scroll") + " " +
386397
helpKeyStyle.Render("esc") + " " + helpStyle.Render("back") + " " +
387398
helpKeyStyle.Render("q") + " " + helpStyle.Render("quit")
388399

internal/tui/list.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,17 @@ func (m listModel) Update(msg tea.Msg) (listModel, tea.Cmd) {
257257
return selectBeanMsg{bean: item.bean}
258258
}
259259
}
260+
case "p":
261+
// Open parent picker for selected bean
262+
if item, ok := m.list.SelectedItem().(beanItem); ok {
263+
return m, func() tea.Msg {
264+
return openParentPickerMsg{
265+
beanID: item.bean.ID,
266+
beanType: item.bean.Type,
267+
currentParent: item.bean.Parent,
268+
}
269+
}
270+
}
260271
case "esc", "backspace":
261272
// If we have an active filter, clear it instead of quitting
262273
if m.hasActiveFilter() {
@@ -314,10 +325,12 @@ func (m listModel) View() string {
314325
var help string
315326
if m.hasActiveFilter() {
316327
help = helpKeyStyle.Render("enter") + " " + helpStyle.Render("view") + " " +
328+
helpKeyStyle.Render("p") + " " + helpStyle.Render("parent") + " " +
317329
helpKeyStyle.Render("esc") + " " + helpStyle.Render("clear filter") + " " +
318330
helpKeyStyle.Render("q") + " " + helpStyle.Render("quit")
319331
} else {
320332
help = helpKeyStyle.Render("enter") + " " + helpStyle.Render("view") + " " +
333+
helpKeyStyle.Render("p") + " " + helpStyle.Render("parent") + " " +
321334
helpKeyStyle.Render("/") + " " + helpStyle.Render("filter") + " " +
322335
helpKeyStyle.Render("g t") + " " + helpStyle.Render("filter by tag") + " " +
323336
helpKeyStyle.Render("q") + " " + helpStyle.Render("quit")

0 commit comments

Comments
 (0)