return values visualized
This commit is contained in:
parent
5c6ced8ca0
commit
7d149ee17e
3 changed files with 44 additions and 24 deletions
|
|
@ -182,7 +182,22 @@ impl LogViewer {
|
|||
|
||||
pub fn footer_fields(&self) -> Vec<(String, serde_json::Value)> {
|
||||
if let Some((selected, _)) = self.selected() {
|
||||
selected.all_fields().fields.into_iter().collect::<Vec<_>>()
|
||||
let ret = match selected.as_ref() {
|
||||
LogEntry::Single { .. } => Default::default(),
|
||||
LogEntry::Sub { sub_entries, .. } => sub_entries.last().and_then(|i| {
|
||||
i.all_fields()
|
||||
.fields
|
||||
.get_key_value("return")
|
||||
.map(|(k, v)| (k.clone(), v.clone()))
|
||||
}),
|
||||
};
|
||||
|
||||
selected
|
||||
.all_relevant_fields()
|
||||
.fields
|
||||
.into_iter()
|
||||
.chain(ret)
|
||||
.collect::<Vec<_>>()
|
||||
} else {
|
||||
Vec::new()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
use itertools::Itertools;
|
||||
use ratatui_themes::{Theme, ThemeName};
|
||||
use serde_json::de;
|
||||
use std::{
|
||||
fs::{self, DirEntry},
|
||||
io,
|
||||
|
|
@ -24,7 +23,7 @@ use ratatui::{
|
|||
crossterm::event::{self, Event, KeyCode, KeyModifiers},
|
||||
layout::{Constraint, HorizontalAlignment, Layout, Rect},
|
||||
style::Style,
|
||||
text::{Line, Span, Text},
|
||||
text::{Line, Text},
|
||||
widgets::{
|
||||
Block, Clear, List, ListItem, ListState, Padding, Paragraph, StatefulWidget, Widget, Wrap,
|
||||
},
|
||||
|
|
@ -231,7 +230,7 @@ impl App {
|
|||
},
|
||||
(KeyCode::Char('g') | KeyCode::End, tab) => match tab {
|
||||
Tab::FileChooser { state, .. } => state.select_last(),
|
||||
Tab::LogViewer(lv) => {}
|
||||
Tab::LogViewer(_) => {}
|
||||
Tab::Empty => {}
|
||||
Tab::CreateFilter { .. } => {}
|
||||
},
|
||||
|
|
@ -252,17 +251,13 @@ impl App {
|
|||
lv.switch_focus();
|
||||
}
|
||||
(KeyCode::Char('r'), Tab::LogViewer(lv)) => {
|
||||
if let Some(file) = &mut self.current_file {
|
||||
let filter = initialize_filter(lv, Some(FilterKind::Remove));
|
||||
self.push_tab(Tab::CreateFilter { filter });
|
||||
}
|
||||
}
|
||||
(KeyCode::Char('i'), Tab::LogViewer(lv)) => {
|
||||
if let Some(file) = &mut self.current_file {
|
||||
let filter = initialize_filter(lv, Some(FilterKind::Inline));
|
||||
self.push_tab(Tab::CreateFilter { filter });
|
||||
}
|
||||
}
|
||||
(KeyCode::Enter, tab) => match tab {
|
||||
Tab::FileChooser { files, state, .. } => {
|
||||
if let Some(selected) = state.selected()
|
||||
|
|
@ -273,7 +268,7 @@ impl App {
|
|||
self.current_file = Some(i.clone());
|
||||
self.replace_tab(Tab::LogViewer(LogViewer::new(i.iter())));
|
||||
}
|
||||
Err(e) => {
|
||||
Err(_) => {
|
||||
panic!()
|
||||
}
|
||||
}
|
||||
|
|
@ -370,7 +365,7 @@ impl Widget for &mut App {
|
|||
};
|
||||
|
||||
let footer_area = {
|
||||
let mut block = Block::bordered()
|
||||
let block = Block::bordered()
|
||||
.style(default)
|
||||
.border_style(if footer_focused {
|
||||
border_selected
|
||||
|
|
|
|||
|
|
@ -76,6 +76,13 @@ impl LogEntry {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn all_relevant_fields(&self) -> LogFields {
|
||||
let mut res = self.all_fields();
|
||||
res.fields
|
||||
.retain(|k, v| !(k == "message" && (v == "enter" || v == "exit")));
|
||||
res
|
||||
}
|
||||
|
||||
pub fn count(&self) -> usize {
|
||||
match self {
|
||||
LogEntry::Single { .. } => 1,
|
||||
|
|
@ -93,12 +100,19 @@ impl LogEntry {
|
|||
const NO_MESSAGE: &str = "<no message>";
|
||||
const SPACES_BEFORE: &str = " ";
|
||||
let indent = " >".repeat(inline_depth);
|
||||
|
||||
let single_field = |raw: &RawLogEntry| {
|
||||
raw.fields
|
||||
.message()
|
||||
.map(|i| i.to_string())
|
||||
.or_else(|| raw.fields.fields.get("return").map(|i| format!("↩ {i}")))
|
||||
.unwrap_or_else(|| NO_MESSAGE.to_string())
|
||||
};
|
||||
|
||||
match self {
|
||||
LogEntry::Single { raw } => format!(
|
||||
"{SPACES_BEFORE}┃{indent}{}",
|
||||
raw.fields.message().unwrap_or(NO_MESSAGE)
|
||||
)
|
||||
.into(),
|
||||
LogEntry::Single { raw } => {
|
||||
format!("{SPACES_BEFORE}┃{indent}{}", single_field(raw)).into()
|
||||
}
|
||||
LogEntry::Sub {
|
||||
enter, sub_entries, ..
|
||||
} => {
|
||||
|
|
@ -111,11 +125,7 @@ impl LogEntry {
|
|||
self.count().wrapping_sub(1)
|
||||
))
|
||||
} else {
|
||||
format!(
|
||||
"{SPACES_BEFORE}┃{indent}{}",
|
||||
enter.fields.message().unwrap_or(NO_MESSAGE)
|
||||
)
|
||||
.into()
|
||||
format!("{SPACES_BEFORE}┃{indent}{}", single_field(enter)).into()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue