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 {
{
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! {