Skip to content

Commit 5e91ee0

Browse files
authored
Merge pull request #129 from ASAP-Lettering/fix/#127
[Fix] 카카오 공유하기 실행 오류 수정
2 parents 53ddf4a + e10cfc8 commit 5e91ee0

File tree

2 files changed

+57
-54
lines changed

2 files changed

+57
-54
lines changed

src/app/send/preview/page.tsx

Lines changed: 57 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"use client";
22

33
import React, { useEffect, useState } from "react";
4-
import styled, { css } from "styled-components";
4+
import styled from "styled-components";
55
import { theme } from "@/styles/theme";
66
import NavigatorBar from "@/components/common/NavigatorBar";
77
import Button from "@/components/common/Button";
@@ -17,13 +17,15 @@ import { getLetterShareStatus } from "@/api/letter/share";
1717

1818
const SendPreviewPage = () => {
1919
const router = useRouter();
20+
const isKakaoLoaded = useKakaoSDK();
2021
const [letterState, setLetterState] = useRecoilState(sendLetterState);
2122
const { draftId, receiverName, content, images, templateType, letterId } =
2223
useRecoilValue(sendLetterState);
2324
const { name } = useRecoilValue(userState);
2425
const [isImage, setIsImage] = useState<boolean>(false);
25-
26-
const isKakaoLoaded = useKakaoSDK();
26+
const [letterCode, setLetterCode] = useState<string>("");
27+
const [isLoading, setIsLoading] = useState<boolean>(false);
28+
const [isSharing, setIsSharing] = useState<boolean>(false);
2729

2830
useEffect(() => {
2931
setIsImage(!!!(content.length > 0));
@@ -35,65 +37,79 @@ const SendPreviewPage = () => {
3537

3638
const handleSendLetterAndShare = async () => {
3739
/* 편지 전송 및 카카오 공유 */
40+
if (isSharing) return; // 중복 실행 방지
41+
42+
setIsSharing(true);
43+
setIsLoading(true);
44+
45+
const { Kakao, location } = window;
46+
47+
if (!isKakaoLoaded) {
48+
console.error("Kakao SDK is not loaded yet");
49+
return;
50+
}
51+
3852
try {
3953
// 1. 편지 전송 API 요청
40-
if (!letterId) {
41-
const response = await postSendLtter({
42-
draftId,
43-
receiverName,
44-
content,
45-
images,
46-
templateType,
47-
});
48-
console.log("편지 쓰기 성공");
49-
setLetterState((prevState) => ({
50-
...prevState,
51-
letterId: response.data.letterCode,
52-
}));
53-
54-
// 2. 카카오 공유 로직 실행
55-
if (isKakaoLoaded && response.data.letterCode) {
56-
setTimeout(() => {
57-
const { Kakao, location } = window;
58-
Kakao.Share.sendScrap({
59-
requestUrl: location.origin + location.pathname,
60-
templateId: 112798,
61-
templateArgs: {
62-
senderName: name,
63-
id: response.data.letterCode,
64-
},
65-
serverCallbackArgs: {
66-
requestType: "SHARE",
67-
requestId: response.data.letterCode,
68-
},
69-
});
70-
}, 1000);
71-
}
72-
}
54+
const response = await postSendLtter({
55+
draftId,
56+
receiverName,
57+
content,
58+
images,
59+
templateType,
60+
});
61+
console.log("편지 쓰기 성공");
62+
setLetterState((prevState) => ({
63+
...prevState,
64+
letterId: response.data.letterCode,
65+
}));
66+
setLetterCode(response.data.letterCode);
67+
console.log(response.data.letterCode);
68+
69+
// 2. 카카오 공유 로직 실행 (letterId 상태와 무관하게 항상 실행)
70+
Kakao.Share.sendScrap({
71+
requestUrl: location.origin + location.pathname,
72+
templateId: 112798,
73+
templateArgs: {
74+
senderName: name,
75+
id: response.data.letterCode,
76+
},
77+
serverCallbackArgs: {
78+
requestType: "SHARE",
79+
requestId: response.data.letterCode,
80+
},
81+
// 카카오톡 미설치 시 카카오톡 설치 경로이동
82+
installTalk: true,
83+
});
84+
setIsLoading(false);
85+
setIsSharing(false);
7386
} catch (error) {
7487
console.log("편지 전송 또는 카카오 공유 실패:", error);
7588
}
7689
};
7790

7891
// 3. 공유 완료 상태 폴링
7992
useEffect(() => {
80-
if (letterState.letterId && letterState.letterId?.length > 0) {
93+
if (letterCode.length > 0) {
94+
console.log("letterCode", letterCode);
95+
let intervalTime = 300;
8196
const interval = setInterval(async () => {
8297
try {
83-
const status = await getLetterShareStatus(letterState.letterId || "");
98+
const status = await getLetterShareStatus(letterCode || "");
8499
console.log(status);
85100
if (status.isShared) {
101+
console.log("완료");
86102
router.push("/send/complete");
87103
clearInterval(interval); // 폴링 중단
88104
}
89105
} catch (error) {
90106
console.error("공유 상태 조회 실패:", error);
91107
}
92-
}, 3000);
108+
}, intervalTime);
93109

94110
return () => clearInterval(interval);
95111
}
96-
}, [letterState.letterId]);
112+
}, [letterCode]);
97113

98114
return (
99115
<Layout>
@@ -134,7 +150,7 @@ const SendPreviewPage = () => {
134150
buttonType="primary"
135151
text="카카오로 편지 보내기"
136152
onClick={handleSendLetterAndShare}
137-
disabled={!receiverName || !content}
153+
disabled={!receiverName || !content || isLoading}
138154
>
139155
<Image
140156
src="/assets/icons/ic_kakao_talk.svg"

src/components/common/KakaoShareButton.tsx

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,6 @@ const KakaoShareButton: React.FC<KakaoShareButtonProps> = ({
3030
return;
3131
}
3232

33-
// Kakao.Share.sendDefault({
34-
// objectType: "feed",
35-
// content: {
36-
// title: "나만의 디지털 편지 아카이브, 레터링",
37-
// description: `${senderName} 님으로부터 한 통의 편지가 도착했습니다! 소중한 편지를 손쉽게 보관하고 나의 스페이스에 수놓아보세요!`,
38-
// imageUrl: imageAsset,
39-
// link: {
40-
// mobileWebUrl: location.href,
41-
// webUrl: location.href,
42-
// },
43-
// },
44-
// });
45-
4633
Kakao.Share.sendScrap({
4734
requestUrl: location.origin + location.pathname,
4835
templateId: 112798,

0 commit comments

Comments
 (0)