Skip to main content

edc_web_components/contexts/
cel_expression_library.rs

1use yew::prelude::*;
2
3#[derive(Debug, Clone, PartialEq)]
4pub struct CelExpressionLibraryItem {
5  pub name: String,
6  pub left_operand: String,
7  pub description: Option<String>,
8  pub scopes: Vec<String>,
9  pub expression: String,
10}
11
12#[derive(Clone, PartialEq)]
13pub struct CelExpressionLibraryState {
14  cel_expression_library_items: Vec<CelExpressionLibraryItem>,
15}
16
17impl CelExpressionLibraryState {
18  pub fn cel_expression_library(&self) -> &[CelExpressionLibraryItem] {
19    &self.cel_expression_library_items
20  }
21}
22
23#[derive(Properties, PartialEq)]
24pub struct CelExpressionLibraryContextProviderProps {
25  #[prop_or_default]
26  pub children: Html,
27  pub cel_expression_library_items: Vec<CelExpressionLibraryItem>,
28}
29
30#[component]
31pub fn CelExpressionLibraryContextProvider(
32  props: &CelExpressionLibraryContextProviderProps,
33) -> Html {
34  let context = use_state(move || CelExpressionLibraryState {
35    cel_expression_library_items: props.cel_expression_library_items.clone(),
36  });
37
38  use_effect_with(
39    (props.cel_expression_library_items.clone(), context.setter()),
40    |(cel_expression_library_items, context_setter)| {
41      context_setter.set(CelExpressionLibraryState {
42        cel_expression_library_items: cel_expression_library_items.clone(),
43      });
44    },
45  );
46
47  html! {
48    <ContextProvider<CelExpressionLibraryState> context={(*context).clone()}>
49      { props.children.clone() }
50    </ContextProvider<CelExpressionLibraryState>>
51  }
52}
53
54#[hook]
55pub fn use_cel_expression_library_context() -> Option<CelExpressionLibraryState> {
56  use_context::<CelExpressionLibraryState>()
57}