diff --git a/src/pages/AnswerForm.js b/src/pages/AnswerForm.js new file mode 100644 index 0000000000000000000000000000000000000000..edcb312d30a030faf31f0d3a3f000d55208061eb --- /dev/null +++ b/src/pages/AnswerForm.js @@ -0,0 +1,98 @@ +import React, { useState, useEffect } from 'react'; +import { useParams } from "react-router-dom"; +import { makeStyles } from '@material-ui/core/styles'; +import Grid from '@material-ui/core/Grid'; +import Paper from '@material-ui/core/Paper'; +import TextField from '@material-ui/core/TextField'; +import AddIcon from '@material-ui/icons/Add'; +import IconButton from '@material-ui/core/IconButton'; +import ReorderIcon from '@material-ui/icons/Reorder'; +import RadioButtonCheckedIcon from '@material-ui/icons/RadioButtonChecked'; +import CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank'; +import Button from '@material-ui/core/Button'; +import axios from 'axios'; + +import FormFieldText from '../components/fieldsAnswerForm/FormFieldText'; +import FormFieldSelect from '../components/fieldsAnswerForm/FormFieldSelect'; +import FormFieldRadio from '../components/fieldsAnswerForm/FormFieldRadio'; +import FormFieldCheckbox from '../components/fieldsAnswerForm/FormFieldCheckbox'; +import FormFieldTitle from '../components/fieldsAnswerForm/FormFieldTitle'; + +import config from '../config'; + + +const useStyles = makeStyles(theme => ({ + menu: { + width: theme.spacing(6), + minheight: theme.spacing(15), + position: 'fixed', + top: theme.spacing(10), + left: '90%', + padding: theme.spacing(1) + }, +})); + +function AnwserForm() { + const classes = useStyles(); + + const { id } = useParams(); + + const [formData, setFormData] = useState(0); + + function getForm(id) { + axios.get(`${config.genformsapi.url}/form/${id}`) + .then(res => { + console.log(res); + console.log(res.data); + setFormData(res.data); + }); + } + + function answerForm() { + axios.post(`${config.genformsapi.url}/form`) + .then(res => { + console.log(res); + console.log(res.data); + }); + } + + useEffect(() => { + getForm(id); + }, []); + + return ( + <div> + <Grid + container + direction="column" + alignItems="center" + justify="center" + > + + { + formData ? + <div> + <FormFieldTitle title={formData.title} description={formData.description}/> + { + formData.inputs.map((x, index) => { + if(x.type === 0) + return <FormFieldText question={x.question}/> + else if(x.type === 4) + return <FormFieldSelect question={x.question} options={x.sugestions}/> + else if(x.type === 2) + return <FormFieldRadio question={x.question} options={x.sugestions}/> + else if(x.type === 1) + return <FormFieldCheckbox question={x.question} options={x.sugestions}/> + }) + } + </div> : <p>Loading...</p> + } + <Button variant="contained" color="primary" onClick={answerForm}> + Responder + </Button> + </Grid> + </div> + ); +} + +export default AnwserForm; diff --git a/src/pages/CreateForm.js b/src/pages/CreateForm.js new file mode 100644 index 0000000000000000000000000000000000000000..677e396d6f816b35d124c6d3668be7639b644546 --- /dev/null +++ b/src/pages/CreateForm.js @@ -0,0 +1,242 @@ +import React, { useState } from 'react'; +import { makeStyles } from '@material-ui/core/styles'; +import Grid from '@material-ui/core/Grid'; +import Paper from '@material-ui/core/Paper'; +import TextField from '@material-ui/core/TextField'; +import AddIcon from '@material-ui/icons/Add'; +import IconButton from '@material-ui/core/IconButton'; +import ReorderIcon from '@material-ui/icons/Reorder'; +import RadioButtonCheckedIcon from '@material-ui/icons/RadioButtonChecked'; +import CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank'; +import Button from '@material-ui/core/Button'; +import axios from 'axios'; + +import FormFieldText from '../components/fieldsCreateForm/FormFieldText'; +import FormFieldSelect from '../components/fieldsCreateForm/FormFieldSelect'; +import FormFieldRadio from '../components/fieldsCreateForm/FormFieldRadio'; +import FormFieldCheckbox from '../components/fieldsCreateForm/FormFieldCheckbox'; +import FormFieldTitle from '../components/fieldsCreateForm/FormFieldTitle'; + +import config from '../config'; + + +const useStyles = makeStyles(theme => ({ + menu: { + width: theme.spacing(6), + minheight: theme.spacing(15), + position: 'fixed', + top: theme.spacing(10), + left: '90%', + padding: theme.spacing(1) + }, +})); + +function CreateForm() { + const classes = useStyles(); + + const [form, setForm] = useState([{type: "title", title: "", description: ""}]); + + function addToFormQuestion() { + setForm([...form, {type: "question", required: false, question: ""}]); + console.log(form); + } + + function addToFormSelect() { + setForm([...form, {type: "select", question: "", required: false, options: [""]}]); + console.log(form); + } + + function addToFormRadio() { + setForm([...form, {type: "radio", question: "", required: false, options: [""]}]); + console.log(form); + } + + function addToFormCheckbox() { + setForm([...form, {type: "checkbox", question: "", required: false, options: [""]}]); + console.log(form); + } + + function addSelectOption(index) { + form[index].options.push(""); + setForm([...form]); + console.log(form); + } + + function deleteFromForm(index) { + console.log(index); + form.splice(index, 1) + console.log(form); + setForm([...form]); + } + + function removeSelectOption(index, idopt) { + form[index].options.splice(idopt, 1); + setForm([...form]); + console.log(form); + } + + function setQuestionField(value, index) { + form[index].question = value; + setForm([...form]); + console.log(form); + } + + function setSelectOption(value, index, idopt) { + form[index].options[idopt] = value; + setForm([...form]); + console.log(form); + } + + function setRequiredField(index) { + form[index].required = !form[index].required; + setForm([...form]); + console.log(form); + } + + function setTitleField(value, index) { + form[index].title = value; + setForm([...form]); + console.log(form); + } + + function setDescriptionField(value, index) { + form[index].description = value; + setForm([...form]); + console.log(form); + } + + function createForm() { + let json = { + title: form[0].title, + description: form[0].description, + inputs: [] + } + + form.forEach(function(x, index){ + if(x.type === "question") { + json.inputs.push({ + "placement": index-1, + "description": "Adicionar esse campo no front", + "question": x.question, + "enabled": true, + "type": 0, // question type = 0 + "validation": x.required ? [{"type": 2, "arguments": ""}] : [] + }); + } else if(x.type === "select") { + json.inputs.push({ + "placement": index-1, + "description": "Adicionar esse campo no front", + "question": x.question, + "enabled": true, + "type": 3, // select type = 3 + "validation": x.required ? [{"type": 2, "arguments": ""}] : [], + "sugestions": x.options.map(function(y, index) { return {value: y, placement: index} }) + }); + } else if(x.type === "checkbox") { + json.inputs.push({ + "placement": index-1, + "description": "Adicionar esse campo no front", + "question": x.question, + "enabled": true, + "type": 1, // checkbox type = 1 + "validation": x.required ? [{"type": 2, "arguments": ""}] : [], + "sugestions": x.options.map(function(y, index) { return {value: y, placement: index} }) + }); + } else if(x.type === "radio") { + json.inputs.push({ + "placement": index-1, + "description": "Adicionar esse campo no front", + "question": x.question, + "enabled": true, + "type": 2, // radio type = 2 + "validation": x.required ? [{"type": 2, "arguments": ""}] : [], + "sugestions": x.options.map(function(y, index) { return {value: y, placement: index} }) + }); + } + }); + + + console.log(json); + axios.post(`${config.genformsapi.url}/form`, json ) + .then(res => { + console.log(res); + console.log(res.data); + + window.location.reload(); + }); + + } + + return ( + <div> + <Grid + container + direction="column" + alignItems="center" + justify="center" + > + { + form.map((x, index) => { + if(x.type === "question") + return <FormFieldText question={x.question} idq={index} + deleteFromForm={deleteFromForm} setQuestionField={setQuestionField} + setRequiredField={setRequiredField} required={x.required}/> + else if(x.type === "select") + return <FormFieldSelect question={x.question} options={x.options} idq={index} + deleteFromForm={deleteFromForm} addSelectOption={addSelectOption} + removeSelectOption={removeSelectOption} setSelectOption={setSelectOption} + setQuestionField={setQuestionField} setRequiredField={setRequiredField} + required={x.required} /> + else if(x.type === "radio") + return <FormFieldRadio question={x.question} options={x.options} idq={index} + deleteFromForm={deleteFromForm} addSelectOption={addSelectOption} + removeSelectOption={removeSelectOption} setSelectOption={setSelectOption} + setQuestionField={setQuestionField} setRequiredField={setRequiredField} + required={x.required} /> + else if(x.type === "checkbox") + return <FormFieldCheckbox question={x.question} options={x.options} idq={index} + deleteFromForm={deleteFromForm} addSelectOption={addSelectOption} + removeSelectOption={removeSelectOption} setSelectOption={setSelectOption} + setQuestionField={setQuestionField} setRequiredField={setRequiredField} + required={x.required} /> + else if(x.type === "title") + return <FormFieldTitle question={x.question} idq={index} + deleteFromForm={deleteFromForm} setTitleField={setTitleField} + setDescriptionField={setDescriptionField}/> + }) + } + <Button variant="contained" color="primary" onClick={createForm}> + Criar + </Button> + </Grid> + + <Paper className={classes.menu}> + <Grid + container + spacing={0} + direction="column" + alignItems="center" + justify="center" + > + <Grid item xs={0}> + <IconButton aria-label="add question" onClick={addToFormQuestion}> + <AddIcon /> + </IconButton> + <IconButton aria-label="add select" onClick={addToFormSelect}> + <ReorderIcon /> + </IconButton> + <IconButton aria-label="add radio" onClick={addToFormRadio}> + <RadioButtonCheckedIcon /> + </IconButton> + <IconButton aria-label="add checkbox" onClick={addToFormCheckbox}> + <CheckBoxOutlineBlankIcon /> + </IconButton> + </Grid> + </Grid> + </Paper> + + </div> + ); +} + +export default CreateForm;