feat(gui): profile switcher chip in header
Visible visual indicator of the active profile + click-to-swap dropdown.
Closes the last small UX gap pointed out in earlier sessions.
Tauri (crates/jarvis-gui/src/tauri_commands/profile.rs)
- profile_list() → Vec<String> of available profile names
- profile_active() → {name, description, icon, greeting}
- profile_set(name) → swaps active profile, returns new active
Frontend (frontend/src/components/Header.svelte)
- Polls profile_active every 5 seconds.
- Shows a coloured chip with icon+name when profile != "default"
(orange tint, attention-grabbing). For "default" — muted star chip.
- Click opens a dropdown listing all profile names; click one → swap.
- Dropdown closes on outside-click (shared handler with lang dropdown).
- SCSS styled to match existing aesthetic.
Build: cargo build --release -p jarvis-gui green (2m).
Now the user can see at a glance which profile is active (e.g. "💼 work")
without having to ask voice or open Settings.
This commit is contained in:
parent
ea4341fbc9
commit
4efe306b3a
4 changed files with 225 additions and 6 deletions
|
|
@ -128,6 +128,11 @@ fn main() {
|
|||
tauri_commands::memory_remember,
|
||||
tauri_commands::memory_forget,
|
||||
tauri_commands::memory_search,
|
||||
|
||||
// Profile switching
|
||||
tauri_commands::profile_list,
|
||||
tauri_commands::profile_active,
|
||||
tauri_commands::profile_set,
|
||||
])
|
||||
.run(tauri::generate_context!())
|
||||
.expect("error while running tauri application");
|
||||
|
|
|
|||
|
|
@ -53,4 +53,8 @@ pub use scheduler::*;
|
|||
|
||||
// Long-term memory facts
|
||||
mod memory;
|
||||
pub use memory::*;
|
||||
pub use memory::*;
|
||||
|
||||
// Profile switching
|
||||
mod profile;
|
||||
pub use profile::*;
|
||||
38
crates/jarvis-gui/src/tauri_commands/profile.rs
Normal file
38
crates/jarvis-gui/src/tauri_commands/profile.rs
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
//! Tauri commands for profile switching.
|
||||
|
||||
use serde::Serialize;
|
||||
|
||||
#[derive(Serialize)]
|
||||
pub struct ProfileInfo {
|
||||
pub name: String,
|
||||
pub description: String,
|
||||
pub icon: String,
|
||||
pub greeting: String,
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub fn profile_list() -> Vec<String> {
|
||||
jarvis_core::profiles::list()
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub fn profile_active() -> ProfileInfo {
|
||||
let p = jarvis_core::profiles::active();
|
||||
ProfileInfo {
|
||||
name: p.name,
|
||||
description: p.description,
|
||||
icon: p.icon,
|
||||
greeting: p.greeting,
|
||||
}
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub fn profile_set(name: String) -> Result<ProfileInfo, String> {
|
||||
let p = jarvis_core::profiles::set_active(&name)?;
|
||||
Ok(ProfileInfo {
|
||||
name: p.name,
|
||||
description: p.description,
|
||||
icon: p.icon,
|
||||
greeting: p.greeting,
|
||||
})
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue