feat: add copy raw file link button to file modal

This commit is contained in:
diced
2025-11-14 23:08:05 -08:00
parent 89d6b2908d
commit 9bb9e7e399
3 changed files with 15 additions and 3 deletions

View File

@@ -29,6 +29,7 @@ import { showNotification } from '@mantine/notifications';
import {
Icon,
IconBombFilled,
IconClipboardTypography,
IconCopy,
IconDeviceSdCard,
IconDownload,
@@ -403,6 +404,11 @@ export default function FileModal({
tooltip='View file in a new tab'
color='blue'
/>
<ActionButton
Icon={IconClipboardTypography}
onClick={() => copyFile(file, clipboard, true)}
tooltip='Copy raw file link'
/>
<ActionButton
Icon={IconCopy}
onClick={() => copyFile(file, clipboard)}

View File

@@ -27,10 +27,14 @@ export function downloadFile(file: File) {
window.open(`/raw/${file.name}?download=true`, '_blank');
}
export function copyFile(file: File, clipboard: ReturnType<typeof useClipboard>) {
export function copyFile(file: File, clipboard: ReturnType<typeof useClipboard>, raw: boolean = false) {
const domain = `${window.location.protocol}//${window.location.host}`;
const url = file.url ? `${domain}${file.url}` : `${domain}/view/${file.name}`;
const url = raw
? `${domain}/raw/${file.name}`
: file.url
? `${domain}${file.url}`
: `${domain}/view/${file.name}`;
clipboard.copy(url);

View File

@@ -45,7 +45,9 @@ async function vitePlugin(fastify: FastifyInstance) {
return;
}
await new Promise<void>((resolve, reject) => {
reply.hijack();
return new Promise<void>((resolve, reject) => {
vite!.middlewares(req.raw, reply.raw, (err: any) => {
if (err) reject(err);
else resolve();