Skip to content

Commit 0f6e3f7

Browse files
authored
Merge pull request #101 from Team-Senifit/fix/exercise-done-broadcast
[운동 탭] 수업 종료 이벤트 전달 안정화
2 parents 088073d + 50bf0d4 commit 0f6e3f7

2 files changed

Lines changed: 11 additions & 13 deletions

File tree

src/app/(plain)/exercise/class/[id]/panel/WorkoutVideoPlayer.tsx

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,10 @@ export default function WorkoutVideoPlaylist({
7676
const notifyDone = useCallback((): void => {
7777
const pid = Array.isArray(programId) ? programId[0] : programId;
7878
notifyClassDone({ programId: pid, seconds });
79-
window.close();
79+
// 브로드캐스트가 부모 탭에 전달될 시간 확보
80+
window.setTimeout(() => {
81+
window.close();
82+
}, 50);
8083
}, [programId, seconds]);
8184

8285
const initialIndex = useMemo(() => {
@@ -105,13 +108,7 @@ export default function WorkoutVideoPlaylist({
105108
let target = next;
106109

107110
if (next >= len) {
108-
if (!loop) {
109-
// 마지막 영상까지 끝나면 자동으로 완료 처리
110-
const pid = Array.isArray(programId) ? programId[0] : programId;
111-
notifyClassDone({ programId: pid, seconds });
112-
window.close();
113-
return;
114-
}
111+
if (!loop) return notifyDone();
115112
target = 0;
116113
} else if (next < 0) {
117114
target = 0;
@@ -120,7 +117,7 @@ export default function WorkoutVideoPlaylist({
120117
setIndex(target);
121118
onIndexChange?.(target, videos[target]);
122119
},
123-
[videos, loop, onIndexChange, programId, seconds],
120+
[videos, loop, notifyDone, onIndexChange],
124121
);
125122
const { setToastOpen } = useToastStore();
126123

src/utils/broadcast.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,16 +55,17 @@ export function notifyClassDone(payload: {
5555
at: Date.now(),
5656
};
5757

58+
// storage 이벤트가 다른 탭(부모 페이지)에 안정적으로 전달되도록 먼저 기록
5859
try {
59-
const bc = new BroadcastChannel(CHANNEL);
60-
bc.postMessage(data);
61-
bc.close();
60+
localStorage.setItem(STORAGE_KEY, JSON.stringify(data));
6261
} catch {
6362
// ignore
6463
}
6564

6665
try {
67-
localStorage.setItem(STORAGE_KEY, JSON.stringify(data));
66+
const bc = new BroadcastChannel(CHANNEL);
67+
bc.postMessage(data);
68+
bc.close();
6869
} catch {
6970
// ignore
7071
}

0 commit comments

Comments
 (0)