-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathChatLesson.tsx
More file actions
82 lines (69 loc) · 2.6 KB
/
ChatLesson.tsx
File metadata and controls
82 lines (69 loc) · 2.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import React, { useCallback, useEffect, useState } from "react";
import { Panel } from "@vkontakte/vkui";
import { Messenger } from "$/components/Messenger";
import { chatGpt } from "$/entity/GPT";
import { useNavigationContext } from "$/NavigationContext";
import { lessonsController } from "$/entity/lessons";
import { ChatLessonWriteBarBefore } from "./ChatLessonWriteBarBefore";
import { ChatLessonAdditionalRequests } from "./ChatLessonAdditionalRequests";
import { ChatLessonActionSuggestions } from "./ChatLessonActionSuggestions";
interface IProps {
id: string;
}
function ChatLesson({ id }: IProps) {
const [isAdditionalOpen, setAdditionsOpen] = useState(true);
const [isActionSuggestionsOpen, setActionSuggestionsOpen] = useState(true);
const onClickAdditional = useCallback(
() => setAdditionsOpen((prev) => !prev),
[]
);
const { goBack } = useNavigationContext();
const currentLesson = lessonsController.currentLesson.get();
const onStartChat = () => {
const initialRequest = currentLesson?.initialRequest;
if (initialRequest) initialRequest.select();
chatGpt.chatGptLesson.send(initialRequest?.text || "");
};
const additionalRequests = currentLesson?.additionalRequests || [];
const actionSuggestions = currentLesson?.actionSuggestions || [];
const isStopped = chatGpt.chatGptLesson.timer.isStopped$.get();
const isTyping = chatGpt.chatGptLesson.sendCompletions$.loading.get();
const isBlockActions = chatGpt.chatGptLesson.isBlockActions$.get();
useEffect(() => {
return () => chatGpt.chatGptLesson.abortSend();
}, []);
return (
<Panel id={id}>
<Messenger
writeBarBefore={
<ChatLessonWriteBarBefore
additionalRequests={additionalRequests}
onClickAdditional={onClickAdditional}
/>
}
additionalRequest={(handleSend) => (
<>
<ChatLessonAdditionalRequests
isStopped={isStopped}
additionalRequests={additionalRequests}
isAdditionalOpen={isAdditionalOpen}
handleSend={handleSend}
isTyping={isTyping || isBlockActions}
/>
<ChatLessonActionSuggestions
actionSuggestions={actionSuggestions}
isActionSuggestionsOpen={isActionSuggestionsOpen}
handleSend={handleSend}
isTyping={isTyping || isBlockActions}
isStopped={isStopped}
/>
</>
)}
onStartChat={onStartChat}
chatGpt={chatGpt.chatGptLesson}
goBack={goBack}
/>
</Panel>
);
}
export default ChatLesson;