edc_web_components/contexts/
did_resolver_context.rs1use 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}