eerrerer
erdfsfsfsdf
This commit is contained in:
@@ -54,7 +54,7 @@ import {
|
||||
Save,
|
||||
Edit2,
|
||||
} from 'lucide-react'
|
||||
import type { AIControlSettings, CompanyLabel, CategoryInfo, CleanupStatus } from '@/types/settings'
|
||||
import type { AIControlSettings, CompanyLabel, CategoryInfo, CleanupSettings, CleanupStatus, CategoryAdvanced } from '@/types/settings'
|
||||
import { PrivacySecurity } from '@/components/PrivacySecurity'
|
||||
|
||||
type TabType = 'profile' | 'accounts' | 'vip' | 'ai-control' | 'subscription' | 'privacy' | 'referrals'
|
||||
@@ -198,29 +198,31 @@ export function Settings() {
|
||||
if (prefsRes.data?.vipSenders) setVipSenders(prefsRes.data.vipSenders)
|
||||
if (aiControlRes.data) {
|
||||
// Merge cleanup defaults if not present
|
||||
const settings: AIControlSettings = {
|
||||
...aiControlRes.data,
|
||||
cleanup: aiControlRes.data.cleanup || {
|
||||
const raw = aiControlRes.data
|
||||
const defaultCleanup: CleanupSettings = {
|
||||
enabled: false,
|
||||
readItems: {
|
||||
enabled: false,
|
||||
readItems: {
|
||||
enabled: false,
|
||||
action: 'archive_read' as const,
|
||||
gracePeriodDays: 7,
|
||||
},
|
||||
promotions: {
|
||||
enabled: false,
|
||||
matchCategoriesOrLabels: ['promotions', 'newsletters'],
|
||||
action: 'archive_read' as const,
|
||||
deleteAfterDays: 30,
|
||||
},
|
||||
safety: {
|
||||
requireConfirmForDelete: true,
|
||||
dryRun: false,
|
||||
maxDeletesPerRun: 100,
|
||||
},
|
||||
action: 'archive_read',
|
||||
gracePeriodDays: 7,
|
||||
},
|
||||
categoryAdvanced: aiControlRes.data.categoryAdvanced || {},
|
||||
version: aiControlRes.data.version || 1,
|
||||
promotions: {
|
||||
enabled: false,
|
||||
matchCategoriesOrLabels: ['promotions', 'newsletters'],
|
||||
action: 'archive_read',
|
||||
deleteAfterDays: 30,
|
||||
},
|
||||
safety: {
|
||||
requireConfirmForDelete: true,
|
||||
dryRun: false,
|
||||
maxDeletesPerRun: 100,
|
||||
},
|
||||
}
|
||||
const settings: AIControlSettings = {
|
||||
...raw,
|
||||
cleanup: (raw.cleanup as CleanupSettings | undefined) || defaultCleanup,
|
||||
categoryAdvanced: (raw.categoryAdvanced as Record<string, CategoryAdvanced> | undefined) || {},
|
||||
version: raw.version ?? 1,
|
||||
}
|
||||
setAiControlSettings(settings)
|
||||
savedSettingsRef.current = JSON.parse(JSON.stringify(settings)) // Deep copy
|
||||
@@ -312,7 +314,7 @@ export function Settings() {
|
||||
try {
|
||||
const res = await api.getCleanupStatus(user.$id)
|
||||
if (res.data) setCleanupStatus(res.data)
|
||||
} catch (err) {
|
||||
} catch {
|
||||
// Silently fail if endpoint doesn't exist yet
|
||||
console.debug('Cleanup status endpoint not available')
|
||||
}
|
||||
@@ -324,7 +326,7 @@ export function Settings() {
|
||||
try {
|
||||
const res = await api.getCleanupPreview(user.$id)
|
||||
if (res.data?.preview) setCleanupPreview(res.data.preview)
|
||||
} catch (err) {
|
||||
} catch {
|
||||
// Silently fail if endpoint doesn't exist yet
|
||||
console.debug('Cleanup preview endpoint not available')
|
||||
}
|
||||
@@ -1058,7 +1060,7 @@ export function Settings() {
|
||||
</div>
|
||||
<select
|
||||
value={filterEnabled}
|
||||
onChange={(e) => setFilterEnabled(e.target.value as any)}
|
||||
onChange={(e) => setFilterEnabled((e.target.value || 'all') as 'all' | 'enabled' | 'disabled')}
|
||||
className="px-3 py-2 border border-slate-300 dark:border-slate-600 rounded-lg bg-white dark:bg-slate-800 text-slate-900 dark:text-slate-100"
|
||||
>
|
||||
<option value="all">All</option>
|
||||
@@ -1070,7 +1072,7 @@ export function Settings() {
|
||||
</Card>
|
||||
|
||||
{/* Tabs */}
|
||||
<Tabs value={controlPanelTab} onValueChange={(v) => setControlPanelTab(v as any)} className="w-full">
|
||||
<Tabs value={controlPanelTab} onValueChange={(v) => setControlPanelTab((v || 'rules') as 'rules' | 'cleanup' | 'labels')} className="w-full">
|
||||
<TabsList className="grid w-full grid-cols-3">
|
||||
<TabsTrigger value="rules" className="text-sm sm:text-base">Rules</TabsTrigger>
|
||||
<TabsTrigger value="cleanup" className="text-sm sm:text-base">Cleanup</TabsTrigger>
|
||||
@@ -1554,7 +1556,7 @@ export function Settings() {
|
||||
<div className="flex flex-wrap items-center gap-2">
|
||||
<select
|
||||
value={labelSort}
|
||||
onChange={(e) => setLabelSort(e.target.value as any)}
|
||||
onChange={(e) => setLabelSort((e.target.value || 'name') as 'name' | 'newest')}
|
||||
className="px-3 py-2 text-sm border border-slate-300 dark:border-slate-600 rounded-lg bg-white dark:bg-slate-800 text-slate-900 dark:text-slate-100"
|
||||
>
|
||||
<option value="name">Sort: Name</option>
|
||||
@@ -1834,7 +1836,7 @@ export function Settings() {
|
||||
id="category-action"
|
||||
value={aiControlSettings.categoryActions[selectedCategory.key] || selectedCategory.defaultAction}
|
||||
onChange={(e) => {
|
||||
const newActions = { ...aiControlSettings.categoryActions, [selectedCategory.key]: e.target.value as any }
|
||||
const newActions = { ...aiControlSettings.categoryActions, [selectedCategory.key]: (e.target.value || 'inbox') as 'inbox' | 'archive_read' | 'star' }
|
||||
setAiControlSettings({ ...aiControlSettings, categoryActions: newActions })
|
||||
}}
|
||||
className="w-full px-4 py-3 border border-slate-300 dark:border-slate-600 rounded-lg bg-white dark:bg-slate-800 text-slate-900 dark:text-slate-100 focus:ring-2 focus:ring-primary-500 focus:border-transparent"
|
||||
@@ -1881,7 +1883,7 @@ export function Settings() {
|
||||
onChange={(e) => {
|
||||
const newAdvanced = { ...aiControlSettings.categoryAdvanced }
|
||||
if (!newAdvanced[selectedCategory.key]) newAdvanced[selectedCategory.key] = {}
|
||||
newAdvanced[selectedCategory.key] = { ...newAdvanced[selectedCategory.key], priority: e.target.value as any }
|
||||
newAdvanced[selectedCategory.key] = { ...newAdvanced[selectedCategory.key], priority: (e.target.value || 'medium') as 'low' | 'medium' | 'high' }
|
||||
setAiControlSettings({ ...aiControlSettings, categoryAdvanced: newAdvanced })
|
||||
}}
|
||||
className="w-full px-3 py-2 border border-slate-300 dark:border-slate-600 rounded-lg bg-white dark:bg-slate-800 text-slate-900 dark:text-slate-100 mt-1"
|
||||
|
||||
Reference in New Issue
Block a user