Skip to content

Commit

Permalink
Merge pull request #4 from Tekiter/reset-result-on-change
Browse files Browse the repository at this point in the history
feat: 입력 변경시 실행 결과 초기화
  • Loading branch information
Tekiter authored Oct 12, 2022
2 parents 8fe1e6f + 2b2b44f commit f3d7950
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 25 deletions.
7 changes: 6 additions & 1 deletion src/commands/useTestcaseRunner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,14 @@ const useTestcaseRunner = () => {
[],
);

const makeIdle = useRecoilCallback(({ set }) => (id: string) => {
const makeWaiting = useRecoilCallback(({ set }) => (id: string) => {
set(executeStatusFamily(id), { status: "waiting" });
});

const makeIdle = useRecoilCallback(({ set }) => (id: string) => {
set(executeStatusFamily(id), { status: "idle" });
});

const stopAll = useRecoilCallback(({ snapshot, set }) => async () => {
queue.clear();

Expand All @@ -65,6 +69,7 @@ const useTestcaseRunner = () => {
return {
runAll,
run,
makeWaiting,
makeIdle,
stopAll,
};
Expand Down
12 changes: 10 additions & 2 deletions src/components/testcase/InputEditor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@ import { TestcaseInput } from "@/states/testcase";

interface InputEditorProps {
value: TestcaseInput;
editable?: boolean;
onChange(newVal: TestcaseInput): void;
onKeyDown?(): void;
}

const InputEditor: FC<InputEditorProps> = ({ value, onChange }) => {
const InputEditor: FC<InputEditorProps> = ({ value, editable, onChange, onKeyDown }) => {
console.log("Rerender");
const updateData = (data: TestcaseInput) => {
onChange(data);
};
Expand All @@ -23,7 +26,12 @@ const InputEditor: FC<InputEditorProps> = ({ value, onChange }) => {

return (
<StyledInputEditor>
<ReactCodeMirror value={value.text} onChange={(value) => handlePlainTextChange(value)} />
<ReactCodeMirror
value={value.text}
onChange={(value) => handlePlainTextChange(value)}
onKeyDown={onKeyDown}
editable={editable}
/>
</StyledInputEditor>
);
};
Expand Down
53 changes: 31 additions & 22 deletions src/components/testcase/TestcasePanel.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { Tab, TabList, Tabs } from "@chakra-ui/react";
import { css } from "@emotion/react";
import styled from "@emotion/styled";
import { FC, useState } from "react";
import { FC, useMemo, useState } from "react";
import { useRecoilValue } from "recoil";

import useTestcaseCommand from "@/commands/useTestcaseCommand";
import useTestcaseRunner from "@/commands/useTestcaseRunner";
import { testcaseFamily, TestcaseID } from "@/states/testcase";

import AnswerEditor from "./AnswerEditor";
Expand All @@ -18,31 +19,39 @@ interface TestcasePanelProps {

const TestcasePanel: FC<TestcasePanelProps> = ({ testcaseId }) => {
const testcaseCommand = useTestcaseCommand();
const runner = useTestcaseRunner();
const testcase = useRecoilValue(testcaseFamily(testcaseId));

const [selectedTabIndex, setSelectedTabIndex] = useState(0);

const tabs = [
{
title: "입력",
content: (
<InputEditor value={testcase.input} onChange={(input) => testcaseCommand.changeValue(testcaseId, { input })} />
),
},
{
title: "정답",
content: (
<AnswerEditor
value={testcase.answer}
onChange={(answer) => testcaseCommand.changeValue(testcaseId, { answer })}
/>
),
},
{
title: "출력결과",
content: <Result testcaseId={testcaseId} />,
},
];
const tabs = useMemo(
() => [
{
title: "입력",
content: (
<InputEditor
value={testcase.input}
onChange={(input) => testcaseCommand.changeValue(testcaseId, { input })}
onKeyDown={() => runner.makeIdle(testcaseId)}
/>
),
},
{
title: "정답",
content: (
<AnswerEditor
value={testcase.answer}
onChange={(answer) => testcaseCommand.changeValue(testcaseId, { answer })}
/>
),
},
{
title: "출력결과",
content: <Result testcaseId={testcaseId} />,
},
],
[testcaseId, testcase],
);

return (
<StyledTestcasePanel>
Expand Down

0 comments on commit f3d7950

Please sign in to comment.