Skip to content

Commit ff7a3b7

Browse files
authored
fix: colors (#113)
1 parent 2fec904 commit ff7a3b7

File tree

13 files changed

+200
-138
lines changed

13 files changed

+200
-138
lines changed

internal/app/app.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
tea "github.com/charmbracelet/bubbletea"
66
"github.com/charmbracelet/lipgloss"
77

8+
"github.com/hedhyw/json-log-viewer/internal/keymap"
89
"github.com/hedhyw/json-log-viewer/internal/pkg/source"
910

1011
"github.com/hedhyw/json-log-viewer/internal/pkg/config"
@@ -22,7 +23,7 @@ type Application struct {
2223
Entries source.LazyLogEntries
2324
Version string
2425

25-
keys KeyMap
26+
keys keymap.KeyMap
2627
help help.Model
2728
}
2829

@@ -49,7 +50,7 @@ func newApplication(
4950
},
5051

5152
Version: version,
52-
keys: defaultKeys,
53+
keys: keymap.GetDefaultKeys(),
5354
help: help.New(),
5455
}
5556
}

internal/app/helper.go

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,17 @@ import (
1515
)
1616

1717
func (app *Application) getLogLevelStyle(
18-
logEntries source.LazyLogEntries,
18+
renderedRows []table.Row,
1919
baseStyle lipgloss.Style,
2020
rowID int,
2121
) lipgloss.Style {
22-
if rowID < 0 || rowID >= logEntries.Len() {
22+
if rowID < 0 || rowID >= len(renderedRows) {
2323
return baseStyle
2424
}
2525

26-
entry := logEntries.Entries[rowID].LogEntry(logEntries.Seeker, app.Config)
26+
row := renderedRows[rowID]
2727

28-
color := getColorForLogLevel(app.getLogLevelFromLogEntry(entry))
28+
color := getColorForLogLevel(app.getLogLevelFromLogRow(row))
2929
if color == "" {
3030
return baseStyle
3131
}
@@ -62,8 +62,8 @@ func getColorForLogLevel(level source.Level) lipgloss.Color {
6262
}
6363
}
6464

65-
func (app *Application) getLogLevelFromLogEntry(logEntry source.LogEntry) source.Level {
66-
return source.Level(getFieldByKind(app.Config, config.FieldKindLevel, logEntry))
65+
func (app *Application) getLogLevelFromLogRow(row table.Row) source.Level {
66+
return source.Level(getCellByKind(app.Config, config.FieldKindLevel, row))
6767
}
6868

6969
func (app *Application) handleErrorOccuredMsg(msg events.ErrorOccuredMsg) (tea.Model, tea.Cmd) {
@@ -97,13 +97,13 @@ func (app *Application) handleOpenJSONRowRequestedMsg(
9797

9898
func (app *Application) handleKeyMsg(msg tea.KeyMsg) tea.Cmd {
9999
switch {
100-
case key.Matches(msg, defaultKeys.Exit):
100+
case key.Matches(msg, app.keys.Exit):
101101
return tea.Quit
102-
case key.Matches(msg, defaultKeys.Filter):
102+
case key.Matches(msg, app.keys.Filter):
103103
return events.FilterKeyClicked
104-
case key.Matches(msg, defaultKeys.Open):
104+
case key.Matches(msg, app.keys.Open):
105105
return events.EnterKeyClicked
106-
case key.Matches(msg, defaultKeys.ToggleViewArrow):
106+
case key.Matches(msg, app.keys.ToggleViewArrow):
107107
return events.ArrowRightKeyClicked
108108
default:
109109
return nil
@@ -151,24 +151,31 @@ func removeClearSequence(value string) string {
151151
return strings.ReplaceAll(value, "\x1b[0", "\x1b[39")
152152
}
153153

154-
func getFieldByKind(
154+
func getCellByKind(
155155
cfg *config.Config,
156156
kind config.FieldKind,
157-
logEntry source.LogEntry,
157+
row table.Row,
158158
) string {
159-
for i, f := range cfg.Fields {
160-
if f.Kind != kind {
161-
continue
162-
}
159+
index := getIndexByKind(cfg, kind)
163160

164-
if i >= len(logEntry.Fields) {
165-
return "-"
166-
}
161+
if index < 0 || index >= len(row) {
162+
return "-"
163+
}
164+
165+
return row[index]
166+
}
167167

168-
return logEntry.Fields[i]
168+
func getIndexByKind(
169+
cfg *config.Config,
170+
kind config.FieldKind,
171+
) int {
172+
for i, f := range cfg.Fields {
173+
if f.Kind == kind {
174+
return i
175+
}
169176
}
170177

171-
return ""
178+
return -1
172179
}
173180

174181
func batched[T any](m T, cmd tea.Cmd) func(batch []tea.Cmd) (T, []tea.Cmd) {

internal/app/keymap.go

Lines changed: 0 additions & 80 deletions
This file was deleted.

internal/app/lazytable.go

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,17 @@ import (
88
tea "github.com/charmbracelet/bubbletea"
99

1010
"github.com/hedhyw/json-log-viewer/internal/pkg/config"
11+
"github.com/hedhyw/json-log-viewer/internal/pkg/source"
1112
)
1213

1314
// rowGetter renders the row.
1415
type rowGetter interface {
1516
// Row return a rendered table row.
1617
Row(cfg *config.Config, i int) table.Row
18+
// Len returns the number of all rows.
1719
Len() int
20+
// LogEntry getter
21+
LogEntry(cfg *config.Config, i int) source.LogEntry
1822
}
1923

2024
// lazyTableModel lazily renders table rows.
@@ -67,6 +71,27 @@ func (m lazyTableModel) Update(msg tea.Msg) (lazyTableModel, tea.Cmd) {
6771
return m, cmd
6872
}
6973

74+
func (m lazyTableModel) getCellRenderer() func(table.Model, string, table.CellPosition) string {
75+
cellIDLogLevel := getIndexByKind(m.Config, config.FieldKindLevel)
76+
tableStyles := getTableStyles()
77+
78+
return func(_ table.Model, value string, position table.CellPosition) string {
79+
style := tableStyles.Cell
80+
81+
if position.Column == cellIDLogLevel {
82+
return removeClearSequence(
83+
m.Application.getLogLevelStyle(
84+
m.renderedRows,
85+
style,
86+
position.RowID,
87+
).Render(value),
88+
)
89+
}
90+
91+
return style.Render(value)
92+
}
93+
}
94+
7095
func (m lazyTableModel) handleKey(msg tea.KeyMsg, render bool) (lazyTableModel, bool) {
7196
// toggle the reverse display of items.
7297
if key.Matches(msg, m.Application.keys.Reverse) {
@@ -170,13 +195,16 @@ func (m lazyTableModel) RenderedRows() lazyTableModel {
170195
}
171196
end := min(m.offset+m.table.Height(), m.entries.Len())
172197

173-
m.renderedRows = []table.Row{}
198+
m.renderedRows = m.renderedRows[:0]
199+
renderedEntries := make([]source.LogEntry, 0, cap(m.renderedRows))
174200
for i := m.offset; i < end; i++ {
175201
m.renderedRows = append(m.renderedRows, m.entries.Row(m.Config, i))
202+
renderedEntries = append(renderedEntries, m.entries.LogEntry(m.Config, i))
176203
}
177204

178205
if m.reverse {
179206
slices.Reverse(m.renderedRows)
207+
slices.Reverse(renderedEntries)
180208
}
181209

182210
m.table.SetRows(m.renderedRows)
@@ -190,5 +218,9 @@ func (m lazyTableModel) RenderedRows() lazyTableModel {
190218

191219
m.lastCursor = m.table.Cursor()
192220

221+
tableStyles := getTableStyles()
222+
tableStyles.RenderCell = m.getCellRenderer()
223+
m.table.SetStyles(tableStyles)
224+
193225
return m
194226
}

internal/app/logstable.go

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ type logsTableModel struct {
2020
}
2121

2222
func newLogsTableModel(application *Application, logEntries source.LazyLogEntries) logsTableModel {
23-
const cellIDLogLevel = 1
24-
2523
tableLogs := table.New(
2624
table.WithColumns(getColumns(application.LastWindowSize.Width, application.Config)),
2725
table.WithFocused(true),
@@ -34,25 +32,6 @@ func newLogsTableModel(application *Application, logEntries source.LazyLogEntrie
3432

3533
tableLogs.SetStyles(getTableStyles())
3634

37-
tableStyles := getTableStyles()
38-
tableStyles.RenderCell = func(_ table.Model, value string, position table.CellPosition) string {
39-
style := tableStyles.Cell
40-
41-
if position.Column == cellIDLogLevel {
42-
return removeClearSequence(
43-
application.getLogLevelStyle(
44-
logEntries,
45-
style,
46-
position.RowID,
47-
).Render(value),
48-
)
49-
}
50-
51-
return style.Render(value)
52-
}
53-
54-
tableLogs.SetStyles(tableStyles)
55-
5635
lazyTable := lazyTableModel{
5736
Application: application,
5837
reverse: true,

internal/app/statefiltering.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"github.com/charmbracelet/bubbles/textinput"
66
tea "github.com/charmbracelet/bubbletea"
77

8+
"github.com/hedhyw/json-log-viewer/internal/keymap"
89
"github.com/hedhyw/json-log-viewer/internal/pkg/events"
910
)
1011

@@ -16,7 +17,7 @@ type StateFilteringModel struct {
1617
table logsTableModel
1718

1819
textInput textinput.Model
19-
keys KeyMap
20+
keys keymap.KeyMap
2021
}
2122

2223
func newStateFiltering(
@@ -32,7 +33,7 @@ func newStateFiltering(
3233
table: previousState.table,
3334

3435
textInput: textInput,
35-
keys: defaultKeys,
36+
keys: previousState.getApplication().keys,
3637
}
3738
}
3839

internal/app/stateviewrow.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package app
33
import (
44
tea "github.com/charmbracelet/bubbletea"
55

6+
"github.com/hedhyw/json-log-viewer/internal/keymap"
67
"github.com/hedhyw/json-log-viewer/internal/pkg/events"
78
"github.com/hedhyw/json-log-viewer/internal/pkg/source"
89
"github.com/hedhyw/json-log-viewer/internal/pkg/widgets"
@@ -18,25 +19,31 @@ type StateViewRowModel struct {
1819
logEntry source.LogEntry
1920
jsonView tea.Model
2021

21-
keys KeyMap
22+
keys keymap.KeyMap
2223
}
2324

2425
func newStateViewRow(
2526
logEntry source.LogEntry,
2627
previousState stateModel,
2728
) StateViewRowModel {
28-
jsonViewModel, cmd := widgets.NewJSONViewModel(logEntry.Line, previousState.getApplication().LastWindowSize)
29+
app := previousState.getApplication()
30+
31+
jsonViewModel, cmd := widgets.NewJSONViewModel(
32+
logEntry.Line,
33+
app.LastWindowSize,
34+
app.keys,
35+
)
2936

3037
return StateViewRowModel{
31-
Application: previousState.getApplication(),
38+
Application: app,
3239

3340
previousState: previousState,
3441
initCmd: cmd,
3542

3643
logEntry: logEntry,
3744
jsonView: jsonViewModel,
3845

39-
keys: defaultKeys,
46+
keys: previousState.getApplication().keys,
4047
}
4148
}
4249

0 commit comments

Comments
 (0)