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::{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
11/// Registers a new tree data provider.
12pub(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	// For now, assume all extension providers come from the main sidecar.
27	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
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	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}