import React, { useRef, useState } from 'react'; import Dropdown from '../Dropdown'; import { Config, Wallpaper } from '../../types'; interface ThemeTabProps { config: Config; onChange: (updates: Partial) => void; userWallpapers: Wallpaper[]; allWallpapers: Wallpaper[]; chromeStorageAvailable: boolean; onAddWallpaper: (name: string, url: string) => Promise; onAddWallpaperFile: (file: File) => Promise; onDeleteWallpaper: (wallpaper: Wallpaper) => Promise; } const ThemeTab: React.FC = ({ config, onChange, userWallpapers, allWallpapers, chromeStorageAvailable, onAddWallpaper, onAddWallpaperFile, onDeleteWallpaper, }) => { const [newWallpaperName, setNewWallpaperName] = useState(''); const [newWallpaperUrl, setNewWallpaperUrl] = useState(''); const fileInputRef = useRef(null); const handleAddWallpaper = async () => { if (newWallpaperUrl.trim() === '') return; try { await onAddWallpaper(newWallpaperName, newWallpaperUrl); setNewWallpaperName(''); setNewWallpaperUrl(''); } catch (error) { alert('Error adding wallpaper. Please check the URL and try again.'); console.error(error); } }; const handleFileUpload = async (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (!file) return; try { await onAddWallpaperFile(file); } catch (error: any) { alert(error?.message || 'Error adding wallpaper. Please try again.'); console.error(error); } e.target.value = ''; }; return (
onChange({ currentWallpapers: e.target.value as string[] })} multiple options={allWallpapers.map((w) => ({ value: w.name, label: w.name }))} />
{Array.isArray(config.currentWallpapers) && config.currentWallpapers.length > 1 && (
onChange({ wallpaperFrequency: e.target.value as string })} options={[ { value: '1h', label: '1 hour' }, { value: '3h', label: '3 hours' }, { value: '6h', label: '6 hours' }, { value: '12h', label: '12 hours' }, { value: '1d', label: '1 day' }, { value: '2d', label: '2 days' }, ]} />
)}
onChange({ wallpaperBlur: Number(e.target.value) })} className="w-48" /> {config.wallpaperBlur}px
onChange({ wallpaperBrightness: Number(e.target.value) })} className="w-48" /> {config.wallpaperBrightness}%
onChange({ wallpaperOpacity: Number(e.target.value) })} className="w-48" /> {config.wallpaperOpacity}%
{chromeStorageAvailable && ( <>

User Wallpapers

{userWallpapers.map((wallpaper) => (
{wallpaper.name}
))}

Add New Wallpaper

setNewWallpaperName(e.target.value)} className="bg-white/10 p-2 rounded-lg w-full focus:outline-none focus:ring-2 focus:ring-cyan-400" />
setNewWallpaperUrl(e.target.value)} className="bg-white/10 p-2 rounded-lg w-full focus:outline-none focus:ring-2 focus:ring-cyan-400" />
)}
); }; export default ThemeTab;