Add pagination for notifications
And correctly close an <a> tag
This commit is contained in:
		
							parent
							
								
									18125ab398
								
							
						
					
					
						commit
						4b0aba62f3
					
				| @ -35,4 +35,13 @@ impl Notification { | ||||
|             .load::<Notification>(conn) | ||||
|             .expect("Couldn't load user notifications") | ||||
|     } | ||||
| 
 | ||||
|     pub fn page_for_user(conn: &PgConnection, user: &User, (min, max): (i32, i32)) -> Vec<Notification> { | ||||
|         notifications::table.filter(notifications::user_id.eq(user.id)) | ||||
|             .order_by(notifications::creation_date.desc()) | ||||
|             .offset(min.into()) | ||||
|             .limit((max - min).into()) | ||||
|             .load::<Notification>(conn) | ||||
|             .expect("Couldn't load user notifications page") | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -54,6 +54,7 @@ fn main() { | ||||
|             routes::likes::create, | ||||
|             routes::likes::create_auth, | ||||
| 
 | ||||
|             routes::notifications::paginated_notifications, | ||||
|             routes::notifications::notifications, | ||||
|             routes::notifications::notifications_auth, | ||||
| 
 | ||||
|  | ||||
| @ -3,13 +3,21 @@ use rocket_contrib::Template; | ||||
| 
 | ||||
| use plume_common::utils; | ||||
| use plume_models::{db_conn::DbConn, notifications::Notification, users::User}; | ||||
| use routes::Page; | ||||
| 
 | ||||
| #[get("/notifications?<page>")] | ||||
| fn paginated_notifications(conn: DbConn, user: User, page: Page) -> Template { | ||||
|     Template::render("notifications/index", json!({ | ||||
|         "account": user, | ||||
|         "notifications": Notification::page_for_user(&*conn, &user, page.limits()), | ||||
|         "page": page.page, | ||||
|         "n_pages": Page::total(Notification::find_for_user(&*conn, &user).len() as i32) | ||||
|     })) | ||||
| } | ||||
| 
 | ||||
| #[get("/notifications")] | ||||
| fn notifications(conn: DbConn, user: User) -> Template { | ||||
|     Template::render("notifications/index", json!({ | ||||
|         "account": user, | ||||
|         "notifications": Notification::find_for_user(&*conn, &user) | ||||
|     })) | ||||
|     paginated_notifications(conn, user, Page::first()) | ||||
| } | ||||
| 
 | ||||
| #[get("/notifications", rank = 2)] | ||||
|  | ||||
| @ -1,4 +1,5 @@ | ||||
| {% extends "base" %} | ||||
| {% import "macros" as macros %} | ||||
| 
 | ||||
| {% block title %} | ||||
| {{ "Notifications" | _ }} | ||||
| @ -9,11 +10,12 @@ | ||||
|     <div class="list"> | ||||
|         {% for notification in notifications %} | ||||
|             <div class="card"> | ||||
|                 <h3><a href="{% if notification.link %}{{ notification.link }}/{% else %}#{% endif %}">{{ notification.title | _(data=notification.data) }}</h3> | ||||
|                 <h3><a href="{% if notification.link %}{{ notification.link }}/{% else %}#{% endif %}">{{ notification.title | _(data=notification.data) }}</a></h3> | ||||
|                 {% if notification.content %} | ||||
|                     <p>{{ notification.content }}</p> | ||||
|                 {% endif %} | ||||
|             </div> | ||||
|         {% endfor %} | ||||
|     </div> | ||||
|     {{ macros::paginate(page=page, total=n_pages) }} | ||||
| {% endblock content %} | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user