MCPcopy Create free account
hub / github.com/Moosync/Moosync / Sidebar

Function Sidebar

src/components/sidebar.rs:115–207  ·  view source on GitHub ↗
(#[prop()] tabs: Vec<Tab>)

Source from the content-addressed store, hash-verified

113#[tracing::instrument(level = "debug", skip(tabs))]
114#[component]
115pub fn Sidebar(#[prop()] tabs: Vec<Tab>) -> impl IntoView {
116 let mut active_write_signals = vec![];
117 let mut active_read_signals = vec![];
118 for _ in 0..tabs.len() {
119 let (read, write) = signal(false);
120 active_read_signals.push(read);
121 active_write_signals.push(write);
122 }
123
124 let (active_tab, set_active_tab) = signal(1);
125 active_write_signals[0].set(true);
126
127 let tab_urls: Vec<String> = tabs.iter().map(|v| v.url.clone()).collect();
128
129 let navigate = leptos_router::hooks::use_navigate();
130
131 let ui_store = expect_context::<RwSignal<UiStore>>();
132
133 let (sidebar_open, set_sidebar_open) = create_slice(
134 ui_store,
135 |u| u.get_sidebar_open(),
136 |u, val| u.set_sidebar_open(val),
137 );
138
139 Effect::new(move || {
140 let active_tab = active_tab.get();
141 for (i, signal) in active_write_signals.iter().enumerate() {
142 signal.set(i == active_tab);
143 }
144 let url = tab_urls.get(active_tab);
145 if let Some(url) = url {
146 if url == "queue" {
147 ui_store.update(|s| s.show_queue(true));
148 } else {
149 navigate(url.as_str(), Default::default());
150 }
151 }
152 });
153
154 let is_mobile = create_read_slice(ui_store, |u| u.get_is_mobile()).get();
155
156 view! {
157 <div class="sidebar-container sidebar" class:sidebar-mobile=is_mobile>
158 <div tabindex="-1" class="b-sidebar-outer">
159 <div
160 class="b-sidebar gradient sidebar-top-low-spacing"
161 id="sidebar"
162 tabindex="-1"
163 role="dialog"
164 aria-modal="false"
165 style:width=move || if sidebar_open.get() { "261px" } else { "70px" }
166 >
167 <header class="b-sidebar-header">
168 <div class="d-flex w-100 mt-3 justify-content-between"></div>
169 </header>
170 <div class="b-sidebar-body">
171 <div class="extra-margin-top">
172 <div

Callers

nothing calls this directly

Calls 7

setMethod · 0.80
cloneMethod · 0.80
get_sidebar_openMethod · 0.80
set_sidebar_openMethod · 0.80
getMethod · 0.80
show_queueMethod · 0.80
get_is_mobileMethod · 0.80

Tested by

no test coverage detected