view: refactor repo view

[?]
Jun 3, 2025, 11:31 AM
7SSBM4UQMYVRL6L3ICYZQPSMYLZZQNMDWH6JKA3KOOSXZDJHESHQC

Dependencies

Change contents

  • replacement in inflorescence_view/src/app.rs at line 63
    [3.2747][2.15683:15949](),[2.15683][2.15683:15949]()
    let repo_info = el(row([
    el(text(&repo.dir_name)),
    el(text(": ")),
    el(
    button(text(&repo.channel)), /* TODO
    * .on_press(Message) */
    ),
    ]));
    [3.2747]
    [2.15949]
    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
    [2.15950][2.15950:16052]()
    let untracked_files = || {
    el(column(repo.untracked_files.iter().enumerate().map(
    [2.15950]
    [2.16052]
    fn view_repo<'a, F>(
    state: &State<'a>,
    repo: &'a repo::State,
    get_file_diff: F,
    ) -> Element<'a, Msg, Theme>
    where
    F: 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
    [2.16631][2.16631:16642]()
    };
    [2.16631]
    [2.16642]
    };
  • replacement in inflorescence_view/src/app.rs at line 109
    [2.16643][2.16643:16741]()
    let changed_files = || {
    el(column(repo.changed_files.iter().enumerate().map(
    [2.16643]
    [2.16741]
    let changed_files = || {
    el(column(repo.changed_files.iter().enumerate().map(
  • replacement in inflorescence_view/src/app.rs at line 127
    [2.17357][2.17357:17368]()
    };
    [2.17357]
    [2.17368]
    };
  • replacement in inflorescence_view/src/app.rs at line 129
    [2.17369][2.17369:17447]()
    let log = || {
    el(column(repo.log.iter().enumerate().map(
    [2.17369]
    [2.17447]
    let log = || {
    el(column(repo.log.iter().enumerate().map(
  • replacement in inflorescence_view/src/app.rs at line 151
    [2.18319][2.18319:18330]()
    };
    [2.18319]
    [2.18330]
    };
    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
    [2.18331][2.18331:18457]()
    let record_msg_editor = if let Some(RecordMsg::Typing(msg_content)) =
    state.record_msg.as_ref()
    {
    [2.18331]
    [2.18457]
    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
    [2.18481][2.18481:18975]()
    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([]))
    };
    [2.18481]
    [2.18975]
    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
    [2.18976][2.18976:21515]()
    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();
    [2.18976]
    [2.21515]
    let short_hash = display_short_hash(hash);
  • replacement in inflorescence_view/src/app.rs at line 228
    [2.21516][2.21516:21659]()
    let short_hash = display_short_hash(hash);
    let files = entry.file_paths.iter().enumerate().map(|(ix, path)| {
    [2.21516]
    [2.21659]
    let files = entry.file_paths.iter().enumerate().map(|(ix, path)| {
  • replacement in inflorescence_view/src/app.rs at line 234
    [2.22072][2.22072:23465]()
    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..")),
    },
    [2.22072]
    [2.23465]
    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
    [2.23480][2.23480:24109]()
    .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)),
    };
    [2.23480]
    [2.24109]
    .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
    [2.24110][2.24110:24230]()
    let right_view = el(column([record_msg_editor, selection_details])
    .width(Length::FillPortion(1)));
    [2.24110]
    [2.24230]
    let right_view = el(column([record_msg_editor, selection_details])
    .width(Length::FillPortion(1)));
  • replacement in inflorescence_view/src/app.rs at line 289
    [2.24231][2.24231:24338](),[2.24338][3.3006:3137]()
    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))
    [2.24231]
    [2.24344]
    el(row([left_view, right_view]).spacing(SPACING))