Skip to content

Commit

Permalink
PR 다 된 것 main에 옮기기 (#139)
Browse files Browse the repository at this point in the history
* [FEAT] 관리자 사이드바 추가 (#30)

* feat(components): 사이드바 컴포넌트 추가

* feat(pages): 관리자페이지 레이아웃 적용

* fix(components): 관리자 사이드바 메뉴 수정 및 분리

* fix(components): 관리자 사이드바 분리 및 스토리북 추가

* fix: fix href

* [FEAT] #44 Project page all set

* [FEAT] #44 Project page 모듈화 n 최적화

* [FEAT] #44 arrange n name trivial change

* [FIX] #61 color theme corrected

* fix: merge conflict 해결

* [FEAT] 사용자/관리자 페이지 레이아웃 추가 (#62)

* fix: 관리자 레이아웃 폴더 이동

* feat: 유저 페이지 레이아웃 추가

* fix: 관리자 페이지 사이드바 메뉴 수정

* feat: 관리자 경로에 따른 페이지 추가

* feat: 사용자 경로에 따른 페이지 추가

* fix: 사용자 페이지 레이아웃 content 최소 높이 지정

* fix: 컴포넌트명 수정 및 라우팅 경로 수정

* [FEAT] #64 sub-heading navigation bar

* [FEAT] sub-heading navigation bar

* nav이용 화면

* export sharing types n navlist

* link types n constants exported

* [FIX] #44 페이지네이션 수정

* [FIX] #44 공지사항 전체보기 수정

* [FEAT] #44 공지사항 페이지

* 잡페어 틀 잡음

* [FEAT] #44 wrap NoticesPage Suspense

* [FEAT] 관리자 사이드바 추가

* [FEAT] 사용자/관리자 페이지 레이아웃 추가

* [FIX] 색상 오류 수정

* [FEAT] sub-heading navigation bar

* [FEAT] sub-heading navigation bar

* [FIX] 공지사항 전체보기, 페이지네이션 수정

* [FEAT] #44 공지사항 세부 페이지

* feat: 관리자 메인페이지 제작

* NoticeDetail types modularization

* feat: 갤러리, 잡페어 관리 경로 수정 및 구조 제작

* feat: 통계 경로

* [FEAT] Board 페이지 컴포넌트 n 스타일시트 모듈화

* [FEAT] wrapped with suspense n utils into ts

* [FEAT] 이벤트 공지사항 페이지

* [FIX] 배너 오류 수정

* 선배님들의 조언 페이지 완성

* 잡페어 - 조언페이지 완성

* 잡페어 선배님들의조언 만드는중

* [FEAT] 로그인 페이지 구현 및 로그인 박스 수정

* [FIX] 검색 입력

* [FIX] UserBoard Noticeboard에서 페이지네이션 분리

* feat: primary button에서 classname 받아올 수 있도록 수정

* [FEAT] 아래 버튼 선택 추가 기능

* fix: primary button에서 label 대신 children을 받아오도록 수정

* feat: 프로젝트 상세페이지 추가

* fix: 버튼 컴포넌트 사용성 개선

* feat: primary button에 onclick 테스트 추가

* feat: 포스터 section 추가, 댓글 section 추가, onclick 핸들러 설정

* [FEAT] 회원가입 페이지

* chore: dependency 설치 오류 수정

* feat: 관리자페이지 갤러리 관리 미리보기

* feat: 갤러리 미리보기 반응형

* [FEAT] 로그인, 로그아웃 모듈 추가 (#58)

* chore: axios, js-cookie dependency 추가

* feat: CommonAxios 모듈 추가

* feat: fetcher 모듈 추가

* feat: Auth Context Provider 및 server컴포넌트에서 토큰 사용 모듈 추가

* feat: 카카오 로그인 redirect 인증 페이지 추가

* fix: prerender error 수정

* chore: lint 경고 수정

* fix: getServerSideToken refresh 토큰도 가져올 수 있도록 수정

* fix: fetcher 배럴익스포트 추가

* Update AuthProvider.tsx

* chore: add jwt-decode dependency

* feat: add user role and jwt payload type

* fix: fix auth module

* [FIX] #61 color theme corrected

(cherry picked from commit 3a76744)

* temporary commit - correct needed

* resolving conflict with develop

* [FIX] 비디오카드 수정

* [FEAT] AI Hub 페이지 (datasets and models)

* [FIX] App Theme 색상 수정 (#75)

* fix(theme): AppTheme input 색상 추가

* fix(component): Dropdown 색상 수정

* [FEAT] swr 추가 (#79)

* chore: add swr dependency

* feat: add swr provider

* fix: move kakao auth page (#80)

* [FEAT] 관리자페이지용 공통 컴포넌트 추가 (#81)

* feat: PageHeader 컴포넌트 추가

* feat: Section 컴포넌트 추가

* feat: Row 컴포넌트 추가

* Update PageHeader.story.tsx

* Update Section.module.css

* [FEAT] 로그인, 로그아웃 모듈 추가 (#58)

* chore: axios, js-cookie dependency 추가

* feat: CommonAxios 모듈 추가

* feat: fetcher 모듈 추가

* feat: Auth Context Provider 및 server컴포넌트에서 토큰 사용 모듈 추가

* feat: 카카오 로그인 redirect 인증 페이지 추가

* fix: prerender error 수정

* chore: lint 경고 수정

* fix: getServerSideToken refresh 토큰도 가져올 수 있도록 수정

* fix: fetcher 배럴익스포트 추가

* Update AuthProvider.tsx

* chore: add jwt-decode dependency

* feat: add user role and jwt payload type

* fix: fix auth module

* feat: 통계 페이지

* fix: gallery preview 컴포넌트에서 아이콘 및 카드 스타일 수정

* [FEAT] 산학협력 프로젝트 문의 페이지

* 잡페어 페이지 3개 기초작업 완료

* [FEAT] 대담영상 페이지 및 비디오카드 퀴즈 모달

* feat: 수상 결과 페이지 추가

* feat: 마이페이지에서 회원정보 section 추가

* appTheme 변경 색상 적용 및 handler 추가

* stop 설명 페이지

* [FEAT] 관리자페이지용 공통 컴포넌트 추가 (#81)

* feat: PageHeader 컴포넌트 추가

* feat: Section 컴포넌트 추가

* feat: Row 컴포넌트 추가

* Update PageHeader.story.tsx

* Update Section.module.css

* feat: 회원정보 수정 모달 추가

* feat: 관심 프로젝트, 대담영상 부분 추가

* feat: 관심 등록 잡페어 영상 부분 추가

* [FIX] state 대신 onChange만 받기로 변경

* [FIX] 텍스트 입력 수정

* [Feat] 관리자 공지사항 목록조회 페이지 추가 (#86)

* feat: 정렬 문자열 함수 추가

* fix: 테이블 테마 색상 수정

* fix: 테이블 페이지네이션 및 체크박스 추가

* feat: 페이지네이션 api 타입 및 notice api 타입 추가

* fix: 페이지네이션 상수 및 공지사항 게시판 테이블 상수 추가

* feat: useNotices swr 훅 추가

* feat: 검색창 이벤트핸들러 유틸함수 추가

* feat: 정렬 쿼리파라미터 문자열 생성 유틸함수 추가

* fix: 페이지 리프레시 상수 추가

* fix: 공지사항 테이블 헤더 selector 수정

* fix(component): searchInput, textInput 컴포넌트 onChange props 추가

* feat: (관리자) 공지사항 목록조회 페이지 추가

* Cherry-pick Button Component

* fix: 콘솔 로그 삭제 및 주석 수정

---------

Co-authored-by: sera2002 <[email protected]>

* feat: 통계 컴포넌트 수정

* [FIX] TextInput과 VRLink 각각 스타일 수정

TextInput Wrapper 스타일 지정 가능하도록 수정

VRLink max-height 스타일 삭제

* [FIX] 비디오카드 수정 #77

* feat: 메인, 이벤트 기간 설정

* [FEAT] 로그인페이지 수정 #67

* [FEAT] 레지스터 페이지 수정 #72

* feat: 잡페어 영상 등록,수정 갤러리 사진 등록, 수정

* feat: 경로 에러 해결

* feat: useclient 관련 빌드 에러 해결

* [FEAT] 공지사항 등록 및 수정 페이지 추가 (#88)

* chore: add mantine/form dependency

* fix: section 컴포넌트 색상 수정

* feat: unique(보장 안될수도 있음) id 생성 유틸함수 추가

* fix: 공지사항 목록 제목에 상단고정 표시 및 수정버튼 클릭시 수정페이지 이동

* feat: api 파일 타입 추가

* feat: use files 커스텀훅 추가

* feat: 공지사항 등록 및 수정 폼 컴포넌트 추가

* feat: 공지사항 수정 페이지 추가

* feat: 공지사항 등록 페이지 추가

* fix: fix useEffect rendering error

* [FEAT] Ai Hub 및 카드 컴포넌트 수정 #78

* [FEAT] 공통 유틸함수 수정 및 추가 (#93)

* feat: serverside fetcher 추가 (사용법 pr 참고)

* feat: 파일 다운로드 유틸함수 추가

* feat: 갤러리

* feat: use client

* [FEAT] 공통 유틸함수 수정 및 추가 (#93)

* feat: serverside fetcher 추가 (사용법 pr 참고)

* feat: 파일 다운로드 유틸함수 추가

* 수정사항 반영 - videoCard, Dropdown

* 수정사항 반영(2) - videoCard, Dropdown

* fix: 잡페어 배너에 추가 (#94)

* [FEAT] 이벤트 공지사항 목록조회 / 수정 / 등록 페이지 추가 (#95)

* fix: event notice 라우팅 경로 수정

* fix: useNotices, NoticeListSection event props 추가

* feat: (관리자) 이벤트 공지사항 목록조회 페이지 추가

* feat: (관리자) 이벤트 공지사항 등록 및 수정 초안 작성

* feat: 파일 다운로드 유틸함수 추가

* chore: mantine carousel dependency 추가

* feat: 이벤트 공지사항 이미지 미리보기 추가

* fix: useFiles 훅 file id 버그 수정

* feat: 이벤트 공지사항 수정 및 등록 페이지 추가

* fix: 이벤트공지사항 페이지 헤더 수정

* [FEAT] 가입 승인 페이지 추가 (#96)

* feat: application(가입 신청) 타입 추가

* fix: notice paged 타입 수정

* feat: useApplication swr 훅 추가

* feat: 가입신청관리 페이지 초안 작성

* feat: serverside fetcher 추가 (사용법 pr 참고)

* fix: fix typo

* feat: 가입 승인 페이지 추가

* fix: 정렬 기능 추가

* fix: 메인페이지 롤백

* [FEAT] 로그인 백엔드 연결, API KEY 수정 필요

* [FEAT] 로그인 페이지 구현 완료

* [FIX] Dropdown 오른쪽 화살표 색상 적용

* [FIX] 프로젝트 조회 페이지 코드 수정

- @/components/pages/Project/ 삭제 및 @/app으로 이전

- ProjectCard 스타일시트 수정

- BannerList에 잡페어(Job Fair) 추가

- TextMapping Record 추가

- useProjects custom SWR Hook 추가 및 Project 타입 정의

- @/components/pages/Main/ 삭제

* feat: 파일업로드 부분

* feat: err

* conflict resolve + other errors solved

* feat: gallery page api

* fix: ProjectCard 컴포넌트 onClick 핸들러 props 추가

* Cherry pick f19cebb

* fix: ProjectCard thumbnailUrl 예외처리

* feat: jobfair

* fix: 프로젝트카드 말줄임표 수정

* register backend connet - refresh token error occurs?

* feat: interview

* fix: 파일 업로드 api 수정

* feat: interview quiz and answer. TODO: 라디오 버튼 안눌림

* [FEAT] connect with backend for Main n Project page

* 로컬 변경 사항 커밋

* 잡페어 db연결

* 드롭다운, 필터칩 적용

* feat: dropdown 속성에 fullWidth 추가

* fix: 마이페이지 정보수정 모달 스타일 수정

* feat: 나의 과제 제안, 프로젝트 문의 테이블 추가

* chore: 내 프로젝트 문의 table 임시데이터 수정

* register done

* 체크박스, 검색입력 컴포넌트 props 추가

* feat: 체크박스 컴포넌트에 콜백함수 추가, 댓글 컴포넌트에 익명 선택 체크박스 추가

* Update package.json

* feat: 프로젝트 상세조회 api 연결

* Update package-lock.json

* fix: 프로젝트 문의하기 클릭시 프로젝트 문의 작성 페이지로 넘어가도록 수정

* ai=hub 노션 연결

* feat: submit 에러 수정

* feat: eventperiod

* fix: 파일 업로드 api 수정 (#102)

* [FEAT] 관리자 프로젝트 조회 / 수정 / 등록 페이지 추가 (#104)

* feat: useProjects 추가

* feat: 관리자 project 페이지 초안 작성

* feat: getYears 함수 추가

* feat: 프로젝트 종류, 타입 lookup테이블 추가

* fix: 프로젝트 등록 섹션 초안 수정

* Cherry pick 45ab8e6

* fix: 프로젝트 반환 타입에 년도 추가

* feat: 프로젝트 목록조회 페이지 완성

* fix: textInput 컴포넌트 initialValue prop 추가

* feat: 프로젝트 수정 페이지 추가

* fix: 프로젝트 생성 및 수정 수상내역 추가

* [FEAT] 관리자 페이지 API 개발 (#111)

* feat: 갤러리

* feat: use client

* [FEAT] 공통 유틸함수 수정 및 추가 (#93)

* feat: serverside fetcher 추가 (사용법 pr 참고)

* feat: 파일 다운로드 유틸함수 추가

* feat: 파일업로드 부분

* feat: err

* feat: gallery page api

* feat: jobfair

* feat: interview

* fix: 파일 업로드 api 수정

* feat: interview quiz and answer. TODO: 라디오 버튼 안눌림

* feat: submit 에러 수정

---------

Co-authored-by: 김현석 <[email protected]>

* feat: 관리자 퀴즈 결과 목록 페이지 추가 (#109)

* [FEAT] 프로젝트 문의 페이지 추가 (#110)

* feat: 프로젝트 문의 페이지 초안 작성

* fix: inquiry 타입 추가

* feat: TitleRow 컴포넌트 추가

* feat: 프로젝트 문의 api 연결

* [FIX] 공지사항 컴포넌트 및 페이지 수정

1. Noticeboard
  - 백엔드 데이터와 동일하게 수정
  - 페이지네이션 분리
  - Page에서 검색 및 필터링 할 수 있게 변경

2. NoticeDetail
  - 백엔드 데이터와 동일하게 수정
  - 버튼 링크 연결
  - 파일 다운로드 가능하게 수정

3. Userboard
  - 삭제

4. 공지사항 페이지 & 상세
  - 백엔드 연결

5. 이벤트 공지사항 페이지 & 상세
  - 백엔드 연결

* Return inquiries/page.tsx

* fix: 하단 버튼 클릭시에도 프로젝트 문의 작성 페이지로 이동하도록 수정

* fix: 하단 버튼 문구 수정

* fix: 프로젝트카드 클릭 핸들러 추가 (#113)

* [FIX] noticeboard 수정
- 게시물이 없을 때 공통 안내 표지로 변경
- dropdown 색상 설정 정정

* [FEAT] Main과 Project 페이지 완성
- Component 수정
  1. Banner
    - overlap된 텍스트에 설정된 padding 50px 수정
  2. GalleryPreview
    - 스타일(width, height) 수정
  3. Header
    - navigation 모두 적용
    - topnav 로그인 이전과 이후 dynamic 바뀌도록 기능 추가
  4. ProjectCard
    - 북마크, 좋아요 눌렀을 떄 페이지에서 전달하는 함수 받는 props 추가
  5. VideoCard
    - 북마크 눌렀을 떄 페이지에서 전달하는 함수 받는 props 추가
  6. SubHeadNavbar
    - 스타일 수정

* correct interface

* [feat] 프로젝트 문의사항, 대담영상 인터뷰

* push build error resolve?

* build error...

* build error resolved for real

* feat: 작품 수상 결과 api 연결

* feat: 마이페이지 API 연결

* fix: 유저 과제제안 및 문의 리스트 조회 코드 추가

* packege fix

* jobfair 완료

* 갤러리 목록 조회, 갤러리 조회 페이지 추가

* jobfair 완성git add .

* jobfair dev conflict resolved

* [feat] notion backend for real

* fix: package update

* feat: add ga, thrid-parties library (#122)

* hotfix: resolve build error (#126)

* Update CI.yml

* [FIX] sync with backend and handling exception
1. 공지사항 백엔드 포멧 동일하게 수정
  - S-top-backend #122 이슈 참고

2. 프로젝트 카드 예외 처리
  - 로그인 아닌 경우 좋아요/북마크 클릭 시 alert

* [FIX] 어드민페이지 오류 수정 / 프로젝트 일괄등록 추가 (#115)

* fix: 공지사항 수정 input사이즈 적용

* fix: 검색시 페이지 1로 설정

* fix: 파일 업로드 로직 수정

* feat: 과제 제안 데모 페이지 추가

* feat: 일괄 등록 구현

* [FEAT] 페이지 접근 인증 모듈 추가 (#123)

* feat: add auth module

* feat: add auth module to admin layout

* final commit for merging

* 과제제안 페이지 완료!

* 과제제안 페이지 완료2!

* fix: 높이 너비 단위 px로 수정

* fix: 유저 정보 row firstcol 너비를 px 단위로 변경

* fix: mypage에서 row firstCol 너비 단위를 px로 변경

* stopExp 포스터

* PR 전체 병합 업로드

---------

Co-authored-by: 김현석 <[email protected]>
Co-authored-by: chunzhi23 <[email protected]>
Co-authored-by: sera2002 <[email protected]>
Co-authored-by: Sera Choi <[email protected]>
Co-authored-by: obinox <[email protected]>
Co-authored-by: Joo Won <[email protected]>
Co-authored-by: obinox <[email protected]>
Co-authored-by: moony1204 <[email protected]>
Co-authored-by: DongJu Kim <[email protected]>
  • Loading branch information
10 people authored Jan 22, 2025
1 parent 461e98f commit b4790a5
Show file tree
Hide file tree
Showing 92 changed files with 3,945 additions and 634 deletions.
404 changes: 230 additions & 174 deletions package-lock.json

Large diffs are not rendered by default.

4 changes: 1 addition & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,12 @@
"chromatic": "npx chromatic --project-token=chpt_4df1876da1b9766"
},
"dependencies": {
"@mantine/carousel": "^7.12.2",
"@mantine/core": "^7.11.2",
"@mantine/dates": "^7.12.2",
"@mantine/form": "^7.12.1",
"@mantine/hooks": "^7.11.2",
"@mantine/styles": "^6.0.22",
"@tabler/icons-react": "^3.28.1",
"@next/third-parties": "^15.1.4",
"@tabler/icons-react": "^3.11.0",
"@types/js-cookie": "^3.0.6",
"axios": "^1.7.3",
"classnames": "^2.5.1",
Expand Down
Binary file modified public/images/ind-univ-project.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/stop_info.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
56 changes: 2 additions & 54 deletions src/app/(admin)/admin/event-period/page.tsx
Original file line number Diff line number Diff line change
@@ -1,65 +1,13 @@
"use client";

import { PrimaryButton } from "@/components/common/Buttons";
import { Dropdown } from "@/components/common/Dropdown/Dropdown";
import { PageHeader } from "@/components/common/PageHeader";
import { EventPeriodForm } from "@/components/pages/EventPeriodForm";

export default function AdminEventPeriodPage() {
return (
<>
<PageHeader title="이벤트 기간 설정" />
<div
// style={{
// width: "100%",
// height: "auto",
// position: "relative",
// background: "gray",
// borderRadius: 12,
// }}
>
<div style={{ paddingLeft: 30 }}>
<h2 style={{ paddingTop: 30 }}>현재 이벤트 기간 </h2>
<h3>{"2024.02.03. 09:00 부터 2024.02.10. 12:00 까지"} </h3>
<div style={{ padding: 40 }}></div>
<div style={{ paddingTop: 20 }}>
<h2 style={{}}>이벤트 시작 일시</h2>
<Dropdown
options={["1", "2", "3"]}
placeholder={"선택하세요"}
onOptionClick={function (): void {
throw new Error("Function not implemented.");
}}
></Dropdown>
<Dropdown
options={["1", "2", "3"]}
placeholder={"선택하세요"}
onOptionClick={function (): void {
throw new Error("Function not implemented.");
}}
></Dropdown>
</div>
<div style={{ paddingTop: 20 }}>
<h2 style={{}}>이벤트 종료 일시 </h2>
<Dropdown
options={["1", "2", "3"]}
placeholder={"선택하세요"}
onOptionClick={function (): void {
throw new Error("Function not implemented.");
}}
></Dropdown>
<Dropdown
options={["1", "2", "3"]}
placeholder={"선택하세요"}
onOptionClick={function (): void {
throw new Error("Function not implemented.");
}}
></Dropdown>
</div>
<div style={{ paddingTop: 20, paddingBottom: 30 }}>
<PrimaryButton>변경하기</PrimaryButton>
</div>
</div>
</div>
<EventPeriodForm />
</>
);
}
11 changes: 11 additions & 0 deletions src/app/(admin)/admin/projects/proposals/[id]/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { PageHeader } from "@/components/common/PageHeader";
import { AdminInquiriesEditForm } from "@/components/pages/AdminInquiriesEditForm/AdminInquiriesEditForm";

export default function AdminInquiriesPage({ params }: { params: { id: string } }) {
return (
<main>
<PageHeader title={"과제 제안 답변"} />
<AdminInquiriesEditForm id={params.id} />
</main>
);
}
10 changes: 9 additions & 1 deletion src/app/(admin)/admin/projects/proposals/page.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
import { PageHeader } from "@/components/common/PageHeader";
import AdminProposalsListSection from "@/components/pages/AdminProposalsListSection/AdminProposalsListSection";

export default function AdminProposalsPage() {
return <main>Hello, world!</main>;
return (
<main>
<PageHeader title={"과제 제안 게시판 관리"} />
<AdminProposalsListSection />
</main>
);
}
5 changes: 4 additions & 1 deletion src/app/(admin)/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
import { Metadata } from "next";
import classes from "./layout.module.css";
import { AdminSidebar } from "@/components/pages/AdminSidebar";
import { AuthModule } from "@/components/common/Auth/AuthModule";

export const metadata: Metadata = {
title: "S-TOP 기술교류회 관리자",
description: "S-TOP 기술교류회 관리자",
};

export default function AdminLayout({ children }: { children: React.ReactNode }) {
export default async function AdminLayout({ children }: { children: React.ReactNode }) {
await AuthModule({ userType: ["ADMIN"] });

return (
<section className={classes.container}>
<AdminSidebar />
Expand Down
126 changes: 86 additions & 40 deletions src/app/(user)/aihub/datasets/page.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"use client";

import React, { useState } from "react";
import React, { useState, useEffect } from "react";
import { SubHeadNavbar } from "@/components/common/SubHeadNavbar/SubHeadNavbar";
import { Banner } from "@/components/common/Banner/Banner";
import { SearchInput } from "@/components/common/SearchInput";
Expand All @@ -9,20 +9,86 @@ import { FilterChip } from "@/components/common/FilterChips/FilterChip";
import { AihubCard } from "@/components/common/Cards/Aihub/Aihub";

import classes from "./AIHub.module.css";
import { CommonAxios } from "@/utils/CommonAxios";

const YEARS = ["2020", "2021", "2022", "2023", "2024"];
const TYPES = ["tag1", "tag2", "tag3", "tag4", "tag5"];
const SIZE = ["필터1", "필터2", "필터3", "필터4", "필터5"];

export default function DatasetsPage() {
const [selectedOptions, setSelectedOptions] = useState<string[]>([]);
const [selectedYearOptions, setSelectedYearOptions] = useState<string[]>([]);
const [selectedTopicOptions, setSelectedTopicOptions] = useState<string[]>([]);
const [datasets, setDatasets] = useState<any[]>([]);
const [searchQuery, setSearchQuery] = useState("");

const handleOptionSelect = (option: string) => {
if (!selectedOptions.includes(option)) {
setSelectedOptions((prev) => [...prev, option]);
}
};

const handleYearOptionSelect = (option: string) => {
if (!selectedYearOptions.includes(option)) {
setSelectedYearOptions((prev) => [...prev, option]);
}
};

const handleTopicOptionSelect = (option: string) => {
if (!selectedTopicOptions.includes(option)) {
setSelectedTopicOptions((prev) => [...prev, option]);
}
};

const handleRemoveChip = (option: string) => {
setSelectedOptions((prev) => prev.filter((item) => item !== option));
setSelectedYearOptions((prev) => prev.filter((item) => item !== option));
setSelectedTopicOptions((prev) => prev.filter((item) => item !== option));
};

const fetchData = async () => {
try {
const filters: Record<string, any> = {
title: searchQuery || null,
dataTypes: selectedOptions,
topics: selectedTopicOptions,
developmentYears: selectedYearOptions.map((year) => parseInt(year, 10)),
professor: null, // 추후 필요 시 추가
participants: null, // 추후 필요 시 추가
};

const response = await CommonAxios.post("/aihub/datasets", filters, {
headers: {
"Content-Type": "application/json;charset=UTF-8",
},
});

const transformedDatasets = response.data.content.map((data: any) => ({
id: data.id,
title: data.title,
participants: data.participants,
professor: data.professor,
dataTypes: data.dataTypes,
years: data.developmentYears,
categories: data.topics,
url: data.url,
}));
setDatasets(transformedDatasets);
} catch (error) {
console.error("Error fetching datasets:", error);
}
};

// Fetch all datasets on initial load
useEffect(() => {
fetchData();
}, []);

// Refetch datasets whenever filters or search query changes
useEffect(() => {
fetchData(); // Fetch with filters if any of them changes
}, [searchQuery, selectedYearOptions, selectedTopicOptions, selectedOptions]);

return (
<>
<div className={classes.subHeadNavbar}>
Expand All @@ -41,59 +107,39 @@ export default function DatasetsPage() {

<div className={classes.mainContent}>
<div className={classes.searchSection}>
<SearchInput placeholder="데이터셋 검색" />
<SearchInput
placeholder="데이터셋 검색"
value={searchQuery}
onChange={(e) => setSearchQuery(e.target.value)}
/>

<div className={classes.filters}>
<Dropdown options={YEARS} placeholder="연도" onOptionClick={handleYearOptionSelect} />
<Dropdown
options={["Option 1", "Option 2", "Option 3"]}
placeholder="연도"
onOptionClick={handleOptionSelect}
/>
<Dropdown
options={["Option 4", "Option 5", "Option 6"]}
options={TYPES}
placeholder="파일 타입"
onOptionClick={handleOptionSelect}
/>
<Dropdown
options={["Option 7", "Option 8", "Option 9"]}
placeholder="파일 사이즈"
onOptionClick={handleOptionSelect}
onOptionClick={handleTopicOptionSelect}
/>
<Dropdown options={SIZE} placeholder="파일 사이즈" onOptionClick={handleOptionSelect} />
</div>

<div className={classes.chips}>
{selectedOptions.map((option) => (
{[...selectedYearOptions, ...selectedTopicOptions, ...selectedOptions].map((option) => (
<FilterChip key={option} label={option} onRemove={() => handleRemoveChip(option)} />
))}
</div>
</div>

<div className={classes.gridContainer}>
<AihubCard
title="AI 모델 데이터셋 1"
people="개발자 A"
company="회사 A"
model="이미지 분류 모델"
/>
<AihubCard
title="AI 모델 데이터셋 2"
people="개발자 B"
company="회사 B"
model="텍스트 분석 모델"
/>
<AihubCard
title="AI 모델 데이터셋 2"
people="개발자 B"
company="회사 B"
model="텍스트 분석 모델"
/>
<AihubCard
title="AI 모델 데이터셋 2"
people="개발자 B"
company="회사 B"
model="텍스트 분석 모델"
/>
{/* Add more AihubCard components as needed */}
{datasets.map((dataset) => (
<AihubCard
key={dataset.id}
title={dataset.title}
people={dataset.professor}
company={dataset.participants.join(", ")}
model={dataset.dataTypes.join(", ")}
/>
))}
</div>
</div>
</>
Expand Down
Loading

0 comments on commit b4790a5

Please sign in to comment.