yew_oauth2/components/
failure.rs

1//! The [`Failure`] component
2
3use super::missing_context;
4use crate::context::OAuth2Context;
5use yew::prelude::*;
6
7/// Properties for the [`Failure`] component
8#[derive(Clone, Debug, PartialEq, Properties)]
9pub struct FailureProps {
10    #[prop_or_default]
11    pub id: Option<String>,
12    #[prop_or_default]
13    pub style: Option<String>,
14    #[prop_or_default]
15    pub class: Option<String>,
16    #[prop_or_default]
17    pub element: Option<String>,
18    #[prop_or_default]
19    pub children: Children,
20}
21
22#[function_component(Failure)]
23pub fn failure(props: &FailureProps) -> Html {
24    let auth = use_context::<OAuth2Context>();
25
26    let element = props.element.as_deref().unwrap_or("div").to_string();
27
28    match auth {
29        None => missing_context(),
30        Some(OAuth2Context::Failed(..)) => {
31            html!(
32                <@{element}
33                    id={ props.id.clone() }
34                    style={ props.style.clone() }
35                    class={ &props.class }
36                    >
37                    { for props.children.iter() }
38                </@>
39            )
40        }
41        Some(_) => html!(),
42    }
43}
44
45#[derive(Clone, Debug, PartialEq, Eq, Properties)]
46pub struct FailureMessageProps {
47    #[prop_or_default]
48    pub id: Option<String>,
49    #[prop_or_default]
50    pub style: Option<String>,
51    #[prop_or_default]
52    pub class: Option<String>,
53    #[prop_or_default]
54    pub element: Option<String>,
55}
56
57#[function_component(FailureMessage)]
58pub fn failure_message(props: &FailureMessageProps) -> Html {
59    let auth = use_context::<OAuth2Context>();
60
61    let element = props.element.as_deref().unwrap_or("span").to_string();
62
63    match auth {
64        None => missing_context(),
65        Some(OAuth2Context::Failed(message)) => {
66            html!(
67                <@{element}
68                    id={ props.id.clone() }
69                    style={ props.style.clone() }
70                    class={ &props.class }
71                    >
72                    { message }
73                </@>
74            )
75        }
76        Some(_) => html!(),
77    }
78}