Fix role ordering (#789)

* fix role order in picker

* one of these sorts will flip it omg

* fix role list

* revert forced role sort in api
This commit is contained in:
41666 2023-05-28 11:15:44 -04:00 committed by GitHub
parent 33a8a0048f
commit 45a1f45055
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 21 additions and 18 deletions

View file

@ -47,18 +47,15 @@ export const getGuild = async (
.filter((x) => x !== undefined) as APIRole[] .filter((x) => x !== undefined) as APIRole[]
)?.position || -1; )?.position || -1;
const roles = guildRaw.roles const roles = guildRaw.roles.map<Role>((role) => ({
.map<Role>((role) => ({ id: role.id,
id: role.id, name: role.name,
name: role.name, color: role.color,
color: role.color, managed: role.managed,
managed: role.managed, position: role.position,
position: role.position, permissions: role.permissions,
permissions: role.permissions, safety: calculateRoleSafety(role, highestRolePosition),
safety: calculateRoleSafety(role, highestRolePosition), }));
}))
// sort so that highest is first
.sort((a, b) => b.position - a.position);
const guild: Guild & OwnRoleInfo = { const guild: Guild & OwnRoleInfo = {
id, id,

View file

@ -1,8 +1,9 @@
import { Popover } from '@roleypoly/design-system/atoms/popover'; import { Popover } from '@roleypoly/design-system/atoms/popover';
import { Role } from '@roleypoly/design-system/atoms/role'; import { Role } from '@roleypoly/design-system/atoms/role';
import { RoleSearch } from '@roleypoly/design-system/molecules/role-search'; import { RoleSearch } from '@roleypoly/design-system/molecules/role-search';
import { sortBy } from '@roleypoly/misc-utils/sortBy';
import { Role as RoleT } from '@roleypoly/types'; import { Role as RoleT } from '@roleypoly/types';
import { sortBy, uniq } from 'lodash'; import { uniq } from 'lodash';
import React from 'react'; import React from 'react';
import { GoPlus } from 'react-icons/go'; import { GoPlus } from 'react-icons/go';
import { AddRoleButton, EditableRoleListStyled } from './EditableRoleList.styled'; import { AddRoleButton, EditableRoleListStyled } from './EditableRoleList.styled';
@ -38,7 +39,9 @@ export const EditableRoleList = (props: Props) => {
<> <>
{sortBy( {sortBy(
props.roles.filter((r) => props.selectedRoles.includes(r.id)), props.roles.filter((r) => props.selectedRoles.includes(r.id)),
'position' 'position',
undefined,
true
).map((role) => ( ).map((role) => (
<Role <Role
key={role.id} key={role.id}

View file

@ -47,7 +47,7 @@ export const PickerCategory = (props: CategoryProps) => (
)} )}
</Head> </Head>
<Category> <Category>
{sortBy(props.roles, 'position').map((role, idx) => ( {sortBy(props.roles, 'position', undefined, true).map((role, idx) => (
<Container key={idx}> <Container key={idx}>
<Role <Role
role={role} role={role}

View file

@ -1,8 +1,11 @@
export const sortBy = <T, Key extends keyof T>( export const sortBy = <T, Key extends keyof T>(
array: T[], array: T[],
key: Key, key: Key,
predicate?: (a: T[typeof key], b: T[typeof key]) => number predicate?: (a: T[typeof key], b: T[typeof key]) => number,
reverse?: boolean
) => { ) => {
let postmultiplier = reverse ? -1 : 1;
return array.sort((a, b) => { return array.sort((a, b) => {
if (predicate) { if (predicate) {
return predicate(a[key], b[key]); return predicate(a[key], b[key]);
@ -13,9 +16,9 @@ export const sortBy = <T, Key extends keyof T>(
} }
if (a[key] > b[key]) { if (a[key] > b[key]) {
return 1; return 1 * postmultiplier;
} }
return -1; return -1 * postmultiplier;
}); });
}; };