use dioxus::prelude::*;
use crate::settings::appearance_settings::AppearanceSettings;
use crate::settings::general_settings::GeneralSettings;
use crate::settings::labs_settings::LabsSettings;
use crate::settings::notification_settings::NotificationSettings;
use crate::settings::security_settings::SecuritySettings;
use crate::settings::session_settings::SessionSettings;
use crate::settings::threepid_settings::ThreePidSettings;
use crate::settings::voice_video_settings::VoiceVideoSettings;
#[derive(Clone, Debug, PartialEq)]
enum SettingsTab {
General,
LinkedAccounts,
Appearance,
Notifications,
Security,
VoiceVideo,
Sessions,
Labs,
}
#[component]
pub fn SettingsScreen() -> Element {
let mut active_tab = use_signal(|| SettingsTab::General);
let tabs = vec![
("General", SettingsTab::General),
("Email & Phone", SettingsTab::LinkedAccounts),
("Appearance", SettingsTab::Appearance),
("Notifications", SettingsTab::Notifications),
("Security", SettingsTab::Security),
("Voice & Video", SettingsTab::VoiceVideo),
("Sessions", SettingsTab::Sessions),
("Labs", SettingsTab::Labs),
];
rsx! {
div {
class: "settings-screen",
nav {
class: "settings-screen__tabs",
for (label, tab) in tabs {
button {
class: if *active_tab.read() == tab {
"settings-screen__tab settings-screen__tab--active"
} else {
"settings-screen__tab"
},
onclick: move |_| active_tab.set(tab.clone()),
"{label}"
}
}
}
div {
class: "settings-screen__content",
match *active_tab.read() {
SettingsTab::General => rsx! { GeneralSettings {} },
SettingsTab::LinkedAccounts => rsx! { ThreePidSettings {} },
SettingsTab::Appearance => rsx! { AppearanceSettings {} },
SettingsTab::Notifications => rsx! { NotificationSettings {} },
SettingsTab::Security => rsx! { SecuritySettings {} },
SettingsTab::VoiceVideo => rsx! { VoiceVideoSettings {} },
SettingsTab::Sessions => rsx! { SessionSettings {} },
SettingsTab::Labs => rsx! { LabsSettings {} },
}
}
}
}
}