aboutsummaryrefslogtreecommitdiff
path: root/server/src/routes/ui/browser.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/routes/ui/browser.rs')
-rw-r--r--server/src/routes/ui/browser.rs57
1 files changed, 33 insertions, 24 deletions
diff --git a/server/src/routes/ui/browser.rs b/server/src/routes/ui/browser.rs
index 7affbac..13f30c8 100644
--- a/server/src/routes/ui/browser.rs
+++ b/server/src/routes/ui/browser.rs
@@ -6,13 +6,13 @@
use super::{
account::session::Session,
error::MyError,
- layout::DynLayoutPage,
+ layout::{DynLayoutPage, LayoutPage},
node::NodeCard,
sort::{filter_and_sort_nodes, NodeFilterSort, NodeFilterSortForm, SortOrder, SortProperty},
};
-use crate::{database::Database, uri};
-use jellycommon::Visibility;
-use rocket::{get, State};
+use crate::{database::Database, routes::api::AcceptJson, uri};
+use jellycommon::{api::ApiItemsResponse, Visibility};
+use rocket::{get, serde::json::Json, Either, State};
/// This function is a stub and only useful for use in the uri! macro.
#[get("/items")]
@@ -22,9 +22,10 @@ pub fn r_all_items() {}
pub fn r_all_items_filter(
sess: Session,
db: &State<Database>,
+ aj: AcceptJson,
page: Option<usize>,
filter: NodeFilterSort,
-) -> Result<DynLayoutPage<'_>, MyError> {
+) -> Result<Either<DynLayoutPage<'_>, Json<ApiItemsResponse>>, MyError> {
let mut items = db.list_nodes_with_udata(sess.user.name.as_str())?;
items.retain(|(n, _)| matches!(n.visibility, Visibility::Visible));
@@ -42,26 +43,34 @@ pub fn r_all_items_filter(
let to = (offset + page_size).min(items.len());
let max_page = items.len().div_ceil(page_size);
- Ok(super::layout::LayoutPage {
- title: "All Items".to_owned(),
- content: markup::new! {
- .page.dir {
- h1 { "All Items" }
- @NodeFilterSortForm { f: &filter }
- ul.children { @for (node, udata) in &items[from..to] {
- li {@NodeCard { node, udata }}
- }}
- p.pagecontrols {
- span.current { "Page " @{page + 1} " of " @max_page " " }
- @if page > 0 {
- a.prev[href=uri!(r_all_items_filter(Some(page - 1), filter.clone()))] { "Previous page" } " "
- }
- @if page + 1 < max_page {
- a.next[href=uri!(r_all_items_filter(Some(page + 1), filter.clone()))] { "Next page" }
+ Ok(if *aj {
+ Either::Right(Json(ApiItemsResponse {
+ count: items.len(),
+ pages: max_page,
+ items: items[from..to].to_vec(),
+ }))
+ } else {
+ Either::Left(LayoutPage {
+ title: "All Items".to_owned(),
+ content: markup::new! {
+ .page.dir {
+ h1 { "All Items" }
+ @NodeFilterSortForm { f: &filter }
+ ul.children { @for (node, udata) in &items[from..to] {
+ li {@NodeCard { node, udata }}
+ }}
+ p.pagecontrols {
+ span.current { "Page " @{page + 1} " of " @max_page " " }
+ @if page > 0 {
+ a.prev[href=uri!(r_all_items_filter(Some(page - 1), filter.clone()))] { "Previous page" } " "
+ }
+ @if page + 1 < max_page {
+ a.next[href=uri!(r_all_items_filter(Some(page + 1), filter.clone()))] { "Next page" }
+ }
}
}
- }
- },
- ..Default::default()
+ },
+ ..Default::default()
+ })
})
}