Inviting/Responding/Creating Channels... etc.

This commit is contained in:
Conrad Irwin 2023-11-28 22:46:35 -07:00
parent 396ecefa4f
commit 5fbc60d8da
5 changed files with 420 additions and 644 deletions

File diff suppressed because it is too large Load diff

View file

@ -181,7 +181,6 @@ impl PickerDelegate for ContactFinderDelegate {
ContactRequestStatus::RequestSent => Some("icons/x.svg"), ContactRequestStatus::RequestSent => Some("icons/x.svg"),
ContactRequestStatus::RequestAccepted => None, ContactRequestStatus::RequestAccepted => None,
}; };
dbg!(icon_path);
Some( Some(
div() div()
.flex_1() .flex_1()

View file

@ -30,11 +30,11 @@ pub trait FeatureFlagViewExt<V: 'static> {
impl<V> FeatureFlagViewExt<V> for ViewContext<'_, V> impl<V> FeatureFlagViewExt<V> for ViewContext<'_, V>
where where
V: 'static + Send + Sync, V: 'static,
{ {
fn observe_flag<T: FeatureFlag, F>(&mut self, callback: F) -> Subscription fn observe_flag<T: FeatureFlag, F>(&mut self, callback: F) -> Subscription
where where
F: Fn(bool, &mut V, &mut ViewContext<V>) + Send + Sync + 'static, F: Fn(bool, &mut V, &mut ViewContext<V>) + 'static,
{ {
self.observe_global::<FeatureFlags>(move |v, cx| { self.observe_global::<FeatureFlags>(move |v, cx| {
let feature_flags = cx.global::<FeatureFlags>(); let feature_flags = cx.global::<FeatureFlags>();

View file

@ -59,6 +59,7 @@ impl RenderOnce for IconButton {
if let Some(click_handler) = self.on_click { if let Some(click_handler) = self.on_click {
button = button.on_click(move |event, cx| { button = button.on_click(move |event, cx| {
cx.stop_propagation();
click_handler(event, cx); click_handler(event, cx);
}) })
} }

View file

@ -25,7 +25,9 @@ pub struct ListHeader {
left_icon: Option<Icon>, left_icon: Option<Icon>,
meta: Option<ListHeaderMeta>, meta: Option<ListHeaderMeta>,
toggle: Toggle, toggle: Toggle,
on_toggle: Option<Rc<dyn Fn(&ClickEvent, &mut WindowContext) + 'static>>,
inset: bool, inset: bool,
selected: bool,
} }
impl ListHeader { impl ListHeader {
@ -36,6 +38,8 @@ impl ListHeader {
meta: None, meta: None,
inset: false, inset: false,
toggle: Toggle::NotToggleable, toggle: Toggle::NotToggleable,
on_toggle: None,
selected: false,
} }
} }
@ -44,6 +48,14 @@ impl ListHeader {
self self
} }
pub fn on_toggle(
mut self,
on_toggle: impl Fn(&ClickEvent, &mut WindowContext) + 'static,
) -> Self {
self.on_toggle = Some(Rc::new(on_toggle));
self
}
pub fn left_icon(mut self, left_icon: Option<Icon>) -> Self { pub fn left_icon(mut self, left_icon: Option<Icon>) -> Self {
self.left_icon = left_icon; self.left_icon = left_icon;
self self
@ -57,13 +69,18 @@ impl ListHeader {
self.meta = meta; self.meta = meta;
self self
} }
pub fn selected(mut self, selected: bool) -> Self {
self.selected = selected;
self
}
} }
impl RenderOnce for ListHeader { impl RenderOnce for ListHeader {
type Rendered = Div; type Rendered = Div;
fn render(self, cx: &mut WindowContext) -> Self::Rendered { fn render(self, cx: &mut WindowContext) -> Self::Rendered {
let disclosure_control = disclosure_control(self.toggle, None); let disclosure_control = disclosure_control(self.toggle, self.on_toggle);
let meta = match self.meta { let meta = match self.meta {
Some(ListHeaderMeta::Tools(icons)) => div().child( Some(ListHeaderMeta::Tools(icons)) => div().child(
@ -85,6 +102,9 @@ impl RenderOnce for ListHeader {
div() div()
.h_5() .h_5()
.when(self.inset, |this| this.px_2()) .when(self.inset, |this| this.px_2())
.when(self.selected, |this| {
this.bg(cx.theme().colors().ghost_element_selected)
})
.flex() .flex()
.flex_1() .flex_1()
.items_center() .items_center()