116 lines
3.2 KiB
React
116 lines
3.2 KiB
React
|
import dynamic from "next/dynamic";
|
||
|
import { useEffect, useState } from "react";
|
||
|
import { CODE_SEPARATOR, PYTHON_DEFAULT } from "../../utils/constant.js";
|
||
|
import styles from "../../styles/exos/ModelInput.module.scss";
|
||
|
import { parseClassName } from "../../utils/utils.js";
|
||
|
|
||
|
import { MdOutlineOpenInNew } from "react-icons/md";
|
||
|
import { RiErrorWarningFill } from "react-icons/ri";
|
||
|
|
||
|
let CustomEditor;
|
||
|
|
||
|
if (typeof window !== "undefined") {
|
||
|
CustomEditor = dynamic(() => import("./Editor.jsx"));
|
||
|
}
|
||
|
|
||
|
export default function ModelInput({
|
||
|
model,
|
||
|
onChange,
|
||
|
setModel,
|
||
|
setFull,
|
||
|
full,
|
||
|
step,
|
||
|
tempSpec,
|
||
|
}) {
|
||
|
const [python, setPython] = useState("");
|
||
|
useEffect(() => {
|
||
|
if (full) {
|
||
|
setPython(model.data ? model.data: PYTHON_DEFAULT);
|
||
|
}
|
||
|
return () => {
|
||
|
setPython("");
|
||
|
};
|
||
|
}, [full]);
|
||
|
return (
|
||
|
<>
|
||
|
{!full && (
|
||
|
<div
|
||
|
className={parseClassName([
|
||
|
styles["model-input__full-container"],
|
||
|
styles["exo-edit"],
|
||
|
])}
|
||
|
>
|
||
|
<div className={styles["input-container"]}>
|
||
|
<button
|
||
|
className={parseClassName([
|
||
|
styles["open-btn"],
|
||
|
styles["button-lang"],
|
||
|
styles["button-lang-python"],
|
||
|
])}
|
||
|
onClick={(e) => {
|
||
|
e.preventDefault();
|
||
|
//setActive(!active);
|
||
|
setFull(true);
|
||
|
}}
|
||
|
>
|
||
|
<MdOutlineOpenInNew />
|
||
|
Ouvrir l'éditeur
|
||
|
</button>
|
||
|
{python !== model.model && <RiErrorWarningFill className="red" />}
|
||
|
|
||
|
<input
|
||
|
type="file"
|
||
|
onChange={async (e) => {
|
||
|
let text = await e.target.files[0].text().then((res) => res);
|
||
|
setModel({ filename: e.target.files[0].name, data: text });
|
||
|
}}
|
||
|
/>
|
||
|
</div>
|
||
|
</div>
|
||
|
)}
|
||
|
|
||
|
{full && (
|
||
|
<>
|
||
|
{CustomEditor && full && (
|
||
|
<CustomEditor
|
||
|
step={step}
|
||
|
placeholder="Fonction main qui renvoie un un objet avec calcul = le calcul à afficher "
|
||
|
mode="python"
|
||
|
name="blah2"
|
||
|
fontSize={14}
|
||
|
//showPrintMargin={true}
|
||
|
showGutter={true}
|
||
|
highlightActiveLine={true}
|
||
|
value={python}
|
||
|
onChange={(e) => {
|
||
|
setPython(e);
|
||
|
}}
|
||
|
setOptions={{
|
||
|
showLineNumbers: true,
|
||
|
tabSize: 2,
|
||
|
}}
|
||
|
//editorProps={{ $blockScrolling: true }}
|
||
|
enableBasicAutocompletion={false}
|
||
|
enableLiveAutocompletion={true}
|
||
|
//enableSnippets={true}
|
||
|
className="model_input-code_input"
|
||
|
showPrintMargin={false}
|
||
|
validate={(e) => {
|
||
|
e.preventDefault();
|
||
|
onChange && onChange({data: python, filename: model.filename});
|
||
|
|
||
|
setFull(false);
|
||
|
}}
|
||
|
cancel={() => {
|
||
|
setFull(false);
|
||
|
setPython(tempSpec.exo_model.data);
|
||
|
}}
|
||
|
filename={model.filename}
|
||
|
/>
|
||
|
)}
|
||
|
</>
|
||
|
)}
|
||
|
</>
|
||
|
);
|
||
|
}
|