Skip to content

Conversation

@yuj2n
Copy link
Contributor

@yuj2n yuj2n commented Jun 18, 2025

📌 변경 사항 개요

대시보드 수정 페이지 기초 UI 작업

✨ 요약

대시보드 수정 페이지 기초 UI 작업

📝 상세 내용

🎨style:

  • 돌아가기 버튼 이미지 추가
  • 초대하기 흰색 버튼 이미지 추가
  • 페이지네이션 버튼 이미지 추가
  • 버튼 글씨 색상 추가

✨feat:

  • 컴포넌트 세분화
  • 대시보드 색상 공용화
  • 대시보드 수정 페이지 작성
  • 사용자 정보 수정 컴포넌트 구현

🔧chore:

  • alias 설정 추가(shared 하위 6개 폴더)
  • 폴더 구조 변경 및 경로 축소를 위한 alias 설정 추가(features 하위 dashboard 폴더 접근)

🫧modify:

  • 대시보드 색상 사용하던 곳 코드 수정
  • 헤더 너비 수정 및 프로필 이미지 왼쪽 보더 추가
  • 사용자 프로필 이미지 null 여부 추가

🔗 관련 이슈

🖼️ 스크린샷

20250618_153327.mp4

✅ 체크리스트

  • 브랜치 네이밍 컨벤션을 준수했습니다
  • 커밋 컨벤션을 준수했습니다
  • 코드가 프로젝트의 스타일 가이드라인을 준수합니다

💡 참고 사항

  • 작업 중 features/dashboard 폴더 하위로 대시보드 수정 관련 컴포넌트 옮겨두었습니다!
  • 대시보드 정보 수정 컴포넌트(EditInfo.tsx)의 경우 찬호 님의 모달과 유사하여 참고하여 필요한 부분만 사용하였습니다(이 부분은 추후 공용으로 빼면 간결하고 재사용성이 향상될 것 같습니다.)
  • alias 설정 추가하여 shared 하위 폴더 6개와 features/dashboard 폴더로 바로 접근 가능하게 설정해두었습니다!
  • 아직은 UI 단계라 이메일 쪽은 다음 작업 시 api 연동해보며 적용하도록 하겠습니다
  • 영상보시고 디자인적으로 추가하거나 수정했으면 좋겠는 부분 말씀해주시면 감사하겠습니당

Summary by CodeRabbit

  • 신규 기능
    • 대시보드 정보, 멤버, 초대 내역을 수정할 수 있는 새로운 편집 페이지와 컴포넌트가 추가되었습니다.
    • 대시보드 생성 및 색상 선택, 초대 내역 및 멤버 목록 관리 UI가 도입되었습니다.
  • 스타일
    • 버튼 및 텍스트 색상에 대한 새로운 CSS 유틸리티 클래스가 추가되었습니다.
    • 헤더 및 일부 UI 요소의 스타일이 개선되었습니다.
  • 기타
    • 대시보드 색상 팔레트와 목업 멤버 데이터가 추가되었습니다.
    • 내부 경로 및 타입 관리가 개선되었습니다.

@yuj2n yuj2n added this to the 2차 구현 기간 milestone Jun 18, 2025
@yuj2n yuj2n self-assigned this Jun 18, 2025
@yuj2n yuj2n added ✨Feat 기능 개발 💄Modify 자잘한 수정 🔧Chore 설정, 빌드 변경 labels Jun 18, 2025
@coderabbitai
Copy link

coderabbitai bot commented Jun 18, 2025

## Walkthrough

여러 개의 새로운 대시보드 편집 관련 컴포넌트가 추가되고, 기존 편집 페이지가 이들 컴포넌트를 활용하도록 리팩토링되었습니다. 공통 색상 상수와 목업 멤버 데이터가 도입되었으며, 타입 정의 및 CSS 유틸리티 클래스가 보완되었습니다. 경로 alias도 확장되었습니다.

## Changes

