| 26 | #[tracing::instrument(level = "debug", skip(extension))] |
| 27 | #[component] |
| 28 | pub fn ProviderIcon(#[prop()] extension: String) -> impl IntoView { |
| 29 | let provider_icon = RwSignal::new(String::new()); |
| 30 | let extension_clone = extension.clone(); |
| 31 | spawn_local(async move { |
| 32 | if !extension_clone.is_empty() |
| 33 | && extension_clone != "youtube" |
| 34 | && extension_clone != "spotify" |
| 35 | { |
| 36 | let res = get_extension_icon(PackageNameArgs { |
| 37 | package_name: extension_clone, |
| 38 | }) |
| 39 | .await; |
| 40 | |
| 41 | if let Ok(res) = res { |
| 42 | provider_icon.set(res); |
| 43 | } else { |
| 44 | tracing::error!("Failed to get provider icon {:?}", res); |
| 45 | } |
| 46 | } |
| 47 | }); |
| 48 | view! { |
| 49 | <div class="d-flex provider-icon"> |
| 50 | {move || { |
| 51 | let extension = extension.as_str(); |
| 52 | if extension == "youtube" { |
| 53 | view! { <YoutubeIcon /> }.into_any() |
| 54 | } else if extension == "spotify" { |
| 55 | view! { <SpotifyIcon /> }.into_any() |
| 56 | } else { |
| 57 | view! { |
| 58 | <img |
| 59 | style:display=if provider_icon.get().is_empty() { |
| 60 | "none" |
| 61 | } else { |
| 62 | "block" |
| 63 | } |
| 64 | referrerpolicy="no-referrer" |
| 65 | src=move || provider_icon.get() |
| 66 | /> |
| 67 | } |
| 68 | .into_any() |
| 69 | } |
| 70 | }} |
| 71 | </div> |
| 72 | } |
| 73 | } |