.
This commit is contained in:
@@ -26,6 +26,59 @@ impl RepoListView {
|
||||
_subscription: subscription,
|
||||
}
|
||||
}
|
||||
|
||||
fn render_card(&self, announcement: &Announcement, cx: &mut App) -> AnyElement {
|
||||
let name = announcement
|
||||
.name
|
||||
.clone()
|
||||
.unwrap_or_else(|| announcement.id.clone());
|
||||
|
||||
let owner = ProfileStore::global(cx)
|
||||
.update(cx, |store, cx| store.get(announcement.owner, cx))
|
||||
.name();
|
||||
|
||||
let description = announcement.description.clone().unwrap_or_default();
|
||||
|
||||
div()
|
||||
.v_flex()
|
||||
.h(px(60.))
|
||||
.w_full()
|
||||
.justify_center()
|
||||
.gap_1()
|
||||
.px_4()
|
||||
.border_b(px(1.))
|
||||
.border_color(cx.theme().border)
|
||||
.child(
|
||||
div()
|
||||
.h_flex()
|
||||
.gap_2()
|
||||
.items_center()
|
||||
.child(
|
||||
div()
|
||||
.text_sm()
|
||||
.font_semibold()
|
||||
.whitespace_nowrap()
|
||||
.text_ellipsis()
|
||||
.child(name),
|
||||
)
|
||||
.child(
|
||||
div()
|
||||
.text_xs()
|
||||
.text_color(cx.theme().muted_foreground)
|
||||
.whitespace_nowrap()
|
||||
.child(owner),
|
||||
),
|
||||
)
|
||||
.child(
|
||||
div()
|
||||
.text_xs()
|
||||
.text_color(cx.theme().muted_foreground)
|
||||
.whitespace_nowrap()
|
||||
.text_ellipsis()
|
||||
.child(description),
|
||||
)
|
||||
.into_any_element()
|
||||
}
|
||||
}
|
||||
|
||||
impl Panel for RepoListView {
|
||||
@@ -46,86 +99,12 @@ impl Focusable for RepoListView {
|
||||
}
|
||||
}
|
||||
|
||||
fn render_card(announcement: &Announcement, cx: &mut App) -> AnyElement {
|
||||
let name = announcement
|
||||
.name
|
||||
.clone()
|
||||
.unwrap_or_else(|| announcement.id.clone());
|
||||
|
||||
let owner = ProfileStore::global(cx)
|
||||
.update(cx, |store, cx| store.get(announcement.owner, cx))
|
||||
.name();
|
||||
|
||||
let description = announcement.description.clone().unwrap_or_default();
|
||||
|
||||
div()
|
||||
.v_flex()
|
||||
.h(px(60.))
|
||||
.justify_center()
|
||||
.gap_1()
|
||||
.px_4()
|
||||
.border_b(px(1.))
|
||||
.border_color(cx.theme().border)
|
||||
.child(
|
||||
div()
|
||||
.h_flex()
|
||||
.gap_2()
|
||||
.items_center()
|
||||
.child(
|
||||
div()
|
||||
.text_sm()
|
||||
.font_semibold()
|
||||
.whitespace_nowrap()
|
||||
.text_ellipsis()
|
||||
.child(name),
|
||||
)
|
||||
.child(
|
||||
div()
|
||||
.text_xs()
|
||||
.text_color(cx.theme().muted_foreground)
|
||||
.whitespace_nowrap()
|
||||
.child(owner),
|
||||
),
|
||||
)
|
||||
.child(
|
||||
div()
|
||||
.text_xs()
|
||||
.text_color(cx.theme().muted_foreground)
|
||||
.whitespace_nowrap()
|
||||
.text_ellipsis()
|
||||
.child(description),
|
||||
)
|
||||
.into_any_element()
|
||||
}
|
||||
|
||||
impl Render for RepoListView {
|
||||
fn render(&mut self, _window: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
|
||||
let announcements = self.store.read(cx).announcements.clone();
|
||||
let has_announcements = !announcements.is_empty();
|
||||
let count = announcements.len();
|
||||
|
||||
let body = if announcements.is_empty() {
|
||||
div()
|
||||
.size_full()
|
||||
.v_flex()
|
||||
.items_center()
|
||||
.justify_center()
|
||||
.child(
|
||||
div()
|
||||
.text_sm()
|
||||
.text_color(cx.theme().muted_foreground)
|
||||
.child("No repositories found. Waiting for relays..."),
|
||||
)
|
||||
.into_any_element()
|
||||
} else {
|
||||
uniform_list("repo-list", count, move |range, _window, cx| {
|
||||
range
|
||||
.map(|index| render_card(&announcements[index], cx))
|
||||
.collect()
|
||||
})
|
||||
.size_full()
|
||||
.into_any_element()
|
||||
};
|
||||
|
||||
div()
|
||||
.v_flex()
|
||||
.size_full()
|
||||
@@ -143,6 +122,38 @@ impl Render for RepoListView {
|
||||
.child(SharedString::from(format!(" ({count})"))),
|
||||
),
|
||||
)
|
||||
.child(body)
|
||||
.when(!has_announcements, |this| {
|
||||
this.child(
|
||||
div()
|
||||
.size_full()
|
||||
.v_flex()
|
||||
.items_center()
|
||||
.justify_center()
|
||||
.child(
|
||||
div()
|
||||
.text_sm()
|
||||
.text_color(cx.theme().muted_foreground)
|
||||
.child("No repositories found. Waiting for relays..."),
|
||||
),
|
||||
)
|
||||
})
|
||||
.when(has_announcements, |this| {
|
||||
this.child(
|
||||
uniform_list(
|
||||
"repos",
|
||||
count,
|
||||
cx.processor(move |this, range, _window, cx| {
|
||||
let mut items = vec![];
|
||||
|
||||
for ix in range {
|
||||
items.push(this.render_card(&announcements[ix], cx));
|
||||
}
|
||||
|
||||
items
|
||||
}),
|
||||
)
|
||||
.size_full(),
|
||||
)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user