edc_web_components/components/
did_label.rs1use crate::components::logo::Logo;
2use crate::contexts::{use_did_resolver_context, use_my_did_provider_context};
3use patternfly_yew::prelude::*;
4use yew::prelude::*;
5
6#[derive(Clone, PartialEq, Properties)]
7pub struct DidLabelProps {
8 pub did: String,
9}
10
11#[component]
12pub fn DidLabel(props: &DidLabelProps) -> Html {
13 let did_resolver_context = use_did_resolver_context();
14 let my_did_provider_context = use_my_did_provider_context();
15
16 let participant = use_memo(
17 (did_resolver_context.clone(), props.did.clone()),
18 |(did_resolver_context, did)| {
19 did_resolver_context
20 .as_ref()
21 .and_then(|did_resolver_context| {
22 did_resolver_context
23 .participant(did)
24 .map(|participant| (participant.name.clone(), participant.logo.clone()))
25 })
26 .unzip()
27 },
28 );
29
30 let (label, logo) = (*participant).clone();
31
32 let label = label.unwrap_or_else(|| props.did.clone());
33
34 let icon = if my_did_provider_context
35 .map(|my_did_provider_context| my_did_provider_context.my_did().to_string())
36 == Some(props.did.clone())
37 {
38 html!(<Label label="Me" color={Color::Blue} outline=true />)
39 } else {
40 html!()
41 };
42
43 html! {
44 <Split gutter=true>
45 <SplitItem>
46 <Logo url={logo.flatten()} width="24px" height="24px" />
47 </SplitItem>
48 <SplitItem>
49 <Tooltip text={props.did.clone()}>
50 <Flex>
51 <FlexItem modifiers={[FlexModifier::Align(Alignment::Center).all()]}>
52 { label }
53 </FlexItem>
54 <FlexItem modifiers={[FlexModifier::Align(Alignment::Center).all()]}>{ icon }</FlexItem>
55 </Flex>
56 </Tooltip>
57 </SplitItem>
58 </Split>
59 }
60}