import { useState, useCallback, useMemo, useRef } from "react"; import { Link } from "@tanstack/react-router"; import { ArrowLeft, Save, Loader2, Camera, X, User as UserIcon } from "lucide-react"; import { Button } from "@/client/components/ui/button"; import { useAuthStore } from "@/client/stores/auth-store"; import { useMemberWorkspaces } from "@/client/stores/workspace-directory"; import { useWorkspaceReplica } from "@/client/stores/workspace-replica"; import { useLastVisitedWorkspaceId } from "@/client/stores/workspace-navigation"; import { api, toApiError } from "@/client/lib/api"; import { SESSION_MODES } from "@/client/lib/constants"; import { useDocumentTitle } from "@/client/hooks/use-document-title"; import { Skeleton } from "@/client/components/ui/skeleton"; import { isWorkspaceWriterRole } from "@/shared/entitlements"; function ProfileSettingsSkeleton() { return (
Profile photo
JPG, PNG, GIF, or WebP. Max 2MB.
{!avatarUploadWorkspace && (Avatar upload requires a workspace you can write to.
)} {avatarUrl && ( )}{user.email}
{error}
} {refreshState === "refreshing" && (Restoring your session before profile changes.
)} {refreshState !== "refreshing" && sessionMode !== SESSION_MODES.AUTHENTICATED && (Sign in again to edit your profile.
)}