edc-web-components 0.5.16

A Rust Web Components with patternfly-yew client for EDC
Documentation
use crate::models::Participant;
use std::{ops::Deref, rc::Rc};
use yew::prelude::*;

#[derive(Debug, PartialEq, Clone)]
pub enum DidResolverAction {}

#[derive(Clone, PartialEq)]
pub struct DidResolverState {
  participants: Vec<Participant>,
}

impl DidResolverState {
  pub fn participant(&self, participant_did: &str) -> Option<&Participant> {
    self
      .participants
      .iter()
      .find(|participant| participant.did == participant_did)
  }
}

impl Reducible for DidResolverState {
  type Action = DidResolverAction;

  fn reduce(self: Rc<Self>, _action: Self::Action) -> Rc<Self> {
    let new_self = self.deref().clone();

    new_self.into()
  }
}

#[derive(Properties, PartialEq)]
pub struct DidResolverContextProviderProps {
  #[prop_or_default]
  pub children: Html,
  pub participants: Vec<Participant>,
}

#[component]
pub fn DidResolverContextProvider(props: &DidResolverContextProviderProps) -> Html {
  let did_resolver_context = use_reducer(move || DidResolverState {
    participants: props.participants.clone(),
  });

  html! {
    <ContextProvider<DidResolverContext> context={did_resolver_context}>
      { props.children.clone() }
    </ContextProvider<DidResolverContext>>
  }
}

pub type DidResolverContext = UseReducerHandle<DidResolverState>;

#[hook]
pub fn use_did_resolver_context() -> Option<DidResolverContext> {
  use_context::<DidResolverContext>()
}