Mountain/Environment/TreeViewProvider/
Registration.rs1use CommonLibrary::{
6 Environment::Requires::Requires,
7 Error::CommonError::CommonError,
8 TreeView::DTO::TreeViewOptionsDTO::TreeViewOptionsDTO,
9};
10use log::info;
11use serde_json::json;
12use tauri::Emitter;
13
14use crate::{ApplicationState::DTO::TreeViewStateDTO::TreeViewStateDTO, Environment::Utility};
15
16pub(super) async fn register_tree_data_provider(
18 env:&crate::Environment::MountainEnvironment::MountainEnvironment,
19 view_identifier:String,
20 options:serde_json::Value,
21) -> Result<(), CommonError> {
22 info!("[TreeViewProvider] Registering data provider for view: {}", view_identifier);
23
24 let options_dto:TreeViewOptionsDTO = serde_json::from_value(options.clone())
25 .map_err(|error| CommonError::InvalidArgument { ArgumentName:"Options".into(), Reason:error.to_string() })?;
26
27 let side_car_identifier = "cocoon-main".to_string();
29
30 let new_state = TreeViewStateDTO {
31 ViewIdentifier:view_identifier.clone(),
32 Provider:None,
33 SideCarIdentifier:Some(side_car_identifier),
34 CanSelectMany:options_dto.CanSelectMany,
35 HasHandleDrag:options_dto.HasHandleDrag,
36 HasHandleDrop:options_dto.HasHandleDrop,
37 Message:None,
38 Title:None,
39 Description:None,
40 };
41
42 env.ApplicationState
43 .Feature
44 .TreeViews
45 .ActiveTreeViews
46 .lock()
47 .map_err(Utility::MapApplicationStateLockErrorToCommonError)?
48 .insert(view_identifier.clone(), new_state);
49
50 env.ApplicationHandle
51 .emit(
52 "sky://tree-view/create",
53 json!({ "ViewIdentifier": view_identifier, "Options": options }),
54 )
55 .map_err(|Error| CommonError::UserInterfaceInteraction { Reason:Error.to_string() })?;
56
57 Ok(())
58}
59
60pub(super) async fn unregister_tree_data_provider(
62 env:&crate::Environment::MountainEnvironment::MountainEnvironment,
63 view_identifier:String,
64) -> Result<(), CommonError> {
65 info!("[TreeViewProvider] Unregistering data provider for view: {}", view_identifier);
66
67 env.ApplicationState
68 .Feature
69 .TreeViews
70 .ActiveTreeViews
71 .lock()
72 .map_err(Utility::MapApplicationStateLockErrorToCommonError)?
73 .remove(&view_identifier);
74
75 env.ApplicationHandle
76 .emit("sky://tree-view/dispose", json!({ "ViewIdentifier": view_identifier }))
77 .map_err(|Error| CommonError::UserInterfaceInteraction { Reason:Error.to_string() })
78}