refactor: use UUID for envelope id to prevent accidental deletion

This commit is contained in:
rustmailer
2026-03-18 01:04:41 +08:00
parent 8a42fcdb4a
commit d690f57290
37 changed files with 393 additions and 393 deletions
+4 -4
View File
@@ -28,10 +28,10 @@ interface SearchContextType {
setOpen: (str: SearchDialogType | null) => void
currentEnvelope: EmailEnvelope | undefined
setCurrentEnvelope: React.Dispatch<React.SetStateAction<EmailEnvelope | undefined>>
toDelete: Map<number, Set<number>>
setToDelete: React.Dispatch<React.SetStateAction<Map<number, Set<number>>>>
selected: Map<number, Set<number>>
setSelected: React.Dispatch<React.SetStateAction<Map<number, Set<number>>>>
toDelete: Map<number, Set<string>>
setToDelete: React.Dispatch<React.SetStateAction<Map<number, Set<string>>>>
selected: Map<number, Set<string>>
setSelected: React.Dispatch<React.SetStateAction<Map<number, Set<string>>>>
deleteMailboxId: string | undefined
setDeleteMailboxId: React.Dispatch<React.SetStateAction<string | undefined>>
selectedAccountId: number | undefined
+1 -1
View File
@@ -37,7 +37,7 @@ export function EnvelopeDeleteDialog({ open, onOpenChange }: Props) {
const { t } = useTranslation()
const deleteMutation = useMutation({
mutationFn: ({ payload }: { payload: Record<string, number[]> }) =>
mutationFn: ({ payload }: { payload: Record<number, string[]> }) =>
delete_messages(payload),
retry: false,
onSuccess: () => {
+2 -2
View File
@@ -39,8 +39,8 @@ export default function Search() {
const { t } = useTranslation()
const [selectedEnvelope, setSelectedEnvelope] = React.useState<EmailEnvelope | undefined>(undefined);
const [open, setOpen] = useDialogState<SearchDialogType>(null)
const [toDelete, setToDelete] = React.useState<Map<number, Set<number>>>(new Map());
const [selected, setSelected] = React.useState<Map<number, Set<number>>>(new Map());
const [toDelete, setToDelete] = React.useState<Map<number, Set<string>>>(new Map());
const [selected, setSelected] = React.useState<Map<number, Set<string>>>(new Map());
const [selectedTags, setSelectedTags] = React.useState<string[]>([]);
const [sorting, setSorting] = React.useState<SortingState>([{ id: "date", desc: true }]);
const [deleteMailboxId, setDeleteMailboxId] = React.useState<string | undefined>(undefined);
+2 -2
View File
@@ -273,7 +273,7 @@ export function MailListTable({
}
}
const toggleSelected = (accountId: number, mailId: number) => {
const toggleSelected = (accountId: number, mailId: string) => {
setSelected(prev => {
const next = new Map(prev)
const set = new Set(next.get(accountId) || [])
@@ -292,7 +292,7 @@ export function MailListTable({
const totalSelected = Array.from(selected.values()).reduce((sum, set) => sum + set.size, 0)
const hasSelected = (accountId: number, mailId: number) => selected.get(accountId)?.has(mailId) ?? false
const hasSelected = (accountId: number, mailId: string) => selected.get(accountId)?.has(mailId) ?? false
if (isLoading) {
return (
+3 -3
View File
@@ -66,7 +66,7 @@ export function MailList({
}
}
const toggleToDelete = (accountId: number, mailId: number) => {
const toggleToDelete = (accountId: number, mailId: string) => {
setToDelete(prev => {
const next = new Map(prev);
const set = new Set(next.get(accountId) || []);
@@ -84,7 +84,7 @@ export function MailList({
});
};
const toggleSelected = (accountId: number, mailId: number) => {
const toggleSelected = (accountId: number, mailId: string) => {
setSelected(prev => {
const next = new Map(prev);
const set = new Set(next.get(accountId) || []);
@@ -105,7 +105,7 @@ export function MailList({
const totalSelected = Array.from(selected.values())
.reduce((sum, set) => sum + set.size, 0);
const hasSelected = (accountId: number, mailId: number) => {
const hasSelected = (accountId: number, mailId: string) => {
return selected.get(accountId)?.has(mailId) ?? false;
}
@@ -44,7 +44,7 @@ import { NestedEmailDialog } from './nested-email-dialog';
interface MailMessageViewProps {
envelope: {
id: number;
id: string;
account_id: number,
from?: string;
to?: string[];
@@ -172,7 +172,7 @@ export function MailMessageView({
setNestedEmlFile(filename);
};
const toggleToDelete = (accountId: number, mailId: number) => {
const toggleToDelete = (accountId: number, mailId: string) => {
setToDelete(prev => {
const next = new Map(prev);
const set = new Set(next.get(accountId) || []);
@@ -40,7 +40,7 @@ export function DataTableRowActions({ row }: DataTableRowActionsProps) {
const { setOpen, setCurrentEnvelope, setSelected, setToDelete } = useSearchContext()
const { t } = useTranslation()
const toggleToDelete = (accountId: number, mailId: number) => {
const toggleToDelete = (accountId: number, mailId: string) => {
setToDelete(prev => {
const next = new Map(prev)
const set = new Set(next.get(accountId) || [])
+2 -2
View File
@@ -42,7 +42,7 @@ interface MailThreadDialogProps {
export function MailThreadDialog({ open, onOpenChange }: MailThreadDialogProps) {
const { currentEnvelope } = useSearchContext();
const [expandedIds, setExpandedIds] = useState<Set<number>>(new Set());
const [expandedIds, setExpandedIds] = useState<Set<string>>(new Set());
const { t } = useTranslation();
const threadId = currentEnvelope?.thread_id;
@@ -73,7 +73,7 @@ export function MailThreadDialog({ open, onOpenChange }: MailThreadDialogProps)
const allMessages = data?.pages.flatMap((page) => page.items) ?? [];
const totalCount = data?.pages[0]?.total_items ?? 0;
const toggleExpand = (id: number) => {
const toggleExpand = (id: string) => {
setExpandedIds((prev) => {
const next = new Set(prev);
next.has(id) ? next.delete(id) : next.add(id);