use std::collections::HashMap;
use super::components_model::SurfaceComponentsModel;
use super::data_context::DataContext;
use super::data_model::DataModel;
use crate::catalog::function_api::FunctionImplementation;
pub struct ComponentContext<'a> {
pub component_id: String,
pub surface_id: String,
pub data_context: DataContext<'a>,
pub components: &'a SurfaceComponentsModel,
pub focused_id: Option<String>,
pub template_index: Option<usize>,
}
impl<'a> ComponentContext<'a> {
pub fn new(
component_id: String,
surface_id: String,
data_model: &'a DataModel,
components: &'a SurfaceComponentsModel,
functions: &'a HashMap<String, Box<dyn FunctionImplementation>>,
base_path: &str,
focused_id: Option<String>,
) -> Self {
let data_context = if base_path.is_empty() {
DataContext::new(data_model, functions)
} else {
DataContext::new(data_model, functions).nested(base_path.trim_start_matches('/'))
};
Self {
component_id,
surface_id,
data_context,
components,
focused_id,
template_index: None,
}
}
}