Mountain/Environment/TreeViewProvider/
Registration.rs1use CommonLibrary::{Error::CommonError::CommonError, TreeView::DTO::TreeViewOptionsDTO::TreeViewOptionsDTO};
6use serde_json::json;
7use tauri::Emitter;
8
9use crate::{ApplicationState::DTO::TreeViewStateDTO::TreeViewStateDTO, Environment::Utility, dev_log};
10
11pub(super) async fn register_tree_data_provider(
13 env:&crate::Environment::MountainEnvironment::MountainEnvironment,
14 view_identifier:String,
15 options:serde_json::Value,
16) -> Result<(), CommonError> {
17 dev_log!(
18 "extensions",
19 "[TreeViewProvider] Registering data provider for view: {}",
20 view_identifier
21 );
22
23 let options_dto:TreeViewOptionsDTO = serde_json::from_value(options.clone())
24 .map_err(|error| CommonError::InvalidArgument { ArgumentName:"Options".into(), Reason:error.to_string() })?;
25
26 let side_car_identifier = "cocoon-main".to_string();
28
29 let new_state = TreeViewStateDTO {
30 ViewIdentifier:view_identifier.clone(),
31 Provider:None,
32 SideCarIdentifier:Some(side_car_identifier),
33 CanSelectMany:options_dto.CanSelectMany,
34 HasHandleDrag:options_dto.HasHandleDrag,
35 HasHandleDrop:options_dto.HasHandleDrop,
36 Message:None,
37 Title:None,
38 Description:None,
39 Badge: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 dev_log!(
66 "extensions",
67 "[TreeViewProvider] Unregistering data provider for view: {}",
68 view_identifier
69 );
70
71 env.ApplicationState
72 .Feature
73 .TreeViews
74 .ActiveTreeViews
75 .lock()
76 .map_err(Utility::MapApplicationStateLockErrorToCommonError)?
77 .remove(&view_identifier);
78
79 env.ApplicationHandle
80 .emit("sky://tree-view/dispose", json!({ "ViewIdentifier": view_identifier }))
81 .map_err(|Error| CommonError::UserInterfaceInteraction { Reason:Error.to_string() })
82}