ISSUE-957 - Add a simple pause button to stop auto-refresh on ConfigMap and Secrets (#1062)

* Add a simple pause button using Start/Stop functionality

* Remove Infof

* Update internal/view/live_view.go

Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>

* Turn off auto-refresh by default

Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>
mine
Arash Outadi 2021-03-27 13:14:18 -07:00 committed by GitHub
parent a895273cdb
commit fb791df105
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 24 additions and 0 deletions

View File

@ -33,6 +33,7 @@ type LiveView struct {
fullScreen bool
managedField bool
cancel context.CancelFunc
paused bool
}
// NewLiveView returns a live viewer.
@ -47,6 +48,7 @@ func NewLiveView(app *App, title string, m model.ResourceViewer) *LiveView {
maxRegions: 0,
cmdBuff: model.NewFishBuff('/', model.FilterBuffer),
model: m,
paused: true, // Default is to NOT automatically refresh for a better user experience
}
v.AddItem(v.text, 0, 1, true)
@ -132,6 +134,7 @@ func (v *LiveView) bindKeys() {
tcell.KeyCtrlS: ui.NewKeyAction("Save", v.saveCmd, false),
ui.KeyC: ui.NewKeyAction("Copy", v.cpCmd, true),
ui.KeyF: ui.NewKeyAction("Toggle FullScreen", v.toggleFullScreenCmd, true),
ui.KeyR: ui.NewKeyAction("Toggle Auto-Refresh", v.pauseCmd, true),
ui.KeyN: ui.NewKeyAction("Next Match", v.nextCmd, true),
ui.KeyShiftN: ui.NewKeyAction("Prev Match", v.prevCmd, true),
ui.KeySlash: ui.NewSharedKeyAction("Filter Mode", v.activateCmd, false),
@ -145,6 +148,22 @@ func (v *LiveView) bindKeys() {
}
}
// pauseCmd is used for pausing the refreshing of data on config map and secrets
func (v *LiveView) pauseCmd(evt *tcell.EventKey) *tcell.EventKey {
// We save the old variable because we need to toggle it for the correct behavior in the Start function
p := v.paused
v.paused = !v.paused
if p {
v.Start()
v.app.Flash().Info("Auto-refresh is enabled")
} else {
v.Stop()
v.app.Flash().Info("Auto-refresh is disabled")
}
return evt
}
func (v *LiveView) keyboard(evt *tcell.EventKey) *tcell.EventKey {
if a, ok := v.actions[ui.AsKey(evt)]; ok {
return a.Action(evt)
@ -177,6 +196,11 @@ func (v *LiveView) Start() {
if err := v.model.Watch(ctx); err != nil {
log.Error().Err(err).Msgf("LiveView watcher failed")
}
// Determine if we want to auto-refresh or not
if v.paused {
v.Stop()
}
}
func (v *LiveView) defaultCtx() context.Context {