import Filters, { FilterValues } from '../../components/Filters'; import { FC, useState } from 'react' import { useTranslation } from 'react-i18next' import Table from '../../components/Table'; import { ColumnType } from '../../components/types/TableTypes'; import { InfoCircle, Refresh2, Trash, Edit, Send } from 'iconsax-react'; import { RowActionItem } from '../../components/RowActionsDropdown'; import { useNavigate } from 'react-router-dom'; import { useGetDrafts } from './hooks/useDraftData'; import { DraftMessage } from './types/DraftTypes'; import { useEmailActions } from '@/hooks/useEmailActions'; import { useSharedStore } from '@/shared/store/sharedStore'; import { Checkbox } from '@/components/ui/checkbox'; import React from 'react'; import { getIconColor } from '@/utils/colorUtils'; const List: FC = () => { const navigate = useNavigate(); const { t } = useTranslation(); const [nextCursor, setNextCursor] = useState(undefined); const [previousCursor, setPreviousCursor] = useState(undefined); const [filters, setFilters] = useState({}); const emailActions = useEmailActions(); const { setDraftData, setOpenNewMessage, setEditingDraftId } = useSharedStore(); const { data: draftData, isLoading, refetch, isFetching } = useGetDrafts({ next: nextCursor, previous: previousCursor, limit: 10, ...filters }); const [selectedMessages, setSelectedMessages] = useState([]); const [selectAll, setSelectAll] = useState(false); // تابع برای گرفتن فقط ساعت const formatTime = (dateString: string) => { try { if (!dateString) return '--:--'; const date = new Date(dateString); if (isNaN(date.getTime())) return '--:--'; return new Intl.DateTimeFormat("fa-IR", { hour: "2-digit", minute: "2-digit", }).format(date); } catch (error) { console.error('خطا در فرمت زمان:', error); return '--:--'; } }; // ستون‌های دسکتاپ const desktopColumns: ColumnType[] = [ { key: 'title', title: 'title', render: () => (
پیش نویس
) }, { key: 'subject', title: 'عنوان پیام', render: (item) => (
{item.subject || 'بدون موضوع'}
) }, { key: 'to', title: 'گیرنده', render: (item) => ( {item.to && item.to.length > 0 ? (item.to[0].name || item.to[0].address) : 'بدون گیرنده' } ) }, { key: 'date', title: 'تاریخ', align: 'center', render: (item) => ( {formatTime(item.date)} ) }, ]; // ستون‌های موبایل (سه خطی) const mobileColumns: ColumnType[] = [ { key: 'content', title: 'محتوا', render: (item) => (
پیش نویس {formatTime(item.date)}
{item.subject || 'بدون موضوع'}
گیرنده: {item.to && item.to.length > 0 ? (item.to[0].name || item.to[0].address) : 'بدون گیرنده' }
) } ]; // انتخاب ستون‌ها بر اساس سایز صفحه const [isMobile, setIsMobile] = useState(window.innerWidth < 768); React.useEffect(() => { const handleResize = () => { setIsMobile(window.innerWidth < 768); }; window.addEventListener('resize', handleResize); return () => window.removeEventListener('resize', handleResize); }, []); const columns = isMobile ? mobileColumns : desktopColumns; const handleSelectAll = (checked: boolean) => { setSelectAll(checked); if (checked) { const messages = draftData?.data?.draftsMail || []; setSelectedMessages(messages); } else { setSelectedMessages([]); } }; const tableActions = (
refetch()} />
); const selectedActions = ( <> handleSendSelected()} className="cursor-pointer" /> handleEditSelected()} className="cursor-pointer" /> handleDeleteSelected()} className="cursor-pointer" /> ); const handleFilterChange = (newFilters: FilterValues) => { setFilters(newFilters); setNextCursor(undefined); setPreviousCursor(undefined); }; const handleSelectionChange = (selectedRows: DraftMessage[]) => { setSelectedMessages(selectedRows); // تنظیم وضعیت select all بر اساس انتخاب شده‌ها const messages = draftData?.data?.draftsMail || []; setSelectAll(selectedRows.length === messages.length && messages.length > 0); }; const handleDeleteSelected = () => { selectedMessages.forEach(message => { emailActions.deleteDraft({ messageId: message.id, mailbox: message.mailbox }); }); setSelectedMessages([]); setSelectAll(false); }; const handleSendSelected = () => { selectedMessages.forEach(message => { emailActions.sendDraft({ messageId: message.id }); }); setSelectedMessages([]); setSelectAll(false); }; const handleEditSelected = () => { if (selectedMessages.length === 1) { navigate(`/draft/edit/${selectedMessages[0].id}`); } setSelectedMessages([]); setSelectAll(false); }; const handleDeleteDraft = (messageId: number) => { emailActions.deleteDraft({ messageId: messageId, mailbox: '' }); }; const handleSendDraft = (messageId: number) => { emailActions.sendDraft({ messageId: messageId }); }; const handleEditDraft = (messageId: number) => { navigate(`/draft/edit/${messageId}`); }; const handleRowClick = (messageId: number, item: DraftMessage) => { setDraftData(item); setEditingDraftId(messageId); setOpenNewMessage(true); }; const getRowActions = (message: DraftMessage): RowActionItem[] => [ { label: 'ارسال', icon: , onClick: () => handleSendDraft(message.id), }, { label: 'ویرایش', icon: , onClick: () => handleEditDraft(message.id), }, { label: 'حذف', icon: , onClick: () => handleDeleteDraft(message.id), }, ]; const handleNext = (cursor?: string) => { setNextCursor(cursor); setPreviousCursor(undefined); }; const handlePrevious = (cursor?: string) => { setPreviousCursor(cursor); setNextCursor(undefined); }; const messages = draftData?.data?.draftsMail || []; const pager = draftData?.data?.pager; return (

{t('draft.title')}

columns={columns} data={messages} isLoading={isLoading || emailActions.isLoading} showHeader={false} actions={tableActions} selectedActions={selectedActions} onSelectionChange={handleSelectionChange} selectedRows={selectedMessages} onRowClick={handleRowClick} noDataMessage={
هیچ پیش‌نویسی یافت نشد.
} selectable={true} rowActions={getRowActions} pagination={pager ? { hasNext: typeof pager.nextCursor === 'string', nextCursor: typeof pager.nextCursor === 'string' ? pager.nextCursor : undefined, previousCursor: typeof pager.previousCursor === 'string' ? pager.previousCursor : undefined, onNext: handleNext, onPrevious: handlePrevious } : undefined} />
) } export default List