diff --git a/src/localization/en.json b/src/localization/en.json index d8005621..c7393c60 100644 --- a/src/localization/en.json +++ b/src/localization/en.json @@ -18,7 +18,9 @@ "view_details": "View Details", "configure": "Configure", "refresh": "Refresh", - "cancel": "Cancel" + "cancel": "Cancel", + "copy": "Copy", + "open_link": "Open Link" }, "sort_by": "Sort by:", "time_units": { diff --git a/src/views/GameLog/columns.jsx b/src/views/GameLog/columns.jsx index 645da87d..b5d1711a 100644 --- a/src/views/GameLog/columns.jsx +++ b/src/views/GameLog/columns.jsx @@ -1,11 +1,18 @@ import Location from '../../components/Location.vue'; import { Badge } from '../../components/ui/badge'; import { Button } from '../../components/ui/button'; +import { + ContextMenu, + ContextMenuContent, + ContextMenuItem, + ContextMenuSeparator, + ContextMenuTrigger +} from '../../components/ui/context-menu'; import { TooltipWrapper } from '../../components/ui/tooltip'; -import { ArrowUpDown, FileText, Trash2, X } from 'lucide-vue-next'; +import { ArrowUpDown, Copy, ExternalLink, FileText, Trash2, X } from 'lucide-vue-next'; import { storeToRefs } from 'pinia'; -import { formatDateFilter, openExternalLink } from '../../shared/utils'; +import { copyToClipboard, formatDateFilter, openExternalLink } from '../../shared/utils'; import { i18n } from '../../plugins'; import { useInstanceStore, @@ -158,11 +165,23 @@ export const createColumns = ({ getCreatedAt, onDelete, onDeletePrompt }) => { if (original.type === 'Event') { return ( - - - {original.data} - - + + + + + {original.data} + + + + + copyToClipboard(original.data)} + > + + {t('common.actions.copy')} + + + ); } @@ -188,27 +207,54 @@ export const createColumns = ({ getCreatedAt, onDelete, onDeletePrompt }) => { ? `${original.videoId}: ${label}` : label; return ( - - - {original.videoId ? ( - - {original.videoId}: + + + + + {original.videoId ? ( + + {original.videoId}: + + ) : null} + {showLink ? ( + + openExternalLink(original.videoUrl) + } + > + {label} + + ) : ( + {original.videoName} + )} - ) : null} + + + {showLink ? ( - - openExternalLink(original.videoUrl) - } - > - {label} - - ) : ( - {original.videoName} - )} - - + <> + + openExternalLink(original.videoUrl) + } + > + + {t('common.actions.open_link')} + + + + ) : null} + + copyToClipboard(original.videoUrl) + } + > + + {t('common.actions.copy')} + + + ); } @@ -217,21 +263,44 @@ export const createColumns = ({ getCreatedAt, onDelete, onDeletePrompt }) => { original.type === 'StringLoad' ) { return ( - - - + + + + + openExternalLink(original.resourceUrl) + } + > + {original.resourceUrl} + + + + + + openExternalLink(original.resourceUrl) } > - {original.resourceUrl} - - - + + {t('common.actions.open_link')} + + + + copyToClipboard(original.resourceUrl) + } + > + + {t('common.actions.copy')} + + + ); }