@@ -7,22 +7,68 @@ import Image from 'next/image';
77import { authenticatedFetch } from '../../lib/api' ;
88import { useFormStore } from '../../store/formStore' ;
99
10+ // Assuming a TeamMember interface for better typing
11+ interface TeamMember {
12+ id : number ;
13+ name : string ;
14+ email : string ;
15+ github_url ?: string ; // Optional
16+ linkedin_url ?: string ; // Optional
17+ }
18+
19+ interface TeamData {
20+ id : number ;
21+ name : string ;
22+ members : TeamMember [ ] ;
23+ }
24+
1025export default function Page4 ( ) {
11- const { id, isCorrect } = useFormStore ( ) ;
26+ const { id, isCorrect } = useFormStore ( ) ; // Added isCorrect
1227
1328 const [ result , setResult ] = useState < string > ( '' ) ;
29+ const [ teamData , setTeamData ] = useState < TeamData | null > ( null ) ; // State to store team data
1430 const [ clickCount , setClickCount ] = useState < number > ( 0 ) ;
1531 const [ lastClickTime , setLastClickTime ] = useState < number > ( 0 ) ;
1632 const router = useRouter ( ) ;
1733
34+ // This useEffect will set the initial success/failure based on isCorrect from the store
1835 useEffect ( ( ) => {
1936 if ( isCorrect === null ) {
2037 console . warn ( 'isCorrect is not set, defaulting to 실패' ) ;
2138 setResult ( '실패' ) ;
2239 } else {
2340 setResult ( isCorrect ? '성공' : '실패' ) ;
2441 }
25- } , [ isCorrect ] ) ;
42+ } , [ isCorrect ] ) ; // Depend on isCorrect from the store
43+
44+ // New useEffect to fetch team data when result is '성공'
45+ useEffect ( ( ) => {
46+ if ( result === '성공' ) {
47+ const fetchTeamData = async ( ) => {
48+ try {
49+ const response = await authenticatedFetch ( '/api/v1/teams/me' , {
50+ method : 'GET' ,
51+ headers : {
52+ 'Content-Type' : 'application/json' ,
53+ } ,
54+ } ) ;
55+
56+ if ( ! response . ok ) {
57+ const errorData = await response . json ( ) ;
58+ throw new Error ( `HTTP error! status: ${ response . status } , message: ${ errorData . detail || response . statusText } ` ) ;
59+ }
60+
61+ const data = await response . json ( ) ;
62+ setTeamData ( data ) ;
63+ } catch ( error : unknown ) {
64+ console . error ( 'Error fetching team data:' , error ) ;
65+ // Handle error, e.g., show a message to the user
66+ }
67+ } ;
68+
69+ fetchTeamData ( ) ;
70+ }
71+ } , [ result ] ) ; // Depend on result
2672
2773 const handleTryAgain = ( ) => {
2874 router . push ( '/page2' ) ;
@@ -73,6 +119,31 @@ export default function Page4() {
73119 onClick = { handleSuccessClick }
74120 />
75121 < p > DevFactory 부스에 방문하여 해당 화면을 보여주세요.< br /> 부스 방문 시 선물 드립니다!</ p >
122+
123+ { /* Display Team Members */ }
124+ { teamData && teamData . members && teamData . members . length > 0 && (
125+ < div className = "mt-8 text-left" >
126+ < h3 className = "text-2xl font-bold mb-4" > 우리 팀원들</ h3 >
127+ < div className = "grid grid-cols-1 md:grid-cols-2 gap-4" >
128+ { teamData . members . map ( ( member ) => (
129+ < div key = { member . id } className = "bg-muted p-4 rounded-lg shadow-md" >
130+ < p className = "text-lg font-semibold" > { member . name } </ p >
131+ < p className = "text-sm text-gray-600" > Email: { member . email } </ p >
132+ { member . github_url && (
133+ < p className = "text-sm text-gray-600" >
134+ GitHub: < a href = { member . github_url } target = "_blank" rel = "noopener noreferrer" className = "text-blue-500 hover:underline" > { member . github_url } </ a >
135+ </ p >
136+ ) }
137+ { member . linkedin_url && (
138+ < p className = "text-sm text-gray-600" >
139+ LinkedIn: < a href = { member . linkedin_url } target = "_blank" rel = "noopener noreferrer" className = "text-blue-500 hover:underline" > { member . linkedin_url } </ a >
140+ </ p >
141+ ) }
142+ </ div >
143+ ) ) }
144+ </ div >
145+ </ div >
146+ ) }
76147 </ >
77148 ) : (
78149 < >
0 commit comments