impulse_thaw/message_bar/
message_bar_actions.rs

1use super::{MessageBarInjection, MessageBarLayout};
2use crate::ButtonSizeInjection;
3use leptos::{context::Provider, either::Either, prelude::*};
4use thaw_components::OptionComp;
5
6#[component]
7pub fn MessageBarActions(
8    #[prop(optional)] message_bar_container_action: Option<MessageBarContainerAction>,
9    children: Children,
10) -> impl IntoView {
11    let layout = MessageBarInjection::expect_context().layout;
12
13    if layout == MessageBarLayout::Multiline {
14        Either::Left(view! {
15            <Provider value=ButtonSizeInjection(crate::ButtonSize::Small)>
16                <OptionComp value=message_bar_container_action.map(|a| a.children) let:children>
17                    <div class="thaw-message-bar-actions__container-action">{children()}</div>
18                </OptionComp>
19                <div class="thaw-message-bar-actions">{children()}</div>
20            </Provider>
21        })
22    } else {
23        Either::Right(view! {
24            <Provider value=ButtonSizeInjection(crate::ButtonSize::Small)>
25                <div class="thaw-message-bar-actions">{children()}</div>
26                <OptionComp value=message_bar_container_action.map(|a| a.children) let:children>
27                    <div class="thaw-message-bar-actions__container-action">{children()}</div>
28                </OptionComp>
29            </Provider>
30        })
31    }
32}
33
34#[slot]
35pub struct MessageBarContainerAction {
36    children: Children,
37}