{"version":3,"sources":["images/submissionBanner.png","images/oprLogo.png","containers/Auth/constants.js","containers/Auth/actions.js","containers/Auth/RequestResetForm/index.js","containers/Auth/selectors.js","containers/Auth/LoginForm/index.js","containers/Auth/index.js","containers/Dashboard/Applicants/data.js","containers/Dashboard/constants.js","containers/Dashboard/actions.js","containers/Dashboard/selectors.js","containers/Dashboard/Applicants/index.js","utils/date.js","containers/Dashboard/Applications/data.js","containers/Dashboard/Applications/index.js","containers/Dashboard/Officials/data.js","containers/Dashboard/Officials/index.js","utils/caOptions.js","containers/Dashboard/ProfileForm/index.js","containers/App/constants.js","containers/Dashboard/routes.js","containers/Dashboard/index.js","containers/Registration/Message/index.js","containers/Registration/constants.js","containers/Registration/actions.js","containers/Registration/RegistrationForm/index.js","containers/Registration/selectors.js","containers/Registration/ResetPasswordForm/index.js","containers/Registration/index.js","containers/Submissions/components/Panel/PanelButton.js","containers/Submissions/components/FiltersPanel/schema.js","containers/Submissions/components/Panel/Panel.js","containers/Submissions/components/FieldDateRange/FieldDateRange.js","containers/Submissions/components/FiltersPanel/FiltersPanel.js","containers/Submissions/constants.js","containers/Submissions/actions.js","containers/Submissions/components/SearchBox/SearchBox.js","containers/Home/messages.js","containers/Submissions/data.js","containers/Submissions/selectors.js","containers/Submissions/index.js","containers/Home/constants.js","containers/Home/actions.js","containers/Home/selectors.js","containers/Home/AssistanceForm/index.js","containers/App/routes.js","containers/Home/index.js","containers/App/index.js","containers/Auth/reducer.js","utils/formUtils.js","containers/Auth/saga.js","containers/Dashboard/reducer.js","containers/Dashboard/saga.js","containers/Home/reducer.js","utils/api.js","containers/Home/saga.js","containers/Registration/reducer.js","containers/Registration/saga.js","containers/Submissions/reducer.js","containers/Submissions/saga.js","containers/Registrants/constants.js","containers/Registrants/reducer.js","containers/Registrants/actions.js","containers/Registrants/saga.js","index.js"],"names":["module","exports","LOGIN_REQUEST","LOGIN_FAILURE","LOGOUT","REQUEST_RESET_REQUEST","loginRequest","createAction","C","loginSuccess","loginFailed","logout","logoutDone","requestResetRequest","requestResetSuccess","incrementLoginAttempts","enforceLockout","stillLockedOut","setIsResetting","RequestResetForm","onSubmit","values","requestReset","props","onClickCancel","this","handleSubmit","error","ConnectedAsync","className","FieldInput","required","name","label","validate","isValidEmail","Button","text","variant","onClick","type","React","PureComponent","defaultProps","withReduxForm","reduxForm","form","destroyOnUnmount","withRedux","connect","dispatch","actions","selectAuth","state","auth","getIsLoggedIn","createSelector","x","isLoggedIn","getRole","role","getIsLockedOut","isLockedOut","API_URL","window","config","LoginForm","login","isHuman","console","log","handleRecaptcha","e","data","secret","response","fetch","headers","method","body","JSON","stringify","then","json","d","score","setState","prevState","token","auth_error","onClickReset","lockoutExpires","localStorage","getItem","Date","now","parseInt","onVerify","mapStateToProps","createStructuredSelector","selectors","Auth","redirectLoggedIn","history","push","isResetting","title","Page","withRouting","withRouter","columns","sort","dataField","GET_APPLICATION_LIST_REQUEST","GET_APPLICANT_LIST_REQUEST","GET_OFFICIAL_LIST_REQUEST","UPDATE_OFFICIAL_REQUEST","NEW_OFFICIAL_REQUEST","DELETE_OFFICIAL_REQUEST","getApplicationListRequest","getApplicationListSuccess","getApplicantListRequest","getApplicantListSuccess","getOfficialListRequest","getOfficialListSuccess","updateOfficialRequest","updateOfficialSuccess","newOfficialSuccess","deleteOfficialRequest","deleteOfficialSuccess","selectDashboard","dashboard","Applicants","applicantList","getApplicantList","length","Table","formattedDate","date","dateUtils","isValid","toLocaleDateString","formatter","row","A","href","id","fileName","Applications","renderColumns","value","applicationList","getApplicationList","district","assembly","forEach","startsWith","substring","indexOf","join","cell","isDummyField","Officials","buildColumns","deleteOfficial","map","officialList","getOfficialList","cityOptionsCA","getNumberOptions","count","prefix","Array","fill","i","String","getFieldOptions","arr","districtOptions","options","senate","city","caOptions","county","fieldOptions","countyOptionsCA","listBoxIcons","moveLeft","moveAllLeft","key","moveRight","moveAllRight","officeOptions","ProfileForm","getAllDistrictOptions","tmp","propName","concat","updateDistrictOptions","officeValue","opt","availableDistrictOptions","toggleNotifications","a","async","isNotified","updateOfficial","selected","districts","cities","counties","pre","val","pure","initialValues","prevProps","pristine","change","Set","disabled","FieldRadioButtons","available","onChange","icons","checked","formValueSelector","ROLES","routesByKey","applicants","path","exact","component","roles","applications","officials","profile","Object","Dashboard","getRoutes","routes","filter","includes","tabRoutes","NavTabs","authSelectors","Message","header","Container","LinkButton","to","VERIFY_TOKEN_REQUEST","REGISTER_OFFICIAL_REQUEST","RESET_PASSWORD_REQUEST","CONFIRM_REQUEST","verifyTokenRequest","verifyTokenSuccess","registerOfficialRequest","registerOfficialSuccess","registerOfficialFailure","resetPasswordRequest","resetPasswordSuccess","confirmRequest","confirmSuccess","resetPasswordDuplicateFailure","validatePassMatch","pass","undefined","validatePassStrength","test","RegistrationForm","registerOfficial","style","textAlign","Boolean","selectRegistration","registration","getToken","ResetPasswordForm","resetPassword","Registration","isRegistering","isErr","isConfirming","getUrlParams","location","urlParams","URLSearchParams","search","get","email","verifyToken","renderForm","renderSuccessMessage","renderFailureMessage","renderConfirmMessage","renderPasswordResetFailureMessage","content","isRegistered","isConfirmed","PanelButton","isOpen","rest","cn","iconProps","schema","cfdaNumber","projStart","submission","projEnd","Panel","children","FieldDateRange","labelId","startProps","endProps","aria-label","FieldDate","usingForm","onClear","filters","FieldSelect","keys","url","encodeURIComponent","cfda","document","GET_SUBMISSION_LIST_REQUEST","getSubmissionListRequest","getSubmissionListSuccess","updateFilters","updateSearch","SearchBox","srOnly","intro","determinationHeader","determinationText","reviewHeader","reviewText","noReviewHeader","noReviewText","placeOfPerformanceText","minWidth","maxWidth","color","defaultSorted","order","selectSubmissions","submissions","selectNames","searchResult","searchString","toLowerCase","match","toString","Submissions","toggleSection","section","filtersOpen","toggleFilters","onFilter","onClearFilters","resetForm","submissionList","getSubmissionList","bannerSrc","submissionBanner","messages","onSearch","data-test","aria-expanded","hideSearch","allFilters","dateRangeFilterNames","textFilterNames","selectFilterNames","result","found","matchesTextFields","every","matchesSelectFields","datesRangesValid","foundDates","withPostfix","replace","startDate","find","endDate","split","getFullYear","getMonth","getDate","reset","SUBMIT_FORM_REQUEST","GET_ASSISTANCE_LIST_REQUEST","submitFormRequest","submitFormSuccess","getAssistanceListRequest","getAssistanceListSuccess","selectHome","home","AssistanceForm","validatePDF","getCurrenDate","slice","validateCFDA","validateEndDate","allValues","handleRadioChange","isActive","submitForm","isErrorHidden","noValidate","normalize","normalizeZip","FieldFile","accept","hidden","assistanceList","country","getAssistanceList","oprHome","icon","visibility","brandingLogo","src","oprLogo","alt","contactLink","App","loginFromStorage","jwt","validToken","buildAuthRoute","filterLoginRoutes","filterUnauthorizedRoutes","withAuthRoute","routeValues","withAuth","alignHeader","router","BrowserRouter","authActions","initialState","loginAttempts","handleActions","action","payload","submitAsyncForm","formName","callApi","onSuccess","errorMessage","onResetError","successMessage","errorStatus","put","asyncActions","increaseLoading","startSubmit","messagesActions","registerMessage","registrationActions","decreaseLoading","stopSubmit","loginFlow","handleLoginFailure","authSaga","MAX_LOGIN_ATTEMPTS","LOCKOUT_TIME","authenticate","tokenKey","clearToken","race","task","call","cancel","take","select","setItem","api","request","all","takeEvery","takeLatest","newOfficial","dashboardSaga","requestWithToken","withAsync","programNumber","programTitle","buildFormData","FormData","isArray","append","homeSaga","verfiyToken","confirm","submissionsSaga","GET_REGISTRANT_LIST_REQUEST","registrantList","getRegistrantListSuccess","getRegistrantList","registrantsSaga","reducers","authReducer","dashboardReducer","homeReducer","registrationReducer","submissionsReducer","registrants","registrantsReducer","sagas","registrationSaga","store","configureStore","ReactDOM","render","reCaptchaKey","ConnectedMessages","getElementById"],"mappings":"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","file":"static/js/main.f9f05fa1.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/submissionBanner.be6c1fd3.png\";","module.exports = \"data:image/png;base64,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\"","export const LOGIN_REQUEST = 'Auth/LOGIN_REQUEST';\nexport const LOGIN_SUCCESS = 'Auth/LOGIN_SUCCESS';\nexport const LOGIN_FAILURE = 'Auth/LOGIN_FAILURE';\n\nexport const LOGOUT = 'Auth/LOGOUT';\nexport const LOGOUT_DONE = 'Auth/LOGOUT_DONE';\n\nexport const REQUEST_RESET_REQUEST = 'Auth/REQUEST_RESET_REQUEST';\nexport const REQUEST_RESET_SUCCESS = 'Auth/REQUEST_RESET_SUCCESS';\nexport const REQUEST_RESET_FAILURE = 'Auth/REQUEST_RESET_FAILURE';\nexport const REQUEST_RESET_DUPLICATE = 'Auth/REQUEST_RESET_DUPLICATE';\n\nexport const INCREMENT_LOGIN_ATTEMPTS = 'Auth/INCREMENT_LOGIN_ATTEMPTS';\nexport const RESET_LOGIN_ATTEMPTS = 'Auth/RESET_LOGIN_ATTEMPTS';\nexport const ENFORCE_LOCKOUT ='Auth/ENFORCE_LOCKOUT';\nexport const STILL_LOCKED_OUT = 'Auth/STILL_LOCKED_OUT';\nexport const SET_IS_RESETTING = 'Auth/SET_IS_RESETTING';\n","import { createAction } from 'redux-actions';\n\nimport * as C from './constants';\n\nexport const loginRequest = createAction(C.LOGIN_REQUEST);\nexport const loginSuccess = createAction(C.LOGIN_SUCCESS);\nexport const loginFailed = createAction(C.LOGIN_FAILURE);\n\nexport const logout = createAction(C.LOGOUT);\nexport const logoutDone = createAction(C.LOGOUT_DONE);\n\nexport const requestResetRequest = createAction(C.REQUEST_RESET_REQUEST);\nexport const requestResetSuccess = createAction(C.REQUEST_RESET_SUCCESS);\nexport const requestResetDuplicate = createAction(C.REQUEST_RESET_DUPLICATE);\n\nexport const incrementLoginAttempts = createAction(C.INCREMENT_LOGIN_ATTEMPTS);\nexport const resetLoginAttempts = createAction(C.RESET_LOGIN_ATTEMPTS);\nexport const enforceLockout = createAction(C.ENFORCE_LOCKOUT);\nexport const stillLockedOut = createAction(C.STILL_LOCKED_OUT);\n\nexport const setIsResetting = createAction(C.SET_IS_RESETTING);\n","import React from 'react';\nimport T from 'prop-types';\nimport { connect } from 'react-redux';\nimport { reduxForm } from 'redux-form';\nimport {\n  Button,\n  ConnectedAsync,\n  FieldInput,\n  validate,\n} from 'state-template';\n\nimport * as actions from '../actions';\n\nexport class RequestResetForm extends React.PureComponent {\n  componentWillUnmount() {\n    const { onClickCancel } = this.props;\n    // set as not resetting password when leaving this component\n    onClickCancel();\n  }\n\n  onSubmit = (values) => {\n    const { requestReset } = this.props;\n    requestReset(values);\n  }\n\n  render() {\n    const { handleSubmit, error, onClickCancel } = this.props;\n\n    return (\n      <ConnectedAsync>\n        <form onSubmit={handleSubmit(this.onSubmit)} className={'m-t-sm'}>\n          {error && <div className={'alert alert-danger'}>{error}</div>}\n\n          <FieldInput\n            required\n            name={'email'}\n            label={'Email Address'}\n            validate={[validate.isValidEmail]}\n          />\n\n          <div className={'p-y-sm'}>\n            <Button text={'Cancel'} variant={'default'} onClick={onClickCancel} />\n            <Button type={'submit'} text={'Submit'} variant={'primary'} className={'pull-right'} />\n          </div>\n        </form>\n      </ConnectedAsync>\n    );\n  }\n}\n\nRequestResetForm.propTypes = {\n  error: T.string,\n  handleSubmit: T.func.isRequired,\n  onClickCancel: T.func.isRequired,\n  requestReset: T.func.isRequired,\n};\n\nRequestResetForm.defaultProps = {\n  error: null,\n};\n\nexport const mapDispatchToProps = dispatch => ({\n  requestReset: props => dispatch(actions.requestResetRequest(props)),\n  onClickCancel: () => dispatch(actions.setIsResetting(false)),\n});\n\nconst withReduxForm = reduxForm({ form: 'RequestResetForm', destroyOnUnmount: false })(RequestResetForm);\nconst withRedux = connect(null, mapDispatchToProps)(withReduxForm);\n\nexport default withRedux;\n","import { createSelector } from 'reselect';\n\nconst selectAuth = (state) => state.auth;\n\nexport const getIsLoggedIn = () =>\n  createSelector(selectAuth, (x) => x.isLoggedIn);\nexport const getIsResetting = () =>\n  createSelector(selectAuth, (x) => x.isResetting);\nexport const getRole = () => createSelector(selectAuth, (x) => x.role);\nexport const getError = () =>\n  createSelector(selectAuth, (x) => {\n    return x.auth_error;\n  });\nexport const getIsLockedOut = () =>\n  createSelector(selectAuth, (x) => \n  x.isLockedOut);\n","/* eslint-disable camelcase */\nimport React, {useEffect, useState, useLayoutEffect} from 'react';\nimport T from 'prop-types';\nimport { connect, useDispatch, useSelector } from 'react-redux';\nimport { reduxForm } from 'redux-form';\nimport { Button, ConnectedAsync, FieldInput, validate } from 'state-template';\nimport { GoogleReCaptcha } from 'react-google-recaptcha-v3';\n\nimport { createStructuredSelector } from 'reselect';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\n\nconst { API_URL } = window.config;\n\nexport class LoginForm extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {\n      token: '',\n      isHuman: true,\n    };\n  }\n\n  onSubmit = (values) => {\n    const { login, isLockedOut } = this.props;\n    const { isHuman } = this.state;\n    if (isLockedOut){\n      //display message that the account is locked\n      console.log('The account is currently locked.');\n      return;\n    }\n    if (isHuman) {\n      login(values);\n    }\n  };\n\n  handleRecaptcha = (e) => {\n    const data = {\n      secret: '6Lc6KcgbAAAAAIZbVKvCmlv-lXzBFjtpLPzVDQ0H',\n      response: e,\n    };\n\n    fetch(`${API_URL}/api/Login/verifyRecaptcha`, {\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      method: 'POST',\n      body: JSON.stringify(data),\n    })\n      .then((response) => response.json())\n      .then((d) => {\n        if (d.score > 0.1) {\n          this.setState((prevState) => ({ ...prevState, isHuman: true }));\n        } else {\n          this.setState((prevState) => ({ ...prevState, isHuman: false }));\n        }\n      });\n  }\n\n  render() {\n    const { isHuman } = this.state;\n    const { handleSubmit, auth_error, onClickReset } = this.props;\n    const lockoutExpires = localStorage.getItem('lockoutExpires');\n    if(lockoutExpires && Date.now() < parseInt(lockoutExpires, 10)){\n      return (\n        <div className=\"alert alert-danger\" role=\"alert\">\n          Account has been locked due to multiple failed login\n          attempts. Please try again later.\n        </div>\n      );\n    }\n    return (\n      <ConnectedAsync>\n        <form onSubmit={handleSubmit(this.onSubmit)} className={'m-t-sm'}>\n          {\n            !isHuman\n              ? (<div className={'alert alert-danger'}>Unable to process request. Please try again in 2 minutes.</div>)\n              : null\n          }\n\n          {\n            auth_error ? \n            auth_error == \"You must confirm your email to login.\"\n            ? auth_error && (<div className={'alert alert-danger'}>{auth_error}&nbsp;A confirmation email has been resent, please click the link to confirm your account.</div>) :\n            (<div className={'alert alert-danger'}>{auth_error}</div>)\n            : null\n          }\n          \n\n          <FieldInput\n            required\n            name={'fedassisteml'}\n            label={'Email Address'}\n            type={'email'}\n            validate={[validate.isValidEmail]}\n          />\n\n          <FieldInput\n            required\n            name={'fedassistpwd'}\n            label={'Password'}\n            type={'password'}\n          />\n\n          <div className={'p-y-sm'}>\n          <Button\n              text={'Reset Password'}\n              variant={'default'}\n              onClick={onClickReset}\n            />\n            <Button\n              type={'submit'}\n              text={'Submit'}\n              variant={'primary'}\n              className={'pull-right'}\n            />\n          </div>\n          <GoogleReCaptcha onVerify={this.handleRecaptcha} />\n        </form>\n      </ConnectedAsync>\n    );\n  }\n}\n\nLoginForm.defaultProps = {\n  auth_error: '',\n};\n\nLoginForm.propTypes = {\n  auth_error: T.string,\n  handleSubmit: T.func.isRequired,\n  login: T.func.isRequired,\n  onClickReset: T.func.isRequired,\n  isLockedOut: T.bool.isRequired,\n};\n\nexport const mapDispatchToProps = (dispatch) => ({\n  login: (props) => dispatch(actions.loginRequest(props)),\n  onClickReset: () => dispatch(actions.setIsResetting(true)),\n});\nexport const mapStateToProps = createStructuredSelector({\n  auth_error: selectors.getError(),\n  isLockedOut: selectors.getIsLockedOut(),\n});\n\nconst withReduxForm = reduxForm({ form: 'LoginForm', destroyOnUnmount: false })(\n  LoginForm,\n);\nconst withRedux = connect(mapStateToProps, mapDispatchToProps)(withReduxForm);\n\nexport default withRedux;\n","import React from 'react';\nimport T from 'prop-types';\nimport { withRouter } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { Page } from 'state-template';\n\nimport RequestResetForm from './RequestResetForm';\nimport LoginForm from './LoginForm';\nimport * as selectors from './selectors';\n\nexport class Auth extends React.PureComponent {\n  componentDidMount() {\n    this.redirectLoggedIn(this.props);\n  }\n\n  componentDidUpdate() {\n    this.redirectLoggedIn(this.props);\n  }\n\n  redirectLoggedIn = ({ history, isLoggedIn }) => {\n    if (isLoggedIn) {\n      history.push('/dashboard');\n    }\n  };\n\n  render() {\n    const { isResetting, isLockedOut } = this.props;\n    const title = isResetting ? 'Reset Password' : 'Login';\n\n    // Redirect if logged in or show a lockout message if locked out\n    if(isLockedOut) {\n      return (\n        <Page title = {title}>\n          <div className = {'row justify-content-center'}>\n            <div className={'col-lg-6 col-md-8'}>\n              <div>Your account has been locked due to multiple\n            failed login attempts. Please try again in 2 hours.\n              </div> \n            </div>\n          </div>\n        </Page>\n      );\n    }\n\n    return (\n      <Page title={title}>\n        <div className={'row justify-content-center'}>\n          <div className={'col-lg-6 col-md-8'}>\n            {isResetting ? <RequestResetForm /> : <LoginForm />}\n          </div>\n        </div>\n      </Page>\n    );\n  }\n}\n\nAuth.propTypes = {\n  history: T.shape({\n    push: T.func.isRequired,\n  }).isRequired,\n  isLoggedIn: T.bool.isRequired, // eslint-disable-line\n  isResetting: T.bool.isRequired,\n  isLockedOut: T.bool.isRequired,\n};\n\nexport const mapStateToProps = createStructuredSelector({\n  isLoggedIn: selectors.getIsLoggedIn(),\n  isResetting: selectors.getIsResetting(),\n  isLockedOut: selectors.getIsLockedOut(),\n});\n\nconst withRedux = connect(mapStateToProps)(Auth);\nconst withRouting = withRouter(withRedux);\n\nexport default withRouting;\n","export const columns = [\n  {\n    sort: true,\n    dataField: 'email',\n    text: 'Email Address',\n  }, {\n    sort: true,\n    dataField: 'orgName',\n    text: 'Organization',\n  },\n];\n","// applications\nexport const GET_APPLICATION_LIST_REQUEST = 'Dashboard/GET_APPLICATION_LIST_REQUEST';\nexport const GET_APPLICATION_LIST_SUCCESS = 'Dashboard/GET_APPLICATION_LIST_SUCCESS';\n\n// applicant\nexport const GET_APPLICANT_LIST_REQUEST = 'Dashboard/GET_APPLICANT_LIST_REQUEST';\nexport const GET_APPLICANT_LIST_SUCCESS = 'Dashboard/GET_APPLICANT_LIST_SUCCESS';\n\n// officials\nexport const GET_OFFICIAL_LIST_REQUEST = 'Dashboard/GET_OFFICIAL_LIST_REQUEST';\nexport const GET_OFFICIAL_LIST_SUCCESS = 'Dashboard/GET_OFFICIAL_LIST_SUCCESS';\n\nexport const UPDATE_OFFICIAL_REQUEST = 'Dashboard/UPDATE_OFFICIAL_REQUEST';\nexport const UPDATE_OFFICIAL_SUCCESS = 'Dashboard/UPDATE_OFFICIAL_SUCCESS';\n\nexport const NEW_OFFICIAL_REQUEST = 'Dashboard/NEW_OFFICIAL_REQUEST';\nexport const NEW_OFFICIAL_SUCCESS = 'Dashboard/NEW_OFFICIAL_SUCCESS';\n\nexport const DELETE_OFFICIAL_REQUEST = 'Dashboard/DELETE_OFFICIAL_REQUEST';\nexport const DELETE_OFFICIAL_SUCCESS = 'Dashboard/DELETE_OFFICIAL_SUCCESS';\n","import { createAction } from 'redux-actions';\n\nimport * as C from './constants';\n\n// applications\nexport const getApplicationListRequest = createAction(C.GET_APPLICATION_LIST_REQUEST);\nexport const getApplicationListSuccess = createAction(C.GET_APPLICATION_LIST_SUCCESS);\n\n// applicant\nexport const getApplicantListRequest = createAction(C.GET_APPLICANT_LIST_REQUEST);\nexport const getApplicantListSuccess = createAction(C.GET_APPLICANT_LIST_SUCCESS);\n\n// officials\nexport const getOfficialListRequest = createAction(C.GET_OFFICIAL_LIST_REQUEST);\nexport const getOfficialListSuccess = createAction(C.GET_OFFICIAL_LIST_SUCCESS);\n\nexport const updateOfficialRequest = createAction(C.UPDATE_OFFICIAL_REQUEST);\nexport const updateOfficialSuccess = createAction(C.UPDATE_OFFICIAL_SUCCESS);\n\nexport const newOfficialRequest = createAction(C.NEW_OFFICIAL_REQUEST);\nexport const newOfficialSuccess = createAction(C.NEW_OFFICIAL_SUCCESS);\n\nexport const deleteOfficialRequest = createAction(C.DELETE_OFFICIAL_REQUEST);\nexport const deleteOfficialSuccess = createAction(C.DELETE_OFFICIAL_SUCCESS);\n","import { createSelector } from 'reselect';\n\nconst selectDashboard = state => state.dashboard;\n\nexport const getApplicationList = () => createSelector(selectDashboard, x => x.applicationList);\nexport const getApplicantList = () => createSelector(selectDashboard, x => x.applicantList);\nexport const getOfficialList = () => createSelector(selectDashboard, x => x.officialList);\nexport const getOfficial = () => createSelector(selectDashboard, x => (\n  x.officialList ? x.officialList[0] : null\n));\n","import React from 'react';\nimport T from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { ConnectedAsync, Table } from 'state-template';\n\nimport * as data from './data';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\n\nexport class Applicants extends React.PureComponent {\n  componentDidMount() {\n    const { applicantList, getApplicantList } = this.props;\n    if (!applicantList.length) {\n      getApplicantList();\n    }\n  }\n\n  render() {\n    const { applicantList } = this.props;\n\n    return (\n      <ConnectedAsync>\n        <Table\n          title={'Applicants'}\n          data={applicantList}\n          columns={data.columns}\n        />\n      </ConnectedAsync>\n    );\n  }\n}\n\nApplicants.propTypes = {\n  applicantList: T.array.isRequired,\n  getApplicantList: T.func.isRequired,\n};\n\nexport const mapStateToProps = createStructuredSelector({\n  applicantList: selectors.getApplicantList(),\n});\n\nexport const mapDispatchToProps = dispatch => ({\n  getApplicantList: () => dispatch(actions.getApplicantListRequest()),\n});\n\nconst withRedux = connect(mapStateToProps, mapDispatchToProps)(Applicants);\n\nexport default withRedux;\n","import { date as dateUtils } from 'state-template';\n\n// returns a date in local format, null if invalid\nexport const formattedDate = (date) => {\n  if (dateUtils.isValid(date)) {\n    return new Date(date).toLocaleDateString();\n  }\n\n  return null;\n};\n","import React from 'react';\nimport { A } from 'state-template';\n\nimport { formattedDate } from '../../../utils/date';\nconst {API_URL}= window.config;\n\nexport const columns = [\n  {\n    sort: true,\n    dataField: 'cfda',\n    text: 'CFDA Number',\n  }, {\n    sort: true,\n    dataField: 'orgName',\n    text: 'Applicant Name',\n  }, {\n    sort: true,\n    dataField: 'fileName',\n    text: 'SF-424 Form',\n    formatter: (e, row) => (\n      <A\n        href={`${API_URL}/api/Applications/Download/${row.id}`}\n        text={row.fileName}\n      />\n    ),\n  }, {\n    sort: true,\n    dataField: 'county',\n    text: 'County',\n  }, {\n    sort: true,\n    dataField: 'assembly',\n    text: 'Assembly District',\n  }, {\n    sort: true,\n    dataField: 'senate',\n    text: 'Senate District',\n  }, {\n    sort: true,\n    dataField: 'submission',\n    text: 'Date Received',\n    formatter: formattedDate,\n  },\n];\n","import React from 'react';\nimport T from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { ConnectedAsync, Table, A } from 'state-template';\n\nimport * as data from './data';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\n  const {API_URL}= window.config;\n\nexport class Applications extends React.PureComponent {\n  componentDidMount() {\n    const { applicationList, getApplicationList } = this.props;\n    if (!applicationList.length) {\n      getApplicationList();\n    }\n  }\n\n  renderColumns = () => ({\n    // link to save file for given submission\n    fileName: (value, row) => (\n      <A\n        href={`${API_URL}/api/Applications/Download/${row.id}`}\n        text={value}\n      />\n    ),\n  })\n\n  render() {\n    const { applicationList } = this.props;\n\n    return (\n      <ConnectedAsync>\n        <Table\n          title={'Applications'}\n          data={applicationList}\n          columns={data.columns}\n        />\n      </ConnectedAsync>\n    );\n  }\n}\n\nApplications.propTypes = {\n  applicationList: T.array.isRequired,\n  getApplicationList: T.func.isRequired,\n};\n\nexport const mapStateToProps = createStructuredSelector({\n  applicationList: selectors.getApplicationList(),\n});\n\nexport const mapDispatchToProps = dispatch => ({\n  getApplicationList: () => dispatch(actions.getApplicationListRequest()),\n});\n\nconst withRedux = connect(mapStateToProps, mapDispatchToProps)(Applications);\n\nexport default withRedux;\n","import React from 'react';\n\nexport const columns = [\n  {\n    sort: true,\n    dataField: 'email',\n    text: 'Email',\n  }, {\n    sort: true,\n    dataField: 'fName',\n    text: 'First Name',\n  }, {\n    sort: true,\n    dataField: 'mName',\n    text: 'Middle Name',\n  }, {\n    sort: true,\n    dataField: 'lName',\n    text: 'Last Name',\n  }, {\n    sort: true,\n    dataField: 'district',\n    text: 'Assembly District',\n    formatter: (e, row) => {\n      if (!row.district) { return null; }\n      var assembly = [];\n      row.district.forEach(function (value){\n        if(value.startsWith(\"a_\")){\n          assembly.push(value.substring(value.indexOf(\"_\") + 1));\n        }\n      });\n      return (<p>{assembly.join(\", \")}</p>);\n    },\n  }, {\n    sort: true,\n    dataField: 'district',\n    text: 'Senate District',\n    formatter: (e, row) => {\n      if (!row.district) { return null; }\n      var assembly = [];\n      row.district.forEach(function (value){\n        if(value.startsWith(\"s_\")){\n          assembly.push(value.substring(value.indexOf(\"_\") + 1));\n        }\n      });\n      return (<p>{assembly.join(\", \")}</p>);\n    },\n  }, {\n    sort: true,\n    dataField: 'county',\n    text: 'County',\n  }, {\n    sort: true,\n    dataField: 'reset',\n    text: 'Activated',\n    formatter: cell => (\n      cell ? 'No' : 'Yes'\n    ),\n  }, {\n    dataField: 'deleteBtn',\n    text: '',\n    isDummyField: true,\n  },\n];\n","import React from 'react';\nimport T from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { ConnectedAsync, Table, Button } from 'state-template';\n\nimport * as data from './data';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\n\nexport class Officials extends React.PureComponent {\n  componentDidMount() {\n    const { officialList, getOfficialList } = this.props;\n    if (!officialList.length) {\n      getOfficialList();\n    }\n  }\n\n  buildColumns = () => {\n    const { deleteOfficial } = this.props;\n    // attach delete button to each row\n    return data.columns.map((x) => {\n      if (x.dataField === 'deleteBtn') {\n        return {\n          ...x,\n          formatter: (cell, row) => (\n            <Button\n              text={'Delete'}\n              variant={'default'}\n              onClick={() => deleteOfficial(row.id)}\n            />\n          ),\n        };\n      }\n      return x;\n    });\n  }\n\n  render() {\n    const { officialList } = this.props;\n\n    return (\n      <ConnectedAsync>\n        <Table\n          title={'Registrants'}\n          data={officialList}\n          columns={this.buildColumns()}\n        />\n      </ConnectedAsync>\n    );\n  }\n}\n\nOfficials.propTypes = {\n  officialList: T.array.isRequired,\n  getOfficialList: T.func.isRequired,\n  deleteOfficial: T.func.isRequired,\n};\n\nexport const mapStateToProps = createStructuredSelector({\n  officialList: selectors.getOfficialList(),\n});\n\nexport const mapDispatchToProps = dispatch => ({\n  getOfficialList: () => dispatch(actions.getOfficialListRequest()),\n  deleteOfficial: id => dispatch(actions.deleteOfficialRequest(id)),\n});\n\nconst withRedux = connect(mapStateToProps, mapDispatchToProps)(Officials);\n\nexport default withRedux;\n","export var citiesCA = ['Adelanto' , 'Agoura Hills' , 'Alameda' , 'Albany' , 'Alhambra' , 'Aliso Viejo' , 'Alturas' , 'Amador City' , 'American Canyon' , 'Anaheim' , 'Anderson' , 'Angels Camp' , 'Antioch' , 'Apple Valley' , 'Arcadia' , 'Arcata' , 'Arroyo Grande' , 'Artesia' , 'Arvin' , 'Atascadero' , 'Atherton' , 'Atwater' , 'Auburn' , 'Avalon' , 'Avenal' , 'Azusa' , 'Bakersfield' , 'Baldwin Park' , 'Banning' , 'Barstow' , 'Beaumont' , 'Bell' , 'Bell Gardens' , 'Bellflower' , 'Belmont' , 'Belvedere' , 'Benicia' , 'Berkeley' , 'Beverly Hills' , 'Big Bear Lake' , 'Biggs' , 'Bishop' , 'Blue Lake' , 'Blythe' , 'Bradbury' , 'Brawley' , 'Brea' , 'Brentwood' , 'Brisbane' , 'Buellton' , 'Buena Park' , 'Burbank' , 'Burlingame' , 'Calabasas' , 'Calexico' , 'California City' , 'Calimesa' , 'Calipatria' , 'Calistoga' , 'Camarillo' , 'Campbell' , 'Canyon Lake' , 'Capitola' , 'Carlsbad' , 'Carmel-by-the-Sea' , 'Carpinteria' , 'Carson' , 'Cathedral City' , 'Ceres' , 'Cerritos' , 'Chico' , 'Chino' , 'Chino Hills' , 'Chowchilla' , 'Chula Vista' , 'Citrus Heights' , 'Claremont' , 'Clayton' , 'Clearlake' , 'Cloverdale' , 'Clovis' , 'Coachella' , 'Coalinga' , 'Colfax' , 'Colma' , 'Colton' , 'Colusa' , 'Commerce' , 'Compton' , 'Concord' , 'Corcoran' , 'Corning' , 'Corona' , 'Coronado' , 'Corte Madera' , 'Costa Mesa' , 'Cotati' , 'Covina' , 'Crescent City' , 'Cudahy' , 'Culver City' , 'Cupertino' , 'Cypress' , 'Daly City' , 'Dana Point' , 'Danville' , 'Davis' , 'Del Mar' , 'Del Rey Oaks' , 'Delano' , 'Desert Hot Springs' , 'Diamond Bar' , 'Dinuba' , 'Dixon' , 'Dorris' , 'Dos Palos' , 'Downey' , 'Duarte' , 'Dublin' , 'Dunsmuir' , 'East Palo Alto' , 'Eastvale' , 'El Cajon' , 'El Centro' , 'El Cerrito' , 'El Monte' , 'El Segundo' , 'Elk Grove' , 'Emeryville' , 'Encinitas' , 'Escalon' , 'Escondido' , 'Etna' , 'Eureka' , 'Exeter' , 'Fairfax' , 'Fairfield' , 'Farmersville' , 'Ferndale' , 'Fillmore' , 'Firebaugh' , 'Folsom' , 'Fontana' , 'Fort Bragg' , 'Fort Jones' , 'Fortuna' , 'Foster City' , 'Fountain Valley' , 'Fowler' , 'Fremont' , 'Fresno' , 'Fullerton' , 'Galt' , 'Garden Grove' , 'Gardena' , 'Gilroy' , 'Glendale' , 'Glendora' , 'Goleta' , 'Gonzales' , 'Grand Terrace' , 'Grass Valley' , 'Greenfield' , 'Gridley' , 'Grover Beach' , 'Guadalupe' , 'Gustine' , 'Half Moon Bay' , 'Hanford' , 'Hawaiian Gardens' , 'Hawthorne' , 'Hayward' , 'Healdsburg' , 'Hemet' , 'Hercules' , 'Hermosa Beach' , 'Hesperia' , 'Hidden Hills' , 'Highland' , 'Hillsborough' , 'Hollister' , 'Holtville' , 'Hughson' , 'Huntington Beach' , 'Huntington Park' , 'Huron' , 'Imperial' , 'Imperial Beach' , 'Indian Wells' , 'Indio' , 'Industry' , 'Inglewood' , 'Ione' , 'Irvine' , 'Irwindale' , 'Isleton' , 'Jackson' , 'Jurupa Valley' , 'Kerman' , 'King City' , 'Kingsburg' , 'La Cañada Flintridge' , 'La Habra' , 'La Habra Heights' , 'La Mesa' , 'La Mirada' , 'La Palma' , 'La Puente' , 'La Quinta' , 'La Verne' , 'Lafayette' , 'Laguna Beach' , 'Laguna Hills' , 'Laguna Niguel' , 'Laguna Woods' , 'Lake Elsinore' , 'Lake Forest' , 'Lakeport' , 'Lakewood' , 'Lancaster' , 'Larkspur' , 'Lathrop' , 'Lawndale' , 'Lemon Grove' , 'Lemoore' , 'Lincoln' , 'Lindsay' , 'Live Oak' , 'Livermore' , 'Livingston' , 'Lodi' , 'Loma Linda' , 'Lomita' , 'Lompoc' , 'Long Beach' , 'Loomis' , 'Los Alamitos' , 'Los Altos' , 'Los Altos Hills' , 'Los Angeles' , 'Los Banos' , 'Los Gatos' , 'Loyalton' , 'Lynwood' , 'Madera' , 'Malibu' , 'Mammoth Lakes' , 'Manhattan Beach' , 'Manteca' , 'Maricopa' , 'Marina' , 'Martinez' , 'Marysville' , 'Maywood' , 'McFarland' , 'Mendota' , 'Menifee' , 'Menlo Park' , 'Merced' , 'Mill Valley' , 'Millbrae' , 'Milpitas' , 'Mission Viejo' , 'Modesto' , 'Monrovia' , 'Montague' , 'Montclair' , 'Monte Sereno' , 'Montebello' , 'Monterey' , 'Monterey Park' , 'Moorpark' , 'Moraga' , 'Moreno Valley' , 'Morgan Hill' , 'Morro Bay' , 'Mount Shasta' , 'Mountain View' , 'Murrieta' , 'Napa' , 'National City' , 'Needles' , 'Nevada City' , 'Newark' , 'Newman' , 'Newport Beach' , 'Norco' , 'Norwalk' , 'Novato' , 'Oakdale' , 'Oakland' , 'Oakley' , 'Oceanside' , 'Ojai' , 'Ontario' , 'Orange' , 'Orange Cove' , 'Orinda' , 'Orland' , 'Oroville' , 'Oxnard' , 'Pacific Grove' , 'Pacifica' , 'Palm Desert' , 'Palm Springs' , 'Palmdale' , 'Palo Alto' , 'Palos Verdes Estates' , 'Paradise' , 'Paramount' , 'Parlier' , 'Pasadena' , 'Paso Robles' , 'Patterson' , 'Perris' , 'Petaluma' , 'Pico Rivera' , 'Piedmont' , 'Pinole' , 'Pismo Beach' , 'Pittsburg' , 'Placentia' , 'Placerville' , 'Pleasant Hill' , 'Pleasanton' , 'Plymouth' , 'Point Arena' , 'Pomona' , 'Port Hueneme' , 'Porterville' , 'Portola' , 'Portola Valley' , 'Poway' , 'Rancho Cordova' , 'Rancho Cucamonga' , 'Rancho Mirage' , 'Rancho Palos Verdes' , 'Rancho Santa Margarita' , 'Red Bluff' , 'Redding' , 'Redlands' , 'Redondo Beach' , 'Redwood City' , 'Reedley' , 'Rialto' , 'Richmond' , 'Ridgecrest' , 'Rio Dell' , 'Rio Vista' , 'Ripon' , 'Riverbank' , 'Riverside' , 'Rocklin' , 'Rohnert Park' , 'Rolling Hills' , 'Rolling Hills Estates' , 'Rosemead' , 'Roseville' , 'Ross' , 'Sacramento' , 'St. Helena' , 'Salinas' , 'San Anselmo' , 'San Bernardino' , 'San Bruno' , 'San Carlos' , 'San Clemente' , 'San Diego' , 'San Dimas' , 'San Fernando' , 'San Francisco' , 'San Gabriel' , 'San Jacinto' , 'San Joaquin' , 'San Jose' , 'San Juan Bautista' , 'San Juan Capistrano' , 'San Leandro' , 'San Luis Obispo' , 'San Marcos' , 'San Marino' , 'San Mateo' , 'San Pablo' , 'San Rafael' , 'San Ramon' , 'Sand City' , 'Sanger' , 'Santa Ana' , 'Santa Barbara' , 'Santa Clara' , 'Santa Clarita' , 'Santa Cruz' , 'Santa Fe Springs' , 'Santa Maria' , 'Santa Monica' , 'Santa Paula' , 'Santa Rosa' , 'Santee' , 'Saratoga' , 'Sausalito' , 'Scotts Valley' , 'Seal Beach' , 'Seaside' , 'Sebastopol' , 'Selma' , 'Shafter' , 'Shasta Lake' , 'Sierra Madre' , 'Signal Hill' , 'Simi Valley' , 'Solana Beach' , 'Soledad' , 'Solvang' , 'Sonoma' , 'Sonora' , 'South El Monte' , 'South Gate' , 'South Lake Tahoe' , 'South Pasadena' , 'South San Francisco' , 'Stanton' , 'Stockton' , 'Suisun City' , 'Sunnyvale' , 'Susanville' , 'Sutter Creek' , 'Taft' , 'Tehachapi' , 'Tehama' , 'Temecula' , 'Temple City' , 'Thousand Oaks' , 'Tiburon' , 'Torrance' , 'Tracy' , 'Trinidad' , 'Truckee' , 'Tulare' , 'Tulelake' , 'Turlock' , 'Tustin' , 'Twentynine Palms' , 'Ukiah' , 'Union City' , 'Upland' , 'Vacaville' , 'Vallejo' , 'Ventura' , 'Vernon' , 'Victorville' , 'Villa Park' , 'Visalia' , 'Vista' , 'Walnut' , 'Walnut Creek' , 'Wasco' , 'Waterford' , 'Watsonville' , 'Weed' , 'West Covina' , 'West Hollywood' , 'West Sacramento' , 'Westlake Village' , 'Westminster' , 'Westmorland' , 'Wheatland' , 'Whittier' , 'Wildomar' , 'Williams' , 'Willits' , 'Willows' , 'Windsor' , 'Winters' , 'Woodlake' , 'Woodland' , 'Woodside' , 'Yorba Linda' , 'Yountville' , 'Yreka' , 'Yuba City' , 'Yucaipa' , 'Yucca Valley' ];\nexport var cityOptionsCA = citiesCA.map(function (x) {\n  return {\n    value: x,\n    label: x\n  };\n});","import React from 'react';\nimport T from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { reduxForm, formValueSelector, change } from 'redux-form';\nimport {\n  ConnectedAsync,\n  Button,\n  FieldInput,\n  FieldRadioButtons,\n  fieldOptions,\n} from 'state-template';\n\nimport DualListBox from 'react-dual-listbox';\nimport 'react-dual-listbox/lib/react-dual-listbox.css';\n\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\n\nimport * as caOptions from '../../../utils/caOptions';\n\nconst getNumberOptions = (count, prefix) =>\n  Array(count)\n    .fill(0)\n    .map((x, i) => ({\n      value: prefix + String(i + 1),\n      label: String(i + 1),\n    }));\n\nconst getFieldOptions = (arr, prefix) => {\n  if (arr) {\n    var tmp = arr.map((x, i) => ({\n      value: prefix + x.value,\n      label: x.label,\n    }));\n    return tmp;\n  }\n\n  return [];\n};\n\nexport const districtOptions = {\n  assembly: [\n    {\n      label: 'Assembly',\n      options: getNumberOptions(80, 'a_'),\n    },\n  ],\n  senate: [\n    {\n      label: 'Senate',\n      options: getNumberOptions(40, 's_'),\n    },\n  ],\n  city: [\n    {\n      label: 'City',\n      options: getFieldOptions(caOptions.cityOptionsCA, 'city_'),\n    },\n  ],\n  county: [\n    {\n      label: 'County',\n      options: getFieldOptions(fieldOptions.countyOptionsCA, 'county_'),\n    },\n  ],\n};\n\nexport const listBoxIcons = {\n  moveLeft: <span className=\"ca-gov-icon-caret-left\" />,\n  moveAllLeft: <span key={0} className=\"ca-gov-icon-caret-two-left\" />,\n  moveRight: <span className=\"ca-gov-icon-caret-right\" />,\n  moveAllRight: <span key={0} className=\"ca-gov-icon-caret-two-right\" />,\n};\n\nexport const officeOptions = [\n  { value: 'assembly', label: 'Assembly' },\n  { value: 'senate', label: 'Senate' },\n  { value: 'city', label: 'City' },\n  { value: 'county', label: 'County' },\n];\n\nexport class ProfileForm extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      selected: [],\n      availableDistrictOptions: districtOptions['assembly'][0].options,\n      isNotified: true,\n      pure: true\n    };\n  }\n\n  componentDidMount() {\n    const { initialValues, getOfficialList, officeValue } = this.props;\n\n    if (!initialValues) {\n      getOfficialList();\n    }\n\n    this.updateDistrictOptions(officeValue);\n    //this.props.reset();\n  }\n\n  componentDidUpdate(prevProps) {\n    const { officeValue, initialValues } = this.props;\n\n    if (officeValue !== prevProps.officeValue) {\n      this.updateDistrictOptions(officeValue);\n    }\n\n    if (initialValues && this.state.pure) {\n      this.setState({ ...this.state, isNotified: initialValues.isNotified, pure: false })\n    }\n  }\n\n  getAllDistrictOptions = () => {\n    var tmp = [];\n    for (var propName in districtOptions) {\n      tmp = tmp.concat(districtOptions[propName]);\n    }\n\n    return tmp;\n  };\n\n  updateDistrictOptions = (officeValue) => {\n    // have a office selected, update list\n    if (officeValue) {\n      var tmp = [];\n      for (var opt in districtOptions[officeValue][0].options) {\n        tmp.push(districtOptions[officeValue][0].options[opt].value);\n      }\n\n      this.setState({ ...this.state, availableDistrictOptions: tmp });\n    }\n  };\n\n  toggleNotifications = async () => {\n    console.log(this.state);\n    await this.setState({ ...this.state, isNotified: !this.state.isNotified });\n    console.log(!this.state.isNotified);\n    console.log(\"I'm toggling!!\");\n    console.log(this.state)\n  };\n\n  onSubmit = (values) => {\n    const { updateOfficial } = this.props;\n    const { selected } = this.state;\n\n    var districts = [];\n    var cities = [];\n    var counties = [];\n\n    selected.forEach(function (value) {\n      var pre = value.substring(0, value.indexOf('_'));\n      var val = value.substring(value.indexOf('_') + 1);\n\n      switch (pre) {\n        case 'city':\n          cities.push(val);\n          break;\n        case 'county':\n          counties.push(val);\n          break;\n        case 'a':\n        case 's':\n        default:\n          districts.push(value);\n          break;\n      }\n    });\n\n    values.district = districts;\n    values.county = counties;\n    values.city = cities;\n    values.isNotified = this.state.isNotified;\n\n    console.log(\"from submit:\", this.state);\n\n\n    updateOfficial(values);\n\n  };\n\n  render() {\n    const { handleSubmit, pristine, initialValues, change } = this.props;\n    const { availableDistrictOptions } = this.state;\n\n    if (pristine && null !== initialValues) {\n      var tmp = initialValues.district;\n\n      if (null !== initialValues.city) {\n        initialValues.city.forEach(function (city) {\n          if ('' !== city) {\n            tmp.push('city_' + city);\n          }\n        });\n      }\n      if (null !== initialValues.county) {\n        initialValues.county.forEach(function (county) {\n          if ('' !== county) {\n            tmp.push('county_' + county);\n          }\n        });\n      }\n      //this.setState({ ...this.state, selected: [...new Set(tmp)] }); ?? doesn't work\n      this.state.selected = [...new Set(tmp)];     \n    }\n\n    return (\n      <ConnectedAsync>\n        <form onSubmit={handleSubmit(this.onSubmit)} className={'m-t-md'}>\n          <div className={'group'}>\n            <FieldInput\n              name={'fName'}\n              label={'First Name'}\n              className={'third'}\n              required\n            />\n            <FieldInput\n              name={'mName'}\n              label={'Middle Name'}\n              className={'third'}\n            />\n            <FieldInput\n              name={'lName'}\n              label={'Last Name'}\n              className={'third'}\n              required\n            />\n          </div>\n          <div className={'group'}>\n            <FieldInput\n              name={'email'}\n              label={'Email Address'}\n              className={'full-width'}\n              disabled\n            />\n          </div>\n          <div className={'group'} id={'notifications'}>\n            <FieldRadioButtons\n              id={'office'}\n              name={'office'}\n              label={'Select an area to request notifications.'}\n              className={'third'}\n              options={officeOptions}\n              //required={this.state.isNotified}\n              disabled={!this.state.isNotified}\n            />\n            <div className={'two-thirds'}>\n              <DualListBox\n                id={'district'}\n                name={'district'}\n                options={this.getAllDistrictOptions()}\n                selected={this.state.selected}\n                available={availableDistrictOptions}\n                onChange={(selected) => {\n                  this.setState({ selected });\n                  change('pristine', false);\n                }}\n                //required={this.state.isNotified}\n                disabled={!this.state.isNotified}\n                icons={listBoxIcons}\n              />\n            </div>\n          </div>\n\n          <div className={'p-y-sm'}>\n            <label>\n              {'Receive Notifications '}\n              <input\n                type=\"checkbox\"\n                onChange={this.toggleNotifications}\n                name={'isNotified'}\n                checked={this.state.isNotified}\n              />\n            </label>\n            <Button\n              type={'submit'}\n              text={'Submit'}\n              variant={'primary'}\n              className={'pull-right'}\n            //disabled={pristine}\n            />\n          </div>\n        </form>\n      </ConnectedAsync>\n    );\n  }\n}\n\nProfileForm.propTypes = {\n  handleSubmit: T.func.isRequired,\n  pristine: T.bool.isRequired,\n  initialValues: T.object,\n  officeValue: T.string,\n  getOfficialList: T.func.isRequired,\n  updateOfficial: T.func.isRequired,\n};\n\nProfileForm.defaultProps = {\n  initialValues: null,\n  officeValue: null,\n};\n\nexport const mapStateToProps = createStructuredSelector({\n  initialValues: selectors.getOfficial(), // populate inital form values,\n  officeValue: (state) => formValueSelector('ProfileForm')(state, 'office'),\n});\n\nexport const mapDispatchToProps = (dispatch) => ({\n  getOfficialList: () => dispatch(actions.getOfficialListRequest()),\n  updateOfficial: (values) => dispatch(actions.updateOfficialRequest(values)),\n});\n\nconst withReduxForm = reduxForm({\n  form: 'ProfileForm',\n  destroyOnUnmount: false,\n})(ProfileForm);\nconst withRedux = connect(mapStateToProps, mapDispatchToProps)(withReduxForm);\n\nexport default withRedux;\n","export const ROLES = {\n  ADMIN: 'admin',\n  OFFICIAL: 'official',\n};\n","import Applicants from './Applicants';\nimport Applications from './Applications';\nimport Officials from './Officials';\nimport ProfileForm from './ProfileForm';\n\nimport * as C from '../App/constants';\n\nexport const routesByKey = {\n  applicants: {\n    key: 'applicants',\n    name: 'Applicants',\n    path: '',\n    exact: true,\n    component: Applicants,\n    roles: [C.ROLES.ADMIN],\n  },\n  applications: {\n    key: 'applications',\n    name: 'Applications',\n    path: '',\n    exact: true,\n    component: Applications,\n    roles: [C.ROLES.OFFICIAL],\n  },\n  officials: {\n    key: 'officials',\n    name: 'Registrants',\n    path: '/officials',\n    exact: true,\n    component: Officials,\n    roles: [C.ROLES.ADMIN],\n  },\n  profile: {\n    key: 'profile',\n    name: 'Profile',\n    path: '/profile',\n    exact: true,\n    component: ProfileForm,\n    roles: [C.ROLES.OFFICIAL],\n  },\n};\n\nexport default Object.values(routesByKey);\n","import React from 'react';\nimport T from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { Page, NavTabs } from 'state-template';\n\nimport * as authSelectors from '../Auth/selectors';\nimport routes from './routes';\n\nexport class Dashboard extends React.PureComponent {\n  getRoutes = () => {\n    const { role } = this.props;\n    return routes.filter((x) => {\n      if (!x.roles) { return true; }\n      return x.roles.includes(role);\n    });\n  }\n\n  render() {\n    const tabRoutes = this.getRoutes();\n\n    return (\n      <Page title={'Dashboard'}>\n        <NavTabs routes={tabRoutes} />\n      </Page>\n    );\n  }\n}\n\nDashboard.propTypes = {\n  role: T.string.isRequired,\n};\n\nexport const mapStateToProps = createStructuredSelector({\n  role: authSelectors.getRole(),\n});\n\nconst withRedux = connect(mapStateToProps)(Dashboard);\n\nexport default withRedux;\n","import React from 'react';\nimport { Container, LinkButton } from 'state-template';\n\nconst Message = ({ header, text }) => (\n  <Container className={'text-center'}>\n    <h2>{header}</h2>\n    {text && <p>{text}</p>}\n    <LinkButton to={'/auth'} text={'Login'} variant={'primary'} />\n  </Container>\n);\n\nexport default Message;\n","export const VERIFY_TOKEN_REQUEST = 'Registration/VERIFY_TOKEN_REQUEST';\nexport const VERIFY_TOKEN_SUCCESS = 'Registration/VERIFY_TOKEN_SUCCESS';\n\nexport const REGISTER_OFFICIAL_REQUEST = 'Registration/REGISTER_OFFICIAL_REQUEST';\nexport const REGISTER_OFFICIAL_SUCCESS = 'Registration/REGISTER_OFFICIAL_SUCCESS';\nexport const REGISTER_OFFICIAL_FAILURE = 'Registration/REGISTER_OFFICIAL_FAILURE';\n\nexport const RESET_PASSWORD_REQUEST = 'Registration/RESET_PASSWORD_REQUEST';\nexport const RESET_PASSWORD_SUCCESS = 'Registration/RESET_PASSWORD_SUCCESS';\n\nexport const CONFIRM_REQUEST = 'Registration/CONFIRM_REQUEST';\nexport const CONFIRM_SUCCESS = 'Registration/CONFIRM_SUCCESS';\n\nexport const RESET_PASSWORD_DUPLICATE = 'Registration/RESET_PASSWORD_DUPLICATE';\n\n","import { createAction } from 'redux-actions';\n\nimport * as C from './constants';\n\nexport const verifyTokenRequest = createAction(C.VERIFY_TOKEN_REQUEST);\nexport const verifyTokenSuccess = createAction(C.VERIFY_TOKEN_SUCCESS);\n\nexport const registerOfficialRequest = createAction(C.REGISTER_OFFICIAL_REQUEST);\nexport const registerOfficialSuccess = createAction(C.REGISTER_OFFICIAL_SUCCESS);\nexport const registerOfficialFailure = createAction(C.REGISTER_OFFICIAL_FAILURE);\n\nexport const resetPasswordRequest = createAction(C.RESET_PASSWORD_REQUEST);\nexport const resetPasswordSuccess = createAction(C.RESET_PASSWORD_SUCCESS);\n\nexport const confirmRequest = createAction(C.CONFIRM_REQUEST);\nexport const confirmSuccess = createAction(C.CONFIRM_SUCCESS);\n\nexport const resetPasswordDuplicateFailure = createAction(C.RESET_PASSWORD_DUPLICATE);\n\n","import React from 'react';\nimport T from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { reduxForm, formValueSelector } from 'redux-form';\n\nimport DualListBox from 'react-dual-listbox';\nimport 'react-dual-listbox/lib/react-dual-listbox.css';\n\nimport {\n  Button,\n  ConnectedAsync,\n  FieldInput,\n  FieldRadioButtons,\n  fieldOptions,\n  validate,\n} from 'state-template';\n\nimport * as actions from '../actions';\n\nimport * as caOptions from '../../../utils/caOptions';\n\n// TODO: move to ST\nconst validatePassMatch = (value, state) => (\n  state.pass === value\n    ? undefined\n    : 'Passwords do not match'\n);\n\nconst validatePassStrength = (value, state) => {\n  var validationMessage = '';\n  if (state.pass?.length < 15) {\n    return 'Password is too short, please use a minimum of 15 characters.';\n  }\n  else if (!/(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*\\W)/.test(state.pass)) {\n    return 'Please use a strong password containing at least one uppercase letter, one lowercase letter, one number, and one special character.';\n  }\n  else if (state.pass?.length > 128){\n    return 'Password is too long.';\n  }   \n}\n\nconst getNumberOptions = (count, prefix) => Array(count)\n  .fill(0)\n  .map((x, i) => ({\n    value: prefix + String(i + 1),\n    label: String(i + 1),\n  }));\n\nconst getFieldOptions = (arr, prefix) => {\n  if (arr) {\n    var tmp = arr.map((x, i) => ({\n      value: prefix + x.value,\n      label: x.label\n    }));\n    return tmp;\n  }\n\n  return [];\n}\n\nexport const districtOptions = {\n  assembly: [{\n    label: 'Assembly',\n    options: getNumberOptions(80, 'a_'),\n  }],\n  senate: [{\n    label: 'Senate',\n    options: getNumberOptions(40, 's_'),\n  }],\n  city: [{\n    label: 'City',\n    options: getFieldOptions(caOptions.cityOptionsCA, \"city_\"),\n  }],\n  county: [{\n    label: 'County',\n    options: getFieldOptions(fieldOptions.countyOptionsCA, \"county_\")\n  }],\n};\n\nexport const listBoxIcons = {\n  moveLeft: <span className=\"ca-gov-icon-caret-left\" />,\n  moveAllLeft: <span key={0} className=\"ca-gov-icon-caret-two-left\" />,\n  moveRight: <span className=\"ca-gov-icon-caret-right\" />,\n  moveAllRight: <span key={0} className=\"ca-gov-icon-caret-two-right\" />,\n};\n\nexport const officeOptions = [\n  { value: 'assembly', label: 'Assembly' },\n  { value: 'senate', label: 'Senate' },\n  { value: 'city', label: 'City' },\n  { value: 'county', label: 'County' },\n];\n\nexport class RegistrationForm extends React.PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      selected: [],\n      availableDistrictOptions: districtOptions[\"senate\"][0].options\n    };\n  }\n\n  componentDidUpdate(prevProps) {\n    const { officeValue } = this.props;\n\n    if (officeValue !== prevProps.officeValue) {\n      this.updateDistrictOptions(officeValue);\n    }\n  }\n\n  getAllDistrictOptions = () => {\n    var tmp = [];\n    for (var propName in districtOptions) {\n      tmp = tmp.concat(districtOptions[propName]);\n    }\n    return tmp;\n  }\n\n  updateDistrictOptions = (officeValue) => {\n    // have a office selected, update list\n    if (officeValue) {\n      var tmp = [];\n      for (var opt in districtOptions[officeValue][0].options) {\n        tmp.push(districtOptions[officeValue][0].options[opt].value);\n      }\n      this.setState({ availableDistrictOptions: tmp });\n    }\n    console.log(officeValue)\n  }\n\n  onSubmit = (values) => {\n    const { registerOfficial } = this.props;\n    const { selected } = this.state;\n    const { pass } = this.state;\n\n    var districts = [];\n    var cities = [];\n    var counties = [];\n\n    selected.forEach(function (value) {\n      var pre = value.substring(0, value.indexOf(\"_\"));\n      var val = value.substring(value.indexOf(\"_\") + 1);\n\n      switch (pre) {\n        case \"city\":\n          cities.push(val);\n          break;\n        case \"county\":\n          counties.push(val);\n          break;\n        case \"a\":\n        case \"s\":\n        default:\n          districts.push(value);\n          break;\n      }\n    });\n\n    values.district = districts;\n    values.county = counties;\n    values.city = cities;\n\n    registerOfficial(values);\n  }\n\n  render() {\n    const { handleSubmit, pristine } = this.props;\n    const { availableDistrictOptions } = this.state;\n\n    return (\n      <ConnectedAsync>\n        <div className={'group'}>\n          <div className={'container'}>\n            <strong><p>Register here to receive notifications of submissions in your area. Applicants submitting notifications do NOT need to register.</p></strong>\n          </div>\n        </div>\n        <form onSubmit={handleSubmit(this.onSubmit)} className={'m-t-md'}>\n          <div className={'group'}>\n            <FieldInput name={'fName'} label={'First Name'} className={'third'} required />\n            <FieldInput name={'mName'} label={'Middle Name'} className={'third'} />\n            <FieldInput name={'lName'} label={'Last Name'} className={'third'} required />\n          </div>\n          <div className={'group'}>\n            <FieldInput\n              required\n              name={'email'}\n              label={'Email'}\n              className={'full-width'}\n              validate={[validate.isValidEmail]}\n            />\n          </div>\n          <div className={'group'}>\n            <div className={'container'}>\n              <strong>STATE AND LOCAL ELECTED OFFICIALS:</strong>\n              <p>Select an area to request email notifications of submitted applications for federal assistance in your region.</p>\n              <p style={{textAlign: 'right'}}><strong>Your Selections:</strong></p>\n            </div>\n            <FieldRadioButtons\n              name={'office'}\n              className={'third'}\n              options={officeOptions}\n            />\n            <div className={'two-thirds'}>\n              <DualListBox\n                required\n                id={'district'}\n                name={'district'}\n                options={this.getAllDistrictOptions()}\n                selected={this.state.selected}\n                available={availableDistrictOptions}\n                onChange={(selected) => {\n                  selected = selected.filter(Boolean).length === 0 ? undefined : selected.filter(Boolean);\n                  this.setState({ selected });\n                }}\n                icons={listBoxIcons}\n              />\n            </div>\n          </div>\n          <div className={'group'}>\n            <FieldInput \n              name={'pass'} \n              label={'Password'} \n              type={'password'} \n              className={'half'} \n              validate={[validatePassStrength]}\n              required/>\n            <FieldInput name={'passConfirm'} label={'Confirm Password'} type={'password'} className={'half'} validate={[validatePassMatch]} required />\n          </div>\n\n          <div className={'p-y-sm'}>\n            <Button\n              type={'submit'}\n              text={'Submit'}\n              variant={'primary'}\n              className={'pull-right'}\n              disabled={pristine}\n            />\n          </div>\n        </form>\n      </ConnectedAsync>\n    );\n  }\n}\n\nRegistrationForm.propTypes = {\n  token: T.string,\n  handleSubmit: T.func.isRequired,\n  pristine: T.bool.isRequired,\n  officeValue: T.string,\n  registerOfficial: T.func.isRequired,\n};\n\nRegistrationForm.defaultProps = {\n  officeValue: null,\n};\n\nexport const mapStateToProps = createStructuredSelector({\n  officeValue: state => formValueSelector('RegistrationForm')(state, 'office'),\n});\n\nexport const mapDispatchToProps = dispatch => ({\n  registerOfficial: values => dispatch(actions.registerOfficialRequest(values)),\n});\n\nconst withReduxForm = reduxForm({\n  form: 'RegistrationForm',\n  destroyOnUnmount: false\n})(RegistrationForm);\nconst withRedux = connect(mapStateToProps, mapDispatchToProps)(withReduxForm);\n\nexport default withRedux;\n","import { createSelector } from 'reselect';\n\nconst selectRegistration = state => state.registration;\n\nexport const getToken = () => createSelector(selectRegistration, x => x.token);\nexport const getIsRegistered = () => createSelector(selectRegistration, x => x.isRegistered);\nexport const getIsErr = () => createSelector(selectRegistration, x => x.isErr);\nexport const getIsConfirmed = () => createSelector(selectRegistration, x => x.isConfirmed);\n\n","import React from 'react';\nimport T from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { reduxForm } from 'redux-form';\nimport { ConnectedAsync, Button, FieldInput } from 'state-template';\n\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\n\n// TODO: move to ST\nconst validatePassMatch = (value, state) => (\n  state.pass === value\n    ? undefined\n    : 'Passwords do not match'\n);\n\nconst validatePassStrength = (value, state) => {\n  var validationMessage = '';\n  if (state.pass?.length < 15) {\n    return 'Password is too short, please use a minimum of 15 characters.';\n  }\n  else if (!/(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*\\W)/.test(state.pass)) {\n    return 'Please use a strong password containing at least one uppercase letter, one lowercase letter, one number, and one special character.';\n  }\n  else if (state.pass?.length > 128){\n    return 'Password is too long.';\n  }   \n}\n\nexport class ResetPasswordForm extends React.PureComponent {\n  onSubmit = (values) => {\n    const { resetPassword, token } = this.props;\n    resetPassword({ ...values, token });\n  }\n\n  render() {\n    const { handleSubmit, pristine } = this.props;\n    return (\n      <ConnectedAsync>\n        <form onSubmit={handleSubmit(this.onSubmit)} className={'m-t-md'}>\n          <div className={'group'}>\n            <FieldInput name={'fName'} label={'First Name'} className={'third'} disabled />\n            <FieldInput name={'mName'} label={'Middle Name'} className={'third'} disabled />\n            <FieldInput name={'lName'} label={'Last Name'} className={'third'} disabled />\n          </div>\n          <div className={'group'}>\n            <FieldInput name={'email'} label={'Email Address'} className={'full-width'} disabled />\n          </div>\n          <div className={'group'}>\n            <FieldInput name={'pass'} label={'Password'} type={'password'} className={'half'} validate={[validatePassStrength]} required />\n            <FieldInput name={'passConfirm'} label={'Confirm Password'} type={'password'} className={'half'} validate={[validatePassMatch]} required />\n          </div>\n\n          <div className={'p-y-sm'}>\n            <Button\n              type={'submit'}\n              text={'Submit'}\n              variant={'primary'}\n              className={'pull-right'}\n              disabled={pristine}\n            />\n          </div>\n        </form>\n      </ConnectedAsync>\n    );\n  }\n}\n\nResetPasswordForm.propTypes = {\n  token: T.string.isRequired,\n  handleSubmit: T.func.isRequired,\n  pristine: T.bool.isRequired,\n  resetPassword: T.func.isRequired,\n};\n\nexport const mapStateToProps = createStructuredSelector({\n  initialValues: selectors.getToken(), // populate forms inital values\n});\n\nexport const mapDispatchToProps = dispatch => ({\n  resetPassword: props => dispatch(actions.resetPasswordRequest(props)),\n});\n\nconst withReduxForm = reduxForm({ form: 'ResetPasswordForm', destroyOnUnmount: false })(ResetPasswordForm);\nconst withRedux = connect(mapStateToProps, mapDispatchToProps)(withReduxForm);\n\nexport default withRedux;\n","import React from 'react';\nimport T from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { Page } from 'state-template';\n\nimport Message from './Message';\nimport RegistrationForm from './RegistrationForm';\nimport ResetPasswordForm from './ResetPasswordForm';\nimport * as actions from './actions';\nimport * as selectors from './selectors';\n\nexport class Registration extends React.PureComponent {\n  state = { token: null, isResetting: false, isRegistering: false, isErr: false, isConfirming: false  }\n\n  async componentDidMount() {\n    await this.getUrlParams(); // wait for state to update\n    const { isConfirming } = this.state;\n    this.verifyToken();\n    if(isConfirming == true) {\n    this.confirmRequest()\n    }\n  }\n\n  getUrlParams = () => {\n    const { location } = this.props;\n    const urlParams = new URLSearchParams(location.search);\n    \n    const token = urlParams.get('token');\n    const isResetting = urlParams.get('reset');\n    const isConfirming = urlParams.get('confirm');\n    const isRegistering = null === token ? true : false;\n    const email = urlParams.get('email');\n\n\n    this.setState({ token, isResetting, isRegistering, isConfirming, email });\n  }\n\n  verifyToken = () => {\n    const { verifyToken } = this.props;\n    const { token } = this.state;\n    if( null !== token ){\n      verifyToken({ token });\n    }\n  }\n\n  confirmRequest = () => {\n    const { confirmRequest } = this.props;\n    const { token, email } = this.state;    \n    \n    if( null !== token ){\n      confirmRequest({ token, email });\n    }\n  }\n\n  renderForm = (email) => {\n    const { isResetting, token } = this.state;\n    const initialValues = { email };\n\n    if (isResetting) {\n      return <ResetPasswordForm token={token} />;\n    }\n    \n    if( email ){\n      return <RegistrationForm token={token} initialValues={initialValues} />;\n    }else{\n      return <RegistrationForm token={token} />;\n    }\n  }\n\n  renderSuccessMessage = () => {\n    const { isResetting } = this.state;\n    const header = isResetting ? 'Successful Password Reset!' : 'Successful Registration! You must confirm your account to login, a confirmation email has been sent.';\n    return <Message header={header} />;\n  }\n\n  renderFailureMessage = () => {\n    const header = 'User already exists.';\n    return <Message header={header} />;\n  }\n\n\n  renderConfirmMessage = () => {\n    const header = 'User account confirmed! You can now login.';\n    return <Message header={header} />;\n  }\n\n  //If password is in PasswordHistory table\n  renderPasswordResetFailureMessage = () => {\n    const header = 'Cannot reuse last 10 passwords.';\n    return <Message header={header} />;\n  }\n\n\n\n  render() {\n    const { isRegistered, token: { email }, isErr, isConfirmed } = this.props;\n    const { isResetting, isRegistering, isConfirming } = this.state;\n    const title = isResetting ? 'Reset Password' : 'Registration';\n    let content;\n    \n    if( email || isRegistering && !isConfirming){\n      content = this.renderForm(email);\n    }\n    \n    //form completed, display success message\n    if (isRegistered) {\n      content = this.renderSuccessMessage();\n    }\n    \n    if (isErr) {\n      if(isRegistering){\n        content = this.renderFailureMessage();\n      }\n      else if (isResetting){\n        content = this.renderPasswordResetFailureMessage();\n      } \n    }       \n    \n    if (isConfirmed) {\n      content = this.renderConfirmMessage();      \n    }       \n    \n    return (\n      <Page title={title}>\n        {content}\n      </Page>\n    );\n  }\n}\n\nRegistration.propTypes = {\n  location: T.shape({\n    search: T.string.isRequired,\n  }).isRequired,\n  token: T.object,\n  isRegistered: T.bool.isRequired,\n  verifyToken: T.func.isRequired,\n  isErr: T.bool.isRequired,\n  isConfirmed: T.bool.isRequired,\n};\n\nRegistration.defaultProps = {\n  token: {},\n};\n\nexport const mapStateToProps = createStructuredSelector({\n  token: selectors.getToken(),\n  isRegistered: selectors.getIsRegistered(),\n  isErr: selectors.getIsErr(),\n  isConfirmed: selectors.getIsConfirmed(),\n});\n\nexport const mapDispatchToProps = dispatch => ({\n  verifyToken: values => dispatch(actions.verifyTokenRequest(values)),\n  confirmRequest: values => dispatch(actions.confirmRequest(values)),\n});\n\nconst withRedux = connect(mapStateToProps, mapDispatchToProps)(Registration);\n\nexport default withRedux;\n","import React from 'react';\nimport * as T from 'prop-types';\nimport { Button } from 'state-template';\n\nconst PanelButton = ({\n  text, variant, onClick, isOpen, ...rest\n}) => {\n  const cn = isOpen ? 'PanelButton PanelButton--active' : 'PanelButton';\n\n  return (\n    <Button\n      text={text}\n      variant={variant}\n      onClick={onClick}\n      iconProps={{ name: isOpen ? 'caret-up' : 'caret-down' }}\n      className={cn}\n      {...rest}\n    />\n  );\n};\n\nPanelButton.propTypes = {\n  text: T.string.isRequired,\n  variant: T.string,\n  onClick: T.func.isRequired,\n  isOpen: T.bool.isRequired,\n};\n\nPanelButton.defaultProps = {\n  variant: 'default',\n};\n\nexport default PanelButton;\n","import { fieldOptions } from 'state-template';\n\nconst schema = {\n  cfdaNumber: {\n    name: 'cfda',\n    label: 'CFDA Number',\n  },\n  projStart: {\n    name: 'projStart',\n    label: 'Project Start Date',\n  },\n  submission: {\n    name: 'submission',\n    label: 'Date Received',\n  },\n  projEnd: {\n    name: 'projEnd',\n    label: 'Project End Date',\n  },\n  city: {\n    name: 'city',\n    label: 'City/Town',\n  },\n  assembly: {\n    name: 'assembly',\n    label: 'Assembly District',\n  },\n  senate: {\n    name: 'senate',\n    label: 'Senate District',\n  },\n  county: {\n    name: 'county',\n    label: 'County',\n    options: [\n      { value: '', label: 'ALL' },\n      ...fieldOptions.countyOptionsCA,\n    ],\n  }\n};\n\nexport default schema;\n","import React from 'react';\nimport * as T from 'prop-types';\n\nconst Panel = ({\n  className, title, children, ...rest\n}) => (\n  <div className={`Panel ${className}`} {...rest}>\n    {title && <h3>{title}</h3>}\n    {children}\n  </div>\n);\n\nPanel.propTypes = {\n  title: T.string,\n  className: T.string,\n  children: T.node.isRequired,\n};\n\nPanel.defaultProps = {\n  title: '',\n  className: '',\n};\n\nexport default Panel;\n","import React from 'react';\nimport * as T from 'prop-types';\n\nimport { FieldDate } from 'state-template';\n\nconst FieldDateRange = ({\n  className, label, name,\n}) => {\n  const labelId = `FieldDateRange__${label}`;\n  const startProps = {\n    'aria-label': `Start of ${label} Range`,\n    className: 'FieldDateRange__field',\n    name: `${name}--start`,\n  };\n  const endProps = {\n    'aria-label': `End of ${label} Range`,\n    className: 'FieldDateRange__field',\n    name: `${name}--end`,\n  };\n\n  return (\n    <div className={className} role={'group'} aria-label={labelId}>\n      <div id={labelId} className={'FieldDateRange__group-label'}>{label}</div>\n\n      <div className={'FieldDateRange__fields'}>\n        <div className={'FieldDateRange__label'}>From</div>\n        <FieldDate {...startProps} />\n\n        <div className={'FieldDateRange__label'}>To</div>\n        <FieldDate {...endProps} />\n      </div>\n    </div>\n  );\n};\n\nFieldDateRange.propTypes = {\n  /** Class to apply to top level for syling */\n  className: T.string,\n  /** Label of the field to create a range for */\n  label: T.string.isRequired,\n  /** Name of the field to create a range for */\n  name: T.string.isRequired,\n};\n\nFieldDateRange.defaultProps = {\n  className: '',\n};\n\nexport default FieldDateRange;\n","/* eslint-disable react/jsx-props-no-spreading */\nimport React from 'react';\nimport * as T from 'prop-types';\nimport { reduxForm } from 'redux-form';\nimport {\n  Button, FieldInput, FieldSelect,\n} from 'state-template';\n\nimport schema from './schema';\nimport Panel from '../Panel';\nimport FieldDateRange from '../FieldDateRange';\n\nexport const FiltersPanel = ({\n  onClear,\n  pristine,\n  handleSubmit,\n  filters,\n}) => {\n  const { API_URL } = window.config;\n\n  const handleFilteredExport = async () => {\n    let url = `${API_URL}/api/Applications/DownloadFiltered?`;\n\n    if (filters.assembly && filters.assembly.length > 0) {\n      url += `assembly=${encodeURIComponent(filters.assembly)}&`;\n    }\n    if (filters.cfda && filters.cfda.length > 0) {\n      url += `cfda=${encodeURIComponent(filters.cfda)}&`;\n    }\n    if (filters.city && filters.city.length > 0) {\n      url += `city=${encodeURIComponent(filters.city)}&`;\n    }\n    if (filters.county && filters.county.length > 0) {\n      url += `county=${encodeURIComponent(filters.county)}&`;\n    }\n    if (filters['projEnd--end'] && filters['projEnd--end'].length > 0) {\n      url += `projEndEnd=${filters['projEnd--end']}&`;\n    }\n    if (filters['projEnd--start'] && filters['projEnd--start'].length > 0) {\n      url += `projEnd=${filters['projEnd--start']}&`;\n    }\n    if (filters['projStart--end'] && filters['projStart--end'].length > 0) {\n      url += `projStartEnd=${filters['projStart--end']}&`;\n    }\n    if (filters['projStart--start'] && filters['projStart--start'].length > 0) {\n      url += `projStart=${filters['projStart--start']}&`;\n    }\n    if (filters.senate && filters.senate.length > 0) {\n      url += `senate=${encodeURIComponent(filters.senate)}&`;\n    }\n    if (filters['submission--end'] && filters['submission--end'].length > 0) {\n      url += `submissionEnd=${filters['submission--end']}&`;\n    }\n    if (filters['submission--start'] && filters['submission--start'].length > 0) {\n      url += `submission=${filters['submission--start']}&`;\n    }\n    document.location.href = url;\n  };\n\n  return (\n    <Panel title={'Filters'}>\n      <form className={'row'} onSubmit={handleSubmit}>\n        <FieldInput {...schema.cfdaNumber} className={'col-sm-4'} />\n        <FieldSelect {...schema.county} className={'col-sm-4'} />\n        <FieldInput {...schema.city} className={'col-sm-4'} />\n\n        <FieldInput {...schema.assembly} className={'col-sm-4'} />\n        <FieldInput {...schema.senate} className={'col-sm-4'} />\n\n        <FieldDateRange {...schema.projStart} className={'col-sm-6'} />\n        <FieldDateRange {...schema.projEnd} className={'col-sm-6'} />\n        <FieldDateRange {...schema.submission} className={'col-sm-6'} />\n\n        <div className={'FilterPanel__actions col-12'}>\n          <Button text={'Clear'} variant={'default'} onClick={onClear} disabled={pristine} />\n          <Button text={'Submit'} variant={'primary'} type={'submit'} />\n          {/* <Button text={'Export Filtered'} variant={'secondary'} onClick={handleFilteredExport} /> */}\n\n          {Object.keys(filters).length > 0 ? <Button text={'Export Filtered'} variant={'secondary'} onClick={handleFilteredExport} /> : ''}\n        </div>\n      </form>\n    </Panel>\n  )\n};\n\nFiltersPanel.propTypes = {\n  /** Clears the form */\n  onClear: T.func.isRequired,\n  /** Provided by redux-form, determines if form has been changed */\n  pristine: T.bool.isRequired,\n  handleSubmit: T.func.isRequired,\n  filters: T.object.isRequired,\n};\n\nconst usingForm = reduxForm({\n  form: 'filters',\n  destroyOnUnmount: false,\n})(FiltersPanel);\n\nexport default usingForm;\n","export const GET_SUBMISSION_LIST_REQUEST = 'Submissions/GET_SUBMISSION_LIST_REQUEST';\nexport const GET_SUBMISSION_LIST_SUCCESS = 'Submissions/GET_SUBMISSION_LIST_SUCCESS';\nexport const UPDATE_FILTERS = 'UPDATE_FILTERS';\nexport const UPDATE_SEARCH = 'UPDATE_SEARCH';\n","import { createAction } from 'redux-actions';\n\nimport * as C from './constants';\n\nexport const getSubmissionListRequest = createAction(C.GET_SUBMISSION_LIST_REQUEST);\nexport const getSubmissionListSuccess = createAction(C.GET_SUBMISSION_LIST_SUCCESS);\nexport const updateFilters = createAction(C.UPDATE_FILTERS);\nexport const updateSearch = createAction(C.UPDATE_SEARCH);\n","import React from 'react';\nimport T from 'prop-types';\nimport { connect } from 'react-redux';\nimport { reduxForm } from 'redux-form';\nimport { Button, FieldInput } from 'state-template';\n\nimport * as actions from '../../actions';\n\nexport class SearchBox extends React.PureComponent {\n  onSubmit = (values) => {\n    const { updateSearch } = this.props;\n    updateSearch(values);\n  }\n\n  render() {\n    const { handleSubmit } = this.props;\n    return (\n      <form onSubmit={handleSubmit(this.onSubmit)} className={'SearchBox'}>\n        <FieldInput\n          name={'searchString'}\n          aria-label={'search'}\n        />\n\n        <Button\n          iconProps={{ name: 'search-right', srOnly: 'Submit Search' }}\n          className={'SearchBox__icon'}\n          type={'submit'}\n        />\n      </form>\n    );\n  }\n}\n\nSearchBox.propTypes = {\n  handleSubmit: T.func.isRequired,\n  updateSearch: T.func.isRequired,\n};\n\nexport const mapDispatchToProps = (dispatch) => ({\n  updateSearch: (props) => dispatch(actions.updateSearch(props)),\n});\n\nconst withReduxForm = reduxForm({ form: 'search', destroyOnUnmount: false })(SearchBox);\nconst withRedux = connect(null, mapDispatchToProps)(withReduxForm);\n\nexport default withRedux;\n","import React from \"react\";\n\n// import { A } from 'state-template';\nimport A from \"state-template/dist/components/A\";\n\n/* eslint-disable react/jsx-one-expression-per-line */\n/* eslint-disable max-len */\nexport default {\n  intro: (\n    <p>\n      The State Clearinghouse (SCH) at the Governor's Office of Planning and Research (OPR) serves as the state's Single Point of\n      Contact for the submission of Federal assistance notices pursuant to{\" \"}\n      <A\n        href=\"https://www.archives.gov/federal-register/codification/executive-order/12372.html\"\n        text=\"Presidential Executive Order No. 12372\"\n      />{\" \"}\n      and{\" State Administrative Manual (SAM) Sections \"}\n      <A\n        href=\"https://www.dgs.ca.gov/Resources/SAM/TOC/900/0911\"\n        text=\"0911\"\n      />{\" \"}\n      and{\" \"}      \n      <A\n        href=\"https://www.dgs.ca.gov/Resources/SAM/TOC/900/0912\"\n        text=\"0912\"\n      />\n      . With the signing of{\" \"}\n      <A\n        href=\"https://leginfo.legislature.ca.gov/faces/billNavClient.xhtml?bill_id=201520160AB1348\"\n        text=\"Assembly Bill 1348\"\n      />{\" \"}\n      the State Clearinghouse is responsible for reporting on all federal grants\n      applied for and received in California regardless if they fall under\n      Executive Order 12372. We have developed this on-line database to\n      assist with that reporting.\n      <br />\n      <br /> Please provide your notice here before or at the same\n      time as you apply for the federal grant. These notices must be provided\n      to the SCH, which in turn\n      publishes this information for review by State and local elected\n      officials. The submittal of the SF-424 form on this website begins\n      a 30-day review period.  If no comments are received, the SCH will\n      NOT notify the applicant in writing.\n      <br />\n      <br />\n      The SCH does not administer grant programs or offer any grant funding.\n      Please visit{\" \"}\n      <A href=\"https://www.grants.gov/\" text=\"Grants.gov\" /> for funding\n      opportunities or sign up for the\n      {' '}\n      <A href={'https://lp.constantcontactpages.com/su/4wi9l7p'}\n                className={'link-external'} text=\"OPR Federal Grants Update\" />.\n        <br />\n            <br />\n\n            State, federal, and local agencies must comply with all applicable\n            statutory and regulatory requirements related to the Americans with\n            Disabilities Act for documents posted and made available on internet\n            websites {\" \"}\n            (<A\n                href=\"https://www.opr.ca.gov/accessibility.html\"\n                text=\"OPR Accessibility\"\n            />).\n\n    </p>\n  ),\n\n  determinationHeader: (\n    <h2 className={\"m-t-md\"}>\n      How to Determine if Your Federal Assistance Application is Subject to\n      Review\n    </h2>\n  ),\n  determinationText: (\n    <div>\n      <p>\n        To determine if your federal assistance application is subject to\n        review, visit{\" \"}\n        <A\n          href=\"https://beta.sam.gov/search?index=cfda\"\n          text={\"Assistance Listings\"}\n        />{\" \"}\n        on the System for Award Management (SAM) webpage. Conduct a search for\n        the federal assistance program being applied to, then review the program\n        listing for information about its application requirements under\n        Executive Order No. 12372. If no information is available, contact the\n        federal agency identified in the program listing.\n      </p>\n      <p>\n        To inquire about eligibility, application procedures, and criteria used\n        to approve federal assistance, applicants should contact the appropriate\n        federal funding agency. The SCH is unable to provide this information.\n      </p>\n    </div>\n  ),\n  reviewHeader: \"Federal Assistance Application\",\n  reviewText: (\n    <div>\n      <p>\n              To apply for a federal assistance program, please upload a copy of your application Standard Form 424 to the SCH. DO NOT send your\n              full application package or any other supplemental information. State, federal, and local agencies must comply with all applicable\n              statutory and regulatory requirements related to the Americans with Disabilities Act for documents posted and made available on internet websites.\n      </p>\n      <p>\n        In the appropriate box on Form 424, mark that the federal assistance\n        application was made available for state review under the Executive\n        Order 12372 process before submitting your federal assistance\n        application to the federal funding agency.\n      </p>\n    </div>\n  ),\n\n  noReviewHeader: \"Federal Assistance Application is not Subject to Review\",\n  noReviewText: (\n    <div>\n      <p>\n        If your federal assistance program is not subject to Executive Order\n        12372, then no further documentation is required by the SCH.\n      </p>\n      <p>\n        In the appropriate box on Form 424, mark that the federal assistance\n        application has not been selected for state review under the Executive\n        Order 12372 process before submitting your federal assistance\n        application to the federal funding agency.\n      </p>\n    </div>\n  ),\n  placeOfPerformanceText: (\n    <div>\n      <p>\n        The address where the predominant performance of the award will be\n        accomplished.\n      </p>\n    </div>\n  ),\n};\n","import React from 'react';\n\nimport { formattedDate } from '../../utils/date';\nconst { API_URL } = window.config;\n\nexport const columns = [\n  {\n    sort: true,\n    dataField: 'orgName',\n    text: 'Applicant',\n    minWidth: 150,\n    maxWidth: 250,\n  },\n  // {\n  //   sort: true,\n  //   dataField: 'email',\n  //   text: 'Email',\n  //   minWidth: 150,\n  //   maxWidth: 200,\n  //   formatter: (e, row) => (\n  //     <a href={`mailto:${row.email}`}>{row.email}</a>\n  //   ),\n  // },\n  {\n    sort: true,\n    dataField: 'fileName',\n    text: 'SF-424 Form',\n    minWidth: 150,\n    maxWidth: 200,\n    formatter: (e, row) => (\n      <a href={`${API_URL}/api/Applications/Download/${row.id}`}>{row.fileName} <span style={{ color: \"red\" }} className={'ca-gov-icon-pdf'}></span></a>\n    ),\n  }, {\n    sort: true,\n    dataField: 'fedAgency',\n    text: 'Federal Agency',\n    maxWidth: 100,\n  }, {\n    sort: true,\n    dataField: 'cfda',\n    text: 'CFDA Number',\n    maxWidth: 100,\n  }, {\n    sort: true,\n    dataField: 'city',\n    text: 'City/Town',\n    maxWidth: 120,\n  }, {\n    sort: true,\n    dataField: 'county',\n    text: 'County',\n    maxWidth: 120,\n  }, {\n    sort: true,\n    dataField: 'assembly',\n    text: 'Assembly District',\n    maxWidth: 100,\n  }, {\n    sort: true,\n    dataField: 'senate',\n    text: 'Senate District',\n    maxWidth: 100,\n  }, {\n    sort: true,\n    dataField: 'projStart',\n    text: 'Project Start Date',\n    formatter: formattedDate,\n    minWidth: 90,\n    maxWidth: 90,\n  }, {\n    sort: true,\n    dataField: 'projEnd',\n    text: 'Project End Date',\n    formatter: formattedDate,\n    minWidth: 90,\n    maxWidth: 90,\n  }, {\n    sort: true,\n    dataField: 'submission',\n    text: 'Date Received',\n    formatter: formattedDate,\n    minWidth: 90,\n    maxWidth: 90,\n  },\n];\n\nexport const defaultSorted = [{\n  dataField: 'submission',\n  order: 'desc',\n}];\n","import { createSelector } from 'reselect';\nimport schema from './components/FiltersPanel/schema';\n\nconst selectSubmissions = (state) => state.submissions;\nconst selectNames = Object.values(schema).filter((x) => x.options).map((x) => x.name);\n\nexport const getSubmissionList = () => createSelector(selectSubmissions, (x) => {\n  const { filters, submissionList, search } = x;\n  const { searchString } = search;\n  const allFilters = Object.keys(filters);\n\n  if (!allFilters.length && !searchString) return submissionList;\n\n  const dateRangeFilterNames = [];\n  const textFilterNames = [];\n  const selectFilterNames = [];\n\n  allFilters.forEach((filter) => {\n    if (filter.match(/--start|--end/)) {\n      dateRangeFilterNames.push(filter);      \n    } else if (selectNames.includes(filter)) {\n      selectFilterNames.push(filter);\n    } else {\n      textFilterNames.push(filter);\n    }\n  });\n\n  return submissionList.filter((result) => {\n    let found = true;\n\n    // Search on searchString\n    if (searchString) {\n      found = searchResult(searchString, result);\n    }\n\n    // filter by text fields - partial matches\n    const matchesTextFields = textFilterNames.every((name) => {\n      if (typeof result[name] === 'string') {\n        return result[name].toLowerCase().match(filters[name].toLowerCase());\n      }\n      return +result[name] === +filters[name];\n    });\n    \n    // filter by selects - exact matches\n    const matchesSelectFields = selectFilterNames.every((name) => {\n      if (!result[name]) return false;\n      return result[name].toLowerCase() === filters[name].toLowerCase();\n    });\n\n    // filter by date range - within start and end dates\n    let datesRangesValid = true;\n    const foundDates = {};\n    \n    dateRangeFilterNames.forEach((withPostfix) => {\n      const name = withPostfix.replace(/--start|--end/, '');\n      \n      // check if already processed (ex. did --end, dont do --start when found)\n      if (!foundDates[name]) {\n        let startDate = filters[dateRangeFilterNames.find((x) => x === `${name}--start`)];      \n        let endDate = filters[dateRangeFilterNames.find((x) => x === `${name}--end`)];\n        \n        \n        startDate = startDate.split('-');\n        startDate = new Date(startDate[0], startDate[1] - 1, startDate[2]); //months start at 0 so we need to subtract 1\n        \n        endDate = endDate.split('-');\n        endDate = new Date(endDate[0], endDate[1] - 1, endDate[2]);\n        \n        var date = new Date(result[name]);\n        date = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n\n        const isBeforeStart = startDate && date < startDate;\n        const isAfterEnd = endDate && date > endDate;            \n        \n        if (isBeforeStart || isAfterEnd) {\n          datesRangesValid = false;\n        }\n        foundDates[name] = 1;      \n      }\n    });\n    return found && matchesTextFields && matchesSelectFields && datesRangesValid;\n  });\n});\n\nexport const getFilters = () => createSelector(selectSubmissions, (x) => x.filters);\n\nconst searchResult = (searchString, value) => {\n  const keys = Object.keys(value);\n  for (let i = 0; i < keys.length; i += 1) {\n    const key = keys[i];\n    if (value[key]) {\n      if (typeof value[key] === 'string') {\n        if (value[key].toLowerCase().match(searchString.toLowerCase())) {\n          return true;\n        }\n      } else if (value[key].toString().indexOf(searchString) > -1) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n","import React from 'react';\nimport T from 'prop-types';\nimport { connect } from 'react-redux';\nimport { reset } from 'redux-form';\nimport { createStructuredSelector } from 'reselect';\nimport { LinkButton, Page, ConnectedAsync, Table } from 'state-template';\nimport PanelButton from './components/Panel/PanelButton';\nimport FiltersPanel from './components/FiltersPanel';\nimport SearchBox from './components/SearchBox';\nimport submissionBanner from '../../images/submissionBanner.png';\nimport messages from '../Home/messages';\nimport * as data from './data';\nimport * as actions from './actions';\nimport * as selectors from './selectors';\n\nexport class Submissions extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {\n      filtersOpen: false,\n    };\n  }\n\n  componentDidMount() {\n    const { submissionList, getSubmissionList } = this.props;\n    if (!submissionList.length) {\n      getSubmissionList();\n    }\n  }\n\n  toggleSection = (section) => {\n    this.setState((state) => ({\n      ...state,\n      filtersOpen: false,\n      [section]: !state[section],\n    }));\n  }\n\n  toggleFilters = () => {\n    this.toggleSection('filtersOpen');\n  }\n\n  onFilter = (values) => {\n    const { updateFilters } = this.props;\n    updateFilters(values);\n  }\n\n  onClearFilters = () => {\n    const { resetForm } = this.props;\n    resetForm('filters');\n    this.onFilter({});\n  }\n\n\n  render() {\n    const { submissionList, filters } = this.props;\n    const { filtersOpen } = this.state;\n    const { API_URL } = window.config;\n    const url= `${API_URL}/api/Applications/DownloadAll`;\n    return (\n      <Page bannerSrc={submissionBanner} title={'Federal Assistance SF-424 Submissions'}>\n        {messages.intro}        \n        <ConnectedAsync>\n          <h2>Submissions</h2>\n          <div className={'SubmissionsPage__search'}>\n            <SearchBox\n              onSubmit={this.onSearch}\n            />\n            <PanelButton\n              data-test={'toggle-filters'}\n              text={`Filters (${Object.keys(filters).length})`}\n              onClick={this.toggleFilters}\n              isOpen={filtersOpen}\n              aria-expanded={filtersOpen}\n            />\n            {filtersOpen && (\n              <FiltersPanel\n                data-test={'filters-panel'}\n                onSubmit={this.onFilter}\n                onClear={this.onClearFilters}\n                filters={filters}\n              />\n            )}\n          </div>\n          \n          <Table\n            data={submissionList}\n            columns={data.columns}\n            hideSearch\n            defaultSorted={data.defaultSorted}\n          />\n          <br/>\n          <div className={'DownloadAll'}>\n            <LinkButton text={'Download All Submissions'} href={url} variant={'primary'} />\n          </div>\n        </ConnectedAsync>\n      </Page>\n    );\n  }\n}\n\nSubmissions.propTypes = {\n  submissionList: T.array.isRequired,\n  getSubmissionList: T.func.isRequired,\n  filters: T.object.isRequired,\n  resetForm: T.func.isRequired,\n  updateFilters: T.func.isRequired,\n};\n\nexport const mapStateToProps = createStructuredSelector({\n  submissionList: selectors.getSubmissionList(),\n  filters: selectors.getFilters(),\n});\n\nexport const mapDispatchToProps = (dispatch) => ({\n  getSubmissionList: () => dispatch(actions.getSubmissionListRequest()),\n  updateFilters: (filters) => dispatch(actions.updateFilters(filters)),\n  resetForm: (form) => dispatch(reset(form)),\n});\n\nconst withRedux = connect(mapStateToProps, mapDispatchToProps)(Submissions);\nexport default withRedux;\n","export const SUBMIT_FORM_REQUEST = 'Home/SUBMIT_FORM_REQUEST';\nexport const SUBMIT_FORM_SUCCESS = 'Home/SUBMIT_FORM_SUCCESS';\nexport const SUBMIT_FORM_FAILURE = 'Home/SUBMIT_FORM_FAILURE';\n\nexport const GET_ASSISTANCE_LIST_REQUEST = 'Home/GET_ASSISTANCE_LIST_REQUEST';\nexport const GET_ASSISTANCE_LIST_SUCCESS = 'Home/GET_ASSISTANCE_LIST_SUCCESS';\nexport const GET_ASSISTANCE_LIST_FAILURE = 'Home/GET_ASSISTANCE_LIST_FAILURE';\n","import { createAction } from 'redux-actions';\n\nimport * as C from './constants';\n\nexport const submitFormRequest = createAction(C.SUBMIT_FORM_REQUEST);\nexport const submitFormSuccess = createAction(C.SUBMIT_FORM_SUCCESS);\n\nexport const getAssistanceListRequest = createAction(C.GET_ASSISTANCE_LIST_REQUEST);\nexport const getAssistanceListSuccess = createAction(C.GET_ASSISTANCE_LIST_SUCCESS);\n","import { createSelector } from 'reselect';\n\nconst selectHome = state => state.home;\n\nexport const getAssistanceList = () => createSelector(selectHome, x => x.assistanceList);\n","import React from 'react';\nimport T from 'prop-types';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { reduxForm } from 'redux-form';\nimport { withRouter } from 'react-router-dom';\nimport { GoogleReCaptcha } from 'react-google-recaptcha-v3';\n\n\nimport {\n  Button,\n  ConnectedAsync,\n  FieldDate,\n  FieldFile,\n  FieldInput,\n  FieldSelect,\n  FieldCheckboxes,\n  FieldRadioButtons,\n  Panel,\n  fieldOptions,\n  normalize,\n  validate,\n} from 'state-template';\n\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport messages from '../messages';\n\nconst { API_URL } = window.config;\n\nexport class AssistanceForm extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = { isActive: true, isHuman: true, isErrorHidden: true };\n  }\n\n  validatePDF = (value) => (!value\n    || (value && value.type === 'application/pdf' && /\\.pdf$/g.test(value.name))\n    ? undefined\n    : 'Required. Please submit a valid PDF document.');\n\n    getCurrenDate = () => {\n      const d = new Date();\n      const currentDate =  [\n        d.getFullYear(),\n        ('0' + (d.getMonth() + 1)).slice(-2),\n        ('0' + d.getDate()).slice(-2)\n      ].join('-');\n      return currentDate;\n    }  \n\n  validateCFDA = (value) => (!value || !/([0-9]{2})\\.([0-9]{3})$/.test(value)\n    ? 'Must be in the format xx.xxx where x is a number'\n    : undefined);\n\n validateEndDate = (value, allValues) => {\n  const startDate = allValues.projStart;\n  const endDate = value;  \n  if (endDate < this.getCurrenDate() || endDate < startDate) {\n    return 'End Date must be in the future and greater than or equal to the Start Date';\n  }\n  return undefined;\n};\n\n  handleRadioChange = (value) => {\n    if (value === 'yes') {\n      this.setState({ isActive: false });\n    } else {\n      this.setState({ isActive: true });\n    }\n  };\n\n  handleRecaptcha = (e) => {\n    const data = {\n      secret: '6Lc6KcgbAAAAAIZbVKvCmlv-lXzBFjtpLPzVDQ0H',\n      response: e,\n    };\n\n    fetch(`${API_URL}/api/Login/verifyRecaptcha`, {\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      method: 'POST',\n      body: JSON.stringify(data),\n    })\n      .then((response) => response.json())\n      .then((d) => {\n        if (d.score > 0.1) {\n          this.setState((prevState) => ({ ...prevState, isHuman: true }));\n        } else {\n          this.setState((prevState) => ({ ...prevState, isHuman: false }));\n        }\n      });\n  }\n\n  onSubmit = (values) => {\n    const { submitForm, history } = this.props;\n    const { isHuman } = this.state;\n    if (isHuman) {\n      submitForm({ values, history });\n    } else {\n      this.setState((prevState) => ({ ...prevState, isErrorHidden: false }));\n    }\n  };\n\n  render() {\n    const { handleSubmit } = this.props;\n    const { isActive, isErrorHidden } = this.state;\n\n    return (\n      <ConnectedAsync>\n        <form\n          onSubmit={handleSubmit(this.onSubmit)}\n          className={'m-t-md'}\n          noValidate\n        >\n          <FieldInput required name={'orgName'} label={'Organization Name'} />\n          <FieldInput\n            required\n            name={'email'}\n            label={'Email Address'}\n            validate={[validate.isValidEmail]}\n          />\n          <FieldInput\n            required\n            name={'cfda'}\n            label={'Assistance Listing (CFDA)'}\n            validate={[this.validateCFDA]}\n          />\n          <FieldInput\n            required\n            name={'fedAgency'}\n            label={'Name of Federal Agency'}\n          />\n          <Panel title=\"Primary Place of Performance\" variant={'understated'}>\n            {messages.placeOfPerformanceText}\n            <FieldInput\n              required={isActive}\n              disabled={!isActive}\n              name={'street1'}\n              label={'Street Line 1'}\n            />\n            <FieldInput\n              disabled={!isActive}\n              name={'street2'}\n              label={'Street Line 2'}\n            />\n            <FieldInput\n              required={isActive}\n              disabled={!isActive}\n              name={'city'}\n              label={'City/Town'}\n            />\n            <FieldSelect\n              required={isActive}\n              disabled={!isActive}\n              options={fieldOptions.countyOptionsCA}\n              name={'county'}\n              label={'County'}\n            />\n            <FieldInput disabled name={'state'} label={'State'} />\n            <FieldInput\n              required={isActive}\n              disabled={!isActive}\n              name={'zip'}\n              label={'Zip Code'}\n              normalize={normalize.normalizeZip}\n            />\n            <FieldInput disabled name={'country'} label={'Country'} />\n          </Panel>\n\n          <div className=\"group\">\n            <FieldDate\n              required\n              name={'projStart'}\n              label={'Proposed Project Start Date'}\n              className=\"half\"\n              aria-label={'Choose Date'}\n            />\n            <FieldDate\n              required\n              name={'projEnd'}\n              label={'Proposed Project End Date'}\n              className=\"half\"\n              validate={[this.validateEndDate]}\n            />\n          </div>\n          <FieldFile\n            required\n            accept={'.pdf'}\n            name={'applicantForm'}\n            label={'Form 424 Attachment'}\n            validate={[this.validatePDF]}\n          />\n          <div className={'submit-container'}>\n            <Button type={'submit'} text={'Submit'} variant={'primary'} />\n            <span className={'bot-msg'} hidden={isErrorHidden}>Unable to process request. Please try again in 2 minutes.</span>\n          </div>\n          <GoogleReCaptcha onVerify={this.handleRecaptcha} />\n\n        </form>\n      </ConnectedAsync>\n    );\n  }\n}\n\nAssistanceForm.propTypes = {\n  handleSubmit: T.func.isRequired,\n  assistanceList: T.array.isRequired,\n  getAssistanceList: T.func.isRequired,\n  submitForm: T.func.isRequired,\n  history: T.shape({}).isRequired,\n};\n\nexport const mapStateToProps = createStructuredSelector({\n  assistanceList: selectors.getAssistanceList(),\n});\n\nexport const mapDispatchToProps = (dispatch) => ({\n  getAssistanceList: () => dispatch(actions.getAssistanceListRequest()),\n  submitForm: (props) => dispatch(actions.submitFormRequest(props)),\n});\n\nconst withReduxForm = reduxForm({\n  form: 'AssistanceForm',\n  initialValues: {\n    state: 'California',\n    country: 'United States of America',\n  },\n  destroyOnUnmount: false,\n})(AssistanceForm);\nconst withRedux = connect(mapStateToProps, mapDispatchToProps)(withReduxForm);\nconst withRouting = withRouter(withRedux);\n\nexport default withRouting;\n","import Auth from '../Auth';\nimport Dashboard from '../Dashboard';\nimport Registration from '../Registration';\nimport Submissions from '../Submissions';\n// import Registrants from '../Registrants';\nimport Home from '../Home';\n\nimport * as C from './constants';\n\n// order here determines order in navigation menu\nexport const routesByKey = {\n  oprHome: {\n    key: 'home',\n    name: 'OPR Home',\n    href: 'https://www.opr.ca.gov/',\n    icon: 'ca-gov-icon-home',\n  },\n  home: {\n    key: 'home',\n    name: 'Home',\n    id: 'home',\n    path: '/',\n    exact: true,\n    icon: 'ca-gov-icon-home',\n    hidden: true,\n    component: Home,\n  },\n  submissions: {\n    key: 'submissions',\n    name: 'Submissions',\n    path: '/submissions',\n    exact: true,\n    icon: 'ca-gov-icon-read-book',\n    component: Submissions,\n  },\n  // registrants: {\n  //   key: 'registrants',\n  //   name: 'Registrants',\n  //   path: '/registrants',\n  //   exact: true,\n  //   icon: 'ca-gov-icon-read-book',\n  //   component: Registrants,\n  // },\n  registration: {\n     key: 'registration',\n     name: 'Registration',\n     path: '/registration',\n     icon: 'ca-gov-icon-pencil-edit',\n     exact: true,\n     component: Registration,\n     visibility: \"logout\",\n   },\n  dashboard: {\n    key: 'dashboard',\n    name: 'Dashboard',\n    path: '/dashboard',\n    exact: false,\n    icon: 'ca-gov-icon-online-services',\n    component: Dashboard,\n    roles: [C.ROLES.ADMIN, C.ROLES.OFFICIAL],\n  },\n  auth: {\n    key: 'auth',\n    name: 'Login',\n    path: '/auth',\n    exact: true,\n    icon: 'ca-gov-icon-person',\n    component: Auth,\n  },\n};\n\nexport default Object.values(routesByKey);\n","import React from 'react';\nimport { Page, Panel } from 'state-template';\n\nimport AssistanceForm from './AssistanceForm';\nimport messages from './messages';\n\nexport class Home extends React.PureComponent {\n  componentDidMount() {}\n\n  render() {\n    return (\n      <Page title={'Home'}>\n        {messages.intro}\n        <Panel title={messages.reviewHeader} variant={'overstated'}>\n          {messages.reviewText}\n          <AssistanceForm />\n        </Panel>\n      </Page>\n    );\n  }\n}\n\nexport default Home;\n","import React from 'react';\nimport T from 'prop-types';\nimport { connect } from 'react-redux';\nimport { BrowserRouter } from 'react-router-dom';\nimport { createStructuredSelector } from 'reselect';\nimport StateTemplate, { auth } from 'state-template';\n\nimport { routesByKey } from './routes';\nimport oprLogo from '../../images/oprLogo.png';\n\nimport * as authActions from '../Auth/actions';\nimport * as authSelectors from '../Auth/selectors';\n\nconst brandingLogo = {\n  src: oprLogo,\n  alt: 'Office of Planning and Research Logo',\n  to: '/',\n};\n\nconst contactLink = {\n  text: 'Contact Us',\n  href: 'https://www.opr.ca.gov/about/contact-us.html',\n};\n\nexport class App extends React.PureComponent {\n  componentDidMount() {\n    this.loginFromStorage();\n  }\n\n  // log user in if valid token found in their local storage\n  loginFromStorage = () => {\n    const { loginRequest } = this.props;\n    const jwt = auth.getToken();\n    const isValid = auth.validToken(jwt);\n    // update redux with login details if valid token\n    if (isValid) {\n      loginRequest();\n    }\n  }\n\n  buildAuthRoute = (routes) => {\n    const { isLoggedIn, logout } = this.props;\n\n    let name = 'Login';\n    let onClick = null;\n    if (isLoggedIn) {\n      name = 'Logout';\n      onClick = logout;\n    }\n\n    return ({\n      ...routes,\n      auth: {\n        ...routes.auth,\n        name,\n        onClick,\n      },\n    });\n  }\n\n  filterLoginRoutes = (routes) => {\n    const { isLoggedIn } = this.props;    \n    if (!isLoggedIn) return routes;\n    return routes.filter((x) => {\n      if (!x.visibility) { return true; }\n      return x.visibility !== \"logout\"      \n    });\n  }\n  \n  filterUnauthorizedRoutes = (routes) => {\n    const { role } = this.props;\n    return routes.filter((x) => {\n      if (!x.roles) { return true; }\n      return x.roles.includes(role);\n    });\n  }\n\n  getRoutes = () => {\n    const routes = routesByKey;\n    const withAuthRoute = this.buildAuthRoute(routes);\n    const routeValues = Object.values(withAuthRoute);\n    const withAuth = this.filterUnauthorizedRoutes(routeValues);\n    const loginFilter = this.filterLoginRoutes(withAuth);\n    return loginFilter;\n  }\n\n  render() {\n    const routes = this.getRoutes();\n    return (\n      <StateTemplate\n        routes={routes}\n        brandingLogo={brandingLogo}\n        contactLink={contactLink}\n        alignHeader={'right'}\n        router={BrowserRouter}\n      />\n    );\n  }\n}\n\nApp.propTypes = {\n  isLoggedIn: T.bool.isRequired,\n  role: T.string,\n  loginRequest: T.func.isRequired,\n  logout: T.func.isRequired,\n};\n\nApp.defaultProps = {\n  role: null,\n};\n\nexport const mapStateToProps = createStructuredSelector({\n  isLoggedIn: authSelectors.getIsLoggedIn(),\n  role: authSelectors.getRole(),\n});\n\nexport const mapDispatchToProps = (dispatch) => ({\n  loginRequest: () => dispatch(authActions.loginRequest()),\n  logout: () => dispatch(authActions.logout()),\n});\n\nconst withRedux = connect(mapStateToProps, mapDispatchToProps)(App);\n\nexport default withRedux;\n","import { handleActions } from 'redux-actions';\n\nimport * as C from './constants';\n\nexport const initialState = {\n  isLoggedIn: false,\n  isResetting: false,\n  auth_error: null,\n  loginAttempts: 0,\n  isLockedOut: false,\n};\n\nexport const incrementLoginAttempts = (state, action) => ({\n  ...state,\n  loginAttempts: state.loginAttempts + 1,\n});\n\nexport const resetLoginAttempts = (state, action) => ({\n  ...state,\n  ...action.payload,\n  loginAttempts: 0,\n  isLockedOut: false,\n});\n\nexport const enforceLockout = (state, action) => ({\n  ...state,\n  ...action.payload,\n  isLockedOut: true,\n});\n\nexport const stillLockedOut = (state, action) => ({\n  ...state,\n  isLockedOut: true,\n});\n\nexport const loginSuccess = (state, action) => ({\n  ...state,\n  ...action.payload,\n  isLoggedIn: true,\n});\n\nexport const loginFailed = (state, action) => {\n  return {\n    ...state,\n    ...action.payload,\n    isLoggedIn: false,\n    loginAttempts: state.loginAttempts + 1,\n    isLockedOut: state.loginAttempts + 1 >= 5,\n  };\n};\n\nexport const logout = () => initialState;\n\nexport const setIsResetting = (state, action) => ({\n  ...state,\n  isResetting: action.payload,\n});\n\nexport default handleActions(\n  {\n    [C.LOGIN_SUCCESS]: loginSuccess,\n    [C.LOGIN_FAILURE]: loginFailed,\n    [C.LOGOUT_DONE]: logout,\n    [C.SET_IS_RESETTING]: setIsResetting,\n    [C.INCREMENT_LOGIN_ATTEMPTS]: incrementLoginAttempts,\n    [C.RESET_LOGIN_ATTEMPTS]: resetLoginAttempts,\n    [C.ENFORCE_LOCKOUT]: enforceLockout,\n    [C.STILL_LOCKED_OUT]: stillLockedOut,\n  },\n  initialState\n);\n","import React from 'react';\nimport { put } from 'redux-saga/effects';\nimport { startSubmit, stopSubmit } from 'redux-form';\nimport { asyncActions, messagesActions } from 'state-template';\nimport * as actions from '../containers/Auth/actions';\nimport * as registrationActions from '../containers/Registration/actions';\nimport { call } from 'redux-saga/effects';\nimport decode from 'jwt-decode';\n\nexport const mapFields = ({ fields }) =>\n  Object.keys(fields).map((name) => {\n    const { component: C, ...fieldProps } = fields[name];\n\n    return <C key={name} name={name} {...fieldProps} />;\n  });\n\nexport function* submitAsyncForm(config) {\n  const {\n    formName,\n    callApi,\n    onSuccess,\n    errorMessage,\n    onResetError,\n    successMessage,\n    errorStatus = 400,\n  } = config;\n\n  let submissionError;\n  let response;\n\n  try {\n    yield put(asyncActions.increaseLoading());\n    yield put(startSubmit(formName));\n\n    // register success message into global messaging system\n    const response = yield callApi;\n\n    if (successMessage) {\n      yield put(\n        messagesActions.registerMessage({\n          id: `${formName}Success`,\n          children: successMessage,\n          variant: 'primary',\n        })\n      );\n    }\n    yield put(onSuccess(response));\n  } catch (error) {\n    if(error.errorMessage){\n    yield put(actions.loginFailed({ auth_error: error.errorMessage }));\n    yield put(registrationActions.resetPasswordDuplicateFailure({ auth_error: error.errorMessage }));\n    }\n    else {\n      yield put(actions.loginFailed({ auth_error: \"Invalid email or password.\" }));\n    }    \n  } finally {\n    yield put(asyncActions.decreaseLoading());\n    yield put(stopSubmit(formName, submissionError));\n  }\n}\n","// import { delay } from 'redux-saga';\nimport {\n  all, takeEvery, takeLatest, call, put, take, race, delay, select\n} from 'redux-saga/effects';\nimport { auth, api } from 'state-template';\nimport { submitAsyncForm } from '../../utils/formUtils';\nimport * as actions from './actions';\nimport * as C from './constants';\n\nconst MAX_LOGIN_ATTEMPTS = 5;\nconst LOCKOUT_TIME = 120*60*1000; //120 minutes\n\nexport function* login(action) {\n  const {API_URL}= window.config;\n  const url = `${API_URL}/api/Login/LoginJson`;\n  const lockoutExpires = localStorage.getItem('lockoutExpires');\n  const isLockedOut = lockoutExpires &&\n    Date.now() < parseInt(lockoutExpires, 10);\n  if(isLockedOut){\n    yield put(actions.stillLockedOut());\n    return;\n  }\n  const options = {\n    method: 'POST',\n    body: JSON.stringify(action.payload),\n  };\n  const tokenKey = 'opr_jwt';\n  const config = {\n    formName: 'LoginForm',\n    callApi: auth.authenticate({ url, options, tokenKey }),\n    onSuccess: actions.loginSuccess,\n    errorMessage: 'Invalid Email or Password.',\n    errorStatus: 401,\n  };\n\n  yield submitAsyncForm(config);\n}\n\nexport function* logout() {\n  auth.clearToken();\n  yield put(actions.logoutDone());\n}\n\n// try logging in, cancel if get a logout action\nexport function* loginFlow(action) {\n  yield race({\n    task: call(login, action),\n    cancel: take(C.LOGOUT),\n  });\n}\n\nexport function* handleLoginFailure(action){\n  const loginAttempts = yield select((state) => \n  state.auth.loginAttempts);\n  yield\n  put(actions.incrementLoginAttempts());\n\n  if(loginAttempts >= MAX_LOGIN_ATTEMPTS){\n    const lockoutExpires = Date.now() + LOCKOUT_TIME;\n    yield put(actions.enforceLockout());\n    localStorage.setItem('lockoutExpires', lockoutExpires.toString());\n  }\n}\n\nexport function* requestReset(action) {\n  const {API_URL}= window.config;\n  const url = `${API_URL}/api/Official/RequestResetJson`;\n  const options = {\n    method: 'POST',\n    body: JSON.stringify(action.payload),\n    headers: {\n      'Content-Type': 'application/json',\n    },\n  };\n\n  const config = {\n    formName: 'RequestResetForm',\n    callApi: call(api.request, url, options),\n    onSuccess: actions.requestResetSuccess,\n    errorMessage: 'Invalid Email.',\n    successMessage: 'Successfully Submitted! An email has been sent.',\n  };\n\n  yield submitAsyncForm(config);\n}\n\nexport default function* authSaga() {\n  yield all([\n    takeEvery(C.LOGIN_REQUEST, loginFlow),\n    takeLatest(C.LOGOUT, logout),\n    takeLatest(C.REQUEST_RESET_REQUEST, requestReset),\n    takeLatest(C.LOGIN_FAILURE, handleLoginFailure),\n  ]);\n}\n","import { handleActions } from 'redux-actions';\n\nimport * as C from './constants';\nimport * as C_AUTH from '../Auth/constants';\n\nexport const initialState = {\n  applicationList: [],\n  applicantList: [],\n  officialList: [],\n};\n\nexport const getApplicationListSuccess = (state, action) => ({\n  ...state,\n  applicationList: action.payload,\n});\n\nexport const getApplicantListSuccess = (state, action) => ({\n  ...state,\n  applicantList: action.payload,\n});\n\nexport const getOfficialListSuccess = (state, action) => ({\n  ...state,\n  officialList: action.payload,\n});\n\nexport const deleteOfficialSuccess = (state, action) => ({\n  ...state,\n  officialList: state.officialList.filter(x => x.id !== action.payload),\n});\n\nexport const logout = () => initialState;\n\nexport default handleActions({\n  [C.GET_APPLICATION_LIST_SUCCESS]: getApplicationListSuccess,\n  [C.GET_APPLICANT_LIST_SUCCESS]: getApplicantListSuccess,\n  [C.GET_OFFICIAL_LIST_SUCCESS]: getOfficialListSuccess,\n  [C.DELETE_OFFICIAL_SUCCESS]: deleteOfficialSuccess,\n  [C_AUTH.LOGOUT_DONE]: logout,\n}, initialState);\n","// import { delay } from 'redux-saga';\nimport {\n  all, takeEvery, call, put,\n} from 'redux-saga/effects';\nimport { api, withAsync, messagesActions } from 'state-template';\n\nimport { submitAsyncForm } from '../../utils/formUtils';\nimport * as actions from './actions';\nimport * as C from './constants';\n\nexport function* getApplicationList() {\n  const { API_URL } = window.config;\n  const url = `${API_URL}/api/Applications/ForOfficial`;\n  const data = yield call(api.requestWithToken, url);\n  yield put(actions.getApplicationListSuccess(data));\n}\n\nexport function* getApplicantList() {\n  const { API_URL } = window.config;\n  const url = `${API_URL}/api/Applicant`;\n  const data = yield call(api.requestWithToken, url);\n  yield put(actions.getApplicantListSuccess(data));\n}\n\n// based off role gets info of all officials or for only self\nexport function* getOfficialList() {\n  const { API_URL } = window.config;\n  const url = `${API_URL}/api/Official`;\n  const data = yield call(api.requestWithToken, url);\n  yield put(actions.getOfficialListSuccess(data));\n}\n\nexport function* updateOfficial(action) {\n  const { API_URL } = window.config;\n  const url = `${API_URL}/api/Official/updateJson`;\n  const options = {\n    method: 'POST',\n    body: JSON.stringify(action.payload),\n  };\n  console.log(\"from update: \", action.payload)\n  const data = yield call(api.requestWithToken, url, options);\n  // refresh official profile and applications after updated\n  yield put(actions.getOfficialListRequest());\n  yield put(actions.getApplicationListRequest());\n  yield put(actions.updateOfficialSuccess(data));\n  // register success message into global messaging system\n  yield put(messagesActions.registerMessage({\n    id: 'updateOfficialSuccess',\n    children: 'Successfully Updated!',\n    variant: 'primary',\n  }));\n}\n\nexport function* newOfficial(action) {\n  const { API_URL } = window.config;\n  const url = `${API_URL}/api/Official/addNewOfficialJson`;\n  const options = {\n    method: 'POST',\n    body: JSON.stringify(action.payload),\n  };\n\n  const config = {\n    formName: 'NewOfficialForm',\n    callApi: call(api.requestWithToken, url, options),\n    onSuccess: actions.newOfficialSuccess,\n    errorMessage: 'User Already Exists.',\n    successMessage: 'An email has been sent to this official.',\n  };\n\n  yield submitAsyncForm(config);\n}\n\nexport function* deleteOfficial(action) {\n  const { API_URL } = window.config;\n  const url = `${API_URL}/api/Official/${action.payload}`;\n  const options = {\n    method: 'DELETE',\n  };\n  yield call(api.requestWithToken, url, options);\n  yield put(actions.deleteOfficialSuccess(action.payload));\n  // register success message into global messaging system\n  yield put(messagesActions.registerMessage({\n    id: 'deleteOfficialSuccess',\n    children: 'Successfully Deleted!',\n    variant: 'primary',\n  }));\n}\n\nexport default function* dashboardSaga() {\n  yield all([\n    takeEvery(C.GET_APPLICATION_LIST_REQUEST, withAsync(getApplicationList)),\n    takeEvery(C.GET_APPLICANT_LIST_REQUEST, withAsync(getApplicantList)),\n    takeEvery(C.GET_OFFICIAL_LIST_REQUEST, withAsync(getOfficialList)),\n    takeEvery(C.UPDATE_OFFICIAL_REQUEST, withAsync(updateOfficial)),\n    takeEvery(C.NEW_OFFICIAL_REQUEST, newOfficial),\n    takeEvery(C.DELETE_OFFICIAL_REQUEST, withAsync(deleteOfficial)),\n  ]);\n}\n","import { handleActions } from \"redux-actions\";\n\nimport * as C from \"./constants\";\n\nexport const initialState = {\n  assistanceList: [],\n};\n\n// update assistance list, formatted as options for a select\nexport const getAssistanceListSuccess = (state, action) => {\n  const assistanceList = action.payload.map((x) => ({\n    value: x.programNumber,\n    label: `${x.programNumber} ${x.programTitle}`,\n  }));\n\n  return { ...state, assistanceList };\n};\n\nexport default handleActions(\n  {\n    [C.GET_ASSISTANCE_LIST_SUCCESS]: getAssistanceListSuccess,\n  },\n  initialState\n);\n","// TODO: ST\n\n/**\n * Formats data into a FormData object, mapping arrays to correct format\n * @param {object} values   - values from form to format\n */\nexport const buildFormData = (values) => {\n  const data = new FormData();\n  Object.keys(values).forEach((x) => {\n    const value = values[x];\n    if (Array.isArray(value)) {\n      // step through all values for arrays\n      value.forEach((i) => {\n        data.append(x, i);\n      });\n    } else if (value && value.name) {\n      // is a file\n      data.append(x, value, value.name);\n    } else {\n      data.append(x, value);\n    }\n  });\n  return data;\n};\n\n\n\n","import { all, takeEvery, call, put } from \"redux-saga/effects\";\nimport { api, withAsync } from \"state-template\";\n\nimport { buildFormData } from \"../../utils/api\";\nimport { submitAsyncForm } from \"../../utils/formUtils\";\nimport * as actions from \"./actions\";\nimport * as C from \"./constants\";\n\nexport function* getAssistanceList() {\n  const {API_URL}= window.config;\n  const url = `${API_URL}/api/AssistanceListing`;\n  const data = yield call(api.request, url);\n  yield put(actions.getAssistanceListSuccess(data));\n}\n\nexport function* submitForm(action) {\n  const {API_URL}= window.config;\n  const url = `${API_URL}/api/Applications`;\n  const { history, values } = action.payload;\n  const options = {\n    method: \"POST\",\n    body: buildFormData(values),\n    headers: {},\n  };\n\n  const config = {\n    formName: \"AssistanceForm\",\n    callApi: call(api.request, url, options),\n    onSuccess: actions.submitFormSuccess,\n    successMessage: \"Successfully Submitted!\",\n  };\n\n  try {\n    yield submitAsyncForm(config);\n    history.push(\"/submissions\");\n  } catch {\n    //stuff\n  }\n}\n\nexport default function* homeSaga() {\n  yield all([\n    takeEvery(C.SUBMIT_FORM_REQUEST, submitForm),\n    takeEvery(C.GET_ASSISTANCE_LIST_REQUEST, withAsync(getAssistanceList)),\n  ]);\n}\n","import { handleActions } from 'redux-actions';\n\nimport * as C from './constants';\nimport * as C_AUTH from '../Auth/constants';\n\nexport const initialState = {\n  token: {},\n  isRegistered: false,\n  isErr: false,\n  isConfirmed: false\n};\n\nexport const verifyTokenSuccess = (state, action) => ({\n  ...state,\n  token: action.payload,\n});\n\nexport const registerOfficialSuccess = state => ({\n  ...state,\n  isRegistered: true,\n});\n\nexport const registerOfficialFailure = state => ({\n  ...state,\n  isErr: true,\n});\n\n\nexport const confirmSuccess = state => ({\n  ...state,\n  isConfirmed: true,\n});\n\nexport const resetPasswordDuplicateFailure = state => ({\n  ...state,\n  isErr: true,\n});\n\nexport const logout = () => initialState;\n\nexport default handleActions({\n  [C.VERIFY_TOKEN_SUCCESS]: verifyTokenSuccess,\n  [C.REGISTER_OFFICIAL_SUCCESS]: registerOfficialSuccess,\n  [C.REGISTER_OFFICIAL_FAILURE]: registerOfficialFailure,\n  [C.CONFIRM_SUCCESS]: confirmSuccess,\n  [C.RESET_PASSWORD_DUPLICATE]: resetPasswordDuplicateFailure,\n  [C_AUTH.LOGOUT_DONE]: logout,\n}, initialState);\n","// import { delay } from 'redux-saga';\nimport {\n  all, takeEvery, call, put,\n} from 'redux-saga/effects';\nimport { api, withAsync } from 'state-template';\nimport { submitAsyncForm } from '../../utils/formUtils';\nimport * as actions from './actions';\nimport * as C from './constants';\n\nexport function* verfiyToken(action) {\n  const {API_URL}= window.config;\n  const url = `${API_URL}/api/Official/verifyTokenJson`;\n  const options = { method: 'POST', body: JSON.stringify(action.payload) };\n  const data = yield call(api.request, url, options);\n  yield put(actions.verifyTokenSuccess(data));\n}\n\nexport function* registerOfficial(action) {\n  const {API_URL}= window.config;\n  const url = `${API_URL}/api/Official/RegisterJson`;\n  const options = { method: 'POST', body: JSON.stringify(action.payload) };\n  let data;\n  try {\n      data = yield call(api.request, url, options);\n      \n      yield put(actions.registerOfficialSuccess(data));\n  }\n  catch(error) {\n    yield put(actions.registerOfficialFailure(error));\n  }  \n}\n\nexport function* resetPassword(action) {\n  const {API_URL}= window.config;\n  const url = `${API_URL}/api/Official/ResetPasswordJson`;\n  const options = {\n    method: 'POST',\n    body: JSON.stringify(action.payload),\n  };\n\n  const config = {\n    formName: 'ResetPasswordForm',\n    callApi: call(api.request, url, options),\n    onSuccess: actions.resetPasswordSuccess,\n    successMessage: 'Successfully Updated Password!',\n    onResetError: actions.resetPasswordDuplicateFailure,\n  };\n  \n  yield submitAsyncForm(config);\n}\n\nexport function* confirm(action) {\n  const {API_URL}= window.config;\n  const url = `${API_URL}/api/Login/ConfirmAccount`;\n  const options = { method: 'POST', body: JSON.stringify(action.payload) };\n  const data = yield call(api.request, url, options);\n  yield put(actions.confirmSuccess(data));\n}\n\nexport default function* dashboardSaga() {\n  yield all([\n    takeEvery(C.VERIFY_TOKEN_REQUEST, withAsync(verfiyToken)),\n    takeEvery(C.REGISTER_OFFICIAL_REQUEST, withAsync(registerOfficial)),\n    takeEvery(C.RESET_PASSWORD_REQUEST, resetPassword),\n    takeEvery(C.CONFIRM_REQUEST, confirm),\n  ]);\n}\n","import { handleActions } from 'redux-actions';\n\nimport * as C from './constants';\n\nexport const initialState = {\n  submissionList: [],\n  filters: {},\n  search: {},\n};\n\nexport const updateSearch = (state, action) => ({\n  ...state,\n  search: action.payload,\n});\n\nexport const getSubmissionsSuccess = (state, action) => ({\n  ...state,\n  submissionList: action.payload,\n});\n\nexport const updateFilters = (state, action) => ({\n  ...state,\n  filters: action.payload,\n});\n\nexport default handleActions({\n  [C.UPDATE_SEARCH]: updateSearch,\n  [C.GET_SUBMISSION_LIST_SUCCESS]: getSubmissionsSuccess,\n  [C.UPDATE_FILTERS]: updateFilters,\n}, initialState);\n","import {\n  all, takeEvery, call, put,\n} from 'redux-saga/effects';\nimport { api, withAsync } from 'state-template';\n\nimport * as actions from './actions';\nimport * as C from './constants';\n\nexport function* getSubmissionList() {\n  const {API_URL}= window.config;\n  const url = `${API_URL}/api/Applications`;\n  const data = yield call(api.request, url);\n  yield put(actions.getSubmissionListSuccess(data));\n}\n\nexport default function* submissionsSaga() {\n  yield all([\n    takeEvery(C.GET_SUBMISSION_LIST_REQUEST, withAsync(getSubmissionList)),\n  ]);\n}\n","export const GET_REGISTRANT_LIST_REQUEST = 'Registrants/GET_REGISTRANT_LIST_REQUEST';\nexport const GET_REGISTRANT_LIST_SUCCESS = 'Registrants/GET_REGISTRANT_LIST_SUCCESS';\nexport const GET_REGISTRANT_LIST_FAILURE = 'Registrants/GET_REGISTRANT_LIST_FAILURE';\n","import { handleActions } from 'redux-actions';\n\nimport * as C from './constants';\n\nexport const initialState = {\n  registrantList: [],\n};\n\nexport const getRegistrantsSuccess = (state, action) => ({\n  ...state,\n  registrantList: action.payload,\n});\n\nexport default handleActions({\n  [C.GET_REGISTRANT_LIST_SUCCESS]: getRegistrantsSuccess,\n}, initialState);\n","import { createAction } from 'redux-actions';\n\nimport * as C from './constants';\n\nexport const getRegistrantListRequest = createAction(C.GET_REGISTRANT_LIST_REQUEST);\nexport const getRegistrantListSuccess = createAction(C.GET_REGISTRANT_LIST_SUCCESS);\n","import {\n  all, takeEvery, call, put,\n} from 'redux-saga/effects';\nimport { api, withAsync } from 'state-template';\n\nimport * as actions from './actions';\nimport * as C from './constants';\n\nexport function* getRegistrantList() {\n  const {API_URL}= window.config;\n  const url = `${API_URL}/api/Official`;\n  const data = yield call(api.request, url);\n  yield put(actions.getRegistrantListSuccess(data));\n}\n\nexport default function* registrantsSaga() {\n  yield all([\n    takeEvery(C.GET_REGISTRANT_LIST_REQUEST, withAsync(getRegistrantList)),\n  ]);\n}\n","import 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\nimport 'url-search-params-polyfill';\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { GoogleReCaptchaProvider } from 'react-google-recaptcha-v3';\nimport { configureStore, ConnectedMessages } from 'state-template';\n\nimport 'state-template/dist/style/core/css/cagov.core.min.css';\nimport 'state-template/dist/style/core/css/colorscheme-oceanside.css';\nimport './style/style.scss';\nimport './style/overrides.scss';\n\nimport App from './containers/App';\nimport authReducer from './containers/Auth/reducer';\nimport authSaga from './containers/Auth/saga';\nimport dashboardReducer from './containers/Dashboard/reducer';\nimport dashboardSaga from './containers/Dashboard/saga';\nimport homeReducer from './containers/Home/reducer';\nimport homeSaga from './containers/Home/saga';\nimport registrationReducer from './containers/Registration/reducer';\nimport registrationSaga from './containers/Registration/saga';\nimport submissionsReducer from './containers/Submissions/reducer';\nimport submissionsSaga from './containers/Submissions/saga';\nimport registrantsReducer from './containers/Registrants/reducer';\nimport registrantsSaga from './containers/Registrants/saga';\n\nconst reducers = {\n  auth: authReducer,\n  dashboard: dashboardReducer,\n  home: homeReducer,\n  registration: registrationReducer,\n  submissions: submissionsReducer,\n  registrants: registrantsReducer,\n};\n\nconst sagas = [\n  authSaga,\n  dashboardSaga,\n  homeSaga,\n  registrationSaga,\n  submissionsSaga,\n  registrantsSaga,\n];\n\nconst store = configureStore({ reducers, sagas });\n\n\nReactDOM.render(\n  <Provider store={store}>\n    <GoogleReCaptchaProvider\n      reCaptchaKey={'6Lc6KcgbAAAAALR13LHWzbWuSFEG6YMzYm4BAus6'}\n    >\n      <App />\n    </GoogleReCaptchaProvider>\n    <ConnectedMessages />\n  </Provider>,\n  document.getElementById('root'),\n);\n"],"sourceRoot":""}