fix(audit): P2 frontend any→concrete types (181→61), heroicons→lucide-react, missing type exports, toast API, Select options, TaskStatus types; P2-9 hooks.py type annotations
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
* Mail settings page — signatures, rules, labels, PGP, vacation responder.
|
||||
*/
|
||||
|
||||
import { asError } from '@/utils/errorTypes';
|
||||
import React, { useState, useCallback, useEffect } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { useSearchParams } from 'react-router-dom';
|
||||
@@ -77,8 +78,8 @@ export function MailSettingsPage() {
|
||||
if (accs.length > 0) {
|
||||
setSelectedAccountId((prev) => prev || accs[0].id);
|
||||
}
|
||||
} catch (err: any) {
|
||||
toast.error(err?.message || err?.detail || 'Failed to load accounts');
|
||||
} catch (err: unknown) { const errObj = asError(err);
|
||||
toast.error(errObj?.message || errObj?.detail || 'Failed to load accounts');
|
||||
}
|
||||
setLoading(false);
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
@@ -93,8 +94,8 @@ export function MailSettingsPage() {
|
||||
toast.success(t('mail.accountCreated'));
|
||||
setShowAddAccount(false);
|
||||
resetAccount({ email: '', display_name: '', username: '', imap_host: '', imap_port: 993, smtp_host: '', smtp_port: 587, password: '', is_shared: false });
|
||||
} catch (err: any) {
|
||||
toast.error(err?.message || err?.detail || 'Save failed');
|
||||
} catch (err: unknown) { const errObj = asError(err);
|
||||
toast.error(errObj?.message || errObj?.detail || 'Save failed');
|
||||
}
|
||||
}, [toast, t, resetAccount]);
|
||||
|
||||
@@ -107,8 +108,8 @@ export function MailSettingsPage() {
|
||||
} else {
|
||||
toast.error(result.message);
|
||||
}
|
||||
} catch (err: any) {
|
||||
toast.error(err?.message || err?.detail || 'Connection test failed');
|
||||
} catch (err: unknown) { const errObj = asError(err);
|
||||
toast.error(errObj?.message || errObj?.detail || 'Connection test failed');
|
||||
} finally {
|
||||
setTesting(null);
|
||||
}
|
||||
@@ -123,8 +124,8 @@ export function MailSettingsPage() {
|
||||
} else {
|
||||
toast.success(t('mail.syncSuccess'));
|
||||
}
|
||||
} catch (err: any) {
|
||||
toast.error(err?.message || err?.detail || 'Sync failed');
|
||||
} catch (err: unknown) { const errObj = asError(err);
|
||||
toast.error(errObj?.message || errObj?.detail || 'Sync failed');
|
||||
} finally {
|
||||
setSyncing(null);
|
||||
}
|
||||
@@ -136,8 +137,8 @@ export function MailSettingsPage() {
|
||||
await deleteAccount(accountId);
|
||||
setAccounts((prev) => prev.filter((a) => a.id !== accountId));
|
||||
toast.success(t('mail.accountDeleted'));
|
||||
} catch (err: any) {
|
||||
toast.error(err?.message || err?.detail || 'Delete failed');
|
||||
} catch (err: unknown) { const errObj = asError(err);
|
||||
toast.error(errObj?.message || errObj?.detail || 'Delete failed');
|
||||
}
|
||||
}, [toast, t]);
|
||||
|
||||
@@ -147,8 +148,8 @@ export function MailSettingsPage() {
|
||||
setAccounts((prev) => prev.map((a) => (a.id === accountId ? updated : a)));
|
||||
setEditingDisplayName(null);
|
||||
toast.success(t('common.saved'));
|
||||
} catch (err: any) {
|
||||
toast.error(err?.message || err?.detail || 'Save failed');
|
||||
} catch (err: unknown) { const errObj = asError(err);
|
||||
toast.error(errObj?.message || errObj?.detail || 'Save failed');
|
||||
}
|
||||
}, [displayNameValue, toast, t]);
|
||||
|
||||
@@ -191,8 +192,8 @@ export function MailSettingsPage() {
|
||||
setAccounts((prev) => prev.map((a) => (a.id === accountId ? updated : a)));
|
||||
setFolderMappingEdit(null);
|
||||
toast.success(t('common.saved'));
|
||||
} catch (err: any) {
|
||||
toast.error(err?.message || err?.detail || 'Save failed');
|
||||
} catch (err: unknown) { const errObj = asError(err);
|
||||
toast.error(errObj?.message || errObj?.detail || 'Save failed');
|
||||
} finally {
|
||||
setSavingMapping(false);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user