{"version":3,"sources":["InitScript.js","MessagePopup.js","LoaderDisplay.js","userAccount/Login.js","userAccount/Signup.js","userAccount/Address.js","userAccount/Verification.js","userAccount/SwitchChannel.js","userAccount/VerifyCode.js","userAccount/Forgot.js","userAccount/ForgotOTP.js","userAccount/ForgotOptions.js","userAccount/ContactSupport.js","userAccount/UserProcess.js","userAccount/UserHome.js","updateProcess/LogoutPopup.js","updateProcess/NavTop.js","updateProcess/Footer.js","updateProcess/UpdateStep1.js","updateProcess/UpdateStep2.js","updateProcess/UpdateStep3.js","updateProcess/ProgressList.js","updateProcess/UpdateStep4.js","updateProcess/UpdateSuccess.js","updateProcess/UpdateNoChange.js","updateProcess/CourseSearch.js","updateProcess/UpdateProcess.js","updateProcess/UpdateHome.js","Home.js","course/selectList/SelectList.js","course/Loader/Loader.js","course/search/Search.js","course/search/alerts.js","course/search/SearchResult.js","course/search/RequestCourseSection.js","course/search/SuccessMessage.js","course/search/SearchPage.js","course/requestCourse/alerts.js","course/requestCourse/RequestForm.js","course/requestCourse/RequestCourse.js","course/pageNotFound/PageNoteFound.js","course/AppCourse.js","App.js","index.js","services/configDataService.js","services/azureBlobService.js","services/bushnellAPIService.js","i18n.js","services/langService.js","services/downloadService.js","services/sessionService.js","services/updateManager.js","services/fileService.js","services/updateFileService.js","services/updateDownloadService.js","services/updateService.js","services/commonService.js","services/courseSearchService.js"],"names":["InitScript","props","configDataService","document","title","langService","React","Component","MessagePopup","className","id","role","aria-hidden","type","data-dismiss","LoaderDisplay","style","display","Login","handleSubmit","event","preventDefault","setState","isSubmitted","invalidPassword","validateFormData","validateEmailAddress","state","email","rmCheck","getElementById","emailInput","checked","localStorage","setItem","JSON","stringify","value","password","rememberMe","removeItem","btnClicked","commonService","bushnellAPI","then","responseData","errorCode","handleLoginDone","status","catch","err","message","test","handleRememberMe","e","target","handleContactSupport","nextForm","userData","getItem","parse","sessionService","inputEmail","createRef","inputPassword","this","current","focus","body","classList","add","trim","txtPass","iconPass","window","$","removeClass","addClass","onSubmit","htmlFor","aria-describedby","placeholder","onChange","handleChangeEmail","maxLength","ref","isEmailDuplicate","name","handleChangePassword","onClick","togglePassword","disabled","handleForgotPassword","href","handleSignup","Signup","validateCountryCode","countryCode","match","handleFirstName","firstName","handleLastName","lastName","handleCountryCode","handlePhoneNumber","phoneNumber","handleEmail","handlePassword","handleValidateEmailAndPhone","a","invalidPhone","emailDupli","phoneDupli","isPhoneDuplicate","carrier","isValidCarrier","showLoader","handleValidatePhoneNumber","handleSubmitSignUp","formData","backToLogin","privacyPolicy","newsletter","inputFirstName","inputLastName","inputCountryCode","inputPhoneNumber","inputPrivacyPolicy","length","isValid","eLinks","ExternalLink","alt","src","required","PrivacyPolicy","rel","TAndC","Newsletter","Address","componentDidMount","storeCountryData","data","StreetName","street","City","city","State","stateName","Country","country","Zip","ZIP","result","response","returnMsg","downloadDataFile","dataURL","downloadService","fileObject","Error","json","countryData","configData","configService","URL_Country","LocalURL","CountryList","URL_State","StateList","cData","sData","newStateName","getStateName","states","countries","code","stateData","handleChangeCountry","bind","handleChangeState","filterData","filter","el","selectCountry","handleChange","dataList","selectState","handleChangeStreet","handleChangeCity","handleChangeZIP","SelectList","selectedValue","handleChangeValue","map","item","Verification","handleVerificationType","canSetState","cCode","sendType","handleSaveVerification","captchaToken","to","startsWith","substr","captchaAction","jsonData","gateWayErrorCode","sid","send_code_attempts","emailAttemptCount","phoneAttemptCount","gateWayMessage","grecaptcha","ready","execute","Google_ReCaptcha_SiteKey","action","token","handleSendType","emailMaxAttempts","phoneMaxAttempts","isMaxAttempts","SwitchChannel","handleClickedOk","clickedOk","modal","data-keyboard","data-backdrop","replace","VerifyCode","handleCounterTimer","inSeconds","Date","now","handleOTPVerification","isOTPError","errorMsg","language","verificationCode","handleStartClick","countdownApi","start","handleIsCompleted","captchaActionResend","handleResend","captchaActionSwitchChannel","handleSwitchChannel","forceUpdate","isCompleted","setRef","countdown","getApi","rendererCounter","hours","minutes","seconds","completed","rTime","otp_1","otp_2","otp_3","otp_4","otp_5","otp_6","toString","counterTimer","inputVerificationCode","date","renderer","onComplete","onStart","Forgot","setForgotEmail","validateEmail","isEmailExists","undefined","handleBack","ForgotOTP","otp","newPassword","phone","pswd","ForgotOptions","verifiedData","verifiedJson","emailVerified","phoneVerified","sendTypeChecked","setForgotPhone","val","ContactSupport","UserProcess","handleShowLoader","sendTypeData","handleEmailAttemptCount","handlePhoneAttemptCount","forgotEmail","forgotPhone","handleSid","mode","currentMode","login","signup","address","verification","allFormData","verifyCode","forgot","forgotOptions","forgotOTP","contactSupport","getForm","UserHome","isBrowserChrome","LangSelector","onLanguageChange","lang","location","langStyle","float","Flags","ShowLanguageSelector","InvalidBrowser","LogoutPopup","handleLogoutClicked","logoutClicked","NavTop","handleClickedLogout","clickedLogout","userName","handleLogout","profile","uName","userProfile","data-toggle","Footer","handleConnectionChange","navigator","onLine","webPing","setInterval","fetch","isDisconnected","clearInterval","addEventListener","removeEventListener","UpdateStep1","handleNext","SupportedDevices","aria-labelledby","aria-label","RegisteredDevices","devices","DevicesList","imageIdentifier","sku","process","getImagePath","serialNo","userDeviceID","UpdateStep2","UpdateStep3","updateManager","coursePartial","enabled","handleNoUpdate","connectPopupClose","connectStatus","registerUpdateProcess","updateOnlyProcess","restoreDeviceProcess","registerUpdate","isRestoreDevice","on","deviceInfo","deviceData","deviceFirmware","firmware","localVersion","courseFirmware","course","needUpdate","showUpdatePopup","updateOnly","restoreDevice","selectFolder","trigger","popupUpdateRefresh","handleUpdate","popupRefresh","PopupConnected","deviceId","deviceName","deviceSKU","canRegister","macID","canShowRestoreDevice","EnableRestoreDevice","tabIndex","getDeviceImagePath","deviceFullName","deviceSN","PopupUpdate","handleUpdateCourse","newVersion","updateCourse","updateEnabled","updateFirmware","handleUpdateFirmware","isKRJPLangSupported","isShowKRJPNote","canShowCC","ShowCustomCourseUpdate","updateCourseDisabled","isUpdateEnabled","updateFirmwareDisabled","obj","forcedUpdate","approxUpdateTime","disabledStatus","getDisabledStatus","firmwareUpdationTime","serverVersion","getRemainingTime","ProgressItem","text","details","imageName","isAnimated","ProgressBarAnimated","progress","ProgressBar","width","aria-valuenow","aria-valuemin","aria-valuemax","ProgressList","isCourseAnimated","updateStatus","download","isKRJPUpdate","isFontUpdateRequired","font","device","UpdateStep4","scrollTo","updateRequired","interval","tick","flag","UpdateSuccess","UpdateStep5","CourseSearch","updateAllCourse","selectedItems","handleCancel","handleOnSelectAll","selectAll","toggleSelectAll","handleShowSelectedPopup","showSelectedPopup","hideSelectedCoursePopup","searchCourse","stateCode","courseName","courseSearchService","searchData","searchItems","selectedCountry","updateAllCourses","update","isDisabled","disabledState","updateList","colSpan","index","isSelected","cid","CheckBox","selectCourse","nam_nl","adr_nl","cit_nl","zip","nam","adr","cit","searchResult","Fragment","checkFlag","i","selectItems","selectedId","push","copyCourse","str","searchClick","SelectedCourses","items","removeCourse","removeAllCourses","FilterBar","newState","getStateByCountryCode","csData","onKeyDown","key","handleChangeCourseName","cny","UpdateProcess","remove","step1","step2","step3","step4","stepSuccess","stepNoChange","UpdateNoChange","courseSearch","UpdateHome","Home","userHome","updateHome","componentWillReceiveProps","nextProps","PageLoader","color","height","Search","downloadData_Country","downloadData_State","errorFlag","emptyCountry","emptyState","searchAll","handleSearch","checkKeyUp","changeInput","componentWillMount","url","CourseSearchURL","SearchURL","AWS_APIKey","method","headers","isJson","get","includes","ok","statusCode","countrySearch","stateSearch","setSearch","hideAlert","loader","error","onKeyUp","Alerts","courseData","getData","alertType","textAlign","alertMessage","SearchResult","setTimeout","updateData","propsData","cityFilter","searchParams","searchAllFilter","golfServicesUrl","searchDataAll","searchFields","complete","itemArray","toUpperCase","indexOf","_","sort","b","nameA","nameB","toLowerCase","sta","cellSpacing","cellPadding","RequestCourseSection","SuccessMessage","successAlert","SearchPage","search","requestSuccess","RequestForm","pageLoader","emptyCourseName","emptyCity","notes","emptyNotes","emailErrorMsg","onBrowseClick","selectedFile1","file1UploadRef","click","selectedFile2","file2UploadRef","onFile1Change","isValidFile","files","onFile2Change","onRemoveFile1","onRemoveFile2","validateData","success","clearFormValidation","emailRef","RegExp","courseNameRef","courseCityRef","sendData","fileName1","uuidv4","split","pop","fileName2","Email","CourseName","AdditionalNotes","ScoreCardPhotos","CaptchaResponse","CaptchaActionPage","clearForm","alertBox","successRequest","captcha","isValidCaptcha","inValidCaptcha","courseNoteRef","captchaRef","file","validFlag","size","pathname","autoFocus","RequestCourse","PageNotFound","AppCourse","path","exact","render","App","ReactDOM","StrictMode","URL_BushnellAPI","URL_CoursePackage","URL_CourseDataFile","URL_CourseImageFileHighEnd","URL_CourseData_PipeBugFix","URL_Blob_Scorecard","Google_ReCaptcha_URL","FirmwareURL","Firmware_Versions","FotaImage_Versions","FotaImage_Path","FotaReboot_Path","Fota_Image","Fota_Reboot","FotaSlope_Image","FotaSlope_Reboot","Font_File","UpdateDeleteUnusedDataFiles","EnableDebugLog","CourseData_PipeBugFix","RequestURL","getConfigData","init","uploadFileToBlob","urlSAS","containerName","fileName","blobService","BlobServiceClient","containerClient","getContainerClient","blobClient","getBlockBlobClient","options","blobHTTPHeaders","blobContentType","uploadData","URL_UserLogin","URL_UserProfile","URL_UpdateUserAddress","URL_ValidateEmailAndPhone","URL_CreateUser","URL_SendVerificationCode","URL_RefreshToken","URL_ResetPassword","URL_GetVerifiedChannels","URL_ValidatePhoneNumber","URL_RegisterUSBToolBushnellDevice","URL_AddCourseRequest","URL_GetSASTokenForChromeTool","getBaseURL","getHeaders","APIKey","accept","appVersion","deviceType","Authorization","downloadDataBase","isPost","postData","APIHeaders","resultObject","downloadData","accessToken","refreshToken","tokenResultObject","downloadData_GET","downloadData_POST","downloadUserProfile","installId","returnCode","GetVerifiedChannels","SendVerificationCode","channel","captchaResponse","captchaActionPage","CreateUser","LanguageCode","Sid","isPhoneVerified","isEmailVerified","setToken","ValidateEmailAndPhone","ValidatePhoneNumber","RegisterUSBToolBushnellDeviceGET","encodeURIComponent","RegisterUSBToolBushnellDevicePOST","deviceFirmwareVersion","courseDBVersion","profileResponse","isRegisteredDevice","macId","isSame","canRegisterDevice","supportedDevices","selectedSKUList","SKUs","validateSKU","getUserProfile","updateUserAddress","addressData","resetPassword","OTP","Password","VerificationCode","ChannelType","addCourseRequest","GetFileUploadToken","UploadScoreCardImage","file1","file2","isStateValid","azureBlobService","i18n","use","XHR","LanguageDetector","resources","en","translations","translationEnglish","translationChineseSimplified","ja","translationJapanese","fr","translationFrench","de","translationGerman","translationPortuguese","ko","translationKorean","translationIndonesian","es","translationSpanish","it","translationItalian","sv","translationSwedish","da","translationDanish","th","translationThai","fallbackLng","debug","ns","defaultNS","keySeparator","interpolation","escapeValue","formatSeparator","react","wait","t","tErrorMsg","changeLanguage","newlang","getLanguage","downloadData_AWS","AWSKey","isTar","downloadData_Bushnell","SKey_Token","SKey_UserProfile","sessionGet","sessionStorage","sessionSet","logout","isLoggedIn","isExpired","expired","getToken","accessTokenExpiry","getTime","needTokenRefresh","isValidAccessToken","getValidAccessToken","setUserProfile","selectedFolder","versionData","maxProgress","flipCount","refreshProgress","getMetadataInfo","updateService","metadataBuffer","Buffer","from","getDeviceName","dvn","endsWith","substring","getMetadata","fullName","SN","sns","SKU","bma","mdl","mft","decryptDeviceInfo","metadata","getVersionData","setUpdateFlags","enableCourse","enableFirmware","partialCourse","changeVersionFile","isFirmwareNewVersion","setPartialCourses","courses","selectedCourses","setFullCourseUpdate","setRestoreDevice","setCourseProgress","currentFile","totalFiles","Math","floor","startDownload","endDownload","slowdown","Promise","resolve","isKRJPUpdateRequired","isUpdateRequired","downloadCoursesKRJP","KRJPCourses","country_Korea","country_Japan","updateCource","downloadSaveFontFile","startUpdate","selectFolderPicker","showDirectoryPicker","selectChildFolder","parentFolder","childFolderName","getDirectoryHandle","childFolderExist","createFolder","folderName","create","deleteFolder","removeEntry","recursive","getFolderContents","directories","values","entry","kind","fileExist","getFileHandle","readFileData_Text","fileHandle","getFile","readFileData_ArrayBuffer","arrayBuffer","createFile","newFileHandle","createWritable","writable","write","close","rewriteFile","keepExistingData","courseFileStream","position","deleteFile","createOrUpdateFile","getReadWritePermission","handle","queryPermission","requestPermission","Name_FolderUpdate","Name_FolderDownload","Name_FolderFirmware","Name_FolderCourse","Name_FolderCourseData","Name_FolderCourseImage","Name_FolderFont","Name_FileVersionCourse","Name_FileVersionFirmware","Name_FileCourseFile","Name_FileCourseListUpdate","Name_FileFirmwareImage","Name_FileFirmwareImageDelta","Name_FileFirmwareReboot","Name_FileMetadata","Name_FileFont","fileService","baseFolder","validateFolder","courseFolder","updateFolder","getCourseFolder","getFirmwareFolder","firmwareFolder","getCourseDataFolder","courseDataFolder","getCourseImageFolder","readMetadataFile","readFirmwareVersionFile","sysVerData","imageData","rebootData","isBinFile","deleteDownloadFolder","extractFolderTreeFiles","fileNames","extractData","checkAndUpdateCourse","extractFileCallback","isCourseImage","currentFolder","fileCount","parseInt","dir","nameParts","j","newName","fileData","readCourseFile","txtData","updateCourseFile","readCourseVersionFile","localCourseVersion","updateCourseVersionFile","dataVer","existCourseUpdateFile","exist","readCourseUpdateFile","localCourseUpdateData","updateCourseUpdateFile","deleteCourseUpdateFile","saveCourseDataFile","fileId","folderId","dataFolder","saveCourseImageFile","courseImageFolder","imageFolder","removeMACTempFiles","unusedFileList","ID","deleteCourseDataFiles","hasImage","Folder","getCourseDataFileContents","fileList","folderContents","subFolder","subFolderContents","isFontFileExist","isFileExist","fontFolder","getFontFolder","updateFontFile","fontFileData","Data_HighEnd","Data_LowEnd","downloadCourseVersionPackageData","isHighEnd","encodeURI","downloadCourseData","downloadCourseImage","downloadFileReboot","isSlope","rebootURL","downloadFileImage","firmwareURL","downloadCoursePipeBugFixData","URL_CourseData","downloadFirmwareVersions","URL_FirmwareVersions","downloadFirmwareImageVersionsFile","URL_FirmwareImageVersions","downloadFirmwareImageFile","pathPart","URL_FirmwareImage","downloadFirmwareRebootFile","URL_FirmwareReboot","downloadFontFile","require","CoursesUpdated","CourseImagesUpdated","updateFileService","readLocalFileVersions","checkVersionData","isExistLocal","languageVersion","packageData","getFirmwareVersion","firmwareVersion","version","getMetadataFile","haveFirmwareVersion","lines","subLines","line","cols","subSplit","getApproxUpdateTime","totalSize","packages","sz","imgPackages","ceil","checkForUpdate","isIonElite","getFirmwareVersionPath_IonEdge","firmwareData","imagePath","imageVersion","updateDownloadService","packageText","MapDataVer","txtFirmwareVersions","apiDataFirmwareVersions","firmwareVersions","isLargerVersion","minVersion","lngVersion","versionCompare","escapeJSON","escapable","meta","lastIndex","c","charCodeAt","slice","courseAPIRecordsToJson","tRow","row","lat","lon","ver","idx","courseJsonToText","cItem","Name","Lat","Lon","Active","Ver","courseJsonToText_Array","courseTextToJson","getCoursePipeBugFixData","txtCoursePipeBugFixData","apiDataCoursePipeBugFixData","coursePipeBugFixData","getPipeBugFixRow","bugFixItem","readCourseList","txtCourseData","readCourseUpdateList","checkCourseList","checkData","fullCourseVals","updateCourseVals","newCourseVals","courseListUpdateRequired","updateCourseIds","localCourseData","updateCourseData","selectedVal","krjpUpdatedVal","downloadSaveCourseDataFile","downloadSaveCourseImageFile","downloadDataFiles","setFileDownloadEvent","selectedData","updateCourseList","courseText","updateUpdateList","currentUpdateCourseData","newCourseList","selectedCourse","updatePartialCourse","progressFileCount","totalFileCount","getApproxFileCount","packageJSON","totalFileSize","find","checkAndUpdateCourseImage","progressUpdate","pos","extractToFolder","isLangCourseFileRequired","CourseList_lng","CourseList","firmwareImageData","firmwareRebootData","toLocaleLowerCase","deviceVersion","newDeviceVersion","newDeviceImagePath","versionsList","From","To","FileName","getUnusedFiles","courseFileList","deleteUnusedFiles","cleanUp","zipArrayBuffer","isImage","JSZip","loadAsync","Object","entries","forEach","filePath","async","checkVersion","isLarge","v1","v2","vnum1","vnum2","updateCourcePackageData","Log_Version","DeviceName_Phantom2","NonLangVersion_Phantom2","ScriptId","Enable_Debug_Log","Log","console","log","LogData","showMessage","html","css","logTime","toLocaleTimeString","getBrowserProps","platform","userAgent","vendor","isOSMac","isOSWindows","isOSLinux","isMobile","wakeLock","ScreenWakeLock_Enable","request","handleVisibilityChange","ScreenWakeLock_Disable","release","visibilityState","replaceCensorEmail","arr","repeat","getDeviceId","deviceID","getSupportedDevices","isLanguageSupportRequiredKRJP","currentFirmwareVer","checkNonLanguageSupportedDevice","firmwareVer","isLngCourseFileRequired","checkForceUpdateRequired","localfirmwareVer","isForceUpdateRequired","loadRecaptchaScript","script","createElement","onload","appendChild","checkIpBlockingError","downloadData_CourseSearch","params","errorMessage","downloadData_CourseSearchFilter","nameOrZip","getCountryStateData"],"mappings":"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","file":"static/js/main.81254bc2.chunk.js","sourcesContent":["import React from \"react\";\nimport * as configDataService from \"./services/configDataService\";\nimport * as langService from './services/langService';\n\nclass InitScript extends React.Component {\n constructor(props) {\n super(props);\n\n configDataService.init();\n }\n\n componentDidMount() {\n document.title = langService.t(\"Title\");\n }\n\n render() {\n return (\n
\n );\n }\n}\n\nexport default InitScript;\n","import React from 'react';\nimport * as langService from './services/langService';\n\nclass MessagePopup extends React.Component {\n render() {\n return (\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n );\n }\n}\n\nexport default MessagePopup;\n","import React from 'react';\n\nclass LoaderDisplay extends React.Component {\n render() {\n return (\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n );\n }\n}\n\nexport default LoaderDisplay;\n","import React from \"react\";\nimport * as langService from \"../services/langService\";\nimport * as bushnellAPI from \"../services/bushnellAPIService.js\";\nimport * as commonService from \"../services/commonService.js\";\nimport * as sessionService from \"../services/sessionService.js\";\n\nclass Login extends React.Component {\n constructor(props) {\n super(props);\n let userData = localStorage.getItem(\"userData\") ? JSON.parse(localStorage.getItem(\"userData\")) : \"\";\n this.state = {\n nextForm: props.nextForm,\n email: userData.rememberMe ? userData.email : \"\",\n password: userData.rememberMe ? userData.password : \"\",\n rememberMe: userData.rememberMe ? userData.rememberMe : false,\n btnClicked: false,\n isSubmitted: false,\n invalidPassword: false,\n };\n let haveToken = sessionService.isValidAccessToken();\n if (haveToken) {\n this.state.nextForm(\"LoginDone\");\n } else {\n sessionService.logout();\n }\n this.inputEmail = React.createRef();\n this.inputPassword = React.createRef();\n }\n\n componentDidMount() {\n this.inputEmail.current.focus();\n document.body.classList.add(\"bg-login\");\n }\n\n handleChangeEmail(value) {\n this.setState({\n email: value.trim(),\n });\n }\n\n handleChangePassword(value) {\n this.setState({\n password: value,\n });\n }\n\n handleLoginDone() {\n this.state.nextForm(\"LoginDone\");\n }\n\n handleSignup() {\n this.state.nextForm(\"NoAccount\");\n }\n\n handleForgotPassword() {\n this.state.nextForm(\"Forgot\");\n }\n\n validateFormData() {\n if (this.state.email === \"\") {\n this.inputEmail.current.focus();\n } else if (this.state.password === \"\") {\n this.inputPassword.current.focus();\n }\n return this.state.email === \"\" || this.state.password === \"\" ? true : false;\n }\n\n handleSubmit = (event) => {\n event.preventDefault();\n try {\n this.setState({\n isSubmitted: true,\n invalidPassword: false,\n });\n if (!this.validateFormData() && this.validateEmailAddress(this.state.email)) {\n let rmCheck = document.getElementById(\"rememberMe\");\n let emailInput = document.getElementById(\"email\");\n if (rmCheck.checked) {\n localStorage.setItem(\n \"userData\",\n JSON.stringify({\n email: emailInput.value,\n password: \"\",\n rememberMe: rmCheck.checked,\n })\n );\n } else {\n localStorage.removeItem(\"userData\");\n }\n this.setState({ btnClicked: true });\n commonService.showLoader(true);\n let password = this.state.password;\n\n bushnellAPI.Login(this.state.email, password).then(responseData => {\n commonService.showLoader(false);\n this.setState({ btnClicked: false });\n if (responseData.errorCode === 0) {\n this.setState({ btnClicked: false, password: \"\" });\n this.handleLoginDone();\n } else {\n if (responseData.errorCode === 401 || responseData.errorCode !== 412) {\n this.setState({ invalidPassword: true });\n } else {\n commonService.showMessage(responseData.status);\n }\n }\n })\n .catch(err => {\n commonService.showLoader(false);\n this.setState({ btnClicked: false });\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n });\n }\n } catch (err) {\n commonService.showLoader(false);\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n this.setState({ btnClicked: false });\n }\n };\n\n togglePassword() {\n var txtPass = document.getElementById(\"password\");\n var iconPass = window.$(\".toggle-password\");\n if (txtPass.type === \"password\") {\n txtPass.type = \"text\";\n iconPass.removeClass(\"fa-eye\");\n iconPass.addClass(\"fa-eye-slash\");\n } else {\n txtPass.type = \"password\";\n iconPass.removeClass(\"fa-eye-slash\");\n iconPass.addClass(\"fa-eye\");\n }\n }\n\n validateEmailAddress = (email) => {\n if (/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/.test(email)) {\n return true;\n }\n return false;\n };\n\n handleRememberMe = (e) => {\n this.setState({ rememberMe: e.target.checked });\n };\n\n handleContactSupport = () => {\n this.state.nextForm(\"contactSupport\");\n };\n\n render() {\n return (\n
\n

