Skip to content

Commit b7d05e9

Browse files
Merge remote-tracking branch 'origin/develop'
2 parents 4ce74d0 + e697355 commit b7d05e9

25 files changed

Lines changed: 294 additions & 232 deletions

public/videos/mainPoster.mp4

3.04 MB
Binary file not shown.
270 KB
Loading
270 KB
Loading

src/assets/videos/mainPoster.mp4

-2.06 MB
Binary file not shown.

src/components/Button/Button.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,16 @@ type ButtonProps = {
33
text: string;
44
onClick?: () => void;
55
className?: string;
6+
seminarId?: number;
67
};
78

8-
export const Button = ({ variant = 'default', text, onClick, className }: ButtonProps) => {
9+
export const Button = ({
10+
variant = 'default',
11+
text,
12+
onClick,
13+
className,
14+
seminarId,
15+
}: ButtonProps) => {
916
const baseStyle = 'w-[335px] h-[48px] rounded-80 subhead-1-semibold cursor-pointer';
1017
const variantStyles = {
1118
home: 'button-gradient text-white',
@@ -19,7 +26,7 @@ export const Button = ({ variant = 'default', text, onClick, className }: Button
1926
className={`${baseStyle} ${variantStyles[variant]} ${className ?? ''}`}
2027
onClick={onClick}
2128
>
22-
{text}
29+
{seminarId ? `${seminarId}${text}` : text}
2330
</button>
2431
);
2532
};

src/components/LectureCard/LectureCardMain.tsx

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,50 @@
1+
import { useQuery } from '@tanstack/react-query';
2+
import type { SeminarSessionResponse } from '../../types/SeminarDetail/seminarDetail';
3+
import { getSeminarSession } from '../../apis/seminarDetail';
14
import speakerEx from '../../assets/images/speakerEx.jpg';
25

3-
export const LectureCardMain = () => {
6+
type LectureCardMainProps = {
7+
seminarId: number;
8+
index: number;
9+
};
10+
11+
export const LectureCardMain = ({ seminarId, index }: LectureCardMainProps) => {
12+
const { data } = useQuery<SeminarSessionResponse>({
13+
queryKey: ['seminarSession', seminarId],
14+
queryFn: () => getSeminarSession(seminarId),
15+
});
16+
17+
const session = data?.result?.[index];
18+
const { title, speaker } = session || {};
19+
420
return (
521
<div className="relative w-[311px] h-[500px] rounded-[12px] overflow-hidden bg-black flex-shrink-0 snap-center">
6-
<img src={speakerEx} alt="연사 이미지" className="w-full h-full object-cover" />
22+
{/* 프로필 이미지 */}
23+
<img
24+
src={speaker?.profileUrl || speakerEx}
25+
alt="연사 이미지"
26+
className="w-full h-full object-cover"
27+
/>
28+
29+
{/* 그라데이션 */}
730
<div className="absolute bottom-0 left-0 right-0 h-[200px] bg-gradient-to-t from-[#3A4140] via-[#090A0C] to-transparent" />
831

32+
{/* 텍스트 정보 */}
933
<div className="absolute bottom-[35px] p-[16px] text-center gap-[20px] flex flex-col w-full">
10-
<div className="flex flex-col gap-[16px]">
11-
<p className="flex gap-[8px] items-center justify-center">
34+
<div className="flex flex-col gap-4">
35+
<div className="flex gap-[8px] items-center justify-center">
1236
<span className="body-2-semibold text-white">연사</span>
13-
<span className="subhead-1-semibold text-gradient">김데브</span>
14-
<span className="body-2-semibold text-white"></span>
15-
</p>
16-
<p className="body-1-medium text-white">前 Kakao · Toss Data Scientist</p>
37+
<div className="flex items-center justify-center gap-4">
38+
<span className="subhead-1-semibold text-gradient">
39+
{speaker?.name || '연사님 이름'}
40+
</span>
41+
<span className="body-2-semibold text-white"></span>
42+
</div>
43+
</div>
44+
<p className="body-1-medium text-white">{speaker?.organization || '소속 정보 없음'}</p>
1745
</div>
18-
<p className="px-[20px] heading-3-semibold text-white">
19-
Data Scientist가 바라보는 AI의 지난 10년과 현재
46+
<p className="px-[20px] heading-3-semibold text-white text-balance">
47+
{title || '세션 정보 없음'}
2048
</p>
2149
</div>
2250
</div>

src/components/LectureCard/LectureCardSession.tsx

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,21 @@
1-
export const LectureCardSession = () => {
1+
import { useQuery } from '@tanstack/react-query';
2+
import type { SeminarSessionResponse } from '../../types/SeminarDetail/seminarDetail';
3+
import { getSeminarSession } from '../../apis/seminarDetail';
4+
5+
type LectureCardMainProps = {
6+
seminarId: number;
7+
index: number;
8+
};
9+
10+
export const LectureCardSession = ({ seminarId, index }: LectureCardMainProps) => {
11+
const { data } = useQuery<SeminarSessionResponse>({
12+
queryKey: ['seminarSession', seminarId],
13+
queryFn: () => getSeminarSession(seminarId),
14+
});
15+
16+
const session = data?.result?.[index];
17+
const { title, description } = session || {};
18+
219
return (
320
<div
421
className="w-[311px] h-[500px] rounded-12 flex flex-col items-center justify-start px-[28px] pt-[50px] pb-[32px] gap-[48px] flex-shrink-0 snap-center"
@@ -9,15 +26,13 @@ export const LectureCardSession = () => {
926
>
1027
{/* 타이틀 */}
1128
<div className="flex flex-col items-center text-center w-[237px] h-[92px] gap-[8px]">
12-
<p className="heading-3-semibold text-gradient">Session #1</p>
13-
<p className="heading-3-semibold text-white">
14-
Data Scientist가 바라보는 AI의 지난 10년과 현재
15-
</p>
29+
<p className="heading-3-semibold text-gradient">Session #{index + 1}</p>
30+
<p className="heading-3-semibold text-white">{title}</p>
1631
</div>
1732

1833
{/* 세션 내용 */}
1934
<div className="body-2-medium text-grey-200 text-left">
20-
<p>
35+
{/* <p>
2136
<span className="text-gradient">ChatGPT 3년차,</span> LLM은 더욱 어려운 문제를 해결하고
2237
실제 작업을 수행하는 수준으로 발전했습니다.
2338
</p>
@@ -33,7 +48,8 @@ export const LectureCardSession = () => {
3348
LLM의 놀라운 능력의 비밀,{' '}
3449
<span className="text-gradient">추론(Reasoning)과 에이전트(Agent)</span>라는 핵심 키워드를
3550
쉽고 명확하게 알아봅시다!
36-
</p>
51+
</p> */}
52+
<p>{description}</p>
3753
</div>
3854
</div>
3955
);

src/components/LectureCard/LectureCardSpeaker.tsx

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,21 @@
1-
import speakerEx from '../../assets/images/speakerEx.jpg';
1+
import { useQuery } from '@tanstack/react-query';
2+
import type { SeminarSessionResponse } from '../../types/SeminarDetail/seminarDetail';
3+
import { getSeminarSession } from '../../apis/seminarDetail';
4+
5+
type LectureCardMainProps = {
6+
seminarId: number;
7+
index: number;
8+
};
9+
10+
export const LectureCardSpeaker = ({ seminarId, index }: LectureCardMainProps) => {
11+
const { data } = useQuery<SeminarSessionResponse>({
12+
queryKey: ['seminarSession', seminarId],
13+
queryFn: () => getSeminarSession(seminarId),
14+
});
15+
16+
const session = data?.result?.[index];
17+
const { speaker } = session || {};
218

3-
export const LectureCardSpeaker = () => {
419
return (
520
<div
621
className="w-[311px] h-[500px] rounded-[12px] flex flex-col items-center justify-start p-6 flex-shrink-0 snap-center"
@@ -11,29 +26,30 @@ export const LectureCardSpeaker = () => {
1126
>
1227
{/* 프로필 이미지 */}
1328
<img
14-
src={speakerEx}
29+
src={speaker?.profileUrl}
1530
alt="연사 이미지"
1631
className="rounded-full w-[150px] h-[150px] object-cover mt-[26px] mb-[18px]"
1732
/>
1833

1934
{/* 연사 정보 */}
2035
<div className="flex flex-col items-center gap-[4px] text-center">
21-
<div className="flex items-center gap-2">
36+
<div className="flex items-center gap-8">
2237
<p className="subhead-1-semibold text-white">연사</p>
23-
<p className="heading-2-semibold text-gradient">CoAI</p>
38+
<p className="heading-2-semibold text-gradient">{speaker?.name}</p>
2439
<p className="subhead-1-semibold text-white"></p>
2540
</div>
26-
<p className="body-1-medium text-white">前 Kakao · Toss Data Scientist</p>
41+
<p className="body-1-medium text-white">{speaker?.organization}</p>
2742
</div>
2843

2944
{/* 경력 리스트 */}
30-
<ul className="pl-[16px] pt-[30px] w-[273px] h-[140px] body-2-medium text-grey-200 text-left list-disc pb-[8px]">
31-
<li>前 Toss Securities Data Scientist (2021)</li>
32-
<li>前 Kakao Corp Data Scientist (2020)</li>
33-
<li>성균관대학교 통계학 학사 졸업</li>
34-
<li>F사 프로젝트 멘토/ 강사 (2020~2023)</li>
35-
<li>N사 부스트 캠프 멘토/강사 (2022~2023)</li>
36-
<li>S사 부트캠프 데이터 분석 멘토/강사 (2023~2024)</li>
45+
<ul className="pl-[16px] pt-[36px] w-[273px] body-2-medium text-grey-200 text-left list-disc pb-[8px]">
46+
{speaker?.history
47+
?.split('-')
48+
.map((item) => item.trim())
49+
.filter(Boolean)
50+
.map((item, idx) => (
51+
<li key={idx}>{item}</li>
52+
))}{' '}
3753
</ul>
3854
</div>
3955
);

src/components/admin/seminar-manage/ActivationDate/ActiveDateForm.tsx

Lines changed: 5 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,23 @@
11
import DateTimeSelector from './DateTimeSelector';
22

33
interface ActiveDateProps {
4-
seminarStartDate: Date;
5-
seminarEndDate: Date;
6-
applicationStartDate: Date;
7-
applicationEndDate: Date;
8-
onChange: (
9-
dateType: 'seminarStartDate' | 'seminarEndDate' | 'applicationStartDate' | 'applicationEndDate',
10-
newDate: Date
11-
) => void;
12-
seminarDateError?: string;
4+
applicationStartDate: Date | null;
5+
applicationEndDate: Date | null;
6+
onChange: (dateType: 'applicationStartDate' | 'applicationEndDate', newDate: Date | null) => void;
137
applicationDateError?: string;
148
}
159

1610
const ActiveDateForm = ({
17-
seminarStartDate,
18-
seminarEndDate,
1911
applicationStartDate,
2012
applicationEndDate,
2113
onChange,
22-
seminarDateError,
2314
applicationDateError,
2415
}: ActiveDateProps) => {
2516
return (
2617
<div className="space-y-6">
27-
{/* 현재 세미나 활성화 기간 */}
18+
{/* 세미나 신청 기간 */}
2819
<div className="bg-grey-900 p-6 rounded-10 min-h-[240px]">
29-
<h2 className="heading-2-bold text-white mb-6">현재 세미나 활성화 기간</h2>
30-
<div className="flex flex-col gap-y-9">
31-
<DateTimeSelector
32-
date={seminarStartDate}
33-
onDateChange={(newDate) => onChange('seminarStartDate', newDate)}
34-
/>
35-
<div className="flex items-center gap-x-3 ml-auto">
36-
<span className="subhead-1-semibold text-white">~</span>
37-
<DateTimeSelector
38-
date={seminarEndDate}
39-
onDateChange={(newDate) => onChange('seminarEndDate', newDate)}
40-
/>
41-
</div>
42-
</div>
43-
{seminarDateError && (
44-
<p className="text-status-error text-sm text-right mt-3">{seminarDateError}</p>
45-
)}
46-
</div>
47-
48-
{/* 세미나 신청 활성화 기간 */}
49-
<div className="bg-grey-900 p-6 rounded-10 min-h-[240px]">
50-
<h2 className="heading-2-bold text-white mb-6">세미나 신청 활성화 기간</h2>
20+
<h2 className="heading-2-bold text-white mb-6">세미나 신청 기간</h2>
5121
<div className="flex flex-col gap-y-9">
5222
<DateTimeSelector
5323
date={applicationStartDate}

0 commit comments

Comments
 (0)