Skip to content

opt: auto reorder channels, close #822#1005

Merged
looplj merged 1 commit intorelease/v0.9.xfrom
dev-tmp
Mar 9, 2026
Merged

opt: auto reorder channels, close #822#1005
looplj merged 1 commit intorelease/v0.9.xfrom
dev-tmp

Conversation

@looplj
Copy link
Copy Markdown
Owner

@looplj looplj commented Mar 9, 2026

No description provided.

@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 optimizes the channel bulk ordering functionality by introducing a more robust and automated weight redistribution mechanism. The changes simplify the underlying logic for managing channel order, ensuring that ordering weights are consistently and correctly assigned across all channels after any modification, thereby improving the reliability and maintainability of the feature.

Highlights

  • Refactored Channel Weight Calculation: Replaced the calculateRelativeWeight function with a new redistributeWeights utility to manage channel ordering weights.
  • Automated Weight Redistribution: Introduced redistributeWeights to automatically reassign ordering weights to all channels after any reordering or manual weight adjustment, ensuring a consistent and evenly distributed range.
  • Simplified Reordering Logic: Streamlined the logic for moving channels (up, down, to top, to bottom) by leveraging the new redistributeWeights function, reducing complexity and potential edge cases.
Changelog
  • frontend/src/features/channels/components/channels-bulk-ordering-dialog.tsx
    • Removed WEIGHT_PRECISION, formatWeight, and calculateRelativeWeight constants/functions.
    • Added a new redistributeWeights function to handle automatic weight assignment.
    • Updated clampWeight to directly round the value.
    • Modified onMoveChannel to use redistributeWeights after arrayMove.
    • Modified onSetChannelWeight to sort and then redistribute weights.
    • Modified onMoveChannelToTop and onMoveChannelToBottom to use redistributeWeights.
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
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 refactors the channel ordering logic to use a weight redistribution strategy, which is a more robust approach than the previous relative weight calculation. The changes are well-implemented and consistently applied across all reordering actions (drag-and-drop, move to top/bottom, and manual weight change). My review includes one suggestion to increase MAX_WEIGHT to prevent potential weight collisions and unstable sorting when dealing with a large number of channels. Overall, this is a solid improvement to the channel ordering feature.


const WEIGHT_PRECISION = 0;
const MIN_WEIGHT = 0;
const MAX_WEIGHT = 100;
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 current MAX_WEIGHT of 100 can lead to weight collisions for lists with more than 101 items due to rounding in the redistributeWeights function. When the number of items is large (e.g., > 200), the weight difference between adjacent items becomes less than 1, causing Math.round to produce duplicate weights. This can lead to unstable sorting behavior.

To prevent this, MAX_WEIGHT should be increased significantly. A larger range will ensure that even for a large number of items (e.g., up to 1000), the calculated weights remain unique after rounding.

Suggested change
const MAX_WEIGHT = 100;
const MAX_WEIGHT = 100000;

@looplj looplj merged commit 0594f3a into release/v0.9.x Mar 9, 2026
2 checks passed
looplj added a commit that referenced this pull request Mar 13, 2026
looplj added a commit that referenced this pull request Mar 13, 2026
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