fixed mail list ui

This commit is contained in:
Ad1tya-007
2025-05-17 01:21:18 +05:30
committed by Sahaj Jain
parent 162f2a0338
commit 9a01a5ff9f
2 changed files with 18 additions and 37 deletions
@@ -6,22 +6,23 @@ import { Badge } from "@/components/ui/badge";
import { ScrollArea } from "@/components/ui/scroll-area";
import { Mail } from "@/components/examples/mail/data";
import { useMail } from "@/components/examples/mail/use-mail";
import { useFullscreen } from "@/hooks/use-fullscreen";
interface MailListProps {
items: Mail[];
}
export function MailList({ items }: MailListProps) {
const [mail, setMail] = useMail();
const { isFullscreen } = useFullscreen();
return (
<ScrollArea className="h-screen">
<ScrollArea className={cn("h-screen", isFullscreen && "h-[75%]")}>
<div className="flex flex-col gap-2 p-4 pt-0">
{items.map((item) => (
<button
key={item.id}
className={cn(
"flex flex-col items-start gap-2 rounded-lg border p-3 text-left text-sm transition-all hover:bg-accent hover:text-accent-foreground",
"hover:bg-accent hover:text-accent-foreground flex flex-col items-start gap-2 rounded-lg border p-3 text-left text-sm transition-all",
mail.selected === item.id && "bg-muted"
)}
onClick={() =>
@@ -35,16 +36,12 @@ export function MailList({ items }: MailListProps) {
<div className="flex items-center">
<div className="flex items-center gap-2">
<div className="font-semibold">{item.name}</div>
{!item.read && (
<span className="flex h-2 w-2 rounded-full bg-blue-600" />
)}
{!item.read && <span className="flex h-2 w-2 rounded-full bg-blue-600" />}
</div>
<div
className={cn(
"ml-auto text-xs",
mail.selected === item.id
? "text-foreground"
: "text-muted-foreground"
mail.selected === item.id ? "text-foreground" : "text-muted-foreground"
)}
>
{formatDistanceToNow(new Date(item.date), {
@@ -54,7 +51,7 @@ export function MailList({ items }: MailListProps) {
</div>
<div className="text-xs font-medium">{item.subject}</div>
</div>
<div className="line-clamp-2 text-xs text-muted-foreground">
<div className="text-muted-foreground line-clamp-2 text-xs">
{item.text.substring(0, 300)}
</div>
{item.labels.length ? (
@@ -73,9 +70,7 @@ export function MailList({ items }: MailListProps) {
);
}
function getBadgeVariantFromLabel(
label: string
): ComponentProps<typeof Badge>["variant"] {
function getBadgeVariantFromLabel(label: string): ComponentProps<typeof Badge>["variant"] {
if (["work"].includes(label.toLowerCase())) {
return "default";
}
+10 -24
View File
@@ -15,11 +15,7 @@ import {
import { cn } from "@/lib/utils";
import { Input } from "@/components/ui/input";
import {
ResizableHandle,
ResizablePanel,
ResizablePanelGroup,
} from "@/components/ui/resizable";
import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "@/components/ui/resizable";
import { Separator } from "@/components/ui/separator";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { TooltipProvider } from "@/components/ui/tooltip";
@@ -57,9 +53,7 @@ export function Mail({
<ResizablePanelGroup
direction="horizontal"
onLayout={(sizes: number[]) => {
document.cookie = `react-resizable-panels:layout:mail=${JSON.stringify(
sizes
)}`;
document.cookie = `react-resizable-panels:layout:mail=${JSON.stringify(sizes)}`;
}}
className="h-full max-h-[800px] items-stretch"
>
@@ -71,19 +65,13 @@ export function Mail({
maxSize={20}
onCollapse={() => {
setIsCollapsed(true);
document.cookie = `react-resizable-panels:collapsed=${JSON.stringify(
true
)}`;
document.cookie = `react-resizable-panels:collapsed=${JSON.stringify(true)}`;
}}
onResize={() => {
setIsCollapsed(false);
document.cookie = `react-resizable-panels:collapsed=${JSON.stringify(
false
)}`;
document.cookie = `react-resizable-panels:collapsed=${JSON.stringify(false)}`;
}}
className={cn(
isCollapsed && "min-w-[50px] transition-all duration-300 ease-in-out"
)}
className={cn(isCollapsed && "min-w-[50px] transition-all duration-300 ease-in-out")}
>
<div
className={cn(
@@ -183,27 +171,25 @@ export function Mail({
</TabsList>
</div>
<Separator />
<div className="bg-background/95 p-4 backdrop-blur supports-[backdrop-filter]:bg-background/60">
<div className="bg-background/95 supports-[backdrop-filter]:bg-background/60 p-4 backdrop-blur">
<form>
<div className="relative">
<Search className="absolute left-2 top-2.5 h-4 w-4 text-muted-foreground" />
<Search className="text-muted-foreground absolute top-2.5 left-2 h-4 w-4" />
<Input placeholder="Search" className="pl-8" />
</div>
</form>
</div>
<TabsContent value="all" className="m-0">
<TabsContent value="all" className="m-0 h-screen">
<MailList items={mails} />
</TabsContent>
<TabsContent value="unread" className="m-0">
<TabsContent value="unread" className="m-0 h-screen">
<MailList items={mails.filter((item) => !item.read)} />
</TabsContent>
</Tabs>
</ResizablePanel>
<ResizableHandle withHandle />
<ResizablePanel defaultSize={defaultLayout[2]} minSize={30}>
<MailDisplay
mail={mails.find((item) => item.id === mail.selected) || null}
/>
<MailDisplay mail={mails.find((item) => item.id === mail.selected) || null} />
</ResizablePanel>
</ResizablePanelGroup>
</TooltipProvider>