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} }