Skip to content

Commit 93e0c52

Browse files
authored
Merge pull request #88 from CS3219-AY2425S1/submit-button
Add Submit Button Functionality
2 parents 02446a3 + c807128 commit 93e0c52

File tree

3 files changed

+104
-6
lines changed

3 files changed

+104
-6
lines changed

frontend/src/presentation/components/CodeEditor/CodeActionButtons.tsx

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,25 @@
11
import { Button } from "antd";
22
import { useCollaboration } from "domain/context/CollaborationContext";
3-
import { PlayCircleOutlined, CloudUploadOutlined } from "@ant-design/icons";
3+
import { PlayCircleOutlined } from "@ant-design/icons";
44
import styles from "./CodeActionButtons.module.css";
5+
import SubmitButton from "./SubmitButton";
56

67
interface CodeActionButtonsProps {
78
disabled?: boolean;
9+
getEditorText: () => string;
10+
questionId: string;
11+
roomId: string;
12+
attemptStartedAt: Date;
13+
collaboratorId: string;
814
}
9-
export const CodeActionButtons: React.FC<CodeActionButtonsProps> = ({ disabled = false }) => {
15+
export const CodeActionButtons: React.FC<CodeActionButtonsProps> = ({
16+
disabled = false,
17+
getEditorText,
18+
questionId,
19+
roomId,
20+
attemptStartedAt,
21+
collaboratorId,
22+
}) => {
1023
const { handleExecuteCode } = useCollaboration();
1124
return (
1225
<>
@@ -20,9 +33,13 @@ export const CodeActionButtons: React.FC<CodeActionButtonsProps> = ({ disabled =
2033
>
2134
Run
2235
</Button>
23-
<Button className={styles.submitButton} icon={<CloudUploadOutlined />} disabled={disabled}>
24-
Submit
25-
</Button>
36+
<SubmitButton
37+
getEditorText={getEditorText}
38+
questionId={questionId}
39+
roomId={roomId}
40+
attemptStartedAt={attemptStartedAt}
41+
collaboratorId={collaboratorId}
42+
/>
2643
</>
2744
);
2845
};

frontend/src/presentation/components/CodeEditor/CodeEditor.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,14 @@ const CodeEditor: React.FC<CodeEditorProps> = ({
9292
icon={theme === "vs-light" ? <SunOutlined /> : <MoonFilled />}
9393
/>
9494

95-
<CodeActionButtons disabled={isExecuting} />
95+
<CodeActionButtons
96+
disabled={isExecuting}
97+
getEditorText={() => editorRef.current?.getValue() || ""}
98+
questionId={questionId}
99+
roomId={roomId}
100+
attemptStartedAt={attemptStartedAt}
101+
collaboratorId={collaboratorId}
102+
/>
96103
<LeaveButton
97104
getEditorText={() => editorRef.current?.getValue() || ""}
98105
questionId={questionId}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import React, { useState } from "react";
2+
import { Button, Modal } from "antd";
3+
import { CloudUploadOutlined } from "@ant-design/icons";
4+
import styles from "./CodeActionButtons.module.css";
5+
import { historyUseCases } from "domain/usecases/HistoryUseCases";
6+
7+
interface SubmitButtonProps {
8+
getEditorText: () => string;
9+
questionId: string;
10+
roomId: string;
11+
attemptStartedAt: Date;
12+
collaboratorId: string;
13+
}
14+
15+
const SubmitButton: React.FC<SubmitButtonProps> = ({
16+
getEditorText,
17+
questionId,
18+
roomId,
19+
attemptStartedAt,
20+
collaboratorId,
21+
}) => {
22+
const [isModalVisible, setIsModalVisible] = useState(false);
23+
const [editorContent, setEditorContent] = useState("");
24+
25+
const showModal = () => {
26+
const content = getEditorText();
27+
setEditorContent(content);
28+
setIsModalVisible(true);
29+
};
30+
31+
const handleOk = async () => {
32+
await historyUseCases.createOrUpdateUserHistory(
33+
questionId,
34+
roomId,
35+
attemptStartedAt.getTime().toString(),
36+
Date.now().toString(),
37+
collaboratorId,
38+
getEditorText(),
39+
);
40+
setIsModalVisible(false);
41+
};
42+
43+
const handleCancel = () => {
44+
setIsModalVisible(false);
45+
};
46+
47+
return (
48+
<>
49+
<Button
50+
onClick={showModal}
51+
type="text"
52+
icon={<CloudUploadOutlined />}
53+
className={styles.submitButton}
54+
>
55+
Submit
56+
</Button>
57+
<Modal
58+
title="Editor Content"
59+
open={isModalVisible}
60+
onOk={handleOk}
61+
onCancel={handleCancel}
62+
footer={[
63+
<Button key="ok" type="primary" onClick={handleOk}>
64+
OK
65+
</Button>,
66+
]}
67+
>
68+
<pre className={styles.modalContent}>{editorContent}</pre>
69+
</Modal>
70+
</>
71+
);
72+
};
73+
74+
export default SubmitButton;

0 commit comments

Comments
 (0)