Skip to content

feat: add rate-now rating and toast content#2328

Open
ElMagnea wants to merge 3 commits into
mainfrom
feature/rate-now-toast
Open

feat: add rate-now rating and toast content#2328
ElMagnea wants to merge 3 commits into
mainfrom
feature/rate-now-toast

Conversation

@ElMagnea
Copy link
Copy Markdown
Collaborator

Enhances rating component with props and integrates toast notifications.

@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 enhances the user experience by refining the rating and toast notification components. It introduces more dynamic content for rating prompts, improves the visual presentation of empty states in the 'Where to Watch' section, and adds flexibility to the RateNow component to ensure consistent layout behavior across different parts of the application.

Highlights

  • Rating Component Enhancement: Added a 'hideLabel' prop to the RateNow component and updated its styling to support flexible justification, allowing for better integration in constrained UI areas.
  • Toast Notification Updates: Integrated a rotating 'verdict' prompt in the rating toast and updated the layout to handle long titles more gracefully.
  • Empty State UI: Introduced a new 'WhereToWatchEmptyItem' component to provide a more visually appealing empty state when no streaming services are available.
Ignored Files
  • Ignored by pattern: projects/client/i18n/messages/** (1)
    • projects/client/i18n/messages/en-au.json
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) May 14, 2026 09:39
@deepsource-io
Copy link
Copy Markdown

deepsource-io Bot commented May 14, 2026

DeepSource Code Review

We reviewed changes in 556eef9...a791017 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 May 14, 2026 9:39a.m. Review ↗
Code coverage May 14, 2026 9:39a.m. Review ↗

Code Coverage Summary

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

➟ 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.

Copy link
Copy Markdown
Contributor

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

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 updates a subproject commit, modifies i18n metadata, and introduces a new WhereToWatchEmptyItem component for empty states in the Where to Watch section. It also enhances the Rate Now toast with randomized prompts and layout updates. Key feedback includes addressing SSR safety issues when accessing localStorage, moving hardcoded strings to the i18n system, and cleaning up the styles by removing redundant SCSS declarations, dead CSS, and duplicated global rules.

Comment on lines +43 to +49
function getNextPrompt(): string {
const stored = localStorage.getItem(PROMPT_INDEX_KEY);
const current = stored !== null ? parseInt(stored, 10) : -1;
const next = (current + 1) % RATING_PROMPTS.length;
localStorage.setItem(PROMPT_INDEX_KEY, String(next));
return RATING_PROMPTS[next];
}
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.

high

Accessing localStorage directly during component initialization is not SSR-safe and will cause a ReferenceError on the server. Additionally, parseInt can return NaN if the stored value is corrupted, which should be handled.

  function getNextPrompt(): string {
    if (typeof window === "undefined") {
      return RATING_PROMPTS[0];
    }

    const stored = localStorage.getItem(PROMPT_INDEX_KEY);
    const current = stored !== null ? parseInt(stored, 10) : -1;
    const next = isNaN(current) ? 0 : (current + 1) % RATING_PROMPTS.length;
    localStorage.setItem(PROMPT_INDEX_KEY, String(next));
    return RATING_PROMPTS[next];
  }

</div>
{/if}

<style lang="scss">
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 lang="scss" attribute is unnecessary here as no SCSS-specific features (like variables, mixins, or functions) are being used. Standard CSS nesting is supported natively.

<style>
References
  1. Only add lang="scss" to <style> tags in Svelte components when SCSS-specific features are used. Plain CSS nesting does not require it.

Comment on lines +108 to +118
:global(.section-list-empty-state) {
width: auto;
margin: 0;
padding-inline: 0;
align-items: flex-start;
justify-content: flex-start;
}

:global(.section-list-empty-state:not(:has(:global(.trakt-skeleton-list)))) {
width: auto;
}
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

These global styles for .section-list-empty-state are duplicated in WhereToWatchDrawer.svelte. Consider moving them to a shared SCSS file or a common component to improve maintainability.

Comment on lines +7 to +8
<span>No Services</span>
<span>Available</span>
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

User-facing strings should be externalized to the i18n system instead of being hardcoded.

      <span>{m.button_text_no_services()}</span>
      <span>{m.text_unavailable()}</span>

Comment on lines +14 to +23
.where-to-watch-item {
:global(.trakt-link) {
text-decoration: none;
color: var(--color-text-secondary);

&:hover {
color: var(--color-text-secondary);
}
}
}
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

This CSS block appears to be dead code as there is no element with the .trakt-link class in the component's markup.

Comment on lines +30 to +38
"What's the verdict?",
"What did you think?",
"Well, how was it?",
"Thoughts?",
"Out of five stars?",
"How many stars does it earn?",
"Rate your experience.",
"What's the official score?",
"Give it a grade.",
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

These rating prompts are hardcoded user-facing strings. They should be moved to the i18n translation files.

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.

1 participant