function LoginScreen({ mode, user, sites, activeSiteId, onLogin, onRegister, onDiscoverShops, onLinkShopify, onConnectWebsite, onGoogleLogin, onSelect, onLogout, loading, error, }) { const landingIntent = React.useMemo(() => { const empty = { signup: false, platform: "" }; try { const p = new URLSearchParams(window.location.search); const signup = p.get("signup") === "1"; const platform = (p.get("platform") || "").toLowerCase(); if (signup || platform) { sessionStorage.setItem("guy_landing_intent", JSON.stringify({ signup, platform })); } const stored = JSON.parse(sessionStorage.getItem("guy_landing_intent") || "null"); return { signup: signup || !!stored?.signup, platform: platform || stored?.platform || "", }; } catch { return empty; } }, []); const [authView, setAuthView] = React.useState(landingIntent.signup ? "signup" : "login"); const [signupType, setSignupType] = React.useState( landingIntent.signup && landingIntent.platform === "wordpress" ? "web" : null, ); const [email, setEmail] = React.useState(""); const [password, setPassword] = React.useState(""); const [passwordConfirm, setPasswordConfirm] = React.useState(""); const [firstName, setFirstName] = React.useState(""); const [lastName, setLastName] = React.useState(""); const [companyName, setCompanyName] = React.useState(""); const [siret, setSiret] = React.useState(""); const [vatNumber, setVatNumber] = React.useState(""); const [merchantEmail, setMerchantEmail] = React.useState(""); const [discoveredShops, setDiscoveredShops] = React.useState(null); const [localError, setLocalError] = React.useState(""); const [linkMode, setLinkMode] = React.useState(null); React.useEffect(() => { if (mode !== "pick-site") return; if (landingIntent.platform !== "wordpress") return; if (sites.length) return; if (linkMode) return; setLinkMode("website"); }, [mode, landingIntent.platform, sites.length, linkMode]); const [siteUrl, setSiteUrl] = React.useState(""); const [siteName, setSiteName] = React.useState(""); const displayError = error || localError; function resetSignup() { setSignupType(null); setDiscoveredShops(null); setLocalError(""); } async function handleLoginSubmit(e) { e.preventDefault(); setLocalError(""); onLogin({ email: email.trim(), password }); } async function handleDiscover(e) { e.preventDefault(); setLocalError(""); try { const shops = await onDiscoverShops(merchantEmail.trim()); setDiscoveredShops(shops); if (!shops.length) { setLocalError( "Aucune boutique trouvée pour cet email. Installez d'abord l'app SEO GUY sur Shopify.", ); } } catch (err) { setLocalError(err.message || "Recherche impossible."); } } async function handleShopifyRegister(e) { e.preventDefault(); setLocalError(""); onRegister({ type: "shopify", email: merchantEmail.trim(), password, passwordConfirm, firstName: firstName.trim() || undefined, lastName: lastName.trim() || undefined, }); } async function handleWebRegister(e) { e.preventDefault(); setLocalError(""); onRegister({ type: "web", email: email.trim(), password, passwordConfirm, firstName: firstName.trim(), lastName: lastName.trim(), companyName: companyName.trim(), siret: siret.trim() || undefined, vatNumber: vatNumber.trim() || undefined, }); } async function handleLinkWebsite(e) { e.preventDefault(); setLocalError(""); try { await onConnectWebsite({ siteUrl: siteUrl.trim(), siteName: siteName.trim() || undefined, }); } catch (err) { setLocalError(err.message || "Rattachement impossible."); } } async function handleLinkShopify(e) { e.preventDefault(); setLocalError(""); try { await onLinkShopify(merchantEmail.trim()); } catch (err) { setLocalError(err.message || "Rattachement impossible."); } } function siteLabel(site) { if (site.platform === "WEBSITE") { return site.shopName || "Site web"; } return site.shopName || site.shop; } function siteSubtitle(site) { if (site.platform === "WEBSITE") { return site.shopDomain || site.shop.replace(/^website:/, ""); } return site.shop; } if (mode === "auth") { if (authView === "signup" && !signupType) { return (
Choisissez votre profil pour démarrer.
{displayError &&{displayError}
}Saisissez l'email utilisé sur Shopify. Nous retrouverons vos boutiques où l'app SEO GUY est installée.
{displayError &&{displayError}
}{landingIntent.platform === "wordpress" ? "Parcours WordPress : après inscription, rattachez l’URL de votre site puis le plugin Assistant Guy." : "Sans boutique Shopify pour l'instant — vous pourrez synchroniser plus tard."}
{displayError &&{displayError}
}Connectez-vous pour accéder à vos boutiques.
{displayError &&{displayError}
}Pas encore de compte ?{" "}
Connecté en tant que {user?.email || "—"}
{displayError &&{displayError}
} {linkMode === "shopify" ? ( ) : linkMode === "website" ? ( ) : ( <>Aucun site rattaché. Connectez votre site web (WordPress) ou une boutique Shopify.
)} > )} {loading &&Chargement…
}