Skip to content

Commit

Permalink
Fixes issue ocaml#1588 - Paginate the Package Search Results
Browse files Browse the repository at this point in the history
  • Loading branch information
Girish Jangam authored and Girish Jangam committed Oct 18, 2023
1 parent e326bbf commit 49b9626
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 18 deletions.
24 changes: 12 additions & 12 deletions src/ocamlorg_frontend/components/pagination.eml
@@ -1,36 +1,36 @@
let link ~base_url ~page ~current =
let link ~base_url ~page ~current ~query =
let active_class = "border-2 border-current text-primary-600" in
let non_active_class = "border border-body-100 text-lighter hover:bg-gray-50 hover:no-underline" in
<a href="<%s base_url %>?p=<%i page %>"
<a href="<%s base_url %>?p=<%i page %><%s if query = "" then "" else "&q=" ^ query %>"
class="w-10 h-10 lg:w-14 lg:h-14 rounded-lg flex items-center justify-center <%s if page = current then active_class else non_active_class %>">
<%i page %>
</a>

let left_arrow ~base_url page =
<a href="<%s base_url %>?p=<%i page - 1 %>"
let left_arrow ~base_url page ~query=
<a href="<%s base_url %>?p=<%i page - 1 %><%s if query = "" then "" else "&q=" ^ query %>"
class="w-10 h-10 lg:w-14 lg:h-14 border border-body-100 rounded-lg flex items-center justify-center text-lighter hover:bg-gray-50 hover:no-underline">
<%s! Icons.chevron_left "h-5 w-5" %>
</a>

let right_arrow ~base_url page =
<a href="<%s base_url %>?p=<%i page + 1 %>"
let right_arrow ~base_url page ~query=
<a href="<%s base_url %>?p=<%i page + 1 %><%s if query = "" then "" else "&q=" ^ query %>"
class="w-10 h-10 lg:w-14 lg:h-14 border border-body-100 rounded-lg flex items-center justify-center text-lighter hover:bg-gray-50 hover:no-underline">
<%s! Icons.chevron_right "h-5 w-5" %>
</a>

let render ~total_page_count ~page_number ~base_url =
let render ~total_page_count ~page_number ~base_url ~query=
<div class="pt-16 flex items-center justify-center space-x-2.5">
<%s! if page_number != 1 then (left_arrow ~base_url page_number) else "" %>
<%s! link ~base_url ~page:1 ~current:page_number %>
<%s! if page_number != 1 then (left_arrow ~base_url page_number ~query) else "" %>
<%s! link ~base_url ~page:1 ~current:page_number ~query %>
<% if page_number >= 4 then ( %>
<span class="w-10 h-10 lg:w-14 lg:h-14 border-body-100 rounded-lg flex items-center justify-center text-lighter hover:no-underline">...</span>
<% ); %>
<% for page = 2 to (total_page_count - 1) do %>
<%s! if (abs (page_number - page) <= 1) || (page_number = 1 && page = 3) || (page_number = total_page_count && total_page_count - page = 2) then (link ~base_url ~page ~current:page_number) else "" %>
<%s! if (abs (page_number - page) <= 1) || (page_number = 1 && page = 3) || (page_number = total_page_count && total_page_count - page = 2) then (link ~base_url ~page ~current:page_number ~query) else "" %>
<% done; %>
<% if total_page_count - page_number >= 3 then ( %>
<span class="w-10 h-10 lg:w-14 lg:h-14 border-body-100 rounded-lg flex items-center justify-center text-lighter hover:no-underline">...</span>
<% ); %>
<%s! link ~base_url ~page:total_page_count ~current:page_number %>
<%s! if page_number != total_page_count then (right_arrow ~base_url page_number) else "" %>
<%s! link ~base_url ~page:total_page_count ~current:page_number ~query %>
<%s! if page_number != total_page_count then (right_arrow ~base_url page_number ~query) else "" %>
</div>
2 changes: 1 addition & 1 deletion src/ocamlorg_frontend/pages/blog.eml
Expand Up @@ -64,7 +64,7 @@ Layout.render
</div>
<% ); %>

<%s! Pagination.render ~total_page_count:planet_pages_number ~page_number:planet_page ~base_url:Url.blog %>
<%s! Pagination.render ~total_page_count:planet_pages_number ~page_number:planet_page ~base_url:Url.blog ~query:""%>
</div>
</div>
<div class="lg:pl-16 space-y-12">
Expand Down
4 changes: 2 additions & 2 deletions src/ocamlorg_frontend/pages/packages_search.eml
@@ -1,4 +1,4 @@
let render ~total ~search ~page ~number_of_pages ~base_url (packages : Package.package list) = Layout.render ~title:"OCaml Packages · Search Result"
let render ~total ~search ~page ~number_of_pages (packages : Package.package list) = Layout.render ~title:"OCaml Packages · Search Result"
~description:"Find the package you need to build your application in the thousands of available OCaml packages."
~canonical:(Url.packages_search ^ "?q=" ^ search)
~active_top_nav_item:Header.Packages @@
Expand Down Expand Up @@ -111,7 +111,7 @@ let render ~total ~search ~page ~number_of_pages ~base_url (packages : Package.p
<% ); %>
</ol>
<% ); %>
<%s! Pagination.render ~total_page_count:number_of_pages ~page_number:page ~base_url:base_url %>
<%s! Pagination.render ~total_page_count:number_of_pages ~page_number:page ~base_url:Url.packages_search ~query:search %>
</div>
</div>
</div>
Expand Down
4 changes: 1 addition & 3 deletions src/ocamlorg_web/lib/handler.ml
Expand Up @@ -601,11 +601,9 @@ let packages_search t req =
paginate ~req ~n:50 packages
in
let results = List.map (Package_helper.frontend_package t) current_items in
let base_url = Url.packages_search ^ "?q=" ^ search ^ "&p="
in
let search = Dream.from_percent_encoded search in

Dream.html (Ocamlorg_frontend.packages_search ~total ~search ~page ~number_of_pages ~base_url results)
Dream.html (Ocamlorg_frontend.packages_search ~total ~search ~page ~number_of_pages results)
| None -> Dream.redirect req Url.packages

let packages_autocomplete_fragment t req =
Expand Down

0 comments on commit 49b9626

Please sign in to comment.