From 98be17522ef0474a40b134a3ca4e0d2e8096d469 Mon Sep 17 00:00:00 2001 From: dan Date: Wed, 3 Jan 2024 18:36:53 -0500 Subject: feat: stuff changed --- src/components/FormBuilder/FinalForm.js | 12 ++ src/components/FormBuilder/index.js | 201 +++++++++++++++++++------------- 2 files changed, 135 insertions(+), 78 deletions(-) create mode 100644 src/components/FormBuilder/FinalForm.js (limited to 'src/components/FormBuilder') diff --git a/src/components/FormBuilder/FinalForm.js b/src/components/FormBuilder/FinalForm.js new file mode 100644 index 0000000..070a0fe --- /dev/null +++ b/src/components/FormBuilder/FinalForm.js @@ -0,0 +1,12 @@ +import { Form } from "./index"; + +export default function FinalForm({ formId, setResults, results }) { + return ( +
+ ); +} diff --git a/src/components/FormBuilder/index.js b/src/components/FormBuilder/index.js index 5636b32..5c77c25 100644 --- a/src/components/FormBuilder/index.js +++ b/src/components/FormBuilder/index.js @@ -8,7 +8,9 @@ import { TextField, } from "@mui/material"; import React, { useRef, useState } from "react"; -export default function FormBuilder() { +import useForm from "../../hooks/useForm"; + +export default function FormBuilder({ formId }) { return (

FormBuilder

@@ -18,7 +20,7 @@ export default function FormBuilder() { alignItems={"flex-start"} spacing={2} > - +
@@ -28,43 +30,57 @@ export default function FormBuilder() { const availableWidgets = { label: { name: "Label", - element: ({ id, name, setName }) => ( - setName(e.target.value)} - fullWidth - /> - ), - finalElement: ({ id }) =>
{id}
, + element: ({ id, name, setName, finalField }) => + finalField ? ( +
{name}
+ ) : ( + setName(e.target.value)} + fullWidth + /> + ), }, number: { name: "Number", - element: ({ id }) => ( + element: ({ id, value, setValue }) => ( { + if (setValue) { + setValue(e.target.value); + } + }} fullWidth /> ), }, text: { name: "Text", - element: ({ id }) => ( + element: ({ id, setValue, value }) => ( { + if (setValue) { + setValue(e.target.value); + } + }} /> ), }, multiline: { name: "Multiline", - element: ({ id }) => ( + element: ({ id, setValue, value }) => ( { + if (setValue) { + setValue(e.target.value); + } + }} /> ), }, @@ -134,7 +156,14 @@ function WidgetCard({ name, element, type, finalElement }) { } } -function FormField({ formField, setFormField, deleteFormField }) { +function FormField({ + formField, + setFormField, + deleteFormField, + editable, + setResult, + result, +}) { const { id, type, name } = formField; function setName(name) { @@ -147,33 +176,47 @@ function FormField({ formField, setFormField, deleteFormField }) { const { element: Element } = availableWidgets[type]; const dragHandleRef = useRef(); const [target, setTarget] = useState(); - return ( - { - setTarget(e.target); - }} - onDragStart={(e) => { - if (dragHandleRef.current.contains(target)) { - e.dataTransfer.setData("application/formwidgetid", id); - } else { - e.preventDefault(); - } - }} - > - - - - - - - - - ); + if (!editable) { + return ( + + ); + } else { + return ( + { + setTarget(e.target); + }} + onDragStart={(e) => { + if (dragHandleRef.current.contains(target)) { + e.dataTransfer.setData("application/formwidgetid", id); + } else { + e.preventDefault(); + } + }} + > + + + + + + + + + ); + } } function capture(e) { @@ -214,8 +257,9 @@ function DropZone({ insertField, index, moveField }) { ); } -function Form({ initialForm, editable }) { - const [form, setForm] = useState({ fields: [], ...initialForm }); +export function Form({ editable, formId, setResults, results }) { + // const [form, setForm] = useState({ fields: [], ...initialForm }); + const [form, setForm] = useForm(formId); function updateFormField(newField) { setForm({ @@ -254,41 +298,42 @@ function Form({ initialForm, editable }) { setForm({ ...form }); } - if (!editable && !initialForm) { - return; - // else if (!initialForm) { - // return ; - // } - } else { - return ( - - - {editable && ( - id === fieldId)?.name, + }; + setResults({ ...results, [fieldId]: fieldResult }); + } + + return ( + + + {editable && ( + + )} + {form?.fields?.map((formField, i) => ( + + updateFormField(field)} + deleteFormField={() => deleteFormField(formField.id)} + formField={formField} + editable={editable} + setResult={results && ((result) => setResult(formField.id, result))} + result={results && results[formField.id]} /> - )} - {form?.fields?.map((formField, i) => ( - - updateFormField(field)} - deleteFormField={() => deleteFormField(formField.id)} - formField={formField} + {editable && ( + - {editable && ( - - )} - - ))} - - ); - } + )} + + ))} + + ); } function FormHeader() { -- cgit v1.2.3