Skip to content

Comments

[feature] 지원자 목록 디자인 적용#654

Merged
lepitaaar merged 8 commits intodevelop-fefrom
feature/#653-applicant-list-design-MOA-158
Aug 15, 2025
Merged

[feature] 지원자 목록 디자인 적용#654
lepitaaar merged 8 commits intodevelop-fefrom
feature/#653-applicant-list-design-MOA-158

Conversation

@seongwon030
Copy link
Member

@seongwon030 seongwon030 commented Aug 15, 2025

#️⃣연관된 이슈

ex) #653

📝작업 내용

이번 PR에서 작업한 내용을 간략히 설명해주세요(이미지/동영상 첨부 가능)

체크 표시

스크린샷 2025-08-16 00 04 36
  • 클릭 시 svg 아이콘으로 나옵니다.

헤더 스타일

스크린샷 2025-08-16 00 05 49
  • borderLeft prop을 설정하여 선택적으로 설정 가능합니다.
  • width또한 prop으로 설정했습니다.
  • 가상 요소 활용해서 heigth의 40% 정도로 borderLeft 적용했습니다.

메모 왼쪽 정렬

스크린샷 2025-08-16 00 07 44
  • memo prop을 설정하여 boolean 값으로 메모인지 판단 후, textAlign 설정 가능합니다.

중점적으로 리뷰받고 싶은 부분(선택)

리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요

ex) 메서드 XXX의 이름을 더 잘 짓고 싶은데 혹시 좋은 명칭이 있을까요?

논의하고 싶은 부분(선택)

논의하고 싶은 부분이 있다면 작성해주세요.

🫡 참고사항

Summary by CodeRabbit

  • New Features
    • 필터 셀렉트에 커스텀 화살표와 래퍼 적용으로 일관된 드롭다운 표시.
    • 테이블 헤더에 열 폭/좌측 구분선 옵션 추가, 메모 열 전용 정렬/패딩 제공.
    • 커스텀 스타일 체크박스 도입으로 선택 상태가 선명하게 표시.
  • Style
    • 셀렉트/테이블의 배경, 테두리, 타이포그래피 개선으로 가독성 향상.
    • 헤더·컬럼 정렬 일관성 강화.
  • Bug Fixes
    • 검색 입력 변경 시 키워드가 즉시 반영되어 필터링 동작이 안정화.

@seongwon030 seongwon030 self-assigned this Aug 15, 2025
@seongwon030 seongwon030 added 🎨 Design 마크업 & 스타일링 💻 FE Frontend labels Aug 15, 2025
@vercel
Copy link

vercel bot commented Aug 15, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Preview Comments Updated (UTC)
moadong Ready Ready Preview Comment Aug 15, 2025 3:09pm

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Aug 15, 2025

Warning

.coderabbit.yaml has a parsing error

The CodeRabbit configuration file in this repository has a parsing error and default settings were used instead. Please fix the error(s) in the configuration file. You can initialize chat with CodeRabbit to get help with the configuration file.

💥 Parsing errors (1)
Validation error: Invalid regex pattern for base branch. Received: "**" at "reviews.auto_review.base_branches[0]"
⚙️ Configuration instructions
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Walkthrough

ApplicantsTab UI styling is refactored: custom-styled selects with arrow wrapper, new checkbox with check icon, and updated table header/column props (width, borderLeft, isMemo). ApplicantsTab.tsx is wired to use these new styled components, with widths and memo-specific styling applied.

Changes

Cohort / File(s) Summary
ApplicantsTab styles overhaul
frontend/src/pages/AdminPage/tabs/ApplicantsTab/ApplicantsTab.styles.ts
Added SelectWrapper and Arrow for custom select UI; introduced ApplicantTableCheckbox with check icon; enhanced ApplicantTableHeader to accept width/borderLeft/isMemo and updated typography/alignment; ApplicantTableCol accepts isMemo; header wrapper adds borders; adjusted select/input appearance.
ApplicantsTab component wiring
frontend/src/pages/AdminPage/tabs/ApplicantsTab/ApplicantsTab.tsx
Adopted new styled components (SelectWrapper, Arrow, ApplicantTableCheckbox); applied header widths and optional left borders; memo column uses isMemo; maintained filtering/status rendering; added keyword onChange; minor layout/formatting updates.

Sequence Diagram(s)

