adding assignee for tui

This commit is contained in:
viljarb
2026-03-11 21:23:07 +01:00
parent 7ceb0929c5
commit 0b4e33b28f
15 changed files with 184 additions and 16 deletions

View File

@@ -86,7 +86,7 @@ func (d *Model) handleKeyMsg(msg tea.KeyMsg) tea.Cmd {
d.issueDetail.ScrollUp(1)
case d.IsFocusedOnDetail() && key.Matches(msg, d.keyMap.ScrollDown):
d.issueDetail.ScrollDown(1)
case !d.editingTitle && !d.creatingIssue && !d.editingDescription && !d.choosingStatus && !d.choosingPriority && !d.confirmingDelete && !d.choosingType && key.Matches(msg, d.keyMap.EditTitle):
case !d.editingTitle && !d.creatingIssue && !d.editingDescription && !d.choosingStatus && !d.choosingPriority && !d.confirmingDelete && !d.choosingType && !d.editingAssignee && key.Matches(msg, d.keyMap.EditTitle):
if selected := d.FocusedIssueList().SelectedItem(); selected.ID != "" {
d.startEditTitle(selected)
cmd = d.titleInput.Focus()
@@ -108,6 +108,11 @@ func (d *Model) handleKeyMsg(msg tea.KeyMsg) tea.Cmd {
if selected := d.FocusedIssueList().SelectedItem(); selected.ID != "" {
d.startChooseType(selected)
}
case !d.IsInModal() && key.Matches(msg, d.keyMap.ChangeAssignee):
if selected := d.FocusedIssueList().SelectedItem(); selected.ID != "" {
d.startEditAssignee(selected)
cmd = d.assigneeInput.Focus()
}
case !d.IsInModal() && key.Matches(msg, d.keyMap.AddIssue):
d.startCreateIssue()
cmd = d.createTitleInput.Focus()

View File

@@ -53,6 +53,9 @@ type Model struct {
priorityIssueID string
choosingType bool // true while choosing a type
typeIssueID string
editingAssignee bool // true while editing assignee
assigneeInput textinput.Model
assigneeIssueID string
feedbackChan chan models.ValidationFeedback
quitChan chan bool
submitChan chan<- struct{}
@@ -89,6 +92,7 @@ func NewDashboard(app *app.App, feedbackChan chan models.ValidationFeedback, qui
m.titleInput = inputs.Title
m.createTitleInput = inputs.CreateTitle
m.descriptionInput = inputs.Description
m.assigneeInput = inputs.Assignee
if selected := m.todoList.SelectedItem(); selected.ID != "" {
m.issueDetail.SetIssue(selected.Issue)
@@ -142,6 +146,13 @@ func (m *Model) startChooseType(selected ListIssue) {
m.typeIssueID = selected.ID
}
func (m *Model) startEditAssignee(selected ListIssue) {
m.editingAssignee = true
m.assigneeIssueID = selected.ID
m.assigneeInput.SetValue(selected.Assignee)
m.assigneeInput.CursorEnd()
}
func (m *Model) Init() tea.Cmd {
return components.ListenForValidation(m.feedbackChan)
}
@@ -149,7 +160,7 @@ func (m *Model) Init() tea.Cmd {
// IsInModal returns true when a modal (edit, create, delete confirm, choose status/priority/type) is active.
func (m *Model) IsInModal() bool {
return m.editingTitle || m.creatingIssue || m.editingDescription ||
m.choosingStatus || m.choosingPriority || m.confirmingDelete || m.choosingType
m.choosingStatus || m.choosingPriority || m.confirmingDelete || m.choosingType || m.editingAssignee
}
func (m *Model) IsFocusedOnList() bool {

View File

@@ -97,6 +97,15 @@ func (m *Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
}
return m, m.refreshIssueListsAndSelectIssue(msg.IssueID)
case issues.AssigneeUpdatedMsg:
m.editingAssignee = false
m.assigneeIssueID = ""
m.assigneeInput.Blur()
if msg.Err != nil {
return m, nil
}
return m, m.refreshIssueListsAndSelectIssue(msg.IssueID)
case issues.SelectIssueMsg:
m.todoList.SelectIssueID(msg.IssueID)
m.inProgList.SelectIssueID(msg.IssueID)
@@ -332,6 +341,22 @@ func (m *Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
return m, cmd
}
if m.editingAssignee {
if msg.String() == "enter" {
assignee := m.assigneeInput.Value()
return m, issues.UpdateIssueAssigneeCmd(m.app, m.assigneeIssueID, assignee)
}
if msg.String() == "esc" {
m.editingAssignee = false
m.assigneeIssueID = ""
m.assigneeInput.Blur()
return m, nil
}
var cmd tea.Cmd
m.assigneeInput, cmd = m.assigneeInput.Update(msg)
return m, cmd
}
if m.editingTitle {
if msg.String() == "enter" {
newTitle := m.titleInput.Value()

View File

@@ -93,6 +93,8 @@ func (m *Model) View() string {
m.priorityIssueID,
m.choosingType,
m.typeIssueID,
m.editingAssignee,
m.assigneeInput.View(),
mainView,
)