From ba580a73428204cfa13a462ae44cca1666cdd4d5 Mon Sep 17 00:00:00 2001 From: manuel Date: Sun, 8 Jan 2023 16:06:49 +0100 Subject: [PATCH] create enum for sort_order --- src/routes/list.rs | 13 +++++++-- templates/head.html | 6 ++--- templates/list.html | 65 ++++++++++++++++++++++++--------------------- 3 files changed, 48 insertions(+), 36 deletions(-) diff --git a/src/routes/list.rs b/src/routes/list.rs index 4e32980..f838ac4 100644 --- a/src/routes/list.rs +++ b/src/routes/list.rs @@ -1,4 +1,5 @@ use actix_web::{error, web, Error, HttpRequest, HttpResponse}; +use serde::Serialize; use serde::{Deserialize}; use tera::{Context}; use crate::prelude::*; @@ -13,6 +14,12 @@ use super::{ add_auth_context, user_can_access_page, render_unauthorized}; const DEFAULT_ENTITIES_PER_PAGE: u64 = 10; +#[derive(Debug, Serialize, Deserialize)] +pub enum SortOrder { + Asc, + Desc, +} + #[derive(Debug, Deserialize)] pub struct Params { page: Option, @@ -20,7 +27,7 @@ pub struct Params { render_partial: Option, search: Option, sort_by: Option, - sort_order: Option + sort_order: Option } pub async fn list( @@ -53,7 +60,7 @@ pub async fn list( let db = data.get_db(); let sort_by = params.sort_by.clone().unwrap_or(view_model.primary_key.to_string()); - let sort_order = params.sort_order.clone().unwrap_or(String::new()); + let sort_order = params.sort_order.as_ref().unwrap_or(&SortOrder::Asc); let result = E::list(db, page, entities_per_page, &search).await; match result { Ok(res) => { @@ -94,6 +101,8 @@ pub async fn list( ctx.insert("search", &search); ctx.insert("sort_by", &sort_by); ctx.insert("sort_order", &sort_order); + ctx.insert("sort_order_asc", &SortOrder::Asc); + ctx.insert("sort_order_desc", &SortOrder::Desc); let body = TERA .render("list.html", &ctx) diff --git a/templates/head.html b/templates/head.html index afcd8aa..b6e8b8f 100644 --- a/templates/head.html +++ b/templates/head.html @@ -42,10 +42,10 @@ function sort_by(column) { document.getElementById("sort_by").value = column; current_sort_order = document.getElementById("sort_order").value; - if (current_sort_order == "asc") { - document.getElementById("sort_order").value = "desc"; + if (current_sort_order == "{{ sort_order_asc }}") { + document.getElementById("sort_order").value = "{{ sort_order_desc }}"; } else { - document.getElementById("sort_order").value = "asc"; + document.getElementById("sort_order").value = "{{ sort_order_asc }}"; } document.getElementById('search_form').submit(); } diff --git a/templates/list.html b/templates/list.html index a4901c0..1150583 100644 --- a/templates/list.html +++ b/templates/list.html @@ -33,7 +33,6 @@

@@ -80,9 +79,9 @@ {{ view_model.primary_key | title }} {% if sort_by == view_model.primary_key %} - {% if sort_order == "asc" %} + {% if sort_order == "{{ sort_order_asc }}" %} - {% else %} + {% elif sort_order == "{{ sort_order_desc }}" %} {% endif %} {% endif %} @@ -91,9 +90,9 @@ {{ model_field.field_name | split(pat="_") | join(sep=" ") | title }} {% if sort_by == model_field.field_name %} - {% if sort_order == "asc" %} + {% if sort_order == "{{ sort_order_asc }}" %} - {% else %} + {% elif sort_order == "{{ sort_order_desc }}" %} {% endif %} {% endif %} @@ -141,38 +140,42 @@ -