From 911f3181a6fa6e154ac9e03d8c1bf678339a2956 Mon Sep 17 00:00:00 2001 From: jeonbinggu Date: Thu, 8 Oct 2026 16:03:39 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=ED=99=9C=EB=8F=99=20=ED=83=AD=20?= =?UTF-8?q?=EC=A0=95=EB=A0=AC=20=C2=B7=20=EB=B3=B5=EC=82=AC=20=ED=94=BC?= =?UTF-8?q?=EB=93=9C=EB=B0=B1=20=C2=B7=20=EB=B0=B0=EC=A0=95=20=EB=8C=80?= =?UTF-8?q?=EA=B8=B0=20=EB=AC=B8=EA=B5=AC=20=C2=B7=20=EC=8B=9C=EC=9E=91=20?= =?UTF-8?q?=EB=B2=84=ED=8A=BC=20=EC=82=AC=EC=A0=84=20=EC=B0=A8=EB=8B=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 활동·비용 탭: 글자 12px, 줄바꿈 금지, 탭 묶음이 설명에 밀려 줄어들지 않게 - CopyField: 복사됨 ✓ / 복사 실패를 1.5초 표시 (연결 키·초대 링크 공통) - 프로젝트 목록: 내 에이전트가 연결돼 있으면 연결 안내 대신 배정 대기 문구 - 프로젝트 시작: 태스크가 있는 역할에 미배정이거나 태스크가 없으면 버튼 비활성화 + 이동 링크. 판정은 여전히 서버 Closes #48 Co-Authored-By: Claude Opus 5.5 --- src/shared/ui/index.tsx | 24 ++++++++-- src/widgets/activity/ActivityView.tsx | 4 +- src/widgets/project-list/ProjectListView.tsx | 18 +++++--- src/widgets/settings/SettingsView.tsx | 48 ++++++++++++++++---- 4 files changed, 73 insertions(+), 21 deletions(-) diff --git a/src/shared/ui/index.tsx b/src/shared/ui/index.tsx index a7fdd11..80c75cf 100644 --- a/src/shared/ui/index.tsx +++ b/src/shared/ui/index.tsx @@ -3,6 +3,7 @@ import Link from "next/link"; import { forwardRef, + useState, type ButtonHTMLAttributes, type InputHTMLAttributes, type ReactNode, @@ -270,6 +271,19 @@ export function EmptyState({ title, desc, action }: { title: string; desc?: stri } export function CopyField({ value, label }: { value: string; label?: string }) { + const [copied, setCopied] = useState<"ok" | "fail" | null>(null); + const copy = () => { + const flash = (r: "ok" | "fail") => { + setCopied(r); + setTimeout(() => setCopied(null), 1500); + }; + // clipboard는 https·localhost에서만 있다 + if (!navigator.clipboard) return flash("fail"); + navigator.clipboard.writeText(value).then( + () => flash("ok"), + () => flash("fail"), + ); + }; return (
@@ -278,10 +292,14 @@ export function CopyField({ value, label }: { value: string; label?: string }) {
); diff --git a/src/widgets/activity/ActivityView.tsx b/src/widgets/activity/ActivityView.tsx index 9c99a3c..f7dd34e 100644 --- a/src/widgets/activity/ActivityView.tsx +++ b/src/widgets/activity/ActivityView.tsx @@ -34,13 +34,13 @@ export function ActivityView({ projectId }: { projectId: string }) { 상세에서 확인합니다.

-
+
{(Object.keys(TABS) as Tab[]).map((t) => (
) : ( - + <> + {(unassigned.length > 0 || noTasks) && ( +

+ {noTasks ? ( + <> + 태스크가 없습니다.{" "} + + Room 3에서 PM 계획 받기 + + + ) : ( + <> + {unassigned.map((r) => TEAM_ROLE_META[r].label).join(", ")} 역할에 배정된 에이전트가 없습니다.{" "} + + 역할 배정으로 + + + )} +

+ )} + + )} )}