import { useMemo, useState } from "react"; import { Save, User } from "lucide-react"; import { getDisplayFlagConfig } from "~/lib/avatar-data"; import type { AvatarData, FlagConfig, RawFlagConfig } from "~/lib/flag-types"; import { Button } from "~/components/ui/button"; import { FlagBuilder } from "~/components/ui/FlagBuilder"; import { FlagSvg } from "~/components/ui/FlagSvg"; import { AvatarUploader } from "~/components/ui/AvatarUploader"; import { cloudinaryAvatarUrl } from "~/lib/cloudinary-url"; import { cn } from "~/lib/utils"; interface AvatarEditorProps { id: string; flagConfig?: RawFlagConfig | null; uploadedPhotoUrl?: string | null; uploadUrl: string; isTeam?: boolean; currentAvatarType?: string | null; ownerAvatarData?: AvatarData | null; flagIntent?: string; removePhotoIntent?: string; useOwnerAvatarIntent?: string; } type Mode = "flag" | "upload" | "owner"; export function AvatarEditor({ id, flagConfig, uploadedPhotoUrl, uploadUrl, isTeam = false, currentAvatarType, ownerAvatarData, flagIntent = "update-avatar-flag", removePhotoIntent = "remove-avatar-photo", useOwnerAvatarIntent = "use-owner-avatar", }: AvatarEditorProps) { const initialFlag = useMemo(() => getDisplayFlagConfig(id, flagConfig), [flagConfig, id]); const [config, setConfig] = useState(initialFlag); const showOwnerTab = isTeam && ownerAvatarData !== null && ownerAvatarData !== undefined; const initialMode: Mode = currentAvatarType === "owner" && showOwnerTab ? "owner" : currentAvatarType === "uploaded" ? "upload" : "flag"; const [mode, setMode] = useState(initialMode); const tabs = [ { key: "flag" as const, label: "Flag" }, { key: "upload" as const, label: "Upload Photo" }, ...(showOwnerTab ? [{ key: "owner" as const, label: "My Avatar" }] : []), ]; return (
{tabs.map((tab) => ( ))}
{mode === "flag" && (
)} {mode === "upload" && ( )} {mode === "owner" && ownerAvatarData && (

Your team will use your current profile avatar.

)}
); } function OwnerAvatarPreview({ avatarData }: { avatarData: AvatarData }) { if (avatarData.type === "image") { return ( Your avatar ); } if (avatarData.type === "flag") { return ( ); } return null; }