Skip to content

Conversation

@igorovh
Copy link
Member

@igorovh igorovh commented Oct 27, 2025

No description provided.

@igorovh igorovh requested a review from Copilot October 27, 2025 22:31
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @igorovh, 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 focuses on expanding the application's settings interface by adding a new 'Experimental' tab. This tab will serve as a dedicated area for future experimental features, keeping the main settings organized. Additionally, the change includes a significant improvement in how settings tabs are managed internally, moving to a more robust and readable system using named constants for tab indexing across both Kick and Twitch platforms.

Highlights

  • New Experimental Settings Tab: An 'Experimental' tab has been introduced into the settings modules for both Kick and Twitch platforms, providing a dedicated section for new or in-progress features.
  • Settings Tab Index Refactoring: The method for assigning tab indices in the settings modules has been refactored. Hardcoded numerical indices have been replaced with a tabIndexes constant, mapping tab titles to their respective positions, which enhances readability and maintainability.
  • New SVG Icon: A new SVG icon, experimental.svg, has been added to represent the new 'Experimental' settings tab.
  • Version Update: The project version in package.json has been incremented from 5.1.15 to 5.1.16.
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 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 counter productive. 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.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

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.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR adds a new "Experimental" tab to the settings interface and refactors tab indexing to use dynamic mapping instead of hardcoded numeric indices.

  • Introduces an "Experimental" settings tab between "Channel" and "About"
  • Replaces hardcoded numeric tab indices with named references using a dynamically generated mapping
  • Bumps the package version from 5.1.15 to 5.1.16

Reviewed Changes

Copilot reviewed 3 out of 4 changed files in this pull request and generated no comments.

File Description
src/platforms/twitch/modules/settings/settings.module.tsx Adds "Experimental" tab, implements tabIndexes mapping, and updates all setting definitions to use named tab references
src/platforms/kick/modules/settings/settings.module.tsx Mirrors the Twitch changes: adds "Experimental" tab and replaces hardcoded indices with named references
package.json Updates version number to 5.1.16

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
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 introduces a new 'Experimental' tab in the settings UI for both Kick and Twitch platforms. A significant and welcome part of this change is the refactoring to eliminate hardcoded tab index numbers, replacing them with a dynamically generated tabIndexes object. This greatly improves the code's maintainability. My review includes a suggestion to further enhance type safety in this new implementation. Overall, these are solid improvements.

},
];
] as const;
const tabIndexes = Object.fromEntries(this.SETTINGS_TABS.map((tab, index) => [tab.title, index]));
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The use of as const is a good step towards type safety, but its benefit is unfortunately lost in the current implementation. Because this.SETTINGS_TABS is typed as TabDefinition[], the as const assertion on the array literal is widened, and tab.title is inferred as a generic string rather than a literal type. This results in tabIndexes having a weak type ({[key: string]: number}), which undermines type-safe access like tabIndexes.General.

To achieve full type safety, you could introduce a local constant to hold the array with as const before assigning it to this.SETTINGS_TABS. This would preserve the literal types.

Example:

const SETTINGS_TABS = [
  // ...tabs
] as const;
this.SETTINGS_TABS = SETTINGS_TABS;
const tabIndexes = Object.fromEntries(SETTINGS_TABS.map((tab, index) => [tab.title, index]));

Since this change would affect lines outside of the current diff, I'm providing it as an example for you to apply.

},
];
] as const;
const tabIndexes = Object.fromEntries(this.SETTINGS_TABS.map((tab, index) => [tab.title, index]));
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The use of as const is a good step towards type safety, but its benefit is unfortunately lost in the current implementation. Because this.SETTINGS_TABS is typed as TabDefinition[], the as const assertion on the array literal is widened, and tab.title is inferred as a generic string rather than a literal type. This results in tabIndexes having a weak type ({[key: string]: number}), which undermines type-safe access like tabIndexes.General.

To achieve full type safety, you could introduce a local constant to hold the array with as const before assigning it to this.SETTINGS_TABS. This would preserve the literal types.

Example:

const SETTINGS_TABS = [
  // ...tabs
] as const;
this.SETTINGS_TABS = SETTINGS_TABS;
const tabIndexes = Object.fromEntries(SETTINGS_TABS.map((tab, index) => [tab.title, index]));

Since this change would affect lines outside of the current diff, I'm providing it as an example for you to apply.

@igorovh igorovh merged commit cc6f27b into dev Oct 27, 2025
1 check passed
@igorovh igorovh deleted the feat/add-experimental-tab branch October 27, 2025 22:39
igorovh added a commit that referenced this pull request Oct 28, 2025
* feat: add experimental tab (#106)

* feat: add experimental tab

* Bump vite in the npm_and_yarn group across 1 directory (#102)

Bumps the npm_and_yarn group with 1 update in the / directory: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `vite` from 6.3.5 to 7.1.11
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.1.11/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 7.1.11
  dependency-type: direct:development
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* add channel section toggle feature for Kick and Twitch platforms (#108)

* add channel section toggle feature for Kick and Twitch platforms

* Apply suggestion from @igorovh

* Apply suggestion from @igorovh

---------

Co-authored-by: igor <37638480+igorovh@users.noreply.github.com>

* fix: update live video check to handle infinite duration (#107)

* fix: update live video check to handle infinite duration

* Update src/platforms/kick/kick.utils.ts

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* remove unused var

* fixes for latency

---------

Co-authored-by: igor <37638480+igorovh@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: igorovh <xoxo@igor.ovh>

* Bump version to 5.1.17

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Maksymilian Podstawski <115575127+maksPodstawski@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
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.

2 participants