Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | 110x 110x 38x 110x 110x 35x 110x 1x 110x 23x 23x 23x | import { useEffect, useMemo } from "react";
import Modal from "react-bootstrap/Modal";
import { Form } from "react-bootstrap";
import { Controller, useForm } from "react-hook-form";
import SimpleMdeReact from "react-simplemde-editor";
import "easymde/dist/easymde.min.css";
export default function ConceptModal({
onSubmitAction,
showModal,
toggleShowModal,
initialContents,
buttonText = "Create",
modalTitle = "Create Concept",
}) {
const {
control,
formState: { errors },
handleSubmit,
reset,
} = useForm({
defaultValues: initialContents ?? {},
});
useEffect(() => {
reset(initialContents ?? {});
}, [initialContents, reset]);
const editorOptions = useMemo(() => ({ spellChecker: false }), []);
const labelEditorOptions = useMemo(
() => ({ spellChecker: false, minHeight: "50px", toolbar: false }),
[],
);
const closeModal = () => {
toggleShowModal(false);
};
return (
<Modal
show={showModal}
onHide={closeModal}
centered={true}
data-testid={"ConceptModal-base"}
>
<Modal.Header>
<Modal.Title>{modalTitle}</Modal.Title>
<button
type="button"
className="btn-close"
aria-label="Close"
data-testid={"ConceptModal-closeButton"}
onClick={closeModal}
></button>
</Modal.Header>
<Form onSubmit={handleSubmit(onSubmitAction)}>
<Modal.Body>
<Form.Group>
<Form.Label htmlFor="label">Label</Form.Label>
<div data-testid={"ConceptModal-label"}>
<Controller
name="label"
control={control}
rules={{ required: "Label is required." }}
render={({ field }) => (
<SimpleMdeReact
value={field.value ?? ""}
onChange={field.onChange}
options={labelEditorOptions}
/>
)}
/>
</div>
{errors.label && (
<div className="invalid-feedback d-block">
{errors.label?.message}
</div>
)}
</Form.Group>
<Form.Group className="mt-3">
<Form.Label htmlFor="description">Description</Form.Label>
<div data-testid={"ConceptModal-description"}>
<Controller
name="description"
control={control}
render={({ field }) => (
<SimpleMdeReact
value={field.value ?? ""}
onChange={field.onChange}
options={editorOptions}
/>
)}
/>
</div>
</Form.Group>
<Form.Group className="mt-3">
<Form.Label htmlFor="example">Example</Form.Label>
<div data-testid={"ConceptModal-example"}>
<Controller
name="example"
control={control}
render={({ field }) => (
<SimpleMdeReact
value={field.value ?? ""}
onChange={field.onChange}
options={editorOptions}
/>
)}
/>
</div>
</Form.Group>
</Modal.Body>
<Modal.Footer>
<button
type="submit"
className="btn btn-primary"
data-testid="ConceptModal-submit"
>
{buttonText}
</button>
</Modal.Footer>
</Form>
</Modal>
);
}
|