{langService.t(\"Txt_Login\")}

\n
this.handleSubmit(e)}>\n
\n \n this.handleChangeEmail(e.target.value)}\n maxLength=\"200\"\n ref={this.inputEmail}\n />\n
\n {this.state.isSubmitted && this.state.email === \"\" ? (\n
{langService.t(\"UserAccount_NoEmail\")}
\n ) : this.state.isSubmitted && this.state.isEmailDuplicate ? (\n
{langService.t(\"UserAccount_ExistEmail\")}
\n ) : this.state.isSubmitted && !this.validateEmailAddress(this.state.email) ? (\n
{langService.t(\"UserAccount_InvalidEmail\")}
\n ) : (\n \"\"\n )}\n
\n \n this.handleChangePassword(e.target.value)}\n value={this.state.password}\n maxLength=\"50\"\n ref={this.inputPassword}\n />\n this.togglePassword()}>\n \n \n
\n {this.state.isSubmitted && this.state.password === \"\" ? (\n
{langService.t(\"UserAccount_NoPassword\")}
\n ) : this.state.invalidPassword ? (\n
{langService.t(\"UserAccount_InvalidCredentials\")}
\n ) : (\n \"\"\n )}\n \n
\n
\n
\n \n \n
\n
\n
\n this.handleForgotPassword()} href=\"# \">\n {langService.t(\"Txt_ForgotPassword\")}\n \n
\n
\n
\n

\n {langService.t(\"Txt_NoAccount\")}{\" \"}\n this.handleSignup()} href=\"# \">\n {langService.t(\"Txt_SignUp\")}\n \n

\n
\n
\n
\n );\n }\n}\n\nexport default Login;\n","import React from \"react\";\nimport * as langService from \"../services/langService\";\nimport * as bushnellAPI from \"../services/bushnellAPIService.js\";\nimport * as commonService from \"../services/commonService.js\";\nimport * as configDataService from \"../services/configDataService\";\n\nclass Signup extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n firstName: \"\",\n lastName: \"\",\n countryCode: \"\",\n phoneNumber: \"\",\n email: \"\",\n password: \"\",\n privacyPolicy: false,\n newsletter: false,\n isEmailDuplicate: false,\n isPhoneDuplicate: false,\n invalidPhone: false,\n btnClicked: false,\n isSubmitted: false,\n nextForm: props.nextForm,\n formData: {\n firstName: \"\",\n lastName: \"\",\n countryCode: \"\",\n phoneNumber: \"\",\n email: \"\",\n password: \"\",\n },\n };\n this.inputFirstName = React.createRef();\n this.inputLastName = React.createRef();\n this.inputCountryCode = React.createRef();\n this.inputPhoneNumber = React.createRef();\n this.inputEmail = React.createRef();\n this.inputPassword = React.createRef();\n this.inputPrivacyPolicy = React.createRef();\n }\n\n componentDidMount() {\n this.inputFirstName.current.focus();\n }\n\n validateCountryCode = (countryCode) => {\n var regex = /(\\+[1-9]\\d*)/;\n var match = countryCode.match(regex);\n return match;\n };\n\n validateFormData() {\n if (this.state.firstName.trim() === \"\") {\n this.inputFirstName.current.focus();\n } else if (this.state.lastName.trim() === \"\") {\n this.inputLastName.current.focus();\n } else if (this.state.countryCode.trim() === \"\" || !this.validateCountryCode(this.state.countryCode)) {\n this.inputCountryCode.current.focus();\n } else if (this.state.phoneNumber.trim() === \"\") {\n this.inputPhoneNumber.current.focus();\n } else if (this.state.email.trim() === \"\") {\n this.inputEmail.current.focus();\n } else if (this.state.password.trim() === \"\" || this.state.password.length < 8) {\n this.inputPassword.current.focus();\n } else if (!this.state.privacyPolicy) {\n this.inputPrivacyPolicy.current.focus();\n }\n\n return this.state.firstName.trim() === \"\" ||\n this.state.lastName.trim() === \"\" ||\n this.state.countryCode.trim() === \"\" ||\n !this.validateCountryCode(this.state.countryCode) ||\n this.state.phoneNumber.trim() === \"\" ||\n this.state.email.trim() === \"\" ||\n this.state.password === \"\" ||\n this.state.password.length < 8 ||\n !this.state.privacyPolicy\n ? true\n : false;\n }\n\n handleFirstName = (value) => {\n this.setState({ firstName: value });\n };\n\n handleLastName = (value) => {\n this.setState({ lastName: value });\n };\n\n handleCountryCode = (value) => {\n this.setState({ countryCode: value });\n };\n\n handlePhoneNumber = (value) => {\n this.setState({ phoneNumber: value });\n };\n\n handleEmail = (value) => {\n this.setState({ email: value });\n };\n\n handlePassword = (value) => {\n this.setState({ password: value });\n };\n\n isValidCarrier(type) {\n let isValid = false;\n if (type == null) {\n isValid = true;\n }\n else if (type === \"\") {\n isValid = true;\n }\n else if (type === \"mobile\") {\n isValid = true;\n }\n return isValid;\n }\n\n handleValidateEmailAndPhone = async (type) => {\n try {\n this.setState({ btnClicked: true });\n let email = type === 1 ? this.state.email : \"\";\n let countryCode = type === 2 ? this.state.countryCode : \"\";\n let phoneNumber = type === 2 ? this.state.phoneNumber : \"\";\n await bushnellAPI.ValidateEmailAndPhone(email, countryCode, phoneNumber, type).then((status) => {\n if (!status.errorCode) {\n // Stop if phoneNumber is not a mobile number\n if (type === 2 && status.carrier && !this.isValidCarrier(status.carrier.type)) {\n this.setState({ invalidPhone: true });\n return false;\n }\n else {\n this.setState({ btnClicked: false });\n return true;\n }\n } else if (status.errorCode === 400 && type === 2) {\n this.setState({\n invalidPhone: true,\n btnClicked: false,\n });\n return false;\n } else {\n let emailDupli = type === 1 ? true : false;\n let phoneDupli = type === 2 ? true : false;\n this.setState({\n isEmailDuplicate: emailDupli,\n isPhoneDuplicate: phoneDupli,\n btnClicked: false,\n });\n return false;\n }\n });\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n this.setState({ btnClicked: false });\n this.props.showLoader(false);\n }\n };\n\n handleValidatePhoneNumber = async (type) => {\n try {\n this.setState({ btnClicked: true });\n let phoneNumber = this.state.countryCode + this.state.phoneNumber;\n await bushnellAPI.ValidatePhoneNumber(phoneNumber).then((status) => {\n if (status.errorCode) {\n this.setState({ invalidPhone: true });\n } else {\n this.setState({ invalidPhone: false });\n }\n });\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n this.setState({ btnClicked: false });\n this.props.showLoader(false);\n }\n };\n\n handleSubmitSignUp = async (event) => {\n event.preventDefault();\n try {\n this.setState({\n isEmailDuplicate: false,\n isPhoneDuplicate: false,\n btnClicked: true,\n isSubmitted: true,\n });\n this.props.showLoader(true);\n if (!this.validateFormData() && this.validateEmailAddress(this.state.email)) {\n await this.handleValidatePhoneNumber();\n if (!this.state.invalidPhone) {\n try {\n await this.handleValidateEmailAndPhone(1);\n await this.handleValidateEmailAndPhone(2);\n if (!this.state.isEmailDuplicate && !this.state.isPhoneDuplicate && !this.state.invalidPhone) {\n this.props.formData({\n firstName: this.state.firstName.trim(),\n lastName: this.state.lastName.trim(),\n countryCode: this.state.countryCode.trim(),\n phoneNumber: this.state.phoneNumber.trim(),\n email: this.state.email.trim(),\n password: this.state.password,\n });\n this.props.nextForm(\"Signup\");\n }\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n this.setState({ btnClicked: false });\n this.props.showLoader(false);\n }\n }\n }\n this.setState({ btnClicked: false });\n this.props.showLoader(false);\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n this.setState({ btnClicked: false });\n this.props.showLoader(false);\n return false;\n }\n };\n\n togglePassword() {\n var txtPass = document.getElementById(\"input-pwd\");\n var iconPass = window.$(\".toggle-password\");\n if (txtPass.type === \"password\") {\n txtPass.type = \"text\";\n iconPass.removeClass(\"fa-eye\");\n iconPass.addClass(\"fa-eye-slash\");\n } else {\n txtPass.type = \"password\";\n iconPass.removeClass(\"fa-eye-slash\");\n iconPass.addClass(\"fa-eye\");\n }\n }\n\n validateEmailAddress = (email) => {\n if (/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/.test(email)) {\n return true;\n }\n return false;\n };\n\n backToLogin = () => {\n this.props.nextForm(\"LogoutDone\");\n };\n\n render() {\n let eLinks = configDataService.getConfigData().ExternalLink;\n return (\n
\n
\n
\n

{langService.t(\"Txt_SignUp\")}

\n
\n
\n this.backToLogin()}>\n \"back\"\n {langService.t(\"Btn_Back\")}\n \n
\n
\n
\n
\n \n this.handleFirstName(e.target.value)}\n maxLength=\"50\"\n value={this.state.firstName}\n ref={this.inputFirstName}\n />\n {this.state.isSubmitted && this.state.firstName.trim() === \"\" ? {langService.t(\"UserAccount_NoFirstName\")} : \"\"}\n
\n
\n
\n
\n \n this.handleLastName(e.target.value)}\n maxLength=\"50\"\n value={this.state.lastName}\n ref={this.inputLastName}\n />\n {this.state.isSubmitted && this.state.lastName.trim() === \"\" ? {langService.t(\"UserAccount_NoLastName\")} : \"\"}\n
\n
\n
\n
\n \n this.handleCountryCode(e.target.value)}\n maxLength=\"5\"\n value={this.state.countryCode}\n ref={this.inputCountryCode}\n />\n {this.state.isSubmitted && (this.state.countryCode.trim() === \"\" || !this.validateCountryCode(this.state.countryCode)) ? (\n {langService.t(\"UserAccount_NoCountryCode\")}\n ) : (\n \"\"\n )}\n
\n
\n \n this.handlePhoneNumber(e.target.value)}\n maxLength=\"15\"\n value={this.state.phoneNumber}\n ref={this.inputPhoneNumber}\n />\n {this.state.isSubmitted && this.state.phoneNumber.trim() === \"\" ? (\n {langService.t(\"UserAccount_NoPhoneNumber\")}\n ) : this.state.isSubmitted && this.state.isPhoneDuplicate ? (\n {langService.t(\"UserAccount_ExistPhone\")}\n ) : this.state.isSubmitted && this.state.invalidPhone ? (\n {langService.t(\"UserAccount_InvalidPhone\")}\n ) : (\n \"\"\n )}\n
\n
\n
\n
\n \n this.handleEmail(e.target.value)}\n maxLength=\"200\"\n value={this.state.email}\n ref={this.inputEmail}\n />\n {this.state.isSubmitted && this.state.email.trim() === \"\" ? (\n {langService.t(\"UserAccount_NoEmail\")}\n ) : this.state.isSubmitted && this.state.isEmailDuplicate ? (\n {langService.t(\"UserAccount_ExistEmail\")}\n ) : this.state.isSubmitted && !this.validateEmailAddress(this.state.email) ? (\n {langService.t(\"UserAccount_InvalidEmail\")}\n ) : (\n \"\"\n )}\n
\n
\n
\n \n this.handlePassword(e.target.value)}\n maxLength=\"50\"\n value={this.state.password}\n ref={this.inputPassword}\n />\n this.togglePassword()}>\n \n \n {this.state.isSubmitted && this.state.password === \"\" ? (\n {langService.t(\"UserAccount_NoPassword\")}\n ) : this.state.isSubmitted && this.state.password.length < 8 ? (\n {langService.t(\"UserAccount_InvalidLengthPassword\")}\n ) : (\n \"\"\n )}\n
\n \n
\n
\n
\n this.setState({ privacyPolicy: e.target.checked })} ref={this.inputPrivacyPolicy} />\n \n
\n {this.state.isSubmitted && !this.state.privacyPolicy ? (\n {langService.t(\"UserAccount_AgreePrivacyPolicy\")}\n ) : (\n \"\"\n )}\n
\n
\n
\n this.setState({ newsletter: e.target.checked })} />\n \n
\n
\n
\n
\n );\n }\n}\n\nexport default Signup;\n","import React from \"react\";\nimport * as langService from '../services/langService';\nimport * as commonService from \"../services/commonService.js\";\nimport * as configService from \"../services/configDataService\";\nimport * as downloadService from \"../services/downloadService\";\nimport * as bushnellAPI from \"../services/bushnellAPIService.js\";\n\nclass Address extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n countryData: null,\n stateData: null,\n nextForm: props.nextForm,\n country: \"\",\n street: \"\",\n city: \"\",\n stateName: \"\",\n ZIP: \"\",\n formData: props.formData,\n btnClicked: false,\n };\n this.handleChangeCountry = this.handleChangeCountry.bind(this);\n this.handleChangeState = this.handleChangeState.bind(this);\n }\n\n componentDidMount = async () => {\n try {\n await this.storeCountryData();\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n }\n };\n\n handleChangeCountry(value) {\n let newStateName = this.getStateName(this.state.stateData.states, value);\n this.setState({ country: value, stateName: newStateName });\n }\n\n handleChangeStreet(value) {\n this.setState({ street: value });\n }\n\n handleChangeCity(value) {\n this.setState({ city: value });\n }\n\n handleChangeState(value) {\n this.setState({ state: value, stateName: value });\n }\n\n handleChangeZIP(value) {\n this.setState({ ZIP: value });\n }\n\n handleSubmit = async (event) => {\n event.preventDefault();\n try {\n this.props.showLoader(true);\n let data = {\n StreetName: this.state.street.trim(),\n City: this.state.city.trim(),\n State: this.state.stateName.trim(),\n Country: this.state.country.trim(),\n Zip: this.state.ZIP.trim(),\n };\n let result = await bushnellAPI.updateUserAddress(data);\n if (result.errorCode === 0) {\n var response = await bushnellAPI.Login(this.state.formData.email, this.state.formData.password);\n if (response.errorCode === 0) {\n this.state.nextForm(\"LoginDone\");\n } else {\n commonService.showMessage(response.status);\n }\n //commonService.showMessage(\"User address updated\");\n } else {\n commonService.Log(result.returnMsg);\n }\n this.props.showLoader(false);\n this.setState({ btnClicked: false });\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n this.props.showLoader(false);\n this.setState({ btnClicked: false });\n }\n };\n\n downloadDataFile = async (dataURL) => {\n let fileObject = await downloadService.downloadData(dataURL);\n if (fileObject.status !== 200) throw new Error(langService.t(\"UserAccount_FileRequestFailed\"));\n return fileObject.json();\n };\n\n getStateName(states, countryCode) {\n var filterData = states.filter(function (el) {\n return el.countryCode === countryCode;\n });\n let newStateName = \"\";\n if (filterData.length !== 0) {\n newStateName = filterData[0].name;\n }\n return newStateName;\n }\n\n storeCountryData = async () => {\n let data = this.state.countryData;\n if (!data) {\n let configData = configService.getConfigData();\n let URL_Country = configData.LocalURL.CountryList;\n let URL_State = configData.LocalURL.StateList;\n\n let cData = await this.downloadDataFile(URL_Country);\n let sData = await this.downloadDataFile(URL_State);\n let newStateName = this.getStateName(sData.states, cData.countries[0].code);\n this.setState({\n countryData: cData,\n country: cData.countries[0].code,\n stateData: sData,\n stateName: newStateName\n });\n }\n };\n\n render() {\n let selectCountry = \"\";\n let cData = this.state.countryData;\n if (cData) {\n selectCountry = ;\n } else {\n selectCountry = \"\";\n }\n let selectState = \"\";\n let sData = this.state.stateData;\n let countryCode = this.state.country;\n if (sData) {\n var filterData = sData.states.filter(function (el) {\n return el.countryCode === countryCode;\n });\n if (filterData.length === 0) {\n selectState = this.handleChangeState(e.target.value)} />;\n } else {\n selectState = ;\n }\n } else {\n selectState = \"\";\n }\n\n return (\n
\n
\n
\n

{langService.t(\"UserAccount_Address\")}

\n
\n
\n
this.handleSubmit(e)}>\n
\n
\n \n {selectCountry}\n
\n
\n
\n
\n \n this.handleChangeStreet(e.target.value)} />\n
\n
\n
\n
\n \n this.handleChangeCity(e.target.value)} />\n
\n
\n
\n
\n \n {selectState}\n
\n
\n
\n
\n \n this.handleChangeZIP(e.target.value)} />\n
\n
\n \n
\n
\n );\n }\n}\n\nclass SelectList extends React.Component {\n constructor(props) {\n super(props);\n this.state = { value: props.value };\n }\n handleChangeValue(selectedValue) {\n this.setState({ value: selectedValue });\n this.props.handleChange(selectedValue);\n }\n render() {\n return (\n \n );\n }\n}\n\nexport default Address;\n","import React from \"react\";\nimport * as langService from \"../services/langService\";\nimport * as bushnellAPI from \"../services/bushnellAPIService.js\";\nimport * as commonService from \"../services/commonService.js\";\nimport * as configService from \"../services/configDataService\";\n\nclass Verification extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n sendType: 1,\n btnClicked: false,\n nextForm: props.nextForm,\n emailMaxAttempts: false,\n phoneMaxAttempts: false,\n emailAttemptCount: 0,\n phoneAttemptCount: 0,\n gateWayErrorCode: 0,\n isMaxAttempts: false,\n formData: {\n firstName: props.formData.firstName,\n lastName: props.formData.lastName,\n countryCode: props.formData.countryCode,\n phoneNumber: props.formData.phoneNumber,\n email: props.formData.email,\n password: props.formData.password,\n },\n sid: '',\n captchaAction: 'Signup',\n };\n }\n\n handleVerificationType = (type) => {\n let canSetState = true;\n if (type === 2) {\n let cCode = this.state.formData.countryCode;\n if (cCode === \"86\" || cCode === \"086\" || cCode === \"+86\") {\n canSetState = false;\n commonService.showMessage(langService.t(\"UserAccount_CantUseMobileVerification\"));\n }\n }\n if (canSetState) {\n this.setState({ sendType: type });\n }\n };\n\n handleSaveVerification = async (captchaToken) => {\n try {\n this.setState({ btnClicked: true });\n this.props.showLoader(true);\n if (this.state.sendType) {\n let to = \"\";\n if (this.state.sendType === 1) {\n to = this.state.formData.email;\n } else if (this.state.sendType === 2) {\n if (this.state.formData.countryCode.startsWith(\"0\")) {\n to = this.state.formData.countryCode.substr(1);\n to = to + this.state.formData.phoneNumber;\n }\n else {\n to = this.state.formData.countryCode + this.state.formData.phoneNumber;\n }\n }\n\n await bushnellAPI.SendVerificationCode(to, this.state.sendType, captchaToken, this.state.captchaAction)\n .then(async (response) => {\n let jsonData = await response.json();\n if (jsonData.gateWayErrorCode === 0) {\n await this.setState({\n sid: jsonData.sid,\n });\n this.props.sendType(this.state.sendType);\n if (jsonData.send_code_attempts.length > 3) {\n this.props.sendType(this.state.sendType === 1 ? 2 : 1);\n }\n if (this.state.sendType === 1) {\n await this.setState({\n emailAttemptCount: jsonData.send_code_attempts.length,\n });\n } else {\n await this.setState({\n phoneAttemptCount: jsonData.send_code_attempts.length,\n });\n }\n if (this.state.sendType === 1) {\n this.props.emailAttemptCount(this.state.emailAttemptCount);\n } else {\n this.props.phoneAttemptCount(this.state.phoneAttemptCount);\n }\n this.props.sid(this.state.sid);\n this.state.nextForm(\"Verification\");\n } else if (jsonData.gateWayErrorCode) {\n this.setState({\n gateWayErrorCode: jsonData.gateWayErrorCode,\n });\n commonService.Log(jsonData.gateWayErrorCode);\n commonService.showMessage(langService.tErrorMsg(jsonData.gateWayMessage));\n return false;\n } else if (jsonData.errorCode) {\n if (commonService.checkIpBlockingError(jsonData.errorCode)){\n commonService.Log(`${jsonData.errorCode} - ${langService.tErrorMsg(\"OTP_IP_Blocking\")} `);\n commonService.showMessage(langService.tErrorMsg(\"OTP_IP_Blocking\"));\n } else {\n commonService.Log(`${jsonData.errorCode} - ${langService.tErrorMsg(\"UserAccount_OTPSentFailed\")} `);\n commonService.showMessage(langService.tErrorMsg(\"UserAccount_OTPSentFailed\"));\n }\n return false;\n } else {\n commonService.Log(jsonData);\n commonService.showMessage(langService.tErrorMsg(\"UserAccount_OTPSentFailed\"));\n return false;\n }\n });\n }\n this.setState({ btnClicked: false });\n this.props.showLoader(false);\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n this.setState({ btnClicked: false });\n this.props.showLoader(false);\n }\n };\n\n handleSubmit = async (event) => {\n try {\n event.preventDefault();\n const configData = configService.getConfigData();\n window.grecaptcha.ready(() => {\n window.grecaptcha.execute(configData.Google_ReCaptcha_SiteKey, { action: this.state.captchaAction })\n .then(token => {\n this.handleSaveVerification(token);\n });\n });\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n }\n };\n\n handleSendType = () => {\n this.setState({ sendType: this.state.sendType === 1 ? 2 : 1 });\n };\n\n render() {\n return (\n
\n

