diff --git a/.env b/.env index 5880399..1f2fb8d 100644 --- a/.env +++ b/.env @@ -7,7 +7,7 @@ VITE_SOCKET_URL = 'wss://dmail-api.danakcorp.com/email' # VITE_SOCKET_URL = 'ws://192.168.1.118:4000/email' VITE_BASE_URL = 'https://dmail-api.danakcorp.com' -# VITE_BASE_URL = 'http://192.168.1.118:4000' +# VITE_BASE_URL = 'http://192.168.1.101:4000' VITE_SERVICE_ID = 'e51afdc3-ea0b-49cf-8f49-2a6f131b024e' diff --git a/index.html b/index.html index 9bbcbd5..81090cd 100644 --- a/index.html +++ b/index.html @@ -5,7 +5,8 @@ - + + DMail | داناک diff --git a/src/components/newMessage/NewMessage.tsx b/src/components/newMessage/NewMessage.tsx index 0d743f6..b4d3bd5 100644 --- a/src/components/newMessage/NewMessage.tsx +++ b/src/components/newMessage/NewMessage.tsx @@ -9,6 +9,8 @@ import EmailAttachments from './EmailAttachments' import EmailFormActions from './EmailFormActions' import { useNewMessage } from './hooks/useNewMessage' import Intelligense from '@/assets/images/intelligense.svg' +import { useGenerateEmail } from '@/pages/received/hooks/useEmailData' +import { clx } from '@/helpers/utils' const NewMessage: FC = () => { const { t } = useTranslation('global') @@ -16,6 +18,8 @@ const NewMessage: FC = () => { const [isClosing, setIsClosing] = useState(false) const [shouldRender, setShouldRender] = useState(false) const [isOpening, setIsOpening] = useState(false) + const [isIntelligenseOpen, setIsIntelligenseOpen] = useState(false) + const [prompt, setPrompt] = useState('') const { // Form state @@ -46,6 +50,7 @@ const NewMessage: FC = () => { handleSaveDraft, resetForm } = useNewMessage() + const { mutate: generateEmail, isPending: isGeneratingEmail } = useGenerateEmail() useEffect(() => { if (openNewMessage) { @@ -87,6 +92,21 @@ const NewMessage: FC = () => { } } + const handlePrompt = () => { + if (isIntelligenseOpen && prompt.length > 0) { + generateEmail({ prompt }, { + onSuccess: (data) => { + setContent(data?.data?.assistance?.suggestion?.content) + if (subject === '') { + setSubject(data?.data?.assistance?.suggestion?.subject) + } + } + }) + } else { + setIsIntelligenseOpen(!isIntelligenseOpen) + } + } + return ( <> {shouldRender && ( @@ -126,17 +146,36 @@ const NewMessage: FC = () => {
- setSubject(e.target.value)} - /> +
+ setSubject(e.target.value)} + className='w-full' + /> -
- intelligense + { + isIntelligenseOpen && ( + setPrompt(e.target.value)} + className='w-full' + /> + ) + } +
+ +
+ intelligense
+ +
= ({ id, mailbox, item }) => { const [open, setOpen] = useState(false) - const { mutate: summarizeEmail } = useSummarizeEmail(); + const { mutate: summarizeEmail, isPending } = useSummarizeEmail(); // eslint-disable-next-line @typescript-eslint/no-explicit-any const [data, setData] = useState() + const navigate = useNavigate() const handleSummarizeEmail = () => { + setOpen(true) summarizeEmail({ messageId: Number(id), mailbox }, { onSuccess: (data) => { setData(data) } }); - setOpen(true) }; - console.log('data', data); - return (
@@ -38,21 +39,43 @@ const Summerize: FC<{ id: string, mailbox: string, item: InboxMessage }> = ({ id title_header='پیش نمایش ایمیل' >
-
- موضوع: -
-
- {item.subject} -
+ {isPending ? ( +
+
+ موضوع: +
+
+ +
-
-
- خلاصه متن: +
+
+ خلاصه متن: +
+
+ +
+
-
- {data?.data?.summary} + ) : ( +
+
+ موضوع: +
+
+ {item.subject} +
+ +
+
+ خلاصه متن: +
+
+ {data?.data?.summary} +
+
-
+ )}
@@ -65,9 +88,7 @@ const Summerize: FC<{ id: string, mailbox: string, item: InboxMessage }> = ({ id
diff --git a/src/pages/received/hooks/useEmailData.tsx b/src/pages/received/hooks/useEmailData.tsx index 0015088..a8ef58c 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, SingleActionRequest, SummarizeEmailRequest } from '../types/Types'; +import { SendEmailDto, MessageListQueryDto, SingleActionRequest, SummarizeEmailRequest, GenerateEmailRequest } from '../types/Types'; export const useSendEmail = () => { return useMutation({ @@ -124,4 +124,10 @@ export const useSummarizeEmail = () => { return useMutation({ mutationFn: (params: SummarizeEmailRequest) => api.summarizeEmail(params), }); +}; + +export const useGenerateEmail = () => { + return useMutation({ + mutationFn: (params: GenerateEmailRequest) => api.generateEmail(params), + }); }; \ No newline at end of file diff --git a/src/pages/received/service/EmailService.ts b/src/pages/received/service/EmailService.ts index 438e967..4d6059a 100644 --- a/src/pages/received/service/EmailService.ts +++ b/src/pages/received/service/EmailService.ts @@ -7,6 +7,7 @@ import { MessageDetailResponse, MessageDetail, SummarizeEmailRequest, + GenerateEmailRequest, } from "../types/Types"; export const sendEmail = async (params: SendEmailDto) => { @@ -14,6 +15,11 @@ export const sendEmail = async (params: SendEmailDto) => { return data; }; +export const generateEmail = async (params: GenerateEmailRequest) => { + const { data } = await axios.post(`/ai-assistant/write-email`, params); + return data; +}; + export const saveDraft = async (params: SendEmailDto) => { const { data } = await axios.post(`/email/messages/drafts`, params); return data; diff --git a/src/pages/received/types/Types.ts b/src/pages/received/types/Types.ts index 9faf042..c2758bb 100644 --- a/src/pages/received/types/Types.ts +++ b/src/pages/received/types/Types.ts @@ -321,3 +321,7 @@ export interface SummarizeEmailRequest { length?: "medium" | "short" | "long"; tone?: "professional" | "casual" | "formal"; } + +export interface GenerateEmailRequest { + prompt: string; +}