/** * ANNOTATED COPY — every line explained * Source: src/app/login/page.tsx * NOT used by the app — read this to learn how the real file works */ // Next.js: this file runs in the BROWSER (needs useState, onClick, localStorage, etc.) 'use client'; // (blank line — separates logical blocks for readability) // Import React — core UI library (components, hooks, JSX) import { useState } from 'react'; // Next.js Link — fast client-side navigation without full page reload import Link from 'next/link'; // Next.js App Router hooks — useRouter, useParams, useSearchParams import { useRouter } from 'next/navigation'; // Import project module (@/ alias = src/ folder in tsconfig) import Button from '@/components/ui/Button'; // Import project module (@/ alias = src/ folder in tsconfig) import { useAuthStore } from '@/store/auth'; // Import project module (@/ alias = src/ folder in tsconfig) import { useTranslation } from '@/hooks/useTranslation'; // Import project module (@/ alias = src/ folder in tsconfig) import { DEMO_EMAIL } from '@/lib/constants'; // (blank line — separates logical blocks for readability) // Default export — main component/page Next.js or other files import export default function LoginPage() { // Next.js router — programmatic navigation (router.push) const router = useRouter(); // Zustand selector — subscribe to slice of global store const { login, register } = useAuthStore(); // Custom hook — returns t() translator and current locale const { t } = useTranslation(); // React useState — local component state that triggers re-render on change const [isRegister, setIsRegister] = useState(false); // React useState — local component state that triggers re-render on change const [error, setError] = useState(''); // React useState — local component state that triggers re-render on change const [form, setForm] = useState({ // Property or array item — trailing comma allowed in TypeScript name: '', // Property or array item — trailing comma allowed in TypeScript email: '', // Property or array item — trailing comma allowed in TypeScript password: '', // Property or array item — trailing comma allowed in TypeScript phone: '', // Property or array item — trailing comma allowed in TypeScript street: '', // Property or array item — trailing comma allowed in TypeScript city: '', // Property or array item — trailing comma allowed in TypeScript state: '', // Property or array item — trailing comma allowed in TypeScript zip: '', // Closing brace — end of block (function, if, object, JSX) }); // (blank line — separates logical blocks for readability) // Line 28: const handleSubmit = (e: React.FormEvent) => { const handleSubmit = (e: React.FormEvent) => { // Line 29: e.preventDefault(); e.preventDefault(); // Line 30: setError(''); setError(''); // (blank line — separates logical blocks for readability) // Conditional branch — different behavior based on runtime value if (isRegister) { // Line 33: const success = register({ const success = register({ // Property or array item — trailing comma allowed in TypeScript name: form.name, // Property or array item — trailing comma allowed in TypeScript email: form.email, // Property or array item — trailing comma allowed in TypeScript password: form.password, // Property or array item — trailing comma allowed in TypeScript phone: form.phone, // Line 38: address: { address: { // Property or array item — trailing comma allowed in TypeScript street: form.street, // Property or array item — trailing comma allowed in TypeScript city: form.city, // Property or array item — trailing comma allowed in TypeScript state: form.state, // Property or array item — trailing comma allowed in TypeScript zip: form.zip, // Closing brace — end of block (function, if, object, JSX) }, // Closing brace — end of block (function, if, object, JSX) }); // Conditional branch — different behavior based on runtime value if (success) router.push('/account'); // Closing brace — end of block (function, if, object, JSX) } else { // Line 47: const success = login(form.email, form.password); const success = login(form.email, form.password); // Conditional branch — different behavior based on runtime value if (success) { // Line 49: router.push('/account'); router.push('/account'); // Closing brace — end of block (function, if, object, JSX) } else { // Line 51: setError(t('auth.invalidCredentials', { email: DEMO_EMAIL... setError(t('auth.invalidCredentials', { email: DEMO_EMAIL })); // Closing brace — end of block (function, if, object, JSX) } // Closing brace — end of block (function, if, object, JSX) } // Closing brace — end of block (function, if, object, JSX) }; // (blank line — separates logical blocks for readability) // Return JSX — describes UI tree React renders to the DOM return ( // JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser // Line 62: {t('site.initials')} {t('site.initials')} // JSX element — HTML-like tag becomes React component in browser // JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser

// Line 66: {isRegister ? t('auth.createAccount') : t('auth.welcomeBa... {isRegister ? t('auth.createAccount') : t('auth.welcomeBack')} // JSX element — HTML-like tag becomes React component in browser

// JSX element — HTML-like tag becomes React component in browser

// Line 69: {isRegister {isRegister // Line 70: ? t('auth.joinTagline', { name: t('site.name') }) ? t('auth.joinTagline', { name: t('site.name') }) // Line 71: : t('auth.signInTagline', { name: t('site.name') })} : t('auth.signInTagline', { name: t('site.name') })} // JSX element — HTML-like tag becomes React component in browser

// JSX element — HTML-like tag becomes React component in browser
// (blank line — separates logical blocks for readability) // JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser
// Line 77: {isRegister && ( {isRegister && ( // JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser // JSX element — HTML-like tag becomes React component in browser setForm({ ...form, name: e.target.value })} // Line 85: /> /> // JSX element — HTML-like tag becomes React component in browser
// Line 87: )} )} // (blank line — separates logical blocks for readability) // JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser // JSX element — HTML-like tag becomes React component in browser setForm({ ...form, email: e.target.value })} // Line 97: /> /> // JSX element — HTML-like tag becomes React component in browser
// (blank line — separates logical blocks for readability) // JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser // JSX element — HTML-like tag becomes React component in browser setForm({ ...form, password: e.target.value })} // Line 108: /> /> // JSX element — HTML-like tag becomes React component in browser
// (blank line — separates logical blocks for readability) // Line 111: {isRegister && ( {isRegister && ( // React Fragment — group elements without extra wrapper DOM node <> // JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser // JSX element — HTML-like tag becomes React component in browser setForm({ ...form, phone: e.target.value })} // Line 121: /> /> // JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser // JSX element — HTML-like tag becomes React component in browser setForm({ ...form, street: e.target.value })} // Line 130: /> /> // JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser // JSX element — HTML-like tag becomes React component in browser setForm({ ...form, city: e.target.value })} // Line 140: /> /> // JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser // JSX element — HTML-like tag becomes React component in browser setForm({ ...form, state: e.target.value })} // Line 149: /> /> // JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser // JSX element — HTML-like tag becomes React component in browser setForm({ ...form, zip: e.target.value })} // Line 159: /> /> // JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser // Line 162: )} )} // (blank line — separates logical blocks for readability) // Line 164: {error && ( {error && ( // JSX element — HTML-like tag becomes React component in browser

{error}

// Line 166: )} )} // (blank line — separates logical blocks for readability) // JSX element — HTML-like tag becomes React component in browser // JSX element — HTML-like tag becomes React component in browser
// (blank line — separates logical blocks for readability) // JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser // JSX element — HTML-like tag becomes React component in browser
// (blank line — separates logical blocks for readability) // Line 185: {!isRegister && ( {!isRegister && ( // JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser

// Line 188: {t('auth.demo', { email: DEMO_EMAIL })} {t('auth.demo', { email: DEMO_EMAIL })} // JSX element — HTML-like tag becomes React component in browser

// JSX element — HTML-like tag becomes React component in browser
// Line 191: )} )} // JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser
// JSX element — HTML-like tag becomes React component in browser
// Line 195: ); ); // Closing brace — end of block (function, if, object, JSX) }