Mountain/Environment/TreeViewProvider/
Registration.rs

1//! # Tree View Registration Helpers
2//!
3//! Internal helper functions for tree view provider registration and lifecycle.
4
5use 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
16/// Registers a new tree data provider.
17pub(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	// For now, assume all extension providers come from the main sidecar.
28	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
60/// Unregisters a tree data provider.
61pub(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}