Skip to content

Conversation

@naaa760
Copy link

@naaa760 naaa760 commented Nov 17, 2025

fix: #5462

  • add sorting to role assigned users table

  • Implements default sorting: workspaces ascending, users ascending

  • Adds clickable column headers for dynamic sorting (workspace/user)

  • Fixes bug: replaced undefined open variable with openAssignedUsersDrawer in useEffect

Users can now easily find role assignments without using Ctrl+F or scrolling.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @naaa760, 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 significantly enhances the usability of the role assigned users table by introducing comprehensive sorting capabilities. Users can now easily organize the displayed data by workspace or user, both with a default sort order and interactive column headers. Additionally, a critical bug related to the drawer's state management has been addressed, ensuring correct behavior.

Highlights

  • Table Sorting: Implemented sorting functionality for the role assigned users table, allowing users to sort by workspace or user.
  • Default Sorting: The table now defaults to sorting by workspaces in ascending order, then by users in ascending order.
  • Dynamic Sorting: Column headers for 'Workspace' and 'User' are now clickable, enabling dynamic sorting based on user interaction.
  • Bug Fix: Resolved a bug in the useEffect hook where an undefined open variable was incorrectly used; it has been replaced with openAssignedUsersDrawer.
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

@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 sorting capabilities to the 'Assigned Users' table, allowing users to sort by either 'User' or 'Workspace'. This is a great usability enhancement. The implementation also includes a fix for a bug where an incorrect variable was used in a useEffect hook. The code is well-structured, but I've identified a couple of areas for improvement regarding the sorting logic's implementation for better maintainability and a potential bug related to React's list rendering.

</TableHead>
<TableBody>
{assignedUsers.map((item, index) => (
{sortedAssignedUsers.map((item, index) => (
Copy link
Contributor

Choose a reason for hiding this comment

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

high

Using the array index as a key for list items (as seen on the next line: <TableRow key={index}>) is an anti-pattern in React, especially for a list that can be re-ordered by sorting. This can lead to incorrect component state and rendering issues. It's recommended to use a stable, unique identifier from the data itself.

For example, if item has a unique id, you could use key={item.id}. If not, a composite key like key={${item.user.id}-${item.workspace.id}} would be a robust alternative, assuming user and workspace objects have unique ids.

Comment on lines +208 to +232
const sortedAssignedUsers = [...assignedUsers].sort((a, b) => {
let comparison = 0

if (orderBy === 'workspace') {
const workspaceA = (a.workspace?.name || '').toLowerCase()
const workspaceB = (b.workspace?.name || '').toLowerCase()
comparison = workspaceA.localeCompare(workspaceB)
if (comparison === 0) {
const userA = (a.user?.name || a.user?.email || '').toLowerCase()
const userB = (b.user?.name || b.user?.email || '').toLowerCase()
comparison = userA.localeCompare(userB)
}
} else if (orderBy === 'user') {
const userA = (a.user?.name || a.user?.email || '').toLowerCase()
const userB = (b.user?.name || b.user?.email || '').toLowerCase()
comparison = userA.localeCompare(userB)
if (comparison === 0) {
const workspaceA = (a.workspace?.name || '').toLowerCase()
const workspaceB = (b.workspace?.name || '').toLowerCase()
comparison = workspaceA.localeCompare(workspaceB)
}
}

return order === 'asc' ? comparison : -comparison
})
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 sorting logic is a bit repetitive. You can simplify it to be more concise and adhere to the DRY (Don't Repeat Yourself) principle. By determining the primary and secondary sorting properties based on orderBy first, you can avoid the duplicated if (comparison === 0) blocks and make the code easier to maintain.

    const sortedAssignedUsers = [...assignedUsers].sort((a, b) => {
        const primaryPropA = orderBy === 'workspace' ? a.workspace?.name || '' : a.user?.name || a.user?.email || '';
        const primaryPropB = orderBy === 'workspace' ? b.workspace?.name || '' : b.user?.name || b.user?.email || '';

        const secondaryPropA = orderBy === 'workspace' ? a.user?.name || a.user?.email || '' : a.workspace?.name || '';
        const secondaryPropB = orderBy === 'workspace' ? b.user?.name || b.user?.email || '' : b.workspace?.name || '';

        let comparison = primaryPropA.toLowerCase().localeCompare(primaryPropB.toLowerCase());
        if (comparison === 0) {
            comparison = secondaryPropA.toLowerCase().localeCompare(secondaryPropB.toLowerCase());
        }

        return order === 'asc' ? comparison : -comparison;
    })

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.

Sorting of role assignments -> users : workspaces

1 participant