From 0e85144cdf15c9a33e7898748d27ba24dddef14d Mon Sep 17 00:00:00 2001 From: Lectom C Han Date: Mon, 4 Aug 2025 20:01:51 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9D=B4=EC=8A=88=20=EC=83=81=EC=84=B8?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EA=B0=80=EB=8F=85=EC=84=B1=20?= =?UTF-8?q?=EA=B0=9C=EC=84=A0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO.md | 14 ++++++- viewer/src/components/DynamicTable.tsx | 11 ++++-- viewer/src/components/FeedbackFormCard.tsx | 2 +- viewer/src/components/IssueDetailCard.tsx | 45 ++++++++++++++++++++++ viewer/src/pages/IssueDetailPage.tsx | 38 +----------------- 5 files changed, 69 insertions(+), 41 deletions(-) create mode 100644 viewer/src/components/IssueDetailCard.tsx diff --git a/TODO.md b/TODO.md index ddfe931..00d5e1c 100644 --- a/TODO.md +++ b/TODO.md @@ -1 +1,13 @@ -2025-08-05 10:30:00 KST - 이슈 API 연동 및 UI 개선 완료 \ No newline at end of file +2025-08-05 10:30:00 KST - 이슈 API 연동 및 UI 개선 완료 + +--- +### 2025-08-04 20:00:27 KST +- **레이아웃 안정성 및 반응형 개선 (완료)** + - **페이지 레이아웃 고정**: 테이블 행 확장 시 페이지 전체가 밀리는 현상 수정. `PageTitle`을 상단에 고정하고 컨텐츠 영역만 스크롤되도록 `MainLayout` 및 `PageLayout` 구조 개선. + - **일관된 페이지 너비 적용**: 목록 페이지와 상세 페이지의 너비가 다른 문제 해결. 모든 페이지가 최대 1400px 너비를 갖도록 `container` 사용법 통일. + - **반응형 헤더 구현**: 모바일 화면 크기에서 햄버거 메뉴가 나타나도록 `Header` 컴포넌트 개선. + - **컴포넌트 리팩터링**: `IssueDetailPage`의 UI를 재사용 가능한 `IssueDetailCard` 컴포넌트로 분리. + - **UI/UX 개선**: + - `DynamicTable`의 검색창과 카드 간 여백 조정. + - `IssueDetailCard`의 제목, 레이블, 컨텐츠 스타일을 개선하여 가독성 향상. + - **접근성(a11y) 수정**: `DynamicTable`의 컬럼 리사이저에 `slider` 역할을 부여하여 웹 접근성 lint 오류 해결. diff --git a/viewer/src/components/DynamicTable.tsx b/viewer/src/components/DynamicTable.tsx index 1cf4c30..5525112 100644 --- a/viewer/src/components/DynamicTable.tsx +++ b/viewer/src/components/DynamicTable.tsx @@ -273,9 +273,9 @@ export function DynamicTable({ }); return ( - + -
+
({ header.getContext(), )}
header.column.resetSize()} diff --git a/viewer/src/components/FeedbackFormCard.tsx b/viewer/src/components/FeedbackFormCard.tsx index f987408..ecafb3b 100644 --- a/viewer/src/components/FeedbackFormCard.tsx +++ b/viewer/src/components/FeedbackFormCard.tsx @@ -50,7 +50,7 @@ export function FeedbackFormCard({ const readOnlyFields = fields.map((field) => ({ ...field, readOnly: true })); return ( - + {title} diff --git a/viewer/src/components/IssueDetailCard.tsx b/viewer/src/components/IssueDetailCard.tsx new file mode 100644 index 0000000..9c50fd0 --- /dev/null +++ b/viewer/src/components/IssueDetailCard.tsx @@ -0,0 +1,45 @@ +// src/components/IssueDetailCard.tsx +import type { Issue } from "@/services/issue"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; + +interface IssueDetailCardProps { + issue: Issue; +} + +export function IssueDetailCard({ issue }: IssueDetailCardProps) { + return ( + + + {issue.name} + + +
+

설명

+

{issue.description}

+
+
+
+

상태

+

{issue.status}

+
+
+

우선순위

+

{issue.priority}

+
+
+

생성일

+

+ {new Date(issue.createdAt).toLocaleString("ko-KR")} +

+
+
+

수정일

+

+ {new Date(issue.updatedAt).toLocaleString("ko-KR")} +

+
+
+
+
+ ); +} diff --git a/viewer/src/pages/IssueDetailPage.tsx b/viewer/src/pages/IssueDetailPage.tsx index 5b803cf..af3473f 100644 --- a/viewer/src/pages/IssueDetailPage.tsx +++ b/viewer/src/pages/IssueDetailPage.tsx @@ -3,9 +3,9 @@ import { useState, useEffect } from "react"; import { useParams, useNavigate } from "react-router-dom"; import { getIssueById, type Issue } from "@/services/issue"; import { PageLayout } from "@/components/PageLayout"; -import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { ErrorDisplay } from "@/components/ErrorDisplay"; +import { IssueDetailCard } from "@/components/IssueDetailCard"; export function IssueDetailPage() { const { projectId, issueId } = useParams<{ @@ -59,41 +59,7 @@ export function IssueDetailPage() { } > - - - {issue.name} - - -
-

설명

-

- {issue.description} -

-
-
-
-

상태

-

{issue.status}

-
-
-

우선순위

-

{issue.priority}

-
-
-

생성일

-

- {new Date(issue.createdAt).toLocaleString("ko-KR")} -

-
-
-

수정일

-

- {new Date(issue.updatedAt).toLocaleString("ko-KR")} -

-
-
-
-
+ ); }