From 016726b12fe4deb3b0beef24d5aefa29e35dfb1e Mon Sep 17 00:00:00 2001 From: dan Date: Thu, 31 Aug 2023 11:57:33 -0400 Subject: fix: editing label content should not cause fields to disappear --- src/components/FormBuilder/index.js | 67 ++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/src/components/FormBuilder/index.js b/src/components/FormBuilder/index.js index b9f0389..8a13bf0 100644 --- a/src/components/FormBuilder/index.js +++ b/src/components/FormBuilder/index.js @@ -28,25 +28,23 @@ export default function FormBuilder() { const availableWidgets = { label: { name: "Label", - element: (props) => ( + element: ({ id, name, setName }) => ( - props?.setFormField({ ...props, name: e.target.value }) - } + value={name} + onChange={(e) => setName(e.target.value)} fullWidth /> ), - finalElement: (props) =>
{props?.id}
, + finalElement: ({ id }) =>
{id}
, }, number: { name: "Number", - element: (props) => ( + element: ({ id }) => ( ( + element: ({ id }) => ( @@ -66,10 +64,10 @@ const availableWidgets = { }, multiline: { name: "Multiline", - element: (props) => ( + element: ({ id }) => (
- {finalElement ? finalElement() : element()} + {finalElement ? finalElement({}) : element({})}
@@ -137,35 +135,42 @@ function WidgetCard({ name, element, type, finalElement }) { } } -function FormField(props) { - if (!props?.type) { - console.log("formfield render failed", props); +function FormField({ formField, setFormField, deleteFormField }) { + const { id, type, name } = formField; + + function setName(name) { + setFormField({ ...formField, name }); + } + + if (!type) { return; } - const { element: Element } = availableWidgets[props?.type]; + const { element: Element } = availableWidgets[type]; const dragHandleRef = useRef(); const [target, setTarget] = useState(); return ( setTarget(e.target)} + onMouseDown={(e) => { + setTarget(e.target); + }} onDragStart={(e) => { if (dragHandleRef.current.contains(target)) { - e.dataTransfer.setData("application/formwidgetid", props?.id); + e.dataTransfer.setData("application/formwidgetid", id); } else { e.preventDefault(); } }} > - + - - props?.deleteFormField()}> + + @@ -271,12 +276,12 @@ function Form({ initialForm, editable }) { index={-1} /> )} - {form?.fields?.map((props, i) => ( - + {form?.fields?.map((formField, i) => ( + updateFormField(field)} - deleteFormField={() => deleteFormField(props.id)} - {...props} + deleteFormField={() => deleteFormField(formField.id)} + formField={formField} /> {editable && (