Skip to content

Commit ae39221

Browse files
committed
Merge branch 'dev' of https://github.com/MBTips/FE-MBTips into feat/빠른채팅-이름-띄우기-작업
2 parents df88df1 + 9aec5f7 commit ae39221

File tree

16 files changed

+532
-50
lines changed

16 files changed

+532
-50
lines changed

public/icon/twitter.svg

Lines changed: 15 additions & 1 deletion
Loading

src/App.tsx

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ import {
55
Route,
66
useLocation
77
} from "react-router-dom";
8+
import { initGA, trackPageView } from "@/libs/analytics";
89
import Home from "@/pages/Home";
910
import SelectInfo from "@/pages/SelectInfo";
1011
import Chat from "@/pages/Chat";
1112
import ChatRecommend from "@/pages/ChatRecommend";
1213
import ChatTips from "@/pages/ChatTips";
13-
import ChatTemporature from "@/pages/ChatTemporature";
14+
import ChatTemperature from "@/pages/ChatTemperature";
1415
import Content from "@/pages/Content";
1516
import Login from "@/pages/Login";
1617
import MyInfo from "@/pages/MyInfo";
@@ -19,7 +20,6 @@ import MbtiTestIntro from "@/pages/MbtiTestIntro";
1920
import MbtiTestQuestions from "@/pages/MbtiTestQuestions";
2021
import MbtiTestResult from "@/pages/MbtiTestResult";
2122
import CenteredLayout from "@/components/CenteredLayout";
22-
import { initGA, trackPageView } from "@/libs/analytics";
2323
import Error from "@/pages/Error";
2424

