From 6170027ab1f23b5876c9663829425c9334cf7cb6 Mon Sep 17 00:00:00 2001 From: HWienhold Date: Sun, 10 Nov 2024 13:03:41 +0100 Subject: [PATCH] link version to browse --- src/components/file_tree.rs | 38 ++++++++++++++++++++++--------------- src/components/search.rs | 33 ++++++++++++++++++++++++++++---- src/tailwind.css | 2 +- 3 files changed, 53 insertions(+), 20 deletions(-) diff --git a/src/components/file_tree.rs b/src/components/file_tree.rs index 0fbf1f0..7f9b10c 100644 --- a/src/components/file_tree.rs +++ b/src/components/file_tree.rs @@ -274,7 +274,7 @@ pub fn FileTree(props: &FileTreeProps) -> Html { event.prevent_default(); } }; - + let show_button = props.diff.left.version.version != props.diff.right.version.version; let search_filter = use_state(|| SearchFilter::All); let prefix = Rc::new(Utf8PathBuf::default()); let active = Rc::new(props.path.clone()); @@ -290,20 +290,28 @@ pub fn FileTree(props: &FileTreeProps) -> Html {
-
- - -
+ { + if show_button { + html! { +
+ + +
+ } + } else { + html! {} + } + }
{ entries diff --git a/src/components/search.rs b/src/components/search.rs index 217c7fe..336fdc8 100644 --- a/src/components/search.rs +++ b/src/components/search.rs @@ -1,6 +1,6 @@ use crate::{ data::{CrateDetail, SearchResponse, SummaryCategory, SummaryResponse}, - Link, Route, + version, Link, Route, }; use gloo_net::http::Request; use implicit_clone::unsync::IString; @@ -172,14 +172,39 @@ struct CardProps { #[function_component] fn Card(props: &CardProps) -> Html { - let link = Route::Crate { - krate: props.details.id.clone(), + let version_clicked = use_state_eq(|| false); + let on_version_click = { + let clicked = version_clicked.clone(); + Callback::from(move |e: MouseEvent| { + e.stop_propagation(); + clicked.set(true); + }) }; + + // reset link + { + let clicked = version_clicked.clone(); + use_effect_with((), move |_| { + clicked.set(false); + }); + } + + let link = if *version_clicked { + Route::Browse { + krate: props.details.id.clone(), + version: version::VersionId::Exact(props.details.max_version.clone()), + } + } else { + Route::Crate { + krate: props.details.id.clone(), + } + }; + html! {

{&props.details.id}

- {props.details.max_version.to_string()} + {props.details.max_version.to_string()} if let Some(url) = &props.details.repository { diff --git a/src/tailwind.css b/src/tailwind.css index aa62866..95b617b 100644 --- a/src/tailwind.css +++ b/src/tailwind.css @@ -226,7 +226,7 @@ } .card .header .version { - @apply text-gray-600 dark:text-gray-400; + @apply text-gray-600 dark:text-gray-400 whitespace-nowrap overflow-hidden text-ellipsis; } .card .header .icon {