Skip to content

[Feat] 어드민 공통 컴포넌트 제작#6

Merged
leemanjae02 merged 9 commits into
mainfrom
feat/admin-common-components-5
Jul 4, 2026
Merged

[Feat] 어드민 공통 컴포넌트 제작#6
leemanjae02 merged 9 commits into
mainfrom
feat/admin-common-components-5

Conversation

@leemanjae02

@leemanjae02 leemanjae02 commented Jul 3, 2026

Copy link
Copy Markdown
Member

#️⃣연관된 이슈

🚧 Work in Progress

  • 작업 진행 중

📌 주요 변경사항

  • Figma "Navigation" 스펙 기준으로 어드민 공통 내비게이션 컴포넌트(Logo, Sidebar, SegmentedControl, PageHeader) 구현
  • 컴포넌트에 필요한 아이콘 세트를 Figma에서 추출해 프로젝트 아이콘 생성 파이프라인에 반영
  • 구현 과정에서 발견한 아이콘 생성기·유틸리티·스캐폴드 관련 버그 3건 수정

📝작업 내용

  • 공통 컴포넌트 추가: Logo(s/l 사이즈), Sidebar(메뉴 7종+로그아웃), SegmentedControl(active/default), PageHeader(제목+액션 버튼) — 라우팅/API 호출과 분리된 콜백 prop 기반 설계
  • 내비게이션 아이콘 추가: Figma에서 내려받은 SVG 원본과 pnpm icons:build로 생성한 아이콘 컴포넌트
  • 아이콘 생성 스크립트 수정: SVGR jsxRuntime 미지정으로 불필요한 React import가 생성돼 빌드가 깨지던 문제
  • cn() 유틸리티 수정: tailwind-merge가 커스텀 타이포그래피 클래스를 색상 클래스와 같은 그룹으로 오인해 삭제하던 충돌 해결
  • 미사용 Vite 스캐폴드 제거: 랜딩페이지 전용 CSS/이미지 삭제, 디자인 토큰 CSS 연결, 루트 font-size 오버라이드로 인한 12.5% spacing 오차와 전역 h1 규칙 충돌 해결
  • 검증: Figma 수치와 렌더링 결과 1px 단위 대조, tsc -b/pnpm lint/pnpm build/icons:check/gen:index:check 통과

📸 스크린샷 (선택)

💬리뷰 요구사항(선택)

  • 컴포넌트 테스트 미작성 — 단순 prop 기반 프레젠테이셔널 컴포넌트라 필수는 아니라 판단, 요청 시 추가 가능
  • App.tsx는 아직 실제 레이아웃에 조립하지 않은 빈 상태 — 페이지 조립은 별도 작업으로 분리

Summary by CodeRabbit

  • New Features
    • 공통 로고, 페이지 헤더, 세그먼트 선택 컨트롤, 사이드바가 추가되어 화면 구성 요소가 확장되었습니다.
  • Style
    • 전역 스타일/테마가 토큰 기반으로 재정리되며 라이트/다크 모드 표현이 달라질 수 있습니다.
  • Alterations
    • 메인 화면 렌더링이 비활성화되어 현재는 빈 화면이 표시될 수 있습니다.
  • Tests
    • PageHeader, SegmentedControl, Sidebar 관련 단위 테스트가 추가되었습니다.
  • Chores
    • 아이콘 생성 및 코드 포맷팅 품질이 개선되었습니다.

@github-actions github-actions Bot changed the title feat: 어드민 내비게이션 공통 컴포넌트 구현 [Feat] 어드민 공통 컴포넌트 제작 Jul 3, 2026
@github-actions github-actions Bot added the ✨Feature 새로운 기능 label Jul 3, 2026
@coderabbitai

coderabbitai Bot commented Jul 3, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 026419de-d47e-48e5-8343-4248e621bd81

📥 Commits

Reviewing files that changed from the base of the PR and between 9235c4b and 3c0d298.

