feat: center header, remove tag, show description, routine tasks at bottom

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
EENE Dashboard
2026-06-01 13:19:58 +09:00
parent e858bf995f
commit c4a3353359
2 changed files with 38 additions and 21 deletions

View File

@@ -4,7 +4,6 @@ import { useSortable } from '@dnd-kit/sortable';
import { CSS } from '@dnd-kit/utilities';
import type { DraggableAttributes } from '@dnd-kit/core';
import type { SyntheticListenerMap } from '@dnd-kit/core/dist/hooks/utilities';
import { sendTaskSelected } from '../../lib/dualMonitor';
import { apiClient } from '../../lib/apiClient';
import { ContextMenu } from '../common/ContextMenu';
import { TaskModal } from '../common/TaskModal';
@@ -98,7 +97,6 @@ export function TaskCard({
onCardClick?: () => void;
}) {
const queryClient = useQueryClient();
const tagCfg = TAG_CONFIG[task.tag ?? ''] ?? { bg: 'bg-gray-100', text: 'text-gray-600' };
// ── API mutations ──────────────────────────────────────────
const create = useMutation({
@@ -174,7 +172,7 @@ export function TaskCard({
style={dragStyle}
{...dragAttributes}
{...dragListeners}
className="bg-white rounded-2xl px-5 py-3 mb-3 shadow-sm border border-gray-100 hover:shadow-md hover:border-gray-200 transition-all select-none h-[112px] cursor-grab active:cursor-grabbing overflow-hidden"
className="bg-white rounded-2xl px-5 py-3 mb-3 shadow-sm border border-gray-100 hover:shadow-md hover:border-gray-200 transition-all select-none cursor-grab active:cursor-grabbing overflow-hidden"
onPointerDown={(e) => {
// 우클릭(button !== 0)을 dnd-kit에 전달하지 않음
// dnd-kit은 pointerdown→pointerup 시 synthetic click을 발화하는데
@@ -202,15 +200,16 @@ export function TaskCard({
</div>
{/* ── 태그 + 기간 + 상태 ── */}
{/* ── description ── */}
{task.description && (
<div className="mt-1 text-sm text-gray-500 font-medium truncate">
{task.description}
</div>
)}
{/* ── 기간 + 상태 ── */}
<div className="mt-1.5 flex items-center gap-2">
<span
className={`shrink-0 text-sm font-black px-2.5 py-0.5 rounded-full ${tagCfg.bg} ${tagCfg.text} cursor-pointer`}
onClick={() => sendTaskSelected(task.id)}
>
{task.tag}
</span>
<span className="text-base text-gray-400 font-medium flex-1 truncate">
<span className="text-sm text-gray-400 font-medium flex-1 truncate">
{(task.startDate || task.dueDate)
? `${task.startDate ? fmtDate(task.startDate) : '?'} ~ ${task.dueDate ? fmtDate(task.dueDate) : '?'}`
: ''}
@@ -222,7 +221,7 @@ export function TaskCard({
{/* ── 이슈 메모 ── */}
{task.issueNote && (
<div className="mt-2 flex gap-2 text-sm font-semibold text-red-600 min-w-0">
<div className="mt-1.5 flex gap-2 text-sm font-semibold text-red-600 min-w-0">
<span className="shrink-0"> :</span>
<span className="truncate">{task.issueNote}</span>
</div>