Quiz App - multi step form based on configuration JSON where can be create/add/delete Answers with different type of answers; text, radio
- create-react-app + Node-SaSS + Eslint + Visual Studio Code
- This project was bootstrapped with Create React App.
- Create a dynamic form (based on config file; as many quizzes you like over page)
- Create template for multi-steps Form
- firstForm (first Panel)
- form (Panel order 2-N )
- confirm (preview all the data Form , quiz -answer)
- success (show success page)
- Use Local Storage in case the page is closed the Data will remain, In case you are in Success Page , all the data collection form are clear
- Create minimalist CSS, SCSS files
- Create UI components Input, Button, InputField
From Terminal at the root of the project
Install all the dependencies
In the project directory, you can run:
Runs the app in the development mode.
Open
http://localhost:3000 to view it in the browser.
The page will reload if you make edits.
You will also see any lint errors in
the console.
Launches the test runner in the interactive watch mode.
See the section
about
running tests
for more information.
Builds the app for production to the build
folder.
It correctly bundles
React in production mode and optimizes the build for the best performance.
The build is minified and the filenames include the hashes.
Your app is
ready to be deployed!
See the section about deployment for more information.
To create a Panel Template Form
typePanel: (HTML-> title Form , buttons -> Back, NEXT/FINISH)
- formFirst -> first step in form
- form -> step (2..n) in form
- confirm -> preview all the Q/A from all the pages
- success -> success page when all the data can be send by POST
To Create a quiz Populate 'values' attr :
'key' => quiz_1 //suppose to be unique
'label' => Type the Question
'elementType' => 'input' // fill the answer in input box
=> 'radio' //TO DO
=> 'checkbox' //TO DO
'elementConfig'=> type: 'text', //input type="text"
=> placeholder: 'Full Name'
'value' => '' //current value
'validation' => //TO DO validation
'valid' => //TO DO validation
'touched' => //TO DO validation
Example full configuration with multistep form (2 steps, Confirm, Success)
values: {
quiz_1: {
label: 'Question: How is your name?',
elementType: 'input',
elementConfig: {
type: 'text',
placeholder: 'Full Name'
},
value: '',
validation: {
required: true
},
valid: false,
touched: false
},
quizForm: [
{
key: '1',
typePanel: 'formFirst',
values: {
quiz_1: {
label: 'Question: How is your name?',
elementType: 'input',
elementConfig: {
type: 'text',
placeholder: 'Full Name'
},
value: '',
validation: {
required: true
},
valid: false,
touched: false
},
quiz_2: {
label: 'Question: How old are you?',
elementType: 'input',
elementConfig: {
type: 'text',
placeholder: 'Age'
},
value: '',
validation: {
required: true
},
valid: false,
touched: false
},
quiz_3: {
label: 'Question: Where do you live, what city?',
elementType: 'input',
elementConfig: {
type: 'text',
placeholder: 'City'
},
value: '',
validation: {
required: true
},
valid: false,
touched: false
}
}
},
{
key: '2',
typePanel: 'form',
values: {
quiz_3: {
label: 'Quiz_3',
elementType: 'input',
elementConfig: {
type: 'text',
placeholder: 'Street'
},
value: '',
validation: {
required: true
},
valid: false,
touched: false
},
quiz_4: {
label: 'Quiz_4',
elementType: 'input',
elementConfig: {
type: 'text',
placeholder: 'Street'
},
value: '',
validation: {
required: true
},
valid: false,
touched: false
}
}
},
{
key: '3',
typePanel: 'confirm',
values: {}
},
{
key: '4',
typePanel: 'success',
values: {}
}
]