📒 Files selected for processing (3)
  • src/components/common/PageHeader.test.tsx
  • src/components/common/SegmentedControl.test.tsx
  • src/components/common/Sidebar.test.tsx
✅ Files skipped from review due to trivial changes (1)
  • src/components/common/SegmentedControl.test.tsx

📝 Walkthrough

Walkthrough

공통 어드민 UI 컴포넌트와 재-내보내기 구조를 추가했고, 전역 스타일과 class merge 설정을 정리했습니다. App은 렌더링을 중단하도록 바뀌었고, 아이콘 빌드 스크립트는 자동 JSX 런타임과 외부 Prettier 설정을 사용합니다.

Changes

공통 컴포넌트 및 스타일 기반

Layer / File(s) Summary
스타일 유틸 및 전역 CSS 기반 정비
src/lib/utils.ts, src/index.css
local twMerge 확장과 theme.text 토큰 추가, Tailwind 소스 임포트, 전역 CSS 축소와 기본 마진 리셋이 반영됐다.
Logo 및 PageHeader 컴포넌트
src/components/common/Logo.tsx, src/components/common/PageHeader.tsx
size 기반 Logotitle/actionLabel/onAction/children을 받는 PageHeader가 추가됐다.
SegmentedControl 컴포넌트
src/components/common/SegmentedControl.tsx
role="tablist"/role="tab" 마크업과 aria-selected, onValueChange를 갖는 세그먼트 컨트롤이 추가됐다.
Sidebar 컴포넌트
src/components/common/Sidebar.tsx
메뉴 키 타입, 활성 상태 분기, onNavigate/onLogout 콜백을 갖는 사이드바가 추가됐다.
재-내보내기, App 진입점, 아이콘 빌드
src/components/common/index.ts, src/components/index.ts, src/App.tsx, scripts/build-icons.ts
공통 컴포넌트를 인덱스에서 재-내보내고, Appnull을 반환하도록 단순화됐으며, 아이콘 빌드는 자동 JSX 런타임과 출력 경로 기반 Prettier 설정을 사용하도록 변경됐다.
컴포넌트 테스트
src/components/common/PageHeader.test.tsx, src/components/common/SegmentedControl.test.tsx, src/components/common/Sidebar.test.tsx
제목/버튼 렌더링, 탭 선택 상태, 메뉴 클릭과 로그아웃 콜백 동작을 검증하는 테스트가 추가됐다.

Sequence Diagram(s)

sequenceDiagram
  participant Sidebar
  participant SegmentedControl
  participant PageHeader

  Sidebar->>Sidebar: onNavigate(item.key)
  SegmentedControl->>SegmentedControl: onValueChange(item.value)
  PageHeader->>PageHeader: onAction()
Loading

관련 이슈: #5 [Feat] 어드민 공통 컴포넌트 제작

제안 라벨: enhancement, frontend, components

제안 리뷰어: 관련 파일 작업 이력 또는 CODEOWNERS 확인 필요

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목이 어드민 공통 컴포넌트 추가라는 핵심 변경과 일치하며 간결합니다.
Linked Issues check ✅ Passed 로고, 사이드바, 상단바(PageHeader), 탭(SegmentedControl), 아이콘 반영까지 #5의 요구사항을 충족합니다.
Out of Scope Changes check ✅ Passed 아이콘 생성기, 공통 유틸, 스캐폴드 정리와 스타일 교체는 공통 컴포넌트 구현을 위한 지원 변경으로 보이며 무관한 변경은 두드러지지 않습니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/admin-common-components-5

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown

CI 결과

항목 결과
TypeScript 🟢 통과
Prettier 🔴 실패
Generated 🟢 통과
ESLint 🟢 통과
Test 🟢 통과
Build 🟢 통과

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (6)
src/components/common/Logo.tsx (1)

24-27: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

로고 전체에 접근 가능한 이름 없음

