change all actions

This commit is contained in:
hamid zarghami
2025-07-20 16:47:01 +03:30
parent 1106952e22
commit 9eed4ede94
22 changed files with 309 additions and 127 deletions
+3 -3
View File
@@ -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])
+9 -9
View File
@@ -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" />
+3 -3
View File
@@ -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
});
+3 -2
View File
@@ -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;
};
+1
View File
@@ -303,4 +303,5 @@ export enum BulkActionType {
export interface BulkActionRequest {
messageIds: number[];
action: BulkActionType;
mailbox: string;
}