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(", ")} 역할에 배정된 에이전트가 없습니다.{" "}
+
+ 역할 배정으로
+
+ >
+ )}
+
+ )}
+
+ >
)}
>
)}