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