FormViewer.js 36.56 KiB
/*eslint-disable no-redeclare*/
/*eslint-disable no-multi-str*/
/*eslint-disable eqeqeq*/
/*eslint-disable jsx-a11y/anchor-is-valid */
import { Component, Fragment } from "react";
import Header from "../common/Header";
import { LANG, APP } from "../../constants";
import { FormService } from "../../services/form.service";
import Notify from "./../../helpers/notify";
import Input from "./fields/Input";
import Radio from "./fields/Radio";
import Checkbox from "./fields/Checkbox";
import Select from "./fields/Select";
import Toggle from "./fields/Toggle";
import Textarea from "./fields/Textarea";
// import Rating from "./fields/Rating";
import FileUpload from "./fields/FileUpload";
import MultiSelect from "./fields/MultiSelect";
import Helper from "../../helpers/auth";
import { StatusBarLarge } from "../status-bar";
import { CardThree } from "../cards";
import { TextAreaField } from "../form-elements";
// import { BtnTwo } from "../buttons";
// const $ = window.$;
class FormViewer extends Component {
  constructor(props) {
    super(props);
    this.state = {
      showSidebar: true,
      formDetails: {},
      formFieldGroups: [],
      formHeadings: [],
      headingIndex: 0,
      formFields: {},
      formTitle: "",
      applicationDetails: {},
      showSaveAsDraft: true,
      breadCrumbData: [],
    this.userRole = Helper.getUserRole();
    this.toggleSideBar = this.toggleSideBar.bind(this);
    this.loadFormDetails = this.loadFormDetails.bind(this);
    this.saveFields = this.saveFields.bind(this);
    this.populateForm = this.populateForm.bind(this);
    this.populateData = this.populateData.bind(this);
    this.populateData = this.populateData.bind(this);
    this.disableFormElements = this.disableFormElements.bind(true);
    this.submitForm = this.submitForm.bind(this);
  toggleSideBar() {
    this.setState({
      showSidebar: !this.state.showSidebar,
    });
  componentDidMount() {
    this.loadFormDetails(this.props.match.params.id);
    // console.log(this.props.match.params.applicationId);
    if (
      this.props.match.params.applicationId !== null &&
      this.props.match.params.applicationId !== undefined
    ) {
      if (this.userRole === APP.ROLE.INSTITUTION) {
        this.setState({
          breadCrumbData: [
            { title: "HOME", url: "/dashboard", icon: "" },
            { title: "MY APPLICATIONS", url: "/applications", icon: "" },
        });
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
} if (this.userRole === APP.ROLE.REGULATOR || this.userRole === APP.ROLE.SUPER_ADMIN) { this.setState({ breadCrumbData: [ { title: "HOME", url: "/dashboard", icon: "" }, { title: "ALL APPLICATIONS", url: "/applications", icon: "" }, ], }); } setTimeout(() => { this.populateForm(this.props.match.params.applicationId); }, 1000); } else { if (this.userRole === APP.ROLE.INSTITUTION) { this.setState({ breadCrumbData: [ { title: "HOME", url: "/dashboard", icon: "" }, { title: "AVAILABLE FORMS", url: "/available-forms", icon: "" }, ], }); } if (this.userRole === APP.ROLE.REGULATOR || this.userRole === APP.ROLE.SUPER_ADMIN) { this.setState({ breadCrumbData: [ { title: "HOME", url: "/dashboard", icon: "" }, { title: "MANAGE", url: "/manage", icon: "" }, ], }); } } } componentDidUpdate(nextProps) { if (nextProps.location.pathname !== this.props.location.pathname) { this.loadFormDetails(this.props.match.params.id); // console.log(this.props.match.params.applicationId); if (this.props.match.params.applicationId !== null) { setTimeout(() => { this.populateForm(this.props.match.params.applicationId); }, 50); } } } loadFormDetails = (formId) => { FormService.find(formId).then( (response) => { if (response.statusInfo.statusCode === APP.CODE.SUCCESS) { this.setState({ breadCrumbData: [ ...this.state.breadCrumbData, { title: (response.responseData && response.responseData.title) || "", url: "", icon: "", }, ], }); let fields = response.responseData.fields, i = 0, temp = []; for (i = 0; i < fields.length; i++) { if (fields[i]["fieldType"] === LANG.HEADING) { this.state.formHeadings.push(fields[i]["values"][0]["heading"]); if (i !== 0) { this.state.formFieldGroups.push(temp); temp = []; }
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
} else if (i === 0) { this.state.formHeadings.push("General"); } if ( fields[i]["fieldType"] !== LANG.HEADING && fields[i]["fieldType"] !== LANG.SEPARATOR ) { temp.push(fields[i]); } } this.state.formFieldGroups.push(temp); this.setState({ formDetails: response.responseData, formTitle: response.responseData.title.replaceAll(" ", "_"), }); // console.log(this.state.formHeadings); // console.log(this.state.formFieldGroups); } else { Notify.error(response.statusInfo.errorMessage); } }, (error) => { error.statusInfo ? Notify.error(error.statusInfo.errorMessage) : Notify.error(error.message); } ); }; populateForm = (applicationId) => { FormService.findApplication(applicationId).then( (response) => { if (response.statusInfo.statusCode === APP.CODE.SUCCESS) { // console.log(response.responseData[0].dataObject); this.setState({ applicationDetails: response.responseData, }); var savedFields = response.responseData.dataObject; var fields = this.state.formDetails.fields; var newFields = {}; // console.log(fields); for (var pkey of Object.keys(savedFields)) { for (var key of Object.keys(savedFields[pkey])) { for (let j = 0; j < fields.length; j++) { // console.log(key, fields[j].name); if (key === fields[j].name) { newFields["field_" + fields[j].order] = savedFields[pkey][key]; } } } } this.setState({ formFields: newFields, // breadCrumbData: [ // { title: 'HOME', url: '/dashboard', icon: '' }, // { title: 'MY APPLICATIONS', url: '/my-applications', icon: '' }, // ] }); setTimeout(() => { this.populateData(); }, 100); } else { Notify.error(response.statusInfo.errorMessage); } }, (error) => { error.statusInfo ? Notify.error(error.statusInfo.errorMessage) : Notify.error(error.message);
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
} ); }; populateData = () => { // console.log("populateData..."); // Removing existing data starts var existingFields = this.state.formFieldGroups[this.state.headingIndex]; let inputs = document.getElementsByTagName("input"); if ( this.props.match.params.applicationId === null || this.props.match.params.applicationId === undefined || this.state.applicationDetails.status === LANG.FORM_STATUS.RETURNED ) { for (let m = 0; m < inputs.length; m++) { for (var key of Object.keys(existingFields)) if (`field_${existingFields[key].order}` === inputs[m].name) { inputs[m].type = existingFields[key].fieldType; } if (inputs[m].type !== "radio" && inputs[m].type !== "checkbox") { inputs[m].value = ""; } } inputs = document.getElementsByTagName("select"); for (let n = 0; n < inputs.length; n++) inputs[n].value = ""; } else { for (let m = 0; m < inputs.length; m++) { for (var key of Object.keys(existingFields)) if (`field_${existingFields[key].order}` === inputs[m].name) { inputs[m].type = existingFields[key].fieldType; } } } // Removing existing data ends // Code for files starts var fileElements = document.getElementsByClassName("custom-file-display"); for (let ele1 = 0; ele1 < fileElements.length; ele1++) { fileElements[ele1].innerHTML = ""; fileElements[ele1].style.display = "none"; } var fileElements = document.getElementsByClassName("form-control-file"); for (let ele2 = 0; ele2 < fileElements.length; ele2++) { fileElements[ele2].setAttribute("path", ""); } // Code for files ends var fields = this.state.formFields; // console.log(this.state.formFields); for (var key of Object.keys(fields)) { var element = document.getElementsByName(key); if (element.length > 0) { if (element[0].type === "boolean" || element[0].type === "text") { var len = element.length; let values = fields[key].split(","); for (var j = 0; j < len; j++) { // console.log(values.includes("booleanTrue")); if (values.includes("booleanTrue")) { element[j].parentNode.classList.add("selected"); element[j].checked = true; } } } if (element[0].type === "checkbox" || element[0].type === "radio") { var len = element.length; let values = fields[key].split(","); for (var j = 0; j < len; j++) { // console.log(values.includes(element[j].value)); if (values.includes(element[j].value)) {
281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
element[j].parentNode.classList.add("selected"); element[j].checked = true; } } } else if (element[0].type === "select-multiple") { var sel = fields[key].split(","); var options = document .getElementsByName(key)[0] .getElementsByTagName("option"); for (var i in options) for (var k in sel) if (options[i].innerHTML === sel[k]) options[i].selected = "selected"; } else if (element[0].type !== "file") { element[0].value = fields[key]; } else if (element[0].type === "file") { element[0].setAttribute("path", fields[key]); element.innerHTML = ""; if (fields[key] !== "") { let temp = fields[key].split(","); var keyIndex = key.split("_"); for (let l = 0; l < temp.length; l++) { var element = document.getElementById( "files-list-" + keyIndex[1] ); element.style.display = "block"; element.innerHTML += '<div class="col-12 file-item">\ <span>' + temp[l] + '</span>\ <span \ class="cross" \ > \ X \ </span>\ </div>'; } } } } } if ( this.props.match.params.applicationId !== null && this.props.match.params.applicationId !== undefined ) { // if regulator disable form if (this.userRole === APP.ROLE.REGULATOR || this.userRole === APP.ROLE.SUPER_ADMIN) { setTimeout(() => { this.disableFormElements(); }, 300); } // if institute, // if status: Draft - enable form edit & show 'save as draft' if ( this.userRole === APP.ROLE.INSTITUTION && (this.state.applicationDetails.status === LANG.FORM_STATUS.DRAFT || this.state.applicationDetails.status === LANG.FORM_STATUS.RETURNED) ) { this.setState({ showSaveAsDraft: true, }); // setTimeout(() => { // this.disableFormElements(); // }, 300); } // if institute,
351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
// if status: not Draft - disable form edit & hide 'save as draft' if ( this.userRole === APP.ROLE.INSTITUTION && this.state.applicationDetails.status !== LANG.FORM_STATUS.DRAFT && this.state.applicationDetails.status !== LANG.FORM_STATUS.RETURNED ) { this.setState({ showSaveAsDraft: false, }); setTimeout(() => { this.disableFormElements(); }, 300); } } }; disableFormElements = () => { // console.log("disableFormElements..."); let fields = this.state.formFields; for (let key of Object.keys(fields)) { // console.log(key); let element = document.getElementsByName(key); if (element[0] !== undefined && element[0] !== null) { element = element[0]; if (element.type === "checkbox" || element.type === "radio") { let elements = document.getElementsByName(key); for (let i = 0; i < elements.length; i++) elements[i].disabled = true; } else { if (element) element.disabled = true; } } } let fileRemoval = document.querySelectorAll(".file-item .cross"); for (let i = 0; i < fileRemoval.length; i++) if (fileRemoval[i] !== undefined && fileRemoval[i] !== null) fileRemoval[i].style.display = "none"; }; validationPassed = () => { let flag = true; if ( (this.props.match.params.applicationId === null || this.props.match.params.applicationId === undefined || this.state.applicationDetails.status === LANG.FORM_STATUS.RETURNED) && this.userRole === APP.ROLE.INSTITUTION ) { for (let index = 0; index <= this.state.headingIndex; index++) { if (!flag) break; let fields = this.state.formFieldGroups[index]; for (let i = 0; i < fields.length; i++) { // console.log("field_" + fields[i].order); if ( this.state.formFields["field_" + fields[i].order] === "" && fields[i].isRequired ) { flag = false; this.setState({ headingIndex: index, }); let element = document.getElementsByName( "field_" + fields[i].order ); for (let j = 0; j < fields.length; j++) if (element[j]) element[j].classList.add("is-invalid", "has-error"); break; } } if (!flag) { Notify.error("Please fill all required fields.");
421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
} } } return flag; }; saveFields = (index) => { // console.log("saveFields..."); if(this.state.applicationDetails.status === LANG.FORM_STATUS.NEW || this.state.applicationDetails.status ===LANG.FORM_STATUS.DRAFT || this.state.applicationDetails.status ===LANG.FORM_STATUS.RETURNED){ if ( !this.props.match.params.applicationId || this.props.match.params.applicationId || this.state.applicationDetails.status === LANG.FORM_STATUS.RETURNED ) { let obj = this.state.formFields, order = ""; var form = document.getElementById("application-form"); const formData = new FormData(form); const data = Array.from(formData.entries()).reduce( (memo, pair) => ({ ...memo, [pair[0]]: pair[1], }), {} ); for (let i = 0; i < this.state.formFieldGroups[index].length; i++) { order = this.state.formFieldGroups[index][i]["order"]; obj["field_" + order] = data["field_" + order] !== undefined ? data["field_" + order] : ""; var booleans = document.getElementsByClassName( "field_" + order + "_boolean" ); if (booleans.length) { if (booleans[0].type === "checkbox") { var len = booleans.length; let temp = []; for (var j = 0; j < len; j++) { if (booleans[j].parentElement.classList.contains("selected")) { temp.push((booleans[j].value = "booleanTrue")); } } obj["field_" + order] = temp.join(); } } var checkboxes = document.getElementsByClassName( "field_" + order + "_checkbox" ); if (checkboxes.length) { if (checkboxes[0].type === "checkbox") { var len = checkboxes.length; let temp = []; for (var j = 0; j < len; j++) { if (checkboxes[j].checked) { temp.push(checkboxes[j].value); } } obj["field_" + order] = temp.join(); } } var multiselects = document.getElementsByClassName( "field_" + order + "_multiselect" ); if (multiselects.length) { var selected = []; for (var option of multiselects[0].options) {
491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560
// console.log(option.value); if (option.selected && option.value !== "Select from dropdown") { selected.push(option.value); } } obj["field_" + order] = selected.join(); } var files = document.getElementsByClassName("field_" + order + "_file"); if (files.length) { obj["field_" + order] = files[0].getAttribute("path"); } } this.setState({ formFields: obj, }); } } // console.log(obj); // files={this.state.formFields["field_3"].split(",")} // console.log(this.state.formFields["field_3"]); }; submitForm = (isDraft) => { var fieldsData = {}, temp; var savedFields = this.state.formFields; var fields = this.state.formDetails.fields; for (const key in savedFields) { temp = key.split("_"); for (let j = 0; j < fields.length; j++) { // console.log(temp[1], fields[j].order); if (temp[1] == fields[j].order) { fieldsData[fields[j].name] = savedFields[key]; } } } var fieldGroups = {}; for (let i = 0; i < this.state.formHeadings.length; i++) { fieldGroups[this.state.formHeadings[i]] = {}; for (let j = 0; j < this.state.formFieldGroups[i].length; j++) { // console.log(this.state.formFieldGroups[i][j].name); if (fieldsData[this.state.formFieldGroups[i][j].name] !== "") { fieldGroups[this.state.formHeadings[i]][ this.state.formFieldGroups[i][j].name ] = fieldsData[this.state.formFieldGroups[i][j].name]; } } } // console.log(fieldGroups); let formDetails = { formId: this.state.formDetails.id, version: this.state.formDetails.version, dataObject: fieldGroups, title: this.state.formDetails.title, status: isDraft ? LANG.FORM_STATUS.DRAFT : LANG.FORM_STATUS.NEW, ...(this.props.match.params.applicationId && { applicationId: this.props.match.params.applicationId, }), }; // formDetails = JSON.stringify(formDetails); // console.log(JSON.parse(formDetails)); FormService.submit(formDetails).then( (response) => { // console.log(response); if (response.statusInfo.statusCode === APP.CODE.SUCCESS) {
561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630
Notify.success(response.statusInfo.statusMessage); setTimeout(() => { this.props.history.push("/dashboard"); }, 300); } else { Notify.error(response.statusInfo.errorMessage); } }, (error) => { error.statusInfo ? Notify.error(error.statusInfo.errorMessage) : Notify.error(error.message); } ); }; render() { return ( <Fragment> <Header history={this.props.history} breadCrumb={this.state.breadCrumbData} /> <div className="container-fluid main-container"> <div className="row"> <div className="col-12"> <div className="container pt-5 pl-2 pr-2"> <div className="d-flex row mb-4"> <div className="col-12"> <h2 className="title mb-0"> {this.state.formDetails.title} </h2> </div> <div className="col-12"></div> </div> <div className="d-flex"> <nav id="sidebar" className={"active" + (this.state.showSidebar ? "" : "a")} > <ul className="list-unstyled components"> {this.state.formHeadings.map((heading, i) => { return ( <li key={i} onClick={(e) => { this.saveFields(this.state.headingIndex); if (i > this.state.headingIndex) { if (this.validationPassed()) { this.setState({ headingIndex: i }); setTimeout(() => { this.populateData(); }, 100); } } else if (i !== this.state.headingIndex) { this.setState({ headingIndex: i }); setTimeout(() => { this.populateData(); }, 100); } }} className={ this.state.headingIndex === i ? "active" : "" } > <a href="#">{heading}</a> </li> ); })} </ul>
631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700
</nav> <div className="ml-4 fullWidth "> {this.props.match && this.props.match.params.applicationId && this.state.applicationDetails.status !== LANG.FORM_STATUS.DRAFT && ( <> <div className="mb-4"> <StatusBarLarge isChange={false} status={this.state.applicationDetails.status} approvedNote={ this.state.applicationDetails.status !== LANG.FORM_STATUS.RETURNED && (this.state.applicationDetails.status === LANG.FORM_STATUS.APPROVED || this.state.applicationDetails.status === LANG.FORM_STATUS.REJECTED) ? this.state.applicationDetails.notes : "" } userRole={this.userRole} inspectorSummary={ this.state.applicationDetails.status === LANG.FORM_STATUS.INSPECTION_COMPLETED ? this.state.applicationDetails .inspectorSummaryDataObject && this.state.applicationDetails .inspectorSummaryDataObject[ "Inspection Summary" ]["Enter the summary of this inspection"] : "" } label={this.state.applicationDetails.status} timeStamp={ this.state.applicationDetails.timestamp } applicationId={ this.state.applicationDetails.applicationId } inspectionData={ this.state.applicationDetails.inspection ? this.state.applicationDetails.inspection : "" } comments={ this.state.applicationDetails.notes ? this.state.applicationDetails.notes : "" } showInspectionDetails={true} /> </div> {(this.state.applicationDetails.status === LANG.FORM_STATUS.APPROVED || this.state.applicationDetails.status === LANG.FORM_STATUS.REJECTED) && ( <div className="mt-3 mb-3"> <CardThree children={ <div className="p-4"> <div className=""> <TextAreaField isReadOnly={true} label="Comments from reviewer" showLabel={true} defaultValue={ this.state.applicationDetails.comments
701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770
? this.state.applicationDetails .comments[0].value : "" } /> </div> </div> } /> </div> )} </> )} <div id="content" className="form-content p-4 fullWidth white-bg" > <button type="button" id="sidebarCollapse" className={ "btn btn-info d-sm-block d-md-none " + (this.state.showSidebar ? "d-none-imp" : "d-block-imp") } onClick={this.toggleSideBar} > <i className="fa fa-bars"></i> {/* <span>Toggle Sidebar</span> */} </button> <form id="application-form" className="custom-form"> {this.state.formFieldGroups.length > 0 && this.state.formFieldGroups[ this.state.headingIndex ].map((field, index) => { // console.log(LANG.FIELD_TYPES[field.fieldType]); switch (LANG.FIELD_TYPES[field.fieldType]) { case LANG.FIELD_TYPES.text: return ( <Input key={index} field={field} title={this.state.formTitle} /> ); case LANG.FIELD_TYPES.numeric: return ( <Input key={index} field={field} title={this.state.formTitle} /> ); case LANG.FIELD_TYPES.date: return ( <Input key={index} field={field} title={this.state.formTitle} /> ); case LANG.FIELD_TYPES.email: return ( <Input key={index} field={field} title={this.state.formTitle} /> );
771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840
case LANG.FIELD_TYPES.dropdown: return ( <Select key={index} field={field} title={this.state.formTitle} /> ); case LANG.FIELD_TYPES.radio: return ( <Radio key={index} field={field} title={this.state.formTitle} /> ); case LANG.FIELD_TYPES.checkbox: return ( <Checkbox key={index} field={field} title={this.state.formTitle} /> ); case LANG.FIELD_TYPES.boolean: return ( <Toggle key={index} field={field} title={this.state.formTitle} /> ); case LANG.FIELD_TYPES.textarea: return ( <Textarea key={index} field={field} title={this.state.formTitle} /> ); // case LANG.FIELD_TYPES.rating: // return <Rating key={index} field={field} />; case LANG.FIELD_TYPES.file: // var fileOrder = this.state.formFieldGroups[this.state.headingIndex][index].order; return ( <FileUpload key={index} field={field} // files={ // this.state.formFields["field_" + fileOrder] !== undefined && // this.state.formFields["field_" + fileOrder] !== "" // ? this.state.formFields[ // "field_" + fileOrder // ].split(",") // : [] // } /> ); case LANG.FIELD_TYPES.multiselect: return ( <MultiSelect key={index} field={field} title={this.state.formTitle} /> ); default: return <div key={index}></div>; } })}
841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910
</form> </div> <div className="row mt-3 mb-4"> <div className="col-12"> {this.state.headingIndex > 0 && ( <button onClick={(e) => { this.saveFields(this.state.headingIndex); // if (this.validationPassed()) { this.setState({ headingIndex: this.state.headingIndex - 1, }); setTimeout(() => { this.populateData(); }, 100); setTimeout(() => { this.populateData(); }, 150); // } }} className="btn btn-primary smf-btn-primary float-left mb-3" > <i className="fa fa-arrow-left mr-2"></i> Previous </button> )} <div className="pull-right"> { // !( // this.props.match.params.applicationId !== null && // this.props.match.params.applicationId !== undefined // ) && this.userRole === APP.ROLE.INSTITUTION && this.state.showSaveAsDraft && ( <button className="btn btn-outline smf-btn-default mb-3" onClick={(e) => { this.saveFields(this.state.headingIndex); // if (this.validationPassed()) { this.submitForm(true); // } }} > Save as draft </button> ) } { // !( // this.props.match.params.applicationId !== null && // this.props.match.params.applicationId !== undefined // ) && this.userRole === APP.ROLE.INSTITUTION && this.state.showSaveAsDraft && this.state.headingIndex === this.state.formHeadings.length - 1 && ( <button className="btn smf-btn-primary mb-3" onClick={(e) => { this.saveFields(this.state.headingIndex); if (this.validationPassed()) { this.submitForm(false); } }} > Submit application </button> ) } {this.state.headingIndex <
911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945
this.state.formHeadings.length - 1 && ( <button onClick={(e) => { this.saveFields(this.state.headingIndex); if (this.validationPassed()) { this.setState({ headingIndex: this.state.headingIndex + 1, }); setTimeout(() => { this.populateData(); }, 100); } }} className="btn btn-primary smf-btn-primary mr-0 ml-2 mb-3" > Next <i className="fa fa-arrow-right ml-2"></i> </button> )} </div> </div> </div> </div> </div> </div> </div> </div> </div> </Fragment> ); } } export default FormViewer;