import { Badge } from '../../components/ui/badge'; import { Button } from '../../components/ui/button'; import { Tooltip, TooltipContent, TooltipTrigger } from '../../components/ui/tooltip'; import { ArrowUpDown, Trash2, X } from 'lucide-vue-next'; import { storeToRefs } from 'pinia'; import { formatDateFilter } from '../../shared/utils'; import { i18n } from '../../plugins'; import { useUiStore, useUserStore } from '../../stores'; import { showUserDialog } from '../../coordinators/userCoordinator'; const { t, te } = i18n.global; export const createColumns = ({ onDelete, onDeletePrompt }) => { const { shiftHeld } = storeToRefs(useUiStore()); const { currentUser } = storeToRefs(useUserStore()); return [ { id: 'spacer', header: () => null, enableSorting: false, size: 20, minSize: 0, maxSize: 20, cell: () => null }, { accessorKey: 'created', size: 120, meta: { label: () => t('table.moderation.date') }, header: ({ column }) => ( ), cell: ({ row }) => { const createdAt = row.getValue('created'); const shortText = formatDateFilter(createdAt, 'short'); const longText = formatDateFilter(createdAt, 'long'); return ( {shortText} {longText} ); } }, { accessorKey: 'type', size: 140, header: () => t('table.moderation.type'), meta: { label: () => t('table.moderation.type') }, cell: ({ row }) => { const type = row.getValue('type'); const typeKey = `view.moderation.filters.${type}`; const label = te(typeKey) ? t(typeKey) : type; return ( {label} ); } }, { accessorKey: 'sourceDisplayName', meta: { class: 'overflow-hidden', label: () => t('table.moderation.source') }, size: 120, header: () => t('table.moderation.source'), cell: ({ row }) => { const original = row.original; return ( showUserDialog(original.sourceUserId)} > {original.sourceDisplayName} ); } }, { accessorKey: 'targetDisplayName', size: 200, minSize: 80, meta: { stretch: true, label: () => t('table.moderation.target') }, header: () => t('table.moderation.target'), cell: ({ row }) => { const original = row.original; return ( showUserDialog(original.targetUserId)} > {original.targetDisplayName} ); } }, { id: 'action', meta: { class: 'text-right', label: () => t('table.moderation.action') }, size: 80, minSize: 80, maxSize: 80, enableSorting: false, header: () => t('table.moderation.action'), cell: ({ row }) => { const original = row.original; if (original.sourceUserId !== currentUser.value?.id) { return null; } return (
); } }, { id: 'trailing', header: () => null, enableSorting: false, enableResizing: false, size: 5, cell: () => null } ]; };