o2o-negosium-original/front/src/pages/ChatPage.tsx
민헌 147f9dd007 feat(front): 협상 채팅 페이지 (mock UI)
- KT-NEGOWIZ /chat 을 현재 아키텍처(Vite·React Router·feature 구조)로 이식
- 사이드 ItemSection(+이미지 확대), 헤더 잔여시간, 채팅(메시지/템플릿/입력), 메뉴 섹션
- 메시지 템플릿: 협상 성공률·협상요약·투찰요약·재협상/재견적 폼
- zustand 스토어 + mock 데이터(정적 쇼케이스, 제출 시 로컬 append)
- Next.js·KT 의존 제거(next/image·navigation, 로고·서비스명·연락처, 팝업 보류)
- ChatPage 배선: ChatContainer / ItemSection / RemainingTime + auth SidebarFooter 재사용

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 14:38:04 +09:00

50 lines
1.0 KiB
TypeScript

import { useNavigate } from 'react-router'
import { List } from 'lucide-react'
import { cn, interactive } from '@/lib'
import { MainLayout, MainHeaderBar } from '@/layouts'
import { ChatContainer, ItemSection, RemainingTime } from '@/features/chat'
import { SidebarFooter } from '@/features/auth'
export function ChatPage() {
return (
<MainLayout
sidebarWidth="chat"
scrollX
logoAction={<ListNavButton />}
sidebar={<Sidebar />}
header={
<MainHeaderBar className="px-[140px]">
<RemainingTime />
</MainHeaderBar>
}
>
<ChatContainer />
</MainLayout>
)
}
function ListNavButton() {
const navigate = useNavigate()
return (
<button
type="button"
aria-label="목록으로 이동"
onClick={() => navigate('/list')}
className={cn('text-foreground', interactive)}
>
<List size={24} />
</button>
)
}
function Sidebar() {
return (
<>
<ItemSection />
<SidebarFooter />
</>
)
}
export default ChatPage