HeaderDesktopLogoAdminWordmark 모두 aria-hidden="true"로 숨겨져 있어 스크린 리더 사용자에게는 로고가 전혀 노출되지 않습니다. 컨테이너 divrole="img"aria-label(예: "KUSITMS 관리자")을 추가하거나, 실제 링크/버튼으로 감싸는 경우 그쪽에 접근 가능한 이름을 부여하는 것이 좋습니다.

As per path instructions, "**/*.{ts,tsx}: 타입 안정성, React 상태/효과 사용, 접근성, 테스트 필요성을 검토한다."

♿ 접근성 개선 제안
   return (
-    <div className={cn('inline-flex items-center', className)}>
+    <div className={cn('inline-flex items-center', className)} role="img" aria-label="KUSITMS 관리자 로고">
       <HeaderDesktopLogo className={markSizeClassName[size]} aria-hidden="true" />
       <AdminWordmark className={wordmarkSizeClassName[size]} aria-hidden="true" />
     </div>
   )
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/common/Logo.tsx` around lines 24 - 27, The logo wrapper in
Logo should expose an accessible name because both HeaderDesktopLogo and
AdminWordmark are hidden from screen readers. Update the outer div in the Logo
component to provide an accessible role and label, or place the logo inside a
link/button and give that element the name; use the existing className/size
handling to keep the visual layout unchanged.

Source: Path instructions

src/components/common/SegmentedControl.tsx (2)

27-44: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

버튼 요소도 라이브러리 컴포넌트 우선 사용 가이드 대상

여기도 순수 <button>을 사용 중입니다. PageHeader.tsx와 동일한 가이드라인 위반 소지가 있습니다.

As per coding guidelines, "Use @kusitms.com/ui components first, then shadcn/ui, then Base UI when selecting or importing UI components in the KUSITMS admin panel."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/common/SegmentedControl.tsx` around lines 27 - 44, The
SegmentedControl tab trigger is using a raw button element, which should be
replaced per the UI component priority guideline. Update the tab item rendering
in SegmentedControl to use the appropriate component from `@kusitms.com/ui` first
(or the next allowed library option if no direct equivalent exists), and keep
the same role, aria-selected, click handling, and styling behavior currently
applied to the button.

Source: Coding guidelines


22-46: 🎯 Functional Correctness | 🔵 Trivial | ⚖️ Poor tradeoff

탭 패턴 키보드 내비게이션 누락

role="tablist"/role="tab" 마크업은 있으나 화살표 키로 탭 간 이동하는 로직과 roving tabIndex 관리가 없습니다. WAI-ARIA Tabs 패턴을 완전히 따르려면 키보드 내비게이션이 필요합니다.

As per path instructions, "**/*.{ts,tsx}: 타입 안정성, React 상태/효과 사용, 접근성, 테스트 필요성을 검토한다."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/common/SegmentedControl.tsx` around lines 22 - 46, The
SegmentedControl tab UI uses role="tablist"/role="tab" but is missing WAI-ARIA
tabs keyboard support and roving focus management. Update SegmentedControl to
handle arrow-key navigation between items, manage focus with tabIndex so only
the active (or focused) tab is tabbable, and keep the selected state in sync via
value/onValueChange. Use the existing items map, isActive logic, and
onValueChange handler to wire the behavior without changing the public API.

Source: Path instructions

src/components/common/Sidebar.tsx (2)

71-110: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

신규 공통 컴포넌트 테스트 부재

Logo, PageHeader, SegmentedControl, Sidebar 모두 활성 상태 분기, 콜백 배선 등 검증할 로직이 있음에도 테스트가 없습니다. SidebaractiveKey 분기 로직만이라도 렌더링/상호작용 테스트를 추가하는 것을 권장합니다.

As per path instructions, "**/*.{ts,tsx}: 타입 안정성, React 상태/효과 사용, 접근성, 테스트 필요성을 검토한다."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/common/Sidebar.tsx` around lines 71 - 110, `Sidebar`에는
`activeKey`에 따른 활성 상태 렌더링과 `onNavigate`/`onLogout` 콜백 연결을 검증하는 테스트가 없어 회귀를 잡기
어렵습니다. `Sidebar`와 `SidebarNavButton`의 상호작용을 대상으로, 주어진 `activeKey`에 맞는 항목이 활성으로
표시되는지와 클릭 시 `onNavigate(item.key)` 및 로그아웃 버튼 클릭 시 `onLogout`이 호출되는지 렌더링/이벤트 테스트를
추가하세요.

