Skip to content

Commit 51d82c5

Browse files
committed
mo(feat): impl reschedule dialog after lesson
1 parent fde3bd4 commit 51d82c5

File tree

5 files changed

+80
-37
lines changed

5 files changed

+80
-37
lines changed

apps/web/src/components/Session/InSession.tsx

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,29 @@
1-
import React, { useEffect, useState } from "react";
2-
import { SessionChat } from "@/components/Session/SessionChat";
3-
import { useNavigate, useSearchParams } from "react-router-dom";
4-
import Controllers, { Controller } from "@/components/Session/Controllers";
51
import CallMembers from "@/components/Session/CallMembers";
6-
import { useMediaCall } from "@/hooks/mediaCall";
2+
import Controllers, { Controller } from "@/components/Session/Controllers";
3+
import PostSessionDialogs from "@/components/Session/PostSessionDialogs";
4+
import { SessionChat } from "@/components/Session/SessionChat";
75
import { RemoteMember } from "@/components/Session/types";
8-
import { AlertType, AlertV2 } from "@litespace/ui/Alert";
9-
import { useRender } from "@litespace/headless/common";
6+
import { useOnError } from "@/hooks/error";
7+
import { useMediaCall } from "@/hooks/mediaCall";
8+
import dayjs from "@/lib/dayjs";
109
import { Device, MemberConnectionState } from "@/modules/MediaCall/types";
11-
import { useFormatMessage } from "@litespace/ui/hooks/intl";
12-
import { Button } from "@litespace/ui/Button";
10+
import CallIncoming from "@litespace/assets/CallIncoming";
1311
import Close2 from "@litespace/assets/Close2";
14-
import { ISession, IUser, Wss } from "@litespace/types";
15-
import { useSocket } from "@litespace/headless/socket";
16-
import { useCreateReport } from "@litespace/headless/report";
12+
import { useRender } from "@litespace/headless/common";
1713
import { useUser } from "@litespace/headless/context/user";
18-
import dayjs from "@/lib/dayjs";
19-
import { useOnError } from "@/hooks/error";
20-
import { useToast } from "@litespace/ui/Toast";
2114
import { useReportLesson } from "@litespace/headless/lessons";
22-
import { Web } from "@litespace/utils/routes";
15+
import { useCreateReport } from "@litespace/headless/report";
16+
import { useSocket } from "@litespace/headless/socket";
17+
import { ISession, IUser, Wss } from "@litespace/types";
18+
import { AlertType, AlertV2 } from "@litespace/ui/Alert";
19+
import { Button } from "@litespace/ui/Button";
2320
import { ConfirmationDialog } from "@litespace/ui/ConfirmationDialog";
24-
import CallIncoming from "@litespace/assets/CallIncoming";
21+
import { useFormatMessage } from "@litespace/ui/hooks/intl";
22+
import { useToast } from "@litespace/ui/Toast";
2523
import { MIN_LESSON_DURATION } from "@litespace/utils";
24+
import { Web } from "@litespace/utils/routes";
25+
import React, { useEffect, useState } from "react";
26+
import { useNavigate, useSearchParams } from "react-router-dom";
2627

