/** * 로그 상세 다이얼로그 */ import { motion, AnimatePresence } from 'framer-motion'; import { X, User, Bot } from 'lucide-react'; import { ACTION_STYLES, ACTION_LABELS, CATEGORY_LABELS, parseSummary, formatDateTime, hasDetails } from './constants'; // 행위자 뱃지 function ActorBadge({ actor }) { if (actor === 'admin') { return ( 관리자 ); } return ( {actor} ); } // summary 렌더링 function Summary({ summary }) { const { prefix, detail } = parseSummary(summary); return ( <> [{prefix}] {detail && {detail}} ); } export { ActorBadge, Summary }; export default function LogDetailDialog({ log, onClose }) { return ( {log && (
{/* 헤더 */}
{ACTION_LABELS[log.action] || log.action} {CATEGORY_LABELS[log.category] || log.category}
{/* 본문 */}
{/* 내용 */}
내용
{/* 행위자 + 시간 */}
행위자
시간
{formatDateTime(log.created_at)}
{/* 대상 */} {(log.target_type || log.target_id) && (
대상
{log.target_type && {log.target_type}} {log.target_id && #{log.target_id}}
)} {/* 상세 정보 */} {hasDetails(log.details) && (
상세 정보
                    {JSON.stringify(log.details, null, 2)}
                  
)}
)}
); }