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
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	// For now, assume all extension providers come from the main sidecar.
33	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
75/// Unregisters a tree data provider.
76pub(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}