Skip to main content

Mountain/Environment/TreeViewProvider/
UIState.rs

1//! # Tree View UI State Helpers
2//!
3//! Internal helper functions for updating tree view UI properties
4//! (message, title, badge).
5
6use CommonLibrary::{Error::CommonError::CommonError, IPC::SkyEvent::SkyEvent};
7use serde_json::json;
8use tauri::Emitter;
9
10use crate::{Environment::Utility, dev_log};
11
12/// Updates the tree view message displayed in the UI.
13pub(super) async fn set_tree_view_message(
14	env:&crate::Environment::MountainEnvironment::MountainEnvironment,
15
16	view_identifier:String,
17
18	message:Option<String>,
19) -> Result<(), CommonError> {
20	dev_log!(
21		"extensions",
22		"[TreeViewProvider] Setting message for view '{}': {:?}",
23		view_identifier,
24		message
25	);
26
27	{
28		let mut tree_view_guard = env
29			.ApplicationState
30			.Feature
31			.TreeViews
32			.ActiveTreeViews
33			.lock()
34			.map_err(Utility::ErrorMapping::MapApplicationStateLockErrorToCommonError)?;
35
36		if let Some(view_state) = tree_view_guard.get_mut(&view_identifier) {
37			view_state.Message = message.clone();
38		}
39	}
40
41	env.ApplicationHandle
42		.emit(
43			SkyEvent::TreeViewSetMessage.AsStr(),
44			json!({ "viewId": view_identifier, "message": message }),
45		)
46		.map_err(|Error| {
47			CommonError::UserInterfaceInteraction { Reason:format!("Failed to emit tree view message: {}", Error) }
48		})
49}
50
51/// Updates the tree view's title and description.
52pub(super) async fn set_tree_view_title(
53	env:&crate::Environment::MountainEnvironment::MountainEnvironment,
54
55	view_identifier:String,
56
57	title:Option<String>,
58
59	description:Option<String>,
60) -> Result<(), CommonError> {
61	dev_log!(
62		"extensions",
63		"[TreeViewProvider] Setting title/description for view '{}': {:?} {:?}",
64		view_identifier,
65		title,
66		description
67	);
68
69	{
70		let mut tree_view_guard = env
71			.ApplicationState
72			.Feature
73			.TreeViews
74			.ActiveTreeViews
75			.lock()
76			.map_err(Utility::ErrorMapping::MapApplicationStateLockErrorToCommonError)?;
77
78		if let Some(view_state) = tree_view_guard.get_mut(&view_identifier) {
79			view_state.Title = title.clone();
80
81			view_state.Description = description.clone();
82		}
83	}
84
85	env.ApplicationHandle
86		.emit(
87			SkyEvent::TreeViewSetTitle.AsStr(),
88			json!({
89				"viewId": view_identifier,
90				"title": title,
91				"description": description,
92			}),
93		)
94		.map_err(|Error| {
95			CommonError::UserInterfaceInteraction { Reason:format!("Failed to emit tree view title: {}", Error) }
96		})
97}
98
99/// Sets a badge on the tree view.
100pub(super) async fn set_tree_view_badge(
101	env:&crate::Environment::MountainEnvironment::MountainEnvironment,
102
103	view_identifier:String,
104
105	badge:Option<serde_json::Value>,
106) -> Result<(), CommonError> {
107	dev_log!(
108		"extensions",
109		"[TreeViewProvider] Setting badge for view '{}': {:?}",
110		view_identifier,
111		badge
112	);
113
114	// Update state (badge field may need to be added to TreeViewStateDTO)
115	{
116		let mut tree_view_guard = env
117			.ApplicationState
118			.Feature
119			.TreeViews
120			.ActiveTreeViews
121			.lock()
122			.map_err(Utility::ErrorMapping::MapApplicationStateLockErrorToCommonError)?;
123
124		if let Some(view_state) = tree_view_guard.get_mut(&view_identifier) {
125			// Store badge in ViewState
126			if let Some(badge_value) = &badge {
127				let badge_str = badge_value.to_string();
128
129				if let Err(e) = view_state.SetBadge(badge_str) {
130					dev_log!("extensions", "warn: Failed to set badge for view '{}': {}", view_identifier, e);
131				}
132			}
133		}
134	}
135
136	// Emit to frontend
137	env.ApplicationHandle
138		.emit(
139			SkyEvent::TreeViewSetBadge.AsStr(),
140			json!({ "viewId": view_identifier, "badge": badge }),
141		)
142		.map_err(|Error| {
143			CommonError::UserInterfaceInteraction { Reason:format!("Failed to emit tree view badge: {}", Error) }
144		})
145}