From 967dd024146c31b4cfbbf94d1e7a85cde907cf2f Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 24 Oct 2024 16:33:15 +0200 Subject: [PATCH] WIP: start using replace blocks for patches --- crates/assistant/src/assistant_panel.rs | 96 ++++++++----------------- 1 file changed, 29 insertions(+), 67 deletions(-) diff --git a/crates/assistant/src/assistant_panel.rs b/crates/assistant/src/assistant_panel.rs index 4ea49787be..0a467e4d72 100644 --- a/crates/assistant/src/assistant_panel.rs +++ b/crates/assistant/src/assistant_panel.rs @@ -1446,8 +1446,8 @@ struct ScrollPosition { } struct PatchViewState { - footer_block_id: CustomBlockId, - crease_id: CreaseId, + block_id: CustomBlockId, + // crease_id: CreaseId, editor: Option, update_task: Option>, } @@ -2158,8 +2158,8 @@ impl ContextEditor { for range in removed { if let Some(state) = self.patches.remove(range) { editors_to_close.extend(state.editor.and_then(|state| state.editor.upgrade())); - removed_block_ids.insert(state.footer_block_id); - removed_crease_ids.push(state.crease_id); + removed_block_ids.insert(state.block_id); + // removed_crease_ids.push(state.crease_id); } } @@ -2189,7 +2189,7 @@ impl ContextEditor { let gutter_width = cx.gutter_dimensions.full_width(); let block_id = cx.block_id; this.update(&mut **cx, |this, cx| { - this.render_patch_footer( + this.render_patch( patch_range.clone(), max_width, gutter_width, @@ -2203,26 +2203,9 @@ impl ContextEditor { } }); - let header_placeholder = FoldPlaceholder { - render: { - let this = this.clone(); - let patch_range = range.clone(); - Arc::new(move |fold_id, _range, cx| { - this.update(cx, |this, cx| { - this.render_patch_header(patch_range.clone(), fold_id, cx) - }) - .ok() - .flatten() - .unwrap_or_else(|| Empty.into_any()) - }) - }, - constrain_width: false, - merge_adjacent: false, - }; - let should_refold; if let Some(state) = self.patches.get_mut(&range) { - replaced_blocks.insert(state.footer_block_id, render_block); + replaced_blocks.insert(state.block_id, render_block); if let Some(editor_state) = &state.editor { if editor_state.opened_patch != patch { state.update_task = Some({ @@ -2242,30 +2225,30 @@ impl ContextEditor { let block_ids = editor.insert_blocks( [BlockProperties { height: path_count as u32 + 1, - style: BlockStyle::Flex, + style: BlockStyle::Fixed, render: render_block, - placement: BlockPlacement::Below(patch_start), + placement: BlockPlacement::Replace(patch_start..patch_end), priority: 0, }], None, cx, ); - let new_crease_ids = editor.insert_creases( - [Crease::new( - patch_start..patch_end, - header_placeholder.clone(), - fold_toggle("patch-header"), - |_, _, _| Empty.into_any_element(), - )], - cx, - ); + // let new_crease_ids = editor.insert_creases( + // [Crease::new( + // patch_start..patch_end, + // header_placeholder.clone(), + // fold_toggle("patch-header"), + // |_, _, _| Empty.into_any_element(), + // )], + // cx, + // ); self.patches.insert( range.clone(), PatchViewState { - footer_block_id: block_ids[0], - crease_id: new_crease_ids[0], + block_id: block_ids[0], + // crease_id: new_crease_ids[0], editor: None, update_task: None, }, @@ -2275,8 +2258,8 @@ impl ContextEditor { } if should_refold { - editor.unfold_ranges([patch_start..patch_end], true, false, cx); - editor.fold_ranges([(patch_start..patch_end, header_placeholder)], false, cx); + // editor.unfold_ranges([patch_start..patch_end], true, false, cx); + // editor.fold_ranges([(patch_start..patch_end, header_placeholder)], false, cx); } } @@ -3431,28 +3414,7 @@ impl ContextEditor { .unwrap_or_else(|| Cow::Borrowed(DEFAULT_TAB_TITLE)) } - fn render_patch_header( - &self, - range: Range, - _id: FoldId, - cx: &mut ViewContext, - ) -> Option { - let patch = self.context.read(cx).patch_for_range(&range, cx)?; - let theme = cx.theme().clone(); - Some( - h_flex() - .px_1() - .py_0p5() - .border_b_1() - .border_color(theme.status().info_border) - .gap_1() - .child(Icon::new(IconName::Diff).size(IconSize::Small)) - .child(Label::new(patch.title.clone()).size(LabelSize::Small)) - .into_any(), - ) - } - - fn render_patch_footer( + fn render_patch( &mut self, range: Range, max_width: Pixels, @@ -3468,10 +3430,6 @@ impl ContextEditor { .anchor_in_excerpt(excerpt_id, range.start) .unwrap(); - if !snapshot.intersects_fold(anchor) { - return None; - } - let patch = self.context.read(cx).patch_for_range(&range, cx)?; let paths = patch .paths() @@ -3480,10 +3438,13 @@ impl ContextEditor { Some( v_flex() + .border_1() + .border_color(cx.theme().colors().border) .id(id) - .pl(gutter_width) - .w(max_width) - .py_2() + .ml(gutter_width) + .p_2() + .rounded_md() + .min_h(cx.line_height() * 3.) .cursor(CursorStyle::PointingHand) .on_click(cx.listener(move |this, _, cx| { this.editor.update(cx, |editor, cx| { @@ -3493,6 +3454,7 @@ impl ContextEditor { }); this.focus_active_patch(cx); })) + .child(Label::new(patch.title.clone())) .children(paths.into_iter().map(|path| { h_flex() .pl_1()