{"version":3,"sources":["CCLogo_Black.jpg","exit.png","images/clerkmap.png","images/SocialMediaFlyer.jpg","green check mark.jfif","Components/MobileHeader.jsx","Components/KioskOutcome.jsx","Components/FormValidator.js","Services/summonsAPI.js","Services/globals.js","Pages/ErrorMessage.jsx","Components/InputValidator.js","Components/ConfirmationBox.jsx","Components/IntegerAnswer.jsx","Components/PhoneNumberAnswer.jsx","Components/TextEntryAnswer.jsx","Components/YesNoAnswer.jsx","Components/CheckboxAnswer.jsx","Components/ChoiceAnswer.jsx","Components/TextOnlyAnswer.jsx","Components/PicklistAnswer.jsx","Components/Question.jsx","Components/ScreenNav.jsx","Pages/Questionnaire.jsx","Components/JurorBarcode.jsx","Components/Attendance.jsx","Pages/BarcodeAttendance.jsx","Pages/Review.jsx","Pages/DefermentMessage.jsx","notifications/jsNotification.js","notifications/Notifications.jsx","Pages/CheckIn.jsx","Pages/DeniedDeferment.jsx","Pages/MobileLogin.jsx","App.jsx","index.jsx"],"names":["module","exports","MobileHeader","title","this","props","jurorName","className","to","alt","src","logo","Dropdown","Button","variant","logOut","Toggle","split","id","Exit","Menu","Item","as","onClick","jurorReportingDateTime","moment","format","React","Component","KioskOutcome","idled","jurorStatus","useState","countDown","setCountDown","doReturn","window","location","replace","useEffect","message","thanks","messages","questionnaireIncomplete","href","questionnaireComplete","possibleDeferment","deferred","showClerkMap","some","value","setTimeout","style","paddingLeft","type","ClerkMap","FormValidator","validations","state","validation","valid","forEach","rule","field","isInvalid","validateField","fieldValue","toString","compareRequireField","compareRequireFieldValue","compareRequireMethod","validator","compareRequireWhen","args","validationMethod","method","validWhen","isValid","map","api","require","baseurl","process","defaultHeaders","get","url","a","fetch","headers","post","body","parms","undefined","JSON","stringify","jurorDOB","jurorID","jurorDL","reportingDate","Headers","poolID","qryObj","qryStr","Object","keys","k","join","apiService","getSummonsRecipientLogin","getQuestionnaire","postQuestionnaire","postQuestionnaireEnd","postJurorStatus","getAttendance","postJurorSignature","getAffidavitLink","getJuryPool","globals","juror","roles","sources","majors","recommendations","schools","ErrorMessage","InputValidator","str","len","allowChars","length","re","filter","c","match","ConfirmationBox","timeoutHandle","submitAble","signature","setState","canSubmitAfter","clearTimeout","padding","m","cancel","cancelText","autoComplete","name","onChange","e","target","disabled","submit","submitText","IntegerAnswer","q","question","questionID","ret","key","TextField","error","helperText","responseHandler","response","responseText","answerSuffix","push","formatPhoneNumber","input","substring","PhoneNumberAnswer","InputLabel","inputLabel","TextEntryAnswer","onBlur","InputProps","YesNoAnswer","setValue","handleClick","event","toVal","FormControl","classes","root","component","RadioGroup","questionGroup","alias","display","flexDirection","FormControlLabel","control","Radio","color","label","FormHelperText","CheckboxAnswer","checked","setChecked","Checkbox","ch","ChoiceAnswer","questionnaireAnswerID","FormLabel","aria-label","answers","v","aid","minWidth","TextOnlyAnswer","line","PicklistAnswer","options","selected","o","initialValue","selectedOption","setSelectedOption","Select","width","val","MenuItem","option","theme","createMuiTheme","overrides","MuiFormLabel","MuiFormHelperText","Mui","MuiInputBase","MuiInput","MuiTypography","body1","PrivateSwitchBase","Question","components","Integer","Number","PhoneNumber","TextEntry","YesNo","Choice","TextOnly","Picklist","AnswerTagName","answerType","answerTypeAlias","ThemeProvider","paddingBottom","invalid","validateFunction","errorText","questionnaire","ScreenNav","mouseBack","previous","onMouseDown","previousAble","mouseNext","nextAble","next","Questionnaire","printState","console","log","dataLoaded","questions","apiError","errorMessage","screenIdx","screens","screenByQuestionId","assertedOutcome","debouncePost","errorTexts","disables","inputUpdateQuestionResponse","bind","validateWholeScreen","validateInput","inputNext","inputCancelQuestionnaire","inputSubmitQuestionnaire","catch","err","msgs","AbortError","Unknown","Response","json","data","makeScreens","questionId","respondedHow","resp","idx","parseInt","answer","b","jurorId","postResult","immediate","actuallyPost","groups","group","lastGroupId","groupId","questionGroupID","grp","gidx","qid","doDefer","valids","getResponse","defermentValue","defermentCodeID","questionValidations","validationRule","parentQuestionID","parentValueTest","childRequiresResponse","parentResp","getQuestionById","test","x","perValidation","values","every","arr","delta","Math","min","max","saveProgress","where","whereToNext","onLastScreen","outcome","changeScreen","saveSignature","deferment","dataReview","errs","errorFound","questionValidation","childResp","res","childDisallowedResponse","childMatchRegEx","childNoMatchRegEx","validationApplicable","quest","qnaire","haystackStr","needleStr","mat","RegExp","perValidationError","errorsCopy","disablesCopy","customValidate","questionAlias","parentQuestionAlias","parentQuestion","getQuestionByAlias","parentResponse","numChildren","isNaN","ages","ageIdx","age","howLong","page","etc","showErrorPage","opacity","BarcodeGenerator","padStart","columns","selector","sortable","row","checkInDateTime","right","Attendance","actualData","warn","noHeader","striped","noDataComponent","BarcodeAttendance","isSpecial","Check","controls","kind","SocialMedia","Review","affidavitLink","rel","Deferment","JSNotification","DivStatus","BtnToggleSubscribed","DivSubscription","element","elem","document","getElementById","divStatus","divSubscription","btnToggleSubscribed","Registration","Subscription","PublicKey","vapidPublicKey","logMessage","div","innerHTML","logState","item","stateStatus","stateName","logSupported","supported","setSubscription","update","postPushSubscription","requestOptions","subscription","then","urlB64ToUint8Array","base64String","base64","repeat","rawData","atob","outputArray","Uint8Array","i","charCodeAt","subscribeUser","result","pushManager","subscribe","userVisibleOnly","applicationServerKey","finally","registerServiceWorker","registered","navigator","serviceWorker","register","swReg","Worker","installing","waiting","active","checkSubscription","getSubscription","checkPushNotficationsSupported","serviceWorkerSupported","pushManagerSupported","textContent","onclick","unsubscribe","init","Notifications","visible","margin","fontWeight","CheckIn","text","kioskMode","DeniedDeferment","goQuestionnaire","search","idledOut","isEmpty","obj","hasOwnProperty","componentDidMount","datePicker","setAttribute","getJurorInfo","currentPoolID","specialData","specialTrial","status","jurorStatusAlias","generalError","connectAPI","authenticateFlag","statusAlias","deferReasonCode","updateJuror","possibleDefermentCodeID","setStateAsync","mySubmitHandler","preventDefault","validate","submitted","myChangeHandler","nam","myDOBChangeHandler","date","baseState","enabled","firstName","lastName","reportingDateTime","skipLoginMessage","deniedDefermentCode","onSubmit","FormGroup","controlId","bsSize","ref","dateFormat","placeholderText","column","sm","maxLength","placeholder","block","App","ReactGA","initialize","pageview","pathname","doNothing","useIdleTimer","timeout","onIdle","onActive","onAction","debounce","getRemainingTime","getLastActiveTime","exact","path","MobileLogin","config","ReactDOM","render"],"mappings":"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","file":"static/js/main.3ed9e3c9.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/CCLogo_Black.6d0e757c.jpg\";","module.exports = __webpack_public_path__ + \"static/media/exit.b2e867f6.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/SocialMediaFlyer.62da89db.jpg\";","module.exports = __webpack_public_path__ + \"static/media/green check mark.1ab3c59e.jfif\";","import React from 'react';\r\nimport '../App.css';\r\nimport { Link } from 'react-router-dom';\r\nimport moment from 'moment';\r\nimport { Dropdown, Button } from 'react-bootstrap';\r\nimport Exit from '../exit.png';\r\nimport logo from '../CCLogo_Black.jpg';\r\n\r\nexport default class MobileHeader extends React.Component {\r\n render() {\r\n const title = this.props.jurorName ? `Welcome, ${this.props.jurorName}` : 'Welcome';\r\n\r\n return (\r\n
\r\n \r\n \"County\r\n \r\n\r\n
\r\n \r\n \r\n {this.props.logOut\r\n ? [\r\n \r\n \"Sign\r\n ,\r\n \r\n \r\n Sign Off\r\n \r\n \r\n ]\r\n : ''}\r\n \r\n\r\n \r\n {this.props.jurorReportingDateTime\r\n ? [\r\n 'Jury Reporting Date: ',\r\n
,\r\n `${moment(this.props.jurorReportingDateTime).format('L')} ${moment(this.props.jurorReportingDateTime).format(\r\n 'h:mm a'\r\n )}`\r\n ]\r\n : ''}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport logo from '../CCLogo_Black.jpg';\r\nimport ClerkMap from '../images/clerkmap.png';\r\n\r\nexport default function KioskOutcome({ idled, jurorStatus }) {\r\n const [countDown, setCountDown] = React.useState(15);\r\n\r\n const doReturn = () => {\r\n window.location.replace('/startup.htm');\r\n };\r\n\r\n React.useEffect(() => {\r\n if (countDown < 1) doReturn();\r\n }, [countDown]);\r\n\r\n const thanks =

Thank you for completing your questionnaire.

;\r\n\r\n const messages = {\r\n questionnaireIncomplete: [\r\n

Your questionnaire is incomplete!

,\r\n

\r\n Please sign in to complete your questionnaire.\r\n

\r\n ],\r\n questionnaireComplete: [thanks,

Please return to the window and let the jury clerk know that you have completed your questionnaire.

],\r\n possibleDeferment: [thanks,

Please return to the window and let the jury clerk know that you have requested a deferment.

],\r\n deferred: [\r\n thanks,\r\n

\r\n Your request for a deferment has been granted.
Please see the jury clerk if you have any questions.\r\n

\r\n ]\r\n };\r\n\r\n let message;\r\n if (idled) message =

You have been signed out due to inactivity.

;\r\n else message = messages[jurorStatus] ||

Please see the jury clerk at the window.

;\r\n\r\n const showClerkMap = ['questionnaireComplete', 'possibleDeferment', 'deferred'].some((value) => value === jurorStatus);\r\n\r\n setTimeout(() => {\r\n setCountDown(countDown - 1);\r\n }, 999);\r\n\r\n return [\r\n
\r\n
\r\n
\r\n \"County\r\n
\r\n

\r\n

\r\n

Jury Questionnaire

\r\n
{message}
\r\n
\r\n \r\n
\r\n {showClerkMap && (\r\n
\r\n \"Clerk\r\n
\r\n )}\r\n

{countDown ? `Exiting in ${countDown} second${countDown === 1 ? '' : 's'}...` : null}

\r\n
\r\n
\r\n
\r\n ];\r\n}\r\n","import validator from 'validator';\r\n\r\nclass FormValidator {\r\n constructor(validations) {\r\n // validations is an array of validation rules specific to a form\r\n this.validations = validations;\r\n }\r\n\r\n validate(state) {\r\n // start out assuming valid\r\n const validation = this.valid();\r\n\r\n // for each validation rule\r\n this.validations.forEach((rule) => {\r\n // if the field hasn't already been marked invalid by an earlier rule\r\n if (!validation[rule.field].isInvalid) {\r\n // default to validate field\r\n let validateField = true;\r\n\r\n // determine the field value, the method to invoke and optional args from\r\n // the rule definition\r\n const fieldValue = state[rule.field].toString();\r\n\r\n // check for compare require field\r\n const { compareRequireField } = rule;\r\n\r\n // if there is require field condition, verfiy if the current field need to validate or not\r\n if (compareRequireField) {\r\n const compareRequireFieldValue = state[rule.compareRequireField].toString();\r\n const validationCompareRequireMethod =\r\n typeof rule.compareRequireMethod === 'string' ? validator[rule.compareRequireMethod] : rule.compareRequireMethod;\r\n\r\n if (validationCompareRequireMethod(compareRequireFieldValue, state) !== rule.compareRequireWhen) {\r\n validateField = false;\r\n }\r\n }\r\n\r\n const args = rule.args || [];\r\n const validationMethod = typeof rule.method === 'string' ? validator[rule.method] : rule.method;\r\n\r\n // call the validation_method with the current field value as the first\r\n // argument, any additional arguments, and the whole state as a final\r\n // argument. If the result doesn't match the rule.validWhen property,\r\n // then modify the validation object for the field and set the isValid\r\n // field to false\r\n if (validateField) {\r\n if (validationMethod(fieldValue, ...args, state) !== rule.validWhen) {\r\n validation[rule.field] = { isInvalid: true, message: rule.message };\r\n validation.isValid = false;\r\n }\r\n }\r\n }\r\n });\r\n\r\n return validation;\r\n }\r\n\r\n valid() {\r\n const validation = {};\r\n\r\n this.validations.map((rule) => {\r\n validation[rule.field] = { isInvalid: false, message: '' };\r\n return validation[rule.field];\r\n });\r\n\r\n return { isValid: true, ...validation };\r\n }\r\n}\r\n\r\nexport default FormValidator;\r\n","const api = require('./creds.json');\r\n\r\n// Retrieve API URL from .env\r\nif (process.env.REACT_APP_API_URL) {\r\n api.baseurl = process.env.REACT_APP_API_URL;\r\n}\r\n\r\nconst defaultHeaders = {};\r\n\r\nasync function get(url) {\r\n return fetch(url, {\r\n method: 'GET',\r\n headers: defaultHeaders\r\n });\r\n}\r\n\r\nasync function post(url, body, headers) {\r\n const parms = { method: 'POST', headers: headers };\r\n if (body !== undefined) parms.body = JSON.stringify(body);\r\n return fetch(url, parms);\r\n}\r\n\r\n// eslint-disable-next-line no-unused-vars\r\nasync function put(url, body) {\r\n return fetch(url, {\r\n method: 'PUT',\r\n headers: defaultHeaders,\r\n body: JSON.stringify(body)\r\n });\r\n}\r\n\r\n// eslint-disable-next-line no-unused-vars\r\nasync function doDelete(url, body) {\r\n return fetch(url, {\r\n method: 'DELETE',\r\n headers: defaultHeaders,\r\n body: JSON.stringify(body)\r\n });\r\n}\r\n\r\nasync function getSummonsRecipientLogin(jurorDOB, jurorID, jurorDL) {\r\n return get(`${api.baseurl}mobile/getSummonsRecipientLogin?dateOfBirth=${jurorDOB}&jurorId=${jurorID}&driverLicenseNumber=${jurorDL}`);\r\n}\r\n\r\nasync function getQuestionnaire(jurorID) {\r\n return get(`${api.baseurl}questionnaireManagement/getQuestionnaire?jurorId=${jurorID}`);\r\n}\r\n\r\nasync function getAttendance(jurorID, reportingDate) {\r\n return get(`${api.baseurl}jurorManagement/getAttendance?jurorId=${jurorID}&reportingDate=${reportingDate}`);\r\n}\r\n\r\nasync function postQuestionnaire(body) {\r\n return post(`${api.baseurl}questionnaireManagement/postQuestionnaire`, body, new Headers({ 'Content-Type': 'application/json' }));\r\n}\r\n\r\nasync function postJurorStatus(body) {\r\n return post(`${api.baseurl}jurorManagement/postJurorStatus`, body, new Headers({ 'Content-Type': 'application/json' }));\r\n}\r\n\r\nasync function postQuestionnaireEnd(body) {\r\n return post(`${api.baseurl}questionnaireManagement/postQuestionnaireEnd`, body, new Headers({ 'Content-Type': 'application/json' }));\r\n}\r\nasync function getAffidavitLink() {\r\n return get(`${api.baseurl}AppConfig/getAffidavitLink`);\r\n}\r\n\r\nasync function getJuryPool(poolID) {\r\n return get(`${api.baseurl}PoolManagement/GetJuryPool?JuryPoolID=${poolID}`)\r\n}\r\n\r\nasync function postJurorSignature(qryObj) {\r\n const qryStr =\r\n typeof qryObj === 'object' &&\r\n Object.keys(qryObj)\r\n .map((k) => `${k}=${qryObj[k]}`)\r\n .join('&');\r\n return post(\r\n `${api.baseurl}JurorManagement/PostJurorSignature${qryStr ? '?' : ''}${qryStr}`,\r\n undefined,\r\n new Headers({ 'Content-Type': 'application/json' })\r\n );\r\n}\r\n\r\n// eslint-disable-next-line import/prefer-default-export\r\nexport const apiService = {\r\n getSummonsRecipientLogin,\r\n getQuestionnaire,\r\n postQuestionnaire,\r\n postQuestionnaireEnd,\r\n postJurorStatus,\r\n getAttendance,\r\n postJurorSignature,\r\n getAffidavitLink,\r\n getJuryPool\r\n};\r\n","// eslint-disable-next-line import/prefer-default-export\r\nexport const globals = {\r\n juror: [],\r\n roles: [],\r\n sources: [],\r\n majors: [],\r\n recommendations: [],\r\n schools: []\r\n};\r\n","// linted by Ricky Kim\r\n\r\nimport React from 'react';\r\nimport '../App.css';\r\nimport { Link } from 'react-router-dom';\r\nimport MobileHeader from '../Components/MobileHeader';\r\n\r\nexport default class ErrorMessage extends React.Component {\r\n render() {\r\n return (\r\n
\r\n \r\n\r\n
\r\n Oops! Something went wrong. Please try again at another time.\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","export default class InputValidator {\r\n static allowChars = (str, re) =>\r\n str\r\n .split('')\r\n .filter((c) => c.match(re))\r\n .join('');\r\n\r\n static isValidZipCode(str) {\r\n const len = this.allowChars(str, /\\d/).length;\r\n return len === 5 || len === 9;\r\n }\r\n\r\n static isValidPhoneNumber(str) {\r\n const len = this.allowChars(str, /\\d/).length;\r\n return len === 3 + 7;\r\n }\r\n}\r\n","import React from 'react';\r\nimport InputValidator from './InputValidator';\r\n\r\n// Show a confirmation message for a few seconds before user can actually accept it,\r\n// so that they can read the message and understand the weight\r\n// of their decision before tapping a button just because it appeared.\r\n\r\n// 2020-09-10 - Add a text field to capture user's signature.\r\n\r\nexport default class ConfirmationBox extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n timeoutHandle: 0,\r\n submitAble: false,\r\n signature: ''\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({\r\n submitAble: false,\r\n timeoutHandle: setTimeout(() => {\r\n this.setState({ submitAble: true });\r\n }, this.props.canSubmitAfter || 555)\r\n });\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.state.timeoutHandle) clearTimeout(this.state.timeoutHandle);\r\n }\r\n\r\n render() {\r\n const message = typeof this.props.message === 'string' ? [this.props.message] : this.props.message;\r\n return (\r\n
\r\n {message.map((m) => (m ?

{m}

: null))}\r\n
\r\n \r\n
\r\n
\r\n

By inputting a signature below you agree that this signature is the legal equivalent of your manual signature.

\r\n {\r\n this.setState({ signature: InputValidator.allowChars(e.target.value, /[a-z\\-.' ]/i) });\r\n }}\r\n />\r\n
\r\n
\r\n {\r\n // intent: prevent multiple button clicks\r\n this.setState({ submitAble: false });\r\n this.props.submit(this.state.signature);\r\n }}\r\n >\r\n {this.props.submitText}\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport InputValidator from './InputValidator';\r\n\r\nconst IntegerAnswer = (props) => {\r\n const q = props.question;\r\n const id = q.questionID;\r\n const ret = [\r\n

{q.question}

,\r\n {\r\n props.responseHandler(id, InputValidator.allowChars(e.target.value, /\\d/), e);\r\n props.validateField();\r\n }}\r\n value={q.response.responseText || ''}\r\n />\r\n ];\r\n if (q.answerSuffix) ret.push(

{q.answerSuffix}

);\r\n return ret;\r\n};\r\n\r\nexport default IntegerAnswer;\r\n","import React from 'react'\r\nimport TextField from '@material-ui/core/TextField';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport InputValidator from './InputValidator'\r\n\r\nfunction formatPhoneNumber(input) {\r\n const response = InputValidator.allowChars(input, /[0-9]/i)\r\n if (response.length === 0) {\r\n return \"\"\r\n } if (response.length < 3) {\r\n return `(${response}`;\r\n } else if (response.length === 3) {\r\n return `(${response}`;\r\n } else if (response.length < 6) {\r\n return `(${response.substring(0, 3)})${response.substring(3, 6)}`;\r\n } else if (response.length === 6) {\r\n return `(${response.substring(0, 3)})${response.substring(3, 6)}`;\r\n } else {\r\n return `(${response.substring(0, 3)})${response.substring(3, 6)}-${response.substring(6, 10)}`;\r\n }\r\n}\r\n\r\nconst PhoneNumberAnswer = (props) => {\r\n const q = props.question;\r\n const id = q.questionID;\r\n return (
\r\n {q.question}

\r\n {props.inputLabel}\r\n {\r\n props.validateField();\r\n const response = formatPhoneNumber(e.target.value);\r\n props.responseHandler(\r\n id\r\n , InputValidator.allowChars(response, /[0-9]/i)\r\n , e\r\n )\r\n props.validateField();\r\n }}\r\n value={formatPhoneNumber(q.response.responseText || '')}\r\n />\r\n
);\r\n}\r\n\r\nexport default PhoneNumberAnswer\r\n","import React from 'react';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\n\r\nconst TextEntryAnswer = (props) => {\r\n const q = props.question;\r\n const id = q.questionID;\r\n return (\r\n
\r\n

{q.question}

\r\n {props.inputLabel}\r\n {\r\n props.responseHandler(id, e.target.value, e);\r\n }}\r\n onBlur={() => {\r\n props.validateField();\r\n }}\r\n InputProps={{\r\n className: 'questionnaire-body'\r\n }}\r\n helperText={props.helperText}\r\n value={q.response.responseText || ''}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport default TextEntryAnswer;\r\n","import React from 'react';\r\nimport Radio from '@material-ui/core/Radio';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\nexport default function YesNoAnswer({ question, responseHandler, error, helperText, disabled, validateField }) {\r\n const q = question;\r\n const id = question.questionID;\r\n\r\n const [value, setValue] = React.useState(q.response.responseText === null ? '' : q.response.responseText);\r\n\r\n function handleClick(event) {\r\n let toVal;\r\n /*\r\n To support certain validations,\r\n this is three-state control that supports deselection:\r\n Yes (1)\r\n No (0)\r\n Unanswered (null)\r\n */\r\n if (event.target.value === value) {\r\n setValue((toVal = ''));\r\n } else {\r\n setValue((toVal = event.target.value));\r\n }\r\n responseHandler(id, toVal && toVal.length ? toVal : null, event);\r\n validateField();\r\n }\r\n\r\n return (\r\n
\r\n \r\n {question.question}\r\n \r\n }\r\n label=\"Yes\"\r\n style={{ display: 'flex' }}\r\n />\r\n }\r\n label=\"No\"\r\n style={{ display: 'flex' }}\r\n // classes={{ root: classes.radio, checked: classes.checked }}\r\n />\r\n \r\n \r\n {helperText}\r\n \r\n \r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport FormGroup from '@material-ui/core/FormGroup';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\n\r\nexport default function CheckboxAnswer({ question, responseHandler, validateField, disabled, error }) {\r\n const q = question;\r\n const id = question.questionID;\r\n\r\n const [checked, setChecked] = React.useState(q.response.responseText === '1');\r\n\r\n function handleChange(event) {\r\n const ch = event.target.checked;\r\n setChecked(ch);\r\n responseHandler(id, ch ? '1' : null, event);\r\n validateField();\r\n }\r\n\r\n return (\r\n \r\n \r\n }\r\n label={q.question}\r\n />\r\n \r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport Radio from '@material-ui/core/Radio';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport FormLabel from '@material-ui/core/FormLabel';\r\n\r\nexport default function ChoiceAnswer({ question, responseHandler, validateField, error }) {\r\n const q = question;\r\n const id = question.questionID;\r\n\r\n const [value, setValue] = React.useState(q.response.questionnaireAnswerID === null ? '' : `${q.response.questionnaireAnswerID}`);\r\n\r\n function handleClick(event) {\r\n let toVal;\r\n /*\r\n To support certain validations,\r\n this is three-state control that supports deselection:\r\n Yes (1)\r\n No (0)\r\n Unanswered (null)\r\n */\r\n if (event.target.value === value) {\r\n setValue((toVal = ''));\r\n } else {\r\n setValue((toVal = event.target.value));\r\n }\r\n responseHandler(id, toVal.length ? toVal : null, event);\r\n validateField();\r\n }\r\n\r\n return (\r\n
\r\n \r\n {question.question}\r\n \r\n {q.answers.map((v) => {\r\n const aid = v.questionnaireAnswerID;\r\n return (\r\n }\r\n label={v.label}\r\n style={{ display: 'flex', minWidth: '6em' }}\r\n />\r\n );\r\n })}\r\n \r\n \r\n
\r\n );\r\n}\r\n","import React from 'react';\r\n\r\nconst TextOnlyAnswer = (props) =>\r\n props.question.question\r\n .split('\\\\n')\r\n .map((line) =>

{line}

);\r\nexport default TextOnlyAnswer;\r\n","import React, { useState } from 'react';\r\nimport Select from '@material-ui/core/Select';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\n/*\r\nhttps://stackoverflow.com/questions/28868071/onchange-event-using-react-js-for-drop-down\r\n*/\r\n\r\nconst PicklistAnswer = ({ question, disabled, responseHandler, inputLabel, error, validateField }) => {\r\n const id = question.questionID;\r\n const options = question.answers.map((v) => {\r\n const aid = v.questionnaireAnswerID;\r\n return {\r\n key: `a${id}_${aid}`,\r\n value: aid,\r\n label: v.label,\r\n selected: aid === question.response.questionnaireAnswerID\r\n };\r\n });\r\n const selected = options.filter((o) => o.selected);\r\n const initialValue = selected.length ? selected[0].value : '';\r\n\r\n const [selectedOption, setSelectedOption] = useState(initialValue);\r\n return (\r\n
\r\n

{question.question}

\r\n \r\n {inputLabel}\r\n {\r\n const val = e.target.value;\r\n setSelectedOption(val);\r\n responseHandler(id, val, e);\r\n validateField();\r\n }}\r\n >\r\n \r\n Select an option:\r\n \r\n {options.map((option) => (\r\n \r\n {option.label}\r\n \r\n ))}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default PicklistAnswer;\r\n","// linted 2020-08-17\r\n\r\nimport React from 'react';\r\nimport { createMuiTheme, ThemeProvider } from '@material-ui/core';\r\nimport IntegerAnswer from './IntegerAnswer';\r\nimport PhoneNumberAnswer from './PhoneNumberAnswer';\r\nimport TextEntryAnswer from './TextEntryAnswer';\r\nimport YesNoAnswer from './YesNoAnswer';\r\nimport CheckboxAnswer from './CheckboxAnswer';\r\nimport ChoiceAnswer from './ChoiceAnswer';\r\nimport TextOnlyAnswer from './TextOnlyAnswer';\r\nimport PicklistAnswer from './PicklistAnswer';\r\n\r\n// All styling that must be in a javascript file is here\r\n// This allows us to override higher-priority MUI CSS\r\n\r\nconst theme = createMuiTheme({\r\n overrides: {\r\n MuiFormLabel: {\r\n root: {\r\n 'font-size': '16px',\r\n color: 'black',\r\n '&$focused': {\r\n color: 'black'\r\n }\r\n }\r\n },\r\n MuiFormHelperText: {\r\n root: {\r\n 'font-size': '12px'\r\n },\r\n '&$error': {\r\n 'font-size': '16px'\r\n }\r\n },\r\n Mui: {\r\n '&$error': {\r\n 'font-size': '16px'\r\n }\r\n },\r\n MuiInputBase: {\r\n root: {\r\n 'font-size': '12px'\r\n }\r\n },\r\n MuiInput: {\r\n input: {\r\n 'font-size': '16px'\r\n }\r\n },\r\n MuiTypography: {\r\n body1: { 'font-size': '16px' }\r\n },\r\n PrivateSwitchBase: {\r\n // Name of the component / style sheet\r\n input: {\r\n // Name of the rule\r\n color: 'black',\r\n '&$focused': {\r\n // increase the specificity for the pseudo class\r\n color: 'black'\r\n }\r\n }\r\n }\r\n }\r\n});\r\n\r\nexport default class Question extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.components = {\r\n Integer: IntegerAnswer,\r\n Number: IntegerAnswer,\r\n PhoneNumber: PhoneNumberAnswer,\r\n TextEntry: TextEntryAnswer,\r\n YesNo: YesNoAnswer,\r\n Checkbox: CheckboxAnswer,\r\n Choice: ChoiceAnswer,\r\n TextOnly: TextOnlyAnswer,\r\n Picklist: PicklistAnswer\r\n };\r\n }\r\n\r\n render() {\r\n const AnswerTagName = this.components[this.props.question.answerType.answerTypeAlias];\r\n if (!AnswerTagName) return '';\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\n\r\n// Allow user to navigate previous, next, or complete their questionnaire in the expected way\r\nexport default class ScreenNav extends React.Component {\r\n render() {\r\n return (\r\n
\r\n {\r\n if (this.props.questionnaire.mouseBack) this.props.previous();\r\n this.props.questionnaire.mouseBack = false;\r\n }}\r\n onMouseDown={() => {\r\n this.props.questionnaire.mouseBack = true;\r\n }}\r\n disabled={!this.props.previousAble}\r\n className=\"navigation-button\"\r\n >\r\n â—€ Back\r\n \r\n  \r\n {\r\n if (this.props.questionnaire.mouseNext && this.props.nextAble) this.props.next();\r\n this.props.questionnaire.mouseNext = false;\r\n }}\r\n onMouseDown={() => {\r\n this.props.questionnaire.mouseNext = true;\r\n }}\r\n className=\"navigation-button\"\r\n >\r\n Next â–¶\r\n \r\n
\r\n );\r\n }\r\n}\r\n","/* eslint-disable no-console */\r\n// this lint is disabled because all logs are behind environment variable switches\r\nimport React from 'react';\r\nimport ConfirmationBox from '../Components/ConfirmationBox';\r\nimport MobileHeader from '../Components/MobileHeader';\r\nimport Question from '../Components/Question';\r\nimport ScreenNav from '../Components/ScreenNav';\r\nimport { apiService } from '../Services/summonsAPI';\r\nimport ErrorMessage from './ErrorMessage';\r\n\r\nconst CONSOLE_DEBUG = process.env.REACT_APP_ENVIRONMENT_NAME !== 'PRODUCTION';\r\nconst debugLog = (...etc) => {\r\n if (CONSOLE_DEBUG) console.log(...etc);\r\n};\r\nconst debugWarn = (...etc) => {\r\n if (CONSOLE_DEBUG) console.warn(...etc);\r\n};\r\n\r\nconst SAVE_PROGRESS_ON_NEXT_BUTTON = true;\r\n\r\n// this is meant to allow maintenance of answers without different outcomes.\r\nconst ALL_QUESTIONS_ON_ONE_SCREEN = false;\r\n\r\nexport default class Questionnaire extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n dataLoaded: false,\r\n questionnaire: { questions: [], apiError: null, errorMessage: '' },\r\n screenIdx: 0,\r\n screens: [[]],\r\n screenByQuestionId: {},\r\n assertedOutcome: false,\r\n debouncePost: 0,\r\n errorTexts: {},\r\n disables: {}\r\n };\r\n this.inputUpdateQuestionResponse = this.inputUpdateQuestionResponse.bind(this);\r\n this.validateWholeScreen = this.validateWholeScreen.bind(this);\r\n this.validateInput = this.validateInput.bind(this);\r\n this.inputNext = this.inputNext.bind(this);\r\n this.inputCancelQuestionnaire = this.inputCancelQuestionnaire.bind(this);\r\n this.inputSubmitQuestionnaire = this.inputSubmitQuestionnaire.bind(this);\r\n }\r\n\r\n async componentDidMount() {\r\n try {\r\n const data = await (\r\n await apiService.getQuestionnaire(this.props.jurorID).catch((err) => {\r\n debugLog(err);\r\n const msgs = {\r\n AbortError: 'Request timed out',\r\n Unknown: 'Unknown error'\r\n };\r\n return new Response(\r\n JSON.stringify({\r\n apiError: err.name,\r\n errorMessage: msgs[err.name] || msgs.Unknown\r\n })\r\n );\r\n })\r\n ).json();\r\n\r\n this.setState({ questionnaire: data });\r\n this.makeScreens();\r\n this.validateWholeScreen();\r\n\r\n debugLog('data loaded');\r\n } catch (e) {\r\n this.setState({ error: e.message });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.state.debouncePost) clearTimeout(this.state.debouncePost);\r\n }\r\n\r\n onLastScreen() {\r\n return this.state.screenIdx === this.state.screens.length - 1;\r\n }\r\n\r\n getQuestionById(questionId) {\r\n const a = this.state.questionnaire.questions.filter((q) => q.questionID === questionId);\r\n return a ? a[0] : null;\r\n }\r\n\r\n getQuestionByAlias(alias) {\r\n const a = this.state.questionnaire.questions.filter((q) => q.alias === alias);\r\n return a ? a[0] : null;\r\n }\r\n\r\n /** * helper function for input validation ** */\r\n getResponse(q) {\r\n const type = q.answerType.answerTypeAlias;\r\n let response = null;\r\n switch (type) {\r\n /** * Allow validation rule from backend to test if equal to some choice's text rather its ID ** */\r\n case 'Picklist' /** * This could maybe be done to Choice as well ** */:\r\n /// case 'Choice':\r\n response = q.answers.filter((a) => a.questionnaireAnswerID === q.response.questionnaireAnswerID);\r\n if (response.length) return response[0].label;\r\n\r\n // eslint-disable-next-line no-fallthrough\r\n default:\r\n response = q.response[type === 'Choice' ? 'questionnaireAnswerID' : 'responseText'];\r\n }\r\n return this.respondedHow({ type: type, response: response });\r\n }\r\n\r\n printState = async () => {\r\n console.log(this.state);\r\n };\r\n\r\n inputUpdateQuestionResponse(id, resp) {\r\n // set state here, then save on logout\r\n this.state.questionnaire.questions.forEach((q, idx) => {\r\n if (q.questionID === id) {\r\n const { questionnaire } = this.state;\r\n if (q.answerType.answerTypeAlias === 'Choice' || q.answerType.answerTypeAlias === 'Picklist') {\r\n questionnaire.questions[idx].response.questionnaireAnswerID = resp ? parseInt(resp) : null;\r\n } else {\r\n questionnaire.questions[idx].response.responseText = resp;\r\n }\r\n this.setState({ questionnaire: questionnaire });\r\n }\r\n });\r\n }\r\n\r\n /** * helper function to inputUpdateQuestionResponse, formats responses for backend ** */\r\n respondedHow(answer) {\r\n const b = answer.response;\r\n switch (answer.type) {\r\n case 'TextOnly':\r\n return 'true';\r\n case 'Checkbox':\r\n if (typeof b === 'string' && b.length) return b;\r\n return '0';\r\n case 'YesNo':\r\n if (b === '1') return b;\r\n if (b === '0') return b;\r\n return '?';\r\n case 'Choice':\r\n case 'Picklist':\r\n case 'Integer':\r\n case 'Number':\r\n case 'PhoneNumber':\r\n case 'TextEntry':\r\n if (typeof b === 'string' && b.match(/^[\\W_]*$/)) return '?';\r\n if (b === null || b === undefined) return '?';\r\n return `${b}`;\r\n default:\r\n return '?';\r\n }\r\n }\r\n\r\n async saveSignature(signature) {\r\n let postResult;\r\n try {\r\n postResult = await (\r\n await apiService.postJurorSignature({ jurorId: this.props.jurorID, signature: signature }).catch((err) => {\r\n debugWarn(err);\r\n const msgs = {\r\n AbortError: 'Request timed out',\r\n Unknown: 'Unknown error'\r\n };\r\n return new Response(\r\n JSON.stringify({\r\n apiError: err.name,\r\n errorMessage: msgs[err.name] || msgs.Unknown\r\n })\r\n );\r\n })\r\n ).json();\r\n } catch (e) {\r\n await this.setState({ error: e.message });\r\n }\r\n\r\n debugLog('postJurorSignature', postResult);\r\n return postResult;\r\n }\r\n\r\n async saveProgress(immediate) {\r\n const actuallyPost = async () => {\r\n const postBody = JSON.stringify(this.state.questionnaire);\r\n debugLog(postBody);\r\n\r\n let postResult;\r\n try {\r\n postResult = await (\r\n await apiService.postQuestionnaire(this.state.questionnaire).catch((err) => {\r\n debugWarn(err);\r\n const msgs = {\r\n AbortError: 'Request timed out',\r\n Unknown: 'Unknown error'\r\n };\r\n return new Response(\r\n JSON.stringify({\r\n apiError: err.name,\r\n errorMessage: msgs[err.name] || msgs.Unknown\r\n })\r\n );\r\n })\r\n ).json();\r\n } catch (e) {\r\n await this.setState({ error: e.message });\r\n }\r\n\r\n debugLog('postQuestionnaire result', postResult);\r\n return postResult;\r\n };\r\n if (this.state.debouncePost) clearTimeout(this.state.debouncePost);\r\n if (immediate) return actuallyPost();\r\n else this.setState({ debouncePost: setTimeout(actuallyPost, 2345) });\r\n return null;\r\n }\r\n\r\n async makeScreens() {\r\n // A group contains one or more question IDs\r\n const groups = [];\r\n let group = [];\r\n // reverse lookup table\r\n const screenByQuestionId = {};\r\n // Collect question IDs per screenful\r\n let lastGroupId = -1;\r\n let groupId = 1;\r\n this.state.questionnaire.questions.forEach((q) => {\r\n if (!ALL_QUESTIONS_ON_ONE_SCREEN) groupId = q.questionGroup ? q.questionGroup.questionGroupID : 0;\r\n if (!groupId || groupId !== lastGroupId) {\r\n if (group.length) groups.push(group);\r\n group = [];\r\n }\r\n group.push(q.questionID);\r\n lastGroupId = groupId;\r\n });\r\n if (group.length) groups.push(group);\r\n\r\n groups.forEach((grp, gidx) => {\r\n grp.forEach((qid) => {\r\n screenByQuestionId[qid] = gidx;\r\n });\r\n });\r\n this.setState({\r\n screens: groups,\r\n screenByQuestionId: screenByQuestionId,\r\n dataLoaded: true\r\n });\r\n }\r\n\r\n /** * return false if user cannot leave the screen going forward (next) ** */\r\n /** * helper function to inputNext(), which is in turn bound to next button ** */\r\n /** * determines if you can press next or not ** */\r\n whereToNext() {\r\n /** * questions presented to the user up until this point ** */\r\n const questions = this.state.questionnaire.questions.filter((q) => this.state.screenByQuestionId[q.questionID] <= this.state.screenIdx);\r\n if (!questions.length) return;\r\n const valids = {};\r\n let doDefer;\r\n\r\n // Test to see if the question is a followup to a previously presented question.\r\n //\r\n // A question may only have one parent question, and the test against a parent\r\n // is fairly basic in the way of less than some number, greater than some number,\r\n // or equal to some value (as a string)\r\n //\r\n questions.forEach((q) => {\r\n const resp = this.getResponse(q);\r\n if (doDefer === undefined && resp === q.defermentValue) {\r\n doDefer = q.defermentCodeID;\r\n }\r\n\r\n if (!q.questionValidations) {\r\n /** * not sure why this happens. database not properly defined maybe ** */\r\n debugLog('questionValidationNotFound?', q);\r\n return;\r\n }\r\n if (!q.questionValidations.length) return;\r\n\r\n const perValidation = (validationRule) => {\r\n const { parentQuestionID, parentValueTest, childRequiresResponse } = validationRule;\r\n if (parentValueTest) {\r\n const parentResp = parentQuestionID ? this.getResponse(this.getQuestionById(parentQuestionID)) : false;\r\n\r\n const m = parentValueTest.match(/^([<=>!][=>]?)(.+)/);\r\n if (m) {\r\n const test = {\r\n '<': (x) => parseInt(x) < parseInt(m[2]),\r\n '>': (x) => parseInt(x) > parseInt(m[2]),\r\n '=': (x) => x === m[2],\r\n '!=': (x) => x !== m[2],\r\n '<>': (x) => x !== m[2]\r\n }[m[1]];\r\n if (test) {\r\n const testPassed = parentResp ? test(parentResp) : false;\r\n\r\n if (testPassed) {\r\n if (childRequiresResponse) {\r\n return resp === '?' ? false : resp;\r\n } else {\r\n return true;\r\n }\r\n } else {\r\n // followup qn is n/a\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n if (childRequiresResponse) {\r\n return resp === '?' ? false : resp;\r\n } else {\r\n return true;\r\n }\r\n };\r\n\r\n q.questionValidations.forEach((val) => {\r\n if (valids[q.questionID] == null) valids[q.questionID] = [];\r\n valids[q.questionID].push(perValidation(val));\r\n });\r\n });\r\n\r\n if (!Object.values(valids).every((arr) => Object.values(arr).every((x) => (typeof x === 'string' ? true : x)))) return;\r\n\r\n // if there is any red invalidation text, you shall not pass\r\n if (questions.map((q) => this.state.errorTexts[q.questionID]).some((x) => x)) return;\r\n\r\n const ret = {\r\n defermentCodeID: doDefer,\r\n message: doDefer !== undefined ? 'Based on your responses, you may qualify for a deferment.' : ''\r\n };\r\n\r\n // eslint-disable-next-line consistent-return\r\n return ret;\r\n }\r\n\r\n changeScreen(delta) {\r\n if (delta === -1) this.mouseBack = false;\r\n this.setState({\r\n screenIdx: Math.min(Math.max(0, this.state.screenIdx + delta), this.state.screens.length - 1)\r\n });\r\n }\r\n\r\n // bound to next button\r\n inputNext() {\r\n this.mouseNext = false;\r\n\r\n if (SAVE_PROGRESS_ON_NEXT_BUTTON) this.saveProgress();\r\n const where = this.whereToNext();\r\n\r\n // do nothing if user failed to answer questions satisfactorily\r\n if (!where) return;\r\n\r\n // pending outcome: prompt for a deferment\r\n if (where.defermentCodeID !== undefined) {\r\n this.setState({\r\n assertedOutcome: {\r\n outcome: where.defermentCodeID,\r\n message: where.message\r\n }\r\n });\r\n return;\r\n }\r\n\r\n // pending outcome: prompt for questionnaire completion\r\n if (this.onLastScreen()) {\r\n this.setState({\r\n assertedOutcome: {\r\n outcome: true,\r\n message: where.message\r\n }\r\n });\r\n return;\r\n }\r\n\r\n this.changeScreen(1);\r\n }\r\n\r\n inputCancelQuestionnaire() {\r\n this.setState({ assertedOutcome: false });\r\n }\r\n\r\n inputSubmitQuestionnaire(signature) {\r\n if (!this.state.assertedOutcome) return;\r\n if (!this.saveSignature(signature)) return;\r\n if (!this.saveProgress('immediate')) return;\r\n\r\n const { outcome } = this.state.assertedOutcome;\r\n const deferment = outcome === true ? null : outcome;\r\n this.props.dataReview(deferment ? 'possibleDeferment' : 'questionnaireComplete', deferment);\r\n }\r\n\r\n /** * validate the fields on the current screen or associated screen for a given question ID ** */\r\n validateWholeScreen(qid) {\r\n // re-evaluate rules for all questions on page\r\n const screenIdx = qid ? this.screenByQuestionId[qid] : this.state.screenIdx;\r\n let errs = this.state.screens[screenIdx].map((q) => this.validateInput(q));\r\n errs = this.state.questionnaire.questions.map((q) => this.validateInput(q.questionID));\r\n /** * return true if we have any errors for the responses on the screen ** */\r\n return Object.values(errs).some((x) => x);\r\n }\r\n\r\n /** *\r\n set errorText on a given question ID's response\r\n also whether or not question should be hidden/\r\n ** */\r\n validateInput(qid) {\r\n const q = this.getQuestionById(qid);\r\n if (!q) return;\r\n\r\n let errorFound = false;\r\n if (q.questionValidation && q.questionValidations.length) {\r\n const childResp = this.getResponse(q);\r\n const perValidationError = (validationRule) => {\r\n const {\r\n parentQuestionID,\r\n parentValueTest,\r\n childRequiresResponse,\r\n childDisallowedResponse,\r\n childMatchRegEx,\r\n errorMessage,\r\n childNoMatchRegEx\r\n } = validationRule;\r\n\r\n let validationApplicable = true;\r\n let parentResp;\r\n if (parentValueTest) {\r\n parentResp = parentQuestionID ? this.getResponse(this.getQuestionById(parentQuestionID)) : false;\r\n\r\n const m = parentValueTest.match(/^([<=>!][=>]?)(.+)/);\r\n if (m) {\r\n const test = {\r\n '<': (x) => parseInt(x) < parseInt(m[2]),\r\n '>': (x) => parseInt(x) > parseInt(m[2]),\r\n '=': (x) => x === m[2],\r\n '!=': (x) => x !== m[2],\r\n '<>': (x) => x !== m[2]\r\n }[m[1]];\r\n if (test) validationApplicable = parentResp ? test(parentResp) : false;\r\n }\r\n }\r\n\r\n if (!validationApplicable) return {};\r\n\r\n if (childResp === '?') {\r\n if (childRequiresResponse) return { errorText: 'Response required' };\r\n else return {};\r\n }\r\n\r\n if (childDisallowedResponse) {\r\n // unanswer the child question so we don't record potentially contradictory responses in the db\r\n this.state.questionnaire.questions.forEach((quest, idx) => {\r\n if (quest.questionID === qid) {\r\n const qnaire = this.state.questionnaire;\r\n qnaire.questions[idx].response.questionnaireAnswerID = null;\r\n qnaire.questions[idx].response.responseText = null;\r\n this.setState({ questionnaire: qnaire });\r\n }\r\n });\r\n\r\n return { disabled: true };\r\n }\r\n\r\n /** * unpickle backend strings into actual RegExp objects ** */\r\n const match = (haystackStr, needleStr) => {\r\n const mat = needleStr.match(/^\\/(.+)\\/(.*)$/);\r\n return mat && haystackStr.match(new RegExp(mat[1], mat[2]));\r\n };\r\n\r\n if (childMatchRegEx && !childNoMatchRegEx) {\r\n /** * if child response matches accept pattern ** */\r\n return { errorText: match(childResp, childMatchRegEx) ? errorMessage : '' };\r\n } else if (!childMatchRegEx && childNoMatchRegEx) {\r\n /** * if child response doesn't match deny pattern ** */\r\n return { errorText: !match(childResp, childNoMatchRegEx) ? errorMessage : '' };\r\n }\r\n\r\n return {};\r\n };\r\n\r\n /** *\r\n Short-circuit OR these validation rules, that is,\r\n as soon as we encounter an applicable rule with an error message, we can end there\r\n ** */\r\n q.questionValidations.forEach((val) => {\r\n if (!errorFound) {\r\n const res = perValidationError(val);\r\n\r\n const errorsCopy = this.state.errorTexts;\r\n errorsCopy[qid] = res.errorText ? res.errorText : '';\r\n this.setState({ errorTexts: errorsCopy });\r\n\r\n const disablesCopy = this.state.disables;\r\n disablesCopy[qid] = res.disabled;\r\n this.setState({ disables: disablesCopy });\r\n\r\n errorFound = res.errorText;\r\n }\r\n });\r\n }\r\n\r\n if (!errorFound) this.customValidate(q);\r\n }\r\n\r\n customValidate(question) {\r\n const questionAlias = question.alias;\r\n let errorText = '';\r\n const response = this.getResponse(question).replace(/ /g, '');\r\n const MAX_AGE = 99;\r\n\r\n if (questionAlias === 'childAges' || questionAlias === 'stepChildAges') {\r\n let parentQuestionAlias;\r\n switch (questionAlias) {\r\n case 'childAges':\r\n parentQuestionAlias = 'numChildren';\r\n break;\r\n case 'stepChildAges':\r\n parentQuestionAlias = 'numStepChildren';\r\n break;\r\n default:\r\n }\r\n const parentQuestion = this.getQuestionByAlias(parentQuestionAlias);\r\n\r\n const parentResponse = this.getResponse(parentQuestion);\r\n const numChildren = parseInt(parentResponse);\r\n /* eslint-disable-next-line no-restricted-globals */\r\n if (!isNaN(numChildren) && numChildren > 0) {\r\n const ages = response.split(',');\r\n if (ages.length !== numChildren) {\r\n errorText = 'Enter age required for each child.';\r\n } else {\r\n for (let ageIdx = 0; ageIdx < numChildren; ageIdx += 1) {\r\n const age = parseInt(ages[ageIdx]);\r\n if (MAX_AGE < age) {\r\n errorText = `Age of ${age} is not allowed.`;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (questionAlias === 'employerHowLong') {\r\n const howLong = parseInt(response);\r\n /* eslint-disable-next-line no-restricted-globals */\r\n if (!isNaN(howLong)) {\r\n if (MAX_AGE < howLong) {\r\n errorText = `${howLong} years is not allowed.`;\r\n }\r\n }\r\n }\r\n\r\n const errorsCopy = this.state.errorTexts;\r\n errorsCopy[question.questionID] = errorText || '';\r\n this.setState({ errorTexts: errorsCopy });\r\n }\r\n\r\n render() {\r\n if (this.mouseBack) this.changeScreen(-1);\r\n if (this.mouseNext) this.inputNext();\r\n\r\n const page = (...etc) => [\r\n {\r\n await this.saveProgress('immediate');\r\n this.props.logOut();\r\n }}\r\n />,\r\n
,\r\n ...etc\r\n ];\r\n\r\n let showErrorPage = this.state.error;\r\n if (showErrorPage) {\r\n debugLog(this.state.error);\r\n }\r\n const { apiError, errorMessage } = this.state.questionnaire;\r\n if (apiError) {\r\n showErrorPage = true;\r\n debugLog(apiError, errorMessage);\r\n } else if (this.state.screens && this.state.screens.length < 1) {\r\n showErrorPage = true;\r\n debugLog('unable to produce screens');\r\n }\r\n\r\n if (showErrorPage) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (!this.state.dataLoaded) return page(

);\r\n\r\n if (this.state.assertedOutcome) {\r\n return page(\r\n \r\n );\r\n }\r\n\r\n const qnaire = [];\r\n qnaire.push(\r\n

\r\n {this.state.screenIdx === 0 ?

Please answer all questions.

: ''}\r\n\r\n

{`Page ${this.state.screenIdx + 1} of ${this.state.screens.length}`}

\r\n {this.state.screens[this.state.screenIdx].map((qid) => (\r\n {\r\n this.validateWholeScreen();\r\n /* entered a second time intentionally */\r\n this.validateWholeScreen();\r\n }}\r\n questionnaire={this}\r\n />\r\n ))}\r\n\r\n {\r\n this.changeScreen(-1);\r\n }}\r\n questionnaire={this}\r\n nextAble={this.whereToNext()}\r\n next={this.inputNext}\r\n />\r\n
\r\n );\r\n\r\n if (CONSOLE_DEBUG)\r\n qnaire.push(\r\n \r\n );\r\n\r\n return page(qnaire);\r\n }\r\n}\r\n","import QRCode from 'qrcode.react';\r\nimport React from 'react';\r\nimport '../App.css';\r\n\r\nexport default class BarcodeGenerator extends React.Component {\r\n render() {\r\n return
{this.props.jurorID ? : ' '}
;\r\n }\r\n}\r\n","import React from 'react';\r\nimport DataTable from 'react-data-table-component';\r\nimport moment from 'moment';\r\nimport { apiService } from '../Services/summonsAPI';\r\n\r\nconst columns = [\r\n {\r\n name: 'Date',\r\n selector: 'checkInDateTime',\r\n sortable: true,\r\n format: (row) => moment(row.checkInDateTime).format('L')\r\n },\r\n {\r\n name: 'Time',\r\n selector: 'checkInDateTime',\r\n sortable: true,\r\n right: true,\r\n format: (row) => moment(row.checkInDateTime).format('h:mm a')\r\n }\r\n];\r\n\r\nexport default class Attendance extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n Attendance: ''\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n try {\r\n const data = await apiService.getAttendance(this.props.jurorID, this.props.jurorReportingDateTime);\r\n const actualData = await data.json();\r\n this.setState({ Attendance: actualData });\r\n } catch (e) {\r\n // eslint-disable-next-line no-console\r\n console.warn(e);\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n

Attendance

\r\n \r\n
\r\n );\r\n }\r\n}\r\n","// linted by Ricky Kim\r\n\r\nimport React from 'react';\r\nimport MobileHeader from '../Components/MobileHeader';\r\nimport JurorBarcode from '../Components/JurorBarcode';\r\nimport Attendance from '../Components/Attendance';\r\nimport SocialMedia from '../images/SocialMediaFlyer.jpg';\r\nimport Check from '../green check mark.jfif';\r\nimport '../App.css';\r\n\r\nexport default class BarcodeAttendance extends React.Component {\r\n render() {\r\n return (\r\n
\r\n \r\n

