"use client" import { ChevronLeft, ChevronUp, ChevronDown, RefreshCw } from "lucide-react" import { Button } from "@/components/ui/button" import { cn } from "@/lib/utils" import { MailFolderStackIndicator } from "@/components/gmail/mail-folder-stack-indicator" import { mailNavVisitKey } from "@/lib/mail-folder-display" import { MAIL_LIST_MAIN_SCROLL_CLASS, MAIL_LIST_ROW_DIVIDER_CLASS, } from "@/lib/mail-chrome-classes" import { PULL_HOLD_HEIGHT, REFRESH_SPIN_CLASS, } from "@/components/gmail/email-list/email-list-helpers" import { EmailListRow } from "@/components/gmail/email-list/email-list-row" import { EmailListEmpty, EmailListScheduledBanner, } from "@/components/gmail/email-list/email-list-empty" import { EmailListEmailViewPane } from "@/components/gmail/email-list/email-list-email-view-pane" import type { EmailListData } from "@/components/gmail/email-list/hooks/use-email-list-data" import type { EmailListLabels } from "@/components/gmail/email-list/hooks/use-email-list-labels" import type { EmailListSelection } from "@/components/gmail/email-list/hooks/use-email-list-selection" import type { EmailListReading } from "@/components/gmail/email-list/hooks/use-email-list-reading" type EmailListBodyProps = { data: EmailListData labels: EmailListLabels selection: EmailListSelection reading: EmailListReading onSelectFolder?: (folder: string) => void } export function EmailListBody({ data, labels, selection, reading, onSelectFolder, }: EmailListBodyProps) { const { splitView, isViewMode, isSearchMode, selectedFolder, listToolbarMode, isRefreshing, listViewportRef, pullContentRef, pullIconRef, displayListEmails, listEmails, inboxCategoryTabLabel, sidebarNav, searchParams, } = data const { openEmail, openMailIndex, goBack, goToPrev, goToNext, handleBreadcrumbNavigate, handleCategoryInboxTabClick, } = reading const rowPropsBase = { allEmails: data.allEmails, emailById: data.emailById, listMailIndex: data.listMailIndex, listRowExtras: data.listRowExtras, starredEmails: data.starredEmails, importantEmails: data.importantEmails, readOverrides: data.readOverrides, conversationMode: data.conversationMode, savedThreadReplyDrafts: data.savedThreadReplyDrafts, selectedEmails: selection.selectedEmails, selectedFolder: data.selectedFolder, splitView: data.splitView, openMailId: data.openMailId, isXs: data.isXs, isMd: data.isMd, density: data.density, mobileSelectionMode: selection.mobileSelectionMode, touchListSwipeEnabled: selection.touchListSwipeEnabled, openSwipeRowId: selection.openSwipeRowId, setOpenSwipeRowId: selection.setOpenSwipeRowId, listRowLabelBgByTextLower: data.listRowLabelBgByTextLower, sidebarNav: data.sidebarNav, rescheduleTarget: data.rescheduleTarget, setRescheduleTarget: data.setRescheduleTarget, rescheduleDismissTimeoutsRef: data.rescheduleDismissTimeoutsRef, scheduleReschedulePopoverDismiss: data.scheduleReschedulePopoverDismiss, rowContextMenuOpenedAtRef: selection.rowContextMenuOpenedAtRef, contextMenuTargetIdsRef: selection.contextMenuTargetIdsRef, lastSelectionAnchorIdRef: selection.lastSelectionAnchorIdRef, setSelectedEmails: selection.setSelectedEmails, setLabelPickerQuery: data.setLabelPickerQuery, labelPickerQuery: data.labelPickerQuery, catalogLabels: labels.catalogLabels, resolveLabelVisual: labels.resolveLabelVisual, getCatalogLabelPresence: labels.getCatalogLabelPresence, toggleLabelOnEmails: labels.toggleLabelOnEmails, addLabelToEmails: labels.addLabelToEmails, moveTargets: data.moveTargets, moveEmailsToTarget: labels.moveEmailsToTarget, cmScheduledRescheduleValue: data.cmScheduledRescheduleValue, setCmScheduledRescheduleValue: data.setCmScheduledRescheduleValue, mailActions: data.mailActions, setReadOverrides: data.setReadOverrides, onSelectFolder, toggleSelect: selection.toggleSelect, handleRowCheckboxClickCapture: selection.handleRowCheckboxClickCapture, handleRowActivate: reading.handleRowActivate, startRowDrag: selection.startRowDrag, archiveListRow: reading.archiveListRow, deleteListRow: reading.deleteListRow, toggleStar: selection.toggleStar, toggleImportant: selection.toggleImportant, openSwipeRowLabelSheet: selection.openSwipeRowLabelSheet, handleNavigateToLabel: reading.handleNavigateToLabel, handleCategoryInboxTabClick, closeViewIfShowingEmail: reading.closeViewIfShowingEmail, restoreSnoozedRowToMailbox: reading.restoreSnoozedRowToMailbox, handleEditScheduledMail: data.handleEditScheduledMail, requestArchiveScheduled: data.requestArchiveScheduled, requestDeleteScheduled: data.requestDeleteScheduled, requestToggleReadScheduled: data.requestToggleReadScheduled, requestSnoozeScheduled: data.requestSnoozeScheduled, requestRescheduleScheduled: data.requestRescheduleScheduled, requestSendScheduledNow: data.requestSendScheduledNow, requestSnoozeMailboxEmail: data.requestSnoozeMailboxEmail, } return (
{listToolbarMode && (
)}
{!splitView && isViewMode && openEmail ? ( <>
) : ( <> {selectedFolder === "scheduled" && } {displayListEmails.length === 0 ? ( selectedFolder === "scheduled" ? ( ) : isSearchMode && searchParams ? ( ) : ( ) ) : (
{listEmails.map((email) => ( ))} {data.scrollInfiniteList && data.hasMoreInfinite ? (
) : null} {data.isFetchingNextInfinitePage ? (
Chargement…
) : null}
)} )}
{listToolbarMode ? (
) : null}
) } export type { EmailListBodyProps }