{"version":3,"sources":["localization/date-masks.tsx","contexts/AppStateDefaults.tsx","contexts/GeneralInfoReducer.tsx","contexts/GuestInfoReducer.tsx","contexts/GeneralComplaintReducer.tsx","contexts/TreatmentDatesReducer.tsx","contexts/PatientInfoReducer.tsx","contexts/ComplaintTypeReducer.tsx","contexts/ClinicalConditionReducer.tsx","contexts/AbutmentsInfoReducer.tsx","contexts/InstrumentInfoReducer.tsx","contexts/AvailableToReturnReducer.tsx","contexts/SecondaryDeviceReducer.tsx","contexts/ReplacementsReducer.tsx","contexts/ShippingInfoReducer.tsx","lib/date-helpers.tsx","contexts/useComplaintReducer/RootReducerFactory.ts","contexts/MetadataReducer.tsx","contexts/useComplaintReducer/index.ts","contexts/AppContextProvider.tsx","http.ts","themes/orgs/imdi/images/mouth-diagram.svg","fonts/Roboto/Roboto-Regular.ttf","fonts/Roboto/Roboto-Light.ttf","fonts/Roboto/Roboto-Bold.ttf","themes/orgs/imdi/Theme.tsx","themes/orgs/imdi/ThirdPartyProductError.tsx","themes/orgs/imdi/index.tsx","themes/orgs/imdi/images/imdi_icon.png","themes/orgs/nobel/images/product-label-example.png","themes/orgs/nobel/images/mouth-diagram.svg","fonts/MarkPro/MarkW05-Regular.woff2","fonts/MarkPro/MarkW05-Light.woff2","fonts/MarkPro/MarkW05-Bold.woff2","themes/orgs/nobel/Theme.tsx","themes/orgs/nobel/ThirdPartyProductError.tsx","themes/orgs/nobel/index.tsx","themes/orgs/nobel/images/nobel_icon.png","lib/locale-helpers.tsx","themes/OrgCustomizationProvider/ConfigurationProvider.tsx","themes/OrgCustomizationProvider/index.tsx","hooks/useRedirect.tsx","components/LoginCheck.tsx","hooks/useLogger.tsx","components/DataRetrieval.tsx","hooks/useScreenFlow.tsx","components/Screens/AuthSelection.tsx","components/ControlContainer.tsx","hooks/useForm.tsx","hooks/useAddresses.tsx","components/OrgMappedImage.tsx","components/Screens/NatureOfComplaint.tsx","lib/db.ts","components/StepperButtons.tsx","components/Inputs/ProductSearchInput.tsx","hooks/useUnknownProduct.tsx","hooks/useTheHackiestPageNavigation.tsx","components/SelectedProductDisplay.tsx","components/Screens/ProductSearch.tsx","components/IRSAlert.tsx","components/Screens/ProductType.tsx","components/Screens/EventOccurrence.tsx","components/Screens/TreatmentDates.tsx","components/Inputs/PatientWeightInput.tsx","components/Screens/PatientInfo.tsx","components/Screens/AbutmentsInformation.tsx","components/Screens/InstrumentInformation.tsx","components/Inputs/CNBSRadioGroupInput.tsx","hooks/useDefaultRadioOptions.tsx","components/Screens/AvailableToReturn.tsx","lib/productTypeIsOneOf.tsx","components/Screens/ClinicalConditions/PermanentOptions.tsx","components/Screens/ClinicalConditions/TemporaryOptions.tsx","components/Screens/ClinicalConditions/ClinicalCondition.tsx","components/Screens/ComplaintTypes/OsseointegrationOptions.tsx","components/Inputs/MultiImageInput.tsx","components/Screens/ComplaintTypes/LabelingPackagingOptions.tsx","components/Screens/ComplaintTypes/FitOptions.tsx","components/Screens/ComplaintTypes/DamageFractureOptions.tsx","components/Screens/ComplaintTypes/EstheticOptions.tsx","components/Screens/ComplaintTypes/IFUOptions.tsx","components/Screens/ComplaintTypes/SurfaceOptions.tsx","components/Screens/ComplaintTypes/MRICompatibility.tsx","components/Screens/ComplaintTypes/OtherOptions.tsx","components/Screens/ComplaintTypes/ComplaintType.tsx","components/Field.tsx","lib/charLimit.ts","components/Inputs/CountrySelectInput.tsx","components/Screens/components/ShippingInfoForm.tsx","components/Screens/components/AddressSelector.tsx","components/Screens/ShippingInfo.tsx","lib/attachment-utils.ts","lib/property-mapper.tsx","components/Screens/ComplaintCompletion.tsx","components/ScrollToTop.tsx","components/Screens/SecondaryDevice.tsx","components/Screens/GuestForm.tsx","components/ProgressBar.tsx","components/Copyright.tsx","components/LanguageSelector.tsx","HUD.tsx","routers/AppRouter.tsx","components/NotificationProvider.tsx","contexts/GoogleAnalytics.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"names":["dateMasks","fr","en","ru","de","cs","defaultGuestInfo","telephone","country","customerNumber","email","defaultGeneralInfo","contactName","isAcknowledged","defaultGeneralComplaint","selectedProduct","undefined","isProductUnknown","isBatchOrLotNumberKnown","batchOrLotNumber","wasProductPlaced","wasPatientInvolved","isReplacementNeeded","productType","wasOpenedOrDropped","wasAnotherImplantPlaced","defaultTreatmentDates","dateOfTreatment","wasImplantLoaded","dateOfImplantLoading","wasThereASecondSurgery","dateOfSecondSurgery","wasProductRemoved","dateProductWasRemoved","defaultPatientInfo","patientId","patientAge","patientWeight","patientWeightUnit","patientSex","patientProfile","BRUXER","DIABETIC","SMOKER","NONE","UNKNOWN","OTHER","patientProfileExplanation","hygiene","boneQuality","boneQualityExplanation","utn","fdi","didDeviceContributeToInjury","currentPatientStatus","typeOfInjury","typeOfInjuryExplanation","defaultComplaintType","dateOfOccurrence","location","complaintType","estheticExplanation","otherExplanation","attachmentIds","defaultClinicalCondition","clinicalCondition","prolongedSurgeryExplanation","prolongedTreatmentExplanation","permanentImpairmentExplanation","hasPainDisappeared","hasNumbnessDisappeared","wereNerveSymptomsAlleviated","defaultAbutmentsInfo","implantBrandUsed","articleNumber","defaultInstrumentInfo","numberOfTimesUsed","ageOfDevice","defaultAvailableToReturn","canItemBeReturned","confirmDecontamination","reasonItemCannotBeReturned","attachmentId","defaultShippingInfo","customer","shippingAddress","hasAcceptedTerms","signature","defaultReplacements","selectedMainProductReplacement","selectedSecondaryDeviceReplacement","defaultSecondaryDevice","hasSecondaryDevice","hasSecondaryDeviceComplaint","defaultMetadata","isInitialComplaint","complaintWithCustomerData","complaintOnSecondaryDevice","complaintWithPatientAndTreatmentData","defaultComplaint","generalInfo","guestInfo","generalComplaint","treatmentDates","patientInfo","abutmentsInfo","instrumentInfo","availableToReturn","secondaryDevice","replacements","shippingInfo","metadata","getDefaultTreatmentDates","getDefaultPatientInfo","getDefaultClinicalCondition","getDefaultSecondaryDevice","getDefaultComplaint","updateGeneralInfo","type","payload","generalInfoReducer","state","action","patchGuestInfo","value","guestInfoReducer","setSelectedProduct","product","setGeneralComplaint","productId","generalComplaintReducer","salesOrg","productName","validFrom","shortDescription","materialPrice","materialPriceCurrency","categories","isDiscontinuedOrUnknown","isFirstPartyManufactured","setTreatmentDates","resetTreatmentDates","defaults","treatmentDatesReducer","setPatientInfo","patientInfoReducer","setEventOccurrence","setComplaintType","surfaceDefectExplanation","complaintTypeReducer","setClinicalCondition","clinicalConditionReducer","setAbutmentsInfo","abutmentsInfoReducer","setInstrumentInfo","instrumentInfoReducer","setAvailableToReturn","availableToReturnReducer","setSecondaryDevice","newState","secondaryDeviceReducer","setMainProductReplacement","setSecondaryDeviceReplacement","replacementsReducer","setShippingInfo","shippingInfoReducer","ISO_8601","ISO_8601_FULL","convertStringToDate","test","Date","isDateTypeKey","key","includes","dateReviver","RootReducerFactory","complaintReducer","initialState","csd","cpt","usePreviousPatientAndTreatmentDates","MetadataReducer","initializeComplaint","initialComplaint","complaintData","sessionStorage","getItem","JSON","parse","getComplaintFromSessionStorage","useComplaintReducer","combineReducers","metadataReducer","rootReducer","rootReducerFactory","useReducer","AppContext","React","createContext","AppContextProvider","shouldClearSessionAfterSubmission","children","utils","useUtils","useState","progress","setProgress","setCustomer","addresses","setAddresses","getCurrentLocaleCode","dateMask","notification","setNotification","complaint","dispatch","loggedIn","setLoggedIn","countryCode","useMemo","toLowerCase","useEffect","setItem","stringify","Provider","postNotification","color","message","clearNotification","headers","localStorage","Authorization","http","Axios","create","interceptors","request","use","r","i18n","language","response","error","status","window","pathname","href","origin","Promise","reject","theme","createTheme","palette","primary","main","secondary","contrastText","background","default","paper","typography","fontFamily","components","MuiFormLabel","styleOverrides","root","MuiPaginationItem","rounded","borderRadius","MuiTableCell","head","fontWeight","MuiButton","textTransform","boxShadow","padding","contained","border","outlinedSecondary","MuiStepIcon","MuiInput","MuiOutlinedInput","MuiCard","MuiCssBaseline","RobotoRegularTtf","RobotoLightTtf","RobotoBoldTtf","ThirdPartyProductError","useContext","OrgCustomizationContext","tns","t","Typography","variant","Trans","i18nKey","Link","sx","configuration","OrgIdentifier","OrgName","HostsConfiguration","StoreUrl","IsDevelopmentEnvironment","Environment","GoogleAnalytics","Id","Options","gtm_auth","gtm_preview","gtm_cookies_win","IconImage","MuiTheme","Theme","ImageMap","ProductLabel","MouthDiagram","src","MouthDiagramImg","Translations","translations","SupportedLanguages","Set","QuestionConfigurations","patient_weight","show","required","browse_for_photos","ItemSearchConfiguration","useItemDescriptionSearch","s","length","useItemIdSearch","useActiveProductSearch","GuestCountryWhitelist","languageCode","ThirdPartyErrorComponent","MarkProRegularWoff2","MarkProLightWoff2","MarkProBoldWoff2","pearlHref","creosHref","otherHref","List","ListItem","marginLeft","ProductLabelImg","style","marginTop","alignSelf","width","xs","sm","height","mt","md","supportedLocales","code","file","deAT","enAU","enGB","enCA","enUS","enIE","enIN","enNZ","es","frCA","frCH","it","ja","pt","getLocaleFile","locale","localeArray","map","localeObj","navigator","languages","find","l","getLocale","getSearchParamsLocale","querystring","search","getSearchParamsCountryCode","split","configurations","ImdiConfiguration","NobelConfiguration","org","ns","lang","initReactI18next","init","resources","lng","getSearchParamsLanguage","fallbackLng","interpolation","escapeValue","then","initialLanguage","_host","host","defaultConfiguration","Object","values","c","_updateBusinessConfiguration","businessName","image","document","title","Array","from","querySelectorAll","forEach","el","remove","querySelector","icon","createElement","rel","apple","appendChild","_updateBrowserIconAndTitle","OrgCustomizationProvider","setConfiguration","useTranslation","setLanguage","loadingOrgConfiguration","setLoadingOrgConfiguration","countryLanguageMap","fromEntries","item","countryWhitelist","get","data","businessOrganization","nt","StyledEngineProvider","injectFirst","ThemeProvider","CssBaseline","orgIdentifier","orgName","storeUrl","isDevelopmentEnvironment","environment","googleAnalytics","tGetParameter","tkey","result","match","RegExp","imageMap","questionsConfiguration","itemSearchConfiguration","supportedLanguages","changeLanguage","has","guestCountryWhiteList","ThirdPartyError","useRedirect","navigationCountryCode","registerUrl","loginUrl","redirect","useCallback","to","LoginCheck","valid","setValid","isLoggedIn","token","catch","display","alignItems","justifyContent","flexDirection","gap","CircularProgress","size","useLogger","a","body","emailAddress","userType","post","err","stackTrace","StackTrace","fromError","stack","toString","join","console","DataRetrieval","shouldRetrieveData","log","handleRedirect","UserType","collectCustomerInformation","hasSearchParams","removeItem","customerDetails","cookie","partnerAddress","Error","useLayoutEffect","screenPaths","guestForm","natureOfComplaint","natureOfComplaintGuest","productSearch","eventOccurrence","abutmentsInformation","instrumentInformation","complaintCompletion","screenConditions","useScreenFlow","useLocation","navigate","useNavigate","makeEntriesArrayFromScreenPaths","entries","testEntryCondition","entry","getAdjustedArray","entriesArray","filter","getProgressRate","numberOfScreens","getScreenIndex","findIndex","calculateProgress","adjustedArray","progressRate","getNextActivePath","currentScreenIndex","direction","isConditionMet","i","entryIndex","navigateToScreen","nextScreenPath","history","push","pop","navigateForward","navigateBackward","navigateTo","params","replace","AuthSelection","content","Box","Grid","container","spacing","rowSpacing","marginBottom","Button","fullWidth","onClick","cursor","useStyles","makeStyles","controlContainer","ControlContainer","classes","className","useForm","options","initialValues","setData","errors","setErrors","shouldValidate","setShouldValidate","handleChange","targetValue","sanitizeFn","newData","prevState","triggerWatchers","validateFields","watchers","changeWatchers","hijackedData","watcher","setValue","validations","newErrors","validation","pattern","custom","isValid","handleChangeEvent","e","target","handleFormSubmit","preventDefault","onFormSubmit","enableOnChangeValidation","shouldEnableValidation","setError","errorMessage","setFormData","useAddresses","getPrimaryAddress","address","isDevEnv","partner","shipToParty","OrgMappedImage","imageKey","component","alt","NatureOfComplaint","firstName","lastName","greetingName","onSubmit","trim","margin","maxWidth","name1","street","city","region","postalCode","FormControl","mb","FormLabel","TextField","id","mr","helperText","onChange","FormGroup","FormControlLabel","control","Checkbox","checked","label","FormHelperText","db","attachments","version","stores","Dexie","resetIndexedDb","toArray","bulkDelete","PreviousButton","props","before","screenpath","scrollTo","divider","totalSpan","float","fontSize","totalP","textAlign","summary","gridTemplateColumns","position","top","left","transform","backgroundColor","shadows","CancelButton","setDisplay","handleCancel","Modal","open","onClose","createStyles","table","pagination","buttons","StyledTableCell","withStyles","common","white","black","TableCell","StyledTableRow","hover","TableRow","initialProductSearchState","searchTerm","pageSize","page","cancelToken","paging","loading","ProductSearchReducer","ProductSearchInput","searchOldProducts","searchCurrentProducts","setIsProductUnknown","showUnknownOption","setShowUnknownOption","unknownProductEnabled","handleSearch","debounce","cancel","axios","CancelToken","source","cpr","opr","p","res","defaultValue","InputProps","endAdornment","Alert","severity","TableContainer","Paper","Table","TableHead","align","TableBody","scope","Pagination","shape","count","Math","round","_","newPage","useUnknownProduct","_isProductUnknown","unknownProduct","lastLocation","useTheHackiestPageNavigation","goToNextStep","setGoToNextStep","SelectedProductDisplay","useTheme","isMobile","useMediaQuery","breakpoints","down","Stack","ProductSearch","UseTheHackiestPageNavigation","navigateToDetailsPage","isThirdParty","IRSAlert","getIrsReturnFormUrl","grey","tableHeading","ProductType","isValidatingBatchNum","setIsValidatingBatchNum","isBatchNumValid","setIsBatchNumValid","showBatchNumCheck","setShowBatchNumCheck","anotherImplantInitialValue","productTypeInitialValue","batchNumInitialValue","productTypeMap","IMPLANT","ABUTMENT","SCREW","CLINICAL_INSTRUMENT","LAB_INSTRUMENT_LAB_SCREW","lg","xl","isFormValid","resetClinicalCondition","RadioGroup","row","Radio","inputProps","maxLength","InputAdornment","onBlur","cancelTokenSource","batchNum","validateBatchNum","materialList","batchReturnCode","resetBatchNumState","name","event","selectedProductType","productNumberMap","prevData","disabled","isValidDate","isDate","isBefore","endOfToday","isSameDay","startOfDay","isAfter","EventOccurence","earliestDate","DatePicker","disableFuture","mask","date","renderInput","TreatmentDates","dateOfImplantLoadingErrorMsg","setDateOfImplantLoadingErrorMsg","dateOfSecondSurgeryErrorMsg","setDateOfSecondSurgeryErrorMsg","dateOfProductRemovalErrorMsg","setDateOfProductRemovalErrorMsg","dateOfPlacementErrorMsg","setDateOfPlacementErrorMsg","dateOfProductRemovalToSecondarySurgeryErrorMsg","setDateOfProductRemovalToSecondarySurgeryErrorMsg","currentState","modifiedState","isPlacementOnOrBeforeDateOfOccurrence","endOfDay","isPlacementBeforeSecondSurgery","isPlacementOnOrBeforeRemoval","isPlacementOnOrBeforeLoading","isImplantLoadingAfterSecondSurgery","isImplantLoadingOnOrBeforeEventOccurrence","isImplantLoadingSameOrBeforeRemovalDate","isImplantLoadingOnOrAfterTreatmentDate","isSecondSurgeryBeforeOrOnDateOfOccurrence","isSecondSurgeryBeforeLoadingDate","isSecondSurgeryBeforeOrSameDayAsRemovalDate","isSecondSurgeryAfterTreatmentDate","isRemovalDateAfterSecondSurgery","isProductRemovalOnOrAfterTreatmentDate","isProductRemovalOnOrAfterImplantLoading","isProductRemovalOnOrAfterDateOfOccurence","maxDate","minDate","PatientWeightInput","Number","weight","onInput","val","String","len","slice","marginRight","units","textDecoration","setUnits","toothOptions","concat","isSomethingChecked","PatientInfo","weightUnit","setWeightUnit","parseInt","indexOf","handleProfileChange","newProfile","handleSubmit","multiline","minRows","maxRows","my","pl","select","pr","index","MenuItem","sort","defaulted","AbutmentsInformation","isValidatingArticleNum","setIsValidatingArticleNum","isArticleNumValid","setIsArticleNumValid","articleNumInitialValue","articleNum","validateArticleNum","some","m","materialReturnCode","InstrumentInformation","pb","minWidth","toUpperCase","CNBSRadioGroupInput","formControlSx","o","useDefaultRadioOptions","yesNoRadioOptions","AvailableToReturn","fileSelectionError","setFileSelectionError","currentAttachment","useLiveQuery","hiddenFileInput","useRef","handleFileInputChange","files","filename","maxSizeInMb","delete","add","tag","current","click","ref","accept","multiple","hidden","minHeight","productTypeIsOneOf","productTypeArr","alertFormLabel","PermanentOptions","TemporaryOptions","ClinicalCondition","OsseointegrationOptions","dropzone","lastTimeout","MultiImageInput","setAttachmentIds","errorText","fileErrors","setFileErrors","images","bulkGet","useDropzone","onDrop","acceptedFiles","fileRejections","all","newIds","clearTimeout","setTimeout","maxSize","getRootProps","getInputProps","handleRemoveImage","uploadSize","reduce","sum","x","aspectRatio","URL","createObjectURL","objectFit","right","IconButton","fileCount","sizeInMb","toFixed","LabelingPackagingOptions","selectedOption","attachmentsError","FitOptions","DamageFractureOptions","EstheticOptions","handleTextFieldChange","estheticExplanationError","IFUOptions","SurfaceOptions","surfaceDefectExplanationError","MRICompatibilityOptions","OtherOptions","otherExplanationError","ComplaintType","shouldShowLackOfStabilityOption","fieldName","MRICompatibility","Field","charLimit","string","max","substring","cachedCountries","countries","CountrySelectInput","whitelist","setCountries","b","ShippingInfoForm","formik","touched","Boolean","currentTarget","setFieldValue","card","activeCard","AddressCard","active","onSelect","selectText","Card","AddressSelector","partnerAddressType","masterAddresses","addressList","setAddressList","ShippingAddress","maxChar","characters","unauthenticatedValidationSchema","yup","navigateToNextScreen","useFormik","validationSchema","name2","getProductDisplayString","getProductDisplay","readAsBinaryStringAsync","resolve","reader","FileReader","onload","onerror","readAsBinaryString","prepareComplaintRequestData","mapUiToSapFields","complaintRequestData","complaintRequest","getDefaultComplaintRequest","mapGeneralInfoFields","mapGeneralComplaintFields","mapComplaintTypeFields","mapTreatmentDates","mapPatientInformation","mapComplaintType","mapClinicalConditions","mapAbutmentInfo","mapInstrumentInfo","mapSecondaryDeviceInfo","mapMainProductAvailableToReturn","mapProductReplacements","mapAcknowledgement","mapCustomerNumber","mapCountryCode","frontendState","articleNo","batchNo","productReplacementRequired","clinicalProcedure","neverPlaced","issue","patientUsed","mapProductTypeOptions","implant","implantOpenedOrDroppedByError","wasAnotherImplantPlacedSameSite","complaintProductType","eventDate","eventOccurence","mapEventLocationOptions","complaintEventLocation","placementDate","noImplantLoad","implantLoadDate","noSecondSurgery","secondSurgeryDate","removed","removeDate","patient","age","gender","mapPatientProfileOptions","patientProfileOther","implantHygiene","mapComplaintHygieneOptions","injured","injuryType","mapComplaintInjuryTypeOptions","injuryTypeText","mapComplaintPatientStatusOptions","mapComplaintBoneQualityOptions","boneQualityOther","toothPosition","patientStatusOptions","injuryTypeOptions","boneQualityOptions","complaintHygieneOptions","complaintPatientProfileOptions","profileOptions","issueDefinition","mapComplaintTypeOptions","issueDefinitionOther","btoa","binary","extension","complaintTypeOptions","involvedConditions","mapComplaintClinicalConditionOptions","painNumbnessOffAtRemoval","prolongedSurgery","prolongedTreatmentTime","involvedConditionOther","WereTheSymptomsAlleviatedOverTime","clinicalConditionOptions","implantType","mapComplaintImplantTypes","implantSitePreparationToolInitialNumberOfTimesUsed","instrument","secondaryDeviceMaterialNumber","secondaryDeviceBatch","secondaryDeviceReplacementRequired","returnAvailability","sterilization","missingExplanation","mainProductReplacement","description","secondaryDeviceReplacementMaterial","zip","phone","shipTo","termsAndConditions","alternatePhone","implantLoadDateUnknown","ComplaintCompletion","inProgress","setInProgress","success","setSuccess","complaintId","setComplaintId","useSamePatientAndTreatmentDates","requestData","finally","clearSession","condition","clear","goToHome","redir","fileAnotherComplaint","navigatePath","alignContent","inputRef","defaultChecked","ScrollToTop","SecondaryDevice","handleValidation","disableReplacementNeeded","removeNumberIncrementButtons","GuestForm","customerNumberMatch","setCustomerNumberMatch","loadingCustomerSearch","setLoadingCustomerSearch","req","emailFormat","integer","customerName","matches","customerExists","billToParty","distributionChannel","division","shippingMethod","paymentTerm","currency","policyChkText","url","searchParams","set","pushState","handleCountryChange","isEmpty","endIcon","ProgressBar","LinearProgress","Copyright","year","getFullYear","LanguageSelector","languageOptions","Select","disableUnderline","HUD","Container","PageTracker","encodeURI","replaceAll","AppRouter","initialEntries","path","element","EventOccurrence","ShippingInfo","NotificationProvider","setOpen","Snackbar","autoHideDuration","anchorOrigin","vertical","horizontal","keys","k","script","textContent","prepend","noscript","iframe","setAttribute","App","LocalizationProvider","dateAdapter","AdapterDateFns","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","appVersion","setInterval","reload","ReactDOM","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.d1722199.chunk.js","sourcesContent":["export const dateMasks: Record = {\r\n fr: '__/__/____',\r\n en: '__/__/____',\r\n 'en-US': '__/__/____',\r\n ru: '__.__.____',\r\n de: '__.__.____',\r\n cs: '__.__.____',\r\n}\r\n\r\nexport default dateMasks\r\n","import {\r\n AbutmentsInfoState,\r\n AvailableToReturnState,\r\n ClinicalConditionState,\r\n ComplaintState,\r\n ComplaintTypeState,\r\n GeneralComplaintState,\r\n GeneralInfoState,\r\n GuestInfoState,\r\n InstrumentInfoState, MetadataState,\r\n PatientInfoState,\r\n ReplacementsState,\r\n SecondaryDeviceState,\r\n ShippingInfoState,\r\n TreatmentDatesState,\r\n} from './types'\r\n\r\nconst defaultGuestInfo: GuestInfoState = {\r\n telephone: '',\r\n country: '', \r\n customerNumber: '',\r\n email: ''\r\n}\r\n\r\nconst defaultGeneralInfo: GeneralInfoState = {\r\n contactName: '',\r\n isAcknowledged: false,\r\n}\r\n\r\nconst defaultGeneralComplaint: GeneralComplaintState = {\r\n selectedProduct: undefined,\r\n isProductUnknown: false,\r\n isBatchOrLotNumberKnown: '',\r\n batchOrLotNumber: '',\r\n wasProductPlaced: '',\r\n wasPatientInvolved: '',\r\n isReplacementNeeded: '',\r\n productType: '',\r\n wasOpenedOrDropped: '',\r\n wasAnotherImplantPlaced: '',\r\n}\r\n\r\nconst defaultTreatmentDates: TreatmentDatesState = {\r\n dateOfTreatment: null,\r\n wasImplantLoaded: '',\r\n dateOfImplantLoading: null,\r\n wasThereASecondSurgery: '',\r\n dateOfSecondSurgery: null,\r\n wasProductRemoved: '',\r\n dateProductWasRemoved: null,\r\n}\r\n\r\nconst defaultPatientInfo: PatientInfoState = {\r\n patientId: '',\r\n patientAge: null,\r\n patientWeight: null,\r\n patientWeightUnit: 'lbs',\r\n patientSex: '',\r\n patientProfile: {\r\n BRUXER: false,\r\n DIABETIC: false,\r\n SMOKER: false,\r\n NONE: false,\r\n UNKNOWN: false,\r\n OTHER: false,\r\n },\r\n patientProfileExplanation: '',\r\n hygiene: '',\r\n boneQuality: '',\r\n boneQualityExplanation: '',\r\n utn: '',\r\n fdi: '',\r\n didDeviceContributeToInjury: '',\r\n currentPatientStatus: '',\r\n typeOfInjury: '',\r\n typeOfInjuryExplanation: '',\r\n}\r\n\r\nconst defaultComplaintType: ComplaintTypeState = {\r\n dateOfOccurrence: null,\r\n location: '',\r\n complaintType: '',\r\n estheticExplanation: '',\r\n otherExplanation: '',\r\n attachmentIds: [],\r\n}\r\n\r\nconst defaultClinicalCondition: ClinicalConditionState = {\r\n clinicalCondition: '',\r\n prolongedSurgeryExplanation: '',\r\n prolongedTreatmentExplanation: '',\r\n permanentImpairmentExplanation: '',\r\n otherExplanation: '',\r\n hasPainDisappeared: '',\r\n hasNumbnessDisappeared: '',\r\n wereNerveSymptomsAlleviated: '',\r\n}\r\n\r\nconst defaultAbutmentsInfo: AbutmentsInfoState = {\r\n implantBrandUsed: '',\r\n articleNumber: '',\r\n batchOrLotNumber: '',\r\n}\r\n\r\nconst defaultInstrumentInfo: InstrumentInfoState = {\r\n numberOfTimesUsed: null,\r\n ageOfDevice: null,\r\n}\r\n\r\nconst defaultAvailableToReturn: AvailableToReturnState = {\r\n canItemBeReturned: '',\r\n confirmDecontamination: false,\r\n reasonItemCannotBeReturned: '',\r\n attachmentId: undefined,\r\n}\r\n\r\nconst defaultShippingInfo: ShippingInfoState = {\r\n customer: undefined,\r\n shippingAddress: undefined,\r\n hasAcceptedTerms: false,\r\n signature: '',\r\n}\r\n\r\nconst defaultReplacements: ReplacementsState = {\r\n selectedMainProductReplacement: undefined,\r\n selectedSecondaryDeviceReplacement: undefined,\r\n}\r\n\r\nconst defaultSecondaryDevice: SecondaryDeviceState = {\r\n hasSecondaryDevice: '',\r\n hasSecondaryDeviceComplaint: '',\r\n isReplacementNeeded: '',\r\n selectedProduct: undefined,\r\n isBatchOrLotNumberKnown: '',\r\n batchOrLotNumber: '',\r\n}\r\n\r\nconst defaultMetadata: MetadataState = {\r\n isInitialComplaint: true,\r\n complaintWithCustomerData: false,\r\n complaintOnSecondaryDevice: false,\r\n complaintWithPatientAndTreatmentData: false\r\n}\r\n\r\nconst defaultComplaint: ComplaintState = {\r\n generalInfo: defaultGeneralInfo,\r\n guestInfo: defaultGuestInfo,\r\n generalComplaint: defaultGeneralComplaint,\r\n treatmentDates: defaultTreatmentDates,\r\n patientInfo: defaultPatientInfo,\r\n complaintType: defaultComplaintType,\r\n clinicalCondition: defaultClinicalCondition,\r\n abutmentsInfo: defaultAbutmentsInfo,\r\n instrumentInfo: defaultInstrumentInfo,\r\n availableToReturn: defaultAvailableToReturn,\r\n secondaryDevice: defaultSecondaryDevice,\r\n replacements: defaultReplacements,\r\n shippingInfo: defaultShippingInfo,\r\n metadata: defaultMetadata,\r\n}\r\n\r\nexport const getDefaultGeneralInfo = () => ({\r\n ...defaultGeneralInfo,\r\n})\r\n\r\nexport const getDefaultGuestInfo = () => ({\r\n ...defaultGuestInfo,\r\n})\r\n\r\nexport const getDefaultGeneralComplaint = () => ({\r\n ...defaultGeneralComplaint,\r\n})\r\n\r\nexport const getDefaultTreatmentDates = () => ({\r\n ...defaultTreatmentDates,\r\n})\r\n\r\nexport const getDefaultPatientInfo = () => ({\r\n ...defaultPatientInfo,\r\n})\r\n\r\nexport const getDefaultComplaintType = () => ({\r\n ...defaultComplaintType,\r\n})\r\n\r\nexport const getDefaultClinicalCondition = () => ({\r\n ...defaultClinicalCondition,\r\n})\r\n\r\nexport const getDefaultAbutmentsInfo = () => ({\r\n ...defaultAbutmentsInfo,\r\n})\r\n\r\nexport const getDefaultInstrumentInfo = () => ({\r\n ...defaultInstrumentInfo,\r\n})\r\n\r\nexport const getDefaultAvailableToReturn = () => ({\r\n ...defaultAvailableToReturn,\r\n})\r\n\r\nexport const getDefaultShippingInfo = () => ({\r\n ...defaultShippingInfo,\r\n})\r\n\r\nexport const getDefaultReplacements = () => ({\r\n ...defaultReplacements,\r\n})\r\n\r\nexport const getDefaultMetadata = (): MetadataState => ({\r\n ...defaultMetadata,\r\n})\r\n\r\nexport const getDefaultSecondaryDevice = () => ({\r\n ...defaultSecondaryDevice,\r\n})\r\n\r\nexport const getDefaultComplaint = (): ComplaintState => ({\r\n ...defaultComplaint,\r\n})\r\n","import { GeneralInfoState, Action } from './types'\r\n\r\nexport const updateGeneralInfo = ({\r\n contactName = '',\r\n isAcknowledged = false,\r\n} = {}) => ({\r\n type: 'UPDATE_GENERAL_INFO',\r\n payload: {\r\n contactName,\r\n isAcknowledged,\r\n },\r\n})\r\n\r\nconst generalInfoReducer: React.Reducer = (\r\n state: GeneralInfoState,\r\n action: Action\r\n) => {\r\n switch (action.type) {\r\n case 'UPDATE_GENERAL_INFO':\r\n return action.payload\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default generalInfoReducer\r\n\r\n// dispatch(updateGeneralInfo({ contactName: 'Jason', isAcknowledged: true }))\r\n","import {Action, GuestInfoState, PatchGuestInfoType} from './types'\r\n\r\nexport const patchGuestInfo: PatchGuestInfoType = {\r\n country: (value: string) => ({\r\n type: 'patch-country',\r\n payload: value\r\n }),\r\n telephone: (value: string) => ({\r\n type: 'patch-telephone',\r\n payload: value\r\n }),\r\n customerNumber: (value: string) => ({\r\n type: 'patch-customerNumber',\r\n payload: value\r\n }),\r\n email: (value: string) => ({\r\n type: 'patch-email',\r\n payload: value\r\n })\r\n}\r\n\r\nconst guestInfoReducer: React.Reducer = (state, action) => {\r\n switch (action.type) {\r\n case 'patch-country':\r\n return {...state, country: action.payload}\r\n case 'patch-telephone':\r\n return {...state, telephone: action.payload}\r\n case 'patch-customerNumber':\r\n return {...state, customerNumber: action.payload}\r\n case 'patch-email':\r\n return {...state, email: action.payload}\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default guestInfoReducer\r\n","import { Action, GeneralComplaintState, Product } from './types'\r\n\r\nexport const setSelectedProduct = (\r\n isProductUnknown: boolean | undefined,\r\n product?: Product\r\n) => ({\r\n type: 'SET_SELECTED_PRODUCT',\r\n payload: {\r\n isProductUnknown,\r\n product,\r\n },\r\n})\r\n\r\nexport const setGeneralComplaint = (\r\n {\r\n isBatchOrLotNumberKnown = '',\r\n batchOrLotNumber = '',\r\n wasProductPlaced = '',\r\n wasPatientInvolved = '',\r\n isReplacementNeeded = '',\r\n productType = '',\r\n wasOpenedOrDropped = '',\r\n wasAnotherImplantPlaced = '',\r\n productId = ''\r\n } = {} as GeneralComplaintState\r\n) => ({\r\n type: 'SET_GENERAL_COMPLAINT',\r\n payload: {\r\n isBatchOrLotNumberKnown,\r\n batchOrLotNumber,\r\n wasProductPlaced,\r\n wasPatientInvolved,\r\n isReplacementNeeded,\r\n productType,\r\n wasOpenedOrDropped,\r\n wasAnotherImplantPlaced,\r\n productId\r\n },\r\n})\r\n\r\nconst generalComplaintReducer: React.Reducer = (\r\n state: GeneralComplaintState,\r\n action: Action\r\n) => {\r\n switch (action.type) {\r\n case 'SET_SELECTED_PRODUCT':\r\n return {\r\n ...state,\r\n isProductUnknown: action.payload.isProductUnknown,\r\n selectedProduct: {\r\n ...action.payload.product,\r\n salesOrg: action.payload.product.salesOrg || '' // Ensure salesOrg is always a string\r\n },\r\n }\r\n case 'SET_GENERAL_COMPLAINT':\r\n return {\r\n ...state,\r\n isBatchOrLotNumberKnown: action.payload.isBatchOrLotNumberKnown,\r\n batchOrLotNumber: action.payload.batchOrLotNumber,\r\n wasProductPlaced: action.payload.wasProductPlaced,\r\n wasPatientInvolved: action.payload.wasPatientInvolved,\r\n isReplacementNeeded: action.payload.isReplacementNeeded,\r\n productType: action.payload.productType,\r\n wasOpenedOrDropped: action.payload.wasOpenedOrDropped,\r\n wasAnotherImplantPlaced: action.payload.wasAnotherImplantPlaced,\r\n selectedProduct: {\r\n ...state.selectedProduct,\r\n productId: action.payload.productId,\r\n salesOrg: state.selectedProduct?.salesOrg || '',\r\n productName: state.selectedProduct?.productName || '',\r\n action: state.selectedProduct?.action || '',\r\n validFrom: state.selectedProduct?.validFrom || '',\r\n shortDescription: state.selectedProduct?.shortDescription || '',\r\n materialPrice: state.selectedProduct?.materialPrice || '',\r\n materialPriceCurrency: state.selectedProduct?.materialPriceCurrency || '',\r\n categories: state.selectedProduct?.categories || null,\r\n isDiscontinuedOrUnknown: state.selectedProduct?.isDiscontinuedOrUnknown ?? false,\r\n isFirstPartyManufactured: state.selectedProduct?.isFirstPartyManufactured ?? false,\r\n }\r\n }\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default generalComplaintReducer\r\n","import { Action, TreatmentDatesState } from './types'\r\nimport { getDefaultTreatmentDates } from './AppStateDefaults'\r\n\r\nexport const setTreatmentDates = (treatmentDates: TreatmentDatesState) => ({\r\n type: 'SET_TREATMENT_DATES',\r\n payload: {\r\n ...treatmentDates,\r\n },\r\n})\r\n\r\n// In the case that the user returns to the Product Type screen\r\n// and changes their answer from Yes to No, then reset the values\r\n// of certain fields found on the Treatment Dates screen\r\nexport const resetTreatmentDates = () => {\r\n const defaults = getDefaultTreatmentDates()\r\n\r\n return {\r\n type: 'RESET_TREATMENT_DATES',\r\n payload: {\r\n wasImplantLoaded: defaults.wasImplantLoaded,\r\n dateOfImplantLoading: defaults.dateOfImplantLoading,\r\n wasThereASecondSurgery: defaults.wasThereASecondSurgery,\r\n dateOfSecondSurgery: defaults.dateOfSecondSurgery,\r\n wasProductRemoved: defaults.wasProductRemoved,\r\n dateProductWasRemoved: defaults.dateProductWasRemoved,\r\n },\r\n }\r\n}\r\n\r\nconst treatmentDatesReducer: React.Reducer = (\r\n state: TreatmentDatesState,\r\n action: Action\r\n) => {\r\n switch (action.type) {\r\n case 'SET_TREATMENT_DATES':\r\n return {\r\n ...state,\r\n ...action.payload,\r\n }\r\n\r\n case 'RESET_TREATMENT_DATES':\r\n return {\r\n ...state,\r\n ...action.payload,\r\n }\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default treatmentDatesReducer\r\n","import { PatientInfoState, Action } from './types'\r\nimport { getDefaultPatientInfo } from './AppStateDefaults'\r\n\r\nexport const setPatientInfo = (\r\n {\r\n patientId = '',\r\n patientAge = null,\r\n patientWeight = null,\r\n patientWeightUnit = 'lbs',\r\n patientSex = '',\r\n patientProfile = getDefaultPatientInfo().patientProfile,\r\n patientProfileExplanation = '',\r\n hygiene = '',\r\n boneQuality = '',\r\n boneQualityExplanation = '',\r\n utn = '',\r\n fdi = '',\r\n didDeviceContributeToInjury = '',\r\n currentPatientStatus = '',\r\n typeOfInjury = '',\r\n typeOfInjuryExplanation = '',\r\n } = {} as PatientInfoState\r\n) => ({\r\n type: 'SET_PATIENT_INFO',\r\n payload: {\r\n patientId,\r\n patientAge,\r\n patientWeight,\r\n patientWeightUnit,\r\n patientSex,\r\n patientProfile,\r\n patientProfileExplanation,\r\n hygiene,\r\n boneQuality,\r\n boneQualityExplanation,\r\n utn,\r\n fdi,\r\n didDeviceContributeToInjury,\r\n currentPatientStatus,\r\n typeOfInjury,\r\n typeOfInjuryExplanation,\r\n },\r\n})\r\n\r\nconst patientInfoReducer: React.Reducer = (\r\n state: PatientInfoState,\r\n action: Action\r\n) => {\r\n switch (action.type) {\r\n case 'SET_PATIENT_INFO':\r\n return {\r\n ...action.payload,\r\n }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default patientInfoReducer\r\n","import { Action, ComplaintTypeState } from './types'\r\n\r\n// setEventOccurrence\r\nexport const setEventOccurrence = (\r\n { dateOfOccurrence = null, location = '' } = {} as ComplaintTypeState\r\n) => ({\r\n type: 'SET_EVENT_OCCURRENCE',\r\n payload: {\r\n dateOfOccurrence,\r\n location,\r\n },\r\n})\r\n\r\n// setComplaintType\r\nexport const setComplaintType = (\r\n {\r\n complaintType = '',\r\n estheticExplanation = '',\r\n otherExplanation = '',\r\n surfaceDefectExplanation = '',\r\n attachmentIds = []\r\n } = {} as ComplaintTypeState\r\n) => ({\r\n type: 'SET_COMPLAINT_TYPE',\r\n payload: {\r\n complaintType,\r\n estheticExplanation,\r\n otherExplanation,\r\n surfaceDefectExplanation,\r\n attachmentIds\r\n },\r\n})\r\n\r\nexport const resetComplaintType = () => {\r\n return {\r\n type: 'RESET_COMPLAINT_TYPE',\r\n payload: {\r\n complaintType: '',\r\n estheticExplanation: '',\r\n otherExplanation: '',\r\n surfaceDefectExplanation: '',\r\n },\r\n }\r\n}\r\n\r\nconst complaintTypeReducer: React.Reducer = (\r\n state: ComplaintTypeState,\r\n action: Action\r\n) => {\r\n switch (action.type) {\r\n case 'SET_EVENT_OCCURRENCE':\r\n return {\r\n ...state,\r\n dateOfOccurrence: action.payload.dateOfOccurrence,\r\n location: action.payload.location,\r\n }\r\n\r\n case 'SET_COMPLAINT_TYPE':\r\n return {\r\n ...state,\r\n complaintType: action.payload.complaintType,\r\n estheticExplanation: action.payload.estheticExplanation,\r\n otherExplanation: action.payload.otherExplanation,\r\n surfaceDefectExplanation: action.payload.surfaceDefectExplanation,\r\n attachmentIds: action.payload.attachmentIds\r\n }\r\n\r\n case 'RESET_COMPLAINT_TYPE':\r\n return {\r\n ...state,\r\n ...action.payload,\r\n }\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default complaintTypeReducer\r\n","import { Action, ClinicalConditionState } from './types'\r\nimport { getDefaultClinicalCondition } from './AppStateDefaults'\r\n\r\n// setClinicalCondition\r\nexport const setClinicalCondition = (\r\n clinicalCondition: ClinicalConditionState\r\n) => ({\r\n type: 'SET_CLINICAL_CONDITION',\r\n payload: {\r\n clinicalCondition,\r\n },\r\n})\r\n\r\nexport const resetClinicalCondition = () => {\r\n const defaults = getDefaultClinicalCondition()\r\n return {\r\n type: 'RESET_CLINICAL_CONDITIONS',\r\n payload: {\r\n ...defaults,\r\n },\r\n }\r\n}\r\n\r\nconst clinicalConditionReducer: React.Reducer<\r\n ClinicalConditionState,\r\n Action\r\n> = (state: ClinicalConditionState, action: Action) => {\r\n switch (action.type) {\r\n case 'SET_CLINICAL_CONDITION':\r\n return {\r\n ...action.payload.clinicalCondition,\r\n }\r\n\r\n case 'RESET_CLINICAL_CONDITIONS':\r\n return {\r\n ...action.payload,\r\n }\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default clinicalConditionReducer\r\n","import React from 'react'\r\nimport { AbutmentsInfoState, Action } from './types'\r\n\r\nexport const setAbutmentsInfo = (abutmentsInfo: AbutmentsInfoState) => ({\r\n type: 'SET_ABUTMENTS_INFO',\r\n payload: {\r\n abutmentsInfo,\r\n },\r\n})\r\n\r\nconst abutmentsInfoReducer: React.Reducer = (\r\n state: AbutmentsInfoState,\r\n action: Action\r\n) => {\r\n switch (action.type) {\r\n case 'SET_ABUTMENTS_INFO':\r\n return {\r\n ...action.payload.abutmentsInfo,\r\n }\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default abutmentsInfoReducer\r\n","import { Action, InstrumentInfoState } from './types'\r\n\r\nexport const setInstrumentInfo = (instrumentInfo: InstrumentInfoState) => ({\r\n type: 'SET_INSTRUMENT_INFO',\r\n payload: {\r\n instrumentInfo,\r\n },\r\n})\r\n\r\nconst instrumentInfoReducer: React.Reducer = (\r\n state: InstrumentInfoState,\r\n action: Action\r\n) => {\r\n switch (action.type) {\r\n case 'SET_INSTRUMENT_INFO':\r\n return {\r\n ...state,\r\n ...action.payload.instrumentInfo,\r\n }\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default instrumentInfoReducer\r\n","import { Action, AvailableToReturnState } from './types'\r\n\r\nexport const setAvailableToReturn = (\r\n availableToReturn: AvailableToReturnState\r\n) => ({\r\n type: 'SET_AVAILABLE_TO_RETURN',\r\n payload: {\r\n availableToReturn,\r\n },\r\n})\r\n\r\nconst availableToReturnReducer: React.Reducer<\r\n AvailableToReturnState,\r\n Action\r\n> = (state: AvailableToReturnState, action: Action) => {\r\n switch (action.type) {\r\n case 'SET_AVAILABLE_TO_RETURN':\r\n return {\r\n ...state,\r\n ...action.payload.availableToReturn,\r\n }\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default availableToReturnReducer\r\n","import {SecondaryDeviceState} from './types'\r\n\r\ntype SecondaryDeviceAction =\r\n { type: 'SET_SECONDARY_DEVICE', payload: SecondaryDeviceState }\r\n\r\nexport const setSecondaryDevice = (newState: SecondaryDeviceState) => ({\r\n type: 'SET_SECONDARY_DEVICE',\r\n payload: newState\r\n})\r\n\r\nconst secondaryDeviceReducer: React.Reducer = (state, action) => {\r\n switch (action.type) {\r\n case 'SET_SECONDARY_DEVICE':\r\n return {...state, ...action.payload}\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default secondaryDeviceReducer\r\n","import {Action, Product, ReplacementsState} from './types'\r\n\r\nexport const setMainProductReplacement = (selectedMainProductReplacement?: Product) => ({\r\n type: 'SET_MAIN_PRODUCT_REPLACEMENT',\r\n payload: {selectedMainProductReplacement,},\r\n})\r\n\r\nexport const setSecondaryDeviceReplacement = (selectedSecondaryDeviceReplacement?: Product) => ({\r\n type: 'SET_SECONDARY_DEVICE_REPLACEMENT',\r\n payload: {selectedSecondaryDeviceReplacement,},\r\n})\r\n\r\nconst replacementsReducer: React.Reducer = (state, action) => {\r\n switch (action.type) {\r\n case 'SET_MAIN_PRODUCT_REPLACEMENT':\r\n return {\r\n ...state,\r\n selectedMainProductReplacement:\r\n action.payload.selectedMainProductReplacement,\r\n }\r\n case 'SET_SECONDARY_DEVICE_REPLACEMENT':\r\n return {\r\n ...state,\r\n selectedSecondaryDeviceReplacement:\r\n action.payload.selectedSecondaryDeviceReplacement,\r\n }\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default replacementsReducer\r\n","import {Action, ShippingInfoState} from './types'\r\nimport React from \"react\";\r\n\r\nexport const setShippingInfo = (shippingInfo: ShippingInfoState) => ({\r\n type: 'SET_SHIPPING_INFO',\r\n payload: {shippingInfo}\r\n})\r\n\r\nconst shippingInfoReducer: React.Reducer = (state: ShippingInfoState, action: Action) => {\r\n switch (action.type) {\r\n case 'SET_SHIPPING_INFO':\r\n return {...action.payload.shippingInfo}\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default shippingInfoReducer\r\n","/**\r\n * RegExp to test a string for a ISO 8601 Date spec\r\n * YYYY\r\n * YYYY-MM\r\n * YYYY-MM-DD\r\n * YYYY-MM-DDThh:mmTZD\r\n * YYYY-MM-DDThh:mm:ssTZD\r\n * YYYY-MM-DDThh:mm:ss.sTZD\r\n * @see: https://www.w3.org/TR/NOTE-datetime\r\n * @type {RegExp}\r\n */\r\nvar ISO_8601 =\r\n /^\\d{4}(-\\d\\d(-\\d\\d(T\\d\\d:\\d\\d(:\\d\\d)?(\\.\\d+)?(([+-]\\d\\d:\\d\\d)|Z)?)?)?)?$/i\r\n\r\n/**\r\n * RegExp to test a string for a full ISO 8601 Date\r\n * Does not do any sort of date validation, only checks if the string is according to the ISO 8601 spec.\r\n * YYYY-MM-DDThh:mm:ss\r\n * YYYY-MM-DDThh:mm:ssTZD\r\n * YYYY-MM-DDThh:mm:ss.sTZD\r\n * @see: https://www.w3.org/TR/NOTE-datetime\r\n * @type {RegExp}\r\n */\r\nvar ISO_8601_FULL =\r\n /^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\d(\\.\\d+)?(([+-]\\d\\d:\\d\\d)|Z)?$/i\r\n\r\n// Regex taken from https://stackoverflow.com/a/37563868/235276\r\n\r\nfunction dateReviver(key: string, value: unknown) {\r\n if (isDateTypeKey(key)) {\r\n return convertStringToDate(value)\r\n }\r\n return value\r\n}\r\n\r\nconst convertStringToDate = (value: unknown) => {\r\n if (\r\n typeof value === 'string' &&\r\n (ISO_8601.test(value) || ISO_8601_FULL.test(value))\r\n ) {\r\n return new Date(value)\r\n }\r\n return value\r\n}\r\n\r\nconst isDateTypeKey = (key: string): boolean => {\r\n const dateKeysArray = [\r\n 'dateOfTreatment',\r\n 'dateOfImplantLoading',\r\n 'dateOfSecondSurgery',\r\n 'dateProductWasRemoved',\r\n 'dateOfOccurrence',\r\n ]\r\n return dateKeysArray.includes(key)\r\n}\r\n\r\nexport default dateReviver\r\n","import {Action, ComplaintReducer, ComplaintState} from \"../types\";\r\nimport {getDefaultComplaint} from \"../AppStateDefaults\";\r\n\r\ntype RootAction =\r\n { type: 'CANCEL_COMPLAINT' } |\r\n { type: 'CREATE_SECONDARY_COMPLAINT', payload: { usePreviousPatientAndTreatmentDates: boolean } }\r\n\r\nexport const cancelComplaint = (): RootAction => ({type: 'CANCEL_COMPLAINT'})\r\nexport const createSecondaryComplaint = (usePreviousPatientAndTreatmentDates: boolean): RootAction => ({\r\n type: 'CREATE_SECONDARY_COMPLAINT',\r\n payload: {usePreviousPatientAndTreatmentDates}\r\n})\r\n\r\nconst RootReducerFactory = (complaintReducer: ComplaintReducer) => (state: ComplaintState, action: Action) => {\r\n switch (action.type) {\r\n case 'CANCEL_COMPLAINT':\r\n return complaintReducer(getDefaultComplaint(), action)\r\n case 'CREATE_SECONDARY_COMPLAINT':\r\n const initialState = getDefaultComplaint()\r\n // Complaint with Customer Data\r\n const cwc = true\r\n // Complaint on Secondary Device\r\n const csd = state.secondaryDevice.hasSecondaryDeviceComplaint === 'YES'\r\n // Complaint with Patient and Treatment Data\r\n const cpt = action.payload.usePreviousPatientAndTreatmentDates\r\n\r\n return complaintReducer({\r\n ...initialState,\r\n metadata: {\r\n isInitialComplaint: false,\r\n complaintWithCustomerData: cwc,\r\n complaintOnSecondaryDevice: csd,\r\n complaintWithPatientAndTreatmentData: cpt\r\n },\r\n guestInfo: cwc ? {...state.guestInfo} : {...initialState.guestInfo},\r\n generalInfo: {\r\n ...initialState.generalInfo,\r\n contactName: state.generalInfo.contactName,\r\n isAcknowledged: state.generalInfo.isAcknowledged\r\n },\r\n generalComplaint: csd\r\n ? {\r\n selectedProduct: state.secondaryDevice.selectedProduct,\r\n isProductUnknown: state.secondaryDevice.isProductUnknown as boolean,\r\n isBatchOrLotNumberKnown: state.secondaryDevice.batchOrLotNumber ? 'YES' : 'NO',\r\n batchOrLotNumber: state.secondaryDevice.batchOrLotNumber,\r\n wasProductPlaced: cpt ? state.generalComplaint.wasProductPlaced : initialState.generalComplaint.wasProductPlaced,\r\n wasPatientInvolved: '',\r\n isReplacementNeeded: '',\r\n productType: '',\r\n wasOpenedOrDropped: '',\r\n wasAnotherImplantPlaced: cpt ? state.generalComplaint.wasAnotherImplantPlaced : initialState.generalComplaint.wasAnotherImplantPlaced,\r\n }\r\n : {\r\n ...initialState.generalComplaint,\r\n wasProductPlaced: cpt ? state.generalComplaint.wasProductPlaced : initialState.generalComplaint.wasProductPlaced,\r\n wasAnotherImplantPlaced: cpt ? state.generalComplaint.wasAnotherImplantPlaced : initialState.generalComplaint.wasAnotherImplantPlaced,\r\n },\r\n complaintType: csd\r\n ? {\r\n ...state.complaintType,\r\n complaintType: '',\r\n otherExplanation: '',\r\n surfaceDefectExplanation: '',\r\n estheticExplanation: ''\r\n }\r\n : {...initialState.complaintType},\r\n treatmentDates: csd || cpt ? {...state.treatmentDates} : initialState.treatmentDates,\r\n patientInfo: csd || cpt ? {...state.patientInfo} : initialState.patientInfo,\r\n clinicalCondition: {...initialState.clinicalCondition},\r\n abutmentsInfo: state.generalComplaint.productType === 'ABUTMENT' && csd && !state.generalComplaint.selectedProduct?.isDiscontinuedOrUnknown\r\n ? {...initialState.abutmentsInfo, implantBrandUsed: 'ORIGINAL_NOBEL_BIOCARE'}\r\n : {...initialState.abutmentsInfo},\r\n secondaryDevice: csd\r\n ? {\r\n ...initialState.secondaryDevice,\r\n hasSecondaryDevice: 'NO',\r\n }\r\n : {...initialState.secondaryDevice},\r\n shippingInfo: {...state.shippingInfo}\r\n }, action)\r\n default:\r\n return complaintReducer(state, action)\r\n }\r\n}\r\n\r\nexport default RootReducerFactory\r\n","import React from \"react\";\r\nimport {MetadataState} from \"./types\";\r\n\r\ntype MetadataReducerAction =\r\n { type: 'SET_IS_INITIAL_COMPLAINT', payload: boolean }\r\n\r\nexport const setIsInitialComplaint = (isInitialComplaint: boolean): MetadataReducerAction => ({\r\n type: 'SET_IS_INITIAL_COMPLAINT',\r\n payload: isInitialComplaint\r\n})\r\n\r\nconst MetadataReducer: React.Reducer = (state, action) => {\r\n switch (action.type) {\r\n case 'SET_IS_INITIAL_COMPLAINT':\r\n return {...state, metadata: {isInitialComplaint: action.payload}}\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport default MetadataReducer\r\n","import React, {useReducer} from 'react'\r\nimport {\r\n getDefaultAbutmentsInfo,\r\n getDefaultAvailableToReturn,\r\n getDefaultClinicalCondition,\r\n getDefaultComplaintType,\r\n getDefaultGeneralComplaint,\r\n getDefaultGeneralInfo,\r\n getDefaultGuestInfo,\r\n getDefaultInstrumentInfo,\r\n getDefaultMetadata,\r\n getDefaultPatientInfo,\r\n getDefaultReplacements,\r\n getDefaultSecondaryDevice,\r\n getDefaultShippingInfo,\r\n getDefaultTreatmentDates\r\n} from '../AppStateDefaults'\r\nimport {Action, ComplaintReducer, ComplaintState} from '../types'\r\nimport combineReducers from \"react-combine-reducers\";\r\nimport generalInfoReducer from \"../GeneralInfoReducer\";\r\nimport guestInfoReducer from \"../GuestInfoReducer\";\r\nimport generalComplaintReducer from \"../GeneralComplaintReducer\";\r\nimport treatmentDatesReducer from \"../TreatmentDatesReducer\";\r\nimport patientInfoReducer from \"../PatientInfoReducer\";\r\nimport complaintTypeReducer from \"../ComplaintTypeReducer\";\r\nimport clinicalConditionReducer from \"../ClinicalConditionReducer\";\r\nimport abutmentsInfoReducer from \"../AbutmentsInfoReducer\";\r\nimport instrumentInfoReducer from \"../InstrumentInfoReducer\";\r\nimport availableToReturnReducer from \"../AvailableToReturnReducer\";\r\nimport secondaryDeviceReducer from \"../SecondaryDeviceReducer\";\r\nimport replacementsReducer from \"../ReplacementsReducer\";\r\nimport shippingInfoReducer from \"../ShippingInfoReducer\";\r\nimport dateReviver from '../../lib/date-helpers'\r\nimport rootReducerFactory from \"./RootReducerFactory\";\r\nimport metadataReducer from \"../MetadataReducer\";\r\n\r\nexport const getComplaintFromSessionStorage = () => {\r\n const complaintData = sessionStorage.getItem('complaintData')\r\n\r\n return complaintData\r\n ? JSON.parse(complaintData, dateReviver) as ComplaintState\r\n : undefined\r\n}\r\n\r\nconst initializeComplaint = (initialComplaint: ComplaintState) => getComplaintFromSessionStorage() || initialComplaint\r\n\r\nexport const useComplaintReducer = (): [ComplaintState, React.Dispatch] => {\r\n const [complaintReducer, initialComplaint] =\r\n combineReducers({\r\n generalInfo: [generalInfoReducer, getDefaultGeneralInfo()],\r\n guestInfo: [guestInfoReducer, getDefaultGuestInfo()],\r\n generalComplaint: [generalComplaintReducer, getDefaultGeneralComplaint()],\r\n treatmentDates: [treatmentDatesReducer, getDefaultTreatmentDates()],\r\n patientInfo: [patientInfoReducer, getDefaultPatientInfo()],\r\n complaintType: [complaintTypeReducer, getDefaultComplaintType()],\r\n clinicalCondition: [clinicalConditionReducer, getDefaultClinicalCondition()],\r\n abutmentsInfo: [abutmentsInfoReducer, getDefaultAbutmentsInfo()],\r\n instrumentInfo: [instrumentInfoReducer, getDefaultInstrumentInfo()],\r\n availableToReturn: [availableToReturnReducer, getDefaultAvailableToReturn()],\r\n secondaryDevice: [secondaryDeviceReducer, getDefaultSecondaryDevice()],\r\n replacements: [replacementsReducer, getDefaultReplacements()],\r\n shippingInfo: [shippingInfoReducer, getDefaultShippingInfo()],\r\n metadata: [metadataReducer, getDefaultMetadata()]\r\n })\r\n\r\n // A Root Reducer allows for a global state change, e.g., re-initializing the entire\r\n // state object upon form cancellation, when using combined reducers\r\n // https://stackoverflow.com/questions/35622588/how-to-reset-the-state-of-a-redux-store\r\n const rootReducer = rootReducerFactory(complaintReducer)\r\n\r\n // Acquire the state object and the dispatch method\r\n const [complaint, dispatch] = useReducer(\r\n rootReducer,\r\n initializeComplaint(initialComplaint)\r\n )\r\n\r\n return [complaint, dispatch]\r\n}\r\n\r\nexport default useComplaintReducer\r\n","import React, {useEffect, useMemo, useState} from 'react'\r\nimport {useUtils} from '@mui/lab/internal/pickers/hooks/useUtils'\r\nimport dateMasks from '../localization/date-masks'\r\nimport {Action, ComplaintState, Customer, CustomerAddress} from './types'\r\nimport {AlertColor} from \"@mui/material\";\r\nimport useComplaintReducer from \"./useComplaintReducer\";\r\n\r\ntype AppContextState = {\r\n shouldClearSessionAfterSubmission: boolean\r\n dateMask: string\r\n progress: number\r\n setProgress: React.Dispatch\r\n customer: Customer\r\n setCustomer: React.Dispatch\r\n addresses: CustomerAddress[]\r\n setAddresses: React.Dispatch\r\n complaint: ComplaintState\r\n dispatch: React.Dispatch\r\n loggedIn: boolean\r\n setLoggedIn: React.Dispatch,\r\n countryCode: string\r\n customerNumber: string\r\n postNotification: (color: AlertColor, message: string) => void\r\n clearNotification: () => void\r\n notification?: [AlertColor, string]\r\n}\r\n\r\nexport const AppContext = React.createContext({} as AppContextState)\r\n\r\ntype AppContextProviderProps = {\r\n shouldClearSessionAfterSubmission: boolean\r\n}\r\n\r\nexport const AppContextProvider: React.FC = ({\r\n shouldClearSessionAfterSubmission,\r\n children\r\n }) => {\r\n const utils = useUtils()\r\n const [progress, setProgress] = useState(0)\r\n const [customer, setCustomer] = useState({} as Customer)\r\n const [addresses, setAddresses] = useState([])\r\n const [dateMask] = useState(() => dateMasks[utils.getCurrentLocaleCode()])\r\n const [notification, setNotification] = useState<[AlertColor, string]>()\r\n const [complaint, dispatch] = useComplaintReducer()\r\n const [loggedIn, setLoggedIn] = useState(false);\r\n const countryCode = useMemo(() => ((loggedIn ? customer.country : complaint.guestInfo.country) || '').toLowerCase(), [customer.country, complaint.guestInfo.country, loggedIn])\r\n const customerNumber = useMemo(() => complaint.shippingInfo.customer?.customer || customer.customer, [complaint.shippingInfo.customer, customer.customer])\r\n\r\n useEffect(() => {\r\n sessionStorage.setItem('complaintData', JSON.stringify(complaint))\r\n }, [complaint])\r\n\r\n return (\r\n setNotification([color, message]),\r\n clearNotification: () => setNotification(undefined),\r\n notification\r\n }}\r\n >\r\n {children}\r\n \r\n )\r\n}\r\n","import Axios from 'axios'\r\nimport i18n from 'i18next'\r\n\r\nconst headers = localStorage.getItem('token')\r\n ? {Authorization: ` bearer ${localStorage.getItem('token')}`}\r\n : undefined\r\n\r\nconst http = Axios.create({headers})\r\n\r\nhttp.interceptors.request.use((r) => {\r\n r.headers[\"Accept-Language\"] = i18n.language\r\n return r\r\n})\r\n\r\nhttp.interceptors.response.use(\r\n (r) => r,\r\n (error) => {\r\n if (\r\n error.response.status === 503 &&\r\n window.location.pathname !== '/503'\r\n ) {\r\n window.location.href = window.location.origin + '/503'\r\n }\r\n\r\n return Promise.reject(error)\r\n }\r\n)\r\n\r\nexport default http\r\n","export default __webpack_public_path__ + \"static/media/mouth-diagram.4ae369f5.svg\";","export default __webpack_public_path__ + \"static/media/Roboto-Regular.fc2b5060.ttf\";","export default __webpack_public_path__ + \"static/media/Roboto-Light.333da16a.ttf\";","export default __webpack_public_path__ + \"static/media/Roboto-Bold.f80816a5.ttf\";","import {createTheme} from \"@mui/material/styles\";\r\nimport RobotoRegularTtf from \"../../../fonts/Roboto/Roboto-Regular.ttf\";\r\nimport RobotoLightTtf from \"../../../fonts/Roboto/Roboto-Light.ttf\";\r\nimport RobotoBoldTtf from \"../../../fonts/Roboto/Roboto-Bold.ttf\";\r\n\r\nconst theme = createTheme({\r\n palette: {\r\n primary: {main: '#ff6c0e'},\r\n secondary: {\r\n main: '#63666a',\r\n contrastText: '#b1b3b3',\r\n },\r\n background: {\r\n default: '#fff',\r\n paper: '#fff',\r\n },\r\n },\r\n typography: {\r\n fontFamily: 'Roboto',\r\n },\r\n components: {\r\n MuiFormLabel: {\r\n styleOverrides: {\r\n root: {\r\n '&.Mui-focused': {\r\n color: '#645757',\r\n },\r\n },\r\n },\r\n },\r\n MuiPaginationItem: {\r\n styleOverrides: {\r\n rounded: {\r\n borderRadius: '0',\r\n },\r\n },\r\n },\r\n MuiTableCell: {\r\n styleOverrides: {\r\n head: {\r\n fontWeight: 'bold',\r\n },\r\n },\r\n },\r\n MuiButton: {\r\n styleOverrides: {\r\n root: {\r\n textTransform: 'none',\r\n boxShadow: 'none',\r\n borderRadius: '0',\r\n padding: '5px 15px',\r\n },\r\n contained: {\r\n boxShadow: 'none',\r\n border: `rgb(0, 0, 0, 0.25) 1px solid`,\r\n padding: '5px 15px',\r\n color: '#fff'\r\n },\r\n outlinedSecondary: {\r\n boxShadow: 'none',\r\n color: '#ff6c0e',\r\n background: '#fff',\r\n border: `rgb(0, 0, 0, 0.25) 1px solid`,\r\n padding: '5px 15px',\r\n },\r\n },\r\n },\r\n MuiStepIcon: {\r\n styleOverrides: {\r\n root: {\r\n '&.Mui-active': {\r\n color: '#0f0f0f !important',\r\n },\r\n '&.Mui-completed': {\r\n color: 'rgba(0, 0, 0, 0.38) !important',\r\n },\r\n },\r\n },\r\n },\r\n MuiInput: {\r\n styleOverrides: {\r\n root: {\r\n borderRadius: 0,\r\n },\r\n },\r\n },\r\n MuiOutlinedInput: {\r\n styleOverrides: {\r\n root: {\r\n borderRadius: 0,\r\n },\r\n },\r\n },\r\n MuiCard: {\r\n styleOverrides: {\r\n root: {\r\n borderRadius: 0,\r\n boxShadow: 'none',\r\n },\r\n },\r\n },\r\n MuiCssBaseline: {\r\n styleOverrides: `\r\n @font-face {\r\n font-family: 'Roboto';\r\n font-style: normal;\r\n font-display: swap;\r\n font-weight: 440;\r\n src: local('Roboto-Regular.ttf'), local('Roboto'), url(${RobotoRegularTtf}) format('truetype');\r\n unicodeRange: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF;\r\n },\r\n @font-face {\r\n font-family: 'Roboto';\r\n font-style: light;\r\n font-display: swap;\r\n font-weight: 340;\r\n src: local('Roboto-Light.ttf'), local('Roboto'), url(${RobotoLightTtf}) format('truetype');\r\n unicodeRange: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF;\r\n },\r\n @font-face {\r\n font-family: 'Roboto';\r\n font-style: bold;\r\n font-display: swap;\r\n font-weight: 630;\r\n src: local('Roboto-Bold.ttf'), local('Roboto'), url(${RobotoBoldTtf}) format('truetype');\r\n unicodeRange: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF;\r\n }, \r\n `,\r\n },\r\n },\r\n})\r\n\r\nexport default theme","import React, {useContext, useMemo} from 'react';\r\nimport {Link, List, ListItem, Typography} from \"@mui/material\";\r\nimport {OrgCustomizationContext} from \"../../OrgCustomizationProvider\";\r\nimport {Trans} from \"react-i18next\";\r\n\r\nconst ThirdPartyProductError = () => {\r\n const {t, tns, language} = useContext(OrgCustomizationContext);\r\n const href = useMemo(() => {\r\n switch (language) {\r\n case 'en':\r\n return 'imdi_complaint_en.pdf'\r\n default:\r\n return 'imdi_complaint_en.pdf'\r\n }\r\n }, [language])\r\n\r\n return (\r\n <>\r\n \r\n \r\n -\r\n \r\n -\r\n \r\n -\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default ThirdPartyProductError\r\n","import {OrgCustomizedConfiguration} from '../OrgCustomizedConfiguration';\r\nimport MouthDiagramImg from './images/mouth-diagram.svg'\r\nimport IconImg from './images/imdi_icon.png'\r\nimport translations from '../../../localization/build/imdi.json'\r\nimport Theme from \"./Theme\";\r\nimport ThirdPartyProductError from \"./ThirdPartyProductError\";\r\n\r\nconst configuration: OrgCustomizedConfiguration = {\r\n OrgIdentifier: 'IMDI',\r\n OrgName: 'Implant Direct',\r\n HostsConfiguration: {\r\n 'imdicomplaints.dev.platform.dental': {\r\n StoreUrl: 'https://imdi-sol.dev.platform.dental',\r\n IsDevelopmentEnvironment: true,\r\n Environment: 'Development',\r\n },\r\n 'imdicomplaints.sta.platform.dental': {\r\n StoreUrl: 'https://imdi-sol.sta.platform.dental',\r\n IsDevelopmentEnvironment: true,\r\n Environment: 'Staging',\r\n GoogleAnalytics: {\r\n Id: 'GTM-NS6PVWMJ',\r\n Options: {\r\n gtm_auth: 'dGZTp2lGw2jLev56AD8FjA',\r\n gtm_preview: 'env-3',\r\n gtm_cookies_win: 'x'\r\n }\r\n }\r\n },\r\n 'complaints.implantdirect.com': {\r\n StoreUrl: 'https://store.implantdirect.com',\r\n IsDevelopmentEnvironment: false,\r\n Environment: 'Production',\r\n GoogleAnalytics: {\r\n Id: 'GTM-NS6PVWMJ'\r\n }\r\n },\r\n 'localhost': {\r\n StoreUrl: 'https://imdi-sol.dev.platform.dental',\r\n IsDevelopmentEnvironment: true,\r\n Environment: 'Local',\r\n }\r\n },\r\n IconImage: IconImg,\r\n MuiTheme: Theme,\r\n ImageMap: {\r\n ProductLabel: undefined,\r\n MouthDiagram: {\r\n src: MouthDiagramImg,\r\n }\r\n },\r\n Translations: translations,\r\n SupportedLanguages: new Set(['en', 'de', 'es', 'fr', 'it', 'pt']),\r\n QuestionConfigurations: {\r\n patient_weight: {\r\n show: true,\r\n required: false\r\n },\r\n browse_for_photos: {\r\n required: false,\r\n show: true\r\n }\r\n },\r\n ItemSearchConfiguration: {\r\n useItemDescriptionSearch: (s) => /\\D/.test(s) && s.length >= 3,\r\n useItemIdSearch: (s) => !/\\D/.test(s) && s.length >= 4,\r\n useActiveProductSearch: (s) => s.length >= 3\r\n },\r\n GuestCountryWhitelist: [\r\n { countryCode: \"az\", languageCode: \"az\" },\r\n { countryCode: \"cl\", languageCode: \"es\" },\r\n { countryCode: \"cn\", languageCode: \"zh\" },\r\n { countryCode: \"cr\", languageCode: \"es\" },\r\n { countryCode: \"hr\", languageCode: \"hr\" },\r\n { countryCode: \"cz\", languageCode: \"cs\" },\r\n { countryCode: \"eg\", languageCode: \"ar\" },\r\n { countryCode: \"ee\", languageCode: \"et\" },\r\n { countryCode: \"gr\", languageCode: \"el\" },\r\n { countryCode: \"iq\", languageCode: \"ar\" },\r\n { countryCode: \"il\", languageCode: \"he\" },\r\n { countryCode: \"jo\", languageCode: \"ar\" },\r\n { countryCode: \"kw\", languageCode: \"ar\" },\r\n { countryCode: \"lv\", languageCode: \"lv\" },\r\n { countryCode: \"lb\", languageCode: \"ar\" },\r\n { countryCode: \"lt\", languageCode: \"lt\" },\r\n { countryCode: \"om\", languageCode: \"ar\" },\r\n { countryCode: \"pl\", languageCode: \"pl\" },\r\n { countryCode: \"qa\", languageCode: \"ar\" },\r\n { countryCode: \"ro\", languageCode: \"ro\" },\r\n { countryCode: \"sa\", languageCode: \"ar\" },\r\n { countryCode: \"sg\", languageCode: \"en\" },\r\n { countryCode: \"za\", languageCode: \"en\" },\r\n { countryCode: \"tw\", languageCode: \"zh\" },\r\n { countryCode: \"tr\", languageCode: \"tr\" },\r\n { countryCode: \"ua\", languageCode: \"uk\" },\r\n { countryCode: \"ae\", languageCode: \"ar\" },\r\n ],\r\n ThirdPartyErrorComponent: ThirdPartyProductError\r\n}\r\n\r\nexport default configuration\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAMFBMVEX3kCD3kCD3kCD3kCD4ly75rFj5pUr////95Mj81qz8z57/+PL6s2b7yJD+8uT6unSbXMduAAAAA3RSTlM4oPNavW+5AAAAAWJLR0QHFmGI6wAAAAd0SU1FB+cHEg0eHTA6AssAAAABb3JOVAHPoneaAAAAVElEQVQI12NgVDYGAiMBBmFjMDBkUIYwjBiMXYNTQ5ONjRmMw4vbyyucIYxZ2xdDGMHHN0MZ7sVQRjqMcf0xVFf5YSAjfXN7dT/IHChAMOCWwpwBAODCJoYn3HLUAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA3LTE4VDEzOjMwOjAwKzAwOjAwMkj/TAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNy0xOFQxMzoyOTo1OSswMDowMKP2+E0AAAAASUVORK5CYII=\"","export default __webpack_public_path__ + \"static/media/product-label-example.68e7cb99.png\";","export default __webpack_public_path__ + \"static/media/mouth-diagram.816922b5.svg\";","export default __webpack_public_path__ + \"static/media/MarkW05-Regular.24e101bf.woff2\";","export default __webpack_public_path__ + \"static/media/MarkW05-Light.c71ef788.woff2\";","export default __webpack_public_path__ + \"static/media/MarkW05-Bold.3fb0f5d7.woff2\";","import {createTheme} from \"@mui/material/styles\";\r\nimport MarkProRegularWoff2 from \"../../../fonts/MarkPro/MarkW05-Regular.woff2\";\r\nimport MarkProLightWoff2 from \"../../../fonts/MarkPro/MarkW05-Light.woff2\";\r\nimport MarkProBoldWoff2 from \"../../../fonts/MarkPro/MarkW05-Bold.woff2\";\r\n\r\nconst theme = createTheme({\r\n palette: {\r\n primary: {main: '#c00'},\r\n secondary: {\r\n main: '#f5f5f5',\r\n contrastText: '#645757',\r\n },\r\n background: {\r\n default: '#fff',\r\n paper: '#fff',\r\n },\r\n },\r\n typography: {\r\n fontFamily: 'MarkPro',\r\n },\r\n components: {\r\n MuiFormLabel: {\r\n styleOverrides: {\r\n root: {\r\n '&.Mui-focused': {\r\n color: '#645757',\r\n },\r\n },\r\n },\r\n },\r\n MuiPaginationItem: {\r\n styleOverrides: {\r\n rounded: {\r\n borderRadius: '0',\r\n },\r\n },\r\n },\r\n MuiTableCell: {\r\n styleOverrides: {\r\n head: {\r\n fontWeight: 'bold',\r\n },\r\n },\r\n },\r\n MuiButton: {\r\n styleOverrides: {\r\n root: {\r\n textTransform: 'none',\r\n boxShadow: 'none',\r\n borderRadius: '0',\r\n padding: '5px 15px',\r\n },\r\n contained: {\r\n boxShadow: 'none',\r\n border: `rgb(0, 0, 0, 0.25) 1px solid`,\r\n padding: '5px 15px',\r\n },\r\n outlinedSecondary: {\r\n boxShadow: 'none',\r\n color: '#c00',\r\n background: '#fff',\r\n border: `rgb(0, 0, 0, 0.25) 1px solid`,\r\n padding: '5px 15px',\r\n },\r\n },\r\n },\r\n MuiStepIcon: {\r\n styleOverrides: {\r\n root: {\r\n '&.Mui-active': {\r\n color: '#0f0f0f !important',\r\n },\r\n '&.Mui-completed': {\r\n color: 'rgba(0, 0, 0, 0.38) !important',\r\n },\r\n },\r\n },\r\n },\r\n MuiInput: {\r\n styleOverrides: {\r\n root: {\r\n borderRadius: 0,\r\n },\r\n },\r\n },\r\n MuiOutlinedInput: {\r\n styleOverrides: {\r\n root: {\r\n borderRadius: 0,\r\n },\r\n },\r\n },\r\n MuiCard: {\r\n styleOverrides: {\r\n root: {\r\n borderRadius: 0,\r\n boxShadow: 'none',\r\n },\r\n },\r\n },\r\n MuiCssBaseline: {\r\n styleOverrides: `\r\n @font-face {\r\n font-family: 'MarkPro';\r\n font-style: normal;\r\n font-display: swap;\r\n font-weight: 440;\r\n src: local('MarkPro/MarkW05-Regular.woff2'), local('MarkPro'), url(${MarkProRegularWoff2}) format('woff2');\r\n unicodeRange: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF;\r\n },\r\n @font-face {\r\n font-family: 'MarkPro';\r\n font-style: light;\r\n font-display: swap;\r\n font-weight: 340;\r\n src: local('MarkPro/MarkW05-Light.woff2'), local('MarkPro'), url(${MarkProLightWoff2}) format('woff2');\r\n unicodeRange: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF;\r\n },\r\n @font-face {\r\n font-family: 'MarkPro';\r\n font-style: bold;\r\n font-display: swap;\r\n font-weight: 630;\r\n src: local('MarkPro/MarkW05-Bold.woff2'), local('MarkPro'), url(${MarkProBoldWoff2}) format('woff2');\r\n unicodeRange: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF;\r\n }, \r\n `,\r\n },\r\n },\r\n})\r\n\r\nexport default theme","import React, {useContext, useMemo} from 'react';\r\nimport {Link, List, ListItem, Typography} from \"@mui/material\";\r\nimport {OrgCustomizationContext} from \"../../OrgCustomizationProvider\";\r\nimport {Trans} from \"react-i18next\";\r\n\r\nconst ThirdPartyProductError = () => {\r\n const {t, tns, language} = useContext(OrgCustomizationContext);\r\n const pearlHref = useMemo(() => {\r\n switch (language) {\r\n case 'en':\r\n return 'pearl_en.pdf'\r\n default:\r\n return 'pearl_en.pdf'\r\n }\r\n }, [language])\r\n const creosHref = useMemo(() => {\r\n switch (language) {\r\n case 'en':\r\n return 'creos_en.pdf'\r\n case 'fr':\r\n return 'creos_fr.pdf'\r\n default:\r\n return 'creos_en.pdf'\r\n }\r\n }, [language])\r\n const otherHref = useMemo(() => {\r\n switch (language) {\r\n case 'en':\r\n return 'other_en.pdf'\r\n default:\r\n return 'other_en.pdf'\r\n }\r\n }, [language])\r\n\r\n return (\r\n <>\r\n \r\n {t('third_party_exception_p1')}\r\n \r\n\r\n \r\n \r\n \r\n -\r\n \r\n -\r\n \r\n -\r\n \r\n \r\n\r\n \r\n \r\n -\r\n \r\n -\r\n \r\n -\r\n \r\n \r\n\r\n \r\n \r\n -\r\n \r\n -\r\n \r\n -\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default ThirdPartyProductError\r\n","import {OrgCustomizedConfiguration} from '../OrgCustomizedConfiguration';\r\nimport ProductLabelImg from './images/product-label-example.png'\r\nimport MouthDiagramImg from './images/mouth-diagram.svg'\r\nimport IconImg from './images/nobel_icon.png'\r\nimport translations from '../../../localization/build/nobel.json'\r\nimport Theme from \"./Theme\";\r\nimport ThirdPartyProductError from \"./ThirdPartyProductError\";\r\n\r\nconst configuration: OrgCustomizedConfiguration = {\r\n OrgIdentifier: 'Nobel',\r\n OrgName: 'Nobel Biocare',\r\n HostsConfiguration: {\r\n 'nobelcomplaints.dev.platform.dental': {\r\n StoreUrl: 'https://nobi-mg2.dev.platform.dental',\r\n IsDevelopmentEnvironment: true,\r\n Environment: \"Development\"\r\n },\r\n 'nobelcomplaints.sta.platform.dental': {\r\n StoreUrl: 'https://nobi-mg2.sta.platform.dental',\r\n IsDevelopmentEnvironment: true,\r\n Environment: \"Staging\",\r\n GoogleAnalytics: {\r\n Id: 'GTM-P8QT3949',\r\n Options: {\r\n gtm_auth: 'LRfAHcJVnfLqv0OaKp6Cog',\r\n gtm_preview: 'env-3',\r\n gtm_cookies_win: 'x'\r\n }\r\n }\r\n },\r\n 'nobelcomplaints.nobelbiocare.com': {\r\n StoreUrl: 'https://store.nobelbiocare.com',\r\n IsDevelopmentEnvironment: false,\r\n Environment: \"Production\",\r\n GoogleAnalytics: {\r\n Id: 'GTM-P8QT3949',\r\n }\r\n },\r\n 'localhost': {\r\n StoreUrl: 'https://nobi-mg2.dev.platform.dental',\r\n IsDevelopmentEnvironment: true,\r\n Environment: \"Local\",\r\n }\r\n },\r\n IconImage: IconImg,\r\n MuiTheme: Theme,\r\n ImageMap: {\r\n ProductLabel: {\r\n src: ProductLabelImg,\r\n style: {\r\n marginTop: 'auto',\r\n alignSelf: 'center',\r\n },\r\n sx: {\r\n width: {xs: 290, sm: 320},\r\n height: {xs: 308, sm: 340},\r\n mt: {md: 5},\r\n }\r\n },\r\n MouthDiagram: {\r\n src: MouthDiagramImg,\r\n }\r\n },\r\n Translations: translations,\r\n SupportedLanguages: new Set(['en', 'zh', 'de', 'es', 'fr', 'it', 'ja', 'pt', 'ru']),\r\n QuestionConfigurations: {\r\n patient_weight: {\r\n show: false,\r\n required: false\r\n },\r\n browse_for_photos: {\r\n show: true,\r\n required: true\r\n }\r\n },\r\n ItemSearchConfiguration: {\r\n useItemDescriptionSearch: (s) => /\\D/.test(s) && s.length >= 3,\r\n useItemIdSearch: (s) => !/\\D/.test(s) && s.length >= 4,\r\n useActiveProductSearch: (s) => s.length >= 3\r\n },\r\n GuestCountryWhitelist: [\r\n { countryCode: \"az\", languageCode: \"en\" },\r\n { countryCode: \"cl\", languageCode: \"es\" },\r\n { countryCode: \"cn\", languageCode: \"zh\" },\r\n { countryCode: \"cr\", languageCode: \"es\" },\r\n { countryCode: \"hr\", languageCode: \"hr\" },\r\n { countryCode: \"cz\", languageCode: \"cs\" },\r\n { countryCode: \"eg\", languageCode: \"ar\" },\r\n { countryCode: \"ee\", languageCode: \"et\" },\r\n { countryCode: \"gr\", languageCode: \"el\" },\r\n { countryCode: \"iq\", languageCode: \"ar\" },\r\n { countryCode: \"il\", languageCode: \"he\" },\r\n { countryCode: \"jo\", languageCode: \"ar\" },\r\n { countryCode: \"jp\", languageCode: \"ja\" },\r\n { countryCode: \"kw\", languageCode: \"ar\" },\r\n { countryCode: \"lv\", languageCode: \"lv\" },\r\n { countryCode: \"lb\", languageCode: \"ar\" },\r\n { countryCode: \"lt\", languageCode: \"lt\" },\r\n { countryCode: \"om\", languageCode: \"ar\" },\r\n { countryCode: \"pl\", languageCode: \"pl\" },\r\n { countryCode: \"qa\", languageCode: \"ar\" },\r\n { countryCode: \"ro\", languageCode: \"ro\" },\r\n { countryCode: \"sa\", languageCode: \"ar\" },\r\n { countryCode: \"sg\", languageCode: \"en\" },\r\n { countryCode: \"za\", languageCode: \"en\" },\r\n { countryCode: \"tw\", languageCode: \"zh\" },\r\n { countryCode: \"tr\", languageCode: \"tr\" },\r\n { countryCode: \"ua\", languageCode: \"uk\" },\r\n { countryCode: \"ae\", languageCode: \"ar\" },\r\n { countryCode: \"pr\", languageCode: \"es\" },\r\n ],\r\n ThirdPartyErrorComponent: ThirdPartyProductError\r\n}\r\n\r\nexport default configuration\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACslBMVEXPAAAAAAD/AADRAADOAADLAADNAADQAADZAABLAADTAADWAAC/AADSAAC3AACBAAB4AADMAADKAADUAADEAADjAADiAABxAADJAAC+AADsAADvAADDAACyAADTAADTAADSAADQAADQAADQAADRAADTAADSAADTAADSAADOAADNAADNAADOAADQAADOAADPAADOAADNAADPAADSAADTAADOAADQAADOAADNAADOAADSAADMAADNAADNAADOAADRAADPAADOAADPAADPAADPAADPAADOAADNAADPAADRAADPAADSAADSAADSAADTAADRAADOAADSAADPAADNAADQAADRAADQAADSAADPAADOAADQAADXAADRAADOAADPAADQAADNAADPAADPAADOAADQAADQAADPAADOAADQAADPAADQAADOAADPAADJAADQAADRAADQAADNAADKAADNAADOAADQAADSAADPAADOAADMAADQAADQAADOAADOAADQAADMAADMAADOAADQAADPAADNAADMAADLAADOAADOAADQAADPAADOAADQAADOAADPAADMAADQAADOAADNAADPAADNAADNAADPAADTAADSAADQAADPAADOAADRAADQAADOAADPAADRAADQAADOAADNAADQAADPAADOAADQAADQAADOAADOAADQAADOAADNAADNAADRAADpAADbAADUAADQAADNAADNAADPAADSAADQAADQAADQAADQAADHAADTAADPAADNAADOAADOAADPAADPAADOAADNAADOAADJAADPAADTAADNAADQAADOAADTAADPAADOAADOAADPAADJAADVAADRAADOAADOAADOAADQAADSAADSAADSAADSAADSAADDAADQAADRAADSAADSAADMAADNAAD///91EAu5AAAA43RSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsc3dmLAIOZnhoFPr9+9xaASzo/uo9d+I5L+zuQP75+rgVLeqpTU5QduGBAw5fcG9vd9puXPNJBKoHkckfBBvClEDmW3LWKw6npw0BKdRuCHU8VfARz8UbBYm5zQYXvHQ6nczYLmv4nAOPrhALoB7HeQIk0ptH6+lGNzgDf8gfFLeYCDjh9WJs3TQMpbQT1fwDdgEDAlny7VEEq6emqQUGkuOahYWGjODEDB14xEfpaezv87IKAljK6/DbNhVERSsBGDo5CeKRmEUAAAABYktHROVYZQu/AAAAB3RJTUUH4wYEEQkkrAM3pAAAAjRJREFUOMt1k/VfU1EUwO999+0dHEx9w8DERB06nYoiTDGmYqDCVLC7ULE7EMUWu7u7ZouNndiFffhDPHtsQ9943x/P5/tO3seqR9bwU7NWbcYJSdSpG6VFourVZ5ENbH6iGzayy15BbtzEoUUcTZux5jYsJqaFMJGgtIz1BVrFaUK8k2gdT4E2CcB5iNy2XSFRLLTv4HK5OnbqjGhL7MJ4KdG1W/ekHj17+YXCZDNVNoWkuBFjezPBNUx9+gaEpNAwikBqGiXt1x+KBDZAL3AYOIiMwanCSGAwZCiiexiTDQQu24c7EUeMtJQ2EDgbNZqKjBnLgoUyZccpCucifTyic4IEQYI6MWOS2cqBTZ7iXSgoekGZOm36DPoOZs5yIM5OAClImINpc6k2zJtPC13AwksQ3CnhVm4SC2MQMyVLkLAIMWsxUBvSkmxcKukzqMuW04ArVlIb8qrVlEEvcFiTgxi9dh3NCus3bDQLvWBhmzYjbtkqynG1/LbtFcKCNinv2ElPY9du3zFLWDXs2Utt7NtveG4VDhxEPHTYanhuUfFINuLRYyLC6Nxw/AQVOXkK9EJyaKWiupB+GvFM4llFJ5w77/F4LlSuwmW4eAnx8pWq9KbUq9cCzz7rem7ujYybKrVx6zYVuXP3Xt79vAcPA4LGo8eUuBo8yfnnT/MKT/3CM6/AI8TzF/8LL1/la7x+81bRZn33/sPHfB+fPn9hX+MKNL59/6GNzxX7z18Ffn7/+QsOg4EO8jkkJQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxOS0wNi0wNFQxNzowOTozNiswMjowMMbAbC0AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTktMDYtMDRUMTc6MDk6MzYrMDI6MDC3ndSRAAAAV3pUWHRSYXcgcHJvZmlsZSB0eXBlIGlwdGMAAHic4/IMCHFWKCjKT8vMSeVSAAMjCy5jCxMjE0uTFAMTIESANMNkAyOzVCDL2NTIxMzEHMQHy4BIoEouAOoXEXTyQjWVAAAAAElFTkSuQmCC\"","import de from 'date-fns/locale/de'\r\nimport deAT from 'date-fns/locale/de-AT'\r\nimport enAU from 'date-fns/locale/en-AU'\r\nimport enCA from 'date-fns/locale/en-CA'\r\nimport enGB from 'date-fns/locale/en-GB'\r\nimport enIE from 'date-fns/locale/en-IE'\r\nimport enIN from 'date-fns/locale/en-IN'\r\nimport enNZ from 'date-fns/locale/en-NZ'\r\nimport enUS from 'date-fns/locale/en-US'\r\nimport es from 'date-fns/locale/es'\r\nimport fr from 'date-fns/locale/fr'\r\nimport frCA from 'date-fns/locale/fr'\r\nimport frCH from 'date-fns/locale/fr-CH'\r\nimport it from 'date-fns/locale/it'\r\nimport ja from 'date-fns/locale/ja'\r\nimport pt from 'date-fns/locale/pt'\r\nimport ru from 'date-fns/locale/ru'\r\nimport querystring from 'query-string'\r\n\r\nexport const supportedLocales = [\r\n { code: 'de-at', file: deAT },\r\n { code: 'de-ch', file: de },\r\n { code: 'de-de', file: de },\r\n { code: 'en-au', file: enAU },\r\n { code: 'en-be', file: enGB },\r\n { code: 'en-ca', file: enCA },\r\n { code: 'en-dk', file: enGB },\r\n { code: 'en-fi', file: enUS },\r\n { code: 'en-hk', file: enGB },\r\n { code: 'en-hu', file: enGB },\r\n { code: 'en-ie', file: enIE },\r\n { code: 'en-in', file: enIN },\r\n { code: 'en-nl', file: enGB },\r\n { code: 'en-no', file: enGB },\r\n { code: 'en-nz', file: enNZ },\r\n { code: 'en-se', file: enGB },\r\n { code: 'en-uk', file: enGB },\r\n { code: 'en-us', file: enUS },\r\n { code: 'es-es', file: es },\r\n { code: 'es-mx', file: es },\r\n { code: 'fr-be', file: fr },\r\n { code: 'fr-ca', file: frCA },\r\n { code: 'fr-ch', file: frCH },\r\n { code: 'fr-fr', file: fr },\r\n { code: 'it-ch', file: it },\r\n { code: 'it-it', file: it },\r\n { code: 'ja-jp', file: ja },\r\n { code: 'pt-pt', file: pt },\r\n { code: 'ru-ru', file: ru },\r\n]\r\n\r\nexport const getLocale = () => {\r\n const localeArray = supportedLocales.map((localeObj) => localeObj.code)\r\n return navigator.languages.find((l) =>\r\n localeArray.includes(l.toLowerCase())\r\n )\r\n}\r\n\r\nexport const getLocaleFile = () => {\r\n const locale = getLocale()\r\n return supportedLocales.find((l) => {\r\n return l.code === locale?.toLowerCase()\r\n })?.file\r\n}\r\n\r\nexport const getSearchParamsLocale = ()=> querystring.parse(window.location.search)['lang'] as string | undefined\r\n\r\nexport const getSearchParamsCountryCode = () => getSearchParamsLocale()?.split('-')[1]\r\n\r\nexport const getSearchParamsLanguage = () => getSearchParamsLocale()?.split('-')[0]\r\n","import ImdiConfiguration from '../orgs/imdi'\r\nimport NobelConfiguration from '../orgs/nobel'\r\nimport {OrgCustomizedConfiguration} from \"../orgs/OrgCustomizedConfiguration\";\r\nimport i18n from \"i18next\";\r\nimport {initReactI18next} from \"react-i18next\";\r\nimport {getSearchParamsLanguage} from \"../../lib/locale-helpers\";\r\n\r\n/** Add new business organizations to the array below */\r\nexport const configurations: Record = {\r\n [ImdiConfiguration.OrgIdentifier]: ImdiConfiguration,\r\n [NobelConfiguration.OrgIdentifier]: NobelConfiguration\r\n}\r\n\r\n\r\nconst translations: Record>> = {}\r\n\r\nfor (const org in configurations) {\r\n const ns = configurations[org].OrgIdentifier\r\n\r\n for (const lang in configurations[org].Translations) {\r\n if (!translations[lang]) translations[lang] = {}\r\n if (!translations[lang][ns]) translations[lang][ns] = {}\r\n\r\n for (const key in configurations[org].Translations[lang]) {\r\n translations[lang][ns][key] = configurations[org].Translations[lang][key]\r\n }\r\n }\r\n}\r\n\r\ni18n.use(initReactI18next).init({\r\n resources: translations,\r\n lng: getSearchParamsLanguage() || navigator.language.split('-')[0],\r\n fallbackLng: 'en',\r\n interpolation: {escapeValue: false},\r\n}).then(() => initialLanguage = i18n.language)\r\n\r\nexport let initialLanguage = i18n.language\r\n\r\nconst _host = window.location.host.split(':')[0].toLowerCase()\r\n\r\nexport const defaultConfiguration: OrgCustomizedConfiguration = Object\r\n .values(configurations)\r\n .find(c => !!c.HostsConfiguration[_host]) || NobelConfiguration\r\n","import React, {useEffect, useState, useMemo} from \"react\";\r\nimport {StyledEngineProvider, Theme, ThemeProvider} from \"@mui/material/styles\"\r\nimport {\r\n Environment, GoogleAnalyticsConfiguration,\r\n ImageMap,\r\n ItemSearchConfiguration,\r\n OrgCustomizedConfiguration,\r\n QuestionsConfigurations\r\n} from '../orgs/OrgCustomizedConfiguration'\r\nimport {CssBaseline} from \"@mui/material\";\r\nimport {useTranslation} from 'react-i18next'\r\nimport {configurations, defaultConfiguration, initialLanguage} from \"./ConfigurationProvider\";\r\nimport http from \"../../http\";\r\nimport i18n from \"i18next\";\r\n\r\ndeclare module '@mui/styles/defaultTheme' {\r\n // eslint-disable-next-line @typescript-eslint/no-empty-interface\r\n interface DefaultTheme extends Theme {\r\n }\r\n}\r\n\r\nconst _host = window.location.host.split(':')[0].toLowerCase()\r\n\r\nconst _updateBrowserIconAndTitle = (businessName: string, image: string) => {\r\n document.title = `${businessName} Complaints`\r\n\r\n Array.from(document.querySelectorAll(\"link[rel~='icon']\")).forEach(el => el.remove())\r\n\r\n if (!document.querySelector(\"link[rel~='icon']\")) {\r\n const icon = document.createElement('link')\r\n icon.rel = 'icon'\r\n\r\n const apple = document.createElement('link')\r\n apple.rel = 'apple-touch-icon'\r\n\r\n icon.href = image\r\n apple.href = image\r\n\r\n document.head.appendChild(icon)\r\n document.head.appendChild(apple)\r\n }\r\n}\r\n\r\nconst _updateBusinessConfiguration = (c: OrgCustomizedConfiguration) => {\r\n _updateBrowserIconAndTitle(c.OrgName, c.IconImage)\r\n}\r\n\r\n_updateBusinessConfiguration(defaultConfiguration)\r\n\r\ntype OrgCustomizationContextState = {\r\n orgIdentifier: string\r\n orgName: string\r\n t: ((key: string, interpolation?: Record | undefined) => string)\r\n tns: (key: string) => string\r\n tGetParameter: (tkey: string, key: string) => string | undefined | null\r\n theme: Theme\r\n imageMap: ImageMap\r\n storeUrl: string\r\n questionsConfiguration: QuestionsConfigurations\r\n itemSearchConfiguration: ItemSearchConfiguration,\r\n isDevelopmentEnvironment: boolean,\r\n environment: Environment,\r\n googleAnalytics?: GoogleAnalyticsConfiguration,\r\n supportedLanguages: Set,\r\n language: string,\r\n changeLanguage: React.Dispatch\r\n guestCountryWhiteList: string[]\r\n countryLanguageMap: { [countryCode: string]: string }\r\n loadingOrgConfiguration: boolean\r\n ThirdPartyError: React.ComponentType\r\n}\r\n\r\nexport const OrgCustomizationContext = React.createContext({} as OrgCustomizationContextState)\r\n\r\nexport const OrgCustomizationProvider: React.FC = ({children}) => {\r\n const [configuration, setConfiguration] = useState(defaultConfiguration)\r\n const [t] = useTranslation()\r\n const [language, setLanguage] = useState(initialLanguage)\r\n const [loadingOrgConfiguration, setLoadingOrgConfiguration] = useState(true)\r\n const countryLanguageMap = useMemo(\r\n () =>\r\n Object.fromEntries(\r\n configuration.GuestCountryWhitelist.map((item) => [item.countryCode, item.languageCode])\r\n ),\r\n [configuration.GuestCountryWhitelist]\r\n )\r\n\r\n const countryWhitelist = useMemo(\r\n () => configuration.GuestCountryWhitelist.map((item) => item.countryCode),\r\n [configuration.GuestCountryWhitelist]\r\n )\r\n \r\n useEffect(() => {\r\n if (window.location.host.split(':')[0].toLowerCase() === 'localhost') {\r\n http.get<{ businessOrganization: string }>('/api/Development/BusinessOrganization')\r\n .then((r) => {\r\n const c = configurations[r.data.businessOrganization]\r\n setConfiguration(c)\r\n _updateBusinessConfiguration(c)\r\n setLoadingOrgConfiguration(false)\r\n })\r\n } else {\r\n setLoadingOrgConfiguration(false)\r\n }\r\n }, []);\r\n\r\n const tns = (key: string) => `${configuration.OrgIdentifier}:${key}`\r\n const nt = (key: string, interpolation?: Record) => t(tns(key), interpolation)\r\n\r\n return \r\n \r\n \r\n {\r\n const result = nt(tkey).match(new RegExp(`<${key}>(.*)`))\r\n\r\n return result ? result[1] : undefined\r\n },\r\n theme: configuration.MuiTheme,\r\n imageMap: configuration.ImageMap,\r\n questionsConfiguration: configuration.QuestionConfigurations,\r\n itemSearchConfiguration: configuration.ItemSearchConfiguration,\r\n supportedLanguages: configuration.SupportedLanguages,\r\n language,\r\n changeLanguage: (l) => {\r\n if (!configuration.SupportedLanguages.has(l.toLowerCase())) return\r\n i18n.changeLanguage(l.toLowerCase()).then(() => setLanguage(i18n.language))\r\n },\r\n guestCountryWhiteList: countryWhitelist,\r\n countryLanguageMap,\r\n loadingOrgConfiguration,\r\n ThirdPartyError: configuration.ThirdPartyErrorComponent\r\n }}/>\r\n \r\n \r\n}\r\n","import {useCallback, useContext, useMemo} from 'react'\r\nimport {OrgCustomizationContext} from \"../themes/OrgCustomizationProvider\";\r\nimport {AppContext} from \"../contexts/AppContextProvider\";\r\n\r\nconst useRedirect = () => {\r\n const {storeUrl, language} = useContext(OrgCustomizationContext)\r\n const {countryCode} = useContext(AppContext)\r\n const navigationCountryCode = useMemo(\r\n () => countryCode === 'int' || !countryCode ? 'international' : countryCode,\r\n [countryCode]\r\n )\r\n const registerUrl = useMemo(\r\n () => `${storeUrl}/${navigationCountryCode}/${language}/customer/account/create/`,\r\n [storeUrl, navigationCountryCode, language]\r\n )\r\n const loginUrl = useMemo(\r\n () => `${storeUrl}/${navigationCountryCode}/${language}/customer/account/login/`,\r\n [storeUrl, navigationCountryCode, language]\r\n )\r\n\r\n const redirect = useCallback((to: 'login' | 'register') => {\r\n switch (to) {\r\n case 'login':\r\n window.location.href = loginUrl\r\n break\r\n case 'register':\r\n window.location.href = registerUrl\r\n break\r\n }\r\n }, [loginUrl, registerUrl])\r\n\r\n return {redirect, registerUrl, loginUrl}\r\n}\r\n\r\nexport default useRedirect\r\n","import {CircularProgress, Typography} from '@mui/material'\r\nimport React, {useContext, useEffect, useState} from 'react'\r\nimport http from '../http'\r\nimport {AppContext} from '../contexts/AppContextProvider'\r\nimport {OrgCustomizationContext} from \"../themes/OrgCustomizationProvider\";\r\nimport useRedirect from \"../hooks/useRedirect\";\r\n\r\nexport type LoginResponse = { isLoggedIn: boolean, token: string }\r\n\r\nconst LoginCheck: React.FC = ({children}) => {\r\n const [valid, setValid] = useState(false)\r\n const {setLoggedIn} = useContext(AppContext);\r\n const {t, orgName} = useContext(OrgCustomizationContext)\r\n const {redirect} = useRedirect()\r\n\r\n useEffect(() => {\r\n http.get(`/api/login`)\r\n .then(({data}) => {\r\n if (data.isLoggedIn) {\r\n if (data.token) {\r\n http.defaults.headers['Authorization'] = 'Bearer ' + data.token\r\n localStorage.setItem('token', data.token)\r\n }\r\n\r\n setLoggedIn(true)\r\n setValid(true)\r\n } else {\r\n setLoggedIn(false)\r\n setValid(true)\r\n }\r\n })\r\n .catch((error) => {\r\n if (error?.response?.status === 401) redirect('login')\r\n else {\r\n setLoggedIn(false)\r\n setValid(true)\r\n }\r\n })\r\n\r\n }, [redirect, setLoggedIn])\r\n\r\n return valid\r\n ? <> {children} \r\n : \r\n \r\n {orgName} {t('gi_complaints')}\r\n \r\n\r\n \r\n\r\n

Loading...

\r\n \r\n}\r\n\r\nexport default LoginCheck\r\n","import {useContext} from \"react\"\r\nimport {AppContext} from \"../contexts/AppContextProvider\"\r\nimport http from \"../http\"\r\nimport EmailLogRequest from \"../types/interface/EmailLogRequest\"\r\nimport StackTrace from \"stacktrace-js\";\r\n\r\nconst useLogger = () => {\r\n\r\n const {complaint, customer, loggedIn} = useContext(AppContext)\r\n\r\n\r\n return {\r\n email: async (message: 'logged from Nature of Complaint' | 'logged from guest Form' | 'logged from Complaint Completion') => {\r\n if (loggedIn) {\r\n let body: EmailLogRequest = {\r\n email: customer.emailAddress || complaint.shippingInfo.customer?.emailAddress as string,\r\n customerNumber: customer.customer,\r\n userType: \"SSO\",\r\n message: message\r\n }\r\n\r\n await http.post('api/Client/LogEmail', body)\r\n } else {\r\n let body: EmailLogRequest = {\r\n email: customer.emailAddress || complaint.shippingInfo.customer?.emailAddress as string,\r\n customerNumber: complaint.guestInfo.customerNumber,\r\n userType: \"GuestUser\",\r\n message: message\r\n }\r\n\r\n await http.post('api/Client/LogEmail', body)\r\n }\r\n },\r\n error: async (\r\n err: Error,\r\n customerNumber: string = customer.customer || complaint.guestInfo.customerNumber || 'not available',\r\n email: string = customer.emailAddress || complaint.shippingInfo.customer?.emailAddress || 'not available'\r\n ) => {\r\n\r\n let stackTrace = ''\r\n let message = ''\r\n\r\n if (err) {\r\n const stack = await StackTrace.fromError(err)\r\n stackTrace = stack.map(s => s.toString()).join('\\n\\t\\t')\r\n message = err.message\r\n console.error(message, stack)\r\n }\r\n\r\n await http.post('api/Client/LogError', {\r\n customerNumber,\r\n email,\r\n message,\r\n stackTrace,\r\n })\r\n }\r\n }\r\n}\r\n\r\nexport default useLogger","import {CircularProgress, Typography} from '@mui/material'\r\nimport React, {useCallback, useContext, useLayoutEffect, useState} from 'react'\r\nimport {AppContext} from '../contexts/AppContextProvider'\r\nimport http from '../http'\r\nimport {CustomerData} from \"../contexts/types\";\r\nimport useLogger from '../hooks/useLogger'\r\nimport {OrgCustomizationContext} from \"../themes/OrgCustomizationProvider\";\r\nimport useRedirect from \"../hooks/useRedirect\";\r\nimport {getSearchParamsCountryCode} from \"../lib/locale-helpers\";\r\nimport {patchGuestInfo} from \"../contexts/GuestInfoReducer\";\r\n\r\ntype DataRetrievalProps = {\r\n shouldRetrieveData?: boolean\r\n}\r\n\r\nconst DataRetrieval: React.FC = ({children, shouldRetrieveData = true}) => {\r\n const {complaint, dispatch, loggedIn, customer, setCustomer, setAddresses} = useContext(AppContext)\r\n const {t, orgName} = useContext(OrgCustomizationContext)\r\n const {redirect} = useRedirect()\r\n const log = useLogger()\r\n const [valid, setValid] = useState(false)\r\n const {isDevelopmentEnvironment, changeLanguage} = useContext(OrgCustomizationContext)\r\n\r\n const handleRedirect = async (loggedIn: boolean) => {\r\n let message = ''\r\n let UserType = ''\r\n const token = localStorage.getItem('token')\r\n\r\n if (loggedIn) {\r\n UserType = 'SignedIn'\r\n message = `userInfo: ${JSON.stringify(customer)}, token: ${token}`\r\n } else {\r\n UserType = 'GuestUser'\r\n message = `userInfo: Not Available , token: ${token}`\r\n }\r\n\r\n await http.post('api/Client/LogRedirect', {\r\n href: window.location.href,\r\n UserType,\r\n message,\r\n Date: Date()\r\n }).then(() => {\r\n redirect('login')\r\n })\r\n }\r\n\r\n const collectCustomerInformation = useCallback(() => {\r\n setValid(false)\r\n\r\n const hasSearchParams = window.location.search !== ''\r\n\r\n sessionStorage.removeItem('email')\r\n\r\n if (shouldRetrieveData && loggedIn) {\r\n http.get(`/api/Customer`)\r\n .then(({data}) => {\r\n setCustomer(data.customerDetails)\r\n changeLanguage(data.customerDetails.language || 'en')\r\n document.cookie = `X-User-Id=${data.customerDetails.customer}; path=/; SameSite=Strict`;\r\n document.cookie = `X-User-Email=${data.customerDetails.emailAddress}; path=/; SameSite=Strict`;\r\n\r\n data.customerDetails.country !== '' && dispatch(patchGuestInfo.country(getSearchParamsCountryCode() || ''))\r\n data.customerDetails.emailAddress && sessionStorage.setItem('email', data.customerDetails.emailAddress)\r\n\r\n if (!isDevelopmentEnvironment && data.partnerAddress === null) {\r\n throw new Error(`\r\n Partner address doesn't exist.\r\n The Complaints Application may behave unexpectedly.\r\n `)\r\n } else if (isDevelopmentEnvironment && data.partnerAddress === null) {\r\n return setValid(true)\r\n } else {\r\n setAddresses(data.partnerAddress)\r\n setValid(true)\r\n }\r\n })\r\n .catch((error) => log.error(error))\r\n } else if (shouldRetrieveData && !loggedIn) {\r\n if (!hasSearchParams) {\r\n handleRedirect(loggedIn)\r\n } else {\r\n if (!complaint.guestInfo.country) dispatch(patchGuestInfo.country(getSearchParamsCountryCode() || ''))\r\n setValid(true)\r\n }\r\n }\r\n }, [])\r\n\r\n useLayoutEffect(() => {\r\n collectCustomerInformation()\r\n }, [])\r\n\r\n return valid\r\n ? <>{children}\r\n : \r\n \r\n {orgName} {t('gi_complaints')}\r\n \r\n\r\n \r\n\r\n

Loading...

\r\n \r\n}\r\n\r\nexport default DataRetrieval\r\n","import {useCallback, useContext} from 'react'\r\nimport {useLocation, useNavigate} from 'react-router-dom'\r\nimport {AppContext} from '../contexts/AppContextProvider'\r\nimport {NavigateOptions} from \"react-router/lib/hooks\";\r\nimport {ComplaintState} from \"../contexts/types\";\r\n\r\nexport const screenPaths = {\r\n guestForm: '/guestform',\r\n natureOfComplaint: '/',\r\n natureOfComplaintGuest: '/guest',\r\n productSearch: '/productsearch',\r\n productType: '/producttype',\r\n eventOccurrence: '/eventoccurrence',\r\n treatmentDates: '/treatmentdates',\r\n patientInfo: '/patientinfo',\r\n complaintType: '/complainttype',\r\n clinicalCondition: '/clinicalcondition',\r\n abutmentsInformation: '/abutmentsinformation',\r\n instrumentInformation: '/instrumentinformation',\r\n secondaryDevice: '/secondarydevice',\r\n availableToReturn: '/availabletoreturn',\r\n shippingInfo: '/shippinginfo',\r\n complaintCompletion: '/complaintcompletion',\r\n} as const\r\n\r\ntype ScreenName = keyof typeof screenPaths\r\ntype ScreenPaths = Record\r\ntype ScreenConditions = Record boolean>\r\ntype ScreenEntry = [ScreenName, string]\r\ntype ScreenEntries = ScreenEntry[]\r\n\r\nexport const screenConditions: ScreenConditions = {\r\n guestForm: ({metadata: {complaintWithCustomerData}}) => !complaintWithCustomerData,\r\n natureOfComplaint: ({metadata: {isInitialComplaint}}, loggedIn) => loggedIn && isInitialComplaint,\r\n natureOfComplaintGuest: ({metadata: {isInitialComplaint}}, loggedIn) => !loggedIn && isInitialComplaint,\r\n productSearch: ({metadata: {complaintOnSecondaryDevice}}) => !complaintOnSecondaryDevice,\r\n productType: () => true,\r\n eventOccurrence: ({metadata: {complaintOnSecondaryDevice}}) => !complaintOnSecondaryDevice,\r\n treatmentDates: (c) => (c.generalComplaint.wasProductPlaced === 'YES' || c.complaintType.location === '5_CLINIC_AFTER_PROCEDURE')\r\n && !c.metadata.complaintWithPatientAndTreatmentData,\r\n patientInfo: (c) => c.generalComplaint.wasPatientInvolved === 'YES'\r\n && !c.metadata.complaintWithPatientAndTreatmentData,\r\n complaintType: () => true,\r\n clinicalCondition: (c) => c.generalComplaint.wasPatientInvolved === 'YES',\r\n abutmentsInformation: (c) => c.generalComplaint.productType === 'ABUTMENT' && !c.metadata.complaintOnSecondaryDevice,\r\n instrumentInformation: ({generalComplaint: {productType}}) => productType === 'LAB_INSTRUMENT_LAB_SCREW' || productType === 'CLINICAL_INSTRUMENT',\r\n secondaryDevice: ({metadata: {complaintOnSecondaryDevice}}) => !complaintOnSecondaryDevice,\r\n availableToReturn: () => true,\r\n shippingInfo: () => true,\r\n complaintCompletion: () => true,\r\n}\r\n\r\nconst useScreenFlow = () => {\r\n const location = useLocation()\r\n const navigate = useNavigate()\r\n const {complaint, loggedIn} = useContext(AppContext)\r\n\r\n const makeEntriesArrayFromScreenPaths = useCallback((screenPaths: ScreenPaths): ScreenEntries => Object.entries(screenPaths) as ScreenEntries, [])\r\n const testEntryCondition = useCallback((entry: ScreenEntry) => screenConditions[entry[0]](complaint, loggedIn), [complaint, loggedIn])\r\n const getAdjustedArray = useCallback((entriesArray: ScreenEntries): ScreenEntries => [...entriesArray].filter(testEntryCondition), [testEntryCondition])\r\n const getProgressRate = useCallback((numberOfScreens: number): number => 100 / (numberOfScreens - 1), [])\r\n const getScreenIndex = useCallback((entriesArray: ScreenEntries, pathname: string): number => entriesArray.findIndex((entry) => entry[1] === pathname), [])\r\n\r\n const calculateProgress = useCallback((): number => {\r\n const entriesArray: ScreenEntries = makeEntriesArrayFromScreenPaths(screenPaths)\r\n const adjustedArray = getAdjustedArray(entriesArray)\r\n const numberOfScreens = adjustedArray.length\r\n const progressRate = getProgressRate(numberOfScreens)\r\n const screenIndex = getScreenIndex(adjustedArray, location.pathname)\r\n\r\n return screenIndex * progressRate\r\n }, [getAdjustedArray, getProgressRate, getScreenIndex, location.pathname, makeEntriesArrayFromScreenPaths])\r\n\r\n const getNextActivePath = useCallback((entriesArray: ScreenEntries, currentScreenIndex: number, direction: 'forward' | 'backward'): string => {\r\n let isConditionMet = false\r\n let i = 0\r\n let entryIndex = currentScreenIndex\r\n let entry = entriesArray[entryIndex]\r\n\r\n while (!isConditionMet) {\r\n i++\r\n\r\n entryIndex = direction === 'forward'\r\n ? currentScreenIndex + i\r\n : currentScreenIndex - i\r\n\r\n entry = entriesArray[entryIndex]\r\n\r\n isConditionMet = testEntryCondition(entry)\r\n }\r\n\r\n return entry[1]\r\n }, [testEntryCondition])\r\n\r\n const navigateToScreen = useCallback((direction: 'forward' | 'backward') => {\r\n const entriesArray = makeEntriesArrayFromScreenPaths(screenPaths)\r\n const currentScreenIndex = getScreenIndex(entriesArray, location.pathname)\r\n const nextScreenPath = getNextActivePath(entriesArray, currentScreenIndex, direction)\r\n const history = JSON.parse(sessionStorage.getItem('history') || '[\"/\"]')\r\n\r\n if (direction === 'forward') history.push(nextScreenPath)\r\n else history.pop()\r\n\r\n navigate(nextScreenPath)\r\n\r\n sessionStorage.setItem('currentPage', nextScreenPath)\r\n sessionStorage.setItem('history', JSON.stringify(history))\r\n }, [makeEntriesArrayFromScreenPaths, getScreenIndex, getNextActivePath, navigate, location.pathname])\r\n\r\n const navigateForward = useCallback(() => navigateToScreen('forward'), [navigateToScreen])\r\n const navigateBackward = useCallback(() => navigateToScreen('backward'), [navigateToScreen])\r\n const navigateTo = useCallback((pathname: string, params?: NavigateOptions) => {\r\n if (params?.replace) {\r\n navigate(pathname, params)\r\n sessionStorage.setItem('history', `[\"${pathname}\"]`)\r\n return\r\n }\r\n\r\n navigate(pathname)\r\n const history = JSON.parse(sessionStorage.getItem('history') || '[\"/\"]')\r\n history.push(pathname)\r\n sessionStorage.setItem('history', JSON.stringify(history))\r\n }, [navigate])\r\n\r\n return {\r\n screenPaths,\r\n calculateProgress,\r\n navigateForward,\r\n navigateBackward,\r\n navigateTo,\r\n }\r\n}\r\n\r\nexport default useScreenFlow\r\n","import {\r\n Box,\r\n Button,\r\n Grid,\r\n Link,\r\n Typography,\r\n} from '@mui/material'\r\nimport useScreenFlow from '../../hooks/useScreenFlow'\r\nimport {useContext} from \"react\";\r\nimport {OrgCustomizationContext} from \"../../themes/OrgCustomizationProvider\";\r\nimport useRedirect from \"../../hooks/useRedirect\";\r\n\r\nconst AuthSelection: React.FC = () => {\r\n const {navigateTo} = useScreenFlow()\r\n const {t, theme} = useContext(OrgCustomizationContext)\r\n const style = {color: theme.palette.primary.main}\r\n const {loginUrl, registerUrl} = useRedirect()\r\n\r\n const head = t('gi_existing_customer')\r\n const content = t('gi_login_for_prefill')//'Login and we will pre-fill the customer information section of the form.'\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {head}\r\n \r\n \r\n {content}\r\n \r\n\r\n \r\n {/* */}\r\n \r\n\r\n\r\n \r\n \r\n {t('gi_login')}\r\n \r\n \r\n\r\n \r\n navigateTo('/guestform')}\r\n color='secondary'\r\n fullWidth\r\n >\r\n {t('gi_proceed_as_guest')}\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n {t('gi_new_user')}\r\n \r\n\r\n \r\n )\r\n}\r\n\r\nexport default AuthSelection;\r\n","import makeStyles from '@mui/styles/makeStyles';\r\nimport React from 'react'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n controlContainer: {\r\n display: 'flex',\r\n flexDirection: 'row-reverse',\r\n gap: theme.spacing(1),\r\n marginTop: 60\r\n }\r\n}))\r\n\r\nconst ControlContainer: React.FC = ({ children }) => {\r\n const classes = useStyles()\r\n\r\n\r\n return
\r\n {children}\r\n
\r\n}\r\n\r\nexport default ControlContainer\r\n","import React, { ChangeEvent, useState } from 'react'\r\n\r\nexport type isValidFn = (value: unknown, data: T) => boolean\r\n\r\nexport type requireValueFn = (\r\n value: string | boolean | number | object,\r\n data: T\r\n) => boolean\r\n\r\n// type requirementCondition = (value: string, data: T) => boolean\r\ninterface Validation {\r\n required?: {\r\n value: boolean | requireValueFn\r\n message: string\r\n }\r\n pattern?: {\r\n value: string\r\n message: string\r\n }\r\n custom?: {\r\n isValid: isValidFn\r\n message: string\r\n }\r\n}\r\n\r\ntype Validations = Partial>>\r\ninterface ChangeWatcher {\r\n setValue: (prevState: T, currentState: T, newState: T) => T\r\n}\r\n\r\ntype ChangeWatchers = Partial>>\r\n\r\nexport type ErrorRecord = Partial>\r\n\r\ntype PartialRecord = Partial>\r\n\r\nexport const useForm = = {}>(options?: {\r\n validations?: Validations\r\n initialValues?: Partial\r\n changeWatchers?: ChangeWatchers\r\n onFormSubmit?: (isFormValid: boolean) => void\r\n}) => {\r\n const [data, setData] = useState((options?.initialValues || {}) as T)\r\n const [errors, setErrors] = useState>({})\r\n const [shouldValidate, setShouldValidate] = useState(false)\r\n \r\n const handleChangeEvent =\r\n (key: keyof T, sanitizeFn?: (value: string) => S) =>\r\n (\r\n e: ChangeEvent<\r\n HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement\r\n >\r\n ) => {\r\n handleChange(key, e.target.value, sanitizeFn)\r\n }\r\n\r\n const handleChange = (\r\n key: keyof T,\r\n targetValue: string | boolean | Date | object | File,\r\n sanitizeFn?: (value: string) => S\r\n ) => {\r\n let value: string | boolean | Date | object\r\n\r\n if (typeof targetValue === 'string') {\r\n value = sanitizeFn\r\n ? (sanitizeFn(targetValue) as string)\r\n : targetValue\r\n } else {\r\n value = targetValue\r\n }\r\n\r\n let newData: T = {\r\n ...data,\r\n [key]: value,\r\n }\r\n setData((prevState) => {\r\n newData = triggerWatchers(prevState, data, newData)\r\n\r\n return newData\r\n })\r\n\r\n if (shouldValidate) {\r\n validateFields(newData)\r\n }\r\n }\r\n\r\n const triggerWatchers = (prevState: T, data: T, newData: T): T => {\r\n const watchers = options?.changeWatchers\r\n let hijackedData = { ...newData } as T\r\n\r\n if (watchers) {\r\n for (const key in watchers) {\r\n const watcher = watchers[key]\r\n\r\n if (watcher?.setValue) {\r\n hijackedData = watcher.setValue(prevState, data, newData)\r\n }\r\n }\r\n }\r\n\r\n return hijackedData\r\n }\r\n\r\n const handleFormSubmit = (e: React.MouseEvent) => {\r\n e.preventDefault()\r\n\r\n const valid = validateFields(data)\r\n\r\n if (options?.onFormSubmit) {\r\n options.onFormSubmit(valid)\r\n }\r\n }\r\n\r\n const enableOnChangeValidation = (shouldEnableValidation: boolean) => {\r\n setShouldValidate(shouldEnableValidation)\r\n }\r\n\r\n const validateFields = (data: T): boolean => {\r\n const validations = options?.validations\r\n let valid = true\r\n\r\n if (validations) {\r\n const newErrors: ErrorRecord = {}\r\n\r\n for (const key in validations) {\r\n const value = data[key]\r\n const validation = validations[key]\r\n const isValueBoolean = typeof validation?.required?.value === 'boolean'\r\n\r\n if (isValueBoolean) {\r\n if (validation?.required?.value && !value) {\r\n valid = false\r\n newErrors[key] = validation?.required?.message\r\n }\r\n } else {\r\n const required = validation?.required\r\n if (required?.value) {\r\n if (typeof required?.value === 'function') {\r\n if (!required.value(value, data)) {\r\n valid = false\r\n newErrors[key] = required.message\r\n }\r\n }\r\n }\r\n }\r\n\r\n const pattern = validation?.pattern\r\n if (pattern?.value && !RegExp(pattern.value).test(value)) {\r\n valid = false\r\n newErrors[key] = pattern.message\r\n }\r\n\r\n const custom = validation?.custom\r\n if (custom?.isValid && !custom.isValid(value, data)) {\r\n valid = false\r\n newErrors[key] = custom.message\r\n }\r\n }\r\n\r\n if (!valid) {\r\n setErrors(newErrors)\r\n return valid\r\n }\r\n }\r\n\r\n setErrors({})\r\n return valid\r\n }\r\n\r\n const setError = (\r\n key: Extract,\r\n errorMessage: string | undefined\r\n ) => {\r\n const newErrors: ErrorRecord = {}\r\n newErrors[key] = errorMessage\r\n setErrors(newErrors)\r\n }\r\n\r\n return {\r\n data,\r\n errors,\r\n handleChange,\r\n handleChangeEvent,\r\n handleFormSubmit,\r\n enableOnChangeValidation,\r\n validateFields,\r\n setError,\r\n setFormData: setData\r\n }\r\n}\r\n","import { useContext } from 'react'\r\nimport { AppContext } from '../contexts/AppContextProvider'\r\n\r\nconst useAddresses = () => {\r\n\r\n const { customer, addresses } = useContext(AppContext)\r\n\r\n const isDevEnv = () => {\r\n\r\n switch (window.location.origin) {\r\n\r\n case 'https://nobelcomplaints.nobelbiocare.com':\r\n\r\n //PROD\r\n return false\r\n\r\n case 'https://nobelcomplaints.sta.platform.dental':\r\n\r\n //STA\r\n return true\r\n\r\n case 'https://nobelcomplaints.dev.platform.dental':\r\n\r\n //DEV\r\n return true\r\n\r\n case 'https://localhost:5001':\r\n\r\n return true\r\n\r\n default:\r\n\r\n return false\r\n }\r\n }\r\n const getPrimaryAddress = () => {\r\n return addresses.filter((address) => {\r\n\r\n if( isDevEnv() ) {\r\n return true\r\n }\r\n else {\r\n return (\r\n address.partner === 'Ship-ToParty' &&\r\n address.customer === customer.shipToParty\r\n )\r\n }\r\n\r\n })[0]\r\n }\r\n\r\n return {\r\n getPrimaryAddress,\r\n }\r\n}\r\n\r\nexport default useAddresses\r\n","import React, {useContext} from 'react'\r\nimport {Box} from \"@mui/system\";\r\nimport {OrgCustomizationContext} from \"../themes/OrgCustomizationProvider\";\r\nimport {ImageKey} from \"../themes/orgs/OrgCustomizedConfiguration\";\r\n\r\ntype OrgMappedImageProps = { imageKey: ImageKey }\r\n\r\nconst OrgMappedImage: React.FC = ({imageKey}) => {\r\n const {imageMap} = useContext(OrgCustomizationContext)\r\n\r\n const configuration = imageMap[imageKey]\r\n\r\n if (!configuration) return null\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default OrgMappedImage\r\n","import React, {useContext} from 'react'\r\nimport {\r\n Button,\r\n Checkbox,\r\n FormControl,\r\n FormControlLabel,\r\n FormGroup,\r\n FormHelperText,\r\n FormLabel,\r\n Grid,\r\n TextField,\r\n Typography,\r\n} from '@mui/material'\r\nimport {Box} from '@mui/system'\r\nimport ControlContainer from '../ControlContainer'\r\nimport {AppContext} from '../../contexts/AppContextProvider'\r\nimport {GeneralInfoState} from '../../contexts/types'\r\nimport {useForm} from '../../hooks/useForm'\r\nimport useScreenFlow from '../../hooks/useScreenFlow'\r\nimport useAddresses from '../../hooks/useAddresses'\r\nimport useLogger from '../../hooks/useLogger'\r\nimport {OrgCustomizationContext} from \"../../themes/OrgCustomizationProvider\";\r\nimport OrgMappedImage from \"../OrgMappedImage\";\r\nimport {updateGeneralInfo} from \"../../contexts/GeneralInfoReducer\";\r\n\r\nconst NatureOfComplaint: React.FC = () => {\r\n const {navigateTo} = useScreenFlow()\r\n const {getPrimaryAddress} = useAddresses()\r\n const shippingAddress = getPrimaryAddress()\r\n const log = useLogger()\r\n const {customer, complaint, dispatch, loggedIn, postNotification, clearNotification} =\r\n useContext(AppContext)\r\n const {t} = useContext(OrgCustomizationContext)\r\n const generalInfo = complaint.generalInfo\r\n const {\r\n data,\r\n errors,\r\n handleChange,\r\n handleChangeEvent,\r\n validateFields,\r\n enableOnChangeValidation,\r\n } = useForm({\r\n initialValues: {\r\n ...complaint.generalInfo,\r\n contactName: !complaint.generalInfo.contactName\r\n ? customer.firstName + ' ' + customer.lastName\r\n : complaint.generalInfo.contactName,\r\n },\r\n validations: {\r\n isAcknowledged: {\r\n required: {\r\n value: true,\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n },\r\n })\r\n\r\n // This line determines which screen is loaded next\r\n const navigateToNextScreen = () => navigateTo('/productsearch')//navigateForward()\r\n\r\n const greetingName = generalInfo.contactName\r\n ? generalInfo.contactName\r\n : customer.firstName + ' ' + customer.lastName\r\n\r\n const handleSubmitForm = (e: React.FormEvent) => {\r\n e.preventDefault()\r\n\r\n // Activate field level validation tracking\r\n enableOnChangeValidation(true)\r\n\r\n // Validate the form fields\r\n const isFormValid = validateFields(data)\r\n\r\n // Stop processing if the form has invalid fields\r\n if (!isFormValid) {\r\n postNotification('error', t('error_mess'))\r\n return\r\n }\r\n\r\n // Form is valid, proceed with processing\r\n\r\n // Close the alert message in case it is open\r\n clearNotification()\r\n\r\n if (!data.contactName.trim()) {\r\n data.contactName = customer.firstName + ' ' + customer.lastName\r\n }\r\n\r\n dispatch(updateGeneralInfo({...data}))\r\n\r\n navigateToNextScreen()\r\n\r\n log.email('logged from Nature of Complaint')\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n \r\n \r\n \r\n {t('hello')} {greetingName},\r\n \r\n\r\n {loggedIn ?\r\n <>\r\n \r\n \r\n {customer.name1}\r\n
\r\n {shippingAddress.street}
\r\n {shippingAddress.city}
\r\n {shippingAddress.region && (\r\n <>\r\n {shippingAddress.region}
\r\n \r\n )}\r\n {shippingAddress.postalCode}
\r\n {shippingAddress.country}\r\n
\r\n\r\n \r\n\r\n \r\n \r\n {t('noc_not_name', {\r\n contactName: greetingName,\r\n })}\r\n \r\n \r\n \r\n \r\n : \r\n }\r\n \r\n {t('noc_nature_of_complaint')}\r\n \r\n
\r\n\r\n \r\n \r\n

{t('noc_paragraph_1')}

\r\n \r\n

{t('noc_paragraph_2')}

\r\n
\r\n

{t('noc_paragraph_3')}

\r\n
\r\n\r\n \r\n \r\n \r\n {\r\n handleChange(\r\n 'isAcknowledged',\r\n !data.isAcknowledged\r\n )\r\n }}\r\n />\r\n \r\n }\r\n label={t('noc_acknowledgement') as string}\r\n />\r\n \r\n {errors.isAcknowledged}\r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n {\r\n handleChange(\r\n 'isAcknowledged',\r\n !data.isAcknowledged\r\n )\r\n }}\r\n />\r\n \r\n }\r\n label={t('noc_acknowledgement') as string}\r\n />\r\n \r\n {errors.isAcknowledged}\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {t('continue')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default NatureOfComplaint\r\n","import Dexie, {Table} from 'dexie';\r\n\r\nexport type AttachmentTag = 'productComplaint' | 'xray'\r\n\r\nexport type Attachment = {\r\n id?: number,\r\n name: string,\r\n content: Blob,\r\n tag: AttachmentTag,\r\n}\r\n\r\nexport class MySubClassedDexie extends Dexie {\r\n // 'friends' is added by dexie when declaring the stores()\r\n // We just tell the typing system this is the case\r\n attachments!: Table;\r\n\r\n constructor() {\r\n super('myDatabase');\r\n this.version(1).stores({\r\n attachments: '++id, name, content, size'\r\n });\r\n }\r\n}\r\n\r\nexport const db = new MySubClassedDexie();\r\n\r\nexport const resetIndexedDb = async () => {\r\n const attachments = await db.attachments.toArray()\r\n await db.attachments.bulkDelete(attachments.map(a => a.id))\r\n}\r\n","import {Button, ButtonBaseProps, Modal} from '@mui/material'\r\nimport makeStyles from '@mui/styles/makeStyles'\r\nimport React, {useContext, useState} from 'react'\r\nimport {useNavigate} from 'react-router-dom'\r\nimport {AppContext} from '../contexts/AppContextProvider'\r\nimport {OrgCustomizationContext} from \"../themes/OrgCustomizationProvider\";\r\nimport useScreenFlow from \"../hooks/useScreenFlow\";\r\nimport {cancelComplaint} from \"../contexts/useComplaintReducer/RootReducerFactory\";\r\nimport {resetIndexedDb} from \"../lib/db\";\r\n\r\ntype NextButtonProps = ButtonBaseProps & {\r\n before?: () => void\r\n increments?: number\r\n}\r\n\r\ntype PreviousButtonProps = ButtonBaseProps & {\r\n screenpath?: string\r\n before?: () => void\r\n}\r\n\r\nexport const NextButton: React.FC = ({\r\n before,\r\n increments = 1,\r\n ...props\r\n}) => {\r\n const { t } = useContext(OrgCustomizationContext)\r\n\r\n const handleNextClick = () => {\r\n if (before) before()\r\n window.scrollTo(0, 0)\r\n }\r\n\r\n return (\r\n \r\n {t('continue')}\r\n \r\n )\r\n}\r\n\r\nexport const PreviousButton: React.FC = (props) => {\r\n const navigate = useNavigate()\r\n const {navigateBackward} = useScreenFlow()\r\n const { t } = useContext(OrgCustomizationContext)\r\n\r\n const history = JSON.parse(sessionStorage.getItem('history') || '[\"/\"]')\r\n \r\n if (history.length === 1) return null\r\n\r\n const handlePreviousClick = () => {\r\n props.before && props.before()\r\n !!props.screenpath ? navigate(props.screenpath) : navigateBackward()\r\n window.scrollTo(0, 0)\r\n }\r\n\r\n return (\r\n \r\n {t('previous')}\r\n \r\n )\r\n}\r\n\r\nexport const useStyles = makeStyles((theme) => ({\r\n divider: {\r\n margin: '30px 0',\r\n },\r\n totalSpan: {\r\n float: 'right',\r\n fontSize: '1.5rem',\r\n marginTop: '1rem',\r\n },\r\n totalP: {\r\n textAlign: 'right',\r\n display: 'block',\r\n size: '1.1rem',\r\n },\r\n summary: {\r\n display: 'grid',\r\n gridTemplateColumns: 'auto 50px 50px',\r\n },\r\n paper: {\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n width: 350,\r\n backgroundColor: theme.palette.background.paper,\r\n border: '2px solid #000',\r\n boxShadow: theme.shadows[5],\r\n padding: theme.spacing(2, 4, 3),\r\n },\r\n}))\r\n\r\nexport const CancelButton: React.FC = (props) => {\r\n const { dispatch } = useContext(AppContext)\r\n const [display, setDisplay] = useState(false)\r\n const {navigateTo} = useScreenFlow()\r\n const classes = useStyles()\r\n const { t } = useContext(OrgCustomizationContext)\r\n\r\n const handleCancel = async() => {\r\n await resetIndexedDb()\r\n dispatch(cancelComplaint())\r\n navigateTo('/', { replace: true })\r\n window.scrollTo(0, 0)\r\n }\r\n\r\n return (\r\n <>\r\n setDisplay(false)}\r\n aria-labelledby='cancel-modal-title'\r\n aria-describedby='cancel-modal-description'\r\n >\r\n
\r\n

{t('confirm_order_cancel')}

\r\n\r\n \r\n setDisplay(false)}\r\n >\r\n {t('no_do_not_cancel_order')}\r\n \r\n \r\n {t('yes_cancel_complaint')}\r\n \r\n
\r\n \r\n \r\n\r\n setDisplay(true)}\r\n >\r\n {t('cancel')}\r\n \r\n \r\n )\r\n}\r\n","import React, {useCallback, useContext, useMemo, useReducer, useState} from 'react'\r\nimport {\r\n Alert,\r\n Button, Checkbox,\r\n CircularProgress, FormControl, FormControlLabel, FormGroup,\r\n Grid,\r\n Pagination,\r\n Paper,\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableContainer,\r\n TableHead,\r\n TableRow,\r\n TextField,\r\n Theme,\r\n Typography,\r\n} from '@mui/material'\r\nimport createStyles from '@mui/styles/createStyles'\r\nimport makeStyles from '@mui/styles/makeStyles'\r\nimport withStyles from '@mui/styles/withStyles'\r\nimport axios, {AxiosResponse, CancelTokenSource} from \"axios\";\r\nimport {debounce} from \"lodash\";\r\nimport {Product} from \"../../contexts/types\";\r\nimport {AppContext} from \"../../contexts/AppContextProvider\";\r\nimport {OrgCustomizationContext} from \"../../themes/OrgCustomizationProvider\";\r\nimport http from \"../../http\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n table: {\r\n width: '100%',\r\n },\r\n pagination: {\r\n marginTop: '20px',\r\n },\r\n buttons: {\r\n '& > *': {\r\n margin: theme.spacing(1),\r\n },\r\n },\r\n })\r\n)\r\n\r\nconst StyledTableCell = withStyles((theme: Theme) =>\r\n createStyles({\r\n head: {\r\n backgroundColor: theme.palette.common.white,\r\n color: theme.palette.common.black,\r\n },\r\n body: {\r\n fontSize: 12,\r\n fontWeight: 'bold',\r\n },\r\n })\r\n)(TableCell)\r\n\r\nconst StyledTableRow = withStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n '&:nth-of-type(odd)': {\r\n backgroundColor: theme.palette.action.hover,\r\n },\r\n },\r\n })\r\n)(TableRow)\r\n\r\ntype Paging = {\r\n pageSize: number\r\n page: number\r\n size: number\r\n}\r\n\r\ntype ProductSearchResponse = {\r\n paging: Paging\r\n data: Product[]\r\n}\r\n\r\ntype ProductSearchInputProps = {\r\n value?: Product\r\n onChange: (product: Product) => void\r\n searchOldProducts?: boolean\r\n searchCurrentProducts?: boolean\r\n isProductUnknown?: boolean\r\n setIsProductUnknown?: React.Dispatch\r\n}\r\n\r\ntype HttpState = {\r\n request: TRequest\r\n response: TResponse\r\n loading: boolean\r\n error: boolean\r\n errorMessage?: string\r\n}\r\n\r\ntype HttpAction =\r\n { type: 'search', payload: { page: number, value: string, cancelToken: CancelTokenSource } } |\r\n { type: 'error', payload: { message: string } } |\r\n { type: 'complete', payload: TResponse }\r\n\r\ntype ProductSearchRequest = {\r\n searchTerm: string\r\n page: number\r\n pageSize: number,\r\n cancelToken?: CancelTokenSource\r\n}\r\n\r\nconst initialProductSearchState: HttpState = {\r\n request: {\r\n searchTerm: '',\r\n pageSize: 10,\r\n page: 1,\r\n cancelToken: undefined\r\n },\r\n response: {\r\n data: [],\r\n paging: {page: 1, pageSize: 10, size: 0}\r\n },\r\n loading: false,\r\n error: false,\r\n errorMessage: undefined\r\n}\r\n\r\nconst ProductSearchReducer: React.Reducer, HttpAction> = (state, action) => {\r\n switch (action.type) {\r\n case 'search':\r\n return {\r\n ...state,\r\n loading: true,\r\n error: false,\r\n errorMessage: undefined,\r\n request: {\r\n ...state.request,\r\n page: action.payload.page,\r\n searchTerm: action.payload.value,\r\n cancelToken: action.payload.cancelToken\r\n }\r\n }\r\n case 'complete':\r\n return {...state, loading: false, error: false, errorMessage: undefined, response: action.payload}\r\n case 'error':\r\n return {\r\n ...state,\r\n loading: false,\r\n data: {data: [], paging: {page: 1, pageSize: 10, size: 0}},\r\n error: true,\r\n errorMessage: action.payload.message\r\n }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nconst ProductSearchInput: React.FC = ({\r\n value,\r\n onChange,\r\n searchOldProducts,\r\n searchCurrentProducts,\r\n isProductUnknown,\r\n setIsProductUnknown\r\n }) => {\r\n const {countryCode, customerNumber} = useContext(AppContext)\r\n const {t, itemSearchConfiguration} = useContext(OrgCustomizationContext)\r\n const classes = useStyles()\r\n const [search, dispatch] = useReducer(ProductSearchReducer, {\r\n ...initialProductSearchState,\r\n response: {\r\n ...initialProductSearchState.response,\r\n data: value ? [value] : initialProductSearchState.response.data\r\n }\r\n })\r\n const [showUnknownOption, setShowUnknownOption] = useState(false)\r\n const unknownProductEnabled = useMemo(() => !!setIsProductUnknown, [setIsProductUnknown])\r\n\r\n const handleSearch = useCallback(debounce(async (value: string, page: number) => {\r\n if (value.toLowerCase() === search.request.searchTerm.toLowerCase() && page === search.request.page) return\r\n\r\n search.request.cancelToken?.cancel()\r\n\r\n const cancelToken = axios.CancelToken.source()\r\n\r\n dispatch({type: 'search', payload: {page, value, cancelToken}})\r\n\r\n try {\r\n let cpr: AxiosResponse | null = null\r\n let opr: AxiosResponse | null = null\r\n\r\n if (searchCurrentProducts && itemSearchConfiguration.useActiveProductSearch(value)) {\r\n cpr = await http.get(`/api/Product/Search?pageSize=${search.request.pageSize}&page=${page}&search=${value}&countryCode=${countryCode}`, {cancelToken: cancelToken.token})\r\n if (cpr?.data.data) cpr.data.data = cpr.data.data.map(p => ({...p, isDiscontinuedOrUnknown: false}))\r\n }\r\n\r\n if (searchOldProducts && itemSearchConfiguration.useItemIdSearch(value)) {\r\n opr = await http.get(`/api/Product/SearchDiscontinued?material=${value}&customerNumber=${customerNumber}&countryCode=${countryCode}`, {cancelToken: cancelToken.token})\r\n if (opr?.data.data) opr.data.data = opr.data.data.map(p => ({...p, isDiscontinuedOrUnknown: true}))\r\n }\r\n\r\n let res = (cpr?.data.data.length ? cpr?.data : opr?.data) || {\r\n data: [],\r\n paging: {page: 0, pageSize: 0, size: 0}\r\n }\r\n\r\n dispatch({type: 'complete', payload: res})\r\n setShowUnknownOption(!res.data.length)\r\n } catch (e) {\r\n dispatch({type: 'error', payload: {message: 'Unable to load products'}})\r\n }\r\n }, 2000), [search, dispatch, setShowUnknownOption, countryCode, customerNumber])\r\n\r\n return (\r\n <>\r\n \r\n {t('ps_enter_product_number')}\r\n \r\n\r\n \r\n handleSearch(e.target.value, 1)}\r\n InputProps={{endAdornment: <>{search.loading && }}}\r\n />\r\n \r\n\r\n {unknownProductEnabled && showUnknownOption && (\r\n \r\n \r\n \r\n setIsProductUnknown && setIsProductUnknown(!isProductUnknown)}\r\n />\r\n }\r\n label={t('ps_product_number_unknown') as string}\r\n />\r\n \r\n \r\n \r\n )}\r\n\r\n {!search.loading && search.response.data.length === 0 && !!search.request.searchTerm && (\r\n \r\n {t('ps_no_product_found')}\r\n \r\n )}\r\n\r\n \r\n {!!search.response.data.length &&\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n {' '}\r\n {t('description')}\r\n \r\n \r\n {t('material_number')}\r\n \r\n \r\n \r\n \r\n \r\n {search.response.data.map((item: Product) => (\r\n \r\n \r\n {item.shortDescription}\r\n \r\n \r\n {item.productId}\r\n \r\n \r\n onChange(item)}\r\n >\r\n {t('select')}\r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n
\r\n
\r\n\r\n {search.response.paging.size > 10 &&\r\n \r\n handleSearch(search.request.searchTerm, newPage)}\r\n />\r\n \r\n }\r\n \r\n }\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default ProductSearchInput\r\n","import React, {useContext, useState} from 'react'\r\nimport {OrgCustomizationContext} from \"../themes/OrgCustomizationProvider\";\r\nimport {Product} from \"../contexts/types\";\r\n\r\ntype useUnknownProductType = {\r\n isProductUnknown: boolean\r\n setIsProductUnknown: React.Dispatch\r\n unknownProduct: Product\r\n}\r\n\r\nconst useUnknownProduct = (_isProductUnknown: boolean): useUnknownProductType => {\r\n const [isProductUnknown, setIsProductUnknown] = useState(_isProductUnknown)\r\n const {t} = useContext(OrgCustomizationContext)\r\n\r\n return {\r\n isProductUnknown,\r\n setIsProductUnknown,\r\n unknownProduct: {\r\n action: '',\r\n categories: null,\r\n materialPrice: '',\r\n materialPriceCurrency: '',\r\n productId: 'XUN001',\r\n productName: t('ps_unknown'),\r\n salesOrg: '',\r\n shortDescription: t('ps_product_name_or_number_unknown'),\r\n validFrom: '',\r\n isDiscontinuedOrUnknown: true,\r\n isFirstPartyManufactured: true\r\n }\r\n }\r\n}\r\n\r\nexport default useUnknownProduct\r\n","import {useEffect, useState} from 'react'\r\nimport {useLocation} from \"react-router-dom\";\r\nimport useScreenFlow from \"./useScreenFlow\";\r\n\r\nlet lastLocation: string | null = null;\r\n\r\n/**\r\n * For some unknown reason when using useScreenFlow -> navigateForward it's getting the older version of a complaint.\r\n * This is a \"fix\" for the issue, as we need something fast that doesn't include a whole refactor. Please really fix\r\n * this functionality at a future date and remove this.\r\n */\r\nconst useTheHackiestPageNavigation = () => {\r\n const [goToNextStep, setGoToNextStep] = useState(false)\r\n const location = useLocation()\r\n const {navigateForward} = useScreenFlow()\r\n\r\n useEffect(() => {\r\n if (lastLocation === location.pathname) return\r\n \r\n lastLocation = location.pathname\r\n setGoToNextStep(false)\r\n }, [location.pathname]);\r\n\r\n useEffect(() => {\r\n if (!goToNextStep) return\r\n \r\n navigateForward()\r\n }, [goToNextStep, navigateForward]);\r\n \r\n return {\r\n navigateForward: () => setGoToNextStep(true)\r\n }\r\n}\r\n\r\nexport default useTheHackiestPageNavigation\r\n","import {Grid, Stack, SxProps, Theme, Typography, useMediaQuery} from \"@mui/material\";\r\nimport {useContext} from \"react\";\r\nimport {OrgCustomizationContext} from \"../themes/OrgCustomizationProvider\";\r\nimport {Product} from \"../contexts/types\";\r\nimport {Box} from \"@mui/system\";\r\nimport {useTheme} from \"@mui/styles\";\r\n\r\ntype SelectedProductDisplayProps = {\r\n product: Product\r\n sx: SxProps,\r\n endAdornment?: React.ReactNode\r\n}\r\n\r\nconst SelectedProductDisplay: React.FC = ({product, sx, endAdornment}) => {\r\n const {t} = useContext(OrgCustomizationContext)\r\n const theme = useTheme();\r\n const isMobile = useMediaQuery(theme.breakpoints.down('md'));\r\n\r\n return (\r\n \r\n \r\n \r\n {t('material_number')}\r\n \r\n \r\n {product?.productId}\r\n \r\n \r\n \r\n \r\n {t('description')}\r\n \r\n \r\n {product?.shortDescription}\r\n \r\n \r\n \r\n {endAdornment}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default SelectedProductDisplay\r\n","import React, {useContext} from 'react'\r\nimport {Alert, Button, Grid,} from '@mui/material'\r\nimport {AppContext} from '../../contexts/AppContextProvider'\r\nimport {Product} from '../../contexts/types'\r\nimport ControlContainer from '../ControlContainer'\r\nimport {CancelButton, PreviousButton} from '../StepperButtons'\r\nimport {OrgCustomizationContext} from \"../../themes/OrgCustomizationProvider\";\r\nimport ProductSearchInput from \"../Inputs/ProductSearchInput\";\r\nimport useUnknownProduct from \"../../hooks/useUnknownProduct\";\r\nimport {setSelectedProduct} from \"../../contexts/GeneralComplaintReducer\";\r\nimport {setMainProductReplacement} from \"../../contexts/ReplacementsReducer\";\r\nimport UseTheHackiestPageNavigation from \"../../hooks/useTheHackiestPageNavigation\";\r\nimport SelectedProductDisplay from \"../SelectedProductDisplay\";\r\n\r\nconst ProductSearch: React.FC = () => {\r\n const {navigateForward} = UseTheHackiestPageNavigation()\r\n const {t, ThirdPartyError} = useContext(OrgCustomizationContext)\r\n const {complaint, dispatch} = useContext(AppContext)\r\n const {\r\n unknownProduct,\r\n isProductUnknown,\r\n setIsProductUnknown\r\n } = useUnknownProduct(complaint.generalComplaint.isProductUnknown)\r\n\r\n const navigateToDetailsPage = (item?: Product) => {\r\n dispatch(setSelectedProduct(!item, item ? item : unknownProduct))\r\n dispatch(setMainProductReplacement(item?.isDiscontinuedOrUnknown ? undefined : item))\r\n\r\n if (item === undefined || item?.isFirstPartyManufactured === true) navigateForward()\r\n }\r\n\r\n const isThirdParty = complaint.generalComplaint.selectedProduct && !complaint.generalComplaint.selectedProduct.isFirstPartyManufactured\r\n\r\n return (\r\n \r\n \r\n {!(complaint.generalComplaint.selectedProduct && isThirdParty) &&\r\n navigateToDetailsPage(i)}\r\n isProductUnknown={isProductUnknown}\r\n setIsProductUnknown={setIsProductUnknown}\r\n searchCurrentProducts\r\n searchOldProducts\r\n />\r\n }\r\n\r\n {complaint.generalComplaint.selectedProduct && isThirdParty &&\r\n {\r\n dispatch(setSelectedProduct(undefined, undefined))\r\n dispatch(setMainProductReplacement(undefined))\r\n }}>\r\n {t('clear')}\r\n }\r\n />\r\n }\r\n\r\n
\r\n\r\n {complaint.generalComplaint.selectedProduct && isThirdParty &&\r\n \r\n \r\n \r\n }\r\n\r\n \r\n {isProductUnknown && (\r\n navigateToDetailsPage(isProductUnknown ? undefined : complaint.generalComplaint.selectedProduct)}\r\n >\r\n {t('continue')}\r\n \r\n )}\r\n\r\n \r\n\r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default ProductSearch\r\n","import {Alert, Link} from '@mui/material'\r\nimport React, {useContext} from 'react'\r\nimport {Trans} from 'react-i18next'\r\nimport {YesNoOptions} from '../contexts/types'\r\nimport {AppContext} from \"../contexts/AppContextProvider\";\r\nimport {OrgCustomizationContext} from \"../themes/OrgCustomizationProvider\";\r\n\r\ntype IRSAlertProps = { wasOpenedOrDropped: YesNoOptions }\r\n\r\nconst IRSAlert: React.FC = ({wasOpenedOrDropped}) => {\r\n const {countryCode} = useContext(AppContext)\r\n const {tns} = useContext(OrgCustomizationContext)\r\n\r\n const getIrsReturnFormUrl = () => {\r\n const language = navigator.language.split('-')[0].toLowerCase()\r\n\r\n if (countryCode === 'us') {\r\n return 'implant_replacement_form_us.pdf'\r\n }\r\n\r\n if (countryCode === 'ca') {\r\n return language === 'fr'\r\n ? 'service_de_remplacement_dimplant.pdf'\r\n : 'implant_replacement_form_ca.pdf'\r\n }\r\n\r\n if (countryCode === 'hk') {\r\n return 'hk_irs_form.pdf'\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n {getIrsReturnFormUrl() && wasOpenedOrDropped === 'YES' && (\r\n \r\n \r\n -\r\n \r\n -\r\n \r\n -\r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default IRSAlert\r\n","import React, {useContext, useState} from 'react'\r\nimport {\r\n Box,\r\n Button,\r\n CircularProgress,\r\n FormControl,\r\n FormControlLabel,\r\n FormHelperText,\r\n FormLabel,\r\n Grid,\r\n InputAdornment,\r\n Radio,\r\n RadioGroup, Stack,\r\n TextField,\r\n Theme,\r\n Typography,\r\n} from '@mui/material'\r\nimport createStyles from '@mui/styles/createStyles'\r\nimport makeStyles from '@mui/styles/makeStyles'\r\nimport CheckIcon from '@mui/icons-material/Check'\r\nimport {AppContext} from '../../contexts/AppContextProvider'\r\nimport ControlContainer from '../ControlContainer'\r\nimport {CancelButton, PreviousButton} from '../StepperButtons'\r\nimport {GeneralComplaintState, MaterialResponse, ProductTypeOptions, ProductIdOptions, YesNoOptions,} from '../../contexts/types'\r\nimport {useForm} from '../../hooks/useForm'\r\nimport {resetClinicalCondition} from '../../contexts/ClinicalConditionReducer'\r\nimport IRSAlert from '../IRSAlert'\r\nimport axios from 'axios'\r\nimport http from '../../http'\r\nimport {OrgCustomizationContext} from \"../../themes/OrgCustomizationProvider\";\r\nimport {resetTreatmentDates, setTreatmentDates} from \"../../contexts/TreatmentDatesReducer\";\r\nimport {resetComplaintType} from \"../../contexts/ComplaintTypeReducer\";\r\nimport {setGeneralComplaint} from \"../../contexts/GeneralComplaintReducer\";\r\nimport UseTheHackiestPageNavigation from \"../../hooks/useTheHackiestPageNavigation\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n table: {\r\n border: '1px solid #9D9D9D',\r\n backgroundColor: theme.palette.grey[200],\r\n padding: '10px 20px',\r\n color: '#656565',\r\n },\r\n buttons: {\r\n '& > *': {\r\n margin: theme.spacing(1),\r\n },\r\n },\r\n title: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n tableHeading: {\r\n fontWeight: 'bold',\r\n },\r\n })\r\n)\r\n\r\nconst ProductType: React.FC = () => {\r\n const classes = useStyles()\r\n const {navigateForward} = UseTheHackiestPageNavigation()\r\n const {t, orgIdentifier} = useContext(OrgCustomizationContext)\r\n const {\r\n complaint,\r\n dispatch,\r\n countryCode,\r\n customerNumber,\r\n postNotification,\r\n clearNotification\r\n } = useContext(AppContext)\r\n const [isValidatingBatchNum, setIsValidatingBatchNum] =\r\n useState(false)\r\n const [isBatchNumValid, setIsBatchNumValid] = useState(true)\r\n const [showBatchNumCheck, setShowBatchNumCheck] = useState(false)\r\n const selectedProduct = complaint.generalComplaint.selectedProduct\r\n const required = {value: true, message: t('this_field_is_required')}\r\n const {\r\n data,\r\n errors,\r\n handleChangeEvent,\r\n validateFields,\r\n enableOnChangeValidation,\r\n setFormData,\r\n } = useForm({\r\n initialValues: {\r\n ...complaint.generalComplaint,\r\n productType: selectedProduct?.productId === 'XUN001' ? 'IMPLANT' : complaint.generalComplaint.selectedProduct?.productType\r\n },\r\n validations: {\r\n isBatchOrLotNumberKnown: {required},\r\n wasProductPlaced: {required},\r\n isReplacementNeeded: {required},\r\n productType: {required},\r\n wasPatientInvolved: {\r\n custom: {\r\n isValid: (value, data) => {\r\n if (data.wasProductPlaced === 'NO') {\r\n // If the field is empty\r\n if (!value) {\r\n return false\r\n }\r\n }\r\n return true\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n wasOpenedOrDropped: {\r\n custom: {\r\n isValid: (value, data) => {\r\n if (\r\n data.productType === 'IMPLANT'\r\n && (['us', 'ca', 'hk'].includes(countryCode))\r\n && (['Nobel'].includes(orgIdentifier))\r\n ) {\r\n // If the field is empty\r\n if (!value) {\r\n return false\r\n }\r\n }\r\n return true\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n wasAnotherImplantPlaced: {\r\n custom: {\r\n isValid: (value, data) => {\r\n if (\r\n data.productType === 'IMPLANT' &&\r\n data.wasProductPlaced === 'YES'\r\n ) {\r\n // If the field is empty\r\n if (!value) {\r\n return false\r\n }\r\n }\r\n return true\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n batchOrLotNumber: {\r\n custom: {\r\n isValid: (value, data) => {\r\n if (data.isBatchOrLotNumberKnown === 'YES') {\r\n // If the field is empty\r\n if (!value) {\r\n return false\r\n }\r\n }\r\n return true\r\n },\r\n message: t('pt_valid_batch_or_lot_number_is_required'),\r\n },\r\n },\r\n },\r\n })\r\n\r\n const anotherImplantInitialValue: YesNoOptions = complaint.generalComplaint\r\n .wasAnotherImplantPlaced as YesNoOptions\r\n\r\n const productTypeInitialValue: ProductTypeOptions = complaint\r\n .generalComplaint.productType as ProductTypeOptions\r\n\r\n const batchNumInitialValue: string = complaint.generalComplaint\r\n .batchOrLotNumber as string\r\n\r\n const productTypeMap = {\r\n IMPLANT: t('pt_option_implant'),\r\n ABUTMENT: t('pt_option_abutment'),\r\n SCREW: t('pt_option_screw'),\r\n CLINICAL_INSTRUMENT: t('pt_option_clinical_instrument'),\r\n LAB_INSTRUMENT_LAB_SCREW: t('pt_option_lab_instrument_lab_screw'),\r\n }\r\n\r\n const handleProductTypeChange = (event: React.ChangeEvent) => {\r\n const selectedProductType = event.target.value as ProductTypeOptions;\r\n \r\n // Update the form state with both productType and selectedProduct.productId.\r\n const productNumberMap: Record = {\r\n '': 'XUN001', // Default value for empty string case\r\n IMPLANT: 'XUN001',\r\n ABUTMENT: 'XUN002',\r\n SCREW: 'XUN003',\r\n CLINICAL_INSTRUMENT: 'XUN004',\r\n LAB_INSTRUMENT_LAB_SCREW: 'XUN006',\r\n };\r\n \r\n setFormData((prevData) => ({\r\n ...prevData,\r\n productType: selectedProductType,\r\n selectedProduct: {\r\n ...prevData.selectedProduct!,\r\n productId: productNumberMap[selectedProductType],\r\n },\r\n }));\r\n };\r\n\r\n const handleBatchNumberOnBlur = () => {\r\n\r\n const cancelTokenSource = axios.CancelToken.source()\r\n const batchNum = data.batchOrLotNumber\r\n\r\n const validateBatchNum = async (batchNum: string) => {\r\n try {\r\n setIsValidatingBatchNum(true)\r\n\r\n let response = await http.get(\r\n `/api/Product/Validate?material=${data.selectedProduct?.productId}&batch=${batchNum}&customerNumber=${customerNumber}&countryCode=${countryCode}`,\r\n {cancelToken: cancelTokenSource.token})\r\n\r\n if (\r\n response &&\r\n response.data &&\r\n response.data.materialList &&\r\n response.data.materialList.length > 0\r\n ) {\r\n if (\r\n response.data.materialList[0].batchReturnCode === '300'\r\n ) {\r\n setIsBatchNumValid(true)\r\n setShowBatchNumCheck(true)\r\n } else {\r\n setIsBatchNumValid(false)\r\n setShowBatchNumCheck(false)\r\n }\r\n }\r\n\r\n setIsValidatingBatchNum(false)\r\n } catch (e) {\r\n }\r\n }\r\n\r\n const resetBatchNumState = () => {\r\n setIsBatchNumValid(true)\r\n setShowBatchNumCheck(false)\r\n setIsValidatingBatchNum(false)\r\n }\r\n\r\n if (batchNum) {\r\n if (batchNum !== batchNumInitialValue) {\r\n validateBatchNum(batchNum)\r\n } else {\r\n resetBatchNumState()\r\n }\r\n } else {\r\n resetBatchNumState()\r\n }\r\n\r\n return () => {\r\n cancelTokenSource.cancel()\r\n }\r\n }\r\n\r\n const handleFormSubmit = (e: React.FormEvent) => {\r\n e.preventDefault()\r\n\r\n // Activate field level validation tracking\r\n enableOnChangeValidation(true)\r\n\r\n // Validate the form fields\r\n let isFormValid: boolean = validateFields(data)\r\n if (isFormValid) {\r\n if (data.isBatchOrLotNumberKnown === 'YES') {\r\n isFormValid = isBatchNumValid\r\n }\r\n }\r\n\r\n // Stop processing if the form has invalid fields\r\n if (\r\n !isFormValid ||\r\n (data.wasOpenedOrDropped === 'YES'\r\n && orgIdentifier === \"Nobel\"\r\n && data.productType === 'IMPLANT')\r\n ) {\r\n postNotification('error', data.wasOpenedOrDropped === 'YES' && data.productType === 'IMPLANT'\r\n ? t('error_mess_opened_or_dropped')\r\n : t('error_mess'))\r\n return\r\n }\r\n\r\n // Form is valid, proceed with processing\r\n\r\n // Close the alert message in case it is open\r\n clearNotification()\r\n\r\n console.log('Dispatching generalComplaint:', {\r\n ...data,\r\n productId: data.selectedProduct?.productId || '',\r\n // ...other fields\r\n });\r\n\r\n // Package up the form data and update app state\r\n /*const updatedSelectedProduct = {\r\n // Make sure all fields are explicitly set\r\n ...data.selectedProduct,\r\n productId: data.selectedProduct?.productId ?? '', // Ensure productId is a string\r\n salesOrg: data.selectedProduct?.salesOrg ?? '', \r\n action: data.selectedProduct?.action ?? '', \r\n productName: data.selectedProduct?.productName ?? '', \r\n validFrom: data.selectedProduct?.validFrom ?? '', \r\n shortDescription: data.selectedProduct?.shortDescription ?? '', \r\n materialPrice: data.selectedProduct?.materialPrice ?? '', // Ensure materialPrice is a string\r\n materialPriceCurrency: data.selectedProduct?.materialPriceCurrency ?? '', // Ensure materialPriceCurrency is a string\r\n categories: data.selectedProduct?.categories ?? null, // Ensure categories is either string[] or null\r\n isDiscontinuedOrUnknown: data.selectedProduct?.isDiscontinuedOrUnknown ?? false, // Ensure isDiscontinuedOrUnknown is a boolean\r\n isFirstPartyManufactured: data.selectedProduct?.isFirstPartyManufactured ?? false, // Ensure isFirstPartyManufactured is a boolean\r\n }*/\r\n\r\n const generalComplaint: GeneralComplaintState = {\r\n ...data,\r\n /*selectedProduct: updatedSelectedProduct, // explicitly include the updated nested object*/\r\n productId: data.selectedProduct?.productId as ProductIdOptions,\r\n batchOrLotNumber:\r\n data.isBatchOrLotNumberKnown === 'YES'\r\n ? data.batchOrLotNumber\r\n : '',\r\n wasPatientInvolved:\r\n data.wasProductPlaced === 'NO'\r\n ? data.wasPatientInvolved\r\n : 'YES',\r\n wasOpenedOrDropped:\r\n data.productType === 'IMPLANT' ? data.wasOpenedOrDropped : '',\r\n wasAnotherImplantPlaced:\r\n data.productType === 'IMPLANT' &&\r\n data.wasProductPlaced === 'YES'\r\n ? data.wasAnotherImplantPlaced\r\n : '',\r\n }\r\n\r\n // Clear out future fields in the case of changed selections, i.e., the\r\n // user made selections on this screen, continued to other screens, and\r\n // then returned to this screen and changed their initial selections\r\n\r\n // Clear out Treatment Date fields that are relevant to another implant placed\r\n if (\r\n anotherImplantInitialValue === 'YES' &&\r\n data.wasAnotherImplantPlaced === 'NO' &&\r\n !complaint.metadata.complaintWithPatientAndTreatmentData\r\n ) {\r\n dispatch(resetTreatmentDates())\r\n }\r\n\r\n // Clear out Treatment Dates if the user returns to the product type screen\r\n // and changes the product type\r\n if (productTypeInitialValue !== data.productType && !complaint.metadata.complaintWithPatientAndTreatmentData) {\r\n dispatch(resetTreatmentDates())\r\n }\r\n\r\n // Clear out complaint type and clinical conditions data if the user returns to\r\n // the product type screen and changes the product type\r\n if (productTypeInitialValue !== data.productType) {\r\n dispatch(resetComplaintType())\r\n dispatch(resetClinicalCondition())\r\n }\r\n\r\n if (data.wasAnotherImplantPlaced === 'YES' && !complaint.metadata.complaintWithPatientAndTreatmentData) {\r\n dispatch(setTreatmentDates({\r\n ...complaint.treatmentDates,\r\n wasProductRemoved: \"NO\",\r\n dateProductWasRemoved: null,\r\n wasThereASecondSurgery: \"NO\",\r\n dateOfSecondSurgery: null,\r\n }))\r\n }\r\n\r\n // return\r\n dispatch(setGeneralComplaint(generalComplaint))\r\n\r\n // Proceed to next screen\r\n navigateForward()\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {t('pt_selected_product')}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {t('material_number')}\r\n \r\n \r\n {data.selectedProduct?.productId}\r\n \r\n \r\n \r\n \r\n {t('description')}\r\n \r\n \r\n {selectedProduct?.shortDescription}\r\n \r\n \r\n {selectedProduct?.productType && \r\n \r\n {t('product_type')}\r\n \r\n \r\n {productTypeMap[selectedProduct.productType]}\r\n \r\n }\r\n \r\n\r\n \r\n
\r\n \r\n \r\n \r\n {t('pt_is_batch_or_lot_number_known')}\r\n \r\n \r\n }\r\n label={t('option_yes') as string}\r\n />\r\n }\r\n label={t('option_no') as string}\r\n />\r\n \r\n \r\n {errors.isBatchOrLotNumberKnown}\r\n \r\n \r\n \r\n {data.isBatchOrLotNumberKnown === 'YES' && (\r\n \r\n \r\n \r\n {t('pt_enter_batch_or_lot_number')}:\r\n \r\n \r\n {isValidatingBatchNum && (\r\n \r\n )}\r\n {showBatchNumCheck && !isValidatingBatchNum &&\r\n isBatchNumValid &&\r\n data.batchOrLotNumber && (\r\n \r\n )}\r\n \r\n ),\r\n }}\r\n onBlur={handleBatchNumberOnBlur}\r\n />\r\n \r\n \r\n )}\r\n\r\n {!complaint.metadata.complaintWithPatientAndTreatmentData &&\r\n \r\n \r\n \r\n {t('pt_was_the_product_placed')}\r\n \r\n \r\n }\r\n label={t('option_yes') as string}\r\n />\r\n }\r\n label={t('option_no') as string}\r\n />\r\n \r\n \r\n {errors.wasProductPlaced}\r\n \r\n \r\n \r\n }\r\n\r\n {data.wasProductPlaced === 'NO' && (\r\n \r\n \r\n \r\n {t('pt_was_patient_involved')}\r\n \r\n \r\n }\r\n label={t('option_yes') as string}\r\n />\r\n }\r\n label={t('option_no') as string}\r\n />\r\n \r\n \r\n {errors.wasPatientInvolved}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n {t('pt_is_replacement_needed')}\r\n \r\n \r\n }\r\n label={t('option_yes') as string}\r\n />\r\n }\r\n label={t('option_no') as string}\r\n />\r\n \r\n \r\n {errors.isReplacementNeeded}\r\n \r\n \r\n \r\n {!complaint.generalComplaint.selectedProduct?.productType && \r\n \r\n \r\n {t('pt_select_product_type')}:\r\n \r\n \r\n }\r\n label={t('pt_option_implant')}\r\n />\r\n }\r\n label={t('pt_option_abutment')}\r\n />\r\n }\r\n label={t('pt_option_screw')}\r\n />\r\n }\r\n label={t('pt_option_clinical_instrument')}\r\n />\r\n }\r\n label={t('pt_option_lab_instrument_lab_screw')}\r\n />\r\n \r\n \r\n {errors.productType}\r\n \r\n \r\n }\r\n {data.productType === 'IMPLANT' && (['us', 'ca', 'hk'].includes(countryCode)) && (\r\n \r\n \r\n \r\n {t('pt_implant_opened_or_dropped')}\r\n \r\n \r\n }\r\n label={t('option_yes') as string}\r\n />\r\n }\r\n label={t('option_no') as string}\r\n />\r\n \r\n \r\n {errors.wasOpenedOrDropped}\r\n \r\n \r\n {\r\n orgIdentifier === \"Nobel\"\r\n ? \r\n : null\r\n }\r\n\r\n \r\n )}\r\n\r\n\r\n {data.productType === 'IMPLANT' && (!complaint.metadata.complaintWithPatientAndTreatmentData ||\r\n complaint.generalComplaint.wasAnotherImplantPlaced === '') && data.wasProductPlaced === 'YES' && (\r\n \r\n \r\n \r\n {t('pt_another_implant_placed')}\r\n \r\n \r\n }\r\n label={t('option_yes') as string}\r\n />\r\n }\r\n label={t('option_no') as string}\r\n />\r\n \r\n \r\n {errors.wasAnotherImplantPlaced}\r\n \r\n \r\n \r\n )}\r\n\r\n \r\n \r\n \r\n {t('continue')}\r\n \r\n\r\n dispatch(setGeneralComplaint(data))}/>\r\n\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\nexport default ProductType\r\n","import React, {useContext} from 'react'\r\nimport {\r\n Button,\r\n FormControl,\r\n FormControlLabel,\r\n FormHelperText,\r\n FormLabel,\r\n Grid,\r\n Radio,\r\n RadioGroup,\r\n Stack,\r\n TextField,\r\n Typography,\r\n} from '@mui/material'\r\nimport {CancelButton, PreviousButton} from '../StepperButtons'\r\nimport {AppContext} from '../../contexts/AppContextProvider'\r\nimport DatePicker from '@mui/lab/DatePicker'\r\nimport {ComplaintTypeState} from '../../contexts/types'\r\nimport {isValidFn, useForm} from '../../hooks/useForm'\r\nimport {endOfToday, isAfter, isBefore, isDate, isSameDay, isValid, startOfDay,} from 'date-fns'\r\nimport {OrgCustomizationContext} from \"../../themes/OrgCustomizationProvider\";\r\nimport {setEventOccurrence} from \"../../contexts/ComplaintTypeReducer\";\r\nimport useTheHackiestPageNavigation from \"../../hooks/useTheHackiestPageNavigation\";\r\n\r\nconst isValidDate: isValidFn = (value, data) => {\r\n if (!value) return true\r\n if (\r\n isDate(value) &&\r\n isValid(value) &&\r\n isBefore(value as Date, endOfToday()) &&\r\n (isSameDay(value as Date, startOfDay(new Date(1986, 0, 1))) ||\r\n isAfter(value as Date, startOfDay(new Date(1986, 0, 1))))\r\n ) {\r\n return true\r\n }\r\n return false\r\n}\r\n\r\nconst EventOccurence: React.FC = () => {\r\n const {navigateForward} = useTheHackiestPageNavigation()\r\n const {t} = useContext(OrgCustomizationContext)\r\n const {dateMask, complaint, dispatch, postNotification, clearNotification} = useContext(AppContext)\r\n const required = {value: true, message: t('this_field_is_required')}\r\n const {\r\n data,\r\n errors,\r\n handleChangeEvent,\r\n handleChange,\r\n validateFields,\r\n enableOnChangeValidation,\r\n } = useForm({\r\n initialValues: {\r\n ...complaint.complaintType,\r\n },\r\n validations: {\r\n location: {required},\r\n dateOfOccurrence: {\r\n required,\r\n custom: {\r\n isValid: (value, data) => {\r\n if (!value) return true\r\n if (isValidDate(value, data)) {\r\n return true\r\n }\r\n return false\r\n },\r\n message: t('please_enter_a_valid_date', {\r\n earliestDate: t('earliest_date'),\r\n }),\r\n },\r\n },\r\n },\r\n })\r\n\r\n const handleSubmit = (\r\n e: React.MouseEvent\r\n ) => {\r\n // Activate field level validation tracking\r\n enableOnChangeValidation(true)\r\n\r\n // Validate the form fields\r\n const isFormValid = validateFields(data)\r\n\r\n // Stop processing if the form has invalid fields\r\n if (!isFormValid) {\r\n postNotification('error', t('error_mess'))\r\n return\r\n }\r\n\r\n // Form is valid, proceed with processing\r\n\r\n // Close the alert message in case it is open\r\n clearNotification()\r\n\r\n // Package up the form data and update app state\r\n dispatch(setEventOccurrence(data))\r\n\r\n navigateForward()\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {t('eo_event_occurence')}\r\n \r\n \r\n {t('eo_select_date')}:\r\n {\r\n handleChange(\r\n 'dateOfOccurrence',\r\n date as unknown as Date\r\n )\r\n }}\r\n renderInput={(params) => }\r\n />\r\n \r\n {errors.dateOfOccurrence}\r\n \r\n\r\n \r\n {t('unknown_date_instructions')}\r\n \r\n \r\n \r\n \r\n {t('eo_select_location')}:\r\n \r\n \r\n {complaint.generalComplaint.wasPatientInvolved ===\r\n 'NO' && (\r\n }\r\n label={t('eo_lab_initial_inspection') as string}\r\n />\r\n )}\r\n {complaint.generalComplaint.wasPatientInvolved ===\r\n 'NO' && (\r\n }\r\n label={\r\n t('eo_lab_during_finalization') as string\r\n }\r\n />\r\n )}\r\n {complaint.generalComplaint.wasPatientInvolved ===\r\n 'NO' && (\r\n }\r\n label={\r\n t('eo_clinic_initial_inspection') as string\r\n }\r\n />\r\n )}\r\n }\r\n label={t('eo_clinic_during_procedure') as string}\r\n />\r\n {\r\n complaint.generalComplaint.wasPatientInvolved === 'YES'\r\n && }\r\n label={t('eo_clinic_after_procedure') as string}\r\n />\r\n }\r\n \r\n \r\n {errors.location}\r\n \r\n \r\n \r\n \r\n \r\n {t('continue')}\r\n \r\n\r\n dispatch(setEventOccurrence(data))}/>\r\n\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default EventOccurence\r\n","import React, {useContext, useEffect, useState} from 'react'\r\nimport {\r\n Alert,\r\n Button,\r\n FormControl,\r\n FormControlLabel,\r\n FormHelperText,\r\n FormLabel,\r\n Grid,\r\n Radio,\r\n RadioGroup,\r\n Stack,\r\n TextField,\r\n Typography,\r\n} from '@mui/material'\r\nimport DatePicker from '@mui/lab/DatePicker'\r\nimport {CancelButton, PreviousButton} from '../StepperButtons'\r\nimport {AppContext} from '../../contexts/AppContextProvider'\r\nimport {ProductTypeOptions, TreatmentDatesState} from '../../contexts/types'\r\nimport {isValidFn, useForm} from '../../hooks/useForm'\r\nimport {endOfDay, endOfToday, isAfter, isBefore, isDate, isSameDay, isValid, startOfDay,} from 'date-fns'\r\nimport {OrgCustomizationContext} from \"../../themes/OrgCustomizationProvider\";\r\nimport {setTreatmentDates} from \"../../contexts/TreatmentDatesReducer\";\r\nimport UseTheHackiestPageNavigation from \"../../hooks/useTheHackiestPageNavigation\";\r\n\r\nconst isValidDate: isValidFn = (value, data) => {\r\n if (!value) return true\r\n if (\r\n isDate(value) &&\r\n isValid(value) &&\r\n isBefore(value as Date, endOfToday()) &&\r\n (isSameDay(value as Date, startOfDay(new Date(1986, 0, 1))) ||\r\n isAfter(value as Date, startOfDay(new Date(1986, 0, 1))))\r\n ) {\r\n return true\r\n }\r\n return false\r\n}\r\n\r\nconst TreatmentDates: React.FC = () => {\r\n const {navigateForward} = UseTheHackiestPageNavigation()\r\n const {dateMask, complaint, dispatch, postNotification, clearNotification} = useContext(AppContext)\r\n const {t} = useContext(OrgCustomizationContext)\r\n const [dateOfImplantLoadingErrorMsg, setDateOfImplantLoadingErrorMsg] =\r\n useState('')\r\n const [dateOfSecondSurgeryErrorMsg, setDateOfSecondSurgeryErrorMsg] =\r\n useState('')\r\n const [dateOfProductRemovalErrorMsg, setDateOfProductRemovalErrorMsg] =\r\n useState('')\r\n const [dateOfPlacementErrorMsg, setDateOfPlacementErrorMsg] =\r\n useState('')\r\n const [\r\n dateOfProductRemovalToSecondarySurgeryErrorMsg,\r\n setDateOfProductRemovalToSecondarySurgeryErrorMsg\r\n ] =\r\n useState('')\r\n const required = {value: true, message: t('this_field_is_required')}\r\n const {\r\n data,\r\n errors,\r\n handleChangeEvent,\r\n handleChange,\r\n validateFields,\r\n enableOnChangeValidation,\r\n } = useForm({\r\n initialValues: {\r\n ...complaint.treatmentDates,\r\n dateOfSecondSurgery:\r\n complaint.generalComplaint.wasAnotherImplantPlaced === 'YES'\r\n ? null : complaint.treatmentDates.dateOfSecondSurgery,\r\n wasImplantLoaded:\r\n complaint.treatmentDates.wasImplantLoaded || (complaint.generalComplaint.productType === 'ABUTMENT'\r\n ? 'NO'\r\n : complaint.treatmentDates.wasImplantLoaded),\r\n wasThereASecondSurgery:\r\n complaint.treatmentDates.wasThereASecondSurgery || (complaint.generalComplaint.wasAnotherImplantPlaced === 'YES'\r\n ? 'NO'\r\n : complaint.treatmentDates.wasThereASecondSurgery),\r\n wasProductRemoved:\r\n complaint.treatmentDates.wasProductRemoved || (complaint.generalComplaint.wasAnotherImplantPlaced === 'YES'\r\n ? 'NO'\r\n : complaint.treatmentDates.wasProductRemoved),\r\n },\r\n validations: {\r\n dateOfTreatment: {\r\n required,\r\n custom: {\r\n isValid: isValidDate,\r\n message: t('please_enter_a_valid_date', {\r\n earliestDate: t('earliest_date'),\r\n }),\r\n },\r\n },\r\n wasImplantLoaded: {required},\r\n dateOfImplantLoading: {\r\n required: {\r\n value: (value, data) => {\r\n if (complaint.generalComplaint.productType === 'ABUTMENT') {\r\n return true\r\n } else {\r\n return !(\r\n data.wasImplantLoaded === 'YES' &&\r\n !data.dateOfImplantLoading\r\n )\r\n }\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n custom: {\r\n isValid: (value, data) => {\r\n // If the implant was not loaded then we don't need to\r\n // validate the date field\r\n if (data.wasImplantLoaded !== 'YES') {\r\n return true\r\n } else {\r\n // If it was loaded, then validate the date field\r\n return isValidDate(value, data)\r\n }\r\n },\r\n message: t('please_enter_a_valid_date', {\r\n earliestDate: t('earliest_date'),\r\n }),\r\n },\r\n },\r\n wasThereASecondSurgery: {required},\r\n dateOfSecondSurgery: {\r\n required: {\r\n value: (value, data) => {\r\n if (complaint.generalComplaint.productType === 'ABUTMENT') {\r\n return true\r\n } else {\r\n return !(\r\n data.wasThereASecondSurgery === 'YES' &&\r\n !data.dateOfSecondSurgery\r\n )\r\n }\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n custom: {\r\n isValid: (value, data) => {\r\n if (data.wasThereASecondSurgery !== 'YES') {\r\n return true\r\n } else {\r\n return isValidDate(value, data)\r\n }\r\n },\r\n message: t('please_enter_a_valid_date', {\r\n earliestDate: t('earliest_date'),\r\n }),\r\n },\r\n },\r\n wasProductRemoved: {\r\n required\r\n },\r\n dateProductWasRemoved: {\r\n required: {\r\n value: (value, data) => {\r\n return !(\r\n data.wasProductRemoved === 'YES' && !data.dateProductWasRemoved\r\n )\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n custom: {\r\n isValid: (value, data) => {\r\n if (data.wasProductRemoved !== 'YES') {\r\n return true\r\n } else {\r\n return isValidDate(value, data)\r\n }\r\n },\r\n message: t('please_enter_a_valid_date', {\r\n earliestDate: t('earliest_date'),\r\n }),\r\n },\r\n },\r\n },\r\n changeWatchers: {\r\n dateOfTreatment: {\r\n setValue: (prevState, currentState, newState) => {\r\n let modifiedState: TreatmentDatesState = {\r\n ...newState,\r\n }\r\n\r\n if (\r\n prevState.wasImplantLoaded === 'YES' &&\r\n newState.wasImplantLoaded !== 'YES'\r\n ) {\r\n modifiedState = {\r\n ...modifiedState,\r\n dateOfImplantLoading: null,\r\n }\r\n }\r\n\r\n if (\r\n prevState.wasThereASecondSurgery === 'YES' &&\r\n newState.wasThereASecondSurgery !== 'YES'\r\n ) {\r\n modifiedState = {\r\n ...modifiedState,\r\n dateOfSecondSurgery: null,\r\n }\r\n }\r\n\r\n if (\r\n prevState.wasProductRemoved === 'YES' &&\r\n newState.wasProductRemoved !== 'YES'\r\n ) {\r\n modifiedState = {\r\n ...modifiedState,\r\n dateProductWasRemoved: null,\r\n }\r\n }\r\n\r\n return modifiedState\r\n },\r\n },\r\n },\r\n })\r\n\r\n const navigateToNextScreen = () => {\r\n navigateForward()\r\n }\r\n\r\n // Date of Placement validations\r\n useEffect(() => {\r\n\r\n const isPlacementOnOrBeforeDateOfOccurrence =\r\n\r\n !data.dateOfTreatment\r\n || !isValidDate(data.dateOfTreatment as Date, data)\r\n || isBefore(\r\n endOfDay(data.dateOfTreatment as Date) as Date,\r\n complaint.complaintType.dateOfOccurrence as Date\r\n )\r\n || isSameDay(\r\n endOfDay(data.dateOfTreatment as Date) as Date,\r\n complaint.complaintType.dateOfOccurrence as Date\r\n )\r\n\r\n const isPlacementBeforeSecondSurgery =\r\n !data.dateOfTreatment\r\n || !isValidDate(data.dateOfTreatment as Date, data)\r\n || !data.dateOfSecondSurgery\r\n || !isValidDate(data.dateOfSecondSurgery as Date, data)\r\n || isBefore(\r\n endOfDay(data.dateOfTreatment as Date) as Date,\r\n endOfDay(data.dateOfSecondSurgery as Date) as Date\r\n )\r\n\r\n const isPlacementOnOrBeforeRemoval =\r\n !data.dateOfTreatment\r\n || !isValidDate(data.dateOfTreatment as Date, data)\r\n || !data.dateProductWasRemoved\r\n || !isValidDate(data.dateProductWasRemoved as Date, data)\r\n || (isBefore(\r\n endOfDay(data.dateOfTreatment as Date) as Date,\r\n endOfDay(data.dateProductWasRemoved as Date) as Date\r\n )\r\n || isSameDay(\r\n endOfDay(data.dateOfTreatment as Date) as Date,\r\n endOfDay(data.dateProductWasRemoved as Date) as Date\r\n ))\r\n\r\n const isPlacementOnOrBeforeLoading =\r\n !data.dateOfTreatment\r\n || !isValidDate(data.dateOfTreatment as Date, data)\r\n || !data.dateOfImplantLoading\r\n || !isValidDate(data.dateOfImplantLoading as Date, data)\r\n || (isBefore(\r\n endOfDay(data.dateOfTreatment as Date) as Date,\r\n endOfDay(data.dateOfImplantLoading as Date) as Date\r\n )\r\n || isSameDay(\r\n endOfDay(data.dateOfTreatment as Date) as Date,\r\n endOfDay(data.dateOfImplantLoading as Date) as Date\r\n ))\r\n\r\n\r\n if (!isPlacementOnOrBeforeDateOfOccurrence) {\r\n setDateOfPlacementErrorMsg(\r\n t('td_date_of_placement_validation_message_4')\r\n )\r\n } else if (!isPlacementOnOrBeforeRemoval) {\r\n setDateOfPlacementErrorMsg(\r\n t('td_date_of_placement_validation_message_3')\r\n )\r\n } else if (!isPlacementBeforeSecondSurgery) {\r\n setDateOfPlacementErrorMsg(\r\n t('td_date_of_placement_validation_message_1')\r\n )\r\n } else if (!isPlacementOnOrBeforeLoading) {\r\n setDateOfPlacementErrorMsg(\r\n t('td_date_of_placement_validation_message_2')\r\n )\r\n } else {\r\n setDateOfPlacementErrorMsg('')\r\n }\r\n }, [\r\n data.dateOfTreatment,\r\n complaint.complaintType.dateOfOccurrence,\r\n data.dateOfSecondSurgery,\r\n data.dateOfImplantLoading,\r\n data.dateProductWasRemoved,\r\n setDateOfPlacementErrorMsg,\r\n ])\r\n\r\n // Date of Implant Loading validations\r\n useEffect(() => {\r\n\r\n const isImplantLoadingAfterSecondSurgery =\r\n !data.dateOfSecondSurgery\r\n || !isValidDate(data.dateOfSecondSurgery as Date, data)\r\n || !data.dateOfImplantLoading\r\n || !isValidDate(data.dateOfImplantLoading as Date, data)\r\n || complaint.generalComplaint.productType as ProductTypeOptions === 'ABUTMENT'\r\n || isAfter(\r\n endOfDay(data.dateOfImplantLoading as Date) as Date,\r\n endOfDay(data.dateOfSecondSurgery as Date) as Date\r\n )\r\n\r\n const isImplantLoadingOnOrBeforeEventOccurrence =\r\n !data.dateOfImplantLoading\r\n || !isValidDate(data.dateOfImplantLoading as Date, data)\r\n || isBefore(\r\n endOfDay(data.dateOfImplantLoading as Date) as Date,\r\n complaint.complaintType.dateOfOccurrence as Date\r\n )\r\n || isSameDay(\r\n endOfDay(data.dateOfImplantLoading as Date) as Date,\r\n endOfDay(\r\n complaint.complaintType.dateOfOccurrence as Date\r\n ) as Date\r\n )\r\n\r\n const isImplantLoadingSameOrBeforeRemovalDate =\r\n !data.dateOfImplantLoading\r\n || !isValidDate(data.dateOfImplantLoading as Date, data)\r\n || !data.dateProductWasRemoved\r\n || !isValidDate(data.dateProductWasRemoved as Date, data)\r\n || isBefore(\r\n endOfDay(data.dateOfImplantLoading as Date) as Date,\r\n endOfDay(data.dateProductWasRemoved as Date) as Date\r\n )\r\n || isSameDay(\r\n endOfDay(data.dateOfImplantLoading as Date) as Date,\r\n endOfDay(data.dateProductWasRemoved as Date) as Date\r\n )\r\n\r\n const isImplantLoadingOnOrAfterTreatmentDate =\r\n !data.dateOfImplantLoading\r\n || !isValidDate(data.dateOfImplantLoading as Date, data)\r\n || !data.dateOfTreatment\r\n || !isValidDate(data.dateOfTreatment as Date, data)\r\n || isAfter(\r\n endOfDay(data.dateOfImplantLoading as Date) as Date,\r\n endOfDay(data.dateOfTreatment as Date) as Date\r\n )\r\n || isSameDay(\r\n endOfDay(data.dateOfImplantLoading as Date) as Date,\r\n endOfDay(data.dateOfTreatment as Date) as Date\r\n )\r\n\r\n if (!isImplantLoadingAfterSecondSurgery) {\r\n setDateOfImplantLoadingErrorMsg(\r\n t('td_date_of_implant_loading_validation_message_3')\r\n )\r\n } else if (!isImplantLoadingOnOrBeforeEventOccurrence) {\r\n setDateOfImplantLoadingErrorMsg(\r\n t('td_date_of_implant_loading_validation_message_2')\r\n )\r\n } else if (!isImplantLoadingSameOrBeforeRemovalDate) {\r\n setDateOfImplantLoadingErrorMsg(\r\n t('td_date_of_implant_loading_validation_message_4')\r\n )\r\n } else if (!isImplantLoadingOnOrAfterTreatmentDate) {\r\n setDateOfImplantLoadingErrorMsg(\r\n t('td_date_of_implant_loading_validation_message_1')\r\n )\r\n } else {\r\n setDateOfImplantLoadingErrorMsg('')\r\n }\r\n }, [\r\n data.dateOfImplantLoading,\r\n data.dateOfSecondSurgery,\r\n data.dateProductWasRemoved,\r\n data.dateOfTreatment,\r\n complaint.complaintType.dateOfOccurrence,\r\n setDateOfImplantLoadingErrorMsg,\r\n ])\r\n\r\n // Date of Second Surgery validations\r\n useEffect(() => {\r\n\r\n\r\n const isSecondSurgeryBeforeOrOnDateOfOccurrence =\r\n !data.dateOfSecondSurgery\r\n || !isValidDate(data.dateOfSecondSurgery as Date, data)\r\n || isBefore(\r\n endOfDay(data.dateOfSecondSurgery as Date) as Date,\r\n complaint.complaintType.dateOfOccurrence as Date\r\n )\r\n || isSameDay(\r\n endOfDay(data.dateOfSecondSurgery as Date) as Date,\r\n complaint.complaintType.dateOfOccurrence as Date\r\n )\r\n\r\n const isSecondSurgeryBeforeLoadingDate =\r\n !data.dateOfImplantLoading\r\n || !isValidDate(data.dateOfImplantLoading as Date, data)\r\n || !data.dateOfSecondSurgery\r\n || !isValidDate(data.dateOfSecondSurgery as Date, data)\r\n || isBefore(\r\n endOfDay(data.dateOfSecondSurgery as Date) as Date,\r\n endOfDay(data.dateOfImplantLoading as Date) as Date\r\n )\r\n\r\n const isSecondSurgeryBeforeOrSameDayAsRemovalDate =\r\n !data.dateProductWasRemoved\r\n || !isValidDate(data.dateProductWasRemoved as Date, data)\r\n || !data.dateOfSecondSurgery\r\n || !isValidDate(data.dateOfSecondSurgery as Date, data)\r\n || isBefore(\r\n endOfDay(data.dateOfSecondSurgery as Date) as Date,\r\n endOfDay(data.dateProductWasRemoved as Date) as Date\r\n )\r\n || isSameDay(\r\n endOfDay(data.dateOfSecondSurgery as Date) as Date,\r\n endOfDay(data.dateProductWasRemoved as Date) as Date\r\n )\r\n\r\n const isSecondSurgeryAfterTreatmentDate =\r\n !data.dateOfTreatment\r\n || !isValidDate(data.dateOfTreatment as Date, data)\r\n || !data.dateOfSecondSurgery\r\n || !isValidDate(data.dateOfSecondSurgery as Date, data)\r\n || isAfter(\r\n endOfDay(data.dateOfSecondSurgery as Date) as Date,\r\n endOfDay(data.dateOfTreatment as Date) as Date\r\n )\r\n\r\n if (!isSecondSurgeryAfterTreatmentDate) {\r\n setDateOfSecondSurgeryErrorMsg(\r\n t('td_date_of_second_surgery_validation_message')\r\n )\r\n } else if (!isSecondSurgeryBeforeLoadingDate) {\r\n setDateOfSecondSurgeryErrorMsg(\r\n t('td_date_of_second_surgery_validation_message2')\r\n )\r\n } else if (!isSecondSurgeryBeforeOrSameDayAsRemovalDate) {\r\n setDateOfSecondSurgeryErrorMsg(\r\n t('td_date_of_second_surgery_validation_message3')\r\n )\r\n } else if (!isSecondSurgeryBeforeOrOnDateOfOccurrence) {\r\n setDateOfSecondSurgeryErrorMsg(\r\n t('td_date_of_second_surgery_validation_message4')\r\n )\r\n } else {\r\n setDateOfSecondSurgeryErrorMsg('')\r\n }\r\n }, [\r\n data.dateOfSecondSurgery,\r\n complaint.complaintType.dateOfOccurrence,\r\n data.dateOfImplantLoading,\r\n data.dateProductWasRemoved,\r\n data.dateOfTreatment,\r\n setDateOfSecondSurgeryErrorMsg,\r\n ])\r\n\r\n // Date of Removal validations\r\n useEffect(() => {\r\n\r\n const isRemovalDateAfterSecondSurgery =\r\n !data.dateProductWasRemoved\r\n || !isValidDate(data.dateProductWasRemoved as Date, data)\r\n || !data.dateOfSecondSurgery\r\n || !isValidDate(data.dateOfSecondSurgery as Date, data)\r\n || isAfter(\r\n endOfDay(data.dateProductWasRemoved as Date) as Date,\r\n endOfDay(data.dateOfSecondSurgery as Date) as Date\r\n )\r\n || isSameDay(\r\n endOfDay(data.dateProductWasRemoved as Date) as Date,\r\n endOfDay(data.dateOfSecondSurgery as Date) as Date\r\n )\r\n\r\n const isProductRemovalOnOrAfterTreatmentDate =\r\n !data.dateProductWasRemoved\r\n || !isValidDate(data.dateProductWasRemoved as Date, data)\r\n || !data.dateOfTreatment\r\n || !isValidDate(data.dateOfTreatment as Date, data)\r\n || isAfter(\r\n endOfDay(data.dateProductWasRemoved as Date) as Date,\r\n endOfDay(data.dateOfTreatment as Date) as Date\r\n )\r\n || isSameDay(\r\n endOfDay(data.dateProductWasRemoved as Date) as Date,\r\n endOfDay(data.dateOfTreatment as Date) as Date\r\n )\r\n\r\n const isProductRemovalOnOrAfterImplantLoading =\r\n !data.dateOfImplantLoading\r\n || !isValidDate(data.dateOfImplantLoading as Date, data)\r\n || !data.dateProductWasRemoved\r\n || !isValidDate(data.dateProductWasRemoved as Date, data)\r\n || isAfter(\r\n endOfDay(data.dateProductWasRemoved as Date) as Date,\r\n endOfDay(data.dateOfImplantLoading as Date) as Date\r\n )\r\n || isSameDay(\r\n endOfDay(data.dateProductWasRemoved as Date) as Date,\r\n endOfDay(data.dateOfImplantLoading as Date) as Date\r\n )\r\n const isProductRemovalOnOrAfterDateOfOccurence =\r\n !data.dateProductWasRemoved\r\n || !isValidDate(data.dateProductWasRemoved as Date, data)\r\n || isAfter(\r\n endOfDay(data.dateProductWasRemoved as Date) as Date,\r\n endOfDay(complaint.complaintType.dateOfOccurrence as Date) as Date\r\n )\r\n || isSameDay(\r\n endOfDay(data.dateProductWasRemoved as Date) as Date,\r\n endOfDay(complaint.complaintType.dateOfOccurrence as Date) as Date\r\n )\r\n\r\n if (!isProductRemovalOnOrAfterDateOfOccurence) {\r\n setDateOfProductRemovalErrorMsg(\r\n t('td_date_product_was_removed_validation_message2')\r\n )\r\n } else if (!isProductRemovalOnOrAfterImplantLoading) {\r\n setDateOfProductRemovalErrorMsg(\r\n t('td_date_product_was_removed_validation_message_after_loading')\r\n )\r\n } else if (!isProductRemovalOnOrAfterTreatmentDate) {\r\n setDateOfProductRemovalErrorMsg(\r\n t('td_date_product_was_removed_validation_message')\r\n )\r\n } else if (!isRemovalDateAfterSecondSurgery) {\r\n setDateOfProductRemovalErrorMsg(\r\n t('td_date_product_was_removed_validation_message_after_second_surgery')\r\n )\r\n } else {\r\n setDateOfProductRemovalErrorMsg('')\r\n }\r\n }, [\r\n data.dateProductWasRemoved,\r\n data.dateOfSecondSurgery,\r\n data.dateOfTreatment,\r\n data.dateProductWasRemoved,\r\n complaint.complaintType.dateOfOccurrence,\r\n setDateOfProductRemovalToSecondarySurgeryErrorMsg,\r\n ])\r\n\r\n const handleSubmit = () => {\r\n // Activate field level validation tracking\r\n enableOnChangeValidation(true)\r\n\r\n // Validate the form fields\r\n const isFormValid =\r\n validateFields(data) &&\r\n !dateOfImplantLoadingErrorMsg &&\r\n !dateOfSecondSurgeryErrorMsg &&\r\n !dateOfProductRemovalErrorMsg &&\r\n !dateOfProductRemovalToSecondarySurgeryErrorMsg\r\n\r\n // Stop processing if the form has invalid fields\r\n if (!isFormValid) {\r\n postNotification('error', t('error_mess'))\r\n return\r\n }\r\n\r\n // Form is valid, proceed with processing\r\n\r\n // Close the alert message in case it is open\r\n clearNotification()\r\n\r\n // Package up the form data and update app state\r\n const treatmentDates: TreatmentDatesState = {\r\n ...data,\r\n wasThereASecondSurgery:\r\n complaint.generalComplaint.wasAnotherImplantPlaced === 'YES'\r\n ? 'NO'\r\n : data.wasThereASecondSurgery,\r\n dateOfSecondSurgery:\r\n complaint.generalComplaint.wasAnotherImplantPlaced === 'YES'\r\n ? null\r\n : data.dateOfSecondSurgery,\r\n wasProductRemoved:\r\n complaint.generalComplaint.wasAnotherImplantPlaced === 'YES'\r\n ? 'YES'\r\n : data.wasProductRemoved,\r\n dateProductWasRemoved:\r\n complaint.generalComplaint.wasAnotherImplantPlaced === 'YES'\r\n ? complaint.complaintType.dateOfOccurrence\r\n : data.dateProductWasRemoved,\r\n }\r\n\r\n dispatch(setTreatmentDates(treatmentDates))\r\n\r\n navigateToNextScreen()\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {t('td_treatment_dates')}\r\n \r\n\r\n {t('unknown_date_instructions')}\r\n\r\n {/* Date of Treatment */}\r\n \r\n \r\n {t('td_date_of_treatment')}:\r\n \r\n {\r\n handleChange(\r\n 'dateOfTreatment',\r\n date as unknown as Date\r\n )\r\n }}\r\n renderInput={(params) => (\r\n \r\n )}\r\n />\r\n \r\n {errors.dateOfTreatment}\r\n \r\n \r\n {dateOfPlacementErrorMsg}\r\n \r\n \r\n\r\n {/* Was There a Second Surgery */}\r\n {!(complaint.generalComplaint.wasAnotherImplantPlaced === 'YES' && complaint.complaintType.location === '4_CLINIC_DURING_PROCEDURE') &&\r\n \r\n \r\n \r\n {t('td_was_there_a_second_surgery')}\r\n \r\n \r\n }\r\n label={t('option_yes') as string}\r\n />\r\n }\r\n label={t('option_no') as string}\r\n />\r\n \r\n \r\n {errors.wasThereASecondSurgery}\r\n \r\n \r\n\r\n \r\n \r\n {t('td_date_of_second_surgery')}:\r\n \r\n {\r\n handleChange(\r\n 'dateOfSecondSurgery',\r\n date as unknown as Date\r\n )\r\n }}\r\n renderInput={(params) => (\r\n \r\n )}\r\n />\r\n \r\n {errors.dateOfSecondSurgery}\r\n \r\n\r\n \r\n {dateOfSecondSurgeryErrorMsg}\r\n \r\n \r\n }\r\n\r\n {/* Was Implant Loaded */}\r\n {(complaint.generalComplaint.productType !== 'ABUTMENT' || complaint.complaintType.location === '5_CLINIC_AFTER_PROCEDURE') && (\r\n \r\n \r\n {t('td_was_implant_loaded')}\r\n \r\n }\r\n label={t('option_yes') as string}\r\n />\r\n }\r\n label={t('option_no') as string}\r\n />\r\n \r\n \r\n {errors.wasImplantLoaded}\r\n \r\n \r\n\r\n \r\n \r\n {t('td_date_of_implant_loading')}:\r\n \r\n {\r\n handleChange(\r\n 'dateOfImplantLoading',\r\n date as unknown as Date\r\n )\r\n }}\r\n maxDate={data.dateProductWasRemoved}\r\n minDate={data.dateOfSecondSurgery}\r\n renderInput={(params) => (\r\n \r\n )}\r\n />\r\n \r\n {errors.dateOfImplantLoading}\r\n \r\n\r\n \r\n {dateOfImplantLoadingErrorMsg}\r\n \r\n \r\n \r\n )}\r\n\r\n {/* Was the Product Removed */}\r\n {!(complaint.generalComplaint.wasAnotherImplantPlaced === 'YES' && complaint.complaintType.location === '4_CLINIC_DURING_PROCEDURE') &&\r\n \r\n \r\n \r\n {t('td_was_the_product_removed')}\r\n \r\n \r\n }\r\n label={t('option_yes') as string}\r\n />\r\n }\r\n label={t('option_no') as string}\r\n />\r\n \r\n \r\n {errors.wasProductRemoved}\r\n \r\n \r\n\r\n \r\n \r\n {t('td_date_product_was_removed')}:\r\n \r\n {\r\n handleChange(\r\n 'dateProductWasRemoved',\r\n date as unknown as Date\r\n )\r\n }}\r\n renderInput={(params) => (\r\n \r\n )}\r\n />\r\n \r\n {errors.dateProductWasRemoved}\r\n \r\n\r\n \r\n {dateOfProductRemovalErrorMsg}\r\n \r\n \r\n {dateOfProductRemovalToSecondarySurgeryErrorMsg}\r\n \r\n \r\n }\r\n \r\n\r\n \r\n \r\n {t('continue')}\r\n \r\n\r\n dispatch(setTreatmentDates(data))}/>\r\n\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default TreatmentDates\r\n","import React, {useContext, useMemo} from 'react'\r\nimport {OrgCustomizationContext} from \"../../themes/OrgCustomizationProvider\";\r\nimport {FormControl, FormHelperText, FormLabel, Grid, TextField, Typography} from \"@mui/material\";\r\n\r\ntype PatientWeightInputProps = {\r\n errors: string | undefined\r\n units: string | undefined\r\n setUnits: React.Dispatch<'lbs' | 'kg'>\r\n weight: string | undefined | null\r\n onChange: React.Dispatch\r\n}\r\n\r\nconst PatientWeightInput: React.FC = (props) => {\r\n const {questionsConfiguration, t} = useContext(OrgCustomizationContext)\r\n const show = useMemo(() => questionsConfiguration.patient_weight\r\n ? questionsConfiguration.patient_weight.show\r\n : true\r\n , [questionsConfiguration.patient_weight])\r\n\r\n if (!show) return null\r\n\r\n return \r\n {t('pi_patient_weight')}:\r\n \r\n \r\n props.onChange(e.target.value)}\r\n type='number'\r\n inputProps={{maxLength: 10}}\r\n onInput={(e: any) => {\r\n const maxLen: number = 10;\r\n const sliceEnd: number = maxLen;\r\n const val: string = String(e.target.value)\r\n const len: number = val.length\r\n\r\n e.target.value = len > maxLen ? val.slice(0, sliceEnd) : val;\r\n }}\r\n />\r\n \r\n props.setUnits('lbs')}\r\n >\r\n lbs\r\n \r\n \r\n {\" / \"}\r\n \r\n props.setUnits('kg')}\r\n >\r\n kg\r\n \r\n \r\n\r\n \r\n {t('pi_patient_age_helper_text')}\r\n \r\n \r\n {props.errors}\r\n \r\n \r\n}\r\n\r\nexport default PatientWeightInput","import React, {useContext, useState} from 'react'\r\nimport {\r\n Box,\r\n Button,\r\n Checkbox,\r\n FormControl,\r\n FormControlLabel,\r\n FormGroup,\r\n FormHelperText,\r\n FormLabel,\r\n Grid,\r\n MenuItem,\r\n Radio,\r\n RadioGroup,\r\n Stack,\r\n TextField,\r\n Typography,\r\n} from '@mui/material'\r\nimport {CancelButton, PreviousButton} from '../StepperButtons'\r\nimport {AppContext} from '../../contexts/AppContextProvider'\r\nimport {useForm} from '../../hooks/useForm'\r\nimport {PatientInfoState, ProfileOptions} from '../../contexts/types'\r\nimport {OrgCustomizationContext} from \"../../themes/OrgCustomizationProvider\";\r\nimport OrgMappedImage from \"../OrgMappedImage\";\r\nimport PatientWeightInput from \"../Inputs/PatientWeightInput\";\r\nimport {setPatientInfo} from \"../../contexts/PatientInfoReducer\";\r\nimport UseTheHackiestPageNavigation from \"../../hooks/useTheHackiestPageNavigation\";\r\nimport {setTreatmentDates} from \"../../contexts/TreatmentDatesReducer\";\r\n\r\nconst toothOptions = ['18', '17', '16', '15', '14', '13', '12', '11']\r\n .concat(['21', '22', '23', '24', '25', '26', '27', '28'])\r\n .concat(['38', '37', '36', '35', '34', '33', '32', '31'])\r\n .concat(['41', '42', '43', '44', '45', '46', '47', '48'])\r\n\r\nconst isSomethingChecked = (value: object) => {\r\n for (const [_, val] of Object.entries(value)) {\r\n if (val as boolean) return true\r\n }\r\n return false\r\n}\r\n\r\nconst PatientInfo: React.FC = () => {\r\n const {navigateForward} = UseTheHackiestPageNavigation()\r\n const {complaint, dispatch, postNotification, clearNotification} = useContext(AppContext)\r\n const {t, questionsConfiguration, orgIdentifier} = useContext(OrgCustomizationContext)\r\n const [weightUnit, setWeightUnit] = useState<'lbs' | 'kg'>('lbs')\r\n\r\n const required = {value: true, message: t('this_field_is_required')}\r\n const {\r\n data,\r\n errors,\r\n handleChangeEvent,\r\n handleChange,\r\n validateFields,\r\n enableOnChangeValidation,\r\n } = useForm({\r\n initialValues: {\r\n ...complaint.patientInfo,\r\n },\r\n validations: {\r\n patientId: {required},\r\n patientAge: {required},\r\n patientWeight: {\r\n required: {\r\n value: questionsConfiguration.patient_weight?.required || false,\r\n message: t('this_field_is_required')\r\n }\r\n },\r\n patientSex: {required},\r\n patientProfile: {\r\n required: {\r\n value: (value, data) => {\r\n return isSomethingChecked(value as object)\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n patientProfileExplanation: {\r\n required: {\r\n value: (value, data) => {\r\n return !(\r\n data.patientProfile.OTHER &&\r\n !data.patientProfileExplanation\r\n )\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n hygiene: {\r\n required: {\r\n value: complaint.generalComplaint.productType === 'IMPLANT',\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n boneQuality: {\r\n required: {\r\n value: complaint.generalComplaint.productType === 'IMPLANT',\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n boneQualityExplanation: {\r\n required: {\r\n value: (value, data) => {\r\n return !(\r\n complaint.generalComplaint.productType ===\r\n 'IMPLANT' &&\r\n data.boneQuality === 'OTHER' &&\r\n !data.boneQualityExplanation\r\n )\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n utn: {required},\r\n didDeviceContributeToInjury: {required},\r\n currentPatientStatus: {\r\n required: {\r\n value: (value, data) => {\r\n if (data.didDeviceContributeToInjury !== 'YES') {\r\n return true\r\n }\r\n return !!value\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n typeOfInjury: {\r\n required: {\r\n value: (value, data) => {\r\n if (data.didDeviceContributeToInjury !== 'YES') {\r\n return true\r\n }\r\n\r\n return isSomethingChecked(value as object)\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n typeOfInjuryExplanation: {\r\n required: {\r\n value: (value, data) => {\r\n return !(\r\n data.didDeviceContributeToInjury === 'YES' &&\r\n !data.typeOfInjuryExplanation\r\n )\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n },\r\n changeWatchers: {\r\n utn: {\r\n setValue: (prevState, currentState, newState) => {\r\n if (prevState.utn !== newState.utn) {\r\n return {\r\n ...newState,\r\n fdi: toothOptions[parseInt(newState.utn) - 1],\r\n }\r\n }\r\n\r\n if (prevState.fdi !== newState.fdi) {\r\n return {\r\n ...newState,\r\n utn: (\r\n toothOptions.indexOf(newState.fdi) + 1\r\n ).toString(),\r\n }\r\n }\r\n return newState\r\n },\r\n },\r\n },\r\n })\r\n\r\n const navigateToNextScreen = () => {\r\n navigateForward()\r\n }\r\n\r\n const handleIdChange = (value: string) => {\r\n const re = /^[a-zA-Z0-9]*$/\r\n const match = re.test(value)\r\n if (match) {\r\n handleChange('patientId', value)\r\n }\r\n }\r\n\r\n const handleAgeChange = (value: string) => {\r\n const re = /^(\\d{0,3})$/\r\n const match = re.test(value)\r\n if (match) {\r\n handleChange('patientAge', value)\r\n }\r\n }\r\n\r\n const handleWeightChange = (value: string) => {\r\n handleChange('patientWeight', value)\r\n }\r\n\r\n const handleUtnSelection = (value: string) => {\r\n handleChange('utn', value)\r\n }\r\n\r\n const handleFdiSelection = (value: string) => {\r\n handleChange('fdi', value)\r\n }\r\n\r\n const handleProfileChange = (\r\n event: React.ChangeEvent\r\n ) => {\r\n let newProfile: ProfileOptions = {\r\n ...data.patientProfile,\r\n [event.target.name]: event.target.checked,\r\n }\r\n\r\n // If \"None of the Above\" is selected, then deselect all other options\r\n if (newProfile.NONE) {\r\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\r\n for (const [key, value] of Object.entries(newProfile)) {\r\n if ((key as keyof ProfileOptions) !== 'NONE') {\r\n newProfile[key as keyof ProfileOptions] = false as boolean\r\n }\r\n }\r\n }\r\n\r\n handleChange('patientProfile', newProfile)\r\n }\r\n\r\n const handleSubmit = () => {\r\n // Activate field level validation tracking\r\n enableOnChangeValidation(true)\r\n\r\n // Validate the form fields\r\n const isFormValid = validateFields(data)\r\n\r\n // Stop processing if the form has invalid fields\r\n if (!isFormValid) {\r\n postNotification('error', t('error_mess'))\r\n return\r\n }\r\n\r\n // Form is valid, proceed with processing\r\n\r\n // Close the alert message in case it is open\r\n clearNotification()\r\n\r\n // If Other is selected for patient profile or bone quality,\r\n // then store the respective Explanation field values. Otherwise,\r\n // set the Explanation properties to empty strings\r\n // Also, if the selected Product Type is not Implant,\r\n // then store default values for Hygiene and Bone Quality fields.\r\n const patientInfo: PatientInfoState = {\r\n ...data,\r\n patientProfileExplanation: data.patientProfile.OTHER\r\n ? data.patientProfileExplanation\r\n : '',\r\n hygiene:\r\n complaint.generalComplaint.productType === 'IMPLANT'\r\n ? data.hygiene\r\n : '',\r\n boneQuality:\r\n complaint.generalComplaint.productType === 'IMPLANT'\r\n ? data.boneQuality\r\n : '',\r\n boneQualityExplanation:\r\n complaint.generalComplaint.productType === 'IMPLANT' &&\r\n data.boneQuality === 'OTHER'\r\n ? data.boneQualityExplanation\r\n : '',\r\n typeOfInjury:\r\n data.didDeviceContributeToInjury === 'YES'\r\n ? data.typeOfInjury\r\n : '',\r\n typeOfInjuryExplanation:\r\n data.didDeviceContributeToInjury === 'YES'\r\n ? data.typeOfInjuryExplanation\r\n : '',\r\n patientWeightUnit:\r\n weightUnit\r\n }\r\n\r\n dispatch(setPatientInfo(patientInfo))\r\n navigateToNextScreen()\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {t('pi_patient_information')}\r\n \r\n\r\n {/* Patient ID */}\r\n \r\n \r\n {t('pi_patient_id_number')}:\r\n \r\n handleIdChange(e.target.value)}\r\n />\r\n \r\n {t('pi_patient_id_helper_text')}\r\n \r\n \r\n {errors.patientId}\r\n \r\n \r\n\r\n {/* Patient Age */}\r\n \r\n {t('pi_patient_age')}:\r\n handleAgeChange(e.target.value)}\r\n />\r\n \r\n {t('pi_patient_age_helper_text')}\r\n \r\n \r\n {errors.patientAge}\r\n \r\n \r\n\r\n {/* Patient Weight */}\r\n \r\n\r\n {/* Patient Sex */}\r\n \r\n {t('pi_patient_sex')}:\r\n \r\n }\r\n label={t('male') as string}\r\n />\r\n }\r\n label={t('female') as string}\r\n />\r\n }\r\n label={t('undisclosed') as string}\r\n />\r\n \r\n \r\n {errors.patientSex}\r\n \r\n \r\n\r\n {/* Patient Profile */}\r\n \r\n \r\n {t('pi_patient_profile')}:\r\n \r\n \r\n }\r\n label={t('pi_bruxer') as string}\r\n />\r\n \r\n }\r\n label={t('pi_diabetic') as string}\r\n />\r\n \r\n }\r\n label={t('pi_smoker') as string}\r\n />\r\n \r\n }\r\n label={t('pi_unknown') as string}\r\n />\r\n \r\n }\r\n label={t('pi_other') as string}\r\n />\r\n\r\n {data.patientProfile.OTHER && (\r\n \r\n \r\n {t('pi_please_specify')}:\r\n \r\n \r\n \r\n )}\r\n\r\n \r\n }\r\n label={t('pi_none_of_the_above') as string}\r\n />\r\n \r\n \r\n {errors.patientProfile}\r\n \r\n \r\n \r\n\r\n {/* Hygiene */}\r\n {/* Only show Hygiene fields if the Product Type is Implant */}\r\n {complaint.generalComplaint.productType === 'IMPLANT' && (\r\n \r\n {t('pi_hygiene_around_implant')}:\r\n \r\n }\r\n label={t('checkbox_option_excellent') as string}\r\n />\r\n }\r\n label={t('checkbox_option_good') as string}\r\n />\r\n }\r\n label={t('checkbox_option_fair') as string}\r\n />\r\n }\r\n label={t('checkbox_option_poor') as string}\r\n />\r\n \r\n \r\n {errors.hygiene}\r\n \r\n \r\n )}\r\n\r\n {/* Bone Quality */}\r\n {/* Only show Bone Quality fields if the Product Type is Implant */}\r\n {complaint.generalComplaint.productType === 'IMPLANT' && (\r\n \r\n \r\n {t('pi_bone_quality')}:\r\n \r\n }\r\n label={t('pi_type_1') as string}\r\n />\r\n }\r\n label={t('pi_type_2') as string}\r\n />\r\n }\r\n label={t('pi_type_3') as string}\r\n />\r\n }\r\n label={t('pi_type_4') as string}\r\n />\r\n }\r\n label={t('pi_other') as string}\r\n />\r\n \r\n \r\n {errors.boneQuality}\r\n \r\n \r\n {data.boneQuality === 'OTHER' && (\r\n \r\n \r\n {t('pi_please_specify')}:\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n\r\n {/* Select a location */}\r\n \r\n \r\n {t('pi_location_of_device')}:\r\n \r\n \r\n\r\n {/* Image */}\r\n \r\n \r\n \r\n
\r\n \r\n\r\n {/* UTN/FDI */}\r\n \r\n <>\r\n \r\n \r\n \r\n handleUtnSelection(\r\n e.target.value.toString()\r\n )\r\n }\r\n >\r\n {toothOptions.map((value, index) => {\r\n return (\r\n \r\n {index + 1}\r\n \r\n )\r\n })}\r\n \r\n \r\n\r\n \r\n \r\n handleFdiSelection(e.target.value)\r\n }\r\n >\r\n {[...toothOptions]\r\n .sort()\r\n .map((value, index) => {\r\n return (\r\n \r\n {value}\r\n \r\n )\r\n })}\r\n \r\n \r\n \r\n \r\n {t('pi_please_select_tooth_position')}\r\n \r\n \r\n {errors.utn}\r\n \r\n \r\n \r\n\r\n \r\n {/* Did Device Contribute to Injury */}\r\n \r\n \r\n {t('pi_did_device_contribute_to_patient_injury')}\r\n \r\n \r\n }\r\n label={t('option_yes') as string}\r\n />\r\n }\r\n label={t('option_no') as string}\r\n />\r\n \r\n \r\n {errors.didDeviceContributeToInjury}\r\n \r\n \r\n\r\n {/* Type of Injury */}\r\n {data.didDeviceContributeToInjury === 'YES' && (\r\n <>\r\n \r\n \r\n {t('pi_type_of_injury')}:\r\n \r\n }\r\n value='PERMANENT_IMPAIRMENT'\r\n label={\r\n t('pi_permanent_impairment') as string\r\n }\r\n />\r\n }\r\n value='MEDICAL_SURGICAL_INTERVENTION'\r\n label={\r\n t(\r\n 'pi_medical_surgical_intervention'\r\n ) as string\r\n }\r\n />\r\n {orgIdentifier !== 'Nobel' && (\r\n }\r\n value='OTHER'\r\n label={t('pi_other') as string}\r\n />\r\n )}\r\n \r\n \r\n {errors.typeOfInjury}\r\n \r\n \r\n \r\n\r\n {/* More Details */}\r\n \r\n \r\n \r\n {t('pi_more_details')}:\r\n \r\n \r\n \r\n \r\n\r\n {/* Patient Status */}\r\n \r\n \r\n {t('pi_patient_status')}:\r\n \r\n }\r\n label={t('pi_recovered_from_injury') as string}\r\n />\r\n }\r\n label={\r\n t('pi_recovered_with_impairment') as string\r\n }\r\n />\r\n }\r\n label={t('pi_under_treatment') as string}\r\n />\r\n }\r\n label={t('pi_unknown') as string}\r\n />\r\n \r\n \r\n {errors.currentPatientStatus}\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n\r\n \r\n handleSubmit()}\r\n >\r\n {t('continue')}\r\n \r\n\r\n {\r\n dispatch(setPatientInfo(data))\r\n\r\n const defaulted = (complaint.generalComplaint.wasAnotherImplantPlaced === 'YES' && complaint.complaintType.location === '4_CLINIC_DURING_PROCEDURE')\r\n\r\n dispatch(setTreatmentDates({\r\n ...complaint.treatmentDates,\r\n wasProductRemoved: defaulted ? '' : complaint.treatmentDates.wasProductRemoved,\r\n dateProductWasRemoved: defaulted ? null : complaint.treatmentDates.dateProductWasRemoved,\r\n }))\r\n }}/>\r\n\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default PatientInfo\r\n","import React, {useContext, useEffect, useState} from 'react'\r\nimport {\r\n Button,\r\n CircularProgress,\r\n FormControl,\r\n FormControlLabel,\r\n FormHelperText,\r\n FormLabel,\r\n Grid,\r\n InputAdornment,\r\n Radio,\r\n RadioGroup,\r\n Stack,\r\n TextField,\r\n Typography,\r\n} from '@mui/material'\r\nimport CheckIcon from '@mui/icons-material/Check'\r\nimport {AppContext} from '../../contexts/AppContextProvider'\r\nimport {CancelButton, PreviousButton} from '../StepperButtons'\r\nimport {AbutmentsInfoState, MaterialResponse} from '../../contexts/types'\r\nimport {useForm} from '../../hooks/useForm'\r\nimport axios from 'axios'\r\nimport http from '../../http'\r\nimport {OrgCustomizationContext} from \"../../themes/OrgCustomizationProvider\";\r\nimport {setAbutmentsInfo} from \"../../contexts/AbutmentsInfoReducer\";\r\nimport UseTheHackiestPageNavigation from \"../../hooks/useTheHackiestPageNavigation\";\r\n\r\nconst AbutmentsInformation: React.FC = () => {\r\n const {navigateForward} = UseTheHackiestPageNavigation()\r\n const {\r\n complaint,\r\n dispatch,\r\n customerNumber,\r\n countryCode,\r\n postNotification,\r\n clearNotification\r\n } = useContext(AppContext)\r\n const {t} = useContext(OrgCustomizationContext)\r\n\r\n // Article Number\r\n const [isValidatingArticleNum, setIsValidatingArticleNum] =\r\n useState(false)\r\n const [isArticleNumValid, setIsArticleNumValid] = useState(true)\r\n const articleNumInitialValue: string = complaint.abutmentsInfo.articleNumber as string\r\n\r\n // Batch Number\r\n const [isValidatingBatchNum, setIsValidatingBatchNum] =\r\n useState(false)\r\n const [isBatchNumValid, setIsBatchNumValid] = useState(true)\r\n const batchNumInitialValue: string = complaint.abutmentsInfo.batchOrLotNumber as string\r\n\r\n const [showBatchNumCheck, setShowBatchNumCheck] = useState(false)\r\n const required = {value: true, message: t('this_field_is_required')}\r\n const {\r\n data,\r\n errors,\r\n handleChangeEvent,\r\n validateFields,\r\n enableOnChangeValidation,\r\n } = useForm({\r\n initialValues: {\r\n ...complaint.abutmentsInfo,\r\n },\r\n validations: {\r\n implantBrandUsed: {required},\r\n },\r\n })\r\n\r\n const navigateToNextScreen = () => {\r\n navigateForward()\r\n }\r\n \r\n // Validate article number\r\n useEffect(() => {\r\n const cancelTokenSource = axios.CancelToken.source()\r\n const articleNum = data.articleNumber\r\n\r\n const validateArticleNum = async (articleNum: string) => {\r\n try {\r\n setIsValidatingArticleNum(true)\r\n\r\n const response = await http.get(`/api/Product/Validate?material=${data.articleNumber}&customerNumber=${customerNumber}&countryCode=${countryCode}`, {cancelToken: cancelTokenSource.token})\r\n\r\n setIsArticleNumValid(response.data.materialList.some(m => m.materialReturnCode === '200'))\r\n setIsValidatingArticleNum(false)\r\n } catch (e) {\r\n }\r\n }\r\n\r\n if (articleNum) {\r\n if (articleNum !== articleNumInitialValue) {\r\n validateArticleNum(articleNum)\r\n } else {\r\n setIsArticleNumValid(true)\r\n setIsValidatingArticleNum(false)\r\n }\r\n } else {\r\n setIsArticleNumValid(true)\r\n setIsValidatingArticleNum(false)\r\n data.batchOrLotNumber = ''\r\n setShowBatchNumCheck(false)\r\n }\r\n\r\n return () => {\r\n cancelTokenSource.cancel()\r\n }\r\n }, [data.articleNumber, articleNumInitialValue])\r\n\r\n const handleBatchNumberBlur = () => {\r\n\r\n const cancelTokenSource = axios.CancelToken.source()\r\n const batchNum = data.batchOrLotNumber\r\n\r\n const validateBatchNum = async (batchNum: string) => {\r\n try {\r\n setIsValidatingBatchNum(true)\r\n\r\n const response = await http.get(`/api/Product/Validate?material=${data.articleNumber}&batch=${batchNum}&customerNumber=${customerNumber}&countryCode=${countryCode}`, {cancelToken: cancelTokenSource.token})\r\n\r\n setIsBatchNumValid(response.data.materialList.some(m => m.batchReturnCode === '300'))\r\n setShowBatchNumCheck(response.data.materialList.some(m => m.batchReturnCode === '300'))\r\n\r\n setIsValidatingBatchNum(false)\r\n } catch (e) {\r\n }\r\n }\r\n\r\n if (isArticleNumValid && batchNum) {\r\n if (batchNum !== batchNumInitialValue) {\r\n validateBatchNum(batchNum)\r\n } else {\r\n setIsBatchNumValid(true)\r\n setShowBatchNumCheck(true)\r\n setIsValidatingBatchNum(false)\r\n }\r\n } else {\r\n setIsBatchNumValid(true)\r\n setShowBatchNumCheck(false)\r\n setIsValidatingBatchNum(false)\r\n }\r\n\r\n return () => {\r\n cancelTokenSource.cancel()\r\n }\r\n }\r\n\r\n const handleSubmit = () => {\r\n // Activate field level validation tracking\r\n enableOnChangeValidation(true)\r\n\r\n // Validate the form fields\r\n let isFormValid = validateFields(data)\r\n if (isFormValid) {\r\n isFormValid = isArticleNumValid\r\n if (isFormValid) {\r\n isFormValid = isBatchNumValid\r\n }\r\n }\r\n\r\n // Stop processing if the form has invalid fields\r\n if (!isFormValid) {\r\n postNotification('error', t('error_mess'))\r\n return\r\n }\r\n\r\n // Form is valid, proceed with processing\r\n\r\n // Close the alert message in case it is open\r\n clearNotification()\r\n\r\n // Package up the form data and update app state\r\n const abutmentsInfo: AbutmentsInfoState = {\r\n ...data,\r\n batchOrLotNumber:\r\n isBatchNumValid && isArticleNumValid\r\n ? data.batchOrLotNumber\r\n : '',\r\n }\r\n \r\n dispatch(setAbutmentsInfo(abutmentsInfo))\r\n\r\n navigateToNextScreen()\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {t('ai_abutments_information')}\r\n \r\n\r\n \r\n {t('ai_which_implant')}\r\n \r\n }\r\n label={t('ai_original_nobel_biocare') as string}\r\n />\r\n }\r\n label={t('ai_unknown') as string}\r\n />\r\n }\r\n label={t('ai_non_nobel_biocare') as string}\r\n />\r\n \r\n \r\n {errors.implantBrandUsed}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {t('ai_article_number')} (\r\n {t('optional').toLowerCase()}):\r\n \r\n \r\n {isValidatingArticleNum && (\r\n \r\n )}\r\n {!isValidatingArticleNum &&\r\n isArticleNumValid &&\r\n data.articleNumber ? (\r\n \r\n ) : null}\r\n \r\n ),\r\n }}\r\n />\r\n \r\n \r\n\r\n {isArticleNumValid &&\r\n !!data.articleNumber &&\r\n !isValidatingArticleNum && (\r\n \r\n \r\n \r\n {t('ai_batch_lot_number')} (\r\n {t('optional').toLowerCase()}):\r\n \r\n \r\n {isValidatingBatchNum && (\r\n \r\n )}\r\n {showBatchNumCheck &&\r\n !isValidatingBatchNum &&\r\n isBatchNumValid &&\r\n data.batchOrLotNumber && (\r\n \r\n )}\r\n \r\n ),\r\n }}\r\n onBlur={handleBatchNumberBlur}\r\n />\r\n \r\n \r\n )}\r\n \r\n\r\n \r\n handleSubmit()}\r\n >\r\n {t('continue')}\r\n \r\n\r\n dispatch(setAbutmentsInfo(data))} />\r\n\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default AbutmentsInformation\r\n","import React, {useContext} from 'react'\r\nimport {Box, Button, FormControl, FormHelperText, FormLabel, Grid, Stack, TextField, Typography,} from '@mui/material'\r\nimport {AppContext} from '../../contexts/AppContextProvider'\r\nimport {CancelButton, PreviousButton} from '../StepperButtons'\r\nimport {useForm} from '../../hooks/useForm'\r\nimport {InstrumentInfoState} from '../../contexts/types'\r\nimport {OrgCustomizationContext} from \"../../themes/OrgCustomizationProvider\";\r\nimport {setInstrumentInfo} from \"../../contexts/InstrumentInfoReducer\";\r\nimport UseTheHackiestPageNavigation from \"../../hooks/useTheHackiestPageNavigation\";\r\n\r\nconst InstrumentInformation: React.FC = () => {\r\n const {navigateForward} = UseTheHackiestPageNavigation()\r\n const {complaint, dispatch, postNotification, clearNotification} = useContext(AppContext)\r\n const {t} = useContext(OrgCustomizationContext)\r\n\r\n const {\r\n data,\r\n errors,\r\n handleChange,\r\n validateFields,\r\n enableOnChangeValidation,\r\n } = useForm({\r\n initialValues: {\r\n ...complaint.instrumentInfo,\r\n },\r\n validations: {\r\n numberOfTimesUsed: {\r\n required: {\r\n value: (value, data) => {\r\n if (data.numberOfTimesUsed || data.ageOfDevice) {\r\n return true\r\n }\r\n return false\r\n },\r\n message: t('ii_at_least_one_field_is_required'),\r\n },\r\n },\r\n },\r\n })\r\n\r\n const navigateToNextScreen = () => {\r\n navigateForward()\r\n }\r\n\r\n const handleTimesChange = (value: string) => {\r\n const re = /^[0-9]*$/\r\n const match = re.test(value)\r\n if (match) {\r\n handleChange('numberOfTimesUsed', value)\r\n }\r\n }\r\n\r\n const handleAgeChange = (value: string) => {\r\n const re = /^(\\d{0,3})$/\r\n const match = re.test(value)\r\n if (match) {\r\n handleChange('ageOfDevice', value)\r\n }\r\n }\r\n\r\n const handleSubmit = () => {\r\n // Activate field level validation tracking\r\n enableOnChangeValidation(true)\r\n\r\n // Validate the form fields\r\n const isFormValid = validateFields(data)\r\n\r\n // Stop processing if the form has invalid fields\r\n if (!isFormValid) {\r\n postNotification('error', t('error_mess'))\r\n return\r\n }\r\n\r\n // Form is valid, proceed with processing\r\n\r\n // Close the alert message in case it is open\r\n clearNotification()\r\n\r\n // Package up the form data and update app state\r\n const instrumentInfo: InstrumentInfoState = {\r\n ...data,\r\n }\r\n\r\n dispatch(setInstrumentInfo(instrumentInfo))\r\n\r\n navigateToNextScreen()\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {t('ii_instrument_information')}\r\n \r\n\r\n \r\n \r\n {t('ii_how_many_times')}\r\n \r\n \r\n \r\n \r\n \r\n {t('ii_number_of_times')}:\r\n \r\n handleTimesChange(e.target.value)}\r\n />\r\n \r\n \r\n \r\n {t('or').toUpperCase()}\r\n \r\n
\r\n \r\n \r\n {t('ii_age_of_device')}:\r\n \r\n handleAgeChange(e.target.value)}\r\n />\r\n \r\n \r\n \r\n {errors.numberOfTimesUsed}\r\n \r\n \r\n\r\n \r\n handleSubmit()}\r\n >\r\n {t('continue')}\r\n \r\n\r\n dispatch(setInstrumentInfo(data))} />\r\n\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default InstrumentInformation\r\n","import {\r\n FormControl,\r\n FormControlLabel,\r\n FormHelperText,\r\n FormLabel,\r\n Radio,\r\n RadioGroup,\r\n SxProps,\r\n Theme\r\n} from \"@mui/material\";\r\nimport React from \"react\";\r\n\r\ntype CNBSRadioGroupInputProps = {\r\n label: string\r\n formControlSx?: SxProps,\r\n value: string,\r\n onChange: (event: React.ChangeEvent, value: string) => void,\r\n options: { value: string, label: string }[]\r\n error?: string\r\n disabled?: boolean\r\n}\r\n\r\nfunction CNBSRadioGroupInput({label, formControlSx, value, onChange, options, error, disabled = false}: CNBSRadioGroupInputProps) {\r\n return (\r\n \r\n {label}\r\n\r\n \r\n {options.map(o => }\r\n label={o.label}\r\n />)}\r\n \r\n\r\n {error}\r\n \r\n )\r\n}\r\n\r\nexport default CNBSRadioGroupInput\r\n","import {useContext} from 'react'\r\nimport {OrgCustomizationContext} from \"../themes/OrgCustomizationProvider\";\r\n\r\nconst useDefaultRadioOptions = () => {\r\n const {t} = useContext(OrgCustomizationContext)\r\n\r\n return {\r\n yesNoRadioOptions: [\r\n {value: 'YES', label: t('option_yes')},\r\n {value: 'NO', label: t('option_no')},\r\n ]\r\n }\r\n}\r\n\r\nexport default useDefaultRadioOptions\r\n","import {\r\n Alert,\r\n Button,\r\n Checkbox,\r\n FormControl,\r\n FormControlLabel,\r\n FormGroup,\r\n FormHelperText,\r\n FormLabel,\r\n Grid,\r\n Stack,\r\n TextField,\r\n Typography,\r\n} from '@mui/material'\r\nimport React, {useContext, useState} from 'react'\r\nimport {AppContext} from '../../contexts/AppContextProvider'\r\nimport {AvailableToReturnState} from '../../contexts/types'\r\nimport {useForm} from '../../hooks/useForm'\r\nimport {CancelButton, PreviousButton} from '../StepperButtons'\r\nimport {OrgCustomizationContext} from \"../../themes/OrgCustomizationProvider\";\r\nimport {setAvailableToReturn} from \"../../contexts/AvailableToReturnReducer\";\r\nimport CNBSRadioGroupInput from \"../Inputs/CNBSRadioGroupInput\";\r\nimport useDefaultRadioOptions from \"../../hooks/useDefaultRadioOptions\";\r\nimport ProductSearchInput from \"../Inputs/ProductSearchInput\";\r\nimport SelectedProductDisplay from \"../SelectedProductDisplay\";\r\nimport {setMainProductReplacement, setSecondaryDeviceReplacement} from \"../../contexts/ReplacementsReducer\";\r\nimport UseTheHackiestPageNavigation from \"../../hooks/useTheHackiestPageNavigation\";\r\nimport {db} from \"../../lib/db\";\r\nimport {useLiveQuery} from \"dexie-react-hooks\";\r\n\r\nconst AvailableToReturn: React.FC = () => {\r\n const {navigateForward} = UseTheHackiestPageNavigation()\r\n const {complaint, dispatch, postNotification, clearNotification} = useContext(AppContext)\r\n const {t, questionsConfiguration} = useContext(OrgCustomizationContext)\r\n const {yesNoRadioOptions} = useDefaultRadioOptions()\r\n const required = {value: true, message: t('this_field_is_required')}\r\n const [fileSelectionError, setFileSelectionError] = useState('')\r\n const {\r\n data,\r\n errors,\r\n handleChangeEvent,\r\n handleChange,\r\n validateFields,\r\n enableOnChangeValidation,\r\n } = useForm({\r\n initialValues: {\r\n ...complaint.availableToReturn,\r\n },\r\n validations: {\r\n canItemBeReturned: {required},\r\n confirmDecontamination: {\r\n required: {\r\n value: (value, data) => {\r\n return !(\r\n data.canItemBeReturned === 'YES' &&\r\n !data.confirmDecontamination\r\n )\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n reasonItemCannotBeReturned: {\r\n required: {\r\n value: (value, data) => {\r\n return !(\r\n data.canItemBeReturned === 'NO' &&\r\n !data.reasonItemCannotBeReturned.trim()\r\n )\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n attachmentId: {\r\n required: {\r\n value: (value, data) => {\r\n return !(\r\n (questionsConfiguration.browse_for_photos?.required && data.canItemBeReturned === 'NO') &&\r\n !data.attachmentId\r\n )\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n },\r\n })\r\n const currentAttachment = useLiveQuery(() => data.attachmentId ? db.attachments.get(data.attachmentId) : undefined, [data.attachmentId])\r\n\r\n const navigateToNextScreen = () => navigateForward()\r\n\r\n const handleSubmit = () => {\r\n // Activate field level validation tracking\r\n enableOnChangeValidation(true)\r\n\r\n // Validate the form fields\r\n const isFormValid = validateFields(data)\r\n\r\n // Stop processing if the form has invalid fields\r\n if (!isFormValid ||\r\n (complaint.generalComplaint.isReplacementNeeded === 'YES' && !complaint.replacements.selectedMainProductReplacement) ||\r\n (complaint.secondaryDevice.isReplacementNeeded === 'YES' && !complaint.replacements.selectedSecondaryDeviceReplacement)\r\n ) {\r\n postNotification('error', t('error_mess'))\r\n return\r\n }\r\n\r\n // Form is valid, proceed with processing\r\n\r\n // Close the alert message in case it is open\r\n clearNotification()\r\n\r\n // Clear attachment if the user has selected yes\r\n if (complaint.availableToReturn.canItemBeReturned === 'NO') {\r\n if (data.canItemBeReturned === 'YES') {\r\n data.attachmentId = undefined\r\n }\r\n }\r\n\r\n // Package up the form data and update app state\r\n const availableToReturn: AvailableToReturnState = {\r\n ...data,\r\n confirmDecontamination:\r\n data.canItemBeReturned === 'YES'\r\n ? data.confirmDecontamination\r\n : false,\r\n reasonItemCannotBeReturned:\r\n data.canItemBeReturned === 'NO'\r\n ? data.reasonItemCannotBeReturned\r\n : '',\r\n }\r\n\r\n dispatch(setAvailableToReturn(availableToReturn))\r\n\r\n navigateToNextScreen()\r\n }\r\n\r\n const hiddenFileInput = React.useRef(null)\r\n\r\n const handleUploadClick = (e: React.MouseEvent) => {\r\n if (hiddenFileInput) {\r\n hiddenFileInput!.current!.click()\r\n }\r\n }\r\n\r\n const handleFileInputChange = async (e: React.ChangeEvent) => {\r\n setFileSelectionError('')\r\n\r\n if (e.target.files) {\r\n if (e.target.files[0]?.size > (5 * 1048576)) { // binary 5MB\r\n setFileSelectionError(t('multi_image_file_too_large', {\r\n filename: e.target.files[0].name,\r\n maxSizeInMb: '5'\r\n }))\r\n return\r\n }\r\n\r\n if (currentAttachment) {\r\n await db.attachments.delete(currentAttachment.id)\r\n }\r\n\r\n data.attachmentId = await db.attachments.add({\r\n name: e.target.files[0].name,\r\n content: e.target.files[0],\r\n tag: 'xray'\r\n })\r\n\r\n validateFields(data)\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n {/**/}\r\n \r\n {t('atr_available_to_return')}\r\n \r\n\r\n \r\n\r\n {data.canItemBeReturned === 'YES' && (\r\n \r\n \r\n handleChange('confirmDecontamination', e.target.checked)}/>}\r\n label={t('atr_confirm_decontamination')}/>\r\n \r\n \r\n {errors.confirmDecontamination}\r\n \r\n \r\n )}\r\n\r\n {data.canItemBeReturned === 'NO' && (\r\n <>\r\n \r\n \r\n {t('atr_please_give_a_reason')}:\r\n \r\n \r\n \r\n \r\n {t('atr_if_implant_not_available')}\r\n \r\n\r\n {/*Attachment*/}\r\n {\r\n questionsConfiguration.browse_for_photos?.show &&\r\n <>\r\n \r\n \r\n \r\n {t('atr_browse_for_photos')}:\r\n \r\n \r\n \r\n\r\n \r\n {t('upload')}\r\n \r\n \r\n \r\n <>\r\n {!!errors.attachmentId && (\r\n \r\n {errors.attachmentId}\r\n \r\n )}\r\n \r\n \r\n }\r\n\r\n {\r\n questionsConfiguration.browse_for_photos?.show &&\r\n fileSelectionError &&\r\n {fileSelectionError}\r\n }\r\n \r\n )}\r\n\r\n {complaint.generalComplaint.isReplacementNeeded === 'YES' && (\r\n <>\r\n \r\n \r\n {t('mpr_main_product_replacement')}\r\n \r\n \r\n\r\n {!complaint.replacements.selectedMainProductReplacement && dispatch(setMainProductReplacement(product))}\r\n />}\r\n\r\n {complaint.replacements.selectedMainProductReplacement && dispatch(setMainProductReplacement(undefined))}>\r\n {t('click_here_to_change_article_number')}\r\n }\r\n />}\r\n \r\n )}\r\n\r\n {complaint.secondaryDevice.isReplacementNeeded === 'YES' && (\r\n <>\r\n \r\n \r\n {t('spr_secondary_product_replacement')}\r\n \r\n \r\n\r\n {!complaint.replacements.selectedSecondaryDeviceReplacement && dispatch(setSecondaryDeviceReplacement(product))}\r\n />}\r\n\r\n {complaint.replacements.selectedSecondaryDeviceReplacement && dispatch(setSecondaryDeviceReplacement(undefined))}>\r\n {t('click_here_to_change_article_number')}\r\n }\r\n />}\r\n \r\n )}\r\n \r\n\r\n \r\n handleSubmit()}\r\n >\r\n {t('continue')}\r\n \r\n\r\n dispatch(setAvailableToReturn(data))}/>\r\n\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default AvailableToReturn\r\n","import { ProductTypeOptions } from '../contexts/types'\r\n\r\nexport type IsOneOfFn = (arr: T[], item: T) => boolean\r\n\r\nconst productTypeIsOneOf: IsOneOfFn = (\r\n productTypeArr,\r\n productType\r\n) => {\r\n return productTypeArr.includes(productType)\r\n}\r\n\r\nexport default productTypeIsOneOf\r\n","import {\r\n Alert,\r\n FormControl,\r\n FormControlLabel,\r\n FormHelperText,\r\n FormLabel,\r\n Radio,\r\n RadioGroup,\r\n TextField,\r\n Theme,\r\n Typography,\r\n} from '@mui/material'\r\nimport createStyles from '@mui/styles/createStyles'\r\nimport makeStyles from '@mui/styles/makeStyles'\r\nimport React, {useContext} from 'react'\r\nimport { Trans } from 'react-i18next'\r\nimport {\r\n ClinicalConditionState,\r\n ComplaintState,\r\n ProductTypeOptions,\r\n} from '../../../contexts/types'\r\nimport { ErrorRecord } from '../../../hooks/useForm'\r\nimport productTypeIsOneOf from '../../../lib/productTypeIsOneOf'\r\nimport {OrgCustomizationContext} from \"../../../themes/OrgCustomizationProvider\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n alertFormLabel: {\r\n color: 'rgb(102, 60, 0)',\r\n '&.Mui-focused': {\r\n color: 'rgb(102, 60, 0)',\r\n },\r\n },\r\n })\r\n)\r\n\r\ntype PermanentOptionsProps = {\r\n data: ClinicalConditionState\r\n errors: ErrorRecord\r\n complaint: ComplaintState\r\n handleChange: (\r\n fieldName: keyof ClinicalConditionState,\r\n value: string\r\n ) => void\r\n}\r\n\r\nconst PermanentOptions: React.FC = ({\r\n data,\r\n errors,\r\n complaint,\r\n handleChange,\r\n}) => {\r\n const classes = useStyles()\r\n const { t, tns } = useContext(OrgCustomizationContext)\r\n const productType: ProductTypeOptions = complaint.generalComplaint\r\n .productType as ProductTypeOptions\r\n\r\n return (\r\n <>\r\n \r\n \r\n -\r\n \r\n -\r\n \r\n -\r\n \r\n \r\n {productTypeIsOneOf(\r\n ['IMPLANT', 'ABUTMENT', 'SCREW', 'CLINICAL_INSTRUMENT'],\r\n productType\r\n ) && (\r\n }\r\n label={t('cci_option_death') as string}\r\n />\r\n )}\r\n\r\n {productTypeIsOneOf(\r\n ['IMPLANT', 'CLINICAL_INSTRUMENT'],\r\n productType\r\n ) && (\r\n }\r\n label={t('cci_option_nerve_injury_symptoms') as string}\r\n />\r\n )}\r\n\r\n {data.clinicalCondition === 'NERVE_INJURY_SYMPTOMS' && (\r\n \r\n \r\n \r\n {t('cci_were_nerve_symptoms_alleviated')}\r\n \r\n \r\n handleChange(\r\n 'wereNerveSymptomsAlleviated',\r\n e.target.value\r\n )\r\n }\r\n >\r\n }\r\n label='Yes'\r\n />\r\n }\r\n label='No'\r\n />\r\n \r\n \r\n {errors.wereNerveSymptomsAlleviated}\r\n \r\n \r\n \r\n )}\r\n\r\n {productTypeIsOneOf(\r\n ['IMPLANT', 'ABUTMENT', 'SCREW', 'CLINICAL_INSTRUMENT'],\r\n productType\r\n ) && (\r\n <>\r\n }\r\n label={t('cci_option_permanent_impairment') as string}\r\n />\r\n\r\n {data.clinicalCondition === 'PERMANENT_IMPAIRMENT' && (\r\n \r\n handleChange(\r\n 'permanentImpairmentExplanation',\r\n e.target.value\r\n )\r\n }\r\n />\r\n )}\r\n \r\n )}\r\n\r\n {productTypeIsOneOf(\r\n ['IMPLANT', 'ABUTMENT', 'CLINICAL_INSTRUMENT'],\r\n productType\r\n ) && (\r\n }\r\n label={t('cci_option_permanent_pain') as string}\r\n />\r\n )}\r\n\r\n }\r\n label={t('cci_option_other') as string}\r\n />\r\n\r\n {data.clinicalCondition === 'OTHER' && (\r\n \r\n handleChange('otherExplanation', e.target.value)\r\n }\r\n />\r\n )}\r\n\r\n }\r\n label={t('cci_option_none_of_the_above') as string}\r\n />\r\n \r\n )\r\n}\r\n\r\nexport default PermanentOptions\r\n","import {\r\n Alert,\r\n FormControl,\r\n FormControlLabel,\r\n FormHelperText,\r\n FormLabel,\r\n Radio,\r\n RadioGroup,\r\n TextField,\r\n Theme,\r\n Typography,\r\n} from '@mui/material'\r\nimport createStyles from '@mui/styles/createStyles'\r\nimport makeStyles from '@mui/styles/makeStyles'\r\nimport React, {useContext} from 'react'\r\nimport {Trans} from 'react-i18next'\r\nimport {ClinicalConditionState, ComplaintState, ProductTypeOptions,} from '../../../contexts/types'\r\nimport productTypeIsOneOf from '../../../lib/productTypeIsOneOf'\r\nimport {ErrorRecord} from '../../../hooks/useForm'\r\nimport {OrgCustomizationContext} from \"../../../themes/OrgCustomizationProvider\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n alertFormLabel: {\r\n color: 'rgb(102, 60, 0)',\r\n '&.Mui-focused': {\r\n color: 'rgb(102, 60, 0)',\r\n },\r\n },\r\n })\r\n)\r\n\r\ntype TemporaryOptionsProps = {\r\n data: ClinicalConditionState\r\n errors: ErrorRecord\r\n complaint: ComplaintState\r\n handleChange: (\r\n fieldName: keyof ClinicalConditionState,\r\n value: string\r\n ) => void\r\n}\r\n\r\nconst TemporaryOptions: React.FC = ({\r\n data,\r\n errors,\r\n complaint,\r\n handleChange,\r\n}) => {\r\n const classes = useStyles()\r\n const { t, tns } = useContext(OrgCustomizationContext)\r\n const productType: ProductTypeOptions = complaint.generalComplaint\r\n .productType as ProductTypeOptions\r\n\r\n return (\r\n <>\r\n {/* Temporary Conditions */}\r\n \r\n \r\n -\r\n \r\n -\r\n \r\n -\r\n \r\n \r\n }\r\n label={t('cci_option_allergic_reaction') as string}\r\n />\r\n }\r\n label={t('cci_option_aspiration') as string}\r\n />\r\n\r\n {/* Temporary Conditions - Damage of soft tissue or bone */}\r\n \r\n \r\n -\r\n \r\n -\r\n \r\n -\r\n \r\n \r\n\r\n {productTypeIsOneOf(\r\n ['IMPLANT', 'CLINICAL_INSTRUMENT'],\r\n productType\r\n ) && (\r\n }\r\n label={t('cci_option_sinus_perforation') as string}\r\n />\r\n )}\r\n\r\n {productTypeIsOneOf(\r\n ['IMPLANT', 'CLINICAL_INSTRUMENT'],\r\n productType\r\n ) && (\r\n }\r\n label={t('cci_option_bone_fracture') as string}\r\n />\r\n )}\r\n\r\n {productTypeIsOneOf(\r\n ['IMPLANT', 'CLINICAL_INSTRUMENT'],\r\n productType\r\n ) && (\r\n }\r\n label={t('cci_option_abscess') as string}\r\n />\r\n )}\r\n\r\n {productTypeIsOneOf(['IMPLANT'], productType) && (\r\n }\r\n label={t('cci_option_fistula') as string}\r\n />\r\n )}\r\n\r\n {productTypeIsOneOf(\r\n ['IMPLANT', 'CLINICAL_INSTRUMENT'],\r\n productType\r\n ) && (\r\n }\r\n label={t('cci_option_damaging_of_blood_vessels') as string}\r\n />\r\n )}\r\n\r\n {productTypeIsOneOf(\r\n ['IMPLANT', 'ABUTMENT', 'SCREW'],\r\n productType\r\n ) &&\r\n complaint.generalComplaint.wasPatientInvolved !== 'YES' && (\r\n }\r\n label={t('cci_option_hampers_diagnostics') as string}\r\n />\r\n )}\r\n\r\n {/* Applies to all product types */}\r\n }\r\n label={t('cci_option_local_infection') as string}\r\n />\r\n\r\n {productTypeIsOneOf(['IMPLANT'], productType) && (\r\n }\r\n label={t('cci_option_osteomyelitis') as string}\r\n />\r\n )}\r\n\r\n {productTypeIsOneOf(['IMPLANT'], productType) && (\r\n }\r\n label={\r\n t(\r\n 'cci_option_revision_surgery_implant_extraction'\r\n ) as string\r\n }\r\n />\r\n )}\r\n\r\n {productTypeIsOneOf(\r\n ['IMPLANT', 'ABUTMENT', 'SCREW'],\r\n productType\r\n ) && (\r\n }\r\n label={\r\n t(\r\n 'cci_option_revision_surgery_assembly_abutment_implant'\r\n ) as string\r\n }\r\n />\r\n )}\r\n\r\n {/* Applies to all product types */}\r\n }\r\n label={t('cci_option_local_inflammation') as string}\r\n />\r\n\r\n {productTypeIsOneOf(\r\n ['IMPLANT', 'ABUTMENT', 'CLINICAL_INSTRUMENT'],\r\n productType\r\n ) && (\r\n }\r\n label={t('cci_option_transient_pain') as string}\r\n />\r\n )}\r\n\r\n {data.clinicalCondition === 'TRANSIENT_PAIN' && (\r\n \r\n \r\n \r\n {t('cci_has_pain_disappeared')}\r\n \r\n \r\n handleChange(\r\n 'hasPainDisappeared',\r\n e.target.value\r\n )\r\n }\r\n >\r\n }\r\n label='Yes'\r\n />\r\n }\r\n label='No'\r\n />\r\n \r\n \r\n {errors.hasPainDisappeared}\r\n \r\n \r\n \r\n )}\r\n\r\n {productTypeIsOneOf(\r\n ['IMPLANT', 'ABUTMENT', 'CLINICAL_INSTRUMENT'],\r\n productType\r\n ) && (\r\n }\r\n label={t('cci_option_numbness') as string}\r\n />\r\n )}\r\n\r\n {data.clinicalCondition === 'NUMBNESS' && (\r\n \r\n \r\n \r\n {t('cci_has_numbness_disappeared')}\r\n \r\n \r\n handleChange(\r\n 'hasNumbnessDisappeared',\r\n e.target.value\r\n )\r\n }\r\n >\r\n }\r\n label='Yes'\r\n />\r\n }\r\n label='No'\r\n />\r\n \r\n \r\n {errors.hasNumbnessDisappeared}\r\n \r\n \r\n \r\n )}\r\n\r\n {productTypeIsOneOf(\r\n ['IMPLANT', 'ABUTMENT', 'SCREW', 'CLINICAL_INSTRUMENT'],\r\n productType\r\n ) && (\r\n <>\r\n }\r\n label={t('cci_option_prolonged_surgery') as string}\r\n />\r\n\r\n {data.clinicalCondition === 'PROLONGED_SURGERY' && (\r\n \r\n handleChange(\r\n 'prolongedSurgeryExplanation',\r\n e.target.value\r\n )\r\n }\r\n />\r\n )}\r\n \r\n )}\r\n\r\n }\r\n label={t('cci_option_prolonged_treatment_time') as string}\r\n />\r\n\r\n {data.clinicalCondition === 'PROLONGED_TREATMENT_TIME' && (\r\n \r\n handleChange(\r\n 'prolongedTreatmentExplanation',\r\n e.target.value\r\n )\r\n }\r\n />\r\n )}\r\n\r\n {productTypeIsOneOf(\r\n ['IMPLANT', 'ABUTMENT', 'SCREW', 'CLINICAL_INSTRUMENT'],\r\n productType\r\n ) && (\r\n }\r\n label={t('cci_option_swallowing_medical_device') as string}\r\n />\r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default TemporaryOptions\r\n","import React, {useContext} from 'react'\r\nimport {Button, FormControl, FormHelperText, Grid, RadioGroup, Stack, Typography,} from '@mui/material'\r\nimport {AppContext} from '../../../contexts/AppContextProvider'\r\nimport {CancelButton, PreviousButton} from '../../StepperButtons'\r\nimport {ClinicalConditionState, ProductTypeOptions,} from '../../../contexts/types'\r\nimport PermanentOptions from './PermanentOptions'\r\nimport TemporaryOptions from './TemporaryOptions'\r\nimport {Trans} from 'react-i18next'\r\nimport {useForm} from '../../../hooks/useForm'\r\nimport {OrgCustomizationContext} from \"../../../themes/OrgCustomizationProvider\";\r\nimport {setClinicalCondition} from \"../../../contexts/ClinicalConditionReducer\";\r\nimport useTheHackiestPageNavigation from \"../../../hooks/useTheHackiestPageNavigation\";\r\n\r\nconst ClinicalCondition: React.FC = () => {\r\n const { navigateForward } = useTheHackiestPageNavigation()\r\n const { complaint, dispatch, postNotification, clearNotification } = useContext(AppContext)\r\n const { t, tns } = useContext(OrgCustomizationContext)\r\n\r\n const productType = complaint.generalComplaint.productType as ProductTypeOptions\r\n const required = { value: true, message: t('this_field_is_required') }\r\n const {\r\n data,\r\n errors,\r\n handleChange,\r\n validateFields,\r\n enableOnChangeValidation,\r\n } = useForm({\r\n initialValues: {\r\n ...complaint.clinicalCondition,\r\n },\r\n validations: {\r\n clinicalCondition: { required },\r\n hasPainDisappeared: {\r\n required: {\r\n value: (value, data) => {\r\n return !(\r\n data.clinicalCondition === 'TRANSIENT_PAIN' &&\r\n data.hasPainDisappeared === ''\r\n )\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n hasNumbnessDisappeared: {\r\n required: {\r\n value: (value, data) => {\r\n return !(\r\n data.clinicalCondition === 'NUMBNESS' &&\r\n data.hasNumbnessDisappeared === ''\r\n )\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n wereNerveSymptomsAlleviated: {\r\n required: {\r\n value: (value, data) => {\r\n return !(\r\n data.clinicalCondition ===\r\n 'NERVE_INJURY_SYMPTOMS' &&\r\n data.wereNerveSymptomsAlleviated === ''\r\n )\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n permanentImpairmentExplanation: {\r\n required: {\r\n value: (value, data) => {\r\n return !(\r\n data.clinicalCondition === 'PERMANENT_IMPAIRMENT' &&\r\n !data.permanentImpairmentExplanation\r\n )\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n otherExplanation: {\r\n required: {\r\n value: (value, data) => {\r\n return !(\r\n data.clinicalCondition === 'OTHER' &&\r\n !data.otherExplanation\r\n )\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n prolongedSurgeryExplanation: {\r\n required: {\r\n value: (value, data) => {\r\n return !(\r\n data.clinicalCondition === 'PROLONGED_SURGERY' &&\r\n !data.prolongedSurgeryExplanation\r\n )\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n prolongedTreatmentExplanation: {\r\n required: {\r\n value: (value, data) => {\r\n return !(\r\n data.clinicalCondition ===\r\n 'PROLONGED_TREATMENT_TIME' &&\r\n !data.prolongedTreatmentExplanation\r\n )\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n },\r\n })\r\n\r\n const navigateToNextScreen = () => navigateForward()\r\n\r\n const handleSelection = (e: React.ChangeEvent) => {\r\n handleChange('clinicalCondition', e.target.value)\r\n }\r\n\r\n const handleSubmit = () => {\r\n // Activate field level validation tracking\r\n enableOnChangeValidation(true)\r\n\r\n // Validate the form fields\r\n const isFormValid = validateFields(data)\r\n\r\n // Stop processing if the form has invalid fields\r\n if (!isFormValid) {\r\n postNotification('error', t('error_mess'))\r\n return\r\n }\r\n\r\n // Form is valid, proceed with processing\r\n\r\n // Close the alert message in case it is open\r\n clearNotification()\r\n\r\n // Package up the form data and update app state\r\n const clinicalCondition: ClinicalConditionState = {\r\n ...data,\r\n permanentImpairmentExplanation:\r\n data.clinicalCondition === 'PERMANENT_IMPAIRMENT'\r\n ? data.permanentImpairmentExplanation\r\n : '',\r\n otherExplanation:\r\n data.clinicalCondition === 'OTHER' ? data.otherExplanation : '',\r\n prolongedSurgeryExplanation:\r\n data.clinicalCondition === 'PROLONGED_SURGERY'\r\n ? data.prolongedSurgeryExplanation\r\n : '',\r\n prolongedTreatmentExplanation:\r\n data.clinicalCondition === 'PROLONGED_TREATMENT_TIME'\r\n ? data.prolongedTreatmentExplanation\r\n : '',\r\n hasPainDisappeared:\r\n data.clinicalCondition === 'TRANSIENT_PAIN'\r\n ? data.hasPainDisappeared\r\n : '',\r\n hasNumbnessDisappeared:\r\n data.clinicalCondition === 'NUMBNESS'\r\n ? data.hasNumbnessDisappeared\r\n : '',\r\n wereNerveSymptomsAlleviated:\r\n data.clinicalCondition === 'NERVE_INJURY_SYMPTOMS'\r\n ? data.wereNerveSymptomsAlleviated\r\n : '',\r\n }\r\n \r\n dispatch(setClinicalCondition(clinicalCondition))\r\n\r\n navigateToNextScreen()\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {t('cci_clinical_conditions')} -{' '}\r\n {t(`pt_option_${productType.toLowerCase()}`).toLowerCase()}\r\n \r\n\r\n \r\n \r\n -\r\n \r\n -\r\n \r\n -\r\n \r\n :\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n {errors.clinicalCondition}\r\n \r\n \r\n\r\n \r\n handleSubmit()}\r\n >\r\n {t('continue')}\r\n \r\n \r\n dispatch(setClinicalCondition(data))} />\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default ClinicalCondition\r\n","import React, {useContext} from 'react'\r\nimport {Typography, FormControlLabel, Radio} from '@mui/material'\r\nimport {Trans} from 'react-i18next'\r\nimport productTypeIsOneOf from '../../../lib/productTypeIsOneOf'\r\nimport {ComplaintState, ProductTypeOptions} from '../../../contexts/types'\r\nimport isSameDay from 'date-fns/isSameDay'\r\nimport {OrgCustomizationContext} from \"../../../themes/OrgCustomizationProvider\";\r\n\r\ntype OsseointegrationOptionsProps = {\r\n productType: ProductTypeOptions\r\n complaint: ComplaintState\r\n}\r\n\r\nconst OsseointegrationOptions: React.FC = ({\r\n productType,\r\n complaint,\r\n }) => {\r\n const {t, tns} = useContext(OrgCustomizationContext)\r\n\r\n if (complaint.generalComplaint.wasPatientInvolved === 'YES' && complaint.generalComplaint.wasProductPlaced === 'NO') return null;\r\n\r\n return (\r\n <>\r\n {/* Osseointegration */}\r\n {productTypeIsOneOf(['IMPLANT'], productType) && (\r\n <>\r\n \r\n \r\n -\r\n \r\n -\r\n \r\n -\r\n \r\n \r\n\r\n < FormControlLabel\r\n value='WITHIN_365_DAYS'\r\n control={}\r\n label={t('cti_option_within_365_days') as string}\r\n />\r\n\r\n }\r\n label={t('cti_option_more_than_365_days') as string}\r\n />\r\n\r\n {isSameDay(\r\n complaint.complaintType.dateOfOccurrence as Date,\r\n complaint.treatmentDates.dateOfTreatment as Date\r\n ) && (\r\n }\r\n label={t('cti_option_lack_stability') as string}\r\n />\r\n )}\r\n\r\n }\r\n label={t('cti_option_part_migrates') as string}\r\n />\r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default OsseointegrationOptions\r\n","import React, {useContext, useState} from 'react'\r\nimport {Box} from \"@mui/system\";\r\nimport {Alert, Button, FormHelperText, Grid, IconButton, Stack, Typography} from \"@mui/material\";\r\nimport CancelIcon from \"@mui/icons-material/Cancel\";\r\nimport {FileRejection, useDropzone} from \"react-dropzone\";\r\nimport makeStyles from \"@mui/styles/makeStyles\";\r\nimport {Attachment, AttachmentTag, db} from \"../../lib/db\";\r\nimport {useLiveQuery} from \"dexie-react-hooks\";\r\nimport {OrgCustomizationContext} from \"../../themes/OrgCustomizationProvider\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n dropzone: {\r\n background: theme.palette.grey[\"100\"],\r\n border: `1px dashed ${theme.palette.grey[\"600\"]}`,\r\n minHeight: '100px',\r\n padding: theme.spacing(4)\r\n }\r\n}))\r\n\r\nlet lastTimeout: number | null = null;\r\n\r\ntype MultiImageInputProps = {\r\n attachmentIds: number[],\r\n setAttachmentIds: React.Dispatch,\r\n tag: AttachmentTag,\r\n errorText?: string\r\n maxSizeInMb?: number,\r\n}\r\n\r\nconst MultiImageInput: React.FC = ({\r\n attachmentIds,\r\n setAttachmentIds,\r\n tag,\r\n errorText,\r\n maxSizeInMb = 5\r\n }) => {\r\n const {t} = useContext(OrgCustomizationContext)\r\n const [fileErrors, setFileErrors] = useState([])\r\n const images = useLiveQuery(() => db.attachments.bulkGet(attachmentIds), [attachmentIds]);\r\n\r\n const {getRootProps, getInputProps} = useDropzone({\r\n onDrop: async (acceptedFiles: File[], fileRejections) => {\r\n const newIds: number[] = await Promise.all(acceptedFiles.map(async (file) => {\r\n return db.attachments.add({\r\n name: file.name,\r\n content: file,\r\n tag: tag\r\n })\r\n }))\r\n\r\n setAttachmentIds([...attachmentIds, ...newIds])\r\n\r\n setFileErrors(fileRejections)\r\n\r\n lastTimeout && clearTimeout(lastTimeout)\r\n // @ts-ignore\r\n lastTimeout = setTimeout(() => {\r\n setFileErrors([])\r\n }, 5000)\r\n },\r\n accept: {\r\n 'image/png': [],\r\n 'image/jpg': [],\r\n 'image/jpeg': [],\r\n },\r\n multiple: true,\r\n maxSize: maxSizeInMb * 1048576 // Byte to MB binary\r\n })\r\n\r\n const classes = useStyles()\r\n\r\n const handleRemoveImage = (image: Attachment) => async () => {\r\n setAttachmentIds(attachmentIds.filter(i => i !== image.id))\r\n await db.attachments.delete(image.id)\r\n }\r\n\r\n const uploadSize = images ? images.reduce((sum, image) => sum + (image?.content.size || 0), 0) / 1024 / 1024 : 0;\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {t('multi_image_prompt')}\r\n \r\n \r\n \r\n \r\n\r\n \r\n {fileErrors?.map(e => \r\n {e.errors.map(x => {\r\n switch (x.code) {\r\n case 'file-invalid-type':\r\n return t('multi_image_invalid_file_type', {filename: e.file.name})\r\n case 'file-too-large':\r\n return t('multi_image_file_too_large', {\r\n filename: e.file.name,\r\n maxSizeInMb: maxSizeInMb.toString()\r\n })\r\n case 'file-too-small':\r\n return t('multi_image_file_too_small', {filename: e.file.name})\r\n case 'too-many-files':\r\n return t('multi_image_too_many_files', {filename: e.file.name})\r\n default:\r\n return t('multi_image_default_error_text', {filename: e.file.name})\r\n }\r\n }).join(',')}\r\n )}\r\n \r\n\r\n \r\n \r\n {images && (images.filter(i => i?.id) as Attachment[]).map((image, i) =>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n\r\n {attachmentIds.length > 0 &&\r\n {t('multi_image_metadata_text', {\r\n fileCount: attachmentIds.length.toString(),\r\n sizeInMb: uploadSize.toFixed(2)\r\n })}\r\n }\r\n\r\n \r\n {errorText}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default MultiImageInput\r\n","import React, {useContext} from 'react'\r\nimport {Alert, FormControlLabel, Radio, Stack, Typography} from '@mui/material'\r\nimport {Trans} from 'react-i18next'\r\nimport productTypeIsOneOf from '../../../lib/productTypeIsOneOf'\r\nimport {ComplaintState, ComplaintTypeOptions, ProductTypeOptions,} from '../../../contexts/types'\r\nimport {OrgCustomizationContext} from \"../../../themes/OrgCustomizationProvider\";\r\nimport MultiImageInput from \"../../Inputs/MultiImageInput\";\r\n\r\ntype LabelingPackagingOptionsProps = {\r\n productType: ProductTypeOptions\r\n selectedOption: ComplaintTypeOptions\r\n complaint: ComplaintState\r\n attachmentIds: number[]\r\n setAttachmentIds: React.Dispatch,\r\n attachmentsError?: string,\r\n}\r\n\r\nconst LabelingPackagingOptions: React.FC = ({\r\n productType,\r\n selectedOption,\r\n complaint,\r\n attachmentIds,\r\n setAttachmentIds,\r\n attachmentsError,\r\n }) => {\r\n const {t, tns, orgIdentifier} = useContext(OrgCustomizationContext)\r\n const eventOccurrence = complaint.complaintType.location\r\n\r\n return (\r\n <>\r\n {/* Label / Packaging */}\r\n \r\n \r\n -\r\n \r\n -\r\n \r\n -\r\n \r\n \r\n\r\n }\r\n label={t('cti_option_foreign_particles') as string}\r\n />\r\n }\r\n label={t('cti_option_label_illegible') as string}\r\n />\r\n }\r\n label={t('cti_option_label_misleading') as string}\r\n />\r\n }\r\n label={t('cti_option_label_information_missing') as string}\r\n />\r\n }\r\n label={t('cti_option_wrong_part_packaged') as string}\r\n />\r\n\r\n {\r\n orgIdentifier === 'Nobel' && selectedOption === 'WRONG_PART_PACKAGED' &&\r\n \r\n {attachmentIds?.length === 0 && \r\n {t('cti_please_include_pictures_of_packaging')}\r\n }\r\n\r\n \r\n \r\n }\r\n\r\n }\r\n label={t('cti_option_sterile_barrier_damaged') as string}\r\n />\r\n\r\n {selectedOption === 'STERILE_BARRIER_DAMAGED' && (\r\n \r\n {t('cti_not_applicable_warning')}\r\n \r\n )}\r\n\r\n }\r\n label={t('cti_option_damage_with_packaging_intact') as string}\r\n />\r\n\r\n {\r\n orgIdentifier === 'Nobel' && selectedOption === 'DAMAGE_WITH_PACKAGING_INTACT' &&\r\n \r\n {attachmentIds?.length === 0 && \r\n {t('cti_please_include_pictures_of_packaging')}\r\n }\r\n\r\n \r\n \r\n }\r\n\r\n }\r\n label={t('cti_option_part_disassembled') as string}\r\n />\r\n\r\n {productTypeIsOneOf(\r\n ['ABUTMENT', 'CLINICAL_INSTRUMENT', 'LAB_INSTRUMENT_LAB_SCREW'],\r\n productType\r\n ) &&\r\n (eventOccurrence === '1_LAB_INITIAL_INSPECTION' ||\r\n eventOccurrence === '2_LAB_DURING_FINALIZATION') && (\r\n }\r\n label={\r\n t(\r\n 'cti_option_inadequate_cleaning_of_part'\r\n ) as string\r\n }\r\n />\r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default LabelingPackagingOptions\r\n","import React, {useContext} from 'react'\r\nimport { Typography, FormControlLabel, Radio } from '@mui/material'\r\nimport { Trans } from 'react-i18next'\r\nimport productTypeIsOneOf from '../../../lib/productTypeIsOneOf'\r\nimport { ComplaintState, ProductTypeOptions } from '../../../contexts/types'\r\nimport {OrgCustomizationContext} from \"../../../themes/OrgCustomizationProvider\";\r\n\r\ntype FitOptionsProps = {\r\n productType: ProductTypeOptions\r\n complaint: ComplaintState\r\n}\r\n\r\nconst FitOptions: React.FC = ({ productType, complaint }) => {\r\n const eventOccurrence = complaint.complaintType.location\r\n const { t, tns } = useContext(OrgCustomizationContext)\r\n\r\n return (\r\n <>\r\n {/* Fit */}\r\n \r\n \r\n -\r\n \r\n -\r\n \r\n -\r\n \r\n \r\n\r\n {productTypeIsOneOf(\r\n ['CLINICAL_INSTRUMENT', 'LAB_INSTRUMENT_LAB_SCREW'],\r\n productType\r\n ) && (\r\n }\r\n label={t('cti_option_functionality_compromised') as string}\r\n />\r\n )}\r\n\r\n {productTypeIsOneOf(['ABUTMENT', 'SCREW'], productType) &&\r\n (eventOccurrence === '4_CLINIC_DURING_PROCEDURE' ||\r\n eventOccurrence === '5_CLINIC_AFTER_PROCEDURE') && (\r\n }\r\n label={\r\n t(\r\n 'cti_option_clinical_prosthetic_screw_loosening'\r\n ) as string\r\n }\r\n />\r\n )}\r\n\r\n {productTypeIsOneOf(\r\n [\r\n 'ABUTMENT',\r\n 'SCREW',\r\n 'CLINICAL_INSTRUMENT',\r\n 'LAB_INSTRUMENT_LAB_SCREW',\r\n ],\r\n productType\r\n ) && (\r\n }\r\n label={t('cti_option_part_disassembly_issue') as string}\r\n />\r\n )}\r\n\r\n {productTypeIsOneOf(\r\n [\r\n 'ABUTMENT',\r\n 'SCREW',\r\n 'CLINICAL_INSTRUMENT',\r\n 'LAB_INSTRUMENT_LAB_SCREW',\r\n ],\r\n productType\r\n ) && (\r\n }\r\n label={t('cti_option_part_assembly_issue') as string}\r\n />\r\n )}\r\n\r\n }\r\n label={t('cti_option_part_not_retained') as string}\r\n />\r\n }\r\n label={t('cti_option_does_not_engage') as string}\r\n />\r\n }\r\n label={t('cti_option_does_not_disengage') as string}\r\n />\r\n }\r\n label={t('cti_option_does_not_fit') as string}\r\n />\r\n \r\n )\r\n}\r\n\r\nexport default FitOptions\r\n","import React, {useContext} from 'react'\r\nimport { Typography, FormControlLabel, Radio } from '@mui/material'\r\nimport { Trans } from 'react-i18next'\r\nimport { ComplaintState } from '../../../contexts/types'\r\nimport {OrgCustomizationContext} from \"../../../themes/OrgCustomizationProvider\";\r\n\r\ntype DamageFractureOptionsProps = {\r\n complaint: ComplaintState\r\n}\r\n\r\nconst DamageFractureOptions: React.FC = ({\r\n complaint,\r\n}) => {\r\n const eventOccurrence = complaint.complaintType.location\r\n const wasPatientInvolved = complaint.generalComplaint.wasPatientInvolved\r\n const { t, tns } = useContext(OrgCustomizationContext)\r\n\r\n return (\r\n <>\r\n {/* Damage / Fracture */}\r\n \r\n \r\n -\r\n \r\n -\r\n \r\n -\r\n \r\n \r\n {wasPatientInvolved === 'YES' &&\r\n (eventOccurrence === '4_CLINIC_DURING_PROCEDURE' ||\r\n eventOccurrence === '5_CLINIC_AFTER_PROCEDURE') && (\r\n }\r\n label={t('cti_option_part_fractured') as string}\r\n />\r\n )}\r\n }\r\n label={t('cti_option_deformed') as string}\r\n />\r\n {['CLINICAL_INSTRUMENT', 'LAB_INSTRUMENT_LAB_SCREW'].includes(complaint.generalComplaint.productType || '') && }\r\n label={t('cti_option_premature_wear') as string}\r\n />}\r\n \r\n )\r\n}\r\n\r\nexport default DamageFractureOptions\r\n","import React, {useContext} from 'react'\r\nimport {\r\n Typography,\r\n FormControlLabel,\r\n Radio,\r\n FormControl,\r\n FormHelperText,\r\n FormLabel,\r\n Stack,\r\n TextField,\r\n} from '@mui/material'\r\nimport {Trans} from 'react-i18next'\r\nimport productTypeIsOneOf from '../../../lib/productTypeIsOneOf'\r\nimport {\r\n ComplaintState,\r\n ComplaintTypeState,\r\n ProductTypeOptions,\r\n YesNoOptions,\r\n} from '../../../contexts/types'\r\nimport {OrgCustomizationContext} from \"../../../themes/OrgCustomizationProvider\";\r\n\r\ntype EstheticOptionsProps = {\r\n productType: ProductTypeOptions\r\n selectedOption: string\r\n handleTextFieldChange: (\r\n fieldName: keyof ComplaintTypeState,\r\n value: string\r\n ) => void\r\n estheticExplanation: string\r\n estheticExplanationError: string\r\n complaint: ComplaintState\r\n}\r\n\r\nconst EstheticOptions: React.FC = ({\r\n productType,\r\n selectedOption,\r\n handleTextFieldChange,\r\n estheticExplanation,\r\n estheticExplanationError,\r\n complaint,\r\n }) => {\r\n const eventOccurrence = complaint.complaintType.location\r\n const wasPatientInvolved = complaint.generalComplaint\r\n .wasPatientInvolved as YesNoOptions\r\n const {t, tns} = useContext(OrgCustomizationContext)\r\n\r\n if (complaint.generalComplaint.wasPatientInvolved === 'YES' && complaint.generalComplaint.wasProductPlaced === 'NO') return null;\r\n\r\n const handleChange = (\r\n e: React.ChangeEvent\r\n ) => {\r\n handleTextFieldChange('estheticExplanation', e.target.value)\r\n }\r\n\r\n return (\r\n <>\r\n {/* Esthetic */}\r\n \r\n \r\n \r\n -\r\n \r\n -\r\n \r\n -\r\n \r\n \r\n\r\n {productTypeIsOneOf(['ABUTMENT'], productType) && (\r\n }\r\n label={t('cti_option_color_mismatching') as string}\r\n />\r\n )}\r\n\r\n {/* \r\n The Event Occurrence can only be 4 or 5 if the Patient Was Involved.\r\n Event Occurrence logic is being shown here for explicitness and code readability.\r\n */}\r\n\r\n {wasPatientInvolved === 'YES' &&\r\n (eventOccurrence === '4_CLINIC_DURING_PROCEDURE' ||\r\n eventOccurrence === '5_CLINIC_AFTER_PROCEDURE') && (\r\n }\r\n label={t('cti_option_shines_through', {productType: t(`pt_option_${productType.toLowerCase()}`)})}\r\n />\r\n )}\r\n\r\n {wasPatientInvolved === 'YES' &&\r\n (eventOccurrence === '4_CLINIC_DURING_PROCEDURE' ||\r\n eventOccurrence === '5_CLINIC_AFTER_PROCEDURE') && (\r\n }\r\n label={t('cti_option_partially_visible', {productType: t(`pt_option_${productType.toLowerCase()}`)})}\r\n />\r\n )}\r\n\r\n {wasPatientInvolved === 'YES' &&\r\n (eventOccurrence === '4_CLINIC_DURING_PROCEDURE' ||\r\n eventOccurrence === '5_CLINIC_AFTER_PROCEDURE') && (\r\n }\r\n label={t('cti_option_other_outcome') as string}\r\n />\r\n )}\r\n\r\n {selectedOption === 'OTHER_OUTCOME' && (\r\n \r\n \r\n {t('cti_please_explain')}:\r\n \r\n \r\n \r\n {/* {errors.wasProductPlaced} */}\r\n \r\n \r\n )}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default EstheticOptions\r\n","import React, {useContext} from 'react'\r\nimport { Typography, FormControlLabel, Radio } from '@mui/material'\r\nimport { ComplaintState } from '../../../contexts/types'\r\nimport {OrgCustomizationContext} from \"../../../themes/OrgCustomizationProvider\";\r\nimport {Trans} from \"react-i18next\";\r\n\r\ntype IFUOptionsProps = {\r\n complaint: ComplaintState\r\n}\r\n\r\nconst IFUOptions: React.FC = ({ complaint }) => {\r\n const eventOccurrence = complaint.complaintType.location\r\n const { t, tns } = useContext(OrgCustomizationContext)\r\n\r\n return (\r\n <>\r\n {/* IFU */}\r\n \r\n \r\n -\r\n \r\n -\r\n \r\n -\r\n \r\n \r\n\r\n {eventOccurrence === '1_LAB_INITIAL_INSPECTION' ||\r\n eventOccurrence === '2_LAB_DURING_FINALIZATION' ||\r\n eventOccurrence === '3_CLINIC_INITIAL_INSPECTION' ? (\r\n }\r\n label={t('cti_option_translation_missing') as string}\r\n />\r\n ) : null}\r\n\r\n {eventOccurrence === '1_LAB_INITIAL_INSPECTION' ||\r\n eventOccurrence === '2_LAB_DURING_FINALIZATION' ||\r\n eventOccurrence === '3_CLINIC_INITIAL_INSPECTION' ? (\r\n }\r\n label={t('cti_option_information_misleading') as string}\r\n />\r\n ) : null}\r\n\r\n {eventOccurrence === '1_LAB_INITIAL_INSPECTION' ||\r\n eventOccurrence === '2_LAB_DURING_FINALIZATION' ||\r\n eventOccurrence === '3_CLINIC_INITIAL_INSPECTION' ||\r\n eventOccurrence === '4_CLINIC_DURING_PROCEDURE' ? (\r\n }\r\n label={t('cti_option_wrong_part') as string}\r\n />\r\n ) : null}\r\n\r\n {eventOccurrence === '1_LAB_INITIAL_INSPECTION' ||\r\n eventOccurrence === '2_LAB_DURING_FINALIZATION' ||\r\n eventOccurrence === '3_CLINIC_INITIAL_INSPECTION' ? (\r\n }\r\n label={t('cti_option_unable_to_distinguish') as string}\r\n />\r\n ) : null}\r\n \r\n )\r\n}\r\n\r\nexport default IFUOptions\r\n","import React, {useContext} from 'react'\r\nimport { TextField, Typography, FormControl, FormControlLabel, FormLabel, Radio } from '@mui/material'\r\nimport { Trans } from 'react-i18next'\r\nimport productTypeIsOneOf from '../../../lib/productTypeIsOneOf'\r\nimport { ComplaintTypeOptions, ComplaintTypeState, ProductTypeOptions } from '../../../contexts/types'\r\nimport {OrgCustomizationContext} from \"../../../themes/OrgCustomizationProvider\";\r\n\r\ntype SurfaceOptionsProps = {\r\n productType: ProductTypeOptions\r\n selectedOption: ComplaintTypeOptions\r\n handleTextFieldChange: (fieldName: keyof ComplaintTypeState, value: string) => void\r\n surfaceDefectExplanation: string | undefined\r\n surfaceDefectExplanationError: string | undefined\r\n}\r\n\r\nconst SurfaceOptions: React.FC = \r\n ({ handleTextFieldChange, productType, selectedOption, surfaceDefectExplanation, surfaceDefectExplanationError }) => {\r\n const { t, tns } = useContext(OrgCustomizationContext)\r\n const handleChange = (\r\n e: React.ChangeEvent\r\n ) => {\r\n handleTextFieldChange('surfaceDefectExplanation', e.target.value)\r\n }\r\n\r\n return (\r\n <>\r\n {/* Surface */}\r\n \r\n \r\n -\r\n \r\n -\r\n \r\n -\r\n \r\n \r\n \r\n \r\n }\r\n label={t('cti_option_discoloration') as string}\r\n />\r\n \r\n }\r\n label={t('cti_option_surface_corroded') as string}\r\n />\r\n }\r\n label={t('cti_option_coating_flaking_off') as string}\r\n />\r\n\r\n {productTypeIsOneOf(\r\n [\r\n 'ABUTMENT',\r\n 'SCREW',\r\n 'CLINICAL_INSTRUMENT',\r\n 'LAB_INSTRUMENT_LAB_SCREW',\r\n ],\r\n productType\r\n ) && (\r\n }\r\n label={t('cti_option_interface_fretting') as string}\r\n />\r\n )}\r\n }\r\n label={t('cti_option_surface_defect') as string}\r\n />\r\n {selectedOption === 'SURFACE_DEFECT' && (\r\n \r\n \r\n {t('cti_please_explain')}:\r\n \r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default SurfaceOptions\r\n","import React, {useContext} from 'react'\r\nimport { Typography, FormControlLabel, Radio } from '@mui/material'\r\nimport productTypeIsOneOf from '../../../lib/productTypeIsOneOf'\r\nimport { ProductTypeOptions } from '../../../contexts/types'\r\nimport {Trans} from \"react-i18next\";\r\nimport {OrgCustomizationContext} from \"../../../themes/OrgCustomizationProvider\";\r\n\r\ntype MRICompatibilityOptionsProps = {\r\n productType: ProductTypeOptions\r\n}\r\n\r\nconst MRICompatibilityOptions: React.FC = ({\r\n productType,\r\n}) => {\r\n const {t, tns} = useContext(OrgCustomizationContext)\r\n \r\n return (\r\n <>\r\n {/* MRI Compatibility */}\r\n \r\n \r\n -\r\n \r\n -\r\n \r\n -\r\n \r\n \r\n\r\n {productTypeIsOneOf(\r\n ['IMPLANT', 'ABUTMENT', 'SCREW'],\r\n productType\r\n ) && (\r\n }\r\n label={t('cti_option_artifiacts_on_image') as string}\r\n />\r\n )}\r\n\r\n {productTypeIsOneOf(\r\n ['IMPLANT', 'ABUTMENT', 'SCREW'],\r\n productType\r\n ) && (\r\n }\r\n label={t('cti_option_deflection') as string}\r\n />\r\n )}\r\n\r\n {productTypeIsOneOf(\r\n ['IMPLANT', 'ABUTMENT', 'SCREW'],\r\n productType\r\n ) && (\r\n }\r\n label={t('cti_option_heating') as string}\r\n />\r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default MRICompatibilityOptions\r\n","import React, {useContext} from 'react'\r\nimport {\r\n Typography,\r\n FormControlLabel,\r\n Radio,\r\n FormControl,\r\n FormLabel,\r\n Stack,\r\n TextField,\r\n} from '@mui/material'\r\nimport { Trans } from 'react-i18next'\r\nimport {\r\n ComplaintTypeState,\r\n LocationOptions,\r\n YesNoOptions,\r\n} from '../../../contexts/types'\r\nimport {OrgCustomizationContext} from \"../../../themes/OrgCustomizationProvider\";\r\n\r\ntype OtherOptionsProps = {\r\n selectedOption: string\r\n handleTextFieldChange: (\r\n fieldName: keyof ComplaintTypeState,\r\n value: string\r\n ) => void\r\n otherExplanation: string\r\n otherExplanationError: string\r\n wasPatientInvolved: YesNoOptions\r\n eventOccurrence: LocationOptions\r\n}\r\n\r\nconst OtherOptions: React.FC = ({\r\n selectedOption,\r\n handleTextFieldChange,\r\n otherExplanation,\r\n otherExplanationError,\r\n wasPatientInvolved,\r\n eventOccurrence,\r\n}) => {\r\n const { t, tns, orgIdentifier } = useContext(OrgCustomizationContext)\r\n const handleChange = (\r\n e: React.ChangeEvent\r\n ) => {\r\n handleTextFieldChange('otherExplanation', e.target.value)\r\n }\r\n\r\n return (\r\n <>\r\n {/* Esthetic */}\r\n \r\n \r\n \r\n -\r\n \r\n -\r\n \r\n -\r\n \r\n \r\n\r\n {wasPatientInvolved === 'YES' &&\r\n (eventOccurrence === '4_CLINIC_DURING_PROCEDURE' ||\r\n eventOccurrence === '5_CLINIC_AFTER_PROCEDURE') ? (\r\n }\r\n label={t('cti_option_trauma') as string}\r\n />\r\n ) : null}\r\n \r\n {orgIdentifier !== 'Nobel' && (\r\n <>\r\n }\r\n label={t('cti_option_other_deficiencies') as string}\r\n />\r\n\r\n {selectedOption === 'OTHER_DEFICIENCIES' && (\r\n \r\n \r\n {t('cti_please_explain')}:\r\n \r\n \r\n {/* \r\n {otherExplanationError}\r\n */}\r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default OtherOptions\r\n","import {Button, FormControl, FormHelperText, Grid, RadioGroup, Stack, Typography,} from '@mui/material'\r\nimport React, {useContext, useEffect} from 'react'\r\nimport {AppContext} from '../../../contexts/AppContextProvider'\r\nimport {CancelButton, PreviousButton} from '../../StepperButtons'\r\nimport {ComplaintTypeState, LocationOptions, ProductTypeOptions, YesNoOptions,} from '../../../contexts/types'\r\nimport OsseointegrationOptions from './OsseointegrationOptions'\r\nimport LabelingPackagingOptions from './LabelingPackagingOptions'\r\nimport FitOptions from './FitOptions'\r\nimport DamageFractureOptions from './DamageFractureOptions'\r\nimport EstheticOptions from './EstheticOptions'\r\nimport IFUOptions from './IFUOptions'\r\nimport SurfaceOptions from './SurfaceOptions'\r\nimport MRICompatibilityOptions from './MRICompatibility'\r\nimport OtherOptions from './OtherOptions'\r\nimport {Trans} from 'react-i18next'\r\nimport productTypeIsOneOf from '../../../lib/productTypeIsOneOf'\r\nimport {useForm} from '../../../hooks/useForm'\r\nimport isSameDay from 'date-fns/isSameDay'\r\nimport {OrgCustomizationContext} from \"../../../themes/OrgCustomizationProvider\";\r\nimport {setComplaintType} from \"../../../contexts/ComplaintTypeReducer\";\r\nimport useTheHackiestPageNavigation from \"../../../hooks/useTheHackiestPageNavigation\";\r\nimport {db} from \"../../../lib/db\";\r\n\r\nconst ComplaintType: React.FC = () => {\r\n const {navigateForward} = useTheHackiestPageNavigation()\r\n const {complaint, dispatch, postNotification, clearNotification} = useContext(AppContext)\r\n const {t, tns, orgIdentifier} = useContext(OrgCustomizationContext)\r\n\r\n const productType = complaint.generalComplaint\r\n .productType as ProductTypeOptions\r\n\r\n const shouldShowLackOfStabilityOption = isSameDay(\r\n complaint.complaintType.dateOfOccurrence as Date,\r\n complaint.treatmentDates.dateOfTreatment as Date\r\n )\r\n\r\n const required = {value: true, message: t('this_field_is_required')}\r\n const {\r\n data,\r\n errors,\r\n handleChange,\r\n validateFields,\r\n enableOnChangeValidation,\r\n setFormData\r\n } = useForm({\r\n initialValues: {\r\n ...complaint.complaintType,\r\n complaintType:\r\n !shouldShowLackOfStabilityOption &&\r\n complaint.complaintType.complaintType === 'LACK_STABILITY'\r\n ? ''\r\n : complaint.complaintType.complaintType,\r\n },\r\n validations: {\r\n complaintType: {required},\r\n estheticExplanation: {\r\n required: {\r\n value: (value, data) => {\r\n return !(\r\n data.complaintType === 'OTHER_OUTCOME' &&\r\n !data.estheticExplanation\r\n )\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n otherExplanation: {\r\n required: {\r\n value: (value, data) => {\r\n return !(\r\n data.complaintType === 'OTHER_DEFICIENCIES' &&\r\n !data.otherExplanation\r\n )\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n surfaceDefectExplanation: {\r\n required: {\r\n value: (value, data) => {\r\n return !(\r\n data.complaintType === 'SURFACE_DEFECT' &&\r\n !data.surfaceDefectExplanation\r\n )\r\n },\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n attachmentIds: {\r\n required: {\r\n value: (value, data) => {\r\n return !(['WRONG_PART_PACKAGED', 'DAMAGE_WITH_PACKAGING_INTACT'].includes(data.complaintType) && !data.attachmentIds?.length)\r\n },\r\n message: t('this_field_is_required')\r\n },\r\n }\r\n },\r\n })\r\n \r\n useEffect( () => {\r\n if (!['WRONG_PART_PACKAGED', 'DAMAGE_WITH_PACKAGING_INTACT'].includes(data.complaintType) && data.attachmentIds.length > 0) {\r\n db.attachments.bulkDelete(data.attachmentIds)\r\n setFormData({...data, attachmentIds: []})\r\n }\r\n }, [data.complaintType])\r\n\r\n const wasPatientInvolved = complaint.generalComplaint.wasPatientInvolved\r\n const eventOccurrence = complaint.complaintType.location\r\n\r\n const handleSelection = (e: React.ChangeEvent) => {\r\n handleChange('complaintType', e.target.value)\r\n }\r\n\r\n const handleTextFieldChange = (\r\n fieldName: keyof ComplaintTypeState,\r\n value: string\r\n ) => {\r\n handleChange(fieldName, value)\r\n }\r\n\r\n const handleSubmit = async () => {\r\n // Activate field level validation tracking\r\n enableOnChangeValidation(true)\r\n\r\n // Validate the form fields\r\n const isFormValid = validateFields(data)\r\n\r\n // Stop processing if the form has invalid fields\r\n if (!isFormValid) {\r\n postNotification('error', t('error_mess'))\r\n return\r\n }\r\n\r\n // Form is valid, proceed with processing\r\n\r\n // Close the alert message in case it is open\r\n clearNotification()\r\n\r\n // Package up the form data and update app state\r\n const complaintType: ComplaintTypeState = {\r\n ...data,\r\n estheticExplanation:\r\n data.complaintType === 'OTHER_OUTCOME'\r\n ? data.estheticExplanation\r\n : '',\r\n otherExplanation:\r\n data.complaintType === 'OTHER_DEFICIENCIES'\r\n ? data.otherExplanation\r\n : '',\r\n surfaceDefectExplanation:\r\n data.complaintType === 'SURFACE_DEFECT'\r\n ? data.surfaceDefectExplanation\r\n : '',\r\n }\r\n\r\n dispatch(setComplaintType(complaintType))\r\n\r\n navigateForward()\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {t('cti_complaint_type')} -{' '}\r\n {t(`pt_option_${productType.toLowerCase()}`).toLowerCase()}\r\n \r\n\r\n \r\n \r\n -\r\n \r\n -\r\n \r\n -\r\n \r\n :\r\n \r\n\r\n \r\n \r\n {wasPatientInvolved === 'YES' &&\r\n productTypeIsOneOf(['IMPLANT'], productType) &&\r\n (eventOccurrence === '4_CLINIC_DURING_PROCEDURE' ||\r\n eventOccurrence === '5_CLINIC_AFTER_PROCEDURE') ? (\r\n \r\n ) : null}\r\n\r\n {eventOccurrence === '1_LAB_INITIAL_INSPECTION' ||\r\n eventOccurrence === '2_LAB_DURING_FINALIZATION' ||\r\n eventOccurrence === '3_CLINIC_INITIAL_INSPECTION' ? (\r\n setFormData({...data, attachmentIds: a})}\r\n attachmentsError={errors.attachmentIds}\r\n />\r\n ) : null}\r\n\r\n \r\n\r\n \r\n\r\n {productTypeIsOneOf(['ABUTMENT'], productType) ||\r\n (productTypeIsOneOf(['IMPLANT'], productType) &&\r\n wasPatientInvolved === 'YES') ? (\r\n \r\n ) : null}\r\n\r\n {eventOccurrence === '1_LAB_INITIAL_INSPECTION' ||\r\n eventOccurrence === '2_LAB_DURING_FINALIZATION' ||\r\n eventOccurrence === '3_CLINIC_INITIAL_INSPECTION' ||\r\n eventOccurrence === '4_CLINIC_DURING_PROCEDURE' ? (\r\n \r\n ) : null}\r\n\r\n \r\n\r\n {wasPatientInvolved === 'YES' &&\r\n productTypeIsOneOf(\r\n ['IMPLANT', 'ABUTMENT', 'SCREW'],\r\n productType\r\n ) &&\r\n (eventOccurrence === '4_CLINIC_DURING_PROCEDURE' ||\r\n eventOccurrence === '5_CLINIC_AFTER_PROCEDURE') ? (\r\n \r\n ) : null}\r\n\r\n {orgIdentifier !== 'Nobel' && (\r\n \r\n )}\r\n \r\n \r\n \r\n {errors.complaintType}\r\n \r\n \r\n\r\n \r\n handleSubmit()}\r\n >\r\n {t('continue')}\r\n \r\n\r\n dispatch(setComplaintType(data))}/>\r\n\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default ComplaintType\r\n","import React from 'react'\r\nimport {TextField, TextFieldProps} from \"@mui/material\"\r\n\r\ntype CustomTextFieldProps = { sx?: React.CSSProperties } & TextFieldProps\r\n\r\nconst Field: React.FC = (props) => {\r\n return \r\n}\r\n\r\nexport default Field\r\n","\r\ninterface charLimitParams {\r\n\r\n string: string\r\n max: number\r\n}\r\n\r\n/** Trims the last character of a provided string then returns the resulting string.\r\n * \r\n * @param - { string: string, max: number}\r\n * @returns string\r\n */\r\nconst charLimit = ( { string, max }: charLimitParams ): string => {\r\n\r\n\r\n if ( string.length > max ) {\r\n\r\n return string.substring( 0, string.length-1 )\r\n }\r\n\r\n else return string\r\n\r\n}\r\n\r\nexport default charLimit","import React, {useContext, useEffect, useState} from 'react'\r\nimport {MenuItem, TextField} from \"@mui/material\";\r\nimport http from \"../../http\";\r\nimport {OrgCustomizationContext} from \"../../themes/OrgCustomizationProvider\";\r\n\r\ntype CountryRecord = { name: string, code: string }\r\n\r\ntype CountrySelectInputProps = {\r\n name: string\r\n label: string\r\n value: string\r\n defaultValue?: string\r\n onChange: React.ChangeEventHandler\r\n error: boolean\r\n helperText: React.ReactNode\r\n whitelist?: string[]\r\n}\r\n\r\nlet cachedCountries: { countries: CountryRecord[], language: string } = {\r\n countries: [],\r\n language: ''\r\n}\r\n\r\nconst CountrySelectInput: React.FC = ({\r\n name,\r\n label,\r\n onChange,\r\n value,\r\n defaultValue,\r\n error,\r\n helperText,\r\n whitelist\r\n }) => {\r\n const {language} = useContext(OrgCustomizationContext);\r\n const [countries, setCountries] = useState(cachedCountries.countries)\r\n\r\n useEffect(() => {\r\n (countries.length === 0 || cachedCountries.language !== language) && http.get(`/api/Country?lang=${language}`)\r\n .then(({data}) => {\r\n cachedCountries = {countries: data, language}\r\n setCountries(data)\r\n })\r\n .catch((error) => console.log('Country Data Retrieval:', error))\r\n }, [language, countries.length])\r\n\r\n return (\r\n \r\n {\r\n countries\r\n .filter(c => whitelist ? whitelist.includes(c.code) : true)\r\n .sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0)\r\n .map(i => {i.name})\r\n }\r\n \r\n )\r\n}\r\n\r\nexport default CountrySelectInput\r\n","import {Grid} from \"@mui/material\"\r\nimport React, {useContext} from \"react\"\r\nimport Field from \"../../Field\"\r\nimport charLimit from \"../../../lib/charLimit\";\r\nimport {OrgCustomizationContext} from \"../../../themes/OrgCustomizationProvider\";\r\nimport CountrySelectInput from \"../../Inputs/CountrySelectInput\";\r\n\r\ntype ShippingInfoFormProps = {\r\n formik: any // Formik doesn't have a type for this...\r\n}\r\n\r\nconst ShippingInfoForm: React.FC = ({formik}) => {\r\n const {t} = useContext(OrgCustomizationContext)\r\n\r\n return (\r\n <>\r\n \r\n\r\n \r\n {\r\n\r\n let string = e.currentTarget.value\r\n\r\n const max = 60\r\n\r\n const result = charLimit({string, max})\r\n\r\n formik.setFieldValue('street', result, true)\r\n\r\n }}/>\r\n {\r\n\r\n let string = e.currentTarget.value\r\n\r\n const max = 40\r\n\r\n const result = charLimit({string, max})\r\n\r\n formik.setFieldValue('city', result, true)\r\n\r\n }}/>\r\n {\r\n\r\n let string = e.currentTarget.value\r\n\r\n const max = 20\r\n\r\n const result = charLimit({string, max})\r\n\r\n formik.setFieldValue('region', result, true)\r\n\r\n }}/>\r\n {\r\n\r\n let string = e.currentTarget.value\r\n\r\n const max = 10\r\n\r\n const result = charLimit({string, max})\r\n\r\n formik.setFieldValue('postalCode', result, true)\r\n\r\n }}/>\r\n\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default ShippingInfoForm\r\n","import React, {useContext, useEffect, useState} from \"react\";\r\nimport {AppContext} from \"../../../contexts/AppContextProvider\";\r\nimport {Button, Card, Grid} from \"@mui/material\";\r\nimport {CustomerAddress} from \"../../../contexts/types\";\r\nimport makeStyles from \"@mui/styles/makeStyles\";\r\nimport {OrgCustomizationContext} from \"../../../themes/OrgCustomizationProvider\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n card: {\r\n padding: 15,\r\n background: theme.palette.grey[100],\r\n height: '100%'\r\n },\r\n activeCard: {\r\n padding: 15,\r\n background: theme.palette.grey[100],\r\n border: `${theme.palette.primary.main} 2px solid`,\r\n height: '100%'\r\n }\r\n}))\r\n\r\ntype AddressCardProps = {\r\n address: CustomerAddress,\r\n active?: boolean,\r\n onSelect: React.Dispatch,\r\n selectText: string\r\n}\r\n\r\nconst AddressCard: React.FC = ({address, active, onSelect, selectText}) => {\r\n const classes = useStyles()\r\n\r\n return (\r\n \r\n
\r\n
\r\n

{address.name1}

\r\n

{address.street}

\r\n

{address.postalCode}

\r\n

{address.city}

\r\n

{address.region}

\r\n

{address.country}

\r\n
\r\n
\r\n {!active && }\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\ntype AddressSelectorProps = {\r\n partnerAddressType?: string[]\r\n value?: CustomerAddress\r\n onChange?: (address?: CustomerAddress) => void\r\n}\r\n\r\nconst AddressSelector: React.FC = ({partnerAddressType, value, onChange}) => {\r\n const { t } = useContext(OrgCustomizationContext)\r\n const {addresses: masterAddresses} = useContext(AppContext)\r\n const [ addressList, setAddressList ] = useState([])\r\n \r\n useEffect( () => \r\n setAddressList(masterAddresses?.filter(address => partnerAddressType?.includes(address.partner))), \r\n [masterAddresses, partnerAddressType]\r\n )\r\n\r\n return (\r\n \r\n {addressList?.map((a, i) =>\r\n \r\n onChange ? onChange(a) : undefined}/>\r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default AddressSelector\r\n","import React, {useContext, useEffect} from 'react'\r\nimport {\r\n Box,\r\n Button,\r\n Checkbox,\r\n FormControl,\r\n FormControlLabel,\r\n FormGroup,\r\n FormHelperText,\r\n FormLabel,\r\n Grid,\r\n Link,\r\n List,\r\n ListItem,\r\n Stack,\r\n TextField,\r\n Typography,\r\n} from '@mui/material'\r\nimport {Trans} from 'react-i18next'\r\nimport {CancelButton, PreviousButton} from '../StepperButtons'\r\nimport {AppContext} from '../../contexts/AppContextProvider'\r\nimport {useForm} from '../../hooks/useForm'\r\nimport {CustomerAddress, Product, ShippingInfoState} from '../../contexts/types'\r\nimport ShippingInfoForm from './components/ShippingInfoForm'\r\nimport * as yup from 'yup'\r\nimport {useFormik} from 'formik';\r\nimport AddressSelector from \"./components/AddressSelector\";\r\nimport {OrgCustomizationContext} from \"../../themes/OrgCustomizationProvider\";\r\nimport {setShippingInfo} from \"../../contexts/ShippingInfoReducer\";\r\nimport UseTheHackiestPageNavigation from \"../../hooks/useTheHackiestPageNavigation\";\r\nimport useRedirect from \"../../hooks/useRedirect\";\r\n\r\nconst ShippingAddress: React.FC = () => {\r\n const {navigateForward} = UseTheHackiestPageNavigation()\r\n const {complaint, customer, dispatch, loggedIn, postNotification, clearNotification} =\r\n useContext(AppContext)\r\n const {t, tGetParameter, tns} = useContext(OrgCustomizationContext)\r\n\r\n const required = {value: true, message: t('this_field_is_required')}\r\n const maxChar = (value: number): string => t('gi_limit_of', {characters: value.toString()})\r\n const {redirect} = useRedirect()\r\n \r\n useEffect(() => {\r\n if (!(complaint.guestInfo.customerNumber || customer.customer)) {\r\n redirect('login')\r\n }\r\n }, [complaint])\r\n\r\n const {\r\n data,\r\n errors,\r\n handleChangeEvent,\r\n handleChange,\r\n validateFields,\r\n enableOnChangeValidation,\r\n } = useForm({\r\n initialValues: {...complaint.shippingInfo},\r\n validations: {\r\n signature: {\r\n required: {\r\n value: (value) => !!value.toString().trim(),\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n hasAcceptedTerms: {required},\r\n shippingAddress: {\r\n required: {\r\n value: (value) => {\r\n if ( (complaint.generalComplaint.isReplacementNeeded === \"NO\") && !complaint.replacements.selectedSecondaryDeviceReplacement) return true;\r\n if (!loggedIn) return true\r\n\r\n const hasReturnToShip = !!((complaint.replacements.selectedMainProductReplacement?.productId || complaint.replacements.selectedSecondaryDeviceReplacement?.productId))\r\n\r\n return hasReturnToShip\r\n ? !!(value as CustomerAddress)?.customer\r\n : true\r\n },\r\n message: t('this_field_is_required'),\r\n }\r\n }\r\n },\r\n })\r\n\r\n const unauthenticatedValidationSchema = yup.object({\r\n street: yup\r\n .string()\r\n .required(required.message)\r\n .max(60, maxChar(60)),\r\n city: yup\r\n .string()\r\n .required(required.message)\r\n .max(40, maxChar(40)),\r\n region: yup\r\n .string()\r\n .max(20, maxChar(20)),\r\n postalCode: yup\r\n .string()\r\n .max(10, maxChar(10)),\r\n country: yup\r\n .string()\r\n .required(required.message)\r\n })\r\n\r\n const navigateToNextScreen = () => navigateForward()\r\n\r\n const isFormValid = (): boolean => {\r\n // Activate field level validation tracking\r\n enableOnChangeValidation(true)\r\n\r\n // // Stop processing if the form has invalid fields\r\n if (!validateFields(data)) {\r\n postNotification('error', t('error_mess'))\r\n return false\r\n }\r\n\r\n // // Form is valid, proceed with processing\r\n\r\n // // Close the alert message in case it is open\r\n clearNotification()\r\n return true\r\n }\r\n\r\n\r\n const handleAuthenticatedSubmit = () => {\r\n if (!isFormValid()) return\r\n dispatch(setShippingInfo({...data, customer}))\r\n navigateToNextScreen()\r\n }\r\n\r\n const formik = useFormik({\r\n initialValues: {\r\n street: complaint.shippingInfo.shippingAddress?.street || '',\r\n city: complaint.shippingInfo.shippingAddress?.city || '',\r\n region: complaint.shippingInfo.shippingAddress?.region || '',\r\n postalCode: complaint.shippingInfo.shippingAddress?.postalCode || '',\r\n country: complaint.shippingInfo.shippingAddress?.country || complaint.guestInfo.country || ''\r\n },\r\n validationSchema: unauthenticatedValidationSchema,\r\n onSubmit: (values) => {\r\n if (!isFormValid()) return\r\n\r\n const shippingInfo: ShippingInfoState = {\r\n ...data,\r\n customer,\r\n shippingAddress: {\r\n customer: complaint.shippingInfo.customer?.customer as string,\r\n salesOrg: '',\r\n partner: 'Ship-ToParty',\r\n country: values.country,\r\n name1: customer.name1,\r\n name2: '',\r\n city: values.city,\r\n postalCode: values.postalCode,\r\n region: values.region,\r\n street: values.street,\r\n telephone: complaint.guestInfo.telephone\r\n },\r\n }\r\n\r\n dispatch(setShippingInfo(shippingInfo))\r\n\r\n navigateToNextScreen()\r\n },\r\n })\r\n\r\n const getProductDisplayString = (p: Product | undefined) => {\r\n if (!p) return undefined\r\n if (p.productId && p.shortDescription) return `${p.productId} - ${p.shortDescription}`\r\n return p.productId || p.shortDescription\r\n }\r\n\r\n const getProductDisplay = (p: Product | undefined) => p?.productId || p?.productName\r\n ? {getProductDisplayString(p)}\r\n : null\r\n\r\n\r\n return (\r\n
\r\n \r\n \r\n {t('sa_acknowledgement')}\r\n\r\n \r\n \r\n {getProductDisplay(complaint.generalComplaint.selectedProduct)}\r\n {getProductDisplay(complaint.secondaryDevice.selectedProduct)}\r\n \r\n \r\n\r\n {\r\n !loggedIn\r\n ? \r\n : null\r\n }\r\n {(((complaint.generalComplaint.isReplacementNeeded === \"YES\") &&\r\n complaint.replacements.selectedMainProductReplacement) || \r\n (complaint.secondaryDevice.isReplacementNeeded && complaint.replacements\r\n .selectedSecondaryDeviceReplacement)) && (\r\n \r\n {t('sa_shipping_address_page_title')}:\r\n \r\n )}\r\n \r\n {(complaint.generalComplaint.isReplacementNeeded === \"YES\") && complaint.replacements.selectedMainProductReplacement && (\r\n

\r\n {getProductDisplayString(complaint.replacements.selectedMainProductReplacement)}\r\n

\r\n )}\r\n {complaint.secondaryDevice.isReplacementNeeded && complaint.replacements.selectedSecondaryDeviceReplacement && (\r\n

\r\n {getProductDisplayString(complaint.replacements.selectedSecondaryDeviceReplacement)}\r\n

\r\n )}\r\n
\r\n\r\n {\r\n (loggedIn && (complaint.generalComplaint.isReplacementNeeded === \"YES\") && complaint.replacements.selectedMainProductReplacement)\r\n || (loggedIn && complaint.secondaryDevice.isReplacementNeeded && complaint.replacements.selectedSecondaryDeviceReplacement)\r\n ? (\r\n <>\r\n \r\n \r\n {t('sa_shipping_address')}\r\n \r\n\r\n handleChange('shippingAddress', a as object)}/>\r\n {\r\n (typeof errors.shippingAddress !== 'undefined') &&\r\n \r\n {errors.shippingAddress}\r\n \r\n }\r\n \r\n \r\n )\r\n : null\r\n }\r\n
\r\n\r\n \r\n \r\n \r\n {t('sa_label_terms_conditions')}:\r\n \r\n \r\n \r\n {\r\n handleChange(\r\n 'hasAcceptedTerms',\r\n !data.hasAcceptedTerms\r\n )\r\n }}\r\n />\r\n \r\n }\r\n label={\r\n // @ts-ignore-next-line\r\n \r\n -\r\n \r\n -\r\n \r\n -\r\n \r\n }\r\n />\r\n \r\n {errors.hasAcceptedTerms}\r\n \r\n \r\n \r\n\r\n \r\n {t('sa_signature')}:\r\n \r\n \r\n \r\n \r\n\r\n loggedIn && handleAuthenticatedSubmit()}\r\n >\r\n {t('finish_complaint')}\r\n \r\n\r\n {\r\n dispatch(setShippingInfo(loggedIn\r\n ? data\r\n : {\r\n ...data,\r\n shippingAddress: {\r\n ...data.shippingAddress,\r\n customer: complaint.shippingInfo.customer?.customer || '',\r\n salesOrg: '',\r\n partner: 'Ship-ToParty',\r\n name1: customer.name1,\r\n name2: '',\r\n street: formik.values.street,\r\n city: formik.values.city,\r\n region: formik.values.region,\r\n postalCode: formik.values.postalCode,\r\n country: formik.values.country,\r\n telephone: complaint.guestInfo.telephone\r\n }\r\n }))\r\n }}/>\r\n\r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default ShippingAddress\r\n","export const readAsBinaryStringAsync = (file: File | Blob): Promise =>\r\n new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n\r\n reader.onload = () => {\r\n resolve(reader.result)\r\n }\r\n\r\n reader.onerror = (e) => {\r\n reject(e)\r\n }\r\n\r\n reader.readAsBinaryString(file);\r\n })\r\n","import {QualityNotificationRequest} from '../types/QualityNotificationCreateRequest'\r\nimport {\r\n BoneQualityOptions,\r\n ClinicalConditionOptions,\r\n ComplaintState,\r\n ComplaintTypeOptions,\r\n ImplantBrandOptions,\r\n InjuryTypeOptions,\r\n LocationOptions,\r\n PatientStatusOptions,\r\n ProductTypeOptions,\r\n ProfileOptions,\r\n ValueRatingOptions,\r\n} from '../contexts/types'\r\nimport {readAsBinaryStringAsync} from \"./attachment-utils\";\r\nimport {db} from \"./db\";\r\n\r\nconst prepareComplaintRequestData = async (complaint: ComplaintState) => {\r\n let complaintRequestData: QualityNotificationRequest =\r\n await mapUiToSapFields(complaint)\r\n\r\n return complaintRequestData\r\n}\r\n\r\nconst mapUiToSapFields = async (complaint: ComplaintState) => {\r\n let complaintRequest: QualityNotificationRequest =\r\n getDefaultComplaintRequest()\r\n\r\n complaintRequest = {\r\n ...complaintRequest,\r\n ...mapGeneralInfoFields(complaint, complaintRequest),\r\n }\r\n complaintRequest = {\r\n ...complaintRequest,\r\n ...mapGeneralComplaintFields(complaint, complaintRequest),\r\n }\r\n complaintRequest = {\r\n ...complaintRequest,\r\n ...mapComplaintTypeFields(complaint, complaintRequest),\r\n }\r\n complaintRequest = {\r\n ...complaintRequest,\r\n ...mapTreatmentDates(complaint, complaintRequest),\r\n }\r\n complaintRequest = {\r\n ...complaintRequest,\r\n ...mapPatientInformation(complaint, complaintRequest),\r\n }\r\n complaintRequest = {\r\n ...complaintRequest,\r\n ...await mapComplaintType(complaint, complaintRequest),\r\n }\r\n complaintRequest = {\r\n ...complaintRequest,\r\n ...mapClinicalConditions(complaint, complaintRequest),\r\n }\r\n complaintRequest = {\r\n ...complaintRequest,\r\n ...mapAbutmentInfo(complaint, complaintRequest),\r\n }\r\n complaintRequest = {\r\n ...complaintRequest,\r\n ...mapInstrumentInfo(complaint, complaintRequest),\r\n }\r\n complaintRequest = {\r\n ...complaintRequest,\r\n ...mapSecondaryDeviceInfo(complaint, complaintRequest),\r\n }\r\n complaintRequest = {\r\n ...complaintRequest,\r\n ...await mapMainProductAvailableToReturn(complaint, complaintRequest),\r\n }\r\n complaintRequest = {\r\n ...complaintRequest,\r\n ...mapProductReplacements(complaint, complaintRequest),\r\n }\r\n complaintRequest = {\r\n ...complaintRequest,\r\n ...mapAcknowledgement(complaint, complaintRequest),\r\n }\r\n complaintRequest = {\r\n ...complaintRequest,\r\n ...mapCustomerNumber(complaint, complaintRequest)\r\n }\r\n complaintRequest = {\r\n ...complaintRequest,\r\n ...mapCountryCode(complaint, complaintRequest)\r\n }\r\n complaintRequest = {\r\n ...complaintRequest,\r\n frontendState: complaint,\r\n }\r\n return complaintRequest\r\n}\r\n\r\nconst mapCustomerNumber = (\r\n complaint: ComplaintState,\r\n complaintRequest: QualityNotificationRequest\r\n) => {\r\n\r\n complaintRequest.customerNumber = complaint.guestInfo.customerNumber || complaint.shippingInfo.customer?.customer || ''\r\n return complaintRequest\r\n}\r\n\r\nconst mapCountryCode = (\r\n complaint: ComplaintState,\r\n complaintRequest: QualityNotificationRequest\r\n) => {\r\n\r\n complaintRequest.countryCode = complaint.guestInfo.country as string\r\n\r\n return complaintRequest\r\n}\r\n\r\nconst mapGeneralInfoFields = (\r\n complaint: ComplaintState,\r\n complaintRequest: QualityNotificationRequest\r\n) => {\r\n if (complaintRequest.customer) {\r\n complaintRequest.customer.contactName =\r\n complaint.generalInfo.contactName\r\n }\r\n\r\n return complaintRequest\r\n}\r\n\r\nconst mapGeneralComplaintFields = (\r\n complaint: ComplaintState,\r\n complaintRequest: QualityNotificationRequest\r\n) => {\r\n if (complaintRequest.product) {\r\n // Product search: Enter article number or description\r\n complaintRequest.product.articleNo =\r\n complaint.generalComplaint.selectedProduct?.productId\r\n\r\n // Select product type: Do you know the batch or lot number?\r\n complaintRequest.product.batchNo =\r\n complaint.generalComplaint.batchOrLotNumber?.trim().length === 0\r\n ? 'Not Available'\r\n : complaint.generalComplaint.batchOrLotNumber?.trim()\r\n\r\n // Select product type: Would you like product to be replaced?\r\n complaintRequest.product.productReplacementRequired =\r\n complaint.generalComplaint.isReplacementNeeded === 'YES'\r\n } else if (complaintRequest.product === undefined) {\r\n\r\n // INITIALIZE\r\n complaintRequest.product = {}\r\n // THEN SET\r\n complaintRequest.product.productReplacementRequired =\r\n complaint.generalComplaint.isReplacementNeeded === 'YES'\r\n }\r\n if (complaintRequest.clinicalProcedure) {\r\n // Select product type: Was the product placed in the patient's mouth?\r\n complaintRequest.clinicalProcedure.neverPlaced =\r\n complaint.generalComplaint.wasProductPlaced === 'NO'\r\n }\r\n\r\n if (complaintRequest.issue) {\r\n // Select product type: Was a patient involved?\r\n complaintRequest.issue.patientUsed =\r\n complaint.generalComplaint.wasPatientInvolved === 'YES'\r\n\r\n // Select product type: Select product type:\r\n complaintRequest.issue.productType = mapProductTypeOptions(\r\n complaint.generalComplaint.productType\r\n )\r\n }\r\n\r\n if (complaintRequest.implant) {\r\n // Select product type: Was the implant dropped or opened in error?\r\n complaintRequest.implant.implantOpenedOrDroppedByError = (\r\n\r\n complaint.generalComplaint.wasOpenedOrDropped === 'YES'\r\n )\r\n\r\n complaintRequest.implant.wasAnotherImplantPlacedSameSite = (\r\n\r\n complaint.generalComplaint.wasAnotherImplantPlaced === 'YES'\r\n ? true\r\n : complaint.generalComplaint.wasAnotherImplantPlaced === 'NO'\r\n ? false\r\n : undefined\r\n )\r\n }\r\n\r\n\r\n return complaintRequest\r\n}\r\n\r\nconst mapProductTypeOptions = (complaintProductType?: ProductTypeOptions) => {\r\n if (complaintProductType) {\r\n switch (complaintProductType) {\r\n case 'IMPLANT':\r\n return 'Implant'\r\n case 'ABUTMENT':\r\n return 'Abutment'\r\n case 'SCREW':\r\n return 'Screw'\r\n case 'CLINICAL_INSTRUMENT':\r\n return 'ClinicalInstrument'\r\n case 'LAB_INSTRUMENT_LAB_SCREW':\r\n return 'LabInstrument'\r\n }\r\n } else {\r\n return undefined\r\n }\r\n}\r\n\r\nconst mapComplaintTypeFields = (\r\n complaint: ComplaintState,\r\n complaintRequest: QualityNotificationRequest\r\n) => {\r\n // Event occurrence: Select date of occurrence:\r\n if (complaintRequest.clinicalProcedure) {\r\n complaintRequest.clinicalProcedure.eventDate = complaint.complaintType\r\n .dateOfOccurrence as Date\r\n }\r\n\r\n // Event occurrence: Select location:\r\n if (complaintRequest.issue) {\r\n complaintRequest.issue.eventOccurence = mapEventLocationOptions(\r\n complaint.complaintType.location\r\n )\r\n }\r\n\r\n return complaintRequest\r\n}\r\n\r\nconst mapEventLocationOptions = (complaintEventLocation?: LocationOptions) => {\r\n if (complaintEventLocation) {\r\n switch (complaintEventLocation) {\r\n case '1_LAB_INITIAL_INSPECTION':\r\n return 'LabInitialInspection'\r\n case '2_LAB_DURING_FINALIZATION':\r\n return 'LabDuringFinalization'\r\n case '3_CLINIC_INITIAL_INSPECTION':\r\n return 'ClinicInitialInspection'\r\n case '4_CLINIC_DURING_PROCEDURE':\r\n return 'ClinicDuring'\r\n case '5_CLINIC_AFTER_PROCEDURE':\r\n return 'ClinicAfter'\r\n }\r\n } else {\r\n return undefined\r\n }\r\n}\r\n\r\nconst mapTreatmentDates = (\r\n complaint: ComplaintState,\r\n complaintRequest: QualityNotificationRequest\r\n) => {\r\n if (complaintRequest.clinicalProcedure) {\r\n // Treatment dates: Date of treatment:\r\n complaintRequest.clinicalProcedure.placementDate = complaint\r\n .treatmentDates.dateOfTreatment as Date\r\n\r\n // Treatment dates: Was implant loaded?\r\n complaintRequest.clinicalProcedure.noImplantLoad =\r\n complaint.treatmentDates.wasImplantLoaded === 'NO'\r\n\r\n // Treatment dates: Date of implant loading:\r\n complaintRequest.clinicalProcedure.implantLoadDate = complaint\r\n .treatmentDates.dateOfImplantLoading as Date\r\n\r\n // Treatment dates: Was there a second surgery?\r\n complaintRequest.clinicalProcedure.noSecondSurgery =\r\n complaint.treatmentDates.wasThereASecondSurgery === 'NO'\r\n\r\n // Treatment dates: Date of second surgery:\r\n complaintRequest.clinicalProcedure.secondSurgeryDate = complaint\r\n .treatmentDates.dateOfSecondSurgery as Date\r\n\r\n // Treatment dates: Was the product removed?\r\n complaintRequest.clinicalProcedure.removed =\r\n complaint.treatmentDates.wasProductRemoved === 'NO'\r\n\r\n // Treatment dates: Product removal date:\r\n complaintRequest.clinicalProcedure.removeDate = complaint.treatmentDates\r\n .dateProductWasRemoved as Date\r\n }\r\n\r\n return complaintRequest\r\n}\r\n\r\nconst mapPatientInformation = (\r\n complaint: ComplaintState,\r\n complaintRequest: QualityNotificationRequest\r\n) => {\r\n if (complaintRequest.patient) {\r\n // Patient information: Patient ID number or Initials:\r\n complaintRequest.patient.code = complaint.patientInfo.patientId\r\n\r\n // Patient information: Patient age:\r\n complaintRequest.patient.age = complaint.patientInfo.patientAge\r\n ? complaint.patientInfo.patientAge.toString()\r\n : undefined\r\n\r\n // Patient information: Patient weight:\r\n complaintRequest.patient.weight = complaint.patientInfo.patientWeight\r\n ? complaint.patientInfo.patientWeight.toString() + ' ' + complaint.patientInfo.patientWeightUnit\r\n : 'N/A'\r\n // Patient information: Patient sex:\r\n complaintRequest.patient.gender = complaint.patientInfo.patientSex\r\n\r\n // Patient information: Patient profile:\r\n complaintRequest.patient.patientProfile = mapPatientProfileOptions(\r\n complaint.patientInfo.patientProfile\r\n )\r\n\r\n // Patient information: Patient profile: Other: Please specify:\r\n complaintRequest.patient.patientProfileOther =\r\n complaint.patientInfo.patientProfileExplanation\r\n\r\n // Patient information: Hygiene around the implant:\r\n complaintRequest.patient.implantHygiene = mapComplaintHygieneOptions(\r\n complaint.patientInfo.hygiene\r\n )\r\n\r\n // Patient information: Did the device contribute to or cause patient injury?\r\n complaintRequest.patient.injured =\r\n complaint.patientInfo.didDeviceContributeToInjury === 'YES'\r\n\r\n // Patient information: Type of injury:\r\n complaintRequest.patient.injuryType = mapComplaintInjuryTypeOptions(\r\n complaint.patientInfo.typeOfInjury\r\n )\r\n\r\n // Patient information: Type of injury: Other: Please provide details regarding patient injury:\r\n complaintRequest.patient.injuryTypeText =\r\n complaint.patientInfo.typeOfInjuryExplanation\r\n\r\n // Patient information: Current patient status:\r\n complaintRequest.patient.status = mapComplaintPatientStatusOptions(\r\n complaint.patientInfo.currentPatientStatus\r\n )\r\n }\r\n\r\n if (complaintRequest.clinicalProcedure) {\r\n // Patient information: Bone quality at the time of implant placement:\r\n complaintRequest.clinicalProcedure.boneQuality =\r\n mapComplaintBoneQualityOptions(complaint.patientInfo.boneQuality)\r\n\r\n // Patient information: Bone quality at the time of implant placement: Other: Please specify\r\n complaintRequest.clinicalProcedure.boneQualityOther =\r\n complaint.patientInfo.boneQualityExplanation\r\n }\r\n\r\n if (complaintRequest.product) {\r\n // Patient information: Product location\r\n complaintRequest.product.toothPosition = `UTN-${complaint.patientInfo.utn}|FDI-${complaint.patientInfo.fdi}`\r\n }\r\n\r\n return complaintRequest\r\n}\r\n\r\nconst mapComplaintPatientStatusOptions = (\r\n patientStatusOptions: PatientStatusOptions\r\n) => {\r\n if (patientStatusOptions) {\r\n switch (patientStatusOptions) {\r\n case 'RECOVERED':\r\n return 'Recovered'\r\n case 'RECOVERED_WITH_IMPAIRMENT':\r\n return 'Impairment'\r\n case 'UNDER_TREATMENT':\r\n return 'Treatment'\r\n case 'UNKNOWN':\r\n return 'Unknown'\r\n }\r\n } else {\r\n return undefined\r\n }\r\n}\r\n\r\nconst mapComplaintInjuryTypeOptions = (\r\n injuryTypeOptions?: InjuryTypeOptions\r\n) => {\r\n if (injuryTypeOptions) {\r\n if (injuryTypeOptions === 'MEDICAL_SURGICAL_INTERVENTION') {\r\n return 'Intervention'\r\n }\r\n if (injuryTypeOptions === 'PERMANENT_IMPAIRMENT') {\r\n return 'Impairment'\r\n }\r\n if (injuryTypeOptions === 'OTHER') {\r\n return 'Other'\r\n }\r\n } else {\r\n return undefined\r\n }\r\n}\r\n\r\nconst mapComplaintBoneQualityOptions = (\r\n boneQualityOptions: BoneQualityOptions\r\n) => {\r\n if (boneQualityOptions) {\r\n switch (boneQualityOptions) {\r\n case 'TYPE_1':\r\n return 'I'\r\n case 'TYPE_2':\r\n return 'II'\r\n case 'TYPE_3':\r\n return 'III'\r\n case 'TYPE_4':\r\n return 'IV'\r\n case 'OTHER':\r\n return 'Unknown'\r\n }\r\n }\r\n}\r\n\r\nconst mapComplaintHygieneOptions = (\r\n complaintHygieneOptions: ValueRatingOptions\r\n) => {\r\n if (complaintHygieneOptions) {\r\n switch (complaintHygieneOptions) {\r\n case 'EXCELLENT':\r\n return 'Excellent'\r\n case 'FAIR':\r\n return 'Fair'\r\n case 'GOOD':\r\n return 'Good'\r\n case 'POOR':\r\n return 'Poor'\r\n }\r\n } else {\r\n return undefined\r\n }\r\n}\r\n\r\nconst mapPatientProfileOptions = (\r\n complaintPatientProfileOptions?: ProfileOptions\r\n) => {\r\n if (complaintPatientProfileOptions) {\r\n let profileOptions: string[] = []\r\n\r\n if (complaintPatientProfileOptions.BRUXER) {\r\n profileOptions.push('Bruxer')\r\n }\r\n if (complaintPatientProfileOptions.DIABETIC) {\r\n profileOptions.push('Diabetic')\r\n }\r\n if (complaintPatientProfileOptions.SMOKER) {\r\n profileOptions.push('Smoker')\r\n }\r\n if (complaintPatientProfileOptions.NONE) {\r\n profileOptions.push('None')\r\n }\r\n if (complaintPatientProfileOptions.UNKNOWN) {\r\n profileOptions.push('Unknown')\r\n }\r\n if (complaintPatientProfileOptions.OTHER) {\r\n profileOptions.push('Other')\r\n }\r\n return profileOptions\r\n } else {\r\n return undefined\r\n }\r\n}\r\n\r\nconst mapComplaintType = async (\r\n complaint: ComplaintState,\r\n complaintRequest: QualityNotificationRequest\r\n) => {\r\n if (complaintRequest.issue) {\r\n // Complaint type: Please select complaint type\r\n complaintRequest.issue.issueDefinition = mapComplaintTypeOptions(\r\n complaint.complaintType.complaintType\r\n )\r\n\r\n // Complaint type: Please select complaint type: Other product deficiencies or technical issues: Please explain:\r\n\r\n if (complaint.complaintType.surfaceDefectExplanation) {\r\n complaintRequest.issue.issueDefinitionOther =\r\n complaint.complaintType.surfaceDefectExplanation\r\n } else if (complaint.complaintType.otherExplanation) {\r\n complaintRequest.issue.issueDefinitionOther =\r\n complaint.complaintType.otherExplanation\r\n } else if (complaint.complaintType.otherExplanation) { // MAY NOT BE NEEDED ?\r\n complaintRequest.issue.issueDefinitionOther =\r\n complaint.complaintType.estheticExplanation\r\n } else if (complaint.complaintType.estheticExplanation) {\r\n complaintRequest.issue.issueDefinitionOther =\r\n complaint.complaintType.estheticExplanation\r\n }\r\n\r\n if (complaint.complaintType.attachmentIds) {\r\n let count = 0\r\n for (const attachmentId of complaint.complaintType.attachmentIds) {\r\n const file = await db.attachments.get(attachmentId)\r\n\r\n if (file) {\r\n const binary = btoa(await readAsBinaryStringAsync(file.content) as string)\r\n const extension = file.name.split('.')[file.name.split('.').length - 1]\r\n\r\n complaintRequest.attachments = [...(complaintRequest.attachments || []), {\r\n name: `complaintType-${++count}.${extension}`,\r\n content: binary\r\n }]\r\n }\r\n }\r\n }\r\n }\r\n return complaintRequest\r\n}\r\n\r\nconst mapComplaintTypeOptions = (\r\n complaintTypeOptions: ComplaintTypeOptions,\r\n) => {\r\n if (complaintTypeOptions) {\r\n switch (complaintTypeOptions) {\r\n case 'ARTIFIACTS_ON_IMAGE':\r\n return 'Artifacts on image'\r\n case 'CLINICAL_PROSTHETIC_SCREW_LOOSENING':\r\n return 'Clinical/ prosthetic screw loosening'\r\n case 'COATING_FLAKING_OFF':\r\n return 'Coating(s) flaking off'\r\n case 'COLOR_MISMATCHING':\r\n return 'Color mismatching'\r\n case 'DAMAGE_WITH_PACKAGING_INTACT':\r\n return 'Visual damage on the product with packaging intact'\r\n case 'DEFLECTION':\r\n return 'Deflection'\r\n case 'DEFORMED':\r\n return 'Part/Interface deformed'\r\n case 'DISCOLORATION':\r\n return 'Device De-/Discoloration '\r\n case 'DOES_NOT_DISENGAGE':\r\n return 'Part/Interface does not disengage'\r\n case 'DOES_NOT_ENGAGE':\r\n return 'Part/Interface does not engage'\r\n case 'DOES_NOT_FIT':\r\n return 'Part/Interface does not fit/align'\r\n case 'FOREIGN_PARTICLES':\r\n return 'Foreign particles on the product/in packaging'\r\n case 'FUNCTIONALITY_COMPROMISED':\r\n return 'Functionality compromised due to lost part or subcomponent'\r\n case 'HEATING':\r\n return 'Heating'\r\n case 'INADEQUATE_CLEANING_OF_PART':\r\n return 'Inadequate/difficult cleaning of a part'\r\n case 'INFORMATION_MISLEADING':\r\n return 'IFU information misleading/wrong'\r\n case 'INTERFACE_FRETTING':\r\n return 'Part/Interface fretting/corroding/rusting'\r\n case 'LABEL_ILLEGIBLE':\r\n return 'Label information illegible'\r\n case 'LABEL_INFORMATION_MISSING':\r\n return 'Label information missing'\r\n case 'LABEL_MISLEADING':\r\n return 'Label information misleading/wrong'\r\n case 'LACK_STABILITY':\r\n return 'Lack of primary stability'\r\n case 'MORE_THAN_365_DAYS':\r\n return 'Osseointegration issue occuring after more than 365 days after implant insertion'\r\n case 'NOT_FUNCTIONAL':\r\n return 'Part not functional'\r\n case 'OTHER_DEFICIENCIES':\r\n return 'Other Product Deficiencies and Technical Issues'\r\n case 'OTHER_OUTCOME':\r\n return 'Other unsatisfactory esthetic outcome.'\r\n case 'PARTIALLY_VISIBLE':\r\n return 'Implant/Abutment partially visible'\r\n case 'PART_ASSEMBLY_ISSUE':\r\n return 'Part assembly issue'\r\n case 'PART_DISASSEMBLED':\r\n return 'Part disassembled in packaging'\r\n case 'PART_DISASSEMBLY_ISSUE':\r\n return 'Part disassembly issue'\r\n case 'PART_FRACTURED':\r\n return 'Part fractured'\r\n case 'PART_MIGRATES':\r\n return 'Part migrates '\r\n case 'PART_NOT_RETAINED':\r\n return 'Part not retained on mating Part (e.g. dropped)'\r\n case 'PREMATURE_WEAR':\r\n return 'Premature wear/tear'\r\n case 'SHINES_THROUGH':\r\n return 'Implant/Abutment shines through restoration/tissue'\r\n case 'STERILE_BARRIER_DAMAGED':\r\n return 'Sterile barrier system damaged'\r\n case 'SURFACE_CORRODED':\r\n return 'Surface corroded'\r\n case 'SURFACE_DEFECT':\r\n return 'Product - Surface defect (Please specify)'\r\n case 'TRANSLATION_MISSING':\r\n return 'Native IFU translation missing'\r\n case 'TRAUMA':\r\n return 'Trauma / Clinical Complication only'\r\n case 'UNABLE_TO_DISTINGUISH':\r\n return 'Unable to distingiush between different platform sizes'\r\n case 'WITHIN_365_DAYS':\r\n return 'Osseointegration issue occuring wtihin 365 days after implant insertion'\r\n case 'WRONG_PART':\r\n return 'Usability - Wrong part used'\r\n case 'WRONG_PART_PACKAGED':\r\n return 'Wrong or no part packaged'\r\n }\r\n } else {\r\n return undefined\r\n }\r\n}\r\n\r\nconst mapClinicalConditions = (\r\n complaint: ComplaintState,\r\n complaintRequest: QualityNotificationRequest\r\n) => {\r\n if (complaintRequest.clinicalProcedure) {\r\n // Clinical conditions: Please select a clinical condition:\r\n complaintRequest.clinicalProcedure.involvedConditions =\r\n mapComplaintClinicalConditionOptions(\r\n complaint.clinicalCondition.clinicalCondition\r\n )\r\n\r\n // Clinical conditions: Acute or transient pain: Has the pain disappeared after implant removal?\r\n if (complaint.clinicalCondition.hasPainDisappeared) {\r\n complaintRequest.clinicalProcedure.painNumbnessOffAtRemoval =\r\n complaint.clinicalCondition.hasPainDisappeared === 'YES'\r\n }\r\n\r\n // Clinical conditions: Numbness: Has the numbness disappeared after implant removal?\r\n if (complaint.clinicalCondition.hasNumbnessDisappeared) {\r\n complaintRequest.clinicalProcedure.painNumbnessOffAtRemoval =\r\n complaint.clinicalCondition.hasNumbnessDisappeared === 'YES'\r\n }\r\n\r\n // Clinical conditions: Please select a clinical condition: Prolonged surgery (please specify)\r\n complaintRequest.clinicalProcedure.prolongedSurgery =\r\n complaint.clinicalCondition.prolongedSurgeryExplanation\r\n\r\n // Clinical conditions: Please select a clinical condition: Prolonged treatment time (please specify)\r\n complaintRequest.clinicalProcedure.prolongedTreatmentTime =\r\n complaint.clinicalCondition.prolongedTreatmentExplanation\r\n\r\n // Clinical conditions: Please select a clinical condition: Other\r\n complaintRequest.clinicalProcedure.involvedConditionOther = (\r\n\r\n complaint.clinicalCondition.otherExplanation !== ''\r\n ? complaint.clinicalCondition.otherExplanation\r\n : complaint.clinicalCondition.permanentImpairmentExplanation !== ''\r\n ? complaint.clinicalCondition.permanentImpairmentExplanation\r\n : ''\r\n )\r\n\r\n if (complaint.clinicalCondition.wereNerveSymptomsAlleviated) {\r\n\r\n complaintRequest.clinicalProcedure.WereTheSymptomsAlleviatedOverTime = (\r\n\r\n complaint.clinicalCondition.wereNerveSymptomsAlleviated === 'YES'\r\n ? true\r\n : complaint.clinicalCondition.wereNerveSymptomsAlleviated === 'NO'\r\n ? false\r\n : undefined\r\n )\r\n }\r\n }\r\n\r\n return complaintRequest\r\n}\r\n\r\nconst mapComplaintClinicalConditionOptions = (\r\n clinicalConditionOptions: ClinicalConditionOptions\r\n) => {\r\n if (clinicalConditionOptions) {\r\n let options: string[] = []\r\n if (clinicalConditionOptions === 'ABSCESS') {\r\n options.push('Abscess')\r\n }\r\n if (clinicalConditionOptions === 'ALLERGIC_REACTION') {\r\n options.push('Allergic reaction')\r\n }\r\n if (clinicalConditionOptions === 'ASPIRATION') {\r\n options.push('Aspiration (medical device)')\r\n }\r\n if (clinicalConditionOptions === 'BONE_FRACTURE') {\r\n options.push('Bone fracture')\r\n }\r\n if (clinicalConditionOptions === 'DAMAGING_OF_BLOOD_VESSELS') {\r\n options.push('Damaging of blood vessels')\r\n }\r\n if (clinicalConditionOptions === 'DEATH') {\r\n options.push('Death (Patient/User)')\r\n }\r\n if (clinicalConditionOptions === 'FISTULA') {\r\n options.push('Fistula')\r\n }\r\n if (clinicalConditionOptions === 'HAMPERS_DIAGNOSTICS') {\r\n options.push('Hampers diagnostics (delayed/incorrect)')\r\n }\r\n if (clinicalConditionOptions === 'LOCAL_INFECTION') {\r\n options.push('Local infection')\r\n }\r\n if (clinicalConditionOptions === 'LOCAL_INFLAMMATION') {\r\n options.push('Local inflammation / immune response')\r\n }\r\n if (clinicalConditionOptions === 'NERVE_INJURY_SYMPTOMS') {\r\n options.push('Nerve injury symptoms')\r\n }\r\n if (clinicalConditionOptions === 'NONE_OF_THE_ABOVE') {\r\n options.push('None of the Above')\r\n }\r\n if (clinicalConditionOptions === 'NUMBNESS') {\r\n options.push('Numbness')\r\n }\r\n if (clinicalConditionOptions === 'OSTEOMYELITIS') {\r\n options.push('Osteomyelitis')\r\n }\r\n if (clinicalConditionOptions === 'OTHER') {\r\n options.push('Other')\r\n }\r\n if (clinicalConditionOptions === 'PERMANENT_IMPAIRMENT') {\r\n options.push(\r\n 'Permanent impairment (requiring permanent professional medical treatment) please provide clarification'\r\n )\r\n }\r\n if (clinicalConditionOptions === 'PERMANENT_PAIN') {\r\n options.push('Permanent pain')\r\n }\r\n if (clinicalConditionOptions === 'PROLONGED_SURGERY') {\r\n options.push('Prolonged surgery (please specify)')\r\n }\r\n if (clinicalConditionOptions === 'PROLONGED_TREATMENT_TIME') {\r\n options.push('Prolonged treatment time (please specify)')\r\n }\r\n if (\r\n clinicalConditionOptions ===\r\n 'REVISION_SURGERY_ASSEMBLY_ABUTMENT_IMPLANT'\r\n ) {\r\n options.push(\r\n 'Revision surgery of the assembly (abutment and implant)'\r\n )\r\n }\r\n if (\r\n clinicalConditionOptions === 'REVISION_SURGERY_IMPLANT_EXTRACTION'\r\n ) {\r\n options.push('Revision surgery (implant extraction)')\r\n }\r\n if (clinicalConditionOptions === 'SINUS_PERFORATION') {\r\n options.push('Sinus perforation')\r\n }\r\n if (clinicalConditionOptions === 'SWALLOWING_MEDICAL_DEVICE') {\r\n options.push('Swallowing (medical device)')\r\n }\r\n if (clinicalConditionOptions === 'TRANSIENT_PAIN') {\r\n options.push('Transient Pain')\r\n }\r\n return options\r\n } else {\r\n return undefined\r\n }\r\n}\r\n\r\nconst mapAbutmentInfo = (\r\n complaint: ComplaintState,\r\n complaintRequest: QualityNotificationRequest\r\n) => {\r\n if (complaintRequest.implant) {\r\n // Abutment information: Which implant was used in combination with the abutment?\r\n complaintRequest.implant.implantType = mapComplaintImplantTypes(\r\n complaint.abutmentsInfo.implantBrandUsed\r\n )\r\n\r\n // Abutment information: Article number (optional):\r\n complaintRequest.implant.articleNo =\r\n complaint.abutmentsInfo.articleNumber?.trim().length === 0\r\n ? 'Not Available'\r\n : complaint.abutmentsInfo.articleNumber?.trim()\r\n\r\n // Abutment information: Batch / lot number (optional):\r\n complaintRequest.implant.batchNo =\r\n complaint.abutmentsInfo.batchOrLotNumber?.trim().length === 0\r\n ? 'Not Available'\r\n : complaint.abutmentsInfo.batchOrLotNumber?.trim()\r\n }\r\n\r\n return complaintRequest\r\n}\r\n\r\nconst mapComplaintImplantTypes = (implantType: ImplantBrandOptions) => {\r\n if (implantType) {\r\n switch (implantType) {\r\n case 'ORIGINAL_NOBEL_BIOCARE':\r\n return 'Original'\r\n case 'NON_NOBEL_BIOCARE':\r\n return 'NonNobel'\r\n case 'UNKNOWN':\r\n return 'Unknown'\r\n }\r\n } else {\r\n return undefined\r\n }\r\n}\r\n\r\nconst mapInstrumentInfo = (\r\n complaint: ComplaintState,\r\n complaintRequest: QualityNotificationRequest\r\n) => {\r\n if (complaintRequest.implant) {\r\n // Instrument information: Number of times used:\r\n complaintRequest.implant.implantSitePreparationToolInitialNumberOfTimesUsed =\r\n complaint.instrumentInfo.numberOfTimesUsed?.toString()\r\n }\r\n\r\n if (complaintRequest.instrument) {\r\n // Instrument information: Age of device in years:\r\n complaintRequest.instrument.age =\r\n complaint.instrumentInfo.ageOfDevice?.toString()\r\n }\r\n\r\n return complaintRequest\r\n}\r\n\r\nconst mapSecondaryDeviceInfo = (\r\n complaint: ComplaintState,\r\n complaintRequest: QualityNotificationRequest\r\n) => {\r\n if (complaintRequest.implant) {\r\n // Secondary device: Was there a secondary device?\r\n complaintRequest.implant.secondaryDevice =\r\n complaint.secondaryDevice.hasSecondaryDevice === 'YES'\r\n\r\n // Secondary device: Enter article number or description\r\n complaintRequest.implant.secondaryDeviceMaterialNumber =\r\n complaint.secondaryDevice.selectedProduct?.productId\r\n\r\n // Secondary device: Batch or lot number:\r\n complaintRequest.implant.secondaryDeviceBatch =\r\n complaint.secondaryDevice.batchOrLotNumber\r\n\r\n // Secondary device: Do you need a replacement for the secondary device?\r\n complaintRequest.implant.secondaryDeviceReplacementRequired =\r\n complaint.secondaryDevice.isReplacementNeeded === 'YES'\r\n }\r\n\r\n return complaintRequest\r\n}\r\n\r\nconst mapMainProductAvailableToReturn = async (\r\n complaint: ComplaintState,\r\n complaintRequest: QualityNotificationRequest\r\n) => {\r\n if (complaintRequest.product) {\r\n // Main product - available to return: Is the product available to be returned?\r\n complaintRequest.product.returnAvailability =\r\n complaint.availableToReturn.canItemBeReturned === 'YES'\r\n\r\n // Main product - available to return: I confirm that product will be decontaminated before shipping to Nobel Biocare (required).\r\n complaintRequest.product.sterilization =\r\n complaint.availableToReturn.confirmDecontamination\r\n\r\n // Main product - available to return: Please explain why the product cannot be returned:\r\n complaintRequest.product.missingExplanation =\r\n complaint.availableToReturn.reasonItemCannotBeReturned\r\n\r\n if (complaint.availableToReturn.attachmentId) {\r\n const file = await db.attachments.get(complaint.availableToReturn.attachmentId)\r\n\r\n if (file) {\r\n const binary = btoa(await readAsBinaryStringAsync(file.content) as string)\r\n\r\n complaintRequest.attachments = [...(complaintRequest.attachments || []), {\r\n name: `xray.${file.name.split('.')[file.name.split('.').length - 1]}`,\r\n content: binary\r\n }]\r\n }\r\n }\r\n }\r\n\r\n return complaintRequest\r\n}\r\n\r\nconst mapProductReplacements = (\r\n complaint: ComplaintState,\r\n complaintRequest: QualityNotificationRequest\r\n) => {\r\n if (complaintRequest.mainProductReplacement) {\r\n // Main product replacement: Enter article number or description\r\n complaintRequest.mainProductReplacement.articleNo =\r\n complaint.replacements.selectedMainProductReplacement?.productId.trim().length === 0\r\n && complaint.generalComplaint.isReplacementNeeded === 'YES'\r\n ? 'Not Available'\r\n : complaint.replacements.selectedMainProductReplacement?.productId.trim().length === 0\r\n && complaint.generalComplaint.isReplacementNeeded === 'NO'\r\n ? '' // 20241122 Justin S. This is fine, but it still validates as True when checking if we need a return, so I'm adding an additional check on the ShippingInfo page\r\n : complaint.replacements.selectedMainProductReplacement?.productId.trim()\r\n\r\n complaintRequest.mainProductReplacement.description =\r\n complaint.replacements.selectedMainProductReplacement?.shortDescription\r\n }\r\n\r\n if (complaintRequest.implant) {\r\n // Secondary product replacement: Enter article number or description\r\n complaintRequest.implant.secondaryDeviceReplacementMaterial = complaint.secondaryDevice.isReplacementNeeded\r\n ? complaint.replacements.selectedSecondaryDeviceReplacement?.productId\r\n : undefined\r\n }\r\n\r\n return complaintRequest\r\n}\r\n\r\nconst mapAcknowledgement = (complaint: ComplaintState, complaintRequest: QualityNotificationRequest) => {\r\n if (complaintRequest.customer) {\r\n complaintRequest.customer.id = complaint.guestInfo.customerNumber || complaint.shippingInfo.customer?.customer\r\n complaintRequest.customer.name = complaint.shippingInfo.customer?.name1\r\n complaintRequest.customer.street = complaint.shippingInfo.shippingAddress?.street\r\n complaintRequest.customer.zip = complaint.shippingInfo.shippingAddress?.postalCode\r\n complaintRequest.customer.city = complaint.shippingInfo.shippingAddress?.city\r\n complaintRequest.customer.state = complaint.shippingInfo.shippingAddress?.region\r\n complaintRequest.customer.country = complaint.shippingInfo.shippingAddress?.country\r\n complaintRequest.customer.email = complaint.guestInfo.email || complaint.shippingInfo.customer?.emailAddress || sessionStorage.getItem('email')\r\n complaintRequest.customer.phone = complaint.shippingInfo.shippingAddress?.telephone\r\n complaintRequest.customer.shipTo = complaint.shippingInfo.shippingAddress?.customer\r\n }\r\n\r\n complaintRequest.termsAndConditions = complaint.shippingInfo.hasAcceptedTerms\r\n\r\n return complaintRequest\r\n}\r\n\r\nconst getDefaultComplaintRequest = (): QualityNotificationRequest => {\r\n return {\r\n customerNumber: undefined,\r\n countryCode: undefined,\r\n issue: {\r\n productType: undefined,\r\n issueDefinition: undefined,\r\n issueDefinitionOther: undefined,\r\n patientUsed: undefined,\r\n },\r\n product: {\r\n productReplacementRequired: undefined,\r\n articleNo: undefined,\r\n batchNo: undefined,\r\n description: undefined,\r\n toothPosition: undefined,\r\n returnAvailability: undefined,\r\n missingExplanation: undefined,\r\n sterilization: undefined,\r\n },\r\n implant: {\r\n implantOpenedOrDroppedByError: undefined,\r\n articleNo: undefined,\r\n batchNo: undefined,\r\n secondaryDevice: undefined,\r\n secondaryDeviceMaterialNumber: undefined,\r\n secondaryDeviceBatch: undefined,\r\n implantSitePreparationToolInitialNumberOfTimesUsed: undefined,\r\n implantType: undefined,\r\n },\r\n instrument: {\r\n age: undefined,\r\n },\r\n customer: {\r\n id: undefined,\r\n name: undefined,\r\n street: undefined,\r\n zip: undefined,\r\n city: undefined,\r\n state: undefined,\r\n country: undefined,\r\n phone: undefined,\r\n contactName: undefined,\r\n alternatePhone: undefined,\r\n shipTo: undefined,\r\n },\r\n patient: {\r\n code: undefined,\r\n age: undefined,\r\n gender: undefined,\r\n implantHygiene: undefined,\r\n injured: undefined,\r\n injuryType: undefined,\r\n injuryTypeText: undefined,\r\n status: undefined,\r\n },\r\n clinicalProcedure: {\r\n eventDate: undefined,\r\n placementDate: undefined,\r\n neverPlaced: undefined,\r\n secondSurgeryDate: undefined,\r\n implantLoadDate: undefined,\r\n implantLoadDateUnknown: undefined,\r\n noImplantLoad: undefined,\r\n removeDate: undefined,\r\n removed: undefined,\r\n painNumbnessOffAtRemoval: undefined,\r\n involvedConditions: undefined,\r\n involvedConditionOther: undefined,\r\n prolongedSurgery: undefined,\r\n prolongedTreatmentTime: undefined,\r\n boneQuality: undefined,\r\n },\r\n termsAndConditions: undefined,\r\n mainProductReplacement: {\r\n articleNo: undefined,\r\n description: undefined,\r\n },\r\n }\r\n}\r\n\r\nexport default prepareComplaintRequestData\r\n","import React, {useContext, useEffect, useMemo, useRef, useState} from 'react'\r\nimport {Box, Button, Checkbox, CircularProgress, FormControlLabel, Stack, Typography} from '@mui/material'\r\nimport {useNavigate} from 'react-router-dom'\r\nimport {AppContext} from '../../contexts/AppContextProvider'\r\nimport useScreenFlow from '../../hooks/useScreenFlow'\r\nimport http from '../../http'\r\nimport prepareComplaintRequestData from '../../lib/property-mapper'\r\nimport useLogger from '../../hooks/useLogger'\r\nimport {OrgCustomizationContext} from '../../themes/OrgCustomizationProvider'\r\nimport {cancelComplaint, createSecondaryComplaint} from '../../contexts/useComplaintReducer/RootReducerFactory'\r\nimport {resetIndexedDb} from \"../../lib/db\";\r\n\r\nconst ComplaintCompletion: React.FC = () => {\r\n const navigate = useNavigate()\r\n const {screenPaths} = useScreenFlow()\r\n const {t, storeUrl} = useContext(OrgCustomizationContext)\r\n const {\r\n complaint,\r\n customer,\r\n shouldClearSessionAfterSubmission,\r\n dispatch,\r\n loggedIn,\r\n countryCode\r\n } = useContext(AppContext)\r\n const log = useLogger()\r\n const [inProgress, setInProgress] = useState(true)\r\n const [success, setSuccess] = useState(false)\r\n const [complaintId, setComplaintId] = useState('')\r\n const useSamePatientAndTreatmentDates = useRef(null)\r\n const hasSecondaryDeviceComplaint = useMemo(() => complaint.secondaryDevice.hasSecondaryDeviceComplaint === 'YES', [complaint.secondaryDevice.hasSecondaryDeviceComplaint])\r\n\r\n useEffect(() => {\r\n if (!complaint.generalComplaint.selectedProduct) return\r\n\r\n if (!complaint.guestInfo.customerNumber && !customer.customer) {\r\n loggedIn ? navigate(screenPaths.natureOfComplaint) : navigate(screenPaths.natureOfComplaintGuest)\r\n }\r\n \r\n if (complaintId || !inProgress) return\r\n\r\n if (sessionStorage.getItem('complaintSubmitted') === 'true') {\r\n setSuccess(true)\r\n setInProgress(false)\r\n setComplaintId(sessionStorage.getItem('complaintId') || '')\r\n // log that a duplicate complaint was attempted for the specified complaint ID\r\n log.error(new Error('Duplicate complaint (due to page refresh) for Complaint: ' + sessionStorage.getItem('complaintId') + ' prevented.'))\r\n } else {\r\n prepareComplaintRequestData(complaint).then(requestData => http.post(\r\n `/api/QualityNotification?countryCode=${countryCode}`,\r\n requestData\r\n )\r\n .then((response) => {\r\n log.email('logged from Complaint Completion')\r\n\r\n const result = JSON.parse(JSON.stringify(response))\r\n\r\n if (result.name !== 'Error') {\r\n setSuccess(true)\r\n setComplaintId(response.data.complaintId)\r\n // to prevent duplicate submissions, we store a flag and the complaint id in session storage\r\n sessionStorage.setItem('complaintSubmitted', 'true')\r\n sessionStorage.setItem('complaintId', response.data.complaintId)\r\n }\r\n })\r\n .catch((error) => {\r\n log.email('logged from Complaint Completion')\r\n log.error(error)\r\n }))\r\n .finally(() => setInProgress(false))\r\n }\r\n }, [\r\n complaint,\r\n setInProgress,\r\n setSuccess,\r\n shouldClearSessionAfterSubmission,\r\n dispatch,\r\n complaintId,\r\n inProgress\r\n ])\r\n\r\n const clearSession = async (condition: boolean) => {\r\n if (condition) {\r\n await resetIndexedDb();\r\n dispatch(cancelComplaint())\r\n sessionStorage.clear()\r\n }\r\n }\r\n\r\n const goToHome = async () => {\r\n await clearSession(shouldClearSessionAfterSubmission)\r\n\r\n const redir = window.location\r\n\r\n const search = window.location.search\r\n\r\n redir.href = `${storeUrl}/${search}`\r\n }\r\n\r\n const fileAnotherComplaint = async () => {\r\n sessionStorage.clear()\r\n\r\n const navigatePath = hasSecondaryDeviceComplaint ? screenPaths.productType : screenPaths.productSearch\r\n\r\n await resetIndexedDb()\r\n\r\n dispatch(createSecondaryComplaint(hasSecondaryDeviceComplaint\r\n ? true\r\n : useSamePatientAndTreatmentDates?.current?.checked !== undefined\r\n ? useSamePatientAndTreatmentDates.current.checked\r\n : true\r\n ))\r\n\r\n navigate(navigatePath)\r\n }\r\n\r\n return !inProgress\r\n ? (\r\n <>\r\n {!success && {t('cc_error_message')}}\r\n {success && (\r\n <>\r\n {t('cc_thank_you_heading')}\r\n\r\n

{t('cc_complaint_received')}

\r\n

{t('cc_complaint_id', {complaintId})}

\r\n

{t('cc_thank_you')}

\r\n

{t('cc_customer_service')}

\r\n

{t('cc_implant_systems')}

\r\n \r\n )}\r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n {\r\n (complaint.secondaryDevice.hasSecondaryDevice === 'NO' ||\r\n complaint.secondaryDevice.hasSecondaryDeviceComplaint === 'NO') &&\r\n }/>\r\n }\r\n \r\n \r\n \r\n )\r\n : (\r\n <>\r\n \r\n \r\n Submitting your complaint\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default ComplaintCompletion\r\n","import { useEffect } from 'react'\r\nimport { useLocation } from 'react-router-dom'\r\n\r\nexport default function ScrollToTop() {\r\n const { pathname } = useLocation()\r\n\r\n useEffect(() => {\r\n window.scrollTo(0, 0)\r\n }, [pathname])\r\n\r\n return null\r\n}\r\n","import {\r\n Alert,\r\n Box,\r\n Button,\r\n CircularProgress,\r\n FormControl,\r\n FormLabel,\r\n Grid,\r\n InputAdornment,\r\n Stack,\r\n TextField,\r\n Typography,\r\n} from '@mui/material'\r\nimport {CancelButton, PreviousButton} from '../StepperButtons'\r\nimport useScreenFlow from '../../hooks/useScreenFlow'\r\nimport React, {useContext, useState} from 'react'\r\nimport {AppContext} from '../../contexts/AppContextProvider'\r\nimport {MaterialResponse, Product, SecondaryDeviceState, YesNoOptions} from '../../contexts/types'\r\nimport {useForm} from '../../hooks/useForm'\r\nimport {OrgCustomizationContext} from \"../../themes/OrgCustomizationProvider\";\r\nimport ProductSearchInput from \"../Inputs/ProductSearchInput\";\r\nimport CNBSRadioGroupInput from \"../Inputs/CNBSRadioGroupInput\";\r\nimport SelectedProductDisplay from \"../SelectedProductDisplay\";\r\nimport useUnknownProduct from \"../../hooks/useUnknownProduct\";\r\nimport useDefaultRadioOptions from \"../../hooks/useDefaultRadioOptions\";\r\nimport {setSecondaryDevice} from \"../../contexts/SecondaryDeviceReducer\";\r\nimport {setSecondaryDeviceReplacement} from \"../../contexts/ReplacementsReducer\";\r\nimport {getDefaultSecondaryDevice} from \"../../contexts/AppStateDefaults\";\r\nimport CheckIcon from \"@mui/icons-material/Check\";\r\nimport axios from \"axios\";\r\nimport http from \"../../http\";\r\n\r\nconst SecondaryDevice: React.FC = () => {\r\n const {screenPaths, navigateTo} = useScreenFlow()\r\n const {\r\n complaint,\r\n dispatch,\r\n postNotification,\r\n clearNotification,\r\n customerNumber,\r\n countryCode\r\n } = useContext(AppContext)\r\n const {t} = useContext(OrgCustomizationContext)\r\n const [isValidatingBatchNum, setIsValidatingBatchNum] =\r\n useState(false)\r\n const [isBatchNumValid, setIsBatchNumValid] = useState(true)\r\n const [showBatchNumCheck, setShowBatchNumCheck] = useState(false)\r\n\r\n const {\r\n data,\r\n errors,\r\n handleChangeEvent,\r\n validateFields,\r\n enableOnChangeValidation,\r\n setFormData\r\n } = useForm({\r\n initialValues: {...complaint.secondaryDevice},\r\n validations: {\r\n isBatchOrLotNumberKnown: {\r\n custom: {\r\n isValid: (value, data) => {\r\n // If there's a complaint on the secondary device, skip validation.\r\n if (data.hasSecondaryDeviceComplaint === 'YES') return true\r\n if (data.isProductUnknown) return true\r\n if (data.hasSecondaryDevice !== 'YES') return true\r\n\r\n return !!value;\r\n },\r\n message: t('this_field_is_required')\r\n }\r\n },\r\n batchOrLotNumber: {\r\n custom: {\r\n isValid: (value, data) => {\r\n // If there's a complaint on the secondary device, skip validation.\r\n if (data.hasSecondaryDeviceComplaint === 'YES') return true\r\n if (data.isProductUnknown) return true\r\n if (data.isBatchOrLotNumberKnown === 'YES') {\r\n // If the field is empty\r\n if (!value) {\r\n return false\r\n }\r\n }\r\n return true\r\n },\r\n message: t('pt_valid_batch_or_lot_number_is_required'),\r\n },\r\n },\r\n hasSecondaryDevice: {\r\n required: {\r\n value: true,\r\n message: t('this_field_is_required')\r\n }\r\n },\r\n hasSecondaryDeviceComplaint: {\r\n required: {\r\n value: (value, data) => !(data.hasSecondaryDevice === 'YES' && !value),\r\n message: t('this_field_is_required'),\r\n },\r\n },\r\n isReplacementNeeded: {\r\n required: {\r\n value: (value, data) => {\r\n if (data.hasSecondaryDeviceComplaint === 'YES') return true;\r\n return !(data.hasSecondaryDevice === 'YES' && !value);\r\n },\r\n message: t('this_field_is_required')\r\n }\r\n },\r\n selectedProduct: {\r\n required: {\r\n value: (value, data) => !(data.hasSecondaryDevice === 'YES' && !value),\r\n message: t('this_field_is_required')\r\n }\r\n }\r\n },\r\n })\r\n\r\n const {unknownProduct} = useUnknownProduct(complaint.secondaryDevice?.isProductUnknown || false)\r\n const {yesNoRadioOptions} = useDefaultRadioOptions()\r\n\r\n const handleValidation = () => {\r\n // Activate field level validation tracking\r\n enableOnChangeValidation(true)\r\n\r\n // Validate the form fields\r\n let isFormValid = validateFields(data)\r\n\r\n if (isFormValid) {\r\n if (data.isBatchOrLotNumberKnown === 'YES') {\r\n isFormValid = isBatchNumValid\r\n }\r\n }\r\n\r\n // Stop processing if the form has invalid fields\r\n if (!isFormValid) {\r\n postNotification('error', t('error_mess'))\r\n return isFormValid\r\n }\r\n\r\n // Form is valid, proceed with processing\r\n\r\n // Close the alert message in case it is open\r\n clearNotification()\r\n\r\n return isFormValid\r\n }\r\n\r\n const handleSubmit = () => {\r\n if (!handleValidation()) return\r\n\r\n dispatch(setSecondaryDevice(data))\r\n dispatch(setSecondaryDeviceReplacement(\r\n data.selectedProduct?.isDiscontinuedOrUnknown\r\n ? undefined\r\n : data.isReplacementNeeded === 'YES'\r\n ? data.selectedProduct\r\n : undefined\r\n ))\r\n\r\n navigateTo(screenPaths.availableToReturn)\r\n }\r\n\r\n const batchNumInitialValue: string = complaint.secondaryDevice\r\n .batchOrLotNumber as string\r\n\r\n const handleBatchNumberOnBlur = () => {\r\n\r\n const cancelTokenSource = axios.CancelToken.source()\r\n const batchNum = data.batchOrLotNumber\r\n\r\n const validateBatchNum = async (batchNum: string) => {\r\n try {\r\n setIsValidatingBatchNum(true)\r\n\r\n let response = await http.get(\r\n `/api/Product/Validate?material=${data.selectedProduct?.productId}&batch=${batchNum}&customerNumber=${customerNumber}&countryCode=${countryCode}`,\r\n {cancelToken: cancelTokenSource.token})\r\n\r\n if (\r\n response &&\r\n response.data &&\r\n response.data.materialList &&\r\n response.data.materialList.length > 0\r\n ) {\r\n if (\r\n response.data.materialList[0].batchReturnCode === '300'\r\n ) {\r\n setIsBatchNumValid(true)\r\n setShowBatchNumCheck(true)\r\n } else {\r\n setIsBatchNumValid(false)\r\n setShowBatchNumCheck(false)\r\n }\r\n }\r\n\r\n setIsValidatingBatchNum(false)\r\n } catch (e) {\r\n }\r\n }\r\n\r\n const resetBatchNumState = () => {\r\n setIsBatchNumValid(true)\r\n setShowBatchNumCheck(false)\r\n setIsValidatingBatchNum(false)\r\n }\r\n\r\n if (batchNum) {\r\n if (batchNum !== batchNumInitialValue) {\r\n validateBatchNum(batchNum)\r\n } else {\r\n resetBatchNumState()\r\n }\r\n } else {\r\n resetBatchNumState()\r\n }\r\n\r\n return () => {\r\n cancelTokenSource.cancel()\r\n }\r\n }\r\n\r\n const disableReplacementNeeded = data.hasSecondaryDevice === 'YES' && data.hasSecondaryDeviceComplaint === 'YES';\r\n\r\n return (\r\n \r\n \r\n \r\n {t('sd_secondary_device')}\r\n \r\n\r\n {\r\n if (e.target.value !== data.hasSecondaryDevice) {\r\n setFormData({\r\n ...getDefaultSecondaryDevice(),\r\n hasSecondaryDevice: e.target.value as YesNoOptions\r\n })\r\n }\r\n }}\r\n options={yesNoRadioOptions}\r\n error={errors.hasSecondaryDevice}\r\n />\r\n\r\n {data.hasSecondaryDevice === 'YES' && }\r\n\r\n {data.hasSecondaryDeviceComplaint === 'YES' &&\r\n data.hasSecondaryDevice === 'YES' && (\r\n \r\n {t('sd_new_complaint')}\r\n \r\n )}\r\n \r\n\r\n {(data.hasSecondaryDevice === 'YES' && !data.selectedProduct) && (\r\n \r\n val && setFormData({\r\n ...data,\r\n isProductUnknown: true,\r\n selectedProduct: unknownProduct\r\n })}\r\n value={complaint.secondaryDevice.selectedProduct}\r\n onChange={(product) => setFormData({\r\n ...data,\r\n selectedProduct: product,\r\n isProductUnknown: false\r\n })}\r\n />\r\n \r\n )}\r\n\r\n {(data.selectedProduct || data.isProductUnknown) &&\r\n setFormData({\r\n ...data,\r\n isProductUnknown: undefined,\r\n selectedProduct: undefined,\r\n batchOrLotNumber: '',\r\n isReplacementNeeded: ''\r\n })}>\r\n {t('click_here_to_change_article_number')}\r\n }\r\n />}\r\n\r\n \r\n {data.selectedProduct && !disableReplacementNeeded && !data.isProductUnknown && <>\r\n \r\n \r\n \r\n {data.isBatchOrLotNumberKnown === 'YES' && (\r\n \r\n \r\n \r\n {t('pt_enter_batch_or_lot_number')}:\r\n \r\n \r\n {isValidatingBatchNum && (\r\n \r\n )}\r\n {showBatchNumCheck && !isValidatingBatchNum &&\r\n isBatchNumValid &&\r\n data.batchOrLotNumber && (\r\n \r\n )}\r\n \r\n ),\r\n }}\r\n onBlur={handleBatchNumberOnBlur}\r\n />\r\n \r\n \r\n )}\r\n }\r\n\r\n {data.selectedProduct && !disableReplacementNeeded && {\r\n if (!disableReplacementNeeded) {\r\n handleChangeEvent('isReplacementNeeded')(event);\r\n }\r\n }}\r\n options={yesNoRadioOptions}\r\n disabled={disableReplacementNeeded}\r\n />}\r\n \r\n\r\n\r\n \r\n handleSubmit()}\r\n >\r\n {t('continue')}\r\n \r\n\r\n dispatch(setSecondaryDevice(data))}/>\r\n\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default SecondaryDevice\r\n","import {Button, CircularProgress, Grid, Typography} from \"@mui/material\"\r\nimport React, {useContext, useState} from \"react\"\r\nimport {AppContext} from \"../../contexts/AppContextProvider\"\r\nimport Field from \"../Field\"\r\nimport {useFormik} from 'formik';\r\nimport * as yup from 'yup';\r\nimport useScreenFlow from \"../../hooks/useScreenFlow\";\r\nimport http from \"../../http\";\r\nimport {Customer} from \"../../contexts/types\";\r\nimport charLimit from \"../../lib/charLimit\"\r\nimport {OrgCustomizationContext} from \"../../themes/OrgCustomizationProvider\";\r\nimport makeStyles from \"@mui/styles/makeStyles\";\r\nimport {updateGeneralInfo} from \"../../contexts/GeneralInfoReducer\";\r\nimport CountrySelectInput from \"../Inputs/CountrySelectInput\";\r\nimport {getSearchParamsCountryCode} from \"../../lib/locale-helpers\";\r\nimport {patchGuestInfo} from \"../../contexts/GuestInfoReducer\";\r\nimport {isEmpty} from \"lodash\";\r\n\r\nconst useStyles = makeStyles({\r\n removeNumberIncrementButtons: {\r\n '& input[type=number]': {\r\n '-moz-appearance': 'textfield'\r\n },\r\n '& input[type=number]::-webkit-outer-spin-button': {\r\n '-webkit-appearance': 'none',\r\n margin: 0\r\n },\r\n '& input[type=number]::-webkit-inner-spin-button': {\r\n '-webkit-appearance': 'none',\r\n margin: 0\r\n }\r\n },\r\n});\r\n\r\nconst GuestForm = () => {\r\n const {complaint, dispatch, setCustomer} = useContext(AppContext)\r\n const {t, theme, changeLanguage, supportedLanguages, guestCountryWhiteList, countryLanguageMap} = useContext(OrgCustomizationContext)\r\n const classes = useStyles()\r\n const {navigateTo} = useScreenFlow();\r\n const [customerNumberMatch, setCustomerNumberMatch] = useState(null)\r\n const [loadingCustomerSearch, setLoadingCustomerSearch] = useState(false)\r\n const req = t('this_field_is_required')\r\n const emailFormat = t('gi_invalid_email')\r\n const maxChar = (value: number): string => t('gi_limit_of', {characters: value.toString()})\r\n \r\n const handleCountryChange = (countryCode: string) => {\r\n let languageCode = countryLanguageMap[countryCode]\r\n \r\n // If the language code is not supported, default to English\r\n if (!languageCode || !supportedLanguages.has(languageCode)) {\r\n languageCode = 'en'\r\n }\r\n \r\n // Update the application language\r\n changeLanguage(languageCode)\r\n \r\n // Update the URL parameter\r\n const url = new URL(window.location.toString())\r\n url.searchParams.set('lang', `${languageCode}-${countryCode}`)\r\n window.history.pushState(null, '', url.toString())\r\n\r\n // Update Formik with the country name\r\n formik.setFieldValue('country', countryCode, true)\r\n }\r\n\r\n const validationSchema = yup.object({\r\n customerNumber: yup\r\n .number()\r\n .required(req)\r\n .integer(req),\r\n customerName: yup\r\n .string()\r\n .required(req)\r\n .max(40, maxChar(40)),\r\n contactName: yup\r\n .string()\r\n .required(req),\r\n email: yup\r\n .string()\r\n .email(emailFormat)\r\n .required(req)\r\n .max(80, maxChar(80)),\r\n telephone: yup\r\n .string()\r\n .matches(/^((\\\\+[1-9]{1,4}[ \\\\-]*)|(\\\\([0-9]{2,3}\\\\)[ \\\\-]*)|([0-9]{2,4})[ \\\\-]*)*?[0-9]{3,4}?[ \\\\-]*[0-9]{3,4}?$/, t('invalid_phone_number'))\r\n .required(req),\r\n country: yup\r\n .string()\r\n .required()\r\n })\r\n\r\n const initialValues = {\r\n customerNumber: '',\r\n customerName: '',\r\n contactName: '',\r\n email: '',\r\n telephone: '',\r\n country: (complaint.guestInfo.country === 'int' ? '' : getSearchParamsCountryCode()) || ''\r\n }\r\n\r\n const formik = useFormik({\r\n\r\n initialValues: initialValues,\r\n validationSchema: validationSchema,\r\n onSubmit: async (values) => {\r\n setCustomerNumberMatch(null)\r\n\r\n const customerNumber = parseInt(values.customerNumber)\r\n\r\n try {\r\n setLoadingCustomerSearch(true)\r\n\r\n const {data: {customerExists}} = await http.get<{\r\n customerExists: boolean\r\n }>(`/api/Customer/Search?customerNumber=${customerNumber}&countryCode=${values.country}`)\r\n\r\n setCustomerNumberMatch(customerExists)\r\n\r\n if (customerExists) {\r\n dispatch(updateGeneralInfo({\r\n contactName: values.contactName,\r\n isAcknowledged: complaint.generalInfo.isAcknowledged,\r\n }))\r\n\r\n setCustomer({\r\n customer: String(values.customerNumber),\r\n firstName: '',\r\n lastName: '',\r\n emailAddress: values.email,\r\n shipToParty: values.customerNumber,\r\n billToParty: '',\r\n name1: values.customerName,\r\n name2: '',\r\n country: values.country,\r\n salesOrg: '',\r\n distributionChannel: '',\r\n division: '',\r\n shippingMethod: '',\r\n paymentTerm: '',\r\n language: '',\r\n currency: '',\r\n policyChkText: '',\r\n status: undefined,\r\n errorText: undefined,\r\n } as Customer)\r\n\r\n dispatch(patchGuestInfo.telephone(values.telephone.replace(/\\D/g, values.telephone)))\r\n dispatch(patchGuestInfo.customerNumber(values.customerNumber.toString()))\r\n dispatch(patchGuestInfo.email(values.email))\r\n dispatch(patchGuestInfo.country(values.country))\r\n\r\n document.cookie = `X-User-Id=${values.customerNumber}; path=/; SameSite=Strict`;\r\n document.cookie = `X-User-Email=${values.email}; path=/; SameSite=Strict`;\r\n\r\n navigateTo('/guest')\r\n }\r\n } catch (e) {\r\n console.log(e)\r\n } finally {\r\n setLoadingCustomerSearch(false)\r\n }\r\n },\r\n })\r\n\r\n return (\r\n <>\r\n \r\n {t('gi_customer_information')}\r\n \r\n\r\n
\r\n\r\n \r\n\r\n \r\n {\r\n getSearchParamsCountryCode() === 'int' &&\r\n {\r\n formik.handleChange(e)\r\n handleCountryChange(e.target.value);\r\n }}\r\n whitelist={guestCountryWhiteList}\r\n error={!!formik.touched.country && !!formik.errors.country}\r\n helperText={formik.touched.country && formik.errors.country}/>\r\n }\r\n\r\n ) => formik.handleChange(e)}\r\n onInput={(e: any) => {\r\n const maxLen: number = 10;\r\n const sliceEnd: number = maxLen;\r\n const val: string = String(e.target.value)\r\n const len: number = val.length\r\n\r\n e.target.value = len > maxLen ? val.slice(0, sliceEnd) : val;\r\n }}\r\n />\r\n {\r\n\r\n let string = e.currentTarget.value\r\n\r\n const max = 40\r\n\r\n const result = charLimit({string, max})\r\n\r\n formik.setFieldValue('customerName', result, true)\r\n\r\n }}\r\n />\r\n {\r\n\r\n let string = e.currentTarget.value\r\n\r\n const max = 40\r\n\r\n const result = charLimit({string, max})\r\n\r\n formik.setFieldValue('contactName', result, true)\r\n\r\n }}\r\n />\r\n {\r\n\r\n let string = e.currentTarget.value\r\n\r\n const max = 80\r\n\r\n const result = charLimit({string, max})\r\n\r\n formik.setFieldValue('email', result, true)\r\n\r\n }}\r\n />\r\n \r\n\r\n \r\n \r\n {loadingCustomerSearch && }}\r\n >\r\n {t('continue')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default GuestForm\r\n","import React, { useContext, useEffect } from 'react'\r\nimport { LinearProgress } from '@mui/material'\r\nimport { AppContext } from '../contexts/AppContextProvider'\r\nimport useScreenFlow from '../hooks/useScreenFlow'\r\n\r\nconst ProgressBar = () => {\r\n const { progress, setProgress } = useContext(AppContext)\r\n const { calculateProgress } = useScreenFlow()\r\n\r\n useEffect(() => {\r\n setProgress(calculateProgress())\r\n }, [setProgress, calculateProgress])\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default ProgressBar\r\n","import React, {useContext} from 'react'\r\nimport {Typography} from '@mui/material'\r\nimport {OrgCustomizationContext} from \"../themes/OrgCustomizationProvider\";\r\n\r\nconst Copyright = (props: any) => {\r\n const { t } = useContext(OrgCustomizationContext)\r\n\r\n return (\r\n
\r\n \r\n {t('copyright', { year: new Date().getFullYear().toString() })}\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default Copyright\r\n","import React, {useContext, useMemo} from 'react'\r\nimport {MenuItem, Select, SelectChangeEvent} from \"@mui/material\";\r\nimport {OrgCustomizationContext} from \"../themes/OrgCustomizationProvider\";\r\nimport {useSearchParams} from \"react-router-dom\";\r\n\r\nconst languages = [\r\n [\"English\", \"en\"],\r\n [\"中文\", \"zh\"],\r\n [\"Deutsch\", \"de\"],\r\n [\"Español\", \"es\"],\r\n [\"Français\", \"fr\"],\r\n [\"Italiano\", \"it\"],\r\n [\"日本語\", \"ja\"],\r\n [\"Português\", \"pt\"],\r\n [\"Русский\", \"ru\"]\r\n]\r\n\r\nconst LanguageSelector: React.FC = () => {\r\n const {supportedLanguages} = useContext(OrgCustomizationContext)\r\n const languageOptions = useMemo(() => languages.filter(l => supportedLanguages.has(l[1])), [supportedLanguages])\r\n const {language, changeLanguage} = useContext(OrgCustomizationContext)\r\n\r\n if (supportedLanguages.size < 2) return null\r\n\r\n return (\r\n {\r\n changeLanguage(e.target.value)\r\n\r\n const url = new URL(window.location.toString())\r\n\r\n if (url.searchParams.has('lang')) {\r\n const [_, country] = url.searchParams.get('lang')?.split('-') || ['', '']\r\n url.searchParams.set('lang', `${e.target.value}-${country}`)\r\n window.history.pushState(null, '', url.toString());\r\n }\r\n }}\r\n >\r\n {languageOptions.map(l => {l[0]} ({l[1]}))}\r\n \r\n )\r\n}\r\n\r\nexport default LanguageSelector\r\n","import React, {useContext} from 'react'\r\nimport {Box, Container, Grid, Typography} from '@mui/material'\r\nimport ProgressBar from './components/ProgressBar'\r\nimport Copyright from './components/Copyright'\r\nimport {Outlet} from 'react-router-dom'\r\nimport {OrgCustomizationContext} from \"./themes/OrgCustomizationProvider\";\r\nimport LanguageSelector from \"./components/LanguageSelector\";\r\n\r\nconst HUD = () => {\r\n const {orgName, t} = useContext(OrgCustomizationContext)\r\n \r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {orgName} {t('gi_complaints')}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default HUD\r\n","import {useContext, useEffect} from 'react'\r\nimport {MemoryRouter, Route, Routes, useLocation, useSearchParams} from 'react-router-dom'\r\nimport AuthSelection from '../components/Screens/AuthSelection'\r\nimport {AppContext} from '../contexts/AppContextProvider'\r\nimport NatureOfComplaint from '../components/Screens/NatureOfComplaint'\r\nimport ProductSearch from '../components/Screens/ProductSearch'\r\nimport ProductType from '../components/Screens/ProductType'\r\nimport EventOccurrence from '../components/Screens/EventOccurrence'\r\nimport TreatmentDates from '../components/Screens/TreatmentDates'\r\nimport PatientInfo from '../components/Screens/PatientInfo'\r\nimport AbutmentsInformation from '../components/Screens/AbutmentsInformation'\r\nimport InstrumentInformation from '../components/Screens/InstrumentInformation'\r\nimport AvailableToReturn from '../components/Screens/AvailableToReturn'\r\nimport ClinicalCondition from '../components/Screens/ClinicalConditions/ClinicalCondition'\r\nimport ComplaintType from '../components/Screens/ComplaintTypes/ComplaintType'\r\nimport ShippingInfo from '../components/Screens/ShippingInfo'\r\nimport ComplaintCompletion from '../components/Screens/ComplaintCompletion'\r\nimport ScrollToTop from '../components/ScrollToTop'\r\nimport SecondaryDevice from '../components/Screens/SecondaryDevice'\r\nimport {screenPaths} from '../hooks/useScreenFlow'\r\nimport GuestForm from '../components/Screens/GuestForm'\r\nimport HUD from '../HUD'\r\n\r\nexport const PageTracker = () => {\r\n const {pathname} = useLocation()\r\n\r\n useEffect(() => {\r\n const url = new URL(window.location.toString())\r\n url.searchParams.set('location', encodeURI(pathname.replaceAll('/', '')) || 'index');\r\n window.history.pushState(null, '', url.toString());\r\n }, [pathname])\r\n\r\n return null;\r\n}\r\n\r\nconst AppRouter = () => {\r\n const {loggedIn} = useContext(AppContext)\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n }>\r\n {\r\n loggedIn\r\n ? }/>\r\n : (\r\n <>\r\n }/>\r\n }/>\r\n \r\n )\r\n }\r\n\r\n }/>\r\n }/>\r\n }/>\r\n }/>\r\n }/>\r\n }/>\r\n }/>\r\n }/>\r\n }/>\r\n }/>\r\n }/>\r\n }/>\r\n }/>\r\n }/>\r\n \r\n \r\n \r\n )\r\n}\r\nexport default AppRouter\r\n","import {Alert, Snackbar} from \"@mui/material\";\r\nimport ErrorOutlineOutlinedIcon from \"@mui/icons-material/ErrorOutlineOutlined\";\r\nimport CheckCircleOutlineOutlinedIcon from \"@mui/icons-material/CheckCircleOutlineOutlined\";\r\nimport React, {useContext, useEffect, useState} from \"react\";\r\nimport {AppContext} from \"../contexts/AppContextProvider\";\r\n\r\nconst NotificationProvider: React.FC = ({children}) => {\r\n const [open, setOpen] = useState(false)\r\n const {notification} = useContext(AppContext)\r\n\r\n useEffect(() => {\r\n setOpen(!!notification)\r\n }, [notification]);\r\n\r\n return (\r\n <>\r\n {children}\r\n setOpen(false)}\r\n anchorOrigin={{vertical: 'bottom', horizontal: 'center'}}\r\n >\r\n
\r\n {notification && (\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n style={{padding: 30, fontSize: '1.35em'}}\r\n sx={{\r\n '& .MuiAlert-action': {\r\n mt: '.5rem',\r\n },\r\n }}\r\n onClose={() => setOpen(false)}\r\n severity={notification[0]}\r\n >\r\n {notification[1]}\r\n \r\n )}\r\n
\r\n \r\n \r\n )\r\n}\r\n\r\nexport default NotificationProvider\r\n","import {useContext, useEffect} from \"react\";\r\nimport {OrgCustomizationContext} from \"../themes/OrgCustomizationProvider\";\r\n\r\nconst GoogleAnalytics: React.FC = ({children}) => {\r\n const {googleAnalytics, loadingOrgConfiguration} = useContext(OrgCustomizationContext);\r\n\r\n useEffect(() => {\r\n if (googleAnalytics && !loadingOrgConfiguration) {\r\n const options = Object.keys(googleAnalytics.Options || {})\r\n // @ts-ignore\r\n .map(k => `${k}=${googleAnalytics.Options[k]}`)\r\n .join('&')\r\n const script = document.createElement('script')\r\n script.textContent = `\r\n (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\r\n new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\r\n j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\r\n 'https://www.googletagmanager.com/gtm.js?id='+i+dl${options ? `+'&${options}'` : ''};f.parentNode.insertBefore(j,f);\r\n })(window,document,'script','dataLayer','${googleAnalytics.Id}');\r\n `\r\n document.head.prepend(script)\r\n\r\n const noscript = document.createElement('noscript')\r\n const iframe = document.createElement('iframe')\r\n iframe.src = `https://www.googletagmanager.com/ns.html?id=${googleAnalytics.Id}${options ? `&${options}` : ''}`\r\n iframe.height = '0'\r\n iframe.width = '0'\r\n iframe.setAttribute('style', 'display:none;visibility:hidden')\r\n noscript.appendChild(iframe)\r\n document.body.prepend(noscript)\r\n }\r\n }, [googleAnalytics, loadingOrgConfiguration])\r\n\r\n return <>{children};\r\n}\r\n\r\nexport default GoogleAnalytics\r\n","import './themes/styles.css'\r\nimport React from 'react'\r\nimport {AppContextProvider} from './contexts/AppContextProvider'\r\nimport LoginCheck from './components/LoginCheck'\r\nimport AdapterDateFns from '@mui/lab/AdapterDateFns'\r\nimport LocalizationProvider from '@mui/lab/LocalizationProvider'\r\nimport DataRetrieval from './components/DataRetrieval'\r\nimport {getLocaleFile} from './lib/locale-helpers'\r\nimport AppRouter from './routers/AppRouter'\r\nimport {OrgCustomizationProvider} from \"./themes/OrgCustomizationProvider\";\r\nimport NotificationProvider from \"./components/NotificationProvider\";\r\nimport GoogleAnalytics from \"./contexts/GoogleAnalytics\";\r\n\r\nconst App: React.FC = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n)\r\n\r\nexport default App\r\n","import { ReportHandler } from 'web-vitals';\r\n\r\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\r\n if (onPerfEntry && onPerfEntry instanceof Function) {\r\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n getCLS(onPerfEntry);\r\n getFID(onPerfEntry);\r\n getFCP(onPerfEntry);\r\n getLCP(onPerfEntry);\r\n getTTFB(onPerfEntry);\r\n });\r\n }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport App from './App';\r\nimport reportWebVitals from './reportWebVitals';\r\nimport http from './http';\r\n\r\nlet appVersion = ''\r\n\r\nhttp.get<{ version: string }>('api/version')\r\n .then(res => appVersion = res.data.version)\r\n .catch(() => appVersion = 'unknown')\r\n\r\nsetInterval(() => {\r\n http.get<{ version: string }>('api/version')\r\n .then(res => {\r\n if(res.data.version === appVersion) return\r\n window.location.reload()\r\n })\r\n}, 60000)\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n"],"sourceRoot":""}