import Filters, { FilterValues } from '../../components/Filters'; import { FC, useState } from 'react' import Table from '../../components/Table'; import { ColumnType } from '../../components/types/TableTypes'; import { InfoCircle, More, Refresh2, Trash, Star, Archive } from 'iconsax-react'; import { RowActionItem } from '../../components/RowActionsDropdown'; import { useNavigate } from 'react-router-dom'; import { useGetFavoriteMessages } from './hooks/useFavoriteData'; import { FavoriteMessage } from './types/FavoriteTypes'; import { formatDate } from '@/config/func'; import { useEmailActions } from '@/hooks/useEmailActions'; const List: FC = () => { const navigate = useNavigate(); const [currentPage, setCurrentPage] = useState(1); const [filters, setFilters] = useState({}); const emailActions = useEmailActions(); const { data: favoriteData, isLoading, refetch, isFetching } = useGetFavoriteMessages({ page: currentPage, limit: 10, ...filters }); const [selectedMessages, setSelectedMessages] = useState([]); const columns: ColumnType[] = [ { key: 'subject', title: 'عنوان پیام', render: (item) => ( {item.subject || 'بدون موضوع'} ) }, { key: 'from', title: 'فرستنده', render: (item) => (
{!item.seen &&
} {item.from.name || item.from.address}
) }, { key: 'date', title: 'تاریخ', align: 'center', render: (item) => ( {formatDate(item.date)} ) }, ]; const tableActions = (
refetch()} />
); const selectedActions = ( <> handleUnfavoriteSelected()} className="cursor-pointer" /> handleArchiveSelected()} className="cursor-pointer" /> handleDeleteSelected()} className="cursor-pointer" /> ); const handleFilterChange = (newFilters: FilterValues) => { setFilters(newFilters); setCurrentPage(1); }; const handleSelectionChange = (selectedRows: FavoriteMessage[]) => { setSelectedMessages(selectedRows); }; const handleDeleteSelected = () => { const messageIds = selectedMessages.map(message => message.id); emailActions.bulkMoveToTrash(messageIds, selectedMessages[0].mailbox); setSelectedMessages([]); }; const handleArchiveSelected = () => { const messageIds = selectedMessages.map(message => message.id); emailActions.bulkArchive(messageIds, selectedMessages[0].mailbox); setSelectedMessages([]); }; const handleUnfavoriteSelected = () => { const messageIds = selectedMessages.map(message => message.id); emailActions.bulkUnfavorite(messageIds, selectedMessages[0].mailbox); setSelectedMessages([]); }; const getRowActions = (message: FavoriteMessage): RowActionItem[] => [ { label: 'حذف از علاقه‌مندی‌ها', icon: , onClick: () => emailActions.unfavorite({ messageId: message.id, mailbox: message.mailbox }), }, { label: 'بایگانی', icon: , onClick: () => emailActions.archive({ messageId: message.id, mailbox: message.mailbox }), }, { label: 'حذف', icon: , onClick: () => emailActions.moveToTrash({ messageId: message.id, mailbox: message.mailbox }), }, ]; const handlePageChange = (page: number) => { setCurrentPage(page); }; const messages = favoriteData?.data?.favoriteMails || []; const pager = favoriteData?.data?.pager; return (

علاقه‌مندی‌ها

columns={columns} data={messages} isLoading={isLoading || emailActions.isLoading} showHeader={false} actions={tableActions} selectedActions={selectedActions} onSelectionChange={handleSelectionChange} selectedRows={selectedMessages} onRowClick={(id) => navigate(`/mail/${id}`)} noDataMessage={
هیچ پیامی یافت نشد
} selectable={true} rowActions={getRowActions} pagination={pager ? { totalPages: pager.totalPages, currentPage: pager.page, onPageChange: handlePageChange } : undefined} />
) } export default List