- 입찰관리: 목록/상세/수정 페이지 및 목업 데이터 - 계약관리: 목록/상세/수정 페이지 구현 - 주문관리: 수주/발주 목록 및 상세 페이지 구현 - 견적 상세 폼: 섹션별 분리 및 hooks/utils 리팩토링 - 품목관리, 카테고리관리, 단가관리 기능 추가 - 현장설명회/협력업체 폼 개선 - 프린트 유틸리티 공통화 (print-utils.ts) - 문서 모달 공통 컴포넌트 정리 - IntegratedListTemplateV2, StatCards 개선 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
45 lines
992 B
TypeScript
45 lines
992 B
TypeScript
'use client';
|
|
|
|
import { cn } from '@/components/ui/utils';
|
|
import type { ScheduleEvent } from './types';
|
|
|
|
interface MorePopoverProps {
|
|
date: Date;
|
|
events: ScheduleEvent[];
|
|
hiddenCount: number;
|
|
onEventClick: (event: ScheduleEvent) => void;
|
|
onDateClick?: (date: Date) => void;
|
|
}
|
|
|
|
/**
|
|
* 더보기 버튼 컴포넌트
|
|
* - +N 버튼 렌더링
|
|
* - 클릭 시 해당 날짜 선택 (테이블 필터링)
|
|
*/
|
|
export function MorePopover({
|
|
date,
|
|
hiddenCount,
|
|
onDateClick,
|
|
}: MorePopoverProps) {
|
|
if (hiddenCount <= 0) return null;
|
|
|
|
const handleClick = (e: React.MouseEvent) => {
|
|
e.stopPropagation();
|
|
// 날짜 선택 → 테이블 필터링
|
|
onDateClick?.(date);
|
|
};
|
|
|
|
return (
|
|
<button
|
|
type="button"
|
|
className={cn(
|
|
'text-xs font-medium text-muted-foreground',
|
|
'hover:text-primary hover:underline',
|
|
'transition-colors cursor-pointer'
|
|
)}
|
|
onClick={handleClick}
|
|
>
|
|
+{hiddenCount} 더보기
|
|
</button>
|
|
);
|
|
} |