{"version":3,"sources":["webappointment/imgs/default.svg","shared/libraries/draft-js-import-markdown/lib/main.js","shared/libraries/draft-js-import-markdown/lib/MarkdownParser.js","webappointment/imgs/icon-completed.svg","webappointment/imgs/proxy-established-no.svg","webappointment/imgs/proxy-established-yes.svg","webappointment/imgs/self-established-no.svg","webappointment/imgs/self-established-yes.svg","webappointment/imgs/icon-error.svg","shared/imgs/icon-arrow-up.svg","shared/imgs/icon-arrow-down.svg","shared/imgs/icon-arrow--up-med-gray.svg","shared/imgs/icon-arrow--down-med-gray.svg","shared/imgs/icon-close--med-gray.svg","shared/libraries/draft-js-export-markdown/lib/main.js","shared/imgs/what-to-expect.jpg","shared/imgs/preloader-bar.gif","shared/libraries/draft-js-export-markdown/lib/stateToMarkdown.js","shared/libraries/draft-js-import-markdown/lib/stateFromMarkdown.js","shared/libraries/draft-js-import-element/lib/main.js","shared/libraries/draft-js-import-element/lib/stateFromElement.js","shared/libraries/draft-js-import-element/lib/lib/replaceTextWithMeta.js","shared/libraries/draft-js-import-element/lib/lib/Constants.js","shared/components/presentation/progress-bar/ProgressBar.js","shared/components/presentation/grid/Grid.js","constants/routes.js","webappointment/functions/progressSupportFunctions.js","constants/actionTypes.js","webappointment/actions/webAppointmentActions.js","shared/functions/compareObjectKeys.js","shared/components/presentation/arrangeable-list-input/ArrangeableListInput.js","shared/errors/InputError.js","shared/components/presentation/text-input/TextInput.js","shared/functions/createConfirmAlert.js","shared/components/presentation/button-input/ButtonInput.js","constants/breakpoints.js","shared/components/presentation/filter-input/FilterInput.js","shared/components/presentation/arrangeable-filter-input/ArrangeableFilterInput.js","shared/components/presentation/chart/chartFunctions.js","shared/components/presentation/chart/Chart.js","shared/components/presentation/input-label/InputLabel.js","shared/components/presentation/checkbox-input/CheckboxInput.js","shared/components/presentation/select-box/SelectBox.js","shared/components/presentation/image-input/ImageInput.js","shared/components/presentation/grid-input/grid-input-prompts/GridInputPrompts.js","shared/components/presentation/grid-input/grid-input-controls/GridInputControls.js","shared/components/presentation/grid-input/GridInput.js","shared/components/presentation/text-area/TextArea.js","shared/components/presentation/input-upload/InputUpload.js","shared/functions/parse-handling.js","shared/components/presentation/chart-input/ChartInput.js","shared/components/presentation/checkbox-input-list/CheckboxInputList.js","shared/components/presentation/date-range-filter-input/DateRangeFilterInput.js","shared/components/presentation/video-input/VideoInput.js","shared/components/presentation/featured-media-input/FeaturedMediaInput.js","shared/components/presentation/link-input/LinkInput.js","shared/components/presentation/radio-input-list/RadioInputList.js","shared/components/presentation/rich-text-editor/entities/Entities.js","shared/components/presentation/rich-text-editor/style-controls/StyleControls.js","shared/components/presentation/rich-text-editor/prompts/Prompts.js","shared/functions/convertToSuperscript.js","shared/functions/convertToSubscript.js","shared/components/presentation/rich-text-editor/RichTextEditor.js","shared/components/presentation/toggle-input/ToggleInput.js","shared/components/presentation/typeahead/Typeahead.js","shared/components/presentation/input-list/InputList.js","webappointment/constants/strings.js","webappointment/functions/nextPage.js","webappointment/constants/DefaultState.js","webappointment/components/what-to-expect-page/WhatToExpectPage.js","webappointment/components/who-for-page/WhoForPage.js","webappointment/components/received-care-page/ReceivedCarePage.js","constants/regex.js","webappointment/functions/generateValidYearRegExp.js","webappointment/functions/formatData.js","webappointment/constants/webAppointmentConstants.js","webappointment/components/contact-info-page/ContactInfoPage.js","shared/functions/dobFormatting.js","webappointment/components/new-patient-info-page/NewPatientInfoPage.js","config/apiKeys.js","shared/functions/apiGet.js","webappointment/components/new-patient-address-phone-page/NewPatientAddressPhonePage.js","webappointment/components/existing-patient-info-page/ExistingPatientInfoPage.js","webappointment/components/appointment-info1-page/AppointmentInfo1Page.js","webappointment/components/appointment-info2-page/AppointmentInfo2Page.js","shared/functions/apiPost.js","webappointment/components/appointment-preferences-page/AppointmentPreferencesPage.js","webappointment/components/appointment-provider-page/AppointmentProviderPage.js","webappointment/components/appointment-day-time-page/AppointmentDayTimePage.js","webappointment/components/payment-method-page/PaymentMethodPage.js","webappointment/components/insurance-page/InsurancePage.js","webappointment/components/billing-page/BillingPage.js","webappointment/components/billing-address-page/BillingAddressPage.js","webappointment/components/policy-holder-page/PolicyHolderPage.js","webappointment/components/out-of-pocket-page/OutOfPocketPage.js","webappointment/components/review-modal-window/ReviewModalWindow.js","shared/components/presentation/preloader-overlay/PreloaderOverlay.js","webappointment/components/submission-cycle-page/SubmissionCycle.js","webappointment/functions/sendRequest.js","webappointment/functions/loadState.js","webappointment/components/review-page/ReviewPage.js","webappointment/components/pfa-appointment-page/PfaAppointmentPage.js","webappointment/components/thank-you-pfa-appointment-page/ThankYouPfaAppointmentPage.js","webappointment/components/thank-you-pfa-page/ThankYouPfaPage.js","webappointment/components/thank-you-insurance-page/ThankYouInsurancePage.js","webappointment/components/error-review-page/ErrorReviewPage.js","App.js","reducers/index.js","webappointment/reducers/webAppointmentReducer.js","index.js"],"names":["module","exports","__webpack_require__","p","Object","defineProperty","value","_stateFromMarkdown","require","enumerable","get","_interopRequireDefault","default","_MarkdownParser","obj","__esModule","_syntheticDom","hasOwnProperty","prototype","assign","i","arguments","length","target","key","call","noop","exec","defaults","gfm","breaks","pedantic","smartLists","silent","langPrefix","renderer","Renderer","xhtml","block","newline","code","fences","hr","heading","nptable","lheading","blockquote","list","def","paragraph","text","Lexer","options","this","tokens","links","rules","normal","bullet","item","replace","source","parse","src","token","top","bq","next","loose","cap","bull","b","space","l","substring","push","type","lang","depth","ordered","match","indexOf","RegExp","slice","join","test","charAt","toLowerCase","href","title","Error","charCodeAt","inline","escape","link","reflink","nolink","strong","em","br","del","ins","InlineLexer","Parser","regex","self","name","val","_inside","_href","out","FragmentNode","appendChild","TextNode","inLink","outputLink","codespan","image","childNode","attributes","codeNode","ElementNode","level","SELF_CLOSING","isOrdered","listitem","alt","reverse","tok","pop","peek","parseText","body","_body","_body2","_body3","MarkdownParser","fragment","e","message","getAST","toString","_stateToMarkdown","_slicedToArray","arr","Array","isArray","Symbol","iterator","_arr","_n","_d","_e","undefined","_s","_i","done","err","sliceIterator","TypeError","_createClass","defineProperties","props","descriptor","configurable","writable","Constructor","protoProps","staticProps","content","MarkupGenerator","generate","_draftJsUtils","BOLD","INLINE_STYLE","CODE","ITALIC","STRIKETHROUGH","UNDERLINE","contentState","instance","_classCallCheck","output","blocks","getBlockMap","toArray","totalBlocks","currentBlock","listItemCounts","processBlock","blockType","getType","BLOCK_TYPE","HEADER_ONE","insertLineBreaks","renderBlockContent","HEADER_TWO","HEADER_THREE","HEADER_FOUR","HEADER_FIVE","HEADER_SIX","UNORDERED_LIST_ITEM","blockDepth","getDepth","lastBlock","getLastBlock","lastBlockType","lastBlockDepth","canHaveDepth","ORDERED_LIST_ITEM","indent","repeat","_blockDepth","_lastBlock","_lastBlockType","_lastBlockDepth","_indent","count","getListItemCount","BLOCKQUOTE","index","prevBlock","getText","charMetaList","getCharacterList","getEntityRanges","map","_ref","_ref2","entityKey","_ref3","_ref4","style","encodeContent","has","entity","getEntity","ENTITY_TYPE","LINK","data","getData","url","escapeTitle","encodeURL","IMAGE","_data","markdown","element","_MarkdownParser2","_draftJsImportElement","stateFromElement","_stateFromElement","keys","forEach","_replaceTextWithMeta3","_replaceTextWithMeta4","_draftJs","_immutable","_Constants","NO_STYLE","OrderedSet","EMPTY_BLOCK","ContentBlock","genKey","UNSTYLED","characterList","List","LINE_BREAKS","SOFT_BREAK_PLACEHOLDER","DATA_ATTRIBUTE","ELEM_ATTR_MAP","a","rel","img","getEntityData","tagName","attrMap","_element$attributes$i","ElementToEntity","generator","createEntity","ContentGenerator","_this","inlineCreators","Style","Entity","mutability","contentStateForEntities","ContentState","createFromBlockArray","blockStack","blockList","processBlockElement","contentBlocks","_concatFragments","fragments","characterMeta","Seq","textFragment","concat","concatFragments","textFragments","includeEmptyBlock","_trimLeadingNewline","trimLeadingNewline","_collapseWhiteSpace","_trimLeadingSpace","trimLeadingSpace","_trimTrailingSpace","trimTrailingSpace","_replaceTextWithMeta","_replaceTextWithMeta2","collapseWhiteSpace","split","toList","Map","getEntityMap","blockTypes","ATOMIC","customBlockFn","nodeName","customBlock","isCustomType","getBlockTypeFromTagName","hasDepth","allowRender","SPECIAL_ELEMENTS","parent","styleStack","entityStack","childNodes","from","processNode","customInlineFn","customInline","add","styleSet","elementStyles","addStyleFromTagName","SELF_CLOSING_ELEMENTS","processText","node","nodeValue","charMetadata","CharacterMetadata","create","seq","Repeat","nodeType","NODE_TYPE_ELEMENT","_element","_tagName","INLINE_ELEMENTS","processInlineElement","NODE_TYPE_TEXT","processTextNode","getLastCreatedEntityKey","process","repeatSeq","result","subject","searchText","replaceText","searchTextLength","replaceTextLength","resultTextParts","resultCharMeta","lastEndIndex","abbr","area","audio","bdi","bdo","button","canvas","cite","command","datalist","dfn","embed","iframe","input","kbd","keygen","label","mark","meter","noscript","object","progress","q","ruby","s","samp","script","select","small","span","sub","sup","textarea","time","u","var","video","wbr","acronym","applet","basefont","big","font","isindex","strike","tt","base","col","colgroup","dl","head","hgroup","meta","ol","optgroup","option","param","table","tbody","tfoot","thead","tr","track","ul","dialog","dir","ProgressBar","_Component","_possibleConstructorReturn","_getPrototypeOf","setStepNumber","stepNumber","setState","state","defaultStepNumber","bind","_assertThisInitialized","icon","React","createRef","_inherits","_this2","functionalTotalSteps","totalSteps","defaultIcon","createElement","className","width","right","altText","path","ref","Component","defaultProps","Grid","numCol","layout","columns","gridItemCount","gridItems","Children","children","child","GridItem","gridClasses","classNames","nested-grid","isNestedGrid","ElementType","useDiv","pages","WHAT_TO_EXPECT","WHO_FOR","RECEIVED_CARE","NEW_PATIENT_INFO","NEW_PATIENT_ADDRESS","EXISTING_PATIENT_INFO","CONTACT_INFO","APPOINTMENT_INFO1","APPOINTMENT_INFO2","APPOINTMENT_PREFERENCES","APPOINTMENT_INFO_PROVIDER","APPOINTMENT_INFO_DAY_TIME","PAYMENT_METHOD","INSURANCE","POLICY_HOLDER","BILLING","BILLING_ADDRESS","OUT_OF_POCKET","REVIEW","PFA_APPOINTMENT","THANK_YOU_PFA_APPT","THANK_YOU_PFA","THANK_YOU_INSURANCE","ERROR_REVIEW","pathBase","window","location","pathname","endsWith","lastIndexOf","WEB_APPOINTMENT_ROOT","WEB_APPOINTMENT_ROOT_SLASH","WEB_APPOINTMENT_WHAT_TO_EXPECT_PAGE","WEB_APPOINTMENT_WHO_FOR_PAGE","WEB_APPOINTMENT_RECEIVED_CARE_PAGE","WEB_APPOINTMENT_NEW_PATIENT_INFO_PAGE","WEB_APPOINTMENT_NEW_PATIENT_ADDRESS_PAGE","WEB_APPOINTMENT_EXISTING_PATIENT_INFO_PAGE","WEB_APPOINTMENT_CONTACT_INFO_PAGE","WEB_APPOINTMENT_APPOINTMENT_INFO1_PAGE","WEB_APPOINTMENT_APPOINTMENT_INFO2_PAGE","WEB_APPOINTMENT_APPOINTMENT_PREFERENCES_PAGE","WEB_APPOINTMENT_APPOINTMENT_INFO_PROVIDER","WEB_APPOINTMENT_APPOINTMENT_INFO_DAY_TIME","WEB_APPOINTMENT_PAYMENT_METHOD","WEB_APPOINTMENT_INSURANCE","WEB_APPOINTMENT_POLICY_HOLDER","WEB_APPOINTMENT_BILLING","WEB_APPOINTMENT_BILLING_ADDRESS","WEB_APPOINTMENT_OUT_OF_POCKET","WEB_APPOINTMENT_REVIEW","WEB_APPOINTMENT_PFA_APPOINTMENT","WEB_APPOINTMENT_THANK_YOU_PFA_APPT","WEB_APPOINTMENT_THANK_YOU_PFA","WEB_APPOINTMENT_THANK_YOU_INSURANCE","WEB_APPOINTMENT_ERROR_REVIEW","DEFAULT_ICON","COMPLETED_ICON","completedIcon","PROXY_ESTABLISHED_NO_ICON","proxyEstablishedNoIcon","PROXY_ESTABLISHED_YES_ICON","proxyEstablishedYesIcon","SELF_ESTABLISHED_NO_ICON","selfEstablishedNoIcon","SELF_ESTABLISHED_YES_ICON","selfEstablishedYesIcon","ERROR_ICON","iconError","ORDER_OF_PAGES","determineIcon","pageName","forMe","patientSeenRecently","dataHasBeenCleared","acknowledgedWhatToExpect","WEBAPPOINTMENT_ACKNOWLEDGED_WHAT_TO_EXPECT","WEBAPPOINTMENT_SET_WHO_FOR","WEBAPPOINTMENT_SET_PATIENT_SEEN_RECENTLY","WEBAPPOINTMENT_SET_CONTACT_OVER_18","WEBAPPOINTMENT_SET_CONTACT_RELATION","WEBAPPOINTMENT_SET_CONTACT_FIRST_NAME","WEBAPPOINTMENT_SET_CONTACT_LAST_NAME","WEBAPPOINTMENT_SET_CONTACT_EMAIL","WEBAPPOINTMENT_SET_CONTACT_PHONE","WEBAPPOINTMENT_SET_PATIENT_FIRST_NAME","WEBAPPOINTMENT_SET_PATIENT_LAST_NAME","WEBAPPOINTMENT_SET_PATIENT_GENDER","WEBAPPOINTMENT_SET_PATIENT_MARITAL_STATUS","WEBAPPOINTMENT_SET_PATIENT_DOB","WEBAPPOINTMENT_SET_PATIENT_SSN","WEBAPPOINTMENT_SET_PATIENT_ADDRESS1","WEBAPPOINTMENT_SET_PATIENT_ADDRESS2","WEBAPPOINTMENT_SET_PATIENT_CITY","WEBAPPOINTMENT_SET_PATIENT_STATE","WEBAPPOINTMENT_SET_PATIENT_ZIP","WEBAPPOINTMENT_SET_PATIENT_EMAIL","WEBAPPOINTMENT_SET_PATIENT_PHONE","WEBAPPOINTMENT_SET_PATIENT_MRN","WEBAPPOINTMENT_SET_APPOINTMENT_REASON","WEBAPPOINTMENT_SET_APPOINTMENT_DIAGNOSIS","WEBAPPOINTMENT_SET_APPOINTMENT_LOCATION","WEBAPPOINTMENT_SET_APPOINTMENT_PROVIDER","WEBAPPOINTMENT_SET_APPOINTMENT_DEPARTMENT","WEBAPPOINTMENT_SET_APPOINTMENT_TYPE","WEBAPPOINTMENT_SET_APPOINTMENT_DAY","WEBAPPOINTMENT_SET_APPOINTMENT_TIME","WEBAPPOINTMENT_SET_APPOINTMENT_HAVE_REFERRING_PHYS","WEBAPPOINTMENT_SET_APPOINTMENT_REFERRING_FNAME","WEBAPPOINTMENT_SET_APPOINTMENT_REFERRING_LNAME","WEBAPPOINTMENT_SET_APPOINTMENT_REFERRING_PHONE","WEBAPPOINTMENT_SET_APPOINTMENT_NEED_SERVICES","WEBAPPOINTMENT_SET_APPOINTMENT_WHICH_SERVICE","WEBAPPOINTMENT_SET_APPOINTMENT_FOREIGN_LANGUAGE","WEBAPPOINTMENT_SET_PAYMENT_METHOD","WEBAPPOINTMENT_SET_INSURANCE_COMPANY","WEBAPPOINTMENT_SET_INSURANCE_POLICY_NUMBER","WEBAPPOINTMENT_SET_INSURANCE_POLICY_TYPE","WEBAPPOINTMENT_SET_INSURANCE_GROUP","WEBAPPOINTMENT_SET_INSURANCE_WHERE_TO_SEND","WEBAPPOINTMENT_SET_INSURANCE_HOLDER_RELATION","WEBAPPOINTMENT_SET_INSURANCE_HOLDER_FNAME","WEBAPPOINTMENT_SET_INSURANCE_HOLDER_LNAME","WEBAPPOINTMENT_SET_INSURANCE_HOLDER_DOB","WEBAPPOINTMENT_SET_INSURANCE_HOLDER_EMAIL","WEBAPPOINTMENT_SET_BILLING_RELATION","WEBAPPOINTMENT_SET_BILLING_FNAME","WEBAPPOINTMENT_SET_BILLING_LNAME","WEBAPPOINTMENT_SET_BILLING_DOB","WEBAPPOINTMENT_SET_BILLING_ADDRESS1","WEBAPPOINTMENT_SET_BILLING_ADDRESS2","WEBAPPOINTMENT_SET_BILLING_CITY","WEBAPPOINTMENT_SET_BILLING_STATE","WEBAPPOINTMENT_SET_BILLING_ZIP","WEBAPPOINTMENT_SET_REQUEST_RESULTS","WEBAPPOINTMENT_SET_PFA_CALLBACK_WINDOW_DISMISSED","WEBAPPOINTMENT_CLEAR_OUT_DATA","webAppointmentSetPatientFirstName","types","webAppointmentSetPatientLastName","webAppointmentSetPatientDob","webAppointmentSetPatientEmail","webAppointmentSetPatientPhone","webAppointmentSetAppointmentProvider","webAppointmentSetInsuranceWhereToSend","webAppointmentSetInsuranceHolderRelation","webAppointmentSetRequestResults","webAppointmentClearOutData","compareObjectKeys","ignoreCase","o1","o2","localeCompare","ArrangeableListInput","setItems","newOptions","validItems","filter","id","numberedItems","order","sort","unnumberedItems","items","_toConsumableArray","internalLink","selectItem","selectedItemId","moveItem","direction","itemIndex","findIndex","switchingItem","prevState","addItem","addedItem","find","removeItem","itemObject","splice","onRemove","buildArrow","indexToCheck","activeArrowSvg","iconArrowUpMedGray","iconArrowDownMedGray","onClick","arrowSvg","iconArrowUp","iconArrowDown","buildRemoveButton","hasRemoveButton","iconClose","getValue","newProps","isEditable","htmlFor","verticalSpacingClass","verticalSpacing","arrows","inputDisplay","itemText","Link","to","tabIndex","onBlur","navigator","userAgent","InputError","_Error","_getPrototypeOf2","_len","params","_key","apply","_wrapNativeSuper","TextInput","trim","required","patternMatch","patternError","patternMatchError","validate","inv","newErrorMessage","requiredError","validationErrorClass","validationError","contentWrapperClass","handleChange","persist","maxLength","parseInt","onChange","newValues","newValue","newSelectionStart","selectionStart","validateOnChange","handleBlur","validateOnBlur","handleKeyUp","onKeyUp","existingContent","selectedOption","prevProps","document","getElementById","needToValidate","selectionEnd","caretPos","elem","focus","createTextRange","range","move","setSelectionRange","activeElement","inputHelperText","helperText","inputInfoText","infoText","errorText","errorMessage","requiredFieldIndicator","numberMax","autoComplete","disabled","max","min","numberMin","minLength","placeholder","placeholderText","step","numberStep","createConfirmAlert","confirmAlertObject","confirmAlert","ButtonInput","args","requireConfirmation","fileUploadInput","click","iconClass","buttonWrapperClass","buttons","buttonContent","newWindow","fileInput","accept","fileTypes","file","files","BREAKPOINT_MD","FilterInput","setOptions","stateVariable","filterIndex","otherOption","selected","newState","selectOptions","formatOption","toggleOptionDisplay","calledState","optionDisplay","buildOptionList","optionListItems","allOptions","inputValue","alphabetize","optionListDisplayClass","hide-options","show-options","buildSelectedResults","selectedOptions","unselectOptions","buildInput","selectLimit","isMobile","buttonClasses","filter-input__drop-button--arrow-up","event","narrowFilters","updateWidth","newIsMobile","innerWidth","bp","noDupesSelectedOptions","prevOption","newSelectedOptions","optionObject","filterValueChange","unselectedOptions","unselectedOption","mobileBreakpoint","existingContentArray","addEventListener","removeEventListener","newAllOptions","mobileClass","optionList","selectedResults","showPills","onFocus","ArrangeableFilterInput","orderedList","filterValues","newItems","listValues","newItem","removedItem","filterInput","BULLET_CHART_TYPE","HORIZONTAL_BULLET_CHART_TYPE","LINE_CHART_TYPE","KAPLAN_MEIER_CHART_TYPE","STACKED_BULLET_CHART_TYPE","HORIZONTAL_STACKED_BULLET_CHART_TYPE","HORIZONTAL_CHART_TYPES","STACKED_CHART_TYPES","BAR_ZINGCHART_TYPE","HORIZONTAL_BAR_ZINGCHART_TYPE","BULLET_ZINGCHART_TYPE","HORIZONTAL_BULLET_ZINGCHART_TYPE","LINE_ZINGCHART_TYPE","VERTICAL_LINE_ZINGCHART_TYPE","MIXED_ZINGCHART_TYPE","HORIZONTAL_MIXED_ZINGCHART_TYPE","postRenderAdjustments","chart","zingChartExec","scaleYInfo","_setYArrowDetails","chartType","betterArrowDirection","bottom","arrowSpace","includes","height","x","y","setYArrowDetails","plotInfo","scaleXInfo","bottomOfLabel","chartData","addOverallBenchmark","mappedChartType","showLegend","benchmarkName","benchmarkValue","benchmarkColor","benchmarkTooltipText","plot","bar-width","barsSpaceLeft","barsSpaceRight","bar-space","benchmarkObject","values","marker","visible","scales","zIndex","line-color","line-width","legend-item","flat","legend-marker","show-line","yMinMaxBuilder","seriesValues","yMax","reduce","sum","series","parseFloat","largest","xAxisSum","ySteps","yDiff","yMin","yStepValue","min-value","max-value","dataBuilder","newChartData","chartTypeMap","black","grey","colorScheme","benchmarkColorScheme","fontFamily","seriesNames","seriesBenchmarkNames","xAxisLabels","seriesBenchmarks","xAxisLongestLength","gui","behaviors","enabled","context-menu","plotarea","margin-top","margin-left","margin-right","margin-bottom","tooltip","font-family","organizedData","numberOfSeries","dataRow","Math","ceil","fill","rowIndex","dataCell","cellIndex","formattedDataCell","isNaN","dataOrganizer","highestLen","currentString","currentStringLength","xAxisMobileWidth","floor","setXAxisMobileWidth","insertedBreaksObject","labels","xBreakHappens","insertBreaks","legend","toggle-action","adjust-layout","border-color","border-width","padding-top","padding-left","padding-bottom","padding-right","mediaRules","maxWidth","max-items","overflow","page-status","font-size","offset-y","page-on","size","page-off","scale-x","itemsOverlap","maxItems","xAxisLabel","color","wrap-text","wrapText","fontAngle","text-align","tick","scale-y","yAxisLabel","scaleX2","scaleY2","legendOnTop","mobileBP","arrowColor","fontColor","backgroundColor","borderColor","fontSize","addBetterArrow","aspect","stacked","isStacked","mobileFontSize","rule","placement","showZeroes","overallBenchmark","seriesName","seriesObject","benchmarkValues","hasOverallBenchmark","background-color","goal","goals","buildSeriesObject","buildBenchmarkLegendObject","Chart","setChartData","chartFunctions","chartInputValues","zingchart","setStateObject","ZingChart","InputLabel","requiredFieldChar","requiredFieldIndicatorStyle","potentialRequiredFieldIndicator","position","Fragment","CheckboxInput","isChecked","checked","checkbox","checkboxWrapperClassNames","checkboxWrapperClassName","heap-ignore","checkedContent","SelectBox","selectedValue","doValidation","existingContentObject","firstOptionValue","optionsList","selectedValueName","selectedValueObject","ImageInput","newImageObject","hasGraphicCheckbox","graphicCheckbox","showInputsInReadOnly","imageDisplay","AddTablePrompt","inputListArray","formId","handleCancel","promptContent","isShowing","InputList","inputs","onSubmit","receivedValues","rows","handleSubmit","GridInputControls","GridInput","numberToLetter","number","gridData","gridDataRow","j","inputValues","toggleAddTablePrompt","addTablePromptShowing","confirmAddTable","rowCount","columnCount","addColumn","addRow","confirmDelete","rowOrColumn","confirmFunction","deleteRow","deleteColumn","displayIndex","deleteTable","row","tempInputValues","calcColumns","current","closePanels","_objectSpread","controlButtonOptions","toolbar","tableRows","_loop","some","tableRowElements","cell","_loop2","existingCellContent","CellType","readOnlyToggleClass","read-only","TextArea","labelText","readOnlyContent","textAreaDisplay","InputUpload","uploadFile","reader","FileReader","onload","uploadedFileText","readAsText","buttonDisplay","buttonLabel","parsedExistingContent","hasGrid","Papa","inputDisplayProps","unparse","processedContent","ChartInput","valuesObject","property","addChartValuesToObject","updateType","tempChartInputValues","currentInputValues","tempHasKeys","updateChart","imageValues","imageURL","caption","imageCaption","imageAlt","isGraphic","imageIsGraphic","savedChartInputValues","savedType","newChartInputValues","newType","chartViewValues","chartViewType","overallBenchmarkCheckbox","chartFields","typeOptions","chartHeight","calcHeight","chartDisplay","showChart","chartInputDisplay","CheckboxInputList","errors","checkboxProps","cbProp","error","unshift","checkboxes","isCbChecked","selectedIds","groupName","checkedCsv","propIndex","checkboxListContent","DateRangeFilterInput","newDateRangeObject","VideoInput","selectedValues","inputId","newVideoObject","adjustPreviewHeight","theDiv","previewDivId","theNewHeight","offsetWidth","setAttribute","videoId","embedData","targetId","wid","uiconf_id","flashvars","streamerType","IframeCustomPluginCss1","entry_id","playlistAPI","containerPosition","MinClips","kpl0Id","kWidget","loadVideo","focusAtSetCaret","caretPosition","preview","random","FeaturedMediaInput","mediaType","propName","updateMediaType","mediaTypeOptions","LinkInput","newLinkContentObject","RadioInputList","radioId","selectedId","radioButtons","radioProps","radioProp","radio","radioWrapperClassNames","radioWrapperClassName","checkedRadio","checkedRadioLabel","radioInputContent","Image","data-offset-key","offsetKey","StyleControls","inlineOptions","blockOptions","toggleOptions","styleControlsClasses","editorState","selection","getSelection","getCurrentContent","getBlockForKey","getStartKey","currentStyle","getCurrentInlineStyle","rtl","textDirection","StyleButton","isActive","onToggle","onInlineToggle","onBlockToggle","activeLabel","onInactiveToggle","onActiveToggle","preventDefault","ImagePrompt","imageUrl","imageAltText","LinkPrompt","_Component2","_this3","linkText","linkUrl","_this4","promptForText","CharactersPrompt","character","SupSubPrompt","_Component3","_this5","characters","scriptedCharacters","characterMap","c","d","f","g","h","k","m","n","o","r","t","v","w","z","0","1","2","3","4","5","6","7","8","9","-","—","–"," ","newString","convertToSuperscript","+","(",")","convertToSubscript","_this6","getValues","RichTextEditor","getPlainText","contentInMarkdown","startsWith","isHandlingBlur","stateToMarkdown","newMarkdownContent","markdownContent","handlePastedText","pastedText","pastedHTML","newContentState","pastedBlockMap","textLengthBeforeCursor","getFocusOffset","blocksFromHTML","convertFromHTML","blockMap","createFromText","Modifier","replaceWithFragment","insertedEditorState","EditorState","currentCursorKey","selectionBefore","focusKey","linkEditorState","addLinkStyles","cursorEditorState","pastedBlockMapArray","pastedBlockMapLength","cursorToBlockPosition","contentBlockArray","getBlocksAsArray","newCursorKeyIndex","newCursorKey","lastPastedBlock","handleReturn","shiftKey","RichUtils","insertSoftNewline","onTab","toggleBlockType","toggleInlineStyle","inlineStyle","toggleLinkPrompt","linkPromptShowing","closeOthers","imagePromptShowing","charactersPromptShowing","supSubPromptShowing","promptForLink","linkStyle","isCollapsed","confirmLink","toggleLink","newEditorState","insertText","of","spaceEditorState","removeLink","toggleStyle","removeEntity","cancelLink","editorRef","linkBlocks","findLinkEntities","start","end","addStylesToBlockRanges","moveSelectionToEnd","toggleImagePrompt","promptForImage","confirmImage","initialEditorState","initialContentState","initialSelection","initialSelectionOffset","getStartOffset","initialSelectionBlockKey","isAtBeginningOfBlock","isAtEndOfBlock","getLength","isBlankBlock","hasFollowingBlock","getBlockAfter","finalEditorState","imageEditorState","addImageEntity","trailingBlockObject","insertBreak","blockKey","precedingBlockObject","getKeyBefore","cancelImage","toggleCharactersPrompt","insertCharacters","confirmCharacters","cancelCharacters","toggleSupSubPrompt","confirmSupSub","cancelSupSub","decorator","CompositeDecorator","strategy","component","findImageEntities","createWithContent","stateFromMarkdown","isContentSet","styledEditorState","noBlanksEditorState","removeBlankBlocks","Editor","readOnly","textDirectionality","contentBlock","callback","findEntityRanges","splitOrBlock","splitContentState","splitBlock","splitContentStateFinal","newPosition","blockSelectionState","SelectionState","createEmpty","merge","anchorKey","anchorOffset","focusOffset","forceSelection","applyEntity","blockObjects","blockObject","getInlineStyleAt","oldEditorState","hasFocus","newContentBlockArray","ToggleInput","inputsObj","ArrayOfVisibleInputs","valuesObj","allAreZero","every","isEmptyObject","constructor","handleTextChange","valueAsNumber","arrayOfVisibleInputs","selectInputList","multiInputs","input2","Typeahead","buildListAllView","closeListAllView","viewBox","xmlns","listAllViewActive","listAllView","hasListAllView","openListAllView","passedInputs","columnsValues","fieldsetValues","convertToElement","keyName","onSearch","toggleVal","returnsSingleOption","buildColumn","column","inputElements","isFieldset","fieldsetLegend","fieldsetColumns","handleInputs","stopPropagation","fieldValues","gridItemArray","formClasses","inline-list","isInlineList","gridColumns","TO_MY_ADDRESS","TO_PATIENTS_ADDRESS","SOMEWHERE_ELSE","ME","THE_PATIENT","ASL","NOT_PROVIDED","nextPage","currentPage","routes","paymentMethod","insurance","whereToSend","strings","policyHolder","relation","appointment","contactProptype","PropTypes","shape","over18","bool","string","firstName","lastName","email","phone","patientPropType","dob","gender","maritalStatus","ssn","address1","address2","city","zip","defaultAppointment","reason","diagnosis","department","provider","day","translationInterpretationServices","needServices","whichService","language","referringPhysician","haveReferringPhys","billingPropType","defaultInsurance","company","policyNumber","policyType","group","billing","insurancePropType","defaultState","contact","patient","pfaCallbackWindowDismissed","requestResults","appointmentProptype","WhatToExpectPage","search","URLSearchParams","physicianFirstName","physicianLastName","physicianSuffix","physicianFullName","setAppointmentProviderFromURL","onpopstate","inputlist","history","goBack","webAppointmentAcknowledgedWhatToExpect","whatToExpect","withRouter","connect","ownProps","webAppointmentForm","dispatch","webAppointmentActions","WhoForPage","backNext","webAppointmentSetForMe","ReceivedCarePage","person","webAppointmentSetPatientSeenRecently","NUMERIC_PHONE_NUMBER_REGEX","EMAIL_REGEX","FOUR_DIGITS","ZIP_CODE_REGEX","DATE_OF_BIRTH_REGEX","currYear","Date","getFullYear","earliestYear","generateValidYearRegExp","formatPhone","oldValue","oldSelectionStart","pattern","currentChar","newLength","formatZipString","oldZipString","formatCityString","oldCityString","dropDownDefault","politeDropDownDefault","appointmentApiUrl","myChartPfaScheduleUrl","ContactInfoPage","emptyChoice","subtitle","webAppointmentSetContactRelation","ev","webAppointmentSetContactFirstName","webAppointmentSetContactLastName","formattedEmail","webAppointmentSetContactEmail","formatData","webAppointmentSetContactPhone","isValid","dobFormatting","thisState","func","which","len","rerender","NewPatientInfoPage","fourdigits","webAppointmentSetPatientGender","webAppointmentSetPatientMaritalStatus","MYAPI_KEY","REACT_APP_VIA_MYAPI_KEY","apiGet","apiUrl","user","appName","restrictForPublishers","restrictForContributors","skipKey","headers","role","permissions","userId","Id","Promise","resolve","reject","protocol","host","axios","then","response","theData","catch","NewPatientAddressPhonePage","states","getStates","country","console","log","Value","fillStates","valid","webAppointmentSetPatientAddress1","webAppointmentSetPatientAddress2","formattedCity","webAppointmentSetPatientCity","webAppointmentSetPatientState","formattedZip","webAppointmentSetPatientZip","ExistingPatientInfoPage","currChar","webAppointmentSetPatientSsn","AppointmentInfo1Page","webAppointmentSetAppointmentReason","webAppointmentSetAppointmentDiagnosis","AppointmentInfo2Page","languages","webAppointmentSetAppointmentForeignLanguage","webAppointmentSetAppointmentNeedServices","webAppointmentSetAppointmentWhichService","webAppointmentSetAppointmentHaveReferringPhys","webAppointmentSetAppointmentReferringPhysFName","webAppointmentSetAppointmentReferringPhysLName","webAppointmentSetAppointmentReferringPhysPhone","apiPost","skipAuthAndUserToken","contentType","localStorage","getItem","post","AppointmentPreferencesPage","specialtiesAndDepartments","locations","getDepartments","webappointmentReactParameters","checkGuidFormat","JSON","stringify","depts","getLocationsForDepartment","deptUid","DepartmentUid","guids","guid","array","Text","d1","d2","deptGuid","fillLocations","fillDepartments","deptName","webAppointmentSetAppointmentDepartment","locName","webAppointmentSetAppointmentLocation","AppointmentProviderPage","webAppointmentSetAppointmentType","AppointmentDayTimePage","newDays","webAppointmentSetAppointmentDay","newTimes","webAppointmentSetAppointmentTime","PaymentMethodPage","webAppointmentSetPaymentMethod","InsurancePage","possessive","webAppointmentSetInsuranceCompany","webAppointmentSetInsurancePolicyType","webAppointmentSetInsurancePolicyNumber","webAppointmentSetInsuranceGroup","BillingPage","BillingAddressPage","_this$props$insurance","webAppointmentSetBillingRelation","webAppointmentSetBillingFirstName","webAppointmentSetBillingLastName","webAppointmentSetBillingDob","setItem","isCheckedState","possessiveSubtitle","shouldShowFirstFewFields","setChecked","_this3$props$insuranc","webAppointmentSetBillingAddress1","webAppointmentSetBillingAddress2","webAppointmentSetBillingCity","webAppointmentSetBillingState","webAppointmentSetBillingZip","PolicyHolderPage","webAppointmentSetInsuranceHolderFname","webAppointmentSetInsuranceHolderLname","webAppointmentSetInsuranceHolderDob","webAppointmentSetInsuranceHolderEmail","OutOfPocketPage","paragraph2","ReviewModalWindow","handleClose","closeFunc","handleRetry","onRetry","isVisible","PreloaderOverlay","preloaderGif","_regeneratorRuntime","asyncIterator","toStringTag","define","wrap","Generator","Context","makeInvokeMethod","tryCatch","arg","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","defineIteratorMethods","_invoke","AsyncIterator","invoke","__await","callInvokeWithMethodAndArg","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","resultName","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","displayName","isGeneratorFunction","setPrototypeOf","__proto__","awrap","async","prev","stop","rval","handle","complete","finish","delegateYield","getSubmissionMessage","attempt","messages","SubmissionCycle","onSuccess","_useState","useState","_useState2","attempts","setAttempts","_useState3","_useState4","submissionMessage","setSubmissionMessage","_useState5","_useState6","isLoading","setIsLoading","_useState7","_useState8","isModalVisible","setIsModalVisible","_useState9","_useState10","submissionSucceeded","setSubmissionSucceeded","useHistory","useEffect","submitForm","handleSubmissionFailure","currentAttempt","newAttempt","handleFinalFailure","_asyncToGenerator","_callee","success","_args","_context","setTimeout","t0","loadState","serializedState","sessionStorage","clearState","ReviewPage","startSubmissionCycle","isSubmitting","handleSuccess","results","date","days","times","daysArray","wantsFirstAvailableTime","timeOfDay","wantedDays","formattedDays","formattedFirstName","toUpperCase","formattedLastName","_this$props$state","bodyCopy","action","isOhioOrNevada","shouldShowPolicyHolderFields","shouldShowBillingName","shouldShowBillingAddr","shouldShowBillingDob","inputList","formatPhoneNumber","formatDate","formatDaysAndTimes","determinePolicyHolderString","determinePolicyHolderAddressString","inputListNoData","PfaAppointmentPage","displayWindow","popup","windowObj","open","webAppointmentConstants","checkWindow","closed","webAppointmentPfaCallbackWindowDismissed","ThankYouPfaAppointmentPage","oldTitle","ThankYouPfaPage","isFlorida","ThankYouInsurancePage","ErrorReviewPage","App","setProgressBarOnUrl","progressBar","urlPath","setProgressBarStep","_step","_iterator","_createForOfIteratorHelper","entries","determineProgress","prevPage","root","scrollIntoView","behavior","webAppointmentFormState","Switch","Route","exact","Redirect","rootReducer","combineReducers","mrn","store","createStore","applyMiddleware","thunk","reduxImmutableStateInvariant","subscribe","saveState","getState","ReactDOM","render","Provider","BrowserRouter"],"mappings":"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","file":"static/js/main.16c3f078.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/default.7d832c73.svg\";","/*\r\n\r\n From: https://www.npmjs.com/package/draft-js-import-element\r\n Version used: 1.2.1\r\n Last modified: 11.30.2017\r\n Things modified:\r\n - Removed \"use strict\" (only needed in npm package)\r\n*/\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\n\r\nvar _stateFromMarkdown = require('./stateFromMarkdown');\r\n\r\nObject.defineProperty(exports, 'stateFromMarkdown', {\r\n enumerable: true,\r\n get: function get() {\r\n return _interopRequireDefault(_stateFromMarkdown).default;\r\n }\r\n});\r\n\r\nvar _MarkdownParser = require('./MarkdownParser');\r\n\r\nObject.defineProperty(exports, 'MarkdownParser', {\r\n enumerable: true,\r\n get: function get() {\r\n return _interopRequireDefault(_MarkdownParser).default;\r\n }\r\n});\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","/* eslint-disable */\r\n/*\r\n\r\n From: https://www.npmjs.com/package/draft-js-import-element\r\n Version used: 1.2.1\r\n Last modified: 11.30.2017\r\n Things modified:\r\n - Removed \"use strict\" (only needed in npm package)\r\n - Added eslint disable\r\n - Adds in this PR to fix code block rendering https://github.com/sstur/draft-js-utils/pull/152\r\n*/\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\n\r\nvar _syntheticDom = require('synthetic-dom');\r\n\r\nvar hasOwnProperty = Object.prototype.hasOwnProperty; /**\r\n * Ported from:\r\n * https://github.com/chjj/marked/blob/49b7eaca/lib/marked.js\r\n * TODO:\r\n * Use ES6 classes\r\n * Add flow annotations\r\n */\r\n/* eslint-disable no-spaced-func */\r\n\r\nvar assign = Object.assign || function (obj) {\r\n var i = 1;\r\n for (; i < arguments.length; i++) {\r\n var target = arguments[i];\r\n for (var key in target) {\r\n if (hasOwnProperty.call(target, key)) {\r\n obj[key] = target[key];\r\n }\r\n }\r\n }\r\n return obj;\r\n};\r\n\r\nvar noop = function noop() {};\r\nnoop.exec = noop;\r\n\r\nvar defaults = {\r\n gfm: true,\r\n breaks: false,\r\n pedantic: false,\r\n smartLists: false,\r\n silent: false,\r\n langPrefix: 'lang-',\r\n renderer: new Renderer(),\r\n xhtml: false\r\n};\r\n\r\n/**\r\n * Block-Level Grammar\r\n */\r\n\r\nvar block = {\r\n newline: /^\\n+/,\r\n code: /^( {4}[^\\n]+\\n*)+/,\r\n fences: noop,\r\n hr: /^( *[-*_]){3,} *(?:\\n+|$)/,\r\n heading: /^ *(#{1,6}) *([^\\n]+?) *#* *(?:\\n+|$)/,\r\n nptable: noop,\r\n lheading: /^([^\\n]+)\\n *(=|-){2,} *(?:\\n+|$)/,\r\n blockquote: /^( *>[^\\n]+(\\n(?!def)[^\\n]+)*\\n*)+/,\r\n list: /^( *)(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?!\\1bull )\\n*|\\s*$)/,\r\n def: /^ *\\[([^\\]]+)\\]: *]+)>?(?: +[\"(]([^\\n]+)[\")])? *(?:\\n+|$)/,\r\n paragraph: /^((?:[^\\n]+\\n?(?!hr|heading|lheading|blockquote|def))+)\\n*/,\r\n text: /^[^\\n]+/\r\n};\r\n\r\nblock.bullet = /(?:[*+-]|\\d+\\.)/;\r\nblock.item = /^( *)(bull) [^\\n]*(?:\\n(?!\\1bull )[^\\n]*)*/;\r\nblock.item = replace(block.item, 'gm')(/bull/g, block.bullet)();\r\n\r\nblock.list = replace(block.list)(/bull/g, block.bullet)('hr', '\\\\n+(?=\\\\1?(?:[-*_] *){3,}(?:\\\\n+|$))')('def', '\\\\n+(?=' + block.def.source + ')')();\r\n\r\nblock.blockquote = replace(block.blockquote)('def', block.def)();\r\n\r\nblock.paragraph = replace(block.paragraph)('hr', block.hr)('heading', block.heading)('lheading', block.lheading)('blockquote', block.blockquote)('def', block.def)();\r\n\r\n/**\r\n * Normal Block Grammar\r\n */\r\n\r\nblock.normal = assign({}, block);\r\n\r\n/**\r\n * GFM Block Grammar\r\n */\r\n\r\nblock.gfm = assign({}, block.normal, {\r\n fences: /^ *(`{3,}|~{3,})[ \\.]*(\\S+)? *\\n([\\s\\S]+?)\\s*\\1 *(?:\\n+|$)/,\r\n paragraph: /^/,\r\n heading: /^ *(#{1,6}) +([^\\n]+?) *#* *(?:\\n+|$)/\r\n});\r\n\r\nblock.gfm.paragraph = replace(block.paragraph)('(?!', '(?!' + block.gfm.fences.source.replace('\\\\1', '\\\\2') + '|' + block.list.source.replace('\\\\1', '\\\\3') + '|')();\r\n\r\n/**\r\n * Block Lexer\r\n */\r\n\r\nfunction Lexer(options) {\r\n this.tokens = [];\r\n this.tokens.links = {};\r\n this.options = assign({}, options || defaults);\r\n this.rules = block.normal;\r\n\r\n if (this.options.gfm) {\r\n this.rules = block.gfm;\r\n }\r\n}\r\n\r\n/**\r\n * Expose Block Rules\r\n */\r\n\r\nLexer.rules = block;\r\n\r\n/**\r\n * Static Lex Method\r\n */\r\n\r\nLexer.parse = function (src, options) {\r\n var lexer = new Lexer(options);\r\n return lexer.parse(src);\r\n};\r\n\r\n/**\r\n * Preprocessing\r\n */\r\n\r\nLexer.prototype.parse = function (src) {\r\n src = src.replace(/\\r\\n|\\r/g, '\\n').replace(/\\t/g, ' ').replace(/\\u00a0/g, ' ').replace(/\\u2424/g, '\\n');\r\n\r\n return this.token(src, true);\r\n};\r\n\r\n/**\r\n * Lexing\r\n */\r\n\r\nLexer.prototype.token = function (src, top, bq) {\r\n var next;\r\n var loose;\r\n var cap;\r\n var bull;\r\n var b;\r\n var item;\r\n var space;\r\n var i;\r\n var l;\r\n\r\n src = src.replace(/^ +$/gm, '');\r\n\r\n while (src) {\r\n // newline\r\n if (cap = this.rules.newline.exec(src)) {\r\n src = src.substring(cap[0].length);\r\n if (cap[0].length > 1) {\r\n this.tokens.push({\r\n type: 'space'\r\n });\r\n }\r\n }\r\n\r\n // code\r\n if (cap = this.rules.code.exec(src)) {\r\n src = src.substring(cap[0].length);\r\n cap = cap[0].replace(/^ {4}/gm, '');\r\n this.tokens.push({\r\n type: 'code',\r\n text: !this.options.pedantic ? cap.replace(/\\n+$/, '') : cap\r\n });\r\n continue;\r\n }\r\n\r\n // fences (gfm)\r\n if (cap = this.rules.fences.exec(src)) {\r\n src = src.substring(cap[0].length);\r\n this.tokens.push({\r\n type: 'code',\r\n lang: cap[2],\r\n text: cap[3]\r\n });\r\n continue;\r\n }\r\n\r\n // heading\r\n if (cap = this.rules.heading.exec(src)) {\r\n src = src.substring(cap[0].length);\r\n this.tokens.push({\r\n type: 'heading',\r\n depth: cap[1].length,\r\n text: cap[2]\r\n });\r\n continue;\r\n }\r\n\r\n // lheading\r\n if (cap = this.rules.lheading.exec(src)) {\r\n src = src.substring(cap[0].length);\r\n this.tokens.push({\r\n type: 'heading',\r\n depth: cap[2] === '=' ? 1 : 2,\r\n text: cap[1]\r\n });\r\n continue;\r\n }\r\n\r\n // hr\r\n if (cap = this.rules.hr.exec(src)) {\r\n src = src.substring(cap[0].length);\r\n this.tokens.push({\r\n type: 'hr'\r\n });\r\n continue;\r\n }\r\n\r\n // blockquote\r\n if (cap = this.rules.blockquote.exec(src)) {\r\n src = src.substring(cap[0].length);\r\n\r\n this.tokens.push({\r\n type: 'blockquote_start'\r\n });\r\n\r\n cap = cap[0].replace(/^ *> ?/gm, '');\r\n\r\n // Pass `top` to keep the current\r\n // \"toplevel\" state. This is exactly\r\n // how markdown.pl works.\r\n this.token(cap, top, true);\r\n\r\n this.tokens.push({\r\n type: 'blockquote_end'\r\n });\r\n\r\n continue;\r\n }\r\n\r\n // list\r\n if (cap = this.rules.list.exec(src)) {\r\n src = src.substring(cap[0].length);\r\n bull = cap[2];\r\n\r\n this.tokens.push({\r\n type: 'list_start',\r\n ordered: bull.length > 1\r\n });\r\n\r\n // Get each top-level item.\r\n cap = cap[0].match(this.rules.item);\r\n\r\n next = false;\r\n l = cap.length;\r\n i = 0;\r\n\r\n for (; i < l; i++) {\r\n item = cap[i];\r\n\r\n // Remove the list item's bullet\r\n // so it is seen as the next token.\r\n space = item.length;\r\n item = item.replace(/^ *([*+-]|\\d+\\.) +/, '');\r\n\r\n // Outdent whatever the\r\n // list item contains. Hacky.\r\n if (~item.indexOf('\\n ')) {\r\n space -= item.length;\r\n item = !this.options.pedantic ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') : item.replace(/^ {1,4}/gm, '');\r\n }\r\n\r\n // Determine whether the next list item belongs here.\r\n // Backpedal if it does not belong in this list.\r\n if (this.options.smartLists && i !== l - 1) {\r\n b = block.bullet.exec(cap[i + 1])[0];\r\n if (bull !== b && !(bull.length > 1 && b.length > 1)) {\r\n src = cap.slice(i + 1).join('\\n') + src;\r\n i = l - 1;\r\n }\r\n }\r\n\r\n // Determine whether item is loose or not.\r\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\r\n // for discount behavior.\r\n loose = next || /\\n\\n(?!\\s*$)/.test(item);\r\n if (i !== l - 1) {\r\n next = item.charAt(item.length - 1) === '\\n';\r\n if (!loose) {\r\n loose = next;\r\n }\r\n }\r\n\r\n this.tokens.push({\r\n type: loose ? 'loose_item_start' : 'list_item_start'\r\n });\r\n\r\n // Recurse.\r\n this.token(item, false, bq);\r\n\r\n this.tokens.push({\r\n type: 'list_item_end'\r\n });\r\n }\r\n\r\n this.tokens.push({\r\n type: 'list_end'\r\n });\r\n\r\n continue;\r\n }\r\n\r\n // def\r\n if (!bq && top && (cap = this.rules.def.exec(src))) {\r\n src = src.substring(cap[0].length);\r\n this.tokens.links[cap[1].toLowerCase()] = {\r\n href: cap[2],\r\n title: cap[3]\r\n };\r\n continue;\r\n }\r\n\r\n // top-level paragraph\r\n if (top && (cap = this.rules.paragraph.exec(src))) {\r\n src = src.substring(cap[0].length);\r\n this.tokens.push({\r\n type: 'paragraph',\r\n text: cap[1].charAt(cap[1].length - 1) === '\\n' ? cap[1].slice(0, -1) : cap[1]\r\n });\r\n continue;\r\n }\r\n\r\n // text\r\n if (cap = this.rules.text.exec(src)) {\r\n // Top-level should never reach here.\r\n src = src.substring(cap[0].length);\r\n this.tokens.push({\r\n type: 'text',\r\n text: cap[0]\r\n });\r\n continue;\r\n }\r\n\r\n if (src) {\r\n throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));\r\n }\r\n }\r\n\r\n return this.tokens;\r\n};\r\n\r\n/**\r\n * Inline-Level Grammar\r\n */\r\n\r\nvar inline = {\r\n escape: /^\\\\([\\\\`*{}\\[\\]()#+\\-.!_>])/,\r\n link: /^!?\\[(inside)\\]\\(href\\)/,\r\n reflink: /^!?\\[(inside)\\]\\s*\\[([^\\]]*)\\]/,\r\n nolink: /^!?\\[((?:\\[[^\\]]*\\]|[^\\[\\]])*)\\]/,\r\n strong: /^__([\\s\\S]+?)__(?!_)|^\\*\\*([\\s\\S]+?)\\*\\*(?!\\*)/,\r\n em: /^\\b_((?:__|[\\s\\S])+?)_\\b|^\\*((?:\\*\\*|[\\s\\S])+?)\\*(?!\\*)/,\r\n code: /^(`+)\\s*([\\s\\S]*?[^`])\\s*\\1(?!`)/,\r\n br: /^ {2,}\\n(?!\\s*$)/,\r\n del: noop,\r\n ins: noop,\r\n text: /^[\\s\\S]+?(?=[\\\\?(?:\\s+['\"]([\\s\\S]*?)['\"])?\\s*/;\r\n\r\ninline.link = replace(inline.link)('inside', inline._inside)('href', inline._href)();\r\n\r\ninline.reflink = replace(inline.reflink)('inside', inline._inside)();\r\n\r\n/**\r\n * Normal Inline Grammar\r\n */\r\n\r\ninline.normal = assign({}, inline);\r\n\r\n/**\r\n * Pedantic Inline Grammar\r\n */\r\n\r\ninline.pedantic = assign({}, inline.normal, {\r\n strong: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\r\n em: /^_(?=\\S)([\\s\\S]*?\\S)_(?!_)|^\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)/\r\n});\r\n\r\n/**\r\n * GFM Inline Grammar\r\n */\r\n\r\ninline.gfm = assign({}, inline.normal, {\r\n escape: replace(inline.escape)('])', '~|])')(),\r\n del: /^~~(?=\\S)([\\s\\S]*?\\S)~~/,\r\n ins: /^\\+\\+(?=\\S)([\\s\\S]*?\\S)\\+\\+/,\r\n text: replace(inline.text)(']|', '~+]|')()\r\n});\r\n\r\n/**\r\n * GFM + Line Breaks Inline Grammar\r\n */\r\n\r\ninline.breaks = assign({}, inline.gfm, {\r\n br: replace(inline.br)('{2,}', '*')(),\r\n text: replace(inline.gfm.text)('{2,}', '*')()\r\n});\r\n\r\n/**\r\n * Inline Lexer & Compiler\r\n */\r\n\r\nfunction InlineLexer(links, options) {\r\n this.options = assign({}, options || defaults);\r\n this.links = links;\r\n this.rules = inline.normal;\r\n this.renderer = this.options.renderer || new Renderer();\r\n this.renderer.options = this.options;\r\n\r\n if (!this.links) {\r\n throw new Error('Tokens array requires a `links` property.');\r\n }\r\n\r\n if (this.options.gfm) {\r\n if (this.options.breaks) {\r\n this.rules = inline.breaks;\r\n } else {\r\n this.rules = inline.gfm;\r\n }\r\n } else if (this.options.pedantic) {\r\n this.rules = inline.pedantic;\r\n }\r\n}\r\n\r\n/**\r\n * Expose Inline Rules\r\n */\r\n\r\nInlineLexer.rules = inline;\r\n\r\n/**\r\n * Static Lexing/Compiling Method\r\n */\r\n\r\nInlineLexer.parse = function (src, links, options) {\r\n var inline = new InlineLexer(links, options);\r\n return inline.parse(src);\r\n};\r\n\r\n/**\r\n * Lexing/Compiling\r\n */\r\n\r\nInlineLexer.prototype.parse = function (src) {\r\n var out = new _syntheticDom.FragmentNode();\r\n var link;\r\n var cap;\r\n\r\n while (src) {\r\n // escape\r\n if (cap = this.rules.escape.exec(src)) {\r\n src = src.substring(cap[0].length);\r\n out.appendChild(new _syntheticDom.TextNode(cap[1]));\r\n continue;\r\n }\r\n\r\n // link\r\n if (cap = this.rules.link.exec(src)) {\r\n src = src.substring(cap[0].length);\r\n this.inLink = true;\r\n out.appendChild(this.outputLink(cap, { href: cap[2], title: cap[3] }));\r\n this.inLink = false;\r\n continue;\r\n }\r\n\r\n // reflink, nolink\r\n if ((cap = this.rules.reflink.exec(src)) || (cap = this.rules.nolink.exec(src))) {\r\n src = src.substring(cap[0].length);\r\n link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\r\n link = this.links[link.toLowerCase()];\r\n if (!link || !link.href) {\r\n out.appendChild(new _syntheticDom.TextNode(cap[0].charAt(0)));\r\n src = cap[0].substring(1) + src;\r\n continue;\r\n }\r\n this.inLink = true;\r\n out.appendChild(this.outputLink(cap, link));\r\n this.inLink = false;\r\n continue;\r\n }\r\n\r\n // strong\r\n if (cap = this.rules.strong.exec(src)) {\r\n src = src.substring(cap[0].length);\r\n out.appendChild(this.renderer.strong(this.parse(cap[2] || cap[1])));\r\n continue;\r\n }\r\n\r\n // em\r\n if (cap = this.rules.em.exec(src)) {\r\n src = src.substring(cap[0].length);\r\n out.appendChild(this.renderer.em(this.parse(cap[2] || cap[1])));\r\n continue;\r\n }\r\n\r\n // code\r\n if (cap = this.rules.code.exec(src)) {\r\n src = src.substring(cap[0].length);\r\n out.appendChild(this.renderer.codespan(cap[2]));\r\n continue;\r\n }\r\n\r\n // br\r\n if (cap = this.rules.br.exec(src)) {\r\n src = src.substring(cap[0].length);\r\n out.appendChild(this.renderer.br());\r\n continue;\r\n }\r\n\r\n // del (gfm)\r\n if (cap = this.rules.del.exec(src)) {\r\n src = src.substring(cap[0].length);\r\n out.appendChild(this.renderer.del(this.parse(cap[1])));\r\n continue;\r\n }\r\n\r\n // ins (gfm extended)\r\n if (cap = this.rules.ins.exec(src)) {\r\n src = src.substring(cap[0].length);\r\n out.appendChild(this.renderer.ins(this.parse(cap[1])));\r\n continue;\r\n }\r\n\r\n // text\r\n if (cap = this.rules.text.exec(src)) {\r\n src = src.substring(cap[0].length);\r\n out.appendChild(this.renderer.text(new _syntheticDom.TextNode(cap[0])));\r\n continue;\r\n }\r\n\r\n if (src) {\r\n throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));\r\n }\r\n }\r\n\r\n return out;\r\n};\r\n\r\n/**\r\n * Compile Link\r\n */\r\n\r\nInlineLexer.prototype.outputLink = function (cap, link) {\r\n var href = link.href;\r\n var title = link.title;\r\n\r\n return cap[0].charAt(0) !== '!' ? this.renderer.link(href, title, this.parse(cap[1])) : this.renderer.image(href, title, cap[1]);\r\n};\r\n\r\n/**\r\n * Renderer\r\n */\r\n\r\nfunction Renderer(options) {\r\n this.options = options || {};\r\n}\r\n\r\nRenderer.prototype.code = function (childNode, lang) {\r\n var attributes = [];\r\n if (lang) {\r\n attributes.push({ name: 'class', value: this.options.langPrefix + lang });\r\n }\r\n var codeNode = new _syntheticDom.ElementNode('code', attributes, [childNode]);\r\n return new _syntheticDom.ElementNode('pre', [], [codeNode]);\r\n};\r\n\r\nRenderer.prototype.blockquote = function (childNode) {\r\n return new _syntheticDom.ElementNode('blockquote', [], [childNode]);\r\n};\r\n\r\nRenderer.prototype.heading = function (childNode, level) {\r\n return new _syntheticDom.ElementNode('h' + level, [], [childNode]);\r\n};\r\n\r\nRenderer.prototype.hr = function () {\r\n return new _syntheticDom.ElementNode('hr', [], _syntheticDom.SELF_CLOSING);\r\n};\r\n\r\nRenderer.prototype.list = function (childNode, isOrdered) {\r\n return new _syntheticDom.ElementNode(isOrdered ? 'ol' : 'ul', [], [childNode]);\r\n};\r\n\r\nRenderer.prototype.listitem = function (childNode) {\r\n return new _syntheticDom.ElementNode('li', [], [childNode]);\r\n};\r\n\r\nRenderer.prototype.paragraph = function (childNode) {\r\n return new _syntheticDom.ElementNode('p', [], [childNode]);\r\n};\r\n\r\n// span level renderer\r\nRenderer.prototype.strong = function (childNode) {\r\n return new _syntheticDom.ElementNode('strong', [], [childNode]);\r\n};\r\n\r\nRenderer.prototype.em = function (childNode) {\r\n return new _syntheticDom.ElementNode('em', [], [childNode]);\r\n};\r\n\r\nRenderer.prototype.codespan = function (text) {\r\n return new _syntheticDom.ElementNode('code', [], [new _syntheticDom.TextNode(text)]);\r\n};\r\n\r\nRenderer.prototype.br = function () {\r\n return new _syntheticDom.ElementNode('br', [], _syntheticDom.SELF_CLOSING);\r\n};\r\n\r\nRenderer.prototype.del = function (childNode) {\r\n return new _syntheticDom.ElementNode('del', [], [childNode]);\r\n};\r\n\r\nRenderer.prototype.ins = function (childNode) {\r\n return new _syntheticDom.ElementNode('ins', [], [childNode]);\r\n};\r\n\r\nRenderer.prototype.link = function (href, title, childNode) {\r\n var attributes = [{ name: 'href', value: href }];\r\n if (title) {\r\n attributes.push({ name: 'title', value: title });\r\n }\r\n return new _syntheticDom.ElementNode('a', attributes, [childNode]);\r\n};\r\n\r\nRenderer.prototype.image = function (href, title, alt) {\r\n var attributes = [{ name: 'src', value: href }];\r\n if (title) {\r\n attributes.push({ name: 'title', value: title });\r\n }\r\n if (alt) {\r\n attributes.push({ name: 'alt', value: alt });\r\n }\r\n return new _syntheticDom.ElementNode('img', attributes, _syntheticDom.SELF_CLOSING);\r\n};\r\n\r\nRenderer.prototype.text = function (childNode) {\r\n return childNode;\r\n};\r\n\r\n/**\r\n * Parsing & Compiling\r\n */\r\n\r\nfunction Parser(options) {\r\n this.tokens = [];\r\n this.token = null;\r\n this.options = assign({}, options || defaults);\r\n this.options.renderer = this.options.renderer || new Renderer();\r\n this.renderer = this.options.renderer;\r\n this.renderer.options = this.options;\r\n}\r\n\r\n/**\r\n * Static Parse Method\r\n */\r\n\r\nParser.parse = function (src, options, renderer) {\r\n var parser = new Parser(options, renderer);\r\n return parser.parse(src);\r\n};\r\n\r\n/**\r\n * Parse Loop\r\n */\r\n\r\nParser.prototype.parse = function (src) {\r\n this.inline = new InlineLexer(src.links, this.options, this.renderer);\r\n this.tokens = src.slice().reverse();\r\n\r\n var out = new _syntheticDom.FragmentNode();\r\n while (this.next()) {\r\n out.appendChild(this.tok());\r\n }\r\n\r\n return out;\r\n};\r\n\r\n/**\r\n * Next Token\r\n */\r\n\r\nParser.prototype.next = function () {\r\n return this.token = this.tokens.pop();\r\n};\r\n\r\n/**\r\n * Preview Next Token\r\n */\r\n\r\nParser.prototype.peek = function () {\r\n return this.tokens[this.tokens.length - 1] || 0;\r\n};\r\n\r\n/**\r\n * Parse Text Tokens\r\n */\r\n\r\nParser.prototype.parseText = function () {\r\n var body = this.token.text;\r\n\r\n while (this.peek().type === 'text') {\r\n body += '\\n' + this.next().text;\r\n }\r\n\r\n return this.inline.parse(body);\r\n};\r\n\r\n/**\r\n * Parse Current Token\r\n */\r\n\r\nParser.prototype.tok = function () {\r\n switch (this.token.type) {\r\n case 'space':\r\n {\r\n return new _syntheticDom.TextNode('');\r\n }\r\n case 'hr':\r\n {\r\n return this.renderer.hr();\r\n }\r\n case 'heading':\r\n {\r\n return this.renderer.heading(this.inline.parse(this.token.text), this.token.depth);\r\n }\r\n case 'code':\r\n {\r\n return this.renderer.code(this.inline.parse(this.token.text), this.token.lang);\r\n }\r\n case 'blockquote_start':\r\n {\r\n var body = new _syntheticDom.FragmentNode();\r\n\r\n while (this.next().type !== 'blockquote_end') {\r\n body.appendChild(this.tok());\r\n }\r\n\r\n return this.renderer.blockquote(body);\r\n }\r\n case 'list_start':\r\n {\r\n var _body = new _syntheticDom.FragmentNode();\r\n var ordered = this.token.ordered;\r\n\r\n while (this.next().type !== 'list_end') {\r\n _body.appendChild(this.tok());\r\n }\r\n\r\n return this.renderer.list(_body, ordered);\r\n }\r\n case 'list_item_start':\r\n {\r\n var _body2 = new _syntheticDom.FragmentNode();\r\n\r\n while (this.next().type !== 'list_item_end') {\r\n _body2.appendChild(this.token.type === 'text' ? this.parseText() : this.tok());\r\n }\r\n\r\n return this.renderer.listitem(_body2);\r\n }\r\n case 'loose_item_start':\r\n {\r\n var _body3 = new _syntheticDom.FragmentNode();\r\n\r\n while (this.next().type !== 'list_item_end') {\r\n _body3.appendChild(this.tok());\r\n }\r\n\r\n return this.renderer.listitem(_body3);\r\n }\r\n case 'paragraph':\r\n {\r\n return this.renderer.paragraph(this.inline.parse(this.token.text));\r\n }\r\n case 'text':\r\n {\r\n return this.renderer.paragraph(this.parseText());\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Helpers\r\n */\r\n\r\nfunction replace(regex, options) {\r\n regex = regex.source;\r\n options = options || '';\r\n return function self(name, val) {\r\n if (!name) {\r\n return new RegExp(regex, options);\r\n }\r\n val = val.source || val;\r\n val = val.replace(/(^|[^\\[])\\^/g, '$1');\r\n regex = regex.replace(name, val);\r\n return self;\r\n };\r\n}\r\n\r\nvar MarkdownParser = {\r\n parse: function parse(src, options) {\r\n options = assign({}, defaults, options);\r\n try {\r\n var fragment = Parser.parse(Lexer.parse(src, options), options);\r\n } catch (e) {\r\n if (options.silent) {\r\n fragment = new _syntheticDom.FragmentNode([new _syntheticDom.ElementNode('p', [], [new _syntheticDom.TextNode('An error occured:')]), new _syntheticDom.ElementNode('pre', [], [new _syntheticDom.TextNode(e.message)])]);\r\n } else {\r\n throw e;\r\n }\r\n }\r\n if (options.getAST) {\r\n return new _syntheticDom.ElementNode('body', [], [fragment]);\r\n } else {\r\n return fragment.toString(this.options.xhtml);\r\n }\r\n }\r\n};\r\n\r\nexports.default = MarkdownParser;","module.exports = __webpack_public_path__ + \"static/media/icon-completed.3fbce9fd.svg\";","module.exports = __webpack_public_path__ + \"static/media/proxy-established-no.03556ebd.svg\";","module.exports = __webpack_public_path__ + \"static/media/proxy-established-yes.a3252432.svg\";","module.exports = __webpack_public_path__ + \"static/media/self-established-no.4b1b81c5.svg\";","module.exports = __webpack_public_path__ + \"static/media/self-established-yes.4d6d50c8.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-error.f3223d59.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-arrow-up.0b6d85d9.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-arrow-down.e393bcc6.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-arrow--up-med-gray.69653197.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-arrow--down-med-gray.76b6ab4d.svg\";","module.exports = __webpack_public_path__ + \"static/media/icon-close--med-gray.47aa3136.svg\";","Object.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\n\r\nvar _stateToMarkdown = require('./stateToMarkdown');\r\n\r\nObject.defineProperty(exports, 'stateToMarkdown', {\r\n enumerable: true,\r\n get: function get() {\r\n return _interopRequireDefault(_stateToMarkdown).default;\r\n }\r\n});\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","module.exports = __webpack_public_path__ + \"static/media/what-to-expect.082a652e.jpg\";","module.exports = __webpack_public_path__ + \"static/media/preloader-bar.d74f5d92.gif\";","/* eslint-disable */\r\n/*\r\n\r\n From: https://www.npmjs.com/package/draft-js-export-markdown\r\n Version used: 1.2.0\r\n Last modified: 10.26.2017\r\n Things modified:\r\n - Removed \"use strict\" (only needed in npm package)\r\n - Removed quotations from alt text markdown for images (should be fixed in 1.2.1)\r\n - Added eslint disable\r\n*/\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\n\r\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\r\n\r\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\r\n\r\nexports.default = stateToMarkdown;\r\n\r\nvar _draftJsUtils = require('draft-js-utils');\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nvar BOLD = _draftJsUtils.INLINE_STYLE.BOLD,\r\n CODE = _draftJsUtils.INLINE_STYLE.CODE,\r\n ITALIC = _draftJsUtils.INLINE_STYLE.ITALIC,\r\n STRIKETHROUGH = _draftJsUtils.INLINE_STYLE.STRIKETHROUGH,\r\n UNDERLINE = _draftJsUtils.INLINE_STYLE.UNDERLINE;\r\n\r\n\r\nvar CODE_INDENT = ' ';\r\n\r\nvar MarkupGenerator = function () {\r\n function MarkupGenerator(contentState) {\r\n _classCallCheck(this, MarkupGenerator);\r\n\r\n this.contentState = contentState;\r\n }\r\n\r\n _createClass(MarkupGenerator, [{\r\n key: 'generate',\r\n value: function generate() {\r\n this.output = [];\r\n this.blocks = this.contentState.getBlockMap().toArray();\r\n this.totalBlocks = this.blocks.length;\r\n this.currentBlock = 0;\r\n this.listItemCounts = {};\r\n while (this.currentBlock < this.totalBlocks) {\r\n this.processBlock();\r\n }\r\n return this.output.join('');\r\n }\r\n }, {\r\n key: 'processBlock',\r\n value: function processBlock() {\r\n var block = this.blocks[this.currentBlock];\r\n var blockType = block.getType();\r\n switch (blockType) {\r\n case _draftJsUtils.BLOCK_TYPE.HEADER_ONE:\r\n {\r\n this.insertLineBreaks(1);\r\n this.output.push('# ' + this.renderBlockContent(block) + '\\n');\r\n break;\r\n }\r\n case _draftJsUtils.BLOCK_TYPE.HEADER_TWO:\r\n {\r\n this.insertLineBreaks(1);\r\n this.output.push('## ' + this.renderBlockContent(block) + '\\n');\r\n break;\r\n }\r\n case _draftJsUtils.BLOCK_TYPE.HEADER_THREE:\r\n {\r\n this.insertLineBreaks(1);\r\n this.output.push('### ' + this.renderBlockContent(block) + '\\n');\r\n break;\r\n }\r\n case _draftJsUtils.BLOCK_TYPE.HEADER_FOUR:\r\n {\r\n this.insertLineBreaks(1);\r\n this.output.push('#### ' + this.renderBlockContent(block) + '\\n');\r\n break;\r\n }\r\n case _draftJsUtils.BLOCK_TYPE.HEADER_FIVE:\r\n {\r\n this.insertLineBreaks(1);\r\n this.output.push('##### ' + this.renderBlockContent(block) + '\\n');\r\n break;\r\n }\r\n case _draftJsUtils.BLOCK_TYPE.HEADER_SIX:\r\n {\r\n this.insertLineBreaks(1);\r\n this.output.push('###### ' + this.renderBlockContent(block) + '\\n');\r\n break;\r\n }\r\n case _draftJsUtils.BLOCK_TYPE.UNORDERED_LIST_ITEM:\r\n {\r\n var blockDepth = block.getDepth();\r\n var lastBlock = this.getLastBlock();\r\n var lastBlockType = lastBlock ? lastBlock.getType() : null;\r\n var lastBlockDepth = lastBlock && canHaveDepth(lastBlockType) ? lastBlock.getDepth() : null;\r\n if (lastBlockType !== blockType && lastBlockDepth !== blockDepth - 1) {\r\n this.insertLineBreaks(1);\r\n // Insert an additional line break if following opposite list type.\r\n if (lastBlockType === _draftJsUtils.BLOCK_TYPE.ORDERED_LIST_ITEM) {\r\n this.insertLineBreaks(1);\r\n }\r\n }\r\n var indent = ' '.repeat(block.depth * 4);\r\n this.output.push(indent + '- ' + this.renderBlockContent(block) + '\\n');\r\n break;\r\n }\r\n case _draftJsUtils.BLOCK_TYPE.ORDERED_LIST_ITEM:\r\n {\r\n var _blockDepth = block.getDepth();\r\n var _lastBlock = this.getLastBlock();\r\n var _lastBlockType = _lastBlock ? _lastBlock.getType() : null;\r\n var _lastBlockDepth = _lastBlock && canHaveDepth(_lastBlockType) ? _lastBlock.getDepth() : null;\r\n if (_lastBlockType !== blockType && _lastBlockDepth !== _blockDepth - 1) {\r\n this.insertLineBreaks(1);\r\n // Insert an additional line break if following opposite list type.\r\n if (_lastBlockType === _draftJsUtils.BLOCK_TYPE.UNORDERED_LIST_ITEM) {\r\n this.insertLineBreaks(1);\r\n }\r\n }\r\n var _indent = ' '.repeat(_blockDepth * 4);\r\n // TODO: figure out what to do with two-digit numbers\r\n var count = this.getListItemCount(block) % 10;\r\n this.output.push(_indent + (count + '. ') + this.renderBlockContent(block) + '\\n');\r\n break;\r\n }\r\n case _draftJsUtils.BLOCK_TYPE.BLOCKQUOTE:\r\n {\r\n this.insertLineBreaks(1);\r\n this.output.push(' > ' + this.renderBlockContent(block) + '\\n');\r\n break;\r\n }\r\n case _draftJsUtils.BLOCK_TYPE.CODE:\r\n {\r\n this.insertLineBreaks(1);\r\n this.output.push(CODE_INDENT + this.renderBlockContent(block) + '\\n');\r\n break;\r\n }\r\n default:\r\n {\r\n this.insertLineBreaks(1);\r\n this.output.push(this.renderBlockContent(block) + '\\n');\r\n break;\r\n }\r\n }\r\n this.currentBlock += 1;\r\n }\r\n }, {\r\n key: 'getLastBlock',\r\n value: function getLastBlock() {\r\n return this.blocks[this.currentBlock - 1];\r\n }\r\n }, {\r\n key: 'getNextBlock',\r\n value: function getNextBlock() {\r\n return this.blocks[this.currentBlock + 1];\r\n }\r\n }, {\r\n key: 'getListItemCount',\r\n value: function getListItemCount(block) {\r\n var blockType = block.getType();\r\n var blockDepth = block.getDepth();\r\n // To decide if we need to start over we need to backtrack (skipping list\r\n // items that are of greater depth)\r\n var index = this.currentBlock - 1;\r\n var prevBlock = this.blocks[index];\r\n while (prevBlock && canHaveDepth(prevBlock.getType()) && prevBlock.getDepth() > blockDepth) {\r\n index -= 1;\r\n prevBlock = this.blocks[index];\r\n }\r\n if (!prevBlock || prevBlock.getType() !== blockType || prevBlock.getDepth() !== blockDepth) {\r\n this.listItemCounts[blockDepth] = 0;\r\n }\r\n return this.listItemCounts[blockDepth] = this.listItemCounts[blockDepth] + 1;\r\n }\r\n }, {\r\n key: 'insertLineBreaks',\r\n value: function insertLineBreaks() {\r\n if (this.currentBlock > 0) {\r\n this.output.push('\\n');\r\n }\r\n }\r\n }, {\r\n key: 'renderBlockContent',\r\n value: function renderBlockContent(block) {\r\n var contentState = this.contentState;\r\n\r\n var blockType = block.getType();\r\n var text = block.getText();\r\n if (text === '') {\r\n // Prevent element collapse if completely empty.\r\n // TODO: Replace with constant.\r\n return '\\u200B';\r\n }\r\n var charMetaList = block.getCharacterList();\r\n var entityPieces = (0, _draftJsUtils.getEntityRanges)(text, charMetaList);\r\n return entityPieces.map(function (_ref) {\r\n var _ref2 = _slicedToArray(_ref, 2),\r\n entityKey = _ref2[0],\r\n stylePieces = _ref2[1];\r\n\r\n var content = stylePieces.map(function (_ref3) {\r\n var _ref4 = _slicedToArray(_ref3, 2),\r\n text = _ref4[0],\r\n style = _ref4[1];\r\n\r\n // Don't allow empty inline elements.\r\n if (!text) {\r\n return '';\r\n }\r\n var content = encodeContent(text);\r\n if (style.has(BOLD)) {\r\n content = '**' + content + '**';\r\n }\r\n if (style.has(UNDERLINE)) {\r\n // TODO: encode `+`?\r\n content = '++' + content + '++';\r\n }\r\n if (style.has(ITALIC)) {\r\n content = '_' + content + '_';\r\n }\r\n if (style.has(STRIKETHROUGH)) {\r\n // TODO: encode `~`?\r\n content = '~~' + content + '~~';\r\n }\r\n if (style.has(CODE)) {\r\n content = blockType === _draftJsUtils.BLOCK_TYPE.CODE ? content : '`' + content + '`';\r\n }\r\n return content;\r\n }).join('');\r\n var entity = entityKey ? contentState.getEntity(entityKey) : null;\r\n if (entity != null && entity.getType() === _draftJsUtils.ENTITY_TYPE.LINK) {\r\n var data = entity.getData();\r\n var url = data.url || '';\r\n var title = data.title ? ' \"' + escapeTitle(data.title) + '\"' : '';\r\n return '[' + content + '](' + encodeURL(url) + title + ')';\r\n } else if (entity != null && entity.getType() === _draftJsUtils.ENTITY_TYPE.IMAGE) {\r\n var _data = entity.getData();\r\n var src = _data.src || '';\r\n var alt = _data.alt ? escapeTitle(_data.alt) : '';\r\n return '![' + alt + '](' + encodeURL(src) + ')';\r\n } else {\r\n return content;\r\n }\r\n }).join('');\r\n }\r\n }]);\r\n\r\n return MarkupGenerator;\r\n}();\r\n\r\nfunction canHaveDepth(blockType) {\r\n switch (blockType) {\r\n case _draftJsUtils.BLOCK_TYPE.UNORDERED_LIST_ITEM:\r\n case _draftJsUtils.BLOCK_TYPE.ORDERED_LIST_ITEM:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n}\r\n\r\nfunction encodeContent(text) {\r\n return text.replace(/[*_`]/g, '\\\\$&');\r\n}\r\n\r\n// Encode chars that would normally be allowed in a URL but would conflict with\r\n// our markdown syntax: `[foo](http://foo/)`\r\nfunction encodeURL(url) {\r\n return url.replace(/\\)/g, '%29');\r\n}\r\n\r\n// Escape quotes using backslash.\r\nfunction escapeTitle(text) {\r\n return text.replace(/\"/g, '\\\\\"');\r\n}\r\n\r\nfunction stateToMarkdown(content) {\r\n return new MarkupGenerator(content).generate();\r\n}","/*\r\n\r\n From: https://www.npmjs.com/package/draft-js-import-element\r\n Version used: 1.2.1\r\n Last modified: 11.30.2017\r\n Things modified:\r\n - Removed \"use strict\" (only needed in npm package)\r\n - Updated draftJsImportelement path from \"draft-js-import-element\"\r\n*/\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\nexports.default = stateFromMarkdown;\r\n\r\nvar _MarkdownParser = require('./MarkdownParser');\r\n\r\nvar _MarkdownParser2 = _interopRequireDefault(_MarkdownParser);\r\n\r\nvar _draftJsImportElement = require('../../draft-js-import-element');\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\r\n\r\nfunction stateFromMarkdown(markdown, options) {\r\n var element = _MarkdownParser2.default.parse(markdown, { getAST: true });\r\n return (0, _draftJsImportElement.stateFromElement)(element, options);\r\n}","/*\r\n\r\n From: https://www.npmjs.com/package/draft-js-import-element\r\n Version used: 1.2.1\r\n Last modified: 11.30.2017\r\n Things modified:\r\n - Removed \"use strict\" (only needed in npm package)\r\n*/\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\n\r\nvar _stateFromElement = require('./stateFromElement');\r\n\r\nObject.keys(_stateFromElement).forEach(function (key) {\r\n if (key === \"default\" || key === \"__esModule\") return;\r\n Object.defineProperty(exports, key, {\r\n enumerable: true,\r\n get: function get() {\r\n return _stateFromElement[key];\r\n }\r\n });\r\n});","/* eslint-disable */\r\n/*\r\n\r\n From: https://www.npmjs.com/package/draft-js-import-element\r\n Version used: 1.2.1\r\n Last modified: 11.30.2017\r\n Things modified:\r\n - Removed \"use strict\" (only needed in npm package)\r\n - Added text replace for single newlines to prevent collapsing\r\n - Added eslint disable\r\n*/\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\n\r\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\r\n\r\nexports.stateFromElement = stateFromElement;\r\n\r\nvar _replaceTextWithMeta3 = require('./lib/replaceTextWithMeta');\r\n\r\nvar _replaceTextWithMeta4 = _interopRequireDefault(_replaceTextWithMeta3);\r\n\r\nvar _draftJs = require('draft-js');\r\n\r\nvar _immutable = require('immutable');\r\n\r\nvar _draftJsUtils = require('draft-js-utils');\r\n\r\nvar _syntheticDom = require('synthetic-dom');\r\n\r\nvar _Constants = require('./lib/Constants');\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\n// A ParsedBlock has two purposes:\r\n// 1) to keep data about the block (textFragments, type)\r\n// 2) to act as some context for storing parser state as we parse its contents\r\nvar NO_STYLE = (0, _immutable.OrderedSet)();\r\nvar NO_ENTITY = null;\r\n\r\nvar EMPTY_BLOCK = new _draftJs.ContentBlock({\r\n key: (0, _draftJs.genKey)(),\r\n text: '',\r\n type: _draftJsUtils.BLOCK_TYPE.UNSTYLED,\r\n characterList: (0, _immutable.List)(),\r\n depth: 0\r\n});\r\n\r\nvar LINE_BREAKS = /(\\r\\n|\\r|\\n)/g;\r\n// We use `\\r` because that character is always stripped from source (normalized\r\n// to `\\n`), so it's safe to assume it will only appear in the text content when\r\n// we put it there as a placeholder.\r\nvar SOFT_BREAK_PLACEHOLDER = '\\r';\r\nvar ZERO_WIDTH_SPACE = '\\u200B';\r\nvar DATA_ATTRIBUTE = /^data-([a-z0-9-]+)$/;\r\n\r\n// Map element attributes to entity data.\r\nvar ELEM_ATTR_MAP = {\r\n a: { href: 'url', rel: 'rel', target: 'target', title: 'title' },\r\n img: { src: 'src', alt: 'alt' }\r\n};\r\n\r\nvar getEntityData = function getEntityData(tagName, element) {\r\n var data = {};\r\n if (ELEM_ATTR_MAP.hasOwnProperty(tagName)) {\r\n var attrMap = ELEM_ATTR_MAP[tagName];\r\n for (var i = 0; i < element.attributes.length; i++) {\r\n var _element$attributes$i = element.attributes[i],\r\n name = _element$attributes$i.name,\r\n value = _element$attributes$i.value;\r\n\r\n if (value != null) {\r\n if (attrMap.hasOwnProperty(name)) {\r\n var newName = attrMap[name];\r\n data[newName] = value;\r\n } else if (DATA_ATTRIBUTE.test(name)) {\r\n data[name] = value;\r\n }\r\n }\r\n }\r\n }\r\n return data;\r\n};\r\n\r\n// Functions to create entities from elements.\r\nvar ElementToEntity = {\r\n a: function a(generator, tagName, element) {\r\n var data = getEntityData(tagName, element);\r\n // Don't add `` elements with no href.\r\n if (data.url != null) {\r\n return generator.createEntity(_draftJsUtils.ENTITY_TYPE.LINK, data);\r\n }\r\n },\r\n img: function img(generator, tagName, element) {\r\n var data = getEntityData(tagName, element);\r\n // Don't add `` elements with no src.\r\n if (data.src != null) {\r\n return generator.createEntity(_draftJsUtils.ENTITY_TYPE.IMAGE, data);\r\n }\r\n }\r\n};\r\n\r\nvar ContentGenerator = function () {\r\n function ContentGenerator() {\r\n var _this = this;\r\n\r\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\r\n\r\n _classCallCheck(this, ContentGenerator);\r\n\r\n this.inlineCreators = {\r\n Style: function Style(style) {\r\n return { type: 'STYLE', style: style };\r\n },\r\n Entity: function Entity(type, data) {\r\n var mutability = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'MUTABLE';\r\n return {\r\n type: 'ENTITY',\r\n entityKey: _this.createEntity(type, data, mutability)\r\n };\r\n }\r\n };\r\n\r\n this.options = options;\r\n this.contentStateForEntities = _draftJs.ContentState.createFromBlockArray([]);\r\n // This represents the hierarchy as we traverse nested elements; for\r\n // example [body, ul, li] where we must know li's parent type (ul or ol).\r\n this.blockStack = [];\r\n // This is a linear list of blocks that will form the output; for example\r\n // [p, li, li, blockquote].\r\n this.blockList = [];\r\n this.depth = 0;\r\n }\r\n // This will be passed to the customInlineFn to allow it\r\n // to return a Style() or Entity().\r\n\r\n\r\n _createClass(ContentGenerator, [{\r\n key: 'process',\r\n value: function process(element) {\r\n this.processBlockElement(element);\r\n var contentBlocks = [];\r\n this.blockList.forEach(function (block) {\r\n var _concatFragments = concatFragments(block.textFragments),\r\n text = _concatFragments.text,\r\n characterMeta = _concatFragments.characterMeta;\r\n\r\n var includeEmptyBlock = false;\r\n // If the block contains only a soft break then don't discard the block,\r\n // but discard the soft break.\r\n if (text === SOFT_BREAK_PLACEHOLDER) {\r\n includeEmptyBlock = true;\r\n text = '';\r\n }\r\n \r\n // Handles situations with single newlines, since that was not being handled before and was causing lines to collapse\r\n text = text.replace(/(\\n)/g, SOFT_BREAK_PLACEHOLDER);\r\n \r\n if (block.tagName === 'pre') {\r\n var _trimLeadingNewline = trimLeadingNewline(text, characterMeta);\r\n\r\n text = _trimLeadingNewline.text;\r\n characterMeta = _trimLeadingNewline.characterMeta;\r\n } else {\r\n var _collapseWhiteSpace = collapseWhiteSpace(text, characterMeta);\r\n\r\n text = _collapseWhiteSpace.text;\r\n characterMeta = _collapseWhiteSpace.characterMeta;\r\n }\r\n // Previously we were using a placeholder for soft breaks. Now that we\r\n // have collapsed whitespace we can change it back to normal line breaks.\r\n text = text.split(SOFT_BREAK_PLACEHOLDER).join('\\n');\r\n // Discard empty blocks (unless otherwise specified).\r\n if (text.length || includeEmptyBlock) {\r\n contentBlocks.push(new _draftJs.ContentBlock({\r\n key: (0, _draftJs.genKey)(),\r\n text: text,\r\n type: block.type,\r\n characterList: characterMeta.toList(),\r\n depth: block.depth,\r\n data: block.data ? (0, _immutable.Map)(block.data) : (0, _immutable.Map)()\r\n }));\r\n }\r\n });\r\n if (!contentBlocks.length) {\r\n contentBlocks = [EMPTY_BLOCK];\r\n }\r\n return _draftJs.ContentState.createFromBlockArray(contentBlocks, this.contentStateForEntities.getEntityMap());\r\n }\r\n }, {\r\n key: 'getBlockTypeFromTagName',\r\n value: function getBlockTypeFromTagName(tagName) {\r\n var blockTypes = this.options.blockTypes;\r\n\r\n if (blockTypes && blockTypes[tagName]) {\r\n return blockTypes[tagName];\r\n }\r\n switch (tagName) {\r\n case 'li':\r\n {\r\n var parent = this.blockStack.slice(-1)[0];\r\n return parent.tagName === 'ol' ? _draftJsUtils.BLOCK_TYPE.ORDERED_LIST_ITEM : _draftJsUtils.BLOCK_TYPE.UNORDERED_LIST_ITEM;\r\n }\r\n case 'blockquote':\r\n {\r\n return _draftJsUtils.BLOCK_TYPE.BLOCKQUOTE;\r\n }\r\n case 'h1':\r\n {\r\n return _draftJsUtils.BLOCK_TYPE.HEADER_ONE;\r\n }\r\n case 'h2':\r\n {\r\n return _draftJsUtils.BLOCK_TYPE.HEADER_TWO;\r\n }\r\n case 'h3':\r\n {\r\n return _draftJsUtils.BLOCK_TYPE.HEADER_THREE;\r\n }\r\n case 'h4':\r\n {\r\n return _draftJsUtils.BLOCK_TYPE.HEADER_FOUR;\r\n }\r\n case 'h5':\r\n {\r\n return _draftJsUtils.BLOCK_TYPE.HEADER_FIVE;\r\n }\r\n case 'h6':\r\n {\r\n return _draftJsUtils.BLOCK_TYPE.HEADER_SIX;\r\n }\r\n case 'pre':\r\n {\r\n return _draftJsUtils.BLOCK_TYPE.CODE;\r\n }\r\n case 'figure':\r\n {\r\n return _draftJsUtils.BLOCK_TYPE.ATOMIC;\r\n }\r\n default:\r\n {\r\n return _draftJsUtils.BLOCK_TYPE.UNSTYLED;\r\n }\r\n }\r\n }\r\n }, {\r\n key: 'processBlockElement',\r\n value: function processBlockElement(element) {\r\n if (!element) {\r\n return;\r\n }\r\n var customBlockFn = this.options.customBlockFn;\r\n\r\n var tagName = element.nodeName.toLowerCase();\r\n var type = void 0;\r\n var data = void 0;\r\n if (customBlockFn) {\r\n var customBlock = customBlockFn(element);\r\n if (customBlock != null) {\r\n type = customBlock.type;\r\n data = customBlock.data;\r\n }\r\n }\r\n var isCustomType = true;\r\n if (type == null) {\r\n isCustomType = false;\r\n type = this.getBlockTypeFromTagName(tagName);\r\n }\r\n var hasDepth = canHaveDepth(type);\r\n var allowRender = !_Constants.SPECIAL_ELEMENTS.hasOwnProperty(tagName);\r\n if (!isCustomType && !hasSemanticMeaning(type)) {\r\n var parent = this.blockStack.slice(-1)[0];\r\n if (parent) {\r\n type = parent.type;\r\n }\r\n }\r\n var block = {\r\n tagName: tagName,\r\n textFragments: [],\r\n type: type,\r\n styleStack: [NO_STYLE],\r\n entityStack: [NO_ENTITY],\r\n depth: hasDepth ? this.depth : 0,\r\n data: data\r\n };\r\n if (allowRender) {\r\n this.blockList.push(block);\r\n if (hasDepth) {\r\n this.depth += 1;\r\n }\r\n }\r\n this.blockStack.push(block);\r\n if (element.childNodes != null) {\r\n Array.from(element.childNodes).forEach(this.processNode, this);\r\n }\r\n this.blockStack.pop();\r\n if (allowRender && hasDepth) {\r\n this.depth -= 1;\r\n }\r\n }\r\n }, {\r\n key: 'processInlineElement',\r\n value: function processInlineElement(element) {\r\n var tagName = element.nodeName.toLowerCase();\r\n if (tagName === 'br') {\r\n this.processText(SOFT_BREAK_PLACEHOLDER);\r\n return;\r\n }\r\n var block = this.blockStack.slice(-1)[0];\r\n var style = block.styleStack.slice(-1)[0];\r\n var entityKey = block.entityStack.slice(-1)[0];\r\n var customInlineFn = this.options.customInlineFn;\r\n\r\n var customInline = customInlineFn ? customInlineFn(element, this.inlineCreators) : null;\r\n if (customInline != null) {\r\n switch (customInline.type) {\r\n case 'STYLE':\r\n {\r\n style = style.add(customInline.style);\r\n break;\r\n }\r\n case 'ENTITY':\r\n {\r\n entityKey = customInline.entityKey;\r\n break;\r\n }\r\n }\r\n } else {\r\n style = addStyleFromTagName(style, tagName, this.options.elementStyles);\r\n if (ElementToEntity.hasOwnProperty(tagName)) {\r\n // If the to-entity function returns nothing, use the existing entity.\r\n entityKey = ElementToEntity[tagName](this, tagName, element) || entityKey;\r\n }\r\n }\r\n block.styleStack.push(style);\r\n block.entityStack.push(entityKey);\r\n if (element.childNodes != null) {\r\n Array.from(element.childNodes).forEach(this.processNode, this);\r\n }\r\n if (_Constants.SELF_CLOSING_ELEMENTS.hasOwnProperty(tagName)) {\r\n this.processText('\\xA0');\r\n }\r\n block.entityStack.pop();\r\n block.styleStack.pop();\r\n }\r\n }, {\r\n key: 'processTextNode',\r\n value: function processTextNode(node) {\r\n var text = node.nodeValue;\r\n // This is important because we will use \\r as a placeholder for a soft break.\r\n text = text.replace(LINE_BREAKS, '\\n');\r\n // Replace zero-width space (we use it as a placeholder in markdown) with a\r\n // soft break.\r\n // TODO: The import-markdown package should correctly turn breaks into
\r\n // elements so we don't need to include this hack.\r\n text = text.split(ZERO_WIDTH_SPACE).join(SOFT_BREAK_PLACEHOLDER);\r\n this.processText(text);\r\n }\r\n }, {\r\n key: 'processText',\r\n value: function processText(text) {\r\n var block = this.blockStack.slice(-1)[0];\r\n var style = block.styleStack.slice(-1)[0];\r\n var entity = block.entityStack.slice(-1)[0];\r\n var charMetadata = _draftJs.CharacterMetadata.create({\r\n style: style,\r\n entity: entity\r\n });\r\n var seq = (0, _immutable.Repeat)(charMetadata, text.length);\r\n block.textFragments.push({\r\n text: text,\r\n characterMeta: seq\r\n });\r\n }\r\n }, {\r\n key: 'processNode',\r\n value: function processNode(node) {\r\n if (node.nodeType === _syntheticDom.NODE_TYPE_ELEMENT) {\r\n // $FlowIssue\r\n var _element = node;\r\n var _tagName = _element.nodeName.toLowerCase();\r\n if (_Constants.INLINE_ELEMENTS.hasOwnProperty(_tagName)) {\r\n this.processInlineElement(_element);\r\n } else {\r\n this.processBlockElement(_element);\r\n }\r\n } else if (node.nodeType === _syntheticDom.NODE_TYPE_TEXT) {\r\n this.processTextNode(node);\r\n }\r\n }\r\n }, {\r\n key: 'createEntity',\r\n value: function createEntity(type, data) {\r\n var mutability = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'MUTABLE';\r\n\r\n this.contentStateForEntities = this.contentStateForEntities.createEntity(type, mutability, data);\r\n return this.contentStateForEntities.getLastCreatedEntityKey();\r\n }\r\n }]);\r\n\r\n return ContentGenerator;\r\n}();\r\n\r\nfunction trimLeadingNewline(text, characterMeta) {\r\n if (text.charAt(0) === '\\n') {\r\n text = text.slice(1);\r\n characterMeta = characterMeta.slice(1);\r\n }\r\n return { text: text, characterMeta: characterMeta };\r\n}\r\n\r\nfunction trimLeadingSpace(text, characterMeta) {\r\n while (text.charAt(0) === ' ') {\r\n text = text.slice(1);\r\n characterMeta = characterMeta.slice(1);\r\n }\r\n return { text: text, characterMeta: characterMeta };\r\n}\r\n\r\nfunction trimTrailingSpace(text, characterMeta) {\r\n while (text.slice(-1) === ' ') {\r\n text = text.slice(0, -1);\r\n characterMeta = characterMeta.slice(0, -1);\r\n }\r\n return { text: text, characterMeta: characterMeta };\r\n}\r\n\r\nfunction collapseWhiteSpace(text, characterMeta) {\r\n text = text.replace(/[ \\t\\n]/g, ' ');\r\n\r\n var _trimLeadingSpace = trimLeadingSpace(text, characterMeta);\r\n\r\n text = _trimLeadingSpace.text;\r\n characterMeta = _trimLeadingSpace.characterMeta;\r\n\r\n var _trimTrailingSpace = trimTrailingSpace(text, characterMeta);\r\n\r\n text = _trimTrailingSpace.text;\r\n characterMeta = _trimTrailingSpace.characterMeta;\r\n\r\n var i = text.length;\r\n while (i--) {\r\n if (text.charAt(i) === ' ' && text.charAt(i - 1) === ' ') {\r\n text = text.slice(0, i) + text.slice(i + 1);\r\n characterMeta = characterMeta.slice(0, i).concat(characterMeta.slice(i + 1));\r\n }\r\n }\r\n // There could still be one space on either side of a softbreak.\r\n\r\n var _replaceTextWithMeta = (0, _replaceTextWithMeta4.default)({ text: text, characterMeta: characterMeta }, SOFT_BREAK_PLACEHOLDER + ' ', SOFT_BREAK_PLACEHOLDER);\r\n\r\n text = _replaceTextWithMeta.text;\r\n characterMeta = _replaceTextWithMeta.characterMeta;\r\n\r\n var _replaceTextWithMeta2 = (0, _replaceTextWithMeta4.default)({ text: text, characterMeta: characterMeta }, ' ' + SOFT_BREAK_PLACEHOLDER, SOFT_BREAK_PLACEHOLDER);\r\n\r\n text = _replaceTextWithMeta2.text;\r\n characterMeta = _replaceTextWithMeta2.characterMeta;\r\n\r\n return { text: text, characterMeta: characterMeta };\r\n}\r\n\r\nfunction canHaveDepth(blockType) {\r\n switch (blockType) {\r\n case _draftJsUtils.BLOCK_TYPE.UNORDERED_LIST_ITEM:\r\n case _draftJsUtils.BLOCK_TYPE.ORDERED_LIST_ITEM:\r\n {\r\n return true;\r\n }\r\n default:\r\n {\r\n return false;\r\n }\r\n }\r\n}\r\n\r\nfunction concatFragments(fragments) {\r\n var text = '';\r\n var characterMeta = (0, _immutable.Seq)();\r\n fragments.forEach(function (textFragment) {\r\n text = text + textFragment.text;\r\n characterMeta = characterMeta.concat(textFragment.characterMeta);\r\n });\r\n return { text: text, characterMeta: characterMeta };\r\n}\r\n\r\nfunction addStyleFromTagName(styleSet, tagName, elementStyles) {\r\n switch (tagName) {\r\n case 'b':\r\n case 'strong':\r\n {\r\n return styleSet.add(_draftJsUtils.INLINE_STYLE.BOLD);\r\n }\r\n case 'i':\r\n case 'em':\r\n {\r\n return styleSet.add(_draftJsUtils.INLINE_STYLE.ITALIC);\r\n }\r\n case 'u':\r\n case 'ins':\r\n {\r\n return styleSet.add(_draftJsUtils.INLINE_STYLE.UNDERLINE);\r\n }\r\n case 'code':\r\n {\r\n return styleSet.add(_draftJsUtils.INLINE_STYLE.CODE);\r\n }\r\n case 's':\r\n case 'del':\r\n {\r\n return styleSet.add(_draftJsUtils.INLINE_STYLE.STRIKETHROUGH);\r\n }\r\n default:\r\n {\r\n // Allow custom styles to be provided.\r\n if (elementStyles && elementStyles[tagName]) {\r\n return styleSet.add(elementStyles[tagName]);\r\n }\r\n\r\n return styleSet;\r\n }\r\n }\r\n}\r\n\r\nfunction hasSemanticMeaning(blockType) {\r\n return blockType !== _draftJsUtils.BLOCK_TYPE.UNSTYLED;\r\n}\r\n\r\nfunction stateFromElement(element, options) {\r\n return new ContentGenerator(options).process(element);\r\n}\r\n\r\nexports.default = stateFromElement;","/*\r\n\r\n From: https://www.npmjs.com/package/draft-js-import-element\r\n Version used: 1.2.1\r\n Last modified: 11.30.2017\r\n Things modified:\r\n - Removed \"use strict\" (only needed in npm package)\r\n*/\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\nexports.default = replaceTextWithMeta;\r\nfunction replaceTextWithMeta(subject, searchText, replaceText) {\r\n var text = subject.text,\r\n characterMeta = subject.characterMeta;\r\n\r\n var searchTextLength = searchText.length;\r\n var replaceTextLength = replaceText.length;\r\n var resultTextParts = [];\r\n // Get empty set of same kind as characterMeta.\r\n var resultCharMeta = characterMeta.slice(0, 0);\r\n var lastEndIndex = 0;\r\n var index = text.indexOf(searchText);\r\n while (index !== -1) {\r\n resultTextParts.push(text.slice(lastEndIndex, index) + replaceText);\r\n resultCharMeta = resultCharMeta.concat(characterMeta.slice(lastEndIndex, index),\r\n // Use the metadata of the first char we are replacing.\r\n repeatSeq(characterMeta.slice(index, index + 1), replaceTextLength));\r\n lastEndIndex = index + searchTextLength;\r\n index = text.indexOf(searchText, lastEndIndex);\r\n }\r\n resultTextParts.push(text.slice(lastEndIndex));\r\n resultCharMeta = resultCharMeta.concat(characterMeta.slice(lastEndIndex));\r\n return { text: resultTextParts.join(''), characterMeta: resultCharMeta };\r\n}\r\n\r\nfunction repeatSeq(seq, count) {\r\n var result = seq.slice(0, 0);\r\n while (count-- > 0) {\r\n result = result.concat(seq);\r\n }\r\n return result;\r\n}","/* eslint-disable */\r\n/*\r\n\r\n From: https://www.npmjs.com/package/draft-js-import-element\r\n Version used: 1.2.1\r\n Last modified: 11.30.2017\r\n Things modified:\r\n - Removed \"use strict\" (only needed in npm package)\r\n - eslint disabling\r\n*/\r\n\r\nObject.defineProperty(exports, \"__esModule\", {\r\n value: true\r\n});\r\nvar INLINE_ELEMENTS = exports.INLINE_ELEMENTS = {\r\n a: 1,\r\n abbr: 1,\r\n area: 1,\r\n audio: 1,\r\n b: 1,\r\n bdi: 1,\r\n bdo: 1,\r\n br: 1,\r\n button: 1,\r\n canvas: 1,\r\n cite: 1,\r\n code: 1,\r\n command: 1,\r\n datalist: 1,\r\n del: 1,\r\n dfn: 1,\r\n em: 1,\r\n embed: 1,\r\n i: 1,\r\n iframe: 1,\r\n img: 1,\r\n input: 1,\r\n ins: 1,\r\n kbd: 1,\r\n keygen: 1,\r\n label: 1,\r\n map: 1,\r\n mark: 1,\r\n meter: 1,\r\n noscript: 1,\r\n object: 1,\r\n output: 1,\r\n progress: 1,\r\n q: 1,\r\n ruby: 1,\r\n s: 1,\r\n samp: 1,\r\n script: 1,\r\n select: 1,\r\n small: 1,\r\n span: 1,\r\n strong: 1,\r\n sub: 1,\r\n sup: 1,\r\n textarea: 1,\r\n time: 1,\r\n u: 1,\r\n var: 1,\r\n video: 1,\r\n wbr: 1,\r\n acronym: 1,\r\n applet: 1,\r\n basefont: 1,\r\n big: 1,\r\n font: 1,\r\n isindex: 1,\r\n strike: 1,\r\n style: 1,\r\n tt: 1\r\n};\r\n\r\n// These elements are special because they cannot contain text as a direct\r\n// child (some cannot contain childNodes at all).\r\nvar SPECIAL_ELEMENTS = exports.SPECIAL_ELEMENTS = {\r\n area: 1,\r\n base: 1,\r\n br: 1,\r\n col: 1,\r\n colgroup: 1,\r\n command: 1,\r\n dl: 1,\r\n embed: 1,\r\n head: 1,\r\n hgroup: 1,\r\n hr: 1,\r\n iframe: 1,\r\n img: 1,\r\n input: 1,\r\n keygen: 1,\r\n link: 1,\r\n meta: 1,\r\n ol: 1,\r\n optgroup: 1,\r\n option: 1,\r\n param: 1,\r\n script: 1,\r\n select: 1,\r\n source: 1,\r\n style: 1,\r\n table: 1,\r\n tbody: 1,\r\n textarea: 1,\r\n tfoot: 1,\r\n thead: 1,\r\n title: 1,\r\n tr: 1,\r\n track: 1,\r\n ul: 1,\r\n wbr: 1,\r\n basefont: 1,\r\n dialog: 1,\r\n dir: 1,\r\n isindex: 1\r\n};\r\n\r\n// These elements are special because they cannot contain childNodes.\r\n// TODO: This is not an exhaustive list.\r\nvar SELF_CLOSING_ELEMENTS = exports.SELF_CLOSING_ELEMENTS = { img: 1 };","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport './ProgressBar.scss';\r\n\r\nexport default class ProgressBar extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n stepNumber: this.props.defaultStepNumber\r\n };\r\n\r\n this.setStepNumber = this.setStepNumber.bind(this);\r\n this.icon = React.createRef();\r\n }\r\n\r\n setStepNumber = (stepNumber) => {\r\n if (typeof(stepNumber) === \"number\") {\r\n this.setState({ stepNumber });\r\n }\r\n } \r\n\r\n render() {\r\n // Makes it so step 1 = 0% and last step = 100%\r\n let functionalTotalSteps = this.props.totalSteps - 1;\r\n\r\n let icon = (this.props.icon) ? this.props.icon : this.props.defaultIcon;\r\n\r\n return (\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {icon.altText} this.icon = ref}\r\n />\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nProgressBar.defaultProps = {\r\n defaultStepNumber: 1\r\n};\r\n\r\nProgressBar.propTypes = {\r\n defaultIcon: PropTypes.shape({\r\n altText: PropTypes.string.isRequired,\r\n path: PropTypes.string.isRequired\r\n }).isRequired,\r\n defaultStepNumber: PropTypes.number,\r\n icon: PropTypes.shape({\r\n altText: PropTypes.string.isRequired,\r\n path: PropTypes.string.isRequired\r\n }),\r\n totalSteps: PropTypes.number.isRequired\r\n};","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport './Grid-12.css';\r\nimport './Grid-10.css';\r\n\r\nconst Grid = (props) => {\r\n\r\n let numCol = (props.layout) ? props.layout : props.columns + \"col\";\r\n\r\n let columns = (props.layout === \"66-33\" || props.layout === \"33-66\") ? 2 : props.columns;\r\n\r\n let gridItemCount = 0;\r\n\r\n let gridItems = (React.Children.count(props.children)) ?\r\n React.Children.map(props.children, (child, index) => {\r\n if (child && child.type === GridItem) {\r\n gridItemCount = (gridItemCount === columns) ? 1 : (gridItemCount + 1);\r\n\r\n let wrappedChild =
{child}
;\r\n\r\n return wrappedChild;\r\n }\r\n }) :\r\n null;\r\n\r\n let gridClasses = classNames(\"clearfix\", \"ccf-grid\", {\r\n \"nested-grid\": props.isNestedGrid\r\n });\r\n\r\n return (\r\n
\r\n {gridItems}\r\n
\r\n );\r\n}\r\n\r\nGrid.defaultProps = {\r\n columns: 1,\r\n isNestedGrid: false\r\n};\r\n\r\nGrid.propTypes = {\r\n columns: PropTypes.oneOf([1, 2, 3, 4, 5, 6]),\r\n isNestedGrid: PropTypes.bool,\r\n layout: PropTypes.oneOf(['66-33', '33-66'])\r\n}\r\n\r\n\r\n\r\nconst GridItem = (props) => {\r\n let ElementType = props.useDiv ? \"div\" : \"span\";\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n}\r\n\r\nexport { Grid, GridItem }\r\n","export const BUILD_FOR_SITECORE = false;\r\nexport const LOGIN_ROUTE = '/login';\r\nexport const ROOT_ROUTE = '/';\r\n\r\n// So here's a trick. We want to be able to add this react app to whatever\r\n// Sitecore page we want and have the URLs work out. For instance, if we\r\n// put the app on /depts/heart/appointments, that path needs to be the base,\r\n// while the subpages appear to be in the \"folder\" -\r\n// e.g. /depts/heart/appointments/contact-info\r\n\r\nexport const pages = {\r\n WHAT_TO_EXPECT: \"what-to-expect\",\r\n WHO_FOR: \"patient\",\r\n RECEIVED_CARE: \"patient-status\",\r\n NEW_PATIENT_INFO: \"new-patient-info\",\r\n NEW_PATIENT_ADDRESS: \"new-patient-contact-info\",\r\n EXISTING_PATIENT_INFO: \"established-patient-info\",\r\n CONTACT_INFO: \"contact-info\",\r\n APPOINTMENT_INFO1: \"appointment-info\",\r\n APPOINTMENT_INFO2: \"appointment-services\",\r\n APPOINTMENT_PREFERENCES: \"appointment-area\",\r\n APPOINTMENT_INFO_PROVIDER: \"appointment-provider\",\r\n APPOINTMENT_INFO_DAY_TIME: \"appointment-day-time\",\r\n PAYMENT_METHOD: \"payment-method\",\r\n INSURANCE: \"insurance\",\r\n POLICY_HOLDER: \"policy-holder\",\r\n BILLING: \"billing\",\r\n BILLING_ADDRESS: \"billing-address\",\r\n OUT_OF_POCKET: \"out-of-pocket\",\r\n REVIEW: \"review\",\r\n PFA_APPOINTMENT: \"pfa-appointment\",\r\n THANK_YOU_PFA_APPT: \"thank-you-pfa-appointment\",\r\n THANK_YOU_PFA: \"thank-you-pfa\",\r\n THANK_YOU_INSURANCE: \"thank-you-insurance\",\r\n ERROR_REVIEW: \"error-review\"\r\n};\r\n\r\nlet pathBase = window.location.pathname;\r\nlet keys = Object.keys(pages);\r\nkeys.forEach(key => {\r\n if (pathBase.endsWith(pages[key])) {\r\n pathBase = pathBase.substring(0, pathBase.lastIndexOf(\"/\"));\r\n }\r\n});\r\nif (pathBase === '/') {\r\n pathBase = \"/root\";\r\n}\r\n\r\nexport const WEB_APPOINTMENT_ROOT = pathBase; // includes a leading slash\r\nexport const WEB_APPOINTMENT_ROOT_SLASH = WEB_APPOINTMENT_ROOT + \"/\";\r\nexport const WEB_APPOINTMENT_WHAT_TO_EXPECT_PAGE = WEB_APPOINTMENT_ROOT_SLASH + pages.WHAT_TO_EXPECT;\r\nexport const WEB_APPOINTMENT_WHO_FOR_PAGE = WEB_APPOINTMENT_ROOT_SLASH + pages.WHO_FOR;\r\nexport const WEB_APPOINTMENT_RECEIVED_CARE_PAGE = WEB_APPOINTMENT_ROOT_SLASH + pages.RECEIVED_CARE;\r\nexport const WEB_APPOINTMENT_NEW_PATIENT_INFO_PAGE = WEB_APPOINTMENT_ROOT_SLASH + pages.NEW_PATIENT_INFO;\r\nexport const WEB_APPOINTMENT_NEW_PATIENT_ADDRESS_PAGE = WEB_APPOINTMENT_ROOT_SLASH + pages.NEW_PATIENT_ADDRESS;\r\nexport const WEB_APPOINTMENT_EXISTING_PATIENT_INFO_PAGE = WEB_APPOINTMENT_ROOT_SLASH + pages.EXISTING_PATIENT_INFO;\r\nexport const WEB_APPOINTMENT_CONTACT_INFO_PAGE = WEB_APPOINTMENT_ROOT_SLASH + pages.CONTACT_INFO;\r\nexport const WEB_APPOINTMENT_APPOINTMENT_INFO1_PAGE = WEB_APPOINTMENT_ROOT_SLASH + pages.APPOINTMENT_INFO1;\r\nexport const WEB_APPOINTMENT_APPOINTMENT_INFO2_PAGE = WEB_APPOINTMENT_ROOT_SLASH + pages.APPOINTMENT_INFO2;\r\nexport const WEB_APPOINTMENT_APPOINTMENT_PREFERENCES_PAGE = WEB_APPOINTMENT_ROOT_SLASH + pages.APPOINTMENT_PREFERENCES;\r\nexport const WEB_APPOINTMENT_APPOINTMENT_INFO_PROVIDER = WEB_APPOINTMENT_ROOT_SLASH + pages.APPOINTMENT_INFO_PROVIDER;\r\nexport const WEB_APPOINTMENT_APPOINTMENT_INFO_DAY_TIME = WEB_APPOINTMENT_ROOT_SLASH + pages.APPOINTMENT_INFO_DAY_TIME;\r\nexport const WEB_APPOINTMENT_PAYMENT_METHOD = WEB_APPOINTMENT_ROOT_SLASH + pages.PAYMENT_METHOD;\r\nexport const WEB_APPOINTMENT_INSURANCE = WEB_APPOINTMENT_ROOT_SLASH + pages.INSURANCE;\r\nexport const WEB_APPOINTMENT_POLICY_HOLDER = WEB_APPOINTMENT_ROOT_SLASH + pages.POLICY_HOLDER;\r\nexport const WEB_APPOINTMENT_BILLING = WEB_APPOINTMENT_ROOT_SLASH + pages.BILLING;\r\nexport const WEB_APPOINTMENT_BILLING_ADDRESS = WEB_APPOINTMENT_ROOT_SLASH + pages.BILLING_ADDRESS;\r\nexport const WEB_APPOINTMENT_OUT_OF_POCKET = WEB_APPOINTMENT_ROOT_SLASH + pages.OUT_OF_POCKET;\r\nexport const WEB_APPOINTMENT_REVIEW = WEB_APPOINTMENT_ROOT_SLASH + pages.REVIEW;\r\nexport const WEB_APPOINTMENT_PFA_APPOINTMENT = WEB_APPOINTMENT_ROOT_SLASH + pages.PFA_APPOINTMENT;\r\nexport const WEB_APPOINTMENT_THANK_YOU_PFA_APPT = WEB_APPOINTMENT_ROOT_SLASH + pages.THANK_YOU_PFA_APPT;\r\nexport const WEB_APPOINTMENT_THANK_YOU_PFA = WEB_APPOINTMENT_ROOT_SLASH + pages.THANK_YOU_PFA;\r\nexport const WEB_APPOINTMENT_THANK_YOU_INSURANCE = WEB_APPOINTMENT_ROOT_SLASH + pages.THANK_YOU_INSURANCE;\r\nexport const WEB_APPOINTMENT_ERROR_REVIEW = WEB_APPOINTMENT_ROOT_SLASH + pages.ERROR_REVIEW;\r\n\r\nexport const AppDataForPath = [\r\n { pathPattern: WEB_APPOINTMENT_ROOT, appName: \"Web Appointment Form\"},\r\n];","import defaultIcon from '../imgs/default.svg';\r\nimport completedIcon from '../imgs/icon-completed.svg';\r\nimport proxyEstablishedNoIcon from '../imgs/proxy-established-no.svg';\r\nimport proxyEstablishedYesIcon from '../imgs/proxy-established-yes.svg';\r\nimport selfEstablishedNoIcon from '../imgs/self-established-no.svg';\r\nimport selfEstablishedYesIcon from '../imgs/self-established-yes.svg';\r\nimport iconError from '../imgs/icon-error.svg';\r\nimport { pages } from '../../constants/routes';\r\n\r\nconst DEFAULT_ICON = {\r\n path: defaultIcon,\r\n altText: \"A light gray circle with a darker gray silhouette.\"\r\n};\r\nconst COMPLETED_ICON = {\r\n path: completedIcon,\r\n altText: \"Green circle with a white checkmark.\"\r\n};\r\nconst PROXY_ESTABLISHED_NO_ICON = {\r\n path: proxyEstablishedNoIcon,\r\n altText: \"Abstracted illustration of a male and a female within a light blue circle.\"\r\n};\r\nconst PROXY_ESTABLISHED_YES_ICON = {\r\n path: proxyEstablishedYesIcon,\r\n altText: \"Abstracted illustration of a male and a female within a light blue circle, with a Cleveland Clinic logo in the lower right corner.\"\r\n};\r\nconst SELF_ESTABLISHED_NO_ICON = {\r\n path: selfEstablishedNoIcon,\r\n altText: \"Abstracted illustration of a male within the light blue circle.\"\r\n};\r\nconst SELF_ESTABLISHED_YES_ICON = {\r\n path: selfEstablishedYesIcon,\r\n altText: \"Abstracted illustration of a male within the light blue circle, with a Cleveland Clinic logo in the lower right corner.\"\r\n};\r\nconst ERROR_ICON = {\r\n path: iconError,\r\n altText: \"Red circle with a white explanation mark.\"\r\n};\r\nconst ORDER_OF_PAGES = [\r\n [ pages.WHAT_TO_EXPECT ],\r\n [ pages.WHO_FOR ],\r\n [ pages.RECEIVED_CARE ],\r\n [ pages.CONTACT_INFO ],\r\n [ pages.NEW_PATIENT_INFO, pages.EXISTING_PATIENT_INFO ],\r\n [ pages.NEW_PATIENT_ADDRESS ],\r\n [ pages.APPOINTMENT_INFO1 ],\r\n [ pages.APPOINTMENT_INFO2 ],\r\n [ pages.APPOINTMENT_PREFERENCES ],\r\n [ pages.APPOINTMENT_INFO_PROVIDER ],\r\n [ pages.APPOINTMENT_INFO_DAY_TIME ],\r\n [ pages.PAYMENT_METHOD ],\r\n [ pages.INSURANCE ],\r\n [ pages.POLICY_HOLDER, pages.OUT_OF_POCKET ],\r\n [ pages.BILLING ],\r\n [ pages.BILLING_ADDRESS ],\r\n [ pages.REVIEW ],\r\n [ pages.ERROR_REVIEW ],\r\n [ pages.PFA_APPOINTMENT ],\r\n [ pages.THANK_YOU_PFA_APPT, pages.THANK_YOU_PFA, pages.THANK_YOU_INSURANCE ],\r\n];\r\n\r\nexport function determineProgress (pageName) {\r\n let stepNumber = 1;\r\n\r\n if (pageName === pages.ERROR_REVIEW) {\r\n stepNumber = ORDER_OF_PAGES.length; // If error occurred during review, set stepNumber to the error review page\r\n } \r\n else {\r\n for (let [index, pageStep] of ORDER_OF_PAGES.entries()) {\r\n if (pageStep.includes(pageName)) {\r\n stepNumber = index + 1;\r\n break;\r\n }\r\n }\r\n }\r\n return stepNumber;\r\n}\r\n\r\nexport function determineIcon(pageName, state = {}) {\r\n let forMe = state.forMe;\r\n let patientSeenRecently = state.patientSeenRecently;\r\n let dataHasBeenCleared = !state.acknowledgedWhatToExpect;\r\n\r\n switch (pageName) {\r\n case pages.WHAT_TO_EXPECT:\r\n case pages.WHO_FOR:\r\n return DEFAULT_ICON;\r\n case pages.RECEIVED_CARE:\r\n case pages.CONTACT_INFO:\r\n case pages.NEW_PATIENT_INFO:\r\n case pages.EXISTING_PATIENT_INFO:\r\n case pages.NEW_PATIENT_ADDRESS:\r\n case pages.APPOINTMENT_INFO1:\r\n case pages.APPOINTMENT_INFO2:\r\n case pages.APPOINTMENT_PREFERENCES:\r\n case pages.APPOINTMENT_INFO_PROVIDER:\r\n case pages.APPOINTMENT_INFO_DAY_TIME:\r\n case pages.PAYMENT_METHOD:\r\n case pages.INSURANCE:\r\n case pages.POLICY_HOLDER:\r\n case pages.OUT_OF_POCKET:\r\n case pages.BILLING:\r\n case pages.BILLING_ADDRESS:\r\n case pages.REVIEW:\r\n if (dataHasBeenCleared) {\r\n return DEFAULT_ICON;\r\n }\r\n case pages.PFA_APPOINTMENT:\r\n return forMe ? (patientSeenRecently ? SELF_ESTABLISHED_YES_ICON : SELF_ESTABLISHED_NO_ICON) : (patientSeenRecently ? PROXY_ESTABLISHED_YES_ICON : PROXY_ESTABLISHED_NO_ICON);\r\n case pages.THANK_YOU_PFA_APPT:\r\n case pages.THANK_YOU_PFA:\r\n case pages.THANK_YOU_INSURANCE:\r\n return COMPLETED_ICON;\r\n case pages.ERROR_REVIEW:\r\n return ERROR_ICON;\r\n default:\r\n return DEFAULT_ICON; \r\n }\r\n}","export const WEBAPPOINTMENT_ACKNOWLEDGED_WHAT_TO_EXPECT = \"WEBAPPOINTMENT_ACKNOWLEDGE_WHAT_TO_EXPECT\";\r\nexport const WEBAPPOINTMENT_SET_WHO_FOR = \"WEBAPPOINTMENT_SET_WHO_FOR\";\r\nexport const WEBAPPOINTMENT_SET_PATIENT_SEEN_RECENTLY = \"WEBAPPOINTMENT_SET_PATIENT_SEEN_RECENTLY\";\r\n\r\nexport const WEBAPPOINTMENT_SET_CONTACT_OVER_18 = \"WEBAPPOINTMENT_SET_CONTACT_OVER_18\";\r\nexport const WEBAPPOINTMENT_SET_CONTACT_RELATION = \"WEBAPPOINTMENT_SET_CONTACT_RELATION\";\r\nexport const WEBAPPOINTMENT_SET_CONTACT_FIRST_NAME = \"WEBAPPOINTMENT_SET_CONTACT_FIRST_NAME\";\r\nexport const WEBAPPOINTMENT_SET_CONTACT_LAST_NAME = \"WEBAPPOINTMENT_SET_CONTACT_LAST_NAME\";\r\nexport const WEBAPPOINTMENT_SET_CONTACT_EMAIL = \"WEBAPPOINTMENT_SET_CONTACT_EMAIL\";\r\nexport const WEBAPPOINTMENT_SET_CONTACT_PHONE = \"WEBAPPOINTMENT_SET_CONTACT_PHONE\";\r\n\r\nexport const WEBAPPOINTMENT_SET_PATIENT_FIRST_NAME = \"WEBAPPOINTMENT_SET_PATIENT_FIRST_NAME\";\r\nexport const WEBAPPOINTMENT_SET_PATIENT_LAST_NAME = \"WEBAPPOINTMENT_SET_PATIENT_LAST_NAME\";\r\nexport const WEBAPPOINTMENT_SET_PATIENT_GENDER = \"WEBAPPOINTMENT_SET_PATIENT_GENDER\";\r\nexport const WEBAPPOINTMENT_SET_PATIENT_MARITAL_STATUS = \"WEBAPPOINTMENT_SET_PATIENT_MARITAL_STATUS\";\r\nexport const WEBAPPOINTMENT_SET_PATIENT_DOB = \"WEBAPPOINTMENT_SET_PATIENT_DOB\";\r\nexport const WEBAPPOINTMENT_SET_PATIENT_SSN = \"WEBAPPOINTMENT_SET_PATIENT_SSN\";\r\nexport const WEBAPPOINTMENT_SET_PATIENT_ADDRESS1 = \"WEBAPPOINTMENT_SET_PATIENT_ADDRESS1\";\r\nexport const WEBAPPOINTMENT_SET_PATIENT_ADDRESS2 = \"WEBAPPOINTMENT_SET_PATIENT_ADDRESS2\";\r\nexport const WEBAPPOINTMENT_SET_PATIENT_CITY = \"WEBAPPOINTMENT_SET_PATIENT_CITY\";\r\nexport const WEBAPPOINTMENT_SET_PATIENT_STATE = \"WEBAPPOINTMENT_SET_PATIENT_STATE\";\r\nexport const WEBAPPOINTMENT_SET_PATIENT_ZIP = \"WEBAPPOINTMENT_SET_PATIENT_ZIP\";\r\nexport const WEBAPPOINTMENT_SET_PATIENT_EMAIL = \"WEBAPPOINTMENT_SET_PATIENT_EMAIL\";\r\nexport const WEBAPPOINTMENT_SET_PATIENT_PHONE = \"WEBAPPOINTMENT_SET_PATIENT_PHONE\";\r\nexport const WEBAPPOINTMENT_SET_PATIENT_MRN = \"WEBAPPOINTMENT_SET_PATIENT_MRN\";\r\n\r\nexport const WEBAPPOINTMENT_SET_APPOINTMENT_REASON = \"WEBAPPOINTMENT_SET_APPOINTMENT_REASON\";\r\nexport const WEBAPPOINTMENT_SET_APPOINTMENT_DIAGNOSIS = \"WEBAPPOINTMENT_SET_APPOINTMENT_DIAGNOSIS\";\r\nexport const WEBAPPOINTMENT_SET_APPOINTMENT_LOCATION = \"WEBAPPOINTMENT_SET_APPOINTMENT_LOCATION\";\r\nexport const WEBAPPOINTMENT_SET_APPOINTMENT_PROVIDER = \"WEBAPPOINTMENT_SET_APPOINTMENT_PROVIDER\";\r\nexport const WEBAPPOINTMENT_SET_APPOINTMENT_DEPARTMENT = \"WEBAPPOINTMENT_SET_APPOINTMENT_DEPARTMENT\";\r\nexport const WEBAPPOINTMENT_SET_APPOINTMENT_TYPE = \"WEBAPPOINTMENT_SET_APPOINTMENT_TYPE\";\r\nexport const WEBAPPOINTMENT_SET_APPOINTMENT_DAY = \"WEBAPPOINTMENT_SET_APPOINTMENT_DAY\";\r\nexport const WEBAPPOINTMENT_SET_APPOINTMENT_TIME = \"WEBAPPOINTMENT_SET_APPOINTMENT_TIME\";\r\nexport const WEBAPPOINTMENT_SET_APPOINTMENT_HAVE_REFERRING_PHYS = \"WEBAPPOINTMENT_SET_APPOINTMENT_HAVE_REFERRING_PHYS\";\r\nexport const WEBAPPOINTMENT_SET_APPOINTMENT_REFERRING_FNAME = \"WEBAPPOINTMENT_SET_APPOINTMENT_REFERRING_FNAME\";\r\nexport const WEBAPPOINTMENT_SET_APPOINTMENT_REFERRING_LNAME = \"WEBAPPOINTMENT_SET_APPOINTMENT_REFERRING_LNAME\";\r\nexport const WEBAPPOINTMENT_SET_APPOINTMENT_REFERRING_PHONE = \"WEBAPPOINTMENT_SET_APPOINTMENT_REFERRING_PHONE\";\r\n\r\nexport const WEBAPPOINTMENT_SET_APPOINTMENT_NEED_SERVICES = \"WEBAPPOINTMENT_SET_APPOINTMENT_NEED_SERVICES\";\r\nexport const WEBAPPOINTMENT_SET_APPOINTMENT_WHICH_SERVICE = \"WEBAPPOINTMENT_SET_APPOINTMENT_WHICH_SERVICE\";\r\nexport const WEBAPPOINTMENT_SET_APPOINTMENT_FOREIGN_LANGUAGE = \"WEBAPPOINTMENT_SET_APPOINTMENT_FOREIGN_LANGUAGE\";\r\n\r\nexport const WEBAPPOINTMENT_SET_PAYMENT_METHOD = \"WEBAPPOINTMENT_SET_PAYMENT_METHOD\";\r\nexport const WEBAPPOINTMENT_SET_INSURANCE_COMPANY = \"WEBAPPOINTMENT_SET_INSURANCE_COMPANY\";\r\nexport const WEBAPPOINTMENT_SET_INSURANCE_POLICY_NUMBER = \"WEBAPPOINTMENT_SET_INSURANCE_POLICY\";\r\nexport const WEBAPPOINTMENT_SET_INSURANCE_POLICY_TYPE = \"WEBAPPOINTMENT_SET_INSURANCE_POLICY_TYPE\";\r\nexport const WEBAPPOINTMENT_SET_INSURANCE_GROUP = \"WEBAPPOINTMENT_SET_INSURANCE_GROUP\";\r\nexport const WEBAPPOINTMENT_SET_INSURANCE_POLICY_HOLDER_IS_ME = \"WEBAPPOINTMENT_SET_INSURANCE_POLICY_HOLDER_IS_ME\";\r\nexport const WEBAPPOINTMENT_SET_INSURANCE_WHERE_TO_SEND = \"WEBAPPOINTMENT_SET_INSURANCE_WHERE_TO_SEND\";\r\nexport const WEBAPPOINTMENT_SET_INSURANCE_HOLDER_RELATION = \"WEBAPPOINTMENT_SET_INSURANCE_HOLDER_RELATION\";\r\nexport const WEBAPPOINTMENT_SET_INSURANCE_HOLDER_FNAME = \"WEBAPPOINTMENT_SET_INSURANCE_HOLDER_FNAME\";\r\nexport const WEBAPPOINTMENT_SET_INSURANCE_HOLDER_LNAME = \"WEBAPPOINTMENT_SET_INSURANCE_HOLDER_LNAME\";\r\nexport const WEBAPPOINTMENT_SET_INSURANCE_HOLDER_DOB = \"WEBAPPOINTMENT_SET_INSURANCE_HOLDER_DOB\";\r\nexport const WEBAPPOINTMENT_SET_INSURANCE_HOLDER_EMAIL = \"WEBAPPOINTMENT_SET_INSURANCE_HOLDER_EMAIL\";\r\nexport const WEBAPPOINTMENT_SET_BILLING_RELATION = \"WEBAPPOINTMENT_SET_BILLING_RELATION\";\r\nexport const WEBAPPOINTMENT_SET_BILLING_FNAME = \"WEBAPPOINTMENT_SET_BILLING_FNAME\";\r\nexport const WEBAPPOINTMENT_SET_BILLING_LNAME = \"WEBAPPOINTMENT_SET_BILLING_LNAME\";\r\nexport const WEBAPPOINTMENT_SET_BILLING_DOB = \"WEBAPPOINTMENT_SET_BILLING_DOB\";\r\nexport const WEBAPPOINTMENT_SET_BILLING_ADDRESS1 = \"WEBAPPOINTMENT_SET_BILLING_ADDRESS1\";\r\nexport const WEBAPPOINTMENT_SET_BILLING_ADDRESS2 = \"WEBAPPOINTMENT_SET_BILLING_ADDRESS2\";\r\nexport const WEBAPPOINTMENT_SET_BILLING_CITY = \"WEBAPPOINTMENT_SET_BILLING_CITY\";\r\nexport const WEBAPPOINTMENT_SET_BILLING_STATE = \"WEBAPPOINTMENT_SET_BILLING_STATE\";\r\nexport const WEBAPPOINTMENT_SET_BILLING_ZIP = \"WEBAPPOINTMENT_SET_BILLING_ZIP\";\r\n\r\nexport const WEBAPPOINTMENT_SET_REQUEST_RESULTS = \"WEBAPPOINTMENT_SET_REQUEST_RESULTS\";\r\n\r\nexport const WEBAPPOINTMENT_SET_PFA_CALLBACK_WINDOW_DISMISSED = \"WEBAPPOINTMENT_SET_PFA_CALLBACK_WINDOW_DISMISSED\";\r\n\r\nexport const WEBAPPOINTMENT_CLEAR_OUT_DATA = \"WEBAPPOINTMENT_CLEAR_OUT_DATA\";\r\n","import * as types from '../../constants/actionTypes';\r\n\r\n// Opening pages: What to expect, Who is the request for?, Has the patient\r\n// been seen at CC recently?\r\nexport function webAppointmentAcknowledgedWhatToExpect(value) { // boolean param.\r\n return { type: types.WEBAPPOINTMENT_ACKNOWLEDGED_WHAT_TO_EXPECT, value };\r\n}\r\nexport function webAppointmentSetForMe(value) { // boolean\r\n return { type: types.WEBAPPOINTMENT_SET_WHO_FOR, value };\r\n}\r\nexport function webAppointmentSetPatientSeenRecently(value) { // boolean param.\r\n return { type: types.WEBAPPOINTMENT_SET_PATIENT_SEEN_RECENTLY, value };\r\n}\r\n\r\n// Proxy/Contact Info\r\nexport function webAppointmentSetContactOver18(value) { // boolean param.\r\n return { type: types.WEBAPPOINTMENT_SET_CONTACT_OVER_18, value };\r\n}\r\nexport function webAppointmentSetContactRelation(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_CONTACT_RELATION, value };\r\n}\r\nexport function webAppointmentSetContactFirstName(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_CONTACT_FIRST_NAME, value };\r\n}\r\nexport function webAppointmentSetContactLastName(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_CONTACT_LAST_NAME, value };\r\n}\r\nexport function webAppointmentSetContactEmail(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_CONTACT_EMAIL, value };\r\n}\r\nexport function webAppointmentSetContactPhone(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_CONTACT_PHONE, value };\r\n}\r\n\r\n// Patient Info\r\nexport function webAppointmentSetPatientFirstName(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_PATIENT_FIRST_NAME, value };\r\n}\r\nexport function webAppointmentSetPatientLastName(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_PATIENT_LAST_NAME, value };\r\n}\r\nexport function webAppointmentSetPatientGender(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_PATIENT_GENDER, value };\r\n}\r\nexport function webAppointmentSetPatientMaritalStatus(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_PATIENT_MARITAL_STATUS, value };\r\n}\r\nexport function webAppointmentSetPatientDob(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_PATIENT_DOB, value };\r\n}\r\nexport function webAppointmentSetPatientSsn(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_PATIENT_SSN, value };\r\n}\r\n\r\n// Patient Contact Info\r\nexport function webAppointmentSetPatientAddress1(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_PATIENT_ADDRESS1, value };\r\n}\r\nexport function webAppointmentSetPatientAddress2(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_PATIENT_ADDRESS2, value };\r\n}\r\nexport function webAppointmentSetPatientCity(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_PATIENT_CITY, value };\r\n}\r\nexport function webAppointmentSetPatientState(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_PATIENT_STATE, value };\r\n}\r\nexport function webAppointmentSetPatientZip(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_PATIENT_ZIP, value };\r\n}\r\nexport function webAppointmentSetPatientEmail(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_PATIENT_EMAIL, value };\r\n}\r\nexport function webAppointmentSetPatientPhone(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_PATIENT_PHONE, value };\r\n}\r\nexport function webAppointmentSetPatientMrn(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_PATIENT_MRN, value };\r\n}\r\n\r\n// Appointment Info\r\nexport function webAppointmentSetAppointmentReason(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_APPOINTMENT_REASON, value };\r\n}\r\nexport function webAppointmentSetAppointmentDiagnosis(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_APPOINTMENT_DIAGNOSIS, value };\r\n}\r\nexport function webAppointmentSetAppointmentProvider(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_APPOINTMENT_PROVIDER, value };\r\n}\r\nexport function webAppointmentSetAppointmentDepartment(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_APPOINTMENT_DEPARTMENT, value };\r\n}\r\nexport function webAppointmentSetAppointmentLocation(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_APPOINTMENT_LOCATION, value };\r\n}\r\nexport function webAppointmentSetAppointmentType(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_APPOINTMENT_TYPE, value };\r\n}\r\nexport function webAppointmentSetAppointmentDay(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_APPOINTMENT_DAY, value };\r\n}\r\nexport function webAppointmentSetAppointmentTime(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_APPOINTMENT_TIME, value };\r\n}\r\nexport function webAppointmentSetAppointmentReferringPhysFName(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_APPOINTMENT_REFERRING_FNAME, value };\r\n}\r\nexport function webAppointmentSetAppointmentReferringPhysLName(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_APPOINTMENT_REFERRING_LNAME, value };\r\n}\r\nexport function webAppointmentSetAppointmentReferringPhysPhone(value) { // string param.\r\n return { type: types.WEBAPPOINTMENT_SET_APPOINTMENT_REFERRING_PHONE, value };\r\n}\r\nexport function webAppointmentSetAppointmentHaveReferringPhys(value) { // bool\r\n return { type: types.WEBAPPOINTMENT_SET_APPOINTMENT_HAVE_REFERRING_PHYS, value };\r\n}\r\nexport function webAppointmentSetAppointmentNeedServices(value) { // bool\r\n return { type: types.WEBAPPOINTMENT_SET_APPOINTMENT_NEED_SERVICES, value };\r\n}\r\nexport function webAppointmentSetAppointmentWhichService(value) { // 'yes', 'no'\r\n return { type: types.WEBAPPOINTMENT_SET_APPOINTMENT_WHICH_SERVICE, value };\r\n}\r\nexport function webAppointmentSetAppointmentForeignLanguage(value) { // 'yes', 'no'\r\n return { type: types.WEBAPPOINTMENT_SET_APPOINTMENT_FOREIGN_LANGUAGE, value };\r\n}\r\n\r\n// Billing and Insurance\r\nexport function webAppointmentSetPaymentMethod(value) { // 'yes', 'no'\r\n return { type: types.WEBAPPOINTMENT_SET_PAYMENT_METHOD, value };\r\n}\r\nexport function webAppointmentSetInsuranceCompany(value) {\r\n return { type: types.WEBAPPOINTMENT_SET_INSURANCE_COMPANY, value };\r\n}\r\nexport function webAppointmentSetInsurancePolicyNumber(value) {\r\n return { type: types.WEBAPPOINTMENT_SET_INSURANCE_POLICY_NUMBER, value };\r\n}\r\nexport function webAppointmentSetInsurancePolicyType(value) {\r\n return { type: types.WEBAPPOINTMENT_SET_INSURANCE_POLICY_TYPE, value };\r\n}\r\nexport function webAppointmentSetInsuranceGroup(value) {\r\n return { type: types.WEBAPPOINTMENT_SET_INSURANCE_GROUP, value };\r\n}\r\nexport function webAppointmentSetInsuranceWhereToSend(value) {\r\n return { type: types.WEBAPPOINTMENT_SET_INSURANCE_WHERE_TO_SEND, value };\r\n}\r\n\r\nexport function webAppointmentSetInsuranceHolderRelation(value) {\r\n return { type: types.WEBAPPOINTMENT_SET_INSURANCE_HOLDER_RELATION, value };\r\n}\r\nexport function webAppointmentSetInsuranceHolderFname(value) {\r\n return { type: types.WEBAPPOINTMENT_SET_INSURANCE_HOLDER_FNAME, value };\r\n}\r\nexport function webAppointmentSetInsuranceHolderLname(value) {\r\n return { type: types.WEBAPPOINTMENT_SET_INSURANCE_HOLDER_LNAME, value };\r\n}\r\nexport function webAppointmentSetInsuranceHolderDob(value) {\r\n return { type: types.WEBAPPOINTMENT_SET_INSURANCE_HOLDER_DOB, value };\r\n}\r\nexport function webAppointmentSetInsuranceHolderEmail(value) {\r\n return { type: types.WEBAPPOINTMENT_SET_INSURANCE_HOLDER_EMAIL, value };\r\n}\r\n\r\n// Billing info and address\r\nexport function webAppointmentSetBillingRelation(value) {\r\n return { type: types.WEBAPPOINTMENT_SET_BILLING_RELATION, value };\r\n}\r\nexport function webAppointmentSetBillingFirstName(value) {\r\n return { type: types.WEBAPPOINTMENT_SET_BILLING_FNAME, value };\r\n}\r\nexport function webAppointmentSetBillingLastName(value) {\r\n return { type: types.WEBAPPOINTMENT_SET_BILLING_LNAME, value };\r\n}\r\nexport function webAppointmentSetBillingDob(value) {\r\n return { type: types.WEBAPPOINTMENT_SET_BILLING_DOB, value };\r\n}\r\nexport function webAppointmentSetBillingAddress1(value) {\r\n return { type: types.WEBAPPOINTMENT_SET_BILLING_ADDRESS1, value };\r\n}\r\nexport function webAppointmentSetBillingAddress2(value) {\r\n return { type: types.WEBAPPOINTMENT_SET_BILLING_ADDRESS2, value };\r\n}\r\nexport function webAppointmentSetBillingCity(value) {\r\n return { type: types.WEBAPPOINTMENT_SET_BILLING_CITY, value };\r\n}\r\nexport function webAppointmentSetBillingState(value) {\r\n return { type: types.WEBAPPOINTMENT_SET_BILLING_STATE, value };\r\n}\r\nexport function webAppointmentSetBillingZip(value) {\r\n return { type: types.WEBAPPOINTMENT_SET_BILLING_ZIP, value };\r\n}\r\n\r\n// Scheduling PFA Callback.\r\nexport function webAppointmentPfaCallbackWindowDismissed(value) {\r\n return { type: types.WEBAPPOINTMENT_SET_PFA_CALLBACK_WINDOW_DISMISSED, value };\r\n}\r\n\r\n// Finally requesting the appointment\r\nexport function webAppointmentSetRequestResults(value) {\r\n return { type: types.WEBAPPOINTMENT_SET_REQUEST_RESULTS, value };\r\n}\r\n\r\nexport function webAppointmentClearOutData() {\r\n return { type: types.WEBAPPOINTMENT_CLEAR_OUT_DATA, value: null };\r\n}\r\n","// This compares the key field for two objects.\r\n// Returns: -1 if o1[key] < o2[key]\r\n// 0 if o1[key] === o2[key]\r\n// +1 if o1[key] > o2[key]\r\n//\r\n// Ex: Use in a sort() to alphabetize the displayable labels \r\n// for a filterInput.\r\nexport default function compareObjectKeys(key, ignoreCase) {\r\n return (o1, o2) => {\r\n if (ignoreCase) {\r\n return o1[key].localeCompare(o2[key]);\r\n }\r\n else {\r\n return (o1[key] === o2[key]) ?\r\n 0 :\r\n (o1[key] < o2[key]) ?\r\n -1 :\r\n 1;\r\n }\r\n }\r\n}","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Link } from 'react-router-dom';\r\nimport compareObjectKeys from '../../../functions/compareObjectKeys';\r\nimport './ArrangeableListInput.css';\r\nimport iconArrowUp from '../../../imgs/icon-arrow-up.svg';\r\nimport iconArrowDown from '../../../imgs/icon-arrow-down.svg';\r\nimport iconArrowUpMedGray from '../../../imgs/icon-arrow--up-med-gray.svg';\r\nimport iconArrowDownMedGray from '../../../imgs/icon-arrow--down-med-gray.svg';\r\nimport iconClose from '../../../imgs/icon-close--med-gray.svg';\r\n\r\nexport default class ArrangeableListInput extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n items: [],\r\n selectedItemId: null\r\n };\r\n }\r\n \r\n // Takes the options provided, translates into a standard object format, and sets as items state\r\n setItems = (newOptions) => {\r\n if (newOptions && newOptions.length) {\r\n let validItems = newOptions\r\n .filter((option) => (option && \r\n typeof option === \"object\" && \r\n option.id !== undefined && \r\n option.text !== undefined\r\n ));\r\n\r\n if (validItems.length) {\r\n let numberedItems = validItems\r\n .filter((item) => (item.order && item.order > 0))\r\n .sort(compareObjectKeys(\"order\"));\r\n\r\n let unnumberedItems = validItems\r\n .filter((item) => !(item.order && item.order > 0))\r\n .sort(compareObjectKeys(\"text\", true));\r\n\r\n let items = [...unnumberedItems, ...numberedItems]\r\n .map((option) => { \r\n return { id: option.id, internalLink: option.internalLink, text: option.text };\r\n });\r\n\r\n this.setState({ items });\r\n } \r\n }\r\n }\r\n\r\n // Sets the id provided as the selectedId, or nullifies the selectedId if the one passed in matches\r\n selectItem = (id) => {\r\n let selectedItemId = (id !== this.state.selectedItemId) ? id : null;\r\n\r\n this.setState({ selectedItemId });\r\n }\r\n \r\n // Moves item in the direction provided to the function, updating the items array's order accordingly\r\n moveItem = (direction) => {\r\n let itemIndex = this.state.items.findIndex((item) => item.id === this.state.selectedItemId);\r\n \r\n let switchingItem = (direction === \"up\") ?\r\n itemIndex - 1 :\r\n itemIndex + 1;\r\n \r\n this.setState((prevState) => {\r\n let items = prevState.items;\r\n \r\n [items[itemIndex], items[switchingItem]] = [items[switchingItem], items[itemIndex]];\r\n \r\n return { items };\r\n });\r\n }\r\n \r\n addItem = (addedItem) => {\r\n let itemIsInList = this.state.items.find((item) => item.id === addedItem.id);\r\n \r\n if (!itemIsInList) {\r\n this.setState((prevState) => {\r\n let items = [...prevState.items, { id: addedItem.id, internalLink: addedItem.internalLink, text: addedItem.text }];\r\n\r\n return { items };\r\n });\r\n }\r\n }\r\n \r\n // Removes the selected item from the list\r\n removeItem = () => {\r\n let itemIndex = this.state.items.findIndex((item) => item.id === this.state.selectedItemId);\r\n \r\n let itemObject = this.state.items[itemIndex];\r\n \r\n if (itemIndex >= -1) {\r\n if (itemIndex + 1 !== this.state.items.length) {\r\n this.selectItem(this.state.items[itemIndex + 1].id);\r\n }\r\n else if (itemIndex !== 0) {\r\n this.selectItem(this.state.items[itemIndex - 1].id);\r\n }\r\n \r\n this.setState((prevState) => {\r\n if (prevState.items.length > 1) {\r\n prevState.items.splice(itemIndex, 1)\r\n }\r\n else {\r\n prevState.items = [];\r\n }\r\n\r\n return { items: prevState.items };\r\n }, () => {\r\n if (this.props.onRemove) {\r\n this.props.onRemove(itemObject);\r\n }\r\n });\r\n }\r\n }\r\n \r\n // Creates arrow based on the direction being provided and whether or not the selected item can be moved in that direction\r\n buildArrow = (direction) => {\r\n let indexToCheck = (direction === \"up\") ? 0 : this.state.items.length - 1;\r\n\r\n if (this.state.selectedItemId && this.state.items[indexToCheck].id !== this.state.selectedItemId) {\r\n let activeArrowSvg = (direction === \"up\") ? iconArrowUpMedGray : iconArrowDownMedGray;\r\n\r\n return (\r\n
this.moveItem(direction)}>\r\n {direction}\r\n
\r\n )\r\n }\r\n else {\r\n let arrowSvg = (direction === \"up\") ? iconArrowUp : iconArrowDown;\r\n\r\n return (\r\n
\r\n {direction}\r\n
\r\n )\r\n }\r\n }\r\n \r\n // Creates remove button if hasRemoveButton is true\r\n buildRemoveButton = () => {\r\n let removeButton = (this.props.hasRemoveButton) ?\r\n
this.removeItem()}\r\n >\r\n \"remove\"\r\n
:\r\n null;\r\n\r\n return removeButton;\r\n }\r\n \r\n // Gets the values of the arrangeable list input\r\n getValue = () => {\r\n let objectsWithOrder = \r\n this.state.items\r\n .map((item, index) => { return { id: item.id, internalLink: item.internalLink, text: item.text, order: index + 1 } });\r\n\r\n return objectsWithOrder;\r\n }\r\n\r\n UNSAFE_componentWillMount() {\r\n this.setItems(this.props.options);\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(newProps) {\r\n if ( 'options' in newProps && \r\n newProps.options !== undefined && \r\n newProps.options.length !== this.state.items.length\r\n ) {\r\n this.setItems(newProps.options);\r\n }\r\n }\r\n \r\n render() {\r\n if (!this.props.isEditable && this.state.selectedItemId) {\r\n this.selectItem(null);\r\n }\r\n \r\n let label = (this.props.label) ?\r\n :\r\n null;\r\n \r\n let verticalSpacingClass = this.props.verticalSpacing === \"compact\" ? \"field--compact\" : \"field\";\r\n \r\n let arrows = (this.props.isEditable && this.state.items.length) ?\r\n
\r\n {this.buildArrow(\"up\")}\r\n {this.buildArrow(\"down\")}\r\n {(this.state.selectedItemId) ? this.buildRemoveButton() : null}\r\n
: \r\n null;\r\n \r\n let inputDisplay = (this.props.isEditable) ?\r\n \r\n
\r\n
    \r\n {(this.state.items.length) ? this.state.items.map((item) =>
  • this.selectItem(item.id)} \r\n className={(this.state.selectedItemId === item.id) ? \"arrangeable-list-input__item--selected\" : \"\"}>\r\n {item.text}\r\n
  • ) : \r\n There is no content to display.}\r\n
\r\n
\r\n {arrows}\r\n
:\r\n \r\n \r\n ;\r\n\r\n return (
{ if (!(navigator.userAgent.indexOf(\"MSIE \") > -1 || navigator.userAgent.indexOf(\"Trident/\") > -1)) { this.selectItem(null) }}}>\r\n {label}\r\n {inputDisplay}\r\n
);\r\n }\r\n}\r\n\r\nArrangeableListInput.defaultProps = {\r\n hasRemoveButton: false,\r\n isEditable: true\r\n};\r\n\r\nArrangeableListInput.propTypes = {\r\n className: PropTypes.string,\r\n hasRemoveButton: PropTypes.bool,\r\n id: PropTypes.string.isRequired,\r\n isEditable: PropTypes.bool,\r\n label: PropTypes.string,\r\n onRemove: PropTypes.func,\r\n options: PropTypes.arrayOf(PropTypes.shape({\r\n id: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.number]).isRequired,\r\n internalLink: PropTypes.string,\r\n order: PropTypes.number,\r\n text: PropTypes.string.isRequired\r\n })),\r\n verticalSpacing: PropTypes.string\r\n}","export default class InputError extends Error {\r\n constructor(message, value, ...params) {\r\n // Pass remaining arguments (including vendor specific ones) to parent constructor\r\n super(message, value, ...params);\r\n\r\n // Custom debugging information\r\n this.message = message;\r\n this.value = value;\r\n }\r\n}","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport InputError from '../../../errors/InputError';\r\nimport './TextInput.css';\r\n\r\nexport default class TextInput extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n value: (this.props.existingContent !== undefined && this.props.existingContent !== null) ? this.props.existingContent : \"\"\r\n };\r\n this.newValue = null;\r\n this.newSelectionStart = null;\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(newProps) {\r\n if ('existingContent' in newProps && newProps.existingContent !== undefined && newProps.existingContent !== this.state.value) {\r\n this.setState({ value: newProps.existingContent });\r\n }\r\n\r\n if (this.props.selectedOption !== null) {\r\n const selectedOption = newProps.selectedOption;\r\n\r\n if (selectedOption !== this.props.selectedOption) {\r\n if (selectedOption !== '')\r\n this.setState({ value: selectedOption })\r\n }\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n let input = document.getElementById(this.props.id);\r\n let needToValidate = false;\r\n\r\n if (this.newValue !== null) {\r\n input.value = this.newValue;\r\n this.newValue = null;\r\n needToValidate = true;\r\n }\r\n if (this.newSelectionStart !== null) {\r\n input.selectionStart = this.newSelectionStart;\r\n input.selectionEnd = this.newSelectionStart;\r\n this.newSelectionStart = null;\r\n needToValidate = true;\r\n }\r\n if (this.props.validateOnChange && needToValidate) {\r\n this.validate(input, false);\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n let target = document.getElementById(this.props.id);\r\n if (target && target.value) { // Is a string with length > 0\r\n this.validate(target, true);\r\n }\r\n }\r\n\r\n focusAtSetCaret(caretPos) {\r\n let elem = this[`${this.props.id}__text-input`];\r\n if (elem != null) {\r\n elem.focus();\r\n if (elem.createTextRange) {\r\n let range = elem.createTextRange();\r\n range.move('character', caretPos);\r\n range.select();\r\n }\r\n else if (elem.setSelectionRange) {\r\n elem.setSelectionRange(caretPos, caretPos);\r\n }\r\n }\r\n }\r\n\r\n hasFocus() {\r\n return this[`${this.props.id}__text-input`] === document.activeElement;\r\n }\r\n\r\n selectionStart() {\r\n return this[`${this.props.id}__text-input`].selectionStart;\r\n }\r\n\r\n getValue = () => {\r\n let value = this.state.value;\r\n\r\n if (this.props.trim) {\r\n value = value.trim();\r\n this.setState({ value });\r\n }\r\n\r\n if (this.props.required && value === \"\") {\r\n throw new InputError(this.props.label + \" is Required\", value);\r\n }\r\n\r\n // only validate the regex if the field is populated\r\n if (this.props.patternMatch && value !== \"\") {\r\n if (!value.match(this.props.patternMatch)) {\r\n let patternError = (this.props.patternMatchError) ?\r\n this.props.patternMatchError :\r\n this.props.label + \" is Invalid\";\r\n\r\n throw new InputError(patternError, value);\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n validate = (target, inv) => {\r\n let newErrorMessage = null;\r\n if (this.props.patternMatch) {\r\n if (target.value && !target.value.match(this.props.patternMatch)) {\r\n newErrorMessage = (this.props.patternMatchError) ?\r\n this.props.patternMatchError :\r\n this.props.label + \" is not the correct format.\";\r\n }\r\n }\r\n if (this.props.required) {\r\n if (!target.value) {\r\n newErrorMessage = (this.props.requiredError) ?\r\n this.props.requiredError :\r\n this.props.label + \" is a required field.\";\r\n }\r\n }\r\n if (newErrorMessage && inv) {\r\n this.setState({ className: this.props.validationErrorClass });\r\n }\r\n if (!newErrorMessage || inv) {\r\n this.setState({\r\n validationError: newErrorMessage,\r\n contentWrapperClass: newErrorMessage ? this.props.validationErrorClass : ''\r\n });\r\n }\r\n }\r\n\r\n handleChange = (e) => {\r\n e.persist();\r\n\r\n let callOnChange = () => {\r\n if (this.props.onChange) {\r\n let newValues = this.props.onChange(e);\r\n if (typeof newValues === \"object\") {\r\n if (newValues[\"value\"] !== undefined) {\r\n this.newValue = newValues.value;\r\n }\r\n if (newValues[\"selectionStart\"] !== undefined) {\r\n this.newSelectionStart = newValues.selectionStart;\r\n }\r\n }\r\n }\r\n if (this.props.validateOnChange) {\r\n this.validate(e.target, false);\r\n }\r\n }\r\n\r\n this.setState((state, props) => {\r\n if (props.maxLength) {\r\n if (typeof e.target.value === 'number') {\r\n return {\r\n value: parseInt(e.target.value.toString().slice(0, props.maxLength), 10)\r\n }\r\n }\r\n else {\r\n return {\r\n value: e.target.value.slice(0, props.maxLength)\r\n }\r\n }\r\n }\r\n else {\r\n return { value: e.target.value }\r\n }\r\n }, callOnChange);\r\n }\r\n\r\n handleBlur = (e) => {\r\n if (this.props.onBlur) {\r\n this.props.onBlur(e);\r\n }\r\n if (this.props.validateOnBlur) {\r\n this.validate(e.target, true);\r\n }\r\n }\r\n\r\n handleKeyUp = (e) => {\r\n if (this.props.onKeyUp) {\r\n this.props.onKeyUp(e);\r\n }\r\n }\r\n\r\n render() {\r\n\r\n let label = (this.props.label) ?\r\n :\r\n null;\r\n\r\n let inputHelperText = this.props.helperText;\r\n let inputInfoText = this.props.infoText;\r\n\r\n let helperText = inputHelperText ?\r\n \r\n {inputHelperText}\r\n :\r\n null;\r\n\r\n let infoText = inputInfoText ?\r\n \r\n {inputInfoText}\r\n :\r\n null;\r\n\r\n let errorText = this.props.errorMessage;\r\n if (!errorText && this.state.validationError) {\r\n errorText = this.state.validationError;\r\n }\r\n let errorMessage = errorText ?\r\n \r\n {errorText}\r\n :\r\n null;\r\n\r\n let existingContent = (this.props.type !== \"password\" || !this.props.existingContent) ?\r\n this.props.existingContent :\r\n this.props.existingContent.replace(/.*/, '**********');\r\n\r\n let requiredFieldIndicator = (this.props.required) ?\r\n :\r\n null;\r\n\r\n let verticalSpacingClass = this.props.verticalSpacing === \"compact\" ? \"field--compact\" : \"field\";\r\n\r\n let contentWrapperClass = this.props.contentWrapperClass;\r\n if (this.state.contentWrapperClass) {\r\n contentWrapperClass += \" \" + this.state.contentWrapperClass;\r\n }\r\n\r\n let numberMax = this.props.numberMax;\r\n if ((numberMax === undefined || numberMax === null) && this.props.type === 'date') {\r\n numberMax = '9999-12-31';\r\n }\r\n\r\n let inputDisplay = (this.props.isEditable) ?\r\n \r\n {infoText}\r\n
\r\n {label}\r\n {requiredFieldIndicator}\r\n
\r\n this.handleBlur(e)}\r\n onChange={(e) => this.handleChange(e)}\r\n onKeyUp={(e) => this.handleKeyUp(e)}\r\n placeholder={this.props.placeholderText}\r\n ref={instance => { this[`${this.props.id}__text-input`] = instance; }}\r\n required={this.props.required}\r\n step={this.props.numberStep}\r\n type={this.props.type}\r\n value={this.state.value}\r\n />\r\n {helperText}\r\n {errorMessage}\r\n
:\r\n \r\n {label}\r\n
\r\n {existingContent}\r\n
\r\n
;\r\n\r\n return (\r\n
\r\n {inputDisplay}\r\n
\r\n );\r\n }\r\n}\r\n\r\nTextInput.defaultProps = {\r\n autoComplete: true,\r\n isEditable: true,\r\n trim: false,\r\n type: \"text\"\r\n};\r\n\r\nTextInput.propTypes = {\r\n autoComplete: PropTypes.bool,\r\n className: PropTypes.string,\r\n contentWrapperClass: PropTypes.string,\r\n disabled: PropTypes.bool,\r\n errorMessage: PropTypes.string,\r\n existingContent: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n helperText: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),\r\n id: PropTypes.string.isRequired,\r\n infoText: PropTypes.string,\r\n isEditable: PropTypes.bool,\r\n label: PropTypes.string,\r\n maxLength: PropTypes.string,\r\n minLength: PropTypes.string,\r\n numberMax: PropTypes.string,\r\n numberMin: PropTypes.string,\r\n numberStep: PropTypes.string,\r\n onChange: PropTypes.func,\r\n patternMatch: PropTypes.instanceOf(RegExp),\r\n patternMatchError: PropTypes.string,\r\n placeholderText: PropTypes.string,\r\n required: PropTypes.bool,\r\n requiredError: PropTypes.string,\r\n selectedOption: PropTypes.string,\r\n trim: PropTypes.bool,\r\n type: PropTypes.string,\r\n validateOnBlur: PropTypes.bool,\r\n validateOnChange: PropTypes.bool,\r\n validationErrorClass: PropTypes.string,\r\n verticalSpacing: PropTypes.string\r\n}\r\n","// Source: https://github.com/GA-MO/react-confirm-alert\r\nimport { confirmAlert } from 'react-confirm-alert';\r\nimport 'react-confirm-alert/src/react-confirm-alert.css';\r\nimport '../sass/content/react-confirm-alert-override.css';\r\n\r\nexport default function createConfirmAlert(confirmAlertObject) {\r\n confirmAlert(confirmAlertObject)\r\n};\r\n\r\n// ---------------\r\n// How to use it:\r\n// ---------------\r\n\r\n// -- The key/value options for the confirmAlertObject\r\n// confirmAlert({\r\n// title: 'Confirm to submit', // Title dialog\r\n// message: 'Are you sure you want to do this?', // Message dialog\r\n// childrenElement: () =>
Custom UI
, // Custom UI or Component\r\n// buttons: [\r\n// {\r\n// label: 'Cancel' // Text for button\r\n// onClick: props.onCancel() // Action for button\r\n// }\r\n// ]\r\n//})\r\n\r\n// -- Example case for a function component\r\n// const SomeComponent = (props) => {\r\n// let confirmAlertObject = {\r\n// title: 'Confirm Action',\r\n// message: 'Are you sure you want to do this?',\r\n// buttons: [\r\n// {\r\n// label: 'Cancel',\r\n// onClick: props.onCancel()\r\n// },\r\n// {\r\n// label: 'Confirm',\r\n// onClick: props.onClick()\r\n// }\r\n// ]\r\n// };\r\n// render() {\r\n// return (\r\n//
\r\n// \r\n//
\r\n// );\r\n// }\r\n// }\r\n\r\n// -- Example case for a class component\r\n// class App extends React.Component {\r\n// state = {\r\n// showDialog: false,\r\n// }\r\n// render() {\r\n// return (\r\n//
\r\n// {\r\n// this.state.showDialog &&\r\n// alert('Action after Confirm')}\r\n// onCancel={() => alert('Action after Cancel')}\r\n// />\r\n// }\r\n//
\r\n// );\r\n// }\r\n// }\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Link } from 'react-router-dom';\r\nimport './ButtonInput.css';\r\nimport createConfirmAlert from '../../../../shared/functions/createConfirmAlert';\r\n\r\nexport default class ButtonInput extends Component {\r\n onClick = (confirmAlertObject) => {\r\n if (this.props.requireConfirmation && confirmAlertObject) {\r\n this.props.createConfirmAlert(confirmAlertObject);\r\n }\r\n else if (this.props.type === \"file-button\") {\r\n this.fileUploadInput.click();\r\n }\r\n else if (this.props.onClick) {\r\n this.props.onClick();\r\n }\r\n }\r\n\r\n render() {\r\n // iconButton logic\r\n let icon = null;\r\n\r\n if (this.props.icon) {\r\n let iconClass = `icon-${this.props.icon}`;\r\n icon = ;\r\n }\r\n\r\n const buttonWrapperClass = (this.props.type === \"icon-button\") ? \"button-input--icon\" : '';\r\n const verticalSpacingClass = this.props.verticalSpacing === \"compact\" ? \"compact\" : \"\";\r\n\r\n const type = (this.props.type !== \"submit\") ? \"button\" : this.props.type;\r\n\r\n // submit logic\r\n let value = (this.props.value) ?\r\n this.props.value :\r\n (this.props.type === \"submit\") ?\r\n \"Submit\" :\r\n \"\";\r\n\r\n let confirmAlertObject = {\r\n title: 'Confirm Action', // Title dialog\r\n message: 'Are you sure you want to do this?', // Message dialog\r\n buttons: [\r\n {\r\n label: 'Cancel',\r\n onClick: () => {}\r\n },\r\n {\r\n label: 'Confirm',\r\n onClick: () => this.props.onClick()\r\n }\r\n ]\r\n }\r\n\r\n const onFileChange = () => {\r\n let file = this.fileUploadInput.files[0];\r\n\r\n if (file) {\r\n if (this.props.onClick) {\r\n this.props.onClick(file);\r\n }\r\n }\r\n }\r\n\r\n // link logic\r\n let buttonContent = (this.props.internalLink) ?\r\n \r\n {icon}{value}\r\n :\r\n this.onClick(confirmAlertObject)}\r\n >\r\n {icon}{value}\r\n ;\r\n\r\n let fileInput = (this.props.type === \"file-button\") ?\r\n { this.fileUploadInput = instance; }}\r\n /> :\r\n null;\r\n\r\n // standard logic\r\n let errorMessage = (this.props.errorMessage) ?\r\n \r\n {this.props.errorMessage}\r\n :\r\n null;\r\n\r\n return (\r\n
\r\n {errorMessage}\r\n {buttonContent}\r\n {fileInput}\r\n
\r\n );\r\n }\r\n\r\n}\r\n\r\nButtonInput.defaultProps = {\r\n createConfirmAlert: createConfirmAlert\r\n}\r\n\r\nButtonInput.propTypes = {\r\n className: PropTypes.string,\r\n createConfirmAlert: PropTypes.func,\r\n disabled: PropTypes.bool,\r\n errorMessage: PropTypes.string,\r\n fileTypes: PropTypes.string,\r\n icon: PropTypes.string,\r\n id: PropTypes.string,\r\n internalLink: PropTypes.string,\r\n newWindow: PropTypes.bool,\r\n onClick: PropTypes.func,\r\n requireConfirmation: PropTypes.bool,\r\n type: PropTypes.string,\r\n value: PropTypes.string,\r\n verticalSpacing: PropTypes.string\r\n}\r\n","export const BREAKPOINT_SM = 600;\r\nexport const BREAKPOINT_MD = 900;\r\nexport const BREAKPOINT_LG = 1100;\r\nexport const BREAKPOINT_XL = 1400;","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport TextInput from '../text-input/TextInput';\r\nimport ButtonInput from '../button-input/ButtonInput';\r\nimport classNames from 'classnames';\r\nimport InputError from '../../../errors/InputError';\r\nimport compareObjectKeys from '../../../functions/compareObjectKeys';\r\nimport * as bp from '../../../../constants/breakpoints';\r\nimport './FilterInput.css';\r\n\r\nexport default class FilterInput extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.mobileBreakpoint = bp.BREAKPOINT_MD;\r\n\r\n this.state = {\r\n allOptions: [],\r\n inputValue: \"\",\r\n isMobile: (window.innerWidth >= bp.BREAKPOINT_MD) ? false : true,\r\n selectedOptions: [],\r\n optionDisplay: false\r\n };\r\n }\r\n\r\n // Takes the options provided, translates into a standard object format, and sets as the state variable passed\r\n setOptions = (newOptions, stateVariable) => {\r\n let options = newOptions.filter((option, filterIndex) => {\r\n if (option &&\r\n (typeof option !== \"object\" ||\r\n !(option.id === undefined &&\r\n option.text === undefined\r\n )\r\n )) {\r\n let foundIndex = (typeof option === \"object\") ?\r\n newOptions.findIndex(otherOption => otherOption.id === option.id) :\r\n newOptions.findIndex(otherOption => otherOption === option);\r\n\r\n return (foundIndex === filterIndex);\r\n }\r\n\r\n return false;\r\n })\r\n .map((option) => {\r\n const id = (typeof option === \"object\") ?\r\n option.id :\r\n option;\r\n\r\n const text = (typeof option === \"object\") ?\r\n option.text :\r\n option;\r\n\r\n const selected = (stateVariable !== \"selectedOptions\") ? false : undefined;\r\n\r\n return { id, text, selected };\r\n });\r\n\r\n let newState = {};\r\n newState[stateVariable] = options;\r\n\r\n if (stateVariable === \"selectedOptions\") {\r\n this.selectOptions(options);\r\n }\r\n\r\n this.setState(newState);\r\n\r\n return options;\r\n }\r\n\r\n // Sees if the option type passed into the FilterInput was a string, and makes the option a string if needed\r\n formatOption = (option) => {\r\n return (this.props.options && typeof this.props.options[0] === \"string\") ?\r\n option.id :\r\n option;\r\n }\r\n\r\n // Shows and hides the filter option dropdown box\r\n toggleOptionDisplay = (calledState) => {\r\n this.setState((prevState) => {\r\n let optionDisplay;\r\n\r\n // ensures that when the options are open clicks within the component don't close them\r\n if (calledState === \"click\" && prevState.optionDisplay) {\r\n optionDisplay = prevState.optionDisplay;\r\n }\r\n else if (calledState === \"blur\") {\r\n optionDisplay = false;\r\n }\r\n else if (calledState === \"focus\") {\r\n optionDisplay = true;\r\n }\r\n else {\r\n optionDisplay = !prevState.optionDisplay;\r\n }\r\n\r\n return { optionDisplay }\r\n });\r\n }\r\n\r\n // Creates the JSX for the option list to display when dropped down\r\n buildOptionList = () => {\r\n let optionListItems;\r\n\r\n optionListItems = this.state.allOptions\r\n .filter((option) => (!option.selected && option.text.toLowerCase().indexOf(this.state.inputValue.toLowerCase()) !== -1));\r\n\r\n if (!optionListItems.length) {\r\n optionListItems =
  • No results found.
  • ;\r\n }\r\n else {\r\n if (this.props.alphabetize) {\r\n optionListItems = optionListItems.sort(compareObjectKeys(\"text\", true));\r\n }\r\n\r\n optionListItems = optionListItems\r\n .map((option) =>\r\n this.selectOptions([option])}>\r\n {option.text}\r\n \r\n );\r\n }\r\n\r\n let optionListDisplayClass = classNames('option-list', this.props.className, {\r\n 'hide-options': !this.state.optionDisplay,\r\n 'show-options': this.state.optionDisplay\r\n });\r\n\r\n return (\r\n
      \r\n {optionListItems}\r\n
    \r\n );\r\n }\r\n\r\n // Creates list of closeable filters to display under the input\r\n buildSelectedResults = () => {\r\n return (this.state.selectedOptions.length !== 0) ?\r\n
      \r\n {\r\n this.state.selectedOptions.map((option, index) => {\r\n return
    • \r\n {option.text}\r\n this.unselectOptions([option])}>\r\n x\r\n \r\n
    • ;\r\n })\r\n }\r\n
    :\r\n null;\r\n }\r\n\r\n // Figures out what kind of input is needed based on window width and returns the JSX for it\r\n buildInput = () => {\r\n if (this.props.isEditable && (!this.props.selectLimit || this.state.selectedOptions.length < this.props.selectLimit)) {\r\n if (!this.state.isMobile) {\r\n return ( this.narrowFilters(event)}\r\n placeholderText={this.props.placeholderText}\r\n />);\r\n }\r\n else {\r\n let buttonClasses = classNames('filter-input__drop-button', {\r\n 'filter-input__drop-button--arrow-up': this.state.optionDisplay\r\n });\r\n\r\n return ( this.toggleOptionDisplay(\"click\")}\r\n />);\r\n }\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n\r\n // Updates filter option display based on text entered\r\n narrowFilters = (event) => {\r\n this.setState({ inputValue: event.target.value });\r\n }\r\n\r\n // Changes the boolean value of isMobile if the new state is different than the old one\r\n updateWidth = () => {\r\n let newIsMobile = (window.innerWidth >= bp.BREAKPOINT_MD) ? false : true;\r\n\r\n if (this.state.isMobile !== newIsMobile) {\r\n this.setState({ isMobile: newIsMobile });\r\n }\r\n }\r\n\r\n // Updates state to reflect newly chosen filters and calls function passed in for filterValueChange\r\n selectOptions = (selectedOptions) => {\r\n if (selectedOptions && selectedOptions.length) {\r\n this.setState((prevState) => {\r\n let noDupesSelectedOptions = selectedOptions\r\n .filter((option) => !prevState.selectedOptions\r\n .find((prevOption) => prevOption.id === option.id)\r\n );\r\n\r\n let newSelectedOptions = [...prevState.selectedOptions, ...noDupesSelectedOptions];\r\n\r\n let allOptions = prevState.allOptions;\r\n\r\n let optionObjects = newSelectedOptions.map((selectedOption) => allOptions.find((option) => option.id === selectedOption.id));\r\n\r\n optionObjects.forEach((optionObject) => {\r\n if (optionObject) {\r\n optionObject.selected = true;\r\n }\r\n });\r\n\r\n if (this.props.filterValueChange) {\r\n this.props.filterValueChange(newSelectedOptions.map((option) => this.formatOption(option)));\r\n }\r\n\r\n return { selectedOptions: newSelectedOptions, allOptions, optionDisplay: false };\r\n });\r\n }\r\n }\r\n\r\n // Updates state to reflect newly unchosen filters and calls function passed in for filterValueChange\r\n unselectOptions = (unselectedOptions) => {\r\n if (unselectedOptions && unselectedOptions.length) {\r\n this.setState((prevState) => {\r\n let allOptions = prevState.allOptions;\r\n let selectedOptions = prevState.selectedOptions;\r\n\r\n unselectedOptions.forEach((unselectedOption) => {\r\n selectedOptions = selectedOptions.filter((option) => option.id !== unselectedOption.id);\r\n\r\n let optionObject = allOptions.find((option) => option.id === unselectedOption.id);\r\n\r\n if (optionObject) {\r\n optionObject.selected = false;\r\n }\r\n });\r\n\r\n if (this.props.filterValueChange) {\r\n this.props.filterValueChange(selectedOptions.map((option) => this.formatOption(option)));\r\n }\r\n\r\n return { selectedOptions, allOptions };\r\n });\r\n }\r\n }\r\n\r\n // Gets the values of the filter input, and potentially returns an error if applicable\r\n getValue = () => {\r\n // if options were passed in as an array of strings, give an array of strings back - it's only polite.\r\n let selectedOptions = (this.props.options && typeof this.props.options[0] === \"string\") ?\r\n this.state.selectedOptions.map((option) => option.id) :\r\n this.state.selectedOptions;\r\n\r\n if (this.props.required && !selectedOptions.length) {\r\n throw new InputError(this.props.label + \" is Required\", selectedOptions);\r\n }\r\n\r\n return selectedOptions;\r\n }\r\n\r\n componentDidMount() {\r\n this.setOptions(this.props.options, \"allOptions\");\r\n this.setOptions(this.props.existingContentArray, \"selectedOptions\");\r\n window.addEventListener('resize', this.updateWidth);\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('resize', this.updateWidth);\r\n }\r\n\r\n componentWillReceiveProps(newProps) {\r\n if (newProps.options !== this.props.options) {\r\n let newAllOptions = this.setOptions(newProps.options, \"allOptions\");\r\n\r\n // Check if there are options that need to be unselected because they're no longer in the options list, and unselect them.\r\n if (this.state.selectedOptions) {\r\n let unselectedOptions = [];\r\n this.state.selectedOptions.forEach((selectedOption) => {\r\n let existsInArray = newAllOptions.find((option) => option.id === selectedOption.id);\r\n\r\n if (!existsInArray) {\r\n unselectedOptions.push(selectedOption);\r\n }\r\n })\r\n\r\n if (unselectedOptions.length) {\r\n this.unselectOptions(unselectedOptions);\r\n }\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n let verticalSpacingClass = this.props.verticalSpacing === \"compact\" ? \"field--compact\" : \"field\";\r\n let mobileClass = (this.state.isMobile) ? \"filter-input__mobile\" : \"\";\r\n\r\n const label = (this.props.label) ?\r\n :\r\n null;\r\n\r\n const requiredFieldIndicator = (this.props.required) ?\r\n :\r\n null;\r\n\r\n let errorMessage = (this.props.errorMessage) ?\r\n \r\n {this.props.errorMessage}\r\n :\r\n null;\r\n\r\n let input = this.buildInput();\r\n let optionList = this.buildOptionList();\r\n let selectedResults = (this.props.showPills) ? this.buildSelectedResults() : null;\r\n\r\n let inputDisplay = (this.props.isEditable) ?\r\n \r\n {label}\r\n {requiredFieldIndicator}\r\n this.toggleOptionDisplay(\"focus\")}\r\n onBlur={() => this.toggleOptionDisplay(\"blur\")}\r\n >\r\n {input}\r\n {optionList}\r\n {selectedResults}\r\n \r\n {errorMessage}\r\n :\r\n \r\n {label}\r\n \r\n {this.state.selectedOptions.map((option) => option.text).join(\", \")}\r\n \r\n ;\r\n\r\n return (\r\n
    \r\n {inputDisplay}\r\n
    \r\n );\r\n }\r\n}\r\n\r\nFilterInput.defaultProps = {\r\n alphabetize: false,\r\n existingContentArray: [],\r\n isEditable: true,\r\n showPills: true\r\n}\r\n\r\nFilterInput.propTypes = {\r\n alphabetize: PropTypes.bool,\r\n className: PropTypes.string,\r\n errorMessage: PropTypes.string,\r\n existingContentArray: PropTypes.oneOfType([\r\n PropTypes.arrayOf(PropTypes.string),\r\n PropTypes.arrayOf(PropTypes.object)\r\n ]),\r\n filterValueChange: PropTypes.func,\r\n id: PropTypes.string.isRequired,\r\n isEditable: PropTypes.bool,\r\n label: PropTypes.string,\r\n options: PropTypes.oneOfType([\r\n PropTypes.arrayOf(PropTypes.string),\r\n PropTypes.arrayOf(PropTypes.object)\r\n ]).isRequired,\r\n placeholderText: PropTypes.string,\r\n required: PropTypes.bool,\r\n selectLimit: PropTypes.number,\r\n showPills: PropTypes.bool,\r\n verticalSpacing: PropTypes.string\r\n}","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport ArrangeableListInput from '../arrangeable-list-input/ArrangeableListInput';\r\nimport FilterInput from '../filter-input/FilterInput';\r\nimport './ArrangeableFilterInput.css';\r\n\r\nexport default class ArrangeableFilterInput extends Component { \r\n // Grabs the values from the inputs and updates the state with the new values\r\n getValue = () => {\r\n let orderedList = this[`${this.props.id}__af-list`].getValue();\r\n \r\n if (Array.isArray(orderedList) && orderedList.length) {\r\n orderedList = orderedList.map((item) => {\r\n return { id: item.id, internalLink: item.internalLink, text: item.text }\r\n });\r\n }\r\n \r\n return orderedList; \r\n }\r\n \r\n addItem = (filterValues) => {\r\n let newItems = [];\r\n \r\n let listValues = (this[`${this.props.id}__af-list`]) ? this[`${this.props.id}__af-list`].getValue() : [];\r\n \r\n filterValues.forEach((value) => {\r\n if (!listValues.find((content) => content.id === value.id)) {\r\n newItems.push({ id: value.id, internalLink: value.internalLink, text: value.text, order: listValues.length + newItems.length + 1 });\r\n }\r\n });\r\n\r\n if (newItems.length && this[`${this.props.id}__af-list`]) {\r\n newItems.forEach((newItem) => {\r\n this[`${this.props.id}__af-list`].addItem(newItem);\r\n });\r\n }\r\n }\r\n \r\n removeItem = (removedItem) => {\r\n this[`${this.props.id}__af-filter`].unselectOptions([removedItem]);\r\n }\r\n\r\n render () { \r\n const label = (this.props.label) ?\r\n :\r\n null;\r\n \r\n let filterInput = (this.props.isEditable) ?\r\n { this[`${this.props.id}__af-filter`] = instance; }}\r\n showPills={false}\r\n /> :\r\n null;\r\n\r\n // Shows inputs when in edit mode\r\n let inputDisplay = \r\n \r\n {filterInput}\r\n { \r\n return { \r\n id: item.id, \r\n internalLink: item.internalLink, \r\n text: item.text, \r\n order: index + 1 \r\n } \r\n }) : \r\n []\r\n }\r\n ref={instance => { this[`${this.props.id}__af-list`] = instance; }}\r\n />\r\n ;\r\n\r\n return (\r\n \r\n {label}\r\n {inputDisplay}\r\n \r\n );\r\n }\r\n}\r\n \r\nArrangeableFilterInput.defaultProps = {\r\n isEditable: true\r\n};\r\n\r\nArrangeableFilterInput.propTypes = {\r\n existingContentArray: PropTypes.arrayOf(PropTypes.object),\r\n id: PropTypes.string.isRequired,\r\n isEditable: PropTypes.bool,\r\n label: PropTypes.string,\r\n options: PropTypes.oneOfType([\r\n PropTypes.arrayOf(PropTypes.string),\r\n PropTypes.arrayOf(PropTypes.object)\r\n ]).isRequired,\r\n placeholderText: PropTypes.string\r\n};","// These first few constants are the chart types for users, regardless of\r\n// what ZingCharts needs.\r\nexport const BULLET_CHART_TYPE = \"bullet\";\r\nexport const HORIZONTAL_BULLET_CHART_TYPE = \"horizontal-bullet\";\r\nexport const LINE_CHART_TYPE = \"line\";\r\nexport const KAPLAN_MEIER_CHART_TYPE = \"kaplan-meier\";\r\nexport const STACKED_BULLET_CHART_TYPE = \"stacked-bullet\";\r\nexport const HORIZONTAL_STACKED_BULLET_CHART_TYPE = \"horizontal-stacked-bullet\";\r\n\r\nexport const HORIZONTAL_CHART_TYPES = [ \r\n HORIZONTAL_BULLET_CHART_TYPE, \r\n HORIZONTAL_STACKED_BULLET_CHART_TYPE \r\n];\r\n\r\nexport const STACKED_CHART_TYPES = [ \r\n STACKED_BULLET_CHART_TYPE, \r\n HORIZONTAL_STACKED_BULLET_CHART_TYPE \r\n];\r\n\r\n// The next few constants are the types of charts ZingCharts knows about.\r\nexport const BAR_ZINGCHART_TYPE = \"bar\";\r\nexport const HORIZONTAL_BAR_ZINGCHART_TYPE = \"hbar\";\r\nexport const BULLET_ZINGCHART_TYPE = \"bullet\";\r\nexport const HORIZONTAL_BULLET_ZINGCHART_TYPE = \"hbullet\";\r\nexport const LINE_ZINGCHART_TYPE = \"line\";\r\nexport const VERTICAL_LINE_ZINGCHART_TYPE = \"vline\";\r\nexport const MIXED_ZINGCHART_TYPE = \"mixed\";\r\nexport const HORIZONTAL_MIXED_ZINGCHART_TYPE = \"hmixed\";\r\n\r\nexport function postRenderAdjustments(chart, props, zingChartExec) {\r\n // Get the info about the y-axis in the chart that has already been rendered.\r\n let scaleYInfo = zingChartExec(chart.id, 'getobjectinfo', {\r\n object: 'scale',\r\n name: 'scale-y'\r\n });\r\n\r\n\r\n if (scaleYInfo) {\r\n // Use the y-axis info to reposition the ends of the better arrow.\r\n let { from, to } = setYArrowDetails(props.type, scaleYInfo, props.betterArrowDirection);\r\n\r\n zingChartExec(chart.id, 'updateobject', {\r\n type: 'arrow',\r\n id: props.id + '-better-arrow',\r\n data: { from, to }\r\n });\r\n }\r\n \r\n // Start of x-axis label cut off adjustment\r\n let plotInfo = zingChartExec(chart.id, 'getobjectinfo', {\r\n object: 'graph'\r\n });\r\n \r\n // Get the info about the y-axis in the chart that has already been rendered.\r\n let scaleXInfo = zingChartExec(chart.id, 'getobjectinfo', {\r\n object: 'scale',\r\n name: 'scale-x'\r\n });\r\n \r\n if (scaleXInfo && scaleXInfo.label && plotInfo) {\r\n let breakText = \"

    \";\r\n \r\n let bottomOfLabel = scaleXInfo.label.height + scaleXInfo.label.y;\r\n\r\n if (scaleXInfo.text.indexOf(breakText) === -1 && bottomOfLabel > plotInfo.height) {\r\n let chartData = zingChartExec(chart.id, 'getdata');\r\n \r\n chartData['graphset'][0]['scale-x']['label']['text'] = scaleXInfo.text + breakText;\r\n \r\n zingChartExec(chart.id, 'setdata', { data: chartData });\r\n }\r\n }\r\n // End of x-axis label cut off adjustment\r\n}\r\n\r\n\r\n// inserts breaks before cohort values in x axis labels\r\nexport function insertBreaks(labels) {\r\n let xBreakHappens = false;\r\n\r\n let xAxisLabels = labels.map((label) => {\r\n if (label.indexOf(\"N = \") >= 0) {\r\n xBreakHappens = true;\r\n }\r\n return label.replace(/(N = )/, '
    $1').trim();\r\n });\r\n\r\n return { xAxisLabels, xBreakHappens };\r\n}\r\n\r\n// figures out which x axis label provided is the longest and returns it\r\nexport function determineXAxisLongestLength(labels) {\r\n return labels.reduce((highestLen, currentString) => {\r\n let currentStringLength = currentString.split(/(N = )/)[0].length;\r\n\r\n return (highestLen > currentStringLength) ?\r\n highestLen :\r\n currentStringLength;\r\n }, 0);\r\n}\r\n\r\n// determines how much width to give the x axis labels in mobile view\r\nexport function setXAxisMobileWidth(xAxisLongestLength) {\r\n return (xAxisLongestLength < 6) ?\r\n 40 :\r\n 20 * (Math.floor((xAxisLongestLength - 2) / 4) + 2);\r\n}\r\n\r\n// adds the object needed for the better arrow to the chart data\r\nexport function addBetterArrow(id, chartType, chartData, mobileBP, yAxisLabel, betterArrowDirection, arrowColor, fontColor) {\r\n let top, bottom;\r\n \r\n if (!HORIZONTAL_CHART_TYPES.includes(chartType)) {\r\n chartData[\"scale-y\"][\"label\"][\"padding-right\"] = 20;\r\n chartData[\"scale-y\"][\"label\"][\"padding-left\"] = 20;\r\n chartData[\"scale-y\"][\"label\"][\"padding-top\"] = undefined;\r\n\r\n top = {\r\n x: 8,\r\n y: \"27%\"\r\n };\r\n\r\n bottom = {\r\n x: 8,\r\n y: \"70%\"\r\n };\r\n }\r\n else {\r\n top = {\r\n x: \"70%\",\r\n y: 40\r\n };\r\n\r\n bottom = {\r\n x: \"27%\",\r\n y: 40\r\n };\r\n }\r\n\r\n chartData[\"arrows\"] = [{\r\n id: id + \"-better-arrow\",\r\n text: \"Better\",\r\n backgroundColor: arrowColor,\r\n borderColor: arrowColor,\r\n fontColor: fontColor,\r\n fontAngle: (!HORIZONTAL_CHART_TYPES.includes(chartType)) ? 270 : 0,\r\n fontSize: 10,\r\n mediaRules: [\r\n {\r\n maxWidth: mobileBP,\r\n fontSize: 8\r\n }\r\n ],\r\n from: (betterArrowDirection === \"down\") ? top : bottom,\r\n to: (betterArrowDirection === \"down\") ? bottom : top\r\n }];\r\n\r\n // Adds margin to the left if the yAxisLabel is missing\r\n if (!yAxisLabel) {\r\n chartData[\"scale-y\"][\"label\"][\"text\"] = \".\";\r\n chartData[\"scale-y\"][\"label\"][\"fontColor\"] = \"#fff\";\r\n chartData[\"scale-y\"][\"label\"][\"padding-top\"] = 0;\r\n chartData[\"scale-y\"][\"label\"][\"padding-bottom\"] = 0;\r\n }\r\n\r\n return chartData;\r\n}\r\n\r\n// adds an overall benchmark for charts using one\r\nexport function addOverallBenchmark(chartType, mappedChartType, chartData, showLegend, benchmarkName, benchmarkValue, benchmarkColor) {\r\n let benchmarkTooltipText = benchmarkName ?\r\n benchmarkName + \"
    \" :\r\n \"\";\r\n\r\n chartData.plot = Object.assign(\r\n chartData.plot,\r\n {\r\n \"bar-width\": \"100%\",\r\n barsSpaceLeft: \"25%\",\r\n barsSpaceRight: \"25%\",\r\n \"bar-space\": 3\r\n }\r\n );\r\n\r\n let benchmarkObject = {\r\n \"type\": (HORIZONTAL_CHART_TYPES.includes(chartType)) ? VERTICAL_LINE_ZINGCHART_TYPE : LINE_ZINGCHART_TYPE,\r\n values: [benchmarkValue, benchmarkValue],\r\n text: benchmarkTooltipText,\r\n marker: {\r\n visible: false\r\n },\r\n \"scales\": (!STACKED_CHART_TYPES.includes(chartType)) ? \"scale-x-2,scale-y\" : \"scale-x-2,scale-y-2\",\r\n \"zIndex\": 5,\r\n \"line-color\": benchmarkColor,\r\n \"line-width\": 3,\r\n \"legend-item\": {\r\n flat: true,\r\n visible: benchmarkTooltipText\r\n },\r\n \"legend-marker\": {\r\n \"line-color\": benchmarkColor,\r\n \"line-width\": 2,\r\n \"type\": \"none\",\r\n \"show-line\":true\r\n }\r\n };\r\n\r\n chartData[\"series\"].push(benchmarkObject);\r\n\r\n return chartData;\r\n}\r\n\r\n// adds 0s onto the chart in cases where the value is 0 instead of not being provided\r\nexport function showZeroes(chartData, isStacked, mobileFontSize) {\r\n let value = (isStacked) ? \"%total\" : \"%v\";\r\n\r\n chartData[\"plot\"][\"value-box\"] = {\r\n \"text\": value,\r\n \"rules\": [\r\n {\r\n \"rule\": value + \" == 0\",\r\n \"placement\": \"top\",\r\n mediaRules: [\r\n {\r\n maxWidth: 450,\r\n \"font-size\": mobileFontSize\r\n }\r\n ]\r\n },\r\n {\r\n \"rule\": value + \" != 0\",\r\n \"visible\": \"false\"\r\n }\r\n ]\r\n };\r\n}\r\n\r\n// creates an object to be added to the series part of the chart json\r\nexport function buildSeriesObject(chartType, mappedChartType,\r\n seriesName, seriesValues, benchmarkName, benchmarkValues,\r\n color, benchmarkColor, fontFamily, hasOverallBenchmark) {\r\n // Initial series object\r\n let seriesObject = {\r\n type: mappedChartType,\r\n text: seriesName,\r\n values: seriesValues,\r\n \"legend-item\": {\r\n visible: seriesName\r\n }\r\n };\r\n\r\n if (mappedChartType === BULLET_ZINGCHART_TYPE || mappedChartType === HORIZONTAL_BULLET_ZINGCHART_TYPE) {\r\n let benchmarkTooltipText = benchmarkName ?\r\n benchmarkName + \"
    \" :\r\n \"\";\r\n\r\n seriesObject = Object.assign(\r\n seriesObject,\r\n {\r\n \"background-color\": color,\r\n goal: (benchmarkValues && benchmarkValues.length && benchmarkValues.filter(value => value !== null).length) ? {\r\n height: 6,\r\n \"background-color\": benchmarkColor,\r\n \"tooltip\":{\r\n \"text\": benchmarkTooltipText + \"%g\",\r\n \"font-family\": fontFamily,\r\n \"background-color\": benchmarkColor\r\n }\r\n } : null,\r\n goals: (benchmarkValues && benchmarkValues.length && benchmarkValues.filter(value => value !== null).length) ? benchmarkValues : null\r\n }\r\n );\r\n\r\n if (hasOverallBenchmark) {\r\n seriesObject.type = (mappedChartType === HORIZONTAL_BULLET_ZINGCHART_TYPE) ? HORIZONTAL_BAR_ZINGCHART_TYPE : BAR_ZINGCHART_TYPE;\r\n }\r\n }\r\n // Adds series styles for line charts.\r\n else {\r\n seriesObject = Object.assign(\r\n seriesObject,\r\n {\r\n \"line-color\": color,\r\n \"line-width\": 2,\r\n marker: {\r\n \"background-color\": color\r\n }\r\n }\r\n );\r\n }\r\n return seriesObject;\r\n}\r\n\r\n// creates a series object for individual benchmarks in bullet charts that need legend items\r\nexport function buildBenchmarkLegendObject(chartType, mappedChartType, benchmarkName, benchmarkColor) {\r\n let benchmarkObject = null;\r\n\r\n // Adds benchmarks to legend for bullet charts\r\n if (mappedChartType === BULLET_ZINGCHART_TYPE || mappedChartType === HORIZONTAL_BULLET_ZINGCHART_TYPE) {\r\n // If there are benchmark titles on a bullet chart, they are added to the legend through series elements\r\n if (benchmarkName && benchmarkName.length) {\r\n benchmarkObject = {\r\n values: [],\r\n text: benchmarkName,\r\n \"legend-item\": {\r\n flat: true\r\n },\r\n \"legend-marker\": {\r\n \"line-color\": benchmarkColor,\r\n \"line-width\": 2,\r\n \"type\": \"none\",\r\n \"show-line\":true\r\n }\r\n };\r\n\r\n if (\r\n chartType === BULLET_CHART_TYPE || \r\n chartType === HORIZONTAL_BULLET_CHART_TYPE || \r\n chartType === HORIZONTAL_STACKED_BULLET_CHART_TYPE\r\n ) {\r\n benchmarkObject.scales = \"scale-x-2,scale-y\";\r\n }\r\n }\r\n }\r\n\r\n return benchmarkObject;\r\n}\r\n\r\n\r\nexport function setYArrowDetails(chartType, scaleYInfo, betterArrowDirection) {\r\n const arrowSpace = (!HORIZONTAL_CHART_TYPES.includes(chartType)) ? scaleYInfo.height * .15 : scaleYInfo.width * .15;\r\n let top, bottom;\r\n\r\n if (!HORIZONTAL_CHART_TYPES.includes(chartType)) {\r\n top = {\r\n x: 8,\r\n y: scaleYInfo.y + arrowSpace\r\n };\r\n bottom = {\r\n x: 8,\r\n y: scaleYInfo.y + scaleYInfo.height - arrowSpace\r\n };\r\n }\r\n else {\r\n top = {\r\n x: scaleYInfo.x + scaleYInfo.width - arrowSpace,\r\n y: scaleYInfo.y - 15\r\n };\r\n bottom = {\r\n x: scaleYInfo.x + arrowSpace,\r\n y: scaleYInfo.y - 15\r\n };\r\n }\r\n\r\n let from = (betterArrowDirection === \"down\") ? top : bottom;\r\n let to = (betterArrowDirection === \"down\") ? bottom : top;\r\n\r\n return { from, to };\r\n}\r\n\r\nexport function yMinMaxBuilder(props, seriesValues) {\r\n let yMax = props.yMax;\r\n\r\n // if chart is a stacked bullet chart without a set yMax value already\r\n if (STACKED_CHART_TYPES.includes(props.type) && (!yMax && yMax !== 0)) {\r\n // get the sum for each stack, or default to 1 if there's no series values\r\n let xAxisSums = (seriesValues.length) ?\r\n seriesValues[0].map((value, index) => {\r\n return seriesValues.reduce((sum, series) => sum + (series[index] ? parseFloat(series[index]) : 0), 0);\r\n }) :\r\n [1];\r\n\r\n // figure out which stack is the tallest and set that value as the yMax for the chart\r\n yMax = xAxisSums.reduce((largest, xAxisSum) => {\r\n return (xAxisSum > largest) ? xAxisSum : largest;\r\n }, 0);\r\n }\r\n\r\n let ySteps = \"\";\r\n\r\n const yDiff = (props.yMin && yMax) ?\r\n yMax - props.yMin :\r\n null;\r\n\r\n // Fix for the fact that having a difference less than 1 without steps breaks the chart\r\n if (yDiff && yDiff > 0 && yDiff < 1) {\r\n // Figures out how many digits after the decimal\r\n const yStepValue = (props.yMin.toString().length >= yMax.toString().length) ?\r\n props.yMin.toString().split('.')[1].length :\r\n yMax.toString().split('.')[1].length;\r\n\r\n ySteps = \":0.\" + \"0\".repeat(yStepValue - 1) + \"1\";\r\n }\r\n else {\r\n ySteps = (props.ySteps) ? \":\" + props.ySteps : \"\";\r\n }\r\n\r\n let yMinMax = ((props.yMin || typeof props.yMin === \"number\") && (props.yMax || typeof props.yMax === \"number\")) ?\r\n {\r\n \"values\": props.yMin + \":\" + yMax + ySteps\r\n } :\r\n {\r\n \"min-value\": ((props.yMin !== \"\") && (props.yMin !== yMax)) ? props.yMin : undefined,\r\n \"max-value\": ((props.yMax !== \"\") && (props.yMin !== yMax)) ? yMax : undefined,\r\n \"step\": (props.ySteps !== \"\") ? props.ySteps : undefined\r\n };\r\n\r\n return yMinMax;\r\n}\r\n\r\nexport function dataOrganizer(data) {\r\n let seriesNames = [],\r\n seriesBenchmarkNames = [],\r\n xAxisLabels = [],\r\n seriesValues = [],\r\n seriesBenchmarks = [];\r\n\r\n // Figures out how many series have to be created\r\n let numberOfSeries = data.reduce((maxLength, dataRow) => {\r\n // - 1 to remove x axis title, / 2 to remove benchmarks\r\n return (Math.ceil((dataRow.length - 1) / 2) > maxLength) ?\r\n Math.ceil((dataRow.length - 1) / 2):\r\n maxLength;\r\n }, 0);\r\n\r\n // Creates array of blank arrays\r\n seriesValues = new Array(numberOfSeries).fill(null).map(() => { return []; });\r\n seriesBenchmarks = new Array(numberOfSeries).fill(null).map(() => { return []; });\r\n\r\n data.forEach((dataRow, rowIndex) => {\r\n // First row, series + bookmark titles\r\n if (rowIndex === 0) {\r\n dataRow.forEach((dataCell, cellIndex) => {\r\n // First cell is ignored\r\n if (cellIndex !== 0) {\r\n // Even indexes are benchmark titles\r\n if (cellIndex % 2 === 0) {\r\n seriesBenchmarkNames.push(dataCell);\r\n }\r\n // Odd indexes are series titles\r\n else {\r\n let formattedDataCell = (dataCell !== \"\") ?\r\n dataCell + \"
    \" :\r\n dataCell;\r\n\r\n seriesNames.push(formattedDataCell);\r\n }\r\n }\r\n });\r\n }\r\n // Second row onwards\r\n else {\r\n dataRow.forEach((dataCell, cellIndex) => {\r\n // First column goes into xAxisLabels\r\n if (cellIndex === 0) {\r\n xAxisLabels.push(dataCell);\r\n }\r\n // Odd columns are series values\r\n else if (cellIndex % 2 !== 0) {\r\n seriesValues[(cellIndex - 1) / 2].push((!isNaN(parseFloat(dataCell))) ? parseFloat(dataCell) : null);\r\n }\r\n // Even columns are benchmark values\r\n else {\r\n seriesBenchmarks[(cellIndex / 2) - 1].push((!isNaN(parseFloat(dataCell))) ? parseFloat(dataCell) : null);\r\n }\r\n });\r\n }\r\n });\r\n\r\n return {\r\n seriesNames: seriesNames,\r\n seriesBenchmarkNames: seriesBenchmarkNames,\r\n xAxisLabels: xAxisLabels,\r\n seriesValues: seriesValues,\r\n seriesBenchmarks: seriesBenchmarks\r\n };\r\n}\r\n\r\n// Takes the props passed in and makes a data object for zingcharts to store in state\r\nexport function dataBuilder (props) {\r\n let newChartData = {};\r\n\r\n // chartTypeMap maps from the way Cleveland Clinic people name charts to\r\n // the way ZingCharts names them.\r\n let chartTypeMap = {};\r\n chartTypeMap[BULLET_CHART_TYPE] = BULLET_ZINGCHART_TYPE;\r\n chartTypeMap[LINE_CHART_TYPE] = LINE_ZINGCHART_TYPE;\r\n chartTypeMap[KAPLAN_MEIER_CHART_TYPE] = LINE_ZINGCHART_TYPE;\r\n chartTypeMap[HORIZONTAL_BULLET_CHART_TYPE] = HORIZONTAL_BULLET_ZINGCHART_TYPE;\r\n chartTypeMap[HORIZONTAL_STACKED_BULLET_CHART_TYPE] = HORIZONTAL_BULLET_ZINGCHART_TYPE;\r\n chartTypeMap[STACKED_BULLET_CHART_TYPE] = BULLET_ZINGCHART_TYPE;\r\n\r\n // Data will stay blank if no type is provided\r\n if (props.type) {\r\n // Reused colors\r\n const black = \"#4b4b45\";\r\n const grey = \"#7b7d83\";\r\n const white = \"#fff\";\r\n const colorScheme = [ \"#0078bf\", \"#384d5f\", \"#00843d\", \"#8f4393\", \"#ffb400\", \"#ca3370\", \"#2dafe2\", \"#5a859e\", \"#15af57\", \"#c35acc\", \"#ad7110\", \"#a00e5e\" ];\r\n const benchmarkColorScheme = [ \"#006099\", \"#2d3e4c\", \"#006a31\", \"#723676\", \"#cc9000\", \"#a2295a\", \"#5ea2bd\", \"#486a7e\", \"#118c46\", \"#9c48a3\", \"#8a5a0d\", \"#800b4b\" ];\r\n const overallBenchmarkColor = \"#f08122\";\r\n\r\n // Reused values\r\n const fontFamily = \"Source Sans Pro, Lato, Helvetica, Arial\";\r\n const mobileBP = 350;\r\n const mobileFontSize = 8;\r\n const mobileLabelSize = 9;\r\n\r\n let seriesNames = [],\r\n seriesBenchmarkNames = [],\r\n xAxisLabels = [],\r\n seriesValues = [],\r\n seriesBenchmarks = [],\r\n xAxisLongestLength = 0;\r\n\r\n // Populates base data based on type provided\r\n newChartData = {\r\n gui: {\r\n behaviors: [\r\n {\r\n id: 'DownloadPDF',\r\n enabled: 'none'\r\n },\r\n {\r\n id: 'DownloadSVG',\r\n enabled: 'none'\r\n },\r\n {\r\n id: 'DownloadCSV',\r\n enabled: 'none'\r\n },\r\n {\r\n id: 'DownloadXLS',\r\n enabled: 'none'\r\n },\r\n {\r\n id: 'Print',\r\n enabled: 'none'\r\n },\r\n {\r\n id: 'ViewDataTable',\r\n enabled: 'none'\r\n },\r\n {\r\n id: 'ViewSource',\r\n enabled: 'none' // Don't enable outside of dev\r\n }\r\n ],\r\n \"context-menu\": {\r\n button: {\r\n visible: false\r\n }\r\n }\r\n },\r\n type: (HORIZONTAL_CHART_TYPES.includes(props.type)) ? HORIZONTAL_MIXED_ZINGCHART_TYPE : MIXED_ZINGCHART_TYPE,\r\n \"plotarea\": {\r\n \"margin-top\": \"10%\",\r\n \"margin-left\": \"dynamic\",\r\n \"margin-right\": \"dynamic\",\r\n \"margin-bottom\": \"dynamic\"\r\n },\r\n plot: {\r\n tooltip: {\r\n text: \"%t%v\",\r\n \"font-family\": fontFamily\r\n }\r\n },\r\n };\r\n\r\n if (props.data && props.data.length) {\r\n const organizedData = dataOrganizer(props.data);\r\n\r\n seriesNames = organizedData.seriesNames;\r\n seriesBenchmarkNames = organizedData.seriesBenchmarkNames;\r\n xAxisLabels = organizedData.xAxisLabels;\r\n xAxisLongestLength = determineXAxisLongestLength(xAxisLabels);\r\n seriesValues = organizedData.seriesValues;\r\n seriesBenchmarks = organizedData.seriesBenchmarks;\r\n }\r\n\r\n // Better arrow height and x axis mobile width adjustments based on presence of legend and width of x axis labels\r\n let xAxisMobileWidth = setXAxisMobileWidth(xAxisLongestLength);\r\n\r\n // X Axis Labels break insertion for cohorts\r\n let insertedBreaksObject = insertBreaks(xAxisLabels);\r\n xAxisLabels = insertedBreaksObject.xAxisLabels;\r\n let { xBreakHappens } = insertedBreaksObject;\r\n\r\n // Populates base data based on type provided\r\n newChartData = Object.assign({\r\n legend: {\r\n visible: (props.showLegend && (seriesNames.filter(value => value).length || seriesBenchmarkNames.filter(value => value).length)),\r\n \"toggle-action\": \"disabled\",\r\n \"adjust-layout\": true,\r\n \"border-color\": grey,\r\n \"border-width\": 1,\r\n \"padding-top\": 10,\r\n \"padding-left\": 3,\r\n \"padding-bottom\": 13,\r\n \"padding-right\": 3,\r\n mediaRules: [\r\n {\r\n maxWidth: mobileBP,\r\n width: \"99.5%\", //setting this to 100% breaks the chart\r\n layout: \"2x2\",\r\n \"max-items\": 4,\r\n overflow: \"page\",\r\n \"page-status\": {\r\n \"font-size\": 8,\r\n \"offset-y\": -5,\r\n height: 20\r\n },\r\n \"page-on\": {\r\n size: 13,\r\n \"offset-y\": -5\r\n },\r\n \"page-off\": {\r\n size: 13,\r\n \"offset-y\": -5\r\n }\r\n },\r\n {\r\n maxWidth: 450,\r\n \"border-color\": black\r\n }\r\n ],\r\n item: {\r\n \"font-family\": fontFamily,\r\n \"font-size\": 10,\r\n mediaRules: [\r\n {\r\n maxWidth: mobileBP,\r\n \"font-size\": mobileLabelSize\r\n }\r\n ]\r\n }\r\n },\r\n \"scale-x\": {\r\n itemsOverlap: true,\r\n maxItems: 9999,\r\n label: {\r\n text: props.xAxisLabel,\r\n color: black,\r\n \"wrap-text\": true,\r\n width: \"100%\",\r\n \"font-family\": fontFamily,\r\n mediaRules: [\r\n {\r\n maxWidth: mobileBP,\r\n \"font-size\": mobileLabelSize\r\n }\r\n ]\r\n },\r\n labels: xAxisLabels,\r\n \"line-color\": grey,\r\n mediaRules: [\r\n {\r\n maxWidth: 450,\r\n \"line-color\": black\r\n }\r\n ],\r\n item: {\r\n wrapText: true,\r\n width: (HORIZONTAL_CHART_TYPES.includes(props.type)) ? \"75px\" : '100%',\r\n \"font-family\": fontFamily,\r\n mediaRules: [\r\n {\r\n maxWidth: 450,\r\n \"font-size\": mobileFontSize,\r\n fontAngle: (HORIZONTAL_CHART_TYPES.includes(props.type)) ? 0 : 270,\r\n \"text-align\": \"right\",\r\n \"width\": (HORIZONTAL_CHART_TYPES.includes(props.type)) ? \"55px\" : xAxisMobileWidth,\r\n color: black\r\n }\r\n ]\r\n },\r\n tick: {\r\n mediaRules: [\r\n {\r\n maxWidth: 450,\r\n \"line-color\": black\r\n }\r\n ]\r\n }\r\n },\r\n \"scale-y\": {\r\n \"label\": {\r\n \"text\": props.yAxisLabel,\r\n color: black,\r\n \"wrap-text\": true,\r\n \"padding-left\": -12,\r\n \"padding-top\": (HORIZONTAL_CHART_TYPES.includes(props.type)) ? 0 : -5,\r\n width: \"100%\",\r\n \"font-family\": fontFamily,\r\n mediaRules: [\r\n {\r\n maxWidth: mobileBP,\r\n \"font-size\": mobileLabelSize\r\n }\r\n ]\r\n },\r\n \"line-color\": grey,\r\n mediaRules: [\r\n {\r\n maxWidth: 450,\r\n \"line-color\": black\r\n }\r\n ],\r\n item: {\r\n \"font-family\": fontFamily,\r\n mediaRules: [\r\n {\r\n maxWidth: 450,\r\n \"font-size\": mobileFontSize,\r\n color: black\r\n }\r\n ]\r\n },\r\n tick: {\r\n mediaRules: [\r\n {\r\n maxWidth: 450,\r\n \"line-color\": black\r\n }\r\n ]\r\n }\r\n },\r\n \"scaleX2\": { // Second scale for the benchmark legend elements to exist on\r\n visible: false\r\n },\r\n \"scaleY2\": { // Second scale for the benchmark legend elements to exist on\r\n visible: false\r\n },\r\n series: []\r\n },\r\n newChartData);\r\n\r\n // Shows legend across top of chart instead of on the side\r\n if(props.legendOnTop) {\r\n const legendOnTop = {\r\n width: \"94%\",\r\n layout: \"2x2\",\r\n \"max-items\": 4,\r\n overflow: \"page\",\r\n \"page-status\": {\r\n \"font-size\": 8\r\n }\r\n };\r\n\r\n newChartData[\"legend\"] = Object.assign(legendOnTop, newChartData[\"legend\"]);\r\n }\r\n\r\n if (xBreakHappens) {\r\n newChartData[\"scale-x\"][\"label\"][\"padding-top\"] = 20;\r\n newChartData[\"scale-x\"][\"label\"][\"mediaRules\"][0][\"padding-top\"] = 0;\r\n }\r\n\r\n newChartData[\"scale-y\"] = Object.assign(newChartData[\"scale-y\"], yMinMaxBuilder(props, seriesValues));\r\n newChartData[\"scaleY2\"] = Object.assign(newChartData[\"scaleY2\"], yMinMaxBuilder(props, seriesValues));\r\n\r\n // Better Arrow logic\r\n if (props.betterArrowDirection) {\r\n newChartData = addBetterArrow(\r\n props.id,\r\n props.type,\r\n newChartData,\r\n mobileBP,\r\n props.yAxisLabel,\r\n props.betterArrowDirection,\r\n grey,\r\n white\r\n );\r\n }\r\n\r\n // Make a Kaplan-Meier chart different from a line chart.\r\n if (props.type === KAPLAN_MEIER_CHART_TYPE) {\r\n newChartData.plot = Object.assign(newChartData.plot,\r\n {\r\n aspect: \"stepped\",\r\n marker: {\r\n visible: false\r\n }\r\n });\r\n\r\n // Logic for removing ticks and making legend labels show\r\n newChartData[\"scale-x\"][\"tick\"] = { visible: false };\r\n newChartData[\"scale-x\"][\"items-overlap\"] = true;\r\n newChartData[\"scale-x\"][\"item\"][\"width\"] = null;\r\n newChartData[\"scale-x\"][\"item\"][\"wrapText\"] = false;\r\n }\r\n\r\n // Make a stacked bullet chart different from a plain bullet chart and reverse legend.\r\n if (STACKED_CHART_TYPES.includes(props.type)) {\r\n newChartData.plot = Object.assign(newChartData.plot,\r\n {\r\n stacked: true\r\n });\r\n\r\n newChartData[\"legend\"][\"reverseSeries\"] = true;\r\n }\r\n\r\n // Adds logic for showing 0s to bullet charts\r\n if (\r\n props.type === STACKED_BULLET_CHART_TYPE ||\r\n props.type === BULLET_CHART_TYPE ||\r\n props.type === HORIZONTAL_BULLET_CHART_TYPE ||\r\n props.type === HORIZONTAL_STACKED_BULLET_CHART_TYPE\r\n ) {\r\n showZeroes(newChartData,\r\n STACKED_CHART_TYPES.includes(props.type),\r\n mobileFontSize\r\n );\r\n }\r\n\r\n // Adds new series for each series name\r\n if (seriesNames.length) {\r\n if (STACKED_CHART_TYPES.includes(props.type) &&\r\n props.overallBenchmark) {\r\n // Overall benchmark logic for stacked bar charts\r\n newChartData = addOverallBenchmark(props.type,\r\n chartTypeMap[props.type],\r\n newChartData,\r\n props.showLegend,\r\n seriesBenchmarkNames[0],\r\n seriesBenchmarks[0][0],\r\n overallBenchmarkColor\r\n );\r\n }\r\n\r\n seriesNames.forEach((seriesName, index) => {\r\n let seriesObject = buildSeriesObject(\r\n props.type,\r\n chartTypeMap[props.type],\r\n seriesName,\r\n seriesValues[index],\r\n seriesBenchmarkNames[index],\r\n seriesBenchmarks[index],\r\n colorScheme[index % colorScheme.length],\r\n benchmarkColorScheme[index % benchmarkColorScheme.length],\r\n fontFamily,\r\n props.overallBenchmark\r\n );\r\n\r\n let benchmarkObject = (!props.overallBenchmark) ? buildBenchmarkLegendObject(\r\n props.type,\r\n chartTypeMap[props.type],\r\n seriesBenchmarkNames[index],\r\n benchmarkColorScheme[index % benchmarkColorScheme.length]\r\n ) : null;\r\n\r\n if (STACKED_CHART_TYPES.includes(props.type) && benchmarkObject) {\r\n newChartData[\"series\"].push(benchmarkObject);\r\n }\r\n newChartData[\"series\"].push(seriesObject);\r\n if (!STACKED_CHART_TYPES.includes(props.type) && benchmarkObject) {\r\n newChartData[\"series\"].push(benchmarkObject);\r\n }\r\n });\r\n }\r\n // Needs a series object to populate the chart at all\r\n else {\r\n newChartData[\"series\"].push({});\r\n }\r\n\r\n // Overall benchmark logic for non-stacked bullet charts\r\n if ((chartTypeMap[props.type] === LINE_ZINGCHART_TYPE ||\r\n (props.overallBenchmark &&\r\n (\r\n props.type === BULLET_CHART_TYPE ||\r\n props.type === HORIZONTAL_BULLET_CHART_TYPE\r\n )\r\n )) &&\r\n seriesBenchmarks.length &&\r\n seriesBenchmarks[0][0] !== null\r\n ) {\r\n newChartData = addOverallBenchmark(props.type,\r\n chartTypeMap[props.type],\r\n newChartData,\r\n props.showLegend,\r\n seriesBenchmarkNames[0],\r\n seriesBenchmarks[0][0],\r\n overallBenchmarkColor\r\n );\r\n }\r\n }\r\n\r\n return newChartData;\r\n}\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport ZingChart from 'zingchart-react';\r\nimport zingchart from 'zingchart';\r\nimport * as chartFunctions from './chartFunctions';\r\n\r\nexport default class Chart extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n chartData: {},\r\n chartInputValues: {},\r\n height: this.props.height\r\n };\r\n\r\n }\r\n\r\n componentDidMount() {\r\n this.setChartData();\r\n zingchart.bind(this.props.id, 'complete', (chart) => {\r\n chartFunctions.postRenderAdjustments(chart, this.props, zingchart.exec);\r\n });\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(newProps) {\r\n let setStateObject = { type: newProps.type };\r\n \r\n if (newProps.height !== this.props.height) {\r\n setStateObject.height = newProps.height;\r\n }\r\n \r\n this.setState(setStateObject, this.setChartData);\r\n }\r\n\r\n setChartData = () => {\r\n this.setState({ chartData: chartFunctions.dataBuilder(this.props) });\r\n }\r\n\r\n render() {\r\n // Makes sure id and type are provided and that the type is not an image\r\n if (this.props.id && this.props.type && this.props.type !== \"image\") {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n // Needed in order for tests to not break\r\n else {\r\n return ;\r\n }\r\n }\r\n}\r\n\r\nChart.defaultProps = {\r\n overallBenchmark: false,\r\n showLegend: false\r\n};\r\n\r\nChart.propTypes = {\r\n betterArrowDirection: PropTypes.oneOf([\"up\", \"down\", null]),\r\n data: PropTypes.arrayOf(\r\n PropTypes.arrayOf(\r\n PropTypes.oneOfType([PropTypes.number, PropTypes.string])\r\n )\r\n ),\r\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n id: PropTypes.string, // is actually required, but can't be set as isRequired because of tests\r\n legendOnTop: PropTypes.bool,\r\n overallBenchmark: PropTypes.bool,\r\n showLegend: PropTypes.bool,\r\n type: PropTypes.string,\r\n width: PropTypes.string,\r\n xAxisLabel: PropTypes.string,\r\n yAxisLabel: PropTypes.string,\r\n yMin: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n yMax: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n ySteps: PropTypes.oneOfType([PropTypes.number, PropTypes.string])\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst InputLabel = (props) => {\r\n const requiredFieldChar =\r\n (props.requiredFieldIndicatorStyle.style === \"star\") ?\r\n \"*\" :\r\n (props.requiredFieldIndicatorStyle.style === \"dot\") ?\r\n \"•\" :\r\n \"\";\r\n\r\n const potentialRequiredFieldIndicator = {requiredFieldChar};\r\n\r\n const requiredFieldIndicator = (props.required && props.isEditable) ?\r\n potentialRequiredFieldIndicator :\r\n null;\r\n\r\n let label = null;\r\n if (props.label) {\r\n label = (props.requiredFieldIndicatorStyle.position === \"before\") ?\r\n {requiredFieldIndicator} :\r\n {requiredFieldIndicator};\r\n }\r\n\r\n let legend = null;\r\n if ((props.legend || props.required) && label == null) {\r\n legend = (props.requiredFieldIndicatorStyle.position === \"before\") ?\r\n {requiredFieldIndicator}{props.legend} :\r\n {props.legend}{requiredFieldIndicator};\r\n }\r\n\r\n return {legend}{label};\r\n}\r\n\r\nInputLabel.defaultProps = {\r\n isEditable: true,\r\n required: false, // is this a required field?\r\n requiredFieldIndicatorStyle: {style: \"star\", position: \"before\"}\r\n};\r\n\r\nInputLabel.propTypes = {\r\n label: PropTypes.string,\r\n legend: PropTypes.string,\r\n htmlFor: PropTypes.string,\r\n isEditable: PropTypes.bool,\r\n required: PropTypes.bool,\r\n requiredFieldIndicatorStyle: PropTypes.shape({\r\n style: PropTypes.string, // either \"star\", \"dot\" or \"none\"\r\n position: PropTypes.string // either \"before\" or \"after\"\r\n })\r\n}\r\n\r\nexport default InputLabel;\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport InputError from '../../../errors/InputError';\r\nimport InputLabel from '../input-label/InputLabel';\r\nimport './CheckboxInput.css';\r\n\r\nexport default class CheckboxInput extends Component {\r\n // Create new prop for old and new checkbox. Prop would take a string, and then component would check the value of the sting and use the right version\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n isChecked: this.props.checked\r\n };\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(newProps) {\r\n if ('checked' in newProps && newProps.checked !== this.state.isChecked) {\r\n this.setState({ isChecked: newProps.checked });\r\n }\r\n }\r\n\r\n onChange = (e) => {\r\n this.setState((prevState) => {\r\n return { isChecked: !prevState.isChecked }\r\n }, () => {\r\n if (this.props.onChange) {\r\n this.props.onChange(e);\r\n }\r\n });\r\n }\r\n\r\n getValue = () => {\r\n if (this.props.required && !this.state.isChecked) {\r\n throw new InputError(this.props.label + \" is Required\", this.state.isChecked);\r\n }\r\n\r\n return this.state.isChecked;\r\n }\r\n\r\n render() {\r\n let checkbox = (\r\n {\r\n e.persist();\r\n this.onChange(e);\r\n }}\r\n required={this.props.required}\r\n disabled={this.props.disabled}\r\n checked={this.state.isChecked}\r\n />\r\n );\r\n\r\n let legend = (this.props.legend) ?\r\n :\r\n null;\r\n\r\n let verticalSpacingClass = this.props.verticalSpacing === \"compact\" ? \"field--compact\" : \"field\";\r\n\r\n let errorMessage = (this.props.errorMessage) ?\r\n \r\n {this.props.errorMessage}\r\n :\r\n null;\r\n\r\n const checkboxWrapperClassNames = this.props.checkboxWrapperClassName;\r\n\r\n if (!this.props.isEditable) {\r\n let checkedContent = (this.props.checked) ?\r\n this.props.label :\r\n null;\r\n\r\n\r\n return (\r\n
    \r\n {legend}\r\n
    \r\n {checkedContent}\r\n
    \r\n
    \r\n )\r\n }\r\n else {\r\n return (\r\n
    \r\n {legend}\r\n {checkbox}\r\n \r\n {errorMessage}\r\n
    \r\n );\r\n }\r\n }\r\n}\r\n\r\nCheckboxInput.defaultProps = {\r\n checked: false,\r\n checkboxWrapperClassName: \"\",\r\n isEditable: true,\r\n required: false,\r\n requiredFieldIndicatorStyle: {style: \"star\", position: \"before\"}\r\n};\r\n\r\nCheckboxInput.propTypes = {\r\n className: PropTypes.string,\r\n checked: PropTypes.bool,\r\n checkboxWrapperClassName: PropTypes.string,\r\n disabled: PropTypes.bool,\r\n errorMessage: PropTypes.string,\r\n id: PropTypes.string.isRequired,\r\n isEditable: PropTypes.bool,\r\n label: PropTypes.string.isRequired,\r\n legend: PropTypes.string,\r\n name: PropTypes.string,\r\n onChange: PropTypes.func,\r\n required: PropTypes.bool,\r\n requiredFieldIndicatorStyle: PropTypes.shape({\r\n style: PropTypes.string, // either \"star\", \"dot\" or \"none\"\r\n position: PropTypes.string // either \"before\" or \"after\"\r\n }),\r\n value: PropTypes.string,\r\n verticalSpacing: PropTypes.string\r\n}\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport InputError from '../../../errors/InputError';\r\n\r\nexport default class SelectBox extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n let existingContentObject = this.props.options.find((option) => option.value === this.props.existingContent);\r\n let firstOptionValue = undefined;\r\n if (this.props.options.length) {\r\n firstOptionValue = this.props.options.find(s => s.selected === true) ?\r\n this.props.options.find(s => s.selected === true).value :\r\n this.props.options[0].value;\r\n }\r\n\r\n this.state = {\r\n options: this.props.options,\r\n selectedValue: (existingContentObject) ? this.props.existingContent : firstOptionValue\r\n };\r\n }\r\n\r\n focus() {\r\n this[`${this.props.id}__select`].focus();\r\n }\r\n\r\n hasFocus() {\r\n return this[`${this.props.id}__select`] === document.activeElement;\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(newProps) {\r\n if (\r\n newProps.options.length !== this.state.options.length ||\r\n ('existingContent' in newProps &&\r\n newProps.existingContent !== undefined &&\r\n newProps.existingContent !== this.state.selectedValue)) {\r\n\r\n let existingContentObject = newProps.options.find((option) => option.value === newProps.existingContent);\r\n\r\n let firstOptionValue = (this.props.options.length) ?\r\n this.props.options[0].value :\r\n undefined;\r\n\r\n let selectedValue = (existingContentObject) ? newProps.existingContent : firstOptionValue;\r\n\r\n this.setState({ options: newProps.options, selectedValue });\r\n }\r\n }\r\n\r\n getValue = () => {\r\n if (this.props.required && !this.state.selectedValue) {\r\n throw new InputError(this.props.label + \" is Required\", this.state.selectedValue);\r\n }\r\n\r\n return this.state.selectedValue;\r\n }\r\n\r\n onChange = (e) => {\r\n this.setState({ selectedValue: e.target.value }, () => {\r\n if (this.props.onChange) {\r\n this.props.onChange(this.state.selectedValue);\r\n this.doValidation();\r\n }\r\n });\r\n }\r\n\r\n handleBlur = (e) => {\r\n if (this.props.onBlur) {\r\n this.props.onBlur(e);\r\n }\r\n this.doValidation();\r\n }\r\n\r\n doValidation = () => {\r\n let newErrorMessage = null;\r\n if (this.props.validateOnBlur) {\r\n if (this.props.required) {\r\n if (!this.state.selectedValue || this.state.selectedValue === this.props.options[0].name) {\r\n newErrorMessage = (this.props.requiredError) ?\r\n this.props.requiredError :\r\n this.props.label + \" is a required field.\";\r\n }\r\n }\r\n if (newErrorMessage) {\r\n this.setState({ className: this.props.validationErrorClass });\r\n }\r\n\r\n this.setState({\r\n validationError: newErrorMessage,\r\n contentWrapperClass: newErrorMessage ? this.props.validationErrorClass : ''\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n let label = (this.props.label) ?\r\n : null;\r\n\r\n let requiredFieldIndicator = (this.props.required) ?\r\n :\r\n null;\r\n\r\n let helperText = this.props.helperText ?\r\n \r\n {this.props.helperText}\r\n :\r\n null;\r\n\r\n let errorText = this.props.errorMessage;\r\n if (!errorText && this.state.validationError) {\r\n errorText = this.state.validationError;\r\n }\r\n let errorMessage = errorText ?\r\n \r\n {errorText}\r\n :\r\n null;\r\n\r\n const optionsList = this.props.options.map((option, index) =>\r\n \r\n );\r\n\r\n let selectedValueName = null;\r\n\r\n if (this.state.selectedValue) {\r\n let selectedValueObject = this.props.options.find((option) => option.value === this.state.selectedValue);\r\n if (!selectedValueObject) {\r\n selectedValueObject = this.props.options.find((option) => option.name === this.state.selectedValue);\r\n }\r\n selectedValueName = selectedValueObject.name;\r\n }\r\n\r\n let inputDisplay = null;\r\n\r\n let verticalSpacingClass = this.props.verticalSpacing === \"compact\" ? \"field--compact\" : \"field\";\r\n\r\n let contentWrapperClass = this.props.contentWrapperClass;\r\n if (this.state.contentWrapperClass) {\r\n contentWrapperClass = this.state.contentWrapperClass;\r\n }\r\n verticalSpacingClass += \" \" + contentWrapperClass;\r\n\r\n if (optionsList.length) {\r\n inputDisplay = (this.props.isEditable) ?\r\n
    \r\n
    \r\n {label}\r\n {requiredFieldIndicator}\r\n
    \r\n { this[`${this.props.id}__select`] = instance; }}\r\n >\r\n {optionsList}\r\n \r\n {helperText}\r\n {errorMessage}\r\n
    :\r\n
    \r\n {label}\r\n
    \r\n {selectedValueName}\r\n
    \r\n
    ;\r\n }\r\n\r\n return (\r\n \r\n {inputDisplay}\r\n \r\n );\r\n }\r\n}\r\n\r\nSelectBox.defaultProps = {\r\n isEditable: true\r\n};\r\n\r\nSelectBox.propTypes = {\r\n className: PropTypes.string,\r\n disabled: PropTypes.bool,\r\n errorMessage: PropTypes.string,\r\n existingContent: PropTypes.string,\r\n id: PropTypes.string.isRequired,\r\n isEditable: PropTypes.bool,\r\n label: PropTypes.string,\r\n onChange: PropTypes.func,\r\n options: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n required: PropTypes.bool,\r\n verticalSpacing: PropTypes.string\r\n}\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport TextInput from '../text-input/TextInput';\r\nimport CheckboxInput from '../checkbox-input/CheckboxInput';\r\nimport './ImageInput.css';\r\n\r\nexport default class ImageInput extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n existingContentObject: (this.props.existingContentObject) ? this.props.existingContentObject : {}\r\n };\r\n }\r\n \r\n componentWillReceiveProps(newProps) {\r\n // For case where user is going from edit-mode to read-only-mode (like onCancel)\r\n if ( \r\n newProps.existingContentObject !== this.props.existingContentObject && \r\n this.props.isEditable && \r\n !newProps.isEditable\r\n ) {\r\n this.setState({ existingContentObject: newProps.existingContentObject });\r\n }\r\n }\r\n \r\n // Grabs the values from the inputs and updates the state with the new values\r\n getValue = () => {\r\n if (this.props.isEditable) {\r\n let newImageObject = {}; \r\n\r\n newImageObject[\"imageURL\"] = this[`${this.props.id}__image-URL`].getValue();\r\n newImageObject[\"imageCaption\"] = this[`${this.props.id}__image-caption`].getValue();\r\n newImageObject[\"imageAlt\"] = this[`${this.props.id}__image-alt`].getValue();\r\n \r\n if (this.props.hasGraphicCheckbox) {\r\n newImageObject[\"imageIsGraphic\"] = this[`${this.props.id}__image-graphic`].getValue();\r\n }\r\n\r\n this.setState({ existingContentObject: newImageObject });\r\n\r\n return newImageObject;\r\n }\r\n \r\n return this.state.existingContentObject; \r\n }\r\n\r\n render () { \r\n const label = (this.props.label) ?\r\n :\r\n null;\r\n \r\n const graphicCheckbox = (this.props.hasGraphicCheckbox) ?\r\n { this[`${this.props.id}__image-graphic`] = instance; }}\r\n /> :\r\n null;\r\n \r\n // Shows inputs when in edit mode, and read only versions of inputs if showInputsInReadOnly is true\r\n let inputDisplay = (this.props.isEditable || this.props.showInputsInReadOnly) ?\r\n \r\n { this[`${this.props.id}__image-URL`] = instance; }}\r\n />\r\n { this[`${this.props.id}__image-caption`] = instance; }}\r\n />\r\n { this[`${this.props.id}__image-alt`] = instance; }}\r\n />\r\n {graphicCheckbox}\r\n :\r\n null;\r\n \r\n // Only shows image content when a URL is provided\r\n let imageDisplay = (this.state.existingContentObject && this.state.existingContentObject[\"imageURL\"]) ?\r\n
    \r\n {this.state.existingContentObject[\"imageAlt\"]}\r\n\r\n
    {this.state.existingContentObject[\"imageCaption\"]}
    \r\n
    :\r\n null;\r\n\r\n return (\r\n
    \r\n {label}\r\n {imageDisplay}\r\n {inputDisplay}\r\n
    \r\n );\r\n }\r\n}\r\n \r\nImageInput.defaultProps = {\r\n hasGraphicCheckbox: false,\r\n isEditable: true,\r\n showInputsInReadOnly: false\r\n};\r\n\r\nImageInput.propTypes = {\r\n disabled: PropTypes.bool,\r\n existingContentObject: PropTypes.shape({\r\n imageAlt: PropTypes.string,\r\n imageCaption: PropTypes.string,\r\n imageIsGraphic: PropTypes.bool,\r\n imageURL: PropTypes.string\r\n }),\r\n hasGraphicCheckbox: PropTypes.bool,\r\n id: PropTypes.string.isRequired,\r\n isEditable: PropTypes.bool,\r\n label: PropTypes.string,\r\n showInputsInReadOnly: PropTypes.bool\r\n};","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport InputList from '../../input-list/InputList';\r\nimport './GridInputPrompts.css';\r\n\r\nconst AddTablePrompt = (props) => {\r\n let handleSubmit = (receivedValues) => {\r\n let rows = (receivedValues.values[props.formId + \"-add-table-rows\"]) ?\r\n receivedValues.values[props.formId + \"-add-table-rows\"] :\r\n null;\r\n \r\n let columns = (receivedValues.values[props.formId + \"-add-table-columns\"]) ?\r\n receivedValues.values[props.formId + \"-add-table-columns\"] :\r\n null;\r\n\r\n props.handleSubmit(rows, columns);\r\n }\r\n\r\n let inputListArray = [\r\n {\r\n label: 'Rows',\r\n type: 'number',\r\n id: props.formId + '-add-table-rows',\r\n required: true\r\n },\r\n {\r\n label: 'Columns',\r\n type: 'number',\r\n id: props.formId + '-add-table-columns',\r\n required: true\r\n },\r\n {\r\n type: 'button',\r\n value: 'Cancel',\r\n className: 'prompt__button--cancel',\r\n onClick: props.handleCancel\r\n },\r\n {\r\n type: 'submit',\r\n value: 'Add Table',\r\n className: 'button'\r\n }\r\n ];\r\n\r\n let promptContent = (props.isShowing) ?\r\n \r\n handleSubmit(receivedValues)}\r\n />\r\n :\r\n null;\r\n\r\n return (\r\n \r\n {promptContent}\r\n \r\n );\r\n}\r\n\r\nAddTablePrompt.propTypes = {\r\n formId: PropTypes.string.isRequired,\r\n handleCancel: PropTypes.func.isRequired,\r\n handleSubmit: PropTypes.func.isRequired,\r\n isShowing: PropTypes.bool.isRequired\r\n}\r\n\r\nexport { AddTablePrompt }","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport './GridInputControls.css';\r\n\r\nconst GridInputControls = (props) => {\r\n let options = (props.options) ? \r\n props.options.map((option) =>\r\n \r\n {option.label}\r\n \r\n ) : \r\n null;\r\n\r\n return (\r\n
    \r\n {options}\r\n
    \r\n );\r\n}\r\n\r\nGridInputControls.propTypes = {\r\n options: PropTypes.arrayOf(PropTypes.shape({\r\n label: PropTypes.string.isRequired,\r\n onClick: PropTypes.func.isRequired\r\n }))\r\n}\r\n\r\nexport { GridInputControls };","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport TextInput from '../text-input/TextInput';\r\nimport { AddTablePrompt } from './grid-input-prompts/GridInputPrompts';\r\nimport { GridInputControls } from './grid-input-controls/GridInputControls';\r\nimport createConfirmAlert from '../../../../shared/functions/createConfirmAlert';\r\nimport classNames from 'classnames';\r\nimport './GridInput.css';\r\n\r\nexport default class GridInput extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n addTablePromptShowing: false,\r\n columns: this.calcColumns(this.props.existingContentArray),\r\n inputValues: (this.props.existingContentArray) ? this.props.existingContentArray : [],\r\n rows: this.props.existingContentArray && this.props.existingContentArray.length\r\n };\r\n }\r\n \r\n componentWillReceiveProps(newProps) {\r\n // For case where user is going from edit-mode to read-only-mode (like onCancel)\r\n if ( \r\n newProps.existingContentArray !== this.props.existingContentArray || \r\n (this.props.isEditable && \r\n !newProps.isEditable)\r\n ) {\r\n \r\n // Closes all open panels when the editor is going into read-only mode\r\n let closePanels = (this.props.isEditable && !newProps.isEditable) && {\r\n addTablePromptShowing: false\r\n };\r\n \r\n this.setState({ \r\n columns: this.calcColumns(newProps.existingContentArray),\r\n inputValues: newProps.existingContentArray,\r\n rows: newProps.existingContentArray && newProps.existingContentArray.length,\r\n ...closePanels\r\n });\r\n }\r\n }\r\n \r\n // Takes number value and converts it into excel-column-format letters, so hitting AA once A-Z are used up, etc\r\n numberToLetter = (number) => {\r\n return (\r\n ((number >= 26) ? \r\n this.numberToLetter((number / 26 >> 0) - 1) : \r\n ''\r\n ) + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[number % 26]\r\n );\r\n }\r\n \r\n // Grabs the values from the text inputs of each cell to return, and updates the state of the component to match\r\n getValue = () => {\r\n let gridData = [];\r\n\r\n for (let i = 0; i < this.state.rows; ++i) {\r\n let gridDataRow = [];\r\n\r\n for (let j = 0; j < this.state.columns; ++j) {\r\n gridDataRow.push(\r\n this[this.props.id + \"-row\" + i + \"column\" + j].getValue()\r\n );\r\n }\r\n \r\n gridData.push(gridDataRow);\r\n }\r\n \r\n this.setState({ inputValues: gridData });\r\n \r\n return (gridData.length) ? gridData : null;\r\n }\r\n \r\n // Shows and hides the add table prompt\r\n toggleAddTablePrompt = () => {\r\n this.setState((prevState) => {\r\n \r\n let addTablePromptShowing = !prevState.addTablePromptShowing;\r\n \r\n return { addTablePromptShowing };\r\n });\r\n }\r\n \r\n // Takes the row and column numbers passed from the add table prompt and creates empty table data\r\n confirmAddTable = (rowCount, columnCount) => {\r\n this.toggleAddTablePrompt();\r\n \r\n const rows = parseInt(rowCount, 10);\r\n const columns = parseInt(columnCount, 10);\r\n \r\n let inputValues = [];\r\n for (let i = 0; i < rows; ++i) {\r\n inputValues.push(new Array(columns).fill(\"\"));\r\n }\r\n\r\n this.setState({ rows, columns, inputValues });\r\n }\r\n \r\n // Adds a new column to the table data\r\n addColumn = () => {\r\n let inputValues = this.getValue();\r\n \r\n this.setState((prevState) => {\r\n const columns = prevState.columns + 1;\r\n\r\n for (let i = 0; i < prevState.rows; ++i) {\r\n inputValues[i].push(\"\");\r\n }\r\n \r\n return { columns, inputValues };\r\n });\r\n }\r\n \r\n // Adds a new row to the table data\r\n addRow = () => {\r\n let inputValues = this.getValue();\r\n \r\n this.setState((prevState) => {\r\n const rows = prevState.rows + 1;\r\n\r\n inputValues.push(new Array(prevState.columns).fill(\"\"));\r\n \r\n return { rows, inputValues };\r\n });\r\n }\r\n \r\n // Creates a confirmation message for deleting a row or column, where proper delete function will be called if accepted\r\n confirmDelete = (index, rowOrColumn) => {\r\n let confirmFunction = (rowOrColumn === 'row') ?\r\n this.deleteRow :\r\n this.deleteColumn;\r\n \r\n let displayIndex = (rowOrColumn === 'column') ?\r\n this.numberToLetter(index) :\r\n index + 1;\r\n \r\n let confirmAlertObject = {\r\n title: 'Confirm Action',\r\n message: `Are you sure you want to delete ${rowOrColumn} ${displayIndex}?`,\r\n buttons: [\r\n {\r\n label: 'Cancel',\r\n onClick: () => {}\r\n },\r\n {\r\n label: 'Confirm',\r\n onClick: () => confirmFunction(index)\r\n }\r\n ]\r\n }\r\n \r\n createConfirmAlert(confirmAlertObject);\r\n }\r\n \r\n // Deletes the column with the specified 0-based index\r\n deleteColumn = (index) => {\r\n if (this.state.columns === 1) {\r\n this.deleteTable();\r\n }\r\n else {\r\n let inputValues = this.getValue();\r\n \r\n this.setState((prevState) => {\r\n const columns = prevState.columns - 1;\r\n \r\n inputValues.forEach((row) => row.splice(index, 1));\r\n\r\n return {columns, inputValues};\r\n });\r\n }\r\n }\r\n \r\n // Deletes the row with the specified 0-based index\r\n deleteRow = (index) => {\r\n let inputValues = this.getValue();\r\n \r\n this.setState((prevState) => {\r\n const rows = prevState.rows - 1;\r\n\r\n inputValues.splice(index, 1);\r\n \r\n return {rows, inputValues};\r\n });\r\n }\r\n \r\n // Removes the current table and default everything\r\n deleteTable = () => {\r\n this.setState({ \r\n rows: 0, \r\n columns: 0, \r\n inputValues: [], \r\n tempInputValues: null \r\n });\r\n }\r\n \r\n // Figures out what the column count should be based on the longest row of the data\r\n calcColumns = (data) => {\r\n return data && data.reduce((maxLength, current, index) => {\r\n if (current.length > maxLength){\r\n return current.length;\r\n }\r\n return maxLength;\r\n }, 0);\r\n }\r\n \r\n render() {\r\n const label = (this.props.label) ?\r\n :\r\n null;\r\n \r\n let controlButtonOptions = null;\r\n \r\n if (this.props.isEditable) {\r\n controlButtonOptions = (!this.state.inputValues || !this.state.inputValues.length) ? [\r\n {\r\n label: \"Add Table\",\r\n onClick: this.toggleAddTablePrompt\r\n }\r\n ] : \r\n [\r\n {\r\n label: \"Add Column\",\r\n onClick: this.addColumn\r\n },\r\n {\r\n label: \"Add Row\",\r\n onClick: this.addRow\r\n },\r\n {\r\n label: \"Delete Table\",\r\n onClick: this.deleteTable\r\n }\r\n ];\r\n }\r\n \r\n let toolbar = (this.props.isEditable) ?\r\n \r\n \r\n \r\n :\r\n null;\r\n \r\n let tableRows = [];\r\n \r\n if (this.state.rows && this.state.columns && this.state.inputValues.length) {\r\n for (let i = 0; i < this.state.rows; ++i) {\r\n // For read-only mode, hides th row if there's no values in it\r\n if (\r\n i !== 0 || \r\n this.props.isEditable || \r\n this.state.inputValues[i].some(val => val)\r\n ) {\r\n let tableRowElements = [];\r\n \r\n if (i === 0) { \r\n tableRows.push(\r\n \r\n {[\r\n , \r\n ...Array.from(\r\n Array(this.state.columns).keys(), \r\n (cell) => {\r\n return this.confirmDelete(cell, 'column')}\r\n >\r\n {this.numberToLetter(cell)}\r\n \r\n }\r\n )\r\n ]}\r\n \r\n );\r\n }\r\n\r\n for (let j = 0; j < this.state.columns; ++j) {\r\n let existingCellContent = (this.state.inputValues[i] && \r\n j <= this.state.inputValues[i].length - 1) ?\r\n this.state.inputValues[i][j] :\r\n null;\r\n\r\n let CellType = (i === 0) ? \"th\" : \"td\";\r\n\r\n tableRowElements.push(\r\n \r\n {this[this.props.id + \"-row\" + i + \"column\" + j] = instance; }}\r\n />\r\n \r\n );\r\n }\r\n\r\n tableRows.push(\r\n \r\n this.confirmDelete(i, 'row')}>{i + 1}\r\n {tableRowElements}\r\n \r\n );\r\n }\r\n }\r\n }\r\n \r\n let table = (this.state.rows && this.state.columns && this.state.inputValues.length) ?\r\n \r\n {tableRows}\r\n
    :\r\n null;\r\n \r\n let verticalSpacingClass = this.props.verticalSpacing === \"compact\" ? \"field--compact\" : \"field\";\r\n \r\n let readOnlyToggleClass = classNames(verticalSpacingClass , 'grid-input', {\r\n 'read-only': !this.props.isEditable\r\n });\r\n\r\n return (\r\n
    \r\n {label}\r\n {toolbar}\r\n {table}\r\n
    \r\n );\r\n }\r\n}\r\n \r\nGridInput.defaultProps = {\r\n isEditable: true\r\n};\r\n \r\nGridInput.propTypes = {\r\n existingContentArray: PropTypes.arrayOf(PropTypes.array),\r\n id: PropTypes.string.isRequired,\r\n isEditable: PropTypes.bool,\r\n label: PropTypes.string,\r\n verticalSpacing: PropTypes.string\r\n};\r\n\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport InputError from '../../../errors/InputError';\r\nimport \"./TextArea.css\";\r\n\r\nexport default class TextArea extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n value: (this.props.existingContent) ? this.props.existingContent : \"\"\r\n };\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(newProps) {\r\n if ('existingContent' in newProps && newProps.existingContent !== undefined && newProps.existingContent !== this.state.value) {\r\n this.setState({ value: newProps.existingContent });\r\n }\r\n }\r\n\r\n getValue = () => {\r\n if (this.props.required && this.state.value === \"\") {\r\n throw new InputError(this.props.label + \" is Required\", this.state.value);\r\n }\r\n\r\n return this.state.value;\r\n }\r\n\r\n handleChange = (e) => {\r\n this.setState({ value: e.target.value });\r\n\r\n if (this.props.onChange) {\r\n this.props.onChange(e);\r\n }\r\n }\r\n\r\n handleBlur = (e) => {\r\n if (this.props.onBlur) {\r\n this.props.onBlur(e);\r\n }\r\n\r\n let newErrorMessage = null;\r\n if (this.props.validateOnBlur) {\r\n if (this.props.patternMatch) {\r\n if (e.target.value && !e.target.value.match(this.props.patternMatch)) {\r\n newErrorMessage = (this.props.patternMatchError) ?\r\n this.props.patternMatchError :\r\n this.props.label + \" is not the correct format.\";\r\n }\r\n }\r\n if (this.props.required) {\r\n if (!e.target.value) {\r\n newErrorMessage = (this.props.requiredError) ?\r\n this.props.requiredError :\r\n this.props.label + \" is a required field.\";\r\n }\r\n }\r\n if (newErrorMessage) {\r\n this.setState({ className: this.props.validationErrorClass });\r\n }\r\n this.setState({\r\n validationError: newErrorMessage,\r\n contentWrapperClass: newErrorMessage ? this.props.validationErrorClass : ''\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n let labelText = this.props.label;\r\n\r\n let label = (this.props.label) ?\r\n :\r\n null;\r\n\r\n let inputHelperText = this.props.helperText;\r\n\r\n let helperText = inputHelperText ?\r\n \r\n {inputHelperText}\r\n :\r\n null;\r\n\r\n let errorText = this.props.errorMessage;\r\n if (!errorText && this.state.validationError) {\r\n errorText = this.state.validationError;\r\n }\r\n let errorMessage = errorText ?\r\n \r\n {errorText}\r\n :\r\n null;\r\n\r\n let requiredFieldIndicator = (this.props.required) ?\r\n :\r\n null;\r\n\r\n let verticalSpacingClass = this.props.verticalSpacing === \"compact\" ? \"field--compact\" : \"field\";\r\n\r\n let readOnlyContent = (this.props.existingContent) ?\r\n this.props.existingContent.split(\"\\n\").map((paragraph, index) => {\r\n if (paragraph !== \"\") {\r\n return

    {paragraph}

    ;\r\n }\r\n return null;\r\n }) :\r\n null;\r\n\r\n let contentWrapperClass = this.props.contentWrapperClass;\r\n if (this.state.contentWrapperClass) {\r\n contentWrapperClass = this.state.contentWrapperClass;\r\n }\r\n\r\n\r\n let ElementType = (this.props.useDiv) ? \"div\" : \"span\";\r\n let textAreaDisplay = (this.props.isEditable) ?\r\n\r\n \r\n
    \r\n {label}\r\n {requiredFieldIndicator}\r\n
    \r\n this.handleBlur(e)}\r\n onChange={(e) => this.handleChange(e)}\r\n placeholder={this.props.placeholderText}\r\n required={this.props.required}\r\n value={this.state.value}\r\n >\r\n \r\n {helperText}\r\n {errorMessage}\r\n
    :\r\n \r\n {label}\r\n
    \r\n {readOnlyContent}\r\n
    \r\n
    ;\r\n\r\n return (\r\n
    \r\n {textAreaDisplay}\r\n
    \r\n );\r\n }\r\n}\r\n\r\nTextArea.defaultProps = {\r\n isEditable: true\r\n};\r\n\r\nTextArea.propTypes = {\r\n className: PropTypes.string,\r\n disabled: PropTypes.bool,\r\n errorMessage: PropTypes.string,\r\n existingContent: PropTypes.string,\r\n helperText: PropTypes.string,\r\n id: PropTypes.string.isRequired,\r\n isEditable: PropTypes.bool,\r\n label: PropTypes.string,\r\n maxLength: PropTypes.string,\r\n minLength: PropTypes.string,\r\n name: PropTypes.string,\r\n onChange: PropTypes.func,\r\n placeholderText: PropTypes.string,\r\n required: PropTypes.bool,\r\n useDiv: PropTypes.bool,\r\n value: PropTypes.string,\r\n verticalSpacing: PropTypes.string\r\n}\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport ButtonInput from '../button-input/ButtonInput';\r\nimport GridInput from '../grid-input/GridInput';\r\nimport TextArea from '../text-area/TextArea';\r\nimport Papa from 'papaparse';\r\n\r\nexport default class InputUpload extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n uploadedFileText: null\r\n };\r\n }\r\n \r\n componentWillReceiveProps(newProps) {\r\n // For case where user is going from edit-mode to read-only-mode (like onCancel)\r\n // Also for case where changes happen to the existingContent so the uploadedFileText shouldn't overrule that\r\n if (\r\n (this.props.isEditable && !newProps.isEditable) || \r\n (newProps.existingContent !== this.props.existingContent)) {\r\n // The input needs to default back to the existing content (aka the last save), so the uploaded text needs to be cleared out\r\n this.setState({ uploadedFileText: null });\r\n }\r\n }\r\n \r\n getValue = () => {\r\n return this[this.props.id].getValue();\r\n }\r\n \r\n uploadFile = (file) => {\r\n let reader = new FileReader();\r\n \r\n reader.onload = (e) => {\r\n this.setState((prevState) => {\r\n let uploadedFileText = e.target.result.trim();\r\n \r\n return { uploadedFileText }\r\n });\r\n };\r\n \r\n reader.readAsText(file);\r\n }\r\n \r\n render() { \r\n let buttonDisplay = (this.props.isEditable) &&\r\n ;\r\n \r\n let parsedExistingContent = (this.props.hasGrid && this.props.existingContent) ?\r\n Papa.parse(this.props.existingContent.trim()).data : \r\n null;\r\n \r\n let inputDisplayProps = {\r\n id: this.props.id,\r\n isEditable: (!this.props.isEditable) ? false : undefined,\r\n label: this.props.label,\r\n ref: instance => { this[this.props.id] = instance; },\r\n verticalSpacing: this.props.verticalSpacing\r\n };\r\n \r\n let inputDisplay = (this.props.hasGrid) ?\r\n :\r\n ;\r\n \r\n return (\r\n
    \r\n {inputDisplay}\r\n {buttonDisplay}\r\n
    \r\n );\r\n }\r\n}\r\n\r\nInputUpload.defaultProps = {\r\n hasGrid: false,\r\n isEditable: true\r\n};\r\n\r\nInputUpload.propTypes = {\r\n buttonLabel: PropTypes.string,\r\n existingContent: PropTypes.string,\r\n fileTypes: PropTypes.string,\r\n hasGrid: PropTypes.bool,\r\n id: PropTypes.string.isRequired,\r\n isEditable: PropTypes.bool,\r\n label: PropTypes.string,\r\n verticalSpacing: PropTypes.string\r\n}","import Papa from 'papaparse';\r\n\r\nexport function unparse(content) {\r\n if (content) {\r\n let processedContent = content.map((row) => {\r\n return row.map((cell) => {\r\n if (typeof cell === \"string\") {\r\n return cell.replace(new RegExp('\\r?\\n', 'g'), 'NEWLINEHERE');\r\n }\r\n else {\r\n return cell;\r\n }\r\n });\r\n })\r\n\r\n return Papa.unparse(processedContent);\r\n }\r\n\r\n return '';\r\n}\r\n\r\nexport function parse(content) {\r\n if (content) {\r\n let parsedContent = Papa.parse(content);\r\n\r\n if (parsedContent.errors.length) {\r\n return [];\r\n }\r\n\r\n let processedContent = parsedContent.data.map((row) => {\r\n return row.map((cell) => {\r\n if (typeof cell === \"string\") {\r\n return cell.replace(new RegExp('NEWLINEHERE','g'), '\\n');\r\n }\r\n else {\r\n return cell;\r\n }\r\n });\r\n })\r\n\r\n return processedContent;\r\n }\r\n\r\n return [];\r\n}","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Chart from '../chart/Chart';\r\nimport { \r\n BULLET_CHART_TYPE, \r\n HORIZONTAL_BULLET_CHART_TYPE, \r\n LINE_CHART_TYPE, \r\n KAPLAN_MEIER_CHART_TYPE, \r\n STACKED_BULLET_CHART_TYPE, \r\n HORIZONTAL_STACKED_BULLET_CHART_TYPE,\r\n HORIZONTAL_CHART_TYPES\r\n} from '../chart/chartFunctions';\r\nimport { Grid, GridItem } from '../grid/Grid';\r\nimport ButtonInput from '../button-input/ButtonInput';\r\nimport CheckboxInput from '../checkbox-input/CheckboxInput';\r\nimport SelectBox from '../select-box/SelectBox';\r\nimport TextInput from '../text-input/TextInput';\r\nimport ImageInput from '../image-input/ImageInput';\r\nimport InputUpload from '../input-upload/InputUpload';\r\nimport { unparse } from '../../../functions/parse-handling';\r\nimport './ChartInput.css';\r\n\r\nexport default class ChartInput extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n chartInputValues: (this.props.existingContentObject) ? this.props.existingContentObject : {},\r\n type: (this.props.existingContentObject) ? this.props.existingContentObject.type : undefined,\r\n savedChartInputValues: (this.props.existingContentObject) ? this.props.existingContentObject : {},\r\n savedType: (this.props.existingContentObject) ? this.props.existingContentObject.type : undefined,\r\n tempChartInputValues: {}\r\n };\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(newProps) {\r\n const newChartInputValues = (newProps.existingContentObject) ? newProps.existingContentObject : {};\r\n const newType = (newProps.existingContentObject) ? newProps.existingContentObject.type : undefined;\r\n\r\n // On toggle into edit mode\r\n if (!this.props.isEditable && newProps.isEditable) {\r\n this.setState({\r\n chartInputValues: newChartInputValues,\r\n type: newType,\r\n tempChartInputValues: {}\r\n });\r\n }\r\n // On toggle into read-only mode\r\n else if (this.props.isEditable && !newProps.isEditable) {\r\n this.setState({\r\n savedChartInputValues: newChartInputValues,\r\n savedType: newType\r\n });\r\n }\r\n }\r\n\r\n // Grabs all of the input values in an object\r\n getValue = () => {\r\n let valuesObject = {};\r\n this.addChartValuesToObject(valuesObject);\r\n valuesObject.type = this.state.type;\r\n\r\n for (let property in valuesObject) {\r\n if (valuesObject[property] === \"\") {\r\n delete valuesObject[property];\r\n }\r\n }\r\n\r\n this.setState({ chartInputValues: valuesObject });\r\n\r\n return valuesObject;\r\n }\r\n\r\n // Updates the type of the chart while preserving the current inputs in a temp object\r\n updateType = () => {\r\n this.setState((prevState) => {\r\n let type = this[this.props.id + '-type'].getValue();\r\n\r\n let tempChartInputValues = prevState.tempChartInputValues;\r\n let currentInputValues = {};\r\n this.addChartValuesToObject(currentInputValues);\r\n\r\n let tempHasKeys = false;\r\n\r\n Object.keys(currentInputValues).forEach((key) => {\r\n if (currentInputValues[key] !== undefined) {\r\n tempHasKeys = true;\r\n tempChartInputValues[key] = currentInputValues[key];\r\n }\r\n });\r\n\r\n if (tempHasKeys) {\r\n return { type, tempChartInputValues };\r\n }\r\n\r\n return { type };\r\n });\r\n }\r\n\r\n // Updates what displays on the chart\r\n updateChart = () => {\r\n this.setState((prevState) => {\r\n let type = this[this.props.id + '-type'].getValue();\r\n let chartInputValues = prevState.chartInputValues;\r\n this.addChartValuesToObject(chartInputValues);\r\n\r\n return { type, chartInputValues, tempChartInputValues: {} };\r\n });\r\n }\r\n\r\n // Puts the input values in an object\r\n addChartValuesToObject = (object) => {\r\n object.betterArrowDirection = (this[this.props.id + '-better-arrow-direction']) ? this[this.props.id + '-better-arrow-direction'].getValue() : undefined;\r\n object.data = (this[this.props.id + '-chart-data']) ? this[this.props.id + '-chart-data'].getValue() : undefined;\r\n let imageValues = (this[this.props.id + '-image']) ? this[this.props.id + '-image'].getValue() : undefined;\r\n object.showLegend = (this[this.props.id + '-show-legend']) ? this[this.props.id + '-show-legend'].getValue() : undefined;\r\n object.legendOnTop = (this[this.props.id + '-legend-on-top']) ? this[this.props.id + '-legend-on-top'].getValue() : undefined;\r\n object.overallBenchmark = (this[this.props.id + '-overall-benchmark']) ? this[this.props.id + '-overall-benchmark'].getValue() : undefined;\r\n object.xAxisLabel = (this[this.props.id + '-x-axis-label']) ? this[this.props.id + '-x-axis-label'].getValue() : undefined;\r\n object.yMax = (this[this.props.id + '-y-max'] &&\r\n this[this.props.id + '-y-max'].getValue() !== \"\") ?\r\n parseFloat(this[this.props.id + '-y-max'].getValue()) :\r\n undefined;\r\n object.yMin = (this[this.props.id + '-y-min'] &&\r\n this[this.props.id + '-y-min'].getValue() !== \"\") ?\r\n parseFloat(this[this.props.id + '-y-min'].getValue()) :\r\n undefined;\r\n object.ySteps = (this[this.props.id + '-y-steps'] &&\r\n this[this.props.id + '-y-steps'].getValue()) ?\r\n parseFloat(this[this.props.id + '-y-steps'].getValue()) :\r\n undefined;\r\n object.yAxisLabel = (this[this.props.id + '-y-axis-label']) ? this[this.props.id + '-y-axis-label'].getValue() : undefined;\r\n if (imageValues) {\r\n object.image = {\r\n url: imageValues.imageURL,\r\n caption: imageValues.imageCaption,\r\n altText: imageValues.imageAlt,\r\n isGraphic: imageValues.imageIsGraphic\r\n };\r\n }\r\n }\r\n\r\n render() {\r\n // Controls what values are filled into the inputs\r\n let chartInputValues = (Object.keys(this.state.tempChartInputValues).length === 0) ?\r\n this.state.chartInputValues :\r\n this.state.tempChartInputValues;\r\n\r\n let chartViewValues, chartViewType;\r\n\r\n // Controls what values are being showed on the chart\r\n if (this.props.isEditable) {\r\n chartViewValues = this.state.chartInputValues;\r\n chartViewType = this.state.type;\r\n }\r\n else {\r\n chartViewValues = this.state.savedChartInputValues;\r\n chartViewType = this.state.savedType;\r\n }\r\n\r\n const betterArrowOptions = [\r\n {\r\n name: \"None\",\r\n value: \"\"\r\n },\r\n {\r\n name: \"Up\",\r\n value: \"up\"\r\n },\r\n {\r\n name: \"Down\",\r\n value: \"down\"\r\n }\r\n ];\r\n\r\n let overallBenchmarkCheckbox = (this.state.type !== LINE_CHART_TYPE && this.state.type !== KAPLAN_MEIER_CHART_TYPE) ?\r\n \r\n { this[this.props.id + '-overall-benchmark'] = instance; }}\r\n />\r\n :\r\n null;\r\n\r\n // Input display\r\n const chartFields = (this.props.isEditable) ?
    \r\n { this[this.props.id + '-chart-data'] = instance; }}\r\n verticalSpacing={this.props.verticalSpacing}\r\n />\r\n \r\n \r\n { this[this.props.id + '-x-axis-label'] = instance; }}\r\n verticalSpacing={this.props.verticalSpacing}\r\n />\r\n \r\n \r\n { this[this.props.id + '-y-axis-label'] = instance; }}\r\n verticalSpacing={this.props.verticalSpacing}\r\n />\r\n \r\n \r\n
    \r\n Y-Axis Value Range\r\n \r\n \r\n { this[this.props.id + '-y-min'] = instance; }}\r\n type=\"number\"\r\n verticalSpacing={this.props.verticalSpacing}\r\n />\r\n \r\n \r\n { this[this.props.id + '-y-max'] = instance; }}\r\n type=\"number\"\r\n verticalSpacing={this.props.verticalSpacing}\r\n />\r\n \r\n \r\n { this[this.props.id + '-y-steps'] = instance; }}\r\n type=\"number\"\r\n />\r\n \r\n \r\n
    \r\n \r\n \r\n { this[this.props.id + '-show-legend'] = instance; }}\r\n verticalSpacing={this.props.verticalSpacing}\r\n />\r\n \r\n \r\n { this[this.props.id + '-legend-on-top'] = instance; }}\r\n verticalSpacing={this.props.verticalSpacing}\r\n />\r\n \r\n {overallBenchmarkCheckbox}\r\n \r\n { this[this.props.id + '-better-arrow-direction'] = instance; }} \r\n verticalSpacing={this.props.verticalSpacing}\r\n />\r\n \r\n
    :\r\n null;\r\n\r\n const typeOptions = [\r\n {\r\n name: \"None\",\r\n value: \"\"\r\n },\r\n {\r\n name: \"Bar\",\r\n value: BULLET_CHART_TYPE\r\n },\r\n {\r\n name: \"Horizontal Bar\",\r\n value: HORIZONTAL_BULLET_CHART_TYPE\r\n },\r\n {\r\n name: \"Stacked Bar\",\r\n value: STACKED_BULLET_CHART_TYPE\r\n },\r\n {\r\n name: \"Horizontal Stacked Bar\",\r\n value: HORIZONTAL_STACKED_BULLET_CHART_TYPE\r\n },\r\n {\r\n name: \"Line\",\r\n value: LINE_CHART_TYPE\r\n },\r\n {\r\n name: \"Kaplan-Meier\",\r\n value: KAPLAN_MEIER_CHART_TYPE\r\n },\r\n {\r\n name: \"Image\",\r\n value: \"image\"\r\n }\r\n ];\r\n\r\n const label = (this.props.label) ?\r\n :\r\n null;\r\n \r\n let chartHeight = 520;\r\n \r\n if (HORIZONTAL_CHART_TYPES.includes(chartViewType)) {\r\n let dataLength = (chartViewValues.data && chartViewValues.data.length) ? chartViewValues.data.length : 1;\r\n \r\n let calcHeight = ((dataLength - 1) * 125) + 20;\r\n \r\n if (calcHeight > chartHeight) {\r\n chartHeight = calcHeight;\r\n }\r\n }\r\n\r\n let chartDisplay = null;\r\n\r\n if (chartViewType) {\r\n if (this.props.showChart) {\r\n chartDisplay = \r\n \r\n \r\n \r\n \r\n {chartFields}\r\n \r\n ;\r\n }\r\n else {\r\n chartDisplay = \r\n \r\n \r\n \r\n {chartFields}\r\n \r\n ;\r\n }\r\n }\r\n\r\n let chartInputDisplay = (this.props.isEditable) ?\r\n
    \r\n { this[this.props.id + '-type'] = instance; }}\r\n verticalSpacing={this.props.verticalSpacing}\r\n />\r\n {chartDisplay}\r\n
    :\r\n
    \r\n {label}\r\n {chartDisplay}\r\n
    ;\r\n\r\n if (chartViewType === \"image\") {\r\n chartInputDisplay = (this.props.isEditable) ?\r\n
    \r\n { this[this.props.id + '-type'] = instance; }}\r\n verticalSpacing={this.props.verticalSpacing}\r\n />\r\n { this[this.props.id + '-image'] = instance; }}\r\n verticalSpacing={this.props.verticalSpacing}\r\n />\r\n
    :\r\n
    \r\n {label}\r\n \r\n
    ;\r\n }\r\n\r\n return chartInputDisplay;\r\n }\r\n}\r\n\r\nChartInput.defaultProps = {\r\n showChart: true\r\n};\r\n\r\nChartInput.propTypes = {\r\n existingContentObject: PropTypes.shape({\r\n type: PropTypes.oneOf([\r\n 'bullet',\r\n 'horizontal-bullet',\r\n 'image',\r\n 'kaplan-meier',\r\n 'line',\r\n 'stacked-bullet',\r\n 'horizontal-stacked-bullet',\r\n ''\r\n ]),\r\n betterArrowDirection: PropTypes.oneOf([\"up\", \"down\", null]),\r\n data: PropTypes.arrayOf(\r\n PropTypes.arrayOf(\r\n PropTypes.oneOfType([\r\n PropTypes.number,\r\n PropTypes.string\r\n ])\r\n )\r\n ),\r\n legendOnTop: PropTypes.bool,\r\n showLegend: PropTypes.bool,\r\n xAxisLabel: PropTypes.string,\r\n yAxisLabel: PropTypes.string,\r\n yMax: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n yMin: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n ySteps: PropTypes.oneOfType([PropTypes.number, PropTypes.string])\r\n }),\r\n id: PropTypes.string,\r\n isEditable: PropTypes.bool,\r\n label: PropTypes.string,\r\n showChart: PropTypes.bool, //only exists so tests don't break\r\n verticalSpacing: PropTypes.string\r\n};\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport './CheckboxInputList.css';\r\nimport CheckboxInput from '../checkbox-input/CheckboxInput';\r\nimport InputLabel from '../input-label/InputLabel';\r\nimport InputError from '../../../errors/InputError';\r\n\r\nexport default class CheckboxInputList extends Component {\r\n getValue = () => {\r\n let values = [];\r\n let errors = [];\r\n\r\n this.props.checkboxProps.forEach((cbProp) => {\r\n try {\r\n let isChecked = this[cbProp.id].getValue();\r\n if (isChecked) {\r\n values.push(cbProp.id);\r\n }\r\n }\r\n catch (error) {\r\n errors.push(error.message);\r\n }\r\n });\r\n\r\n if (!values.length) {\r\n errors.unshift(this.props.legend + \" is Required\")\r\n }\r\n\r\n if (errors.length) {\r\n throw new InputError(errors.join(\", \"), values);\r\n }\r\n else {\r\n return values;\r\n }\r\n }\r\n\r\n render() {\r\n let verticalSpacingClass = this.props.verticalSpacing === \"compact\" ? \"field--compact\" : \"field\";\r\n\r\n let errorMessage = (this.props.errorMessage) ?\r\n {this.props.errorMessage} :\r\n null;\r\n\r\n const checkboxes = this.props.checkboxProps.map((cbProp, index) => {\r\n let isCbChecked = ((\r\n this.props.selectedIds &&\r\n this.props.selectedIds.indexOf(cbProp.id) !== -1\r\n ) ||\r\n cbProp.checked\r\n );\r\n\r\n return (\r\n { this[cbProp.id] = instance; }}\r\n value={cbProp.value}\r\n />\r\n );\r\n });\r\n\r\n let checkedCsv = (this.props.selectedIds) ?\r\n this.props.selectedIds.map((selected) => {\r\n let propIndex = this.props.checkboxProps.findIndex((cbProp) => cbProp.id === selected);\r\n\r\n if (propIndex !== -1) {\r\n return this.props.checkboxProps[propIndex].label;\r\n }\r\n return null;\r\n }).join(\", \") :\r\n this.props.checkboxProps\r\n .filter((cbProp) => (cbProp.checked))\r\n .map((cbProp) => (cbProp.label))\r\n .join(\", \");\r\n\r\nlet checkboxListContent = (this.props.isEditable) ?\r\n \r\n
    \r\n \r\n {checkboxes}\r\n
    \r\n {errorMessage}\r\n
    :\r\n \r\n \r\n
    \r\n {checkedCsv}\r\n
    \r\n
    ;\r\n\r\n return (\r\n
    \r\n {checkboxListContent}\r\n
    \r\n );\r\n }\r\n}\r\n\r\nCheckboxInputList.defaultProps = {\r\n isEditable: true,\r\n requiredFieldIndicatorStyle: {style: \"star\", position: \"before\"}\r\n};\r\n\r\nCheckboxInputList.propTypes = {\r\n className: PropTypes.string,\r\n checkboxProps: PropTypes.arrayOf(PropTypes.shape({\r\n checked: PropTypes.bool,\r\n id: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired\r\n })).isRequired,\r\n disabled: PropTypes.bool,\r\n errorMessage: PropTypes.string,\r\n groupName: PropTypes.string.isRequired,\r\n id: PropTypes.string.isRequired,\r\n isEditable: PropTypes.bool,\r\n legend: PropTypes.string,\r\n onChange: PropTypes.func,\r\n required: PropTypes.bool,\r\n requiredFieldIndicatorStyle: PropTypes.shape({\r\n style: PropTypes.string, // either \"star\", \"dot\" or \"none\"\r\n position: PropTypes.string // either \"before\" or \"after\"\r\n }),\r\n selectedIds: PropTypes.arrayOf(PropTypes.string),\r\n verticalSpacing: PropTypes.string\r\n}\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport ButtonInput from '../button-input/ButtonInput';\r\nimport SelectBox from '../select-box/SelectBox';\r\nimport TextInput from '../text-input/TextInput';\r\nimport { Grid, GridItem } from '../grid/Grid';\r\nimport './DateRangeFilterInput.css';\r\n\r\nexport default class DateRangeFilterInput extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n existingContentObject: (this.props.existingContentObject) ? this.props.existingContentObject : {}\r\n };\r\n }\r\n\r\n componentWillReceiveProps(newProps) {\r\n // For case where user is going from edit-mode to read-only-mode (like onCancel)\r\n if (newProps.existingContentObject !== this.props.existingContentObject &&\r\n this.props.isEditable && !newProps.isEditable) {\r\n this.setState({ existingContentObject: newProps.existingContentObject });\r\n }\r\n }\r\n\r\n // Grabs the values from the inputs and updates the state with the new values\r\n getValue = () => {\r\n let newDateRangeObject = {};\r\n\r\n newDateRangeObject[\"dateField\"] = this[`${this.props.id}__date-field`].getValue();\r\n newDateRangeObject[\"dateFrom\"] = this[`${this.props.id}__date-from`].getValue();\r\n newDateRangeObject[\"dateTo\"] = this[`${this.props.id}__date-to`].getValue();\r\n\r\n this.setState({ existingContentObject: newDateRangeObject });\r\n\r\n return newDateRangeObject;\r\n }\r\n\r\n render () {\r\n const label = (this.props.label) ?\r\n :\r\n null;\r\n\r\n // Shows inputs when in edit mode, and read only versions of inputs if showInputsInReadOnly is true\r\n let inputDisplay = (this.props.isEditable || this.props.showInputsInReadOnly) ?\r\n \r\n { this[`${this.props.id}__date-field`] = instance; }}\r\n className=\"field__full-width\"\r\n verticalSpacing={this.props.verticalSpacing}\r\n />\r\n \r\n \r\n { this[`${this.props.id}__date-from`] = instance; }}\r\n verticalSpacing={this.props.verticalSpacing}\r\n />\r\n \r\n \r\n { this[`${this.props.id}__date-to`] = instance; }}\r\n verticalSpacing={this.props.verticalSpacing}\r\n />\r\n \r\n \r\n {\r\n let val = this.getValue();\r\n this.props.filterValueChange(val) }}\r\n verticalSpacing={this.props.verticalSpacing}\r\n />\r\n :\r\n null;\r\n\r\n return (\r\n \r\n {label}\r\n {inputDisplay}\r\n \r\n );\r\n }\r\n}\r\n\r\nDateRangeFilterInput.defaultProps = {\r\n isEditable: true,\r\n showInputsInReadOnly: false\r\n};\r\n\r\nDateRangeFilterInput.propTypes = {\r\n disabled: PropTypes.bool,\r\n existingContentObject: PropTypes.shape({\r\n dateField: PropTypes.string,\r\n dateFrom: PropTypes.string,\r\n dateTo: PropTypes.string\r\n }),\r\n id: PropTypes.string.isRequired,\r\n isEditable: PropTypes.bool,\r\n label: PropTypes.string,\r\n showInputsInReadOnly: PropTypes.bool\r\n};\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport TextInput from '../text-input/TextInput';\r\nimport SelectBox from '../select-box/SelectBox';\r\nimport './VideoInput.css';\r\n\r\nexport default class VideoInput extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.previewDivId = this.props.id.replace(/\\s/g, '') + \"__video-preview\";\r\n this.state = {\r\n existingContentObject: (this.props.existingContentObject) || {}\r\n };\r\n }\r\n\r\n componentWillReceiveProps(newProps) {\r\n // For case where user is going from edit-mode to read-only-mode (like onCancel)\r\n if (\r\n newProps.existingContentObject !== this.props.existingContentObject &&\r\n this.props.isEditable &&\r\n !newProps.isEditable\r\n ) {\r\n this.setState({ existingContentObject: newProps.existingContentObject });\r\n }\r\n }\r\n\r\n // Grabs the values from the inputs and updates the state with the new values\r\n getValue = (selectedValues, inputId) => {\r\n if (this.props.isEditable) {\r\n let newVideoObject = {};\r\n newVideoObject[\"videoId\"] = this[`${this.props.id}__video-id`].getValue();\r\n newVideoObject[\"caption\"] = this[`${this.props.id}__video-caption`].getValue();\r\n newVideoObject[\"type\"] = this[`${this.props.id}__video-type`].getValue();\r\n\r\n this.setState({ existingContentObject: newVideoObject });\r\n\r\n return newVideoObject;\r\n }\r\n\r\n return this.state.existingContentObject;\r\n }\r\n\r\n adjustPreviewHeight = () => {\r\n let type = (this.props && this.props.id && this[`${this.props.id}__video-type`] && this[`${this.props.id}__video-type`].getValue()) ?\r\n this[`${this.props.id}__video-type`].getValue() :\r\n null;\r\n type = type || (this.state && this.state.existingContentObject ? this.state.existingContentObject.type : null);\r\n let theDiv = document.getElementById(this.previewDivId);\r\n if (type && theDiv) {\r\n let theNewHeight = type === 'video' ?\r\n `${theDiv.offsetWidth * 9 / 16}px` :\r\n `${theDiv.offsetWidth * 9 / 16 + 205}px`;\r\n\r\n theDiv.setAttribute(\"style\",`height:${theNewHeight};overflow:hidden;`);\r\n theDiv.style.height = theNewHeight;\r\n }\r\n }\r\n\r\n\r\n loadVideo() {\r\n if (this.state &&\r\n this.state.existingContentObject &&\r\n this.state.existingContentObject.videoId &&\r\n this.state.existingContentObject.type !== 'none') {\r\n\r\n\r\n let embedData = this.state.existingContentObject.type === 'video' ?\r\n {\r\n \"targetId\": this.previewDivId,\r\n \"wid\": \"_2207941\",\r\n \"uiconf_id\": 37292221,\r\n \"flashvars\": {\r\n \"streamerType\": \"auto\",\r\n \"IframeCustomPluginCss1\" : \"/assets/styles/vendor/kaltura-styles.css\"\r\n },\r\n \"entry_id\": this.state.existingContentObject.videoId\r\n } :\r\n {\r\n \"targetId\": this.previewDivId,\r\n \"wid\": \"_2207941\",\r\n \"uiconf_id\": 37292221,\r\n \"flashvars\": {\r\n \"streamerType\": \"auto\",\r\n \"IframeCustomPluginCss1\" : '/assets/styles/vendor/kaltura-playlist-styles.css',\r\n \"playlistAPI\": {\r\n \"containerPosition\" : \"bottom\",\r\n \"layout\" : \"vertical\",\r\n \"MinClips\": 2,\r\n \"kpl0Id\": this.state.existingContentObject.videoId\r\n }\r\n }\r\n };\r\n\r\n if (window.kWidget) {\r\n window.kWidget.embed(embedData);\r\n }\r\n this.adjustPreviewHeight();\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n this.loadVideo();\r\n switch(this.input) {\r\n case \"videoId\":\r\n this[`${this.props.id}__video-id`].focusAtSetCaret(this.caretPosition);\r\n break;\r\n case \"caption\":\r\n this[`${this.props.id}__video-caption`].focusAtSetCaret(this.caretPosition);\r\n break;\r\n case \"type\":\r\n default:\r\n this[`${this.props.id}__video-type`].focus();\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.loadVideo();\r\n window.addEventListener('resize', this.adjustPreviewHeight);\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('resize', this.adjustPreviewHeight);\r\n }\r\n\r\n render () {\r\n let typeOptions = [\r\n { name: 'none', value: 'none' },\r\n { name: 'video', value: 'video' },\r\n { name: 'playlist', value: 'playlist' }\r\n ];\r\n\r\n const label = (this.props.label) ?\r\n :\r\n null;\r\n\r\n // Shows inputs when in edit mode, and read only versions of inputs if showInputsInReadOnly is true\r\n let inputDisplay = (this.props.isEditable || this.props.showInputsInReadOnly) ?\r\n \r\n {\r\n this.caretPosition = this[`${this.props.id}__video-id`].selectionStart();\r\n this.input = \"videoId\";\r\n this.getValue();\r\n }}\r\n ref={instance => { this[`${this.props.id}__video-id`] = instance; }}\r\n />\r\n {\r\n this.caretPosition = this[`${this.props.id}__video-caption`].selectionStart();\r\n this.input = \"caption\";\r\n this.getValue();\r\n }}\r\n ref={instance => { this[`${this.props.id}__video-caption`] = instance; }}\r\n />\r\n {\r\n this.input = \"type\";\r\n this.getValue();\r\n }}\r\n options={ typeOptions }\r\n ref={instance => { this[`${this.props.id}__video-type`] = instance; }}\r\n isEditable={(!this.props.isEditable) ? false : undefined}\r\n verticalSpacing={this.props.verticalSpacing}\r\n />\r\n :\r\n null;\r\n\r\n let caption = ( this.state.existingContentObject.type === 'video' ||\r\n this.state.existingContentObject.type === 'playlist' ) &&\r\n this.state.existingContentObject.videoId &&\r\n this.state.existingContentObject.caption ?\r\n
    {this.state.existingContentObject[\"caption\"]}
    :\r\n null;\r\n\r\n let preview = ( this.state.existingContentObject.type === 'video' ||\r\n this.state.existingContentObject.type === 'playlist' ) &&\r\n this.state.existingContentObject.videoId ?\r\n
    :\r\n null;\r\n\r\n return (\r\n
    \r\n {label}\r\n {preview}\r\n {caption}\r\n {inputDisplay}\r\n
    \r\n );\r\n }\r\n}\r\n\r\nVideoInput.defaultProps = {\r\n isEditable: true,\r\n showInputsInReadOnly: false\r\n};\r\n\r\nVideoInput.propTypes = {\r\n disabled: PropTypes.bool,\r\n existingContentObject: PropTypes.shape({\r\n videoId: PropTypes.string,\r\n caption: PropTypes.string,\r\n type: PropTypes.string\r\n }),\r\n id: PropTypes.string.isRequired,\r\n isEditable: PropTypes.bool,\r\n label: PropTypes.string,\r\n showInputsInReadOnly: PropTypes.bool\r\n};\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport SelectBox from '../select-box/SelectBox';\r\nimport ImageInput from '../image-input/ImageInput';\r\nimport VideoInput from '../video-input/VideoInput';\r\nimport './FeaturedMediaInput.css';\r\n\r\nexport default class FeaturedMediaInput extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n mediaType: (this.props.existingContentObject) ? this.props.existingContentObject.mediaType : undefined\r\n };\r\n \r\n this.mediaTypeOptions = [\r\n {\r\n name: \"None\",\r\n value: \"\"\r\n },\r\n {\r\n name: \"Image\",\r\n value: \"image\"\r\n },\r\n {\r\n name: \"Video\",\r\n value: \"video\"\r\n }\r\n ];\r\n }\r\n\r\n // Grabs all of the input values in an object\r\n getValue = () => {\r\n let valuesObject = (this.state.mediaType) ? this[this.props.id + '-format-input'].getValue() : {};\r\n \r\n for (let propName in valuesObject) {\r\n if (valuesObject[propName] === \"\" || valuesObject[propName] === null) {\r\n delete valuesObject[propName];\r\n }\r\n }\r\n \r\n valuesObject.mediaType = this.state.mediaType;\r\n\r\n return valuesObject;\r\n }\r\n\r\n // Updates the type of the chart while preserving the current inputs in a temp object\r\n updateMediaType = (newType) => {\r\n this.setState({ mediaType : newType });\r\n }\r\n\r\n render () {\r\n let label = (this.props.label) ?\r\n :\r\n null;\r\n\r\n let errorMessage = (this.props.errorMessage) ?\r\n \r\n {this.props.errorMessage}\r\n :\r\n null;\r\n\r\n let verticalSpacingClass = this.props.verticalSpacing === \"compact\" ? \"field--compact\" : \"field\";\r\n \r\n let input = null;\r\n \r\n if (this.state.mediaType) {\r\n input = (this.state.mediaType === \"image\") ?\r\n { this[this.props.id + '-format-input'] = instance; }}\r\n /> :\r\n { this[this.props.id + '-format-input'] = instance; }}\r\n />;\r\n }\r\n\r\n let inputDisplay = (this.props.isEditable) ?\r\n \r\n {label}\r\n { this[this.props.id + '-media-type'] = instance; }}\r\n />\r\n {input}\r\n {errorMessage}\r\n :\r\n \r\n {label}\r\n
    \r\n {input}\r\n
    \r\n
    ;\r\n\r\n return (\r\n
    \r\n {inputDisplay}\r\n
    \r\n );\r\n }\r\n}\r\n\r\nFeaturedMediaInput.defaultProps = {\r\n isEditable: true\r\n};\r\n\r\nFeaturedMediaInput.propTypes = {\r\n className: PropTypes.string,\r\n errorMessage: PropTypes.string,\r\n existingContentObject: PropTypes.shape({\r\n mediaType: PropTypes.string,\r\n imageAlt: PropTypes.string,\r\n imageCaption: PropTypes.string,\r\n imageURL: PropTypes.string,\r\n videoId: PropTypes.string,\r\n caption: PropTypes.string,\r\n type: PropTypes.string\r\n }),\r\n id: PropTypes.string.isRequired,\r\n isEditable: PropTypes.bool,\r\n label: PropTypes.string,\r\n verticalSpacing: PropTypes.string\r\n}","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Link } from 'react-router-dom';\r\nimport TextInput from '../text-input/TextInput';\r\n\r\nexport default class LinkInput extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n // Set the state for the object containing linkText & linkURL values\r\n this.state = {\r\n existingContentObject: this.props.existingContentObject\r\n };\r\n }\r\n\r\n getValue = () => {\r\n\r\n if (this.props.isEditable) {\r\n\r\n // creates an object to hold the updated values\r\n let newLinkContentObject = {};\r\n\r\n // connects the LinkInput values to the new object\r\n newLinkContentObject[\"linkText\"] = this[`${this.props.id}__link-text`].getValue();\r\n newLinkContentObject[\"linkURL\"] = this[`${this.props.id}__link-URL`].getValue();\r\n\r\n // updates the object in state with the new values\r\n this.setState({ existingContentObject: newLinkContentObject })\r\n\r\n return newLinkContentObject;\r\n }\r\n\r\n return this.state.existingContentObject;\r\n\r\n }\r\n\r\n render() {\r\n\r\n const label = this.props.label ?\r\n :\r\n null;\r\n\r\n let requiredFieldIndicator = (this.props.required) ?\r\n :\r\n null;\r\n\r\n const errorMessage = this.props.errorMessage ?\r\n \r\n {this.props.errorMessage}\r\n :\r\n null;\r\n\r\n let link = (this.props.newWindow) ?\r\n \r\n {this.state.existingContentObject[\"linkText\"]}\r\n
    :\r\n \r\n {this.state.existingContentObject[\"linkText\"]}\r\n ;\r\n\r\n let linkContent = this.props.isEditable ?\r\n\r\n // Displays form fields for editing\r\n \r\n
    \r\n {this.props.label ? {this.props.label}{requiredFieldIndicator} : null}\r\n { this[`${this.props.id}__link-text`] = instance; }}\r\n verticalSpacing={this.props.verticalSpacing}\r\n />\r\n { this[`${this.props.id}__link-URL`] = instance; }}\r\n verticalSpacing={this.props.verticalSpacing}\r\n />\r\n
    \r\n {errorMessage}\r\n
    :\r\n\r\n // Displays a \"Read-only\" link with optional label\r\n \r\n {this.props.label ? : null}\r\n {link}\r\n \r\n ;\r\n\r\n return linkContent;\r\n }\r\n}\r\n\r\nLinkInput.defaultProps = {\r\n newWindow: true,\r\n isEditable: false\r\n};\r\n\r\nLinkInput.propTypes = {\r\n className: PropTypes.string,\r\n disabled: PropTypes.bool,\r\n errorMessage: PropTypes.string,\r\n existingContentObject: PropTypes.shape({\r\n linkText: PropTypes.string,\r\n linkURL: PropTypes.string\r\n }),\r\n id: PropTypes.string,\r\n isEditable: PropTypes.bool,\r\n label: PropTypes.string,\r\n newWindow: PropTypes.bool,\r\n required: PropTypes.bool,\r\n verticalSpacing: PropTypes.string\r\n};\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport InputError from '../../../errors/InputError';\r\nimport './RadioInputList.css';\r\n\r\nexport default class RadioInputList extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n selectedId: (this.props.selectedId) ? this.props.selectedId : null\r\n };\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(newProps) {\r\n if ('selectedId' in newProps && newProps.selectedId !== undefined && newProps.selectedId !== this.state.selectedId) {\r\n this.setState({ selectedId: newProps.selectedId });\r\n }\r\n }\r\n\r\n onChange = (radioId, e) => {\r\n this.setState({ selectedId: radioId });\r\n if (this.props.onChange) {\r\n this.props.onChange(e, radioId);\r\n }\r\n }\r\n\r\n getValue = () => {\r\n if (this.props.required && this.state.selectedId === null) {\r\n throw new InputError(this.props.legend + \" is Required\", this.state.selectedId);\r\n }\r\n\r\n return this.state.selectedId;\r\n }\r\n\r\n render() {\r\n const requiredFieldIndicator = (this.props.required && this.props.isEditable)\r\n ? \r\n : null;\r\n\r\n let errorMessage = (this.props.errorMessage)\r\n ? \r\n {this.props.errorMessage}\r\n \r\n : null;\r\n\r\n let legend = (this.props.legend || this.props.required)\r\n ? {this.props.legend}{requiredFieldIndicator}\r\n : null;\r\n\r\n let helperText = this.props.helperText ?\r\n \r\n {this.props.helperText}\r\n :\r\n null;\r\n\r\n let verticalSpacingClass = this.props.verticalSpacing === \"compact\" ? \"field--compact\" : \"field\";\r\n\r\n const radioButtons = this.props.radioProps.map((radioProp, index) => {\r\n\r\n let radio = (\r\n this.onChange(radioProp.id, e)}\r\n />\r\n );\r\n\r\n let label = ();\r\n\r\n const radioWrapperClassNames = \"radio-button \" + this.props.radioWrapperClassName;\r\n\r\n return (\r\n
    {radio}{label}
    \r\n );\r\n })\r\n\r\n let checkedRadio = (this.state.selectedId) ?\r\n this.props.radioProps.find((radioProp) => (radioProp.id === this.state.selectedId)) :\r\n this.props.radioProps.find((radioProp) => (radioProp.checked));\r\n\r\n let checkedRadioLabel = (checkedRadio) ? checkedRadio.label : null;\r\n\r\n let radioInputContent = (this.props.isEditable) ?\r\n \r\n
    \r\n {this.props.legend}{requiredFieldIndicator}\r\n {radioButtons}\r\n
    \r\n {errorMessage}\r\n {helperText}\r\n
    :\r\n \r\n {this.props.legend}{requiredFieldIndicator}\r\n
    \r\n {checkedRadioLabel}\r\n
    \r\n
    ;\r\n\r\n return (\r\n
    \r\n {radioInputContent}\r\n
    \r\n );\r\n }\r\n}\r\n\r\nRadioInputList.defaultProps = {\r\n isEditable: true,\r\n radioWrapperClassName: \"\"\r\n};\r\n\r\nRadioInputList.propTypes = {\r\n className: PropTypes.string,\r\n disabled: PropTypes.bool,\r\n errorMessage: PropTypes.string,\r\n groupName: PropTypes.string.isRequired,\r\n helperText: PropTypes.string,\r\n id: PropTypes.string.isRequired,\r\n isEditable: PropTypes.bool,\r\n legend: PropTypes.string,\r\n onChange: PropTypes.func,\r\n radioProps: PropTypes.arrayOf(PropTypes.shape({\r\n checked: PropTypes.bool,\r\n id: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n value: PropTypes.string.isRequired\r\n })).isRequired,\r\n radioWrapperClassName: PropTypes.string,\r\n required: PropTypes.bool,\r\n selectedId: PropTypes.string,\r\n verticalSpacing: PropTypes.string\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst Image = (props) => {\r\n const { alt, src } = (props.contentState && props.entityKey) ? props.contentState.getEntity(props.entityKey).getData() :\r\n \"\" ;\r\n \r\n return (\r\n \r\n {alt}\r\n \r\n \r\n );\r\n};\r\n\r\nImage.propTypes = {\r\n contentState: PropTypes.object,\r\n entityKey: PropTypes.string\r\n}\r\n\r\n\r\nconst Link = (props) => {\r\n const {url} = (props.contentState && props.entityKey) ?\r\n props.contentState.getEntity(props.entityKey).getData()\r\n : \"\";\r\n \r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nLink.propTypes = {\r\n children: PropTypes.any.isRequired,\r\n contentState: PropTypes.object,\r\n entityKey: PropTypes.string\r\n}\r\n\r\nexport { Image, Link }","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Map } from 'immutable';\r\nimport './StyleControls.css';\r\n\r\nconst StyleControls = (props) => {\r\n let inlineOptions, blockOptions, toggleOptions, styleControlsClasses;\r\n \r\n if (props.editorState) {\r\n const selection = props.editorState.getSelection();\r\n const block = props.editorState\r\n .getCurrentContent()\r\n .getBlockForKey(selection.getStartKey());\r\n const blockType = ( block ) ? block.getType() : 'unstyled';\r\n let currentStyle = ( block ) ? props.editorState.getCurrentInlineStyle() : Map();\r\n\r\n styleControlsClasses = classNames('rich-text-editor__style-controls', {\r\n 'rtl': (props.textDirection === \"RTL\")\r\n });\r\n\r\n inlineOptions = (props.inlineOptions) ? \r\n props.inlineOptions.map((option) =>\r\n \r\n ) : \r\n null;\r\n\r\n blockOptions = (props.blockOptions) ? \r\n props.blockOptions.map((option) =>\r\n \r\n ) : \r\n null;\r\n\r\n toggleOptions = (props.toggleOptions) ? \r\n props.toggleOptions.map((option) =>\r\n \r\n ) : \r\n null;\r\n }\r\n\r\n return (\r\n
    \r\n {inlineOptions}\r\n {blockOptions}\r\n {toggleOptions}\r\n
    \r\n );\r\n}\r\n\r\nStyleControls.defaultProps = {\r\n textDirection: 'LTR'\r\n}\r\n\r\nStyleControls.propTypes = {\r\n blockOptions: PropTypes.arrayOf(PropTypes.shape({\r\n label: PropTypes.string.isRequired,\r\n style: PropTypes.string.isRequired\r\n })),\r\n editorState: PropTypes.object, \r\n inlineOptions: PropTypes.arrayOf(PropTypes.shape({\r\n label: PropTypes.string.isRequired,\r\n style: PropTypes.string.isRequired\r\n })),\r\n onBlockToggle: PropTypes.func,\r\n onInlineToggle: PropTypes.func,\r\n textDirection: PropTypes.oneOf(['RTL', 'LTR']),\r\n toggleOptions: PropTypes.arrayOf(PropTypes.shape({\r\n activeLabel: PropTypes.string,\r\n label: PropTypes.string,\r\n onActiveToggle: PropTypes.func,\r\n onInactiveToggle: PropTypes.func.isRequired,\r\n style: PropTypes.string\r\n }))\r\n}\r\n\r\nclass StyleButton extends Component {\r\n constructor() {\r\n super();\r\n this.onToggle = (e) => {\r\n e.preventDefault();\r\n \r\n let toggleFunc = (this.props.onActiveToggle && this.props.isActive) ?\r\n this.props.onActiveToggle :\r\n this.props.onToggle;\r\n \r\n toggleFunc(this.props.style);\r\n };\r\n }\r\n \r\n render() {\r\n let className = 'rich-text-editor__button';\r\n let label = this.props.label;\r\n \r\n if (this.props.isActive) {\r\n className += ' rich-text-editor__button--active';\r\n label = (this.props.activeLabel) ?\r\n this.props.activeLabel :\r\n this.props.label;\r\n }\r\n \r\n return (\r\n \r\n {label}\r\n \r\n );\r\n }\r\n}\r\n\r\nStyleButton.propTypes = {\r\n activeLabel: PropTypes.string,\r\n isActive: PropTypes.bool,\r\n label: PropTypes.string,\r\n onActiveToggle: PropTypes.func,\r\n onToggle: PropTypes.func.isRequired,\r\n style: PropTypes.string\r\n}\r\n\r\nexport { StyleControls, StyleButton };\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport InputList from '../../input-list/InputList';\r\nimport convertToSuperscript from '../../../../functions/convertToSuperscript';\r\nimport convertToSubscript from '../../../../functions/convertToSubscript';\r\nimport './Prompts.css';\r\n\r\nclass ImagePrompt extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n errorMessage: null\r\n };\r\n }\r\n \r\n handleSubmit = (receivedValues) => {\r\n if (!receivedValues.errors.length) {\r\n let imageUrl = (receivedValues.values[this.props.formId + \"-image-url\"]) ?\r\n receivedValues.values[this.props.formId + \"-image-url\"] :\r\n null;\r\n \r\n let imageAltText = (receivedValues.values[this.props.formId + \"-image-alt-text\"]) ?\r\n receivedValues.values[this.props.formId + \"-image-alt-text\"] :\r\n null;\r\n \r\n this.setState({ errorMessage: null });\r\n \r\n this.props.handleSubmit(imageUrl, imageAltText);\r\n }\r\n else {\r\n this.setState({ errorMessage: receivedValues.errors.join(\", \") });\r\n }\r\n }\r\n \r\n handleCancel = () => {\r\n this.setState({ errorMessage: null });\r\n this.props.handleCancel();\r\n }\r\n \r\n render() {\r\n let inputListArray = [\r\n {\r\n label: 'Image URL',\r\n type: 'text',\r\n id: this.props.formId + '-image-url',\r\n patternMatch: /\\.(jpeg|jpg|gif|png|ashx)/i,\r\n patternMatchError: 'Image URL Must Be One of These Formats: .ashx, .gif, .jpeg, .jpg, .png',\r\n required: true\r\n },\r\n {\r\n label: 'Alt Text',\r\n type: 'text',\r\n id: this.props.formId + '-image-alt-text'\r\n },\r\n {\r\n type: 'button',\r\n value: 'Cancel',\r\n className: 'prompt__button--cancel',\r\n onClick: this.handleCancel\r\n },\r\n {\r\n type: 'submit',\r\n value: 'Add Image',\r\n className: 'button button--small'\r\n }\r\n ];\r\n \r\n let errorMessage = (this.state.errorMessage) ?\r\n
    {this.state.errorMessage}
    :\r\n null;\r\n\r\n let promptContent = (this.props.isShowing) ?\r\n \r\n this.handleSubmit(receivedValues)}\r\n />\r\n {errorMessage}\r\n :\r\n null;\r\n\r\n return (\r\n \r\n {promptContent}\r\n \r\n );\r\n }\r\n}\r\n\r\nImagePrompt.propTypes = {\r\n formId: PropTypes.string.isRequired,\r\n handleCancel: PropTypes.func.isRequired,\r\n handleSubmit: PropTypes.func.isRequired,\r\n isShowing: PropTypes.bool.isRequired\r\n}\r\n\r\n\r\nclass LinkPrompt extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n errorMessage: null\r\n };\r\n }\r\n \r\n handleSubmit = (receivedValues) => {\r\n if (!receivedValues.errors.length) {\r\n let linkText = (receivedValues.values[this.props.formId + \"-link-text\"]) ?\r\n receivedValues.values[this.props.formId + \"-link-text\"] :\r\n null;\r\n \r\n let linkUrl = (receivedValues.values[this.props.formId + \"-link-url\"]) ?\r\n receivedValues.values[this.props.formId + \"-link-url\"] :\r\n null;\r\n \r\n this.setState({ errorMessage: null });\r\n\r\n this.props.handleSubmit(linkUrl, linkText);\r\n }\r\n else {\r\n this.setState({ errorMessage: receivedValues.errors.join(\", \") });\r\n }\r\n }\r\n \r\n handleCancel = () => {\r\n this.setState({ errorMessage: null });\r\n this.props.handleCancel();\r\n }\r\n \r\n render() {\r\n let inputListArray = [\r\n {\r\n label: 'URL',\r\n type: 'text',\r\n id: this.props.formId + '-link-url',\r\n patternMatch: /^(http:\\/\\/|https:\\/\\/|mailto:)/g,\r\n patternMatchError: 'Link must start with http://, https://, or mailto:',\r\n required: true\r\n },\r\n {\r\n type: 'button',\r\n value: 'Cancel',\r\n className: 'prompt__button--cancel',\r\n onClick: this.handleCancel\r\n },\r\n {\r\n type: 'submit',\r\n value: 'Add Link',\r\n className: 'button button--small'\r\n }\r\n ];\r\n \r\n if (this.props.promptForText) {\r\n inputListArray.unshift({\r\n label: 'Text',\r\n type: 'text',\r\n id: this.props.formId + '-link-text',\r\n required: true\r\n });\r\n }\r\n \r\n let errorMessage = (this.state.errorMessage) ?\r\n
    {this.state.errorMessage}
    :\r\n null;\r\n\r\n let promptContent = (this.props.isShowing) ?\r\n \r\n this.handleSubmit(receivedValues)}\r\n />\r\n {errorMessage}\r\n :\r\n null;\r\n\r\n return (\r\n \r\n {promptContent}\r\n \r\n );\r\n }\r\n}\r\n \r\nLinkPrompt.defaultProps = {\r\n promptForText: false\r\n}\r\n\r\nLinkPrompt.propTypes = {\r\n formId: PropTypes.string.isRequired,\r\n handleCancel: PropTypes.func.isRequired,\r\n handleSubmit: PropTypes.func.isRequired,\r\n isShowing: PropTypes.bool.isRequired,\r\n promptForText: PropTypes.bool\r\n}\r\n\r\n\r\nconst CharactersPrompt = (props) => {\r\n const characters = [ \"©\", \"®\", \"™\", \"𝙋\",\r\n \"≤\", \"≥\", \"±\", \"ά\",\r\n \"α\", \"Β\", \"Δ\", \"ӧ\", \r\n \"ϋ\", \"—\", \"–\" ];\r\n let inputListArray = [];\r\n \r\n inputListArray.push(characters.map((character) => {\r\n return {\r\n type: 'button',\r\n value: character,\r\n className: 'prompt__button--character',\r\n onClick: () => props.handleSubmit(character)\r\n }\r\n }));\r\n\r\n inputListArray.push([{\r\n type: 'button',\r\n value: 'Cancel',\r\n className: 'prompt__button--cancel',\r\n onClick: props.handleCancel\r\n }]);\r\n\r\n let promptContent = (props.isShowing) ?\r\n \r\n \r\n :\r\n null;\r\n\r\n return (\r\n \r\n {promptContent}\r\n \r\n );\r\n}\r\n\r\nCharactersPrompt.propTypes = {\r\n formId: PropTypes.string.isRequired,\r\n handleCancel: PropTypes.func.isRequired,\r\n handleSubmit: PropTypes.func.isRequired,\r\n isShowing: PropTypes.bool.isRequired\r\n}\r\n\r\n\r\nclass SupSubPrompt extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n errorMessage: null\r\n };\r\n }\r\n \r\n handleSubmit = (receivedValues, type) => {\r\n if (type === \"superscript\") {\r\n if (!(receivedValues.values[this.props.formId + \"-sup-sub-characters\"].match(/^[A-PR-Za-pr-z0-9\\-—– ]+$/g))) {\r\n receivedValues.errors.push(\"Characters must be letters (except q), numbers, and dashes\");\r\n }\r\n }\r\n else {\r\n if (!(receivedValues.values[this.props.formId + \"-sup-sub-characters\"].match(/^[0-9\\-—–+() ]+$/g))) {\r\n receivedValues.errors.push(\"Characters must be numbers, parentheses, and +/-\");\r\n }\r\n }\r\n \r\n if (!receivedValues.errors.length) {\r\n let characters = (receivedValues.values[this.props.formId + \"-sup-sub-characters\"]) ?\r\n receivedValues.values[this.props.formId + \"-sup-sub-characters\"] :\r\n null;\r\n \r\n let scriptedCharacters = (type === \"superscript\") ? \r\n convertToSuperscript(characters) : \r\n convertToSubscript(characters);\r\n \r\n this.setState({ errorMessage: null });\r\n \r\n this.props.handleSubmit(scriptedCharacters);\r\n }\r\n else {\r\n this.setState({ errorMessage: receivedValues.errors.join(\", \") });\r\n }\r\n }\r\n \r\n handleCancel = () => {\r\n this.setState({ errorMessage: null });\r\n this.props.handleCancel();\r\n }\r\n \r\n render() {\r\n let inputListArray = [\r\n {\r\n label: 'Characters',\r\n type: 'text',\r\n id: this.props.formId + '-sup-sub-characters',\r\n required: true\r\n },\r\n {\r\n type: 'button',\r\n value: 'Cancel',\r\n className: 'prompt__button--cancel',\r\n onClick: this.handleCancel\r\n },\r\n {\r\n type: 'button',\r\n name: 'superscript',\r\n value: 'Superscript',\r\n className: 'button button--small prompt__button--space',\r\n onClick: () => { \r\n this.handleSubmit(\r\n this[this.props.formId].getValues(), \r\n \"superscript\"\r\n ); \r\n }\r\n },\r\n {\r\n type: 'button',\r\n name: 'subscript',\r\n value: 'Subscript',\r\n className: 'button button--small',\r\n onClick: () => { \r\n this.handleSubmit(\r\n this[this.props.formId].getValues(), \r\n \"subscript\"\r\n ); \r\n }\r\n }\r\n ];\r\n \r\n let errorMessage = (this.state.errorMessage) ?\r\n
    {this.state.errorMessage}
    :\r\n null;\r\n\r\n let promptContent = (this.props.isShowing) ?\r\n \r\n { this[this.props.formId] = instance; }}\r\n />\r\n {errorMessage}\r\n :\r\n null;\r\n\r\n return (\r\n \r\n {promptContent}\r\n \r\n );\r\n }\r\n}\r\n\r\nSupSubPrompt.propTypes = {\r\n formId: PropTypes.string.isRequired,\r\n handleCancel: PropTypes.func.isRequired,\r\n handleSubmit: PropTypes.func.isRequired,\r\n isShowing: PropTypes.bool.isRequired\r\n}\r\n\r\nexport { \r\n ImagePrompt, \r\n LinkPrompt, \r\n CharactersPrompt,\r\n SupSubPrompt\r\n}\r\n","export default function convertToSuperscript(characters) {\r\n const characterMap = {\r\n a: \"ᵃ\",\r\n b: \"ᵇ\",\r\n c: \"ᶜ\",\r\n d: \"ᵈ\",\r\n e: \"ᵉ\",\r\n f: \"ᶠ\",\r\n g: \"ᵍ\",\r\n h: \"ʰ\",\r\n i: \"ⁱ\",\r\n j: \"ʲ\",\r\n k: \"ᵏ\",\r\n l: \"ˡ\",\r\n m: \"ᵐ\",\r\n n: \"ⁿ\",\r\n o: \"ᵒ\",\r\n p: \"ᵖ\",\r\n r: \"ʳ\",\r\n s: \"ˢ\",\r\n t: \"ᵗ\",\r\n u: \"ᵘ\",\r\n v: \"ᵛ\",\r\n w: \"ʷ\",\r\n x: \"ˣ\",\r\n y: \"ʸ\",\r\n z: \"ᶻ\",\r\n 0: \"⁰\",\r\n 1: \"¹\",\r\n 2: \"²\",\r\n 3: \"³\",\r\n 4: \"⁴\",\r\n 5: \"⁵\",\r\n 6: \"⁶\",\r\n 7: \"⁷\",\r\n 8: \"⁸\",\r\n 9: \"⁹\",\r\n \"-\": \"⁻\",\r\n \"—\": \"⁻\",\r\n \"–\": \"⁻\",\r\n \" \": \" \"\r\n };\r\n \r\n let newString = \"\";\r\n \r\n characters\r\n .toLowerCase()\r\n .split(\"\")\r\n .forEach((character) => {\r\n if (characterMap[character]) {\r\n newString += characterMap[character];\r\n }\r\n });\r\n \r\n return newString;\r\n}","export default function convertToSubscript(characters) {\r\n const characterMap = {\r\n 0: \"₀\",\r\n 1: \"₁\",\r\n 2: \"₂\",\r\n 3: \"₃\",\r\n 4: \"₄\",\r\n 5: \"₅\",\r\n 6: \"₆\",\r\n 7: \"₇\",\r\n 8: \"₈\",\r\n 9: \"₉\",\r\n \"+\": \"₊\",\r\n \"-\": \"₋\",\r\n \"—\": \"₋\",\r\n \"–\": \"₋\",\r\n \"(\": \"₍\",\r\n \")\": \"₎\",\r\n \" \": \" \"\r\n };\r\n \r\n let newString = \"\";\r\n \r\n characters\r\n .split(\"\")\r\n .forEach((character) => {\r\n if (characterMap[character]) {\r\n newString += characterMap[character];\r\n }\r\n });\r\n \r\n return newString;\r\n}","import 'babel-polyfill';\r\nimport React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n ContentState,\r\n convertFromHTML,\r\n CompositeDecorator,\r\n Editor,\r\n EditorState,\r\n Modifier,\r\n RichUtils,\r\n SelectionState\r\n} from 'draft-js';\r\nimport { OrderedSet } from 'immutable';\r\nimport classNames from 'classnames';\r\nimport { stateToMarkdown } from '../../../libraries/draft-js-export-markdown';\r\nimport { stateFromMarkdown } from '../../../libraries/draft-js-import-markdown';\r\nimport { Image, Link } from './entities/Entities';\r\nimport { StyleControls } from './style-controls/StyleControls';\r\nimport {\r\n CharactersPrompt,\r\n ImagePrompt,\r\n LinkPrompt,\r\n SupSubPrompt\r\n} from './prompts/Prompts';\r\nimport InputError from '../../../errors/InputError';\r\nimport './RichTextEditor.css';\r\n\r\nexport default class RichTextEditor extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n const decorator = new CompositeDecorator([\r\n {\r\n strategy: findLinkEntities,\r\n component: Link\r\n },\r\n {\r\n strategy: findImageEntities,\r\n component: Image\r\n }\r\n ]);\r\n\r\n this.state = {\r\n charactersPromptShowing: false,\r\n contentInMarkdown: (this.props.existingContent) ? this.props.existingContent : \"\",\r\n decorator: decorator,\r\n editorState: EditorState.createWithContent(stateFromMarkdown((this.props.existingContent) ? this.props.existingContent : \"\"), decorator),\r\n isContentSet: false,\r\n imagePromptShowing: false,\r\n linkPromptShowing: false,\r\n promptForText: false,\r\n supSubPromptShowing: false\r\n };\r\n }\r\n\r\n componentWillReceiveProps(newProps) {\r\n if((newProps.existingContent &&\r\n newProps.existingContent !== this.state.contentInMarkdown &&\r\n !this.state.isContentSet\r\n ) ||\r\n (this.props.isEditable &&\r\n !newProps.isEditable\r\n )\r\n ) {\r\n\r\n this.setState(() => {\r\n\r\n let newEditorState = EditorState.createWithContent(stateFromMarkdown(newProps.existingContent), this.state.decorator);\r\n\r\n let styledEditorState = this.addLinkStyles(newEditorState);\r\n\r\n // Closes all open panels when the editor is going into read-only mode\r\n let closePanels = (this.props.isEditable && !newProps.isEditable) && {\r\n charactersPromptShowing: false,\r\n imagePromptShowing: false,\r\n linkPromptShowing: false,\r\n supSubPromptShowing: false\r\n };\r\n return {\r\n contentInMarkdown: newProps.existingContent,\r\n editorState: styledEditorState,\r\n isContentSet: true,\r\n ...closePanels\r\n };\r\n });\r\n }\r\n\r\n // Remove this when extra blank lines are cleared out of data\r\n // Only removing blank blocks when the user goes into edit mode\r\n if(!this.props.isEditable && newProps.isEditable) {\r\n let noBlanksEditorState = removeBlankBlocks(this.state.editorState);\r\n\r\n this.handleChange(noBlanksEditorState);\r\n }\r\n }\r\n\r\n getValue = () => {\r\n const currentContent = this.state.editorState.getCurrentContent();\r\n const plainText = currentContent.getPlainText().trim();\r\n\r\n // Case to handle if there is no actual text in the section but styles are applying, with exception for just image(s) content\r\n if (plainText === \"\" && !this.state.contentInMarkdown.startsWith(\"![\")) {\r\n if (this.props.required) {\r\n throw new InputError(this.props.label + \" is Required\", \"\");\r\n }\r\n return \"\";\r\n }\r\n\r\n return this.state.contentInMarkdown;\r\n }\r\n\r\n // Updates editorState and markdown when content is changed\r\n handleChange = (editorState, isHandlingBlur=false) => {\r\n this.setState(() => {\r\n let contentInMarkdown = stateToMarkdown(editorState.getCurrentContent()).trim();\r\n\r\n if (isHandlingBlur) {\r\n this.handleBlur(contentInMarkdown);\r\n }\r\n\r\n return { contentInMarkdown, editorState };\r\n });\r\n }\r\n\r\n // Passes the editor's markdown content and id to function received from props\r\n handleBlur = (newMarkdownContent) => {\r\n let markdownContent = (typeof newMarkdownContent === \"string\") ?\r\n newMarkdownContent :\r\n this.state.contentInMarkdown;\r\n\r\n if (this.props.onBlur) {\r\n this.props.onBlur(markdownContent, this.props.id);\r\n }\r\n }\r\n\r\n handlePastedText = (pastedText, pastedHTML) => {\r\n\r\n /*if(document.documentMode || /Edge/.test(navigator.userAgent)) {\r\n }\r\n else {*/\r\n\r\n // Standard copy paste procedures\r\n const { editorState } = this.state;\r\n let newContentState, pastedBlockMap = null;\r\n const textLengthBeforeCursor = editorState.getSelection().getFocusOffset();\r\n\r\n if (pastedHTML) {\r\n const blocksFromHTML = convertFromHTML(pastedHTML.split(\"\")[0] + \"\");\r\n\r\n pastedBlockMap = ContentState.createFromBlockArray(blocksFromHTML).blockMap;\r\n }\r\n else {\r\n pastedBlockMap = ContentState.createFromText(pastedText).blockMap;\r\n }\r\n\r\n newContentState = Modifier.replaceWithFragment(\r\n editorState.getCurrentContent(), editorState.getSelection(),\r\n pastedBlockMap\r\n );\r\n \r\n let insertedEditorState = EditorState.push(\r\n editorState,\r\n newContentState,\r\n 'insert-fragment'\r\n );\r\n \r\n const currentCursorKey = insertedEditorState.getCurrentContent().selectionBefore.focusKey;\r\n\r\n // Adds the link styles into the pasted content\r\n const linkEditorState = this.addLinkStyles(insertedEditorState);\r\n let cursorEditorState = linkEditorState;\r\n      const pastedBlockMapArray = pastedBlockMap.toArray();\r\n const pastedBlockMapLength = pastedBlockMapArray.length;\r\n\r\n // Handles cursor placement after content has been pasted\r\n if (pastedBlockMapLength === 1) {\r\n cursorEditorState = cursorToBlockPosition(\r\n linkEditorState,\r\n currentCursorKey,\r\n textLengthBeforeCursor + pastedBlockMapArray[0].text.length\r\n );\r\n }\r\n else if (pastedBlockMapLength > 1) {\r\n const contentBlockArray = linkEditorState.getCurrentContent().getBlocksAsArray();\r\n\r\n const newCursorKeyIndex = contentBlockArray\r\n .findIndex((block) => block.key === currentCursorKey) + pastedBlockMapArray.length - 1;\r\n\r\n const newCursorKey = contentBlockArray[newCursorKeyIndex].key;\r\n\r\n const lastPastedBlock = pastedBlockMapArray[pastedBlockMapArray.length - 1];\r\n\r\n cursorEditorState = cursorToBlockPosition(\r\n linkEditorState,\r\n newCursorKey,\r\n lastPastedBlock.text.length\r\n );\r\n }\r\n\r\n // Sets new editor state and updates markdown\r\n this.handleChange(cursorEditorState, true);\r\n\r\n // Prevents built-in copy-paste behaviors\r\n return true;\r\n //}\r\n }\r\n\r\n // When enter key is pressed\r\n handleReturn = (event) => {\r\n if (event.shiftKey) {\r\n this.handleChange(RichUtils.insertSoftNewline(this.state.editorState));\r\n return 'handled';\r\n }\r\n }\r\n\r\n // For nesting lists\r\n onTab = (event) => {\r\n this.handleChange(RichUtils.onTab(event, this.state.editorState, 6));\r\n }\r\n\r\n // Updates block types of selected content\r\n toggleBlockType = (blockType) => {\r\n this.handleChange(\r\n RichUtils.toggleBlockType(\r\n this.state.editorState,\r\n blockType\r\n )\r\n );\r\n }\r\n\r\n // Updates inline styles of selected content\r\n toggleInlineStyle = (inlineStyle) => {\r\n this.handleChange(\r\n RichUtils.toggleInlineStyle(\r\n this.state.editorState,\r\n inlineStyle\r\n )\r\n );\r\n }\r\n\r\n // Shows or hides the link content prompt\r\n toggleLinkPrompt = (promptForText) => {\r\n this.setState((prevState) => {\r\n\r\n let linkPromptShowing = !prevState.linkPromptShowing;\r\n\r\n let closeOthers = {};\r\n\r\n if (linkPromptShowing) {\r\n closeOthers.imagePromptShowing = false;\r\n closeOthers.charactersPromptShowing = false;\r\n closeOthers.supSubPromptShowing = false;\r\n }\r\n\r\n return { promptForText, linkPromptShowing, ...closeOthers };\r\n });\r\n }\r\n\r\n // Decides what content to prompt for in the link prompt\r\n promptForLink = (linkStyle) => {\r\n const selection = this.state.editorState.getSelection();\r\n\r\n if (!selection.isCollapsed()) {\r\n this.toggleLinkPrompt();\r\n }\r\n else {\r\n this.toggleLinkPrompt(true);\r\n }\r\n\r\n // TO-DO??: This really belongs in confirmLink, but for some reason it breaks when I try to add it in there.\r\n this.handleChange(\r\n RichUtils.toggleInlineStyle(\r\n this.state.editorState,\r\n linkStyle\r\n )\r\n );\r\n }\r\n\r\n // Handled the link content returned from the prompt and applies the entities and styles to the content\r\n confirmLink = (linkUrl, linkText) => {\r\n this.toggleLinkPrompt();\r\n\r\n const selection = this.state.editorState.getSelection();\r\n const contentState = this.state.editorState.getCurrentContent();\r\n\r\n // Text highlighted case\r\n if(!selection.isCollapsed() && linkUrl) {\r\n const contentStateWithEntity = contentState.createEntity('LINK', 'MUTABLE', { url: linkUrl });\r\n const entityKey = contentStateWithEntity.getLastCreatedEntityKey();\r\n\r\n this.handleChange(RichUtils.toggleLink(this.state.editorState, selection, entityKey), true);\r\n }\r\n // Text added case\r\n else if (selection.isCollapsed() && linkUrl && linkText) {\r\n const contentStateWithEntity = contentState.createEntity('LINK', 'MUTABLE', { url: linkUrl });\r\n const entityKey = contentStateWithEntity.getLastCreatedEntityKey();\r\n\r\n const style = this.state.editorState.getCurrentInlineStyle();\r\n\r\n const newEditorState = insertText(this.state.editorState, linkText, OrderedSet.of(...style, 'link'), entityKey);\r\n const spaceEditorState = insertText(newEditorState, \" \");\r\n\r\n this.handleChange(spaceEditorState, true);\r\n }\r\n }\r\n\r\n // Removes the link entity and style of the selected content\r\n removeLink = (toggleStyle) => {\r\n const state = this.state.editorState;\r\n const selection = state.getSelection();\r\n\r\n if (!selection.isCollapsed()) {\r\n\r\n let newEditorState = removeEntity(state);\r\n\r\n this.handleChange(RichUtils.toggleInlineStyle(\r\n newEditorState,\r\n toggleStyle\r\n ));\r\n }\r\n else {\r\n /* TO-DO: Bugfix: make entity stop being contiguous for next characters\r\n\r\n This will turn the style off, but the entity still exists so it's still in the link in the markdown. vvvv\r\n\r\n this.handleChange(RichUtils.toggleInlineStyle(\r\n state,\r\n toggleStyle\r\n ));\r\n\r\n */\r\n }\r\n }\r\n\r\n // Closes Link Prompt and reverts focus to the text editor\r\n cancelLink = () => {\r\n this.toggleLinkPrompt();\r\n this.editorRef.focus();\r\n }\r\n\r\n addLinkStyles = (editorState) => {\r\n let contentState = editorState.getCurrentContent();\r\n let linkBlocks = [];\r\n\r\n contentState.getBlocksAsArray().forEach((block) => {\r\n findLinkEntities(block, (start, end) => {\r\n linkBlocks.push({ block, start, end });\r\n }, contentState)\r\n });\r\n\r\n let newEditorState = (linkBlocks) ?\r\n addStylesToBlockRanges(editorState, linkBlocks, \"link\") :\r\n editorState;\r\n\r\n const noSelectionEditorState = EditorState.moveSelectionToEnd(\r\n newEditorState\r\n );\r\n\r\n return noSelectionEditorState;\r\n }\r\n\r\n // Shows or hides the image content prompt\r\n toggleImagePrompt = () => {\r\n this.setState((prevState) => {\r\n\r\n let imagePromptShowing = !prevState.imagePromptShowing;\r\n\r\n let closeOthers = {};\r\n\r\n if (imagePromptShowing) {\r\n closeOthers.linkPromptShowing = false;\r\n closeOthers.charactersPromptShowing = false;\r\n closeOthers.supSubPromptShowing = false;\r\n }\r\n\r\n return { imagePromptShowing, ...closeOthers };\r\n });\r\n }\r\n\r\n // Decides what content to prompt for in the image prompt\r\n promptForImage = () => {\r\n const selection = this.state.editorState.getSelection();\r\n\r\n if (selection.isCollapsed()) {\r\n this.toggleImagePrompt();\r\n }\r\n }\r\n\r\n // Takes the image content provided and inserts the image where the cursor is in the editor\r\n confirmImage = (imageUrl, imageAltText) => {\r\n this.toggleImagePrompt();\r\n\r\n if (imageUrl) {\r\n const initialEditorState = this.state.editorState;\r\n const initialContentState = initialEditorState.getCurrentContent();\r\n const initialSelection = initialEditorState.getSelection();\r\n const initialSelectionOffset = initialSelection.getStartOffset();\r\n const initialSelectionBlockKey = initialSelection.getStartKey();\r\n\r\n // Selection offset will be 0 if at the beginning\r\n const isAtBeginningOfBlock = !initialSelectionOffset;\r\n // Selection offset will match block's length if at end\r\n const isAtEndOfBlock = (initialSelectionOffset === initialContentState.getBlockForKey(initialSelectionBlockKey).getLength());\r\n const isBlankBlock = (isAtBeginningOfBlock && isAtEndOfBlock);\r\n const hasFollowingBlock = initialContentState.getBlockAfter(initialSelectionBlockKey);\r\n\r\n let finalEditorState = initialEditorState;\r\n\r\n // Case 1: Inserted into a blank block\r\n if (isBlankBlock) {\r\n const imageEditorState = addImageEntity(initialEditorState, imageUrl, imageAltText);\r\n\r\n if (hasFollowingBlock) {\r\n finalEditorState = imageEditorState;\r\n }\r\n else {\r\n const trailingBlockObject = insertBreak(imageEditorState, \"split\");\r\n\r\n finalEditorState = cursorToBlockPosition(trailingBlockObject.editorState, trailingBlockObject.blockKey, 0);\r\n }\r\n }\r\n // Case 2: Inserted at beginning of block\r\n else if (isAtBeginningOfBlock) {\r\n const precedingBlockObject = insertBreak(initialEditorState, \"split\");\r\n\r\n const newEditorState = cursorToBlockPosition(precedingBlockObject.editorState, precedingBlockObject.editorState.getCurrentContent().getKeyBefore(precedingBlockObject.blockKey), 0);\r\n\r\n finalEditorState = addImageEntity(newEditorState, imageUrl, imageAltText);\r\n }\r\n // Case 3: Inserted at end of block\r\n else if (isAtEndOfBlock) {\r\n const precedingBlockObject = insertBreak(initialEditorState, \"split\");\r\n\r\n const imageEditorState = addImageEntity(precedingBlockObject.editorState, imageUrl, imageAltText);\r\n\r\n if (hasFollowingBlock) {\r\n finalEditorState = imageEditorState;\r\n }\r\n else {\r\n const trailingBlockObject = insertBreak(imageEditorState, \"split\");\r\n\r\n finalEditorState = cursorToBlockPosition(trailingBlockObject.editorState, trailingBlockObject.blockKey, 0);\r\n }\r\n }\r\n // Case 4: Inserted in middle of block\r\n else {\r\n const precedingBlockObject = insertBreak(initialEditorState, \"block\");\r\n\r\n const newEditorState = cursorToBlockPosition(precedingBlockObject.editorState, precedingBlockObject.blockKey, 0);\r\n\r\n finalEditorState = addImageEntity(newEditorState, imageUrl, imageAltText);\r\n }\r\n\r\n this.handleChange(finalEditorState, true);\r\n }\r\n }\r\n\r\n // Closes Image Prompt and reverts focus to the text editor\r\n cancelImage = () => {\r\n this.toggleImagePrompt();\r\n this.editorRef.focus();\r\n }\r\n\r\n // Shows or hides the characters content prompt\r\n toggleCharactersPrompt = () => {\r\n this.setState((prevState) => {\r\n\r\n let charactersPromptShowing = !prevState.charactersPromptShowing;\r\n\r\n let closeOthers = {};\r\n\r\n if (charactersPromptShowing) {\r\n closeOthers.linkPromptShowing = false;\r\n closeOthers.imagePromptShowing = false;\r\n closeOthers.supSubPromptShowing = false;\r\n }\r\n\r\n return { charactersPromptShowing, ...closeOthers };\r\n });\r\n }\r\n\r\n insertCharacters = (characters) => {\r\n const selection = this.state.editorState.getSelection();\r\n const contentState = this.state.editorState.getCurrentContent();\r\n\r\n const newContentState = Modifier.replaceText(contentState, selection, characters);\r\n\r\n const newEditorState = EditorState.push(\r\n this.state.editorState,\r\n newContentState,\r\n 'insert-characters'\r\n );\r\n\r\n const finalEditorState = cursorToBlockPosition(\r\n newEditorState,\r\n selection.getStartKey(),\r\n selection.getStartOffset() + characters.length\r\n );\r\n\r\n this.handleChange(finalEditorState, true);\r\n }\r\n\r\n confirmCharacters = (character) => {\r\n this.toggleCharactersPrompt();\r\n this.insertCharacters(character);\r\n }\r\n\r\n // Closes Characters Prompt and reverts focus to the text editor\r\n cancelCharacters = () => {\r\n this.toggleCharactersPrompt();\r\n this.editorRef.focus();\r\n }\r\n\r\n // Shows or hides the superscript/subscript content prompt\r\n toggleSupSubPrompt = () => {\r\n this.setState((prevState) => {\r\n\r\n let supSubPromptShowing = !prevState.supSubPromptShowing;\r\n\r\n let closeOthers = {};\r\n\r\n if (supSubPromptShowing) {\r\n closeOthers.linkPromptShowing = false;\r\n closeOthers.imagePromptShowing = false;\r\n closeOthers.charactersPromptShowing = false;\r\n }\r\n\r\n return { supSubPromptShowing, ...closeOthers };\r\n });\r\n }\r\n\r\n confirmSupSub = (characters) => {\r\n this.toggleSupSubPrompt();\r\n this.insertCharacters(characters);\r\n }\r\n\r\n // Closes Superscript/Subscript Prompt and reverts focus to the text editor\r\n cancelSupSub = () => {\r\n this.toggleSupSubPrompt();\r\n this.editorRef.focus();\r\n }\r\n\r\n render() {\r\n let readOnlyToggleClass = classNames('field' , 'ccf-rich-text-editor', {\r\n 'read-only': !this.props.isEditable\r\n });\r\n\r\n let requiredFieldIndicator = (this.props.required && this.props.isEditable) ?\r\n * :\r\n null;\r\n\r\n const label = (this.props.label) ?\r\n :\r\n null;\r\n\r\n let errorMessage = (this.props.errorMessage) ?\r\n \r\n {this.props.errorMessage}\r\n :\r\n null;\r\n\r\n return (\r\n
    \r\n {requiredFieldIndicator}{label}\r\n \r\n \r\n \r\n \r\n \r\n { this.editorRef = instance; }}\r\n onBlur={this.handleBlur}\r\n onChange={this.handleChange}\r\n onTab={this.onTab}\r\n textDirectionality={this.props.textDirection}\r\n />\r\n {errorMessage}\r\n
    \r\n );\r\n }\r\n}\r\n\r\nRichTextEditor.defaultProps = {\r\n isEditable: true,\r\n textDirection: 'LTR'\r\n}\r\n\r\nRichTextEditor.propTypes = {\r\n errorMessage: PropTypes.string,\r\n existingContent: PropTypes.string,\r\n id: PropTypes.string.isRequired,\r\n isEditable: PropTypes.bool,\r\n label: PropTypes.string,\r\n onBlur: PropTypes.func,\r\n required: PropTypes.bool,\r\n textDirection: PropTypes.oneOf(['RTL', 'LTR'])\r\n}\r\n\r\n// Identifies where link entities exist within the content\r\nconst findLinkEntities = (contentBlock, callback, contentState) => {\r\n contentBlock.findEntityRanges(\r\n (character) => {\r\n const entityKey = character.getEntity();\r\n\r\n return (\r\n entityKey !== null &&\r\n contentState.getEntity(entityKey).getType() === 'LINK'\r\n );\r\n },\r\n callback\r\n );\r\n}\r\n\r\n// Identifies where image entities exist within the content\r\nfunction findImageEntities(contentBlock, callback, contentState) {\r\n contentBlock.findEntityRanges(\r\n (character) => {\r\n const entityKey = character.getEntity();\r\n return (\r\n entityKey !== null &&\r\n contentState.getEntity(entityKey).getType() === 'IMAGE'\r\n );\r\n },\r\n callback\r\n );\r\n}\r\n\r\n// Inserts either a split or full new block at the current cursor position\r\nconst insertBreak = (editorState, splitOrBlock) => {\r\n const contentState = editorState.getCurrentContent();\r\n\r\n const splitContentState = Modifier.splitBlock(contentState, editorState.getSelection());\r\n const splitContentStateFinal = (splitOrBlock === \"block\") ?\r\n Modifier.splitBlock(splitContentState, editorState.getSelection()) :\r\n splitContentState;\r\n\r\n let newBlockKey = splitContentStateFinal.getBlockAfter(splitContentStateFinal.selectionBefore.focusKey).key;\r\n\r\n return ({\r\n blockKey: newBlockKey,\r\n editorState: EditorState.push(\r\n editorState,\r\n splitContentStateFinal,\r\n \"insert-fragment\"\r\n )\r\n })\r\n}\r\n\r\n// Takes an editorState and the key of a block, and puts the cursor at the position specified in the block\r\nexport const cursorToBlockPosition = (editorState, blockKey, newPosition) => {\r\n const selectionState = SelectionState.createEmpty();\r\n\r\n const blockSelectionState = selectionState.merge({\r\n anchorKey: blockKey,\r\n anchorOffset: newPosition,\r\n focusKey: blockKey,\r\n focusOffset: newPosition\r\n });\r\n\r\n return (\r\n EditorState.forceSelection(\r\n editorState,\r\n blockSelectionState\r\n )\r\n );\r\n}\r\n\r\n// Adds new text with the provided information and editorState and returns an updated editorState\r\nconst insertText = (editorState, text, style, entityKey) => {\r\n const contentState = editorState.getCurrentContent();\r\n const selection = editorState.getSelection();\r\n\r\n const newContentState = Modifier.insertText(contentState, selection, text, style, entityKey);\r\n const newEditorState = EditorState.push(editorState, newContentState, 'insert-characters');\r\n\r\n return newEditorState;\r\n }\r\n\r\n// Removes the entity from the given editorState's selected content and returns the updated editorState\r\nconst removeEntity = (editorState) => {\r\n let newContentState = Modifier.applyEntity(editorState.getCurrentContent(), editorState.getSelection(), null);\r\n let newEditorState = EditorState.push(editorState, newContentState, 'apply-entity');\r\n\r\n return newEditorState;\r\n}\r\n\r\n// Adds styles to the ranges provided within blocks.\r\n// Block objects should have the format { block (object), start (integer), end (integer) }\r\nconst addStylesToBlockRanges = (editorState, blockObjects, inlineStyle) => {\r\n let newEditorState = editorState;\r\n\r\n if (blockObjects && inlineStyle) {\r\n blockObjects.forEach((blockObject) => {\r\n if( !(blockObject.block.getInlineStyleAt(blockObject.start).toArray().includes(inlineStyle))) {\r\n let oldEditorState = newEditorState;\r\n\r\n const selectionState = SelectionState.createEmpty();\r\n const blockSelectionState = selectionState.merge({\r\n anchorKey: blockObject.block.key,\r\n anchorOffset: blockObject.start,\r\n focusKey: blockObject.block.key,\r\n focusOffset: blockObject.end,\r\n hasFocus: false\r\n });\r\n\r\n newEditorState = RichUtils.toggleInlineStyle(EditorState.forceSelection(\r\n oldEditorState,\r\n blockSelectionState\r\n ),\r\n inlineStyle\r\n );\r\n }\r\n });\r\n }\r\n\r\n return newEditorState;\r\n}\r\n\r\n// Remove this when extra blank lines are cleared out of data - unless a reason to keep this is seen.\r\n// Makes a new EditorState with any empty blocks removed\r\nconst removeBlankBlocks = (editorState) => {\r\n let contentState = editorState.getCurrentContent();\r\n\r\n // Editor will always have 1 block even if empty\r\n if (contentState.getBlocksAsArray().length > 1) {\r\n let newContentBlockArray = [];\r\n\r\n contentState.getBlocksAsArray().forEach((block) => {\r\n if(block.text.length) {\r\n newContentBlockArray.push(block);\r\n }\r\n });\r\n\r\n // New editor must still have at least 1 block\r\n if (newContentBlockArray.length) {\r\n let newContentState = ContentState.createFromBlockArray(newContentBlockArray);\r\n\r\n let newEditorState = EditorState.push(editorState, newContentState, 'remove-range');\r\n\r\n return newEditorState;\r\n }\r\n }\r\n\r\n return editorState;\r\n}\r\n\r\n// Takes the editor state and the image information and inserts the image's entity\r\nconst addImageEntity = (editorState, imageUrl, imageAltText) => {\r\n const contentStateWithEntity = editorState.getCurrentContent().createEntity('IMAGE', 'IMMUTABLE', { src: imageUrl, alt: imageAltText });\r\n\r\n const entityKey = contentStateWithEntity.getLastCreatedEntityKey();\r\n\r\n return insertText(editorState, ' ', null, entityKey);\r\n}\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport InputError from '../../../errors/InputError';\r\nimport TextInput from '../text-input/TextInput';\r\nimport './ToggleInput.css';\r\n\r\nexport default class ToggleInput extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n selectedId: (this.props.selectedId) ? this.props.selectedId : null\r\n }\r\n this.arrayOfVisibleInputs = []\r\n this.valuesObj = {}\r\n }\r\n\r\n // Default radio select\r\n componentWillReceiveProps(newProps) {\r\n if ('selectedId' in newProps && newProps.selectedId !== undefined && newProps.selectedId !== this.state.selectedId) {\r\n this.setState({ selectedId: newProps.selectedId });\r\n }\r\n }\r\n\r\n // radio change\r\n onChange = (event, radioId) => {\r\n this.setState({ selectedId: radioId });\r\n if (this.props.onChange) {\r\n this.props.onChange(event, radioId);\r\n }\r\n }\r\n\r\n // this is handled when the input-list form submits\r\n // on form submit, return an object based on the visible inputs\r\n // if it's empty return an error to the form\r\n getValue = () => {\r\n let inputsObj = {}\r\n for (let key in this.valuesObj) {\r\n if (this.ArrayOfVisibleInputs.find(val => val === key)) {\r\n inputsObj[key] = this.valuesObj[key]\r\n }\r\n\r\n // set nan vals to 0\r\n if (isNaN(this.valuesObj[key]))\r\n inputsObj[key] = 0;\r\n }\r\n\r\n let allAreZero = Object.values(inputsObj).every(val => val === 0)\r\n let isEmptyObject = (this.props.required && Object.keys(inputsObj).length === 0 && inputsObj.constructor === Object)\r\n\r\n if (this.props.required && (isEmptyObject || allAreZero)) {\r\n throw new InputError(this.props.label + \" is Required\", inputsObj);\r\n }\r\n\r\n return inputsObj\r\n }\r\n\r\n // each time the text changes, update valuesObj with event value (number)\r\n handleTextChange = (event) => {\r\n this.ArrayOfVisibleInputs.forEach((input) => {\r\n if (input === event.target.id) {\r\n this.valuesObj[input] = event.target.valueAsNumber;\r\n }\r\n })\r\n\r\n this.setState(this.valuesObj);\r\n }\r\n\r\n render() {\r\n\r\n // Required and Error Messages\r\n const requiredFieldIndicator = (this.props.required)\r\n ? \r\n : null;\r\n\r\n let errorMessage = (this.props.errorMessage)\r\n ? \r\n {this.props.errorMessage}\r\n \r\n : null\r\n\r\n // Radio button elements\r\n const radioButtons = this.props.radioProps.map((radioProp, index) => {\r\n let radio = (\r\n this.onChange(event, radioProp.id)}\r\n />\r\n );\r\n\r\n let label = ();\r\n\r\n return (\r\n
    {radio}{label}
    \r\n );\r\n })\r\n\r\n // Input text elements\r\n const inputs = this.props.selectInputList.map((input) => {\r\n\r\n if (this.state.selectedId === input.id) {\r\n if (input.multiInputs) {\r\n this.ArrayOfVisibleInputs = []\r\n return input.multiInputs.map((input2) => {\r\n this.ArrayOfVisibleInputs.push(input2.id)\r\n return (\r\n this.handleTextChange(event)} />)\r\n });\r\n }\r\n else {\r\n this.ArrayOfVisibleInputs = [input.id];\r\n return (\r\n this.handleTextChange(event)}\r\n />)\r\n }\r\n }\r\n return null;\r\n });\r\n\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n\r\n {inputs}\r\n\r\n
    \r\n
    \r\n {this.props.legend}\r\n {radioButtons}\r\n
    \r\n
    \r\n\r\n {errorMessage}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nToggleInput.propTypes = {\r\n className: PropTypes.string,\r\n errorMessage: PropTypes.string,\r\n label: PropTypes.string.isRequired,\r\n onChange: PropTypes.func,\r\n radioProps: PropTypes.arrayOf(PropTypes.shape({\r\n checked: PropTypes.bool,\r\n id: PropTypes.string,\r\n label: PropTypes.string,\r\n })).isRequired,\r\n required: PropTypes.bool,\r\n selectedId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n selectInputList: PropTypes.arrayOf(PropTypes.shape({\r\n id: PropTypes.string,\r\n value: PropTypes.string,\r\n numberMin: PropTypes.string,\r\n numberStep: PropTypes.string,\r\n multiInputs: PropTypes.arrayOf(PropTypes.shape({\r\n id: PropTypes.string,\r\n placeholderText: PropTypes.string,\r\n value: PropTypes.string,\r\n numberMin: PropTypes.string,\r\n numberStep: PropTypes.string,\r\n }))\r\n })).isRequired\r\n}\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport TextInput from '../text-input/TextInput';\r\nimport classNames from 'classnames';\r\nimport InputError from '../../../errors/InputError';\r\nimport compareObjectKeys from '../../../functions/compareObjectKeys';\r\nimport './Typeahead.css';\r\n\r\nexport default class Typeahead extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n allOptions: [],\r\n inputValue: \"\",\r\n selectedOption: \"\",\r\n selectedOptions: [],\r\n optionDisplay: false,\r\n listAllViewActive: false\r\n };\r\n }\r\n\r\n // Takes the options provided, translates into a standard object format, and sets as the state variable passed\r\n setOptions = (newOptions, stateVariable) => {\r\n let options = newOptions.filter((option, filterIndex) => {\r\n if (option &&\r\n (typeof option !== \"object\" ||\r\n !(option.id === undefined &&\r\n option.text === undefined\r\n )\r\n )) {\r\n let foundIndex = (typeof option === \"object\") ?\r\n newOptions.findIndex(otherOption => otherOption.id === option.id) :\r\n newOptions.findIndex(otherOption => otherOption === option);\r\n\r\n return (foundIndex === filterIndex);\r\n }\r\n\r\n return false;\r\n })\r\n .map((option) => {\r\n const id = (typeof option === \"object\") ?\r\n option.id :\r\n option;\r\n\r\n const text = (typeof option === \"object\") ?\r\n option.text :\r\n option;\r\n\r\n const selected = (stateVariable !== \"selectedOptions\") ? false : undefined;\r\n\r\n return { id, text, selected };\r\n });\r\n\r\n let newState = {};\r\n newState[stateVariable] = options;\r\n\r\n if (stateVariable === \"selectedOptions\") {\r\n this.selectOptions(options);\r\n }\r\n\r\n this.setState(newState);\r\n\r\n return options;\r\n }\r\n\r\n // Sees if the option type passed into the Typeahead was a string, and makes the option a string if needed\r\n formatOption = (option) => {\r\n return (this.props.options && typeof this.props.options[0] === \"string\") ?\r\n option.id :\r\n option;\r\n }\r\n\r\n // Shows and hides the filter option dropdown box\r\n toggleOptionDisplay = (calledState) => {\r\n this.setState((prevState) => {\r\n let optionDisplay;\r\n\r\n // ensures that when the options are open clicks within the component don't close them\r\n if (calledState === \"click\" && prevState.optionDisplay) {\r\n optionDisplay = prevState.optionDisplay;\r\n }\r\n else if (calledState === \"blur\") {\r\n optionDisplay = false;\r\n }\r\n else if (calledState === \"focus\") {\r\n optionDisplay = true;\r\n }\r\n else {\r\n optionDisplay = !prevState.optionDisplay;\r\n }\r\n\r\n return { optionDisplay }\r\n });\r\n }\r\n\r\n // Creates the JSX for the option list to display when dropped down\r\n buildOptionList = () => {\r\n let optionListItems;\r\n\r\n optionListItems = this.state.allOptions\r\n .filter((option) => (!option.selected && option.text.toLowerCase().indexOf(this.state.inputValue.toLowerCase()) !== -1));\r\n\r\n if (!optionListItems.length) {\r\n optionListItems =
  • No results found.
  • ;\r\n }\r\n else {\r\n if (this.props.alphabetize) {\r\n optionListItems = optionListItems.sort(compareObjectKeys(\"text\", true));\r\n }\r\n\r\n optionListItems = optionListItems\r\n .map((option) =>\r\n this.selectOptions([option])}>\r\n {option.text}\r\n \r\n );\r\n }\r\n\r\n let optionListDisplayClass = classNames('option-list', this.props.className, {\r\n 'hide-options': !this.state.optionDisplay,\r\n 'show-options': this.state.optionDisplay\r\n });\r\n\r\n return (\r\n
      \r\n {optionListItems}\r\n
    \r\n );\r\n }\r\n\r\n buildListAllView = () => {\r\n const allOptions = this.state.allOptions\r\n .map((option) =>\r\n this.selectOptions([option])}>\r\n {option.text}\r\n )\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n

    All Activities

    \r\n \r\n
    \r\n
    \r\n {allOptions}\r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n\r\n buildInput = () => {\r\n return ( this.narrowFilters(event)}\r\n placeholderText={this.props.placeholderText}\r\n />);\r\n }\r\n\r\n openListAllView() {\r\n this.setState({ listAllViewActive: true })\r\n }\r\n\r\n closeListAllView() {\r\n this.setState({ listAllViewActive: false })\r\n }\r\n\r\n narrowFilters = (event) => {\r\n this.setState({ inputValue: event.target.value });\r\n this.props.onChange(event.target.value);\r\n }\r\n\r\n\r\n // Updates state to reflect newly chosen filters and calls function passed in for filterValueChange\r\n selectOptions = (selectedOptions) => {\r\n if (selectedOptions && selectedOptions.length) {\r\n this.setState({ optionDisplay: false })\r\n this.setState({ selectedOption: selectedOptions[0].text })\r\n this.props.onChange(selectedOptions[0].text);\r\n }\r\n }\r\n\r\n // Updates state to reflect newly unchosen filters and calls function passed in for filterValueChange\r\n unselectOptions = (unselectedOptions) => {\r\n if (unselectedOptions && unselectedOptions.length) {\r\n this.setState((prevState) => {\r\n let allOptions = prevState.allOptions;\r\n let selectedOptions = prevState.selectedOptions;\r\n\r\n unselectedOptions.forEach((unselectedOption) => {\r\n selectedOptions = selectedOptions.filter((option) => option.id !== unselectedOption.id);\r\n\r\n let optionObject = allOptions.find((option) => option.id === unselectedOption.id);\r\n\r\n if (optionObject) {\r\n optionObject.selected = false;\r\n }\r\n });\r\n\r\n if (this.props.filterValueChange) {\r\n this.props.filterValueChange(selectedOptions.map((option) => this.formatOption(option)));\r\n }\r\n\r\n return { selectedOptions, allOptions };\r\n });\r\n }\r\n }\r\n\r\n // Gets the values of the filter input, and potentially returns an error if applicable\r\n getValue = () => {\r\n // if options were passed in as an array of strings, give an array of strings back - it's only polite.\r\n let selectedOptions = (this.props.options && typeof this.props.options[0] === \"string\") ?\r\n this.state.selectedOptions.map((option) => option.id) :\r\n this.state.selectedOptions;\r\n\r\n if (this.props.required && !selectedOptions.length && !this.state.selectedOption) {\r\n throw new InputError(this.props.label + \" is Required\", selectedOptions);\r\n }\r\n\r\n return this.state.selectedOption\r\n }\r\n\r\n componentDidMount() {\r\n this.setOptions(this.props.options, \"allOptions\");\r\n this.setOptions(this.props.existingContentArray, \"selectedOptions\");\r\n }\r\n\r\n\r\n componentWillReceiveProps(newProps) {\r\n if (newProps.options !== this.props.options) {\r\n let newAllOptions = this.setOptions(newProps.options, \"allOptions\");\r\n\r\n // Check if there are options that need to be unselected because they're no longer in the options list, and unselect them.\r\n if (this.state.selectedOptions) {\r\n let unselectedOptions = [];\r\n this.state.selectedOptions.forEach((selectedOption) => {\r\n let existsInArray = newAllOptions.find((option) => option.id === selectedOption.id);\r\n\r\n if (!existsInArray) {\r\n unselectedOptions.push(selectedOption);\r\n }\r\n })\r\n\r\n if (unselectedOptions.length) {\r\n this.unselectOptions(unselectedOptions);\r\n }\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n let verticalSpacingClass = this.props.verticalSpacing === \"compact\" ? \"field--compact\" : \"field\";\r\n\r\n const label = (this.props.label) ?\r\n :\r\n null;\r\n\r\n const requiredFieldIndicator = (this.props.required) ?\r\n :\r\n null;\r\n\r\n let errorMessage = (this.props.errorMessage) ?\r\n \r\n {this.props.errorMessage}\r\n :\r\n null;\r\n\r\n let input = this.buildInput();\r\n let optionList = this.buildOptionList();\r\n\r\n let inputDisplay = (this.props.isEditable) ?\r\n \r\n {label}\r\n {requiredFieldIndicator}\r\n this.toggleOptionDisplay(\"focus\")}\r\n onBlur={() => this.toggleOptionDisplay(\"blur\")}\r\n >\r\n {input}\r\n {optionList}\r\n
    \r\n {errorMessage}\r\n :\r\n \r\n {label}\r\n \r\n {this.state.selectedOptions.map((option) => option.text).join(\", \")}\r\n \r\n ;\r\n\r\n // logic is correct. Not triggering a re-render\r\n const listAllView = (this.props.hasListAllView && this.state.listAllViewActive) ? this.buildListAllView() : null;\r\n\r\n return (\r\n
    \r\n {inputDisplay}\r\n {listAllView}\r\n
    this.openListAllView()}>See full list of activities
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nTypeahead.defaultProps = {\r\n alphabetize: false,\r\n existingContentArray: [],\r\n isEditable: true,\r\n}\r\n\r\nTypeahead.propTypes = {\r\n alphabetize: PropTypes.bool,\r\n className: PropTypes.string,\r\n errorMessage: PropTypes.string,\r\n existingContentArray: PropTypes.oneOfType([\r\n PropTypes.arrayOf(PropTypes.string),\r\n PropTypes.arrayOf(PropTypes.object)\r\n ]),\r\n filterValueChange: PropTypes.func,\r\n hasListAllView: PropTypes.bool,\r\n id: PropTypes.string.isRequired,\r\n isEditable: PropTypes.bool,\r\n label: PropTypes.string,\r\n options: PropTypes.oneOfType([\r\n PropTypes.arrayOf(PropTypes.string),\r\n PropTypes.arrayOf(PropTypes.object)\r\n ]).isRequired,\r\n onChange: PropTypes.func,\r\n placeholderText: PropTypes.string,\r\n required: PropTypes.bool,\r\n verticalSpacing: PropTypes.string\r\n}\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport ArrangeableListInput from '../arrangeable-list-input/ArrangeableListInput';\r\nimport ArrangeableFilterInput from '../arrangeable-filter-input/ArrangeableFilterInput';\r\nimport ButtonInput from '../button-input/ButtonInput';\r\nimport ChartInput from '../chart-input/ChartInput';\r\nimport CheckboxInput from '../checkbox-input/CheckboxInput';\r\nimport CheckboxInputList from '../checkbox-input-list/CheckboxInputList';\r\nimport DateRangeFilterInput from '../date-range-filter-input/DateRangeFilterInput';\r\nimport FeaturedMediaInput from '../featured-media-input/FeaturedMediaInput';\r\nimport FilterInput from '../filter-input/FilterInput';\r\nimport GridInput from '../grid-input/GridInput';\r\nimport { Grid, GridItem } from '../grid/Grid';\r\nimport ImageInput from '../image-input/ImageInput';\r\nimport InputUpload from '../input-upload/InputUpload';\r\nimport LinkInput from '../link-input/LinkInput';\r\nimport RadioInputList from '../radio-input-list/RadioInputList';\r\nimport RichTextEditor from '../rich-text-editor/RichTextEditor';\r\nimport SelectBox from '../select-box/SelectBox';\r\nimport TextArea from '../text-area/TextArea';\r\nimport TextInput from '../text-input/TextInput';\r\nimport ToggleInput from '../toggle-input/ToggleInput';\r\nimport Typeahead from '../typeahead/Typeahead';\r\nimport VideoInput from '../video-input/VideoInput';\r\nimport classNames from 'classnames';\r\nimport './InputList.css';\r\n\r\nexport default class InputList extends Component {\r\n getValues = (passedInputs) => {\r\n let values = {};\r\n let errors = [];\r\n\r\n let inputs = (passedInputs) ?\r\n passedInputs :\r\n this.props.inputs;\r\n\r\n inputs.forEach((input, index) => {\r\n // For columnized input list\r\n if (input) {\r\n if (Array.isArray(input)) {\r\n let columnsValues = this.getValues(input);\r\n values = Object.assign(values, columnsValues.values);\r\n errors = [...errors, ...columnsValues.errors];\r\n }\r\n // For fieldset input list\r\n else if ('fieldsetLegend' in input) {\r\n let fieldsetValues = this.getValues(input.inputs);\r\n values = Object.assign(values, fieldsetValues.values);\r\n errors = [...errors, ...fieldsetValues.errors];\r\n }\r\n else if (input.type !== \"button\" && input.type !== \"icon-button\" && input.type !== \"submit\" && input.type !== \"static\") {\r\n try {\r\n values[input.id] = this[input.id].getValue();\r\n }\r\n catch (error) {\r\n values[input.id] = error.value;\r\n errors.push(error.message);\r\n }\r\n }\r\n }\r\n });\r\n\r\n return {\r\n id: this.props.formId,\r\n errors,\r\n values\r\n };\r\n }\r\n\r\n // Takes the input object and key's name and returns the input built out of it based on the type\r\n convertToElement = (input, keyName) => {\r\n keyName = input.key || keyName;\r\n\r\n switch (input.type) {\r\n case \"text\":\r\n case \"password\":\r\n case \"search\":\r\n case \"number\":\r\n case \"date\":\r\n return (\r\n { this[input.id] = instance; }}\r\n required={input.required}\r\n requiredError={input.requiredError}\r\n trim={input.trim}\r\n type={input.type}\r\n validateOnBlur={input.validateOnBlur}\r\n validateOnChange={input.validateOnChange}\r\n validationErrorClass={input.validationErrorClass}\r\n verticalSpacing={input.verticalSpacing}\r\n />\r\n );\r\n case \"toggle-input\":\r\n return (\r\n { this[input.id] = instance; }}\r\n radioProps={input.radioProps} />\r\n )\r\n case \"arrangeable-list\":\r\n return (\r\n { this[input.id] = instance; }}\r\n label={input.label}\r\n verticalSpacing={input.verticalSpacing}\r\n />\r\n );\r\n case \"arrangeable-filter\":\r\n return (\r\n { this[input.id] = instance; }}\r\n label={input.label}\r\n verticalSpacing={input.verticalSpacing}\r\n placeholderText={input.placeholderText}\r\n />\r\n );\r\n case \"chart\":\r\n return (\r\n { this[input.id] = instance; }}\r\n verticalSpacing={input.verticalSpacing}\r\n />\r\n );\r\n case \"checkbox\":\r\n return (\r\n { this[input.id] = instance; }}\r\n required={input.required}\r\n requiredFieldIndicatorStyle={input.requiredFieldIndicatorStyle}\r\n value={input.value}\r\n verticalSpacing={input.verticalSpacing}\r\n />\r\n );\r\n case \"checkbox-list\":\r\n return (\r\n { this[input.id] = instance; }}\r\n required={input.required}\r\n requiredFieldIndicatorStyle={input.requiredFieldIndicatorStyle}\r\n selectedIds={input.selectedIds}\r\n verticalSpacing={input.verticalSpacing}\r\n />\r\n );\r\n case \"grid\":\r\n return (\r\n { this[input.id] = instance; }}\r\n verticalSpacing={input.verticalSpacing}\r\n />\r\n );\r\n case \"radio-list\":\r\n return (\r\n { this[input.id] = instance; }}\r\n required={input.required}\r\n selectedId={input.selectedId}\r\n verticalSpacing={input.verticalSpacing}\r\n />\r\n );\r\n case \"select\":\r\n return (\r\n { this[input.id] = instance; }}\r\n required={input.required}\r\n requiredError={input.requiredError}\r\n validateOnBlur={input.validateOnBlur}\r\n validationErrorClass={input.validationErrorClass}\r\n verticalSpacing={input.verticalSpacing}\r\n />\r\n );\r\n case \"link\":\r\n return (\r\n { this[input.id] = instance; }}\r\n required={input.required}\r\n verticalSpacing={input.verticalSpacing}\r\n />\r\n );\r\n case \"image\":\r\n return (\r\n { this[input.id] = instance; }}\r\n showInputsInReadOnly={input.showInputsInReadOnly}\r\n verticalSpacing={input.verticalSpacing}\r\n />\r\n );\r\n case \"video\":\r\n return (\r\n { this[input.id] = instance; }}\r\n showInputsInReadOnly={input.showInputsInReadOnly}\r\n verticalSpacing={input.verticalSpacing}\r\n />\r\n );\r\n case \"featured-media\":\r\n return (\r\n { this[input.id] = instance; }}\r\n required={input.required}\r\n verticalSpacing={input.verticalSpacing}\r\n />\r\n );\r\n case \"filter\":\r\n return (\r\n { this[input.id] = instance; }}\r\n required={input.required}\r\n selectLimit={input.selectLimit}\r\n verticalSpacing={input.verticalSpacing}\r\n />\r\n );\r\n case \"typeahead\":\r\n return (\r\n { this[input.id] = instance; }}\r\n required={input.required}\r\n />\r\n );\r\n case \"icon-button\":\r\n case \"button\":\r\n case \"submit\":\r\n return (\r\n { this[input.id] = instance; }}\r\n verticalSpacing={input.verticalSpacing}\r\n requireConfirmation={input.requireConfirmation}\r\n type={input.type}\r\n value={input.value}\r\n />\r\n );\r\n case \"rich-text\":\r\n return (\r\n { this[input.id] = instance; }}\r\n required={input.required}\r\n textDirection={input.textDirection}\r\n verticalSpacing={input.verticalSpacing}\r\n />\r\n );\r\n case \"text-area\":\r\n return (\r\n { this[input.id] = instance; }}\r\n required={input.required}\r\n requiredError={input.requiredError}\r\n useDiv={input.useDiv}\r\n verticalSpacing={input.verticalSpacing}\r\n validateOnBlur={input.validateOnBlur}\r\n validationErrorClass={input.validationErrorClass}\r\n />\r\n );\r\n case \"input-upload\":\r\n return (\r\n { this[input.id] = instance; }}\r\n verticalSpacing={input.verticalSpacing}\r\n />\r\n );\r\n case \"date-range-filter\":\r\n return (\r\n { this[input.id] = instance; }}\r\n verticalSpacing={input.verticalSpacing}\r\n />\r\n );\r\n case \"static\":\r\n return ({input.content});\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n // Takes a column of inputs and creates a GridItem containing the inputs from within that column.\r\n buildColumn = (column, index) => {\r\n return \r\n {\r\n column.reduce((inputElements, input, index) => {\r\n if (input) {\r\n // When the input object isn't a fieldset\r\n const isFieldset = ('fieldsetLegend' in input);\r\n\r\n if (!isFieldset) {\r\n inputElements.push(this.convertToElement(input, index));\r\n }\r\n\r\n // When the input object is a fieldset\r\n else {\r\n // Creates a fieldset and recursively calls handleInputs on the inputs field within it\r\n if (isFieldset) {\r\n const requiredFieldIndicator = input.required\r\n ? \r\n : null\r\n\r\n inputElements.push(\r\n
    \r\n { input.fieldsetLegend ? {requiredFieldIndicator}{requiredFieldIndicator ? \" \" : \"\"}{input.fieldsetLegend} : null }\r\n \r\n {this.handleInputs(input.inputs)}\r\n \r\n
    \r\n )\r\n }\r\n }\r\n }\r\n return inputElements;\r\n }, [])\r\n }\r\n
    ;\r\n }\r\n\r\n // Builds columns for each column array in the input list data, or just one column if the data is not columnized\r\n handleInputs = (inputs) => {\r\n // When the content is provided as one column of objects so is not split into sub-arrays\r\n if (!Array.isArray(inputs[0])) {\r\n return this.buildColumn(inputs);\r\n }\r\n // When the content is provided as sub-arrays for columnizing\r\n else {\r\n return inputs.map((column, index) => {\r\n return this.buildColumn(column, index);\r\n });\r\n }\r\n }\r\n\r\n onSubmit = (event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n let fieldValues = this.getValues();\r\n\r\n this.props.onSubmit(fieldValues);\r\n }\r\n\r\n render() {\r\n let gridItemArray = this.handleInputs(this.props.inputs);\r\n\r\n let formClasses = classNames(\r\n 'input-list',\r\n {\r\n 'inline-list': this.props.isInlineList\r\n },\r\n this.props.className,\r\n this.props.verticalSpacing\r\n );\r\n\r\n let errorMessage = (this.props.errorMessage) ?\r\n \r\n {this.props.errorMessage}\r\n :\r\n null;\r\n\r\n return (\r\n \r\n \r\n {gridItemArray}\r\n \r\n {errorMessage}\r\n \r\n );\r\n }\r\n}\r\n\r\nInputList.defaultProps = {\r\n isEditable: true,\r\n isInlineList: false\r\n};\r\n\r\nInputList.propTypes = {\r\n className: PropTypes.string,\r\n formId: PropTypes.string,\r\n gridColumns: PropTypes.oneOf([1, 2, 3, 4, 5, 6]),\r\n inputs: PropTypes.oneOfType([\r\n PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.object)),\r\n PropTypes.arrayOf(PropTypes.object)\r\n ]).isRequired,\r\n errorMessage: PropTypes.string,\r\n isEditable: PropTypes.bool,\r\n isInlineList: PropTypes.bool,\r\n isNestedGrid: PropTypes.bool,\r\n onSubmit: PropTypes.func\r\n}\r\n","// Because these are used both as radio button (or similar) values and\r\n// as strigns displayed to the user.\r\nexport const TO_MY_ADDRESS = \"To my address\";\r\nexport const TO_PATIENTS_ADDRESS = \"To the patient’s address\";\r\nexport const SOMEWHERE_ELSE = \"Somewhere else\";\r\n\r\nexport const ME = \"Me\";\r\nexport const THE_PATIENT = \"The patient\";\r\nexport const SOMEONE_ELSE = \"Someone else\";\r\n\r\nexport const FOREIGN_LANGUAGE_INTERPRETATION = \"Foreign language interpretation\";\r\nexport const ASL = \"ASL\";\r\n\r\nexport const NOT_PROVIDED = \"(Not provided)\";\r\n","import * as routes from '../../constants/routes';\r\nimport * as strings from '../constants/strings';\r\n\r\nexport function nextPage(currentPage = null, state) {\r\n currentPage = currentPage || window.location.pathname;\r\n\r\n switch (currentPage) {\r\n case routes.WEB_APPOINTMENT_WHAT_TO_EXPECT_PAGE:\r\n return routes.WEB_APPOINTMENT_WHO_FOR_PAGE;\r\n\r\n case routes.WEB_APPOINTMENT_WHO_FOR_PAGE:\r\n return routes.WEB_APPOINTMENT_RECEIVED_CARE_PAGE;\r\n\r\n case routes.WEB_APPOINTMENT_RECEIVED_CARE_PAGE:\r\n // For state.forMe, null or undefined is not the same as false.\r\n if (state.forMe === false && typeof state.patientSeenRecently === \"boolean\") {\r\n return routes.WEB_APPOINTMENT_CONTACT_INFO_PAGE;\r\n }\r\n else if (state.forMe && state.patientSeenRecently === true) {\r\n return routes.WEB_APPOINTMENT_EXISTING_PATIENT_INFO_PAGE;\r\n }\r\n else if (state.forMe && state.patientSeenRecently === false) {\r\n return routes.WEB_APPOINTMENT_NEW_PATIENT_INFO_PAGE;\r\n }\r\n break;\r\n\r\n case routes.WEB_APPOINTMENT_CONTACT_INFO_PAGE:\r\n if (state.patientSeenRecently === true) {\r\n return routes.WEB_APPOINTMENT_EXISTING_PATIENT_INFO_PAGE;\r\n }\r\n else if (state.patientSeenRecently === false) {\r\n return routes.WEB_APPOINTMENT_NEW_PATIENT_INFO_PAGE;\r\n }\r\n break;\r\n\r\n case routes.WEB_APPOINTMENT_EXISTING_PATIENT_INFO_PAGE:\r\n return routes.WEB_APPOINTMENT_APPOINTMENT_INFO1_PAGE;\r\n\r\n case routes.WEB_APPOINTMENT_NEW_PATIENT_INFO_PAGE:\r\n return routes.WEB_APPOINTMENT_NEW_PATIENT_ADDRESS_PAGE;\r\n\r\n case routes.WEB_APPOINTMENT_NEW_PATIENT_ADDRESS_PAGE:\r\n return routes.WEB_APPOINTMENT_APPOINTMENT_INFO1_PAGE;\r\n\r\n case routes.WEB_APPOINTMENT_APPOINTMENT_INFO1_PAGE:\r\n return routes.WEB_APPOINTMENT_APPOINTMENT_INFO2_PAGE;\r\n\r\n case routes.WEB_APPOINTMENT_APPOINTMENT_INFO2_PAGE:\r\n return routes.WEB_APPOINTMENT_APPOINTMENT_PREFERENCES_PAGE;\r\n\r\n case routes.WEB_APPOINTMENT_APPOINTMENT_PREFERENCES_PAGE:\r\n return routes.WEB_APPOINTMENT_APPOINTMENT_INFO_PROVIDER;\r\n\r\n case routes.WEB_APPOINTMENT_APPOINTMENT_INFO_PROVIDER:\r\n return routes.WEB_APPOINTMENT_APPOINTMENT_INFO_DAY_TIME;\r\n\r\n case routes.WEB_APPOINTMENT_APPOINTMENT_INFO_DAY_TIME:\r\n return routes.WEB_APPOINTMENT_PAYMENT_METHOD;\r\n\r\n case routes.WEB_APPOINTMENT_PAYMENT_METHOD:\r\n if (state.paymentMethod && state.paymentMethod === \"insurance\") {\r\n return routes.WEB_APPOINTMENT_INSURANCE\r\n }\r\n else if (state.paymentMethod && state.paymentMethod === \"out-of-pocket\") {\r\n return routes.WEB_APPOINTMENT_OUT_OF_POCKET;\r\n }\r\n break;\r\n\r\n case routes.WEB_APPOINTMENT_INSURANCE:\r\n if (state.patientSeenRecently === true) {\r\n if (state.insurance.whereToSend === strings.TO_MY_ADDRESS) {\r\n if (state.forMe === true) {\r\n return routes.WEB_APPOINTMENT_REVIEW;\r\n }\r\n else {\r\n return routes.WEB_APPOINTMENT_BILLING_ADDRESS;\r\n }\r\n }\r\n else if (state.insurance.whereToSend === strings.TO_PATIENTS_ADDRESS) {\r\n return routes.WEB_APPOINTMENT_REVIEW;\r\n }\r\n else if (state.insurance.whereToSend === strings.SOMEWHERE_ELSE) {\r\n return routes.WEB_APPOINTMENT_BILLING_ADDRESS;\r\n }\r\n }\r\n else if (state.patientSeenRecently === false) {\r\n if (state.insurance.policyHolder.relation === strings.ME || state.insurance.policyHolder.relation === strings.THE_PATIENT) {\r\n return routes.WEB_APPOINTMENT_BILLING;\r\n }\r\n else if (typeof state.insurance.policyHolder.relation === \"string\" && state.insurance.policyHolder.relation.length > 0) {\r\n return routes.WEB_APPOINTMENT_POLICY_HOLDER;\r\n }\r\n }\r\n break;\r\n\r\n case routes.WEB_APPOINTMENT_BILLING:\r\n if (state.forMe) {\r\n if (state.insurance.whereToSend === strings.TO_MY_ADDRESS) {\r\n return routes.WEB_APPOINTMENT_REVIEW;\r\n }\r\n else if (state.insurance.whereToSend === strings.SOMEWHERE_ELSE) {\r\n return routes.WEB_APPOINTMENT_BILLING_ADDRESS;\r\n }\r\n }\r\n else if (state.forMe === false) { // specifically false, as opposed to null or undefined.\r\n if (state.insurance.whereToSend === strings.TO_MY_ADDRESS || state.insurance.whereToSend === strings.SOMEWHERE_ELSE) {\r\n return routes.WEB_APPOINTMENT_BILLING_ADDRESS;\r\n }\r\n else if (state.insurance.whereToSend === strings.TO_PATIENTS_ADDRESS) {\r\n return routes.WEB_APPOINTMENT_REVIEW;\r\n }\r\n }\r\n break;\r\n\r\n case routes.WEB_APPOINTMENT_POLICY_HOLDER:\r\n return routes.WEB_APPOINTMENT_BILLING;\r\n\r\n case routes.WEB_APPOINTMENT_BILLING_ADDRESS:\r\n return routes.WEB_APPOINTMENT_REVIEW;\r\n\r\n case routes.WEB_APPOINTMENT_OUT_OF_POCKET:\r\n return routes.WEB_APPOINTMENT_REVIEW;\r\n\r\n case routes.WEB_APPOINTMENT_REVIEW:\r\n if (state.message){\r\n return routes.WEB_APPOINTMENT_ERROR_REVIEW;\r\n }\r\n if (state.paymentMethod === \"out-of-pocket\") {\r\n let isFlorida = state.appointment.location.includes(\"Florida\");\r\n if (isFlorida) {\r\n return routes.WEB_APPOINTMENT_THANK_YOU_PFA;\r\n }\r\n else {\r\n return routes.WEB_APPOINTMENT_PFA_APPOINTMENT;\r\n }\r\n }\r\n else {\r\n return routes.WEB_APPOINTMENT_THANK_YOU_INSURANCE;\r\n }\r\n \r\n case routes.WEB_APPOINTMENT_PFA_APPOINTMENT:\r\n return routes.WEB_APPOINTMENT_THANK_YOU_PFA_APPT;\r\n\r\n case routes.WEB_APPOINTMENT_THANK_YOU_PFA_APPT:\r\n return routes.WEB_APPOINTMENT_WHO_FOR_PAGE;\r\n\r\n case routes.WEB_APPOINTMENT_THANK_YOU_PFA:\r\n return routes.WEB_APPOINTMENT_WHO_FOR_PAGE;\r\n\r\n case routes.WEB_APPOINTMENT_THANK_YOU_INSURANCE:\r\n return routes.WEB_APPOINTMENT_WHO_FOR_PAGE;\r\n \r\n case routes.WEB_APPOINTMENT_ERROR_REVIEW:\r\n if (state.message){\r\n // Redirect to the what to expect page\r\n return routes.WEB_APPOINTMENT_WHAT_TO_EXPECT_PAGE;\r\n }\r\n if (state.paymentMethod === \"out-of-pocket\") {\r\n let isFlorida = state.appointment.location.includes(\"Florida\");\r\n if (isFlorida) {\r\n return routes.WEB_APPOINTMENT_THANK_YOU_PFA;\r\n }\r\n else {\r\n return routes.WEB_APPOINTMENT_PFA_APPOINTMENT;\r\n }\r\n }\r\n else {\r\n return routes.WEB_APPOINTMENT_THANK_YOU_INSURANCE;\r\n } \r\n\r\n default:\r\n return currentPage;\r\n }\r\n return currentPage;\r\n}\r\n","import PropTypes from 'prop-types';\r\n\r\nexport const defaultContact = {\r\n over18: false,\r\n relation: \"\",\r\n firstName: \"\",\r\n lastName: \"\",\r\n email: \"\",\r\n phone: \"\"\r\n};\r\n\r\nexport const contactProptype = PropTypes.shape({\r\n over18: PropTypes.bool,\r\n relation: PropTypes.string,\r\n firstName: PropTypes.string,\r\n lastName: PropTypes.string,\r\n email: PropTypes.string,\r\n phone: PropTypes.string\r\n});\r\n\r\nexport const defaultPatient = {\r\n firstName: \"\",\r\n lastName: \"\",\r\n dob: \"\",\r\n gender: \"\",\r\n maritalStatus: \"\",\r\n ssn: \"\",\r\n address1: \"\",\r\n address2: \"\",\r\n city: \"\",\r\n state: \"\",\r\n zip: \"\",\r\n email: \"\",\r\n phone: \"\"\r\n};\r\n\r\nexport const patientPropType = PropTypes.shape({\r\n firstName: PropTypes.string,\r\n lastName: PropTypes.string,\r\n dob: PropTypes.string,\r\n gender: PropTypes.string,\r\n maritalStatus: PropTypes.string,\r\n ssn: PropTypes.string,\r\n address1: PropTypes.string,\r\n address2: PropTypes.string,\r\n city: PropTypes.string,\r\n state: PropTypes.string,\r\n zip: PropTypes.string,\r\n email: PropTypes.string,\r\n phone: PropTypes.string\r\n})\r\n\r\nexport const defaultAppointment = {\r\n reason: \"\",\r\n diagnosis: \"\",\r\n department: \"\",\r\n location: \"\",\r\n provider: \"\",\r\n type: \"\",\r\n day: 0, // Bitmapped, Monday=1... Friday=16, no preferrence=0\r\n time: 0, // Bitmapped, AM=1... PM=2, no preferrence=0\r\n translationInterpretationServices: {\r\n needServices: false,\r\n whichService: \"\",\r\n language: \"\"\r\n },\r\n referringPhysician: {\r\n haveReferringPhys: false,\r\n firstName: \"\",\r\n lastName: \"\",\r\n phone: \"\"\r\n }\r\n};\r\n\r\nexport const appointmentProptype = PropTypes.shape({\r\n reason: PropTypes.string,\r\n diagnosis: PropTypes.string,\r\n provider: PropTypes.string,\r\n department: PropTypes.string,\r\n location: PropTypes.string,\r\n type: PropTypes.string,\r\n day: PropTypes.number, // Bitmapped, Monday=1... Friday=16, no preferrence=0\r\n time: PropTypes.number, // Bitmapped, AM=1... PM=2, no preferrence=0\r\n translationInterpretationServices: PropTypes.shape({\r\n needServices: PropTypes.bool,\r\n whichService: PropTypes.string,\r\n language: PropTypes.string\r\n }),\r\n referringPhysician: PropTypes.shape({\r\n haveReferringPhys: PropTypes.bool,\r\n firstName: PropTypes.string,\r\n lastName: PropTypes.string,\r\n phone: PropTypes.string\r\n }),\r\n paymentMethod: PropTypes.string // \"\", \"out-of-pocket\", \"insurance\"\r\n});\r\n\r\nexport const defaultBilling = {\r\n relation: \"\",\r\n firstName: \"\",\r\n lastName: \"\",\r\n email: \"\",\r\n dob: \"\",\r\n address1: \"\",\r\n address2: \"\",\r\n city: \"\",\r\n state: \"\",\r\n zip: \"\"\r\n}\r\n\r\nexport const billingPropType = PropTypes.shape({\r\n relation: PropTypes.string,\r\n firstName: PropTypes.string,\r\n lastName: PropTypes.string,\r\n email: PropTypes.string,\r\n dob: PropTypes.string,\r\n address1: PropTypes.string,\r\n address2: PropTypes.string,\r\n city: PropTypes.string,\r\n state: PropTypes.string,\r\n zip: PropTypes.string\r\n});\r\n\r\nexport const defaultInsurance = {\r\n company: \"\",\r\n policyNumber: \"\",\r\n policyType: null,\r\n group: \"\",\r\n whereToSend: null,\r\n billing: defaultBilling,\r\n policyHolder: {\r\n relation: \"\",\r\n firstName: \"\",\r\n lastName: \"\",\r\n dob: \"\",\r\n email: \"\"\r\n }\r\n}\r\n\r\nexport const insurancePropType = PropTypes.shape({\r\n company: PropTypes.string,\r\n policyType: PropTypes.string,\r\n policyNumber: PropTypes.string,\r\n group: PropTypes.string,\r\n whereToSend: PropTypes.string,\r\n billing: billingPropType,\r\n policyHolder: PropTypes.shape({\r\n relation: PropTypes.string,\r\n firstName: PropTypes.string,\r\n lastName: PropTypes.string,\r\n dob: PropTypes.string,\r\n email: PropTypes.string\r\n })\r\n});\r\n\r\nexport const defaultState = {\r\n acknowledgedWhatToExpect: false,\r\n forMe: false,\r\n patientSeenRecently: false,\r\n contact: defaultContact,\r\n patient: defaultPatient,\r\n appointment: defaultAppointment,\r\n paymentMethod: \"\",\r\n insurance: defaultInsurance,\r\n pfaCallbackWindowDismissed: false,\r\n requestResults: \"\"\r\n};\r\n\r\nexport const statePropType = PropTypes.shape({\r\n acknowledgedWhatToExpect: PropTypes.bool,\r\n forMe: PropTypes.bool,\r\n patientSeenRecently: PropTypes.bool,\r\n contact: contactProptype,\r\n patient: patientPropType,\r\n appointmentProptype: defaultAppointment,\r\n paymentMethod: PropTypes.string,\r\n insurance: insurancePropType,\r\n pfaCallbackWindowDismissed: PropTypes.bool,\r\n requestResults: PropTypes.string\r\n});\r\n","// React and Redux\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\n// PropTypes\r\nimport PropTypes from 'prop-types';\r\n// Our custom code - Config, constants, shared components and functions\r\nimport * as webAppointmentActions from '../../actions/webAppointmentActions';\r\nimport InputList from '../../../shared/components/presentation/input-list/InputList';\r\nimport { nextPage } from '../../functions/nextPage';\r\nimport * as defaultState from '../../constants/DefaultState';\r\n// This component\r\nimport whatToExpect from '../../../shared/imgs/what-to-expect.jpg';\r\nimport './WhatToExpectPage.css';\r\nimport { Grid, GridItem } from '../../../shared/components/presentation/grid/Grid';\r\n\r\nexport class WhatToExpectPage extends Component {\r\n\r\n // parses the URL for physician first/last name and suffix\r\n // if at least 1 exists, formats the value and sets it as a provider\r\n setAppointmentProviderFromURL() {\r\n const search = this.props.location.search;\r\n const params = new URLSearchParams(search);\r\n const physicianFirstName = params.get('physicianFirstName');\r\n const physicianLastName = params.get('physicianLastName');\r\n const physicianSuffix = params.get('physicianSuffix');\r\n const physicianFullName = `${physicianFirstName ? physicianFirstName : ''}${physicianLastName ? ` ${physicianLastName}` : ''}${physicianSuffix ? `, ${physicianSuffix}` : ''}`\r\n .trim().substring(0, 140);\r\n if (physicianFullName) {\r\n this.props.webAppointmentSetAppointmentProvider(physicianFullName);\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n if (!this.props.appointment.provider) {\r\n this.setAppointmentProviderFromURL();\r\n }\r\n\r\n window.onpopstate = null;\r\n }\r\n\r\n render() {\r\n let inputlist = [\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n {\r\n type: 'button',\r\n id: \"back\",\r\n className: \"btn--secondary\",\r\n value: 'Go Back',\r\n onClick: () => {\r\n this.props.history.goBack();\r\n }\r\n },\r\n {\r\n type: 'button',\r\n id: \"next\",\r\n className: \"btn--primary\",\r\n value: 'Get Started',\r\n onClick: () => {\r\n this.props.webAppointmentAcknowledgedWhatToExpect(true);\r\n this.props.history.push(nextPage());\r\n }\r\n //internalLink: routes.WEB_APPOINTMENT_WHO_FOR_PAGE\r\n }\r\n ]\r\n }\r\n ];\r\n\r\n\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n

    Request an Appointment

    \r\n
    \r\n
    \r\n \"Illustration\r\n \r\n

    To fill out this form, you’ll need:

    \r\n
      \r\n
    • To be 18 or older.
    • \r\n
    • Insurance information, if insured.
    • \r\n
    • Contact information of the referring provider, if applicable.
    • \r\n
    \r\n
    \r\n

    This should take about 10 minutes to complete. Your appointment will be processed in 1 to 2 business days.

    \r\n

    If this is an emergency, please call 911 or go to your nearest emergency department.

    \r\n
    \r\n
    \r\n\r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nWhatToExpectPage.propTypes = {\r\n webAppointmentAcknowledgedWhatToExpect: PropTypes.func.isRequired,\r\n webAppointmentSetAppointmentProvider: PropTypes.func.isRequired,\r\n appointment: defaultState.appointmentProptype.isRequired\r\n};\r\n\r\nfunction mapStateToProps(state, ownProps) {\r\n return {\r\n appointment: state.webAppointmentForm.appointment\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n webAppointmentAcknowledgedWhatToExpect: (value) => dispatch(webAppointmentActions.webAppointmentAcknowledgedWhatToExpect(value)),\r\n webAppointmentSetAppointmentProvider: (value) => dispatch(webAppointmentActions.webAppointmentSetAppointmentProvider(value))\r\n };\r\n};\r\n\r\n// connects component to redux, and passes along the router\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(WhatToExpectPage));\r\n","import React, { Component } from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport InputList from '../../../shared/components/presentation/input-list/InputList';\r\nimport { Grid, GridItem } from '../../../shared/components/presentation/grid/Grid';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport * as webAppointmentActions from '../../actions/webAppointmentActions';\r\nimport { nextPage } from '../../functions/nextPage';\r\nimport './WhoForPage.scss';\r\n\r\nexport class WhoForPage extends Component {\r\n render() {\r\n this.backNext = \"\";\r\n\r\n let inputlist = [\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"icon-button-order\",\r\n inputs: [\r\n {\r\n type: 'icon-button',\r\n id: \"for-me\",\r\n className: \"btn--icon btn--myself\",\r\n icon: \"me\",\r\n value: 'Me',\r\n onClick: () => {\r\n this.props.webAppointmentSetForMe(true);\r\n this.props.history.push(nextPage(null, { forMe: true }));\r\n }\r\n },\r\n {\r\n type: 'icon-button',\r\n id: \"for-someone-else\",\r\n className: \"btn--icon btn--someone-else\",\r\n icon: \"someone-else\",\r\n value: 'Someone else',\r\n onClick: () => {\r\n this.props.webAppointmentSetForMe(false);\r\n this.props.history.push(nextPage(null, { forMe: false }));\r\n }\r\n },\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n {\r\n type: 'button',\r\n id: \"back\",\r\n className: \"btn--secondary\",\r\n value: 'Back',\r\n onClick: () => {\r\n this.props.history.goBack();\r\n }\r\n }\r\n ]\r\n }\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    Who is this request for?

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nWhoForPage.propTypes = {\r\n webAppointmentSetForMe: PropTypes.func.isRequired,\r\n};\r\n\r\nfunction mapStateToProps(state, ownProps) {\r\n return {\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n webAppointmentSetForMe: (value) => dispatch(webAppointmentActions.webAppointmentSetForMe(value)),\r\n };\r\n};\r\n\r\n// connects component to redux, and passes along the router\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(WhoForPage));\r\n","import React, { Component } from 'react';\r\nimport InputList from '../../../shared/components/presentation/input-list/InputList';\r\nimport { Grid, GridItem } from '../../../shared/components/presentation/grid/Grid';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport * as webAppointmentActions from '../../actions/webAppointmentActions';\r\nimport { nextPage } from '../../functions/nextPage';\r\nimport './ReceivedCarePage.scss';\r\n\r\nexport class ReceivedCarePage extends Component {\r\n render() {\r\n\r\n let person = \"they\";\r\n if (this.props.forMe) {\r\n person = \"you\";\r\n }\r\n\r\n const title = \"Have \" + person + \" received care at Cleveland Clinic within the last three years?\";\r\n\r\n let inputlist = [\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"icon-button-order\",\r\n inputs: [\r\n {\r\n type: 'icon-button',\r\n id: \"yes\",\r\n className: \"btn--icon btn--yes\",\r\n icon: \"yes\",\r\n value: 'Yes',\r\n onClick: () => {\r\n this.props.webAppointmentSetPatientSeenRecently(true);\r\n this.props.history.push(nextPage(null, { forMe: this.props.forMe, patientSeenRecently: true }));\r\n }\r\n },\r\n {\r\n type: 'icon-button',\r\n id: \"no\",\r\n className: \"btn--icon btn--no\",\r\n icon: \"no\",\r\n value: 'No',\r\n onClick: () => {\r\n this.props.webAppointmentSetPatientSeenRecently(false);\r\n this.props.history.push(nextPage(null, { forMe: this.props.forMe, patientSeenRecently: false }));\r\n }\r\n },\r\n {\r\n type: 'icon-button',\r\n id: \"i-dont-know\",\r\n className: \"btn--icon btn--not-sure\",\r\n icon: \"not-sure\",\r\n value: \"Not sure\",\r\n onClick: () => {\r\n this.props.webAppointmentSetPatientSeenRecently(false);\r\n this.props.history.push(nextPage(null, { forMe: this.props.forMe, patientSeenRecently: false }));\r\n }\r\n },\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n {\r\n type: 'button',\r\n id: \"back\",\r\n className: \"btn--secondary\",\r\n value: 'Back',\r\n onClick: () => {\r\n this.props.history.goBack();\r\n }\r\n }\r\n ]\r\n }\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    {title}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nReceivedCarePage.propTypes = {\r\n forMe: PropTypes.bool.isRequired,\r\n webAppointmentSetPatientSeenRecently: PropTypes.func.isRequired\r\n};\r\n\r\nfunction mapStateToProps(state, ownProps) {\r\n return {\r\n forMe: state.webAppointmentForm.forMe\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n webAppointmentSetPatientSeenRecently: (value) => dispatch(webAppointmentActions.webAppointmentSetPatientSeenRecently(value))\r\n };\r\n};\r\n\r\n// connects component to redux, and passes along the router\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ReceivedCarePage);\r\n","import { generateValidYearRegExp } from \"../webappointment/functions/generateValidYearRegExp\";\r\n\r\nexport const PHONE_NUMBER_REGEX = /^[A-Z0-9]{3}\\.[A-Z0-9]{3}\\.[A-Z0-9]{4}$/;\r\nexport const NUMERIC_PHONE_NUMBER_REGEX = /^[2-9][0-9]{2}\\.[2-9][0-9]{2}\\.[0-9]{4}$/;\r\nexport const EMAIL_REGEX = /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)+$/;\r\nexport const NUMERIC_REGEX = /^[0-9]*$/;\r\nexport const FOUR_DIGITS = /^[0-9]{4}$/;\r\nexport const ZIP_CODE_REGEX = /^(?!00000)(\\d{5}|\\d{5}-\\d{4})$/; // 14345, 14345-2550, or 14345-0000 but not 00000 or 00000-1234\r\nexport const NUMBER_OR_EMPTY_REGEX = /^$|[0-9]/;\r\nexport const DATE_OF_BIRTH_REGEX = generateValidYearRegExp();","// This function returns a regular expression to validate a dob string.\r\n// There are 3 main parts to this, separated by the / in the returned RegExp.\r\n// MM/DD/YYYY\r\n// Years are primarily used to check, with any valid year allowing all dates between jan 1 and dec 31.\r\n\r\n// This does not check each month for valid dates, for example feb 31 would be a valid date.\r\n// This shortcoming should be fixed not here in regex, but instead by allowing the validation to be passed to a function.\r\n// The built-in DateTime object in JS will handle all of this functionality without needing to re-invent the wheel.\r\n\r\nexport function generateValidYearRegExp() {\r\n const currYear = `${new Date().getFullYear()}`.slice(-2); // Last 2 digits of currYear\r\n const earliest = `${new Date().getFullYear()}` - 120;\r\n const earliestYear = (earliest + \"\").slice(-2); // Last 2 digits of earliestYear\r\n // month/day //year\r\n return new RegExp(`(((01|03|05|07|08|10|12)/(0[1-9]|[12][0-9]|3[0-1]))|((04|06|09|11)/(0[1-9]|[12][0-9]|30))|((02)/(0[1-9]|[12][0-9])))/(19${parseInt(earliestYear[0])}[${earliestYear[1]}-9]|19[${parseInt(earliestYear[0]) + 1}-9][0-9]|20[0-${parseInt(currYear[0]) - 1}][0-9]|20${parseInt(currYear[0])}[0-${currYear[1]}])\\\\b`, 'g');\r\n}","export function formatPhone(oldValue, oldSelectionStart) {\r\n let value = \"\";\r\n let selectionStart = oldSelectionStart;\r\n let i;\r\n const pattern = \"XXX.XXX.XXXX\";\r\n \r\n // Walk down oldValue copying to value any characters we want to keep.\r\n for (i=0; i < oldValue.length; i++)\r\n {\r\n let currentChar = oldValue.charAt(i);\r\n let newLength = value.length;\r\n\r\n // Identify the cases where we want to keep the current character.\r\n if ( (currentChar >= '0' && currentChar <= '9' && newLength < pattern.length && pattern.charAt(newLength) === 'X') ||\r\n (currentChar >= '2' && currentChar <= '9' && newLength < pattern.length && pattern.charAt(newLength) === 'N') ) {\r\n value = value + currentChar;\r\n }\r\n else if ( (currentChar >= '0' && currentChar <= '9' && newLength < pattern.length && pattern.substring(newLength, newLength+2) === '.X') ||\r\n (currentChar >= '2' && currentChar <= '9' && newLength < pattern.length && pattern.substring(newLength, newLength+2) === '.N') ) {\r\n value = value + \".\" + currentChar;\r\n // Inserting an extra character in the new string corresponding to just\r\n // one in the old string means that the cursor position may increment\r\n // by one.\r\n if (newLength < selectionStart) {\r\n selectionStart++;\r\n }\r\n }\r\n else if (newLength < selectionStart) {\r\n // Inserting zero characters into the new string for one in the old string\r\n // means the cursor position will decrement by one.\r\n selectionStart--;\r\n }\r\n }\r\n\r\n let returnObj = { value, selectionStart };\r\n return returnObj;\r\n}\r\n\r\n// This function can be used for things like the last four digits of your SSN.\r\nexport function formatDigitString(oldValue, oldSelectionStart, maxLength) {\r\n let value = \"\";\r\n let selectionStart = oldSelectionStart;\r\n let i;\r\n\r\n for (i = 0; i < oldValue.length; i++) {\r\n let currChar = oldValue.charAt(i);\r\n let newLength = value.length;\r\n\r\n if (currChar >= '0' && currChar <= '9' && newLength < maxLength) {\r\n value = value + currChar;\r\n }\r\n else if (newLength < selectionStart) {\r\n selectionStart--;\r\n }\r\n }\r\n\r\n let returnObj = { value, selectionStart };\r\n return returnObj;\r\n}\r\n\r\nexport function formatZipString(oldZipString) {\r\n oldZipString = oldZipString.replace(/-/gm, \"\");\r\n if (oldZipString.length < 6) {\r\n return oldZipString;\r\n } \r\n else {\r\n return `${oldZipString.substring(0, 5)}-${oldZipString.substring(5, oldZipString.length)}`;\r\n }\r\n}\r\n\r\nexport function formatCityString(oldCityString) {\r\n return oldCityString.replace(/[^0-9 a-z A-Z \\- ']/g, '');\r\n}","export const dropDownDefault = \"Make your selection\";\r\nexport const politeDropDownDefault = \"Please select\";\r\nexport const appointmentApiUrl = '/api/sitecore/WebAppointment/SaveNewJsonAppointment';\r\nexport const myChartPfaScheduleUrl = \"https://mychart.clevelandclinic.org/openscheduling/standalone?id=64012588,64018110,64018111,64018112,64018113,64018114,64018701&vt=553\";","import React, { Component } from 'react';\r\nimport './ContactInfoPage.css';\r\nimport * as regex from '../../../constants/regex';\r\nimport InputList from '../../../shared/components/presentation/input-list/InputList';\r\nimport { Grid, GridItem } from '../../../shared/components/presentation/grid/Grid';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport * as webAppointmentActions from '../../actions/webAppointmentActions';\r\nimport * as defaultState from '../../constants/DefaultState';\r\nimport * as formatData from '../../functions/formatData';\r\nimport { nextPage } from '../../functions/nextPage';\r\nimport { dropDownDefault } from '../../constants/webAppointmentConstants'\r\n\r\n\r\nexport class ContactInfoPage extends Component {\r\n emptyChoice = dropDownDefault;\r\n\r\n isValid() {\r\n let valid = (\r\n this.props.contact.relation &&\r\n this.props.contact.firstName &&\r\n this.props.contact.lastName &&\r\n this.props.contact.email &&\r\n this.props.contact.email.match(regex.EMAIL_REGEX) &&\r\n this.props.contact.phone &&\r\n this.props.contact.phone.match(regex.NUMERIC_PHONE_NUMBER_REGEX)\r\n );\r\n return !!valid;\r\n }\r\n\r\n render() {\r\n this.backNext = '';\r\n\r\n let title = this.props.patientSeenRecently ?\r\n 'How would you like us to contact you about this appointment?' :\r\n 'Let’s get started with your contact information.';\r\n\r\n let subtitle = this.props.patientSeenRecently ? \r\n '' :\r\n 'How would you like us to contact you about this appointment?';\r\n\r\n let inputlist = [\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n inputs: [\r\n {\r\n type: 'select',\r\n id: 'relation',\r\n key: 'relation',\r\n label: 'Your relationship to the patient',\r\n onChange: (value) => {\r\n this.props.webAppointmentSetContactRelation(value === this.emptyChoice ? \"\" : value);\r\n },\r\n existingContent: this.props.contact.relation || undefined,\r\n required: true,\r\n requiredError: \"Please select your relationship to the patient.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n options: [\r\n { name: this.emptyChoice, value: undefined },\r\n { name: 'Parent', value: 'Parent' },\r\n { name: 'Guardian', value: 'Guardian' },\r\n { name: 'Spouse', value: 'Spouse' },\r\n { name: 'Partner', value: 'Partner' },\r\n { name: 'Child', value: 'Child' },\r\n { name: 'Sibling', value: 'Sibling' },\r\n { name: 'Relative', value: 'Relative' },\r\n { name: 'Friend', value: 'Friend' },\r\n { name: 'Other', value: 'Other' }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 2,\r\n inputs: [\r\n [\r\n {\r\n type: 'text',\r\n id: 'firstName',\r\n label: 'Your first name',\r\n onChange: (ev) => { this.props.webAppointmentSetContactFirstName(ev.target.value); },\r\n existingContent: this.props.contact.firstName || undefined,\r\n required: true,\r\n requiredError: \"Please enter your first name.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n maxLength: '140'\r\n },\r\n ],\r\n [\r\n {\r\n type: 'text',\r\n id: 'lastName',\r\n label: 'Your last name',\r\n onChange: (ev) => { this.props.webAppointmentSetContactLastName(ev.target.value); },\r\n existingContent: this.props.contact.lastName || undefined,\r\n required: true,\r\n requiredError: \"Please enter your last name.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n maxLength: '140'\r\n },\r\n ]\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 2,\r\n inputs: [\r\n [\r\n {\r\n type: 'text',\r\n id: 'email',\r\n label: 'Your email',\r\n onChange: (ev) => { \r\n const formattedEmail = ev.target.value.replace(/\\s/g, '');\r\n this.props.webAppointmentSetContactEmail(formattedEmail);\r\n return formattedEmail;\r\n },\r\n existingContent: this.props.contact.email,\r\n required: true,\r\n requiredError: \"Please enter your email in this format: yourname@example.com\",\r\n patternMatch: regex.EMAIL_REGEX,\r\n patternMatchError: \"Please enter your email in this format: yourname@example.com\",\r\n validateOnBlur: true,\r\n validateOnChange: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n maxLength: '140'\r\n }\r\n ]\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 2,\r\n inputs: [\r\n [\r\n {\r\n type: 'text',\r\n id: 'phone',\r\n label: 'Your phone',\r\n onChange: (ev) => {\r\n let newValues = formatData.formatPhone(ev.target.value, ev.target.selectionStart);\r\n this.props.webAppointmentSetContactPhone(newValues.value);\r\n return newValues;\r\n },\r\n existingContent: this.props.contact.phone,\r\n required: true,\r\n requiredError: \"Please enter your phone number with the area code.\",\r\n patternMatch: regex.NUMERIC_PHONE_NUMBER_REGEX,\r\n patternMatchError: \"Please enter your phone number with the area code.\",\r\n validateOnBlur: true,\r\n validateOnChange: true,\r\n validationErrorClass: \"web-appointment__error\"\r\n },\r\n ]\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n [\r\n {\r\n type: 'button',\r\n id: \"back\",\r\n className: \"btn--secondary\",\r\n value: 'Back',\r\n onClick: () => {\r\n this.props.history.goBack();\r\n }\r\n },\r\n {\r\n type: 'button',\r\n id: \"next\",\r\n className: \"btn--primary\",\r\n value: \"Next\",\r\n disabled: !this.isValid(),\r\n onClick: () => {\r\n this.props.history.push(nextPage(null, { forMe: this.props.forMe, patientSeenRecently: this.props.patientSeenRecently }));\r\n }\r\n }\r\n ]\r\n ]\r\n }\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    {title}

    \r\n {subtitle ?

    {subtitle}

    : null}\r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nContactInfoPage.propTypes = {\r\n contact: defaultState.contactProptype,\r\n patientSeenRecently: PropTypes.bool.isRequired,\r\n webAppointmentSetContactRelation: PropTypes.func.isRequired,\r\n webAppointmentSetContactFirstName: PropTypes.func.isRequired,\r\n webAppointmentSetContactLastName: PropTypes.func.isRequired,\r\n webAppointmentSetContactEmail: PropTypes.func.isRequired,\r\n webAppointmentSetContactPhone: PropTypes.func.isRequired\r\n};\r\n\r\nfunction mapStateToProps(state, ownProps) {\r\n return {\r\n contact: state.webAppointmentForm.contact,\r\n patientSeenRecently: state.webAppointmentForm.patientSeenRecently\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n webAppointmentSetContactRelation: (value) => dispatch(webAppointmentActions.webAppointmentSetContactRelation(value)),\r\n webAppointmentSetContactFirstName: (value) => dispatch(webAppointmentActions.webAppointmentSetContactFirstName(value)),\r\n webAppointmentSetContactLastName: (value) => dispatch(webAppointmentActions.webAppointmentSetContactLastName(value)),\r\n webAppointmentSetContactEmail: (value) => dispatch(webAppointmentActions.webAppointmentSetContactEmail(value)),\r\n webAppointmentSetContactPhone: (value) => dispatch(webAppointmentActions.webAppointmentSetContactPhone(value)),\r\n };\r\n};\r\n\r\n// connects component to redux, and passes along the router\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ContactInfoPage);\r\n","//inserts slashes automatically in dob text field\r\nexport default function dobFormatting(ev, thisState, func) {\r\n if (ev.which !== 8) {\r\n let input = ev.target.value;\r\n let out = input.replace(/\\D/g, '');\r\n let len = out.length;\r\n\r\n if (len > 1 && len < 4) {\r\n out = out.substring(0, 2) + '/' + out.substring(2, 3);\r\n } else if (len >= 4) {\r\n out = out.substring(0, 2) + '/' + out.substring(2, 4) + '/' + out.substring(4, len);\r\n out = out.substring(0, 10)\r\n }\r\n func(out);\r\n if (input.length > 0 && out.length == 0) {\r\n thisState.setState((prevState) => { return { rerender: prevState.rerender + 1 }; });\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport * as regex from '../../../constants/regex';\r\nimport InputList from '../../../shared/components/presentation/input-list/InputList';\r\nimport { Grid, GridItem } from '../../../shared/components/presentation/grid/Grid';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport * as webAppointmentActions from '../../actions/webAppointmentActions';\r\nimport { nextPage } from '../../functions/nextPage';\r\nimport { dropDownDefault } from '../../constants/webAppointmentConstants'\r\nimport * as defaultState from '../../constants/DefaultState';\r\nimport dobFormatting from '../../../shared/functions/dobFormatting';\r\n\r\nexport class NewPatientInfoPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n rerender: 1\r\n };\r\n }\r\n emptyChoice = dropDownDefault;\r\n fourdigits = /^[0-9]{4}$/;\r\n\r\n isValid() {\r\n let valid = (\r\n this.props.patient.firstName &&\r\n this.props.patient.lastName &&\r\n this.props.patient.gender &&\r\n this.props.patient.maritalStatus &&\r\n this.props.patient.dob &&\r\n this.props.patient.dob.match(regex.DATE_OF_BIRTH_REGEX) \r\n );\r\n return !!valid;\r\n }\r\n\r\n render() {\r\n const title = \"Please help us get to know \" +\r\n (this.props.forMe ? \"you\" : \"the patient\") +\r\n \" better.\";\r\n\r\n let inputlist = [\r\n {\r\n fieldsetLegend: '',\r\n fieldsetColumns: 2,\r\n inputs: [\r\n [\r\n {\r\n type: 'text',\r\n id: 'firstName',\r\n label: this.props.forMe ? \"First name\" : \"Patient’s first name\",\r\n required: true,\r\n requiredError: \"Please enter \" + (this.props.forMe ? \"your\" : \"the patient’s\") + \" first name.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n onChange: (ev) => { this.props.webAppointmentSetPatientFirstName(ev.target.value); },\r\n existingContent: this.props.patient.firstName || undefined,\r\n maxLength: '140'\r\n }\r\n ],\r\n [\r\n {\r\n type: 'text',\r\n id: 'lastName',\r\n label: this.props.forMe ? \"Last name\" : \"Patient’s last name\",\r\n required: true,\r\n requiredError: \"Please enter \" + (this.props.forMe ? \"your\" : \"the patient’s\") + \" last name.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n onChange: (ev) => { this.props.webAppointmentSetPatientLastName(ev.target.value); },\r\n existingContent: this.props.patient.lastName || undefined,\r\n maxLength: '140'\r\n }\r\n ]\r\n ]\r\n },\r\n {\r\n fieldsetLegend: '',\r\n fieldsetColumns: 2,\r\n inputs: [\r\n {\r\n type: 'select',\r\n id: 'gender',\r\n key: 'gender',\r\n label: this.props.forMe ? \"Gender\" : \"Patient’s gender\",\r\n required: true,\r\n requiredError: \"Please enter \" + (this.props.forMe ? \"your\" : \"the patient’s\") + \" gender.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n onChange: (value) => { this.props.webAppointmentSetPatientGender(value === this.emptyChoice ? \"\" : value); },\r\n existingContent: this.props.patient.gender || undefined,\r\n options: [\r\n { name: this.emptyChoice, value: undefined },\r\n { name: 'Female', value: 'Female' },\r\n { name: 'Male', value: 'Male' },\r\n { name: 'Transgender', value: 'Transgender' },\r\n { name: 'Nonbinary', value: 'Nonbinary' },\r\n { name: 'Other', value: 'Other' },\r\n { name: 'X', value: 'X' }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 2,\r\n inputs: [\r\n {\r\n type: 'select',\r\n id: 'maritalStatus',\r\n key: 'maritalStatus',\r\n label: this.props.forMe ? \"Marital status\" : \"Patient’s marital status\",\r\n required: true,\r\n requiredError: \"Please enter \" + (this.props.forMe ? \"your\" : \"the patient’s\") + \" marital status.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n onChange: (value) => { this.props.webAppointmentSetPatientMaritalStatus(value === this.emptyChoice ? \"\" : value); },\r\n existingContent: this.props.patient.maritalStatus || undefined,\r\n options: [\r\n { name: this.emptyChoice, value: undefined },\r\n { name: 'Married', value: 'Married' },\r\n { name: 'Single', value: 'Single' },\r\n { name: 'Divorced', value: 'Divorced' },\r\n { name: 'Widowed', value: 'Widowed' },\r\n { name: 'Domestic Partnership', value: 'Domestic Partnership' },\r\n { name: 'Legally Separated', value: 'Legally Separated' },\r\n { name: 'Other', value: 'Other' }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 2,\r\n inputs: [\r\n {\r\n id: 'dob',\r\n key: \"dob-\" + this.state.rerender,\r\n type: 'text',\r\n label: this.props.forMe ? \"Date of birth\" : \"Patient’s date of birth\",\r\n helperText: \"Date format: mm/dd/yyyy\",\r\n placeholderText: 'mm/dd/yyyy',\r\n required: true,\r\n requiredError: \"Please enter \" + (this.props.forMe ? \"your\" : \"their\") + \" date of birth.\",\r\n patternMatch: regex.DATE_OF_BIRTH_REGEX,\r\n patternMatchError: \"Please enter a valid date\",\r\n validateOnBlur: true,\r\n validateOnChange: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n onChange: (ev) => { this.props.webAppointmentSetPatientDob(ev.target.value); },\r\n onKeyUp: (ev) => {\r\n dobFormatting(ev, this, this.props.webAppointmentSetPatientDob);\r\n },\r\n existingContent: this.props.patient.dob || undefined\r\n }\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n [\r\n {\r\n type: 'button',\r\n id: \"back\",\r\n className: \"btn--secondary\",\r\n value: 'Back',\r\n onClick: () => {\r\n this.props.history.goBack();\r\n }\r\n },\r\n {\r\n type: 'button',\r\n id: \"next\",\r\n className: \"btn--primary\",\r\n value: 'Next',\r\n disabled: !this.isValid(),\r\n onClick: () => {\r\n this.props.history.push(nextPage());\r\n }\r\n }\r\n ]\r\n ]\r\n }\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    {title}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nNewPatientInfoPage.propTypes = {\r\n patient: defaultState.patientPropType,\r\n forMe: PropTypes.bool.isRequired,\r\n webAppointmentSetPatientFirstName: PropTypes.func.isRequired,\r\n webAppointmentSetPatientLastName: PropTypes.func.isRequired,\r\n webAppointmentSetPatientGender: PropTypes.func.isRequired,\r\n webAppointmentSetPatientMaritalStatus: PropTypes.func.isRequired,\r\n webAppointmentSetPatientDob: PropTypes.func.isRequired\r\n};\r\n\r\nfunction mapStateToProps(state, ownProps) {\r\n return {\r\n patient: state.webAppointmentForm.patient,\r\n forMe: state.webAppointmentForm.forMe\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n webAppointmentSetPatientFirstName: (value) => dispatch(webAppointmentActions.webAppointmentSetPatientFirstName(value)),\r\n webAppointmentSetPatientLastName: (value) => dispatch(webAppointmentActions.webAppointmentSetPatientLastName(value)),\r\n webAppointmentSetPatientGender: (value) => dispatch(webAppointmentActions.webAppointmentSetPatientGender(value)),\r\n webAppointmentSetPatientMaritalStatus: (value) => dispatch(webAppointmentActions.webAppointmentSetPatientMaritalStatus(value)),\r\n webAppointmentSetPatientDob: (value) => dispatch(webAppointmentActions.webAppointmentSetPatientDob(value))\r\n };\r\n};\r\n\r\n// connects component to redux, and passes along the router\r\nexport default connect(mapStateToProps, mapDispatchToProps)(NewPatientInfoPage);\r\n","export const MYAPI_KEY = process.env.REACT_APP_VIA_MYAPI_KEY;\r\n","import axios from 'axios';\r\nimport * as keys from '../../config/apiKeys';\r\n\r\n// Returns a promise that will ether resolve or reject.\r\nexport default function apiGet(apiUrl, options, q, user, appName, restrictForPublishers, restrictForContributors, skipKey) {\r\n options = options || {};\r\n options.headers = options.headers || {};\r\n if (!skipKey) {\r\n options.headers['api_key'] = keys.MYAPI_KEY;\r\n }\r\n\r\n let role = user &&\r\n user.permissions &&\r\n user.permissions[appName] &&\r\n user.permissions[appName].role ?\r\n user.permissions[appName].role :\r\n \"public\";\r\n\r\n let userId = user && user.Id;\r\n\r\n options.params = options.params || {};\r\n if (restrictForContributors && role === \"contributor\") {\r\n options.params[\"currentAssignee\"] = userId;\r\n }\r\n\r\n if (restrictForPublishers && role === \"publisher\") {\r\n options.params[\"publisher\"] = userId;\r\n }\r\n\r\n if (q) {\r\n options.params[\"q\"] = q;\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n var url = window.location.protocol + \"//\" + window.location.host + apiUrl;\r\n axios.get(url, options)\r\n .then((response) => {\r\n let theData = response.data;\r\n resolve(theData);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n}\r\n","import React, { Component } from 'react';\r\nimport * as regex from '../../../constants/regex';\r\nimport InputList from '../../../shared/components/presentation/input-list/InputList';\r\nimport { Grid, GridItem } from '../../../shared/components/presentation/grid/Grid';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport * as webAppointmentActions from '../../actions/webAppointmentActions';\r\nimport { nextPage } from '../../functions/nextPage';\r\nimport { politeDropDownDefault } from '../../constants/webAppointmentConstants'\r\nimport * as defaultState from '../../constants/DefaultState';\r\nimport * as formatData from '../../functions/formatData';\r\nimport apiGet from '../../../shared/functions/apiGet';\r\n\r\nexport class NewPatientAddressPhonePage extends Component {\r\n emptyChoice = politeDropDownDefault;\r\n states = [{ name: politeDropDownDefault, value: undefined }];\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n rerender: 1\r\n };\r\n }\r\n\r\n getStates = () => {\r\n let options = { params: { country: \"USA\" } };\r\n return new Promise((resolve, reject) => {\r\n apiGet(\"/api/sitecore/webappointment/getStatesOrProvinces\", options, null, null, null, false, false, false)\r\n .then((states) => {\r\n resolve(states);\r\n })\r\n .catch((error) => {\r\n console.log(\"get states call failed, falling back to hardcoded abbreviations.\");\r\n console.log(error);\r\n let options = [\r\n { name: politeDropDownDefault, value: undefined },\r\n { name: \"AL\", value: \"Alabama\" },\r\n { name: \"AK\", value: \"Alaska\" },\r\n { name: \"AZ\", value: \"Arizona\" },\r\n { name: \"AR\", value: \"Arkansas\" },\r\n { name: \"CA\", value: \"California\" },\r\n { name: \"CO\", value: \"Colorado\" },\r\n { name: \"CT\", value: \"Connecticut\" },\r\n { name: \"DE\", value: \"Delaware\" },\r\n { name: \"DC\", value: \"District of Columbia\" },\r\n { name: \"FL\", value: \"Florida\" },\r\n { name: \"GA\", value: \"Georgia\" },\r\n { name: \"HI\", value: \"Hawaii\" },\r\n { name: \"ID\", value: \"Idaho\" },\r\n { name: \"IL\", value: \"Illinois\" },\r\n { name: \"IN\", value: \"Indiana\" },\r\n { name: \"IA\", value: \"Iowa\" },\r\n { name: \"KS\", value: \"Kansas\" },\r\n { name: \"KY\", value: \"Kentucky\" },\r\n { name: \"LA\", value: \"Louisiana\" },\r\n { name: \"ME\", value: \"Maine\" },\r\n { name: \"MD\", value: \"Maryland\" },\r\n { name: \"MA\", value: \"Massachusetts\" },\r\n { name: \"MI\", value: \"Michigan\" },\r\n { name: \"MN\", value: \"Minnesota\" },\r\n { name: \"MS\", value: \"Mississippi\" },\r\n { name: \"MO\", value: \"Missouri\" },\r\n { name: \"MT\", value: \"Montana\" },\r\n { name: \"NE\", value: \"Nebraska\" },\r\n { name: \"NV\", value: \"Nevada\" },\r\n { name: \"NH\", value: \"New Hampshire\" },\r\n { name: \"NJ\", value: \"New Jersey\" },\r\n { name: \"NM\", value: \"New Mexico\" },\r\n { name: \"NY\", value: \"New York\" },\r\n { name: \"NC\", value: \"North Carolina\" },\r\n { name: \"ND\", value: \"North Dakota\" },\r\n { name: \"OH\", value: \"Ohio\" },\r\n { name: \"OK\", value: \"Oklahoma\" },\r\n { name: \"OR\", value: \"Oregon\" },\r\n { name: \"PA\", value: \"Pennsylvania\" },\r\n { name: \"PR\", value: \"Puerto Rico\" },\r\n { name: \"RI\", value: \"Rhode Island\" },\r\n { name: \"SC\", value: \"South Carolina\" },\r\n { name: \"SD\", value: \"South Dakota\" },\r\n { name: \"TN\", value: \"Tennessee\" },\r\n { name: \"TX\", value: \"Texas\" },\r\n { name: \"UT\", value: \"Utah\" },\r\n { name: \"VT\", value: \"Vermont\" },\r\n { name: \"VI\", value: \"Virgin Islands\" },\r\n { name: \"VA\", value: \"Virginia\" },\r\n { name: \"WA\", value: \"Washington\" },\r\n { name: \"WV\", value: \"West Virginia\" },\r\n { name: \"WI\", value: \"Wisconsin\" },\r\n { name: \"WY\", value: \"Wyoming\" }\r\n ];\r\n this.states = options;\r\n // Tweak the state just enough to call render() again.\r\n this.setState((prevState) => { return { rerender: prevState.rerender + 1 }; });\r\n });\r\n });\r\n }\r\n\r\n fillStates() {\r\n this.getStates()\r\n .then((states) => {\r\n // process 'locations' - i.e. save locally so that render() can get to them.\r\n this.states = states.map(s => {\r\n return { value: s.Value, name: s.Value };\r\n })\r\n this.states.unshift({ name: politeDropDownDefault, value: undefined });\r\n // Tweak the state just enough to call render() again.\r\n this.setState((prevState) => { return { rerender: prevState.rerender + 1 }; });\r\n });\r\n }\r\n\r\n // Lifecycle Method:\r\n componentDidMount() {\r\n this.fillStates();\r\n }\r\n\r\n isValid() {\r\n let valid = (\r\n this.props.patient.address1 &&\r\n this.props.patient.city &&\r\n this.props.patient.state &&\r\n this.props.patient.zip && this.props.patient.zip.match(regex.ZIP_CODE_REGEX) &&\r\n ( this.props.patient.phone === \"\" || this.props.patient.phone.match(regex.NUMERIC_PHONE_NUMBER_REGEX) )\r\n );\r\n if (this.props.forMe) {\r\n valid = (\r\n valid &&\r\n this.props.patient.email &&\r\n this.props.patient.email.match(regex.EMAIL_REGEX) &&\r\n this.props.patient.phone &&\r\n this.props.patient.phone.match(regex.NUMERIC_PHONE_NUMBER_REGEX)\r\n );\r\n }\r\n return !!valid;\r\n }\r\n\r\n render() {\r\n let title = this.props.forMe ?\r\n \"How can we contact you about your appointment?\" :\r\n \"Please provide the patient’s address and contact information.\";\r\n\r\n let inputlist = [\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n inputs: [\r\n {\r\n type: 'text',\r\n id: 'address1',\r\n required: true,\r\n requiredError: \"Please enter \" + (this.props.forMe ? \"your\" : \"the patient’s\") + \" street address.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n label: this.props.forMe ? \"Address\" : \"Patient’s address\",\r\n helperText: \"House number and street name\",\r\n onChange: (ev) => { this.props.webAppointmentSetPatientAddress1(ev.target.value); },\r\n existingContent: this.props.patient.address1 || undefined,\r\n maxLength: '46'\r\n },\r\n {\r\n type: 'text',\r\n id: 'address2',\r\n label: this.props.forMe ? \"Address continued (Optional)\" : \"Patient’s address continued (Optional)\",\r\n helperText: \"Apartment number if applicable\",\r\n onChange: (ev) => { this.props.webAppointmentSetPatientAddress2(ev.target.value); },\r\n existingContent: this.props.patient.address2 || undefined,\r\n maxLength: '46'\r\n }\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 3,\r\n inputs: [\r\n [\r\n {\r\n type: 'text',\r\n id: 'city',\r\n required: true,\r\n requiredError: \"Please enter \" + (this.props.forMe ? \"your\" : \"the patient’s\") + \" city.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n label: this.props.forMe ? \"City\" : \"Patient’s city\",\r\n onChange: (ev) => { \r\n const formattedCity = formatData.formatCityString(ev.target.value);\r\n this.props.webAppointmentSetPatientCity(formattedCity); \r\n },\r\n existingContent: this.props.patient.city || undefined,\r\n maxLength: '140'\r\n }\r\n ],\r\n [\r\n {\r\n type: 'select',\r\n id: 'state',\r\n key: 'state',\r\n required: true,\r\n requiredError: \"Please enter \" + (this.props.forMe ? \"your\" : \"the patient’s\") + \" state.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n label: this.props.forMe ? \"State\" : \"Patient’s state\",\r\n onChange: (value) => { this.props.webAppointmentSetPatientState(value === politeDropDownDefault ? \"\" : value); },\r\n existingContent: this.props.patient.state ? this.props.patient.state.split(\"|\")[0] : undefined,\r\n options: this.states\r\n }\r\n ],\r\n [\r\n {\r\n type: 'text',\r\n id: 'zip',\r\n required: true,\r\n requiredError: \"Please enter \" + (this.props.forMe ? \"your\" : \"the patient’s\") + \" zip code.\",\r\n validateOnBlur: true,\r\n validateOnChange: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n patternMatch: regex.ZIP_CODE_REGEX,\r\n patternMatchError: \"Please enter \" + (this.props.forMe ? \"your\" : \"the patient’s\") + \" zip code.\",\r\n label: this.props.forMe ? \"Zip code\" : \"Patient’s zip code\",\r\n onChange: (ev) => {\r\n const formattedZip = formatData.formatZipString(ev.target.value, ev.target.selectionStart);\r\n this.props.webAppointmentSetPatientZip(formattedZip);\r\n },\r\n existingContent: this.props.patient.zip,\r\n maxLength: '10'\r\n }\r\n ]\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 2,\r\n inputs: [\r\n [\r\n // \"This is for me\" conditional inputs.\r\n this.props.forMe ? {\r\n id: 'email',\r\n type: 'text',\r\n label: \"Email\",\r\n required: true,\r\n requiredError: \"Please enter your email address in this format: yourname@example.com\",\r\n validateOnBlur: true,\r\n validateOnChange: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n patternMatch: regex.EMAIL_REGEX,\r\n patternMatchError: \"Please enter your email address in this format: yourname@example.com\",\r\n existingContent: this.props.patient.email,\r\n onChange: (ev) => { \r\n const formattedEmail = ev.target.value.replace(/\\s/g, '');\r\n this.props.webAppointmentSetPatientEmail(formattedEmail);\r\n return formattedEmail;\r\n }\r\n } : {},\r\n // end of \"This is for me\" conditional inputs.\r\n ]\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 2,\r\n inputs: [\r\n [\r\n {\r\n id: \"Phone number\",\r\n type: 'text',\r\n key: \"new-patient-phone\",\r\n label: (this.props.forMe ? \"Phone number\" : \"Patient’s phone number (Optional)\"),\r\n required: this.props.forMe,\r\n requiredError: \"Please enter \" + (this.props.forMe ? \"your\" : \"the patient’s\" ) + \" phone number with the area code.\",\r\n validateOnBlur: true,\r\n validateOnChange: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n patternMatch: regex.NUMERIC_PHONE_NUMBER_REGEX,\r\n patternMatchError: \"Please enter \" + (this.props.forMe ? \"your\" : \"the patient’s\" ) + \" phone number with the area code.\",\r\n existingContent: this.props.patient.phone,\r\n onChange: (ev) => {\r\n let newValues = formatData.formatPhone(ev.target.value, ev.target.selectionStart);\r\n this.props.webAppointmentSetPatientPhone(newValues.value);\r\n return newValues;\r\n }\r\n }\r\n ]\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n [\r\n {\r\n type: 'button',\r\n id: \"back\",\r\n className: \"btn--secondary\",\r\n value: 'Back',\r\n onClick: () => {\r\n this.props.history.goBack();\r\n }\r\n },\r\n {\r\n type: 'button',\r\n id: \"next\",\r\n className: \"btn--primary\",\r\n value: 'Next',\r\n disabled: !this.isValid(),\r\n onClick: () => {\r\n this.props.history.push(nextPage());\r\n }\r\n }\r\n ]\r\n ]\r\n }\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    {title}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nNewPatientAddressPhonePage.propTypes = {\r\n patient: defaultState.patientPropType,\r\n forMe: PropTypes.bool.isRequired,\r\n webAppointmentSetPatientAddress1: PropTypes.func.isRequired,\r\n webAppointmentSetPatientAddress2: PropTypes.func.isRequired,\r\n webAppointmentSetPatientCity: PropTypes.func.isRequired,\r\n webAppointmentSetPatientState: PropTypes.func.isRequired,\r\n webAppointmentSetPatientZip: PropTypes.func.isRequired,\r\n webAppointmentSetPatientEmail: PropTypes.func.isRequired,\r\n webAppointmentSetPatientPhone: PropTypes.func.isRequired\r\n};\r\n\r\nfunction mapStateToProps(state, ownProps) {\r\n return {\r\n forMe: state.webAppointmentForm.forMe,\r\n patient: state.webAppointmentForm.patient\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n webAppointmentSetPatientAddress1: (value) => dispatch(webAppointmentActions.webAppointmentSetPatientAddress1(value)),\r\n webAppointmentSetPatientAddress2: (value) => dispatch(webAppointmentActions.webAppointmentSetPatientAddress2(value)),\r\n webAppointmentSetPatientCity: (value) => dispatch(webAppointmentActions.webAppointmentSetPatientCity(value)),\r\n webAppointmentSetPatientState: (value) => dispatch(webAppointmentActions.webAppointmentSetPatientState(value)),\r\n webAppointmentSetPatientZip: (value) => dispatch(webAppointmentActions.webAppointmentSetPatientZip(value)),\r\n webAppointmentSetPatientEmail: (value) => dispatch(webAppointmentActions.webAppointmentSetPatientEmail(value)),\r\n webAppointmentSetPatientPhone: (value) => dispatch(webAppointmentActions.webAppointmentSetPatientPhone(value))\r\n };\r\n};\r\n\r\n// connects component to redux, and passes along the router\r\nexport default connect(mapStateToProps, mapDispatchToProps)(NewPatientAddressPhonePage);\r\n","import React, { Component } from 'react';\r\nimport * as regex from '../../../constants/regex';\r\nimport InputList from '../../../shared/components/presentation/input-list/InputList';\r\nimport { Grid, GridItem } from '../../../shared/components/presentation/grid/Grid';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport * as webAppointmentActions from '../../actions/webAppointmentActions';\r\nimport { nextPage } from '../../functions/nextPage';\r\nimport * as defaultState from '../../constants/DefaultState';\r\nimport * as formatData from '../../functions/formatData';\r\nimport dobFormatting from '../../../shared/functions/dobFormatting';\r\nimport './ExistingPatientInfoPage.scss';\r\n\r\nexport class ExistingPatientInfoPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n rerender: 1\r\n };\r\n }\r\n\r\n isValid() {\r\n let valid = (\r\n this.props.patient.firstName &&\r\n this.props.patient.lastName &&\r\n this.props.patient.dob &&\r\n this.props.patient.dob.match(regex.DATE_OF_BIRTH_REGEX) &&\r\n (!this.props.patient.ssn || this.props.patient.ssn.match(regex.FOUR_DIGITS)) &&\r\n this.props.patient.phone &&\r\n this.props.patient.phone.match(regex.NUMERIC_PHONE_NUMBER_REGEX)\r\n );\r\n if (this.props.forMe) {\r\n valid = (\r\n valid &&\r\n this.props.patient.email &&\r\n this.props.patient.email.match(regex.EMAIL_REGEX)\r\n );\r\n }\r\n return !!valid;\r\n }\r\n\r\n render() {\r\n const title = \"Please give us a little more information so we can find \" +\r\n (this.props.forMe ? \"your\" : \"their\") +\r\n \" medical record.\";\r\n\r\n let inputlist = [\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 2,\r\n\r\n inputs: [\r\n [\r\n {\r\n type: 'text',\r\n id: 'firstName',\r\n label: this.props.forMe ? 'First name' : \"Patient’s first name\",\r\n required: true,\r\n requiredError: \"Please enter \" + (this.props.forMe ? \"your\" : \"the patient’s\") + \" first name.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n onChange: (ev) => { this.props.webAppointmentSetPatientFirstName(ev.target.value); },\r\n existingContent: this.props.patient.firstName || undefined,\r\n maxLength: '140'\r\n }\r\n ],\r\n [\r\n {\r\n type: 'text',\r\n id: 'lastName',\r\n className: '3column',\r\n label: this.props.forMe ? 'Last name' : \"Patient’s last name\",\r\n required: true,\r\n requiredError: \"Please enter \" + (this.props.forMe ? \"your\" : \"the patient’s\") + \" last name.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n onChange: (ev) => { this.props.webAppointmentSetPatientLastName(ev.target.value); },\r\n existingContent: this.props.patient.lastName || undefined,\r\n maxLength: '140'\r\n }\r\n ]\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 2,\r\n inputs: [\r\n {\r\n type: 'text',\r\n id: 'phoneNumber',\r\n label: this.props.forMe ? \"Phone number\" : \"Patient’s phone number\",\r\n required: true,\r\n requiredError: \"Please enter \" + (this.props.forMe ? \"your\" : \"the patient’s\") + \" phone number with the area code.\",\r\n patternMatch: regex.NUMERIC_PHONE_NUMBER_REGEX,\r\n patternMatchError: \"Please enter \" + (this.props.forMe ? \"your\" : \"the patient’s\") + \" phone number with the area code.\",\r\n validateOnBlur: true,\r\n validateOnChange: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n onChange: (ev) => {\r\n let newValues = formatData.formatPhone(ev.target.value, ev.target.selectionStart);\r\n this.props.webAppointmentSetPatientPhone(newValues.value);\r\n return newValues;\r\n },\r\n existingContent: this.props.patient.phone\r\n },\r\n this.props.forMe ?\r\n {\r\n type: 'text',\r\n id: 'email',\r\n label: \"Email\",\r\n required: true,\r\n requiredError: \"Please enter your email address in this format: yourname@example.com\",\r\n patternMatch: regex.EMAIL_REGEX,\r\n patternMatchError: \"Please enter your email address in this format: yourname@example.com\",\r\n validateOnBlur: true,\r\n validateOnChange: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n onChange: (ev) => {\r\n const formattedEmail = ev.target.value.replace(/\\s/g, '');\r\n this.props.webAppointmentSetPatientEmail(formattedEmail);\r\n return formattedEmail;\r\n },\r\n existingContent: this.props.patient.email\r\n } : null,\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 2,\r\n inputs: [\r\n {\r\n id: 'dob',\r\n key: \"dob-\" + this.state.rerender,\r\n type: 'text',\r\n label: this.props.forMe ? 'Date of birth' : \"Patient’s date of birth\",\r\n helperText: \"Date format: mm/dd/yyyy\",\r\n placeholderText: 'mm/dd/yyyy',\r\n required: true,\r\n requiredError: \"Please enter \" + (this.props.forMe ? \"your\" : \"their\") + \" date of birth.\",\r\n patternMatch: regex.DATE_OF_BIRTH_REGEX,\r\n patternMatchError: \"Please enter a valid date\",\r\n validateOnBlur: true,\r\n validateOnChange: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n onChange: (ev) => { this.props.webAppointmentSetPatientDob(ev.target.value); },\r\n onKeyUp: (ev) => {\r\n dobFormatting(ev, this, this.props.webAppointmentSetPatientDob);\r\n },\r\n existingContent: this.props.patient.dob || undefined\r\n },\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 2,\r\n inputs: [\r\n {\r\n type: 'text',\r\n id: 'ssn',\r\n key: 'ssn',\r\n label: \"The last 4 digits of \" + (this.props.forMe ? \"your\" : \"the patient’s\") + \" Social Security Number (Optional)\",\r\n patternMatch: regex.FOUR_DIGITS,\r\n patternMatchError: \"Please enter 4 digits.\",\r\n validateOnBlur: true,\r\n validateOnChange: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n helperText: \"This is optional. This is a helpful identifier when patients have the same last name.\",\r\n onChange: (ev) => {\r\n let newValues = formatData.formatDigitString(ev.target.value, ev.target.selectionStart, 4);\r\n this.props.webAppointmentSetPatientSsn(newValues.value);\r\n return newValues;\r\n },\r\n existingContent: this.props.patient.ssn\r\n }\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n [\r\n {\r\n type: 'button',\r\n id: \"back\",\r\n className: \"btn--secondary\",\r\n value: 'Back',\r\n onClick: () => {\r\n this.props.history.goBack();\r\n }\r\n },\r\n {\r\n type: 'button',\r\n id: \"next\",\r\n className: \"btn--primary\",\r\n value: 'Next',\r\n disabled: !this.isValid(),\r\n onClick: () => {\r\n this.props.history.push(nextPage());\r\n }\r\n }\r\n ]\r\n ]\r\n }\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    {title}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nExistingPatientInfoPage.propTypes = {\r\n patient: defaultState.patientPropType,\r\n forMe: PropTypes.bool.isRequired,\r\n webAppointmentSetPatientDob: PropTypes.func.isRequired,\r\n webAppointmentSetPatientEmail: PropTypes.func.isRequired,\r\n webAppointmentSetPatientFirstName: PropTypes.func.isRequired,\r\n webAppointmentSetPatientLastName: PropTypes.func.isRequired,\r\n webAppointmentSetPatientPhone: PropTypes.func.isRequired,\r\n webAppointmentSetPatientSsn: PropTypes.func.isRequired\r\n};\r\n\r\nfunction mapStateToProps(state, ownProps) {\r\n return {\r\n patient: state.webAppointmentForm.patient,\r\n forMe: state.webAppointmentForm.forMe\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n webAppointmentSetPatientDob: (value) => dispatch(webAppointmentActions.webAppointmentSetPatientDob(value)),\r\n webAppointmentSetPatientEmail: (value) => dispatch(webAppointmentActions.webAppointmentSetPatientEmail(value)),\r\n webAppointmentSetPatientFirstName: (value) => dispatch(webAppointmentActions.webAppointmentSetPatientFirstName(value)),\r\n webAppointmentSetPatientLastName: (value) => dispatch(webAppointmentActions.webAppointmentSetPatientLastName(value)),\r\n webAppointmentSetPatientPhone: (value) => dispatch(webAppointmentActions.webAppointmentSetPatientPhone(value)),\r\n webAppointmentSetPatientSsn: (value) => dispatch(webAppointmentActions.webAppointmentSetPatientSsn(value)),\r\n };\r\n};\r\n\r\n// connects component to redux, and passes along the router\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ExistingPatientInfoPage);\r\n","import React, { Component } from 'react';\r\nimport InputList from '../../../shared/components/presentation/input-list/InputList';\r\nimport { Grid, GridItem } from '../../../shared/components/presentation/grid/Grid';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport * as webAppointmentActions from '../../actions/webAppointmentActions';\r\nimport { nextPage } from '../../functions/nextPage';\r\nimport * as defaultState from '../../constants/DefaultState';\r\n\r\nexport class AppointmentInfo1Page extends Component {\r\n\r\n isValid() {\r\n let valid = this.props.appointment.reason;\r\n return valid;\r\n }\r\n\r\n render() {\r\n const title = \"Tell us about \" + (this.props.forMe ? \"your\" : \"their\") + \" appointment needs.\";\r\n\r\n let inputlist = [\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n inputs: [\r\n {\r\n type: 'text-area',\r\n id: 'reason',\r\n className: 'text-area--block',\r\n label: 'What is the reason for this appointment?',\r\n required: true,\r\n requiredError: \"Please provide the reason for this appointment request.\",\r\n maxLength: '500',\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n useDiv: true,\r\n helperText: \"Symptoms or part of the body that is affected. 500 character limit.\",\r\n existingContent: this.props.appointment.reason || undefined,\r\n onChange: (ev) => { this.props.webAppointmentSetAppointmentReason(ev.target.value); }\r\n },\r\n {\r\n type: 'text-area',\r\n id: 'diagnosis',\r\n className: 'text-area--block',\r\n label: \"Do \" + (this.props.forMe ? \"you\" : \"they\") + \" have a diagnosis? If so, please describe. (Optional)\",\r\n maxLength: '500',\r\n useDiv: true,\r\n helperText: \"Let us know \" + (this.props.forMe ? \"your\" : \"their\") + \" diagnosis and any related imaging or testing. 500 character limit.\",\r\n existingContent: this.props.appointment.diagnosis || undefined,\r\n onChange: (ev) => { this.props.webAppointmentSetAppointmentDiagnosis(ev.target.value) }\r\n }\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n [\r\n {\r\n type: 'button',\r\n id: \"back\",\r\n className: \"btn--secondary\",\r\n value: 'Back',\r\n onClick: () => {\r\n this.props.history.goBack();\r\n }\r\n },\r\n {\r\n type: 'button',\r\n id: \"next\",\r\n className: \"btn--primary\",\r\n value: \"Next\",\r\n disabled: !this.isValid(),\r\n onClick: () => {\r\n this.props.history.push(nextPage());\r\n }\r\n }\r\n ]\r\n ]\r\n }\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    {title}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nAppointmentInfo1Page.propTypes = {\r\n appointment: defaultState.appointmentProptype,\r\n forMe: PropTypes.bool.isRequired,\r\n webAppointmentSetAppointmentReason: PropTypes.func.isRequired,\r\n webAppointmentSetAppointmentDiagnosis: PropTypes.func.isRequired\r\n};\r\n\r\nfunction mapStateToProps(state, ownProps) {\r\n return {\r\n appointment: state.webAppointmentForm.appointment,\r\n forMe: state.webAppointmentForm.forMe\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n webAppointmentSetAppointmentReason: (value) => dispatch(webAppointmentActions.webAppointmentSetAppointmentReason(value)),\r\n webAppointmentSetAppointmentDiagnosis: (value) => dispatch(webAppointmentActions.webAppointmentSetAppointmentDiagnosis(value))\r\n };\r\n};\r\n\r\n// connects component to redux, and passes along the router\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AppointmentInfo1Page);\r\n","import React, { Component } from 'react';\r\nimport InputList from '../../../shared/components/presentation/input-list/InputList';\r\nimport { Grid, GridItem } from '../../../shared/components/presentation/grid/Grid';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport * as webAppointmentActions from '../../actions/webAppointmentActions';\r\nimport * as regex from '../../../constants/regex';\r\nimport { nextPage } from '../../functions/nextPage';\r\nimport * as defaultState from '../../constants/DefaultState';\r\nimport * as strings from '../../constants/strings';\r\nimport * as formatData from '../../functions/formatData';\r\nimport { dropDownDefault } from '../../constants/webAppointmentConstants'\r\n\r\nexport class AppointmentInfo2Page extends Component {\r\n languages = [\r\n { name: 'Afrikaans', value: '1-afrikaans' },\r\n { name: 'Akan', value: '96-akan' },\r\n { name: 'Albanian', value: '2-albanian' },\r\n { name: 'Amharic', value: '3-amharic' },\r\n { name: 'Arabic', value: '4-arabic' },\r\n { name: 'Armenian', value: '69-armenian' },\r\n { name: 'Assyrian', value: '97-assyrian' },\r\n { name: 'Azerbaijani', value: '98-azerbaijani' },\r\n { name: 'Bambara', value: '102-bambara' },\r\n { name: 'Basque', value: '99-basque' },\r\n { name: 'Bedawi', value: '100-bedawi' },\r\n { name: 'Belorussian', value: '101-belorussian' },\r\n { name: 'Bengali', value: '5-bengali' },\r\n { name: 'Bokmail', value: '6-bokmail' },\r\n { name: 'Bosnian', value: '103-bosnian' },\r\n { name: 'Bulgarian', value: '7-bulgarian' },\r\n { name: 'Burmese', value: '8-burmese' },\r\n { name: 'Cajun', value: '70-cajun' },\r\n { name: 'Cambodian', value: '9-cambodian' },\r\n { name: 'Cantonese', value: '71-cantonese' },\r\n { name: 'Catalan', value: '10-catalan' },\r\n { name: 'Chaldean', value: '106-chaldean' },\r\n { name: 'Chaochow', value: '105-chaochow' },\r\n { name: 'Chavacano', value: '104-chavacano' },\r\n { name: 'Cherokee', value: '107-cherokee' },\r\n { name: 'Chinese', value: '11-chinese' },\r\n { name: 'Creole', value: '108-creole' },\r\n { name: 'Croatian', value: '12-croatian' },\r\n { name: 'Czech', value: '13-czech' },\r\n { name: 'Dakota', value: '110-dakota' },\r\n { name: 'Danish', value: '14-danish' },\r\n { name: 'Dari Persian', value: '15-dari persian' },\r\n { name: 'Diula', value: '109-diula' },\r\n { name: 'Divehi', value: '16-divehi' },\r\n { name: 'Druk Ke', value: '17-druk ke' },\r\n { name: 'Dutch', value: '18-dutch' },\r\n { name: 'English', value: '66-english', selected: true },\r\n { name: 'Estonian', value: '111-estonian' },\r\n { name: 'Ethiopian', value: '112-ethiopian' },\r\n { name: 'Farsi', value: '113-farsi' },\r\n { name: 'Fijian', value: '114-fijian' },\r\n { name: 'Finnish', value: '19-finnish' },\r\n { name: 'Flemish', value: '115-flemish' },\r\n { name: 'Formosan', value: '73-formosan' },\r\n { name: 'French', value: '20-french' },\r\n { name: 'French Canadian', value: '116-french canadian' },\r\n { name: 'French Creole', value: '74-french creole' },\r\n { name: 'Fukienese', value: '117-fukienese' },\r\n { name: 'Fushtu', value: '21-fushtu' },\r\n { name: 'Fuzhou', value: '118-fuzhou' },\r\n { name: 'Ga', value: '119-ga' },\r\n { name: 'Gaddang', value: '120-gaddang' },\r\n { name: 'Gaelic', value: '22-gaelic' },\r\n { name: 'German', value: '23-german' },\r\n { name: 'Greek', value: '24-greek' },\r\n { name: 'Gujarathi', value: '75-gujarathi' },\r\n { name: 'Haitian Creole', value: '126-haitian creole' },\r\n { name: 'Hakka', value: '123-hakka' },\r\n { name: 'Hausa', value: '121-hausa' },\r\n { name: 'Hawaiian', value: '122-hawaiian' },\r\n { name: 'Hebrew', value: '25-hebrew' },\r\n { name: 'Hindi', value: '76-hindi' },\r\n { name: 'Hindu', value: '26-hindu' },\r\n { name: 'Hmong', value: '125-hmong' },\r\n { name: 'Hokkien', value: '124-hokkien' },\r\n { name: 'Hunanese', value: '127-hunanese' },\r\n { name: 'Hungarian', value: '77-hungarian' },\r\n { name: 'Ibanag', value: '128-ibanag' },\r\n { name: 'Ibo', value: '129-ibo' },\r\n { name: 'Icelandic', value: '27-icelandic' },\r\n { name: 'Ilocano', value: '78-ilocano' },\r\n { name: 'Indian', value: '187-indian' },\r\n { name: 'Indonesian', value: '28-indonesian' },\r\n { name: 'Iranian', value: '68-iranian' },\r\n { name: 'Italian', value: '29-italian' },\r\n { name: 'Jakartanese', value: '132-jakartanese' },\r\n { name: 'Japanese', value: '30-japanese' },\r\n { name: 'Jarai', value: '130-jarai' },\r\n { name: 'Javanese', value: '131-javanese' },\r\n { name: 'Jola', value: '133-jola' },\r\n { name: 'Kanjobal', value: '134-kanjobal' },\r\n { name: 'Kannada', value: '139-kannada' },\r\n { name: 'Karen', value: '192-karen' },\r\n { name: 'Kashmiri', value: '135-kashmiri' },\r\n { name: 'Khaliji', value: '138-khaliji' },\r\n { name: 'Khmer', value: '136-khmer' },\r\n { name: 'Kikuyu', value: '137-kikuyu' },\r\n { name: 'Kinyarwand', value: '31-kinyarwand' },\r\n { name: 'Korean', value: '32-korean' },\r\n { name: 'Krio', value: '140-krio' },\r\n { name: 'Kru', value: '79-kru' },\r\n { name: 'Kurdish', value: '141-kurdish' },\r\n { name: 'Lao', value: '33-lao' },\r\n { name: 'Latvian', value: '145-latvian' },\r\n { name: 'Lingala', value: '143-lingala' },\r\n { name: 'Lithuanian', value: '80-lithuanian' },\r\n { name: 'Loaotian', value: '144-loaotian' },\r\n { name: 'Luganda', value: '142-luganda' },\r\n { name: 'Luxembourgeois', value: '146-luxembourgeois' },\r\n { name: 'Macedoniar', value: '34-macedoniar' },\r\n { name: 'Magyar', value: '35-magyar' },\r\n { name: 'Mai Mai', value: '184-mai mai' },\r\n { name: 'Malagasy', value: '37-malagasy' },\r\n { name: 'Malasy', value: '36-malasy' },\r\n { name: 'Malay, Indonesian', value: '81-malay, indonesian' },\r\n { name: 'Malayalam', value: '82-malayalam' },\r\n { name: 'Maltese', value: '38-maltese' },\r\n { name: 'Mandarin', value: '147-mandarin' },\r\n { name: 'Mandinka', value: '149-mandinka' },\r\n { name: 'Marathi', value: '83-marathi' },\r\n { name: 'Marshallese', value: '150-marshallese' },\r\n { name: 'Mien', value: '148-mien' },\r\n { name: 'Min Nan', value: '84-min nan' },\r\n { name: 'Mongolian', value: '39-mongolian' },\r\n { name: 'Moslawi', value: '151-moslawi' },\r\n { name: 'Najdi', value: '154-najdi' },\r\n { name: 'Nauran', value: '40-nauran' },\r\n { name: 'Navaho', value: '85-navaho' },\r\n { name: 'Neapolitan', value: '152-neapolitan' },\r\n { name: 'Nepali', value: '41-nepali' },\r\n { name: 'Nigerian Pidgin English', value: '153-nigerian pidgin english' },\r\n { name: 'Norwegian', value: '65-norwegian' },\r\n { name: 'Nynorak', value: '42-nynorak' },\r\n { name: 'Oromo', value: '155-oromo' },\r\n { name: 'Pakistani', value: '160-pakistani' },\r\n { name: 'Pampangan', value: '156-pampangan' },\r\n { name: 'Pangasinan', value: '157-pangasinan' },\r\n { name: 'Panjabi', value: '86-panjabi' },\r\n { name: 'Papiamento', value: '158-papiamento' },\r\n { name: 'Papuan Languages', value: '43-papuan languages' },\r\n { name: 'Pashto', value: '191-pashto' },\r\n { name: 'Pennsylvania-Dutch', value: '87-pennsylvania-dutch' },\r\n { name: 'Persian', value: '44-persian' },\r\n { name: 'Pidgin English', value: '159-pidgin english' },\r\n { name: 'Po An', value: '161-po an' },\r\n { name: 'Polish', value: '45-polish' },\r\n { name: 'Portugese', value: '46-portugese' },\r\n { name: 'Protuguese Creole', value: '163-protuguese creole' },\r\n { name: 'Pushto', value: '162-pushto' },\r\n { name: 'Qatari', value: '165-qatari' },\r\n { name: 'Quechuna', value: '164-quechuna' },\r\n { name: 'Quiche', value: '166-quiche' },\r\n { name: 'Rhade', value: '167-rhade' },\r\n { name: 'Romanian', value: '47-romanian' },\r\n { name: 'Russian', value: '48-russian' },\r\n { name: 'Ruthian', value: '188-ruthian' },\r\n { name: 'Samoan', value: '89-samoan' },\r\n { name: 'Serbcroatian', value: '90-serbcroatian' },\r\n { name: 'Serbian', value: '173-serbian' },\r\n { name: 'Shanghai', value: '169-shanghai' },\r\n { name: 'Sicilian', value: '170-sicilian' },\r\n { name: 'Sindhi', value: '172-sindhi' },\r\n { name: 'Sinhala', value: '50-sinhala' },\r\n { name: 'Sioux', value: '171-sioux' },\r\n { name: 'Siswati', value: '51-siswati' },\r\n { name: 'Slovak', value: '53-slovak' },\r\n { name: 'Slovene', value: '52-slovene' },\r\n { name: 'Somalia', value: '185-somalia' },\r\n { name: 'Somoan', value: '54-somoan' },\r\n { name: 'Spanish', value: '55-spanish' },\r\n { name: 'Sudanese', value: '174-sudanese' },\r\n { name: 'Swahili', value: '56-swahili' },\r\n { name: 'Swedish', value: '57-swedish' },\r\n { name: 'Syriac', value: '95-syriac' },\r\n { name: 'Szechuan', value: '168-szechuan' },\r\n { name: 'Tagalog-Filipino ', value: '58-tagalog-filipino ' },\r\n { name: 'Taiwanese', value: '177-taiwanese' },\r\n { name: 'Tamil', value: '92-tamil' },\r\n { name: 'Thai', value: '59-thai' },\r\n { name: 'Tibetian', value: '60-tibetian' },\r\n { name: 'Tongan', value: '61-tongan' },\r\n { name: 'Toucouleur', value: '175-toucouleur' },\r\n { name: 'Tshiluba', value: '176-tshiluba' },\r\n { name: 'Turkish', value: '62-turkish' },\r\n { name: 'Ukranian', value: '93-ukranian' },\r\n { name: 'Urdu', value: '63-urdu' },\r\n { name: 'Vietnamese', value: '64-vietnamese' },\r\n { name: 'Visayan', value: '178-visayan' },\r\n { name: 'Wolof', value: '179-wolof' },\r\n { name: 'Xhosa', value: '180-xhosa' },\r\n { name: 'Yiddish', value: '94-yiddish' },\r\n { name: 'Yoruba', value: '181-yoruba' },\r\n { name: 'Yugoslavian', value: '182-yugoslavian' },\r\n { name: 'Zulu', value: '183-zulu' },\r\n ];\r\n\r\n isValid() {\r\n let valid = (\r\n this.props.appointment.translationInterpretationServices.needServices !== null &&\r\n this.props.appointment.referringPhysician.haveReferringPhys !== null &&\r\n this.props.appointment.translationInterpretationServices.language\r\n );\r\n\r\n if (this.props.appointment.translationInterpretationServices.needServices) {\r\n valid = valid && this.props.appointment.translationInterpretationServices.whichService;\r\n }\r\n\r\n if (this.props.appointment.referringPhysician.haveReferringPhys) {\r\n valid = (\r\n valid &&\r\n this.props.appointment.referringPhysician.firstName &&\r\n this.props.appointment.referringPhysician.lastName &&\r\n this.props.appointment.referringPhysician.phone &&\r\n this.props.appointment.referringPhysician.phone.match(regex.NUMERIC_PHONE_NUMBER_REGEX)\r\n );\r\n }\r\n\r\n return !!valid;\r\n }\r\n\r\n render() {\r\n const title = \"Tell us about \" + (this.props.forMe ? \"your\" : \"their\") + \" appointment needs (cont.).\";\r\n\r\n //sets preferred language by default if selected\r\n if (!this.props.appointment.translationInterpretationServices.language && this.languages.find(l => l.selected === true)) {\r\n this.props.webAppointmentSetAppointmentForeignLanguage(this.languages.find(l => l.selected === true).name);\r\n }\r\n\r\n let inputlist = [\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n inputs: [\r\n {\r\n type: 'radio-list',\r\n id: 'need-services',\r\n groupName: 'need-services',\r\n legend: 'Do ' + (this.props.forMe ? \"you\" : \"they\") + ' need interpretation services?',\r\n required: true,\r\n onChange: (ev) => { this.props.webAppointmentSetAppointmentNeedServices(ev.target.value === \"yes\"); },\r\n radioWrapperClassName: 'radio-button-inline radio-button-bold',\r\n radioProps: [\r\n {\r\n id: \"yes-need-interpreter\",\r\n label: \"Yes\",\r\n value: \"yes\",\r\n checked: this.props.appointment.translationInterpretationServices.needServices\r\n },\r\n {\r\n id: \"no-need-interpreter\",\r\n label: \"No\",\r\n value: \"no\",\r\n checked: !this.props.appointment.translationInterpretationServices.needServices\r\n }\r\n ]\r\n },\r\n this.props.appointment.translationInterpretationServices.needServices ?\r\n {\r\n type: 'radio-list',\r\n id: 'which-services',\r\n groupName: 'what-services',\r\n legend: 'Please indicate which service ' + (this.props.forMe ? \"you\" : \"they\") + ' need.',\r\n required: true,\r\n onChange: (ev) => { this.props.webAppointmentSetAppointmentWhichService(ev.target.value); },\r\n radioWrapperClassName: 'radio-button-inline radio-button-bold',\r\n radioProps: [\r\n {\r\n id: \"asl-service\",\r\n label: \"ASL interpretation\",\r\n value: strings.ASL,\r\n checked: this.props.appointment.translationInterpretationServices.whichService === strings.ASL\r\n },\r\n {\r\n id: \"interpretation-service\",\r\n label: strings.FOREIGN_LANGUAGE_INTERPRETATION,\r\n value: strings.FOREIGN_LANGUAGE_INTERPRETATION,\r\n checked: this.props.appointment.translationInterpretationServices.whichService === strings.FOREIGN_LANGUAGE_INTERPRETATION\r\n }\r\n ]\r\n } : null,\r\n {\r\n type: 'select',\r\n id: 'foreign-language',\r\n key: 'foreign-language',\r\n label: 'What is ' + (this.props.forMe ? \"your\" : \"their\") + ' primary language?',\r\n required: true,\r\n requiredError: 'Please enter ' + (this.props.forMe ? \"your\" : \"their\") + ' primary language.',\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n onChange: (value) => {\r\n value = this.languages.find(l => l.value === value);\r\n this.props.webAppointmentSetAppointmentForeignLanguage(value === this.languages.find(l => l.selected === true) ?\r\n this.languages.find(l => l.selected === true).name : value.name);\r\n },\r\n existingContent: this.props.appointment.translationInterpretationServices.language ?\r\n this.props.appointment.translationInterpretationServices.language.value :\r\n this.languages.find(l => l.selected === true).value,\r\n options: this.languages\r\n },\r\n {\r\n type: 'radio-list',\r\n id: 'referred-by-physician',\r\n groupName: 'referred-by-physician',\r\n legend: 'Were ' + (this.props.forMe ? \"you\" : \"they\") + ' referred by a physician?',\r\n required: true,\r\n onChange: (ev) => { this.props.webAppointmentSetAppointmentHaveReferringPhys(ev.target.value === \"yes\"); },\r\n helperText: 'Please check with ' + (this.props.forMe ? \"your\" : \"their\") + ' insurance company to find out if a referral is needed. If you’re scheduling an appointment in Nevada, a referral is required.',\r\n radioWrapperClassName: 'radio-button-inline radio-button-bold',\r\n radioProps: [\r\n {\r\n id: \"yes-referred\",\r\n label: \"Yes\",\r\n value: \"yes\",\r\n checked: this.props.appointment.referringPhysician.haveReferringPhys\r\n },\r\n {\r\n id: \"no-referred\",\r\n label: \"No\",\r\n value: \"no\",\r\n checked: !this.props.appointment.referringPhysician.haveReferringPhys\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 2,\r\n inputs: [\r\n [\r\n this.props.appointment.referringPhysician.haveReferringPhys ? {\r\n type: 'text',\r\n id: 'firstName',\r\n label: \"Physician’s first name\",\r\n required: true,\r\n requiredError: \"Please enter the physician’s first name.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n onChange: (ev) => { this.props.webAppointmentSetAppointmentReferringPhysFName(ev.target.value); },\r\n existingContent: this.props.appointment.referringPhysician.firstName || undefined,\r\n maxLength: '140'\r\n } : null\r\n ],\r\n [\r\n this.props.appointment.referringPhysician.haveReferringPhys ? {\r\n type: 'text',\r\n id: 'lastName',\r\n label: \"Physician’s last name\",\r\n required: true,\r\n requiredError: \"Please enter the physician’s last name.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n onChange: (ev) => { this.props.webAppointmentSetAppointmentReferringPhysLName(ev.target.value); },\r\n existingContent: this.props.appointment.referringPhysician.lastName || undefined,\r\n maxLength: '140'\r\n } : null\r\n ]\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 2,\r\n inputs: [\r\n [\r\n this.props.appointment.referringPhysician.haveReferringPhys ? {\r\n type: 'text',\r\n id: 'phone',\r\n label: \"Physician’s phone number\",\r\n required: true,\r\n requiredError: \"Please enter the physician’s phone number with the area code.\",\r\n patternMatch: regex.NUMERIC_PHONE_NUMBER_REGEX,\r\n patternMatchError: \"Please enter the physician’s phone number with the area code.\",\r\n validateOnBlur: true,\r\n validateOnChange: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n onChange: (ev) => {\r\n let newValues = formatData.formatPhone(ev.target.value, ev.target.selectionStart);\r\n this.props.webAppointmentSetAppointmentReferringPhysPhone(newValues.value);\r\n return newValues;\r\n },\r\n existingContent: this.props.appointment.referringPhysician.phone,\r\n maxLength: '14'\r\n } : null\r\n ]\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n [\r\n {\r\n type: 'button',\r\n id: \"back\",\r\n className: \"btn--secondary\",\r\n value: 'Back',\r\n onClick: () => {\r\n this.props.history.goBack();\r\n }\r\n },\r\n {\r\n type: 'button',\r\n id: \"next\",\r\n className: \"btn--primary\",\r\n value: \"Next\",\r\n disabled: !this.isValid(),\r\n onClick: () => {\r\n this.props.history.push(nextPage());\r\n }\r\n }\r\n ]\r\n ]\r\n }\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    {title}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nAppointmentInfo2Page.propTypes = {\r\n appointment: defaultState.appointmentProptype,\r\n forMe: PropTypes.bool.isRequired,\r\n webAppointmentSetAppointmentHaveReferringPhys: PropTypes.func.isRequired,\r\n webAppointmentSetAppointmentNeedServices: PropTypes.func.isRequired,\r\n webAppointmentSetAppointmentWhichService: PropTypes.func.isRequired,\r\n webAppointmentSetAppointmentForeignLanguage: PropTypes.func.isRequired,\r\n webAppointmentSetAppointmentReferringPhysFName: PropTypes.func.isRequired,\r\n webAppointmentSetAppointmentReferringPhysLName: PropTypes.func.isRequired,\r\n webAppointmentSetAppointmentReferringPhysPhone: PropTypes.func.isRequired\r\n};\r\n\r\nfunction mapStateToProps(state, ownProps) {\r\n return {\r\n appointment: state.webAppointmentForm.appointment,\r\n forMe: state.webAppointmentForm.forMe\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n webAppointmentSetAppointmentNeedServices: (value) => dispatch(webAppointmentActions.webAppointmentSetAppointmentNeedServices(value)),\r\n webAppointmentSetAppointmentWhichService: (value) => dispatch(webAppointmentActions.webAppointmentSetAppointmentWhichService(value)),\r\n webAppointmentSetAppointmentForeignLanguage: (value) => dispatch(webAppointmentActions.webAppointmentSetAppointmentForeignLanguage(value)),\r\n webAppointmentSetAppointmentHaveReferringPhys: (value) => dispatch(webAppointmentActions.webAppointmentSetAppointmentHaveReferringPhys(value)),\r\n webAppointmentSetAppointmentReferringPhysFName: (value) => dispatch(webAppointmentActions.webAppointmentSetAppointmentReferringPhysFName(value)),\r\n webAppointmentSetAppointmentReferringPhysLName: (value) => dispatch(webAppointmentActions.webAppointmentSetAppointmentReferringPhysLName(value)),\r\n webAppointmentSetAppointmentReferringPhysPhone: (value) => dispatch(webAppointmentActions.webAppointmentSetAppointmentReferringPhysPhone(value))\r\n };\r\n};\r\n\r\n// connects component to redux, and passes along the router\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AppointmentInfo2Page);\r\n","import axios from 'axios';\r\nimport * as keys from '../../config/apiKeys';\r\n\r\n// Returns a promise that will ether resolve or reject.\r\nexport default function apiPost(apiUrl, data, options, skipAuthAndUserToken, contentType, skipKey) {\r\n\r\n if (!data) {\r\n return new Promise((resolve, reject) => {\r\n reject(\"null or undefined data in API post.\");\r\n })\r\n }\r\n\r\n options = options || {};\r\n options.headers = options.headers || {};\r\n if (!skipKey) {\r\n options.headers['api_key'] = options.headers['api_key'] || keys.MYAPI_KEY;\r\n }\r\n options.headers['Content-Type'] = 'application/json';\r\n\r\n if (!skipAuthAndUserToken) {\r\n options.headers['Authorization'] = 'Bearer ' + localStorage.getItem('token');\r\n }\r\n\r\n if (contentType) {\r\n options.headers['Content-Type'] = contentType;\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n var url = window.location.protocol + \"//\" + window.location.host + apiUrl;\r\n axios.post(url, data, options)\r\n .then((response) => {\r\n resolve(response);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Grid, GridItem } from '../../../shared/components/presentation/grid/Grid';\r\nimport InputList from '../../../shared/components/presentation/input-list/InputList';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport * as webAppointmentActions from '../../actions/webAppointmentActions';\r\nimport { nextPage } from '../../functions/nextPage';\r\nimport * as defaultState from '../../constants/DefaultState';\r\nimport { dropDownDefault } from '../../constants/webAppointmentConstants';\r\nimport apiGet from '../../../shared/functions/apiGet';\r\nimport apiPost from '../../../shared/functions/apiPost';\r\n\r\nexport class AppointmentPreferencesPage extends Component {\r\n // Set the list of specialties and departments to a reasonable default,\r\n // just in case the API call doesn't work.\r\n specialtiesAndDepartments = [\r\n { name: dropDownDefault, value: undefined },\r\n { value: '6089AB2E-5F33-49E3-B1F1-5D4B8E9A01A6', name: 'Brain Tumor & Neuro-Oncology' },\r\n { value: '9B5B51AA-8DDA-4C79-B683-4EFF784A44DF', name: 'Dementia & Memory Decline' },\r\n { value: 'CE901088-5837-4B03-9B48-211971307C28', name: 'Epilepsy & Seizures' },\r\n { value: 'ECA3733A-27B3-4721-A454-67B25E3C815E', name: 'General Neurology' },\r\n { value: '5E103185-BFAB-43B4-8CC6-3BC4678BACF8', name: 'Headache & Facial Pain' },\r\n { value: 'BB1FB06C-4D80-4302-938E-D15F83920AF0', name: 'Movement Disorders (Parkinson\\'s disease & tremors)' },\r\n { value: '1E61F3A6-95BD-473A-9D11-DFCECF281CA3', name: 'Multiple Sclerosis' },\r\n { value: '2E2CBFDF-35A9-4237-84D6-4ABFEA6C2196', name: 'Orthopaedics' },\r\n { value: '8D2975BC-F60A-4D88-B0B1-E05CAC46ACE7', name: 'Physical & Occupational Therapy (adult)' },\r\n { value: 'A28F3693-0555-47BF-B0FC-D2616E4A94DA', name: 'Podiatry' },\r\n { value: 'A0DC3A78-D933-4B62-A8BC-916DC698F547', name: 'Psychiatry/Psychology (adult)' },\r\n { value: 'D6593011-014C-4F13-99E1-5AEE9F53E830', name: 'Psychiatry/Psychology (pediatric)' },\r\n { value: 'CD915B33-FAA3-43B4-9FDC-B1839A7305FF', name: 'Rheumatology' },\r\n { value: '21957237-2E80-49FB-923C-603F05D4E110', name: 'Sleep Medicine' },\r\n { value: '9E6388F6-C876-4FC1-A5A6-1CB687353DB9', name: 'Spine Health (back & neck pain)' },\r\n { value: 'C3399F62-7EE3-486D-B77F-7B144044BEDE', name: 'Sports Medicine' }\r\n ];\r\n\r\n locations = [{ name: dropDownDefault, value: undefined }];\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {rerender: 1};\r\n }\r\n\r\n checkGuidFormat(guids) {\r\n guids.forEach((guid, index, array) => {\r\n if (typeof guid !== \"string\") {\r\n console.log(\"Element \" + index + \" of the department GUID array is not a string: \" + guid);\r\n return\r\n }\r\n let g = guid; // Make a temporary working copy of the GUID.\r\n if (!g.match(/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/)) {\r\n g = g.replace(/[^0-9A-Fa-f]/g, '');\r\n if (g.length === 32) {\r\n g = g.substring(0, 8) + '-' + g.substring(8, 12) + '-' + g.substring(12, 16) + '-' + g.substring(16, 20) + '-' + g.substring(20, 32);\r\n console.log(\"Deprtment GUID \" + guid + \" is not correctly formatted but was updated to \" + g);\r\n array[index] = g;\r\n }\r\n else {\r\n console.log(\"Deprtment GUID \" + guid + \" is not correctly formatted and is unfixable.\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n // API interfaces.\r\n\r\n getDepartments = () => {\r\n //https://my.clevelandclinic.org/api/sitecore/WebAppointment/GetDepartments\r\n // \"data\" should be a serialized array of department GUID strings.\r\n let data = null;\r\n if (!document.webappointmentReactParameters ||\r\n typeof document.webappointmentReactParameters !== \"object\" ||\r\n !document.webappointmentReactParameters[\"department-list\"] ||\r\n typeof document.webappointmentReactParameters[\"department-list\"] !== \"object\" ||\r\n !Array.isArray(document.webappointmentReactParameters[\"department-list\"])) {\r\n console.log(\"The list of department GUIDs is not correctly specified.\");\r\n return;\r\n }\r\n\r\n this.checkGuidFormat(document.webappointmentReactParameters[\"department-list\"]);\r\n data = JSON.stringify(document.webappointmentReactParameters[\"department-list\"]);\r\n return new Promise((resolve, reject) => {\r\n apiPost(\"/api/sitecore/WebAppointment/GetDepartments\", data, null, true, \"application/json\", true)\r\n .then((depts) => {\r\n resolve(depts);\r\n })\r\n .catch((error) => {\r\n // make no changes if we error.\r\n });\r\n });\r\n }\r\n\r\n getLocationsForDepartment = (deptUid) => {\r\n //https://my.clevelandclinic.org/api/sitecore/WebAppointment/GetLocations?DepartmentUid=50616e5a-8fa5-4d85-890d-00f8cca5a3bd\r\n let options = { params: { DepartmentUid: deptUid } };\r\n return new Promise((resolve, reject) => {\r\n apiGet(\"/api/sitecore/webappointment/getlocations\", options, null, null, null, false, false, true)\r\n .then((locations) => {\r\n resolve(locations);\r\n })\r\n .catch((error) => {\r\n // restore default if we error\r\n let locations = [];\r\n resolve(locations);\r\n });\r\n });\r\n }\r\n\r\n fillDepartments() {\r\n this.getDepartments()\r\n .then((depts) => {\r\n // process 'depts' - i.e. save locally so that render() can get to them.\r\n this.specialtiesAndDepartments = depts.data.map(l => {\r\n return { value: l.Value, name: l.Text };\r\n }).sort((d1, d2) => {\r\n return d1.name === d2.name ? 0 : d1.name < d2.name ? -1 : 1;\r\n });\r\n this.specialtiesAndDepartments.unshift({ name: dropDownDefault, value: undefined });\r\n\r\n // Tweak the state just enough to call render() again.\r\n this.setState((prevState) => { return { rerender: prevState.rerender + 1 }; });\r\n });\r\n }\r\n\r\n fillLocations(deptGuid) {\r\n if (this.props.appointment.department) {\r\n this.getLocationsForDepartment(deptGuid)\r\n .then((locations) => {\r\n // process 'locations' - i.e. save locally so that render() can get to them.\r\n this.locations = locations.map(l => {\r\n return { value: l.Value, name: l.Text };\r\n }).filter(l => !l.name.includes(\"Canada\"));\r\n this.locations.unshift({ name: dropDownDefault, value: undefined });\r\n // Tweak the state just enough to call render() again.\r\n this.setState((prevState) => { return { rerender: prevState.rerender + 1 }; });\r\n });\r\n }\r\n else {\r\n this.locations = [{ name: dropDownDefault, value: undefined }];\r\n // Tweak the state just enough to call render() again.\r\n this.setState((prevState) => { return { rerender: prevState.rerender + 1 }; });\r\n }\r\n }\r\n\r\n // Lifecycle Methods:\r\n componentDidUpdate(prevProps, prevState) {\r\n // If the department changed, then reretrieve the list of locations.\r\n if (this.props.appointment.department !== prevProps.appointment.department) {\r\n this.fillLocations(this.props.appointment.department.split(\"|\")[0])\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.fillDepartments();\r\n if (this.props.appointment.department) {\r\n this.fillLocations(this.props.appointment.department.split(\"|\")[0])\r\n }\r\n }\r\n\r\n isValid() {\r\n let valid = (\r\n this.props.appointment.department &&\r\n this.props.appointment.location\r\n );\r\n return !!valid;\r\n }\r\n\r\n render() {\r\n const title = \"What are \" + (this.props.forMe ? \"your\" : \"their\") + \" appointment preferences?\";\r\n const paragraph = \"We’ll do our best to accommodate \" + (this.props.forMe ? \"your\" : \"their\") + \" visit preferences, but may not be able to meet all of \" + (this.props.forMe ? \"your\" : \"their\") + \" requests.\";\r\n\r\n let inputlist = [\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n inputs: [\r\n {\r\n type: 'select',\r\n id: 'department',\r\n key: 'department-',\r\n label: 'Which specialty area or department best matches ' + (this.props.forMe ? \"your\" : \"their\") + ' need?',\r\n required: true,\r\n requiredError: \"Please enter a specialty area of department.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n onChange: (value) => {\r\n let selectedOption = this.specialtiesAndDepartments.find(d => d.value === value);\r\n if (!selectedOption) {\r\n selectedOption = this.specialtiesAndDepartments[0];\r\n value = undefined;\r\n }\r\n // Find the first (and only, I would hope) department with that GUID.\r\n let deptName = selectedOption.name;\r\n this.props.webAppointmentSetAppointmentDepartment(value ? (value + \"|\" + deptName) : \"\");\r\n },\r\n helperText: \"This helps us identify the right provider for the appointment.\",\r\n existingContent: this.props.appointment.department ? this.props.appointment.department.split(\"|\")[0] : undefined,\r\n options: this.specialtiesAndDepartments\r\n },\r\n {\r\n type: 'select',\r\n id: 'location',\r\n key: 'location-' + Math.random(),\r\n label: \"Choose a location that’s convenient for \" + (this.props.forMe ? \"you\" : \"them\") + \".\",\r\n required: true,\r\n requiredError: \"Please choose a location.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n helperText: \"These locations have the specialty selected above.\",\r\n onChange: (value) => {\r\n let selectedOption = this.locations.find(l => l.value === value);\r\n if (!selectedOption) {\r\n selectedOption = this.locations[0];\r\n value = undefined;\r\n }\r\n // Find the first (and only, I would hope) location with that GUID.\r\n let locName = selectedOption.name;\r\n this.props.webAppointmentSetAppointmentLocation(value ? (value + \"|\" + locName) : \"\");\r\n },\r\n existingContent: this.props.appointment.location ? this.props.appointment.location.split(\"|\")[0] : undefined,\r\n options: this.locations\r\n },\r\n ],\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order\",\r\n inputs: [\r\n [\r\n {\r\n type: 'button',\r\n id: \"back\",\r\n className: \"btn--secondary\",\r\n value: 'Back',\r\n onClick: () => {\r\n this.props.history.goBack();\r\n }\r\n },\r\n {\r\n type: 'button',\r\n id: \"next\",\r\n className: \"btn--primary\",\r\n value: \"Next\",\r\n disabled: !this.isValid(),\r\n onClick: () => {\r\n this.props.history.push(nextPage());\r\n }\r\n }\r\n ]\r\n ]\r\n }\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    {title}

    \r\n

    {paragraph}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nAppointmentPreferencesPage.propTypes = {\r\n webAppointmentSetAppointmentDepartment: PropTypes.func.isRequired,\r\n webAppointmentSetAppointmentLocation: PropTypes.func.isRequired,\r\n appointment: defaultState.appointmentProptype,\r\n forMe: PropTypes.bool.isRequired\r\n};\r\n\r\nfunction mapStateToProps(state, ownProps) {\r\n return {\r\n appointment: state.webAppointmentForm.appointment,\r\n forMe: state.webAppointmentForm.forMe\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n webAppointmentSetAppointmentDepartment: (value) => dispatch(webAppointmentActions.webAppointmentSetAppointmentDepartment(value)),\r\n webAppointmentSetAppointmentLocation: (value) => dispatch(webAppointmentActions.webAppointmentSetAppointmentLocation(value)),\r\n };\r\n};\r\n\r\n// connects component to redux, and passes along the router\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AppointmentPreferencesPage);\r\n","import React, { Component } from \"react\";\r\nimport { Grid, GridItem } from \"../../../shared/components/presentation/grid/Grid\";\r\nimport InputList from \"../../../shared/components/presentation/input-list/InputList\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport * as webAppointmentActions from \"../../actions/webAppointmentActions\";\r\nimport { nextPage } from \"../../functions/nextPage\";\r\nimport * as defaultState from \"../../constants/DefaultState\";\r\n\r\nexport class AppointmentProviderPage extends Component {\r\n isValid() {\r\n let valid = this.props.appointment.type;\r\n return !!valid;\r\n }\r\n\r\n componentDidMount() {\r\n if (!this.props.appointment.type) {\r\n this.props.webAppointmentSetAppointmentType(\"In-office\");\r\n }\r\n }\r\n\r\n render() {\r\n const title = \"Is there a provider or visit type \" + (this.props.forMe ? \"you\" : \"they\") + \" would prefer?\";\r\n\r\n let inputlist = [\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n inputs: [\r\n {\r\n type: \"text\",\r\n id: \"preferredProvider\",\r\n label: \"Is there a preferred provider \" + (this.props.forMe ? \"you\" : \"they\") + \"’d like to see? If so, enter their name below. (Optional)\",\r\n helperText: \"This helps us identify the right provider for the appointment.\",\r\n onChange: (ev) => {\r\n this.props.webAppointmentSetAppointmentProvider(ev.target.value);\r\n },\r\n existingContent: this.props.appointment.provider || undefined,\r\n maxLength: \"140\"\r\n },\r\n {\r\n type: \"radio-list\",\r\n id: \"appointment-type\",\r\n groupName: \"appointment-type\",\r\n legend: \"What kind of visit is preferred?\",\r\n helperText: \"Not all providers offer virtual visits.\",\r\n required: true,\r\n onChange: (ev) => {\r\n this.props.webAppointmentSetAppointmentType(ev.target.value);\r\n },\r\n radioWrapperClassName: \"radio-button-inline radio-button-bold\",\r\n radioProps: [\r\n {\r\n id: \"in-office-visit\",\r\n label: \"In-office\",\r\n value: \"In-office\",\r\n checked: this.props.appointment.type === \"In-office\"\r\n },\r\n {\r\n id: \"virtual-visit\",\r\n label: \"Virtual (if available)\",\r\n value: \"Virtual\",\r\n checked: this.props.appointment.type === \"Virtual\"\r\n },\r\n {\r\n id: \"doesnt-matter-visit\",\r\n label: \"Doesn’t matter\",\r\n value: \"Doesn’t matter - either in-office or virtual (if available)\",\r\n checked: this.props.appointment.type === \"Doesn’t matter - either in-office or virtual (if available)\"\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n [\r\n {\r\n type: \"button\",\r\n id: \"back\",\r\n className: \"btn--secondary\",\r\n value: \"Back\",\r\n onClick: () => {\r\n this.props.history.goBack();\r\n }\r\n },\r\n {\r\n type: \"button\",\r\n id: \"next\",\r\n className: \"btn--primary\",\r\n value: \"Next\",\r\n disabled: !this.isValid(),\r\n onClick: () => {\r\n this.props.history.push(nextPage());\r\n }\r\n }\r\n ]\r\n ]\r\n }\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    {title}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nAppointmentProviderPage.propTypes = {\r\n webAppointmentSetAppointmentProvider: PropTypes.func.isRequired,\r\n webAppointmentSetAppointmentType: PropTypes.func.isRequired,\r\n appointment: defaultState.appointmentProptype,\r\n forMe: PropTypes.bool.isRequired\r\n};\r\n\r\nfunction mapStateToProps(state, ownProps) {\r\n return {\r\n appointment: state.webAppointmentForm.appointment,\r\n forMe: state.webAppointmentForm.forMe\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n webAppointmentSetAppointmentProvider: (value) => dispatch(webAppointmentActions.webAppointmentSetAppointmentProvider(value)),\r\n webAppointmentSetAppointmentType: (value) => dispatch(webAppointmentActions.webAppointmentSetAppointmentType(value))\r\n };\r\n};\r\n\r\n// connects component to redux, and passes along the router\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AppointmentProviderPage);\r\n","import React, { Component } from 'react';\r\nimport InputList from '../../../shared/components/presentation/input-list/InputList';\r\nimport { Grid, GridItem } from '../../../shared/components/presentation/grid/Grid';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport * as webAppointmentActions from '../../actions/webAppointmentActions';\r\nimport { nextPage } from '../../functions/nextPage';\r\nimport * as defaultState from '../../constants/DefaultState';\r\n\r\nexport class AppointmentDayTimePage extends Component {\r\n\r\n isValid() {\r\n return true;\r\n }\r\n\r\n render() {\r\n const title = \"What day and time work best for \" + (this.props.forMe ? \"you\" : \"them\") + \"?\";\r\n\r\n let inputlist = [\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n inputs: [\r\n {\r\n type: 'checkbox-list',\r\n id: 'preferred-days',\r\n groupName: 'preferred-days',\r\n legend: 'Preferred day',\r\n onChange: (ev) => {\r\n // The checked checkboxes are stored as bits in a single integer:\r\n // Mon-1, Tue-2, Wed-4, Thur-8, Fri-16.\r\n // When one of the checkboxes is updated, flip (do an XOR (^) on)\r\n // the corresponding bit. When all the bits are 0, the whole\r\n // number is 0, which indicates, \"first available. Checking\r\n // first available will set the number to 0, which will uncheck\r\n // the individual day checkboxes.\r\n let newDays = ev.target.value === \"0\" ? 0 : (this.props.appointment.day ^ JSON.parse(ev.target.value));\r\n this.props.webAppointmentSetAppointmentDay(newDays);\r\n },\r\n checkboxProps: [\r\n {\r\n label: \"Monday\",\r\n id: \"prefer-monday\",\r\n value: \"1\",\r\n checked: !!(this.props.appointment.day & 1),\r\n checkboxWrapperClassName: \"checkbox-wrapper\"\r\n },\r\n {\r\n label: \"Tuesday\",\r\n id: \"prefer-tuesday\",\r\n value: \"2\",\r\n checked: !!(this.props.appointment.day & 2),\r\n checkboxWrapperClassName: \"checkbox-wrapper\"\r\n },\r\n {\r\n label: \"Wednesday\",\r\n id: \"prefer-wednesday\",\r\n value: \"4\",\r\n checked: !!(this.props.appointment.day & 4),\r\n checkboxWrapperClassName: \"checkbox-wrapper\"\r\n },\r\n {\r\n label: \"Thursday\",\r\n id: \"prefer-tursday\",\r\n value: \"8\",\r\n checked: !!(this.props.appointment.day & 8),\r\n checkboxWrapperClassName: \"checkbox-wrapper\"\r\n },\r\n {\r\n label: \"Friday\",\r\n id: \"prefer-friday\",\r\n value: \"16\",\r\n checked: !!(this.props.appointment.day & 16),\r\n checkboxWrapperClassName: \"checkbox-wrapper\"\r\n },\r\n {\r\n label: \"First available\",\r\n id: \"prefer-no-pref\",\r\n value: \"0\",\r\n checked: this.props.appointment.day === 0,\r\n checkboxWrapperClassName: \"checkbox-wrapper\"\r\n }\r\n ]\r\n },\r\n {\r\n type: 'checkbox-list',\r\n id: 'preferred-times',\r\n groupName: 'preferred-times',\r\n legend: 'Preferred time of day',\r\n onChange: (ev) => {\r\n // See the comment above for the preferred days. This works\r\n // the same but with only two bits.\r\n let newTimes = ev.target.value === \"0\" ? 0 : (this.props.appointment.time ^ JSON.parse(ev.target.value));\r\n this.props.webAppointmentSetAppointmentTime(newTimes);\r\n },\r\n checkboxProps: [\r\n {\r\n label: \"AM\",\r\n id: \"prefer-am\",\r\n value: \"1\",\r\n checked: !!(this.props.appointment.time & 1),\r\n checkboxWrapperClassName: \"checkbox-wrapper\"\r\n },\r\n {\r\n label: \"PM\",\r\n id: \"prefer-PM\",\r\n value: \"2\",\r\n checked: !!(this.props.appointment.time & 2),\r\n checkboxWrapperClassName: \"checkbox-wrapper\"\r\n },\r\n {\r\n label: \"First available\",\r\n id: \"prefer-time-no-pref\",\r\n value: \"0\",\r\n checked: this.props.appointment.time === 0,\r\n checkboxWrapperClassName: \"checkbox-wrapper\"\r\n }\r\n ]\r\n },\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n [\r\n {\r\n type: 'button',\r\n id: \"back\",\r\n className: \"btn--secondary\",\r\n value: 'Back',\r\n onClick: () => {\r\n this.props.history.goBack();\r\n }\r\n },\r\n {\r\n type: 'button',\r\n id: \"next\",\r\n className: \"btn--primary\",\r\n value: \"Next\",\r\n disabled: !this.isValid(),\r\n onClick: () => {\r\n this.props.history.push(nextPage());\r\n }\r\n }\r\n ]\r\n ]\r\n }\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    {title}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nAppointmentDayTimePage.propTypes = {\r\n appointment: defaultState.appointmentProptype,\r\n forMe: PropTypes.bool.isRequired,\r\n webAppointmentSetAppointmentDay: PropTypes.func.isRequired,\r\n webAppointmentSetAppointmentTime: PropTypes.func.isRequired\r\n};\r\n\r\nfunction mapStateToProps(state, ownProps) {\r\n return {\r\n appointment: state.webAppointmentForm.appointment,\r\n forMe: state.webAppointmentForm.forMe\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n webAppointmentSetAppointmentDay: (value) => dispatch(webAppointmentActions.webAppointmentSetAppointmentDay(value)),\r\n webAppointmentSetAppointmentTime: (value) => dispatch(webAppointmentActions.webAppointmentSetAppointmentTime(value)),\r\n };\r\n};\r\n\r\n// connects component to redux, and passes along the router\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AppointmentDayTimePage);\r\n","import React, { Component } from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport InputList from '../../../shared/components/presentation/input-list/InputList';\r\nimport { Grid, GridItem } from '../../../shared/components/presentation/grid/Grid';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport * as webAppointmentActions from '../../actions/webAppointmentActions';\r\nimport { nextPage } from '../../functions/nextPage';\r\nimport './PaymentMethodPage.scss';\r\n\r\nexport class PaymentMethodPage extends Component {\r\n render() {\r\n const title = \"What is the method of payment?\";\r\n\r\n let inputlist = [\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"icon-button-order\",\r\n inputs: [\r\n {\r\n type: 'icon-button',\r\n id: \"insurance-method\",\r\n className: \"btn--icon btn--insurance\",\r\n icon: \"insurance\",\r\n value: \"Insurance\",\r\n onClick: () => {\r\n this.props.webAppointmentSetPaymentMethod(\"insurance\");\r\n this.props.history.push(nextPage(null, { paymentMethod: \"insurance\" }));\r\n }\r\n },\r\n {\r\n type: 'icon-button',\r\n id: \"out-of-pocket-method\",\r\n className: \"btn--icon btn--out-of-pocket\",\r\n icon: \"out-of-pocket\",\r\n value: 'Out-of-pocket',\r\n onClick: () => {\r\n this.props.webAppointmentSetPaymentMethod(\"out-of-pocket\");\r\n this.props.history.push(nextPage(null, { paymentMethod: \"out-of-pocket\" }));\r\n }\r\n },\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n {\r\n type: 'button',\r\n id: \"back\",\r\n className: \"btn--secondary\",\r\n value: 'Back',\r\n onClick: () => {\r\n this.props.history.goBack();\r\n }\r\n }\r\n ]\r\n }\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    {title}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nPaymentMethodPage.propTypes = {\r\n webAppointmentSetPaymentMethod: PropTypes.func.isRequired,\r\n paymentMethod: PropTypes.string\r\n};\r\n\r\nfunction mapStateToProps(state, ownProps) {\r\n return {\r\n paymentMethod: state.webAppointmentForm.paymentMethod\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n webAppointmentSetPaymentMethod: (value) => dispatch(webAppointmentActions.webAppointmentSetPaymentMethod(value)),\r\n };\r\n};\r\n\r\n// connects component to redux, and passes along the router\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(PaymentMethodPage));\r\n","import React, { Component } from 'react';\r\nimport InputList from '../../../shared/components/presentation/input-list/InputList';\r\nimport { Grid, GridItem } from '../../../shared/components/presentation/grid/Grid';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport * as webAppointmentActions from '../../actions/webAppointmentActions';\r\nimport { nextPage } from '../../functions/nextPage';\r\nimport * as defaultState from '../../constants/DefaultState';\r\nimport * as strings from '../../constants/strings';\r\n\r\nexport class InsurancePage extends Component {\r\n\r\n isValid() {\r\n let valid = (\r\n this.props.insurance.company &&\r\n this.props.insurance.policyType &&\r\n this.props.insurance.policyNumber\r\n );\r\n if (this.props.patientSeenRecently) {\r\n valid = valid && this.props.insurance.whereToSend;\r\n }\r\n else {\r\n valid = valid && this.props.insurance.policyHolder.relation;\r\n }\r\n\r\n return !!valid;\r\n }\r\n\r\n render() {\r\n const possessive = (this.props.forMe === true ? \"your\" : \"their\");\r\n const title = `Please provide ${possessive} insurance information as it appears on ${possessive} insurance card.`;\r\n\r\n let inputlist = [\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n inputs: [\r\n {\r\n type: 'text',\r\n id: 'insurance-company-name',\r\n label: \"Name of insurance company\",\r\n required: true,\r\n requiredError: \"Please enter the insurance company name.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n onChange: (ev) => { this.props.webAppointmentSetInsuranceCompany(ev.target.value); },\r\n existingContent: this.props.insurance.company || undefined,\r\n maxLength: '140'\r\n },\r\n {\r\n type: 'radio-list',\r\n id: 'insurance-product-type',\r\n groupName: 'insurance-product-type',\r\n legend: 'Product type',\r\n required: true,\r\n onChange: (ev) => { this.props.webAppointmentSetInsurancePolicyType(ev.target.value); },\r\n radioWrapperClassName: 'radio-button-bold',\r\n radioProps: [\r\n {\r\n id: \"ppo-insurance-type\",\r\n label: \"PPO\",\r\n value: \"PPO\",\r\n checked: this.props.insurance.policyType === \"PPO\"\r\n },\r\n {\r\n id: \"pos-insurance-type\",\r\n label: \"POS\",\r\n value: \"POS\",\r\n checked: this.props.insurance.policyType === \"POS\"\r\n },\r\n {\r\n id: \"epo-insurance-type\",\r\n label: \"EPO\",\r\n value: \"EPO\",\r\n checked: this.props.insurance.policyType === \"EPO\"\r\n },\r\n {\r\n id: \"medicare-insurance-type\",\r\n label: \"Medicare\",\r\n value: \"Medicare\",\r\n checked: this.props.insurance.policyType === \"Medicare\"\r\n },\r\n {\r\n id: \"hmo-insurance-type\",\r\n label: \"HMO\",\r\n value: \"HMO\",\r\n checked: this.props.insurance.policyType === \"HMO\"\r\n },\r\n {\r\n id: \"other-insurance-type\",\r\n label: \"Other\",\r\n value: \"Other\",\r\n checked: this.props.insurance.policyType === \"Other\"\r\n }\r\n ]\r\n },\r\n {\r\n type: 'text',\r\n id: 'insurance-policy-number',\r\n label: \"Policy number or ID number\",\r\n required: true,\r\n requiredError: \"Please enter the policy or ID number.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n onChange: (ev) => { this.props.webAppointmentSetInsurancePolicyNumber(ev.target.value); },\r\n existingContent: this.props.insurance.policyNumber || undefined,\r\n maxLength: '140'\r\n },\r\n {\r\n type: 'text',\r\n id: 'insurance-group-number',\r\n label: \"Group number (Optional)\",\r\n onChange: (ev) => { this.props.webAppointmentSetInsuranceGroup(ev.target.value); },\r\n existingContent: this.props.insurance.group || undefined,\r\n maxLength: '140'\r\n },\r\n this.props.patientSeenRecently ? {\r\n type: 'radio-list',\r\n id: 'insurance-where-to-send',\r\n groupName: 'insurance-where-to-send',\r\n legend: 'Where should we send the bill?',\r\n required: true,\r\n helperText: \"For services not covered by insurance (such as co-pays and deductibles).\",\r\n onChange: (ev) => { this.props.webAppointmentSetInsuranceWhereToSend(ev.target.value); },\r\n radioWrapperClassName: 'radio-button-inline radio-button-bold',\r\n radioProps:\r\n this.props.forMe ?\r\n [\r\n {\r\n id: \"send-to-my-address\",\r\n label: strings.TO_MY_ADDRESS,\r\n value: strings.TO_MY_ADDRESS,\r\n checked: this.props.insurance.whereToSend === strings.TO_MY_ADDRESS\r\n },\r\n {\r\n id: \"send-somewhere-else\",\r\n label: strings.SOMEWHERE_ELSE,\r\n value: strings.SOMEWHERE_ELSE,\r\n checked: this.props.insurance.whereToSend === strings.SOMEWHERE_ELSE\r\n }\r\n ] :\r\n [\r\n {\r\n id: \"send-to-my-address\",\r\n label: strings.TO_MY_ADDRESS,\r\n value: strings.TO_MY_ADDRESS,\r\n checked: this.props.insurance.whereToSend === strings.TO_MY_ADDRESS\r\n },\r\n {\r\n id: \"send-to-patient\",\r\n label: strings.TO_PATIENTS_ADDRESS,\r\n value: strings.TO_PATIENTS_ADDRESS,\r\n checked: this.props.insurance.whereToSend === strings.TO_PATIENTS_ADDRESS\r\n },\r\n {\r\n id: \"send-somewhere-else\",\r\n label: strings.SOMEWHERE_ELSE,\r\n value: strings.SOMEWHERE_ELSE,\r\n checked: this.props.insurance.whereToSend === strings.SOMEWHERE_ELSE\r\n }\r\n ]\r\n } : null,\r\n\r\n !this.props.patientSeenRecently ? {\r\n type: 'radio-list',\r\n id: 'insurance-who-is-policy-holder',\r\n groupName: 'insurance-who-is-policy-holder',\r\n legend: 'Who is the policy holder?',\r\n required: true,\r\n onChange: (ev) => { this.props.webAppointmentSetInsuranceHolderRelation(ev.target.value); },\r\n radioWrapperClassName: 'radio-button-inline radio-button-bold',\r\n\r\n radioProps:\r\n this.props.forMe ?\r\n [\r\n {\r\n id: \"policy-holder-me\",\r\n label: strings.ME,\r\n value: strings.ME,\r\n checked: this.props.insurance.policyHolder.relation === strings.ME\r\n },\r\n {\r\n id: \"policy-holder-someone-else\",\r\n label: strings.SOMEONE_ELSE,\r\n value: strings.SOMEONE_ELSE,\r\n checked: this.props.insurance.policyHolder.relation !== strings.ME && this.props.insurance.policyHolder.relation !== strings.THE_PATIENT && this.props.insurance.policyHolder.relation\r\n }\r\n ] :\r\n [\r\n {\r\n id: \"policy-holder-me\",\r\n label: strings.ME,\r\n value: strings.ME,\r\n checked: this.props.insurance.policyHolder.relation === strings.ME\r\n },\r\n {\r\n id: \"policy-holder-patient\",\r\n label: strings.THE_PATIENT,\r\n value: strings.THE_PATIENT,\r\n checked: this.props.insurance.policyHolder.relation === strings.THE_PATIENT\r\n },\r\n {\r\n id: \"policy-holder-someone-else\",\r\n label: strings.SOMEONE_ELSE,\r\n value: strings.SOMEONE_ELSE,\r\n checked: this.props.insurance.policyHolder.relation !== strings.ME && this.props.insurance.policyHolder.relation !== strings.THE_PATIENT && this.props.insurance.policyHolder.relation\r\n }\r\n ]\r\n } : null\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n [\r\n {\r\n type: 'button',\r\n id: \"back\",\r\n className: \"btn--secondary\",\r\n value: 'Back',\r\n onClick: () => {\r\n this.props.history.goBack();\r\n }\r\n },\r\n {\r\n type: 'button',\r\n id: \"next\",\r\n className: \"btn--primary\",\r\n value: \"Next\",\r\n disabled: !this.isValid(),\r\n onClick: () => {\r\n this.props.history.push(nextPage(null, {\r\n forMe: this.props.forMe,\r\n patientSeenRecently: this.props.patientSeenRecently,\r\n insurance: this.props.insurance\r\n }));\r\n }\r\n }\r\n ]\r\n ]\r\n }\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    {title}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nInsurancePage.propTypes = {\r\n forMe: PropTypes.bool,\r\n patientSeenRecently: PropTypes.bool,\r\n insurance: defaultState.insurancePropType,\r\n webAppointmentSetInsuranceCompany: PropTypes.func.isRequired,\r\n webAppointmentSetInsurancePolicyNumber: PropTypes.func.isRequired,\r\n webAppointmentSetInsurancePolicyType: PropTypes.func.isRequired,\r\n webAppointmentSetInsuranceGroup: PropTypes.func.isRequired,\r\n webAppointmentSetInsuranceWhereToSend: PropTypes.func.isRequired,\r\n webAppointmentSetInsuranceHolderRelation: PropTypes.func.isRequired\r\n};\r\n\r\nfunction mapStateToProps(state, ownProps) {\r\n return {\r\n forMe: state.webAppointmentForm.forMe,\r\n patientSeenRecently: state.webAppointmentForm.patientSeenRecently,\r\n insurance: state.webAppointmentForm.insurance\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n webAppointmentSetInsuranceCompany: (value) => dispatch(webAppointmentActions.webAppointmentSetInsuranceCompany(value)),\r\n webAppointmentSetInsurancePolicyNumber: (value) => dispatch(webAppointmentActions.webAppointmentSetInsurancePolicyNumber(value)),\r\n webAppointmentSetInsurancePolicyType: (value) => dispatch(webAppointmentActions.webAppointmentSetInsurancePolicyType(value)),\r\n webAppointmentSetInsuranceGroup: (value) => dispatch(webAppointmentActions.webAppointmentSetInsuranceGroup(value)),\r\n webAppointmentSetInsuranceWhereToSend: (value) => dispatch(webAppointmentActions.webAppointmentSetInsuranceWhereToSend(value)),\r\n webAppointmentSetInsuranceHolderRelation: (value) => dispatch(webAppointmentActions.webAppointmentSetInsuranceHolderRelation(value))\r\n };\r\n};\r\n\r\n// connects component to redux, and passes along the router\r\nexport default connect(mapStateToProps, mapDispatchToProps)(InsurancePage);\r\n","import React, { Component } from 'react';\r\nimport InputList from '../../../shared/components/presentation/input-list/InputList';\r\nimport { Grid, GridItem } from '../../../shared/components/presentation/grid/Grid';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport * as webAppointmentActions from '../../actions/webAppointmentActions';\r\nimport { nextPage } from '../../functions/nextPage';\r\nimport * as defaultState from '../../constants/DefaultState';\r\nimport * as strings from '../../constants/strings';\r\n\r\nexport class BillingPage extends Component {\r\n\r\n isValid() {\r\n let valid = this.props.insurance.whereToSend;\r\n return !!valid;\r\n }\r\n\r\n render() {\r\n const title = \"Please provide billing information.\";\r\n\r\n let inputlist = [\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n inputs: [\r\n {\r\n type: 'radio-list',\r\n id: 'where-to-send',\r\n groupName: 'where-to-send',\r\n legend: 'Where should we send the bill?',\r\n helperText: \"For services not covered by insurance (such as co-pays and deductibles).\",\r\n required: true,\r\n onChange: (ev) => { this.props.webAppointmentSetInsuranceWhereToSend(ev.target.value); },\r\n radioWrapperClassName: 'radio-button-inline radio-button-bold',\r\n radioProps: this.props.forMe ? [\r\n {\r\n id: \"send-to-my-address\",\r\n label: strings.TO_MY_ADDRESS,\r\n value: strings.TO_MY_ADDRESS,\r\n checked: this.props.insurance.whereToSend === strings.TO_MY_ADDRESS\r\n },\r\n {\r\n id: \"send-somewhere-else\",\r\n label: strings.SOMEWHERE_ELSE,\r\n value: strings.SOMEWHERE_ELSE,\r\n checked: this.props.insurance.whereToSend !== strings.TO_MY_ADDRESS && this.props.insurance.whereToSend !== strings.TO_PATIENTS_ADDRESS && this.props.insurance.whereToSend\r\n }\r\n ] :\r\n [\r\n {\r\n id: \"send-to-my-address\",\r\n label: strings.TO_MY_ADDRESS,\r\n value: strings.TO_MY_ADDRESS,\r\n checked: this.props.insurance.whereToSend === strings.TO_MY_ADDRESS\r\n },\r\n {\r\n id: \"send-to-patients-address\",\r\n label: strings.TO_PATIENTS_ADDRESS,\r\n value: strings.TO_PATIENTS_ADDRESS,\r\n checked: this.props.insurance.whereToSend === strings.TO_PATIENTS_ADDRESS\r\n },\r\n {\r\n id: \"send-somewhere-else\",\r\n label: strings.SOMEWHERE_ELSE,\r\n value: strings.SOMEWHERE_ELSE,\r\n checked: this.props.insurance.whereToSend !== strings.TO_MY_ADDRESS && this.props.insurance.whereToSend !== strings.TO_PATIENTS_ADDRESS && this.props.insurance.whereToSend\r\n }\r\n ] // end of radioProps\r\n } // end of radio-list input.\r\n ] // end of inputs for first fieldset\r\n }, // end of fieldset\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n [\r\n {\r\n type: 'button',\r\n id: \"back\",\r\n className: \"btn--secondary\",\r\n value: 'Back',\r\n onClick: () => {\r\n this.props.history.goBack();\r\n }\r\n },\r\n {\r\n type: 'button',\r\n id: \"next\",\r\n className: \"btn--primary\",\r\n value: \"Next\",\r\n disabled: !this.isValid(),\r\n onClick: () => {\r\n this.props.history.push(nextPage(null, {\r\n forMe: this.props.forMe,\r\n patientSeenRecently: this.props.patientSeenRecently,\r\n insurance: this.props.insurance\r\n }));\r\n }\r\n }\r\n ]\r\n ]\r\n }\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    {title}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nBillingPage.propTypes = {\r\n insurance: defaultState.insurancePropType,\r\n patientSeenRecently: PropTypes.bool.isRequired,\r\n forMe: PropTypes.bool.isRequired,\r\n webAppointmentSetInsuranceWhereToSend: PropTypes.func.isRequired\r\n};\r\n\r\nfunction mapStateToProps(state, ownProps) {\r\n return {\r\n insurance: state.webAppointmentForm.insurance,\r\n patientSeenRecently: state.webAppointmentForm.patientSeenRecently,\r\n forMe: state.webAppointmentForm.forMe\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n webAppointmentSetInsuranceWhereToSend: (value) => dispatch(webAppointmentActions.webAppointmentSetInsuranceWhereToSend(value))\r\n };\r\n};\r\n\r\n// connects component to redux, and passes along the router\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BillingPage);\r\n","import React, { Component } from \"react\";\r\nimport InputList from \"../../../shared/components/presentation/input-list/InputList\";\r\nimport { Grid, GridItem } from \"../../../shared/components/presentation/grid/Grid\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport * as regex from \"../../../constants/regex\";\r\nimport * as webAppointmentActions from \"../../actions/webAppointmentActions\";\r\nimport { nextPage } from \"../../functions/nextPage\";\r\nimport * as defaultState from \"../../constants/DefaultState\";\r\nimport { dropDownDefault, politeDropDownDefault } from \"../../constants/webAppointmentConstants\";\r\nimport * as strings from \"../../constants/strings\";\r\nimport * as formatData from \"../../functions/formatData\";\r\nimport dobFormatting from '../../../shared/functions/dobFormatting';\r\nimport apiGet from '../../../shared/functions/apiGet';\r\n\r\n\r\nexport class BillingAddressPage extends Component {\r\n states = [{ name: politeDropDownDefault, value: undefined }];\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n isChecked: JSON.parse(window.localStorage.getItem('isChecked')) === \"1\" ? true : false,\r\n rerender: 1\r\n };\r\n\r\n if (this.state.isChecked) {\r\n const { relation, firstName, lastName, dob } = { ...this.props.insurance.policyHolder };\r\n\r\n this.props.webAppointmentSetBillingRelation(relation);\r\n this.props.webAppointmentSetBillingFirstName(firstName);\r\n this.props.webAppointmentSetBillingLastName(lastName);\r\n this.props.webAppointmentSetBillingDob(dob);\r\n }\r\n }\r\n\r\n setChecked(state) {\r\n window.localStorage.setItem('isChecked', JSON.stringify(state));\r\n let isCheckedState = state === \"1\" ? true : false;\r\n this.setState({ isChecked: isCheckedState });\r\n }\r\n\r\n getStates = () => {\r\n let options = { params: { country: \"USA\" } };\r\n return new Promise((resolve, reject) => {\r\n apiGet(\"/api/sitecore/webappointment/getStatesOrProvinces\", options, null, null, null, false, false, false)\r\n .then((states) => {\r\n resolve(states);\r\n })\r\n .catch((error) => {\r\n console.log(\"get states call failed, falling back to hardcoded abbreviations.\");\r\n console.log(error);\r\n let options = [\r\n { name: politeDropDownDefault, value: undefined },\r\n { name: \"AL\", value: \"Alabama\" },\r\n { name: \"AK\", value: \"Alaska\" },\r\n { name: \"AZ\", value: \"Arizona\" },\r\n { name: \"AR\", value: \"Arkansas\" },\r\n { name: \"CA\", value: \"California\" },\r\n { name: \"CO\", value: \"Colorado\" },\r\n { name: \"CT\", value: \"Connecticut\" },\r\n { name: \"DE\", value: \"Delaware\" },\r\n { name: \"DC\", value: \"District of Columbia\" },\r\n { name: \"FL\", value: \"Florida\" },\r\n { name: \"GA\", value: \"Georgia\" },\r\n { name: \"HI\", value: \"Hawaii\" },\r\n { name: \"ID\", value: \"Idaho\" },\r\n { name: \"IL\", value: \"Illinois\" },\r\n { name: \"IN\", value: \"Indiana\" },\r\n { name: \"IA\", value: \"Iowa\" },\r\n { name: \"KS\", value: \"Kansas\" },\r\n { name: \"KY\", value: \"Kentucky\" },\r\n { name: \"LA\", value: \"Louisiana\" },\r\n { name: \"ME\", value: \"Maine\" },\r\n { name: \"MD\", value: \"Maryland\" },\r\n { name: \"MA\", value: \"Massachusetts\" },\r\n { name: \"MI\", value: \"Michigan\" },\r\n { name: \"MN\", value: \"Minnesota\" },\r\n { name: \"MS\", value: \"Mississippi\" },\r\n { name: \"MO\", value: \"Missouri\" },\r\n { name: \"MT\", value: \"Montana\" },\r\n { name: \"NE\", value: \"Nebraska\" },\r\n { name: \"NV\", value: \"Nevada\" },\r\n { name: \"NH\", value: \"New Hampshire\" },\r\n { name: \"NJ\", value: \"New Jersey\" },\r\n { name: \"NM\", value: \"New Mexico\" },\r\n { name: \"NY\", value: \"New York\" },\r\n { name: \"NC\", value: \"North Carolina\" },\r\n { name: \"ND\", value: \"North Dakota\" },\r\n { name: \"OH\", value: \"Ohio\" },\r\n { name: \"OK\", value: \"Oklahoma\" },\r\n { name: \"OR\", value: \"Oregon\" },\r\n { name: \"PA\", value: \"Pennsylvania\" },\r\n { name: \"PR\", value: \"Puerto Rico\" },\r\n { name: \"RI\", value: \"Rhode Island\" },\r\n { name: \"SC\", value: \"South Carolina\" },\r\n { name: \"SD\", value: \"South Dakota\" },\r\n { name: \"TN\", value: \"Tennessee\" },\r\n { name: \"TX\", value: \"Texas\" },\r\n { name: \"UT\", value: \"Utah\" },\r\n { name: \"VT\", value: \"Vermont\" },\r\n { name: \"VI\", value: \"Virgin Islands\" },\r\n { name: \"VA\", value: \"Virginia\" },\r\n { name: \"WA\", value: \"Washington\" },\r\n { name: \"WV\", value: \"West Virginia\" },\r\n { name: \"WI\", value: \"Wisconsin\" },\r\n { name: \"WY\", value: \"Wyoming\" }\r\n ];\r\n this.states = options;\r\n // Tweak the state just enough to call render() again.\r\n this.setState((prevState) => { return { rerender: prevState.rerender + 1 }; });\r\n });\r\n });\r\n }\r\n\r\n fillStates() {\r\n this.getStates()\r\n .then((states) => {\r\n // process 'locations' - i.e. save locally so that render() can get to them.\r\n this.states = states.map(s => {\r\n return { value: s.Value, name: s.Value };\r\n })\r\n this.states.unshift({ name: politeDropDownDefault, value: undefined });\r\n // Tweak the state just enough to call render() again.\r\n this.setState((prevState) => { return { rerender: prevState.rerender + 1 }; });\r\n });\r\n }\r\n\r\n // Lifecycle Methods:\r\n componentDidMount() {\r\n this.fillStates();\r\n }\r\n\r\n isValid() {\r\n let valid = \r\n this.props.insurance.billing.dob &&\r\n this.props.insurance.billing.dob.match(regex.DATE_OF_BIRTH_REGEX) &&\r\n this.props.insurance.billing.address1 && \r\n this.props.insurance.billing.city && \r\n this.props.insurance.billing.state && \r\n this.props.insurance.billing.zip && \r\n this.props.insurance.billing.zip.match(regex.ZIP_CODE_REGEX);\r\n\r\n if (this.props.forMe || this.props.insurance.whereToSend !== strings.TO_MY_ADDRESS) {\r\n valid = valid && \r\n this.props.insurance.billing.relation && \r\n this.props.insurance.billing.firstName && \r\n this.props.insurance.billing.lastName;\r\n }\r\n\r\n return !!valid;\r\n }\r\n\r\n render() {\r\n const title = \"Please provide billing information.\";\r\n let possessiveSubtitle = this.props.forMe ? \"your\" : \"the patient’s\";\r\n let subtitle = `To streamline billing, we collect this information to add to ${possessiveSubtitle} MyChart account (if applicable).`;\r\n var shouldShowFirstFewFields = this.props.insurance.whereToSend !== strings.TO_MY_ADDRESS;\r\n let possessive = this.props.insurance.whereToSend === strings.TO_MY_ADDRESS ? \"Your\" : \"Their\";\r\n let inputlist = [\r\n shouldShowFirstFewFields ? \r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n inputs: [\r\n !this.props.patientSeenRecently && \r\n this.props.insurance.policyHolder.relation !== strings.ME && \r\n this.props.insurance.policyHolder.relation !== strings.THE_PATIENT && \r\n this.props.insurance.whereToSend === strings.SOMEWHERE_ELSE ? \r\n {\r\n type: \"checkbox\",\r\n key: \"checkbox-for-policy-holder\",\r\n id: \"same-as-policy-holder\",\r\n label: \"Same as the policy holder\",\r\n checkboxWrapperClassName: \"checkbox-wrapper\",\r\n value: this.state.isChecked,\r\n checked: this.state.isChecked,\r\n onChange: () => {\r\n if (this.state.isChecked) {\r\n this.props.webAppointmentSetBillingRelation(\"\");\r\n this.props.webAppointmentSetBillingFirstName(\"\");\r\n this.props.webAppointmentSetBillingLastName(\"\");\r\n this.props.webAppointmentSetBillingDob(\"\");\r\n this.setChecked(\"0\");\r\n this.setState((prevState) => { return { rerender: prevState.rerender + 1 }; });\r\n }\r\n else {\r\n const { relation, firstName, lastName, dob } = { ...this.props.insurance.policyHolder };\r\n this.props.webAppointmentSetBillingRelation(relation);\r\n this.props.webAppointmentSetBillingFirstName(firstName);\r\n this.props.webAppointmentSetBillingLastName(lastName);\r\n this.props.webAppointmentSetBillingDob(dob);\r\n this.setChecked(\"1\");\r\n }\r\n }\r\n }\r\n : null,\r\n {\r\n type: \"select\",\r\n id: \"relation\",\r\n key: \"relation-\" + this.state.rerender,\r\n label: possessive + \" relationship to \" + (this.props.forMe ? \"you\" : \"the patient\"),\r\n onChange: (value) => {\r\n this.setChecked(\"0\");\r\n this.props.webAppointmentSetBillingRelation(value === dropDownDefault ? \"\" : value);\r\n },\r\n existingContent: this.props.insurance.billing.relation || undefined,\r\n required: true,\r\n requiredError: \"Please select \" + possessive.toLowerCase() + \" relationship to \" + (this.props.forMe ? \"you.\" : \"the patient.\"),\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n options: [\r\n { name: dropDownDefault, value: undefined },\r\n { name: \"Parent\", value: \"Parent\" },\r\n { name: \"Guardian\", value: \"Guardian\" },\r\n { name: \"Spouse\", value: \"Spouse\" },\r\n { name: \"Partner\", value: \"Partner\" },\r\n { name: \"Child\", value: \"Child\" },\r\n { name: \"Sibling\", value: \"Sibling\" },\r\n { name: \"Relative\", value: \"Relative\" },\r\n { name: \"Friend\", value: \"Friend\" },\r\n { name: \"Other\", value: \"Other\" }\r\n ]\r\n }\r\n ]\r\n }\r\n : null, // end of fieldset.\r\n shouldShowFirstFewFields ? \r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 2,\r\n inputs: [\r\n [\r\n {\r\n type: \"text\",\r\n id: \"firstName\",\r\n key: \"firstName-\" + this.state.rerender,\r\n label: possessive + \" first name\",\r\n onChange: (ev) => {\r\n this.setChecked(\"0\");\r\n this.props.webAppointmentSetBillingFirstName(ev.target.value);\r\n },\r\n existingContent: this.props.insurance.billing.firstName || undefined,\r\n required: true,\r\n requiredError: \"Please enter \" + possessive.toLowerCase() + \" first name.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n maxLength: \"140\"\r\n }\r\n ],\r\n [\r\n {\r\n type: \"text\",\r\n id: \"lastName\",\r\n key: \"lastName-\" + this.state.rerender,\r\n label: possessive + \" last name\",\r\n onChange: (ev) => {\r\n this.setChecked(\"0\");\r\n this.props.webAppointmentSetBillingLastName(ev.target.value);\r\n },\r\n existingContent: this.props.insurance.billing.lastName || undefined,\r\n required: true,\r\n requiredError: \"Please enter \" + possessive.toLowerCase() + \" last name.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n maxLength: \"140\"\r\n }\r\n ]\r\n ]\r\n }\r\n : null, // end of fieldset.\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n inputs: [\r\n {\r\n id: \"dob\",\r\n key: \"dob-\" + this.state.rerender,\r\n type: \"text\",\r\n label: possessive + \" date of birth\",\r\n helperText: \"Date format: mm/dd/yyyy\",\r\n required: true,\r\n requiredError: \"Please enter \" + possessive.toLowerCase() + \" date of birth.\",\r\n maxLength: 10,\r\n patternMatch: regex.DATE_OF_BIRTH_REGEX,\r\n patternMatchError: \"Please enter a valid date\",\r\n placeholderText: \"mm/dd/yyyy\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n onChange: (ev) => {\r\n this.setChecked(\"0\");\r\n this.props.webAppointmentSetBillingDob(ev.target.value);\r\n },\r\n onKeyUp: (ev) => {\r\n dobFormatting(ev, this, this.props.webAppointmentSetBillingDob);\r\n },\r\n existingContent: this.props.insurance.billing.dob || undefined\r\n },\r\n {\r\n type: \"text\",\r\n id: \"address1\",\r\n required: true,\r\n requiredError: \"Please enter \" + possessive.toLowerCase() + \" street address.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n label: possessive + \" address\",\r\n helperText: \"House number and street name\",\r\n onChange: (ev) => {\r\n this.props.webAppointmentSetBillingAddress1(ev.target.value);\r\n },\r\n existingContent: this.props.insurance.billing.address1 || undefined,\r\n maxLength: \"46\"\r\n },\r\n {\r\n type: \"text\",\r\n id: \"address2\",\r\n label: possessive + \" address continued (Optional)\",\r\n helperText: \"Apartment number if applicable\",\r\n onChange: (ev) => {\r\n this.props.webAppointmentSetBillingAddress2(ev.target.value);\r\n },\r\n existingContent: this.props.insurance.billing.address2 || undefined,\r\n maxLength: \"46\"\r\n }\r\n ]\r\n }, // end of fieldset.\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 3,\r\n inputs: [\r\n [\r\n {\r\n type: \"text\",\r\n id: \"city\",\r\n required: true,\r\n requiredError: \"Please enter \" + possessive.toLowerCase() + \" city.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n label: possessive + \" city\",\r\n onChange: (ev) => {\r\n const formattedCity = formatData.formatCityString(ev.target.value);\r\n this.props.webAppointmentSetBillingCity(formattedCity);\r\n },\r\n existingContent: this.props.insurance.billing.city || undefined,\r\n maxLength: \"140\"\r\n }\r\n ],\r\n [\r\n {\r\n type: \"select\",\r\n id: \"state\",\r\n key: \"state\",\r\n required: true,\r\n requiredError: \"Please enter \" + possessive.toLowerCase() + \" state.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n label: possessive + \" state\",\r\n onChange: (value) => {\r\n this.props.webAppointmentSetBillingState(value === politeDropDownDefault ? \"\" : value);\r\n },\r\n existingContent: this.props.insurance.billing.state ? this.props.insurance.billing.state.split(\"|\")[0] : undefined,\r\n options: this.states\r\n }\r\n ],\r\n [\r\n {\r\n type: \"text\",\r\n id: \"zip\",\r\n required: true,\r\n requiredError: \"Please enter \" + possessive.toLowerCase() + \" zip code.\",\r\n patternMatch: regex.ZIP_CODE_REGEX,\r\n patternMatchError: \"Please enter \" + possessive.toLowerCase() + \" zip code.\",\r\n validateOnBlur: true,\r\n validateOnChange: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n label: possessive + \" zip code\",\r\n onChange: (ev) => {\r\n const formattedZip = formatData.formatZipString(ev.target.value, ev.target.selectionStart);\r\n this.props.webAppointmentSetBillingZip(formattedZip);\r\n },\r\n existingContent: this.props.insurance.billing.zip,\r\n maxLength: \"10\"\r\n }\r\n ]\r\n ]\r\n }, // end of fieldset\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n [\r\n {\r\n type: \"button\",\r\n id: \"back\",\r\n className: \"btn--secondary\",\r\n value: \"Back\",\r\n onClick: () => {\r\n this.props.history.goBack();\r\n }\r\n },\r\n {\r\n type: \"button\",\r\n id: \"next\",\r\n className: \"btn--primary\",\r\n value: \"Next\",\r\n disabled: !this.isValid(),\r\n onClick: () => {\r\n this.props.history.push(nextPage());\r\n }\r\n }\r\n ]\r\n ]\r\n } // end of fieldset\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    {title}

    \r\n

    {subtitle}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nBillingAddressPage.propTypes = {\r\n insurance: defaultState.insurancePropType,\r\n forMe: PropTypes.bool.isRequired,\r\n patientSeenRecently: PropTypes.bool.isRequired,\r\n webAppointmentSetBillingRelation: PropTypes.func.isRequired,\r\n webAppointmentSetBillingFirstName: PropTypes.func.isRequired,\r\n webAppointmentSetBillingLastName: PropTypes.func.isRequired,\r\n webAppointmentSetBillingDob: PropTypes.func.isRequired,\r\n webAppointmentSetBillingAddress1: PropTypes.func.isRequired,\r\n webAppointmentSetBillingAddress2: PropTypes.func.isRequired,\r\n webAppointmentSetBillingCity: PropTypes.func.isRequired,\r\n webAppointmentSetBillingState: PropTypes.func.isRequired,\r\n webAppointmentSetBillingZip: PropTypes.func.isRequired\r\n};\r\n\r\nfunction mapStateToProps(state, ownProps) {\r\n return {\r\n insurance: state.webAppointmentForm.insurance,\r\n forMe: state.webAppointmentForm.forMe,\r\n patientSeenRecently: state.webAppointmentForm.patientSeenRecently\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n webAppointmentSetBillingRelation: (value) => dispatch(webAppointmentActions.webAppointmentSetBillingRelation(value)),\r\n webAppointmentSetBillingFirstName: (value) => dispatch(webAppointmentActions.webAppointmentSetBillingFirstName(value)),\r\n webAppointmentSetBillingLastName: (value) => dispatch(webAppointmentActions.webAppointmentSetBillingLastName(value)),\r\n webAppointmentSetBillingDob: (value) => dispatch(webAppointmentActions.webAppointmentSetBillingDob(value)),\r\n webAppointmentSetBillingAddress1: (value) => dispatch(webAppointmentActions.webAppointmentSetBillingAddress1(value)),\r\n webAppointmentSetBillingAddress2: (value) => dispatch(webAppointmentActions.webAppointmentSetBillingAddress2(value)),\r\n webAppointmentSetBillingCity: (value) => dispatch(webAppointmentActions.webAppointmentSetBillingCity(value)),\r\n webAppointmentSetBillingState: (value) => dispatch(webAppointmentActions.webAppointmentSetBillingState(value)),\r\n webAppointmentSetBillingZip: (value) => dispatch(webAppointmentActions.webAppointmentSetBillingZip(value))\r\n };\r\n};\r\n\r\n// connects component to redux, and passes along the router\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BillingAddressPage);\r\n","import React, { Component } from 'react';\r\nimport InputList from '../../../shared/components/presentation/input-list/InputList';\r\nimport { Grid, GridItem } from '../../../shared/components/presentation/grid/Grid';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport * as regex from '../../../constants/regex';\r\nimport * as webAppointmentActions from '../../actions/webAppointmentActions';\r\nimport { nextPage } from '../../functions/nextPage';\r\nimport * as defaultState from '../../constants/DefaultState';\r\nimport * as strings from '../../constants/strings';\r\nimport { dropDownDefault } from '../../constants/webAppointmentConstants'\r\nimport dobFormatting from '../../../shared/functions/dobFormatting';\r\n\r\nexport class PolicyHolderPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n rerender: 1\r\n };\r\n }\r\n\r\n isValid() {\r\n let valid = (\r\n this.props.insurance.policyHolder.relation && this.props.insurance.policyHolder.relation !== strings.SOMEONE_ELSE &&\r\n this.props.insurance.policyHolder.firstName &&\r\n this.props.insurance.policyHolder.lastName &&\r\n this.props.insurance.policyHolder.dob &&\r\n this.props.insurance.policyHolder.dob.match(regex.DATE_OF_BIRTH_REGEX) &&\r\n this.props.insurance.policyHolder.email &&\r\n this.props.insurance.policyHolder.email.match(regex.EMAIL_REGEX)\r\n );\r\n\r\n return !!valid;\r\n }\r\n\r\n render() {\r\n const title = \"Please provide the policy holder’s information.\";\r\n\r\n let inputlist = [\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n inputs: [\r\n {\r\n type: 'select',\r\n id: 'relation',\r\n key: 'relation',\r\n label: \"Policy holder’s relationship to \" + (this.props.forMe ? \"you\" : \"the patient\"),\r\n onChange: (value) => {\r\n this.props.webAppointmentSetInsuranceHolderRelation(value === dropDownDefault ? \"\" : value);\r\n },\r\n existingContent: this.props.insurance.policyHolder.relation || undefined,\r\n required: true,\r\n requiredError: \"Please select the policy holder’s relationship to \" + (this.props.forMe ? \"you.\" : \"the patient.\"),\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n options: [\r\n { name: dropDownDefault, value: undefined },\r\n { name: 'Parent', value: 'Parent' },\r\n { name: 'Guardian', value: 'Guardian' },\r\n { name: 'Spouse', value: 'Spouse' },\r\n { name: 'Partner', value: 'Partner' },\r\n { name: 'Child', value: 'Child' },\r\n { name: 'Sibling', value: 'Sibling' },\r\n { name: 'Relative', value: 'Relative' },\r\n { name: 'Friend', value: 'Friend' },\r\n { name: 'Other', value: 'Other' }\r\n ]\r\n }\r\n ]\r\n }, // end of fieldset.\r\n\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 2,\r\n inputs: [\r\n [\r\n {\r\n type: 'text',\r\n id: 'firstName',\r\n label: \"Policy holder’s first name\",\r\n onChange: (ev) => { this.props.webAppointmentSetInsuranceHolderFname(ev.target.value); },\r\n existingContent: this.props.insurance.policyHolder.firstName || undefined,\r\n required: true,\r\n requiredError: \"Please enter the policy holder’s first name.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n maxLength: '140'\r\n },\r\n ],\r\n [\r\n {\r\n type: 'text',\r\n id: 'lastName',\r\n label: \"Policy holder’s last name\",\r\n onChange: (ev) => { this.props.webAppointmentSetInsuranceHolderLname(ev.target.value); },\r\n existingContent: this.props.insurance.policyHolder.lastName || undefined,\r\n required: true,\r\n requiredError: \"Please enter the policy holder’s last name.\",\r\n validateOnBlur: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n maxLength: '140'\r\n }\r\n ]\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 2,\r\n inputs: [\r\n [\r\n {\r\n id: 'dob',\r\n key: \"dob-\" + this.state.rerender,\r\n type: 'text',\r\n label: \"Policy holder’s date of birth\",\r\n helperText: \"Date format: mm/dd/yyyy\",\r\n placeholderText: 'mm/dd/yyyy',\r\n required: true,\r\n requiredError: \"Please enter the policy holder’s date of birth.\",\r\n patternMatch: regex.DATE_OF_BIRTH_REGEX,\r\n patternMatchError: \"Please enter a valid date\",\r\n validateOnBlur: true,\r\n validateOnChange: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n onChange: (ev) => { this.props.webAppointmentSetInsuranceHolderDob(ev.target.value); },\r\n onKeyUp: (ev) => {\r\n dobFormatting(ev, this, this.props.webAppointmentSetInsuranceHolderDob);\r\n },\r\n existingContent: this.props.insurance.policyHolder.dob || undefined\r\n }\r\n ]\r\n ]\r\n },\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 2,\r\n inputs: [\r\n [\r\n {\r\n type: 'text',\r\n id: 'email',\r\n label: \"Policy holder’s email\",\r\n required: true,\r\n requiredError: \"Please enter the policy holder’s email address in this format: yourname@example.com\",\r\n patternMatch: regex.EMAIL_REGEX,\r\n patternMatchError: \"Please enter the policy holder’s email address in this format: yourname@example.com\",\r\n validateOnBlur: true,\r\n validateOnChange: true,\r\n validationErrorClass: \"web-appointment__error\",\r\n onChange: (ev) => {\r\n const formattedEmail = ev.target.value.replace(/\\s/g, '');\r\n this.props.webAppointmentSetInsuranceHolderEmail(formattedEmail);\r\n return formattedEmail;\r\n },\r\n existingContent: this.props.insurance.policyHolder.email || undefined,\r\n maxLength: '140'\r\n }\r\n ]\r\n ]\r\n }, // end of fieldset\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n [\r\n {\r\n type: 'button',\r\n id: \"back\",\r\n className: \"btn--secondary\",\r\n value: 'Back',\r\n onClick: () => {\r\n this.props.history.goBack();\r\n }\r\n },\r\n {\r\n type: 'button',\r\n id: \"next\",\r\n className: \"btn--primary\",\r\n value: \"Next\",\r\n disabled: !this.isValid(),\r\n onClick: () => {\r\n this.props.history.push(nextPage());\r\n }\r\n }\r\n ]\r\n ]\r\n } // end of fieldset\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    {title}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nPolicyHolderPage.propTypes = {\r\n insurance: defaultState.insurancePropType,\r\n forMe: PropTypes.bool.isRequired,\r\n\r\n webAppointmentSetInsuranceHolderRelation: PropTypes.func.isRequired,\r\n webAppointmentSetInsuranceHolderFname: PropTypes.func.isRequired,\r\n webAppointmentSetInsuranceHolderLname: PropTypes.func.isRequired,\r\n webAppointmentSetInsuranceHolderDob: PropTypes.func.isRequired,\r\n webAppointmentSetInsuranceHolderEmail: PropTypes.func.isRequired\r\n};\r\n\r\nfunction mapStateToProps(state, ownProps) {\r\n return {\r\n insurance: state.webAppointmentForm.insurance,\r\n forMe: state.webAppointmentForm.forMe\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n webAppointmentSetInsuranceHolderRelation: (value) => dispatch(webAppointmentActions.webAppointmentSetInsuranceHolderRelation(value)),\r\n webAppointmentSetInsuranceHolderFname: (value) => dispatch(webAppointmentActions.webAppointmentSetInsuranceHolderFname(value)),\r\n webAppointmentSetInsuranceHolderLname: (value) => dispatch(webAppointmentActions.webAppointmentSetInsuranceHolderLname(value)),\r\n webAppointmentSetInsuranceHolderDob: (value) => dispatch(webAppointmentActions.webAppointmentSetInsuranceHolderDob(value)),\r\n webAppointmentSetInsuranceHolderEmail: (value) => dispatch(webAppointmentActions.webAppointmentSetInsuranceHolderEmail(value))\r\n };\r\n};\r\n\r\n// connects component to redux, and passes along the router\r\nexport default connect(mapStateToProps, mapDispatchToProps)(PolicyHolderPage);\r\n","import React, { Component } from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport InputList from '../../../shared/components/presentation/input-list/InputList';\r\nimport { Grid, GridItem } from '../../../shared/components/presentation/grid/Grid';\r\nimport { connect } from 'react-redux';\r\nimport { nextPage } from '../../functions/nextPage';\r\nimport * as defaultState from '../../constants/DefaultState';\r\n\r\nexport class OutOfPocketPage extends Component {\r\n render() {\r\n const title = \"What to know about paying out of pocket.\";\r\n\r\n // The first paragraph is common, regardless of appt location.\r\n const paragraph1 = \"Patients who are paying out of pocket must speak with a patient financial advocate (PFA) before your appointment request can be processed. The PFA will discuss an estimated cost for service, required deposit (if applicable) and your payment options.\";\r\n\r\n const paragraph2 = (this.props.appointment.location.includes(\"Florida\")) ?\r\n // Second paragraph for Florida locations\r\n \"Please review your information on the following screen. Once your request is submitted, you can expect a call from a PFA within 24-48 hours.\" :\r\n // Second paragraph for Ohio and Nevada locations\r\n \"Please review your information on the following screen. We will schedule your PFA appointment on a time and day that works for you.\";\r\n\r\n\r\n let inputlist = [\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n {\r\n type: 'button',\r\n id: \"back\",\r\n className: \"btn--secondary\",\r\n value: 'Back',\r\n onClick: () => {\r\n this.props.history.goBack();\r\n }\r\n },\r\n {\r\n type: 'button',\r\n id: \"review\",\r\n className: \"btn--primary\",\r\n value: 'Review my request',\r\n onClick: () => {\r\n this.props.history.push(nextPage());\r\n }\r\n }\r\n ]\r\n }\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    {title}

    \r\n
    \r\n
    \r\n

    {paragraph1}

    \r\n

    {paragraph2}

    \r\n
    \r\n
    \r\n\r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nOutOfPocketPage.propTypes = {\r\n appointment: defaultState.appointmentProptype\r\n};\r\n\r\nfunction mapStateToProps(state, ownProps) {\r\n return {\r\n appointment: state.webAppointmentForm.appointment\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {};\r\n};\r\n\r\n// connects component to redux, and passes along the router\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(OutOfPocketPage));\r\n","import React, { Component } from \"react\";\r\nimport PropTypes from 'prop-types';\r\nimport \"./ReviewModalWindow.css\";\r\n\r\nexport class ReviewModalWindow extends Component {\r\n // Handles closing the modal and taking the user to the Failure Review page\r\n handleClose = () => {\r\n this.props.closeFunc(); // This function will navigate the user to the Failure Review page\r\n };\r\n\r\n // Handles retry logic, restarts the submission cycle\r\n handleRetry = () => {\r\n this.props.onRetry(); // This will trigger the retry logic in SubmissionCycle.js\r\n };\r\n\r\n render() {\r\n if (!this.props.isVisible) {\r\n return null;\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n

    Looks like something went wrong. Try submitting again.

    \r\n

    \r\n We're sorry for the inconvenience. Please check your internet connection and try submitting the form again.\r\n

    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nReviewModalWindow.propTypes = {\r\n closeFunc: PropTypes.func.isRequired, // function to handle close action\r\n onRetry: PropTypes.func.isRequired, // function to handle retry action\r\n isVisible: PropTypes.bool.isRequired, // controls modal visibility\r\n};\r\n\r\nexport default ReviewModalWindow;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport './PreloaderOverlay.css';\r\nimport preloaderGif from '../../../imgs/preloader-bar.gif';\r\n\r\nconst PreloaderOverlay = ({ title, count, message }) => {\r\n return (\r\n
    \r\n
    \r\n \"loading\r\n {(title || message) && (\r\n
    \r\n {title && (\r\n

    \r\n {count} {title}\r\n

    \r\n )}\r\n {message &&

    {message}

    }\r\n
    \r\n )}\r\n
    \r\n
    \r\n );\r\n};\r\nPreloaderOverlay.propTypes = {\r\n message: PropTypes.string\r\n}\r\n\r\nexport default PreloaderOverlay;","import React, { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useHistory } from 'react-router-dom';\r\nimport './SubmissionCycle.css';\r\nimport ReviewModalWindow from '../review-modal-window/ReviewModalWindow';\r\nimport PreloaderOverlay from '../../../shared/components/presentation/preloader-overlay/PreloaderOverlay';\r\nimport sendRequest from \"../../functions/sendRequest\";\r\n\r\nconst getSubmissionMessage = (attempt) => {\r\n const messages = [\r\n { title: \"1 of 2\", message: \"We're trying to submit your request.\" },\r\n { title: \"2 of 2\", message: \"Let's try this one more time.\" },\r\n { title: \"1 of 2\", message: \"We're trying again to submit your request.\" },\r\n { title: \"2 of 2\", message: \"Let's try this one more time.\" }\r\n ];\r\n return messages[attempt] || messages[0];\r\n};\r\n\r\nconst SubmissionCycle = ({ onRetry, onSuccess, state }) => {\r\n const [attempts, setAttempts] = useState(0);\r\n const [submissionMessage, setSubmissionMessage] = useState(getSubmissionMessage(0));\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [isModalVisible, setIsModalVisible] = useState(false);\r\n const [submissionSucceeded, setSubmissionSucceeded] = useState(false);\r\n const history = useHistory();\r\n\r\n useEffect(() => {\r\n if (isModalVisible || submissionSucceeded) {\r\n // Prevent further submissions if the modal is visible or if the submission has succeeded\r\n return;\r\n }\r\n\r\n setSubmissionMessage(getSubmissionMessage(attempts));\r\n submitForm(attempts);\r\n }, [attempts, isModalVisible, submissionSucceeded]);\r\n\r\n const handleRetry = () => {\r\n setIsModalVisible(false);\r\n onRetry();\r\n setAttempts(2);\r\n };\r\n\r\n const handleSubmissionFailure = (currentAttempt) => {\r\n const newAttempt = currentAttempt + 1;\r\n setAttempts(newAttempt);\r\n\r\n if (newAttempt === 2) {\r\n setIsLoading(false);\r\n setIsModalVisible(true);\r\n } \r\n else if (newAttempt === 4) {\r\n setIsLoading(false);\r\n handleFinalFailure();\r\n }\r\n };\r\n \r\n const handleFinalFailure = () => {\r\n setIsModalVisible(false);\r\n history.push(\"/webappointment/error-review\");\r\n };\r\n\r\n const submitForm = async (currentAttempt = 0) => {\r\n setIsLoading(true);\r\n\r\n try {\r\n await new Promise((resolve) => setTimeout(resolve, 5000));\r\n const success = await sendRequest(state);\r\n\r\n if (success) {\r\n setIsLoading(false);\r\n setSubmissionSucceeded(true);\r\n onSuccess(success);\r\n } \r\n else {\r\n throw new Error(\"Submission failed\");\r\n }\r\n } \r\n catch {\r\n handleSubmissionFailure(currentAttempt);\r\n }\r\n };\r\n \r\n return (\r\n
    \r\n {isLoading && (\r\n \r\n )}\r\n\r\n {isModalVisible && (\r\n \r\n )}\r\n
    \r\n );\r\n};\r\n\r\nSubmissionCycle.propTypes = {\r\n onRetry: PropTypes.func.isRequired,\r\n onSuccess: PropTypes.func.isRequired,\r\n state: PropTypes.object.isRequired\r\n};\r\n\r\nexport default SubmissionCycle;","import apiPost from '../../shared/functions/apiPost';\r\nimport { appointmentApiUrl } from '../constants/webAppointmentConstants';\r\n\r\nexport default function sendRequest(requestData) {\r\n return apiPost(appointmentApiUrl, requestData, null, true, \"application/json\", true);\r\n}\r\n","import * as defaultState from '../constants/DefaultState';\r\n\r\nexport const loadState = () => {\r\n try {\r\n const serializedState = sessionStorage.getItem('wafState');\r\n if (serializedState === null || serializedState === undefined) {\r\n return defaultState.defaultState;\r\n }\r\n return JSON.parse(serializedState).webAppointmentForm;\r\n }\r\n catch (err) {\r\n return defaultState.defaultState;\r\n }\r\n};\r\n\r\nexport const saveState = (state) => {\r\n try {\r\n const serializedState = JSON.stringify(state);\r\n sessionStorage.setItem('wafState', serializedState);\r\n }\r\n catch (err) {\r\n console.log(\"saving state to sessionStorage failed.\");\r\n console.log(err);\r\n }\r\n};\r\n\r\nexport const clearState = () => {\r\n if (sessionStorage.getItem('wafState')) {\r\n sessionStorage.removeItem('wafState');\r\n\t}\r\n};","import React, { Component } from \"react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport InputList from \"../../../shared/components/presentation/input-list/InputList\";\r\nimport { Grid, GridItem } from \"../../../shared/components/presentation/grid/Grid\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport * as webAppointmentActions from \"../../actions/webAppointmentActions\";\r\nimport * as defaultState from \"../../constants/DefaultState\";\r\nimport * as strings from \"../../constants/strings\";\r\nimport \"./ReviewPage.css\";\r\nimport { nextPage } from \"../../functions/nextPage\";\r\nimport SubmissionCycle from \"../submission-cycle-page/SubmissionCycle\";\r\nimport { clearState } from '../../functions/loadState'\r\n\r\nexport class ReviewPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n isSubmitting: false\r\n };\r\n }\r\n\r\n // Starts the submission cycle\r\n startSubmissionCycle = () => {\r\n this.setState({ isSubmitting: true });\r\n };\r\n\r\n handleSuccess = (results) => {\r\n this.props.webAppointmentSetRequestResults(results);\r\n this.setState({ isSubmitting: false }, () => {\r\n this.props.history.push({\r\n pathname: nextPage(null, this.props.state),\r\n state: { appointment: this.props.state.appointment }\r\n });\r\n this.props.webAppointmentClearOutData();\r\n });\r\n clearState();\r\n };\r\n\r\n handleRetry = (results) => {\r\n if (results && results.data && results.data.length > 0) {\r\n this.handleSuccess(results);\r\n } \r\n }\r\n \r\n formatDate(date) {\r\n // Convert from a date formatted line \"1982-06-23\" to something like \"06/23/1982\"\r\n if (date.match(/[0-9]{4}-[0-9]{2}-[0-9]{2}/)) {\r\n return date.substring(5, 7) + \"/\" + date.substring(8) + \"/\" + date.substring(0, 4);\r\n }\r\n return date;\r\n }\r\n\r\n formatPhoneNumber(phone) {\r\n // Convert pretty much any string with a reasonable number of digits into a US phone number\r\n phone.replace(/[^0-9]/g, \"\");\r\n switch (phone.length) {\r\n case 7:\r\n return phone.substring(0, 3) + \".\" + phone.substring(3);\r\n case 10:\r\n return phone.substring(0, 3) + \".\" + phone.substring(3, 6) + \".\" + phone.substring(6);\r\n case 11:\r\n if (phone.substring(0, 1) === \"1\") {\r\n return \"1\" + phone.substring(1, 4) + \".\" + phone.substring(4, 7) + \".\" + phone.substring(7);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n return phone;\r\n }\r\n\r\n formatDaysAndTimes(appointment) {\r\n let days = appointment.day; // days are stored as bits in a single int\r\n const times = appointment.time; // times are stored as bits in a single int\r\n const daysArray = [\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\"];\r\n const wantsFirstAvailableDay = days === 0 || days === 31;\r\n const wantsFirstAvailableTime = times === 0 || times === 3;\r\n const timeOfDay = times === 1 ? \"morning\" : \"afternoon\";\r\n\r\n if (wantsFirstAvailableDay) {\r\n if (wantsFirstAvailableTime) {\r\n return \"First available day and time\";\r\n }\r\n return `First available ${timeOfDay}`;\r\n }\r\n\r\n // This loops over each bit in the days byte and pushes the corresponding\r\n // day into the wantedDays array\r\n let wantedDays = [];\r\n for (let i = 0; i < 5; i++) {\r\n if (days & (1 << i)) {\r\n days ^= (1 << i);\r\n wantedDays.push(daysArray[i]);\r\n }\r\n }\r\n\r\n let formattedDays = \"\";\r\n if (wantedDays.length > 2) {\r\n formattedDays = `${[...wantedDays].slice(0, -1).join(\", \")} or ${wantedDays[wantedDays.length - 1]}`;\r\n } \r\n else if (wantedDays.length === 2) {\r\n formattedDays = `${wantedDays[0]} or ${wantedDays[1]}`;\r\n } \r\n else {\r\n formattedDays = wantedDays[0] ? wantedDays[0] : \"\";\r\n }\r\n\r\n return `${wantsFirstAvailableTime ? \"First available on \" : \"\"}${formattedDays}${!wantsFirstAvailableTime ? ` ${timeOfDay}` : \"\"}`;\r\n }\r\n\r\n determinePolicyHolderString(relation) {\r\n if (relation === \"Other\") {\r\n return `${this.props.state.insurance.policyHolder.firstName} ${this.props.state.insurance.policyHolder.lastName}`;\r\n } \r\n else if (relation === strings.ME) {\r\n return \"Me\";\r\n } \r\n else if (relation === strings.THE_PATIENT) {\r\n return \"The patient\";\r\n }\r\n return this.props.state.forMe ? `My ${relation.toLowerCase()}` : `The patient’s ${relation.toLowerCase()}`;\r\n }\r\n\r\n determinePolicyHolderAddressString(whereToSend) {\r\n const relation = this.props.state.insurance.billing.relation;\r\n const firstName = this.props.state.insurance.billing.firstName;\r\n const lastName = this.props.state.insurance.billing.lastName;\r\n const formattedFirstName = firstName.charAt(0).toUpperCase() + firstName.slice(1);\r\n const formattedLastName = lastName.charAt(0).toUpperCase() + lastName.slice(1);\r\n\r\n if (whereToSend === strings.TO_MY_ADDRESS || whereToSend === strings.TO_PATIENTS_ADDRESS) {\r\n return whereToSend;\r\n }\r\n if (relation === \"Other\") {\r\n return `To ${formattedFirstName} ${formattedLastName}`; \r\n }\r\n return this.props.state.forMe ? `To my ${relation.toLowerCase()}` : `To the patient’s ${relation.toLowerCase()}`;\r\n }\r\n\r\n valid() {\r\n return true;\r\n }\r\n\r\n render() {\r\n const { isSubmitting } = this.state;\r\n const { paymentMethod, appointment, insurance, patientSeenRecently, forMe } = this.props.state;\r\n let title = \"Review your entry.\";\r\n let subtitle = \"Please verify this information is correct before submitting.\";\r\n let bodyCopy = \"\";\r\n\r\n if (this.props.history.action == \"POP\") {\r\n title = \"Your appointment request has already been submitted.\";\r\n subtitle = \"\";\r\n bodyCopy = \"Continue on to schedule a callback with a patient financial advocate (PFA) to complete your request.\"\r\n }\r\n\r\n // We can't search the location for \"OH\", because some Ohio locations don't\r\n // include that. e.g. \"Medina Medical Office Building\". This could get\r\n // more obnoxious as we work with more departments and locations, possibly\r\n // in more states and/or countries.\r\n const isOhioOrNevada = appointment.location && !appointment.location.includes(\"Florida\");\r\n\r\n const shouldShowPolicyHolderFields = \r\n insurance.policyHolder.relation !== strings.ME &&\r\n insurance.policyHolder.relation !== strings.THE_PATIENT &&\r\n !patientSeenRecently &&\r\n paymentMethod === \"insurance\";\r\n\r\n const shouldShowBillingName = insurance.whereToSend === strings.SOMEWHERE_ELSE;\r\n\r\n const shouldShowBillingAddr = \r\n shouldShowBillingName || \r\n (!forMe && insurance.whereToSend === strings.TO_MY_ADDRESS);\r\n\r\n const shouldShowBillingDob = \r\n shouldShowBillingAddr &&\r\n (\r\n (insurance.policyHolder.firstName !== insurance.billing.firstName) ||\r\n (insurance.policyHolder.lastName !== insurance.billing.lastName) ||\r\n (insurance.policyHolder.relation !== insurance.billing.relation) ||\r\n (insurance.policyHolder.dob !== insurance.billing.dob)\r\n );\r\n\r\n let inputList = [\r\n !this.props.state.forMe ? \r\n {\r\n fieldsetLegend: \"Your Contact Information\",\r\n fieldsetColumns: 1,\r\n className: \"review-list-fieldset\",\r\n inputs: [\r\n {\r\n type: \"text\",\r\n id: \"contact-relation\",\r\n isEditable: false,\r\n label: \"Your relationship to the patient:\",\r\n existingContent: this.props.state.contact.relation\r\n },\r\n {\r\n type: \"text\",\r\n id: \"name\",\r\n isEditable: false,\r\n label: \"Your name:\",\r\n existingContent: `${this.props.state.contact.firstName} ${this.props.state.contact.lastName}`\r\n },\r\n {\r\n type: \"text\",\r\n id: \"email\",\r\n isEditable: false,\r\n label: \"Your email:\",\r\n existingContent: this.props.state.contact.email\r\n },\r\n {\r\n type: \"text\",\r\n id: \"phone\",\r\n isEditable: false,\r\n label: \"Your phone number:\",\r\n existingContent: this.formatPhoneNumber(this.props.state.contact.phone)\r\n }\r\n ]\r\n } : null, // End of Contact Info fieldset.\r\n\r\n // Either the new patient or established patient info.\r\n this.props.state.patientSeenRecently ? \r\n {\r\n fieldsetLegend: \"Patient Information\", // Established Patient info\r\n fieldsetColumns: 1,\r\n className: \"review-list-fieldset\",\r\n inputs: [\r\n {\r\n type: \"text\",\r\n id: \"established-patient-name\",\r\n isEditable: false,\r\n label: !this.props.state.forMe ? \"Patient’s name:\" : \"Name:\",\r\n existingContent: `${this.props.state.patient.firstName} ${this.props.state.patient.lastName}`\r\n },\r\n this.props.state.forMe ? \r\n {\r\n type: \"text\",\r\n id: \"established-patient-email\",\r\n isEditable: false,\r\n label: \"Email:\",\r\n existingContent: this.props.state.patient.email\r\n } : null,\r\n {\r\n type: \"text\",\r\n id: \"established-patient-phone\",\r\n isEditable: false,\r\n label: !this.props.state.forMe ? \"Patient’s phone number:\" : \"Phone number:\",\r\n existingContent: this.formatPhoneNumber(this.props.state.patient.phone)\r\n },\r\n {\r\n type: \"text\",\r\n id: \"established-patient-dob\",\r\n isEditable: false,\r\n label: !this.props.state.forMe ? \"Patient’s date of birth:\" : \"Date of birth:\",\r\n existingContent: this.formatDate(this.props.state.patient.dob)\r\n },\r\n {\r\n type: \"text\",\r\n id: \"established-patient-ssn\",\r\n isEditable: false,\r\n label: this.props.state.forMe ? \"Social Security Number:\" : \"Patient’s Social Security Number:\",\r\n existingContent: this.props.state.patient.ssn ? `Ending in ${this.props.state.patient.ssn}` : strings.NOT_PROVIDED\r\n }\r\n ]\r\n } : // end of Established Patient info fieldset\r\n {\r\n fieldsetLegend: \"Patient Information\", // New Patient info\r\n fieldsetColumns: 1,\r\n className: \"review-list-fieldset\",\r\n inputs: [\r\n {\r\n type: \"text\",\r\n id: \"new-patient-name\",\r\n isEditable: false,\r\n label: !this.props.state.forMe ? \"Patient’s name:\" : \"Name:\",\r\n existingContent: `${this.props.state.patient.firstName} ${this.props.state.patient.lastName}`\r\n },\r\n {\r\n type: \"text\",\r\n id: \"new-patient-gender\",\r\n isEditable: false,\r\n label: !this.props.state.forMe ? \"Patient’s gender:\" : \"Gender:\",\r\n existingContent: this.props.state.patient.gender\r\n },\r\n {\r\n type: \"text\",\r\n id: \"new-patient-marital-status\",\r\n isEditable: false,\r\n label: !this.props.state.forMe ? \"Patient’s marital status:\" : \"Marital status:\",\r\n existingContent: this.props.state.patient.maritalStatus\r\n },\r\n {\r\n type: \"text\",\r\n id: \"new-patient-dob\",\r\n isEditable: false,\r\n label: !this.props.state.forMe ? \"Patient’s date of birth:\" : \"Date of birth:\",\r\n existingContent: this.formatDate(this.props.state.patient.dob)\r\n },\r\n {\r\n type: \"text\",\r\n id: \"new-patient-address\",\r\n isEditable: false,\r\n label: !this.props.state.forMe ? \"Patient’s address:\" : \"Address:\",\r\n existingContent: (\r\n
    \r\n {this.props.state.patient.address1}, {this.props.state.patient.address2}\r\n {this.props.state.patient.address2 ? \", \" : \"\"}\r\n
    \r\n {this.props.state.patient.city}, {this.props.state.patient.state} {this.props.state.patient.zip}\r\n
    \r\n )\r\n },\r\n this.props.state.forMe ? \r\n {\r\n type: \"text\",\r\n id: \"new-patient-email\",\r\n isEditable: false,\r\n label: \"Email:\",\r\n existingContent: this.props.state.patient.email\r\n } : null,\r\n {\r\n type: \"text\",\r\n id: \"new-patient-phone\",\r\n isEditable: false,\r\n label: !this.props.state.forMe ? \"Patient’s phone number\" : \"Phone number:\",\r\n existingContent: this.props.state.patient.phone ? this.formatPhoneNumber(this.props.state.patient.phone) : strings.NOT_PROVIDED\r\n }\r\n ]\r\n }, // end of New Patient info fieldset\r\n\r\n {\r\n fieldsetLegend: \"Appointment Information\",\r\n fieldsetColumns: 1,\r\n className: \"review-list-fieldset\",\r\n inputs: [\r\n {\r\n type: \"text-area\",\r\n id: \"reason\",\r\n isEditable: false,\r\n label: \"Reason for visit:\",\r\n existingContent: this.props.state.appointment.reason\r\n },\r\n {\r\n type: \"text-area\",\r\n id: \"diagnosis\",\r\n isEditable: false,\r\n label: \"Diagnosis:\",\r\n existingContent: this.props.state.appointment.diagnosis ? this.props.state.appointment.diagnosis : strings.NOT_PROVIDED\r\n },\r\n (this.props.state.appointment.translationInterpretationServices.needServices) ?\r\n {\r\n type: \"text\",\r\n id: \"interpretation-service\",\r\n isEditable: false,\r\n label: \"Interpretation service needed:\",\r\n existingContent: this.props.state.appointment.translationInterpretationServices.whichService === strings.ASL ? \"ASL interpretation\" : this.props.state.appointment.translationInterpretationServices.language\r\n } : null,\r\n ((this.props.state.appointment.translationInterpretationServices.needServices && this.props.state.appointment.translationInterpretationServices.whichService === strings.ASL) ||\r\n (!this.props.state.appointment.translationInterpretationServices.needServices)) ?\r\n {\r\n type: \"text\",\r\n id: \"primary-language\",\r\n isEditable: false,\r\n label: \"Primary language:\",\r\n existingContent: this.props.state.appointment.translationInterpretationServices.language\r\n } : null,\r\n this.props.state.appointment.referringPhysician.haveReferringPhys ? \r\n {\r\n type: \"text\",\r\n id: \"ref-phys\",\r\n isEditable: false,\r\n label: \"Referring physician:\",\r\n existingContent: this.props.state.appointment.referringPhysician.firstName + \" \" + this.props.state.appointment.referringPhysician.lastName\r\n } : null,\r\n this.props.state.appointment.referringPhysician.haveReferringPhys ? \r\n {\r\n type: \"text\",\r\n id: \"ref-phys-phone\",\r\n isEditable: false,\r\n label: \"Referring physician’s phone number:\",\r\n existingContent: this.formatPhoneNumber(this.props.state.appointment.referringPhysician.phone)\r\n } : null,\r\n {\r\n type: \"text\",\r\n id: \"specialty-dept\",\r\n isEditable: false,\r\n label: \"Specialty:\",\r\n existingContent: this.props.state.appointment.department.split(\"|\")[1]\r\n },\r\n {\r\n type: \"text\",\r\n id: \"location\",\r\n isEditable: false,\r\n label: \"Preferred location:\",\r\n existingContent: this.props.state.appointment.location.split(\"|\")[1]\r\n },\r\n {\r\n type: \"text\",\r\n id: \"preferred-phys\",\r\n isEditable: false,\r\n label: \"Preferred provider:\",\r\n existingContent: this.props.state.appointment.provider ? this.props.state.appointment.provider : strings.NOT_PROVIDED\r\n },\r\n {\r\n type: \"text\",\r\n id: \"visit-type\",\r\n isEditable: false,\r\n label: \"Kind of visit:\",\r\n existingContent: this.props.state.appointment.type === \"Virtual\" ? \"Virtual (if available)\" : this.props.state.appointment.type\r\n },\r\n {\r\n type: \"text\",\r\n id: \"day-w\",\r\n isEditable: false,\r\n label: \"Preferred day and time:\",\r\n existingContent: this.formatDaysAndTimes(this.props.state.appointment)\r\n }\r\n ]\r\n }, // end of Appointment Info fieldset\r\n\r\n this.props.state.paymentMethod === \"out-of-pocket\" ? \r\n {\r\n // OOP fieldset\r\n fieldsetLegend: \"Payment Information\",\r\n fieldsetColumns: 1,\r\n className: \"review-list-fieldset\",\r\n inputs: [\r\n {\r\n type: \"text\",\r\n id: \"oop-payment-method\",\r\n isEditable: false,\r\n label: \"Payment method:\",\r\n existingContent: \"Out-of-pocket\"\r\n },\r\n {\r\n type: \"text\",\r\n id: \"oop-pfa-info\",\r\n isEditable: false,\r\n label: \"For financial clearance:\",\r\n existingContent: isOhioOrNevada ? \"Schedule a callback appointment.\" : \"You can expect a call from a PFA within 24-48 hours to complete your request.\"\r\n }\r\n ]\r\n } : null, // end of OOP fieldset\r\n\r\n this.props.state.paymentMethod === \"insurance\" ? \r\n {\r\n // Insurance fieldset\r\n fieldsetLegend: \"Insurance Information\",\r\n fieldsetColumns: 1,\r\n className: \"review-list-fieldset\",\r\n inputs: [\r\n {\r\n type: \"text\",\r\n id: \"ins-company\",\r\n isEditable: false,\r\n label: \"Name of insurance company:\",\r\n existingContent: this.props.state.insurance.company\r\n },\r\n {\r\n type: \"text\",\r\n id: \"ins-product\",\r\n isEditable: false,\r\n label: \"Product type:\",\r\n existingContent: this.props.state.insurance.policyType\r\n },\r\n {\r\n type: \"text\",\r\n id: \"ins-policy-number\",\r\n isEditable: false,\r\n label: \"Policy or ID number:\",\r\n existingContent: this.props.state.insurance.policyNumber\r\n },\r\n {\r\n type: \"text\",\r\n id: \"ins-group\",\r\n isEditable: false,\r\n label: \"Group number:\",\r\n existingContent: this.props.state.insurance.group ? this.props.state.insurance.group : strings.NOT_PROVIDED\r\n },\r\n\r\n // Start of insurance fields to include for policy holder.\r\n !this.props.state.patientSeenRecently && this.props.state.insurance.policyHolder.relation !== \"Other\" ? \r\n {\r\n type: \"text\",\r\n id: \"ins-policy-holder\",\r\n isEditable: false,\r\n label: \"Policy holder:\",\r\n existingContent: this.determinePolicyHolderString(this.props.state.insurance.policyHolder.relation)\r\n } : null,\r\n shouldShowPolicyHolderFields ? \r\n {\r\n type: \"text\",\r\n id: \"ins-policy-name\",\r\n isEditable: false,\r\n label: \"Policy holder’s name:\",\r\n existingContent: `${this.props.state.insurance.policyHolder.firstName} ${this.props.state.insurance.policyHolder.lastName}`\r\n } : null,\r\n shouldShowPolicyHolderFields ? \r\n {\r\n type: \"text\",\r\n id: \"ins-policy-dob\",\r\n isEditable: false,\r\n label: \"Policy holder’s date of birth:\",\r\n existingContent: this.formatDate(this.props.state.insurance.policyHolder.dob)\r\n } : null,\r\n shouldShowPolicyHolderFields ? \r\n {\r\n type: \"text\",\r\n id: \"ins-policy-email\",\r\n isEditable: false,\r\n label: \"Policy holder’s email:\",\r\n existingContent: this.props.state.insurance.policyHolder.email\r\n } : null,\r\n // End of insurance fields to include for policy holder.\r\n\r\n // Start of insurance fields to include for billing and billing address.\r\n {\r\n type: \"text\",\r\n id: \"ins-billing-where-to-send\",\r\n isEditable: false,\r\n label: \"Where to send the bill:\",\r\n existingContent: this.determinePolicyHolderAddressString(this.props.state.insurance.whereToSend)\r\n },\r\n shouldShowBillingName && this.props.state.insurance.billing.relation !== \"Other\" ?\r\n {\r\n type: \"text\",\r\n id: \"ins-billing-name\",\r\n isEditable: false,\r\n label: \"Their name:\",\r\n existingContent: `${this.props.state.insurance.billing.firstName} ${this.props.state.insurance.billing.lastName}`\r\n } : null,\r\n shouldShowBillingDob ? \r\n {\r\n type: \"text\",\r\n id: \"ins-billing-dob\",\r\n isEditable: false,\r\n label: (this.props.state.insurance.whereToSend === strings.TO_MY_ADDRESS ? \"Your\" : \"Their\") + \" date of birth:\",\r\n existingContent: this.formatDate(this.props.state.insurance.billing.dob)\r\n } : null,\r\n shouldShowBillingAddr ? \r\n {\r\n type: \"text\",\r\n id: \"ins-billing-addr\",\r\n isEditable: false,\r\n label: (this.props.state.insurance.whereToSend === strings.TO_MY_ADDRESS ? \"Your\" : \"Their\") + \" address:\",\r\n existingContent: (\r\n
    \r\n {this.props.state.insurance.billing.address1}, {this.props.state.insurance.billing.address2}\r\n {this.props.state.insurance.billing.address2 ? \", \" : \"\"}\r\n
    \r\n {this.props.state.insurance.billing.city}, {this.props.state.insurance.billing.state} {this.props.state.insurance.billing.zip}\r\n
    \r\n )\r\n } : null\r\n ]\r\n } : null, // end of Insurance fieldset\r\n\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n {\r\n type: \"button\",\r\n id: \"back\",\r\n className: \"btn--secondary\",\r\n value: \"Back\",\r\n onClick: () => {\r\n this.props.history.goBack();\r\n }\r\n },\r\n {\r\n type: \"button\",\r\n id: \"finish\",\r\n className: \"btn--primary\",\r\n disabled: isSubmitting,\r\n value: this.props.state.paymentMethod === \"out-of-pocket\" && isOhioOrNevada ? \"Next\" : \"Finish\",\r\n onClick: () => {\r\n this.startSubmissionCycle();\r\n }\r\n }\r\n ]\r\n }\r\n ];\r\n let inputListNoData = [\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n {\r\n type: \"button\",\r\n id: \"finish\",\r\n className: \"btn--primary\",\r\n disabled: isSubmitting,\r\n value: \"Next\",\r\n onClick: () => {\r\n this.handleSuccess();\r\n this.props.history.push(nextPage());\r\n }\r\n }\r\n ]\r\n }\r\n ];\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    {title}

    \r\n

    {subtitle}

    \r\n
    \r\n
    \r\n {this.props.history.action != \"PUSH\" && (\r\n

    {bodyCopy}

    \r\n )}\r\n
    \r\n
    \r\n {this.props.history.action == \"POP\" && (\r\n \r\n )}\r\n {this.props.history.action != \"POP\" && (\r\n \r\n )}\r\n \r\n {isSubmitting && (\r\n \r\n )}\r\n
    \r\n );\r\n }\r\n} \r\nReviewPage.propTypes = {\r\n state: defaultState.statePropType,\r\n webAppointmentClearOutData: PropTypes.func.isRequired,\r\n webAppointmentSetRequestResults: PropTypes.func.isRequired\r\n};\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n state: state.webAppointmentForm // That’s right, the whole webappointment state.\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n webAppointmentClearOutData: () => dispatch(webAppointmentActions.webAppointmentClearOutData()),\r\n webAppointmentSetRequestResults: (value) => dispatch(webAppointmentActions.webAppointmentSetRequestResults(value))\r\n };\r\n};\r\n\r\n// connects component to redux, and passes along the router\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(ReviewPage));\r\n","import React, { Component } from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport InputList from '../../../shared/components/presentation/input-list/InputList';\r\nimport { Grid, GridItem } from '../../../shared/components/presentation/grid/Grid';\r\nimport { connect } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport { nextPage } from '../../functions/nextPage';\r\nimport * as webAppointmentActions from '../../actions/webAppointmentActions';\r\nimport * as webAppointmentConstants from '../../constants/webAppointmentConstants';\r\n\r\nexport class PfaAppointmentPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = { popup: null };\r\n }\r\n\r\n displayWindow = () => {\r\n let popup;\r\n // this.state.windowObj will be defined in the jest test code, so that we can\r\n // verify that .open() gets called on the right button push (or whatever event).\r\n // The standard window.open() function that’s available in a browser isn’t\r\n // implemented for test code.\r\n if (this.state[\"windowObj\"] !== undefined) {\r\n popup = this.state.windowObj.open(webAppointmentConstants.myChartPfaScheduleUrl, '', 'width=780,height=620');\r\n }\r\n else {\r\n popup = window.open(webAppointmentConstants.myChartPfaScheduleUrl, '', 'width=780,height=620');\r\n }\r\n this.setState({ popup });\r\n setTimeout(this.checkWindow, 500);\r\n }\r\n\r\n checkWindow = () => {\r\n if (this.state.popup && this.state.popup.closed) {\r\n this.props.webAppointmentPfaCallbackWindowDismissed(true);\r\n this.setState({ popup: null });\r\n }\r\n else {\r\n setTimeout(this.checkWindow, 500);\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.props.webAppointmentPfaCallbackWindowDismissed(false);\r\n }\r\n\r\n render() {\r\n const title = \"For faster scheduling, choose a callback time.\";\r\n\r\n let inputlist = [\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n !this.props.pfaCallbackWindowDismissed ?\r\n {\r\n type: 'button',\r\n id: \"schedule-callback\",\r\n className: \"btn--primary\",\r\n value: 'Schedule Callback',\r\n onClick: () => {\r\n this.displayWindow();\r\n }\r\n } : null,\r\n !this.props.pfaCallbackWindowDismissed ?\r\n {\r\n type: 'button',\r\n id: \"skip-and-finish\",\r\n className: \"btn--tertiary\",\r\n value: 'Skip and finish',\r\n onClick: () => {\r\n this.props.history.push(nextPage());\r\n }\r\n } : null,\r\n this.props.pfaCallbackWindowDismissed ?\r\n {\r\n type: 'button',\r\n id: \"finish\",\r\n className: \"btn--primary\",\r\n value: 'Finish',\r\n onClick: () => {\r\n this.props.history.push(nextPage());\r\n }\r\n } : null\r\n ]\r\n }\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    {title}

    \r\n
    \r\n
    \r\n

    For your convenience, schedule a time to receive a callback from a patient financial advocate (PFA) to complete your appointment request. Times may be available as soon as today. (A pop-up window will open to schedule your callback.)

    \r\n

    Or, you can reach us by calling 855.831.1284, Monday - Friday, 8 a.m. - 6 p.m.

    \r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nPfaAppointmentPage.propTypes = {\r\n pfaCallbackWindowDismissed: PropTypes.bool,\r\n webAppointmentPfaCallbackWindowDismissed: PropTypes.func.isRequired,\r\n webAppointmentSetRequestResults: PropTypes.func.isRequired\r\n};\r\n\r\nfunction mapStateToProps(state, ownProps) {\r\n return {\r\n pfaCallbackWindowDismissed: state.webAppointmentForm.pfaCallbackWindowDismissed\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n webAppointmentPfaCallbackWindowDismissed: (value) => dispatch(webAppointmentActions.webAppointmentPfaCallbackWindowDismissed(value)),\r\n webAppointmentSetRequestResults: (value) => dispatch(webAppointmentActions.webAppointmentSetRequestResults(value))\r\n };\r\n};\r\n\r\n// connects component to redux, and passes along the router\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(PfaAppointmentPage));\r\n","import React, { Component } from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport InputList from '../../../shared/components/presentation/input-list/InputList';\r\nimport { Grid, GridItem } from '../../../shared/components/presentation/grid/Grid';\r\nimport { connect } from 'react-redux';\r\nimport { nextPage } from '../../functions/nextPage';\r\nimport * as routes from '../../../constants/routes';\r\n\r\nexport class ThankYouPfaAppointmentPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.oldTitle = document.title;\r\n }\r\n\r\n componentDidMount() {\r\n window.onpopstate = () => {\r\n this.props.history.push(routes.WEB_APPOINTMENT_WHAT_TO_EXPECT_PAGE);\r\n }\r\n }\r\n\r\n render() {\r\n document.title = \"Thank You For Requesting an Appointment | Cleveland Clinic\";\r\n const title = \"Thank you for choosing Cleveland Clinic.\";\r\n\r\n let inputlist = [\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n {\r\n type: 'button',\r\n id: \"back\",\r\n className: \"btn--primary\",\r\n value: 'Request another appointment',\r\n onClick: () => {\r\n document.title = this.oldTitle;\r\n this.props.history.push(nextPage());\r\n }\r\n }\r\n ]\r\n }\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    {title}

    \r\n
    \r\n
    \r\n\r\n

    What happens next:

    \r\n

    A record of your pending appointment request has been emailed to you.

    \r\n

    After receiving financial clearance, your request will be sent to the appropriate department and a Cleveland Clinic representative will email you with the time and date of your appointment.

    \r\n

    To check on your financial clearance status, you can speak to an appointment specialist at 866.320.4573.

    \r\n

    What you can do now:

    \r\n

    In the meantime, you can find reliable answers to your medical questions at our Health Library or visit Health Essentials for health and wellness advice or request another appointment.

    \r\n
    \r\n
    \r\n\r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\n// connects component to redux, and passes along the router\r\nexport default withRouter(connect()(ThankYouPfaAppointmentPage));\r\n","import React, { Component } from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport InputList from '../../../shared/components/presentation/input-list/InputList';\r\nimport { Grid, GridItem } from '../../../shared/components/presentation/grid/Grid';\r\nimport { connect } from 'react-redux';\r\nimport { nextPage } from '../../functions/nextPage';\r\nimport * as routes from '../../../constants/routes';\r\n\r\nexport class ThankYouPfaPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.oldTitle = document.title;\r\n this.appointment = this.props.location.state ? this.props.location.state.appointment : {};\r\n }\r\n\r\n componentDidMount() {\r\n window.onpopstate = () => {\r\n this.props.history.push(routes.WEB_APPOINTMENT_WHAT_TO_EXPECT_PAGE);\r\n }\r\n }\r\n\r\n render() {\r\n document.title = \"Thank You For Requesting an Appointment | Cleveland Clinic\";\r\n const title = \"Thank you for choosing Cleveland Clinic.\";\r\n\r\n const isFlorida = this.appointment.location && this.appointment.location.includes(\"Florida\");\r\n\r\n let inputlist = [\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n {\r\n type: 'button',\r\n id: \"back\",\r\n className: \"btn--primary\",\r\n value: 'Request another appointment',\r\n onClick: () => {\r\n document.title = this.oldTitle;\r\n this.props.history.push(nextPage());\r\n }\r\n }\r\n ]\r\n }\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    {title}

    \r\n
    \r\n
    \r\n\r\n

    What happens next:

    \r\n

    You can expect a call from a PFA within 24-48 hours to complete your request. After receiving financial clearance, your request will be sent to the appropriate department and a Cleveland Clinic representative will email you with the time and date of your appointment.

    \r\n

    To check on your financial clearance status, you can speak to an appointment specialist at {isFlorida ? \"954.689.5610\" : \"866.320.4573\"}.

    \r\n

    What you can do now:

    \r\n

    In the meantime, you can find reliable answers to your medical questions at our Health Library or visit Health Essentials for health and wellness advice or request another appointment.

    \r\n
    \r\n
    \r\n\r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\n// connects component to redux, and passes along the router\r\nexport default withRouter(connect()(ThankYouPfaPage));\r\n","import React, { Component } from \"react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport InputList from \"../../../shared/components/presentation/input-list/InputList\";\r\nimport { Grid, GridItem } from \"../../../shared/components/presentation/grid/Grid\";\r\nimport { connect } from \"react-redux\";\r\nimport { nextPage } from \"../../functions/nextPage\";\r\nimport * as routes from '../../../constants/routes';\r\n\r\nexport class ThankYouInsurancePage extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.oldTitle = document.title;\r\n }\r\n\r\n componentDidMount() {\r\n window.onpopstate = () => {\r\n this.props.history.push(routes.WEB_APPOINTMENT_WHAT_TO_EXPECT_PAGE);\r\n }\r\n }\r\n\r\n render() {\r\n document.title = \"Thank You For Requesting an Appointment | Cleveland Clinic\";\r\n const title = \"Thank you for choosing Cleveland Clinic.\";\r\n\r\n let inputlist = [\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n {\r\n type: \"button\",\r\n id: \"back\",\r\n className: \"btn--primary\",\r\n value: \"Request another appointment\",\r\n onClick: () => {\r\n document.title = this.oldTitle;\r\n this.props.history.push(nextPage());\r\n }\r\n }\r\n ]\r\n }\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    {title}

    \r\n
    \r\n
    \r\n

    What happens next:

    \r\n

    We’ve received your appointment request. A confirmation email has been sent to you. In the next couple of days, a Cleveland Clinic representative will email you with the time and date of your appointment.

    \r\n

    If you have any questions you can speak to an appointment specialist in Ohio at 866.320.4573, Florida at 877.463.2010 or Nevada at 702.483.6000.

    \r\n

    What you can do now:

    \r\n

    In the meantime, you can find reliable answers to your medical questions at our Health Library or visit Health Essentials for health and wellness advice or request another appointment.

    \r\n
    \r\n
    \r\n\r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\n// connects component to redux, and passes along the router\r\nexport default withRouter(connect()(ThankYouInsurancePage));\r\n","import React, { Component } from \"react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport InputList from \"../../../shared/components/presentation/input-list/InputList\";\r\nimport { Grid, GridItem } from \"../../../shared/components/presentation/grid/Grid\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport * as webAppointmentActions from \"../../actions/webAppointmentActions\";\r\nimport * as defaultState from \"../../constants/DefaultState\";\r\nimport * as strings from \"../../constants/strings\";\r\nimport \"./ErrorReviewPage.css\";\r\nimport { clearState } from '../../functions/loadState'\r\n\r\nexport class ErrorReviewPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n }\r\n\r\n formatDate(date) {\r\n // Convert from a date formatted line \"1982-06-23\" to something like \"06/23/1982\"\r\n if (date.match(/[0-9]{4}-[0-9]{2}-[0-9]{2}/)) {\r\n return date.substring(5, 7) + \"/\" + date.substring(8) + \"/\" + date.substring(0, 4);\r\n }\r\n return date;\r\n }\r\n\r\n formatPhoneNumber(phone) {\r\n // Convert pretty much any string with a reasonable number of digits into a US phone number\r\n phone.replace(/[^0-9]/g, \"\");\r\n switch (phone.length) {\r\n case 7:\r\n return phone.substring(0, 3) + \".\" + phone.substring(3);\r\n case 10:\r\n return phone.substring(0, 3) + \".\" + phone.substring(3, 6) + \".\" + phone.substring(6);\r\n case 11:\r\n if (phone.substring(0, 1) === \"1\") {\r\n return \"1\" + phone.substring(1, 4) + \".\" + phone.substring(4, 7) + \".\" + phone.substring(7);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n return phone;\r\n }\r\n\r\n formatDaysAndTimes(appointment) {\r\n let days = appointment.day; // days are stored as bits in a single int\r\n const times = appointment.time; // times are stored as bits in a single int\r\n const daysArray = [\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\"];\r\n const wantsFirstAvailableDay = days === 0 || days === 31;\r\n const wantsFirstAvailableTime = times === 0 || times === 3;\r\n const timeOfDay = times === 1 ? \"morning\" : \"afternoon\";\r\n\r\n if (wantsFirstAvailableDay) {\r\n if (wantsFirstAvailableTime) {\r\n return \"First available day and time\";\r\n }\r\n return `First available ${timeOfDay}`;\r\n }\r\n\r\n // This loops over each bit in the days byte and pushes the corresponding\r\n // day into the wantedDays array\r\n let wantedDays = [];\r\n for (let i = 0; i < 5; i++) {\r\n if (days & (1 << i)) {\r\n days ^= (1 << i);\r\n wantedDays.push(daysArray[i]);\r\n }\r\n }\r\n\r\n let formattedDays = \"\";\r\n if (wantedDays.length > 2) {\r\n formattedDays = `${[...wantedDays].slice(0, -1).join(\", \")} or ${wantedDays[wantedDays.length - 1]}`;\r\n } \r\n else if (wantedDays.length === 2) {\r\n formattedDays = `${wantedDays[0]} or ${wantedDays[1]}`;\r\n } \r\n else {\r\n formattedDays = wantedDays[0] ? wantedDays[0] : \"\";\r\n }\r\n\r\n return `${wantsFirstAvailableTime ? \"First available on \" : \"\"}${formattedDays}${!wantsFirstAvailableTime ? ` ${timeOfDay}` : \"\"}`;\r\n }\r\n\r\n determinePolicyHolderString(relation) {\r\n if (relation === \"Other\") {\r\n return `${this.props.state.insurance.policyHolder.firstName} ${this.props.state.insurance.policyHolder.lastName}`;\r\n } \r\n else if (relation === strings.ME) {\r\n return \"Me\";\r\n } \r\n else if (relation === strings.THE_PATIENT) {\r\n return \"The patient\";\r\n }\r\n return this.props.state.forMe ? `My ${relation.toLowerCase()}` : `The patient’s ${relation.toLowerCase()}`;\r\n }\r\n\r\n determinePolicyHolderAddressString(whereToSend) {\r\n const relation = this.props.state.insurance.billing.relation;\r\n const firstName = this.props.state.insurance.billing.firstName;\r\n const lastName = this.props.state.insurance.billing.lastName;\r\n const formattedFirstName = firstName.charAt(0).toUpperCase() + firstName.slice(1);\r\n const formattedLastName = lastName.charAt(0).toUpperCase() + lastName.slice(1);\r\n\r\n if (whereToSend === strings.TO_MY_ADDRESS || whereToSend === strings.TO_PATIENTS_ADDRESS) {\r\n return whereToSend;\r\n }\r\n if (relation === \"Other\") {\r\n return `To ${formattedFirstName} ${formattedLastName}`; \r\n }\r\n return this.props.state.forMe ? `To my ${relation.toLowerCase()}` : `To the patient’s ${relation.toLowerCase()}`;\r\n }\r\n\r\n valid() {\r\n return true;\r\n }\r\n\r\n render() {\r\n const { paymentMethod, appointment, insurance, patientSeenRecently, forMe } = this.props.state;\r\n const header = \"It looks like something went wrong and we're unable to submit your appointment request. We're so sorry.\";\r\n const paragraphHeader = \"We want to help you successfully schedule your appointment. Here's what to do next:\"\r\n const title = 'Your entry';\r\n\r\n // The first paragraph is common, regardless of appt location.\r\n const subtitle = \"All of the information you've entered is below. You will need this information handy when speaking to someone in the appointment center.\";\r\n\r\n // We can't search the location for \"OH\", because some Ohio locations don't\r\n // include that. e.g. \"Medina Medical Office Building\". This could get\r\n // more obnoxious as we work with more departments and locations, possibly\r\n // in more states and/or countries.\r\n const isOhioOrNevada = appointment.location && !appointment.location.includes(\"Florida\");\r\n\r\n const shouldShowPolicyHolderFields = \r\n insurance.policyHolder.relation !== strings.ME &&\r\n insurance.policyHolder.relation !== strings.THE_PATIENT &&\r\n !patientSeenRecently &&\r\n paymentMethod === \"insurance\";\r\n\r\n const shouldShowBillingName = insurance.whereToSend === strings.SOMEWHERE_ELSE;\r\n\r\n const shouldShowBillingAddr = \r\n shouldShowBillingName || \r\n (!forMe && insurance.whereToSend === strings.TO_MY_ADDRESS);\r\n\r\n const shouldShowBillingDob = \r\n shouldShowBillingAddr &&\r\n (\r\n (insurance.policyHolder.firstName !== insurance.billing.firstName) ||\r\n (insurance.policyHolder.lastName !== insurance.billing.lastName) ||\r\n (insurance.policyHolder.relation !== insurance.billing.relation) ||\r\n (insurance.policyHolder.dob !== insurance.billing.dob)\r\n );\r\n\r\n let inputlist = [\r\n !this.props.state.forMe ? \r\n {\r\n fieldsetLegend: \"Your Contact Information\",\r\n fieldsetColumns: 1,\r\n className: \"review-list-fieldset\",\r\n inputs: [\r\n {\r\n type: \"text\",\r\n id: \"contact-relation\",\r\n isEditable: false,\r\n label: \"Your relationship to the patient:\",\r\n existingContent: this.props.state.contact.relation\r\n },\r\n {\r\n type: \"text\",\r\n id: \"name\",\r\n isEditable: false,\r\n label: \"Your name:\",\r\n existingContent: `${this.props.state.contact.firstName} ${this.props.state.contact.lastName}`\r\n },\r\n {\r\n type: \"text\",\r\n id: \"email\",\r\n isEditable: false,\r\n label: \"Your email:\",\r\n existingContent: this.props.state.contact.email\r\n },\r\n {\r\n type: \"text\",\r\n id: \"phone\",\r\n isEditable: false,\r\n label: \"Your phone number:\",\r\n existingContent: this.formatPhoneNumber(this.props.state.contact.phone)\r\n }\r\n ]\r\n } : null, // End of Contact Info fieldset.\r\n\r\n // Either the new patient or established patient info.\r\n this.props.state.patientSeenRecently ? \r\n {\r\n fieldsetLegend: \"Patient Information\", // Established Patient info\r\n fieldsetColumns: 1,\r\n className: \"review-list-fieldset\",\r\n inputs: [\r\n {\r\n type: \"text\",\r\n id: \"established-patient-name\",\r\n isEditable: false,\r\n label: !this.props.state.forMe ? \"Patient’s name:\" : \"Name:\",\r\n existingContent: `${this.props.state.patient.firstName} ${this.props.state.patient.lastName}`\r\n },\r\n this.props.state.forMe ? \r\n {\r\n type: \"text\",\r\n id: \"established-patient-email\",\r\n isEditable: false,\r\n label: \"Email:\",\r\n existingContent: this.props.state.patient.email\r\n } : null,\r\n {\r\n type: \"text\",\r\n id: \"established-patient-phone\",\r\n isEditable: false,\r\n label: !this.props.state.forMe ? \"Patient’s phone number:\" : \"Phone number:\",\r\n existingContent: this.formatPhoneNumber(this.props.state.patient.phone)\r\n },\r\n {\r\n type: \"text\",\r\n id: \"established-patient-dob\",\r\n isEditable: false,\r\n label: !this.props.state.forMe ? \"Patient’s date of birth:\" : \"Date of birth:\",\r\n existingContent: this.formatDate(this.props.state.patient.dob)\r\n },\r\n {\r\n type: \"text\",\r\n id: \"established-patient-ssn\",\r\n isEditable: false,\r\n label: this.props.state.forMe ? \"Social Security Number:\" : \"Patient’s Social Security Number:\",\r\n existingContent: this.props.state.patient.ssn ? `Ending in ${this.props.state.patient.ssn}` : strings.NOT_PROVIDED\r\n }\r\n ]\r\n } : // end of Established Patient info fieldset\r\n {\r\n fieldsetLegend: \"Patient Information\", // New Patient info\r\n fieldsetColumns: 1,\r\n className: \"review-list-fieldset\",\r\n inputs: [\r\n {\r\n type: \"text\",\r\n id: \"new-patient-name\",\r\n isEditable: false,\r\n label: !this.props.state.forMe ? \"Patient’s name:\" : \"Name:\",\r\n existingContent: `${this.props.state.patient.firstName} ${this.props.state.patient.lastName}`\r\n },\r\n {\r\n type: \"text\",\r\n id: \"new-patient-gender\",\r\n isEditable: false,\r\n label: !this.props.state.forMe ? \"Patient’s gender:\" : \"Gender:\",\r\n existingContent: this.props.state.patient.gender\r\n },\r\n {\r\n type: \"text\",\r\n id: \"new-patient-marital-status\",\r\n isEditable: false,\r\n label: !this.props.state.forMe ? \"Patient’s marital status:\" : \"Marital status:\",\r\n existingContent: this.props.state.patient.maritalStatus\r\n },\r\n {\r\n type: \"text\",\r\n id: \"new-patient-dob\",\r\n isEditable: false,\r\n label: !this.props.state.forMe ? \"Patient’s date of birth:\" : \"Date of birth:\",\r\n existingContent: this.formatDate(this.props.state.patient.dob)\r\n },\r\n {\r\n type: \"text\",\r\n id: \"new-patient-address\",\r\n isEditable: false,\r\n label: !this.props.state.forMe ? \"Patient’s address:\" : \"Address:\",\r\n existingContent: (\r\n
    \r\n {this.props.state.patient.address1}, {this.props.state.patient.address2}\r\n {this.props.state.patient.address2 ? \", \" : \"\"}\r\n
    \r\n {this.props.state.patient.city}, {this.props.state.patient.state} {this.props.state.patient.zip}\r\n
    \r\n )\r\n },\r\n this.props.state.forMe ? \r\n {\r\n type: \"text\",\r\n id: \"new-patient-email\",\r\n isEditable: false,\r\n label: \"Email:\",\r\n existingContent: this.props.state.patient.email\r\n } : null,\r\n {\r\n type: \"text\",\r\n id: \"new-patient-phone\",\r\n isEditable: false,\r\n label: !this.props.state.forMe ? \"Patient’s phone number\" : \"Phone number:\",\r\n existingContent: this.props.state.patient.phone ? this.formatPhoneNumber(this.props.state.patient.phone) : strings.NOT_PROVIDED\r\n }\r\n ]\r\n }, // end of New Patient info fieldset\r\n\r\n {\r\n fieldsetLegend: \"Appointment Information\",\r\n fieldsetColumns: 1,\r\n className: \"review-list-fieldset\",\r\n inputs: [\r\n {\r\n type: \"text-area\",\r\n id: \"reason\",\r\n isEditable: false,\r\n label: \"Reason for visit:\",\r\n existingContent: this.props.state.appointment.reason\r\n },\r\n {\r\n type: \"text-area\",\r\n id: \"diagnosis\",\r\n isEditable: false,\r\n label: \"Diagnosis:\",\r\n existingContent: this.props.state.appointment.diagnosis ? this.props.state.appointment.diagnosis : strings.NOT_PROVIDED\r\n },\r\n (this.props.state.appointment.translationInterpretationServices.needServices) ?\r\n {\r\n type: \"text\",\r\n id: \"interpretation-service\",\r\n isEditable: false,\r\n label: \"Interpretation service needed:\",\r\n existingContent: this.props.state.appointment.translationInterpretationServices.whichService === strings.ASL ? \"ASL interpretation\" : this.props.state.appointment.translationInterpretationServices.language\r\n } : null,\r\n ((this.props.state.appointment.translationInterpretationServices.needServices && this.props.state.appointment.translationInterpretationServices.whichService === strings.ASL) ||\r\n (!this.props.state.appointment.translationInterpretationServices.needServices)) ?\r\n {\r\n type: \"text\",\r\n id: \"primary-language\",\r\n isEditable: false,\r\n label: \"Primary language:\",\r\n existingContent: this.props.state.appointment.translationInterpretationServices.language\r\n } : null,\r\n this.props.state.appointment.referringPhysician.haveReferringPhys ? \r\n {\r\n type: \"text\",\r\n id: \"ref-phys\",\r\n isEditable: false,\r\n label: \"Referring physician:\",\r\n existingContent: this.props.state.appointment.referringPhysician.firstName + \" \" + this.props.state.appointment.referringPhysician.lastName\r\n } : null,\r\n this.props.state.appointment.referringPhysician.haveReferringPhys ? \r\n {\r\n type: \"text\",\r\n id: \"ref-phys-phone\",\r\n isEditable: false,\r\n label: \"Referring physician’s phone number:\",\r\n existingContent: this.formatPhoneNumber(this.props.state.appointment.referringPhysician.phone)\r\n } : null,\r\n {\r\n type: \"text\",\r\n id: \"specialty-dept\",\r\n isEditable: false,\r\n label: \"Specialty:\",\r\n existingContent: this.props.state.appointment.department.split(\"|\")[1]\r\n },\r\n {\r\n type: \"text\",\r\n id: \"location\",\r\n isEditable: false,\r\n label: \"Preferred location:\",\r\n existingContent: this.props.state.appointment.location.split(\"|\")[1]\r\n },\r\n {\r\n type: \"text\",\r\n id: \"preferred-phys\",\r\n isEditable: false,\r\n label: \"Preferred provider:\",\r\n existingContent: this.props.state.appointment.provider ? this.props.state.appointment.provider : strings.NOT_PROVIDED\r\n },\r\n {\r\n type: \"text\",\r\n id: \"visit-type\",\r\n isEditable: false,\r\n label: \"Kind of visit:\",\r\n existingContent: this.props.state.appointment.type === \"Virtual\" ? \"Virtual (if available)\" : this.props.state.appointment.type\r\n },\r\n {\r\n type: \"text\",\r\n id: \"day-w\",\r\n isEditable: false,\r\n label: \"Preferred day and time:\",\r\n existingContent: this.formatDaysAndTimes(this.props.state.appointment)\r\n }\r\n ]\r\n }, // end of Appointment Info fieldset\r\n\r\n this.props.state.paymentMethod === \"out-of-pocket\" ? \r\n {\r\n // OOP fieldset\r\n fieldsetLegend: \"Payment Information\",\r\n fieldsetColumns: 1,\r\n className: \"review-list-fieldset\",\r\n inputs: [\r\n {\r\n type: \"text\",\r\n id: \"oop-payment-method\",\r\n isEditable: false,\r\n label: \"Payment method:\",\r\n existingContent: \"Out-of-pocket\"\r\n },\r\n {\r\n type: \"text\",\r\n id: \"oop-pfa-info\",\r\n isEditable: false,\r\n label: \"For financial clearance:\",\r\n existingContent: isOhioOrNevada ? \"Schedule a callback appointment.\" : \"You can expect a call from a PFA within 24-48 hours to complete your request.\"\r\n }\r\n ]\r\n } : null, // end of OOP fieldset\r\n\r\n this.props.state.paymentMethod === \"insurance\" ? \r\n {\r\n // Insurance fieldset\r\n fieldsetLegend: \"Insurance Information\",\r\n fieldsetColumns: 1,\r\n className: \"review-list-fieldset\",\r\n inputs: [\r\n {\r\n type: \"text\",\r\n id: \"ins-company\",\r\n isEditable: false,\r\n label: \"Name of insurance company:\",\r\n existingContent: this.props.state.insurance.company\r\n },\r\n {\r\n type: \"text\",\r\n id: \"ins-product\",\r\n isEditable: false,\r\n label: \"Product type:\",\r\n existingContent: this.props.state.insurance.policyType\r\n },\r\n {\r\n type: \"text\",\r\n id: \"ins-policy-number\",\r\n isEditable: false,\r\n label: \"Policy or ID number:\",\r\n existingContent: this.props.state.insurance.policyNumber\r\n },\r\n {\r\n type: \"text\",\r\n id: \"ins-group\",\r\n isEditable: false,\r\n label: \"Group number:\",\r\n existingContent: this.props.state.insurance.group ? this.props.state.insurance.group : strings.NOT_PROVIDED\r\n },\r\n\r\n // Start of insurance fields to include for policy holder.\r\n !this.props.state.patientSeenRecently && this.props.state.insurance.policyHolder.relation !== \"Other\" ? \r\n {\r\n type: \"text\",\r\n id: \"ins-policy-holder\",\r\n isEditable: false,\r\n label: \"Policy holder:\",\r\n existingContent: this.determinePolicyHolderString(this.props.state.insurance.policyHolder.relation)\r\n } : null,\r\n shouldShowPolicyHolderFields ? \r\n {\r\n type: \"text\",\r\n id: \"ins-policy-name\",\r\n isEditable: false,\r\n label: \"Policy holder’s name:\",\r\n existingContent: `${this.props.state.insurance.policyHolder.firstName} ${this.props.state.insurance.policyHolder.lastName}`\r\n } : null,\r\n shouldShowPolicyHolderFields ? \r\n {\r\n type: \"text\",\r\n id: \"ins-policy-dob\",\r\n isEditable: false,\r\n label: \"Policy holder’s date of birth:\",\r\n existingContent: this.formatDate(this.props.state.insurance.policyHolder.dob)\r\n } : null,\r\n shouldShowPolicyHolderFields ? \r\n {\r\n type: \"text\",\r\n id: \"ins-policy-email\",\r\n isEditable: false,\r\n label: \"Policy holder’s email:\",\r\n existingContent: this.props.state.insurance.policyHolder.email\r\n } : null,\r\n // End of insurance fields to include for policy holder.\r\n\r\n // Start of insurance fields to include for billing and billing address.\r\n {\r\n type: \"text\",\r\n id: \"ins-billing-where-to-send\",\r\n isEditable: false,\r\n label: \"Where to send the bill:\",\r\n existingContent: this.determinePolicyHolderAddressString(this.props.state.insurance.whereToSend)\r\n },\r\n shouldShowBillingName && this.props.state.insurance.billing.relation !== \"Other\" ?\r\n {\r\n type: \"text\",\r\n id: \"ins-billing-name\",\r\n isEditable: false,\r\n label: \"Their name:\",\r\n existingContent: `${this.props.state.insurance.billing.firstName} ${this.props.state.insurance.billing.lastName}`\r\n } : null,\r\n shouldShowBillingDob ? \r\n {\r\n type: \"text\",\r\n id: \"ins-billing-dob\",\r\n isEditable: false,\r\n label: (this.props.state.insurance.whereToSend === strings.TO_MY_ADDRESS ? \"Your\" : \"Their\") + \" date of birth:\",\r\n existingContent: this.formatDate(this.props.state.insurance.billing.dob)\r\n } : null,\r\n shouldShowBillingAddr ? \r\n {\r\n type: \"text\",\r\n id: \"ins-billing-addr\",\r\n isEditable: false,\r\n label: (this.props.state.insurance.whereToSend === strings.TO_MY_ADDRESS ? \"Your\" : \"Their\") + \" address:\",\r\n existingContent: (\r\n
    \r\n {this.props.state.insurance.billing.address1}, {this.props.state.insurance.billing.address2}\r\n {this.props.state.insurance.billing.address2 ? \", \" : \"\"}\r\n
    \r\n {this.props.state.insurance.billing.city}, {this.props.state.insurance.billing.state} {this.props.state.insurance.billing.zip}\r\n
    \r\n )\r\n } : null\r\n ]\r\n } : null, // end of Insurance fieldset\r\n\r\n {\r\n fieldsetLegend: \"\",\r\n fieldsetColumns: 1,\r\n className: \"button-order margin-top-medium\",\r\n inputs: [\r\n {\r\n type: \"button\",\r\n id: \"close\",\r\n className: \"btn--primary\",\r\n value: \"Close\",\r\n onClick: () => {\r\n this.props.webAppointmentClearOutData();\r\n clearState();\r\n window.location.href = \"https://my.clevelandclinic.org/patients/information/access\";\r\n }\r\n }\r\n ]\r\n }\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n
    \r\n

    {header}

    \r\n
    \r\n

    {paragraphHeader}

    \r\n
      \r\n
    • Don't close this browser.
    • \r\n
    • \r\n Call our appointment center at{' '}\r\n 800.223.2273.\r\n
    • \r\n
    • Scroll down to see the information you entered.
    • \r\n
    \r\n \r\n

    {title}

    \r\n

    {subtitle}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n }\r\n};\r\n\r\nErrorReviewPage.propTypes = {\r\n state: defaultState.statePropType,\r\n webAppointmentClearOutData: PropTypes.func.isRequired,\r\n webAppointmentSetRequestResults: PropTypes.func.isRequired\r\n};\r\n\r\nfunction mapStateToProps(state ) {\r\n return {\r\n state: state.webAppointmentForm // That’s right, the whole webappointment state.\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n webAppointmentClearOutData: () => dispatch(webAppointmentActions.webAppointmentClearOutData()),\r\n webAppointmentSetRequestResults: (value) => dispatch(webAppointmentActions.webAppointmentSetRequestResults(value))\r\n };\r\n};\r\n\r\n// connects component to redux, and passes along the router\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(ErrorReviewPage));\r\n// For testing\r\nexport const UnwrappedPageComponent = ErrorReviewPage;","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Route, Switch, Redirect, withRouter } from 'react-router-dom';\r\nimport ProgressBar from './shared/components/presentation/progress-bar/ProgressBar';\r\nimport { Grid, GridItem } from './shared/components/presentation/grid/Grid';\r\nimport { determineProgress, determineIcon } from './webappointment/functions/progressSupportFunctions';\r\nimport defaultIcon from './webappointment/imgs/default.svg';\r\nimport WhatToExpectPage from './webappointment/components/what-to-expect-page/WhatToExpectPage';\r\nimport WhoForPage from './webappointment/components/who-for-page/WhoForPage';\r\nimport ReceivedCarePage from './webappointment/components/received-care-page/ReceivedCarePage';\r\nimport ContactInfoPage from './webappointment/components/contact-info-page/ContactInfoPage';\r\nimport NewPatientInfoPage from './webappointment/components/new-patient-info-page/NewPatientInfoPage';\r\nimport NewPatientAddressPhonePage from './webappointment/components/new-patient-address-phone-page/NewPatientAddressPhonePage';\r\nimport ExistingPatientInfoPage from './webappointment/components/existing-patient-info-page/ExistingPatientInfoPage';\r\n\r\nimport AppointmentInfo1Page from './webappointment/components/appointment-info1-page/AppointmentInfo1Page';\r\nimport AppointmentInfo2Page from './webappointment/components/appointment-info2-page/AppointmentInfo2Page';\r\nimport AppointmentPreferencesPage from './webappointment/components/appointment-preferences-page/AppointmentPreferencesPage';\r\nimport AppointmentProviderPage from './webappointment/components/appointment-provider-page/AppointmentProviderPage';\r\nimport AppointmentDayTimePage from './webappointment/components/appointment-day-time-page/AppointmentDayTimePage';\r\n\r\nimport PaymentMethodPage from './webappointment/components/payment-method-page/PaymentMethodPage';\r\nimport InsurancePage from './webappointment/components/insurance-page/InsurancePage';\r\nimport BillingPage from './webappointment/components/billing-page/BillingPage';\r\nimport BillingAddressPage from './webappointment/components/billing-address-page/BillingAddressPage';\r\nimport PolicyHolderPage from './webappointment/components/policy-holder-page/PolicyHolderPage';\r\n\r\nimport OutOfPocketPage from './webappointment/components/out-of-pocket-page/OutOfPocketPage';\r\nimport ReviewPage from './webappointment/components/review-page/ReviewPage';\r\nimport PfaAppointmentPage from './webappointment/components/pfa-appointment-page/PfaAppointmentPage';\r\n\r\nimport ThankYouPfaAppointmentPage from './webappointment/components/thank-you-pfa-appointment-page/ThankYouPfaAppointmentPage';\r\nimport ThankYouPfaPage from './webappointment/components/thank-you-pfa-page/ThankYouPfaPage';\r\nimport ThankYouInsurancePage from './webappointment/components/thank-you-insurance-page/ThankYouInsurancePage';\r\nimport ErrorReviewPage from './webappointment/components/error-review-page/ErrorReviewPage';\r\n\r\nimport './App.css';\r\n\r\n\r\nimport * as routes from './constants/routes';\r\n\r\nexport class App extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.progressBar = React.createRef();\r\n this.prevPage = \"\";\r\n }\r\n\r\n componentDidMount() {\r\n this.setProgressBarOnUrl();\r\n }\r\n\r\n componentDidUpdate() {\r\n this.setProgressBarOnUrl();\r\n }\r\n\r\n setProgressBarOnUrl = () => {\r\n if (this.progressBar && this.progressBar.current) {\r\n let urlPath = window.location.pathname.split(\"/\").pop();\r\n\r\n if (urlPath) {\r\n this.setProgressBarStep(determineProgress(urlPath));\r\n }\r\n }\r\n }\r\n\r\n setProgressBarStep = (stepNumber) => {\r\n if (this.progressBar && this.progressBar.current) {\r\n this.progressBar.current.setStepNumber(stepNumber);\r\n }\r\n }\r\n\r\n render() {\r\n // Scroll to the top of the form page iff changing pages. i.e. Don't\r\n // scroll if rerendering the same page.\r\n if (this.prevPage !== window.location.pathname) {\r\n let root = document.getElementById(\"root\");\r\n if (root) {\r\n // Use a setTimeout to scroll to work around the browsers built-in\r\n // scroll-to-previous-position, when going back a page.\r\n setTimeout(() => {\r\n root.scrollIntoView({ behavior: \"smooth\", block: \"start\", inline: \"nearest\"\r\n });}, 1);\r\n }\r\n }\r\n this.prevPage = window.location.pathname;\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n );\r\n }\r\n}\r\n// allows component to access user property from redux state\r\nfunction mapStateToProps(state, ownProps) {\r\n return {\r\n webAppointmentFormState: state.webAppointmentForm\r\n };\r\n}\r\n\r\n// connects component to redux\r\nexport default withRouter(connect(mapStateToProps)(App));\r\n","import { combineReducers } from 'redux';\r\nimport webAppointmentForm from '../webappointment/reducers/webAppointmentReducer';\r\n\r\n// combines all reducers\r\n// name here is used for the key for all related state properties\r\nconst rootReducer = combineReducers({\r\n webAppointmentForm\r\n});\r\n\r\nexport default rootReducer;\r\n","import * as types from '../../constants/actionTypes';\r\nimport * as defaultState from '../constants/DefaultState';\r\nimport { loadState } from '../functions/loadState';\r\n\r\nexport default function webAppointmentReducer(state = {}, action) {\r\n let val = null;\r\n if (action.filter) {\r\n val = action.filter;\r\n if (typeof val === \"object\" && val.text) {\r\n val = val.text;\r\n }\r\n }\r\n switch (action.type) {\r\n case types.WEBAPPOINTMENT_ACKNOWLEDGED_WHAT_TO_EXPECT:\r\n return { ...state, acknowledgedWhatToExpect: action.value }; // bool\r\n\r\n case types.WEBAPPOINTMENT_SET_WHO_FOR:\r\n return { ...state, forMe: action.value }; // bool\r\n\r\n case types.WEBAPPOINTMENT_SET_PATIENT_SEEN_RECENTLY:\r\n return { ...state, patientSeenRecently: action.value }; // bool\r\n\r\n case types.WEBAPPOINTMENT_SET_CONTACT_OVER_18:\r\n return { ...state, contact: { ...state.contact, over18: action.value } }; // bool\r\n\r\n case types.WEBAPPOINTMENT_SET_CONTACT_RELATION:\r\n return { ...state, contact: { ...state.contact, relation: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_CONTACT_FIRST_NAME:\r\n return { ...state, contact: { ...state.contact, firstName: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_CONTACT_LAST_NAME:\r\n return { ...state, contact: { ...state.contact, lastName: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_CONTACT_EMAIL:\r\n return { ...state, contact: { ...state.contact, email: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_CONTACT_PHONE:\r\n return { ...state, contact: { ...state.contact, phone: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_PATIENT_FIRST_NAME:\r\n return { ...state, patient: { ...state.patient, firstName: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_PATIENT_LAST_NAME:\r\n return { ...state, patient: { ...state.patient, lastName: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_PATIENT_DOB:\r\n return { ...state, patient: { ...state.patient, dob: action.value } }; // string (date)\r\n\r\n case types.WEBAPPOINTMENT_SET_PATIENT_GENDER:\r\n return { ...state, patient: { ...state.patient, gender: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_PATIENT_MARITAL_STATUS:\r\n return { ...state, patient: { ...state.patient, maritalStatus: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_PATIENT_SSN:\r\n return { ...state, patient: { ...state.patient, ssn: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_PATIENT_ADDRESS1:\r\n return { ...state, patient: { ...state.patient, address1: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_PATIENT_ADDRESS2:\r\n return { ...state, patient: { ...state.patient, address2: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_PATIENT_CITY:\r\n return { ...state, patient: { ...state.patient, city: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_PATIENT_STATE:\r\n return { ...state, patient: { ...state.patient, state: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_PATIENT_ZIP:\r\n return { ...state, patient: { ...state.patient, zip: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_PATIENT_EMAIL:\r\n return { ...state, patient: { ...state.patient, email: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_PATIENT_PHONE:\r\n return { ...state, patient: { ...state.patient, phone: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_PATIENT_MRN:\r\n return { ...state, patient: { ...state.patient, mrn: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_APPOINTMENT_REASON:\r\n return { ...state, appointment: { ...state.appointment, reason: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_APPOINTMENT_DIAGNOSIS:\r\n return { ...state, appointment: { ...state.appointment, diagnosis: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_APPOINTMENT_PROVIDER:\r\n return { ...state, appointment: { ...state.appointment, provider: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_APPOINTMENT_DEPARTMENT:\r\n // THIS IS SPECIAL! When you set the department, blank out the location.\r\n return { ...state, appointment: { ...state.appointment, department: action.value, location: \"\" } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_APPOINTMENT_LOCATION:\r\n return { ...state, appointment: { ...state.appointment, location: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_APPOINTMENT_TYPE:\r\n return { ...state, appointment: { ...state.appointment, type: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_APPOINTMENT_TIME:\r\n return { ...state, appointment: { ...state.appointment, time: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_APPOINTMENT_DAY:\r\n return { ...state, appointment: { ...state.appointment, day: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_APPOINTMENT_NEED_SERVICES:\r\n return {\r\n ...state,\r\n appointment: {\r\n ...state.appointment,\r\n translationInterpretationServices: {\r\n ...state.appointment.translationInterpretationServices,\r\n needServices: action.value // bool\r\n }\r\n }\r\n };\r\n\r\n case types.WEBAPPOINTMENT_SET_APPOINTMENT_WHICH_SERVICE:\r\n return {\r\n ...state,\r\n appointment: {\r\n ...state.appointment,\r\n translationInterpretationServices: {\r\n ...state.appointment.translationInterpretationServices,\r\n whichService: action.value // \"asl\", \"translation\", \"interpretation\"\r\n }\r\n }\r\n };\r\n\r\n case types.WEBAPPOINTMENT_SET_APPOINTMENT_FOREIGN_LANGUAGE:\r\n return {\r\n ...state,\r\n appointment: {\r\n ...state.appointment,\r\n translationInterpretationServices: {\r\n ...state.appointment.translationInterpretationServices,\r\n language: action.value // string\r\n }\r\n }\r\n };\r\n\r\n case types.WEBAPPOINTMENT_SET_APPOINTMENT_HAVE_REFERRING_PHYS:\r\n return {\r\n ...state,\r\n appointment: {\r\n ...state.appointment,\r\n referringPhysician: {\r\n ...state.appointment.referringPhysician,\r\n haveReferringPhys: action.value // bool\r\n }\r\n }\r\n };\r\n\r\n case types.WEBAPPOINTMENT_SET_APPOINTMENT_REFERRING_FNAME:\r\n return {\r\n ...state,\r\n appointment: {\r\n ...state.appointment,\r\n referringPhysician: {\r\n ...state.appointment.referringPhysician,\r\n firstName: action.value\r\n }\r\n }\r\n }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_APPOINTMENT_REFERRING_LNAME:\r\n return {\r\n ...state,\r\n appointment: {\r\n ...state.appointment,\r\n referringPhysician: {\r\n ...state.appointment.referringPhysician,\r\n lastName: action.value\r\n }\r\n }\r\n }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_APPOINTMENT_REFERRING_PHONE:\r\n return {\r\n ...state,\r\n appointment: {\r\n ...state.appointment,\r\n referringPhysician: {\r\n ...state.appointment.referringPhysician,\r\n phone: action.value\r\n }\r\n }\r\n }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_PAYMENT_METHOD:\r\n return { ...state, paymentMethod: action.value }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_INSURANCE_COMPANY:\r\n return { ...state, insurance: { ...state.insurance, company: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_INSURANCE_POLICY_NUMBER:\r\n return { ...state, insurance: { ...state.insurance, policyNumber: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_INSURANCE_POLICY_TYPE:\r\n return { ...state, insurance: { ...state.insurance, policyType: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_INSURANCE_GROUP:\r\n return { ...state, insurance: { ...state.insurance, group: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_INSURANCE_WHERE_TO_SEND:\r\n return { ...state, insurance: { ...state.insurance, whereToSend: action.value } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_INSURANCE_HOLDER_RELATION:\r\n return { ...state, insurance: { ...state.insurance, policyHolder: { ...state.insurance.policyHolder, relation: action.value } } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_INSURANCE_HOLDER_FNAME:\r\n return { ...state, insurance: { ...state.insurance, policyHolder: { ...state.insurance.policyHolder, firstName: action.value } } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_INSURANCE_HOLDER_LNAME:\r\n return { ...state, insurance: { ...state.insurance, policyHolder: { ...state.insurance.policyHolder, lastName: action.value } } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_INSURANCE_HOLDER_DOB:\r\n return { ...state, insurance: { ...state.insurance, policyHolder: { ...state.insurance.policyHolder, dob: action.value } } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_INSURANCE_HOLDER_EMAIL:\r\n return { ...state, insurance: { ...state.insurance, policyHolder: { ...state.insurance.policyHolder, email: action.value } } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_BILLING_RELATION:\r\n return { ...state, insurance: { ...state.insurance, billing: { ...state.insurance.billing, relation: action.value } } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_BILLING_FNAME:\r\n return { ...state, insurance: { ...state.insurance, billing: { ...state.insurance.billing, firstName: action.value } } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_BILLING_LNAME:\r\n return { ...state, insurance: { ...state.insurance, billing: { ...state.insurance.billing, lastName: action.value } } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_BILLING_DOB:\r\n return { ...state, insurance: { ...state.insurance, billing: { ...state.insurance.billing, dob: action.value } } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_BILLING_ADDRESS1:\r\n return { ...state, insurance: { ...state.insurance, billing: { ...state.insurance.billing, address1: action.value } } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_BILLING_ADDRESS2:\r\n return { ...state, insurance: { ...state.insurance, billing: { ...state.insurance.billing, address2: action.value } } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_BILLING_CITY:\r\n return { ...state, insurance: { ...state.insurance, billing: { ...state.insurance.billing, city: action.value } } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_BILLING_STATE:\r\n return { ...state, insurance: { ...state.insurance, billing: { ...state.insurance.billing, state: action.value } } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_BILLING_ZIP:\r\n return { ...state, insurance: { ...state.insurance, billing: { ...state.insurance.billing, zip: action.value } } }; // string\r\n\r\n case types.WEBAPPOINTMENT_SET_REQUEST_RESULTS:\r\n return { ...state, requestResults: action.value };\r\n\r\n case types.WEBAPPOINTMENT_SET_PFA_CALLBACK_WINDOW_DISMISSED:\r\n return { ...state, pfaCallbackWindowDismissed: action.value };\r\n\r\n case types.WEBAPPOINTMENT_CLEAR_OUT_DATA:\r\n return defaultState.defaultState;\r\n\r\n default:\r\n return loadState();\r\n }\r\n}\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\nimport { Provider } from 'react-redux';\r\nimport { createStore, applyMiddleware } from 'redux';\r\nimport reduxImmutableStateInvariant from 'redux-immutable-state-invariant';\r\nimport thunk from 'redux-thunk';\r\nimport rootReducer from './reducers/index';\r\nimport './index.css';\r\nimport { saveState } from './webappointment/functions/loadState';\r\n\r\nconst initialState = {};\r\n\r\nconst store = createStore(\r\n rootReducer,\r\n initialState,\r\n applyMiddleware(thunk, reduxImmutableStateInvariant())\r\n);\r\n\r\nstore.subscribe(() => {\r\n saveState(store.getState());\r\n});\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n"],"sourceRoot":""}