-
+
@@ -145,13 +145,13 @@ const DetailEmail: FC = () => {
-
+ /> */}
diff --git a/src/pages/received/enum/Enum.ts b/src/pages/received/enum/Enum.ts
new file mode 100644
index 0000000..e1338f5
--- /dev/null
+++ b/src/pages/received/enum/Enum.ts
@@ -0,0 +1,9 @@
+export const enum MailboxEnum {
+ INBOX = "INBOX",
+ DRAFTS = "Drafts",
+ ARCHIVE = "Archive", //should created when user created
+ FAVORITE = "FAVORITE", //should created when user created
+ Junk = "Junk",
+ SENT = "Sent Mail",
+ TRASH = "Trash",
+}
diff --git a/src/pages/received/hooks/useEmailData.tsx b/src/pages/received/hooks/useEmailData.tsx
index e61e783..61c0e1e 100644
--- a/src/pages/received/hooks/useEmailData.tsx
+++ b/src/pages/received/hooks/useEmailData.tsx
@@ -1,6 +1,6 @@
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import * as api from '../service/EmailService';
-import { SendEmailDto, MessageListQueryDto } from '../types/Types';
+import { SendEmailDto, MessageListQueryDto, SingleActionRequest } from '../types/Types';
export const useSendEmail = () => {
return useMutation({
@@ -18,7 +18,7 @@ export const useGetDraft = (query: MessageListQueryDto) => {
return useQuery({
queryKey: ['draft', query],
queryFn: () => api.getDraft(query),
- staleTime: 1000 * 60 * 5, // 5 minutes
+ staleTime: 0
});
};
@@ -31,12 +31,12 @@ export const useGetInbox = (query: MessageListQueryDto) => {
});
};
-export const useGetMessageDetail = (messageId: string, mailbox: string, enabled: boolean = true) => {
+export const useGetMessageDetail = (messageId: string, mailbox: string) => {
return useQuery({
queryKey: ['message', messageId, mailbox],
queryFn: () => api.getMessageDetail(messageId, mailbox),
- enabled: !!messageId && enabled,
- staleTime: 0, // Always fetch fresh data for message details
+ enabled: !!messageId && !!mailbox,
+ staleTime: 0
});
};
@@ -52,3 +52,57 @@ export const useDeleteMessage = () => {
});
};
+
+export const useMoveToArchive = () => {
+ return useMutation({
+ mutationFn: ({ messageId, mailbox }: SingleActionRequest) => api.moveToArchive(messageId, mailbox),
+ });
+};
+
+export const useMoveToTrash = () => {
+ return useMutation({
+ mutationFn: ({ messageId, mailbox }: SingleActionRequest) => api.moveToTrash(messageId, mailbox),
+ });
+};
+
+export const useMoveToFavorite = () => {
+ return useMutation({
+ mutationFn: ({ messageId, mailbox }: SingleActionRequest) => api.moveToFavorite(messageId, mailbox),
+ });
+};
+
+export const useMoveToJunk = () => {
+ return useMutation({
+ mutationFn: ({ messageId, mailbox }: SingleActionRequest) => api.moveToJunk(messageId, mailbox),
+ });
+};
+
+export const useMoveToNotJunk = () => {
+ return useMutation({
+ mutationFn: ({ messageId, mailbox }: SingleActionRequest) => api.moveToNotJunk(messageId, mailbox),
+ });
+};
+
+export const useMarkAsRead = () => {
+ return useMutation({
+ mutationFn: ({ messageId, mailbox }: SingleActionRequest) => api.markAsRead(messageId, mailbox),
+ });
+};
+
+export const useMarkAsUnread = () => {
+ return useMutation({
+ mutationFn: ({ messageId, mailbox }: SingleActionRequest) => api.markAsUnread(messageId, mailbox),
+ });
+};
+
+export const useUnArchiveMessage = () => {
+ return useMutation({
+ mutationFn: ({ messageId, mailbox }: SingleActionRequest) => api.unArchiveMessage(messageId, mailbox),
+ });
+};
+
+export const useUnFavoriteMessage = () => {
+ return useMutation({
+ mutationFn: ({ messageId, mailbox }: SingleActionRequest) => api.unFavoriteMessage(messageId, mailbox),
+ });
+};
\ No newline at end of file
diff --git a/src/pages/received/service/EmailService.ts b/src/pages/received/service/EmailService.ts
index 068ae13..6f56033 100644
--- a/src/pages/received/service/EmailService.ts
+++ b/src/pages/received/service/EmailService.ts
@@ -45,3 +45,103 @@ export const deleteMessage = async (messageId: string): Promise
=> {
const { data } = await axios.delete(`/email/messages/${messageId}`);
return data;
};
+
+export const moveToArchive = async (
+ messageId: string,
+ mailbox: string
+): Promise => {
+ const { data } = await axios.patch(
+ `/email/messages/${messageId}/archive?mailbox=${mailbox}`
+ );
+ return data;
+};
+
+export const moveToTrash = async (
+ messageId: string,
+ mailbox: string
+): Promise => {
+ const { data } = await axios.patch(
+ `/email/messages/${messageId}/trash?mailbox=${mailbox}`
+ );
+ return data;
+};
+
+export const moveToFavorite = async (
+ messageId: string,
+ mailbox: string
+): Promise => {
+ const { data } = await axios.patch(
+ `/email/messages/${messageId}/favorite?mailbox=${mailbox}`
+ );
+ return data;
+};
+
+export const moveToJunk = async (
+ messageId: string,
+ mailbox: string
+): Promise => {
+ const { data } = await axios.patch(
+ `/email/messages/${messageId}/junk?mailbox=${mailbox}`
+ );
+ return data;
+};
+
+export const moveToNotJunk = async (
+ messageId: string,
+ mailbox: string
+): Promise => {
+ const { data } = await axios.patch(
+ `/email/messages/${messageId}/not-junk?mailbox=${mailbox}`
+ );
+ return data;
+};
+
+export const restoreMessage = async (
+ messageId: string,
+ mailbox: string
+): Promise => {
+ const { data } = await axios.patch(
+ `/email/messages/${messageId}/restore?mailbox=${mailbox}`
+ );
+ return data;
+};
+
+export const unFavoriteMessage = async (
+ messageId: string,
+ mailbox: string
+): Promise => {
+ const { data } = await axios.patch(
+ `/email/messages/${messageId}/unfavorite?mailbox=${mailbox}`
+ );
+ return data;
+};
+
+export const unArchiveMessage = async (
+ messageId: string,
+ mailbox: string
+): Promise => {
+ const { data } = await axios.patch(
+ `/email/messages/${messageId}/unarchive?mailbox=${mailbox}`
+ );
+ return data;
+};
+
+export const markAsRead = async (
+ messageId: string,
+ mailbox: string
+): Promise => {
+ const { data } = await axios.patch(
+ `/email/messages/${messageId}/seen?mailbox=${mailbox}`
+ );
+ return data;
+};
+
+export const markAsUnread = async (
+ messageId: string,
+ mailbox: string
+): Promise => {
+ const { data } = await axios.patch(
+ `/email/messages/${messageId}/unseen?mailbox=${mailbox}`
+ );
+ return data;
+};
diff --git a/src/pages/received/types/Types.ts b/src/pages/received/types/Types.ts
index 5b686af..bc398bd 100644
--- a/src/pages/received/types/Types.ts
+++ b/src/pages/received/types/Types.ts
@@ -235,6 +235,8 @@ export interface MessageDetail {
success: boolean;
id: number;
mailbox: string;
+ mailboxName?: string;
+
thread: string;
user: string;
envelope: {
@@ -305,3 +307,8 @@ export interface BulkActionRequest {
action: BulkActionType;
mailbox: string;
}
+
+export interface SingleActionRequest {
+ messageId: string;
+ mailbox: string;
+}
diff --git a/src/pages/spam/List.tsx b/src/pages/spam/List.tsx
index 15636f0..8d1b8d5 100644
--- a/src/pages/spam/List.tsx
+++ b/src/pages/spam/List.tsx
@@ -144,7 +144,7 @@ const List: FC = () => {
selectedActions={selectedActions}
onSelectionChange={handleSelectionChange}
selectedRows={selectedMessages}
- onRowClick={(id) => navigate(`/mail/${id}`)}
+ onRowClick={(id, item) => navigate(`/mail/${id}/${item.mailbox}`)}
noDataMessage={
diff --git a/src/pages/spam/hooks/useSpamData.tsx b/src/pages/spam/hooks/useSpamData.tsx
index c2140f5..a38969b 100644
--- a/src/pages/spam/hooks/useSpamData.tsx
+++ b/src/pages/spam/hooks/useSpamData.tsx
@@ -6,6 +6,6 @@ export const useGetSpamMessages = (query: MessageListQueryDto) => {
return useQuery({
queryKey: ['spam-messages', query],
queryFn: () => getSpamMessages(query),
- staleTime: 5 * 60 * 1000, // 5 minutes
+ staleTime: 0
});
};
\ No newline at end of file