| 파일/경로 요약                                                                                  | 변경 내용 요약                                                                                           |
|--------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| src/app/dashboard/[id]/edit/components/EditInfo.tsx<br>src/app/dashboard/[id]/edit/components/EditInvitation.tsx<br>src/app/dashboard/[id]/edit/components/EditMember.tsx | 대시보드 정보, 초대, 멤버 편집용 단순 React 컴포넌트 3종 신규 추가                         |
| src/app/dashboard/[id]/edit/page.tsx                                                             | 편집 페이지 레이아웃 및 UI 전면 리팩토링, 신규 컴포넌트 3종 적용, 버튼 및 토스트 메시지 변경      |
| src/app/features/dashboard/components/edit/EditInfo.tsx                                          | 대시보드 생성/편집 폼 기능 컴포넌트 신규 추가, 색상 선택 및 API 연동 포함                      |
| src/app/features/dashboard/components/edit/EditInvitation.tsx                                    | 초대 내역 및 초대 버튼, 멤버 리스트 표시 컴포넌트 신규 추가                                   |
| src/app/features/dashboard/components/edit/EditMember.tsx                                        | 멤버 리스트와 삭제 버튼 표시 컴포넌트 신규 추가                                              |
| src/app/features/dashboard/components/edit/mockMember.js                                         | 목업 멤버 데이터 배열(mockMembers) 신규 추가                                                 |
| src/app/globals.css                                                                             | `.Text-btn` 텍스트 색상 유틸리티 클래스 신규 추가                                            |
| src/app/shared/components/common/UserInfo.tsx                                                    | UserInfoProps의 imageUrl 타입을 string → string \| null로 변경                              |
| src/app/shared/components/common/header/Header.tsx                                               | 헤더 UI 일부 스타일 및 마크업 개선, 불필요한 구분자 제거, border 스타일 변경                 |
| src/app/shared/components/common/sidebar/modal/CreateDashboardModal.tsx                          | 상수 및 타입 import 경로 alias로 변경, 색상 상수 외부화, 코드 정렬 개선                      |
| src/app/shared/constants/colors.ts                                                               | 대시보드 색상 상수(DASHBOARD_COLORS) 배열 신규 추가                                         |
| tsconfig.json                                                                                   | @/types/*, @constants/*, @dashboard/* 등 경로 alias 신규 추가                               |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
    participant User
    participant EditPage
    participant EditInfo
    participant EditMember
    participant EditInvitation

    User->>EditPage: 대시보드 편집 페이지 접속
    EditPage->>EditInfo: 정보 편집 컴포넌트 렌더링
    EditPage->>EditMember: 멤버 편집 컴포넌트 렌더링
    EditPage->>EditInvitation: 초대 편집 컴포넌트 렌더링
    User->>EditInfo: 대시보드 정보 입력 및 저장
    User->>EditMember: 멤버 관리(삭제 등)
    User->>EditInvitation: 초대 관리(취소 등)

Possibly related PRs

Suggested labels

🎨Style, 📁Chore

Suggested reviewers

  • LeeCh0129
  • dkslel1225

Poem

🐇
새하얀 토끼가 춤을 추네,
대시보드에 봄이 오네!
색상 팔레트, 멤버 리스트,
초대장도 반짝이지.
코드 속에 피어난 변화,
우리 모두 환영하지!
🥕✨


<!-- walkthrough_end -->
<!-- This is an auto-generated comment: all tool run failures by coderabbit.ai -->

> [!WARNING]
> There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.
> 
> <details>
> <summary>🔧 ESLint</summary>
> 
> > If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.
> 
> npm error Exit handler never called!
> npm error This is an error with npm itself. Please report this error at:
> npm error   <https://github.com/npm/cli/issues>
> npm error A complete log of this run can be found in: /.npm/_logs/2025-06-18T06_42_13_683Z-debug-0.log
> 
> 
> 
> </details>

<!-- end of auto-generated comment: all tool run failures by coderabbit.ai -->


---

<details>
<summary>📜 Recent review details</summary>

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


<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 0184490e064126c0f211c889de6da98d6a713c58 and d5d176a9a4c24b6d42f392f539c06efdfaf43888.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `src/app/shared/components/common/header/Header.tsx` (3 hunks)

</details>

<details>
<summary>🚧 Files skipped from review as they are similar to previous changes (1)</summary>

* src/app/shared/components/common/header/Header.tsx

</details>

</details>
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- finishing_touch_checkbox_start -->

<details open="true">
<summary>✨ Finishing Touches</summary>

- [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> 📝 Generate Docstrings

</details>

<!-- finishing_touch_checkbox_end -->
<!-- tips_start -->

---



<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=CoPlay-FE/coplan&utm_content=75):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Explain this complex logic.`
  - `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. Examples:
  - `@coderabbitai explain this code block.`
  -	`@coderabbitai modularize this function.`
- 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 src/utils.ts and explain its main purpose.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

### Support

Need help? Create a ticket on our [support page](https://www.coderabbit.ai/contact-us/support) for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### 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.

### CodeRabbit Configuration File (`.coderabbit.yaml`)

- You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository.
- Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) 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`

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->

Copy link

@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

🧹 Nitpick comments (5)
src/app/shared/constants/colors.ts (1)

3-9: 대시보드 컬러 팔레트 상수 정의
중앙 집중형 색상 상수로 일관된 테마 적용이 용이해졌습니다. DASHBOARD_COLORSas const로 지정하여 변경 불가능한 배열로 만드는 방안을 고려해볼 수 있습니다.

src/app/features/dashboard/components/edit/mockMember.js (1)

16-19: 불필요한 공백 제거

'나연 ' 닉네임 문자열 끝에 공백이 포함돼 있습니다. 검색·정렬 시 예상치 못한 버그를 유발할 수 있으니 제거해주세요.

-    nickname: '나연 ',
+    nickname: '나연',
tsconfig.json (1)

29-32: paths 우선순위에 따른 의도치 않은 매핑 가능성

"@/*": ["./src/*"] 규칙이 가장 먼저 매칭됩니다.
추가하신 "@/types/*" 패턴이 "@/*"보다 뒤에 위치해도 TypeScript는 더 구체적인 패턴을 우선 적용하므로 실질적 문제는 없지만, 가독성을 위해 일반적으로 generic 패턴은 가장 마지막에 두는 것을 권장합니다.

src/app/shared/components/common/sidebar/modal/CreateDashboardModal.tsx (1)

48-51: 엔드포인트 문자열 하드코딩 최소화

다른 모달/페이지에서도 동일한 경로를 사용할 경우를 대비해 API 엔드포인트를 상수화해 두면 유지보수성이 올라갑니다.

-      const response = await api.post(
-        `/${process.env.NEXT_PUBLIC_TEAM_ID}/dashboards`,
-        formData,
-      )
+      const DASHBOARD_PATH = `/${process.env.NEXT_PUBLIC_TEAM_ID}/dashboards`
+      const response = await api.post(DASHBOARD_PATH, formData)
src/app/shared/components/common/header/Header.tsx (1)

46-47: 버튼 테두리 클래스 제거로 UI 일관성 영향 점검

border 클래스를 제거하면서도 Border-btn 유틸리티가 그대로 남아 있어 실질적으로 시각적 변화가 없을 수도 있습니다. 의도된 스타일 변경인지, 혹은 중복 정의인지 다시 확인해 주세요.

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 08f29f5 and 0184490.

⛔ Files ignored due to path filters (4)
  • public/images/back.png is excluded by !**/*.png
  • public/images/invitation-white.png is excluded by !**/*.png
  • public/images/next.png is excluded by !**/*.png
  • public/images/prev.png is excluded by !**/*.png
📒 Files selected for processing (14)
  • src/app/dashboard/[id]/edit/components/EditInfo.tsx (1 hunks)
  • src/app/dashboard/[id]/edit/components/EditInvitation.tsx (1 hunks)
  • src/app/dashboard/[id]/edit/components/EditMember.tsx (1 hunks)
  • src/app/dashboard/[id]/edit/page.tsx (1 hunks)
  • src/app/features/dashboard/components/edit/EditInfo.tsx (1 hunks)
  • src/app/features/dashboard/components/edit/EditInvitation.tsx (1 hunks)
  • src/app/features/dashboard/components/edit/EditMember.tsx (1 hunks)
  • src/app/features/dashboard/components/edit/mockMember.js (1 hunks)
  • src/app/globals.css (1 hunks)
  • src/app/shared/components/common/UserInfo.tsx (1 hunks)
  • src/app/shared/components/common/header/Header.tsx (4 hunks)
  • src/app/shared/components/common/sidebar/modal/CreateDashboardModal.tsx (2 hunks)
  • src/app/shared/constants/colors.ts (1 hunks)
  • tsconfig.json (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (4)
src/app/shared/components/common/header/Header.tsx (1)
src/app/shared/components/common/header/Collaborator/CollaboratorList.tsx (1)
  • CollaboratorList (25-61)
src/app/dashboard/[id]/edit/page.tsx (1)
src/app/shared/lib/toast.ts (2)
  • showSuccess (3-3)
  • showError (4-4)
src/app/features/dashboard/components/edit/EditMember.tsx (1)
src/app/shared/components/common/UserInfo.tsx (1)
  • UserInfo (11-18)
src/app/features/dashboard/components/edit/EditInfo.tsx (2)
src/app/shared/types/dashboard.ts (1)
  • CreateDashboardRequest (31-34)
src/app/shared/constants/colors.ts (1)
  • DASHBOARD_COLORS (3-9)
🔇 Additional comments (20)
src/app/globals.css (1)

43-45: 유틸리티 클래스 .Text-btn 추가
Light/Dark 테마에 맞춘 텍스트 버튼 컬러가 일관성 있게 정의되었습니다.

src/app/dashboard/[id]/edit/components/EditInfo.tsx (1)

1-3: EditInfo 컴포넌트 기본 구현 확인
대시보드 수정 페이지의 placeholder 컴포넌트가 간결하고 명확하게 작성되었습니다.

src/app/dashboard/[id]/edit/components/EditInvitation.tsx (1)

1-3: EditInvitation 컴포넌트 기본 구현 확인
대시보드 초대 수정 페이지의 placeholder 컴포넌트가 간결하고 명확하게 작성되었습니다.

src/app/shared/components/common/UserInfo.tsx (1)

5-8: imageUrl 타입 변경에 따른 Avatar 처리 검증 요청
imageUrl?: string | null로 변경되어 null이 전달될 수 있습니다. Avatar 컴포넌트가 null 값을 안전하게 처리하는지 확인이 필요합니다.

src/app/dashboard/[id]/edit/components/EditMember.tsx (1)

1-3: 중복 컴포넌트 존재 여부 확인 필요

동일한 이름(EditMember)의 실질 구현이 src/app/features/dashboard/components/edit/EditMember.tsx에도 존재합니다.
폴더 구조상 Next 13/14의 app 라우터 우선순위와 alias(@dashboard/*) 해석이 겹치면 어떤 컴포넌트가 빌드에 포함될지 불명확할 수 있습니다. 실제 사용처를 점검하고 placeholder 컴포넌트를 제거하거나 파일명을 변경하는 편이 안전합니다.

src/app/shared/components/common/sidebar/modal/CreateDashboardModal.tsx (1)

3-5: alias 변경으로 ESLint 경로 오류가 발생하지 않는지 확인

절대 경로 alias로 수정하면서 ESLint import/resolver 설정이 같이 업데이트됐는지 확인이 필요합니다. 설정이 누락되면 import/no-unresolved 경고가 발생할 수 있습니다.

src/app/dashboard/[id]/edit/page.tsx (3)

10-16: 불필요한 핸들러 및 토스트 유틸리티가 그대로 남아 있습니다
handleSuccess, handleError, 그리고 그에 대응하는 showSuccess, showError는 정의되었지만 실제 JSX 트리에 바인딩되지 않고 있습니다. 사용 계획이 없다면 제거하거나, 추후 기능(예: 저장/삭제 완료 알림)에 연결해 주세요. 미사용 코드가 남으면 ESLint 경고가 발생하고 유지보수성이 저하됩니다.
[ suggest_essential_refactor ]


20-26: 브라우저 API 직접 호출 대신 Next.js router 사용 권장
window.history.back() 대신 const router = useRouter(); router.back();을 사용하면 SSR 환경에서 타입 안정성과 테스트 용이성이 향상됩니다.

-import Image from 'next/image'
+import Image from 'next/image'
+import { useRouter } from 'next/navigation'
...
-      <div
-        className="flex cursor-pointer items-center gap-12 p-16"
-        onClick={() => window.history.back()}
-      >
+      const router = useRouter()
+      <div
+        className="flex cursor-pointer items-center gap-12 p-16"
+        onClick={() => router.back()}
+      >

[ suggest_optional_refactor ]


32-34: 삭제 버튼이 동작하지 않습니다
‘대시보드 삭제하기’ 버튼에 onClick 핸들러(또는 formtype="submit" 동작)가 없어 UI 만 존재합니다.

  • 실제 삭제 로직이 미구현된 ‘임시 버튼’이라면 TODO 주석을 추가해 의도를 명확히 하세요.
  • 구현할 계획이라면 API 호출 후 리다이렉트, 오류 처리, 토스트 노출 등을 연결하시기 바랍니다.
    또한 form 밖에 위치하므로 예상치 못한 submit 동작을 방지하려면 type="button" 명시가 필요합니다.
    [ request_verification ]
src/app/features/dashboard/components/edit/EditInvitation.tsx (4)

1-6: 경로 alias 사용이 파일마다 불일치합니다
본 파일은 @components/common/UserInfo를, 다른 컴포넌트(EditMember.tsx)는 @/app/shared/components/common/UserInfo를 사용합니다. alias 전략을 통일하지 않으면 추후 경로 변경 시 일부 파일만 깨질 위험이 있습니다. 한 가지 방식으로 통일해 주세요.
[ suggest_essential_refactor ]


21-23: 이미지 경로 뒤 공백으로 404 위험
src="/images/next.png " 처럼 파일명 뒤에 공백이 포함되어 있습니다. S3 · CDN · Vercel 배포 시 공백은 다른 경로로 인코딩되어 404를 유발할 수 있으니 제거해주세요.

-<Image src="/images/next.png " alt="다음" width={36} height={36} />
+<Image src="/images/next.png" alt="다음" width={36} height={36} />

[ raise_critical_issue ]


47-57: 중복 key 전달 및 index 사용 주의
이미 부모 divkey={index}를 전달했는데, 자식 <UserInfo>에도 동일한 key를 또 전달하고 있습니다. 중복 key는 불필요하며 React devtools에서 경고를 유발할 수 있습니다. 또한 리스트 순서가 변할 가능성이 있다면 index key는 재렌더 성능 문제가 생길 수 있으므로 고유 id 사용을 고려하세요.
[ suggest_optional_refactor ]


42-64: <form> 요소를 단순 레이아웃 컨테이너로 사용 중
해당 form은 실제 submit 이벤트나 입력 필드가 없으므로 시맨틱 관점에서 부적절합니다.

  • 단순 레이아웃이면 div로 교체
  • 추후 ‘초대 취소’ 일괄 submit 기능이 필요하다면 버튼 type·submit 핸들러 추가
    [ request_verification ]
src/app/features/dashboard/components/edit/EditMember.tsx (3)

4-4: UserInfo 경로 alias 불일치
EditInvitation.tsx와 동일하게 alias를 통일하세요.
[ suggest_optional_refactor ]


18-20: 이미지 경로 뒤 공백 오류 반복
next.png 뒤 공백을 삭제하세요. 동일 패턴이 여러 곳에서 발견됩니다.
[ duplicate_comment ]


28-37: index key 사용 및 중복 key 전달
EditInvitation.tsx와 동일한 문제입니다. 고유 id (예: member.id)로 key를 대체하고, 자식 컴포넌트에는 key를 중복 전달하지 마세요.
[ duplicate_comment ]

src/app/features/dashboard/components/edit/EditInfo.tsx (4)

3-4: useEffect 미사용 import
useEffect를 import했으나 코드에서 사용하지 않습니다. 제거해 주세요.
[ suggest_nitpick ]


30-55: ‘대시보드 편집’ 페이지에서 POST / 생성 로직 사용
현재 컴포넌트 이름이 EditInfo이고 편집 페이지에서 사용되지만, 실제 API 호출은 새 대시보드를 생성(POST)합니다.

  • 편집(use PUT/PATCH /dashboards/:id)과 생성 로직을 분리하거나
  • props로 모드를 받아 조건부로 호출 메서드를 분기시키는 것이 명확합니다.
    사용자 경험 관점에서도 버튼 텍스트 ‘변경’과 헤더 ‘새로운 대시보드’가 상충하므로 문구를 일관성 있게 조정해 주세요.
    [ suggest_essential_refactor ]

62-64: 헤더 문구가 기능과 일치하지 않습니다
<h2>새로운 대시보드</h2>는 생성 폼에 어울리는 문구입니다. 편집 페이지라면 ‘대시보드 정보 수정’ 등으로 변경하는 것이 적절합니다.
[ suggest_nitpick ]


91-103: 체크 아이콘 컨테이너에 flex 누락
선택된 색상 표시 divitems-center justify-center 클래스가 있으나 flex가 없어서 정렬이 적용되지 않습니다.

-<div className="relative size-24 items-center justify-center">
+<div className="relative flex size-24 items-center justify-center">

[ suggest_optional_refactor ]

Copy link

@Insung-Jo Insung-Jo left a comment

Choose a reason for hiding this comment

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

UI 작업 수고 하셨습니다! 👍 👍

<div className="BG-gray">
<div
className="flex cursor-pointer items-center gap-12 p-16"
onClick={() => window.history.back()}

Choose a reason for hiding this comment

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

widow.history.back()은 Next에 useRouter에서 동일하게 back() 이라는 함수가 존재합니다! 동작은 동일하지만 일관성을 위해서 해당 함수를 사용하는 게 좋을 거 같습니다! 공식 문서

import { useRouter } from 'next/navigation'

export default function Page() {
  const router = useRouter()

  return (
    <button type="button" onClick={() => router.back()}>
      Click here to go back
    </button>
  )
}

Copy link
Contributor Author

Choose a reason for hiding this comment

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

적용했습니다~

Copy link

@LeeCh0129 LeeCh0129 left a comment

Choose a reason for hiding this comment

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

대시보드 수정 페이지 UI작업 수고많으셨어요~ 👍

Copy link
Contributor

@dkslel1225 dkslel1225 left a comment

Choose a reason for hiding this comment

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

대시보드 UI 작업 수고하셨습니다~~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🔧Chore 설정, 빌드 변경 ✨Feat 기능 개발 💄Modify 자잘한 수정

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants