fork download
  1. import { useState, useEffect } from "react";
  2. import { Card, CardContent } from "@/components/ui/card";
  3. import { Input } from "@/components/ui/input";
  4. import { Button } from "@/components/ui/button";
  5. import { Checkbox } from "@/components/ui/checkbox";
  6. import { FcGoogle } from "react-icons/fc";
  7. import { MdEmail } from "react-icons/md";
  8.  
  9. export default function LoginPage() {
  10. const [email, setEmail] = useState("");
  11. const [password, setPassword] = useState("");
  12. const [rememberMe, setRememberMe] = useState(false);
  13.  
  14. useEffect(() => {
  15. const savedEmail = localStorage.getItem("savedEmail");
  16. const savedPassword = localStorage.getItem("savedPassword");
  17. if (savedEmail && savedPassword) {
  18. setEmail(savedEmail);
  19. setPassword(savedPassword);
  20. setRememberMe(true);
  21. }
  22. }, []);
  23.  
  24. const handleLogin = () => {
  25. console.log("Logging in with", email, password);
  26. if (rememberMe) {
  27. localStorage.setItem("savedEmail", email);
  28. localStorage.setItem("savedPassword", password);
  29. } else {
  30. localStorage.removeItem("savedEmail");
  31. localStorage.removeItem("savedPassword");
  32. }
  33. };
  34.  
  35. return (
  36. <div className="flex items-center justify-center min-h-screen bg-blue-50">
  37. <Card className="w-full max-w-md p-6 rounded-2xl shadow-lg bg-white">
  38. <CardContent>
  39. <h2 className="text-2xl font-bold text-center mb-4 text-blue-600">
  40. เข้าสู่ระบบ
  41. </h2>
  42. <p className="text-center text-gray-600 mb-6">
  43. สำหรับครูและนักเรียน เพื่อจับคู่ที่เหมาะสม
  44. </p>
  45. <div className="space-y-4">
  46. <div className="relative">
  47. <MdEmail className="absolute left-3 top-3 text-gray-400" />
  48. <Input
  49. type="email"
  50. placeholder="อีเมล"
  51. value={email}
  52. onChange={(e) => setEmail(e.target.value)}
  53. className="pl-10"
  54. />
  55. </div>
  56. <Input
  57. type="password"
  58. placeholder="รหัสผ่าน"
  59. value={password}
  60. onChange={(e) => setPassword(e.target.value)}
  61. />
  62. <div className="flex items-center space-x-2">
  63. <Checkbox
  64. checked={rememberMe}
  65. onCheckedChange={() => setRememberMe(!rememberMe)}
  66. />
  67. <label className="text-gray-700 text-sm">จำฉันไว้</label>
  68. </div>
  69. <Button className="w-full bg-blue-600 text-white" onClick={handleLogin}>
  70. เข้าสู่ระบบ
  71. </Button>
  72. <div className="text-center text-gray-500 text-sm">หรือ</div>
  73. <Button className="w-full flex items-center justify-center border bg-white text-gray-700 shadow-sm hover:bg-gray-100">
  74. <FcGoogle className="mr-2" /> เข้าสู่ระบบด้วย Google
  75. </Button>
  76. <p className="text-center text-sm text-gray-600 mt-4">
  77. ยังไม่มีบัญชี? <a href="#" className="text-blue-500">สมัครสมาชิก</a>
  78. </p>
  79. </div>
  80. </CardContent>
  81. </Card>
  82. </div>
  83. );
  84. }
  85.  
  86.  
Success #stdin #stdout 0.04s 25684KB
stdin
Standard input is empty
stdout
import { useState, useEffect } from "react";
import { Card, CardContent } from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { Button } from "@/components/ui/button";
import { Checkbox } from "@/components/ui/checkbox";
import { FcGoogle } from "react-icons/fc";
import { MdEmail } from "react-icons/md";

export default function LoginPage() {
  const [email, setEmail] = useState("");
  const [password, setPassword] = useState("");
  const [rememberMe, setRememberMe] = useState(false);

  useEffect(() => {
    const savedEmail = localStorage.getItem("savedEmail");
    const savedPassword = localStorage.getItem("savedPassword");
    if (savedEmail && savedPassword) {
      setEmail(savedEmail);
      setPassword(savedPassword);
      setRememberMe(true);
    }
  }, []);

  const handleLogin = () => {
    console.log("Logging in with", email, password);
    if (rememberMe) {
      localStorage.setItem("savedEmail", email);
      localStorage.setItem("savedPassword", password);
    } else {
      localStorage.removeItem("savedEmail");
      localStorage.removeItem("savedPassword");
    }
  };

  return (
    <div className="flex items-center justify-center min-h-screen bg-blue-50">
      <Card className="w-full max-w-md p-6 rounded-2xl shadow-lg bg-white">
        <CardContent>
          <h2 className="text-2xl font-bold text-center mb-4 text-blue-600">
            เข้าสู่ระบบ
          </h2>
          <p className="text-center text-gray-600 mb-6">
            สำหรับครูและนักเรียน เพื่อจับคู่ที่เหมาะสม
          </p>
          <div className="space-y-4">
            <div className="relative">
              <MdEmail className="absolute left-3 top-3 text-gray-400" />
              <Input
                type="email"
                placeholder="อีเมล"
                value={email}
                onChange={(e) => setEmail(e.target.value)}
                className="pl-10"
              />
            </div>
            <Input
              type="password"
              placeholder="รหัสผ่าน"
              value={password}
              onChange={(e) => setPassword(e.target.value)}
            />
            <div className="flex items-center space-x-2">
              <Checkbox
                checked={rememberMe}
                onCheckedChange={() => setRememberMe(!rememberMe)}
              />
              <label className="text-gray-700 text-sm">จำฉันไว้</label>
            </div>
            <Button className="w-full bg-blue-600 text-white" onClick={handleLogin}>
              เข้าสู่ระบบ
            </Button>
            <div className="text-center text-gray-500 text-sm">หรือ</div>
            <Button className="w-full flex items-center justify-center border bg-white text-gray-700 shadow-sm hover:bg-gray-100">
              <FcGoogle className="mr-2" /> เข้าสู่ระบบด้วย Google
            </Button>
            <p className="text-center text-sm text-gray-600 mt-4">
              ยังไม่มีบัญชี? <a href="#" className="text-blue-500">สมัครสมาชิก</a>
            </p>
          </div>
        </CardContent>
      </Card>
    </div>
  );
}