Skip to main content

edc_web_components/contexts/
did_resolver_context.rs

1use crate::models::Participant;
2use yew::prelude::*;
3
4#[derive(Clone, PartialEq)]
5pub struct DidResolverState {
6  participants: Vec<Participant>,
7}
8
9impl DidResolverState {
10  pub fn participant(&self, participant_did: &str) -> Option<&Participant> {
11    self
12      .participants
13      .iter()
14      .find(|participant| participant.did == participant_did)
15  }
16}
17
18#[derive(Properties, PartialEq)]
19pub struct DidResolverContextProviderProps {
20  #[prop_or_default]
21  pub children: Html,
22  pub participants: Vec<Participant>,
23}
24
25#[component]
26pub fn DidResolverContextProvider(props: &DidResolverContextProviderProps) -> Html {
27  let did_resolver_context = use_state(move || DidResolverState {
28    participants: props.participants.clone(),
29  });
30
31  use_effect_with(
32    (props.participants.clone(), did_resolver_context.setter()),
33    |(participants, did_resolver_context_setter)| {
34      did_resolver_context_setter.set(DidResolverState {
35        participants: participants.clone(),
36      });
37    },
38  );
39
40  html! {
41    <ContextProvider<DidResolverState> context={(*did_resolver_context).clone()}>
42      { props.children.clone() }
43    </ContextProvider<DidResolverState>>
44  }
45}
46
47#[hook]
48pub fn use_did_resolver_context() -> Option<DidResolverState> {
49  use_context::<DidResolverState>()
50}