sequenceDiagram
  actor User
  participant ApplicantsTab
  participant Styled as Styled Components
  participant State as Local State

  User->>ApplicantsTab: Type in search / change filters
  ApplicantsTab->>State: setKeyword / update filter state
  ApplicantsTab->>Styled: Render SelectWrapper + Arrow, Table, Checkbox
  Styled-->>User: Updated UI (custom selects, headers, checkbox)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~15 minutes

Assessment against linked issues

Objective Addressed Explanation
체크박스 이미지로 변경 (MOA-158)
전체/제출순 필터링 박스 디자인 변경 (MOA-158)
지원자 목록 헤더 스타일 변경 (MOA-158)

Possibly related issues

Possibly related PRs

Suggested labels

✨ Feature

Suggested reviewers

  • oesnuj
  • lepitaaar
  • Zepelown

Tip

🔌 Remote MCP (Model Context Protocol) integration is now available!

Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats.

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/#653-applicant-list-design-MOA-158

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

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

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🔭 Outside diff range comments (1)
frontend/src/pages/AdminPage/tabs/ApplicantsTab/ApplicantsTab.tsx (1)

150-163: 날짜 포맷팅 로직을 유틸 함수로 분리 권장

날짜 포맷팅 로직이 JSX 내부에 IIFE로 구현되어 있어 가독성이 떨어집니다. 별도의 유틸 함수로 분리하는 것이 좋습니다.

먼저 날짜 포맷팅 유틸 함수를 생성:

// utils/dateFormat.ts
export const formatDateToYYYYMMDD = (dateString: string): string => {
  const date = new Date(dateString);
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  return `${year}-${month}-${day}`;
};

그리고 컴포넌트에서 사용:

+import { formatDateToYYYYMMDD } from '@/utils/dateFormat';

 <Styled.ApplicantTableCol>
-  {
-    // createdAt을 yyyy-mm-dd 형식으로 변환
-    // 임시로.. 나중에 변경해야함
-    (() => {
-      const date = new Date(item.createdAt);
-      const year = date.getFullYear();
-      const month = String(date.getMonth() + 1).padStart(
-        2,
-        '0',
-      );
-      const day = String(date.getDate()).padStart(2, '0');
-      return `${year}-${month}-${day}`;
-    })()
-  }
+  {formatDateToYYYYMMDD(item.createdAt)}
 </Styled.ApplicantTableCol>
🧹 Nitpick comments (6)
frontend/src/pages/AdminPage/tabs/ApplicantsTab/ApplicantsTab.styles.ts (2)

86-94: 이미지 대신 SVG 아이콘 컴포넌트 사용 권장

Arrow 컴포넌트가 이미지 태그를 사용하고 있는데, SVG 아이콘을 React 컴포넌트로 직접 임포트하여 사용하는 것이 더 나은 방법입니다. 이렇게 하면 스타일링이 더 유연해지고 네트워크 요청을 줄일 수 있습니다.

-export const Arrow = styled.img`
+import { ReactComponent as SelectArrowIcon } from '@/assets/images/icons/selectArrow.svg';
+
+export const Arrow = styled(SelectArrowIcon)`
   position: absolute;
   right: 12px;
   top: 50%;
   transform: translateY(-50%);
   width: 12px;
   height: 12px;
   pointer-events: none;
+  fill: currentColor;
 `;

그리고 ApplicantsTab.tsx에서도 다음과 같이 수정:

-<Styled.Arrow src={selectIcon} />
+<Styled.Arrow />

142-142: width prop의 타입 처리 개선 필요

width prop이 number나 string을 받을 수 있는데, number인 경우에만 'px'를 추가하고 string인 경우는 그대로 사용하도록 개선하면 더 유연한 스타일링이 가능합니다.

-  width: ${({ width }) => (width ? `${width}px` : 'auto')};
+  width: ${({ width }) => {
+    if (!width) return 'auto';
+    return typeof width === 'number' ? `${width}px` : width;
+  }};
frontend/src/pages/AdminPage/tabs/ApplicantsTab/ApplicantsTab.tsx (4)

74-86: 필터 선택 기능이 구현되지 않음

"전체"와 "제출순" 선택 옵션이 있지만 실제로 필터링이나 정렬 로직이 구현되어 있지 않습니다. 사용자가 옵션을 변경해도 아무 동작이 일어나지 않을 것입니다.

필터링과 정렬 기능을 구현하시겠습니까? 필터 상태 관리와 정렬 로직을 추가해드릴 수 있습니다.


140-148: 메모 렌더링 로직 간소화 가능

메모가 없을 때의 처리를 더 간결하게 표현할 수 있습니다.

 <Styled.ApplicantTableCol isMemo={true}>
-  {item.memo && item.memo.length > 0 ? (
-    item.memo
-  ) : (
-    <span style={{ color: '#989898' }}>
-      메모를 입력하지 않았습니다.
-    </span>
-  )}
+  {item.memo?.length > 0 ? (
+    item.memo
+  ) : (
+    <span style={{ color: '#989898' }}>
+      메모를 입력하지 않았습니다.
+    </span>
+  )}
 </Styled.ApplicantTableCol>

121-121: 인라인 스타일 대신 styled-component 속성 사용 권장

cursor: pointer 스타일을 인라인으로 적용하는 대신 styled-component에서 처리하는 것이 일관성 있습니다.

ApplicantsTab.styles.ts의 ApplicantTableRow에 다시 추가:

 export const ApplicantTableRow = styled.tr`
   border-bottom: 1px solid #f0f0f0;
   text-align: center;
