that is my full code
import React, { useEffect, useState } from “react”;
import ZoomMtgEmbedded from “@zoom/meetingsdk/embedded”;
import ClassRating from “@/components/ClassRating”;
import { reviewClass } from “…/pages/api/services/book-a-class”;
function ZoomMeeting({ signature, meetingNumber, sdkKey, password, userName, coachId, classId }) {
const [rating, setRating] = useState(0);
const [isOpen, setIsOpen] = useState(false); // Start with the modal closed
const [review, setReview] = useState(“”);
const [loading, setLoading] = useState(false);
useEffect(() => {
const client = ZoomMtgEmbedded.createClient();
async function startMeeting() {
let meetingSDKElement = document.getElementById("meetingSDKElement");
try {
await client.init({
zoomAppRoot: meetingSDKElement,
language: 'en-US',
});
client.on('user-leave', (data) => {
console.log('User has left the meeting:', data);
// Open the review modal when a user leaves the meeting
if (data.role === 1) { // Optional: Check if the host leaves
setIsOpen(true);
}
});
client.on('leave', () => {
console.log('User has left the meeting');
// Open the review modal when the user leaves the meeting
setIsOpen(true);
});
await client.join({
signature: signature,
sdkKey: sdkKey,
meetingNumber: meetingNumber,
password: password,
userName: userName,
});
console.log('Joined successfully');
} catch (error) {
console.error('Error initializing or joining meeting:', error);
if (error.type === 'IMPROPER_MEETING_STATE') {
console.error('The meeting state is improper:', error.reason);
}
}
}
if (signature) {
startMeeting();
}
// Cleanup event listeners when component unmounts
return () => {
client.off('user-leave');
client.off('leave');
};
}, [signature, meetingNumber, sdkKey, password, userName]);
const handleSubmit = async (event) => {
event.preventDefault();
try {
setLoading(true);
const payload = {
coachId: coachId,
classId: classId,
rating: rating,
reviewText: review,
};
const response = await reviewClass(payload);
if (response.data.messageCode === 1041) {
setIsOpen(false);
// Optional: Handle success feedback
// openSuccessModal({ title: "Success!", message: "Your review was submitted successfully!" });
} else {
console.error("Review submission failed: ", response.data.message);
}
} catch (error) {
console.error("Error submitting review: ", error);
} finally {
setLoading(false);
}
};
return (
<div
style={{
display: ‘flex’,
alignItems: ‘center’,
justifyContent: ‘center’,
height: ‘200vh’,
width: ‘200vw’,
}}
>
<div id=“meetingSDKElement” style={{ width: ‘80%’, height: ‘80%’ }}>
{/* Render the ClassRating modal component */}
{isOpen && (
<ClassRating
setReview={setReview}
setIsOpen={setIsOpen}
isOpen={isOpen}
setRating={setRating}
rating={rating}
submit={handleSubmit}
/>
)}
</div>
);
}
export default ZoomMeeting;