Skip to content

feat(lists): compact my lists hub cards#2681

Open
kevincador wants to merge 2 commits into
mainfrom
feat/my-lists-hub-compact-cards
Open

feat(lists): compact my lists hub cards#2681
kevincador wants to merge 2 commits into
mainfrom
feat/my-lists-hub-compact-cards

Conversation

@kevincador

Copy link
Copy Markdown
Contributor

Summary

Refines the /users/me/lists hub so each list category is presented consistently in compact mode.

  • Shows Smart Lists as compact cards instead of the previous rows.
  • Adds Smart List cards with folded poster previews, media-type icons, and an ellipsized comma-separated filter summary.
  • Forces Personal Lists, Liked Lists, and Collaborations into compact summary display on the hub.
  • Keeps drilldown and create actions available from each relevant section.

Why

The page is a hub, so the UX should prioritize quick scanning and consistent section structure over switching between compact summaries and larger previews.

Screenshots / Video

Before screenshots in light
Screenshot 2026-06-22 at 15 30 26
After screenshots in light
Screenshot 2026-06-22 at 15 30 03
Before screenshots in light
Screenshot 2026-06-22 at 15 32 41
After screenshots in dark
Screenshot 2026-06-22 at 15 32 27

@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request refines the user lists hub to prioritize a consistent, compact visual structure. By standardizing the display of Smart Lists, Personal Lists, Liked Lists, and Collaborations, the interface now offers a more scannable experience. The changes include new UI components for list summaries and updated logic to support compact rendering across various list types.

