From 56c89d9927d3f08abb7e0ae720543cf671c96eca Mon Sep 17 00:00:00 2001 From: ttipo Date: Fri, 19 Jun 2026 15:39:21 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=A0=80=EC=9E=A5=EC=86=8C=20=ED=99=9C?= =?UTF-8?q?=EB=8F=99=20=ED=94=BC=EB=93=9C=20=EC=83=81=ED=83=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EB=AC=B8=EA=B5=AC=EB=A5=BC=20=EC=95=8C=EB=A6=BC?= =?UTF-8?q?=C2=B7=EC=83=81=EC=84=B8=20=ED=83=AD=EA=B3=BC=20=EC=A0=95?= =?UTF-8?q?=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit task.status_changed 를 일반 라벨('승인 대기로 변경')이 아닌 행위 중심 문구로 파생(statusFrom→statusTo): 시작/다시 시작·승인을 요청·수정을 요청·완료(승인). 업무 상세 활동 탭(task.store)·알림과 동일 표현으로 일관화. 안 쓰게 된 taskStatusLabel·TaskStatus import 제거. Co-Authored-By: Claude Opus 4.8 (1M context) --- frontend/src/stores/activity.store.ts | 31 ++++++++++++++------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/frontend/src/stores/activity.store.ts b/frontend/src/stores/activity.store.ts index 9e23181..7fbc6a5 100644 --- a/frontend/src/stores/activity.store.ts +++ b/frontend/src/stores/activity.store.ts @@ -6,14 +6,9 @@ import { escapeHtml, monthDayKo, relativeTimeKo, - taskStatusLabel, } from '@/shared/utils/format' import type { ApiActivity } from '@/types/activity' -import type { - RepoActivityDay, - RepoActivityItem, - TaskStatus, -} from '@/mock/relay.mock' +import type { RepoActivityDay, RepoActivityItem } from '@/mock/relay.mock' // payload(자유형)에서 문자열 값 안전 추출 function pstr(payload: Record, key: string): string { @@ -71,18 +66,24 @@ function toRepoActivityItem(api: ApiActivity): RepoActivityItem { case 'task.created': return { ...base, tone: 'task', icon: 'pencil', html: `${actor}님이 ${title} 업무를 지시했습니다` } case 'task.status_changed': { + // 알림·업무 상세 활동 탭과 동일한 행위 중심 문구(from→to 로 파생) + const from = pstr(p, 'statusFrom') const to = pstr(p, 'statusTo') + const tgt = `${title}` + if (to === 'prog') { + const verb = from === 'changes' ? '다시 시작' : '시작' + return { ...base, tone: 'task', icon: 'check', html: `${actor}님이 ${tgt} 업무를 ${verb}했습니다` } + } + if (to === 'review') { + return { ...base, tone: 'task', icon: 'check', html: `${actor}님이 ${tgt} 업무의 승인을 요청했습니다` } + } + if (to === 'changes') { + return { ...base, tone: 'task', icon: 'check', html: `${actor}님이 ${tgt} 업무의 수정을 요청했습니다` } + } if (to === 'done') { - return { ...base, tone: 'task', icon: 'check', html: `${actor}님이 ${title} 업무를 완료했습니다` } - } - const label = taskStatusLabel(to as TaskStatus) - const cls = to === 'prog' ? 'prog' : '' - return { - ...base, - tone: 'task', - icon: 'check', - html: `${actor}님이 ${title} 업무를 ${escapeHtml(label)}(으)로 변경했습니다`, + return { ...base, tone: 'task', icon: 'check', html: `${actor}님이 ${tgt} 업무를 완료(승인)했습니다` } } + return { ...base, tone: 'task', icon: 'check', html: `${actor}님이 ${tgt} 업무의 상태를 변경했습니다` } } case 'task.comment_added': return { ...base, tone: 'task', icon: 'check', html: `${actor}님이 ${title} 업무에 댓글을 남겼습니다` }