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