Skip to content

Commit b28b167

Browse files
authored
Merge pull request #3 from Artemia-project/exhibition-worldcup
전시회 월드컵 모듈 추가
2 parents d9539b9 + f0c8471 commit b28b167

File tree

7 files changed

+884
-5
lines changed

7 files changed

+884
-5
lines changed

index.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
<meta name="twitter:card" content="summary_large_image" />
1616
<meta name="twitter:site" content="@lovable_dev" />
1717
<meta name="twitter:image" content="https://lovable.dev/opengraph-image-p98pqg.png" />
18+
19+
<!-- Pretendard Font CDN -->
20+
<link rel="stylesheet" as="style" crossorigin
21+
href="https://cdn.jsdelivr.net/gh/orioncactus/[email protected]/dist/web/static/pretendard-dynamic-subset.min.css" />
1822
</head>
1923

2024
<body>

src/components/ChatModule.tsx

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@ interface Message {
2626

2727
interface ChatModuleProps {
2828
onArtworkRecommendation?: (artwork: any) => void;
29+
externalMessage?: string;
30+
onMessageSent?: () => void;
2931
}
3032

31-
export const ChatModule: React.FC<ChatModuleProps> = ({ onArtworkRecommendation }) => {
33+
export const ChatModule: React.FC<ChatModuleProps> = ({ onArtworkRecommendation, externalMessage, onMessageSent }) => {
3234
const [messages, setMessages] = useState<Message[]>([
3335
{
3436
id: '1',
@@ -55,6 +57,52 @@ export const ChatModule: React.FC<ChatModuleProps> = ({ onArtworkRecommendation
5557
}
5658
}, [messages]);
5759

60+
useEffect(() => {
61+
if (externalMessage) {
62+
const sendExternalMessage = async () => {
63+
const userMessage: Message = {
64+
id: Date.now().toString(),
65+
type: 'user',
66+
content: externalMessage,
67+
timestamp: new Date()
68+
};
69+
70+
setMessages((prev) => [...prev, userMessage]);
71+
setIsLoading(true);
72+
73+
setTimeout(() => {
74+
const responses = [
75+
`${externalMessage}에 대한 맞춤형 코스를 추천해드릴게요! 이 전시회와 연관된 주변 갤러리와 박물관을 포함한 문화 코스를 계획해보세요. 근처 카페나 레스토랑도 함께 추천해드릴까요?`,
76+
`훌륭한 선택이네요! ${externalMessage.split(' ')[0]} 전시회를 중심으로 한 하루 코스를 짜보겠습니다. 비슷한 작품들을 볼 수 있는 다른 장소들과 함께 문화적 경험을 극대화할 수 있는 루트를 제안해드릴게요.`,
77+
`${externalMessage.split(' ')[0]} 전시회와 테마가 연결되는 다른 문화 공간들을 찾아보겠습니다. 미술관, 갤러리, 그리고 관련 문화시설들을 포함한 종합적인 코스를 계획해서 알려드릴게요!`
78+
];
79+
80+
const assistantMessage: Message = {
81+
id: (Date.now() + 1).toString(),
82+
type: 'assistant',
83+
content: responses[Math.floor(Math.random() * responses.length)],
84+
timestamp: new Date(),
85+
suggestions: [
86+
'상세한 코스 일정 짜줘',
87+
'교통편 정보도 알려줘',
88+
'비슷한 다른 전시 추천해줘',
89+
'근처 맛집도 알려줘'
90+
]
91+
};
92+
93+
setMessages((prev) => [...prev, assistantMessage]);
94+
setIsLoading(false);
95+
}, 1500);
96+
};
97+
98+
sendExternalMessage();
99+
100+
if (onMessageSent) {
101+
onMessageSent();
102+
}
103+
}
104+
}, [externalMessage]);
105+
58106
const savedMessages = messages.filter((msg) => msg.isSaved);
59107
const savedCount = savedMessages.length;
60108

0 commit comments

Comments
 (0)