Conversation
frontend/src/components/menu/dashboard-menu-ranking/IngredientUnregisteredContent.tsx
Outdated
Show resolved
Hide resolved
frontend/src/components/menu/dashboard-menu-order/TimeSlotMenuOrderCountCardContent.tsx
Outdated
Show resolved
Hide resolved
frontend/src/components/menu/dashboard-menu-ranking/DashboardRankingContent.tsx
Outdated
Show resolved
Hide resolved
frontend/src/components/menu/dashboard-menu-ranking/MenuSalesRankingCardContent.tsx
Outdated
Show resolved
Hide resolved
lee0jae330
left a comment
There was a problem hiding this comment.
고생하셨습니다 ~ cdn assets 이름 반영해주시면 감사하겠습니다 !
또 리뷰 반영해주시면 감사하겠습니다 !
There was a problem hiding this comment.
p2: 오우 제 형식이랑 맞추어주셨군요 감사합니다 !
frontend/src/components/menu/dashboard-menu-combination/PopularMenuCombinationCardContent.tsx
Show resolved
Hide resolved
frontend/src/components/menu/dashboard-menu-combination/PopularMenuCombinationCardContent.tsx
Outdated
Show resolved
Hide resolved
frontend/src/components/menu/dashboard-menu-order/TimeSlotMenuOrderCountCardContent.tsx
Show resolved
Hide resolved
frontend/src/components/menu/dashboard-menu-ranking/IngredientUsageRankingCardContent.tsx
Outdated
Show resolved
Hide resolved
frontend/src/components/menu/dashboard-menu-ranking/IngredientUsageRankingCardContent.tsx
Outdated
Show resolved
Hide resolved
| interface IngredientUsageRankingCardContentProps extends GetIngredientUsageRankingResponseDto { | ||
| className?: string; | ||
| } | ||
|
|
||
| export const IngredientUsageRankingCardContent = ({ | ||
| hasIngredient, | ||
| items, | ||
| }: IngredientUsageRankingCardContentProps) => { |
There was a problem hiding this comment.
dto 가 누락되었다는게 className이 누락되었다는 말씀이신가요??
| interface MenuSalesRankingCardContentProps extends GetMenuSalesRankingResponseDto { | ||
| className?: string; | ||
| } | ||
|
|
||
| export const MenuSalesRankingCardContent = ({ | ||
| items, | ||
| }: MenuSalesRankingCardContentProps) => { | ||
| // dto -> 대시보드의 메뉴>매출 랭킹 카드 UI 데이터 형태로 변환 |
frontend/src/mocks/data/dashboard/menu/dashboardMenuIngredientRankItems.ts
Outdated
Show resolved
Hide resolved
| height: | ||
| Math.max(EDIT_CARD_WRAPPER.MIN_HEIGHT, computedCardHeight) * sizeY + | ||
| GRID_GAP * (sizeY - 1), // 최소 높이 147px, gap 20px | ||
| height: Math.max(EDIT_CARD_WRAPPER.MIN_HEIGHT, computedCardHeight), // 최소 높이 147px, |
There was a problem hiding this comment.
[p2] 지금 식재료소진량 카드는 computedCardHeight가 다른 것보다 큰 것 같은데 확인 부탁 드립니다.
There was a problem hiding this comment.
랭킹 테이블 자체 위아래 여백이 있어서 발생한 문제였습니다. 테이블 자체 위아래 여백 제거했습니다!
| <div | ||
| style={{ marginTop: `${EDIT_CARD_WRAPPER.HEADER_MAIN_GAP}px` }} | ||
| className="flex min-w-0 flex-1 items-end justify-center" | ||
| className={cn( |
There was a problem hiding this comment.
[p3] 메뉴 판매 패턴, 인기 메뉴 조합 지표가 justify-center 때문에 중앙 정렬이 된 것 같은데 디자인 상 아래로 정렬되어야 해요. 확인 부탁드립니다.
There was a problem hiding this comment.
justify-center는 가로 가운데 정렬 용이어서 관련이 없는 부분입니다!
메뉴 판매 패턴, 인기 메뉴 조합 지표의 문구가 아래가 아닌 위에 뜨는 문제는 메뉴 판매 패턴, 인기 메뉴 조합 지표 컨텐츠의 height를 원래 텍스트 높이보다 더 크게 주어서 윗 부분 여백 생기게 하는 방식으로 해결했습니다!
There was a problem hiding this comment.
2026-02-18.11.55.19.mov
frontend/src/components/menu/dashboard-menu-ranking/MenuSalesRankingCardContent.tsx
Outdated
Show resolved
Hide resolved
frontend/src/components/menu/dashboard-menu-order/TimeSlotMenuOrderCountCardContent.tsx
Outdated
Show resolved
Hide resolved
lwjmcn
left a comment
There was a problem hiding this comment.
dto가 정말 많으네요 . . .
백엔드 분들이랑 협의 하시느라 고생 많으셨어요.
공통 컴포넌트도 굿굿입니다!
#️⃣ 변경 사항
이번 PR에서는 대시보드의 메뉴 분석 카드 컴포넌트들을 구현했습니다.
DashboardRankingContent및RankItem컴포넌트 추상화#️⃣ 작업 상세 내용
MenuSalesRankingCardContent: 매출액 기준 상위 메뉴 랭킹 표시 (최대 4개)IngredientUsageRankingCardContent: 식재료 소진량 랭킹 표시 (최대 4개)TimeSlotMenuOrderCountCardContent: 특정 시간대에 주문이 집중되는 메뉴 정보 표시PopularMenuCombinationCardContent: 함께 주문되는 빈도가 높은 메뉴 조합 정보 표시DashboardRankingContent: 테이블 기반의 랭킹 레이아웃 공통화 및 스크린 리더 지원(sr-only)IngredientUnregisteredContent: 식재료 사용량 랭킹 카드에서 식재료 데이터가 없는 경우의 안내 UI 구현RankBadge: 중간 사이즈인smmd(size-7) 속성 추가추가 설명
MNU_03 (시간대별 메뉴 주문건수), MNU_05 (인기 메뉴 조합)의 경우 상세분석과 대시보드에서의 response DTO 다름. 백엔드랑 합의 완
response DTO 자세히 보기
📊 MNU_03 – 시간대별 메뉴 주문건수
1️⃣ DetailTimeSlotMenuOrderCountResponse
: 상세분석에서 response
✅ 샘플 Response
2️⃣ DashboardTimeSlotMenuOrderCountResponse
: 대시보드에서 sse response
✅ 샘플 Response
📊 MNU_05 – 인기 메뉴 조합
3️⃣ DetailPopularMenuCombinationResponse
: 상세분석에서 response
✅ 샘플 Response
4️⃣ DashboardPopularMenuCombinationResponse
: 대시보드에서 sse response
✅ 샘플 Response
MNU_01 (메뉴별 매출 랭킹), MNU_04 (식재료 소진량) 의 경우 겹치는 UI가 있어 공통 컴포넌트(DashboardRankingContent.tsx) 사용
MNU_01 (메뉴별 매출 랭킹), MNU_04 (식재료 소진량)의 경우 response DTO로 받아온 데이터를 RankItem (랭킹 목록에서 한 행에 해당) 컴포넌트에서 사용할 수 있는 데이터로 변환하는 함수 존재
getDashboardMenuRankItemsgetDashboardIngredientRankItems-> kg의 경우 1000g으로, L의 경우 1000ml로 변환 후 소진량 비교해 정렬
#️⃣ 관련 이슈
📸 스크린샷 (선택)
2026-02-15.11.24.25.mov