import { ChevronDown, Globe, LockIcon } from 'lucide-react'; import { type AllowedProfileVisibility } from '../../api/user.ts'; import { pageProgressMessage } from '../../stores/page.ts'; import { httpPatch } from '../../lib/http.ts'; import { useToast } from '../../hooks/use-toast.ts'; import { useRef, useState } from 'react'; import { useOutsideClick } from '../../hooks/use-outside-click.ts'; import { cn } from '../../lib/classname.ts'; type VisibilityDropdownProps = { visibility: AllowedProfileVisibility; setVisibility: (visibility: AllowedProfileVisibility) => void; }; export function VisibilityDropdown(props: VisibilityDropdownProps) { const { visibility, setVisibility } = props; const toast = useToast(); const dropdownRef = useRef(null); useOutsideClick(dropdownRef, () => { setIsVisibilityDropdownOpen(false); }); const [isVisibilityDropdownOpen, setIsVisibilityDropdownOpen] = useState(false); async function updateProfileVisibility(visibility: AllowedProfileVisibility) { pageProgressMessage.set('Updating profile visibility'); setIsVisibilityDropdownOpen(false); const { error } = await httpPatch( `${import.meta.env.PUBLIC_API_URL}/v1-update-public-profile-visibility`, { profileVisibility: visibility, }, ); if (error) { toast.error(error.message || 'Something went wrong'); return; } pageProgressMessage.set(''); setVisibility(visibility); } return (
{isVisibilityDropdownOpen && (
)}
); }