Skip to content

[feature] 활동사진 편집 탭 모바일 화면 구현 - #1842

Open
suhyun113 wants to merge 17 commits into
refactor/#1840-add-admin-tab-router-MOA-1046from
feature/#1839-photo-edit-mobile-MOA-1044
Open

[feature] 활동사진 편집 탭 모바일 화면 구현#1842
suhyun113 wants to merge 17 commits into
refactor/#1840-add-admin-tab-router-MOA-1046from
feature/#1839-photo-edit-mobile-MOA-1044

Conversation

@suhyun113

@suhyun113 suhyun113 commented Jul 20, 2026

Copy link
Copy Markdown
Collaborator

#️⃣연관된 이슈

#1839

📝작업 내용

구현 내용

활동사진 편집 탭(photo-edit)의 모바일 화면을 구현하고, AdminTabAdapter 패턴으로 데스크탑/모바일 분기를 통일했습니다.

  • PhotoEditTabMobile 구현 — 활동사진 추가·삭제·드래그 정렬 (모바일 레이아웃)
  • PhotoEditTab desktop-only화 — useDevice 분기 제거
  • AdminRoutes에서 photo-editAdminTabAdapter로 감싸 라우트 레벨에서 분기

화면 케이스

사진 없음 업로드 중 업로드 실패 15장 꽉 찬 상태
사진 없음 업로드 중 업로드 실패 15장 꽉 참

🫡 참고사항

  • base 브랜치: refactor/#1840-add-admin-tab-router-MOA-1046 (AdminTabAdapter 도입 PR)
  • 데스크탑 그리드 4열 변경, 하드코딩 색상 → 테마 토큰 교체도 포함

Summary by CodeRabbit

  • 새 기능

    • 모바일·태블릿에서 활동 사진을 업로드, 삭제, 재정렬하고 저장할 수 있는 사진 편집 화면을 제공합니다.
    • 사진 편집 화면에서 이미지 그리드와 업로드 영역을 모바일 환경에 맞게 표시합니다.
  • 개선 사항

    • 모바일 클럽 정보·상세 정보 편집 화면의 하단 여백과 안전영역 대응을 개선했습니다.
    • 사진 편집 화면의 색상과 레이아웃을 일관된 디자인으로 정비했습니다.
    • 사진 목록을 4열 그리드로 표시합니다.

@reviewer-harry

reviewer-harry Bot commented Jul 20, 2026

Copy link
Copy Markdown

Claude encountered an error after 8s —— View job


I'll analyze this and get back to you.

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

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 Plus

Run ID: 596c7921-3e77-44c2-8f8a-b4fe9b6833a0

📥 Commits

Reviewing files that changed from the base of the PR and between 40c1f36 and 1a3f965.

📒 Files selected for processing (1)
  • frontend/src/pages/AdminPage/tabs/PhotoEditTab/PhotoEditTabMobile.tsx

Walkthrough

모바일 관리자 사진 편집 경로를 AdminTabAdapter 기반으로 분기하고, PhotoEditTabMobile 및 모바일 스타일을 추가했습니다. 기존 사진·정보 편집 화면의 여백과 테마 색상, 그리드 설정을 조정하고 관련 모바일 문서를 갱신했습니다.

Changes

모바일 관리자 편집

