7SSBM4UQMYVRL6L3ICYZQPSMYLZZQNMDWH6JKA3KOOSXZDJHESHQC 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))}
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(
};
};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([]))};
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...")),};
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();
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);
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))),
.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)),};
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))