78 lines
2.0 KiB
TypeScript
78 lines
2.0 KiB
TypeScript
import { createIndexedDBHelper, type IndexedDBHelper } from './helpers/indexedDBHelper'
|
|
import type { ArticleFilters } from '@/components/ArticleFilters'
|
|
|
|
const DB_NAME = 'nostr_paywall_settings'
|
|
const DB_VERSION = 3
|
|
const STORE_NAME = 'filter_preferences'
|
|
|
|
export interface FilterPreferencesItem {
|
|
key: 'filters'
|
|
value: ArticleFilters
|
|
timestamp: number
|
|
}
|
|
|
|
const FILTERS_KEY = 'filters'
|
|
|
|
class FilterPreferencesService {
|
|
private readonly dbHelper: IndexedDBHelper
|
|
|
|
constructor() {
|
|
this.dbHelper = createIndexedDBHelper({
|
|
dbName: DB_NAME,
|
|
version: DB_VERSION,
|
|
storeName: STORE_NAME,
|
|
keyPath: 'key',
|
|
indexes: [{ name: 'timestamp', keyPath: 'timestamp', unique: false }],
|
|
})
|
|
}
|
|
|
|
async saveFilters(filters: ArticleFilters): Promise<void> {
|
|
try {
|
|
const item: FilterPreferencesItem = {
|
|
key: FILTERS_KEY,
|
|
value: filters,
|
|
timestamp: Date.now(),
|
|
}
|
|
await this.dbHelper.put(item)
|
|
} catch (error) {
|
|
console.error('Error saving filter preferences:', error)
|
|
}
|
|
}
|
|
|
|
async getFilters(): Promise<ArticleFilters | null> {
|
|
try {
|
|
const item = await this.dbHelper.get<FilterPreferencesItem>(FILTERS_KEY)
|
|
if (item?.value) {
|
|
return item.value
|
|
}
|
|
return null
|
|
} catch (error) {
|
|
console.error('Error getting filter preferences:', error)
|
|
return null
|
|
}
|
|
}
|
|
|
|
async clearFilters(): Promise<void> {
|
|
try {
|
|
await this.dbHelper.delete(FILTERS_KEY)
|
|
} catch (error) {
|
|
console.error('Error clearing filter preferences:', error)
|
|
throw error
|
|
}
|
|
}
|
|
}
|
|
|
|
const filterPreferencesService = new FilterPreferencesService()
|
|
|
|
export async function saveFilterPreferences(filters: ArticleFilters): Promise<void> {
|
|
return filterPreferencesService.saveFilters(filters)
|
|
}
|
|
|
|
export async function getFilterPreferences(): Promise<ArticleFilters | null> {
|
|
return filterPreferencesService.getFilters()
|
|
}
|
|
|
|
export async function clearFilterPreferences(): Promise<void> {
|
|
return filterPreferencesService.clearFilters()
|
|
}
|