\r\n

\r\n {!this.props.isSpecial && (\r\n
\r\n \"Check\r\n Thank you for filling out your questionnaire\r\n
\r\n )}\r\n

\r\n

\r\n Your check-in bar code:\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n Please watch the following video\r\n \r\n
\r\n
\r\n
\r\n

First Day Instructions:

\r\n
    \r\n
  • \r\n Are you a resident of Clayton County? NO? Please go to the window.\r\n
  • \r\n
  • \r\n Are you a United States citizen? NO? Please go to the window.\r\n
  • \r\n
  • \r\n Are you 70 years of age or older and do NOT want to serve? YES? Please go to the window.\r\n
  • \r\n
  • \r\n Have you been convicted of a felony and your civil rights have NOT been restored? YES?{' '}\r\n Please go to the window.\r\n
  • \r\n
\r\n
\r\n
\r\n

Jury Duty Do's:

\r\n
    \r\n
  • DO be on time!
  • \r\n
  • DO pay close attention to instructions.
  • \r\n
  • DO respect those around you.
  • \r\n
  • DO have cell phones/electronic devices turned off while in the courtroom.
  • \r\n
\r\n
\r\n
\r\n

Jury Duty Dont's

\r\n
    \r\n
  • DON'T wear shorts, uniforms or clothing too revealing or inappropriate.
  • \r\n
  • DON'T be late! (You may be held in CONTEMPT!)
  • \r\n
  • DON'T go to the window and ask when you'll be leaving.
  • \r\n
  • \r\n DON'T try to get out of jury duty. The law allows very few excuses and we are obligated to uphold the law.\r\n
  • \r\n
