In addition to rendering forms, this library can also be used to render complex wizard workflows.
Wizards work by taking the root Panel components within a normal flat form, and turning those panels into separate pages that can be added to a workflow. You can also provide conditional logic on those panel components so that the pages are conditionally shown based on what is entered within the wizard flow.
The determination on whether a form is a wizard or not is based on the display property on the form schema like so.
{
"title": "My Wizard",
"type": "form",
"display: "wizard",
"components": [
{
"type": "panel",
"title": "Page 1",
"components": [
...
...
]
},
{
"type": "panel",
"title": "Page 2",
"components": [
...
...
]
}
]
}
You can create a new wizard just like you can a normal form.
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons/font/bootstrap-icons.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap/dist/css/bootstrap.min.css">
<script src="https://cdn.form.io/js/formio.embed.js"></script>
<div id="wizard"></div>
Formio.createForm(document.getElementById('wizard'), 'https://examples.form.io/wizard')
.then(function(wizard) {
wizard.on('nextPage', function(page) {
console.log(page);
});
wizard.on('submit', function(submission) {
console.log(submission);
});
});
<div id="wizard"></div>
You can also add options when creating a form, the following options are supported:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons/font/bootstrap-icons.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap/dist/css/bootstrap.min.css">
<script src="https://cdn.form.io/js/formio.embed.js"></script>
<div id="wizardWithOptions"></div>
Formio.createForm(
document.getElementById('wizardWithOptions'),
'https://examples.form.io/wizard',
{
breadcrumbSettings: {clickable:false},
buttonSettings: {showCancel: false}
})
.then(function(wizard) {
wizard.on('nextPage', function(page) {
console.log(page);
});
wizard.on('submit', function(submission) {
console.log(submission);
});
});
<div id="wizardWithOptions"></div>