diff --git a/src/lib/components/admin/Users/Groups.svelte b/src/lib/components/admin/Users/Groups.svelte index fe0f7477eb..39304e4430 100644 --- a/src/lib/components/admin/Users/Groups.svelte +++ b/src/lib/components/admin/Users/Groups.svelte @@ -21,6 +21,8 @@ import UserCircleSolid from '$lib/components/icons/UserCircleSolid.svelte'; import EditGroupModal from './Groups/EditGroupModal.svelte'; import Pencil from '$lib/components/icons/Pencil.svelte'; + import ChevronUp from '$lib/components/icons/ChevronUp.svelte'; + import ChevronDown from '$lib/components/icons/ChevronDown.svelte'; import GroupItem from './Groups/GroupItem.svelte'; import { createNewGroup, getGroups } from '$lib/apis/groups'; import { @@ -34,19 +36,42 @@ let loaded = false; let groups = []; - let filteredGroups; - $: filteredGroups = groups.filter((user) => { - if (search === '') { - return true; + let query = ''; + let orderBy = ''; + let direction = 'asc'; + + const setSortKey = (key) => { + if (orderBy === key) { + direction = direction === 'asc' ? 'desc' : 'asc'; } else { - let name = user.name.toLowerCase(); - const query = search.toLowerCase(); - return name.includes(query); + orderBy = key; + direction = 'asc'; } - }); + }; + + $: filteredGroups = groups + .filter((group) => { + if (query === '') { + return true; + } else { + let name = group.name.toLowerCase(); + const q = query.toLowerCase(); + return name.includes(q); + } + }) + .sort((a, b) => { + if (orderBy === 'name') { + const cmp = a.name.localeCompare(b.name); + return direction === 'asc' ? cmp : -cmp; + } else if (orderBy === 'members') { + const cmp = (a.member_count ?? 0) - (b.member_count ?? 0); + return direction === 'asc' ? cmp : -cmp; + } + return 0; + }); + - let search = ''; let defaultPermissions = {}; let showAddGroupModal = false; @@ -124,7 +149,7 @@ @@ -171,9 +196,33 @@ {:else}
-
{$i18n.t('Group')}
+ -
{$i18n.t('Users')}
+