Skip to main content

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	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
15/// Registers a new tree data provider.
16pub(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	// For now, assume all extension providers come from the main sidecar.
31	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
64/// Unregisters a tree data provider.
65pub(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}