\r\n
\r\n
\r\n

Jury Duty Pay:

\r\n

\r\n You will be paid $25.00 for each day that you are required to appear whether you are selected as a juror or not. The\r\n certificate will list the dates you have been required to appear for jury duty. You will be handed your check and certificate\r\n of service when you are released from jury duty IF you have abided by all instructions given and have not failed to appear\r\n when required during your term of jury duty. *NOTE* Any attempt to alter either the check or the certificate of service in ANY\r\n way may constitute a criminal act which will be prosecuted.\r\n

\r\n

Attendance:

\r\n

\r\n It is extremely important that you report as instructed! If a juror fails to report or absents themself without prior approval\r\n from the court, that juror will not be paid, may be required to re-serve their jury duty, or may be held in contempt of court.\r\n

\r\n

Emergencies:

\r\n

\r\n If you are unable to report because of an emergency, please call 770-477-3400 as soon as possible. If there is inclement\r\n weather, please tune in to WSB-TV News or WSB750 AM or WSB95.5FM for any announcement regarding the closing/delayed opening of\r\n Clayton County Government.\r\n

\r\n
\r\n

\r\n IMPORTANT! Jurors may not have anyone scan in their code for attendance. Any person who\r\n participates in the fraudulent usage of the scanning statement may be held in contempt of court.\r\n