Highlights

  • Smart Lists UI Refinement: Replaced row-based Smart List display with a new compact card design featuring folded poster previews, media-type icons, and ellipsized filter summaries.
  • Consistent Hub Layout: Forced Personal Lists, Liked Lists, and Collaborations into a compact summary display mode on the hub page to ensure visual consistency.
  • New Components and Utilities: Introduced SmartListSummaryItem for rendering compact cards and useSmartListPreview to manage the retrieval of poster previews for smart lists.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize the Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@trakt-bot trakt-bot Bot enabled auto-merge (rebase) June 22, 2026 13:36

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request refactors the smart lists UI by introducing a new SmartListSummaryItem component and a useSmartListPreview hook to display list previews. It also updates PersonalLists to support a compact display mode. The review feedback focuses on ensuring RxJS streams emit initial values to prevent runtime TypeErrors, adhering to the style guide by including .ts extensions in imports, externalizing hardcoded strings for internationalization, and wrapping CSS division in calc().

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread projects/client/src/lib/sections/lists/smart/SmartLists.svelte
Comment thread projects/client/src/lib/sections/lists/user/PersonalLists.svelte
Comment thread projects/client/src/lib/sections/lists/user/PersonalLists.svelte
Comment thread projects/client/src/lib/sections/lists/smart/SmartLists.svelte
Comment on lines +75 to +77
if (max) {
return `Up to ${max}`;
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The string 'Up to' is hardcoded in English. To support internationalization (i18n), please extract this label to a translation key in the messages file.

    if (max) {
      return `${m.label_up_to?.() ?? "Up to"} ${max}`;
    }

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gemini-code-assist The suggested m.label_up_to?.() ?? "Up to" won't work here - paraglide messages are non-optional generated functions, and the range formatters build composite strings (Up to 120, RT up to 50%) that need real placeholder templates, not a single extracted label. Tracking proper i18n of the filter-summary formatters as a follow-up rather than band-aiding it in this PR.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the clarification, @vladjerca. That makes sense. Since the formatters are building composite strings and the messages are non-optional, I agree that a simple fallback label is not the right approach here. I'll defer to your plan to handle the i18n of these filter-summary formatters in a follow-up PR.

Comment on lines +93 to +95
if (max) {
return `${label} up to ${max}%`;
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The string 'up to' is hardcoded in English. To support internationalization (i18n), please extract this label to a translation key in the messages file.

    if (max) {
      return `${label} ${m.label_up_to?.() ?? "up to"} ${max}%`;
    }

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gemini-code-assist The suggested m.label_up_to?.() ?? "Up to" won't work here - paraglide messages are non-optional generated functions, and the range formatters build composite strings (Up to 120, RT up to 50%) that need real placeholder templates, not a single extracted label. Tracking proper i18n of the filter-summary formatters as a follow-up rather than band-aiding it in this PR.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the clarification, @vladjerca. That makes sense. If you are planning a follow-up, you might consider defining a Paraglide message that accepts both the label and the value as parameters to handle the composite string requirement cleanly, for example: m.filter_range_up_to({ label, max }). This would allow you to avoid hardcoding the 'up to' string while keeping the logic flexible for different contexts.

@vladjerca vladjerca force-pushed the feat/my-lists-hub-compact-cards branch from 284ecd5 to f2fbfc6 Compare June 24, 2026 18:56
@vladjerca

Copy link
Copy Markdown
Contributor

@gemini-code-assist addressed in f2fbfc6:

  • calc() wrap - adopted, --poster-overlap: calc(var(--poster-width) / 5).
  • startWith([]) (x5) - leaving as-is. The list streams already emit synchronously: usePaginatedListQuery maps the query observable and the bridge calls subscriber.next(observer.getCurrentResult()) on subscribe, so the first emission is a sync []. The pre-existing .length dereferences predate this PR and never threw. startWith is used nowhere in the codebase.
  • .ts import extension (x2) - leaving as-is. .svelte files here omit it ~516:99; matching the dominant convention (deno sloppy-imports allows both).
  • i18n 'Up to' / 'up to' (x2) - the m.label_up_to?.() form won't work (paraglide messages aren't optional). The range formatters need real placeholder templates; tracking proper i18n as a follow-up. Left these two threads open.

Type check green.

@gemini-code-assist

Copy link
Copy Markdown
Contributor

Thanks for the update, @vladjerca. Your explanations for the startWith([]) and import extension choices make sense, especially given the existing codebase patterns and the synchronous nature of the list streams. It's also good to hear that the i18n range formatting is being tracked as a follow-up. Everything looks solid.

@vladjerca vladjerca force-pushed the main branch 2 times, most recently from b9271a4 to 41dd680 Compare June 29, 2026 19:29
@vladjerca vladjerca force-pushed the feat/my-lists-hub-compact-cards branch from f2fbfc6 to 0ed4c8e Compare June 30, 2026 13:53
@seferturan seferturan force-pushed the feat/my-lists-hub-compact-cards branch from 0ed4c8e to a747407 Compare July 14, 2026 19:02
@deepsource-io

deepsource-io Bot commented Jul 14, 2026

Copy link
Copy Markdown

DeepSource Code Review

We reviewed changes in ce5a377...f19309b on this pull request. Below is the summary for the review, and you can see the individual issues we found as inline review comments.

See full review on DeepSource ↗

PR Report Card

Overall Grade   Security  

Reliability  

Complexity  

Hygiene  

Coverage  

Code Review Summary

Analyzer Status Updated (UTC) Details
JavaScript Jul 15, 2026 7:11a.m. Review ↗
Code coverage Jul 15, 2026 7:11a.m. Review ↗

Code Coverage Summary

Language Line Coverage (Overall)
Aggregate
65.6%
Javascript
65.6%

➟ Additional coverage metrics may have been reported. See full coverage report ↗


Important

AI Review is run only on demand for your team. We're only showing results of static analysis review right now. To trigger AI Review, comment @deepsourcebot review on this thread.

@seferturan seferturan self-requested a review July 14, 2026 19:29
kevincador and others added 2 commits July 15, 2026 08:54
Co-authored-by: seferturan <seferturan85@gmail.com>
Co-authored-by: Vlad Jerca <vlad.jerca@gmail.com>
fix(list): use logical inset-inline-start in smart list posters
@seferturan seferturan force-pushed the feat/my-lists-hub-compact-cards branch from 62a5fd1 to f19309b Compare July 15, 2026 07:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants