2
0
mirror of https://github.com/hibiken/asynq.git synced 2025-10-25 23:06:12 +08:00

(cli): Disable arrow keys while modal is open

This commit is contained in:
Ken Hibino
2022-05-29 05:33:47 -07:00
parent 9e252e1082
commit e0540b7698
2 changed files with 46 additions and 4 deletions

View File

@@ -107,7 +107,7 @@ func (h *keyEventHandler) downKeyQueueDetails() {
} else { } else {
state.groupTableRowIdx = 0 // loop back state.groupTableRowIdx = 0 // loop back
} }
} else { } else if state.taskID == "" {
if state.taskTableRowIdx < len(state.tasks) { if state.taskTableRowIdx < len(state.tasks) {
state.taskTableRowIdx++ state.taskTableRowIdx++
} else { } else {
@@ -144,7 +144,7 @@ func (h *keyEventHandler) upKeyQueueDetails() {
} else { } else {
state.groupTableRowIdx-- state.groupTableRowIdx--
} }
} else { } else if state.taskID == "" {
if state.taskTableRowIdx == 0 { if state.taskTableRowIdx == 0 {
state.taskTableRowIdx = len(state.tasks) state.taskTableRowIdx = len(state.tasks)
} else { } else {
@@ -215,7 +215,7 @@ func (h *keyEventHandler) handleLeftKey() {
f = h.fetcher f = h.fetcher
d = h.drawer d = h.drawer
) )
if state.view == viewTypeQueueDetails { if state.view == viewTypeQueueDetails && state.taskID == "" {
state.taskState = prevTaskState(state.taskState) state.taskState = prevTaskState(state.taskState)
state.pageNum = 1 state.pageNum = 1
state.taskTableRowIdx = 0 state.taskTableRowIdx = 0
@@ -233,7 +233,7 @@ func (h *keyEventHandler) handleRightKey() {
f = h.fetcher f = h.fetcher
d = h.drawer d = h.drawer
) )
if state.view == viewTypeQueueDetails { if state.view == viewTypeQueueDetails && state.taskID == "" {
state.taskState = nextTaskState(state.taskState) state.taskState = nextTaskState(state.taskState)
state.pageNum = 1 state.pageNum = 1
state.taskTableRowIdx = 0 state.taskTableRowIdx = 0

View File

@@ -164,6 +164,48 @@ func TestKeyEventHandler(t *testing.T) {
taskID: "", // this field should be unset taskID: "", // this field should be unset
}, },
}, },
{
desc: "Arrow keys are disabled while task info modal is open",
state: &State{
view: viewTypeQueueDetails,
queues: []*asynq.QueueInfo{
{Queue: "default", Size: 500, Active: 10, Pending: 40},
},
queueTableRowIdx: 1,
selectedQueue: &asynq.QueueInfo{Queue: "default", Size: 50, Active: 10, Pending: 40},
taskState: asynq.TaskStatePending,
pageNum: 1,
tasks: []*asynq.TaskInfo{
{ID: "xxxx", Type: "foo"},
{ID: "yyyy", Type: "bar"},
{ID: "zzzz", Type: "baz"},
},
taskTableRowIdx: 2,
taskID: "yyyy", // presence of this field opens the modal
},
events: []*tcell.EventKey{
tcell.NewEventKey(tcell.KeyLeft, ' ', tcell.ModNone),
},
// no change
wantState: State{
view: viewTypeQueueDetails,
queues: []*asynq.QueueInfo{
{Queue: "default", Size: 500, Active: 10, Pending: 40},
},
queueTableRowIdx: 1,
selectedQueue: &asynq.QueueInfo{Queue: "default", Size: 50, Active: 10, Pending: 40},
taskState: asynq.TaskStatePending,
pageNum: 1,
tasks: []*asynq.TaskInfo{
{ID: "xxxx", Type: "foo"},
{ID: "yyyy", Type: "bar"},
{ID: "zzzz", Type: "baz"},
},
taskTableRowIdx: 2,
taskID: "yyyy", // presence of this field opens the modal
},
},
// TODO: Add more tests // TODO: Add more tests
} }