From 10f891b1cd9467d5fb8ec3f19d3ebb5d744a5561 Mon Sep 17 00:00:00 2001 From: Manuel Gugger Date: Thu, 2 Jun 2022 18:46:24 +0200 Subject: [PATCH] add paging --- actix_admin/actix_admin_macros/src/lib.rs | 9 ++-- actix_admin/src/model.rs | 2 +- actix_admin/src/routes/list.rs | 6 ++- actix_admin/src/view_model.rs | 2 +- actix_admin/templates/list.html | 63 ++++++++++++++-------- database.db-wal | Bin 107152 -> 148352 bytes 6 files changed, 53 insertions(+), 29 deletions(-) diff --git a/actix_admin/actix_admin_macros/src/lib.rs b/actix_admin/actix_admin_macros/src/lib.rs index 2dd6e6a..c795c48 100644 --- a/actix_admin/actix_admin_macros/src/lib.rs +++ b/actix_admin/actix_admin_macros/src/lib.rs @@ -96,8 +96,8 @@ pub fn derive_crud_fns(input: proc_macro::TokenStream) -> proc_macro::TokenStrea #[async_trait(?Send)] impl ActixAdminViewModelTrait for Entity { - async fn list(db: &DatabaseConnection, page: usize, entities_per_page: usize) -> Vec { - let entities = Entity::list_model(db, 1, 5).await; + async fn list(db: &DatabaseConnection, page: usize, entities_per_page: usize) -> (usize, Vec) { + let entities = Entity::list_model(db, page, entities_per_page).await; entities } @@ -146,11 +146,12 @@ pub fn derive_crud_fns(input: proc_macro::TokenStream) -> proc_macro::TokenStrea #[async_trait] impl ActixAdminModelTrait for Entity { - async fn list_model(db: &DatabaseConnection, page: usize, posts_per_page: usize) -> Vec { + async fn list_model(db: &DatabaseConnection, page: usize, posts_per_page: usize) -> (usize, Vec) { use sea_orm::{ query::* }; let paginator = Entity::find() .order_by_asc(Column::Id) .paginate(db, posts_per_page); + let num_pages = paginator.num_pages().await.ok().unwrap(); let entities = paginator .fetch_page(page - 1) .await @@ -162,7 +163,7 @@ pub fn derive_crud_fns(input: proc_macro::TokenStream) -> proc_macro::TokenStrea ); } - model_entities + (num_pages, model_entities) } fn get_fields() -> Vec<(String, ActixAdminField)> { diff --git a/actix_admin/src/model.rs b/actix_admin/src/model.rs index a313db5..1bf7a13 100644 --- a/actix_admin/src/model.rs +++ b/actix_admin/src/model.rs @@ -11,7 +11,7 @@ pub trait ActixAdminModelTrait { db: &DatabaseConnection, page: usize, posts_per_page: usize, - ) -> Vec; + ) -> (usize, Vec); fn get_fields() -> Vec<(String, ActixAdminField)>; } diff --git a/actix_admin/src/routes/list.rs b/actix_admin/src/routes/list.rs index 1ad1ed4..2143dd9 100644 --- a/actix_admin/src/routes/list.rs +++ b/actix_admin/src/routes/list.rs @@ -34,14 +34,16 @@ pub async fn list( .unwrap_or(DEFAULT_ENTITIES_PER_PAGE); let db = data.get_db(); - let entities: Vec = E::list(db, page, entities_per_page).await; + let result: (usize, Vec) = E::list(db, page, entities_per_page).await; + let entities = result.1; + let num_pages = result.0; let mut ctx = Context::new(); ctx.insert("entity_names", &entity_names); ctx.insert("entities", &entities); ctx.insert("page", &page); ctx.insert("entities_per_page", &entities_per_page); - ctx.insert("num_pages", "5" /*&num_pages*/); + ctx.insert("num_pages", &num_pages); ctx.insert("view_model", &view_model); let body = TERA diff --git a/actix_admin/src/view_model.rs b/actix_admin/src/view_model.rs index fa9d4bd..3ef111c 100644 --- a/actix_admin/src/view_model.rs +++ b/actix_admin/src/view_model.rs @@ -11,7 +11,7 @@ pub trait ActixAdminViewModelTrait { db: &DatabaseConnection, page: usize, entities_per_page: usize, - ) -> Vec; + ) -> (usize, Vec); // TODO: Replace return value with proper Result Type containing Ok or Err async fn create_entity(db: &DatabaseConnection, model: ActixAdminModel) -> ActixAdminModel; diff --git a/actix_admin/templates/list.html b/actix_admin/templates/list.html index 1900ece..b0ff559 100644 --- a/actix_admin/templates/list.html +++ b/actix_admin/templates/list.html @@ -1,27 +1,48 @@ {% extends "base.html" %} {% block content %} -Create - - - {% for model_field in view_model.fields -%} - ++ +
{{ model_field[0] }}
+ + + {% for model_field in view_model.fields -%} + + {%- endfor %} + + + + + {% for entity in entities -%} + + {% for model_field in view_model.fields -%} + + {%- endfor %} + + {%- endfor %} - - - - {% for entity in entities -%} - - {% for model_field in view_model.fields -%} - - {%- endfor %} - - - - {%- endfor %} + + + + + +
{{ model_field[0] }} + + +
{{ entity.values | get(key=model_field[0]) }} + + 🗑 + +
{{ entity.values | get(key=model_field[0]) }}Edit -
- -
-
+
+ « + {% for i in range(end=num_pages) %} + {{ i + 1 }} + {%- endfor %} + » +
{% endblock content %} \ No newline at end of file diff --git a/database.db-wal b/database.db-wal index 587a76c7dc6a5c0d1cc78e38066b2f74575b9260..fe616b166c8f402a082f69d30e3622cc10708c21 100644 GIT binary patch delta 779 zcmbPml&ztivtbM4gheV03=B*_%<$Fx&HDQWQs3sOT3>vo-MxqxB*FiXf&VlA!_A2T zSNY8aSXmgvrBl*U(!n@AwTPRAg+W-<(8w5sfa;lnm<49g+1npxhTr&dbMu0aFZmf+ zr*|_%Sz{bKLDVdU*Se%$roRS7aBw9T? zlJBqEqpv?8RWzGR{@gXs4o;4l~G