Skip to content
Snippets Groups Projects
Commit 1e3988b5 authored by Jure's avatar Jure
Browse files

fix: quick fix for validations in form builder

parent 044dc696
No related branches found
No related tags found
No related merge requests found
...@@ -50,7 +50,7 @@ const ComponentProperties = ({ ...@@ -50,7 +50,7 @@ const ComponentProperties = ({
</Section> </Section>
{selectComponentValue && {selectComponentValue &&
map(components[selectComponentValue], (value, key) => ( map(components[selectComponentValue], (value, key) => (
<Section> <Section key={key}>
<Legend space>{`Field ${key}`}</Legend> <Legend space>{`Field ${key}`}</Legend>
<ValidatedFieldFormik <ValidatedFieldFormik
component={elements[value.component].default} component={elements[value.component].default}
......
import React from 'react' import React, { useState } from 'react'
import { import {
compose, compose,
withState, withState,
...@@ -30,9 +30,9 @@ const Status = styled.div` ...@@ -30,9 +30,9 @@ const Status = styled.div`
display: inline-flex; display: inline-flex;
` `
const StatusIdle = styled(Status).attrs({ const StatusIdle = styled(Status).attrs(props => ({
children: () => <StatusIcon>plus_circle</StatusIcon>, children: <StatusIcon>plus_circle</StatusIcon>,
})`` }))``
const Root = styled.div` const Root = styled.div`
display: flex; display: flex;
...@@ -91,12 +91,12 @@ const BuilderElement = ({ elements, changeProperties, deleteElement, form }) => ...@@ -91,12 +91,12 @@ const BuilderElement = ({ elements, changeProperties, deleteElement, form }) =>
</Element> </Element>
)) ))
const AddButtonElement = ({ addElements }) => ( const AddButtonElement = ({ addElement }) => (
<Root> <Root>
<Main> <Main>
<Action <Action
onClick={() => onClick={() =>
addElements({ addElement({
title: 'New Component', title: 'New Component',
id: `${Date.now()}`, id: `${Date.now()}`,
}) })
...@@ -111,46 +111,57 @@ const AddButtonElement = ({ addElements }) => ( ...@@ -111,46 +111,57 @@ const AddButtonElement = ({ addElements }) => (
const FormBuilder = ({ const FormBuilder = ({
form, form,
elements, // elements,
addElements, // addElements,
changeProperties, changeProperties,
deleteElement, deleteElement,
}) => ( }) => {
<Page> const [elements, setElements] = useState(form.children || [])
<AddButtonElement addElements={addElements} form={form} id="add-element" /> const addElement = element => {
{elements && elements.length > 0 && ( setElements([...elements, element])
<BuilderElement }
changeProperties={changeProperties} // const addElements = useCallback(() => {
deleteElement={deleteElement}
elements={elements} // })
form={form}
id="builder-element" return (
/> <Page>
)} <AddButtonElement addElement={addElement} form={form} id="add-element" />
</Page> {elements && elements.length > 0 && (
) <BuilderElement
changeProperties={changeProperties}
FormBuilder.displayName = 'FormBuilder' deleteElement={deleteElement}
elements={elements}
export default compose( form={form}
withState('elements', 'onAddElements', ({ form }) => form.children || []), id="builder-element"
withHandlers({ />
addElements: ({ onAddElements, form }) => addElement => )}
onAddElements(() => { </Page>
const addEl = { children: form.children || [] } )
addEl.children = [...addEl.children, addElement] }
return addEl.children
}), export default FormBuilder
}), // FormBuilder.displayName = 'FormBuilder'
lifecycle({
componentWillReceiveProps(nextProps) { // export default compose(
if (this.props.form.children !== nextProps.form.children) { // withState('elements', 'onAddElements', ({ form }) => form.children || []),
this.setState({ elements: nextProps.form.children }) // withHandlers({
} // addElements: ({ onAddElements, form }) => addElement =>
// onAddElements(() => {
if (this.props.elements !== nextProps.elements) { // const addEl = { children: form.children || [] }
this.setState({ elements: nextProps.elements }) // addEl.children = [...addEl.children, addElement]
} // return addEl.children
}, // }),
}), // }),
)(FormBuilder) // lifecycle({
// componentWillReceiveProps(nextProps) {
// if (this.props.form.children !== nextProps.form.children) {
// this.setState({ elements: nextProps.form.children })
// }
// if (this.props.elements !== nextProps.elements) {
// this.setState({ elements: nextProps.elements })
// }
// },
// }),
// )(FormBuilder)
import React, { useState } from 'react' import React, { useState } from 'react'
import { Select, TextField, ValidatedFieldFormik } from '@pubsweet/ui' import { Select, TextField, ValidatedFieldFormik } from '@pubsweet/ui'
import { compose, withState, withHandlers } from 'recompose' // import { compose, withState, withHandlers } from 'recompose'
import { Legend, Section } from '../styles' import { Legend, Section } from '../styles'
const ValidationMenu = input => { const ValidationMenu = input => (
const [validations, setValidations] = useState() // const validations = useState([])
return ( <>
<div> <Select
<Select {...input}
{...input} // onChange={select => input.onChange(select.map(s => s.value))}
onChange={value => setValidations(value)} // onChange={select => setValidations(select.map(s => s.value))}
selectElement={value => { />
input.onSelectElement(value)
}} {((Array.isArray(input.value) && input.value) || []).map(validation => {
/> if (validation.value !== 'required') {
{ return (
// the actual value is an object with: <Section key={validation.value}>
// [{"value":"minSize","label":"minSize"},{"value":"minChars","label":"minimum Characters"},{"value":"maxChars","label":"maximum Characters"}]" <Legend space>{validation.label} value</Legend>
<ValidatedFieldFormik
component={TextField}
name={`validateValue.${validation.value}`}
/>
</Section>
)
} }
{validations && validations !== 'required' && ( return null
<Section> })}
<Legend space>Field Min / Max</Legend> </>
<ValidatedFieldFormik )
component={TextField}
name={`validateValue.${input.selectelement}`}
/>
</Section>
)}
</div>
)
}
export default compose( export default ValidationMenu
withState('selectelement', 'changeSelect', undefined), // export default compose(
withHandlers({ // withState('selectelement', 'changeSelect', undefined),
onSelectElement: ({ changeSelect }) => value => changeSelect(() => value), // withHandlers({
}), // onSelectElement: ({ changeSelect }) => value => changeSelect(() => value),
)(ValidationMenu) // }),
// )(ValidationMenu)
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment