75 lines
1.9 KiB
Rust
75 lines
1.9 KiB
Rust
mod commit_diff;
|
|
mod dialog_state;
|
|
pub(crate) mod discussion;
|
|
mod inbox;
|
|
mod issues;
|
|
mod placeholder_panel;
|
|
mod pull_requests;
|
|
mod repo;
|
|
mod repo_list;
|
|
mod send_patch;
|
|
pub(crate) mod sidebar;
|
|
mod status_list;
|
|
pub(crate) mod tree;
|
|
|
|
use std::fmt::Display;
|
|
|
|
use gpui::prelude::*;
|
|
use gpui::{AnyElement, App, Entity, div};
|
|
use gpui_component::{Sizable as _, h_flex};
|
|
pub use inbox::InboxView;
|
|
use metadata::ProfileDirectory;
|
|
pub(crate) use placeholder_panel::PlaceholderPanel;
|
|
pub use repo::RepoDetailView;
|
|
pub(crate) use repo::{RepoItem, open_repo_item, open_repo_panel};
|
|
pub use repo_list::RepoListView;
|
|
pub use sidebar::SidebarPanel;
|
|
use signed_state::RepoStore;
|
|
use signed_ui::Avatar;
|
|
|
|
pub(crate) fn tab_title(avatar: AnyElement, label: impl IntoElement) -> impl IntoElement {
|
|
h_flex()
|
|
.gap_1p5()
|
|
.items_center()
|
|
.child(div().flex_shrink_0().child(avatar))
|
|
.child(label)
|
|
}
|
|
|
|
pub(crate) fn panel_avatar(seed: impl Display) -> AnyElement {
|
|
Avatar::new(seed).xsmall().into_any_element()
|
|
}
|
|
|
|
pub(crate) fn repo_tab_avatar(
|
|
store: &RepoStore,
|
|
directory: &Entity<ProfileDirectory>,
|
|
cx: &App,
|
|
) -> AnyElement {
|
|
let seed = store
|
|
.announcement
|
|
.as_ref()
|
|
.map(|announcement| format!("{}:{}", announcement.owner, announcement.id))
|
|
.or_else(|| store.addr().map(|addr| addr.to_string()))
|
|
.or_else(|| {
|
|
store
|
|
.path
|
|
.as_ref()
|
|
.map(|path| path.to_string_lossy().into_owned())
|
|
})
|
|
.unwrap_or_default();
|
|
|
|
let owner = store
|
|
.announcement
|
|
.as_ref()
|
|
.map(|announcement| directory.read(cx).profile(&announcement.owner, cx));
|
|
|
|
let (name, picture) = owner
|
|
.map(|profile| (Some(profile.name()), profile.picture()))
|
|
.unwrap_or((None, None));
|
|
|
|
Avatar::new(seed)
|
|
.name(name)
|
|
.picture(picture)
|
|
.xsmall()
|
|
.into_any_element()
|
|
}
|