change all actions
This commit is contained in:
@@ -82,13 +82,13 @@ const List: FC = () => {
|
||||
|
||||
const handleDeleteSelected = () => {
|
||||
const messageIds = selectedMessages.map(message => message.id);
|
||||
emailActions.bulkDelete(messageIds);
|
||||
emailActions.bulkDelete(messageIds, selectedMessages[0].mailbox);
|
||||
setSelectedMessages([]);
|
||||
};
|
||||
|
||||
const handleRestoreSelected = () => {
|
||||
const messageIds = selectedMessages.map(message => message.id);
|
||||
emailActions.bulkRestore(messageIds);
|
||||
emailActions.bulkRestore(messageIds, selectedMessages[0].mailbox);
|
||||
setSelectedMessages([]);
|
||||
};
|
||||
|
||||
@@ -96,12 +96,12 @@ const List: FC = () => {
|
||||
{
|
||||
label: 'بازگردانی',
|
||||
icon: <RecoveryConvert size={16} color="black" />,
|
||||
onClick: () => emailActions.restore(message.id),
|
||||
onClick: () => emailActions.restore({ messageId: message.id, mailbox: message.mailbox }),
|
||||
},
|
||||
{
|
||||
label: 'حذف دائم',
|
||||
icon: <Trash size={16} color="red" />,
|
||||
onClick: () => emailActions.deletePermanently(message.id),
|
||||
onClick: () => emailActions.deletePermanently({ messageId: message.id, mailbox: message.mailbox }),
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
@@ -82,13 +82,13 @@ const List: FC = () => {
|
||||
|
||||
const handleDeleteSelected = () => {
|
||||
const messageIds = selectedMessages.map(message => message.id);
|
||||
emailActions.bulkMoveToTrash(messageIds);
|
||||
emailActions.bulkMoveToTrash(messageIds, selectedMessages[0].mailbox);
|
||||
setSelectedMessages([]);
|
||||
};
|
||||
|
||||
const handleUnarchiveSelected = () => {
|
||||
const messageIds = selectedMessages.map(message => message.id);
|
||||
emailActions.bulkUnarchive(messageIds);
|
||||
emailActions.bulkUnarchive(messageIds, selectedMessages[0].mailbox);
|
||||
setSelectedMessages([]);
|
||||
};
|
||||
|
||||
@@ -96,12 +96,12 @@ const List: FC = () => {
|
||||
{
|
||||
label: 'خروج از آرشیو',
|
||||
icon: <ArchiveSlash size={16} color="black" />,
|
||||
onClick: () => emailActions.unarchive(message.id),
|
||||
onClick: () => emailActions.unarchive({ messageId: message.id, mailbox: message.mailbox }),
|
||||
},
|
||||
{
|
||||
label: 'حذف',
|
||||
icon: <Trash size={16} color="red" />,
|
||||
onClick: () => emailActions.moveToTrash(message.id),
|
||||
onClick: () => emailActions.moveToTrash({ messageId: message.id, mailbox: message.mailbox }),
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ import { useGetDrafts } from './hooks/useDraftData';
|
||||
import { DraftMessage } from './types/DraftTypes';
|
||||
import { formatDate } from '@/config/func';
|
||||
import { useEmailActions } from '@/hooks/useEmailActions';
|
||||
import { useSharedStore } from '@/shared/store/sharedStore';
|
||||
|
||||
const List: FC = () => {
|
||||
const navigate = useNavigate();
|
||||
@@ -17,6 +18,7 @@ const List: FC = () => {
|
||||
const [currentPage, setCurrentPage] = useState(1);
|
||||
const [filters, setFilters] = useState<FilterValues>({});
|
||||
const emailActions = useEmailActions();
|
||||
const { setDraftData, setOpenNewMessage, setEditingDraftId } = useSharedStore();
|
||||
|
||||
const { data: draftData, isLoading, refetch, isFetching } = useGetDrafts({
|
||||
page: currentPage,
|
||||
@@ -113,14 +115,14 @@ const List: FC = () => {
|
||||
|
||||
const handleDeleteSelected = () => {
|
||||
selectedMessages.forEach(message => {
|
||||
emailActions.deleteDraft(message.id);
|
||||
emailActions.deleteDraft({ messageId: message.id, mailbox: message.mailbox });
|
||||
});
|
||||
setSelectedMessages([]);
|
||||
};
|
||||
|
||||
const handleSendSelected = () => {
|
||||
selectedMessages.forEach(message => {
|
||||
emailActions.sendDraft(message.id);
|
||||
emailActions.sendDraft({ messageId: message.id });
|
||||
});
|
||||
setSelectedMessages([]);
|
||||
};
|
||||
@@ -134,17 +136,23 @@ const List: FC = () => {
|
||||
};
|
||||
|
||||
const handleDeleteDraft = (messageId: number) => {
|
||||
emailActions.deleteDraft(messageId);
|
||||
emailActions.deleteDraft({ messageId: messageId, mailbox: '' });
|
||||
};
|
||||
|
||||
const handleSendDraft = (messageId: number) => {
|
||||
emailActions.sendDraft(messageId);
|
||||
emailActions.sendDraft({ messageId: messageId });
|
||||
};
|
||||
|
||||
const handleEditDraft = (messageId: number) => {
|
||||
navigate(`/draft/edit/${messageId}`);
|
||||
};
|
||||
|
||||
const handleRowClick = (messageId: number, item: DraftMessage) => {
|
||||
setDraftData(item);
|
||||
setEditingDraftId(messageId);
|
||||
setOpenNewMessage(true);
|
||||
};
|
||||
|
||||
const getRowActions = (message: DraftMessage): RowActionItem[] => [
|
||||
{
|
||||
label: 'ارسال',
|
||||
@@ -193,7 +201,7 @@ const List: FC = () => {
|
||||
selectedActions={selectedActions}
|
||||
onSelectionChange={handleSelectionChange}
|
||||
selectedRows={selectedMessages}
|
||||
onRowClick={(id) => navigate(`/draft/edit/${id}`)}
|
||||
onRowClick={handleRowClick}
|
||||
noDataMessage={
|
||||
<div className="flex flex-col items-center ">
|
||||
<InfoCircle size={32} className="text-gray-300 mb-2" />
|
||||
|
||||
@@ -42,4 +42,29 @@ export const useEditDraft = () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['drafts'] });
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
export const useUpdateDraft = () => {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: ({ messageId, draftData }: { messageId: string; draftData: DraftUpdateDto }) =>
|
||||
api.updateDraft(messageId, draftData),
|
||||
onSuccess: () => {
|
||||
// Invalidate drafts queries to refresh the list
|
||||
queryClient.invalidateQueries({ queryKey: ['drafts'] });
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
export const useSendDraft = () => {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: (messageId: string) => api.sendDraft(messageId),
|
||||
onSuccess: () => {
|
||||
// Invalidate drafts queries to refresh the list
|
||||
queryClient.invalidateQueries({ queryKey: ['drafts'] });
|
||||
},
|
||||
});
|
||||
};
|
||||
@@ -29,9 +29,25 @@ export const editDraft = async (
|
||||
return data;
|
||||
};
|
||||
|
||||
export const updateDraft = async (
|
||||
messageId: string,
|
||||
draftData: DraftUpdateDto
|
||||
): Promise<void> => {
|
||||
const { data } = await axios.patch(
|
||||
`/email/messages/drafts/${messageId}`,
|
||||
draftData
|
||||
);
|
||||
return data;
|
||||
};
|
||||
|
||||
export const sendDraft = async (messageId: string): Promise<void> => {
|
||||
const { data } = await axios.post(`/email/messages/drafts/${messageId}/send`);
|
||||
return data;
|
||||
};
|
||||
|
||||
export const getDraftDetail = async (
|
||||
messageId: string
|
||||
): Promise<InboxMessage> => {
|
||||
const { data } = await axios.get(`/email/messages/drafts/${messageId}`);
|
||||
const { data } = await axios.get(`/email/messages/${messageId}`);
|
||||
return data.data.message;
|
||||
};
|
||||
|
||||
@@ -104,4 +104,6 @@ export interface DraftUpdateDto {
|
||||
text?: string;
|
||||
html?: string;
|
||||
attachments?: EmailAttachmentDto[];
|
||||
isDraft?: boolean;
|
||||
uploadOnly?: boolean;
|
||||
}
|
||||
|
||||
@@ -83,19 +83,19 @@ const List: FC = () => {
|
||||
|
||||
const handleDeleteSelected = () => {
|
||||
const messageIds = selectedMessages.map(message => message.id);
|
||||
emailActions.bulkMoveToTrash(messageIds);
|
||||
emailActions.bulkMoveToTrash(messageIds, selectedMessages[0].mailbox);
|
||||
setSelectedMessages([]);
|
||||
};
|
||||
|
||||
const handleArchiveSelected = () => {
|
||||
const messageIds = selectedMessages.map(message => message.id);
|
||||
emailActions.bulkArchive(messageIds);
|
||||
emailActions.bulkArchive(messageIds, selectedMessages[0].mailbox);
|
||||
setSelectedMessages([]);
|
||||
};
|
||||
|
||||
const handleUnfavoriteSelected = () => {
|
||||
const messageIds = selectedMessages.map(message => message.id);
|
||||
emailActions.bulkUnfavorite(messageIds);
|
||||
emailActions.bulkUnfavorite(messageIds, selectedMessages[0].mailbox);
|
||||
setSelectedMessages([]);
|
||||
};
|
||||
|
||||
@@ -103,17 +103,17 @@ const List: FC = () => {
|
||||
{
|
||||
label: 'حذف از علاقهمندیها',
|
||||
icon: <Star size={16} color="black" />,
|
||||
onClick: () => emailActions.unfavorite(message.id),
|
||||
onClick: () => emailActions.unfavorite({ messageId: message.id, mailbox: message.mailbox }),
|
||||
},
|
||||
{
|
||||
label: 'بایگانی',
|
||||
icon: <Archive size={16} color="black" />,
|
||||
onClick: () => emailActions.archive(message.id),
|
||||
onClick: () => emailActions.archive({ messageId: message.id, mailbox: message.mailbox }),
|
||||
},
|
||||
{
|
||||
label: 'حذف',
|
||||
icon: <Trash size={16} color="red" />,
|
||||
onClick: () => emailActions.moveToTrash(message.id),
|
||||
onClick: () => emailActions.moveToTrash({ messageId: message.id, mailbox: message.mailbox }),
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
@@ -21,14 +21,14 @@ const DetailEmail: FC = () => {
|
||||
|
||||
const { t } = useTranslation()
|
||||
const emailActions = useEmailActions()
|
||||
const { id } = useParams<{ id: string }>()
|
||||
const { id, mailbox } = useParams<{ id: string, mailbox: string }>()
|
||||
const { email: userEmail } = useAuthStore()
|
||||
const [showAnswer, setShowAnswer] = useState<boolean>(false)
|
||||
const [value, setValue] = useState<string>('')
|
||||
const [priority, setPriority] = useState<string>('')
|
||||
|
||||
// API hooks
|
||||
const { data: messageDetail, isLoading, error } = useGetMessageDetail(id || '', !!id)
|
||||
const { data: messageDetail, isLoading, error } = useGetMessageDetail(id || '', mailbox || '', !!id)
|
||||
const sendEmailMutation = useSendEmail()
|
||||
// const saveDraftMutation = useSaveDraft()
|
||||
|
||||
@@ -113,7 +113,7 @@ const DetailEmail: FC = () => {
|
||||
useEffect(() => {
|
||||
if (messageDetail && !messageDetail.seen && id) {
|
||||
console.log('Marking message as seen:', id, 'Current seen status:', messageDetail.seen)
|
||||
emailActions.markAsSeen(Number(id))
|
||||
emailActions.markAsSeen({ messageId: Number(id), mailbox: mailbox || '' })
|
||||
}
|
||||
}, [messageDetail, emailActions, id])
|
||||
|
||||
|
||||
@@ -144,25 +144,25 @@ const List: FC = () => {
|
||||
|
||||
const handleDeleteSelected = () => {
|
||||
const messageIds = selectedMessages.map(message => message.id);
|
||||
emailActions.bulkMoveToTrash(messageIds);
|
||||
emailActions.bulkMoveToTrash(messageIds, selectedMessages[0].mailbox);
|
||||
setSelectedMessages([]);
|
||||
};
|
||||
|
||||
const handleArchiveSelected = () => {
|
||||
const messageIds = selectedMessages.map(message => message.id);
|
||||
emailActions.bulkArchive(messageIds);
|
||||
emailActions.bulkArchive(messageIds, selectedMessages[0].mailbox);
|
||||
setSelectedMessages([]);
|
||||
};
|
||||
|
||||
const handleMarkAsReadSelected = () => {
|
||||
const messageIds = selectedMessages.map(message => message.id);
|
||||
emailActions.bulkMarkAsSeen(messageIds);
|
||||
emailActions.bulkMarkAsSeen(messageIds, selectedMessages[0].mailbox);
|
||||
setSelectedMessages([]);
|
||||
};
|
||||
|
||||
const handleFavoriteSelected = () => {
|
||||
const messageIds = selectedMessages.map(message => message.id);
|
||||
emailActions.bulkFavorite(messageIds);
|
||||
emailActions.bulkFavorite(messageIds, selectedMessages[0].mailbox);
|
||||
setSelectedMessages([]);
|
||||
};
|
||||
|
||||
@@ -170,22 +170,22 @@ const List: FC = () => {
|
||||
{
|
||||
label: message.seen ? 'علامتگذاری به عنوان خوانده نشده' : 'علامتگذاری به عنوان خوانده شده',
|
||||
icon: <Edit size={16} color="black" />,
|
||||
onClick: () => emailActions.markAsSeen(message.id),
|
||||
onClick: () => emailActions.markAsSeen({ messageId: message.id, mailbox: message.mailbox }),
|
||||
},
|
||||
{
|
||||
label: 'اضافه به علاقهمندیها',
|
||||
icon: <Star1 size={16} color="black" />,
|
||||
onClick: () => emailActions.favorite(message.id),
|
||||
onClick: () => emailActions.favorite({ messageId: message.id, mailbox: message.mailbox }),
|
||||
},
|
||||
{
|
||||
label: 'بایگانی',
|
||||
icon: <Archive size={16} color="black" />,
|
||||
onClick: () => emailActions.archive(message.id),
|
||||
onClick: () => emailActions.archive({ messageId: message.id, mailbox: message.mailbox }),
|
||||
},
|
||||
{
|
||||
label: 'حذف',
|
||||
icon: <Trash size={16} color="red" />,
|
||||
onClick: () => emailActions.moveToTrash(message.id),
|
||||
onClick: () => emailActions.moveToTrash({ messageId: message.id, mailbox: message.mailbox }),
|
||||
},
|
||||
];
|
||||
|
||||
@@ -229,7 +229,7 @@ const List: FC = () => {
|
||||
selectedActions={selectedActions}
|
||||
onSelectionChange={handleSelectionChange}
|
||||
selectedRows={selectedMessages}
|
||||
onRowClick={(id) => navigate(`/mail/${id}`)}
|
||||
onRowClick={(id, item) => navigate(`/mail/${id}/${item.mailbox}`)}
|
||||
noDataMessage={
|
||||
<div className="flex flex-col items-center">
|
||||
<InfoCircle size={32} className="text-gray-300 mb-2" />
|
||||
|
||||
@@ -31,10 +31,10 @@ export const useGetInbox = (query: MessageListQueryDto) => {
|
||||
});
|
||||
};
|
||||
|
||||
export const useGetMessageDetail = (messageId: string, enabled: boolean = true) => {
|
||||
export const useGetMessageDetail = (messageId: string, mailbox: string, enabled: boolean = true) => {
|
||||
return useQuery({
|
||||
queryKey: ['message', messageId],
|
||||
queryFn: () => api.getMessageDetail(messageId),
|
||||
queryKey: ['message', messageId, mailbox],
|
||||
queryFn: () => api.getMessageDetail(messageId, mailbox),
|
||||
enabled: !!messageId && enabled,
|
||||
staleTime: 0, // Always fetch fresh data for message details
|
||||
});
|
||||
|
||||
@@ -32,10 +32,11 @@ export const getInbox = async (
|
||||
};
|
||||
|
||||
export const getMessageDetail = async (
|
||||
messageId: string
|
||||
messageId: string,
|
||||
mailbox: string
|
||||
): Promise<MessageDetail> => {
|
||||
const { data }: { data: MessageDetailResponse } = await axios.get(
|
||||
`/email/messages/${messageId}`
|
||||
`/email/messages/${messageId}?mailbox=${mailbox}`
|
||||
);
|
||||
return data.data.message;
|
||||
};
|
||||
|
||||
@@ -303,4 +303,5 @@ export enum BulkActionType {
|
||||
export interface BulkActionRequest {
|
||||
messageIds: number[];
|
||||
action: BulkActionType;
|
||||
mailbox: string;
|
||||
}
|
||||
|
||||
@@ -90,19 +90,19 @@ const List: FC = () => {
|
||||
|
||||
const handleDeleteSelected = () => {
|
||||
const messageIds = selectedMessages.map(message => message.id);
|
||||
emailActions.bulkMoveToTrash(messageIds);
|
||||
emailActions.bulkMoveToTrash(messageIds, selectedMessages[0].mailbox);
|
||||
setSelectedMessages([]);
|
||||
};
|
||||
|
||||
const handleArchiveSelected = () => {
|
||||
const messageIds = selectedMessages.map(message => message.id);
|
||||
emailActions.bulkArchive(messageIds);
|
||||
emailActions.bulkArchive(messageIds, selectedMessages[0].mailbox);
|
||||
setSelectedMessages([]);
|
||||
};
|
||||
|
||||
const handleFavoriteSelected = () => {
|
||||
const messageIds = selectedMessages.map(message => message.id);
|
||||
emailActions.bulkFavorite(messageIds);
|
||||
emailActions.bulkFavorite(messageIds, selectedMessages[0].mailbox);
|
||||
setSelectedMessages([]);
|
||||
};
|
||||
|
||||
@@ -110,17 +110,17 @@ const List: FC = () => {
|
||||
{
|
||||
label: 'اضافه به علاقهمندیها',
|
||||
icon: <Star size={16} color="black" />,
|
||||
onClick: () => emailActions.favorite(message.id),
|
||||
onClick: () => emailActions.favorite({ messageId: message.id, mailbox: message.mailbox }),
|
||||
},
|
||||
{
|
||||
label: 'بایگانی',
|
||||
icon: <Archive size={16} color="black" />,
|
||||
onClick: () => emailActions.archive(message.id),
|
||||
onClick: () => emailActions.archive({ messageId: message.id, mailbox: message.mailbox }),
|
||||
},
|
||||
{
|
||||
label: 'حذف',
|
||||
icon: <Trash size={16} color="red" />,
|
||||
onClick: () => emailActions.moveToTrash(message.id),
|
||||
onClick: () => emailActions.moveToTrash({ messageId: message.id, mailbox: message.mailbox }),
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
@@ -94,8 +94,8 @@ const List: FC = () => {
|
||||
setCurrentPage(1);
|
||||
};
|
||||
|
||||
const handleRowClick = (id: number) => {
|
||||
navigate(`${Paths.detailEmail}${id}`);
|
||||
const handleRowClick = (id: number, item: InboxMessage) => {
|
||||
navigate(`${Paths.detailEmail}${id}/${item.mailbox}`);
|
||||
};
|
||||
|
||||
const handleSelectionChange = (selectedRows: InboxMessage[]) => {
|
||||
@@ -104,19 +104,19 @@ const List: FC = () => {
|
||||
|
||||
const handleDeleteSelected = () => {
|
||||
const messageIds = selectedMessages.map(message => message.id);
|
||||
emailActions.bulkMoveToTrash(messageIds);
|
||||
emailActions.bulkMoveToTrash(messageIds, selectedMessages[0].mailbox);
|
||||
setSelectedMessages([]);
|
||||
};
|
||||
|
||||
const handleArchiveSelected = () => {
|
||||
const messageIds = selectedMessages.map(message => message.id);
|
||||
emailActions.bulkArchive(messageIds);
|
||||
emailActions.bulkArchive(messageIds, selectedMessages[0].mailbox);
|
||||
setSelectedMessages([]);
|
||||
};
|
||||
|
||||
const handleFavoriteSelected = () => {
|
||||
const messageIds = selectedMessages.map(message => message.id);
|
||||
emailActions.bulkFavorite(messageIds);
|
||||
emailActions.bulkFavorite(messageIds, selectedMessages[0].mailbox);
|
||||
setSelectedMessages([]);
|
||||
};
|
||||
|
||||
@@ -124,17 +124,17 @@ const List: FC = () => {
|
||||
{
|
||||
label: 'اضافه به علاقهمندیها',
|
||||
icon: <Star size={16} color="black" />,
|
||||
onClick: () => emailActions.favorite(message.id),
|
||||
onClick: () => emailActions.favorite({ messageId: message.id, mailbox: message.mailbox }),
|
||||
},
|
||||
{
|
||||
label: 'بایگانی',
|
||||
icon: <Archive size={16} color="black" />,
|
||||
onClick: () => emailActions.archive(message.id),
|
||||
onClick: () => emailActions.archive({ messageId: message.id, mailbox: message.mailbox }),
|
||||
},
|
||||
{
|
||||
label: 'حذف',
|
||||
icon: <Trash size={16} color="red" />,
|
||||
onClick: () => emailActions.moveToTrash(message.id),
|
||||
onClick: () => emailActions.moveToTrash({ messageId: message.id, mailbox: message.mailbox }),
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ const List: FC = () => {
|
||||
|
||||
const handleDeleteSelected = () => {
|
||||
const messageIds = selectedMessages.map(message => message.id);
|
||||
emailActions.bulkMoveToTrash(messageIds);
|
||||
emailActions.bulkMoveToTrash(messageIds, selectedMessages[0].mailbox);
|
||||
setSelectedMessages([]);
|
||||
};
|
||||
|
||||
@@ -100,7 +100,7 @@ const List: FC = () => {
|
||||
{
|
||||
label: 'حذف',
|
||||
icon: <Trash size={16} color="red" />,
|
||||
onClick: () => emailActions.moveToTrash(message.id),
|
||||
onClick: () => emailActions.moveToTrash({ messageId: message.id, mailbox: message.mailbox }),
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user