diff --git a/lib/js/review/SubmitController.js b/lib/js/review/SubmitController.js index 3cc6983..61ae790 100644 --- a/lib/js/review/SubmitController.js +++ b/lib/js/review/SubmitController.js @@ -153,9 +153,8 @@ var SubmitController = function (_React$Component) { onChange: function onChange(value) { return _this2.props.setPreSubmit(preSubmit.field, value); }, - checked: form.data[preSubmit.field], + checked: form.data[preSubmit.field] || false, showError: showPreSubmitError }), - ' }', _react2.default.createElement(_SubmitButtons2.default, { onBack: this.goBack, onSubmit: this.handleSubmit, diff --git a/lib/js/review/SubmitController.js.map b/lib/js/review/SubmitController.js.map index 85707a7..6e8f56c 100644 --- a/lib/js/review/SubmitController.js.map +++ b/lib/js/review/SubmitController.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../src/js/review/SubmitController.jsx"],"names":["SubmitController","getPreSubmit","required","field","label","error","formConfig","preSubmitInfo","goBack","props","form","pageList","router","expandedPageList","data","push","length","path","handleSubmit","pagesByChapter","trackingPrefix","preSubmit","setSubmission","isValid","errors","event","Raven","captureMessage","extra","prefix","submitForm","nextProps","nextStatus","submission","status","previousStatus","newRoute","urlPrefix","showPreSubmitError","renderErrorMessage","setPreSubmit","value","React","Component","mapStateToProps","state","ownProps","hasAttemptedSubmit","mapDispatchToProps","propTypes","PropTypes","object","isRequired","array","func","string"],"mappings":"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","file":"SubmitController.js","sourcesContent":["import React from 'react';\nimport Raven from 'raven-js';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router';\n\nimport SubmitButtons from './SubmitButtons';\nimport { PreSubmitSection } from '../components/PreSubmitSection';\nimport { isValidForm } from '../validation';\nimport {\n createPageListByChapter,\n getActiveExpandedPages,\n recordEvent\n} from '../helpers';\nimport {\n setPreSubmit,\n setSubmission,\n submitForm\n} from '../actions';\n\nclass SubmitController extends React.Component {\n\n componentWillReceiveProps(nextProps) {\n const nextStatus = nextProps.form.submission.status;\n const previousStatus = this.props.form.submission.status;\n if (nextStatus !== previousStatus && nextStatus === 'applicationSubmitted') {\n const newRoute = `${nextProps.formConfig.urlPrefix}confirmation`;\n this.props.router.push(newRoute);\n }\n }\n\n getPreSubmit = formConfig => {\n return {\n required: false,\n field: 'AGREED',\n label: 'I agree to the terms and conditions.',\n error: 'You must accept the agreement before submitting.',\n ...formConfig.preSubmitInfo\n };\n }\n\n goBack = () => {\n const {\n form,\n pageList,\n router\n } = this.props;\n\n const expandedPageList = getActiveExpandedPages(pageList, form.data);\n\n // TODO: Fix this bug that assumes there is a confirmation page.\n // Actually, it assumes the app also doesn't add routes at the end!\n // A component at this level should not need to know these things!\n router.push(expandedPageList[expandedPageList.length - 2].path);\n }\n\n handleSubmit = () => {\n const {\n form,\n formConfig,\n pagesByChapter,\n trackingPrefix\n } = this.props;\n\n // If a pre-submit agreement is required, make sure it was accepted\n const preSubmit = this.getPreSubmit(formConfig);\n if (preSubmit.required && !form.data[preSubmit.field]) {\n this.props.setSubmission('hasAttemptedSubmit', true);\n // <PreSubmitSection/> is displaying an error for this case\n return;\n }\n\n // Validation errors in this situation are not visible, so we’d\n // like to know if they’re common\n const { isValid, errors } = isValidForm(form, pagesByChapter);\n if (!isValid) {\n recordEvent({\n event: `${trackingPrefix}-validation-failed`,\n });\n Raven.captureMessage('Validation issue not displayed', {\n extra: {\n errors,\n prefix: trackingPrefix\n }\n });\n this.props.setSubmission('status', 'validationError');\n this.props.setSubmission('hasAttemptedSubmit', true);\n return;\n }\n\n // User accepted if required, and no errors, so submit\n this.props.submitForm(formConfig, form);\n }\n\n render() {\n const {\n form,\n formConfig,\n showPreSubmitError,\n renderErrorMessage\n } = this.props;\n const preSubmit = this.getPreSubmit(formConfig);\n\n return (\n <div>\n <PreSubmitSection\n preSubmitInfo={preSubmit}\n onChange={value => this.props.setPreSubmit(preSubmit.field, value)}\n checked={form.data[preSubmit.field]}\n showError={showPreSubmitError}/> }\n <SubmitButtons\n onBack={this.goBack}\n onSubmit={this.handleSubmit}\n submission={form.submission}\n renderErrorMessage={renderErrorMessage}/>\n </div>\n );\n }\n}\n\nfunction mapStateToProps(state, ownProps) {\n const {\n formConfig,\n pageList,\n renderErrorMessage\n } = ownProps;\n const router = ownProps.router;\n\n const form = state.form;\n const pagesByChapter = createPageListByChapter(formConfig);\n const trackingPrefix = formConfig.trackingPrefix;\n const submission = form.submission;\n const showPreSubmitError = submission.hasAttemptedSubmit;\n\n return {\n form,\n formConfig,\n pagesByChapter,\n pageList,\n renderErrorMessage,\n router,\n submission,\n showPreSubmitError,\n trackingPrefix\n };\n}\n\nconst mapDispatchToProps = {\n setPreSubmit,\n setSubmission,\n submitForm\n};\n\nSubmitController.propTypes = {\n form: PropTypes.object.isRequired,\n formConfig: PropTypes.object.isRequired,\n pagesByChapter: PropTypes.object.isRequired,\n pageList: PropTypes.array.isRequired,\n renderErrorMessage: PropTypes.func,\n router: PropTypes.object.isRequired,\n setPreSubmit: PropTypes.func.isRequired,\n setSubmission: PropTypes.func.isRequired,\n submitForm: PropTypes.func.isRequired,\n submission: PropTypes.object.isRequired,\n trackingPrefix: PropTypes.string.isRequired\n};\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(SubmitController));\n\n// for tests\nexport { SubmitController };\n"]} \ No newline at end of file +{"version":3,"sources":["../../../src/js/review/SubmitController.jsx"],"names":["SubmitController","getPreSubmit","required","field","label","error","formConfig","preSubmitInfo","goBack","props","form","pageList","router","expandedPageList","data","push","length","path","handleSubmit","pagesByChapter","trackingPrefix","preSubmit","setSubmission","isValid","errors","event","Raven","captureMessage","extra","prefix","submitForm","nextProps","nextStatus","submission","status","previousStatus","newRoute","urlPrefix","showPreSubmitError","renderErrorMessage","setPreSubmit","value","React","Component","mapStateToProps","state","ownProps","hasAttemptedSubmit","mapDispatchToProps","propTypes","PropTypes","object","isRequired","array","func","string"],"mappings":";;;;;;;;;;;AAAA;;;;AACA;;;;AACA;;;;AACA;;AACA;;AAEA;;;;AACA;;AACA;;AACA;;AAKA;;;;;;;;;;IAMMA,gB;;;;;;;;;;;;;;0MAWJC,Y,GAAe,sBAAc;AAC3B;AACEC,kBAAU,KADZ;AAEEC,eAAO,QAFT;AAGEC,eAAO,sCAHT;AAIEC,eAAO;AAJT,SAKKC,WAAWC,aALhB;AAOD,K,QAEDC,M,GAAS,YAAM;AAAA,wBAKT,MAAKC,KALI;AAAA,UAEXC,IAFW,eAEXA,IAFW;AAAA,UAGXC,QAHW,eAGXA,QAHW;AAAA,UAIXC,MAJW,eAIXA,MAJW;;;AAOb,UAAMC,mBAAmB,qCAAuBF,QAAvB,EAAiCD,KAAKI,IAAtC,CAAzB;;AAEA;AACA;AACA;AACAF,aAAOG,IAAP,CAAYF,iBAAiBA,iBAAiBG,MAAjB,GAA0B,CAA3C,EAA8CC,IAA1D;AACD,K,QAEDC,Y,GAAe,YAAM;AAAA,yBAMf,MAAKT,KANU;AAAA,UAEjBC,IAFiB,gBAEjBA,IAFiB;AAAA,UAGjBJ,UAHiB,gBAGjBA,UAHiB;AAAA,UAIjBa,cAJiB,gBAIjBA,cAJiB;AAAA,UAKjBC,cALiB,gBAKjBA,cALiB;;AAQnB;;AACA,UAAMC,YAAY,MAAKpB,YAAL,CAAkBK,UAAlB,CAAlB;AACA,UAAIe,UAAUnB,QAAV,IAAsB,CAACQ,KAAKI,IAAL,CAAUO,UAAUlB,KAApB,CAA3B,EAAuD;AACrD,cAAKM,KAAL,CAAWa,aAAX,CAAyB,oBAAzB,EAA+C,IAA/C;AACA;AACA;AACD;;AAED;AACA;;AAjBmB,yBAkBS,6BAAYZ,IAAZ,EAAkBS,cAAlB,CAlBT;AAAA,UAkBXI,OAlBW,gBAkBXA,OAlBW;AAAA,UAkBFC,MAlBE,gBAkBFA,MAlBE;;AAmBnB,UAAI,CAACD,OAAL,EAAc;AACZ,kCAAY;AACVE,iBAAUL,cAAV;AADU,SAAZ;AAGAM,0BAAMC,cAAN,CAAqB,gCAArB,EAAuD;AACrDC,iBAAO;AACLJ,0BADK;AAELK,oBAAQT;AAFH;AAD8C,SAAvD;AAMA,cAAKX,KAAL,CAAWa,aAAX,CAAyB,QAAzB,EAAmC,iBAAnC;AACA,cAAKb,KAAL,CAAWa,aAAX,CAAyB,oBAAzB,EAA+C,IAA/C;AACA;AACD;;AAED;AACA,YAAKb,KAAL,CAAWqB,UAAX,CAAsBxB,UAAtB,EAAkCI,IAAlC;AACD,K;;;;;8CAtEyBqB,S,EAAW;AACnC,UAAMC,aAAaD,UAAUrB,IAAV,CAAeuB,UAAf,CAA0BC,MAA7C;AACA,UAAMC,iBAAiB,KAAK1B,KAAL,CAAWC,IAAX,CAAgBuB,UAAhB,CAA2BC,MAAlD;AACA,UAAIF,eAAeG,cAAf,IAAiCH,eAAe,sBAApD,EAA4E;AAC1E,YAAMI,WAAcL,UAAUzB,UAAV,CAAqB+B,SAAnC,iBAAN;AACA,aAAK5B,KAAL,CAAWG,MAAX,CAAkBG,IAAlB,CAAuBqB,QAAvB;AACD;AACF;;;6BAiEQ;AAAA;;AAAA,mBAMH,KAAK3B,KANF;AAAA,UAELC,IAFK,UAELA,IAFK;AAAA,UAGLJ,UAHK,UAGLA,UAHK;AAAA,UAILgC,kBAJK,UAILA,kBAJK;AAAA,UAKLC,kBALK,UAKLA,kBALK;;AAOP,UAAMlB,YAAY,KAAKpB,YAAL,CAAkBK,UAAlB,CAAlB;;AAEA,aACE;AAAA;AAAA;AACE,sCAAC,kCAAD;AACE,yBAAee,SADjB;AAEE,oBAAU;AAAA,mBAAS,OAAKZ,KAAL,CAAW+B,YAAX,CAAwBnB,UAAUlB,KAAlC,EAAyCsC,KAAzC,CAAT;AAAA,WAFZ;AAGE,mBAAS/B,KAAKI,IAAL,CAAUO,UAAUlB,KAApB,KAA8B,KAHzC;AAIE,qBAAWmC,kBAJb,GADF;AAME,sCAAC,uBAAD;AACE,kBAAQ,KAAK9B,MADf;AAEE,oBAAU,KAAKU,YAFjB;AAGE,sBAAYR,KAAKuB,UAHnB;AAIE,8BAAoBM,kBAJtB;AANF,OADF;AAcD;;;;EAjG4BG,gBAAMC,S;;AAoGrC,SAASC,eAAT,CAAyBC,KAAzB,EAAgCC,QAAhC,EAA0C;AAAA,MAEtCxC,UAFsC,GAKpCwC,QALoC,CAEtCxC,UAFsC;AAAA,MAGtCK,QAHsC,GAKpCmC,QALoC,CAGtCnC,QAHsC;AAAA,MAItC4B,kBAJsC,GAKpCO,QALoC,CAItCP,kBAJsC;;AAMxC,MAAM3B,SAASkC,SAASlC,MAAxB;;AAEA,MAAMF,OAAOmC,MAAMnC,IAAnB;AACA,MAAMS,iBAAiB,sCAAwBb,UAAxB,CAAvB;AACA,MAAMc,iBAAiBd,WAAWc,cAAlC;AACA,MAAMa,aAAavB,KAAKuB,UAAxB;AACA,MAAMK,qBAAqBL,WAAWc,kBAAtC;;AAEA,SAAO;AACLrC,cADK;AAELJ,0BAFK;AAGLa,kCAHK;AAILR,sBAJK;AAKL4B,0CALK;AAML3B,kBANK;AAOLqB,0BAPK;AAQLK,0CARK;AASLlB;AATK,GAAP;AAWD;;AAED,IAAM4B,qBAAqB;AACzBR,qCADyB;AAEzBlB,uCAFyB;AAGzBQ;AAHyB,CAA3B;;AAMA9B,iBAAiBiD,SAAjB,GAA6B;AAC3BvC,QAAMwC,oBAAUC,MAAV,CAAiBC,UADI;AAE3B9C,cAAY4C,oBAAUC,MAAV,CAAiBC,UAFF;AAG3BjC,kBAAgB+B,oBAAUC,MAAV,CAAiBC,UAHN;AAI3BzC,YAAUuC,oBAAUG,KAAV,CAAgBD,UAJC;AAK3Bb,sBAAoBW,oBAAUI,IALH;AAM3B1C,UAAQsC,oBAAUC,MAAV,CAAiBC,UANE;AAO3BZ,gBAAcU,oBAAUI,IAAV,CAAeF,UAPF;AAQ3B9B,iBAAe4B,oBAAUI,IAAV,CAAeF,UARH;AAS3BtB,cAAYoB,oBAAUI,IAAV,CAAeF,UATA;AAU3BnB,cAAYiB,oBAAUC,MAAV,CAAiBC,UAVF;AAW3BhC,kBAAgB8B,oBAAUK,MAAV,CAAiBH;AAXN,CAA7B;;kBAce,6BAAW,yBAAQR,eAAR,EAAyBI,kBAAzB,EAA6ChD,gBAA7C,CAAX,C;;AAEf;;QACSA,gB,GAAAA,gB","file":"SubmitController.js","sourcesContent":["import React from 'react';\nimport Raven from 'raven-js';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router';\n\nimport SubmitButtons from './SubmitButtons';\nimport { PreSubmitSection } from '../components/PreSubmitSection';\nimport { isValidForm } from '../validation';\nimport {\n createPageListByChapter,\n getActiveExpandedPages,\n recordEvent\n} from '../helpers';\nimport {\n setPreSubmit,\n setSubmission,\n submitForm\n} from '../actions';\n\nclass SubmitController extends React.Component {\n\n componentWillReceiveProps(nextProps) {\n const nextStatus = nextProps.form.submission.status;\n const previousStatus = this.props.form.submission.status;\n if (nextStatus !== previousStatus && nextStatus === 'applicationSubmitted') {\n const newRoute = `${nextProps.formConfig.urlPrefix}confirmation`;\n this.props.router.push(newRoute);\n }\n }\n\n getPreSubmit = formConfig => {\n return {\n required: false,\n field: 'AGREED',\n label: 'I agree to the terms and conditions.',\n error: 'You must accept the agreement before submitting.',\n ...formConfig.preSubmitInfo\n };\n }\n\n goBack = () => {\n const {\n form,\n pageList,\n router\n } = this.props;\n\n const expandedPageList = getActiveExpandedPages(pageList, form.data);\n\n // TODO: Fix this bug that assumes there is a confirmation page.\n // Actually, it assumes the app also doesn't add routes at the end!\n // A component at this level should not need to know these things!\n router.push(expandedPageList[expandedPageList.length - 2].path);\n }\n\n handleSubmit = () => {\n const {\n form,\n formConfig,\n pagesByChapter,\n trackingPrefix\n } = this.props;\n\n // If a pre-submit agreement is required, make sure it was accepted\n const preSubmit = this.getPreSubmit(formConfig);\n if (preSubmit.required && !form.data[preSubmit.field]) {\n this.props.setSubmission('hasAttemptedSubmit', true);\n // <PreSubmitSection/> is displaying an error for this case\n return;\n }\n\n // Validation errors in this situation are not visible, so we’d\n // like to know if they’re common\n const { isValid, errors } = isValidForm(form, pagesByChapter);\n if (!isValid) {\n recordEvent({\n event: `${trackingPrefix}-validation-failed`,\n });\n Raven.captureMessage('Validation issue not displayed', {\n extra: {\n errors,\n prefix: trackingPrefix\n }\n });\n this.props.setSubmission('status', 'validationError');\n this.props.setSubmission('hasAttemptedSubmit', true);\n return;\n }\n\n // User accepted if required, and no errors, so submit\n this.props.submitForm(formConfig, form);\n }\n\n render() {\n const {\n form,\n formConfig,\n showPreSubmitError,\n renderErrorMessage\n } = this.props;\n const preSubmit = this.getPreSubmit(formConfig);\n\n return (\n <div>\n <PreSubmitSection\n preSubmitInfo={preSubmit}\n onChange={value => this.props.setPreSubmit(preSubmit.field, value)}\n checked={form.data[preSubmit.field] || false}\n showError={showPreSubmitError}/>\n <SubmitButtons\n onBack={this.goBack}\n onSubmit={this.handleSubmit}\n submission={form.submission}\n renderErrorMessage={renderErrorMessage}/>\n </div>\n );\n }\n}\n\nfunction mapStateToProps(state, ownProps) {\n const {\n formConfig,\n pageList,\n renderErrorMessage\n } = ownProps;\n const router = ownProps.router;\n\n const form = state.form;\n const pagesByChapter = createPageListByChapter(formConfig);\n const trackingPrefix = formConfig.trackingPrefix;\n const submission = form.submission;\n const showPreSubmitError = submission.hasAttemptedSubmit;\n\n return {\n form,\n formConfig,\n pagesByChapter,\n pageList,\n renderErrorMessage,\n router,\n submission,\n showPreSubmitError,\n trackingPrefix\n };\n}\n\nconst mapDispatchToProps = {\n setPreSubmit,\n setSubmission,\n submitForm\n};\n\nSubmitController.propTypes = {\n form: PropTypes.object.isRequired,\n formConfig: PropTypes.object.isRequired,\n pagesByChapter: PropTypes.object.isRequired,\n pageList: PropTypes.array.isRequired,\n renderErrorMessage: PropTypes.func,\n router: PropTypes.object.isRequired,\n setPreSubmit: PropTypes.func.isRequired,\n setSubmission: PropTypes.func.isRequired,\n submitForm: PropTypes.func.isRequired,\n submission: PropTypes.object.isRequired,\n trackingPrefix: PropTypes.string.isRequired\n};\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(SubmitController));\n\n// for tests\nexport { SubmitController };\n"]} \ No newline at end of file