"use client" import type { ReactNode } from "react" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Checkbox } from "@/components/ui/checkbox" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { cn } from "@/lib/utils" import { DATE_RANGE_OPTIONS, SEARCH_IN_OPTIONS, } from "@/lib/mail-search/search-params" import { MAIL_SEARCH_ADVANCED_PANEL_CLASS, MAIL_SEARCH_CHECKBOX_CLASS, MAIL_SEARCH_FIELD_CLASS, MAIL_SEARCH_SECTION_DIVIDER_CLASS, } from "@/lib/mail-chrome-classes" import type { useAdvancedSearchForm } from "@/lib/mail-search/use-advanced-search-form" type Form = ReturnType export function AdvancedSearchPanelDesktop({ form, onSubmit, onClose, }: { form: Form onSubmit: () => void onClose: () => void }) { const f = form const labelClass = "w-36 shrink-0 text-sm text-muted-foreground" const inputClass = cn("h-8 flex-1 px-2 text-sm", MAIL_SEARCH_FIELD_CLASS) const rowClass = "flex items-center gap-3" return (
f.setFrom(e.target.value)} className={inputClass} autoFocus />
f.setTo(e.target.value)} className={inputClass} />
f.setSubject(e.target.value)} className={inputClass} />
f.setHasWords(e.target.value)} className={inputClass} />
f.setDoesNotHave(e.target.value)} className={inputClass} />
) } export function AdvancedSearchPanelMobile({ form, onSubmit, }: { form: Form onSubmit: () => void }) { const f = form const fieldClass = cn("h-9 text-sm", MAIL_SEARCH_FIELD_CLASS) return (
f.setFrom(e.target.value)} className={fieldClass} /> f.setTo(e.target.value)} className={fieldClass} /> f.setSubject(e.target.value)} className={fieldClass} /> f.setHasWords(e.target.value)} className={fieldClass} /> f.setDoesNotHave(e.target.value)} className={fieldClass} />
) } function AdvancedSearchField({ label, children, }: { label: string children: ReactNode }) { return (
{children}
) } function AdvancedSearchSizeRow({ form, compact, labelClass, }: { form: Form compact: boolean labelClass: string }) { const triggerSm = cn( compact ? "h-9 flex-1 text-sm" : "h-8 w-32 text-sm", MAIL_SEARCH_FIELD_CLASS ) const triggerUnit = cn(compact ? "h-9 w-20 text-sm" : "h-8 w-20 text-sm", MAIL_SEARCH_FIELD_CLASS) const sizeInput = cn( compact ? "h-9 w-20 text-sm" : "h-8 w-20 px-2 text-sm", MAIL_SEARCH_FIELD_CLASS ) const controls = (
form.setSizeVal(e.target.value)} className={sizeInput} />
) if (compact) { return (
{controls}
) } return (
{controls}
) } function AdvancedSearchDateRow({ form, compact, labelClass, }: { form: Form compact: boolean labelClass: string }) { const triggerClass = cn( compact ? "h-9 text-sm" : "h-8 w-32 text-sm", MAIL_SEARCH_FIELD_CLASS ) const dateInput = cn( compact ? "h-9 text-sm" : "h-8 min-w-0 flex-1 px-2 text-sm", MAIL_SEARCH_FIELD_CLASS ) const controls = (
{!compact && ( form.setDateAfter(e.target.value)} className={dateInput} /> )}
) if (compact) { return {controls} } return (
{controls}
) } function AdvancedSearchCheckboxes({ form }: { form: Form }) { return ( <> ) }