\r\n
\r\n
\r\n \"a\r\n
\r\n );\r\n }\r\n}\r\n","// linted by Thang 2020-08-17\r\n\r\nimport React from 'react';\r\nimport '../App.css';\r\nimport MobileHeader from '../Components/MobileHeader';\r\n\r\nexport default function Review({ jurorName, logOut, jurorReportingDateTime, affidavitLink }) {\r\n return (\r\n
\r\n \r\n

\r\n

\r\n

\r\n Thank you for filling out the questionnaire. According to your answer(s), your questionnaire is under review for eligibility of\r\n Jury Duty. We will send a push notification to your phone once the review in finalized.\r\n

\r\n

\r\n You may qualify for deferment. You can locate the instruction and the deferment affidavit{' '}\r\n \r\n here\r\n \r\n .\r\n

\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n","// linted by Ricky Kim\r\n\r\nimport React from 'react';\r\nimport '../App.css';\r\nimport MobileHeader from '../Components/MobileHeader';\r\n\r\nexport default class Deferment extends React.Component {\r\n render() {\r\n return (\r\n
\r\n \r\n

\r\n

\r\n Thank you for filling out the questionnaire. Based on your answers, we have determined that you qualify for Deferment and are no\r\n longer needed for Jury Duty.\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","const api = require('../Services/creds.json');\r\n\r\nexport default function JSNotification(DivStatus, BtnToggleSubscribed, DivSubscription, jurorID) {\r\n function element(elem) {\r\n return typeof elem !== 'string' ? elem : document.getElementById(elem);\r\n }\r\n\r\n const divStatus = element(DivStatus);\r\n const divSubscription = element(DivSubscription);\r\n const btnToggleSubscribed = element(BtnToggleSubscribed);\r\n\r\n let Registration = null;\r\n /**\r\n * @type {PushSubscription}\r\n */\r\n let Subscription = null;\r\n //* * get notification public key from cred.json (first) */\r\n let PublicKey = api.vapidPublicKey;\r\n //* * check .env */\r\n if (process.env.REACT_APP_vapidPublicKey) {\r\n PublicKey = process.env.REACT_APP_vapidPublicKey;\r\n }\r\n\r\n function log(logMessage, div) {\r\n // eslint-disable-next-line no-console\r\n console.log(`[JSNotification] ${logMessage}`);\r\n const newDiv = div;\r\n if (div) newDiv.innerHTML = logMessage;\r\n }\r\n\r\n function logState(item, stateStatus, stateName, div) {\r\n if (stateStatus) log('');\r\n else log(`${item} is${stateStatus === false ? ' NOT' : '???'} ${stateName}.`, div);\r\n }\r\n\r\n function logSupported(item, supported) {\r\n logState(item, supported, 'supported');\r\n }\r\n\r\n function toString() {\r\n return '[object JSNotification]';\r\n }\r\n this.toString = toString;\r\n\r\n async function setSubscription() {\r\n divSubscription.innerHTML = `Subcription JSON to send to API:
${JSON.stringify(Subscription)}`;\r\n divSubscription.style.display = Subscription ? 'block' : 'none';\r\n btnToggleSubscribed.update();\r\n }\r\n\r\n async function postPushSubscription() {\r\n log('Saving subscription to database...');\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: new Headers({\r\n 'Content-Type': 'application/json'\r\n }),\r\n body: JSON.stringify({\r\n jurorID: jurorID,\r\n subscription: JSON.stringify(Subscription)\r\n })\r\n };\r\n await fetch(`${api.baseurl}jurorManagement/postPushSubscription`, requestOptions)\r\n .then(() => log('Subscription saved.'))\r\n .catch((error) => log(`Error saving subscription: ${error}`));\r\n }\r\n\r\n function urlB64ToUint8Array(base64String) {\r\n const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\r\n const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');\r\n\r\n const rawData = window.atob(base64);\r\n const outputArray = new Uint8Array(rawData.length);\r\n\r\n for (let i = 0; i < rawData.length; i += 1) {\r\n outputArray[i] = rawData.charCodeAt(i);\r\n }\r\n return outputArray;\r\n }\r\n\r\n async function subscribeUser() {\r\n let result = false;\r\n log('Attempting to subscribe user...');\r\n\r\n await Registration.pushManager\r\n .subscribe({\r\n userVisibleOnly: true,\r\n applicationServerKey: urlB64ToUint8Array(PublicKey)\r\n })\r\n .then((subscription) => {\r\n Subscription = subscription;\r\n result = true;\r\n })\r\n .catch(() => {\r\n log('Failed to subscribe the user.');\r\n })\r\n .finally(() => logState('User', !!Subscription, 'subscribed for notifications', divStatus));\r\n\r\n return result;\r\n }\r\n\r\n btnToggleSubscribed.update = () => {\r\n btnToggleSubscribed.textContent = !Subscription ? 'Subscribe' : 'Unsubscribe';\r\n };\r\n\r\n async function registerServiceWorker() {\r\n log('Registering service worker...');\r\n let registered = null;\r\n await navigator.serviceWorker\r\n .register('sw.js')\r\n .then((swReg) => {\r\n // eslint-disable-next-line no-global-assign\r\n Worker = swReg.installing || swReg.waiting || swReg.active;\r\n Registration = swReg;\r\n registered = true;\r\n })\r\n .catch(() => {\r\n log('Error registering service worker.');\r\n registered = false;\r\n })\r\n .finally(() => {\r\n logState('Service Worker', registered, 'registered');\r\n });\r\n return registered;\r\n }\r\n\r\n async function checkSubscription() {\r\n let result = false;\r\n log('Checking subscription...');\r\n\r\n await Registration.pushManager\r\n .getSubscription()\r\n .then((subscription) => {\r\n Subscription = subscription;\r\n btnToggleSubscribed.update();\r\n logState('User', !!Subscription, 'subscribed for notifications', divStatus);\r\n result = true;\r\n })\r\n .catch(() => {\r\n log('Error checking push subscription.');\r\n });\r\n\r\n return result;\r\n }\r\n\r\n function unsubscribeUser() {\r\n log('unsubscribing user...');\r\n Subscription.unsubscribe()\r\n .then(() => setSubscription(null))\r\n .catch(() => {\r\n log('Failed to unsubscribe the user.');\r\n })\r\n .finally(() => {\r\n logState('User', !!Subscription, 'subscribed for notifications', divStatus);\r\n btnToggleSubscribed.update();\r\n });\r\n }\r\n\r\n btnToggleSubscribed.onclick = () => (Subscription === null ? subscribeUser() : unsubscribeUser());\r\n\r\n function checkPushNotficationsSupported() {\r\n log('Checking push notifications support...');\r\n const serviceWorkerSupported = 'serviceWorker' in navigator;\r\n logSupported('Service Worker', serviceWorkerSupported);\r\n\r\n const pushManagerSupported = 'PushManager' in window;\r\n logSupported('Push Manager', pushManagerSupported);\r\n\r\n const supported = serviceWorkerSupported && pushManagerSupported;\r\n logSupported('Push Notifications', supported);\r\n return supported;\r\n }\r\n\r\n async function init() {\r\n if (!checkPushNotficationsSupported()) return;\r\n if (!(await registerServiceWorker())) return;\r\n if (!(await checkSubscription())) return;\r\n if (!Subscription) {\r\n if (await subscribeUser()) await postPushSubscription();\r\n }\r\n setSubscription();\r\n }\r\n\r\n init();\r\n}\r\n","import React from 'react';\r\nimport JSNotification from './jsNotification';\r\n\r\nexport default class Notifications extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n }\r\n\r\n async componentDidMount() {\r\n const notif = new JSNotification(\r\n 'divNotifications_status',\r\n 'btnNotifications_toggleSubscribed',\r\n 'divNotifications_subscription',\r\n this.props.jurorID\r\n );\r\n }\r\n\r\n // eslint-disable-next-line no-unused-vars\r\n updateResponse(id, resp) {}\r\n // this seems like boiler-plate code that could be useful in the future\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
Notifications
\r\n
\r\n notifications status...\r\n
\r\n
\r\n subscription...\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","// linted by Ricky Kim\r\n\r\nimport React from 'react';\r\nimport '../App.css';\r\nimport BarcodeAttendance from './BarcodeAttendance';\r\nimport Review from './Review';\r\nimport DefermentMessage from './DefermentMessage';\r\nimport ErrorMessage from './ErrorMessage';\r\nimport Notifications from '../notifications/Notifications';\r\nimport { apiService } from '../Services/summonsAPI';\r\nimport KioskOutcome from '../Components/KioskOutcome';\r\n\r\nexport default class CheckIn extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n affidavitLink: null\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n const affidavitLink = await apiService.getAffidavitLink().then((response) => response.text());\r\n this.setState({\r\n affidavitLink: affidavitLink\r\n });\r\n }\r\n\r\n render() {\r\n /* herring */\r\n if (this.props.kioskMode) return ;\r\n\r\n /* Depend on status, display appropriate messge:\r\n 1 - questionnaireIncomplete\r\n 2 - questionnaireComplete\r\n 3 - possibleDeferment\r\n 4 - deferred\r\n */\r\n\r\n if (this.props.isSpecial) {\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n } else {\r\n switch (this.props.jurorStatus) {\r\n case 'questionnaireComplete':\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n\r\n case 'possibleDeferment':\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n\r\n case 'deferred':\r\n return (\r\n \r\n );\r\n\r\n default:\r\n // need to catch for invalid status\r\n return (\r\n \r\n );\r\n }\r\n }\r\n }\r\n}\r\n","// linted by Thang 2020-08-17\r\n\r\nimport React from 'react';\r\nimport '../App.css';\r\nimport MobileHeader from '../Components/MobileHeader';\r\n\r\nexport default function DeniedDeferment({ jurorName, logOut, jurorReportingDateTime, goQuestionnaire }) {\r\n return (\r\n
\r\n \r\n

\r\n

\r\n

\r\n

Thank you for filling out the questionnaire.
\r\n
We have reviewed your questionnaire and denied you for deferment.
\r\n
Please continue filling out your questionnaire.
\r\n
\r\n
\r\n If you have any questions, please contact:\r\n
\r\n
The office of Jacquline D. Wills
\r\n
Clerk of Superior Court at 770-477-3400
\r\n
\r\n
\r\n or email the clerk at:\r\n
\r\n \r\n

\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { Button, FormGroup } from 'react-bootstrap';\r\nimport DatePicker from 'react-datepicker';\r\nimport moment from 'moment';\r\nimport MobileHeader from '../Components/MobileHeader';\r\nimport KioskOutcome from '../Components/KioskOutcome';\r\nimport FormValidator from '../Components/FormValidator';\r\nimport { apiService } from '../Services/summonsAPI';\r\nimport { globals } from '../Services/globals';\r\nimport ErrorMessage from './ErrorMessage';\r\nimport Questionnaire from './Questionnaire';\r\nimport CheckIn from './CheckIn';\r\nimport DeniedDeferment from './DeniedDeferment';\r\nimport Notifications from '../notifications/Notifications';\r\n\r\nimport 'react-datepicker/dist/react-datepicker.css';\r\n\r\nconst kioskMode = !!window.location.search.match(/kiosk/);\r\nconst idledOut = !!window.location.search.match(/idle/);\r\n\r\nfunction isEmpty(obj) {\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport default class test extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.validator = new FormValidator([\r\n {\r\n field: 'jurorDOB',\r\n method: 'isEmpty',\r\n validWhen: false,\r\n message: 'Juror DOB is required.'\r\n },\r\n\r\n {\r\n field: 'jurorID',\r\n method: 'isEmpty',\r\n validWhen: false,\r\n compareRequireField: 'jurorDL',\r\n compareRequireMethod: 'isEmpty',\r\n compareRequireWhen: true,\r\n message: 'Juror ID is required.'\r\n },\r\n {\r\n field: 'jurorID',\r\n method: 'isLength',\r\n args: [{ min: 7, max: 7 }],\r\n validWhen: true,\r\n compareRequireField: 'jurorDL',\r\n compareRequireMethod: 'isEmpty',\r\n compareRequireWhen: true,\r\n message: 'Enter Juror ID including leading zeros.'\r\n },\r\n {\r\n field: 'jurorID',\r\n method: 'isNumeric',\r\n validWhen: true,\r\n compareRequireField: 'jurorDL',\r\n compareRequireMethod: 'isEmpty',\r\n compareRequireWhen: true,\r\n message: 'Juror ID is numeric.'\r\n },\r\n\r\n {\r\n field: 'jurorDL',\r\n method: 'isEmpty',\r\n validWhen: false,\r\n compareRequireField: 'jurorID',\r\n compareRequireMethod: 'isEmpty',\r\n compareRequireWhen: true,\r\n message: 'Driver License is required.'\r\n },\r\n {\r\n field: 'jurorDL',\r\n method: 'isNumeric',\r\n validWhen: true,\r\n compareRequireField: 'jurorID',\r\n compareRequireMethod: 'isEmpty',\r\n compareRequireWhen: true,\r\n message: 'Drive Licsense is Numberic'\r\n },\r\n {\r\n field: 'jurorDL',\r\n method: 'isLength',\r\n args: [{ min: 7, max: 9 }],\r\n validWhen: true,\r\n compareRequireField: 'jurorID',\r\n compareRequireMethod: 'isEmpty',\r\n compareRequireWhen: true,\r\n message: 'Enter Driver License including leading zeros.'\r\n }\r\n ]);\r\n\r\n this.state = {\r\n jurorDOB: '',\r\n jurorID: '',\r\n jurorDL: '',\r\n juror: '',\r\n authenticateFlag: '',\r\n\r\n connectAPI: true,\r\n generalError: false,\r\n validation: this.validator.valid(),\r\n\r\n isSpecial: false\r\n };\r\n\r\n this.baseState = this.state;\r\n this.logOut = this.logOut.bind(this);\r\n this.dataReview = this.dataReview.bind(this);\r\n }\r\n\r\n componentDidMount = () => {\r\n this.datePicker.input.setAttribute('autocomplete', 'off');\r\n };\r\n\r\n getJurorInfo = async () => {\r\n try {\r\n const data = await apiService.getSummonsRecipientLogin(moment(this.state.jurorDOB).format('L'), this.state.jurorID, this.state.jurorDL);\r\n const actualData = await data.json();\r\n\r\n if (actualData.currentPoolID) {\r\n const specialData = await apiService.getJuryPool(actualData.currentPoolID).then((res) => res.json());\r\n\r\n this.setState({ isSpecial: specialData.specialTrial });\r\n }\r\n\r\n /* if there there juror info, but no status */\r\n if (!isEmpty(actualData) && !actualData.status) {\r\n actualData.status = { jurorStatus: 1, jurorStatusAlias: 'questionnaireIncomplete' };\r\n this.setState({ juror: actualData, generalError: true });\r\n }\r\n\r\n /** set juror */\r\n this.setState({ juror: actualData });\r\n this.setState({ connectAPI: true });\r\n } catch (e) {\r\n console.warn(e);\r\n this.setState({ connectAPI: false });\r\n }\r\n\r\n /* authenticateFlag\r\n 0 = invalid\r\n 1 = authenicate - proceed to questionaire\r\n */\r\n // if connected\r\n if (this.state.connectAPI) {\r\n if (this.state.juror.jurorID === undefined) {\r\n this.setState({ authenticateFlag: 0 });\r\n } else {\r\n //* there is juror ID, proceed to next step */\r\n\r\n this.setState({ authenticateFlag: 1 });\r\n globals.juror = this.state.juror;\r\n }\r\n } else {\r\n this.setState({ authenticateFlag: -1 });\r\n }\r\n };\r\n\r\n /* Questionnaire complete, get juror information status again, and render base on the current status if need */\r\n /* questionnaire going to send back 2/3 for status, and possbily deferReason */\r\n dataReview = async (statusAlias, deferReasonCode) => {\r\n /* set juror status */\r\n const updateJuror = this.state.juror;\r\n updateJuror.possibleDefermentCodeID = deferReasonCode;\r\n updateJuror.status.jurorStatusAlias = statusAlias;\r\n\r\n /* Post the juror status */\r\n let postResult;\r\n try {\r\n postResult = await (\r\n await apiService.postQuestionnaireEnd(updateJuror).catch((err) => {\r\n const msgs = {\r\n AbortError: 'Request timed out',\r\n Unknown: 'Unknown error'\r\n };\r\n return new Response(\r\n JSON.stringify({\r\n apiError: err.name,\r\n errorMessage: msgs[err.name] || msgs.Unknown\r\n })\r\n );\r\n })\r\n ).json();\r\n } catch (e) {\r\n await this.setStateAsync({ error: e.message });\r\n }\r\n\r\n /** check for fail connection/post */\r\n if (!postResult) {\r\n this.setState({ generalError: true });\r\n return;\r\n }\r\n\r\n /** get Juror info */\r\n this.getJurorInfo();\r\n };\r\n\r\n /** Handle submit button */\r\n mySubmitHandler = (event) => {\r\n /** Validate form data */\r\n event.preventDefault();\r\n const validation = this.validator.validate(this.state);\r\n this.setState({ validation });\r\n this.submitted = true;\r\n\r\n /** if form data validated, get juror information */\r\n if (validation.isValid) {\r\n // handle actual form submission here\r\n this.getJurorInfo();\r\n }\r\n };\r\n\r\n /** update state base on the form change */\r\n myChangeHandler = (event) => {\r\n const nam = event.target.name;\r\n const val = event.target.value;\r\n this.setState({ [nam]: val });\r\n };\r\n\r\n /** update DOB base on the form change */\r\n myDOBChangeHandler = (date) => {\r\n this.setState({ jurorDOB: date });\r\n };\r\n\r\n /** Juror log out, reset the state */\r\n logOut() {\r\n /* Reset the submitted status */\r\n this.submitted = false;\r\n /* Reset the state */\r\n this.setState(this.baseState);\r\n /* Reset the submitted status */\r\n }\r\n\r\n render() {\r\n if (idledOut) {\r\n return ;\r\n }\r\n\r\n const { jurorDOB, jurorID, jurorDL, isSpecial } = this.state;\r\n const enabled = jurorDOB && (jurorID.length > 0 || jurorDL > 0);\r\n // const enabled = true;\r\n const validation = this.submitted // if the form has been submitted at least once\r\n ? this.validator.validate(this.state) // then check validity every time we render\r\n : this.state.validation; // otherwise just use what's in state\r\n /** Check and render general error message */\r\n if (this.state.generalError) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n /** juror is authenticated */\r\n if (this.state.authenticateFlag === 1) {\r\n /** Send juror to appropriate page base on the juror status ID\r\n 1 - questionnaireIncomplete\r\n 2 - questionnaireComplete\r\n 3 - possibleDeferment\r\n 4 - deferred\r\n */\r\n\r\n /** not completed questionaire */\r\n const { juror } = this.state;\r\n if (juror.status.jurorStatusAlias === 'questionnaireIncomplete' && !isSpecial) {\r\n if (!this.state.skipLoginMessage && juror.deniedDefermentCode) {\r\n return (\r\n
\r\n this.setState({ skipLoginMessage: true })}\r\n kioskMode={kioskMode}\r\n />\r\n \r\n
\r\n );\r\n }\r\n\r\n // Incomplete questionnaire, send juror to Questionnaire to complete before proceed />\r\n else\r\n return (\r\n \r\n );\r\n } else {\r\n /** completed questionnaire,defer, review , send juror to checkIn page */\r\n return (\r\n \r\n );\r\n }\r\n } else\r\n return (\r\n
\r\n \r\n

\r\n

\r\n
\r\n {validation.jurorDOB.message}\r\n \r\n {\r\n this.datePicker = datePicker;\r\n }}\r\n selected={this.state.jurorDOB}\r\n onChange={this.myDOBChangeHandler}\r\n name=\"jurorDOB\"\r\n dateFormat=\"MM/dd/yyyy\"\r\n placeholderText=\"Date of Birth (MM/DD/YYYY)\"\r\n className=\"cta_input\"\r\n />\r\n \r\n\r\n \r\n {validation.jurorID.message}\r\n \r\n \r\n \r\n\r\n {validation.jurorDL.message}\r\n \r\n \r\n \r\n\r\n
\r\n {this.state.authenticateFlag === 0 && (\r\n \r\n

Your login credentials could not be verified, please try again.

\r\n
\r\n )}\r\n
\r\n
\r\n {this.state.authenticateFlag === -1 && (\r\n \r\n

System is offline, please try again later.

\r\n
\r\n )}\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React, { useEffect } from 'react';\r\nimport { useIdleTimer } from 'react-idle-timer';\r\nimport './App.css';\r\nimport { BrowserRouter, Route, Switch } from 'react-router-dom';\r\nimport ReactGA from 'react-ga';\r\n// import CheckIn from './Pages/CheckIn';\r\n// import Deferment from './Pages/DefermentMessage';\r\n// import Review from './Pages/Review';\r\nimport MobileLogin from './Pages/MobileLogin';\r\n\r\nconst idleTimeoutMilliseconds = 1000 * 60 * 3;\r\n\r\nexport default function App() {\r\n useEffect(() => {\r\n ReactGA.initialize('UA-17147565-26');\r\n ReactGA.pageview(window.location.pathname + window.location.search);\r\n }, []);\r\n\r\n const doNothing = () => {};\r\n\r\n // eslint-disable-next-line no-unused-vars\r\n const handleOnIdle = (event) => {\r\n const kioskMode = !!window.location.search.match(/kiosk/);\r\n if (kioskMode) {\r\n window.location.replace('/?kiosk=1&idle=1');\r\n }\r\n };\r\n\r\n // eslint-disable-next-line no-unused-vars\r\n const { getRemainingTime, getLastActiveTime } = useIdleTimer({\r\n timeout: idleTimeoutMilliseconds,\r\n onIdle: handleOnIdle,\r\n onActive: doNothing,\r\n onAction: doNothing,\r\n debounce: 500\r\n });\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {/* This is a SPA with prop drilling; we do not need these routes except for development */}\r\n {/* \r\n \r\n */}\r\n \r\n \r\n
\r\n );\r\n}\r\n","import 'react-app-polyfill/stable';\r\nimport 'react-app-polyfill/ie9';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\n/* commented by Bill J. - use js service worker\r\nimport * as serviceWorker from './serviceWorker';\r\n*/\r\n\r\nrequire('dotenv').config();\r\n\r\nReactDOM.render(, document.getElementById('root'));\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\n/* commented by Bill J. - use js service worker\r\nserviceWorker.unregister();\r\n*/\r\n"],"sourceRoot":""}