[Feature] Sets page should be paginated #84

Closed
opened 2025-08-23 02:22:49 +02:00 by deadbattery · 13 comments

The Sets page can take a long time to load if there are a lot of LEGO sets tracked.

The Sets page can take a long time to load if there are a lot of LEGO sets tracked.
FrederikBaerentsen added the Kind/Enhancement label 2025-08-29 16:18:22 +02:00
Owner

This is something i want to implement. I did try and make it using some HTML/CSS tricks like lazyloading, but since the whole data-string is loaded info the HTML page, it didn't help at all.

I am trying to find a fix for it.

This is something i want to implement. I did try and make it using some HTML/CSS tricks like lazyloading, but since the whole data-string is loaded info the HTML page, it didn't help at all. I am trying to find a fix for it.
FrederikBaerentsen added the
Priority
High
label 2025-09-14 10:11:42 +02:00
FrederikBaerentsen added this to the General Improvements project 2025-09-15 20:43:00 +02:00
FrederikBaerentsen moved this to To Do in General Improvements on 2025-09-15 20:44:26 +02:00
FrederikBaerentsen added reference feature/pagination 2025-09-16 15:42:22 +02:00
FrederikBaerentsen self-assigned this 2025-09-16 15:43:01 +02:00
Owner

Working on this on branch feature/pagination.

Currently /parts have been implemented. Working on minifigures and sets next.

Working on this on branch feature/pagination. Currently /parts have been implemented. Working on minifigures and sets next.
FrederikBaerentsen moved this to In Progress in General Improvements on 2025-09-16 15:43:09 +02:00
Owner

@deadbattery

Can you test the branch feature/pagination? You will have to build the docker image yourself or run it locally.

Features

  • Add configurable pagination system with SERVER_SIDE_PAGINATION environment variable

    • Supports search, filtering, and sorting in both modes
    • Works on /sets, /parts and /minifigures
  • Enhance parts page functionality

    • Server-side search triggered by Enter key
    • Server-side sorting
    • Color filtering
    • Mobile-friendly pagination navigation

New environment variables:

# Optional: Enable server-side pagination for parts page (recommended for large collections)
# When enabled, parts page uses server-side pagination with configurable page sizes
# When disabled, parts page loads all data at once with instant client-side search
# Default: false
# BK_SERVER_SIDE_PAGINATION=true

# Optional: Number of parts to show per page on desktop devices (when server-side pagination is enabled)
# Default: 50
# BK_PARTS_PAGINATION_SIZE_DESKTOP=50

# Optional: Number of parts to show per page on mobile devices (when server-side pagination is enabled)
# Default: 25
# BK_PARTS_PAGINATION_SIZE_MOBILE=25

# Optional: Number of sets to show per page on desktop devices (when server-side pagination is enabled)
# Should be divisible by 4 for grid layout. Default: 12
# BK_SETS_PAGINATION_SIZE_DESKTOP=12

