"use client"; import { useIdentityData } from "./IdentityProvider"; import { Popover } from "./Popover"; import { Modal } from "./Modal"; import { ButtonPrimary } from "./Buttons"; import { ActionButton } from "./ActionBar/ActionButton"; import { AccountSmall } from "./Icons/AccountSmall"; import { AtmosphericHandleInfo } from "./Subscribe/HandleSubscribe"; import { HandleInput } from "./Subscribe/HandleInput"; import { EmailInput, EmailConfirm } from "./Subscribe/EmailSubscribe"; import { useState } from "react"; import { GoToArrow } from "./Icons/GoToArrow"; import { ToggleGroup } from "./ToggleGroup"; import { useToaster } from "./Toast"; import { BlueskyTiny } from "./Icons/BlueskyTiny"; import { requestAuthEmailToken, confirmEmailAuthToken, } from "actions/emailAuth"; import { loginWithEmailToken } from "actions/login"; import { getHomeDocs } from "app/(app)/(home-pages)/(writer)/home/storage"; import { mutate } from "swr"; export const LoginModal = (props: { noEmailLogin?: boolean; trigger?: React.ReactNode; asChild?: boolean; redirectRoute?: string; open?: boolean; onOpenChange?: (open: boolean) => void; }) => { let [internalOpen, setInternalOpen] = useState(false); let isControlled = props.open !== undefined; let open = props.open ?? internalOpen; let setOpen = (o: boolean) => { if (!isControlled) setInternalOpen(o); props.onOpenChange?.(o); }; return ( setOpen(false)} /> ); }; export const LoginContent = (props: { pageView?: boolean; noEmailLogin?: boolean; redirectRoute?: string; open?: boolean; onSuccess?: () => void; className?: string; }) => { let identityData = useIdentityData(); let [state, setState] = useState< "log in" | "sign up" | "email log in" | "email confirm" >("log in"); let [loginEmail, setLoginEmail] = useState(""); let [tokenId, setTokenId] = useState(null); let [loading, setLoading] = useState(false); let toaster = useToaster(); if (identityData.identity?.atp_did) return null; if (identityData.identity?.email && !identityData.identity.atp_did) { return ( ); } const handleEmailSubmit = async () => { setLoading(true); try { const id = await requestAuthEmailToken(loginEmail); setTokenId(id); setState("email confirm"); } catch (e) { toaster({ content: (
We couldnt send the email. Please try again!
), type: "error", }); } finally { setLoading(false); } }; const handleCodeSubmit = async (code: string) => { if (!tokenId) return; setLoading(true); const confirmedToken = await confirmEmailAuthToken(tokenId, code); if (!confirmedToken) { setLoading(false); toaster({ content:
Incorrect code!
, type: "error", }); return; } const localLeaflets = getHomeDocs(); await loginWithEmailToken( localLeaflets.filter((l) => !l.hidden), props.redirectRoute, ); mutate("identity"); toaster({ content:
Logged in! Welcome!
, type: "success", }); setLoading(false); props.onSuccess?.(); }; return (
{state === "log in" ? ( <>

Log in with
Atmosphere account

What's the Atmosphere?
} />
} loading={loading} onSubmit={(handle) => { setLoading(true); let redirectUrl: string; if (props.redirectRoute) { redirectUrl = props.redirectRoute; } else { let url = new URL(window.location.href); url.searchParams.set("refreshAuth", ""); redirectUrl = url.toString(); } window.location.href = `/api/oauth/login?handle=${encodeURIComponent(handle)}&redirect_url=${encodeURIComponent(redirectUrl)}`; }} /> {props.noEmailLogin ? null : ( <>
)} ) : state === "email log in" ? (
{ e.preventDefault(); e.stopPropagation(); handleEmailSubmit(); }} >

Log in with Email

{ e.preventDefault(); e.stopPropagation(); handleEmailSubmit(); }} > } />
) : state === "email confirm" ? ( setState("email log in")} /> ) : (

Leaflet is part of
the Atmosphere.

Create an Atmosphere account on Bluesky to get started!
Sign up via Bluesky
)}
); }; const LinkAtmosphereContent = (props: { pageView?: boolean; redirectRoute?: string; open?: boolean; }) => { let [loading, setLoading] = useState(false); return (

Link your
Atmosphere account

What's the Atmosphere?
} />
} loading={loading} onSubmit={(handle) => { setLoading(true); let redirectUrl: string; if (props.redirectRoute) { redirectUrl = props.redirectRoute; } else { let url = new URL(window.location.href); url.searchParams.set("refreshAuth", ""); redirectUrl = url.toString(); } window.location.href = `/api/oauth/login?handle=${encodeURIComponent(handle)}&redirect_url=${encodeURIComponent(redirectUrl)}&link=true`; }} />
); };