import React, { useState } from 'react'; import Dropdown from '../Dropdown'; import { Config, Wallpaper } from '../../types'; import RangeSlider from './RangeSlider'; import { TrashIcon } from '../icons'; import { getWallpaperFrequencyHours, formatWallpaperFrequency, MIN_WALLPAPER_FREQUENCY_HOURS, MAX_WALLPAPER_FREQUENCY_HOURS, } from '../utils/wallpaperUtils'; 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; onRandomWallpaper: () => void; } const ThemeTab: React.FC = ({ config, onChange, userWallpapers, allWallpapers, chromeStorageAvailable, onAddWallpaper, onAddWallpaperFile, onDeleteWallpaper, onRandomWallpaper, }) => { const [newWallpaperName, setNewWallpaperName] = useState(''); const [newWallpaperUrl, setNewWallpaperUrl] = useState(''); const wallpaperFrequencyHours = getWallpaperFrequencyHours(config.wallpaperFrequency); const handleAddWallpaper = async () => { if (newWallpaperUrl.trim() === '') return; try { await onAddWallpaper(newWallpaperName, newWallpaperUrl); setNewWallpaperName(''); setNewWallpaperUrl(''); } catch (error) { alert( error instanceof Error ? error.message : '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) { alert(error instanceof Error ? 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: `${value}h` })} /> )} onChange({ wallpaperBlur: value })} /> onChange({ wallpaperBrightness: value })} /> onChange({ wallpaperOpacity: value })} />

User Wallpapers

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

Add New Wallpaper

setNewWallpaperName(e.target.value)} className="liquid-input p-2.5" />
setNewWallpaperUrl(e.target.value)} className="liquid-input p-2.5" />
{chromeStorageAvailable && (
)}
); }; export default ThemeTab;