profile + summerize
This commit is contained in:
@@ -25,10 +25,10 @@ const Favorite: FC<{ flagged: boolean, id: string, mailbox: string }> = ({ flagg
|
||||
}, [flagged])
|
||||
|
||||
return (
|
||||
<div className="inline-block mt-[3px] relative -right-6" onClick={handleFavoriteClick}>
|
||||
<div onClick={handleFavoriteClick}>
|
||||
<Star1
|
||||
variant={isFavorite ? 'Bold' : 'Outline'}
|
||||
size={18}
|
||||
size={19}
|
||||
color={isFavorite ? '#FFC107' : '#8C90A3'}
|
||||
className='cursor-pointer select-none'
|
||||
/>
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
import { FC, useState } from 'react'
|
||||
import { useSummarizeEmail } from '../hooks/useEmailData';
|
||||
import DefaulModal from '@/components/DefaulModal';
|
||||
import Button from '@/components/Button';
|
||||
import { InboxMessage } from '@/pages/draft/types/DraftTypes';
|
||||
|
||||
const Summerize: FC<{ id: string, mailbox: string, item: InboxMessage }> = ({ id, mailbox, item }) => {
|
||||
|
||||
const [open, setOpen] = useState(false)
|
||||
const { mutate: summarizeEmail } = useSummarizeEmail();
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
const [data, setData] = useState<any>()
|
||||
|
||||
const handleSummarizeEmail = () => {
|
||||
summarizeEmail({ messageId: Number(id), mailbox }, {
|
||||
onSuccess: (data) => {
|
||||
setData(data)
|
||||
}
|
||||
});
|
||||
setOpen(true)
|
||||
};
|
||||
|
||||
console.log('data', data);
|
||||
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div onClick={handleSummarizeEmail}>
|
||||
S
|
||||
</div>
|
||||
<DefaulModal
|
||||
open={open}
|
||||
close={() => setOpen(false)}
|
||||
isHeader
|
||||
title_header='پیش نمایش ایمیل'
|
||||
>
|
||||
<div className='mt-5'>
|
||||
<div className='text-xs'>
|
||||
موضوع:
|
||||
</div>
|
||||
<div className='mt-1.5 text-xs'>
|
||||
{item.subject}
|
||||
</div>
|
||||
|
||||
<div className='mt-7'>
|
||||
<div className='text-xs'>
|
||||
خلاصه متن:
|
||||
</div>
|
||||
<div className='mt-3 leading-5 text-xs text-description'>
|
||||
{data?.data?.summary}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className='mt-14 flex justify-end'>
|
||||
<div className='flex gap-3'>
|
||||
<Button
|
||||
label='بستن'
|
||||
variant='secondary'
|
||||
className='w-fit !px-10'
|
||||
onClick={() => setOpen(false)}
|
||||
/>
|
||||
<Button
|
||||
label='مشاهده'
|
||||
className='w-fit !px-10'
|
||||
onClick={() => {
|
||||
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</DefaulModal>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default Summerize
|
||||
@@ -12,6 +12,7 @@ import { formatDate } from '@/config/func';
|
||||
import MarkAsRead from '@/assets/images/mark_as_read.svg'
|
||||
import { useEmailActions } from '@/hooks/useEmailActions';
|
||||
import Favorite from './Components/Favorite';
|
||||
import Summerize from './Components/Summerize';
|
||||
|
||||
const List: FC = () => {
|
||||
const navigate = useNavigate();
|
||||
@@ -30,13 +31,6 @@ const List: FC = () => {
|
||||
const [selectedMessages, setSelectedMessages] = useState<InboxMessage[]>([]);
|
||||
|
||||
const columns: ColumnType<InboxMessage>[] = [
|
||||
{
|
||||
key: 'flagged',
|
||||
title: 'علامت گذاری',
|
||||
render: (item) => (
|
||||
<Favorite flagged={item.flagged} id={item.id.toString()} mailbox={item.mailbox} />
|
||||
)
|
||||
},
|
||||
{
|
||||
key: 'subject',
|
||||
title: 'عنوان پیام',
|
||||
@@ -144,6 +138,19 @@ const List: FC = () => {
|
||||
setSelectedMessages([]);
|
||||
};
|
||||
|
||||
const getInlineActions = (item: InboxMessage) => [
|
||||
{
|
||||
icon: <Favorite flagged={item.flagged} id={item.id.toString()} mailbox={item.mailbox} />,
|
||||
onClick: () => { }, // عملیات در کامپوننت Favorite خودش انجام میشود
|
||||
tooltip: item.flagged ? 'حذف از علاقهمندیها' : 'اضافه به علاقهمندیها'
|
||||
},
|
||||
{
|
||||
icon: <Summerize item={item} id={item.id.toString()} mailbox={item.mailbox} />,
|
||||
onClick: () => { }, // عملیات در کامپوننت Summerize خودش انجام میشود
|
||||
tooltip: 'خلاصهسازی'
|
||||
}
|
||||
];
|
||||
|
||||
const getRowActions = (message: InboxMessage): RowActionItem[] => [
|
||||
{
|
||||
label: message.seen ? 'علامتگذاری به عنوان خوانده نشده' : 'علامتگذاری به عنوان خوانده شده',
|
||||
@@ -215,6 +222,7 @@ const List: FC = () => {
|
||||
</div>
|
||||
}
|
||||
selectable={true}
|
||||
inlineActions={getInlineActions}
|
||||
rowActions={getRowActions}
|
||||
pagination={pager ? {
|
||||
totalPages: pager.totalPages,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
||||
import * as api from '../service/EmailService';
|
||||
import { SendEmailDto, MessageListQueryDto, SingleActionRequest } from '../types/Types';
|
||||
import { SendEmailDto, MessageListQueryDto, SingleActionRequest, SummarizeEmailRequest } from '../types/Types';
|
||||
|
||||
export const useSendEmail = () => {
|
||||
return useMutation({
|
||||
@@ -118,4 +118,10 @@ export const useDownloadAttachment = () => {
|
||||
mutationFn: ({ messageId, attachmentId, mailbox }: { messageId: string; attachmentId: string; mailbox: string }) =>
|
||||
api.downloadAttachment(messageId, attachmentId, mailbox),
|
||||
});
|
||||
};
|
||||
|
||||
export const useSummarizeEmail = () => {
|
||||
return useMutation({
|
||||
mutationFn: (params: SummarizeEmailRequest) => api.summarizeEmail(params),
|
||||
});
|
||||
};
|
||||
@@ -6,6 +6,7 @@ import {
|
||||
InboxResponse,
|
||||
MessageDetailResponse,
|
||||
MessageDetail,
|
||||
SummarizeEmailRequest,
|
||||
} from "../types/Types";
|
||||
|
||||
export const sendEmail = async (params: SendEmailDto) => {
|
||||
@@ -149,3 +150,8 @@ export const downloadAttachment = async (
|
||||
);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
export const summarizeEmail = async (params: SummarizeEmailRequest) => {
|
||||
const { data } = await axios.post(`/ai-assistant/summarize-email`, params);
|
||||
return data;
|
||||
};
|
||||
|
||||
@@ -314,3 +314,10 @@ export interface SingleActionRequest {
|
||||
messageId: string;
|
||||
mailbox: string;
|
||||
}
|
||||
|
||||
export interface SummarizeEmailRequest {
|
||||
messageId: number;
|
||||
mailbox: string;
|
||||
length?: "medium" | "short" | "long";
|
||||
tone?: "professional" | "casual" | "formal";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user