{"version":3,"sources":["serviceWorker.ts","store/Reducer.tsx","utils/HelperFunctions.tsx","configuration/AppConfig.tsx","configuration/Translation.tsx","store/Store.tsx","configuration/StepperConfig.tsx","components/AutoSuggestLookup.tsx","components/StepperPageSteps/StepIndustry.tsx","components/StepperPageSteps/StepAnnualRevenueRange.tsx","components/StepperSlider.tsx","components/StepperPageSteps/StepAnnualRevenue.tsx","components/StepperPageSteps/StepLegalBusinessName.tsx","components/StepperPageSteps/StepYearsInBusiness.tsx","components/InputMasks.tsx","components/StepperPageSteps/StepCustomerPersonalDetails.tsx","components/AddressLookupGooglePlaces.tsx","components/AddressLookup.tsx","components/StepperPageSteps/StepHomeAddress.tsx","components/StepperPageSteps/StepBusinessAddress.tsx","components/ModalDialog.tsx","components/TermsAndConditions.tsx","components/StepperPageSteps/StepTermsAndConditions.tsx","utils/Api.tsx","components/LoadingScreen.tsx","components/Backgrounds/InitialBackground.tsx","components/Backgrounds/StepperBackground.tsx","components/Backgrounds/BackgroundGenerator.tsx","components/Background.tsx","components/StepperProgress.tsx","components/StepperPageSteps/StepYearsInBusinessRange.tsx","components/StepperPage.tsx","components/VisibilityAwareContent.tsx","components/ScrollToTopButton.tsx","hooks/UseScript.tsx","components/Trustpilot.tsx","components/InitialPageComponents/CheckIcon.tsx","components/InitialPage_General.tsx","components/InitialPageComponents/ShieldIcon.tsx","hooks/UseWindowDimensions.tsx","components/FinishPage.tsx","components/QuotePage.tsx","hooks/UseSignalR.tsx","components/UploadDropZone.tsx","components/DocumentPageUploadFile.tsx","components/DocumentPageAction.tsx","components/DocumentPage.tsx","components/IFrameLoader.tsx","components/BankStatementsPage.tsx","hooks/UseEventListener.tsx","components/PartnerCard.tsx","App.tsx","index.tsx"],"names":["Boolean","window","location","hostname","match","reducer","state","INITIAL_STATE","action","type","ActionType","CHANGE_PAGE","update","pageIndex","$set","value","CHANGE_APP_STATE","applicationState","CHANGE_DOCUMENT_DETAILS","index","Error","documents","CHANGE_DOCUMENTS","CHANGE_INPUT","propertyName","input","CHANGE_INPUT_ALL","CHANGE_BANK_AUTH","bankAuthorized","isEmpty","undefined","AppState","setFavicon","path","faviconName","favicon","document","getElementById","href","track","eventName","Smartlook","HelperFunctions","str","emailStr","test","postalCodeStr","dateStr","dts","split","dateTest","Date","getFullYear","parseInt","getMonth","getDate","today","birthDate","age","m","pageTitle","title","amount","minFractionDigits","maxFractionDigits","language","locale","Intl","NumberFormat","style","currency","minimumFractionDigits","maximumFractionDigits","format","delayInMs","scrollStepInPx","intervalId","setInterval","pageYOffset","clearInterval","scroll","normalizeSync","FrenchTranslation","loading","mainMessage","description","initialPage","pageName","greetingPrimary","greetingSecondary","greetingSecondaryEcommerce","firstName","firstNameInvalid","lastName","lastNameInvalid","email","emailInvalid","emailInvalidFormat","businessName","businessNameInvalid","mobilePhone","mobilePhoneInvalid","submit","items","items_ecommerce","bottomTextEcommerceParagraph","bottomTextFirstParagraph","bottomTextSecondParagraph","testimonialText","testimonialAuthor","address","callUs","emailUs","trustedByCanadians","protectedBy","referenceSource","referenceSourceDropdown","google","direct","tv","facebook","banner","youtube","friend","referral","yourAccountant","other","applicationPage","stepper","minutesFromFinish","start","back","continue","submitMobile","industryStep","mainTitle","industry","industryPlaceholder","requestedAmountStep","secondaryTitle","annualRevenueStep","selectRange","range0_250","range250_500","range500_1","range1_2","range2_3","range3","annualRevenueRangeStep","range","rangePerYear","rangeSpecific","yearsInBusinessRangeStep","range_1","range_2","range_3","yearsInBusinessStep","howManyYears","howManyMonths","year","years","month","months","businessAddressStep","businessAddress","addressPlaceHolder","homeAddressStep","homeAddress","skipBusinessAddress","addresses","manualEntry","addressSelected","changeMyAddress","lookupAddress","selectProvince","street","city","province","postalCode","streetInvalid","cityInvalid","provinceInvalid","postalCodeInvalid","provinceNames","alberta","bc","manitoba","nb","nfl","nwt","ns","nunavut","on","pei","qb","sc","yk","legalBusinessNameStep","legalBusinessName","legalBusinessNamePlaceholder","legalBusinessNameSymbols","legalBusinessNameMissing","termsAndConditionsStep","agreeSwitch","termsLink","termsAndConditionsTitle","termsAgree","termsDisagree","customerDetailsStep","dateOfBirth","dateOfBirthPlaceholder","dateOfBirthTextmask","dobFormatInvalid","dobDateInvalid","dobAgeInvalid","dobDateMissing","mobilePhonePlaceholder","mobilePhoneMissing","bankingPage","returningCustomerNote","proceedButton","proceedText","proceedTitle","proceedContinue","proceedCancel","flinksLoadingMessage","notListed","finishPage","documentsPage","businessInfo","connectBank","doneButtonText","startButtonText","completedButtonText","termsAndConditions","uploadButtonText","requestedButtonText","submitButtonText","continueButtonText","actionBusinessInformation","actionTermsAndConditions","actionConnectBank","actionContinueConnectingBank","actionBankConnectedText","actionPaperStatements","actionBankNotListed","tcAgree","tcCancel","dzChooseFilesText","dzUploadFilesText","dzDropFilesToUploadText","dzFilesUploadedText","dzFinishText","dzFilesSelected","dzTapToUploadText","dzThankYou","dzFilesWereUploadedText","dzTapFinishToContinueText","dzUploadMorePart1Text","dzUploadMorePart2Text","dzUploadMorePart3Text","dzProcessingFiles","dzPleaseUploadYour","ufUploadLaterText","ufUploadText","ufUploadSelected","ufUploadFinish","NoIndexList","Styles","textColorPrimary","textColorPrimaryBright","textColorSecondary","textColorSecondaryBright","textColorBullet","textColorDescription","textColorSubmit","textColorForm","textColorSecondaryAlt","textColorSuccess","textColorWarning","textColorStart","textColorQuote","textColorError","textColorTitleSecondary","textColorInitialTitle","textColorInitialTitleReverse","defaultColor","menuColor","iconFill","bgStepper","bgStepperOpacity","bgInitialTop","bgInitialBottom","bgInitialBottomOpacity","bgInitialTopOpacity","bgInitialRight","bgInitialLeft","bgInitialMiddle","bgInitialButtonSubmit","bgInitialFooterContainer","bgDropzone","shieldColor","documentUploadBorderRadius","sliderDotSize","sliderDotSizeHandle","sliderLineHeight","assetPath","process","LocalSettings","logoUrl","logoMobileUrl","logoPoweredByUrl","logoPoweredByWhiteUrl","logoPoweredByVisible","logoBottomUrl","googleMapsUrl","bgLogoInitialTopOffsetDesktop","bgLogoTopOffsetDesktop","favicon16Url","favicon32Url","faviconAppleUrl","finishBackgroundImage","companyName","companyNameOriginal","formattedAddress","formattedAddressVisible","formattedPhone","phone","website","testimonialImage","companyImage","defaultIndustry","defaultSubIndustry","useColorMobileLogo","useEmail","translation","useLandingPage","validateStepInput","stepName","subIndustry","approximateAnnualRevenueRange","approximateAnnualRevenue","requestedAmount","length","yearsInBusinessRange","yearsInBusiness","monthsInBusiness","phoneNumber","create","StoreContext","useDispatch","useMappedState","applicationId","LOADING","consent","bankInProcess","AutoSuggestLookup","props","useState","setValue","suggestions","setSuggestions","useEffect","inputProps","placeholder","onChange","event","newValue","method","changeCallback","className","onFocus","getSuggestions","onClick","clickCallback","multiSection","shouldRenderSuggestions","onSuggestionsFetchRequested","params","onSuggestionsClearRequested","getSuggestionValue","suggestion","label","name","renderSuggestion","renderSectionTitle","section","color","getSectionSuggestions","subIndustries","onSuggestionSelected","suggestionValue","suggestionIndex","sectionIndex","selectedCallback","StepIndustry","industries","data","handleChange","useCallback","e","dispatch","target","handleChangeManual","useStepIndustry","industryStepTranslation","selectedSubIndustryValue","code","keywords","filter","i","selectedIndustry","getConcreteIndustryFromSuggestion","id","textAlign","Row","Col","md","FormGroup","Label","escapedValue","trim","replace","valueForRegex","regex","RegExp","filteredIndustries","map","keyword","subIndustryNameWithoutDiacritics","result","subIndustrylabelWithoutDiacritics","ret","industryCategory","find","si","isMobile","StepAnnualRevenueRange","useStepAnnualRevenueRange","revenueStepTranslation","form","selectedStyle","backgroundColor","borderColor","width","boxShadow","marginTop","unSelectedStyle","Container","padding","xs","sm","Button","raiseCallback","size","renderRange","callback","Handle","Slider","createSliderWithTooltip","handle","restProps","dragging","wrapperStyle","margin","StepperSlider","demoValue","setDemoValue","demoIsFinished","setDemoIsFinished","direction","setDirection","componentRef","useRef","current","clientWidth","getElementsByClassName","timeout","setTimeout","clearTimeout","ref","step","marks","trackStyle","height","railStyle","dotStyle","bottom","activeDotStyle","handleStyle","marginLeft","min","max","StepAnnualRevenue","approxAnnualRevenueValid","setApproxAnnualRevenue","approxAnnualRevenueBlurred","setApproxAnnualRevenueBlurred","validateApproxAnnualRevenue","revenue","useStepAnnualRevenue","revenueRangeStepTranslation","endAmount","beginAmount","iterativeAmount","lng","divider","suffix","toLocaleString","top","fontSize","minWidth","renderSlider","stepStyles","inputFeedback","position","StepLegalBusinessName","legalBusinessNameValid","setLegalBusinessNameValid","legalBusinessNameBlurred","setLegalBusinessNameBlurred","validateLegalBusinessName","useStepLegalBusinessName","legalStepTranslation","typingTimeoutLegalBusinessName","setTypingTimeoutLegalBusinessName","Form","Input","invalid","bsSize","StepYearsInBusiness","useStepYearsInBusiness","yibStepTranslation","marksData","maxValue","minValue","toString","getMarksData","getSliderValue","renderHeader","TextMaskPostalCode","mask","beforeMaskedValueChange","newState","oldState","userInput","selection","maskChar","TextMaskDate","separator","includes","usrSplitInput","returnValue","numericValue","substring","TextMaskPhone","StepCustomerPersonalDetails","dateOfBirthValid","setDateOfBirthValid","dateOfBirthBlurred","setDateOfBirthBlurred","phoneNumberValid","setPhoneNumberValid","phoneNumberBlurred","setPhoneNumberBlurred","validateDateOfBirth","dateOfBirthStr","validatePhoneNumber","phoneNumberStr","useStepCustomerPersonalDetailsState","customerDetailsStepTranslation","typingTimeOutDateOfBirth","setTypingTimeOutDateOfBirth","typingTimeOutPhoneNumber","setTypingTimeOutPhoneNumber","labelStyle","tag","autoComplete","cachedVal","acceptedKeys","provincesList","AddressLookupGooglePlaces","AddressType","currIndex","setCurrIndex","formattedValue","usePlacesAutocomplete","requestOptions","componentRestrictions","country","types","ready","status","clearSuggestions","getProvinceAbbreviation","provinceName","formatAddress","terms","termsAreValid","isValidAddress","filterSuggestions","d","hasSuggestions","dismissSuggestions","useOnclickOutside","handleSelect","handleGetDetails","place_id","placeId","parameter","getGeocode","then","geocodeResults","getZipCode","zipCodeResults","onSelected","handleEnter","idx","role","aria-owns","aria-haspopup","aria-expanded","onInput","onKeyDown","keyCode","preventDefault","nextIndex","disabled","aria-autocomplete","aria-controls","aria-activedescendant","onMouseLeave","structured_formatting","main_text","secondary_text","key","onMouseEnter","aria-selected","src","alt","renderSuggestions","AddressLookup","searchText","splitValue","styles","setSearchText","setStreet","setCity","setProvince","setPostalCode","addressIsValid","setAddressIsValid","AUTO","addressType","setAddressType","streetIsValid","setStreetIsValid","cityIsValid","setCityIsValid","postalCodeIsValid","setPostalCodeIsValid","addressTranslation","typingTimeoutStreet","setTypingTimeoutStreet","typingTimeoutCity","setTypingTimeoutCity","typingTimeoutPostalCode","setTypingTimeoutPostalCode","streetRef","cityRef","provinceRef","postalCodeRef","formattedAddressRef","overrideValueChangeForUnmanagedInput","firstUpdate","splittedAddress","onAddressChange","validateAndSetAddress","display","cursor","MANUAL","innerRef","newAddressType","addressSwitchCaption","renderAddressSwitchLink","Object","defineProperty","get","this","_value","set","v","itemCheckbox","alignItems","justifyContent","flexWrap","container","flexFlow","item","StepHomeAddress","useStepHomeAddress","homeAddressStepTranslation","propName","readOnly","checked","setBusinessAddressCallback","StepBusinessAddress","useStepBusinessAddress","businessAddressStepTranslation","ModalDialog","open","textStyle","agreeText","agreeEnabled","disagreeText","buttonDisagreeStyle","buttonAgreeStyle","contentClassName","contentStyle","hideCloseButton","handleClose","handleAgreed","handleDisagreed","children","onKeyPress","console","log","tabIndex","aria-labelledby","overflowY","opacity","aria-label","data-dismiss","aria-hidden","autoFocus","TermsAndConditions","text","policy","policyUrl","hyperlink","textDecoration","maxHeight","StepTermsAndConditions","useStepTermsAndConditions","termsDialogOpen","setTermsDialogOpen","LinkedInTag","init","tcStepTranslation","fontWeight","webApiAddress","Api","successCallback","errorCallback","a","getApplication","makePostRequest","createApplication","updateApplication","updateBankingStatus","updateBankingLoginAndAccount","makePatchRequest","skipBankingStep","uploadFile","progressCallback","config","headers","onUploadProgress","getUploadUrl","getBankingDataUrl","flinksUrl","getHubUrl","getPartnerData","getPartnerDetails","payload","url","axios","post","response","patch","LoadingAnimation","LoadingScreen","loadingState","animation","DEFAULT","loadingMessage","loadingMessageDescription","message","messageDescription","useLoadingState","showLoadingScreen","showMessage","labelStyleLarge","descriptionStyle","marginBottom","flexDirection","Spinner","InitialBackground","viewBox","fill","xmlns","clip-path","cx","cy","rx","ry","x","y","filterUnits","color-interpolation-filters","flood-opacity","dy","stdDeviation","mode","in2","in","StepperBackground","Background","content","useTemplate","displayLogo","useLogo","imageRendering","paddingBottom","renderContentWithTemplate","logoClassName","backgroundImage","useSvg","component","staticMarkup","ReactDOMServer","renderToStaticMarkup","encodeURIComponent","generateFromTemplate","image","imageName","getStaticBackgroundImage","backgroundSize","overflow","hideMainLogo","left","right","StepperProgress","StepYearsInBusinessRange","useStepYearsInBusinessRange","yearsInBusinessRangeTranslation","StepperDirection","keyDownCallback","popStateCallback","StepperPage","continueAction","continueButton","backButton","skipBusinessStep","setSkipBusinessStep","continueToNextStep","currentStepNumber","goToNextStep","pushStepToHistory","currentPageIndex","FORWARD","steps","getStepsArray","nextStepIndex","prevStepIndex","nextStep","prevStep","BACKWARD","handleSetInitialData","handleSetInitialStep","currentStep","currentImage","currentStepName","allSteps","totalSteps","goToPrevStep","finalStep","firstStep","valid","useStepperState","useParams","history","useHistory","queryParams","queryString","parse","search","redirectPage","userId","stepperTranslation","pageTranslation","setState","removeEventListener","addEventListener","ReactGA","initialize","pageview","pathname","TagManager","gtmId","isNew","externalId","urlParams","URLSearchParams","microsoftClickId","createResponse","push","reload","error","alert","JSON","stringify","ERROR","stepsToSkip","skipBusinessAddressStep","currentAppStep","currentApplicationSubstep","READY","percentageCompleted","useFooter","Math","round","maxWidth","transitionName","transitionEnterTimeout","transitionLeaveTimeout","nextButtonCaption","nextbuttonClassName","array","visibility","getVisibility","submitApplication","pulsateButtonCondition","renderButtons","renderStepper","pushState","redirectToNextScreen","nextStepNumber","isPartialUpdate","currentApplicationSubStep","currentApplicationSubStepName","symbol","uetq","stepsArray","VisibilityAwareContent","isVisible","setVisibility","partialVisibility","animationClassName","ScrollButton","visible","setVisible","borderRadius","border","cachedScripts","useScript","loaded","script","createElement","async","onScriptLoad","onScriptError","indexOf","splice","remove","body","appendChild","TrustBox","subdomain","Trustpilot","loadFromElement","data-locale","data-template-id","data-businessunit-id","data-style-height","data-style-width","data-theme","rel","CheckIcon","fill-rule","clip-rule","ShieldIcon","InitialPage","hasWindow","getWindowDimensions","innerWidth","innerHeight","windowDimensions","setWindowDimensions","handleResize","userWindowsDimensions","useLocation","labelStyleLg","bulletsStyle","formStyles","group","subtitle","paddingLeft","paddingRight","formSubmit","icon","marginRight","submitButton","leftSidebar","logo","logoPoweredBy","prmiaryLabel","secondaryLabel","footer","utmSource","utm_source","utmMedium","utm_medium","utmCampaign","utm_campaign","utmTerm","utm_term","utmContent","utm_content","googleClickId","gclid","partnerExternalId","useInitialPage","formStateCode","setFormStateCode","googleClientId","setGoogleClientId","submitButtonMargin","recaptchaRef","setReadyState","setLoadingState","handleUserKeyDown","ga","tracker","clientId","welcomeTitle","inputData","fontStyle","lineHeight","getSubmitButtonClass","handleValidateForm","executeRecaptcha","sitekey","recaptchaResponse","googleAnalyticsId","subType","identify","business","userIdStr","languageStr","companyNameStr","errorResponse","onExpired","execute","renderQuoteBlockBody","widthsAndHeightsArray","currentWindowWidth","background","borderStyle","borderWidth","renderFooter","renderInitialPage","stopPropagation","FinishPage","finishTranslation","paddingTop","QuoteDialog","quoteDialogContent","quoteMultilineText","modalBody","commonStyles","header","itemGroup","float","itemStyle","itemStyleSmall","centered","bold","uppercase","textTransform","underlined","bottomBorder","borderBottom","boldText","gradient","webkitBackgroundClip","webkitTextFillColor","quoteStyles","quoteStyle","quotesTitle","helpText","largeTitle","imageContainer","relative","sidebarStyles","buttonStyle","declineButton","acceptButton","changeButton","headerStyle","paperStyle","QuotePage","NONE","dialogName","setDialogName","loadingAnimation","quoteLoadingState","setQuoteLoadingState","quoteAmount","setQuoteAmount","handlers","hubFunctionName","hubCallback","PROCESSING","SCORING","QUOTING","mapping","hubConnect","HubConnectionBuilder","withUrl","build","forEach","connectData","invoke","catch","stop","createHubConnection","useSignalR","variant","ACCEPT","flexGrow","DECLINE","CHANGE_TERMS","dialogDetails","agreeCaption","disagreeCaption","handleAgree","redirectToNextStep","handleDisagree","renderQuoteModalDialog","renderQuotePage","dropZone","Dropzone","autoDiscover","UploadDropZone","UploadStateEnum","FileUploadStatus","mobileFilesToUpload","dropZoneMessage","minHeight","dropZoneDescription","uploadItemName","uploadButtonMobile","boxSizing","documentsTranslation","percentage","setPercentage","mobileFilesToUploadCount","setMobileFilesToUploadCount","uploadFiles","files","setUploadState","formData","FormData","append","Array","from","file","Processing","Uploaded","uploadFinishedCallback","uploadErrorCallback","progressEvent","handleSetUploadPercentageFromEvent","handleFileUpload","processQueue","setUploadMethodReference","dropZoneElement","thumbnailWidth","thumbnailHeight","paramName","getFileName","previewsContainer","previewTemplate","innerHTML","acceptedFiles","autoProcessQueue","parallelUploads","uploadMultiple","Selected","Opened","xhr","removeAllFiles","upload","bytesSent","total","setupDropzone","itemName","itemStatus","useDropZone","contents","uploadState","uploadMoreMobile","itemPercentage","renderProgressBar","accept","multiple","handleFileSelect","htmlFor","renderUploaderButton","renderMobileUploader","displayStyle","ListGroup","overflowX","flush","ListGroupItem","data-dz-thumbnail","data-dz-name","data-dz-size","data-dz-remove","data-dz-uploadprogress","renderDropZoneProgress","renderDropzone","uploadMethodRef","Progress","DocumentPageUploadFile","uploadCaption","uploadButton","body1","caption","completedButton","actionContainer","textItem","textItemDescription","modalDialogOpen","setModalDialogOpen","fileUploadStatus","setFileUploadStatus","setFileUploadStatusDescription","useDocumentPageUploadFile","SUCCESS","renderImage","renderUploadButton","uploadLaterText","handleUploadFinished","handleErrorUpload","renderUploadDialog","DocumentPageAction","textSpan","documentPageTranslation","getImage","getActionButton","DocumentPage","root","main","uploadItem","uploadItemPadding","details","menu","homeLink","tools","toolItem","useDocumentsPage","setErrorState","setDocuments","bankStatus","setBankStatus","appSubmitted","setAppSubmitted","filesOnlyMode","setFilesOnlyMode","isSubmitted","actions","bankConnectStatusText","addUserId","consentInput","renderDocumentsPage","IFrameLoader","rest","onLoad","renderIframe","BankStatementDialogs","BankStatementOutcomes","useEventListener","handler","element","savedHandler","eventListener","BankStatementsPage","nextButton","parentContainer","optionButton","iframe","bankDialogName","setBankDialogName","iframeLoaded","setIframeLoaded","bankOutcome","setBankOutcome","bankingTranslation","institution","loginId","accountId","selectedFlinksAccount","origin","err","bankingInstitution","bankingStatus","iframeLoadingStyle","frameBorder","imageDimensionSize","renderProtectedCaption","SKIP","renderBankStatementsModal","CONFIRM","NOT_LISTED","renderBankStatementsButtons","bankingOutcome","renderBankStatementsPage","PartnerCard","setData","appStatus","setAppStatus","partnerToken","isFull","applicationStatus","fields","partnerApplicationId","redirectToStart","DisplayComponent","displayLarge","DisplayErrorComponent","DisplayDetailComponent","getAppropriateFormattedValue","val","showDetailView","redirectToMerchantGrowthAccount","partnerUserId","partnerStr","version","callMerchantGrowthSupport","getValueFromData","r","App","slice","reduce","acc","s","k","assign","appIsReady","setAppIsReady","getTranslation","TiktokPixel","pageView","ReactPixel","debug","autoConfig","appContent","partnerId","partnerData","primaryColor","whiteLabel","buttonColor","inverseTitleColor","faviconUrl","testimonalText","testimonalTextFr","testimonialAuthorFr","companyTextFirstParagraph","companyTextFirstParagraphFr","companyTextSecondParagraph","companyTextSecondParagraphFr","specificIndustry","specificSubIndustry","useColourMobileLogo","initialPageTranslation","rgbaString","rgbaSplitWithoutOpacity","opacityStr","join","changeRgbaOpacity","setPartnerData","render","to","Helmet","setNoIndex","store","createStore","advancedNetwork","allowedUrls","record","forms","numbers","emails","ips","ReactDOM","Provider","navigator","serviceWorker","registration","unregister"],"mappings":"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DAGJ,CACED,KAAM,IACNxB,KAAM,qBACNyB,SAAU,CAAC,gCAEb,CACED,KAAM,IACNxB,KAAM,WACNyB,SAAU,CACR,kFAGJ,CACED,KAAM,IACNxB,KAAM,2BACNyB,SAAU,CACR,+EAGJ,CACED,KAAM,IACNxB,KAAM,qBACNyB,SAAU,CAAC,+CAEb,CACED,KAAM,IACNxB,KAAM,sBACNyB,SAAU,CAAC,8BAEb,CACED,KAAM,IACNxB,KAAM,sBACNyB,SAAU,CAAC,2BAEb,CACED,KAAM,IACNxB,KAAM,uBACNyB,SAAU,CACR,gEAh/BR,MACF,IAAK,KACHZ,EAu/BK,CACL,CACEd,MAAO,aACPtP,SAAU,eACV6P,cAAe,CACb,CACEkB,KAAM,EACNxB,KAAM,mBACND,MAAO,qCACP0B,SAAU,CACR,yGAGJ,CACED,KAAM,EACNxB,KAAM,oBACND,MAAO,gCACP0B,SAAU,CACR,6FAGJ,CACED,KAAM,EACNxB,KAAM,8BACND,MAAO,oCACP0B,SAAU,CACR,6FAGJ,CACED,KAAM,EACNxB,KAAM,yBACND,MAAO,sCACP0B,SAAU,CAAC,yDAEb,CACED,KAAM,EACNxB,KAAM,QACND,MAAO,SACP0B,SAAU,CAAC,iDAIjB,CACE1B,MAAO,2BACPtP,SAAU,kBACV6P,cAAe,CACb,CACEkB,KAAM,EACNxB,KAAM,iBACND,MAAO,kBACP0B,SAAU,CACR,2BACA,UACA,OACA,eACA,0BAGJ,CACED,KAAM,EACNxB,KAAM,gBACND,MAAO,sBACP0B,SAAU,CACR,2BACA,aACA,sBACA,SACA,oBACA,YACA,0BACA,iBAGJ,CACED,KAAM,EACNxB,KAAM,iCACND,MAAO,WACP0B,SAAU,CACR,2BACA,uGAGJ,CACED,KAAM,EACNxB,KAAM,SACND,MAAO,mBACP0B,SAAU,CACR,2BACA,eACA,sBACA,UACA,YACA,2CAGJ,CACED,KAAM,GACNxB,KAAM,iCACND,MAAO,2CACP0B,SAAU,CACR,2BACA,0BACA,YACA,cACA,cACA,oDAGJ,CACED,KAAM,GACNxB,KAAM,UACND,MAAO,cACP0B,SAAU,CACR,2BACA,qIAGJ,CACED,KAAM,GACNxB,KAAM,gBACND,MAAO,oBACP0B,SAAU,CACR,2BACA,0EAGJ,CACED,KAAM,GACNxB,KAAM,WACND,MAAO,WACP0B,SAAU,CACR,2BACA,OACA,MACA,kBACA,2CAGJ,CACED,KAAM,GACNxB,KAAM,WACND,MAAO,YACP0B,SAAU,CACR,2BACA,WACA,8BACA,yCAGJ,CACED,KAAM,GACNxB,KAAM,2BACND,MAAO,8BACP0B,SAAU,CACR,2BACA,WACA,SACA,cACA,UACA,2CAGJ,CACED,KAAM,GACNxB,KAAM,qCACND,MAAO,0DACP0B,SAAU,CACR,2BACA,QACA,MACA,WACA,sCAGJ,CACED,KAAM,GACNxB,KAAM,cACND,MAAO,0BACP0B,SAAU,CACR,2BACA,oBACA,sBACA,qCAGJ,CACED,KAAM,GACNxB,KAAM,2BACND,MAAO,mCACP0B,SAAU,CACR,2BACA,QACA,WACA,oBACA,YACA,YACA,UACA,QACA,QACA,0CAGJ,CACED,KAAM,GACNxB,KAAM,uBACND,MAAO,4BACP0B,SAAU,CACR,2BACA,4BACA,sCAGJ,CACED,KAAM,GACNxB,KAAM,qBACND,MAAO,gBACP0B,SAAU,CACR,2BACA,kBACA,6BACA,uCAGJ,CACED,KAAM,GACNxB,KAAM,QACND,MAAO,SACP0B,SAAU,CAAC,+BAIjB,CACE1B,MAAO,WACPtP,SAAU,SACV6P,cAAe,CACb,CACEkB,KAAM,GACNxB,KAAM,SACND,MAAO,WACP0B,SAAU,CAAC,QAAS,mCAEtB,CACED,KAAM,GACNxB,KAAM,UACND,MAAO,cACP0B,SAAU,CAAC,QAAS,2CAEtB,CACED,KAAM,GACNxB,KAAM,cACND,MAAO,iBACP0B,SAAU,CACR,QACA,mPAGJ,CACED,KAAM,GACNxB,KAAM,gBACND,MAAO,2CACP0B,SAAU,CACR,QACA,oFAGJ,CAAED,KAAM,GAAIxB,KAAM,QAASD,MAAO,SAAU0B,SAAU,CAAC,YAG3D,CACEhR,SAAU,gBACVsP,MAAO,wBACPO,cAAe,CACb,CACEkB,KAAM,GACNxB,KAAM,mCACND,MAAO,gDACP0B,SAAU,CACR,qBACA,kGAGJ,CACED,KAAM,GACNxB,KAAM,kBACND,MAAO,uCACP0B,SAAU,CACR,qBACA,mDAGJ,CACED,KAAM,GACNxB,KAAM,OACND,MAAO,OACP0B,SAAU,CACR,qBACA,kDAGJ,CACED,KAAM,GACNxB,KAAM,kBACND,MAAO,qBACP0B,SAAU,CACR,qBACA,8CAGJ,CACED,KAAM,GACNxB,KAAM,QACND,MAAO,SACP0B,SAAU,CAAC,yBAIjB,CACEhR,SAAU,aACVsP,MAAO,UACPO,cAAe,CACb,CACEkB,KAAM,GACNxB,KAAM,yBACND,MAAO,8CACP0B,SAAU,CACR,UACA,0FAGJ,CACED,KAAM,GACNxB,KAAM,+BACND,MAAO,sCACP0B,SAAU,CAAC,UAAW,4CAExB,CACED,KAAM,GACNxB,KAAM,0BACND,MAAO,+BACP0B,SAAU,CACR,UACA,gDAGJ,CACED,KAAM,GACNxB,KAAM,mBACND,MAAO,+BACP0B,SAAU,CACR,UACA,wDAGJ,CACED,KAAM,GACNxB,KAAM,sBACND,MAAO,sBACP0B,SAAU,CACR,UACA,yEAGJ,CACED,KAAM,GACNxB,KAAM,yCACND,MAAO,gEACP0B,SAAU,CACR,UACA,kDAGJ,CACED,KAAM,GACNxB,KAAM,sBACND,MAAO,WACP0B,SAAU,CAAC,UAAW,sBAExB,CACED,KAAM,GACNxB,KAAM,iCACND,MAAO,oCACP0B,SAAU,CAAC,YAEb,CACED,KAAM,GACNxB,KAAM,oBACND,MAAO,uBACP0B,SAAU,CAAC,uCAEb,CAAED,KAAM,GAAIxB,KAAM,QAASD,MAAO,SAAU0B,SAAU,CAAC,cAG3D,CACEhR,SAAU,wBACVsP,MAAO,0BACPO,cAAe,CACb,CACEkB,KAAM,GACNxB,KAAM,gCACND,MAAO,+CACP0B,SAAU,CAAC,4BAEb,CACED,KAAM,GACNxB,KAAM,gCACND,MAAO,uDACP0B,SAAU,CACR,gCACA,4BAGJ,CACED,KAAM,GACNxB,KAAM,qBACND,MAAO,wBACP0B,SAAU,CACR,gFACA,4BAGJ,CACED,KAAM,GACNxB,KAAM,kBACND,MAAO,2BACP0B,SAAU,CACR,wCACA,4BAGJ,CACED,KAAM,GACNxB,KAAM,+BACND,MAAO,8CACP0B,SAAU,CACR,qFAGJ,CACED,KAAM,GACNxB,KAAM,sBACND,MAAO,8BACP0B,SAAU,CACR,4EAGJ,CACED,KAAM,GACNxB,KAAM,iBACND,MAAO,sBACP0B,SAAU,CACR,yFAGJ,CACED,KAAM,GACNxB,KAAM,iCACND,MAAO,2CACP0B,SAAU,CACR,yEAGJ,CACED,KAAM,GACNxB,KAAM,iCACND,MAAO,qCACP0B,SAAU,CACR,sFAGJ,CACED,KAAM,GACNxB,KAAM,iCACND,MAAO,2CACP0B,SAAU,CACR,mEAGJ,CACED,KAAM,GACNxB,KAAM,oCACND,MAAO,sCACP0B,SAAU,CACR,qGAGJ,CACED,KAAM,GACNxB,KAAM,6BACND,MAAO,gCACP0B,SAAU,CACR,kFAGJ,CACED,KAAM,GACNxB,KAAM,0BACND,MAAO,6BACP0B,SAAU,CACR,qGAGJ,CACED,KAAM,GACNxB,KAAM,oBACND,MAAO,0BACP0B,SAAU,CACR,yFAGJ,CACED,KAAM,GACNxB,KAAM,mBACND,MAAO,yBACP0B,SAAU,CACR,yEAGJ,CACED,KAAM,GACNxB,KAAM,QACND,MAAO,SACP0B,SAAU,CAAC,8BAIjB,CACEhR,SAAU,iBACVsP,MAAO,aACPO,cAAe,CACb,CACEkB,KAAM,GACNxB,KAAM,SACND,MAAO,oBACP0B,SAAU,CAAC,2BAEb,CACED,KAAM,GACNxB,KAAM,qCACND,MAAO,+CACP0B,SAAU,CAAC,kDAEb,CACED,KAAM,GACNxB,KAAM,+BACND,MAAO,yBACP0B,SAAU,CAAC,mCAEb,CACED,KAAM,GACNxB,KAAM,WACND,MAAO,cACP0B,SAAU,CAAC,0BAEb,CACED,KAAM,GACNxB,KAAM,2CACND,MAAO,iCACP0B,SAAU,CACR,oEAGJ,CACED,KAAM,GACNxB,KAAM,2BACND,MAAO,+BACP0B,SAAU,CAAC,iDAEb,CACED,KAAM,GACNxB,KAAM,QACND,MAAO,SACP0B,SAAU,CAAC,iBAIjB,CACEhR,SAAU,SACVsP,MAAO,qBACPO,cAAe,CACb,CACEkB,KAAM,GACNxB,KAAM,yBACND,MAAO,iDACP0B,SAAU,CACR,kBACA,gEAGJ,CACED,KAAM,GACNxB,KAAM,+BACND,MAAO,oCACP0B,SAAU,CACR,kBACA,4OAGJ,CACED,KAAM,GACNxB,KAAM,yBACND,MAAO,8BACP0B,SAAU,CACR,kBACA,8GAGJ,CACED,KAAM,GACNxB,KAAM,oBACND,MAAO,4BACP0B,SAAU,CACR,kBACA,oEAGJ,CACED,KAAM,GACNxB,KAAM,eACND,MAAO,mBACP0B,SAAU,CACR,kBACA,4CAGJ,CACED,KAAM,GACNxB,KAAM,+BACND,MAAO,qBACP0B,SAAU,CACR,kBACA,kGAGJ,CACED,KAAM,GACNxB,KAAM,0BACND,MAAO,cACP0B,SAAU,CACR,kBACA,uOAGJ,CACED,KAAM,GACNxB,KAAM,iBACND,MAAO,oBACP0B,SAAU,CACR,kBACA,0KAGJ,CACED,KAAM,GACNxB,KAAM,6BACND,MAAO,2DACP0B,SAAU,CAAC,uDAEb,CACED,KAAM,GACNxB,KAAM,wCACND,MAAO,0CACP0B,SAAU,CACR,kBACA,gDAGJ,CACED,KAAM,GACNxB,KAAM,YACND,MAAO,uBACP0B,SAAU,CACR,kBACA,kHAGJ,CACED,KAAM,GACNxB,KAAM,mCACND,MAAO,iBACP0B,SAAU,CACR,kBACA,gDAGJ,CACED,KAAM,GACNxB,KACE,qEACFD,MACE,uGACF0B,SAAU,CACR,kBACA,2FAGJ,CACED,KAAM,GACNxB,KAAM,8CACND,MACE,4EACF0B,SAAU,CACR,4FAGJ,CACED,KAAM,GACNxB,KAAM,4CACND,MAAO,yDACP0B,SAAU,CACR,mEAGJ,CACED,KAAM,GACNxB,KAAM,4BACND,MAAO,wDACP0B,SAAU,CACR,qHAGJ,CACED,KAAM,GACNxB,KAAM,oBACND,MAAO,wCACP0B,SAAU,CACR,8EAGJ,CACED,KAAM,GACNxB,KAAM,kBACND,MAAO,8BACP0B,SAAU,CACR,qIAGJ,CACED,KAAM,GACNxB,KAAM,uCACND,MAAO,4DACP0B,SAAU,CACR,qFAGJ,CACED,KAAM,GACNxB,KAAM,8BACND,MAAO,yCACP0B,SAAU,CAAC,qDAEb,CACED,KAAM,GACNxB,KAAM,gBACND,MAAO,iBACP0B,SAAU,CAAC,8CAEb,CACED,KAAM,GACNxB,KAAM,iCACND,MAAO,iDACP0B,SAAU,CACR,sFAGJ,CACED,KAAM,GACNxB,KAAM,WACND,MAAO,aACP0B,SAAU,CACR,+EAGJ,CACED,KAAM,GACNxB,KAAM,oCACND,MAAO,kDACP0B,SAAU,CACR,iJAIJ,CACED,KAAM,GACNxB,KAAM,mBACND,MAAO,6BACP0B,SAAU,CAAC,mDAEb,CACED,KAAM,GACNxB,KAAM,eACND,MAAO,uBACP0B,SAAU,CAAC,uDAEb,CACED,KAAM,GACNxB,KAAM,yCACND,MAAO,iDACP0B,SAAU,CACR,uKAGJ,CACED,KAAM,GACNxB,KAAM,+BACND,MAAO,4CACP0B,SAAU,CACR,iJAGJ,CACED,KAAM,GACNxB,KAAM,4BACND,MAAO,+CACP0B,SAAU,CAAC,oBAEb,CACED,KAAM,GACNxB,KAAM,sDACND,MACE,oEACF0B,SAAU,CAAC,oBAEb,CACED,KAAM,GACNxB,KAAM,uCACND,MAAO,iDACP0B,SAAU,CACR,kBACA,oEAGJ,CACED,KAAM,GACNxB,KAAM,gCACND,MAAO,6CACP0B,SAAU,CACR,kBACA,0FAGJ,CACED,KAAM,IACNxB,KAAM,aACNyB,SAAU,CAAC,kBAAmB,eAEhC,CACED,KAAM,GACNxB,KAAM,QACND,MAAO,SACP0B,SAAU,CAAC,sBAIjB,CACEhR,SAAU,eACVsP,MAAO,eACPO,cAAe,CACb,CACEkB,KAAM,GACNxB,KAAM,sBACND,MAAO,gCACP0B,SAAU,CACR,0GAGJ,CACED,KAAM,GACNxB,KAAM,+BACND,MAAO,8CACP0B,SAAU,CAAC,yCAEb,CACED,KAAM,IACNxB,KAAM,uBACND,MAAO,8BACP0B,SAAU,CACR,oEAGJ,CACED,KAAM,IACNxB,KAAM,WACND,MAAO,WACP0B,SAAU,CAAC,sCAEb,CACED,KAAM,IACNxB,KAAM,6BACND,MAAO,4CACP0B,SAAU,CAAC,uCAEb,CACED,KAAM,IACNxB,KAAM,2BACND,MAAO,wCACP0B,SAAU,CACR,sEAGJ,CACED,KAAM,IACNzB,MAAO,yBACPC,KAAM,qBACNyB,SAAU,CACR,eACA,uFAGJ,CACED,KAAM,IACNxB,KAAM,QACND,MAAO,SACP0B,SAAU,CAAC,mBAIjB,CACEhR,SAAU,QACVsP,MAAO,kBACPO,cAAe,CACb,CACEkB,KAAM,IACNxB,KAAM,wBACND,MAAO,uCACP0B,SAAU,CAAC,sDAEb,CACED,KAAM,IACNxB,KAAM,uBACND,MAAO,2CACP0B,SAAU,CAAC,0CAEb,CACED,KAAM,IACNxB,KAAM,gBACND,MAAO,cACP0B,SAAU,CACR,2GAGJ,CACED,KAAM,IACNxB,KAAM,qBACND,MAAO,4BACP0B,SAAU,CACR,8EAGJ,CACED,KAAM,IACNxB,KAAM,WACND,MAAO,aACP0B,SAAU,CACR,gEAGJ,CACED,KAAM,IACNxB,KAAM,oDACND,MAAO,oEACP0B,SAAU,CAAC,8CAEb,CACED,KAAM,IACNxB,KAAM,oBACND,MAAO,yBACP0B,SAAU,CACR,yFAGJ,CACED,KAAM,IACNxB,KAAM,oCACND,MAAO,6CACP0B,SAAU,CAAC,kDAEb,CACED,KAAM,IACNxB,KAAM,iCACND,MAAO,+CACP0B,SAAU,CAAC,uDAEb,CACED,KAAM,IACNxB,KAAM,+BACND,MAAO,uCACP0B,SAAU,CAAC,0CAEb,CACED,KAAM,IACNxB,KACE,+DACFD,MACE,wEACF0B,SAAU,CACR,oFAGJ,CACED,KAAM,IACNxB,KAAM,qBACND,MAAO,yBACP0B,SAAU,CAAC,oDAEb,CACED,KAAM,IACNxB,KAAM,WACND,MAAO,YACP0B,SAAU,CACR,kBACA,6FAGJ,CACED,KAAM,IACNxB,KAAM,2BACND,MAAO,6BACP0B,SAAU,CACR,kBACA,+FAGJ,CACED,KAAM,IACNxB,KAAM,qBACND,MAAO,sBACP0B,SAAU,CACR,kBACA,mDAGJ,CACED,K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","file":"static/js/main.be9aa4be.chunk.js","sourcesContent":["// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: Config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(\r\n process.env.PUBLIC_URL,\r\n window.location.href\r\n );\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string, config?: Config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' }\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready\r\n .then(registration => {\r\n registration.unregister();\r\n })\r\n .catch(error => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","import { IAction, IState, INITIAL_STATE, ActionType } from \"./Store\";\r\nimport update from 'react-addons-update';\r\n\r\nexport default function reducer(\r\n state: IState = INITIAL_STATE,\r\n action: IAction\r\n): IState {\r\n switch (action.type) {\r\n case ActionType.CHANGE_PAGE:\r\n return update(state, {\r\n pageIndex: {$set: action.value}\r\n })\r\n case ActionType.CHANGE_APP_STATE:\r\n return update(state, {\r\n applicationState: {$set: action.value}\r\n })\r\n case ActionType.CHANGE_DOCUMENT_DETAILS:\r\n if (!action.index)\r\n throw new Error(\"CHANGE_DOCUMENT_DETAILS requires document index specified\");\r\n return update(state, {\r\n documents: {\r\n [action.index] : {$set : action.value}\r\n }\r\n })\r\n case ActionType.CHANGE_DOCUMENTS:\r\n return update(state, {\r\n documents: {$set: action.value}\r\n })\r\n case ActionType.CHANGE_INPUT:\r\n if (!action.propertyName)\r\n throw new Error(\"CHANGE_INPUT requires propertyName specified\")\r\n return update(state, {\r\n input: {\r\n [action.propertyName] : {$set : action.value}\r\n }\r\n })\r\n case ActionType.CHANGE_INPUT_ALL:\r\n return update(state, {\r\n input: {$set: action.value}\r\n })\r\n case ActionType.CHANGE_BANK_AUTH:\r\n return update(state, {\r\n bankAuthorized: {$set: action.value}\r\n })\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { normalizeSync } from 'normalize-diacritics';\r\nimport Smartlook from \"smartlook-client\";\r\n\r\nfunction isEmpty(value: string): boolean {\r\n return value === null || value === undefined || value === \"\";\r\n}\r\n\r\nexport const setFavicon = (path: string, faviconName: string): void => {\r\n const favicon = document.getElementById(faviconName) as HTMLLinkElement;\r\n if (favicon) {\r\n favicon.href = path;\r\n }\r\n};\r\n\r\nexport const track = (eventName: string) => {\r\n Smartlook.track(eventName, {});\r\n};\r\n\r\nexport const queryParams = (search: string): any => {\r\n return search\r\n .slice(1)\r\n .split(\"&\")\r\n .reduce((acc, s) => {\r\n const [k, v] = s.split(\"=\");\r\n return Object.assign(acc, { [k]: v });\r\n }, {});\r\n};\r\n\r\nexport const changeRgbaOpacity = (\r\n rgbaString: string,\r\n opacity: number\r\n): string => {\r\n const rgbaSplit = rgbaString.split(\",\");\r\n const rgbaSplitWithoutOpacity = rgbaSplit.slice();\r\n rgbaSplitWithoutOpacity.splice(-1, 1);\r\n const opacityStr = `${opacity})`;\r\n\r\n const colorWithOpacity = rgbaSplitWithoutOpacity.join(\",\") + `,${opacityStr}`;\r\n return colorWithOpacity;\r\n};\r\n\r\nexport const HelperFunctions = {\r\n assignInputClass: function (str: string): string {\r\n return !isEmpty(str) ? \"input-filled\" : \"input-empty\";\r\n },\r\n isEmpty: function (str: string): boolean {\r\n return isEmpty(str);\r\n },\r\n emailIsValid: function (emailStr: string): boolean {\r\n if (/^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$/.test(emailStr)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n },\r\n postalCodeIsValid: function (postalCodeStr: string): boolean {\r\n return /^[A-Za-z]\\d[A-Za-z][ -]?\\d[A-Za-z]\\d$/.test(postalCodeStr);\r\n },\r\n dateIsValid: function (dateStr: string): boolean {\r\n let dts = dateStr.split(\"/\"),\r\n dateTest = new Date(dateStr);\r\n return (\r\n dateTest.getFullYear() === parseInt(dts[2], 10) &&\r\n dateTest.getMonth() === parseInt(dts[0], 10) - 1 &&\r\n dateTest.getDate() === parseInt(dts[1], 10)\r\n );\r\n },\r\n phoneIsValid: function (value: string): boolean {\r\n return /^\\(?[2-9]{1}[0-9]{2}\\)?\\s?[0-9]{3}\\-?[0-9]{4}/.test(value);\r\n },\r\n getAgeFromDateOfBirth: function (dateStr: string): number {\r\n let today = new Date();\r\n let birthDate = new Date(dateStr);\r\n let age = today.getFullYear() - birthDate.getFullYear();\r\n let m = today.getMonth() - birthDate.getMonth();\r\n if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {\r\n age--;\r\n }\r\n return age;\r\n },\r\n setPageTitle: function (pageTitle: string): void {\r\n document.title = pageTitle;\r\n },\r\n formatCurrency: function (amount: number, minFractionDigits?: number,\r\n maxFractionDigits?: number, language?: \"en\" | \"fr\"): string {\r\n let locale: \"en-CA\" | \"fr-CA\";\r\n switch (language) {\r\n case \"en\":\r\n locale = \"en-CA\";\r\n break;\r\n case \"fr\":\r\n locale = \"fr-CA\";\r\n break;\r\n default:\r\n locale = \"en-CA\";\r\n break;\r\n }\r\n return Intl.NumberFormat(locale, {\r\n style: \"currency\",\r\n currency: \"CAD\",\r\n minimumFractionDigits: minFractionDigits ?? 0,\r\n maximumFractionDigits: maxFractionDigits ?? 2,\r\n }).format(amount || 0);\r\n },\r\n formatPercentage: function (value?: number): string {\r\n return Intl.NumberFormat(\"en-CA\", {\r\n style: \"percent\",\r\n maximumFractionDigits: 2,\r\n }).format((value || 0) / 100);\r\n },\r\n formatDate: function (\r\n date: string,\r\n onlydatepart: boolean,\r\n datedelimiter: string\r\n ): string {\r\n let d = new Date(date),\r\n month = \"\" + (d.getMonth() + 1),\r\n day = \"\" + d.getDate(),\r\n year = d.getFullYear(),\r\n hour = d.getHours(),\r\n minutes = d.getMinutes(),\r\n seconds = d.getSeconds();\r\n\r\n if (month.length < 2) month = \"0\" + month;\r\n if (day.length < 2) day = \"0\" + day;\r\n\r\n let datePart = [month, day, year].join(datedelimiter);\r\n if (onlydatepart) return `${datePart}`;\r\n\r\n let timePart = [hour, minutes, seconds].join(\":\");\r\n return `${datePart} ${timePart} PST`;\r\n },\r\n scrollToTop: function (delayInMs: number, scrollStepInPx: number) {\r\n let intervalId = setInterval(function () {\r\n if (window.pageYOffset === 0) {\r\n clearInterval(intervalId);\r\n }\r\n window.scroll(0, window.pageYOffset - scrollStepInPx);\r\n }, delayInMs);\r\n },\r\n removeDiacritics: function (str: string): string {\r\n return normalizeSync(str);\r\n },\r\n replaceAmpersands: function (string: string): string {\r\n return string.replace('&', ';amp');\r\n }\r\n};\r\n","import { PartnerResponse } from \"../store/Store\";\r\nimport { changeRgbaOpacity, setFavicon } from \"../utils/HelperFunctions\";\r\nimport { Translation, EnglishTranslation } from \"./Translation\";\r\n\r\nexport enum AppState {\r\n LOADING = \"loading\",\r\n READY = \"ready\",\r\n ERROR = \"error\",\r\n}\r\n\r\nexport const NoIndexList = [\r\n \"https://new.merchantgrowth.com/welcome?language=fr&utm_source=website&utm_medium=website&utm_campaign=website\",\r\n \"https://new.merchantgrowth.com/welcome?utm_source=website&utm_medium=website&utm_campaign=website&_ga=2.127900557.1630453009.1612200730-803409354.1607020359\",\r\n \"https://new.merchantgrowth.com/welcome?utm_source=website&utm_medium=website&utm_campaign=website&_ga=2.127634637.1907387922.1615926120-1560227256.1614014937\",\r\n \"https://new.merchantgrowth.com/welcome?utm_source=website&utm_medium=website&utm_campaign=website\",\r\n \"https://ecommerce.merchantgrowth.com/welcome?utm_source=website&utm_medium=hello_bar&utm_campaign=ecommerce\",\r\n];\r\n\r\nexport const Styles = {\r\n textColorPrimary: \"#005887\",\r\n textColorPrimaryBright: \"#79b8db\",\r\n textColorSecondary: \"#67C288\",\r\n textColorSecondaryBright: \"#67C288\",\r\n textColorBullet: \"#005887\",\r\n textColorDescription: \"#616161\",\r\n textColorSubmit: \"#fff\",\r\n textColorForm: \"#67C288\",\r\n textColorSecondaryAlt: \"transparent\",\r\n textColorSuccess: \"#2DCE89\",\r\n textColorWarning: \"#F5365C\",\r\n textColorStart: \"#FEDDAA\",\r\n textColorQuote: \"#616161\",\r\n textColorError: \"#F5365C\",\r\n textColorTitleSecondary: \"#fff\",\r\n textColorInitialTitle: \"#005887\",\r\n textColorInitialTitleReverse: \"#fff\",\r\n defaultColor: \"#fff\",\r\n menuColor: \"#3376B7\",\r\n iconFill: \"#67C288\",\r\n bgStepper: \"#67C288\",\r\n bgStepperOpacity: 1,\r\n bgInitialTop: \"#F4F5F7\",\r\n bgInitialBottom: \"#c7f0d6\",\r\n bgInitialBottomOpacity: 1,\r\n bgInitialTopOpacity: 1,\r\n bgInitialRight: \"#fff\",\r\n bgInitialLeft: \"#005887\",\r\n bgInitialMiddle: \"#C4DFC6\",\r\n bgInitialButtonSubmit: \"#005887\",\r\n bgInitialFooterContainer: \"rgba(211,211,211,0.7)\",\r\n bgDropzone: \"#80ABCD\",\r\n shieldColor: \"#00B67A\",\r\n documentUploadBorderRadius: 10,\r\n sliderDotSize: 16,\r\n sliderDotSizeHandle: 32,\r\n sliderLineHeight: 8,\r\n assetPath: process.env.PUBLIC_URL,\r\n};\r\n\r\nexport const LocalSettings: Settings = {\r\n language: \"en\",\r\n logoUrl: `${process.env.PUBLIC_URL}/assets/svg/merchant_logo_transparent.svg`,\r\n logoMobileUrl: `${process.env.PUBLIC_URL}/assets/svg/merchant_logo_transparent.svg`,\r\n logoPoweredByUrl: `${process.env.PUBLIC_URL}/assets/svg/poweredby.svg`,\r\n logoPoweredByWhiteUrl: `${process.env.PUBLIC_URL}/assets/svg/poweredby_white.svg`,\r\n logoPoweredByVisible: false,\r\n logoBottomUrl: `${process.env.PUBLIC_URL}/assets/svg/merchant_logo_transparent.svg`,\r\n googleMapsUrl: `https://maps.google.com/?q=${`200-171 Water St, Vancouver, BC V6B 1A7`}`,\r\n bgLogoInitialTopOffsetDesktop: -10,\r\n bgLogoTopOffsetDesktop: -10,\r\n favicon16Url: `${process.env.PUBLIC_URL}/favicon-16x16.png`,\r\n favicon32Url: `${process.env.PUBLIC_URL}/favicon-32x32.png`,\r\n faviconAppleUrl: `${process.env.PUBLIC_URL}/apple-touch-icon.png`,\r\n finishBackgroundImage: `${process.env.PUBLIC_URL}/assets/img/hipstercoffee.png`,\r\n companyName: \"Merchant Growth\",\r\n companyNameOriginal: \"Merchant Growth\",\r\n formattedAddress: \"171 Water St #200, Vancouver, BC V6B 1A7\",\r\n formattedAddressVisible: true,\r\n formattedPhone: \"+1 866-240-3694\",\r\n email: \"clients@merchantgrowth.com\",\r\n phone: \"8662403694\",\r\n website: \"https://merchantgrowth.com\",\r\n testimonialImage: `${process.env.PUBLIC_URL}/assets/img/ammar_kapoor.png`,\r\n companyImage: `${process.env.PUBLIC_URL}/assets/img/sources/seo.png`,\r\n defaultIndustry: null,\r\n defaultSubIndustry: null,\r\n useColorMobileLogo: false,\r\n useEmail: false,\r\n translation: EnglishTranslation,\r\n useLandingPage: true,\r\n};\r\n\r\ntype Settings = {\r\n language: \"en\" | \"fr\";\r\n logoUrl: string;\r\n logoMobileUrl: string;\r\n logoPoweredByUrl: string;\r\n logoPoweredByWhiteUrl: string;\r\n logoPoweredByVisible: boolean;\r\n logoBottomUrl: string;\r\n googleMapsUrl: string;\r\n bgLogoInitialTopOffsetDesktop: number;\r\n bgLogoTopOffsetDesktop: number;\r\n favicon16Url: string;\r\n favicon32Url: string;\r\n faviconAppleUrl: string;\r\n finishBackgroundImage: string;\r\n companyName: string;\r\n companyNameOriginal: string;\r\n formattedAddress: string;\r\n formattedAddressVisible: boolean;\r\n formattedPhone: string;\r\n email: string;\r\n phone: string;\r\n website: string;\r\n testimonialImage: string;\r\n companyImage: string;\r\n defaultIndustry: string | null;\r\n defaultSubIndustry: string | null;\r\n useColorMobileLogo: boolean;\r\n useEmail: boolean;\r\n useLandingPage: boolean;\r\n translation: Translation;\r\n};\r\n\r\nexport const setPartnerData = (partnerData: PartnerResponse) => {\r\n const {\r\n primaryColor,\r\n whiteLabel,\r\n buttonColor,\r\n inverseTitleColor,\r\n logoMobileUrl,\r\n logoUrl,\r\n faviconUrl,\r\n companyName,\r\n formattedAddress,\r\n testimonalText,\r\n testimonalTextFr,\r\n testimonialAuthor,\r\n testimonialAuthorFr,\r\n testimonialImage,\r\n companyTextFirstParagraph,\r\n companyTextFirstParagraphFr,\r\n companyTextSecondParagraph,\r\n companyTextSecondParagraphFr,\r\n companyImage,\r\n phone,\r\n email,\r\n website,\r\n specificIndustry,\r\n specificSubIndustry,\r\n useColourMobileLogo,\r\n useEmail,\r\n useLandingPage,\r\n } = partnerData;\r\n\r\n const opacityTop = 0.1;\r\n const opacityBottom = 0.3;\r\n\r\n if (logoUrl) {\r\n LocalSettings.logoUrl = logoUrl;\r\n LocalSettings.logoPoweredByVisible = !whiteLabel;\r\n } else {\r\n // If main logo is not set up, displaying \"Powered by\" logo instead\r\n // And hiding the \"Powered by\" from the right screen side\r\n LocalSettings.logoUrl = LocalSettings.logoPoweredByUrl;\r\n LocalSettings.logoPoweredByVisible = false;\r\n }\r\n\r\n if (whiteLabel) {\r\n LocalSettings.bgLogoInitialTopOffsetDesktop = -10;\r\n LocalSettings.bgLogoTopOffsetDesktop = -10;\r\n } else {\r\n LocalSettings.bgLogoInitialTopOffsetDesktop = 10;\r\n LocalSettings.bgLogoTopOffsetDesktop = 10;\r\n }\r\n\r\n if (logoMobileUrl) {\r\n LocalSettings.logoMobileUrl = logoMobileUrl;\r\n } else {\r\n LocalSettings.logoMobileUrl = LocalSettings.logoUrl;\r\n }\r\n\r\n LocalSettings.useColorMobileLogo = useColourMobileLogo;\r\n LocalSettings.useEmail = useEmail;\r\n LocalSettings.useLandingPage = useLandingPage;\r\n LocalSettings.companyName = companyName;\r\n\r\n if (formattedAddress) {\r\n LocalSettings.formattedAddress = formattedAddress;\r\n } else {\r\n LocalSettings.formattedAddressVisible = false;\r\n }\r\n\r\n LocalSettings.phone = phone;\r\n LocalSettings.email = email;\r\n LocalSettings.formattedPhone = phone;\r\n LocalSettings.logoBottomUrl = logoUrl;\r\n LocalSettings.favicon16Url = faviconUrl;\r\n LocalSettings.website = website;\r\n\r\n LocalSettings.googleMapsUrl = `https://maps.google.com/?q=${formattedAddress}`;\r\n\r\n //Setting testimonial and company images and text:\r\n //Both testimonial author and text should be specified:\r\n const initialPageTranslation = LocalSettings.translation.initialPage;\r\n\r\n switch (LocalSettings.language) {\r\n case \"en\":\r\n if (testimonalText && testimonialAuthor) {\r\n initialPageTranslation.testimonialText = testimonalText;\r\n initialPageTranslation.testimonialAuthor = testimonialAuthor;\r\n }\r\n break;\r\n case \"fr\":\r\n if (testimonalTextFr && testimonialAuthorFr) {\r\n initialPageTranslation.testimonialText = testimonalTextFr;\r\n initialPageTranslation.testimonialAuthor = testimonialAuthorFr;\r\n }\r\n break;\r\n }\r\n if (testimonialImage) {\r\n LocalSettings.testimonialImage = testimonialImage;\r\n }\r\n\r\n //Will be set if any text paragraph is specified:\r\n switch (LocalSettings.language) {\r\n case \"en\":\r\n if (companyTextFirstParagraph || companyTextSecondParagraph) {\r\n initialPageTranslation.bottomTextFirstParagraph =\r\n companyTextFirstParagraph;\r\n initialPageTranslation.bottomTextSecondParagraph =\r\n companyTextSecondParagraph;\r\n } else {\r\n initialPageTranslation.bottomTextFirstParagraph = `Why apply for small business financing with ${LocalSettings.companyName} instead of a plain old business loan with another company? Not all business loans in Canada are created equally, and we're not your average lender. We help small business owners get fast & easy, no-collateral access to the cash they need so they can focus on their business. It's all we do, and we love doing it! \r\nUnlike a traditional small loan in Canada, ${LocalSettings.companyName} has incredible customer service, complete transparency with repayment (no hidden fees), and we use the newest and best technology (that's what makes us faster than the other guys). Getting funding for a business doesn’t have to be complicated, and it doesn’t have to take away from you actually running your business. We've helped thousands of Canadian small businesses grow!`;\r\n initialPageTranslation.bottomTextSecondParagraph = `Let's talk about how we can help your business. There are no restrictions on how you use your cash. You might be looking for a small business loan for renos, for staffing, for seasonal inventory, for growth... whatever it is that you need it for, our business financing has got you covered.`;\r\n }\r\n break;\r\n case \"fr\":\r\n if (companyTextFirstParagraphFr || companyTextSecondParagraphFr) {\r\n initialPageTranslation.bottomTextFirstParagraph =\r\n companyTextFirstParagraphFr;\r\n initialPageTranslation.bottomTextSecondParagraph =\r\n companyTextSecondParagraphFr;\r\n } else {\r\n initialPageTranslation.bottomTextFirstParagraph = `Pourquoi demander un financement pour votre entreprise avec ${LocalSettings.companyName} plutôt qu'un simple prêt commercial auprès d'une autre société ? Tous les prêts commerciaux au Canada ne sont pas créés de la même façon, et nous ne sommes pas un prêteur ordinaire. Nous aidons les propriétaires de petites entreprises à obtenir rapidement et facilement, sans garantie, l'argent dont ils ont besoin pour se concentrer sur leur entreprise. C'est tout ce que nous faisons, et nous aimons le faire ! \r\nContrairement à un petit prêt traditionnel au Canada, ${LocalSettings.companyName} offre un service à la clientèle incroyable, une transparence totale en matière de remboursement (pas de frais cachés), et nous utilisons la meilleure et la plus récente technologie (c'est ce qui nous rend plus rapides que les autres). Obtenir du financement pour une entreprise ne doit pas être compliqué, et cela ne doit pas vous empêcher de gérer votre entreprise. Nous avons aidé des milliers de petites entreprises canadiennes à se développer !`;\r\n initialPageTranslation.bottomTextSecondParagraph =\r\n \"Voyons comment nous pouvons aider votre entreprise. Il n'y a aucune restriction quant à l'utilisation de vos liquidités. Vous pouvez rechercher un prêt aux petites entreprises pour des rénovations, pour du personnel, pour des stocks saisonniers, pour la croissance... quel que soit l'usage que vous en fassiez, notre financement des entreprises vous couvre.\";\r\n }\r\n break;\r\n }\r\n\r\n if (specificIndustry) {\r\n LocalSettings.defaultIndustry = specificIndustry;\r\n }\r\n\r\n if (specificSubIndustry) {\r\n LocalSettings.defaultSubIndustry = specificSubIndustry;\r\n }\r\n\r\n if (companyImage) {\r\n LocalSettings.companyImage = companyImage;\r\n }\r\n\r\n setFavicon(faviconUrl, \"favicon-16\");\r\n setFavicon(faviconUrl, \"favicon-32\");\r\n\r\n const textColor = \"#fff\";\r\n const descriptionColor = \"#616161\";\r\n const bulletColor = \"#616161\";\r\n\r\n if (inverseTitleColor) {\r\n Styles.textColorInitialTitle = textColor;\r\n Styles.textColorTitleSecondary = textColor;\r\n } else {\r\n Styles.textColorInitialTitle = bulletColor;\r\n Styles.textColorTitleSecondary = bulletColor;\r\n }\r\n\r\n Styles.textColorForm = primaryColor;\r\n Styles.textColorPrimary = primaryColor;\r\n Styles.textColorPrimaryBright = changeRgbaOpacity(primaryColor, 0.2);\r\n Styles.bgDropzone = buttonColor;\r\n Styles.textColorSecondary = buttonColor;\r\n Styles.iconFill = primaryColor;\r\n Styles.bgInitialBottom = primaryColor;\r\n Styles.bgInitialBottomOpacity = opacityBottom;\r\n Styles.bgInitialTopOpacity = opacityTop;\r\n // Styles.shieldColor = primaryColor;\r\n Styles.bgInitialTop = primaryColor;\r\n Styles.bgInitialButtonSubmit = buttonColor;\r\n Styles.bgStepper = primaryColor;\r\n Styles.bgStepperOpacity = 0.8;\r\n Styles.textColorSubmit = textColor;\r\n Styles.textColorBullet = bulletColor;\r\n Styles.textColorDescription = descriptionColor;\r\n};\r\n","import { LocalSettings } from \"./AppConfig\";\r\n\r\nexport const EnglishTranslation: Translation = {\r\n loading: {\r\n mainMessage: \"Loading, please wait\",\r\n description: \"We're preparing your application, it won't take long!\",\r\n },\r\n initialPage: {\r\n description: \"Get instant quote in 2 or less minutes!\",\r\n pageName: \"Welcome\",\r\n greetingPrimary: \"Let's get started!\",\r\n greetingSecondary:\r\n \"Fill out the form below to get funds for your business in 24 hours or less\",\r\n greetingSecondaryEcommerce:\r\n \"Fill out the form below to get funds for your e-commerce business in 24 hours or less\",\r\n firstName: \"First Name\",\r\n firstNameInvalid: \"Please enter your first name\",\r\n lastName: \"Last Name\",\r\n lastNameInvalid: \"Please enter your last name\",\r\n email: \"Email Address\",\r\n emailInvalid: \"Please enter your email\",\r\n emailInvalidFormat: \"Invalid email format\",\r\n businessName: \"Business name\",\r\n businessNameInvalid: \"Please enter your business name\",\r\n mobilePhone: \"Mobile Phone (optional)\",\r\n mobilePhoneInvalid: \"Mobile phone has invalid format\",\r\n submit: \"Let's go\",\r\n items: [\r\n \"Funds in 24 hours\",\r\n \"$5,000 to $800,000\",\r\n \"No hidden fees, no collateral\",\r\n \"Applying doesn't impact credit score\",\r\n \"Simple requirements: at least 6 months in business, $10,000 monthly revenue, and located in Canada\",\r\n ],\r\n items_ecommerce: [\r\n \"Get an instant quote in just 2 minutes\",\r\n \"Receive funds in 24 hours\",\r\n \"Grow your business\",\r\n \"No hidden fees\",\r\n \"Applying won't impact your credit score\",\r\n ],\r\n bottomTextEcommerceParagraph: `Get funds for your ecommerce business in just 24 hours. From\r\n launching a marketing campaign, to scaling your inventory,\r\n grow your business with Merchant Growth. We make securing\r\n capital for your e-commerce business easy with a fast\r\n application process, and easy to understand terms with no\r\n hidden surprises. Apply today. Get funds for your online\r\n business tomorrow.`,\r\n bottomTextFirstParagraph:\r\n \"Why apply for small business financing with Merchant Growth instead of a plain old business loan with another company? Not all business loans in Canada are created equally, and we're not your average lender. We help small business owners get fast & easy, no-collateral access to the cash they need so they can focus on their business. It's all we do, and we love doing it! Unlike a traditional small loan in Canada, Merchant Growth has incredible customer service, complete transparency with repayment (no hidden fees), and we use the newest and best technology (that's what makes us faster than the other guys). Getting funding for a business doesn’t have to be complicated, and it doesn’t have to take away from you actually running your business. We've helped thousands of Canadian small businesses grow!\",\r\n bottomTextSecondParagraph:\r\n \"Let's talk about how we can help your business. There are no restrictions on how you use your cash. You might be looking for a small business loan for renos, for staffing, for seasonal inventory, for growth... whatever it is that you need it for, our business financing has got you covered.\",\r\n testimonialText:\r\n \"On behalf of all of us at Urban Concierge Services I want to extend my thanks for the loans you have provided us. Having access to these funds provided us a financial platform to grow our clientele, refine our operations, and adapt to our rapidly changing industry. The funds provided also aided us in eliminating part of our higher interest debt, evening out our financial performance.\",\r\n testimonialAuthor:\r\n \"Christopher Gunn, President/Founder of Urban Concierge Services\",\r\n address: \"Address\",\r\n callUs: \"Call Us\",\r\n emailUs: \"Email Us\",\r\n trustedByCanadians:\r\n \"Trusted by thousands of Canadians...You may have seen us before...\",\r\n protectedBy: \"Protected by bank-level security\",\r\n referenceSource: \"Where did you hear about us? (optional)\",\r\n referenceSourceDropdown: {\r\n google: \"Google/Bing\",\r\n direct: \"Direct Mail\",\r\n tv: \"TV Commercial\",\r\n facebook: \"Facebook/Instagram Ad\",\r\n banner: \"Internet Banner Ad\",\r\n youtube: \"YouTube Ad\",\r\n friend: \"Friend/Family\",\r\n referral: \"Referral\",\r\n yourAccountant:\"Your Accountant\",\r\n other: \"Other\",\r\n }\r\n },\r\n bankingPage: {\r\n pageName: \"Banking\",\r\n mainTitle:\r\n \"We need to have a quick look at your business bank account to process your application.\",\r\n returningCustomerNote: \"(Returning customer? Please connect the same account being used for repayments)\",\r\n secondaryTitle: \"Don’t worry, this won’t affect your credit.\",\r\n protectedBy: \"Protected by bank-level security\",\r\n proceedButton: \"Connect my bank later\",\r\n proceedTitle: ``,\r\n proceedText: `Applicants who connect their bank at this step get funded faster.\r\n Connect your bank now to avoid delays in processing your application!`,\r\n proceedContinue: \"I’m ok with delays\",\r\n proceedCancel: \"Get funded faster\",\r\n flinksLoadingMessage: \"Loading, please wait\",\r\n notListed: \"My financial institution is not listed\",\r\n },\r\n finishPage: {\r\n pageName: \"Finish\",\r\n mainTitle: \"Your application has been submitted\",\r\n secondaryTitle:\r\n \"One of our funding specialists will be in contact with you within the next 24 hours\",\r\n },\r\n documentsPage: {\r\n pageName: \"Documents\",\r\n businessInfo: \"Business & Owner Information\",\r\n connectBank: \"Connect your Bank Account\",\r\n doneButtonText: \"Done\",\r\n mainTitle: \"Want to get approved faster?\",\r\n secondaryTitle: \"Complete the checklist below to finalize your application\",\r\n startButtonText: \"Start\",\r\n completedButtonText: \"Completed\",\r\n continueButtonText: \"Continue\",\r\n termsAndConditions: \"Terms & Conditions\",\r\n uploadButtonText: \"Upload\",\r\n requestedButtonText: \"Start\",\r\n submitButtonText: \"Submit your application\",\r\n actionBusinessInformation:\r\n \"Please provide us the general information about your business\",\r\n actionTermsAndConditions: \"Please review our terms and conditions\",\r\n actionConnectBank:\r\n \"Please connect your bank account to get our best offers!\",\r\n actionContinueConnectingBank:\r\n \"You can continue connecting your bank or upload paper statements instead.\",\r\n actionBankConnectedText: \"Your bank was connected, thank you!\",\r\n actionPaperStatements:\r\n \"It takes longer for us to review pdf or paper bank statements, connect your business bank account now to get approved faster!\",\r\n actionBankNotListed:\r\n \"Are you sure your bank isn’t listed? Check again to refresh the list of banks and credit unions you can connect!\",\r\n tcAgree: \"I Agree\",\r\n tcCancel: \"Cancel\",\r\n dzChooseFilesText:\r\n \"Please upload your $itemName by dragging the files into the box below or clicking on it\",\r\n dzUploadFilesText: \"Choose files\",\r\n dzDropFilesToUploadText: \"Drop files here to upload\",\r\n dzFilesUploadedText:\r\n \"Files were uploaded. Thank you! Please click Finish to continue.\",\r\n dzFinishText: \"Finish\",\r\n dzFilesSelected: \"File(s) were selected\",\r\n dzTapToUploadText: \"Tap here to upload\",\r\n dzThankYou: \"Thank you!\",\r\n dzFilesWereUploadedText: \"File(s) were uploaded\",\r\n dzTapFinishToContinueText: \"Please tap Finish to continue\",\r\n dzUploadMorePart1Text: \"or tap\",\r\n dzUploadMorePart2Text: \"here\",\r\n dzUploadMorePart3Text: \"to upload more\",\r\n dzProcessingFiles: \"Processing files\",\r\n dzPleaseUploadYour: \"Please upload your\",\r\n ufUploadLaterText: \"Upload later\",\r\n ufUploadText: \"Upload\",\r\n ufUploadSelected: \"Upload selected\",\r\n ufUploadFinish: \"Finish\",\r\n },\r\n applicationPage: {\r\n pageName: \"Application\",\r\n stepper: {\r\n minutesFromFinish: \"minute(s) from finish\",\r\n back: \"Previous\",\r\n start: \"Let's Go!\",\r\n continue: \"Next\",\r\n submit: \"Submit My Application!\",\r\n submitMobile: \"Submit\",\r\n },\r\n industryStep: {\r\n mainTitle: \"Let's Begin!\",\r\n industry: \"What is your business industry?\",\r\n industryPlaceholder: \"Please start typing, we will look it up for you!\",\r\n },\r\n requestedAmountStep: {\r\n mainTitle: \"Requested Financing Amount\",\r\n secondaryTitle: \"How much financing do you need?\",\r\n },\r\n annualRevenueStep: {\r\n mainTitle: \"Last 12 Months' Revenue\",\r\n secondaryTitle: \"What is your annual revenue range?\",\r\n selectRange: \"Please select range\",\r\n range0_250: \">$0-$250K\",\r\n range250_500: \"$250K-$500K\",\r\n range500_1: \"$500K-$1M\",\r\n range1_2: \"$1M-$2M\",\r\n range2_3: \"$2M-$3M\",\r\n range3: \">$3M\",\r\n },\r\n annualRevenueRangeStep: {\r\n mainTitle: \"Last 12 Months' Revenue\",\r\n range: \"What is your annual revenue range?\",\r\n rangePerYear: \" / year\",\r\n rangeSpecific: \"Can you be more specific?\",\r\n },\r\n yearsInBusinessRangeStep: {\r\n mainTitle: \"Time in business\",\r\n secondaryTitle: \"What is time in business range?\",\r\n selectRange: \"Please select range\",\r\n range_1: \"Less than 1 year\",\r\n range_2: \"1-10 Years\",\r\n range_3: \"10-20+ Years\",\r\n },\r\n yearsInBusinessStep: {\r\n mainTitle: \"Time in business\",\r\n howManyYears: \"How many years have you been in business?\",\r\n howManyMonths: \"How many months have you been in business?\",\r\n year: \"Year\",\r\n years: \"Years\",\r\n month: \"Month\",\r\n months: \"Months\",\r\n },\r\n businessAddressStep: {\r\n mainTitle: \"Where is your business located?\",\r\n businessAddress: \"Business Address\",\r\n addressPlaceHolder: \"Please start typing, we will look it up for you\",\r\n },\r\n homeAddressStep: {\r\n mainTitle: \"Where are you located?\",\r\n homeAddress: \"Home Address\",\r\n addressPlaceHolder: \"Please start typing, we will look it up for you\",\r\n skipBusinessAddress: \"Same as Business Address\",\r\n },\r\n addresses: {\r\n manualEntry: \"Let me enter the address manually!\",\r\n addressSelected: \"The address you've selected is\",\r\n changeMyAddress: \"Change my address!\",\r\n lookupAddress: \"Lookup my address!\",\r\n selectProvince: \"Please select the province\",\r\n street: \"Street\",\r\n city: \"City\",\r\n province: \"Province\",\r\n postalCode: \"Postal Code\",\r\n streetInvalid: \"Please enter street\",\r\n cityInvalid: \"Please enter city\",\r\n provinceInvalid: \"Please select province\",\r\n postalCodeInvalid: \"Please enter valid Postal Code\",\r\n provinceNames: {\r\n alberta: \"Alberta\",\r\n bc: \"British Columbia\",\r\n manitoba: \"Manitoba\",\r\n nb: \"New Brunswick\",\r\n nfl: \"Newfoundland and Labrador\",\r\n nwt: \"Northwest Territories\",\r\n ns: \"Nova Scotia\",\r\n nunavut: \"Nunavut\",\r\n on: \"Ontario\",\r\n pei: \"Prince Edward Island\",\r\n qb: \"Quebec\",\r\n sc: \"Saskatchewan\",\r\n yk: \"Yukon\",\r\n },\r\n },\r\n legalBusinessNameStep: {\r\n mainTitle: \"We'd love to learn more about your business\",\r\n legalBusinessName: \"What is the legal name of your business?\",\r\n legalBusinessNamePlaceholder: \"Legal Business Name\",\r\n legalBusinessNameSymbols: \"Should not be less than 4 symbols\",\r\n legalBusinessNameMissing: \"Please enter the legal name of your business\",\r\n },\r\n termsAndConditionsStep: {\r\n mainTitle: \"Please review our terms and conditions\",\r\n agreeSwitch: \"I agree with the Terms and Conditions\",\r\n termsLink: \"Please click here to review our terms and conditions\",\r\n termsAndConditionsTitle: \"Terms & Conditions\",\r\n termsAgree: \"I Agree\",\r\n termsDisagree: \"Cancel\",\r\n },\r\n customerDetailsStep: {\r\n mainTitle: \"We would like to know more about you\",\r\n dateOfBirth: \"Date Of Birth\",\r\n dateOfBirthPlaceholder: \"MM/DD/YYYY\",\r\n dateOfBirthTextmask: \"MMDDYYYY\",\r\n dobFormatInvalid: \"Should be in MM/DD/YYYY format. e.g. 06/08/1987\",\r\n dobDateInvalid: \"Please enter valid date\",\r\n dobAgeInvalid: \"You must be at least 18 years old\",\r\n dobDateMissing: \"Please enter your date of birth\",\r\n mobilePhone: \"Mobile Phone\",\r\n mobilePhonePlaceholder: \"The phone number to reach you at\",\r\n mobilePhoneInvalid: \"Please enter a valid phone number\",\r\n mobilePhoneMissing: \"Please enter phone number\",\r\n },\r\n },\r\n};\r\n\r\nexport const FrenchTranslation: Translation = {\r\n loading: {\r\n mainMessage: \"Chargement en cours, veuillez patienter\",\r\n description: \"Nous préparons votre demande, ça ne sera pas long!\",\r\n },\r\n initialPage: {\r\n description: \"Obtenez un devis instantané en 2 minutes ou moins!\",\r\n pageName: \"Bienvenue\",\r\n greetingPrimary: \"Commençons!\",\r\n greetingSecondary:\r\n \"Remplissez le formulaire ci-dessous pour obtenir des fonds pour votre entreprise en 24 heures ou moins\",\r\n greetingSecondaryEcommerce:\r\n \"Remplissez le formulaire ci-dessous pour obtenir des fonds pour votre entreprise de commerce électronique en 24 heures ou moins\",\r\n firstName: \"Prénom\",\r\n firstNameInvalid: \"Veuillez entrer votre prénom\",\r\n lastName: \"Nom de famille\",\r\n lastNameInvalid: \"Veuillez entrer votre nom de famille\",\r\n email: \"Adresse électronique\",\r\n emailInvalid: \"Veuillez entrer votre adresse électronique\",\r\n emailInvalidFormat: \"Le format de l'e-mail n'est pas valide\",\r\n businessName: \"Nom de l'entreprise\",\r\n businessNameInvalid: \"Veuillez entrer votre nom de l'entreprise\",\r\n mobilePhone: \"Téléphone cellulaire (facultatif)\",\r\n mobilePhoneInvalid: \"Le format du téléphone portable n'est pas valide\",\r\n submit: \"Allons-y\",\r\n items: [\r\n \"Fonds en 24 heures\",\r\n \"De 5 000 à 800 000 dollars\",\r\n \"Pas de frais cachés, pas de garantie\",\r\n \"La demande n'a pas d'impact sur la cote de crédit\",\r\n \"Exigences simples : au moins 6 mois d'activité, 10 000 $ de revenus mensuels, et situé au Canada\"\r\n ],\r\n items_ecommerce: [\r\n \"Obtenez un devis instantané en seulement 2 minutes\",\r\n \"Recevez des fonds en 24 heures\",\r\n \"Développez votre entreprise\",\r\n \"Pas de frais cachés\",\r\n \"Faire une demande n'aura aucune incidence sur votre pointage de crédit\",\r\n ],\r\n bottomTextEcommerceParagraph: `Obtenez des fonds pour votre entreprise de commerce électronique en seulement 24 heures. De\r\n lancer une campagne marketing, pour faire évoluer votre inventaire,\r\n Développez votre entreprise avec Merchant Growth. Nous faisons la sécurisation\r\n capital pour votre entreprise de commerce électronique facile avec un rapide\r\n processus de candidature et termes faciles à comprendre sans\r\n surprises cachées. Postuler aujourd'hui. Obtenez des fonds pour votre en ligne\r\n les affaires de demain.`,\r\n bottomTextFirstParagraph:\r\n \"Pourquoi demander un financement pour petite entreprise à Merchant Growth plutôt qu'un simple prêt commercial auprès d'une autre société ? Tous les prêts commerciaux au Canada ne sont pas créés de la même façon, et nous ne sommes pas un prêteur ordinaire. Nous aidons les propriétaires de petites entreprises à obtenir rapidement et facilement, sans garantie, l'argent dont ils ont besoin pour se concentrer sur leur entreprise. C'est tout ce que nous faisons, et nous aimons le faire! Contrairement à un petit prêt traditionnel au Canada, Merchant Growth offre un service à la clientèle incroyable, une transparence totale en matière de remboursement (pas de frais cachés), et nous utilisons la meilleure et la plus récente technologie (c'est ce qui nous rend plus rapides que les autres). Obtenir du financement pour une entreprise ne doit pas être compliqué, et cela ne doit pas vous empêcher de gérer votre entreprise. Nous avons aidé des milliers de petites entreprises canadiennes à se développer!\",\r\n bottomTextSecondParagraph:\r\n \"Voyons comment nous pouvons aider votre entreprise. Il n'y a aucune restriction quant à l'utilisation de vos liquidités. Vous pouvez rechercher un prêt aux petites entreprises pour des rénovations, pour du personnel, pour des stocks saisonniers, pour la croissance... quel que soit l'usage que vous en fassiez, notre financement des entreprises vous couvre.\",\r\n testimonialText:\r\n \"Au nom de nous tous à Urban Concierge Services, je tiens à vous remercier pour les prêts que vous nous avez accordés. L'accès à ces fonds nous a fourni une plateforme financière pour développer notre clientèle, optimiser nos opérations et nous adapter à l’évolution rapide de notre industrie. Les fonds fournis nous ont également aidés à éliminer une partie de notre dette à taux d'intérêt plus élevé et à équilibrer notre performance financière.\",\r\n testimonialAuthor:\r\n \"Christopher Gunn, président/fondateur de Urban Concierge Services\",\r\n address: \"Adresse\",\r\n callUs: \"Appelez-nous\",\r\n emailUs: \"L' e-mail\",\r\n trustedByCanadians:\r\n \"Des milliers de Canadiens font confiance ... Vous nous avez peut-être déjà vus ...\",\r\n protectedBy: \"Données protégées par une sécurité de niveau bancaire.\",\r\n referenceSource: \"Où avez-vous entendu parler de nous? (facultatif)\",\r\n referenceSourceDropdown: {\r\n google : \"Google/Bing\",\r\n direct : \"Courrier direct\",\r\n tv : \"Publicité télévisée\",\r\n facebook : \"Publicité Facebook/Instagram\",\r\n banner : \"Bannière publicitaire sur Internet\",\r\n youtube : \"Publicité YouTube\",\r\n friend : \"Ami/Famille\",\r\n referral: \"Lien de référence\",\r\n yourAccountant:\"Votre comptable\",\r\n other : \"Autre\",\r\n }\r\n },\r\n applicationPage: {\r\n pageName: \"Application\",\r\n stepper: {\r\n minutesFromFinish: \"minute(s) jusqu'à la fin\",\r\n start: \"Allons-y!\",\r\n back: \"Retourner\",\r\n continue: \"Continuer!\",\r\n submit: \"Soumettre ma demande!\",\r\n submitMobile: \"Soumettre\",\r\n },\r\n industryStep: {\r\n mainTitle: \"Commençons!\",\r\n industry: \"Quel est votre secteur d'activité?\",\r\n industryPlaceholder: \"Commencez à taper, les secteurs vont s’afficher!\",\r\n },\r\n requestedAmountStep: {\r\n mainTitle: \"Montant du financement demandé\",\r\n secondaryTitle: \"De combien de financement avez-vous besoin?\",\r\n },\r\n annualRevenueStep: {\r\n mainTitle: \"Revenus des 12 derniers mois\",\r\n secondaryTitle: \"Quel est votre revenu annuel?\",\r\n selectRange: \"Veuillez sélectionner parmi ces options\",\r\n range0_250: \"0 à 250 000 $\",\r\n range250_500: \"250 000 à 500 000 $\",\r\n range500_1: \"500 000 à 1 000 000 $\",\r\n range1_2: \"1 000 000 à 2 000 000 $\",\r\n range2_3: \"2 000 000 à 3 000 000 $\",\r\n range3: \"Plus de 3 000 000 $\",\r\n },\r\n annualRevenueRangeStep: {\r\n mainTitle: \"Revenus des 12 derniers mois\",\r\n range: \"Quel est votre revenu annuel?\",\r\n rangePerYear: \" / année\",\r\n rangeSpecific: \"Pourriez-vous être plus précis?\",\r\n },\r\n yearsInBusinessRangeStep: {\r\n mainTitle: \"Années d'opération\",\r\n secondaryTitle: \"Quelle est votre plage d'années de fonctionnement?\",\r\n selectRange: \"Veuillez sélectionner parmi ces options\",\r\n range_1: \"Moins d'un an\",\r\n range_2: \"1 à 10 ans\",\r\n range_3: \"10 à 20+ ans\",\r\n },\r\n yearsInBusinessStep: {\r\n mainTitle: \"Années d'opération\",\r\n howManyYears:\r\n \"Depuis combien d'années votre entreprise est-elle en activité?\",\r\n howManyMonths:\r\n \"Depuis combien de mois votre entreprise est-elle en activité?\",\r\n year: \"année\",\r\n years: \"années\",\r\n month: \"mois\",\r\n months: \"mois\",\r\n },\r\n businessAddressStep: {\r\n mainTitle: \"Où est située votre entreprise?\",\r\n businessAddress: \"Adresse de l’entreprise\",\r\n addressPlaceHolder: \"Commencez à taper, nous la recherchons pour vous\",\r\n },\r\n homeAddressStep: {\r\n mainTitle: \"Où vous situez-vous?\",\r\n homeAddress: \"Adresse du domicile\",\r\n addressPlaceHolder: \"Commencez à taper, nous la recherchons pour vous\",\r\n skipBusinessAddress: \"Identique à l'adresse professionnelle\",\r\n },\r\n addresses: {\r\n manualEntry: \"Laissez-moi taper l'adresse manuellement!\",\r\n addressSelected: \"L'adresse que vous avez sélectionnée est:\",\r\n changeMyAddress: \"Changer mon adresse!\",\r\n lookupAddress: \"Cherchez mon adresse!\",\r\n selectProvince: \"Veuillez sélectionner la province\",\r\n street: \"Rue\",\r\n city: \"Ville\",\r\n province: \"Province\",\r\n postalCode: \"Code Postal\",\r\n streetInvalid: \"Veuillez entrer la rue\",\r\n cityInvalid: \"Veuillez entrer la ville\",\r\n provinceInvalid: \"Veuillez sélectionner la province\",\r\n postalCodeInvalid: \"Veuillez saisir un code postal valide\",\r\n provinceNames: {\r\n alberta: \"l’Alberta\",\r\n bc: \"la Colombie-Britannique\",\r\n manitoba: \"le Manitoba\",\r\n nb: \"le Nouveau-Brunswick\",\r\n nfl: \"la Terre-Neuve-et-Labrador\",\r\n nwt: \"les Territoires du Nord-Ouest\",\r\n ns: \"la Nouvelle-Écosse\",\r\n nunavut: \"le Nunavut\",\r\n on: \"l’Ontario\",\r\n pei: \"l’île du Prince-Édouard\",\r\n qb: \"le Québec\",\r\n sc: \"la Saskatchewan\",\r\n yk: \"le Yukon\",\r\n },\r\n },\r\n legalBusinessNameStep: {\r\n mainTitle: \"Nous aimerions en savoir plus sur votre entreprise\",\r\n legalBusinessName: \"Quel est le nom légal de votre entreprise?\",\r\n legalBusinessNamePlaceholder: \"Nom légal de votre entreprise\",\r\n legalBusinessNameSymbols: \"Ne devrait pas être inférieur à 4 symboles\",\r\n legalBusinessNameMissing:\r\n \"Veuillez saisir le nom légal de votre entreprise\",\r\n },\r\n termsAndConditionsStep: {\r\n mainTitle: \"Veuillez consulter nos termes et conditions\",\r\n agreeSwitch: \"J'accepte les termes et conditions\",\r\n termsLink: \"Veuillez cliquer ici pour consulter nos termes et conditions\",\r\n termsAndConditionsTitle: \"Termes et Conditions\",\r\n termsAgree: \"Je suis d'accord\",\r\n termsDisagree: \"Annuler\",\r\n },\r\n customerDetailsStep: {\r\n mainTitle: \"Nous aimerions en savoir plus sur vous\",\r\n dateOfBirth: \"Date de naissance\",\r\n dateOfBirthPlaceholder: \"MM/JJ/AAAA\",\r\n dateOfBirthTextmask: \"MMJJAAAA\",\r\n dobFormatInvalid:\r\n \"Doit être au format MM/JJ/AAAA. par exemple 06/08/1987\",\r\n dobDateInvalid: \"Veuillez saisir une date valide\",\r\n dobAgeInvalid: \"Vous devez avoir au moins 18 ans\",\r\n dobDateMissing: \"Veuillez saisir votre date de naissance\",\r\n mobilePhone: \"Numéro de téléphone cellulaire\",\r\n mobilePhonePlaceholder: \"Un autre numéro de téléphone pour vous joindre\",\r\n mobilePhoneInvalid: \"Veuillez saisir de numéro de téléphone valide\",\r\n mobilePhoneMissing: \"Veuillez saisir de numéro de téléphone\",\r\n },\r\n },\r\n bankingPage: {\r\n pageName: \"Bancaire\",\r\n mainTitle:\r\n \"Nous devons examiner rapidement le compte bancaire de votre entreprise pour traiter votre demande.\",\r\n returningCustomerNote: \"(Client existant? Veuillez connecter le même compte utilisé pour les remboursements)\",\r\n secondaryTitle:\r\n \"Ne vous inquiétez pas, cela n'affectera pas votre cote de crédit.\",\r\n protectedBy: \"Données protégées par une sécurité de niveau bancaire.\",\r\n proceedButton: \"Connecter ma banque plus tard\",\r\n proceedText: `Les candidats qui connectent leur banque à cette étape sont financés plus rapidement.\r\n Connectez votre banque dès maintenant pour éviter les retards dans le traitement de votre demande!`,\r\n proceedTitle: ``,\r\n proceedContinue: \"Je suis d'accord avec les retards\",\r\n proceedCancel: \"Obtenez un financement plus rapidement\",\r\n flinksLoadingMessage: \"Chargement, veuillez patienter\",\r\n notListed: \"Mon institution n'est pas répertoriée\",\r\n },\r\n finishPage: {\r\n pageName: \"Finir\",\r\n mainTitle: \"Votre demande a été soumise\",\r\n secondaryTitle:\r\n \"Un de nos spécialistes en financement sera en contact avec vous dans les 24 prochaines heures\",\r\n },\r\n documentsPage: {\r\n pageName: \"Des documents\",\r\n businessInfo: \"Informations sur l'entreprise et le propriétaire\",\r\n connectBank: \"Connectez votre compte bancaire\",\r\n doneButtonText: \"Fini\",\r\n mainTitle: \"Vous voulez être approuvé plus rapidement?\",\r\n secondaryTitle:\r\n \"Remplissez la liste de contrôle ci-dessous pour finaliser votre demande\",\r\n startButtonText: \"Début\",\r\n completedButtonText: \"Complété\",\r\n termsAndConditions: \"Accepter les termes et conditions\",\r\n uploadButtonText: \"Télécharger\",\r\n requestedButtonText: \"Commencer\",\r\n submitButtonText: \"Soumettre ma demande!\",\r\n continueButtonText: \"Continuez\",\r\n actionBusinessInformation:\r\n \"Veuillez nous fournir les informations générales sur votre entreprise\",\r\n actionTermsAndConditions: \"Veuillez consulter nos termes et conditions\",\r\n actionConnectBank:\r\n \"Veuillez connecter votre compte bancaire pour bénéficier de nos meilleures offres!\",\r\n actionContinueConnectingBank:\r\n \"Continuez à connecter votre banque ou téléchargez vos relevés bancaires récents\",\r\n actionBankConnectedText: \"Votre banque était connectée, merci!\",\r\n actionPaperStatements:\r\n \"Il nous faut plus de temps pour examiner les PDF ou les relevés bancaires numérisés, connectez votre compte bancaire d'entreprise maintenant pour obtenir une approbation plus rapidement!\",\r\n actionBankNotListed:\r\n \"Etes-vous sûr que votre banque ne figure pas dans la liste? Vérifiez à nouveau pour actualiser la liste des banques et coopératives de crédit qui peuvent être connectées!\",\r\n tcAgree: \"J'accepte\",\r\n tcCancel: \"Annuler\",\r\n dzChooseFilesText:\r\n \"Veuillez télécharger votre $itemName en faisant glisser les fichiers dans la case ci-dessous ou en cliquant dessus\",\r\n dzUploadFilesText: \"Choisir les fichiers\",\r\n dzDropFilesToUploadText: \"Déposer des fichiers ici pour télécharger\",\r\n dzFilesUploadedText:\r\n \"Les fichiers ont été téléchargés. Merci! Veuillez cliquer sur Terminer pour continuer.\",\r\n dzFinishText: \"Terminer\",\r\n dzFilesSelected: \"fichier(s) ont été sélectionnés\",\r\n dzTapToUploadText: \"Télécharger\",\r\n dzThankYou: \"Merci!\",\r\n dzFilesWereUploadedText: \"fichier(s) ont été téléchargés\",\r\n dzTapFinishToContinueText: \"Veuillez appuyer sur Terminer pour continuer\",\r\n dzUploadMorePart1Text: \"ou appuyez\",\r\n dzUploadMorePart2Text: \"ici\",\r\n dzUploadMorePart3Text: \"pour télécharger plus\",\r\n dzProcessingFiles: \"Traitement des fichiers\",\r\n dzPleaseUploadYour: \"Veuillez télécharger votre\",\r\n ufUploadLaterText: \"Télécharger plus tard\",\r\n ufUploadText: \"Télécharger\",\r\n ufUploadSelected: \"Télécharger la sélection\",\r\n ufUploadFinish: \"Terminer\",\r\n },\r\n};\r\n\r\nexport type Translation = {\r\n loading: {\r\n mainMessage: string;\r\n description: string;\r\n };\r\n initialPage: {\r\n description: string;\r\n pageName: string;\r\n greetingPrimary: string;\r\n greetingSecondary: string;\r\n greetingSecondaryEcommerce: string;\r\n firstName: string;\r\n firstNameInvalid: string;\r\n lastName: string;\r\n lastNameInvalid: string;\r\n email: string;\r\n emailInvalid: string;\r\n emailInvalidFormat: string;\r\n businessName: string;\r\n businessNameInvalid: string;\r\n mobilePhone: string;\r\n mobilePhoneInvalid: string;\r\n submit: string;\r\n items: string[];\r\n items_ecommerce: string[];\r\n testimonialText: string;\r\n testimonialAuthor: string;\r\n bottomTextEcommerceParagraph: string;\r\n bottomTextFirstParagraph: string;\r\n bottomTextSecondParagraph: string;\r\n address: string;\r\n callUs: string;\r\n emailUs: string;\r\n trustedByCanadians: string;\r\n protectedBy: string;\r\n referenceSource: string;\r\n referenceSourceDropdown: {\r\n google: string;\r\n direct: string;\r\n tv: string;\r\n facebook: string;\r\n banner: string;\r\n youtube: string;\r\n friend: string;\r\n referral: string;\r\n yourAccountant: string;\r\n other: string;\r\n }\r\n };\r\n applicationPage: {\r\n pageName: string;\r\n stepper: {\r\n minutesFromFinish: string;\r\n start: string;\r\n back: string;\r\n continue: string;\r\n submit: string;\r\n submitMobile: string;\r\n };\r\n industryStep: {\r\n mainTitle: string;\r\n industry: string;\r\n industryPlaceholder: string;\r\n };\r\n requestedAmountStep: {\r\n mainTitle: string;\r\n secondaryTitle: string;\r\n };\r\n annualRevenueStep: {\r\n mainTitle: string;\r\n secondaryTitle: string;\r\n selectRange: string;\r\n range0_250: string;\r\n range250_500: string;\r\n range500_1: string;\r\n range1_2: string;\r\n range2_3: string;\r\n range3: string;\r\n };\r\n annualRevenueRangeStep: {\r\n mainTitle: string;\r\n range: string;\r\n rangePerYear: string;\r\n rangeSpecific: string;\r\n };\r\n yearsInBusinessRangeStep: {\r\n mainTitle: string;\r\n secondaryTitle: string;\r\n selectRange: string;\r\n range_1: string;\r\n range_2: string;\r\n range_3: string;\r\n };\r\n yearsInBusinessStep: {\r\n mainTitle: string;\r\n howManyYears: string;\r\n howManyMonths: string;\r\n year: string;\r\n years: string;\r\n month: string;\r\n months: string;\r\n };\r\n businessAddressStep: {\r\n mainTitle: string;\r\n businessAddress: string;\r\n addressPlaceHolder: string;\r\n };\r\n homeAddressStep: {\r\n mainTitle: string;\r\n homeAddress: string;\r\n addressPlaceHolder: string;\r\n skipBusinessAddress: string;\r\n };\r\n addresses: {\r\n manualEntry: string;\r\n lookupAddress: string;\r\n addressSelected: string;\r\n changeMyAddress: string;\r\n selectProvince: string;\r\n street: string;\r\n city: string;\r\n province: string;\r\n postalCode: string;\r\n streetInvalid: string;\r\n cityInvalid: string;\r\n provinceInvalid: string;\r\n postalCodeInvalid: string;\r\n provinceNames: {\r\n alberta: string;\r\n bc: string;\r\n manitoba: string;\r\n nb: string;\r\n nfl: string;\r\n nwt: string;\r\n ns: string;\r\n nunavut: string;\r\n on: string;\r\n pei: string;\r\n qb: string;\r\n sc: string;\r\n yk: string;\r\n };\r\n };\r\n legalBusinessNameStep: {\r\n mainTitle: string;\r\n legalBusinessName: string;\r\n legalBusinessNamePlaceholder: string;\r\n legalBusinessNameSymbols: string;\r\n legalBusinessNameMissing: string;\r\n };\r\n termsAndConditionsStep: {\r\n mainTitle: string;\r\n agreeSwitch: string;\r\n termsLink: string;\r\n termsAndConditionsTitle: string;\r\n termsAgree: string;\r\n termsDisagree: string;\r\n };\r\n customerDetailsStep: {\r\n mainTitle: string;\r\n dateOfBirth: string;\r\n dateOfBirthPlaceholder: string;\r\n dateOfBirthTextmask: string;\r\n dobFormatInvalid: string;\r\n dobDateInvalid: string;\r\n dobDateMissing: string;\r\n dobAgeInvalid: string;\r\n mobilePhone: string;\r\n mobilePhonePlaceholder: string;\r\n mobilePhoneInvalid: string;\r\n mobilePhoneMissing: string;\r\n };\r\n };\r\n bankingPage: {\r\n pageName: string;\r\n mainTitle: string;\r\n returningCustomerNote: string;\r\n secondaryTitle: string;\r\n protectedBy: string;\r\n proceedButton: string;\r\n proceedText: string;\r\n proceedTitle: string;\r\n proceedContinue: string;\r\n proceedCancel: string;\r\n flinksLoadingMessage: string;\r\n notListed: string;\r\n };\r\n documentsPage: {\r\n pageName: string;\r\n mainTitle: string;\r\n secondaryTitle: string;\r\n businessInfo: string;\r\n termsAndConditions: string;\r\n connectBank: string;\r\n startButtonText: string;\r\n doneButtonText: string;\r\n uploadButtonText: string;\r\n completedButtonText: string;\r\n continueButtonText: string;\r\n requestedButtonText: string;\r\n submitButtonText: string;\r\n actionBusinessInformation: string;\r\n actionTermsAndConditions: string;\r\n actionConnectBank: string;\r\n actionContinueConnectingBank: string;\r\n actionBankConnectedText: string;\r\n actionPaperStatements: string;\r\n actionBankNotListed: string;\r\n tcAgree: string;\r\n tcCancel: string;\r\n dzChooseFilesText: string;\r\n dzUploadFilesText: string;\r\n dzDropFilesToUploadText: string;\r\n dzFilesUploadedText: string;\r\n dzFinishText: string;\r\n dzFilesSelected: string;\r\n dzTapToUploadText: string;\r\n dzThankYou: string;\r\n dzFilesWereUploadedText: string;\r\n dzTapFinishToContinueText: string;\r\n dzUploadMorePart1Text: string;\r\n dzUploadMorePart2Text: string;\r\n dzUploadMorePart3Text: string;\r\n dzProcessingFiles: string;\r\n dzPleaseUploadYour: string;\r\n ufUploadLaterText: string;\r\n ufUploadText: string;\r\n ufUploadSelected: string;\r\n ufUploadFinish: string;\r\n };\r\n finishPage: {\r\n pageName: string;\r\n mainTitle: string;\r\n secondaryTitle: string;\r\n };\r\n};\r\n","import { createStore, Store } from 'redux';\r\nimport { create } from 'redux-react-hook';\r\nimport reducer from './Reducer';\r\nimport StepperConfig from '../configuration/StepperConfig';\r\nimport { AppState } from '../configuration/AppConfig';\r\n\r\n\r\n\r\nexport type AddressInput = {\r\n street: string,\r\n postalCode: string,\r\n province: string,\r\n city: string,\r\n country: string\r\n}\r\n\r\nexport interface StepperPageTransferData extends StepperPageInput {\r\n type: string,\r\n applicationId: string\r\n};\r\n\r\nexport interface BankingStatusUpdate {\r\n type: string,\r\n applicationId: string;\r\n bankingStatus: string;\r\n bankingInstitution: string;\r\n};\r\n\r\nexport interface BankingLoginAndAccountUpdate {\r\n applicationId: string;\r\n loginId: string;\r\n selectedFlinksAccount: string;\r\n institution: string;\r\n};\r\n\r\n\r\n\r\nexport interface BankingOutcomeData {\r\n type: string,\r\n bankingOutcome: string,\r\n applicationId: string,\r\n recaptchaResponse: string\r\n}\r\n\r\nexport type RemainingItem = {\r\n externalId: string,\r\n itemName: string,\r\n description: string,\r\n status: string\r\n}\r\n\r\nexport type PartnerRequest = {\r\n partnerId: string;\r\n type: string;\r\n}\r\n\r\nexport type PartnerDetailsRequest = {\r\n applicationId: string;\r\n type: string;\r\n}\r\n\r\nexport type PartnerResponse = {\r\n companyName: string,\r\n logoUrl: string,\r\n logoMobileUrl: string,\r\n faviconUrl: string,\r\n primaryColor: string,\r\n buttonColor: string,\r\n inverseTitleColor: string,\r\n formattedAddress: string,\r\n phone: string,\r\n email: string,\r\n website: string,\r\n whiteLabel: boolean,\r\n useColourMobileLogo: boolean,\r\n useEmail: boolean,\r\n useLandingPage: boolean,\r\n testimonalText: string,\r\n testimonalTextFr: string,\r\n testimonialAuthor: string,\r\n testimonialAuthorFr: string,\r\n testimonialImage: string,\r\n companyTextFirstParagraph: string,\r\n companyTextFirstParagraphFr: string,\r\n companyTextSecondParagraph: string,\r\n companyTextSecondParagraphFr: string,\r\n companyImage: string,\r\n specificIndustry: string,\r\n specificSubIndustry: string,\r\n}\r\n\r\nexport type InitialPageInput = {\r\n firstName: string,\r\n lastName: string,\r\n email: string,\r\n businessName: string,\r\n phoneNumber: string,\r\n utmSource?: string | string[] | null,\r\n utmMedium?: string | string[] | null,\r\n utmCampaign?: string | string[] | null,\r\n utmTerm?: string | string[] | null,\r\n utmContent?: string | string[] | null,\r\n userId?: string | string[] | null,\r\n companyName?: string | string[] | null, \r\n googleClickId?: string | string[] | null,\r\n googleAnalyticsId?: string | null,\r\n partnerExternalId?: string | string[] | null,\r\n externalId?: string | string[] | null,\r\n referenceSource?: string | null,\r\n}\r\n\r\nexport type StepperPageInput = {\r\n homeAddress: string;\r\n businessAddress: string;\r\n industry: string;\r\n subIndustry: string;\r\n dateOfBirth: string;\r\n approximateAnnualRevenue: number | null;\r\n approximateAnnualRevenueRange: string;\r\n requestedAmount: number | null;\r\n yearsInBusiness: number | null;\r\n monthsInBusiness: number | null;\r\n yearsInBusinessRange: string;\r\n phoneNumber: string;\r\n legalBusinessName: string;\r\n consent: boolean;\r\n};\r\n\r\nexport interface InitialPageTransferData extends InitialPageInput {\r\n type: string,\r\n language: string\r\n}\r\n\r\nexport interface GetTransferData {\r\n type: string,\r\n applicationId: string\r\n}\r\n\r\nexport interface AddressLookupTransferData {\r\n query: string\r\n}\r\n\r\nexport type Input = StepperPageInput & InitialPageInput\r\n\r\nexport type FileInputTransferData = {\r\n file: any;\r\n type: string;\r\n applicationId: string;\r\n remainingItemExternalId: string;\r\n recaptchaResponse: string;\r\n}\r\n\r\n\r\nexport interface IState {\r\n applicationId: string;\r\n pageIndex: number;\r\n applicationState: AppState;\r\n bankAuthorized: boolean;\r\n bankInProcess: boolean;\r\n input: Input;\r\n documents: RemainingItem[];\r\n}\r\n\r\nexport enum ActionType {\r\n CHANGE_PAGE = 'change_page',\r\n CHANGE_APP_STATE = 'change_state',\r\n CHANGE_INPUT = 'change_input',\r\n CHANGE_INPUT_ALL = 'change_input_all',\r\n CHANGE_BANK_AUTH = 'change_bank_auth',\r\n CHANGE_ALLOWED_TO_PROCEED = 'change_allowed_to_proceed',\r\n CHANGE_DOCUMENT_DETAILS = 'change_doc_details',\r\n CHANGE_DOCUMENTS = 'change_docs',\r\n}\r\n\r\nexport type IAction =\r\n | {\r\n type: ActionType,\r\n value: any,\r\n propertyName?: string\r\n index?: number\r\n };\r\n\r\nexport type Page = {\r\n title: string\r\n}\r\n\r\nexport const { StoreContext, useDispatch, useMappedState } = create>();\r\n\r\nexport function makeStore(): Store {\r\n return createStore(reducer, INITIAL_STATE);\r\n}\r\n\r\nexport const INITIAL_STATE: IState = StepperConfig();","import { AppState } from \"../configuration/AppConfig\";\r\nimport { Input, IState } from \"../store/Store\";\r\nimport { HelperFunctions } from \"../utils/HelperFunctions\";\r\n\r\nexport default function StepperConfig(): IState {\r\n return {\r\n applicationId: \"\",\r\n pageIndex: 1,\r\n applicationState: AppState.LOADING,\r\n input: {\r\n firstName: \"\",\r\n lastName: \"\",\r\n dateOfBirth: \"\",\r\n requestedAmount: null,\r\n approximateAnnualRevenue: null,\r\n approximateAnnualRevenueRange: \"\",\r\n yearsInBusiness: null,\r\n monthsInBusiness: null,\r\n yearsInBusinessRange: \"\",\r\n phoneNumber: \"\",\r\n email: \"\",\r\n businessName: \"\",\r\n homeAddress: \"\",\r\n businessAddress: \"\",\r\n industry: \"\",\r\n subIndustry: \"\",\r\n legalBusinessName: \"\",\r\n consent: false,\r\n },\r\n bankAuthorized: false,\r\n bankInProcess: false,\r\n documents: [],\r\n };\r\n}\r\n\r\nexport function validateStepInput(input: Input, stepName: string): boolean {\r\n switch (stepName) {\r\n case \"industry\":\r\n return input.industry !== \"\" && input.subIndustry !== \"\";\r\n case \"revenue_range\":\r\n return input.approximateAnnualRevenueRange !== \"\";\r\n case \"revenue\":\r\n return (\r\n input.approximateAnnualRevenue !== null &&\r\n input.approximateAnnualRevenue > 0\r\n );\r\n case \"amount\":\r\n return (\r\n input.requestedAmount !== null &&\r\n input.requestedAmount >= 5000 &&\r\n input.requestedAmount <= 500000\r\n );\r\n case \"business_name\":\r\n return (\r\n input.legalBusinessName != null &&\r\n input.legalBusinessName !== \"\" &&\r\n input.legalBusinessName.length > 3\r\n );\r\n case \"years_range\":\r\n return (\r\n input.yearsInBusinessRange != null && input.yearsInBusinessRange != \"\"\r\n );\r\n case \"years\":\r\n return (\r\n (input.yearsInBusiness != null && input.yearsInBusiness > 0) ||\r\n (input.monthsInBusiness != null && input.monthsInBusiness > 0)\r\n );\r\n case \"personal_details\":\r\n return (\r\n input.dateOfBirth != null &&\r\n input.dateOfBirth != \"\" &&\r\n HelperFunctions.dateIsValid(input.dateOfBirth) &&\r\n HelperFunctions.getAgeFromDateOfBirth(input.dateOfBirth) >= 18 &&\r\n HelperFunctions.getAgeFromDateOfBirth(input.dateOfBirth) <= 99 &&\r\n input.phoneNumber != null &&\r\n input.phoneNumber !== \"\" &&\r\n HelperFunctions.phoneIsValid(input.phoneNumber)\r\n );\r\n case \"home_addr\":\r\n case \"home_and_business_addr\": \r\n return input.homeAddress != null && input.homeAddress != \"\";\r\n case \"business_addr\":\r\n return input.businessAddress != null && input.businessAddress != \"\";\r\n case \"terms\":\r\n return true;\r\n default:\r\n throw new Error(`Unknown step: ${stepName}`);\r\n }\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport Autosuggest from \"react-autosuggest\";\r\nimport \"./AutoSuggestLookup.css\";\r\nimport { isMobile } from \"react-device-detect\";\r\nimport { Styles } from \"../configuration/AppConfig\";\r\n\r\nexport default function AutoSuggestLookup(props: AutoSuggestLookup) {\r\n function getSuggestionValue(suggestion: { label: string, name: string }) {\r\n return suggestion.label ?? suggestion.name;\r\n }\r\n\r\n function renderSuggestion(suggestion: { name: string; label: string }) {\r\n return {suggestion.label ?? suggestion.name};\r\n }\r\n\r\n function renderSectionTitle(section: { industry: string; label: string }) {\r\n return (\r\n

\r\n {section.label ?? section.industry}\r\n

\r\n );\r\n }\r\n\r\n function getSectionSuggestions(section: any) {\r\n return section.subIndustries;\r\n }\r\n\r\n const [value, setValue] = useState(props.value);\r\n const [suggestions, setSuggestions] = useState>([]);\r\n\r\n useEffect(() => {\r\n setValue(props.value);\r\n }, [props.value]);\r\n\r\n function onChange(event: any, { newValue, method }: any) {\r\n setValue(newValue);\r\n if (props.changeCallback) props.changeCallback();\r\n }\r\n\r\n function onFocus(event: any) {\r\n setSuggestions(props.getSuggestions(value));\r\n }\r\n\r\n function onSuggestionsFetchRequested(params: {\r\n value: string;\r\n reason: string;\r\n }) {\r\n setSuggestions(props.getSuggestions(params.value));\r\n }\r\n\r\n function onSuggestionsClearRequested() {\r\n setSuggestions([]);\r\n }\r\n\r\n function onSuggestionSelected(\r\n event: any,\r\n { suggestion, suggestionValue, suggestionIndex, sectionIndex, method }: any\r\n ) {\r\n if (props.selectedCallback)\r\n props.selectedCallback(suggestionValue, suggestion);\r\n }\r\n\r\n function shouldRenderSuggestions(value: any) {\r\n return true;\r\n }\r\n\r\n // let lookupClassName = \"form-control-\" + (isMobile ? \"md\" : \"lg\");\r\n let lookupClassName = \"form-control-lg\";\r\n\r\n const inputProps = {\r\n placeholder: props.placeholder,\r\n value,\r\n onChange: onChange,\r\n className: `${lookupClassName} form-control`,\r\n onFocus: onFocus,\r\n };\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\ntype AutoSuggestLookup = {\r\n placeholder: string;\r\n value: string;\r\n getSuggestions(suggestion: string): Array;\r\n selectedCallback?(suggestionValue: string, sectionIndex: number): void;\r\n changeCallback?(): void;\r\n clickCallback?(): void;\r\n};\r\n","import React from \"react\";\r\nimport { useMappedState, useDispatch, ActionType } from \"../../store/Store\";\r\nimport { useCallback } from \"react\";\r\nimport { FormGroup, Row, Col, Label } from \"reactstrap\";\r\nimport { LocalSettings, Styles } from \"../../configuration/AppConfig\";\r\nimport AutoSuggestLookup from \"../AutoSuggestLookup\";\r\nimport { HelperFunctions } from \"../../utils/HelperFunctions\";\r\n\r\nexport default function StepIndustry() {\r\n const data = useStepIndustry();\r\n const dispatch = useDispatch();\r\n\r\n const industryStepTranslation =\r\n LocalSettings.translation.applicationPage.industryStep;\r\n\r\n let industries: Array;\r\n let selectedSubIndustryValue: string = \"\";\r\n switch (LocalSettings.language) {\r\n case \"en\":\r\n industries = getIndustriesList();\r\n break;\r\n case \"fr\":\r\n industries = getFrenchIndustriesList();\r\n break;\r\n default:\r\n throw new Error(\"Unknown language!\");\r\n }\r\n\r\n if (LocalSettings.defaultIndustry !== null) {\r\n industries = industries.filter(\r\n (i) => i.industry === LocalSettings.defaultIndustry\r\n );\r\n }\r\n\r\n if (data.subIndustry !== \"\") {\r\n const selectedIndustry = getConcreteIndustryFromSuggestion(\r\n industries,\r\n undefined,\r\n data.subIndustry\r\n );\r\n selectedSubIndustryValue =\r\n selectedIndustry.subIndustry.label ?? selectedIndustry.subIndustry.name;\r\n } else {\r\n selectedSubIndustryValue = \"\";\r\n }\r\n\r\n return (\r\n
\r\n \r\n {industryStepTranslation.mainTitle}\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {\r\n const ret = getConcreteIndustryFromSuggestion(\r\n industries,\r\n suggestion.code\r\n );\r\n data.handleChangeManual(\r\n \"industry\",\r\n ret.industryCategory?.industry\r\n );\r\n data.handleChangeManual(\"subIndustry\", ret.subIndustry?.name);\r\n }}\r\n changeCallback={() => {\r\n data.handleChangeManual(\"industry\", \"\");\r\n data.handleChangeManual(\"subIndustry\", \"\");\r\n }}\r\n >\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n\r\n function getConcreteIndustryFromSuggestion(\r\n industries: Array,\r\n code?: number,\r\n name?: string\r\n ): {\r\n industryCategory: Industry;\r\n subIndustry: SubIndustry;\r\n } {\r\n const industryCategory = industries.find(\r\n (i: Industry) =>\r\n i.subIndustries.find(\r\n (si: SubIndustry) => si.code === code || si.name === name\r\n ) !== undefined\r\n );\r\n\r\n if (!industryCategory) {\r\n throw new Error(\"Can't find industry!\");\r\n }\r\n\r\n const subIndustry = industryCategory?.subIndustries.find(\r\n (si: SubIndustry) => si.code === code || si.name === name\r\n );\r\n\r\n if (!subIndustry) {\r\n throw new Error(\"Can't find subindustry!\");\r\n }\r\n\r\n return {\r\n industryCategory,\r\n subIndustry,\r\n };\r\n }\r\n\r\n function escapeRegexCharacters(str: string) {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n }\r\n\r\n function getIndustrySuggestions(value: string) {\r\n const escapedValue = escapeRegexCharacters(value.trim());\r\n\r\n if (escapedValue === \"\") {\r\n return industries;\r\n }\r\n\r\n const valueForRegex = HelperFunctions.removeDiacritics(escapedValue);\r\n const regex = new RegExp(valueForRegex, \"i\");\r\n\r\n let filteredIndustries = industries\r\n .map((section) => {\r\n return {\r\n industry: section.label ?? section.industry,\r\n subIndustries: section.subIndustries.filter(\r\n (subIndustry: SubIndustry) => {\r\n for (let i = 0; i < subIndustry.keywords.length; i++) {\r\n const keyword = subIndustry.keywords[i];\r\n if (regex.test(keyword)) return true;\r\n }\r\n const subIndustryNameWithoutDiacritics = HelperFunctions.removeDiacritics(\r\n subIndustry.name\r\n );\r\n let result: boolean = regex.test(\r\n subIndustryNameWithoutDiacritics\r\n );\r\n if (subIndustry.label) {\r\n const subIndustrylabelWithoutDiacritics = HelperFunctions.removeDiacritics(\r\n subIndustry.label\r\n );\r\n result =\r\n result || regex.test(subIndustrylabelWithoutDiacritics);\r\n }\r\n return result;\r\n }\r\n ),\r\n };\r\n })\r\n .filter((section) => section.subIndustries.length > 0);\r\n if (filteredIndustries === undefined || filteredIndustries.length === 0) {\r\n return industries.map((section) => {\r\n return {\r\n industry: section.label ?? section.industry,\r\n subIndustries: section.subIndustries.filter(\r\n (subIndustry: SubIndustry) => {\r\n if (section.industry === \"Other\") {\r\n return true;\r\n } else {\r\n return subIndustry.name === \"Other\";\r\n }\r\n }\r\n ),\r\n };\r\n });\r\n } else {\r\n return filteredIndustries;\r\n }\r\n }\r\n\r\n function useStepIndustry(): StepIndustryState {\r\n const { input } = useMappedState((state) => state);\r\n const handleChange = useCallback(\r\n (e: React.ChangeEvent) =>\r\n dispatch({\r\n type: ActionType.CHANGE_INPUT,\r\n value: e.target.value,\r\n propertyName: e.target.name,\r\n }),\r\n []\r\n );\r\n\r\n const handleChangeManual = useCallback(\r\n (propertyName: string, value: any) => {\r\n dispatch({\r\n type: ActionType.CHANGE_INPUT,\r\n value: value,\r\n propertyName: propertyName,\r\n });\r\n },\r\n []\r\n );\r\n\r\n return {\r\n industry: input.industry,\r\n subIndustry: input.subIndustry,\r\n handleChange,\r\n handleChangeManual,\r\n };\r\n }\r\n\r\n function getIndustriesList(): Array {\r\n return [\r\n {\r\n industry: \"Auto-Related\",\r\n subIndustries: [\r\n {\r\n name: \"Automotive Sales\",\r\n code: 1,\r\n keywords: [\"Car Sales, Car Dealership, Truck, Auto-Related\"],\r\n },\r\n {\r\n name: \"Motorsports Sales\",\r\n code: 2,\r\n keywords: [\r\n \"ATV, Snowmobiles, Recreational Vehicles, Boats, Auto-Related\",\r\n ],\r\n },\r\n {\r\n code: 3,\r\n name: \"Automotive Parts & Services\",\r\n keywords: [\"Car Repair, Car Parts, Auto-Related\"],\r\n },\r\n {\r\n code: 4,\r\n name: \"Car Washes & Detailing\",\r\n keywords: [\"Automotive, Painting, Auto-Related\"],\r\n },\r\n {\r\n code: 5,\r\n name: \"Other\",\r\n keywords: [\"Auto-Related\"],\r\n },\r\n ],\r\n },\r\n {\r\n industry: \"Food - Beverage\",\r\n subIndustries: [\r\n {\r\n code: 6,\r\n name: \"Bars & Lounges\",\r\n keywords: [\"Tavern\", \"Club\", \"Food\", \"Food - Beverage\"],\r\n },\r\n {\r\n code: 7,\r\n name: \"Casual Dining\",\r\n keywords: [\r\n \"Restaurant\",\r\n \"Fast Food\",\r\n \"Chain\",\r\n \"Drive Through\",\r\n \"Franchise\",\r\n \"Food - Beverage\",\r\n \"Food\",\r\n ],\r\n },\r\n {\r\n code: 8,\r\n name: \"Ice Cream & Summer Restaurants\",\r\n keywords: [\r\n \"Gelato, Frozen Yogurt, Froyo, Sorbet, Ice Milk, Bubble Tea, Food - Beverage, Food\",\r\n ],\r\n },\r\n {\r\n code: 9,\r\n name: \"Deli's\",\r\n keywords: [\r\n \"Delicatessen\",\r\n \"Meat Market\",\r\n \"Meats\",\r\n \"Butcher\",\r\n \"Food - Beverage, Food\",\r\n ],\r\n },\r\n {\r\n code: 10,\r\n name: \"Food Manufacturing & Logistics\",\r\n keywords: [\r\n \"Food Processing\",\r\n \"Delivery\",\r\n \"Import\",\r\n \"Export\",\r\n \"Food - Beverage, Food\",\r\n ],\r\n },\r\n {\r\n code: 11,\r\n name: \"Grocery\",\r\n keywords: [\r\n \"supermarket, market, greengrocer, food wholesale, Food - Beverage, Food\",\r\n ],\r\n },\r\n {\r\n code: 12,\r\n name: \"Liquor Stores\",\r\n keywords: [\"Beer, Wine, Spirits, Alcohol, Food - Beverage, Food\"],\r\n },\r\n {\r\n code: 13,\r\n name: \"Cafés\",\r\n keywords: [\"Coffee\", \"Tea\", \"Coffee Shop\", \"Food - Beverage, Food\"],\r\n },\r\n {\r\n code: 14,\r\n name: \"Caterers\",\r\n keywords: [\"Catering\", \"Event Food\", \"Food - Beverage, Food\"],\r\n },\r\n {\r\n code: 15,\r\n name: \"Bakeries & Confectionery\",\r\n keywords: [\r\n \"Cupcakes\",\r\n \"Cake\",\r\n \"Boulangerie\",\r\n \"Dessert\",\r\n \"Food - Beverage, Food\",\r\n ],\r\n },\r\n {\r\n code: 16,\r\n name: \"Breweries, Distilleries & Wineries\",\r\n keywords: [\"Beer\", \"Wine\", \"Vineyard\", \"Food - Beverage, Food\"],\r\n },\r\n {\r\n code: 17,\r\n name: \"Food Trucks\",\r\n keywords: [\r\n \"Hotdog Stand\",\r\n \"Hamburger Stand\",\r\n \"Food - Beverage, Food\",\r\n ],\r\n },\r\n {\r\n code: 18,\r\n name: \"Full-Service Restaurants\",\r\n keywords: [\r\n \"Diner\",\r\n \"Terrace\",\r\n \"Served Food\",\r\n \"Brasserie\",\r\n \"Cafeteria\",\r\n \"Canteen\",\r\n \"Grill\",\r\n \"Joint\",\r\n \"Food - Beverage, Food\",\r\n ],\r\n },\r\n {\r\n code: 19,\r\n name: \"High-End Restaurants\",\r\n keywords: [\"Fine dining\", \"Food - Beverage, Food\"],\r\n },\r\n {\r\n code: 20,\r\n name: \"Convenience Stores\",\r\n keywords: [\r\n \"Corner Store\",\r\n \"24 Hour Convenience Shop\",\r\n \"Food - Beverage, Food\",\r\n ],\r\n },\r\n {\r\n code: 21,\r\n name: \"Other\",\r\n keywords: [\"Food - Beverage\"],\r\n },\r\n ],\r\n },\r\n {\r\n industry: \"Health\",\r\n subIndustries: [\r\n {\r\n code: 22,\r\n name: \"Dental\",\r\n keywords: [\"Dentist, Orthodontist,Health\"],\r\n },\r\n {\r\n code: 23,\r\n name: \"Doctors\",\r\n keywords: [\"GP, General Practitioner,Health\"],\r\n },\r\n {\r\n code: 24,\r\n name: \"Paramedical\",\r\n keywords: [\r\n \"Chriopractor, Home Health Care, Mental Health Practitioner, Therapist, Psychologist, Counselor, Optometrist, Eye Doctor, Massage Therapists, RMT, Physiotherapists, Osteopath, Dietitian, Accupuncture, Naturopathist, Health\",\r\n ],\r\n },\r\n {\r\n code: 25,\r\n name: \"Seniors Homes\",\r\n keywords: [\r\n \"Assisted Living, Long-term Care Facility, Retirement Home, Health\",\r\n ],\r\n },\r\n {\r\n code: 26,\r\n name: \"Other\",\r\n keywords: [\"Health\"],\r\n },\r\n ],\r\n },\r\n {\r\n industry: \"Hair & Beauty\",\r\n subIndustries: [\r\n {\r\n code: 27,\r\n name: \"Hair / Beauty Salons and Barbers\",\r\n keywords: [\r\n \"Nail Salon, Hairdresser, Beauty Parlour, Dyeing, Manicure, Pedicure, Hair & Beauty\",\r\n ],\r\n },\r\n {\r\n code: 28,\r\n name: \"Beauty Supplies\",\r\n keywords: [\"Cosmetics, Perfume, Health, Hair & Beauty\"],\r\n },\r\n {\r\n code: 29,\r\n name: \"Spas\",\r\n keywords: [\"Massage, Beauty, Wellness, Hair & Beauty\"],\r\n },\r\n {\r\n code: 30,\r\n name: \"Tattoo Parlours\",\r\n keywords: [\"Piercing, body art, Hair & Beauty\"],\r\n },\r\n {\r\n code: 31,\r\n name: \"Other\",\r\n keywords: [\"Hair & Beauty\"],\r\n },\r\n ],\r\n },\r\n {\r\n industry: \"Recreation\",\r\n subIndustries: [\r\n {\r\n code: 32,\r\n name: \"Fitness Centres & Gyms\",\r\n keywords: [\r\n \"Yoga, Pilates, Swimming Pool, Indoor Cycling, Weight Training, Cardio Facilities, Recreation\",\r\n ],\r\n },\r\n {\r\n code: 33,\r\n name: \"Dance & Martial Arts Studios\",\r\n keywords: [\"MMA, Zumba, Karate, Kickboxing, Recreation\"],\r\n },\r\n {\r\n code: 34,\r\n name: \"Indoor Recreation Sites\",\r\n keywords: [\"Arcade, Museum, Bowling Alley, Leisure, Recreation\"],\r\n },\r\n {\r\n code: 35,\r\n name: \"Hotels & Lodging\",\r\n keywords: [\"Cabin Rental, Bed & Breakfast, B&B, Recreation\"],\r\n },\r\n {\r\n code: 36,\r\n name: \"Recreation Services\",\r\n keywords: [\r\n \"Tour Operator, Sightseeing Transportation, Travel Agencies, Recreation\",\r\n ],\r\n },\r\n {\r\n code: 37,\r\n name: \"Amusement Parks & Outdoor Event Venues\",\r\n keywords: [\"Theme Parks, Mini-Golf, Marinas, Recreation\"],\r\n },\r\n {\r\n code: 38,\r\n name: \"Camping & Campsites\",\r\n keywords: [\"Recreation\", \"Camping, Campsites\"],\r\n },\r\n {\r\n code: 39,\r\n name: \"Golf Courses and Country Clubs\",\r\n keywords: [\"Recreation\"],\r\n },\r\n {\r\n code: 40,\r\n name: \"Skiing Facilities\",\r\n keywords: [\"Ski Hill, Snowboard, Recreation\"],\r\n },\r\n {\r\n code: 41,\r\n name: \"Other\",\r\n keywords: [\"Recreation\"],\r\n },\r\n ],\r\n },\r\n {\r\n industry: \"Professional Services\",\r\n subIndustries: [\r\n {\r\n code: 42,\r\n name: \"Childcare Services & Daycares\",\r\n keywords: [\"Professional Services\"],\r\n },\r\n {\r\n code: 43,\r\n name: \"Laundry, Drycleaning & Linens\",\r\n keywords: [\"Laundering, Dry Cleaners\", \"Professional Services\"],\r\n },\r\n {\r\n code: 44,\r\n name: \"Marketing Services\",\r\n keywords: [\r\n \"Advertising, Online, Web Design, Digital, Graphic Design\",\r\n \"Professional Services\",\r\n ],\r\n },\r\n {\r\n code: 45,\r\n name: \"Security Guards\",\r\n keywords: [\r\n \"Security Services, Private Security\",\r\n \"Professional Services\",\r\n ],\r\n },\r\n {\r\n code: 46,\r\n name: \"Pet Services & Veterinarians\",\r\n keywords: [\r\n \"Vet, Animal Hospital, Pet Grooming, Professional Services\",\r\n ],\r\n },\r\n {\r\n code: 47,\r\n name: \"Accounting Services\",\r\n keywords: [\r\n \"Bookeeping, Payroll, Financial Planner, Professional Services\",\r\n ],\r\n },\r\n {\r\n code: 48,\r\n name: \"Legal Services\",\r\n keywords: [\r\n \"Lawyer, Law Office, Immigration Services, Notaries, Professional Services\",\r\n ],\r\n },\r\n {\r\n code: 49,\r\n name: \"Brokers, Brokerages and Agents\",\r\n keywords: [\r\n \"Mortgage, Insurance, Leasing, Real Estate, Professional Services\",\r\n ],\r\n },\r\n {\r\n code: 50,\r\n name: \"Educational Services & Schools\",\r\n keywords: [\r\n \"Instructional, Teacher, Training Programs, Professional Services\",\r\n ],\r\n },\r\n {\r\n code: 51,\r\n name: \"Janitorial & Cleaning Services\",\r\n keywords: [\"Pest Control, Maid, Professional Services\"],\r\n },\r\n {\r\n code: 52,\r\n name: \"Industrial Maintenance & Services\",\r\n keywords: [\r\n \"Aerospace, Marine, Rail, Telecommunications, Utility, Professional Services\",\r\n ],\r\n },\r\n {\r\n code: 53,\r\n name: \"Security Systems & Devices\",\r\n keywords: [\r\n \"Monitoring Services, Alarm Systems, Cameras, Professional Services\",\r\n ],\r\n },\r\n {\r\n code: 54,\r\n name: \"Professional Consulting\",\r\n keywords: [\r\n \"Management, IT, Engineering, Environmental, Interior Design, Professional Services\",\r\n ],\r\n },\r\n {\r\n code: 55,\r\n name: \"Staffing Services\",\r\n keywords: [\r\n \"Labour Organizations, Personnel, Recruiter, Recruitment, Professional Services\",\r\n ],\r\n },\r\n {\r\n code: 56,\r\n name: \"Waste Management\",\r\n keywords: [\r\n \"Garbage Collection, Recycling Services, Professional Services\",\r\n ],\r\n },\r\n {\r\n code: 57,\r\n name: \"Other\",\r\n keywords: [\"Professional Services\"],\r\n },\r\n ],\r\n },\r\n {\r\n industry: \"Transportation\",\r\n subIndustries: [\r\n {\r\n code: 58,\r\n name: \"Movers\",\r\n keywords: [\"Packers, Transportation\"],\r\n },\r\n {\r\n code: 59,\r\n name: \"Air, Rail and Water Transportation\",\r\n keywords: [\"Utilities Transportation, Cargo, Transportation\"],\r\n },\r\n {\r\n code: 60,\r\n name: \"Towing Services & Tow Trucks\",\r\n keywords: [\"Recovery, Repo, Transportation\"],\r\n },\r\n {\r\n code: 61,\r\n name: \"Couriers\",\r\n keywords: [\"Delivery, Transportation\"],\r\n },\r\n {\r\n code: 62,\r\n name: \"Trucking / Hauling / Freight / Logistics\",\r\n keywords: [\"Moving Van, Moving Truck, Transportation\"],\r\n },\r\n {\r\n code: 63,\r\n name: \"Taxis, Cabs & Limousines\",\r\n keywords: [\"Private vans, chauffeur, Transportation\"],\r\n },\r\n {\r\n code: 64,\r\n name: \"Other\",\r\n keywords: [\"Transportation\"],\r\n },\r\n ],\r\n },\r\n {\r\n industry: \"Retail\",\r\n subIndustries: [\r\n {\r\n code: 65,\r\n name: \"General & Basic Retail\",\r\n keywords: [\r\n \"Department Store, Merchandise, Household Goods, Wholesale, Retail\",\r\n ],\r\n },\r\n {\r\n code: 66,\r\n name: \"Office Supplies / Stationery\",\r\n keywords: [\r\n \"Notebooks, Pens, Paper, Clipboards, Folders, Elastic bands, Staplers, Clips, Stickies, Highlighters, Penciles, Sharpeners, Erasers, Business Essentials, Printers, Ink, Computers, Office Furniture, Retail\",\r\n ],\r\n },\r\n {\r\n code: 67,\r\n name: \"Clothing & Accessories\",\r\n keywords: [\r\n \"Jewelry, Luggage, Eyewear, Sunglasses, Shoes, Sportswear, Clothes, Retail\",\r\n ],\r\n },\r\n {\r\n code: 68,\r\n name: \"Electronics Store\",\r\n keywords: [\"Phones, Laptops, Computers, Retail\"],\r\n },\r\n {\r\n code: 69,\r\n name: \"Gas Stations\",\r\n keywords: [\"Petrol station, Pump, Retail\"],\r\n },\r\n {\r\n code: 70,\r\n name: \"Furniture & Home Furnishings\",\r\n keywords: [\r\n \"Couches, Chairs, Dressers, Beds, Lamps, Curtains, Tables, Carpets, Mirrors, TV Stands, Retail\",\r\n ],\r\n },\r\n {\r\n code: 71,\r\n name: \"Pet & Pet Supply Stores\",\r\n keywords: [\r\n \"Cat Food, Dog Food, Fish Food, Reptile Food, Bird Food, Fish Bowl, Pet Toys, Leashes, Pet Products, Pet Medicine, Retail\",\r\n ],\r\n },\r\n {\r\n code: 72,\r\n name: \"Sporting Goods\",\r\n keywords: [\r\n \"Retail, Bike, Ski, Snowboard, Running, Football, Soccer, Basball, Swimming, Hiking, Jogging, Athletics, Hockey, Basketball, Tennis, Volleyball, Badminton\",\r\n ],\r\n },\r\n {\r\n code: 73,\r\n name: \"Party Rentals and Supplies\",\r\n keywords: [\"Retail, Ballons, Theme, Gifts, Costumes\"],\r\n },\r\n {\r\n code: 74,\r\n name: \"Photographers and Photography Studios\",\r\n keywords: [\"Retail, Cameraman, Picture Studio\"],\r\n },\r\n {\r\n code: 75,\r\n name: \"Pawnshops\",\r\n keywords: [\r\n \"Retail, Pawnbroker, Antiques buyer, Artifact buyer, Valuable buyer, Trade & Loan\",\r\n ],\r\n },\r\n {\r\n code: 76,\r\n name: \"Screenprinting and Silkscreening\",\r\n keywords: [\"Retail, Ad Printing\"],\r\n },\r\n {\r\n code: 77,\r\n name:\r\n \"Toys, Comics, Hobbies, Gifts, Art Supplies, Books and Collectibles\",\r\n keywords: [\r\n \"Retail, Boardgames, Card games, Painting Supplies, Literature\",\r\n ],\r\n },\r\n {\r\n code: 78,\r\n name: \"Vapes, E-cigarettes, Cigars, Smoke Supplies\",\r\n keywords: [\r\n \"Retail, Vape, E-Juice, Tobacco, Pipe Tobacco, Nicotine, Smoking Accessories\",\r\n ],\r\n },\r\n {\r\n code: 79,\r\n name: \"Vitamins, Supplements and Health Supplies\",\r\n keywords: [\"Retail, Protien, Minerals, Wellness, Herbal, Natural\"],\r\n },\r\n {\r\n code: 80,\r\n name: \"Garden Stores / Nurseries\",\r\n keywords: [\r\n \"Retail, Plants, Garden Center, Garden Centre, Trees, Shrubs, Plants, Seeds, Bulbs and Sod\",\r\n ],\r\n },\r\n {\r\n code: 81,\r\n name: \"E-commerce Retail\",\r\n keywords: [\r\n \"Retail, Online Sales, Ticketing Services, Online Shopping\",\r\n ],\r\n },\r\n {\r\n code: 82,\r\n name: \"Computer Repair\",\r\n keywords: [\r\n \"Retail, Electronics Repair, Macs, PCs, PC, Laptops, Desktops, LCD Monitor\",\r\n ],\r\n },\r\n {\r\n code: 83,\r\n name: \"Hardware & Building Materials Retail\",\r\n keywords: [\r\n \"Retail, Building Materials, Paints, Doors, Windows, Tools,\",\r\n ],\r\n },\r\n {\r\n code: 84,\r\n name: \"Machinery & Equipment Sales\",\r\n keywords: [\"Retail, Outdoor Power Equipment\"],\r\n },\r\n {\r\n code: 85,\r\n name: \"Art Galleries\",\r\n keywords: [\"Retail, Paintings, Artwork\"],\r\n },\r\n {\r\n code: 86,\r\n name: \"Cannabis Retail & Dispensaries\",\r\n keywords: [\r\n \"Retail, Cannabis Cafe, Marijuana Shops, Weed Shops, Bongs\",\r\n ],\r\n },\r\n {\r\n code: 87,\r\n name: \"Florists\",\r\n keywords: [\r\n \"Retail, Flower Shop, Flowers, Floral, Bouquets, Floral Arrangements\",\r\n ],\r\n },\r\n {\r\n code: 88,\r\n name: \"Music & Musical Instrument Stores\",\r\n keywords: [\r\n \"Retail, Guitar, Piano, Violin, Keyboard, Bass, Drums, Cello, Recorder, Trumpet, Harp, Clarinet, Flute\",\r\n ],\r\n },\r\n {\r\n code: 89,\r\n name: \"Vending Machines\",\r\n keywords: [\"Retail, Soda, Snacks, Chips, Drinks\"],\r\n },\r\n {\r\n code: 90,\r\n name: \"Bridal Shops\",\r\n keywords: [\"Retail, Wedding Gown, Wedding Dresses\"],\r\n },\r\n {\r\n code: 91,\r\n name: \"Home Appliance Sales & Repair Services\",\r\n keywords: [\r\n \"Retail, Washing Machine, Dryer, Fridge, Refrigerator, Microwave, Dishwasher, Extractor, Stove, Coocktops, Range Hoods\",\r\n ],\r\n },\r\n {\r\n code: 92,\r\n name: \"Hunting and Fishing Supplies\",\r\n keywords: [\r\n \"Retail, Firearms, Ammunition, Handgun, Pistol, Rigle, Shotgun, Weapon, Revolver \",\r\n ],\r\n },\r\n {\r\n code: 93,\r\n name: \"Other retail to consumers\",\r\n keywords: [\"Retail\"],\r\n },\r\n {\r\n code: 94,\r\n name: \"Other retail to industrial and commercial customers\",\r\n keywords: [\"Retail\"],\r\n },\r\n {\r\n code: 95,\r\n name: \"Video / Video Game Sales and Rentals\",\r\n keywords: [\"Console, Gamings, VR, PC, Computer Games, Retail\"],\r\n },\r\n {\r\n code: 96,\r\n name: \"Winemaking & Brewing Supplies\",\r\n keywords: [\r\n \"Wine, Beer, Homebrew, Fermenting, Filtration, Racking, Retail\",\r\n ],\r\n },\r\n {\r\n code: 124,\r\n name: \"Pharmacies\",\r\n keywords: [\"Retail\", \"Pharmacies\"],\r\n },\r\n {\r\n code: 97,\r\n name: \"Other\",\r\n keywords: [\"Retail\"],\r\n },\r\n ],\r\n },\r\n {\r\n industry: \"Construction\",\r\n subIndustries: [\r\n {\r\n code: 98,\r\n name: \"Construction Trades\",\r\n keywords: [\r\n \"Drywall, Insulation, Finishing, Framing, Glazing, Masonry, Roofing, Siding, Construction\",\r\n ],\r\n },\r\n {\r\n code: 99,\r\n name: \"Flooring Sales & Maintenance\",\r\n keywords: [\"Floor, Installation, Construction\"],\r\n },\r\n {\r\n code: 100,\r\n name: \"General Construction\",\r\n keywords: [\r\n \"General Contractors, Commercial, Residential, Construction\",\r\n ],\r\n },\r\n {\r\n code: 101,\r\n name: \"Painting\",\r\n keywords: [\"Painter, Commercial, Construction\"],\r\n },\r\n {\r\n code: 102,\r\n name: \"Landscaping & Snow Removal\",\r\n keywords: [\"Gardening, Gardener, Construction\"],\r\n },\r\n {\r\n code: 103,\r\n name: \"HVAC Sales & Maintenance\",\r\n keywords: [\r\n \"Installation, Air Conditioning, Heating, Ventilation,Construction\",\r\n ],\r\n },\r\n {\r\n code: 104,\r\n name: \"Maintenance Trades\",\r\n keywords: [\r\n \"Electrician, Locksmith, Plumber, Building Inspector, Elevator Maintenance\",\r\n ],\r\n },\r\n {\r\n code: 105,\r\n name: \"Other\",\r\n keywords: [\"Construction\"],\r\n },\r\n ],\r\n },\r\n {\r\n industry: \"Other\",\r\n subIndustries: [\r\n {\r\n code: 106,\r\n name: \"Agriculture & Farming\",\r\n keywords: [\"Berry Farms, Orchards, Other\"],\r\n },\r\n {\r\n code: 107,\r\n name: \"Farm Products Retail\",\r\n keywords: [\"Animal Feed, Other\"],\r\n },\r\n {\r\n code: 108,\r\n name: \"Manufacturing\",\r\n keywords: [\r\n \"Machining, Texties, Processing, Assembly Lines, Prefabrication, Hardware, Other\",\r\n ],\r\n },\r\n {\r\n code: 109,\r\n name: \"Storage Facilities\",\r\n keywords: [\"Storage Units, Self Storage Units, Other\"],\r\n },\r\n {\r\n code: 110,\r\n name: \"Forestry\",\r\n keywords: [\"Millwork, Sawmills, Wood Preservation, Other\"],\r\n },\r\n {\r\n code: 111,\r\n name: \"Energy / Oil & Gas / Mining / Minerals Extraction\",\r\n keywords: [\"Resource Extraction, Other\"],\r\n },\r\n {\r\n code: 112,\r\n name: \"Oilfield Services\",\r\n keywords: [\r\n \"Maintenance, Processing, Storage, Gasfield, Rig, Other\",\r\n ],\r\n },\r\n {\r\n code: 113,\r\n name: \"Biotechnology and Pharmaceuticals\",\r\n keywords: [\"Medicine, medical research, Other\"],\r\n },\r\n {\r\n code: 114,\r\n name: \"Utilities & Telecommunications\",\r\n keywords: [\"Phone, Electricity, Heat, Other\"],\r\n },\r\n {\r\n code: 115,\r\n name: \"Funeral Homes / Crematoriums\",\r\n keywords: [\"Memorial Service, Other\"],\r\n },\r\n {\r\n code: 116,\r\n name:\r\n \"Commercial printing, publishing and other marketing supplies\",\r\n keywords: [\r\n \"Packaging, Labelling, Signage, Marketing Supplies, Other\",\r\n ],\r\n },\r\n {\r\n code: 117,\r\n name: \"Parking Facilities\",\r\n keywords: [\"Parking Lot, Garages, Other\"],\r\n },\r\n {\r\n code: 118,\r\n name: \"Software\",\r\n keywords: [\r\n \"Application, Video Games, Design, Development, Sales, Computer Program, Other\",\r\n ],\r\n },\r\n {\r\n code: 119,\r\n name: \"Entertainment Production\",\r\n keywords: [\r\n \"Music, Film, Theatre, Broadcasting, Events & Conference Coordinator, Other\",\r\n ],\r\n },\r\n {\r\n code: 120,\r\n name: \"Financial Services\",\r\n keywords: [\"Lending, Insurance Companies, Banks, Other\"],\r\n },\r\n {\r\n code: 121,\r\n name: \"Property Management\",\r\n keywords: [\"Rental, Commercial, Other\"],\r\n },\r\n {\r\n code: 122,\r\n name: \"Real Estate Rentals\",\r\n keywords: [\"Mortgage dealer, Other\"],\r\n },\r\n {\r\n code: 123,\r\n name: \"Property Development\",\r\n keywords: [\r\n \"Residential property developer, Housing developer, Other\",\r\n ],\r\n },\r\n ],\r\n },\r\n ];\r\n }\r\n\r\n function getFrenchIndustriesList(): Array {\r\n return [\r\n {\r\n label: \"Automobile\",\r\n industry: \"Auto-Related\",\r\n subIndustries: [\r\n {\r\n code: 1,\r\n name: \"Automotive Sales\",\r\n label: \"Ventes de véhicules automobiles\",\r\n keywords: [\r\n \"Automobile, Vente de voitures, concessionnaires de voitures, camions, activites liees a l'automobile\",\r\n ],\r\n },\r\n {\r\n code: 2,\r\n name: \"Motorsports Sales\",\r\n label: \"Ventes de sports motorisés\",\r\n keywords: [\r\n \"Automobile, VTT, motoneiges, vehicules recreatifs, bateaux, produits lies a l'automobile\",\r\n ],\r\n },\r\n {\r\n code: 3,\r\n name: \"Automotive Parts & Services\",\r\n label: \"Pièces et services automobiles\",\r\n keywords: [\r\n \"Automobile, Reparation de voitures, pieces detachees pour voitures, liees a l'automobile\",\r\n ],\r\n },\r\n {\r\n code: 4,\r\n name: \"Car Washes & Detailing\",\r\n label: \"Lavage et esthétique automobiles\",\r\n keywords: [\"Automobile, Automobile, Peinture, Lie a l'automobile\"],\r\n },\r\n {\r\n code: 5,\r\n name: \"Other\",\r\n label: \"Autres\",\r\n keywords: [\"Automobile, Activites liees a l'automobile\"],\r\n },\r\n ],\r\n },\r\n {\r\n label: \"Alimentation et boissons\",\r\n industry: \"Food - Beverage\",\r\n subIndustries: [\r\n {\r\n code: 6,\r\n name: \"Bars & Lounges\",\r\n label: \"Bars et lounges\",\r\n keywords: [\r\n \"Alimentation et boissons\",\r\n \"Taverne\",\r\n \"Club\",\r\n \"Alimentation\",\r\n \"Nourriture - Boissons\",\r\n ],\r\n },\r\n {\r\n code: 7,\r\n name: \"Casual Dining\",\r\n label: \"Restauration rapide\",\r\n keywords: [\r\n \"Alimentation et boissons\",\r\n \"Restaurant\",\r\n \"Restauration rapide\",\r\n \"Chaine\",\r\n \"Service au volant\",\r\n \"Franchise\",\r\n \"Alimentation - Boissons\",\r\n \"Alimentation\",\r\n ],\r\n },\r\n {\r\n code: 8,\r\n name: \"Ice Cream & Summer Restaurants\",\r\n label: \"Glaciers\",\r\n keywords: [\r\n \"Alimentation et boissons\",\r\n \"Gelato, Yaourt glace, Froyo, Sorbet, Lait glace, Bubble Tea, Alimentation - Boissons, Alimentation\",\r\n ],\r\n },\r\n {\r\n code: 9,\r\n name: \"Deli's\",\r\n label: \"Épicerie fine\",\r\n keywords: [\r\n \"Alimentation et boissons\",\r\n \"Delicatessen\",\r\n \"Marche de la viande\",\r\n \"Viandes\",\r\n \"Boucherie\",\r\n \"Alimentation et boissons, Alimentation\",\r\n ],\r\n },\r\n {\r\n code: 10,\r\n name: \"Food Manufacturing & Logistics\",\r\n label: \"Logistique de la fabrication alimentaire\",\r\n keywords: [\r\n \"Alimentation et boissons\",\r\n \"Traitement des aliments\",\r\n \"Livraison\",\r\n \"Importation\",\r\n \"Exportation\",\r\n \"Alimentation et boissons, Produits alimentaires\",\r\n ],\r\n },\r\n {\r\n code: 11,\r\n name: \"Grocery\",\r\n label: \"Épicerie\",\r\n keywords: [\r\n \"Alimentation et boissons\",\r\n \"supermarche, marche, primeur, commerce de gros de produits alimentaires, Produits alimentaires - Boissons, Produits alimentaires\",\r\n ],\r\n },\r\n {\r\n code: 12,\r\n name: \"Liquor Stores\",\r\n label: \"Magasins d'alcool\",\r\n keywords: [\r\n \"Alimentation et boissons\",\r\n \"Biere, Vin, Spiritueux, Alcool, Alimentation - Boissons, Alimentation\",\r\n ],\r\n },\r\n {\r\n code: 13,\r\n name: \"Cafés\",\r\n label: \"Cafés\",\r\n keywords: [\r\n \"Alimentation et boissons\",\r\n \"Cafe\",\r\n \"The\",\r\n \"Magasin de cafe\",\r\n \"Alimentation et boissons, Alimentation\",\r\n ],\r\n },\r\n {\r\n code: 14,\r\n name: \"Caterers\",\r\n label: \"Traiteurs\",\r\n keywords: [\r\n \"Alimentation et boissons\",\r\n \"Traiteur\",\r\n \"Alimentation evenementielle\",\r\n \"Alimentation et boissons, Nourriture\",\r\n ],\r\n },\r\n {\r\n code: 15,\r\n name: \"Bakeries & Confectionery\",\r\n label: \"Boulangeries et confiseries\",\r\n keywords: [\r\n \"Alimentation et boissons\",\r\n \"Cupcakes\",\r\n \"Gateau\",\r\n \"Boulangerie\",\r\n \"Dessert\",\r\n \"Alimentation et boissons, Alimentation\",\r\n ],\r\n },\r\n {\r\n code: 16,\r\n name: \"Breweries, Distilleries & Wineries\",\r\n label: \"Brasseries, distilleries et établissements vinicoles\",\r\n keywords: [\r\n \"Alimentation et boissons\",\r\n \"Biere\",\r\n \"Vin\",\r\n \"Vignoble\",\r\n \"Nourriture - Boissons, Nourriture\",\r\n ],\r\n },\r\n {\r\n code: 17,\r\n name: \"Food Trucks\",\r\n label: \"Camions de restauration\",\r\n keywords: [\r\n \"Alimentation et boissons\",\r\n \"Stand de hot-dogs\",\r\n \"Stand de hamburgers\",\r\n \"Nourriture - Boisson, Nourriture\",\r\n ],\r\n },\r\n {\r\n code: 18,\r\n name: \"Full-Service Restaurants\",\r\n label: \"Restaurants à service complet\",\r\n keywords: [\r\n \"Alimentation et boissons\",\r\n \"Diner\",\r\n \"Terrasse\",\r\n \"Nourriture servie\",\r\n \"Brasserie\",\r\n \"Cafeteria\",\r\n \"Cantine\",\r\n \"Grill\",\r\n \"Joint\",\r\n \"Alimentation - Boissons, Alimentation\",\r\n ],\r\n },\r\n {\r\n code: 19,\r\n name: \"High-End Restaurants\",\r\n label: \"Restaurants haut de gamme\",\r\n keywords: [\r\n \"Alimentation et boissons\",\r\n \"Restaurants haut de gamme\",\r\n \"Aliments - Boissons, Alimentation\",\r\n ],\r\n },\r\n {\r\n code: 20,\r\n name: \"Convenience Stores\",\r\n label: \"Dépanneurs\",\r\n keywords: [\r\n \"Alimentation et boissons\",\r\n \"Magasin du coin\",\r\n \"Depanneur 24 heures sur 24\",\r\n \"Alimentation - Boisson, Nourriture\",\r\n ],\r\n },\r\n {\r\n code: 21,\r\n name: \"Other\",\r\n label: \"Autres\",\r\n keywords: [\"Alimentation et boissons\"],\r\n },\r\n ],\r\n },\r\n {\r\n label: \"Santé\",\r\n industry: \"Health\",\r\n subIndustries: [\r\n {\r\n code: 22,\r\n name: \"Dental\",\r\n label: \"Dentaire\",\r\n keywords: [\"Sante\", \"Dentiste, Orthodontiste, Sante\"],\r\n },\r\n {\r\n code: 23,\r\n name: \"Doctors\",\r\n label: \"Médecins\",\r\n keywords: [\"Sante\", \"Medecin generaliste, Generaliste,Sante\"],\r\n },\r\n {\r\n code: 24,\r\n name: \"Paramedical\",\r\n label: \"Paramédical\",\r\n keywords: [\r\n \"Sante\",\r\n \"Chriopracteur, Soins de sante a domicile, Praticien de la sante mentale, Therapeute, Psychologue, Conseiller, Optometriste, Ophtalmologue, Massotherapeutes, RMT, Physiotherapeutes, Osteopathe, Dieteticien, Accupuncture, Naturopathe, Sante\",\r\n ],\r\n },\r\n {\r\n code: 25,\r\n name: \"Seniors Homes\",\r\n label: \"Résidences pour personnes âgées\",\r\n keywords: [\r\n \"Sante\",\r\n \"Vie assistee, Etablissement de soins de longue duree, Maison de retraite, Sante\",\r\n ],\r\n },\r\n { code: 26, name: \"Other\", label: \"Autres\", keywords: [\"Sante\"] },\r\n ],\r\n },\r\n {\r\n industry: \"Hair & Beauty\",\r\n label: \"Coiffure et beauté\",\r\n subIndustries: [\r\n {\r\n code: 27,\r\n name: \"Hair / Beauty Salons and Barbers\",\r\n label: \"Salons de coiffure / de beauté et barbiers\",\r\n keywords: [\r\n \"Coiffure et beaute\",\r\n \"Salon de manucure, coiffeur, salon de beaute, teinture, manucure, pedicure, cheveux et beaute\",\r\n ],\r\n },\r\n {\r\n code: 28,\r\n name: \"Beauty Supplies\",\r\n label: \"Fournitures de produits de beauté\",\r\n keywords: [\r\n \"Coiffure et beaute\",\r\n \"Cosmetiques, Parfums, Sante, Cheveux et Beaute\",\r\n ],\r\n },\r\n {\r\n code: 29,\r\n name: \"Spas\",\r\n label: \"Spas\",\r\n keywords: [\r\n \"Coiffure et beaute\",\r\n \"Massage, Beaute, Bien-etre, Cheveux et Beaute\",\r\n ],\r\n },\r\n {\r\n code: 30,\r\n name: \"Tattoo Parlours\",\r\n label: \"Salons de tatouage\",\r\n keywords: [\r\n \"Coiffure et beaute\",\r\n \"Piercing, art corporel, Cheveux et Beaute\",\r\n ],\r\n },\r\n {\r\n code: 31,\r\n name: \"Other\",\r\n label: \"Autres\",\r\n keywords: [\"Coiffure et beaute\"],\r\n },\r\n ],\r\n },\r\n {\r\n industry: \"Recreation\",\r\n label: \"Loisirs\",\r\n subIndustries: [\r\n {\r\n code: 32,\r\n name: \"Fitness Centres & Gyms\",\r\n label: \"Centres de conditionnement physique et gyms\",\r\n keywords: [\r\n \"Loisirs\",\r\n \"Yoga, Pilates, Piscine, Cyclisme en salle, Musculation, Installations cardio, Loisirs\",\r\n ],\r\n },\r\n {\r\n code: 33,\r\n name: \"Dance & Martial Arts Studios\",\r\n label: \"Studios de danse et d'arts martiaux\",\r\n keywords: [\"Loisirs\", \"MMA, Zumba, Karate, Kickboxing, Loisirs\"],\r\n },\r\n {\r\n code: 34,\r\n name: \"Indoor Recreation Sites\",\r\n label: \"Loisirs d’intérieurs\",\r\n keywords: [\r\n \"Loisirs\",\r\n \"Arcade, Musee, Bowling, Loisirs, Recreation\",\r\n ],\r\n },\r\n {\r\n code: 35,\r\n name: \"Hotels & Lodging\",\r\n label: \"Hôtels et hébergements\",\r\n keywords: [\r\n \"Loisirs\",\r\n \"Location de cabanes, Chambres d'hotes, B&B, Loisirs\",\r\n ],\r\n },\r\n {\r\n code: 36,\r\n name: \"Recreation Services\",\r\n label: \"Services de loisirs\",\r\n keywords: [\r\n \"Loisirs\",\r\n \"Tour-operateur, Transport touristique, Agences de voyage, Recreation\",\r\n ],\r\n },\r\n {\r\n code: 37,\r\n name: \"Amusement Parks & Outdoor Event Venues\",\r\n label: \"Parcs d'attractions et sites d'événements extérieurs\",\r\n keywords: [\r\n \"Loisirs\",\r\n \"Parcs a theme, Mini-Golf, Marinas, Recreation\",\r\n ],\r\n },\r\n {\r\n code: 38,\r\n name: \"Camping & Campsites\",\r\n label: \"Campings\",\r\n keywords: [\"Loisirs\", \"Camping, campings\"],\r\n },\r\n {\r\n code: 39,\r\n name: \"Golf Courses and Country Clubs\",\r\n label: \"Terrains de golf et country clubs\",\r\n keywords: [\"Loisirs\"],\r\n },\r\n {\r\n code: 40,\r\n name: \"Skiing Facilities\",\r\n label: \"Installations de ski\",\r\n keywords: [\"Centres de ski, Snowboard, Loisirs\"],\r\n },\r\n { code: 41, name: \"Other\", label: \"Autres\", keywords: [\"Loisirs\"] },\r\n ],\r\n },\r\n {\r\n industry: \"Professional Services\",\r\n label: \"Services professionnels\",\r\n subIndustries: [\r\n {\r\n code: 42,\r\n name: \"Childcare Services & Daycares\",\r\n label: \"Services de garde d’enfants / garderies\",\r\n keywords: [\"Services professionnels\"],\r\n },\r\n {\r\n code: 43,\r\n name: \"Laundry, Drycleaning & Linens\",\r\n label: \"Blanchisserie, nettoyage à sec et linge de maison\",\r\n keywords: [\r\n \"Blanchissage, nettoyage a sec\",\r\n \"Services professionnels\",\r\n ],\r\n },\r\n {\r\n code: 44,\r\n name: \"Marketing Services\",\r\n label: \"Services de marketing\",\r\n keywords: [\r\n \"Publicite, en ligne, conception de sites Web, numerique, conception graphique\",\r\n \"Services professionnels\",\r\n ],\r\n },\r\n {\r\n code: 45,\r\n name: \"Security Guards\",\r\n label: \"Agents de sécurité\",\r\n keywords: [\r\n \"Services de securite, Securite privee\",\r\n \"Services professionnels\",\r\n ],\r\n },\r\n {\r\n code: 46,\r\n name: \"Pet Services & Veterinarians\",\r\n label: \"Services pour animaux et vétérinaires\",\r\n keywords: [\r\n \"Veterinaire, hopital pour animaux, toilettage d'animaux, services professionnels\",\r\n ],\r\n },\r\n {\r\n code: 47,\r\n name: \"Accounting Services\",\r\n label: \"Services de comptabilité\",\r\n keywords: [\r\n \"Tenue de livres, Paie, Planificateur financier, Services professionnels\",\r\n ],\r\n },\r\n {\r\n code: 48,\r\n name: \"Legal Services\",\r\n label: \"Services juridiques\",\r\n keywords: [\r\n \"Avocat, cabinet juridique, services d'immigration, notaires, services professionnels\",\r\n ],\r\n },\r\n {\r\n code: 49,\r\n name: \"Brokers, Brokerages and Agents\",\r\n label: \"Courtiers, maisons de courtage et agents\",\r\n keywords: [\r\n \"Hypotheque, assurance, location, immobilier, services professionnels\",\r\n ],\r\n },\r\n {\r\n code: 50,\r\n name: \"Educational Services & Schools\",\r\n label: \"Services éducatifs et écoles\",\r\n keywords: [\r\n \"Programmes d'instruction, d'enseignement et de formation, services professionnels\",\r\n ],\r\n },\r\n {\r\n code: 51,\r\n name: \"Janitorial & Cleaning Services\",\r\n label: \"Services de conciergerie et de nettoyage\",\r\n keywords: [\r\n \"Lutte contre les parasites, nettoyage, services professionnels\",\r\n ],\r\n },\r\n {\r\n code: 52,\r\n name: \"Industrial Maintenance & Services\",\r\n label: \"Maintenance et services industriels\",\r\n keywords: [\r\n \"Aerospatiale, marine, ferroviaire, telecommunications, services publics, services professionnels\",\r\n ],\r\n },\r\n {\r\n code: 53,\r\n name: \"Security Systems & Devices\",\r\n label: \"Systèmes de sécurité\",\r\n keywords: [\r\n \"Services de surveillance, systemes d'alarme, cameras, services professionnels\",\r\n ],\r\n },\r\n {\r\n code: 54,\r\n name: \"Professional Consulting\",\r\n label: \"Conseillers professionnels\",\r\n keywords: [\r\n \"Gestion, informatique, ingenierie, environnement, decoration interieure, services professionnels\",\r\n ],\r\n },\r\n {\r\n code: 55,\r\n name: \"Staffing Services\",\r\n label: \"Services de recrutement\",\r\n keywords: [\r\n \"Organisations syndicales, personnel, recruteur, recrutement, services professionnels\",\r\n ],\r\n },\r\n {\r\n code: 56,\r\n name: \"Waste Management\",\r\n label: \"Gestion des déchets\",\r\n keywords: [\r\n \"Collecte des ordures, services de recyclage, services professionnels\",\r\n ],\r\n },\r\n {\r\n code: 57,\r\n name: \"Other\",\r\n label: \"Autres\",\r\n keywords: [\"Services professionnels\"],\r\n },\r\n ],\r\n },\r\n {\r\n industry: \"Transportation\",\r\n label: \"Transports\",\r\n subIndustries: [\r\n {\r\n code: 58,\r\n name: \"Movers\",\r\n label: \"Déménageurs\",\r\n keywords: [\"Emballeurs, Transports\"],\r\n },\r\n {\r\n code: 59,\r\n name: \"Air, Rail and Water Transportation\",\r\n label: \"Transport aérien, ferroviaire et maritime\",\r\n keywords: [\"Services publics Transport, Cargo, Transports\"],\r\n },\r\n {\r\n code: 60,\r\n name: \"Towing Services & Tow Trucks\",\r\n label: \"Services de remorquage\",\r\n keywords: [\"Recuperation, Repo, Transports\"],\r\n },\r\n {\r\n code: 61,\r\n name: \"Couriers\",\r\n label: \"Messageries\",\r\n keywords: [\"Livraison, Transports\"],\r\n },\r\n {\r\n code: 62,\r\n name: \"Trucking / Hauling / Freight / Logistics\",\r\n label: \"Camionnage / Fret / Logistique\",\r\n keywords: [\r\n \"Camionnette de demenagement, Camion de demenagement, Transports\",\r\n ],\r\n },\r\n {\r\n code: 63,\r\n name: \"Taxis, Cabs & Limousines\",\r\n label: \"Taxis, Cabines et Limousines\",\r\n keywords: [\"Fourgonnettes privees, chauffeur, Transports\"],\r\n },\r\n {\r\n code: 64,\r\n name: \"Other\",\r\n label: \"Autres\",\r\n keywords: [\"Transports\"],\r\n },\r\n ],\r\n },\r\n {\r\n industry: \"Retail\",\r\n label: \"Vente au détail\",\r\n subIndustries: [\r\n {\r\n code: 65,\r\n name: \"General & Basic Retail\",\r\n label: \"Commerce de détail général et de base\",\r\n keywords: [\r\n \"Vente au detail\",\r\n \"Grand magasin, marchandise, articles menagers, gros, detail\",\r\n ],\r\n },\r\n {\r\n code: 66,\r\n name: \"Office Supplies / Stationery\",\r\n label: \"Fournitures de bureau / papeterie\",\r\n keywords: [\r\n \"Vente au detail\",\r\n \"Cahiers, stylos, papier, porte-blocs, chemises, elastiques, agrafeuses, clips, autocollants, surligneurs, crayons, taille-crayons, gommes, fournitures de bureau, imprimantes, encre, ordinateurs, mobilier de bureau, vente au detail.\",\r\n ],\r\n },\r\n {\r\n code: 67,\r\n name: \"Clothing & Accessories\",\r\n label: \"Vêtements et accessoires\",\r\n keywords: [\r\n \"Vente au detail\",\r\n \"Bijoux, Bagages, Lunettes, Lunettes de soleil, Chaussures, Vetements de sport, Vetements, Vente au detail\",\r\n ],\r\n },\r\n {\r\n code: 68,\r\n name: \"Electronics Store\",\r\n label: \"Magasin d'électronique\",\r\n keywords: [\r\n \"Vente au detail\",\r\n \"Telephones, Ordinateurs portables, Ordinateurs, Vente au detail\",\r\n ],\r\n },\r\n {\r\n code: 69,\r\n name: \"Gas Stations\",\r\n label: \"Stations-service\",\r\n keywords: [\r\n \"Vente au detail\",\r\n \"Station-service, Pompe, Vente au detail\",\r\n ],\r\n },\r\n {\r\n code: 70,\r\n name: \"Furniture & Home Furnishings\",\r\n label: \"Magasin de meubles\",\r\n keywords: [\r\n \"Vente au detail\",\r\n \"Canapes, Chaises, Commodes, Lits, Lampes, Rideaux, Tables, Tapis, Miroirs, Meubles TV, Detail\",\r\n ],\r\n },\r\n {\r\n code: 71,\r\n name: \"Pet & Pet Supply Stores\",\r\n label: \"Animaleries\",\r\n keywords: [\r\n \"Vente au detail\",\r\n \"Nourriture pour chats, Nourriture pour chiens, Nourriture pour poissons, Nourriture pour reptiles, Nourriture pour oiseaux, Bols a poissons, Jouets pour animaux, Laisses, Produits pour animaux, Medicaments pour animaux, Detail\",\r\n ],\r\n },\r\n {\r\n code: 72,\r\n name: \"Sporting Goods\",\r\n label: \"Articles de sport\",\r\n keywords: [\r\n \"Vente au detail\",\r\n \"Vente au detail, Velo, Ski, Snowboard, Course, Football, Soccer, Basball, Natation, Randonnee, Jogging, Athletisme, Hockey, Basketball, Tennis, Volleyball, Badminton\",\r\n ],\r\n },\r\n {\r\n code: 73,\r\n name: \"Party Rentals and Supplies\",\r\n label: \"Location d’équipement et fournitures de fêtes\",\r\n keywords: [\"Vente au detail, Ballons, Theme, Cadeaux, Costumes\"],\r\n },\r\n {\r\n code: 74,\r\n name: \"Photographers and Photography Studios\",\r\n label: \"Photographes et studios de photographie\",\r\n keywords: [\r\n \"Vente au detail\",\r\n \"Commerce de detail, Cameraman, Studio photo\",\r\n ],\r\n },\r\n {\r\n code: 75,\r\n name: \"Pawnshops\",\r\n label: \"Prêteurs sur gage\",\r\n keywords: [\r\n \"Vente au detail\",\r\n \"Detail, Preteur sur gages, Acheteur d'antiquites, Acheteur d'artefacts, Acheteur de valeurs, Commerce et pret\",\r\n ],\r\n },\r\n {\r\n code: 76,\r\n name: \"Screenprinting and Silkscreening\",\r\n label: \"Sérigraphie\",\r\n keywords: [\r\n \"Vente au detail\",\r\n \"Commerce de detail, Impression publicitaire\",\r\n ],\r\n },\r\n {\r\n code: 77,\r\n name:\r\n \"Toys, Comics, Hobbies, Gifts, Art Supplies, Books and Collectibles\",\r\n label:\r\n \"Jouets, Bandes dessinées, Passe-temps, Cadeaux, Fournitures d'art, Livres et objets de collection\",\r\n keywords: [\r\n \"Vente au detail\",\r\n \"Vente au detail, Jeux de societe, Jeux de cartes, Fournitures de peinture, Litterature\",\r\n ],\r\n },\r\n {\r\n code: 78,\r\n name: \"Vapes, E-cigarettes, Cigars, Smoke Supplies\",\r\n label:\r\n \"Vapoteuses, cigarettes électroniques, cigares et articles pour fumeurs\",\r\n keywords: [\r\n \"Vente au detail, Vape, E-Juice, Tabac, Tabac a pipe, Nicotine, Accessoires pour fumeurs\",\r\n ],\r\n },\r\n {\r\n code: 79,\r\n name: \"Vitamins, Supplements and Health Supplies\",\r\n label: \"Vitamines, articles et suppléments pour la santé\",\r\n keywords: [\r\n \"Vente au detail, Protein, Mineraux, Bien-etre, Herbes, Naturel\",\r\n ],\r\n },\r\n {\r\n code: 80,\r\n name: \"Garden Stores / Nurseries\",\r\n label: \"Jardineries, matériel de jardin / pépinières\",\r\n keywords: [\r\n \"Vente au detail, Plantes, Jardinerie, Centre de jardinage, Arbres, Arbustes, Plantes, Semences, Bulbes et gazon.\",\r\n ],\r\n },\r\n {\r\n code: 81,\r\n name: \"E-commerce Retail\",\r\n label: \"Commerce électronique au détail\",\r\n keywords: [\r\n \"Vente au detail, Vente en ligne, Services de billetterie, Achats en ligne\",\r\n ],\r\n },\r\n {\r\n code: 82,\r\n name: \"Computer Repair\",\r\n label: \"Réparation d'ordinateurs\",\r\n keywords: [\r\n \"Vente au detail, Reparation d'appareils electroniques, Macs, PCs, PC, Ordinateurs portables, Ordinateurs de bureau, Moniteur LCD\",\r\n ],\r\n },\r\n {\r\n code: 83,\r\n name: \"Hardware & Building Materials Retail\",\r\n label: \"Quincailleries, bricolage et matériaux de construction\",\r\n keywords: [\r\n \"Vente au detail, Materiaux de construction, Peintures, Portes, Fenetres, Outils,\",\r\n ],\r\n },\r\n {\r\n code: 84,\r\n name: \"Machinery & Equipment Sales\",\r\n label: \"Ventes de machines et d'équipements\",\r\n keywords: [\"Vente au detail, Equipement d'exterieur motorise\"],\r\n },\r\n {\r\n code: 85,\r\n name: \"Art Galleries\",\r\n label: \"Galeries d'art\",\r\n keywords: [\"Vente au detail, Peintures, Oeuvres d'art\"],\r\n },\r\n {\r\n code: 86,\r\n name: \"Cannabis Retail & Dispensaries\",\r\n label: \"Dispensaires de vente au détail de cannabis\",\r\n keywords: [\r\n \"Vente au detail, Cafe de cannabis, Magasins de marijuana, Magasins d'herbe, Bongs\",\r\n ],\r\n },\r\n {\r\n code: 87,\r\n name: \"Florists\",\r\n label: \"Fleuristes\",\r\n keywords: [\r\n \"Vente au detail, Magasin de fleurs, Fleurs, Bouquets, Arrangements floraux\",\r\n ],\r\n },\r\n {\r\n code: 88,\r\n name: \"Music & Musical Instrument Stores\",\r\n label: \"Magasins de musique et d'instruments de musique\",\r\n keywords: [\r\n \"Vente au detail, Guitare, Piano, Violon, Clavier, Basse, Batterie, Violoncelle, Flute a bec, Trompette, Harpe, Clarinette, Flute traversiere\",\r\n ],\r\n },\r\n\r\n {\r\n code: 89,\r\n name: \"Vending Machines\",\r\n label: \"Distributeurs automatiques\",\r\n keywords: [\"Vente au detail, Soda, Snacks, Chips, Boissons\"],\r\n },\r\n {\r\n code: 90,\r\n name: \"Bridal Shops\",\r\n label: \"Boutiques de mariage\",\r\n keywords: [\"Vente au detail, Robe de mariage, Robes de mariage\"],\r\n },\r\n {\r\n code: 91,\r\n name: \"Home Appliance Sales & Repair Services\",\r\n label: \"Ventes et réparation d'électroménager\",\r\n keywords: [\r\n \"Vente au detail, Lave-linge, Seche-linge, Refrigerateur, Refrigerateur, Micro-ondes, Lave-vaisselle, Extracteur, Cuisiniere, Plaques de cuisson, Hottes de cuisine\",\r\n ],\r\n },\r\n {\r\n code: 92,\r\n name: \"Hunting and Fishing Supplies\",\r\n label: \"Fournitures pour la chasse et la pêche\",\r\n keywords: [\r\n \"Vente au detail d'armes a feu, de munitions, d'armes de poing, de pistolets, de fusils, de fusils de chasse, d'armes a feu et de revolvers. \",\r\n ],\r\n },\r\n {\r\n code: 93,\r\n name: \"Other retail to consumers\",\r\n label: \"Autres ventes au détail aux consommateurs\",\r\n keywords: [\"Vente au detail\"],\r\n },\r\n {\r\n code: 94,\r\n name: \"Other retail to industrial and commercial customers\",\r\n label:\r\n \"Autres ventes au détail aux clients industriels et commerciaux\",\r\n keywords: [\"Vente au detail\"],\r\n },\r\n {\r\n code: 95,\r\n name: \"Video / Video Game Sales and Rentals\",\r\n label: \"Vente et location de vidéos / jeux vidéo\",\r\n keywords: [\r\n \"Vente au detail\",\r\n \"Console, jeux video, VR, PC, jeux d'ordinateur, vente au detail\",\r\n ],\r\n },\r\n {\r\n code: 96,\r\n name: \"Winemaking & Brewing Supplies\",\r\n label: \"Fournitures de vinification et de brassage\",\r\n keywords: [\r\n \"Vente au detail\",\r\n \"Vin, biere, brassage a domicile, fermentation, filtration, soutirage, vente au detail\",\r\n ],\r\n },\r\n {\r\n code: 124,\r\n name: \"Pharmacies\",\r\n keywords: [\"Vente au detail\", \"Pharmacies\"],\r\n },\r\n {\r\n code: 97,\r\n name: \"Other\",\r\n label: \"Autres\",\r\n keywords: [\"Vente au detail\"],\r\n },\r\n ],\r\n },\r\n {\r\n industry: \"Construction\",\r\n label: \"Construction\",\r\n subIndustries: [\r\n {\r\n code: 98,\r\n name: \"Construction Trades\",\r\n label: \"Métiers de la construction\",\r\n keywords: [\r\n \"Cloison seche, isolation, finition, charpente, vitrage, maconnerie, toiture, revetement, construction\",\r\n ],\r\n },\r\n {\r\n code: 99,\r\n name: \"Flooring Sales & Maintenance\",\r\n label: \"Vente et entretien de revêtements de sol\",\r\n keywords: [\"Plancher, Installation, Construction\"],\r\n },\r\n {\r\n code: 100,\r\n name: \"General Construction\",\r\n label: \"Construction générale\",\r\n keywords: [\r\n \"Entrepreneurs generaux, commerciaux, residentiels, construction\",\r\n ],\r\n },\r\n {\r\n code: 101,\r\n name: \"Painting\",\r\n label: \"Peinture\",\r\n keywords: [\"Peintre, Commercial, Construction\"],\r\n },\r\n {\r\n code: 102,\r\n name: \"Landscaping & Snow Removal\",\r\n label: \"Aménagement paysager et déneigement\",\r\n keywords: [\"Jardinage, Jardinier, Construction\"],\r\n },\r\n {\r\n code: 103,\r\n name: \"HVAC Sales & Maintenance\",\r\n label: \"Vente et entretien de systèmes CVC\",\r\n keywords: [\r\n \"Installation, Climatisation, Chauffage, Ventilation, Construction\",\r\n ],\r\n },\r\n {\r\n code: 104,\r\n label: \"Métiers d'entretien\",\r\n name: \"Maintenance Trades\",\r\n keywords: [\r\n \"Construction\",\r\n \"Electricien, serrurier, plombier, inspecteur en batiment, entretien des ascenseurs\",\r\n ],\r\n },\r\n {\r\n code: 105,\r\n name: \"Other\",\r\n label: \"Autres\",\r\n keywords: [\"Construction\"],\r\n },\r\n ],\r\n },\r\n {\r\n industry: \"Other\",\r\n label: \"Autres Secteurs\",\r\n subIndustries: [\r\n {\r\n code: 106,\r\n name: \"Agriculture & Farming\",\r\n label: \"Agriculture et exploitation agricole\",\r\n keywords: [\"Fermes de petits fruits, vergers, Autres Secteurs\"],\r\n },\r\n {\r\n code: 107,\r\n name: \"Farm Products Retail\",\r\n label: \"Vente au détail de produits agricoles\",\r\n keywords: [\"Alimentation animale, Autres Secteurs\"],\r\n },\r\n {\r\n code: 108,\r\n name: \"Manufacturing\",\r\n label: \"Fabrication\",\r\n keywords: [\r\n \"Usinage, Textiles, Transformation, Lignes d'assemblage, Prefabrication, Quincaillerie, Autres Secteurs\",\r\n ],\r\n },\r\n {\r\n code: 109,\r\n name: \"Storage Facilities\",\r\n label: \"Installations de stockage\",\r\n keywords: [\r\n \"Unites d'entreposage, unites d'entreposage libre-service, Autres Secteurs\",\r\n ],\r\n },\r\n {\r\n code: 110,\r\n name: \"Forestry\",\r\n label: \"Foresterie\",\r\n keywords: [\r\n \"Menuiserie, scieries, preservation du bois, Autres Secteurs\",\r\n ],\r\n },\r\n {\r\n code: 111,\r\n name: \"Energy / Oil & Gas / Mining / Minerals Extraction\",\r\n label: \"Énergie / pétrole / gaz / mines / extraction de minéraux\",\r\n keywords: [\"Extraction de ressources, Autres Secteurs\"],\r\n },\r\n {\r\n code: 112,\r\n name: \"Oilfield Services\",\r\n label: \"Services pétroliers\",\r\n keywords: [\r\n \"Entretien, traitement, stockage, champs de gaz, appareils de forage, Autres Secteurs\",\r\n ],\r\n },\r\n {\r\n code: 113,\r\n name: \"Biotechnology and Pharmaceuticals\",\r\n label: \"Biotechnologie et produits pharmaceutiques\",\r\n keywords: [\"Medecine, recherche medicale, Autres Secteurs\"],\r\n },\r\n {\r\n code: 114,\r\n name: \"Utilities & Telecommunications\",\r\n label: \"Services publics et télécommunications\",\r\n keywords: [\"Telephone, electricite, chauffage, Autres Secteurs\"],\r\n },\r\n {\r\n code: 115,\r\n name: \"Funeral Homes / Crematoriums\",\r\n label: \"Pompes funèbres / Crématoriums\",\r\n keywords: [\"Service commemoratif, Autres Secteurs\"],\r\n },\r\n {\r\n code: 116,\r\n name:\r\n \"Commercial printing, publishing and other marketing supplies\",\r\n label:\r\n \"Impression commerciale, édition et autres fournitures de marketing\",\r\n keywords: [\r\n \"Emballage, etiquetage, signalisation, fournitures de marketing, Autres Secteurs\",\r\n ],\r\n },\r\n {\r\n code: 117,\r\n name: \"Parking Facilities\",\r\n label: \"Parcs de stationnement\",\r\n keywords: [\"Parc de stationnement, garages, Autres Secteurs\"],\r\n },\r\n {\r\n code: 118,\r\n name: \"Software\",\r\n label: \"Logiciels\",\r\n keywords: [\r\n \"Autres Secteurs\",\r\n \"Application, jeux video, conception, developpement, vente, programme informatique, autre\",\r\n ],\r\n },\r\n {\r\n code: 119,\r\n name: \"Entertainment Production\",\r\n label: \"Produits de divertissement\",\r\n keywords: [\r\n \"Autres Secteurs\",\r\n \"Musique, Film, Theatre, Radiodiffusion, Coordinateur d'evenements et de conferences, Autre\",\r\n ],\r\n },\r\n {\r\n code: 120,\r\n name: \"Financial Services\",\r\n label: \"Services financiers\",\r\n keywords: [\r\n \"Autres Secteurs\",\r\n \"Prets, compagnies d'assurance, banques, autres\",\r\n ],\r\n },\r\n {\r\n code: 121,\r\n name: \"Property Management\",\r\n label: \"Gestion immobilière\",\r\n keywords: [\"Autres Secteurs\", \"Location, Commercial, Autre\"],\r\n },\r\n {\r\n code: 122,\r\n name: \"Real Estate Rentals\",\r\n label: \"Location de biens immobiliers\",\r\n keywords: [\"Autres Secteurs\", \"Courtier en hypotheque, Autres\"],\r\n },\r\n {\r\n code: 123,\r\n name: \"Property Development\",\r\n label: \"Développement immobilier\",\r\n keywords: [\r\n \"Autres Secteurs\",\r\n \"Promoteur de biens residentiels, Promoteur de logements, Autre\",\r\n ],\r\n },\r\n ],\r\n },\r\n ];\r\n }\r\n}\r\n\r\ntype StepIndustryState = {\r\n industry: string;\r\n subIndustry: string;\r\n handleChange: Function;\r\n handleChangeManual: Function;\r\n};\r\n\r\ntype Industry = {\r\n industry: string;\r\n label?: string;\r\n subIndustries: Array;\r\n};\r\n\r\ntype SubIndustry = {\r\n name: string;\r\n label?: string;\r\n keywords: string[];\r\n code: number;\r\n};\r\n","import React, { ChangeEvent } from \"react\";\r\nimport { useMappedState, useDispatch, ActionType } from \"../../store/Store\";\r\nimport { useCallback } from \"react\";\r\nimport {\r\n FormGroup,\r\n Label,\r\n Input,\r\n Row,\r\n Col,\r\n Button,\r\n Container,\r\n} from \"reactstrap\";\r\nimport { LocalSettings, Styles } from \"../../configuration/AppConfig\";\r\nimport { isMobile } from \"react-device-detect\";\r\nimport { callbackify } from \"util\";\r\n\r\nconst stepStyles = {\r\n inputFeedback: {\r\n position: \"absolute\" as \"absolute\",\r\n // top: 0,\r\n left: isMobile ? 10 : 40,\r\n bottom: 0,\r\n },\r\n};\r\n\r\nexport default function StepAnnualRevenueRange(\r\n props: StepAnnualRevenueRangeProps\r\n) {\r\n const data = useStepAnnualRevenueRange();\r\n const dispatch = useDispatch();\r\n\r\n const revenueStepTranslation =\r\n LocalSettings.translation.applicationPage.annualRevenueStep;\r\n\r\n // let size: \"sm\" | \"lg\" | undefined = isMobile ? undefined : \"lg\";\r\n // let labelStyle = { fontSize: isMobile ? \"0.875rem\" : \"1rem\" };\r\n let size: \"sm\" | \"lg\" | undefined = \"lg\";\r\n\r\n return (\r\n
\r\n \r\n {revenueStepTranslation.mainTitle}\r\n \r\n
\r\n \r\n \r\n {renderRange()}\r\n \r\n \r\n
\r\n
\r\n );\r\n\r\n function renderRange() {\r\n const selectedStyle = {\r\n backgroundColor: Styles.textColorSecondary,\r\n borderColor: Styles.textColorSecondary,\r\n color: Styles.defaultColor,\r\n width: \"210px\",\r\n boxShadow: \"unset\",\r\n marginTop: \"10px\",\r\n };\r\n\r\n const unSelectedStyle = {\r\n backgroundColor: Styles.textColorPrimary,\r\n borderColor: Styles.textColorPrimary,\r\n color: Styles.defaultColor,\r\n width: \"210px\",\r\n boxShadow: \"unset\",\r\n marginTop: \"10px\",\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {\r\n raiseCallback();\r\n data.handleChangeManual(\"approximateAnnualRevenueRange\", \"1\");\r\n }}\r\n size=\"lg\"\r\n >\r\n {revenueStepTranslation.range0_250}\r\n \r\n \r\n \r\n {\r\n raiseCallback();\r\n data.handleChangeManual(\"approximateAnnualRevenueRange\", \"2\");\r\n }}\r\n size=\"lg\"\r\n >\r\n {revenueStepTranslation.range250_500}\r\n \r\n \r\n \r\n {\r\n raiseCallback();\r\n data.handleChangeManual(\"approximateAnnualRevenueRange\", \"3\");\r\n }}\r\n size=\"lg\"\r\n >\r\n {revenueStepTranslation.range500_1}\r\n \r\n \r\n \r\n {\r\n raiseCallback();\r\n data.handleChangeManual(\"approximateAnnualRevenueRange\", \"4\");\r\n }}\r\n size=\"lg\"\r\n >\r\n {revenueStepTranslation.range1_2}\r\n \r\n \r\n \r\n {\r\n raiseCallback();\r\n data.handleChangeManual(\"approximateAnnualRevenueRange\", \"5\");\r\n }}\r\n size=\"lg\"\r\n >\r\n {revenueStepTranslation.range2_3}\r\n \r\n \r\n \r\n {\r\n raiseCallback();\r\n data.handleChangeManual(\"approximateAnnualRevenueRange\", \"6\");\r\n }}\r\n size=\"lg\"\r\n >\r\n {revenueStepTranslation.range3}\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n function raiseCallback() {\r\n if (data.approximateAnnualRevenueRange == \"\") {\r\n props.callback();\r\n }\r\n }\r\n\r\n function useStepAnnualRevenueRange(): StepAnnualRevenueRangeState {\r\n const { input } = useMappedState((state) => state);\r\n const handleChangeManual = useCallback(\r\n (propertyName: string, value: any) => {\r\n dispatch({\r\n type: ActionType.CHANGE_INPUT,\r\n value: value,\r\n propertyName: propertyName,\r\n });\r\n },\r\n []\r\n );\r\n\r\n return {\r\n approximateAnnualRevenueRange: input.approximateAnnualRevenueRange,\r\n handleChangeManual,\r\n };\r\n }\r\n}\r\n\r\ntype StepAnnualRevenueRangeState = {\r\n approximateAnnualRevenueRange: string;\r\n handleChangeManual: Function;\r\n};\r\n\r\ntype StepAnnualRevenueRangeProps = {\r\n callback: () => void;\r\n};\r\n","import React, {\r\n useState,\r\n ChangeEvent,\r\n useEffect,\r\n useRef,\r\n useLayoutEffect,\r\n} from \"react\";\r\nimport { useMappedState, useDispatch, ActionType } from \"../store/Store\";\r\nimport { useCallback } from \"react\";\r\nimport { Styles } from \"../configuration/AppConfig\";\r\nimport { Form, Row, Col } from \"reactstrap\";\r\nimport Slider, { SliderProps } from \"rc-slider\";\r\nimport Tooltip from \"rc-tooltip\";\r\nimport \"rc-slider/assets/index.css\";\r\nimport \"rc-tooltip/assets/bootstrap.css\";\r\nimport { isMobile } from \"react-device-detect\";\r\n\r\n//@ts-ignore\r\nconst createSliderWithTooltip = Slider.createSliderWithTooltip;\r\n//@ts-ignore\r\nconst Handle = Slider.Handle;\r\nconst handle = (props: any) => {\r\n const { value, dragging, index, ...restProps } = props;\r\n return (\r\n // \r\n \r\n // \r\n );\r\n};\r\n\r\nconst wrapperStyle = { width: \"80%\", margin: \"auto\", marginTop: 20 };\r\nexport default function StepperSlider(props: StepperSliderProps) {\r\n const [demoValue, setDemoValue] = useState(0);\r\n const [demoIsFinished, setDemoIsFinished] = useState(false);\r\n const [direction, setDirection] = useState<\"forward\" | \"backward\">(\"forward\");\r\n const componentRef = useRef(null);\r\n\r\n useEffect(() => {\r\n if (!demoIsFinished && props.value === undefined) {\r\n let width = componentRef.current?.clientWidth || 0;\r\n let track = document.getElementsByClassName(\r\n \"rc-slider-track\"\r\n )[0] as HTMLElement;\r\n track.style.width = `${demoValue}px`;\r\n\r\n let timeout: number | undefined = undefined;\r\n switch (direction) {\r\n case \"forward\":\r\n if (demoValue < width / 2) {\r\n timeout = setTimeout(() => {\r\n setDemoValue(demoValue + 6);\r\n }, isMobile ? 15 : 2);\r\n } else {\r\n setDirection(\"backward\");\r\n }\r\n break;\r\n case \"backward\":\r\n if (demoValue > 0) {\r\n timeout = setTimeout(() => {\r\n setDemoValue(demoValue - 6);\r\n }, isMobile ? 15 : 2);\r\n } else {\r\n setDemoIsFinished(true);\r\n }\r\n break;\r\n }\r\n return () => {\r\n clearTimeout(timeout);\r\n };\r\n }\r\n }, [demoValue, demoIsFinished, direction]);\r\n\r\n return (\r\n
\r\n {\r\n props.handleChange(value);\r\n }}\r\n min={props.min}\r\n max={props.max}\r\n handle={handle}\r\n />\r\n
\r\n );\r\n}\r\n\r\nexport type StepperSliderProps = {\r\n value?: number;\r\n min: number;\r\n max: number;\r\n step?: number;\r\n marks?: any;\r\n handleChange: Function;\r\n};\r\n\r\nexport interface StepperMark {\r\n [number: number]: { style: any; label: string };\r\n}\r\n","import React, { useState, ChangeEvent } from \"react\";\r\nimport { useMappedState, useDispatch, ActionType } from \"../../store/Store\";\r\nimport { useCallback } from \"react\";\r\nimport { FormGroup, Label, Input, Row, Col } from \"reactstrap\";\r\nimport { LocalSettings, Styles } from \"../../configuration/AppConfig\";\r\nimport { isMobile } from \"react-device-detect\";\r\nimport { NumberFormatCustom } from \"../InputMasks\";\r\nimport StepperSlider, { StepperMark } from \"../StepperSlider\";\r\nimport { HelperFunctions } from \"../../utils/HelperFunctions\";\r\n\r\nconst stepStyles = {\r\n inputFeedback: {\r\n position: \"absolute\" as \"absolute\",\r\n // top: 0,\r\n left: isMobile ? 10 : 40,\r\n bottom: 0,\r\n },\r\n};\r\n\r\nexport default function StepAnnualRevenue() {\r\n const data = useStepAnnualRevenue();\r\n const dispatch = useDispatch();\r\n\r\n // let size: \"sm\" | \"lg\" | undefined = isMobile ? undefined : \"lg\";\r\n // let labelStyle = { fontSize: isMobile ? \"0.875rem\" : \"1rem\" };\r\n let size: \"sm\" | \"lg\" | undefined = \"lg\";\r\n let labelStyle = { fontSize: \"1rem\" };\r\n let [typingTimeoutAnnualRevenue, setTypingTimeoutAnnualRevenue] = useState(0);\r\n\r\n const revenueRangeStepTranslation = LocalSettings.translation.applicationPage.annualRevenueRangeStep;\r\n\r\n let marks: StepperMark = {} as StepperMark;\r\n let endAmount = 0;\r\n let beginAmount = 0;\r\n let iterativeAmount = 0;\r\n let step = 0;\r\n\r\n return (\r\n
\r\n \r\n {revenueRangeStepTranslation.mainTitle}\r\n \r\n {/* \r\n What is your approximate annual revenue?\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 {renderSlider()}\r\n\r\n {/* ) => {\r\n if (typingTimeoutAnnualRevenue > 0) {\r\n clearTimeout(typingTimeoutAnnualRevenue);\r\n }\r\n data.handleChangeManual(\r\n \"approximateAnnualRevenue\",\r\n event.target.value\r\n );\r\n let timeout = data.approxAnnualRevenueValid ? 0 : 800;\r\n setTypingTimeoutAnnualRevenue(\r\n setTimeout(() => {\r\n data.validateApproxAnnualRevenue(event.target.value);\r\n }, timeout)\r\n );\r\n }}\r\n value={data.approximateAnnualRevenue}\r\n id=\"approximateAnnualRevenue\"\r\n invalid={data.approxAnnualRevenueValid}\r\n placeholder=\"Your approximate annual revenue\"\r\n name=\"approximateAnnualRevenue\"\r\n tag={NumberFormatCustom}\r\n bsSize={size}\r\n />\r\n \r\n {(() => {\r\n if (\r\n data.approximateAnnualRevenue &&\r\n data.approximateAnnualRevenue < 80000\r\n )\r\n return \"Should not be less than $80,000\";\r\n else return \"Please enter your annual revenue\";\r\n })()}\r\n
*/}\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n\r\n function renderSlider() {\r\n const lng = LocalSettings.language;\r\n switch (data.approximateAnnualRevenueRange) {\r\n case \"1\":\r\n endAmount = 250000;\r\n step = 50000;\r\n break;\r\n case \"2\":\r\n endAmount = 500000;\r\n beginAmount = 250000;\r\n step = 50000;\r\n break;\r\n case \"3\":\r\n endAmount = 1000000;\r\n beginAmount = 500000;\r\n step = 100000;\r\n break;\r\n case \"4\":\r\n endAmount = 2000000;\r\n beginAmount = 1000000;\r\n step = 250000;\r\n break;\r\n case \"5\":\r\n endAmount = 3000000;\r\n beginAmount = 2000000;\r\n step = 250000;\r\n break;\r\n case \"6\":\r\n endAmount = 5000000;\r\n beginAmount = 3000000;\r\n step = 500000;\r\n break;\r\n }\r\n\r\n iterativeAmount = beginAmount;\r\n while (iterativeAmount <= endAmount) {\r\n let divider = 1000;\r\n let suffix = \"K\";\r\n if (iterativeAmount >= 1000000) {\r\n divider = 1000000;\r\n suffix = \"M\";\r\n }\r\n\r\n let label = lng === \"fr\" \r\n ? `${iterativeAmount?.toLocaleString(\"fr-CA\")} $` \r\n : (iterativeAmount / divider + suffix)\r\n marks[iterativeAmount] = {\r\n style: { top: 10, fontSize: \"1rem\", minWidth: \"100px\"},\r\n label: isMobile \r\n ? iterativeAmount === beginAmount || iterativeAmount === endAmount \r\n ? label \r\n : \"\" \r\n : label,\r\n };\r\n iterativeAmount += step;\r\n }\r\n\r\n return (\r\n
\r\n \r\n {data.approximateAnnualRevenue != undefined &&\r\n data.approximateAnnualRevenue > 0\r\n ? HelperFunctions.formatCurrency(data.approximateAnnualRevenue, 2, 2, LocalSettings.language) +\r\n revenueRangeStepTranslation.rangePerYear\r\n : revenueRangeStepTranslation.rangeSpecific}\r\n \r\n {\r\n data.handleChangeManual(\"approximateAnnualRevenue\", value);\r\n }}\r\n >\r\n
\r\n );\r\n }\r\n\r\n function useStepAnnualRevenue(): StepAnnualRevenueState {\r\n const { input } = useMappedState((state) => state);\r\n const handleChange = useCallback(\r\n (e: React.ChangeEvent) =>\r\n dispatch({\r\n type: ActionType.CHANGE_INPUT,\r\n value: e.target.value,\r\n propertyName: e.target.name,\r\n }),\r\n []\r\n );\r\n\r\n const handleChangeManual = useCallback(\r\n (propertyName: string, value: any) => {\r\n dispatch({\r\n type: ActionType.CHANGE_INPUT,\r\n value: value,\r\n propertyName: propertyName,\r\n });\r\n },\r\n []\r\n );\r\n\r\n const [requestedAmountValid, setRequestedAmountValid] = useState(false);\r\n const [requestedAmountBlurred, setRequestedAmountBlurred] = useState(false);\r\n const [approxAnnualRevenueValid, setApproxAnnualRevenue] = useState(false);\r\n const [\r\n approxAnnualRevenueBlurred,\r\n setApproxAnnualRevenueBlurred,\r\n ] = useState(false);\r\n\r\n function validateRequestedAmount(requestedAmount?: any) {\r\n let amount = requestedAmount || input.requestedAmount;\r\n setRequestedAmountValid(\r\n amount !== undefined && (amount < 5000 || amount > 500000)\r\n );\r\n }\r\n\r\n function validateApproxAnnualRevenue(approximateAnnualRevenue?: any) {\r\n let revenue = approximateAnnualRevenue || input.approximateAnnualRevenue;\r\n setApproxAnnualRevenue(revenue !== undefined && revenue < 80000);\r\n }\r\n\r\n return {\r\n businessName: input.businessName,\r\n approximateAnnualRevenue: input.approximateAnnualRevenue || undefined,\r\n approxAnnualRevenueValid: approxAnnualRevenueValid,\r\n approximateAnnualRevenueRange: input.approximateAnnualRevenueRange,\r\n validateApproxAnnualRevenue: validateApproxAnnualRevenue,\r\n approxAnnualRevenueBlurred: approxAnnualRevenueBlurred,\r\n setApproxAnnualRevenueBlurred: setApproxAnnualRevenueBlurred,\r\n handleChange,\r\n handleChangeManual,\r\n };\r\n }\r\n}\r\n\r\ntype StepAnnualRevenueState = {\r\n businessName: string;\r\n approximateAnnualRevenue: number | undefined;\r\n approxAnnualRevenueValid: boolean;\r\n approximateAnnualRevenueRange: string;\r\n validateApproxAnnualRevenue: Function;\r\n approxAnnualRevenueBlurred: boolean;\r\n setApproxAnnualRevenueBlurred: Function;\r\n handleChange: Function;\r\n handleChangeManual: Function;\r\n};\r\n","import React, { useState } from \"react\";\r\nimport { useMappedState, useDispatch, ActionType } from \"../../store/Store\";\r\nimport { useCallback } from \"react\";\r\nimport { FormGroup, Form, Label, Input, Col, Row } from \"reactstrap\";\r\nimport { LocalSettings, Styles } from \"../../configuration/AppConfig\";\r\nimport { isMobile } from \"react-device-detect\";\r\n\r\nconst stepStyles = {\r\n inputFeedback: {\r\n position: \"absolute\" as \"absolute\",\r\n // top: 0,\r\n // left: isMobile ? 10 : 40,\r\n bottom: 0,\r\n },\r\n};\r\n\r\nexport default function StepLegalBusinessName() {\r\n const dispatch = useDispatch();\r\n const data = useStepLegalBusinessName();\r\n\r\n const legalStepTranslation = LocalSettings.translation.applicationPage.legalBusinessNameStep;\r\n\r\n // let size: \"sm\" | \"lg\" | undefined = isMobile ? undefined : \"lg\";\r\n // let labelStyle = { fontSize: isMobile ? \"0.875rem\" : \"1rem\" };\r\n let size: \"sm\" | \"lg\" | undefined = \"lg\";\r\n let labelStyle = { fontSize: \"1rem\" };\r\n let [\r\n typingTimeoutLegalBusinessName,\r\n setTypingTimeoutLegalBusinessName,\r\n ] = useState(0);\r\n\r\n return (\r\n
\r\n \r\n {legalStepTranslation.mainTitle}\r\n \r\n {/* \r\n How should we call your business?\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 let value = event.target.value;\r\n if (typingTimeoutLegalBusinessName > 0) {\r\n clearTimeout(typingTimeoutLegalBusinessName);\r\n }\r\n data.handleChangeManual(\r\n \"legalBusinessName\",\r\n value\r\n );\r\n let timeout = data.legalBusinessNameValid ? 0 : 800;\r\n setTypingTimeoutLegalBusinessName(\r\n setTimeout(() => {\r\n data.validateLegalBusinessName(value);\r\n }, timeout)\r\n );\r\n }}\r\n value={data.legalBusinessName}\r\n id=\"legalBusinessName\"\r\n placeholder={legalStepTranslation.legalBusinessNamePlaceholder}\r\n name=\"legalBusinessName\"\r\n type=\"text\"\r\n invalid={data.legalBusinessNameValid}\r\n bsSize={size}\r\n />\r\n \r\n {(() => {\r\n if (\r\n data.legalBusinessName &&\r\n data.legalBusinessName.length <= 3\r\n )\r\n return legalStepTranslation.legalBusinessNameSymbols;\r\n else if (data.legalBusinessName === \"\")\r\n return legalStepTranslation.legalBusinessNameMissing;\r\n })()}\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n );\r\n\r\n function useStepLegalBusinessName(): StepLegalBusinessNameState {\r\n const { input } = useMappedState((state) => state);\r\n const handleChange = useCallback(\r\n (e: React.ChangeEvent) =>\r\n dispatch({\r\n type: ActionType.CHANGE_INPUT,\r\n value: e.target.value,\r\n propertyName: e.target.name,\r\n }),\r\n []\r\n );\r\n\r\n const handleChangeManual = useCallback(\r\n (propertyName: string, value: any) => {\r\n dispatch({\r\n type: ActionType.CHANGE_INPUT,\r\n value: value,\r\n propertyName: propertyName,\r\n });\r\n },\r\n []\r\n );\r\n\r\n const [legalBusinessNameValid, setLegalBusinessNameValid] = useState(false);\r\n const [legalBusinessNameBlurred, setLegalBusinessNameBlurred] = useState(false);\r\n\r\n function validateLegalBusinessName(legalBusinessName?: string) {\r\n let name = legalBusinessName || input.legalBusinessName;\r\n setLegalBusinessNameValid(name.length <= 3);\r\n }\r\n return {\r\n legalBusinessName: input.legalBusinessName,\r\n legalBusinessNameValid: legalBusinessNameValid,\r\n legalBusinessNameBlurred: legalBusinessNameBlurred,\r\n setLegalBusinessNameBlurred: setLegalBusinessNameBlurred,\r\n validateLegalBusinessName: validateLegalBusinessName,\r\n handleChange,\r\n handleChangeManual,\r\n };\r\n }\r\n}\r\n\r\ntype StepLegalBusinessNameState = {\r\n legalBusinessName: string;\r\n legalBusinessNameValid: boolean;\r\n legalBusinessNameBlurred: boolean;\r\n setLegalBusinessNameBlurred: Function;\r\n validateLegalBusinessName: Function;\r\n handleChange: Function;\r\n handleChangeManual: Function;\r\n};\r\n","import React from \"react\";\r\nimport { useMappedState, useDispatch, ActionType } from \"../../store/Store\";\r\nimport { useCallback } from \"react\";\r\nimport { FormGroup, Form, Col, Row } from \"reactstrap\";\r\nimport { LocalSettings, Styles } from \"../../configuration/AppConfig\";\r\nimport StepperSlider, { StepperMark } from \"../StepperSlider\";\r\n\r\nexport default function StepYearsInBusiness() {\r\n const dispatch = useDispatch();\r\n const data = useStepYearsInBusiness();\r\n\r\n const yibStepTranslation =\r\n LocalSettings.translation.applicationPage.yearsInBusinessStep;\r\n\r\n const marksData = getMarksData();\r\n const value = getSliderValue();\r\n\r\n return (\r\n
\r\n \r\n {yibStepTranslation.mainTitle}\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {renderHeader()}\r\n \r\n {\r\n switch (data.yearsInBusinessRange) {\r\n case \"1\":\r\n data.handleChangeManual(\"monthsInBusiness\", value);\r\n data.handleChangeManual(\"yearsInBusiness\", 0);\r\n break;\r\n case \"2\":\r\n case \"3\":\r\n data.handleChangeManual(\"yearsInBusiness\", value);\r\n data.handleChangeManual(\"monthsInBusiness\", 0);\r\n break;\r\n }\r\n }}\r\n >\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n\r\n function getSliderValue(): number | undefined {\r\n switch (data.yearsInBusinessRange) {\r\n case \"1\":\r\n return data.monthsInBusiness;\r\n case \"2\":\r\n case \"3\":\r\n return data.yearsInBusiness;\r\n }\r\n }\r\n\r\n function getMarksData(): { marks: StepperMark; maxValue: number; minValue: number } {\r\n let marks: StepperMark = {} as StepperMark;\r\n let iterativeAmount = 0;\r\n let maxValue = 0;\r\n let minValue = 0;\r\n switch (data.yearsInBusinessRange) {\r\n case \"1\":\r\n while (iterativeAmount <= 11) {\r\n let label = iterativeAmount.toString();\r\n\r\n marks[iterativeAmount] = {\r\n style: { top: 10, fontSize: \"1rem\" },\r\n label: label,\r\n };\r\n iterativeAmount += 1;\r\n }\r\n maxValue = 11;\r\n minValue = 0;\r\n break;\r\n case \"2\":\r\n while (iterativeAmount <= 10) {\r\n let label = iterativeAmount.toString();\r\n marks[iterativeAmount] = {\r\n style: { top: 10, fontSize: \"1rem\" },\r\n label: label,\r\n };\r\n iterativeAmount += 2;\r\n }\r\n maxValue = 10;\r\n minValue = 0;\r\n break;\r\n case \"3\":\r\n iterativeAmount = 10\r\n while (iterativeAmount <= 20) {\r\n let label = iterativeAmount.toString();\r\n marks[iterativeAmount] = {\r\n style: { top: 10, fontSize: \"1rem\" },\r\n label: label,\r\n };\r\n iterativeAmount += 2;\r\n }\r\n maxValue = 20;\r\n minValue = 10;\r\n break;\r\n }\r\n\r\n return { marks, maxValue, minValue };\r\n }\r\n\r\n function renderHeader() {\r\n switch (data.yearsInBusinessRange) {\r\n case \"1\":\r\n if (data.monthsInBusiness != null) {\r\n return `${data.monthsInBusiness} ${\r\n data.monthsInBusiness == 1\r\n ? yibStepTranslation.month\r\n : yibStepTranslation.months\r\n }`;\r\n } else {\r\n return yibStepTranslation.howManyMonths;\r\n }\r\n case \"2\":\r\n case \"3\":\r\n if (data.yearsInBusiness != null) {\r\n return `${data.yearsInBusiness} ${\r\n data.yearsInBusiness == 1\r\n ? yibStepTranslation.year\r\n : yibStepTranslation.years\r\n }`;\r\n } else {\r\n return yibStepTranslation.howManyYears;\r\n }\r\n }\r\n }\r\n\r\n function useStepYearsInBusiness(): StepYearsInBusinessState {\r\n const { input } = useMappedState((state) => state);\r\n const handleChangeManual = useCallback(\r\n (name: string, value: any) =>\r\n dispatch({\r\n type: ActionType.CHANGE_INPUT,\r\n value: value,\r\n propertyName: name,\r\n }),\r\n []\r\n );\r\n return {\r\n monthsInBusiness: input.monthsInBusiness || undefined,\r\n yearsInBusiness: input.yearsInBusiness || undefined,\r\n yearsInBusinessRange: input.yearsInBusinessRange,\r\n handleChangeManual: handleChangeManual,\r\n };\r\n }\r\n}\r\n\r\ntype StepYearsInBusinessState = {\r\n yearsInBusiness: number | undefined;\r\n monthsInBusiness: number | undefined;\r\n yearsInBusinessRange: string;\r\n handleChangeManual: Function;\r\n};\r\n","import InputMask from \"react-input-mask\";\r\nimport NumberFormat from \"react-number-format\";\r\nimport React from \"react\";\r\nimport { LocalSettings } from \"../configuration/AppConfig\";\r\n\r\nexport function TextMaskYears(props: any) {\r\n const { ...other } = props;\r\n return ;\r\n}\r\n\r\nexport function TextMaskPostalCode(props: any) {\r\n const { ...other } = props;\r\n\r\n function beforeMaskedValueChange(\r\n newState: any,\r\n oldState: any,\r\n userInput: string\r\n ) {\r\n if (!userInput) return newState;\r\n\r\n if (userInput === \" \") {\r\n return oldState;\r\n }\r\n\r\n let returnValue = newState.value;\r\n return {\r\n value: returnValue,\r\n selection: newState.selection,\r\n };\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport function TextMaskDate(props: any) {\r\n const { ...other } = props;\r\n\r\n function beforeMaskedValueChange(\r\n newState: any,\r\n oldState: any,\r\n userInput: string\r\n ) {\r\n if (!userInput) return newState;\r\n\r\n let separator = \"/\";\r\n if (userInput.includes(\"-\")) {\r\n separator = \"-\";\r\n } else if (userInput.includes(\".\")) {\r\n separator = \".\";\r\n }\r\n\r\n let usrSplitInput = userInput.split(separator);\r\n let returnValue = newState.value;\r\n // If the date is in YYYY/MM/DD format\r\n if (usrSplitInput.length === 3 && usrSplitInput[0].length === 4) {\r\n returnValue =\r\n usrSplitInput[2] + \"/\" + usrSplitInput[1] + \"/\" + usrSplitInput[0];\r\n }\r\n\r\n let numericValue = returnValue.replace(/\\D/g, \"\");\r\n\r\n if (numericValue.length < 8) {\r\n let mask = LocalSettings.translation.applicationPage.customerDetailsStep.dateOfBirthTextmask;// \"MMDDYYYY\";\r\n returnValue = numericValue + mask.substring(numericValue.length);\r\n }\r\n\r\n return {\r\n value: returnValue,\r\n selection: newState.selection,\r\n };\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport function TextMaskPhone(props: any) {\r\n const { ...other } = props;\r\n return ;\r\n}\r\n\r\nexport function NumberFormatCustom(props: any) {\r\n const { inputRef, onChange, ...other } = props;\r\n\r\n return (\r\n {\r\n onChange({\r\n target: {\r\n value: values.value,\r\n },\r\n });\r\n }}\r\n isAllowed={(values) => {\r\n const { floatValue } = values;\r\n return (\r\n floatValue === undefined || (floatValue > 0 && floatValue <= 10000000)\r\n );\r\n }}\r\n type=\"tel\"\r\n thousandSeparator\r\n prefix=\"$\"\r\n readOnly={props.readOnly}\r\n />\r\n );\r\n}\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { useMappedState, useDispatch, ActionType } from \"../../store/Store\";\r\nimport { useCallback } from \"react\";\r\nimport { FormGroup, Form, Label, Input, Col, Row } from \"reactstrap\";\r\nimport { LocalSettings, Styles } from \"../../configuration/AppConfig\";\r\nimport { TextMaskPhone, TextMaskDate } from \"../InputMasks\";\r\nimport { HelperFunctions } from \"../../utils/HelperFunctions\";\r\n\r\nexport default function StepCustomerPersonalDetails() {\r\n const dispatch = useDispatch();\r\n const data = useStepCustomerPersonalDetailsState();\r\n\r\n const customerDetailsStepTranslation = LocalSettings.translation.applicationPage.customerDetailsStep;\r\n\r\n useEffect(() => {\r\n if(data.dateOfBirth){ \r\n data.validateDateOfBirth(data.dateOfBirth);\r\n }\r\n }, []);\r\n\r\n const stepStyles = {\r\n inputFeedback: {\r\n position: \"absolute\" as \"absolute\",\r\n // top: 0,\r\n // left: isMobile ? 10 : 40,\r\n bottom: 0,\r\n },\r\n };\r\n\r\n let [typingTimeOutDateOfBirth, setTypingTimeOutDateOfBirth] = useState(0);\r\n let [typingTimeOutPhoneNumber, setTypingTimeOutPhoneNumber] = useState(0);\r\n\r\n // let size: \"sm\" | \"lg\" | undefined = isMobile ? undefined : \"lg\";\r\n // let labelStyle = { fontSize: isMobile ? \"0.875rem\" : \"1rem\" };\r\n let size: \"sm\" | \"lg\" | undefined = \"lg\";\r\n let labelStyle = { fontSize: \"1rem\" };\r\n \r\n return (\r\n
\r\n \r\n {customerDetailsStepTranslation.mainTitle}\r\n \r\n {/* \r\n Please provide some information about yourself\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 let value = event.target.value;\r\n if (typingTimeOutDateOfBirth > 0) {\r\n clearTimeout(typingTimeOutDateOfBirth);\r\n }\r\n data.handleChange(event);\r\n let timeout = !data.dateOfBirthValid ? 0 : 2000;\r\n setTypingTimeOutDateOfBirth(\r\n setTimeout(() => {\r\n data.validateDateOfBirth(value);\r\n }, timeout)\r\n );\r\n }}\r\n tag={TextMaskDate}\r\n value={data.dateOfBirth}\r\n id=\"dateOfBirth\"\r\n placeholder={customerDetailsStepTranslation.dateOfBirthPlaceholder}\r\n name=\"dateOfBirth\"\r\n autoComplete=\"bday\"\r\n type=\"text\"\r\n bsSize={size}\r\n invalid={!data.dateOfBirthValid}\r\n />\r\n \r\n {(() => {\r\n if (data.dateOfBirth != null && data.dateOfBirth != \"\") {\r\n if (HelperFunctions.dateIsValid(data.dateOfBirth)) {\r\n let age = HelperFunctions.getAgeFromDateOfBirth(\r\n data.dateOfBirth\r\n );\r\n if (age < 18)\r\n return customerDetailsStepTranslation.dobAgeInvalid;\r\n else if (age > 120) return customerDetailsStepTranslation.dobDateInvalid;\r\n } else {\r\n return customerDetailsStepTranslation.dobFormatInvalid;\r\n }\r\n } else {\r\n return customerDetailsStepTranslation.dobDateMissing;\r\n }\r\n })()}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n ) => {\r\n let value = event.target.value;\r\n if (typingTimeOutPhoneNumber > 0) {\r\n clearTimeout(typingTimeOutPhoneNumber);\r\n }\r\n data.handleChange(event);\r\n let timeout = !data.phoneNumberValid ? 0 : 2000;\r\n setTypingTimeOutPhoneNumber(\r\n setTimeout(() => {\r\n data.validatePhoneNumber(value);\r\n }, timeout)\r\n );\r\n }}\r\n tag={TextMaskPhone}\r\n value={data.phoneNumber}\r\n id=\"phoneNumber\"\r\n placeholder={customerDetailsStepTranslation.mobilePhonePlaceholder}\r\n name=\"phoneNumber\"\r\n type=\"text\"\r\n autoComplete=\"tel\"\r\n bsSize={size}\r\n invalid={!data.phoneNumberValid}\r\n />\r\n \r\n {(() => {\r\n if (data.phoneNumber != \"\") {\r\n if (!HelperFunctions.phoneIsValid(data.phoneNumber)) {\r\n return customerDetailsStepTranslation.mobilePhoneInvalid;\r\n }\r\n } else {\r\n return customerDetailsStepTranslation.mobilePhoneMissing;\r\n }\r\n })()}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n\r\n function useStepCustomerPersonalDetailsState(): StepCustomerPersonalDetailsState {\r\n const { input } = useMappedState((state) => state);\r\n const handleChange = useCallback(\r\n (e: React.ChangeEvent) =>\r\n dispatch({\r\n type: ActionType.CHANGE_INPUT,\r\n value: e.target.value,\r\n propertyName: e.target.name,\r\n }),\r\n []\r\n );\r\n\r\n const [dateOfBirthValid, setDateOfBirthValid] = useState(true);\r\n const [dateOfBirthBlurred, setDateOfBirthBlurred] = useState(false);\r\n const [phoneNumberValid, setPhoneNumberValid] = useState(true);\r\n const [phoneNumberBlurred, setPhoneNumberBlurred] = useState(false);\r\n\r\n function validateDateOfBirth(dateOfBirthStr: string) {\r\n setDateOfBirthValid(\r\n dateOfBirthStr != \"\" &&\r\n HelperFunctions.dateIsValid(dateOfBirthStr) &&\r\n HelperFunctions.getAgeFromDateOfBirth(dateOfBirthStr) >= 18 &&\r\n HelperFunctions.getAgeFromDateOfBirth(dateOfBirthStr) <= 99\r\n );\r\n }\r\n\r\n function validatePhoneNumber(phoneNumberStr: string) {\r\n setPhoneNumberValid(\r\n phoneNumberStr != \"\" && HelperFunctions.phoneIsValid(phoneNumberStr)\r\n );\r\n }\r\n\r\n return {\r\n dateOfBirth: input.dateOfBirth,\r\n dateOfBirthValid: dateOfBirthValid,\r\n dateOfBirthBlurred: dateOfBirthBlurred,\r\n setDateOfBirthBlurred: setDateOfBirthBlurred,\r\n validateDateOfBirth: validateDateOfBirth,\r\n setDateOfBirthValid: setDateOfBirthValid,\r\n phoneNumber: input.phoneNumber,\r\n phoneNumberValid: phoneNumberValid,\r\n phoneNumberBlurred: phoneNumberBlurred,\r\n setPhoneNumberBlurred: setPhoneNumberBlurred,\r\n validatePhoneNumber: validatePhoneNumber,\r\n setPhoneNumberValid: setPhoneNumberValid,\r\n handleChange,\r\n };\r\n }\r\n}\r\n\r\ntype StepCustomerPersonalDetailsState = {\r\n dateOfBirth: string;\r\n dateOfBirthValid: boolean;\r\n dateOfBirthBlurred: boolean;\r\n setDateOfBirthBlurred: Function;\r\n validateDateOfBirth: Function;\r\n setDateOfBirthValid: Function;\r\n phoneNumber: string;\r\n phoneNumberValid: boolean;\r\n phoneNumberBlurred: boolean;\r\n setPhoneNumberBlurred: Function;\r\n validatePhoneNumber: Function;\r\n setPhoneNumberValid: Function;\r\n handleChange: Function;\r\n};\r\n","import React, { ChangeEvent, KeyboardEvent, useState, useRef } from \"react\";\r\nimport useOnclickOutside from \"react-cool-onclickoutside\";\r\nimport \"normalize.css\";\r\nimport usePlacesAutocomplete, { GeocodeResult } from \"use-places-autocomplete\";\r\nimport { getGeocode, getZipCode } from \"use-places-autocomplete\";\r\nimport \"./AddressLookupGooglePlaces.css\";\r\n\r\nlet cachedVal = \"\";\r\nconst acceptedKeys = [38, 40, 13, 27];\r\nconst provincesList = [\r\n \"PE\",\r\n \"NS\",\r\n \"NB\",\r\n \"QC\",\r\n \"ON\",\r\n \"MB\",\r\n \"SK\",\r\n \"AB\",\r\n \"YT\",\r\n \"BC\",\r\n \"NT\",\r\n \"NU\",\r\n];\r\n\r\n//@ts-ignore\r\ntype Suggestion = google.maps.places.AutocompletePrediction;\r\n\r\nfunction AddressLookupGooglePlaces(props: AddressLookupGooglePlacesProps) {\r\n const [currIndex, setCurrIndex] = useState(null);\r\n const [searchText, setSearchText] = useState(props.formattedValue);\r\n\r\n const {\r\n ready,\r\n value,\r\n suggestions: { status, data },\r\n setValue,\r\n clearSuggestions,\r\n } = usePlacesAutocomplete({\r\n requestOptions: {\r\n componentRestrictions: { country: \"ca\" },\r\n types: [\"address\"],\r\n },\r\n });\r\n\r\n // In some cases Google Places will return the full province name\r\n // So we need to get the abbreviation before setting the data:\r\n const getProvinceAbbreviation = (provinceName: string) => {\r\n switch (provinceName) {\r\n case \"Nova Scotia\":\r\n return \"NS\";\r\n case \"New Brunswick\":\r\n return \"NB\";\r\n case \"Alberta\":\r\n return \"AB\";\r\n case \"Ontario\":\r\n return \"ON\";\r\n case \"Prince Edward Island\":\r\n return \"PE\";\r\n default:\r\n return provinceName;\r\n }\r\n };\r\n\r\n const formatAddress = (\r\n terms: { value: string }[]\r\n ): {\r\n street: string;\r\n city: string;\r\n province: string;\r\n } => {\r\n let street: string, city: string, province: string;\r\n\r\n if (terms.length == 4) {\r\n // Building number and street name are concatenated:\r\n street = terms[0].value;\r\n city = terms[1].value;\r\n province = getProvinceAbbreviation(terms[2].value);\r\n } else {\r\n // Building number and street name are separate:\r\n street = `${terms[0].value} ${terms[1].value}`;\r\n city = terms[2].value;\r\n province = getProvinceAbbreviation(terms[3].value);\r\n }\r\n\r\n return { street, city, province };\r\n };\r\n\r\n const isValidAddress = (terms: {\r\n street: string;\r\n city: string;\r\n province: string;\r\n }): boolean => {\r\n const { city, province, street } = terms;\r\n return (\r\n province.length > 0 &&\r\n city.length > 0 &&\r\n street.length > 0 &&\r\n provincesList.includes(terms.province)\r\n );\r\n };\r\n\r\n const termsAreValid = (terms: { value: string }[]): boolean => {\r\n const addr = formatAddress(terms);\r\n return isValidAddress(addr);\r\n };\r\n\r\n const filterSuggestions = (suggestions: any[]): any[] => {\r\n return suggestions.filter(\r\n (d) =>\r\n termsAreValid(d.terms) &&\r\n (d.types.includes(\"street_address\") || d.types.includes(\"premise\"))\r\n );\r\n };\r\n\r\n const hasSuggestions = status === \"OK\" && filterSuggestions(data).length > 0;\r\n\r\n const dismissSuggestions = (): void => {\r\n setCurrIndex(null);\r\n clearSuggestions();\r\n };\r\n\r\n const ref = useRef();\r\n\r\n //@ts-ignore\r\n useOnclickOutside(ref, dismissSuggestions);\r\n\r\n const handleInput = (e: ChangeEvent): void => {\r\n setValue(e.target.value);\r\n cachedVal = e.target.value;\r\n };\r\n\r\n const handleSelect = (suggestion: Suggestion) => (): void => {\r\n handleGetDetails(suggestion.place_id, suggestion.terms);\r\n };\r\n\r\n const handleGetDetails = (placeId: string, terms: any[]): void => {\r\n const parameter = { placeId: placeId };\r\n getGeocode(parameter).then((geocodeResults: GeocodeResult[]) => {\r\n getZipCode(geocodeResults[0], false).then((zipCodeResults: any) => {\r\n dismissSuggestions();\r\n\r\n const { city, province, street } = formatAddress(terms);\r\n\r\n props.onSelected({\r\n street: street,\r\n city: city,\r\n province: province,\r\n postalCode: zipCodeResults.trim(),\r\n });\r\n });\r\n });\r\n };\r\n\r\n const handleEnter = (idx: number) => (): void => {\r\n setCurrIndex(idx);\r\n };\r\n\r\n const handleLeave = (): void => {\r\n setCurrIndex(null);\r\n };\r\n\r\n const handleKeyDown = (e: KeyboardEvent): void => {\r\n if (!hasSuggestions || !acceptedKeys.includes(e.keyCode)) return;\r\n\r\n if (e.keyCode === 13 || e.keyCode === 27) {\r\n e.preventDefault();\r\n if (currIndex != null) {\r\n handleGetDetails(data[currIndex].place_id, data[currIndex].terms);\r\n }\r\n return;\r\n }\r\n\r\n let nextIndex: number | null;\r\n\r\n if (e.keyCode === 38) {\r\n e.preventDefault();\r\n nextIndex = currIndex ?? data.length;\r\n nextIndex = nextIndex != null && nextIndex > 0 ? nextIndex - 1 : null;\r\n } else {\r\n nextIndex = currIndex ?? -1;\r\n nextIndex = nextIndex < data.length - 1 ? nextIndex + 1 : null;\r\n }\r\n\r\n setCurrIndex(nextIndex);\r\n setValue(\r\n nextIndex != null && data[nextIndex]\r\n ? data[nextIndex].description\r\n : cachedVal,\r\n false\r\n );\r\n };\r\n\r\n const renderSuggestions = (): JSX.Element | null => {\r\n const filteredData = filterSuggestions(data);\r\n\r\n const suggestions = filteredData.map(\r\n (suggestion: Suggestion, idx: number) => {\r\n const {\r\n id,\r\n structured_formatting: { main_text, secondary_text },\r\n } = suggestion;\r\n\r\n return (\r\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\r\n \r\n

{main_text}

{\" \"}\r\n {secondary_text}\r\n \r\n );\r\n }\r\n );\r\n\r\n if (suggestions.length > 0) {\r\n return (\r\n
\r\n {suggestions}\r\n
  • \r\n \r\n
  • \r\n
    \r\n );\r\n } else return null;\r\n };\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n {hasSuggestions && (\r\n \r\n {renderSuggestions()}\r\n \r\n )}\r\n
    \r\n
    \r\n \r\n );\r\n}\r\n\r\ntype AddressLookupGooglePlacesProps = {\r\n onSelected(result: AddressLookupResult): void;\r\n onInput(): void;\r\n placeholder: string;\r\n formattedValue: string | null;\r\n};\r\n\r\nexport type AddressLookupResult = {\r\n street: string;\r\n city: string;\r\n province: string;\r\n postalCode: string;\r\n};\r\n\r\nexport default AddressLookupGooglePlaces;\r\n","import React, { useRef, useState, ChangeEvent, useEffect } from \"react\";\r\nimport { FormGroup, Form, Label, Input, Row, Col } from \"reactstrap\";\r\nimport useScript from \"../hooks/UseScript\";\r\nimport useLink from \"../hooks/UseLink\";\r\nimport { HelperFunctions } from \"../utils/HelperFunctions\";\r\nimport \"./AddressLookup.css\";\r\nimport { TextMaskPostalCode } from \"./InputMasks\";\r\nimport { isMobile } from \"react-device-detect\";\r\nimport AddressLookupGooglePlaces, {\r\n AddressLookupResult,\r\n} from \"./AddressLookupGooglePlaces\";\r\nimport { LocalSettings, Styles } from \"../configuration/AppConfig\";\r\n\r\nexport default function AddressLookup(props: AddressParameters) {\r\n let address = {\r\n searchText: \"\",\r\n street: \"\",\r\n city: \"\",\r\n province: \"\",\r\n postalCode: \"\",\r\n };\r\n\r\n let formattedValue: string | null = null;\r\n if (!HelperFunctions.isEmpty(props.value)) {\r\n let splitValue = props.value.split(\";\");\r\n address.street = splitValue[0];\r\n address.city = splitValue[1];\r\n address.province = splitValue[2];\r\n address.postalCode = splitValue[3];\r\n formattedValue = formatAddress(\r\n address.street,\r\n address.city,\r\n address.province,\r\n address.postalCode\r\n );\r\n }\r\n\r\n const styles = {\r\n inputFeedback: {\r\n position: \"absolute\" as \"absolute\",\r\n // top: 0,\r\n // left: isMobile ? 10 : 40,\r\n bottom: 0,\r\n },\r\n };\r\n\r\n const [searchText, setSearchText] = useState(formattedValue);\r\n const [street, setStreet] = useState(address.street);\r\n const [city, setCity] = useState(address.city);\r\n const [province, setProvince] = useState(address.province);\r\n const [postalCode, setPostalCode] = useState(address.postalCode);\r\n const [addressIsValid, setAddressIsValid] = useState(false);\r\n const [addressType, setAddressType] = useState(AddressType.AUTO);\r\n\r\n const [streetIsValid, setStreetIsValid] = useState(true);\r\n const [cityIsValid, setCityIsValid] = useState(true);\r\n const [postalCodeIsValid, setPostalCodeIsValid] = useState(true);\r\n\r\n const addressTranslation =\r\n LocalSettings.translation.applicationPage.addresses;\r\n\r\n function formatAddress(\r\n street: string,\r\n city: string,\r\n province: string,\r\n postalCode: string\r\n ) {\r\n return `${street},${city},${province},${postalCode}`;\r\n }\r\n\r\n function validateStreet(streetStr: string) {\r\n setStreetIsValid(streetStr.length > 0);\r\n }\r\n\r\n function validateCity(cityStr: string) {\r\n setCityIsValid(cityStr.length > 0);\r\n }\r\n\r\n function validatePostalCode(postalCodeStr: string) {\r\n setPostalCodeIsValid(HelperFunctions.postalCodeIsValid(postalCodeStr));\r\n }\r\n\r\n let [typingTimeoutStreet, setTypingTimeoutStreet] = useState(0);\r\n let [typingTimeoutCity, setTypingTimeoutCity] = useState(0);\r\n let [typingTimeoutPostalCode, setTypingTimeoutPostalCode] = useState(0);\r\n\r\n let streetRef = useRef(null);\r\n let cityRef = useRef(null);\r\n let provinceRef = useRef(null);\r\n let postalCodeRef = useRef(null);\r\n let formattedAddressRef = useRef(null);\r\n let searchRef = useRef(null);\r\n\r\n // useScript(\r\n // // `${process.env.PUBLIC_URL}/assets/js/addresscomplete.js`\r\n // \"https://ws1.postescanada-canadapost.ca/js/addresscomplete-2.30.min.js?key=pb53-bz12-bk79-xu66&culture=en-CA\"\r\n // );\r\n\r\n // useLink(\r\n // `${process.env.PUBLIC_URL}/assets/css/addresscomplete.css`,\r\n // // \"http://ws1.postescanada-canadapost.ca/css/addresscomplete-2.30.min.css?key=pb53-bz12-bk79-xu66&culture=en-CA\",\r\n // \"text/css\",\r\n // \"stylesheet\"\r\n // );\r\n\r\n useEffect(() => {\r\n // overrideAutoFillChange(searchRef.current);\r\n\r\n overrideValueChangeForUnmanagedInput(streetRef.current, (value: string) => {\r\n setStreet(value);\r\n });\r\n overrideValueChangeForUnmanagedInput(cityRef.current, (value: string) => {\r\n setCity(value);\r\n });\r\n overrideValueChangeForUnmanagedInput(\r\n provinceRef.current,\r\n (value: string) => {\r\n setProvince(value);\r\n }\r\n );\r\n overrideValueChangeForUnmanagedInput(\r\n postalCodeRef.current,\r\n (value: string) => {\r\n setPostalCode(value);\r\n }\r\n );\r\n }, []);\r\n\r\n // Do not run address validation on initial render\r\n const firstUpdate = useRef(true);\r\n useEffect(() => {\r\n if (firstUpdate.current) {\r\n firstUpdate.current = false;\r\n return;\r\n }\r\n validateAndSetAddress();\r\n }, [street, city, province, postalCode]);\r\n\r\n return (\r\n
    \r\n \r\n {renderValidAddressBlock()}\r\n
    \r\n \r\n
    {renderSearch()}
    \r\n
    {renderAddressSwitchLink()}
    \r\n \r\n \r\n );\r\n\r\n function validateAndSetAddress() {\r\n let formattedAddress, splittedAddress;\r\n if (\r\n street &&\r\n street.length > 0 &&\r\n city &&\r\n city.length > 0 &&\r\n HelperFunctions.postalCodeIsValid(postalCode) &&\r\n province &&\r\n province.length > 0\r\n ) {\r\n formattedAddress = formatAddress(street, city, province, postalCode);\r\n splittedAddress = `${street};${city};${province};${postalCode}`;\r\n setAddressIsValid(true);\r\n } else {\r\n formattedAddress = \"\";\r\n splittedAddress = \"\";\r\n }\r\n props.onAddressChange(splittedAddress, props.name);\r\n setSearchText(formattedAddress);\r\n }\r\n\r\n function overrideValueChangeForUnmanagedInput(\r\n input: HTMLInputElement | null,\r\n callback: Function\r\n ) {\r\n if (input == null) throw new Error(\"Input is null\");\r\n\r\n Object.defineProperty(input, \"value\", {\r\n get: function () {\r\n return this._value;\r\n },\r\n set: function (v) {\r\n this._value = v;\r\n callback(v);\r\n },\r\n });\r\n }\r\n\r\n function overrideAutoFillChange(input: HTMLInputElement | null) {\r\n if (input == null) throw new Error(\"Input is null\");\r\n Object.defineProperty(input, \"autocomplete\", {\r\n get: function () {\r\n return this._value;\r\n },\r\n set: function (v) {\r\n if (v !== \"off\") this._value = v;\r\n },\r\n });\r\n }\r\n\r\n function renderValidAddressBlock() {\r\n return (\r\n
    \r\n
    \r\n
    {addressTranslation.addressSelected}
    \r\n
    \r\n {searchText}\r\n \r\n
    \r\n
    \r\n \r\n {\r\n e.preventDefault();\r\n setAddressType(AddressType.MANUAL);\r\n setAddressIsValid(false);\r\n }}\r\n >\r\n {addressTranslation.changeMyAddress}\r\n \r\n
    \r\n \r\n );\r\n }\r\n\r\n function renderAddressSwitchLink() {\r\n let newAddressType: AddressType;\r\n let addressSwitchCaption: string;\r\n\r\n switch (addressType) {\r\n case AddressType.AUTO:\r\n newAddressType = AddressType.MANUAL;\r\n addressSwitchCaption = addressTranslation.manualEntry;\r\n break;\r\n case AddressType.MANUAL:\r\n newAddressType = AddressType.AUTO;\r\n addressSwitchCaption = addressTranslation.lookupAddress;\r\n break;\r\n }\r\n\r\n return (\r\n \r\n {\r\n e.preventDefault();\r\n setAddressType(newAddressType);\r\n }}\r\n >\r\n {addressSwitchCaption}\r\n \r\n \r\n );\r\n }\r\n function renderSearch() {\r\n // style={{display: toggleSearch? \"inherit\" : \"none\"}}\r\n // style={{display: toggleSearch? \"none\" : \"inherit\"}}\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 setSearchText(e.target.value);\r\n }}\r\n onInput={() => {\r\n setCity(\"\");\r\n setPostalCode(\"\");\r\n setProvince(\"\");\r\n setStreet(\"\");\r\n }}\r\n innerRef={searchRef}\r\n name=\"search_input\"\r\n placeholder={props.placeholder}\r\n autoComplete=\"new-password\"\r\n id=\"search_input\"\r\n type=\"text\"\r\n bsSize={props.bsSize}\r\n // invalid={true}\r\n /> */}\r\n {/* ) => {\r\n setSearchText(e.target.value);\r\n }}\r\n onInput={() => {\r\n setCity(\"\");\r\n setPostalCode(\"\");\r\n setProvince(\"\");\r\n setStreet(\"\");\r\n }}\r\n /> */}\r\n\r\n {\r\n setCity(result.city);\r\n setStreet(result.street);\r\n setProvince(result.province);\r\n setPostalCode(result.postalCode);\r\n }}\r\n onInput={() => {\r\n setCity(\"\");\r\n setPostalCode(\"\");\r\n setProvince(\"\");\r\n setStreet(\"\");\r\n }}\r\n formattedValue={formattedValue}\r\n />\r\n\r\n
    \r\n Please type in your address or make a selection!\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) => {\r\n let value = event.target.value;\r\n if (typingTimeoutStreet > 0) {\r\n clearTimeout(typingTimeoutStreet);\r\n }\r\n setStreet(event.target.value);\r\n\r\n let timeout = !streetIsValid ? 0 : 800;\r\n setTypingTimeoutStreet(\r\n setTimeout(() => {\r\n validateStreet(value);\r\n }, timeout)\r\n );\r\n }}\r\n invalid={!streetIsValid}\r\n type=\"text\"\r\n bsSize={props.bsSize}\r\n />\r\n \r\n {addressTranslation.streetInvalid}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) => {\r\n let value = event.target.value;\r\n if (typingTimeoutCity > 0) {\r\n clearTimeout(typingTimeoutCity);\r\n }\r\n setCity(event.target.value);\r\n\r\n let timeout = !cityIsValid ? 0 : 800;\r\n setTypingTimeoutCity(\r\n setTimeout(() => {\r\n validateCity(value);\r\n }, timeout)\r\n );\r\n }}\r\n invalid={!cityIsValid}\r\n type=\"text\"\r\n bsSize={props.bsSize}\r\n />\r\n \r\n {addressTranslation.cityInvalid}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) => {\r\n setProvince(e.target.value);\r\n }}\r\n bsSize={props.bsSize}\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 {addressTranslation.selectProvince}\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n ) => {\r\n let value = event.target.value;\r\n if (typingTimeoutPostalCode > 0) {\r\n clearTimeout(typingTimeoutPostalCode);\r\n }\r\n setPostalCode(event.target.value);\r\n\r\n let timeout = !postalCodeIsValid ? 0 : 800;\r\n setTypingTimeoutPostalCode(\r\n setTimeout(() => {\r\n validatePostalCode(value);\r\n }, timeout)\r\n );\r\n }}\r\n invalid={!postalCodeIsValid}\r\n type=\"text\"\r\n bsSize={props.bsSize}\r\n tag={TextMaskPostalCode}\r\n />\r\n \r\n {addressTranslation.postalCodeInvalid}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* */}\r\n \r\n
    \r\n Please type in your address or make a selection!\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n );\r\n }\r\n}\r\n\r\ntype AddressParameters = {\r\n name: string;\r\n className: string;\r\n placeholder: string;\r\n label: string;\r\n labelStyle: any;\r\n value: string;\r\n bsSize: \"sm\" | \"lg\" | undefined;\r\n onAddressChange: (splittedAddress: string, propName: string) => void;\r\n};\r\n\r\nexport enum AddressType {\r\n MANUAL = \"manual\",\r\n AUTO = \"search\",\r\n}\r\n","import React, { ChangeEvent } from \"react\";\r\nimport { useMappedState, useDispatch, ActionType } from \"../../store/Store\";\r\nimport { useCallback } from \"react\";\r\nimport { Form, Col, Row } from \"reactstrap\";\r\nimport { LocalSettings, Styles } from \"../../configuration/AppConfig\";\r\nimport AddressLookup from \"../AddressLookup\";\r\nimport { isMobile } from \"react-device-detect\";\r\n\r\nconst styles = {\r\n itemCheckbox: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n flexWrap: \"wrap\" as \"wrap\",\r\n },\r\n container: {\r\n padding: 30,\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n flexFlow: \"column\",\r\n },\r\n item: {\r\n margin: 10,\r\n },\r\n};\r\n\r\nexport default function StepHomeAddress(props: StepHomeAddressProps) {\r\n const dispatch = useDispatch();\r\n const data = useStepHomeAddress();\r\n\r\n const homeAddressStepTranslation =\r\n LocalSettings.translation.applicationPage.homeAddressStep;\r\n\r\n // let size: \"sm\" | \"lg\" | undefined = isMobile ? undefined : \"lg\";\r\n // let labelStyle = { fontSize: isMobile ? \"0.875rem\" : \"1rem\" };\r\n let size: \"sm\" | \"lg\" | undefined = \"lg\";\r\n let labelStyle = { fontSize: \"1rem\" };\r\n return (\r\n
    \r\n \r\n {homeAddressStepTranslation.homeAddress}\r\n \r\n {/* \r\n */}\r\n
    \r\n
    \r\n \r\n \r\n {\r\n data.handleChangeManual(address, propName);\r\n if (props.skipBusinessAddress) {\r\n data.handleChangeManual(\r\n data.homeAddress,\r\n \"businessAddress\"\r\n );\r\n }\r\n }}\r\n placeholder={homeAddressStepTranslation.addressPlaceHolder}\r\n value={data.homeAddress}\r\n name=\"homeAddress\"\r\n label={homeAddressStepTranslation.homeAddress}\r\n className=\"stepper-item\"\r\n bsSize={size}\r\n labelStyle={labelStyle}\r\n />\r\n \r\n \r\n
    \r\n
    \r\n {homeAddressStepTranslation.skipBusinessAddress}\r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n\r\n function useStepHomeAddress(): StepHomeAddressState {\r\n const { input } = useMappedState((state) => state);\r\n const handleChange = useCallback(\r\n (e: React.ChangeEvent) =>\r\n dispatch({\r\n type: ActionType.CHANGE_INPUT,\r\n value: e.target.value,\r\n propertyName: e.target.name,\r\n }),\r\n []\r\n );\r\n const handleChangeManual = useCallback(\r\n (value: string, propertyName: string) =>\r\n dispatch({\r\n type: ActionType.CHANGE_INPUT,\r\n value: value,\r\n propertyName: propertyName,\r\n }),\r\n []\r\n );\r\n return {\r\n homeAddress: input.homeAddress,\r\n handleChange: handleChange,\r\n handleChangeManual: handleChangeManual,\r\n };\r\n }\r\n}\r\n\r\ntype StepHomeAddressState = {\r\n homeAddress: string;\r\n handleChange: Function;\r\n handleChangeManual: Function;\r\n};\r\n\r\ntype StepHomeAddressProps = {\r\n skipBusinessAddress: boolean;\r\n setBusinessAddressCallback: (skipStep: boolean) => void;\r\n};\r\n","import React from \"react\";\r\nimport { useMappedState, useDispatch, ActionType } from \"../../store/Store\";\r\nimport { useCallback } from \"react\";\r\nimport { Form, Col, Row, Label } from \"reactstrap\";\r\nimport { LocalSettings, Styles } from \"../../configuration/AppConfig\";\r\nimport AddressLookup from \"../AddressLookup\";\r\nimport { isMobile } from \"react-device-detect\";\r\n\r\nexport default function StepBusinessAddress() {\r\n const dispatch = useDispatch();\r\n const data = useStepBusinessAddress();\r\n\r\n const businessAddressStepTranslation =\r\n LocalSettings.translation.applicationPage.businessAddressStep;\r\n\r\n // let size: \"sm\" | \"lg\" | undefined = isMobile ? undefined : \"lg\";\r\n // let labelStyle = { fontSize: isMobile ? \"0.875rem\" : \"1rem\" };\r\n let size: \"sm\" | \"lg\" | undefined = \"lg\";\r\n let labelStyle = { fontSize: \"1rem\" };\r\n return (\r\n
    \r\n \r\n {businessAddressStepTranslation.mainTitle}\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 function useStepBusinessAddress(): StepBusinessAddressState {\r\n const { input } = useMappedState((state) => state);\r\n const handleChange = useCallback(\r\n (e: React.ChangeEvent) =>\r\n dispatch({\r\n type: ActionType.CHANGE_INPUT,\r\n value: e.target.value,\r\n propertyName: e.target.name,\r\n }),\r\n []\r\n );\r\n const handleChangeManual = useCallback(\r\n (value: string, propertyName: string) =>\r\n dispatch({\r\n type: ActionType.CHANGE_INPUT,\r\n value: value,\r\n propertyName: propertyName,\r\n }),\r\n []\r\n );\r\n return {\r\n businessAddress: input.businessAddress,\r\n handleChange: handleChange,\r\n handleChangeManual: handleChangeManual,\r\n };\r\n }\r\n}\r\n\r\ntype StepBusinessAddressState = {\r\n businessAddress: string;\r\n handleChange: Function;\r\n handleChangeManual: (splitAddress: string, propertyName: string) => void;\r\n};\r\n","import React from \"react\";\r\nimport { Button, Modal } from \"reactstrap\";\r\nimport CSS from \"csstype\";\r\nimport \"./ModalDialog.css\"\r\nimport { Styles } from \"../configuration/AppConfig\";\r\n\r\nexport default function ModalDialog(props: ModalDialogProps) {\r\n const {\r\n open,\r\n textStyle,\r\n agreeText,\r\n agreeEnabled,\r\n disagreeText,\r\n buttonAgreeStyle,\r\n buttonDisagreeStyle,\r\n contentClassName,\r\n contentStyle,\r\n hideCloseButton,\r\n title,\r\n handleClose,\r\n handleAgreed,\r\n handleDisagreed,\r\n children\r\n } = props;\r\n\r\n function keyboardEvents(event : React.KeyboardEvent) {\r\n event.preventDefault();\r\n console.log(\"PRESSED: \" + event.key);\r\n }\r\n\r\n if (!open)\r\n return (
    )\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n {title}\r\n \r\n handleClose()}\r\n >\r\n ×\r\n \r\n
    \r\n
    \r\n

    {children}

    \r\n
    \r\n
    \r\n handleDisagreed()}\r\n >\r\n {(() => {\r\n if (disagreeText) return disagreeText;\r\n else return \"Disagree\";\r\n })()}\r\n \r\n handleAgreed()}\r\n autoFocus\r\n >\r\n {(() => {\r\n if (agreeText) return agreeText;\r\n else return \"Agree\";\r\n })()}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n}\r\n\r\ntype ModalDialogProps = {\r\n open: boolean;\r\n textStyle?: CSS.Properties;\r\n agreeText?: string;\r\n agreeEnabled?: boolean;\r\n disagreeText?: string;\r\n buttonAgreeStyle: CSS.Properties;\r\n buttonDisagreeStyle: CSS.Properties;\r\n contentClassName?: string;\r\n contentStyle?: CSS.Properties;\r\n hideCloseButton: boolean;\r\n title: string;\r\n handleClose: Function;\r\n handleDisagreed: Function;\r\n handleAgreed: Function;\r\n children: any;\r\n};\r\n","import React from \"react\";\r\nimport { LocalSettings } from \"../configuration/AppConfig\";\r\nimport { isMobile } from \"react-device-detect\";\r\n\r\nfunction TermsAndConditions(props: any) {\r\n const { textStyle } = props;\r\n const styles = {\r\n hyperlink: {\r\n margin: 30,\r\n textDecoration: \"underline\",\r\n },\r\n container: {\r\n textAlign: \"center\" as \"center\",\r\n margin: 10,\r\n },\r\n };\r\n\r\n let text: string;\r\n let policy: string;\r\n let policyUrl: string;\r\n switch (LocalSettings.language) {\r\n case \"en\":\r\n text = `By agreeing to the following Terms & Conditions, the Merchant and its\r\n owner(s) certify that all information and documents submitted in\r\n connection with this Application are true, correct and complete.\r\n Additionally, the owner(s) authorize ${LocalSettings.companyNameOriginal} Ltd. or any of its\r\n agents, partners, and affiliates to obtain and use business and\r\n non-business consumer credit reports from credit reporting agencies and\r\n any other information regarding the Merchant and its owner(s) from third\r\n parties, both at the time of the initial funding application and at any\r\n time after the Merchant has received funding as long as the Merchant\r\n remains a client of ${LocalSettings.companyNameOriginal} Ltd. At all times, ${LocalSettings.companyNameOriginal} Ltd. \r\n will comply with the personal information collection, protection,\r\n use, sharing, and retention practices set out in the Privacy Policy, which\r\n can be reviewed here:`;\r\n policy = \"Merchant Growth privacy policy\";\r\n policyUrl = \"https://www.merchantgrowth.com/privacy-policy\";\r\n break;\r\n case \"fr\":\r\n text = `En acceptant les conditions générales suivantes, le commerçant et son (ses) propriétaire (s) certifient que toutes \r\n les informations et tous les documents soumis dans le cadre de cette demande sont véridiques, corrects et complets. \r\n De plus, le propriétaire (s) autorise (nt) ${LocalSettings.companyNameOriginal} Ltd. ou l'un de ses agents, partenaires et affiliés à obtenir et à utiliser des rapports \r\n de solvabilité d'entreprise et personnels auprès d'agences d'évaluation du crédit et toute autre information provenant de tiers concernant \r\n le commerçant et son (ses) propriétaire (s), à partir du moment de la demande de financement initiale et à tout moment après que le commerçant \r\n a reçu des fonds et tant que le commerçant reste un client de ${LocalSettings.companyNameOriginal} Ltd. À tout moment, ${LocalSettings.companyNameOriginal} Ltd. se conformera aux pratiques de collecte, \r\n de protection, d'utilisation, de partage et de conservation des informations énoncées dans la politique de confidentialité, qui peut être consultée ici:`;\r\n // text = `En acceptant les conditions générales suivantes, le ${LocalSettings.companyNameOriginal} Ltd. et son\r\n // le (s) propriétaire (s) certifie (nt) que toutes les informations et tous les documents soumis\r\n // connexion avec cette application sont vraies, correctes et complètes.\r\n // En outre, le ou les propriétaires autorisent ${LocalSettings.companyNameOriginal} Ltd. ou l'un de ses\r\n // agents, partenaires et affiliés pour obtenir et utiliser des affaires et\r\n // les rapports de solvabilité des consommateurs non commerciaux des agences d'évaluation du crédit et\r\n // toute autre information concernant ${LocalSettings.companyNameOriginal} Ltd. et son (ses) propriétaire (s) de tiers\r\n // parties, à la fois au moment de la demande de financement initiale et à tout moment\r\n // heure après que ${LocalSettings.companyNameOriginal} Ltd. ait reçu un financement tant que le marchand\r\n // reste un client de ${LocalSettings.companyNameOriginal} Ltd. À tout moment, ${LocalSettings.companyNameOriginal} Ltd. se conformera à la collecte des informations personnelles, à la protection,\r\n // les pratiques d'utilisation, de partage et de conservation énoncées dans la politique de confidentialité, qui\r\n // peut être examiné ici:`;\r\n policy = \"Politique de confidentialité de Merchant Growth\";\r\n policyUrl = \"https://www.merchantgrowth.com/fr/politique-de-confidentialite/\";\r\n break;\r\n }\r\n return (\r\n \r\n

    \r\n {text}\r\n

    \r\n \r\n {policy}\r\n \r\n

    \r\n

    \r\n \r\n );\r\n}\r\n\r\nexport default TermsAndConditions;\r\n","import React, { useState, ChangeEvent, useEffect } from \"react\";\r\nimport { useMappedState, useDispatch, ActionType } from \"../../store/Store\";\r\nimport { useCallback } from \"react\";\r\nimport { LocalSettings, Styles } from \"../../configuration/AppConfig\";\r\nimport ModalDialog from \"../ModalDialog\";\r\nimport TermsAndConditions from \"../TermsAndConditions\";\r\nimport LinkedInTag from 'react-linkedin-insight';\r\n\r\nconst styles = {\r\n itemCheckbox: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n flexWrap: \"wrap\" as \"wrap\",\r\n },\r\n container: {\r\n padding: 30,\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n flexFlow: \"column\",\r\n },\r\n item: {\r\n margin: 10,\r\n },\r\n};\r\n\r\nexport default function StepTermsAndConditions() {\r\n const dispatch = useDispatch();\r\n const data = useStepTermsAndConditions();\r\n const [termsDialogOpen, setTermsDialogOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n LinkedInTag.init('3430250');\r\n LinkedInTag.track('5199058');\r\n },[])\r\n\r\n\r\n const tcStepTranslation =\r\n LocalSettings.translation.applicationPage.termsAndConditionsStep;\r\n\r\n return (\r\n
    \r\n \r\n {tcStepTranslation.mainTitle}\r\n \r\n
    \r\n
    \r\n
    \r\n
    {tcStepTranslation.agreeSwitch}
    \r\n \r\n
    \r\n
    \r\n {\r\n setTermsDialogOpen(true);\r\n }}\r\n >\r\n {tcStepTranslation.termsLink}\r\n
    \r\n
    \r\n
    \r\n
    \r\n setTermsDialogOpen(false)}\r\n handleAgreed={() => {\r\n data.handleChangeManual(true, \"consent\");\r\n setTermsDialogOpen(false);\r\n }}\r\n handleDisagreed={() => setTermsDialogOpen(false)}\r\n hideCloseButton={false}\r\n contentStyle={{\r\n backgroundColor: Styles.textColorPrimary,\r\n }}\r\n buttonAgreeStyle={{\r\n backgroundColor: Styles.textColorSecondaryAlt,\r\n borderColor: Styles.textColorSecondaryAlt,\r\n color: Styles.defaultColor,\r\n boxShadow: \"unset\",\r\n }}\r\n buttonDisagreeStyle={{\r\n backgroundColor: Styles.textColorSecondaryAlt,\r\n borderColor: Styles.textColorSecondaryAlt,\r\n color: Styles.defaultColor,\r\n boxShadow: \"unset\",\r\n }}\r\n open={termsDialogOpen}\r\n >\r\n \r\n \r\n \r\n );\r\n\r\n function useStepTermsAndConditions(): StepTermsAndConditionsState {\r\n const { input } = useMappedState((state) => state);\r\n const handleChange = useCallback(\r\n (e: React.ChangeEvent) =>\r\n dispatch({\r\n type: ActionType.CHANGE_INPUT,\r\n value: e.target.value,\r\n propertyName: e.target.name,\r\n }),\r\n []\r\n );\r\n const handleChangeManual = useCallback(\r\n (value: string, propertyName: string) =>\r\n dispatch({\r\n type: ActionType.CHANGE_INPUT,\r\n value: value,\r\n propertyName: propertyName,\r\n }),\r\n []\r\n );\r\n return {\r\n consent: input.consent,\r\n handleChange: handleChange,\r\n handleChangeManual: handleChangeManual,\r\n };\r\n }\r\n}\r\n\r\ntype StepTermsAndConditionsState = {\r\n consent: boolean;\r\n handleChange: Function;\r\n handleChangeManual: Function;\r\n};\r\n","import axios from \"axios\";\r\nimport { LocalSettings } from \"../configuration/AppConfig\";\r\nimport { StepperPageTransferData, InitialPageTransferData, GetTransferData, AddressLookupTransferData, BankingOutcomeData, PartnerRequest, BankingStatusUpdate, PartnerDetailsRequest, BankingLoginAndAccountUpdate } from \"../store/Store\";\r\n\r\nconst webApiAddress = process.env.REACT_APP_WEB_API_ADDRESS;\r\n\r\nconst Api = {\r\n lookupAddress: async function (input: AddressLookupTransferData, successCallback: Function, errorCallback: Function) {\r\n const url = webApiAddress + `/api/application/get`;\r\n },\r\n getApplication: async function (input: GetTransferData, successCallback: Function, errorCallback: Function) {\r\n const url = webApiAddress + `/api/application/get`;\r\n await makePostRequest(input, url, null, successCallback, errorCallback);\r\n },\r\n createApplication: async function (input: InitialPageTransferData, successCallback: Function, errorCallback: Function) {\r\n const url = webApiAddress + `/api/application/create`;\r\n await makePostRequest(input, url, null, successCallback, errorCallback);\r\n },\r\n updateApplication: async function (input: StepperPageTransferData, successCallback: Function, errorCallback: Function) {\r\n let url = webApiAddress + `/api/application/update`;\r\n await makePostRequest(input, url, null, successCallback, errorCallback);\r\n },\r\n updateBankingStatus: async function (input: BankingStatusUpdate, successCallback: Function, errorCallback: Function) {\r\n let url = webApiAddress + `/api/application/update`;\r\n await makePostRequest(input, url, null, successCallback, errorCallback);\r\n },\r\n updateBankingLoginAndAccount: async function (input: BankingLoginAndAccountUpdate, successCallback: Function, errorCallback: Function) {\r\n let url = webApiAddress + `/api/application/update-banking-information`;\r\n await makePatchRequest(input, url, null, successCallback, errorCallback);\r\n },\r\n skipBankingStep: async function (input: BankingOutcomeData, successCallback: Function, errorCallback: Function) {\r\n let url = webApiAddress + `/api/application/update`;\r\n await makePostRequest(input, url, null, successCallback, errorCallback);\r\n },\r\n uploadFile: async function (input: FormData, successCallback: Function, errorCallback: Function, progressCallback: Function) {\r\n const url = webApiAddress + `/api/application/upload`;\r\n const config = {\r\n headers: {\r\n 'content-type': 'multipart/form-data'\r\n },\r\n onUploadProgress: (e: any) => { progressCallback(e) }\r\n }\r\n await makePostRequest(input, url, config, successCallback, errorCallback);\r\n },\r\n getUploadUrl: function (): string {\r\n return webApiAddress + '/api/application/upload';\r\n },\r\n getBankingDataUrl: function (): string {\r\n let language = LocalSettings.language;\r\n let flinksUrl = process.env.REACT_APP_FLINKS_URL || '';\r\n flinksUrl = flinksUrl.replace('language=', `language=${language}`);\r\n return flinksUrl;\r\n },\r\n getHubUrl: function (): string {\r\n return `${webApiAddress}/apphub`;\r\n },\r\n getPartnerData: async function (input: PartnerRequest, successCallback: (result: any) => void, errorCallback: (error: any) => void) {\r\n let url = webApiAddress + `/api/application/get`;\r\n await makePostRequest(input, url, null, successCallback, errorCallback);\r\n },\r\n getPartnerDetails: async function (input: PartnerDetailsRequest, successCallback: (result: any) => void, errorCallback: (error: any) => void) {\r\n let url = webApiAddress + `/api/application/get`;\r\n await makePostRequest(input, url, null, successCallback, errorCallback);\r\n }\r\n}\r\n\r\nexport default Api;\r\n\r\nasync function makePostRequest(\r\n payload: any,\r\n url: string,\r\n config: any,\r\n successCallback: Function,\r\n errorCallback: Function\r\n) {\r\n try {\r\n const response = await axios.post(url, payload, config);\r\n successCallback(response);\r\n } catch (errorResponse) {\r\n errorCallback(errorResponse);\r\n }\r\n}\r\n\r\nasync function makePatchRequest(\r\n payload: any,\r\n url: string,\r\n config: any,\r\n successCallback: Function,\r\n errorCallback: Function\r\n) {\r\n try {\r\n const response = await axios.patch(url, payload, config);\r\n successCallback(response);\r\n } catch (errorResponse) {\r\n errorCallback(errorResponse);\r\n }\r\n}\r\n\r\n","import React from \"react\";\r\nimport { LocalSettings, Styles } from \"../configuration/AppConfig\";\r\nimport \"./LoadingScreen.css\";\r\nimport { Spinner } from \"reactstrap\";\r\nimport { isMobile } from \"react-device-detect\";\r\n\r\n\r\n\r\nexport default function LoadingScreen(props: LoadingProps) {\r\n const loadingState = useLoadingState(props);\r\n const showLoadingScreen = props.showMessage === undefined ? true : props.showMessage;\r\n\r\n const styles = {\r\n labelStyle: {\r\n textAlign: \"center\" as \"center\",\r\n margin: 15,\r\n color: Styles.textColorPrimary,\r\n fontWeight: 400\r\n },\r\n labelStyleLarge: {\r\n textAlign: \"center\" as \"center\",\r\n margin: 15,\r\n color: Styles.textColorPrimary,\r\n fontSize: isMobile ? \"1rem\" : \"1.25rem\",\r\n fontWeight: 400\r\n },\r\n descriptionStyle: {\r\n textAlign: \"center\" as \"center\",\r\n margin: 15,\r\n color: Styles.textColorPrimary,\r\n fontSize: isMobile ? \"0.9rem\" : \"1.0rem\",\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n {getLoadingImage()}\r\n {showLoadingScreen && getLoadingMessage()}\r\n {showLoadingScreen && getLoadingAnimation()}\r\n
    \r\n );\r\n\r\n function getLoadingAnimation() {\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n }\r\n\r\n function getLoadingMessage() {\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n {loadingState.message}\r\n {/* .\r\n .\r\n . */}\r\n
    \r\n
    \r\n {loadingState.messageDescription}\r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n\r\n function getLoadingImage() {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nfunction useLoadingState(props: LoadingProps): LoadingState {\r\n let animation = props.animation || LoadingAnimation.DEFAULT;\r\n let loadingMessage = props.loadingMessage || LocalSettings.translation.loading.mainMessage;\r\n let loadingMessageDescription =\r\n props.loadingMessageDescription || LocalSettings.translation.loading.description;\r\n return {\r\n animation: animation,\r\n message: loadingMessage,\r\n messageDescription: loadingMessageDescription\r\n };\r\n}\r\n\r\nexport enum LoadingAnimation {\r\n DEFAULT = \"animations_processing_small.gif\",\r\n QUOTING = \"animations_quoting_small.gif\",\r\n SCORING = \"animations_scoring_small.gif\",\r\n PROCESSING = \"animations_processing_small.gif\"\r\n}\r\n\r\ntype LoadingState = {\r\n animation: LoadingAnimation;\r\n message: string;\r\n messageDescription: string;\r\n};\r\n\r\ntype LoadingProps = {\r\n animation?: LoadingAnimation;\r\n loadingMessage?: string;\r\n loadingMessageDescription?: string;\r\n showMessage?: boolean;\r\n};\r\n","import { Styles } from \"../../configuration/AppConfig\";\r\nimport React from \"react\";\r\n\r\nexport default function InitialBackground() {\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\nexport type CheckIconProps = {\r\n fill: string;\r\n}","import { Styles } from \"../../configuration/AppConfig\";\r\nimport React from \"react\";\r\n\r\nexport default function StepperBackground() {\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n}","import React, { ReactComponentElement } from 'react';\r\nimport ReactDOMServer from 'react-dom/server';\r\nimport InitialBackground from './InitialBackground';\r\nimport StepperBackground from './StepperBackground';\r\n\r\nexport const generateFromTemplate = (name: string) => {\r\n let component: any;\r\n let staticMarkup: any;\r\n switch (name) {\r\n case \"stepper\":\r\n component = \r\n break;\r\n case \"initial\":\r\n component = \r\n break;\r\n }\r\n staticMarkup = ReactDOMServer.renderToStaticMarkup(component);\r\n return encodeURIComponent(staticMarkup);\r\n}\r\n\r\n\r\n","import React from \"react\";\r\nimport \"./Background.css\";\r\nimport { isMobile } from \"react-device-detect\";\r\nimport { generateFromTemplate } from \"./Backgrounds/BackgroundGenerator\";\r\nimport { LocalSettings } from \"../configuration/AppConfig\";\r\n\r\nconst Background = (props: BackgroundProperties) => {\r\n let content;\r\n if (props.useTemplate) content = renderContentWithTemplate(props.children);\r\n else content = props.children;\r\n\r\n const logoClassName = LocalSettings.useColorMobileLogo ? \"\" : \"background-logo-inverted\";\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {content}\r\n \r\n );\r\n\r\n\r\n function getBackgroundImageContent(): string {\r\n if (props.useSvg) {\r\n const data = `'data:image/svg+xml,${generateFromTemplate(props.image)}'`\r\n return data;\r\n } else {\r\n return getStaticBackgroundImage(props.image);\r\n }\r\n }\r\n\r\n\r\n function getStaticBackgroundImage(imageName: string) {\r\n switch (imageName) {\r\n case \"finish\":\r\n default:\r\n return LocalSettings.finishBackgroundImage;\r\n }\r\n }\r\n\r\n function renderContentWithTemplate(children: any) {\r\n let displayLogo = props.useLogo && isMobile;\r\n let className = \"merchant-logo-stage-1\";\r\n if (!LocalSettings.useColorMobileLogo){\r\n className += \" background-logo-inverted\";\r\n }\r\n return (\r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    {children}
    \r\n
    \r\n
    \r\n {/* {renderBackgroundFooter()} */}\r\n \r\n );\r\n }\r\n\r\n function renderBackgroundFooter() {\r\n if (props.useFooter) {\r\n let imageDimensionSize, fontSize;\r\n if (isMobile) {\r\n imageDimensionSize = 40;\r\n fontSize = 16;\r\n } else {\r\n imageDimensionSize = 50;\r\n fontSize = \"1.25rem\";\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n Protected by bank-level security\r\n \r\n
    \r\n
    \r\n );\r\n }\r\n }\r\n};\r\n\r\nexport default Background;\r\n\r\ntype BackgroundProperties = {\r\n image: string;\r\n children: any;\r\n useTemplate: boolean;\r\n useFooter: boolean;\r\n useLogo?: boolean;\r\n useSvg?: boolean;\r\n hideMainLogo?: boolean;\r\n};\r\n","import React from \"react\";\r\nimport { Styles } from \"../configuration/AppConfig\";\r\n\r\nexport function StepperProgress(props: StepperProgressProps) {\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport type StepperProgressProps = {\r\n value: number;\r\n}","import React from \"react\";\r\nimport { useMappedState, useDispatch, ActionType } from \"../../store/Store\";\r\nimport { useCallback } from \"react\";\r\nimport { FormGroup, Label, Row, Col, Button } from \"reactstrap\";\r\nimport { LocalSettings, Styles } from \"../../configuration/AppConfig\";\r\n\r\nexport default function StepYearsInBusinessRange(\r\n props: StepYearsInBusinessRangeProps\r\n) {\r\n const data = useStepYearsInBusinessRange();\r\n const dispatch = useDispatch();\r\n\r\n const yearsInBusinessRangeTranslation =\r\n LocalSettings.translation.applicationPage.yearsInBusinessRangeStep;\r\n let size: \"sm\" | \"lg\" | undefined = \"lg\";\r\n\r\n return (\r\n
    \r\n \r\n {yearsInBusinessRangeTranslation.mainTitle}\r\n \r\n
    \r\n \r\n \r\n {renderRange()}\r\n \r\n \r\n
    \r\n
    \r\n );\r\n\r\n function renderRange() {\r\n const selectedStyle = {\r\n backgroundColor: Styles.textColorSecondary,\r\n borderColor: Styles.textColorSecondary,\r\n color: Styles.defaultColor,\r\n boxShadow: \"unset\",\r\n margin: 10,\r\n };\r\n\r\n const unSelectedStyle = {\r\n backgroundColor: Styles.textColorPrimary,\r\n borderColor: Styles.textColorPrimary,\r\n color: Styles.defaultColor,\r\n boxShadow: \"unset\",\r\n margin: 10,\r\n };\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n {\r\n raiseCallback();\r\n data.handleChangeManual(\"yearsInBusinessRange\", \"1\");\r\n }}\r\n size=\"lg\"\r\n >\r\n {yearsInBusinessRangeTranslation.range_1}\r\n \r\n {\r\n raiseCallback();\r\n data.handleChangeManual(\"yearsInBusinessRange\", \"2\");\r\n }}\r\n size=\"lg\"\r\n >\r\n {yearsInBusinessRangeTranslation.range_2}\r\n \r\n {\r\n raiseCallback();\r\n data.handleChangeManual(\"yearsInBusinessRange\", \"3\");\r\n }}\r\n size=\"lg\"\r\n >\r\n {yearsInBusinessRangeTranslation.range_3}\r\n \r\n
    \r\n
    \r\n );\r\n }\r\n\r\n function raiseCallback() {\r\n if (data.yearsInBusinessRange == \"\") {\r\n props.callback();\r\n }\r\n }\r\n\r\n function useStepYearsInBusinessRange(): StepYearsInBusinessRangeState {\r\n const { input } = useMappedState((state) => state);\r\n const handleChangeManual = useCallback(\r\n (propertyName: string, value: any) => {\r\n dispatch({\r\n type: ActionType.CHANGE_INPUT,\r\n value: value,\r\n propertyName: propertyName,\r\n });\r\n },\r\n []\r\n );\r\n\r\n return {\r\n yearsInBusinessRange: input.yearsInBusinessRange,\r\n handleChangeManual,\r\n };\r\n }\r\n}\r\n\r\ntype StepYearsInBusinessRangeState = {\r\n yearsInBusinessRange: string;\r\n handleChangeManual: Function;\r\n};\r\n\r\ntype StepYearsInBusinessRangeProps = {\r\n callback: () => void;\r\n};\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { useMappedState, useDispatch, StepperPageInput } from \"../store/Store\";\r\nimport { useCallback } from \"react\";\r\nimport { ActionType } from \"../store/Store\";\r\nimport StepIndustry from \"./StepperPageSteps/StepIndustry\"; // 1\r\nimport StepAnnualRevenueRange from \"./StepperPageSteps/StepAnnualRevenueRange\"; // 2\r\nimport StepAnnualRevenue from \"./StepperPageSteps/StepAnnualRevenue\"; // 3\r\nimport StepLegalBusinessName from \"./StepperPageSteps/StepLegalBusinessName\"; // 5\r\nimport StepYearsInBusiness from \"./StepperPageSteps/StepYearsInBusiness\"; // 6\r\nimport StepCustomerPersonalDetails from \"./StepperPageSteps/StepCustomerPersonalDetails\"; // 7\r\nimport StepHomeAddress from \"./StepperPageSteps/StepHomeAddress\"; // 8\r\nimport StepBusinessAddress from \"./StepperPageSteps/StepBusinessAddress\"; // 9\r\nimport StepTermsAndConditions from \"./StepperPageSteps/StepTermsAndConditions\"; // 10\r\nimport { validateStepInput } from \"../configuration/StepperConfig\";\r\nimport { AppState, LocalSettings, Styles } from \"../configuration/AppConfig\";\r\nimport { Button } from \"reactstrap\";\r\nimport Api from \"../utils/Api\";\r\nimport LoadingScreen from \"./LoadingScreen\";\r\nimport Background from \"./Background\";\r\nimport { useParams, useHistory } from \"react-router-dom\";\r\nimport \"./StepperPage.css\";\r\nimport ReactCSSTransitionGroup from \"react-addons-css-transition-group\";\r\nimport { HelperFunctions, track } from \"../utils/HelperFunctions\";\r\nimport { isMobile } from \"react-device-detect\";\r\nimport ReactGA from \"react-ga\";\r\nimport TagManager from \"react-gtm-module\";\r\nimport queryString from \"query-string\";\r\nimport { StepperProgress } from \"./StepperProgress\";\r\nimport StepYearsInBusinessRange from \"./StepperPageSteps/StepYearsInBusinessRange\";\r\n\r\nvar keyDownCallback: any = null;\r\nvar popStateCallback: any = null;\r\n\r\nfunction StepperPage() {\r\n const styles = {\r\n continueButton: {\r\n margin: 10,\r\n backgroundColor: Styles.textColorPrimary,\r\n borderColor: Styles.textColorPrimary,\r\n color: Styles.defaultColor,\r\n fontSize: \"1rem\",\r\n },\r\n backButton: {\r\n margin: 10,\r\n backgroundColor: Styles.textColorSecondary,\r\n borderColor: Styles.textColorSecondary,\r\n color: Styles.defaultColor,\r\n fontSize: \"1rem\",\r\n },\r\n };\r\n\r\n const [skipBusinessStep, setSkipBusinessStep] = useState(false);\r\n\r\n const continueToNextStep = () => {\r\n // Submit the updated data on the background and do not redirect to the next screen (banking details)\r\n // OA-67: We disabled the progressive profiling for now,\r\n // TODO: this functionality has been alreayd implemented in Lead Deprecation branch\r\n // submitApplication(false);\r\n switch (data.currentStepNumber) {\r\n case 2:\r\n track(\"Annual revenue range completed\");\r\n break;\r\n case 5:\r\n track(\"Years in business range completed\");\r\n break;\r\n }\r\n data.goToNextStep();\r\n pushStepToHistory(data.currentStepNumber);\r\n HelperFunctions.scrollToTop(10, 30);\r\n }\r\n\r\n const dispatch = useDispatch();\r\n const data = useStepperState();\r\n const { applicationId } = useParams<{ applicationId: string }>();\r\n const history = useHistory();\r\n\r\n // let size: \"sm\" | \"lg\" | undefined = isMobile ? undefined : \"lg\";\r\n let size: \"sm\" | \"lg\" | undefined = \"lg\";\r\n let continueAction: any;\r\n\r\n if (!applicationId) throw new Error(\"Application id should be provided!\");\r\n\r\n let queryParams = queryString.parse(window.location.search);\r\n\r\n //OA-25: Get the redirect url\r\n let redirectPage = queryParams.redirectPage || null;\r\n let userId = queryParams.userId || null;\r\n let companyName = queryParams.companyName || null;\r\n\r\n const stepperTranslation = LocalSettings.translation.applicationPage.stepper;\r\n const pageTranslation = LocalSettings.translation.applicationPage;\r\n\r\n\r\n\r\n\r\n const setState = useCallback(\r\n (state: AppState) =>\r\n dispatch({ type: ActionType.CHANGE_APP_STATE, value: state }),\r\n [dispatch]\r\n );\r\n\r\n window.removeEventListener(\"keydown\", keyDownCallback, true);\r\n keyDownCallback = function (e: any) {\r\n handleUserKeyPress(e);\r\n };\r\n window.addEventListener(\"keydown\", keyDownCallback, true);\r\n\r\n useEffect(() => {\r\n window.removeEventListener(\"popstate\", popStateCallback, true);\r\n popStateCallback = function (e: any) {\r\n handleBrowserButton(e);\r\n };\r\n window.addEventListener(\"popstate\", popStateCallback, true);\r\n }, [data.currentStepNumber]);\r\n\r\n useEffect(() => {\r\n HelperFunctions.setPageTitle(\r\n `${pageTranslation.pageName} - ${LocalSettings.companyName}`\r\n );\r\n ReactGA.initialize(\"UA-15983938-3\");\r\n ReactGA.pageview(window.location.pathname + window.location.search);\r\n\r\n const tagManagerArgs = {\r\n gtmId: \"GTM-KW3ZJC7\",\r\n };\r\n TagManager.initialize(tagManagerArgs);\r\n\r\n setTimeout(() => {\r\n const input = {\r\n type: \"Self\",\r\n applicationId: applicationId,\r\n };\r\n Api.getApplication(\r\n input,\r\n (response: any) => {\r\n const { state, input } = response.data;\r\n\r\n if(state.isNew) {\r\n input.externalId = applicationId;\r\n const urlParams = new URLSearchParams(window.location.search);\r\n Api.createApplication({\r\n ...input,\r\n microsoftClickId: urlParams.get('msclkid'),\r\n language: LocalSettings.language,\r\n type: \"Lead\",\r\n }, \r\n (createResponse: any) => {\r\n history.push(`/application/${createResponse.data.applicationId}?language=en`);\r\n window.location.reload();\r\n }, \r\n (error: any) => {\r\n alert(JSON.stringify(error));\r\n setState(AppState.ERROR);\r\n }\r\n );\r\n return;\r\n }\r\n\r\n const { homeAddress, businessAddress } = input;\r\n\r\n data.handleSetInitialData(input);\r\n\r\n const stepsToSkip: string[] = [];\r\n const skipBusinessAddressStep =\r\n homeAddress && homeAddress === businessAddress;\r\n setSkipBusinessStep(skipBusinessAddressStep);\r\n\r\n if (skipBusinessAddressStep) {\r\n stepsToSkip.push(\"business_addr\");\r\n }\r\n\r\n let steps = getStepsArray(stepsToSkip);\r\n\r\n let currentAppStep = state.currentApplicationSubstep;\r\n if (currentAppStep > steps.length) {\r\n currentAppStep = steps.length;\r\n }\r\n\r\n data.handleSetInitialStep(currentAppStep);\r\n\r\n // This is needed to allow moving backwards using browser's back button\r\n for (let i = currentAppStep; i > 0; i--) {\r\n pushStepToHistory(i);\r\n }\r\n\r\n setState(AppState.READY);\r\n },\r\n (error: any) => {\r\n alert(JSON.stringify(error));\r\n setState(AppState.ERROR);\r\n }\r\n );\r\n }, 1500);\r\n }, []);\r\n\r\n\r\n\r\n const renderedStepper = renderStepper();\r\n return renderedStepper;\r\n\r\n\r\n\r\n function renderRemainingTime() {\r\n return (\r\n \r\n {Math.round((data.totalSteps - data.currentStepNumber + 1) / 2)}{\" \"}\r\n {stepperTranslation.minutesFromFinish}\r\n \r\n );\r\n }\r\n\r\n function renderStepper() {\r\n const percentageCompleted =\r\n (data.currentStepNumber * 100) / data.totalSteps;\r\n\r\n const imageName = \"stepper\";\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n {renderRemainingTime()}\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n {\r\n switch (data.direction) {\r\n case StepperDirection.BACKWARD:\r\n return \"step-transition-reverse\";\r\n case StepperDirection.FORWARD:\r\n return \"step-transition\";\r\n default:\r\n throw new Error(\"Unknown stepper direction!\");\r\n }\r\n })()}\r\n transitionEnterTimeout={0}\r\n transitionLeaveTimeout={0}\r\n component=\"div\"\r\n className=\"stepper-wrapper\"\r\n >\r\n \r\n {data.currentStep}\r\n
    \r\n \r\n
    \r\n
    \r\n
    {renderButtons()}
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n
    An error has occured, please contact support
    ;\r\n \r\n \r\n );\r\n }\r\n\r\n function handleBrowserButton(event: any) {\r\n if (data.currentStepNumber !== 1) {\r\n data.goToPrevStep();\r\n }\r\n }\r\n\r\n function handleUserKeyPress(event: KeyboardEvent): void {\r\n // 'keypress' event misbehaves on mobile so we track 'Enter' key via 'keydown' event\r\n if (event.key === \"Enter\") {\r\n event.preventDefault();\r\n // event.stopPropagation();\r\n if (continueAction && data.valid) continueAction();\r\n }\r\n }\r\n\r\n function getVisibility(stepName: string): \"visible\" | \"hidden\" {\r\n switch (stepName) {\r\n case \"years_range\":\r\n if (data.input.yearsInBusinessRange === \"\") {\r\n return \"hidden\";\r\n } else {\r\n return \"visible\";\r\n }\r\n case \"revenue_range\":\r\n if (data.input.approximateAnnualRevenueRange === \"\") {\r\n return \"hidden\";\r\n } else {\r\n return \"visible\";\r\n }\r\n default:\r\n return \"visible\";\r\n }\r\n }\r\n\r\n function renderButtons(): Array {\r\n let array: Array = [];\r\n\r\n let backAction = () => {\r\n window.history.back();\r\n };\r\n\r\n if (!data.firstStep)\r\n array.push(\r\n \r\n {stepperTranslation.back}\r\n \r\n );\r\n\r\n let nextButtonCaption, nextbuttonClassName;\r\n\r\n if (data.finalStep) {\r\n nextButtonCaption = isMobile\r\n ? stepperTranslation.submitMobile\r\n : stepperTranslation.submit;\r\n // Submit the application and redirect to the next screen (banking details)\r\n continueAction = () => submitApplication(true); //executeRecaptcha();\r\n } else {\r\n nextButtonCaption = stepperTranslation.continue;\r\n continueAction = () => {\r\n submitApplication(false);\r\n continueToNextStep();\r\n };\r\n }\r\n\r\n let pulsateButtonCondition = data.valid;\r\n\r\n switch (data.currentStep.stepName) {\r\n // Annual Revenue:\r\n case \"revenue\":\r\n pulsateButtonCondition =\r\n pulsateButtonCondition &&\r\n data.input.approximateAnnualRevenue !== null &&\r\n data.input.approximateAnnualRevenue >= 80000;\r\n break;\r\n // Years in Business:\r\n // case \"years\":\r\n // // pulsateButtonCondition =\r\n // // pulsateButtonCondition &&\r\n // // data.input.yearsInBusiness !== null &&\r\n // // data.input.yearsInBusiness > 0;\r\n // break;\r\n // Terms And Conditions Step, will introduce the enumeration later:\r\n case \"terms\":\r\n pulsateButtonCondition = pulsateButtonCondition && data.input.consent;\r\n break;\r\n }\r\n\r\n nextbuttonClassName = pulsateButtonCondition ? \"pulsate-bck\" : \"\";\r\n array.push(\r\n \r\n {nextButtonCaption}\r\n \r\n );\r\n return array;\r\n }\r\n\r\n\r\n\r\n function pushStepToHistory(currentStepNumber: number) {\r\n window.history.pushState(\r\n { step: currentStepNumber },\r\n \"step\" + currentStepNumber\r\n );\r\n }\r\n\r\n function addUserId(symbol: \"&\" | \"?\") {\r\n return userId === null ? \"\" : `${symbol}userId=${userId}`;\r\n }\r\n\r\n function submitApplication(redirectToNextScreen: boolean) {\r\n // Set application state to LOADING:\r\n if (redirectToNextScreen) setState(AppState.LOADING);\r\n\r\n const callbackSuccess = (result : any) => {\r\n const applicationId = result.data.applicationId;\r\n\r\n // Move to the next page:\r\n if (redirectToNextScreen) {\r\n let url: string;\r\n if (redirectPage != null) {\r\n url = `/${redirectPage}/${applicationId}?language=${LocalSettings.language}`;\r\n } else {\r\n window.uetq.push(\"event\", \"purchase\", {});\r\n url = `/banking/${applicationId}?language=${LocalSettings.language}`;\r\n }\r\n if (companyName != null) {\r\n url += `&companyName=${companyName}`;\r\n }\r\n window.location.href = url + addUserId(\"&\");\r\n }\r\n };\r\n const callbackError = (error: any) => {\r\n alert(JSON.stringify(error));\r\n setState(AppState.ERROR);\r\n };\r\n\r\n let nextStepNumber: number;\r\n if (data.currentStepNumber < 10) {\r\n nextStepNumber = data.currentStepNumber + 1;\r\n } else {\r\n nextStepNumber = 10;\r\n }\r\n\r\n let currentStepName: string = data.currentStepName;\r\n\r\n //MSD-4319: If both of these fields are set,\r\n //Always overriding industry/subindustry with these values\r\n if (\r\n LocalSettings.defaultIndustry !== null &&\r\n LocalSettings.defaultSubIndustry !== null\r\n ) {\r\n data.input.industry = LocalSettings.defaultIndustry;\r\n data.input.subIndustry = LocalSettings.defaultSubIndustry;\r\n }\r\n\r\n const input = {\r\n ...data.input,\r\n applicationId: applicationId as string,\r\n // recaptchaResponse,\r\n type: \"Self\",\r\n isPartialUpdate: !redirectToNextScreen,\r\n // Next step (we're submitting data before switching the step index)\r\n currentApplicationSubStep: nextStepNumber,\r\n currentApplicationSubStepName: currentStepName,\r\n };\r\n\r\n switch (data.currentStepName) {\r\n case \"industry\":\r\n track(\"Industry completed\");\r\n break;\r\n case \"revenue\":\r\n track(\"Annual revenue completed\");\r\n break;\r\n case \"business_name\":\r\n track(\"Legal business name completed\");\r\n break;\r\n case \"years\":\r\n track(\"Years in business completed\");\r\n break;\r\n case \"personal_details\":\r\n track(\"DOB and Phone number completed\");\r\n break;\r\n case \"home_addr\":\r\n track(\"Home address completed\");\r\n break;\r\n case \"business_addr\":\r\n track(\"Business address completed\");\r\n break;\r\n case \"home_and_business_addr\":\r\n track(\"Home address completed\");\r\n track(\"Business address completed\");\r\n break;\r\n case \"terms\":\r\n data.input.consent ? track(\"Terms and conditions accepted\") : track(\"Terms and conditions not accepted\");\r\n track(\"Application submitted\");\r\n }\r\n\r\n Api.updateApplication(input, callbackSuccess, callbackError);\r\n }\r\n\r\n function getStepsArray(\r\n stepsToSkip: string[] = []\r\n ): { step: any; stepName: string; image: string }[] {\r\n let stepsArray = [];\r\n\r\n if (LocalSettings.defaultSubIndustry == null) {\r\n stepsArray.push({\r\n step: ,\r\n stepName: \"industry\",\r\n image: \"animations_loading_normal.gif\",\r\n });\r\n }\r\n stepsArray.push({\r\n step: ,\r\n stepName: \"revenue_range\",\r\n image: \"animations_scoring_normal.gif\",\r\n });\r\n stepsArray.push({\r\n step: ,\r\n stepName: \"revenue\",\r\n image: \"animations_quoting_normal.gif\",\r\n });\r\n stepsArray.push({\r\n step: ,\r\n stepName: \"business_name\",\r\n image: \"animations_loading_normal.gif\",\r\n });\r\n stepsArray.push({\r\n step: ,\r\n stepName: \"years_range\",\r\n image: \"animations_loading_normal.gif\",\r\n });\r\n stepsArray.push({\r\n step: ,\r\n stepName: \"years\",\r\n image: \"animations_loading_normal.gif\",\r\n });\r\n stepsArray.push({\r\n step: ,\r\n stepName: \"personal_details\",\r\n image: \"animations_loading_normal.gif\",\r\n });\r\n \r\n if (!skipBusinessStep && !stepsToSkip?.includes(\"business_addr\")) {\r\n stepsArray.push({\r\n step: (\r\n \r\n setSkipBusinessStep(skipBusinessStep)\r\n }\r\n />\r\n ),\r\n stepName: \"home_addr\",\r\n image: \"animations_loading_normal.gif\",\r\n });\r\n stepsArray.push({\r\n step: ,\r\n stepName: \"business_addr\",\r\n image: \"animations_loading_normal.gif\",\r\n });\r\n }\r\n else {\r\n stepsArray.push({\r\n step: (\r\n \r\n setSkipBusinessStep(skipBusinessStep)\r\n }\r\n />\r\n ),\r\n stepName: \"home_and_business_addr\",\r\n image: \"animations_loading_normal.gif\",\r\n });\r\n }\r\n stepsArray.push({\r\n step: ,\r\n stepName: \"terms\",\r\n image: \"animations_quoting_normal.gif\",\r\n });\r\n\r\n return stepsArray;\r\n }\r\n\r\n function useStepperState(): StepperState {\r\n const { pageIndex, input, applicationState } = useMappedState(\r\n (state) => state\r\n );\r\n const [direction, setDirection] = useState(StepperDirection.FORWARD);\r\n\r\n const dispatch = useDispatch();\r\n\r\n const steps = getStepsArray();\r\n\r\n let nextStepIndex = pageIndex + 1;\r\n let prevStepIndex = pageIndex - 1;\r\n\r\n const nextStep = useCallback(() => {\r\n setDirection(StepperDirection.FORWARD);\r\n dispatch({ type: ActionType.CHANGE_PAGE, value: nextStepIndex });\r\n }, [dispatch, nextStepIndex]);\r\n const prevStep = useCallback(() => {\r\n setDirection(StepperDirection.BACKWARD);\r\n dispatch({ type: ActionType.CHANGE_PAGE, value: prevStepIndex });\r\n }, [dispatch, prevStepIndex]);\r\n\r\n const handleSetInitialData = useCallback((value: any) => {\r\n dispatch({\r\n type: ActionType.CHANGE_INPUT_ALL,\r\n value: value,\r\n });\r\n }, []);\r\n\r\n const handleSetInitialStep = useCallback((value: number) => {\r\n dispatch({\r\n type: ActionType.CHANGE_PAGE,\r\n value: value,\r\n });\r\n }, []);\r\n\r\n let currentPageIndex;\r\n if (pageIndex > steps.length) {\r\n currentPageIndex = steps.length;\r\n } else {\r\n currentPageIndex = pageIndex;\r\n }\r\n\r\n const currentStep = steps[currentPageIndex - 1];\r\n\r\n return {\r\n applicationState: applicationState,\r\n currentStepNumber: currentPageIndex,\r\n currentStep: currentStep.step,\r\n currentImage: currentStep.image,\r\n currentStepName: currentStep.stepName,\r\n allSteps: steps,\r\n totalSteps: steps.length,\r\n goToNextStep: nextStep,\r\n goToPrevStep: prevStep,\r\n finalStep: currentPageIndex === steps.length,\r\n firstStep: currentPageIndex === 1,\r\n input: input,\r\n valid: validateStepInput(input, currentStep.stepName),\r\n direction: direction,\r\n handleSetInitialData: handleSetInitialData,\r\n handleSetInitialStep: handleSetInitialStep,\r\n };\r\n }\r\n}\r\n\r\ntype StepperState = {\r\n applicationState: AppState;\r\n currentStepNumber: number;\r\n currentStep: any;\r\n currentImage: string;\r\n currentStepName: string;\r\n allSteps: any[];\r\n totalSteps: number;\r\n goToNextStep: Function;\r\n goToPrevStep: Function;\r\n finalStep: boolean;\r\n firstStep: boolean;\r\n input: StepperPageInput;\r\n valid: boolean;\r\n direction: StepperDirection;\r\n handleSetInitialData(value: StepperPageInput): void;\r\n handleSetInitialStep(value: number): void;\r\n};\r\n\r\nenum StepperDirection {\r\n FORWARD = \"forward\",\r\n BACKWARD = \"backward\",\r\n}\r\n\r\nexport default StepperPage;\r\n","import React, { useState } from \"react\";\r\nimport VizSensor from \"react-visibility-sensor\";\r\nimport \"./VisibilityAwareContent.css\";\r\n\r\nexport default function VisibilityAwareContent(props: VisibilityAwareContentProps) {\r\n const [isVisible, setVisibility] = useState();\r\n return (\r\n {\r\n setVisibility(isVisible);\r\n }}\r\n >\r\n
    \r\n {props.children}\r\n
    \r\n \r\n );\r\n}\r\n\r\ntype VisibilityAwareContentProps = {\r\n animationClassName: string;\r\n children: any;\r\n partialVisibility?: boolean;\r\n};\r\n","import React, { useEffect, useState } from \"react\";\r\nimport \"./ScrollToTopButton.css\";\r\nimport { Styles } from \"../configuration/AppConfig\";\r\nimport { HelperFunctions } from \"../utils/HelperFunctions\";\r\n\r\nexport default function ScrollButton(props: ScrollButtonProps) {\r\n useEffect(() => {\r\n window.addEventListener(\"scroll\", setVisibility);\r\n return () => {\r\n window.removeEventListener(\"scroll\", setVisibility);\r\n };\r\n }, []);\r\n\r\n const [visible, setVisible] = useState(false);\r\n\r\n function setVisibility() {\r\n setVisible(window.pageYOffset > 300);\r\n }\r\n\r\n return (\r\n {\r\n HelperFunctions.scrollToTop(props.delayInMs,props.scrollStepInPx);\r\n }}\r\n >\r\n \r\n \r\n );\r\n}\r\n\r\ntype ScrollButtonProps = {\r\n scrollStepInPx: number;\r\n delayInMs: number;\r\n};\r\n","import { useEffect, useState } from \"react\";\r\n\r\nlet cachedScripts: string[] = [];\r\nfunction useScript(url: string) {\r\n const [state, setState] = useState({\r\n loaded: false,\r\n error: false,\r\n });\r\n\r\n useEffect(() => {\r\n // If cachedScripts already contains the url,\r\n // it means that another instance of this hook already loaded this script, so no need to load it again\r\n if (cachedScripts.includes(url)) {\r\n setState({\r\n loaded: true,\r\n error: false,\r\n });\r\n } else {\r\n cachedScripts.push(url);\r\n\r\n // Create script\r\n let script: HTMLScriptElement;\r\n script = document.createElement(\"script\");\r\n script.src = url;\r\n script.async = true;\r\n script.type = \"text/javascript\";\r\n\r\n // Script event listener callbacks for load and error\r\n const onScriptLoad = () => {\r\n setState({\r\n loaded: true,\r\n error: false,\r\n });\r\n };\r\n\r\n const onScriptError = () => {\r\n // Remove from cachedScripts we can try loading again\r\n const index = cachedScripts.indexOf(url);\r\n if (index >= 0) cachedScripts.splice(index, 1);\r\n script.remove();\r\n\r\n setState({\r\n loaded: true,\r\n error: true,\r\n });\r\n };\r\n\r\n script.addEventListener(\"load\", onScriptLoad);\r\n script.addEventListener(\"error\", onScriptError);\r\n document.body.appendChild(script);\r\n\r\n return () => {\r\n script.removeEventListener(\"load\", onScriptLoad);\r\n script.removeEventListener(\"error\", onScriptError);\r\n // document.body.removeChild(script);\r\n };\r\n }\r\n }, [url]);\r\n\r\n return [state.loaded, state.error];\r\n}\r\n\r\nexport default useScript;\r\n","import React from \"react\";\r\nimport { useEffect, useRef } from \"react\";\r\nimport { LocalSettings } from \"../configuration/AppConfig\";\r\nconst TrustBox = () => {\r\n // Create a reference to the
    element which will represent the TrustBox\r\n const ref = useRef(null);\r\n useEffect(() => {\r\n // If window.Trustpilot is available it means that we need to load the TrustBox from our ref.\r\n // If it's not, it means the script you pasted into isn't loaded just yet.\r\n // When it is, it will automatically load the TrustBox.\r\n //@ts-ignore\r\n if (window.Trustpilot) {\r\n //@ts-ignore\r\n window.Trustpilot.loadFromElement(ref.current, true);\r\n }\r\n }, []);\r\n\r\n let locale: \"en-US\" | \"fr-CA\";\r\n let subdomain: \"ca\" | \"fr\";\r\n switch (LocalSettings.language) {\r\n case \"fr\":\r\n locale = \"fr-CA\";\r\n subdomain = \"fr\";\r\n break;\r\n default:\r\n locale = \"en-US\";\r\n subdomain = \"ca\";\r\n break;\r\n }\r\n\r\n return (\r\n \r\n \r\n Trustpilot\r\n \r\n
    \r\n );\r\n};\r\nexport default TrustBox;\r\n","import { Styles } from \"../../configuration/AppConfig\";\r\nimport React from \"react\";\r\nimport \"./CheckIcon.css\";\r\n\r\nexport default function CheckIcon() {\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n}\r\n\r\nexport type CheckIconProps = {\r\n fill: string;\r\n}","import React, { useState, useEffect, useRef } from \"react\";\r\nimport {\r\n useMappedState,\r\n useDispatch,\r\n ActionType,\r\n InitialPageInput,\r\n} from \"../store/Store\";\r\nimport { useCallback } from \"react\";\r\nimport { AppState, LocalSettings } from \"../configuration/AppConfig\";\r\nimport { Button, Form, FormGroup, Input, Row, Col } from \"reactstrap\";\r\nimport { Styles } from \"../configuration/AppConfig\";\r\nimport { HelperFunctions, track } from \"../utils/HelperFunctions\";\r\nimport \"./InitialPage.css\";\r\nimport Api from \"../utils/Api\";\r\nimport Background from \"./Background\";\r\nimport LoadingScreen from \"./LoadingScreen\";\r\n//@ts-ignore\r\nimport VisibilityAwareContent from \"./VisibilityAwareContent\";\r\nimport ScrollToTopButton from \"./ScrollToTopButton\";\r\nimport useScript from \"../hooks/UseScript\";\r\nimport userWindowsDimensions from \"../hooks/UseWindowDimensions\";\r\nimport TrustBox from \"./Trustpilot\";\r\nimport ReCAPTCHA from \"react-google-recaptcha\";\r\nimport ReactGA from \"react-ga\";\r\nimport { useLocation } from \"react-router-dom\";\r\nimport queryString from \"query-string\";\r\nimport { TextMaskPhone } from \"./InputMasks\";\r\nimport TagManager from \"react-gtm-module\";\r\nimport CheckIcon from \"./InitialPageComponents/CheckIcon\";\r\nimport ShieldIcon from \"./InitialPageComponents/ShieldIcon\";\r\nimport Smartlook from \"smartlook-client\";\r\n\r\ndeclare global {\r\n interface Window {\r\n uetq:any;\r\n }\r\n}\r\n\r\nvar callback: any;\r\n\r\nexport default function InitialPage() {\r\n const { height, width } = userWindowsDimensions();\r\n const location = useLocation();\r\n const isMobile = width != null && width < 960;\r\n\r\n useEffect(() => {\r\n track(\"Arrived on the landing page\");\r\n window.location.href = `https://app.merchantgrowth.com/${location.search}`;\r\n }, []);\r\n\r\n const formStyles = {\r\n group: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n justifyContent: \"center\",\r\n flexFlow: \"wrap\",\r\n margin: \"auto\",\r\n maxWidth: 1000,\r\n },\r\n item: {\r\n margin: 10,\r\n minWidth: 300,\r\n maxWidth: 300,\r\n textAlign: \"left\",\r\n \"&::after\": {\r\n content: \"*\",\r\n },\r\n },\r\n subtitle: {\r\n color: Styles.textColorBullet,\r\n margin: 10,\r\n // display: \"flex\",\r\n // alignItems: \"center\",\r\n },\r\n placeholder: {\r\n color: \"rgba(0, 0, 0, 0.4)\",\r\n },\r\n form: {\r\n margin: \"auto\",\r\n // paddingTop: isMobile ? 80 : 10,\r\n // height: isMobile ? \"100vh\" : \"inherit\",\r\n paddingLeft: 10,\r\n paddingRight: 10,\r\n paddingBottom: 10,\r\n maxWidth: 500,\r\n },\r\n formSubmit: {\r\n textAlign: \"center\" as \"center\",\r\n },\r\n icon: {\r\n fill: Styles.iconFill,\r\n marginRight: 20,\r\n },\r\n submitButton: {\r\n backgroundColor: Styles.bgInitialButtonSubmit,\r\n borderColor: Styles.bgInitialButtonSubmit,\r\n color: Styles.textColorSubmit,\r\n borderRadius: 30,\r\n width: 240,\r\n fontSize: \"1rem\",\r\n },\r\n leftSidebar: {\r\n boxShadow:\r\n \"0px 5px 4px rgba(0, 0, 0, 0.07), 0px 15px 35px rgba(50, 50, 93, 0.1)\",\r\n backgroundColor: Styles.defaultColor,\r\n },\r\n logo: {\r\n height: 115.72,\r\n position: isMobile\r\n ? (\"inherit\" as \"inherit\")\r\n : (\"absolute\" as \"absolute\"),\r\n filter:\r\n isMobile && LocalSettings.useColorMobileLogo\r\n ? \"brightness(0) invert(1)\"\r\n : \"\",\r\n imageRendering:\r\n \"-webkit-optimize-contrast\" as \"-webkit-optimize-contrast\",\r\n top: isMobile ? 0 : LocalSettings.bgLogoInitialTopOffsetDesktop,\r\n margin: \"auto\",\r\n marginTop: isMobile ? 10 : -10,\r\n marginBottom: 10,\r\n left: isMobile ? 0 : 25,\r\n },\r\n logoPoweredBy: {\r\n top: 0,\r\n width: 220,\r\n imageRendering:\r\n \"-webkit-optimize-contrast\" as \"-webkit-optimize-contrast\",\r\n position: isMobile\r\n ? (\"inherit\" as \"inherit\")\r\n : (\"absolute\" as \"absolute\"),\r\n margin: \"auto\",\r\n right: 25,\r\n },\r\n prmiaryLabel: {\r\n color: Styles.textColorPrimary,\r\n },\r\n secondaryLabel: {\r\n color: Styles.textColorTitleSecondary,\r\n },\r\n footer: {\r\n backgroundColor: Styles.bgInitialFooterContainer,\r\n textAlign: \"center\" as \"center\",\r\n height: 114,\r\n marginTop: 40,\r\n marginBottom: 40,\r\n },\r\n };\r\n\r\n const dispatch = useDispatch();\r\n const data = useInitialPage();\r\n const [formStateCode, setFormStateCode] = useState(0);\r\n const [googleClientId, setGoogleClientId] = useState(null);\r\n\r\n let size: \"sm\" | \"lg\" | undefined;\r\n let labelStyle: any;\r\n let labelStyleLg: any;\r\n let submitButtonMargin: number | \"auto\" = \"auto\";\r\n let secondLabelMargin: number | \"auto\" = 5;\r\n let bulletsStyle: any;\r\n if (isMobile) {\r\n if (height != null && height >= 700) {\r\n size = \"lg\";\r\n labelStyle = { fontSize: \"1.0rem\" };\r\n labelStyleLg = { fontSize: \"1.2rem\" };\r\n submitButtonMargin = 5;\r\n secondLabelMargin = 5;\r\n } else {\r\n size = undefined;\r\n labelStyle = { fontSize: \"0.875rem\" };\r\n labelStyleLg = { fontSize: \"1rem\" };\r\n secondLabelMargin = 5;\r\n }\r\n bulletsStyle = { fontSize: \"0.875rem\" };\r\n } else {\r\n size = \"lg\";\r\n labelStyle = { fontSize: \"1rem\" };\r\n labelStyleLg = { fontSize: \"1.2rem\" };\r\n bulletsStyle = { fontSize: \"1.25rem\" };\r\n }\r\n\r\n let recaptchaRef = useRef(null);\r\n\r\n const setReadyState = useCallback(\r\n () =>\r\n dispatch({ type: ActionType.CHANGE_APP_STATE, value: AppState.READY }),\r\n [dispatch]\r\n );\r\n const setLoadingState = useCallback(\r\n () =>\r\n dispatch({ type: ActionType.CHANGE_APP_STATE, value: AppState.LOADING }),\r\n [dispatch]\r\n );\r\n const setErrorState = useCallback(\r\n () =>\r\n dispatch({ type: ActionType.CHANGE_APP_STATE, value: AppState.ERROR }),\r\n [dispatch]\r\n );\r\n\r\n useScript(`${process.env.PUBLIC_URL}/assets/js/trustpilot.js`);\r\n\r\n window.removeEventListener(\"keydown\", callback, true);\r\n callback = function (e: any) {\r\n handleUserKeyDown(e);\r\n };\r\n window.addEventListener(\"keydown\", callback, true);\r\n\r\n useEffect(() => {\r\n ReactGA.initialize(\"UA-15983938-3\");\r\n ReactGA.pageview(window.location.pathname + window.location.search);\r\n\r\n //MSD-4031\r\n //@ts-ignore\r\n ReactGA.ga((tracker: any) => {\r\n let clientId = tracker.get(\"clientId\");\r\n setGoogleClientId(clientId);\r\n });\r\n\r\n const tagManagerArgs = {\r\n gtmId: \"GTM-KW3ZJC7\",\r\n };\r\n TagManager.initialize(tagManagerArgs);\r\n\r\n const welcomeTitle = LocalSettings.translation.initialPage.pageName;\r\n HelperFunctions.setPageTitle(\r\n `${welcomeTitle} - ${LocalSettings.companyName}`\r\n );\r\n\r\n setTimeout(() => {\r\n setReadyState();\r\n }, 1000);\r\n\r\n return () => {\r\n window.removeEventListener(\"keydown\", handleUserKeyDown);\r\n };\r\n }, []);\r\n\r\n return
    {renderApplication()}
    ;\r\n\r\n function useInitialPage(): InitialPageState {\r\n const { input, applicationState } = useMappedState((state) => state);\r\n const handleChange = useCallback(\r\n (e: React.ChangeEvent) =>\r\n dispatch({\r\n type: ActionType.CHANGE_INPUT,\r\n value: e.target.value,\r\n propertyName: e.target.name,\r\n }),\r\n []\r\n );\r\n\r\n let queryParams = queryString.parse(location.search);\r\n\r\n //MSD-4016: Campaign details\r\n let utmSource = queryParams.utm_source || null;\r\n let utmMedium = queryParams.utm_medium || null;\r\n let utmCampaign = queryParams.utm_campaign || null;\r\n let utmTerm = queryParams.utm_term || null;\r\n let utmContent = queryParams.utm_content || null;\r\n let googleClickId = queryParams.gclid || null;\r\n let userId = queryParams.userId || null;\r\n let companyName = queryParams.companyName || null;\r\n let externalId = queryParams.externalId || null;\r\n\r\n // TODO: This is a temporary workaround for a certain userId, should be removed:\r\n if (userId === \"0052M000009FEPZ=merrco\") {\r\n window.location.href =\r\n \"/welcome?userId=0052M000009FEPZ&companyName=merrco\";\r\n }\r\n if (userId === \"0052M000009Xhqi=Payfirma\") {\r\n window.location.href =\r\n \"/welcome?userId=0052M000009Xhqi&companyName=Payfirma\";\r\n }\r\n\r\n return {\r\n applicationState: applicationState,\r\n input: {\r\n firstName: input.firstName,\r\n lastName: input.lastName,\r\n email: input.email,\r\n businessName: input.businessName,\r\n utmSource: utmSource,\r\n utmMedium: utmMedium,\r\n utmCampaign: utmCampaign,\r\n utmTerm: utmTerm,\r\n utmContent: utmContent,\r\n googleClickId: googleClickId,\r\n userId: userId,\r\n companyName: companyName,\r\n phoneNumber: input.phoneNumber,\r\n partnerExternalId: externalId,\r\n referenceSource: input.referenceSource,\r\n },\r\n handleChange,\r\n };\r\n }\r\n\r\n function renderApplication() {\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n \r\n {renderInitialPage()}\r\n \r\n \r\n );\r\n }\r\n\r\n // switch (data.applicationState) {\r\n // case AppState.LOADING:\r\n // return;\r\n // case AppState.READY:\r\n // return;\r\n // default:\r\n // throw new Error(`Unsupported state: ${data.applicationState}`);\r\n // }\r\n\r\n function executeRecaptcha() {\r\n recaptchaRef.current?.execute();\r\n }\r\n\r\n function handleUserKeyDown(event: KeyboardEvent): void {\r\n if (event.key === \"Enter\") {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n //Validate form:\r\n if (handleValidateForm()) {\r\n // Set application state to LOADING:\r\n setLoadingState();\r\n // Execute Google recaptcha\r\n executeRecaptcha();\r\n // handleSubmitInitialPage();\r\n } else {\r\n setFormStateCode(-1);\r\n }\r\n }\r\n }\r\n\r\n function submitApplication(recaptchaResponse: string) {\r\n const successCallback = (response: any) => {\r\n // Move to the next page:\r\n const userIdStr = input.userId ? `?userId=${input.userId}` : \"\";\r\n const languageStr =\r\n (userIdStr === \"\" ? \"?\" : \"&\") + `language=${LocalSettings.language}`;\r\n\r\n const companyNameStr = input.companyName\r\n ? `&companyName=${input.companyName}`\r\n : \"\";\r\n window.location.href = `/application/${response.data.applicationId}${userIdStr}${languageStr}${companyNameStr}`;\r\n };\r\n\r\n const errorCallback = (errorResponse: any) => {\r\n alert(\"Error!\");\r\n };\r\n\r\n window.uetq=window.uetq || [];\r\n window.uetq.push('set', { 'pid': {\r\n 'em': data.input.email,\r\n 'ph': data.input.phoneNumber,\r\n }});\r\n window.uetq.push(\"event\", \"submit_lead_form\", {});\r\n\r\n const urlParams = new URLSearchParams(window.location.search);\r\n let input = {\r\n ...data.input,\r\n recaptchaResponse,\r\n microsoftClickId: urlParams.get('msclkid'),\r\n language: LocalSettings.language,\r\n googleAnalyticsId: googleClientId,\r\n subType: \"General\",\r\n type: \"Self\",\r\n };\r\n\r\n Smartlook.identify(data.input.email || \"\", {\r\n business: data.input.businessName,\r\n name: `${data.input.firstName} ${data.input.lastName}`,\r\n });\r\n track(\"Landing page info completed\");\r\n\r\n Api.createApplication(input, successCallback, errorCallback);\r\n }\r\n\r\n function handleValidateForm() {\r\n let inputData = data.input;\r\n return (\r\n !HelperFunctions.isEmpty(inputData.firstName) &&\r\n !HelperFunctions.isEmpty(inputData.lastName) &&\r\n HelperFunctions.emailIsValid(inputData.email) &&\r\n !HelperFunctions.isEmpty(inputData.businessName) &&\r\n (HelperFunctions.isEmpty(inputData.phoneNumber) ||\r\n HelperFunctions.phoneIsValid(inputData.phoneNumber))\r\n );\r\n }\r\n\r\n function getSubmitButtonClass() {\r\n if (handleValidateForm()) {\r\n return \"eligibility-button pulsate-bck\";\r\n } else {\r\n return \"eligibility-button\";\r\n }\r\n }\r\n\r\n function handleInvalidEmail(email: string) {\r\n if (HelperFunctions.isEmpty(email)) {\r\n return LocalSettings.translation.initialPage.emailInvalid;\r\n } else if (!HelperFunctions.emailIsValid(email)) {\r\n return LocalSettings.translation.initialPage.emailInvalidFormat;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n function renderQuoteBlock() {\r\n if (isMobile) {\r\n return {renderQuoteBlockBody()};\r\n } else {\r\n return {renderQuoteBlockBody()};\r\n }\r\n }\r\n\r\n function renderQuoteBlockBody() {\r\n return [\r\n \r\n \r\n ,\r\n \r\n
    \r\n \r\n “{LocalSettings.translation.initialPage.testimonialText}“\r\n

    \r\n
    \r\n {LocalSettings.translation.initialPage.testimonialAuthor}\r\n
    \r\n
    \r\n ,\r\n ];\r\n }\r\n\r\n function renderFooter() {\r\n let sourcesArray: string[] = [\r\n \"source_1.png\",\r\n \"source_2.png\",\r\n \"source_3.png\",\r\n \"source_4.png\",\r\n \"source_5.png\",\r\n \"source_6.png\",\r\n \"source_7.png\",\r\n \"source_8.png\",\r\n \"source_9.png\",\r\n \"source_10.jpg\",\r\n \"source_11.png\",\r\n \"source_12.jpg\",\r\n \"source_13.jpg\",\r\n ];\r\n\r\n let widthsAndHeightsArray: {\r\n width: number;\r\n height: number;\r\n className: string;\r\n }[] = [\r\n {\r\n width: 54,\r\n height: 54,\r\n className: \"do-not-show-1400px\",\r\n },\r\n {\r\n width: 128,\r\n height: 51,\r\n className: \"do-not-show-1400px\",\r\n },\r\n {\r\n width: 56,\r\n height: 55,\r\n className: \"do-not-show-1200px\",\r\n },\r\n {\r\n width: 64,\r\n height: 57,\r\n className: \"do-not-show-1200px\",\r\n },\r\n {\r\n width: 104,\r\n height: 39,\r\n className: \"do-not-show-1200px\",\r\n },\r\n {\r\n width: 75,\r\n height: 58,\r\n className: \"do-not-show-1000px\",\r\n },\r\n {\r\n width: 169,\r\n height: 35,\r\n className: \"do-not-show-1000px\",\r\n },\r\n {\r\n width: 55,\r\n height: 55,\r\n className: \"do-not-show-1000px\",\r\n },\r\n {\r\n width: 92,\r\n height: 46,\r\n className: \"do-not-show-1000px\",\r\n },\r\n {\r\n width: 56,\r\n height: 54,\r\n className: \"do-not-show-800px\",\r\n },\r\n {\r\n width: 135,\r\n height: 135,\r\n className: \"do-not-show-800px\",\r\n },\r\n {\r\n width: 55,\r\n height: 56,\r\n className: \"do-not-show-800px\",\r\n },\r\n {\r\n width: 56,\r\n height: 56,\r\n className: \"do-not-show-800px\",\r\n },\r\n ];\r\n\r\n let currentWindowWidth = width || 0;\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n {LocalSettings.translation.initialPage.trustedByCanadians}\r\n
    \r\n \r\n {sourcesArray.map((value: string, index: number) => {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n })}\r\n
    \r\n \r\n
    \r\n \r\n 1200 ? 200 : 100,\r\n marginRight: currentWindowWidth > 1200 ? 200 : 100,\r\n marginTop: 30,\r\n marginBottom: 30,\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n flexFlow: \"row\",\r\n }}\r\n >\r\n
    \r\n \r\n
    \r\n
    \r\n \r\n 1200 ? 18 : 16,\r\n color: Styles.textColorDescription,\r\n }}\r\n >\r\n {\r\n LocalSettings.translation.initialPage\r\n .bottomTextFirstParagraph\r\n }\r\n

    \r\n 1200 ? 18 : 16,\r\n color: Styles.textColorDescription,\r\n }}\r\n >\r\n {\r\n LocalSettings.translation.initialPage\r\n .bottomTextSecondParagraph\r\n }\r\n

    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n 500 ? 170 : 150,\r\n marginLeft: currentWindowWidth > 1200 ? 220 : 10,\r\n }}\r\n >\r\n 1200 ? 220 : 10,\r\n fontSize: currentWindowWidth > 800 ? 16 : 12,\r\n width: currentWindowWidth > 500 ? \"auto\" : 190,\r\n }}\r\n >\r\n \r\n {LocalSettings.translation.initialPage.address}:{\" \"}\r\n \r\n {LocalSettings.formattedAddress}\r\n \r\n \r\n \r\n {LocalSettings.translation.initialPage.emailUs}:{\" \"}\r\n \r\n {LocalSettings.email}\r\n \r\n \r\n \r\n {LocalSettings.translation.initialPage.callUs}:{\" \"}\r\n \r\n {LocalSettings.formattedPhone}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n function renderInitialPage() {\r\n const useLandingPage = LocalSettings.useLandingPage;\r\n const inputData = data.input;\r\n const backgrondImageName =\r\n width !== null && width < 500 ? \"initial\" : \"initial\";\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 {LocalSettings.translation.initialPage.greetingPrimary}\r\n \r\n {/* \r\n {LocalSettings.translation.initialPage.greetingSecondary}\r\n

    */}\r\n
    \r\n
    \r\n \r\n data.handleChange(e)}\r\n invalid={\r\n HelperFunctions.isEmpty(inputData.firstName) &&\r\n formStateCode === -1\r\n }\r\n >\r\n
    \r\n {LocalSettings.translation.initialPage.firstNameInvalid}\r\n
    \r\n
    \r\n \r\n data.handleChange(e)}\r\n invalid={\r\n HelperFunctions.isEmpty(inputData.lastName) &&\r\n formStateCode === -1\r\n }\r\n >\r\n
    \r\n {LocalSettings.translation.initialPage.lastNameInvalid}\r\n
    \r\n
    \r\n \r\n data.handleChange(e)}\r\n invalid={\r\n (HelperFunctions.isEmpty(inputData.email) &&\r\n formStateCode === -1) ||\r\n (!HelperFunctions.isEmpty(inputData.email) &&\r\n !HelperFunctions.emailIsValid(inputData.email) &&\r\n formStateCode === -1)\r\n }\r\n >\r\n
    \r\n {handleInvalidEmail(inputData.email)}\r\n
    \r\n
    \r\n \r\n data.handleChange(e)}\r\n invalid={\r\n HelperFunctions.isEmpty(inputData.businessName) &&\r\n formStateCode === -1\r\n }\r\n >\r\n
    \r\n {\r\n LocalSettings.translation.initialPage\r\n .businessNameInvalid\r\n }\r\n
    \r\n
    \r\n \r\n data.handleChange(e)}\r\n invalid={\r\n !HelperFunctions.isEmpty(inputData.phoneNumber) &&\r\n !HelperFunctions.phoneIsValid(\r\n inputData.phoneNumber\r\n ) &&\r\n formStateCode === -1\r\n }\r\n >\r\n
    \r\n {\r\n LocalSettings.translation.initialPage\r\n .mobilePhoneInvalid\r\n }\r\n
    \r\n
    \r\n \r\n data.handleChange(e)}\r\n style={{color: \"#adb5bd\"}}\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 //Validate form:\r\n if (handleValidateForm()) {\r\n setLoadingState();\r\n executeRecaptcha();\r\n // handleSubmitInitialPage();\r\n } else {\r\n setFormStateCode(-1);\r\n }\r\n }}\r\n style={{\r\n ...formStyles.submitButton,\r\n margin: submitButtonMargin,\r\n }}\r\n >\r\n {LocalSettings.translation.initialPage.submit}\r\n \r\n
    \r\n
    \r\n
    \r\n {\r\n if (response != null) submitApplication(response);\r\n else alert(\"An error has occured!\");\r\n }}\r\n onExpired={() => {\r\n recaptchaRef.current?.execute();\r\n }}\r\n />\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n 780 ? 10 : 0,\r\n paddingBottom: useLandingPage ? 0 : 10,\r\n textAlign: \"center\",\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n {LocalSettings.translation.initialPage.protectedBy}\r\n \r\n
    \r\n \r\n \r\n
    \r\n \r\n \r\n
    \r\n {LocalSettings.translation.initialPage.items.map((item) => (\r\n \r\n \r\n \r\n \r\n \r\n
    {item}
    \r\n
    \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n
    {renderQuoteBlock()}
    \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 {renderFooter()}\r\n \r\n
    500 ? \"block\" : \"none\" }}>\r\n \r\n
    \r\n \r\n );\r\n }\r\n}\r\n\r\ntype InitialPageState = {\r\n applicationState: AppState;\r\n input: InitialPageInput;\r\n handleChange: Function;\r\n};\r\n","import React from \"react\";\r\nimport { Styles } from \"../../configuration/AppConfig\";\r\nimport \"./ShieldIcon.css\";\r\n\r\nexport default function ShieldIcon() {\r\n return (\r\n
    \r\n \r\n \r\n \r\n
    \r\n )\r\n}","import { useState, useEffect } from \"react\";\r\n\r\nexport default function useWindowDimensions() {\r\n const hasWindow = typeof window !== \"undefined\";\r\n\r\n function getWindowDimensions() {\r\n const width = hasWindow ? window.innerWidth : null;\r\n const height = hasWindow ? window.innerHeight : null;\r\n return {\r\n width,\r\n height,\r\n };\r\n }\r\n\r\n const [windowDimensions, setWindowDimensions] = useState(\r\n getWindowDimensions()\r\n );\r\n\r\n useEffect(() => {\r\n if (hasWindow) {\r\n window.addEventListener(\"resize\", handleResize);\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n }\r\n }, [hasWindow]);\r\n\r\n function handleResize() {\r\n setWindowDimensions(getWindowDimensions());\r\n }\r\n\r\n return windowDimensions;\r\n}\r\n","import React, { useEffect, useCallback } from \"react\";\r\nimport Background from \"./Background\";\r\nimport { useDispatch, ActionType, useMappedState } from \"../store/Store\";\r\nimport { AppState, LocalSettings, Styles } from \"../configuration/AppConfig\";\r\nimport LoadingScreen from \"./LoadingScreen\";\r\nimport { HelperFunctions } from \"../utils/HelperFunctions\";\r\nimport LinkedInTag from \"react-linkedin-insight\";\r\nimport ReactGA from \"react-ga\";\r\nimport TagManager from \"react-gtm-module\";\r\n\r\nexport default function FinishPage() {\r\n const dispatch = useDispatch();\r\n const { applicationState } = useMappedState((state) => state);\r\n const setReadyState = useCallback(\r\n () =>\r\n dispatch({ type: ActionType.CHANGE_APP_STATE, value: AppState.READY }),\r\n [dispatch]\r\n );\r\n\r\n const finishTranslation = LocalSettings.translation.finishPage;\r\n\r\n useEffect(() => {\r\n HelperFunctions.setPageTitle(\r\n `${finishTranslation.pageName} - ${LocalSettings.companyName}`\r\n );\r\n\r\n LinkedInTag.init(\"3430250\");\r\n LinkedInTag.track();\r\n\r\n ReactGA.initialize(\"UA-15983938-3\");\r\n ReactGA.pageview(window.location.pathname + window.location.search);\r\n\r\n const tagManagerArgs = {\r\n gtmId: \"GTM-KW3ZJC7\",\r\n };\r\n\r\n TagManager.initialize(tagManagerArgs);\r\n\r\n setTimeout(() => {\r\n setReadyState();\r\n setTimeout(() => {\r\n if (LocalSettings.website) window.location.href = LocalSettings.website;\r\n }, 5000);\r\n }, 1500);\r\n }, []);\r\n\r\n return renderFinishPage();\r\n\r\n function renderFinishPage() {\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n {finishTranslation.mainTitle}\r\n \r\n
    \r\n {finishTranslation.secondaryTitle}\r\n
    \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","import React, { useState, useEffect, useCallback } from \"react\";\r\nimport ModalDialog from \"./ModalDialog\";\r\nimport { Styles, AppState, LocalSettings } from \"../configuration/AppConfig\";\r\nimport { Input, Button } from \"reactstrap\";\r\nimport Background from \"./Background\";\r\nimport { isMobile } from \"react-device-detect\";\r\nimport { useMappedState, ActionType, useDispatch } from \"../store/Store\";\r\nimport LoadingScreen, { LoadingAnimation } from \"./LoadingScreen\";\r\nimport { HelperFunctions } from \"../utils/HelperFunctions\";\r\nimport { useParams } from \"react-router-dom\";\r\n//@ts-ignore\r\nimport CurrencyFormat from \"react-currency-format\";\r\nimport Api from \"../utils/Api\";\r\nimport { SignalRMapping, useSignalR } from \"../hooks/UseSignalR\";\r\nimport \"./QuotePage.css\";\r\n\r\nconst styles = {\r\n quoteDialogContent: {\r\n minWidth: 300,\r\n },\r\n quoteMultilineText: {\r\n minWidth: 300,\r\n width: \"75%\",\r\n margin: \"auto\",\r\n },\r\n modalBody: {\r\n fontSize: \"15px\",\r\n fontWeight: 600,\r\n maxWidth: 500,\r\n margin: \"auto\",\r\n marginBottom: 20,\r\n },\r\n};\r\n\r\nconst commonStyles = {\r\n container: {\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n flexFlow: \"column\",\r\n },\r\n header: {\r\n color: \"rgb(139, 139, 139)\",\r\n margin: 20,\r\n fontWeight: 400,\r\n textAlign: \"left\" as \"left\",\r\n },\r\n itemGroup: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\" as \"wrap\",\r\n float: \"right\" as \"right\",\r\n justifyContent: \"center\",\r\n width: \"100%\",\r\n },\r\n itemStyle: {\r\n margin: 25,\r\n },\r\n itemStyleSmall: {\r\n margin: 5,\r\n },\r\n margin: {\r\n margin: 15,\r\n },\r\n label: {\r\n color: \"#559091\",\r\n },\r\n centered: {\r\n textAlign: \"center\" as \"center\",\r\n padding: 10,\r\n color: \"#559091\",\r\n },\r\n bold: {\r\n fontWeight: 700,\r\n },\r\n uppercase: {\r\n textTransform: \"uppercase\" as \"uppercase\",\r\n },\r\n underlined: {\r\n textDecoration: \"underline\" as \"underline\",\r\n },\r\n bottomBorder: {\r\n borderBottom: \"3px solid #C5D7D6\",\r\n },\r\n boldText: {\r\n fontWeight: 800,\r\n },\r\n gradient: {\r\n background: \"linear-gradient(90deg, #3FC3EE 3.23%, #33B787 96.48%)\",\r\n webkitBackgroundClip: \"text\",\r\n webkitTextFillColor: \"rgba(255,255,255,0)\",\r\n },\r\n};\r\n\r\nconst quoteStyles = {\r\n quoteStyle: {\r\n minWidth: 250,\r\n textAlign: \"center\" as \"center\",\r\n },\r\n quotesTitle: {\r\n margin: 20,\r\n color: \"#919191\",\r\n textAlign: \"left\" as \"left\",\r\n fontWeight: 400,\r\n },\r\n group: {\r\n display: \"flex\",\r\n flexFlow: \"row\",\r\n justifyContent: \"center\" as \"center\",\r\n flexWrap: \"wrap\" as \"wrap\",\r\n },\r\n item: {\r\n margin: \"auto\",\r\n width: \"100%\",\r\n display: \"flex\",\r\n padding: 10,\r\n justifyContent: \"space-between\",\r\n borderBottom: \"1px dotted rgb(145, 145, 145)\",\r\n },\r\n helpText: {\r\n margin: 8,\r\n minWidth: 120,\r\n textAlign: \"left\" as \"left\",\r\n },\r\n title: {\r\n color: Styles.textColorPrimary,\r\n },\r\n largeTitle: {\r\n fontSize: \"2.5rem\",\r\n },\r\n label: {\r\n color: \"#919191\",\r\n fontWeight: 500,\r\n // position: \"absolute\",\r\n left: 0,\r\n },\r\n value: {\r\n color: \"#919191\",\r\n fontWeight: 500,\r\n textAlign: \"left\" as \"left\",\r\n // position: \"absolute\",\r\n right: 0,\r\n },\r\n imageContainer: {\r\n position: \"absolute\",\r\n top: 0,\r\n left: 0,\r\n },\r\n image: {\r\n width: 150,\r\n float: \"left\",\r\n },\r\n relative: {\r\n position: \"relative\" as \"relative\",\r\n padding: 0,\r\n },\r\n error: {\r\n color: \"red\",\r\n },\r\n};\r\n\r\nconst sidebarStyles = {\r\n itemStyle: {\r\n margin: 25,\r\n },\r\n buttonStyle: {\r\n color: Styles.defaultColor,\r\n boxShadow: \"none\",\r\n },\r\n declineButton: {\r\n backgroundColor: Styles.textColorWarning,\r\n borderColor: Styles.textColorWarning,\r\n },\r\n acceptButton: {\r\n backgroundColor: Styles.textColorSecondary,\r\n borderColor: Styles.textColorSecondary,\r\n },\r\n changeButton: {\r\n backgroundColor: Styles.textColorPrimary,\r\n borderColor: Styles.textColorPrimary,\r\n },\r\n value: {\r\n color: \"#919191\",\r\n fontWeight: \"500\",\r\n margin: 15,\r\n },\r\n headerStyle: {\r\n color: \"#919191\",\r\n margin: 20,\r\n fontWeight: 400,\r\n },\r\n paperStyle: {\r\n color: \"#919191\",\r\n width: \"100%\",\r\n float: \"left\",\r\n },\r\n};\r\n\r\nexport default function QuotePage(props: QuoteProps) {\r\n const dispatch = useDispatch();\r\n const data = useQuoteState(props);\r\n\r\n const { applicationId } = useParams<{ applicationId: string }>();\r\n if (applicationId == null)\r\n throw new Error(\"applicationId should be specified!\");\r\n\r\n const [dialogName, setDialogName] = useState(QuoteDialog.NONE);\r\n\r\n const [quoteLoadingState, setQuoteLoadingState] = useState(\r\n {\r\n loadingAnimation: LoadingAnimation.DEFAULT,\r\n loadingMessage: \"Please wait\",\r\n loadingMessageDescription: \"We're loading your application\",\r\n }\r\n );\r\n\r\n const [quoteAmount, setQuoteAmount] = useState(0);\r\n\r\n useEffect(() => {\r\n // HelperFunctions.setPageTitle(\"Application - Merchant Growth\");\r\n }, []);\r\n\r\n const setReadyState = useCallback(\r\n () =>\r\n dispatch({ type: ActionType.CHANGE_APP_STATE, value: AppState.READY }),\r\n [dispatch]\r\n );\r\n\r\n let handlers: Array = [\r\n {\r\n hubFunctionName: \"NotifyStatus\",\r\n hubCallback: (result: any) => {\r\n switch (result.status) {\r\n case 0:\r\n setQuoteLoadingState({\r\n loadingAnimation: LoadingAnimation.DEFAULT,\r\n loadingMessage: \"Please wait\",\r\n loadingMessageDescription: \"We're loading your application\",\r\n });\r\n break;\r\n case 1:\r\n setQuoteLoadingState({\r\n loadingAnimation: LoadingAnimation.PROCESSING,\r\n loadingMessage: \"Processing you bank statements\",\r\n loadingMessageDescription: \"This can take up to 2 minutes\",\r\n });\r\n break;\r\n case 2:\r\n setQuoteLoadingState({\r\n loadingAnimation: LoadingAnimation.SCORING,\r\n loadingMessage: \"Calculating your score\",\r\n loadingMessageDescription: \"We're calculating your score\",\r\n });\r\n break;\r\n case 3:\r\n setQuoteLoadingState({\r\n loadingAnimation: LoadingAnimation.QUOTING,\r\n loadingMessage: \"Preparing the quote\",\r\n loadingMessageDescription:\r\n \"We're preparing a personalized quote for you\",\r\n });\r\n break;\r\n case 4:\r\n setTimeout(() => {\r\n const input = {\r\n type: \"Self\",\r\n applicationId: applicationId,\r\n };\r\n Api.getApplication(\r\n input,\r\n (response: any) => {\r\n let data = response.data;\r\n setQuoteAmount(data.quoteAmount);\r\n setReadyState();\r\n },\r\n (error: any) => {\r\n alert(JSON.stringify(error));\r\n // setErrorState();\r\n }\r\n );\r\n }, 1500);\r\n break;\r\n }\r\n },\r\n },\r\n ];\r\n\r\n useSignalR(applicationId, Api.getHubUrl(), handlers);\r\n\r\n useEffect(() => {\r\n HelperFunctions.setPageTitle(`Quote - ${LocalSettings.companyName}`);\r\n }, []);\r\n\r\n return renderQuotePage();\r\n\r\n function useQuoteState(props: QuoteProps): QuoteState {\r\n const { applicationState } = useMappedState((state) => state);\r\n return {\r\n applicationState: applicationState,\r\n };\r\n }\r\n\r\n function renderQuotePage() {\r\n switch (data.applicationState) {\r\n case AppState.LOADING:\r\n return (\r\n \r\n );\r\n case AppState.READY:\r\n return (\r\n \r\n {renderQuoteBody()}\r\n {renderQuoteModalDialog()}\r\n \r\n );\r\n default:\r\n throw new Error(`Unsupported state: ${data.applicationState}`);\r\n }\r\n }\r\n\r\n function renderQuoteBody() {\r\n return (\r\n \r\n \r\n
    \r\n \r\n Congratulations! You've been pre-qualified for:\r\n
    \r\n
    \r\n
    \r\n \r\n {HelperFunctions.formatCurrency(quoteAmount, 2, 2)}\r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n {/*
    \r\n
    \r\n
    \r\n
    \r\n
    {renderQuoteDetails()}
    \r\n
    \r\n
    \r\n
    */}\r\n {renderQuoteButtons()}\r\n \r\n );\r\n }\r\n\r\n function renderQuoteDetails() {\r\n let quote = {\r\n isSuccessful: true,\r\n weeklyPaymentAmount: 400,\r\n totalInterest: 10,\r\n percentage: 4,\r\n reason: \"\",\r\n term: 12,\r\n };\r\n\r\n if (quote.isSuccessful) {\r\n return (\r\n
    \r\n {/*
    \r\n
    Total Loan Amount:
    \r\n
    \r\n \r\n
    \r\n
    */}\r\n
    \r\n
    Weekly Payment:
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    Terms:
    \r\n
    {quote.term} Months
    \r\n
    \r\n
    \r\n
    Total Interest:
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    Simple Percentage:
    \r\n
    {quote.percentage.toFixed(2)}%
    \r\n
    \r\n
    \r\n );\r\n } else {\r\n return (\r\n
    \r\n
    {quote.reason}
    \r\n
    \r\n );\r\n }\r\n }\r\n\r\n function renderQuoteButtons() {\r\n if (isMobile) {\r\n return (\r\n
    \r\n
    \r\n setDialogName(QuoteDialog.ACCEPT)}\r\n >\r\n \r\n {/* */}\r\n \r\n \r\n Tap to accept quote\r\n \r\n \r\n {/* */}\r\n
    \r\n
    \r\n setDialogName(QuoteDialog.DECLINE)}\r\n >\r\n \r\n {/* */}\r\n \r\n \r\n Decline quote\r\n \r\n \r\n
    \r\n
    \r\n setDialogName(QuoteDialog.CHANGE_TERMS)}\r\n >\r\n \r\n {/* */}\r\n \r\n \r\n Change quote\r\n \r\n \r\n
    \r\n
    \r\n );\r\n } else {\r\n return (\r\n
    \r\n
    \r\n setDialogName(QuoteDialog.ACCEPT)}\r\n >\r\n {/* */}\r\n Accept Quote\r\n \r\n
    \r\n
    \r\n setDialogName(QuoteDialog.DECLINE)}\r\n >\r\n {/* */}\r\n Decline Quote\r\n \r\n
    \r\n
    \r\n setDialogName(QuoteDialog.CHANGE_TERMS)}\r\n >\r\n {/* */}\r\n Change Terms\r\n \r\n
    \r\n
    \r\n );\r\n }\r\n }\r\n\r\n function redirectToNextStep() {\r\n window.location.href = `/documents/${applicationId}`;\r\n }\r\n\r\n function renderQuoteModalDialog() {\r\n let dialogDetails: any = {};\r\n\r\n switch (dialogName) {\r\n case QuoteDialog.ACCEPT:\r\n dialogDetails.buttonAgreeStyle = {\r\n color: Styles.defaultColor,\r\n backgroundColor: Styles.textColorSecondary,\r\n boxShadow: \"none\",\r\n };\r\n dialogDetails.buttonDisagreeStyle = { display: \"none\" };\r\n dialogDetails.agreeCaption = \"Proceed with your application\";\r\n dialogDetails.disagreeCaption = \"Close\";\r\n dialogDetails.hideCloseButton = true;\r\n dialogDetails.handleAgree = () => {\r\n redirectToNextStep();\r\n };\r\n dialogDetails.handleDisagree = () => {\r\n setDialogName(QuoteDialog.NONE);\r\n };\r\n dialogDetails.body = (\r\n
    \r\n \r\n

    Success!

    \r\n
    \r\n
    Thank you for accepting the quote!
    \r\n
    Please proceed to complete the application
    \r\n
    \r\n {/* {\r\n this.props.handleQuoteMessageChange(\"accepted\", e);\r\n }}\r\n /> */}\r\n
    \r\n );\r\n break;\r\n case QuoteDialog.DECLINE:\r\n dialogDetails.agreeCaption = \"Submit\";\r\n dialogDetails.disagreeCaption = \"Go Back\";\r\n dialogDetails.buttonAgreeStyle = {\r\n color: Styles.defaultColor,\r\n backgroundColor: Styles.textColorPrimary,\r\n boxShadow: \"none\",\r\n };\r\n dialogDetails.buttonDisagreeStyle = {\r\n color: Styles.textColorPrimary,\r\n backgroundColor: Styles.defaultColor,\r\n boxShadow: \"none\",\r\n };\r\n dialogDetails.handleAgree = () => {\r\n redirectToNextStep();\r\n // this.props.handleQuoteStatus(\"declined\");\r\n };\r\n dialogDetails.handleDisagree = () => {\r\n setDialogName(QuoteDialog.NONE);\r\n };\r\n dialogDetails.body = (\r\n
    \r\n \r\n

    How can we do better?

    \r\n
    \r\n
    We would love to understand your needs better!
    \r\n
    \r\n Drop us a line below and one of our funding specialists will\r\n take a closer look at your application\r\n
    \r\n
    \r\n {\r\n // this.props.handleQuoteMessageChange(\"declined\", e);\r\n }}\r\n />\r\n
    \r\n );\r\n break;\r\n case QuoteDialog.CHANGE_TERMS:\r\n dialogDetails.agreeCaption = \"Request Change\";\r\n dialogDetails.disagreeCaption = \"Close\";\r\n dialogDetails.buttonAgreeStyle = {\r\n color: Styles.defaultColor,\r\n backgroundColor: Styles.textColorPrimary,\r\n boxShadow: \"none\",\r\n };\r\n dialogDetails.buttonDisagreeStyle = {\r\n color: Styles.textColorPrimary,\r\n backgroundColor: Styles.defaultColor,\r\n boxShadow: \"none\",\r\n };\r\n dialogDetails.handleAgree = () => {\r\n redirectToNextStep();\r\n // this.props.handleQuoteStatus(\"changeterms\");\r\n };\r\n dialogDetails.handleDisagree = () => {\r\n setDialogName(QuoteDialog.NONE);\r\n };\r\n dialogDetails.body = (\r\n
    \r\n \r\n

    What should we change?

    \r\n
    \r\n
    Please let us know what terms you would like to modify.
    \r\n
    \r\n One of our funding specialists will be in contact with you\r\n shortly to discuss alternative options.\r\n
    \r\n
    \r\n {\r\n // this.props.handleQuoteMessageChange(\"changeterms\", e);\r\n }}\r\n />\r\n
    \r\n );\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n return (\r\n {\r\n dialogDetails.handleAgree();\r\n }}\r\n handleDisagreed={() => {\r\n dialogDetails.handleDisagree();\r\n }}\r\n handleClose={() => {\r\n setDialogName(QuoteDialog.NONE);\r\n }}\r\n >\r\n
    {dialogDetails.body}
    \r\n \r\n );\r\n }\r\n}\r\n\r\nenum QuoteDialog {\r\n ACCEPT = \"accept\",\r\n DECLINE = \"decline\",\r\n CHANGE_TERMS = \"change_terms\",\r\n NONE = \"\",\r\n}\r\n\r\ntype QuoteState = {\r\n applicationState: AppState;\r\n};\r\n\r\ntype QuoteProps = {};\r\n\r\ntype QuoteLoadingState = {\r\n loadingAnimation: LoadingAnimation;\r\n loadingMessage: string;\r\n loadingMessageDescription: string;\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport { HubConnection, HubConnectionBuilder } from \"@microsoft/signalr\";\r\n\r\nexport const useSignalR = (\r\n applicationId: string,\r\n url: string,\r\n mapping: Array\r\n): void => {\r\n\r\n useEffect(() => {\r\n const createHubConnection = async () => {\r\n const hubConnect = new HubConnectionBuilder().withUrl(url).build();\r\n\r\n try {\r\n await hubConnect.start();\r\n console.log(\"Connection successful!\");\r\n } catch (error) {\r\n alert(JSON.stringify(error));\r\n }\r\n\r\n mapping.forEach(mapping => {\r\n hubConnect.on(mapping.hubFunctionName, mapping.hubCallback);\r\n });\r\n\r\n const connectData : SignalRConnectData = {\r\n applicationId,\r\n // TODO: make it an input parameter\r\n type : \"Self_Status\"\r\n }\r\n\r\n hubConnect.invoke(\"Connect\", JSON.stringify(connectData)).catch(function(data) {\r\n alert(\"Oops, we cannot connect to the server...\");\r\n });\r\n\r\n return () => {\r\n hubConnect.stop();\r\n };\r\n };\r\n createHubConnection();\r\n }, []);\r\n \r\n};\r\n\r\nexport type SignalRMapping = {\r\n hubCallback(...args: any[]): void;\r\n hubFunctionName: string;\r\n};\r\n\r\ntype SignalRConnectData = {\r\n applicationId: string,\r\n type: string\r\n}\r\n\r\n","import React, { useEffect, useState } from \"react\";\r\nimport Dropzone from \"dropzone\";\r\nimport {\r\n Button,\r\n ListGroupItem,\r\n ListGroup,\r\n Row,\r\n Col,\r\n Spinner,\r\n Progress,\r\n} from \"reactstrap\";\r\nimport Api from \"../utils/Api\";\r\nimport { LocalSettings, Styles } from \"../configuration/AppConfig\";\r\nimport { isMobile } from \"react-device-detect\";\r\nimport { FileUploadStatus, UploadStateEnum } from \"./DocumentPageUploadFile\";\r\n\r\nDropzone.autoDiscover = false;\r\nlet dropZone: Dropzone;\r\n\r\nfunction UploadDropZone(props: DropZoneProps) {\r\n const styles = {\r\n dropZoneMessage: {\r\n minHeight: 100,\r\n display: \"flex\",\r\n backgroundColor: Styles.bgDropzone,\r\n },\r\n dropZoneDescription: {\r\n maxHeight: 50,\r\n margin: \"auto\",\r\n color: Styles.defaultColor,\r\n },\r\n uploadItemName: {\r\n fontSize: \"30px\",\r\n },\r\n uploadButtonMobile: {\r\n backgroundColor: Styles.bgDropzone,\r\n height: 100,\r\n width: 250,\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n border: \"1px dashed #DEE2E6\",\r\n boxSizing: \"border-box\" as \"border-box\",\r\n borderRadius: 4,\r\n margin: \"auto\",\r\n },\r\n };\r\n\r\n const documentsTranslation = LocalSettings.translation.documentsPage;\r\n\r\n const [percentage, setPercentage] = useState(0);\r\n const [\r\n mobileFilesToUploadCount,\r\n setMobileFilesToUploadCount,\r\n ] = useState(0);\r\n let mobileFilesToUpload: FileList;\r\n\r\n const uploadFiles = (): void => {\r\n if (isMobile) {\r\n if (mobileFilesToUpload) handleFileUpload(mobileFilesToUpload);\r\n } else {\r\n dropZone.processQueue();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (!isMobile) {\r\n setupDropzone();\r\n } else {\r\n setUploadMethodReference();\r\n }\r\n }, []);\r\n\r\n let data = useDropZone(props);\r\n\r\n if (isMobile) {\r\n return renderMobileUploader();\r\n } else {\r\n return renderDropzone();\r\n }\r\n\r\n function useDropZone(props: DropZoneProps): DropZoneState {\r\n return {\r\n externalId: props.externalId,\r\n applicationId: props.applicationId,\r\n itemName: props.itemName,\r\n itemStatus: props.itemStatus,\r\n };\r\n }\r\n\r\n function setupDropzone() {\r\n const { setUploadState } = props;\r\n\r\n let dropZoneElement = document.getElementById(\"dropzone-multiple\");\r\n if (!dropZoneElement) throw new Error(\"Cannot find dropzone element!\");\r\n\r\n dropZone = new Dropzone(dropZoneElement, {\r\n url: Api.getUploadUrl(),\r\n thumbnailWidth: undefined,\r\n thumbnailHeight: undefined,\r\n //@ts-ignore\r\n paramName: getFileName,\r\n previewsContainer: document.getElementsByClassName(\r\n \"dz-preview-multiple\"\r\n )[0] as HTMLElement,\r\n previewTemplate: document.getElementsByClassName(\"dz-preview-multiple\")[0]\r\n .innerHTML,\r\n // maxFiles: 1,\r\n acceptedFiles: undefined,\r\n autoProcessQueue: false,\r\n parallelUploads: 100,\r\n uploadMultiple: true,\r\n init: function () {\r\n this.on(\"addedfiles\", function (files) {\r\n setUploadState(UploadStateEnum.Selected);\r\n });\r\n this.on(\"removedfile\", function (file) {\r\n if (dropZone.files.length === 0) {\r\n setUploadState(UploadStateEnum.Opened);\r\n }\r\n });\r\n this.on(\"sendingmultiple\", function (files, xhr, formData) {\r\n formData.append(\"applicationId\", data.applicationId);\r\n formData.append(\"externalId\", data.externalId);\r\n formData.append(\"type\", \"Self\");\r\n });\r\n this.on(\"successmultiple\", function (file: any, response: any) {\r\n dropZone.removeAllFiles();\r\n setUploadState(UploadStateEnum.Uploaded);\r\n props.uploadFinishedCallback(response);\r\n });\r\n this.on(\"uploadprogress\", function (file: any) {\r\n const { bytesSent, total } = file.upload;\r\n let progressEvent = { loaded: bytesSent, total: total };\r\n handleSetUploadPercentageFromEvent(progressEvent);\r\n });\r\n },\r\n });\r\n\r\n setUploadMethodReference();\r\n\r\n document.getElementsByClassName(\"dz-preview-multiple\")[0].innerHTML = \"\";\r\n }\r\n\r\n function setUploadMethodReference() {\r\n // Setting the upload method reference to be used from the modal dialog:\r\n const { uploadMethodRef } = props;\r\n uploadMethodRef.current = uploadFiles;\r\n }\r\n\r\n function getFileName(): string {\r\n return \"files\";\r\n }\r\n\r\n function handleSetUploadPercentageFromEvent(progressEvent: any) {\r\n const { loaded, total } = progressEvent;\r\n let newValue = Math.round((loaded * 100) / total);\r\n setPercentage(newValue);\r\n }\r\n\r\n function handleFileSelect(files: FileList) {\r\n const { setUploadState } = props;\r\n mobileFilesToUpload = files;\r\n setMobileFilesToUploadCount(files.length);\r\n setUploadState(UploadStateEnum.Selected);\r\n }\r\n\r\n function handleFileUpload(files: FileList): void {\r\n const { setUploadState } = props;\r\n\r\n let formData: FormData = new FormData();\r\n formData.append(\"applicationId\", data.applicationId);\r\n formData.append(\"externalId\", data.externalId);\r\n formData.append(\"type\", \"Self\");\r\n Array.from(files).forEach((file) => {\r\n formData.append(\"files\", file);\r\n });\r\n\r\n // Setting uploading state to \"Processing\":\r\n setUploadState(UploadStateEnum.Processing);\r\n\r\n Api.uploadFile(\r\n formData,\r\n (response: any) => {\r\n setUploadState(UploadStateEnum.Uploaded);\r\n props.uploadFinishedCallback(response);\r\n },\r\n (errorResponse: any) => {\r\n props.uploadErrorCallback(errorResponse);\r\n },\r\n (progressEvent: any) => {\r\n handleSetUploadPercentageFromEvent(progressEvent);\r\n }\r\n );\r\n }\r\n\r\n function renderDropzone() {\r\n const { itemName } = data;\r\n const { uploadState } = props;\r\n\r\n let displayStyle: string;\r\n switch (uploadState) {\r\n case UploadStateEnum.Opened:\r\n case UploadStateEnum.Selected:\r\n displayStyle = \"inherit\";\r\n break;\r\n case UploadStateEnum.Processing:\r\n case UploadStateEnum.Uploaded:\r\n displayStyle = \"none\";\r\n break;\r\n }\r\n\r\n \r\n\r\n return (\r\n
    \r\n

    {documentsTranslation.dzChooseFilesText.replace('$itemName', itemName)}

    \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 {renderDropZoneProgress(percentage)}\r\n
    \r\n
    \r\n {documentsTranslation.dzDropFilesToUploadText}\r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n\r\n function renderDropZoneProgress(percentage: number) {\r\n const { uploadState } = props;\r\n switch (uploadState) {\r\n case UploadStateEnum.Uploaded:\r\n return (\r\n \r\n \r\n \r\n {documentsTranslation.dzFilesUploadedText}\r\n \r\n \r\n );\r\n case UploadStateEnum.Processing:\r\n return renderProgressBar(percentage);\r\n }\r\n }\r\n\r\n function renderUploaderButton(itemPercentage: number) {\r\n const { uploadState } = props;\r\n switch (uploadState) {\r\n case UploadStateEnum.Selected:\r\n return (\r\n
    \r\n {mobileFilesToUploadCount} {documentsTranslation.dzFilesSelected}{\" \"}\r\n
    \r\n );\r\n case UploadStateEnum.Processing:\r\n return renderProgressBar(itemPercentage);\r\n case UploadStateEnum.Opened:\r\n return (\r\n
    \r\n
    \r\n
    \r\n {\r\n if (e.target.files && e.target.files?.length > 0) {\r\n let files: FileList = e.target.files;\r\n handleFileSelect(files);\r\n }\r\n }}\r\n />\r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n }\r\n\r\n function renderMobileUploader() {\r\n const { itemName } = data;\r\n const { uploadState } = props;\r\n let contents;\r\n\r\n switch (uploadState) {\r\n case UploadStateEnum.Uploaded:\r\n contents = (\r\n
    \r\n \r\n
    {documentsTranslation.dzThankYou}
    \r\n
    \r\n {mobileFilesToUploadCount} {documentsTranslation.dzFilesWereUploadedText}\r\n
    \r\n
    {documentsTranslation.dzTapFinishToContinueText}
    \r\n
    \r\n {documentsTranslation.dzUploadMorePart1Text}{\" \"}\r\n \r\n {documentsTranslation.dzUploadMorePart2Text}\r\n {\" \"}\r\n {documentsTranslation.dzUploadMorePart3Text}\r\n
    \r\n
    \r\n );\r\n break;\r\n default:\r\n contents = (\r\n
    \r\n \r\n
    {documentsTranslation.dzPleaseUploadYour}
    \r\n
    {itemName}
    \r\n
    {renderUploaderButton(percentage)}
    \r\n
    \r\n );\r\n break;\r\n }\r\n return (\r\n
    \r\n {contents}\r\n
    \r\n );\r\n }\r\n\r\n function uploadMoreMobile() {\r\n const { setUploadState } = props;\r\n setUploadState(UploadStateEnum.Opened);\r\n }\r\n\r\n function renderProgressBar(percentage: number) {\r\n if (percentage === 100) {\r\n return (\r\n \r\n \r\n \r\n {documentsTranslation.dzProcessingFiles}\r\n \r\n \r\n );\r\n } else {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n }\r\n}\r\n\r\ntype DropZoneState = {\r\n externalId: string;\r\n applicationId: string;\r\n itemName: string;\r\n itemStatus: FileUploadStatus;\r\n};\r\n\r\ntype DropZoneProps = {\r\n externalId: string;\r\n applicationId: string;\r\n itemName: string;\r\n itemStatus: FileUploadStatus;\r\n uploadFinishedCallback: Function;\r\n uploadErrorCallback: Function;\r\n uploadMethodRef: React.MutableRefObject<(() => void) | undefined>;\r\n uploadState: UploadStateEnum;\r\n setUploadState: React.Dispatch>;\r\n};\r\n\r\nexport default UploadDropZone;\r\n","import React, { useRef, useState } from \"react\";\r\nimport { LocalSettings, Styles } from \"../configuration/AppConfig\";\r\nimport { Button } from \"reactstrap\";\r\nimport { RemainingItem } from \"../store/Store\";\r\nimport ModalDialog from \"../components/ModalDialog\";\r\nimport UploadDropZone from \"../components/UploadDropZone\";\r\nimport { useParams } from \"react-router-dom\";\r\n\r\nexport const DocumentPageUploadFile = (props: DocumentPageUploadProps) => {\r\n const styles = {\r\n uploadCaption: {\r\n float: \"left\",\r\n },\r\n uploadButton: {\r\n backgroundColor: Styles.textColorStart,\r\n borderColor: Styles.textColorStart,\r\n color: Styles.defaultColor,\r\n width: 120,\r\n },\r\n body1: {\r\n fontSize: 10,\r\n },\r\n caption: {\r\n fontSize: 14,\r\n },\r\n completedButton: {\r\n backgroundColor: Styles.defaultColor,\r\n borderColor: Styles.defaultColor,\r\n color: Styles.textColorSecondary,\r\n boxShadow: \"unset\",\r\n width: 120\r\n },\r\n actionContainer: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n borderRadius: Styles.documentUploadBorderRadius,\r\n backgroundColor: Styles.defaultColor,\r\n boxShadow:\r\n \"0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08)\",\r\n padding: 10,\r\n margin: \"auto\",\r\n },\r\n textItem: {\r\n color: Styles.textColorPrimary,\r\n fontSize: \"1rem\",\r\n },\r\n textItemDescription: {\r\n color: \"rgb(117, 117, 117)\",\r\n fontSize: \"0.8rem\",\r\n },\r\n icon: {\r\n margin: 10,\r\n },\r\n itemName: {\r\n width: 300,\r\n textAlign: \"left\" as \"left\",\r\n },\r\n };\r\n\r\n const uploadMethodRef = useRef<() => void>();\r\n const [uploadState, setUploadState] = useState(\r\n UploadStateEnum.Opened\r\n );\r\n const [modalDialogOpen, setModalDialogOpen] = useState(false);\r\n const [fileUploadStatus, setFileUploadStatus] = useState(\r\n props.status as FileUploadStatus\r\n );\r\n const [\r\n fileUploadStatusDescription,\r\n setFileUploadStatusDescription,\r\n ] = useState(null);\r\n\r\n const documentsTranslation = LocalSettings.translation.documentsPage;\r\n\r\n const data = useDocumentPageUploadFile(props);\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n {props.itemName}\r\n
    \r\n
    {props.description}
    \r\n
    \r\n
    \r\n
    {renderUploadButton(fileUploadStatus)}
    \r\n {/*
    {renderUploadButton(props.status)}
    */}\r\n
    \r\n
    \r\n
    {renderUploadDialog()}
    \r\n
    \r\n );\r\n\r\n function handleUploadFinished(response: any): void {\r\n setFileUploadStatus(FileUploadStatus.SUCCESS);\r\n }\r\n\r\n function handleErrorUpload(errorResponse: any): void {\r\n setFileUploadStatusDescription(errorResponse.data.message);\r\n setFileUploadStatus(FileUploadStatus.ERROR);\r\n }\r\n\r\n function renderImage(fileUploadStatus: FileUploadStatus) {\r\n switch (fileUploadStatus) {\r\n case FileUploadStatus.SUCCESS:\r\n return `${process.env.PUBLIC_URL}/assets/svg/completed.svg`;\r\n default:\r\n return `${process.env.PUBLIC_URL}/assets/svg/warning.svg`;\r\n }\r\n }\r\n\r\n function renderUploadButton(status: FileUploadStatus) {\r\n switch (status) {\r\n // Submitted\r\n case FileUploadStatus.SUCCESS:\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n // Not Submitted\r\n default:\r\n return (\r\n setModalDialogOpen(true)}\r\n >\r\n {documentsTranslation.uploadButtonText}\r\n \r\n );\r\n }\r\n }\r\n\r\n function renderUploadDialog() {\r\n let agreeText: string;\r\n let uploadLaterText: string = documentsTranslation.ufUploadLaterText;\r\n let agreeEnabled: boolean = false;\r\n let hideCloseButton: boolean = false;\r\n let handleAgreed: Function;\r\n let handleClose: Function = () => {\r\n setUploadState(UploadStateEnum.Opened);\r\n setModalDialogOpen(false);\r\n };\r\n switch (uploadState) {\r\n case UploadStateEnum.Opened:\r\n agreeText = documentsTranslation.ufUploadText;\r\n agreeEnabled = false;\r\n hideCloseButton = false;\r\n handleAgreed = () => {};\r\n break;\r\n case UploadStateEnum.Selected:\r\n agreeText = documentsTranslation.ufUploadSelected;\r\n agreeEnabled = true;\r\n hideCloseButton = false;\r\n handleAgreed = () => {\r\n setUploadState(UploadStateEnum.Processing);\r\n if (uploadMethodRef.current) uploadMethodRef.current();\r\n };\r\n break;\r\n case UploadStateEnum.Processing:\r\n agreeText = documentsTranslation.ufUploadSelected;\r\n agreeEnabled = false;\r\n hideCloseButton = false;\r\n handleAgreed = () => {};\r\n break;\r\n case UploadStateEnum.Uploaded:\r\n agreeText = documentsTranslation.ufUploadFinish;\r\n agreeEnabled = true;\r\n hideCloseButton = true;\r\n handleAgreed = () => {\r\n setModalDialogOpen(false);\r\n };\r\n break;\r\n default:\r\n throw new Error(\"Unknown status!\");\r\n }\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n
    \r\n );\r\n }\r\n\r\n function useDocumentPageUploadFile(item: RemainingItem): UploadFileData {\r\n const { applicationId } = useParams<{ applicationId: string }>();\r\n if (!applicationId) throw new Error(\"applicationId should be specified!\");\r\n return {\r\n applicationId: applicationId,\r\n externalId: item.externalId,\r\n itemName: item.itemName,\r\n status: item.status,\r\n };\r\n }\r\n};\r\n\r\ntype UploadFileData = {\r\n applicationId: string;\r\n externalId: string;\r\n itemName: string;\r\n status: string;\r\n};\r\n\r\ntype DocumentPageUploadProps = {\r\n externalId: string;\r\n itemName: string;\r\n description: string;\r\n status: string;\r\n};\r\n\r\nexport enum UploadStateEnum {\r\n Opened = \"opened\",\r\n Selected = \"selected\",\r\n Processing = \"processing\",\r\n Uploaded = \"uploaded\",\r\n}\r\n\r\nexport enum FileUploadStatus {\r\n SUCCESS = \"Submitted\",\r\n ERROR = \"Cancelled\",\r\n NEW = \"Requested\",\r\n RESUBMISSION_REQUESTED = \"Re-Requested\",\r\n}\r\n","import React from \"react\";\r\nimport { LocalSettings, Styles } from \"../configuration/AppConfig\";\r\nimport { Button } from \"reactstrap\";\r\n\r\nexport function DocumentPageAction(props: DocumentPageActionProps) {\r\n const styles = {\r\n uploadButton: {\r\n backgroundColor: Styles.textColorStart,\r\n borderColor: Styles.textColorStart,\r\n color: Styles.defaultColor,\r\n width: 120,\r\n },\r\n completedButton: {\r\n backgroundColor: Styles.defaultColor,\r\n borderColor: Styles.defaultColor,\r\n color: Styles.textColorSecondary,\r\n boxShadow: \"unset\",\r\n },\r\n actionContainer: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n borderRadius: Styles.documentUploadBorderRadius,\r\n backgroundColor: Styles.defaultColor,\r\n boxShadow:\r\n \"0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08)\",\r\n padding: 10,\r\n margin: \"auto\",\r\n },\r\n textSpan: {\r\n color: Styles.textColorPrimary,\r\n fontSize: \"1rem\",\r\n },\r\n textItemDescription: {\r\n color: \"rgb(117, 117, 117)\",\r\n fontSize: \"0.8rem\",\r\n },\r\n icon: {\r\n margin: 10,\r\n },\r\n itemName: {\r\n width: 300,\r\n textAlign: \"left\" as \"left\",\r\n },\r\n };\r\n\r\n const documentPageTranslation = LocalSettings.translation.documentsPage;\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n {props.itemName}\r\n
    \r\n
    {props.description}
    \r\n
    \r\n
    \r\n
    {getActionButton(props.status)}
    \r\n
    \r\n
    \r\n
    \r\n );\r\n\r\n function getActionButton(status: string) {\r\n switch (status) {\r\n // Incompleted\r\n case `${documentPageTranslation.requestedButtonText}`:\r\n return (\r\n
    \r\n props.action()}\r\n >\r\n {documentPageTranslation.requestedButtonText}\r\n \r\n
    \r\n );\r\n // In Progress\r\n case `${documentPageTranslation.continueButtonText}`:\r\n return (\r\n
    \r\n props.action()}\r\n >\r\n {documentPageTranslation.continueButtonText}\r\n \r\n
    \r\n );\r\n // Completed\r\n case `${documentPageTranslation.completedButtonText}`:\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n default:\r\n throw new Error(`Unknown Status: ${status}`);\r\n }\r\n }\r\n\r\n function getImage(status: string) {\r\n switch (status) {\r\n case `${documentPageTranslation.continueButtonText}`:\r\n case `${documentPageTranslation.requestedButtonText}`:\r\n return `${process.env.PUBLIC_URL}/assets/svg/warning.svg`;\r\n case `${documentPageTranslation.completedButtonText}`:\r\n return `${process.env.PUBLIC_URL}/assets/svg/completed.svg`;\r\n default:\r\n throw new Error(`Unknown Status: ${status}`);\r\n }\r\n }\r\n}\r\n\r\nexport type DocumentPageActionProps = {\r\n itemName: string;\r\n description: string;\r\n status: string;\r\n action: Function;\r\n};\r\n","import React, { useCallback, useEffect, useState } from \"react\";\r\nimport { Styles, AppState, LocalSettings } from \"../configuration/AppConfig\";\r\nimport { DocumentPageUploadFile } from \"./DocumentPageUploadFile\";\r\nimport {\r\n DocumentPageAction,\r\n DocumentPageActionProps,\r\n} from \"./DocumentPageAction\";\r\nimport { RemainingItem } from \"../store/Store\";\r\nimport { useMappedState, useDispatch, ActionType } from \"../store/Store\";\r\nimport LoadingScreen from \"./LoadingScreen\";\r\nimport Background from \"./Background\";\r\nimport \"./DocumentPage.css\";\r\nimport { Button } from \"reactstrap\";\r\nimport { HelperFunctions, track } from \"../utils/HelperFunctions\";\r\nimport ModalDialog from \"./ModalDialog\";\r\nimport TermsAndConditions from \"./TermsAndConditions\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport Api from \"../utils/Api\";\r\nimport TagManager from \"react-gtm-module\";\r\nimport queryString from \"query-string\";\r\nimport ReactGA from \"react-ga\";\r\n\r\nexport default function DocumentPage() {\r\n const styles = {\r\n root: {\r\n maxWidth: \"600px\",\r\n margin: \"auto\",\r\n },\r\n main: {\r\n width: \"100%\",\r\n textAlign: \"center\",\r\n padding: \"10px 0px 10px 0px\",\r\n },\r\n title: {\r\n textAlign: \"center\",\r\n },\r\n subtitle: {\r\n textAlign: \"left\",\r\n },\r\n uploadItem: {\r\n margin: 10,\r\n },\r\n uploadItemPadding: {\r\n padding: 20,\r\n position: \"relative\",\r\n boxShadow:\r\n \"0px 5px 4px rgba(0, 0, 0, 0.07), 0px 15px 35px rgba(50, 50, 93, 0.1)\",\r\n borderRadius: 5,\r\n },\r\n details: {\r\n maxWidth: 450,\r\n textAlign: \"left\",\r\n },\r\n body1: {\r\n fontSize: 15,\r\n },\r\n caption: {\r\n fontSize: 14,\r\n },\r\n menu: {\r\n height: 100,\r\n backgroundColor: Styles.menuColor,\r\n position: \"relative\",\r\n },\r\n homeLink: {\r\n top: 38,\r\n left: 50,\r\n position: \"absolute\",\r\n color: Styles.defaultColor,\r\n textTransform: \"uppercase\",\r\n fontWeight: \"bold\",\r\n },\r\n mainTitle: {\r\n color: Styles.textColorPrimary,\r\n textAlign: \"center\",\r\n fontSize: 24,\r\n fontWeight: \"bold\",\r\n },\r\n tools: {\r\n position: \"absolute\",\r\n right: 50,\r\n top: 38,\r\n },\r\n toolItem: {\r\n marginLeft: 20,\r\n marginRight: 20,\r\n },\r\n submitButton: {\r\n backgroundColor: Styles.textColorPrimary,\r\n borderColor: Styles.textColorPrimary,\r\n color: Styles.defaultColor,\r\n borderRadius: 30,\r\n width: 260,\r\n margin: 30,\r\n fontSize: \"1rem\",\r\n },\r\n };\r\n const { applicationId } = useParams<{ applicationId: string }>();\r\n const dispatch = useDispatch();\r\n const data = useDocumentsPage();\r\n\r\n const documentsTranslation = LocalSettings.translation.documentsPage;\r\n\r\n const setReadyState = useCallback(\r\n () =>\r\n dispatch({ type: ActionType.CHANGE_APP_STATE, value: AppState.READY }),\r\n [dispatch]\r\n );\r\n const setErrorState = useCallback(\r\n () =>\r\n dispatch({ type: ActionType.CHANGE_APP_STATE, value: AppState.ERROR }),\r\n [dispatch]\r\n );\r\n\r\n const setDocuments = useCallback(\r\n (value: RemainingItem[]) =>\r\n dispatch({ type: ActionType.CHANGE_DOCUMENTS, value: value }),\r\n [dispatch]\r\n );\r\n\r\n let queryParams = queryString.parse(window.location.search);\r\n const userId = queryParams.userId || null;\r\n const companyName = queryParams.companyName || null;\r\n const companyNameStr = companyName ? `&companyName=${companyName}`: '';\r\n\r\n const [termsDialogOpen, setTermsDialogOpen] = useState(false);\r\n const [bankStatus, setBankStatus] = useState(\"not_started\");\r\n const [appSubmitted, setAppSubmitted] = useState(false);\r\n const [filesOnlyMode, setFilesOnlyMode] = useState(false);\r\n\r\n if (!applicationId) throw new Error(\"Application id should be provided!\");\r\n\r\n useEffect(() => {\r\n HelperFunctions.setPageTitle(\r\n `${documentsTranslation.pageName} - ${LocalSettings.companyName}`\r\n );\r\n const input = {\r\n type: \"Self_Remaining_Items\",\r\n language: LocalSettings.language,\r\n applicationId: applicationId,\r\n };\r\n\r\n ReactGA.initialize(\"UA-15983938-3\");\r\n ReactGA.pageview(window.location.pathname + window.location.search);\r\n\r\n const tagManagerArgs = {\r\n gtmId: \"GTM-KW3ZJC7\",\r\n };\r\n TagManager.initialize(tagManagerArgs);\r\n\r\n Api.getApplication(\r\n input,\r\n (response: any) => {\r\n setDocuments(response.data.items);\r\n setBankStatus(response.data.bankStatus);\r\n setAppSubmitted(response.data.isSubmitted);\r\n setFilesOnlyMode(response.data.filesOnlyMode);\r\n data.handleChangeManual(\"consent\", response.data.consent);\r\n setTimeout(() => {\r\n setReadyState();\r\n }, 1500);\r\n },\r\n (error: any) => {\r\n alert(JSON.stringify(error));\r\n setErrorState();\r\n }\r\n );\r\n }, []);\r\n\r\n return
    {renderDocumentsPage()}
    ;\r\n\r\n function submit() {\r\n track(\"Submit application on documents page clicked\");\r\n window.location.href = `/finish?language=${LocalSettings.language}` + addUserId(\"&\") + companyNameStr;\r\n }\r\n\r\n function addUserId(symbol: \"&\" | \"?\") {\r\n return userId === null ? \"\" : `${symbol}userId=${userId}`;\r\n }\r\n\r\n function renderDocumentsPage() {\r\n if (!applicationId) throw new Error(\"Application id should be provided!\");\r\n\r\n let actions: DocumentPageActionProps[] = [];\r\n\r\n if (!filesOnlyMode) {\r\n actions.push({\r\n itemName: documentsTranslation.businessInfo,\r\n description: documentsTranslation.actionBusinessInformation,\r\n status: appSubmitted\r\n ? documentsTranslation.completedButtonText\r\n : documentsTranslation.requestedButtonText,\r\n action: () => {\r\n window.location.href =\r\n `/application/${applicationId}?language=${LocalSettings.language}&redirectPage=documents${companyNameStr}` +\r\n addUserId(\"&\");\r\n },\r\n });\r\n actions.push({\r\n itemName: documentsTranslation.termsAndConditions,\r\n description: documentsTranslation.actionTermsAndConditions,\r\n status: data.consent\r\n ? documentsTranslation.completedButtonText\r\n : documentsTranslation.requestedButtonText,\r\n action: () => {\r\n setTermsDialogOpen(true);\r\n },\r\n });\r\n\r\n let bankConnectStatusText: string;\r\n let description: string;\r\n\r\n switch (bankStatus) {\r\n case \"not_started\":\r\n bankConnectStatusText = documentsTranslation.requestedButtonText;\r\n description = documentsTranslation.actionConnectBank;\r\n break;\r\n case \"connected\":\r\n bankConnectStatusText = documentsTranslation.completedButtonText;\r\n description = documentsTranslation.actionBankConnectedText;\r\n break;\r\n case \"not_listed\":\r\n bankConnectStatusText = documentsTranslation.requestedButtonText;\r\n description = documentsTranslation.actionBankNotListed;\r\n break;\r\n case \"paper_statements\":\r\n bankConnectStatusText = documentsTranslation.requestedButtonText;\r\n description = documentsTranslation.actionPaperStatements;\r\n break;\r\n case \"in_progress\":\r\n bankConnectStatusText = documentsTranslation.continueButtonText;\r\n description = documentsTranslation.actionContinueConnectingBank;\r\n break;\r\n default:\r\n throw new Error(`Unknown status: '${bankStatus}'`);\r\n }\r\n\r\n actions.push({\r\n itemName: documentsTranslation.connectBank,\r\n description: description,\r\n status: bankConnectStatusText,\r\n action: () => {\r\n window.location.href =\r\n `/banking/${applicationId}?language=${LocalSettings.language}${companyNameStr}` +\r\n addUserId(\"&\");\r\n },\r\n });\r\n }\r\n\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n \r\n \r\n
    \r\n \r\n {documentsTranslation.mainTitle}\r\n \r\n \r\n {documentsTranslation.secondaryTitle}\r\n \r\n {actions.map((item, index) => {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n })}\r\n {data.documents.map((item, index) => {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n })}\r\n {\r\n submit();\r\n }}\r\n >\r\n {documentsTranslation.submitButtonText}\r\n \r\n setTermsDialogOpen(false)}\r\n handleAgreed={() => {\r\n data.handleChangeManual(\"consent\", true);\r\n const consentInput = {\r\n type: \"Self_Update_Consent\",\r\n applicationId: applicationId,\r\n consent: true,\r\n };\r\n Api.getApplication(\r\n consentInput,\r\n (response: any) => {},\r\n (error: any) => {\r\n alert(JSON.stringify(error));\r\n setErrorState();\r\n }\r\n );\r\n setTermsDialogOpen(false);\r\n }}\r\n handleDisagreed={() => setTermsDialogOpen(false)}\r\n hideCloseButton={false}\r\n contentStyle={{ backgroundColor: Styles.textColorPrimary }}\r\n buttonAgreeStyle={{\r\n backgroundColor: Styles.textColorSecondaryAlt,\r\n borderColor: Styles.textColorSecondaryAlt,\r\n color: Styles.defaultColor,\r\n boxShadow: \"unset\",\r\n }}\r\n buttonDisagreeStyle={{\r\n backgroundColor: Styles.textColorSecondaryAlt,\r\n borderColor: Styles.textColorSecondaryAlt,\r\n color: Styles.defaultColor,\r\n boxShadow: \"unset\",\r\n }}\r\n open={termsDialogOpen}\r\n >\r\n \r\n \r\n
    \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n function useDocumentsPage(): DocumentPageState {\r\n const {\r\n documents,\r\n applicationState,\r\n bankAuthorized,\r\n bankInProcess,\r\n input,\r\n } = useMappedState((state) => state);\r\n const handleChangeManual = useCallback(\r\n (name: string, value: any) =>\r\n dispatch({\r\n type: ActionType.CHANGE_INPUT,\r\n value: value,\r\n propertyName: name,\r\n }),\r\n [dispatch, input.consent]\r\n );\r\n return {\r\n applicationState: applicationState,\r\n documents: documents,\r\n consent: input.consent,\r\n bankAuthorized: bankAuthorized,\r\n bankInProcess: bankInProcess,\r\n handleChangeManual: handleChangeManual,\r\n };\r\n }\r\n}\r\n\r\ntype DocumentPageState = {\r\n applicationState: AppState;\r\n consent: boolean;\r\n bankAuthorized: boolean;\r\n bankInProcess: boolean;\r\n documents: RemainingItem[];\r\n handleChangeManual: Function;\r\n};\r\n","import React from \"react\";\r\nimport \"./IFrameLoader.css\";\r\n\r\nexport default function IFrameLoader(props: any) {\r\n return renderIframe();\r\n\r\n function renderIframe() {\r\n const { ...rest } = props;\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n","import React, { useState, useEffect, useCallback, useRef } from \"react\";\r\nimport { useMappedState, useDispatch, ActionType } from \"../store/Store\";\r\nimport { AppState, LocalSettings, Styles } from \"../configuration/AppConfig\";\r\nimport LoadingScreen from \"../components/LoadingScreen\";\r\nimport { Button, Progress, Spinner } from \"reactstrap\";\r\nimport IFrameLoader from \"./IFrameLoader\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport Api from \"../utils/Api\";\r\nimport Background from \"./Background\";\r\nimport ModalDialog from \"./ModalDialog\";\r\nimport { isMobile } from \"react-device-detect\";\r\nimport \"./BankStatementsPage.css\";\r\nimport ReCAPTCHA from \"react-google-recaptcha\";\r\nimport { HelperFunctions, track } from \"../utils/HelperFunctions\";\r\nimport TagManager from \"react-gtm-module\";\r\nimport queryString from \"query-string\";\r\nimport useEventListener from \"../hooks/UseEventListener\";\r\nimport useScript from \"../hooks/UseScript\";\r\nimport ReactGA from \"react-ga\";\r\n\r\nexport default function BankStatementsPage() {\r\n const styles = {\r\n nextButton: {\r\n margin: \"15px\",\r\n minWidth: \"100px\",\r\n },\r\n backButton: {\r\n margin: \"15px\",\r\n minWidth: \"100px\",\r\n },\r\n parentContainer: {\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n textAlign: \"center\",\r\n minHeight: 600,\r\n margin: 10,\r\n },\r\n container: {\r\n width: \"100%\",\r\n },\r\n optionButton: {\r\n backgroundColor: Styles.textColorPrimary,\r\n borderColor: Styles.textColorPrimary,\r\n color: Styles.defaultColor,\r\n width: 320,\r\n margin: 5,\r\n },\r\n iframe: {\r\n width: \"100%\",\r\n height: isMobile ? 355 : 450,\r\n },\r\n\r\n tools: {\r\n position: \"absolute\",\r\n right: 50,\r\n top: 38,\r\n },\r\n toolItem: {\r\n marginLeft: 20,\r\n marginRight: 20,\r\n },\r\n menu: {\r\n height: 100,\r\n backgroundColor: Styles.menuColor,\r\n position: \"relative\",\r\n },\r\n homeLink: {\r\n top: 38,\r\n left: 50,\r\n position: \"absolute\",\r\n color: Styles.defaultColor,\r\n textTransform: \"uppercase\",\r\n fontWeight: \"bold\",\r\n },\r\n title: {\r\n maxWidth: 500,\r\n margin: \"auto\",\r\n },\r\n };\r\n\r\n const dispatch = useDispatch();\r\n const { applicationState } = useMappedState((state) => state);\r\n const { applicationId } = useParams<{ applicationId: string }>();\r\n\r\n let recaptchaRef = useRef(null);\r\n\r\n if (!applicationId) throw new Error(\"Application id was not supplied!\");\r\n\r\n let queryParams = queryString.parse(window.location.search);\r\n const userId = queryParams.userId || null;\r\n const companyName = queryParams.companyName || null;\r\n\r\n const [bankDialogName, setBankDialogName] = useState();\r\n const [iframeLoaded, setIframeLoaded] = useState(false);\r\n const [bankOutcome, setBankOutcome] = useState(\r\n BankStatementOutcomes.NONE\r\n );\r\n\r\n // Localization settings\r\n const bankingTranslation = LocalSettings.translation.bankingPage;\r\n const companyNameStr = companyName ? `&companyName=${companyName}` : \"\";\r\n const flinksUrl = `${Api.getBankingDataUrl()}`;\r\n\r\n const setState = useCallback(\r\n (state: AppState) =>\r\n dispatch({ type: ActionType.CHANGE_APP_STATE, value: state }),\r\n [dispatch]\r\n );\r\n\r\n const messageHandler = (e: {\r\n data: {\r\n step: string;\r\n institution: string;\r\n loginId: string;\r\n accountId: string;\r\n };\r\n }) => {\r\n const { step, institution, loginId, accountId } = e.data;\r\n if (step === \"REDIRECT\") {\r\n track(\"Flinks connected\");\r\n Api.updateBankingLoginAndAccount(\r\n {\r\n applicationId: applicationId,\r\n loginId: loginId,\r\n selectedFlinksAccount: accountId,\r\n institution: institution,\r\n },\r\n (result: any) => {\r\n console.log(result);\r\n window.location.href = `${window.location.origin.toString()}/documents/${applicationId}?language=${\r\n LocalSettings.language\r\n }${addUserId(\"&\")}${companyNameStr}`;\r\n },\r\n (err: any) => {\r\n console.error(err);\r\n }\r\n );\r\n } else if (step && institution) {\r\n Api.updateBankingStatus(\r\n {\r\n applicationId: applicationId,\r\n bankingInstitution: institution,\r\n bankingStatus: step,\r\n type: \"Self_Update_Banking_Status\",\r\n },\r\n (result: any) => {\r\n console.log(result);\r\n },\r\n (err: any) => {\r\n console.error(err);\r\n }\r\n );\r\n }\r\n };\r\n\r\n useEventListener(\"message\", messageHandler);\r\n\r\n useScript(\"https://code.tidio.co/two1uyxara5wtxrzklhoegcc5ut7qhvk.js\");\r\n\r\n useEffect(() => {\r\n HelperFunctions.setPageTitle(\r\n `${bankingTranslation.pageName} - ${LocalSettings.companyName}`\r\n );\r\n\r\n ReactGA.initialize(\"UA-15983938-3\");\r\n ReactGA.pageview(window.location.pathname + window.location.search);\r\n\r\n const tagManagerArgs = {\r\n gtmId: \"GTM-KW3ZJC7\",\r\n };\r\n TagManager.initialize(tagManagerArgs);\r\n\r\n setTimeout(() => {\r\n setState(AppState.READY);\r\n }, 1000);\r\n }, []);\r\n\r\n return renderBankStatementsPage();\r\n\r\n function executeRecaptcha() {\r\n setState(AppState.LOADING);\r\n recaptchaRef.current?.execute();\r\n }\r\n\r\n function addUserId(symbol: \"&\" | \"?\") {\r\n return userId === null ? \"\" : `${symbol}userId=${userId}`;\r\n }\r\n\r\n function renderBankStatementsPage() {\r\n const iframeLoadingStyle = {\r\n display: iframeLoaded ? \"none\" : \"flex\",\r\n justifyContent: \"center\",\r\n height: isMobile ? 385 : 535,\r\n alignItems: \"center\",\r\n flexDirection: \"column\" as \"column\",\r\n };\r\n\r\n if (!applicationId) throw new Error(\"Application id was not supplied!\");\r\n\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n {bankingTranslation.mainTitle}\r\n \r\n \r\n {bankingTranslation.returningCustomerNote}\r\n \r\n \r\n {bankingTranslation.secondaryTitle}\r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n {bankingTranslation.flinksLoadingMessage}\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n setTimeout(() => setIframeLoaded(true), 1500);\r\n }}\r\n />\r\n {renderProtectedCaption()}\r\n \r\n {renderBankStatementsModal()}\r\n {renderBankStatementsButtons()}\r\n
    \r\n {\r\n if (response != null) {\r\n Api.skipBankingStep(\r\n {\r\n applicationId,\r\n type: \"Self_Skip_Bank\",\r\n recaptchaResponse: response,\r\n bankingOutcome: bankOutcome,\r\n },\r\n () => {\r\n redirectToNextStep();\r\n },\r\n () => {\r\n alert(\"An error has occured!\");\r\n }\r\n );\r\n } else alert(\"An error has occured!\");\r\n }}\r\n onExpired={() => {\r\n recaptchaRef.current?.execute();\r\n }}\r\n />\r\n
    \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n function renderProtectedCaption() {\r\n let imageDimensionSize, fontSize;\r\n if (isMobile) {\r\n imageDimensionSize = 20;\r\n fontSize = 14;\r\n } else {\r\n imageDimensionSize = 40;\r\n fontSize = 16;\r\n }\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n {bankingTranslation.protectedBy}\r\n \r\n
    \r\n
    \r\n );\r\n }\r\n\r\n function renderBankStatementsModal() {\r\n let dialogDetails: any = {};\r\n\r\n switch (bankDialogName) {\r\n case \"confirmstatements\":\r\n dialogDetails.title = bankingTranslation.proceedTitle;\r\n dialogDetails.open = true;\r\n dialogDetails.className = \"bg-gradient-danger\";\r\n dialogDetails.agreeCaption = bankingTranslation.proceedCancel;\r\n dialogDetails.disagreeCaption = bankingTranslation.proceedContinue;\r\n dialogDetails.textStyle = {\r\n color: \"#fff\",\r\n fontSize: 20,\r\n fontWeight: 400,\r\n };\r\n dialogDetails.buttonAgreeStyle = {\r\n backgroundColor: Styles.textColorPrimary,\r\n borderColor: Styles.textColorPrimary,\r\n color: Styles.defaultColor,\r\n };\r\n dialogDetails.buttonDisagreeStyle = {\r\n backgroundColor: Styles.textColorSecondaryAlt,\r\n borderColor: Styles.textColorSecondaryAlt,\r\n color: Styles.defaultColor,\r\n boxShadow: \"unset\",\r\n };\r\n dialogDetails.handleAgree = () => {\r\n track(\"Get funded faster clicked\")\r\n setBankDialogName(BankStatementDialogs.NONE);\r\n };\r\n //this.props.handleSetStatements(\"paper_statements\");\r\n dialogDetails.handleDisagree = () => {\r\n track(\"Ok with delays clicked\");\r\n setBankDialogName(BankStatementDialogs.NONE);\r\n setBankOutcome(BankStatementOutcomes.SKIP);\r\n setState(AppState.LOADING);\r\n executeRecaptcha();\r\n };\r\n dialogDetails.handleClose = () =>\r\n setBankDialogName(BankStatementDialogs.NONE);\r\n dialogDetails.body = (\r\n
    \r\n \r\n
    \r\n {bankingTranslation.proceedText}\r\n
    \r\n
    \r\n );\r\n break;\r\n default:\r\n return;\r\n }\r\n return (\r\n
    \r\n \r\n {dialogDetails.body}\r\n \r\n
    \r\n );\r\n }\r\n\r\n function renderBankStatementsButtons() {\r\n if (!applicationId) throw new Error(\"Application id was not supplied!\");\r\n\r\n return (\r\n
    \r\n
    \r\n {\r\n track(\"Connect bank later clicked\");\r\n setBankDialogName(BankStatementDialogs.CONFIRM)\r\n }}\r\n >\r\n {bankingTranslation.proceedButton}\r\n \r\n {\r\n setBankOutcome(BankStatementOutcomes.NOT_LISTED);\r\n track(\"Bank not listed clicked\");\r\n executeRecaptcha();\r\n }}\r\n id=\"not_listed\"\r\n >\r\n {bankingTranslation.notListed}\r\n \r\n
    \r\n
    \r\n );\r\n }\r\n\r\n function redirectToNextStep() {\r\n window.location.href = `/documents/${applicationId}?language=${\r\n LocalSettings.language\r\n }${companyNameStr}${addUserId(\"&\")}`;\r\n }\r\n}\r\n\r\ntype BankStatementsState = {\r\n applicationId: string;\r\n};\r\n\r\nenum BankStatementDialogs {\r\n CONFIRM = \"confirmstatements\",\r\n NONE = \"none\",\r\n}\r\n\r\nenum BankStatementOutcomes {\r\n SKIP = \"Prefer Paper Statements\",\r\n NOT_LISTED = \"Bank Not Listed\",\r\n NONE = \"None\",\r\n}\r\n","import { useEffect, useRef } from \"react\";\r\n\r\nconst useEventListener = (\r\n eventName: string,\r\n handler: any,\r\n element: any = window\r\n) => {\r\n // Create a ref that stores handler\r\n const savedHandler = useRef();\r\n\r\n // Update ref.current value if handler changes.\r\n // This allows our effect below to always get latest handler ...\r\n // ... without us needing to pass it in effect deps array ...\r\n // ... and potentially cause effect to re-run every render.\r\n useEffect(() => {\r\n savedHandler.current = handler;\r\n }, [handler]);\r\n\r\n useEffect(\r\n () => {\r\n // Make sure element supports addEventListener\r\n // On\r\n const isSupported = element && element.addEventListener;\r\n if (!isSupported) return;\r\n\r\n // Create event listener that calls handler function stored in ref\r\n const eventListener = (event: any) => {\r\n //@ts-ignore\r\n savedHandler.current(event);\r\n };\r\n\r\n // Add event listener\r\n element.addEventListener(eventName, eventListener);\r\n\r\n // Remove event listener on cleanup\r\n return () => {\r\n element.removeEventListener(eventName, eventListener);\r\n };\r\n },\r\n [eventName, element] // Re-run if eventName or element changes\r\n );\r\n};\r\n\r\n\r\nexport default useEventListener;","import React, { useState, useEffect } from \"react\";\r\nimport { Row, Col, Spinner } from \"reactstrap\";\r\nimport \"./PartnerCard.css\";\r\nimport { HelperFunctions } from \"../utils/HelperFunctions\";\r\nimport { LocalSettings, Styles } from \"../configuration/AppConfig\";\r\nimport { useLocation } from \"react-router-dom\";\r\nimport queryString from \"query-string\";\r\nimport Api from \"../utils/Api\";\r\nimport { version } from \"../../package.json\";\r\n\r\nexport default function PartnerCard(): JSX.Element {\r\n const [data, setData] = useState();\r\n const [appStatus, setAppStatus] = useState<\r\n \"pending\" | \"detail\" | \"summary\" | \"pending-detail\" | \"loading\" | \"error\"\r\n >(\"loading\");\r\n\r\n const location = useLocation();\r\n const queryParams = queryString.parse(location.search);\r\n\r\n useEffect(() => {\r\n const partnerToken = queryParams.partnerToken || null;\r\n\r\n if (partnerToken !== null && typeof partnerToken === \"string\") {\r\n const isFull = queryParams.isFull || null;\r\n\r\n Api.getPartnerDetails(\r\n {\r\n applicationId: partnerToken,\r\n type: \"Partner_details\",\r\n },\r\n (result) => {\r\n const { applicationStatus, fields, partnerApplicationId } =\r\n result.data;\r\n let status: \"summary\" | \"detail\" | \"pending-detail\" | \"pending\";\r\n switch (applicationStatus) {\r\n case \"summary\":\r\n setData(fields);\r\n status = isFull === \"true\" ? \"detail\" : \"summary\";\r\n setAppStatus(status);\r\n break;\r\n case \"pending\":\r\n status = isFull === \"true\" ? \"pending-detail\" : \"pending\";\r\n setAppStatus(status);\r\n break;\r\n default:\r\n redirectToStart(partnerApplicationId);\r\n break;\r\n }\r\n },\r\n (e) => {\r\n setAppStatus(\"error\");\r\n }\r\n );\r\n } else {\r\n alert(\"Token should be provided\");\r\n }\r\n }, []);\r\n\r\n const DisplayComponent = (props: any) => {\r\n return (\r\n <>\r\n

    \r\n {props.text}\r\n

    \r\n \r\n {props.value}\r\n

    \r\n \r\n );\r\n };\r\n\r\n const DisplayErrorComponent = (props: any) => {\r\n return <>An error has occured when processing your request;\r\n };\r\n\r\n const DisplayDetailComponent = (props: any) => {\r\n return (\r\n \r\n \r\n {props.text}\r\n \r\n \r\n \r\n {getAppropriateFormattedValue(props.text)}\r\n \r\n \r\n );\r\n };\r\n\r\n const getAppropriateFormattedValue = (key: string): string => {\r\n let element = data.find((e: any) => e.text === key);\r\n switch (element.type) {\r\n case \"currency\":\r\n return HelperFunctions.formatCurrency(\r\n element.val,\r\n 0,\r\n 2,\r\n LocalSettings.language\r\n );\r\n case \"percentage\":\r\n return HelperFunctions.formatPercentage(element.val);\r\n case \"period\":\r\n return `${element.val} months`;\r\n default:\r\n return \"N/A\";\r\n }\r\n };\r\n\r\n const showDetailView = () => {\r\n setAppStatus(\"detail\");\r\n };\r\n\r\n // const showPendingDetailView = () => {\r\n // setAppStatus(\"pending-detail\");\r\n // };\r\n\r\n const redirectToMerchantGrowthAccount = () => {\r\n window.location.href = \"https://portal.merchantadvance.com\";\r\n };\r\n\r\n const redirectToStart = (partnerApplicationId: string) => {\r\n const partnerUserId = queryParams.partnerUserId || null;\r\n let partnerStr = partnerUserId !== null ? `&userId=${partnerUserId}` : ``;\r\n window.location.href = `/welcome?externalId=${partnerApplicationId}${partnerStr}&v=${version}`;\r\n };\r\n\r\n const callMerchantGrowthSupport = () => {\r\n window.open(\"tel:18662403694\", \"_self\");\r\n };\r\n\r\n const displaySummaryView = () => {\r\n return (\r\n
    \r\n
    \r\n \"Partner\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 View Loan Details\r\n \r\n \r\n
    \r\n );\r\n };\r\n\r\n const displayDetailedView = () => {\r\n return (\r\n
    \r\n
    \r\n \"Partner\r\n
    \r\n
    \r\n {data?.map((r: any, index: number) => (\r\n \r\n ))}\r\n
    \r\n \r\n \r\n Access My Merchant Growth Account\r\n \r\n \r\n Contact Customer Service\r\n \r\n \r\n
    \r\n );\r\n };\r\n\r\n const displayPendingView = () => {\r\n return (\r\n
    \r\n
    \r\n \"Partner\r\n
    \r\n
    \r\n

    \r\n Thanks for applying!\r\n

    \r\n

    \r\n You will receive an email within 24 hours with the status of your\r\n application, or a request for additional details. Please keep an eye\r\n out for an email from success@merchantgrowth.com\r\n

    \r\n
    \r\n {/* \r\n {isStateOpen ? (\r\n \r\n Contact Customer Service\r\n \r\n ) : (\r\n \r\n View Details\r\n \r\n )}\r\n */}\r\n
    \r\n );\r\n };\r\n\r\n const displayError = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n };\r\n\r\n const displayLoading = () => {\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 function getValueFromData(key: string): number {\r\n if (data.length > 0) {\r\n return data.find((e: any) => e.text === key)?.val;\r\n }\r\n return 0.0;\r\n }\r\n\r\n switch (appStatus) {\r\n case \"summary\":\r\n return displaySummaryView();\r\n case \"detail\":\r\n return displayDetailedView();\r\n case \"pending-detail\":\r\n case \"pending\":\r\n return displayPendingView();\r\n case \"error\":\r\n return displayError();\r\n case \"loading\":\r\n return displayLoading();\r\n }\r\n}\r\n","import React, { useEffect, useState } from \"react\";\r\nimport \"./App.css\";\r\nimport {\r\n BrowserRouter as Router,\r\n Switch,\r\n Route,\r\n Redirect,\r\n} from \"react-router-dom\";\r\nimport StepperPage from \"./components/StepperPage\";\r\nimport InitialPage from \"./components/InitialPage_General\";\r\nimport FinishPage from \"./components/FinishPage\";\r\nimport QuotePage from \"./components/QuotePage\";\r\nimport DocumentPage from \"./components/DocumentPage\";\r\nimport BankStatementsPage from \"./components/BankStatementsPage\";\r\nimport PartnerCard from \"./components/PartnerCard\";\r\nimport {\r\n queryParams,\r\n setFavicon,\r\n} from \"./utils/HelperFunctions\";\r\nimport \"bootstrap/dist/css/bootstrap.min.css\";\r\nimport Api from \"./utils/Api\";\r\nimport { PartnerResponse } from \"./store/Store\";\r\nimport { LocalSettings, NoIndexList, setPartnerData, Styles } from \"./configuration/AppConfig\";\r\nimport LoadingScreen from \"./components/LoadingScreen\";\r\nimport { FrenchTranslation } from \"./configuration/Translation\";\r\nimport ReactPixel from \"react-facebook-pixel\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport TiktokPixel from 'tiktok-pixel';\r\n\r\nfunction App() {\r\n const search = window.location.search;\r\n const params: QueryParams = queryParams(search);\r\n const [appIsReady, setAppIsReady] = useState(false);\r\n\r\n useEffect(() => {\r\n getTranslation(params.language);\r\n getPartnerData(params.userId);\r\n\r\n TiktokPixel.init('CCK3PSJC77U42CKVI9J0');\r\n TiktokPixel.pageView();\r\n\r\n ReactPixel.init(\"432726384255254\", undefined, {\r\n debug: process.env.NODE_ENV === \"development\",\r\n autoConfig: false,\r\n });\r\n ReactPixel.pageView();\r\n }, []);\r\n\r\n const getTranslation = (language: string | undefined) => {\r\n if (language !== undefined) {\r\n switch (language) {\r\n case \"fr\":\r\n LocalSettings.language = \"fr\";\r\n LocalSettings.translation = FrenchTranslation;\r\n break;\r\n }\r\n }\r\n };\r\n\r\n const getPartnerData = (userId: string | undefined) => {\r\n if (userId !== undefined) {\r\n Api.getPartnerData(\r\n {\r\n partnerId: userId,\r\n type: \"Self_Partner\",\r\n },\r\n (result) => {\r\n const data: PartnerResponse = result.data;\r\n setPartnerData(data);\r\n setAppIsReady(true);\r\n },\r\n (err) => {\r\n console.error(err);\r\n setFavicon(LocalSettings.favicon16Url, \"favicon-16\");\r\n setFavicon(LocalSettings.favicon32Url, \"favicon-32\");\r\n setFavicon(LocalSettings.faviconAppleUrl, \"favicon-apple\");\r\n setAppIsReady(true);\r\n }\r\n );\r\n } else {\r\n setFavicon(LocalSettings.favicon16Url, \"favicon-16\");\r\n setFavicon(LocalSettings.favicon32Url, \"favicon-32\");\r\n setFavicon(LocalSettings.faviconAppleUrl, \"favicon-apple\");\r\n setAppIsReady(true);\r\n }\r\n };\r\n\r\n const setNoIndex = () => {\r\n // Checking if the page should be no-indexed:\r\n if (NoIndexList.includes(window.location.href))\r\n return \r\n }\r\n\r\n\r\n let appContent;\r\n if (appIsReady) {\r\n appContent = (\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 } else {\r\n appContent = (\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n return (
    \r\n \r\n {setNoIndex()}\r\n \r\n {appContent}\r\n
    )\r\n}\r\n\r\ninterface QueryParams {\r\n userId: string | undefined;\r\n language: string | undefined;\r\n}\r\n\r\nexport default App;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport Smartlook from \"smartlook-client\";\r\nimport './index.css';\r\nimport * as serviceWorker from './serviceWorker';\r\nimport App from './App';\r\nimport {makeStore} from './store/Store';\r\nimport {StoreContext} from './store/Store';\r\nimport \"./assets/css/argon-dashboard-pro-react.css\";\r\n\r\nconst store = makeStore();\r\n\r\nif (process.env.REACT_APP_SMARTLOOK_PROJECT_KEY) {\r\n Smartlook.init(process.env.REACT_APP_SMARTLOOK_PROJECT_KEY, {\r\n advancedNetwork: {\r\n allowedUrls: [/.*/],\r\n },\r\n });\r\n Smartlook.record({ forms: true, numbers: true, emails: false, ips: false });\r\n}\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById('root'),\r\n );\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}