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:
@@ -107,7 +107,7 @@ func (h *keyEventHandler) downKeyQueueDetails() {
|
||||
} else {
|
||||
state.groupTableRowIdx = 0 // loop back
|
||||
}
|
||||
} else {
|
||||
} else if state.taskID == "" {
|
||||
if state.taskTableRowIdx < len(state.tasks) {
|
||||
state.taskTableRowIdx++
|
||||
} else {
|
||||
@@ -144,7 +144,7 @@ func (h *keyEventHandler) upKeyQueueDetails() {
|
||||
} else {
|
||||
state.groupTableRowIdx--
|
||||
}
|
||||
} else {
|
||||
} else if state.taskID == "" {
|
||||
if state.taskTableRowIdx == 0 {
|
||||
state.taskTableRowIdx = len(state.tasks)
|
||||
} else {
|
||||
@@ -215,7 +215,7 @@ func (h *keyEventHandler) handleLeftKey() {
|
||||
f = h.fetcher
|
||||
d = h.drawer
|
||||
)
|
||||
if state.view == viewTypeQueueDetails {
|
||||
if state.view == viewTypeQueueDetails && state.taskID == "" {
|
||||
state.taskState = prevTaskState(state.taskState)
|
||||
state.pageNum = 1
|
||||
state.taskTableRowIdx = 0
|
||||
@@ -233,7 +233,7 @@ func (h *keyEventHandler) handleRightKey() {
|
||||
f = h.fetcher
|
||||
d = h.drawer
|
||||
)
|
||||
if state.view == viewTypeQueueDetails {
|
||||
if state.view == viewTypeQueueDetails && state.taskID == "" {
|
||||
state.taskState = nextTaskState(state.taskState)
|
||||
state.pageNum = 1
|
||||
state.taskTableRowIdx = 0
|
||||
|
||||
@@ -164,6 +164,48 @@ func TestKeyEventHandler(t *testing.T) {
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user