Sort projects by name on the home screen
Nice work on the rust code 🦀
To make it a bit more rust idiomatic, I think we could change it to something like
Just in general we shouldn’t use expect, since it makes the app panic, and we are panicking here if a repo has no project payload, not regarding a missing name.
diff --git a/crates/radicle-types/src/repo.rs b/crates/radicle-types/src/repo.rs
index 7594e2e..cf4d2da 100644
--- a/crates/radicle-types/src/repo.rs
+++ b/crates/radicle-types/src/repo.rs
@@ -86,7 +86,7 @@ pub struct SupportedPayloads {
#[ts(export)]
#[ts(export_to = "repo/")]
pub struct ProjectPayload {
- pub data: ProjectPayloadData,
+ data: ProjectPayloadData,
meta: ProjectPayloadMeta,
}
@@ -94,6 +94,10 @@ impl ProjectPayload {
pub fn new(data: ProjectPayloadData, meta: ProjectPayloadMeta) -> Self {
Self { data, meta }
}
+
+ pub fn name(&self) -> &str {
+ &self.data.name
+ }
}
impl TryFrom<identity::doc::Payload> for ProjectPayloadData {
diff --git a/crates/radicle-types/src/traits/repo.rs b/crates/radicle-types/src/traits/repo.rs
index 5af0df2..9f187b8 100644
--- a/crates/radicle-types/src/traits/repo.rs
+++ b/crates/radicle-types/src/traits/repo.rs
@@ -57,26 +57,7 @@ pub trait Repo: Profile {
entries.push(repo_info)
}
- entries.sort_by(|a, b| {
- let title_a = a
- .payloads
- .project
- .as_ref()
- .expect("Project payload always has a name")
- .data
- .name
- .as_str();
- let title_b = b
- .payloads
- .project
- .as_ref()
- .expect("Project payload always has a name")
- .data
- .name
- .as_str();
-
- title_a.to_lowercase().cmp(&title_b.to_lowercase())
- });
+ entries.sort_by_key(|repo_info| repo_info.payloads.project.as_ref().map(|p| p.name().to_lowercase()));
Ok::<_, Error>(entries)
}
Apply Sebastian’s suggestions
Add repo fuzzy finder to home screen
Clear input on blur
Update wording
Show a message when there are no matches