/**
* @file components/settings/SettingsProfileCard.tsx
* @description Collapsible card component managing user profile overview, status picker, and color selection.
*/
"use client";
import { useState } from "react";
import { UserAvatar } from "@/components/ui/UserAvatar";
import { UserStatus } from "@/db/schema";
import {
MEMBER_STATUS_COLOR_CLASSES,
MEMBER_COLOR_OPTIONS,
MEMBER_STATUS_OPTIONS,
} from "@/lib/constants/member.styles";
import { UserRound, Palette, ChevronDown } from "lucide-react";
import { useUser } from "@/lib/context/UserContext";
/** Props for the SettingsProfileCard component. */
interface SettingsProfileCardProps {
onUpdate: (fields: Partial<{ status: UserStatus; color: string }>) => void;
defaultOpen?: boolean;
}
/** Renders a collapsible card for managing user profile details, status, and theme color. */
export function SettingsProfileCard({
onUpdate,
defaultOpen = true,
}: SettingsProfileCardProps) {
const [isOpen, setIsOpen] = useState(defaultOpen);
const { currentUser } = useUser();
if (!currentUser) return null;
return (
{/* Clickable Header / Toggle Bar */}
{/* Collapsible Content */}
{isOpen && (
{/* Status Selection */}
Online Status
{MEMBER_STATUS_OPTIONS.map((status) => {
const isSelected = currentUser.status === status.value;
return (
);
})}
{/* Color Palette Selection */}
Profile Color
{MEMBER_COLOR_OPTIONS.map((colorClass) => {
const isSelected = currentUser.color === colorClass;
return (
)}
);
}