Skip to main content

edc_web_components/contexts/
did_resolver_context.rs

1use crate::models::Participant;
2use std::{ops::Deref, rc::Rc};
3use yew::prelude::*;
4
5#[derive(Debug, PartialEq, Clone)]
6pub enum DidResolverAction {}
7
8#[derive(Clone, PartialEq)]
9pub struct DidResolverState {
10  participants: Vec<Participant>,
11}
12
13impl DidResolverState {
14  pub fn participant(&self, participant_did: &str) -> Option<&Participant> {
15    self
16      .participants
17      .iter()
18      .find(|participant| participant.did == participant_did)
19  }
20}
21
22impl Reducible for DidResolverState {
23  type Action = DidResolverAction;
24
25  fn reduce(self: Rc<Self>, _action: Self::Action) -> Rc<Self> {
26    let new_self = self.deref().clone();
27
28    new_self.into()
29  }
30}
31
32#[derive(Properties, PartialEq)]
33pub struct DidResolverContextProviderProps {
34  #[prop_or_default]
35  pub children: Html,
36  pub participants: Vec<Participant>,
37}
38
39#[component]
40pub fn DidResolverContextProvider(props: &DidResolverContextProviderProps) -> Html {
41  let did_resolver_context = use_reducer(move || DidResolverState {
42    participants: props.participants.clone(),
43  });
44
45  html! {
46    <ContextProvider<DidResolverContext> context={did_resolver_context}>
47      { props.children.clone() }
48    </ContextProvider<DidResolverContext>>
49  }
50}
51
52pub type DidResolverContext = UseReducerHandle<DidResolverState>;
53
54#[hook]
55pub fn use_did_resolver_context() -> Option<DidResolverContext> {
56  use_context::<DidResolverContext>()
57}