Layer / File(s) Summary
사진 편집 모바일 라우팅과 동작
frontend/src/pages/AdminPage/AdminRoutes.tsx, frontend/src/pages/AdminPage/tabs/PhotoEditTab/PhotoEditTabMobile.tsx
photo-edit 경로를 데스크톱과 모바일 컴포넌트로 분기하고, 모바일 화면에서 피드 조회·업로드·삭제·정렬·재시도·저장 및 페이지 뷰 추적을 처리합니다.
사진 편집 레이아웃과 기존 화면 조정
frontend/src/pages/AdminPage/tabs/PhotoEditTab/*, frontend/src/pages/AdminPage/tabs/ClubInfoEditTab/ClubInfoEditTabMobile.styles.ts, frontend/src/pages/AdminPage/tabs/ClubIntroEditTab/ClubIntroEditTabMobile.styles.ts
모바일 사진 편집 레이아웃을 추가하고 사진 편집 스타일을 테마 색상으로 변경했으며, 그리드 열 수와 기존 모바일 화면의 안전영역·여백을 조정했습니다. 사용하지 않는 SNS_CONFIG import도 제거했습니다.
모바일 관리자 편집 문서 갱신
frontend/docs/features/admin/info/mobile.md, frontend/docs/features/admin/intro/mobile.md, frontend/docs/features/admin/intro/mobile-award.md, frontend/docs/features/admin/photo/mobile.md
정보·상세·수상·사진 편집의 모바일 렌더링 경로와 화면 동작을 문서화하거나 갱신했습니다.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related issues

  • Moadong/moadong#1838 — PhotoEditTabMobile의 라우팅, 레이아웃, 업로드·그리드 동작을 직접 다룹니다.
  • [feature] MOA-1044 활동사진 편집 탭 모바일 화면 구현 #1839 — 모바일 PhotoEditTab 분기와 PhotoEditTabMobile 구현과 직접 연결됩니다.
  • Moadong/moadong#1801 — ClubIntroEditTabMobile 흐름과 관련 모바일 문서 변경을 다룹니다.

Possibly related PRs

  • Moadong/moadong#1360 — 동일한 사진 편집 UI와 PhotoEditTabMobile, 라우팅 및 스타일 변경에 직접 연결됩니다.
  • Moadong/moadong#1841 — 관리자 탭의 모바일·데스크톱 분기를 AdminTabAdapter로 중앙화한 흐름과 연결됩니다.
  • Moadong/moadong#1805ClubIntroEditTabMobile의 안전영역 및 여백 스타일 변경과 직접 관련됩니다.

Suggested labels: 🔨 Refactor

Suggested reviewers: lepitaaar, seongwon030, oesnuj

🚥 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 제목이 활동사진 편집 탭의 모바일 화면 구현이라는 핵심 변경을 정확하고 간결하게 요약합니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ 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 feature/#1839-photo-edit-mobile-MOA-1044

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

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

@vercel

vercel Bot commented Jul 20, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
moadong Ready Ready Preview Jul 30, 2026 4:34pm

@gemini-code-assist gemini-code-assist 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.

Code Review

This pull request introduces a mobile-specific version of the activity photo editing tab (PhotoEditTabMobile), updates the admin routing to use AdminTabAdapter for responsive rendering, refactors hardcoded colors to use theme colors in PhotoEditTab.styles.ts, and updates relevant documentation. The review feedback correctly identifies that Mixpanel page view tracking (useTrackPageView) is missing in the new mobile component and suggests adding it to maintain parity with the desktop version.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment on lines +4 to +6
import { ADMIN_EVENT } from '@/constants/eventName';
import { MAX_FILE_COUNT } from '@/constants/uploadLimit';
import useMixpanelTrack from '@/hooks/Mixpanel/useMixpanelTrack';

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

high

모바일 화면에서도 페이지 뷰 분석을 정확히 추적하기 위해 useTrackPageView 훅과 PAGE_VIEW 상수를 임포트해야 합니다. 데스크탑 버전(PhotoEditTab.tsx)과 동일하게 Mixpanel 페이지 뷰 이벤트를 전송할 수 있도록 추가해 주세요.

Suggested change
import { ADMIN_EVENT } from '@/constants/eventName';
import { MAX_FILE_COUNT } from '@/constants/uploadLimit';
import useMixpanelTrack from '@/hooks/Mixpanel/useMixpanelTrack';
import { ADMIN_EVENT, PAGE_VIEW } from '@/constants/eventName';
import { MAX_FILE_COUNT } from '@/constants/uploadLimit';
import useMixpanelTrack from '@/hooks/Mixpanel/useMixpanelTrack';
import useTrackPageView from '@/hooks/Mixpanel/useTrackPageView';

Comment on lines +15 to +18
const PhotoEditTabMobile = () => {
const navigate = useNavigate();
const trackEvent = useMixpanelTrack();
const clubDetail = useOutletContext<ClubDetail>();

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

high

모바일 환경에서 활동 사진 수정 탭에 진입했을 때 Mixpanel에 페이지 뷰 이벤트를 기록할 수 있도록 useTrackPageView(PAGE_VIEW.PHOTO_EDIT_PAGE) 호출을 추가해 주세요.

Suggested change
const PhotoEditTabMobile = () => {
const navigate = useNavigate();
const trackEvent = useMixpanelTrack();
const clubDetail = useOutletContext<ClubDetail>();
const PhotoEditTabMobile = () => {
const navigate = useNavigate();
const trackEvent = useMixpanelTrack();
useTrackPageView(PAGE_VIEW.PHOTO_EDIT_PAGE);
const clubDetail = useOutletContext<ClubDetail>();

@suhyun113 suhyun113 changed the title [feature] MOA-1044 활동사진 편집 탭 모바일 화면 구현 [feature] 활동사진 편집 탭 모바일 화면 구현 Jul 20, 2026
@suhyun113 suhyun113 added ✨ Feature 기능 개발 💻 FE Frontend labels Jul 20, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 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 @.github/workflows/harry-review.yml:
- Around line 66-69: Restrict the Claude `allowedTools` configuration in the
workflow to only the required `Bash(git diff:*)` and `Bash(git log:*)` commands
instead of the broad `Bash(git*)` pattern. Update the `actions/checkout@v4` step
to set `persist-credentials: false`.
🪄 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: b0463b3b-d27b-4102-93bc-cf99bd00b11d

📥 Commits

Reviewing files that changed from the base of the PR and between 58d2682 and 40c1f36.

📒 Files selected for processing (1)
  • .github/workflows/harry-review.yml

Comment thread .github/workflows/harry-review.yml Outdated
Comment on lines +66 to +69
show_full_output: true
claude_args: |
--model claude-opus-4-8
--allowedTools mcp__github_inline_comment__create_inline_comment,Bash(git diff:*),Bash(git log:*)
--allowedTools Read,mcp__github_inline_comment__create_inline_comment,Bash(git*)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

sed -n '1,140p' .github/workflows/harry-review.yml

Repository: Moadong/moadong

Length of output: 5885


🏁 Script executed:

rg -n "allowedTools|Bash\\(git\\*\\)|actions/checkout@v4|persist-credentials" -S .github/workflows . -g '*.yml' -g '*.yaml' -g '*.md'

Repository: Moadong/moadong

Length of output: 1916


🏁 Script executed:

sed -n '130,230p' .github/workflows/harry-review.yml

Repository: Moadong/moadong

Length of output: 4516


🏁 Script executed:

python3 - <<'PY'
from pathlib import Path
import re
text = Path('.github/workflows/harry-review.yml').read_text()
for m in re.finditer(r'--allowedTools\s+([^\n]+)', text):
    print(m.group(1))
PY

Repository: Moadong/moadong

Length of output: 249


🌐 Web query:

anthropic claude code action allowedTools Bash(git*) glob command pattern

💡 Result:

In Claude Code, the Bash tool supports fine-grained permission control using glob pattern matching within the allowedTools (or permissions.allow) configuration [1][2][3]. Key behavior and syntax for Bash tool patterns include: Wildcard Support: You can use the * wildcard in any position (beginning, middle, or end) to match sequences of characters, including spaces [1][3]. For example, Bash(git *) matches any git command, while Bash(git * main) restricts access to commands like git checkout main or git merge main [1][3]. Equivalency of Suffixes: The :* suffix at the end of a pattern is functionally equivalent to a space followed by a wildcard [1][3]. For instance, Bash(ls:*) matches the same commands as Bash(ls *) [1][3]. Space Sensitivity: The presence or absence of a space significantly changes the matching logic [1][3]. A pattern like Bash(ls *) (with a space) matches ls -la but not lsof, whereas Bash(ls*) (without a space) matches both ls -la and lsof [1][3]. Configuration and Security: - Permissions: You can define allow and deny lists in your settings or via CLI flags [1][2][3]. Explicit deny rules always take precedence [4]. - CLI/SDK Usage: When configuring tools via --allowedTools in the CLI or SDK, it is recommended to wrap the patterns in quotes (e.g., --allowedTools "Bash(git:*)") to prevent shell parsing errors that could collapse complex rules into unrestricted access [5][6]. - Best Practices: It is safer to limit the scope of Bash execution by using specific patterns (e.g., Bash(git:*)) rather than broad patterns like Bash(*) [7]. Note that for security, content-scoped rules (e.g., Bash(git push *)) will still force a permission prompt even if a base Bash rule is otherwise allowed [4].

Citations:


🏁 Script executed:

rg -n "persist-credentials|git diff|Bash\\(git|allowedTools|checkout" docs .github/workflows/harry-review.yml -S

Repository: Moadong/moadong

Length of output: 1623


.github/workflows/harry-review.yml:32,69 Bash(git*) 범위를 줄이고 checkout 자격 증명도 끄는 게 좋아요

Bash(git*)git fetch, git clone, git config까지 열어 두어서 리뷰에 필요한 git diff/git log보다 훨씬 넓어요. 이 job의 actions/checkout@v4에는 persist-credentials: false도 없어서 Git 인증정보가 워크스페이스에 남습니다. Bash(git diff:*), Bash(git log:*)처럼 최소 허용으로 줄이고 checkout 자격 증명도 끄는 편이 안전해요.

🤖 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 @.github/workflows/harry-review.yml around lines 66 - 69, Restrict the Claude
`allowedTools` configuration in the workflow to only the required `Bash(git
diff:*)` and `Bash(git log:*)` commands instead of the broad `Bash(git*)`
pattern. Update the `actions/checkout@v4` step to set `persist-credentials:
false`.

@seongwon030 seongwon030 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.

빠른 작업 수고하셨습니다

페이지뷰 트래킹만 추가해주세요~

Comment on lines +33 to +34
display: flex;
flex-direction: column;

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.

이런건 그냥 하나의 공통 스타일 컴포넌트로 만드는것도 좋을 것 같아요

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

말씀하신 대로 이번 작업 사항의 모든 파일에서 거의 동일한 MobileContainer가 있네요. 다만 padding-bottom, 값도 탭마다 조금씩 다르고, 위 스타일이 어드민 전체에서 워낙 많이 사용되는거 같아서 공통화 기준을 어떻게 세워야할지 고민이 필요할 것 같습니다.

@suhyun113

Copy link
Copy Markdown
Collaborator Author

빠른 작업 수고하셨습니다

페이지뷰 트래킹만 추가해주세요~

추가해뒀습니다! 1a3f965

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

Labels

💻 FE Frontend ✨ Feature 기능 개발

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants