From 6dca90bd5632d5f013b8eef942bb3fb8c0e855ae Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Sat, 26 Jul 2025 15:52:18 +0330 Subject: [PATCH] pixel perfect --- src/assets/images/empty.svg | 38 +++++++++ src/components/RowActionsDropdown.tsx | 6 +- src/components/Table.tsx | 15 ++-- src/components/ui/checkbox.tsx | 2 +- src/pages/Trash/List.tsx | 2 +- src/pages/archive/List.tsx | 2 +- src/pages/draft/List.tsx | 2 +- src/pages/favorite/List.tsx | 2 +- src/pages/received/Components/Header.tsx | 21 ++--- .../received/Components/MessageArchive.tsx | 2 +- .../received/Components/MessageFavorite.tsx | 2 +- src/pages/received/Components/MessageSpam.tsx | 2 +- .../received/Components/MessageTrash.tsx | 2 +- .../received/Components/MessageUnread.tsx | 2 +- .../received/Components/SummarizeModal.tsx | 77 +++++++++++++++++++ src/pages/received/Components/Summerize.tsx | 71 +---------------- src/pages/received/List.tsx | 31 +++++++- src/pages/search/List.tsx | 2 +- src/pages/sent/List.tsx | 2 +- src/pages/spam/List.tsx | 2 +- 20 files changed, 184 insertions(+), 101 deletions(-) create mode 100644 src/assets/images/empty.svg create mode 100644 src/pages/received/Components/SummarizeModal.tsx diff --git a/src/assets/images/empty.svg b/src/assets/images/empty.svg new file mode 100644 index 0000000..0ef5c44 --- /dev/null +++ b/src/assets/images/empty.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/RowActionsDropdown.tsx b/src/components/RowActionsDropdown.tsx index c666c74..a75a2d9 100644 --- a/src/components/RowActionsDropdown.tsx +++ b/src/components/RowActionsDropdown.tsx @@ -77,7 +77,7 @@ const RowActionsDropdown: React.FC = ({ actions, classN return createPortal(
= ({ actions, classN ))}
, diff --git a/src/components/Table.tsx b/src/components/Table.tsx index 1acb1d9..4fc5b70 100644 --- a/src/components/Table.tsx +++ b/src/components/Table.tsx @@ -5,6 +5,7 @@ import { TableProps, RowDataType, ColumnType } from './types/TableTypes'; import { Checkbox } from './ui/checkbox'; import RowActionsDropdown from './RowActionsDropdown'; import Pagination from './Pagination'; +import NoData from '@/assets/images/empty.svg'; const Table = ({ columns, @@ -13,7 +14,7 @@ const Table = ({ onRowClick, className = '', rowClassName = '', - noDataMessage = 'هیچ داده‌ای یافت نشد', + noDataMessage = 'هیچ داده‌ای یافت نشد.', headerClassName = 'bg-gray-50', emptyRowsCount = 5, showHeader = true, @@ -117,7 +118,8 @@ const Table = ({ if (data.length === 0) { return (
- {noDataMessage} + no data +
{noDataMessage}
); } @@ -134,7 +136,7 @@ const Table = ({ return (
handleRowClick(item)} > {selectable && ( @@ -215,8 +217,9 @@ const Table = ({ if (data.length === 0) { return ( - - {noDataMessage} + + no data +
{noDataMessage}
); @@ -231,7 +234,7 @@ const Table = ({ return ( handleRowClick(item)} > {selectable && ( diff --git a/src/components/ui/checkbox.tsx b/src/components/ui/checkbox.tsx index defeb01..8978450 100644 --- a/src/components/ui/checkbox.tsx +++ b/src/components/ui/checkbox.tsx @@ -12,7 +12,7 @@ function Checkbox({ { noDataMessage={
-
هیچ پیامی یافت نشد
+
هیچ پیامی یافت نشد.
} selectable={true} diff --git a/src/pages/archive/List.tsx b/src/pages/archive/List.tsx index 9612bb4..f4d93d2 100644 --- a/src/pages/archive/List.tsx +++ b/src/pages/archive/List.tsx @@ -139,7 +139,7 @@ const List: FC = () => { noDataMessage={
-
هیچ پیامی یافت نشد
+
هیچ پیامی یافت نشد.
} selectable={true} diff --git a/src/pages/draft/List.tsx b/src/pages/draft/List.tsx index 0953c79..4b555d7 100644 --- a/src/pages/draft/List.tsx +++ b/src/pages/draft/List.tsx @@ -205,7 +205,7 @@ const List: FC = () => { noDataMessage={
-
هیچ پیش‌نویسی یافت نشد
+
هیچ پیش‌نویسی یافت نشد.
} selectable={true} diff --git a/src/pages/favorite/List.tsx b/src/pages/favorite/List.tsx index 976b45c..b01a077 100644 --- a/src/pages/favorite/List.tsx +++ b/src/pages/favorite/List.tsx @@ -159,7 +159,7 @@ const List: FC = () => { noDataMessage={
-
هیچ پیامی یافت نشد
+
هیچ پیامی یافت نشد.
} selectable={true} diff --git a/src/pages/received/Components/Header.tsx b/src/pages/received/Components/Header.tsx index 56585d4..f305d64 100644 --- a/src/pages/received/Components/Header.tsx +++ b/src/pages/received/Components/Header.tsx @@ -17,20 +17,23 @@ const Header: FC<{ mailBoxName: MailboxEnum, flagged: boolean }> = ({ mailBoxNam return (
-
- navigate(-1)} /> - - - - - {/* */} - - {/* */} +
+ navigate(-1)} /> +
+ + + + + {/* */} + + {/* */} +
+
+
+ + ) +} + +export default SummarizeModal \ No newline at end of file diff --git a/src/pages/received/Components/Summerize.tsx b/src/pages/received/Components/Summerize.tsx index c278b6f..cc60292 100644 --- a/src/pages/received/Components/Summerize.tsx +++ b/src/pages/received/Components/Summerize.tsx @@ -1,11 +1,8 @@ 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'; import Intelligense from '@/assets/images/intelligense.svg' -import Skeleton from 'react-loading-skeleton' -import { useNavigate } from 'react-router-dom' +import SummarizeModal from './SummarizeModal'; const Summerize: FC<{ id: string, mailbox: string, item: InboxMessage }> = ({ id, mailbox, item }) => { @@ -13,7 +10,6 @@ const Summerize: FC<{ id: string, mailbox: string, item: InboxMessage }> = ({ id 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) @@ -28,72 +24,11 @@ const Summerize: FC<{ id: string, mailbox: string, item: InboxMessage }> = ({ id return (
- summerize + summerize
- setOpen(false)} - isHeader - title_header='پیش نمایش ایمیل' - > -
- {isPending ? ( -
-
- موضوع: -
-
- -
- -
-
- خلاصه متن: -
-
- -
-
-
- ) : ( -
-
- موضوع: -
-
- {item.subject} -
- -
-
- خلاصه متن: -
-
- {data?.data?.summary} -
-
-
- )} - -
-
-
-
-
-
+ setOpen(false)} isPending={isPending} item={item} id={id} mailbox={mailbox} data={data} />
) } diff --git a/src/pages/received/List.tsx b/src/pages/received/List.tsx index 29cf3b8..f7bdba4 100644 --- a/src/pages/received/List.tsx +++ b/src/pages/received/List.tsx @@ -6,29 +6,35 @@ import { ColumnType } from '../../components/types/TableTypes'; import { InfoCircle, More, Refresh2, Trash, Edit, Archive, ArchiveTick, Star1 } from 'iconsax-react'; import { RowActionItem } from '../../components/RowActionsDropdown'; import { useNavigate } from 'react-router-dom'; -import { useGetInbox } from './hooks/useEmailData'; +import { useGetInbox, useSummarizeEmail } from './hooks/useEmailData'; import { InboxMessage } from './types/Types'; 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'; +import Intelligense from '@/assets/images/intelligense.svg' +import SummarizeModal from './Components/SummarizeModal'; const List: FC = () => { + const navigate = useNavigate(); const { t } = useTranslation(); const [currentPage, setCurrentPage] = useState(1); const [filters, setFilters] = useState({}); const emailActions = useEmailActions(); + const [openSummarizeModal, setOpenSummarizeModal] = useState(false); + const { mutate: summarizeEmail, isPending: isSummarizing, data: summarizeData } = useSummarizeEmail(); const { data: inboxData, isLoading, refetch, isFetching } = useGetInbox({ page: currentPage, - limit: 25, + limit: 10, ...filters }); const [selectedMessages, setSelectedMessages] = useState([]); + const [selectedMessage, setSelectedMessage] = useState(null); const columns: ColumnType[] = [ { @@ -152,6 +158,15 @@ const List: FC = () => { ]; const getRowActions = (message: InboxMessage): RowActionItem[] => [ + { + label: 'مشاهده خلاصه', + icon: summerize, + onClick: () => { + setSelectedMessage(message) + setOpenSummarizeModal(true) + summarizeEmail({ messageId: message.id, mailbox: message.mailbox }) + }, + }, { label: message.seen ? 'علامت‌گذاری به عنوان خوانده نشده' : 'علامت‌گذاری به عنوان خوانده شده', icon: , @@ -231,6 +246,18 @@ const List: FC = () => { } : undefined} /> + {selectedMessage && ( + setOpenSummarizeModal(false)} + isPending={isSummarizing} + item={selectedMessage} + id={selectedMessage.id.toString()} + mailbox={selectedMessage.mailbox} + data={summarizeData} + /> + )} +
) } diff --git a/src/pages/search/List.tsx b/src/pages/search/List.tsx index b3d565a..f9eda69 100644 --- a/src/pages/search/List.tsx +++ b/src/pages/search/List.tsx @@ -173,7 +173,7 @@ const List: FC = () => {
- {filters.q ? 'هیچ نتیجه‌ای یافت نشد' : 'برای جستجو کلمه مورد نظر را وارد کنید'} + {filters.q ? 'هیچ نتیجه‌ای یافت نشد.' : 'برای جستجو کلمه مورد نظر را وارد کنید.'}
} diff --git a/src/pages/sent/List.tsx b/src/pages/sent/List.tsx index 031f760..e64ea3d 100644 --- a/src/pages/sent/List.tsx +++ b/src/pages/sent/List.tsx @@ -172,7 +172,7 @@ const List: FC = () => { noDataMessage={
-
هیچ پیامی یافت نشد
+
هیچ پیامی یافت نشد.
} selectable={true} diff --git a/src/pages/spam/List.tsx b/src/pages/spam/List.tsx index 5e2fa40..37aed5c 100644 --- a/src/pages/spam/List.tsx +++ b/src/pages/spam/List.tsx @@ -138,7 +138,7 @@ const List: FC = () => { noDataMessage={
-
هیچ پیامی یافت نشد
+
هیچ پیامی یافت نشد.
} selectable={true}