Skip to content

Commit ff994ac

Browse files
GraysonCAdamsclaude
andcommitted
Add client-side image compression to create swaplist modal
Uses Canvas API to auto-compress images under 256KB for Spotify instead of rejecting oversized files. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent f586884 commit ff994ac

1 file changed

Lines changed: 9 additions & 8 deletions

File tree

src/app/dashboard/DashboardClient.tsx

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import { useState, useRef, useEffect } from 'react';
44
import { useRouter, useSearchParams } from 'next/navigation';
55
import { toast } from 'sonner';
6+
import { compressImageForSpotify } from '@/lib/image-compress';
67
import { ImagePlus, Pencil, Plus, Search, Download, ChevronRight, ChevronLeft } from 'lucide-react';
78
import { m } from 'motion/react';
89
import { springs, STAGGER_DELAY } from '@/lib/motion';
@@ -277,16 +278,16 @@ export default function DashboardClient({
277278
setIsCreating(false);
278279
}
279280

280-
function handleCreateImageSelect(e: React.ChangeEvent<HTMLInputElement>) {
281+
async function handleCreateImageSelect(e: React.ChangeEvent<HTMLInputElement>) {
281282
const file = e.target.files?.[0];
282283
if (!file) return;
283-
if (file.size > 256 * 1024) {
284-
toast.error('Image must be under 256KB for Spotify');
285-
return;
284+
285+
try {
286+
const dataUrl = await compressImageForSpotify(file);
287+
setCreateImagePreview(dataUrl);
288+
} catch {
289+
toast.error('Image could not be compressed under 256KB');
286290
}
287-
const reader = new FileReader();
288-
reader.onload = (ev) => setCreateImagePreview(ev.target?.result as string);
289-
reader.readAsDataURL(file);
290291
}
291292

292293
function resetImportState() {
@@ -589,7 +590,7 @@ export default function DashboardClient({
589590
<input
590591
ref={createFileInputRef}
591592
type="file"
592-
accept="image/jpeg,image/png"
593+
accept="image/jpeg,image/png,image/webp"
593594
onChange={handleCreateImageSelect}
594595
className="hidden"
595596
/>

0 commit comments

Comments
 (0)