{langService.t(\"UserAccount_Verification\")}

\n

{langService.t(\"UserAccount_VerificationHowTo\")}

\n

{langService.t(\"UserAccount_VerificationWhy\")}

\n
\n

{langService.t(\"UserAccount_VerificationSendAs\")}

\n
\n
\n this.handleVerificationType(1)}\n checked={this.state.sendType === 1 ? true : false}\n />\n \n
\n
\n this.handleVerificationType(2)}\n checked={this.state.sendType === 2 ? true : false}\n />\n \n
\n
\n {this.state.sendType === \"\" ?
{langService.t(\"UserAccount_VerificationSelectOne\")}
: \"\"}\n
\n \n
\n );\n }\n}\n\nexport default Verification;\n","import React from \"react\";\nimport * as langService from '../services/langService';\n\nclass SwitchChannel extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n sendType: props.sendType,\n };\n }\n\n componentDidMount() {\n window.$(\"#verificationPopupModal\").modal(\"show\");\n }\n\n handleClickedOk = () => {\n this.props.clickedOk(true);\n };\n\n render() {\n return (\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n );\n }\n}\n\nexport default SwitchChannel;\n","import React from \"react\";\nimport * as langService from \"../services/langService\";\nimport * as bushnellAPI from \"../services/bushnellAPIService.js\";\nimport * as commonService from \"../services/commonService.js\";\nimport SwitchChannel from \"./SwitchChannel\";\nimport Countdown from \"react-countdown\";\nimport * as configService from \"../services/configDataService\";\n\nclass VerifyCode extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n verificationCode: \"\",\n nextForm: props.nextForm,\n sendType: props.sendType,\n isOTPError: false,\n errorMsg: \"\",\n btnClicked: false,\n isSubmitted: false,\n emailAttemptCount: props.emailAttemptCount ? props.emailAttemptCount : 0,\n phoneAttemptCount: props.phoneAttemptCount ? props.phoneAttemptCount : 0,\n otp_1: \"\",\n otp_2: \"\",\n otp_3: \"\",\n otp_4: \"\",\n otp_5: \"\",\n otp_6: \"\",\n formData: {\n firstName: props.formData.firstName.toString(),\n lastName: props.formData.lastName,\n countryCode: props.formData.countryCode,\n phoneNumber: props.formData.phoneNumber,\n email: props.formData.email,\n password: props.formData.password,\n },\n sid: props.sid,\n captchaActionResend: 'SignupResendOTP',\n captchaActionSwitchChannel: 'SignupSwitchChannel',\n };\n this.counterTimer = this.handleCounterTimer();\n this.countdownApi = null;\n this.inputVerificationCode = React.createRef();\n }\n\n async componentDidMount() {\n this.inputVerificationCode.current.focus();\n }\n\n componentDidUpdate() {\n this.counterTimer = this.handleCounterTimer();\n }\n\n handleCounterTimer = () => {\n let inSeconds = 0;\n let emailAttemptCount = this.state.emailAttemptCount ? this.state.emailAttemptCount : this.props.emailAttemptCount;\n let phoneAttemptCount = this.state.phoneAttemptCount ? this.state.phoneAttemptCount : this.props.phoneAttemptCount;\n let sendType = this.state.sendType ? this.state.sendType : this.props.sendType;\n\n if (sendType === 1) {\n if (emailAttemptCount === 3) {\n inSeconds = 120000;\n } else if (emailAttemptCount === 2) {\n inSeconds = 60000;\n } else {\n inSeconds = 30000;\n }\n } else {\n if (phoneAttemptCount === 3) {\n inSeconds = 120000;\n } else if (phoneAttemptCount === 2) {\n inSeconds = 60000;\n } else {\n inSeconds = 30000;\n }\n }\n return Date.now() + inSeconds;\n };\n\n validateFormData() {\n if (this.state.verificationCode === \"\" || this.state.verificationCode.length !== 6) {\n this.inputVerificationCode.current.focus();\n }\n return this.state.verificationCode === \"\" || this.state.verificationCode.length !== 6 ? true : false;\n }\n\n handleOTPVerification = async () => {\n try {\n this.setState({ isOTPError: false, errorMsg: \"\", btnClicked: true, isSubmitted: true });\n this.props.showLoader(true);\n if (!this.validateFormData()) {\n //if (this.state.verificationCode) {\n let language = langService.getLanguage();\n await bushnellAPI\n .CreateUser(\n this.state.formData.firstName,\n this.state.formData.lastName,\n this.state.formData.email,\n this.state.formData.countryCode,\n this.state.formData.phoneNumber,\n this.state.formData.password,\n this.state.verificationCode,\n this.state.sendType,\n language,\n this.state.sid\n )\n .then((status) => {\n if (!status.errorCode) {\n this.state.nextForm(\"VerifyCode\");\n } else {\n this.setState({ isOTPError: true, errorMsg: status.status });\n }\n });\n }\n this.setState({ btnClicked: false });\n this.props.showLoader(false);\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n this.setState({ btnClicked: false });\n this.props.showLoader(false);\n }\n };\n\n handleStartClick = () => {\n this.countdownApi && this.countdownApi.start();\n this.handleIsCompleted();\n };\n\n handleSendType = () => {\n this.setState({ sendType: this.state.sendType === 1 ? 2 : 1 });\n };\n\n handleSaveVerification = async (captchaToken) => {\n try {\n this.setState({ btnClicked: true });\n this.props.showLoader(true);\n if (this.state.sendType) {\n let to = \"\";\n if (this.state.sendType === 1) {\n to = this.state.formData.email;\n } else if (this.state.sendType === 2) {\n to = this.state.formData.countryCode + this.state.formData.phoneNumber;\n }\n await bushnellAPI.SendVerificationCode(to, this.state.sendType, captchaToken, this.state.captchaActionResend)\n .then(async (response) => {\n let jsonData = await response.json();\n if (jsonData.gateWayErrorCode === 0) {\n this.handleStartClick();\n await this.setState({\n sid: jsonData.sid,\n });\n if (this.state.sendType === 1) {\n await this.setState({\n emailAttemptCount: this.state.emailAttemptCount + 1,\n });\n } else {\n await this.setState({\n phoneAttemptCount: this.state.phoneAttemptCount + 1,\n });\n }\n if (this.state.emailAttemptCount > 3 && this.state.phoneAttemptCount > 3) {\n this.props.nextForm(\"contactSupport\");\n }\n } else if (jsonData.gateWayErrorCode) {\n commonService.Log(jsonData.gateWayErrorCode);\n commonService.showMessage(langService.tErrorMsg(jsonData.gateWayMessage));\n return false;\n } else if (jsonData.errorCode) {\n if (commonService.checkIpBlockingError(jsonData.errorCode)){\n commonService.Log(`${jsonData.errorCode} - ${langService.tErrorMsg(\"OTP_IP_Blocking\")} `);\n commonService.showMessage(langService.tErrorMsg(\"OTP_IP_Blocking\"));\n } else {\n commonService.Log(`${jsonData.errorCode} - ${langService.tErrorMsg(\"UserAccount_OTPSentFailed\")} `);\n commonService.showMessage(langService.tErrorMsg(\"UserAccount_OTPSentFailed\"));\n }\n return false;\n } else {\n commonService.Log(jsonData);\n commonService.showMessage(langService.tErrorMsg(\"UserAccount_OTPSentFailed\"));\n return false;\n }\n });\n }\n this.setState({ btnClicked: false });\n this.props.showLoader(false);\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n this.setState({ btnClicked: false });\n this.props.showLoader(false);\n }\n };\n\n handleResend = async (event) => {\n event.preventDefault();\n try {\n const configData = configService.getConfigData();\n window.grecaptcha.ready(() => {\n window.grecaptcha.execute(configData.Google_ReCaptcha_SiteKey, { action: this.state.captchaActionResend })\n .then(token => {\n this.handleSaveVerification(token);\n });\n });\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n }\n };\n\n handleClickedOk = async (captchaToken) => {\n try {\n window.$(\"#verificationPopupModal\").modal(\"hide\");\n await this.setState({ sendType: this.state.sendType === 1 ? 2 : 1 });\n if (this.state.sendType) {\n let to = \"\";\n if (this.state.sendType === 1) {\n to = this.state.formData.email;\n } else if (this.state.sendType === 2) {\n to = this.state.formData.countryCode + this.state.formData.phoneNumber;\n }\n\n await bushnellAPI.SendVerificationCode(to, this.state.sendType, captchaToken, this.state.captchaActionSwitchChannel)\n .then(async (response) => {\n let jsonData = await response.json();\n if (jsonData.gateWayErrorCode === 0) {\n this.handleStartClick();\n await this.setState({\n sid: jsonData.sid,\n });\n if (this.state.sendType === 1) {\n await this.setState({\n emailAttemptCount: this.state.emailAttemptCount + 1,\n });\n } else {\n await this.setState({\n phoneAttemptCount: this.state.phoneAttemptCount + 1,\n });\n }\n } else if (jsonData.gateWayErrorCode) {\n commonService.Log(jsonData.gateWayErrorCode);\n commonService.showMessage(langService.tErrorMsg(jsonData.gateWayMessage));\n return false;\n } else if (jsonData.errorCode) {\n if (commonService.checkIpBlockingError(jsonData.errorCode)){\n commonService.Log(`${jsonData.errorCode} - ${langService.tErrorMsg(\"OTP_IP_Blocking\")} `);\n commonService.showMessage(langService.tErrorMsg(\"OTP_IP_Blocking\"));\n } else {\n commonService.Log(`${jsonData.errorCode} - ${langService.tErrorMsg(\"UserAccount_OTPSentFailed\")} `);\n commonService.showMessage(langService.tErrorMsg(\"UserAccount_OTPSentFailed\"));\n }\n return false;\n } else {\n commonService.Log(jsonData);\n commonService.showMessage(langService.tErrorMsg(\"UserAccount_OTPSentFailed\"));\n return false;\n }\n });\n }\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n this.setState({ btnClicked: false });\n this.props.showLoader(false);\n }\n };\n\n handleSwitchChannel = async () => {\n try {\n const configData = configService.getConfigData();\n window.grecaptcha.ready(() => {\n window.grecaptcha.execute(configData.Google_ReCaptcha_SiteKey, { action: this.state.captchaActionSwitchChannel })\n .then(token => {\n this.handleClickedOk(token);\n });\n });\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n }\n };\n\n handleIsCompleted = () => {\n this.forceUpdate();\n };\n\n isCompleted = () => {\n return !!(this.countdownApi && this.countdownApi.isCompleted());\n };\n\n setRef = (countdown) => {\n if (countdown) {\n this.countdownApi = countdown.getApi();\n }\n };\n\n rendererCounter = ({ hours, minutes, seconds, completed }) => {\n if (!completed) {\n // Render a countdown\n let rTime = langService.t(\"UserAccount_OTP_RemainingTime\");\n if (minutes > 0) {\n rTime = rTime.replace(\"{minute}\", minutes);\n rTime = rTime.replace(\"{second}\", seconds);\n }\n else {\n rTime = rTime.replace(\"{minute} minute {second}\", seconds);\n }\n return {rTime};\n } else {\n return ;\n }\n };\n\n render() {\n return (\n
\n

{langService.t(\"UserAccount_Verification\")}

\n

{langService.t(\"UserAccount_VerificationEnter\")}

\n

{this.state.sendType === 1 ? this.state.formData.email : this.state.formData.countryCode + this.state.formData.phoneNumber}

\n
\n
\n
\n this.setState({ verificationCode: e.target.value })}\n value={this.state.verificationCode}\n ref={this.inputVerificationCode}\n />\n
\n
\n {(this.state.isSubmitted && !this.state.verificationCode) || (this.state.isSubmitted && this.state.verificationCode.length !== 6) ? (\n
{langService.t(\"UserAccount_NoOTP\")}
\n ) : this.state.isOTPError ? (\n
{this.state.errorMsg}
\n ) : (\n \"\"\n )}\n

\n \n

\n {langService.t(\"UserAccount_FailedOTP\")}  \n {!this.isCompleted() ? (\n {langService.t(\"Btn_Resend\")}\n ) : (\n \n {langService.t(\"Btn_Resend\")}\n \n )}\n

\n \n \n {(this.state.emailAttemptCount > 3 || this.state.phoneAttemptCount > 3) && !(this.state.emailAttemptCount >= 3 && this.state.phoneAttemptCount >= 3) ? (\n \n ) : (\n \"\"\n )}\n
\n );\n }\n}\n\nexport default VerifyCode;\n","import React from \"react\";\nimport * as langService from '../services/langService';\nimport * as bushnellAPI from \"../services/bushnellAPIService\";\nimport * as commonService from \"../services/commonService.js\";\n\nclass Forgot extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n nextForm: props.nextForm,\n email: \"\",\n isEmailExists: true,\n isSubmitted: false,\n };\n this.inputEmail = React.createRef();\n }\n\n componentDidMount() {\n this.inputEmail.current.focus();\n }\n\n handleBack() {\n this.state.nextForm(\"LogoutDone\");\n }\n\n handleChangeEmail(value) {\n this.setState({\n email: value,\n });\n }\n\n validateFormData() {\n if (this.state.email === \"\" || this.state.email === undefined) {\n this.inputEmail.current.focus();\n }\n return this.state.email === \"\" || this.state.email === undefined ? true : false;\n }\n\n handleSubmit = async (event) => {\n event.preventDefault();\n try {\n this.setState({ btnClicked: true, isSubmitted: true });\n if (!this.validateFormData() && this.validateEmailAddress(this.state.email)) {\n this.props.setForgotEmail(this.state.email);\n this.props.showLoader(true);\n let validateEmail = await bushnellAPI.ValidateEmailAndPhone(this.state.email, \"\", \"\", 1);\n if (validateEmail.errorCode === 409) {\n this.props.showLoader(false);\n this.props.nextForm(\"ForgotOptions\");\n this.setState({ isEmailExists: true });\n } else if (validateEmail.errorCode === 412) {\n this.props.showLoader(false);\n commonService.Log(validateEmail.errorCode);\n commonService.showMessage(validateEmail.status);\n } else {\n this.setState({ isEmailExists: false });\n }\n }\n this.setState({ btnClicked: false });\n this.props.showLoader(false);\n } catch (err) {\n this.props.showLoader(false);\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n }\n };\n\n validateEmailAddress = (email) => {\n if (/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/.test(email)) {\n return true;\n }\n return false;\n };\n\n render() {\n return (\n
\n

{langService.t(\"UserAccount_ForgotPassword\")}

\n
this.handleSubmit(e)}>\n
\n \n this.handleChangeEmail(e.target.value)}\n maxLength=\"200\"\n ref={this.inputEmail}\n />\n {this.state.isSubmitted && this.state.email === \"\" ? (\n {langService.t(\"UserAccount_NoEmail\")}\n ) : this.state.isSubmitted && !this.validateEmailAddress(this.state.email) ? (\n {langService.t(\"UserAccount_InvalidEmail\")}\n ) : this.state.isSubmitted && !this.state.isEmailExists ? (\n {langService.t(\"UserAccount_MissingEmail\")}\n ) : (\n \"\"\n )}\n
\n \n \n
\n
\n );\n }\n}\n\nexport default Forgot;\n","import React from \"react\";\nimport * as langService from '../services/langService';\nimport * as bushnellAPI from \"../services/bushnellAPIService.js\";\nimport * as commonService from \"../services/commonService.js\";\nimport SwitchChannel from \"./SwitchChannel\";\nimport Countdown from \"react-countdown\";\nimport * as configService from \"../services/configDataService\";\n\nclass ForgotOTP extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n email: props.email,\n countryCode: props.countryCode,\n phone: props.phone,\n verificationCode: \"\",\n password: \"\",\n nextForm: props.nextForm,\n isOTPError: false,\n btnClicked: false,\n isSubmitted: false,\n sendType: props.sendType,\n emailAttemptCount: props.emailAttemptCount,\n phoneAttemptCount: props.phoneAttemptCount,\n sid: props.sid,\n captchaActionResend: 'PasswordResendOTP',\n captchaActionSwitchChannel: 'PasswordSwitchChannel',\n };\n this.counterTimer = this.handleCounterTimer();\n this.countdownApi = null;\n this.inputVerificationCode = React.createRef();\n this.inputPassword = React.createRef();\n }\n\n componentDidMount() {\n this.inputVerificationCode.current.focus();\n }\n\n componentDidUpdate() {\n this.counterTimer = this.handleCounterTimer();\n }\n\n handleCounterTimer = () => {\n let inSeconds = 0;\n let emailAttemptCount = this.state.emailAttemptCount;\n let phoneAttemptCount = this.state.phoneAttemptCount;\n let sendType = this.state.sendType;\n if (sendType === 1) {\n if (emailAttemptCount === 3) {\n inSeconds = 120000;\n } else if (emailAttemptCount === 2) {\n inSeconds = 60000;\n } else {\n inSeconds = 30000;\n }\n } else {\n if (phoneAttemptCount === 3) {\n inSeconds = 120000;\n } else if (phoneAttemptCount === 2) {\n inSeconds = 60000;\n } else {\n inSeconds = 30000;\n }\n }\n return Date.now() + inSeconds;\n };\n\n handleBack() {\n this.state.nextForm(\"LogoutDone\");\n }\n\n togglePassword(pswd) {\n var txtPass = document.getElementById(pswd);\n var iconPass = window.$(\".toggle-password\");\n if (txtPass.type === \"password\") {\n txtPass.type = \"text\";\n iconPass.removeClass(\"fa-eye\");\n iconPass.addClass(\"fa-eye-slash\");\n } else {\n txtPass.type = \"password\";\n iconPass.removeClass(\"fa-eye-slash\");\n iconPass.addClass(\"fa-eye\");\n }\n }\n\n handlePassword = (value) => {\n this.setState({ password: value });\n };\n\n validateFormData() {\n if (this.state.verificationCode === \"\" || this.state.verificationCode.length !== 6) {\n this.inputVerificationCode.current.focus();\n } else if (this.state.password === \"\" || this.state.password.length < 8) {\n this.inputPassword.current.focus();\n }\n return this.state.verificationCode === \"\" || this.state.verificationCode.length !== 6 || this.state.password === \"\" || this.state.password.length < 8 ? true : false;\n }\n\n handleOTPVerification = async () => {\n try {\n this.setState({ isOTPError: false, btnClicked: true, isSubmitted: true });\n this.props.showLoader(true);\n if (!this.validateFormData()) {\n if (this.state.verificationCode) {\n let email = this.props.email;\n let otp = this.state.verificationCode;\n let newPassword = this.state.password;\n let sid = this.state.sid;\n let result = await bushnellAPI.resetPassword(this.state.sendType, email, otp, newPassword, sid);\n if (result.errorCode === 0) {\n this.state.nextForm(\"LogoutDone\");\n this.setState({ isOTPError: false });\n commonService.showMessage(langService.t(\"UserAccount_PasswordChanged\"));\n } else {\n this.setState({ isOTPError: true });\n commonService.Log(result.status);\n }\n }\n }\n this.setState({ btnClicked: false });\n this.props.showLoader(false);\n } catch (err) {\n this.setState({ btnClicked: false });\n this.props.showLoader(false);\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n }\n };\n\n handleClickedOk = async (captchaToken) => {\n try {\n window.$(\"#verificationPopupModal\").modal(\"hide\");\n await this.setState({ sendType: this.state.sendType === 1 ? 2 : 1 });\n if (this.state.sendType) {\n let to = this.state.email;\n await bushnellAPI.SendVerificationCode(to, this.state.sendType, captchaToken, this.state.captchaActionSwitchChannel)\n .then(async (response) => {\n let jsonData = await response.json();\n if (jsonData.gateWayErrorCode === 0) {\n this.handleStartClick();\n await this.setState({\n sid: jsonData.sid,\n });\n if (this.state.sendType === 1) {\n await this.setState({\n emailAttemptCount: this.state.emailAttemptCount + 1,\n });\n } else {\n await this.setState({\n phoneAttemptCount: this.state.phoneAttemptCount + 1,\n });\n }\n } else if (jsonData.gateWayErrorCode) {\n commonService.Log(jsonData.gateWayErrorCode);\n commonService.showMessage(langService.tErrorMsg(jsonData.gateWayMessage));\n return false;\n } else if (jsonData.errorCode) {\n if (commonService.checkIpBlockingError(jsonData.errorCode)){\n commonService.Log(`${jsonData.errorCode} - ${langService.tErrorMsg(\"OTP_IP_Blocking\")} `);\n commonService.showMessage(langService.tErrorMsg(\"OTP_IP_Blocking\"));\n } else {\n commonService.Log(`${jsonData.errorCode} - ${langService.tErrorMsg(\"UserAccount_OTPSentFailed\")} `);\n commonService.showMessage(langService.tErrorMsg(\"UserAccount_OTPSentFailed\"));\n }\n return false;\n } else {\n commonService.Log(jsonData);\n commonService.showMessage(langService.tErrorMsg(\"UserAccount_OTPSentFailed\"));\n return false;\n }\n });\n }\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n this.setState({ btnClicked: false });\n this.props.showLoader(false);\n }\n };\n\n handleSwitchChannel = async () => {\n try {\n const configData = configService.getConfigData();\n window.grecaptcha.ready(() => {\n window.grecaptcha.execute(configData.Google_ReCaptcha_SiteKey, { action: this.state.captchaActionSwitchChannel })\n .then(token => {\n this.handleClickedOk(token);\n });\n });\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n }\n };\n\n handleIsCompleted = () => {\n this.forceUpdate();\n };\n\n isCompleted = () => {\n return !!(this.countdownApi && this.countdownApi.isCompleted());\n };\n\n setRef = (countdown) => {\n if (countdown) {\n this.countdownApi = countdown.getApi();\n }\n };\n\n rendererCounter = ({ hours, minutes, seconds, completed }) => {\n if (!completed) {\n // Render a countdown\n let rTime = langService.t(\"UserAccount_OTP_RemainingTime\");\n if (minutes > 0) {\n rTime = rTime.replace(\"{minute}\", minutes);\n rTime = rTime.replace(\"{second}\", seconds);\n }\n else {\n rTime = rTime.replace(\"{minute} minute {second}\", seconds);\n }\n return {rTime};\n } else {\n return ;\n }\n };\n\n handleStartClick = () => {\n this.countdownApi && this.countdownApi.start();\n this.handleIsCompleted();\n };\n\n handleSaveVerification = async (captchaToken) => {\n try {\n this.setState({ btnClicked: true });\n this.props.showLoader(true);\n if (this.state.sendType) {\n let to = this.state.email;\n await bushnellAPI.SendVerificationCode(to, this.state.sendType, captchaToken, this.state.captchaActionResend)\n .then(async (response) => {\n let jsonData = await response.json();\n if (jsonData.gateWayErrorCode === 0) {\n this.handleStartClick();\n await this.setState({\n sid: jsonData.sid,\n });\n if (this.state.sendType === 1) {\n await this.setState({\n emailAttemptCount: this.state.emailAttemptCount + 1,\n });\n } else {\n await this.setState({\n phoneAttemptCount: this.state.phoneAttemptCount + 1,\n });\n }\n if (this.state.emailAttemptCount > 3 && this.state.phoneAttemptCount > 3) {\n this.props.nextForm(\"contactSupport\");\n }\n } else if (jsonData.gateWayErrorCode) {\n commonService.Log(jsonData.gateWayErrorCode);\n commonService.showMessage(langService.tErrorMsg(jsonData.gateWayMessage));\n return false;\n } else if (jsonData.errorCode) {\n if (commonService.checkIpBlockingError(jsonData.errorCode)){\n commonService.Log(`${jsonData.errorCode} - ${langService.tErrorMsg(\"OTP_IP_Blocking\")} `);\n commonService.showMessage(langService.tErrorMsg(\"OTP_IP_Blocking\"));\n } else {\n commonService.Log(`${jsonData.errorCode} - ${langService.tErrorMsg(\"UserAccount_OTPSentFailed\")} `);\n commonService.showMessage(langService.tErrorMsg(\"UserAccount_OTPSentFailed\"));\n }\n return false;\n } else {\n commonService.Log(jsonData);\n commonService.showMessage(langService.tErrorMsg(\"UserAccount_OTPSentFailed\"));\n return false;\n }\n });\n }\n this.setState({ btnClicked: false });\n this.props.showLoader(false);\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n this.setState({ btnClicked: false });\n this.props.showLoader(false);\n }\n };\n\n handleResend = async (event) => {\n try {\n event.preventDefault();\n const configData = configService.getConfigData();\n window.grecaptcha.ready(() => {\n window.grecaptcha.execute(configData.Google_ReCaptcha_SiteKey, { action: this.state.captchaActionResend })\n .then(token => {\n this.handleSaveVerification(token);\n });\n });\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n }\n };\n\n render() {\n return (\n
\n
\n

{langService.t(\"UserAccount_EnterOTPAndPassword\")}

\n {langService.t(\"UserAccount_EnterOTP\").replace(\"{sendType}\", this.state.sendType === 1 ? \"Email Address\" : \"Phone\") }\n
\n
\n
\n this.setState({ verificationCode: e.target.value })}\n value={this.state.verificationCode}\n ref={this.inputVerificationCode}\n />\n
\n
\n {(this.state.isSubmitted && !this.state.verificationCode) || (this.state.isSubmitted && this.state.verificationCode.length !== 6) ? (\n
{langService.t(\"UserAccount_NoOTP\")}
\n ) : this.state.isSubmitted && this.state.isOTPError ? (\n
{langService.t(\"UserAccount_InvalidOTP\")}
\n ) : (\n \"\"\n )}\n
\n \n

\n {!this.isCompleted() ? (\n {langService.t(\"UserAccount_FailedOTP\")}\n ) : (\n \n {langService.t(\"UserAccount_FailedOTP\")}\n \n )}\n
\n \n this.handlePassword(e.target.value)}\n maxLength=\"50\"\n value={this.state.password}\n placeholder={langService.t(\"UserAccount_EnterNewPassword\")}\n ref={this.inputPassword}\n />\n this.togglePassword(\"input-pwd\")}>\n \n \n {this.state.isSubmitted && this.state.password === \"\" ? (\n
{langService.t(\"UserAccount_NoNewPassword\")}
\n ) : this.state.isSubmitted && this.state.password.length < 8 ? (\n
{langService.t(\"UserAccount_InvalidLengthPassword\")}
\n ) : (\n \"\"\n )}\n
\n \n
\n\n {(this.state.emailAttemptCount > 3 || this.state.phoneAttemptCount > 3) && !(this.state.emailAttemptCount >= 3 && this.state.phoneAttemptCount >= 3) ? (\n \n ) : (\n \"\"\n )}\n
\n );\n }\n}\n\nexport default ForgotOTP;\n","import React from 'react'\nimport * as langService from '../services/langService'\nimport * as bushnellAPI from '../services/bushnellAPIService.js'\nimport * as commonService from '../services/commonService.js'\nimport * as configService from '../services/configDataService'\n\nclass ForgotOptions extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n verificationCode: '',\n password: '',\n nextForm: props.nextForm,\n isOTPError: false,\n btnClicked: false,\n email: props.email,\n phone: '',\n countryCode: '',\n emailVerified: false,\n phoneVerified: false,\n sendType: '',\n sendTypeChecked: 0,\n sid: '',\n captchaAction: 'ForgotPassword',\n }\n }\n\n componentDidMount = async () => {\n try {\n let verifiedData = await bushnellAPI.GetVerifiedChannels(this.state.email)\n if (verifiedData.status === 200) {\n let verifiedJson = await verifiedData.json()\n this.setState({\n emailVerified: verifiedJson.emailVerified,\n phoneVerified: verifiedJson.phoneVerified,\n countryCode: verifiedJson.countryCode,\n phone: verifiedJson.phone,\n sendTypeChecked:\n (verifiedJson.emailVerified && verifiedJson.phoneVerified) ||\n (verifiedJson.emailVerified && !verifiedJson.phoneVerified)\n ? 1\n : 2,\n })\n }\n } catch (err) {\n commonService.Log(err)\n commonService.showMessage(langService.tErrorMsg(err.message))\n }\n }\n\n handleBack() {\n this.state.nextForm('LogoutDone')\n }\n\n togglePassword() {\n var txtPass = document.getElementById('input-pwd')\n var iconPass = window.$('.toggle-password')\n if (txtPass.type === 'password') {\n txtPass.type = 'text'\n iconPass.removeClass('fa-eye')\n iconPass.addClass('fa-eye-slash')\n } else {\n txtPass.type = 'password'\n iconPass.removeClass('fa-eye-slash')\n iconPass.addClass('fa-eye')\n }\n }\n\n handlePassword = (value) => {\n this.setState({ password: value })\n }\n\n validateFormData() {\n return this.state.sendTypeChecked === 1 || this.state.sendTypeChecked === 2\n ? false\n : true\n }\n\n handleOTPVerification = async (captchaToken) => {\n try { \n this.setState({ isOTPError: false, btnClicked: true })\n this.props.showLoader(true)\n if (!this.validateFormData()) {\n let to = this.state.email\n await bushnellAPI\n .SendVerificationCode(to, this.state.sendTypeChecked, captchaToken, this.state.captchaAction)\n .then(async (response) => {\n let jsonData = await response.json()\n if (jsonData.gateWayErrorCode === 0) {\n this.props.sendType(this.state.sendTypeChecked)\n await this.setState({ \n sid: jsonData.sid, \n })\n if (jsonData.send_code_attempts.length > 3) {\n this.props.sendType(this.state.sendTypeChecked === 1 ? 2 : 1)\n }\n if (this.state.sendTypeChecked === 1) {\n await this.setState({\n emailAttemptCount: jsonData.send_code_attempts.length,\n })\n } else {\n await this.setState({\n phoneAttemptCount: jsonData.send_code_attempts.length,\n })\n }\n if (this.state.sendTypeChecked === 1) {\n this.props.emailAttemptCount(this.state.emailAttemptCount)\n } else {\n this.props.phoneAttemptCount(this.state.phoneAttemptCount)\n }\n this.props.setForgotPhone(\n this.state.countryCode + this.state.phoneNumber,\n )\n this.props.sendType(this.state.sendTypeChecked)\n this.props.sid(this.state.sid)\n this.props.nextForm('ForgotSubmit')\n } else if (jsonData.gateWayErrorCode) {\n this.setState({\n gateWayErrorCode: jsonData.gateWayErrorCode,\n });\n commonService.Log(jsonData.gateWayErrorCode);\n commonService.showMessage(langService.tErrorMsg(jsonData.gateWayMessage));\n return false;\n } else if (jsonData.errorCode) {\n if (commonService.checkIpBlockingError(jsonData.errorCode)){\n commonService.Log(`${jsonData.errorCode} - ${langService.tErrorMsg(\"OTP_IP_Blocking\")} `);\n commonService.showMessage(langService.tErrorMsg(\"OTP_IP_Blocking\"));\n } else {\n commonService.Log(`${jsonData.errorCode} - ${langService.tErrorMsg(\"UserAccount_OTPSentFailed\")} `);\n commonService.showMessage(langService.tErrorMsg(\"UserAccount_OTPSentFailed\"));\n }\n return false;\n } else {\n commonService.Log(jsonData)\n commonService.showMessage(langService.tErrorMsg(\"UserAccount_OTPSentFailed\"))\n return false\n }\n })\n }\n this.setState({ btnClicked: false })\n this.props.showLoader(false)\n } catch (err) {\n this.setState({ btnClicked: false })\n this.props.showLoader(false)\n commonService.Log(err)\n commonService.showMessage(langService.tErrorMsg(err.message))\n }\n }\n\n handleSubmit = async (event) => {\n try {\n event.preventDefault();\n const configData = configService.getConfigData();\n window.grecaptcha.ready(() => {\n window.grecaptcha.execute(configData.Google_ReCaptcha_SiteKey, { action: this.state.captchaAction })\n .then(token => {\n this.handleOTPVerification(token);\n });\n });\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n }\n };\n\n handleVerificationType = async (type, val) => {\n type === 1\n ? await this.setState({ sendTypeChecked: type, email: val })\n : await this.setState({ sendTypeChecked: type, phone: val })\n }\n\n render() {\n return (\n
\n

{langService.t('UserAccount_ForgotPassword')}

\n

\n {langService.t('UserAccount_ResetInstructions')}\n

\n\n
\n {this.state.emailVerified ? (\n
\n
\n \n this.handleVerificationType(1, this.state.email)\n }\n checked={this.state.sendTypeChecked === 1 ? true : false}\n />\n \n
\n \n {commonService.replaceCensorEmail(this.state.email)}\n \n
\n ) : (\n ''\n )}\n {this.state.phoneVerified ? (\n
\n \n this.handleVerificationType(\n 2,\n this.state.countryCode + this.state.phone,\n )\n }\n checked={this.state.sendTypeChecked === 2 ? true : false}\n />\n \n {this.state.phone}\n
\n ) : (\n ''\n )}\n
\n \n {langService.t('Btn_Send')}\n \n
\n )\n }\n}\n\nexport default ForgotOptions\n","import React from \"react\";\nimport * as langService from \"../services/langService\";\nimport * as configDataService from \"../services/configDataService\";\n\nclass ContactSupport extends React.Component {\n\n render() {\n return (\n
\n

{langService.t(\"UserAccount_ContactSupport\")}

\n
\n
{langService.t(\"UserAccount_ProductSupport\")}
\n
\n
\n \n
\n
\n {langService.t(\"UserAccount_Phone\")}\n
\n
\n \n {langService.t(\"UserAccount_Website\")}\n \n
\n
\n );\n }\n}\n\nexport default ContactSupport;\n","import React from \"react\";\n\nimport Login from \"./Login\";\nimport Signup from \"./Signup\";\nimport Address from \"./Address\";\nimport Verification from \"./Verification\";\nimport VerifyCode from \"./VerifyCode\";\nimport Forgot from \"./Forgot\";\nimport ForgotOTP from \"./ForgotOTP\";\nimport ForgotOptions from \"./ForgotOptions\";\nimport ContactSupport from \"./ContactSupport\";\n\nclass UserProcess extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n nextForm: props.nextForm,\n currentMode: \"login\",\n formData: props.formData,\n sendType: \"\",\n forgotEmail: \"\",\n showLoader: false,\n emailAttemptCount: 0,\n phoneAttemptCount: 0,\n sid: '',\n };\n }\n\n handleShowLoader = async (data) => {\n await this.setState({ showLoader: data });\n this.props.showLoader(data);\n };\n\n // returns the corresponding Form based on currentMode\n getForm(currentMode) {\n const forms = {\n login: ,\n signup: ,\n address:
,\n verification: (\n \n ),\n verifyCode: (\n \n ),\n forgot: ,\n forgotOptions: (\n \n ),\n forgotOTP: (\n \n ),\n contactSupport: ,\n };\n return forms[currentMode];\n }\n\n formData = (data) => {\n this.setState({ formData: data });\n };\n\n sendTypeData = async (data) => {\n await this.setState({ sendType: data });\n };\n\n handleEmailAttemptCount = async (data) => {\n await this.setState({ emailAttemptCount: data });\n };\n\n handlePhoneAttemptCount = async (data) => {\n await this.setState({ phoneAttemptCount: data });\n };\n\n setForgotEmail = (email) => {\n this.setState({ forgotEmail: email });\n };\n\n setForgotPhone = (phone) => {\n this.setState({ forgotPhone: phone });\n };\n\n handleSid = async (data) => {\n await this.setState({ sid: data });\n };\n\n // update currentMode triggers the callback\n nextForm = (mode) => {\n if (mode === \"LoginDone\") this.state.nextForm(\"LoginDone\");\n else {\n if (mode === \"NoAccount\") mode = \"signup\";\n else if (mode === \"Signup\") mode = \"verification\";\n else if (mode === \"Verification\") mode = \"verifyCode\";\n else if (mode === \"VerifyCode\") mode = \"address\";\n else if (mode === \"Address\") mode = \"login\";\n else if (mode === \"LogoutDone\") mode = \"login\";\n else if (mode === \"Forgot\") mode = \"forgot\";\n else if (mode === \"ForgotOptions\") mode = \"forgotOptions\";\n else if (mode === \"ForgotSubmit\") mode = \"forgotOTP\";\n else if (mode === \"contactSupport\") mode = \"contactSupport\";\n this.setState((state) => ({ currentMode: mode }));\n }\n };\n\n render() {\n return
{this.getForm(this.state.currentMode)}
;\n }\n}\n\nexport default UserProcess;\n","import React from \"react\";\nimport * as commonService from \"../services/commonService\";\nimport * as langService from \"../services/langService\";\nimport * as configDataService from \"../services/configDataService\";\n\nimport UserProcess from \"./UserProcess\";\n\nclass UserHome extends React.Component {\n constructor(props) {\n super(props);\n this.state = { nextForm: props.nextForm, showLoader: props.showLoader };\n this.nextForm = this.nextForm.bind(this);\n }\n nextForm(mode) {\n this.state.nextForm(mode);\n }\n\n getForm() {\n let browserProps = commonService.getBrowserProps();\n if (browserProps.isBrowserChrome) {\n return ;\n } else {\n return ;\n }\n }\n\n handleShowLoader = (data) => {\n this.setState({ showLoader: data });\n this.props.showLoader(data);\n };\n render() {\n return (\n
\n
\n
\n
\n
\n
\n \"logo\"\n
\n

{langService.t(\"UserHome_Welcome\")}

\n

{langService.t(\"UserHome_Message\")}

\n
\n
\n
\n
\n
\n
\n
\n
\n \"logo\"\n
\n
\n

{langService.t(\"UserHome_Welcome\")}

\n

{langService.t(\"UserHome_Message\")}

\n
\n {this.getForm()}\n
\n \n
\n
\n
\n
\n );\n }\n}\n\nclass LangSelector extends React.Component {\n onLanguageChange = (e) => {\n let lang = e.target.value;\n if (lang) {\n langService.changeLanguage(lang);\n window.location.replace(process.env.PUBLIC_URL + \"/\");\n }\n }\n\n render() {\n let canShow = configDataService.getConfigData().Flags.ShowLanguageSelector === \"1\";\n let langStyle = {\n float: \"right\",\n display: (canShow ? \"block\" : \"none\")\n };\n return (\n
\n \n
\n )\n }\n}\n\nclass InvalidBrowser extends React.Component {\n render() {\n return (\n
\n
\n
\n

{langService.t(\"UserHome_NeedChrome\")}

\n \n \"Chrome\"\n {langService.t(\"UserHome_DownloadChrome\")}\n \n
\n
\n
\n );\n }\n}\n\nexport default UserHome;\n","import React from \"react\";\nimport * as langService from '../services/langService';\n\nclass LogoutPopup extends React.Component {\n\n componentDidMount() {\n window.$(\"#logoutPopupModal\").modal(\"show\");\n }\n\n handleLogoutClicked = () => {\n this.props.logoutClicked(true);\n };\n\n render() {\n return (\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n {\" \"}\n    \n \n
\n
\n
\n
\n
\n
\n
\n );\n }\n}\n\nexport default LogoutPopup;\n","import React from \"react\";\nimport * as commonService from \"../services/commonService.js\";\nimport * as bushnellAPI from \"../services/bushnellAPIService.js\";\nimport * as sessionService from \"../services/sessionService.js\";\nimport * as langService from '../services/langService';\nimport LogoutPopup from \"./LogoutPopup\";\n\nclass NavTop extends React.Component {\n //_isMounted = false;\n constructor(props) {\n super(props);\n this.state = {\n nextForm: props.nextForm,\n userName: \"\",\n clickedLogout: false,\n };\n this.handleLogout = this.handleLogout.bind(this);\n }\n\n componentDidMount() {\n try {\n let profile = bushnellAPI.getUserProfile();\n let uName = profile.userProfile.firstName;\n if (uName) {\n uName += \" \" + profile.userProfile.lastName;\n } else {\n uName = profile.userProfile.lastName;\n }\n this.setState({ userName: uName });\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n }\n }\n\n handleLogout(data) {\n if (data) {\n sessionService.logout();\n this.state.nextForm(\"LogoutDone\");\n this.setState({ clickedLogout: false });\n window.$(\"#logoutPopupModal\").modal(\"hide\");\n }\n }\n\n handleClickedLogout = (data) => {\n if (data) {\n this.setState({ clickedLogout: true });\n window.$(\"#logoutPopupModal\").modal(\"show\");\n }\n };\n\n render() {\n return (\n
\n \n {this.state.clickedLogout ? : \"\"}\n
\n );\n }\n}\n\nexport default NavTop;\n","import React from \"react\";\nimport * as langService from '../services/langService';\n\nclass Footer extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isDisconnected: false,\n };\n }\n\n componentDidMount() {\n // Internet connection lost\n // https://medium.com/backticks-tildes/a-guide-to-handling-internet-disconnection-in-react-applications-5fd02eccb2bb\n this.handleConnectionChange();\n window.addEventListener(\"online\", this.handleConnectionChange);\n window.addEventListener(\"offline\", this.handleConnectionChange);\n }\n\n componentWillUnmount() {\n // Internet connection lost\n window.removeEventListener(\"online\", this.handleConnectionChange);\n window.removeEventListener(\"offline\", this.handleConnectionChange);\n }\n\n handleConnectionChange = () => {\n // Internet connection lost\n const condition = navigator.onLine ? \"online\" : \"offline\";\n if (condition === \"online\") {\n const webPing = setInterval(() => {\n fetch(\"//google.com\", {\n mode: \"no-cors\",\n })\n .then(() => {\n this.setState({ isDisconnected: false }, () => {\n window.$(\"#noNetworkPopupModal\").modal(\"hide\");\n return clearInterval(webPing);\n });\n })\n .catch(() => {\n this.setState({ isDisconnected: true });\n });\n }, 2000);\n return;\n } else {\n window.$(\"#noNetworkPopupModal\").modal(\"show\");\n }\n\n //return this.setState({ isDisconnected: true });\n };\n\n render() {\n return (\n
\n
\n
\n
{langService.t(\"Copyright_Message\")}
\n
\n
\n\n {/* Internet connection lost POPUP */}\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n );\n }\n}\n\nexport default Footer;\n","import React from \"react\";\nimport * as commonService from \"../services/commonService.js\";\nimport * as bushnellAPI from \"../services/bushnellAPIService.js\";\nimport * as sessionService from \"../services/sessionService\";\nimport * as langService from '../services/langService';\n\nclass UpdateStep1 extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n userName: \"\",\n };\n }\n\n componentDidMount() {\n try {\n let profile = bushnellAPI.getUserProfile();\n let uName = profile.userProfile.firstName;\n if (uName) {\n uName += \" \" + profile.userProfile.lastName;\n } else {\n uName = profile.userProfile.lastName;\n }\n this.setState({ userName: uName });\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n }\n }\n\n handleNext() {\n this.props.nextForm(\"UpdateStep1\");\n }\n\n render() {\n return (\n
\n
\n
\n
\n \"logo\"\n
\n

{langService.t(\"UpdateProcess_WelcomeUser\").replace(\"{userName}\", this.state.userName)}

\n

{langService.t(\"UpdateProcess_BGUpdateManager\")}

\n
{langService.t(\"UpdateProcess_UseToolToUpdate\")}
\n

\n {langService.t(\"UpdateProcess_ToolWorkOnBGDevices\")} (\n \n {langService.t(\"UpdateProcess_ViewSupportedDevices\")}\n \n ).
\n {langService.t(\"UpdateProcess_NoSupportAndroidTabChromeOS\")}\n

\n
\n \n
\n

{langService.t(\"UpdateProcess_UpdateThreeSteps\")}

\n
\n
\n
    \n
  • \n {langService.t(\"UpdateProcess_TurnOFFDevice\")}\n
  • \n
  • \n \n {langService.t(\"UpdateProcess_ConnectDevice\")}\n
    {langService.t(\"UpdateProcess_viaUSB\")}\n
    \n
  • \n
  • \n {langService.t(\"UpdateProcess_UpdateLatest\")}\n
  • \n
\n
\n
\n \n
\n
\n \n \n
\n );\n }\n}\n\nclass SupportedDevices extends React.Component {\n render() {\n return (\n
\n
\n
\n
\n
{langService.t(\"UpdateProcess_SupportedDevices\")}
\n \n
\n
\n
    \n
  • \n
    \n \"BushnellPhantom2\"\n
    \n
    \n

    Bushnell Phantom 2

    \n

    GPS Device

    \n
    \n
  • \n
  • \n
    \n \"IonEdge\"\n
    \n
    \n

    Bushnell Ion Edge

    \n

    GPS Device

    \n
    \n
  • \n
  • \n
    \n \"BushnellPhantom2Slope\"\n
    \n
    \n

    Bushnell Phantom 2 Slope

    \n

    GPS Device

    \n
    \n
  • \n
  • \n
    \n \"BushnellIonElite\"\n
    \n
    \n

    Bushnell Ion Elite

    \n

    GPS Device

    \n
    \n
  • \n
  • \n
    \n \"BushnellPhantom3\"\n
    \n
    \n

    Bushnell Phantom 3

    \n

    GPS Device

    \n
    \n
  • \n
\n
\n
\n
\n
\n );\n }\n}\n\nclass RegisteredDevices extends React.Component {\n handleNext() {\n window.$(\"#registereddevices\").modal(\"hide\");\n this.props.nextForm(\"UpdateStep1\");\n }\n render() {\n let devices = sessionService.getUserProfile() ? sessionService.getUserProfile().userProfile.devices : null;\n return (\n
\n
\n
\n
\n
{langService.t(\"UpdateProcess_RegisteredDevices\")}
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n );\n }\n}\n\nclass DevicesList extends React.Component {\n getImagePath(item) {\n return commonService.getDeviceImagePath(item.imageIdentifier, item.sku);\n }\n render() {\n return (\n
    \n {this.props.dataList\n ? this.props.dataList.map((item) => {\n return (\n
  • \n
    \n \"device\"\n
    \n
    \n

    {item.name}

    \n {item.serialNo ?

    SN #: {item.serialNo}

    : \"\"}\n {item.sku ?

    SKU #: {item.sku}

    : \"\"}\n
    \n
  • \n );\n })\n : \"\"}\n
\n );\n }\n}\n\nexport default UpdateStep1;\n","import React from \"react\";\nimport * as langService from '../services/langService';\n\nclass UpdateStep2 extends React.Component {\n handleNext() {\n this.props.nextForm(\"UpdateStep2\");\n }\n render() {\n return (\n
\n
\n

\n \"power\n {langService.t(\"UpdateProcess_PrepareDevice\")}\n

\n
\n
\n
\n \"device\"\n
\n
\n
\n

{langService.t(\"UpdateProcess_TurnOFFDeviceHoldPowerButton\")}

\n
    \n
  • \n
  • \n
  • \n
\n
\n \n
\n
\n
\n );\n }\n}\n\nexport default UpdateStep2;\n","import React from \"react\";\n\nimport * as commonService from \"../services/commonService.js\";\nimport * as langService from '../services/langService';\nimport * as configDataService from \"../services/configDataService\";\nimport * as updateManager from \"../services/updateManager.js\";\nimport * as bushnellAPI from \"../services/bushnellAPIService.js\";\n\nclass UpdateStep3 extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n nextForm: props.nextForm,\n deviceData: null,\n connectStatus: 0,\n isRestoreDevice: false,\n popupUpdateRefresh : false\n };\n }\n\n handleNext = () => {\n window.$(\"#updatepopup\").modal(\"hide\");\n let deviceData = updateManager.getVersionData();\n if (deviceData.coursePartial.enabled) {\n this.state.nextForm(\"CourseSelect\");\n } else {\n this.state.nextForm(\"UpdateStep3\");\n }\n };\n\n handleNoUpdate = () => {\n this.state.nextForm(\"NoChange\");\n };\n\n connectPopupClose = async () => {\n if (this.state.connectStatus === 1) {\n await this.registerUpdateProcess();\n } else if (this.state.connectStatus === 2) {\n this.updateOnlyProcess();\n } else if (this.state.connectStatus === 3) {\n this.restoreDeviceProcess();\n }\n this.setState({ connectStatus: 0 });\n };\n\n showUpdatePopup() {\n this.setState(\n {\n popupUpdateRefresh: !this.state.popupUpdateRefresh\n }, () => { window.$(\"#updatepopup\").modal(\"show\") });\n }\n\n registerUpdate = () => {\n this.setState({\n connectStatus: 1,\n isRestoreDevice: false\n });\n window.$(\"#connectedsuccess\").modal(\"hide\");\n window.$(\"#connectedsuccess\").on(\"hidden.bs.modal\", async () => { await this.connectPopupClose(); });\n };\n\n registerUpdateProcess = async () => {\n try {\n let deviceInfo = await updateManager.getMetadataInfo();\n let deviceData = updateManager.getVersionData();\n let deviceFirmware = deviceData.firmware.localVersion.replace(/(\\r\\n|\\n|\\r)/gm, \"\");\n let courseFirmware = deviceData.course.localVersion.replace(/(\\r\\n|\\n|\\r)/gm, \"\");\n await bushnellAPI.RegisterUSBToolBushnellDevicePOST(deviceInfo, deviceFirmware, courseFirmware).then((response) => {\n if (!response.errorCode) {\n let deviceData = updateManager.getVersionData();\n if (deviceData.needUpdate) {\n this.showUpdatePopup();\n } else {\n this.handleNoUpdate();\n }\n } else {\n commonService.Log(langService.t(\"UpdateProcess_RegistrationFailed\"));\n commonService.showMessage(response.status);\n }\n });\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n }\n };\n\n updateOnly = () => {\n this.setState({\n connectStatus: 2,\n isRestoreDevice: false\n });\n window.$(\"#connectedsuccess\").modal(\"hide\");\n window.$(\"#connectedsuccess\").on(\"hidden.bs.modal\", async () => { await this.connectPopupClose(); });\n };\n\n updateOnlyProcess() {\n let deviceData = updateManager.getVersionData();\n if (deviceData.needUpdate) {\n this.showUpdatePopup();\n } else {\n this.handleNoUpdate();\n }\n };\n\n restoreDevice = () => {\n this.setState({\n connectStatus: 3,\n isRestoreDevice: true\n });\n window.$(\"#connectedsuccess\").modal(\"hide\");\n window.$(\"#connectedsuccess\").on(\"hidden.bs.modal\", async () => { await this.connectPopupClose(); });\n };\n\n restoreDeviceProcess = async () => {\n try {\n await updateManager.setRestoreDevice();\n let deviceData = updateManager.getVersionData();\n this.setState({ deviceData: deviceData }, () => { this.showUpdatePopup(); });\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n }\n };\n\n selectFolder = () => {\n commonService.showLoader(true);\n updateManager.selectFolder()\n .then(responseData => {\n if (responseData) {\n this.setState({ deviceData: responseData });\n commonService.showLoader(false);\n window.$(\"#connectedsuccess\").modal(\"show\");\n } else {\n window.$(\".btn\").trigger(\"blur\");\n commonService.showLoader(false);\n }\n })\n .catch(err => {\n commonService.showLoader(false);\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n });\n };\n\n render() {\n return (\n
\n
\n

\n \"usb_icon\"\n {langService.t(\"UpdateProcess_ConnectBushnellDevice\")}\n

\n
\n
    \n
  • {langService.t(\"UpdateProcess_TurnOFFConnectBrowse\")}
  • \n
\n
\n
\n
\n \"usb_cable\"\n
\n
\n
\n
    \n
  • {langService.t(\"UpdateProcess_SelectFolder\")}
  • \n
\n
\n
\n
\n \"device_drive\"\n
\n
\n
\n
    \n
  • \n {langService.t(\"UpdateProcess_GrantPermissionViewDetails\")}\n
  • \n
\n
\n
\n
\n \"popup\"\n
\n
\n
\n
\n
    \n
  • \n
  • \n
  • \n
\n
\n \n
\n
\n { this.state.deviceData ? (\n
\n \n \n
\n ) : \"\" }\n
\n );\n }\n}\n\nclass PopupConnected extends React.Component {\n\n getDeviceImagePath() {\n let deviceId = commonService.getDeviceId(this.props.deviceData.deviceName);\n let imagePath = commonService.getDeviceImagePath(\"bd_\" + deviceId, this.props.deviceData.deviceSKU);\n return imagePath;\n }\n\n render() {\n let canRegister = bushnellAPI.canRegisterDevice(this.props.deviceData.macID, this.props.deviceData.deviceSKU);\n let canShowRestoreDevice = configDataService.getConfigData().Flags.EnableRestoreDevice === \"1\";\n // const browserProps = commonService.getBrowserProps();\n // const canShowRestoreDevice = browserProps.isOSWindows;\n return (\n
\n
\n
\n
\n
{langService.t(\"UpdateProcess_DeviceConnected\")}
\n \n
\n
\n {(canRegister === true) ? (\n
\n

\n {langService.t(\"UpdateProcess_DeviceRegisterNow\")}\n

\n
\n ) : (\n \"\"\n )}\n
    \n
  • \n
    \n \"device\"\n
    \n
    \n

    {this.props.deviceData.deviceFullName}

    \n {this.props.deviceData.deviceSN ?

    SN #: {this.props.deviceData.deviceSN}

    : \"\"}\n {this.props.deviceData.deviceSKU ?

    SKU #: {this.props.deviceData.deviceSKU}

    : \"\"}\n
    \n
  • \n
\n
\n {(canRegister === true) ? (\n \n ) : (\n \n )}\n \n { canShowRestoreDevice ?\n \n : \"\" }\n
\n
\n
\n
\n
\n );\n }\n}\n\nclass PopupUpdate extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n updateCourse: this.props.deviceData.course.newVersion,\n updateFirmware: this.props.deviceData.firmware.newVersion,\n updateEnabled: (this.props.deviceData.course.newVersion || this.props.deviceData.firmware.newVersion),\n isShowKRJPNote: (this.props.deviceData.isKRJPLangSupported && this.props.deviceData.firmware.newVersion)\n };\n }\n canShowCustomCourse() {\n let canShowCC = configDataService.getConfigData().Flags.ShowCustomCourseUpdate === \"1\";\n if (canShowCC) {\n canShowCC = !this.props.isRestoreDevice;\n }\n return canShowCC;\n }\n getDisabledStatus() {\n let status = {\n updateCourseDisabled: this.isUpdateEnabled(this.props.deviceData.course) ? \"\" : \"disabled\",\n updateFirmwareDisabled: this.isUpdateEnabled(this.props.deviceData.firmware) ? \"\" : \"disabled\"\n };\n return status;\n }\n isUpdateEnabled(obj) {\n let result = false;\n if (obj.newVersion) {\n if (!obj.forcedUpdate) {\n result = true;\n }\n }\n return result;\n }\n getRemainingTime(obj, approxUpdateTime) {\n let result = \"\";\n if (obj.newVersion) {\n result = langService.t(\"UpdateProcess_ApproxTime\").replace(\"{time}\", approxUpdateTime);\n }\n return result;\n }\n handleUpdateCourse = (e) => {\n if (this.props.deviceData.course.newVersion) {\n this.setState({\n updateCourse: e.target.checked,\n updateEnabled: (e.target.checked || this.state.updateFirmware)\n });\n }\n }\n handleUpdateFirmware = (e) => {\n if (this.props.deviceData.firmware.newVersion) {\n this.setState({\n updateFirmware: e.target.checked,\n updateEnabled: (e.target.checked || this.state.updateCourse),\n });\n if(this.props.deviceData.isKRJPLangSupported){\n this.setState({\n isShowKRJPNote: e.target.checked\n });\n }\n }\n }\n handleUpdate = async () => {\n const updateCourseCustom = true;\n await updateManager.setUpdateFlags(this.state.updateCourse, this.state.updateFirmware, updateCourseCustom);\n this.props.handleUpdate();\n }\n\n getDeviceImagePath() {\n let deviceId = commonService.getDeviceId(this.props.deviceData.deviceName);\n let imagePath = commonService.getDeviceImagePath(\"bd_\" + deviceId, this.props.deviceData.deviceSKU);\n return imagePath;\n }\n\n render() {\n let disabledStatus = this.getDisabledStatus();\n const firmwareUpdationTime = this.state.isShowKRJPNote ? 10 : 2;\n return (\n
\n
\n
\n
\n
{langService.t(\"UpdateProcess_UpdateYourDevice\")}
\n \n
\n
\n
\n
    \n
  • \n
    \n \"device\"\n
    \n
    \n

    {this.props.deviceData.deviceFullName}

    \n

    SN #: {this.props.deviceData.deviceSN}

    \n

    {langService.t(\"UpdateProcess_CourseVersion\")}: {this.props.deviceData.course.localVersion}

    \n

    {langService.t(\"UpdateProcess_FirmwareVersion\")}: {this.props.deviceData.firmware.localVersion}

    \n
    \n
  • \n
\n
\n

{langService.t(\"UpdateProcess_SelectNewFileVersionsToUpdate\")}

\n

{langService.t(\"UpdateProcess_NewVersionsAvailable\")}

\n

\n

{langService.t(\"UpdateProcess_SelectFilesToUpdate\")}

\n
\n \n \n
\n
\n \n \n
\n {this.state.isShowKRJPNote ?

{langService.t(\"UpdateProcess_Phantom2FirmwareUpdateKRJP\")}

: \"\"}\n
\n \n { this.state.updateEnabled ? (\n \n ) : (\n \n )}\n
\n
\n
\n
\n
\n
\n );\n }\n}\n\nexport default UpdateStep3;\n","import React from \"react\";\nimport * as langService from '../services/langService';\n\nfunction ProgressList(props) {\n let isCourseAnimated = (window.updateStatus.course.progress > 0 && window.updateStatus.course.progress < 100);\n return (\n
    \n
  • \n \n
  • \n {(props.isKRJPUpdate) ? (\n <>\n {(props.isFontUpdateRequired) ? (\n
  • \n \n
  • \n ): (<>) }\n
  • \n \n
  • \n
  • \n \n
  • \n \n ) : (\n <>\n {(props.isFontUpdateRequired) ? (\n
  • \n \n
  • \n ): (<>) }\n
  • \n \n
  • \n
  • \n \n
  • \n \n ) }\n
  • \n \n
  • \n
\n );\n}\n\nfunction ProgressItem(props) {\n let text = props.text;\n if (props.status.details) {\n text = text + \" \" + props.status.details;\n }\n return (\n
\n
\n {props.imageName}\n
\n {\n props.isAnimated ?\n :\n \n }\n
\n );\n}\n\nfunction ProgressBar(props) {\n return (\n
\n
\n

{props.text}

\n {props.progress}%\n
\n
\n
\n
\n
\n );\n}\n\nfunction ProgressBarAnimated(props) {\n return (\n
\n
\n

{props.text}

\n {props.progress}%\n
\n
\n
\n
\n
\n );\n}\n\nexport default ProgressList;\n","import React from \"react\";\n\nimport * as updateManager from \"../services/updateManager.js\";\nimport * as commonService from \"../services/commonService.js\";\nimport * as langService from '../services/langService';\nimport ProgressList from \"./ProgressList\";\n\nclass UpdateStep4 extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n seconds: 0,\n isKRJPUpdate : false,\n isFontUpdateRequired : false\n };\n updateManager.init();\n }\n tick() {\n updateManager.refreshProgress();\n this.setState((state) => ({\n seconds: state.seconds + 1,\n }));\n if (this.state.seconds > 100) {\n this.setState((state) => ({\n seconds: 0,\n }));\n }\n }\n componentDidMount = async () => {\n window.scrollTo(0, 0);\n try {\n let deviceData = updateManager.getVersionData();\n this.setState({isFontUpdateRequired: deviceData.font.updateRequired})\n this.setState({isKRJPUpdate: deviceData.isKRJPLangSupported})\n\n this.interval = setInterval(() => this.tick(), 1000);\n let flag = await updateManager.startUpdate();\n this.handleNext(flag);\n } catch (err) {\n clearInterval(this.interval);\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n await commonService.ScreenWakeLock_Disable();\n this.props.nextForm(\"UpdateStep0\");\n }\n };\n componentWillUnmount() {\n clearInterval(this.interval);\n }\n\n handleNext = (flag) => {\n if (flag) {\n this.props.nextForm(\"Success\");\n } else {\n this.props.nextForm(\"NoChange\");\n }\n };\n render() {\n return (\n
\n
\n

\n \"update_icon\"\n {langService.t(\"UpdateProcess_UpdatingFiles\")}\n

\n
\n
\n \n
\n
\n
    \n
  • \n
  • \n
  • \n
\n
\n \n
\n
\n
\n );\n }\n}\n\nexport default UpdateStep4;\n","import React from \"react\";\nimport * as langService from '../services/langService';\n\nclass UpdateSuccess extends React.Component {\n handleNext() {\n window.location.replace(process.env.PUBLIC_URL + \"/\");\n }\n render() {\n return (\n
\n
\n
\n
\n
\n \"tick\"\n
\n

{langService.t(\"UpdateProcess_UpdateSuccess\")}

\n

{langService.t(\"UpdateProcess_UpdateSuccessMessage\")}

\n
\n \n
\n
\n
\n
\n
\n );\n }\n}\n\nexport default UpdateSuccess;\n","import React from \"react\";\nimport * as langService from '../services/langService';\n\nclass UpdateStep5 extends React.Component {\n handleNext() {\n window.location.replace(process.env.PUBLIC_URL + \"/\");\n }\n render() {\n return (\n
\n
\n
\n
\n
\n \"tick\"\n
\n

{langService.t(\"UpdateProcess_NoUpdates\")}

\n

{langService.t(\"UpdateProcess_IsLatest\")}

\n
\n \n
\n
\n
\n
\n
\n );\n }\n}\n\nexport default UpdateStep5;\n","import React from \"react\";\nimport * as langService from '../services/langService';\nimport * as commonService from \"../services/commonService\";\nimport * as updateManager from \"../services/updateManager\";\nimport * as courseSearchService from \"../services/courseSearchService\";\n\nclass CourseSearch extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n nextForm: props.nextForm,\n searchItems: [],\n selectedItems: [],\n selectAll: false,\n showSelectedPopup: false,\n selectedCountry:'',\n updateAllCourse: false,\n disabledState: \"\"\n };\n };\n\n handleNext = () => {\n if (!this.state.updateAllCourse && this.state.selectedItems.length === 0) {\n commonService.showMessage(langService.t(\"CourseSearch_NoRecordsSelected\"));\n } else {\n try {\n commonService.showLoader(true);\n if(this.state.updateAllCourse)\n updateManager.setFullCourseUpdate();\n else\n updateManager.setPartialCourses(this.state.selectedItems);\n commonService.showLoader(false);\n this.state.nextForm(\"UpdateStep3\");\n } catch (err) {\n commonService.showLoader(false);\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n }\n }\n };\n\n handleCancel = () => {\n this.state.nextForm(\"UpdateStep2\");\n };\n\n handleOnSelectAll = () => {\n let value = this.state.selectAll;\n value = !value;\n this.toggleSelectAll(value);\n };\n\n handleShowSelectedPopup = () => {\n this.setState({\n selectAll: false,\n showSelectedPopup: true\n }, () => {\n window.$(\"#selectedCourses\").modal(\"show\");\n });\n }\n\n hideSelectedCoursePopup = () => {\n window.$(\"#selectedCourses\").modal(\"hide\");\n window.$(\"#selectedCourses\").on(\"hidden.bs.modal\", () => { this.setState({ showSelectedPopup: false }) });\n }\n\n toggleSelectAll(checkFlag) {\n let i;\n commonService.showLoader(true);\n let searchItems = this.state.searchItems;\n let selectItems = this.state.selectedItems;\n // Remove all search items from select items\n for (i = 0; i < searchItems.length; i++) {\n let selectedId = searchItems[i].cid;\n selectItems = selectItems.filter(item => item.cid !== selectedId);\n }\n if (checkFlag) {\n // Add all search items from select items\n for (i = 0; i < searchItems.length; i++) {\n selectItems.push(this.copyCourse(searchItems[i]));\n }\n }\n this.setState({\n selectedItems: selectItems,\n selectAll: checkFlag\n }, () => {\n commonService.showLoader(false);\n });\n };\n\n searchCourse = async (country, stateCode, city, courseName) => {\n try {\n commonService.showLoader(true);\n let searchData = await courseSearchService.downloadData_CourseSearchFilter(country, stateCode, city, courseName);\n this.setState({\n searchItems: searchData,\n selectAll: false,\n selectedCountry: country\n });\n commonService.showLoader(false);\n } catch (err) {\n commonService.showLoader(false);\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n }\n };\n\n copyCourse(item) {\n let str = JSON.stringify(item);\n return JSON.parse(str);\n };\n\n selectCourse(cid, flag) {\n let checkFlag = this.state.selectAll;\n let searchItems = this.state.searchItems;\n let selectItems = this.state.selectedItems;\n if (flag) {\n for (let i = 0; i < searchItems.length; i++) {\n if (searchItems[i].cid === cid) {\n selectItems.push(this.copyCourse(searchItems[i]));\n break;\n }\n }\n }\n else {\n checkFlag = false;\n selectItems = selectItems.filter(item => item.cid !== cid);\n }\n this.setState({\n selectedItems: selectItems,\n selectAll: checkFlag\n });\n };\n\n removeCourse(cid) {\n this.selectCourse(cid, false);\n };\n\n removeAllCourses() {\n window.$(\"#selectedCourses\").modal(\"hide\");\n this.setState({\n selectedItems: [],\n showSelectedPopup: false\n });\n }\n\n isSelected(cid) {\n let items = this.state.selectedItems.filter(item => item.cid === cid);\n if (items.length > 0) {\n return true;\n }\n else {\n return false;\n }\n };\n\n updateAllCourses = (update) => {\n const isDisabled = update? \"disabled\" : \"\";\n this.setState({\n searchItems: [],\n selectedItems: [],\n selectAll: false,\n updateAllCourse: update,\n disabledState: isDisabled\n })\n };\n\n getRemainingTime(obj, approxUpdateTime) {\n let result = \"\";\n if (obj.newVersion) {\n result = langService.t(\"UpdateProcess_ApproxTime\").replace(\"{time}\", approxUpdateTime);\n }\n return result;\n }\n\n updateList = () => {\n if(this.state.searchItems.length === 0){\n return (\n \n \n
{langService.t(\"CourseSearch_NoRecords\")}
\n \n \n );\n } else {\n if( (langService.getLanguage() === 'ja' && this.state.selectedCountry === 'JP') || (langService.getLanguage() === 'ko' && this.state.selectedCountry === 'KR') ){\n return (\n this.state.searchItems.map((item, index) => {\n let checked = this.isSelected(item.cid);\n return (\n \n this.selectCourse(item.cid, !checked)} />\n {item.nam_nl}\n {item.adr_nl}\n {item.cit_nl}\n {item.zip}\n \n );\n })\n );\n } else {\n return (\n this.state.searchItems.map((item, index) => {\n let checked = this.isSelected(item.cid);\n return (\n \n this.selectCourse(item.cid, !checked)} />\n {item.nam}\n {item.adr}\n {item.cit}\n {item.zip}\n \n );\n })\n );\n }\n }\n }\n\n searchResult = () => {\n if(this.state.disabledState){\n let deviceData = updateManager.getVersionData();\n return (\n
\n {langService.t(\"UpdateProcess_CourseVersion\")}: {deviceData.course.serverVersion} {this.getRemainingTime(deviceData.course, deviceData.approxUpdateTime)}\n
\n );\n } else {\n return (\n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n { this.updateList() }\n \n
\n \n {langService.t(\"CourseSearch_CourseName\")}{langService.t(\"CourseSearch_CourseAddress\")}{langService.t(\"CourseSearch_City\")}{langService.t(\"CourseSearch_Zip\")}
\n
\n
\n );\n }\n }\n render() {\n return (\n
\n { await this.searchCourse(country, stateCode, city, courseName); } } \n updateAllCourses = {(update) => {this.updateAllCourses(update);}} />\n
\n { this.searchResult() }\n
\n \n \n
\n
\n {\n this.state.showSelectedPopup ?\n this.removeCourse(cid)} removeAllCourses={() => this.removeAllCourses()} hideSelectedCoursePopup={() => this.hideSelectedCoursePopup()} /> :\n null\n }\n
\n );\n }\n}\n\nclass FilterBar extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n countryData: null,\n stateData: null,\n\n country: \"\",\n city: \"\",\n stateCode: \"\",\n stateName: \"\",\n courseName: \"\",\n disabledState: \"\",\n updateAllCourse: false\n };\n this.handleChangeCountry = this.handleChangeCountry.bind(this);\n this.handleChangeState = this.handleChangeState.bind(this);\n };\n\n componentDidMount = async () => {\n try {\n commonService.showLoader(true);\n await this.storeCountryData();\n commonService.showLoader(false);\n } catch (err) {\n commonService.showLoader(false);\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n }\n };\n\n handleChangeCountry = (value) => {\n let newState = this.getStateByCountryCode(this.state.stateData.states, value);\n let disabled = \"\";\n let updateAllCourse = false;\n if (value === 'SELECT' || value === 'ALL'){\n disabled = \"disabled\";\n }\n if(value === \"ALL\")\n updateAllCourse = true;\n\n this.setState({ country: value, stateCode: newState.code, stateName: newState.name, disabledState: disabled, updateAllCourse: updateAllCourse });\n this.props.updateAllCourses(updateAllCourse);\n };\n\n handleChangeState(value) {\n this.setState({ stateCode: value, stateName: value });\n };\n\n handleChangeCity(value) {\n this.setState({ city: value });\n };\n\n handleChangeCourseName(value) {\n this.setState({ courseName: value });\n };\n\n getStateByCountryCode(states, countryCode) {\n var filterData = states.filter(function (el) {\n return el.countryCode === countryCode;\n });\n if (filterData.length !== 0) {\n return { code: filterData[0].code, name: filterData[0].name };\n }\n else {\n return { code: \"\", name: \"\" };\n }\n };\n\n storeCountryData = async () => {\n let data = this.state.countryData;\n if (!data) {\n let csData = await courseSearchService.getCountryStateData();\n let cData = csData.countryData;\n let sData = csData.stateData;\n let newState = this.getStateByCountryCode(sData.states, cData.countries[0].code);\n let disabled = \"\";\n if (cData.countries[0].code === 'SELECT' || cData.countries[0].code === 'ALL'){\n disabled = \"disabled\";\n }\n this.setState({\n countryData: cData,\n country: cData.countries[0].code,\n stateData: sData,\n stateCode: newState.code,\n stateName: newState.name,\n disabledState: disabled\n });\n }\n };\n\n searchCourse() {\n this.props.searchClick(this.state.country, this.state.stateCode, this.state.city, this.state.courseName);\n };\n\n render() {\n let selectCountry = \"\";\n let cData = this.state.countryData;\n if (cData) {\n selectCountry = ;\n } else {\n selectCountry = \"\";\n }\n let selectState = \"\";\n let sData = this.state.stateData;\n let countryCode = this.state.country;\n if (sData) {\n var filterData = sData.states.filter(function (el) {\n return el.countryCode === countryCode;\n });\n if (filterData.length === 0) {\n selectState = this.handleChangeState(e.target.value)} disabled />;\n } else {\n selectState = ;\n }\n } else {\n selectState = \"\";\n }\n\n return (\n
\n
\n
\n
\n
\n
\n {selectCountry}\n
\n
\n {selectState}\n
\n
\n (e.key === 'Enter' ? this.searchCourse() : null)} onChange={(e) => this.handleChangeCity(e.target.value)} disabled={this.state.disabledState} />\n
\n
\n
\n (e.key === 'Enter' ? this.searchCourse() : null)} onChange={(e) => this.handleChangeCourseName(e.target.value)} disabled={this.state.disabledState} />\n \n
\n
\n
\n
\n
\n
\n
\n );\n }\n}\n\nfunction SelectList(props) {\n return (\n \n );\n}\n\nfunction CheckBox(props) {\n return (\n
\n props.onChange(props.id)} />\n \n
\n );\n}\n\nfunction SelectedCourses(props) {\n const updateList = () => {\n if (props.items.length === 0 ) {\n \n \n
{langService.t(\"CourseSearch_NoRecordsSelected\")}
\n \n \n } else {\n return (\n props.items.map((item) => {\n if( (langService.getLanguage() === 'ja' && item.cny === 'JP') || (langService.getLanguage() === 'ko' && item.cny === 'KR') ){\n return (\n \n {item.nam_nl}\n {item.adr_nl}\n {item.cit_nl}\n {item.zip}\n props.removeCourse(item.cid)}>\n \n );\n } else {\n return (\n \n {item.nam}\n {item.adr}\n {item.cit}\n {item.zip}\n props.removeCourse(item.cid)}>\n \n );\n }\n })\n )\n }\n }\n return (\n
\n
\n
\n
\n
{langService.t(\"CourseSearch_SelectedCourses\")}
\n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n { updateList() }\n \n
{langService.t(\"CourseSearch_CourseName\")}{langService.t(\"CourseSearch_CourseAddress\")}{langService.t(\"CourseSearch_City\")}{langService.t(\"CourseSearch_Zip\")} props.removeAllCourses()}>
\n
\n
\n
\n
\n
\n );\n}\n\nexport default CourseSearch;\n","import React from \"react\";\n\nimport NavTop from \"./NavTop\";\nimport Footer from \"./Footer\";\n\nimport UpdateStep1 from \"./UpdateStep1\";\nimport UpdateStep2 from \"./UpdateStep2\";\nimport UpdateStep3 from \"./UpdateStep3\";\nimport UpdateStep4 from \"./UpdateStep4\";\nimport UpdateSuccess from \"./UpdateSuccess\";\nimport UpdateNoChange from \"./UpdateNoChange\";\nimport CourseSearch from \"./CourseSearch\";\n\nclass UpdateProcess extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n nextForm: props.nextForm,\n currentMode: \"step1\",\n };\n }\n\n componentDidMount() {\n document.body.classList.remove(\"bg-login\");\n }\n\n // returns the corresponding Form based on currentMode\n getForm(currentMode) {\n const forms = {\n step1: ,\n step2: ,\n step3: ,\n step4: ,\n stepSuccess: ,\n stepNoChange: ,\n courseSearch: ,\n };\n return forms[currentMode];\n }\n\n // update currentMode triggers the callback\n nextForm = (mode) => {\n if (mode === \"UpdateStep0\") mode = \"step1\";\n else if (mode === \"UpdateStep1\") mode = \"step2\";\n else if (mode === \"UpdateStep2\") mode = \"step3\";\n else if (mode === \"UpdateStep3\") mode = \"step4\";\n else if (mode === \"CourseSelect\") mode = \"courseSearch\";\n else if (mode === \"Success\") mode = \"stepSuccess\";\n else if (mode === \"NoChange\") mode = \"stepNoChange\";\n else if (mode === \"LogoutDone\") this.state.nextForm(\"LogoutDone\");\n this.setState((state) => ({ currentMode: mode }));\n };\n\n render() {\n return (\n
\n this.nextForm(mode)} />\n
\n
{this.getForm(this.state.currentMode)}
\n
\n
\n
\n );\n }\n}\n\nexport default UpdateProcess;\n","import React from \"react\";\nimport UpdateProcess from \"./UpdateProcess\";\n\nclass UpdateHome extends React.Component {\n constructor(props) {\n super(props);\n this.state = { nextForm: props.nextForm };\n this.nextForm = this.nextForm.bind(this);\n }\n nextForm(mode) {\n this.state.nextForm(mode);\n }\n render() {\n return (\n
\n \n
\n );\n }\n}\n\nexport default UpdateHome;\n","import React from \"react\";\n//import * as langService from './services/langService';\n\nimport UserHome from \"./userAccount/UserHome\";\nimport UpdateHome from \"./updateProcess/UpdateHome\";\nimport * as commonService from \"./services/commonService\";\n\nclass Home extends React.Component {\n constructor(props) {\n super(props);\n this.state = { currentMode: \"userHome\", showLoader: false };\n this.nextForm = this.nextForm.bind(this);\n }\n\n componentDidMount = async () => {\n try {\n commonService.loadRecaptchaScript();\n } catch (err) {\n commonService.Log(err)\n }\n }\n\n handleShowLoader = (data) => {\n this.setState({ showLoader: data });\n };\n\n // returns the corresponding Form based on currentMode\n getForm(currentMode) {\n const forms = {\n userHome: ,\n updateHome: ,\n };\n return forms[currentMode];\n }\n\n // update currentMode triggers the callback\n nextForm(mode) {\n if (mode === \"LoginDone\") mode = \"updateHome\";\n else if (mode === \"LogoutDone\") mode = \"userHome\";\n this.setState((state) => ({ currentMode: mode }));\n }\n\n render() {\n return (\n
\n {this.state.showLoader ? (\n
\n
\n
\n
\n
\n
\n
\n
\n
\n ) : (\n \"\"\n )}\n {this.getForm(this.state.currentMode)}\n
\n );\n }\n}\n\nexport default Home;\n","import React from 'react';\nimport * as langService from '../../services/langService'\n\nclass SelectList extends React.Component {\n constructor(props) {\n super(props);\n this.state = { value: props.value };\n }\n handleChangeValue(selectedValue) {\n this.setState({ value: selectedValue });\n this.props.handleChange(selectedValue);\n }\n\n componentWillReceiveProps=(nextProps)=>\n {\n this.setState({value:nextProps.value});\n }\n\n render() {\n return (\n \n \n\n );\n }\n}\n\nexport default SelectList;","import React from 'react';\nimport Loader from \"react-loader-spinner\";\n\nclass PageLoader extends React.Component {\n\n render() \n {\n\n return (\n <>\n
\n
\n \n
\n
\n\n \n );\n }\n \n}\n\nexport default PageLoader;","import React from 'react';\nimport * as commonService from \"../../services/commonService.js\";\nimport * as langService from '../../services/langService';\nimport * as configService from \"../../services/configDataService\";\nimport * as downloadService from \"../../services/downloadService\";\nimport SelectList from '../selectList/SelectList';\nimport PageLoader from '../Loader/Loader';\n\nclass Search extends React.Component {\n constructor() \n {\n super();\n this.state = {\n countryData: null,\n stateData: null,\n country: \"\",\n stateName: \"\",\n searchAll:\"\",\n city:\"\",\n emptyCountry:false,\n emptyState:false,\n loader:true,\n errorFlag:false\n }\n\n this.handleChangeCountry = this.handleChangeCountry.bind(this);\n this.handleChangeState = this.handleChangeState.bind(this);\n\n }\n\n componentDidMount = async () => {\n try \n {\n await this.storeCountryData();\n } \n catch (err) \n {\n commonService.showMessage(\"Error: \" + err.message);\n }\n };\n\n handleChangeCountry(value) \n {\n this.setState({ country: value, emptyCountry: false, stateName:\"\", city:\"\"});\n }\n\n handleChangeState(value) \n {\n this.setState({ state: value, stateName: value, emptyState: false});\n }\n\n downloadDataFile = async (dataURL) => {\n let fileObject = await downloadService.downloadData(dataURL);\n if (fileObject.status !== 200) throw new Error(langService.t(\"UserAccount_FileRequestFailed\"));\n return fileObject.json();\n };\n\n downloadData_Country = async () => \n {\n let URL_Country = \"/testData/data/country.json\";\n let countryData = await this.downloadDataFile(URL_Country);\n return countryData;\n };\n\n downloadData_State = async () => \n {\n let URL_State = \"/testData/data/state.json\";\n let stateData = await this.downloadDataFile(URL_State);\n return stateData;\n };\n\n storeCountryData = async () => {\n\n let data = this.state.countryData;\n if (!data) {\n let configData = configService.getConfigData();\n let URL_Country = '../'+configData.LocalURL.CountryList;\n let URL_State = '../'+configData.LocalURL.StateList;\n\n let cData = await this.downloadDataFile(URL_Country);\n let sData = await this.downloadDataFile(URL_State);\n this.setState({\n countryData: cData,\n stateData: sData\n });\n }\n };\n\n searchData = ()=>\n {\n\n let errorFlag = 0;\n if((this.state.country === null) || (this.state.country === ''))\n {\n this.setState({emptyCountry:true});\n errorFlag=1;\n }\n\n if(((this.state.country === 'US') || (this.state.country === 'CA')) && ((this.state.stateName === '') || (this.state.stateName === null)))\n {\n this.setState({emptyState:true});\n errorFlag=1;\n }\n\n if(errorFlag === 1)\n {\n return;\n }\n\n let searchAll = this.state.searchAll;\n let city = this.state.city;\n let stateName = this.state.stateName;\n \n let searchData = {country: this.state.country, state:stateName, searchAll:searchAll, city:city};\n this.props.handleSearch(searchData);\n\n }\n\n checkKeyUp=(event)=>\n {\n if (event.key === 'Enter') {\n this.searchData();\n }\n }\n\n changeInput =(event)=>\n {\n\n\n // let str = event.target.value\n if(event.target.name === \"searchAll\")\n {\n this.setState({searchAll:event.target.value});\n }\n else if(event.target.name === \"city\")\n {\n this.setState({city:event.target.value});\n }\n\n }\n\n componentWillMount=()=>{\n\n let configData = configService.getConfigData();\n let url = configData.CourseSearchURL.SearchURL;\n let token = configData.AWS_APIKey;\n\n const requestOptions = {\n method: 'GET',\n headers: {'x-api-key':token}\n };\n\n fetch(url, requestOptions)\n .then(async response => {\n\n const isJson = response.headers.get('content-type')?.includes('application/json');\n const data = isJson && await response.json();\n\n if ((response.ok) && (data.statusCode === 200)) \n {\n\n let countrySearch = '';\n let stateSearch = '';\n if((data.body.country !== '') && (data.body.country !== null) && (data.body.country !== '-'))\n {\n\n countrySearch = data.body.country;\n\n if((data.body.state !== '') && (data.body.state !== null) && (data.body.state !== '-'))\n {\n\n stateSearch = data.body.state;\n\n }\n\n }\n else\n {\n countrySearch = 'US';\n stateSearch = 'FL';\n }\n\n this.setSearch({country:countrySearch, state:stateSearch});\n\n }\n else\n {\n this.setState({errorFlag:true});\n this.hideAlert();\n }\n\n this.setState({loader:false});\n\n })\n .catch(error => {\n this.setState({errorFlag:true, loader:false});\n this.hideAlert();\n });\n\n }\n\n setSearch=(data)=>{\n\n this.setState({country: data.country,stateName:data.state}, ()=>{\n \n this.searchData();\n\n });\n\n }\n\n render() \n {\n\n let selectCountry = \"\";\n let cData = this.state.countryData;\n if (cData) \n {\n selectCountry = (\n \n );\n } \n else \n {\n selectCountry = \"\";\n }\n\n let selectState = \"\";\n let sData = this.state.stateData;\n let countryCode = this.state.country;\n if (sData) {\n var filterData = sData.states.filter(function (el) {\n return el.countryCode === countryCode;\n });\n if (filterData.length === 0) {\n selectState = \"\";\n } else {\n selectState = (\n \n );\n }\n } else {\n selectState = \"\";\n }\n\n return (\n <>\n\n {(this.state.loader === true ? : null)}\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
{langService.t(\"CourseSearch_Country\")}
\n
\n
\n {selectCountry}\n {(this.state.emptyCountry === true) ? {langService.t(\"CourseSearch_SelectCountry\")} : null}\n
\n \n
\n
\n
\n {/* {(selectState !== \"\") ?\n
\n
\n
{langService.t(\"CourseSearch_State\")}
\n
\n
\n {selectState}\n {(this.state.emptyState === true) ? {langService.t(\"CourseSearch_SelectState\")} : null}\n
\n
\n
\n
: null\n } */}\n\n
\n
\n
{langService.t(\"CourseSearch_City\")}
\n
\n \n
\n
\n
\n
\n\n
\n {(selectState !== \"\") ?\n
\n
\n
{langService.t(\"CourseSearch_State\")}
\n
\n
\n {selectState}\n {(this.state.emptyState === true) ? {langService.t(\"CourseSearch_SelectState\")} : null}\n
\n
\n
\n
\n :\n
\n
\n
\n
\n
\n
\n }\n
\n \n
\n
\n\n {/*
\n
\n \n
\n
*/}\n
\n
\n\n \n );\n }\n}\n\nexport default Search;","import React from 'react';\n\nclass Alerts extends React.Component \n{\n\n constructor() \n {\n super();\n this.state = {courseData:null, getData: false};\n }\n\n render()\n {\n let alertType = (this.props.alertType==='success' ? 'alert alert-success' : 'alert alert-danger')\n return(\n\n
\n
\n
\n {this.props.alertMessage}\n
\n
\n
\n\n )\n }\n\n}\n\nexport default Alerts;","import React from 'react';\nimport PageLoader from '../Loader/Loader';\nimport Alerts from './alerts';\nimport _ from \"lodash\";\nimport * as configService from \"../../services/configDataService\";\nimport * as langService from '../../services/langService'\n\nclass SearchResult extends React.Component \n{\n\n constructor() \n {\n super();\n this.state = {courseData:null, getData: false, loader:true, errorFlag:false, country:null, updateData:true, searchDataAll:null};\n }\n\n hideAlert=()=>\n {\n\n setTimeout(() => {\n this.setState({errorFlag:false});\n }, 3000);\n\n }\n\n updateData = (propsData)=>\n {\n\n // this.setState({updateData:propsData.searchParams.updateData});\n\n let cityFilter = propsData.searchParams.city;\n\n let searchAllFilter = propsData.searchParams.searchAll;\n \n this.setState({loader:true, country:propsData.searchParams.country});\n\n if(this.state.updateData === false)\n {\n\n let searchData = {items:this.state.searchDataAll, cityFilter:cityFilter, searchAllFilter:searchAllFilter};\n \n // this.setState({loader:true},()=>{\n\n setTimeout(() => {\n \n this.setState({loader:true});\n\n this.searchFields(searchData).then((complete)=>{\n \n this.setState({loader:false});\n \n });\n\n }, 2000);\n\n // })\n\n return;\n\n }\n \n let countryData = propsData.searchParams.country;\n \n let stateData = propsData.searchParams.state;\n \n let configData = configService.getConfigData();\n \n let url = configData.CourseSearchURL.SearchURL;\n \n let golfServicesUrl = `${url}${countryData}`;\n\n if((countryData === 'US') || (countryData === 'CA'))\n {\n golfServicesUrl = `${url}${countryData}-${stateData}`;\n }\n\n let token = configData.AWS_APIKey;\n\n const requestOptions = {\n method: 'GET',\n headers: {'x-api-key':token}\n };\n\n fetch(golfServicesUrl, requestOptions)\n .then(async response => {\n\n const isJson = response.headers.get('content-type')?.includes('application/json');\n const data = isJson && await response.json();\n\n if ((response.ok) && (data.statusCode === 200)) \n {\n\n this.setState({searchDataAll:data.body.items},()=>{\n\n let searchData = {items:data.body.items, cityFilter:cityFilter, searchAllFilter:searchAllFilter};\n this.searchFields(searchData);\n\n })\n\n }\n else\n {\n this.setState({errorFlag:true});\n this.hideAlert();\n }\n\n this.setState({loader:false});\n \n })\n .catch(error => {\n this.setState({errorFlag:true, updateData:true});\n this.hideAlert();\n });\n\n }\n\n searchFields= async (data)=>{\n\n let itemArray = data.items;\n let cityFilter = data.cityFilter;\n let searchAllFilter = data.searchAllFilter;\n\n if((cityFilter !== null) && (cityFilter !== ''))\n {\n itemArray = itemArray.filter(function(item) {\n return item.cit.toUpperCase().indexOf(cityFilter.toUpperCase()) > -1;\n });\n\n }\n \n if((searchAllFilter !== null) && (searchAllFilter !== ''))\n {\n\n itemArray = _.filter(itemArray, function (item) {\n\n return item.nam.toUpperCase().indexOf(searchAllFilter.trim().toUpperCase()) >= 0 \n || item.zip.indexOf(searchAllFilter.trim().toUpperCase()) >= 0 \n || item.nam_nl.indexOf(searchAllFilter.trim()) >= 0 \n\n });\n\n }\n\n itemArray.sort(function(a, b) {\n var nameA = a.nam.toUpperCase();\n var nameB = b.nam.toUpperCase();\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n return 0;\n });\n\n this.setState({courseData: itemArray},()=>{\n\n this.setState({getData: true});\n\n });\n\n\n }\n\n componentWillMount = ()=>\n {\n\n this.updateData(this.props)\n\n }\n\n updateList = ()=>\n {\n const koreanLangCode = ['ko', 'ko-kr']\n\n if((this.state.courseData === null) || (!this.state.courseData) || (this.state.courseData === '') || (this.state.courseData.length === 0))\n {\n return (
{langService.t(\"CourseSearch_NoRecords\")}
);\n }\n else\n {\n if( (langService.getLanguage() === 'ja' && this.state.country === 'JP') \n || (koreanLangCode.includes(langService.getLanguage().toLowerCase()) && this.state.country === 'KR') ){\n return (\n this.state.courseData.map((item, index) =>{\n \n return(\n {item.nam_nl}\n {item.adr_nl}\n {((this.state.country === 'US') || (this.state.country === 'CA')) ? {item.sta} : null}\n {item.cit_nl}\n {item.zip}\n );\n })\n );\n } else {\n return (\n this.state.courseData.map((item, index) =>{\n \n return(\n {item.nam}\n {item.adr}\n {((this.state.country === 'US') || (this.state.country === 'CA')) ? {item.sta} : null}\n {item.cit}\n {item.zip}\n );\n })\n );\n }\n }\n\n\n }\n\n componentWillReceiveProps = (nextProps)=>\n {\n\n let updateData = false;\n\n if(nextProps.searchParams.country !== this.props.searchParams.country)\n {\n updateData = true;\n }\n else if(((typeof nextProps.searchParams.state !== 'undefined')) && (nextProps.searchParams.state !== this.props.searchParams.state))\n {\n updateData = true;\n }\n\n this.setState({updateData:updateData},()=>{\n\n this.updateData(nextProps);\n\n })\n\n }\n\n render() \n {\n\n return (\n <>\n {(this.state.loader === true ? : null)}\n
\n {(this.state.errorFlag === true ? : null)}\n
\n \n \n \n \n \n {((this.state.country === 'US') || (this.state.country === 'CA')) ? : null}\n \n \n \n \n
{langService.t(\"CourseSearch_CourseName\")}{langService.t(\"CourseSearch_CourseAddress\")}{langService.t(\"CourseSearch_State\")}{langService.t(\"CourseSearch_City\")}{langService.t(\"CourseSearch_Zip\")}
\n
\n
\n \n \n {this.updateList()}\n \n
\n
\n
\n\n \n );\n }\n}\n\nexport default SearchResult;","import React from 'react';\nimport {Link} from \"react-router-dom\";\nimport * as langService from '../../services/langService'\n\nclass RequestCourseSection extends React.Component {\n\n render() \n {\n return (\n <>\n\n
\n
\n {langService.t(\"CourseSearch_RefineSearch\")}\n \n \n \n
\n
\n\n \n );\n }\n}\n\nexport default RequestCourseSection;","import React from \"react\";\nimport Alerts from './alerts';\nimport * as langService from '../../services/langService'\n\nclass SuccessMessage extends React.Component \n{\n\n constructor(props) \n {\n super(props);\n this.state = {successAlert: false};\n }\n\n hideAlert=()=>\n {\n\n setTimeout(() => {\n this.setState({successAlert:false});\n }, 10000);\n\n }\n\n componentWillMount(props)\n {\n if(this.props.successAlert === true)\n {\n this.setState({successAlert:true}, ()=>{\n this.hideAlert();\n });\n } \n }\n\n render()\n {\n return(<>{(this.state.successAlert === true) ?
: null});\n }\n\n}\n\nexport default SuccessMessage;\n","import React from \"react\";\nimport Search from './Search';\nimport SearchResult from './SearchResult';\nimport RequestCourseSection from './RequestCourseSection';\nimport SuccessMessage from './SuccessMessage';\n\nclass SearchPage extends React.Component \n{\n\n constructor(props) \n {\n super(props);\n this.state = {searchParams:null, search:false, successAlert: false};\n }\n\n componentWillMount(props){\n \n if((this.props.location.state) && (this.props.location.state.requestSuccess === true))\n {\n this.setState({successAlert:true});\n }\n\n }\n\n handleSearch = (searchData=null)=>\n {\n this.setState({search:true});\n this.setState({searchParams: searchData});\n }\n\n hideAlert=()=>\n {\n\n setTimeout(() => {\n this.setState({successAlert:false});\n }, 3000);\n\n }\n \n render() \n {\n\n return (\n
\n \n \n {this.state.search === true ? : null}\n {this.state.search === true ? : null}\n
\n );\n\n }\n\n}\n\nexport default SearchPage;","import React from 'react';\n\nclass Alerts extends React.Component \n{\n\n constructor() \n {\n super();\n this.state = {courseData:null, getData: false};\n }\n\n render()\n {\n let alertType = (this.props.alertType==='success' ? 'alert alert-success' : 'alert alert-danger')\n return(\n\n
\n
\n
\n {this.props.alertMessage}\n
\n
\n
\n\n )\n }\n\n}\n\nexport default Alerts;","import React, { createRef } from 'react';\nimport * as langService from '../../services/langService';\nimport * as commonService from \"../../services/commonService.js\";\nimport * as configService from \"../../services/configDataService\";\nimport * as downloadService from \"../../services/downloadService\";\nimport * as bushnellAPI from \"../../services/bushnellAPIService\";\nimport SelectList from '../selectList/SelectList';\nimport Alerts from '../requestCourse/alerts';\nimport PageLoader from '../Loader/Loader';\nimport { Link, Redirect } from \"react-router-dom\";\nimport { v4 as uuidv4 } from 'uuid';\n\nclass RequestForm extends React.Component {\n constructor() {\n super();\n\n this.emailRef = createRef();\n this.courseNameRef = createRef();\n this.courseCityRef = createRef();\n this.courseNoteRef = createRef();\n this.file1UploadRef = createRef();\n this.file2UploadRef = createRef();\n this.captchaRef = createRef();\n\n this.state = {\n countryData: null,\n stateData: null,\n country: '',\n stateName: '',\n courseName: '',\n city: '',\n notes: '',\n alertBox: false,\n alertType: '',\n alertMessage: '',\n email: '',\n emailErrorMsg: '',\n emptyCountry: false,\n emptyState: false,\n emptyCourseName: false,\n emptyCity: false,\n emptyNotes: false,\n selectedFile1: null,\n selectedFile2: null,\n pageLoader: true,\n captcha: '',\n isValidCaptcha: false,\n inValidCaptcha: false,\n successRequest: false,\n captchaAction: 'RequestCourse',\n }\n\n this.handleChangeCountry = this.handleChangeCountry.bind(this);\n this.handleChangeState = this.handleChangeState.bind(this);\n\n }\n\n componentDidMount = async () => {\n try {\n this.setState({ pageLoader: false });\n commonService.loadRecaptchaScript();\n await this.storeCountryData();\n } catch (err) {\n commonService.showMessage(\"Error: \" + err.message);\n }\n };\n\n handleChangeCountry(value) {\n this.setState({ stateName: \"\" });\n this.setState({ country: value });\n }\n\n handleChangeState(value) {\n this.setState({ state: value, stateName: value });\n }\n\n changeInput = (event) => {\n\n if (event.target.name === 'courseName') {\n this.setState({ courseName: event.target.value, emptyCourseName: false });\n }\n else if (event.target.name === 'city') {\n this.setState({ city: event.target.value, emptyCity: false });\n }\n else if (event.target.name === 'notes') {\n this.setState({ notes: event.target.value, emptyNotes: false });\n }\n else if (event.target.name === 'email') {\n this.setState({ email: event.target.value, emailErrorMsg: '' });\n }\n\n }\n\n onBrowseClick = event => {\n if (this.state.selectedFile1 === null) {\n this.file1UploadRef.current.click();\n } else if (this.state.selectedFile2 === null) {\n this.file2UploadRef.current.click();\n }\n }\n\n isValidFile(file) {\n let validFlag = true;\n if (!file) {\n validFlag = false;\n } else if (file.size > (5 * 1024 * 1024)) {\n // If size > 5 MB\n validFlag = false;\n } else if (!file.type.match(/.(jpg|jpeg|png)$/i)) {\n validFlag = false;\n }\n return validFlag;\n }\n\n onFile1Change = event => {\n if (this.isValidFile(event.target.files[0])) {\n this.setState({ selectedFile1: event.target.files[0] });\n }\n };\n\n onFile2Change = event => {\n if (this.isValidFile(event.target.files[0])) {\n this.setState({ selectedFile2: event.target.files[0] });\n }\n };\n\n onRemoveFile1 = event => {\n this.setState({ selectedFile1: null });\n };\n\n onRemoveFile2 = event => {\n this.setState({ selectedFile2: null });\n };\n\n\n downloadDataFile = async (dataURL) => {\n let fileObject = await downloadService.downloadData(dataURL);\n if (fileObject.status !== 200) throw new Error(langService.t(\"UserAccount_FileRequestFailed\"));\n return fileObject.json();\n };\n\n downloadData_Country = async () => {\n let URL_Country = \"/testData/data/country.json\";\n let countryData = await this.downloadDataFile(URL_Country);\n return countryData;\n };\n\n downloadData_State = async () => {\n let URL_State = \"/testData/data/state.json\";\n let stateData = await this.downloadDataFile(URL_State);\n return stateData;\n };\n\n storeCountryData = async () => {\n\n let data = this.state.countryData;\n if (!data) {\n let configData = configService.getConfigData();\n let URL_Country = '../' + configData.LocalURL.CountryList;\n let URL_State = '../' + configData.LocalURL.StateList;\n\n let cData = await this.downloadDataFile(URL_Country);\n let sData = await this.downloadDataFile(URL_State);\n this.setState({\n countryData: cData,\n stateData: sData\n });\n }\n };\n\n validateData = () => {\n let success = true;\n this.clearFormValidation();\n let focus = 0;\n\n if ((this.state.email === null) || (this.state.email === \"\")) {\n this.setState({ emailErrorMsg: langService.t('UserAccount_NoEmail') });\n this.emailRef.current.focus();\n focus = 1;\n success = false;\n }\n else {\n let validEmail = new RegExp('^[a-zA-Z0-9._:$!%-]+@[a-zA-Z0-9.-]+.[a-zA-Z]$');\n if (!validEmail.test(this.state.email)) {\n this.setState({ emailErrorMsg: langService.t('UserAccount_InvalidEmail') });\n this.emailRef.current.focus();\n focus = 1;\n success = false;\n }\n }\n\n if ((this.state.country === null) || (this.state.country === \"\")) {\n this.setState({ emptyCountry: true });\n success = false;\n }\n\n if ((this.state.courseName === null) || (this.state.courseName === \"\")) {\n if (focus === 0) {\n this.courseNameRef.current.focus();\n focus = 1;\n }\n this.setState({ emptyCourseName: true });\n success = false;\n }\n\n if ((this.state.city === null) || (this.state.city === \"\")) {\n if (focus === 0) {\n this.courseCityRef.current.focus();\n focus = 1;\n }\n this.setState({ emptyCity: true });\n success = false;\n }\n\n\n return success;\n }\n\n sendData = async (captchaToken) => {\n let isValid = this.validateData();\n if (isValid) {\n this.setState({ pageLoader: true });\n let fileName1;\n let fileName2;\n if (this.state.selectedFile1 !== null) {\n fileName1 = uuidv4() + \".\" + this.state.selectedFile1.name.split('.').pop();\n }\n if (this.state.selectedFile2 !== null) {\n fileName2 = uuidv4() + \".\" + this.state.selectedFile2.name.split('.').pop();\n }\n let responseData = await bushnellAPI.UploadScoreCardImage(this.state.selectedFile1, this.state.selectedFile2, fileName1, fileName2);\n if (responseData.errorCode === 0) {\n let courseData = {\n Email: this.state.email,\n CourseName: this.state.courseName,\n Country: this.state.country,\n State: this.state.stateName,\n City: this.state.city,\n AdditionalNotes: this.state.notes,\n ScoreCardPhotos: [],\n CaptchaResponse: captchaToken,\n CaptchaActionPage: this.state.captchaAction\n };\n if (this.state.selectedFile1 !== null && this.state.selectedFile2 !== null) {\n courseData.ScoreCardPhotos = [ { \"fileName\": fileName1 }, { \"fileName\": fileName2 } ];\n } else if (this.state.selectedFile1 !== null) {\n courseData.ScoreCardPhotos = [ { \"fileName\": fileName1 } ];\n } else if (this.state.selectedFile2 !== null) {\n courseData.ScoreCardPhotos = [ { \"fileName\": fileName2 } ];\n }\n responseData = await bushnellAPI.addCourseRequest(courseData);\n if (responseData.errorCode === 0) {\n this.setState({ alertType: 'success', alertMessage: langService.t(\"CourseSearch_CourseRequestSuccess\") }, () => {\n this.clearForm();\n this.setState({ alertBox: true, pageLoader: false });\n });\n this.setState({ successRequest: true });\n this.hideAlert();\n } else {\n this.setState({ alertType: 'danger', alertMessage: responseData.status }, () => {\n this.setState({ alertBox: true, pageLoader: false });\n });\n this.hideAlert();\n }\n } else {\n this.setState({ alertType: 'danger', alertMessage: responseData.status }, () => {\n this.setState({ alertBox: true, pageLoader: false });\n });\n this.hideAlert();\n }\n }\n }\n\n handleSubmit = async () => {\n try {\n const configData = configService.getConfigData();\n window.grecaptcha.ready(() => {\n window.grecaptcha.execute(configData.Google_ReCaptcha_SiteKey, { action: this.state.captchaAction })\n .then(token => {\n this.sendData(token);\n });\n });\n } catch (err) {\n commonService.Log(err);\n commonService.showMessage(langService.tErrorMsg(err.message));\n }\n }\n\n hideAlert = () => {\n\n setTimeout(() => {\n this.setState({ alertBox: false, alertType: '', alertMessage: '' });\n }, 3000);\n\n }\n\n clearForm = () => {\n this.setState({ country: '', stateName: '', courseName: '', city: '', notes: '', captcha: '' }, async () => {\n await this.storeCountryData();\n });\n }\n\n clearFormValidation = () => {\n\n this.setState({ emptyCountry: false, emptyState: false, emptyCourseName: false, emptyCity: false, emptyNotes: false, emailErrorMsg: '', isValidCaptcha: false, inValidCaptcha: false });\n\n }\n\n render() {\n\n let selectCountry = \"\";\n let cData = this.state.countryData;\n if (cData) {\n selectCountry = (\n \n );\n }\n else {\n selectCountry = \"\";\n }\n\n let selectState = \"\";\n let sData = this.state.stateData;\n let countryCode = this.state.country;\n if (sData) {\n var filterData = sData.states.filter(function (el) {\n return el.countryCode === countryCode;\n });\n if (filterData.length === 0) {\n selectState = (\n this.handleChangeState(e.target.value)}\n />\n );\n } else {\n selectState = (\n \n );\n }\n } else {\n selectState = \"\";\n }\n\n return (\n <>\n {(this.state.successRequest === true) ? : null}\n
\n\n
\n\n {(this.state.alertBox === true ? : null)}\n
\n
\n
{langService.t(\"UserAccount_Email\")} *
\n
\n \n {(this.state.emailErrorMsg !== '') ? {this.state.emailErrorMsg} : null}\n
\n
\n
\n
\n
\n
{langService.t(\"CourseSearch_CourseName\")} *
\n
\n \n {(this.state.emptyCourseName === true) ? {langService.t(\"CourseSearch_EnterCourseName\")} : null}\n
\n
\n
\n
\n
\n
{langService.t(\"CourseSearch_Country\")} *
\n
\n
\n {selectCountry}\n
\n {(this.state.emptyCountry === true) ? {langService.t(\"CourseSearch_SelectCountry\")} : null}\n
\n
\n
\n
\n
\n
{langService.t(\"CourseSearch_State\")}
\n
\n
\n {selectState}\n
\n {(this.state.emptyState === true) ? \n {(this.state.country === 'US' || this.state.country === 'CA') ? langService.t(\"CourseSearch_SelectState\") : langService.t(\"CourseSearch_EnterState\")}\n : null}\n
\n
\n
\n
\n
\n
{langService.t(\"CourseSearch_City\")} *
\n
\n \n {(this.state.emptyCity === true) ? {langService.t(\"CourseSearch_EnterCity\")} : null}\n
\n
\n
\n
\n
\n
{langService.t(\"CourseSearch_AdditionalNotes\")}
\n
\n \n {(this.state.emptyNotes === true) ? {langService.t(\"CourseSearch_EnterAdditionalNotes\")} : null}\n
\n
\n
\n
\n
\n
{langService.t(\"CourseSearch_UploadImages\")}
\n
\n { this.state.selectedFile1 !== null ?\n
\n {this.state.selectedFile1.name} \n { e.preventDefault(); this.onRemoveFile1(); }}>\n
\n : null }\n { this.state.selectedFile2 !== null ?\n
\n {this.state.selectedFile2.name} \n { e.preventDefault(); this.onRemoveFile2(); }}>\n
\n : null }\n { this.state.selectedFile1 === null || this.state.selectedFile2 === null ?\n
\n \n \n \n
\n : null }\n {langService.t(\"CourseSearch_UploadImageLimits\")}\n
\n
\n
\n {/*
\n
\n
{langService.t(\"CourseSearch_Captcha\")} *
\n
\n \n \n {(this.state.inValidCaptcha === true) ? {langService.t(\"CourseSearch_InvalidCaptcha\")} : null}\n
\n
\n
*/}\n
\n
\n
\n \n {langService.t(\"Btn_Back\")}\n
\n
\n
\n\n {(this.state.pageLoader === true ? : null)}\n\n
\n\n
\n\n \n );\n }\n}\n\nexport default RequestForm;","import React from 'react';\nimport RequestForm from './RequestForm';\n\nclass RequestCourse extends React.Component {\n\n render() \n {\n return (\n <>\n\n
\n \n
\n\n \n );\n }\n \n}\n\nexport default RequestCourse;","import React from \"react\";\nimport * as langService from '../../services/langService'\n\nclass PageNotFound extends React.Component \n{\n render() \n {\n return(\n <>\n
\n
\n
\n

{langService.t(\"PageNotFound_404\")}

\n
{langService.t(\"PageNotFound_PageMovedOrNotExist\")}
\n {langService.t(\"Btn_BackToHome\")}\n
\n
\n
\n \n );\n }\n}\nexport default PageNotFound;","import React from \"react\";\nimport './css/styles.css';\nimport SearchPage from './search/SearchPage';\nimport RequestCourse from './requestCourse/RequestCourse';\nimport PageNotFound from './pageNotFound/PageNoteFound';\nimport {\n Switch,\n Route,\n HashRouter\n } from \"react-router-dom\";\n\n function AppCourse() {\n return (\n
\n \n\n \n\n \n \n \n \n \n \n \n \n \n } >\n \n\n \n \n \n
\n );\n }\n\n export default AppCourse;","import InitScript from \"./InitScript\";\nimport MessagePopup from \"./MessagePopup\";\nimport LoaderDisplay from \"./LoaderDisplay\";\nimport Home from \"./Home\";\nimport {\n Switch,\n Route,\n HashRouter\n} from \"react-router-dom\";\nimport AppCourse from '../src/course/AppCourse';\n\nfunction App() {\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \t \n \n \n \n \n \n
\n );\n}\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\n//import reportWebVitals from './reportWebVitals';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\n//reportWebVitals();\n","\nvar configData = {\n URL_BushnellAPI: \"\",\n AWS_APIKey: \"\",\n URL_CoursePackage: \"\",\n URL_CourseDataFile: \"\",\n URL_CourseImageFileHighEnd: \"\",\n URL_CourseData_PipeBugFix: \"\",\n URL_Blob_Scorecard: \"\",\n Google_ReCaptcha_SiteKey: \"\",\n Google_ReCaptcha_URL: \"\",\n FirmwareURL: {\n Firmware_Versions: \"\",\n FotaImage_Versions: \"\",\n FotaImage_Path: \"\",\n FotaReboot_Path: \"\",\n Fota_Image: \"\",\n Fota_Reboot: \"\",\n FotaSlope_Image: \"\",\n FotaSlope_Reboot: \"\",\n Font_File:\"\"\n },\n ExternalLink: {\n PrivacyPolicy: \"\",\n TAndC: \"\",\n Newsletter: \"\",\n ContactSupport: \"\"\n },\n Flags: {\n ShowLanguageSelector: \"\",\n ShowCustomCourseUpdate: \"\",\n UpdateDeleteUnusedDataFiles: \"\",\n EnableDebugLog: \"\",\n EnableRestoreDevice: \"\"\n },\n LocalURL: {\n CountryList: \"\",\n StateList: \"\",\n CourseData_PipeBugFix: \"\"\n },\n CourseSearchURL:{\n SearchURL:\"\",\n RequestURL:\"\"\n }\n}\n\nexport function getConfigData() {\n return configData;\n}\n\nexport function init() {\n let data = getConfigData();\n data.URL_BushnellAPI = process.env.REACT_APP_URL_BUSHNELLAPI;\n data.AWS_APIKey = process.env.REACT_APP_URL_AWSKEY;\n data.URL_CoursePackage = process.env.REACT_APP_URL_COURSEPACKAGE;\n data.URL_CourseDataFile = process.env.REACT_APP_URL_COURSEDATAFILE;\n data.URL_CourseImageFileHighEnd = process.env.REACT_APP_URL_COURSEIMAGEFILE_HIGHEND;\n data.URL_CourseData_PipeBugFix = process.env.REACT_APP_URL_CourseData_PipeBugFix;\n data.URL_Blob_Scorecard = process.env.REACT_APP_URL_Blob_Scorecard;\n\n data.Google_ReCaptcha_SiteKey = process.env.REACT_APP_RECAPTCHA_SITE_KEY\n data.Google_ReCaptcha_URL = process.env.REACT_APP_GOOGLE_RECAPTCHA_URL\n\n data.FirmwareURL.Firmware_Versions = process.env.REACT_APP_URL_FIRMWARE_VERSIONS;\n data.FirmwareURL.FotaImage_Versions = process.env.REACT_APP_URL_FIRMWARE_FOTAIMAGE_VERSIONS;\n data.FirmwareURL.FotaImage_Path = process.env.REACT_APP_URL_FIRMWARE_FOTAIMAGE_PATH;\n data.FirmwareURL.FotaReboot_Path = process.env.REACT_APP_URL_FIRMWARE_FOTAREBOOT_PATH;\n data.FirmwareURL.Fota_Image = process.env.REACT_APP_URL_FIRMWARE_FOTA_IMAGE;\n data.FirmwareURL.Fota_Reboot = process.env.REACT_APP_URL_FIRMWARE_FOTA_REBOOT;\n data.FirmwareURL.FotaSlope_Image = process.env.REACT_APP_URL_FIRMWARE_FOTASLOPE_IMAGE;\n data.FirmwareURL.FotaSlope_Reboot = process.env.REACT_APP_URL_FIRMWARE_FOTASLOPE_REBOOT;\n data.FirmwareURL.Font_File = process.env.REACT_APP_URL_FIRMWARE_FONT_FILE;\n\n data.ExternalLink.PrivacyPolicy = process.env.REACT_APP_URL_PrivacyPolicy;\n data.ExternalLink.TAndC = process.env.REACT_APP_URL_TAndC;\n data.ExternalLink.Newsletter = process.env.REACT_APP_URL_Newsletter;\n data.ExternalLink.ContactSupport = process.env.REACT_APP_URL_ContactSupport;\n\n data.Flags.ShowLanguageSelector = process.env.REACT_APP_FLAG_ShowLanguageSelector;\n data.Flags.ShowCustomCourseUpdate = process.env.REACT_APP_FLAG_ShowCustomCourseUpdate;\n data.Flags.UpdateDeleteUnusedDataFiles = process.env.REACT_APP_FLAG_UpdateDeleteUnusedDataFiles;\n data.Flags.EnableDebugLog = process.env.REACT_APP_FLAG_EnableDebugLog;\n data.Flags.EnableRestoreDevice = process.env.REACT_APP_FLAG_EnableRestoreDevice;\n\n data.LocalURL.CountryList = process.env.REACT_APP_URL_Local_CountryList;\n data.LocalURL.StateList = process.env.REACT_APP_URL_Local_StateList;\n\n data.CourseSearchURL.SearchURL = process.env.REACT_APP_COURSE_SEARCH_URL;\n data.CourseSearchURL.RequestURL = process.env.REACT_APP_COURSE_REQUEST_URL;\n\n configData = data;\n}\n","import { BlobServiceClient } from \"@azure/storage-blob\";\n\nexport async function uploadFileToBlob(urlSAS, containerName, file, fileName) {\n if (!file) return [];\n\n // get BlobService = notice `?` is pulled out of sasToken - if created in Azure portal\n const blobService = new BlobServiceClient(urlSAS); //`https://${account}.blob.core.windows.net/?${sasToken}`);\n const containerClient = blobService.getContainerClient(containerName);\n const blobClient = containerClient.getBlockBlobClient(fileName);\n\n // set mimetype as determined from browser with file upload control\n const options = { blobHTTPHeaders: { blobContentType: file.type } };\n await blobClient.uploadData(file, options);\n}\n","import * as commonService from \"./commonService.js\";\nimport * as sessionService from \"./sessionService.js\";\nimport * as langService from '../services/langService';\nimport * as configDataService from \"../services/configDataService\";\nimport * as downloadService from \"../services/downloadService\";\nimport * as azureBlobService from \"../services/azureBlobService\";\n\nconst URL_UserLogin = \"/User/Login\";\nconst URL_UserProfile = \"/User/UserProfile\";\nconst URL_UpdateUserAddress = \"/User/UpdateUserAddress\";\nconst URL_ValidateEmailAndPhone = \"/User/ValidateEmailAndPhone\";\nconst URL_CreateUser = \"/User/CreateUser\";\nconst URL_SendVerificationCode = \"/User/SendVerificationCode\";\nconst URL_RefreshToken = \"/User/RefreshToken\";\nconst URL_ResetPassword = \"/User/ResetPasswordFromUSBTool\";\nconst URL_GetVerifiedChannels = \"/User/GetVerifiedChannels\";\n//const URL_DecryptDeviceInfo = \"/User/DecryptDeviceInfo\";\n//const URL_RegisterUserBushnellDevice = \"/User/RegisterUserBushnellDevice\";\nconst URL_ValidatePhoneNumber = \"/User/ValidatePhoneNumber\";\nconst URL_RegisterUSBToolBushnellDevice = \"/User/RegisterUSBToolBushnellDevice\";\nconst URL_AddCourseRequest = \"/User/AddCourseRequest\";\nconst URL_GetSASTokenForChromeTool = \"/User/GetSASTokenForChromeTool\";\n\nconst Data_AppVersion = \"1.0\";\nconst Data_DeviceType = \"101\";\nconst Data_InstallId = 1;\n\nexport function getBaseURL() {\n return configDataService.getConfigData().URL_BushnellAPI;\n}\n\nfunction getHeaders(APIKey) {\n let APIHeaders;\n if (APIKey) {\n APIHeaders = {\n accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n appVersion: Data_AppVersion,\n deviceType: Data_DeviceType,\n Authorization: \"Bearer \" + APIKey,\n };\n } else {\n APIHeaders = {\n accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n appVersion: Data_AppVersion,\n deviceType: Data_DeviceType,\n };\n }\n return APIHeaders;\n}\n\nasync function downloadDataBase(dataURL, isPost, postData) {\n let APIKey = sessionService.getValidAccessToken();\n let APIHeaders = getHeaders(APIKey);\n let resultObject = await downloadService.downloadData_Bushnell(dataURL, APIHeaders, isPost, postData);\n return resultObject;\n}\n\nasync function downloadData(dataURL, isPost, postData) {\n commonService.Log(\"needTokenRefresh : \" + sessionService.needTokenRefresh());\n if (sessionService.needTokenRefresh()) {\n commonService.Log(\"Need token refresh\");\n let token = sessionService.getToken();\n let postData = {\n accessToken: token.accessToken,\n refreshToken: token.refreshToken,\n };\n let tokenResultObject = await downloadDataBase(getBaseURL() + URL_RefreshToken, true, postData);\n if (tokenResultObject.status === 200) {\n token = await tokenResultObject.json();\n sessionService.setToken(token);\n commonService.Log(\"New token set\");\n } else {\n commonService.Log(\"Failed to get new token\");\n throw new Error(langService.t(\"BAPIService_ServiceLoginFailed\"));\n }\n }\n let resultObject = await downloadDataBase(dataURL, isPost, postData);\n return resultObject;\n}\n\nexport async function downloadData_GET(dataURL) {\n let resultObject = await downloadData(dataURL, false, null);\n return resultObject;\n}\n\nexport async function downloadData_POST(dataURL, postData) {\n let resultObject = await downloadData(dataURL, true, postData);\n return resultObject;\n}\n\nasync function downloadUserProfile() {\n let userData = null;\n let resultObject = await downloadData_GET(getBaseURL() + URL_UserProfile);\n if (resultObject.status === 200) {\n userData = await resultObject.json();\n }\n return { status: resultObject.status, profile: userData };\n}\n\nexport async function Login(email, password) {\n let postData = {\n email: email,\n password: password,\n installId: Data_InstallId,\n };\n let returnCode = 0;\n let returnMsg = \"\";\n let resultObject = await downloadData_POST(getBaseURL() + URL_UserLogin, postData);\n if (resultObject.status === 200) {\n let userData = await resultObject.json();\n sessionService.setToken(userData);\n resultObject = await downloadUserProfile();\n if (resultObject.status === 200) {\n sessionService.setUserProfile(resultObject.profile);\n } else {\n sessionService.logout();\n returnCode = resultObject.status;\n returnMsg = langService.t(\"BAPIService_InvalidCredentials\");\n }\n } else if (resultObject.status === 401) {\n returnCode = resultObject.status;\n returnMsg = langService.t(\"BAPIService_InvalidCredentials\");\n } else if (resultObject.status === 412) {\n returnCode = resultObject.status;\n returnMsg = langService.t(\"BAPIService_AccountDeactivated\");\n } else {\n returnCode = resultObject.status;\n returnMsg = langService.t(\"BAPIService_InvalidCredentials\");\n }\n return { errorCode: returnCode, status: returnMsg };\n}\n\nexport async function Logout() {\n sessionService.logout();\n}\n\nexport async function GetVerifiedChannels(email) {\n let postData = { email: email };\n let data = await downloadData_POST(getBaseURL() + URL_GetVerifiedChannels, postData);\n return data;\n}\n\nexport async function SendVerificationCode(to, channel, captchaResponse, captchaActionPage) {\n let postData = { \n to: to,\n channel: channel,\n CaptchaResponse: captchaResponse,\n CaptchaActionPage: captchaActionPage\n };\n let data = await downloadData_POST(getBaseURL() + URL_SendVerificationCode, postData);\n return data;\n}\n\nexport async function CreateUser(firstName, lastName, email, countryCode, phoneNumber, password, verificationCode, sendType, language, sid) {\n let postData = {\n firstName: firstName,\n lastName: lastName,\n email: email,\n countryCode: countryCode,\n phoneNumber: phoneNumber,\n password: password,\n LanguageCode: language,\n Sid: sid\n };\n\n if (sendType === 2) {\n postData.isPhoneVerified = true;\n postData.isEmailVerified = false;\n } else {\n postData.isPhoneVerified = false;\n postData.isEmailVerified = true;\n }\n if (verificationCode) {\n postData.verificationCode = verificationCode;\n }\n let response = await downloadData_POST(getBaseURL() + URL_CreateUser, postData);\n if (response.status === 200) {\n sessionService.setToken(await response.json());\n return true;\n }\n else if (response.status === 401) {\n return { errorCode: 401, status: langService.t(\"BAPIService_InvalidVerificationCode\") };\n }\n else {\n return {\n errorCode: 500,\n status: langService.t(\"BAPIService_UnexpectedError\"),\n };\n }\n}\n\nexport async function ValidateEmailAndPhone(email, countryCode, phoneNumber, type) {\n let postData = {\n email: email,\n countryCode: countryCode,\n phoneNumber: phoneNumber,\n type: type,\n };\n let response = await downloadData_POST(getBaseURL() + URL_ValidateEmailAndPhone, postData);\n if (response.status === 200) {\n return await response.json();\n }\n else if (response.status === 409) {\n return { errorCode: 409, status: langService.t(\"BAPIService_EmailExists\") };\n }\n else if (response.status === 412) {\n return {\n errorCode: 412,\n status: langService.t(\"BAPIService_AccountDeactivated\"),\n };\n }\n else if (response.status === 504) {\n return {\n errorCode: response.status,\n status: langService.t(\"BAPIService_EmailPhone\"),\n };\n }\n else if (response.status === 400) {\n return {\n errorCode: 400,\n status: langService.t(\"BAPIService_ErrorValidatePhone\"),\n };\n }\n else {\n return {\n errorCode: 500,\n status: langService.t(\"BAPIService_UnexpectedError\"),\n };\n }\n}\n\nexport async function ValidatePhoneNumber(phoneNumber) {\n let postData = {\n phoneNumber,\n };\n let response = await downloadData_POST(getBaseURL() + URL_ValidatePhoneNumber, postData);\n if (response.status === 200) {\n return await response.json();\n } else {\n return {\n errorCode: response.status,\n status: langService.t(\"BAPIService_ErrorValidatePhone\"),\n };\n }\n}\n\n// export async function DecryptDeviceInfo(deviceInfo) {\n// let postData = {\n// deviceInfo,\n// };\n// let response = await downloadData_POST(getBaseURL() + URL_DecryptDeviceInfo, postData);\n// if (response.status === 200) {\n// return await response.json();\n// } else {\n// return { errorCode: 409, status: langService.t(\"BAPIService_ErrorDecryptDeviceInfo\") };\n// }\n// }\n\nexport async function RegisterUSBToolBushnellDeviceGET(deviceInfo) {\n deviceInfo = encodeURIComponent(deviceInfo);\n let response = await downloadData_GET(getBaseURL() + URL_RegisterUSBToolBushnellDevice + \"?DeviceInfo=\" + deviceInfo);\n if (response.status === 200) {\n return await response.json();\n } else {\n return { errorCode: 409, status: langService.t(\"BAPIService_ErrorDecryptDeviceInfo\") };\n }\n}\n\nexport async function RegisterUSBToolBushnellDevicePOST(deviceInfo, deviceFirmwareVersion, courseDBVersion) {\n let postData = {\n deviceInfo,\n deviceFirmwareVersion,\n courseDBVersion,\n };\n let response = await downloadData_POST(getBaseURL() + URL_RegisterUSBToolBushnellDevice, postData);\n if (response.status === 200) {\n let profileResponse = await downloadUserProfile();\n sessionService.setUserProfile(profileResponse.profile);\n return await response.json();\n } else {\n return {\n errorCode: 409,\n status: langService.t(\"BAPIService_ErrorRegisterDevice\"),\n };\n }\n}\n\nexport async function isRegisteredDevice(macId) {\n let isSame = false;\n let profile = sessionService.getUserProfile();\n if (profile) {\n for (let device of profile.userProfile.devices) {\n if (device.macId === macId) {\n isSame = true;\n break;\n }\n }\n } else {\n throw new Error(langService.t(\"BAPIService_UserProfileNotFound\"));\n }\n return isSame;\n}\n\nexport async function canRegisterDevice(macId, sku) {\n let canRegister = true;\n if (isRegisteredDevice(macId)) {\n canRegister = false;\n }\n else {\n // Code to stop registration if a regeistered phantom/IonEdge device exist. Ask Jomy JK for more details\n let profile = sessionService.getUserProfile();\n let supportedDevices = commonService.getSupportedDevices();\n for (let selectedSKUList of supportedDevices) {\n if (selectedSKUList.SKUs.includes(sku)) {\n for (let device of profile.userProfile.devices) {\n if (selectedSKUList.SKUs.includes(device.sku)) {\n canRegister = false;\n break;\n }\n }\n }\n }\n }\n return canRegister;\n}\n\nexport function validateSKU(deviceSKU) {\n let isValid = false;\n let supportedDevices = commonService.getSupportedDevices();\n for (let selectedSKUList of supportedDevices) {\n if (selectedSKUList.SKUs.includes(deviceSKU)) {\n isValid = true;\n break;\n }\n }\n if (!isValid) {\n throw new Error(langService.t(\"BAPIService_DeviceNotSupported\"));\n }\n}\n\nexport function getUserProfile() {\n return sessionService.getUserProfile();\n}\n\nexport async function updateUserAddress(addressData) {\n let returnCode = 0;\n let returnMsg = \"\";\n let postData = {\n StreetName: addressData.StreetName,\n City: addressData.City,\n State: addressData.State,\n Country: addressData.Country,\n Zip: addressData.Zip,\n };\n let response = await downloadData_POST(getBaseURL() + URL_UpdateUserAddress, postData);\n if (response.status !== 200) {\n returnCode = response.status;\n returnMsg = langService.t(\"BAPIService_AddressUpdateFailed\");\n }\n return { errorCode: returnCode, status: returnMsg };\n}\n\nexport async function resetPassword(sendType, email, OTP, newPassword, sid) {\n let returnCode = 0;\n let returnMsg = \"\";\n let postData = {\n Email: email,\n Password: newPassword,\n VerificationCode: OTP,\n ChannelType: sendType,\n Sid: sid,\n };\n let response = await downloadData_POST(getBaseURL() + URL_ResetPassword, postData);\n if (response.status !== 200) {\n returnCode = response.status;\n returnMsg = langService.t(\"BAPIService_PasswordResetFailed\");\n }\n return { errorCode: returnCode, status: returnMsg };\n}\n\nexport async function addCourseRequest(courseData) {\n let returnCode = 0;\n let returnMsg = \"\";\n let postData = {\n Email: courseData.Email,\n CourseName: courseData.CourseName,\n Country: courseData.Country,\n State: courseData.State,\n City: courseData.City,\n AdditionalNotes: courseData.AdditionalNotes,\n ScoreCardPhotos: courseData.ScoreCardPhotos,\n CaptchaResponse: courseData.CaptchaResponse,\n CaptchaActionPage: courseData.CaptchaActionPage\n };\n let response = await downloadData_POST(getBaseURL() + URL_AddCourseRequest, postData);\n if (response.status !== 200) {\n returnCode = response.status;\n returnMsg = langService.t(\"BAPIService_CourseRequestFailed\");\n }\n return { errorCode: returnCode, status: returnMsg };\n}\n\nasync function GetFileUploadToken() {\n let response = await downloadData_GET(getBaseURL() + URL_GetSASTokenForChromeTool);\n if (response.status === 200) {\n return await response.json();\n } else {\n return { errorCode: response.status, status: langService.t(\"BAPIService_FileTokenRequestFailed\") };\n }\n}\n\nexport async function UploadScoreCardImage(file1, file2, fileName1, fileName2) {\n let returnCode = 0;\n let returnMsg = \"\";\n let isStateValid = true;\n let token;\n let response;\n if (file1 !== null || file2 !== null) {\n response = await GetFileUploadToken();\n if (response.errorCode) {\n isStateValid = false;\n returnCode = response.status;\n returnMsg = langService.t(\"BAPIService_FileTokenRequestFailed\");\n commonService.Log(\"Failed to get file upload token\");\n } else {\n token = response.token;\n commonService.Log(\"Adding file upload token\");\n }\n let configData = configDataService.getConfigData();\n let urlSAS = configData.URL_Blob_Scorecard.replace(\"{SASToken}\", token);\n\n if (isStateValid && file1 !== null) {\n commonService.Log(\"Uploading File 1\");\n try {\n response = await azureBlobService.uploadFileToBlob(urlSAS, \"scorecardimages\", file1, fileName1);\n }\n catch {\n isStateValid = false;\n returnCode = response.status;\n returnMsg = langService.t(\"BAPIService_FileUploadFailed\");\n commonService.Log(\"Failed to upload File 1\");\n }\n }\n if (isStateValid && file2 !== null) {\n commonService.Log(\"Uploading File 2\");\n try {\n response = await azureBlobService.uploadFileToBlob(urlSAS, \"scorecardimages\", file2, fileName2);\n }\n catch {\n isStateValid = false;\n returnCode = response.status;\n returnMsg = langService.t(\"BAPIService_FileUploadFailed\");\n commonService.Log(\"Failed to upload File 2\");\n }\n }\n }\n return { errorCode: returnCode, status: returnMsg };\n}\n","import i18n from \"i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport XHR from \"i18next-xhr-backend\";\n\nimport translationEnglish from \"./locales/en.json\";\nimport translationChineseSimplified from \"./locales/zh-CN.json\";\nimport translationJapanese from \"./locales/ja.json\";\nimport translationFrench from \"./locales/fr.json\";\nimport translationGerman from \"./locales/de.json\";\nimport translationPortuguese from \"./locales/pt-PT.json\";\nimport translationKorean from \"./locales/ko.json\";\nimport translationIndonesian from \"./locales/id.json\";\nimport translationSpanish from \"./locales/es.json\";\nimport translationItalian from \"./locales/it.json\";\nimport translationSwedish from \"./locales/sv.json\";\nimport translationDanish from \"./locales/da.json\";\nimport translationThai from \"./locales/th.json\";\n\n/*\nconst options = {\n order: ['navigator']\n}\n*/\n\ni18n.use(XHR)\n .use(LanguageDetector)\n .init({\n\n // Force browser language only\n //detection: options,\n\n // we init with resources\n resources: {\n en: { translations: translationEnglish },\n 'zh-CN': { translations: translationChineseSimplified },\n ja: { translations: translationJapanese },\n fr: { translations: translationFrench },\n de: { translations: translationGerman },\n 'pt-PT': { translations: translationPortuguese },\n ko: { translations: translationKorean },\n id: { translations: translationIndonesian },\n es: { translations: translationSpanish },\n it: { translations: translationItalian },\n sv: { translations: translationSwedish },\n da: { translations: translationDanish },\n th: { translations: translationThai }\n },\n // lng: \"en\",\n fallbackLng: \"en\",\n debug: false,\n\n // have a common namespace used around the full app\n ns: [\"translations\"],\n defaultNS: \"translations\",\n\n keySeparator: false, // we use content as keys\n\n interpolation: {\n escapeValue: false, // not needed for react!!\n formatSeparator: \",\",\n },\n\n react: {\n wait: true,\n },\n });\n\nexport default i18n;\n","import i18n from \"../i18n\";\n\nexport function t(key) {\n return i18n.t(key);\n}\n\nexport function tErrorMsg(key) {\n return i18n.t(\"ErrorPrefix\") + i18n.t(key);\n}\n\nexport function changeLanguage(newlang) {\n i18n.changeLanguage(newlang);\n}\n\nexport function getLanguage() {\n return i18n.language;\n}\n","import * as commonService from \"./commonService.js\";\n\nexport async function downloadData_AWS(dataURL, AWSKey, isTar = false) {\n commonService.Log(\"Downloading : \" + dataURL);\n let fileObject;\n if (isTar) {\n fileObject = await fetch(dataURL, {\n method: \"get\",\n headers: {\n \"x-api-key\": AWSKey,\n \"Content-Type\": \"application/x-tar\",\n },\n });\n }\n else {\n fileObject = await fetch(dataURL, {\n method: \"get\",\n headers: {\n \"x-api-key\": AWSKey,\n },\n });\n }\n if (fileObject.status === 200) commonService.Log(\"Download completed\");\n else commonService.Log(\"Download failed : \" + fileObject.status);\n return fileObject;\n}\n\nexport async function downloadData(dataURL) {\n commonService.Log(\"Downloading : \" + dataURL);\n let fileObject = await fetch(dataURL, {\n //mode: \"no-cors\",\n method: \"get\",\n //headers: {\n // \"Accept\": \"application/json\"\n //}\n });\n if (fileObject.status === 200) commonService.Log(\"Download completed\");\n else commonService.Log(\"Download failed : \" + fileObject.status);\n return fileObject;\n}\n\nexport async function downloadData_Bushnell(dataURL, APIHeaders, isPost, postData) {\n let resultObject = null;\n commonService.Log(\"Downloading : \" + dataURL);\n if (isPost) {\n resultObject = await fetch(dataURL, {\n method: \"post\",\n body: JSON.stringify(postData),\n headers: APIHeaders,\n });\n } else {\n resultObject = await fetch(dataURL, {\n method: \"get\",\n headers: APIHeaders,\n });\n }\n if (resultObject.status === 200) commonService.Log(\"Download completed\");\n else commonService.Log(\"Download failed : \" + resultObject.status);\n return resultObject;\n}\n","const SKey_Token = \"SKey_Token\";\nconst SKey_UserProfile = \"SKey_UserProfile\";\n\nfunction sessionGet(key) {\n let sData = sessionStorage.getItem(key);\n return JSON.parse(sData);\n}\n\nfunction sessionSet(key, value) {\n sessionStorage.setItem(key, JSON.stringify(value));\n}\n\nfunction sessionClear() {\n sessionStorage.removeItem(SKey_UserProfile);\n sessionStorage.removeItem(SKey_Token);\n}\n\nexport function logout() {\n sessionClear();\n}\n\nexport function isLoggedIn() {\n var token = sessionGet(SKey_Token);\n if (token) return true;\n else return false;\n}\n\nexport function isExpired() {\n let expired = false;\n let token = getToken();\n if (token.accessTokenExpiry < new Date().getTime() / 1000) {\n expired = true;\n }\n return expired;\n}\n\nexport function needTokenRefresh() {\n let result = false;\n if (isLoggedIn()) {\n if (isExpired()) {\n result = true;\n }\n }\n return result;\n}\n\nexport function isValidAccessToken() {\n let isValid = false;\n if (isLoggedIn()) {\n if (!isExpired()) {\n isValid = true;\n }\n }\n return isValid;\n}\n\nexport function getValidAccessToken() {\n let APIKey = null;\n let token = getToken();\n if (isLoggedIn()) {\n if (!isExpired()) {\n APIKey = token.accessToken;\n }\n }\n return APIKey;\n}\n\nexport function getToken() {\n return sessionGet(SKey_Token);\n}\n\nexport function setToken(value) {\n sessionSet(SKey_Token, value);\n}\n\nexport function getUserProfile() {\n return sessionGet(SKey_UserProfile);\n}\n\nexport function setUserProfile(value) {\n sessionSet(SKey_UserProfile, value);\n}\n","import * as commonService from \"./commonService.js\";\nimport * as updateService from \"./updateService.js\";\nimport * as bushnellAPI from \"../services/bushnellAPIService.js\";\nimport * as courseSearchService from \"../services/courseSearchService\";\n\nvar selectedFolder;\nvar versionData = null;\n\nexport function init() {\n window.updateStatus = {\n download: { progress: 0, maxProgress: 0, details: null },\n firmware: { progress: 0, maxProgress: 0, details: null },\n course: { progress: 0, flipCount: 0, maxProgress: 0, details: null },\n device: { progress: 0, maxProgress: 0, details: null },\n font: { progress: 0, maxProgress: 0, details: null },\n };\n}\n\nexport function refreshProgress() {\n if (window.updateStatus.download.progress < window.updateStatus.download.maxProgress) {\n window.updateStatus.download.progress = window.updateStatus.download.progress + 1;\n }\n if (window.updateStatus.firmware.progress < window.updateStatus.firmware.maxProgress) {\n window.updateStatus.firmware.progress = window.updateStatus.firmware.progress + 1;\n }\n if (window.updateStatus.course.progress < window.updateStatus.course.maxProgress) {\n window.updateStatus.course.flipCount += 1;\n if (window.updateStatus.course.flipCount > 1) {\n window.updateStatus.course.flipCount = 0;\n window.updateStatus.course.progress = window.updateStatus.course.progress + 1;\n }\n }\n if (window.updateStatus.device.progress < window.updateStatus.device.maxProgress) {\n window.updateStatus.device.progress = window.updateStatus.device.progress + 1;\n }\n if (window.updateStatus.font.progress < window.updateStatus.font.maxProgress) {\n window.updateStatus.font.progress = window.updateStatus.font.progress + 1;\n }\n}\n\n// function ab2str(buf) {\n// return String.fromCharCode.apply(null, new Uint8Array(buf));\n// }\n\n// const toBase64 = (file) =>\n// new Promise((resolve, reject) => {\n// const reader = new FileReader();\n// reader.readAsDataURL(file);\n// reader.onload = () => resolve(reader.result);\n// reader.onerror = (error) => reject(error);\n// });\n\nexport async function getMetadataInfo() {\n let metadataBuffer = await updateService.getMetadataFile(selectedFolder);\n // let deviceInfo = btoa(String.fromCharCode.apply(null, new Uint8Array(metadataBuffer))); // btoa is deprecated\n let deviceInfo = Buffer.from(metadataBuffer, 'binary').toString('base64');\n return deviceInfo;\n}\n\nfunction getDeviceName(dvn) {\n let result;\n if (dvn.endsWith(\" Slope\")) {\n result = dvn.substring(0, (dvn.length - \" Slope\".length))\n .replace(\" \", \"\");\n } else {\n result = dvn;\n }\n return result;\n}\n\nasync function getMetadata() {\n let deviceInfo = await getMetadataInfo();\n let decryptDeviceInfo = await bushnellAPI.RegisterUSBToolBushnellDeviceGET(deviceInfo).then((response) => {\n if (!response.errorCode) {\n return {\n name: getDeviceName(response.dvn),\n fullName: response.dvn,\n SN: response.sns,\n SKU: response.sku,\n bma: response.bma,\n mdl: response.mdl,\n mft: response.mft,\n };\n } else {\n throw new Error(response.status);\n }\n });\n return decryptDeviceInfo;\n}\n\nexport async function selectFolder() {\n commonService.Log(\"Selecting folder\");\n selectedFolder = await updateService.selectFolder();\n if (selectedFolder) {\n let metadata = await getMetadata();\n versionData = await updateService.readLocalFileVersions(selectedFolder, metadata);\n commonService.Log(\"Folder selected\");\n\n bushnellAPI.validateSKU(versionData.deviceSKU);\n versionData.macID = metadata.bma;\n\n versionData.isKRJPLangSupported = commonService.isLanguageSupportRequiredKRJP(versionData.deviceName, versionData.firmware.localVersion)\n versionData = await updateService.checkForUpdate(versionData, selectedFolder);\n commonService.LogData(\"Version Data\", versionData);\n\n return versionData;\n } else {\n return null;\n }\n}\n\nexport function getVersionData() {\n return versionData;\n}\n\nexport async function setUpdateFlags(enableCourse, enableFirmware, partialCourse) {\n let changeVersionFile = getVersionData();\n const isFirmwareNewVersion = (enableFirmware ? true : false);\n changeVersionFile.course.newVersion = (enableCourse ? true : false);\n changeVersionFile.firmware.newVersion = isFirmwareNewVersion;\n if (enableCourse) {\n changeVersionFile.coursePartial.enabled = partialCourse;\n }\n changeVersionFile.needUpdate = (enableCourse || enableFirmware);\n \n if (!isFirmwareNewVersion){\n changeVersionFile.font.updateRequired = false\n }\n if (changeVersionFile.isKRJPLangSupported && !isFirmwareNewVersion){\n changeVersionFile = await updateService.updateCourcePackageData(changeVersionFile)\n }\n if (changeVersionFile.isKRJPLangSupported)\n changeVersionFile.isKRJPLangSupported = isFirmwareNewVersion\n versionData = changeVersionFile;\n commonService.LogData(\"Final Version Data\", versionData);\n}\n\nexport function setPartialCourses(courses) {\n let changeVersionFile = getVersionData();\n changeVersionFile.coursePartial.enabled = true;\n changeVersionFile.coursePartial.selectedCourses = courses;\n versionData = changeVersionFile;\n}\n\nexport function setFullCourseUpdate() {\n let changeVersionFile = getVersionData();\n changeVersionFile.coursePartial.enabled = false;\n changeVersionFile.coursePartial.selectedCourses = [];\n versionData = changeVersionFile;\n}\n\nexport async function setRestoreDevice() {\n let changeVersionFile = getVersionData();\n changeVersionFile = await updateService.setRestoreDevice(changeVersionFile);\n versionData = changeVersionFile;\n commonService.LogData(\"Version Data\", versionData);\n}\n\nexport function setCourseProgress(currentFile, totalFiles) {\n let progress = Math.floor((currentFile / totalFiles) * 100);\n if (progress > 90) {\n progress = 90;\n }\n //window.updateStatus.course.details = \" - (\" + currentFile + \" of \" + totalFiles + \")\";\n window.updateStatus.course.maxProgress = progress;\n}\n\nexport function startDownload() {\n window.updateStatus.download.maxProgress = 65;\n window.updateStatus.download.progress = 1;\n}\n\nexport function endDownload() {\n window.updateStatus.download.maxProgress = 0;\n window.updateStatus.download.progress = 100;\n}\n\nexport async function slowdown() {\n await new Promise(function (resolve) {\n setTimeout(resolve, 3000);\n });\n}\n\nfunction isKRJPUpdateRequired(){\n let isUpdateRequired = false\n let changeVersionFile = getVersionData() \n if (changeVersionFile.isKRJPLangSupported && changeVersionFile.firmware.newVersion) {\n if ( changeVersionFile.coursePartial.enabled || changeVersionFile.course.newVersion === false ) {\n changeVersionFile.coursePartial.enabled = true;\n isUpdateRequired = true\n versionData = changeVersionFile\n }\n }\n commonService.Log(`Korean and Japanees course download required : ${isUpdateRequired} `)\n return isUpdateRequired\n}\n\nasync function downloadCoursesKRJP(){\n let KRJPCourses = [];\n let changeVersionFile = getVersionData()\n if (isKRJPUpdateRequired()) {\n const country_Korea = await courseSearchService.downloadData_CourseSearch('KR', '');\n const country_Japan = await courseSearchService.downloadData_CourseSearch('JP', '');\n KRJPCourses = [...country_Korea, ...country_Japan]\n commonService.Log(`${KRJPCourses.length} Korean and Japanees courses need to be updated.`);\n }\n\n if (changeVersionFile.coursePartial.selectedCourses) {\n changeVersionFile.coursePartial.selectedCourses = [...changeVersionFile.coursePartial.selectedCourses, ...KRJPCourses]\n }\n else {\n changeVersionFile.coursePartial.selectedCourses = [...KRJPCourses]\n }\n commonService.Log(`Total ${changeVersionFile.coursePartial.selectedCourses.length} course(s) need to be updated.`);\n versionData = changeVersionFile\n}\n\nasync function updateCource(changeVersionFile){\n if (changeVersionFile.course.newVersion || (changeVersionFile.isKRJPLangSupported && changeVersionFile.firmware.newVersion)) {\n window.updateStatus.course.details = null;\n window.updateStatus.course.maxProgress = 1;\n window.updateStatus.course.progress = 1;\n await slowdown();\n\n if (changeVersionFile.coursePartial.enabled) {\n await updateService.updatePartialCourse(selectedFolder, changeVersionFile, setCourseProgress);\n } else {\n await updateService.updateCourse(selectedFolder, changeVersionFile, setCourseProgress);\n }\n\n // let changeCourseFile = await updateService.checkCourseList(selectedFolder);\n // let totalFiles = changeCourseFile.create.length + changeCourseFile.update.length + changeCourseFile.delete.length;\n // if (totalFiles > 0) {\n // await updateService.downloadCourseFiles(selectedFolder, changeCourseFile, setCourseProgress);\n // await updateService.createNewFileCourseFile(selectedFolder, changeCourseFile);\n // await updateService.updateCourseList(selectedFolder);\n // }\n\n await slowdown();\n }\n window.updateStatus.course.maxProgress = 0;\n window.updateStatus.course.progress = 100;\n}\n\nasync function updateFirmware(changeVersionFile){\n if (changeVersionFile.firmware.newVersion) {\n window.updateStatus.firmware.details = null;\n window.updateStatus.firmware.maxProgress = 65;\n window.updateStatus.firmware.progress = 5;\n await updateService.updateFirmware(selectedFolder, changeVersionFile);\n await slowdown();\n }\n window.updateStatus.firmware.maxProgress = 0;\n window.updateStatus.firmware.progress = 100;\n}\n\nasync function downloadSaveFontFile(){\n window.updateStatus.font.details = null;\n window.updateStatus.font.maxProgress = 65;\n window.updateStatus.font.progress = 5;\n await updateService.downloadSaveFontFile(selectedFolder)\n await slowdown();\n window.updateStatus.font.maxProgress = 0;\n window.updateStatus.font.progress = 100;\n}\n\nexport async function startUpdate() {\n commonService.Log(\"Cource & Firmware update started.\");\n // Download and check version files\n startDownload();\n await downloadCoursesKRJP()\n // let changeVersionFile = await updateService.checkForUpdate(versionData);\n let changeVersionFile = getVersionData();\n endDownload();\n //await slowdown();\n\n if (changeVersionFile.needUpdate) {\n commonService.logTime(\"Log time\");\n await commonService.ScreenWakeLock_Enable();\n //// Download files\n // startDownload();\n // await updateService.downloadCourseListFile(selectedFolder, changeVersionFile, setDownloadFileName);\n // endDownload();\n // await slowdown();\n\n // const isUpdateRequiredKOJA = commonService.isLanguageSupportRequiredKRJP(changeVersionFile.deviceName, changeVersionFile.firmware.localVersion)\n if(changeVersionFile.isKRJPLangSupported){\n if(changeVersionFile.font.updateRequired){\n // Download Font file\n await downloadSaveFontFile(changeVersionFile)\n }\n // Firmware update\n await updateFirmware(changeVersionFile)\n // Course update\n await updateCource(changeVersionFile)\n }\n else {\n if(changeVersionFile.font.updateRequired){\n // Download Font file\n await downloadSaveFontFile(changeVersionFile)\n }\n // Course update\n await updateCource(changeVersionFile)\n // Firmware update\n await updateFirmware(changeVersionFile)\n }\n\n // Cleanup\n window.updateStatus.device.details = null;\n window.updateStatus.device.maxProgress = 65;\n window.updateStatus.device.progress = 5;\n //await updateService.updateVersionsFile(selectedFolder, changeVersionFile);\n await updateService.cleanUp(selectedFolder, changeVersionFile.deviceName);\n versionData = null;\n await slowdown();\n window.updateStatus.device.maxProgress = 0;\n window.updateStatus.device.progress = 100;\n\n await commonService.ScreenWakeLock_Disable();\n commonService.logTime(\"Log time\");\n }\n return changeVersionFile.needUpdate;\n}\n","// Dialog\n\nexport async function selectFolderPicker() {\n let result = null;\n try {\n result = await window.showDirectoryPicker();\n } catch (err) {}\n return result;\n}\n\nexport async function openFilePicker(options) {\n let result = null;\n try {\n if (options) {\n result = await window.showOpenFilePicker(options);\n } else {\n result = await window.showOpenFilePicker();\n }\n } catch (err) {}\n return result;\n}\n\nexport async function saveFilePicker(options) {\n let result = null;\n try {\n if (options) {\n result = await window.showSaveFilePicker(options);\n } else {\n result = await window.showSaveFilePicker();\n }\n } catch (err) {}\n return result;\n}\n\n// Folder\n\nexport async function selectChildFolder(parentFolder, childFolderName) {\n let result = null;\n try {\n result = await parentFolder.getDirectoryHandle(childFolderName);\n } catch (err) {}\n return result;\n}\n\nexport async function childFolderExist(parentFolder, childFolderName) {\n let result = false;\n try {\n let folderHandle = await parentFolder.getDirectoryHandle(childFolderName);\n if (folderHandle != null) {\n result = true;\n }\n } catch (err) {}\n return result;\n}\n\nexport async function createFolder(parentFolder, folderName) {\n await parentFolder.getDirectoryHandle(folderName, { create: true });\n}\n\nexport async function deleteFolder(parentFolder, folderName) {\n await parentFolder.removeEntry(folderName, { recursive: true });\n}\n\nexport async function getFolderContents(parentFolder) {\n let result = {\n files: [],\n directories: []\n };\n try {\n for await (let entry of parentFolder.values()) {\n if (entry.kind === \"directory\") {\n result.directories.push(entry.name);\n }\n else if (entry.kind === \"file\") {\n result.files.push(entry.name);\n }\n }\n } catch (err) {}\n return result;\n}\n\n// File\n\nexport async function fileExist(parentFolder, fileName) {\n let result = false;\n try {\n let fileHandle = await parentFolder.getFileHandle(fileName);\n if (fileHandle != null) {\n result = true;\n }\n } catch (err) {}\n return result;\n}\n\nexport async function readFileData_Text(parentFolder, fileName) {\n let result = null;\n try {\n let fileHandle = await parentFolder.getFileHandle(fileName);\n let file = await fileHandle.getFile();\n result = await file.text();\n } catch (err) {}\n return result;\n}\n\nexport async function readFileData_ArrayBuffer(parentFolder, fileName) {\n let result = null;\n try {\n let fileHandle = await parentFolder.getFileHandle(fileName);\n let file = await fileHandle.getFile();\n result = await file.arrayBuffer();\n } catch (err) {}\n return result;\n}\n\nexport async function createFile(parentFolder, fileName, data) {\n const newFileHandle = await parentFolder.getFileHandle(fileName, {\n create: true,\n });\n const writable = await newFileHandle.createWritable();\n await writable.write(data);\n await writable.close();\n}\n\nexport async function appendFile(parentFolder, fileName, data) {\n let fileHandle = await parentFolder.getFileHandle(fileName);\n let fileInfo = await fileHandle.getFile();\n let courseFileStream = await fileHandle.createWritable({\n keepExistingData: true,\n });\n await courseFileStream.write({\n type: \"write\",\n position: fileInfo.size,\n data: data,\n });\n await courseFileStream.close();\n}\n\nexport async function rewriteFile(parentFolder, fileName, data) {\n let fileHandle = await parentFolder.getFileHandle(fileName);\n let courseFileStream = await fileHandle.createWritable({\n keepExistingData: false,\n });\n await courseFileStream.write({ type: \"write\", position: 0, data: data });\n await courseFileStream.close();\n}\n\nexport async function deleteFile(parentFolder, fileName) {\n await parentFolder.removeEntry(fileName);\n}\n\nexport async function createOrUpdateFile(parentFolder, fileName, data) {\n let exist;\n exist = await fileExist(parentFolder, fileName);\n if (exist) {\n await rewriteFile(parentFolder, fileName, data);\n } else {\n await createFile(parentFolder, fileName, data);\n }\n}\n\nexport async function copyFile(fromFolder, fromFileName, toFolder, toFileName) {\n let exist = false;\n exist = fileExist(fromFolder, fromFileName);\n if (!exist) throw new Error(\"File not found : \" + fromFileName);\n let data = await readFileData_ArrayBuffer(fromFolder, fromFileName);\n exist = await fileExist(toFolder, toFileName);\n if (exist) {\n await rewriteFile(toFolder, toFileName, data);\n } else {\n await createFile(toFolder, toFileName, data);\n }\n}\n\nexport async function moveFile(fromFolder, fileName, toFolder) {\n await copyFile(fromFolder, fileName, toFolder, fileName);\n await deleteFile(fromFolder, fileName);\n}\n\n// Request Permissions\n\nexport async function getReadWritePermission(handle) {\n const options = {};\n options.mode = \"readwrite\";\n // Check if permission was already granted. If so, return true.\n if ((await handle.queryPermission(options)) === \"granted\") {\n return true;\n }\n // Request permission. If the user grants permission, return true.\n if ((await handle.requestPermission(options)) === \"granted\") {\n return true;\n }\n // The user didn't grant permission, so return false.\n return false;\n}\n","import * as commonService from \"./commonService\";\nimport * as fileService from \"./fileService\";\nimport * as langService from \"./langService\";\n\nconst Name_FolderUpdate = \"update\";\nconst Name_FolderDownload = \"download\";\nconst Name_FolderFirmware = \"fota\";\nconst Name_FolderCourse = \"map\";\nconst Name_FolderCourseData = \"MapDatabase\";\nconst Name_FolderCourseImage = \"MapImage\";\nconst Name_FolderFont = \"font\";\n\nconst Name_FileVersionCourse = \"mapDataVer.txt\";\nconst Name_FileVersionFirmware = \"sysVer.txt\";\nconst Name_FileCourseFile = \"CourseList.txt\";\nconst Name_FileCourseListUpdate = \"CourseListUpdate.txt\";\nconst Name_FileFirmwareImage = \"image.bin\";\nconst Name_FileFirmwareImageDelta = \"image.delta\";\nconst Name_FileFirmwareReboot = \"reboot.pcf\";\nconst Name_FileMetadata = \"metadata.inf\";\nconst Name_FileFont = \"simsum_u16.bin\";\n\n// Root Folder\n\nexport async function selectFolder() {\n commonService.Log(\"Show folder picker\");\n let baseFolder = await fileService.selectFolderPicker();\n //if (!baseFolder) throw new Error(langService.t(\"UpdateService_FolderSelectionFailed\"));\n if (baseFolder) {\n await fileService.getReadWritePermission(baseFolder);\n await validateFolder(baseFolder);\n }\n return baseFolder;\n}\n\nasync function validateFolder(baseFolder) {\n commonService.Log(\"Checking selected folder\");\n let exist = await fileService.fileExist(baseFolder, Name_FileVersionFirmware);\n if (!exist) throw new Error(langService.t(\"UpdateService_SystemVersionFileMissing\"));\n exist = await fileService.fileExist(baseFolder, Name_FileMetadata);\n if (!exist) throw new Error(langService.t(\"UpdateService_MetadataFileMissing\"));\n exist = await fileService.childFolderExist(baseFolder, Name_FolderCourse);\n if (!exist) throw new Error(langService.t(\"UpdateService_CourseFolderMissing\"));\n let courseFolder = await fileService.selectChildFolder(baseFolder, Name_FolderCourse);\n exist = await fileService.fileExist(courseFolder, Name_FileVersionCourse);\n if (!exist) throw new Error(langService.t(\"UpdateService_CourseVersionFileMissing\"));\n exist = await fileService.fileExist(courseFolder, Name_FileCourseFile);\n if (!exist) throw new Error(langService.t(\"UpdateService_CourseListFileMissing\"));\n\n commonService.Log(\"Selecting update folder\");\n let updateFolder = await fileService.selectChildFolder(baseFolder, Name_FolderUpdate);\n if (!updateFolder) {\n await fileService.createFolder(baseFolder, Name_FolderUpdate);\n updateFolder = await fileService.selectChildFolder(baseFolder, Name_FolderUpdate);\n }\n\n commonService.Log(\"Selecting download folder\");\n let downloadFolder = await fileService.selectChildFolder(updateFolder, Name_FolderDownload);\n if (downloadFolder) await fileService.deleteFolder(updateFolder, Name_FolderDownload);\n await fileService.createFolder(updateFolder, Name_FolderDownload);\n}\n\n// Root Folder\n// Folders\n\nasync function getCourseFolder(baseFolder) {\n commonService.Log(\"Selecting course folder\");\n let courseFolder = await fileService.selectChildFolder(baseFolder, Name_FolderCourse);\n if (!courseFolder) throw new Error(langService.t(\"UpdateService_CourseFolderSelectionFailed\"));\n return courseFolder;\n}\n\nasync function getFirmwareFolder(baseFolder) {\n commonService.Log(\"Selecting firmware folder\");\n let firmwareFolder = await fileService.selectChildFolder(baseFolder, Name_FolderFirmware);\n if (!firmwareFolder) throw new Error(langService.t(\"UpdateService_FirmwareFolderSelectionFailed\"));\n return firmwareFolder;\n}\n\nasync function getCourseDataFolder(baseFolder) {\n commonService.Log(\"Selecting course data folder\");\n let courseDataFolder = await fileService.selectChildFolder(baseFolder, Name_FolderCourseData);\n if (!courseDataFolder) throw new Error(langService.t(\"UpdateService_CourseFolderSelectionFailed\"));\n return courseDataFolder;\n}\n\nasync function getCourseImageFolder(baseFolder) {\n commonService.Log(\"Selecting course image folder\");\n let courseDataFolder = await fileService.selectChildFolder(baseFolder, Name_FolderCourseImage);\n if (!courseDataFolder) throw new Error(langService.t(\"UpdateService_CourseImageFolderSelectionFailed\"));\n return courseDataFolder;\n}\n\n// Folders\n// Metadata\n\nexport async function readMetadataFile(baseFolder) {\n commonService.Log(\"Reading metadata\");\n let metadata = await fileService.readFileData_ArrayBuffer(baseFolder, Name_FileMetadata);\n return metadata;\n}\n\n// Metadata\n// Firmware\n\nexport async function readFirmwareVersionFile(baseFolder) {\n commonService.Log(\"Read version data\");\n let sysVerData = await fileService.readFileData_Text(baseFolder, Name_FileVersionFirmware);\n return sysVerData;\n}\n\nexport async function updateFirmware(baseFolder, imageData, rebootData, isBinFile) {\n let firmwareFolder = await getFirmwareFolder(baseFolder);\n if (!firmwareFolder) throw new Error(langService.t(\"UpdateService_FirmwareFolderSelectionFailed\"));\n\n commonService.Log(\"Updating image file\");\n if(isBinFile)\n await fileService.createOrUpdateFile(firmwareFolder, Name_FileFirmwareImage, imageData);\n else\n await fileService.createOrUpdateFile(firmwareFolder, Name_FileFirmwareImageDelta, imageData);\n\n commonService.Log(\"Updating reboot file\");\n await fileService.createOrUpdateFile(firmwareFolder, Name_FileFirmwareReboot, rebootData);\n}\n\n// Firmware\n// Misc\n\nexport async function deleteDownloadFolder(baseFolder) {\n let updateFolder = await fileService.selectChildFolder(baseFolder, Name_FolderUpdate);\n if (updateFolder) {\n await fileService.deleteFolder(updateFolder, Name_FolderDownload);\n }\n}\n\nexport async function extractFolderTreeFiles(baseFolder, fileNames, extractData, checkAndUpdateCourse, extractFileCallback, isCourseImage) {\n let i, j;\n let newName;\n let nameParts;\n let folderExist;\n let courseDataFolder;\n if (isCourseImage) {\n courseDataFolder = await getCourseImageFolder(baseFolder);\n } else { \n courseDataFolder = await getCourseDataFolder(baseFolder);\n }\n let currentFolder = courseDataFolder;\n let fileData;\n let fileCount = fileNames.length;\n for (i in fileNames) {\n commonService.Log(\"Extracting file \" + (parseInt(i) + 1) + \" of \" + fileCount);\n currentFolder = courseDataFolder;\n if (!fileNames[i].dir) {\n if(checkAndUpdateCourse(fileNames[i].name)){\n nameParts = fileNames[i].name.split(\"/\");\n for (j = 0; j < nameParts.length - 1; j++) {\n folderExist = await fileService.childFolderExist(currentFolder, nameParts[j]);\n if (!folderExist) {\n await fileService.createFolder(currentFolder, nameParts[j]);\n }\n currentFolder = await fileService.selectChildFolder(currentFolder, nameParts[j]);\n }\n newName = nameParts[nameParts.length - 1];\n fileData = await extractData(fileNames[i].name);\n await fileService.createOrUpdateFile(currentFolder, newName, fileData);\n extractFileCallback(i);\n }\n }\n }\n}\n\n// export async function extractFolderTreeFile(baseFolder, fileTree, data) {\n// let i;\n// let newName;\n// let nameParts;\n// let folderExist;\n// let courseDataFolder = await getCourseDataFolder(baseFolder);\n// let currentFolder = courseDataFolder;\n// nameParts = fileTree.split(\"/\");\n// for (i = 0; i < nameParts.length - 1; i++) {\n// folderExist = await fileService.childFolderExist(currentFolder, nameParts[i]);\n// if (!folderExist) {\n// await fileService.createFolder(currentFolder, nameParts[i]);\n// }\n// currentFolder = await fileService.selectChildFolder(currentFolder, nameParts[i]);\n// }\n// newName = nameParts[nameParts.length - 1];\n// await fileService.createOrUpdateFile(currentFolder, newName, data);\n// }\n\n// Misc\n// Course File\n\nexport async function readCourseFile(baseFolder) {\n let courseFolder = await getCourseFolder(baseFolder);\n commonService.Log(\"Reading course file\");\n let txtData = await fileService.readFileData_Text(courseFolder, Name_FileCourseFile);\n return txtData;\n}\n\nexport async function updateCourseFile(baseFolder, data) {\n let courseFolder = await getCourseFolder(baseFolder);\n commonService.Log(\"Updating course file\");\n await fileService.rewriteFile(courseFolder, Name_FileCourseFile, data);\n}\n\n// Course File\n// Course Version File\n\nexport async function readCourseVersionFile(baseFolder) {\n let courseFolder = await getCourseFolder(baseFolder);\n commonService.Log(\"Reading course version\");\n let localCourseVersion = await fileService.readFileData_Text(courseFolder, Name_FileVersionCourse);\n return localCourseVersion;\n}\n\nexport async function updateCourseVersionFile(baseFolder, dataVer) {\n let courseFolder = await getCourseFolder(baseFolder);\n commonService.Log(\"Updating course version file\");\n await fileService.rewriteFile(courseFolder, Name_FileVersionCourse, dataVer);\n}\n\n// Course Version File\n// Course Update File\n\nexport async function existCourseUpdateFile(baseFolder) {\n let courseFolder = await getCourseFolder(baseFolder);\n let exist = await fileService.fileExist(courseFolder, Name_FileCourseListUpdate);\n return exist;\n}\n\nexport async function readCourseUpdateFile(baseFolder) {\n let courseFolder = await getCourseFolder(baseFolder);\n commonService.Log(\"Reading course update file\");\n let localCourseUpdateData = await fileService.readFileData_Text(courseFolder, Name_FileCourseListUpdate);\n return localCourseUpdateData;\n}\n\nexport async function updateCourseUpdateFile(baseFolder, data) {\n let courseFolder = await getCourseFolder(baseFolder);\n commonService.Log(\"Updating course update file\");\n await fileService.createOrUpdateFile(courseFolder, Name_FileCourseListUpdate, data);\n}\n\nexport async function deleteCourseUpdateFile(baseFolder) {\n let courseFolder = await getCourseFolder(baseFolder);\n let exist = await fileService.fileExist(courseFolder, Name_FileCourseListUpdate);\n if (exist) {\n commonService.Log(\"Deleting course update file\");\n await fileService.deleteFile(courseFolder, Name_FileCourseListUpdate);\n }\n}\n\n// Course Update File\n// Course Data File\n\nexport async function saveCourseDataFile(baseFolder, fileId, folderId, data) {\n let courseDataFolder = await getCourseDataFolder(baseFolder);\n let exist = await fileService.childFolderExist(courseDataFolder, folderId);\n if (!exist) {\n commonService.Log(\"Create course data sub folder\");\n await fileService.createFolder(courseDataFolder, folderId);\n }\n commonService.Log(\"Selecting course data sub folder\");\n let dataFolder = await fileService.selectChildFolder(courseDataFolder, folderId);\n commonService.Log(\"Create course data file\");\n await fileService.createOrUpdateFile(dataFolder, fileId + \".dat\", data);\n}\n\nexport async function saveCourseImageFile(baseFolder, fileId, folderId, data) {\n let courseImageFolder = await getCourseImageFolder(baseFolder);\n let exist = await fileService.childFolderExist(courseImageFolder, folderId);\n if (!exist) {\n commonService.Log(\"Create course image sub folder\");\n await fileService.createFolder(courseImageFolder, folderId);\n }\n commonService.Log(\"Selecting course image sub folder\");\n let imageFolder = await fileService.selectChildFolder(courseImageFolder, folderId);\n commonService.Log(\"Create course image file\");\n await fileService.createOrUpdateFile(imageFolder, fileId + \".tar\", data);\n}\n\nfunction removeMACTempFiles(unusedFileList) {\n let filterData = unusedFileList.filter(function (el) {\n return (el.ID.startsWith(\"._\") === false);\n });\n return filterData;\n}\n\nexport async function deleteCourseDataFiles(baseFolder, unusedFileList, hasImage) {\n let i;\n let fileId, folderId;\n commonService.Log(\"Removing MAC temp files\");\n unusedFileList = removeMACTempFiles(unusedFileList);\n commonService.Log(\"Deleting unused course data files \" + unusedFileList.length);\n let courseDataFolder = await getCourseDataFolder(baseFolder);\n let dataFolder;\n for (i = 0; i < unusedFileList.length; i += 1) {\n commonService.Log(\"Deleting data file : \" + (parseInt(i) + 1) + \" of \" + unusedFileList.length);\n fileId = unusedFileList[i].ID;\n folderId = unusedFileList[i].Folder;\n dataFolder = await fileService.selectChildFolder(courseDataFolder, folderId);\n await fileService.deleteFile(dataFolder, fileId);\n }\n if (hasImage) {\n commonService.Log(\"Deleting unused course image files \" + unusedFileList.length);\n const courseImageFolder = await getCourseImageFolder(baseFolder);\n for (i = 0; i < unusedFileList.length; i += 1) {\n commonService.Log(\"Deleting image file : \" + (parseInt(i) + 1) + \" of \" + unusedFileList.length);\n fileId = unusedFileList[i].ID.replace('dat', 'tar');\n folderId = unusedFileList[i].Folder;\n dataFolder = await fileService.selectChildFolder(courseImageFolder, folderId);\n await fileService.deleteFile(dataFolder, fileId);\n }\n }\n}\n\nexport async function getCourseDataFileContents(baseFolder) {\n let i, j;\n let fileList = [];\n let subFolder;\n let subFolderContents;\n commonService.Log(\"Reading course data files\");\n let courseDataFolder = await getCourseDataFolder(baseFolder);\n let folderContents = await fileService.getFolderContents(courseDataFolder);\n for (i = 0; i < folderContents.directories.length; i += 1) {\n subFolder = await fileService.selectChildFolder(courseDataFolder, folderContents.directories[i]);\n subFolderContents = await fileService.getFolderContents(subFolder);\n for (j = 0; j < subFolderContents.files.length; j += 1) {\n fileList.push({ ID: subFolderContents.files[j], Folder: folderContents.directories[i] });\n }\n }\n return fileList;\n}\n\n// Course Data File\n// Font File\nexport async function isFontFileExist(baseFolder) {\n commonService.Log(\"Check font file exist\");\n let isFileExist = false;\n const fontFolder = await fileService.selectChildFolder(baseFolder, Name_FolderFont);\n if (fontFolder) {\n isFileExist = await fileService.fileExist(fontFolder, Name_FileFont);\n }\n return isFileExist;\n}\n\nasync function getFontFolder(baseFolder) {\n commonService.Log(\"Selecting font folder\");\n let fontFolder = await fileService.selectChildFolder(baseFolder, Name_FolderFont);\n if (!fontFolder) {\n await fileService.createFolder(baseFolder, Name_FolderFont);\n fontFolder = await fileService.selectChildFolder(baseFolder, Name_FolderFont);\n }\n return fontFolder;\n}\n\nexport async function updateFontFile(baseFolder, fontFileData) {\n const fontFolder = await getFontFolder(baseFolder);\n if (!fontFolder) throw new Error(langService.t(\"UpdateService_FontFolderSelectionFailed\"));\n commonService.Log(\"Updating Font file\");\n await fileService.createOrUpdateFile(fontFolder, Name_FileFont, fontFileData);\n}\n// Font File","import * as commonService from \"./commonService\";\nimport * as langService from '../services/langService';\nimport * as configDataService from \"../services/configDataService\";\nimport * as downloadService from \"../services/downloadService\";\n\nconst Data_HighEnd = \"hedata\";\nconst Data_LowEnd = \"ledata\";\n\nexport async function downloadData(url) {\n return await downloadService.downloadData(url);\n}\n\nexport async function downloadCourseVersionPackageData(localCourseVersion, isHighEnd) {\n commonService.Log(\"Downloading course package data for \" + localCourseVersion);\n localCourseVersion = encodeURI(localCourseVersion);\n let configData = configDataService.getConfigData();\n let url;\n if (isHighEnd) {\n url = configData.URL_CoursePackage.replace(\"{data}\", Data_HighEnd).replace(\"{version}\", localCourseVersion);\n } else {\n url = configData.URL_CoursePackage.replace(\"{data}\", Data_LowEnd).replace(\"{version}\", localCourseVersion);\n }\n let fileObject = await downloadService.downloadData_AWS(url, configData.AWS_APIKey);\n if (fileObject.status !== 200) throw new Error(langService.t(\"UpdateService_FileRequestFailed\"));\n let data = await fileObject.text();\n return data;\n}\n\nexport async function downloadCourseData(fileId, folderId, isHighEnd) {\n commonService.Log(\"Downloading course data file \" + fileId);\n let configData = configDataService.getConfigData();\n let url;\n if (isHighEnd) {\n url = configData.URL_CourseDataFile.replace(\"{data}\", Data_HighEnd).replace(\"{fileId}\", fileId).replace(\"{folderId}\", folderId);\n } else {\n url = configData.URL_CourseDataFile.replace(\"{data}\", Data_LowEnd).replace(\"{fileId}\", fileId).replace(\"{folderId}\", folderId);\n }\n let fileObject = await downloadService.downloadData_AWS(url, configData.AWS_APIKey);\n if (fileObject.status !== 200) throw new Error(langService.t(\"UpdateService_FileRequestFailed\"));\n let data = await fileObject.arrayBuffer();\n return data;\n}\n\nexport async function downloadCourseImage(fileId, folderId) {\n commonService.Log(\"Downloading course Image file \" + fileId);\n const isTar = true;\n let configData = configDataService.getConfigData();\n let url = configData.URL_CourseImageFileHighEnd.replace(\"{fileId}\", fileId).replace(\"{folderId}\", folderId);\n let fileObject = await downloadService.downloadData_AWS(url, configData.AWS_APIKey, isTar);\n if (fileObject.status !== 200) throw new Error(langService.t(\"UpdateService_FileRequestFailed\"));\n let data = await fileObject.arrayBuffer();\n return data;\n}\n\nexport async function downloadFileReboot(deviceName, isSlope) {\n let data = null;\n let rebootURL;\n let fileObject;\n commonService.Log(\"Downloading firmware reboot file for \" + deviceName);\n let configData = configDataService.getConfigData();\n if (isSlope) {\n rebootURL = configData.FirmwareURL.FotaSlope_Reboot;\n } else {\n rebootURL = configData.FirmwareURL.Fota_Reboot;\n }\n rebootURL = rebootURL.replace(\"{deviceName}\", deviceName.toLowerCase());\n fileObject = await downloadService.downloadData(rebootURL);\n //if (fileObject.status !== 200) throw new Error(langService.t(\"UpdateService_FileRequestFailed\"));\n if (fileObject.status === 200) {\n data = await fileObject.text();\n }\n return data;\n}\n\nexport async function downloadFileImage(deviceName, isSlope) {\n let firmwareURL;\n let fileObject;\n commonService.Log(\"Downloading firmware image file for \" + deviceName);\n let configData = configDataService.getConfigData();\n if (isSlope) {\n firmwareURL = configData.FirmwareURL.FotaSlope_Image;\n } else {\n firmwareURL = configData.FirmwareURL.Fota_Image;\n }\n firmwareURL = firmwareURL.replace(\"{deviceName}\", deviceName.toLowerCase());\n fileObject = await downloadService.downloadData(firmwareURL);\n if (fileObject.status !== 200) throw new Error(langService.t(\"UpdateService_FileRequestFailed\"));\n let data = await fileObject.arrayBuffer();\n return data;\n}\n\nexport async function downloadCoursePipeBugFixData() {\n commonService.Log(\"Downloading pipe bug fix data file\");\n let configData = configDataService.getConfigData();\n let URL_CourseData = configData.URL_CourseData_PipeBugFix;\n let fileObject = await downloadService.downloadData(URL_CourseData);\n if (fileObject.status !== 200) throw new Error(langService.t(\"UpdateService_FileRequestFailed\"));\n let data = await fileObject.text();\n return data;\n};\n\nexport async function downloadFirmwareVersions() {\n commonService.Log(\"Downloading expired firmware versions file\");\n let configData = configDataService.getConfigData();\n let URL_FirmwareVersions = configData.FirmwareURL.Firmware_Versions;\n let fileObject = await downloadService.downloadData(URL_FirmwareVersions);\n if (fileObject.status !== 200) throw new Error(langService.t(\"UpdateService_FileRequestFailed\"));\n let data = await fileObject.text();\n return data;\n}\n\nexport async function downloadFirmwareImageVersionsFile(deviceName) {\n commonService.Log(\"Downloading firmware image versions file\");\n let configData = configDataService.getConfigData();\n let URL_FirmwareImageVersions = configData.FirmwareURL.FotaImage_Versions;\n URL_FirmwareImageVersions = URL_FirmwareImageVersions.replace(\"{deviceName}\", deviceName.toLowerCase());\n let fileObject = await downloadService.downloadData(URL_FirmwareImageVersions);\n if (fileObject.status !== 200) throw new Error(langService.t(\"UpdateService_FileRequestFailed\"));\n let data = await fileObject.json();\n return data;\n}\n\nexport async function downloadFirmwareImageFile(pathPart) {\n commonService.Log(\"Downloading firmware image file\");\n let configData = configDataService.getConfigData();\n let URL_FirmwareImage = configData.FirmwareURL.FotaImage_Path;\n URL_FirmwareImage = URL_FirmwareImage.replace(\"{path}\", pathPart);\n let fileObject = await downloadService.downloadData(URL_FirmwareImage);\n if (fileObject.status !== 200) throw new Error(langService.t(\"UpdateService_FileRequestFailed\"));\n let data = await fileObject.arrayBuffer();\n return data;\n}\n\nexport async function downloadFirmwareRebootFile(pathPart) {\n commonService.Log(\"Downloading firmware reboot file\");\n let configData = configDataService.getConfigData();\n let URL_FirmwareReboot = configData.FirmwareURL.FotaReboot_Path;\n URL_FirmwareReboot = URL_FirmwareReboot.replace(\"{path}\", pathPart);\n let fileObject = await downloadService.downloadData(URL_FirmwareReboot);\n if (fileObject.status !== 200) throw new Error(langService.t(\"UpdateService_FileRequestFailed\"));\n let data = await fileObject.text();\n return data;\n}\n\nexport async function downloadFontFile() {\n commonService.Log(\"Downloading Font file\");\n const configData = configDataService.getConfigData();\n const url = configData.FirmwareURL.Font_File;\n const fileObject = await downloadService.downloadData(url);\n if (fileObject.status !== 200) throw new Error(langService.t(\"UpdateService_FileRequestFailed\"));\n let data = await fileObject.arrayBuffer();\n return data;\n}\n","import * as commonService from \"./commonService\";\nimport * as langService from '../services/langService';\nimport * as configDataService from \"../services/configDataService\";\nimport * as updateFileService from \"./updateFileService\";\nimport * as updateDownloadService from \"./updateDownloadService\";\n\nconst _ = require('lodash') \n\nvar CoursesUpdated = [];\nvar CourseImagesUpdated = [];\n\nexport async function selectFolder() {\n return await updateFileService.selectFolder();\n}\n\nexport function getBlankVersions() {\n let versionData = {\n deviceName: \"\",\n deviceFullName: \"\",\n deviceSN: \"\",\n deviceSKU: \"\",\n isSlope: false,\n course: { localVersion: \"\", serverVersion: \"\", newVersion: false, forcedUpdate: false },\n firmware: { localVersion: \"\", serverVersion: \"\", newVersion: false, forcedUpdate: false },\n coursePartial: { enabled: false, selectedCourses: [] },\n font: { updateRequired: false, isExistLocal: false, languageVersion:\"\" },\n isKRJPLangSupported: false,\n needUpdate: false,\n packageData: null,\n approxUpdateTime: 0,\n };\n return versionData;\n}\n\nexport async function readLocalFileVersions(baseFolder, metadata) {\n commonService.Log(\"Reading local file versions\");\n let checkVersionData = getBlankVersions();\n\n checkVersionData.deviceName = metadata.name;\n checkVersionData.deviceFullName = metadata.fullName;\n checkVersionData.deviceSN = metadata.SN;\n checkVersionData.deviceSKU = metadata.SKU;\n\n let firmwareVersion = await getFirmwareVersion(baseFolder);\n checkVersionData.firmware.localVersion = firmwareVersion.version;\n\n // All Phantom 3 devices are slope-enabled by default.\n // We don't have any information about whether the phantom 3 has a slope disabled version.\n // So in the Bushnell server, it is considering like Phantom 3 is slope disabled. ie, isSlope = false.\n checkVersionData.isSlope = metadata.name === 'Phantom3' ? false : firmwareVersion.isSlope;\n\n checkVersionData.course.localVersion = await updateFileService.readCourseVersionFile(baseFolder);\n\n return checkVersionData;\n}\n\nexport async function getMetadataFile(baseFolder) {\n return await updateFileService.readMetadataFile(baseFolder);\n}\n\nasync function getFirmwareVersion(baseFolder) {\n let deviceName = \"\";\n let localVersion = \"\";\n let isSlope = false;\n let haveFirmwareVersion = false;\n commonService.Log(\"Reading firmware version\");\n let sysVerData = await updateFileService.readFirmwareVersionFile(baseFolder);\n let lines = sysVerData.split(\"\\r\\n\");\n let subLines = lines[0].split(\"\\n\");\n for (let line of subLines) {\n let cols = line.split(\"|\");\n if (cols.length === 2) {\n if (cols[0] === \"FWR\") {\n let subSplit = cols[1].split(\"_V\");\n if (subSplit.length === 2) {\n if (subSplit[0].endsWith(\"_S\")) {\n deviceName = subSplit[0].substring(0, subSplit[0].length - 2);\n isSlope = true;\n } else {\n deviceName = subSplit[0];\n }\n localVersion = subSplit[1];\n haveFirmwareVersion = true;\n }\n }\n }\n }\n if (!haveFirmwareVersion) {\n throw new Error(langService.t(\"UpdateService_ReadingFirmwareVersionFailed\"));\n }\n return { name: deviceName, version: localVersion, isSlope: isSlope };\n}\n\nfunction getApproxUpdateTime(checkVersionData) {\n let i;\n let totalSize = 0;\n for (i in checkVersionData.packageData.packages) {\n totalSize = totalSize + checkVersionData.packageData.packages[i].sz;\n }\n if(checkVersionData.packageData.imgPackages){\n for (i in checkVersionData.packageData.imgPackages) {\n totalSize = totalSize + Math.ceil(checkVersionData.packageData.imgPackages[i].sz / 2);\n }\n }\n return Math.ceil(totalSize / 600);\n}\n\nexport async function checkForUpdate(checkVersionData, baseFolder) {\n commonService.Log(\"Load server file versions\");\n checkVersionData.firmware.serverVersion = \"\";\n if (isIonElite(checkVersionData.deviceName)) {\n let firmwareData = await getFirmwareVersionPath_IonEdge(checkVersionData.deviceName, checkVersionData.firmware.localVersion);\n if (firmwareData.imagePath !== \"\") {\n checkVersionData.firmware.serverVersion = firmwareData.imageVersion;\n }\n }\n else {\n let rebootData = await updateDownloadService.downloadFileReboot(checkVersionData.deviceName, checkVersionData.isSlope);\n if (rebootData) {\n let haveFirmwareVersion = false;\n let lines = rebootData.split(\"\\r\\n\");\n let subLines = lines[0].split(\"\\n\");\n let subSplit = subLines[0].split(\"_V\");\n\n if (subSplit.length === 2) {\n checkVersionData.firmware.serverVersion = subSplit[1];\n haveFirmwareVersion = true;\n }\n if (!haveFirmwareVersion) {\n throw new Error(langService.t(\"UpdateService_ReadingFirmwareVersionFailed\"));\n }\n } else {\n checkVersionData.firmware.serverVersion = \"\";\n }\n }\n\n let isHighEnd = isIonElite(checkVersionData.deviceName);\n let packageText = await updateDownloadService.downloadCourseVersionPackageData(checkVersionData.course.localVersion, isHighEnd);\n checkVersionData.packageData = JSON.parse(packageText);\n checkVersionData.course.serverVersion = checkVersionData.packageData.MapDataVer;\n checkVersionData.approxUpdateTime = getApproxUpdateTime(checkVersionData);\n\n // Update if versions are different, no need to check version numbers\n commonService.Log(\"Check firmware version\");\n if (checkVersionData.firmware.serverVersion !== \"\") {\n if (checkVersionData.firmware.localVersion !== checkVersionData.firmware.serverVersion) {\n checkVersionData.firmware.newVersion = true;\n checkVersionData.needUpdate = true;\n commonService.Log(\"New firmware available\");\n }\n }\n commonService.Log(\"Check course version\");\n if (checkVersionData.course.localVersion !== checkVersionData.course.serverVersion) {\n checkVersionData.course.newVersion = true;\n checkVersionData.needUpdate = true;\n commonService.Log(\"New course available\");\n }\n\n commonService.Log(\"Check firmware force update\");\n if (checkVersionData.firmware.newVersion === true) {\n let txtFirmwareVersions = await updateDownloadService.downloadFirmwareVersions();\n let apiDataFirmwareVersions = JSON.parse(txtFirmwareVersions);\n\n let filterData = apiDataFirmwareVersions.firmwareVersions.filter(function (el) {\n return el.name.replace(/\\s+/g, '') === checkVersionData.deviceName.replace(/\\s+/g, '') && el.isSlope === checkVersionData.isSlope;\n });\n if (filterData.length === 1) {\n if (isLargerVersion(checkVersionData.firmware.localVersion, filterData[0].minVersion)) {\n if (commonService.checkForceUpdateRequired(checkVersionData.deviceName, checkVersionData.firmware.localVersion)) {\n checkVersionData.firmware.forcedUpdate = false;\n }\n else {\n checkVersionData.firmware.forcedUpdate = true;\n commonService.Log(\"Firmware force update enabled.\");\n }\n }\n checkVersionData.font.languageVersion = filterData[0].lngVersion;\n } else {\n commonService.Log(\"No matching firmware version found\");\n }\n }\n commonService.Log(\"Check font file exists and requires an update\");\n const isFileExist = await updateFileService.isFontFileExist(baseFolder);\n if (!isFileExist) {\n if (versionCompare(checkVersionData.firmware.serverVersion, checkVersionData.font.languageVersion) >= 0) {\n if(isIonElite(checkVersionData.deviceName)){\n checkVersionData.font.updateRequired = false;\n } else {\n checkVersionData.font.updateRequired = true;\n commonService.Log(\"The font file does not exist locally and requires an update.\");\n }\n }\n } else {\n checkVersionData.font.isExistLocal = true;\n commonService.Log(\"The font file exists locally and no update is required.\");\n }\n\n return checkVersionData;\n}\n\nexport async function setRestoreDevice(checkVersionData) {\n let rebootData = await updateDownloadService.downloadFileReboot(checkVersionData.deviceName, checkVersionData.isSlope);\n if (rebootData) {\n let lines = rebootData.split(\"\\r\\n\");\n let subLines = lines[0].split(\"\\n\");\n let subSplit = subLines[0].split(\"_V\");\n\n if (subSplit.length === 2) {\n checkVersionData.firmware.serverVersion = subSplit[1];\n checkVersionData.firmware.newVersion = true;\n checkVersionData.firmware.forcedUpdate = true;\n }\n }\n\n let isHighEnd = isIonElite(checkVersionData.deviceName);\n let packageText = await updateDownloadService.downloadCourseVersionPackageData(\"full\", isHighEnd);\n checkVersionData.packageData = JSON.parse(packageText);\n checkVersionData.course.serverVersion = checkVersionData.packageData.MapDataVer;\n checkVersionData.approxUpdateTime = getApproxUpdateTime(checkVersionData);\n checkVersionData.course.newVersion = true;\n checkVersionData.course.forcedUpdate = true;\n\n checkVersionData.needUpdate = true;\n return checkVersionData;\n}\n\nfunction escapeJSON(json) {\n // eslint-disable-next-line\n let escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n let meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"' : '\\\\\"',\n '\\\\': '\\\\\\\\'\n };\n escapable.lastIndex = 0;\n return escapable.test(json) ? json.replace(escapable, function (a) {\n let c = meta[a];\n return (typeof c === 'string') ? c : '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) : json;\n};\n\nfunction courseAPIRecordsToJson(courseData) {\n let jsonData = [];\n let tRow;\n let name, address, city;\n for (let row of courseData) {\n if(row.nam_nl && row.adr_nl && row.cit_nl){\n name = `${escapeJSON(row.nam)} *${escapeJSON(row.cny)} ${escapeJSON(row.nam_nl)}`;\n address = `${escapeJSON(row.adr)} * ${escapeJSON(row.adr_nl)}`;\n city = `${escapeJSON(row.cit)} * ${escapeJSON(row.cit_nl)}`;\n }\n else {\n name = `${escapeJSON(row.nam)}`;\n address = `${escapeJSON(row.adr)}`;\n city = `${escapeJSON(row.cit)}`;\n }\n\n tRow = '{ \"ID\": \"' + row.cid +\n '\", \"Name\": \"' + name +\n '\", \"Address\": \"' + address +\n '\", \"Country\": \"' + escapeJSON(row.cny) +\n '\", \"State\": \"' + escapeJSON(row.sta) +\n '\", \"City\": \"' + city +\n '\", \"Lat\": \"' + row.lat +\n '\", \"Lon\": \"' + row.lon +\n '\", \"Active\": \"' + 1 +\n '\", \"Ver\": \"' + row.ver +\n '\", \"Folder\": \"' + row.idx +\n '\" }';\n jsonData.push(JSON.parse(tRow));\n }\n return jsonData;\n}\n\nfunction courseJsonToText(cItem) {\n let courseData = \"\";\n courseData += cItem.ID + \"|\";\n courseData += cItem.Name + \"|\";\n courseData += cItem.Address + \"|\";\n courseData += cItem.Country + \"|\";\n courseData += cItem.State + \"|\";\n courseData += cItem.City + \"|\";\n courseData += cItem.Lat + \"|\";\n courseData += cItem.Lon + \"|\";\n courseData += cItem.Active + \"|\";\n courseData += cItem.Ver + \"|\";\n courseData += cItem.Folder + \"\\r\\n\";\n return courseData;\n}\n\nfunction courseJsonToText_Array(courses) {\n let i;\n let cItem;\n let courseData = \"\";\n for (i = 0; i < courses.length; i += 1) {\n cItem = courses[i];\n courseData += courseJsonToText(cItem);\n }\n return courseData;\n}\n\nfunction courseTextToJson(cols) {\n let tRow = '{ \"ID\": \"' + cols[0] +\n '\", \"Name\": \"' + escapeJSON(cols[1]) +\n '\", \"Address\": \"' + escapeJSON(cols[2]) +\n '\", \"Country\": \"' + escapeJSON(cols[3]) +\n '\", \"State\": \"' + escapeJSON(cols[4]) +\n '\", \"City\": \"' + escapeJSON(cols[5]) +\n '\", \"Lat\": \"' + cols[6] +\n '\", \"Lon\": \"' + cols[7] +\n '\", \"Active\": \"' + cols[8] +\n '\", \"Ver\": \"' + cols[9] +\n '\", \"Folder\": \"' + cols[10] +\n '\" }';\n let jsonData = JSON.parse(tRow);\n return jsonData;\n}\n\nasync function getCoursePipeBugFixData() {\n let txtCoursePipeBugFixData = await updateDownloadService.downloadCoursePipeBugFixData();\n let apiDataCoursePipeBugFixData = JSON.parse(txtCoursePipeBugFixData);\n let coursePipeBugFixData = courseAPIRecordsToJson(apiDataCoursePipeBugFixData);\n return coursePipeBugFixData;\n}\n\nfunction getPipeBugFixRow(ID, coursePipeBugFixData) {\n let bugFixItem = null;\n let filterData;\n commonService.Log(\"Reading pipe bug data for id \" + ID);\n filterData = coursePipeBugFixData.filter(function (el) {\n return el.ID === ID;\n });\n if (filterData.length === 1) {\n bugFixItem = filterData[0];\n } else {\n commonService.Log(\"Pipe bug missing id \" + ID);\n }\n return bugFixItem;\n}\n\nasync function readCourseList(baseFolder) {\n let jsonData = [];\n let txtCourseData = await updateFileService.readCourseFile(baseFolder);\n let coursePipeBugFixData = await getCoursePipeBugFixData();\n let bugFixItem;\n let lines = txtCourseData.split(\"\\r\\n\");\n for (let line of lines) {\n let cols = line.split(\"|\");\n if (cols.length > 11) {\n bugFixItem = getPipeBugFixRow(cols[0], coursePipeBugFixData);\n if (bugFixItem) {\n jsonData.push(bugFixItem);\n }\n } else if (cols.length === 11 && cols[0] === \"00000000\" ) {\n // No need to do anything (Remove this course)\n } else if (cols.length === 11) {\n jsonData.push(courseTextToJson(cols));\n }\n }\n return jsonData;\n}\n\nasync function readCourseUpdateList(baseFolder) {\n let jsonData = [];\n let fileExist = await updateFileService.existCourseUpdateFile(baseFolder);\n if (fileExist) {\n let txtData = await updateFileService.readCourseUpdateFile(baseFolder);\n let lines = txtData.split(\"\\r\\n\");\n for (let line of lines) {\n let cols = line.split(\"|\");\n if (cols.length === 11 && cols[0] === \"00000000\" ) {\n // No need to do anything (Remove this course)\n } else if (cols.length === 11) {\n jsonData.push(courseTextToJson(cols));\n }\n }\n }\n return jsonData;\n}\n\nexport async function checkCourseList(baseFolder, courseData) {\n let checkData = {\n fullCourseVals: [],\n updateCourseVals: [],\n newCourseVals: [],\n courseListUpdateRequired: false\n }\n let i, j;\n let updateCourseIds = [];\n\n commonService.Log(\"Checking course list\");\n let localCourseData = await readCourseList(baseFolder);\n commonService.Log(\"Convert API course list\");\n let updateCourseData = courseAPIRecordsToJson(courseData);\n \n commonService.Log(\"Cross check course list\");\n // Must update course list in order\n for (i = 0; i < localCourseData.length; i += 1) {\n let selectedVal, krjpUpdatedVal;\n for (j = 0; j < updateCourseData.length; j += 1) {\n selectedVal = null;\n krjpUpdatedVal = null;\n if (localCourseData[i].ID === updateCourseData[j].ID) {\n updateCourseIds.push(updateCourseData[j].ID);\n krjpUpdatedVal = updateCourseData[j];\n if (isLargerVersion(localCourseData[i].Ver, updateCourseData[j].Ver)) {\n selectedVal = updateCourseData[j];\n }\n break;\n }\n }\n if (krjpUpdatedVal === null) { // value is not in API\n checkData.fullCourseVals.push(localCourseData[i]);\n } else if (selectedVal) { // value is in API & course version is changed\n checkData.fullCourseVals.push(selectedVal);\n checkData.updateCourseVals.push(selectedVal);\n checkData.courseListUpdateRequired = true;\n } else { // value is in API & no change in course version but may have language changes\n checkData.fullCourseVals.push(krjpUpdatedVal);\n checkData.courseListUpdateRequired = true;\n }\n }\n for (i = 0; i < updateCourseData.length; i += 1) {\n let itemExist = updateCourseIds.includes(updateCourseData[i].ID);\n if (!itemExist) {\n checkData.newCourseVals.push(updateCourseData[i]);\n }\n }\n return checkData;\n}\n\nasync function downloadSaveCourseDataFile(baseFolder, fileId, folderId, isHighEnd) {\n let data = await updateDownloadService.downloadCourseData(fileId, folderId, isHighEnd);\n await updateFileService.saveCourseDataFile(baseFolder, fileId, folderId, data);\n}\n\nasync function downloadSaveCourseImageFile(baseFolder, fileId, folderId) {\n let data = await updateDownloadService.downloadCourseImage(fileId, folderId);\n await updateFileService.saveCourseImageFile(baseFolder, fileId, folderId, data);\n}\n\nasync function downloadDataFiles(baseFolder, isHighEnd, courses, setFileDownloadEvent) {\n let i;\n let fileId;\n let folderId;\n let selectedData;\n commonService.Log(\"Downloading course data\");\n for (i = 0; i < courses.length; i += 1) {\n selectedData = courses[i];\n fileId = selectedData.ID;\n folderId = selectedData.Folder;\n await downloadSaveCourseDataFile(baseFolder, fileId, folderId, isHighEnd);\n if(isHighEnd)\n await downloadSaveCourseImageFile(baseFolder, fileId, folderId);\n setFileDownloadEvent(i);\n }\n}\n\nasync function updateCourseList(baseFolder, courses) {\n commonService.Log(\"Updating new course list\");\n let courseText = courseJsonToText_Array(courses);\n await updateFileService.updateCourseFile(baseFolder, courseText);\n}\n\nasync function updateUpdateList(baseFolder, courses) {\n let i;\n let filterData;\n commonService.Log(\"Updating update course list\");\n let currentUpdateCourseData = await readCourseUpdateList(baseFolder);\n let newCourseList = [];\n for (i = 0; i < currentUpdateCourseData.length; i += 1) {\n let selectedCourse = currentUpdateCourseData[i];\n filterData = courses.filter(function (el) {\n return el.ID === selectedCourse.ID;\n });\n if (filterData.length > 0) {\n newCourseList.push(filterData[0]);\n }\n else {\n newCourseList.push(selectedCourse);\n }\n }\n \n for (i = 0; i < courses.length; i += 1) {\n let selectedCourse = courses[i];\n filterData = newCourseList.filter(function (el) {\n return el.ID === selectedCourse.ID;\n });\n if (filterData.length === 0 ) {\n newCourseList.push(selectedCourse);\n }\n }\n let courseText = courseJsonToText_Array(newCourseList);\n await updateFileService.updateCourseUpdateFile(baseFolder, courseText);\n}\n\nexport async function updatePartialCourse(baseFolder, changeVersionFile, setCourseProgress) {\n let progressFileCount = 0;\n let selectedCourses = changeVersionFile.coursePartial.selectedCourses;\n let totalFileCount = selectedCourses.length + 3;\n setCourseProgress(progressFileCount, totalFileCount);\n let checkData = await checkCourseList(baseFolder, selectedCourses);\n let isHighEnd = isIonElite(changeVersionFile.deviceName);\n\n if(checkData.courseListUpdateRequired){\n if (checkData.updateCourseVals.length > 0) {\n await downloadDataFiles(baseFolder, isHighEnd, checkData.updateCourseVals, function(i) { progressFileCount = progressFileCount + 1; setCourseProgress(progressFileCount, totalFileCount); });\n }\n await updateCourseList(baseFolder, checkData.fullCourseVals);\n }\n if (checkData.newCourseVals.length > 0) {\n await downloadDataFiles(baseFolder, isHighEnd, checkData.newCourseVals, function(i) { progressFileCount = progressFileCount + 1; setCourseProgress(progressFileCount, totalFileCount); });\n await updateUpdateList(baseFolder, checkData.newCourseVals);\n }\n progressFileCount = progressFileCount + 1;\n setCourseProgress(progressFileCount, totalFileCount);\n}\n\nfunction getApproxFileCount(packageJSON) {\n let i;\n let avgFileSize = 7; // 7.4 KB\n let totalFileSize = 0;\n let totalFileCount = 0;\n for (i in packageJSON.packages) {\n totalFileSize = totalFileSize + packageJSON.packages[i].sz;\n }\n totalFileCount = totalFileSize / avgFileSize;\n return totalFileCount;\n}\n\nconst checkAndUpdateCourse = function(name) { \n if(!_.find(CoursesUpdated, (course) => course === name)){\n CoursesUpdated.push(name);\n return true;\n } else {\n return false;\n } \n}\n\nconst checkAndUpdateCourseImage = function(name) { \n if(!_.find(CourseImagesUpdated, (course) => course === name)){\n CourseImagesUpdated.push(name);\n return true;\n } else {\n return false;\n } \n}\n\nexport async function updateCourse(baseFolder, changeVersionFile, setCourseProgress) {\n let i;\n let url;\n let data;\n let fileObject;\n const packageJSON = changeVersionFile.packageData;\n if (packageJSON.packages.length > 0) {\n let progressFileCount = 0;\n let totalFileCount = getApproxFileCount(packageJSON);\n let progressUpdate = function(pos) { progressFileCount = progressFileCount + 1; setCourseProgress(progressFileCount, totalFileCount); }\n CoursesUpdated = [];\n i = packageJSON.packages.length;\n while(i--){\n commonService.Log(\"Downloading data package : \" + (packageJSON.packages.length - i) + \" of \" + packageJSON.packages.length);\n url = packageJSON.packages[i].url;\n fileObject = await updateDownloadService.downloadData(url);\n if (fileObject.status !== 200) throw new Error(langService.t(\"UpdateService_FileRequestFailed\"));\n data = await fileObject.arrayBuffer();\n await extractToFolder(data, baseFolder, progressUpdate, checkAndUpdateCourse, false);\n }\n if(isIonElite(changeVersionFile.deviceName)) {\n CourseImagesUpdated = [];\n i = packageJSON.imgPackages.length;\n while(i--){\n commonService.Log(\"Downloading data image package : \" + (packageJSON.imgPackages.length - i) + \" of \" + packageJSON.imgPackages.length);\n url = packageJSON.imgPackages[i].url;\n fileObject = await updateDownloadService.downloadData(url);\n if (fileObject.status !== 200) throw new Error(langService.t(\"UpdateService_FileRequestFailed\"));\n data = await fileObject.arrayBuffer();\n await extractToFolder(data, baseFolder, progressUpdate, checkAndUpdateCourseImage, true);\n }\n }\n\n commonService.Log(\"Updating local course list\");\n const firmwareVersion = changeVersionFile.firmware.newVersion ? changeVersionFile.firmware.serverVersion : changeVersionFile.firmware.localVersion;\n const isLangCourseFileRequired = commonService.checkNonLanguageSupportedDevice(changeVersionFile.deviceName, firmwareVersion)\n url = isLangCourseFileRequired ? packageJSON.CourseList_lng : packageJSON.CourseList;\n fileObject = await updateDownloadService.downloadData(url);\n if (fileObject.status !== 200) throw new Error(langService.t(\"UpdateService_FileRequestFailed\"));\n data = await fileObject.arrayBuffer();\n await updateFileService.updateCourseFile(baseFolder, data);\n\n commonService.Log(\"Updating course version\");\n await updateFileService.updateCourseVersionFile(baseFolder, packageJSON.MapDataVer);\n await updateFileService.deleteCourseUpdateFile(baseFolder);\n }\n}\n\nexport async function updateFirmware(baseFolder, checkVersionData) {\n if (checkVersionData.firmware.newVersion) {\n if (isIonElite(checkVersionData.deviceName)) {\n let firmwareData = await getFirmwareVersionPath_IonEdge(checkVersionData.deviceName, checkVersionData.firmware.localVersion);\n let firmwareImageData = await updateDownloadService.downloadFirmwareImageFile(firmwareData.imagePath);\n let firmwareRebootData = await updateDownloadService.downloadFirmwareRebootFile(firmwareData.imagePath.replace(\"image.delta\", \"reboot.pcf\"));\n await updateFileService.updateFirmware(baseFolder, firmwareImageData, firmwareRebootData, false);\n } else {\n let firmwareImageData = await updateDownloadService.downloadFileImage(checkVersionData.deviceName, checkVersionData.isSlope);\n let firmwareRebootData = await updateDownloadService.downloadFileReboot(checkVersionData.deviceName, checkVersionData.isSlope);\n await updateFileService.updateFirmware(baseFolder, firmwareImageData, firmwareRebootData, true);\n }\n }\n}\n\nfunction isIonElite(deviceName) {\n return deviceName.replace(/\\s+/g, '').toLocaleLowerCase() === \"ionelite\";\n}\n\nexport async function getFirmwareVersionPath_IonEdge(deviceName, deviceVersion) {\n let i;\n let newDeviceVersion = deviceVersion;\n let newDeviceImagePath = \"\";\n deviceName = deviceName.replace(/\\s+/g, '').toLocaleLowerCase();\n let versionsList = await updateDownloadService.downloadFirmwareImageVersionsFile(deviceName);\n for (i = 0; i < versionsList.length; i += 1) {\n if (versionsList[i].From === deviceVersion) {\n if (isLargerVersion(newDeviceVersion, versionsList[i].To)) {\n newDeviceVersion = versionsList[i].To;\n newDeviceImagePath = versionsList[i].FileName;\n }\n }\n }\n return { imageVersion: newDeviceVersion, imagePath: newDeviceImagePath };\n}\n\nasync function getUnusedFiles(baseFolder) {\n let i;\n let fileList = [];\n let courseFileList = [];\n let unusedFileList = [];\n\n commonService.Log(\"Reading course list\");\n let localCourseData = await readCourseList(baseFolder);\n for (i = 0; i < localCourseData.length; i += 1) {\n courseFileList.push({ ID: localCourseData[i].ID + \".dat\", Folder: localCourseData[i].Folder });\n }\n\n commonService.Log(\"Reading update course list\");\n let fileExist = await updateFileService.existCourseUpdateFile(baseFolder);\n if (fileExist) {\n let updateCourseData = await readCourseUpdateList(baseFolder);\n for (i = 0; i < updateCourseData.length; i += 1) {\n courseFileList.push({ ID: updateCourseData[i].ID + \".dat\", Folder: updateCourseData[i].Folder });\n }\n }\n fileList = await updateFileService.getCourseDataFileContents(baseFolder);\n\n let filterData;\n commonService.Log(\"Cross check course with data files\");\n for (i = 0; i < fileList.length; i += 1) {\n let item = fileList[i];\n filterData = courseFileList.filter(function (el) {\n return el.ID === item.ID && el.Folder === item.Folder;\n });\n if (filterData.length === 0) {\n unusedFileList.push({ ID: item.ID, Folder: item.Folder });\n }\n }\n return unusedFileList;\n}\n\nasync function deleteUnusedFiles(baseFolder, deviceName) {\n let unusedFileList = await getUnusedFiles(baseFolder);\n let configData = configDataService.getConfigData();\n commonService.LogData(\"Unused files\", unusedFileList);\n const hasImage = isIonElite(deviceName);\n if (configData.Flags.UpdateDeleteUnusedDataFiles === \"1\") {\n await updateFileService.deleteCourseDataFiles(baseFolder, unusedFileList, hasImage);\n } else {\n commonService.Log(\"Unused files delete disabled\");\n }\n}\n\nexport async function cleanUp(baseFolder, deviceName) {\n await updateFileService.deleteDownloadFolder(baseFolder);\n await deleteUnusedFiles(baseFolder, deviceName);\n}\n// async function extractToFolder(zipArrayBuffer, extractFolder) {\n// var JSZip = require(\"jszip\");\n// let zip = await JSZip.loadAsync(zipArrayBuffer);\n//\n// var fileNames = [];\n// Object.entries(zip.files).forEach((entry) => {\n// fileNames.push({ name: entry[1].name, dir: entry[1].dir });\n// });\n//\n// let i;\n// let j;\n// let fileData;\n// let nameParts;\n// let newName;\n// let folderExist;\n// let currentFolder = extractFolder;\n// let fileCount = fileNames.length;\n// for (i in fileNames) {\n// commonService.Log(\"Extracting file \" + (parseInt(i) + 1) + \" of \" + fileCount);\n// if (!fileNames[i].dir) {\n// nameParts = fileNames[i].name.split(\"/\");\n// currentFolder = extractFolder;\n// for (j = 0; j < nameParts.length - 1; j++) {\n// folderExist = await fileService.childFolderExist(currentFolder, nameParts[j]);\n// if (!folderExist) {\n// await fileService.createFolder(currentFolder, nameParts[j]);\n// }\n// currentFolder = await fileService.selectChildFolder(currentFolder, nameParts[j]);\n// }\n// newName = nameParts[nameParts.length - 1];\n// fileData = await zip.file(fileNames[i].name).async(\"uint8array\"); // string\n// await fileService.createOrUpdateFile(currentFolder, newName, fileData);\n// }\n// }\n// }\n\nasync function extractToFolder(zipArrayBuffer, baseFolder, extractFileCallback, checkAndUpdateCourse, isImage) {\n var JSZip = require(\"jszip\");\n let zip = await JSZip.loadAsync(zipArrayBuffer);\n\n var fileNames = [];\n Object.entries(zip.files).forEach((entry) => {\n fileNames.push({ name: entry[1].name, dir: entry[1].dir });\n });\n\n await updateFileService.extractFolderTreeFiles(baseFolder, fileNames, async function(filePath) {\n return await zip.file(filePath).async(\"uint8array\");\n }, checkAndUpdateCourse, extractFileCallback, isImage);\n}\n\nfunction isLargerVersion(checkVersion, newVersion) {\n let isLarge = false;\n commonService.Log(\"Version check | Version : \" + checkVersion + \", New version : \" + newVersion);\n if (versionCompare(checkVersion, newVersion) < 0) {\n isLarge = true;\n }\n if (isLarge) {\n commonService.Log(\"Version check | Need update\");\n } else {\n commonService.Log(\"Version check | No update needed\");\n }\n return isLarge;\n}\n\n// result < 0 = v1 is smaller\n// result > 0 = v2 is smaller\n// result = 0 = both are equal\nexport function versionCompare(v1, v2) {\n var vnum1 = 0, vnum2 = 0;\n for (var i = 0, j = 0; (i < v1.length || j < v2.length);)\n {\n while (i < v1.length && v1[i] !== '.')\n {\n vnum1 = vnum1 * 10 + (v1[i] - '0');\n i++;\n }\n // storing numeric part of version 2 in vnum2\n while (j < v2.length && v2[j] !== '.')\n {\n vnum2 = vnum2 * 10 + (v2[j] - '0');\n j++;\n }\n if (vnum1 > vnum2)\n return 1;\n if (vnum2 > vnum1)\n return -1;\n // if equal, reset variables and go for next numeric part\n vnum1 = vnum2 = 0;\n i++;\n j++;\n }\n return 0;\n}\n\nexport async function downloadSaveFontFile(baseFolder) {\n commonService.Log(\"Download and save Font file\");\n const fontFileData = await updateDownloadService.downloadFontFile();\n await updateFileService.updateFontFile(baseFolder, fontFileData);\n}\n\nexport async function updateCourcePackageData(checkVersionData){\n let isHighEnd = isIonElite(checkVersionData.deviceName);\n let packageText = await updateDownloadService.downloadCourseVersionPackageData(checkVersionData.course.localVersion, isHighEnd);\n checkVersionData.packageData = JSON.parse(packageText);\n checkVersionData.course.serverVersion = checkVersionData.packageData.MapDataVer;\n checkVersionData.approxUpdateTime = getApproxUpdateTime(checkVersionData);\n return checkVersionData;\n}","import * as updateService from \"./updateService\";\nimport * as configService from \"./configDataService\"\n\nconst Log_Version = \"v0.27\";\nconst DeviceName_Phantom2 = 'Phantom2';\nconst NonLangVersion_Phantom2 = '1.1.04';\nconst DeviceName_IonEdge = 'IonEdge';\nconst NonLangVersion_IonEdge = '1.2.2';\nconst ScriptId = \"recaptcha-key\";\n\nvar Enable_Debug_Log = true;\n\nexport function setFlags(configData) {\n if (configData.Flags.EnableDebugLog === \"1\") {\n Enable_Debug_Log = true;\n } else {\n Enable_Debug_Log = false;\n }\n}\n\nexport function Log(message) {\n if (Enable_Debug_Log) {\n console.log(Log_Version, message);\n }\n}\n\nexport function LogData(message, data) {\n if (Enable_Debug_Log) {\n console.log(Log_Version, message, data);\n }\n}\n\nexport function showMessage(message) {\n window.$(\"#msgPopupLabel\").html(message);\n window.$(\"#messagePopupModal\").modal(\"show\");\n}\n\nexport function showLoader(flag) {\n if (flag) {\n window.$(\"#loaderDisplay\").css(\"display\", \"block\");\n }\n else {\n window.$(\"#loaderDisplay\").css(\"display\", \"none\");\n }\n}\n\nexport function logTime(message) {\n var d = new Date();\n var n = d.toLocaleTimeString();\n LogData(message, n);\n}\n\nexport function getBrowserProps() {\n const platform = window.navigator.userAgent.toLowerCase();\n let props = {\n isBrowserChrome: /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor),\n isOSMac: (platform.indexOf(\"mac\") !== -1),\n isOSWindows: (platform.indexOf(\"windows\") !== -1),\n isOSLinux: (platform.indexOf(\"linux\") !== -1),\n isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)\n };\n return props;\n}\n\n// Wake lock\n\nlet wakeLock = null;\nexport async function ScreenWakeLock_Enable() {\n if ('wakeLock' in navigator) {\n try {\n wakeLock = await navigator.wakeLock.request('screen');\n wakeLock.addEventListener('release', () => {\n Log('Wake Lock released');\n });\n document.addEventListener('visibilitychange', handleVisibilityChange);\n document.addEventListener('fullscreenchange', handleVisibilityChange);\n Log('Wake Lock is active');\n } catch (err) {\n Log(`${err.name}, ${err.message}`);\n }\n } else {\n Log('Wake Lock is not supported');\n }\n}\nexport async function ScreenWakeLock_Disable() {\n if (!wakeLock) {\n return;\n }\n try {\n await wakeLock.release();\n wakeLock = null;\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n document.removeEventListener('fullscreenchange', handleVisibilityChange); \n } catch (err) {\n Log(`${err.name}, ${err.message}`);\n }\n}\nexport function handleVisibilityChange() { \n if (wakeLock !== null && document.visibilityState === 'visible') {\n ScreenWakeLock_Enable();\n }\n}\n\n// Wake lock\n\nexport function replaceCensorWord(str) {\n return str[0] + \"*\".repeat(str.length - 1);\n}\n\nexport function replaceCensorEmail(email) {\n var arr = email.split(\"@\");\n return replaceCensorWord(arr[0]) + \"@\" + \"*\".repeat(arr[1].length - 1);\n}\n\nexport function isValidVersionNumber(str) {\n let patt = new RegExp(\"^(\\\\d+\\\\.)(\\\\d+\\\\.)?(\\\\*|\\\\d+)$\");\n let isValid = patt.test(str);\n return isValid;\n}\n\nexport function getDeviceImagePath(imageIdentifier, sku) {\n let path = \"product-images/\";\n if (sku === \"\") {\n path += \"LegacyDevices/\";\n path += imageIdentifier;\n } else {\n path += \"Devices/\";\n path += imageIdentifier + \"_\" + sku;\n }\n path += \"_thumb.imageset/\";\n path += \"1x.png\";\n return path;\n}\n\nexport function getDeviceId(deviceName) {\n let deviceArray = [\n { deviceID: 2001, name: \"ProXE\" },\n { deviceID: 2002, name: \"TourV5\" },\n { deviceID: 2004, name: \"Tour V5 International\" }, // bd_2002_201911NT, bd_2002_201901D, bd_2004_201911NT\n { deviceID: 2002, name: \"Tour V5 off course demo\" }, // bd_2002_201901DEMO, bd_2002_201911DEMO, bd_2004_201911DEMO\n { deviceID: 2002, name: \"Tour V5 SMU\" },\n { deviceID: 2002, name: \"Tour V5 patriot pack\" },\n { deviceID: 2003, name: \"Launch Pro\" },\n { deviceID: 2004, name: \"Tour V5 Shift\" }, // bd_2002_201911, bd_2004_201910, bd_2004_201911\n { deviceID: 2004, name: \"Tour V5 Shift International\" }, // bd_2002_201911D, bd_2004_201911D\n { deviceID: 2004, name: \"Tour V5 Shift Patriot Pack\" }, // bd_2002_201911P, bd_2004_201911P\n { deviceID: 2005, name: \"Tour V6\" },\n { deviceID: 2005, name: \"Tour V6 Patriot Pack\" },\n { deviceID: 2006, name: \"Tour V6 Shift\" },\n { deviceID: 2006, name: \"Tour V6 Shift Patriot Pack\" },\n { deviceID: 2007, name: \"Tour VA\" },\n { deviceID: 2008, name: \"A1 Slope\" },\n { deviceID: 3001, name: \"Wingman\" },\n { deviceID: 3002, name: \"Wingman View\" },\n { deviceID: 3003, name: \"Wingman View Remote\" },\n { deviceID: 3004, name: \"Wingman View Speaker\" },\n { deviceID: 3005, name: \"Wingman Mini\" },\n { deviceID: 3006, name: \"Wingman 2\" },\n { deviceID: 3007, name: \"Wingman 2 Remote\" },\n { deviceID: 3008, name: \"Wingman 2 Speaker\" },\n { deviceID: 4001, name: \"Phantom 2\" },\n { deviceID: 4002, name: \"Ion Edge\" },\n { deviceID: 4003, name: \"Ion Elite\" },\n { deviceID: 4004, name: \"Phantom3\" },\n { deviceID: 5001, name: \"Pro X3\" },\n { deviceID: 5002, name: \"Pro X3+\" },\n { deviceID: 1000, name: \"Legacy Products\" },\n { deviceID: 1001, name: \"Phantom\" },\n { deviceID: 1002, name: \"Ion2 Watch\" },\n { deviceID: 1003, name: \"Excel Watch\" },\n { deviceID: 1004, name: \"Hybrid\" },\n { deviceID: 1005, name: \"Pro X2\" },\n { deviceID: 1006, name: \"Tour V4\" },\n { deviceID: 1006, name: \"Tour V4 Shift\" },\n { deviceID: 1007, name: \"L7\" },\n { deviceID: 1009, name: \"Other\" }\n ];\n // let selectedItems = deviceArray.find((item) => item.name === deviceName); // Can't use since \"Phantom 2\" in doc show up as \"Phantom2\"\n let selectedItems = deviceArray.find((item) => item.name.replace(/\\s+/g, '') === deviceName.replace(/\\s+/g, ''));\n if (selectedItems) { return selectedItems.deviceID; }\n else { return \"\"; }\n}\n\nexport function getSupportedDevices() {\n let SKUs = [\n { name: \"Phantom 2\", SKUs: [\"362110\", \"362111\", \"362112\", \"362113\", \"362170A\", \"362171A\", \"362172A\", \"362173A\"] },\n { name: \"Phantom 3\", SKUs: [\"362401\", \"362402\", \"362403\", \"362404\"] },\n { name: \"Ion Edge\", SKUs: [\"362130\", \"362131\", \"362190A\", \"362191A\"] },\n { name: \"Ion Elite\", SKUs: [\"362150\", \"362151\"] }\n ];\n return SKUs;\n}\n\nexport function isLanguageSupportRequiredKRJP(deviceName, currentFirmwareVer) {\n // Device should be 'Phantom2' and curent device firmware version should <= KRJPVersion\n let isUpdateRequired = false;\n if (DeviceName_Phantom2 === deviceName && updateService.versionCompare(currentFirmwareVer, NonLangVersion_Phantom2) <= 0){\n isUpdateRequired = true;\n Log(`${deviceName} device; Korean and Japanees courses needed to update.`);\n }\n // else if (DeviceName_IonEdge === deviceName && updateService.versionCompare(currentFirmwareVer, NonLangVersion_IonEdge) <= 0){\n // isUpdateRequired = true;\n // Log(`${deviceName} device; Korean and Japanees courses needed to update.`);\n // }\n else {\n Log(`${deviceName} device; Korean and Japanees courses need not update.`);\n }\n return isUpdateRequired;\n}\n\nexport function checkNonLanguageSupportedDevice(deviceName, firmwareVer) {\n let isLngCourseFileRequired = true;\n if (DeviceName_Phantom2 === deviceName && updateService.versionCompare(firmwareVer, NonLangVersion_Phantom2) <= 0){\n isLngCourseFileRequired = false;\n }\n // else if (DeviceName_IonEdge === deviceName && updateService.versionCompare(firmwareVer, NonLangVersion_IonEdge) <= 0){\n // isLngCourseFileRequired = false;\n // }\n Log(`${deviceName} device; firmware version: ${firmwareVer}, course language file required : ${isLngCourseFileRequired}`);\n return isLngCourseFileRequired;\n}\n\nexport function checkForceUpdateRequired(deviceName, localfirmwareVer) {\n let isForceUpdateRequired = false;\n if (DeviceName_Phantom2 === deviceName && updateService.versionCompare(localfirmwareVer, NonLangVersion_Phantom2) <= 0){\n isForceUpdateRequired = true;\n }\n // else if (DeviceName_IonEdge === deviceName && updateService.versionCompare(localfirmwareVer, NonLangVersion_IonEdge) <= 0){\n // isForceUpdateRequired = true;\n // }\n Log(`${deviceName} device; firmware version: ${localfirmwareVer}, force update required : ${isForceUpdateRequired}`);\n return isForceUpdateRequired;\n}\n\nexport function loadRecaptchaScript() {\n const configData = configService.getConfigData();\n const url = configData.Google_ReCaptcha_URL.replace(\"{GOOGLE_RECAPTCHA_SITE_KEY}\", configData.Google_ReCaptcha_SiteKey) \n const isScriptExist = document.getElementById(ScriptId);\n\n if (!isScriptExist) {\n var script = document.createElement(\"script\");\n script.type = \"text/javascript\";\n script.src = url;\n script.id = ScriptId;\n script.onload = function () {\n Log(\"ReCaptcha Script loaded!\");\n };\n\n document.body.appendChild(script);\n } else {\n Log(\"ReCaptcha Script exist!\");\n }\n \n}\n\nexport function removeRecaptchaScript() {\n const recaptchaScript = document.getElementById(ScriptId);\n if (recaptchaScript) {\n recaptchaScript.remove();\n Log('ReCaptcha script tag removed.')\n } \n}\n\nexport function checkIpBlockingError(errorCode) {\n const ipBlockingErrorCodes = [1501, 1502, 1503, 1504]\n if (ipBlockingErrorCodes.includes(errorCode))\n return true\n else \n return false\n}","import * as langService from '../services/langService';\nimport * as configDataService from \"../services/configDataService\";\nimport * as downloadService from \"../services/downloadService\";\n\nexport async function downloadData_CourseSearch(countryCode, stateCode) {\n let configData = configDataService.getConfigData();\n let url = configData.CourseSearchURL.SearchURL;\n let params = countryCode;\n if (stateCode !== null && stateCode !== \"\") {\n params = params + \"-\" + stateCode;\n }\n url = url + params;\n let fileObject = await downloadService.downloadData_AWS(url, configData.AWS_APIKey);\n if (fileObject.status !== 200) throw new Error(langService.t(\"UpdateService_FileRequestFailed\"));\n let data = await fileObject.json();\n if (data.errorMessage) throw new Error(langService.t(\"UpdateService_FileRequestFailed\"));\n return data.body.items;\n}\n\nexport async function downloadData_CourseSearchFilter(countryCode, stateCode, city, nameOrZip) {\n let data = await downloadData_CourseSearch(countryCode, stateCode);\n if (data.length > 0 && city !== null && city !== \"\") {\n city = city.trim().toLowerCase();\n data = data.filter(function (el) {\n return el.cit.toLowerCase().startsWith(city);\n });\n }\n if (data.length > 0 && nameOrZip !== null && nameOrZip !== \"\") {\n nameOrZip = nameOrZip.trim().toLowerCase();\n data = data.filter(function (el) {\n return el.nam.toLowerCase().startsWith(nameOrZip) \n || el.zip.toLowerCase().startsWith(nameOrZip)\n || el.nam_nl.toLowerCase().startsWith(nameOrZip);\n });\n }\n return data;\n}\n\nasync function downloadDataFile(dataURL) {\n let fileObject = await downloadService.downloadData(dataURL);\n if (fileObject.status !== 200) throw new Error(langService.t(\"UserAccount_FileRequestFailed\"));\n return fileObject.json();\n};\n\nexport async function getCountryStateData() {\n let configData = configDataService.getConfigData();\n let URL_Country = configData.LocalURL.CountryList;\n let URL_State = configData.LocalURL.StateList;\n\n let cData = await downloadDataFile(URL_Country);\n let sData = await downloadDataFile(URL_State);\n cData.countries = [{\"code\": \"SELECT\", \"name\": \"Select Country\" }, ...cData.countries, {\"code\": \"ALL\", \"name\": \"All Courses\"}]\n return { countryData: cData, stateData: sData };\n};\n"],"sourceRoot":""}