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
19 view_identifier:String,
20
21 options:serde_json::Value,
22) -> Result<(), CommonError> {
23 dev_log!(
24 "extensions",
25 "[TreeViewProvider] Registering data provider for view: {}",
26 view_identifier
27 );
28
29 let options_dto:TreeViewOptionsDTO = serde_json::from_value(options.clone())
30 .map_err(|error| CommonError::InvalidArgument { ArgumentName:"Options".into(), Reason:error.to_string() })?;
31
32 let side_car_identifier = "cocoon-main".to_string();
34
35 let new_state = TreeViewStateDTO {
36 ViewIdentifier:view_identifier.clone(),
37
38 Provider:None,
39
40 SideCarIdentifier:Some(side_car_identifier),
41
42 CanSelectMany:options_dto.CanSelectMany,
43
44 HasHandleDrag:options_dto.HasHandleDrag,
45
46 HasHandleDrop:options_dto.HasHandleDrop,
47
48 Message:None,
49
50 Title:None,
51
52 Description:None,
53
54 Badge:None,
55 };
56
57 env.ApplicationState
58 .Feature
59 .TreeViews
60 .ActiveTreeViews
61 .lock()
62 .map_err(Utility::ErrorMapping::MapApplicationStateLockErrorToCommonError)?
63 .insert(view_identifier.clone(), new_state);
64
65 env.ApplicationHandle
66 .emit(
67 SkyEvent::TreeViewCreate.AsStr(),
68 json!({ "viewId": view_identifier, "options": options }),
69 )
70 .map_err(|Error| CommonError::UserInterfaceInteraction { Reason:Error.to_string() })?;
71
72 Ok(())
73}
74
75pub(super) async fn unregister_tree_data_provider(
77 env:&crate::Environment::MountainEnvironment::MountainEnvironment,
78
79 view_identifier:String,
80) -> Result<(), CommonError> {
81 dev_log!(
82 "extensions",
83 "[TreeViewProvider] Unregistering data provider for view: {}",
84 view_identifier
85 );
86
87 env.ApplicationState
88 .Feature
89 .TreeViews
90 .ActiveTreeViews
91 .lock()
92 .map_err(Utility::ErrorMapping::MapApplicationStateLockErrorToCommonError)?
93 .remove(&view_identifier);
94
95 env.ApplicationHandle
96 .emit(SkyEvent::TreeViewDispose.AsStr(), json!({ "viewId": view_identifier }))
97 .map_err(|Error| CommonError::UserInterfaceInteraction { Reason:Error.to_string() })
98}