Files
convert-ui/lib/storage/history.ts

86 lines
2.1 KiB
TypeScript
Raw Normal View History

import type { ConversionHistoryItem } from '@/types/conversion';
const HISTORY_KEY = 'convert-ui-history';
const MAX_HISTORY_ITEMS = 10;
/**
* Get conversion history from localStorage
*/
export function getHistory(): ConversionHistoryItem[] {
if (typeof window === 'undefined') return [];
try {
const stored = localStorage.getItem(HISTORY_KEY);
if (!stored) return [];
const history = JSON.parse(stored);
return Array.isArray(history) ? history : [];
} catch (error) {
console.error('Failed to load history:', error);
return [];
}
}
/**
* Add item to conversion history
*/
export function addToHistory(item: Omit<ConversionHistoryItem, 'id' | 'timestamp'>): void {
if (typeof window === 'undefined') return;
try {
const history = getHistory();
const newItem: ConversionHistoryItem = {
...item,
id: Math.random().toString(36).substring(7),
timestamp: Date.now(),
};
// Add to beginning of array
history.unshift(newItem);
// Keep only the latest MAX_HISTORY_ITEMS
const trimmed = history.slice(0, MAX_HISTORY_ITEMS);
localStorage.setItem(HISTORY_KEY, JSON.stringify(trimmed));
} catch (error) {
console.error('Failed to save history:', error);
}
}
/**
* Clear all conversion history
*/
export function clearHistory(): void {
if (typeof window === 'undefined') return;
try {
localStorage.removeItem(HISTORY_KEY);
} catch (error) {
console.error('Failed to clear history:', error);
}
}
/**
* Remove single item from history
*/
export function removeHistoryItem(id: string): void {
if (typeof window === 'undefined') return;
try {
const history = getHistory();
const filtered = history.filter((item) => item.id !== id);
localStorage.setItem(HISTORY_KEY, JSON.stringify(filtered));
} catch (error) {
console.error('Failed to remove history item:', error);
}
}
/**
* Get history item by ID
*/
export function getHistoryItem(id: string): ConversionHistoryItem | undefined {
const history = getHistory();
return history.find((item) => item.id === id);
}