import Icon from '../common/Icon';
 import UserBox from '../users/Box';
 import { mayAdminGuild } from '../../helpers/permissions';
+import { compareUsername } from '../../helpers/User';
 import { useUser } from '../../hooks/user';
 
+const sortCrew = (crew) => {
+       const sorted = [...crew];
+       sorted.sort((a, b) => {
+               if (a.role === b.role) {
+                       return compareUsername(a.user, b.user);
+               }
+               if (a.role === 'admin' && b.role !== 'admin') {
+                       return -1;
+               }
+               if (b.role === 'admin' && a.role !== 'admin') {
+                       return 1;
+               }
+               if (['admin', 'manager'].includes(a.role) && !['admin', 'manager'].includes(b.role)) {
+                       return -1;
+               }
+               if (['admin', 'manager'].includes(b.role) && !['admin', 'manager'].includes(a.role)) {
+                       return 1;
+               }
+               return compareUsername(a.user, b.user);
+       });
+       return sorted;
+};
+
 const GuildCrew = ({ addCrew, changeCrewRole, guild, removeCrew }) => {
        const { t } = useTranslation();
        const { user } = useUser();
 
        const mayAdmin = React.useMemo(() => mayAdminGuild(user, guild), [guild, user]);
 
+       const sortedCrew = React.useMemo(() => sortCrew(guild.crew || []), [guild]);
+
        return <div>
                {mayAdmin ?
                        <Form.Group controlId="crew.addCrew">
                                />
                        </Form.Group>
                : null}
-               {guild.crew.map((crew) => (
+               {sortedCrew.map((crew) => (
                        <div className="d-flex align-items-center justify-content-between my-2" key={crew.id}>
                                <UserBox user={crew.user} />
                                {mayAdmin ?