select all + mobile table in all pages

This commit is contained in:
hamid zarghami
2025-07-29 09:37:22 +03:30
parent 8b28a2dee0
commit ab1b509c42
9 changed files with 642 additions and 27 deletions
+26 -3
View File
@@ -19,6 +19,7 @@ import Button from '@/components/Button';
import ModalConfrim from '@/components/ModalConfrim';
import { ErrorType } from '@/helpers/types';
import { toast } from '@/components/Toast';
import { Checkbox } from '@/components/ui/checkbox';
const List: FC = () => {
@@ -59,6 +60,7 @@ const List: FC = () => {
const [selectedMessages, setSelectedMessages] = useState<InboxMessage[]>([]);
const [selectedMessage, setSelectedMessage] = useState<InboxMessage | null>(null);
const [selectAll, setSelectAll] = useState(false);
// ستون‌های دسکتاپ (مثل اولیه)
const desktopColumns: ColumnType<InboxMessage>[] = [
@@ -102,7 +104,6 @@ const List: FC = () => {
title: 'محتوا',
render: (item) => (
<div className="flex flex-col gap-1 w-full">
{/* سطر اول: فرستنده + ساعت */}
<div className="flex items-center gap-2 w-full">
<span className="truncate font-medium text-sm flex-1 min-w-0">
{item.from.name || item.from.address}
@@ -112,12 +113,10 @@ const List: FC = () => {
</span>
</div>
{/* سطر دوم: موضوع */}
<div className="truncate w-full text-sm font-medium">
{item.subject || 'بدون موضوع'}
</div>
{/* سطر سوم: خلاصه */}
<div className="truncate w-full text-xs text-gray-600">
{item.intro || 'بدون متن پیش‌نمایش'}
</div>
@@ -140,8 +139,25 @@ const List: FC = () => {
const columns = isMobile ? mobileColumns : desktopColumns;
const handleSelectAll = (checked: boolean) => {
setSelectAll(checked);
if (checked) {
const messages = inboxData?.data?.results || [];
setSelectedMessages(messages);
} else {
setSelectedMessages([]);
}
};
const tableActions = (
<div className='flex items-center gap-2 md:gap-4'>
<div className="flex items-center gap-2">
<Checkbox
checked={selectAll}
onCheckedChange={handleSelectAll}
className="w-4 h-4"
/>
</div>
<Refresh2
size={18}
color='black'
@@ -186,30 +202,37 @@ const List: FC = () => {
const handleSelectionChange = (selectedRows: InboxMessage[]) => {
setSelectedMessages(selectedRows);
// تنظیم وضعیت select all بر اساس انتخاب شده‌ها
const messages = inboxData?.data?.results || [];
setSelectAll(selectedRows.length === messages.length && messages.length > 0);
};
const handleDeleteSelected = () => {
const messageIds = selectedMessages.map(message => message.id);
emailActions.bulkMoveToTrash(messageIds, selectedMessages[0].mailbox);
setSelectedMessages([]);
setSelectAll(false);
};
const handleArchiveSelected = () => {
const messageIds = selectedMessages.map(message => message.id);
emailActions.bulkArchive(messageIds, selectedMessages[0].mailbox);
setSelectedMessages([]);
setSelectAll(false);
};
const handleMarkAsReadSelected = () => {
const messageIds = selectedMessages.map(message => message.id);
emailActions.bulkMarkAsSeen(messageIds, selectedMessages[0].mailbox);
setSelectedMessages([]);
setSelectAll(false);
};
const handleFavoriteSelected = () => {
const messageIds = selectedMessages.map(message => message.id);
emailActions.bulkFavorite(messageIds, selectedMessages[0].mailbox);
setSelectedMessages([]);
setSelectAll(false);
};
const handleMarkAll = () => {