fix: 저장소 활동 피드 상태 변경 문구를 알림·상세 탭과 정렬

task.status_changed 를 일반 라벨('승인 대기로 변경')이 아닌 행위 중심 문구로
파생(statusFrom→statusTo): 시작/다시 시작·승인을 요청·수정을 요청·완료(승인).
업무 상세 활동 탭(task.store)·알림과 동일 표현으로 일관화. 안 쓰게 된
taskStatusLabel·TaskStatus import 제거.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-19 15:39:21 +09:00
parent 5351373694
commit 56c89d9927
+16 -15
View File
@@ -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<string, unknown>, key: string): string {
@@ -71,18 +66,24 @@ function toRepoActivityItem(api: ApiActivity): RepoActivityItem {
case 'task.created':
return { ...base, tone: 'task', icon: 'pencil', html: `<b>${actor}</b>님이 <span class="tgt">${title}</span> 업무를 지시했습니다` }
case 'task.status_changed': {
// 알림·업무 상세 활동 탭과 동일한 행위 중심 문구(from→to 로 파생)
const from = pstr(p, 'statusFrom')
const to = pstr(p, 'statusTo')
const tgt = `<span class="tgt">${title}</span>`
if (to === 'prog') {
const verb = from === 'changes' ? '다시 시작' : '시작'
return { ...base, tone: 'task', icon: 'check', html: `<b>${actor}</b>님이 ${tgt} 업무를 <span class="st prog">${verb}</span>했습니다` }
}
if (to === 'review') {
return { ...base, tone: 'task', icon: 'check', html: `<b>${actor}</b>님이 ${tgt} 업무의 승인을 요청했습니다` }
}
if (to === 'changes') {
return { ...base, tone: 'task', icon: 'check', html: `<b>${actor}</b>님이 ${tgt} 업무의 수정을 요청했습니다` }
}
if (to === 'done') {
return { ...base, tone: 'task', icon: 'check', html: `<b>${actor}</b>님이 <span class="tgt">${title}</span> 업무를 <span class="st done">완료</span>했습니다` }
}
const label = taskStatusLabel(to as TaskStatus)
const cls = to === 'prog' ? 'prog' : ''
return {
...base,
tone: 'task',
icon: 'check',
html: `<b>${actor}</b>님이 <span class="tgt">${title}</span> 업무를 <span class="st ${cls}">${escapeHtml(label)}</span>(으)로 변경했습니다`,
return { ...base, tone: 'task', icon: 'check', html: `<b>${actor}</b>님이 ${tgt} 업무를 <span class="st done">완료(승인)</span>했습니다` }
}
return { ...base, tone: 'task', icon: 'check', html: `<b>${actor}</b>님이 ${tgt} 업무의 상태를 변경했습니다` }
}
case 'task.comment_added':
return { ...base, tone: 'task', icon: 'check', html: `<b>${actor}</b>님이 <span class="tgt">${title}</span> 업무에 댓글을 남겼습니다` }