Skip to main content

edc_web_components/components/
did_label.rs

1use 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!(
39      <yew_icons::Icon
40        data={yew_icons::IconData::LUCIDE_BUILDING}
41        style="color: var(--pf-t--global--border--color--default)"
42      />
43    )
44  } else {
45    html!()
46  };
47
48  html! {
49    <Split gutter=true>
50      <SplitItem>
51        <Logo url={logo.flatten()} width="24px" height="24px" />
52      </SplitItem>
53      <SplitItem>
54        <Tooltip text={props.did.clone()}>
55          <Flex>
56            <FlexItem modifiers={[FlexModifier::Align(Alignment::Center).all()]}>
57              { label }
58            </FlexItem>
59            <FlexItem modifiers={[FlexModifier::Align(Alignment::Center).all()]}>{ icon }</FlexItem>
60          </Flex>
61        </Tooltip>
62      </SplitItem>
63    </Split>
64  }
65}