diff --git a/src/components/dialogs/GroupDialog/groupMemberModerationBansColumns.jsx b/src/components/dialogs/GroupDialog/groupMemberModerationBansColumns.jsx
index eb4d5aad..802a190d 100644
--- a/src/components/dialogs/GroupDialog/groupMemberModerationBansColumns.jsx
+++ b/src/components/dialogs/GroupDialog/groupMemberModerationBansColumns.jsx
@@ -1,9 +1,30 @@
import { Checkbox } from '@/components/ui/checkbox';
import { i18n } from '@/plugin';
import { formatDateFilter } from '@/shared/utils';
+import { Button } from '@/components/ui/button';
+import { ArrowUpDown } from 'lucide-vue-next';
const { t } = i18n.global;
+const sortButton = ({ column, label, descFirst = false }) => (
+
+);
+
export const createColumns = ({
randomUserColours,
rolesText,
@@ -64,7 +85,11 @@ export const createColumns = ({
{
id: 'displayName',
accessorFn: (row) => row?.user?.displayName ?? row?.$displayName ?? '',
- header: () => t('dialog.group_member_moderation.display_name'),
+ header: ({ column }) =>
+ sortButton({
+ column,
+ label: t('dialog.group_member_moderation.display_name')
+ }),
size: 160,
cell: ({ row }) => {
const original = row.original;
@@ -91,7 +116,11 @@ export const createColumns = ({
{
id: 'roles',
accessorFn: (row) => rolesText?.(row?.roleIds) ?? '',
- header: () => t('dialog.group_member_moderation.roles'),
+ header: ({ column }) =>
+ sortButton({
+ column,
+ label: t('dialog.group_member_moderation.roles')
+ }),
cell: ({ row }) => {
const original = row.original;
return {rolesText?.(original?.roleIds) ?? ''};
@@ -99,7 +128,11 @@ export const createColumns = ({
},
{
accessorKey: 'managerNotes',
- header: () => t('dialog.group_member_moderation.notes'),
+ header: ({ column }) =>
+ sortButton({
+ column,
+ label: t('dialog.group_member_moderation.notes')
+ }),
cell: ({ row }) => (
e.stopPropagation()}>
{row.original?.managerNotes}
@@ -108,7 +141,11 @@ export const createColumns = ({
},
{
accessorKey: 'joinedAt',
- header: () => t('dialog.group_member_moderation.joined_at'),
+ header: ({ column }) =>
+ sortButton({
+ column,
+ label: t('dialog.group_member_moderation.joined_at')
+ }),
size: 170,
cell: ({ row }) => (
{formatDateFilter(row.original?.joinedAt, 'long')}
@@ -116,7 +153,11 @@ export const createColumns = ({
},
{
accessorKey: 'bannedAt',
- header: () => t('dialog.group_member_moderation.banned_at'),
+ header: ({ column }) =>
+ sortButton({
+ column,
+ label: t('dialog.group_member_moderation.banned_at')
+ }),
size: 170,
cell: ({ row }) => (
{formatDateFilter(row.original?.bannedAt, 'long')}
diff --git a/src/components/dialogs/GroupDialog/groupMemberModerationBlockedColumns.jsx b/src/components/dialogs/GroupDialog/groupMemberModerationBlockedColumns.jsx
index 6b579855..ea319628 100644
--- a/src/components/dialogs/GroupDialog/groupMemberModerationBlockedColumns.jsx
+++ b/src/components/dialogs/GroupDialog/groupMemberModerationBlockedColumns.jsx
@@ -1,8 +1,29 @@
import { Checkbox } from '@/components/ui/checkbox';
import { i18n } from '@/plugin';
+import { ArrowUpDown } from 'lucide-vue-next';
+import { Button } from '@/components/ui/button';
const { t } = i18n.global;
+const sortButton = ({ column, label, descFirst = false }) => (
+
+);
+
export const createColumns = ({
randomUserColours,
userImage,
@@ -62,7 +83,11 @@ export const createColumns = ({
{
id: 'displayName',
accessorFn: (row) => row?.user?.displayName ?? row?.$displayName ?? '',
- header: () => t('dialog.group_member_moderation.display_name'),
+ header: ({ column }) =>
+ sortButton({
+ column,
+ label: t('dialog.group_member_moderation.display_name')
+ }),
size: 160,
cell: ({ row }) => {
const original = row.original;
@@ -88,7 +113,11 @@ export const createColumns = ({
},
{
accessorKey: 'managerNotes',
- header: () => t('dialog.group_member_moderation.notes'),
+ header: ({ column }) =>
+ sortButton({
+ column,
+ label: t('dialog.group_member_moderation.notes')
+ }),
cell: ({ row }) => (
e.stopPropagation()}>
{row.original?.managerNotes}
diff --git a/src/components/dialogs/GroupDialog/groupMemberModerationInvitesColumns.jsx b/src/components/dialogs/GroupDialog/groupMemberModerationInvitesColumns.jsx
index 6b579855..ea319628 100644
--- a/src/components/dialogs/GroupDialog/groupMemberModerationInvitesColumns.jsx
+++ b/src/components/dialogs/GroupDialog/groupMemberModerationInvitesColumns.jsx
@@ -1,8 +1,29 @@
import { Checkbox } from '@/components/ui/checkbox';
import { i18n } from '@/plugin';
+import { ArrowUpDown } from 'lucide-vue-next';
+import { Button } from '@/components/ui/button';
const { t } = i18n.global;
+const sortButton = ({ column, label, descFirst = false }) => (
+
+);
+
export const createColumns = ({
randomUserColours,
userImage,
@@ -62,7 +83,11 @@ export const createColumns = ({
{
id: 'displayName',
accessorFn: (row) => row?.user?.displayName ?? row?.$displayName ?? '',
- header: () => t('dialog.group_member_moderation.display_name'),
+ header: ({ column }) =>
+ sortButton({
+ column,
+ label: t('dialog.group_member_moderation.display_name')
+ }),
size: 160,
cell: ({ row }) => {
const original = row.original;
@@ -88,7 +113,11 @@ export const createColumns = ({
},
{
accessorKey: 'managerNotes',
- header: () => t('dialog.group_member_moderation.notes'),
+ header: ({ column }) =>
+ sortButton({
+ column,
+ label: t('dialog.group_member_moderation.notes')
+ }),
cell: ({ row }) => (
e.stopPropagation()}>
{row.original?.managerNotes}
diff --git a/src/components/dialogs/GroupDialog/groupMemberModerationJoinRequestsColumns.jsx b/src/components/dialogs/GroupDialog/groupMemberModerationJoinRequestsColumns.jsx
index 6b579855..ea319628 100644
--- a/src/components/dialogs/GroupDialog/groupMemberModerationJoinRequestsColumns.jsx
+++ b/src/components/dialogs/GroupDialog/groupMemberModerationJoinRequestsColumns.jsx
@@ -1,8 +1,29 @@
import { Checkbox } from '@/components/ui/checkbox';
import { i18n } from '@/plugin';
+import { ArrowUpDown } from 'lucide-vue-next';
+import { Button } from '@/components/ui/button';
const { t } = i18n.global;
+const sortButton = ({ column, label, descFirst = false }) => (
+
+);
+
export const createColumns = ({
randomUserColours,
userImage,
@@ -62,7 +83,11 @@ export const createColumns = ({
{
id: 'displayName',
accessorFn: (row) => row?.user?.displayName ?? row?.$displayName ?? '',
- header: () => t('dialog.group_member_moderation.display_name'),
+ header: ({ column }) =>
+ sortButton({
+ column,
+ label: t('dialog.group_member_moderation.display_name')
+ }),
size: 160,
cell: ({ row }) => {
const original = row.original;
@@ -88,7 +113,11 @@ export const createColumns = ({
},
{
accessorKey: 'managerNotes',
- header: () => t('dialog.group_member_moderation.notes'),
+ header: ({ column }) =>
+ sortButton({
+ column,
+ label: t('dialog.group_member_moderation.notes')
+ }),
cell: ({ row }) => (
e.stopPropagation()}>
{row.original?.managerNotes}
diff --git a/src/components/dialogs/GroupDialog/groupMemberModerationLogsColumns.jsx b/src/components/dialogs/GroupDialog/groupMemberModerationLogsColumns.jsx
index 8f018efc..f15b117a 100644
--- a/src/components/dialogs/GroupDialog/groupMemberModerationLogsColumns.jsx
+++ b/src/components/dialogs/GroupDialog/groupMemberModerationLogsColumns.jsx
@@ -55,7 +55,6 @@ export const createColumns = ({ onShowUser }) => [
column,
label: t('dialog.group_member_moderation.display_name')
}),
- enableSorting: true,
size: 160,
cell: ({ row }) => {
const original = row.original;
diff --git a/src/components/dialogs/GroupDialog/groupMemberModerationMembersColumns.jsx b/src/components/dialogs/GroupDialog/groupMemberModerationMembersColumns.jsx
index 3ebcbdf6..a8a0902f 100644
--- a/src/components/dialogs/GroupDialog/groupMemberModerationMembersColumns.jsx
+++ b/src/components/dialogs/GroupDialog/groupMemberModerationMembersColumns.jsx
@@ -1,9 +1,30 @@
import { Checkbox } from '@/components/ui/checkbox';
import { i18n } from '@/plugin';
import { formatDateFilter } from '@/shared/utils';
+import { ArrowUpDown } from 'lucide-vue-next';
+import { Button } from '@/components/ui/button';
const { t } = i18n.global;
+const sortButton = ({ column, label, descFirst = false }) => (
+
+);
+
export const createColumns = ({
randomUserColours,
rolesText,
@@ -64,7 +85,11 @@ export const createColumns = ({
{
id: 'displayName',
accessorFn: (row) => row?.user?.displayName ?? '',
- header: () => t('dialog.group_member_moderation.display_name'),
+ header: ({ column }) =>
+ sortButton({
+ column,
+ label: t('dialog.group_member_moderation.display_name')
+ }),
size: 160,
cell: ({ row }) => {
const original = row.original;
@@ -91,7 +116,11 @@ export const createColumns = ({
{
id: 'roles',
accessorFn: (row) => rolesText?.(row?.roleIds) ?? '',
- header: () => t('dialog.group_member_moderation.roles'),
+ header: ({ column }) =>
+ sortButton({
+ column,
+ label: t('dialog.group_member_moderation.roles')
+ }),
cell: ({ row }) => {
const original = row.original;
return {rolesText?.(original?.roleIds) ?? ''};
@@ -99,7 +128,11 @@ export const createColumns = ({
},
{
accessorKey: 'managerNotes',
- header: () => t('dialog.group_member_moderation.notes'),
+ header: ({ column }) =>
+ sortButton({
+ column,
+ label: t('dialog.group_member_moderation.notes')
+ }),
cell: ({ row }) => (
e.stopPropagation()}>
{row.original?.managerNotes}
@@ -108,7 +141,11 @@ export const createColumns = ({
},
{
accessorKey: 'joinedAt',
- header: () => t('dialog.group_member_moderation.joined_at'),
+ header: ({ column }) =>
+ sortButton({
+ column,
+ label: t('dialog.group_member_moderation.joined_at')
+ }),
size: 170,
cell: ({ row }) => (
{formatDateFilter(row.original?.joinedAt, 'long')}
@@ -116,7 +153,11 @@ export const createColumns = ({
},
{
accessorKey: 'visibility',
- header: () => t('dialog.group_member_moderation.visibility'),
+ header: ({ column }) =>
+ sortButton({
+ column,
+ label: t('dialog.group_member_moderation.visibility')
+ }),
size: 120,
cell: ({ row }) => {row.original?.visibility}
}