Skip to content

Commit

Permalink
feat: fix all type errors
Browse files Browse the repository at this point in the history
  • Loading branch information
PupoSDC committed Feb 8, 2024
1 parent dbf5035 commit 80a390f
Show file tree
Hide file tree
Showing 8 changed files with 229 additions and 103 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -81,14 +81,14 @@ const Page: NextPage<PageProps> = ({ questionBank, questionId }) => {
<Tab value={"annexes"}>Annexes</Tab>
<Tab value={"relatedQs"}>Related</Tab>
</TabList>
<TabPanel value={"question"} sx={{ px: 0 }}>
<TabPanel value={"question"} sx={{ px: 0, borderRadius: 4 }}>
<QuestionEditorVariant
noSsr
questionBank={questionBank}
questionId={questionId}
/>
</TabPanel>
<TabPanel value={"explanation"} sx={{ px: 0 }}>
<TabPanel value={"explanation"} sx={{ px: 0, borderRadius: 4 }}>
<QuestionEditorExplanation
noSsr
questionBank={questionBank}
Expand All @@ -103,14 +103,22 @@ const Page: NextPage<PageProps> = ({ questionBank, questionId }) => {
sx={{ height: "100%" }}
/>
</TabPanel>
<TabPanel value={"los"} sx={{ flex: 1, overflow: "hidden" }}>
<TabPanel value={"los"} sx={{ px: 0 }}>
<QuestionEditorLearningObjectives
noSsr
questionBank={questionBank}
questionId={questionId}
sx={{ height: "100%" }}
/>
</TabPanel>
<TabPanel value={"relatedQs"} sx={{ px: 0 }}>
<QuestionEditorRelatedQuestions
noSsr
questionBank={questionBank}
questionId={questionId}
sx={{ height: "100%" }}
/>
</TabPanel>
</Tabs>
<Divider orientation="vertical">
<RightArrow size="lg" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ export const useQuestionEditor = create<QuestionEditor>()(
...new Set([
questionAid,
questionBid,
...(get()[questionBank].afterState[questionBid]
...(get()[questionBank].afterState[questionAid]
?.relatedQuestions ?? []),
...(get()[questionBank].afterState[questionBid]
?.relatedQuestions ?? []),
Expand All @@ -275,6 +275,7 @@ export const useQuestionEditor = create<QuestionEditor>()(
const question = state[questionBank].afterState[id];
if (!question) return;
question.relatedQuestions = questionIds.filter((i) => i !== id);
console.log(question.relatedQuestions);
});
});
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,12 @@ const SearchListItem = memo<{
questionId: QuestionId;
questionBank: QuestionBankName;
}>(({ questionId, questionBank }) => {
const {
initialState,
currentState,
markQuestionAsDeleted,
undoMarkQuestionAsDeleted,
} = useQuestionEditor((s) => ({
initialState: s[questionBank].beforeState[questionId],
currentState: s[questionBank].afterState[questionId],
markQuestionAsDeleted: s.markQuestionAsDeleted,
undoMarkQuestionAsDeleted: s.undoMarkQuestionAsDeleted,
}));
const { initialState, currentState, markQuestionAsDeleted } =
useQuestionEditor((s) => ({
initialState: s[questionBank].beforeState[questionId],
currentState: s[questionBank].afterState[questionId],
markQuestionAsDeleted: s.markQuestionAsDeleted,
}));

const initial = {
preview: getQuestionPreview(initialState.variant),
Expand Down Expand Up @@ -175,9 +170,6 @@ const SearchListItem = memo<{
size="sm"
variant="plain"
color="success"
onClick={() =>
undoMarkQuestionAsDeleted({ questionBank, questionId })
}
children={<UndoIcon />}
/>
</Tooltip>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { useState, useTransition } from "react";
import { Textarea } from "@mui/joy";
import { default as Editor } from "@monaco-editor/react";
import { useColorScheme } from "@mui/joy";
import { container } from "../../wraper";
import { useQuestionEditor } from "../hooks/use-question-editor";
import type { QuestionBankName } from "@chair-flight/core/question-bank";
Expand All @@ -20,7 +21,8 @@ type Data =
AppRouterOutput["containers"]["questions"]["getQuestionEditorExplanation"];

export const QuestionEditorExplanation = container<Props, Params, Data>(
({ questionId, questionBank, sx }) => {
({ questionId, questionBank }) => {
const { mode } = useColorScheme();
const { explanation, setQuestionExplanation } = useQuestionEditor((s) => ({
explanation: s[questionBank].afterState[questionId]?.explanation ?? "",
setQuestionExplanation: s.setQuestionExplanation,
Expand All @@ -29,16 +31,26 @@ export const QuestionEditorExplanation = container<Props, Params, Data>(
const [thisExplanation, setThisExplanation] = useState(explanation);
const [, startTransition] = useTransition();

const updateExplanation = (mdInput: string | undefined = "") => {
setThisExplanation(mdInput);
startTransition(() =>
setQuestionExplanation({
questionBank,
questionId,
explanation: mdInput,
}),
);
};

return (
<Textarea
<Editor
className="vs-code-editor"
defaultLanguage="markdown"
value={thisExplanation}
sx={{ height: "100%", flex: 1, ...sx }}
onChange={(e) => {
const explanation = e.target.value;
setThisExplanation(explanation);
startTransition(() =>
setQuestionExplanation({ questionBank, questionId, explanation }),
);
onChange={updateExplanation}
theme={mode === "dark" ? "vs-dark" : "vs-light"}
options={{
wordWrap: "on",
}}
/>
);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { QuestionEditorPreview } from "./question-editor-preview";
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
import { useState } from "react";
import { default as Editor } from "@monaco-editor/react";
import {
TabList,
Tabs,
Tab,
tabClasses,
TabPanel,
tabPanelClasses,
useColorScheme,
} from "@mui/joy";
import YAML from "yaml";
import { getRandomId } from "@chair-flight/base/utils";
import {
createTestQuestion,
getQuestionPreview,
type QuestionBankName,
} from "@chair-flight/core/question-bank";
import { MarkdownClient, Ups } from "@chair-flight/react/components";
import { container } from "../../wraper";
import { useQuestionEditor } from "../hooks/use-question-editor";
import { QuestionStandAloneComponent } from "../question-stand-alone/question-stand-alone";
import type { AppRouterOutput } from "@chair-flight/trpc/server";

type Props = {
questionId: string;
questionBank: QuestionBankName;
};

type Params = Props;

type Data =
AppRouterOutput["containers"]["questions"]["getQuestionEditorPreview"];

export const QuestionEditorPreview = container<Props, Params, Data>(
({ questionId, questionBank, component = "div", sx }) => {
const { mode } = useColorScheme();
const [seed, setSeed] = useState(getRandomId());

const { explanation, variant, template } = useQuestionEditor((s) => ({
template: s[questionBank].afterState[questionId],
variant: s[questionBank].afterState[questionId]?.variant,
explanation: s[questionBank].afterState[questionId]?.explanation ?? "",
setQuestionExplanation: s.setQuestionExplanation,
}));

if (!template || !variant) return null;

console.log(mode === "dark" ? "vs-dark" : "vs-light");
return (
<Tabs
defaultValue={"Preview"}
component={component}
sx={{
background: "transparent",
...sx,

[`& .${tabPanelClasses.root}`]: {
flex: 1,
overflow: "hidden",
backgroundColor: "background.surface",
border: "solid 1px var(--joy-palette-divider)",
borderRadius: 4,
my: 1,
py: 0,
},

[`& .${tabClasses.selected}`]: {
color: "primary.plainColor",
background: "transparent",
},
}}
>
<TabList sx={{ justifyContent: "center" }}>
<Tab value={"Preview"}>Preview</Tab>
<Tab value={"Demo"}>Demo</Tab>
<Tab value={"Explanation"}>Explanation</Tab>
<Tab value={"Json"}>JSON</Tab>
<Tab value={"Validation"}>Validation</Tab>
</TabList>
<TabPanel value={"Preview"} sx={{ px: 1 }}>
<MarkdownClient>{getQuestionPreview(variant)}</MarkdownClient>
</TabPanel>
<TabPanel value={"Demo"} sx={{ px: 1 }}>
<QuestionStandAloneComponent
questionBank={questionBank}
questionId={questionId}
seed={seed}
onNavigateToNewSeed={({ seed }) => setSeed(seed)}
question={createTestQuestion(template, { seed })}
annexes={[]}
/>
</TabPanel>
<TabPanel value={"Explanation"} sx={{ px: 1 }}>
{explanation ? (
<MarkdownClient>{explanation}</MarkdownClient>
) : (
<Ups message="No explanation provided" />
)}
</TabPanel>
<TabPanel value={"Json"} sx={{ px: 0 }}>
<Editor
language="yaml"
value={YAML.stringify(template, null, 2)}
theme={mode === "dark" ? "vs-dark" : "vs-light"}
options={{ readOnly: true, wordWrap: "on" }}
/>
</TabPanel>
<TabPanel value={"Diff"} sx={{ px: 0 }}>
<Editor
language="yaml"
value={"123"}
options={{
readOnly: true,
wordWrap: "on",
theme: mode === "dark" ? "vs-dark" : "vs-light",
}}
/>
</TabPanel>
</Tabs>
);
},
);

QuestionEditorPreview.displayName = "QuestionEditorPreview";
QuestionEditorPreview.getData = async () => ({});
QuestionEditorPreview.useData = () => ({});
Loading

0 comments on commit 80a390f

Please sign in to comment.