Files
gpx.studio/website/src/lib/components/FileListItem.svelte

46 lines
1.4 KiB
Svelte
Raw Normal View History

2024-04-29 17:03:23 +02:00
<script lang="ts">
import { Button } from '$lib/components/ui/button';
import * as ContextMenu from '$lib/components/ui/context-menu';
import Shortcut from './Shortcut.svelte';
import { Copy, Trash2 } from 'lucide-svelte';
import { get, type Writable } from 'svelte/store';
2024-04-30 20:55:47 +02:00
import { filestore, selectedFiles, selectFiles } from '$lib/stores';
2024-04-29 17:03:23 +02:00
import { _ } from 'svelte-i18n';
2024-04-30 20:55:47 +02:00
import type { GPXFile } from 'gpx';
2024-04-30 22:35:54 +02:00
import type { FreezedObject } from 'structurajs';
2024-04-29 17:03:23 +02:00
2024-04-30 22:35:54 +02:00
export let file: Writable<FreezedObject<GPXFile>> | undefined;
2024-04-29 17:03:23 +02:00
</script>
<!-- svelte-ignore a11y-no-static-element-interactions -->
<div
on:contextmenu={() => {
2024-04-30 20:55:47 +02:00
if (!get(selectedFiles).has($file?._data.id)) {
get(selectFiles).select($file?._data.id);
2024-04-29 17:03:23 +02:00
}
}}
>
<ContextMenu.Root>
<ContextMenu.Trigger>
<Button variant="outline" class="h-9 px-1.5 py-1 border-none shadow-md">
2024-04-30 20:55:47 +02:00
{$file?.metadata.name}
2024-04-29 17:03:23 +02:00
</Button>
</ContextMenu.Trigger>
<ContextMenu.Content>
2024-04-30 20:55:47 +02:00
<ContextMenu.Item on:click={filestore.duplicateSelectedFiles}>
2024-04-29 17:03:23 +02:00
<Copy size="16" class="mr-1" />
{$_('menu.duplicate')}
<Shortcut key="D" ctrl={true} /></ContextMenu.Item
>
<ContextMenu.Separator />
2024-04-30 20:55:47 +02:00
<ContextMenu.Item on:click={filestore.deleteSelectedFiles}
2024-04-29 17:03:23 +02:00
><Trash2 size="16" class="mr-1" />
{$_('menu.delete')}
<Shortcut key="⌫" ctrl={true} /></ContextMenu.Item
>
</ContextMenu.Content>
</ContextMenu.Root>
</div>