Source: Path instructions


47-62: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

네이티브 <button> 반복 사용

SidebarNavButton과 로그아웃 버튼 모두 순수 HTML <button>입니다. PageHeader/SegmentedControl과 같은 가이드라인 위반이 반복되므로 공통 @kusitms.com/ui Button 컴포넌트가 있는지 확인 후 재사용을 검토해 주세요.

As per coding guidelines, "Use @kusitms.com/ui components first, then shadcn/ui, then Base UI when selecting or importing UI components in the KUSITMS admin panel."

Also applies to: 99-106

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/common/Sidebar.tsx` around lines 47 - 62, The sidebar
currently uses native HTML button elements for SidebarNavButton and the logout
action, which violates the UI component selection guideline. Update the Sidebar
component to use the shared Button component from `@kusitms.com/ui` wherever
possible, keeping the same behavior, active styling, icons, and click handlers.
Check the SidebarNavButton helper and the logout button rendering path, and only
fall back to lower-level primitives if the shared Button cannot support the
required variants.

Source: Coding guidelines

src/components/common/PageHeader.tsx (1)

25-32: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

네이티브 <button> 대신 라이브러리 컴포넌트 사용 검토

액션 버튼이 순수 HTML <button>으로 구현되어 있습니다. @kusitms.com/ui(우선), 없으면 shadcn/ui, 그다음 Base UI 순으로 버튼 컴포넌트를 사용하는 것이 가이드라인에 부합합니다. 디자인 시스템에 해당 스타일의 버튼이 없다면 무시해도 됩니다.

As per coding guidelines, "Use @kusitms.com/ui components first, then shadcn/ui, then Base UI when selecting or importing UI components in the KUSITMS admin panel."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/common/PageHeader.tsx` around lines 25 - 32, The action button
in PageHeader is using a native HTML button instead of the preferred
design-system component. Update the button inside PageHeader to use the
appropriate UI library component, checking `@kusitms.com/ui` first, then
shadcn/ui, then Base UI, and preserve the existing props and styling/behavior.
If no matching design-system button exists for this style, leave it as-is.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/components/common/PageHeader.tsx`:
- Around line 14-19: The PageHeader wrapper is using a hardcoded RGBA border
color instead of a design token. Update the className in PageHeader to replace
border-[rgba(112,115,124,0.16)] with the appropriate border token from
`@kusitms.com/tokens`, keeping the existing layout classes and cn usage intact.

In `@src/components/common/Sidebar.tsx`:
- Around line 74-81: The Sidebar component is using the same hardcoded border
color value twice instead of design tokens. Update the border classes in Sidebar
so they use the shared `@kusitms.com/tokens` color token rather than
rgba(112,115,124,0.16), and if this value is reused elsewhere, extract it into a
common token-based utility/class to keep Sidebar and related components
consistent.

---

Nitpick comments:
In `@src/components/common/Logo.tsx`:
- Around line 24-27: The logo wrapper in Logo should expose an accessible name
because both HeaderDesktopLogo and AdminWordmark are hidden from screen readers.
Update the outer div in the Logo component to provide an accessible role and
label, or place the logo inside a link/button and give that element the name;
use the existing className/size handling to keep the visual layout unchanged.

In `@src/components/common/PageHeader.tsx`:
- Around line 25-32: The action button in PageHeader is using a native HTML
button instead of the preferred design-system component. Update the button
inside PageHeader to use the appropriate UI library component, checking
`@kusitms.com/ui` first, then shadcn/ui, then Base UI, and preserve the existing
props and styling/behavior. If no matching design-system button exists for this
style, leave it as-is.

In `@src/components/common/SegmentedControl.tsx`:
- Around line 27-44: The SegmentedControl tab trigger is using a raw button
element, which should be replaced per the UI component priority guideline.
Update the tab item rendering in SegmentedControl to use the appropriate
component from `@kusitms.com/ui` first (or the next allowed library option if no
direct equivalent exists), and keep the same role, aria-selected, click
handling, and styling behavior currently applied to the button.
- Around line 22-46: The SegmentedControl tab UI uses role="tablist"/role="tab"
but is missing WAI-ARIA tabs keyboard support and roving focus management.
Update SegmentedControl to handle arrow-key navigation between items, manage
focus with tabIndex so only the active (or focused) tab is tabbable, and keep
the selected state in sync via value/onValueChange. Use the existing items map,
isActive logic, and onValueChange handler to wire the behavior without changing
the public API.

In `@src/components/common/Sidebar.tsx`:
- Around line 71-110: `Sidebar`에는 `activeKey`에 따른 활성 상태 렌더링과
`onNavigate`/`onLogout` 콜백 연결을 검증하는 테스트가 없어 회귀를 잡기 어렵습니다. `Sidebar`와
`SidebarNavButton`의 상호작용을 대상으로, 주어진 `activeKey`에 맞는 항목이 활성으로 표시되는지와 클릭 시
`onNavigate(item.key)` 및 로그아웃 버튼 클릭 시 `onLogout`이 호출되는지 렌더링/이벤트 테스트를 추가하세요.
- Around line 47-62: The sidebar currently uses native HTML button elements for
SidebarNavButton and the logout action, which violates the UI component
selection guideline. Update the Sidebar component to use the shared Button
component from `@kusitms.com/ui` wherever possible, keeping the same behavior,
active styling, icons, and click handlers. Check the SidebarNavButton helper and
the logout button rendering path, and only fall back to lower-level primitives
if the shared Button cannot support the required variants.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 41eb928b-2002-4c7a-80aa-a7b7857261b5

📥 Commits

Reviewing files that changed from the base of the PR and between bd38347 and 6828628.

⛔ Files ignored due to path filters (37)
  • public/icons.svg is excluded by !**/*.svg, !**/*.svg
  • src/assets/hero.png is excluded by !**/*.png, !**/*.png
  • src/assets/icons/generated/AddIcon.tsx is excluded by !**/generated/**
  • src/assets/icons/generated/AdminWordmark.tsx is excluded by !**/generated/**
  • src/assets/icons/generated/BlogIcon.tsx is excluded by !**/generated/**
  • src/assets/icons/generated/CancelIcon.tsx is excluded by !**/generated/**
  • src/assets/icons/generated/CheckIcon.tsx is excluded by !**/generated/**
  • src/assets/icons/generated/ChevronDownIcon.tsx is excluded by !**/generated/**
  • src/assets/icons/generated/CompanyIcon.tsx is excluded by !**/generated/**
  • src/assets/icons/generated/DashboardIcon.tsx is excluded by !**/generated/**
  • src/assets/icons/generated/DeleteIcon.tsx is excluded by !**/generated/**
  • src/assets/icons/generated/ErrorIcon.tsx is excluded by !**/generated/**
  • src/assets/icons/generated/IntroductionIcon.tsx is excluded by !**/generated/**
  • src/assets/icons/generated/LogoutIcon.tsx is excluded by !**/generated/**
  • src/assets/icons/generated/MeetupIcon.tsx is excluded by !**/generated/**
  • src/assets/icons/generated/MentoringIcon.tsx is excluded by !**/generated/**
  • src/assets/icons/generated/ReviewIcon.tsx is excluded by !**/generated/**
  • src/assets/icons/generated/UploadIcon.tsx is excluded by !**/generated/**
  • src/assets/icons/generated/index.ts is excluded by !**/generated/**
  • src/assets/icons/svg-preserve/admin-wordmark.svg is excluded by !**/*.svg, !**/*.svg
  • src/assets/icons/svg/add.svg is excluded by !**/*.svg, !**/*.svg
  • src/assets/icons/svg/blog.svg is excluded by !**/*.svg, !**/*.svg
  • src/assets/icons/svg/cancel.svg is excluded by !**/*.svg, !**/*.svg
  • src/assets/icons/svg/check.svg is excluded by !**/*.svg, !**/*.svg
  • src/assets/icons/svg/chevron-down.svg is excluded by !**/*.svg, !**/*.svg
  • src/assets/icons/svg/company.svg is excluded by !**/*.svg, !**/*.svg
  • src/assets/icons/svg/dashboard.svg is excluded by !**/*.svg, !**/*.svg
  • src/assets/icons/svg/delete.svg is excluded by !**/*.svg, !**/*.svg
  • src/assets/icons/svg/error.svg is excluded by !**/*.svg, !**/*.svg
  • src/assets/icons/svg/introduction.svg is excluded by !**/*.svg, !**/*.svg
  • src/assets/icons/svg/logout.svg is excluded by !**/*.svg, !**/*.svg
  • src/assets/icons/svg/meetup.svg is excluded by !**/*.svg, !**/*.svg
  • src/assets/icons/svg/mentoring.svg is excluded by !**/*.svg, !**/*.svg
  • src/assets/icons/svg/review.svg is excluded by !**/*.svg, !**/*.svg
  • src/assets/icons/svg/upload.svg is excluded by !**/*.svg, !**/*.svg
  • src/assets/react.svg is excluded by !**/*.svg, !**/*.svg
  • src/assets/vite.svg is excluded by !**/*.svg, !**/*.svg
📒 Files selected for processing (12)
  • .husky/pre-commit
  • scripts/build-icons.ts
  • src/App.css
  • src/App.tsx
  • src/components/common/Logo.tsx
  • src/components/common/PageHeader.tsx
  • src/components/common/SegmentedControl.tsx
  • src/components/common/Sidebar.tsx
  • src/components/common/index.ts
  • src/components/index.ts
  • src/index.css
  • src/lib/utils.ts
💤 Files with no reviewable changes (1)
  • src/App.css

Comment thread src/components/common/PageHeader.tsx
Comment thread src/components/common/Sidebar.tsx
@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown

CI 결과

항목 결과
TypeScript 🟢 통과
Prettier 🟢 통과
Generated 🟢 통과
ESLint 🟢 통과
Test 🟢 통과
Build 🟢 통과

@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown

CI 결과

항목 결과
TypeScript 🟢 통과
Prettier 🟢 통과
Generated 🟢 통과
ESLint 🟢 통과
Test 🟢 통과
Build 🟢 통과

@KyeongJooni KyeongJooni left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다!! 코멘트 남겼으니 확인부탁드립니다 👍

@KyeongJooni KyeongJooni Jul 3, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

사이드바, 세그먼트 컨트롤, 페이지헤더 분기처리 유닛 테스트 작성 필요할 것 같습니다!!

Comment on lines +25 to +29
<button
type="button"
onClick={onAction}
className="bg-brand-primary text-label-14sb text-fill-normal h-10 rounded-[8px] px-4 py-2 transition-colors hover:brightness-95"
>

@KyeongJooni KyeongJooni Jul 3, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

디자인 시스템에 버튼이 있는것으로 알고 있는데 디자인 시스템에서 import 해서 사용하는게 어떨까요??

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

디자인 시스템에 있는 버튼은 어드민 페이지에서 사용되는 버튼 스펙과 불일치하여 커스텀 했습니다!

@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown

CI 결과

항목 결과
TypeScript 🟢 통과
Prettier 🟢 통과
Generated 🟢 통과
ESLint 🟢 통과
Test 🟢 통과
Build 🟢 통과

@KyeongJooni KyeongJooni left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다!! :)

@leemanjae02 leemanjae02 merged commit 024114a into main Jul 4, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨Feature 새로운 기능

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feat] #5 - 어드민 공통 컴포넌트 제작

2 participants