11'use client' ;
22
3- import React , { useState , useEffect , useRef } from 'react' ;
3+ import React , { useState , useEffect , useRef , useCallback } from 'react' ;
44import Link from 'next/link' ;
55import { useRouter } from 'next/navigation' ;
66import { Button } from '@/components/ui/button' ;
@@ -11,25 +11,57 @@ import Modal from '@/components/Modal';
1111import Cookies from 'js-cookie' ;
1212
1313export default function Page2 ( ) {
14- const { email } = useFormStore ( ) ;
14+ const { id } = useFormStore ( ) ;
1515 const router = useRouter ( ) ;
1616 const [ inputs , setInputs ] = useState < string [ ] > ( ( ) => {
1717 const initialInputs = Array ( 5 ) . fill ( '' ) ;
18- if ( email ) {
19- initialInputs [ 0 ] = email ;
20- }
2118 return initialInputs ;
2219 } ) ;
2320 const [ showModal , setShowModal ] = useState ( false ) ;
2421 const timeoutRef = useRef < NodeJS . Timeout | null > ( null ) ; // Add timeoutRef
2522
23+ const fetchUserById = useCallback ( async ( index : number , userId : string ) => {
24+ if ( ! userId ) return ; // Don't fetch if ID is empty
25+
26+ // Prevent adding self as a team member
27+ if ( index !== 0 && id && Number ( userId ) === Number ( id ) ) { // Check only for other team members, not self
28+ alert ( '자기 자신을 팀원으로 추가할 수 없습니다.' ) ;
29+ const newInputs = [ ...inputs ] ;
30+ newInputs [ index ] = '' ; // Clear the input field
31+ setInputs ( newInputs ) ;
32+ return ;
33+ }
34+
35+ try {
36+ const response = await fetch ( `/api/v1/users/${ userId } ` ) ;
37+ if ( ! response . ok ) {
38+ throw new Error ( `HTTP error! status: ${ response . status } ` ) ;
39+ }
40+ const userData = await response . json ( ) ;
41+ // Assuming the API returns an object with a 'data' field
42+ const newInputs = [ ...inputs ] ;
43+ newInputs [ index ] = userData . data || userId ; // Use fetched data, or original ID if not found
44+ setInputs ( newInputs ) ;
45+ } catch ( error ) {
46+ console . error ( `Error fetching user ${ userId } :` , error ) ;
47+ // Optionally, display an error message to the user
48+ }
49+ } , [ id , inputs ] ) ;
50+
2651 useEffect ( ( ) => {
2752 const hasSeenModal = Cookies . get ( 'doNotShowModalPage2' ) ;
2853 if ( ! hasSeenModal ) {
2954 setShowModal ( true ) ;
3055 }
3156 } , [ ] ) ;
3257
58+ // Effect to pre-fill the first input if ID is available
59+ useEffect ( ( ) => {
60+ if ( id && inputs [ 0 ] === '' ) { // Only fetch if ID exists and input is empty
61+ fetchUserById ( 0 , id ) ;
62+ }
63+ } , [ id , fetchUserById , inputs ] ) ; // Rerun when id changes
64+
3365 const handleConfirm = ( ) => {
3466 setShowModal ( false ) ;
3567 } ;
@@ -55,24 +87,6 @@ export default function Page2() {
5587 } , 3000 ) ;
5688 } ;
5789
58- const fetchUserById = async ( index : number , id : string ) => {
59- if ( ! id ) return ; // Don't fetch if ID is empty
60- try {
61- const response = await fetch ( `${ process . env . APP_HOST } /v1/users/${ id } ` ) ;
62- if ( ! response . ok ) {
63- throw new Error ( `HTTP error! status: ${ response . status } ` ) ;
64- }
65- const userData = await response . json ( ) ;
66- // Assuming the API returns an object with a 'detail' field as per user's confirmation
67- const newInputs = [ ...inputs ] ;
68- newInputs [ index ] = userData . detail || id ; // Use fetched detail, or original ID if not found
69- setInputs ( newInputs ) ;
70- } catch ( error ) {
71- console . error ( `Error fetching user ${ id } :` , error ) ;
72- // Optionally, display an error message to the user
73- }
74- } ;
75-
7690 const handleSolveProblem = ( ) => {
7791 console . log ( 'Inputs:' , inputs ) ;
7892 // You can add logic here to process the inputs before navigating
@@ -95,7 +109,6 @@ export default function Page2() {
95109 onDoNotShowAgain = { handleDoNotShowAgain }
96110 isOpen = { showModal }
97111 />
98- { email && < p className = "mt-4" > 이메일: < strong > { email } </ strong > </ p > }
99112
100113 < div className = "mt-8 space-y-4" >
101114 { [ ...Array ( 5 ) ] . map ( ( _ , index ) => (
0 commit comments