Skip to content

Commit a345066

Browse files
authored
Merge pull request #272 from Pseudo-Lab/feat/getcloser/frontend/team-member-info
feat(getcloser): add github/linkedin url of team members
2 parents f24292c + 7a53b05 commit a345066

1 file changed

Lines changed: 73 additions & 2 deletions

File tree

  • getcloser/frontend/src/app/page4

getcloser/frontend/src/app/page4/page.tsx

Lines changed: 73 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,68 @@ import Image from 'next/image';
77
import { authenticatedFetch } from '../../lib/api';
88
import { 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+
1025
export 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

Comments
 (0)