+  cursor: pointer;

   &:hover {
     background: #f7faff;
   }
 `;

그리고 여기서 인라인 스타일 제거:

 <Styled.ApplicantTableRow
   key={index}
   onClick={() => navigate(`/admin/applicants/${item.id}`)}
-  style={{ cursor: 'pointer' }}
 >

124-128: 체크박스 선택 상태 관리 로직 누락

체크박스가 렌더링되지만 실제 선택 상태를 관리하는 로직이 없습니다. 체크된 항목을 추적하거나 일괄 작업을 수행할 수 없습니다.

체크박스 선택 상태 관리 로직을 구현하시겠습니까? 선택된 항목 추적과 전체 선택/해제 기능을 추가해드릴 수 있습니다.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 596c4dc and c9b1285.

⛔ Files ignored due to path filters (2)
  • frontend/src/assets/images/icons/checkBox.svg is excluded by !**/*.svg
  • frontend/src/assets/images/icons/selectArrow.svg is excluded by !**/*.svg
📒 Files selected for processing (2)
  • frontend/src/pages/AdminPage/tabs/ApplicantsTab/ApplicantsTab.styles.ts (3 hunks)
  • frontend/src/pages/AdminPage/tabs/ApplicantsTab/ApplicantsTab.tsx (6 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
frontend/**/*.{ts,tsx}

📄 CodeRabbit Inference Engine (frontend/.cursorrules)

frontend/**/*.{ts,tsx}: Replace magic numbers with named constants for clarity.
Replace complex or nested ternary operators with if/else statements or IIFEs for readability.
Assign complex boolean conditions to named variables.
Use consistent return types for similar functions and hooks.
Avoid hidden side effects; functions should only perform actions implied by their signature (Single Responsibility Principle).
Use unique, descriptive names for custom wrappers and functions to avoid ambiguity.
Define constants near related logic or ensure names link them clearly.

Files:

  • frontend/src/pages/AdminPage/tabs/ApplicantsTab/ApplicantsTab.styles.ts
  • frontend/src/pages/AdminPage/tabs/ApplicantsTab/ApplicantsTab.tsx
frontend/**/*.tsx

📄 CodeRabbit Inference Engine (frontend/.cursorrules)

frontend/**/*.tsx: Abstract complex logic/interactions into dedicated components or higher-order components (HOCs).
Separate significantly different conditional UI/logic into distinct components.
Colocate simple, localized logic or use inline definitions to reduce context switching.
Choose field-level or form-level cohesion based on form requirements.
Break down broad state management into smaller, focused hooks or contexts.
Use component composition instead of props drilling.

Files:

  • frontend/src/pages/AdminPage/tabs/ApplicantsTab/ApplicantsTab.tsx
🧬 Code Graph Analysis (1)
frontend/src/pages/AdminPage/tabs/ApplicantsTab/ApplicantsTab.tsx (1)
frontend/src/types/applicants.ts (1)
  • Applicant (27-33)

Copy link
Contributor

@lepitaaar lepitaaar left a comment

Choose a reason for hiding this comment

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

좋습니다

@lepitaaar lepitaaar merged commit 30fea3d into develop-fe Aug 15, 2025
5 checks passed
@seongwon030 seongwon030 linked an issue Aug 16, 2025 that may be closed by this pull request
3 tasks
@lepitaaar lepitaaar deleted the feature/#653-applicant-list-design-MOA-158 branch October 21, 2025 08:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🎨 Design 마크업 & 스타일링 💻 FE Frontend

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[feature] MOA-158 지원자 목록 디자인 입히기

2 participants