diff --git a/packages/api/src/routes/interactions/helpers.ts b/packages/api/src/routes/interactions/helpers.ts index 869cb28..623b47b 100644 --- a/packages/api/src/routes/interactions/helpers.ts +++ b/packages/api/src/routes/interactions/helpers.ts @@ -13,6 +13,7 @@ export const verifyRequest = async ( const signature = request.headers.get('x-signature-ed25519'); if (!timestamp || !signature) { + console.error("interactions: missing signature headers", { timestamp, signature }); return false; } @@ -31,8 +32,13 @@ export const verifyRequest = async ( bufferizeString(timestamp + JSON.stringify(interaction)) ); + if (!verified) { + console.error("interactions: signature verification failed", { timestamp, signature }); + } + return verified; } catch (e) { + console.error("interactions: signature verification failed", e); return false; } }; diff --git a/packages/design-system/molecules/editable-role-list/EditableRoleList.tsx b/packages/design-system/molecules/editable-role-list/EditableRoleList.tsx index 3eb17e3..3cb2b63 100644 --- a/packages/design-system/molecules/editable-role-list/EditableRoleList.tsx +++ b/packages/design-system/molecules/editable-role-list/EditableRoleList.tsx @@ -2,10 +2,10 @@ import { Popover } from '@roleypoly/design-system/atoms/popover'; import { Role } from '@roleypoly/design-system/atoms/role'; import { RoleSearch } from '@roleypoly/design-system/molecules/role-search'; import { Role as RoleT } from '@roleypoly/types'; -import { sortBy, uniq } from 'lodash'; import React from 'react'; import { GoPlus } from 'react-icons/go'; import { AddRoleButton, EditableRoleListStyled } from './EditableRoleList.styled'; +import { sortByReverse } from '@roleypoly/misc-utils/sortBy'; type Props = { roles: RoleT[]; @@ -36,7 +36,7 @@ export const EditableRoleList = (props: Props) => { {props.selectedRoles.length !== 0 ? ( <> - {sortBy( + {sortByReverse( props.roles.filter((r) => props.selectedRoles.includes(r.id)), 'position' ).map((role) => ( diff --git a/packages/design-system/molecules/picker-category/PickerCategory.tsx b/packages/design-system/molecules/picker-category/PickerCategory.tsx index f8aada8..5a447de 100644 --- a/packages/design-system/molecules/picker-category/PickerCategory.tsx +++ b/packages/design-system/molecules/picker-category/PickerCategory.tsx @@ -1,6 +1,6 @@ import { Role } from '@roleypoly/design-system/atoms/role'; import { AmbientLarge, LargeText } from '@roleypoly/design-system/atoms/typography'; -import { sortBy } from '@roleypoly/misc-utils/sortBy'; +import { sortByReverse } from '@roleypoly/misc-utils/sortBy'; import { Category as RPCCategory, Role as RPCRole, RoleSafety } from '@roleypoly/types'; import * as React from 'react'; import ReactTooltip from 'react-tooltip'; @@ -47,7 +47,7 @@ export const PickerCategory = (props: CategoryProps) => ( )} - {sortBy(props.roles, 'position').map((role, idx) => ( + {sortByReverse(props.roles, 'position').map((role, idx) => ( ( return -1; }); }; + +export const sortByReverse = ( + array: T[], + key: Key, + predicate?: (a: T[typeof key], b: T[typeof key]) => number +) => { + return array.sort((a, b) => { + if (predicate) { + return predicate(a[key], b[key]); + } + + if (a[key] === b[key]) { + return 0; + } + + if (a[key] > b[key]) { + return -1; + } + + return 1; + }); +} \ No newline at end of file