diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 238e23cda..6226badc5 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -4,6 +4,7 @@ on: push: branches: - main + - feat/mobileNav jobs: build: diff --git a/actions/admin.ts b/actions/admin.ts index bdf38fad8..44f07907a 100644 --- a/actions/admin.ts +++ b/actions/admin.ts @@ -14,7 +14,7 @@ import { import { ImportantPostIdentifier } from '@/types/admin'; -export const batchUnslideAction = async (ids: Set) => { +export const batchUnslideAction = async (ids: number[]) => { try { await patchMultipleSlides(Array.from(ids)); } catch (e) { diff --git a/apis/academics.ts b/apis/academics.ts index 600277fa7..bf3156cab 100644 --- a/apis/academics.ts +++ b/apis/academics.ts @@ -1,8 +1,13 @@ -import { getMockCourseChanges, getMockCourses } from '@/data/academics'; - import { Attachment } from '@/components/common/Attachments'; -import { Curriculum, Scholarship, ScholarshipList } from '@/types/academics'; +import { + Course, + CourseChange, + Curriculum, + DegreeRequirements, + Scholarship, + ScholarshipList, +} from '@/types/academics'; import { getRequest } from '.'; @@ -12,17 +17,20 @@ export const getAcademicsGuide = (type: 'undergraduate' | 'graduate') => attachments: Attachment[]; }>; -export const getCourses = getMockCourses; - -export const getEngCourses = getMockCourses; +export const getCourses = (type: 'undergraduate' | 'graduate') => + getRequest(`/academics/${type}/courses`) as Promise; export const getCurriculum = () => getRequest('/academics/undergraduate/curriculum') as Promise; -export const getCourseChanges = getMockCourseChanges; +export const getCourseChanges = (type: 'undergraduate' | 'graduate') => + getRequest(`/academics/${type}/curriculum`) as Promise; export const getScholarshipList = (type: string) => getRequest(`/academics/${type}/scholarship`); -export const getScholarship = (type: string, id: number) => - getRequest(`/academics/${type}/scholarship/${id}`); +export const getScholarship = (id: number) => + getRequest(`/academics/scholarship/${id}`); + +export const getDegreeRequirements = () => + getRequest(`/academics/undergraduate/degree-requirements`); diff --git a/apis/academicsServer.ts b/apis/academicsServer.ts index d56ff338d..da939761f 100644 --- a/apis/academicsServer.ts +++ b/apis/academicsServer.ts @@ -1,8 +1,5 @@ // TODO: 서버에서 제공되면 파일 삭제 -import { getMockDegreeRequirements } from '@/data/objects'; import { getMockGeneralStudiesRequirements } from '@/data/serverObjects'; -export const getDegreeRequirements = getMockDegreeRequirements; - export const getGeneralStudiesRequirements = getMockGeneralStudiesRequirements; diff --git a/apis/index.ts b/apis/index.ts index 7ce72ffc7..a6fa91d7d 100644 --- a/apis/index.ts +++ b/apis/index.ts @@ -46,7 +46,7 @@ const fetchWithRetry = async ( url: string, method: string, init?: CredentialRequestInit, - remain: number = 10, + remain: number = 5, ): Promise => { if (method !== 'GET') return _fetch(url, method, init); @@ -57,7 +57,7 @@ const fetchWithRetry = async ( if (remain === 0) throw e; console.error(`fetchWithRetry: ${e} ${url} ${method} ${init}`); - await delay(100 * 1.5 ** (10 - remain)); + await delay(100 * 1.5 ** (5 - remain)); return await fetchWithRetry(url, method, init, remain - 1); } }; diff --git a/apis/news.ts b/apis/news.ts index ef6382c65..00ddd54a7 100644 --- a/apis/news.ts +++ b/apis/news.ts @@ -12,10 +12,16 @@ const newsPath = '/news'; // GET export const getNewsPosts = (params: PostSearchQueryParams) => - getRequest(newsPath, params, { next: { tags: [FETCH_TAG_NEWS] } }) as Promise; + getRequest(newsPath, params, { + next: { tags: [FETCH_TAG_NEWS] }, + jsessionID: true, + }) as Promise; export const getNewsDetail = (id: number, params?: PostSearchQueryParams) => - getRequest(`${newsPath}/${id}`, params, { next: { tags: [FETCH_TAG_NEWS] } }) as Promise; + getRequest(`${newsPath}/${id}`, params, { + next: { tags: [FETCH_TAG_NEWS] }, + jsessionID: true, + }) as Promise; // POST diff --git a/apis/notice.ts b/apis/notice.ts index c9b82e4e4..7b94b0bd4 100644 --- a/apis/notice.ts +++ b/apis/notice.ts @@ -14,11 +14,13 @@ const noticePath = '/notice'; export const getNoticePosts = (params: PostSearchQueryParams) => getRequest(noticePath, params, { next: { tags: [FETCH_TAG_NOTICE] }, + jsessionID: true, }) as Promise; export const getNoticePostDetail = (id: number, params: PostSearchQueryParams) => getRequest(`${noticePath}/${id}`, params, { next: { tags: [FETCH_TAG_NOTICE] }, + jsessionID: true, }) as Promise; // POST diff --git a/apis/seminar.ts b/apis/seminar.ts index 616124e2d..9ee7654de 100644 --- a/apis/seminar.ts +++ b/apis/seminar.ts @@ -14,12 +14,14 @@ const seminarPath = '/seminar'; export const getSeminarPosts = async (params: PostSearchQueryParams) => { return getRequest(seminarPath, params, { next: { tags: [FETCH_TAG_SEMINAR] }, + jsessionID: true, }) as Promise; }; export const getSeminarPost = async (id: number, params: PostSearchQueryParams) => { return getRequest(`${seminarPath}/${id}`, params, { next: { tags: [FETCH_TAG_SEMINAR] }, + jsessionID: true, }) as Promise; }; diff --git a/app/.internal/layout.tsx b/app/.internal/layout.tsx index 5e0baeb8f..9469ebd84 100644 --- a/app/.internal/layout.tsx +++ b/app/.internal/layout.tsx @@ -9,7 +9,7 @@ export default async function RootLayout({ return ( {children} diff --git a/app/[locale]/MarginedMain.tsx b/app/[locale]/MarginedMain.tsx index 381b4b137..f4e4d775f 100644 --- a/app/[locale]/MarginedMain.tsx +++ b/app/[locale]/MarginedMain.tsx @@ -22,7 +22,7 @@ export default function MarginedMain({ children }: { children: ReactNode }) { } return ( -
+
{children}
); diff --git a/app/[locale]/about/greetings/page.tsx b/app/[locale]/about/greetings/page.tsx index eff89341d..aa0564868 100644 --- a/app/[locale]/about/greetings/page.tsx +++ b/app/[locale]/about/greetings/page.tsx @@ -18,7 +18,7 @@ export default async function GreetingsPage() {
{/* TODO: 레이아웃이 바뀌어 사진은 백엔드에서 가져오지 않는데 어떻게 처리할지 고민 필요 */} - 학부장 + 학부장
); diff --git a/app/[locale]/about/overview/page.tsx b/app/[locale]/about/overview/page.tsx index bdde9d65b..6679934b2 100644 --- a/app/[locale]/about/overview/page.tsx +++ b/app/[locale]/about/overview/page.tsx @@ -23,11 +23,12 @@ export default async function OverviewPage() { alt="학교 전경" width={320} height={213} + className="shrink-0 object-cover" />

학부 소개 책자

-
+
소개 책자 소개 책자
diff --git a/app/[locale]/academics/graduate/courses/page.tsx b/app/[locale]/academics/graduate/courses/page.tsx index 77f21b3aa..fdc0e56b0 100644 --- a/app/[locale]/academics/graduate/courses/page.tsx +++ b/app/[locale]/academics/graduate/courses/page.tsx @@ -13,7 +13,7 @@ export default async function GraduateCoursePage() { return ( {chunckedCourses.length > 0 && ( -
+
{chunckedCourses.map((courses, i) => ( ))} diff --git a/app/[locale]/academics/graduate/scholarship/[id]/page.tsx b/app/[locale]/academics/graduate/scholarship/[id]/page.tsx index 269bb2f3a..bea75b4cc 100644 --- a/app/[locale]/academics/graduate/scholarship/[id]/page.tsx +++ b/app/[locale]/academics/graduate/scholarship/[id]/page.tsx @@ -3,7 +3,7 @@ import { getScholarship } from '@/apis/academics'; import ScholarshipDetail from '../../../helper/ScholarshipDetail'; export default async function GraduateScholarshipPage({ params }: { params: { id: string } }) { - const scholarship = await getScholarship('graduate', parseInt(params.id)); + const scholarship = await getScholarship(parseInt(params.id)); return ; } diff --git a/app/[locale]/academics/helper/ScholarshipPreview.tsx b/app/[locale]/academics/helper/ScholarshipPreview.tsx index 27241489b..ef29c3c2a 100644 --- a/app/[locale]/academics/helper/ScholarshipPreview.tsx +++ b/app/[locale]/academics/helper/ScholarshipPreview.tsx @@ -27,7 +27,7 @@ export default async function ScholarshipPreview({

장학금 종류

-
    +
      {scholarshipList.map((item) => ( ))} @@ -53,7 +53,7 @@ export function ScholarshipRow({ id, name, type }: ScholarshipRowProps) { className="group flex items-center gap-2.5 px-3" >
      - + {name} diff --git a/app/[locale]/academics/helper/courses/CourseListRow.tsx b/app/[locale]/academics/helper/courses/CourseListRow.tsx index a701d4739..5204ec83c 100644 --- a/app/[locale]/academics/helper/courses/CourseListRow.tsx +++ b/app/[locale]/academics/helper/courses/CourseListRow.tsx @@ -7,10 +7,10 @@ import useModal from '@/utils/hooks/useModal'; import CourseDetailModal from './CourseDetailModal'; export const COURSE_ROW_ITEM_WIDTH = { - name: 'w-56', - classification: 'w-[6.75rem]', - code: 'w-[11.75rem]', - credit: 'w-[3.75rem]', + name: 'w-[16rem]', + classification: 'w-[10rem]', + code: 'w-[13rem]', + credit: 'w-[6rem]', grade: 'w-[5.25rem]', } as const; diff --git a/app/[locale]/academics/undergraduate/course-changes/page.tsx b/app/[locale]/academics/undergraduate/course-changes/page.tsx index f3b0e462f..72e93e4d6 100644 --- a/app/[locale]/academics/undergraduate/course-changes/page.tsx +++ b/app/[locale]/academics/undergraduate/course-changes/page.tsx @@ -16,7 +16,7 @@ const TIME_SPOTS: { year: number; margin?: string; isLast?: boolean }[] = [ ]; export default async function UndergraduateCourseChangesPage() { - const changes = await getCourseChanges('graduate'); + const changes = await getCourseChanges('undergraduate'); return ; } diff --git a/app/[locale]/academics/undergraduate/courses/CoursePageContent.tsx b/app/[locale]/academics/undergraduate/courses/CoursePageContent.tsx index 01d04eaaf..fb8d29ce9 100644 --- a/app/[locale]/academics/undergraduate/courses/CoursePageContent.tsx +++ b/app/[locale]/academics/undergraduate/courses/CoursePageContent.tsx @@ -33,7 +33,7 @@ export default function CoursePageContent({ courses }: CoursePageContentProps) { } return ( -
      +

      교과목 정보

      - +

      공통: 졸업사정 유의사항

      @@ -20,6 +20,3 @@ export default async function UndergraduteDegreeRequirementsPage() { ); } - -// TODO: API로 변경 -const description = `

      컴퓨터공학 전공 학점

      컴퓨터공학 단일 전공 (자유전공학부 주전공: 심화전공 해당)https://cse.snu.ac.kr/node/41275참조

      • (2021~2023학번) 전공학점 63학점을 이수: 전필 30학점 + 전선 내규필수 8학점을 포함한 63학점 이수

         - 전필: 이산수학(3), 논리설계(4), 컴퓨터프로그래밍(4), 전기전자회로(3), 자료구조(3), 컴퓨터구조(3), 시스템프로그래밍(4),
           알고리즘(3), 공대 공통교과목(3)
         - 전선내규필수: 소프트웨어 개발의 원리와 실습(4), 컴퓨터공학세미나(1) 또는 IT-리더십세미나(1)(세미나는 1과목만 이수),
           창의적통합설계 1(3) 또는 창의적통합설계 2(3)

      • (2020학번) 전공학점 63학점을 이수: 전필 31학점 + 전선 내규필수 8학점을 포함한 63학점 이수

         - 전필: 이산수학(3), 논리설계(4), 컴퓨터프로그래밍(4), 전기전자회로(3), 자료구조(4), 컴퓨터구조(3), 시스템프로그래밍(4),
           알고리즘(3), 공대 공통교과목(3)
         - 전선내규필수: 소프트웨어 개발의 원리와 실습(4), 컴퓨터공학세미나(1) 또는 IT-리더십세미나(1)(세미나는 1과목만 이수),
           창의적통합설계 1(3) 또는 창의적통합설계 2(3)

      • (2019학번) 전공학점 63학점을 이수: 전필 35학점 + 전선 내규필수 4학점을 포함한 63학점 이수

         - 전필: 이산수학, 논리설계(4학점), 컴퓨터프로그래밍(4학점), 전기전자회로, 자료구조(4학점), 컴퓨터구조,
           소프트웨어 개발의 원리와 실습(4학점), 시스템프로그래밍(4학점), 알고리즘, 공대 공통교과목
         - 내규필수: 컴퓨터공학세미나 또는 IT-리더십세미나(세미나는 1과목만 이수), 창의적통합설계 1 또는 창의적통합설계 2

      • (2008~2010학번) 컴퓨터공학 전공 60학점 이상: 전필 33학점 + 내규 5학점을 포함한 60학점 이수

         - 전필: 이산수학, 논리설계, 논리설계실험, 컴퓨터프로그래밍, 전기전자회로, 자료구조, 프로그래밍의 원리, 컴퓨터구조, 운영체제,
           프로그래밍언어, 알고리즘
         - 내규필수: 컴퓨터공학세미나, IT-리더십세미나, 프로젝트1 또는 프로젝트2

      • (2011~2014학번) 컴퓨터공학 전공 63학점 이상: 전필 36학점 + 내규 5학점을 포함한 63학점 이수

         - 전필: 이산수학, 논리설계, 논리설계실험, 컴퓨터프로그래밍, 전기전자회로, 자료구조, 프로그래밍의 원리, 컴퓨터구조, 운영체제,
           프로그래밍언어, 알고리즘, 공대 공통교과목
         - 내규필수: 컴퓨터공학세미나, IT-리더십세미나, 프로젝트1 또는 프로젝트2

      • (2015~2018학번) 컴퓨터공학 전공 63학점 이상: 전필 37학점 + 내규 4학점을 포함한 63학점 이수

         - 전필: 이산수학, 논리설계(4학점), 컴퓨터프로그래밍(4학점), 전기전자회로, 자료구조(4학점), 컴퓨터구조, 소프트웨어 개발의 원리와 실제,
          시스템프로그래밍(4학점), 하드웨어시스템설계, 알고리즘, 공대 공통교과목
         - 내규필수: 컴퓨터공학세미나 또는 IT-리더십세미나(세미나는 1과목만 이수), 창의적통합설계 1 또는 창의적통합설계 2

      컴퓨터공학을 주전공으로 하는 학생이 타 전공을 복수전공/부전공할 때(자유전공학부에서 주전공 2개 이상 중 하나로 컴퓨터공학을 전공할 때)https://cse.snu.ac.kr/node/41275참조

      • (2021~2023학번) 컴퓨터공학부의 전공학점을 45학점 이상(복수전공, 연합전공시) / 48학점 이상(부전공, 연계전공시) 이수하고 타 학부에서 정하는 필요학점 이수: 컴퓨터공학부 전필 30학점 + 전선 내규필수 8학점 + 전선 7학점 이상(복수전공, 연합전공시) / 컴퓨터공학부 전필 30학점 + 전선 내규필수 8학점 + 전선 10학점 이상(부전공, 연계전공시)

         - 전필: 이산수학(3), 논리설계(4), 컴퓨터프로그래밍(4), 전기전자회로(3), 자료구조(3), 컴퓨터구조(3), 시스템프로그래밍(4),
           알고리즘(3), 공대 공통교과목(3)
         - 전선내규필수: 소프트웨어 개발의 원리와 실습(4), 컴퓨터공학세미나(1) 또는 IT-리더십세미나(1)(세미나는 1과목만 이수),
           창의적통합설계 1(3) 또는 창의적통합설계 2(3)

      • (2020학번) 컴퓨터공학부의 전공학점을 45학점 이상(복수전공, 연합전공시) / 48학점 이상(부전공, 연계전공시) 이수하고 타 학부에서 정하는 필요학점 이수: 컴퓨터공학부 전필 31학점 + 전선 내규필수 8학점 + 전선 6학점 이상(복수전공, 연합전공시) / 컴퓨터공학부 전필 31학점 + 전선 내규필수 8학점 + 전선 9학점 이상(부전공, 연계전공시)

         - 전필: 이산수학(3), 논리설계(4), 컴퓨터프로그래밍(4), 전기전자회로(3), 자료구조(4), 컴퓨터구조(3), 시스템프로그래밍(4),
           알고리즘(3), 공대 공통교과목(3)
         - 전선내규필수: 소프트웨어 개발의 원리와 실습(4), 컴퓨터공학세미나(1) 또는 IT-리더십세미나(1)(세미나는 1과목만 이수),
           창의적통합설계 1(3) 또는 창의적통합설계 2(3)

      • (2019학번) 컴퓨터공학부의 전공학점을 41학점 이상 이수하고 타 학부에서 정하는 필요학점 이수: 컴퓨터공학부 전필 35학점 + 전선 내규필수 4학점 + 전선 2학점이상

         - 전필: 이산수학, 논리설계(4학점), 컴퓨터프로그래밍(4학점), 전기전자회로, 자료구조(4학점), 컴퓨터구조,
           소프트웨어 개발의 원리와 실습(4학점), 시스템프로그래밍(4학점), 알고리즘, 공대 공통교과목
         - 내규필수: 컴퓨터공학세미나 또는 IT-리더십세미나(세미나는 1과목만 이수), 창의적통합설계 1 또는 창의적통합설계 2

      • (2008~2010학번) 컴퓨터공학부의 전공학점을 39학점 이상 이수하고 타 학부에서 정하는 필요학점 이수

         - 전필: 이산수학, 논리설계, 논리설계실험, 컴퓨터프로그래밍, 전기전자회로, 자료구조, 프로그래밍의 원리, 컴퓨터구조, 운영체제,
           프로그래밍언어, 알고리즘
         - 내규필수: 컴퓨터공학세미나, IT-리더십세미나, 프로젝트1 또는 프로젝트2

      • (2011~2014학번) 컴퓨터공학부의 전공학점을 41학점 이상 이수하고 타 학부에서 정하는 필요학점 이수

         - 전필: 이산수학, 논리설계, 논리설계실험, 컴퓨터프로그래밍, 전기전자회로, 자료구조, 프로그래밍의 원리, 컴퓨터구조, 운영체제,
           프로그래밍언어, 알고리즘, 공대 공통교과목
         - 내규필수: 컴퓨터공학세미나, IT-리더십세미나, 프로젝트1 또는 프로젝트2

      • (2015~2018학번) 컴퓨터공학부의 전공학점을 41학점 이상 이수하고 타 학부에서 정하는 필요학점 이수

         - 전필: 이산수학, 논리설계(4학점), 컴퓨터프로그래밍(4학점), 전기전자회로, 자료구조(4학점), 컴퓨터구조, 소프트웨어 개발의 원리와 실제,
          시스템프로그래밍(4학점), 하드웨어시스템설계, 알고리즘, 공대 공통교과목
         - 내규필수: 컴퓨터공학세미나 또는 IT-리더십세미나(세미나는 1과목만 이수), 창의적통합설계 1 또는 창의적통합설계 2

      컴퓨터공학 복수전공, 타 전공 주전공 (컴퓨터공학부가 아닌 다른 학과 학생이 컴퓨터 공학을 복수전공할 때)

      • (2021~2023학번) 컴퓨터공학 전공 39학점 이상 (공대 공통 교과목 제외): 전필 27학점 + 전선 12학점이상

         - 전필: 이산수학(3), 논리설계(4), 컴퓨터프로그래밍(4), 전기전자회로(3), 자료구조(3), 컴퓨터구조(3), 시스템프로그래밍(4),
           알고리즘(3)
         - 내규필수: 면제

      • (2020학번) 컴퓨터공학 전공 39학점 이상 (공대 공통 교과목 제외): 전필 28학점 + 전선 11학점이상
      https://cse.snu.ac.kr/node/35308, https://cse.snu.ac.kr/node/41275  참조

         - 전필: 이산수학(3), 논리설계(4), 컴퓨터프로그래밍(4), 전기전자회로(3), 자료구조(4), 컴퓨터구조(3), 시스템프로그래밍(4),
           알고리즘(3)
         - 내규필수: 면제

         - 전필: 이산수학, 논리설계(4학점), 컴퓨터프로그래밍(4학점), 전기전자회로, 자료구조(4학점), 컴퓨터구조,
           소프트웨어 개발의 원리와 실습(4학점), 시스템프로그래밍(4학점), 알고리즘
         - 내규필수: 면제

      • 07학번까지 : 컴퓨터공학 전공 51학점 이상 (공대 공통 교과목 포함)

         - 전필: 이산수학, 논리설계, 논리설계실험, 컴퓨터프로그래밍, 전기전자회로, 자료구조, 프로그래밍의 원리, 컴퓨터구조, 운영체제,
           프로그래밍언어, 알고리즘, 공대 공통교과목
         - 내규필수: 컴퓨터공학세미나, IT-리더십세미나, 프로젝트1 또는 프로젝트

      • (2008~2014학번) 컴퓨터공학 전공 39학점 이상 (공대 공통 교과목 제외)

         - 전필: 이산수학, 논리설계, 논리설계실험, 컴퓨터프로그래밍, 전기전자회로, 자료구조, 프로그래밍의 원리, 컴퓨터구조, 운영체제,
           프로그래밍언어, 알고리즘
         - 내규필수: 컴퓨터공학세미나, IT-리더십세미나, 프로젝트1 또는 프로젝트2

      • (2015~2018학번) 컴퓨터공학 전공 39학점 이상 (공대 공통 교과목 제외)

         - 전필: 이산수학, 논리설계(4학점), 컴퓨터프로그래밍(4학점), 전기전자회로, 자료구조(4학점), 컴퓨터구조, 소프트웨어 개발의 원리와 실제,
         시스템프로그래밍(4학점), 하드웨어시스템설계, 알고리즘
         - 내규필수: 컴퓨터공학세미나 또는 IT-리더십세미나(세미나는 1과목만 이수), 창의적통합설계 1 또는 창의적통합설계 2

      컴퓨터공학 부전공, 타 전공 주전공 (컴퓨터 공학부가 아닌 다른 학과 학생이 컴퓨터 공학을 부전공할 때)

      • 07학번까지 : 컴퓨터공학 전공24학점 이상-> 전필 (자료구조, 시스템프로그래밍, 컴퓨터구조) 교과목을 포함하여 총 24학점 이상 이수
      • 08학번부터 : 컴퓨터공학 전공21학점 이상-> 전필 (자료구조, 시스템프로그래밍, 컴퓨터구조) 교과목을 포함하여 총 21학점 이상 이수

      생명존중(자살예방) 교육 이수 의무

      2016학년도 공과대학 신입생부터는 서울대학교 공과대학 생명존중(자살예방) 교육 이수가 졸업 필수 조건이므로 반드시 입학년도 첫 학기에 이수 후 이수증 사본을 컴퓨터공학부 행정실에 제출해야 한다. (컴퓨터공학부 필수 이수 대상자: 학부생 2016 ~ 2023학번)

      외국어진행강좌 수강 의무

      2008학년도 신입생부터는 1과목 이상의 전공교과목을 포함하여 3과목 이상의 외국어진행강좌를 수강해야 한다. (2012학번부터는 대학영어 제외)

      학점

      재학 중 이수한 전 교과목 및 전공 교과목의 성적 평점평균이 각각 C0(2.0)이상이어야 졸업할 수 있다.

      전필 교과목

      • (2008~2014학번) 이산수학, 논리설계, 논리설계실험, 컴퓨터프로그래밍, 전기전자회로, 자료구조, 프로그래밍의 원리, 컴퓨터구조, 운영체제, 프로그래밍언어, 알고리즘
      • (2015~2018학번) 이산수학, 논리설계(4학점), 컴퓨터프로그래밍(4학점), 전기전자회로, 자료구조(4학점), 컴퓨터구조, 소프트웨어 개발의 원리와 실제, 시스템프로그래밍(4학점), 하드웨어시스템설계, 알고리즘

      공과대학 공통 교과목

         - 공과대학 공통과목 전 영역에서 3학점을 필수로 이수하여야 함
         - 400.XXX 또는 M2177.XXXXXXX 과목은 최대 9학점까지 인정(정보통신융합 및 딥러닝의 기초는 9학점 제한에서 제외)

      • 주전공 (2011 ~ 2019학번)

         - 기계공학개론(400.013), 산업공학개론(400.015), 재료공학개론(400.020) 건설환경공학개론(400.022), 화학생물공학개론(400.023), 에너지자원공학개론(400.024) 중 택일

      • 주전공 (2008 ~ 2010학번)

         - 해당없음

      • 복수전공 (2008 ~2020학번)

         - 해당없음

      • 복수전공 (~ 2007학번까지)

         - 기계공학개론(400.013), 산업공학개론(400.015), 전기공학개론(400.019), 재료공학개론 (400.020) 중 택일

      내규 교과목

      • 컴퓨터공학세미나 (1학점)
      • IT-리더십세미나 (1학점)
      • 프로젝트1 (3학점) 또는 프로젝트2 (3학점)

      이상 총 5학점.

      과거 학번 학생들을 위한 경과조치

      컴퓨터공학세미나, IT-리더십세미나 교과목

      • 2015 ~ 2020학번: 컴퓨터공학세미나 또는 IT-리더십세미나 중 택일
      • 2006 ~ 2014학번: 컴퓨터공학세미나 및 IT-리더십세미나 모두 수강
      • 2002 ~ 2005학번: 컴퓨터공학세미나 또는 IT-리더십세미나 중 택일

      프로젝트 교과목

      • 1999학번부터: 프로젝트1 (설계프로젝트1, 창의적통합설계1) 또는 프로젝트2 (설계프로젝트2, 창의적통합설계2) 중 택일
      • 1998학번까지: 프로젝트1 (설계프로젝트1) 및 프로젝트2 (설계프로젝트2) 모두 수강
      • (예외) (구)전산과학과에서 소속을 변경한 학생은 프로젝트1 및 프로젝트 2를 수강하지 않아도 된다.

      교양 대학영어 (대학영어1, 대학영어2, 고급영어) 교과목

      2008학번을 포함한 그 이전 학생이 대학영어 또는 고급영어를 수강할 경우 (재수강 포함), 대학영어 과목의 학점 변경 (3학점에서 2학점으로 변경)으로 인해 학문의 기초에서 이수학점을 충족하지 못하더라도 학문의 기초 최저이수학점을 이수한 것으로 인정한다. 단 전체 교양 최저이수학점은 충족해야 한다.

      졸업논문

      학부생은 논문 지도교수의 허락을 받을 경우 아래의 내용으로 졸업논문을 대체할 수 있다. 단, 졸업논문 형식의 보고서를 작성하여 제출하여야 한다.

      1. 프로젝트 과목의 결과물 (교과목명 변경: 프로젝트=창의적통합설계)
        1. 프로젝트 1 과목과 프로젝트 2 과목을 모두 이수한 학생에 한한다.
        2. 논문은 제출자가 프로젝트 팀 내에서 다른 구성원이 아닌 자신이 직접 수행한 것을 바탕으로 작성하여야 한다. 다른 구성원의 업적을 개인의 업적인 양 제출하는 것은 연구윤리 위반에 해당하므로 졸업사정에서 제외한다.
        3. 프로젝트의 팀원이 결과를 중복하여 각각 개인의 업적으로 제출할 수 없다. 중복이 발견될 경우에 중복에 관련된 전원의 졸업논문을 인정하지 않는다.
      2. Open S/W를 등록한 내용
      3. AppStore 등 사이트에 등록한 내용
      4. 회사에서 근무하거나 인턴으로 했던 작업의 내용
      5. 저널이나 컨퍼런스에 저자로 논문이 게재확정 되거나 게재된 내용
      6. 스타트업을 창업하여 본인이 회사에 기여한 내용

      ※ 회사에서 근무하거나 인턴으로 했던 작업의 내용으로 졸업논문을 작성시 본인의 논문내용이 특정회사와 관련된 경우 회사 담당자로부터 학부논문 제출 동의서를 회사에서 받은 후 컴퓨터공학부 행정실로 제출해야 함.

      학번별 필수 교과목

      `; diff --git a/app/[locale]/academics/undergraduate/scholarship/[id]/page.tsx b/app/[locale]/academics/undergraduate/scholarship/[id]/page.tsx index 75cb76c97..faa4b2493 100644 --- a/app/[locale]/academics/undergraduate/scholarship/[id]/page.tsx +++ b/app/[locale]/academics/undergraduate/scholarship/[id]/page.tsx @@ -3,7 +3,7 @@ import { getScholarship } from '@/apis/academics'; import ScholarshipDetail from '../../../helper/ScholarshipDetail'; export default async function UndergraduateScholarshipPage({ params }: { params: { id: string } }) { - const scholarship = await getScholarship('undergraduate', parseInt(params.id)); + const scholarship = await getScholarship(parseInt(params.id)); return ; } diff --git a/app/[locale]/admin/helper/BatchAction.tsx b/app/[locale]/admin/helper/BatchAction.tsx index 9a072e061..16103c723 100644 --- a/app/[locale]/admin/helper/BatchAction.tsx +++ b/app/[locale]/admin/helper/BatchAction.tsx @@ -10,7 +10,7 @@ export default function BatchAction({ onClickButton, }: BatchActionProps) { return ( -
      +
      {buttonText} @@ -25,7 +25,7 @@ function SelectedPostsCount({ count }: { count: number }) { check_box - {count}개 게시물 선택 + {count}개 게시물 선택
      ); } diff --git a/app/[locale]/admin/helper/TotalPostsCount.tsx b/app/[locale]/admin/helper/TotalPostsCount.tsx index 96dec2a85..eb583c164 100644 --- a/app/[locale]/admin/helper/TotalPostsCount.tsx +++ b/app/[locale]/admin/helper/TotalPostsCount.tsx @@ -1,6 +1,6 @@ export default function TotalPostsCount({ count }: { count: number }) { return ( - + 총 {count}개의 게시물 ); diff --git a/app/[locale]/admin/helper/important/ImportantList.tsx b/app/[locale]/admin/helper/important/ImportantList.tsx index 5524e28fc..1b5c9416f 100644 --- a/app/[locale]/admin/helper/important/ImportantList.tsx +++ b/app/[locale]/admin/helper/important/ImportantList.tsx @@ -37,7 +37,7 @@ export default function ImportantList({ return (
      -
        +
          {posts.map((post, i) => ( +
          연번 종류 제목 diff --git a/app/[locale]/admin/helper/important/ImportantListRow.tsx b/app/[locale]/admin/helper/important/ImportantListRow.tsx index 5ed16772f..2d1c36f10 100644 --- a/app/[locale]/admin/helper/important/ImportantListRow.tsx +++ b/app/[locale]/admin/helper/important/ImportantListRow.tsx @@ -38,7 +38,7 @@ export default function ImportantListRow({ return (
        • @@ -66,10 +66,7 @@ function CheckboxCell({ isChecked = true, toggleCheck }: CheckboxCellProps) { {isChecked ? ( ) : ( - + check_box_outline_blank )} @@ -107,7 +104,7 @@ function DateCell({ date }: { date: string }) { function EditCell({ href }: { href: string }) { return ( - + 편집 diff --git a/app/[locale]/admin/helper/important/ImportantManagement.tsx b/app/[locale]/admin/helper/important/ImportantManagement.tsx index 4ffe898cc..001a1a233 100644 --- a/app/[locale]/admin/helper/important/ImportantManagement.tsx +++ b/app/[locale]/admin/helper/important/ImportantManagement.tsx @@ -4,7 +4,6 @@ import { useRouter } from 'next/navigation'; import { batchUnimportantAction } from '@/actions/admin'; -import { StraightNode } from '@/components/common/Nodes'; import Pagination from '@/components/common/Pagination'; import AlertModal from '@/components/modal/AlertModal'; @@ -51,7 +50,6 @@ export default function ImportantManagement({ posts, page, total }: ImportantMan return (
          - +

          메인페이지의 중요 안내에는 {`소식 > 공지사항, 새 소식, 세미나`} 중{' '} {`'중요 안내에 표시'`} 체크박스가 선택된 글들이 올라갑니다.
          이 목록에 2개 이상의 글이 포함되면 자동으로 최신글 2개만 표시되지만, 원활한 유지보수를 diff --git a/app/[locale]/admin/helper/slide/SlideLIstHeader.tsx b/app/[locale]/admin/helper/slide/SlideLIstHeader.tsx index 44ff6f512..cb56413b8 100644 --- a/app/[locale]/admin/helper/slide/SlideLIstHeader.tsx +++ b/app/[locale]/admin/helper/slide/SlideLIstHeader.tsx @@ -2,7 +2,7 @@ import { SLIDE_ROW_CELL_WIDTH } from './SlideListRow'; export default function SlideListHeader() { return ( -

          +
          연번 제목 날짜 diff --git a/app/[locale]/admin/helper/slide/SlideListRow.tsx b/app/[locale]/admin/helper/slide/SlideListRow.tsx index 26901c239..eb1b06680 100644 --- a/app/[locale]/admin/helper/slide/SlideListRow.tsx +++ b/app/[locale]/admin/helper/slide/SlideListRow.tsx @@ -31,7 +31,7 @@ export default function SlideListRow({ }: SlideListRowProps) { return (
        • @@ -56,7 +56,8 @@ function CheckboxCell({ isChecked = true, toggleCheck }: CheckboxCellProps) { ) : ( check_box_outline_blank @@ -90,7 +91,10 @@ function DateCell({ date }: { date: string }) { function EditCell({ id }: { id: number }) { return ( - + 편집 diff --git a/app/[locale]/admin/helper/slide/SlideManagement.tsx b/app/[locale]/admin/helper/slide/SlideManagement.tsx index 65ba5b0f3..a97abc07d 100644 --- a/app/[locale]/admin/helper/slide/SlideManagement.tsx +++ b/app/[locale]/admin/helper/slide/SlideManagement.tsx @@ -4,7 +4,6 @@ import { useRouter } from 'next/navigation'; import { batchUnslideAction } from '@/actions/admin'; -import { StraightNode } from '@/components/common/Nodes'; import Pagination from '@/components/common/Pagination'; import AlertModal from '@/components/modal/AlertModal'; @@ -41,7 +40,7 @@ export default function SlideManagement({ posts, page, total }: SlideManagementP }; const handleBatchUnslide = async () => { - const result = await batchUnslideAction(ids); + const result = await batchUnslideAction([...ids]); if (result) { errorToast('슬라이드를 해제하지 못했습니다.'); } else { @@ -53,7 +52,6 @@ export default function SlideManagement({ posts, page, total }: SlideManagementP return (
          - +

          메인페이지의 슬라이드쇼에는 {`소식 > 새 소식`} 중{' '} {`'슬라이드쇼에 표시'`} 체크박스가 선택된 글들이 올라갑니다. 이 목록에 20개 이상의 글이 포함되면 자동으로 최신글 20개만 표시되지만, 원활한 유지보수를 위하여 주기적인 diff --git a/app/[locale]/community/news/helper/AdminFeatures.tsx b/app/[locale]/community/news/helper/AdminFeatures.tsx index b68ad0055..f80154389 100644 --- a/app/[locale]/community/news/helper/AdminFeatures.tsx +++ b/app/[locale]/community/news/helper/AdminFeatures.tsx @@ -7,12 +7,14 @@ const newsPath = getPath(news); export default function AdminFeatures() { return ( -

          - - 새 게시글 +
          + +
          ); diff --git a/app/[locale]/community/news/helper/NewsRow.tsx b/app/[locale]/community/news/helper/NewsRow.tsx index 0fd0786dd..77a3a95c9 100644 --- a/app/[locale]/community/news/helper/NewsRow.tsx +++ b/app/[locale]/community/news/helper/NewsRow.tsx @@ -85,7 +85,7 @@ export default function NewsRow({ alt="포스트 대표 이미지" src={imageURL} fill - className="object-fill" + className="object-cover" sizes="12.5rem" /> diff --git a/app/[locale]/community/notice/helper/EditButtons.tsx b/app/[locale]/community/notice/helper/EditButtons.tsx index a8261f73c..0b376201d 100644 --- a/app/[locale]/community/notice/helper/EditButtons.tsx +++ b/app/[locale]/community/notice/helper/EditButtons.tsx @@ -32,7 +32,7 @@ export function EditButton({ isEditMode, toggleEditMode }: EditButtonProps) { return (
        • diff --git a/app/[locale]/community/notice/helper/NoticeListRow.tsx b/app/[locale]/community/notice/helper/NoticeListRow.tsx index c1c0e7c27..acba38eb7 100644 --- a/app/[locale]/community/notice/helper/NoticeListRow.tsx +++ b/app/[locale]/community/notice/helper/NoticeListRow.tsx @@ -103,7 +103,7 @@ const noticePath = getPath(notice); function TitleCell({ title, hasAttachment, id, isEditMode, isPinned }: TitleCellProps) { if (isEditMode) { return ( - + {title} diff --git a/app/[locale]/community/seminar/create/page.tsx b/app/[locale]/community/seminar/create/page.tsx index 859fc82c8..a016843e2 100644 --- a/app/[locale]/community/seminar/create/page.tsx +++ b/app/[locale]/community/seminar/create/page.tsx @@ -28,7 +28,7 @@ export default function SeminarCreatePage() { }; return ( - + - - 새 게시글 +
          + +
          ); diff --git a/app/[locale]/community/seminar/helper/SeminarRow.tsx b/app/[locale]/community/seminar/helper/SeminarRow.tsx index ccf69e103..8143da1d1 100644 --- a/app/[locale]/community/seminar/helper/SeminarRow.tsx +++ b/app/[locale]/community/seminar/helper/SeminarRow.tsx @@ -56,7 +56,7 @@ function ImageCell({ imageURL }: { imageURL: string | null }) { } function TitleCell({ title }: { title: string }) { - return

          {title}

          ; + return

          {title}

          ; } function HostInformationCell({ host, company }: { host: string; company: string }) { diff --git a/app/[locale]/layout.tsx b/app/[locale]/layout.tsx index 3059e3891..6b5e7cd16 100644 --- a/app/[locale]/layout.tsx +++ b/app/[locale]/layout.tsx @@ -8,6 +8,7 @@ import { NavbarContextProvider } from '@/contexts/NavbarContext'; import SessionContextProvider from '@/contexts/SessionContext'; import Footer from '@/components/layout/footer/Footer'; +import MobileNav from '@/components/layout/navbar/MobileNav'; import Navbar from '@/components/layout/navbar/Navbar'; import ModalContainer from '@/components/modal/ModalContainer'; @@ -40,13 +41,12 @@ export default async function RootLayout({ return ( - - - + + {children} @@ -67,9 +67,11 @@ function ContextProviders({ locale, children }: { locale: string; children: Reac return ( - - {children} - + + + {children} + + ); diff --git a/app/[locale]/people/faculty/[id]/page.tsx b/app/[locale]/people/faculty/[id]/page.tsx index e3d118b7b..ac537aae6 100644 --- a/app/[locale]/people/faculty/[id]/page.tsx +++ b/app/[locale]/people/faculty/[id]/page.tsx @@ -31,7 +31,7 @@ export default async function FacultyMemberPage({ params }: { params: { id: numb />
          -
          +
          - 프로필 사진 +
          +
          {contentList.map((content, idx) => ( ))} diff --git a/app/[locale]/people/helper/Profile.tsx b/app/[locale]/people/helper/Profile.tsx index ceb14f67b..69b3a9c15 100644 --- a/app/[locale]/people/helper/Profile.tsx +++ b/app/[locale]/people/helper/Profile.tsx @@ -13,31 +13,18 @@ interface ProfileProps { export default function Profile({ office, phone, fax, email, website, imageURL }: ProfileProps) { return ( -
          +
          -
          -
          -
          - - - - - -
          -
          -
          -
          -
          +
          + + + + +
          ); @@ -51,14 +38,14 @@ interface SymbolAndLabel { const FacultyInfoWithSymbols = ({ symbol, label, href }: SymbolAndLabel) => { return ( -
          +
          {symbol} {href ? ( {label} ) : ( -

          {label?.length && 0 < label?.length ? label : '-'}

          +

          {label?.length && 0 < label?.length ? label : '-'}

          )}
          ); diff --git a/app/[locale]/people/helper/ProfileImage.tsx b/app/[locale]/people/helper/ProfileImage.tsx index 7a8fba343..39cffcfdd 100644 --- a/app/[locale]/people/helper/ProfileImage.tsx +++ b/app/[locale]/people/helper/ProfileImage.tsx @@ -1,31 +1,21 @@ import Image from 'next/image'; -export default function ProfileImage({ imageURL }: { imageURL: string }) { +// TODO: Image -> ImageFallback으로 수정 +export default function ProfileImage({ imageURL }: { imageURL: string | null }) { + if (imageURL === null) return <>; + return ( -
          -
          - 대표 이미지 -
          -
          -
          -
          -
          + 대표 이미지 ); } diff --git a/app/[locale]/research/groups/ResearchGroupDetails.tsx b/app/[locale]/research/groups/ResearchGroupDetails.tsx index 025b3577a..0df028260 100644 --- a/app/[locale]/research/groups/ResearchGroupDetails.tsx +++ b/app/[locale]/research/groups/ResearchGroupDetails.tsx @@ -12,7 +12,7 @@ interface ResearchGroupDetailProps { export default function ResearchGroupDetails({ group }: ResearchGroupDetailProps) { return ( -
          +

          {group.name} 연구 그룹

          @@ -21,7 +21,8 @@ export default function ResearchGroupDetails({ group }: ResearchGroupDetailProps className="max-w-[780px] bg-white p-[18px] sm:mx-0 sm:p-[40px]" /> {group.imageURL !== null && ( -
          + // TODO: 반응형 +
          {/* TODO: 이미지 반응형 */} (groups, searchParams.selected); + const selectedGroup = findSelectedItem(groups, searchParams.selected); return ( diff --git a/app/[locale]/research/labs/ResearchLabListRow.tsx b/app/[locale]/research/labs/ResearchLabListRow.tsx index 46ea38b34..ca8d5672d 100644 --- a/app/[locale]/research/labs/ResearchLabListRow.tsx +++ b/app/[locale]/research/labs/ResearchLabListRow.tsx @@ -42,7 +42,7 @@ function NameCell({ name, id }: { name: string; id: number }) { className={`${LAB_ROW_ITEM_WIDTH.name} order-first col-span-1 row-span-1 whitespace-nowrap text-base font-semibold sm:whitespace-normal sm:text-sm sm:font-normal`} > - + {name} @@ -52,15 +52,12 @@ function NameCell({ name, id }: { name: string; id: number }) { function ProfessorsCell({ professors }: { professors: { id: number; name: string }[] }) { return ( 지도교수: {professors.map((info, i) => ( - + {info.name} {i !== professors.length - 1 && ', '} @@ -72,18 +69,18 @@ function ProfessorsCell({ professors }: { professors: { id: number; name: string function LocationCell({ location }: { location: string }) { return ( - {location} + {location} ); } function TelephoneCell({ tel }: { tel: string }) { - return {tel}; + return {tel}; } function AcronymCell({ acronym }: { acronym: string }) { return ( {acronym} diff --git a/app/[locale]/research/top-conference-list/ConferenceListTable.tsx b/app/[locale]/research/top-conference-list/ConferenceListTable.tsx index e20352e29..545b98eb0 100644 --- a/app/[locale]/research/top-conference-list/ConferenceListTable.tsx +++ b/app/[locale]/research/top-conference-list/ConferenceListTable.tsx @@ -16,7 +16,7 @@ export default function ConferenceListTable({ conferenceList: ConferenceListTableProps[]; }) { return ( -
          +
          연번
          코드
          @@ -33,7 +33,7 @@ export default function ConferenceListTable({ function ConferenceRow({ conference, index }: ConferenceRowProps) { return (
          {index}
          {conference.code}
          diff --git a/app/[locale]/research/top-conference-list/page.tsx b/app/[locale]/research/top-conference-list/page.tsx index 22a32ef46..e081eee0f 100644 --- a/app/[locale]/research/top-conference-list/page.tsx +++ b/app/[locale]/research/top-conference-list/page.tsx @@ -8,14 +8,14 @@ export default async function TopConferenceListPage() { return ( -
          +

          서울대학교 공과대학 컴퓨터공학부 Top Conference List

          -

          +

          본 리스트는 시간과 상황의 변동에 따라 바뀔 수 있습니다.

          -

          +

          수정날짜: {'modifiedAt'}(작성자: {'author'})

          diff --git a/components/common/Attachments.tsx b/components/common/Attachments.tsx index 634e7865f..7329c9623 100644 --- a/components/common/Attachments.tsx +++ b/components/common/Attachments.tsx @@ -6,15 +6,19 @@ export interface Attachment { url: string; } +// TODO: 여러 맥락에서 사용되므로 마진 prop으로 건네주기 export default function Attachments({ files }: { files: Attachment[] }) { if (files.length === 0) return <>; return ( -
          - {files.map((file, index) => ( - - ))} - + // 좌측 정렬을 위한 wrapper div +
          +
          + {files.map((file, index) => ( + + ))} + +
          ); } diff --git a/components/common/ImageWithFallback.tsx b/components/common/ImageWithFallback.tsx index 026cac3d1..baed28d46 100644 --- a/components/common/ImageWithFallback.tsx +++ b/components/common/ImageWithFallback.tsx @@ -17,7 +17,7 @@ export default function ImageWithFallback(props: ImageWithFallbackProps) { }`} style={{ width: props.width, height: props.height }} > - +
          ); } @@ -34,6 +34,7 @@ export default function ImageWithFallback(props: ImageWithFallbackProps) { ); } +// TODO: 더 나은 타입 선언 방법 찾기. next/images와 일치하는게 이상적 interface ImageWithFallbackProps { src: string | null | undefined; alt: string; @@ -44,4 +45,5 @@ interface ImageWithFallbackProps { sizes?: string; fill?: boolean | undefined; priority?: boolean | undefined; + quality?: number; } diff --git a/components/common/selection/SelectionList.tsx b/components/common/selection/SelectionList.tsx index fe0c7d5a0..9f8af21e4 100644 --- a/components/common/selection/SelectionList.tsx +++ b/components/common/selection/SelectionList.tsx @@ -18,7 +18,6 @@ interface SelectionListProps { * lg:grid-cols-[repeat(auto-fit,_minmax({itemWidth}px,_auto))] */ listGridColumnClass?: string; listItemPadding?: string; // tailwlind class - setSelected?: (value: string) => void; } export default function SelectionList({ @@ -27,11 +26,7 @@ export default function SelectionList({ path, listGridColumnClass = 'lg:grid-cols-[repeat(auto-fit,_minmax(200px,_auto))]', listItemPadding = '', - setSelected, }: SelectionListProps) { - const selectItem = (itemName: string) => { - setSelected?.(itemName); - }; const gridStyle = `grid-cols-[repeat(2,_1fr)] ${listGridColumnClass}`; return ( @@ -43,7 +38,6 @@ export default function SelectionList({ name={name} isSelected={name === selectedItemName} padding={listItemPadding} - selectItem={selectItem} /> ))}
        @@ -55,11 +49,10 @@ interface SelectionItemProps { isSelected: boolean; path: string; padding: string; - selectItem?: (itemName: string) => void; } -function SelectionItem({ name, isSelected, path, padding, selectItem }: SelectionItemProps) { - const itemCommonStyle = `flex items-center justify-center w-full h-10 py-3 text-center text-[11px] sm:text-sm lg:text-[15px] tracking-wide ${padding}`; +function SelectionItem({ name, isSelected, path, padding }: SelectionItemProps) { + const itemCommonStyle = `flex items-center justify-center w-full h-10 py-3 text-center text-[11px] sm:text-sm lg:text-md tracking-wide ${padding}`; const triangleLength = 1.25; // 20px const radius = 0.125; // 2px const dropShadow = 'drop-shadow(1px 2px 2px rgba(0,0,0,0.3)'; @@ -90,9 +83,7 @@ function SelectionItem({ name, isSelected, path, padding, selectItem }: Selectio className={`${itemCommonStyle} text-neutral-500 transition-all duration-300 hover:text-neutral-800`} scroll={false} > -
        selectItem?.(name)}> - {name} -
        + {name} )} diff --git a/components/editor/HTMLViewer.tsx b/components/editor/HTMLViewer.tsx index 17630745f..e2e5940a3 100644 --- a/components/editor/HTMLViewer.tsx +++ b/components/editor/HTMLViewer.tsx @@ -59,7 +59,7 @@ function TopRightImageContent(props: TopRightImage) { const { url, widthPX: width, heightPX: height } = props; return (
        - 대표 이미지 + 대표 이미지
        ); } else { diff --git a/components/editor/PostEditor.tsx b/components/editor/PostEditor.tsx index 79d87c157..d3a600fda 100644 --- a/components/editor/PostEditor.tsx +++ b/components/editor/PostEditor.tsx @@ -98,7 +98,7 @@ export default function PostEditor({ }} /> -
        +
        {tags.map((tag) => ( void }) { return ( -
        +
        void; }) { return ( -
        +
        +
        diff --git a/components/editor/common/Fieldset.tsx b/components/editor/common/Fieldset.tsx index 984b14eb6..5aff66217 100644 --- a/components/editor/common/Fieldset.tsx +++ b/components/editor/common/Fieldset.tsx @@ -19,7 +19,7 @@ export default function Fieldset({ }: FieldsetProps) { return (
        - + {title} {required && *} diff --git a/components/editor/common/FilePicker.tsx b/components/editor/common/FilePicker.tsx index 2bfa62d33..5a12f5ae2 100644 --- a/components/editor/common/FilePicker.tsx +++ b/components/editor/common/FilePicker.tsx @@ -54,13 +54,7 @@ export default function FilePicker({ files, setFiles }: FilePickerProps) { function SelectFileButton({ onChange }: { onChange: ChangeEventHandler }) { return ( -