86 lines
2.3 KiB
Rust
86 lines
2.3 KiB
Rust
use crate::prelude::*;
|
|
|
|
#[derive(IntoElement, RegisterComponent)]
|
|
pub struct DiffStat {
|
|
id: ElementId,
|
|
added: usize,
|
|
removed: usize,
|
|
}
|
|
|
|
impl DiffStat {
|
|
pub fn new(id: impl Into<ElementId>, added: usize, removed: usize) -> Self {
|
|
Self {
|
|
id: id.into(),
|
|
added,
|
|
removed,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl RenderOnce for DiffStat {
|
|
fn render(self, _: &mut Window, _cx: &mut App) -> impl IntoElement {
|
|
h_flex()
|
|
.id(self.id)
|
|
.gap_1()
|
|
.child(
|
|
h_flex()
|
|
.gap_0p5()
|
|
.child(
|
|
Icon::new(IconName::Plus)
|
|
.size(IconSize::XSmall)
|
|
.color(Color::Success),
|
|
)
|
|
.child(
|
|
Label::new(self.added.to_string())
|
|
.color(Color::Success)
|
|
.size(LabelSize::Small),
|
|
),
|
|
)
|
|
.child(
|
|
h_flex()
|
|
.gap_0p5()
|
|
.child(
|
|
Icon::new(IconName::Dash)
|
|
.size(IconSize::XSmall)
|
|
.color(Color::Error),
|
|
)
|
|
.child(
|
|
Label::new(self.removed.to_string())
|
|
.color(Color::Error)
|
|
.size(LabelSize::Small),
|
|
),
|
|
)
|
|
}
|
|
}
|
|
|
|
impl Component for DiffStat {
|
|
fn scope() -> ComponentScope {
|
|
ComponentScope::VersionControl
|
|
}
|
|
|
|
fn preview(_window: &mut Window, cx: &mut App) -> Option<AnyElement> {
|
|
let container = || {
|
|
h_flex()
|
|
.py_4()
|
|
.w_72()
|
|
.justify_center()
|
|
.border_1()
|
|
.border_color(cx.theme().colors().border_variant)
|
|
.bg(cx.theme().colors().panel_background)
|
|
};
|
|
|
|
let diff_stat_example = vec![single_example(
|
|
"Default",
|
|
container()
|
|
.child(DiffStat::new("id", 1, 2))
|
|
.into_any_element(),
|
|
)];
|
|
|
|
Some(
|
|
example_group(diff_stat_example)
|
|
.vertical()
|
|
.into_any_element(),
|
|
)
|
|
}
|
|
}
|