2728
const InSession: React.FC<{
2829
sessionId: ISession.Id;
@@ -55,6 +56,8 @@ const InSession: React.FC<{
5556
const [_, setParams] = useSearchParams();
5657
const [newMessageIndicator, setNewMessageIndicator] = useState<number>(0);
5758

59+
const [postSession, setPostSession] = useState(false);
60+
5861
const [connState, setConnState] = useState<
5962
MemberConnectionState | undefined
6063
>();
@@ -309,7 +312,7 @@ const InSession: React.FC<{
309312
call.manager?.session.disconnect().then(
310313
// this approach makes the lesson page more robust by avoiding
311314
// akward scenarios. Like livekit not emitting the disconnect event.
312-
() => document.location.reload()
315+
() => setPostSession(true)
313316
)
314317
}
315318
audio={controllers.audio}
@@ -336,6 +339,13 @@ const InSession: React.FC<{
336339
open={reportLessonDialog.open}
337340
close={reportLessonDialog.hide}
338341
/>
342+
343+
{user?.role === IUser.Role.Student ? (
344+
<PostSessionDialogs
345+
postSession={postSession}
346+
tutorName={remoteMember.name}
347+
/>
348+
) : null}
339349
</div>
340350
);
341351
};
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { useFindTutorRatings } from "@litespace/headless/rating";
2+
import { Dialog } from "@litespace/ui/Dialog";
3+
import { RateLesson } from "@litespace/ui/Lessons";
4+
import React, { useState } from "react";
5+
6+
const PostSessionDialogs: React.FC<{
7+
postSession: boolean;
8+
tutorName: string | null;
9+
tutorId: number;
10+
}> = ({ postSession, tutorName }) => {
11+
const [isRated, setIsRated] = useState(false);
12+
13+
const rate = useFindTutorRatings();
14+
15+
if (!postSession) return;
16+
return (
17+
<div>
18+
<Dialog open={!isRated}>
19+
<RateLesson
20+
close={() => {}}
21+
onRate={() => setIsRated(true)}
22+
rateLoading={false}
23+
tutorName={tutorName}
24+
type="session"
25+
/>
26+
</Dialog>
27+
<Dialog open={isRated}>reschedule with the same tutor next week</Dialog>
28+
</div>
29+
);
30+
};
31+
32+
export default PostSessionDialogs;

apps/web/src/components/Session/PreSession.tsx

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
1-
import { ISession, IUser, Wss } from "@litespace/types";
2-
import React, { useCallback, useEffect, useMemo, useState } from "react";
3-
import Ready from "@/components/Session/Ready";
4-
import { useSocket } from "@litespace/headless/socket";
5-
import { Typography } from "@litespace/ui/Typography";
6-
import { Button } from "@litespace/ui/Button";
7-
import { useFormatMessage } from "@litespace/ui/hooks/intl";
8-
import { RefreshCw } from "react-feather";
9-
import { useUser } from "@litespace/headless/context/user";
10-
import { useGetSessionToken } from "@litespace/headless/sessions";
11-
import { sockets } from "@litespace/atlas";
12-
import { env } from "@/lib/env";
13-
import { useMediaCall } from "@/hooks/mediaCall";
14-
import InSession from "@/components/Session/InSession";
15-
import { CallError, Device } from "@/modules/MediaCall/types";
16-
import Preview from "@/components/Session/Preview";
171
import Controllers, { Controller } from "@/components/Session/Controllers";
182
import { Dialogs, DialogTypes } from "@/components/Session/Dialogs";
3+
import InSession from "@/components/Session/InSession";
4+
import Preview from "@/components/Session/Preview";
5+
import Ready from "@/components/Session/Ready";
196
import { RemoteMember } from "@/components/Session/types";
20-
import { useToast } from "@litespace/ui/Toast";
7+
import { useMediaCall } from "@/hooks/mediaCall";
8+
import { env } from "@/lib/env";
9+
import { CallError, Device } from "@/modules/MediaCall/types";
10+
import Microphone from "@litespace/assets/Microphone";
11+
import { sockets } from "@litespace/atlas";
2112
import { useRender } from "@litespace/headless/common";
13+
import { useUser } from "@litespace/headless/context/user";
14+
import { useGetSessionToken } from "@litespace/headless/sessions";
15+
import { useSocket } from "@litespace/headless/socket";
16+
import { ISession, IUser, Wss } from "@litespace/types";
17+
import { Button } from "@litespace/ui/Button";
2218
import { ConfirmationDialog } from "@litespace/ui/ConfirmationDialog";
23-
import Microphone from "@litespace/assets/Microphone";
19+
import { useFormatMessage } from "@litespace/ui/hooks/intl";
20+
import { useToast } from "@litespace/ui/Toast";
21+
import { Typography } from "@litespace/ui/Typography";
2422
import { VideoPlayer } from "@litespace/ui/VideoPlayer";
23+
import React, { useCallback, useEffect, useMemo, useState } from "react";
24+
import { RefreshCw } from "react-feather";
2525

2626
const PreSession: React.FC<{
2727
type: ISession.Type;

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,5 +118,5 @@
118118
"sharp"
119119
]
120120
},
121-
"packageManager": "pnpm@10.16.1+sha512.0e155aa2629db8672b49e8475da6226aa4bdea85fdcdfdc15350874946d4f3c91faaf64cbdc4a5d1ab8002f473d5c3fcedcd197989cf0390f9badd3c04678706"
121+
"packageManager": "pnpm@10.17.1+sha512.17c560fca4867ae9473a3899ad84a88334914f379be46d455cbf92e5cf4b39d34985d452d2583baf19967fa76cb5c17bc9e245529d0b98745721aa7200ecaf7a"
122122
}

packages/ui/src/components/Lessons/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ export { PastLessonsTable } from "@/components/Lessons/PastLessonsTable";
55
export { PastLessonsSummary } from "@/components/Lessons/PastLessonsSummary";
66
export { UpcomingLessonsSummary } from "@/components/Lessons/UpcomingLessonsSummary";
77
export { CancelLesson } from "@/components/Lessons/CancelLesson/CancelLesson";
8+
export { RateLesson } from "@/components/Lessons/RateLesson";

0 commit comments

Comments
 (0)