2525
const PageTracker = () => {
@@ -81,14 +81,11 @@ const App = () => {
8181
<Route path="/" element={<Home />} />
8282
<Route path="/select-info" element={<SelectInfo />} />
8383
<Route path="/chat" element={<Chat />} />
84+
<Route path="/chat-recommend/:mbti" element={<ChatRecommend />} />
85+
<Route path="/chat-tips/:mbti" element={<ChatTips />} />
8486
<Route
85-
path="/chat-recommend/:virtualFriendId"
86-
element={<ChatRecommend />}
87-
/>
88-
<Route path="/chat-tips/:virtualFriendId" element={<ChatTips />} />
89-
<Route
90-
path="/chat-temporature/:conversationId"
91-
element={<ChatTemporature />}
87+
path="/chat-temperature/:conversationId"
88+
element={<ChatTemperature />}
9289
/>
9390
<Route path="/contents/:id" element={<Content />} />
9491
<Route path="/login" element={<Login />} />

src/api/axios.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import useAuthStore from "@/store/useAuthStore";
33

44
const instance = axios.create({
55
baseURL: import.meta.env.VITE_API_BASE_URL,
6-
timeout: 10000,
6+
timeout: 100000,
77
headers: {
88
"Content-Type": "application/json"
99
}
@@ -12,7 +12,7 @@ const instance = axios.create({
1212
// 인증 절차가 필요한 API는 authInstance로 HTTP요청
1313
const authInstance = axios.create({
1414
baseURL: import.meta.env.VITE_API_BASE_URL,
15-
timeout: 10000,
15+
timeout: 100000,
1616
headers: {
1717
"Content-Type": "application/json"
1818
}

src/components/button/TwitterShareButton.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ const TwitterShareButton = ({ title }: { title: string }) => {
66
href={`https://twitter.com/intent/tweet?text=${title}&url=${currentUrl}`}
77
className="flex flex-col items-center gap-1"
88
>
9-
<img src="/icon/twitter.svg" alt="트위터 아이콘" width={76} height={76} />
10-
<p className="text-md text-gray-800">트위터</p>
9+
<img src="/icon/twitter.svg" alt="트위터 아이콘" width={72} height={72} />
1110
</a>
1211
);
1312
};
Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,36 @@
1-
const UrlCopyButton = ({currentUrl} : {currentUrl : string}) => {
2-
const handleCopy = () => {
3-
navigator.clipboard
4-
.writeText(currentUrl)
5-
.then(() => {
6-
alert("URL이 복사되었습니다!"); // toast로 바꾸어야 함 -> 4.10 정준영
7-
})
8-
.catch((err) => {
9-
console.error("URL 복사 실패:", err);
10-
});
11-
};
12-
13-
return (
1+
import ToastMessage from "@/components/ToastMessage";
2+
import { useState } from "react";
3+
4+
const UrlCopyButton = ({ currentUrl }: { currentUrl: string }) => {
5+
const [toastMessage, setToastMessage] = useState<string>("");
6+
7+
const handleCopy = () => {
8+
navigator.clipboard
9+
.writeText(currentUrl)
10+
.then(() => {
11+
setToastMessage("URL을 복사했습니다.");
12+
})
13+
.catch((err) => {
14+
console.error("URL 복사 실패:", err);
15+
});
16+
};
17+
18+
return (
19+
<>
1420
<button
1521
onClick={handleCopy}
16-
className="bg-primary-normal h-8 text-white flex items-center justify-center rounded-[20px] px-4 py-2"
22+
className="flex h-8 items-center justify-center rounded-[20px] bg-primary-normal px-4 py-2 text-white"
1723
>
1824
복사
1925
</button>
20-
);
21-
};
22-
23-
export default UrlCopyButton;
26+
{toastMessage && (
27+
<ToastMessage
28+
message={toastMessage}
29+
onClose={() => setToastMessage("")}
30+
/>
31+
)}
32+
</>
33+
);
34+
};
35+
36+
export default UrlCopyButton;

src/components/tips/TipsMenu.tsx

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,13 @@ import trackClickEvent from "@/utils/trackClickEvent";
22
import { Link } from "react-router-dom";
33

44
const TipsMenu = ({
5-
mode
5+
mode,
6+
mbti,
7+
conversationId
68
}: {
7-
mode: "topic" | "conversation" | "temporature";
9+
mode: "topic" | "conversation" | "temperature";
10+
mbti?: string;
11+
conversationId?: string;
812
}) => {
913
let text = "";
1014
let tagElement = "";
@@ -16,19 +20,19 @@ const TipsMenu = ({
1620
text = "대화 주제 추천";
1721
tagElement = "대화 주제 추천";
1822
imageUrl = "/icon/starbubble.svg";
19-
href = "/chat-recommend";
23+
href = `/chat-recommend/${mbti}`;
2024
break;
2125
case "conversation":
2226
text = "대화 꿀팁";
2327
tagElement = "대화 꿀팁";
2428
imageUrl = "/icon/lightbulb.svg";
25-
href = "/chat-tips";
29+
href = `/chat-tips/${mbti}`;
2630
break;
27-
case "temporature":
31+
case "temperature":
2832
text = "현재 대화의 온도 측정하기";
2933
tagElement = "대화의 온도";
3034
imageUrl = "/icon/thermometer.svg";
31-
href = "/chat-temporature";
35+
href = `/chat-temperature/${conversationId}`;
3236
break;
3337
default:
3438
return;

src/components/tips/TipsMenuContainer.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
import TipsMenu from "@/components/tips/TipsMenu";
22

3-
const TipsMenuContainer = () => {
3+
const TipsMenuContainer = ({
4+
conversationId,
5+
mbti
6+
}: {
7+
conversationId: string;
8+
mbti: string;
9+
}) => {
410
return (
511
<>
6-
<TipsMenu mode="topic" />
7-
<TipsMenu mode="conversation" />
8-
<TipsMenu mode="temporature" />
12+
<TipsMenu mode="topic" mbti={mbti} />
13+
<TipsMenu mode="conversation" mbti={mbti} />
14+
<TipsMenu mode="temperature" conversationId={conversationId} />
915
</>
1016
);
1117
};

src/index.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ body {
3030

3131
main {
3232
@media screen and (min-width: 360px) {
33+
background-color: white;
3334
font-size: 14px;
3435
width: 360px;
3536
}

src/mock/chatRecommend.ts

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
export const chatRecommend: Record<
2+
string,
3+
{ title: string; description: string }
4+
> = {
5+
INTJ: {
6+
title: "INTJ (용의주도한 전략가)와 대화 주제 추천",
7+
description: `INTJ는 미래지향적이고 전략적으로 사고해요. 현실의 비효율을 개선하거나, 지적인 주제에서 깊이 있게 탐구하는 걸 좋아해요
8+
9+
1. "앞으로 10년 후엔 어떤 직업이 뜰까?"
10+
2. "너만의 문제 해결 방식이 있어?"
11+
3. "최적의 루틴이 있다면 어떤 구조일까?"
12+
4. "세상이 돌아가는 방식 중 비효율적이라 생각하는 건?"
13+
5. "인공지능 시대에 인간의 역할은 뭘까?"`
14+
},
15+
INTP: {
16+
title: "INTP (논리적인 사색가)와 대화 주제 추천",
17+
description: `INTP는 철학적이고 복잡한 논리 구조에 매료돼요. 상상력과 논리가 교차하는 질문이면 한도 끝도 없이 빠져들어요
18+
19+
1. "세상에서 가장 논리적으로 이상한 건 뭐라고 생각해?"
20+
2. "의식이란 과연 존재하는 걸까?"
21+
3. "가짜 기억이 실제 감정보다 의미 있을 수 있을까?"
22+
4. "우리가 사는 이 세계가 시뮬레이션이라면?"
23+
5. "시간이 역행한다면 사회는 어떻게 바뀔까?"`
24+
},
25+
ENTJ: {
26+
title: "ENTJ (결단력 있는 리더)와 대화 주제 추천",
27+
description: `ENTJ는 성과와 성장, 그리고 리더십에 관심이 많아요. 논리적인 목표 설정과 시스템화된 사고방식이 대화에서 살아나요.
28+
29+
1. "효율을 극대화하려면 가장 먼저 바꿔야 할 건?"
30+
2. "최고의 조직문화란 뭘까?"
31+
3. "리더는 타고나는 걸까, 만들어지는 걸까?"
32+
4. "네가 생각하는 성공 공식은?"
33+
5. "투자하고 싶은 사업 아이템 있어?"`
34+
},
35+
ENTP: {
36+
title: "ENTP (창의적인 도전가)와 대화 주제 추천",
37+
description: `ENTP는 반항적이고 새로운 관점에 목말라 있어요. 토론과 아이디어 싸움에서 에너지를 얻는 편이라 엉뚱하지만 깊은 주제가 매력을 느껴요.
38+
39+
1. "만약 세상에 법이 없다면 무슨 일이 벌어질까?"
40+
2. "모든 정보를 다 공유하면 더 나은 사회가 될까?"
41+
3. "너무 급진적인 변화가 필요한 분야는?"
42+
4. "요즘 너만 알고 있는 신기한 서비스 있어?"
43+
5. "가장 말도 안 되는 아이디어 하나 말해줘!"`
44+
},
45+
INFJ: {
46+
title: "INFJ (통찰력 있는 조언자)와 대화 주제 추천",
47+
description: `INFJ는 의미와 깊이를 추구하는 편이에요. 감정적이되 매우 지적이라, 인생·사람·철학을 주제로 깊은 대화를 좋아해요.
48+
49+
1. "사람들의 무의식적인 패턴은 어떻게 알 수 있을까?"
50+
2. "운명과 선택 중 어느 쪽이 더 중요하다고 생각해?"
51+
3. "내면의 성장을 위해 가장 중요한 건 뭘까?"
52+
4. "사람에게 진짜 위로가 되는 건 뭐라고 봐?"
53+
5. "넌 어떤 세상을 꿈꾸고 있어?"`
54+
},
55+
INFP: {
56+
title: "INFP (순수한 이상주의자)와 대화 주제 추천",
57+
description: `INFP는 감정과 가치에 따라 움직여요. 진심 어린 감정 공유나 이상적인 이야기, 따뜻한 주제를 좋아해요.
58+
59+
1. "넌 어떤 가치를 지킬 때 제일 나답다고 느껴?"
60+
2. "가장 기억에 남는 감정은 어떤 거였어?"
61+
3. "이 세상이 널 이해하지 못할 때 어떻게 해?"
62+
4. "넌 어떤 이야기에 쉽게 울어?"
63+
5. "네가 만들고 싶은 세상은 어떤 모습이야?"`
64+
},
65+
ENFJ: {
66+
title: "ENFJ (따뜻한 리더)와 대화 주제 추천",
67+
description: `ENFJ는 대인관계의 조화와 성장에 관심이 많아요. 사람 사이의 정서적 연결에 대한 대화를 즐겨요.
68+
69+
1. "사람들이 서로 더 잘 이해하려면 어떻게 해야 할까?"
70+
2. "진짜 소통이란 어떤 거라고 생각해?"
71+
3. "네가 도와주고 싶은 사람은 어떤 사람이야?"
72+
4. "사람을 이끄는 힘은 어디서 나올까?"
73+
5. "넌 어떤 상황에서 타인을 가장 잘 이해해?"`
74+
},
75+
ENFP: {
76+
title: "ENFP (열정적인 탐험가)와 대화 주제 추천",
77+
description: `ENFP는 자유롭고 창의적인 에너지를 가진 타입이에요. 대화는 진지하되 재밌게, 영감을 주는 이야기를 좋아해요.
78+
79+
1. "하고 싶은 게 너무 많을 땐 어떻게 정해?"
80+
2. "네가 가장 몰입했던 순간은?"
81+
3. "자유롭다는 느낌은 언제 가장 강해?"
82+
4. "새로운 아이디어가 떠오를 땐 어때?"
83+
5. "내가 생각 못한 미친 아이디어 하나만 말해줘!"`
84+
},
85+
ISTJ: {
86+
title: "ISTJ (신중한 관리자)와 대화 주제 추천",
87+
description: `ISTJ는 신뢰성과 논리, 경험 중심 사고를 중시해요. 실질적이고 명확한 주제가 안정감을 줘요.
88+
89+
1. "네가 가장 신뢰하는 원칙은 뭐야?"
90+
2. "효율적인 하루 루틴은 어떻게 구성돼?"
91+
3. "너무 감정적인 결정은 위험하다고 생각해?"
92+
4. "왜 일의 기준을 그렇게 중요하게 여겨?"
93+
5. "지금까지 배운 인생 교훈 하나 말해줄래?"`
94+
},
95+
ISFJ: {
96+
title: "ISFJ (헌신적인 수호자)와 대화 주제 추천",
97+
description: `ISFJ는 배려와 조화를 중요시해요. 감정 표현은 조심스럽지만 따뜻한 주제엔 마음을 열기 쉬워요.
98+
99+
1. "넌 어떻게 주변 사람을 챙기고 있어?"
100+
2. "누군가에게 고마웠던 기억 있어?"
101+
3. "작은 배려가 큰 의미가 됐던 적은?"
102+
4. "넌 언제 마음이 가장 따뜻해져?"
103+
5. "네가 소중히 여기는 전통은 뭐야?"`
104+
},
105+
ESTJ: {
106+
title: "ESTJ (현실적인 관리자)와 대화 주제 추천",
107+
description: `ESTJ는 목표지향적이고 조직적인 사람이에요. 실질적이고 일 중심의 대화를 즐겨요.
108+
109+
1. "실행력 좋은 사람의 공통점은 뭐라고 생각해?"
110+
2. "성과를 내기 위해 가장 중요한 건 뭐야?"
111+
3. "팀을 이끄는 방법 중 최고의 방식은?"
112+
4. "네가 본 가장 일 잘하는 사람은 어떤 사람이었어?"
113+
5. "결정을 빨리 내리는 기준은 뭐야?"`
114+
},
115+
ESFJ: {
116+
title: "ESFJ (다정한 조직자)와 대화 주제 추천",
117+
description: `ESFJ는 관계 중심적이고 감정 조화를 중요시해요. 사람 사이의 연결과 공감에 관련된 이야기를 좋아해요.
118+
119+
1. "넌 어떤 상황에서 가장 공감하게 돼?"
120+
2. "주변 사람들 기분 잘 읽는 편이야?"
121+
3. "친구랑 갈등 생기면 어떻게 풀어?"
122+
4. "모두가 함께 잘 지내려면 뭘 해야 할까?"
123+
5. "감정 표현은 왜 중요하다고 생각해?"`
124+
},
125+
ISTP: {
126+
title: "ISTP (과묵한 장인)과 대화 주제 추천",
127+
description: `ISTP는 분석적이면서도 실용적인 성향이라, 구체적이고 ‘쓸모 있는’ 대화를 좋아해요.
128+
129+
1. "요즘 푹 빠진 도구나 기술 있어?"
130+
2. "손으로 무언가 만들 때 어떤 기분이야?"
131+
3. "문제가 생기면 보통 어떻게 접근해?"
132+
4. "고장 난 물건 고치는 거 좋아해?"
133+
5. "한번쯤 해보고 싶은 실험적인 취미 있어?"`
134+
},
135+
ISFP: {
136+
title: "ISFP (조용한 예술가)와 대화 주제 추천",
137+
description: `ISFP는 감성적이고 감각 중심적이에요. 표현적이고 잔잔한 감정을 나누는 대화를 편하게 느껴요.
138+
139+
1. "요즘 감성 터졌던 순간 있었어?"
140+
2. "네가 아름답다고 느끼는 건 뭐야?"
141+
3. "사람에게 감동 받았던 순간은?"
142+
4. "네 감정을 표현하는 방법은?"
143+
5. "네가 좋아하는 예술 작품은 뭐야?"`
144+
},
145+
ESTP: {
146+
title: "ESTP (에너지 넘치는 모험가)와 대화 주제 추천",
147+
description: `ESTP는 즉흥적이고 활동적인 걸 좋아해서, 실시간 반응이 오고 가는 신나는 주제가 잘 맞아요.
148+
149+
1. "가장 재밌었던 즉흥 여행은?"
150+
2. "위험했지만 스릴 있었던 경험 있어?"
151+
3. "승부욕 불타올랐던 순간?"
152+
4. "요즘 재밌게 하는 활동이나 운동은?"
153+
5. "만약 하루 뭐든 할 수 있다면 뭘 해볼래?"`
154+
},
155+
ESFP: {
156+
title: "ESFP (인생을 즐기는 연예인)과 대화 주제 추천",
157+
description: `ESFP는 밝고 에너지 넘쳐요. 즐거움, 사람, 즉흥성 관련 대화에 잘 반응하고 분위기를 업시켜줘요.
158+
159+
1. "최근에 제일 재밌었던 파티는?"
160+
2. "기분 좋게 사람들과 어울릴 때는 언제야?"
161+
3. "좋아하는 노래로 플레이리스트 하나 짜줘!"
162+
4. "넌 어떻게 주변을 즐겁게 만들어?"
163+
5. "지금 당장 하고 싶은 거 3가지!"`
164+
}
165+
};

0 commit comments

Comments
 (0)