view: refactor repo view
[?]
Jun 3, 2025, 11:31 AM
7SSBM4UQMYVRL6L3ICYZQPSMYLZZQNMDWH6JKA3KOOSXZDJHESHQCDependencies
- [2]
23SFYK4Qbig view refactor into a new crate - [3]
PKJCFSBMtheme improvements - [4]
MYGIBRRHwip custom theme
Change contents
- replacement in inflorescence_view/src/app.rs at line 63
let repo_info = el(row([el(text(&repo.dir_name)),el(text(": ")),el(button(text(&repo.channel)), /* TODO* .on_press(Message) */),]));view_repo(&state, repo, get_file_diff)} else {el(text("Loading repo..."))};el(container(inner).class(theme::Container::AppBg).width(Length::Fill).height(Length::Fill))} - replacement in inflorescence_view/src/app.rs at line 73
let untracked_files = || {el(column(repo.untracked_files.iter().enumerate().map(fn view_repo<'a, F>(state: &State<'a>,repo: &'a repo::State,get_file_diff: F,) -> Element<'a, Msg, Theme>whereF: Fn(&file::Id) -> Option<&'a file::Diff>,{let repo_info = el(row([el(text(&repo.dir_name)),el(text(": ")),el(button(text(&repo.channel)), /* TODO* .on_press(Message) */),]));let untracked_files = || {el(column(repo.untracked_files.iter().enumerate().map( - replacement in inflorescence_view/src/app.rs at line 107
};}; - replacement in inflorescence_view/src/app.rs at line 109
let changed_files = || {el(column(repo.changed_files.iter().enumerate().map(let changed_files = || {el(column(repo.changed_files.iter().enumerate().map( - replacement in inflorescence_view/src/app.rs at line 127
};}; - replacement in inflorescence_view/src/app.rs at line 129
let log = || {el(column(repo.log.iter().enumerate().map(let log = || {el(column(repo.log.iter().enumerate().map( - replacement in inflorescence_view/src/app.rs at line 151
};};let record_msg_editor = if let Some(RecordMsg::Typing(msg_content)) =state.record_msg.as_ref(){el(column([el(text_editor(msg_content).placeholder("Type something here...").on_action(Msg::EditRecordMsg)),el(row([el(button(text("Save")).on_press(Msg::SaveRecord)),el(button(text("Defer")).on_press(Msg::DeferRecord)),el(button(text("Abandon")).on_press(Msg::AbandonRecord)),])),]))} else {el(row([]))}; - replacement in inflorescence_view/src/app.rs at line 170
let record_msg_editor = if let Some(RecordMsg::Typing(msg_content)) =state.record_msg.as_ref(){let selection_details = match state.cursor.selection.as_ref() {Some(cursor::Selection::UntrackedFile { ix: _, path }) => {let id = file::Id {path: path.clone(),file_kind: file::Kind::Untracked,};let diffs = match get_file_diff(&id) {Some(file::Diff::Loaded(file)) => {let selection_state = state.diffs_state.get(&id);diff::view(selection_state, file).map(move |msg| {Msg::FileDiffsContentsAction {id: id.clone(),action: msg,}})}None | Some(file::Diff::Loading) => el(text("Loading diff...")),};el(column([view_diff_header(format!("Untracked file {path} contents:")),el(scrollable(diffs)),]).spacing(SPACING))}Some(cursor::Selection::ChangedFile { path, ix: _ }) => {let id = file::Id {path: path.clone(),file_kind: file::Kind::Changed,};let diffs = match get_file_diff(&id) {Some(file::Diff::Loaded(file)) => {let selection_state = state.diffs_state.get(&id);diff::view(selection_state, file).map(move |msg| {Msg::FileDiffsContentsAction {id: id.clone(),action: msg,}})}None | Some(file::Diff::Loading) => el(text("Loading diff...")),}; - replacement in inflorescence_view/src/app.rs at line 212
el(text_editor(msg_content).placeholder("Type something here...").on_action(Msg::EditRecordMsg)),el(row([el(button(text("Save")).on_press(Msg::SaveRecord)),el(button(text("Defer")).on_press(Msg::DeferRecord)),el(button(text("Abandon")).on_press(Msg::AbandonRecord)),])),]))} else {el(row([]))};view_diff_header(format!("Changed file {path} diff:")),el(scrollable(diffs)),]).spacing(SPACING))}Some(cursor::Selection::LogChange {ix,hash,message,diffs: _,file,}) => {let entry = state.repo.as_ref().unwrap().log.get(*ix).unwrap(); - replacement in inflorescence_view/src/app.rs at line 226
let selection_details = match state.cursor.selection.as_ref() {Some(cursor::Selection::UntrackedFile { ix: _, path }) => {let id = file::Id {path: path.clone(),file_kind: file::Kind::Untracked,};let diffs = match get_file_diff(&id) {Some(file::Diff::Loaded(file)) => {let selection_state = state.diffs_state.get(&id);diff::view(selection_state, file).map(move |msg| {Msg::FileDiffsContentsAction {id: id.clone(),action: msg,}})}None | Some(file::Diff::Loading) => {el(text("Loading diff..."))}};el(column([view_diff_header(format!("Untracked file {path} contents:")),el(scrollable(diffs)),]).spacing(SPACING))}Some(cursor::Selection::ChangedFile { path, ix: _ }) => {let id = file::Id {path: path.clone(),file_kind: file::Kind::Changed,};let diffs = match get_file_diff(&id) {Some(file::Diff::Loaded(file)) => {let selection_state = state.diffs_state.get(&id);diff::view(selection_state, file).map(move |msg| {Msg::FileDiffsContentsAction {id: id.clone(),action: msg,}})}None | Some(file::Diff::Loading) => {el(text("Loading diff..."))}};el(column([view_diff_header(format!("Changed file {path} diff:")),el(scrollable(diffs)),]).spacing(SPACING))}Some(cursor::Selection::LogChange {ix,hash,message,diffs: _,file,}) => {let entry = state.repo.as_ref().unwrap().log.get(*ix).unwrap();let short_hash = display_short_hash(hash); - replacement in inflorescence_view/src/app.rs at line 228
let short_hash = display_short_hash(hash);let files = entry.file_paths.iter().enumerate().map(|(ix, path)| {let files = entry.file_paths.iter().enumerate().map(|(ix, path)| { - replacement in inflorescence_view/src/app.rs at line 234
el(column([view_diff_header(format!("{short_hash} message:")),el(text(message)),view_diff_header("Changed files:".to_string()),el(scrollable(column(files))),]).spacing(SPACING))}None => el(row([])),};let left_view = match state.cursor.selection.as_ref() {Some(cursor::Selection::LogChange {ix: _,hash,message: _,diffs,file: Some(cursor::LogChangeFileSelection { ix: _, path }),}) => el(column([view_diff_header(format!("{path} changes in {}:",display_short_hash(hash))),match diffs {Some(diffs) => {let (file, state) = diffs.get(path).unwrap();diff::view(Some(state), file).map(|action| {Msg::LogChangeFileDiffAction {hash: *hash,file: path.clone(),action,}})}None => el(text("Loading diff..")),},el(column([view_diff_header(format!("{short_hash} message:")),el(text(message)),view_diff_header("Changed files:".to_string()),el(scrollable(column(files))), - replacement in inflorescence_view/src/app.rs at line 240
.width(Length::FillPortion(1)).spacing(SPACING)),Some(cursor::Selection::UntrackedFile { .. })| Some(cursor::Selection::ChangedFile { .. })| Some(cursor::Selection::LogChange { .. })| None => el(column([repo_info,el(column([el(text("Untracked files:")), untracked_files()])),el(column([el(text("Changed files:")), changed_files()])),el(column([el(text("Recent changes:")), log()])),]).width(Length::FillPortion(1)).spacing(SPACING)),};.spacing(SPACING))}None => el(row([])),};let left_view = match state.cursor.selection.as_ref() {Some(cursor::Selection::LogChange {ix: _,hash,message: _,diffs,file: Some(cursor::LogChangeFileSelection { ix: _, path }),}) => el(column([view_diff_header(format!("{path} changes in {}:",display_short_hash(hash))),match diffs {Some(diffs) => {let (file, state) = diffs.get(path).unwrap();diff::view(Some(state), file).map(|action| {Msg::LogChangeFileDiffAction {hash: *hash,file: path.clone(),action,}})}None => el(text("Loading diff..")),},]).width(Length::FillPortion(1)).spacing(SPACING)),Some(cursor::Selection::UntrackedFile { .. })| Some(cursor::Selection::ChangedFile { .. })| Some(cursor::Selection::LogChange { .. })| None => el(column([repo_info,el(column([el(text("Untracked files:")), untracked_files()])),el(column([el(text("Changed files:")), changed_files()])),el(column([el(text("Recent changes:")), log()])),]).width(Length::FillPortion(1)).spacing(SPACING)),}; - replacement in inflorescence_view/src/app.rs at line 286
let right_view = el(column([record_msg_editor, selection_details]).width(Length::FillPortion(1)));let right_view = el(column([record_msg_editor, selection_details]).width(Length::FillPortion(1))); - replacement in inflorescence_view/src/app.rs at line 289
el(row([left_view, right_view]).spacing(SPACING))} else {el(text("Loading repo..."))};el(container(inner).class(theme::Container::AppBg).width(Length::Fill).height(Length::Fill))el(row([left_view, right_view]).spacing(SPACING))