import { useState, useEffect } from 'react'; import { Clock } from 'lucide-react'; import { Model } from './ModelContext'; import { ModelRadioList, SeeMoreModelsButtons } from './ModelRadioList'; import { useModel } from './ModelContext'; import { useHandleModelSelection } from './utils'; import type { View } from '../../../App'; const MAX_RECENT_MODELS = 3; export function useRecentModels() { const [recentModels, setRecentModels] = useState([]); useEffect(() => { const storedModels = localStorage.getItem('recentModels'); if (storedModels) { setRecentModels(JSON.parse(storedModels)); } }, []); const addRecentModel = (model: Model) => { const modelWithTimestamp = { ...model, lastUsed: new Date().toISOString() }; // Add lastUsed field setRecentModels((prevModels) => { const updatedModels = [ modelWithTimestamp, ...prevModels.filter((m) => m.name !== model.name), ].slice(0, MAX_RECENT_MODELS); localStorage.setItem('recentModels', JSON.stringify(updatedModels)); return updatedModels; }); }; return { recentModels, addRecentModel }; } function getRelativeTimeString(date: string | Date): string { const now = new Date(); const then = new Date(date); const diffInSeconds = Math.floor((now.getTime() - then.getTime()) / 1000); if (diffInSeconds < 60) { return 'Just now'; } const diffInMinutes = Math.floor(diffInSeconds / 60); if (diffInMinutes < 60) { return `${diffInMinutes}m ago`; } const diffInHours = Math.floor(diffInMinutes / 60); if (diffInHours < 24) { return `${diffInHours}h ago`; } const diffInDays = Math.floor(diffInHours / 24); if (diffInDays < 7) { return `${diffInDays}d ago`; } if (diffInDays < 30) { const weeks = Math.floor(diffInDays / 7); return `${weeks}w ago`; } const months = Math.floor(diffInDays / 30); if (months < 12) { return `${months}mo ago`; } const years = Math.floor(months / 12); return `${years}y ago`; } export function RecentModels() { const { recentModels } = useRecentModels(); const { currentModel } = useModel(); const handleModelSelection = useHandleModelSelection(); const [selectedModel, setSelectedModel] = useState(null); useEffect(() => { if (currentModel) { setSelectedModel(currentModel.name); } }, [currentModel]); const handleRadioChange = async (model: Model) => { if (selectedModel === model.name) { console.log(`Model "${model.name}" is already active.`); return; } setSelectedModel(model.name); await handleModelSelection(model, 'RecentModels'); }; return (
{recentModels.map((model) => ( ))}
); } export function RecentModelsRadio({ setView }: { setView: (view: View) => void }) { return (
( )} />
); }