# Optional: Number of sets to show per page on mobile devices (when server-side pagination is enabled)
# Should be divisible by 4 for grid layout. Default: 8
# BK_SETS_PAGINATION_SIZE_MOBILE=8
@deadbattery Can you test the branch [feature/pagination](https://gitea.baerentsen.space/FrederikBaerentsen/BrickTracker/src/branch/feature/pagination/)? You will have to build the docker image yourself or run it locally. ### Features - Add configurable pagination system with SERVER_SIDE_PAGINATION environment variable - Supports search, filtering, and sorting in both modes - Works on `/sets`, `/parts` and `/minifigures` - Enhance parts page functionality - Server-side search triggered by Enter key - Server-side sorting - Color filtering - Mobile-friendly pagination navigation ### New environment variables: ``` # Optional: Enable server-side pagination for parts page (recommended for large collections) # When enabled, parts page uses server-side pagination with configurable page sizes # When disabled, parts page loads all data at once with instant client-side search # Default: false # BK_SERVER_SIDE_PAGINATION=true # Optional: Number of parts to show per page on desktop devices (when server-side pagination is enabled) # Default: 50 # BK_PARTS_PAGINATION_SIZE_DESKTOP=50 # Optional: Number of parts to show per page on mobile devices (when server-side pagination is enabled) # Default: 25 # BK_PARTS_PAGINATION_SIZE_MOBILE=25 # Optional: Number of sets to show per page on desktop devices (when server-side pagination is enabled) # Should be divisible by 4 for grid layout. Default: 12 # BK_SETS_PAGINATION_SIZE_DESKTOP=12 # Optional: Number of sets to show per page on mobile devices (when server-side pagination is enabled) # Should be divisible by 4 for grid layout. Default: 8 # BK_SETS_PAGINATION_SIZE_MOBILE=8 ```
Author
  • I am not getting pagination on /sets
  • /parts and /minifugures load fully before the page refreshes to pagination.
  • I don't see color filtering on /parts

Perhaps I am missing something?

# Optional: Enable server-side pagination for parts page (recommended for large collections)
# When enabled, parts page uses server-side pagination with configurable page sizes
# When disabled, parts page loads all data at once with instant client-side search
# Default: false
BK_SERVER_SIDE_PAGINATION=true

# Optional: Number of parts to show per page on desktop devices (when server-side pagination is enab>
# Default: 50
BK_PARTS_PAGINATION_SIZE_DESKTOP=50

# Optional: Number of parts to show per page on mobile devices (when server-side pagination is enabl>
# Default: 25
BK_PARTS_PAGINATION_SIZE_MOBILE=25

# Optional: Number of sets to show per page on desktop devices (when server-side pagination is enabl>
# Should be divisible by 4 for grid layout. Default: 12
BK_SETS_PAGINATION_SIZE_DESKTOP=12

# Optional: Number of sets to show per page on mobile devices (when server-side pagination is enable>
# Should be divisible by 4 for grid layout. Default: 8
BK_SETS_PAGINATION_SIZE_MOBILE=8
- I am not getting pagination on `/sets` - `/parts` and `/minifugures` load fully before the page refreshes to pagination. - I don't see color filtering on `/parts` Perhaps I am missing something? ``` # Optional: Enable server-side pagination for parts page (recommended for large collections) # When enabled, parts page uses server-side pagination with configurable page sizes # When disabled, parts page loads all data at once with instant client-side search # Default: false BK_SERVER_SIDE_PAGINATION=true # Optional: Number of parts to show per page on desktop devices (when server-side pagination is enab> # Default: 50 BK_PARTS_PAGINATION_SIZE_DESKTOP=50 # Optional: Number of parts to show per page on mobile devices (when server-side pagination is enabl> # Default: 25 BK_PARTS_PAGINATION_SIZE_MOBILE=25 # Optional: Number of sets to show per page on desktop devices (when server-side pagination is enabl> # Should be divisible by 4 for grid layout. Default: 12 BK_SETS_PAGINATION_SIZE_DESKTOP=12 # Optional: Number of sets to show per page on mobile devices (when server-side pagination is enable> # Should be divisible by 4 for grid layout. Default: 8 BK_SETS_PAGINATION_SIZE_MOBILE=8 ```
Owner

I'm using:

BK_SERVER_SIDE_PAGINATION=true
BK_PARTS_PAGINATION_SIZE_DESKTOP=10
BK_PARTS_PAGINATION_SIZE_MOBILE=5

BK_SETS_PAGINATION_SIZE_DESKTOP=12
BK_SETS_PAGINATION_SIZE_MOBILE=4

You don't see it like the attached images?

I'm using: ``` BK_SERVER_SIDE_PAGINATION=true BK_PARTS_PAGINATION_SIZE_DESKTOP=10 BK_PARTS_PAGINATION_SIZE_MOBILE=5 BK_SETS_PAGINATION_SIZE_DESKTOP=12 BK_SETS_PAGINATION_SIZE_MOBILE=4 ``` You don't see it like the attached images?
Owner

@deadbattery Try the docker image gitea.baerentsen.space/frederikbaerentsen/bricktracker:pagination. Use the env variables:

BK_SERVER_SIDE_PAGINATION=true
BK_PARTS_PAGINATION_SIZE_DESKTOP=10
BK_PARTS_PAGINATION_SIZE_MOBILE=5

BK_SETS_PAGINATION_SIZE_DESKTOP=12
BK_SETS_PAGINATION_SIZE_MOBILE=4
@deadbattery Try the docker image `gitea.baerentsen.space/frederikbaerentsen/bricktracker:pagination`. Use the env variables: ``` BK_SERVER_SIDE_PAGINATION=true BK_PARTS_PAGINATION_SIZE_DESKTOP=10 BK_PARTS_PAGINATION_SIZE_MOBILE=5 BK_SETS_PAGINATION_SIZE_DESKTOP=12 BK_SETS_PAGINATION_SIZE_MOBILE=4 ```
Author

I got it working and it works just like it should/your screenshots.

I got it working and it works just like it should/your screenshots.
Author

Did the sets page have a filter before?

Did the sets page have a filter before?
Owner

Did the sets page have a filter before?

Yes! Thanks for spotting the issue. I thought i had fixed it but ill look at it again. I'm traveling for the weekend but i'll get it fixed and update the :pagination image some time next week.

> Did the sets page have a filter before? Yes! Thanks for spotting the issue. I thought i had fixed it but ill look at it again. I'm traveling for the weekend but i'll get it fixed and update the `:pagination` image some time next week.
Owner

@deadbattery :pagination has been updated. Try it out now!

One issue i know of is that the themes filter doesn't update based on what is on the paginated page.

I added more env vars.

# Optional: Enable server-side pagination for individual pages (recommended for large collections)
# When enabled, pages use server-side pagination with configurable page sizes
# When disabled, pages load all data at once with instant client-side search
# Default: false for all
BK_SETS_SERVER_SIDE_PAGINATION=true
BK_PARTS_SERVER_SIDE_PAGINATION=true
BK_MINIFIGURES_SERVER_SIDE_PAGINATION=true

# Optional: Number of parts to show per page on desktop devices (when server-side pagination is enabled)
# Default: 10
BK_PARTS_PAGINATION_SIZE_DESKTOP=10

# Optional: Number of parts to show per page on mobile devices (when server-side pagination is enabled)
# Default: 5
BK_PARTS_PAGINATION_SIZE_MOBILE=5

# Optional: Number of sets to show per page on desktop devices (when server-side pagination is enabled)
# Should be divisible by 4 for grid layout. Default: 12
BK_SETS_PAGINATION_SIZE_DESKTOP=12

# Optional: Number of sets to show per page on mobile devices (when server-side pagination is enabled)
# Default: 4
BK_SETS_PAGINATION_SIZE_MOBILE=4

# Optional: Number of minifigures to show per page on desktop devices (when server-side pagination is enabled)
# Default: 10
BK_MINIFIGURES_PAGINATION_SIZE_DESKTOP=10

# Optional: Number of minifigures to show per page on mobile devices (when server-side pagination is enabled)
# Default: 5
BK_MINIFIGURES_PAGINATION_SIZE_MOBILE=5
@deadbattery `:pagination` has been updated. Try it out now! One issue i know of is that the themes filter doesn't update based on what is on the paginated page. I added more env vars. ``` # Optional: Enable server-side pagination for individual pages (recommended for large collections) # When enabled, pages use server-side pagination with configurable page sizes # When disabled, pages load all data at once with instant client-side search # Default: false for all BK_SETS_SERVER_SIDE_PAGINATION=true BK_PARTS_SERVER_SIDE_PAGINATION=true BK_MINIFIGURES_SERVER_SIDE_PAGINATION=true # Optional: Number of parts to show per page on desktop devices (when server-side pagination is enabled) # Default: 10 BK_PARTS_PAGINATION_SIZE_DESKTOP=10 # Optional: Number of parts to show per page on mobile devices (when server-side pagination is enabled) # Default: 5 BK_PARTS_PAGINATION_SIZE_MOBILE=5 # Optional: Number of sets to show per page on desktop devices (when server-side pagination is enabled) # Should be divisible by 4 for grid layout. Default: 12 BK_SETS_PAGINATION_SIZE_DESKTOP=12 # Optional: Number of sets to show per page on mobile devices (when server-side pagination is enabled) # Default: 4 BK_SETS_PAGINATION_SIZE_MOBILE=4 # Optional: Number of minifigures to show per page on desktop devices (when server-side pagination is enabled) # Default: 10 BK_MINIFIGURES_PAGINATION_SIZE_DESKTOP=10 # Optional: Number of minifigures to show per page on mobile devices (when server-side pagination is enabled) # Default: 5 BK_MINIFIGURES_PAGINATION_SIZE_MOBILE=5 ```
Author

Works great!

Would it be difficult to add the same feature to problems?

Works great! Would it be difficult to add the same feature to problems?
FrederikBaerentsen moved this to Version 1.3 in General Improvements on 2025-09-22 07:52:42 +02:00
FrederikBaerentsen moved this to In Progress in General Improvements on 2025-09-22 07:52:53 +02:00
FrederikBaerentsen added this to the Version 1.3 milestone 2025-09-22 08:37:11 +02:00
FrederikBaerentsen changed title from Sets page should be paginated to [Feature] Sets page should be paginated 2025-09-22 08:51:38 +02:00
Owner

I have added it to problems too. The :pagination image has been updated.

New variables are

# Default: false
# BK_PROBLEMS_SERVER_SIDE_PAGINATION=true

# Optional: Number of problems to show per page on desktop devices (when server-side pagination is enabled)
# Default: 10
# BK_PROBLEMS_PAGINATION_SIZE_DESKTOP=10

# Optional: Number of problems to show per page on mobile devices (when server-side pagination is enabled)
# Default: 5
# BK_PROBLEMS_PAGINATION_SIZE_MOBILE=5

Known issues:

  • Filters aren't dynamically updated based on the current table. I think it will stay like that for now, as the current implemented model wont have an easy fix for this. I'll create a seperate issue for this when the feature is released.

Other issues, please let me know!

I have added it to problems too. The `:pagination` image has been updated. New variables are ``` # Default: false # BK_PROBLEMS_SERVER_SIDE_PAGINATION=true # Optional: Number of problems to show per page on desktop devices (when server-side pagination is enabled) # Default: 10 # BK_PROBLEMS_PAGINATION_SIZE_DESKTOP=10 # Optional: Number of problems to show per page on mobile devices (when server-side pagination is enabled) # Default: 5 # BK_PROBLEMS_PAGINATION_SIZE_MOBILE=5 ``` Known issues: - Filters aren't dynamically updated based on the current table. I think it will stay like that for now, as the current implemented model wont have an easy fix for this. I'll create a seperate issue for this when the feature is released. Other issues, please let me know!
FrederikBaerentsen moved this to Done in General Improvements on 2025-09-24 22:06:05 +02:00
FrederikBaerentsen moved this to Needs testing in General Improvements on 2025-09-24 22:06:44 +02:00
FrederikBaerentsen moved this to Done in General Improvements on 2025-09-24 22:06:46 +02:00
Owner

Implemented. Will be released with version 1.3.0. Testing on :pagination

Implemented. Will be released with version 1.3.0. Testing on `:pagination`
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: FrederikBaerentsen/BrickTracker#84