11package app
22
33import (
4+ "github.com/charmbracelet/bubbles/help"
5+ "github.com/charmbracelet/bubbles/key"
46 tea "github.com/charmbracelet/bubbletea"
57
68 "github.com/hedhyw/json-log-viewer/internal/pkg/events"
79 "github.com/hedhyw/json-log-viewer/internal/pkg/source"
810)
911
10- const defaultFooter = "[Ctrl+C] Exit; [Esc] Back; [Enter] Open/Hide; [↑↓] Navigation; [F] Filter"
11-
1212// StateLoaded is a state that shows all loaded records.
1313type StateLoaded struct {
1414 helper
@@ -17,6 +17,9 @@ type StateLoaded struct {
1717
1818 table logsTableModel
1919 logEntries source.LogEntries
20+
21+ keys KeyMap
22+ help help.Model
2023}
2124
2225func newStateViewLogs (application Application , logEntries source.LogEntries ) StateLoaded {
@@ -29,6 +32,9 @@ func newStateViewLogs(application Application, logEntries source.LogEntries) Sta
2932
3033 table : table ,
3134 logEntries : logEntries ,
35+
36+ keys : defaultKeys ,
37+ help : help .New (),
3238 }
3339}
3440
@@ -39,15 +45,15 @@ func (s StateLoaded) Init() tea.Cmd {
3945
4046// View renders component. It implements tea.Model.
4147func (s StateLoaded ) View () string {
42- return s .viewTable () + " \n " + s . viewFooter ()
48+ return s .viewTable () + s . viewHelp ()
4349}
4450
4551func (s StateLoaded ) viewTable () string {
4652 return s .BaseStyle .Render (s .table .View ())
4753}
4854
49- func (s StateLoaded ) viewFooter () string {
50- return s . FooterStyle . Render ( defaultFooter )
55+ func (s StateLoaded ) viewHelp () string {
56+ return " \n " + s . help . View ( s . keys )
5157}
5258
5359// Update handles events. It implements tea.Model.
@@ -67,19 +73,16 @@ func (s StateLoaded) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
6773 return s .handleViewRowsReloadRequestedMsg ()
6874 case events.OpenJSONRowRequestedMsg :
6975 return s .handleOpenJSONRowRequestedMsg (msg , s )
70- case events.BackKeyClickedMsg :
71- return s , tea .Quit
72- case events.EnterKeyClickedMsg , events.ArrowRightKeyClickedMsg :
73- return s .handleRequestOpenJSON ()
74- case events.FilterKeyClickedMsg :
75- return s .handleFilterKeyClickedMsg ()
7676 case tea.KeyMsg :
77- cmdBatch = append (cmdBatch , s .handleKeyMsg (msg )... )
78-
79- if s .isFilterKeyMap (msg ) {
80- // Intercept table update.
81- return s , tea .Batch (cmdBatch ... )
77+ switch {
78+ case key .Matches (msg , s .keys .Back ):
79+ return s , tea .Quit
80+ case key .Matches (msg , s .keys .Filter ):
81+ return s .handleFilterKeyClickedMsg ()
82+ case key .Matches (msg , s .keys .ToggleViewArrow ), key .Matches (msg , s .keys .ToggleView ):
83+ return s .handleRequestOpenJSON ()
8284 }
85+ cmdBatch = append (cmdBatch , s .handleKeyMsg (msg )... )
8386 }
8487
8588 s .table , cmdBatch = batched (s .table .Update (msg ))(cmdBatch )
@@ -92,7 +95,7 @@ func (s StateLoaded) handleKeyMsg(msg tea.KeyMsg) []tea.Cmd {
9295
9396 cmdBatch = appendCmd (cmdBatch , s .helper .handleKeyMsg (msg ))
9497
95- if s . isArrowUpKeyMap (msg ) {
98+ if key . Matches (msg , s . keys . Up ) {
9699 cmdBatch = appendCmd (cmdBatch , s .handleArrowUpKeyClicked ())
97100 }
98101
0 commit comments