diff --git a/public/svg/seminar/gdsc_logo.svg b/public/svg/seminar/gdsc_logo.svg deleted file mode 100644 index 2b559a5..0000000 --- a/public/svg/seminar/gdsc_logo.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/public/svg/seminar/presenter_profile_img.png b/public/svg/seminar/presenter_profile_img.png new file mode 100644 index 0000000..5241b54 Binary files /dev/null and b/public/svg/seminar/presenter_profile_img.png differ diff --git a/public/svg/seminar/seminar_thumbnail_card.png b/public/svg/seminar/seminar_thumbnail_card.png new file mode 100644 index 0000000..0c8bb6f Binary files /dev/null and b/public/svg/seminar/seminar_thumbnail_card.png differ diff --git a/public/svg/seminar/translate_img.png b/public/svg/seminar/translate_img.png new file mode 100644 index 0000000..472f37d Binary files /dev/null and b/public/svg/seminar/translate_img.png differ diff --git a/src/app/seminar/[id]/page.tsx b/src/app/seminar/[id]/page.tsx index 4874a2d..2dfea36 100644 --- a/src/app/seminar/[id]/page.tsx +++ b/src/app/seminar/[id]/page.tsx @@ -1,28 +1,32 @@ 'use client'; import React from 'react'; -import { useRouter } from 'next/navigation'; +import { usePathname } from 'next/navigation'; import SeminarDetailHeader from '@/components/seminar/seminarDetail/header/SeminarDetailHeader'; import SeminarDetailBanner from '@/components/seminar/seminarDetail/banner/SeminarDetailBanner'; import { SEMINAR_DATA } from '@/constants/seminar/seminarData'; import SeminarDetailPdf from '@/components/seminar/seminarDetail/pdf/SeminarDetailPdf'; import NotFoundPage from '@/app/not-found'; import SeminarDetailReview from '@/components/seminar/seminarDetail/review/SeminarDetailReview'; +import { changePathtoNumber } from '@/hooks/seminar/changePathtoNumber'; const SeminarDetailPage = () => { - const router = useRouter(); - console.log(router); - + const pathname = usePathname(); + // 숫자 추출 + var id = changePathtoNumber(pathname); + // 객체 찾기 - const seminar = SEMINAR_DATA.find(seminar => Number(seminar.id) === 1); + const seminar = SEMINAR_DATA.find(seminar => Number(seminar.id) === id); - if (!seminar) { + if (!id || !seminar) { // 세미나를 찾지 못한 경우 return ; } - return
+ return
+
+
{/* header */} @@ -33,8 +37,12 @@ const SeminarDetailPage = () => { {/* review */} - -
; + + +
+
+
+ ; }; export default SeminarDetailPage; diff --git a/src/app/seminar/open/[id]/page.tsx b/src/app/seminar/open/[id]/page.tsx new file mode 100644 index 0000000..aed1ba1 --- /dev/null +++ b/src/app/seminar/open/[id]/page.tsx @@ -0,0 +1,43 @@ +'use client'; + +import React from 'react'; +import { usePathname } from 'next/navigation'; +import OpenSeminarDetailHeader from '@/components/seminar/openSeminarDetail/header/OpenSeminarDetailHeader'; +import OpenSeminarDetailBanner from '@/components/seminar/openSeminarDetail/banner/OpenSeminarDetailBanner'; +import OpenSeminarDetailSeminars from '@/components/seminar/openSeminarDetail/kindOfSeminar/OpenSeminarDetailSeminars'; +import OpenSeminarDetailInformation from '@/components/seminar/openSeminarDetail/information/OpenSeminarDetailInformation'; +import { OPEN_SEMINAR_DATA } from '@/constants/seminar/openSeminarData'; +import NotFoundPage from '@/app/not-found'; +import { changeOpenPathtoNumber } from '@/hooks/seminar/changePathtoNumber'; + +const OpenSeminarDetailPage = () => { + const pathname = usePathname(); + // 숫자 추출 + var id = changeOpenPathtoNumber(pathname); + + // 객체 찾기 + const seminar = OPEN_SEMINAR_DATA.find(seminar => Number(seminar.id) === id); + + if (!seminar) { + // 세미나를 찾지 못한 경우 + return ; + } + + return
+
+
+ {/* header */} + + {/* banner */} + + {/* seminars */} + + {/* information */} + +
+
+
+
; +}; + +export default OpenSeminarDetailPage; diff --git a/src/app/seminar/page.tsx b/src/app/seminar/page.tsx index df2dacd..c83cf82 100644 --- a/src/app/seminar/page.tsx +++ b/src/app/seminar/page.tsx @@ -9,7 +9,9 @@ import React, { useState } from 'react'; const SeminarPage = () => { const [selectedCategory, setSelectedCategory] = useState('all'); - return
+ return
+
+
{/* header */} @@ -21,7 +23,10 @@ const SeminarPage = () => { {/* seminar list */} -
; +
+
+
+ ; }; export default SeminarPage; diff --git a/src/components/seminar/header/SeminarHeader.tsx b/src/components/seminar/header/SeminarHeader.tsx index 7e0bf46..a9aeee3 100644 --- a/src/components/seminar/header/SeminarHeader.tsx +++ b/src/components/seminar/header/SeminarHeader.tsx @@ -11,19 +11,14 @@ import BannerImg from '@/svg/seminar/seminar_banner.svg'; * Renders the header component for the recruitment section. * @returns The rendered header component. */ -const SeminarHeader = () => { - +const SeminarHeader = () => { return ( -
-

- Seminar -

-

- 여러분과 함께 나누고싶은 이야기 -

-

- -

+ <> +
Seminar
+
여러분과 함께 나누고싶은 이야기
+

+ + ); }; export default SeminarHeader; diff --git a/src/components/seminar/menubar/SeminarMenuBar.tsx b/src/components/seminar/menubar/SeminarMenuBar.tsx index 666c18d..672658a 100644 --- a/src/components/seminar/menubar/SeminarMenuBar.tsx +++ b/src/components/seminar/menubar/SeminarMenuBar.tsx @@ -24,12 +24,12 @@ const SeminarMenuBar = ({ }; return ( -

+
{SEMINAR_CATEGORYS.map((category) => ( +
+
+ + + ); +}; +export default OpenSeminarDetailBanner; diff --git a/src/components/seminar/openSeminarDetail/header/OpenSeminarDetailHeader.tsx b/src/components/seminar/openSeminarDetail/header/OpenSeminarDetailHeader.tsx new file mode 100644 index 0000000..056a317 --- /dev/null +++ b/src/components/seminar/openSeminarDetail/header/OpenSeminarDetailHeader.tsx @@ -0,0 +1,41 @@ +'use client'; + +import { OpenDetailSeminar, OpenSeminar } from '@/interfaces/seminar/openSeminar'; +import React, { useState } from 'react'; + +/** + * @description + * 오픈 세미나 상세 페이지 헤더 컴포넌트 + * @component OpenSeminarDetailHeader + * @returns {JSX.Element} OpenSeminarDetailHeader + * @since 2024.05.01 + */ +/** + * Renders the header component for the recruitment section. + * @returns The rendered header component. + */ +const OpenSeminarDetailHeader = ({ data }: { data: OpenSeminar }) => { + const [categoryData, setCategoryData] = useState([data.type, `${data.flag}st`]); + + return ( + <> +
+ {categoryData.map((category, index) => ( + + ))} +
+

+ {data.seminar_month_date}{" "}{data.type} +

+

+ {data.description} +

+ + ); +}; +export default OpenSeminarDetailHeader; diff --git a/src/components/seminar/openSeminarDetail/information/OpenSeminarDetailInformation.tsx b/src/components/seminar/openSeminarDetail/information/OpenSeminarDetailInformation.tsx new file mode 100644 index 0000000..b94cad2 --- /dev/null +++ b/src/components/seminar/openSeminarDetail/information/OpenSeminarDetailInformation.tsx @@ -0,0 +1,34 @@ +import React from 'react'; +import { OpenSeminar } from '@/interfaces/seminar/openSeminar'; + +/** + * @description + * 오픈 세미나 정보 컴포넌트 + * @component OpenSeminarDetailInformation + * @returns {JSX.Element} OpenSeminarDetailInformation + * @since 2024.04.18 + */ +/** + * Renders the header component for the recruitment section. + * @returns The rendered header component. + */ +const OpenSeminarDetailInformation = ({ data }: { data: OpenSeminar }) => { + + return ( +
+

+ Information +

+

+

+ {data.information.split('
').map((line, index) => ( + + {line} +
+
+ ))} +
+
+ ); +}; +export default OpenSeminarDetailInformation; diff --git a/src/components/seminar/openSeminarDetail/kindOfSeminar/OpenSeminarDetailSeminars.tsx b/src/components/seminar/openSeminarDetail/kindOfSeminar/OpenSeminarDetailSeminars.tsx new file mode 100644 index 0000000..32b490f --- /dev/null +++ b/src/components/seminar/openSeminarDetail/kindOfSeminar/OpenSeminarDetailSeminars.tsx @@ -0,0 +1,37 @@ +import React from 'react'; +import OpenSeminarsDetailBox from './OpenSeminarsDetailBox'; +import { OpenSeminar } from '@/interfaces/seminar/openSeminar'; +import { OPEN_SEMINAR_DATA } from '@/constants/seminar/openSeminarData'; +import Link from 'next/link'; + +/** + * @description + * 오픈 세미나 상세 페이지 세미나 종류 컴포넌트 + * @component OpenSeminarDetailSeminars + * @returns {JSX.Element} OpenSeminarDetailSeminars + * @since 2024.04.18 + */ +/** + * Renders the header component for the recruitment section. + * @returns The rendered header component. + */ +const OpenSeminarDetailSeminars = ({ data }: { data: OpenSeminar }) => { + + return ( +
+

+ Seminars +

+

+

+ {data.seminars.map((seminar, index) => ( + + ))} +
+
+ ); +}; +export default OpenSeminarDetailSeminars; diff --git a/src/components/seminar/openSeminarDetail/kindOfSeminar/OpenSeminarsDetailBox.tsx b/src/components/seminar/openSeminarDetail/kindOfSeminar/OpenSeminarsDetailBox.tsx new file mode 100644 index 0000000..e73c985 --- /dev/null +++ b/src/components/seminar/openSeminarDetail/kindOfSeminar/OpenSeminarsDetailBox.tsx @@ -0,0 +1,39 @@ +import { OpenDetailSeminar, OpenSeminar } from '@/interfaces/seminar/openSeminar'; +import Image from 'next/image'; +import React from 'react'; + +/** + * @description + * 세미나 상세 페이지 리뷰 디테일 컴포넌트 + * @component SeminarDetailReviewDetail + * @returns {JSX.Element} SeminarDetailReviewDetail + * @since 2024.04.18 + */ +/** + * Renders the header component for the recruitment section. + * @returns The rendered header component. + */ +const OpenSeminarsDetailBox = ({ data }: { data: OpenDetailSeminar }) => { + + return ( +
+
+ translate_img +
+
+
+ {data.presenter}

{data.presenter_role}

+
+

{data.seminar_title}

+
+
+ ); +}; +export default OpenSeminarsDetailBox; diff --git a/src/components/seminar/seminarDetail/banner/SeminarDetailBanner.tsx b/src/components/seminar/seminarDetail/banner/SeminarDetailBanner.tsx index 874f5ae..c09a92a 100644 --- a/src/components/seminar/seminarDetail/banner/SeminarDetailBanner.tsx +++ b/src/components/seminar/seminarDetail/banner/SeminarDetailBanner.tsx @@ -1,6 +1,7 @@ import React from 'react'; +import Image from 'next/image'; import { SeminarThumnail } from '@/interfaces/seminar/seminarThumbnail'; -import SeminarDetailBannerThumbnail from './SeminarDetailBannerThumbnail'; +import TranslateImg from '@/svg/seminar/translate_img.png'; /** @@ -16,51 +17,56 @@ import SeminarDetailBannerThumbnail from './SeminarDetailBannerThumbnail'; */ const SeminarDetailBanner = ({ data }: { data: SeminarThumnail }) => { return ( -
+
{/* 왼쪽 컨텐츠 */} - +
+ {`${data.presenter}'s_seminarimage`} +
{/* 오른쪽 컨텐츠 */} -
-
-
-

- {data.presenter} -

-

- {data.flag}st {data.role} -

+
+
+
+ translate_img
-
-
-
-

+

+

Date

-

+

{data.date}

-

+

+
+

Location

-

+

{data.location}

-

+

+
+

Speaker

-

- {data.presenter} -

+
+ {data.presenter}

{data.role}

+
+
+
); diff --git a/src/components/seminar/seminarDetail/banner/SeminarDetailBannerThumbnail.tsx b/src/components/seminar/seminarDetail/banner/SeminarDetailBannerThumbnail.tsx deleted file mode 100644 index d0f737f..0000000 --- a/src/components/seminar/seminarDetail/banner/SeminarDetailBannerThumbnail.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import React from 'react'; -import GDSCLOGO from '@/svg/seminar/gdsc_logo.svg'; -import { SeminarThumnail } from '@/interfaces/seminar/seminarThumbnail'; - - -/** - * @description - * 세미나 상세 페이지 배너 썸네일 컴포넌트 - * @component SeminarDetailBannerThumbnail - * @returns {JSX.Element} SeminarDetailBanner - * @since 2024.04.18 - */ -/** - * Renders the header component for the recruitment section. - * @returns The rendered header component. - */ - -const SeminarDetailBannerThumbnail = ({ data }: { data: SeminarThumnail }) => { - return ( -
-
- -

GDSC DGU {data.flag}st

-

{data.type}

-

{data.date}

-

-

{data.title}

-

{data.description}

-
-
- ); - }; - export default SeminarDetailBannerThumbnail; - \ No newline at end of file diff --git a/src/components/seminar/seminarDetail/header/SeminarDetailHeader.tsx b/src/components/seminar/seminarDetail/header/SeminarDetailHeader.tsx index 8a9fbde..0fdba4a 100644 --- a/src/components/seminar/seminarDetail/header/SeminarDetailHeader.tsx +++ b/src/components/seminar/seminarDetail/header/SeminarDetailHeader.tsx @@ -2,6 +2,7 @@ import { SeminarThumnail } from '@/interfaces/seminar/seminarThumbnail'; import React, { useState } from 'react'; +import BannerImg from '@/svg/seminar/seminar_banner.svg'; /** * @description @@ -18,24 +19,24 @@ const SeminarDetailHeader = ({ data }: { data: SeminarThumnail }) => { const [categoryData, setCategoryData] = useState([data.type, `${data.flag}st`, data.topic]); return ( -
-
+ <> +
{categoryData.map((category, index) => ( ))}
-

+

{data.title}

-

+

{data.description}

-
+ ); }; export default SeminarDetailHeader; diff --git a/src/components/seminar/seminarDetail/pdf/SeminarDetailPdf.tsx b/src/components/seminar/seminarDetail/pdf/SeminarDetailPdf.tsx index c25c176..19c79a7 100644 --- a/src/components/seminar/seminarDetail/pdf/SeminarDetailPdf.tsx +++ b/src/components/seminar/seminarDetail/pdf/SeminarDetailPdf.tsx @@ -15,9 +15,9 @@ import PinImg from '@/svg/seminar/pin.svg'; const SeminarDetailPdf = () => { return ( -
+
-

세미나 자료 보기

+

세미나 자료 보기

); }; diff --git a/src/components/seminar/seminarDetail/review/SeminalDetailReviewDetail.tsx b/src/components/seminar/seminarDetail/review/SeminalDetailReviewDetail.tsx index e6d36bf..a11a2c9 100644 --- a/src/components/seminar/seminarDetail/review/SeminalDetailReviewDetail.tsx +++ b/src/components/seminar/seminarDetail/review/SeminalDetailReviewDetail.tsx @@ -15,9 +15,9 @@ import React from 'react'; const SeminarDetailReviewDetail = ({ data }: { data: SeminarReview }) => { return ( -
-

사람 이름

-

리뷰 내용

+
+

사람 이름

+

리뷰 내용

); }; diff --git a/src/components/seminar/seminarDetail/review/SeminarDetailReview.tsx b/src/components/seminar/seminarDetail/review/SeminarDetailReview.tsx index 8fdda8f..1804260 100644 --- a/src/components/seminar/seminarDetail/review/SeminarDetailReview.tsx +++ b/src/components/seminar/seminarDetail/review/SeminarDetailReview.tsx @@ -16,11 +16,11 @@ import SeminarDetailReviewDetail from './SeminalDetailReviewDetail'; const SeminarDetailReview = () => { return ( -
-

+

+

Review

-

+

{SEMINAR_REVIEW.map((review) => ( { return ( -

- {/* 왼쪽 컨텐츠 */} -
- -

GDSC DGU {data.flag}st

-

{data.type}

-

{data.date}

-

-

{data.title}

-

{data.description}

-
- {/* 오른쪽 컨텐츠 */} -
-

- {data.topic} -

-
-
-

- {data.presenter} -

-

- {data.flag}st {data.role} -

-
-
-
+
+ {`${data.presenter}'s_seminarimage`}
); }; diff --git a/src/components/seminar/thumbnail/SeminarThumbnailList.tsx b/src/components/seminar/thumbnail/SeminarThumbnailList.tsx index 5e09964..39c0f09 100644 --- a/src/components/seminar/thumbnail/SeminarThumbnailList.tsx +++ b/src/components/seminar/thumbnail/SeminarThumbnailList.tsx @@ -35,7 +35,7 @@ const SeminarThumbnailList = ({ selectedCategory }: { selectedCategory: string } // 페이지 번호 계산 const pageNumbers = []; - for (let i = 1; i <= Math.ceil(SEMINAR_DATA.length / itemsPerPage); i++) { + for (let i = 1; i <= Math.ceil(filteredData.length / itemsPerPage); i++) { pageNumbers.push(i); } @@ -47,11 +47,11 @@ const SeminarThumbnailList = ({ selectedCategory }: { selectedCategory: string } return ( -
- {/* 썸네일 레스트 */} -
+
+ {/* 썸네일 리스트 */} + + {/* desktop인 경우 */} +
{currentItems.map((seminar) => ( ))} +
+ + {/*tablet, mobile인 경우 */} +
+ {SEMINAR_DATA.map((seminar) => ( + + + + ))}
{/* 페이지네이션 버튼 */} -
+ + {/* desktop인 경우에만 보이기 */} +
{pageNumbers.map(number => ( diff --git a/src/components/seminar/toggle/SeminarToggle.tsx b/src/components/seminar/toggle/SeminarToggle.tsx index 8c83584..cbc85fe 100644 --- a/src/components/seminar/toggle/SeminarToggle.tsx +++ b/src/components/seminar/toggle/SeminarToggle.tsx @@ -4,6 +4,7 @@ import React, { useState } from 'react'; import SeminarToggleMenu from './SeminarToggleMenu'; import ChervonDownIcon from '@/svg/icons/common/chervon_down.svg'; import { OPEN_SEMINAR_DATA } from '@/constants/seminar/openSeminarData'; +import Link from 'next/link'; /** * @description @@ -23,21 +24,26 @@ const SeminarToggle = () => { }; return ( -
-
-
-
+
{isMenuVisible && ( -
- {OPEN_SEMINAR_DATA.map((openSeminar) => ( +
+ {OPEN_SEMINAR_DATA.map((seminar) => ( + + ))}
)} diff --git a/src/components/seminar/toggle/SeminarToggleMenu.tsx b/src/components/seminar/toggle/SeminarToggleMenu.tsx index 39b0d44..30c873b 100644 --- a/src/components/seminar/toggle/SeminarToggleMenu.tsx +++ b/src/components/seminar/toggle/SeminarToggleMenu.tsx @@ -16,16 +16,16 @@ const SeminarToggleMenu = ({data}: {data:OpenSeminar}) => { return (
+ className="p-3 flex justify-between items-center">
-

{data.opening_date}{" "}{data.type}

-

{data.seminar_date}

+

{data.seminar_month_date}{" "}{data.type}

+

{data.seminar_opening_date}

-

+

{data.status === false ? "종료" : "진행중"}

-

+

); }; diff --git a/src/constants/seminar/openSeminarData.ts b/src/constants/seminar/openSeminarData.ts index b3c10a3..42a3f3b 100644 --- a/src/constants/seminar/openSeminarData.ts +++ b/src/constants/seminar/openSeminarData.ts @@ -1,26 +1,88 @@ -import SeoHuiChan from '@/images/seminar/presenter/seohuichan.png'; -import { OpenSeminar } from '@/interfaces/seminar/openSeminar'; +import SeminarThumbnailCardImg from '@/svg/seminar/seminar_thumbnail_card.png'; +import PresenterProfileImg from '@/svg/seminar/presenter_profile_img.png'; +import { OpenDetailSeminar, OpenSeminar } from '@/interfaces/seminar/openSeminar'; + +export const OPEN_DETAIL_SEMINAR_DATA:OpenDetailSeminar [] = [ + { + id: 4, + presenter: `서희찬`, + seminar_title: `세미나 제목`, + presenter_role: `Lead`, + presenter_image_url: PresenterProfileImg.src, + }, + { + id: 3, + presenter: `서희찬`, + seminar_title: `세미나 제목`, + presenter_role: `Lead`, + presenter_image_url: PresenterProfileImg.src, + }, + { + id: 2, + presenter: `서희찬`, + seminar_title: `세미나 제목`, + presenter_role: `Lead`, + presenter_image_url: PresenterProfileImg.src, + }, + { + id: 1, + presenter: `서희찬`, + seminar_title: `세미나 제목`, + presenter_role: `Lead`, + presenter_image_url: PresenterProfileImg.src, + }, +] export const OPEN_SEMINAR_DATA: OpenSeminar[] = [ { id: 1, flag: 1, type: 'Open Seminar', - topic: 'DevTalk', - opening_date: '2023/5', - seminar_date: '2023.09.22 (FRI) 19:30', + seminar_opening_date: '2024.05.16 (THU) 18:30', + seminar_month_date: '2024/5', + location: '동국대학교 원흥관 PBL', + description: ` + GDSC DGU의 소속이 아니더라도 기술과 경험을 공유하는 것에 관심이 있는 학생들을 대상으로 진행하는 세미나입니다. + `, + information: ` + CONG(콩) : 축하 아카이빙 서비스

CONG은 왜 필요할까?

Unlearn Point 1️⃣ : 좋은 일이라도 나서서 축하해달라고 요청하는 것은 왠지 눈치보여 ...
Unlearn Point 2️⃣ : 축하는 대단한 일이어야만 받을 수 있겠지?
축하의 문제점 : 온/오프라인으로 축하받은 내용이 쉽게 휘발된다.
🥲 졸전 포스트잇들이 자꾸 떨어져..
간직하고 싶은데
아쉬워요.
🥲 구두로 축하를 받거나, 내가 자리에 없을 때 누가 온지 파악이 힘들어요.
🥲 졸전 포스트잇 집에 들고 갔는데 지금은 어디에 있는지 몰라요.

작은 일이라도 좋은 일이 생겼을 때,
내가 먼저 🙌🏻 축하해달라고 하면?
이렇게 받은 축하를 오래 간직할 수 있다면? 📁

'CONG'을 통해 축하받고 싶은 일을 알리고 축하 노트를 받아요!
축하의 순간, 사라지지 않게 콩 + `, + image_url: SeminarThumbnailCardImg.src, + status: true, + seminars: OPEN_DETAIL_SEMINAR_DATA, + }, + { + id: 2, + flag: 1, + type: 'Open Seminar', + seminar_opening_date: '2024.05.16 (THU) 18:30', + seminar_month_date: '2024/5', location: '동국대학교 원흥관 PBL', - title: ` - 휴, 하마터면 - 의사 될 뻔... + description: ` + GDSC DGU의 소속이 아니더라도 기술과 경험을 공유하는 것에 관심이 있는 학생들을 대상으로 진행하는 세미나입니다. + `, + information: ` + CONG(콩) : 축하 아카이빙 서비스

CONG은 왜 필요할까?

Unlearn Point 1️⃣ : 좋은 일이라도 나서서 축하해달라고 요청하는 것은 왠지 눈치보여 ...
Unlearn Point 2️⃣ : 축하는 대단한 일이어야만 받을 수 있겠지?
축하의 문제점 : 온/오프라인으로 축하받은 내용이 쉽게 휘발된다.
🥲 졸전 포스트잇들이 자꾸 떨어져..
간직하고 싶은데
아쉬워요.
🥲 구두로 축하를 받거나, 내가 자리에 없을 때 누가 온지 파악이 힘들어요.
🥲 졸전 포스트잇 집에 들고 갔는데 지금은 어디에 있는지 몰라요.

작은 일이라도 좋은 일이 생겼을 때,
내가 먼저 🙌🏻 축하해달라고 하면?
이렇게 받은 축하를 오래 간직할 수 있다면? 📁

'CONG'을 통해 축하받고 싶은 일을 알리고 축하 노트를 받아요!
축하의 순간, 사라지지 않게 콩 `, + image_url: SeminarThumbnailCardImg.src, + status: true, + seminars: OPEN_DETAIL_SEMINAR_DATA, + }, + { + id: 3, + flag: 1, + type: 'Open Seminar', + seminar_opening_date: '2024.05.16 (THU) 18:30', + seminar_month_date: '2024/5', + location: '동국대학교 원흥관 PBL', description: ` - 의사를 목표로 공부를 하다가, - 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + GDSC DGU의 소속이 아니더라도 기술과 경험을 공유하는 것에 관심이 있는 학생들을 대상으로 진행하는 세미나입니다. + `, + information: ` + CONG(콩) : 축하 아카이빙 서비스

CONG은 왜 필요할까?

Unlearn Point 1️⃣ : 좋은 일이라도 나서서 축하해달라고 요청하는 것은 왠지 눈치보여 ...
Unlearn Point 2️⃣ : 축하는 대단한 일이어야만 받을 수 있겠지?
축하의 문제점 : 온/오프라인으로 축하받은 내용이 쉽게 휘발된다.
🥲 졸전 포스트잇들이 자꾸 떨어져..
간직하고 싶은데
아쉬워요.
🥲 구두로 축하를 받거나, 내가 자리에 없을 때 누가 온지 파악이 힘들어요.
🥲 졸전 포스트잇 집에 들고 갔는데 지금은 어디에 있는지 몰라요.

작은 일이라도 좋은 일이 생겼을 때,
내가 먼저 🙌🏻 축하해달라고 하면?
이렇게 받은 축하를 오래 간직할 수 있다면? 📁

'CONG'을 통해 축하받고 싶은 일을 알리고 축하 노트를 받아요!
축하의 순간, 사라지지 않게 콩 `, - presenter: '서희찬', - role: 'Lead', - profile_image_url: SeoHuiChan.src, - status: false + image_url: SeminarThumbnailCardImg.src, + status: false, + seminars: OPEN_DETAIL_SEMINAR_DATA, }, ] \ No newline at end of file diff --git a/src/constants/seminar/seminarData.ts b/src/constants/seminar/seminarData.ts index 38f4c31..2f480f4 100644 --- a/src/constants/seminar/seminarData.ts +++ b/src/constants/seminar/seminarData.ts @@ -1,4 +1,4 @@ -import SeoHuiChan from '@/images/seminar/presenter/seohuichan.png'; +import SeminarThumbnailCardImg from '@/svg/seminar/seminar_thumbnail_card.png'; import { SeminarThumnail } from '@/interfaces/seminar/seminarThumbnail'; export const SEMINAR_DATA: SeminarThumnail[] = [ @@ -19,7 +19,7 @@ export const SEMINAR_DATA: SeminarThumnail[] = [ `, presenter: '서희찬', role: 'Lead', - profile_image_url: SeoHuiChan.src, + image_url: SeminarThumbnailCardImg.src, }, { id: 2, @@ -28,11 +28,17 @@ export const SEMINAR_DATA: SeminarThumnail[] = [ topic: 'DevTalk', date: '2023.09.22 (FRI) 19:30', location: '동국대학교 원흥관 PBL', - title: '휴, 하마터면\n의사 될 뻔...', - description: `의사를 목표로 공부를 하다가, 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들`, + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, presenter: '서희찬', role: 'Lead', - profile_image_url: SeoHuiChan.src, + image_url: SeminarThumbnailCardImg.src, }, { id: 3, @@ -41,11 +47,17 @@ export const SEMINAR_DATA: SeminarThumnail[] = [ topic: 'DevTalk', date: '2023.09.22 (FRI) 19:30', location: '동국대학교 원흥관 PBL', - title: '휴, 하마터면\n의사 될 뻔...', - description: `의사를 목표로 공부를 하다가, 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들`, + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, presenter: '서희찬', role: 'Lead', - profile_image_url: SeoHuiChan.src, + image_url: SeminarThumbnailCardImg.src, }, { id: 4, @@ -54,11 +66,17 @@ export const SEMINAR_DATA: SeminarThumnail[] = [ topic: 'DevTalk', date: '2023.09.22 (FRI) 19:30', location: '동국대학교 원흥관 PBL', - title: '휴, 하마터면\n의사 될 뻔...', - description: `의사를 목표로 공부를 하다가, 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들`, + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, presenter: '서희찬', role: 'Lead', - profile_image_url: SeoHuiChan.src, + image_url: SeminarThumbnailCardImg.src, }, { id: 5, @@ -67,11 +85,17 @@ export const SEMINAR_DATA: SeminarThumnail[] = [ topic: 'DevTalk', date: '2023.09.22 (FRI) 19:30', location: '동국대학교 원흥관 PBL', - title: '휴, 하마터면\n의사 될 뻔...', - description: `의사를 목표로 공부를 하다가, 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들`, + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, presenter: '서희찬', role: 'Lead', - profile_image_url: SeoHuiChan.src, + image_url: SeminarThumbnailCardImg.src, }, { id: 6, @@ -80,11 +104,17 @@ export const SEMINAR_DATA: SeminarThumnail[] = [ topic: 'DevTalk', date: '2023.09.22 (FRI) 19:30', location: '동국대학교 원흥관 PBL', - title: '휴, 하마터면\n의사 될 뻔...', - description: `의사를 목표로 공부를 하다가, 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들`, + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, presenter: '서희찬', role: 'Lead', - profile_image_url: SeoHuiChan.src, + image_url: SeminarThumbnailCardImg.src, }, { id: 7, @@ -93,11 +123,17 @@ export const SEMINAR_DATA: SeminarThumnail[] = [ topic: 'DevTalk', date: '2023.09.22 (FRI) 19:30', location: '동국대학교 원흥관 PBL', - title: '휴, 하마터면\n의사 될 뻔...', - description: `의사를 목표로 공부를 하다가, 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들`, + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, presenter: '서희찬', role: 'Lead', - profile_image_url: SeoHuiChan.src, + image_url: SeminarThumbnailCardImg.src, }, { id: 8, @@ -106,11 +142,17 @@ export const SEMINAR_DATA: SeminarThumnail[] = [ topic: 'DevTalk', date: '2023.09.22 (FRI) 19:30', location: '동국대학교 원흥관 PBL', - title: '휴, 하마터면\n의사 될 뻔...', - description: `의사를 목표로 공부를 하다가, 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들`, + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, presenter: '서희찬', role: 'Lead', - profile_image_url: SeoHuiChan.src, + image_url: SeminarThumbnailCardImg.src, }, { id: 9, @@ -119,11 +161,17 @@ export const SEMINAR_DATA: SeminarThumnail[] = [ topic: 'DevTalk', date: '2023.09.22 (FRI) 19:30', location: '동국대학교 원흥관 PBL', - title: '휴, 하마터면\n의사 될 뻔...', - description: `의사를 목표로 공부를 하다가, 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들`, + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, presenter: '서희찬', role: 'Lead', - profile_image_url: SeoHuiChan.src, + image_url: SeminarThumbnailCardImg.src, }, { id: 10, @@ -132,11 +180,17 @@ export const SEMINAR_DATA: SeminarThumnail[] = [ topic: 'DevTalk', date: '2023.09.22 (FRI) 19:30', location: '동국대학교 원흥관 PBL', - title: '휴, 하마터면\n의사 될 뻔...', - description: `의사를 목표로 공부를 하다가, 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들`, + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, presenter: '서희찬', role: 'Lead', - profile_image_url: SeoHuiChan.src, + image_url: SeminarThumbnailCardImg.src, }, { id: 11, @@ -145,11 +199,17 @@ export const SEMINAR_DATA: SeminarThumnail[] = [ topic: 'DevTalk', date: '2023.09.22 (FRI) 19:30', location: '동국대학교 원흥관 PBL', - title: '휴, 하마터면\n의사 될 뻔...', - description: `의사를 목표로 공부를 하다가, 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들`, + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, presenter: '서희찬', role: 'Lead', - profile_image_url: SeoHuiChan.src, + image_url: SeminarThumbnailCardImg.src, }, { id: 12, @@ -158,11 +218,17 @@ export const SEMINAR_DATA: SeminarThumnail[] = [ topic: 'DevTalk', date: '2023.09.22 (FRI) 19:30', location: '동국대학교 원흥관 PBL', - title: '휴, 하마터면\n의사 될 뻔...', - description: `의사를 목표로 공부를 하다가, 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들`, + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, presenter: '서희찬', role: 'Lead', - profile_image_url: SeoHuiChan.src, + image_url: SeminarThumbnailCardImg.src, }, { id: 13, @@ -171,11 +237,17 @@ export const SEMINAR_DATA: SeminarThumnail[] = [ topic: 'DevTalk', date: '2023.09.22 (FRI) 19:30', location: '동국대학교 원흥관 PBL', - title: '휴, 하마터면\n의사 될 뻔...', - description: `의사를 목표로 공부를 하다가, 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들`, + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, presenter: '서희찬', role: 'Lead', - profile_image_url: SeoHuiChan.src, + image_url: SeminarThumbnailCardImg.src, }, { id: 14, @@ -184,10 +256,187 @@ export const SEMINAR_DATA: SeminarThumnail[] = [ topic: 'DevTalk', date: '2023.09.22 (FRI) 19:30', location: '동국대학교 원흥관 PBL', - title: '휴, 하마터면\n의사 될 뻔...', - description: `의사를 목표로 공부를 하다가, 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들`, + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, + presenter: '서희찬', + role: 'Lead', + image_url: SeminarThumbnailCardImg.src, + }, + { + id: 15, + flag: 1, + type: 'Camping Seminar', + topic: 'DevTalk', + date: '2023.09.22 (FRI) 19:30', + location: '동국대학교 원흥관 PBL', + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, + presenter: '서희찬', + role: 'Lead', + image_url: SeminarThumbnailCardImg.src, + }, + { + id: 16, + flag: 1, + type: 'Camping Seminar', + topic: 'DevTalk', + date: '2023.09.22 (FRI) 19:30', + location: '동국대학교 원흥관 PBL', + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, + presenter: '서희찬', + role: 'Lead', + image_url: SeminarThumbnailCardImg.src, + }, + { + id: 17, + flag: 1, + type: 'Camping Seminar', + topic: 'DevTalk', + date: '2023.09.22 (FRI) 19:30', + location: '동국대학교 원흥관 PBL', + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, + presenter: '서희찬', + role: 'Lead', + image_url: SeminarThumbnailCardImg.src, + }, + { + id: 18, + flag: 1, + type: 'Camping Seminar', + topic: 'DevTalk', + date: '2023.09.22 (FRI) 19:30', + location: '동국대학교 원흥관 PBL', + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, + presenter: '서희찬', + role: 'Lead', + image_url: SeminarThumbnailCardImg.src, + }, + { + id: 19, + flag: 1, + type: 'Camping Seminar', + topic: 'DevTalk', + date: '2023.09.22 (FRI) 19:30', + location: '동국대학교 원흥관 PBL', + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, + presenter: '서희찬', + role: 'Lead', + image_url: SeminarThumbnailCardImg.src, + }, + { + id: 20, + flag: 1, + type: 'Camping Seminar', + topic: 'DevTalk', + date: '2023.09.22 (FRI) 19:30', + location: '동국대학교 원흥관 PBL', + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, + presenter: '서희찬', + role: 'Lead', + image_url: SeminarThumbnailCardImg.src, + }, + { + id: 21, + flag: 1, + type: 'Camping Seminar', + topic: 'DevTalk', + date: '2023.09.22 (FRI) 19:30', + location: '동국대학교 원흥관 PBL', + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, + presenter: '서희찬', + role: 'Lead', + image_url: SeminarThumbnailCardImg.src, + }, + { + id: 22, + flag: 1, + type: 'Camping Seminar', + topic: 'DevTalk', + date: '2023.09.22 (FRI) 19:30', + location: '동국대학교 원흥관 PBL', + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, + presenter: '서희찬', + role: 'Lead', + image_url: SeminarThumbnailCardImg.src, + }, + { + id: 23, + flag: 1, + type: 'Camping Seminar', + topic: 'DevTalk', + date: '2023.09.22 (FRI) 19:30', + location: '동국대학교 원흥관 PBL', + title: ` + 휴, 하마터면 + 의사 될 뻔... + `, + description: ` + 의사를 목표로 공부를 하다가, + 프로그래밍을 시작한 과정들을 토대로 개발 공부를 하며 깨달은 것들 + `, presenter: '서희찬', role: 'Lead', - profile_image_url: SeoHuiChan.src, + image_url: SeminarThumbnailCardImg.src, }, ] \ No newline at end of file diff --git a/src/hooks/seminar/changePathtoNumber.tsx b/src/hooks/seminar/changePathtoNumber.tsx new file mode 100644 index 0000000..bf66254 --- /dev/null +++ b/src/hooks/seminar/changePathtoNumber.tsx @@ -0,0 +1,13 @@ +export const changePathtoNumber = (pathname:string) => { + const match = pathname.match(/\/seminar\/(\d+)/); + const seminar_id = match ? parseInt(match[1], 10) : null; + + return seminar_id; +} + +export const changeOpenPathtoNumber = (pathname:string) => { + const match = pathname.match(/\/seminar\/open\/(\d+)/); + const seminar_id = match ? parseInt(match[1], 10) : null; + + return seminar_id; +} \ No newline at end of file diff --git a/src/interfaces/seminar/openSeminar.ts b/src/interfaces/seminar/openSeminar.ts index e619caa..f401f43 100644 --- a/src/interfaces/seminar/openSeminar.ts +++ b/src/interfaces/seminar/openSeminar.ts @@ -2,15 +2,21 @@ export interface OpenSeminar { id: number; flag: number; type: string; - topic: string; - opening_date: string; - seminar_date: string; + seminar_opening_date: string; + seminar_month_date: string; location: string; - title: string; description: string; - presenter: string; - role: string; - profile_image_url: string; + information: string; + image_url: string; status: boolean; + seminars: OpenDetailSeminar[]; +} + +export interface OpenDetailSeminar { + id: number; + presenter: string; + seminar_title: string; + presenter_role: string; + presenter_image_url: string; } \ No newline at end of file diff --git a/src/interfaces/seminar/seminarThumbnail.ts b/src/interfaces/seminar/seminarThumbnail.ts index 7160158..21fc2e5 100644 --- a/src/interfaces/seminar/seminarThumbnail.ts +++ b/src/interfaces/seminar/seminarThumbnail.ts @@ -9,6 +9,6 @@ export interface SeminarThumnail { description: string; presenter: string; role: string; - profile_image_url: string; + image_url: string; } \ No newline at end of file