import React, { useState } from 'react'; import { Website } from '../types'; import { icons, ArrowLeft, ArrowRight, Pencil } from 'lucide-react'; interface WebsiteTileProps { website: Website; isEditing: boolean; onEdit: (website: Website) => void; onMove: (website: Website, direction: 'left' | 'right') => void; tileSize?: string; } const getTileSizeClass = (size: string | undefined) => { switch (size) { case 'small': return 'w-28 h-28'; case 'medium': return 'w-32 h-32'; case 'large': return 'w-36 h-36'; default: return 'w-32 h-32'; } }; const getIconSize = (size: string | undefined) => { switch (size) { case 'small': return 8; case 'medium': return 10; case 'large': return 12; default: return 10; } } const WebsiteTile: React.FC = ({ website, isEditing, onEdit, onMove, tileSize }) => { const LucideIcon = icons[website.icon as keyof typeof icons]; const [isLoading, setIsLoading] = useState(false); const handleClick = (e: React.MouseEvent) => { if (isEditing) { e.preventDefault(); return; } setIsLoading(true); // Simulate loading time (dev purpose) // e.preventDefault(); // setTimeout(() => { // setIsLoading(false); // }, 3500); // Small delay to show spinner before navigation }; const iconSizeClass = `w-${getIconSize(tileSize)} h-${getIconSize(tileSize)}`; const iconSizeLoadingClass = `w-${getIconSize(tileSize) - 4} h-${getIconSize(tileSize) - 4}`; return (
{isLoading && (
)}
{LucideIcon ? ( ) : ( {`${website.name} )}
{website.name}
{isEditing && (
)}
); }; export default WebsiteTile;