"use client"; import React, { useMemo, useState } from "react"; import IdFindDone from "./IdFindDone"; import IdFindFailed from "./IdFindFailed"; import FindIdOption from "./FindIdOption"; import LoginInputSvg from "@/app/svgs/inputformx"; export default function FindIdPage() { const [isDoneOpen, setIsDoneOpen] = useState(false); const [isFailedOpen, setIsFailedOpen] = useState(false); const [foundUserId, setFoundUserId] = useState(undefined); const [name, setName] = useState(""); const [phone, setPhone] = useState(""); const [focused, setFocused] = useState>({}); const [errors, setErrors] = useState>({}); const isNameValid = useMemo(() => name.trim().length > 0, [name]); const isPhoneValid = useMemo(() => /^\d{9,11}$/.test(phone), [phone]); const canSubmit = useMemo(() => isNameValid && isPhoneValid, [isNameValid, isPhoneValid]); function validateAll() { const next: Record = {}; if (!isNameValid) next.name = "이름을 입력해 주세요."; if (!isPhoneValid) next.phone = "휴대폰 번호를 숫자만 9~11자리로 입력해 주세요."; setErrors(next); return Object.keys(next).length === 0; } function handleSubmit(e: React.FormEvent) { e.preventDefault(); if (!validateAll()) return; const mockUserId = `${name.trim()}@example.com`; setFoundUserId(mockUserId); setIsDoneOpen(true); } return (
setIsDoneOpen(false)} /> setIsFailedOpen(false)} />
아이디 찾기

가입 시 등록한 회원정보를 입력해 주세요.

setName(e.target.value)} onFocus={() => setFocused((p) => ({ ...p, name: true }))} onBlur={() => setFocused((p) => ({ ...p, name: false }))} placeholder="이름을 입력해 주세요." className="h-[40px] px-[12px] py-[7px] w-full rounded-[8px] border border-neutral-40 focus:outline-none focus:border-neutral-700 text-[18px] text-neutral-700 placeholder:text-input-placeholder-text pr-[40px]" /> {name.trim().length > 0 && focused.name && ( )}
{errors.name &&

{errors.name}

}
setPhone(e.target.value.replace(/[^0-9]/g, ""))} onFocus={() => setFocused((p) => ({ ...p, phone: true }))} onBlur={() => setFocused((p) => ({ ...p, phone: false }))} placeholder="-없이 입력해 주세요." className="h-[40px] px-[12px] py-[7px] w-full rounded-[8px] border border-neutral-40 focus:outline-none focus:border-neutral-700 text-[18px] text-neutral-700 placeholder:text-input-placeholder-text pr-[40px]" /> {phone.trim().length > 0 && focused.phone && ( )}
{errors.phone &&

{errors.phone}

}

Copyright ⓒ 2025 XL LMS. All rights reserved

); }