{"version":3,"sources":["component/UsefulResources/useMdImport.js","component/Support lazy /^.*$/ groupOptions: {} namespace object","component/UsefulResources lazy /^.*$/ groupOptions: {} namespace object","aws-exports.js","component/Header.js","component/Landing.js","route/LandingPage.js","route/SignIn.js","component/AlertDialog.js","route/SignUp.js","route/SignUpConfirm.js","route/ForgotPassword.js","route/ChangePassword.js","component/Explore/component/Filter/component/FilterCaseId.js","component/Explore/component/Filter/component/FilterAge.js","component/Explore/component/Filter/component/FilterAgeOnset.js","component/Explore/component/Filter/component/FilterGender.js","component/Explore/component/Filter/component/FilterRace.js","component/Explore/component/Filter/component/FilterBMI.js","component/Explore/component/Filter/component/FilterDonorType.js","component/Explore/component/Filter/component/FilterDiabetesDuration.js","component/Explore/component/Filter/component/FilterHbA1c.js","component/Explore/component/Filter/component/FilterAutoAntibody.js","component/Explore/component/Filter/component/FilterAutoAntibodyPositiveNumber.js","component/Explore/component/Filter/component/FilterInsulitis.js","component/Explore/component/Filter/component/FilterCPeptide.js","component/Explore/component/Filter/component/FilterTitle.js","component/Explore/component/Filter/component/FilterDataset.js","component/Explore/component/Filter/component/FilterGenetic.js","component/Explore/component/Filter/Filter.js","component/Explore/component/Result/component/ExportSpreadSheet.js","component/Explore/component/Result/component/Search.js","component/Explore/component/Result/component/FetchRawData.js","component/CaseView/component/CaseViewTitle.js","component/CaseView/component/TabView/component/DonorSummary/component/DonorInformation.js","component/CaseView/component/TabView/component/DonorSummary/component/LabTestResults.js","component/CaseView/component/TabView/component/DonorSummary/component/HighResolutionHLA.js","component/CaseView/component/TabView/component/DonorSummary/component/TransplantHLA.js","component/CaseView/component/TabView/component/DonorSummary/DonorSummary.js","component/CaseView/component/TabView/component/ClinicalHistory/component/HospitalAdmission.js","component/CaseView/component/TabView/component/ClinicalHistory/component/ClinicalHistory2.js","component/CaseView/component/TabView/component/ClinicalHistory/component/Medication.js","component/CaseView/component/TabView/component/ClinicalHistory/component/HospitalLaboratoryPanel.js","component/CaseView/component/TabView/component/ClinicalHistory/ClinicalHistory.js","component/CaseView/component/TabView/component/CaseProcessingAndTissueQuality/component/CaseProcessing.js","component/CaseView/component/TabView/component/CaseProcessingAndTissueQuality/component/TissueQuality.js","component/CaseView/component/TabView/component/component/NpodImageGallery.js","component/CaseView/component/TabView/component/CaseProcessingAndTissueQuality/component/TissueQualityImageViewer.js","component/CaseView/component/TabView/component/CaseProcessingAndTissueQuality/CaseProcessingAndTissueQuality.js","component/CaseView/component/TabView/component/FunctionalAssay/component/FunctionalAssayImageViewer.js","component/CaseView/component/TabView/component/FunctionalAssay/component/PeakInsulinSecretionDuringStimulation.js","component/CaseView/component/TabView/component/FunctionalAssay/FunctionalAssay.js","component/CaseView/component/TabView/component/Histopathology/component/HistopathologyInfo.js","component/CaseView/component/TabView/component/Histopathology/component/ImageLink.js","component/CaseView/component/TabView/component/Histopathology/Histopathology.js","component/CaseView/component/TabView/component/Immunophenotyping/component/ImmunophenotypingImageViewer.js","component/CaseView/component/TabView/component/Immunophenotyping/Immunophenotyping.js","component/CaseView/component/TabView/component/Genetic/component/Score.js","component/CaseView/component/TabView/component/Genetic/component/Percentile.js","component/CaseView/component/TabView/component/Genetic/component/ScoreAndPercentile.js","component/CaseView/component/TabView/component/Genetic/component/Availability.js","component/CaseView/component/TabView/component/Genetic/component/Admixture.js","component/CaseView/component/TabView/component/Genetic/component/GRS1Snps.js","component/CaseView/component/TabView/component/Genetic/component/GRS2Snps.js","component/CaseView/component/TabView/component/Genetic/component/AAGRSSnps.js","component/CaseView/component/TabView/component/Genetic/component/Reference.js","component/CaseView/component/TabView/component/Genetic/Genetic.js","component/CaseView/component/TabView/TabView.js","component/CaseView/CaseView.js","component/Explore/component/Result/component/DataPreProcess.js","component/Explore/component/Result/Result.js","component/Explore/Explore.js","route/ExplorePage.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/TextCheckAndFix.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/TextBox.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/TextBoxLarge.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/TextBoxForHLA.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/DateBox.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/DropBox.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/TimeBox.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/IntegerNumberBox.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/FloatNumberBox.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/InputBox.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/GridBox.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useDebounced.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useCreateCase.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useCheckCaseExist.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/CreateCase_step0.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useRetrieveCaseColumns.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useRetrieveTableColumn.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useUpdateCase.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/CaseIdentificationAndQC_step1.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/CaseProcessing_step2.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useRetrieveTableColumnPossibleValue.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/DemographicsAndTimeline_step3.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/ClinicalHistoryAndMedSoc_step4.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/HospitalLabs_step5.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useCheckAAbExist.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useRetrieveAllAAbIds.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useRetrieveAAbColumns.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useUpdateAAb.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useCreateAAb.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/AAb_step6.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useCheckHLAExist.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useRetrieveHLAColumns.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useUpdateHLA.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useCreateHLA.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/HLA_step7.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useCheckRNAExist.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useRetrieveTableColumnWithConditions.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useRetrieveAllRNAIds.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useRetrieveRNAColumns.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useUpdateRNA.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useCreateRNA.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/RNA_step8.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useCheckSampleExist.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useRetrieveAllVialIds.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useRetrieveSampleColumns.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useUpdateSample.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useCreateSample.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/component/useDeleteSample.js","component/Admin/component/WriteIn/component/SingleCaseStepper/component/Sample_step9.js","component/Admin/component/WriteIn/component/SingleCaseStepper/SingleCaseStepper.js","component/Admin/component/WriteIn/component/UploadImage/component/component/useSaveChange.js","component/Admin/component/WriteIn/component/UploadImage/component/component/useGetAllExistingCaseIds.js","component/Admin/component/WriteIn/component/UploadImage/component/component/useGetAllFolders.js","component/Admin/component/WriteIn/component/UploadImage/component/UploadImageFile.js","component/Admin/component/WriteIn/component/UploadImage/UploadImage.js","component/Admin/component/WriteIn/component/ImportData/component/component/useRetrieveTableHeaders.js","component/Admin/component/WriteIn/component/ImportData/component/component/useRetrieveExistingPrimaryKeyValues.js","component/Admin/component/WriteIn/component/ImportData/component/component/useDataUpload.js","component/Admin/component/WriteIn/component/ImportData/component/component/useCreateTempCloneTable.js","component/Admin/component/WriteIn/component/ImportData/component/component/useCheckImportFileFormat.js","component/Admin/component/WriteIn/component/ImportData/component/component/HeaderMappingTable.js","component/Admin/component/WriteIn/component/ImportData/component/ImportHLADataFile.js","component/Admin/component/WriteIn/component/ImportData/ImportData.js","component/Admin/component/WriteIn/WriteIn.js","component/Admin/Admin.js","route/AdminPage.js","route/WriteInPage.js","component/Admin/component/UserManage/component/useDisable.js","component/Admin/component/UserManage/component/useEnable.js","component/Admin/component/UserManage/component/useConfirm.js","component/Admin/component/UserManage/component/userDelete.js","component/Admin/component/UserManage/UserManage.js","route/UserManagePage.js","route/SupportPage.js","component/Contact.js","route/ContactPage.js","route/VerifyEmail.js","route/VerifyAttributeWithCode.js","component/UserAgreement/UserAgreement.js","route/UserAgreementPage.js","route/ResetPassword.js","route/UsefulResourcesPage.js","component/Dataset/DatasetExplore/component/Filter.js","component/Dataset/DatasetExplore/component/component/useRetrieveAllDatasets.js","component/Dataset/DatasetExplore/component/DatasetCardList.js","component/Dataset/DatasetExplore/DatasetExplore.js","route/DatasetExplorePage.js","component/Dataset/DatasetSubmit/component/component/useCreateDataset.js","component/Dataset/DatasetSubmit/component/component/useDownloadFile.js","component/Dataset/DatasetSubmit/component/DatasetForm.js","component/Dataset/DatasetSubmit/DatasetSubmit.js","route/DatasetSubmitPage.js","component/Dataset/DatasetManage/component/component/useRetrieveDatasetsByAuthor.js","component/Dataset/DatasetManage/component/DatasetCardList.js","component/Dataset/DatasetManage/DatasetManage.js","route/DatasetManagePage.js","component/Dataset/DatasetDisplay/component/useRetrieveDatasetByDatasetId.js","component/Dataset/DatasetDisplay/component/component/useRetrieveCaseIdByDatasetId.js","component/Dataset/DatasetDisplay/component/component/useRetrieveCaseByCaseIdList.js","component/Dataset/DatasetDisplay/component/component/useRetrieveDonorTypeMap.js","component/Dataset/DatasetDisplay/component/component/useRetrieveCauseOfDeathMap.js","component/Dataset/DatasetDisplay/component/component/useRetrieveHLAMap.js","component/Dataset/DatasetDisplay/component/component/ButtonDownloadCsvFromJson.js","component/Dataset/DatasetDisplay/component/component/component/useRetrieveDataFileKey.js","component/Dataset/DatasetDisplay/component/component/component/useRetrieveDataFilePath.js","component/Dataset/DatasetDisplay/component/component/component/ButtonDownloadCsvFromPath.js","component/Dataset/DatasetDisplay/component/component/ExampleDataFIleGrid.js","component/Dataset/DatasetDisplay/component/component/component/useGenJsonWithPath.js","component/Dataset/DatasetDisplay/component/component/usePreprocessCaseData.js","component/Dataset/DatasetDisplay/component/NormalDisplay.js","component/Dataset/DatasetDisplay/component/EditDisplay.js","component/Dataset/DatasetDisplay/DatasetDisplay.js","route/DatasetDisplayPage.js","App.js","reportWebVitals.js","Redux/authReducer.js","Redux/exploreReducer.js","Redux/rootReducer.js","Redux/store.js","index.js","component/Support/useMdImport.js","component/Support/Support.js","component/Support/SupportContent.js","component/UsefulResources/UsefulResources.js","component/UsefulResources/UsefulResourcesContent.js","component/AuthHeader.js","component/UserAgreement lazy /^/.//.*/.txt$/ groupOptions: {} namespace object"],"names":["useMdImport","filePath","useState","post","setPost","useEffect","a","file","fetch","default","response","text","children","rehypePlugins","rehypeRaw","setTheText","map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","id","all","slice","keys","Object","module","exports","awsmobile","HideOnScroll","props","trigger","useScrollTrigger","disableHysteresis","threshold","target","window","undefined","Slide","appear","direction","in","useStyles","makeStyles","theme","root","flexGrow","justifyContent","alignItems","title1","fontWeight","color","marginRight","title2","title3","icon","appbarWrapper","width","margin","marginTop","textShadow","authButton","spacing","background","textDecoration","authButton2","borderRadius","border","helpText","padding","HeaderTooltip","withStyles","tooltip","backgroundColor","maxWidth","fontSize","Tooltip","connect","state","ownProps","signedIn","auth","userName","dispatch","setSignedIn","newSignedIn","type","value","setUserName","newUserName","Auth","currentAuthenticatedUser","authRes","console","log","username","attributes","email_verified","setEmailVerified","signInUserSession","accessToken","payload","includes","setDisplayAdminAccess","checkAuth","classes","history","useHistory","React","anchorEl","setAnchorEl","setLogoSize","title1Size","setTitle1Size","title2Size","setTitle2Size","avatarSize","setAvatarSize","emailVerified","displayAdminAccess","updateResponsiveWidth","innerWidth","addEventListener","removeEventListener","signOutHandler","signOut","push","helpTextBeforeSignIn","Fragment","className","helpTextAfterSignIn","helpTextEmailVerify","Helmet","location","roots","AppBar","elevation","position","Toolbar","style","href","useLocation","pathname","Typography","variant","IconButton","aria-label","onClick","title","placement","marginLeft","edge","event","currentTarget","Menu","keepMounted","open","Boolean","getContentAnchorEl","onClose","anchorOrigin","vertical","horizontal","transformOrigin","MenuItem","ListItemIcon","ListItemText","primary","origin","backgroundImage","backgroundRepeat","backgroundSize","overflow","centerBox","height","centerTitle","fontFamily","centerTitle2","centerTitle3","centerTitle4","display","centerContent","centerButton","centerButtonEmpty","colorText","linkText","LandingPageTooltip","logoSize","imageWidth","setImageWidth","setTitle1","setTitle2","title4","setTitle4","displayDatasetSubmit","setDisplayDatasetSubmit","helpTextNotAvailable","CssBaseline","Grid","container","justify","item","src","Box","LandingPage","Copyright","align","Link","Date","getFullYear","paper","flexDirection","avatar","palette","secondary","main","form","submit","alert","bottom","signInType","from","setSuccessMsg","showAlertHandler","setErrorMsg","setUsername","password","setPassword","remember","setRemember","showPassword","setShowPassword","showSuccess","setShowSuccess","successMsg","showFail","setShowFail","errorMsg","handleSumbit","preventDefault","signIn","message","setTimeout","AuthHeader","Container","component","Avatar","noValidate","onSubmit","TextField","required","fullWidth","label","name","autoComplete","autoFocus","onChange","InputProps","endAdornment","InputAdornment","FormControlLabel","control","Checkbox","defaultValue","Button","xs","mt","Fade","Alert","severity","AlertDialog","contentText","setOpen","btn1Name","btn2Name","callBack","handleClose","Dialog","DialogTitle","DialogContent","DialogContentText","DialogActions","helperText","passwordHint","passwordGreen","paddingLeft","passwordRed","userAgreementBox","userAgreementDialog","userDisagree","userAgree","markDown","paddingTop","paddingBottom","paddingRight","SignUp","email","setEmail","firstname","setFirstname","lastname","setLastname","institution","setInstitution","project","setProject","rePassword","setRePassword","showRePassword","setShowRePassword","met7Chars","setMet7Chars","met1Upper","setMet1Upper","met1Lower","setMet1Lower","met1Number","setMet1Number","met1Special","setMet1Special","rePasswordMatch","setRePasswordMatch","openAlert","setOpenAlert","alertTitle","setAlertTitle","alertContent","setAlertCotent","agreement","setAgreement","openUserAgreement","setOpenUserAgreement","length","emailValidation","passwordValidation","signUp","handleClickUserAgreement","theEmail","test","String","toLowerCase","thePassword","newVal","SignUpConfirm","user","setCode","confirmSignUp","handleResend","resendSignUp","initialFormState","new_password","formType","ForgotPassword","formState","updateFormState","showNewPassword","setShowNewPassword","handleChange","persist","handleSumbitSendVerification","forgotPassword","handleSumbitSetNewPassword","forgotPasswordSubmit","ChangePassword","oldPassword","setOldPassword","showOldPassword","setShowOldPassword","newPassword","setNewPassword","changePassword","multiSelect","gridContainer","caseIDEnable","borderTop","borderLeft","borderRight","borderBottom","marginBottom","gridItem","flexWrap","switch","helpIcon","helpText2","FilterTooltip","explore","selectedCaseId","allCaseId","setCaseIDEnable","newCaseIDEnable","setSelectedCaseId","newType","options","i","Switch","checked","selectedDonorType","isMulti","closeMenuOnSelect","isDisabled","slider","ageEnable","expand","transform","transition","transitions","create","duration","shortest","expandOpen","expandBox","expendedTextfield","expandedButton","helpIcon2","ageRange","ageMin","ageMax","setAgeEnable","newAgeEnable","setAgeRange","newAgeRange","setAgeMin","newAgeMin","setAgeMax","newAgeMax","expanded","setExpanded","newMin","setNewMin","newMax","setNewMax","showError","setShowError","Slider","disabled","valueLabelDisplay","min","max","aria-labelledby","clsx","Collapse","timeout","unmountOnExit","size","error","numMin","Number","numMax","ageOnsetEnable","activateGridContainer","activateGridItem","switchBase","grey","common","white","opacity","borderColor","thumb","boxShadow","track","ageOnsetRange","ageOnsetMin","ageOnsetMax","setAgeOnsetEnable","newAgeOnsetEnable","setAgeOnsetRange","newAgeOnsetRange","setAgeOnsetMin","newAgeOnsetMin","setAgeOnsetMax","newAgeOnsetMax","formGroup","genderEnable","boxContainer","maleChecked","femaleChecked","setGenderEnable","newGenderEnable","setMaleChecked","setFemaleChecked","FormGroup","row","raceEnable","selectedRace","setRaceEnable","newRaceEnable","setSelectedRace","newRace","bmiEnable","bmiRange","bmiMin","bmiMax","setBmiEnable","newBmiEnable","setBmiRange","newRange","setBmiMin","newBmiMin","setBmiMax","newBmiMax","newBmiRange","step","donorTypeEnable","setDonorTypeEnable","newDonorTypeEnable","setSelectedDonorType","DDEnable","DDRange","DDMin","DDMax","setDDEnable","newDDEnable","setDDRange","newDDRange","setDDMin","newDDMin","setDDMax","newDDMax","hEnable","hRange","hMin","hMax","setHEnable","newHEnable","setHRange","newHRange","setHMin","newHMin","setHMax","newHMax","aaEnable","gadaP","gadaN","ia2aP","ia2aN","miaaP","miaaN","znt8aP","znt8aN","setAAEnable","newEnable","setGadaP","setGadaN","setIa2aP","setIa2aN","setMiaaP","setMiaaN","setZnt8aP","setZnt8aN","aaPositiveEnable","zeroChecked","oneChecked","twoChecked","threeChecked","fourChecked","setAAPositiveEnable","setZeroChecked","setOneChecked","setTwoChecked","setThreeChecked","setFourChecked","insulitisEnable","insulitisPositiveChecked","insulitisNegativeChecked","setInsulitisEnable","setInsulitisPositiveChecked","setInsulitisNegativeChecked","cPeptideEnable","cPeptidePositive","cPeptideNegative","setCPeptideEnable","setCPeptidePositiveChecked","setCPeptideNegativeChecked","setReset","datasetEnable","functionalAssayChecked","electronMicroscopyChecked","highResHLAChecked","immunophenotypingChecked","wholeExomeSequencingAvailable","snpsAvailable","setDatasetEnable","newDatasetEnable","setFunctionalAssayChecked","setElectronMicroscopyChecked","setHighResHLAChecked","setImmunophenotypingChecked","setWholeExomeSequencingAvailable","newWholeExomeSequencingAvailable","setSnpsAvailable","newSnpsAvailable","geneticEnable","grs1ScoreMin","grs1ScoreMax","grs1ScoreRange","grs2ScoreMin","grs2ScoreMax","grs2ScoreRange","aagrsScoreMin","aagrsScoreMax","aagrsScoreRange","setGeneticEnable","newGeneticEnable","setGrs1ScoreMin","newGrs1ScoreMin","setGrs1ScoreMax","newGrs1ScoreMax","setGrs1ScoreRange","newGrs1ScoreRange","setGrs2ScoreMin","newGrs2ScoreMin","setGrs2ScoreMax","newGrs2ScoreMax","setGrs2ScoreRange","newGrs2ScoreRange","setAagrsScoreMin","newAagrsScoreMin","setAagrsScoreMax","newAagrsScoreMax","setAagrsScoreRange","newAagrsScoreRange","newGrs1Min","setNewGrs1Min","newGrs1Max","setNewGrs1Max","newGrs2Min","setNewGrs2Min","newGrs2Max","setNewGrs2Max","newAagrsMin","setNewAagrsMin","newAagrsMax","setNewAagrsMax","handleExpandClick","filter","maxHeight","overflowX","scrollbarGutter","Filter","FilterAgeOnset","FilterAutoAntibody","minWidth","button","DownloadTooltip","donorTypesMap","causeOfDeathMap","emiMap","hlaMap","immunMap","geneticMap","SNP","selectedDownloadType","setSelectedDownloadType","fileName","exportToCSV","csvData","wb","Sheets","data","XLSX","utils","json_to_sheet","raw","allowedColumns","allowedColumns2","allowedColumns3","allowedColumns4","allowedColumns5","allowedColumns6","newData","forEach","donor","filteredDonor","key","reduce","obj","immunData","nData","theCaseId","case_id","sampleType","immunObj","immunObjMap","attr","geneticData","geneticObj","geneticAttrName","geneticAttrValue","split","snpStr","snpKey","snpValue","SNPData","snp_id","SNPObj","tempObj","SNP_id","filterJSON","SheetNames","excelBuffer","write","bookType","Blob","FileSaver","saveAs","placeholder","textAlign","minHeight","light","cursor","numberOfResult","result_container","result_title","result","progress","rawData","filteredData","wholeExomeSequencingUnavailable","snpsUnavailable","setRawData","newRawData","setFilteredData","newFilteredData","setCurrentCase","newCase","promiseInProgress","usePromiseTracker","requestedCase","setRequestedCase","filtering","requestedCaseId","setDialogue","is_public","indexOf","donor_type_id","typeName","age_years","age_onset_years","sex","race_ethnicity","BMI","cPeptide","C_peptide_ng_mL","diabetes_hx_years","HbA1c_percent","GADA_Result","IA_2A_Result","mIAA_Result","ZnT8A_Result","AAbtally","histopathology","glucose_insulin","KCL_insulin","A_1","A_2","B_1","B_2","C_1","C_2","DRB1_1","DRB1_2","DQA1_1","DQA1_2","DQB1_1","DQB1_2","DPA1_1","DPA1_2","DPB1_1","DPB1_2","whole_exome_sequencing_available","GRS1_score","GRS2_score","AA_GRS_score","currTime","timeStamp","toISOString","toTimeString","replaceAll","mb","donorCase","index","sm","md","lg","xl","Paper","handleOpen","setAllCaseId","setDonorTypesMap","newDonorTypes","setCauseOfDeathMap","newCauseOfDeath","setHLA","newHLA","setHLAMap","newHLAMap","setSampleTypesMap","newSampleTypesMap","setEmiMap","newEmiMap","setImmunMap","newImmunMap","setGeneticMap","newGeneticMap","setSNP","newSNP","API","get","res","catch","dType","dtMap","causeOfDeath","cODMap","cause_of_death_id","description","tempData","tempKey","HLAMap","tempMap","JSON","parse","stringify","sType","stMap","sample_type_id","caseId","emLink","EM_link","immun","sample_type","trackPromise","fetchCase","fetchDonorType","fetchCauseOfDeath","fetchHLA","fetchSampleType","fetchElectronMicroscopyImages","fetchImmunophenotyping","fetchGenetic","fetchSNP","closeButton","right","top","CaseViewTitle","sup","lineHeight","verticalAlign","table","note","noteText","currentCase","donorType","createData","rows","height_cm","weight_kg","BMI_percentile","ABO_blood_type","gestational_age_weeks","splice","dtComent","showDtComment","TableContainer","Table","stickyHeader","TableHead","TableRow","TableCell","TableBody","scope","container2","showNote","rows2","serologies","pwComent","content","downtime_minutes","admission_course","alcohol_use","drug_use","allergies","clinical_history","meds_diabetes","meds_home","meds_hospital","hemodiluted_status","peak_glucose_mg_dL","infections","SARS_COV_2_results","terminal_hospital_duration","organ_transport_time","case_recovery_type","pancreas_weight_grams","pancreas_head_grams","pancreas_body_grams","pancreas_tail_grams","pancreas_weight_comments","sampleTypesMap","percentList","setPercentList","queryStringParameters","getPercentViability","RIN","ratio","typeIndex","NpodImageGallery","original","properties","items","this","urlList","thumbnail","showPlayButton","showFullscreenButton","renderItem","_imageRender","bind","Component","ImageViewerTooltip","setFileUrlList","imageUrlList","setImageUrlList","getFile","fileKey","Storage","url","oldList","currentImageUrl","setCurrentImageUrl","list","fileKeyList","getFileList","backgroundPosition","root2","centerGridContainer1","centerGridContainer2","centerGridItem","centerGridItem2","centerGridItem3","buttonList","centerText","ImageLink","exist","urlLinks","idx","Aperio_id","genetic","GRS1_percentile","toFixed","GRS2_percentile","AA_GRS_percentile","GeneticTooltip","attrName","attrData1","attrData2","attrData3","GRSPercentileDiffDataArr","old","new","sx","diffData","minWidthwidth","chartType","diffdata","legend","diff","oldData","prefix","widthFactor","admixture","amr","admixed_american_AMR","eur","european_EUR","sas","south_asian_SAS","afr","african_AFR","eas","east_asian_EAS","admixtureDict","admixtureSum","values","acc","curr","normalizedChartData","charObj","tempChartData","entries","chartDataGen","pieHole","is3D","chartArea","left","textStyle","maxLines","infoIcon","infoText","GRS1_SNPs","replace","RegExp","err","genGenInfo","snpName","grs","snpObj","SNP_name","GRS","gene1","gene_1","gene2","gene_2","gene3","gene_3","GRS2_SNPs","AA_GRS_SNPs","Reference","TabPanel","other","role","hidden","p","tabs","divider","tab","tabPanel","overflowY","a11yProps","TabView","setValue","Tabs","newValue","indicatorColor","textColor","Tab","CaseProcessingAndTissueQuality","formControl","formControlLabel","dialogBackground","dialogContent","dialogBackground1","RR_id","dividers","highResHLAGenerator","lowVal","highVal","substring","thisCase","col","thisCaseId","thisHLA","thisAt","thisBt","thisDRt","thisDQBt","thisA","thisB","thisC","thisDRB1","thisDQA1","thisDQB1","thisDPA1","thisDPB1","menuButton","handleSetDialogue","filter_paper","result_paper","grid","box","box2","Explore","useParams","TextCheckAndFix","inputText","textString","entityMap","s","escapeHtml","input","input_invalid","hint_invalid","labelColored","TextBox","setChanged","restrict","valid","invalid","setInvalid","labelChanged","setLabelChanged","onInput","range","isValid","inputLarge","TextBoxLarge","errInput","datePicker","DateBox","newDate","setNewDate","selected","date","toLocaleDateString","select","DropBox","ops","setDefaultValue","op","StyledTimePicker","styled","TimePicker","textField","TimeBox","setDefaultTime","moment","showSecond","format","IntegerNumberBox","parseInt","FloatNumberBox","parseFloat","InputBox","columnProps","getInputContent","valueList","GridBox","columnPropsList","nameList","setValueList","useDebounced","initialValue","actualValue","setActualValue","debouncedValue","setDebouncedValue","timeoutId","clearTimeout","useCreateCase","isExist","changed","setAccept","setExist","setCreateMsg","setCreateSuccess","setResult","body","createCase","useCheckCaseExist","setCheckFail","setExistMsg","setCaseExist","createSuccess","checkResult","setCheckResult","checkExist","CreateCase_step0","setCaseId","update","caseExist","value0","setValue0","column","showExistMsg","setShowExistMsg","existMsg","showCreateMsg","setShowCreateMsg","createMsg","useRetrieveCaseColumns","columnList","columns","valueArray","retrieve","useRetrieveTableColumn","tableName","columnName","sortBy","sortby","table_name","column_name","sort_by","useUpdateCase","updateColumns","updateValues","setMsg","put","update_columns","update_values","updateCase","titleText","resizeInputBox","resize","alert2","CaseIdentificationAndQC_step1","donorTypes","donorTypesOps","idArr","nameArr","opsGenerator","OPO_name","OPOOps","otherArr","labelVar","opsGenerator2","value1","setValue1","value2","setValue2","value3","setValue3","value4","setValue4","value5","setValue5","value6","setValue6","value7","setValue7","value8","setValue8","value9","setValue9","value10","setValue10","value11","setValue11","value12","setValue12","value13","setValue13","value14","setValue14","value15","setValue15","value16","setValue16","value17","setValue17","value18","setValue18","value19","setValue19","msg","CaseProcessing_step2","colum","useRetrieveTableColumnPossibleValue","tempOps","raceOps","stageOps","codOps","HospitalLabs_step5","aboOps","value20","setValue20","value21","setValue21","value22","setValue22","value23","setValue23","value24","setValue24","value25","setValue25","value26","setValue26","value27","setValue27","useCheckAAbExist","setAAbExist","setAAbExistMsg","useRetrieveAllAAbIds","oldResult","getAAbId","useRetrieveAAbColumns","AAbIdValue","Array","fill","the_case_id","the_AAb_id","AAb_id","useUpdateAAb","setShowUpdateError","setShowUpdateSuccess","setUpdateMsg","columnNames","columnValues","updateAAb","useCreateAAb","createAAb","tip","AAbTooltip","AAb_step6","sampleStatusPossibleValues","sampleStatusOps","AAbExist","AAbexistMsg","AAbIdList","AAbIdOps","AAbIdOpsGenerator","setAAbIdValue","showUpdateError","showUpdateSuccess","updateMsg","setHLAExist","setHLAExistMsg","useRetrieveHLAColumns","useUpdateHLA","updateHLA","useCreateHLA","createHLA","HLATooltip","HLA_step7","HLAExist","HLAexistMsg","useCheckHLAExist","useCheckRNAExist","setRNAExist","setRNAExistMsg","useRetrieveTableColumnWithConditions","conditions","the_conditions","useRetrieveAllRNAIds","getRNAId","useRetrieveRNAColumns","RNAIdValue","the_RNA_id","RNA_id","useUpdateRNA","updateRNA","useCreateRNA","createRNA","RNATooltip","RNA_step8","contactIds","contactFirstNames","contactLastNames","contactNames","contactOps","sampleTypesConditions","sampleTypeIds","sampleTypeNames","sampleTypeOps","RNAExist","RNAExistMsg","RNAIdList","RNAIdOps","RNAIdOpsGenerator","setRNAIdValue","useCheckSampleExist","setSampleExist","setSampleExistMsg","useRetrieveAllVialIds","getVialId","useRetrieveSampleColumns","vialIdValue","the_vial_id","vial_id","useUpdateSample","updateSample","useCreateSample","createSample","useDeleteSample","vialId","deleting","setDeleteMsg","setDeleteSuccess","del","deleteSample","SampleTooltip","Sample_step9","sampleExist","sampleExistMsg","showDeleteMsg","setShowDeleteMsg","deleteMsg","deleteSuccess","vialIdList","vialIdOps","vialIdOpsGenerator","setVialId","stepper","stepLabel","actionsContainer","resetContainer","SingleCaseStepper","activeStep","setActiveStep","completed","setCompleted","steps","setCreateCase","setCreateAAb","setCreateHLA","setCreateRNA","setCreateSample","setUpdate","accept","update1","setUpdate1","setAccept1","update2","setUpdate2","setAccept2","update3","setUpdate3","setAccept3","update4","setUpdate4","setAccept4","update5","setUpdate5","setAccept5","update6","setUpdate6","setAccept6","update7","setUpdate7","setAccept7","update8","setUpdate8","setAccept8","update9","setUpdate9","setAccept9","delete9","setDelete9","getStepContent","handleNext","prevActiveStep","handleCreateCase","handleCreateAAb","handleCreateHLA","handleCreateRNA","handleCreateSample","handleDeleteSample","handleUpdate","handleBack","Stepper","nonLinear","orientation","Step","StepLabel","StepContent","square","useSaveChange","filesToAdd","filesToRemove","removeFolder","setRemoveFolder","selectedFolder","saveButtonClicked","setUploadProgress","setCurrUploadFile","setUpdateError","setUpdateSuccess","handleReset","fileList","folder","nowTime","toLocaleString","level","contentType","customPrefix","public","progressCallback","loaded","total","completeCallback","filesList","remove","folderPath","addFiles","removeFiles","removeWholeFolder","useGetAllExistingCaseIds","setAllCaseIds","resetButtongClicked","caseIdListTemp","getCaseListFromDb","useGetAllFolders","setCurrCaseFolders","allFiles","caseFolder","Set","caseFolderName","join","add","f","folderName","getFolderList","folderOption","folderOptionRadio","removeCheckBoxGroup","removeCheckbox","ablumBase","ablumBox","ablumImageBox","ablumAddBox","ablumImagePaper","ablumImage","ablumRemoveButton","ablumRemoveMark","progressBar","saveButton","resetButton","UploadImageFile","filesToUpload","setFilesToUpload","setFilesToRemove","setSaveButtonClicked","setResetButtonClicked","currUploadFile","uploadProgress","updateError","updateSuccess","allCaseIds","currCaseFolders","setSelectedFolder","folderSelectMode","setFolderSelectMode","disableSaveButton","setDiaableSaveButton","remoteImageFiles","setRemoteImageFiles","path","match","getOneCaseOneFolderOneImage","expires","images","getOneCaseOneFolderAllImages","click","Autocomplete","getOptionLabel","option","renderInput","params","handleSelectCase","FormControl","RadioGroup","Radio","handleSelectFolder","imageInfo","imageIndex","files","handleRemove","fileIndex","URL","createObjectURL","deselectedFileName","multiple","LinearProgress","UploadImage","useRetrieveTableHeaders","callback","theTableName","getTableHeaders","useRetrieveExisitingPrimaryKeyValues","temp","current","getPrimaryKeyValues","useDataUpload","checkRes","uploadClicked","dataToCreate","dataToUpdate","setUploadSuccess","setUploadFail","theData","dataFilter","matrix","prevValues","newRow","updateData","useCreateTempCloneTable","createClicked","createTempCloneTable","useCheckImportFileFormat","primaryKey","rawFileData","primaryKeyValuesArr","headerMapping","renameHeaders","rowObject","newRowObject","mappedKey","mappedValue","checkAtLeastOneHeaderMapped","theObjectArr","theObject","theName","theFileData","theExsitingDataArr","rawFileHeadersArr","rawFilePrimaryKey","fileData","filePrimaryKey","existingPrimaryKeyvValuesArr","existSet","existPrimaryKeyType","filePrimaryKeyValuesArr","tempArr","oldDataToUpdate","newDataToCreate","currentFilePrimaryKeyValue","has","checkExisting","theDataToUpdate","theDataToCreate","checkPrimaryKeyMapping","checkDataToUpdateAtLeastOneHeaderMapped","checkDataToCreateAtLeastOneHeaderMapped","checkFormat","StyledPaper","HeaderMappingTable","tableHeaders","fileHeaders","setMapping","header","tHeader","fHeader","theFileHeader","theTableHeader","ImportHLADataFile","initStates","HLA","RNA","slices_raw_data","immunophenotyping","needReset","setNeedReset","allRawFileData","setAllRawFileData","allRawFileNames","setAllRawFileNames","allRawFileHeaders","setAllRawFileHeaders","allTableHeaders","setAllTableHeaders","HLAHeadersMapping","setHLAHeadersMapping","slicesRawDataHeadersMapping","setSlicesRawDataHeadersMapping","immunophenotypingHeadersMapping","setImmunophenotypingHeadersMapping","allTablePrimaryKeyValues","setAllTablePrimaryKeyValues","allTableDataToSend","setAllTableDataToSend","uploadSuccess","uploadFail","allUploadClicked","setAllUploadClicked","allCreateClicked","setAllCreateClicked","handleFileDataImport","targetTable","reader","FileReader","onload","readerEvent","workbook","read","cellText","cellDates","sheetName","worksheet","parsedJson","sheet_to_json","readAsBinaryString","abort","setTableHeaders","preValues","setTablePrimaryKeyValues","setDataToSend","handleUploadClick","handleCreateClick","handResetClick","resetMsg","ImportData","backgroundAttachment","WriteIn","writeIn","writeInText","userManage","userManageText","centerPad","Admin","AdminPage","adminAccess","setAdminAccess","WriteInPage","useDisable","disableClicked","setUserData","setUserRows","setUserCount","createRows","nextToken","apiName","token","currentSession","getAccessToken","getJwtToken","Authorization","myInit","headers","NextToken","rest","listUsers","limit","allUsers","Users","disableUser","userList","merge","userSubList","useEnable","enableClicked","enableUser","useConfirm","confirmClicked","confirmUser","useDelete","deleteClicked","deleteUser","alignContent","centerPaper","buttonBox","tableRow","greenVal","redVal","status","enabled","firstName","lastName","uData","Username","Attributes","Name","Value","UserStatus","Enabled","find","curRow","descendingComparator","b","orderBy","x","y","getComparator","order","stableSort","array","comparator","stabilizedThis","el","sort","userData","useRows","setSelected","setDisableClicked","setEnableClicked","setConfirmClicked","setDeleteClicked","showDetail","setShowDetail","detailName","setDetailName","userCount","setOrderBy","setOrder","handleSort","property","prev","sortDirection","TableSortLabel","active","isRowSelected","hover","handleRowClick","newSelected","delete","handleCheckboxClick","UserManagePage","SupportPage","Support","textTransform","cardList","card","objectFit","cardText","Contact","process","objectPosition","ContactPage","VerifyEmail","verifyCurrentUserAttribute","notice","centerMessage","countDown","success","setSuccess","setMessage","countDowm","setCountDown","queryParams","URLSearchParams","search","action","handleVerify","verify_code","countDownHandler","verifyCurrentUserAttributeSubmit","alignSelf","copyRight","UserAgreement","Width","re_new_password","ResetPassword","showReNewPassword","setShowReNewPassword","error_msg","handlePasswordCheck","handleRePasswordCheck","UsefulResourcesPage","UsefulResources","searchParameters","setFilterValue","filterName","selectedObj","category","published","generateQueryParameters","typeObj","categoryObj","publishedObj","typeQuery","categoryQuery","publishedQuery","handleTypeChange","newQueryParameters","handleCategoryChange","newCategory","handlePublishedChange","newPublished","toString","initQueryParameters","genetics","transcriptomics","proteomics","metabolomics","investigator","npod","yes","no","usageSubFilter","m","FormLabel","ml","useRetrieveAllDatasets","setDatasetObj","setDatasetRetrieveSuccess","setDatasetRetrieveFail","customizedCond","apiCondObj","templateParentAndCondition","filterValueArr","typeFilterObj","templateParentOrCondition","filterValue","currFilterObj","templateChildNotInCondition","templateChildEqualCondition","categoryFilterObj","publishedFilterObj","parseUrlParamsToApiCondObj","hasOwnProperty","isArray","getDatasetsByConditions","getAllDatasets","operator","theConditions","Card","datasetName","pi","unqiueCaseNumber","datasetType","outlineOffset","DatasetCardList","filterSelected","datasetObj","dataset_id","dataset_name","number_of_unique_cases","dataset_type","PaperPanel","typography","body2","DatasetExplore","useCreateDataset","submitButtonClicked","setDatasetCreateSuccess","setDatasetCreateFail","caseIdentifierData","exampleDataFile","latestDatasetId","setLatestDatasetId","allValues","uniqueCaseNum","author","pi_email","piEmail","poc","poc_email","pocEmail","number_of_analyses","numberOfAnalyses","publication_link","publicationLink","pm_id","pmId","raw_data_file_link","rawDataFileLink","created_time","updated_time","caseIdObjList","currCaseId","dciObjList","newObj","datasetCaseIdentifierObjList","theFile","theDatasetId","createDataset","createCaseIdentifier","createExampleDataFile","useDownloadFile","setCaseIdentifierExampleUrl","setDownloadSuccess","setDownloadError","downloadButtonClicked","handleButtonReset","theFileKey","downloadFile","DatasetForm","setDatasetInfo","setValues","datasetNameAvailableLength","setDataseAvailabletNameLength","datasetNameHelperText","descriptionAvailableLength","setDescriptionAvailableLength","descriptionHelperText","setSubmitButtonClicked","datasetCreateSuccess","datasetCreateFail","setCaseIdentifierData","caseIdentifierFileName","setCaseIdentifierFileName","setExampleDataFile","exampleDataFileName","setExampleDataFileName","caseIdentifierExampleUrl","setDownloadButtonClicked","resetAllStates","setCurrentUserAsAuthor","prop","multiline","maxRows","InputLabel","jsonData","DatasetSubmit","usageFilter","datasetTypeFilter","useRetrieveDatasetsByAuthor","theAuthor","getDatasetsByAuthor","datasetId","uniqueCaseNumber","setAuthor","DatasetManage","useRetrieveDatasetByDatasetId","currUser","setCanEdit","getDatasetByDatasetId","useRetrieveCaseIdByDatasetId","setCaseIdList","setCaseIdRetrieveSuccess","setCaseIdRetrieveFail","element","getCaseIdByDatasetId","useRetrieveCaseIdList","caseIdList","setRequestedCases","setRequestedCasesRetrieveSuccess","setRequestedCasesMapRetrieveFail","theCaseIdList","cilString","getCasesByCaseIdList","useRetrieveDonorTypeMap","setDonorTypeMap","setDonorTypeMapRetrieveSuccess","setDonorTypeMapRetrieveFail","getDonorTypeMap","useRetrieveCauseOfDeathMap","setCauseOfDeathMapRetrieveSuccess","setCauseOfDeathMapRetrieveFail","getCauseOfDeathMap","useRetrieveHLAMap","setHLAMapRetrieveSuccess","setHLAMapRetrieveFail","getHLAMap","ButtonDownloadCsvFromJson","jData","fName","fExtension","writeBuffer","exportToXlsx","useRetrieveDataFileKey","setDataFileKey","getDataFileKey","useRetrieveDataFilePath","setDataFilePath","dataFileKey","fileUrl","getDataFilePath","ButtonDownloadCsvFromPath","blob","File","dowanloadFile","ExampleDataFileGrid","dataFilePath","exampleDataJson","setExampleDataJson","exampleDataColConfig","setExampleDataColConfig","exampleDataKey","setExampleDataKey","fetchCsvFile","isCsvData","shift","csvToJson","dataColConfig","field","renderHeader","flex","reject","Papa","complete","fetchData","useGenJsonWithPath","DataGrid","getRowId","initialState","pagination","paginationModel","pageSize","pageSizeOptions","disableRowSelectionOnClick","showCellVerticalBorder","showColumnVerticalBorder","checkboxSelection","usePreprocessCaseData","requestedCases","donorTypeMap","setDonorTypeChartData","setSexChartData","setRaceChartData","setFilteredRequestedCases","tempCases","hlaDataPreprocess","donorTypeCount","currDonorTypeId","currDonorType","sexCount","currSex","raceCount","currRace","chartObj","totcalCount","DataPaper","DataEntry","type2","DataEntryWrapper","ChartBox","CaseButtonMatrix","caseList","Title1","Title2","Subtitle1","NormalDisplay","setDatasetId","setRequestedCasesRetrieveFail","filteredRequestedCases","donorTypeChartData","sexChartData","raceChartData","titleTextStyle","slices","0","1","OutlinedInput","EditDisplay","pmid","DatasetPage","canEdit","displayMode","setDisplayMode","NormalDisplayView","handleClickEdit","EditDisplayView","handleClickCancel","setCurrUser","Amplify","configure","config","mandatorySignIn","Hub","listen","authListener","exact","SignIn","ExplorePage","VerifyAttributeWithCode","UserAgreementPage","DatasetExplorePage","DatasetSubmitPage","DatasetManagePage","DatasetDisplayPage","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","authReducer","hla","exploreReducer","rootReducer","storage","combineReducers","store","createStore","composeWithDevTools","persistStore","createTheme","createMuiTheme","ReactDOM","render","StrictMode","ThemeProvider","document","getElementById","ul","listStyle","li","textIndent","contentList","articleContainer","articlePaper","observer","IntersectionObserver","entry","getAttribute","intersectionRatio","querySelector","parentElement","classList","querySelectorAll","section","observe","topicsName","topic","linkTo","to","scrollIntoView","behavior","block","SupportContent","p1","p2","p3","p4","p5","p6","p6_1","p6_2","fontStyle","UsefulResourcesContent","p4_1","p4_2","p4_3","p5_1","p5_2","p7","appBar"],"mappings":"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","file":"static/js/main.4af334ad.chunk.js","sourcesContent":["import { useEffect, useState } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport rehypeRaw from \"rehype-raw\";\n\nexport default function useMdImport(filePath) {\n  const [post, setPost] = useState();\n  useEffect(() => {\n    const setTheText = async () => {\n      const file = await import(`${filePath}`);\n      const response = await fetch(file.default);\n      const text = await response.text();\n      setPost(<ReactMarkdown children={text} rehypePlugins={rehypeRaw} />);\n    };\n    setTheText();\n  }, []);\n  return post;\n}\n","var map = {\n\t\"./Support\": [\n\t\t383\n\t],\n\t\"./Support.js\": [\n\t\t383\n\t],\n\t\"./SupportContent\": [\n\t\t384\n\t],\n\t\"./SupportContent.js\": [\n\t\t384\n\t],\n\t\"./SupportMenu\": [\n\t\t773,\n\t\t0\n\t],\n\t\"./SupportMenu.js\": [\n\t\t773,\n\t\t0\n\t],\n\t\"./SupportParapraph/P1_Introduction.md\": [\n\t\t1451,\n\t\t5\n\t],\n\t\"./SupportParapraph/P1_Introduction.txt\": [\n\t\t1452,\n\t\t6\n\t],\n\t\"./SupportParapraph/P2_SignUp.md\": [\n\t\t1453,\n\t\t7\n\t],\n\t\"./SupportParapraph/P2_SignUp.txt\": [\n\t\t1454,\n\t\t8\n\t],\n\t\"./SupportParapraph/P3_SignIn.md\": [\n\t\t1455,\n\t\t9\n\t],\n\t\"./SupportParapraph/P3_SignIn.txt\": [\n\t\t1456,\n\t\t10\n\t],\n\t\"./SupportParapraph/P4_ExploreCases.md\": [\n\t\t1457,\n\t\t11\n\t],\n\t\"./SupportParapraph/P4_ExploreCases.txt\": [\n\t\t1458,\n\t\t12\n\t],\n\t\"./SupportParapraph/P5_SampleInventory.md\": [\n\t\t1459,\n\t\t13\n\t],\n\t\"./SupportParapraph/P5_SampleInventory.txt\": [\n\t\t1460,\n\t\t14\n\t],\n\t\"./SupportParapraph/P6_1_Explore_Datasets.txt\": [\n\t\t1461,\n\t\t15\n\t],\n\t\"./SupportParapraph/P6_2_Submit_Datasets.txt\": [\n\t\t1462,\n\t\t16\n\t],\n\t\"./SupportParapraph/P6_Datasets.txt\": [\n\t\t1463,\n\t\t17\n\t],\n\t\"./useMdImport\": [\n\t\t160\n\t],\n\t\"./useMdImport.js\": [\n\t\t160\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 1117;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./UsefulResources\": [\n\t\t385\n\t],\n\t\"./UsefulResources.js\": [\n\t\t385\n\t],\n\t\"./UsefulResourcesContent\": [\n\t\t386\n\t],\n\t\"./UsefulResourcesContent.js\": [\n\t\t386\n\t],\n\t\"./UsefulResourcesParapraph/P1_Introduction.txt\": [\n\t\t1464,\n\t\t18\n\t],\n\t\"./UsefulResourcesParapraph/P2_nPOD_Operational_Model.txt\": [\n\t\t1465,\n\t\t19\n\t],\n\t\"./UsefulResourcesParapraph/P3_Organ_Processing_At_nPOD.txt\": [\n\t\t1466,\n\t\t20\n\t],\n\t\"./UsefulResourcesParapraph/P4_1_Maximizing_nPOD_Sample_Requests.txt\": [\n\t\t1467,\n\t\t21\n\t],\n\t\"./UsefulResourcesParapraph/P4_2_Online_Sample_Ordering.txt\": [\n\t\t1468,\n\t\t22\n\t],\n\t\"./UsefulResourcesParapraph/P4_3_RRID_Portal.txt\": [\n\t\t1469,\n\t\t23\n\t],\n\t\"./UsefulResourcesParapraph/P4_Navigating_nPOD_Platforms.txt\": [\n\t\t1470,\n\t\t24\n\t],\n\t\"./UsefulResourcesParapraph/P5_1_Electron_Microscopy.txt\": [\n\t\t1471,\n\t\t25\n\t],\n\t\"./UsefulResourcesParapraph/P5_2_Genetics.txt\": [\n\t\t1472,\n\t\t26\n\t],\n\t\"./UsefulResourcesParapraph/P5_Useful_Tutorials_and_Publications.txt\": [\n\t\t1473,\n\t\t27\n\t],\n\t\"./UsefulResourcesParapraph/P6_nPOD_Research_Webinars.txt\": [\n\t\t1474,\n\t\t28\n\t],\n\t\"./UsefulResourcesParapraph/P7_Protocol_Resouces_for_the_Life_Scientists.txt\": [\n\t\t1475,\n\t\t29\n\t],\n\t\"./useMdImport\": [\n\t\t111\n\t],\n\t\"./useMdImport.js\": [\n\t\t111\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 1409;\nmodule.exports = webpackAsyncContext;","/* eslint-disable */\n// WARNING: DO NOT EDIT. This file is automatically generated by AWS Amplify. It will be overwritten.\n\nconst awsmobile = {\n    \"aws_project_region\": \"us-east-1\",\n    \"aws_cloud_logic_custom\": [\n        {\n            \"name\": \"AdminQueries\",\n            \"endpoint\": \"https://zlonsckugh.execute-api.us-east-1.amazonaws.com/dev\",\n            \"region\": \"us-east-1\"\n        },\n        {\n            \"name\": \"dbapi\",\n            \"endpoint\": \"https://xcw6wcczu0.execute-api.us-east-1.amazonaws.com/dev\",\n            \"region\": \"us-east-1\"\n        }\n    ],\n    \"aws_cognito_identity_pool_id\": \"us-east-1:dc948eed-9192-4763-9a7b-e36cfd3845c9\",\n    \"aws_cognito_region\": \"us-east-1\",\n    \"aws_user_pools_id\": \"us-east-1_fEh9loNQD\",\n    \"aws_user_pools_web_client_id\": \"7o7ou9g5pvk1h7nk9d26oucfeb\",\n    \"oauth\": {},\n    \"aws_cognito_username_attributes\": [],\n    \"aws_cognito_social_providers\": [],\n    \"aws_cognito_signup_attributes\": [\n        \"EMAIL\"\n    ],\n    \"aws_cognito_mfa_configuration\": \"OFF\",\n    \"aws_cognito_mfa_types\": [\n        \"SMS\"\n    ],\n    \"aws_cognito_password_protection_settings\": {\n        \"passwordPolicyMinLength\": 8,\n        \"passwordPolicyCharacters\": []\n    },\n    \"aws_cognito_verification_mechanisms\": [\n        \"EMAIL\"\n    ],\n    \"aws_user_files_s3_bucket\": \"npodbucket163022-dev\",\n    \"aws_user_files_s3_bucket_region\": \"us-east-1\"\n};\n\n\nexport default awsmobile;\n","import \"../App.css\";\nimport React, { useState, useEffect } from \"react\";\nimport Button from \"@material-ui/core/Button\";\nimport { Auth, API } from \"aws-amplify\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { connect } from \"react-redux\";\nimport { Helmet } from \"react-helmet\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport { useHistory } from \"react-router-dom\";\nimport AppBar from \"@material-ui/core/AppBar\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport ArrowForwardIosIcon from \"@material-ui/icons/ArrowForwardIos\";\nimport AccountBoxIcon from \"@material-ui/icons/AccountBox\";\nimport BuildIcon from \"@material-ui/icons/Build\";\nimport Menu from \"@material-ui/core/Menu\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport useScrollTrigger from \"@material-ui/core/useScrollTrigger\";\nimport Slide from \"@material-ui/core/Slide\";\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport DirectionsRunIcon from \"@material-ui/icons/DirectionsRun\";\nimport LockIcon from \"@material-ui/icons/Lock\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport NotificationsActiveIcon from \"@material-ui/icons/NotificationsActive\";\n\nconst HideOnScroll = (props) => {\n  const trigger = useScrollTrigger({\n    disableHysteresis: true,\n    threshold: props.threshold,\n    target: props.window ? window() : undefined,\n  });\n\n  return (\n    <Slide appear={true} direction=\"down\" in={!trigger}>\n      {props.children}\n    </Slide>\n  );\n};\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    flexGrow: 1,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n  },\n  title1: {\n    //flexGrow: 1,\n    fontWeight: 600,\n    color: \"#FFF\",\n    marginRight: \"1px\",\n  },\n  title2: {\n    flexGrow: 1,\n    fontWeight: 600,\n    color: \"#FFF\",\n    marginRight: \"1px\",\n  },\n  title3: {\n    flexGrow: 1,\n    fontWeight: 300,\n    color: \"#FFF\",\n    marginRight: \"-11vw\",\n  },\n  icon: {\n    marginRight: \"3px\",\n  },\n  appbarWrapper: {\n    width: \"95%\",\n    margin: \"auto\",\n    marginTop: \"30px\",\n    textShadow: \"0 0 20px black\",\n  },\n  authButton: {\n    marginRight: theme.spacing(1),\n    color: \"#FFF\",\n    \"&:hover\": {\n      background: \"none\",\n    },\n    textShadow: \"0 0 20px black\",\n    textDecoration: \"none\",\n  },\n  authButton2: {\n    marginRight: theme.spacing(1),\n    color: \"#FFF\",\n    \"&:hover\": {\n      background: \"none\",\n    },\n    textShadow: \"0 0 20px black\",\n    textDecoration: \"none\",\n    borderRadius: \"3px\",\n    border: \"2px solid #fcba03\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n}));\n\nconst HeaderTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction Header(props) {\n  useEffect(() => {\n    checkAuth();\n  }, []);\n\n  async function checkAuth() {\n    try {\n      const authRes = await Auth.currentAuthenticatedUser();\n      console.log(\"Check auth response \", authRes);\n      props.setUserName(authRes.username);\n      props.setSignedIn(true);\n      if (authRes.attributes.email_verified) {\n        setEmailVerified(true);\n      } else {\n        setEmailVerified(false);\n      }\n      if (\"cognito:groups\" in authRes.signInUserSession.accessToken.payload) {\n        if (\n          authRes.signInUserSession.accessToken.payload[\n            \"cognito:groups\"\n          ].includes(\"admin\")\n        ) {\n          setDisplayAdminAccess(true);\n        } else {\n          setDisplayAdminAccess(false);\n        }\n      }\n    } catch (error) {\n      console.log(\"Check Auth error \", error);\n      props.setSignedIn(false);\n    }\n  }\n\n  const classes = useStyles();\n  const history = useHistory();\n  const [anchorEl, setAnchorEl] = React.useState(null);\n  const [logoSize, setLogoSize] = useState(\"\");\n  const [title1Size, setTitle1Size] = useState(\"h3\");\n  const [title2Size, setTitle2Size] = useState(\"h4\");\n  const [avatarSize, setAvatarSize] = useState(\"large\");\n  const [emailVerified, setEmailVerified] = useState(false);\n  const [displayAdminAccess, setDisplayAdminAccess] = useState(false);\n\n  const updateResponsiveWidth = () => {\n    if (window.innerWidth >= 1920) {\n      setLogoSize(\"200vh\");\n      setTitle1Size(\"h3\");\n      setTitle2Size(\"h4\");\n      setAvatarSize(\"large\");\n    } else if (window.innerWidth >= 1360 && window.innerWidth < 1920) {\n      setLogoSize(\"180vh\");\n      setTitle1Size(\"h3\");\n      setTitle2Size(\"h4\");\n      setAvatarSize(\"large\");\n    } else if (window.innerWidth >= 800 && window.innerWidth < 1360) {\n      setLogoSize(\"160vh\");\n      setTitle1Size(\"h4\");\n      setTitle2Size(\"h5\");\n      setAvatarSize(\"medium\");\n    } else {\n      setLogoSize(\"140vh\");\n      setTitle1Size(\"h4\");\n      setTitle2Size(\"h5\");\n      setAvatarSize(\"medium\");\n    }\n  };\n  useEffect(() => {\n    updateResponsiveWidth();\n    window.addEventListener(\"resize\", updateResponsiveWidth);\n    return () => window.removeEventListener(\"resize\", updateResponsiveWidth);\n  });\n\n  const signOutHandler = async () => {\n    try {\n      props.setSignedIn(false);\n      await Auth.signOut();\n      history.push(\"/\");\n    } catch (error) {\n      console.log(\"sign out error \", error);\n    }\n  };\n\n  const signInHandler = () => {\n    history.push(\"/signin\");\n  };\n\n  const goHomeHandler = () => {\n    history.push(\"/\");\n  };\n\n  const goCaseExploreHandler = () => {\n    history.push(\"/explore\");\n  };\n\n  const goChangePasswordHandler = () => {\n    history.push(\"/changepassword\");\n  };\n\n  const goVerifyEmailHandler = () => {\n    history.push(\"/verifyemail\");\n  };\n\n  const accountOpenHandler = (event) => {\n    setAnchorEl(event.currentTarget);\n  };\n\n  const accountCloseHandler = () => {\n    setAnchorEl(null);\n  };\n\n  const helpTextBeforeSignIn = (\n    <React.Fragment>\n      <div className={classes.helpText}>Sign In/ Sign Up An Account</div>\n    </React.Fragment>\n  );\n\n  const helpTextAfterSignIn = (\n    <React.Fragment>\n      <div className={classes.helpText}>Sign Out/ Account Management</div>\n    </React.Fragment>\n  );\n\n  const helpTextEmailVerify = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Your email is not verified yet. Click here to veify it. Otherwise you\n        are unable to recover the account and receive notification.\n      </div>\n    </React.Fragment>\n  );\n\n  return (\n    <div>\n      <Helmet>\n        <title>nPOD {props.location}</title>\n      </Helmet>\n      <div className={classes.roots}>\n        <HideOnScroll threshold={0}>\n          <AppBar color=\"transparent\" elevation={0} position=\"fixed\">\n            <Toolbar className={classes.appbarWrapper}>\n              <div>\n                <a style={{ textDecoration: \"none\" }} href=\"/\">\n                  {useLocation().pathname === \"/\" ? (\n                    // <img src=\"/assets/npodLogoWhite.png\" width={logoSize} />\n                    <div></div>\n                  ) : (\n                    <Typography className={classes.title1} variant={title1Size}>\n                      nPOD\n                    </Typography>\n                  )}\n                </a>\n              </div>\n              {props.location === \"Case Explore\" ? (\n                <div className={classes.title2}>\n                  <IconButton\n                    className={classes.authButton}\n                    aria-label=\"caseExplore\"\n                    onClick={goCaseExploreHandler}\n                  >\n                    <ArrowForwardIosIcon />\n                    <div>\n                      <Typography\n                        variant={title2Size}\n                        style={{ fontWeight: 600 }}\n                      >\n                        EXPLORE CASES\n                      </Typography>\n                    </div>\n                  </IconButton>\n                </div>\n              ) : (\n                <div className={classes.title2}></div>\n              )}\n\n              {!emailVerified && props.signedIn ? (\n                <div className={classes.title3}>\n                  <HeaderTooltip title={helpTextEmailVerify} placement=\"bottom\">\n                    <IconButton\n                      className={classes.authButton2}\n                      aria-label=\"caseExplore\"\n                      onClick={goVerifyEmailHandler}\n                    >\n                      <NotificationsActiveIcon />{\" \"}\n                      <Typography\n                        variant={title2Size}\n                        style={{ fontWeight: 300, marginLeft: \"5px\" }}\n                      >\n                        Email Not Verified\n                      </Typography>\n                    </IconButton>\n                  </HeaderTooltip>\n                </div>\n              ) : null}\n\n              {props.signedIn ? (\n                // After sign in\n                <HeaderTooltip title={helpTextAfterSignIn} placement=\"left\">\n                  <div className={classes.title1}>\n                    <IconButton\n                      edge=\"end\"\n                      className={classes.authButton}\n                      aria-label=\"avatar\"\n                      onClick={accountOpenHandler}\n                    >\n                      <AccountBoxIcon\n                        className={classes.icon}\n                        fontSize={avatarSize}\n                      />\n                      <div>\n                        <Typography\n                          className={classes.title1}\n                          variant={title2Size}\n                        >\n                          {props.userName}\n                        </Typography>\n                      </div>\n                    </IconButton>\n                    <Menu\n                      id=\"avatar-menu\"\n                      anchorEl={anchorEl}\n                      keepMounted\n                      open={Boolean(anchorEl)}\n                      getContentAnchorEl={null}\n                      onClose={accountCloseHandler}\n                      anchorOrigin={{\n                        vertical: \"bottom\",\n                        horizontal: \"center\",\n                      }}\n                      transformOrigin={{\n                        vertical: \"top\",\n                        horizontal: \"center\",\n                      }}\n                    >\n                      <MenuItem onClick={goChangePasswordHandler}>\n                        <ListItemIcon>\n                          <LockIcon fontSize=\"small\" />\n                        </ListItemIcon>\n                        <ListItemText primary=\"CHANGE PASSWORD\" />\n                      </MenuItem>\n                      <MenuItem onClick={signOutHandler}>\n                        <ListItemIcon>\n                          <DirectionsRunIcon fontSize=\"small\" />\n                        </ListItemIcon>\n                        <ListItemText primary=\"SIGN OUT\" />\n                      </MenuItem>\n                    </Menu>\n                  </div>\n                </HeaderTooltip>\n              ) : (\n                // Before sign in\n                <HeaderTooltip title={helpTextBeforeSignIn} placement=\"left\">\n                  <IconButton\n                    edge=\"end\"\n                    className={classes.authButton}\n                    aria-label=\"signIn\"\n                    onClick={signInHandler}\n                  >\n                    <ArrowForwardIosIcon fontSize={avatarSize} />\n                    <div>\n                      <Typography\n                        className={classes.title2}\n                        variant={title2Size}\n                      >\n                        SIGN IN\n                      </Typography>\n                    </div>\n                  </IconButton>\n                </HeaderTooltip>\n              )}\n              {displayAdminAccess && props.signedIn ? (\n                <div>\n                  <IconButton\n                    edge=\"end\"\n                    className={classes.authButton}\n                    aria-label=\"avatar\"\n                    onClick={() =>\n                      window.open(`${window.location.origin}/admin`)\n                    }\n                  >\n                    <BuildIcon className={classes.icon} fontSize={avatarSize} />\n                    <div>\n                      <Typography\n                        className={classes.title1}\n                        variant={title2Size}\n                      >\n                        Admin\n                      </Typography>\n                    </div>\n                  </IconButton>\n                </div>\n              ) : null}\n            </Toolbar>\n          </AppBar>\n        </HideOnScroll>\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state, ownProps) => {\n  return {\n    signedIn: state.auth.signedIn,\n    userName: state.auth.userName,\n  };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setSignedIn: (newSignedIn) =>\n      dispatch({ type: \"SET_SIGNEDIN\", value: newSignedIn }),\n    setUserName: (newUserName) =>\n      dispatch({ type: \"SET_USERNAME\", value: newUserName }),\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Header);\n","import React, { useEffect, useState } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport { connect } from \"react-redux\";\nimport { CssBaseline, Typography } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Box from \"@material-ui/core/Box\";\nimport Button from \"@material-ui/core/Button\";\nimport { useHistory } from \"react-router-dom\";\nimport Header from \"./Header\";\nimport { Link } from \"react-router-dom\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    backgroundImage: `url(${\n      process.env.PUBLIC_URL + \"/assets/landingPage.jpg\"\n    })`,\n    backgroundRepeat: \"no-repeat\",\n    backgroundSize: \"cover\",\n    overflow: \"hidden\",\n  },\n  centerBox: {\n    marginTop: \"15vh\",\n    height: \"85vh\",\n  },\n  centerTitle: {\n    marginTop: \"2vh\",\n    textShadow: \"0 0 20px black\",\n    color: \"#a9c24a\",\n    fontFamily: \"Palatino\",\n  },\n  centerTitle2: {\n    marginTop: \"-3vh\",\n    color: \"#fff\",\n    textShadow: \"0 0 20px black\",\n    fontFamily: \"Palatino\",\n  },\n  centerTitle3: {\n    marginTop: \"6vh\",\n  },\n  centerTitle4: {\n    display: \"flex\",\n    justifyContent: \"center\",\n    marginTop: \"2vh\",\n    color: \"#fff\",\n    fontWeight: \"600\",\n    textShadow: \"0 0 20px black\",\n    fontFamily: \"Open Sans\",\n  },\n  centerContent: {\n    color: \"#fff\",\n    fontSize: \"2rem\",\n    textShadow: \"0 0 20px black\",\n  },\n  centerButton: {\n    //marginLeft: \"30px\",\n    textShadow: \"0 0 20px black\",\n    margin: \"1vh\",\n  },\n  centerButtonEmpty: {\n    margin: \"50px\",\n  },\n  colorText: {\n    color: \"#5AFF3D\",\n  },\n  linkText: {\n    textDecoration: \"none\",\n    margin: \"0 8px\",\n    padding: \"5px\",\n    color: \"white\",\n    border: \"2px solid transparent\",\n\n    \"&:hover\": {\n      border: \"2px solid #ffffff\",\n      borderRadius: \"2px\",\n    },\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n}));\n\nconst LandingPageTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction Landing(props) {\n  const classes = useStyles();\n  const [caseDataNum, setCaseDataNum] = useState(0);\n  const [authed, setAuthed] = useState(false);\n  const [windowWidth, setWindowWidth] = useState(window.innerWidth);\n  const [logoSize, setLogoSize] = useState(\"\");\n  const [imageWidth, setImageWidth] = useState(\"\");\n  const [title1, setTitle1] = useState(\"h1\");\n  const [title2, setTitle2] = useState(\"h2\");\n  const [title4, setTitle4] = useState(\"subtitle1\");\n  const [displayDatasetSubmit, setDisplayDatasetSubmit] = useState(false);\n  const history = useHistory();\n\n  const helpTextNotAvailable = (\n    <React.Fragment>\n      <div className={classes.helpText}>Dataset group user only</div>\n    </React.Fragment>\n  );\n\n  const updateResponsiveWidth = () => {\n    if (window.innerWidth >= 1920) {\n      setImageWidth(\"30vh\");\n      setLogoSize(\"290vh\");\n      setTitle1(\"h1\");\n      setTitle2(\"h3\");\n      setTitle4(\"h5\");\n    } else if (window.innerWidth >= 1360 && window.innerWidth < 1920) {\n      setImageWidth(\"25vh\");\n      setLogoSize(\"280vh\");\n      setTitle1(\"h1\");\n      setTitle2(\"h3\");\n      setTitle4(\"h5\");\n    } else if (window.innerWidth >= 800 && window.innerWidth < 1360) {\n      setImageWidth(\"20vh\");\n      setLogoSize(\"180vh\");\n      setTitle1(\"h2\");\n      setTitle2(\"h4\");\n      setTitle4(\"h6\");\n    } else {\n      setImageWidth(\"15vh\");\n      setLogoSize(\"140vh\");\n      setTitle1(\"h3\");\n      setTitle2(\"h5\");\n      setTitle4(\"h6\");\n    }\n  };\n\n  useEffect(() => {\n    updateResponsiveWidth();\n    window.addEventListener(\"resize\", updateResponsiveWidth);\n    return () => window.removeEventListener(\"resize\", updateResponsiveWidth);\n  });\n\n  useEffect(() => {\n    checkAuth();\n  }, []);\n\n  async function checkAuth() {\n    try {\n      const authRes = await Auth.currentAuthenticatedUser();\n\n      if (\"cognito:groups\" in authRes.signInUserSession.accessToken.payload) {\n        if (\n          authRes.signInUserSession.accessToken.payload[\n            \"cognito:groups\"\n          ].includes(\"dataset_user\") ||\n          authRes.signInUserSession.accessToken.payload[\n            \"cognito:groups\"\n          ].includes(\"admin\")\n        ) {\n          setDisplayDatasetSubmit(true);\n        } else {\n          setDisplayDatasetSubmit(false);\n        }\n      }\n    } catch (error) {\n      console.log(\"Check Auth error \", error);\n      props.setSignedIn(false);\n    }\n  }\n\n  return (\n    <div>\n      <Header location=\"Home\" />\n      <div className={classes.root}>\n        <CssBaseline />\n        <Grid\n          container\n          direction=\"column\"\n          justify=\"center\"\n          alignItems=\"center\"\n          className={classes.centerBox}\n        >\n          <Grid item>\n            <img src=\"/assets/npodLogoWhite.png\" width={logoSize} />\n          </Grid>\n          <Grid item>\n            <Typography variant={title1} className={classes.centerTitle}>\n              <span style={{ fontWeight: 400 }}>DATA</span>{\" \"}\n              <span style={{ fontWeight: 700 }}>PORTAL</span>\n            </Typography>\n          </Grid>\n          <Grid item>\n            <Typography variant={title2} className={classes.centerTitle2}>\n              <p style={{ fontWeight: 400 }}>Sharing for a Cure</p>\n            </Typography>\n          </Grid>\n          <Grid item style={{ width: \"100%\" }}>\n            {props.signedIn ? (\n              <Box\n                display={\"flex\"}\n                justifyContent={\"center\"}\n                className={classes.centerTitle3}\n              >\n                <Box className={classes.centerButton}>\n                  <a href=\"/explore\" target=\"_blank\">\n                    <img\n                      style={{ width: imageWidth }}\n                      src=\"/assets/landingPageImages/ExploreCases.png\"\n                    />\n                  </a>\n                </Box>\n                <Box className={classes.centerButton}>\n                  <a target=\"_blank\" href=\"http://npoddatashare.coh.org\">\n                    <img\n                      style={{ width: imageWidth }}\n                      src=\"/assets/landingPageImages/SampleInventory.png\"\n                    />\n                  </a>\n                </Box>\n                <Box className={classes.centerButton}>\n                  <a href=\"/dataset-explore\" target=\"_blank\">\n                    <img\n                      style={{ width: imageWidth }}\n                      src=\"/assets/landingPageImages/ExploreDatasets.png\"\n                    />\n                  </a>\n                </Box>\n                {displayDatasetSubmit ? (\n                  <Box className={classes.centerButton}>\n                    <a href=\"/dataset-submit\" target=\"_blank\">\n                      <img\n                        style={{ width: imageWidth }}\n                        src=\"/assets/landingPageImages/SubmitDatasets.png\"\n                      />\n                    </a>\n                  </Box>\n                ) : (\n                  <Box className={classes.centerButton}>\n                    <LandingPageTooltip\n                      title={helpTextNotAvailable}\n                      placement=\"top\"\n                    >\n                      <img\n                        style={{ width: imageWidth }}\n                        src=\"/assets/landingPageImages/SubmitDatasetsNotAvailable.png\"\n                      />\n                    </LandingPageTooltip>\n                  </Box>\n                )}\n\n                <Box className={classes.centerButton}>\n                  <a href=\"/usefulresources\" target=\"_blank\">\n                    <img\n                      style={{ width: imageWidth }}\n                      src=\"/assets/landingPageImages/UsefulResources.png\"\n                    />\n                  </a>\n                </Box>\n              </Box>\n            ) : (\n              <div className={classes.centerButtonEmpty}>&nbsp;</div>\n            )}\n          </Grid>\n          <Grid item>\n            <Typography variant={title4} className={classes.centerTitle4}>\n              <a href=\"/support\" target=\"_blank\" className={classes.linkText}>\n                TUTORIAL\n              </a>\n\n              <a href=\"contact\" target=\"_blank\" className={classes.linkText}>\n                CONTACT\n              </a>\n            </Typography>\n          </Grid>\n        </Grid>\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    signedIn: state.auth.signedIn,\n  };\n};\n\n// Update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setSignedIn: (newSignedIn) =>\n      dispatch({ type: \"SET_SIGNEDIN\", value: newSignedIn }),\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Landing);\n","import React from \"react\";\nimport Landing from \"../component/Landing\";\n\nfunction LandingPage() {\n    return <Landing />;\n}\n\nexport default LandingPage;","import React, { useEffect, useState } from \"react\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport Button from \"@material-ui/core/Button\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport TextField from \"@material-ui/core/TextField\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport Link from \"@material-ui/core/Link\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Box from \"@material-ui/core/Box\";\nimport LockOutlinedIcon from \"@material-ui/icons/LockOutlined\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Container from \"@material-ui/core/Container\";\nimport Auth from \"@aws-amplify/auth\";\nimport { useHistory } from \"react-router-dom\";\nimport { connect } from \"react-redux\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport Visibility from \"@material-ui/icons/Visibility\";\nimport VisibilityOff from \"@material-ui/icons/VisibilityOff\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport Fade from \"@material-ui/core/Fade\";\nimport AuthHeader from \"../component/AuthHeader\";\n\n// TODO: Remember me function need further implementation.\n// For now, Cognito will let user opt in remembering device.\n\nfunction Copyright() {\n  return (\n    <Typography variant=\"body2\" color=\"textSecondary\" align=\"center\">\n      {\"Copyright © \"}\n      <Link color=\"inherit\" href=\"https://nPOD.org/\">\n        nPOD\n      </Link>{\" \"}\n      {new Date().getFullYear()}\n      {\".\"}\n    </Typography>\n  );\n}\n\nconst useStyles = makeStyles((theme) => ({\n  paper: {\n    marginTop: theme.spacing(8),\n    display: \"flex\",\n    flexDirection: \"column\",\n    alignItems: \"center\",\n  },\n  avatar: {\n    margin: theme.spacing(1),\n    backgroundColor: theme.palette.secondary.main,\n  },\n  form: {\n    width: \"100%\", // Fix IE 11 issue.\n    marginTop: theme.spacing(1),\n  },\n  submit: {\n    margin: theme.spacing(3, 0, 2),\n  },\n  alert: {\n    position: \"fixed\",\n    bottom: 0,\n    width: \"100%\",\n  },\n}));\n\nfunction SignIn(props) {\n  useEffect(() => {\n    const signInType =\n      (props.location.state && props.location.state.from) || \"\";\n    if (signInType === \"forgotpassword\") {\n      setSuccessMsg(\"Password reset is successful! Please sign in\");\n      showAlertHandler(\"success\");\n    } else if (signInType === \"signupconfirm\") {\n      setSuccessMsg(\"Sign up is successful! Please sign in\");\n      showAlertHandler(\"success\");\n    } else if (signInType === \"changepassword\") {\n      setErrorMsg(\"Please sign in first to change password.\");\n      showAlertHandler(\"fail\");\n    }\n  }, []);\n\n  const classes = useStyles();\n  const [username, setUsername] = useState(\"\");\n  const [password, setPassword] = useState(\"\");\n  const [remember, setRemember] = useState(false);\n  const [showPassword, setShowPassword] = useState(false);\n  const [showSuccess, setShowSuccess] = useState(false);\n  const [successMsg, setSuccessMsg] = useState(null);\n  const [showFail, setShowFail] = useState(false);\n  const [errorMsg, setErrorMsg] = useState(null);\n\n  const history = useHistory();\n\n  const handleClickShowPassword = () => {\n    setShowPassword(!showPassword);\n  };\n\n  const handleRememberMe = () => {\n    setRemember(!remember);\n  };\n\n  const handleSumbit = async function (event) {\n    event.preventDefault();\n    try {\n      const response = await Auth.signIn(username, password);\n      console.log(\"Sign in response \", response);\n      props.setSignedIn(true);\n      props.setUserName(username);\n      history.push(\"/\");\n    } catch (error) {\n      console.log(\"signin error: \", error);\n      setErrorMsg(error.message);\n      showAlertHandler(\"fail\");\n    }\n  };\n\n  const showAlertHandler = (type) => {\n    if (type === \"success\") {\n      setShowSuccess(true);\n      const timer = setTimeout(() => {\n        setShowSuccess(false);\n      }, 5000);\n    } else if (type === \"fail\") {\n      setShowFail(true);\n      const timer = setTimeout(() => {\n        setShowFail(false);\n      }, 5000);\n    }\n  };\n\n  return (\n    <div>\n      <AuthHeader location=\"Sign In\" />\n      <Container component=\"main\" maxWidth=\"xs\">\n        <CssBaseline />\n        <div className={classes.paper}>\n          <Avatar className={classes.avatar}>\n            <LockOutlinedIcon />\n          </Avatar>\n          <Typography component=\"h1\" variant=\"h5\">\n            Sign in\n          </Typography>\n          <form className={classes.form} noValidate onSubmit={handleSumbit}>\n            <TextField\n              variant=\"outlined\"\n              margin=\"normal\"\n              required\n              fullWidth\n              id=\"username\"\n              label=\"Username\"\n              name=\"username\"\n              autoComplete=\"username\"\n              autoFocus\n              onChange={(event) => setUsername(event.target.value)}\n            />\n            <TextField\n              variant=\"outlined\"\n              margin=\"normal\"\n              required\n              fullWidth\n              name=\"password\"\n              label=\"Password\"\n              type={showPassword ? \"text\" : \"password\"}\n              id=\"password\"\n              autoComplete=\"current-password\"\n              onChange={(event) => setPassword(event.target.value)}\n              InputProps={{\n                endAdornment: (\n                  <InputAdornment position=\"end\">\n                    <IconButton\n                      aria-label=\"toggle password visibility\"\n                      onClick={handleClickShowPassword}\n                      edge=\"end\"\n                    >\n                      {showPassword ? <Visibility /> : <VisibilityOff />}\n                    </IconButton>\n                  </InputAdornment>\n                ),\n              }}\n            />\n            <FormControlLabel\n              control={\n                <Checkbox\n                  value=\"remember\"\n                  color=\"primary\"\n                  onChange={handleRememberMe}\n                  defaultValue={remember}\n                />\n              }\n              label=\"Remember me\"\n            />\n            <Button\n              type=\"submit\"\n              fullWidth\n              variant=\"contained\"\n              color=\"primary\"\n              className={classes.submit}\n            >\n              Sign In\n            </Button>\n            <Grid container>\n              <Grid item xs>\n                <Link href=\"/forgotpassword\" variant=\"body2\">\n                  Forgot password?\n                </Link>\n              </Grid>\n              <Grid item>\n                <Link href=\"/signup\" variant=\"body2\">\n                  {\"Don't have an account? Sign Up\"}\n                </Link>\n              </Grid>\n            </Grid>\n          </form>\n        </div>\n        <Box mt={8}>\n          <Copyright />\n        </Box>\n      </Container>\n      <Fade in={showSuccess}>\n        <Alert variant=\"filled\" severity=\"success\" className={classes.alert}>\n          {successMsg || \"Success.\"}\n        </Alert>\n      </Fade>\n      <Fade in={showFail}>\n        <Alert variant=\"filled\" severity=\"error\" className={classes.alert}>\n          {errorMsg || \"Unknown error.\"}\n        </Alert>\n      </Fade>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state, ownProps) => {\n  return {\n    signedIn: state.auth.signedIn,\n  };\n};\n\n// Update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setSignedIn: (newSignedIn) =>\n      dispatch({ type: \"SET_SIGNEDIN\", value: newSignedIn }),\n    setUserName: (newUserName) =>\n      dispatch({ type: \"SET_USERNAME\", value: newUserName }),\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SignIn);\n","import React from \"react\";\nimport Button from \"@material-ui/core/Button\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\n\nexport default function AlertDialog({\n  title,\n  contentText,\n  open,\n  setOpen,\n  btn1Name,\n  btn2Name,\n  callBack,\n}) {\n  const handleClickOpen = () => {\n    setOpen(true);\n  };\n\n  const handleClose = () => {\n    setOpen(false);\n  };\n\n  return (\n    <div>\n      <Dialog open={open} onClose={handleClose}>\n        <DialogTitle>{title}</DialogTitle>\n        <DialogContent>\n          <DialogContentText>{contentText}</DialogContentText>\n        </DialogContent>\n        <DialogActions>\n          <Button onClick={handleClose} color=\"primary\">\n            {btn1Name}\n          </Button>\n          <Button onClick={callBack} color=\"primary\" autoFocus>\n            {btn2Name}\n          </Button>\n        </DialogActions>\n      </Dialog>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport Button from \"@material-ui/core/Button\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport TextField from \"@material-ui/core/TextField\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport Link from \"@material-ui/core/Link\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Box from \"@material-ui/core/Box\";\nimport LockOutlinedIcon from \"@material-ui/icons/LockOutlined\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Container from \"@material-ui/core/Container\";\nimport { Auth } from \"@aws-amplify/auth\";\nimport { useHistory } from \"react-router-dom\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport Visibility from \"@material-ui/icons/Visibility\";\nimport VisibilityOff from \"@material-ui/icons/VisibilityOff\";\nimport AuthHeader from \"../component/AuthHeader\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport Fade from \"@material-ui/core/Fade\";\nimport EmailIcon from \"@material-ui/icons/Email\";\nimport AlertDialog from \"../component/AlertDialog\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport ReactMarkdown from \"react-markdown\";\n\nfunction Copyright() {\n  return (\n    <Typography variant=\"body2\" color=\"textSecondary\" align=\"center\">\n      {\"Copyright © \"}\n      <Link color=\"inherit\" href=\"https://nPOD.org/\">\n        nPOD\n      </Link>{\" \"}\n      {new Date().getFullYear()}\n      {\".\"}\n    </Typography>\n  );\n}\n\nconst useStyles = makeStyles((theme) => ({\n  paper: {\n    marginTop: theme.spacing(8),\n    display: \"flex\",\n    flexDirection: \"column\",\n    alignItems: \"center\",\n  },\n  avatar: {\n    margin: theme.spacing(1),\n    backgroundColor: theme.palette.secondary.main,\n  },\n  form: {\n    width: \"100%\", // Fix IE 11 issue.\n    marginTop: theme.spacing(3),\n  },\n  submit: {\n    margin: theme.spacing(3, 0, 0),\n  },\n  helperText: {\n    margin: theme.spacing(1, 0, 0),\n    color: \"grey\",\n  },\n  alert: {\n    position: \"fixed\",\n    bottom: 0,\n    width: \"100%\",\n  },\n  passwordHint: {\n    marginTop: \"1px\",\n  },\n  passwordGreen: {\n    color: \"green\",\n    paddingLeft: \"20px\",\n    fontSize: 12,\n  },\n  passwordRed: {\n    color: \"red\",\n    paddingLeft: \"20px\",\n    fontSize: 12,\n  },\n  userAgreementBox: {\n    display: \"flex\",\n  },\n  userAgreementDialog: {\n    width: \"50vw\",\n  },\n  userDisagree: {\n    color: \"red\",\n    marginLeft: \"10px\",\n  },\n  userAgree: {\n    color: \"green\",\n    marginLeft: \"10px\",\n  },\n  markDown: {\n    paddingTop: theme.spacing(3),\n    paddingBottom: theme.spacing(5),\n    paddingLeft: theme.spacing(15),\n    paddingRight: theme.spacing(15),\n  },\n}));\n\nexport default function SignUp() {\n  const classes = useStyles();\n  const [username, setUsername] = useState(null);\n  const [email, setEmail] = useState(null);\n  const [firstname, setFirstname] = useState(null);\n  const [lastname, setLastname] = useState(null);\n  const [organization, setOrganization] = useState(null);\n  const [institution, setInstitution] = useState(null);\n  const [project, setProject] = useState(null);\n  const [password, setPassword] = useState(null);\n  const [showPassword, setShowPassword] = useState(false);\n  const [rePassword, setRePassword] = useState(null);\n  const [showRePassword, setShowRePassword] = useState(false);\n  const [showFail, setShowFail] = useState(false);\n  const [errorMsg, setErrorMsg] = useState(null);\n  const [met7Chars, setMet7Chars] = useState(false);\n  const [met1Upper, setMet1Upper] = useState(false);\n  const [met1Lower, setMet1Lower] = useState(false);\n  const [met1Number, setMet1Number] = useState(false);\n  const [met1Special, setMet1Special] = useState(false);\n  const [rePasswordMatch, setRePasswordMatch] = useState(false);\n  const [openAlert, setOpenAlert] = useState(false);\n  const [alertTitle, setAlertTitle] = useState(\"Notice\");\n  const [alertContent, setAlertCotent] = useState(\"\");\n  const [agreement, setAgreement] = useState(false);\n  const [openUserAgreement, setOpenUserAgreement] = useState(false);\n  const [post, setPost] = useState(\"\");\n  const history = useHistory();\n\n  useEffect(() => {\n    const setTheText = async () => {\n      const fileName = \"userAgreementText\";\n      const file = await import(`../component/UserAgreement/${fileName}.txt`);\n      const response = await fetch(file.default);\n      const text = await response.text();\n      setPost(text);\n    };\n    setTheText();\n  }, []);\n\n  const handleClickShowPassword = () => {\n    setShowPassword(!showPassword);\n  };\n\n  const handleClickShowRePassword = () => {\n    setShowRePassword(!showRePassword);\n  };\n\n  const handlePasswordCheck = (event) => {\n    const newVal = event.target.value;\n    var re1 = /.{7,}$/;\n    if (re1.test(newVal)) {\n      setMet7Chars(true);\n    } else {\n      setMet7Chars(false);\n    }\n    var re2 = /[A-Z]/;\n    if (re2.test(newVal)) {\n      setMet1Upper(true);\n    } else {\n      setMet1Upper(false);\n    }\n    var re3 = /[a-z]/;\n    if (re3.test(newVal)) {\n      setMet1Lower(true);\n    } else {\n      setMet1Lower(false);\n    }\n    var re4 = /[0-9]/;\n    if (re4.test(newVal)) {\n      setMet1Number(true);\n    } else {\n      setMet1Number(false);\n    }\n    var re5 = /[!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]/;\n    if (re5.test(newVal)) {\n      setMet1Special(true);\n    } else {\n      setMet1Special(false);\n    }\n\n    setPassword(newVal);\n    if (newVal !== rePassword) {\n      setRePasswordMatch(false);\n    } else {\n      setRePasswordMatch(true);\n    }\n  };\n\n  const handleRePasswordCheck = (event) => {\n    const newVal = event.target.value;\n    if (newVal === password) {\n      setRePasswordMatch(true);\n    } else {\n      setRePasswordMatch(false);\n    }\n    setRePassword(newVal);\n  };\n\n  const handleSumbit = async function (event) {\n    event.preventDefault();\n    try {\n      if (\n        username === null ||\n        username.length < 1 ||\n        email === null ||\n        email.length < 1 ||\n        firstname === null ||\n        firstname.length < 1 ||\n        lastname === null ||\n        lastname.length < 1 ||\n        password === null ||\n        password.length < 1 ||\n        rePassword === null ||\n        rePassword.length < 1\n      ) {\n        throw \"Error: All fields are required to fill!\";\n      }\n    } catch (error) {\n      console.log(error);\n      setErrorMsg(error);\n      showAlertHandler(\"fail\");\n      setAlertTitle(\"Sign-up Error\");\n      setAlertCotent(error);\n      setOpenAlert(true);\n      return;\n    }\n\n    try {\n      if (!emailValidation(email)) {\n        throw \"Error: Email format is not valid.\";\n      }\n    } catch (error) {\n      console.log(error);\n      setErrorMsg(error);\n      showAlertHandler(\"fail\");\n      setAlertTitle(\"Sign-up Error\");\n      setAlertCotent(error);\n      setOpenAlert(true);\n      return;\n    }\n\n    console.log(\"password validation: \", passwordValidation(password));\n    try {\n      if (!passwordValidation(password))\n        throw \"Error: Password is not qualifed! Please choose another one\";\n    } catch (error) {\n      console.log(error);\n      setErrorMsg(error);\n      showAlertHandler(\"fail\");\n      setAlertTitle(\"Sign-up Error\");\n      setAlertCotent(error);\n      setOpenAlert(true);\n      return;\n    }\n\n    try {\n      if (password !== rePassword)\n        throw \"Error: Re-input password doesn't match.\";\n    } catch (error) {\n      console.log(error);\n      setErrorMsg(error);\n      showAlertHandler(\"fail\");\n      setAlertTitle(\"Sign-up Error\");\n      setAlertCotent(error);\n      setOpenAlert(true);\n\n      return;\n    }\n\n    try {\n      if (agreement !== true)\n        throw \"Error: User has to agree the nPOD User Agreement prior the sign-up.\";\n    } catch (error) {\n      console.log(error);\n      setErrorMsg(error);\n      showAlertHandler(\"fail\");\n      setAlertTitle(\"Sign-up Error\");\n      setAlertCotent(error);\n      setOpenAlert(true);\n\n      return;\n    }\n\n    try {\n      const response = await Auth.signUp({\n        username,\n        password,\n        attributes: {\n          email,\n          \"custom:firstname\": firstname,\n          \"custom:lastname\": lastname,\n          \"custom:institution\": institution ? institution : \"None\",\n          \"custom:project\": project ? project : \"None\",\n        },\n      });\n      console.log(\"Signup response: \", response);\n      //history.push(\"/signupconfirm\", { user: username });\n    } catch (error) {\n      console.log(\"Signup error: \", error);\n      setErrorMsg(error.message);\n      if (\n        error.message ===\n        \"CustomMessage failed with error Pending for approval.\"\n      ) {\n        setAlertTitle(\"Sign-up Notification\");\n        setAlertCotent(\n          \"Your sign up request has been submitted. The approval notice will be sent to your email after admin confirm your identity.\"\n        );\n        setOpenAlert(true);\n      } else {\n        setAlertTitle(\"Sign-up Error\");\n        setAlertCotent(error.message);\n        setOpenAlert(true);\n      }\n      return;\n    }\n  };\n\n  const showAlertHandler = (type) => {\n    if (type === \"fail\") {\n      setShowFail(true);\n      const timer = setTimeout(() => {\n        setShowFail(false);\n      }, 5000);\n    }\n  };\n\n  const handleOpenAlert = () => {\n    setOpenAlert(true);\n  };\n\n  const handleGoHome = () => {\n    history.push(\"/\");\n  };\n\n  const handleClickUserAgreement = () => {\n    setOpenUserAgreement(!openUserAgreement);\n  };\n\n  const handleUserAgree = () => {\n    setAgreement(true);\n    setOpenUserAgreement(false);\n  };\n\n  const handleUserDisagree = () => {\n    setAgreement(false);\n    setOpenUserAgreement(false);\n  };\n\n  const emailValidation = (theEmail) => {\n    const re =\n      /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n    return re.test(String(email).toLowerCase());\n  };\n\n  const passwordValidation = (thePassword) => {\n    // const re = {\n    //   capital: /[A-Z]/,\n    //   digit: /[0-9]/,\n    //   //except: /[aeiou]/,\n    //   full: /^[!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?][A-Za-z0-9]{7,}$/,\n    // };\n    const re =\n      /^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?])[a-zA-Z0-9!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]{7,}$/;\n\n    return re.test(thePassword);\n  };\n\n  const InvitationHelpText = (\n    <React.Fragment>\n      <div style={{ display: \"flex\", alignItems: \"center\", marginTop: \"3px\" }}>\n        <EmailIcon />\n        <div style={{ fontSize: 12, marginLeft: \"3px\" }}>\n          Request Invitation Code:{\" \"}\n          <a target=\"_blank\" href=\"mailto:npod@pathology.ufl.edu\">\n            npod@pathology.ufl.edu\n          </a>\n        </div>\n      </div>\n      <div>\n        {\" \"}\n        Please put{\" \"}\n        <a target=\"_blank\" href=\"mailto:no-reply@verificationemail.com\">\n          no-reply@verificationemail.com\n        </a>{\" \"}\n        to your email whitelist in case you can't get the verification email\n        properly. If you still don't get the verification email in 10 mins,\n        please consider using another email to sign up.\n      </div>\n    </React.Fragment>\n  );\n\n  return (\n    <div>\n      <AuthHeader location=\"Sign Up\" />\n      <Dialog\n        open={openUserAgreement}\n        onClose={handleClickUserAgreement}\n        fullWidth=\"true\"\n        maxWidth=\"md\"\n      >\n        {/* <DialogTitle>{\"nPOD User Agreement\"}</DialogTitle> */}\n        <DialogContent>\n          <h1 align=\"center\">nPOD User Agreement</h1>\n          <ReactMarkdown className={classes.markDown}>{post}</ReactMarkdown>\n        </DialogContent>\n        <DialogActions>\n          <Button onClick={handleUserDisagree} color=\"primary\">\n            Disagree\n          </Button>\n          <Button onClick={handleUserAgree} color=\"primary\" autoFocus>\n            Agree\n          </Button>\n        </DialogActions>\n      </Dialog>\n      <AlertDialog\n        title={alertTitle}\n        contentText={alertContent}\n        open={openAlert}\n        setOpen={setOpenAlert}\n        btn1Name=\"Back\"\n        btn2Name=\"Home\"\n        callBack={handleGoHome}\n      />\n      <Container component=\"main\" maxWidth=\"xs\">\n        <CssBaseline />\n        <div className={classes.paper}>\n          <Avatar className={classes.avatar}>\n            <LockOutlinedIcon />\n          </Avatar>\n          <Typography component=\"h1\" variant=\"h5\">\n            nPOD Sign up\n          </Typography>\n          <form className={classes.form} noValidate onSubmit={handleSumbit}>\n            <Grid container spacing={2}>\n              <Grid item xs={12}>\n                <TextField\n                  variant=\"outlined\"\n                  margin=\"normal\"\n                  required\n                  fullWidth\n                  id=\"username\"\n                  label=\"Username\"\n                  name=\"username\"\n                  autoComplete=\"username\"\n                  autoFocus\n                  onChange={(event) => setUsername(event.target.value)}\n                />\n              </Grid>\n              <Grid item xs={12}>\n                <TextField\n                  variant=\"outlined\"\n                  required\n                  fullWidth\n                  id=\"email\"\n                  label=\"Email Address\"\n                  name=\"email\"\n                  autoComplete=\"email\"\n                  onChange={(event) => setEmail(event.target.value)}\n                />\n              </Grid>\n              <Grid item xs={12}>\n                <TextField\n                  variant=\"outlined\"\n                  required\n                  fullWidth\n                  name=\"password\"\n                  label=\"Password\"\n                  type={showPassword ? \"text\" : \"password\"}\n                  id=\"password\"\n                  onChange={handlePasswordCheck}\n                  InputProps={{\n                    endAdornment: (\n                      <InputAdornment position=\"end\">\n                        <IconButton\n                          aria-label=\"toggle password visibility\"\n                          onClick={handleClickShowPassword}\n                          edge=\"end\"\n                        >\n                          {showPassword ? <Visibility /> : <VisibilityOff />}\n                        </IconButton>\n                      </InputAdornment>\n                    ),\n                  }}\n                />\n              </Grid>\n              <Grid item xs={12}>\n                <Typography>\n                  <p style={{ fontSize: 12 }} className={classes.passwordHint}>\n                    Password requirement: <br></br>\n                    <span\n                      className={\n                        met7Chars ? classes.passwordGreen : classes.passwordRed\n                      }\n                    >\n                      At least 7 characters long\n                    </span>\n                    <br></br>\n                    <span\n                      className={\n                        met1Upper ? classes.passwordGreen : classes.passwordRed\n                      }\n                    >\n                      Includes at least 1 UPPERCASE alphbet character\n                    </span>\n                    <br></br>\n                    <span\n                      className={\n                        met1Lower ? classes.passwordGreen : classes.passwordRed\n                      }\n                    >\n                      Includes at least 1 lowercase alphbet character\n                    </span>\n                    <br></br>\n                    <span\n                      className={\n                        met1Number ? classes.passwordGreen : classes.passwordRed\n                      }\n                    >\n                      Includes at least 1 number\n                    </span>\n                    <br></br>\n                    <span\n                      className={\n                        met1Special\n                          ? classes.passwordGreen\n                          : classes.passwordRed\n                      }\n                    >\n                      Includes at least 1 special sign from ! @ # $ % ^ & * ( )\n                      _ + - = [ ] &#123; &#125; ; ' : \" \\ | , . &#60; &#62; / ?\n                    </span>\n                    <br></br>\n                  </p>\n                </Typography>\n              </Grid>\n              <Grid item xs={12}>\n                <TextField\n                  variant=\"outlined\"\n                  required\n                  fullWidth\n                  name=\"rePassword\"\n                  label=\"Re-input Password\"\n                  type={showRePassword ? \"text\" : \"password\"}\n                  id=\"rePassword\"\n                  onChange={handleRePasswordCheck}\n                  InputProps={{\n                    endAdornment: (\n                      <InputAdornment position=\"end\">\n                        <IconButton\n                          aria-label=\"toggle repassword visibility\"\n                          onClick={handleClickShowRePassword}\n                          edge=\"end\"\n                        >\n                          {showRePassword ? <Visibility /> : <VisibilityOff />}\n                        </IconButton>\n                      </InputAdornment>\n                    ),\n                  }}\n                />\n              </Grid>\n              <Grid item xs={12}>\n                {rePasswordMatch ? (\n                  <p\n                    className={classes.passwordGreen}\n                    style={{ marginTop: \"1px\" }}\n                  >\n                    Re-input password matched.\n                  </p>\n                ) : (\n                  <p\n                    className={classes.passwordRed}\n                    style={{ marginTop: \"1px\" }}\n                  >\n                    Re-input password not matched.\n                  </p>\n                )}\n              </Grid>\n              <Grid item xs={12}>\n                <TextField\n                  variant=\"outlined\"\n                  required\n                  fullWidth\n                  id=\"firstname\"\n                  label=\"First Name\"\n                  name=\"firstname\"\n                  autoComplete=\"given-name\"\n                  onChange={(event) => setFirstname(event.target.value)}\n                />\n              </Grid>\n              <Grid item xs={12}>\n                <TextField\n                  variant=\"outlined\"\n                  required\n                  fullWidth\n                  id=\"lastname\"\n                  label=\"Last Name\"\n                  name=\"lastname\"\n                  autoComplete=\"family-name\"\n                  onChange={(event) => setLastname(event.target.value)}\n                />\n              </Grid>\n              <Grid item xs={12}>\n                <TextField\n                  variant=\"outlined\"\n                  required\n                  fullWidth\n                  id=\"institution\"\n                  label=\"Institution\"\n                  name=\"institution\"\n                  autoComplete=\"institution\"\n                  onChange={(event) => setInstitution(event.target.value)}\n                />\n                <p className={classes.helperText}>\n                  <Typography variant=\"caption\">\n                    Leave blank if you don't have one.\n                  </Typography>\n                </p>\n              </Grid>\n              <Grid item xs={12}>\n                <TextField\n                  variant=\"outlined\"\n                  required\n                  fullWidth\n                  id=\"project\"\n                  label=\"nPOD Approved Project\"\n                  name=\"project\"\n                  autoComplete=\"project\"\n                  onChange={(event) => setProject(event.target.value)}\n                />\n                <p className={classes.helperText}>\n                  <Typography variant=\"caption\">\n                    Leave blank if you don't have one.\n                  </Typography>\n                </p>\n              </Grid>\n              <Grid item xs={12}>\n                <Box className={classes.userAgreementBox}>\n                  <Button\n                    variant=\"contained\"\n                    onClick={handleClickUserAgreement}\n                  >\n                    nPOD User Agreement\n                  </Button>{\" \"}\n                  <p\n                    className={\n                      agreement ? classes.userAgree : classes.userDisagree\n                    }\n                  >\n                    {agreement ? \"User agrees\" : \"User does not agree\"}\n                  </p>\n                </Box>\n                <p className={classes.helperText}>\n                  <Typography variant=\"caption\">\n                    Click to read \"nPOD User Agreement\" then select \"Agree\" or\n                    not.\n                  </Typography>\n                </p>\n              </Grid>\n            </Grid>\n            <Button\n              type=\"submit\"\n              fullWidth\n              variant=\"contained\"\n              color=\"primary\"\n              className={classes.submit}\n            >\n              Sign Up\n            </Button>\n            <p className={classes.helperText}>\n              <Typography variant=\"caption\">\n                Click \"SIGN UP\" button to request the new account. The admin\n                will grant you the access after approval.\n              </Typography>\n            </p>\n            <Grid container justify=\"flex-end\">\n              <Grid item>\n                <Link href=\"signin\" variant=\"body2\">\n                  Already have an account? Sign in\n                </Link>\n              </Grid>\n            </Grid>\n          </form>\n        </div>\n        <Box mt={5}>\n          <Copyright />\n        </Box>\n      </Container>\n      <Fade in={showFail}>\n        <Alert variant=\"filled\" severity=\"error\" className={classes.alert}>\n          {errorMsg || \"Unknown sign up Error.\"}\n        </Alert>\n      </Fade>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport Button from \"@material-ui/core/Button\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport TextField from \"@material-ui/core/TextField\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Box from \"@material-ui/core/Box\";\nimport LockOutlinedIcon from \"@material-ui/icons/LockOutlined\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Container from \"@material-ui/core/Container\";\nimport { Auth } from \"@aws-amplify/auth\";\nimport Link from \"@material-ui/core/Link\";\nimport { useParams, useHistory } from \"react-router-dom\";\nimport AuthHeader from \"../component/AuthHeader\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport Fade from \"@material-ui/core/Fade\";\n\nfunction Copyright() {\n  return (\n    <Typography variant=\"body2\" color=\"textSecondary\" align=\"center\">\n      {\"Copyright © \"}\n      <Link color=\"inherit\" href=\"https://nPOD.org/\">\n        nPOD\n      </Link>{\" \"}\n      {new Date().getFullYear()}\n      {\".\"}\n    </Typography>\n  );\n}\n\nconst useStyles = makeStyles((theme) => ({\n  paper: {\n    marginTop: theme.spacing(8),\n    display: \"flex\",\n    flexDirection: \"column\",\n    alignItems: \"center\",\n  },\n  avatar: {\n    margin: theme.spacing(1),\n    backgroundColor: theme.palette.secondary.main,\n  },\n  form: {\n    width: \"100%\", // Fix IE 11 issue.\n    marginTop: theme.spacing(3),\n  },\n  submit: {\n    margin: theme.spacing(3, 0, 2),\n  },\n  alert: {\n    position: \"fixed\",\n    bottom: 0,\n    width: \"100%\",\n  },\n}));\n\nexport default function SignUpConfirm(props) {\n  const classes = useStyles();\n  const user = (props.location.state && props.location.state.user) || \"\";\n  const [username, setUsername] = useState(\"\");\n  const [code, setCode] = useState(\"\");\n  const [showFail, setShowFail] = useState(false);\n  const [errorMsg, setErrorMsg] = useState(null);\n  const [showSuccess, setShowSuccess] = useState(false);\n  const [successMsg, setSuccessMsg] = useState(null);\n  const history = useHistory();\n\n  useEffect(() => {\n    setUsername(user);\n    console.log(\"passed in user is \", user);\n    setSuccessMsg(\"Confirmation code is sent! Please check your email\");\n    showAlertHandler(\"success\");\n  }, []);\n\n  const handleSumbit = async function (event) {\n    event.preventDefault();\n    try {\n      const response = await Auth.confirmSignUp(username, code);\n      console.log(\"Signup Confirm response: \", response);\n      history.push(\"/signin\", { from: \"signupconfirm\" });\n    } catch (error) {\n      console.log(\"Signup Confirm error: \", error);\n      setErrorMsg(error.message);\n      showAlertHandler(\"fail\");\n    }\n  };\n\n  const handleResend = async function (event) {\n    event.preventDefault();\n    try {\n      const response = await Auth.resendSignUp(username);\n      console.log(\"Code resend response: \", response);\n      setSuccessMsg(\"The confirmation code is sent! Please check your email.\");\n      showAlertHandler(\"success\");\n    } catch (error) {\n      console.log(\"Code resend error: \", error);\n      setErrorMsg(error.message);\n      showAlertHandler(\"fail\");\n    }\n  };\n\n  const showAlertHandler = (type) => {\n    if (type === \"fail\") {\n      setShowFail(true);\n      const timer = setTimeout(() => {\n        setShowFail(false);\n      }, 5000);\n    } else if (type == \"success\") {\n      setShowSuccess(true);\n      const timer = setTimeout(() => {\n        setShowSuccess(false);\n      }, 5000);\n    }\n  };\n\n  return (\n    <div>\n      <AuthHeader location=\"Sign Up Confirm\" />\n\n      <Container component=\"main\" maxWidth=\"xs\">\n        <CssBaseline />\n        <div className={classes.paper}>\n          <Avatar className={classes.avatar}>\n            <LockOutlinedIcon />\n          </Avatar>\n          <Typography component=\"h1\" variant=\"h5\">\n            Sign up confirm\n          </Typography>\n          <form className={classes.form} noValidate onSubmit={handleSumbit}>\n            <Grid container spacing={2}>\n              <Grid item xs={12}>\n                <TextField\n                  variant=\"outlined\"\n                  margin=\"normal\"\n                  required\n                  fullWidth\n                  id=\"username\"\n                  label=\"Username\"\n                  name=\"username\"\n                  defaultValue={user}\n                  onChange={(event) => setUsername(event.target.value)}\n                />\n              </Grid>\n              <Grid item xs={12}>\n                <TextField\n                  variant=\"outlined\"\n                  required\n                  fullWidth\n                  id=\"code\"\n                  label=\"Confirmation Code\"\n                  name=\"code\"\n                  autoFocus\n                  onChange={(event) => setCode(event.target.value)}\n                />\n              </Grid>\n            </Grid>\n            <Button\n              type=\"submit\"\n              fullWidth\n              variant=\"contained\"\n              color=\"primary\"\n              className={classes.submit}\n            >\n              Confirm\n            </Button>\n            <Grid container justify=\"flex-end\">\n              <Grid item>\n                <Link href=\"#\" variant=\"body2\" onClick={handleResend}>\n                  Didn't get the code? Resend\n                </Link>\n              </Grid>\n            </Grid>\n          </form>\n        </div>\n        <Box mt={5}>\n          <Copyright />\n        </Box>\n      </Container>\n      <Fade in={showFail}>\n        <Alert variant=\"filled\" severity=\"error\" className={classes.alert}>\n          {errorMsg || \"Unknown sign up Error.\"}\n        </Alert>\n      </Fade>\n      <Fade in={showSuccess}>\n        <Alert variant=\"filled\" severity=\"success\" className={classes.alert}>\n          {successMsg || \"Success.\"}\n        </Alert>\n      </Fade>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport Button from \"@material-ui/core/Button\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport TextField from \"@material-ui/core/TextField\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport Link from \"@material-ui/core/Link\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Box from \"@material-ui/core/Box\";\nimport LockOutlinedIcon from \"@material-ui/icons/LockOutlined\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Container from \"@material-ui/core/Container\";\nimport { Auth } from \"@aws-amplify/auth\";\nimport { useHistory } from \"react-router-dom\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport Visibility from \"@material-ui/icons/Visibility\";\nimport VisibilityOff from \"@material-ui/icons/VisibilityOff\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport Fade from \"@material-ui/core/Fade\";\nimport AuthHeader from \"../component/AuthHeader\";\nimport AlertDialog from \"../component/AlertDialog\";\n\nfunction Copyright() {\n  return (\n    <Typography variant=\"body2\" color=\"textSecondary\" align=\"center\">\n      {\"Copyright © \"}\n      <Link color=\"inherit\" href=\"https://nPOD.org/\">\n        nPOD\n      </Link>{\" \"}\n      {new Date().getFullYear()}\n      {\".\"}\n    </Typography>\n  );\n}\n\nconst useStyles = makeStyles((theme) => ({\n  paper: {\n    marginTop: theme.spacing(8),\n    display: \"flex\",\n    flexDirection: \"column\",\n    alignItems: \"center\",\n  },\n  avatar: {\n    margin: theme.spacing(1),\n    backgroundColor: theme.palette.secondary.main,\n  },\n  form: {\n    width: \"100%\", // Fix IE 11 issue.\n    marginTop: theme.spacing(3),\n  },\n  submit: {\n    margin: theme.spacing(3, 0, 2),\n  },\n  alert: {\n    position: \"fixed\",\n    bottom: 0,\n    width: \"100%\",\n  },\n}));\n\nconst initialFormState = {\n  username: \"\",\n  new_password: \"\",\n  code: \"\",\n  formType: \"sendCode\",\n};\n\nexport default function ForgotPassword() {\n  const classes = useStyles();\n  const history = useHistory();\n  const [formState, updateFormState] = useState(initialFormState);\n  const [showNewPassword, setShowNewPassword] = useState(false);\n  const [showSuccess, setShowSuccess] = useState(false);\n  const [successMsg, setSuccessMsg] = useState(null);\n  const [showFail, setShowFail] = useState(false);\n  const [errorMsg, setErrorMsg] = useState(null);\n  const [openAlert, setOpenAlert] = useState(false);\n  const [alertTitle, setAlertTitle] = useState(\"Notice\");\n  const [alertContent, setAlertCotent] = useState(\"\");\n\n  const handleChange = (event) => {\n    event.persist();\n    updateFormState(() => ({\n      ...formState,\n      [event.target.name]: event.target.value,\n    }));\n  };\n  const { formType } = formState;\n\n  const handleClickShowNewPassword = () => {\n    setShowNewPassword(!showNewPassword);\n  };\n\n  const handleSumbitSendVerification = async function (event) {\n    event.preventDefault();\n    const { username } = formState;\n    try {\n      const response = await Auth.forgotPassword(username);\n      console.log(\"Reset password response (send verification): \", response);\n      setSuccessMsg(\"Verification was sent! Please check your email\");\n      showAlertHandler(\"success\");\n      setAlertTitle(\"Reset Password Notice\");\n      setAlertCotent(\n        \"Verification was sent, please check the email and click the link to reset your password\"\n      );\n      setOpenAlert(true);\n    } catch (error) {\n      console.log(\"Reset password error (send verification): \", error);\n      setErrorMsg(error.message);\n      showAlertHandler(\"fail\");\n      setAlertTitle(\"Reset Password Error\");\n      setAlertCotent(\"Reset password has an error: \" + error.message);\n      setOpenAlert(true);\n    }\n  };\n\n  const handleSumbitSetNewPassword = async function (event) {\n    event.preventDefault();\n    const { username, new_password, code } = formState;\n    try {\n      const response = await Auth.forgotPasswordSubmit(\n        username,\n        code,\n        new_password\n      );\n      console.log(\"Set New Password response: \", response);\n      setSuccessMsg(\"New password reset is successful! Please sign in\");\n      showAlertHandler(\"success\");\n      history.push(\"/signin\", { from: \"forgotpassword\" });\n    } catch (error) {\n      console.log(\"Set New Password error: \", error);\n      setErrorMsg(error.message);\n      showAlertHandler(\"fail\");\n    }\n  };\n\n  const showAlertHandler = (type) => {\n    if (type === \"success\") {\n      setShowSuccess(true);\n      const timer = setTimeout(() => {\n        setShowSuccess(false);\n      }, 5000);\n    } else if (type === \"fail\") {\n      setShowFail(true);\n      const timer = setTimeout(() => {\n        setShowFail(false);\n      }, 5000);\n    }\n  };\n\n  const handleGoHome = () => {\n    history.push(\"/\");\n  };\n\n  return (\n    <div>\n      <AuthHeader location=\"Forgot Password\" />\n      {/* Send Confirmation Code */}\n      <AlertDialog\n        title={alertTitle}\n        contentText={alertContent}\n        open={openAlert}\n        setOpen={setOpenAlert}\n        btn1Name=\"Back\"\n        btn2Name=\"Home\"\n        callBack={handleGoHome}\n      />\n      <div>\n        <Container component=\"main\" maxWidth=\"xs\">\n          <CssBaseline />\n          <div className={classes.paper}>\n            <Avatar className={classes.avatar}>\n              <LockOutlinedIcon />\n            </Avatar>\n            <Typography component=\"h1\" variant=\"h5\">\n              Reset Password\n            </Typography>\n            <form\n              className={classes.form}\n              noValidate\n              onSubmit={handleSumbitSendVerification}\n            >\n              <Grid container spacing={2}>\n                <Grid item xs={12}>\n                  <TextField\n                    variant=\"outlined\"\n                    margin=\"normal\"\n                    required\n                    fullWidth\n                    id=\"username\"\n                    label=\"Username\"\n                    name=\"username\"\n                    autoComplete=\"username\"\n                    autoFocus\n                    onChange={handleChange}\n                  />\n                </Grid>\n              </Grid>\n              <Button\n                type=\"submit\"\n                fullWidth\n                variant=\"contained\"\n                color=\"primary\"\n                className={classes.submit}\n              >\n                Send Verify Link\n              </Button>\n              <p className={classes.helperText}>\n                <Typography variant=\"caption\">\n                  Click the link in your email inbox to verify your identity\n                </Typography>\n              </p>\n              <Grid container justify=\"flex-end\">\n                <Grid item>\n                  <Link href=\"signin\" variant=\"body2\">\n                    Already have an account? Sign in\n                  </Link>\n                </Grid>\n              </Grid>\n            </form>\n          </div>\n          <Box mt={5}>\n            <Copyright />\n          </Box>\n        </Container>\n      </div>\n\n      {/* Set new password */}\n      {formType === \"setNewPassword\" && (\n        <div>\n          <Container component=\"main\" maxWidth=\"xs\">\n            <CssBaseline />\n            <div className={classes.paper}>\n              <Avatar className={classes.avatar}>\n                <LockOutlinedIcon />\n              </Avatar>\n              <Typography component=\"h1\" variant=\"h5\">\n                Reset Password\n              </Typography>\n              <form\n                className={classes.form}\n                noValidate\n                onSubmit={handleSumbitSetNewPassword}\n              >\n                <Grid container spacing={2}>\n                  <Grid item xs={12}>\n                    <TextField\n                      variant=\"outlined\"\n                      margin=\"normal\"\n                      required\n                      fullWidth\n                      id=\"username\"\n                      label=\"Username\"\n                      name=\"username\"\n                      defaultValue={formState.username}\n                      onChange={handleChange}\n                    />\n                  </Grid>\n                  <Grid item xs={12}>\n                    <TextField\n                      variant=\"outlined\"\n                      required\n                      fullWidth\n                      id=\"code\"\n                      label=\"Confirm Code\"\n                      name=\"code\"\n                      autoFocus\n                      onChange={handleChange}\n                    />\n                  </Grid>\n                  <Grid item xs={12}>\n                    <TextField\n                      variant=\"outlined\"\n                      required\n                      fullWidth\n                      name=\"new_password\"\n                      label=\"New Password\"\n                      type={showNewPassword ? \"text\" : \"password\"}\n                      id=\"new_password\"\n                      onChange={handleChange}\n                      InputProps={{\n                        endAdornment: (\n                          <InputAdornment position=\"end\">\n                            <IconButton\n                              aria-label=\"toggle password visibility\"\n                              onClick={handleClickShowNewPassword}\n                              edge=\"end\"\n                            >\n                              {showNewPassword ? (\n                                <Visibility />\n                              ) : (\n                                <VisibilityOff />\n                              )}\n                            </IconButton>\n                          </InputAdornment>\n                        ),\n                      }}\n                    />\n                  </Grid>\n                </Grid>\n                <Button\n                  type=\"submit\"\n                  fullWidth\n                  variant=\"contained\"\n                  color=\"primary\"\n                  className={classes.submit}\n                >\n                  Set New Password\n                </Button>\n                <Grid container justify=\"flex-end\">\n                  <Grid item>\n                    <Link href=\"signin\" variant=\"body2\">\n                      Already have an account? Sign in\n                    </Link>\n                  </Grid>\n                </Grid>\n              </form>\n            </div>\n            <Box mt={5}>\n              <Copyright />\n            </Box>\n          </Container>\n        </div>\n      )}\n      <Fade in={showSuccess}>\n        <Alert variant=\"filled\" severity=\"success\" className={classes.alert}>\n          {successMsg || \"Success\"}\n        </Alert>\n      </Fade>\n      <Fade in={showFail}>\n        <Alert variant=\"filled\" severity=\"error\" className={classes.alert}>\n          {errorMsg || \"Unknown error\"}\n        </Alert>\n      </Fade>\n    </div>\n  );\n}\n","import React, { useEffect, useState } from \"react\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport Button from \"@material-ui/core/Button\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport TextField from \"@material-ui/core/TextField\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport Link from \"@material-ui/core/Link\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Box from \"@material-ui/core/Box\";\nimport LockOutlinedIcon from \"@material-ui/icons/LockOutlined\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Container from \"@material-ui/core/Container\";\nimport Auth from \"@aws-amplify/auth\";\nimport { useHistory } from \"react-router-dom\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport Visibility from \"@material-ui/icons/Visibility\";\nimport VisibilityOff from \"@material-ui/icons/VisibilityOff\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport Fade from \"@material-ui/core/Fade\";\nimport AuthHeader from \"../component/AuthHeader\";\n\nfunction Copyright() {\n  return (\n    <Typography variant=\"body2\" color=\"textSecondary\" align=\"center\">\n      {\"Copyright © \"}\n      <Link color=\"inherit\" href=\"https://nPOD.org/\">\n        nPOD\n      </Link>{\" \"}\n      {new Date().getFullYear()}\n      {\".\"}\n    </Typography>\n  );\n}\n\nconst useStyles = makeStyles((theme) => ({\n  paper: {\n    marginTop: theme.spacing(8),\n    display: \"flex\",\n    flexDirection: \"column\",\n    alignItems: \"center\",\n  },\n  avatar: {\n    margin: theme.spacing(1),\n    backgroundColor: theme.palette.secondary.main,\n  },\n  form: {\n    width: \"100%\", // Fix IE 11 issue.\n    marginTop: theme.spacing(3),\n  },\n  submit: {\n    margin: theme.spacing(3, 0, 2),\n  },\n  alert: {\n    position: \"fixed\",\n    bottom: 0,\n    width: \"100%\",\n  },\n}));\n\nexport default function ChangePassword() {\n  useEffect(() => {\n    checkAuth();\n  }, []);\n\n  async function checkAuth() {\n    try {\n      const authRes = await Auth.currentAuthenticatedUser();\n      console.log(\"Check auth response \", authRes);\n    } catch (error) {\n      console.log(\"Check Auth error \", error);\n      history.push(\"/signin\", { from: \"changepassword\" });\n    }\n  }\n\n  const classes = useStyles();\n  const [oldPassword, setOldPassword] = useState(\"\");\n  const [showOldPassword, setShowOldPassword] = useState(false);\n  const [newPassword, setNewPassword] = useState(\"\");\n  const [showNewPassword, setShowNewPassword] = useState(false);\n  const [showSuccess, setShowSuccess] = useState(false);\n  const [successMsg, setSuccessMsg] = useState(null);\n  const [showFail, setShowFail] = useState(false);\n  const [errorMsg, setErrorMsg] = useState(null);\n\n  const history = useHistory();\n\n  const handleClickShowOldPassword = () => {\n    setShowOldPassword(!showOldPassword);\n  };\n\n  const handleClickShowNewPassword = () => {\n    setShowNewPassword(!showNewPassword);\n  };\n\n  const handleSumbit = async function (event) {\n    event.preventDefault();\n\n    try {\n      const response = await Auth.currentAuthenticatedUser().then((user) => {\n        return Auth.changePassword(user, oldPassword, newPassword);\n      });\n      console.log(\"Change password response: \", response);\n      setSuccessMsg(\"Password change is successful!\");\n      showAlertHandler(\"success\");\n    } catch (error) {\n      console.log(\"Change password response: \", error);\n      setErrorMsg(error.message);\n      showAlertHandler(\"fail\");\n    }\n  };\n\n  const showAlertHandler = (type) => {\n    if (type === \"success\") {\n      setShowSuccess(true);\n      const timer = setTimeout(() => {\n        setShowSuccess(false);\n      }, 5000);\n    } else if (type === \"fail\") {\n      setShowFail(true);\n      const timer = setTimeout(() => {\n        setShowFail(false);\n      }, 5000);\n    }\n  };\n\n  return (\n    <div>\n      <AuthHeader location=\"Change Password\" />\n      <Container component=\"main\" maxWidth=\"xs\">\n        <CssBaseline />\n        <div className={classes.paper}>\n          <Avatar className={classes.avatar}>\n            <LockOutlinedIcon />\n          </Avatar>\n          <Typography component=\"h1\" variant=\"h5\">\n            Change Password\n          </Typography>\n          <form className={classes.form} noValidate onSubmit={handleSumbit}>\n            <Grid container spacing={2}>\n              <Grid item xs={12}>\n                <TextField\n                  variant=\"outlined\"\n                  required\n                  fullWidth\n                  name=\"oldPassword\"\n                  label=\"Old Password\"\n                  type={showOldPassword ? \"text\" : \"password\"}\n                  id=\"oldPassword\"\n                  onChange={(event) => setOldPassword(event.target.value)}\n                  InputProps={{\n                    endAdornment: (\n                      <InputAdornment position=\"end\">\n                        <IconButton\n                          aria-label=\"toggle password visibility\"\n                          onClick={handleClickShowOldPassword}\n                          edge=\"end\"\n                        >\n                          {showOldPassword ? <Visibility /> : <VisibilityOff />}\n                        </IconButton>\n                      </InputAdornment>\n                    ),\n                  }}\n                />\n              </Grid>\n              <Grid item xs={12}>\n                <TextField\n                  variant=\"outlined\"\n                  required\n                  fullWidth\n                  name=\"newPassword\"\n                  label=\"New Password\"\n                  type={showNewPassword ? \"text\" : \"password\"}\n                  id=\"newPassword\"\n                  onChange={(event) => setNewPassword(event.target.value)}\n                  InputProps={{\n                    endAdornment: (\n                      <InputAdornment position=\"end\">\n                        <IconButton\n                          aria-label=\"toggle repassword visibility\"\n                          onClick={handleClickShowNewPassword}\n                          edge=\"end\"\n                        >\n                          {showNewPassword ? <Visibility /> : <VisibilityOff />}\n                        </IconButton>\n                      </InputAdornment>\n                    ),\n                  }}\n                />\n              </Grid>\n            </Grid>\n            <Button\n              type=\"submit\"\n              fullWidth\n              variant=\"contained\"\n              color=\"primary\"\n              className={classes.submit}\n            >\n              CHANGE PASSWORD\n            </Button>\n            <Grid container justify=\"flex-end\">\n              <Grid item>\n                <Link href=\"forgotpassword\" variant=\"body2\">\n                  Forgot password? Find back\n                </Link>\n              </Grid>\n            </Grid>\n          </form>\n        </div>\n        <Box mt={5}>\n          <Copyright />\n        </Box>\n      </Container>\n      <Fade in={showSuccess}>\n        <Alert variant=\"filled\" severity=\"success\" className={classes.alert}>\n          {successMsg || \"Success.\"}\n        </Alert>\n      </Fade>\n      <Fade in={showFail}>\n        <Alert variant=\"filled\" severity=\"error\" className={classes.alert}>\n          {errorMsg || \"Unknown error.\"}\n        </Alert>\n      </Fade>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport Select from \"react-select\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport Box from \"@material-ui/core/Box\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\nimport Switch from \"@material-ui/core/Switch\";\n\nconst useStyles = makeStyles((theme) => ({\n  multiSelect: {\n    width: \"100%\",\n    paddingBottom: \"10px\",\n  },\n  gridContainer: (props) => {\n    return props.caseIDEnable\n      ? {\n          maxWidth: \"90%\",\n          marginLeft: \"auto\",\n          marginRight: \"auto\",\n          paddingTop: \"5px\",\n          paddingBottom: \"5px\",\n          borderTop: \"1px solid #ccc\",\n          borderLeft: \"1px solid #ccc\",\n          borderRight: \"3px solid #b8b8b8\",\n          borderBottom: \"4px solid #b8b8b8\",\n          borderRadius: \"5px\",\n          marginBottom: \"5px\",\n        }\n      : {};\n  },\n  gridItem: {\n    width: (props) => (props.caseIDEnable ? \"85%\" : \"75%\"),\n  },\n  title: {\n    marginTop: theme.spacing(1),\n    // marginBottom: theme.spacing(1),\n    fontWeight: \"600\",\n    fontSize: \"15px\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  switch: {\n    // marginTop: theme.spacing(2),\n    // marginBottom: theme.spacing(1),\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n  helpText2: {\n    color: \"#FF0000\",\n  },\n}));\n\nconst FilterTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"300px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction FilterCaseId(props) {\n  const classes = useStyles(props);\n  const options = [];\n  for (let i = 0; i < props.allCaseId.length; i++) {\n    options.push({ value: props.allCaseId[i], label: props.allCaseId[i] });\n  }\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        Make a customized case group by selecting donor case IDs.\n      </div>\n    </React.Fragment>\n  );\n\n  const handleSwitch = (event) => {\n    props.setCaseIDEnable(event.target.checked);\n  };\n\n  return (\n    <div>\n      <Grid\n        container\n        direction=\"column\"\n        justify=\"center\"\n        alignItems=\"center\"\n        className={classes.gridContainer}\n      >\n        <Grid item xs={12} className={classes.gridItem}>\n          <Box display=\"flex\">\n            <Box flexGrow={1}>\n              <Typography variant=\"subtitle1\" className={classes.title}>\n                Case ID{\"  \"}\n                <FilterTooltip title={helpText} placement=\"right-start\">\n                  <HelpOutlineIcon className={classes.helpIcon} />\n                </FilterTooltip>\n              </Typography>\n            </Box>\n            <Box>\n              <Switch\n                checked={props.caseIDEnable}\n                onChange={handleSwitch}\n                name=\"CaseIDEnableSwitch\"\n                className={classes.switch}\n                color=\"primary\"\n              />\n            </Box>\n          </Box>\n        </Grid>\n        {props.caseIDEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <Select\n              className={classes.multiSelect}\n              value={props.selectedDonorType}\n              onChange={(value) => props.setSelectedCaseId(value)}\n              options={options}\n              isMulti\n              closeMenuOnSelect={false}\n              isDisabled={!props.caseIDEnable}\n            />\n          </Grid>\n        )}\n      </Grid>\n    </div>\n  );\n}\n\n// subscribe\nconst mapStateToProps = (state) => {\n  return {\n    caseIDEnable: state.explore.caseIDEnable,\n    selectedCaseId: state.explore.selectedCaseId,\n    allCaseId: state.explore.allCaseId,\n  };\n};\n\n// update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setCaseIDEnable: (newCaseIDEnable) =>\n      dispatch({ type: \"SET_CASE_ID_ENABLE\", value: newCaseIDEnable }),\n    setSelectedCaseId: (newType) =>\n      dispatch({ type: \"SET_SELECTED_CASE_ID\", value: newType }),\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterCaseId);\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Slider from \"@material-ui/core/Slider\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Box from \"@material-ui/core/Box\";\nimport Switch from \"@material-ui/core/Switch\";\nimport { connect } from \"react-redux\";\nimport Collapse from \"@material-ui/core/Collapse\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\nimport clsx from \"clsx\";\nimport Button from \"@material-ui/core/Button\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\n\nconst useStyles = makeStyles((theme) => ({\n  slider: {\n    width: \"100%\",\n    // marginTop: \"15px\",\n    // marginBottom: \"5px\",\n  },\n  gridContainer: (props) => {\n    return props.ageEnable\n      ? {\n          maxWidth: \"90%\",\n          marginLeft: \"auto\",\n          marginRight: \"auto\",\n          paddingTop: \"5px\",\n          paddingBottom: \"5px\",\n          borderTop: \"1px solid #ccc\",\n          borderLeft: \"1px solid #ccc\",\n          borderRight: \"3px solid #b8b8b8\",\n          borderBottom: \"4px solid #b8b8b8\",\n          borderRadius: \"5px\",\n          marginBottom: \"5px\",\n        }\n      : {};\n  },\n  gridItem: {\n    width: (props) => (props.ageEnable ? \"85%\" : \"75%\"),\n  },\n  title: {\n    marginTop: theme.spacing(1),\n    // marginBottom: theme.spacing(1),\n    fontWeight: \"600\",\n    fontSize: \"15px\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  switch: {\n    // marginTop: theme.spacing(2),\n    // marginBottom: theme.spacing(1),\n  },\n  expand: {\n    transform: \"rotate(0deg)\",\n    marginLeft: \"auto\",\n    transition: theme.transitions.create(\"transform\", {\n      duration: theme.transitions.duration.shortest,\n    }),\n  },\n  expandOpen: {\n    transform: \"rotate(180deg)\",\n  },\n  expandBox: {\n    marginTop: \"7px\",\n  },\n  expendedTextfield: {\n    width: \"80px\",\n  },\n  expandedButton: {\n    height: \"39px\",\n    width: \"65px\",\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpIcon2: {\n    marginTop: \"-10px\",\n    marginBottom: \"-10px\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n}));\n\nconst FilterTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction FilterAge(props) {\n  const classes = useStyles(props);\n  const [expanded, setExpanded] = useState(false);\n  const [newMin, setNewMin] = useState(props.ageMin);\n  const [newMax, setNewMax] = useState(props.ageMax);\n  const [showError, setShowError] = useState(false);\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        When the switch is off (\n        <Switch color=\"primary\" className={classes.helpIcon2} />) , the search\n        will ignore age.\n        <br />\n        When the switch is on (\n        <Switch checked=\"true\" color=\"primary\" className={classes.helpIcon2} />)\n        , the search will find cases that match the given range.\n        <br />\n        <div\n          style={{\n            display: \"flex\",\n            alignItems: \"center\",\n            flexWrap: \"wrap\",\n          }}\n        >\n          <span>Click the expand button (</span> <ExpandMoreIcon />\n          <span>) to input a specific number.</span>\n        </div>\n      </div>\n    </React.Fragment>\n  );\n\n  useEffect(() => {\n    if (!props.ageEnable) {\n      setExpanded(false);\n    }\n  });\n\n  const handleExpandClick = () => {\n    setExpanded(!expanded);\n  };\n\n  const handleAgeRangeSliderChange = (event, newAgeRange) => {\n    props.setAgeRange(newAgeRange);\n  };\n\n  const handleMinAgeInputChange = (event) => {\n    setNewMin(event.target.value);\n  };\n\n  const handleMaxAgeInputChange = (event) => {\n    setNewMax(event.target.value);\n  };\n\n  const handleSet = () => {\n    const numMin = Number(newMin);\n    const numMax = Number(newMax);\n    if (\n      numMin != null &&\n      numMax != null &&\n      numMin <= numMax &&\n      numMin >= 0 &&\n      numMax <= 95\n    ) {\n      props.setAgeMin(numMin);\n      props.setAgeMax(numMax);\n      setShowError(false);\n    } else {\n      console.log(\"Invalid input!\");\n      setShowError(true);\n    }\n  };\n\n  const handleSwitch = (event) => {\n    props.setAgeEnable(event.target.checked);\n    if (!event.target.checked) {\n      setExpanded(event.target.checked);\n    }\n  };\n\n  return (\n    <div>\n      <Grid\n        container\n        direction=\"column\"\n        justify=\"center\"\n        alignItems=\"center\"\n        className={classes.gridContainer}\n      >\n        <Grid item xs={12} className={classes.gridItem}>\n          <Box display=\"flex\">\n            <Box flexGrow={1}>\n              <Typography variant=\"subtitle1\" className={classes.title}>\n                Age{\"  \"}\n                <FilterTooltip title={helpText} placement=\"right-start\">\n                  <HelpOutlineIcon className={classes.helpIcon} />\n                </FilterTooltip>\n              </Typography>\n            </Box>\n            <Box>\n              <Switch\n                checked={props.ageEnable}\n                onChange={handleSwitch}\n                name=\"ageEnableSwitch\"\n                className={classes.switch}\n                color=\"primary\"\n              />\n            </Box>\n          </Box>\n        </Grid>\n        {props.ageEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <Slider\n              className={classes.slider}\n              value={props.ageRange}\n              onChange={handleAgeRangeSliderChange}\n              disabled={!props.ageEnable}\n              valueLabelDisplay=\"auto\"\n              min={0}\n              max={95}\n              aria-labelledby=\"age-range-slider\"\n            />\n          </Grid>\n        )}\n\n        {props.ageEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <Grid container alignItems=\"center\" justify=\"space-between\">\n              <Grid item>\n                <Typography variant=\"body1\" color=\"textPrimary\">\n                  {props.ageMin}\n                </Typography>\n              </Grid>\n              <Grid item>\n                <IconButton\n                  className={clsx(classes.expand, {\n                    [classes.expandOpen]: expanded,\n                  })}\n                  onClick={handleExpandClick}\n                  disabled={!props.ageEnable}\n                >\n                  <ExpandMoreIcon />\n                </IconButton>\n              </Grid>\n              <Grid item>\n                <Typography variant=\"body1\" color=\"textPrimary\">\n                  {props.ageMax}\n                </Typography>\n              </Grid>\n            </Grid>\n          </Grid>\n        )}\n\n        <Grid item xs={12} className={classes.gridItem}>\n          <Collapse in={expanded} timeout=\"auto\" unmountOnExit>\n            <Box\n              display=\"flex\"\n              justifyContent=\"space-between\"\n              className={classes.expandBox}\n            >\n              <TextField\n                label=\"From\"\n                variant=\"outlined\"\n                className={classes.expendedTextfield}\n                defaultValue={props.ageMin}\n                size=\"small\"\n                onChange={handleMinAgeInputChange}\n                error={showError}\n              />\n              <TextField\n                label=\"To\"\n                variant=\"outlined\"\n                className={classes.expendedTextfield}\n                defaultValue={props.ageMax}\n                size=\"small\"\n                onChange={handleMaxAgeInputChange}\n                error={showError}\n              />\n              <Button\n                variant=\"contained\"\n                color=\"primary\"\n                className={classes.expandedButton}\n                onClick={handleSet}\n              >\n                SET\n              </Button>\n            </Box>\n          </Collapse>\n        </Grid>\n      </Grid>\n    </div>\n  );\n}\n\n// subscribe\nconst mapStateToProps = (state) => {\n  return {\n    ageEnable: state.explore.ageEnable,\n    ageRange: state.explore.ageRange,\n    ageMin: state.explore.ageMin,\n    ageMax: state.explore.ageMax,\n  };\n};\n\n// update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setAgeEnable: (newAgeEnable) =>\n      dispatch({ type: \"SET_AGE_ENABLE\", value: newAgeEnable }),\n    setAgeRange: (newAgeRange) =>\n      dispatch({ type: \"SET_AGE_RANGE\", value: newAgeRange }),\n    setAgeMin: (newAgeMin) =>\n      dispatch({ type: \"SET_AGE_MIN\", value: newAgeMin }),\n    setAgeMax: (newAgeMax) =>\n      dispatch({ type: \"SET_AGE_MAX\", value: newAgeMax }),\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterAge);\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Slider from \"@material-ui/core/Slider\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Box from \"@material-ui/core/Box\";\nimport Switch from \"@material-ui/core/Switch\";\nimport { connect } from \"react-redux\";\nimport Collapse from \"@material-ui/core/Collapse\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\nimport clsx from \"clsx\";\nimport Button from \"@material-ui/core/Button\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\n\nconst useStyles = makeStyles((theme) => ({\n  slider: {\n    width: \"97%\",\n    marginLeft: \"5px\",\n    // marginTop: \"15px\",\n    // marginBottom: \"5px\",\n  },\n  gridContainer: (props) => {\n    return props.ageOnsetEnable\n      ? {\n          maxWidth: \"90%\",\n          marginLeft: \"auto\",\n          marginRight: \"auto\",\n          paddingTop: \"5px\",\n          paddingBottom: \"5px\",\n          borderTop: \"1px solid #ccc\",\n          borderLeft: \"1px solid #ccc\",\n          borderRight: \"3px solid #b8b8b8\",\n          borderBottom: \"4px solid #b8b8b8\",\n          borderRadius: \"5px\",\n          marginBottom: \"5px\",\n        }\n      : {};\n  },\n  gridItem: {\n    width: (props) => (props.ageOnsetEnable ? \"85%\" : \"75%\"),\n  },\n  title: {\n    marginTop: theme.spacing(1),\n    // marginBottom: theme.spacing(1),\n    fontWeight: \"600\",\n    fontSize: \"15px\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  switch: {\n    // marginTop: theme.spacing(2),\n    // marginBottom: theme.spacing(1),\n  },\n  expand: {\n    transform: \"rotate(0deg)\",\n    marginLeft: \"auto\",\n    transition: theme.transitions.create(\"transform\", {\n      duration: theme.transitions.duration.shortest,\n    }),\n  },\n  expandOpen: {\n    transform: \"rotate(180deg)\",\n  },\n  expandBox: {\n    marginTop: \"7px\",\n  },\n  expendedTextfield: {\n    width: \"80px\",\n  },\n  expandedButton: {\n    height: \"39px\",\n    width: \"65px\",\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpIcon2: {\n    marginTop: \"-10px\",\n    marginBottom: \"-10px\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n  activateGridContainer: {\n    maxWidth: \"90%\",\n    marginLeft: \"auto\",\n    marginRight: \"auto\",\n    paddingTop: \"5px\",\n    paddingBottom: \"5px\",\n    borderTop: \"1px solid #ccc\",\n    borderLeft: \"1px solid #ccc\",\n    borderRight: \"3px solid #b8b8b8\",\n    borderBottom: \"4px solid #b8b8b8\",\n    borderRadius: \"5px\",\n    marginBottom: \"5px\",\n  },\n  activateGridItem: {\n    width: \"85%\",\n  },\n}));\n\nconst FilterTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nconst AntSwitch = withStyles((theme) => ({\n  root: {\n    width: 30,\n    height: 16,\n    padding: 0,\n    display: \"flex\",\n  },\n  switchBase: {\n    padding: 3,\n    color: theme.palette.grey[500],\n    \"&$checked\": {\n      transform: \"translateX(12px)\",\n      color: theme.palette.common.white,\n      \"& + $track\": {\n        opacity: 1,\n        backgroundColor: theme.palette.primary.main,\n        borderColor: theme.palette.primary.main,\n      },\n    },\n  },\n  thumb: {\n    width: 12,\n    height: 12,\n    boxShadow: \"none\",\n  },\n  track: {\n    border: `1px solid ${theme.palette.grey[500]}`,\n    borderRadius: 16 / 2,\n    opacity: 1,\n    backgroundColor: theme.palette.common.white,\n  },\n  checked: {},\n}))(Switch);\n\nfunction FilterAge(props) {\n  const classes = useStyles(props);\n  const [expanded, setExpanded] = useState(false);\n  const [newMin, setNewMin] = useState(props.ageOnsetMin);\n  const [newMax, setNewMax] = useState(props.ageOnsetMax);\n  const [showError, setShowError] = useState(false);\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        When the switch is off (\n        <Switch color=\"primary\" className={classes.helpIcon2} />) , the search\n        will ignore age onset.\n        <br />\n        When the switch is on (\n        <Switch checked=\"true\" color=\"primary\" className={classes.helpIcon2} />)\n        , the search will find cases that match the given range.\n        <br />\n        <div\n          style={{\n            display: \"flex\",\n            alignItems: \"center\",\n            flexWrap: \"wrap\",\n          }}\n        >\n          <span>Click the expand button (</span> <ExpandMoreIcon />\n          <span>) to input a specific number.</span>\n        </div>\n      </div>\n    </React.Fragment>\n  );\n\n  useEffect(() => {\n    if (!props.ageOnsetEnable) {\n      setExpanded(false);\n    }\n  });\n\n  const handleExpandClick = () => {\n    setExpanded(!expanded);\n  };\n\n  const handleAgeOnsetRangeSliderChange = (event, newAgeOnsetRange) => {\n    props.setAgeOnsetRange(newAgeOnsetRange);\n  };\n\n  const handleMinAgeOnsetInputChange = (event) => {\n    setNewMin(event.target.value);\n  };\n\n  const handleMaxAgeOnsetInputChange = (event) => {\n    setNewMax(event.target.value);\n  };\n\n  const handleSet = () => {\n    const numMin = Number(newMin);\n    const numMax = Number(newMax);\n    if (\n      numMin != null &&\n      numMax != null &&\n      numMin <= numMax &&\n      numMin >= 0 &&\n      numMax <= 95\n    ) {\n      props.setAgeOnsetMin(numMin);\n      props.setAgeOnsetMax(numMax);\n      setShowError(false);\n    } else {\n      console.log(\"Invalid input!\");\n      setShowError(true);\n    }\n  };\n\n  const handleSwitch = (event) => {\n    props.setAgeOnsetEnable(event.target.checked);\n    if (!event.target.checked) {\n      setExpanded(event.target.checked);\n    }\n  };\n\n  return (\n    <div>\n      <Grid\n        container\n        direction=\"column\"\n        justify=\"center\"\n        alignItems=\"center\"\n        className={classes.gridContainer}\n      >\n        <Grid item xs={12} className={classes.gridItem}>\n          <Box display=\"flex\">\n            <Box flexGrow={1}>\n              <Typography variant=\"subtitle1\" className={classes.title}>\n                Age Onset\n                <FilterTooltip title={helpText} placement=\"right-start\">\n                  <HelpOutlineIcon className={classes.helpIcon} />\n                </FilterTooltip>\n              </Typography>\n            </Box>\n            <Box>\n              <Switch\n                checked={props.ageOnsetEnable}\n                onChange={handleSwitch}\n                name=\"ageOnsetEnableSwitch\"\n                className={classes.switch}\n                color=\"primary\"\n              />\n            </Box>\n          </Box>\n        </Grid>\n        {props.ageOnsetEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <Slider\n              className={classes.slider}\n              value={props.ageOnsetRange}\n              onChange={handleAgeOnsetRangeSliderChange}\n              disabled={!props.ageOnsetEnable}\n              valueLabelDisplay=\"auto\"\n              min={0}\n              max={95}\n              aria-labelledby=\"age-onset-range-slider\"\n            />\n          </Grid>\n        )}\n\n        {props.ageOnsetEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <Grid container alignItems=\"center\" justify=\"space-between\">\n              <Grid item>\n                <Typography variant=\"body1\" color=\"textPrimary\">\n                  {props.ageOnsetMin}\n                </Typography>\n              </Grid>\n              <Grid item>\n                <IconButton\n                  className={clsx(classes.expand, {\n                    [classes.expandOpen]: expanded,\n                  })}\n                  onClick={handleExpandClick}\n                  disabled={!props.ageOnsetEnable}\n                >\n                  <ExpandMoreIcon />\n                </IconButton>\n              </Grid>\n              <Grid item>\n                <Typography variant=\"body1\" color=\"textPrimary\">\n                  {props.ageOnsetMax}\n                </Typography>\n              </Grid>\n            </Grid>\n          </Grid>\n        )}\n\n        <Grid item xs={12} className={classes.gridItem}>\n          <Collapse in={expanded} timeout=\"auto\" unmountOnExit>\n            <Box\n              display=\"flex\"\n              justifyContent=\"space-between\"\n              className={classes.expandBox}\n            >\n              <TextField\n                label=\"From\"\n                variant=\"outlined\"\n                className={classes.expendedTextfield}\n                defaultValue={props.ageMin}\n                size=\"small\"\n                onChange={handleMinAgeOnsetInputChange}\n                error={showError}\n              />\n              <TextField\n                label=\"To\"\n                variant=\"outlined\"\n                className={classes.expendedTextfield}\n                defaultValue={props.ageMax}\n                size=\"small\"\n                onChange={handleMaxAgeOnsetInputChange}\n                error={showError}\n              />\n              <Button\n                variant=\"contained\"\n                color=\"primary\"\n                className={classes.expandedButton}\n                onClick={handleSet}\n              >\n                SET\n              </Button>\n            </Box>\n          </Collapse>\n        </Grid>\n      </Grid>\n    </div>\n  );\n}\n\n// subscribe\nconst mapStateToProps = (state) => {\n  return {\n    ageOnsetEnable: state.explore.ageOnsetEnable,\n    ageOnsetRange: state.explore.ageOnsetRange,\n    ageOnsetMin: state.explore.ageOnsetMin,\n    ageOnsetMax: state.explore.ageOnsetMax,\n  };\n};\n\n// update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setAgeOnsetEnable: (newAgeOnsetEnable) =>\n      dispatch({ type: \"SET_AGE_ONSET_ENABLE\", value: newAgeOnsetEnable }),\n    setAgeOnsetRange: (newAgeOnsetRange) =>\n      dispatch({ type: \"SET_AGE_ONSET_RANGE\", value: newAgeOnsetRange }),\n    setAgeOnsetMin: (newAgeOnsetMin) =>\n      dispatch({ type: \"SET_AGE_ONSET_MIN\", value: newAgeOnsetMin }),\n    setAgeOnsetMax: (newAgeOnsetMax) =>\n      dispatch({ type: \"SET_AGE_ONSET_MAX\", value: newAgeOnsetMax }),\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterAge);\n","import React, { setState } from \"react\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport FormGroup from \"@material-ui/core/FormGroup\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Box from \"@material-ui/core/Box\";\nimport Switch from \"@material-ui/core/Switch\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { connect } from \"react-redux\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\n\nconst useStyles = makeStyles((theme) => ({\n  formGroup: {\n    alignItems: \"center\",\n    justifyContent: \"center\",\n  },\n  gridContainer: (props) => {\n    return props.genderEnable\n      ? {\n          maxWidth: \"90%\",\n          marginLeft: \"auto\",\n          marginRight: \"auto\",\n          paddingTop: \"5px\",\n          paddingBottom: \"5px\",\n          borderTop: \"1px solid #ccc\",\n          borderLeft: \"1px solid #ccc\",\n          borderRight: \"3px solid #b8b8b8\",\n          borderBottom: \"4px solid #b8b8b8\",\n          borderRadius: \"5px\",\n          marginBottom: \"5px\",\n        }\n      : {};\n  },\n  gridItem: {\n    width: (props) => (props.genderEnable ? \"85%\" : \"75%\"),\n  },\n  title: {\n    marginTop: theme.spacing(1),\n    // marginBottom: theme.spacing(1),\n    fontWeight: \"600\",\n    fontSize: \"15px\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  switch: {\n    // marginTop: theme.spacing(2),\n    // marginBottom: theme.spacing(1),\n  },\n  boxContainer: {\n    width: \"100%\",\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpIcon2: {\n    marginTop: \"-10px\",\n    marginBottom: \"-10px\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n}));\n\nconst FilterTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction FilterGender(props) {\n  const classes = useStyles(props);\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        When the switch is off (\n        <Switch color=\"primary\" className={classes.helpIcon2} />) , the search\n        will ignore sex.\n        <br />\n        When the switch is on (\n        <Switch checked=\"true\" color=\"primary\" className={classes.helpIcon2} />)\n        , the search will find cases that match the selection.\n        <br />\n      </div>\n    </React.Fragment>\n  );\n\n  return (\n    <div>\n      <Grid\n        container\n        direction=\"column\"\n        justify=\"center\"\n        alignItems=\"center\"\n        className={classes.gridContainer}\n      >\n        <Grid item xs={12} className={classes.gridItem}>\n          <Box display=\"flex\">\n            <Box flexGrow={1}>\n              <Typography variant=\"subtitle1\" className={classes.title}>\n                Sex{\"  \"}\n                <FilterTooltip title={helpText} placement=\"right-start\">\n                  <HelpOutlineIcon className={classes.helpIcon} />\n                </FilterTooltip>\n              </Typography>\n            </Box>\n            <Box>\n              <Switch\n                checked={props.genderEnable}\n                onChange={(e) => props.setGenderEnable(e.target.checked)}\n                name=\"genderEnableSwitch\"\n                className={classes.switch}\n                color=\"primary\"\n              />\n            </Box>\n          </Box>\n        </Grid>\n        {props.genderEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <FormGroup row className={classes.formGroup}>\n              <Box\n                display=\"flex\"\n                justifyContent={\"space-between\"}\n                className={classes.boxContainer}\n              >\n                <Box>\n                  <FormControlLabel\n                    control={\n                      <Checkbox\n                        checked={props.maleChecked}\n                        onChange={(event) =>\n                          props.setMaleChecked(event.target.checked)\n                        }\n                        name=\"maleChecked\"\n                        color=\"primary\"\n                        disabled={!props.genderEnable}\n                      />\n                    }\n                    label=\"Male\"\n                  />\n                </Box>\n                <Box>\n                  <FormControlLabel\n                    control={\n                      <Checkbox\n                        checked={props.femaleChecked}\n                        onChange={(event) =>\n                          props.setFemaleChecked(event.target.checked)\n                        }\n                        name=\"femaleChecked\"\n                        color=\"secondary\"\n                        disabled={!props.genderEnable}\n                      />\n                    }\n                    label=\"Female\"\n                  />\n                </Box>\n              </Box>\n            </FormGroup>\n          </Grid>\n        )}\n      </Grid>\n    </div>\n  );\n}\n\n// subscribe\nconst mapStateToProps = (state) => {\n  return {\n    genderEnable: state.explore.genderEnable,\n    maleChecked: state.explore.maleChecked,\n    femaleChecked: state.explore.femaleChecked,\n  };\n};\n\n// update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setGenderEnable: (newGenderEnable) =>\n      dispatch({ type: \"SET_GENDER_ENABLE\", value: newGenderEnable }),\n    setMaleChecked: (checked) =>\n      dispatch({ type: \"SET_MALE_CHECKED\", value: checked }),\n    setFemaleChecked: (checked) =>\n      dispatch({ type: \"SET_FEMALE_CHECKED\", value: checked }),\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterGender);\n","import React, { setState } from \"react\";\nimport Select from \"react-select\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport Box from \"@material-ui/core/Box\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\nimport Switch from \"@material-ui/core/Switch\";\n\nconst useStyles = makeStyles((theme) => ({\n  multiSelect: {\n    width: \"100%\",\n    paddingBottom: \"10px\",\n  },\n  gridContainer: (props) => {\n    return props.raceEnable\n      ? {\n          maxWidth: \"90%\",\n          marginLeft: \"auto\",\n          marginRight: \"auto\",\n          paddingTop: \"5px\",\n          paddingBottom: \"5px\",\n          borderTop: \"1px solid #ccc\",\n          borderLeft: \"1px solid #ccc\",\n          borderRight: \"3px solid #b8b8b8\",\n          borderBottom: \"4px solid #b8b8b8\",\n          borderRadius: \"5px\",\n          marginBottom: \"5px\",\n        }\n      : {};\n  },\n  gridItem: {\n    width: (props) => (props.raceEnable ? \"85%\" : \"75%\"),\n  },\n  title: {\n    marginTop: theme.spacing(1),\n    // marginBottom: theme.spacing(1),\n    fontWeight: \"600\",\n    fontSize: \"15px\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  switch: {\n    // marginTop: theme.spacing(2),\n    // marginBottom: theme.spacing(1),\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n}));\n\nconst FilterTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"300px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nconst options = [\n  { value: \"African American\", label: \"African American\" },\n  {\n    value: \"American Indian/Alaska Native\",\n    label: \"American Indian/Alaska Native\",\n  },\n  { value: \"Arab/Middle Eastern\", label: \"Arab/Middle Eastern\" },\n  { value: \"Asian\", label: \"Asian\" },\n  { value: \"Caucasian\", label: \"Caucasian\" },\n  {\n    value: \"Hawaiian/Other Pacific Islander\",\n    label: \"Hawaiian/Other Pacific Islander\",\n  },\n  { value: \"Hispanic/Latino\", label: \"Hispanic/Latino\" },\n  { value: \"Multiracial\", label: \"Multiracial\" },\n];\n\nfunction FilterRace(props) {\n  const classes = useStyles(props);\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        Select one or more race/ethnicity to display in search result. When\n        unselected, the filter will ignore race/ethnicity.\n      </div>\n    </React.Fragment>\n  );\n\n  const handleSwitch = (event) => {\n    props.setRaceEnable(event.target.checked);\n  };\n\n  return (\n    <div>\n      <Grid\n        container\n        direction=\"column\"\n        justify=\"center\"\n        alignItems=\"center\"\n        className={classes.gridContainer}\n      >\n        <Grid item xs={12} className={classes.gridItem}>\n          <Box display=\"flex\">\n            <Box flexGrow={1}>\n              <Typography variant=\"subtitle1\" className={classes.title}>\n                Race/Ethnicity{\"  \"}\n                <FilterTooltip title={helpText} placement=\"right-start\">\n                  <HelpOutlineIcon className={classes.helpIcon} />\n                </FilterTooltip>\n              </Typography>\n            </Box>\n            <Box>\n              <Switch\n                checked={props.raceEnable}\n                onChange={handleSwitch}\n                name=\"donorTypeEnableSwitch\"\n                className={classes.switch}\n                color=\"primary\"\n              />\n            </Box>\n          </Box>\n        </Grid>\n        {props.raceEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <Select\n              className={classes.multiSelect}\n              value={props.selectedRace}\n              onChange={(value) => props.setSelectedRace(value)}\n              options={options}\n              isMulti\n              closeMenuOnSelect={false}\n              isDisabled={!props.raceEnable}\n            />\n          </Grid>\n        )}\n      </Grid>\n    </div>\n  );\n}\n\n// subscribe\nconst mapStateToProps = (state) => {\n  return {\n    raceEnable: state.explore.raceEnable,\n    selectedRace: state.explore.selectedRace,\n  };\n};\n\n// update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setRaceEnable: (newRaceEnable) =>\n      dispatch({ type: \"SET_RACE_ENABLE\", value: newRaceEnable }),\n    setSelectedRace: (newRace) =>\n      dispatch({ type: \"SET_SELECTED_RACE\", value: newRace }),\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterRace);\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Slider from \"@material-ui/core/Slider\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Box from \"@material-ui/core/Box\";\nimport Switch from \"@material-ui/core/Switch\";\nimport { connect } from \"react-redux\";\nimport Collapse from \"@material-ui/core/Collapse\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\nimport clsx from \"clsx\";\nimport Button from \"@material-ui/core/Button\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\n\nconst useStyles = makeStyles((theme) => ({\n  slider: {\n    width: \"97%\",\n    marginLeft: \"5px\",\n    // marginTop: \"15px\",\n    // marginBottom: \"5px\",\n  },\n  gridContainer: (props) => {\n    return props.bmiEnable\n      ? {\n          maxWidth: \"90%\",\n          marginLeft: \"auto\",\n          marginRight: \"auto\",\n          paddingTop: \"5px\",\n          paddingBottom: \"5px\",\n          borderTop: \"1px solid #ccc\",\n          borderLeft: \"1px solid #ccc\",\n          borderRight: \"3px solid #b8b8b8\",\n          borderBottom: \"4px solid #b8b8b8\",\n          borderRadius: \"5px\",\n          marginBottom: \"5px\",\n        }\n      : {};\n  },\n  gridItem: {\n    width: (props) => (props.bmiEnable ? \"85%\" : \"75%\"),\n  },\n  title: {\n    marginTop: theme.spacing(1),\n    // marginBottom: theme.spacing(1),\n    fontWeight: \"600\",\n    fontSize: \"15px\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  switch: {\n    // marginTop: theme.spacing(2),\n    // marginBottom: theme.spacing(1),\n  },\n  expand: {\n    transform: \"rotate(0deg)\",\n    marginLeft: \"auto\",\n    transition: theme.transitions.create(\"transform\", {\n      duration: theme.transitions.duration.shortest,\n    }),\n  },\n  expandOpen: {\n    transform: \"rotate(180deg)\",\n  },\n  expandBox: {\n    marginTop: \"7px\",\n  },\n  expendedTextfield: {\n    width: \"80px\",\n  },\n  expandedButton: {\n    height: \"39px\",\n    width: \"65px\",\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpIcon2: {\n    marginTop: \"-10px\",\n    marginBottom: \"-10px\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n}));\n\nconst FilterTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction FilterBMI(props) {\n  const classes = useStyles(props);\n  const [expanded, setExpanded] = useState(false);\n  const [newMin, setNewMin] = useState(props.bmiMin);\n  const [newMax, setNewMax] = useState(props.bmiMax);\n  const [showError, setShowError] = useState(false);\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        When the switch is off (\n        <Switch color=\"primary\" className={classes.helpIcon2} />) , the search\n        will ignore BMI.\n        <br />\n        When the switch is on (\n        <Switch checked=\"true\" color=\"primary\" className={classes.helpIcon2} />)\n        , the search will find cases that match the given range.\n        <br />\n        <div\n          style={{\n            display: \"flex\",\n            alignItems: \"center\",\n            flexWrap: \"wrap\",\n          }}\n        >\n          <span>Click the expand button (</span> <ExpandMoreIcon />\n          <span>) to input a specific number.</span>\n        </div>\n      </div>\n    </React.Fragment>\n  );\n\n  useEffect(() => {\n    if (!props.bmiEnable) {\n      setExpanded(false);\n    }\n  });\n\n  const handleExpandClick = () => {\n    setExpanded(!expanded);\n  };\n\n  const handleBMIRangeSliderChange = (event, newBmiRange) => {\n    props.setBmiRange(newBmiRange);\n  };\n\n  const handleMinBmiInputChange = (event) => {\n    setNewMin(event.target.value);\n  };\n\n  const handleMaxBmiInputChange = (event) => {\n    setNewMax(event.target.value);\n  };\n\n  const handleSet = () => {\n    const numMin = Number(newMin);\n    const numMax = Number(newMax);\n    if (\n      numMin != null &&\n      numMax != null &&\n      numMin <= numMax &&\n      numMin >= 5 &&\n      numMax <= 60\n    ) {\n      props.setBmiMin(numMin);\n      props.setBmiMax(numMax);\n      setShowError(false);\n    } else {\n      console.log(\"Invalid input!\");\n      console.log(numMin, numMax);\n      setShowError(true);\n    }\n  };\n\n  const handleSwitch = (event) => {\n    props.setBmiEnable(event.target.checked);\n    if (!event.target.checked) {\n      setExpanded(event.target.checked);\n    }\n  };\n\n  return (\n    <div>\n      <Grid\n        container\n        direction=\"column\"\n        justify=\"center\"\n        alignItems=\"center\"\n        className={classes.gridContainer}\n      >\n        <Grid item xs={12} className={classes.gridItem}>\n          <Box display=\"flex\">\n            <Box flexGrow={1}>\n              <Typography variant=\"subtitle1\" className={classes.title}>\n                BMI{\"  \"}\n                <FilterTooltip title={helpText} placement=\"right-start\">\n                  <HelpOutlineIcon className={classes.helpIcon} />\n                </FilterTooltip>\n              </Typography>\n            </Box>\n            <Box>\n              <Switch\n                checked={props.bmiEnable}\n                onChange={handleSwitch}\n                name=\"bmiEnableSwitch\"\n                className={classes.switch}\n                color=\"primary\"\n              />\n            </Box>\n          </Box>\n        </Grid>\n        {props.bmiEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <Slider\n              className={classes.slider}\n              value={props.bmiRange}\n              onChange={handleBMIRangeSliderChange}\n              valueLabelDisplay=\"auto\"\n              min={5.0}\n              max={60.0}\n              step={0.1}\n              aria-labelledby=\"bmi-range-slider\"\n              disabled={!props.bmiEnable}\n            />\n          </Grid>\n        )}\n\n        {props.bmiEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <Grid container alignItems=\"center\" justify=\"space-between\">\n              <Grid item>\n                <Typography variant=\"body1\" color=\"textPrimary\">\n                  {props.bmiMin}\n                </Typography>\n              </Grid>\n              <Grid item>\n                <IconButton\n                  className={clsx(classes.expand, {\n                    [classes.expandOpen]: expanded,\n                  })}\n                  onClick={handleExpandClick}\n                  disabled={!props.bmiEnable}\n                >\n                  <ExpandMoreIcon />\n                </IconButton>\n              </Grid>\n              <Grid item>\n                <Typography variant=\"body1\" color=\"textPrimary\">\n                  {props.bmiMax}\n                </Typography>\n              </Grid>\n            </Grid>\n          </Grid>\n        )}\n\n        <Grid item xs={12} className={classes.gridItem}>\n          <Collapse in={expanded} timeout=\"auto\" unmountOnExit>\n            <Box\n              display=\"flex\"\n              justifyContent=\"space-between\"\n              className={classes.expandBox}\n            >\n              <TextField\n                label=\"From\"\n                variant=\"outlined\"\n                className={classes.expendedTextfield}\n                defaultValue={props.bmiMin}\n                size=\"small\"\n                onChange={handleMinBmiInputChange}\n                error={showError}\n              />\n              <TextField\n                label=\"To\"\n                variant=\"outlined\"\n                className={classes.expendedTextfield}\n                defaultValue={props.bmiMax}\n                size=\"small\"\n                onChange={handleMaxBmiInputChange}\n                error={showError}\n              />\n              <Button\n                variant=\"contained\"\n                color=\"primary\"\n                className={classes.expandedButton}\n                onClick={handleSet}\n              >\n                SET\n              </Button>\n            </Box>\n          </Collapse>\n        </Grid>\n      </Grid>\n    </div>\n  );\n}\n\n// subscribe\nconst mapStateToProps = (state) => {\n  return {\n    bmiEnable: state.explore.bmiEnable,\n    bmiRange: state.explore.bmiRange,\n    bmiMin: state.explore.bmiMin,\n    bmiMax: state.explore.bmiMax,\n  };\n};\n\n// update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setBmiEnable: (newBmiEnable) =>\n      dispatch({ type: \"SET_BMI_ENABLE\", value: newBmiEnable }),\n    setBmiRange: (newRange) =>\n      dispatch({ type: \"SET_BMI_RANGE\", value: newRange }),\n    setBmiMin: (newBmiMin) =>\n      dispatch({ type: \"SET_BMI_MIN\", value: newBmiMin }),\n    setBmiMax: (newBmiMax) =>\n      dispatch({ type: \"SET_BMI_MAX\", value: newBmiMax }),\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterBMI);\n","import React, { useState } from \"react\";\nimport Select from \"react-select\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport Box from \"@material-ui/core/Box\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\nimport Switch from \"@material-ui/core/Switch\";\n\nconst useStyles = makeStyles((theme) => ({\n  multiSelect: {\n    width: \"100%\",\n    paddingBottom: \"10px\",\n  },\n  gridContainer: (props) => {\n    return props.donorTypeEnable\n      ? {\n          maxWidth: \"90%\",\n          marginLeft: \"auto\",\n          marginRight: \"auto\",\n          paddingTop: \"5px\",\n          paddingBottom: \"5px\",\n          borderTop: \"1px solid #ccc\",\n          borderLeft: \"1px solid #ccc\",\n          borderRight: \"3px solid #b8b8b8\",\n          borderBottom: \"4px solid #b8b8b8\",\n          borderRadius: \"5px\",\n          marginBottom: \"5px\",\n        }\n      : {};\n  },\n  gridItem: {\n    width: (props) => (props.donorTypeEnable ? \"85%\" : \"75%\"),\n  },\n  title: {\n    marginTop: theme.spacing(1),\n    // marginBottom: theme.spacing(1),\n    fontWeight: \"600\",\n    fontSize: \"15px\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  switch: {\n    // marginTop: theme.spacing(2),\n    // marginBottom: theme.spacing(1),\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n}));\n\nconst FilterTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"300px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nconst options = [\n  { value: \"No Diabetes\", label: \"No Diabetes\" },\n  { value: \"Type 1 Diabetes\", label: \"Type 1 Diabetes\" },\n  { value: \"Autoantibody Positive\", label: \"Autoantibody Positive\" },\n  { value: \"Type 2 Diabetes\", label: \"Type 2 Diabetes\" },\n  { value: \"Other - No Diabetes\", label: \"Other - No Diabetes\" },\n  { value: \"Other - Diabetes\", label: \"Other - Diabetes\" },\n  {\n    value: \"Type 1 Diabetes Joslin Medalist\",\n    label: \"Type 1 Diabetes Joslin Medalist\",\n  },\n  {\n    value: \"Transplant\",\n    label: \"Transplant\",\n  },\n  {\n    value: \"Cystic Fibrosis\",\n    label: \"Cystic Fibrosis\",\n  },\n  {\n    value: \"Monogenic Diabetes\",\n    label: \"Monogenic Diabetes\",\n  },\n  {\n    value: \"Gestational Diabetes\",\n    label: \"Gestational Diabetes\",\n  },\n  { value: \"Pregnancy\", label: \"Pregnancy\" },\n  {\n    value: \"Gastric Bypass\",\n    label: \"Gastric Bypass\",\n  },\n  { value: \"Ketosis-Prone Diabetes\", label: \"Ketosis-Prone Diabetes\" },\n  { value: \"Pending\", label: \"Pending\" },\n];\n\nfunction FilterDonorType(props) {\n  const classes = useStyles(props);\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        Select one or more donor types to display in search result. When\n        unselected, the filter will ignore donor type.\n      </div>\n    </React.Fragment>\n  );\n\n  const handleSwitch = (event) => {\n    props.setDonorTypeEnable(event.target.checked);\n  };\n\n  return (\n    <div>\n      <Grid\n        container\n        direction=\"column\"\n        justify=\"center\"\n        alignItems=\"center\"\n        className={classes.gridContainer}\n      >\n        <Grid item xs={12} className={classes.gridItem}>\n          <Box display=\"flex\">\n            <Box flexGrow={1}>\n              <Typography variant=\"subtitle1\" className={classes.title}>\n                Donor Type{\"  \"}\n                <FilterTooltip title={helpText} placement=\"right-start\">\n                  <HelpOutlineIcon className={classes.helpIcon} />\n                </FilterTooltip>\n              </Typography>\n            </Box>\n            <Box>\n              <Switch\n                checked={props.donorTypeEnable}\n                onChange={handleSwitch}\n                name=\"donorTypeEnableSwitch\"\n                className={classes.switch}\n                color=\"primary\"\n              />\n            </Box>\n          </Box>\n        </Grid>\n        {props.donorTypeEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <Select\n              className={classes.multiSelect}\n              value={props.selectedDonorType}\n              onChange={(value) => props.setSelectedDonorType(value)}\n              options={options}\n              isMulti\n              closeMenuOnSelect={false}\n              isDisabled={!props.donorTypeEnable}\n            />\n          </Grid>\n        )}\n      </Grid>\n    </div>\n  );\n}\n\n// subscribe\nconst mapStateToProps = (state) => {\n  return {\n    donorTypeEnable: state.explore.donorTypeEnable,\n    selectedDonorType: state.explore.selectedDonorType,\n  };\n};\n\n// update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setDonorTypeEnable: (newDonorTypeEnable) =>\n      dispatch({ type: \"SET_DONOR_TYPE_ENABLE\", value: newDonorTypeEnable }),\n    setSelectedDonorType: (newType) =>\n      dispatch({ type: \"SET_SELECTED_TYPE\", value: newType }),\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterDonorType);\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Slider from \"@material-ui/core/Slider\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Box from \"@material-ui/core/Box\";\nimport Switch from \"@material-ui/core/Switch\";\nimport Collapse from \"@material-ui/core/Collapse\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\nimport clsx from \"clsx\";\nimport Button from \"@material-ui/core/Button\";\nimport { connect } from \"react-redux\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\n\nconst useStyles = makeStyles((theme) => ({\n  slider: {\n    width: \"97%\",\n    marginLeft: \"5px\",\n    // marginTop: \"15px\",\n    // marginBottom: \"5px\",\n  },\n  gridContainer: (props) => {\n    return props.DDEnable\n      ? {\n          maxWidth: \"90%\",\n          marginLeft: \"auto\",\n          marginRight: \"auto\",\n          paddingTop: \"5px\",\n          paddingBottom: \"5px\",\n          borderTop: \"1px solid #ccc\",\n          borderLeft: \"1px solid #ccc\",\n          borderRight: \"3px solid #b8b8b8\",\n          borderBottom: \"4px solid #b8b8b8\",\n          borderRadius: \"5px\",\n          marginBottom: \"5px\",\n        }\n      : {};\n  },\n  gridItem: {\n    width: (props) => (props.DDEnable ? \"85%\" : \"75%\"),\n  },\n  title: {\n    marginTop: theme.spacing(1),\n    // marginBottom: theme.spacing(1),\n    fontWeight: \"600\",\n    fontSize: \"15px\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  switch: {\n    // marginTop: theme.spacing(2),\n    // marginBottom: theme.spacing(1),\n  },\n  expand: {\n    transform: \"rotate(0deg)\",\n    marginLeft: \"auto\",\n    transition: theme.transitions.create(\"transform\", {\n      duration: theme.transitions.duration.shortest,\n    }),\n  },\n  expandOpen: {\n    transform: \"rotate(180deg)\",\n  },\n  expandBox: {\n    marginTop: \"7px\",\n  },\n  expendedTextfield: {\n    width: \"80px\",\n  },\n  expandedButton: {\n    height: \"39px\",\n    width: \"65px\",\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpIcon2: {\n    marginTop: \"-10px\",\n    marginBottom: \"-10px\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n  helpText2: {\n    color: \"#FF0000\",\n  },\n}));\n\nconst FilterTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"550px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction FilterDiabetesDuration(props) {\n  const classes = useStyles(props);\n  const [expanded, setExpanded] = useState(false);\n  const [newMin, setNewMin] = useState(props.DDMin);\n  const [newMax, setNewMax] = useState(props.DDMax);\n  const [showError, setShowError] = useState(false);\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        When the switch is off (\n        <Switch color=\"primary\" className={classes.helpIcon2} />) , the search\n        will ignore \"Diabetes Duration\".\n        <br />\n        When the switch is on (\n        <Switch checked=\"true\" color=\"primary\" className={classes.helpIcon2} />)\n        , the search will find cases that match the given range.\n        <br />\n        <div\n          style={{\n            display: \"flex\",\n            alignItems: \"center\",\n            flexWrap: \"wrap\",\n          }}\n        >\n          <span>Click the expand button (</span> <ExpandMoreIcon />\n          <span>) to input a specific number. </span>\n        </div>\n        <div className={classes.helpText2}>Notice</div>\n        If the Donor Type filter IS NOT specified, all diabetes cases are shown.\n        <br />\n        If the Donor Type filter IS specified, only cases with the selected\n        diabetes type are displayed.\n      </div>\n    </React.Fragment>\n  );\n\n  useEffect(() => {\n    if (!props.DDEnable) {\n      setExpanded(false);\n    }\n  });\n\n  const handleExpandClick = () => {\n    setExpanded(!expanded);\n  };\n\n  const handleDDRangeSliderChange = (event, newDDRange) => {\n    props.setDDRange(newDDRange);\n  };\n\n  const handleMinDDInputChange = (event) => {\n    setNewMin(event.target.value);\n  };\n\n  const handleMaxDDInputChange = (event) => {\n    setNewMax(event.target.value);\n  };\n\n  const handleSet = () => {\n    const numMin = Number(newMin);\n    const numMax = Number(newMax);\n    if (\n      numMin != null &&\n      numMax != null &&\n      numMin <= numMax &&\n      numMin >= 0 &&\n      numMax <= 85\n    ) {\n      props.setDDMin(numMin);\n      props.setDDMax(numMax);\n      setShowError(false);\n    } else {\n      console.log(\"Invalid input!\");\n      setShowError(true);\n    }\n  };\n\n  const handleSwitch = (event) => {\n    props.setDDEnable(event.target.checked);\n    if (!event.target.checked) {\n      setExpanded(event.target.checked);\n    }\n  };\n\n  return (\n    <div>\n      <Grid\n        container\n        direction=\"column\"\n        justify=\"center\"\n        alignItems=\"center\"\n        className={classes.gridContainer}\n      >\n        <Grid item xs={12} className={classes.gridItem}>\n          <Box display=\"flex\">\n            <Box flexGrow={1}>\n              <Typography variant=\"subtitle1\" className={classes.title}>\n                Diabetes Duration (Yrs){\"  \"}\n                <FilterTooltip title={helpText} placement=\"right-start\">\n                  <HelpOutlineIcon className={classes.helpIcon} />\n                </FilterTooltip>\n              </Typography>\n            </Box>\n            <Box>\n              <Switch\n                checked={props.DDEnable}\n                onChange={handleSwitch}\n                name=\"DDEnableSwitch\"\n                className={classes.switch}\n                color=\"primary\"\n              />\n            </Box>\n          </Box>\n        </Grid>\n        {props.DDEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <Slider\n              className={classes.slider}\n              value={props.DDRange}\n              onChange={handleDDRangeSliderChange}\n              valueLabelDisplay=\"auto\"\n              min={0}\n              max={85}\n              aria-labelledby=\"dd-range-slider\"\n              disabled={!props.DDEnable}\n            />\n          </Grid>\n        )}\n        {props.DDEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <Grid container alignItems=\"center\" justify=\"space-between\">\n              <Grid item>\n                <Typography variant=\"body1\" color=\"textPrimary\">\n                  {props.DDMin}\n                </Typography>\n              </Grid>\n              <Grid item>\n                <IconButton\n                  className={clsx(classes.expand, {\n                    [classes.expandOpen]: expanded,\n                  })}\n                  onClick={handleExpandClick}\n                  disabled={!props.DDEnable}\n                >\n                  <ExpandMoreIcon />\n                </IconButton>\n              </Grid>\n              <Grid item>\n                <Typography variant=\"body1\" color=\"textPrimary\">\n                  {props.DDMax}\n                </Typography>\n              </Grid>\n            </Grid>\n          </Grid>\n        )}\n\n        <Grid item xs={12} className={classes.gridItem}>\n          <Collapse in={expanded} timeout=\"auto\" unmountOnExit>\n            <Box\n              display=\"flex\"\n              justifyContent=\"space-between\"\n              className={classes.expandBox}\n            >\n              <TextField\n                label=\"From\"\n                variant=\"outlined\"\n                className={classes.expendedTextfield}\n                defaultValue={props.DDMin}\n                size=\"small\"\n                onChange={handleMinDDInputChange}\n                error={showError}\n              />\n              <TextField\n                label=\"To\"\n                variant=\"outlined\"\n                className={classes.expendedTextfield}\n                defaultValue={props.DDMax}\n                size=\"small\"\n                onChange={handleMaxDDInputChange}\n                error={showError}\n              />\n              <Button\n                variant=\"contained\"\n                color=\"primary\"\n                className={classes.expandedButton}\n                onClick={handleSet}\n              >\n                SET\n              </Button>\n            </Box>\n          </Collapse>\n        </Grid>\n      </Grid>\n    </div>\n  );\n}\n\n// subscribe\nconst mapStateToProps = (state) => {\n  return {\n    DDEnable: state.explore.DDEnable,\n    DDRange: state.explore.DDRange,\n    DDMin: state.explore.DDMin,\n    DDMax: state.explore.DDMax,\n  };\n};\n\n// update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setDDEnable: (newDDEnable) =>\n      dispatch({ type: \"SET_DD_ENABLE\", value: newDDEnable }),\n    setDDRange: (newDDRange) =>\n      dispatch({ type: \"SET_DD_RANGE\", value: newDDRange }),\n    setDDMin: (newDDMin) => dispatch({ type: \"SET_DD_MIN\", value: newDDMin }),\n    setDDMax: (newDDMax) => dispatch({ type: \"SET_DD_MAX\", value: newDDMax }),\n  };\n};\n\nexport default connect(\n  mapStateToProps,\n  mapDispatchToProps\n)(FilterDiabetesDuration);\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Slider from \"@material-ui/core/Slider\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Box from \"@material-ui/core/Box\";\nimport Switch from \"@material-ui/core/Switch\";\nimport { connect } from \"react-redux\";\nimport Collapse from \"@material-ui/core/Collapse\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\nimport clsx from \"clsx\";\nimport Button from \"@material-ui/core/Button\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\n\nconst useStyles = makeStyles((theme) => ({\n  slider: {\n    width: \"97%\",\n    marginLeft: \"5px\",\n    // marginTop: \"15px\",\n    // marginBottom: \"5px\",\n  },\n  gridContainer: (props) => {\n    return props.hEnable\n      ? {\n          maxWidth: \"90%\",\n          marginLeft: \"auto\",\n          marginRight: \"auto\",\n          paddingTop: \"5px\",\n          paddingBottom: \"5px\",\n          borderTop: \"1px solid #ccc\",\n          borderLeft: \"1px solid #ccc\",\n          borderRight: \"3px solid #b8b8b8\",\n          borderBottom: \"4px solid #b8b8b8\",\n          borderRadius: \"5px\",\n          marginBottom: \"5px\",\n        }\n      : {};\n  },\n  gridItem: {\n    width: (props) => (props.hEnable ? \"85%\" : \"75%\"),\n  },\n  title: {\n    marginTop: theme.spacing(1),\n    // marginBottom: theme.spacing(1),\n    fontWeight: \"600\",\n    fontSize: \"15px\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  switch: {\n    // marginTop: theme.spacing(2),\n    // marginBottom: theme.spacing(1),\n  },\n  expand: {\n    transform: \"rotate(0deg)\",\n    marginLeft: \"auto\",\n    transition: theme.transitions.create(\"transform\", {\n      duration: theme.transitions.duration.shortest,\n    }),\n  },\n  expandOpen: {\n    transform: \"rotate(180deg)\",\n  },\n  expandBox: {\n    marginTop: \"7px\",\n  },\n  expendedTextfield: {\n    width: \"80px\",\n  },\n  expandedButton: {\n    height: \"39px\",\n    width: \"65px\",\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpIcon2: {\n    marginTop: \"-10px\",\n    marginBottom: \"-10px\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n}));\n\nconst FilterTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction FilterHbA1c(props) {\n  const classes = useStyles(props);\n\n  const [expanded, setExpanded] = useState(false);\n  const [newMin, setNewMin] = useState(props.hMin);\n  const [newMax, setNewMax] = useState(props.hMax);\n  const [showError, setShowError] = useState(false);\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        When the switch is off (\n        <Switch color=\"primary\" className={classes.helpIcon2} />) , the\n        searching will ignore HbA1c.\n        <br />\n        When the switch is on (\n        <Switch checked=\"true\" color=\"primary\" className={classes.helpIcon2} />)\n        , the search will find cases that match the given range.\n        <br />\n        <div\n          style={{\n            display: \"flex\",\n            alignItems: \"center\",\n            flexWrap: \"wrap\",\n          }}\n        >\n          <span>Click the expand button (</span> <ExpandMoreIcon />\n          <span>) to input a specific number.</span>\n        </div>\n      </div>\n    </React.Fragment>\n  );\n\n  useEffect(() => {\n    if (!props.hEnable) {\n      setExpanded(false);\n    }\n  });\n\n  const handleExpandClick = () => {\n    setExpanded(!expanded);\n  };\n\n  const handleAgeRangeSliderChange = (event, newHRange) => {\n    props.setHRange(newHRange);\n  };\n\n  const handleMinHInputChange = (event) => {\n    setNewMin(event.target.value);\n  };\n\n  const handleMaxHInputChange = (event) => {\n    setNewMax(event.target.value);\n  };\n\n  const handleSet = () => {\n    const numMin = Number(newMin);\n    const numMax = Number(newMax);\n    if (\n      numMin != null &&\n      numMax != null &&\n      numMin <= numMax &&\n      numMin >= 2 &&\n      numMax <= 20\n    ) {\n      props.setHMin(numMin);\n      props.setHMax(numMax);\n      setShowError(false);\n    } else {\n      console.log(\"Invalid input!\");\n      setShowError(true);\n    }\n  };\n\n  const handleSwitch = (event) => {\n    props.setHEnable(event.target.checked);\n    if (!event.target.checked) {\n      setExpanded(event.target.checked);\n    }\n  };\n\n  return (\n    <div>\n      <Grid\n        container\n        direction=\"column\"\n        justify=\"center\"\n        alignItems=\"center\"\n        className={classes.gridContainer}\n      >\n        <Grid item xs={12} className={classes.gridItem}>\n          <Box display=\"flex\">\n            <Box flexGrow={1}>\n              <Typography variant=\"subtitle1\" className={classes.title}>\n                HbA1c{\"  \"}\n                <FilterTooltip title={helpText} placement=\"right-start\">\n                  <HelpOutlineIcon className={classes.helpIcon} />\n                </FilterTooltip>\n              </Typography>\n            </Box>\n            <Box>\n              <Switch\n                checked={props.hEnable}\n                onChange={handleSwitch}\n                name=\"bmiEnableSwitch\"\n                className={classes.switch}\n                color=\"primary\"\n              />\n            </Box>\n          </Box>\n        </Grid>\n        {props.hEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <Slider\n              className={classes.slider}\n              value={props.hRange}\n              onChange={handleAgeRangeSliderChange}\n              disabled={!props.hEnable}\n              valueLabelDisplay=\"auto\"\n              min={2.0}\n              max={20.0}\n              step={0.1}\n              aria-labelledby=\"h-range-slider\"\n            />\n          </Grid>\n        )}\n\n        {props.hEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <Grid container alignItems=\"center\" justify=\"space-between\">\n              <Grid item>\n                <Typography variant=\"body1\" color=\"textPrimary\">\n                  {props.hMin}\n                </Typography>\n              </Grid>\n              <Grid item>\n                <IconButton\n                  className={clsx(classes.expand, {\n                    [classes.expandOpen]: expanded,\n                  })}\n                  onClick={handleExpandClick}\n                  disabled={!props.hEnable}\n                >\n                  <ExpandMoreIcon />\n                </IconButton>\n              </Grid>\n              <Grid item>\n                <Typography variant=\"body1\" color=\"textPrimary\">\n                  {props.hMax}\n                </Typography>\n              </Grid>\n            </Grid>\n          </Grid>\n        )}\n\n        <Grid item xs={12} className={classes.gridItem}>\n          <Collapse in={expanded} timeout=\"auto\" unmountOnExit>\n            <Box\n              display=\"flex\"\n              justifyContent=\"space-between\"\n              className={classes.expandBox}\n            >\n              <TextField\n                label=\"From\"\n                variant=\"outlined\"\n                className={classes.expendedTextfield}\n                defaultValue={props.hMin}\n                size=\"small\"\n                onChange={handleMinHInputChange}\n                error={showError}\n              />\n              <TextField\n                label=\"To\"\n                variant=\"outlined\"\n                className={classes.expendedTextfield}\n                defaultValue={props.hMax}\n                size=\"small\"\n                onChange={handleMaxHInputChange}\n                error={showError}\n              />\n              <Button\n                variant=\"contained\"\n                color=\"primary\"\n                className={classes.expandedButton}\n                onClick={handleSet}\n              >\n                SET\n              </Button>\n            </Box>\n          </Collapse>\n        </Grid>\n      </Grid>\n    </div>\n  );\n}\n\n// subscribe\nconst mapStateToProps = (state) => {\n  return {\n    hEnable: state.explore.hEnable,\n    hRange: state.explore.hRange,\n    hMin: state.explore.hMin,\n    hMax: state.explore.hMax,\n  };\n};\n\n// update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setHEnable: (newHEnable) =>\n      dispatch({ type: \"SET_H_ENABLE\", value: newHEnable }),\n    setHRange: (newHRange) =>\n      dispatch({ type: \"SET_H_RANGE\", value: newHRange }),\n    setHMin: (newHMin) => dispatch({ type: \"SET_H_MIN\", value: newHMin }),\n    setHMax: (newHMax) => dispatch({ type: \"SET_H_MAX\", value: newHMax }),\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterHbA1c);\n","import React, { setState } from \"react\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport FormGroup from \"@material-ui/core/FormGroup\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Box from \"@material-ui/core/Box\";\nimport Switch from \"@material-ui/core/Switch\";\nimport { connect } from \"react-redux\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\n\nconst useStyles = makeStyles((theme) => ({\n  formGroup: {\n    alignItems: \"center\",\n    justifyContent: \"center\",\n  },\n  gridContainer: (props) => {\n    return props.aaEnable\n      ? {\n          maxWidth: \"90%\",\n          marginLeft: \"auto\",\n          marginRight: \"auto\",\n          paddingTop: \"5px\",\n          paddingBottom: \"5px\",\n          borderTop: \"1px solid #ccc\",\n          borderLeft: \"1px solid #ccc\",\n          borderRight: \"3px solid #b8b8b8\",\n          borderBottom: \"4px solid #b8b8b8\",\n          borderRadius: \"5px\",\n          marginBottom: \"5px\",\n        }\n      : {};\n  },\n  gridItem: {\n    width: (props) => (props.aaEnable ? \"85%\" : \"75%\"),\n  },\n  title: {\n    marginTop: theme.spacing(1),\n    // marginBottom: theme.spacing(1),\n    fontWeight: \"600\",\n    fontSize: \"15px\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  switch: {\n    // marginTop: theme.spacing(2),\n    // marginBottom: theme.spacing(1),\n  },\n  boxContainer: {\n    width: \"100%\",\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpIcon2: {\n    marginTop: \"-10px\",\n    marginBottom: \"-10px\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n  helpText2: {\n    color: \"#FF0000\",\n  },\n}));\n\nconst FilterTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction FilterAutoAntiboy(props) {\n  const classes = useStyles(props);\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        When the switch is off (\n        <Switch color=\"primary\" className={classes.helpIcon2} />) , the search\n        will ignore autoantibody status.\n        <br />\n        When the switch is on (\n        <Switch checked=\"true\" color=\"primary\" className={classes.helpIcon2} />)\n        , the search will find cases that match the selection.\n        <br />\n        <div className={classes.helpText2}>Notice</div>\n        The search will IGNORE unchecked Aab options rather than excluding them.\n      </div>\n    </React.Fragment>\n  );\n\n  return (\n    <div>\n      <Grid\n        container\n        direction=\"column\"\n        justify=\"center\"\n        alignItems=\"center\"\n        className={classes.gridContainer}\n      >\n        <Grid item xs={12} className={classes.gridItem}>\n          <Box display=\"flex\">\n            <Box flexGrow={1}>\n              <Typography variant=\"subtitle1\" className={classes.title}>\n                Autoantibody{\"  \"}\n                <FilterTooltip title={helpText} placement=\"right-start\">\n                  <HelpOutlineIcon className={classes.helpIcon} />\n                </FilterTooltip>\n              </Typography>\n            </Box>\n            <Box>\n              <Switch\n                checked={props.aaEnable}\n                onChange={(e) => props.setAAEnable(e.target.checked)}\n                name=\"autoAntibodyEnableSwitch\"\n                className={classes.title}\n                color=\"primary\"\n              />\n            </Box>\n          </Box>\n        </Grid>\n        {props.aaEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <FormGroup row className={classes.formGroup}>\n              <Box\n                display=\"flex\"\n                flexDirection=\"column\"\n                className={classes.boxContainer}\n              >\n                <Box>\n                  <FormControlLabel\n                    control={\n                      <Checkbox\n                        checked={props.gadaP}\n                        onChange={(event) =>\n                          props.setGadaP(event.target.checked)\n                        }\n                        name=\"gadaP\"\n                        color=\"primary\"\n                        disabled={!props.aaEnable}\n                      />\n                    }\n                    label=\"GADA +\"\n                  />\n                </Box>\n                <Box>\n                  <FormControlLabel\n                    control={\n                      <Checkbox\n                        checked={props.ia2aP}\n                        onChange={(event) =>\n                          props.setIa2aP(event.target.checked)\n                        }\n                        name=\"ia2aP\"\n                        color=\"primary\"\n                        disabled={!props.aaEnable}\n                      />\n                    }\n                    label=\"IA2A +\"\n                  />\n                </Box>\n                <Box>\n                  <FormControlLabel\n                    control={\n                      <Checkbox\n                        checked={props.miaaP}\n                        onChange={(event) =>\n                          props.setMiaaP(event.target.checked)\n                        }\n                        name=\"miaaP\"\n                        color=\"primary\"\n                        disabled={!props.aaEnable}\n                      />\n                    }\n                    label=\"mIAA +\"\n                  />\n                </Box>\n                <Box>\n                  <FormControlLabel\n                    control={\n                      <Checkbox\n                        checked={props.znt8aP}\n                        onChange={(event) =>\n                          props.setZnt8aP(event.target.checked)\n                        }\n                        name=\"znt8aP\"\n                        color=\"primary\"\n                        disabled={!props.aaEnable}\n                      />\n                    }\n                    label=\"ZnT8A +\"\n                  />\n                </Box>\n              </Box>\n            </FormGroup>\n          </Grid>\n        )}\n      </Grid>\n    </div>\n  );\n}\n\n// subscribe\nconst mapStateToProps = (state) => {\n  return {\n    aaEnable: state.explore.aaEnable,\n    gadaP: state.explore.gadaP,\n    gadaN: state.explore.gadaN,\n    ia2aP: state.explore.ia2aP,\n    ia2aN: state.explore.ia2aN,\n    miaaP: state.explore.miaaP,\n    miaaN: state.explore.miaaN,\n    znt8aP: state.explore.znt8aP,\n    znt8aN: state.explore.znt8aN,\n  };\n};\n\n// update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setAAEnable: (newEnable) =>\n      dispatch({ type: \"SET_AA_ENABLE\", value: newEnable }),\n    setGadaP: (checked) => dispatch({ type: \"SET_GADAP\", value: checked }),\n    setGadaN: (checked) => dispatch({ type: \"SET_GADAN\", value: checked }),\n    setIa2aP: (checked) => dispatch({ type: \"SET_IA2AP\", value: checked }),\n    setIa2aN: (checked) => dispatch({ type: \"SET_IA2AN\", value: checked }),\n    setMiaaP: (checked) => dispatch({ type: \"SET_MIAAP\", value: checked }),\n    setMiaaN: (checked) => dispatch({ type: \"SET_MIAAN\", value: checked }),\n    setZnt8aP: (checked) => dispatch({ type: \"SET_ZNT8AP\", value: checked }),\n    setZnt8aN: (checked) => dispatch({ type: \"SET_ZNT8AN\", value: checked }),\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterAutoAntiboy);\n","import React, { setState } from \"react\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport FormGroup from \"@material-ui/core/FormGroup\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Box from \"@material-ui/core/Box\";\nimport Switch from \"@material-ui/core/Switch\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { connect } from \"react-redux\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\n\nconst useStyles = makeStyles((theme) => ({\n  formGroup: {\n    alignItems: \"center\",\n    justifyContent: \"center\",\n  },\n  gridContainer: (props) => {\n    return props.aaPositiveEnable\n      ? {\n          maxWidth: \"90%\",\n          marginLeft: \"auto\",\n          marginRight: \"auto\",\n          paddingTop: \"5px\",\n          paddingBottom: \"5px\",\n          borderTop: \"1px solid #ccc\",\n          borderLeft: \"1px solid #ccc\",\n          borderRight: \"3px solid #b8b8b8\",\n          borderBottom: \"4px solid #b8b8b8\",\n          borderRadius: \"5px\",\n          marginBottom: \"5px\",\n        }\n      : {};\n  },\n  gridItem: {\n    width: (props) => (props.aaPositiveEnable ? \"85%\" : \"75%\"),\n  },\n  title: {\n    marginTop: theme.spacing(1),\n    // marginBottom: theme.spacing(1),\n    fontWeight: \"600\",\n    fontSize: \"15px\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  switch: {\n    // marginTop: theme.spacing(2),\n    // marginBottom: theme.spacing(1),\n  },\n  boxContainer: {\n    width: \"100%\",\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpIcon2: {\n    marginTop: \"-10px\",\n    marginBottom: \"-10px\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n  helpText2: {\n    color: \"#FF0000\",\n  },\n}));\n\nconst FilterTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction FilterAutoAntibodyPositiveNumber(props) {\n  const classes = useStyles(props);\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        When the switch is off (\n        <Switch color=\"primary\" className={classes.helpIcon2} />) , the search\n        will ignore autoantibody positive status.\n        <br />\n        When the switch is on (\n        <Switch checked=\"true\" color=\"primary\" className={classes.helpIcon2} />)\n        , the search will find cases that match the selection.\n        <br />\n        <div className={classes.helpText2}>Notice</div>\n        Each option represents the total count of positive autoantibodies. Ex.\n        If 2 and 3 are checked, all cases in the search result will have either\n        2 or 3 positive autoantibodies.\n      </div>\n    </React.Fragment>\n  );\n\n  return (\n    <div>\n      <Grid\n        container\n        direction=\"column\"\n        justify=\"center\"\n        alignItems=\"center\"\n        className={classes.gridContainer}\n      >\n        <Grid item xs={12} className={classes.gridItem}>\n          <Box display=\"flex\">\n            <Box flexGrow={1}>\n              <Typography variant=\"subtitle1\" className={classes.title}>\n                Autoantibody Positive{\"  \"}\n                <FilterTooltip title={helpText} placement=\"right-start\">\n                  <HelpOutlineIcon className={classes.helpIcon} />\n                </FilterTooltip>\n              </Typography>\n            </Box>\n            <Box>\n              <Switch\n                checked={props.aaPositiveEnable}\n                onChange={(e) => props.setAAPositiveEnable(e.target.checked)}\n                name=\"aaPositiveEnableSwitch\"\n                className={classes.switch}\n                color=\"primary\"\n              />\n            </Box>\n          </Box>\n        </Grid>\n        {props.aaPositiveEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <FormGroup row className={classes.formGroup}>\n              <Box\n                display=\"flex\"\n                flexDirection=\"column\"\n                className={classes.boxContainer}\n              >\n                <Box>\n                  <FormControlLabel\n                    control={\n                      <Checkbox\n                        checked={props.zeroChecked}\n                        onChange={(event) =>\n                          props.setZeroChecked(event.target.checked)\n                        }\n                        name=\"zeroChecked\"\n                        color=\"primary\"\n                        disabled={!props.aaPositiveEnable}\n                      />\n                    }\n                    label=\"0\"\n                  />\n                </Box>\n\n                <Box>\n                  <FormControlLabel\n                    control={\n                      <Checkbox\n                        checked={props.oneChecked}\n                        onChange={(event) =>\n                          props.setOneChecked(event.target.checked)\n                        }\n                        name=\"oneChecked\"\n                        color=\"primary\"\n                        disabled={!props.aaPositiveEnable}\n                      />\n                    }\n                    label=\"1\"\n                  />\n                </Box>\n\n                <Box>\n                  <FormControlLabel\n                    control={\n                      <Checkbox\n                        checked={props.twoChecked}\n                        onChange={(event) =>\n                          props.setTwoChecked(event.target.checked)\n                        }\n                        name=\"twoChecked\"\n                        color=\"primary\"\n                        disabled={!props.aaPositiveEnable}\n                      />\n                    }\n                    label=\"2\"\n                  />\n                </Box>\n\n                <Box>\n                  <FormControlLabel\n                    control={\n                      <Checkbox\n                        checked={props.threeChecked}\n                        onChange={(event) =>\n                          props.setThreeChecked(event.target.checked)\n                        }\n                        name=\"threeChecked\"\n                        color=\"primary\"\n                        disabled={!props.aaPositiveEnable}\n                      />\n                    }\n                    label=\"3\"\n                  />\n                </Box>\n\n                <Box>\n                  <FormControlLabel\n                    control={\n                      <Checkbox\n                        checked={props.fourChecked}\n                        onChange={(event) =>\n                          props.setFourChecked(event.target.checked)\n                        }\n                        name=\"fourChecked\"\n                        color=\"primary\"\n                        disabled={!props.aaPositiveEnable}\n                      />\n                    }\n                    label=\"4\"\n                  />\n                </Box>\n              </Box>\n            </FormGroup>\n          </Grid>\n        )}\n      </Grid>\n    </div>\n  );\n}\n\n// subscribe\nconst mapStateToProps = (state) => {\n  return {\n    aaPositiveEnable: state.explore.aaPositiveEnable,\n    zeroChecked: state.explore.zeroChecked,\n    oneChecked: state.explore.oneChecked,\n    twoChecked: state.explore.twoChecked,\n    threeChecked: state.explore.threeChecked,\n    fourChecked: state.explore.fourChecked,\n  };\n};\n\n// update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setAAPositiveEnable: (newEnable) =>\n      dispatch({ type: \"SET_AA_POSITIVE_ENABLE\", value: newEnable }),\n    setZeroChecked: (checked) =>\n      dispatch({ type: \"SET_ZERO_CHECKED\", value: checked }),\n    setOneChecked: (checked) =>\n      dispatch({ type: \"SET_ONE_CHECKED\", value: checked }),\n    setTwoChecked: (checked) =>\n      dispatch({ type: \"SET_TWO_CHECKED\", value: checked }),\n    setThreeChecked: (checked) =>\n      dispatch({ type: \"SET_THREE_CHECKED\", value: checked }),\n    setFourChecked: (checked) =>\n      dispatch({ type: \"SET_FOUR_CHECKED\", value: checked }),\n  };\n};\n\nexport default connect(\n  mapStateToProps,\n  mapDispatchToProps\n)(FilterAutoAntibodyPositiveNumber);\n","import React, { setState } from \"react\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport FormGroup from \"@material-ui/core/FormGroup\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Box from \"@material-ui/core/Box\";\nimport Switch from \"@material-ui/core/Switch\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { connect } from \"react-redux\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\n\nconst useStyles = makeStyles((theme) => ({\n  formGroup: {\n    alignItems: \"center\",\n    justifyContent: \"center\",\n  },\n  gridContainer: (props) => {\n    return props.insulitisEnable\n      ? {\n          maxWidth: \"90%\",\n          marginLeft: \"auto\",\n          marginRight: \"auto\",\n          paddingTop: \"5px\",\n          paddingBottom: \"5px\",\n          borderTop: \"1px solid #ccc\",\n          borderLeft: \"1px solid #ccc\",\n          borderRight: \"3px solid #b8b8b8\",\n          borderBottom: \"4px solid #b8b8b8\",\n          borderRadius: \"5px\",\n          marginBottom: \"5px\",\n        }\n      : {};\n  },\n  gridItem: {\n    width: (props) => (props.insulitisEnable ? \"85%\" : \"75%\"),\n  },\n  title: {\n    marginTop: theme.spacing(1),\n    // marginBottom: theme.spacing(1),\n    fontWeight: \"600\",\n    fontSize: \"15px\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  switch: {\n    // marginTop: theme.spacing(2),\n    // marginBottom: theme.spacing(1),\n  },\n  boxContainer: {\n    width: \"100%\",\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpIcon2: {\n    marginTop: \"-10px\",\n    marginBottom: \"-10px\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n  helpText2: {\n    color: \"#FF0000\",\n  },\n}));\n\nconst FilterTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction FilterInsulitis(props) {\n  const classes = useStyles(props);\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        When the switch is off (\n        <Switch color=\"primary\" className={classes.helpIcon2} />) , the search\n        will ignore insulitis.\n        <br />\n        When the switch is on (\n        <Switch checked=\"true\" color=\"primary\" className={classes.helpIcon2} />)\n        , the search will find cases that match the selection.\n        <br />\n        <div className={classes.helpText2}>Notice</div>\n        <span className={classes.helpText2}>+</span> symbol indicates that\n        insulitis was identified in pancreas sections during histopathological\n        review.\n        <br />\n        <span className={classes.helpText2}>-</span> symbol indicates that\n        insulitis was NOT identified in pancreas sections during\n        histopathological review.\n      </div>\n    </React.Fragment>\n  );\n\n  return (\n    <div>\n      <Grid\n        container\n        direction=\"column\"\n        justify=\"center\"\n        alignItems=\"center\"\n        className={classes.gridContainer}\n      >\n        <Grid item xs={12} className={classes.gridItem}>\n          <Box display=\"flex\">\n            <Box flexGrow={1}>\n              <Typography variant=\"subtitle1\" className={classes.title}>\n                Insulitis{\"  \"}\n                <FilterTooltip title={helpText} placement=\"top\">\n                  <HelpOutlineIcon className={classes.helpIcon} />\n                </FilterTooltip>\n              </Typography>\n            </Box>\n            <Box>\n              <Switch\n                checked={props.insulitisEnable}\n                onChange={(e) => props.setInsulitisEnable(e.target.checked)}\n                name=\"insulitisEnableSwitch\"\n                className={classes.switch}\n                color=\"primary\"\n              />\n            </Box>\n          </Box>\n        </Grid>\n        {props.insulitisEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <FormGroup row className={classes.formGroup}>\n              <Box\n                display=\"flex\"\n                justifyContent={\"space-between\"}\n                className={classes.boxContainer}\n              >\n                <Box>\n                  <FormControlLabel\n                    control={\n                      <Checkbox\n                        checked={props.insulitisPositiveChecked}\n                        onChange={(event) =>\n                          props.setInsulitisPositiveChecked(\n                            event.target.checked\n                          )\n                        }\n                        name=\"positiveChecked\"\n                        color=\"primary\"\n                        disabled={!props.insulitisEnable}\n                      />\n                    }\n                    label=\"+\"\n                  />\n                </Box>\n                <Box>\n                  <FormControlLabel\n                    control={\n                      <Checkbox\n                        checked={props.insulitisNegativeChecked}\n                        onChange={(event) =>\n                          props.setInsulitisNegativeChecked(\n                            event.target.checked\n                          )\n                        }\n                        name=\"negativeChecked\"\n                        color=\"secondary\"\n                        disabled={!props.insulitisEnable}\n                      />\n                    }\n                    label=\"–\"\n                  />\n                </Box>\n              </Box>\n            </FormGroup>\n          </Grid>\n        )}\n      </Grid>\n    </div>\n  );\n}\n\n// subscribe\nconst mapStateToProps = (state) => {\n  return {\n    insulitisEnable: state.explore.insulitisEnable,\n    insulitisPositiveChecked: state.explore.insulitisPositiveChecked,\n    insulitisNegativeChecked: state.explore.insulitisNegativeChecked,\n  };\n};\n\n// update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setInsulitisEnable: (newEnable) =>\n      dispatch({ type: \"SET_INSULITIS_ENABLE\", value: newEnable }),\n    setInsulitisPositiveChecked: (checked) =>\n      dispatch({ type: \"SET_INSULITIS_POSITIVE_CHECKED\", value: checked }),\n    setInsulitisNegativeChecked: (checked) =>\n      dispatch({ type: \"SET_INSULITIS_NEGATIVE_CHECKED\", value: checked }),\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterInsulitis);\n","import React, { setState } from \"react\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport FormGroup from \"@material-ui/core/FormGroup\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Box from \"@material-ui/core/Box\";\nimport Switch from \"@material-ui/core/Switch\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { connect } from \"react-redux\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\n\nconst useStyles = makeStyles((theme) => ({\n  formGroup: {\n    alignItems: \"center\",\n    justifyContent: \"center\",\n  },\n  gridContainer: (props) => {\n    return props.cPeptideEnable\n      ? {\n          maxWidth: \"90%\",\n          marginLeft: \"auto\",\n          marginRight: \"auto\",\n          paddingTop: \"5px\",\n          paddingBottom: \"5px\",\n          borderTop: \"1px solid #ccc\",\n          borderLeft: \"1px solid #ccc\",\n          borderRight: \"3px solid #b8b8b8\",\n          borderBottom: \"4px solid #b8b8b8\",\n          borderRadius: \"5px\",\n          marginBottom: \"5px\",\n        }\n      : {};\n  },\n  gridItem: {\n    width: (props) => (props.cPeptideEnable ? \"85%\" : \"75%\"),\n  },\n  title: {\n    marginTop: theme.spacing(1),\n    // marginBottom: theme.spacing(1),\n    fontWeight: \"600\",\n    fontSize: \"15px\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  switch: {\n    // marginTop: theme.spacing(2),\n    // marginBottom: theme.spacing(1),\n  },\n  boxContainer: {\n    width: \"100%\",\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpIcon2: {\n    marginTop: \"-10px\",\n    marginBottom: \"-10px\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n  helpText2: {\n    color: \"#FF0000\",\n  },\n}));\n\nconst FilterTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction FilterCPeptide(props) {\n  const classes = useStyles(props);\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        When the switch is off (\n        <Switch color=\"primary\" className={classes.helpIcon2} />) , the search\n        will ignore c-peptide.\n        <br />\n        Switch on (\n        <Switch checked=\"true\" color=\"primary\" className={classes.helpIcon2} />)\n        , the search will find cases that match the selection.\n        <br />\n        <div className={classes.helpText2}>Notice</div>\n        Detectable indicates that a measureable amount of <br />\n        c-peptide was found in the donor’s serum. Undetectable indicates that\n        the c-peptide result was below the limit of detection for the assay.\n      </div>\n    </React.Fragment>\n  );\n\n  return (\n    <div>\n      <Grid\n        container\n        direction=\"column\"\n        justify=\"center\"\n        alignItems=\"center\"\n        className={classes.gridContainer}\n      >\n        <Grid item xs={12} className={classes.gridItem}>\n          <Box display=\"flex\">\n            <Box flexGrow={1}>\n              <Typography variant=\"subtitle1\" className={classes.title}>\n                C-Peptide{\"  \"}\n                <FilterTooltip title={helpText} placement=\"right-start\">\n                  <HelpOutlineIcon className={classes.helpIcon} />\n                </FilterTooltip>\n              </Typography>\n            </Box>\n            <Box>\n              <Switch\n                checked={props.cPeptideEnable}\n                onChange={(e) => props.setCPeptideEnable(e.target.checked)}\n                name=\"CPeptideEnableSwitch\"\n                className={classes.switch}\n                color=\"primary\"\n              />\n            </Box>\n          </Box>\n        </Grid>\n        {props.cPeptideEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <FormGroup row className={classes.formGroup}>\n              <Box\n                display=\"flex\"\n                flexDirection=\"column\"\n                className={classes.boxContainer}\n              >\n                <Box>\n                  <FormControlLabel\n                    control={\n                      <Checkbox\n                        checked={props.cPeptidePositive}\n                        onChange={(event) =>\n                          props.setCPeptidePositiveChecked(event.target.checked)\n                        }\n                        name=\"cPeptidePositive\"\n                        color=\"primary\"\n                        disabled={!props.cPeptideEnable}\n                      />\n                    }\n                    label=\"+ Detectable\"\n                  />\n                </Box>\n                <Box>\n                  <FormControlLabel\n                    control={\n                      <Checkbox\n                        checked={props.cPeptideNegative}\n                        onChange={(event) =>\n                          props.setCPeptideNegativeChecked(event.target.checked)\n                        }\n                        name=\"cPeptideNegative\"\n                        color=\"secondary\"\n                        disabled={!props.cPeptideEnable}\n                      />\n                    }\n                    label=\"– Undetectable\"\n                  />\n                </Box>\n              </Box>\n            </FormGroup>\n          </Grid>\n        )}\n      </Grid>\n    </div>\n  );\n}\n\n// subscribe\nconst mapStateToProps = (state) => {\n  return {\n    cPeptideEnable: state.explore.cPeptideEnable,\n    cPeptidePositive: state.explore.cPeptidePositive,\n    cPeptideNegative: state.explore.cPeptideNegative,\n  };\n};\n\n// update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setCPeptideEnable: (newEnable) =>\n      dispatch({ type: \"SET_CPEPTIDE_ENABLE\", value: newEnable }),\n    setCPeptidePositiveChecked: (checked) =>\n      dispatch({ type: \"SET_CPEPTIDE_POSITIVE\", value: checked }),\n    setCPeptideNegativeChecked: (checked) =>\n      dispatch({ type: \"SET_CPEPTIDE_NEGATIVE\", value: checked }),\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterCPeptide);\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Box from \"@material-ui/core/Box\";\nimport Button from \"@material-ui/core/Button\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { connect } from \"react-redux\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    margin: theme.spacing(2),\n  },\n  title: {\n    paddingTop: theme.spacing(1),\n    paddingLeft: theme.spacing(1),\n    paddingBottom: theme.spacing(1),\n  },\n  Button: {\n    paddingTop: theme.spacing(1),\n    paddingRight: theme.spacing(1),\n    paddingBottom: theme.spacing(1),\n  },\n}));\n\nfunction FilterTitle(props) {\n  const classes = useStyles();\n\n  return (\n    <div>\n      <Box display=\"flex\">\n        <Box className={classes.title} flexGrow={1}>\n          <Typography variant=\"h4\" className={classes.root}>\n            FILTERS\n          </Typography>\n        </Box>\n        <Box className={classes.Button}>\n          <Button\n            variant=\"contained\"\n            color=\"primary\"\n            className={classes.root}\n            onClick={(e) => props.setReset()}\n          >\n            RESET\n          </Button>\n        </Box>\n      </Box>\n    </div>\n  );\n}\n\n// update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setReset: () => dispatch({ type: \"SET_RESET\", value: null }),\n  };\n};\n\nexport default connect(null, mapDispatchToProps)(FilterTitle);\n","import React, { setState } from \"react\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport FormGroup from \"@material-ui/core/FormGroup\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Box from \"@material-ui/core/Box\";\nimport Switch from \"@material-ui/core/Switch\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { connect } from \"react-redux\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\n\nconst useStyles = makeStyles((theme) => ({\n  formGroup: {\n    alignItems: \"center\",\n    justifyContent: \"center\",\n  },\n  gridContainer: (props) => {\n    return props.datasetEnable\n      ? {\n          maxWidth: \"90%\",\n          marginLeft: \"auto\",\n          marginRight: \"auto\",\n          paddingTop: \"5px\",\n          paddingBottom: \"5px\",\n          borderTop: \"1px solid #ccc\",\n          borderLeft: \"1px solid #ccc\",\n          borderRight: \"3px solid #b8b8b8\",\n          borderBottom: \"4px solid #b8b8b8\",\n          borderRadius: \"5px\",\n          marginBottom: \"5px\",\n        }\n      : {};\n  },\n  gridItem: {\n    width: (props) => (props.datasetEnable ? \"85%\" : \"75%\"),\n  },\n  title: {\n    marginTop: theme.spacing(1),\n    // marginBottom: theme.spacing(1),\n    fontWeight: \"600\",\n    fontSize: \"15px\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  switch: {\n    // marginTop: theme.spacing(2),\n    // marginBottom: theme.spacing(1),\n  },\n  boxContainer: {\n    width: \"100%\",\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpIcon2: {\n    marginTop: \"-10px\",\n    marginBottom: \"-10px\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n}));\n\nconst FilterTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction FilterDataset(props) {\n  const classes = useStyles(props);\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        When the switch is off (\n        <Switch color=\"primary\" className={classes.helpIcon2} />) , the search\n        will ignore dataset.\n        <br />\n        When the switch is on (\n        <Switch checked=\"true\" color=\"primary\" className={classes.helpIcon2} />)\n        , the search will find cases that match the selection.\n        <br />\n      </div>\n    </React.Fragment>\n  );\n\n  return (\n    <div>\n      <Grid\n        container\n        direction=\"column\"\n        justify=\"center\"\n        alignItems=\"center\"\n        className={classes.gridContainer}\n      >\n        <Grid item xs={12} className={classes.gridItem}>\n          <Box display=\"flex\">\n            <Box flexGrow={1}>\n              <Typography variant=\"subtitle1\" className={classes.title}>\n                Available Datasets{\"  \"}\n                <FilterTooltip title={helpText} placement=\"right-start\">\n                  <HelpOutlineIcon className={classes.helpIcon} />\n                </FilterTooltip>\n              </Typography>\n            </Box>\n            <Box>\n              <Switch\n                checked={props.datasetEnable}\n                onChange={(e) => props.setDatasetEnable(e.target.checked)}\n                name=\"datasetEnableSwitch\"\n                className={classes.switch}\n                color=\"primary\"\n              />\n            </Box>\n          </Box>\n        </Grid>\n        {props.datasetEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <FormGroup row className={classes.formGroup}>\n              <Box\n                display=\"flex\"\n                //justifyContent={\"space-between\"}\n                flexDirection=\"column\"\n                className={classes.boxContainer}\n              >\n                <Box>\n                  <FormControlLabel\n                    control={\n                      <Checkbox\n                        checked={props.functionalAssayChecked}\n                        onChange={(event) =>\n                          props.setFunctionalAssayChecked(event.target.checked)\n                        }\n                        name=\"functionalAssayChecked\"\n                        color=\"primary\"\n                        disabled={!props.datasetEnable}\n                      />\n                    }\n                    label=\"Functional Assay\"\n                  />\n                </Box>\n                <Box>\n                  <FormControlLabel\n                    control={\n                      <Checkbox\n                        checked={props.electronMicroscopyChecked}\n                        onChange={(event) =>\n                          props.setElectronMicroscopyChecked(\n                            event.target.checked\n                          )\n                        }\n                        name=\"electronMicroscopyChecked\"\n                        color=\"primary\"\n                        disabled={!props.datasetEnable}\n                      />\n                    }\n                    label=\"Electron Microscopy\"\n                  />\n                </Box>\n                <Box>\n                  <FormControlLabel\n                    control={\n                      <Checkbox\n                        checked={props.highResHLAChecked}\n                        onChange={(event) =>\n                          props.setHighResHLAChecked(event.target.checked)\n                        }\n                        name=\"highResHLAChecked\"\n                        color=\"primary\"\n                        disabled={!props.datasetEnable}\n                      />\n                    }\n                    label=\"High Resolution HLA\"\n                  />\n                </Box>\n                <Box>\n                  <FormControlLabel\n                    control={\n                      <Checkbox\n                        checked={props.immunophenotypingChecked}\n                        onChange={(event) =>\n                          props.setImmunophenotypingChecked(\n                            event.target.checked\n                          )\n                        }\n                        name=\"immunophenotypingChecked\"\n                        color=\"primary\"\n                        disabled={!props.datasetEnable}\n                      />\n                    }\n                    label=\"Immunophenotyping\"\n                  />\n                </Box>\n                <Box>\n                  <FormControlLabel\n                    control={\n                      <Checkbox\n                        checked={props.wholeExomeSequencingAvailable}\n                        onChange={(event) =>\n                          props.setWholeExomeSequencingAvailable(\n                            event.target.checked\n                          )\n                        }\n                        name=\"wholeExomeSequencingAvailable\"\n                        color=\"primary\"\n                        disabled={!props.datasetEnable}\n                      />\n                    }\n                    label=\"Whole Exome Sequencing\"\n                  />\n                </Box>\n                <Box>\n                  <FormControlLabel\n                    control={\n                      <Checkbox\n                        checked={props.snpsAvailable}\n                        onChange={(event) =>\n                          props.setSnpsAvailable(event.target.checked)\n                        }\n                        name=\"snpsAvailable\"\n                        color=\"primary\"\n                        disabled={!props.datasetEnable}\n                      />\n                    }\n                    label=\"SNPs\"\n                  />\n                </Box>\n              </Box>\n            </FormGroup>\n          </Grid>\n        )}\n      </Grid>\n    </div>\n  );\n}\n\n// subscribe\nconst mapStateToProps = (state) => {\n  return {\n    datasetEnable: state.explore.datasetEnable,\n    functionalAssayChecked: state.explore.functionalAssayChecked,\n    electronMicroscopyChecked: state.explore.electronMicroscopyChecked,\n    highResHLAChecked: state.explore.highResHLAChecked,\n    immunophenotypingChecked: state.explore.immunophenotypingChecked,\n    wholeExomeSequencingAvailable: state.explore.wholeExomeSequencingAvailable,\n    snpsAvailable: state.explore.snpsAvailable,\n  };\n};\n\n// update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setDatasetEnable: (newDatasetEnable) =>\n      dispatch({ type: \"SET_DATASET_ENABLE\", value: newDatasetEnable }),\n    setFunctionalAssayChecked: (checked) =>\n      dispatch({ type: \"SET_FUNCTIONALASSAY_CHECKED_ENABLE\", value: checked }),\n    setElectronMicroscopyChecked: (checked) =>\n      dispatch({\n        type: \"SET_ELECTRONMICROSCOPY_CHECKED_ENABLE\",\n        value: checked,\n      }),\n    setHighResHLAChecked: (checked) =>\n      dispatch({\n        type: \"SET_HIGHRESHLA_CHECKED_ENABLE\",\n        value: checked,\n      }),\n    setImmunophenotypingChecked: (checked) =>\n      dispatch({\n        type: \"SET_IMMUNOPHENOTYPING_CHECKED_ENABLE\",\n        value: checked,\n      }),\n    setWholeExomeSequencingAvailable: (newWholeExomeSequencingAvailable) =>\n      dispatch({\n        type: \"SET_WHOLE_EXOME_SEQUENCING_AVAILABLE\",\n        value: newWholeExomeSequencingAvailable,\n      }),\n    setSnpsAvailable: (newSnpsAvailable) =>\n      dispatch({ type: \"SET_SNPS_AVAILABLE\", value: newSnpsAvailable }),\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterDataset);\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Slider from \"@material-ui/core/Slider\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Box from \"@material-ui/core/Box\";\nimport Switch from \"@material-ui/core/Switch\";\nimport { connect } from \"react-redux\";\nimport Collapse from \"@material-ui/core/Collapse\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\nimport clsx from \"clsx\";\nimport Button from \"@material-ui/core/Button\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\n\nconst useStyles = makeStyles((theme) => ({\n  slider: {\n    width: \"95%\",\n    marginLeft: \"5px\",\n    // marginTop: \"15px\",\n    // marginBottom: \"5px\",\n  },\n  gridContainer: (props) => {\n    return props.geneticEnable\n      ? {\n          maxWidth: \"90%\",\n          marginLeft: \"auto\",\n          marginRight: \"auto\",\n          paddingTop: \"5px\",\n          paddingBottom: \"5px\",\n          borderTop: \"1px solid #ccc\",\n          borderLeft: \"1px solid #ccc\",\n          borderRight: \"3px solid #b8b8b8\",\n          borderBottom: \"4px solid #b8b8b8\",\n          borderRadius: \"5px\",\n          marginBottom: \"5px\",\n        }\n      : {};\n  },\n  gridItem: {\n    width: (props) => (props.geneticEnable ? \"85%\" : \"75%\"),\n  },\n  title: {\n    marginTop: theme.spacing(1),\n    // marginBottom: theme.spacing(1),\n    fontWeight: \"600\",\n    fontSize: \"15px\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  title2: {\n    marginTop: theme.spacing(1),\n    // marginBottom: theme.spacing(1),\n    fontWeight: \"600\",\n    fontSize: \"13px\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  switch: {\n    // marginTop: theme.spacing(2),\n    // marginBottom: theme.spacing(1),\n  },\n  expand: {\n    transform: \"rotate(0deg)\",\n    marginLeft: \"auto\",\n    transition: theme.transitions.create(\"transform\", {\n      duration: theme.transitions.duration.shortest,\n    }),\n  },\n  expandOpen: {\n    transform: \"rotate(180deg)\",\n  },\n  expandBox: {\n    marginTop: \"7px\",\n  },\n  expendedTextfield: {\n    width: \"80px\",\n  },\n  expandedButton: {\n    height: \"39px\",\n    width: \"65px\",\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpIcon2: {\n    marginTop: \"-10px\",\n    marginBottom: \"-10px\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n}));\n\nconst FilterTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction FilterGenetic(props) {\n  const classes = useStyles(props);\n  const [expanded, setExpanded] = useState(false);\n  const [newGrs1Min, setNewGrs1Min] = useState(props.grs1ScoreMin);\n  const [newGrs1Max, setNewGrs1Max] = useState(props.grs1ScoreMax);\n  const [newGrs2Min, setNewGrs2Min] = useState(props.grs2ScoreMin);\n  const [newGrs2Max, setNewGrs2Max] = useState(props.grs2ScoreMax);\n  const [newAagrsMin, setNewAagrsMin] = useState(props.aagrsScoreMin);\n  const [newAagrsMax, setNewAagrsMax] = useState(props.aagrsScoreMax);\n  const [showError, setShowError] = useState(false);\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        When the switch is off (\n        <Switch color=\"primary\" className={classes.helpIcon2} />) , the search\n        will ignore GRS score.\n        <br />\n        When the switch is on (\n        <Switch checked=\"true\" color=\"primary\" className={classes.helpIcon2} />)\n        , the search will find cases that match the given range.\n        <br />\n        <div\n          style={{\n            display: \"flex\",\n            alignItems: \"center\",\n            flexWrap: \"wrap\",\n          }}\n        >\n          <span>Click the expand button (</span> <ExpandMoreIcon />\n          <span>) to input a specific number.</span>\n        </div>\n      </div>\n    </React.Fragment>\n  );\n\n  useEffect(() => {\n    if (!props.geneticEnable) {\n      setExpanded(false);\n    }\n  });\n\n  const handleExpandClick = () => {\n    setExpanded(!expanded);\n  };\n\n  const handleGrs1ScoreRangeSliderChange = (event, newGrs1ScoreRange) => {\n    props.setGrs1ScoreRange(newGrs1ScoreRange);\n  };\n\n  const handleGrs2ScoreRangeSliderChange = (event, newGrs2ScoreRange) => {\n    props.setGrs2ScoreRange(newGrs2ScoreRange);\n  };\n\n  const handleAagrsScoreRangeSliderChange = (event, newAagrsScoreRange) => {\n    props.setAagrsScoreRange(newAagrsScoreRange);\n  };\n\n  const handleMinGrs1ScoreInputChange = (event) => {\n    setNewGrs1Min(event.target.value);\n  };\n\n  const handleMinGrs2ScoreInputChange = (event) => {\n    setNewGrs2Min(event.target.value);\n  };\n\n  const handleMinAagrsScoreInputChange = (event) => {\n    setNewAagrsMin(event.target.value);\n  };\n\n  const handleMaxGrs1ScoreInputChange = (event) => {\n    setNewGrs1Max(event.target.value);\n  };\n\n  const handleMaxGrs2ScoreInputChange = (event) => {\n    setNewGrs2Max(event.target.value);\n  };\n\n  const handleMaxAagrsScoreInputChange = (event) => {\n    setNewAagrsMax(event.target.value);\n  };\n\n  const handleGrs1ScoreSet = () => {\n    const numMin = Number(newGrs1Min);\n    const numMax = Number(newGrs1Max);\n    if (\n      numMin != null &&\n      numMax != null &&\n      numMin <= numMax &&\n      numMin >= 0 &&\n      numMax <= 0.5\n    ) {\n      props.setGrs1ScoreMin(numMin);\n      props.setGrs1ScoreMax(numMax);\n      setShowError(false);\n    } else {\n      console.log(\"Invalid input!\");\n      setShowError(true);\n    }\n  };\n\n  const handleGrs2ScoreSet = () => {\n    const numMin = Number(newGrs2Min);\n    const numMax = Number(newGrs2Max);\n    if (\n      numMin != null &&\n      numMax != null &&\n      numMin <= numMax &&\n      numMin >= 0 &&\n      numMax <= 20\n    ) {\n      props.setGrs2ScoreMin(newGrs2Min);\n      props.setGrs2ScoreMax(newGrs2Max);\n      setShowError(false);\n    } else {\n      console.log(\"Invalid input!\");\n      setShowError(true);\n    }\n  };\n\n  const handleAagrsScoreSet = () => {\n    const numMin = Number(newAagrsMin);\n    const numMax = Number(newAagrsMax);\n    if (\n      numMin != null &&\n      numMax != null &&\n      numMin <= numMax &&\n      numMin >= 0 &&\n      numMax <= 15\n    ) {\n      props.setAagrsScoreMin(newAagrsMin);\n      props.setAagrsScoreMax(newAagrsMax);\n      setShowError(false);\n    } else {\n      console.log(\"Invalid input!\");\n      setShowError(true);\n    }\n  };\n\n  const handleSwitch = (event) => {\n    props.setGeneticEnable(event.target.checked);\n    if (!event.target.checked) {\n      setExpanded(event.target.checked);\n    }\n  };\n\n  return (\n    <div>\n      <Grid\n        container\n        direction=\"column\"\n        justify=\"center\"\n        alignItems=\"center\"\n        className={classes.gridContainer}\n      >\n        <Grid item xs={12} className={classes.gridItem}>\n          <Box display=\"flex\">\n            <Box flexGrow={1}>\n              <Typography variant=\"subtitle1\" className={classes.title}>\n                Genetics{\"  \"}\n                <FilterTooltip title={helpText} placement=\"right-start\">\n                  <HelpOutlineIcon className={classes.helpIcon} />\n                </FilterTooltip>\n              </Typography>\n            </Box>\n            <Box>\n              <Switch\n                checked={props.geneticEnable}\n                onChange={handleSwitch}\n                name=\"grs1ScoreEnableSwitch\"\n                className={classes.switch}\n                color=\"primary\"\n              />\n            </Box>\n          </Box>\n        </Grid>\n        {/* GRS1 score slider */}\n        {props.geneticEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <Box display=\"flex\" flexDirection=\"column\">\n              <Box flexGrow={1}>\n                <Typography variant=\"subtitle1\" className={classes.title2}>\n                  GRS1 Score{\"  \"}\n                  <FilterTooltip title={helpText} placement=\"right-start\">\n                    <HelpOutlineIcon className={classes.helpIcon} />\n                  </FilterTooltip>\n                </Typography>\n              </Box>\n              <Box>\n                <Slider\n                  className={classes.slider}\n                  value={props.grs1ScoreRange}\n                  onChange={handleGrs1ScoreRangeSliderChange}\n                  disabled={!props.geneticEnable}\n                  valueLabelDisplay=\"auto\"\n                  min={0}\n                  max={0.5}\n                  step={0.05}\n                  aria-labelledby=\"grs1-score-range-slider\"\n                />\n              </Box>\n            </Box>\n          </Grid>\n        )}\n\n        {props.geneticEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <Grid container alignItems=\"center\" justify=\"space-between\">\n              <Grid item>\n                <Typography variant=\"body1\" color=\"textPrimary\">\n                  {props.grs1ScoreMin}\n                </Typography>\n              </Grid>\n              <Grid item>\n                <IconButton\n                  className={clsx(classes.expand, {\n                    [classes.expandOpen]: expanded,\n                  })}\n                  onClick={handleExpandClick}\n                  disabled={!props.geneticEnable}\n                >\n                  <ExpandMoreIcon />\n                </IconButton>\n              </Grid>\n              <Grid item>\n                <Typography variant=\"body1\" color=\"textPrimary\">\n                  {props.grs1ScoreMax}\n                </Typography>\n              </Grid>\n            </Grid>\n          </Grid>\n        )}\n\n        <Grid item xs={12} className={classes.gridItem}>\n          <Collapse in={expanded} timeout=\"auto\" unmountOnExit>\n            <Box\n              display=\"flex\"\n              justifyContent=\"space-between\"\n              className={classes.expandBox}\n            >\n              <TextField\n                label=\"From\"\n                variant=\"outlined\"\n                className={classes.expendedTextfield}\n                defaultValue={props.grs1ScoreMin}\n                size=\"small\"\n                onChange={handleMinGrs1ScoreInputChange}\n                error={showError}\n              />\n              <TextField\n                label=\"To\"\n                variant=\"outlined\"\n                className={classes.expendedTextfield}\n                defaultValue={props.grs1ScoreMax}\n                size=\"small\"\n                onChange={handleMaxGrs1ScoreInputChange}\n                error={showError}\n              />\n              <Button\n                variant=\"contained\"\n                color=\"primary\"\n                className={classes.expandedButton}\n                onClick={handleGrs1ScoreSet}\n              >\n                SET\n              </Button>\n            </Box>\n          </Collapse>\n        </Grid>\n\n        {/* GRS2 score slider */}\n        {props.geneticEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <Box display=\"flex\" flexDirection=\"column\">\n              <Box flexGrow={1}>\n                <Typography variant=\"subtitle1\" className={classes.title2}>\n                  GRS2 Score{\"  \"}\n                  <FilterTooltip title={helpText} placement=\"right-start\">\n                    <HelpOutlineIcon className={classes.helpIcon} />\n                  </FilterTooltip>\n                </Typography>\n              </Box>\n              <Box>\n                <Slider\n                  className={classes.slider}\n                  value={props.grs2ScoreRange}\n                  onChange={handleGrs2ScoreRangeSliderChange}\n                  disabled={!props.geneticEnable}\n                  valueLabelDisplay=\"auto\"\n                  min={0}\n                  max={20}\n                  step={1}\n                  aria-labelledby=\"grs2-score-range-slider\"\n                />\n              </Box>\n            </Box>\n          </Grid>\n        )}\n\n        {props.geneticEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <Grid container alignItems=\"center\" justify=\"space-between\">\n              <Grid item>\n                <Typography variant=\"body1\" color=\"textPrimary\">\n                  {props.grs2ScoreMin}\n                </Typography>\n              </Grid>\n              <Grid item>\n                <IconButton\n                  className={clsx(classes.expand, {\n                    [classes.expandOpen]: expanded,\n                  })}\n                  onClick={handleExpandClick}\n                  disabled={!props.geneticEnable}\n                >\n                  <ExpandMoreIcon />\n                </IconButton>\n              </Grid>\n              <Grid item>\n                <Typography variant=\"body1\" color=\"textPrimary\">\n                  {props.grs2ScoreMax}\n                </Typography>\n              </Grid>\n            </Grid>\n          </Grid>\n        )}\n\n        <Grid item xs={12} className={classes.gridItem}>\n          <Collapse in={expanded} timeout=\"auto\" unmountOnExit>\n            <Box\n              display=\"flex\"\n              justifyContent=\"space-between\"\n              className={classes.expandBox}\n            >\n              <TextField\n                label=\"From\"\n                variant=\"outlined\"\n                className={classes.expendedTextfield}\n                defaultValue={props.grs2ScoreMin}\n                size=\"small\"\n                onChange={handleMinGrs2ScoreInputChange}\n                error={showError}\n              />\n              <TextField\n                label=\"To\"\n                variant=\"outlined\"\n                className={classes.expendedTextfield}\n                defaultValue={props.grs2ScoreMax}\n                size=\"small\"\n                onChange={handleMaxGrs2ScoreInputChange}\n                error={showError}\n              />\n              <Button\n                variant=\"contained\"\n                color=\"primary\"\n                className={classes.expandedButton}\n                onClick={handleGrs2ScoreSet}\n              >\n                SET\n              </Button>\n            </Box>\n          </Collapse>\n        </Grid>\n\n        {/* AAGRS score slider */}\n        {props.geneticEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <Box display=\"flex\" flexDirection=\"column\">\n              <Box flexGrow={1}>\n                <Typography variant=\"subtitle1\" className={classes.title2}>\n                  AAGRS Score{\"  \"}\n                  <FilterTooltip title={helpText} placement=\"right-start\">\n                    <HelpOutlineIcon className={classes.helpIcon} />\n                  </FilterTooltip>\n                </Typography>\n              </Box>\n              <Box>\n                <Slider\n                  className={classes.slider}\n                  value={props.aagrsScoreRange}\n                  onChange={handleAagrsScoreRangeSliderChange}\n                  disabled={!props.geneticEnable}\n                  valueLabelDisplay=\"auto\"\n                  min={0}\n                  max={15}\n                  step={1}\n                  aria-labelledby=\"aagrs-score-range-slider\"\n                />\n              </Box>\n            </Box>\n          </Grid>\n        )}\n\n        {props.geneticEnable && (\n          <Grid item xs={12} className={classes.gridItem}>\n            <Grid container alignItems=\"center\" justify=\"space-between\">\n              <Grid item>\n                <Typography variant=\"body1\" color=\"textPrimary\">\n                  {props.aagrsScoreMin}\n                </Typography>\n              </Grid>\n              <Grid item>\n                <IconButton\n                  className={clsx(classes.expand, {\n                    [classes.expandOpen]: expanded,\n                  })}\n                  onClick={handleExpandClick}\n                  disabled={!props.geneticEnable}\n                >\n                  <ExpandMoreIcon />\n                </IconButton>\n              </Grid>\n              <Grid item>\n                <Typography variant=\"body1\" color=\"textPrimary\">\n                  {props.aagrsScoreMax}\n                </Typography>\n              </Grid>\n            </Grid>\n          </Grid>\n        )}\n\n        <Grid item xs={12} className={classes.gridItem}>\n          <Collapse in={expanded} timeout=\"auto\" unmountOnExit>\n            <Box\n              display=\"flex\"\n              justifyContent=\"space-between\"\n              className={classes.expandBox}\n            >\n              <TextField\n                label=\"From\"\n                variant=\"outlined\"\n                className={classes.expendedTextfield}\n                defaultValue={props.aagrsScoreMin}\n                size=\"small\"\n                onChange={handleMinAagrsScoreInputChange}\n                error={showError}\n              />\n              <TextField\n                label=\"To\"\n                variant=\"outlined\"\n                className={classes.expendedTextfield}\n                defaultValue={props.aagrsScoreMax}\n                size=\"small\"\n                onChange={handleMaxAagrsScoreInputChange}\n                error={showError}\n              />\n              <Button\n                variant=\"contained\"\n                color=\"primary\"\n                className={classes.expandedButton}\n                onClick={handleAagrsScoreSet}\n              >\n                SET\n              </Button>\n            </Box>\n          </Collapse>\n        </Grid>\n      </Grid>\n    </div>\n  );\n}\n\n// subscribe\nconst mapStateToProps = (state) => {\n  return {\n    geneticEnable: state.explore.geneticEnable,\n    grs1ScoreMin: state.explore.grs1ScoreMin,\n    grs1ScoreMax: state.explore.grs1ScoreMax,\n    grs1ScoreRange: state.explore.grs1ScoreRange,\n    grs2ScoreMin: state.explore.grs2ScoreMin,\n    grs2ScoreMax: state.explore.grs2ScoreMax,\n    grs2ScoreRange: state.explore.grs2ScoreRange,\n    aagrsScoreMin: state.explore.aagrsScoreMin,\n    aagrsScoreMax: state.explore.aagrsScoreMax,\n    aagrsScoreRange: state.explore.aagrsScoreRange,\n  };\n};\n\n// update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setGeneticEnable: (newGeneticEnable) =>\n      dispatch({ type: \"SET_GENETIC_ENABLE\", value: newGeneticEnable }),\n    setGrs1ScoreMin: (newGrs1ScoreMin) =>\n      dispatch({ type: \"SET_GRS1_SCORE_MIN\", value: newGrs1ScoreMin }),\n    setGrs1ScoreMax: (newGrs1ScoreMax) =>\n      dispatch({ type: \"SET_GRS1_SCORE_MAX\", value: newGrs1ScoreMax }),\n    setGrs1ScoreRange: (newGrs1ScoreRange) =>\n      dispatch({ type: \"SET_GRS1_SCORE_RANGE\", value: newGrs1ScoreRange }),\n    setGrs2ScoreMin: (newGrs2ScoreMin) =>\n      dispatch({ type: \"SET_GRS2_SCORE_MIN\", value: newGrs2ScoreMin }),\n    setGrs2ScoreMax: (newGrs2ScoreMax) =>\n      dispatch({ type: \"SET_GRS2_SCORE_MAX\", value: newGrs2ScoreMax }),\n    setGrs2ScoreRange: (newGrs2ScoreRange) =>\n      dispatch({ type: \"SET_GRS2_SCORE_RANGE\", value: newGrs2ScoreRange }),\n    setAagrsScoreMin: (newAagrsScoreMin) =>\n      dispatch({ type: \"SET_AAGRS_SCORE_MIN\", value: newAagrsScoreMin }),\n    setAagrsScoreMax: (newAagrsScoreMax) =>\n      dispatch({ type: \"SET_AAGRS_SCORE_MAX\", value: newAagrsScoreMax }),\n    setAagrsScoreRange: (newAagrsScoreRange) =>\n      dispatch({ type: \"SET_AAGRS_SCORE_RANGE\", value: newAagrsScoreRange }),\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterGenetic);\n","import React, { setState } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport FilterCaseId from \"./component/FilterCaseId\";\nimport FilterAge from \"./component/FilterAge\";\nimport FilterAgeOnset from \"./component/FilterAgeOnset\";\nimport FilterGender from \"./component/FilterGender\";\nimport FilterRace from \"./component/FilterRace\";\nimport FilterBMI from \"./component/FilterBMI\";\nimport FilterDonorType from \"./component/FilterDonorType\";\nimport FilterDiabetesDuration from \"./component/FilterDiabetesDuration\";\nimport FilterHbA1c from \"./component/FilterHbA1c\";\nimport FilterAutoAntibody from \"./component/FilterAutoAntibody\";\nimport FilterAutoAntibodyPositiveNumber from \"./component/FilterAutoAntibodyPositiveNumber\";\nimport FilterInsulitis from \"./component/FilterInsulitis\";\nimport FilterCPeptide from \"./component/FilterCPeptide\";\nimport FilterTitle from \"./component/FilterTitle\";\nimport FilterDataset from \"./component/FilterDataset\";\nimport FilterGenetic from \"./component/FilterGenetic\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {},\n  filter: {\n    maxHeight: \"80vh\",\n    // overflow: \"auto\",\n    overflowX: \"hidden\",\n    scrollbarGutter: \"stable\",\n    paddingBottom: theme.spacing(5),\n  },\n}));\n\nexport default function Filter() {\n  const classes = useStyles();\n  return (\n    <div className={classes.root}>\n      <FilterTitle />\n      <div className={classes.filter}>\n        <FilterCaseId />\n        <FilterDataset />\n        <FilterDonorType />\n        <FilterDiabetesDuration />\n        <FilterAgeOnset />\n        <FilterAge />\n        <FilterGender />\n        <FilterRace />\n        <FilterBMI />\n        <FilterCPeptide />\n        <FilterHbA1c />\n        <FilterAutoAntibody />\n        <FilterAutoAntibodyPositiveNumber />\n        <FilterInsulitis />\n        <FilterGenetic />\n      </div>\n    </div>\n  );\n}\n","import React, { useState } from \"react\";\nimport Button from \"@material-ui/core/Button\";\nimport Select from \"react-select\";\nimport Box from \"@material-ui/core/Box\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\nimport FileSaver from \"file-saver\";\nimport XLSX from \"xlsx\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport { connect } from \"react-redux\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    minWidth: \"16vw\",\n  },\n  button: {\n    marginBottom: theme.spacing(2),\n    marginLeft: \"1vw\",\n  },\n  multiSelect: {\n    minWidth: \"10vw\",\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginTop: \"10px\",\n    marginRight: \"10px\",\n    color: \"#0292FF\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n}));\n\nconst DownloadTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nconst options = [\n  { value: \"All\", label: \"All\" },\n  { value: \"Functional Assay\", label: \"Functional Assay\" },\n  { value: \"High Res HLA\", label: \"High Res HLA\" },\n  { value: \"Immunophenotyping\", label: \"Immunophenotyping\" },\n  { value: \"Genetic\", label: \"Genetics\" },\n  { value: \"SNPs-genes\", label: \"SNPs-genes\" },\n];\n\nfunction ExportSpreadsheet(props) {\n  const classes = useStyles();\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        Download all cases data from search result into one .xlsx spreadsheet\n        file.\n        <br />\n        Selecting \"All\" category from the dropbox gives the most summarized case\n        data. You can download the specific category full data by selecting\n        others.\n      </div>\n    </React.Fragment>\n  );\n\n  const [selectedDownloadType, setSelectedDownloadType] = useState({\n    value: \"All\",\n    label: \"All\",\n  });\n\n  function filterJSON(\n    raw,\n    donorTypesMap,\n    causeOfDeathMap,\n    emiMap,\n    immunMap,\n    geneticMap\n  ) {\n    const allowedColumns = [\n      \"case_id\",\n      \"RR_id\",\n      \"donor_type_id\",\n      \"donor_type_comments\",\n      \"GADA_Result\",\n      \"IA_2A_Result\",\n      \"mIAA_Result\",\n      \"ZnT8A_Result\",\n      \"slices_shipping_status\",\n      \"islet_isolation_status\",\n      \"pancreas_weight_grams\",\n      \"pancreas_weight_comments\",\n      \"admission_course\",\n      \"clinical_history\",\n      \"downtime_minutes\",\n      \"age_years\",\n      \"gestational_age_weeks\",\n      \"diabetes_hx_years\",\n      \"sex\",\n      \"race_ethnicity\",\n      \"height_cm\",\n      \"weight_kg\",\n      \"BMI\",\n      \"BMI_percentile\",\n      \"HbA1c_percent\",\n      \"C_peptide_ng_mL\",\n      \"admission_glucose_mg_dL\",\n      \"peak_glucose_mg_dL\",\n      \"meds_diabetes\",\n      \"meds_home\",\n      \"meds_hospital\",\n      \"infections\",\n      \"allergies\",\n      \"HLA_transplant\",\n      \"serologies\",\n      \"SARS_COV_2_results\",\n      \"hemodiluted_status\",\n      \"ABO_blood_type\",\n      \"cause_of_death_id\",\n      \"ICU_time_days\",\n      \"transit_time_minutes\",\n      \"case_recovery_type\",\n      \"HLA_high_resolution\",\n      \"histopathology\",\n      \"RIN\",\n      \"electron_microscopy\",\n      \"immunophenotyping\",\n    ];\n    const allowedColumns2 = [\n      \"case_id\",\n      \"donor_type_id\",\n      \"diabetes_hx_years\",\n      \"age_years\",\n      \"gestational_age_weeks\",\n      \"sex\",\n      \"race_ethinicity\",\n      \"A_1\",\n      \"A_2\",\n      \"B_1\",\n      \"B_2\",\n      \"C_1\",\n      \"C_2\",\n      \"DRB1_1\",\n      \"DRB1_2\",\n      \"DQA1_1\",\n      \"DQA1_2\",\n      \"DQB1_1\",\n      \"DQB1_2\",\n      \"DPA1_1\",\n      \"DPA1_2\",\n      \"DPB1_1\",\n      \"DPB1_2\",\n    ];\n    const allowedColumns3 = [\n      \"case_id\",\n      \"donor_type_id\",\n      \"diabetes_hx_years\",\n      \"age_years\",\n      \"gestational_age_weeks\",\n      \"sex\",\n      \"race_ethinicity\",\n      \"glucose_insulin\",\n      \"KCL_insulin\",\n    ];\n    const allowedColumns4 = [\"case_id\"];\n    const allowedColumns5 = [\"case_id\"];\n    const allowedColumns6 = [];\n    var newData = [];\n    raw.forEach((donor) => {\n      const filteredDonor = Object.keys(donor)\n        .filter((key) => {\n          if (selectedDownloadType.value === \"High Res HLA\") {\n            return allowedColumns2.includes(key);\n          } else if (selectedDownloadType.value === \"Functional Assay\") {\n            return allowedColumns3.includes(key);\n          } else if (selectedDownloadType.value === \"Immunophenotyping\") {\n            return allowedColumns4.includes(key);\n          } else if (selectedDownloadType.value === \"Genetic\") {\n            return allowedColumns5.includes(key);\n          } else if (selectedDownloadType.value === \"SNPs-genes\") {\n            return allowedColumns6.includes(key);\n          } else {\n            return allowedColumns.includes(key);\n          }\n        })\n        .reduce((obj, key) => {\n          if (key === \"donor_type_id\") {\n            obj[\"donor_type\"] = donorTypesMap[donor[\"donor_type_id\"]];\n          } else if (key === \"cause_of_death_id\") {\n            obj[\"cause_of_death\"] = causeOfDeathMap[donor[\"cause_of_death_id\"]];\n          } else if (key === \"glucose_insulin\") {\n            obj[\"16.7mM Glucose Stimulation\"] = donor[\"glucose_insulin\"];\n          } else if (key === \"KCL_insulin\") {\n            obj[\"High KCl Stimulation\"] = donor[\"KCL_insulin\"];\n          } else {\n            obj[key] = donor[key];\n          }\n          return obj;\n        }, {});\n\n      if (selectedDownloadType.value === \"All\") {\n        filteredDonor[\"electron_microscopy\"] = emiMap[donor[\"case_id\"]]\n          ? \"Yes\"\n          : \"No\";\n        filteredDonor[\"immunophenotyping\"] = immunMap[donor[\"case_id\"]]\n          ? \"Yes\"\n          : \"No\";\n      }\n      newData.push(filteredDonor);\n    });\n\n    if (selectedDownloadType.value === \"Immunophenotyping\") {\n      var immunData = [];\n      newData.forEach((nData) => {\n        var theCaseId = nData.case_id;\n        if (theCaseId in props.immunMap) {\n          Object.keys(props.immunMap[theCaseId]).forEach((sampleType) => {\n            var immunObj = {};\n            immunObj[\"case_id\"] = nData.case_id;\n            immunObj[\"sample_type\"] = sampleType;\n            var immunObjMap = props.immunMap[nData.case_id][sampleType];\n            Object.keys(immunObjMap).forEach((attr) => {\n              immunObj[attr] = immunObjMap[attr];\n              if (attr === \"acquisition_date\") {\n                immunObj[attr] = immunObj[attr].slice(0, 10);\n              }\n            });\n            immunData.push(immunObj);\n          });\n        }\n      });\n      newData = immunData;\n    }\n\n    if (selectedDownloadType.value === \"Genetic\") {\n      let geneticData = [];\n      newData.forEach((nData) => {\n        let theCaseId = nData.case_id;\n        if (theCaseId in props.geneticMap) {\n          let geneticObj = {};\n          geneticObj[\"case_id\"] = theCaseId;\n          Object.keys(props.geneticMap[theCaseId]).forEach(\n            (geneticAttrName) => {\n              if (\n                geneticAttrName !== \"GRS1_SNPs\" &&\n                geneticAttrName !== \"GRS2_SNPs\" &&\n                geneticAttrName !== \"AA_GRS_SNPs\"\n              ) {\n                let geneticAttrValue =\n                  props.geneticMap[theCaseId][geneticAttrName];\n                geneticObj[geneticAttrName] = geneticAttrValue;\n              } else if (\n                geneticAttrName === \"GRS1_SNPs\" ||\n                geneticAttrName === \"GRS2_SNPs\" ||\n                geneticAttrName === \"AA_GRS_SNPs\"\n              ) {\n                const snpsArr =\n                  props.geneticMap[theCaseId][geneticAttrName].split(\";\");\n                snpsArr.forEach((snpStr) => {\n                  const snpKey = snpStr.split(\":\")[0] ?? \"Not Available\";\n                  const snpValue = snpStr.split(\":\")[1] ?? \"Not Available\";\n                  geneticObj[snpKey] = snpValue;\n                });\n              }\n            }\n          );\n          geneticData.push(geneticObj);\n        }\n      });\n      newData = geneticData;\n    }\n\n    if (selectedDownloadType.value === \"SNPs-genes\") {\n      let SNPData = [];\n      if (props.SNP) {\n        Object.keys(props.SNP).forEach((snp_id) => {\n          let SNPObj = props.SNP[snp_id];\n          let tempObj = { SNP_id: snp_id };\n          for (let key in SNPObj) {\n            tempObj[key] = SNPObj[key];\n          }\n          console.log(\"SNP obj\", tempObj);\n          SNPData.push(tempObj);\n        });\n        newData = SNPData;\n      }\n    }\n\n    return newData;\n  }\n\n  const fileType =\n    \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8\";\n  const fileExtension = \".xlsx\";\n\n  const fileName = selectedDownloadType.value + \"-\" + props.fileName;\n\n  const exportToCSV = (csvData, fileName) => {\n    // workbook sheet\n    const ws = XLSX.utils.json_to_sheet(\n      filterJSON(\n        csvData,\n        props.donorTypesMap,\n        props.causeOfDeathMap,\n        props.emiMap,\n        props.immunMap,\n        props.geneticMap\n      )\n    );\n    // workbook\n    const wb = { Sheets: { data: ws }, SheetNames: [\"data\"] };\n    const excelBuffer = XLSX.write(wb, { bookType: \"xlsx\", type: \"array\" });\n    const data = new Blob([excelBuffer], { type: fileType });\n    FileSaver.saveAs(data, fileName + fileExtension);\n  };\n\n  return (\n    <div className={classes.root}>\n      <Box display=\"flex\" justifyContent=\"space-between\">\n        <Box>\n          <DownloadTooltip title={helpText} placement=\"left-start\">\n            <HelpOutlineIcon className={classes.helpIcon} />\n          </DownloadTooltip>\n        </Box>\n        <Box>\n          <Select\n            className={classes.multiSelect}\n            value={props.selectedDownloadType}\n            onChange={(value) => setSelectedDownloadType(value)}\n            options={options}\n            placeholder=\"All by default\"\n            //isMulti\n            closeMenuOnSelect={true}\n            //isDisabled={!props.donorTypeEnable}\n          />\n        </Box>\n        <Box>\n          <Button\n            variant=\"contained\"\n            color=\"primary\"\n            className={classes.button}\n            onClick={(e) => exportToCSV(props.csvData, fileName)}\n          >\n            Download\n          </Button>\n        </Box>\n      </Box>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state, ownProps) => {\n  return {\n    donorTypesMap: state.explore.donorTypesMap,\n    causeOfDeathMap: state.explore.causeOfDeathMap,\n    emiMap: state.explore.emiMap,\n    hlaMap: state.explore.hlaMap,\n    immunMap: state.explore.immunMap,\n    geneticMap: state.explore.geneticMap,\n    SNP: state.explore.SNP,\n  };\n};\n\nexport default connect(mapStateToProps, null)(ExportSpreadsheet);\n","import React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Box from \"@material-ui/core/Box\";\nimport ExportSpreadsheet from \"./ExportSpreadSheet\";\nimport { usePromiseTracker } from \"react-promise-tracker\";\nimport { HashLoader } from \"react-spinners\";\n\nconst useStyles = makeStyles((theme) => ({\n  paper: {\n    textAlign: \"center\",\n    minHeight: \"2vh\",\n    \"&:hover\": {\n      backgroundColor: theme.palette.primary.light,\n      cursor: \"pointer\",\n    },\n    numberOfResult: {\n      marginBottom: theme.spacing(2),\n    },\n  },\n  result_container: {\n    position: \"relative\",\n  },\n  result_title: {\n    // position: \"fixed\",\n    // paddingTop: \"5px\",\n    // backgroundColor: \"#ffffff\",\n  },\n  result: {\n    // position: \"fixed\",\n    // top: 0,\n    paddingTop: \"5px\",\n    paddingLeft: \"3px\",\n    paddingRight: \"5px\",\n    paddingBottom: \"3px\",\n    // maxHeight: \"80vh\",\n    // overflow: \"auto\",\n    // overflowX: \"hidden\",\n  },\n  progress: {\n    display: \"flex\",\n    justifyContent: \"center\",\n    width: \"100%\",\n    alignItems: \"center\",\n  },\n}));\n\nfunction Search(props) {\n  const classes = useStyles();\n  const { promiseInProgress } = usePromiseTracker();\n  const [filteredData, setFilteredData] = useState([]);\n  const [requestedCase, setRequestedCase] = useState(null);\n\n  const handleOpen = (e, donorCase) => {\n    props.setCurrentCase(donorCase);\n    props.setDialogue(true);\n  };\n\n  useEffect(() => {\n    setFilteredData(filtering());\n  }, [props]);\n\n  useEffect(() => {\n    if (typeof props.requestedCaseId !== \"undefined\") {\n      setRequestedCase(\n        filteredData.filter(\n          (donor) => donor.case_id === props.requestedCaseId\n        )[0]\n      );\n    }\n  }, [props.requestedCaseId, filteredData]);\n\n  useEffect(() => {\n    if (typeof requestedCase !== \"undefined\" && requestedCase !== null) {\n      props.setCurrentCase(requestedCase);\n      props.setDialogue(true);\n    }\n  }, [requestedCase]);\n\n  const filtering = () =>\n    props.rawData\n      // public case only\n      .filter((donor) => donor.is_public === 1)\n      // Case ID\n      .filter((donor) => {\n        if (props.selectedCaseId.length > 0 && props.caseIDEnable) {\n          if (\n            props.selectedCaseId\n              .map((obj) => obj.value)\n              .indexOf(donor.case_id) > -1\n          ) {\n            return true;\n          } else {\n            return false;\n          }\n        } else {\n          return true;\n        }\n      })\n      // Donor type\n      .filter((donor) => {\n        if (\n          donor.donor_type_id !== null &&\n          props.selectedDonorType.length > 0 &&\n          props.donorTypeEnable\n        ) {\n          const typeName = props.donorTypesMap[donor.donor_type_id];\n          if (\n            props.selectedDonorType.map((obj) => obj.value).indexOf(typeName) >\n            -1\n          ) {\n            return true;\n          } else {\n            return false;\n          }\n        }\n        return true;\n      })\n      // Age\n      .filter(\n        (donor) =>\n          (donor.age_years !== null &&\n            donor.age_years >= props.ageMin &&\n            donor.age_years <= props.ageMax) ||\n          props.ageEnable === false\n      )\n      // Age Onset\n      .filter(\n        (donor) =>\n          (donor.age_onset_years !== null &&\n            donor.age_onset_years >= props.ageOnsetMin &&\n            donor.age_onset_years <= props.ageOnsetMax) ||\n          props.ageOnsetEnable === false\n      )\n      // Gender\n      .filter(\n        (donor) =>\n          (donor.sex !== null &&\n            ((donor.sex === \"Female\" && props.femaleChecked) ||\n              (donor.sex != null &&\n                donor.sex === \"Male\" &&\n                props.maleChecked))) ||\n          props.genderEnable === false\n      )\n      // Race\n      .filter((donor) => {\n        if (props.selectedRace.length > 0 && props.raceEnable) {\n          if (donor.race_ethnicity !== null) {\n            if (\n              props.selectedRace\n                .map((obj) => obj.value)\n                .indexOf(donor.race_ethnicity) > -1\n            ) {\n              return true;\n            } else {\n              return false;\n            }\n          } else {\n            return false;\n          }\n        }\n        return true;\n      })\n      // BMI\n      .filter(\n        (donor) =>\n          (donor.BMI !== null &&\n            donor.BMI >= props.bmiMin &&\n            donor.BMI <= props.bmiMax) ||\n          props.bmiEnable === false\n      )\n      // C-Peptide\n      .filter((donor) => {\n        const cPeptide = donor.C_peptide_ng_mL;\n        if (props.cPeptideEnable === false) {\n          return true;\n        } else if (cPeptide !== null) {\n          if (cPeptide.slice(0, 1) === \"<\" && props.cPeptideNegative === true) {\n            return true;\n          } else if (\n            Number(cPeptide) < 0.02 &&\n            props.cPeptideNegative === true\n          ) {\n            return true;\n          } else if (\n            Number(cPeptide) >= 0.02 &&\n            props.cPeptidePositive === true\n          ) {\n            return true;\n          }\n        }\n        return false;\n      })\n      // Duration of Diabetes\n      .filter((donor) => {\n        if (props.DDEnable === false) {\n          return true;\n          // Donor type specified\n        } else if (\n          donor.donor_type_id !== null &&\n          props.selectedDonorType.length > 0\n        ) {\n          const typeName = props.donorTypesMap[donor.donor_type_id];\n          // Diabetes cases\n          if (\n            typeName.includes(\"Diabetes\") &&\n            !typeName.includes(\"No Diabetes\")\n          ) {\n            return (\n              donor.diabetes_hx_years !== null &&\n              donor.diabetes_hx_years >= props.DDMin &&\n              donor.diabetes_hx_years <= props.DDMax\n            );\n          } else {\n            return true;\n          }\n          // Donor type not specified\n        } else {\n          return (\n            donor.diabetes_hx_years !== null &&\n            donor.diabetes_hx_years >= props.DDMin &&\n            donor.diabetes_hx_years <= props.DDMax\n          );\n        }\n      })\n      // Hb1A1c\n      .filter(\n        (donor) =>\n          (donor.HbA1c_percent !== null &&\n            donor.HbA1c_percent >= props.hMin &&\n            donor.HbA1c_percent <= props.hMax) ||\n          props.hEnable === false\n      )\n      // AutoAntibody\n      .filter(\n        (donor) =>\n          (((props.gadaP === true && donor.GADA_Result === \"Positive\") ||\n            props.gadaP === false) &&\n            ((props.ia2aP === true && donor.IA_2A_Result === \"Positive\") ||\n              props.ia2aP === false) &&\n            ((props.miaaP === true && donor.mIAA_Result === \"Positive\") ||\n              props.miaaP === false) &&\n            ((props.znt8aP === true && donor.ZnT8A_Result === \"Positive\") ||\n              props.znt8aP === false)) ||\n          props.aaEnable === false\n      )\n      // AutoAntibody number\n      .filter(\n        (donor) =>\n          (props.zeroChecked === true && donor.AAbtally === 0) ||\n          (props.oneChecked === true && donor.AAbtally === 1) ||\n          (props.twoChecked === true && donor.AAbtally === 2) ||\n          (props.threeChecked === true && donor.AAbtally === 3) ||\n          (props.fourChecked === true && donor.AAbtally === 4) ||\n          props.aaPositiveEnable === false\n      )\n      // Insulitis\n      .filter(\n        (donor) =>\n          (props.insulitisPositiveChecked === true &&\n            donor.histopathology !== null &&\n            donor.histopathology.toLowerCase().indexOf(\"insulitis\") !== -1) ||\n          (props.insulitisNegativeChecked === true &&\n            (donor.histopathology === null ||\n              donor.histopathology.toLowerCase().indexOf(\"insulitis\") ===\n                -1)) ||\n          props.insulitisEnable === false\n      )\n      // Dataset: electron microscopy images\n      .filter(\n        (donor) =>\n          (props.electronMicroscopyChecked === true &&\n            props.emiMap[donor.case_id]) ||\n          props.electronMicroscopyChecked === false ||\n          props.datasetEnable === false\n      )\n      // Dataset: functional assay\n      .filter(\n        (donor) =>\n          (props.functionalAssayChecked === true &&\n            (donor.glucose_insulin || donor.KCL_insulin)) ||\n          props.functionalAssayChecked === false ||\n          props.datasetEnable === false\n      )\n      // Dataset: high res HLA\n      .filter(\n        (donor) =>\n          (props.highResHLAChecked === true &&\n            (donor.A_1 ||\n              donor.A_2 ||\n              donor.B_1 ||\n              donor.B_2 ||\n              donor.C_1 ||\n              donor.C_2 ||\n              donor.DRB1_1 ||\n              donor.DRB1_2 ||\n              donor.DQA1_1 ||\n              donor.DQA1_2 ||\n              donor.DQB1_1 ||\n              donor.DQB1_2 ||\n              donor.DPA1_1 ||\n              donor.DPA1_2 ||\n              donor.DPB1_1 ||\n              donor.DPB1_2)) ||\n          props.highResHLAChecked === false ||\n          props.datasetEnable === false\n      )\n      // Dataset: immunophenotyping\n      .filter(\n        (donor) =>\n          (props.immunophenotypingChecked === true &&\n            donor.case_id in props.immunMap) ||\n          props.immunophenotypingChecked === false ||\n          props.datasetEnable === false\n      )\n      // Dataset: Whole Exome Sequencing\n      .filter(\n        (donor) =>\n          (props.wholeExomeSequencingAvailable === true &&\n            props.geneticMap[donor.case_id]\n              ?.whole_exome_sequencing_available === 1) ||\n          props.wholeExomeSequencingAvailable === false ||\n          props.datasetEnable === false\n      )\n      // Dataset: SNPs\n      .filter(\n        (donor) =>\n          (props.snpsAvailable === true &&\n            props.geneticMap[donor.case_id]?.GRS1_score) ||\n          props.snpsAvailable === false ||\n          props.datasetEnable === false\n      )\n      // Genetic\n      .filter(\n        (donor) =>\n          (props?.geneticMap[donor.case_id]?.GRS1_score &&\n            props.geneticMap[donor.case_id]?.GRS1_score >= props.grs1ScoreMin &&\n            props.geneticMap[donor.case_id]?.GRS1_score <= props.grs1ScoreMax &&\n            props?.geneticMap[donor.case_id]?.GRS2_score &&\n            props.geneticMap[donor.case_id]?.GRS2_score >= props.grs2ScoreMin &&\n            props.geneticMap[donor.case_id]?.GRS2_score <= props.grs2ScoreMax &&\n            props?.geneticMap[donor.case_id]?.AA_GRS_score &&\n            props.geneticMap[donor.case_id]?.AA_GRS_score >=\n              props.aagrsScoreMin &&\n            props.geneticMap[donor.case_id]?.AA_GRS_score <=\n              props.aagrsScoreMax) ||\n          props.geneticEnable === false\n      );\n  console.log(\"filtered case data\", filteredData);\n  console.log(\"requested case\", requestedCase);\n  const currTime = new Date();\n  // Time format YYYY-MM-DD_HHMMSS\n  const timeStamp =\n    currTime.toISOString().split(\"T\")[0] +\n    \"_\" +\n    currTime.toTimeString().split(\" \")[0].replaceAll(\":\", \"\");\n  return (\n    <div className={classes.result_container}>\n      <div className={classes.result_title}>\n        <div style={{ width: \"100%\" }}>\n          <Box display=\"flex\" justifyContent=\"space-between\">\n            <Box>\n              <Typography variant=\"h4\">SEARCH RESULT</Typography>\n            </Box>\n            <Box>\n              {/* Download button */}\n              <ExportSpreadsheet\n                csvData={filteredData}\n                fileName={\"Download_From_nPOD_\" + timeStamp}\n              />\n            </Box>\n          </Box>\n        </div>\n        <div style={{ width: \"100%\" }}>\n          <Box display=\"flex\" justifyContent=\"flex-start\">\n            <Box mb={2}>\n              {+(promiseInProgress === true) ? (\n                <Typography variant=\"h6\" color=\"secondary\">\n                  Loading data...\n                </Typography>\n              ) : (\n                <Typography variant=\"h6\" color=\"secondary\">\n                  {filteredData.length} cases are found\n                </Typography>\n              )}\n            </Box>\n          </Box>\n        </div>\n      </div>\n      <div className={classes.result}>\n        <Grid container spacing={1}>\n          {filteredData.map((donorCase, index) => (\n            <Grid item xs={12} sm={3} md={2} lg={1} xl={1} key={index}>\n              <Paper\n                elevation={3}\n                onClick={(e) => handleOpen(e, donorCase)}\n                className={classes.paper}\n              >\n                {donorCase.case_id.length <= 4 && (\n                  <Typography variant=\"h6\">{donorCase.case_id}</Typography>\n                )}\n                {donorCase.case_id.length > 4 && (\n                  <Typography variant=\"subtitle1\">\n                    {donorCase.case_id}\n                  </Typography>\n                )}\n              </Paper>\n            </Grid>\n          ))}\n        </Grid>\n      </div>\n      <div className={classes.progress}>\n        {+(promiseInProgress === true) ? (\n          <HashLoader color=\"#4fc3f7\" size={50} />\n        ) : null}\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Age\n    ageEnable: state.explore.ageEnable,\n    ageRange: state.explore.ageRange,\n    ageMin: state.explore.ageMin,\n    ageMax: state.explore.ageMax,\n\n    // Age Onset\n    ageOnsetEnable: state.explore.ageOnsetEnable,\n    ageOnsetRange: state.explore.ageOnsetRange,\n    ageOnsetMin: state.explore.ageOnsetMin,\n    ageOnsetMax: state.explore.ageOnsetMax,\n\n    // Autoantibody type\n    aaEnable: state.explore.aaEnable,\n    gadaP: state.explore.gadaP,\n    gadaN: state.explore.gadaN,\n    ia2aP: state.explore.ia2aP,\n    ia2aN: state.explore.ia2aN,\n    miaaP: state.explore.miaaP,\n    miaaN: state.explore.miaaN,\n    znt8aP: state.explore.znt8aP,\n    znt8aN: state.explore.znt8aN,\n\n    // Antibody Positive\n    aaPositiveEnable: state.explore.aaPositiveEnable,\n    zeroChecked: state.explore.zeroChecked,\n    oneChecked: state.explore.oneChecked,\n    twoChecked: state.explore.twoChecked,\n    threeChecked: state.explore.threeChecked,\n    fourChecked: state.explore.fourChecked,\n\n    // BMI\n    bmiEnable: state.explore.bmiEnable,\n    bmiRange: state.explore.bmiRange,\n    bmiMin: state.explore.bmiMin,\n    bmiMax: state.explore.bmiMax,\n\n    // Diabetes Duration\n    DDEnable: state.explore.DDEnable,\n    DDRange: state.explore.DDRange,\n    DDMin: state.explore.DDMin,\n    DDMax: state.explore.DDMax,\n\n    // Donor Type (object array)\n    donorTypeEnable: state.explore.donorTypeEnable,\n    selectedDonorType: state.explore.selectedDonorType,\n\n    // Gender\n    genderEnable: state.explore.genderEnable,\n    maleChecked: state.explore.maleChecked,\n    femaleChecked: state.explore.femaleChecked,\n\n    // Hb1A1c\n    hEnable: state.explore.hEnable,\n    hRange: state.explore.hRange,\n    hMin: state.explore.hMin,\n    hMax: state.explore.hMax,\n\n    // Insulitis\n    insulitisEnable: state.explore.insulitisEnable,\n    insulitisPositiveChecked: state.explore.insulitisPositiveChecked,\n    insulitisNegativeChecked: state.explore.insulitisNegativeChecked,\n\n    // Race\n    raceEnable: state.explore.raceEnable,\n    selectedRace: state.explore.selectedRace,\n\n    // C-Peptide\n    cPeptideEnable: state.explore.cPeptideEnable,\n    cPeptidePositive: state.explore.cPeptidePositive,\n    cPeptideNegative: state.explore.cPeptideNegative,\n\n    // Raw Data\n    rawData: state.explore.rawData,\n\n    // Filtered Data\n    filteredData: state.explore.filteredData,\n\n    // Donor Types (map)\n    donorTypesMap: state.explore.donorTypesMap,\n\n    // Case Id\n    caseIDEnable: state.explore.caseIDEnable,\n    selectedCaseId: state.explore.selectedCaseId,\n\n    // Dataset\n    datasetEnable: state.explore.datasetEnable,\n    functionalAssayChecked: state.explore.functionalAssayChecked,\n    electronMicroscopyChecked: state.explore.electronMicroscopyChecked,\n    highResHLAChecked: state.explore.highResHLAChecked,\n    immunophenotypingChecked: state.explore.immunophenotypingChecked,\n    wholeExomeSequencingAvailable: state.explore.wholeExomeSequencingAvailable,\n    wholeExomeSequencingUnavailable:\n      state.explore.wholeExomeSequencingUnavailable,\n    snpsAvailable: state.explore.snpsAvailable,\n    snpsUnavailable: state.explore.snpsUnavailable,\n\n    // Electron Microscopy Images\n    emiMap: state.explore.emiMap,\n\n    // Immunophenotyping\n    immunMap: state.explore.immunMap,\n\n    // Genetic\n    geneticEnable: state.explore.geneticEnable,\n    grs1ScoreMin: state.explore.grs1ScoreMin,\n    grs1ScoreMax: state.explore.grs1ScoreMax,\n    grs1ScoreRange: state.explore.grs1ScoreRange,\n    grs2ScoreMin: state.explore.grs2ScoreMin,\n    grs2ScoreMax: state.explore.grs2ScoreMax,\n    grs2ScoreRange: state.explore.grs2ScoreRange,\n    aagrsScoreMin: state.explore.aagrsScoreMin,\n    aagrsScoreMax: state.explore.aagrsScoreMax,\n    aagrsScoreRange: state.explore.aagrsScoreRange,\n\n    // Genetic Map\n    geneticMap: state.explore.geneticMap,\n  };\n};\n\n// update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setRawData: (newRawData) =>\n      dispatch({ type: \"SET_RAW_DATA\", value: newRawData }),\n    setFilteredData: (newFilteredData) =>\n      dispatch({ type: \"SET_FILTERED_DATA\", value: newFilteredData }),\n    setCurrentCase: (newCase) =>\n      dispatch({ type: \"SET_CURRENT_CASE\", value: newCase }),\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Search);\n","import React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { API, Auth } from \"aws-amplify\";\nimport { trackPromise } from \"react-promise-tracker\";\n\nfunction FetchRawData(props) {\n  useEffect(() => {\n    //checkAuth();\n    trackPromise(fetchCase());\n\n    fetchDonorType();\n    fetchCauseOfDeath();\n    fetchHLA();\n    fetchSampleType();\n    fetchElectronMicroscopyImages();\n    fetchImmunophenotyping();\n    fetchGenetic();\n    fetchSNP();\n\n    //console.log(\"fetch data was called.\");\n  }, []);\n\n  async function checkAuth() {\n    try {\n      const authRes = await Auth.currentAuthenticatedUser();\n      console.log(\"auth result: \", authRes);\n      props.setSignedIn(true);\n    } catch (error) {\n      props.setSignedIn(false);\n    }\n  }\n\n  // fetch case Raw data\n  async function fetchCase() {\n    return await API.get(\"dbapi\", \"/db/case\")\n      .then((res) => {\n        props.setRawData(res);\n        // save all case id\n        let allCaseId = [];\n        for (let i = 0; i < res.length; i++) {\n          allCaseId.push(res[i][\"case_id\"]);\n        }\n        props.setAllCaseId(allCaseId);\n      })\n      .catch((error) => console.log(\"Amplify API call error\", error));\n  }\n\n  // fetch donor type and save as map\n  async function fetchDonorType() {\n    return await API.get(\"dbapi\", \"/db/donor_type\")\n      .then((res) => {\n        // donor types map\n        const dtMap = {};\n        for (var i = 0, dType; i < res.length; i++) {\n          dType = res[i];\n          dtMap[dType.donor_type_id] = dType.name;\n        }\n        props.setDonorTypesMap(dtMap);\n      })\n      .catch((error) => console.log(\"Amplify API call error\", error));\n  }\n\n  // fetch cause of death and save as map\n  async function fetchCauseOfDeath() {\n    return await API.get(\"dbapi\", \"/db/cause_of_death\")\n      .then((res) => {\n        // cause of death map\n        const cODMap = {};\n        for (var i = 0, causeOfDeath; i < res.length; i++) {\n          causeOfDeath = res[i];\n          cODMap[causeOfDeath.cause_of_death_id] = causeOfDeath.description;\n        }\n        props.setCauseOfDeathMap(cODMap);\n      })\n      .catch((error) => console.log(\"Amplify API call error\", error));\n  }\n\n  // fetch HLA and save as map\n  async function fetchHLA() {\n    return await API.get(\"dbapi\", \"/db/hla\")\n      .then((res) => {\n        // hla\n        props.setHLA(res);\n        // HLAMap is dictionary, key is case_id, value is dictionary of all HLA value pairs.\n        const HLAMap = {};\n        for (var i = 0, tempData, tempKey, tempMap = {}; i < res.length; i++) {\n          tempData = res[i];\n          Object.keys(tempData).map((key) => {\n            if (key === \"case_id\") {\n              tempKey = tempData[key];\n            } else {\n              tempMap[key] = tempData[key];\n            }\n          });\n          HLAMap[tempKey] = JSON.parse(JSON.stringify(tempMap)); // Deep copy\n        }\n        props.setHLAMap(HLAMap);\n      })\n      .catch((error) => console.log(\"Amplify API call error\", error));\n  }\n\n  // fetch sample types and save as map\n  async function fetchSampleType() {\n    return await API.get(\"dbapi\", \"/db/sample_type\")\n      .then((res) => {\n        // sample types map\n        const stMap = {};\n        for (var i = 0, sType; i < res.length; i++) {\n          sType = res[i];\n          stMap[sType.sample_type_id] = sType.name;\n        }\n        props.setSampleTypesMap(stMap);\n      })\n      .catch((error) => console.log(\"Amplify API call error\", error));\n  }\n\n  // fetch electron microscopy images and save as map\n  async function fetchElectronMicroscopyImages() {\n    return await API.get(\"dbapi\", \"/db/electron_microscopy_images\")\n      .then((res) => {\n        // emi map\n        const tempMap = {};\n        for (var i = 0, sType; i < res.length; i++) {\n          let caseId = res[i].case_id;\n          let emLink = res[i].EM_link;\n          if (!(caseId in tempMap)) {\n            tempMap[caseId] = [];\n          }\n          tempMap[caseId].push(emLink);\n        }\n        props.setEmiMap(tempMap);\n      })\n      .catch((error) => console.log(\"Amplify API call error\", error));\n  }\n\n  // fetch immunophenotyping and save as a map\n  async function fetchImmunophenotyping() {\n    return await API.get(\"dbapi\", \"/db/immunophenotyping\")\n      .then((res) => {\n        // immun map\n        const tempMap = {};\n        res.forEach((immun) => {\n          let caseId = immun.case_id;\n          let sampleType = immun.sample_type;\n          if (!(caseId in tempMap)) {\n            tempMap[caseId] = {};\n          }\n          if (!(sampleType in tempMap[caseId])) {\n            tempMap[caseId][sampleType] = {};\n          }\n          Object.keys(immun).forEach((attr) => {\n            if (attr === \"id\" || attr === \"case_id\" || attr === \"sample_type\") {\n              return;\n            }\n            tempMap[caseId][sampleType][attr] = immun[attr];\n          });\n          props.setImmunMap(tempMap);\n        });\n      })\n      .catch((error) => console.log(\"Amplify API call error\", error));\n  }\n\n  // fetch genetic and save as map\n  async function fetchGenetic() {\n    return await API.get(\"dbapi\", \"/db/genetic\")\n      .then((res) => {\n        // geneticMap is dictionary, key is case_id, value is dictionary of all genetic value pairs.\n        const geneticMap = {};\n        for (var i = 0, tempData, tempKey, tempMap = {}; i < res.length; i++) {\n          tempData = res[i];\n          Object.keys(tempData).map((key) => {\n            if (key === \"case_id\") {\n              tempKey = tempData[key];\n            } else {\n              tempMap[key] = tempData[key];\n            }\n          });\n          geneticMap[tempKey] = JSON.parse(JSON.stringify(tempMap)); // Deep copy\n        }\n        props.setGeneticMap(geneticMap);\n      })\n      .catch((error) => console.log(\"Amplify API call error\", error));\n  }\n\n  // fetch SNP\n  async function fetchSNP() {\n    return await API.get(\"dbapi\", \"/db/SNP\")\n      .then((res) => {\n        // SNP is dictionary, key is SNP_id.\n        const SNP = {};\n        for (var i = 0, tempData, tempKey, tempMap = {}; i < res.length; i++) {\n          tempData = res[i];\n          Object.keys(tempData).map((key) => {\n            if (key === \"SNP_id\") {\n              tempKey = tempData[key];\n            } else {\n              tempMap[key] = tempData[key];\n            }\n          });\n          SNP[tempKey] = JSON.parse(JSON.stringify(tempMap)); // Deep copy\n        }\n        props.setSNP(SNP);\n      })\n      .catch((error) => console.log(\"Amplify API call error\", error));\n  }\n\n  return <div></div>;\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    signedIn: state.auth.signedIn,\n    rawData: state.explore.rawData,\n    hlaMap: state.explore.hlaMap,\n  };\n};\n\n// update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setSignedIn: (newSignedIn) =>\n      dispatch({ type: \"SET_SIGNEDIN\", value: newSignedIn }),\n    setRawData: (newRawData) =>\n      dispatch({ type: \"SET_RAW_DATA\", value: newRawData }),\n    setAllCaseId: (newRawData) =>\n      dispatch({ type: \"SET_ALL_CASE_ID\", value: newRawData }),\n    setDonorTypesMap: (newDonorTypes) =>\n      dispatch({ type: \"SET_DONOR_TYPES_MAP\", value: newDonorTypes }),\n    setCauseOfDeathMap: (newCauseOfDeath) =>\n      dispatch({ type: \"SET_CAUSE_OF_DEATH_MAP\", value: newCauseOfDeath }),\n    setHLA: (newHLA) => dispatch({ type: \"SET_HLA\", value: newHLA }),\n    setHLAMap: (newHLAMap) =>\n      dispatch({ type: \"SET_HLA_MAP\", value: newHLAMap }),\n    setSampleTypesMap: (newSampleTypesMap) =>\n      dispatch({ type: \"SET_SAMPLETYPES_MAP\", value: newSampleTypesMap }),\n    setEmiMap: (newEmiMap) =>\n      dispatch({ type: \"SET_EMI_MAP\", value: newEmiMap }),\n    setImmunMap: (newImmunMap) =>\n      dispatch({ type: \"SET_IMMUN_MAP\", value: newImmunMap }),\n    setGeneticMap: (newGeneticMap) =>\n      dispatch({ type: \"SET_GENETIC_MAP\", value: newGeneticMap }),\n    setSNP: (newSNP) => dispatch({ type: \"SET_SNP\", value: newSNP }),\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FetchRawData);\n","import React, { Children } from \"react\";\nimport MuiDialogTitle from \"@material-ui/core/DialogTitle\";\nimport Typography from \"@material-ui/core/Typography\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    margin: 0,\n    padding: theme.spacing(2),\n  },\n  closeButton: {\n    position: \"absolute\",\n    right: theme.spacing(1),\n    top: theme.spacing(1),\n    color: theme.palette.grey[500],\n  },\n  title: {\n    fontWeight: \"900\",\n  },\n}));\n\nexport default function CaseViewTitle(props) {\n  const classes = useStyles();\n  const { onClose, children } = props;\n  return (\n    <div>\n      <MuiDialogTitle>\n        <div>\n          <Typography variant=\"h4\" className={classes.title}>\n            {children}\n          </Typography>\n        </div>\n        <IconButton\n          aria-label=\"close\"\n          onClick={onClose}\n          className={classes.closeButton}\n        >\n          <CloseIcon />\n        </IconButton>\n      </MuiDialogTitle>\n    </div>\n  );\n}\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Card from \"@material-ui/core/Card\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  sup: {\n    fontSize: \"75%\",\n    lineHeight: 0,\n    //position: \"relative\",\n    verticalAlign: \"super\",\n  },\n  container: {\n    maxHeight: \"56vh\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n    //minWidth: 650,\n  },\n  note: {\n    maxHeight: \"15vh\",\n    overflow: \"auto\",\n  },\n  noteText: {\n    padding: \"10px\",\n  },\n}));\n\nfunction DonorInformation(props) {\n  const classes = useStyles();\n  const donorType = props.donorTypesMap[props.currentCase.donor_type_id];\n\n  function createData(name, value) {\n    return { name, value };\n  }\n\n  const rows = [\n    createData(\"Donor Type\", donorType === null ? \"Unavailable\" : donorType),\n    createData(\n      \"Diabetes Duration (years)\",\n      props.currentCase.diabetes_hx_years === null\n        ? \"Unavailable\"\n        : props.currentCase.diabetes_hx_years\n    ),\n    createData(\n      \"Age (years)\",\n      props.currentCase.age_years === null\n        ? \"Unavailable\"\n        : props.currentCase.age_years\n    ),\n    createData(\"Sex\", props.currentCase.sex),\n    createData(\"Race/Ethnicity\", props.currentCase.race_ethnicity),\n    createData(\n      \"Height (cm)\",\n      props.currentCase.height_cm === null\n        ? \"Unavailable\"\n        : props.currentCase.height_cm\n    ),\n    createData(\n      \"Weight (kg)\",\n      props.currentCase.weight_kg === null\n        ? \"Unavailable\"\n        : props.currentCase.weight_kg\n    ),\n    createData(\n      \"BMI\",\n      props.currentCase.BMI === null ? \"Unavailable\" : props.currentCase.BMI\n    ),\n    createData(\n      \"BMI Percentile\",\n      props.currentCase.BMI_percentile === null\n        ? \"Unavailable\"\n        : props.currentCase.BMI_percentile >= 1\n        ? props.currentCase.BMI_percentile\n        : \"<1\"\n    ),\n    createData(\n      \"Cause of Death\",\n      props.currentCase.cause_of_death_id === null\n        ? \"Unavailable\"\n        : props.causeOfDeathMap[props.currentCase.cause_of_death_id]\n    ),\n    createData(\n      \"ABO Group\",\n      props.currentCase.ABO_blood_type === null\n        ? \"Unavailable\"\n        : props.currentCase.ABO_blood_type\n    ),\n  ];\n\n  if (props.currentCase.gestational_age_weeks != null) {\n    rows.splice(\n      3,\n      0,\n      createData(\n        \"Gestational Age (weeks)\",\n        props.currentCase.gestational_age_weeks === null\n          ? \"Unavailable\"\n          : props.currentCase.gestational_age_weeks\n      )\n    );\n  }\n\n  const dtComent = props.currentCase[\"donor_type_comments\"];\n  const showDtComment = dtComent !== null && dtComent !== \"0\" ? true : false;\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          Donor Information\n        </Typography>\n      </div>\n      <div>\n        <TableContainer component={Paper} className={classes.container}>\n          <Table className={classes.table} size=\"small\" stickyHeader>\n            <TableHead>\n              <TableRow>\n                <TableCell>Name</TableCell>\n                <TableCell align=\"right\">Value</TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {rows.map((row) => (\n                <TableRow key={row.name}>\n                  <TableCell component=\"th\" scope=\"row\">\n                    {row.name === \"BMI\" ? (\n                      <div>\n                        BMI (kg/m<sup>2</sup>)\n                      </div>\n                    ) : (\n                      row.name\n                    )}\n                  </TableCell>\n                  <TableCell align=\"right\">{row.value}</TableCell>\n                </TableRow>\n              ))}\n            </TableBody>\n          </Table>\n        </TableContainer>\n      </div>\n      {showDtComment ? (\n        <div>\n          <div>\n            <Typography variant=\"h5\" className={classes.title2}>\n              Donor Type Comment\n            </Typography>\n          </div>\n          <div>\n            <Card variant=\"outlined\" className={classes.note}>\n              <Typography\n                variant=\"body2\"\n                component=\"p\"\n                className={classes.noteText}\n              >\n                {dtComent}\n              </Typography>\n            </Card>\n          </div>\n        </div>\n      ) : null}\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n\n    // Donor Types (map)\n    donorTypesMap: state.explore.donorTypesMap,\n\n    // Cause of Deaht map\n    causeOfDeathMap: state.explore.causeOfDeathMap,\n  };\n};\n\nexport default connect(mapStateToProps, null)(DonorInformation);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Card from \"@material-ui/core/Card\";\nimport Typography from \"@material-ui/core/Typography\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(1),\n  },\n  container: {\n    maxHeight: \"60vh\",\n  },\n  container2: {\n    maxHeight: \"60vh\",\n    marginTop: \"4px\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n    //minWidth: 650,\n  },\n  note: {\n    maxHeight: \"15vh\",\n    overflow: \"auto\",\n  },\n  noteText: {\n    padding: \"10px\",\n  },\n}));\n\nfunction LabTestResults(props) {\n  const classes = useStyles();\n\n  const donorType = props.donorTypesMap[props.currentCase.donor_type_id];\n  const showNote =\n    donorType === \"Type 1 Diabetes\" &&\n    props.currentCase.mIAA_Result === \"Positive\";\n\n  function createData(name, value) {\n    return { name, value };\n  }\n\n  const rows = [\n    createData(\n      \"AAb Positive Number\",\n      props.currentCase.AAbtally === null\n        ? \"Unavailable\"\n        : props.currentCase.AAbtally\n    ),\n    createData(\n      \"GADA\",\n      props.currentCase.GADA_Result === null\n        ? \"Unavailable\"\n        : props.currentCase.GADA_Result\n    ),\n    createData(\n      \"IA2A\",\n      props.currentCase.IA_2A_Result === null\n        ? \"Unavailable\"\n        : props.currentCase.IA_2A_Result\n    ),\n    createData(\n      \"mIAA\",\n      props.currentCase.mIAA_Result === null\n        ? \"Unavailable\"\n        : props.currentCase.mIAA_Result\n    ),\n    createData(\n      \"ZnT8A\",\n      props.currentCase.ZnT8A_Result === null\n        ? \"Unavailable\"\n        : props.currentCase.ZnT8A_Result\n    ),\n  ];\n\n  const rows2 = [\n    createData(\n      \"C-peptide (ng/mL)\",\n      props.currentCase.C_peptide_ng_mL === null\n        ? \"Unavailable\"\n        : props.currentCase.C_peptide_ng_mL\n    ),\n    createData(\n      \"HbA1C (%)\",\n      props.currentCase.HbA1c_percent === null\n        ? \"Unavailable\"\n        : props.currentCase.HbA1c_percent\n    ),\n    createData(\n      \"Serologies\",\n      props.currentCase.serologies === null\n        ? \"Unavailable\"\n        : props.currentCase.serologies\n    ),\n  ];\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          Lab Results\n        </Typography>\n      </div>\n      <div>\n        <TableContainer component={Paper} className={classes.container}>\n          <Table className={classes.table} size=\"small\" stickyHeader>\n            <TableHead>\n              <TableRow>\n                <TableCell>Name</TableCell>\n                <TableCell align=\"right\">Value</TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {rows.map((row) => (\n                <TableRow key={row.name}>\n                  <TableCell component=\"th\" scope=\"row\">\n                    {row.name}\n                  </TableCell>\n                  <TableCell align=\"right\">{row.value}</TableCell>\n                </TableRow>\n              ))}\n            </TableBody>\n          </Table>\n        </TableContainer>\n\n        <TableContainer component={Paper} className={classes.container2}>\n          <Table className={classes.table} size=\"small\" stickyHeader>\n            <TableHead>\n              <TableRow>\n                <TableCell>Name</TableCell>\n                <TableCell align=\"right\">Value</TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {rows2.map((row) => (\n                <TableRow key={row.name}>\n                  <TableCell component=\"th\" scope=\"row\">\n                    {row.name}\n                  </TableCell>\n                  <TableCell align=\"right\">{row.value}</TableCell>\n                </TableRow>\n              ))}\n            </TableBody>\n          </Table>\n        </TableContainer>\n      </div>\n      {showNote ? (\n        <div>\n          <Typography variant=\"h5\" className={classes.title2}>\n            Insulin Autoantibody Note\n          </Typography>\n          <Card variant=\"outlined\" className={classes.note}>\n            <Typography\n              variant=\"body2\"\n              component=\"p\"\n              className={classes.noteText}\n            >\n              Insulin autoantibody (mIAA) is an important marker of islet\n              autoimmunity and is utilized in confirmation of type 1 diabetes\n              diagnosis. However, assay specificity, after a person has been on\n              exogenous insulin for more than 10 days, is no longer able to\n              distinguish insulin autoantibodies from insulin antibodies which\n              form in over 40% of patients treated with subcutaneous insulin\n              (S.E. Fineberg et al. Immunogenicity of Human Insulin.\n              Diabetologia (1983) 25:465-469). mIAA is not a reliable marker of\n              autoimmunity after a donor has been on insulin therapy for more\n              than 10 days.\n            </Typography>\n          </Card>\n        </div>\n      ) : null}\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n    // Donor Types (map)\n    donorTypesMap: state.explore.donorTypesMap,\n  };\n};\n\nexport default connect(mapStateToProps, null)(LabTestResults);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  container: {\n    maxHeight: \"55vh\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n    //minWidth: 650,\n  },\n}));\n\nfunction HighResolutionHLA(props) {\n  const classes = useStyles();\n\n  const data = props.hlaMap[props.currentCase.case_id];\n\n  function createData(name, value) {\n    return { name, value };\n  }\n\n  const rows = [\n    createData(\"A\", props.currentCase[\"HLA_A\"] || \"Unavailable\"),\n    createData(\"B\", props.currentCase[\"HLA_B\"] || \"Unavailable\"),\n    createData(\"C\", props.currentCase[\"HLA_C\"] || \"Unavailable\"),\n    createData(\"DRB1\", props.currentCase[\"HLA_DRB1\"] || \"Unavailable\"),\n    createData(\"DQA1\", props.currentCase[\"HLA_DQA1\"] || \"Unavailable\"),\n    createData(\"DQB1\", props.currentCase[\"HLA_DQB1\"] || \"Unavailable\"),\n    createData(\"DPA1\", props.currentCase[\"HLA_DPA1\"] || \"Unavailable\"),\n    createData(\"DPB1\", props.currentCase[\"HLA_DPB1\"] || \"Unavailable\"),\n  ];\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          High-Resolution HLA\n        </Typography>\n      </div>\n      <div>\n        <TableContainer component={Paper} className={classes.container}>\n          <Table className={classes.table} size=\"small\" stickyHeader>\n            <TableHead>\n              <TableRow>\n                <TableCell>Name</TableCell>\n                <TableCell align=\"right\">Allele 1, Allele 2</TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {rows.map((row) => (\n                <TableRow key={row.name}>\n                  <TableCell component=\"th\" scope=\"row\">\n                    {row.name}\n                  </TableCell>\n                  <TableCell align=\"right\">{row.value}</TableCell>\n                </TableRow>\n              ))}\n            </TableBody>\n          </Table>\n        </TableContainer>\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n    hlaMap: state.explore.hlaMap,\n  };\n};\n\nexport default connect(mapStateToProps, null)(HighResolutionHLA);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Divider from \"@material-ui/core/Divider\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  container: {\n    maxHeight: \"55vh\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n    //minWidth: 650,\n  },\n}));\n\nfunction TransplantHLA(props) {\n  const classes = useStyles();\n\n  const data = props.hlaMap[props.currentCase.case_id];\n\n  function createData(name, value) {\n    return { name, value };\n  }\n\n  const rows = [\n    createData(\"A\", props.currentCase[\"HLA_T_A\"] || \"Unavailable\"),\n    createData(\"B\", props.currentCase[\"HLA_T_B\"] || \"Unavailable\"),\n    createData(\"DR\", props.currentCase[\"HLA_T_DR\"] || \"Unavailable\"),\n    createData(\"DQB\", props.currentCase[\"HLA_T_DQB\"] || \"Unavailable\"),\n  ];\n\n  const dtComent = props.currentCase[\"donor_type_comments\"];\n  const pwComent = props.currentCase[\"pancreas_weight_comments\"];\n  const rows2 = [\n    createData(\n      \"Donor Type\",\n      dtComent !== null && dtComent !== \"0\" ? dtComent : \"Unavailable\"\n    ),\n    createData(\n      \"Pancreas Weight\",\n      pwComent !== null && pwComent !== \"0\" ? pwComent : \"Unavailable\"\n    ),\n  ];\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          Transplant HLA\n        </Typography>\n      </div>\n      <div>\n        <TableContainer component={Paper} className={classes.container}>\n          <Table className={classes.table} size=\"small\" stickyHeader>\n            <TableHead>\n              <TableRow>\n                <TableCell>Name</TableCell>\n                <TableCell align=\"right\">Allele 1/Allele 2</TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {rows.map((row) => (\n                <TableRow key={row.name}>\n                  <TableCell component=\"th\" scope=\"row\">\n                    {row.name}\n                  </TableCell>\n                  <TableCell align=\"right\">{row.value}</TableCell>\n                </TableRow>\n              ))}\n            </TableBody>\n          </Table>\n        </TableContainer>\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n    hlaMap: state.explore.hlaMap,\n  };\n};\n\nexport default connect(mapStateToProps, null)(TransplantHLA);\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Box from \"@material-ui/core/Box\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Divider from \"@material-ui/core/Divider\";\nimport { connect } from \"react-redux\";\nimport DonorInformation from \"./component/DonorInformation\";\nimport LabTestResults from \"./component/LabTestResults\";\nimport HighResolutionHLA from \"./component/HighResolutionHLA\";\nimport TransplantHLA from \"./component/TransplantHLA\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  content: {\n    paddingTop: theme.spacing(2),\n  },\n  paper: {\n    padding: theme.spacing(2),\n    color: theme.palette.text.primary,\n    height: \"70vh\",\n    maxHeight: \"75vh\",\n    overflow: \"auto\",\n  },\n}));\n\nfunction DonorSummary(props) {\n  const classes = useStyles();\n\n  return (\n    <div>\n      <Grid container spacing={2} justify={\"flex-start\"} alignItems={\"stretch\"}>\n        <Grid item xs={12} sm={6} md={4} lg={3} xl={3}>\n          <Paper elevation={3} className={classes.paper}>\n            <DonorInformation />\n          </Paper>\n        </Grid>\n        <Grid item xs={12} sm={6} md={4} lg={3} xl={3}>\n          <Paper elevation={3} className={classes.paper}>\n            <LabTestResults />\n          </Paper>\n        </Grid>\n        <Grid item xs={12} sm={6} md={4} lg={3} xl={3}>\n          <Paper elevation={3} className={classes.paper}>\n            <TransplantHLA />\n          </Paper>\n        </Grid>\n        <Grid item xs={12} sm={6} md={4} lg={3} xl={3}>\n          <Paper elevation={3} className={classes.paper}>\n            <HighResolutionHLA />\n          </Paper>\n        </Grid>\n      </Grid>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n  };\n};\n\nexport default connect(mapStateToProps, null)(DonorSummary);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Card from \"@material-ui/core/Card\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  container: {\n    maxHeight: \"56vh\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n    //minWidth: 650,\n  },\n  note: {\n    maxHeight: \"25vh\",\n    overflow: \"auto\",\n  },\n  noteText: {\n    padding: \"10px\",\n  },\n}));\n\nfunction HospitalAdmission(props) {\n  const classes = useStyles();\n  const donorType = props.donorTypesMap[props.currentCase.donor_type_id];\n\n  function createData(name, value) {\n    return { name, value };\n  }\n\n  const rows = [\n    createData(\n      \"Cause of Death\",\n      props.currentCase.cause_of_death_id === null\n        ? \"Unavailable\"\n        : props.causeOfDeathMap[props.currentCase.cause_of_death_id]\n    ),\n    createData(\n      \"Est Downtime (minutes)\",\n      props.currentCase.downtime_minutes === null\n        ? \"Unavailable\"\n        : props.currentCase.downtime_minutes\n    ),\n    createData(\"Diabetes Type\", donorType === null ? \"Unavailable\" : donorType),\n  ];\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          Hospital Admission\n        </Typography>\n      </div>\n      <div>\n        <TableContainer component={Paper} className={classes.container}>\n          <Table className={classes.table} size=\"small\" stickyHeader>\n            <TableHead>\n              <TableRow>\n                <TableCell>Name</TableCell>\n                <TableCell align=\"right\">Value</TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {rows.map((row) => (\n                <TableRow key={row.name}>\n                  <TableCell component=\"th\" scope=\"row\">\n                    {row.name}\n                  </TableCell>\n                  <TableCell align=\"right\">{row.value}</TableCell>\n                </TableRow>\n              ))}\n            </TableBody>\n          </Table>\n        </TableContainer>\n      </div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title2}>\n          Admission Course\n        </Typography>\n      </div>\n      <div>\n        <Card variant=\"outlined\" className={classes.note}>\n          <Typography\n            variant=\"body2\"\n            component=\"p\"\n            className={classes.noteText}\n          >\n            {props.currentCase.admission_course\n              ? props.currentCase.admission_course\n              : \"Unavailable\"}\n          </Typography>\n        </Card>\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n\n    // Donor Types (map)\n    donorTypesMap: state.explore.donorTypesMap,\n\n    // Cause of Deaht map\n    causeOfDeathMap: state.explore.causeOfDeathMap,\n  };\n};\n\nexport default connect(mapStateToProps, null)(HospitalAdmission);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Card from \"@material-ui/core/Card\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  container: {\n    maxHeight: \"56vh\",\n  },\n  container2: {\n    maxHeight: \"56vh\",\n    marginTop: \"10px\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n    //minWidth: 650,\n  },\n  note: {\n    maxHeight: \"25vh\",\n    overflow: \"auto\",\n  },\n  noteText: {\n    padding: \"10px\",\n  },\n}));\n\nfunction ClinicalHistory2(props) {\n  const classes = useStyles();\n  const donorType = props.donorTypesMap[props.currentCase.donor_type_id];\n\n  function createData(name, value) {\n    return { name, value };\n  }\n\n  const rows = [\n    createData(\n      \"Alcohol Use\",\n      props.currentCase.alcohol_use === null\n        ? \"Unavailable\"\n        : props.currentCase.alcohol_use\n    ),\n    createData(\n      \"Smoking/Drug Use\",\n      props.currentCase.drug_use === null\n        ? \"Unavailable\"\n        : props.currentCase.drug_use\n    ),\n    createData(\n      \"Allergies\",\n      props.currentCase.allergies === null\n        ? \"Unavailable\"\n        : props.currentCase.allergies\n    ),\n  ];\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          Clinical History\n        </Typography>\n      </div>\n\n      <div>\n        <Card variant=\"outlined\" className={classes.note}>\n          <Typography\n            variant=\"body2\"\n            component=\"p\"\n            className={classes.noteText}\n          >\n            {props.currentCase.clinical_history\n              ? props.currentCase.clinical_history\n              : \"Unavailable\"}\n          </Typography>\n        </Card>\n      </div>\n\n      <div>\n        <TableContainer component={Paper} className={classes.container2}>\n          <Table className={classes.table} size=\"small\" stickyHeader>\n            <TableHead>\n              <TableRow>\n                <TableCell>Name</TableCell>\n                <TableCell align=\"right\">Value</TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {rows.map((row) => (\n                <TableRow key={row.name}>\n                  <TableCell component=\"th\" scope=\"row\">\n                    {row.name}\n                  </TableCell>\n                  <TableCell align=\"right\">{row.value}</TableCell>\n                </TableRow>\n              ))}\n            </TableBody>\n          </Table>\n        </TableContainer>\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n\n    // Donor Types (map)\n    donorTypesMap: state.explore.donorTypesMap,\n\n    // Cause of Deaht map\n    causeOfDeathMap: state.explore.causeOfDeathMap,\n  };\n};\n\nexport default connect(mapStateToProps, null)(ClinicalHistory2);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  container: {\n    maxHeight: \"56vh\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n    //minWidth: 650,\n  },\n}));\n\nfunction Medication(props) {\n  const classes = useStyles();\n  const donorType = props.donorTypesMap[props.currentCase.donor_type_id];\n\n  function createData(name, value) {\n    return { name, value };\n  }\n\n  const rows = [\n    createData(\n      \"Diabetes Medication\",\n      props.currentCase.meds_diabetes === null\n        ? \"Unavailable\"\n        : props.currentCase.meds_diabetes\n    ),\n    createData(\n      \"Other Medication\",\n      props.currentCase.meds_home === null\n        ? \"Unavailable\"\n        : props.currentCase.meds_home\n    ),\n    createData(\n      \"Hospital Medication\",\n      props.currentCase.meds_hospital === null\n        ? \"Unavailable\"\n        : props.currentCase.meds_hospital\n    ),\n  ];\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          Medication\n        </Typography>\n      </div>\n      <div>\n        <TableContainer component={Paper} className={classes.container}>\n          <Table className={classes.table} size=\"small\" stickyHeader>\n            <TableHead>\n              <TableRow>\n                <TableCell>Name</TableCell>\n                <TableCell align=\"right\">Value</TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {rows.map((row) => (\n                <TableRow key={row.name}>\n                  <TableCell component=\"th\" scope=\"row\">\n                    {row.name}\n                  </TableCell>\n                  <TableCell align=\"right\">{row.value}</TableCell>\n                </TableRow>\n              ))}\n            </TableBody>\n          </Table>\n        </TableContainer>\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n\n    // Donor Types (map)\n    donorTypesMap: state.explore.donorTypesMap,\n\n    // Cause of Deaht map\n    causeOfDeathMap: state.explore.causeOfDeathMap,\n  };\n};\n\nexport default connect(mapStateToProps, null)(Medication);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Card from \"@material-ui/core/Card\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  container: {\n    maxHeight: \"56vh\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n    //minWidth: 650,\n  },\n  note: {\n    maxHeight: \"25vh\",\n    overflow: \"auto\",\n  },\n  noteText: {\n    padding: \"10px\",\n  },\n}));\n\nfunction HospitalLaboratoryPanel(props) {\n  const classes = useStyles();\n  const donorType = props.donorTypesMap[props.currentCase.donor_type_id];\n\n  function createData(name, value) {\n    return { name, value };\n  }\n\n  const rows = [\n    createData(\n      \"Hemodiluted\",\n      props.currentCase.hemodiluted_status === null\n        ? \"Unavailable\"\n        : props.currentCase.hemodiluted_status\n    ),\n    createData(\n      \"Peak Glucose (mg/dL)\",\n      props.currentCase.peak_glucose_mg_dL === null\n        ? \"Unavailable\"\n        : props.currentCase.peak_glucose_mg_dL\n    ),\n    createData(\n      \"Infections\",\n      props.currentCase.infections === null\n        ? \"Unavailable\"\n        : props.currentCase.infections\n    ),\n  ];\n\n  if (props.currentCase.SARS_COV_2_results != null) {\n    rows.push(\n      createData(\n        \"SARS-CoV-2\",\n        props.currentCase.SARS_COV_2_results === null\n          ? \"Unavailable\"\n          : props.currentCase.SARS_COV_2_results\n      )\n    );\n  }\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          Hospital Laboratory Panel\n        </Typography>\n      </div>\n      <div>\n        <TableContainer component={Paper} className={classes.container}>\n          <Table className={classes.table} size=\"small\" stickyHeader>\n            <TableHead>\n              <TableRow>\n                <TableCell>Name</TableCell>\n                <TableCell align=\"right\">Value</TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {rows.map((row) => (\n                <TableRow key={row.name}>\n                  <TableCell component=\"th\" scope=\"row\">\n                    {row.name}\n                  </TableCell>\n                  <TableCell align=\"right\">{row.value}</TableCell>\n                </TableRow>\n              ))}\n            </TableBody>\n          </Table>\n        </TableContainer>\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n\n    // Donor Types (map)\n    donorTypesMap: state.explore.donorTypesMap,\n\n    // Cause of Deaht map\n    causeOfDeathMap: state.explore.causeOfDeathMap,\n  };\n};\n\nexport default connect(mapStateToProps, null)(HospitalLaboratoryPanel);\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Box from \"@material-ui/core/Box\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Divider from \"@material-ui/core/Divider\";\nimport { connect } from \"react-redux\";\nimport HospitalAdmission from \"./component/HospitalAdmission\";\nimport ClinicalHistory2 from \"./component/ClinicalHistory2\";\nimport Medication from \"./component/Medication\";\nimport HospitalLaboratoryPanel from \"./component/HospitalLaboratoryPanel\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  content: {\n    paddingTop: theme.spacing(2),\n  },\n  paper: {\n    padding: theme.spacing(2),\n    color: theme.palette.text.primary,\n    height: \"70vh\",\n    maxHeight: \"75vh\",\n    overflow: \"auto\",\n  },\n}));\n\nfunction ClinicalHistory(props) {\n  const classes = useStyles();\n\n  return (\n    <div>\n      <Grid container spacing={2} justify={\"center\"} alignItems={\"stretch\"}>\n        <Grid item xs={12} sm={3}>\n          <Paper elevation={3} className={classes.paper}>\n            <HospitalAdmission />\n          </Paper>\n        </Grid>\n        <Grid item xs={12} sm={3}>\n          <Paper elevation={3} className={classes.paper}>\n            <ClinicalHistory2 />\n          </Paper>\n        </Grid>\n        <Grid item xs={12} sm={3}>\n          <Paper elevation={3} className={classes.paper}>\n            <Medication />\n          </Paper>\n        </Grid>\n        <Grid item xs={12} sm={3}>\n          <Paper elevation={3} className={classes.paper}>\n            <HospitalLaboratoryPanel />\n          </Paper>\n        </Grid>\n      </Grid>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n  };\n};\n\nexport default connect(mapStateToProps, null)(ClinicalHistory);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Card from \"@material-ui/core/Card\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  container: {\n    maxHeight: \"56vh\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n  },\n  note: {\n    maxHeight: \"25vh\",\n    overflow: \"auto\",\n  },\n  noteText: {\n    padding: \"10px\",\n  },\n}));\n\nfunction CaseProcessing(props) {\n  const classes = useStyles();\n  const donorType = props.donorTypesMap[props.currentCase.donor_type_id];\n\n  function createData(name, value) {\n    return { name, value };\n  }\n\n  const rows = [\n    createData(\n      \"Terminal Hospital Duration\",\n      props.currentCase.terminal_hospital_duration === null\n        ? \"Unavailable\"\n        : props.currentCase.terminal_hospital_duration\n    ),\n    createData(\n      \"Organ Transport Time\",\n      props.currentCase.organ_transport_time === null\n        ? \"Unavailable\"\n        : props.currentCase.organ_transport_time\n    ),\n    createData(\n      \"Tissue Recovery Type\",\n      props.currentCase.case_recovery_type === null\n        ? \"Unavailable\"\n        : props.currentCase.case_recovery_type\n    ),\n    createData(\n      \"Total Pancreas Weight (g)\",\n      props.currentCase.pancreas_weight_grams === null\n        ? \"Unavailable\"\n        : props.currentCase.pancreas_weight_grams\n    ),\n    createData(\n      \"Pancreas Head (g)\",\n      props.currentCase.pancreas_head_grams === null\n        ? \"Unavailable\"\n        : props.currentCase.pancreas_head_grams\n    ),\n    createData(\n      \"Pancreas Body (g)\",\n      props.currentCase.pancreas_body_grams === null\n        ? \"Unavailable\"\n        : props.currentCase.pancreas_body_grams\n    ),\n    createData(\n      \"Pancreas Tail (g)\",\n      props.currentCase.pancreas_tail_grams === null\n        ? \"Unavailable\"\n        : props.currentCase.pancreas_tail_grams\n    ),\n  ];\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          Case Processing\n        </Typography>\n      </div>\n      <div>\n        <TableContainer component={Paper} className={classes.container}>\n          <Table className={classes.table} size=\"small\" stickyHeader>\n            <TableHead>\n              <TableRow>\n                <TableCell>Name</TableCell>\n                <TableCell align=\"right\">Value</TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {rows.map((row) => (\n                <TableRow key={row.name}>\n                  <TableCell component=\"th\" scope=\"row\">\n                    {row.name}\n                  </TableCell>\n                  <TableCell align=\"right\">{row.value}</TableCell>\n                </TableRow>\n              ))}\n            </TableBody>\n          </Table>\n        </TableContainer>\n      </div>\n      {typeof props.currentCase.pancreas_weight_comments === \"string\" &&\n      props.currentCase.pancreas_weight_comments.length > 1 ? (\n        <div>\n          <div>\n            <Typography variant=\"h5\" className={classes.title2}>\n              Pancreas Weight Comment\n            </Typography>\n          </div>\n          <div>\n            <Card variant=\"outlined\" className={classes.note}>\n              <Typography\n                variant=\"body2\"\n                component=\"p\"\n                className={classes.noteText}\n              >\n                {props.currentCase.pancreas_weight_comments\n                  ? props.currentCase.pancreas_weight_comments\n                  : \"Unavailable\"}\n              </Typography>\n            </Card>\n          </div>\n        </div>\n      ) : null}\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n\n    // Donor Types (map)\n    donorTypesMap: state.explore.donorTypesMap,\n\n    // Cause of Deaht map\n    causeOfDeathMap: state.explore.causeOfDeathMap,\n  };\n};\n\nexport default connect(mapStateToProps, null)(CaseProcessing);\n","import React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { API } from \"aws-amplify\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  container: {\n    maxHeight: \"56vh\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n    //minWidth: 650,\n  },\n}));\n\nfunction TissueQuality(props) {\n  const classes = useStyles();\n  const [percentList, setPercentList] = useState();\n  useEffect(() => {\n    if (props.currentCase.case_id !== \"\") {\n      getPercentViability(props.currentCase.case_id);\n    }\n  }, [props.currentCase.case_id]);\n\n  async function getPercentViability(id) {\n    return await API.get(\"dbapi\", \"/db/percent_viability\", {\n      queryStringParameters: {\n        case_id: id,\n      },\n    })\n      .then((res) => {\n        setPercentList(res);\n      })\n      .catch((error) => {\n        console.log(\"[Percent Viability] Amplify API call error\", error);\n      });\n  }\n\n  function createData(name, value) {\n    return { name, value };\n  }\n\n  const rows = [\n    createData(\n      \"RIN\",\n      props.currentCase.RIN === null ? \"Unavailable\" : props.currentCase.RIN\n    ),\n    createData(\n      \"Sample Type\",\n      props.currentCase.sample_type_id === null\n        ? \"Unavailable\"\n        : props.sampleTypesMap[props.currentCase.sample_type_id]\n    ),\n    createData(\n      \"260/280\",\n      props.currentCase.ratio === null ? \"Unavailable\" : props.currentCase.ratio\n    ),\n  ];\n\n  const rows2 = [];\n\n  if (percentList && percentList.length != 0) {\n    let typeName = \"\";\n    let typeIndex = 1;\n    for (let i = 0; i < percentList.length; i++) {\n      if (props.sampleTypesMap[percentList[i][\"sample_type_id\"]] !== typeName) {\n        typeName = props.sampleTypesMap[percentList[i][\"sample_type_id\"]];\n        typeIndex = 1;\n      } else {\n        typeIndex += 1;\n      }\n\n      rows2.push(\n        createData(\n          typeName + \" set \" + typeIndex,\n          percentList[i][\"percent_viability\"] + \"%\"\n        )\n      );\n    }\n  } else {\n    rows2.push(createData(\"Cell Viability\", \"Not Available\"));\n  }\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          RNA Quality\n        </Typography>\n      </div>\n      <div>\n        <TableContainer component={Paper} className={classes.container}>\n          <Table className={classes.table} size=\"small\" stickyHeader>\n            <TableHead>\n              <TableRow>\n                <TableCell>Name</TableCell>\n                <TableCell align=\"right\">Value</TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {rows.map((row) => (\n                <TableRow key={row.name}>\n                  <TableCell component=\"th\" scope=\"row\">\n                    {row.name}\n                  </TableCell>\n                  <TableCell align=\"right\">{row.value}</TableCell>\n                </TableRow>\n              ))}\n            </TableBody>\n          </Table>\n        </TableContainer>\n      </div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title2}>\n          Cell Viability\n        </Typography>\n      </div>\n      <div>\n        <TableContainer component={Paper} className={classes.container}>\n          <Table className={classes.table} size=\"small\" stickyHeader>\n            <TableHead>\n              <TableRow>\n                <TableCell>Name</TableCell>\n                <TableCell align=\"right\">Value</TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {rows2.map((row) => (\n                <TableRow key={row.name}>\n                  <TableCell component=\"th\" scope=\"row\">\n                    {row.name}\n                  </TableCell>\n                  <TableCell align=\"right\">{row.value}</TableCell>\n                </TableRow>\n              ))}\n            </TableBody>\n          </Table>\n        </TableContainer>\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n\n    // Sample Types (map)\n    sampleTypesMap: state.explore.sampleTypesMap,\n\n    // Cause of Deaht map\n    causeOfDeathMap: state.explore.causeOfDeathMap,\n  };\n};\n\nexport default connect(mapStateToProps, null)(TissueQuality);\n","import React, { useState, useEffect, Component } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport ImageGallery from \"react-image-gallery\";\nimport Zoom from \"react-medium-image-zoom\";\nimport \"react-medium-image-zoom/dist/styles.css\";\nimport { Typography } from \"@material-ui/core\";\n\nclass NpodImageGallery extends Component {\n  constructor() {\n    super();\n  }\n\n  _imageRender(item) {\n    const imgStyle = {\n      maxWidth: \"600px\",\n    };\n\n    return (\n      <div>\n        <Zoom>\n          <img src={item.original} style={imgStyle} />\n        </Zoom>\n      </div>\n    );\n  }\n\n  render() {\n    const no_image_available = [\n      {\n        original: \"/assets/imageNotFound.jpg\",\n        thumbnail: \"/assets/imageNotFound.jpg\",\n      },\n    ];\n    const properties = {\n      items:\n        this.props.urlList.length === 0\n          ? no_image_available\n          : this.props.urlList,\n      showPlayButton: false,\n      showFullscreenButton: false,\n      renderItem: this._imageRender.bind(this),\n    };\n\n    return (\n      <div>\n        {this.props.urlList.length === 0 ? (\n          <Typography variant=\"h6\">Not Available for this Case</Typography>\n        ) : (\n          <ImageGallery {...properties} />\n        )}\n      </div>\n    );\n  }\n}\n\nexport default NpodImageGallery;\n","import React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\nimport { Storage } from \"aws-amplify\";\nimport NpodImageGallery from \"../../component/NpodImageGallery\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    marginTop: theme.spacing(1),\n    marginBottom: theme.spacing(1),\n    fontWeight: \"900\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n}));\n\nconst ImageViewerTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction TissueQualityImageViewer(props) {\n  const [fileUrlList, setFileUrlList] = useState([]);\n  const [imageUrlList, setImageUrlList] = useState([]);\n  useEffect(() => {\n    async function getFile(fileKey) {\n      try {\n        await Storage.get(fileKey).then((url) => {\n          setFileUrlList((oldList) => [...oldList, { url }]);\n          setImageUrlList((oldList) => [\n            ...oldList,\n            { original: url, thumbnail: url },\n          ]);\n          if (currentImageUrl === \"\") {\n            setCurrentImageUrl(url);\n          }\n        });\n      } catch (error) {\n        console.error(\"[S3]Get file error\", error);\n      }\n    }\n\n    async function getFileList() {\n      try {\n        await Storage.list(\n          \"cases/\" + props.currentCase.case_id + \"/Tissue Quality/\"\n        ).then((fileKeyList) => {\n          if (fileKeyList.length !== 0) {\n            for (let i = 0; i < fileKeyList.length; i++) {\n              // filter out folder\n              if (fileKeyList[i].size) {\n                getFile(fileKeyList[i].key);\n              }\n            }\n          }\n        });\n      } catch (error) {\n        console.error(\"[S3]Get file list error\", error);\n      }\n    }\n    getFileList();\n  }, [props.currentCase.case_id]);\n\n  const classes = useStyles();\n\n  const [currentImageUrl, setCurrentImageUrl] = useState(\"\");\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        Single click to zoom-in image. Click once more to zoom-out.\n        <br />\n        Click left and right arrow button to browse gallery.\n      </div>\n    </React.Fragment>\n  );\n\n  //console.log(\"Image viewer file list\", imageUrlList);\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          Image Viewer\n        </Typography>\n        <Typography variant=\"body1\" className={classes.title2}>\n          How-to-use{\"  \"}\n          <ImageViewerTooltip title={helpText} placement=\"right\">\n            <HelpOutlineIcon className={classes.helpIcon} />\n          </ImageViewerTooltip>\n        </Typography>\n      </div>\n      <div>\n        <NpodImageGallery urlList={imageUrlList} />\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n\n    // Donor Types (map)\n    donorTypesMap: state.explore.donorTypesMap,\n\n    // Cause of Deaht map\n    causeOfDeathMap: state.explore.causeOfDeathMap,\n  };\n};\n\nexport default connect(mapStateToProps, null)(TissueQualityImageViewer);\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Box from \"@material-ui/core/Box\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Divider from \"@material-ui/core/Divider\";\nimport { connect } from \"react-redux\";\nimport CaseProcessing from \"./component/CaseProcessing\";\nimport TissueQuality from \"./component/TissueQuality\";\nimport TissueQualityImageViewer from \"./component/TissueQualityImageViewer\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  content: {\n    paddingTop: theme.spacing(2),\n  },\n  paper: {\n    padding: theme.spacing(2),\n    color: theme.palette.text.primary,\n    height: \"70vh\",\n    maxHeight: \"75vh\",\n    overflow: \"auto\",\n  },\n}));\n\nfunction ClinicalHistory(props) {\n  const classes = useStyles();\n\n  return (\n    <div>\n      <Grid container spacing={2} justify={\"center\"} alignItems={\"stretch\"}>\n        <Grid item xs={12} sm={3}>\n          <Paper elevation={3} className={classes.paper}>\n            <CaseProcessing />\n          </Paper>\n        </Grid>\n        <Grid item xs={12} sm={3}>\n          <Paper elevation={3} className={classes.paper}>\n            <TissueQuality />\n          </Paper>\n        </Grid>\n        <Grid item xs={12} sm={6}>\n          <Paper elevation={3} className={classes.paper}>\n            <TissueQualityImageViewer />\n          </Paper>\n        </Grid>\n      </Grid>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n  };\n};\n\nexport default connect(mapStateToProps, null)(ClinicalHistory);\n","import React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\nimport { Storage } from \"aws-amplify\";\nimport NpodImageGallery from \"../../component/NpodImageGallery\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    marginTop: theme.spacing(1),\n    marginBottom: theme.spacing(1),\n    fontWeight: \"900\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n}));\n\nconst ImageViewerTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction FunctionalAssayImageViewer(props) {\n  const [fileUrlList, setFileUrlList] = useState([]);\n  const [imageUrlList, setImageUrlList] = useState([]);\n  useEffect(() => {\n    async function getFile(fileKey) {\n      try {\n        await Storage.get(fileKey).then((url) => {\n          setFileUrlList((oldList) => [...oldList, { url }]);\n          setImageUrlList((oldList) => [\n            ...oldList,\n            { original: url, thumbnail: url },\n          ]);\n          if (currentImageUrl === \"\") {\n            setCurrentImageUrl(url);\n          }\n        });\n      } catch (error) {\n        console.error(\"[S3]Get file error\", error);\n      }\n    }\n\n    async function getFileList() {\n      try {\n        await Storage.list(\n          \"cases/\" + props.currentCase.case_id + \"/Functional Assay/\"\n        ).then((fileKeyList) => {\n          if (fileKeyList.length !== 0) {\n            for (let i = 0; i < fileKeyList.length; i++) {\n              // filter out folder\n              if (fileKeyList[i].size) {\n                getFile(fileKeyList[i].key);\n              }\n            }\n          }\n        });\n      } catch (error) {\n        console.error(\"[S3]Get file list error\", error);\n      }\n    }\n    getFileList();\n  }, [props.currentCase.case_id]);\n\n  const classes = useStyles();\n\n  const [currentImageUrl, setCurrentImageUrl] = useState(\"\");\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        Single click to zoom-in image. Click once more to zoom-out.\n        <br />\n        Click left and right arrow button to browse gallery.\n      </div>\n    </React.Fragment>\n  );\n\n  //console.log(\"Image viewer file list\", imageUrlList);\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          Image Viewer\n        </Typography>\n        <Typography variant=\"body1\" className={classes.title2}>\n          How-to-use{\"  \"}\n          <ImageViewerTooltip title={helpText} placement=\"right\">\n            <HelpOutlineIcon className={classes.helpIcon} />\n          </ImageViewerTooltip>\n        </Typography>\n      </div>\n      <div>\n        <NpodImageGallery urlList={imageUrlList} />\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n\n    // Donor Types (map)\n    donorTypesMap: state.explore.donorTypesMap,\n\n    // Cause of Deaht map\n    causeOfDeathMap: state.explore.causeOfDeathMap,\n  };\n};\n\nexport default connect(mapStateToProps, null)(FunctionalAssayImageViewer);\n","import React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { API } from \"aws-amplify\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  container: {\n    maxHeight: \"56vh\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n    //minWidth: 650,\n  },\n}));\n\nfunction PeakInsulinSecretionDuringStimulation(props) {\n  const classes = useStyles();\n  // const [glucoseStimulation, setGlucoseStimulation] = useState(null);\n  // const [highKCLStimulation, setHighKCLStimulation] = useState(null);\n\n  // useEffect(() => {\n  //   if (props.currentCase.case_id === \"6430\") {\n  //     GetMaxInsulin(props.currentCase.case_id, 95, 64, \"KCL\");\n  //   } else if (props.currentCase.case_id === \"6431\") {\n  //     GetMaxInsulin(props.currentCase.case_id, 100, 64, \"KCL\");\n  //   } else {\n  //     GetMaxInsulin(props.currentCase.case_id, 80, 64, \"KCL\");\n  //   }\n  //   GetMaxInsulin(props.currentCase.case_id, 35, 15, \"glucose\");\n  // }, [props.currentCase.case_id]);\n\n  // async function GetMaxInsulin(caseId, highTime, lowTime, stiName) {\n  //   return await API.get(\"dbapi\", \"/db/max_insulin\", {\n  //     queryStringParameters: {\n  //       case_id: caseId,\n  //       high_time: highTime,\n  //       low_time: lowTime,\n  //     },\n  //   })\n  //     .then((res) => {\n  //       if (stiName === \"glucose\") {\n  //         setGlucoseStimulation(res[0][\"MAX(insulin_mU_L)\"]);\n  //       } else if (stiName === \"KCL\") {\n  //         setHighKCLStimulation(res[0][\"MAX(insulin_mU_L)\"]);\n  //       }\n  //     })\n  //     .catch((err) => {\n  //       console.error(\"Get Max Insulin Error\", err);\n  //     });\n  // }\n\n  function createData(name, value) {\n    return { name, value };\n  }\n\n  const rows = [\n    createData(\n      \"16.7mM Glucose Stimulation\",\n      props.currentCase.glucose_insulin === null\n        ? \"Unavailable\"\n        : props.currentCase.glucose_insulin\n    ),\n    createData(\n      \"High KCl Stimulation\",\n      props.currentCase.KCL_insulin === null\n        ? \"Unavailable\"\n        : props.currentCase.KCL_insulin\n    ),\n  ];\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          Peak Insulin Secretion During Stimulation (mU/L)\n        </Typography>\n      </div>\n      <div>\n        <TableContainer component={Paper} className={classes.container}>\n          <Table className={classes.table} size=\"small\" stickyHeader>\n            <TableHead>\n              <TableRow>\n                <TableCell>Name</TableCell>\n                <TableCell align=\"right\">Value</TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {rows.map((row) => (\n                <TableRow key={row.name}>\n                  <TableCell component=\"th\" scope=\"row\">\n                    {row.name}\n                  </TableCell>\n                  <TableCell align=\"right\">{row.value}</TableCell>\n                </TableRow>\n              ))}\n            </TableBody>\n          </Table>\n        </TableContainer>\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n\n    // Sample Types (map)\n    sampleTypesMap: state.explore.sampleTypesMap,\n\n    // Cause of Deaht map\n    causeOfDeathMap: state.explore.causeOfDeathMap,\n  };\n};\n\nexport default connect(\n  mapStateToProps,\n  null\n)(PeakInsulinSecretionDuringStimulation);\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Box from \"@material-ui/core/Box\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Divider from \"@material-ui/core/Divider\";\nimport { connect } from \"react-redux\";\nimport FunctionalAssayImageViewer from \"./component/FunctionalAssayImageViewer\";\nimport PeakInsulinSecretionDuringStimulation from \"./component/PeakInsulinSecretionDuringStimulation\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  content: {\n    paddingTop: theme.spacing(2),\n  },\n  paper: {\n    padding: theme.spacing(2),\n    color: theme.palette.text.primary,\n    height: \"70vh\",\n    maxHeight: \"75vh\",\n    overflow: \"auto\",\n  },\n}));\n\nfunction FunctionalAssay(props) {\n  const classes = useStyles();\n\n  return (\n    <div>\n      <Grid container spacing={2} justify={\"center\"} alignItems={\"stretch\"}>\n        <Grid item xs={12} sm={8}>\n          <Paper elevation={3} className={classes.paper}>\n            <FunctionalAssayImageViewer />\n          </Paper>\n        </Grid>\n        <Grid item xs={12} sm={4}>\n          <Paper elevation={3} className={classes.paper}>\n            <PeakInsulinSecretionDuringStimulation />\n          </Paper>\n        </Grid>\n      </Grid>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n  };\n};\n\nexport default connect(mapStateToProps, null)(FunctionalAssay);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Card from \"@material-ui/core/Card\";\nimport Button from \"@material-ui/core/Button\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  container: {\n    maxHeight: \"56vh\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n    //minWidth: 650,\n  },\n  note: {\n    maxHeight: \"25vh\",\n    overflow: \"auto\",\n  },\n  noteText: {\n    padding: \"10px\",\n  },\n}));\n\nfunction HistopathologyInfo(props) {\n  const classes = useStyles();\n\n  function createData(name, value) {\n    return { name, value };\n  }\n\n  const rows = [];\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          Histopathology Information\n        </Typography>\n      </div>\n      <div>\n        <Card variant=\"outlined\" className={classes.note}>\n          <Typography\n            variant=\"body2\"\n            component=\"p\"\n            className={classes.noteText}\n          >\n            {props.currentCase.histopathology\n              ? props.currentCase.histopathology\n              : \"Unavailable\"}\n          </Typography>\n        </Card>\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n\n    // Donor Types (map)\n    donorTypesMap: state.explore.donorTypesMap,\n\n    // Cause of Deaht map\n    causeOfDeathMap: state.explore.causeOfDeathMap,\n  };\n};\n\nexport default connect(mapStateToProps, null)(HistopathologyInfo);\n","import React, { useState } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Box from \"@material-ui/core/Box\";\nimport { Typography } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Button from \"@material-ui/core/Button\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    backgroundImage: `url(${\n      process.env.PUBLIC_URL +\n      \"/assets/hitopathologyImages/histopathology_1.png\"\n    })`,\n    backgroundRepeat: \"no-repeat\",\n    backgroundPosition: \"center\",\n    backgroundSize: \"cover\",\n  },\n  root2: {\n    backgroundImage: `url(${\n      process.env.PUBLIC_URL +\n      \"/assets/hitopathologyImages/histopathology_2.png\"\n    })`,\n    backgroundRepeat: \"no-repeat\",\n    backgroundPosition: \"center\",\n    backgroundSize: \"cover\",\n  },\n  centerGridContainer1: {\n    height: \"66vh\",\n  },\n  centerGridContainer2: {\n    height: \"66vh\",\n    justifyContent: \"flex-grow\",\n    alignItems: \"center\",\n  },\n  centerGridItem: {\n    display: \"flex\",\n    flexDirection: \"column\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n  },\n  centerGridItem2: {\n    backgroundColor: \"rgba(255,255,255, 0.5)\",\n    width: \"100%\",\n    color: \"black\",\n    marginBottom: \"53%\",\n    justifyContent: \"center\",\n    alignItems: \"center\",\n  },\n  centerGridItem3: {\n    display: \"flex\",\n    flexDirection: \"column\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n  },\n  buttonList: {\n    display: \"flex\",\n    flexDirection: \"column\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n  },\n  button: {\n    margin: \"5px\",\n  },\n  centerText: {\n    backgroundColor: \"rgba(255,255,255, 0.5)\",\n    padding: \"10px\",\n    display: \"flex\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    marginBottom: \"5px\",\n  },\n}));\n\nfunction ImageLink({ type, exist, urlLinks }) {\n  const classes = useStyles();\n  return (\n    <div>\n      {type === \"Immunohistochemistry\" ? (\n        <div className={classes.root}>\n          <Grid\n            container\n            direction=\"column\"\n            justify=\"center\"\n            alignItems=\"center\"\n            className={classes.centerGridContainer1}\n          >\n            <Grid item className={classes.centerGridItem}>\n              <div className={classes.centerText}>\n                <Typography variant=\"h5\">\n                  Immunohistochemistry Images\n                </Typography>\n              </div>\n              <div>\n                {exist ? (\n                  urlLinks.map((url) => (\n                    <Button\n                      target=\"_blank\"\n                      variant=\"contained\"\n                      color=\"primary\"\n                      href={url}\n                    >\n                      nPOD Online Pathology\n                    </Button>\n                  ))\n                ) : (\n                  <Button variant=\"contained\">Not Available</Button>\n                )}\n              </div>\n            </Grid>\n          </Grid>\n        </div>\n      ) : (\n        <div className={classes.root2}>\n          <Grid\n            container\n            direction=\"column\"\n            className={classes.centerGridContainer2}\n          >\n            <Grid item className={classes.centerGridItem2}>\n              <p style={{ marginLeft: \"35%\" }}>LIMITED CASES ONLY</p>\n            </Grid>\n            <Grid item className={classes.centerGridItem3}>\n              <div className={classes.centerText}>\n                <Typography variant=\"h5\">Electron Microscopy Images</Typography>\n              </div>\n              <div className={classes.buttonList}>\n                {exist ? (\n                  urlLinks.map((url, idx) => (\n                    <Button\n                      target=\"_blank\"\n                      variant=\"contained\"\n                      color=\"primary\"\n                      href={url}\n                      className={classes.button}\n                    >\n                      NANOTOMY {idx + 1}\n                    </Button>\n                  ))\n                ) : (\n                  <Button variant=\"contained\">Not Available</Button>\n                )}\n              </div>\n            </Grid>\n          </Grid>\n        </div>\n      )}\n    </div>\n  );\n}\n\nexport default ImageLink;\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Box from \"@material-ui/core/Box\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Divider from \"@material-ui/core/Divider\";\nimport { connect } from \"react-redux\";\nimport HistopathologyInfo from \"./component/HistopathologyInfo\";\nimport ImageLink from \"./component/ImageLink\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  content: {\n    paddingTop: theme.spacing(2),\n  },\n  paper: {\n    padding: theme.spacing(2),\n    color: theme.palette.text.primary,\n    height: \"70vh\",\n    maxHeight: \"75vh\",\n    overflow: \"auto\",\n  },\n}));\n\nfunction Histopathology(props) {\n  const classes = useStyles();\n\n  return (\n    <div>\n      <Grid container spacing={1} justify={\"center\"} alignItems={\"stretch\"}>\n        <Grid item xs={12} sm={3}>\n          <Paper elevation={3} className={classes.paper}>\n            <HistopathologyInfo />\n          </Paper>\n        </Grid>\n        <Grid item xs={12} sm={4}>\n          <Paper elevation={3} className={classes.paper}>\n            <ImageLink\n              type=\"Immunohistochemistry\"\n              exist={props.currentCase.Aperio_id}\n              urlLinks={[\n                \"https://aperioeslide.ahc.ufl.edu/app/WebViewer/view/case/Id/\" +\n                  props.currentCase.Aperio_id,\n              ]}\n            />\n          </Paper>\n        </Grid>\n        <Grid item xs={12} sm={4}>\n          <Paper elevation={3} className={classes.paper}>\n            <ImageLink\n              type=\"Electron_Microscope\"\n              exist={props.emiMap[props.currentCase.case_id]}\n              urlLinks={props.emiMap[props.currentCase.case_id]}\n            />\n          </Paper>\n        </Grid>\n      </Grid>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n    emiMap: state.explore.emiMap,\n  };\n};\n\nexport default connect(mapStateToProps, null)(Histopathology);\n","import React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\nimport { Storage } from \"aws-amplify\";\nimport NpodImageGallery from \"../../component/NpodImageGallery\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    marginTop: theme.spacing(1),\n    marginBottom: theme.spacing(1),\n    fontWeight: \"900\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n}));\n\nconst ImageViewerTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction ImmunophenotypingImageViewer(props) {\n  const [fileUrlList, setFileUrlList] = useState([]);\n  const [imageUrlList, setImageUrlList] = useState([]);\n  useEffect(() => {\n    async function getFile(fileKey) {\n      try {\n        await Storage.get(fileKey).then((url) => {\n          setFileUrlList((oldList) => [...oldList, { url }]);\n          setImageUrlList((oldList) => [\n            ...oldList,\n            { original: url, thumbnail: url },\n          ]);\n          if (currentImageUrl === \"\") {\n            setCurrentImageUrl(url);\n          }\n        });\n      } catch (error) {\n        console.error(\"[S3]Get file error\", error);\n      }\n    }\n\n    async function getFileList() {\n      try {\n        await Storage.list(\n          \"cases/\" + props.currentCase.case_id + \"/Immunophenotyping/\"\n        ).then((fileKeyList) => {\n          if (fileKeyList.length !== 0) {\n            for (let i = 0; i < fileKeyList.length; i++) {\n              // filter out folder\n              if (fileKeyList[i].size) {\n                getFile(fileKeyList[i].key);\n              }\n            }\n          }\n        });\n      } catch (error) {\n        console.error(\"[S3]Get file list error\", error);\n      }\n    }\n    getFileList();\n  }, [props.currentCase.case_id]);\n\n  const classes = useStyles();\n\n  const [currentImageUrl, setCurrentImageUrl] = useState(\"\");\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        Single click to zoom-in image. Click once more to zoom-out.\n        <br />\n        Click left and right arrow button to browse gallery.\n      </div>\n    </React.Fragment>\n  );\n\n  //console.log(\"Image viewer file list\", imageUrlList);\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          Image Viewer\n        </Typography>\n        <Typography variant=\"body1\" className={classes.title2}>\n          How-to-use{\"  \"}\n          <ImageViewerTooltip title={helpText} placement=\"right\">\n            <HelpOutlineIcon className={classes.helpIcon} />\n          </ImageViewerTooltip>\n        </Typography>\n      </div>\n      <div>\n        <NpodImageGallery urlList={imageUrlList} />\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n\n    // Donor Types (map)\n    donorTypesMap: state.explore.donorTypesMap,\n\n    // Cause of Deaht map\n    causeOfDeathMap: state.explore.causeOfDeathMap,\n  };\n};\n\nexport default connect(mapStateToProps, null)(ImmunophenotypingImageViewer);\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Box from \"@material-ui/core/Box\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Divider from \"@material-ui/core/Divider\";\nimport { connect } from \"react-redux\";\nimport ImmunophenotypingImageViewer from \"./component/ImmunophenotypingImageViewer\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  content: {\n    paddingTop: theme.spacing(2),\n  },\n  paper: {\n    padding: theme.spacing(2),\n    color: theme.palette.text.primary,\n    height: \"70vh\",\n    maxHeight: \"75vh\",\n    overflow: \"auto\",\n  },\n}));\n\nfunction Immunophenotyping(props) {\n  const classes = useStyles();\n\n  return (\n    <div>\n      <Grid container spacing={2} justify={\"center\"} alignItems={\"stretch\"}>\n        <Grid item xs={12} sm={8}>\n          <Paper elevation={3} className={classes.paper}>\n            <ImmunophenotypingImageViewer />\n          </Paper>\n        </Grid>\n        <Grid item xs={12} sm={4}>\n          <Paper elevation={3} className={classes.paper}></Paper>\n        </Grid>\n      </Grid>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n  };\n};\n\nexport default connect(mapStateToProps, null)(Immunophenotyping);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Card from \"@material-ui/core/Card\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  container: {\n    maxHeight: \"56vh\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n  },\n  note: {\n    maxHeight: \"25vh\",\n    overflow: \"auto\",\n  },\n  noteText: {\n    padding: \"10px\",\n  },\n}));\n\nfunction Score(props) {\n  const classes = useStyles();\n  const genetic = props.geneticMap[props.currentCase.case_id];\n\n  function createData(name, value) {\n    return { name, value };\n  }\n\n  const rows = [\n    createData(\n      \"GRS1 Score\",\n      genetic && genetic.GRS1_score ? genetic.GRS1_score : \"Unavailable\"\n    ),\n    createData(\n      \"GRS2 Score\",\n      genetic && genetic.GRS2_score ? genetic.GRS2_score : \"Unavailable\"\n    ),\n    createData(\n      \"AAGRS Score\",\n      genetic && genetic.AA_GRS_score === null\n        ? genetic.AA_GRS_score\n        : \"Unavailable\"\n    ),\n  ];\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          Score\n        </Typography>\n      </div>\n      <div>\n        <TableContainer component={Paper} className={classes.container}>\n          <Table className={classes.table} size=\"small\" stickyHeader>\n            <TableHead>\n              <TableRow>\n                <TableCell>Name</TableCell>\n                <TableCell align=\"right\">Value</TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {rows.map((row) => (\n                <TableRow key={row.name}>\n                  <TableCell component=\"th\" scope=\"row\">\n                    {row.name}\n                  </TableCell>\n                  <TableCell align=\"right\">{row.value}</TableCell>\n                </TableRow>\n              ))}\n            </TableBody>\n          </Table>\n        </TableContainer>\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n\n    // Donor Types (map)\n    donorTypesMap: state.explore.donorTypesMap,\n\n    // genetic map\n    geneticMap: state.explore.geneticMap,\n  };\n};\n\nexport default connect(mapStateToProps, null)(Score);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Card from \"@material-ui/core/Card\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  container: {\n    maxHeight: \"56vh\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n  },\n  note: {\n    maxHeight: \"25vh\",\n    overflow: \"auto\",\n  },\n  noteText: {\n    padding: \"10px\",\n  },\n}));\n\nfunction Percentile(props) {\n  const classes = useStyles();\n  const genetic = props.geneticMap[props.currentCase.case_id];\n\n  function createData(name, value) {\n    return { name, value };\n  }\n\n  const rows = [\n    createData(\n      \"GRS1 Percentile\",\n      genetic && genetic.GRS1_percentile\n        ? genetic.GRS1_percentile.toFixed(2)\n        : \"Unavailable\"\n    ),\n    createData(\n      \"GRS2 Percentile\",\n      genetic && genetic.GRS2_percentile\n        ? genetic.GRS2_percentile.toFixed(2)\n        : \"Unavailable\"\n    ),\n    createData(\n      \"AAGRS Percentile\",\n      genetic && genetic.AA_GRS_percentile\n        ? genetic.AA_GRS_percentile.toFixed(2)\n        : \"Unavailable\"\n    ),\n  ];\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          Percentile\n        </Typography>\n      </div>\n      <div>\n        <TableContainer component={Paper} className={classes.container}>\n          <Table className={classes.table} size=\"small\" stickyHeader>\n            <TableHead>\n              <TableRow>\n                <TableCell>Name</TableCell>\n                <TableCell align=\"right\">Value</TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {rows.map((row) => (\n                <TableRow key={row.name}>\n                  <TableCell component=\"th\" scope=\"row\">\n                    {row.name}\n                  </TableCell>\n                  <TableCell align=\"right\">{row.value}</TableCell>\n                </TableRow>\n              ))}\n            </TableBody>\n          </Table>\n        </TableContainer>\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n\n    // Donor Types (map)\n    donorTypesMap: state.explore.donorTypesMap,\n\n    // genetic map\n    geneticMap: state.explore.geneticMap,\n  };\n};\n\nexport default connect(mapStateToProps, null)(Percentile);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\n\n// import Table from \"@material-ui/core/Table\";\n// import TableBody from \"@material-ui/core/TableBody\";\n// import TableCell from \"@material-ui/core/TableCell\";\n// import TableContainer from \"@material-ui/core/TableContainer\";\n// import TableHead from \"@material-ui/core/TableHead\";\n// import TableRow from \"@material-ui/core/TableRow\";\n\nimport Table from \"@mui/material/Table\";\nimport TableBody from \"@mui/material/TableBody\";\nimport TableCell from \"@mui/material/TableCell\";\nimport TableContainer from \"@mui/material/TableContainer\";\nimport TableHead from \"@mui/material/TableHead\";\nimport TableRow from \"@mui/material/TableRow\";\n\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Card from \"@material-ui/core/Card\";\nimport { Chart } from \"react-google-charts\";\nimport { Box } from \"@mui/material\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  container: {\n    maxHeight: \"56vh\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n  },\n  note: {\n    maxHeight: \"25vh\",\n    overflow: \"auto\",\n  },\n  noteText: {\n    padding: \"10px\",\n  },\n  helpIcon: {\n    fontSize: 18,\n    color: \"#0292FF\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n}));\n\nconst GeneticTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction ScoreAndPercentile(props) {\n  const classes = useStyles();\n  const genetic = props.geneticMap[props.currentCase.case_id];\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        Comparison to T1D cases in T1D Genetic Consortium\n      </div>\n    </React.Fragment>\n  );\n\n  function createData(attrName, attrData1, attrData2, attrData3) {\n    return { attrName, attrData1, attrData2, attrData3 };\n  }\n\n  const rows = [\n    createData(\n      \"Score\",\n      genetic && genetic.GRS1_score ? genetic.GRS1_score : \"Unavailable\",\n      genetic && genetic.GRS2_score ? genetic.GRS2_score : \"Unavailable\",\n      genetic && genetic.AA_GRS_score ? genetic.AA_GRS_score : \"Unavailable\"\n    ),\n    createData(\n      \"Percentile\",\n      genetic && genetic.GRS1_percentile\n        ? genetic.GRS1_percentile.toFixed(2)\n        : \"Unavailable\",\n      genetic && genetic.GRS2_percentile\n        ? genetic.GRS2_percentile.toFixed(2)\n        : \"Unavailable\",\n      genetic && genetic.AA_GRS_percentile\n        ? genetic.AA_GRS_percentile.toFixed(2)\n        : \"Unavailable\"\n    ),\n  ];\n\n  const GRS1PercentileDiffData = {\n    old: [\n      [\"Name\", \"Percentile\"],\n      [\"GRS1\", 100],\n    ],\n    new: [\n      [\"Name\", \"Percentile\"],\n      [\n        \"GRS1\",\n        genetic && genetic.GRS1_percentile ? genetic.GRS1_percentile : 0,\n      ],\n    ],\n  };\n\n  const GRS2PercentileDiffData = {\n    old: [\n      [\"Name\", \"Percentile\"],\n      [\"GRS2\", 100],\n    ],\n    new: [\n      [\"Name\", \"Percentile\"],\n      [\n        \"GRS2\",\n        genetic && genetic.GRS2_percentile ? genetic.GRS2_percentile : 0,\n      ],\n    ],\n  };\n\n  const AAGRSPercentileDiffData = {\n    old: [\n      [\"Name\", \"Percentile\"],\n      [\"AAGRS\", 100],\n    ],\n    new: [\n      [\"Name\", \"Percentile\"],\n      [\n        \"AAGRS\",\n        genetic && genetic.AA_GRS_percentile ? genetic.GRS1_percentile : 0,\n      ],\n    ],\n  };\n\n  const GRSPercentileDiffDataArr = [\n    GRS1PercentileDiffData,\n    GRS2PercentileDiffData,\n    AAGRSPercentileDiffData,\n  ];\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          Score & Percentile\n        </Typography>\n      </div>\n      <div>\n        <TableContainer\n          component={Paper}\n          className={classes.container}\n          sx={{ width: \"max-content\" }}\n        >\n          <Table className={classes.table} stickyHeader>\n            <TableHead>\n              <TableRow>\n                <TableCell></TableCell>\n                <TableCell\n                  align=\"center\"\n                  sx={{ backgroundColor: \"#BBDEFB\", width: 70 }}\n                >\n                  GRS1\n                </TableCell>\n                <TableCell\n                  align=\"center\"\n                  sx={{ backgroundColor: \"#DCEDC8\", width: 70 }}\n                >\n                  GRS2\n                </TableCell>\n                <TableCell\n                  align=\"center\"\n                  sx={{ backgroundColor: \"#FFF0B2\", width: 70 }}\n                >\n                  AAGRS\n                </TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {rows.map((row) => (\n                <TableRow key={row.name}>\n                  <TableCell component=\"th\" scope=\"row\" variant=\"head\">\n                    {row.attrName}{\" \"}\n                    {row.attrName === \"Percentile\" ? (\n                      <div style={{ lineHeight: 0.1 }}>\n                        <br></br>\n                        <GeneticTooltip title={helpText} placement=\"right\">\n                          <HelpOutlineIcon className={classes.helpIcon} />\n                        </GeneticTooltip>\n                      </div>\n                    ) : null}\n                  </TableCell>\n                  <TableCell align=\"center\">{row.attrData1}</TableCell>\n                  <TableCell align=\"center\">{row.attrData2}</TableCell>\n                  <TableCell align=\"center\">{row.attrData3}</TableCell>\n                </TableRow>\n              ))}\n\n              <TableRow>\n                <TableCell variant=\"head\"></TableCell>\n                {GRSPercentileDiffDataArr.map((diffData, index) => (\n                  <TableCell style={{ minWidthwidth: \"300px\" }}>\n                    <Chart\n                      chartType=\"ColumnChart\"\n                      width=\"100%\"\n                      height=\"200px\"\n                      diffdata={diffData}\n                      options={{\n                        tooltip: {\n                          trigger: \"none\",\n                        },\n                        theme: \"maximized\",\n                        legend: \"none\",\n                        diff: {\n                          oldData: {\n                            tooltip: {\n                              prefix: \"label 1\",\n                            },\n                          },\n                          newData: {\n                            widthFactor: 0.7,\n                            tooltip: {\n                              prefix: \"label 2\",\n                            },\n                          },\n                        },\n                      }}\n                    />\n                  </TableCell>\n                ))}\n              </TableRow>\n            </TableBody>\n          </Table>\n        </TableContainer>\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n\n    // Donor Types (map)\n    donorTypesMap: state.explore.donorTypesMap,\n\n    // genetic map\n    geneticMap: state.explore.geneticMap,\n  };\n};\n\nexport default connect(mapStateToProps, null)(ScoreAndPercentile);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Card from \"@material-ui/core/Card\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  container: {\n    maxHeight: \"56vh\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n  },\n  note: {\n    maxHeight: \"25vh\",\n    overflow: \"auto\",\n  },\n  noteText: {\n    padding: \"10px\",\n  },\n}));\n\nfunction Availability(props) {\n  const classes = useStyles();\n  const genetic = props.geneticMap[props.currentCase.case_id];\n\n  function createData(name, value) {\n    return { name, value };\n  }\n\n  const rows = [\n    createData(\n      \"Availability\",\n      genetic && genetic.whole_exome_sequencing_available ? (\n        <React.Fragment>\n          <a\n            href=\"https://www.ncbi.nlm.nih.gov/projects/gap/cgi-bin/study.cgi?study_id=phs002861.v1.p1\"\n            target=\"_blank\"\n          >\n            Available\n          </a>\n        </React.Fragment>\n      ) : (\n        \"Unavailable\"\n      )\n    ),\n  ];\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          Whole Exome Sequencing\n        </Typography>\n      </div>\n      <div>\n        <TableContainer component={Paper} className={classes.container}>\n          <Table className={classes.table} size=\"small\" stickyHeader>\n            <TableHead>\n              <TableRow>\n                <TableCell>Name</TableCell>\n                <TableCell align=\"right\">Value</TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {rows.map((row) => (\n                <TableRow key={row.name}>\n                  <TableCell component=\"th\" scope=\"row\">\n                    {row.name}\n                  </TableCell>\n                  <TableCell align=\"right\">{row.value}</TableCell>\n                </TableRow>\n              ))}\n            </TableBody>\n          </Table>\n        </TableContainer>\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n\n    // Donor Types (map)\n    donorTypesMap: state.explore.donorTypesMap,\n\n    // genetic map\n    geneticMap: state.explore.geneticMap,\n  };\n};\n\nexport default connect(mapStateToProps, null)(Availability);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Card from \"@material-ui/core/Card\";\nimport { Chart } from \"react-google-charts\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  container: {\n    maxHeight: \"56vh\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n  },\n  note: {\n    maxHeight: \"25vh\",\n    overflow: \"auto\",\n  },\n  noteText: {\n    padding: \"10px\",\n  },\n}));\n\nfunction Admixture(props) {\n  const classes = useStyles();\n  const genetic = props.geneticMap[props.currentCase.case_id];\n\n  const admixture = {\n    amr:\n      genetic && genetic.admixed_american_AMR\n        ? genetic.admixed_american_AMR\n        : 0,\n    eur: genetic && genetic.european_EUR ? genetic.european_EUR : 0,\n    sas: genetic && genetic.south_asian_SAS ? genetic.south_asian_SAS : 0,\n    afr: genetic && genetic.african_AFR ? genetic.african_AFR : 0,\n    eas: genetic && genetic.east_asian_EAS ? genetic.east_asian_EAS : 0,\n  };\n\n  const admixtureDict = {\n    amr: \"American\",\n    eur: \"European\",\n    sas: \"South Asian\",\n    afr: \"African\",\n    eas: \"East Asian\",\n  };\n\n  const admixtureSum = Object.values(admixture).reduce(\n    (acc, curr) => acc + curr,\n    0\n  );\n\n  let normalizedChartData = [[\"Race\", \"Ratio\"]];\n  if (admixtureSum !== 0) {\n    const normalizedAdmixture = {\n      amr: Number((admixture.amr / admixtureSum).toFixed(3)),\n      eur: Number((admixture.eur / admixtureSum).toFixed(3)),\n      sas: Number((admixture.sas / admixtureSum).toFixed(3)),\n      afr: Number((admixture.afr / admixtureSum).toFixed(3)),\n      eas: Number((admixture.eas / admixtureSum).toFixed(3)),\n    };\n\n    const chartDataGen = (charObj) => {\n      let tempChartData = [[\"Race\", \"Ratio\"]];\n      for (let [key, value] of Object.entries(charObj)) {\n        tempChartData.push([admixtureDict[key], value]);\n      }\n      return tempChartData;\n    };\n    normalizedChartData = chartDataGen(normalizedAdmixture);\n  }\n\n  console.log(\"normalized chart data\", normalizedChartData);\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          Admixture\n        </Typography>\n      </div>\n      <div>\n        <Chart\n          chartType=\"PieChart\"\n          height=\"400px\"\n          data={normalizedChartData}\n          options={{\n            pieHole: 0.4,\n            is3D: false,\n            chartArea: {\n              left: 0,\n              width: \"100%\",\n            },\n            legend: {\n              textStyle: { color: \"blue\", fontSize: 15 },\n              position: \"top\",\n              maxLines: 3,\n            },\n          }}\n        />\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n\n    // Donor Types (map)\n    donorTypesMap: state.explore.donorTypesMap,\n\n    // genetic map\n    geneticMap: state.explore.geneticMap,\n  };\n};\n\nexport default connect(mapStateToProps, null)(Admixture);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Card from \"@material-ui/core/Card\";\nimport InfoOutlinedIcon from \"@mui/icons-material/InfoOutlined\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  container: {\n    maxHeight: \"56vh\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n  },\n  note: {\n    maxHeight: \"25vh\",\n    overflow: \"auto\",\n  },\n  noteText: {\n    padding: \"10px\",\n  },\n  infoIcon: {\n    fontSize: 10,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  infoText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n}));\n\nconst GeneticTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction GRS1Snps(props) {\n  const classes = useStyles();\n  const genetic = props.geneticMap[props.currentCase.case_id];\n\n  function createData(name, value) {\n    return { name, value };\n  }\n\n  const rows = [];\n\n  const genRows = (snpsStr) => {\n    const snpsArr = snpsStr.split(\";\");\n    snpsArr.forEach((snpStr) => {\n      let snpKey = snpStr.split(\":\")[0] ?? \"Not Available\";\n      const snpValue = snpStr.split(\":\")[1] ?? \"Not Available\";\n      const prefix = \"GRS1_\";\n      snpKey = snpKey.replace(new RegExp(\"^\" + prefix), \"\");\n      rows.push(createData(snpKey, snpValue));\n    });\n  };\n\n  try {\n    genRows(genetic.GRS1_SNPs);\n  } catch (err) {\n    console.log(\"Fetching genetic SNPs data error\", err);\n    rows.push(createData(\"Unavailable\", \"Unavailable\"));\n  }\n\n  const genGenInfo = (snpName, grs) => {\n    let infoText = \"SNP\";\n    Object.keys(props.SNP).forEach((SNP_id) => {\n      let snpObj = props.SNP[SNP_id];\n      if (snpObj.SNP_name === snpName && snpObj.GRS === grs) {\n        let gene1 = snpObj?.gene_1;\n        let gene2 = snpObj?.gene_2;\n        let gene3 = snpObj?.gene_3;\n        infoText = (\n          <React.Fragment>\n            <div className={classes.infoText}>\n              Gene 1: {gene1}\n              {gene2 ? <div>Gene 2: {gene2}</div> : null}\n              {gene3 ? <div>Gene 3: {gene3}</div> : null}\n            </div>\n          </React.Fragment>\n        );\n      }\n    });\n    return infoText;\n  };\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          GRS1 SNPs\n        </Typography>\n      </div>\n      <div>\n        <TableContainer component={Paper} className={classes.container}>\n          <Table className={classes.table} size=\"small\" stickyHeader>\n            <TableHead>\n              <TableRow>\n                <TableCell>Name</TableCell>\n                <TableCell align=\"right\">Value</TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {rows.map((row) => (\n                <TableRow key={row.name}>\n                  <TableCell component=\"th\" scope=\"row\">\n                    {row.name}{\" \"}\n                    {row.value !== \"Unavailable\" ? (\n                      <GeneticTooltip\n                        title={genGenInfo(row.name, \"GRS1\")}\n                        placement=\"right\"\n                      >\n                        <InfoOutlinedIcon\n                          sx={{ fontSize: 16, color: \"#0292FF\" }}\n                        />\n                      </GeneticTooltip>\n                    ) : null}\n                  </TableCell>\n                  <TableCell align=\"right\">{row.value}</TableCell>\n                </TableRow>\n              ))}\n            </TableBody>\n          </Table>\n        </TableContainer>\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n\n    // Donor Types (map)\n    donorTypesMap: state.explore.donorTypesMap,\n\n    // genetic map\n    geneticMap: state.explore.geneticMap,\n\n    // SNP-gene\n    SNP: state.explore.SNP,\n  };\n};\n\nexport default connect(mapStateToProps, null)(GRS1Snps);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Card from \"@material-ui/core/Card\";\nimport InfoIcon from \"@mui/icons-material/Info\";\nimport InfoOutlinedIcon from \"@mui/icons-material/InfoOutlined\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  container: {\n    maxHeight: \"56vh\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n  },\n  note: {\n    maxHeight: \"25vh\",\n    overflow: \"auto\",\n  },\n  noteText: {\n    padding: \"10px\",\n  },\n  infoIcon: {\n    fontSize: 10,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  infoText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n}));\n\nconst GeneticTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction GRS2Snps(props) {\n  const classes = useStyles();\n  const genetic = props.geneticMap[props.currentCase.case_id];\n\n  function createData(name, value) {\n    return { name, value };\n  }\n\n  const rows = [];\n\n  const genRows = (snpsStr) => {\n    const snpsArr = snpsStr.split(\";\");\n    snpsArr.forEach((snpStr) => {\n      let snpKey = snpStr.split(\":\")[0] ?? \"Not Available\";\n      const snpValue = snpStr.split(\":\")[1] ?? \"Not Available\";\n      const prefix = \"GRS2_\";\n      snpKey = snpKey.replace(new RegExp(\"^\" + prefix), \"\");\n      rows.push(createData(snpKey, snpValue));\n    });\n  };\n\n  try {\n    genRows(genetic.GRS2_SNPs);\n  } catch (err) {\n    console.log(\"Fetching genetic SNPs data error\", err);\n    rows.push(createData(\"Unavailable\", \"Unavailable\"));\n  }\n\n  const genGenInfo = (snpName, grs) => {\n    let infoText = \"SNP\";\n    Object.keys(props.SNP).forEach((SNP_id) => {\n      let snpObj = props.SNP[SNP_id];\n      if (snpObj.SNP_name === snpName && snpObj.GRS === grs) {\n        let gene1 = snpObj?.gene_1;\n        let gene2 = snpObj?.gene_2;\n        let gene3 = snpObj?.gene_3;\n        infoText = (\n          <React.Fragment>\n            <div className={classes.infoText}>\n              Gene 1: {gene1}\n              {gene2 ? <div>Gene 2: {gene2}</div> : null}\n              {gene3 ? <div>Gene 3: {gene3}</div> : null}\n            </div>\n          </React.Fragment>\n        );\n      }\n    });\n    return infoText;\n  };\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          GRS2 SNPs\n        </Typography>\n      </div>\n      <div>\n        <TableContainer component={Paper} className={classes.container}>\n          <Table className={classes.table} size=\"small\" stickyHeader>\n            <TableHead>\n              <TableRow>\n                <TableCell>Name</TableCell>\n                <TableCell align=\"right\">Value</TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {rows.map((row) => (\n                <TableRow key={row.name}>\n                  <TableCell component=\"th\" scope=\"row\">\n                    {row.name}{\" \"}\n                    {row.value !== \"Unavailable\" ? (\n                      <GeneticTooltip\n                        title={genGenInfo(row.name, \"GRS2\")}\n                        placement=\"right\"\n                      >\n                        <InfoOutlinedIcon\n                          sx={{ fontSize: 16, color: \"#0292FF\" }}\n                        />\n                      </GeneticTooltip>\n                    ) : null}\n                  </TableCell>\n                  <TableCell align=\"right\">{row.value}</TableCell>\n                </TableRow>\n              ))}\n            </TableBody>\n          </Table>\n        </TableContainer>\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n\n    // Donor Types (map)\n    donorTypesMap: state.explore.donorTypesMap,\n\n    // genetic map\n    geneticMap: state.explore.geneticMap,\n\n    // SNP-gene\n    SNP: state.explore.SNP,\n  };\n};\n\nexport default connect(mapStateToProps, null)(GRS2Snps);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Card from \"@material-ui/core/Card\";\nimport InfoOutlinedIcon from \"@mui/icons-material/InfoOutlined\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  container: {\n    maxHeight: \"56vh\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n  },\n  note: {\n    maxHeight: \"25vh\",\n    overflow: \"auto\",\n  },\n  noteText: {\n    padding: \"10px\",\n  },\n  infoIcon: {\n    fontSize: 10,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  infoText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n}));\n\nconst GeneticTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction AAGRSSnps(props) {\n  const classes = useStyles();\n  const genetic = props.geneticMap[props.currentCase.case_id];\n\n  function createData(name, value) {\n    return { name, value };\n  }\n\n  const rows = [];\n\n  const genRows = (snpsStr) => {\n    const snpsArr = snpsStr.split(\";\");\n    snpsArr.forEach((snpStr) => {\n      let snpKey = snpStr.split(\":\")[0] ?? \"Not Available\";\n      const snpValue = snpStr.split(\":\")[1] ?? \"Not Available\";\n      const prefix = \"AA_GRS_\";\n      snpKey = snpKey.replace(new RegExp(\"^\" + prefix), \"\");\n      rows.push(createData(snpKey, snpValue));\n    });\n  };\n\n  try {\n    genRows(genetic.AA_GRS_SNPs);\n  } catch (err) {\n    console.log(\"Fetching genetic SNPs data error\", err);\n    rows.push(createData(\"Unavailable\", \"Unavailable\"));\n  }\n\n  const genGenInfo = (snpName, grs) => {\n    let infoText = \"SNP\";\n    Object.keys(props.SNP).forEach((SNP_id) => {\n      let snpObj = props.SNP[SNP_id];\n      if (snpObj.SNP_name === snpName && snpObj.GRS === grs) {\n        let gene1 = snpObj?.gene_1;\n        let gene2 = snpObj?.gene_2;\n        let gene3 = snpObj?.gene_3;\n        infoText = (\n          <React.Fragment>\n            <div className={classes.infoText}>\n              Gene 1: {gene1}\n              {gene2 ? <div>Gene 2: {gene2}</div> : null}\n              {gene3 ? <div>Gene 3: {gene3}</div> : null}\n            </div>\n          </React.Fragment>\n        );\n      }\n    });\n    return infoText;\n  };\n\n  return (\n    <div>\n      <div>\n        <Typography variant=\"h5\" className={classes.title}>\n          AAGRS SNPs\n        </Typography>\n      </div>\n      <div>\n        <TableContainer component={Paper} className={classes.container}>\n          <Table className={classes.table} size=\"small\" stickyHeader>\n            <TableHead>\n              <TableRow>\n                <TableCell>Name</TableCell>\n                <TableCell align=\"right\">Value</TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {rows.map((row) => (\n                <TableRow key={row.name}>\n                  <TableCell component=\"th\" scope=\"row\">\n                    {row.name}{\" \"}\n                    {row.value !== \"Unavailable\" ? (\n                      <GeneticTooltip\n                        title={genGenInfo(row.name, \"AAGRS\")}\n                        placement=\"right\"\n                      >\n                        <InfoOutlinedIcon\n                          sx={{ fontSize: 16, color: \"#0292FF\" }}\n                        />\n                      </GeneticTooltip>\n                    ) : null}\n                  </TableCell>\n                  <TableCell align=\"right\">{row.value}</TableCell>\n                </TableRow>\n              ))}\n            </TableBody>\n          </Table>\n        </TableContainer>\n      </div>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n\n    // Donor Types (map)\n    donorTypesMap: state.explore.donorTypesMap,\n\n    // genetic map\n    geneticMap: state.explore.geneticMap,\n\n    // SNP-gene\n    SNP: state.explore.SNP,\n  };\n};\n\nexport default connect(mapStateToProps, null)(AAGRSSnps);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Card from \"@material-ui/core/Card\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  title2: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n  },\n  container: {\n    maxHeight: \"56vh\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n  },\n  note: {\n    maxHeight: \"25vh\",\n    overflow: \"auto\",\n  },\n  noteText: {\n    padding: \"10px\",\n  },\n}));\n\nexport default function Reference() {\n  const classes = useStyles();\n\n  return (\n    <div>\n      <div>\n        <div>\n          <Typography variant=\"h5\" className={classes.title2}>\n            See these references for detailed data generation and calculation\n          </Typography>\n        </div>\n        <div>\n          <Card variant=\"outlined\" className={classes.note}>\n            <Typography\n              variant=\"body2\"\n              component=\"p\"\n              className={classes.noteText}\n            >\n              <h4>\n                <a\n                  href=\"https://doi.org/10.1038/s41597-023-02244-6\"\n                  target=\"_blank\"\n                >\n                  A genomic data archive from the Network for Pancreatic Organ\n                  donors with Diabetes\n                </a>\n              </h4>\n              <h4>\n                <a href=\"https://doi.org/10.2337/dc15-1111\" target=\"_blank\">\n                  A Type 1 Diabetes Genetic Risk Score Can Aid Discrimination\n                  Between Type 1 and Type 2 Diabetes in Young Adults\n                </a>\n              </h4>{\" \"}\n              <h4>\n                <a href=\"https://doi.org/10.2337/dc18-1785\" target=\"_blank\">\n                  Development and Standardization of an Improved Type 1 Diabetes\n                  Genetic Risk Score for Use in Newborn Screening and Incident\n                  Diagnosis\n                </a>\n              </h4>\n              <h4>\n                <a href=\"https://doi.org/10.2337/dc21-1254\" target=\"_blank\">\n                  Improving the Prediction of Type 1 Diabetes Across Ancestries\n                </a>\n              </h4>\n              <h4>\n                <a\n                  href=\"https://repository.niddk.nih.gov/studies/t1dgc/\"\n                  target=\"_blank\"\n                >\n                  Type 1 Diabetes Genetic Consortium (T1DGC)\n                </a>\n              </h4>\n            </Typography>\n          </Card>\n        </div>\n      </div>\n    </div>\n  );\n}\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Box from \"@material-ui/core/Box\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Divider from \"@material-ui/core/Divider\";\nimport { connect } from \"react-redux\";\nimport Score from \"./component/Score\";\nimport Percentile from \"./component/Percentile\";\nimport ScoreAndPercentile from \"./component/ScoreAndPercentile\";\nimport Availability from \"./component/Availability\";\nimport Admixture from \"./component/Admixture\";\nimport GRS1Snps from \"./component/GRS1Snps\";\nimport GRS2Snps from \"./component/GRS2Snps\";\nimport AAGRSSnps from \"./component/AAGRSSnps\";\nimport Reference from \"./component/Reference\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  content: {\n    paddingTop: theme.spacing(2),\n  },\n  paper: {\n    padding: theme.spacing(2),\n    color: theme.palette.text.primary,\n    height: \"70vh\",\n    maxHeight: \"75vh\",\n    overflow: \"auto\",\n  },\n}));\n\nfunction Genetic(props) {\n  const classes = useStyles();\n\n  return (\n    <div>\n      <Grid container spacing={2} justify={\"center\"} alignItems={\"stretch\"}>\n        <Grid item xs={12} md={6} lg={4} xl={3}>\n          <Paper elevation={3} className={classes.paper}>\n            <ScoreAndPercentile />\n            {/* <Score />\n            <Percentile /> */}\n            <Availability />\n            <Admixture />\n            <Reference />\n          </Paper>\n        </Grid>\n        <Grid item xs={12} md={6} lg={2} xl={3}>\n          <Paper elevation={3} className={classes.paper}>\n            <GRS1Snps />\n          </Paper>\n        </Grid>\n        <Grid item xs={12} md={6} lg={2} xl={3}>\n          <Paper elevation={3} className={classes.paper}>\n            <GRS2Snps />\n          </Paper>\n        </Grid>\n        <Grid item xs={12} md={6} lg={2} xl={3}>\n          <Paper elevation={3} className={classes.paper}>\n            <AAGRSSnps />\n          </Paper>\n        </Grid>\n      </Grid>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n  };\n};\n\nexport default connect(mapStateToProps, null)(Genetic);\n","import React from \"react\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Tabs from \"@material-ui/core/Tabs\";\nimport Tab from \"@material-ui/core/Tab\";\nimport PropTypes from \"prop-types\";\nimport Box from \"@material-ui/core/Box\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport DonorSummary from \"./component/DonorSummary/DonorSummary\";\nimport ClinicalHistory from \"./component/ClinicalHistory/ClinicalHistory\";\nimport CaseProcessingAndTissueQuality from \"./component/CaseProcessingAndTissueQuality/CaseProcessingAndTissueQuality\";\nimport FunctionalAssay from \"./component/FunctionalAssay/FunctionalAssay\";\nimport Histopathology from \"./component/Histopathology/Histopathology\";\nimport Immunophenotyping from \"./component/Immunophenotyping/Immunophenotyping\";\nimport Genetic from \"./component/Genetic/Genetic\";\n\nfunction TabPanel(props) {\n  const { children, value, index, ...other } = props;\n\n  return (\n    <div\n      role=\"tabpanel\"\n      hidden={value !== index}\n      id={`case-tabpanel-${index}`}\n      aria-labelledby={`case-tab-${index}`}\n      {...other}\n    >\n      {value === index && <Box p={3}>{children}</Box>}\n    </div>\n  );\n}\n\nTabPanel.propTypes = {\n  children: PropTypes.node,\n  index: PropTypes.any.isRequired,\n  value: PropTypes.any.isRequired,\n};\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    flexGrow: 1,\n    width: \"100%\",\n    backgroundColor: theme.palette.background.paper,\n  },\n  tabs: {\n    borderBottom: `1px solid ${theme.palette.divider}`,\n    //background: \"linear-gradient(45deg, #6588c2, #dde4f0);\",\n    backgroundColor: \"#dde4f0\",\n    \"& .MuiTabs-indicator\": {\n      //backgroundColor: \"orange\",\n      height: 0,\n    },\n    \"& .MuiTab-root.Mui-selected\": {\n      color: \"black\",\n      backgroundColor: \"#6588c2\",\n      fontWeight: \"bold\",\n      //border: \"1px solid #6588c2\",\n      // borderRadius: \"4px\",\n    },\n  },\n  tab: {\n    color: \"rgba(0,0,0,1)\",\n  },\n  tabPanel: {\n    maxHeight: \"85vh\",\n    overflowY: \"auto\",\n  },\n}));\n\nfunction a11yProps(index) {\n  return {\n    id: `case-tab-${index}`,\n    \"aria-controls\": `case-tabpanel-${index}`,\n  };\n}\n\nexport default function TabView() {\n  const classes = useStyles();\n  const [value, setValue] = React.useState(0);\n\n  const handleChange = (event, newValue) => {\n    setValue(newValue);\n  };\n\n  return (\n    <div className={classes.root}>\n      <Paper variant=\"outlined\">\n        <Tabs\n          value={value}\n          onChange={handleChange}\n          aria-label=\"case tabs\"\n          indicatorColor=\"primary\"\n          textColor=\"primary\"\n          variant=\"fullWidth\"\n          className={classes.tabs}\n        >\n          <Tab\n            label=\"DONOR SUMMARY\"\n            {...a11yProps(0)}\n            className={classes.tab}\n          />\n          <Tab\n            label=\"CLINICAL HISTORY\"\n            {...a11yProps(1)}\n            className={classes.tab}\n          />\n          <Tab\n            label=\"Case Processing &amp; Tissue Quality\"\n            {...a11yProps(2)}\n            className={classes.tab}\n          />\n          <Tab\n            label=\"FUNCTIONAL ASSAY\"\n            {...a11yProps(3)}\n            className={classes.tab}\n          />\n          <Tab\n            label=\"HISTOPATHOLOGY\"\n            {...a11yProps(4)}\n            className={classes.tab}\n          />\n          <Tab\n            label=\"IMMUNOPHENOTYPING\"\n            {...a11yProps(5)}\n            className={classes.tab}\n          />\n          <Tab label=\"GENETICS\" {...a11yProps(6)} className={classes.tab} />\n        </Tabs>\n        <div className={classes.tabPanel}>\n          <TabPanel value={value} index={0}>\n            <DonorSummary />\n          </TabPanel>\n          <TabPanel value={value} index={1}>\n            <ClinicalHistory />\n          </TabPanel>\n          <TabPanel value={value} index={2}>\n            <CaseProcessingAndTissueQuality />\n          </TabPanel>\n          <TabPanel value={value} index={3}>\n            <FunctionalAssay />\n          </TabPanel>\n          <TabPanel value={value} index={4}>\n            <Histopathology />\n          </TabPanel>\n          <TabPanel value={value} index={5}>\n            <Immunophenotyping />\n          </TabPanel>\n          <TabPanel value={value} index={6}>\n            <Genetic />\n          </TabPanel>\n        </div>\n      </Paper>\n    </div>\n  );\n}\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Button from \"@material-ui/core/Button\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport CaseViewTitle from \"./component/CaseViewTitle\";\nimport TabView from \"./component/TabView/TabView\";\nimport GetAppIcon from \"@material-ui/icons/GetApp\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { connect } from \"react-redux\";\n\nconst useStyles = makeStyles((theme) => ({\n  title: {\n    fontWeight: \"900\",\n  },\n  form: {\n    display: \"flex\",\n    flexDirection: \"column\",\n    margin: \"auto\",\n    width: \"fit-content\",\n  },\n  formControl: {\n    marginTop: theme.spacing(2),\n    minWidth: 120,\n  },\n  formControlLabel: {\n    marginTop: theme.spacing(1),\n  },\n  dialogBackground: {\n    height: \"80vh\",\n    maxHeight: \"85vh\",\n  },\n  dialogContent: {\n    height: \"50vh\",\n    maxHeight: \"60vh\",\n  },\n}));\n\nfunction CaseView(props) {\n  const classes = useStyles();\n  const [open, setOpen] = React.useState(false);\n  const [fullWidth, setFullWidth] = React.useState(true);\n  const [maxWidth, setMaxWidth] = React.useState(\"xl\");\n\n  const handleClose = () => {\n    props.setDialogue(false);\n  };\n\n  return (\n    <div>\n      <Dialog\n        fullWidth=\"true\"\n        maxWidth=\"xl\"\n        maxHeight=\"xl\"\n        open={props.open}\n        onClose={handleClose}\n        aria-labelledby=\"donnor-case-dialog-title\"\n        classes={{ paper: classes.dialogBackground1 }}\n      >\n        <CaseViewTitle onClose={handleClose}>\n          nPOD CASE ID: {props.currentCase.case_id} &nbsp; &nbsp; RRID:\n          {props.currentCase.RR_id}\n        </CaseViewTitle>\n\n        <div style={{ overflow: \"hidden\" }}>\n          <DialogContent dividers>\n            {/* <DialogContentText></DialogContentText> */}\n            <TabView />\n          </DialogContent>\n        </div>\n        {/* <DialogActions>\n          Case opertation like \"Download Case\"\n        </DialogActions> */}\n      </Dialog>\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Filtered Data\n    currentCase: state.explore.currentCase,\n  };\n};\n\nexport default connect(mapStateToProps, null)(CaseView);\n","import { connect } from \"react-redux\";\n\nfunction DataPreProcess(props) {\n  const tempData = props.rawData;\n  for (const row in tempData) {\n    const thisCase = tempData[row];\n    for (const col in thisCase) {\n      if (col === \"case_id\") {\n        const thisCaseId = thisCase[col];\n        const HLA_transplant = null;\n        const HLA_high_resolution = null;\n        const thisHLA = props.hlaMap[thisCaseId];\n        if (thisHLA) {\n          // Transplant\n          const thisAt = thisHLA[\"T_A_1\"] + \"/\" + thisHLA[\"T_A_2\"];\n          const thisBt = thisHLA[\"T_B_1\"] + \"/\" + thisHLA[\"T_B_2\"];\n          const thisDRt = thisHLA[\"T_DR_1\"] + \"/\" + thisHLA[\"T_DR_2\"];\n          const thisDQBt = thisHLA[\"T_DQB_1\"] + \"/\" + thisHLA[\"T_DQB_2\"];\n          thisCase[\"HLA_transplant\"] =\n            \"A*\" +\n            thisAt +\n            \", \" +\n            \"B*\" +\n            thisBt +\n            \", \" +\n            \"DR*\" +\n            thisDRt +\n            \", \" +\n            \"DQB*\" +\n            thisDQBt;\n          thisCase[\"HLA_T_A\"] = thisAt;\n          thisCase[\"HLA_T_B\"] = thisBt;\n          thisCase[\"HLA_T_DR\"] = thisDRt;\n          thisCase[\"HLA_T_DQB\"] = thisDQBt;\n          // High Resolution\n          const thisA = highResHLAGenerator(thisHLA[\"A_1\"], thisHLA[\"A_2\"]);\n          const thisB = highResHLAGenerator(thisHLA[\"B_1\"], thisHLA[\"B_2\"]);\n          const thisC = highResHLAGenerator(thisHLA[\"C_1\"], thisHLA[\"C_2\"]);\n          const thisDRB1 = highResHLAGenerator(\n            thisHLA[\"DRB1_1\"],\n            thisHLA[\"DRB1_2\"]\n          );\n          const thisDQA1 = highResHLAGenerator(\n            thisHLA[\"DQA1_1\"],\n            thisHLA[\"DQA1_2\"]\n          );\n          const thisDQB1 = highResHLAGenerator(\n            thisHLA[\"DQB1_1\"],\n            thisHLA[\"DQB1_2\"]\n          );\n          const thisDPA1 = highResHLAGenerator(\n            thisHLA[\"DPA1_1\"],\n            thisHLA[\"DPA1_2\"]\n          );\n          const thisDPB1 = highResHLAGenerator(\n            thisHLA[\"DPB1_1\"],\n            thisHLA[\"DPB1_2\"]\n          );\n          thisCase[\"HLA_high_resolution\"] =\n            \"A*\" +\n            thisA +\n            \", \" +\n            \"B*\" +\n            thisB +\n            \", \" +\n            \"C*\" +\n            thisC +\n            \", \" +\n            \"DRB1*\" +\n            thisDRB1 +\n            \", \" +\n            \"DQA1*\" +\n            thisDQA1 +\n            \", \" +\n            \"DQB1*\" +\n            thisDQB1 +\n            \", \" +\n            \"DPA1*\" +\n            thisDPA1 +\n            \", \" +\n            \"DPB1*\" +\n            thisDPB1;\n          thisCase[\"HLA_A\"] = thisA;\n          thisCase[\"HLA_B\"] = thisB;\n          thisCase[\"HLA_C\"] = thisC;\n          thisCase[\"HLA_DRB1\"] = thisDRB1;\n          thisCase[\"HLA_DQA1\"] = thisDQA1;\n          thisCase[\"HLA_DQB1\"] = thisDQB1;\n          thisCase[\"HLA_DPA1\"] = thisDPA1;\n          thisCase[\"HLA_DPB1\"] = thisDPB1;\n          thisCase[\"A_1\"] =\n            thisA.split(\",\")[0] === \"null\" ? null : thisA.split(\",\")[0];\n          thisCase[\"A_2\"] =\n            thisA.split(\",\")[1] === \"null\" ? null : thisA.split(\",\")[1];\n          thisCase[\"B_1\"] =\n            thisB.split(\",\")[0] === \"null\" ? null : thisB.split(\",\")[0];\n          thisCase[\"B_2\"] =\n            thisB.split(\",\")[1] === \"null\" ? null : thisB.split(\",\")[1];\n          thisCase[\"C_1\"] =\n            thisC.split(\",\")[0] === \"null\" ? null : thisC.split(\",\")[0];\n          thisCase[\"C_2\"] =\n            thisC.split(\",\")[1] === \"null\" ? null : thisC.split(\",\")[1];\n          thisCase[\"DRB1_1\"] =\n            thisDRB1.split(\",\")[0] === \"null\" ? null : thisDRB1.split(\",\")[0];\n          thisCase[\"DRB1_2\"] =\n            thisDRB1.split(\",\")[1] === \"null\" ? null : thisDRB1.split(\",\")[1];\n          thisCase[\"DQA1_1\"] =\n            thisDQA1.split(\",\")[0] === \"null\" ? null : thisDQA1.split(\",\")[0];\n          thisCase[\"DQA1_2\"] =\n            thisDQA1.split(\",\")[1] === \"null\" ? null : thisDQA1.split(\",\")[1];\n          thisCase[\"DQB1_1\"] =\n            thisDQB1.split(\",\")[0] === \"null\" ? null : thisDQB1.split(\",\")[0];\n          thisCase[\"DQB1_2\"] =\n            thisDQB1.split(\",\")[1] === \"null\" ? null : thisDQB1.split(\",\")[1];\n          thisCase[\"DPA1_1\"] =\n            thisDPA1.split(\",\")[0] === \"null\" ? null : thisDPA1.split(\",\")[0];\n          thisCase[\"DPA1_2\"] =\n            thisDPA1.split(\",\")[1] === \"null\" ? null : thisDPA1.split(\",\")[1];\n          thisCase[\"DPB1_1\"] =\n            thisDPB1.split(\",\")[0] === \"null\" ? null : thisDPB1.split(\",\")[0];\n          thisCase[\"DPB1_2\"] =\n            thisDPB1.split(\",\")[1] === \"null\" ? null : thisDPB1.split(\",\")[1];\n        } else {\n          thisCase[\"HLA_transplant\"] = null;\n          thisCase[\"HLA_T_A\"] = null;\n          thisCase[\"HLA_T_B\"] = null;\n          thisCase[\"HLA_T_DR\"] = null;\n          thisCase[\"HLA_T_DQB\"] = null;\n          thisCase[\"HLA_A\"] = null;\n          thisCase[\"HLA_B\"] = null;\n          thisCase[\"HLA_C\"] = null;\n          thisCase[\"HLA_DRB1\"] = null;\n          thisCase[\"HLA_DQA1\"] = null;\n          thisCase[\"HLA_DQB1\"] = null;\n          thisCase[\"HLA_DPA1\"] = null;\n          thisCase[\"HLA_DPB1\"] = null;\n          thisCase[\"A_1\"] = null;\n          thisCase[\"A_2\"] = null;\n          thisCase[\"B_1\"] = null;\n          thisCase[\"B_2\"] = null;\n          thisCase[\"C_1\"] = null;\n          thisCase[\"C_2\"] = null;\n          thisCase[\"DRB1_1\"] = null;\n          thisCase[\"DRB1_2\"] = null;\n          thisCase[\"DQA1_1\"] = null;\n          thisCase[\"DQA1_2\"] = null;\n          thisCase[\"DQB1_1\"] = null;\n          thisCase[\"DQB1_2\"] = null;\n          thisCase[\"DPA1_1\"] = null;\n          thisCase[\"DPA1_2\"] = null;\n          thisCase[\"DPB1_1\"] = null;\n          thisCase[\"DPB1_2\"] = null;\n        }\n      }\n    }\n    tempData[row] = thisCase;\n  }\n  props.setRawData(tempData);\n  return <div></div>;\n}\n\nfunction highResHLAGenerator(lowVal, highVal) {\n  if (lowVal && !lowVal.includes(\":\") && lowVal.length === 4) {\n    lowVal = lowVal.substring(0, 2) + \":\" + lowVal.substring(2, 4);\n  }\n  if (highVal && !highVal.includes(\":\") && highVal.length === 4) {\n    highVal = highVal.substring(0, 2) + \":\" + highVal.substring(2, 4);\n  }\n  return lowVal + \",\" + highVal;\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    signedIn: state.auth.signedIn,\n    rawData: state.explore.rawData,\n    hlaMap: state.explore.hlaMap,\n  };\n};\n\n// update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setRawData: (newRawData) =>\n      dispatch({ type: \"SET_RAW_DATA\", value: newRawData }),\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(DataPreProcess);\n","import React, { setState } from \"react\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Button from \"@material-ui/core/Button\";\nimport Box from \"@material-ui/core/Box\";\nimport { connect } from \"react-redux\";\nimport Search from \"./component/Search\";\nimport FetchRawData from \"./component/FetchRawData\";\nimport CaseView from \"../../../CaseView/CaseView\";\nimport DataPreProcess from \"./component/DataPreProcess\";\n\nimport AppBar from \"@material-ui/core/AppBar\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport MenuIcon from \"@material-ui/icons/Menu\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    minHeight: \"30vh\",\n  },\n  button: {\n    marginBottom: theme.spacing(2),\n  },\n  paper: {\n    textAlign: \"center\",\n    // color: theme.palette.text.secondary,\n    \"&:hover\": {\n      backgroundColor: theme.palette.primary.light,\n      cursor: \"pointer\",\n    },\n  },\n  menuButton: {\n    marginRight: theme.spacing(2),\n  },\n}));\n\nfunction Result(props) {\n  const classes = useStyles();\n  const [open, setOpen] = React.useState(false);\n\n  const handleSetDialogue = (value) => {\n    setOpen(value);\n  };\n\n  return (\n    <div className={classes.root}>\n      {/* Fetch raw data */}\n      <FetchRawData />\n      <DataPreProcess />\n      {/* Show search result */}\n\n      <Search\n        setDialogue={handleSetDialogue}\n        requestedCaseId={props.requestedCaseId}\n      />\n      <CaseView open={open} setDialogue={handleSetDialogue} />\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    // Raw Data\n    rawData: state.explore.rawData,\n\n    // Filtered Data\n    filteredData: state.explore.filteredData,\n  };\n};\n\nexport default connect(mapStateToProps)(Result);\n","import React, { setState } from \"react\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Filter from \"./component/Filter/Filter\";\nimport Result from \"./component/Result/Result\";\nimport FetchRawData from \"./component/Result/component/FetchRawData\";\nimport \"../../App.css\";\nimport { CssBaseline } from \"@material-ui/core\";\nimport Header from \"../Header\";\nimport Box from \"@material-ui/core/Box\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    minHeight: \"100vh\",\n    backgroundImage: `url(${\n      process.env.PUBLIC_URL + \"/assets/caseExplorePage.jpg\"\n    })`,\n    backgroundRepeat: \"repeat\",\n    // backgroundSize: \"cover\",\n    //textAlign: \"center\",\n    //backgroundColor: \"#282c34\",\n    //flexDirection: \"column\",\n    //alignItems: \"center\",\n    //justifyContent: \"center\",\n    //color: \"white\",\n    paddingTop: \"130px\",\n    paddingBottom: \"50px\",\n  },\n  filter_paper: {\n    position: \"sticky\",\n    top: 50,\n  },\n  result_paper: {\n    padding: theme.spacing(2),\n  },\n  grid: {\n    width: \"100%\",\n    justifyContent: \"center\",\n  },\n  box: {\n    height: \"100%\",\n    width: \"100%\",\n    display: \"flex\",\n    justifyContent: \"center\",\n    alignItems: \"center\",\n  },\n  box2: {\n    height: \"20vh\",\n    width: \"20vh\",\n    backgroundColor: \"#000000\",\n  },\n}));\n\nexport default function Explore(props) {\n  const classes = useStyles();\n  return (\n    <div>\n      <Header location=\"Case Explore\" />\n\n      <div className={classes.root}>\n        <Grid container spacing={2} justify={\"center\"} className={classes.grid}>\n          <Grid item xs={12} md={3} lg={3} xl={2}>\n            <Paper\n              elevation={3}\n              style={{\n                width: \"100%\",\n              }}\n              className={classes.filter_paper}\n            >\n              <Filter />\n            </Paper>\n          </Grid>\n          <Grid item xs={12} md={7} lg={8} xl={8}>\n            <Paper\n              elevation={3}\n              style={{\n                width: \"100%\",\n              }}\n              className={classes.result_paper}\n            >\n              <Result requestedCaseId={props.requestedCaseId} />\n            </Paper>\n          </Grid>\n        </Grid>\n      </div>\n    </div>\n  );\n}\n","import React, { useEffect, useState } from \"react\";\nimport Explore from \"../component/Explore/Explore\";\nimport { connect } from \"react-redux\";\nimport { useHistory, useParams } from \"react-router-dom\";\nimport Amplify, { API, Hub, Auth } from \"aws-amplify\";\n\nfunction ExplorePage(props) {\n  const history = useHistory();\n  useEffect(() => {\n    checkAuth();\n  }, []);\n\n  async function checkAuth() {\n    try {\n      const authRes = await Auth.currentAuthenticatedUser();\n      props.setSignedIn(true);\n    } catch (error) {\n      console.log(error);\n      props.setSignedIn(false);\n      history.push(\"/signin\");\n    }\n  }\n  let { caseId } = useParams();\n  console.log(\"On explore page, requested case id\", caseId);\n\n  return (\n    <div>{props.signedIn ? <Explore requestedCaseId={caseId} /> : null}</div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    signedIn: state.auth.signedIn,\n  };\n};\n\n// Update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setSignedIn: (newSignedIn) =>\n      dispatch({ type: \"SET_SIGNEDIN\", value: newSignedIn }),\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ExplorePage);\n","import React from \"react\";\n\nexport default function TextCheckAndFix(inputText) {\n  // This method checks if input string has conflict marks in html and add escape to illegal one\n  function escapeHtml(textString) {\n    var entityMap = {\n      \"&\": \"\\\\&\",\n      \"<\": \"\\\\<\",\n      \">\": \"\\\\>\",\n      '\"': '\\\\\"',\n      \"'\": \"\\\\'\",\n      \"/\": \"\\\\/\",\n    };\n    return String(textString).replace(/[&<>\"'\\/]/g, function (s) {\n      return entityMap[s];\n    });\n  }\n  return escapeHtml(inputText);\n}\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Box from \"@material-ui/core/Box\";\nimport TextCheckAndFix from \"./TextCheckAndFix\";\n\nconst useStyles = makeStyles((theme) => ({\n  input: {\n    maxWidth: \"140px\",\n    height: \"30px\",\n    marginLeft: \"4px\",\n    marginBottom: \"5px\",\n  },\n  input_invalid: {\n    maxWidth: \"140px\",\n    height: \"30px\",\n    marginLeft: \"4px\",\n    marginBottom: \"5px\",\n    color: \"red\",\n    border: \"2px solid red\",\n  },\n  hint_invalid: {\n    marginTop: \"-5px\",\n    color: \"red\",\n    fontSize: 12,\n  },\n  labelColored: {\n    backgroundColor: \"#fae7cf\",\n    padding: \"3px\",\n  },\n  label: {\n    padding: \"3px\",\n  },\n}));\n\nfunction isValid(value, restrict) {\n  if (restrict.range.length === 0) {\n    return true;\n  }\n  // string type\n  if (\n    restrict.type === \"string\" &&\n    restrict.range[0] <= value.length &&\n    value.length <= restrict.range[1]\n  ) {\n    return true;\n  }\n  // int or float\n  if (\n    (restrict.type === \"int\" || restrict.type === \"float\") &&\n    restrict.range[0] <= value &&\n    value <= restrict.range[1]\n  ) {\n    return true;\n  }\n  return false;\n}\n\nexport default function TextBox({\n  name,\n  value,\n  setValue,\n  setChanged,\n  restrict,\n  valid,\n}) {\n  const classes = useStyles();\n  const [invalid, setInvalid] = useState(false);\n  const [labelChanged, setLabelChanged] = useState(false);\n  const handleChange = (event) => {\n    var newVal = TextCheckAndFix(event.target.value);\n    if (isValid(newVal, restrict)) {\n      if (newVal === \"\") {\n        setValue(null);\n      } else {\n        setValue(newVal);\n      }\n      setChanged(true);\n      valid[1](true);\n      setInvalid(false);\n    } else {\n      valid[1](false);\n      setInvalid(true);\n    }\n    // Case ID input doesn't need label notice for value changed\n    if (name !== \"Case ID\") {\n      setLabelChanged(true);\n    }\n  };\n  return (\n    <div>\n      <Box display=\"flex\" alignItems=\"center\">\n        <Box>\n          <label\n            className={labelChanged ? classes.labelColored : classes.label}\n          >\n            {name}:\n          </label>\n        </Box>\n        <Box>\n          <input\n            type=\"text\"\n            defaultValue={value}\n            onInput={handleChange}\n            className={invalid ? classes.input_invalid : classes.input}\n          />\n        </Box>\n      </Box>\n      {invalid ? (\n        <p className={classes.hint_invalid}>\n          Input is invalid, type: string, constrain: {restrict.range[0]} &lt;=\n          input length &lt;= {restrict.range[1]}\n        </p>\n      ) : null}\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport TextareaAutosize from \"@material-ui/core/TextareaAutosize\";\nimport Box from \"@material-ui/core/Box\";\nimport TextCheckAndFix from \"./TextCheckAndFix\";\n\nconst useStyles = makeStyles((theme) => ({\n  inputLarge: {\n    maxWidth: \"140px\",\n    minHeight: \"30px\",\n    marginLeft: \"4px\",\n    marginBottom: \"3px\",\n  },\n  input_invalid: {\n    maxWidth: \"140px\",\n    minHeight: \"30px\",\n    marginLeft: \"4px\",\n    marginBottom: \"3px\",\n    color: \"red\",\n    border: \"2px solid red\",\n  },\n  hint_invalid: {\n    marginTop: \"-5px\",\n    color: \"red\",\n    fontSize: 12,\n  },\n  labelColored: {\n    backgroundColor: \"#fae7cf\",\n    padding: \"3px\",\n  },\n  label: {\n    padding: \"3px\",\n  },\n}));\n\nfunction isValid(value, restrict) {\n  if (restrict.range.length === 0) {\n    return true;\n  }\n  // string type\n  if (\n    restrict.type === \"string\" &&\n    restrict.range[0] <= value.length &&\n    value.length <= restrict.range[1]\n  ) {\n    return true;\n  }\n\n  return false;\n}\n\nconst largeInputBoxStyle = {\n  resize: \"both\",\n  overflow: \"auto\",\n};\n\nexport default function TextBoxLarge({\n  name,\n  value,\n  setValue,\n  setChanged,\n  restrict,\n  valid,\n}) {\n  const classes = useStyles();\n  const [invalid, setInvalid] = useState(false);\n  const [labelChanged, setLabelChanged] = useState(false);\n  const handleChange = (event) => {\n    var newVal = TextCheckAndFix(event.target.value);\n    if (isValid(newVal, restrict)) {\n      if (newVal === \"\") {\n        setValue(null);\n      } else {\n        setValue(newVal);\n      }\n      setChanged(true);\n      valid[1](true);\n      setInvalid(false);\n    } else {\n      valid[1](false);\n      setInvalid(true);\n    }\n    setLabelChanged(true);\n  };\n  return (\n    <div>\n      <Box display=\"flex\" alignItems=\"center\">\n        <Box>\n          <label\n            className={labelChanged ? classes.labelColored : classes.label}\n          >\n            {name}:\n          </label>\n        </Box>\n        <Box>\n          {/* <TextareaAutosize\n            defaultValue={value}\n            onChange={handleChange}\n            className={invalid ? classes.input_invalid : classes.inputLarge}\n          /> */}\n          {/* <input\n            type=\"text\"\n            defaultValue={value}\n            onChange={handleChange}\n            className={invalid ? classes.errInput : classes.inputLarge}\n          /> */}\n          <textarea\n            type=\"text\"\n            defaultValue={value || \"\"}\n            onInput={handleChange}\n            className={invalid ? classes.errInput : classes.inputLarge}\n          ></textarea>\n        </Box>\n      </Box>\n      {invalid ? (\n        <p className={classes.hint_invalid}>\n          Input is invalid, type: string, constrain: {restrict.range[0]} &lt;=\n          input length &lt;= {restrict.range[1]}\n        </p>\n      ) : null}\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Box from \"@material-ui/core/Box\";\nimport TextCheckAndFix from \"./TextCheckAndFix\";\n\nconst useStyles = makeStyles((theme) => ({\n  input: {\n    maxWidth: \"140px\",\n    height: \"30px\",\n    marginLeft: \"4px\",\n    marginBottom: \"5px\",\n  },\n  input_invalid: {\n    maxWidth: \"140px\",\n    height: \"30px\",\n    marginLeft: \"4px\",\n    marginBottom: \"5px\",\n    color: \"red\",\n    border: \"2px solid red\",\n  },\n  hint_invalid: {\n    marginTop: \"-5px\",\n    color: \"red\",\n    fontSize: 12,\n  },\n  labelColored: {\n    backgroundColor: \"#fae7cf\",\n    padding: \"3px\",\n  },\n  label: {\n    padding: \"3px\",\n  },\n}));\n\nfunction isValid(value, restrict) {\n  if (restrict.range.length === 0) {\n    return true;\n  }\n  // string type\n  if (\n    restrict.type === \"string\" &&\n    restrict.range[0] <= value.length &&\n    value.length <= restrict.range[1] &&\n    /^[0-9][0-9]:[0-9][0-9]$|^[0-9]:[0-9]$|^[0-9][0-9]\\([0-9][0-9]\\)$|^[0-9][0-9]:[0-9][0-9]\\/0|^[0-9][0-9]$/.test(\n      value\n    )\n  ) {\n    return true;\n  }\n\n  return false;\n}\n\nexport default function TextBox({\n  name,\n  value,\n  setValue,\n  setChanged,\n  restrict,\n  valid,\n}) {\n  const classes = useStyles();\n  const [invalid, setInvalid] = useState(false);\n  const [labelChanged, setLabelChanged] = useState(false);\n  const handleChange = (event) => {\n    var newVal = TextCheckAndFix(event.target.value);\n    if (isValid(newVal, restrict)) {\n      if (newVal === \"\") {\n        setValue(null);\n      } else {\n        setValue(newVal);\n      }\n      setChanged(true);\n      valid[1](true);\n      setInvalid(false);\n    } else {\n      valid[1](false);\n      setInvalid(true);\n    }\n    setLabelChanged(true);\n  };\n  return (\n    <div>\n      <Box display=\"flex\" alignItems=\"center\">\n        <Box>\n          <label\n            className={labelChanged ? classes.labelColored : classes.label}\n          >\n            {name}:\n          </label>\n        </Box>\n        <Box>\n          <input\n            type=\"text\"\n            defaultValue={value}\n            onInput={handleChange}\n            className={invalid ? classes.input_invalid : classes.input}\n          />\n        </Box>\n      </Box>\n      {invalid ? (\n        <p className={classes.hint_invalid}>\n          Input is invalid, type: string, constrain: {restrict.range[0]} &lt;=\n          input length &lt;= {restrict.range[1]}, format: 00 or 0:0 or 00:00 or\n          00(00) or 00:00/0\n        </p>\n      ) : null}\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport DatePicker from \"react-datepicker\";\nimport \"react-datepicker/dist/react-datepicker.css\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Box from \"@material-ui/core/Box\";\n\nconst useStyles = makeStyles((theme) => ({\n  datePicker: {\n    width: \"140px\",\n    height: \"25px\",\n    marginLeft: \"4px\",\n    marginBottom: \"5px\",\n  },\n  labelColored: {\n    backgroundColor: \"#fae7cf\",\n    padding: \"3px\",\n  },\n  label: {\n    padding: \"3px\",\n  },\n}));\n\nexport default function DateBox({ name, value, setValue, setChanged }) {\n  const classes = useStyles();\n  const [newDate, setNewDate] = useState(null);\n  const [labelChanged, setLabelChanged] = useState(false);\n  const handleDateChange = (date) => {\n    setValue(date.toLocaleDateString(\"en-CA\").slice(0, 10));\n    console.log(\n      \"writing time is\",\n      date.toLocaleDateString(\"en-CA\").slice(0, 10)\n    );\n    setNewDate(date);\n    setChanged(true);\n    setLabelChanged(true);\n  };\n  return (\n    <div>\n      <Box display=\"flex\" alignItems=\"center\">\n        <Box>\n          <label\n            className={labelChanged ? classes.labelColored : classes.label}\n          >\n            {name}:\n          </label>\n        </Box>\n        <Box>\n          <DatePicker\n            selected={\n              value && !newDate\n                ? new Date(\n                    Date.parse(value.slice(0, 10) + \" 00:00:00 GMT-0500\")\n                  )\n                : newDate\n            }\n            onChange={handleDateChange}\n            className={classes.datePicker}\n          />\n        </Box>\n      </Box>\n    </div>\n  );\n}\n","import React, { useState } from \"react\";\nimport Select from \"react-select\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Box from \"@material-ui/core/Box\";\n\nconst useStyles = makeStyles((theme) => ({\n  select: {\n    width: \"220px\",\n    //height: \"25px\",\n    marginLeft: \"4px\",\n    marginBottom: \"5px\",\n  },\n  labelColored: {\n    backgroundColor: \"#fae7cf\",\n    padding: \"3px\",\n  },\n  label: {\n    padding: \"3px\",\n  },\n}));\n\nexport default function DropBox({ name, value, setValue, setChanged, ops }) {\n  const classes = useStyles();\n  const [defaultValue, setDefaultValue] = useState(null);\n  const [labelChanged, setLabelChanged] = useState(false);\n  const handleChange = (selected) => {\n    setDefaultValue(selected);\n    setValue(selected.value);\n    // Dropdown list for selecting AAb and RNA table record doesn't need to be set as \"changed\"\n    if (\n      name !== \"RNA ID List\" &&\n      name !== \"AAb ID List\" &&\n      name !== \"Vial ID List\"\n    ) {\n      setLabelChanged(true);\n      setChanged(true);\n    }\n  };\n\n  return (\n    <div>\n      <Box display=\"flex\" alignItems=\"center\">\n        <Box>\n          <label\n            className={labelChanged ? classes.labelColored : classes.label}\n          >\n            {name}:\n          </label>\n        </Box>\n        <Box>\n          <Select\n            className={classes.select}\n            value={\n              defaultValue\n                ? defaultValue\n                : ops.map((op) => {\n                    if (op.value === value) {\n                      return op;\n                    }\n                  })\n            }\n            onChange={handleChange}\n            options={ops}\n          />\n        </Box>\n      </Box>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport TextField from \"@material-ui/core/TextField\";\nimport \"rc-time-picker/assets/index.css\";\nimport moment from \"moment\";\nimport TimePicker from \"rc-time-picker\";\nimport styled from \"styled-components\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Box from \"@material-ui/core/Box\";\n\nconst StyledTimePicker = styled(TimePicker)`\n  & .rc-time-picker-clear {\n    position: absolute;\n    right: -30px;\n  }\n\n  & .rc-time-picker-clear-icon:after {\n    font-size: 15px;\n  }\n  & .rc-time-picker-input {\n    width: 140px;\n    font-size: 16px;\n  }\n`;\n\nconst useStyles = makeStyles((theme) => ({\n  container: {\n    display: \"flex\",\n    flexWrap: \"wrap\",\n    width: 200,\n  },\n  textField: {\n    marginLeft: theme.spacing(1),\n    marginRight: theme.spacing(1),\n  },\n  labelColored: {\n    backgroundColor: \"#fae7cf\",\n    padding: \"3px\",\n  },\n  label: {\n    padding: \"3px\",\n  },\n}));\n\nexport default function TimeBox({ name, value, setValue, setChanged }) {\n  const classes = useStyles();\n  const [defaultTime, setDefaultTime] = useState(null);\n  const [defaultValue, setDefaultValue] = useState(null);\n  const [labelChanged, setLabelChanged] = useState(false);\n  useEffect(() => {\n    setDefaultTime(value);\n    setDefaultValue(moment(\"2021-09-22 \" + value, \"YYYY-MM-DD hh:mm:ss\"));\n  }, [value]);\n\n  const handleTimeChange = (event) => {\n    setValue(event.target.value);\n    setChanged(true);\n    setDefaultTime(event.target.value);\n  };\n\n  const onChange = (newValue) => {\n    console.log(newValue && newValue.format(\"HH:mm\"));\n    setValue(newValue.format(\"HH:mm\"));\n    setDefaultValue(newValue);\n    setLabelChanged(true);\n  };\n\n  return (\n    <div>\n      <Box display=\"flex\" alignItems=\"center\">\n        <Box>\n          <label\n            className={labelChanged ? classes.labelColored : classes.label}\n          >\n            {name}:\n          </label>\n        </Box>\n        <Box>\n          <StyledTimePicker\n            style={{ width: 100 }}\n            showSecond={false}\n            value={defaultValue}\n            className=\"xxx\"\n            onChange={onChange}\n          />\n        </Box>\n      </Box>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Box from \"@material-ui/core/Box\";\n\nconst useStyles = makeStyles((theme) => ({\n  input: {\n    maxWidth: \"140px\",\n    height: \"25px\",\n    marginLeft: \"4px\",\n    marginBottom: \"5px\",\n  },\n  errInput: {\n    maxWidth: \"140px\",\n    height: \"25px\",\n    marginLeft: \"4px\",\n    marginBottom: \"5px\",\n    color: \"red\",\n    border: \"1px solid red\",\n  },\n  hint_invalid: {\n    marginTop: \"-5px\",\n    color: \"red\",\n    fontSize: 12,\n  },\n  labelColored: {\n    backgroundColor: \"#fae7cf\",\n    padding: \"3px\",\n  },\n  label: {\n    padding: \"3px\",\n  },\n}));\n\nfunction isValid(value, restrict) {\n  if (restrict.range.length === 0 || value === \"\") {\n    return true;\n  }\n  // int or float\n  if (\n    restrict.type === \"int\" &&\n    restrict.range[0] <= value &&\n    value <= restrict.range[1] &&\n    !/[a-zA-Z]/.test(value) &&\n    parseInt(value) == value\n  ) {\n    return true;\n  }\n  return false;\n}\n\nexport default function IntegerNumberBox({\n  name,\n  value,\n  setValue,\n  setChanged,\n  restrict,\n  valid,\n}) {\n  const classes = useStyles();\n  const [isInt, setIsInt] = useState(true);\n  const [invalid, setInvalid] = useState(false);\n  const [labelChanged, setLabelChanged] = useState(false);\n  const handleChange = (event) => {\n    if (isValid(event.target.value, restrict)) {\n      if (event.target.value === \"\") {\n        setValue(null);\n      } else {\n        setValue(event.target.value);\n      }\n      setChanged(true);\n      valid[1](true);\n      setInvalid(false);\n    } else {\n      valid[1](false);\n      setInvalid(true);\n    }\n    setLabelChanged(true);\n  };\n  return (\n    <div>\n      <Box display=\"flex\" alignItems=\"center\">\n        <Box>\n          <label\n            className={labelChanged ? classes.labelColored : classes.label}\n          >\n            {name}:\n          </label>\n        </Box>\n        <Box>\n          <input\n            type=\"text\"\n            defaultValue={value}\n            onInput={handleChange}\n            className={invalid ? classes.errInput : classes.input}\n          />\n        </Box>\n      </Box>\n      {invalid ? (\n        <p className={classes.hint_invalid}>\n          Input is invalid, type: integer, constrain: {restrict.range[0]} &lt;=\n          input &lt;=\n          {restrict.range[1]}\n        </p>\n      ) : null}\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Box from \"@material-ui/core/Box\";\n\nconst useStyles = makeStyles((theme) => ({\n  input: {\n    maxWidth: \"140px\",\n    height: \"25px\",\n    marginLeft: \"4px\",\n    marginBottom: \"5px\",\n  },\n  errInput: {\n    maxWidth: \"140px\",\n    height: \"25px\",\n    marginLeft: \"4px\",\n    marginBottom: \"5px\",\n    color: \"red\",\n    border: \"1px solid red\",\n  },\n  hint_invalid: {\n    marginTop: \"-5px\",\n    color: \"red\",\n    fontSize: 12,\n  },\n  labelColored: {\n    backgroundColor: \"#fae7cf\",\n    padding: \"3px\",\n  },\n  label: {\n    padding: \"3px\",\n  },\n}));\n\nfunction isValid(value, restrict) {\n  if (restrict.range.length === 0 || value === \"\") {\n    return true;\n  }\n  // int or float\n  if (\n    restrict.type === \"float\" &&\n    restrict.range[0] <= value &&\n    value <= restrict.range[1] &&\n    !/[a-zA-Z]/.test(value) &&\n    parseFloat(value) == value\n  ) {\n    return true;\n  }\n  return false;\n}\n\nexport default function FloatNumberBox({\n  name,\n  value,\n  setValue,\n  setChanged,\n  restrict,\n  valid,\n}) {\n  const classes = useStyles();\n  const [invalid, setInvalid] = useState(false);\n  const [labelChanged, setLabelChanged] = useState(false);\n  const handleChange = (event) => {\n    if (isValid(event.target.value, restrict)) {\n      if (event.target.value === \"\") {\n        setValue(null);\n      } else {\n        setValue(event.target.value);\n      }\n      setChanged(true);\n      valid[1](true);\n      setInvalid(false);\n    } else {\n      valid[1](false);\n      setInvalid(true);\n    }\n    setLabelChanged(true);\n  };\n  return (\n    <div>\n      <Box display=\"flex\" alignItems=\"center\">\n        <Box>\n          <label\n            className={labelChanged ? classes.labelColored : classes.label}\n          >\n            {name}:\n          </label>\n        </Box>\n        <Box>\n          <input\n            type=\"text\"\n            defaultValue={value}\n            onInput={handleChange}\n            className={invalid ? classes.errInput : classes.input}\n          />\n        </Box>\n      </Box>\n      {invalid ? (\n        <p className={classes.hint_invalid}>\n          Input is invalid, type: float, constrain: {restrict.range[0]} &lt;=\n          input &lt;=\n          {restrict.range[1]}\n        </p>\n      ) : null}\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport DatePicker from \"react-datepicker\";\nimport \"react-datepicker/dist/react-datepicker.css\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { Typography } from \"@material-ui/core\";\nimport Box from \"@material-ui/core/Box\";\nimport useCheckForeignKey from \"./useCheckForeignKey\";\nimport TextareaAutosize from \"@material-ui/core/TextareaAutosize\";\nimport TextBox from \"./TextBox\";\nimport TextBoxLarge from \"./TextBoxLarge\";\nimport TextBoxForHLA from \"./TextBoxForHLA\";\nimport DateBox from \"./DateBox\";\nimport DropBox from \"./DropBox\";\nimport TimeBox from \"./TimeBox\";\nimport IntegerNumberBox from \"./IntegerNumberBox\";\nimport FloatNumberBox from \"./FloatNumberBox\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    \"& .MuiTextField-root\": {\n      margin: theme.spacing(1),\n      width: \"25ch\",\n    },\n  },\n}));\n\nexport default function InputBox({\n  columnProps,\n  name,\n  value,\n  setValue,\n  setChanged,\n}) {\n  const classes = useStyles();\n\n  const getInputContent = (input) => {\n    switch (input) {\n      case \"inputBox\":\n        return (\n          <TextBox\n            name={name}\n            value={value}\n            setValue={setValue}\n            setChanged={setChanged}\n            restrict={columnProps.restrict}\n            valid={columnProps.valid}\n          />\n        );\n        break;\n      case \"inputBoxLarge\":\n        return (\n          <TextBoxLarge\n            name={name}\n            value={value}\n            setValue={setValue}\n            setChanged={setChanged}\n            restrict={columnProps.restrict}\n            valid={columnProps.valid}\n          />\n        );\n        break;\n      case \"inputBoxHLA\":\n        return (\n          <TextBoxForHLA\n            name={name}\n            value={value}\n            setValue={setValue}\n            setChanged={setChanged}\n            restrict={columnProps.restrict}\n            valid={columnProps.valid}\n          />\n        );\n        break;\n      case \"integerBox\":\n        return (\n          <IntegerNumberBox\n            name={name}\n            value={value}\n            setValue={setValue}\n            setChanged={setChanged}\n            restrict={columnProps.restrict}\n            valid={columnProps.valid}\n          />\n        );\n        break;\n      case \"floatBox\":\n        return (\n          <FloatNumberBox\n            name={name}\n            value={value}\n            setValue={setValue}\n            setChanged={setChanged}\n            restrict={columnProps.restrict}\n            valid={columnProps.valid}\n          />\n        );\n        break;\n      case \"dropDown\":\n        return (\n          <DropBox\n            name={name}\n            value={value}\n            setValue={setValue}\n            setChanged={setChanged}\n            ops={columnProps.ops}\n          />\n        );\n        break;\n      case \"datePicker\":\n        return (\n          <DateBox\n            name={name}\n            value={value}\n            setValue={setValue}\n            setChanged={setChanged}\n          />\n        );\n      case \"timePicker\":\n        return (\n          <TimeBox\n            name={name}\n            value={value}\n            setValue={setValue}\n            setChanged={setChanged}\n          />\n        );\n      default:\n        break;\n    }\n  };\n\n  return (\n    <div className={classes.root}>{getInputContent(columnProps.input)}</div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { Typography } from \"@material-ui/core\";\nimport InputBox from \"./InputBox\";\n\nconst useStyles = makeStyles((theme) => ({\n  valueList: {\n    display: \"none\",\n  },\n}));\n\nexport default function GridBox({\n  columnPropsList,\n  nameList,\n  valueList,\n  setValueList,\n  setChanged,\n}) {\n  const classes = useStyles();\n  return (\n    <div>\n      <Grid container spacing={2} justify=\"flex-start\">\n        <Grid item md={4}>\n          <InputBox\n            columnProps={columnPropsList[0]}\n            name={nameList[0]}\n            value={valueList[0]}\n            setValue={setValueList[0]}\n            setChanged={setChanged}\n          />\n        </Grid>\n\n        {nameList[1] ? (\n          <Grid item md={4}>\n            <InputBox\n              columnProps={columnPropsList[1]}\n              name={nameList[1]}\n              value={valueList[1]}\n              setValue={setValueList[1]}\n              setChanged={setChanged}\n            />\n          </Grid>\n        ) : null}\n\n        {nameList[2] ? (\n          <Grid item md={4}>\n            <InputBox\n              columnProps={columnPropsList[2]}\n              name={nameList[2]}\n              value={valueList[2]}\n              setValue={setValueList[2]}\n              setChanged={setChanged}\n            />\n          </Grid>\n        ) : null}\n      </Grid>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\n\nexport default function useDebounced(initialValue, timeout) {\n  const [actualValue, setActualValue] = useState(initialValue);\n  const [debouncedValue, setDebouncedValue] = useState(initialValue);\n  useEffect(() => {\n    const timeoutId = setTimeout(() => {\n      setDebouncedValue(actualValue);\n    }, timeout);\n    return () => {\n      clearTimeout(timeoutId);\n    };\n  }, [actualValue, timeout]);\n  return [debouncedValue, setActualValue, true];\n}\n\n// export default function useDebounced(value, timeout) {\n//   const [debouncedValue, setDebouncedValue] = useState(value);\n//   useEffect(() => {\n//     const timeoutId = setTimeout(() => {\n//       console.log(\"Setting the value\");\n//       setDebouncedValue(value);\n//     }, timeout);\n//     return () => {\n//       console.log(\"clearing the timemout\");\n//       clearTimeout(timeoutId);\n//     };\n//   }, [value, timeout]);\n//   return debouncedValue;\n// }\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useCreateCase(\n  caseId,\n  isExist,\n  create,\n  changed,\n  setAccept,\n  setExist,\n  setCreateMsg,\n  setCreateSuccess\n) {\n  const [result, setResult] = useState(false);\n  useEffect(() => {\n    if (!isExist && create && !changed) {\n      createCase(caseId);\n      console.log(\"New case has been created!\");\n    } else {\n      console.log(\"Case create condition is not met.\");\n    }\n  }, [caseId, isExist, create, changed]);\n\n  async function createCase(id) {\n    console.log(\"creating new case\");\n    return await API.post(\"dbapi\", \"/db/create_case\", {\n      body: {\n        case_id: id,\n      },\n    })\n      .then((res) => {\n        console.log(res);\n        setResult(true);\n        setExist(true);\n        setCreateSuccess(true);\n        setCreateMsg(`case ${id} was created successfully.`);\n        console.log(`case ${id} was created successfully.`);\n      })\n      .catch((error) => {\n        console.log(\"Amplify API call error\", error);\n        setCreateSuccess(false);\n        setResult(false);\n        setAccept(false);\n      });\n  }\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\nimport { TrendingUp } from \"@material-ui/icons\";\n\nexport default function useCheckCaseExist(\n  caseId,\n  setCheckFail,\n  setExist,\n  setExistMsg,\n  setCaseExist,\n  createSuccess\n) {\n  const [checkResult, setCheckResult] = useState(false);\n  useEffect(() => {\n    if (caseId !== \"\") {\n      checkExist(caseId);\n    }\n  }, [caseId, createSuccess]);\n\n  async function checkExist(id) {\n    return await API.post(\"dbapi\", \"/db/check_case_exist\", {\n      body: {\n        case_id: id,\n      },\n    })\n      .then((res) => {\n        setCheckFail(false);\n        if (res[0][\"COUNT(1)\"] > 0) {\n          setExist(true);\n          setCheckResult(true);\n          setCaseExist(true);\n          setExistMsg(\"Case exists, click 'Update' to proceed updating.\");\n          console.log(`Check exist. case ${caseId} exists!`);\n        } else {\n          setExist(false);\n          setCaseExist(false);\n          setCheckResult(false);\n          setExistMsg(\n            \"Case DOES NOT exist, click 'Create' then 'Next' to proceed creating.\"\n          );\n        }\n      })\n      .catch((error) => {\n        console.log(\"Amplify API call error\", error);\n        setCheckFail(true);\n      });\n  }\n  return checkResult;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport GridBox from \"./component/GridBox\";\nimport useDebounced from \"./component/useDebounced\";\nimport useCreateCase from \"./component/useCreateCase\";\nimport useCheckCaseExist from \"./component/useCheckCaseExist\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport Fade from \"@material-ui/core/Fade\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    \"& .MuiTextField-root\": {\n      margin: theme.spacing(1),\n      width: \"25ch\",\n    },\n  },\n  alert: {\n    marginTop: \"5px\",\n    marginBottom: \"5px\",\n    width: \"90%\",\n  },\n}));\n\nconst handleSumbit = async function (event) {};\n\nexport default function CreateCase_step0({\n  setCaseId,\n  exist,\n  setExist,\n  create,\n  update,\n  changed,\n  setChanged,\n  setAccept,\n}) {\n  const classes = useStyles();\n\n  useEffect(() => {\n    if (update && caseExist) {\n      setAccept(true);\n    } else {\n      setAccept(false);\n    }\n  }, [create, update]);\n\n  const [value0, setValue0] = useDebounced(\"\", 1000);\n\n  const columnList = [\"case_id\"];\n  const columnPropsList = [\n    {\n      column: \"case_id\",\n      input: \"inputBox\",\n      restrict: { type: \"string\", range: [1, 10] },\n      valid: useState(true),\n      ops: [],\n    },\n  ];\n  const nameList = [\"Case ID\"];\n  const valueList = [value0];\n  const setValueList = [setValue0];\n  const [checkFail, setCheckFail] = useState(true);\n  const [caseExist, setCaseExist] = useState(false);\n  const [showExistMsg, setShowExistMsg] = useState(false);\n  const [existMsg, setExistMsg] = useState(\"Please input case number and wait\");\n  const [showCreateMsg, setShowCreateMsg] = useState(false);\n  const [createMsg, setCreateMsg] = useState(\"\");\n  const [createSuccess, setCreateSuccess] = useState(false);\n\n  const isExist = useCheckCaseExist(\n    value0,\n    setCheckFail,\n    setExist,\n    setExistMsg,\n    setCaseExist,\n    createSuccess\n  );\n\n  const isCreate = useCreateCase(\n    value0,\n    isExist,\n    create,\n    changed,\n    setAccept,\n    setExist,\n    setCreateMsg,\n    setCreateSuccess\n  );\n\n  useEffect(() => {\n    setCaseId(value0);\n\n    if (createSuccess) {\n      setShowCreateMsg(true);\n      const timer3 = setTimeout(() => {\n        setShowCreateMsg(false);\n        setCreateSuccess(false);\n      }, 3000);\n    }\n  }, [createSuccess, value0]);\n\n  useEffect(() => {\n    if (value0 !== \"\") {\n      if (caseExist) {\n        setExistMsg(\"Case exists, click 'Update' to proceed updating.\");\n      } else {\n        setExistMsg(\n          \"Case DOES NOT exist, click 'Create' then 'Next' to proceed creating.\"\n        );\n      }\n    }\n\n    const timer1 = setTimeout(() => {\n      setShowExistMsg(true);\n    }, 300);\n    const timer2 = setTimeout(() => {\n      setShowExistMsg(false);\n    }, 3000);\n  }, [caseExist, createSuccess, value0]);\n\n  return (\n    <div className={classes.root}>\n      <form noValidate onSubmit={handleSumbit}>\n        <div>\n          <GridBox\n            columnPropsList={columnPropsList}\n            nameList={nameList}\n            valueList={valueList}\n            setValueList={setValueList}\n            setChanged={setChanged}\n          />\n        </div>\n        {/* <div>[Debug] input case number is {valueList[0]}</div>\n        {createResult ? <div>The case was created successfully!</div> : null} */}\n      </form>\n      <Fade in={showExistMsg}>\n        <Alert variant=\"filled\" severity=\"info\" className={classes.alert}>\n          {existMsg}\n        </Alert>\n      </Fade>\n      <Fade in={showCreateMsg}>\n        <Alert variant=\"filled\" severity=\"success\" className={classes.alert}>\n          {createMsg}\n        </Alert>\n      </Fade>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useRetrieveCaseColumns(caseId, columnList) {\n  const [result, setResult] = useState([]);\n  useEffect(() => {\n    if (caseId !== \"\") {\n      retrieve(caseId, columnList);\n    }\n  }, [caseId]);\n  async function retrieve(id, columns) {\n    return await API.post(\"dbapi\", \"/db/get_one_case_all_column_values\", {\n      body: {\n        case_id: id,\n        columns: columns,\n      },\n    })\n      .then((res) => {\n        let valueArray = [];\n        for (let i = 0; i < columnList.length; i++) {\n          valueArray.push(res[0][columnList[i]]);\n        }\n        console.log(\"Retrieved existing case column values\", valueArray);\n        setResult(valueArray);\n      })\n      .catch((error) => {\n        console.log(\"Retrieve case columns failed.\");\n        console.log(\"Failed case id\", id);\n        console.log(\"Failed columnList\", columns);\n        console.log(\"Amplify API call error\", error);\n      });\n  }\n\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useRetrieveTableColumn(tableName, columnName, sortBy) {\n  const [result, setResult] = useState([]);\n  useEffect(() => {\n    if (tableName !== \"\") {\n      retrieve(tableName, columnName, sortBy);\n    }\n  }, [tableName]);\n  async function retrieve(table, column, sortby) {\n    return await API.post(\n      \"dbapi\",\n      \"/db/get_one_table_one_column_all_existing_values\",\n      {\n        body: {\n          table_name: table,\n          column_name: column,\n          sort_by: sortby,\n        },\n      }\n    )\n      .then((res) => {\n        console.log(\"Table column was retrieved successfully.\");\n        setResult(res);\n      })\n      .catch((error) => {\n        console.log(\"Failed to retrieve table column\");\n        console.log(\"Failed table\", table);\n        console.log(\"Failed column\", column);\n        console.log(\"Failed sortby\", sortby);\n        console.log(\"Amplify API call error\", error);\n      });\n  }\n\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useUpdateCase(\n  caseId,\n  update,\n  changed,\n  setAccept,\n  updateColumns,\n  updateValues,\n  setShowError,\n  setShowSuccess,\n  setMsg\n) {\n  const [result, setResult] = useState(false);\n  useEffect(() => {\n    if (update && !changed) {\n      console.log(\"[Cases] Updating case columns...\");\n      updateCase(caseId, updateColumns, updateValues);\n    }\n  }, [caseId, update, changed]);\n  async function updateCase(id, columns, values) {\n    return await API.put(\"dbapi\", \"/db/update_case\", {\n      body: {\n        case_id: id,\n        update_columns: columns,\n        update_values: values,\n      },\n    })\n      .then((res) => {\n        if (res[\"affectedRows\"] ?? false) {\n          console.log(\"[Cases] Update success id\", id);\n          console.log(\"[Cases] Update success columns\", columns);\n          console.log(\"[Cases] Update success values\", values);\n          setResult(true);\n          setShowError(false);\n          setShowSuccess(true);\n          setMsg(\"[Cases] Update is successful!\");\n          console.log(\"[Cases] Update case columns are successful!\");\n        }\n      })\n      .catch((error) => {\n        setAccept(false);\n        setShowError(true);\n        setShowSuccess(false);\n        setMsg(\"[Cases] Update is failed\");\n        console.log(\"[Cases] Amplify API call error\", error);\n        console.log(\"[Cases] Update fail id\", id);\n        console.log(\"[Cases] Update fail columns\", columns);\n        console.log(\"[Cases] Update fail values\", values);\n      });\n  }\n\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport GridBox from \"./component/GridBox\";\nimport useDebounced from \"./component/useDebounced\";\nimport useRetrieveCaseColumns from \"./component/useRetrieveCaseColumns\";\nimport useRetrieveTableColumn from \"./component/useRetrieveTableColumn\";\nimport useUpdateCase from \"./component/useUpdateCase\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport Fade from \"@material-ui/core/Fade\";\nimport { Typography } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    \"& .MuiTextField-root\": {\n      margin: theme.spacing(1),\n      width: \"25ch\",\n    },\n  },\n  title: {\n    margin: theme.spacing(1, 0, 2),\n    paddingTop: \"3px\",\n    paddingBottom: \"3px\",\n    backgroundColor: \"#d9d9d9\",\n  },\n  titleText: {\n    paddingLeft: \"10px\",\n  },\n  resizeInputBox: {\n    resize: \"vertical\",\n    maxWidth: \"140px\",\n    height: \"25px\",\n    marginLeft: \"4px\",\n    marginBottom: \"5px\",\n  },\n  alert: {\n    marginTop: \"5px\",\n    marginBottom: \"5px\",\n    width: \"90%\",\n  },\n  alert2: {\n    marginTop: \"4px\",\n    marginBottom: \"3px\",\n  },\n}));\n\nfunction opsGenerator(idArr, nameArr) {\n  const ops = [];\n  for (let i = 0; i < idArr.length; i++) {\n    ops.push({ value: idArr[i], label: nameArr[i] });\n  }\n  ops.push({ value: null, label: \"NULL\" });\n  return ops;\n}\n\nfunction opsGenerator2(idArr, nameArr, otherArr) {\n  const ops = [];\n  for (let i = 0; i < idArr.length; i++) {\n    let labelVar = nameArr[i] + \" (\" + otherArr[i] + \")\";\n    ops.push({ value: idArr[i], label: labelVar });\n  }\n  ops.push({ value: null, label: \"NULL\" });\n  return ops;\n}\n\nexport default function CaseIdentificationAndQC_step1({\n  caseId,\n  update,\n  changed,\n  setAccept,\n  setChanged,\n}) {\n  const classes = useStyles();\n\n  const columnList = [\n    \"is_public\",\n    \"alt_case_id\",\n    \"UNOS_id\",\n    \"RR_id\",\n    \"Aperio_id\",\n    \"donor_type_id\",\n    \"donor_type_comments\",\n    \"case_flag\",\n    \"retire_status\",\n    \"accepted_as_donor_type_id\",\n    \"chart_received\",\n    \"consent_restriction_status\",\n    \"source\",\n    \"OPO_id\",\n    \"case_recovery_type\",\n    \"chart_reviewed_date\",\n    \"chart_review_notes\",\n    \"case_entry_status\",\n    \"entry_initials_and_date\",\n    \"case_QC_status\",\n    \"QC_initials_and_date\",\n  ];\n\n  const donorTypes = useRetrieveTableColumn(\"donor_types\", \"name\", \"name\");\n  const donorTypes_id = useRetrieveTableColumn(\n    \"donor_types\",\n    \"donor_type_id\",\n    \"name\"\n  );\n  const donorTypesOps = opsGenerator(donorTypes_id, donorTypes);\n  const OPO_name = useRetrieveTableColumn(\"OPO\", \"OPO_name\", \"OPO_name\");\n  const OPO_id = useRetrieveTableColumn(\"OPO\", \"OPO_id\", \"OPO_name\");\n  const OPO_code = useRetrieveTableColumn(\"OPO\", \"OPO_code\", \"OPO_name\");\n  const OPOOps = opsGenerator2(OPO_id, OPO_name, OPO_code);\n\n  const columnPropsList = [\n    {\n      column: \"is_public\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [\n        { value: 1, label: \"Yes\" },\n        { value: 0, label: \"No\" },\n        { value: null, label: \"NULL\" },\n      ],\n    },\n    {\n      column: \"alt_case_id\",\n      input: \"inputBox\",\n      restrict: { type: \"string\", range: [1, 10] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"UNOS_id\",\n      input: \"inputBox\",\n      restrict: { type: \"string\", range: [1, 10] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"RR_id\",\n      input: \"inputBox\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"Aperio_id\",\n      input: \"inputBox\",\n      restrict: { type: \"string\", range: [0, 5] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"donor_type_id\",\n      input: \"dropDown\",\n      restrict: { type: \"int\", range: [] },\n      valid: useState(true),\n      ops: donorTypesOps,\n    },\n    {\n      column: \"donor_type_comments\",\n      input: \"inputBoxLarge\",\n      restrict: { type: \"string\", range: [0, 200] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"case_flag\",\n      input: \"inputBox\",\n      restrict: { type: \"string\", range: [0, 200] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"retire_status\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [\n        { value: \"Retired\", label: \"Retired\" },\n        { value: \"No Pancreas\", label: \"No Pancreas\" },\n        { value: \"Disposed\", label: \"Disposed\" },\n        { value: null, label: \"NULL\" },\n      ],\n    },\n    {\n      column: \"accepted_as_donor_type_id\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: donorTypesOps,\n    },\n    {\n      column: \"chart_received\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [\n        { value: \"Yes\", label: \"Yes\" },\n        { value: \"No\", label: \"No\" },\n        { value: \"Not possible\", label: \"Not possible\" },\n        { value: null, label: \"NULL\" },\n      ],\n    },\n    {\n      column: \"consent_restriction_status\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [\n        { value: \"Yes\", label: \"Yes\" },\n        { value: \"No\", label: \"No\" },\n        { value: null, label: \"NULL\" },\n      ],\n    },\n    {\n      column: \"source\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [\n        { value: \"Autopsy\", label: \"Autopsy\" },\n        { value: \"IIAM\", label: \"IIAM\" },\n        { value: \"NDRI\", label: \"NDRI\" },\n        { value: \"nPOD-E\", label: \"nPOD-E\" },\n        { value: \"OPO Direct\", label: \"OPO Direct\" },\n        { value: \"Promethera\", label: \"Promethera\" },\n        { value: null, label: \"NULL\" },\n      ],\n    },\n    {\n      column: \"OPO_id\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: OPOOps,\n    },\n    {\n      column: \"case_recovery_type\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [\n        { value: \"Organ Donor\", label: \"Organ Donor\" },\n        { value: \"DCD Organ Donor\", label: \"DCD Organ Donor\" },\n        { value: \"Autopsy\", label: \"Autopsy\" },\n        { value: \"Archive\", label: \"Archive\" },\n        { value: null, label: \"NULL\" },\n      ],\n    },\n    {\n      column: \"chart_reviewed_date\",\n      input: \"datePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"chart_review_notes\",\n      input: \"inputBoxLarge\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"case_entry_status\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [\n        { value: 1, label: \"Entered\" },\n        { value: 0, label: \"Not Entered\" },\n        { value: null, label: \"NULL\" },\n      ],\n    },\n    {\n      column: \"entry_initials_and_date\",\n      input: \"inputBox\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"case_QC_status\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [\n        { value: 1, label: \"QC'd\" },\n        { value: 0, label: \"Not QC'd\" },\n        { value: null, label: \"NULL\" },\n      ],\n    },\n    {\n      column: \"QC_initials_and_date\",\n      input: \"inputBox\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n  ];\n\n  const defaultValue = useRetrieveCaseColumns(caseId, columnList);\n\n  useEffect(() => {\n    for (let i = 0; i < setValueList.length; i++) {\n      setValueList[i](defaultValue[i]);\n    }\n  }, [defaultValue]);\n\n  const [value0, setValue0] = useDebounced(defaultValue[0], 800);\n  const [value1, setValue1] = useDebounced(defaultValue[1], 800);\n  const [value2, setValue2] = useDebounced(defaultValue[2], 800);\n  const [value3, setValue3] = useDebounced(defaultValue[3], 800);\n  const [value4, setValue4] = useDebounced(defaultValue[4], 800);\n  const [value5, setValue5] = useDebounced(defaultValue[5], 800);\n  const [value6, setValue6] = useDebounced(defaultValue[6], 800);\n  const [value7, setValue7] = useDebounced(defaultValue[7], 800);\n  const [value8, setValue8] = useDebounced(defaultValue[8], 800);\n  const [value9, setValue9] = useDebounced(defaultValue[9], 800);\n  const [value10, setValue10] = useDebounced(defaultValue[10], 800);\n  const [value11, setValue11] = useDebounced(defaultValue[11], 800);\n  const [value12, setValue12] = useDebounced(defaultValue[12], 800);\n  const [value13, setValue13] = useDebounced(defaultValue[13], 800);\n  const [value14, setValue14] = useDebounced(defaultValue[14], 800);\n  const [value15, setValue15] = useDebounced(defaultValue[15], 800);\n  const [value16, setValue16] = useDebounced(defaultValue[16], 800);\n  const [value17, setValue17] = useDebounced(defaultValue[17], 800);\n  const [value18, setValue18] = useDebounced(defaultValue[18], 800);\n  const [value19, setValue19] = useDebounced(defaultValue[19], 800);\n  const [value20, setValue20] = useDebounced(defaultValue[20], 800);\n\n  const nameList = [\n    \"Public\",\n    \"Alt Case ID\",\n    \"UNOS ID\",\n    \"RR ID\",\n    \"Aperio ID\",\n    \"Donor Type\",\n    \"Donor Type Comment\",\n    \"Case Flag\",\n    \"Retire Status\",\n    \"Accepted As Donor Type\",\n    \"Chart Received\",\n    \"Consent Restriction Status\",\n    \"Source\",\n    \"OPO\",\n    \"Case Recovery Type\",\n    \"Chart Reviewed Date\",\n    \"Chart Review Notes\",\n    \"Case Entry Status\",\n    \"Entry Initials And Date\",\n    \"Case QC Status\",\n    \"QC Initial and Date\",\n  ];\n  const valueList = [\n    value0,\n    value1,\n    value2,\n    value3,\n    value4,\n    value5,\n    value6,\n    value7,\n    value8,\n    value9,\n    value10,\n    value11,\n    value12,\n    value13,\n    value14,\n    value15,\n    value16,\n    value17,\n    value18,\n    value19,\n    value20,\n  ];\n  const setValueList = [\n    setValue0,\n    setValue1,\n    setValue2,\n    setValue3,\n    setValue4,\n    setValue5,\n    setValue6,\n    setValue7,\n    setValue8,\n    setValue9,\n    setValue10,\n    setValue11,\n    setValue12,\n    setValue13,\n    setValue14,\n    setValue15,\n    setValue16,\n    setValue17,\n    setValue18,\n    setValue19,\n    setValue20,\n  ];\n\n  //const [updateFail, setUpdateFail] = useState(false);\n\n  useEffect(() => {\n    if (update && !showError && showSuccess) {\n      setAccept(true);\n    } else {\n      setAccept(false);\n    }\n  }, [update]);\n\n  const [showError, setShowError] = useState(false);\n  const [showSuccess, setShowSuccess] = useState(false);\n  const [msg, setMsg] = useState(\"Default message.\");\n\n  const updateResult = useUpdateCase(\n    caseId,\n    update,\n    changed,\n    setAccept,\n    columnList,\n    valueList,\n    setShowError,\n    setShowSuccess,\n    setMsg\n  );\n\n  useEffect(() => {\n    if (showError) {\n      setShowError(true);\n      const timer = setTimeout(() => {\n        setShowError(false);\n      }, 5000);\n    } else if (showSuccess) {\n      setShowSuccess(true);\n      const timer = setTimeout(() => {\n        setShowSuccess(false);\n      }, 3000);\n    }\n  }, [showError, showSuccess]);\n\n  return (\n    <div className={classes.root}>\n      <div className={classes.title}>\n        <Typography variant=\"h6\" component=\"h6\" className={classes.titleText}>\n          CASE ID: {caseId}\n        </Typography>\n      </div>\n      <form noValidate>\n        <div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(0, 3)}\n              nameList={nameList.slice(0, 3)}\n              valueList={defaultValue.slice(0, 3)}\n              setValueList={setValueList.slice(0, 3)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(3, 6)}\n              nameList={nameList.slice(3, 6)}\n              valueList={defaultValue.slice(3, 6)}\n              setValueList={setValueList.slice(3, 6)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(6, 9)}\n              nameList={nameList.slice(6, 9)}\n              valueList={defaultValue.slice(6, 9)}\n              setValueList={setValueList.slice(6, 9)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(9, 12)}\n              nameList={nameList.slice(9, 12)}\n              valueList={defaultValue.slice(9, 12)}\n              setValueList={setValueList.slice(9, 12)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(12, 15)}\n              nameList={nameList.slice(12, 15)}\n              valueList={defaultValue.slice(12, 15)}\n              setValueList={setValueList.slice(12, 15)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(15, 18)}\n              nameList={nameList.slice(15, 18)}\n              valueList={defaultValue.slice(15, 18)}\n              setValueList={setValueList.slice(15, 18)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(18, 21)}\n              nameList={nameList.slice(18, 21)}\n              valueList={defaultValue.slice(18, 21)}\n              setValueList={setValueList.slice(18, 21)}\n              setChanged={setChanged}\n            />\n          </div>\n        </div>\n      </form>\n      {changed ? (\n        <Alert severity=\"warning\" className={classes.alert2}>\n          You have unsaved changes. Click 'Update' to save them, otherwise they\n          will be lost.\n        </Alert>\n      ) : null}\n\n      <Fade in={showError || showSuccess}>\n        <Alert\n          variant=\"filled\"\n          severity={showError && !showSuccess ? \"error\" : \"success\"}\n          className={classes.alert}\n        >\n          {msg}\n        </Alert>\n      </Fade>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport GridBox from \"./component/GridBox\";\nimport useDebounced from \"./component/useDebounced\";\nimport useRetrieveCaseColumns from \"./component/useRetrieveCaseColumns\";\nimport useUpdateCase from \"./component/useUpdateCase\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport Fade from \"@material-ui/core/Fade\";\nimport { Typography } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    \"& .MuiTextField-root\": {\n      margin: theme.spacing(1),\n    },\n  },\n  alert: {\n    marginTop: \"5px\",\n    marginBottom: \"5px\",\n    width: \"90%\",\n  },\n  alert2: {\n    marginTop: \"4px\",\n    marginBottom: \"3px\",\n  },\n  title: {\n    margin: theme.spacing(1, 0, 2),\n    paddingTop: \"3px\",\n    paddingBottom: \"3px\",\n    backgroundColor: \"#d9d9d9\",\n  },\n  titleText: {\n    paddingLeft: \"10px\",\n  },\n}));\n\nexport default function CaseProcessing_step2({\n  caseId,\n  update,\n  changed,\n  setAccept,\n  setChanged,\n}) {\n  const classes = useStyles();\n\n  const columnList = [\n    \"slices_shipping_status\",\n    \"islet_isolation_status\",\n    \"HANDEL_status\",\n    \"processing_start_date\",\n    \"processing_start_time\",\n    \"processing_end_date\",\n    \"processing_end_time\",\n    \"pancreas_intact_status\",\n    \"pancreas_weight_grams\",\n    \"pancreas_head_grams\",\n    \"pancreas_body_grams\",\n    \"pancreas_tail_grams\",\n    \"pancreas_weight_comments\",\n    \"kidney_intact_status\",\n    \"kidney_left_or_right\",\n    \"kidney_weight_grams\",\n    \"kidney_grossing_comments\",\n    \"case_processing_info\",\n    \"slices_processing_notes\",\n  ];\n  const columnPropsList = [\n    {\n      column: \"slices_shipping_status\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [\n        { value: \"Yes\", label: \"Yes\" },\n        { value: \"No\", label: \"No\" },\n        { value: null, label: \"NULL\" },\n      ],\n    },\n    {\n      column: \"islet_isolation_status\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [\n        { value: \"Yes\", label: \"Yes\" },\n        { value: \"No\", label: \"No\" },\n        { value: null, label: \"NULL\" },\n      ],\n    },\n    {\n      column: \"HANDEL_status\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [\n        { value: \"HANDEL-P\", label: \"HANDEL-P\" },\n        { value: \"HANDEL-P/I\", label: \"HANDEL-P/I\" },\n        { value: \"HANDEL-I\", label: \"HANDEL-I\" },\n        { value: \"No\", label: \"No\" },\n        { value: null, label: \"NULL\" },\n      ],\n    },\n    {\n      colum: \"processing_start_date\",\n      input: \"datePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"processing_start_time\",\n      input: \"timePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"processing_end_date\",\n      input: \"datePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"processing_end_time\",\n      input: \"timePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"pancreas_intact_status\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [\n        { value: \"Yes\", label: \"Yes\" },\n        { value: \"No\", label: \"No\" },\n        { value: null, label: \"NULL\" },\n      ],\n    },\n    {\n      colum: \"pancreas_weight_grams\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [0, 250] },\n\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"pancreas_head_grams\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [0, 120] },\n\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"pancreas_body_grams\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [0, 120] },\n\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"pancreas_tail_grams\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [0, 120] },\n\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"pancreas_weight_comments\",\n      input: \"inputBoxLarge\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"kidney_intact_status\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [\n        { value: \"true\", label: \"true\" },\n        { value: \"false\", label: \"false\" },\n        { value: null, label: \"NULL\" },\n      ],\n    },\n    {\n      colum: \"kidney_left_or_right\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [\n        { value: \"left\", label: \"left\" },\n        { value: \"right\", label: \"right\" },\n        { value: null, label: \"NULL\" },\n      ],\n    },\n    {\n      colum: \"kidney_weight_grams\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [0, 350] },\n\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"kidney_grossing_comments\",\n      input: \"inputBoxLarge\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"case_processing_info\",\n      input: \"inputBoxLarge\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"slices_processing_notes\",\n      input: \"inputBoxLarge\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n  ];\n  const defaultValue = useRetrieveCaseColumns(caseId, columnList);\n  useEffect(() => {\n    for (let i = 0; i < setValueList.length; i++) {\n      setValueList[i](defaultValue[i]);\n    }\n  }, [defaultValue]);\n\n  const [value0, setValue0] = useDebounced(defaultValue[0], 800);\n  const [value1, setValue1] = useDebounced(defaultValue[0], 800);\n  const [value2, setValue2] = useDebounced(defaultValue[0], 800);\n  const [value3, setValue3] = useDebounced(defaultValue[3], 800);\n  const [value4, setValue4] = useDebounced(defaultValue[4], 800);\n  const [value5, setValue5] = useDebounced(defaultValue[5], 800);\n  const [value6, setValue6] = useDebounced(defaultValue[6], 800);\n  const [value7, setValue7] = useDebounced(defaultValue[7], 800);\n  const [value8, setValue8] = useDebounced(defaultValue[8], 800);\n  const [value9, setValue9] = useDebounced(defaultValue[9], 800);\n  const [value10, setValue10] = useDebounced(defaultValue[10], 800);\n  const [value11, setValue11] = useDebounced(defaultValue[11], 800);\n  const [value12, setValue12] = useDebounced(defaultValue[12], 800);\n  const [value13, setValue13] = useDebounced(defaultValue[13], 800);\n  const [value14, setValue14] = useDebounced(defaultValue[14], 800);\n  const [value15, setValue15] = useDebounced(defaultValue[15], 800);\n  const [value16, setValue16] = useDebounced(defaultValue[16], 800);\n  const [value17, setValue17] = useDebounced(defaultValue[17], 800);\n  const [value18, setValue18] = useDebounced(defaultValue[18], 800);\n  const nameList = [\n    \"Slices\",\n    \"Islet Isolation Status\",\n    \"HANDEL Status\",\n    \"Processing Start Date\",\n    \"Processing Start Time\",\n    \"Processing End Date\",\n    \"Processing End Time\",\n    \"Pancreas Intact Status\",\n    \"Pancreas Weight Grams\",\n    \"Pancreas Head Grams\",\n    \"Pancreas Body Grams\",\n    \"Pancreas Tail Grams\",\n    \"Pancreas Weight Comments\",\n    \"Kidney Intact Status\",\n    \"Kidney Left Or Right\",\n    \"Kidney Weight Grams\",\n    \"Kidney Grossing Comments\",\n    \"Case Processing Info\",\n    \"Slices Processing Notes\",\n  ];\n  const valueList = [\n    value0,\n    value1,\n    value2,\n    value3,\n    value4,\n    value5,\n    value6,\n    value7,\n    value8,\n    value9,\n    value10,\n    value11,\n    value12,\n    value13,\n    value14,\n    value15,\n    value16,\n    value17,\n    value18,\n  ];\n  const setValueList = [\n    setValue0,\n    setValue1,\n    setValue2,\n    setValue3,\n    setValue4,\n    setValue5,\n    setValue6,\n    setValue7,\n    setValue8,\n    setValue9,\n    setValue10,\n    setValue11,\n    setValue12,\n    setValue13,\n    setValue14,\n    setValue15,\n    setValue16,\n    setValue17,\n    setValue18,\n  ];\n\n  useEffect(() => {\n    if (update && !showError && showSuccess) {\n      setAccept(true);\n    } else {\n      setAccept(false);\n    }\n  }, [update]);\n\n  const [showError, setShowError] = useState(false);\n  const [showSuccess, setShowSuccess] = useState(false);\n  const [msg, setMsg] = useState(\"Default message.\");\n\n  const updateResult = useUpdateCase(\n    caseId,\n    update,\n    changed,\n    setAccept,\n    columnList,\n    valueList,\n    setShowError,\n    setShowSuccess,\n    setMsg\n  );\n\n  useEffect(() => {\n    if (showError) {\n      setShowError(true);\n      const timer = setTimeout(() => {\n        setShowError(false);\n      }, 5000);\n    } else if (showSuccess) {\n      setShowSuccess(true);\n      const timer = setTimeout(() => {\n        setShowSuccess(false);\n      }, 3000);\n    }\n  }, [showError, showSuccess]);\n\n  return (\n    <div className={classes.root}>\n      <div className={classes.title}>\n        <Typography variant=\"h6\" component=\"h6\" className={classes.titleText}>\n          CASE ID: {caseId}\n        </Typography>\n      </div>\n      <form noValidate>\n        <div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(0, 3)}\n              nameList={nameList.slice(0, 3)}\n              valueList={defaultValue.slice(0, 3)}\n              setValueList={setValueList.slice(0, 3)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(3, 6)}\n              nameList={nameList.slice(3, 6)}\n              valueList={defaultValue.slice(3, 6)}\n              setValueList={setValueList.slice(3, 6)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(6, 9)}\n              nameList={nameList.slice(6, 9)}\n              valueList={defaultValue.slice(6, 9)}\n              setValueList={setValueList.slice(6, 9)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(9, 12)}\n              nameList={nameList.slice(9, 12)}\n              valueList={defaultValue.slice(9, 12)}\n              setValueList={setValueList.slice(9, 12)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(12, 15)}\n              nameList={nameList.slice(12, 15)}\n              valueList={defaultValue.slice(12, 15)}\n              setValueList={setValueList.slice(12, 15)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(15, 18)}\n              nameList={nameList.slice(15, 18)}\n              valueList={defaultValue.slice(15, 18)}\n              setValueList={setValueList.slice(15, 18)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(18, 21)}\n              nameList={nameList.slice(18, 21)}\n              valueList={defaultValue.slice(18, 21)}\n              setValueList={setValueList.slice(18, 21)}\n              setChanged={setChanged}\n            />\n          </div>\n        </div>\n      </form>\n      {changed ? (\n        <Alert severity=\"warning\" className={classes.alert2}>\n          You have unsaved changes. Click 'Update' to save them, otherwise they\n          will be lost.\n        </Alert>\n      ) : null}\n      <Fade in={showError || showSuccess}>\n        <Alert\n          variant=\"filled\"\n          severity={showError && !showSuccess ? \"error\" : \"success\"}\n          className={classes.alert}\n        >\n          {msg}\n        </Alert>\n      </Fade>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useRetrieveTableColumnPossibleValue(\n  tableName,\n  columnName\n) {\n  const [result, setResult] = useState([]);\n  useEffect(() => {\n    if (tableName !== \"\") {\n      retrieve(tableName, columnName);\n    }\n  }, [tableName]);\n  async function retrieve(table, column) {\n    return await API.post(\n      \"dbapi\",\n      \"/db/get_one_table_one_column_all_possible_values\",\n      {\n        body: {\n          table_name: table,\n          column_name: column,\n        },\n      }\n    )\n      .then((res) => {\n        console.log(\"Table column possible value was retrieved successfully.\");\n        setResult(res);\n      })\n      .catch((error) => {\n        console.log(\"Failed to retrieve table column possible value\");\n        console.log(\"Failed table\", table);\n        console.log(\"Failed column\", column);\n        console.log(\"Amplify API call error\", error);\n      });\n  }\n\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport GridBox from \"./component/GridBox\";\nimport useDebounced from \"./component/useDebounced\";\nimport useRetrieveCaseColumns from \"./component/useRetrieveCaseColumns\";\nimport useRetrieveTableColumnPossibleValue from \"./component/useRetrieveTableColumnPossibleValue\";\nimport useUpdateCase from \"./component/useUpdateCase\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport Fade from \"@material-ui/core/Fade\";\nimport { Typography } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    \"& .MuiTextField-root\": {\n      margin: theme.spacing(1),\n    },\n  },\n  alert: {\n    marginTop: \"5px\",\n    marginBottom: \"5px\",\n    width: \"90%\",\n  },\n  alert2: {\n    marginTop: \"4px\",\n    marginBottom: \"3px\",\n  },\n  title: {\n    margin: theme.spacing(1, 0, 2),\n    paddingTop: \"3px\",\n    paddingBottom: \"3px\",\n    backgroundColor: \"#d9d9d9\",\n  },\n  titleText: {\n    paddingLeft: \"10px\",\n  },\n}));\n\nfunction opsGenerator(idArr, nameArr) {\n  const ops = [];\n  for (let i = 0; i < idArr.length; i++) {\n    ops.push({ value: idArr[i], label: nameArr[i] });\n  }\n  ops.push({ value: null, label: \"NULL\" });\n  return ops;\n}\n\nexport default function CaseProcessing_step2({\n  caseId,\n  update,\n  changed,\n  setAccept,\n  setChanged,\n}) {\n  const classes = useStyles();\n\n  const columnList = [\n    \"age_years\",\n    \"gestational_age_weeks\",\n    \"diabetes_hx_years\",\n    \"sex\",\n    \"race_ethnicity\",\n    \"height_cm\",\n    \"weight_kg\",\n    \"BMI\",\n    \"BMI_percentile\",\n    \"downtime_minutes\",\n    \"admission_date\",\n    \"admission_time\",\n    \"death_date\",\n    \"death_time\",\n    \"cross_clamp_date\",\n    \"cross_clamp_time\",\n  ];\n  const tempOps = useRetrieveTableColumnPossibleValue(\n    \"cases\",\n    \"race_ethnicity\"\n  );\n\n  const raceOps = opsGenerator(tempOps, tempOps);\n\n  const columnPropsList = [\n    {\n      column: \"age_years\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [0, 100] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"gestational_age_weeks\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [0, 40] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"diabetes_hx_years\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [0, 100] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"sex\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [\n        { value: \"Male\", label: \"Male\" },\n        { value: \"Female\", label: \"Female\" },\n        { value: null, label: \"NULL\" },\n      ],\n    },\n    {\n      colum: \"race_ethnicity\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: raceOps,\n    },\n    {\n      colum: \"height_cm\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [0, 200] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"weight_kg\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [0, 200] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"BMI\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [0, 55] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"BMI_percentile\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [0, 99] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"downtime_minutes\",\n      input: \"integerBox\",\n      restrict: { type: \"int\", range: [0, 240] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"admission_date\",\n      input: \"datePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"admission_time\",\n      input: \"timePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"death_date\",\n      input: \"datePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"death_time\",\n      input: \"timePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"cross_clamp_date\",\n      input: \"datePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"cross_clamp_time\",\n      input: \"timePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n  ];\n  const defaultValue = useRetrieveCaseColumns(caseId, columnList);\n  useEffect(() => {\n    for (let i = 0; i < setValueList.length; i++) {\n      setValueList[i](defaultValue[i]);\n    }\n  }, [defaultValue]);\n\n  const [value0, setValue0] = useDebounced(defaultValue[0], 800);\n  const [value1, setValue1] = useDebounced(defaultValue[0], 800);\n  const [value2, setValue2] = useDebounced(defaultValue[0], 800);\n  const [value3, setValue3] = useDebounced(defaultValue[3], 800);\n  const [value4, setValue4] = useDebounced(defaultValue[4], 800);\n  const [value5, setValue5] = useDebounced(defaultValue[5], 800);\n  const [value6, setValue6] = useDebounced(defaultValue[6], 800);\n  const [value7, setValue7] = useDebounced(defaultValue[7], 800);\n  const [value8, setValue8] = useDebounced(defaultValue[8], 800);\n  const [value9, setValue9] = useDebounced(defaultValue[9], 800);\n  const [value10, setValue10] = useDebounced(defaultValue[10], 800);\n  const [value11, setValue11] = useDebounced(defaultValue[11], 800);\n  const [value12, setValue12] = useDebounced(defaultValue[12], 800);\n  const [value13, setValue13] = useDebounced(defaultValue[13], 800);\n  const [value14, setValue14] = useDebounced(defaultValue[14], 800);\n  const [value15, setValue15] = useDebounced(defaultValue[15], 800);\n  const nameList = [\n    \"Age Years\",\n    \"Gestational Age Weeks\",\n    \"Diabetes History Years\",\n    \"Sex\",\n    \"Race/Ethnicity\",\n    \"Height cm\",\n    \"Weight kg\",\n    \"BMI\",\n    \"BMI Percentile\",\n    \"Downtime min\",\n    \"Admission Date\",\n    \"Admission Time\",\n    \"Death Date\",\n    \"Death Time\",\n    \"Cross Clamp Date\",\n    \"Cross Clamp Time\",\n  ];\n  const valueList = [\n    value0,\n    value1,\n    value2,\n    value3,\n    value4,\n    value5,\n    value6,\n    value7,\n    value8,\n    value9,\n    value10,\n    value11,\n    value12,\n    value13,\n    value14,\n    value15,\n  ];\n  const setValueList = [\n    setValue0,\n    setValue1,\n    setValue2,\n    setValue3,\n    setValue4,\n    setValue5,\n    setValue6,\n    setValue7,\n    setValue8,\n    setValue9,\n    setValue10,\n    setValue11,\n    setValue12,\n    setValue13,\n    setValue14,\n    setValue15,\n  ];\n\n  useEffect(() => {\n    if (update && !showError && showSuccess) {\n      setAccept(true);\n    } else {\n      setAccept(false);\n    }\n  }, [update]);\n\n  const [showError, setShowError] = useState(false);\n  const [showSuccess, setShowSuccess] = useState(false);\n  const [msg, setMsg] = useState(\"Default message.\");\n\n  const updateResult = useUpdateCase(\n    caseId,\n    update,\n    changed,\n    setAccept,\n    columnList,\n    valueList,\n    setShowError,\n    setShowSuccess,\n    setMsg\n  );\n\n  useEffect(() => {\n    if (showError) {\n      setShowError(true);\n      const timer = setTimeout(() => {\n        setShowError(false);\n      }, 5000);\n    } else if (showSuccess) {\n      setShowSuccess(true);\n      const timer = setTimeout(() => {\n        setShowSuccess(false);\n      }, 3000);\n    }\n  }, [showError, showSuccess]);\n\n  return (\n    <div className={classes.root}>\n      <div className={classes.title}>\n        <Typography variant=\"h6\" component=\"h6\" className={classes.titleText}>\n          CASE ID: {caseId}\n        </Typography>\n      </div>\n      <form noValidate>\n        <div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(0, 3)}\n              nameList={nameList.slice(0, 3)}\n              valueList={defaultValue.slice(0, 3)}\n              setValueList={setValueList.slice(0, 3)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(3, 6)}\n              nameList={nameList.slice(3, 6)}\n              valueList={defaultValue.slice(3, 6)}\n              setValueList={setValueList.slice(3, 6)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(6, 9)}\n              nameList={nameList.slice(6, 9)}\n              valueList={defaultValue.slice(6, 9)}\n              setValueList={setValueList.slice(6, 9)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(9, 12)}\n              nameList={nameList.slice(9, 12)}\n              valueList={defaultValue.slice(9, 12)}\n              setValueList={setValueList.slice(9, 12)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(12, 15)}\n              nameList={nameList.slice(12, 15)}\n              valueList={defaultValue.slice(12, 15)}\n              setValueList={setValueList.slice(12, 15)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(15, 18)}\n              nameList={nameList.slice(15, 18)}\n              valueList={defaultValue.slice(15, 18)}\n              setValueList={setValueList.slice(15, 18)}\n              setChanged={setChanged}\n            />\n          </div>\n          {/* <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(18, 21)}\n              nameList={nameList.slice(18, 21)}\n              valueList={defaultValue.slice(18, 21)}\n              setValueList={setValueList.slice(18, 21)}\n              setChanged={setChanged}\n            />\n          </div> */}\n        </div>\n      </form>\n      {changed ? (\n        <Alert severity=\"warning\" className={classes.alert2}>\n          You have unsaved changes. Click 'Update' to save them, otherwise they\n          will be lost.\n        </Alert>\n      ) : null}\n      <Fade in={showError || showSuccess}>\n        <Alert\n          variant=\"filled\"\n          severity={showError && !showSuccess ? \"error\" : \"success\"}\n          className={classes.alert}\n        >\n          {msg}\n        </Alert>\n      </Fade>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport GridBox from \"./component/GridBox\";\nimport useDebounced from \"./component/useDebounced\";\nimport useRetrieveTableColumn from \"./component/useRetrieveTableColumn\";\nimport useRetrieveCaseColumns from \"./component/useRetrieveCaseColumns\";\nimport useRetrieveTableColumnPossibleValue from \"./component/useRetrieveTableColumnPossibleValue\";\nimport useUpdateCase from \"./component/useUpdateCase\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport Fade from \"@material-ui/core/Fade\";\nimport { Typography } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    \"& .MuiTextField-root\": {\n      margin: theme.spacing(1),\n    },\n  },\n  alert: {\n    marginTop: \"5px\",\n    marginBottom: \"5px\",\n    width: \"90%\",\n  },\n  alert2: {\n    marginTop: \"4px\",\n    marginBottom: \"3px\",\n  },\n  title: {\n    margin: theme.spacing(1, 0, 2),\n    paddingTop: \"3px\",\n    paddingBottom: \"3px\",\n    backgroundColor: \"#d9d9d9\",\n  },\n  titleText: {\n    paddingLeft: \"10px\",\n  },\n}));\n\nfunction opsGenerator(idArr, nameArr) {\n  const ops = [];\n  for (let i = 0; i < idArr.length; i++) {\n    ops.push({ value: idArr[i], label: nameArr[i] });\n  }\n  ops.push({ value: null, label: \"NULL\" });\n  return ops;\n}\n\nexport default function CaseProcessing_step2({\n  caseId,\n  update,\n  changed,\n  setAccept,\n  setChanged,\n}) {\n  const classes = useStyles();\n\n  const columnList = [\n    \"admission_course\",\n    \"clinical_history\",\n    \"stage_kidney_disease\",\n    \"cause_of_death_id\",\n    \"death_mechanism\",\n    \"death_circumstance\",\n    \"meds_diabetes\",\n    \"meds_home\",\n    \"meds_hospital\",\n    \"allergies\",\n    \"alcohol_use\",\n    \"drug_use\",\n  ];\n  const tempOps = useRetrieveTableColumnPossibleValue(\n    \"cases\",\n    \"stage_kidney_disease\"\n  );\n\n  const stageOps = opsGenerator(tempOps, tempOps);\n\n  const cod_id = useRetrieveTableColumn(\n    \"cause_of_death\",\n    \"cause_of_death_id\",\n    \"description\"\n  );\n  const cod_name = useRetrieveTableColumn(\n    \"cause_of_death\",\n    \"description\",\n    \"description\"\n  );\n  const codOps = opsGenerator(cod_id, cod_name);\n\n  const columnPropsList = [\n    {\n      column: \"admission_course\",\n      input: \"inputBoxLarge\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"clinical_history\",\n      input: \"inputBoxLarge\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"stage_kidney_disease\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: stageOps,\n    },\n    {\n      colum: \"cause_of_death_id\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: codOps,\n    },\n    {\n      colum: \"death_mechanism\",\n      input: \"inputBox\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"death_circumstance\",\n      input: \"inputBox\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"meds_diabetes\",\n      input: \"inputBoxLarge\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"meds_home\",\n      input: \"inputBoxLarge\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"meds_hospital\",\n      input: \"inputBoxLarge\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"allergies\",\n      input: \"inputBoxLarge\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"alcohol_use\",\n      input: \"inputBoxLarge\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"drug_use\",\n      input: \"inputBoxLarge\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n  ];\n  const defaultValue = useRetrieveCaseColumns(caseId, columnList);\n  useEffect(() => {\n    for (let i = 0; i < setValueList.length; i++) {\n      setValueList[i](defaultValue[i]);\n    }\n  }, [defaultValue]);\n\n  const [value0, setValue0] = useDebounced(defaultValue[0], 800);\n  const [value1, setValue1] = useDebounced(defaultValue[0], 800);\n  const [value2, setValue2] = useDebounced(defaultValue[0], 800);\n  const [value3, setValue3] = useDebounced(defaultValue[3], 800);\n  const [value4, setValue4] = useDebounced(defaultValue[4], 800);\n  const [value5, setValue5] = useDebounced(defaultValue[5], 800);\n  const [value6, setValue6] = useDebounced(defaultValue[6], 800);\n  const [value7, setValue7] = useDebounced(defaultValue[7], 800);\n  const [value8, setValue8] = useDebounced(defaultValue[8], 800);\n  const [value9, setValue9] = useDebounced(defaultValue[9], 800);\n  const [value10, setValue10] = useDebounced(defaultValue[10], 800);\n  const [value11, setValue11] = useDebounced(defaultValue[11], 800);\n\n  const nameList = [\n    \"Admission Course\",\n    \"Clinical History\",\n    \"Stage Kidney Disease\",\n    \"Cause of Death\",\n    \"Death Mechanism\",\n    \"Death Circumstance\",\n    \"Meds Diabetes\",\n    \"Meds Home\",\n    \"Meds Hospital\",\n    \"Allergies\",\n    \"Alcohol Use\",\n    \"Drug Use\",\n  ];\n  const valueList = [\n    value0,\n    value1,\n    value2,\n    value3,\n    value4,\n    value5,\n    value6,\n    value7,\n    value8,\n    value9,\n    value10,\n    value11,\n  ];\n  const setValueList = [\n    setValue0,\n    setValue1,\n    setValue2,\n    setValue3,\n    setValue4,\n    setValue5,\n    setValue6,\n    setValue7,\n    setValue8,\n    setValue9,\n    setValue10,\n    setValue11,\n  ];\n\n  useEffect(() => {\n    if (update && !showError && showSuccess) {\n      setAccept(true);\n    } else {\n      setAccept(false);\n    }\n  }, [update]);\n\n  const [showError, setShowError] = useState(false);\n  const [showSuccess, setShowSuccess] = useState(false);\n  const [msg, setMsg] = useState(\"Default message.\");\n\n  const updateResult = useUpdateCase(\n    caseId,\n    update,\n    changed,\n    setAccept,\n    columnList,\n    valueList,\n    setShowError,\n    setShowSuccess,\n    setMsg\n  );\n\n  useEffect(() => {\n    if (showError) {\n      setShowError(true);\n      const timer = setTimeout(() => {\n        setShowError(false);\n      }, 5000);\n    } else if (showSuccess) {\n      setShowSuccess(true);\n      const timer = setTimeout(() => {\n        setShowSuccess(false);\n      }, 3000);\n    }\n  }, [showError, showSuccess]);\n\n  return (\n    <div className={classes.root}>\n      <div className={classes.title}>\n        <Typography variant=\"h6\" component=\"h6\" className={classes.titleText}>\n          CASE ID: {caseId}\n        </Typography>\n      </div>\n      <form noValidate>\n        <div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(0, 3)}\n              nameList={nameList.slice(0, 3)}\n              valueList={defaultValue.slice(0, 3)}\n              setValueList={setValueList.slice(0, 3)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(3, 6)}\n              nameList={nameList.slice(3, 6)}\n              valueList={defaultValue.slice(3, 6)}\n              setValueList={setValueList.slice(3, 6)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(6, 9)}\n              nameList={nameList.slice(6, 9)}\n              valueList={defaultValue.slice(6, 9)}\n              setValueList={setValueList.slice(6, 9)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(9, 12)}\n              nameList={nameList.slice(9, 12)}\n              valueList={defaultValue.slice(9, 12)}\n              setValueList={setValueList.slice(9, 12)}\n              setChanged={setChanged}\n            />\n          </div>\n          {/* <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(12, 15)}\n              nameList={nameList.slice(12, 15)}\n              valueList={defaultValue.slice(12, 15)}\n              setValueList={setValueList.slice(12, 15)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(15, 18)}\n              nameList={nameList.slice(15, 18)}\n              valueList={defaultValue.slice(15, 18)}\n              setValueList={setValueList.slice(15, 18)}\n              setChanged={setChanged}\n            />\n          </div> */}\n          {/* <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(18, 21)}\n              nameList={nameList.slice(18, 21)}\n              valueList={defaultValue.slice(18, 21)}\n              setValueList={setValueList.slice(18, 21)}\n              setChanged={setChanged}\n            />\n          </div> */}\n        </div>\n      </form>\n      {changed ? (\n        <Alert severity=\"warning\" className={classes.alert2}>\n          You have unsaved changes. Click 'Update' to save them, otherwise they\n          will be lost.\n        </Alert>\n      ) : null}\n      <Fade in={showError || showSuccess}>\n        <Alert\n          variant=\"filled\"\n          severity={showError && !showSuccess ? \"error\" : \"success\"}\n          className={classes.alert}\n        >\n          {msg}\n        </Alert>\n      </Fade>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport GridBox from \"./component/GridBox\";\nimport useDebounced from \"./component/useDebounced\";\nimport useRetrieveTableColumn from \"./component/useRetrieveTableColumn\";\nimport useRetrieveCaseColumns from \"./component/useRetrieveCaseColumns\";\nimport useRetrieveTableColumnPossibleValue from \"./component/useRetrieveTableColumnPossibleValue\";\nimport useUpdateCase from \"./component/useUpdateCase\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport Fade from \"@material-ui/core/Fade\";\nimport { Typography } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    \"& .MuiTextField-root\": {\n      margin: theme.spacing(1),\n    },\n  },\n  alert: {\n    marginTop: \"5px\",\n    marginBottom: \"5px\",\n    width: \"90%\",\n  },\n  alert2: {\n    marginTop: \"4px\",\n    marginBottom: \"3px\",\n  },\n  title: {\n    margin: theme.spacing(1, 0, 2),\n    paddingTop: \"3px\",\n    paddingBottom: \"3px\",\n    backgroundColor: \"#d9d9d9\",\n  },\n  titleText: {\n    paddingLeft: \"10px\",\n  },\n}));\n\nfunction opsGenerator(idArr, nameArr) {\n  const ops = [];\n  for (let i = 0; i < idArr.length; i++) {\n    ops.push({ value: idArr[i], label: nameArr[i] });\n  }\n  ops.push({ value: null, label: \"NULL\" });\n  return ops;\n}\n\nexport default function HospitalLabs_step5({\n  caseId,\n  update,\n  changed,\n  setAccept,\n  setChanged,\n}) {\n  const classes = useStyles();\n\n  const columnList = [\n    \"ABO_blood_type\",\n    \"admission_glucose_mg_dL\",\n    \"admission_glucose_date\",\n    \"admission_glucose_time\",\n    \"peak_glucose_mg_dL\",\n    \"admission_amylase\",\n    \"admission_amylase_date\",\n    \"admission_amylase_time\",\n    \"peak_amylase\",\n    \"admission_lipase\",\n    \"admission_lipase_date\",\n    \"admission_lipase_time\",\n    \"peak_lipase\",\n    \"admission_ABG_pH\",\n    \"admission_ABG_pH_date\",\n    \"admission_ABG_pH_time\",\n    \"admission_ABG_HCO3\",\n    \"admission_ABG_HCO3_date\",\n    \"admission_ABG_HCO3_time\",\n    \"HbA1c_percent\",\n    \"HbA1c_date\",\n    \"HbA1c_time\",\n    \"infections\",\n    \"hemodiluted_status\",\n    \"serologies\",\n    \"SARS_COV_2_results\",\n    \"case_notes\",\n    \"C_peptide_ng_mL\",\n    \"histopathology\",\n  ];\n  const tempOps = useRetrieveTableColumnPossibleValue(\n    \"cases\",\n    \"ABO_blood_type\"\n  );\n\n  const aboOps = opsGenerator(tempOps, tempOps);\n\n  const cod_id = useRetrieveTableColumn(\n    \"cause_of_death\",\n    \"cause_of_death_id\",\n    \"cause_of_death_id\"\n  );\n  const cod_name = useRetrieveTableColumn(\n    \"cause_of_death\",\n    \"description\",\n    \"cause_of_death_id\"\n  );\n  const codOps = opsGenerator(cod_id, cod_name);\n\n  const columnPropsList = [\n    {\n      column: \"ABO_blood_type\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: aboOps,\n    },\n    {\n      column: \"admission_glucose_mg_dL\",\n      input: \"integerBox\",\n      restrict: { type: \"int\", range: [0, 1800] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"admission_glucose_date\",\n      input: \"datePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"admission_glucose_time\",\n      input: \"timePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"peak_glucose_mg_dL\",\n      input: \"integerBox\",\n      restrict: { type: \"int\", range: [0, 1800] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"admission_amylase\",\n      input: \"integerBox\",\n      restrict: { type: \"int\", range: [0, 4000] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"admission_amylase_date\",\n      input: \"datePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"admission_amylase_time\",\n      input: \"timePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"peak_amylase\",\n      input: \"integerBox\",\n      restrict: { type: \"int\", range: [0, 4000] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"admission_lipase\",\n      input: \"integerBox\",\n      restrict: { type: \"int\", range: [0, 2500] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"admission_lipase_date\",\n      input: \"datePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"admission_lipase_time\",\n      input: \"timePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"peak_lipase\",\n      input: \"integerBox\",\n      restrict: { type: \"int\", range: [0, 2500] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"admission_ABG_pH\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [6.0, 7.7] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"admission_ABG_pH_date\",\n      input: \"datePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"admission_ABG_pH_time\",\n      input: \"timePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"admission_ABG_HCO3\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [0, 35] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"admission_ABG_HCO3_date\",\n      input: \"datePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"admission_ABG_HCO3_time\",\n      input: \"timePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"HbA1c_percent\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [2, 20] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"HbA1c_date\",\n      input: \"datePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"HbA1c_time\",\n      input: \"timePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"infections\",\n      input: \"inputBoxLarge\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"hemodiluted_status\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [\n        { value: \"Yes\", label: \"Yes\" },\n        { value: \"No\", label: \"No\" },\n        { value: null, label: \"NULL\" },\n      ],\n    },\n    {\n      colum: \"serologies\",\n      input: \"inputBox\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"SARS_COV_2_results\",\n      input: \"inputBoxLarge\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"case_notes\",\n      input: \"inputBoxLarge\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"C_peptide_ng_mL\",\n      input: \"inputBox\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"histopathology\",\n      input: \"inputBoxLarge\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n  ];\n  const defaultValue = useRetrieveCaseColumns(caseId, columnList);\n  useEffect(() => {\n    for (let i = 0; i < setValueList.length; i++) {\n      setValueList[i](defaultValue[i]);\n    }\n  }, [defaultValue]);\n\n  const [value0, setValue0] = useDebounced(defaultValue[0], 800);\n  const [value1, setValue1] = useDebounced(defaultValue[1], 800);\n  const [value2, setValue2] = useDebounced(defaultValue[2], 800);\n  const [value3, setValue3] = useDebounced(defaultValue[3], 800);\n  const [value4, setValue4] = useDebounced(defaultValue[4], 800);\n  const [value5, setValue5] = useDebounced(defaultValue[5], 800);\n  const [value6, setValue6] = useDebounced(defaultValue[6], 800);\n  const [value7, setValue7] = useDebounced(defaultValue[7], 800);\n  const [value8, setValue8] = useDebounced(defaultValue[8], 800);\n  const [value9, setValue9] = useDebounced(defaultValue[9], 800);\n  const [value10, setValue10] = useDebounced(defaultValue[10], 800);\n  const [value11, setValue11] = useDebounced(defaultValue[11], 800);\n  const [value12, setValue12] = useDebounced(defaultValue[12], 800);\n  const [value13, setValue13] = useDebounced(defaultValue[13], 800);\n  const [value14, setValue14] = useDebounced(defaultValue[14], 800);\n  const [value15, setValue15] = useDebounced(defaultValue[15], 800);\n  const [value16, setValue16] = useDebounced(defaultValue[16], 800);\n  const [value17, setValue17] = useDebounced(defaultValue[17], 800);\n  const [value18, setValue18] = useDebounced(defaultValue[18], 800);\n  const [value19, setValue19] = useDebounced(defaultValue[19], 800);\n  const [value20, setValue20] = useDebounced(defaultValue[20], 800);\n  const [value21, setValue21] = useDebounced(defaultValue[21], 800);\n  const [value22, setValue22] = useDebounced(defaultValue[22], 800);\n  const [value23, setValue23] = useDebounced(defaultValue[23], 800);\n  const [value24, setValue24] = useDebounced(defaultValue[24], 800);\n  const [value25, setValue25] = useDebounced(defaultValue[25], 800);\n  const [value26, setValue26] = useDebounced(defaultValue[26], 800);\n  const [value27, setValue27] = useDebounced(defaultValue[27], 800);\n  const [value28, setValue28] = useDebounced(defaultValue[28], 800);\n\n  const nameList = [\n    \"ABO Blood Type\",\n    \"Admission Glucose mg/dL\",\n    \"Admission Glucose Date\",\n    \"Admission Glucose Time\",\n    \"Peak Glucose mg/dL\",\n    \"Admission Amylase\",\n    \"Admission Amylase Date\",\n    \"Admission Amylase Time\",\n    \"Peak Amylase\",\n    \"Admission Lipase\",\n    \"Admission Lipase Date\",\n    \"Admission Lipase Time\",\n    \"Peak Lipase\",\n    \"Admission ABG pH\",\n    \"Admission ABG pH Date\",\n    \"Admission ABG pH Time\",\n    \"Admission ABG HCO3\",\n    \"Admission ABG HCO3 Date\",\n    \"Admission ABG HCO3 Time\",\n    \"HbA1c Percent\",\n    \"HbA1c Date\",\n    \"HbA1c Time\",\n    \"Infections\",\n    \"Hemodiluted Status\",\n    \"Serologies\",\n    \"SARS COV 2 Results\",\n    \"Case Notes\",\n    \"C peptide ng/mL\",\n    \"Histopathology\",\n  ];\n  const valueList = [\n    value0,\n    value1,\n    value2,\n    value3,\n    value4,\n    value5,\n    value6,\n    value7,\n    value8,\n    value9,\n    value10,\n    value11,\n    value12,\n    value13,\n    value14,\n    value15,\n    value16,\n    value17,\n    value18,\n    value19,\n    value20,\n    value21,\n    value22,\n    value23,\n    value24,\n    value25,\n    value26,\n    value27,\n    value28,\n  ];\n  const setValueList = [\n    setValue0,\n    setValue1,\n    setValue2,\n    setValue3,\n    setValue4,\n    setValue5,\n    setValue6,\n    setValue7,\n    setValue8,\n    setValue9,\n    setValue10,\n    setValue11,\n    setValue12,\n    setValue13,\n    setValue14,\n    setValue15,\n    setValue16,\n    setValue17,\n    setValue18,\n    setValue19,\n    setValue20,\n    setValue21,\n    setValue22,\n    setValue23,\n    setValue24,\n    setValue25,\n    setValue26,\n    setValue27,\n    setValue28,\n  ];\n\n  useEffect(() => {\n    if (update && !showError && showSuccess) {\n      setAccept(true);\n    } else {\n      setAccept(false);\n    }\n  }, [update]);\n\n  const [showError, setShowError] = useState(false);\n  const [showSuccess, setShowSuccess] = useState(false);\n  const [msg, setMsg] = useState(\"Default message.\");\n\n  const updateResult = useUpdateCase(\n    caseId,\n    update,\n    changed,\n    setAccept,\n    columnList,\n    valueList,\n    setShowError,\n    setShowSuccess,\n    setMsg\n  );\n\n  useEffect(() => {\n    if (showError) {\n      setShowError(true);\n      const timer = setTimeout(() => {\n        setShowError(false);\n      }, 5000);\n    } else if (showSuccess) {\n      setShowSuccess(true);\n      const timer = setTimeout(() => {\n        setShowSuccess(false);\n      }, 3000);\n    }\n  }, [showError, showSuccess]);\n\n  return (\n    <div className={classes.root}>\n      <div className={classes.title}>\n        <Typography variant=\"h6\" component=\"h6\" className={classes.titleText}>\n          CASE ID: {caseId}\n        </Typography>\n      </div>\n      <form noValidate>\n        <div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(0, 3)}\n              nameList={nameList.slice(0, 3)}\n              valueList={defaultValue.slice(0, 3)}\n              setValueList={setValueList.slice(0, 3)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(3, 6)}\n              nameList={nameList.slice(3, 6)}\n              valueList={defaultValue.slice(3, 6)}\n              setValueList={setValueList.slice(3, 6)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(6, 9)}\n              nameList={nameList.slice(6, 9)}\n              valueList={defaultValue.slice(6, 9)}\n              setValueList={setValueList.slice(6, 9)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(9, 12)}\n              nameList={nameList.slice(9, 12)}\n              valueList={defaultValue.slice(9, 12)}\n              setValueList={setValueList.slice(9, 12)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(12, 15)}\n              nameList={nameList.slice(12, 15)}\n              valueList={defaultValue.slice(12, 15)}\n              setValueList={setValueList.slice(12, 15)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(15, 18)}\n              nameList={nameList.slice(15, 18)}\n              valueList={defaultValue.slice(15, 18)}\n              setValueList={setValueList.slice(15, 18)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(18, 21)}\n              nameList={nameList.slice(18, 21)}\n              valueList={defaultValue.slice(18, 21)}\n              setValueList={setValueList.slice(18, 21)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(21, 24)}\n              nameList={nameList.slice(21, 24)}\n              valueList={defaultValue.slice(21, 24)}\n              setValueList={setValueList.slice(21, 24)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(24, 27)}\n              nameList={nameList.slice(24, 27)}\n              valueList={defaultValue.slice(24, 27)}\n              setValueList={setValueList.slice(24, 27)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(27, 30)}\n              nameList={nameList.slice(27, 30)}\n              valueList={defaultValue.slice(27, 30)}\n              setValueList={setValueList.slice(27, 30)}\n              setChanged={setChanged}\n            />\n          </div>\n        </div>\n      </form>\n      {changed ? (\n        <Alert severity=\"warning\" className={classes.alert2}>\n          You have unsaved changes. Click 'Update' to save them, otherwise they\n          will be lost.\n        </Alert>\n      ) : null}\n      <Fade in={showError || showSuccess}>\n        <Alert\n          variant=\"filled\"\n          severity={showError && !showSuccess ? \"error\" : \"success\"}\n          className={classes.alert}\n        >\n          {msg}\n        </Alert>\n      </Fade>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useCheckAAbExist(\n  caseId,\n  setCheckFail,\n  setExist,\n  setAAbExist,\n  setAAbExistMsg\n) {\n  const [checkResult, setCheckResult] = useState(false);\n  useEffect(() => {\n    if (caseId !== \"\") {\n      checkExist(caseId);\n    }\n  }, [caseId]);\n\n  async function checkExist(id) {\n    return await API.post(\"dbapi\", \"/db/check_AAb_exist\", {\n      body: {\n        case_id: id,\n      },\n    })\n      .then((res) => {\n        setCheckFail(false);\n        if (res[0][\"COUNT(1)\"] > 0) {\n          setExist(true);\n          setAAbExist(true);\n          setCheckResult(true);\n          setAAbExistMsg(\"AAb exists, click 'Update' to proceed updating.\");\n          console.log(`Check exist. AAb case ${caseId} exists!`);\n        } else {\n          setExist(false);\n          setAAbExist(false);\n          setCheckResult(false);\n          setAAbExistMsg(\n            \"AAb DOES NOT exist, click 'Create' to proceed creating.\"\n          );\n        }\n      })\n      .catch((error) => {\n        console.log(\"[AAb] Amplify API call error\", error);\n        setCheckFail(true);\n      });\n  }\n  return checkResult;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useRetrieveAllAAbIds(caseId) {\n  const [result, setResult] = useState([]);\n  useEffect(() => {\n    if (caseId !== \"\") {\n      getAAbId(caseId);\n    }\n  }, [caseId]);\n\n  async function getAAbId(id) {\n    return await API.post(\"dbapi\", \"/db/get_all_AAb_id\", {\n      body: {\n        case_id: id,\n      },\n    })\n      .then((res) => {\n        console.log(\"AAb id list fetch result\", res);\n        for (let i = 0; i < res.length; i++) {\n          setResult((oldResult) => [...oldResult, res[i][\"AAb_id\"]]);\n        }\n      })\n      .catch((error) => {\n        console.log(\"[AAb] Amplify API call error\", error);\n      });\n  }\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useRetrieveAAbColumns(caseId, AAbIdValue, columnList) {\n  const [result, setResult] = useState(Array(columnList.length).fill(null));\n  useEffect(() => {\n    if (caseId !== \"\") {\n      console.log(\"[AAb] Retrieving column values condition met.\");\n      retrieve(caseId, AAbIdValue, columnList);\n    } else {\n      console.log(\"Retreive AAb condition not met.\");\n    }\n  }, [caseId, AAbIdValue]);\n  async function retrieve(the_case_id, the_AAb_id, columns) {\n    return await API.post(\"dbapi\", \"/db/get_one_AAb_all_column_values\", {\n      body: {\n        case_id: the_case_id,\n        AAb_id: the_AAb_id,\n        columns: columns,\n      },\n    })\n      .then((res) => {\n        console.log(\"AAb retrieve result\", res);\n        if (res.length !== 0) {\n          let valueArray = [];\n          for (let i = 0; i < columnList.length; i++) {\n            valueArray.push(res[0][columnList[i]]);\n          }\n          console.log(\n            \"[AAb] Retrieved existing case column values\",\n            valueArray\n          );\n          setResult(valueArray);\n        } else {\n          setResult(Array(columnList.length).fill(null)); // set default result\n        }\n      })\n      .catch((error) => {\n        console.log(\"[AAb] Retrieve case columns failed.\");\n        console.log(\"[AAb] Failed case id\", the_case_id);\n        console.log(\"[AAb] Failed AAb id\", the_AAb_id);\n        console.log(\"[AAb] Failed columnList\", columns);\n        console.log(\"[AAb] Amplify API call error\", error);\n      });\n  }\n\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useUpdateAAb(\n  caseId,\n  AAbIdValue,\n  update,\n  changed,\n  setAccept,\n  updateColumns,\n  updateValues,\n  setShowUpdateError,\n  setShowUpdateSuccess,\n  setUpdateMsg\n) {\n  const [result, setResult] = useState(false);\n  useEffect(() => {\n    if (update && !changed && AAbIdValue !== \"New\") {\n      console.log(\"[AAb] Updating case columns...\");\n      updateAAb(caseId, AAbIdValue, updateColumns, updateValues);\n    } else if (update) {\n      setShowUpdateError(true);\n      setShowUpdateSuccess(false);\n      setUpdateMsg(\"[AAb] Update is failed!\");\n    }\n  }, [caseId, update, changed]);\n  async function updateAAb(the_case_id, the_AAb_id, columnNames, columnValues) {\n    let columns = { case_id: the_case_id, AAb_id: the_AAb_id };\n    for (let i = 0; i < columnNames.length; i++) {\n      columns[columnNames[i]] = columnValues[i];\n    }\n    console.log(columns);\n    return await API.put(\"dbapi\", \"/db/update_AAb\", {\n      body: {\n        columns: columns,\n      },\n    })\n      .then((res) => {\n        if (res[\"affectedRows\"] ?? false) {\n          console.log(\"[AAb] Update success case ID\", the_case_id);\n          console.log(\"[AAb] Update success AAb ID\", the_AAb_id);\n          console.log(\"[AAb] Update success columns\", columnNames);\n          console.log(\"[AAb] Update success values\", columnValues);\n          setResult(true);\n          setShowUpdateError(false);\n          setShowUpdateSuccess(true);\n          setUpdateMsg(\"[AAb] Update is successful!\");\n          console.log(\"[AAb] Update case columns are successful!\");\n        }\n      })\n      .catch((error) => {\n        setAccept(false);\n        setShowUpdateError(true);\n        setShowUpdateSuccess(false);\n        setUpdateMsg(\"[AAb] Update is failed\");\n        console.log(\"[AAb] Amplify API call error\", error);\n        console.log(\"[AAb] Update fail case ID\", the_case_id);\n        console.log(\"[AAb] Update fail AAb ID\", the_AAb_id);\n        console.log(\"[AAb] Update fail columns\", columnNames);\n        console.log(\"[AAb] Update fail values\", columnValues);\n      });\n  }\n\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useCreateAAb(\n  caseId,\n  AAbIdValue,\n  isExist,\n  create,\n  changed,\n  setAccept,\n  setExist,\n  setCreateMsg,\n  setCreateSuccess,\n  columnList,\n  valueList\n) {\n  const [result, setResult] = useState(false);\n  useEffect(() => {\n    if (create && !changed && AAbIdValue === \"New\") {\n      createAAb(caseId, columnList, valueList);\n      console.log(\"New AAb has been created!\");\n      console.log(\"column list\", columnList);\n      console.log(\"value list\", valueList);\n    } else {\n      console.log(\"AAb create condition is not met.\");\n      if (create) {\n        setCreateSuccess(false);\n        setCreateMsg(`AAb case ${caseId} create is failed.`);\n      }\n    }\n  }, [caseId, isExist, create, changed]);\n\n  async function createAAb(id, columnNames, columnValues) {\n    console.log(\"Creating new AAb\");\n    let columns = { case_id: id };\n    for (let i = 0; i < columnNames.length; i++) {\n      columns[columnNames[i]] = columnValues[i];\n    }\n    return await API.post(\"dbapi\", \"/db/create_AAb\", {\n      body: {\n        columns: columns,\n      },\n    })\n      .then((res) => {\n        console.log(res);\n        setResult(true);\n        setExist(true);\n        setCreateSuccess(true);\n        setCreateMsg(`AAb case ${id} was created successfully.`);\n        console.log(`AAb case ${id} was created successfully.`);\n      })\n      .catch((error) => {\n        console.log(\"[AAb] Amplify API call error\", error);\n        setCreateSuccess(false);\n        setResult(false);\n        setAccept(false);\n      });\n  }\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport GridBox from \"./component/GridBox\";\nimport DropBox from \"./component/DropBox\";\nimport useDebounced from \"./component/useDebounced\";\nimport useCheckAAbExist from \"./component/useCheckAAbExist\";\nimport useRetrieveAllAAbIds from \"./component/useRetrieveAllAAbIds\";\nimport useRetrieveAAbColumns from \"./component/useRetrieveAAbColumns\";\nimport useUpdateAAb from \"./component/useUpdateAAb\";\nimport useCreateAAb from \"./component/useCreateAAb\";\nimport useRetrieveTableColumnPossibleValue from \"./component/useRetrieveTableColumnPossibleValue\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport Fade from \"@material-ui/core/Fade\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\nimport Typography from \"@material-ui/core/Typography\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    \"& .MuiTextField-root\": {\n      margin: theme.spacing(1),\n    },\n  },\n  alert: {\n    marginTop: \"5px\",\n    marginBottom: \"5px\",\n    width: \"90%\",\n  },\n  alert2: {\n    marginTop: \"4px\",\n    marginBottom: \"3px\",\n  },\n  tip: {\n    marginTop: theme.spacing(1),\n    marginBottom: theme.spacing(1),\n    fontWeight: \"900\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpIcon2: {\n    marginTop: \"-10px\",\n    marginBottom: \"-10px\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n  title: {\n    margin: theme.spacing(1, 0, 2),\n    paddingTop: \"3px\",\n    paddingBottom: \"3px\",\n    backgroundColor: \"#d9d9d9\",\n  },\n  titleText: {\n    paddingLeft: \"10px\",\n  },\n}));\n\nconst AAbTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction opsGenerator(idArr, nameArr) {\n  const ops = [];\n  for (let i = 0; i < idArr.length; i++) {\n    ops.push({ value: idArr[i], label: nameArr[i] });\n  }\n  ops.push({ value: null, label: \"NULL\" });\n  return ops;\n}\n\nfunction AAbIdOpsGenerator(idArr, nameArr) {\n  const ops = [];\n  for (let i = 0; i < idArr.length; i++) {\n    ops.push({ value: idArr[i], label: nameArr[i] });\n  }\n  ops.push({ value: \"New\", label: \"New\" });\n  return ops;\n}\n\nexport default function AAb_step6({\n  caseId,\n  exist,\n  setExist,\n  create,\n  update,\n  changed,\n  setAccept,\n  setChanged,\n}) {\n  const classes = useStyles();\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        Select AAb ID then start the update.\n        <br />\n        Select 'New' then create a new AAb record for this case.\n      </div>\n    </React.Fragment>\n  );\n\n  const columnList = [\n    \"is_public\",\n    \"GADA\",\n    \"IA_2A\",\n    \"mIAA\",\n    \"ZnT8A\",\n    \"received_date\",\n    \"reported_date\",\n    \"sample_status\",\n    \"comments\",\n  ];\n\n  const sampleStatusPossibleValues = useRetrieveTableColumnPossibleValue(\n    \"AAb\",\n    \"sample_status\"\n  );\n  const sampleStatusOps = opsGenerator(\n    sampleStatusPossibleValues,\n    sampleStatusPossibleValues\n  );\n\n  const columnPropsList = [\n    {\n      column: \"is_public\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [\n        { value: 1, label: \"Yes\" },\n        { value: 0, label: \"No\" },\n        { value: null, label: \"NULL\" },\n      ],\n    },\n    {\n      column: \"GADA\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [-0.1, 1500] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"IA_2A\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [-0.1, 450] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"mIAA\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [-0.1, 7] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"ZnT8A\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [-0.1, 300] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"received_date\",\n      input: \"datePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"reported_date\",\n      input: \"datePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"sample_status\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: sampleStatusOps,\n    },\n    {\n      colum: \"comments\",\n      input: \"inputBoxLarge\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n  ];\n\n  const [checkFail, setCheckFail] = useState(false);\n  const [AAbExist, setAAbExist] = useState(false);\n  const [AAbexistMsg, setAAbExistMsg] = useState(\"Checking AAb existing...\");\n  const [showExistMsg, setShowExistMsg] = useState(false);\n  const [createMsg, setCreateMsg] = useState(\"\");\n  const [createSuccess, setCreateSuccess] = useState(false);\n  const [showCreateMsg, setShowCreateMsg] = useState(false);\n\n  const isExist = useCheckAAbExist(\n    caseId,\n    setCheckFail,\n    setExist,\n    setAAbExist,\n    setAAbExistMsg\n  );\n\n  const AAbIdList = useRetrieveAllAAbIds(caseId);\n  const AAbIdOps = AAbIdOpsGenerator(AAbIdList, AAbIdList);\n  const AAbIdListName = \"AAb ID List\";\n  const [AAbIdValue, setAAbIdValue] = useState(AAbIdList[0]);\n\n  const defaultValue = useRetrieveAAbColumns(caseId, AAbIdValue, columnList);\n  useEffect(() => {\n    for (let i = 0; i < setValueList.length; i++) {\n      setValueList[i](defaultValue[i]);\n    }\n  }, [defaultValue]);\n\n  const [value0, setValue0] = useDebounced(defaultValue[0], 800);\n  const [value1, setValue1] = useDebounced(defaultValue[1], 800);\n  const [value2, setValue2] = useDebounced(defaultValue[2], 800);\n  const [value3, setValue3] = useDebounced(defaultValue[3], 800);\n  const [value4, setValue4] = useDebounced(defaultValue[4], 800);\n  const [value5, setValue5] = useDebounced(defaultValue[5], 800);\n  const [value6, setValue6] = useDebounced(defaultValue[6], 800);\n  const [value7, setValue7] = useDebounced(defaultValue[7], 800);\n  const [value8, setValue8] = useDebounced(defaultValue[8], 800);\n\n  const nameList = [\n    \"Public\",\n    \"GADA\",\n    \"IA_2A\",\n    \"mIAA\",\n    \"ZnT8A\",\n    \"Received Date\",\n    \"Reported Date\",\n    \"Sample Status\",\n    \"Comments\",\n  ];\n  const valueList = [\n    value0,\n    value1,\n    value2,\n    value3,\n    value4,\n    value5,\n    value6,\n    value7,\n    value8,\n  ];\n  const setValueList = [\n    setValue0,\n    setValue1,\n    setValue2,\n    setValue3,\n    setValue4,\n    setValue5,\n    setValue6,\n    setValue7,\n    setValue8,\n  ];\n\n  // CREATE\n  const isCreate = useCreateAAb(\n    caseId,\n    AAbIdValue,\n    isExist,\n    create,\n    changed,\n    setAccept,\n    setExist,\n    setCreateMsg,\n    setCreateSuccess,\n    columnList,\n    valueList\n  );\n\n  useEffect(() => {\n    if (create) {\n      setShowCreateMsg(true);\n      const timer3 = setTimeout(() => {\n        setShowCreateMsg(false);\n        setCreateSuccess(false);\n      }, 3000);\n    }\n  }, [createSuccess, value0, create]);\n\n  useEffect(() => {\n    if (AAbExist) {\n      setAAbExistMsg(\"AAb case exists, click 'Update' to proceed updating.\");\n    } else {\n      setAAbExistMsg(\n        \"AAb case DOES NOT exist, click 'Create' to proceed creating.\"\n      );\n    }\n\n    const timer1 = setTimeout(() => {\n      setShowExistMsg(true);\n    }, 300);\n    const timer2 = setTimeout(() => {\n      setShowExistMsg(false);\n    }, 3000);\n  }, [AAbExist, createSuccess, value0]);\n\n  useEffect(() => {\n    if (update && !showUpdateError && showUpdateSuccess) {\n      setAccept(true);\n    } else {\n      setAccept(false);\n    }\n  }, [update]);\n\n  const [showUpdateError, setShowUpdateError] = useState(false);\n  const [showUpdateSuccess, setShowUpdateSuccess] = useState(false);\n  const [updateMsg, setUpdateMsg] = useState(\"Default message.\");\n\n  // UPDATE\n  const updateResult = useUpdateAAb(\n    caseId,\n    AAbIdValue,\n    update,\n    changed,\n    setAccept,\n    columnList,\n    valueList,\n    setShowUpdateError,\n    setShowUpdateSuccess,\n    setUpdateMsg\n  );\n\n  useEffect(() => {\n    if (showUpdateError) {\n      setShowUpdateError(true);\n      const timer = setTimeout(() => {\n        setShowUpdateError(false);\n      }, 5000);\n    } else if (showUpdateSuccess) {\n      setShowUpdateSuccess(true);\n      const timer = setTimeout(() => {\n        setShowUpdateSuccess(false);\n      }, 3000);\n    }\n  }, [showUpdateError, showUpdateSuccess]);\n\n  return (\n    <div className={classes.root}>\n      <div className={classes.title}>\n        <Typography variant=\"h6\" component=\"h6\" className={classes.titleText}>\n          CASE ID: {caseId}\n        </Typography>\n      </div>\n      <form noValidate>\n        <div>\n          <Typography variant=\"body1\" className={classes.tip}>\n            How-to-use{\"  \"}\n            <AAbTooltip title={helpText} placement=\"right\">\n              <HelpOutlineIcon className={classes.helpIcon} />\n            </AAbTooltip>\n          </Typography>\n          <div>\n            <DropBox\n              name={AAbIdListName}\n              value={AAbIdValue}\n              setValue={setAAbIdValue}\n              setChanged={setChanged}\n              ops={AAbIdOps}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(0, 3)}\n              nameList={nameList.slice(0, 3)}\n              valueList={defaultValue.slice(0, 3)}\n              setValueList={setValueList.slice(0, 3)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(3, 6)}\n              nameList={nameList.slice(3, 6)}\n              valueList={defaultValue.slice(3, 6)}\n              setValueList={setValueList.slice(3, 6)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(6, 9)}\n              nameList={nameList.slice(6, 9)}\n              valueList={defaultValue.slice(6, 9)}\n              setValueList={setValueList.slice(6, 9)}\n              setChanged={setChanged}\n            />\n          </div>\n        </div>\n      </form>\n      {changed ? (\n        <Alert severity=\"warning\" className={classes.alert2}>\n          You have unsaved changes. Click 'Update' to save them, otherwise they\n          will be lost.\n        </Alert>\n      ) : null}\n      <Fade in={showExistMsg}>\n        <Alert variant=\"filled\" severity=\"info\" className={classes.alert}>\n          {AAbexistMsg}\n        </Alert>\n      </Fade>\n      <Fade in={showCreateMsg}>\n        <Alert\n          variant=\"filled\"\n          severity={!createSuccess ? \"error\" : \"success\"}\n          className={classes.alert}\n        >\n          {createMsg}\n        </Alert>\n      </Fade>\n      <Fade in={showUpdateError || showUpdateSuccess}>\n        <Alert\n          variant=\"filled\"\n          severity={showUpdateError && !showUpdateSuccess ? \"error\" : \"success\"}\n          className={classes.alert}\n        >\n          {updateMsg}\n        </Alert>\n      </Fade>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useCheckAAbExist(\n  caseId,\n  setCheckFail,\n  setExist,\n  setHLAExist,\n  setHLAExistMsg\n) {\n  const [checkResult, setCheckResult] = useState(false);\n  useEffect(() => {\n    if (caseId !== \"\") {\n      checkExist(caseId);\n    }\n  }, [caseId]);\n\n  async function checkExist(id) {\n    return await API.post(\"dbapi\", \"/db/check_HLA_exist\", {\n      body: {\n        case_id: id,\n      },\n    })\n      .then((res) => {\n        setCheckFail(false);\n        if (res[0][\"COUNT(1)\"] > 0) {\n          setExist(true);\n          setHLAExist(true);\n          setCheckResult(true);\n          setHLAExistMsg(\"HLA exists, click 'Update' to proceed updating.\");\n          console.log(`Check exist. HLA case ${caseId} exists!`);\n        } else {\n          setExist(false);\n          setHLAExist(false);\n          setCheckResult(false);\n          setHLAExistMsg(\n            \"HLA DOES NOT exist, click 'Create' to proceed creating.\"\n          );\n        }\n      })\n      .catch((error) => {\n        console.log(\"[HLA] Amplify API call error\", error);\n        setCheckFail(true);\n      });\n  }\n  return checkResult;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useRetrieveHLAColumns(caseId, columnList) {\n  const [result, setResult] = useState(Array(columnList.length).fill(null));\n  useEffect(() => {\n    if (caseId !== \"\") {\n      console.log(\"[HLA] Retrieving column values condition met.\");\n      retrieve(caseId, columnList);\n    } else {\n      console.log(\"Retreive HLA condition not met.\");\n    }\n  }, [caseId]);\n  async function retrieve(id, columns) {\n    return await API.post(\"dbapi\", \"/db/get_one_HLA_all_column_values\", {\n      body: {\n        case_id: id,\n        columns: columns,\n      },\n    })\n      .then((res) => {\n        console.log(\"HLA retrieve result\", res);\n        let valueArray = [];\n        for (let i = 0; i < columnList.length; i++) {\n          valueArray.push(res[0][columnList[i]]);\n        }\n        console.log(\"[HLA] Retrieved existing case column values\", valueArray);\n        setResult(valueArray);\n      })\n      .catch((error) => {\n        console.log(\"[HLA] Retrieve case columns failed.\");\n        console.log(\"[HLA] Failed case id\", id);\n        console.log(\"[HLA] Failed columnList\", columns);\n        console.log(\"[HLA] Amplify API call error\", error);\n      });\n  }\n\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useUpdateHLA(\n  caseId,\n  update,\n  changed,\n  setAccept,\n  updateColumns,\n  updateValues,\n  setShowUpdateError,\n  setShowUpdateSuccess,\n  setUpdateMsg\n) {\n  const [result, setResult] = useState(false);\n  useEffect(() => {\n    if (update && !changed) {\n      console.log(\"[HLA] Updating case columns...\");\n      updateHLA(caseId, updateColumns, updateValues);\n    }\n  }, [caseId, update, changed]);\n  async function updateHLA(id, columnNames, columnValues) {\n    let columns = { case_id: id };\n    for (let i = 0; i < columnNames.length; i++) {\n      columns[columnNames[i]] = columnValues[i];\n    }\n    console.log(columns);\n    return await API.put(\"dbapi\", \"/db/update_HLA\", {\n      body: {\n        columns: columns,\n      },\n    })\n      .then((res) => {\n        if (res[\"affectedRows\"] ?? false) {\n          console.log(\"[HLA Update] Success id\", id);\n          console.log(\"[HLA Update] Success columns\", columns);\n          setResult(true);\n          setShowUpdateError(false);\n          setShowUpdateSuccess(true);\n          setUpdateMsg(\"[HLA] Update is successful!\");\n          console.log(\"[HLA] Update case columns are successful!\");\n        }\n      })\n      .catch((error) => {\n        setAccept(false);\n        setShowUpdateError(true);\n        setShowUpdateSuccess(false);\n        setUpdateMsg(\"[HLA Update] Failed\");\n        console.log(\"[HLA Update] Amplify API call error\", error);\n        console.log(\"[HLA Update] Fail case id\", id);\n        console.log(\"[HLA Update] Fail columns\", columns);\n      });\n  }\n\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useCreateHLA(\n  caseId,\n  isExist,\n  create,\n  changed,\n  setAccept,\n  setExist,\n  setCreateMsg,\n  setCreateSuccess,\n  columnList,\n  valueList\n) {\n  const [result, setResult] = useState(false);\n  useEffect(() => {\n    if (!isExist && create && !changed) {\n      createHLA(caseId, columnList, valueList);\n      console.log(\"New HLA has been created!\");\n      console.log(\"column list\", columnList);\n      console.log(\"value list\", valueList);\n    } else {\n      console.log(\"HLA create condition is not met.\");\n    }\n  }, [caseId, isExist, create, changed]);\n\n  async function createHLA(id, columnNames, columnValues) {\n    console.log(\"Creating new HLA\");\n    let columns = { case_id: id };\n    for (let i = 0; i < columnNames.length; i++) {\n      columns[columnNames[i]] = columnValues[i];\n    }\n    return await API.post(\"dbapi\", \"/db/create_HLA\", {\n      body: {\n        columns: columns,\n      },\n    })\n      .then((res) => {\n        console.log(res);\n        setResult(true);\n        setExist(true);\n        setCreateSuccess(true);\n        setCreateMsg(`HLA case ${id} was created successfully.`);\n        console.log(`HLA case ${id} was created successfully.`);\n      })\n      .catch((error) => {\n        console.log(\"[HLA] Amplify API call error\", error);\n        setCreateSuccess(false);\n        setResult(false);\n        setAccept(false);\n      });\n  }\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport GridBox from \"./component/GridBox\";\nimport useDebounced from \"./component/useDebounced\";\nimport useCheckHLAExist from \"./component/useCheckHLAExist\";\nimport useRetrieveHLAColumns from \"./component/useRetrieveHLAColumns\";\nimport useUpdateHLA from \"./component/useUpdateHLA\";\nimport useCreateHLA from \"./component/useCreateHLA\";\nimport useRetrieveTableColumnPossibleValue from \"./component/useRetrieveTableColumnPossibleValue\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport Fade from \"@material-ui/core/Fade\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\nimport Typography from \"@material-ui/core/Typography\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    \"& .MuiTextField-root\": {\n      margin: theme.spacing(1),\n    },\n  },\n  alert: {\n    marginTop: \"5px\",\n    marginBottom: \"5px\",\n    width: \"90%\",\n  },\n  alert2: {\n    marginTop: \"4px\",\n    marginBottom: \"3px\",\n  },\n  tip: {\n    marginTop: theme.spacing(1),\n    marginBottom: theme.spacing(1),\n    fontWeight: \"900\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpIcon2: {\n    marginTop: \"-10px\",\n    marginBottom: \"-10px\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n  title: {\n    margin: theme.spacing(1, 0, 2),\n    paddingTop: \"3px\",\n    paddingBottom: \"3px\",\n    backgroundColor: \"#d9d9d9\",\n  },\n  titleText: {\n    paddingLeft: \"10px\",\n  },\n}));\n\nconst HLATooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction opsGenerator(idArr, nameArr) {\n  const ops = [];\n  for (let i = 0; i < idArr.length; i++) {\n    ops.push({ value: idArr[i], label: nameArr[i] });\n  }\n  ops.push({ value: null, label: \"NULL\" });\n  return ops;\n}\n\nexport default function HLA_step7({\n  caseId,\n  exist,\n  setExist,\n  create,\n  update,\n  changed,\n  setAccept,\n  setChanged,\n}) {\n  const classes = useStyles();\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        Input format 1: 00:00\n        <br />\n        Inpurt format 2: 0:0\n        <br />\n        Input format 3: 00/00\n      </div>\n    </React.Fragment>\n  );\n\n  const columnList = [\n    \"T_A_1\",\n    \"T_A_2\",\n    \"T_B_1\",\n    \"T_B_2\",\n    \"T_DR_1\",\n    \"T_DR_2\",\n    \"T_DQB_1\",\n    \"T_DQB_2\",\n    \"A_1\",\n    \"A_2\",\n    \"B_1\",\n    \"B_2\",\n    \"C_1\",\n    \"C_2\",\n    \"DRB1_1\",\n    \"DRB1_2\",\n    \"DQA1_1\",\n    \"DQA1_2\",\n    \"DQB1_1\",\n    \"DQB1_2\",\n    \"DPA1_1\",\n    \"DPA1_2\",\n    \"DPB1_1\",\n    \"DPB1_2\",\n    \"comments\",\n  ];\n\n  const columnPropsList = [\n    {\n      column: \"T_A_1\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"T_A_2\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"T_B_1\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"T_B_2\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"T_DR_1\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"T_DR_2\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"T_DQB_1\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"T_DQB_2\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"A_1\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"A_2\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"B_1\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"B_2\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"C_1\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"C_2\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"DRB1_1\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"DRB1_2\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"DQA1_1\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"DQA1_2\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"DQB1_1\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"DQB1_2\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"DPA1_1\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"DPA1_2\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"DPB1_1\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"DPB1_2\",\n      input: \"inputBoxHLA\",\n      restrict: { type: \"string\", range: [0, 15] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"comments\",\n      input: \"inputBoxLarge\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n  ];\n\n  const [checkFail, setCheckFail] = useState(false);\n  const [HLAExist, setHLAExist] = useState(false);\n  const [HLAexistMsg, setHLAExistMsg] = useState(\"Checking HLA existing...\");\n  const [showExistMsg, setShowExistMsg] = useState(false);\n  const [createMsg, setCreateMsg] = useState(\"\");\n  const [createSuccess, setCreateSuccess] = useState(false);\n  const [showCreateMsg, setShowCreateMsg] = useState(false);\n\n  const isExist = useCheckHLAExist(\n    caseId,\n    setCheckFail,\n    setExist,\n    setHLAExist,\n    setHLAExistMsg\n  );\n\n  const defaultValue = useRetrieveHLAColumns(caseId, columnList);\n  useEffect(() => {\n    for (let i = 0; i < setValueList.length; i++) {\n      setValueList[i](defaultValue[i]);\n    }\n  }, [defaultValue]);\n\n  const [value0, setValue0] = useDebounced(defaultValue[0], 800);\n  const [value1, setValue1] = useDebounced(defaultValue[1], 800);\n  const [value2, setValue2] = useDebounced(defaultValue[2], 800);\n  const [value3, setValue3] = useDebounced(defaultValue[3], 800);\n  const [value4, setValue4] = useDebounced(defaultValue[4], 800);\n  const [value5, setValue5] = useDebounced(defaultValue[5], 800);\n  const [value6, setValue6] = useDebounced(defaultValue[6], 800);\n  const [value7, setValue7] = useDebounced(defaultValue[7], 800);\n  const [value8, setValue8] = useDebounced(defaultValue[8], 800);\n  const [value9, setValue9] = useDebounced(defaultValue[9], 800);\n  const [value10, setValue10] = useDebounced(defaultValue[10], 800);\n  const [value11, setValue11] = useDebounced(defaultValue[11], 800);\n  const [value12, setValue12] = useDebounced(defaultValue[12], 800);\n  const [value13, setValue13] = useDebounced(defaultValue[13], 800);\n  const [value14, setValue14] = useDebounced(defaultValue[14], 800);\n  const [value15, setValue15] = useDebounced(defaultValue[15], 800);\n  const [value16, setValue16] = useDebounced(defaultValue[16], 800);\n  const [value17, setValue17] = useDebounced(defaultValue[17], 800);\n  const [value18, setValue18] = useDebounced(defaultValue[18], 800);\n  const [value19, setValue19] = useDebounced(defaultValue[18], 800);\n  const [value20, setValue20] = useDebounced(defaultValue[18], 800);\n  const [value21, setValue21] = useDebounced(defaultValue[18], 800);\n  const [value22, setValue22] = useDebounced(defaultValue[18], 800);\n  const [value23, setValue23] = useDebounced(defaultValue[18], 800);\n  const [value24, setValue24] = useDebounced(defaultValue[18], 800);\n\n  const nameList = [\n    \"T_A_1\",\n    \"T_A_2\",\n    \"T_B_1\",\n    \"T_B_2\",\n    \"T_DR_1\",\n    \"T_DR_2\",\n    \"T_DQB_1\",\n    \"T_DQB_2\",\n    \"A_1\",\n    \"A_2\",\n    \"B_1\",\n    \"B_2\",\n    \"C_1\",\n    \"C_2\",\n    \"DRB1_1\",\n    \"DRB1_2\",\n    \"DQA1_1\",\n    \"DQA1_2\",\n    \"DQB1_1\",\n    \"DQB1_2\",\n    \"DPA1_1\",\n    \"DPA1_2\",\n    \"DPB1_1\",\n    \"DPB1_2\",\n    \"comments\",\n  ];\n  const valueList = [\n    value0,\n    value1,\n    value2,\n    value3,\n    value4,\n    value5,\n    value6,\n    value7,\n    value8,\n    value9,\n    value10,\n    value11,\n    value12,\n    value13,\n    value14,\n    value15,\n    value16,\n    value17,\n    value18,\n    value19,\n    value20,\n    value21,\n    value22,\n    value23,\n    value24,\n  ];\n  const setValueList = [\n    setValue0,\n    setValue1,\n    setValue2,\n    setValue3,\n    setValue4,\n    setValue5,\n    setValue6,\n    setValue7,\n    setValue8,\n    setValue9,\n    setValue10,\n    setValue11,\n    setValue12,\n    setValue13,\n    setValue14,\n    setValue15,\n    setValue16,\n    setValue17,\n    setValue18,\n    setValue19,\n    setValue20,\n    setValue21,\n    setValue22,\n    setValue23,\n    setValue24,\n  ];\n\n  // CREATE\n  const isCreate = useCreateHLA(\n    caseId,\n    isExist,\n    create,\n    changed,\n    setAccept,\n    setExist,\n    setCreateMsg,\n    setCreateSuccess,\n    columnList,\n    valueList\n  );\n\n  useEffect(() => {\n    if (createSuccess) {\n      setShowCreateMsg(true);\n      const timer3 = setTimeout(() => {\n        setShowCreateMsg(false);\n        setCreateSuccess(false);\n      }, 3000);\n    }\n  }, [createSuccess, value0]);\n\n  useEffect(() => {\n    if (HLAExist) {\n      setHLAExistMsg(\"HLA case exists, click 'Update' to proceed updating.\");\n    } else {\n      setHLAExistMsg(\n        \"HLA case DOES NOT exist, click 'Create' to proceed creating.\"\n      );\n    }\n\n    const timer1 = setTimeout(() => {\n      setShowExistMsg(true);\n    }, 300);\n    const timer2 = setTimeout(() => {\n      setShowExistMsg(false);\n    }, 3000);\n  }, [HLAExist, createSuccess, value0]);\n\n  useEffect(() => {\n    if (update && !showUpdateError && showUpdateSuccess) {\n      setAccept(true);\n    } else {\n      setAccept(false);\n    }\n  }, [update]);\n\n  const [showUpdateError, setShowUpdateError] = useState(false);\n  const [showUpdateSuccess, setShowUpdateSuccess] = useState(false);\n  const [updateMsg, setUpdateMsg] = useState(\"Default message.\");\n\n  // UPDATE\n  const updateResult = useUpdateHLA(\n    caseId,\n    update,\n    changed,\n    setAccept,\n    columnList,\n    valueList,\n    setShowUpdateError,\n    setShowUpdateSuccess,\n    setUpdateMsg\n  );\n\n  useEffect(() => {\n    if (showUpdateError) {\n      setShowUpdateError(true);\n      const timer = setTimeout(() => {\n        setShowUpdateError(false);\n      }, 5000);\n    } else if (showUpdateSuccess) {\n      setShowUpdateSuccess(true);\n      const timer = setTimeout(() => {\n        setShowUpdateSuccess(false);\n      }, 3000);\n    }\n  }, [showUpdateError, showUpdateSuccess]);\n\n  console.log(\"HLA page changed\", changed);\n\n  return (\n    <div className={classes.root}>\n      <div className={classes.title}>\n        <Typography variant=\"h6\" component=\"h6\" className={classes.titleText}>\n          CASE ID: {caseId}\n        </Typography>\n      </div>\n      <form noValidate>\n        <div>\n          <Typography variant=\"body1\" className={classes.tip}>\n            How-to-use{\"  \"}\n            <HLATooltip title={helpText} placement=\"right\">\n              <HelpOutlineIcon className={classes.helpIcon} />\n            </HLATooltip>\n          </Typography>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(0, 3)}\n              nameList={nameList.slice(0, 3)}\n              valueList={defaultValue.slice(0, 3)}\n              setValueList={setValueList.slice(0, 3)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(3, 6)}\n              nameList={nameList.slice(3, 6)}\n              valueList={defaultValue.slice(3, 6)}\n              setValueList={setValueList.slice(3, 6)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(6, 9)}\n              nameList={nameList.slice(6, 9)}\n              valueList={defaultValue.slice(6, 9)}\n              setValueList={setValueList.slice(6, 9)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(9, 12)}\n              nameList={nameList.slice(9, 12)}\n              valueList={defaultValue.slice(9, 12)}\n              setValueList={setValueList.slice(9, 12)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(12, 15)}\n              nameList={nameList.slice(12, 15)}\n              valueList={defaultValue.slice(12, 15)}\n              setValueList={setValueList.slice(12, 15)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(15, 18)}\n              nameList={nameList.slice(15, 18)}\n              valueList={defaultValue.slice(15, 18)}\n              setValueList={setValueList.slice(15, 18)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(18, 21)}\n              nameList={nameList.slice(18, 21)}\n              valueList={defaultValue.slice(18, 21)}\n              setValueList={setValueList.slice(18, 21)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(21, 24)}\n              nameList={nameList.slice(21, 24)}\n              valueList={defaultValue.slice(21, 24)}\n              setValueList={setValueList.slice(21, 24)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(24, 25)}\n              nameList={nameList.slice(24, 25)}\n              valueList={defaultValue.slice(24, 25)}\n              setValueList={setValueList.slice(24, 25)}\n              setChanged={setChanged}\n            />\n          </div>\n        </div>\n      </form>\n      {changed ? (\n        <Alert severity=\"warning\" className={classes.alert2}>\n          You have unsaved changes. Click 'Update' to save them, otherwise they\n          will be lost.\n        </Alert>\n      ) : null}\n\n      <Fade in={showExistMsg}>\n        <Alert variant=\"filled\" severity=\"info\" className={classes.alert}>\n          {HLAexistMsg}\n        </Alert>\n      </Fade>\n      <Fade in={showCreateMsg}>\n        <Alert variant=\"filled\" severity=\"success\" className={classes.alert}>\n          {createMsg}\n        </Alert>\n      </Fade>\n      <Fade in={showUpdateError || showUpdateSuccess}>\n        <Alert\n          variant=\"filled\"\n          severity={showUpdateError && !showUpdateSuccess ? \"error\" : \"success\"}\n          className={classes.alert}\n        >\n          {updateMsg}\n        </Alert>\n      </Fade>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useCheckRNAExist(\n  caseId,\n  setCheckFail,\n  setExist,\n  setRNAExist,\n  setRNAExistMsg\n) {\n  const [checkResult, setCheckResult] = useState(false);\n  useEffect(() => {\n    if (caseId !== \"\") {\n      checkExist(caseId);\n    }\n  }, [caseId]);\n\n  async function checkExist(id) {\n    return await API.post(\"dbapi\", \"/db/check_RNA_exist\", {\n      body: {\n        case_id: id,\n      },\n    })\n      .then((res) => {\n        setCheckFail(false);\n        if (res[0][\"COUNT(1)\"] > 0) {\n          setExist(true);\n          setRNAExist(true);\n          setCheckResult(true);\n          setRNAExistMsg(\"RNA exists, click 'Update' to proceed updating.\");\n          console.log(`Check exist. RNA case ${caseId} exists!`);\n        } else {\n          setExist(false);\n          setRNAExist(false);\n          setCheckResult(false);\n          setRNAExistMsg(\n            \"RNA DOES NOT exist, click 'Create' to proceed creating.\"\n          );\n        }\n      })\n      .catch((error) => {\n        console.log(\"[RNA] Amplify API call error\", error);\n        setCheckFail(true);\n      });\n  }\n  return checkResult;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useRetrieveTableColumnWithConditions(\n  tableName,\n  columnName,\n  sortBy,\n  conditions\n) {\n  const [result, setResult] = useState([]);\n  useEffect(() => {\n    if (tableName !== \"\") {\n      retrieve(tableName, columnName, sortBy, conditions);\n    }\n  }, [tableName]);\n  async function retrieve(table, column, sortby, the_conditions) {\n    return await API.post(\n      \"dbapi\",\n      \"/db/get_one_table_one_column_all_existing_values_with_conditions\",\n      {\n        body: {\n          table_name: table,\n          column_name: column,\n          sort_by: sortby,\n          conditions: the_conditions,\n        },\n      }\n    )\n      .then((res) => {\n        console.log(\"Table column was retrieved successfully.\");\n        setResult(res);\n      })\n      .catch((error) => {\n        console.log(\"Failed to retrieve table column\");\n        console.log(\"Failed table\", table);\n        console.log(\"Failed column\", column);\n        console.log(\"Failed sortby\", sortby);\n        console.log(\"Amplify API call error\", error);\n      });\n  }\n\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useRetrieveAllRNAIds(caseId) {\n  const [result, setResult] = useState([]);\n  useEffect(() => {\n    if (caseId !== \"\") {\n      getRNAId(caseId);\n    }\n  }, [caseId]);\n\n  async function getRNAId(id) {\n    return await API.post(\"dbapi\", \"/db/get_all_RNA_id\", {\n      body: {\n        case_id: id,\n      },\n    })\n      .then((res) => {\n        console.log(\"RNA id list fetch result\", res);\n        for (let i = 0; i < res.length; i++) {\n          setResult((oldResult) => [...oldResult, res[i][\"RNA_id\"]]);\n        }\n      })\n      .catch((error) => {\n        console.log(\"[RNA] Amplify API call error\", error);\n      });\n  }\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useRetrieveRNAColumns(caseId, RNAIdValue, columnList) {\n  const [result, setResult] = useState(Array(columnList.length).fill(null));\n  useEffect(() => {\n    if (caseId !== \"\") {\n      console.log(\"[RNA] Retrieving column values condition met.\");\n      retrieve(caseId, RNAIdValue, columnList);\n    } else {\n      console.log(\"Retreive RNA condition not met.\");\n    }\n  }, [caseId, RNAIdValue]);\n  async function retrieve(the_case_id, the_RNA_id, columns) {\n    return await API.post(\"dbapi\", \"/db/get_one_RNA_all_column_values\", {\n      body: {\n        case_id: the_case_id,\n        RNA_id: the_RNA_id,\n        columns: columns,\n      },\n    })\n      .then((res) => {\n        console.log(\"RNA retrieve result\", res);\n        let valueArray = [];\n        for (let i = 0; i < columnList.length; i++) {\n          valueArray.push(res[0][columnList[i]]);\n        }\n        console.log(\"[RNA] Retrieved existing RNA column values\", valueArray);\n        setResult(valueArray);\n      })\n      .catch((error) => {\n        console.log(\"[RNA Retrieve] Retrieve RNA columns failed.\");\n        console.log(\"[RNA Retrieve] Failed case id\", the_case_id);\n        console.log(\"[RNA] Failed RNA id\", the_RNA_id);\n        console.log(\"[RNA Retrieve] Failed columnList\", columns);\n        console.log(\"[RNA Retrieve] Amplify API call error\", error);\n      });\n  }\n\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useUpdateRNA(\n  caseId,\n  RNAIdValue,\n  update,\n  changed,\n  setAccept,\n  updateColumns,\n  updateValues,\n  setShowUpdateError,\n  setShowUpdateSuccess,\n  setUpdateMsg\n) {\n  const [result, setResult] = useState(false);\n  useEffect(() => {\n    if (update && !changed && RNAIdValue !== \"New\") {\n      console.log(\"[RNA] Updating case columns...\");\n      updateRNA(caseId, RNAIdValue, updateColumns, updateValues);\n    } else if (update) {\n      setShowUpdateError(true);\n      setShowUpdateSuccess(false);\n      setUpdateMsg(\"[RNA] Update is failed.\");\n    }\n  }, [caseId, update, changed]);\n  async function updateRNA(the_case_id, the_RNA_id, columnNames, columnValues) {\n    let columns = { case_id: the_case_id, RNA_id: the_RNA_id };\n    for (let i = 0; i < columnNames.length; i++) {\n      columns[columnNames[i]] = columnValues[i];\n    }\n    console.log(columns);\n    return await API.put(\"dbapi\", \"/db/update_RNA\", {\n      body: {\n        columns: columns,\n      },\n    })\n      .then((res) => {\n        if (res[\"affectedRows\"] ?? false) {\n          console.log(\"[RNA] Update success Case ID\", the_case_id);\n          console.log(\"[RNA] Update success RNA ID\", the_RNA_id);\n          console.log(\"[RNA] Update success columns\", columnNames);\n          console.log(\"[RNA] Update success values\", columnValues);\n          setResult(true);\n          setShowUpdateError(false);\n          setShowUpdateSuccess(true);\n          setUpdateMsg(\"[RNA] Update is successful!\");\n          console.log(\"[RNA] Update case columns are successful!\");\n        }\n      })\n      .catch((error) => {\n        setAccept(false);\n        setShowUpdateError(true);\n        setShowUpdateSuccess(false);\n        setUpdateMsg(\"[RNA] Update is failed\");\n        console.log(\"[RNA Update] Amplify API call error\", error);\n        console.log(\"[RNA] Update fail case ID\", the_case_id);\n        console.log(\"[RNA] Update fail RNA ID\", the_RNA_id);\n        console.log(\"[RNA] Update fail columns\", columnNames);\n        console.log(\"[RNA] Update fail values\", columnValues);\n      });\n  }\n\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useCreateRNA(\n  caseId,\n  RNAIdValue,\n  isExist,\n  create,\n  changed,\n  setAccept,\n  setExist,\n  setCreateMsg,\n  setCreateSuccess,\n  columnList,\n  valueList\n) {\n  const [result, setResult] = useState(false);\n  useEffect(() => {\n    if (create && !changed && RNAIdValue === \"New\") {\n      createRNA(caseId, columnList, valueList);\n      console.log(\"New RNA has been created!\");\n      console.log(\"column list\", columnList);\n      console.log(\"value list\", valueList);\n    } else {\n      console.log(\"RNA create condition is not met.\");\n      if (create) {\n        setCreateSuccess(false);\n        setCreateMsg(`RNA case ${caseId} create is failed.`);\n      }\n    }\n  }, [caseId, isExist, create, changed]);\n\n  async function createRNA(id, columnNames, columnValues) {\n    console.log(\"Creating new RNA\");\n    let columns = { case_id: id };\n    for (let i = 0; i < columnNames.length; i++) {\n      columns[columnNames[i]] = columnValues[i];\n    }\n    return await API.post(\"dbapi\", \"/db/create_RNA\", {\n      body: {\n        columns: columns,\n      },\n    })\n      .then((res) => {\n        console.log(res);\n        setResult(true);\n        setExist(true);\n        setCreateSuccess(true);\n        setCreateMsg(`RNA case ${id} was created successfully.`);\n        console.log(`RNA case ${id} was created successfully.`);\n      })\n      .catch((error) => {\n        console.log(\"[RNA] Amplify API call error\", error);\n        setCreateSuccess(false);\n        setResult(false);\n        setAccept(false);\n      });\n  }\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport GridBox from \"./component/GridBox\";\nimport DropBox from \"./component/DropBox\";\nimport useDebounced from \"./component/useDebounced\";\nimport useCheckRNAExist from \"./component/useCheckRNAExist\";\nimport useRetrieveTableColumn from \"./component/useRetrieveTableColumn\";\nimport useRetrieveTableColumnWithConditions from \"./component/useRetrieveTableColumnWithConditions\";\nimport useRetrieveAllRNAIds from \"./component/useRetrieveAllRNAIds\";\nimport useRetrieveRNAColumns from \"./component/useRetrieveRNAColumns\";\nimport useUpdateRNA from \"./component/useUpdateRNA\";\nimport useCreateRNA from \"./component/useCreateRNA\";\nimport useRetrieveTableColumnPossibleValue from \"./component/useRetrieveTableColumnPossibleValue\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport Fade from \"@material-ui/core/Fade\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\nimport Typography from \"@material-ui/core/Typography\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    \"& .MuiTextField-root\": {\n      margin: theme.spacing(1),\n    },\n  },\n  alert: {\n    marginTop: \"5px\",\n    marginBottom: \"5px\",\n    width: \"90%\",\n  },\n  alert2: {\n    marginTop: \"4px\",\n    marginBottom: \"3px\",\n  },\n  tip: {\n    marginTop: theme.spacing(1),\n    marginBottom: theme.spacing(1),\n    fontWeight: \"900\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpIcon2: {\n    marginTop: \"-10px\",\n    marginBottom: \"-10px\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n  title: {\n    margin: theme.spacing(1, 0, 2),\n    paddingTop: \"3px\",\n    paddingBottom: \"3px\",\n    backgroundColor: \"#d9d9d9\",\n  },\n  titleText: {\n    paddingLeft: \"10px\",\n  },\n}));\n\nconst RNATooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction opsGenerator(idArr, nameArr) {\n  const ops = [];\n  for (let i = 0; i < idArr.length; i++) {\n    ops.push({ value: idArr[i], label: nameArr[i] });\n  }\n  ops.push({ value: null, label: \"NULL\" });\n  return ops;\n}\n\nfunction RNAIdOpsGenerator(idArr, nameArr) {\n  const ops = [];\n  for (let i = 0; i < idArr.length; i++) {\n    ops.push({ value: idArr[i], label: nameArr[i] });\n  }\n  ops.push({ value: \"New\", label: \"New\" });\n  return ops;\n}\n\nexport default function RNA_step8({\n  caseId,\n  exist,\n  setExist,\n  create,\n  update,\n  changed,\n  setAccept,\n  setChanged,\n}) {\n  const classes = useStyles();\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        Select RNA ID then start the update.\n        <br />\n        Select 'New' then create a new RNA record for this case.\n      </div>\n    </React.Fragment>\n  );\n\n  const columnList = [\n    \"is_public\",\n    \"RNA_aliq_id\",\n    \"process_date\",\n    \"contact_id\",\n    \"derivative_source\",\n    \"sample_type_id\",\n    \"aliquot_number\",\n    \"aliq_id\",\n    \"prep_elution_vol_ul\",\n    \"conc_ng_ul\",\n    \"RIN\",\n    \"ratio\",\n    \"yield\",\n    \"comments\",\n  ];\n\n  const contactIds = useRetrieveTableColumn(\n    \"contacts\",\n    \"contact_id\",\n    \"contact_id\"\n  );\n\n  const contactFirstNames = useRetrieveTableColumn(\n    \"contacts\",\n    \"first_name\",\n    \"contact_id\"\n  );\n\n  const contactLastNames = useRetrieveTableColumn(\n    \"contacts\",\n    \"last_name\",\n    \"contact_id\"\n  );\n\n  const contactNames = [];\n  for (let i = 0; i < contactFirstNames.length; i++) {\n    contactNames.push(contactFirstNames[i] + \" \" + contactLastNames[i]);\n  }\n\n  const contactOps = opsGenerator(contactIds, contactNames);\n\n  const sampleTypesConditions = [{ column: \"status\", value: \"Active\" }];\n\n  const sampleTypeIds = useRetrieveTableColumnWithConditions(\n    \"sample_types\",\n    \"sample_type_id\",\n    \"sample_type_id\",\n    sampleTypesConditions\n  );\n\n  const sampleTypeNames = useRetrieveTableColumnWithConditions(\n    \"sample_types\",\n    \"name\",\n    \"sample_type_id\",\n    sampleTypesConditions\n  );\n  console.log(\"sample type with conditions\", sampleTypeNames);\n\n  const sampleTypeOps = opsGenerator(sampleTypeIds, sampleTypeNames);\n\n  const columnPropsList = [\n    {\n      column: \"is_public\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [\n        { value: 1, label: \"Yes\" },\n        { value: 0, label: \"No\" },\n        { value: null, label: \"NULL\" },\n      ],\n    },\n    {\n      column: \"RNA_aliq_id\",\n      input: \"integerBox\",\n      restrict: { type: \"int\", range: [0, 5] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"process_date\",\n      input: \"datePicker\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"contact_id\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: contactOps,\n    },\n    {\n      column: \"derivative_source\",\n      input: \"integerBox\",\n      restrict: { type: \"int\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"sample_type_id\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: sampleTypeOps,\n    },\n    {\n      column: \"aliquot_number\",\n      input: \"integerBox\",\n      restrict: { type: \"int\", range: [0, 10] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"aliq_id\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [\n        { value: \"OCT\", label: \"OCT\" },\n        { value: \"RNALater\", label: \"RNALater\" },\n        { value: \"Vial\", label: \"Vial\" },\n        { value: null, label: \"NULL\" },\n      ],\n    },\n    {\n      column: \"prep_elution_vol_ul\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [0, 100] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"conc_ng_ul\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [0, 5000] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"RIN\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [0, 10] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"ratio\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [0, 3] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"yield\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [0, 100] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      colum: \"comments\",\n      input: \"inputBoxLarge\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: [],\n    },\n  ];\n\n  const [checkFail, setCheckFail] = useState(false);\n  const [RNAExist, setRNAExist] = useState(false);\n  const [RNAExistMsg, setRNAExistMsg] = useState(\"Checking RNA existing...\");\n  const [showExistMsg, setShowExistMsg] = useState(false);\n  const [createMsg, setCreateMsg] = useState(\"\");\n  const [createSuccess, setCreateSuccess] = useState(false);\n  const [showCreateMsg, setShowCreateMsg] = useState(false);\n\n  const isExist = useCheckRNAExist(\n    caseId,\n    setCheckFail,\n    setExist,\n    setRNAExist,\n    setRNAExistMsg\n  );\n\n  const RNAIdList = useRetrieveAllRNAIds(caseId);\n  const RNAIdOps = RNAIdOpsGenerator(RNAIdList, RNAIdList);\n  const RNAIdListName = \"RNA ID List\";\n  const [RNAIdValue, setRNAIdValue] = useState(RNAIdList[0]);\n\n  const defaultValue = useRetrieveRNAColumns(caseId, RNAIdValue, columnList);\n  useEffect(() => {\n    for (let i = 0; i < setValueList.length; i++) {\n      setValueList[i](defaultValue[i]);\n    }\n  }, [defaultValue]);\n\n  const [value0, setValue0] = useDebounced(defaultValue[0], 800);\n  const [value1, setValue1] = useDebounced(defaultValue[1], 800);\n  const [value2, setValue2] = useDebounced(defaultValue[2], 800);\n  const [value3, setValue3] = useDebounced(defaultValue[3], 800);\n  const [value4, setValue4] = useDebounced(defaultValue[4], 800);\n  const [value5, setValue5] = useDebounced(defaultValue[5], 800);\n  const [value6, setValue6] = useDebounced(defaultValue[6], 800);\n  const [value7, setValue7] = useDebounced(defaultValue[7], 800);\n  const [value8, setValue8] = useDebounced(defaultValue[8], 800);\n  const [value9, setValue9] = useDebounced(defaultValue[9], 800);\n  const [value10, setValue10] = useDebounced(defaultValue[10], 800);\n  const [value11, setValue11] = useDebounced(defaultValue[11], 800);\n  const [value12, setValue12] = useDebounced(defaultValue[12], 800);\n  const [value13, setValue13] = useDebounced(defaultValue[13], 800);\n\n  const nameList = [\n    \"Public\",\n    \"RNA Aliq ID\",\n    \"Process Date\",\n    \"Contact\",\n    \"Derivative Source\",\n    \"Sample Type\",\n    \"Aliquot Number\",\n    \"Aliq ID\",\n    \"Prep Elution Vol uL\",\n    \"Conc ng uL\",\n    \"RIN\",\n    \"Ratio\",\n    \"Yield\",\n    \"Comments\",\n  ];\n  const valueList = [\n    value0,\n    value1,\n    value2,\n    value3,\n    value4,\n    value5,\n    value6,\n    value7,\n    value8,\n    value9,\n    value10,\n    value11,\n    value12,\n    value13,\n  ];\n  const setValueList = [\n    setValue0,\n    setValue1,\n    setValue2,\n    setValue3,\n    setValue4,\n    setValue5,\n    setValue6,\n    setValue7,\n    setValue8,\n    setValue9,\n    setValue10,\n    setValue11,\n    setValue12,\n    setValue13,\n  ];\n\n  // CREATE\n  const isCreate = useCreateRNA(\n    caseId,\n    RNAIdValue,\n    isExist,\n    create,\n    changed,\n    setAccept,\n    setExist,\n    setCreateMsg,\n    setCreateSuccess,\n    columnList,\n    valueList\n  );\n\n  useEffect(() => {\n    if (create) {\n      setShowCreateMsg(true);\n      const timer3 = setTimeout(() => {\n        setShowCreateMsg(false);\n        setCreateSuccess(false);\n      }, 3000);\n    }\n  }, [createSuccess, value0, create]);\n\n  useEffect(() => {\n    if (RNAExist) {\n      setRNAExistMsg(\n        \"RNA of this case exists, click 'Update' to proceed updating.\"\n      );\n    } else {\n      setRNAExistMsg(\n        \"RNA case DOES NOT exist, click 'Create' to proceed creating.\"\n      );\n    }\n\n    const timer1 = setTimeout(() => {\n      setShowExistMsg(true);\n    }, 300);\n    const timer2 = setTimeout(() => {\n      setShowExistMsg(false);\n    }, 3000);\n  }, [RNAExist, createSuccess, value0]);\n\n  useEffect(() => {\n    if (update && !showUpdateError && showUpdateSuccess) {\n      setAccept(true);\n    } else {\n      setAccept(false);\n    }\n  }, [update]);\n\n  const [showUpdateError, setShowUpdateError] = useState(false);\n  const [showUpdateSuccess, setShowUpdateSuccess] = useState(false);\n  const [updateMsg, setUpdateMsg] = useState(\"Default message.\");\n\n  // UPDATE\n  const updateResult = useUpdateRNA(\n    caseId,\n    RNAIdValue,\n    update,\n    changed,\n    setAccept,\n    columnList,\n    valueList,\n    setShowUpdateError,\n    setShowUpdateSuccess,\n    setUpdateMsg\n  );\n\n  useEffect(() => {\n    if (showUpdateError) {\n      setShowUpdateError(true);\n      const timer = setTimeout(() => {\n        setShowUpdateError(false);\n      }, 5000);\n    } else if (showUpdateSuccess) {\n      setShowUpdateSuccess(true);\n      const timer = setTimeout(() => {\n        setShowUpdateSuccess(false);\n      }, 3000);\n    }\n  }, [showUpdateError, showUpdateSuccess]);\n\n  return (\n    <div className={classes.root}>\n      <div className={classes.title}>\n        <Typography variant=\"h6\" component=\"h6\" className={classes.titleText}>\n          CASE ID: {caseId}\n        </Typography>\n      </div>\n      <form noValidate>\n        <div>\n          <Typography variant=\"body1\" className={classes.tip}>\n            How-to-use{\"  \"}\n            <RNATooltip title={helpText} placement=\"right\">\n              <HelpOutlineIcon className={classes.helpIcon} />\n            </RNATooltip>\n          </Typography>\n          <div>\n            <DropBox\n              name={RNAIdListName}\n              value={RNAIdValue}\n              setValue={setRNAIdValue}\n              setChanged={setChanged}\n              ops={RNAIdOps}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(0, 3)}\n              nameList={nameList.slice(0, 3)}\n              valueList={defaultValue.slice(0, 3)}\n              setValueList={setValueList.slice(0, 3)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(3, 6)}\n              nameList={nameList.slice(3, 6)}\n              valueList={defaultValue.slice(3, 6)}\n              setValueList={setValueList.slice(3, 6)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(6, 9)}\n              nameList={nameList.slice(6, 9)}\n              valueList={defaultValue.slice(6, 9)}\n              setValueList={setValueList.slice(6, 9)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(9, 12)}\n              nameList={nameList.slice(9, 12)}\n              valueList={defaultValue.slice(9, 12)}\n              setValueList={setValueList.slice(9, 12)}\n              setChanged={setChanged}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(12, 15)}\n              nameList={nameList.slice(12, 15)}\n              valueList={defaultValue.slice(12, 15)}\n              setValueList={setValueList.slice(12, 15)}\n              setChanged={setChanged}\n            />\n          </div>\n        </div>\n      </form>\n      {changed ? (\n        <Alert severity=\"warning\" className={classes.alert2}>\n          You have unsaved changes. Click 'Update' to save them, otherwise they\n          will be lost.\n        </Alert>\n      ) : null}\n      <Fade in={showExistMsg}>\n        <Alert variant=\"filled\" severity=\"info\" className={classes.alert}>\n          {RNAExistMsg}\n        </Alert>\n      </Fade>\n      <Fade in={showCreateMsg}>\n        <Alert\n          variant=\"filled\"\n          severity={!createSuccess ? \"error\" : \"success\"}\n          className={classes.alert}\n        >\n          {createMsg}\n        </Alert>\n      </Fade>\n      <Fade in={showUpdateError || showUpdateSuccess}>\n        <Alert\n          variant=\"filled\"\n          severity={showUpdateError && !showUpdateSuccess ? \"error\" : \"success\"}\n          className={classes.alert}\n        >\n          {updateMsg}\n        </Alert>\n      </Fade>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useCheckSampleExist(\n  caseId,\n  setCheckFail,\n  setExist,\n  setSampleExist,\n  setSampleExistMsg\n) {\n  const [checkResult, setCheckResult] = useState(false);\n  useEffect(() => {\n    if (caseId !== \"\") {\n      checkExist(caseId);\n    }\n  }, [caseId]);\n\n  async function checkExist(id) {\n    return await API.post(\"dbapi\", \"/db/check_sample_exist\", {\n      body: {\n        case_id: id,\n      },\n    })\n      .then((res) => {\n        setCheckFail(false);\n        if (res[0][\"COUNT(1)\"] > 0) {\n          setExist(true);\n          setSampleExist(true);\n          setCheckResult(true);\n          setSampleExistMsg(\n            \"Sample exists, click 'Update' to proceed updating.\"\n          );\n          console.log(`Check exist. Sample case ${caseId} exists!`);\n        } else {\n          setExist(false);\n          setSampleExist(false);\n          setCheckResult(false);\n          setSampleExistMsg(\n            \"Sample DOES NOT exist, click 'Create' to proceed creating.\"\n          );\n        }\n      })\n      .catch((error) => {\n        console.log(\"[Sample] Amplify API call error\", error);\n        setCheckFail(true);\n      });\n  }\n  return checkResult;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useRetrieveAllVialIds(caseId) {\n  const [result, setResult] = useState([]);\n  useEffect(() => {\n    if (caseId !== \"\") {\n      getVialId(caseId);\n    }\n  }, [caseId]);\n\n  async function getVialId(id) {\n    return await API.post(\"dbapi\", \"/db/get_all_vial_id\", {\n      body: {\n        case_id: id,\n      },\n    })\n      .then((res) => {\n        console.log(\"Vial id list fetch result\", res);\n        for (let i = 0; i < res.length; i++) {\n          setResult((oldResult) => [...oldResult, res[i][\"vial_id\"]]);\n        }\n      })\n      .catch((error) => {\n        console.log(\"[Sample] Amplify API call error\", error);\n      });\n  }\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useRetrieveSampleColumns(\n  caseId,\n  vialIdValue,\n  columnList\n) {\n  const [result, setResult] = useState(Array(columnList.length).fill(null));\n  useEffect(() => {\n    if (caseId !== \"\") {\n      console.log(\"[Sample] Retrieving column values condition met.\");\n      retrieve(caseId, vialIdValue, columnList);\n    } else {\n      console.log(\"Retreive sample condition not met.\");\n    }\n  }, [caseId, vialIdValue]);\n  async function retrieve(the_case_id, the_vial_id, columns) {\n    return await API.post(\"dbapi\", \"/db/get_one_sample_all_column_values\", {\n      body: {\n        case_id: the_case_id,\n        vial_id: the_vial_id,\n        columns: columns,\n      },\n    })\n      .then((res) => {\n        console.log(\"Sample retrieve result\", res);\n        let valueArray = [];\n        for (let i = 0; i < columnList.length; i++) {\n          valueArray.push(res[0][columnList[i]]);\n        }\n        console.log(\n          \"[Sample] Retrieved existing sample column values\",\n          valueArray\n        );\n        setResult(valueArray);\n      })\n      .catch((error) => {\n        console.log(\"[Sample Retrieve] Retrieve sample columns failed.\");\n        console.log(\"[Sample Retrieve] Failed case id\", the_case_id);\n        console.log(\"[Sample] Failed vial id\", the_vial_id);\n        console.log(\"[Sample Retrieve] Failed columnList\", columns);\n        console.log(\"[Sample Retrieve] Amplify API call error\", error);\n      });\n  }\n\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useUpdateSample(\n  caseId,\n  vialIdValue,\n  update,\n  changed,\n  setAccept,\n  updateColumns,\n  updateValues,\n  setShowUpdateError,\n  setShowUpdateSuccess,\n  setUpdateMsg\n) {\n  const [result, setResult] = useState(false);\n  useEffect(() => {\n    if (update && !changed && vialIdValue !== \"New\") {\n      console.log(\"[Sample] Updating case columns...\");\n      updateSample(caseId, vialIdValue, updateColumns, updateValues);\n    } else if (update) {\n      setShowUpdateError(true);\n      setShowUpdateSuccess(false);\n      setUpdateMsg(\"[Sample] Update is failed.\");\n    }\n  }, [caseId, update, changed]);\n  async function updateSample(\n    the_case_id,\n    the_vial_id,\n    columnNames,\n    columnValues\n  ) {\n    let columns = { case_id: the_case_id, vial_id: the_vial_id };\n    for (let i = 0; i < columnNames.length; i++) {\n      columns[columnNames[i]] = columnValues[i];\n    }\n    console.log(columns);\n    return await API.put(\"dbapi\", \"/db/update_sample\", {\n      body: {\n        columns: columns,\n      },\n    })\n      .then((res) => {\n        if (res[\"affectedRows\"] ?? false) {\n          console.log(\"[Sample] Update success Case ID\", the_case_id);\n          console.log(\"[Sample] Update success Vial ID\", the_vial_id);\n          console.log(\"[Sample] Update success columns\", columnNames);\n          console.log(\"[Sample] Update success values\", columnValues);\n          setResult(true);\n          setShowUpdateError(false);\n          setShowUpdateSuccess(true);\n          setUpdateMsg(\"[Sample] Update is successful!\");\n          console.log(\"[Sample] Update case columns are successful!\");\n        }\n      })\n      .catch((error) => {\n        setAccept(false);\n        setShowUpdateError(true);\n        setShowUpdateSuccess(false);\n        setUpdateMsg(\"[Sample] Update is failed\");\n        console.log(\"[Sample Update] Amplify API call error\", error);\n        console.log(\"[Sample] Update fail case ID\", the_case_id);\n        console.log(\"[Sample] Update fail Vial ID\", the_vial_id);\n        console.log(\"[Sample] Update fail columns\", columnNames);\n        console.log(\"[Sample] Update fail values\", columnValues);\n      });\n  }\n\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useCreateSample(\n  caseId,\n  vialIdValue,\n  isExist,\n  create,\n  changed,\n  setAccept,\n  setExist,\n  setCreateMsg,\n  setCreateSuccess,\n  columnList,\n  valueList\n) {\n  const [result, setResult] = useState(false);\n  useEffect(() => {\n    if (create && !changed && vialIdValue === \"New\") {\n      createSample(caseId, columnList, valueList);\n      console.log(\"New sample has been created!\");\n      console.log(\"column list\", columnList);\n      console.log(\"value list\", valueList);\n    } else {\n      console.log(\"Sample create condition is not met.\");\n      if (create) {\n        setCreateSuccess(false);\n        setCreateMsg(`Sample case ${caseId} create is failed.`);\n      }\n    }\n  }, [caseId, isExist, create, changed]);\n\n  async function createSample(the_case_id, columnNames, columnValues) {\n    console.log(\"Creating new RNA\");\n    let columns = { case_id: the_case_id };\n    for (let i = 0; i < columnNames.length; i++) {\n      columns[columnNames[i]] = columnValues[i];\n    }\n    return await API.post(\"dbapi\", \"/db/create_sample\", {\n      body: {\n        columns: columns,\n      },\n    })\n      .then((res) => {\n        console.log(res);\n        setResult(true);\n        setExist(true);\n        setCreateSuccess(true);\n        setCreateMsg(\n          `Sample of the case ${the_case_id} was created successfully.`\n        );\n        console.log(\n          `Sample of the case ${the_case_id} was created successfully.`\n        );\n      })\n      .catch((error) => {\n        console.log(\"[Sample] Amplify API call error\", error);\n        setCreateSuccess(false);\n        setResult(false);\n        setAccept(false);\n      });\n  }\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useDeleteSample(\n  caseId,\n  vialId,\n  deleting,\n  setAccept,\n  setDeleteMsg,\n  setDeleteSuccess\n) {\n  const [result, setResult] = useState(false);\n  useEffect(() => {\n    if (deleting && vialId !== null) {\n      deleteSample(caseId, vialId);\n      console.log(\"The sample has been deleted!\");\n    } else {\n      console.log(\"Sample delete condition has not met.\");\n      if (deleting) {\n        setDeleteSuccess(false);\n        setDeleteMsg(`Sample case ${caseId} delete has failed.`);\n      }\n    }\n  }, [caseId, vialId, deleting]);\n\n  async function deleteSample(the_case_id, the_vial_id) {\n    console.log(\"Deleting sample\");\n    return await API.del(\"dbapi\", \"/db/delete_sample\", {\n      body: {\n        case_id: the_case_id,\n        vial_id: the_vial_id,\n      },\n    })\n      .then((res) => {\n        console.log(res);\n        setResult(true);\n        setDeleteSuccess(true);\n        setDeleteMsg(\n          `Sample of the case ${the_case_id} was deleted successfully.`\n        );\n        console.log(\n          `Sample of the case ${the_case_id} was deleted successfully.`\n        );\n      })\n      .catch((error) => {\n        console.log(\"[Sample Delete] Amplify API call error\", error);\n        setDeleteSuccess(false);\n        setResult(false);\n        setAccept(false);\n      });\n  }\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\nimport GridBox from \"./component/GridBox\";\nimport DropBox from \"./component/DropBox\";\nimport useDebounced from \"./component/useDebounced\";\nimport useCheckSampleExist from \"./component/useCheckSampleExist\";\nimport useRetrieveAllVialIds from \"./component/useRetrieveAllVialIds\";\nimport useRetrieveSampleColumns from \"./component/useRetrieveSampleColumns\";\nimport useUpdateSample from \"./component/useUpdateSample\";\nimport useCreateSample from \"./component/useCreateSample\";\nimport useDeleteSample from \"./component/useDeleteSample\";\nimport useRetrieveTableColumn from \"./component/useRetrieveTableColumn\";\nimport useRetrieveTableColumnWithConditions from \"./component/useRetrieveTableColumnWithConditions\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport Fade from \"@material-ui/core/Fade\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\nimport Typography from \"@material-ui/core/Typography\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    \"& .MuiTextField-root\": {\n      margin: theme.spacing(1),\n    },\n  },\n  alert: {\n    marginTop: \"5px\",\n    marginBottom: \"5px\",\n    width: \"90%\",\n  },\n  alert2: {\n    marginTop: \"4px\",\n    marginBottom: \"3px\",\n  },\n  tip: {\n    marginTop: theme.spacing(1),\n    marginBottom: theme.spacing(1),\n    fontWeight: \"900\",\n    display: \"flex\",\n    alignItems: \"center\",\n    flexWrap: \"wrap\",\n  },\n  helpIcon: {\n    fontSize: 18,\n    marginLeft: \"3px\",\n    color: \"#0292FF\",\n  },\n  helpIcon2: {\n    marginTop: \"-10px\",\n    marginBottom: \"-10px\",\n  },\n  helpText: {\n    padding: \"10px\",\n    textShadow: \"0 0 20px white\",\n  },\n  title: {\n    margin: theme.spacing(1, 0, 2),\n    paddingTop: \"3px\",\n    paddingBottom: \"3px\",\n    backgroundColor: \"#d9d9d9\",\n  },\n  titleText: {\n    paddingLeft: \"10px\",\n  },\n}));\n\nconst SampleTooltip = withStyles((theme) => ({\n  tooltip: {\n    backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n    color: \"#000000\",\n    border: \"1px solid #dadde9\",\n    maxWidth: \"420px\",\n    fontSize: 15,\n  },\n}))(Tooltip);\n\nfunction opsGenerator(idArr, nameArr) {\n  const ops = [];\n  for (let i = 0; i < idArr.length; i++) {\n    ops.push({ value: idArr[i], label: nameArr[i] });\n  }\n  ops.push({ value: null, label: \"NULL\" });\n  return ops;\n}\n\nfunction vialIdOpsGenerator(idArr, nameArr) {\n  const ops = [];\n  for (let i = 0; i < idArr.length; i++) {\n    ops.push({ value: idArr[i], label: nameArr[i] });\n  }\n  ops.push({ value: \"New\", label: \"New\" });\n  return ops;\n}\n\nexport default function Sample_step9({\n  caseId,\n  exist,\n  setExist,\n  create,\n  update,\n  deleting,\n  changed,\n  setAccept,\n  setChanged,\n}) {\n  const classes = useStyles();\n\n  const helpText = (\n    <React.Fragment>\n      <div className={classes.helpText}>\n        Hint:\n        <br />\n        Select Vial ID then start the update.\n        <br />\n        Select 'New' then create a new Sample record for this case.\n      </div>\n    </React.Fragment>\n  );\n\n  const columnList = [\"sample_type_id\", \"aliquot_number\", \"percent_viability\"];\n\n  const sampleTypesConditions = [{ column: \"status\", value: \"Active\" }];\n\n  const sampleTypeIds = useRetrieveTableColumnWithConditions(\n    \"sample_types\",\n    \"sample_type_id\",\n    \"sample_type_id\",\n    sampleTypesConditions\n  );\n\n  const sampleTypeNames = useRetrieveTableColumnWithConditions(\n    \"sample_types\",\n    \"name\",\n    \"sample_type_id\",\n    sampleTypesConditions\n  );\n\n  const sampleTypeOps = opsGenerator(sampleTypeIds, sampleTypeNames);\n\n  const columnPropsList = [\n    {\n      column: \"sample_type_id\",\n      input: \"dropDown\",\n      restrict: { type: \"string\", range: [] },\n      valid: useState(true),\n      ops: sampleTypeOps,\n    },\n    {\n      column: \"aliquot_number\",\n      input: \"integerBox\",\n      restrict: { type: \"int\", range: [0, 10] },\n      valid: useState(true),\n      ops: [],\n    },\n    {\n      column: \"prep_elution_vol_ul\",\n      input: \"floatBox\",\n      restrict: { type: \"float\", range: [0, 100] },\n      valid: useState(true),\n      ops: [],\n    },\n  ];\n\n  const [checkFail, setCheckFail] = useState(false);\n  const [sampleExist, setSampleExist] = useState(false);\n  const [sampleExistMsg, setSampleExistMsg] = useState(\n    \"Checking sample existing...\"\n  );\n  const [showExistMsg, setShowExistMsg] = useState(false);\n  const [createMsg, setCreateMsg] = useState(\"\");\n  const [createSuccess, setCreateSuccess] = useState(false);\n  const [showCreateMsg, setShowCreateMsg] = useState(false);\n  const [showDeleteMsg, setShowDeleteMsg] = useState(false);\n  const [deleteMsg, setDeleteMsg] = useState(\"\");\n  const [deleteSuccess, setDeleteSuccess] = useState(false);\n\n  const isExist = useCheckSampleExist(\n    caseId,\n    setCheckFail,\n    setExist,\n    setSampleExist,\n    setSampleExistMsg\n  );\n\n  const vialIdList = useRetrieveAllVialIds(caseId);\n  const vialIdOps = vialIdOpsGenerator(vialIdList, vialIdList);\n  const vialIdListName = \"Vial ID List\";\n  const [vialId, setVialId] = useState(vialIdList[0]);\n\n  const defaultValue = useRetrieveSampleColumns(caseId, vialId, columnList);\n  useEffect(() => {\n    for (let i = 0; i < setValueList.length; i++) {\n      setValueList[i](defaultValue[i]);\n    }\n  }, [defaultValue]);\n\n  const [value0, setValue0] = useDebounced(defaultValue[0], 800);\n  const [value1, setValue1] = useDebounced(defaultValue[1], 800);\n  const [value2, setValue2] = useDebounced(defaultValue[2], 800);\n\n  const nameList = [\"Sample Type\", \"Aliquot Number\", \"Percent Viability\"];\n  const valueList = [value0, value1, value2];\n  const setValueList = [setValue0, setValue1, setValue2];\n\n  // CREATE\n  const isCreate = useCreateSample(\n    caseId,\n    vialId,\n    isExist,\n    create,\n    changed,\n    setAccept,\n    setExist,\n    setCreateMsg,\n    setCreateSuccess,\n    columnList,\n    valueList\n  );\n\n  useEffect(() => {\n    if (create) {\n      setShowCreateMsg(true);\n      const timer3 = setTimeout(() => {\n        setShowCreateMsg(false);\n        setCreateSuccess(false);\n      }, 3000);\n    }\n  }, [createSuccess, value0, create]);\n\n  useEffect(() => {\n    if (sampleExist) {\n      setSampleExistMsg(\n        \"Sample of this case exists, click 'Update' to proceed updating.\"\n      );\n    } else {\n      setSampleExistMsg(\n        \"Sample of this case DOES NOT exist, click 'Create' to proceed creating.\"\n      );\n    }\n\n    const timer1 = setTimeout(() => {\n      setShowExistMsg(true);\n    }, 300);\n    const timer2 = setTimeout(() => {\n      setShowExistMsg(false);\n    }, 3000);\n  }, [sampleExist, createSuccess, value0]);\n\n  // DELETE\n  const isDelete = useDeleteSample(\n    caseId,\n    vialId,\n    deleting,\n    setAccept,\n    setDeleteMsg,\n    setDeleteSuccess\n  );\n\n  useEffect(() => {\n    if (deleting) {\n      setShowDeleteMsg(true);\n      const timer3 = setTimeout(() => {\n        setShowDeleteMsg(false);\n        setDeleteSuccess(false);\n      }, 3000);\n    }\n  }, [deleteSuccess, deleting]);\n\n  // UPDATE\n  useEffect(() => {\n    if (update && !showUpdateError && showUpdateSuccess) {\n      setAccept(true);\n    } else {\n      setAccept(false);\n    }\n  }, [update]);\n\n  const [showUpdateError, setShowUpdateError] = useState(false);\n  const [showUpdateSuccess, setShowUpdateSuccess] = useState(false);\n  const [updateMsg, setUpdateMsg] = useState(\"Default message.\");\n\n  const updateResult = useUpdateSample(\n    caseId,\n    vialId,\n    update,\n    changed,\n    setAccept,\n    columnList,\n    valueList,\n    setShowUpdateError,\n    setShowUpdateSuccess,\n    setUpdateMsg\n  );\n\n  useEffect(() => {\n    if (showUpdateError) {\n      setShowUpdateError(true);\n      const timer = setTimeout(() => {\n        setShowUpdateError(false);\n      }, 5000);\n    } else if (showUpdateSuccess) {\n      setShowUpdateSuccess(true);\n      const timer = setTimeout(() => {\n        setShowUpdateSuccess(false);\n      }, 3000);\n    }\n  }, [showUpdateError, showUpdateSuccess]);\n\n  return (\n    <div className={classes.root}>\n      <div className={classes.title}>\n        <Typography variant=\"h6\" component=\"h6\" className={classes.titleText}>\n          CASE ID: {caseId}\n        </Typography>\n      </div>\n      <form noValidate>\n        <div>\n          <Typography variant=\"body1\" className={classes.tip}>\n            How-to-use{\"  \"}\n            <SampleTooltip title={helpText} placement=\"right\">\n              <HelpOutlineIcon className={classes.helpIcon} />\n            </SampleTooltip>\n          </Typography>\n          <div>\n            <DropBox\n              name={vialIdListName}\n              value={vialId}\n              setValue={setVialId}\n              setChanged={setChanged}\n              ops={vialIdOps}\n            />\n          </div>\n          <div>\n            <GridBox\n              columnPropsList={columnPropsList.slice(0, 3)}\n              nameList={nameList.slice(0, 3)}\n              valueList={defaultValue.slice(0, 3)}\n              setValueList={setValueList.slice(0, 3)}\n              setChanged={setChanged}\n            />\n          </div>\n        </div>\n      </form>\n      {changed ? (\n        <Alert severity=\"warning\" className={classes.alert2}>\n          You have unsaved changes. Click 'Update' to save them, otherwise they\n          will be lost.\n        </Alert>\n      ) : null}\n      <Fade in={showExistMsg}>\n        <Alert variant=\"filled\" severity=\"info\" className={classes.alert}>\n          {sampleExistMsg}\n        </Alert>\n      </Fade>\n      <Fade in={showCreateMsg}>\n        <Alert\n          variant=\"filled\"\n          severity={!createSuccess ? \"error\" : \"success\"}\n          className={classes.alert}\n        >\n          {createMsg}\n        </Alert>\n      </Fade>\n      <Fade in={showUpdateError || showUpdateSuccess}>\n        <Alert\n          variant=\"filled\"\n          severity={showUpdateError && !showUpdateSuccess ? \"error\" : \"success\"}\n          className={classes.alert}\n        >\n          {updateMsg}\n        </Alert>\n      </Fade>\n      <Fade in={showDeleteMsg}>\n        <Alert\n          variant=\"filled\"\n          severity={!deleteSuccess ? \"error\" : \"success\"}\n          className={classes.alert}\n        >\n          {deleteMsg}\n        </Alert>\n      </Fade>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Container from \"@material-ui/core/Container\";\nimport { Box } from \"@material-ui/core\";\nimport Stepper from \"@material-ui/core/Stepper\";\nimport Step from \"@material-ui/core/Step\";\nimport StepLabel from \"@material-ui/core/StepLabel\";\nimport StepButton from \"@material-ui/core/StepButton\";\nimport StepContent from \"@material-ui/core/StepContent\";\nimport Button from \"@material-ui/core/Button\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport CreateCase_step0 from \"./component/CreateCase_step0\";\nimport CaseIdentificationAndQC_step1 from \"./component/CaseIdentificationAndQC_step1\";\nimport CaseProcessing_step2 from \"./component/CaseProcessing_step2\";\nimport DemographicsAndTimeline_step3 from \"./component/DemographicsAndTimeline_step3\";\nimport ClinicalHistoryAndMedSoc_step4 from \"./component/ClinicalHistoryAndMedSoc_step4\";\nimport HospitalLabs_step5 from \"./component/HospitalLabs_step5\";\nimport AAb_step6 from \"./component/AAb_step6\";\nimport HLA_step7 from \"./component/HLA_step7\";\nimport RNA_step8 from \"./component/RNA_step8\";\nimport Sample_step9 from \"./component/Sample_step9\";\n\nconst useStyles = makeStyles((theme) => ({\n  stepper: {\n    padding: theme.spacing(1, 1, 1),\n  },\n  stepLabel: {\n    \"&:hover\": {\n      //backgroundColor: theme.palette.primary.light,\n      cursor: \"pointer\",\n    },\n  },\n  button: {\n    marginTop: theme.spacing(1),\n    marginRight: theme.spacing(1),\n  },\n  actionsContainer: {\n    marginBottom: theme.spacing(2),\n  },\n  resetContainer: {\n    padding: theme.spacing(3),\n  },\n}));\n\nfunction getSteps() {\n  return [\n    \"Create a new case / Update an existing case\",\n    \"Case Identification and QC\",\n    \"Case Processing\",\n    \"Demographics and Timeline\",\n    \"Clinical History and Med/Soc\",\n    \"Hospital Labs\",\n    \"AAb\",\n    \"HLA\",\n    \"RNA\",\n    \"Sample\",\n  ];\n}\n\nexport default function SingleCaseStepper() {\n  const classes = useStyles();\n  const [activeStep, setActiveStep] = useState(0);\n  const [completed, setCompleted] = useState({});\n  const steps = getSteps();\n\n  const [caseId, setCaseId] = useState(\"\");\n  const [caseExist, setCaseExist] = useState(false);\n  const [AAbExist, setAAbExist] = useState(false);\n  const [HLAExist, setHLAExist] = useState(false);\n  const [RNAExist, setRNAExist] = useState(false);\n  const [sampleExist, setSampleExist] = useState(false);\n  const [createCase, setCreateCase] = useState(false);\n  const [createAAb, setCreateAAb] = useState(false);\n  const [createHLA, setCreateHLA] = useState(false);\n  const [createRNA, setCreateRNA] = useState(false);\n  const [createSample, setCreateSample] = useState(false);\n  const [update, setUpdate] = useState(false);\n  const [changed, setChanged] = useState(false);\n  const [accept, setAccept] = useState(false);\n  const [update1, setUpdate1] = useState(false);\n  const [accept1, setAccept1] = useState(false);\n  const [update2, setUpdate2] = useState(false);\n  const [accept2, setAccept2] = useState(false);\n  const [update3, setUpdate3] = useState(false);\n  const [accept3, setAccept3] = useState(false);\n  const [update4, setUpdate4] = useState(false);\n  const [accept4, setAccept4] = useState(false);\n  const [update5, setUpdate5] = useState(false);\n  const [accept5, setAccept5] = useState(false);\n  const [update6, setUpdate6] = useState(false);\n  const [accept6, setAccept6] = useState(false);\n  const [update7, setUpdate7] = useState(false);\n  const [accept7, setAccept7] = useState(false);\n  const [update8, setUpdate8] = useState(false);\n  const [accept8, setAccept8] = useState(false);\n  const [update9, setUpdate9] = useState(false);\n  const [accept9, setAccept9] = useState(false);\n  const [delete9, setDelete9] = useState(false);\n\n  function getStepContent(step) {\n    switch (step) {\n      case 0:\n        return (\n          <div>\n            <CreateCase_step0\n              setCaseId={setCaseId}\n              caseExist\n              setExist={setCaseExist}\n              create={createCase}\n              update={update}\n              changed={changed}\n              setChanged={setChanged}\n              setAccept={setAccept}\n            />\n          </div>\n        );\n      case 1:\n        return (\n          <CaseIdentificationAndQC_step1\n            caseId={caseId}\n            update={update1}\n            changed={changed}\n            setAccept={setAccept1}\n            setChanged={setChanged}\n          />\n        );\n      case 2:\n        return (\n          <CaseProcessing_step2\n            caseId={caseId}\n            update={update2}\n            changed={changed}\n            setAccept={setAccept2}\n            setChanged={setChanged}\n          />\n        );\n      case 3:\n        return (\n          <DemographicsAndTimeline_step3\n            caseId={caseId}\n            update={update3}\n            changed={changed}\n            setAccept={setAccept3}\n            setChanged={setChanged}\n          />\n        );\n      case 4:\n        return (\n          <ClinicalHistoryAndMedSoc_step4\n            caseId={caseId}\n            update={update4}\n            changed={changed}\n            setAccept={setAccept4}\n            setChanged={setChanged}\n          />\n        );\n      case 5:\n        return (\n          <HospitalLabs_step5\n            caseId={caseId}\n            update={update5}\n            changed={changed}\n            setAccept={setAccept5}\n            setChanged={setChanged}\n          />\n        );\n      case 6:\n        return (\n          <AAb_step6\n            caseId={caseId}\n            exist={AAbExist}\n            setExist={setAAbExist}\n            create={createAAb}\n            update={update6}\n            changed={changed}\n            setAccept={setAccept6}\n            setChanged={setChanged}\n          />\n        );\n      case 7:\n        return (\n          <HLA_step7\n            caseId={caseId}\n            exist={HLAExist}\n            setExist={setHLAExist}\n            create={createHLA}\n            update={update7}\n            changed={changed}\n            setAccept={setAccept7}\n            setChanged={setChanged}\n          />\n        );\n\n      case 8:\n        return (\n          <RNA_step8\n            caseId={caseId}\n            exist={RNAExist}\n            setExist={setRNAExist}\n            create={createRNA}\n            update={update8}\n            changed={changed}\n            setAccept={setAccept8}\n            setChanged={setChanged}\n          />\n        );\n      case 9:\n        return (\n          <Sample_step9\n            caseId={caseId}\n            exist={sampleExist}\n            setExist={setSampleExist}\n            create={createSample}\n            update={update9}\n            deleting={delete9}\n            changed={changed}\n            setAccept={setAccept9}\n            setChanged={setChanged}\n          />\n        );\n      default:\n        return \"Unknown step\";\n    }\n  }\n\n  const resetStepState = () => {\n    setAccept(false);\n    setAccept1(false);\n    setAccept2(false);\n    setAccept3(false);\n    setCreateCase(false);\n    setChanged(false);\n    setUpdate(false);\n    setUpdate1(false);\n    setUpdate2(false);\n    setUpdate3(false);\n    setUpdate4(false);\n    setAccept4(false);\n    setUpdate5(false);\n    setAccept5(false);\n    setUpdate6(false);\n    setAccept6(false);\n    setUpdate7(false);\n    setAccept7(false);\n    setUpdate8(false);\n    setAccept8(false);\n    setUpdate9(false);\n    setAccept9(false);\n    setDelete9(false);\n    setCreateAAb(false);\n    setCreateHLA(false);\n    setCreateRNA(false);\n    setCreateSample(false);\n  };\n\n  const totalSteps = () => {\n    return steps.length;\n  };\n\n  const completedSteps = () => {\n    return Object.keys(completed).length;\n  };\n\n  const isLastStep = () => {\n    return activeStep === totalSteps() - 1;\n  };\n\n  const allStepsCompleted = () => {\n    return completedSteps() === totalSteps();\n  };\n\n  const handleNext = () => {\n    if (activeStep === 0) {\n      if (accept) {\n        setActiveStep((prevActiveStep) => prevActiveStep + 1);\n        setCreateCase(false);\n        setAccept(false);\n        setUpdate1(false);\n        setAccept1(false);\n        setUpdate2(false);\n        setAccept2(false);\n        setUpdate3(false);\n        setAccept3(false);\n        setUpdate4(false);\n        setAccept4(false);\n        setUpdate5(false);\n        setAccept5(false);\n        setUpdate6(false);\n        setAccept6(false);\n        setUpdate7(false);\n        setAccept7(false);\n        setUpdate8(false);\n        setAccept8(false);\n        setUpdate9(false);\n        setAccept9(false);\n        setDelete9(false);\n        setCreateAAb(false);\n        setCreateHLA(false);\n        setCreateRNA(false);\n        setCreateSample(false);\n        setChanged(false);\n      }\n    } else {\n      setActiveStep((prevActiveStep) => prevActiveStep + 1);\n      setUpdate1(false);\n      setAccept1(false);\n      setUpdate2(false);\n      setAccept2(false);\n      setUpdate3(false);\n      setAccept3(false);\n      setUpdate4(false);\n      setAccept4(false);\n      setUpdate5(false);\n      setAccept5(false);\n      setUpdate6(false);\n      setAccept6(false);\n      setUpdate7(false);\n      setAccept7(false);\n      setUpdate8(false);\n      setAccept8(false);\n      setUpdate9(false);\n      setAccept9(false);\n      setDelete9(false);\n      setCreateAAb(false);\n      setCreateHLA(false);\n      setCreateRNA(false);\n      setCreateSample(false);\n      setChanged(false);\n    }\n  };\n\n  const handleCreateCase = () => {\n    setCreateCase(true);\n    setChanged(false);\n  };\n\n  const handleCreateAAb = () => {\n    setCreateAAb(true);\n    setChanged(false);\n  };\n\n  const handleCreateHLA = () => {\n    setCreateHLA(true);\n    setChanged(false);\n  };\n\n  const handleCreateRNA = () => {\n    setCreateRNA(true);\n    setChanged(false);\n  };\n\n  const handleCreateSample = () => {\n    setCreateSample(true);\n    setChanged(false);\n  };\n\n  const handleDeleteSample = () => {\n    setDelete9(true);\n    setChanged(false);\n  };\n\n  const handleUpdate = () => {\n    if (activeStep === 0) {\n      setUpdate(true);\n      if (caseExist) {\n        setActiveStep((prevActiveStep) => prevActiveStep + 1);\n        setCreateCase(false);\n        setAccept(false);\n        setUpdate1(false);\n        setAccept1(false);\n        setUpdate2(false);\n        setAccept2(false);\n        setUpdate3(false);\n        setAccept3(false);\n        setUpdate4(false);\n        setAccept4(false);\n        setUpdate5(false);\n        setAccept5(false);\n        setUpdate6(false);\n        setAccept6(false);\n        setUpdate7(false);\n        setAccept7(false);\n        setUpdate8(false);\n        setAccept8(false);\n        setUpdate9(false);\n        setAccept9(false);\n        setDelete9(false);\n        setCreateAAb(false);\n        setCreateHLA(false);\n        setCreateRNA(false);\n        setCreateSample(false);\n        setChanged(false);\n      }\n    } else if (activeStep === 1) {\n      setUpdate1(true);\n    } else if (activeStep === 2) {\n      setUpdate2(true);\n    } else if (activeStep === 3) {\n      setUpdate3(true);\n    } else if (activeStep === 4) {\n      setUpdate4(true);\n    } else if (activeStep === 5) {\n      setUpdate5(true);\n    } else if (activeStep === 6) {\n      setUpdate6(true);\n    } else if (activeStep === 7) {\n      setUpdate7(true);\n    } else if (activeStep === 8) {\n      setUpdate8(true);\n    } else if (activeStep === 9) {\n      setUpdate9(true);\n    }\n\n    setChanged(false);\n  };\n\n  const handleBack = () => {\n    setCreateCase(false);\n    setAccept(false);\n    setUpdate1(false);\n    setAccept1(false);\n    setUpdate2(false);\n    setAccept2(false);\n    setUpdate3(false);\n    setAccept3(false);\n    setUpdate4(false);\n    setAccept4(false);\n    setUpdate5(false);\n    setAccept5(false);\n    setUpdate6(false);\n    setAccept6(false);\n    setUpdate7(false);\n    setAccept7(false);\n    setUpdate8(false);\n    setAccept8(false);\n    setAccept9(false);\n    setDelete9(false);\n    setCreateAAb(false);\n    setCreateHLA(false);\n    setCreateRNA(false);\n    setCreateSample(false);\n    setChanged(false);\n    if (activeStep - 1 === 0) {\n      setUpdate(false);\n    }\n    setActiveStep((prevActiveStep) => prevActiveStep - 1);\n  };\n\n  const handleStep = (step) => () => {\n    if (activeStep !== 0) {\n      setCreateCase(false);\n\n      setAccept(false);\n      setUpdate1(false);\n      setAccept1(false);\n      setUpdate2(false);\n      setAccept2(false);\n      setUpdate3(false);\n      setAccept3(false);\n      setUpdate4(false);\n      setAccept4(false);\n      setUpdate5(false);\n      setAccept5(false);\n      setUpdate6(false);\n      setAccept6(false);\n      setUpdate7(false);\n      setAccept7(false);\n      setUpdate8(false);\n      setAccept8(false);\n      setAccept9(false);\n      setDelete9(false);\n      setCreateAAb(false);\n      setCreateHLA(false);\n      setCreateRNA(false);\n      setCreateSample(false);\n      setActiveStep(step);\n      setChanged(false);\n    }\n    if (step === 0) {\n      setUpdate(false);\n    }\n  };\n\n  const handleComplete = () => {\n    const newCompleted = completed;\n    newCompleted[activeStep] = true;\n    setCompleted(newCompleted);\n    handleNext();\n  };\n\n  const handleReset1 = () => {\n    setActiveStep(0);\n  };\n\n  const handleReset = () => {\n    setActiveStep(0);\n    setCompleted({});\n  };\n\n  return (\n    <div>\n      <Stepper\n        nonLinear\n        activeStep={activeStep}\n        orientation=\"vertical\"\n        className={classes.stepper}\n      >\n        {steps.map((label, index) => (\n          <Step key={label}>\n            <StepLabel\n              icon={index == 0 ? \"0\" : index}\n              onClick={handleStep(index)}\n              completed={completed[index]}\n              className={classes.stepLabel}\n            >\n              {label}\n            </StepLabel>\n            <StepContent>\n              {getStepContent(index)}\n              <div className={classes.actionsContainer}>\n                <div>\n                  {activeStep !== 0 ? (\n                    <Button\n                      disabled={activeStep === 0}\n                      onClick={handleBack}\n                      className={classes.button}\n                      variant=\"contained\"\n                      color=\"primary\"\n                    >\n                      Back\n                    </Button>\n                  ) : null}\n                  {activeStep !== 0 ? (\n                    <Button\n                      disabled={update === false}\n                      variant=\"contained\"\n                      color=\"primary\"\n                      onClick={handleNext}\n                      className={classes.button}\n                    >\n                      {activeStep === steps.length - 1 ? \"Finish\" : \"Next\"}\n                    </Button>\n                  ) : null}\n                  {/* Case Create */}\n                  {activeStep === 0 ? (\n                    <Button\n                      disabled={caseExist === true || caseId === \"\"}\n                      onClick={handleCreateCase}\n                      className={classes.button}\n                      variant=\"contained\"\n                      color=\"secondary\"\n                    >\n                      Create\n                    </Button>\n                  ) : null}\n                  {/* AAb Create */}\n                  {activeStep === 6 ? (\n                    <Button\n                      disabled={caseId === \"\"}\n                      onClick={handleCreateAAb}\n                      className={classes.button}\n                      variant=\"contained\"\n                      color=\"secondary\"\n                    >\n                      Create\n                    </Button>\n                  ) : null}\n                  {/* HLA Create */}\n                  {activeStep === 7 ? (\n                    <Button\n                      disabled={HLAExist === true || caseId === \"\"}\n                      onClick={handleCreateHLA}\n                      className={classes.button}\n                      variant=\"contained\"\n                      color=\"secondary\"\n                    >\n                      Create\n                    </Button>\n                  ) : null}\n                  {/* RNA Create */}\n                  {activeStep === 8 ? (\n                    <Button\n                      disabled={caseId === \"\"}\n                      onClick={handleCreateRNA}\n                      className={classes.button}\n                      variant=\"contained\"\n                      color=\"secondary\"\n                    >\n                      Create\n                    </Button>\n                  ) : null}\n                  {/* Sample Create */}\n                  {activeStep === 9 ? (\n                    <Button\n                      disabled={caseId === \"\"}\n                      onClick={handleCreateSample}\n                      className={classes.button}\n                      variant=\"contained\"\n                      color=\"secondary\"\n                    >\n                      Create\n                    </Button>\n                  ) : null}\n\n                  <Button\n                    disabled={\n                      (caseExist === false && activeStep === 0) ||\n                      (AAbExist === false && activeStep === 6) ||\n                      (HLAExist === false && activeStep === 7) ||\n                      (RNAExist === false && activeStep === 8) ||\n                      (sampleExist === false && activeStep === 9) ||\n                      caseId === \"\"\n                    }\n                    onClick={handleUpdate}\n                    className={classes.button}\n                    variant=\"contained\"\n                    color=\"secondary\"\n                  >\n                    Update\n                  </Button>\n                  <Button\n                    disabled={sampleExist !== true || activeStep !== 9}\n                    onClick={handleDeleteSample}\n                    className={classes.button}\n                    variant=\"contained\"\n                    color=\"secondary\"\n                  >\n                    Delete\n                  </Button>\n                </div>\n              </div>\n            </StepContent>\n          </Step>\n        ))}\n      </Stepper>\n      {activeStep === steps.length && (\n        <Paper square elevation={0} className={classes.resetContainer}>\n          <Typography>All steps completed - you&apos;re finished</Typography>\n          <Button onClick={handleReset} className={classes.button}>\n            Reset\n          </Button>\n        </Paper>\n      )}\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Storage } from \"aws-amplify\";\n\nexport default function useSaveChange(\n  filesToAdd,\n  filesToRemove,\n  removeFolder,\n  setRemoveFolder,\n  caseId,\n  selectedFolder,\n  saveButtonClicked,\n  setUploadProgress,\n  setCurrUploadFile,\n  setUpdateError,\n  setUpdateSuccess,\n  handleReset\n) {\n  useEffect(() => {\n    if (filesToAdd !== null && filesToAdd.length !== 0) {\n      addFiles(filesToAdd, caseId, selectedFolder);\n    }\n    if (filesToRemove !== null && filesToRemove.length !== 0) {\n      removeFiles(filesToRemove);\n    }\n    if (selectedFolder !== null && removeFolder === true) {\n      console.log(\"folder is going be removed.\");\n      removeWholeFolder(selectedFolder, caseId);\n    }\n    handleReset();\n  }, [saveButtonClicked]);\n\n  async function addFiles(fileList, case_id, folder) {\n    const nowTime = new Date().toLocaleString().replace(\",\", \"\");\n    for (const file of fileList) {\n      try {\n        setCurrUploadFile(file.name);\n        const filePath = \"public/cases/\" + case_id + \"/\" + folder + \"/\";\n        await Storage.put(file.name, file, {\n          level: \"public\",\n          contentType: \"image/*\",\n          customPrefix: {\n            public: filePath,\n          },\n          progressCallback: (progress) => {\n            console.log(`Uploaded: ${progress.loaded}/${progress.total}`);\n            setUploadProgress((progress.loaded / progress.total) * 100);\n          },\n          completeCallback: (event) => {\n            console.log(`Successfully uploaded ${event.key}`);\n            setUploadProgress(0);\n          },\n        }).then((result) => {\n          console.log(\"Upload file result: \", result);\n          setCurrUploadFile(null);\n          setUploadProgress(0);\n        });\n      } catch (error) {\n        console.log(\"Error uploading file: \", error);\n        setUpdateError(\n          `S3 Upload File \"${file.name}\" Finish time: \" + ${nowTime}, Error: `,\n          error\n        );\n      }\n      setUpdateSuccess(\"All uploadings are done! Finish time: \" + nowTime);\n    }\n  }\n\n  async function removeFiles(filesList) {\n    const nowTime = new Date().toLocaleString().replace(\",\", \"\");\n    for (const file of filesList) {\n      try {\n        await Storage.remove(file).then((result) => {\n          console.log(\"Successfully removed file \" + file);\n          setUpdateSuccess(\"All removings are done! Finish time: \" + nowTime);\n        });\n      } catch (error) {\n        console.log(\"Error removing file: \", error);\n        setUpdateError(\n          `S3 Remove File \"${file}\" Finish time: \" + ${nowTime}, Error: `,\n          error\n        );\n      }\n    }\n  }\n\n  async function removeWholeFolder(selectedFolder, case_id) {\n    const folderPath = \"cases/\" + case_id + \"/\" + selectedFolder;\n    const nowTime = new Date().toLocaleString().replace(\",\", \"\");\n    try {\n      await Storage.list(folderPath).then((response) =>\n        response.forEach((file) => {\n          console.log(`File ${file.key} is going to be removed`, file);\n          Storage.remove(file.key).then((res) => {\n            console.log(`File ${file.key} is removed successfully`);\n          });\n        })\n      );\n      setUpdateSuccess(\n        `Case ${case_id} folder ${selectedFolder} and all files in it are removed successfully`\n      );\n    } catch (error) {\n      console.log(\n        `Error happened in removing Case ${case_id} folder ${selectedFolder}`,\n        error\n      );\n      setUpdateError(\n        `Error happened in removing Case ${case_id} folder ${selectedFolder}`,\n        error\n      );\n    }\n    setRemoveFolder(false);\n  }\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Storage, API } from \"aws-amplify\";\n\nexport default function useGetAllExistingCaseIds(\n  setAllCaseIds,\n  resetButtongClicked\n) {\n  useEffect(() => {\n    //getCaseListFromStorage();\n    getCaseListFromDb();\n  }, [resetButtongClicked]);\n  async function getCaseListFromStorage() {\n    try {\n      await Storage.list(\"cases/\").then((allFiles) => {\n        if (allFiles.length !== 0) {\n          let folders = new Set();\n          allFiles.forEach((file) => {\n            let caseFolderName = file.key.split(\"/\").slice(1, 2).join();\n            if (caseFolderName.length !== 0) {\n              folders.add(caseFolderName);\n            }\n          });\n          setAllCaseIds(\n            Array.from(folders).map((f) => {\n              return { caseId: f };\n            })\n          );\n        }\n      });\n    } catch (error) {\n      console.error(\"[S3]Get case list error\", error);\n    }\n  }\n\n  async function getCaseListFromDb() {\n    const nowTime = new Date().toLocaleString().replace(\",\", \"\");\n    console.log(\"Retrieving cases by case id list...\");\n    return await API.get(\"dbapi\", \"/db/all_case_ids\")\n      .then((res) => {\n        console.log(\"Retrieve case id list in image upload success!\", res);\n        const convertFunc = (item) => ({ caseId: item.case_id });\n        const caseIdListTemp = res.map(convertFunc);\n        setAllCaseIds(caseIdListTemp);\n      })\n      .catch((error) => {\n        console.log(\"Get case id list in image upload  fail\", error);\n      });\n  }\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Storage } from \"aws-amplify\";\n\nexport default function useGetAllFolders(caseId, setCurrCaseFolders) {\n  useEffect(() => {\n    getFolderList(caseId);\n  }, [caseId]);\n\n  async function getFolderList(caseId) {\n    try {\n      await Storage.list(\"cases/\" + caseId).then((allFiles) => {\n        if (allFiles.length !== 0) {\n          let caseFolder = new Set();\n          allFiles.forEach((file) => {\n            let caseFolderName = file.key.split(\"/\").slice(2, 3).join();\n            if (caseFolderName.length !== 0) {\n              caseFolder.add(caseFolderName);\n            }\n          });\n          setCurrCaseFolders(\n            Array.from(caseFolder).map((f) => {\n              return { folderName: f };\n            })\n          );\n        }\n      });\n    } catch (error) {\n      console.error(\"[S3] Get case folder error\", error);\n    }\n  }\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Typography, Paper, Box, Button, TextField } from \"@material-ui/core\";\nimport { Storage } from \"aws-amplify\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport { Autocomplete } from \"@material-ui/lab\";\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport Fade from \"@material-ui/core/Fade\";\nimport Radio from \"@material-ui/core/Radio\";\nimport RadioGroup from \"@material-ui/core/RadioGroup\";\nimport FormGroup from \"@material-ui/core/FormGroup\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormLabel from \"@material-ui/core/FormLabel\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport AlertDialog from \"../../../../../../AlertDialog\";\nimport useSaveChange from \"./component/useSaveChange\";\nimport useGetAllExistingCaseIds from \"./component/useGetAllExistingCaseIds\";\nimport useGetAllFolders from \"./component/useGetAllFolders\";\nimport { CheckBox } from \"@material-ui/icons\";\n\nconst useStyles = makeStyles((theme) => ({\n  folderOption: {\n    marginLeft: \"50px\",\n  },\n  folderOptionRadio: {\n    marginTop: \"15px\",\n  },\n  removeCheckBoxGroup: {\n    marginTop: \"30px\",\n  },\n  removeCheckbox: {\n    marginLeft: \"20px\",\n    marginRight: \"5px\",\n  },\n  ablumBase: {\n    marginTop: \"50px\",\n    width: \"1000px\",\n    minHeight: \"600px\",\n  },\n  ablumBox: {\n    margin: \"20px\",\n    display: \"flex\",\n    flexWrap: \"wrap\",\n  },\n  ablumImageBox: {\n    position: \"relative\",\n    margin: \"5px\",\n    width: \"150px\",\n    height: \"200px\",\n    border: \"1px solid grey\",\n    display: \"flex\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n  },\n  ablumAddBox: {\n    position: \"relative\",\n    margin: \"5px\",\n    width: \"150px\",\n    height: \"200px\",\n    border: \"1px solid grey\",\n    display: \"flex\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    \"&:hover\": {\n      cursor: \"pointer\",\n    },\n  },\n  ablumImagePaper: {\n    margin: \"5px\",\n    width: \"150px\",\n    display: \"flex\",\n  },\n  ablumImage: {\n    width: \"150px\",\n    maxHeight: \"200px\",\n  },\n  ablumRemoveButton: {\n    position: \"absolute\",\n    top: \"2%\",\n    left: \"90%\",\n    fontSize: \"small\",\n    \"&:hover\": {\n      cursor: \"pointer\",\n    },\n  },\n  ablumRemoveMark: {\n    position: \"absolute\",\n    fontWeight: \"600\",\n    color: \"#fff\",\n    textShadow: \"0 0 20px black\",\n  },\n  progressBar: {\n    width: \"1000px\",\n  },\n  saveButton: {\n    marginTop: \"50px\",\n    width: \"100px\",\n  },\n  resetButton: {\n    marginTop: \"50px\",\n    marginLeft: \"10px\",\n    width: \"100px\",\n  },\n  alert: {\n    marginTop: \"5px\",\n    marginBottom: \"5px\",\n    width: \"1000px\",\n  },\n}));\n\nexport default function UploadImageFile() {\n  const classes = useStyles();\n  const [filesToUpload, setFilesToUpload] = useState([]);\n  const [filesToRemove, setFilesToRemove] = useState([]);\n  const [removeFolder, setRemoveFolder] = useState(false); // whether to remove the selected folder\n  const [saveButtonClicked, setSaveButtonClicked] = useState(0);\n  const [resetButtongClicked, setResetButtonClicked] = useState(0);\n  const [currUploadFile, setCurrUploadFile] = useState(null); // this variable is used to display current uploading one, be set in \"SAVE\" action\n  const [uploadProgress, setUploadProgress] = useState(0);\n  const [updateError, setUpdateError] = useState(null);\n  const [updateSuccess, setUpdateSuccess] = useState(null);\n  const [allCaseIds, setAllCaseIds] = useState([]);\n  const [currCaseFolders, setCurrCaseFolders] = useState([]);\n  const [selectedCaseId, setSelectedCaseId] = useState(null);\n  const [selectedFolder, setSelectedFolder] = useState(null);\n  const [folderSelectMode, setFolderSelectMode] = useState(\"existing\");\n  const [disableSaveButton, setDiaableSaveButton] = useState(false);\n  const [openAlert, setOpenAlert] = useState(false);\n  const [alertTitle, setAlertTitle] = useState(\"Remove Alert\");\n  const [alertContent, setAlertCotent] = useState(\n    \"This action will remove the entire folder and all files in it. Are you sure?\"\n  );\n\n  // get all existing case IDs\n\n  useGetAllExistingCaseIds(setAllCaseIds, resetButtongClicked);\n  console.log(\"all cases list\", allCaseIds);\n\n  // getCaseList();\n  useGetAllFolders(selectedCaseId, setCurrCaseFolders);\n  console.log(\n    `Selected case is case ${selectedCaseId} and selected folder is ${selectedFolder}`\n  );\n\n  // get one case one folder all images\n  const [imageFileList, setImageFileList] = useState([]);\n  const [remoteImageFiles, setRemoteImageFiles] = useState([]);\n\n  async function getOneCaseOneFolderAllImages(caseId, folderName) {\n    try {\n      const path = \"cases/\" + caseId + \"/\" + folderName;\n      const path2 = \"testing/\";\n      await Storage.list(path).then((fileList) => {\n        console.log(\"testing folder file list\", fileList);\n        if (fileList) {\n          fileList.forEach((file) => {\n            if (file.key.match(/\\.[0-9a-z]+$/i)) {\n              getOneCaseOneFolderOneImage(file.key);\n            }\n          });\n        }\n      });\n    } catch (error) {\n      console.error(\"[S3] Get one case one folder images error.\", error);\n    }\n  }\n\n  async function getOneCaseOneFolderOneImage(fileKey) {\n    try {\n      await Storage.get(fileKey, { expires: 60 }).then((url) => {\n        setRemoteImageFiles((images) => [...images, [fileKey, url]]);\n      });\n    } catch (error) {\n      console.error(\"[S3] Get one case one folder one image error\", error);\n    }\n  }\n\n  useEffect(() => {\n    if (\n      selectedCaseId !== null &&\n      selectedFolder !== null &&\n      folderSelectMode === \"existing\"\n    ) {\n      setRemoteImageFiles([]);\n      setFilesToUpload([]);\n      setFilesToRemove([]);\n      getOneCaseOneFolderAllImages(selectedCaseId, selectedFolder);\n      setRemoveFolder(false);\n    }\n    if (folderSelectMode === \"new\") {\n      setRemoteImageFiles([]);\n      setFilesToUpload([]);\n      setFilesToRemove([]);\n      setCurrUploadFile(null);\n      setUploadProgress(0);\n      setUpdateError(null);\n      setUpdateSuccess(null);\n      setRemoveFolder(false);\n    }\n  }, [\n    selectedCaseId,\n    selectedFolder,\n    updateError,\n    updateSuccess,\n    folderSelectMode,\n  ]);\n\n  // select a specific case\n  const handleSelectCase = (value) => {\n    setRemoteImageFiles([]);\n    setCurrCaseFolders([]);\n    if (value !== null) {\n      setSelectedCaseId(value.caseId);\n    } else {\n      setSelectedCaseId(null);\n      setSelectedFolder(null);\n    }\n  };\n\n  // select a specific folder\n  const handleSelectFolder = (value) => {\n    setRemoteImageFiles([]);\n    setFilesToUpload([]);\n    setFilesToRemove([]);\n    if (value !== null) {\n      setSelectedFolder(value.folderName);\n    } else {\n      setSelectedFolder(null);\n    }\n  };\n\n  // select a specific folder to remove\n  const handleSelectFolderToRemove = (event) => {\n    setRemoveFolder(event.target.checked);\n    setOpenAlert(event.target.checked);\n  };\n\n  const handleCancelFolderToRemove = () => {\n    setRemoveFolder(false);\n    setOpenAlert(false);\n  };\n\n  // select files to upload\n  const handleSelectFiles = (event) => {\n    setFilesToUpload((files) => [...files, ...event.target.files]);\n  };\n  console.log(\"selected files to upload\", filesToUpload);\n\n  // deselect files to upload\n  const handleDeslectFiles = (event, deselectedFileName) => {\n    setFilesToUpload(\n      filesToUpload.filter((item) => item.name !== deselectedFileName)\n    );\n  };\n\n  // upload new files or remove remote existing files\n  const handleSaveButtonClick = (event) => {\n    setSaveButtonClicked((click) => click + 1);\n  };\n\n  // remove remote existing files\n  const handleRemove = (event, imageIndex) => {\n    const fileKey = remoteImageFiles[imageIndex][0];\n    if (filesToRemove.includes(fileKey)) {\n      setFilesToRemove(filesToRemove.filter((item) => item !== fileKey));\n    } else {\n      setFilesToRemove((files) => [...files, fileKey]);\n    }\n  };\n  console.log(\"files to remove\", filesToRemove);\n  console.log(\"foler to remove or not\", removeFolder);\n\n  // handle folder select mode change\n  const handleFolderSelectMode = (event) => {\n    setFolderSelectMode(event.target.value);\n    setSelectedFolder(null);\n  };\n\n  const handleNewFolder = (event) => {\n    setSelectedFolder(event.target.value);\n  };\n\n  const handleReset = (event) => {\n    setFilesToUpload([]);\n    setFilesToRemove([]);\n    setCurrUploadFile(null);\n    setUploadProgress(0);\n    setUpdateError(null);\n    setUpdateSuccess(null);\n    setAllCaseIds([]);\n    setCurrCaseFolders([]);\n    setSelectedCaseId(null);\n    setSelectedFolder(null);\n    setFolderSelectMode(\"existing\");\n    setRemoteImageFiles([]);\n    setResetButtonClicked((click) => click + 1);\n    setRemoveFolder(false);\n    setDiaableSaveButton(false);\n  };\n\n  // set timers for \"Save\" action alerts\n  useEffect(() => {\n    if (updateError !== null || updateSuccess !== null) {\n      const timer = setTimeout(() => {\n        setUpdateError(null);\n        setUpdateSuccess(null);\n      }, 5000);\n    }\n  }, [updateError, updateSuccess]);\n\n  useSaveChange(\n    filesToUpload,\n    filesToRemove,\n    removeFolder,\n    setRemoveFolder,\n    selectedCaseId,\n    selectedFolder,\n    saveButtonClicked,\n    setUploadProgress,\n    setCurrUploadFile,\n    setUpdateError,\n    setUpdateSuccess,\n    handleReset\n  );\n\n  return (\n    <div>\n      <AlertDialog\n        title={alertTitle}\n        contentText={alertContent}\n        open={openAlert}\n        setOpen={setOpenAlert}\n        btn1Name=\"Yes\"\n        btn2Name=\"No\"\n        callBack={handleCancelFolderToRemove}\n      />\n      <Box style={{ display: \"flex\", flexDirection: \"row\" }}>\n        <Autocomplete\n          options={allCaseIds}\n          getOptionLabel={(option) => option.caseId}\n          style={{ width: 300, marginTop: \"20px\" }}\n          key={resetButtongClicked}\n          renderInput={(params) => (\n            <TextField {...params} label=\"Choose Case\" variant=\"outlined\" />\n          )}\n          onChange={(event, value) => handleSelectCase(value)}\n        />\n        <FormControl component=\"fieldset\" className={classes.folderOption}>\n          <RadioGroup\n            value={folderSelectMode}\n            onChange={handleFolderSelectMode}\n          >\n            <FormControlLabel\n              value=\"existing\"\n              control={<Radio />}\n              className={classes.folderOptionRadio}\n              label={\n                <Autocomplete\n                  options={currCaseFolders}\n                  getOptionLabel={(option) => option.folderName}\n                  style={{\n                    width: 300,\n                    marginTop: \"5px\",\n                    marginLeft: \"20px\",\n                  }}\n                  key={selectedCaseId} // clear selected case ID will trigger re-render this component\n                  disabled={folderSelectMode !== \"existing\"}\n                  renderInput={(params) => (\n                    <TextField\n                      {...params}\n                      label=\"Choose Folder to Edit\"\n                      variant=\"outlined\"\n                    />\n                  )}\n                  onChange={(event, value) => handleSelectFolder(value)}\n                />\n              }\n            />\n            <FormControlLabel\n              value=\"new\"\n              control={<Radio />}\n              className={classes.folderOptionRadio}\n              label={\n                <TextField\n                  label=\"Create New Folder\"\n                  variant=\"outlined\"\n                  key={selectedCaseId} // clear selected case ID will trigger re-render this component\n                  style={{ marginLeft: \"20px\", width: 300 }}\n                  disabled={\n                    folderSelectMode !== \"new\" || selectedCaseId === null\n                  }\n                  onChange={handleNewFolder}\n                />\n              }\n            />\n          </RadioGroup>\n        </FormControl>\n        <FormControl\n          className={classes.removeCheckBoxGroup}\n          component=\"fieldset\"\n        >\n          <FormControlLabel\n            control={\n              <Checkbox\n                className={classes.removeCheckbox}\n                color=\"primary\"\n                name=\"removeFolder\"\n                key={selectedFolder}\n                checked={removeFolder}\n                disabled={\n                  folderSelectMode !== \"existing\" || selectedFolder === null\n                }\n                onChange={handleSelectFolderToRemove}\n              />\n            }\n            label=\"Remove whole FOLDER and FILES\"\n          />\n          <p style={{ color: \"red\", marginLeft: \"60px\" }}>\n            (Be Careful with this option)\n          </p>\n        </FormControl>\n      </Box>\n\n      <Paper variant=\"outlined\" className={classes.ablumBase}>\n        <Typography variant=\"h6\" style={{ padding: \"10px\" }}>\n          File Browser\n        </Typography>\n        <Typography variant=\"subtitle1\" style={{ padding: \"10px\" }}>\n          Note: Only *.JPG and *.PNG file can be uploaded. After click \"SAVE\"\n          button, please wait bottom notification disappeared before next file\n          change.\n        </Typography>\n        <Box className={classes.ablumBox} key={selectedCaseId}>\n          {/* imageInfo: [fileKey, url] */}\n          {remoteImageFiles.map((imageInfo, imageIndex) => (\n            <Box key={imageIndex} className={classes.ablumImageBox}>\n              <img src={imageInfo[1]} className={classes.ablumImage}></img>\n              <CloseIcon\n                className={classes.ablumRemoveButton}\n                onClick={(e) => handleRemove(e, imageIndex)}\n              />\n              {filesToRemove.includes(imageInfo[0]) ? (\n                <Typography variant=\"h5\" className={classes.ablumRemoveMark}>\n                  REMOVE\n                </Typography>\n              ) : null}\n            </Box>\n          ))}\n          {filesToUpload.map((file, fileIndex) => (\n            <Box key={fileIndex} className={classes.ablumImageBox}>\n              <img\n                src={window.URL.createObjectURL(file)}\n                className={classes.ablumImage}\n              />\n              <CloseIcon\n                className={classes.ablumRemoveButton}\n                onClick={(e) => handleDeslectFiles(e, file.name)}\n              />\n            </Box>\n          ))}\n          <Box className={classes.ablumAddBox} component=\"label\">\n            <AddIcon fontSize=\"large\" />\n            <input\n              hidden\n              accept=\"image/*\"\n              multiple\n              type=\"file\"\n              onChange={handleSelectFiles}\n            />\n          </Box>\n        </Box>\n      </Paper>\n      {currUploadFile !== null ? <h3>Upload {currUploadFile}</h3> : null}\n      {uploadProgress !== 0 ? (\n        <LinearProgress\n          variant=\"determinate\"\n          value={uploadProgress}\n          className={classes.progressBar}\n        />\n      ) : null}\n\n      <Button\n        variant=\"contained\"\n        color=\"primary\"\n        className={classes.saveButton}\n        onClick={handleSaveButtonClick}\n        disabled={disableSaveButton}\n      >\n        Save\n      </Button>\n      <Button\n        variant=\"contained\"\n        color=\"secondary\"\n        className={classes.resetButton}\n        onClick={handleReset}\n      >\n        RESET\n      </Button>\n      <Fade in={updateError !== null}>\n        <Alert variant=\"filled\" severity=\"error\" className={classes.alert}>\n          {updateError}\n        </Alert>\n      </Fade>\n      <Fade in={updateSuccess !== null}>\n        <Alert variant=\"filled\" severity=\"success\" className={classes.alert}>\n          {updateSuccess}\n        </Alert>\n      </Fade>\n    </div>\n  );\n}\n","import React from \"react\";\nimport { Typography } from \"@material-ui/core\";\nimport UploadImageFile from \"./component/UploadImageFile\";\n\nexport default function UploadImage() {\n  return (\n    <div>\n      <Typography variant=\"h4\">Select File and Upload</Typography>\n      <UploadImageFile />\n    </div>\n  );\n}\n","import React, { useEffect } from \"react\";\nimport { API } from \"aws-amplify\";\n\nexport default function useRetrieveTableHeaders(tableName, callback) {\n  useEffect(() => {\n    getTableHeaders(tableName);\n  }, []);\n\n  async function getTableHeaders(theTableName) {\n    const nowTime = new Date().toLocaleString().replace(\",\", \"\");\n    console.log(`Retrieving table headers of ${theTableName} table...`);\n    return await API.get(\"dbapi\", \"/db/table_headers_by_table_name\", {\n      queryStringParameters: {\n        table_name: theTableName,\n      },\n    })\n      .then((res) => {\n        console.log(`Retrieve table headers of ${theTableName} success!`, res);\n        callback(theTableName, res);\n      })\n      .catch((error) => {\n        console.log(`Retrieve table headers of ${theTableName} fail`, error);\n      });\n  }\n}\n","import React, { useEffect } from \"react\";\nimport { API } from \"aws-amplify\";\n\nexport default function useRetrieveExisitingPrimaryKeyValues(\n  tableName,\n  callback\n) {\n  useEffect(() => {\n    getPrimaryKeyValues(tableName);\n  }, []);\n\n  async function getPrimaryKeyValues(theTableName) {\n    const nowTime = new Date().toLocaleString().replace(\",\", \"\");\n    console.log(\n      `Retrieving existing primary key values of ${theTableName} table...`\n    );\n    return await API.get(\"dbapi\", \"/db/primary_key_values_by_table_name\", {\n      queryStringParameters: {\n        table_name: theTableName,\n      },\n    })\n      .then((res) => {\n        console.log(\n          `Retrieve primary key values of ${theTableName} success!`,\n          res\n        );\n        const result = res.reduce((temp, current) => {\n          temp.push(current[Object.keys(current)[0]]);\n          return temp;\n        }, []);\n        callback(theTableName, result);\n      })\n      .catch((error) => {\n        console.log(\n          `Retrieve primary key values of ${theTableName} fail`,\n          error\n        );\n      });\n  }\n}\n","import React, { useEffect } from \"react\";\nimport { API } from \"aws-amplify\";\n\nexport default function useDataUpload(\n  checkRes,\n  uploadClicked,\n  dataToCreate,\n  dataToUpdate,\n  tableName,\n  setUploadSuccess,\n  setUploadFail\n) {\n  useEffect(() => {\n    if (dataToCreate.length !== 0 && checkRes) {\n      createData(dataToCreate);\n    }\n\n    if (dataToUpdate.length !== 0 && checkRes) {\n      updateData(dataToUpdate);\n    }\n  }, [uploadClicked]);\n\n  async function createData(theData) {\n    const nowTime = new Date().toLocaleString().replace(\",\", \"\");\n\n    console.log(\"the data to create is passed to API\", dataFilter(theData));\n\n    return await API.post(\"dbapi\", \"/db/create_new_rows_into_table\", {\n      body: {\n        table_name: tableName + \"_temp\",\n        matrix: dataFilter(theData),\n      },\n    })\n      .then((res) => {\n        console.log(\n          `New rows are successfully inserted in table ${tableName}`,\n          res\n        );\n        setUploadSuccess((prevValues) => {\n          return {\n            ...prevValues,\n            [tableName]: `New rows are created in table ${tableName} successfully!`,\n          };\n        });\n        setUploadFail((prevValues) => {\n          return { ...prevValues, [tableName]: null };\n        });\n      })\n      .catch((error) => {\n        console.log(`New row inserted fail in table ${tableName}`, error);\n        setUploadSuccess((prevValues) => {\n          return { ...prevValues, [tableName]: null };\n        });\n        setUploadFail((prevValues) => {\n          return {\n            ...prevValues,\n            [tableName]: `New rows creating in table ${tableName} failed!`,\n          };\n        });\n      });\n  }\n\n  async function updateData(theData) {\n    const nowTime = new Date().toLocaleString().replace(\",\", \"\");\n\n    console.log(\"the data to update is passed to API\", dataFilter(theData));\n\n    return await API.put(\"dbapi\", \"/db/batch_update_table\", {\n      body: {\n        table_name: tableName + \"_temp\",\n        matrix: dataFilter(theData),\n      },\n    })\n      .then((res) => {\n        console.log(`Rows are successfully updated in table ${tableName}`, res);\n        setUploadSuccess((prevValues) => {\n          return {\n            ...prevValues,\n            [tableName]: `Rows are updated in table ${tableName} successfully!`,\n          };\n        });\n        setUploadFail((prevValues) => {\n          return { ...prevValues, [tableName]: null };\n        });\n      })\n      .catch((error) => {\n        console.log(`Rows update fail in table ${tableName}`, error);\n        setUploadSuccess((prevValues) => {\n          return { ...prevValues, [tableName]: null };\n        });\n        setUploadFail((prevValues) => {\n          return {\n            ...prevValues,\n            [tableName]: `Rows update fail in table ${tableName} failed!`,\n          };\n        });\n      });\n  }\n\n  // fitlering out all entries with \"undefined\" or \"null\" value\n  function dataFilter(theData) {\n    return theData.map((row) => {\n      let newRow = {};\n      for (const key in row) {\n        if (row[key] !== undefined && row[key] !== null) {\n          newRow[key] = row[key];\n        }\n      }\n      return newRow;\n    });\n  }\n}\n","import React, { useEffect } from \"react\";\nimport { API } from \"aws-amplify\";\n\nexport default function useCreateTempCloneTable(\n  createClicked,\n  tableName,\n  setUploadSuccess,\n  setUploadFail\n) {\n  useEffect(() => {\n    if (tableName && createClicked > 0) {\n      createTempCloneTable(tableName);\n    }\n  }, [createClicked]);\n\n  async function createTempCloneTable(tableName) {\n    const nowTime = new Date().toLocaleString().replace(\",\", \"\");\n\n    return await API.post(\"dbapi\", \"/db/create_temp_clone_table\", {\n      body: {\n        table_name: tableName,\n      },\n    })\n      .then((res) => {\n        console.log(`Created the temp clone of table ${tableName}`, res);\n        setUploadSuccess((prevValues) => {\n          return {\n            ...prevValues,\n            [tableName]: `Created the temp clone of table ${tableName} successfully!`,\n          };\n        });\n        setUploadFail((prevValues) => {\n          return { ...prevValues, [tableName]: null };\n        });\n      })\n      .catch((error) => {\n        console.log(`New row inserted fail in table ${tableName}`, error);\n        setUploadSuccess((prevValues) => {\n          return { ...prevValues, [tableName]: null };\n        });\n        setUploadFail((prevValues) => {\n          return {\n            ...prevValues,\n            [tableName]: `Creating the temp clone of table ${tableName} failed!`,\n          };\n        });\n      });\n  }\n}\n","import React, { useState, useEffect } from \"react\";\n\nexport default function useCheckImportFileFormat(\n  tableName,\n  primaryKey,\n  rawFileData,\n  primaryKeyValuesArr,\n  headerMapping,\n  callback\n) {\n  useEffect(() => {\n    if (rawFileData.length !== 0) {\n      checkFormat(tableName, rawFileData, primaryKeyValuesArr);\n    }\n  }, [rawFileData, headerMapping]);\n\n  function checkFormat(theName, theFileData, theExsitingDataArr) {\n    const rawFileHeadersArr = Object.keys(theFileData[0]);\n    console.log(\"raw file header arr\", rawFileHeadersArr);\n    const rawFilePrimaryKey = rawFileHeadersArr[0];\n\n    const [theDataToUpdate, theDataToCreate] = checkExisting(\n      rawFileData,\n      rawFilePrimaryKey,\n      theExsitingDataArr\n    );\n\n    const checkPrimaryKeyMapping = headerMapping[primaryKey] ? true : false;\n    const checkDataToUpdateAtLeastOneHeaderMapped =\n      checkAtLeastOneHeaderMapped(theDataToUpdate);\n    const checkDataToCreateAtLeastOneHeaderMapped =\n      checkAtLeastOneHeaderMapped(theDataToCreate);\n\n    callback(tableName, {\n      checkRes:\n        checkPrimaryKeyMapping &&\n        (checkDataToUpdateAtLeastOneHeaderMapped ||\n          checkDataToCreateAtLeastOneHeaderMapped),\n      dataToUpdate: theDataToUpdate,\n      dataToCreate: theDataToCreate,\n    });\n  }\n\n  // filter exsiting to update and new data to create\n  function checkExisting(\n    fileData,\n    filePrimaryKey,\n    existingPrimaryKeyvValuesArr\n  ) {\n    const existSet = new Set(existingPrimaryKeyvValuesArr);\n    const existPrimaryKeyType =\n      existingPrimaryKeyvValuesArr.length > 0\n        ? typeof existingPrimaryKeyvValuesArr[0]\n        : \"string\";\n    // generate a list of raw file primary key values\n    const filePrimaryKeyValuesArr = fileData.reduce((tempArr, current) => {\n      tempArr.push(current[filePrimaryKey]);\n      return tempArr;\n    }, []);\n    console.log(\n      \"online table existing pirmary key value list\",\n      filePrimaryKeyValuesArr\n    );\n    console.log(\n      \"existing primary key value list\",\n      existingPrimaryKeyvValuesArr\n    );\n    const oldDataToUpdate = [];\n    const newDataToCreate = [];\n\n    // compare online existing primary key values with file primary key values\n    // then sort out which row is new and which row is existing already\n    for (let i = 0; i < filePrimaryKeyValuesArr.length; i++) {\n      let currentFilePrimaryKeyValue = String(filePrimaryKeyValuesArr[i]);\n      if (existPrimaryKeyType === \"number\") {\n        currentFilePrimaryKeyValue = Number(filePrimaryKeyValuesArr[i]);\n      }\n\n      if (existSet.has(currentFilePrimaryKeyValue)) {\n        oldDataToUpdate.push(fileData[i]);\n      } else {\n        newDataToCreate.push(fileData[i]);\n      }\n    }\n    return [renameHeaders(oldDataToUpdate), renameHeaders(newDataToCreate)];\n  }\n\n  function renameHeaders(dataToUpdate) {\n    return dataToUpdate.map((rowObject) => {\n      let newRowObject = {};\n      Object.keys(headerMapping).forEach((key) => {\n        let mappedKey = headerMapping[key];\n        let mappedValue = rowObject[mappedKey];\n        newRowObject[key] = mappedValue;\n      });\n      return newRowObject;\n    });\n  }\n\n  // check if there's at least one header mapped which is other than primary key\n  function checkAtLeastOneHeaderMapped(theObjectArr) {\n    let res = false;\n    for (const theObject of theObjectArr) {\n      for (const key in theObject) {\n        if (key !== primaryKey && theObject[key]) {\n          res = res || true;\n        }\n      }\n    }\n    return res;\n  }\n}\n","import React, { useState, useEffect } from \"react\";\n\nimport {\n  Typography,\n  TextField,\n  Paper,\n  Table,\n  TableBody,\n  TableCell,\n  TableContainer,\n  TableHead,\n  TableRow,\n  TableSortLabel,\n  Autocomplete,\n} from \"@mui/material\";\n\n// import { Autocomplete } from \"@material-ui/lab\";\n\nfunction StyledPaper(props) {\n  return (\n    <Paper\n      variant=\"outlined\"\n      sx={{\n        width: \"60%\",\n        maxHeight: 400,\n        overflow: \"auto\",\n        marginTop: 1,\n        marginBottom: 2,\n      }}\n    >\n      {props.children}\n    </Paper>\n  );\n}\n\nexport default function HeaderMappingTable({\n  tableHeaders,\n  fileHeaders,\n  setMapping,\n}) {\n  useEffect(() => {\n    tableHeaders.forEach((header) =>\n      setMapping((prevValues) => {\n        return { ...prevValues, [header]: null };\n      })\n    );\n  }, [tableHeaders]);\n\n  const handleSelectHeader = (theFileHeader, theTableHeader) => {\n    setMapping((prevValues) => {\n      return { ...prevValues, [theTableHeader]: theFileHeader };\n    });\n  };\n\n  return (\n    <div>\n      <Typography variant=\"h6\" sx={{ marginTop: 2 }}>\n        Database and File Headers Mapping\n      </Typography>\n      <TableContainer component={StyledPaper}>\n        <Table stickyHeader>\n          <TableHead>\n            <TableRow\n              sx={{ \"& th\": { fontWeight: 600, backgroundColor: \"#e6e6e6\" } }}\n            >\n              <TableCell>TABLE HEADER</TableCell>\n              <TableCell>FILE HEADER</TableCell>\n            </TableRow>\n          </TableHead>\n          <TableBody>\n            {tableHeaders ? (\n              tableHeaders.map((tHeader, index) => {\n                return (\n                  <TableRow id={index}>\n                    <TableCell>{tHeader}</TableCell>\n                    <TableCell>\n                      <Autocomplete\n                        options={fileHeaders}\n                        onChange={(event, fHeader) =>\n                          handleSelectHeader(fHeader, tHeader)\n                        }\n                        key={fileHeaders} // <========= The dropdown will reset when fileHeader got changed\n                        renderInput={(params) => (\n                          <TextField\n                            {...params}\n                            label=\"Choose Header\"\n                            variant=\"outlined\"\n                          />\n                        )}\n                      />\n                    </TableCell>\n                  </TableRow>\n                );\n              })\n            ) : (\n              <TableRow>\n                <TableCell>pending</TableCell>\n                <TableCell>pending</TableCell>\n              </TableRow>\n            )}\n          </TableBody>\n        </Table>\n      </TableContainer>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Button, Typography, TextField, Fade, Box } from \"@material-ui/core\";\nimport { Autocomplete, Alert } from \"@material-ui/lab\";\nimport useRetrieveTableHeaders from \"./component/useRetrieveTableHeaders\";\nimport useRetrieveExisitingPrimaryKeyValues from \"./component/useRetrieveExistingPrimaryKeyValues\";\nimport useDataUpload from \"./component/useDataUpload\";\nimport useCreateTempCloneTable from \"./component/useCreateTempCloneTable\";\nimport Papa from \"papaparse\";\nimport useCheckImportFileFormat from \"./component/useCheckImportFileFormat\";\nimport HeaderMappingTable from \"./component/HeaderMappingTable\";\nimport XLSX from \"xlsx\";\n\nfunction csvToJson(csvData) {\n  return new Promise((resolve, reject) => {\n    Papa.parse(csvData, {\n      header: true,\n      complete: (result) => {\n        resolve(result.data);\n      },\n      error: (error) => {\n        reject(error);\n      },\n    });\n  });\n}\n\nfunction isCsvData(data) {\n  const csvRegex =\n    /^([^\\n,]*,)*[^\\n,]*\\n?([^\\n,]*,)*[^\\n,]*\\n?([^\\n,]*,)*[^\\n,]*\\n?/;\n  return csvRegex.test(data);\n}\n\nfunction xlsxToJson(xlsxData) {\n  const reader = new FileReader();\n  reader.onload = (readerEvent) => {\n    const workbook = XLSX.read(readerEvent.target.result, { type: \"binary\" });\n    const sheetName = workbook.SheetNames[0];\n    const worksheet = workbook.Sheets[sheetName];\n    return XLSX.utils.sheet_to_json(worksheet);\n  };\n}\n\nexport default function ImportHLADataFile() {\n  const initStates = {\n    needReset: false,\n    allRawFileData: {\n      HLA: [],\n      RNA: [],\n      slices_raw_data: [],\n      immunophenotyping: [],\n    },\n    allRawFileNames: {\n      HLA: null,\n      RNA: null,\n      slices_raw_data: null,\n      immunophenotyping: null,\n    },\n    allRawFileHeaders: {\n      HLA: [],\n      RNA: [],\n      slices_raw_data: [],\n      immunophenotyping: [],\n    },\n    allTableHeaders: {\n      HLA: [],\n      RNA: [],\n      slices_raw_data: [],\n      immunophenotyping: [],\n    },\n    HLAHeadersMapping: {},\n    slicesRawDataHeadersMapping: {},\n    immunophenotypingHeadersMapping: {},\n    allTablePrimaryKeyValues: {\n      HLA: [],\n      RNA: [],\n      slices_raw_data: [],\n      immunophenotyping: [],\n    },\n    allTableDataToSend: {\n      HLA: {\n        checkRes: false,\n        dataToUpdate: [],\n        dataToCreate: [],\n      },\n      RNA: {\n        checkRes: false,\n        dataToUpdate: [],\n        dataToCreate: [],\n      },\n      slices_raw_data: {\n        checkRes: false,\n        dataToUpdate: [],\n        dataToCreate: [],\n      },\n      immunophenotyping: {\n        checkRes: false,\n        dataToUpdate: [],\n        dataToCreate: [],\n      },\n    },\n    uploadFail: {\n      HLA: null,\n      RNA: null,\n      slices_raw_data: null,\n      immunophenotyping: null,\n    },\n    uploadSuccess: {\n      HLA: null,\n      RNA: null,\n      slices_raw_data: null,\n      immunophenotyping: null,\n    },\n    allUploadClicked: {\n      HLA: 0,\n      RNA: 0,\n      slices_raw_data: 0,\n      immunophenotyping: 0,\n    },\n    allCreateClicked: {\n      HLA: 0,\n      RNA: 0,\n      slices_raw_data: 0,\n      immunophenotyping: 0,\n    },\n  };\n\n  const [needReset, setNeedReset] = useState(initStates.needReset);\n\n  const [allRawFileData, setAllRawFileData] = useState(\n    initStates.allRawFileData\n  );\n\n  const [allRawFileNames, setAllRawFileNames] = useState(\n    initStates.allRawFileNames\n  );\n\n  const [allRawFileHeaders, setAllRawFileHeaders] = useState(\n    initStates.allRawFileHeaders\n  );\n\n  const [allTableHeaders, setAllTableHeaders] = useState(\n    initStates.allTableHeaders\n  );\n\n  const [HLAHeadersMapping, setHLAHeadersMapping] = useState(\n    initStates.HLAHeadersMapping\n  );\n\n  const [slicesRawDataHeadersMapping, setSlicesRawDataHeadersMapping] =\n    useState(initStates.slicesRawDataHeadersMapping);\n\n  const [immunophenotypingHeadersMapping, setImmunophenotypingHeadersMapping] =\n    useState(initStates.immunophenotypingHeadersMapping);\n\n  const [allTablePrimaryKeyValues, setAllTablePrimaryKeyValues] = useState(\n    initStates.allTablePrimaryKeyValues\n  );\n\n  const [allTableDataToSend, setAllTableDataToSend] = useState(\n    initStates.allTableDataToSend\n  );\n\n  const [uploadSuccess, setUploadSuccess] = useState(initStates.uploadSuccess);\n\n  const [uploadFail, setUploadFail] = useState(initStates.uploadFail);\n\n  const [allUploadClicked, setAllUploadClicked] = useState(\n    initStates.allUploadClicked\n  );\n\n  const [allCreateClicked, setAllCreateClicked] = useState(\n    initStates.allCreateClicked\n  );\n\n  const handleFileDataImport = (event, targetTable) => {\n    const file = event.target.files[0];\n\n    setAllRawFileNames((prevValues) => {\n      return { ...prevValues, [targetTable]: file.name };\n    });\n\n    const reader = new FileReader();\n    reader.onload = (readerEvent) => {\n      const workbook = XLSX.read(readerEvent.target.result, {\n        type: \"binary\",\n        cellText: false,\n        cellDates: true,\n      });\n      const sheetName = workbook.SheetNames[0];\n      const worksheet = workbook.Sheets[sheetName];\n\n      const parsedJson = XLSX.utils.sheet_to_json(worksheet);\n\n      // Because SheetJS(XLSX) covert spreadsheet time to an dateobject\n      // Here all date value needs re-format\n      parsedJson.forEach((row) => {\n        for (let [key, value] of Object.entries(row)) {\n          if (value instanceof Date) {\n            row[key] = value.toISOString().slice(0, 10);\n          }\n        }\n      });\n\n      setAllRawFileData((prevValues) => {\n        return { ...prevValues, [targetTable]: parsedJson };\n      });\n      setAllRawFileHeaders((prevValues) => {\n        return { ...prevValues, [targetTable]: Object.keys(parsedJson[0]) };\n      });\n    };\n    reader.readAsBinaryString(file);\n\n    const timer = setTimeout(() => {\n      reader.abort();\n    }, 3000);\n    event.target.value = null;\n  };\n\n  function setTableHeaders(tableName, data) {\n    setAllTableHeaders((preValues) => {\n      return { ...preValues, [tableName]: data };\n    });\n  }\n\n  function setTablePrimaryKeyValues(tableName, data) {\n    setAllTablePrimaryKeyValues((prevValues) => {\n      return { ...prevValues, [tableName]: data };\n    });\n  }\n\n  function setDataToSend(tableName, data) {\n    setAllTableDataToSend((prevValues) => {\n      return { ...prevValues, [tableName]: data };\n    });\n  }\n\n  function resetAllStates() {\n    setAllRawFileData(initStates.allRawFileData);\n    setAllRawFileNames(initStates.allRawFileNames);\n    setAllRawFileHeaders(initStates.allRawFileHeaders);\n    setHLAHeadersMapping(initStates.HLAHeadersMapping);\n    setSlicesRawDataHeadersMapping(initStates.slicesRawDataHeadersMapping);\n    setAllTableDataToSend(initStates.allTableDataToSend);\n    setUploadSuccess(initStates.uploadSuccess);\n    setUploadFail(initStates.uploadFail);\n    setAllUploadClicked(initStates.allUploadClicked);\n    setAllCreateClicked(initStates.allCreateClicked);\n  }\n\n  const handleUploadClick = (tableName) => {\n    setAllUploadClicked((prevValues) => {\n      return { ...prevValues, [tableName]: prevValues[tableName] + 1 };\n    });\n    setNeedReset(true);\n  };\n\n  const handleCreateClick = (tableName) => {\n    setAllCreateClicked((prevValues) => {\n      return { ...prevValues, [tableName]: prevValues[tableName] + 1 };\n    });\n    setNeedReset(true);\n  };\n\n  const handResetClick = () => {\n    setNeedReset(false);\n    resetAllStates();\n  };\n\n  useRetrieveTableHeaders(\"HLA\", setTableHeaders);\n  useRetrieveTableHeaders(\"RNA\", setTableHeaders);\n  useRetrieveTableHeaders(\"slices_raw_data\", setTableHeaders);\n  useRetrieveTableHeaders(\"immunophenotyping\", setTableHeaders);\n\n  useRetrieveExisitingPrimaryKeyValues(\"HLA_temp\", setTablePrimaryKeyValues); // Note: testing set, need revert later\n  useRetrieveExisitingPrimaryKeyValues(\"RNA\", setTablePrimaryKeyValues);\n  useRetrieveExisitingPrimaryKeyValues(\n    \"slices_raw_data_temp\",\n    setTablePrimaryKeyValues\n  );\n  useRetrieveExisitingPrimaryKeyValues(\n    \"immunophenotyping_temp\",\n    setTablePrimaryKeyValues\n  );\n\n  // Check HLA importing format\n  useCheckImportFileFormat(\n    \"HLA\",\n    \"case_id\", // primary key name\n    allRawFileData[\"HLA\"],\n    allTablePrimaryKeyValues[\"HLA_temp\"], // Note: testing set, need revert later\n    HLAHeadersMapping,\n    setDataToSend\n  );\n\n  // Check slices_raw_data importing format\n  useCheckImportFileFormat(\n    \"slices_raw_data\",\n    \"id\", // primary key name\n    allRawFileData[\"slices_raw_data\"],\n    allTablePrimaryKeyValues[\"slices_raw_data_temp\"], // Note: testing set, need revert later\n    slicesRawDataHeadersMapping,\n    setDataToSend\n  );\n\n  // Check immunophenotyping import format\n  useCheckImportFileFormat(\n    \"immunophenotyping\",\n    \"id\",\n    allRawFileData[\"immunophenotyping\"],\n    allTablePrimaryKeyValues[\"immunophenotyping_temp\"],\n    immunophenotypingHeadersMapping,\n    setDataToSend\n  );\n\n  // HLA import Upload\n  useDataUpload(\n    allTableDataToSend[\"HLA\"][\"checkRes\"],\n    allUploadClicked[\"HLA\"],\n    allTableDataToSend[\"HLA\"][\"dataToCreate\"],\n    allTableDataToSend[\"HLA\"][\"dataToUpdate\"],\n    \"HLA\", // tableName\n    setUploadSuccess,\n    setUploadFail\n  );\n\n  // slices_raw_data Upload\n  useDataUpload(\n    allTableDataToSend[\"slices_raw_data\"][\"checkRes\"],\n    allUploadClicked[\"slices_raw_data\"],\n    allTableDataToSend[\"slices_raw_data\"][\"dataToCreate\"],\n    allTableDataToSend[\"slices_raw_data\"][\"dataToUpdate\"],\n    \"slices_raw_data\", // tableName\n    setUploadSuccess,\n    setUploadFail\n  );\n\n  // immunophenotyping Upload\n  useDataUpload(\n    allTableDataToSend[\"immunophenotyping\"][\"checkRes\"],\n    allUploadClicked[\"immunophenotyping\"],\n    allTableDataToSend[\"immunophenotyping\"][\"dataToCreate\"],\n    allTableDataToSend[\"immunophenotyping\"][\"dataToUpdate\"],\n    \"immunophenotyping\", // tableName\n    setUploadSuccess,\n    setUploadFail\n  );\n\n  // create temp table of HLA\n  useCreateTempCloneTable(\n    allCreateClicked[\"HLA\"],\n    \"HLA\",\n    setUploadSuccess,\n    setUploadFail\n  );\n\n  // create temp table of slices_raw_data\n  useCreateTempCloneTable(\n    allCreateClicked[\"slices_raw_data\"],\n    \"slices_raw_data\",\n    setUploadSuccess,\n    setUploadFail\n  );\n\n  // create temp table of immunophenotyping\n  useCreateTempCloneTable(\n    allCreateClicked[\"immunophenotyping\"],\n    \"immunophenotyping\",\n    setUploadSuccess,\n    setUploadFail\n  );\n\n  useEffect(() => {\n    let resetMsg = false;\n    for (const key in uploadFail) {\n      resetMsg = resetMsg || uploadFail[key];\n    }\n    for (const key in uploadSuccess) {\n      resetMsg = resetMsg || uploadSuccess[key];\n    }\n    if (resetMsg) {\n      const timer = setTimeout(() => {\n        setUploadSuccess(initStates.uploadSuccess);\n        setUploadFail(initStates.uploadFail);\n      }, 3000);\n    }\n  }, [uploadFail, uploadSuccess]);\n\n  console.log(\"All raw file data\", allRawFileData);\n  console.log(\"All raw file headers\", allRawFileHeaders);\n  console.log(\"all table headers\", allTableHeaders);\n  console.log(\"All primary key values\", allTablePrimaryKeyValues);\n  console.log(\"All data to send\", allTableDataToSend);\n  // console.log(\"HLA headers mapping\", HLAHeadersMapping);\n  // console.log(\"slices_raw_data headers mapping\", slicesRawDataHeadersMapping);\n  console.log(\n    \"immunophenotyping headers mapping\",\n    immunophenotypingHeadersMapping\n  );\n  console.log(\"All upload clicked\", allUploadClicked);\n\n  return (\n    <div>\n      {/* HLA table import */}\n      <Box>\n        <Typography variant=\"h5\">HLA Data Import</Typography>\n        <HeaderMappingTable\n          tableHeaders={allTableHeaders[\"HLA\"]}\n          fileHeaders={allRawFileHeaders[\"HLA\"]}\n          setMapping={setHLAHeadersMapping}\n        />\n        {allRawFileData.HLA.length === 0 ? (\n          <Typography variant=\"subtitle1\">\n            Note: Only \".xlsx\" file is supported\n          </Typography>\n        ) : (\n          <Typography variant=\"subtitle1\">\n            File Name: <i>{allRawFileNames.HLA}</i>\n          </Typography>\n        )}\n\n        <Button variant=\"outlined\" component=\"label\" style={{ marginTop: 10 }}>\n          Choose File\n          <input\n            hidden\n            accept=\".xlsx\"\n            type=\"file\"\n            onChange={(event) => handleFileDataImport(event, \"HLA\")}\n          />\n        </Button>\n\n        <Fade in={uploadFail[\"HLA\"] !== null}>\n          <Alert\n            variant=\"filled\"\n            severity=\"error\"\n            style={{ marginTop: \"5px\", marginBottom: \"5px\", width: \"1000px\" }}\n          >\n            {uploadFail[\"HLA\"]}\n          </Alert>\n        </Fade>\n\n        <Fade in={uploadSuccess[\"HLA\"] !== null}>\n          <Alert\n            variant=\"filled\"\n            severity=\"success\"\n            style={{ marginTop: \"5px\", marginBottom: \"5px\", width: \"1000px\" }}\n          >\n            {uploadSuccess[\"HLA\"]}\n          </Alert>\n        </Fade>\n\n        {allRawFileData.HLA.length !== 0 && !allTableDataToSend.HLA.checkRes ? (\n          <Typography variant=\"subtitle1\" style={{ color: \"blue\" }}>\n            Please set HLA table primary key \"case_id\" mapping.\n            <br></br>\n            And set at least one non-primary-key header mapping.\n          </Typography>\n        ) : null}\n\n        {needReset ? (\n          <Typography variant=\"subtitle1\" style={{ color: \"red\" }}>\n            Please click reset button before next import.\n          </Typography>\n        ) : null}\n\n        <Button\n          variant=\"contained\"\n          color=\"primary\"\n          style={{ marginTop: 10, width: \"100px\" }}\n          disabled={!allTableDataToSend[\"HLA\"].checkRes || needReset}\n          onClick={(event) => handleUploadClick(\"HLA\")}\n        >\n          Upload\n        </Button>\n\n        <Button\n          variant=\"contained\"\n          color=\"secondary\"\n          style={{ marginTop: 10, marginLeft: 15, width: \"100px\" }}\n          onClick={handResetClick}\n        >\n          Reset\n        </Button>\n\n        <Button\n          variant=\"contained\"\n          component=\"label\"\n          style={{\n            marginTop: 10,\n            marginLeft: 15,\n            color: \"white\",\n            backgroundColor: \"#f99500\",\n          }}\n          onClick={(event) => handleCreateClick(\"HLA\")}\n        >\n          Generate Temp Table\n        </Button>\n      </Box>\n\n      {/* slices_raw_data table import */}\n      <Box style={{ marginTop: 50, paddingBottom: 50 }}>\n        <Typography variant=\"h5\">Slice Raw Data Import</Typography>\n        <HeaderMappingTable\n          tableHeaders={allTableHeaders[\"slices_raw_data\"]}\n          fileHeaders={allRawFileHeaders[\"slices_raw_data\"]}\n          setMapping={setSlicesRawDataHeadersMapping}\n        />\n        {allRawFileData.slices_raw_data.length === 0 ? (\n          <Typography variant=\"subtitle1\">\n            Note: Only \".xlsx\" file is supported\n          </Typography>\n        ) : (\n          <Typography variant=\"subtitle1\">\n            File Name: <i>{allRawFileNames.slices_raw_data}</i>\n          </Typography>\n        )}\n\n        <Button variant=\"outlined\" component=\"label\" style={{ marginTop: 10 }}>\n          Choose File\n          <input\n            hidden\n            accept=\".xlsx\"\n            type=\"file\"\n            onChange={(event) => handleFileDataImport(event, \"slices_raw_data\")}\n          />\n        </Button>\n\n        <Fade in={uploadFail[\"slices_raw_data\"] !== null}>\n          <Alert\n            variant=\"filled\"\n            severity=\"error\"\n            style={{ marginTop: \"5px\", marginBottom: \"5px\", width: \"1000px\" }}\n          >\n            {uploadFail[\"slices_raw_data\"]}\n          </Alert>\n        </Fade>\n\n        <Fade in={uploadSuccess[\"slices_raw_data\"] !== null}>\n          <Alert\n            variant=\"filled\"\n            severity=\"success\"\n            style={{ marginTop: \"5px\", marginBottom: \"5px\", width: \"1000px\" }}\n          >\n            {uploadSuccess[\"slices_raw_data\"]}\n          </Alert>\n        </Fade>\n\n        {allRawFileData.slices_raw_data.length !== 0 &&\n        !allTableDataToSend.slices_raw_data.checkRes ? (\n          <Typography variant=\"subtitle1\" style={{ color: \"blue\" }}>\n            Please set slices_raw_data table primary key \"id\" mapping.\n            <br></br>\n            And set at least one non-primary-key header mapping.\n          </Typography>\n        ) : null}\n\n        {needReset ? (\n          <Typography variant=\"subtitle1\" style={{ color: \"red\" }}>\n            Please click reset button before next import.\n          </Typography>\n        ) : null}\n\n        <Button\n          variant=\"contained\"\n          color=\"primary\"\n          style={{ marginTop: 10, width: \"100px\" }}\n          disabled={\n            !allTableDataToSend[\"slices_raw_data\"].checkRes || needReset\n          }\n          onClick={(event) => handleUploadClick(\"slices_raw_data\")}\n        >\n          Upload\n        </Button>\n\n        <Button\n          variant=\"contained\"\n          color=\"secondary\"\n          style={{ marginTop: 10, marginLeft: 15, width: \"100px\" }}\n          onClick={handResetClick}\n        >\n          Reset\n        </Button>\n\n        <Button\n          variant=\"contained\"\n          component=\"label\"\n          style={{\n            marginTop: 10,\n            marginLeft: 15,\n            color: \"white\",\n            backgroundColor: \"#f99500\",\n          }}\n          onClick={(event) => handleCreateClick(\"slices_raw_data\")}\n        >\n          Generate Temp Table\n        </Button>\n      </Box>\n\n      {/* immunophenotyping table import */}\n      <Box style={{ marginTop: 50, paddingBottom: 50 }}>\n        <Typography variant=\"h5\">Immunophenotyping Import</Typography>\n        <HeaderMappingTable\n          tableHeaders={allTableHeaders[\"immunophenotyping\"]}\n          fileHeaders={allRawFileHeaders[\"immunophenotyping\"]}\n          setMapping={setImmunophenotypingHeadersMapping}\n        />\n        {allRawFileData.immunophenotyping.length === 0 ? (\n          <Typography variant=\"subtitle1\">\n            Note: Only \".xlsx\" file is supported\n          </Typography>\n        ) : (\n          <Typography variant=\"subtitle1\">\n            File Name: <i>{allRawFileNames.immunophenotyping}</i>\n          </Typography>\n        )}\n\n        <Button variant=\"outlined\" component=\"label\" style={{ marginTop: 10 }}>\n          Choose File\n          <input\n            hidden\n            accept=\".xlsx\"\n            type=\"file\"\n            onChange={(event) =>\n              handleFileDataImport(event, \"immunophenotyping\")\n            }\n          />\n        </Button>\n\n        <Fade in={uploadFail[\"immunophenotyping\"] !== null}>\n          <Alert\n            variant=\"filled\"\n            severity=\"error\"\n            style={{ marginTop: \"5px\", marginBottom: \"5px\", width: \"1000px\" }}\n          >\n            {uploadFail[\"immunophenotyping\"]}\n          </Alert>\n        </Fade>\n\n        <Fade in={uploadSuccess[\"immunophenotyping\"] !== null}>\n          <Alert\n            variant=\"filled\"\n            severity=\"success\"\n            style={{ marginTop: \"5px\", marginBottom: \"5px\", width: \"1000px\" }}\n          >\n            {uploadSuccess[\"immunophenotyping\"]}\n          </Alert>\n        </Fade>\n\n        {allRawFileData.immunophenotyping.length !== 0 &&\n        !allTableDataToSend.immunophenotyping.checkRes ? (\n          <Typography variant=\"subtitle1\" style={{ color: \"blue\" }}>\n            Please set immunophenotyping table primary key \"id\" mapping.\n            <br></br>\n            And set at least one non-primary-key header mapping.\n          </Typography>\n        ) : null}\n\n        {needReset ? (\n          <Typography variant=\"subtitle1\" style={{ color: \"red\" }}>\n            Please click reset button before next import.\n          </Typography>\n        ) : null}\n\n        <Button\n          variant=\"contained\"\n          color=\"primary\"\n          style={{ marginTop: 10, width: \"100px\" }}\n          disabled={\n            !allTableDataToSend[\"immunophenotyping\"].checkRes || needReset\n          }\n          onClick={(event) => handleUploadClick(\"immunophenotyping\")}\n        >\n          Upload\n        </Button>\n\n        <Button\n          variant=\"contained\"\n          color=\"secondary\"\n          style={{ marginTop: 10, marginLeft: 15, width: \"100px\" }}\n          onClick={handResetClick}\n        >\n          Reset\n        </Button>\n\n        <Button\n          variant=\"contained\"\n          component=\"label\"\n          style={{\n            marginTop: 10,\n            marginLeft: 15,\n            color: \"white\",\n            backgroundColor: \"#f99500\",\n          }}\n          onClick={(event) => handleCreateClick(\"immunophenotyping\")}\n        >\n          Generate Temp Table\n        </Button>\n      </Box>\n    </div>\n  );\n}\n","import React from \"react\";\nimport { Typography } from \"@material-ui/core\";\nimport ImportHLADataFile from \"./component/ImportHLADataFile\";\nimport ImportRNADataFile from \"./component/ImportRNADataFile\";\n\nexport default function ImportData() {\n  return (\n    <div>\n      <ImportHLADataFile />\n      {/* <ImportRNADataFile /> */}\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Header from \"./../../../Header\";\nimport Container from \"@material-ui/core/Container\";\nimport { Box, Tab, Tabs } from \"@material-ui/core\";\nimport PropTypes from \"prop-types\";\nimport Typography from \"@material-ui/core/Typography\";\nimport SingleCaseStepper from \"./component/SingleCaseStepper/SingleCaseStepper\";\nimport UploadImage from \"./component/UploadImage/UploadImage\";\nimport ImportData from \"./component/ImportData/ImportData\";\n\nfunction TabPanel(props) {\n  const { children, value, index, ...other } = props;\n\n  return (\n    <div\n      role=\"tabpanel\"\n      hidden={value !== index}\n      id={`tabpanel-${index}`}\n      aria-labelledby={`tab-${index}`}\n      {...other}\n    >\n      {value === index && <Box sx={{ p: 3 }}>{children}</Box>}\n    </div>\n  );\n}\n\nTabPanel.propTypes = {\n  children: PropTypes.node,\n  index: PropTypes.number.isRequired,\n  value: PropTypes.number.isRequired,\n};\n\nfunction a11yProps(index) {\n  return {\n    id: `tab-${index}`,\n    \"aria-controls\": `tabpanel-${index}`,\n  };\n}\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    minHeight: \"100vh\",\n    backgroundImage: `url(${\n      process.env.PUBLIC_URL + \"/assets/adminPage/adminPage.jpg\"\n    })`,\n    backgroundRepeat: \"no-repeat\",\n    backgroundSize: \"cover\",\n    backgroundAttachment: \"fixed\",\n    paddingTop: \"130px\",\n    paddingBottom: theme.spacing(5),\n    display: \"flex\",\n    justifyContent: \"center\",\n  },\n  container: {\n    minWidth: \"75vw\",\n    marginBottom: theme.spacing(5),\n    padding: theme.spacing(5, 5, 1),\n    backgroundColor: \"white\",\n    borderRadius: \"3px\",\n  },\n  title: {\n    marginBottom: theme.spacing(3),\n  },\n  tabs: {\n    marginTop: \"3vh\",\n    marginBottom: \"3vh\",\n    maxWidth: \"480px\",\n    borderBottom: `1px solid ${theme.palette.divider}`,\n    //background: \"linear-gradient(45deg, #6588c2, #dde4f0);\",\n    backgroundColor: \"#dde4f0\",\n    \"& .MuiTabs-indicator\": {\n      //backgroundColor: \"orange\",\n      height: 0,\n    },\n    \"& .MuiTab-root.Mui-selected\": {\n      color: \"black\",\n      backgroundColor: \"#6588c2\",\n      fontWeight: \"bold\",\n      //border: \"1px solid #6588c2\",\n      // borderRadius: \"4px\",\n    },\n  },\n}));\n\nexport default function WriteIn() {\n  const classes = useStyles();\n\n  const [value, setValue] = React.useState(0);\n\n  const handleChange = (event, newValue) => {\n    setValue(newValue);\n  };\n\n  return (\n    <div>\n      <Header location=\"Admin Page\" />\n      <div className={classes.root}>\n        <Box className={classes.container}>\n          <div className={classes.title}>\n            <Typography variant=\"h4\" component=\"h4\">\n              Data Update and Create\n            </Typography>\n          </div>\n          <Tabs\n            value={value}\n            onChange={handleChange}\n            aria-label=\"write-in-tabs\"\n            // sx={{ borderRight: 1, borderColor: \"divider\" }}\n            className={classes.tabs}\n          >\n            <Tab label=\"Single Case\" {...a11yProps(0)} />\n            <Tab label=\"Image File\" {...a11yProps(1)} />\n            <Tab label=\"Import Data\" {...a11yProps(2)} />\n          </Tabs>\n          <TabPanel value={value} index={0}>\n            <SingleCaseStepper />\n          </TabPanel>\n          <TabPanel value={value} index={1}>\n            <UploadImage />\n          </TabPanel>\n          <TabPanel value={value} index={2}>\n            <ImportData />\n          </TabPanel>\n        </Box>\n      </div>\n    </div>\n  );\n}\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Box from \"@material-ui/core/Box\";\nimport { Typography } from \"@material-ui/core\";\nimport WriteIn from \"./component/WriteIn/WriteIn\";\nimport { useHistory } from \"react-router-dom\";\nimport Header from \"./../Header\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    minHeight: \"100vh\",\n    backgroundImage: `url(${\n      process.env.PUBLIC_URL + \"/assets/adminPage/adminPage.jpg\"\n    })`,\n    backgroundRepeat: \"no-repeat\",\n    backgroundSize: \"cover\",\n    paddingTop: \"130px\",\n  },\n  writeIn: {\n    display: \"flex\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    height: \"25vw\",\n    width: \"40vw\",\n    backgroundSize: \"100%\",\n    backgroundImage: `url(${\n      process.env.PUBLIC_URL + \"/assets/adminPage/writein_image.jpg\"\n    })`,\n    borderRadius: \"10px\",\n    margin: \"30px\",\n    border: \"2px solid #949494\",\n    \"&:hover\": {\n      border: \"2px solid #ffffff\",\n      cursor: \"pointer\",\n    },\n  },\n  writeInText: {\n    color: \"rgba(0,0,0,1)\",\n    textShadow: \"0 0 20px white\",\n    fontWeight: 600,\n  },\n  userManage: {\n    display: \"flex\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    height: \"25vw\",\n    width: \"40vw\",\n    backgroundSize: \"100%\",\n    backgroundImage: `url(${\n      process.env.PUBLIC_URL + \"/assets/adminPage/usermanage_image.jpg\"\n    })`,\n    borderRadius: \"10px\",\n    margin: \"30px\",\n    border: \"2px solid #949494\",\n    \"&:hover\": {\n      border: \"2px solid #ffffff\",\n      cursor: \"pointer\",\n    },\n  },\n  userManageText: {\n    color: \"rgba(255,255,255,1)\",\n    textShadow: \"0 0 20px black\",\n    fontWeight: 600,\n  },\n  centerPad: {\n    display: \"flex\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    height: \"55vh\",\n    width: \"90vw\",\n    backgroundColor: \"rgba(255,255,255,0.3)\",\n    borderRadius: \"10px\",\n  },\n  centerBox: {\n    display: \"flex\",\n    flexDirection: \"column\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    height: \"65vh\",\n  },\n}));\n\nexport default function Admin() {\n  const classes = useStyles();\n  const history = useHistory();\n\n  // data write-in handler\n  const dwiHandler = () => {\n    history.push(\"/admin/writein\");\n  };\n\n  // user manage handler\n  const umHandler = () => {\n    history.push(\"/admin/usermanage\");\n  };\n\n  return (\n    <div className={classes.root}>\n      <Header location=\"Admin Page\" />\n      <div>\n        <Box className={classes.centerBox}>\n          <Typography\n            variant=\"h3\"\n            style={{ color: \"white\", fontWeight: 600, marginBottom: 10 }}\n            className={classes.userManageText}\n          >\n            Welcome to Admin Portal\n          </Typography>\n          <Box className={classes.centerPad}>\n            <Box className={classes.writeIn} onClick={dwiHandler}>\n              <Typography variant=\"h2\" className={classes.writeInText}>\n                EDIT DATA\n              </Typography>\n            </Box>\n            <Box className={classes.userManage} onClick={umHandler}>\n              <Typography variant=\"h2\" className={classes.userManageText}>\n                MANAGE USER\n              </Typography>\n            </Box>\n          </Box>\n        </Box>\n      </div>\n    </div>\n  );\n}\n","import React, { useEffect, useState } from \"react\";\nimport Admin from \"../component/Admin/Admin\";\nimport { Auth } from \"aws-amplify\";\nimport { useHistory } from \"react-router-dom\";\n\nexport default function AdminPage() {\n  const [adminAccess, setAdminAccess] = useState(false);\n  const history = useHistory();\n  useEffect(() => {\n    checkAuth();\n  }, []);\n\n  async function checkAuth() {\n    try {\n      const authRes = await Auth.currentAuthenticatedUser();\n      console.log(\"Check auth response \", authRes);\n      console.log(\n        \"user group\",\n        authRes.signInUserSession.accessToken.payload[\"cognito:groups\"]\n      );\n      if (\n        authRes.signInUserSession.accessToken.payload[\n          \"cognito:groups\"\n        ].includes(\"admin\")\n      ) {\n        setAdminAccess(true);\n        console.log(\"Welcome to admin page!\");\n      } else {\n        setAdminAccess(false);\n        history.push(\"/\");\n        console.log(\"Admin page accessing is failed, since you are not admin.\");\n      }\n    } catch (error) {\n      setAdminAccess(false);\n      console.log(\"Check Auth error \", error);\n      history.push(\"/\");\n      console.log(\"Admin page accessing is failed, since you are not admin.\");\n    }\n  }\n  return <div>{adminAccess ? <Admin /> : null}</div>;\n}\n","import React, { useEffect, useState } from \"react\";\nimport WriteIn from \"../component/Admin/component/WriteIn/WriteIn\";\nimport { Auth } from \"aws-amplify\";\nimport { useHistory } from \"react-router-dom\";\n\nexport default function WriteInPage() {\n  const [adminAccess, setAdminAccess] = useState(false);\n  const history = useHistory();\n  useEffect(() => {\n    checkAuth();\n  }, []);\n\n  async function checkAuth() {\n    try {\n      const authRes = await Auth.currentAuthenticatedUser();\n      console.log(\"Check auth response \", authRes);\n      console.log(\n        \"user group\",\n        authRes.signInUserSession.accessToken.payload[\"cognito:groups\"]\n      );\n      if (\n        authRes.signInUserSession.accessToken.payload[\n          \"cognito:groups\"\n        ].includes(\"admin\")\n      ) {\n        setAdminAccess(true);\n        console.log(\"Welcome to admin page!\");\n      } else {\n        setAdminAccess(false);\n        history.push(\"/\");\n        console.log(\"Admin page accessing is failed, since you are not admin.\");\n      }\n    } catch (error) {\n      setAdminAccess(false);\n      console.log(\"Check Auth error \", error);\n      history.push(\"/\");\n      console.log(\"Admin page accessing is failed, since you are not admin.\");\n    }\n  }\n  return <div>{adminAccess ? <WriteIn /> : null}</div>;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Auth, API } from \"aws-amplify\";\n\nexport default function useDisable(\n  nameList,\n  disableClicked,\n  setUserData,\n  setUserRows,\n  setUserCount,\n  createRows\n) {\n  let result;\n  useEffect(() => {\n    // disable loop\n    for (const idx in nameList) {\n      const name = nameList[idx];\n      let err;\n      const disableRes = disableUser(name)\n        .then((res) => {\n          console.log(\"successfully disabled: \", name);\n          result = true;\n          // update user list\n          listUsers(null, null)\n            .then((res) => {\n              console.log(\"list all users: sucess\");\n              // res is a 2D array, each sub-array is users fetched in each round of recursion\n              let userList = res.reduce((merge, userSubList) => {\n                return [...merge, ...userSubList];\n              }, []);\n              setUserData(userList);\n              setUserCount(userList.length);\n              setUserRows(createRows(userList));\n            })\n            .catch((err) => console.error(\"list all users error: \", err));\n        })\n        .catch((error) => {\n          console.error(\"failed to disable user: \" + name, error);\n          err = error;\n          result = false;\n        });\n      if (err) {\n        break;\n      }\n    }\n  }, [disableClicked]);\n\n  async function disableUser(name, nextToken = null) {\n    console.log(\"Disabling user \", name);\n    let apiName = \"AdminQueries\";\n    let path = \"/disableUser\";\n    let myInit = {\n      body: {\n        username: name,\n        token: nextToken,\n      },\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: `${(await Auth.currentSession())\n          .getAccessToken()\n          .getJwtToken()}`,\n      },\n    };\n    const { NextToken, ...rest } = await API.post(apiName, path, myInit);\n    nextToken = NextToken;\n    return rest;\n  }\n\n  async function listUsers(limit, nextToken, allUsers = []) {\n    let apiName = \"AdminQueries\";\n    let path = \"/listUsers\";\n    let myInit = {\n      queryStringParameters: {\n        limit: limit,\n        token: nextToken,\n      },\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: `${(await Auth.currentSession())\n          .getAccessToken()\n          .getJwtToken()}`,\n      },\n    };\n    const { NextToken, ...rest } = await API.get(apiName, path, myInit);\n    allUsers.push(rest.Users);\n    nextToken = NextToken;\n\n    // recursion to exhausting all users\n    if (nextToken) {\n      return listUsers(limit, nextToken, allUsers);\n    } else {\n      return allUsers;\n    }\n  }\n\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Auth, API } from \"aws-amplify\";\n\nexport default function useEnable(\n  nameList,\n  enableClicked,\n  setUserData,\n  setUserRows,\n  setUserCount,\n  createRows\n) {\n  let result;\n  useEffect(() => {\n    for (const idx in nameList) {\n      const name = nameList[idx];\n      let err;\n      const disableRes = enableUser(name)\n        .then((res) => {\n          console.log(\"successfully enabled: \", name);\n          result = true;\n          // update user list\n          listUsers(null, null)\n            .then((res) => {\n              console.log(\"list all users: sucess\");\n              // res is a 2D array, each sub-array is users fetched in each round of recursion\n              let userList = res.reduce((merge, userSubList) => {\n                return [...merge, ...userSubList];\n              }, []);\n              setUserData(userList);\n              setUserCount(userList.length);\n              setUserRows(createRows(userList));\n            })\n            .catch((err) => console.error(\"list all users error: \", err));\n        })\n        .catch((error) => {\n          console.error(\"failed to enable user: \" + name, error);\n          err = error;\n          result = false;\n        });\n      if (err) {\n        break;\n      }\n    }\n  }, [enableClicked]);\n\n  async function enableUser(name, nextToken = null) {\n    console.log(\"Enabling user \", name);\n    let apiName = \"AdminQueries\";\n    let path = \"/enableUser\";\n    let myInit = {\n      body: {\n        username: name,\n        token: nextToken,\n      },\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: `${(await Auth.currentSession())\n          .getAccessToken()\n          .getJwtToken()}`,\n      },\n    };\n    const { NextToken, ...rest } = await API.post(apiName, path, myInit);\n    nextToken = NextToken;\n    return rest;\n  }\n\n  async function listUsers(limit, nextToken, allUsers = []) {\n    let apiName = \"AdminQueries\";\n    let path = \"/listUsers\";\n    let myInit = {\n      queryStringParameters: {\n        limit: limit,\n        token: nextToken,\n      },\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: `${(await Auth.currentSession())\n          .getAccessToken()\n          .getJwtToken()}`,\n      },\n    };\n    const { NextToken, ...rest } = await API.get(apiName, path, myInit);\n    allUsers.push(rest.Users);\n    nextToken = NextToken;\n\n    // recursion to exhausting all users\n    if (nextToken) {\n      return listUsers(limit, nextToken, allUsers);\n    } else {\n      return allUsers;\n    }\n  }\n\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Auth, API } from \"aws-amplify\";\n\nexport default function useConfirm(\n  nameList,\n  confirmClicked,\n  setUserData,\n  setUserRows,\n  setUserCount,\n  createRows\n) {\n  let result;\n  useEffect(() => {\n    // disable loop\n    for (const idx in nameList) {\n      const name = nameList[idx];\n      let err;\n      const disableRes = confirmUser(name)\n        .then((res) => {\n          console.log(\"successfully confirm: \", name);\n          result = true;\n          // update user list\n          listUsers(null, null)\n            .then((res) => {\n              console.log(\"list all users: sucess\");\n              // res is a 2D array, each sub-array is users fetched in each round of recursion\n              let userList = res.reduce((merge, userSubList) => {\n                return [...merge, ...userSubList];\n              }, []);\n              setUserData(userList);\n              setUserCount(userList.length);\n              setUserRows(createRows(userList));\n            })\n            .catch((err) => console.error(\"list all users error: \", err));\n        })\n        .catch((error) => {\n          console.error(\"failed to confirm user: \" + name, error);\n          err = error;\n          result = false;\n        });\n      if (err) {\n        break;\n      }\n    }\n  }, [confirmClicked]);\n\n  async function confirmUser(name, nextToken = null) {\n    console.log(\"Confirming user \", name);\n    let apiName = \"AdminQueries\";\n    let path = \"/confirmUserSignUp\";\n    let myInit = {\n      body: {\n        username: name,\n        token: nextToken,\n      },\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: `${(await Auth.currentSession())\n          .getAccessToken()\n          .getJwtToken()}`,\n      },\n    };\n    const { NextToken, ...rest } = await API.post(apiName, path, myInit);\n    nextToken = NextToken;\n    return rest;\n  }\n\n  async function listUsers(limit, nextToken, allUsers = []) {\n    let apiName = \"AdminQueries\";\n    let path = \"/listUsers\";\n    let myInit = {\n      queryStringParameters: {\n        limit: limit,\n        token: nextToken,\n      },\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: `${(await Auth.currentSession())\n          .getAccessToken()\n          .getJwtToken()}`,\n      },\n    };\n    const { NextToken, ...rest } = await API.get(apiName, path, myInit);\n    allUsers.push(rest.Users);\n    nextToken = NextToken;\n\n    // recursion to exhausting all users\n    if (nextToken) {\n      return listUsers(limit, nextToken, allUsers);\n    } else {\n      return allUsers;\n    }\n  }\n\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Auth, API } from \"aws-amplify\";\n\nexport default function useDelete(\n  nameList,\n  deleteClicked,\n  setUserData,\n  setUserRows,\n  setUserCount,\n  createRows\n) {\n  let result;\n  useEffect(() => {\n    for (const idx in nameList) {\n      const name = nameList[idx];\n      let err;\n      const deleteRes = deleteUser(name)\n        .then((res) => {\n          console.log(\"successfully deleted: \", name);\n          result = true;\n          // update user list\n          listUsers(null, null)\n            .then((res) => {\n              console.log(\"list all users: sucess\");\n              // res is a 2D array, each sub-array is users fetched in each round of recursion\n              let userList = res.reduce((merge, userSubList) => {\n                return [...merge, ...userSubList];\n              }, []);\n              setUserData(userList);\n              setUserCount(userList.length);\n              setUserRows(createRows(userList));\n            })\n            .catch((err) => console.error(\"list all users error: \", err));\n        })\n        .catch((error) => {\n          console.error(\"failed to delete user: \" + name, error);\n          err = error;\n          result = false;\n        });\n      if (err) {\n        break;\n      }\n    }\n  }, [deleteClicked]);\n\n  async function deleteUser(name, nextToken = null) {\n    console.log(\"Deleting user \", name);\n    let apiName = \"AdminQueries\";\n    let path = \"/deleteUser\";\n    let myInit = {\n      body: {\n        username: name,\n        token: nextToken,\n      },\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: `${(await Auth.currentSession())\n          .getAccessToken()\n          .getJwtToken()}`,\n      },\n    };\n    const { NextToken, ...rest } = await API.post(apiName, path, myInit);\n    nextToken = NextToken;\n    return rest;\n  }\n\n  async function listUsers(limit, nextToken, allUsers = []) {\n    let apiName = \"AdminQueries\";\n    let path = \"/listUsers\";\n    let myInit = {\n      queryStringParameters: {\n        limit: limit,\n        token: nextToken,\n      },\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: `${(await Auth.currentSession())\n          .getAccessToken()\n          .getJwtToken()}`,\n      },\n    };\n    const { NextToken, ...rest } = await API.get(apiName, path, myInit);\n    allUsers.push(rest.Users);\n    nextToken = NextToken;\n\n    // recursion to exhausting all users\n    if (nextToken) {\n      return listUsers(limit, nextToken, allUsers);\n    } else {\n      return allUsers;\n    }\n  }\n\n  return result;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Header from \"./../../../Header\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport { TableSortLabel } from \"@material-ui/core\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Box from \"@material-ui/core/Box\";\nimport Button from \"@material-ui/core/Button\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport { Auth, API } from \"aws-amplify\";\nimport useDisable from \"./component/useDisable\";\nimport useEnable from \"./component/useEnable\";\nimport useConfirm from \"./component/useConfirm\";\nimport useDelete from \"./component/userDelete\";\nimport AlertDialog from \"../../../AlertDialog\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    minHeight: \"100vh\",\n    backgroundImage: `url(${\n      process.env.PUBLIC_URL + \"/assets/adminPage/adminPage.jpg\"\n    })`,\n    backgroundRepeat: \"no-repeat\",\n    backgroundSize: \"cover\",\n    paddingTop: \"130px\",\n  },\n  title: {\n    paddingBottom: theme.spacing(2),\n  },\n  centerBox: {\n    maxHeight: \"80vh\",\n    //width: \"100%\",\n    display: \"flex\",\n    justifyContent: \"center\",\n    alignContent: \"center\",\n  },\n  centerPaper: {\n    minHeight: \"70vh\",\n    width: \"80vw\",\n    padding: \"2vh\",\n  },\n  container: {\n    marginTop: theme.spacing(4),\n    maxHeight: \"70vh\",\n    width: \"100%\",\n  },\n  buttonBox: {\n    display: \"flex\",\n    width: \"80vw\",\n  },\n  button: {\n    marginTop: \"10px\",\n    marginLeft: \"4px\",\n    marginRight: \"4px\",\n  },\n  table: {\n    paddingBottom: theme.spacing(2),\n    //minWidth: 650,\n  },\n  tableRow: {\n    \"&:hover\": {\n      cursor: \"pointer\",\n    },\n  },\n  greenVal: {\n    color: \"green\",\n  },\n  redVal: {\n    color: \"red\",\n  },\n}));\n\nfunction createData(\n  username,\n  email,\n  email_verified,\n  status,\n  enabled,\n  firstName,\n  lastName,\n  institution,\n  project\n) {\n  return {\n    username,\n    email,\n    email_verified,\n    status,\n    enabled,\n    firstName,\n    lastName,\n    institution,\n    project,\n  };\n}\n\nfunction createRows(uData) {\n  let rows = [];\n  for (let i = 0; i < uData.length; i++) {\n    let username = uData[i].Username;\n    let email;\n    let email_verified;\n    uData[i].Attributes.forEach((attr) => {\n      if (attr.Name === \"email\") {\n        email = attr.Value;\n      } else if (attr.Name === \"email_verified\") {\n        email_verified = attr.Value === \"true\" ? \"Verified\" : \"Not Verified\";\n      }\n    });\n\n    let status = uData[i].UserStatus;\n    let enabled = uData[i].Enabled === true ? \"Enabled\" : \"Disabled\";\n    let firstName;\n    try {\n      firstName = uData[i].Attributes.find(\n        (attr) => attr.Name === \"custom:firstname\"\n      ).Value;\n    } catch (err) {\n      firstName = \"None\";\n    }\n\n    let lastName;\n    try {\n      lastName = uData[i].Attributes.find(\n        (attr) => attr.Name === \"custom:lastname\"\n      ).Value;\n    } catch (err) {\n      lastName = \"None\";\n    }\n\n    let institution;\n    try {\n      institution = uData[i].Attributes.find(\n        (attr) => attr.Name === \"custom:institution\"\n      ).Value;\n    } catch (err) {\n      institution = \"None\";\n    }\n\n    let project;\n    try {\n      project = uData[i].Attributes.find(\n        (attr) => attr.Name === \"custom:project\"\n      ).Value;\n    } catch (err) {\n      project = \"None\";\n    }\n\n    let curRow = createData(\n      username,\n      email,\n      email_verified,\n      status,\n      enabled,\n      firstName,\n      lastName,\n      institution,\n      project\n    );\n    rows.push(curRow);\n  }\n  return rows;\n}\n\nfunction descendingComparator(a, b, orderBy) {\n  const x = String(a[orderBy]).toLowerCase();\n  const y = String(b[orderBy]).toLowerCase();\n  if (y < x) {\n    return -1;\n  }\n  if (y > x) {\n    return 1;\n  }\n  return 0;\n}\n\nfunction getComparator(order, orderBy) {\n  return order === \"desc\"\n    ? (a, b) => descendingComparator(a, b, orderBy)\n    : (a, b) => -descendingComparator(a, b, orderBy);\n}\n\nfunction stableSort(array, comparator) {\n  const stabilizedThis = array.map((el, index) => [el, index]);\n  stabilizedThis.sort((a, b) => {\n    const order = comparator(a[0], b[0]);\n    if (order !== 0) return order;\n    return a[1] - b[1];\n  });\n  return stabilizedThis.map((el) => el[0]);\n}\n\nexport default function WriteIn() {\n  const classes = useStyles();\n  const [userData, setUserData] = useState();\n  const [useRows, setUserRows] = useState();\n  const [selected, setSelected] = useState(new Set());\n  const [disableClicked, setDisableClicked] = useState(0);\n  const [enableClicked, setEnableClicked] = useState(0);\n  const [confirmClicked, setConfirmClicked] = useState(0);\n  const [deleteClicked, setDeleteClicked] = useState(0);\n  const [showDetail, setShowDetail] = useState(false);\n  const [detailName, setDetailName] = useState();\n  const [userCount, setUserCount] = useState();\n  const [orderBy, setOrderBy] = useState();\n  const [order, setOrder] = useState();\n  const [openAlert, setOpenAlert] = useState(false);\n\n  useEffect(() => {\n    let cycle = 1;\n    async function listUsers(limit, nextToken, allUsers = []) {\n      let apiName = \"AdminQueries\";\n      let path = \"/listUsers\";\n      let myInit = {\n        queryStringParameters: {\n          limit: limit,\n          token: nextToken,\n        },\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Authorization: `${(await Auth.currentSession())\n            .getAccessToken()\n            .getJwtToken()}`,\n        },\n      };\n      const { NextToken, ...rest } = await API.get(apiName, path, myInit);\n      allUsers.push(rest.Users);\n      nextToken = NextToken;\n\n      // recursion to exhausting all users\n      if (nextToken) {\n        return listUsers(limit, nextToken, allUsers);\n      } else {\n        return allUsers;\n      }\n    }\n    listUsers(null, null)\n      .then((res) => {\n        console.log(\"list all users: sucess\");\n        // res is a 2D array, each sub-array is users fetched in each round of recursion\n        let userList = res.reduce((merge, userSubList) => {\n          return [...merge, ...userSubList];\n        }, []);\n        setUserData(userList);\n        setUserCount(userList.length);\n        setUserRows(createRows(userList));\n      })\n      .catch((err) => console.error(\"list all users error: \", err));\n  }, []);\n\n  const handleCheckboxClick = (event, name) => {\n    const newSelected = new Set(selected);\n    if (selected.has(name)) {\n      newSelected.delete(name);\n    } else {\n      newSelected.add(name);\n    }\n    setSelected(newSelected);\n  };\n\n  const handleRowClick = (event, name) => {\n    setShowDetail((prev) => !prev);\n    setDetailName(name);\n  };\n\n  const handleDisableClick = (event) => {\n    setDisableClicked((prev) => prev + 1);\n  };\n\n  const handleEnableClick = (event) => {\n    setEnableClicked((prev) => prev + 1);\n  };\n\n  const handleConfirmClick = (event) => {\n    setConfirmClicked((prev) => prev + 1);\n  };\n\n  const handleDeleteClick = (event) => {\n    setDeleteClicked((prev) => prev + 1);\n    setOpenAlert(false);\n  };\n\n  const handleSort = (property) => (event) => {\n    const isAsc = orderBy === property && order === \"asc\";\n    setOrder(isAsc ? \"desc\" : \"asc\");\n    setOrderBy(property);\n  };\n\n  const isSelected = (name) => selected.has(name);\n\n  const disableResult = useDisable(\n    [...selected],\n    disableClicked,\n    setUserData,\n    setUserRows,\n    setUserCount,\n    createRows\n  );\n  const enableResult = useEnable(\n    [...selected],\n    enableClicked,\n    setUserData,\n    setUserRows,\n    setUserCount,\n    createRows\n  );\n\n  const confirmResult = useConfirm(\n    [...selected],\n    confirmClicked,\n    setUserData,\n    setUserRows,\n    setUserCount,\n    createRows\n  );\n  const deleteResult = useDelete(\n    [...selected],\n    deleteClicked,\n    setUserData,\n    setUserRows,\n    setUserCount,\n    createRows\n  );\n\n  console.log(\"all user data: \", userData);\n\n  return (\n    <div>\n      <Header location=\"Admin Page\" />\n      <div className={classes.root}>\n        <AlertDialog\n          title=\"Warning\"\n          contentText=\"Delete these users permanently?\"\n          open={openAlert}\n          setOpen={setOpenAlert}\n          btn1Name=\"Cancel\"\n          btn2Name=\"Delete\"\n          callBack={handleDeleteClick}\n        />\n        <div>\n          <Box className={classes.centerBox}>\n            <Box>\n              <Paper className={classes.centerPaper}>\n                <div>\n                  <Typography variant=\"h4\" className={classes.title}>\n                    User Management\n                  </Typography>\n                  <Typography variant=\"subtitle1\">\n                    Tip: Click the row to show detail. Click one more time to\n                    fold detail.\n                  </Typography>\n                  {userCount ? (\n                    <Typography variant=\"subtitle1\">\n                      {userCount} users in total\n                    </Typography>\n                  ) : null}\n                </div>\n                <div>\n                  <TableContainer\n                    component={Paper}\n                    className={classes.container}\n                  >\n                    <Table className={classes.table} size=\"small\" stickyHeader>\n                      <TableHead>\n                        <TableRow>\n                          <TableCell></TableCell>\n                          <TableCell\n                            sortDirection={\n                              orderBy === \"username\" ? order : false\n                            }\n                          >\n                            <TableSortLabel\n                              active={orderBy === \"username\"}\n                              direction={orderBy === \"username\" ? order : \"asc\"}\n                              onClick={handleSort(\"username\")}\n                            >\n                              Username\n                            </TableSortLabel>\n                          </TableCell>\n                          <TableCell\n                            sortDirection={\n                              orderBy === \"firstName\" ? order : false\n                            }\n                          >\n                            <TableSortLabel\n                              active={orderBy === \"firstName\"}\n                              direction={\n                                orderBy === \"firstName\" ? order : \"asc\"\n                              }\n                              onClick={handleSort(\"firstName\")}\n                            >\n                              Firstname\n                            </TableSortLabel>\n                          </TableCell>\n                          <TableCell\n                            sortDirection={\n                              orderBy === \"lastName\" ? order : false\n                            }\n                          >\n                            <TableSortLabel\n                              active={orderBy === \"lastName\"}\n                              direction={orderBy === \"lastName\" ? order : \"asc\"}\n                              onClick={handleSort(\"lastName\")}\n                            >\n                              Lastname\n                            </TableSortLabel>\n                          </TableCell>\n                          <TableCell\n                            sortDirection={orderBy === \"email\" ? order : false}\n                          >\n                            <TableSortLabel\n                              active={orderBy === \"email\"}\n                              direction={orderBy === \"email\" ? order : \"asc\"}\n                              onClick={handleSort(\"email\")}\n                            >\n                              Email\n                            </TableSortLabel>\n                          </TableCell>\n                          <TableCell\n                            sortDirection={\n                              orderBy === \"email_verified\" ? order : false\n                            }\n                          >\n                            <TableSortLabel\n                              active={orderBy === \"email_verified\"}\n                              direction={\n                                orderBy === \"email_verified\" ? order : \"asc\"\n                              }\n                              onClick={handleSort(\"email_verified\")}\n                            >\n                              Email Verified\n                            </TableSortLabel>\n                          </TableCell>\n                          <TableCell\n                            sortDirection={orderBy === \"status\" ? order : false}\n                          >\n                            <TableSortLabel\n                              active={orderBy === \"status\"}\n                              direction={orderBy === \"status\" ? order : \"asc\"}\n                              onClick={handleSort(\"status\")}\n                            >\n                              Status\n                            </TableSortLabel>\n                          </TableCell>\n                          <TableCell\n                            sortDirection={\n                              orderBy === \"enabled\" ? order : false\n                            }\n                          >\n                            <TableSortLabel\n                              active={orderBy === \"enabled\"}\n                              direction={orderBy === \"enabled\" ? order : \"asc\"}\n                              onClick={handleSort(\"enabled\")}\n                            >\n                              Enabled\n                            </TableSortLabel>\n                          </TableCell>\n                        </TableRow>\n                      </TableHead>\n\n                      {/* <TableHead>\n                        <TableRow>\n                          <TableCell></TableCell>\n                          <TableCell>Username</TableCell>\n                          <TableCell align=\"left\">Email</TableCell>\n                          <TableCell align=\"left\">Email Verified</TableCell>\n                          <TableCell align=\"left\">Status</TableCell>\n                          <TableCell align=\"left\">Enabled</TableCell>\n                        </TableRow>\n                      </TableHead> */}\n                      <TableBody>\n                        {useRows\n                          ? stableSort(\n                              useRows,\n                              getComparator(order, orderBy)\n                            ).map((row) => {\n                              const isRowSelected = isSelected(row.username);\n                              return (\n                                <TableRow\n                                  key={row.username}\n                                  hover\n                                  onClick={(event) =>\n                                    handleRowClick(event, row.username)\n                                  }\n                                  className={classes.tableRow}\n                                >\n                                  <TableCell\n                                    onClick={(event) =>\n                                      handleCheckboxClick(event, row.username)\n                                    }\n                                  >\n                                    <Checkbox checked={isRowSelected} />\n                                  </TableCell>\n                                  <TableCell component=\"th\" scope=\"row\">\n                                    {showDetail &&\n                                    detailName === row.username ? (\n                                      <div>\n                                        <b>Userame: </b>\n                                        {row.username}\n                                        <br></br>\n                                        <b>Institution: </b>\n                                        {row.institution}\n                                        <br></br>\n                                        <b>Project: </b>\n                                        {row.project}\n                                      </div>\n                                    ) : (\n                                      row.username\n                                    )}\n                                  </TableCell>\n                                  <TableCell align=\"left\">\n                                    {row.firstName}\n                                  </TableCell>\n                                  <TableCell align=\"left\">\n                                    {row.lastName}\n                                  </TableCell>\n                                  <TableCell align=\"left\">\n                                    {row.email}\n                                  </TableCell>\n                                  <TableCell align=\"left\">\n                                    <div\n                                      className={\n                                        row.email_verified === \"Verified\"\n                                          ? classes.greenVal\n                                          : classes.redVal\n                                      }\n                                    >\n                                      {row.email_verified}\n                                    </div>\n                                  </TableCell>\n                                  <TableCell align=\"left\">\n                                    <div\n                                      className={\n                                        row.status === \"CONFIRMED\"\n                                          ? classes.greenVal\n                                          : classes.redVal\n                                      }\n                                    >\n                                      {row.status}\n                                    </div>\n                                  </TableCell>\n                                  <TableCell align=\"left\">\n                                    <div\n                                      className={\n                                        row.enabled === \"Enabled\"\n                                          ? classes.greenVal\n                                          : classes.redVal\n                                      }\n                                    >\n                                      {row.enabled}\n                                    </div>\n                                  </TableCell>\n                                </TableRow>\n                              );\n                            })\n                          : null}\n                      </TableBody>\n                    </Table>\n                  </TableContainer>\n                </div>\n                <Box className={classes.buttonBox}>\n                  <Box flexGrow={1}>\n                    <Button\n                      variant=\"contained\"\n                      color=\"primary\"\n                      className={classes.button}\n                      style={{ backgroundColor: \"#cc3300\" }}\n                      onClick={(event) => {\n                        setOpenAlert(true);\n                      }}\n                    >\n                      Delete\n                    </Button>\n                  </Box>\n                  <Box>\n                    <Button\n                      variant=\"contained\"\n                      color=\"primary\"\n                      className={classes.button}\n                      style={{ backgroundColor: \"#339900\" }}\n                      onClick={handleEnableClick}\n                    >\n                      Enable\n                    </Button>\n                  </Box>\n                  <Box>\n                    <Button\n                      variant=\"contained\"\n                      color=\"defult\"\n                      className={classes.button}\n                      style={{ backgroundColor: \"#ffcc00\" }}\n                      onClick={handleDisableClick}\n                    >\n                      Disable\n                    </Button>\n                  </Box>\n\n                  <Box>\n                    <Button\n                      variant=\"contained\"\n                      color=\"primary\"\n                      className={classes.button}\n                      onClick={handleConfirmClick}\n                    >\n                      Confirm\n                    </Button>\n                  </Box>\n                </Box>\n              </Paper>\n            </Box>\n          </Box>\n        </div>\n      </div>\n    </div>\n  );\n}\n","import React, { useEffect, useState } from \"react\";\nimport UserManage from \"../component/Admin/component/UserManage/UserManage\";\nimport { Auth } from \"aws-amplify\";\nimport { useHistory } from \"react-router-dom\";\n\nexport default function UserManagePage() {\n  const [adminAccess, setAdminAccess] = useState(false);\n  const history = useHistory();\n  useEffect(() => {\n    checkAuth();\n  }, []);\n\n  async function checkAuth() {\n    try {\n      const authRes = await Auth.currentAuthenticatedUser();\n      console.log(\"Check auth response \", authRes);\n      console.log(\n        \"user group\",\n        authRes.signInUserSession.accessToken.payload[\"cognito:groups\"]\n      );\n      if (\n        authRes.signInUserSession.accessToken.payload[\n          \"cognito:groups\"\n        ].includes(\"admin\")\n      ) {\n        setAdminAccess(true);\n        console.log(\"Welcome to admin page!\");\n      } else {\n        setAdminAccess(false);\n        history.push(\"/\");\n        console.log(\"Admin page accessing is failed, since you are not admin.\");\n      }\n    } catch (error) {\n      setAdminAccess(false);\n      console.log(\"Check Auth error \", error);\n      history.push(\"/\");\n      console.log(\"Admin page accessing is failed, since you are not admin.\");\n    }\n  }\n  return <div>{adminAccess ? <UserManage /> : null}</div>;\n}\n","import Support from \"../component/Support/Support\";\n\n\nfunction SupportPage(props) {\n  return (\n    <div>\n      <Support />\n    </div>\n  );\n}\n\nexport default SupportPage;\n","import React, { useEffect, useState } from \"react\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport Link from \"@material-ui/core/Link\";\nimport Box from \"@material-ui/core/Box\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Container from \"@material-ui/core/Container\";\nimport AuthHeader from \"../component/AuthHeader\";\nimport { Paper } from \"@material-ui/core\";\nimport ContactMailIcon from \"@material-ui/icons/ContactMail\";\n\nfunction Copyright() {\n  return (\n    <Typography variant=\"body2\" color=\"textSecondary\" align=\"center\">\n      {\"Copyright © \"}\n      <Link color=\"inherit\" href=\"https://nPOD.org/\">\n        nPOD\n      </Link>{\" \"}\n      {new Date().getFullYear()}\n      {\".\"}\n    </Typography>\n  );\n}\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    // minHeight: \"150vh\",\n    backgroundImage: `url(${\n      process.env.PUBLIC_URL + \"/assets/contactPage.png\"\n    })`,\n    backgroundRepeat: \"repeat\",\n    // backgroundSize: \"cover\",\n    display: \"flex\",\n    justifyContent: \"flex-start\",\n  },\n  centerBox: {\n    marginLeft: \"auto\",\n    marginRight: \"auto\",\n    width: \"72%\",\n  },\n  paper: {\n    marginTop: theme.spacing(12),\n    minHeight: \"85vh\",\n    padding: theme.spacing(2),\n    paddingBottom: theme.spacing(15),\n    display: \"flex\",\n    flexDirection: \"column\",\n    alignItems: \"flex-start\",\n    backgroundColor: \"#24282e\",\n  },\n  title: {\n    margin: theme.spacing(5),\n    fontWeight: 600,\n    textTransform: \"uppercase\",\n    color: \"white\",\n  },\n  title2: {\n    margin: theme.spacing(5),\n    fontWeight: 300,\n    textTransform: \"uppercase\",\n    color: \"white\",\n  },\n  cardList: {\n    display: \"flex\",\n    flexWrap: \"wrap\",\n  },\n  card: {\n    marginTop: theme.spacing(1),\n    marginLeft: theme.spacing(7),\n    marginBottom: theme.spacing(1),\n    padding: theme.spacing(2),\n    paddingRight: theme.spacing(3),\n    minWidth: \"450px\",\n    minHeight: \"70px\",\n    backgroundColor: \"#404852\",\n    color: \"white\",\n    borderRadius: \"3px\",\n    boxShadow:\n      \"0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19)\",\n    display: \"flex\",\n    flexDirection: \"row\",\n\n    \"& img\": {\n      height: \"100px\",\n      width: \"100px\",\n      objectFit: \"cover\",\n    },\n  },\n  cardText: {\n    marginLeft: theme.spacing(3),\n    marginTop: \"5px\",\n    display: \"flex\",\n    flexDirection: \"column\",\n  },\n  avatar: {\n    margin: theme.spacing(1),\n    backgroundColor: theme.palette.secondary.main,\n  },\n}));\n\nfunction Contact(props) {\n  const classes = useStyles();\n  return (\n    <div>\n      <AuthHeader location=\"Contact\" />\n      <div className={classes.root}>\n        <div className={classes.centerBox}>\n          <CssBaseline />\n          <Paper className={classes.paper}>\n            <Typography variant=\"h3\" className={classes.title}>\n              Contact Us\n            </Typography>\n\n            <Typography variant=\"h6\" className={classes.title2}>\n              For general information\n            </Typography>\n            <div className={classes.cardList}>\n              <a\n                href=\"mailto:inkusmartseva@ufl.edu\"\n                style={{ textDecoration: \"none\" }}\n              >\n                <div className={classes.card}>\n                  <img\n                    src={`${process.env.PUBLIC_URL}/assets/contactPage/Irina-Kusmartseva.jpg`}\n                    style={{ objectPosition: \"0 0\" }}\n                  />\n                  <div className={classes.cardText}>\n                    <Typography variant=\"h6\">\n                      Irina Kusmartseva, Ph.D\n                    </Typography>\n                    <Typography variant=\"subtitle1\">nPOD Director</Typography>\n                    <Typography variant=\"subtitle1\">\n                      inkusmartseva@ufl.edu\n                    </Typography>\n                  </div>\n                </div>\n              </a>\n              <a\n                href=\"mailto:brittany.pratts@ufl.edu\"\n                style={{ textDecoration: \"none\" }}\n              >\n                <div className={classes.card}>\n                  <img\n                    src={`${process.env.PUBLIC_URL}/assets/contactPage/Brittany-Pratt.jpg`}\n                  />\n                  <div className={classes.cardText}>\n                    <Typography variant=\"h6\">Brittany Pratt, BA</Typography>\n                    <Typography variant=\"subtitle1\">\n                      nPOD Investigator Coordinator\n                    </Typography>\n                    <Typography variant=\"subtitle1\">\n                      brittany.pratts@ufl.edu\n                    </Typography>\n                  </div>\n                </div>\n              </a>\n            </div>\n\n            <Typography variant=\"h6\" className={classes.title2}>\n              For case information, pathology and sample inventory\n            </Typography>\n            <div className={classes.cardList}>\n              <a\n                href=\"mailto:hhiller@ufl.edu\"\n                style={{ textDecoration: \"none\" }}\n              >\n                <div className={classes.card}>\n                  <img\n                    src={`${process.env.PUBLIC_URL}/assets/contactPage/Helmut-Hiller.jpg`}\n                  />\n                  <div className={classes.cardText}>\n                    <Typography variant=\"h6\">Helmut Hiller, MS</Typography>\n                    <Typography variant=\"subtitle1\">\n                      nPOD OPPC Core Research Manager\n                    </Typography>\n                    <Typography variant=\"subtitle1\">hhiller@ufl.edu</Typography>\n                  </div>\n                </div>\n              </a>\n            </div>\n\n            <Typography variant=\"h6\" className={classes.title2}>\n              For data submission\n            </Typography>\n            <div className={classes.cardList}>\n              <a\n                href=\"mailto:Bobbie-Jo.Webb-Robertson@pnnl.gov\"\n                style={{ textDecoration: \"none\" }}\n              >\n                <div className={classes.card}>\n                  <img\n                    src={`${process.env.PUBLIC_URL}/assets/contactPage/Webb-Robertson.png`}\n                    style={{ objectPosition: \"0 10%\" }}\n                  />\n                  <div className={classes.cardText}>\n                    <Typography variant=\"h6\">\n                      Bobbie-Jo Webb-Robertson\n                    </Typography>\n                    <Typography variant=\"body1\">Ph.D</Typography>\n                    <Typography variant=\"body1\">\n                      Bobbie-Jo.Webb-Robertson@pnnl.gov\n                    </Typography>\n                  </div>\n                </div>\n              </a>\n            </div>\n\n            <Typography variant=\"h6\" className={classes.title2}>\n              For technical issues\n            </Typography>\n            <div className={classes.cardList}>\n              <a\n                href=\"mailto:nPOD@pathology.ufl.edu\"\n                style={{ textDecoration: \"none\" }}\n              >\n                <div className={classes.card}>\n                  <ContactMailIcon style={{ fontSize: \"32px\" }} />\n                  <div className={classes.cardText}>\n                    <Typography variant=\"body1\">\n                      nPOD@pathology.ufl.edu\n                    </Typography>\n                  </div>\n                </div>\n              </a>\n            </div>\n          </Paper>\n          <Box mt={8}>\n            <Copyright />\n          </Box>\n        </div>\n      </div>\n    </div>\n  );\n}\n\nexport default Contact;\n","import Contact from \"../component/Contact\";\n\nfunction ContactPage(props) {\n  return (\n    <div>\n      <Contact />\n    </div>\n  );\n}\n\nexport default ContactPage;\n","import React, { useState, useEffect } from \"react\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport EmailOutlinedIcon from \"@material-ui/icons/EmailOutlined\";\nimport Button from \"@material-ui/core/Button\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Box from \"@material-ui/core/Box\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Container from \"@material-ui/core/Container\";\nimport { Auth } from \"@aws-amplify/auth\";\nimport Link from \"@material-ui/core/Link\";\nimport { useParams, useHistory } from \"react-router-dom\";\nimport AuthHeader from \"../component/AuthHeader\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport Fade from \"@material-ui/core/Fade\";\nimport AlertDialog from \"../component/AlertDialog\";\n\nfunction Copyright() {\n  return (\n    <Typography variant=\"body2\" color=\"textSecondary\" align=\"center\">\n      {\"Copyright © \"}\n      <Link color=\"inherit\" href=\"https://nPOD.org/\">\n        nPOD\n      </Link>{\" \"}\n      {new Date().getFullYear()}\n      {\".\"}\n    </Typography>\n  );\n}\n\nconst useStyles = makeStyles((theme) => ({\n  paper: {\n    marginTop: theme.spacing(8),\n    display: \"flex\",\n    flexDirection: \"column\",\n    alignItems: \"center\",\n  },\n  avatar: {\n    margin: theme.spacing(1),\n    backgroundColor: theme.palette.secondary.main,\n  },\n  form: {\n    width: \"100%\", // Fix IE 11 issue.\n    marginTop: theme.spacing(3),\n  },\n  submit: {\n    margin: theme.spacing(3, 0, 2),\n  },\n  alert: {\n    position: \"fixed\",\n    bottom: 0,\n    width: \"100%\",\n  },\n  helperText: {\n    margin: theme.spacing(1, 0, 0),\n    color: \"grey\",\n  },\n}));\n\nexport default function VerifyEmail(props) {\n  const classes = useStyles();\n  const user = (props.location.state && props.location.state.user) || \"\";\n  const [username, setUsername] = useState(\"\");\n  const [code, setCode] = useState(\"\");\n  const [showFail, setShowFail] = useState(false);\n  const [errorMsg, setErrorMsg] = useState(null);\n  const [showSuccess, setShowSuccess] = useState(false);\n  const [successMsg, setSuccessMsg] = useState(null);\n  const [openAlert, setOpenAlert] = useState(false);\n  const [alertTitle, setAlertTitle] = useState(\"Notice\");\n  const [alertContent, setAlertCotent] = useState(\"\");\n  const history = useHistory();\n\n  useEffect(() => {\n    checkAuth();\n  }, []);\n\n  async function checkAuth() {\n    try {\n      const authRes = await Auth.currentAuthenticatedUser();\n      console.log(\"Check auth response \", authRes);\n    } catch (error) {\n      console.log(\"Check Auth error \", error);\n      history.push(\"/\");\n    }\n  }\n\n  const handleSumbit = async function (event) {\n    event.preventDefault();\n    try {\n      const response = await Auth.verifyCurrentUserAttribute(\"email\");\n      console.log(\"Verify email result: \", response);\n      setAlertTitle(\"Verify Notice\");\n      setAlertCotent(\n        \"Sent verification email successfully. Please check your email inbox. You can send another one in 60 seconds if you don't receive it.\"\n      );\n      setOpenAlert(true);\n    } catch (error) {\n      console.log(\"Verify email error: \", error);\n      setErrorMsg(error.message);\n      showAlertHandler(\"fail\");\n      setAlertTitle(\"Verify Email Error\");\n      setAlertCotent(error.message);\n      setOpenAlert(true);\n    }\n  };\n\n  const showAlertHandler = (type) => {\n    if (type === \"fail\") {\n      setShowFail(true);\n      const timer = setTimeout(() => {\n        setShowFail(false);\n      }, 5000);\n    } else if (type == \"success\") {\n      setShowSuccess(true);\n      const timer = setTimeout(() => {\n        setShowSuccess(false);\n      }, 5000);\n    }\n  };\n\n  const handleGoHome = () => {\n    history.push(\"/\");\n  };\n\n  return (\n    <div>\n      <AuthHeader location=\"Verify Email\" />\n\n      <AlertDialog\n        title={alertTitle}\n        contentText={alertContent}\n        open={openAlert}\n        setOpen={setOpenAlert}\n        btn1Name=\"Back\"\n        btn2Name=\"Home\"\n        callBack={handleGoHome}\n      />\n      <Container component=\"main\" maxWidth=\"xs\">\n        <CssBaseline />\n        <div className={classes.paper}>\n          <Avatar className={classes.avatar}>\n            <EmailOutlinedIcon />\n          </Avatar>\n          <Typography component=\"h1\" variant=\"h5\">\n            Verify Your Email\n          </Typography>\n          <form className={classes.form} noValidate onSubmit={handleSumbit}>\n            <Button\n              type=\"submit\"\n              fullWidth\n              variant=\"contained\"\n              color=\"primary\"\n              className={classes.submit}\n            >\n              Send Verification Link\n            </Button>\n            <p className={classes.helperText}>\n              <Typography variant=\"caption\">\n                Click the link in your email inbox to verify your email address\n              </Typography>\n            </p>\n          </form>\n        </div>\n        <Box mt={5}>\n          <Copyright />\n        </Box>\n      </Container>\n      <Fade in={showFail}>\n        <Alert variant=\"filled\" severity=\"error\" className={classes.alert}>\n          {errorMsg || \"Unknown sign up Error.\"}\n        </Alert>\n      </Fade>\n      <Fade in={showSuccess}>\n        <Alert variant=\"filled\" severity=\"success\" className={classes.alert}>\n          {successMsg || \"Success.\"}\n        </Alert>\n      </Fade>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport AuthHeader from \"../component/AuthHeader\";\nimport { Auth } from \"@aws-amplify/auth\";\nimport Container from \"@material-ui/core/Container\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { Typography } from \"@material-ui/core\";\nimport Box from \"@material-ui/core/Box\";\nimport { useHistory } from \"react-router-dom\";\nimport userEvent from \"@testing-library/user-event\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {},\n  notice: {\n    margin: theme.spacing(3, 0, 2),\n    borderRadius: \"10px\",\n    boxShadow: \"1px 1px 10px grey\",\n  },\n  centerBox: {\n    display: \"flex\",\n    flexDirection: \"column\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    height: \"20vh\",\n  },\n  centerMessage: {\n    width: \"20vw\",\n  },\n  countDown: {\n    marginTop: \"10px\",\n  },\n}));\n\nfunction VerifyAttributeWithCode(props) {\n  const classes = useStyles();\n  // const [signedIn, setSignedIn] = useState(false);\n  const [success, setSuccess] = useState(false);\n  const [message, setMessage] = useState(\"Default message\");\n  const [countDowm, setCountDown] = useState(15);\n  const queryParams = new URLSearchParams(window.location.search);\n  const attr = queryParams.get(\"attribute\");\n  const code = queryParams.get(\"verify_code\");\n  const action = queryParams.get(\"action\");\n  const history = useHistory();\n\n  useEffect(() => {\n    if (action === \"verifyattribute\") {\n      handleVerify();\n    } else if (action === \"forgotpassword\") {\n      history.push(\"/resetpassword\", { verify_code: code });\n    }\n  }, []);\n\n  useEffect(() => {\n    countDownHandler();\n    if (countDowm === 0) {\n      history.push(\"/\");\n    }\n  });\n\n  const countDownHandler = () => {\n    const timer = setTimeout(() => {\n      setCountDown(countDowm - 1);\n    }, 1000);\n  };\n\n  const handleVerify = async function () {\n    try {\n      const response = await Auth.verifyCurrentUserAttributeSubmit(attr, code);\n      console.log(\"Verify email result: \", response);\n      setSuccess(true);\n      setMessage(\"Now you can close this window or wait for redirecting.\");\n      await Auth.signOut();\n    } catch (error) {\n      console.log(\"Verify email error: \", error);\n      setSuccess(false);\n      setMessage(\n        error.message +\n          \" Now you can close this window or wait for redirecting.\"\n      );\n    }\n  };\n\n  return (\n    <div>\n      <AuthHeader location=\"Verify Email\" />\n      <Container component=\"main\" maxWidth=\"sm\">\n        <div className={classes.notice}>\n          <Box className={classes.centerBox}>\n            <div className={classes.centerMessage}>\n              {success ? (\n                <Typography variant=\"h6\">\n                  {attr} verification is successful!\n                </Typography>\n              ) : (\n                <Typography variant=\"h6\">\n                  {attr} verification has failed! {message}\n                </Typography>\n              )}\n            </div>\n            <div className={classes.countDown}>\n              Redirect to Home page in {countDowm} seconds...\n            </div>\n          </Box>\n        </div>\n      </Container>\n    </div>\n  );\n}\n\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setSignedIn: (newSignedIn) =>\n      dispatch({ type: \"SET_SIGNEDIN\", value: newSignedIn }),\n  };\n};\n\nexport default connect(mapDispatchToProps)(VerifyAttributeWithCode);\n","import React, { useEffect, useState } from \"react\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport Link from \"@material-ui/core/Link\";\nimport Box from \"@material-ui/core/Box\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Container from \"@material-ui/core/Container\";\nimport AuthHeader from \"..//AuthHeader\";\nimport { Paper } from \"@material-ui/core\";\nimport ReactMarkdown from \"react-markdown\";\n\n// TODO: Remember me function need further implementation.\n// For now, Cognito will let user opt in remembering device.\n\nfunction Copyright() {\n  return (\n    <Typography variant=\"body2\" color=\"textSecondary\" align=\"center\">\n      {\"Copyright © \"}\n      <Link color=\"inherit\" href=\"https://nPOD.org/\">\n        nPOD\n      </Link>{\" \"}\n      {new Date().getFullYear()}\n      {\".\"}\n    </Typography>\n  );\n}\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    minHeight: \"100vh\",\n    backgroundImage: `url(${\n      process.env.PUBLIC_URL + \"/assets/supportPage.jpg\"\n    })`,\n    backgroundRepeat: \"no-repeat\",\n    backgroundSize: \"cover\",\n    //textAlign: \"center\",\n    //backgroundColor: \"#282c34\",\n    //flexDirection: \"column\",\n    //alignItems: \"center\",\n    //justifyContent: \"center\",\n    //color: \"white\",\n    //paddingTop: \"130px\",\n  },\n  paper: {\n    marginTop: theme.spacing(15),\n    paddingTop: theme.spacing(5),\n    paddingBottom: theme.spacing(15),\n    display: \"flex\",\n    flexDirection: \"column\",\n    alignItems: \"center\",\n  },\n  markDown: {\n    paddingTop: theme.spacing(3),\n    paddingBottom: theme.spacing(5),\n    paddingLeft: theme.spacing(15),\n    paddingRight: theme.spacing(15),\n  },\n  container: {\n    display: \"flex\",\n    flexDirection: \"column\",\n  },\n  title: {\n    margin: theme.spacing(5),\n    fontWeight: 600,\n    alignSelf: \"center\",\n    color: \"white\",\n  },\n  copyRight: {\n    marginBottom: \"50px\",\n  },\n  avatar: {\n    margin: theme.spacing(1),\n    backgroundColor: theme.palette.secondary.main,\n  },\n  form: {\n    width: \"100%\", // Fix IE 11 issue.\n    marginTop: theme.spacing(1),\n  },\n  submit: {\n    margin: theme.spacing(3, 0, 2),\n  },\n  alert: {\n    position: \"fixed\",\n    bottom: 0,\n    width: \"100%\",\n  },\n}));\n\nfunction UserAgreement(props) {\n  const classes = useStyles();\n  const [post, setPost] = useState(\"\");\n\n  useEffect(() => {\n    const setTheText = async () => {\n      const fileName = \"userAgreementText\";\n      const file = await import(`./${fileName}.txt`);\n      const response = await fetch(file.default);\n      const text = await response.text();\n      setPost(text);\n    };\n    setTheText();\n  }, []);\n\n  console.log(\"(out of useeffect)md file content\", post);\n  const test_text = \"# sample title\";\n  return (\n    <div>\n      <AuthHeader location=\"UserAgreement\" />\n      <div className={classes.root}>\n        <Container Width=\"md\" maxWidth=\"md\" className={classes.container}>\n          <Paper className={classes.paper}>\n            <h1 align=\"center\">USER AGREEMENT</h1>\n            <h2 align=\"center\">FOR nPOD DATA PORTAL</h2>\n            <ReactMarkdown className={classes.markDown}>{post}</ReactMarkdown>\n          </Paper>\n          <Box mt={8} className={classes.copyRight}>\n            <Copyright />\n          </Box>\n        </Container>\n      </div>\n    </div>\n  );\n}\n\nexport default UserAgreement;\n","import UserAgreement from \"../component/UserAgreement/UserAgreement\";\n\nfunction SupportPage(props) {\n  return (\n    <div>\n      <UserAgreement />\n    </div>\n  );\n}\n\nexport default UserAgreement;\n","import React, { useState, useEffect } from \"react\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport Button from \"@material-ui/core/Button\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Link from \"@material-ui/core/Link\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Box from \"@material-ui/core/Box\";\nimport LockOutlinedIcon from \"@material-ui/icons/LockOutlined\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Container from \"@material-ui/core/Container\";\nimport { Auth } from \"@aws-amplify/auth\";\nimport { useHistory } from \"react-router-dom\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport Visibility from \"@material-ui/icons/Visibility\";\nimport VisibilityOff from \"@material-ui/icons/VisibilityOff\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport Fade from \"@material-ui/core/Fade\";\nimport AuthHeader from \"../component/AuthHeader\";\nimport AlertDialog from \"../component/AlertDialog\";\n\nfunction Copyright() {\n  return (\n    <Typography variant=\"body2\" color=\"textSecondary\" align=\"center\">\n      {\"Copyright © \"}\n      <Link color=\"inherit\" href=\"https://nPOD.org/\">\n        nPOD\n      </Link>{\" \"}\n      {new Date().getFullYear()}\n      {\".\"}\n    </Typography>\n  );\n}\n\nconst useStyles = makeStyles((theme) => ({\n  paper: {\n    marginTop: theme.spacing(8),\n    display: \"flex\",\n    flexDirection: \"column\",\n    alignItems: \"center\",\n  },\n  avatar: {\n    margin: theme.spacing(1),\n    backgroundColor: theme.palette.secondary.main,\n  },\n  form: {\n    width: \"100%\", // Fix IE 11 issue.\n    marginTop: theme.spacing(3),\n  },\n  submit: {\n    margin: theme.spacing(3, 0, 2),\n  },\n  alert: {\n    position: \"fixed\",\n    bottom: 0,\n    width: \"100%\",\n  },\n  passwordHint: {\n    marginTop: \"1px\",\n  },\n  passwordGreen: {\n    color: \"green\",\n    paddingLeft: \"20px\",\n    fontSize: 12,\n  },\n  passwordRed: {\n    color: \"red\",\n    paddingLeft: \"20px\",\n    fontSize: 12,\n  },\n}));\n\nconst initialFormState = {\n  username: \"\",\n  new_password: \"\",\n  re_new_password: \"\",\n};\n\nexport default function ResetPassword(props) {\n  const classes = useStyles();\n  const history = useHistory();\n  const [formState, updateFormState] = useState(initialFormState);\n  const [showNewPassword, setShowNewPassword] = useState(false);\n  const [showReNewPassword, setShowReNewPassword] = useState(false);\n  const [showSuccess, setShowSuccess] = useState(false);\n  const [successMsg, setSuccessMsg] = useState(null);\n  const [showFail, setShowFail] = useState(false);\n  const [errorMsg, setErrorMsg] = useState(null);\n  const [met7Chars, setMet7Chars] = useState(false);\n  const [met1Upper, setMet1Upper] = useState(false);\n  const [met1Lower, setMet1Lower] = useState(false);\n  const [met1Number, setMet1Number] = useState(false);\n  const [met1Special, setMet1Special] = useState(false);\n  const [rePasswordMatch, setRePasswordMatch] = useState(false);\n  const [openAlert, setOpenAlert] = useState(false);\n  const [alertTitle, setAlertTitle] = useState(\"Notice\");\n  const [alertContent, setAlertCotent] = useState(\"\");\n\n  const handleSumbitSetNewPassword = async function (event) {\n    event.preventDefault();\n    const { username, new_password, re_new_password } = formState;\n    const verify_code =\n      (props.location.state && props.location.state.verify_code) || null;\n    console.log(\n      \"username: \" +\n        username +\n        \"\\r\\n\" +\n        \"password: \" +\n        new_password +\n        \"\\r\\n\" +\n        \"re password: \" +\n        re_new_password +\n        \"\\r\\n\" +\n        \"verify code: \" +\n        verify_code\n    );\n    try {\n      if (\n        username === null ||\n        username.length < 1 ||\n        new_password === null ||\n        new_password.length < 1 ||\n        re_new_password === null ||\n        re_new_password.length < 1\n      ) {\n        throw \"Error: All fields are required to fill!\";\n      }\n    } catch (error) {\n      console.log(error);\n      setErrorMsg(error);\n      showAlertHandler(\"fail\");\n      setAlertTitle(\"Reset Password Error\");\n      setAlertCotent(error);\n      setOpenAlert(true);\n      return;\n    }\n    try {\n      if (!(met7Chars && met1Upper && met1Lower && met1Number && met1Special))\n        throw \"Error: Password is not qualifed! Please choose another one\";\n    } catch (error) {\n      console.log(error);\n      setErrorMsg(error);\n      showAlertHandler(\"fail\");\n      setAlertTitle(\"Reset Password Error\");\n      setAlertCotent(error);\n      setOpenAlert(true);\n      return;\n    }\n    try {\n      if (!rePasswordMatch || new_password !== re_new_password)\n        throw \"Error: Re-input password not matched\";\n    } catch (error) {\n      console.log(error);\n      setErrorMsg(error);\n      showAlertHandler(\"fail\");\n      setAlertTitle(\"Reset Password Error\");\n      setAlertCotent(error);\n      setOpenAlert(true);\n      return;\n    }\n\n    try {\n      const response = await Auth.forgotPasswordSubmit(\n        username,\n        verify_code,\n        new_password\n      );\n      console.log(\"Reset Password response: \", response);\n      setSuccessMsg(\"Password reset is successful! Please sign in\");\n      showAlertHandler(\"success\");\n      setAlertTitle(\"Reset Password Notice\");\n      setAlertCotent(\"Password reset is successful!\");\n      setOpenAlert(true);\n    } catch (error) {\n      console.log(\"Reset New Password error: \", error.message);\n\n      let error_msg = error.message;\n      if (error_msg.includes(\"code\")) {\n        error_msg =\n          \"Verification link has been expired, please proceed 'Forgot password' again.\";\n      }\n      setAlertCotent(\"Password reset error: \" + error_msg);\n      setOpenAlert(true);\n      setErrorMsg(error_msg);\n      showAlertHandler(\"fail\");\n      setAlertTitle(\"Reset Password Error\");\n    }\n    return;\n  };\n\n  const showAlertHandler = (type) => {\n    if (type === \"success\") {\n      setShowSuccess(true);\n      const timer = setTimeout(() => {\n        setShowSuccess(false);\n      }, 5000);\n    } else if (type === \"fail\") {\n      setShowFail(true);\n      const timer = setTimeout(() => {\n        setShowFail(false);\n      }, 5000);\n    }\n  };\n\n  const handleClickShowNewPassword = () => {\n    setShowNewPassword(!showNewPassword);\n  };\n\n  const handleClickShowReNewPassword = () => {\n    setShowReNewPassword(!showReNewPassword);\n  };\n\n  const handleChange = (event) => {\n    event.persist();\n    updateFormState(() => ({\n      ...formState,\n      [event.target.name]: event.target.value,\n    }));\n    if (event.target.name === \"new_password\") {\n      handlePasswordCheck(event.target.value);\n      if (event.target.value !== formState.re_new_password) {\n        setRePasswordMatch(false);\n      } else {\n        setRePasswordMatch(true);\n      }\n    }\n    if (event.target.name === \"re_new_password\") {\n      handleRePasswordCheck(event.target.value);\n    }\n  };\n\n  const handlePasswordCheck = (value) => {\n    const newVal = value;\n    var re1 = /.{7,}$/;\n    if (re1.test(newVal)) {\n      setMet7Chars(true);\n    } else {\n      setMet7Chars(false);\n    }\n    var re2 = /[A-Z]/;\n    if (re2.test(newVal)) {\n      setMet1Upper(true);\n    } else {\n      setMet1Upper(false);\n    }\n    var re3 = /[a-z]/;\n    if (re3.test(newVal)) {\n      setMet1Lower(true);\n    } else {\n      setMet1Lower(false);\n    }\n    var re4 = /[0-9]/;\n    if (re4.test(newVal)) {\n      setMet1Number(true);\n    } else {\n      setMet1Number(false);\n    }\n    var re5 = /[!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]/;\n    if (re5.test(newVal)) {\n      setMet1Special(true);\n    } else {\n      setMet1Special(false);\n    }\n  };\n\n  const handleRePasswordCheck = (value) => {\n    const newVal = value;\n    if (newVal === formState.new_password) {\n      setRePasswordMatch(true);\n    } else {\n      setRePasswordMatch(false);\n    }\n  };\n\n  const handleGoHome = () => {\n    history.push(\"/\");\n  };\n\n  return (\n    <div>\n      <AuthHeader location=\"Reset Password\" />\n      <AlertDialog\n        title={alertTitle}\n        contentText={alertContent}\n        open={openAlert}\n        setOpen={setOpenAlert}\n        btn1Name=\"Back\"\n        btn2Name=\"Home\"\n        callBack={handleGoHome}\n      />\n      <div>\n        <Container component=\"main\" maxWidth=\"xs\">\n          <CssBaseline />\n          <div className={classes.paper}>\n            <Avatar className={classes.avatar}>\n              <LockOutlinedIcon />\n            </Avatar>\n            <Typography component=\"h1\" variant=\"h5\">\n              Reset Password\n            </Typography>\n            <form\n              className={classes.form}\n              noValidate\n              onSubmit={handleSumbitSetNewPassword}\n            >\n              <Grid container spacing={2}>\n                <Grid item xs={12}>\n                  <TextField\n                    variant=\"outlined\"\n                    margin=\"normal\"\n                    required\n                    fullWidth\n                    id=\"username\"\n                    label=\"Username\"\n                    name=\"username\"\n                    onChange={handleChange}\n                  />\n                </Grid>\n                <Grid item xs={12}>\n                  <TextField\n                    variant=\"outlined\"\n                    required\n                    fullWidth\n                    name=\"new_password\"\n                    label=\"New Password\"\n                    type={showNewPassword ? \"text\" : \"password\"}\n                    id=\"new_password\"\n                    onChange={handleChange}\n                    InputProps={{\n                      endAdornment: (\n                        <InputAdornment position=\"end\">\n                          <IconButton\n                            aria-label=\"toggle password visibility\"\n                            onClick={handleClickShowNewPassword}\n                            edge=\"end\"\n                          >\n                            {showNewPassword ? (\n                              <Visibility />\n                            ) : (\n                              <VisibilityOff />\n                            )}\n                          </IconButton>\n                        </InputAdornment>\n                      ),\n                    }}\n                  />\n                </Grid>\n                <Grid item xs={12}>\n                  <Typography>\n                    <p\n                      style={{ fontSize: 12 }}\n                      className={classes.passwordHint}\n                    >\n                      Password requirement: <br></br>\n                      <span\n                        className={\n                          met7Chars\n                            ? classes.passwordGreen\n                            : classes.passwordRed\n                        }\n                      >\n                        At least 7 characters long\n                      </span>\n                      <br></br>\n                      <span\n                        className={\n                          met1Upper\n                            ? classes.passwordGreen\n                            : classes.passwordRed\n                        }\n                      >\n                        Includes at least 1 UPPERCASE alphbet character\n                      </span>\n                      <br></br>\n                      <span\n                        className={\n                          met1Lower\n                            ? classes.passwordGreen\n                            : classes.passwordRed\n                        }\n                      >\n                        Includes at least 1 lowercase alphbet character\n                      </span>\n                      <br></br>\n                      <span\n                        className={\n                          met1Number\n                            ? classes.passwordGreen\n                            : classes.passwordRed\n                        }\n                      >\n                        Includes at least 1 number\n                      </span>\n                      <br></br>\n                      <span\n                        className={\n                          met1Special\n                            ? classes.passwordGreen\n                            : classes.passwordRed\n                        }\n                      >\n                        Includes at least 1 special sign from ! @ # $ % ^ & * (\n                        ) _ + - = [ ] &#123; &#125; ; ' : \" \\ | , . &#60; &#62;\n                        / ?\n                      </span>\n                      <br></br>\n                    </p>\n                  </Typography>\n                </Grid>\n                <Grid item xs={12}>\n                  <TextField\n                    variant=\"outlined\"\n                    required\n                    fullWidth\n                    name=\"re_new_password\"\n                    label=\"Re-input New Password\"\n                    type={showReNewPassword ? \"text\" : \"password\"}\n                    id=\"re_new_password\"\n                    onChange={handleChange}\n                    InputProps={{\n                      endAdornment: (\n                        <InputAdornment position=\"end\">\n                          <IconButton\n                            aria-label=\"toggle password visibility\"\n                            onClick={handleClickShowReNewPassword}\n                            edge=\"end\"\n                          >\n                            {showReNewPassword ? (\n                              <Visibility />\n                            ) : (\n                              <VisibilityOff />\n                            )}\n                          </IconButton>\n                        </InputAdornment>\n                      ),\n                    }}\n                  />\n                </Grid>\n              </Grid>\n              <Grid item xs={12}>\n                {rePasswordMatch ? (\n                  <p\n                    className={classes.passwordGreen}\n                    style={{ marginTop: \"1px\" }}\n                  >\n                    Re-input password matched.\n                  </p>\n                ) : (\n                  <p\n                    className={classes.passwordRed}\n                    style={{ marginTop: \"1px\" }}\n                  >\n                    Re-input password not matched.\n                  </p>\n                )}\n              </Grid>\n              <Button\n                type=\"submit\"\n                fullWidth\n                variant=\"contained\"\n                color=\"primary\"\n                className={classes.submit}\n              >\n                Set New Password\n              </Button>\n              <Grid container justify=\"flex-end\">\n                <Grid item>\n                  <Link href=\"signin\" variant=\"body2\">\n                    Already have an account? Sign in\n                  </Link>\n                </Grid>\n              </Grid>\n            </form>\n          </div>\n          <Box mt={5}>\n            <Copyright />\n          </Box>\n        </Container>\n      </div>\n      <Fade in={showSuccess}>\n        <Alert variant=\"filled\" severity=\"success\" className={classes.alert}>\n          {successMsg || \"Success\"}\n        </Alert>\n      </Fade>\n      <Fade in={showFail}>\n        <Alert variant=\"filled\" severity=\"error\" className={classes.alert}>\n          {errorMsg || \"Unknown error\"}\n        </Alert>\n      </Fade>\n    </div>\n  );\n}\n","import UsefulResources from \"../component/UsefulResources/UsefulResources\";\n\nfunction UsefulResourcesPage(props) {\n  return (\n    <div>\n      <UsefulResources />\n    </div>\n  );\n}\n\nexport default UsefulResourcesPage;\n","import React, { useState, useEffect } from \"react\";\nimport {\n  Container,\n  FormControlLabel,\n  Box,\n  Checkbox,\n  FormControl,\n  FormLabel,\n  FormGroup,\n  Chip,\n  Autocomplete,\n  TextField,\n  Typography,\n} from \"@mui/material\";\n\nexport default function Filter() {\n  const url = new URL(window.location.href);\n  const searchParameters = new URLSearchParams(url.search);\n\n  const baseUrl = url.origin + url.pathname;\n\n  const setFilterValue = (params, filterName) => {\n    for (const [name, value] of params.entries()) {\n      const optList = JSON.parse(value);\n      const selectedObj = optList.reduce((obj, item) => {\n        obj[item] = true;\n        return obj;\n      }, {});\n      if (name === filterName) {\n        return selectedObj;\n      }\n    }\n    return {};\n  };\n\n  const type = setFilterValue(searchParameters, \"type\");\n  const category = setFilterValue(searchParameters, \"category\");\n  const published = setFilterValue(searchParameters, \"published\");\n\n  const generateQueryParameters = (typeObj, categoryObj, publishedObj) => {\n    let qp = \"\";\n    let typeQuery = \"[\";\n    for (const [name, value] of Object.entries(typeObj)) {\n      if (value) {\n        if (typeQuery.length > 1) {\n          typeQuery = typeQuery + \",\";\n        }\n        typeQuery = typeQuery + '\"' + name + '\"';\n      }\n    }\n    typeQuery = \"type=\" + typeQuery + \"]\";\n\n    let categoryQuery = \"[\";\n    for (const [name, value] of Object.entries(categoryObj)) {\n      if (value) {\n        if (categoryQuery.length > 1) {\n          categoryQuery = categoryQuery + \",\";\n        }\n        categoryQuery = categoryQuery + '\"' + name + '\"';\n      }\n    }\n    categoryQuery = \"category=\" + categoryQuery + \"]\";\n\n    let publishedQuery = \"[\";\n    for (const [name, value] of Object.entries(publishedObj)) {\n      if (value) {\n        if (publishedQuery.length > 1) {\n          publishedQuery = publishedQuery + \",\";\n        }\n        publishedQuery = publishedQuery + '\"' + name + '\"';\n      }\n    }\n    publishedQuery = \"published=\" + publishedQuery + \"]\";\n\n    qp = typeQuery + \"&\" + categoryQuery + \"&\" + publishedQuery;\n    return qp;\n  };\n\n  // Type filter\n\n  const handleTypeChange = (event) => {\n    let newType = { ...type };\n    newType[event.target.name] = event.target.checked;\n    let newQueryParameters = generateQueryParameters(\n      newType,\n      category,\n      published\n    );\n    console.log(\"new query params\", newQueryParameters);\n    window.location.href = url.pathname + \"?\" + newQueryParameters;\n  };\n\n  // Category filter\n\n  const handleCategoryChange = (event) => {\n    let newCategory = { ...category };\n    newCategory[event.target.name] = event.target.checked;\n    let newQueryParameters = generateQueryParameters(\n      type,\n      newCategory,\n      published\n    );\n    console.log(\"new query params\", newQueryParameters);\n    window.location.href = url.pathname + \"?\" + newQueryParameters;\n  };\n\n  // Published filter\n  const handlePublishedChange = (event) => {\n    let newPublished = { ...published };\n    newPublished[event.target.name] = event.target.checked;\n    let newQueryParameters = generateQueryParameters(\n      type,\n      category,\n      newPublished\n    );\n    console.log(\"new query params\", newQueryParameters);\n    window.location.href = url.pathname + \"?\" + newQueryParameters;\n  };\n\n  // Case ID filter\n  const [caseId, setCaseId] = useState([]);\n  const handleCaseIdChange = (event) => {\n    console.log(\"event name\", event.name);\n    console.log(\"event target value\", event.target.value);\n  };\n\n  useEffect(() => {\n    if (searchParameters.toString() === \"\") {\n      const initType = {\n        genetics: true,\n        transcriptomics: true,\n        proteomics: true,\n        metabolomics: true,\n        other: true,\n      };\n\n      const initCategory = {\n        investigator: true,\n        npod: true,\n      };\n\n      const initPublished = {\n        yes: true,\n        no: true,\n      };\n\n      const initQueryParameters = generateQueryParameters(\n        initType,\n        initCategory,\n        initPublished\n      );\n      console.log(\"init parameters\", initQueryParameters);\n      window.location.href = url.pathname + \"?\" + initQueryParameters;\n    }\n  }, []);\n\n  const usageSubFilter = (\n    <Box sx={{ display: \"flex\", flexDirection: \"column\" }}>\n      {/* ------Type filter------ */}\n      <FormControl sx={{ m: 3 }}>\n        <FormLabel>Type</FormLabel>\n        <FormGroup sx={{ ml: 2 }}>\n          <FormControlLabel\n            label=\"Genetics\"\n            control={\n              <Checkbox\n                checked={\"genetics\" in type ? type.genetics : false}\n                onChange={handleTypeChange}\n                name=\"genetics\"\n              />\n            }\n          />\n          <FormControlLabel\n            label=\"Transcriptomics\"\n            control={\n              <Checkbox\n                checked={\n                  \"transcriptomics\" in type ? type.transcriptomics : false\n                }\n                onChange={handleTypeChange}\n                name=\"transcriptomics\"\n              />\n            }\n          />\n          <FormControlLabel\n            label=\"Proteomics\"\n            control={\n              <Checkbox\n                checked={\"proteomics\" in type ? type.proteomics : false}\n                onChange={handleTypeChange}\n                name=\"proteomics\"\n              />\n            }\n          />\n          <FormControlLabel\n            label=\"Metabolomics\"\n            control={\n              <Checkbox\n                checked={\"metabolomics\" in type ? type.metabolomics : false}\n                onChange={handleTypeChange}\n                name=\"metabolomics\"\n              />\n            }\n          />\n          <FormControlLabel\n            label=\"Other\"\n            control={\n              <Checkbox\n                checked={\"other\" in type ? type.other : false}\n                onChange={handleTypeChange}\n                name=\"other\"\n              />\n            }\n          />\n        </FormGroup>\n      </FormControl>\n      {/* ------Category filter------ */}\n      <FormControl sx={{ m: 3 }}>\n        <FormLabel>Category</FormLabel>\n        <FormGroup sx={{ ml: 2 }}>\n          <FormControlLabel\n            label=\"Investigator\"\n            control={\n              <Checkbox\n                checked={\n                  \"investigator\" in category ? category.investigator : false\n                }\n                onChange={handleCategoryChange}\n                name=\"investigator\"\n              />\n            }\n          />\n          <FormControlLabel\n            label=\"nPOD\"\n            control={\n              <Checkbox\n                checked={\"npod\" in category ? category.npod : false}\n                onChange={handleCategoryChange}\n                name=\"npod\"\n              />\n            }\n          />\n        </FormGroup>\n      </FormControl>\n      {/* ------Published filter------ */}\n      <FormControl sx={{ m: 3 }}>\n        <FormLabel>Published</FormLabel>\n        <FormGroup sx={{ ml: 2 }}>\n          <FormControlLabel\n            label=\"Yes\"\n            control={\n              <Checkbox\n                checked={\"yes\" in published ? published.yes : false}\n                onChange={handlePublishedChange}\n                name=\"yes\"\n              />\n            }\n          />\n          <FormControlLabel\n            label=\"No\"\n            control={\n              <Checkbox\n                checked={\"no\" in published ? published.no : false}\n                onChange={handlePublishedChange}\n                name=\"no\"\n              />\n            }\n          />\n        </FormGroup>\n      </FormControl>\n      {/* ------Case ID filter------ */}\n      {/* <FormControl sx={{ m: 3 }}>\n        <FormLabel>Case ID</FormLabel>\n        <Autocomplete\n          sx={{ paddingLeft: 2 }}\n          multiple\n          id=\"case-id-filter\"\n          options={[\n            { name: 6110 },\n            { name: 6111 },\n            { name: 6112 },\n            { name: 6113 },\n          ]}\n          getOptionLabel={(option) => option.name}\n          // defaultValue={[caseIdOptions[0]]}\n          renderInput={(params) => (\n            <TextField\n              {...params}\n              variant=\"standard\"\n              label=\"Specify Case ID\"\n              placeholder=\"Select or type Case ID\"\n            />\n          )}\n        />\n      </FormControl> */}\n    </Box>\n  );\n\n  return <Container maxWidth=\"md\">{usageSubFilter}</Container>;\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useRetrieveAllDatasets(\n  setDatasetObj,\n  setDatasetRetrieveSuccess,\n  setDatasetRetrieveFail\n) {\n  useEffect(() => {\n    const customizedCond = parseUrlParamsToApiCondObj();\n    if (\n      customizedCond.hasOwnProperty(\"value\") &&\n      Array.isArray(customizedCond.value) &&\n      customizedCond.value.length !== 0\n    ) {\n      getDatasetsByConditions(customizedCond);\n    } else {\n      getAllDatasets();\n    }\n  }, []);\n\n  function parseUrlParamsToApiCondObj() {\n    let apiCondObj = { ...templateParentAndCondition };\n    const url = new URL(window.location.href);\n    const searchParameters = new URLSearchParams(url.search);\n    for (const [name, value] of searchParameters.entries()) {\n      const filterValueArr = JSON.parse(value);\n      if (name === \"type\") {\n        const typeFilterObj = JSON.parse(\n          JSON.stringify(templateParentOrCondition)\n        );\n        filterValueArr.forEach((filterValue) => {\n          if (filterValue === \"other\") {\n            const currFilterObj = { ...templateChildNotInCondition };\n            currFilterObj.name = \"dataset_type\";\n            currFilterObj.value =\n              \"('genetics', 'transcriptomics', 'metabolomics', 'proteomics')\";\n            typeFilterObj.value.push(currFilterObj);\n          } else {\n            const currFilterObj = { ...templateChildEqualCondition };\n            currFilterObj.name = \"dataset_type\";\n            currFilterObj.value = filterValue;\n            typeFilterObj.value.push(currFilterObj);\n          }\n        });\n        apiCondObj.value.push(typeFilterObj);\n      }\n      if (name === \"category\") {\n        const categoryFilterObj = JSON.parse(\n          JSON.stringify(templateParentOrCondition)\n        );\n        filterValueArr.forEach((filterValue) => {\n          const currFilterObj = { ...templateChildEqualCondition };\n          currFilterObj.name = name;\n          currFilterObj.value = filterValue;\n          categoryFilterObj.value.push(currFilterObj);\n        });\n        apiCondObj.value.push(categoryFilterObj);\n      }\n\n      if (name === \"published\") {\n        const publishedFilterObj = JSON.parse(\n          JSON.stringify(templateParentOrCondition)\n        );\n        filterValueArr.forEach((filterValue) => {\n          const currFilterObj = { ...templateChildEqualCondition };\n          currFilterObj.name = name;\n          currFilterObj.value = filterValue === \"yes\" ? \"1\" : \"0\";\n          publishedFilterObj.value.push(currFilterObj);\n        });\n        apiCondObj.value.push(publishedFilterObj);\n      }\n    }\n    console.log(\"api condition object\", apiCondObj);\n    return apiCondObj;\n  }\n\n  const templateParentAndCondition = {\n    name: \"LOGIC_CONNECT\",\n    operator: \"AND\",\n    value: [],\n  };\n\n  const templateParentOrCondition = {\n    name: \"LOGIC_CONNECT\",\n    operator: \"OR\",\n    value: [],\n  };\n\n  const templateChildEqualCondition = {\n    name: \"\",\n    operator: \"=\",\n    value: null,\n  };\n\n  const templateChildNotInCondition = {\n    name: \"\",\n    operator: \"NOT IN\",\n    value: \"\",\n  };\n\n  async function getAllDatasets() {\n    const nowTime = new Date().toLocaleString().replace(\",\", \"\");\n    console.log(\"Retrieving all datasets...\");\n    return await API.get(\"dbapi\", \"/db/datasets\", {})\n      .then((res) => {\n        console.log(\"Retrieve all dataset success!\", res);\n        setDatasetObj(res);\n        setDatasetRetrieveSuccess(\"Retrieve Dataset create success!\");\n        setDatasetRetrieveFail(null);\n      })\n      .catch((error) => {\n        console.log(\"New Dataset Create fail\", error);\n        setDatasetRetrieveSuccess(null);\n        setDatasetRetrieveFail(\"Retrieve Dataset Create fail\" + error);\n      });\n  }\n\n  async function getDatasetsByConditions(theConditions) {\n    const nowTime = new Date().toLocaleString().replace(\",\", \"\");\n    console.log(\"Retrieving datasets by conditions...\");\n    return await API.put(\"dbapi\", \"/db/get_data_by_conditions\", {\n      body: {\n        table_name: \"dataset\",\n        conditions: theConditions,\n      },\n    })\n      .then((res) => {\n        console.log(\"Retrieve all dataset success!\", res);\n        setDatasetObj(res);\n        setDatasetRetrieveSuccess(\"Retrieve Dataset create success!\");\n        setDatasetRetrieveFail(null);\n      })\n      .catch((error) => {\n        console.log(\"New Dataset Create fail\", error);\n        setDatasetRetrieveSuccess(null);\n        setDatasetRetrieveFail(\"Retrieve Dataset Create fail\" + error);\n      });\n  }\n}\n","import React, { useState } from \"react\";\nimport { Box, Paper, Typography } from \"@mui/material\";\nimport useRetrieveAllDatasets from \"./component/useRetrieveAllDatasets\";\n\nconst Card = ({\n  datasetName,\n  pi,\n  unqiueCaseNumber,\n  datasetType,\n  description,\n}) => (\n  <Paper\n    elevation={12}\n    sx={{\n      marginLeft: 3,\n      marginRight: 3,\n      marginBottom: 3,\n      outlineOffset: \"-3px\",\n      \"&:hover\": {\n        // borderColor: \"grey\",\n        // borderStyle: \"solid\",\n        // borderWidth: \"1px\",\n        color: \"blue\",\n        fontWeight: \"bold\",\n        cursor: \"pointer\",\n      },\n    }}\n  >\n    <Box sx={{ padding: 3 }}>\n      <Box>\n        <Typography variant=\"h5\">{datasetName}</Typography>\n      </Box>\n      <Box>\n        <Typography variant=\"body1\" color=\"black\">\n          PI: {pi}\n        </Typography>\n      </Box>\n      <Box>\n        <Typography variant=\"body1\" color=\"black\">\n          Unique Cases: {unqiueCaseNumber}\n        </Typography>\n      </Box>\n      <Box>\n        <Typography variant=\"body1\" color=\"black\">\n          Dataset Type: {datasetType}\n        </Typography>\n      </Box>\n      <Box>\n        <Typography variant=\"body2\" color=\"black\">\n          Description: {description}\n        </Typography>\n      </Box>\n    </Box>\n  </Paper>\n);\n\nexport default function DatasetCardList({ filterSelected }) {\n  const [datasetObj, setDatasetObj] = useState(null);\n  const [datasetRetrieveSuccess, setDatasetRetrieveSuccess] = useState(null);\n  const [datasetRetrieveFail, setDatasetRetrieveFail] = useState(null);\n  useRetrieveAllDatasets(\n    setDatasetObj,\n    setDatasetRetrieveSuccess,\n    setDatasetRetrieveFail\n  );\n  console.log(\"all dataset\", datasetObj);\n\n  return (\n    <div style={{ paddingTop: \"3vh\" }}>\n      {datasetObj !== null\n        ? datasetObj\n            // .filter((item) => filterSelected[\"usageFilter\"][item.tag])\n            .map((item, key) => (\n              <div\n                key={key}\n                onClick={() => {\n                  window.open(\n                    `${window.location.origin}/dataset-display/${item.dataset_id}`\n                  );\n                }}\n              >\n                <Card\n                  id={key}\n                  datasetName={item.dataset_name}\n                  pi={item.pi}\n                  unqiueCaseNumber={item.number_of_unique_cases}\n                  datasetType={item.dataset_type}\n                  description={item.description}\n                />\n              </div>\n            ))\n        : null}\n    </div>\n\n    // <Card\n    //   name=\"first dataset\"\n    //   identifier=\"group-1\"\n    //   description=\"abcdefg...\"\n    // ></Card>\n  );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { styled } from \"@mui/material/styles\";\nimport Box from \"@mui/material/Box\";\nimport Paper from \"@mui/material/Paper\";\nimport Grid from \"@mui/material/Grid\";\nimport Button from \"@mui/material/Button\";\nimport Filter from \"./component/Filter\";\nimport DatasetCardList from \"./component/DatasetCardList\";\n\nconst PaperPanel = styled(Paper)(({ theme }) => ({\n  ...theme.typography.body2,\n  padding: theme.spacing(1),\n  //textAlign: \"center\",\n}));\n\nexport default function DatasetExplore() {\n  const [filterSelected, setFilterSelected] = useState({\n    type: {},\n    category: {},\n  });\n\n  const convertFilterToPathParams = (filtersCollection) => {\n    let pathParams = \"?\";\n    Object.keys(filtersCollection).forEach((filterName) => {\n      const currFilter = filtersCollection[filterName];\n      Object.keys(currFilter)\n        .filter((filterKey) => currFilter[filterKey] === true)\n        .forEach((selectedKey) => {\n          if (pathParams.length > 1) {\n            pathParams = pathParams + \"&\";\n          }\n          pathParams = pathParams + filterName + \"=\" + selectedKey;\n        });\n    });\n    console.log(\"path params\", pathParams);\n    return pathParams;\n  };\n\n  // useEffect(() => {\n  //   setCurrPathParams(convertFilterToPathParams(filterSelected));\n\n  //   console.log(\"current path params\", currPathParams);\n  // }, [filterSelected]);\n\n  // useEffect(() => {\n  //   window.history.pushState(null, \"\", `${currPathParams}`);\n  // }, [currPathParams]);\n\n  const postObj = {\n    name: \"\",\n    identifier: \"\",\n    description: \"\",\n    tag: \"\",\n    usage: \"\",\n    dataType: \"\",\n  };\n  //console.log(\"filter selected\", filterSelected);\n\n  return (\n    <Box\n      sx={{\n        //flexGrow: 1,\n\n        paddingBottom: 2,\n        backgroundImage: `url(${\n          process.env.PUBLIC_URL + \"/assets/caseExplorePage.jpg\"\n        })`,\n        // backgroundSize: \"auto 100%\",\n        backgroundSize: \"cover\",\n        width: \"100%\",\n        minHeight: \"100vh\",\n        backgroundAttachment: \"fixed\",\n        backgroundPosition: \"center\",\n      }}\n    >\n      <Paper\n        sx={{\n          flexGrow: 1,\n          backgroundColor: \"black\",\n          padding: 5,\n          color: \"white\",\n          fontSize: 48,\n        }}\n      >\n        Explore Omics Datasets\n      </Paper>\n      <Grid container spacing={2} sx={{ padding: 5 }}>\n        <Grid item xs={2} md={3}>\n          <PaperPanel>\n            <Filter />\n          </PaperPanel>\n        </Grid>\n        <Grid item xs={6} md={8}>\n          <PaperPanel>\n            <Button\n              variant=\"contained\"\n              component=\"label\"\n              sx={{ marginTop: 3, marginLeft: 3 }}\n              onClick={() =>\n                window.open(`${window.location.origin}/dataset-manage`)\n              }\n            >\n              View Your Datasets\n            </Button>\n            <DatasetCardList filterSelected={filterSelected} />\n          </PaperPanel>\n        </Grid>\n      </Grid>\n    </Box>\n  );\n}\n","import React, { useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { Auth } from \"aws-amplify\";\nimport { connect } from \"react-redux\";\nimport DatasetExplore from \"../component/Dataset/DatasetExplore/DatasetExplore\";\n\nfunction DatasetExplorePage(props) {\n  const history = useHistory();\n  useEffect(() => {\n    checkAuth();\n  }, []);\n\n  async function checkAuth() {\n    try {\n      const authRes = await Auth.currentAuthenticatedUser();\n      console.log(\"Check auth response \", authRes);\n      console.log(\n        \"user group\",\n        authRes.signInUserSession.accessToken.payload[\"cognito:groups\"]\n      );\n      if (\"cognito:groups\" in authRes.signInUserSession.accessToken.payload) {\n        if (\n          authRes.signInUserSession.accessToken.payload[\n            \"cognito:groups\"\n          ].includes(\"dataset_user\") ||\n          authRes.signInUserSession.accessToken.payload[\n            \"cognito:groups\"\n          ].includes(\"admin\")\n        ) {\n          console.log(\"Welcome to dataset page!\");\n        } else {\n          history.push(\"/\");\n          console.log(\n            \"Dataset page accessing is failed, since you are not dataset user.\"\n          );\n        }\n      }\n    } catch (error) {\n      console.log(error);\n      history.push(\"/signin\");\n    }\n  }\n\n  return <div>{props.signedIn ? <DatasetExplore /> : null}</div>;\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    signedIn: state.auth.signedIn,\n  };\n};\n\nexport default connect(mapStateToProps)(DatasetExplorePage);\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth, Storage } from \"aws-amplify\";\n\nexport default function useCreateDataset(\n  values,\n  submitButtonClicked,\n  setDatasetCreateSuccess,\n  setDatasetCreateFail,\n  caseIdentifierData,\n  exampleDataFile\n) {\n  const [latestDatasetId, setLatestDatasetId] = useState(null);\n  useEffect(() => {\n    if (values !== null && submitButtonClicked !== 0) {\n      createDataset(values, caseIdentifierData.length);\n    }\n  }, [submitButtonClicked]);\n\n  useEffect(() => {\n    if (latestDatasetId !== null) {\n      createCaseIdentifier(caseIdentifierData, latestDatasetId);\n      if (exampleDataFile !== null) {\n        createExampleDataFile(exampleDataFile, latestDatasetId);\n      }\n    }\n  }, [latestDatasetId]);\n\n  console.log(\"the latest dataset id\", latestDatasetId);\n\n  async function createDataset(allValues, uniqueCaseNum) {\n    const nowTime = new Date().toISOString().slice(0, 19).replace(\"T\", \" \");\n    console.log(\"Creating new dataset...\");\n    return await API.post(\"dbapi\", \"/db/create_dataset\", {\n      body: {\n        datasetObj: {\n          author: allValues.author,\n          pi: allValues.pi,\n          pi_email: allValues.piEmail,\n          poc: allValues.poc,\n          poc_email: allValues.pocEmail,\n          dataset_name: allValues.datasetName,\n          description: allValues.description,\n          number_of_analyses: allValues.numberOfAnalyses,\n          published: allValues.published,\n          publication_link: allValues.publicationLink,\n          pm_id: allValues.pmId,\n          dataset_type: allValues.datasetType,\n          raw_data_file_link: allValues.rawDataFileLink,\n          number_of_unique_cases: uniqueCaseNum,\n          created_time: nowTime,\n          updated_time: nowTime,\n        },\n      },\n    })\n      .then((res) => {\n        console.log(\"New Dataset create success!\", res);\n        try {\n          setLatestDatasetId(res[1][0][\"LAST_INSERT_ID()\"]);\n        } catch (err) {\n          console.log(\"setting latest dataset ID error\", err);\n        }\n        setDatasetCreateSuccess(\"New Dataset create success!\");\n        setDatasetCreateFail(null);\n      })\n      .catch((error) => {\n        console.log(\"New Dataset Create fail\", error);\n        setDatasetCreateSuccess(null);\n        setDatasetCreateFail(\"New Dataset Create fail\" + error);\n      });\n  }\n\n  async function createCaseIdentifier(caseIdObjList, currCaseId) {\n    console.log(\"Creating new case identifier...\");\n    let dciObjList = [];\n    for (let i = 0; i < caseIdObjList.length; i++) {\n      let newObj = {};\n      try {\n        newObj[\"dataset_id\"] = currCaseId;\n        newObj[\"case_id\"] = caseIdObjList[i][\"Case_ID\"];\n        newObj[\"data_file_id\"] = caseIdObjList[i][\"Data_File_ID\"];\n        newObj[\"sample_type\"] = caseIdObjList[i][\"Sample_Type\"];\n        dciObjList.push(newObj);\n      } catch (err) {\n        console.log(\"[Error] Imported case identifier file\", err);\n        return;\n      }\n    }\n    console.log(\"dciObjList waiting to post\", dciObjList);\n    return await API.post(\"dbapi\", \"/db/create_dataset_case_identifier\", {\n      body: {\n        datasetCaseIdentifierObjList: dciObjList,\n      },\n    })\n      .then((res) => {\n        console.log(\"New case identifier create success!\", res);\n        setDatasetCreateSuccess(\"New case identifer create success!\");\n        setDatasetCreateFail(null);\n      })\n      .catch((error) => {\n        console.log(\"New case identifer Create fail\", error);\n        setDatasetCreateSuccess(null);\n        setDatasetCreateFail(\"New Dataset Create fail\" + error);\n      });\n  }\n\n  async function createExampleDataFile(theFile, theDatasetId) {\n    try {\n      const filePath = \"public/datasets/\" + theDatasetId + \"/\";\n      await Storage.put(theFile.name, theFile, {\n        level: \"public\",\n        contentType: \"text/csv\",\n        customPrefix: {\n          public: filePath,\n        },\n      }).then((result) => {\n        console.log(\"Upload file result:\", result);\n        setDatasetCreateSuccess(\n          \"Example data file has been successfully uploaded.\"\n        );\n        setDatasetCreateFail(null);\n      });\n    } catch (error) {\n      console.log(\"Error uploading file when creating dataset\", error);\n      setDatasetCreateSuccess(null);\n      setDatasetCreateFail(\"Error uploading file when creating dataset\");\n    }\n  }\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Storage } from \"aws-amplify\";\n\nexport default function useDownloadFile(\n  setCaseIdentifierExampleUrl,\n  setDownloadSuccess,\n  setDownloadError,\n  downloadButtonClicked,\n  handleButtonReset\n) {\n  useEffect(() => {\n    if (downloadButtonClicked === true) {\n      const fileKey = \"documents/Case_Identifier_Example.csv\";\n      downloadFile(fileKey);\n    }\n  }, [downloadButtonClicked]);\n\n  async function downloadFile(theFileKey) {\n    const nowTime = new Date().toLocaleString().replace(\",\", \"\");\n    try {\n      await Storage.get(theFileKey, { expires: 60 }).then((url) => {\n        setCaseIdentifierExampleUrl(url);\n      });\n      setDownloadSuccess(\"File download is successful\");\n    } catch (error) {\n      setDownloadError(\"File download is failed\", error);\n    }\n    handleButtonReset();\n  }\n}\n","import React, { useState, useEffect } from \"react\";\nimport {\n  Autocomplete,\n  TextField,\n  Radio,\n  RadioGroup,\n  FormControl,\n  FormLabel,\n  FormControlLabel,\n  OutlinedInput,\n  InputLabel,\n  Select,\n  MenuItem,\n  Chip,\n  Button,\n  Typography,\n  Alert,\n  Fade,\n} from \"@mui/material\";\nimport Box from \"@mui/material/Box\";\nimport DatePicker from \"react-datepicker\";\nimport \"react-datepicker/dist/react-datepicker.css\";\nimport { Auth } from \"aws-amplify\";\nimport useCreateDataset from \"./component/useCreateDataset\";\nimport useDownloadFile from \"./component/useDownloadFile\";\nimport XLSX from \"xlsx\";\n\nexport default function DatasetForm({ setDatasetInfo }) {\n  const initStates = {\n    datasetName: \"\",\n    description: \"\",\n    pi: \"\",\n    piEmail: \"\",\n    poc: \"\",\n    pocEmail: \"\",\n    author: \"\",\n    numberOfAnalyses: \"\",\n    published: false,\n    pmId: \"\",\n    datasetType: \"\",\n    rawDataFileLink: \"\",\n    publicationLink: \"\",\n    datasetNameAvailableLength: 200,\n    descriptionAvailableLength: 1000,\n    submitButtonClicked: 0,\n    datasetCreateSuccess: null,\n    datasetCreateFail: null,\n    caseIdentifierData: [],\n    caseIdentifierFileName: null,\n    exampleDataFile: null,\n    exampleDataFileName: null,\n    downloadSuccess: null,\n    downloadError: null,\n  };\n  const [values, setValues] = useState({\n    datasetName: initStates.datasetName,\n    description: initStates.description,\n    pi: initStates.pi,\n    piEmail: initStates.piEmail,\n    poc: initStates.poc,\n    pocEmail: initStates.pocEmail,\n    author: initStates.author,\n    numberOfAnalyses: initStates.numberOfAnalyses,\n    published: initStates.published,\n    pmId: initStates.pmId,\n    datasetType: initStates.datasetType,\n    rawDataFileLink: initStates.rawDataFileLink,\n    publicationLink: initStates.publicationLink,\n  });\n  const [datasetNameAvailableLength, setDataseAvailabletNameLength] = useState(\n    initStates.datasetNameAvailableLength\n  );\n  const datasetNameHelperText = datasetNameAvailableLength + \" characters left\";\n  const [descriptionAvailableLength, setDescriptionAvailableLength] = useState(\n    initStates.descriptionAvailableLength\n  );\n  const descriptionHelperText = descriptionAvailableLength + \" characters left\";\n  const [submitButtonClicked, setSubmitButtonClicked] = useState(\n    initStates.submitButtonClicked\n  );\n  const [datasetCreateSuccess, setDatasetCreateSuccess] = useState(\n    initStates.datasetCreateSuccess\n  );\n  const [datasetCreateFail, setDatasetCreateFail] = useState(\n    initStates.datasetCreateFail\n  );\n  const [caseIdentifierData, setCaseIdentifierData] = useState(\n    initStates.caseIdentifierData\n  );\n  const [caseIdentifierFileName, setCaseIdentifierFileName] = useState(\n    initStates.caseIdentifierFileName\n  );\n  const [exampleDataFile, setExampleDataFile] = useState(\n    initStates.exampleDataFile\n  );\n  const [exampleDataFileName, setExampleDataFileName] = useState(\n    initStates.exampleDataFileName\n  );\n  const [caseIdentifierExampleUrl, setCaseIdentifierExampleUrl] = useState(\"\");\n  const [downloadButtonClicked, setDownloadButtonClicked] = useState(false);\n  const [downloadSuccess, setDownloadSuccess] = useState(\n    initStates.downloadSuccess\n  );\n  const [downloadError, setDownloadError] = useState(initStates.downloadError);\n\n  const datasetTypeOps = [\n    { typeName: \"Genetics\", label: \"Genetics\" },\n    { typeName: \"Transcriptomics\", label: \"Transcriptomics\" },\n    { typeName: \"Proteomics\", label: \"Proteomics\" },\n    { typeName: \"Metabolomics\", label: \"Metablomics\" },\n  ];\n\n  useEffect(() => {\n    setCurrentUserAsAuthor();\n  }, []);\n\n  useEffect(() => {\n    if (datasetCreateSuccess !== null) {\n      const sucessTimer = setTimeout(() => {\n        resetAllStates();\n      }, 3000);\n    } else if (datasetCreateFail !== null) {\n      const failTimer = setTimeout(() => {\n        resetAllStates();\n      }, 3000);\n    }\n  }, [datasetCreateSuccess, datasetCreateFail]);\n\n  // Download the case identifier example file when button clicked and file path available\n  useEffect(() => {\n    if (downloadButtonClicked === true && caseIdentifierExampleUrl !== null) {\n      window.open(caseIdentifierExampleUrl);\n    }\n  }, [downloadButtonClicked, caseIdentifierExampleUrl]);\n\n  async function setCurrentUserAsAuthor() {\n    try {\n      const authRes = await Auth.currentAuthenticatedUser();\n      setValues({ ...values, [\"author\"]: authRes.username });\n    } catch (error) {\n      console.log(error);\n    }\n  }\n\n  function resetAllStates() {\n    setValues({\n      datasetName: initStates.datasetName,\n      description: initStates.description,\n      pi: initStates.pi,\n      piEmail: initStates.piEmail,\n      poc: initStates.poc,\n      pocEmail: initStates.pocEmail,\n      author: values[\"author\"],\n      numberOfAnalyses: initStates.numberOfAnalyses,\n      published: initStates.published,\n      pmId: initStates.pmId,\n      datasetType: initStates.datasetType,\n      rawDataFileLink: initStates.rawDataFileLink,\n      publicationLink: initStates.publicationLink,\n    });\n    setDataseAvailabletNameLength(initStates.datasetNameAvailableLength);\n    setDescriptionAvailableLength(initStates.descriptionAvailableLength);\n    setSubmitButtonClicked(initStates.submitButtonClicked);\n    setDatasetCreateSuccess(initStates.datasetCreateSuccess);\n    setDatasetCreateFail(initStates.datasetCreateFail);\n    setCaseIdentifierData(initStates.caseIdentifierData);\n    setCaseIdentifierFileName(initStates.caseIdentifierFileName);\n    setExampleDataFile(initStates.exampleDataFile);\n    setExampleDataFileName(initStates.exampleDataFileName);\n  }\n\n  const handleReset = () => {\n    resetAllStates();\n    handleButtonReset();\n  };\n\n  const handleButtonReset = () => {\n    setDownloadButtonClicked(false);\n  };\n\n  const handleDownloadClicked = () => {\n    setDownloadButtonClicked(true);\n  };\n\n  const handleChange = (prop) => (event) => {\n    if (prop === \"datasetName\") {\n      setDataseAvailabletNameLength(200 - event.target.value.length);\n    }\n    if (prop === \"description\") {\n      setDescriptionAvailableLength(1000 - event.target.value.length);\n    }\n    setValues({ ...values, [prop]: event.target.value });\n  };\n\n  const handleDateChange = (date) => {\n    setValues({\n      ...values,\n      create_date: date.toLocaleDateString(\"en-CA\").slice(0, 10),\n    });\n  };\n\n  const hanldeSubmitButtonClicked = (event) => {\n    setSubmitButtonClicked((click) => click + 1);\n  };\n\n  const handleUploadCaseIdentifier = (event) => {\n    const file = event.target.files[0];\n    setCaseIdentifierFileName(file.name);\n    const reader = new FileReader();\n    reader.onload = (readerEvent) => {\n      const workbook = XLSX.read(readerEvent.target.result, { type: \"binary\" });\n      const sheetName = workbook.SheetNames[0];\n      const worksheet = workbook.Sheets[sheetName];\n      const jsonData = XLSX.utils.sheet_to_json(worksheet);\n      setCaseIdentifierData(jsonData);\n    };\n    reader.readAsBinaryString(file);\n  };\n\n  const handleUploadExampleDataFile = (event) => {\n    const file = event.target.files[0];\n    setExampleDataFileName(file.name);\n    setExampleDataFile(file);\n  };\n\n  useCreateDataset(\n    values,\n    submitButtonClicked,\n    setDatasetCreateSuccess,\n    setDatasetCreateFail,\n    caseIdentifierData,\n    exampleDataFile\n  );\n\n  useDownloadFile(\n    setCaseIdentifierExampleUrl,\n    setDownloadSuccess,\n    setDownloadError,\n    downloadButtonClicked,\n    handleButtonReset\n  );\n\n  console.log(\"dataset submit form values\", values);\n  console.log(\"download file url\", caseIdentifierExampleUrl);\n  console.log(\"download button clicked\", downloadButtonClicked);\n\n  return (\n    <Box sx={{ display: \"flex\", flexDirection: \"column\" }}>\n      <Typography variant=\"h5\" sx={{ marginTop: 8 }}>\n        Create a new dataset\n      </Typography>\n\n      <Typography variant=\"subtitle1\" sx={{ marginTop: 2 }}>\n        Please fill the form about the dataset\n      </Typography>\n      <Box sx={{ paddingTop: 2 }}>\n        <TextField\n          sx={{ width: 500 }}\n          value={values.pi}\n          id=\"pi\"\n          label=\"PI\"\n          onChange={handleChange(\"pi\")}\n        />\n      </Box>\n      <Box sx={{ paddingTop: 2 }}>\n        <TextField\n          sx={{ width: 500 }}\n          value={values.piEmail}\n          id=\"piEmail\"\n          label=\"PI Email\"\n          onChange={handleChange(\"piEmail\")}\n        />\n      </Box>\n      <Box sx={{ paddingTop: 2 }}>\n        <TextField\n          sx={{ width: 500 }}\n          value={values.poc}\n          id=\"poc\"\n          label=\"Point Of Contact\"\n          onChange={handleChange(\"poc\")}\n        />\n      </Box>\n      <Box sx={{ paddingTop: 2 }}>\n        <TextField\n          sx={{ width: 500 }}\n          value={values.pocEmail}\n          id=\"pocEmail\"\n          label=\"Point Of Contact Email\"\n          onChange={handleChange(\"pocEmail\")}\n        />\n      </Box>\n      <Box sx={{ paddingTop: 2 }}>\n        <TextField\n          sx={{ width: 500 }}\n          value={values.datasetName}\n          id=\"datasetName\"\n          label=\"Dataset Name\"\n          onChange={handleChange(\"datasetName\")}\n          helperText={datasetNameHelperText}\n        />\n      </Box>\n      <Box sx={{ paddingTop: 2 }}>\n        <TextField\n          sx={{ width: 500 }}\n          value={values.description}\n          id=\"description\"\n          label=\"Description\"\n          multiline\n          maxRows={4}\n          onChange={handleChange(\"description\")}\n          helperText={descriptionHelperText}\n        />\n      </Box>\n      <Box sx={{ paddingTop: 2 }}>\n        <TextField\n          sx={{ width: 500 }}\n          value={values.numberOfAnalyses}\n          id=\"numberOfAnalyses\"\n          label=\"Number of Analyses\"\n          onChange={handleChange(\"numberOfAnalyses\")}\n        />\n      </Box>\n\n      <Box sx={{ paddingTop: 2 }}>\n        <FormLabel>Published</FormLabel>\n        <RadioGroup\n          row\n          value={values.published}\n          onChange={handleChange(\"published\")}\n        >\n          <FormControlLabel value={true} control={<Radio />} label=\"Yes\" />\n          <FormControlLabel value={false} control={<Radio />} label=\"No\" />\n        </RadioGroup>\n      </Box>\n      {values.published === \"true\" ? (\n        <div>\n          <Box sx={{ paddingTop: 2 }}>\n            <TextField\n              sx={{ width: 500 }}\n              value={values.pmId}\n              id=\"pmId\"\n              label=\"PMID\"\n              onChange={handleChange(\"pmId\")}\n            />\n          </Box>\n          <Box sx={{ paddingTop: 2 }}>\n            <TextField\n              sx={{ width: 500 }}\n              value={values.publicationLink}\n              id=\"publicationLink\"\n              label=\"Publication Link\"\n              onChange={handleChange(\"publicationLink\")}\n            />\n          </Box>\n        </div>\n      ) : null}\n\n      <Box sx={{ paddingTop: 2 }}>\n        {/* <TextField\n          sx={{ width: 500 }}\n          value={values.datasetType}\n          id=\"datasetType\"\n          label=\"Dataset Type\"\n          onChange={handleChange(\"datasetType\")}\n        /> */}\n        <Autocomplete\n          options={datasetTypeOps}\n          renderInput={(params) => (\n            <TextField {...params} label=\"Dataset Type\" variant=\"outlined\" />\n          )}\n          onChange={(event, value) => {\n            if (value !== null) {\n              setValues({ ...values, datasetType: value.typeName });\n            } else {\n              setValues({ ...values, datasetType: \"\" });\n            }\n          }}\n        />\n      </Box>\n      <Box sx={{ paddingTop: 2 }}>\n        <TextField\n          sx={{ width: 500 }}\n          value={values.rawDataFileLink}\n          id=\"rawDataFileLink\"\n          label=\"Raw Data File Link\"\n          onChange={handleChange(\"rawDataFileLink\")}\n          helperText=\"The website URL where the raw data is stored\"\n        />\n      </Box>\n      <Box sx={{ paddingTop: 2 }}>\n        <InputLabel>Case Identifier</InputLabel>\n\n        {caseIdentifierFileName ? (\n          <Typography variant=\"subtitle1\">\n            Selected file: {caseIdentifierFileName}\n          </Typography>\n        ) : null}\n\n        <Button variant=\"outlined\" component=\"label\">\n          Choose File\n          <input\n            hidden\n            accept=\".csv\"\n            type=\"file\"\n            onChange={handleUploadCaseIdentifier}\n          />\n        </Button>\n        <a\n          style={{ textDecoration: \"underline\", cursor: \"pointer\" }}\n          onClick={handleDownloadClicked}\n        >\n          <Typography variant=\"subtitle1\">\n            Download Case Identifier Example\n          </Typography>\n        </a>\n        <Typography variant=\"subtitle1\">(File type: *.csv)</Typography>\n      </Box>\n\n      <Box sx={{ paddingTop: 2 }}>\n        <InputLabel>Data File</InputLabel>\n\n        {exampleDataFileName ? (\n          <Typography variant=\"subtitle1\">\n            Selected file: {exampleDataFileName}\n          </Typography>\n        ) : null}\n\n        <Button variant=\"outlined\" component=\"label\">\n          Choose File\n          <input\n            hidden\n            accept=\".csv\"\n            type=\"file\"\n            onChange={handleUploadExampleDataFile}\n          />\n        </Button>\n        <Typography variant=\"subtitle1\">(File type: *.csv)</Typography>\n      </Box>\n      <Box sx={{ paddingTop: 2 }}>\n        <Button\n          variant=\"contained\"\n          sx={{ width: \"100px\" }}\n          onClick={hanldeSubmitButtonClicked}\n        >\n          Submit\n        </Button>\n        <Button\n          variant=\"contained\"\n          color=\"secondary\"\n          sx={{ marginLeft: 4, width: \"100px\" }}\n          onClick={handleReset}\n        >\n          Reset\n        </Button>\n      </Box>\n      {datasetCreateFail !== null || datasetCreateSuccess !== null ? (\n        <Box>\n          <Fade in={datasetCreateFail !== null}>\n            <Alert variant=\"filled\" severity=\"error\">\n              {datasetCreateFail}\n            </Alert>\n          </Fade>\n          <Fade in={datasetCreateSuccess !== null}>\n            <Alert variant=\"filled\" severity=\"success\">\n              {datasetCreateSuccess}\n            </Alert>\n          </Fade>\n        </Box>\n      ) : null}\n    </Box>\n  );\n}\n","import React, { useState } from \"react\";\nimport { styled } from \"@mui/material/styles\";\nimport Box from \"@mui/material/Box\";\nimport Paper from \"@mui/material/Paper\";\nimport Grid from \"@mui/material/Grid\";\nimport Button from \"@mui/material/Button\";\nimport DatasetForm from \"./component/DatasetForm\";\n\nconst PaperPanel = styled(Paper)(({ theme }) => ({\n  ...theme.typography.body2,\n  padding: theme.spacing(1),\n  display: \"flex\",\n  justifyContent: \"center\",\n  margin: \"5vh 10vw\",\n  //textAlign: \"center\",\n}));\n\nexport default function DatasetSubmit() {\n  const [filterSelected, setFilterSelected] = useState({\n    usageFilter: {},\n    datasetTypeFilter: {},\n  });\n\n  const postObj = {\n    name: \"\",\n    identifier: \"\",\n    description: \"\",\n    tag: \"\",\n    usage: \"\",\n    dataType: \"\",\n  };\n  console.log(filterSelected);\n\n  return (\n    <Box\n      sx={{\n        //flexGrow: 1,\n        minHeight: \"100vh\",\n        paddingBottom: 2,\n        backgroundImage: `url(${\n          process.env.PUBLIC_URL + \"/assets/caseExplorePage.jpg\"\n        })`,\n        backgroundSize: \"auto 100%\",\n      }}\n    >\n      <Paper\n        sx={{\n          flexGrow: 1,\n          backgroundColor: \"black\",\n          padding: 5,\n          color: \"white\",\n          fontSize: 48,\n        }}\n      >\n        Dataset Submit\n      </Paper>\n\n      <PaperPanel>\n        <Box sx={{ display: \"flex\", flexDirection: \"column\", width: \"50vw\" }}>\n          <Box sx={{ display: \"flex\", justifyContent: \"center\" }}>\n            <DatasetForm />\n          </Box>\n          <Box\n            sx={{\n              display: \"flex\",\n              flexDirection: \"row-reverse\",\n            }}\n          >\n            <Button\n              variant=\"outlined\"\n              component=\"label\"\n              sx={{ marginTop: 4, marginBottom: 9 }}\n              onClick={() =>\n                window.open(`${window.location.origin}/dataset-manage`)\n              }\n            >\n              View Your Datasets\n            </Button>\n          </Box>\n        </Box>\n      </PaperPanel>\n    </Box>\n  );\n}\n","import React, { useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { Auth } from \"aws-amplify\";\nimport { connect } from \"react-redux\";\nimport DatasetSubmit from \"../component/Dataset/DatasetSubmit/DatasetSubmit\";\n\nfunction DatasetSubmitPage(props) {\n  const history = useHistory();\n  useEffect(() => {\n    checkAuth();\n  }, []);\n\n  async function checkAuth() {\n    try {\n      const authRes = await Auth.currentAuthenticatedUser();\n      console.log(\"Check auth response \", authRes);\n      console.log(\n        \"user group\",\n        authRes.signInUserSession.accessToken.payload[\"cognito:groups\"]\n      );\n      if (\"cognito:groups\" in authRes.signInUserSession.accessToken.payload) {\n        if (\n          authRes.signInUserSession.accessToken.payload[\n            \"cognito:groups\"\n          ].includes(\"dataset_user\") ||\n          authRes.signInUserSession.accessToken.payload[\n            \"cognito:groups\"\n          ].includes(\"admin\")\n        ) {\n          console.log(\"Welcome to dataset page!\");\n        } else {\n          history.push(\"/\");\n          console.log(\n            \"Dataset page accessing is failed, since you are not dataset user.\"\n          );\n        }\n      }\n    } catch (error) {\n      console.log(error);\n      history.push(\"/signin\");\n    }\n  }\n\n  return <div>{props.signedIn ? <DatasetSubmit /> : null}</div>;\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    signedIn: state.auth.signedIn,\n  };\n};\n\nexport default connect(mapStateToProps)(DatasetSubmitPage);\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useRetrieveDatasetsByAuthor(\n  author,\n  setDatasetObj,\n  setDatasetRetrieveSuccess,\n  setDatasetRetrieveFail\n) {\n  useEffect(() => {\n    if (author !== null) {\n      getDatasetsByAuthor(author);\n    }\n  }, [author]);\n\n  async function getDatasetsByAuthor(theAuthor) {\n    const nowTime = new Date().toLocaleString().replace(\",\", \"\");\n    console.log(\"Retrieving datasets...\");\n    return await API.get(\"dbapi\", \"/db/datasets_by_author\", {\n      queryStringParameters: {\n        author: theAuthor,\n      },\n    })\n      .then((res) => {\n        console.log(\"Retrieve all dataset success!\", res);\n        setDatasetObj(res);\n        setDatasetRetrieveSuccess(\"Retrieve Dataset create success!\");\n        setDatasetRetrieveFail(null);\n      })\n      .catch((error) => {\n        console.log(\"New Dataset Create fail\", error);\n        setDatasetRetrieveSuccess(null);\n        setDatasetRetrieveFail(\"Retrieve Dataset Create fail\" + error);\n      });\n  }\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Auth } from \"aws-amplify\";\nimport { Box, Paper, Typography, Button } from \"@mui/material\";\nimport { useHistory } from \"react-router-dom\";\nimport useRetrieveDatasetsByAuthor from \"./component/useRetrieveDatasetsByAuthor\";\n\nconst Card = ({\n  datasetId,\n  datasetName,\n  pi,\n  uniqueCaseNumber,\n  datasetType,\n  description,\n}) => (\n  <Paper\n    elevation={12}\n    sx={{\n      marginLeft: 3,\n      marginRight: 3,\n      marginBottom: 3,\n      outlineOffset: \"-3px\",\n      \"&:hover\": {\n        cursor: \"pointer\",\n      },\n    }}\n  >\n    <Box sx={{ padding: 3 }}>\n      <Box>\n        <Typography variant=\"h5\">{datasetName}</Typography>\n      </Box>\n      <Box>\n        <Typography variant=\"body1\" color=\"black\">\n          PI: {pi}\n        </Typography>\n      </Box>\n      <Box>\n        <Typography variant=\"body1\" color=\"black\">\n          Unique Cases: {uniqueCaseNumber}\n        </Typography>\n      </Box>\n      <Box>\n        <Typography variant=\"body1\" color=\"black\">\n          Dataset Type: {datasetType}\n        </Typography>\n      </Box>\n      <Box>\n        <Typography variant=\"body2\" color=\"black\">\n          Description: {description}\n        </Typography>\n      </Box>\n    </Box>\n  </Paper>\n);\n\nexport default function DatasetCardList() {\n  const history = useHistory();\n  const [datasetObj, setDatasetObj] = useState(null);\n  const [datasetRetrieveSuccess, setDatasetRetrieveSuccess] = useState(null);\n  const [datasetRetrieveFail, setDatasetRetrieveFail] = useState(null);\n  const [author, setAuthor] = useState(null);\n\n  useEffect(() => {\n    setCurrentUserAsAuthor();\n  }, []);\n\n  async function setCurrentUserAsAuthor() {\n    try {\n      const authRes = await Auth.currentAuthenticatedUser();\n      setAuthor(authRes.username);\n    } catch (error) {\n      console.log(error);\n    }\n  }\n\n  useRetrieveDatasetsByAuthor(\n    author,\n    setDatasetObj,\n    setDatasetRetrieveSuccess,\n    setDatasetRetrieveFail\n  );\n  // console.log(\"all dataset\", datasetObj);\n\n  const handleClick = (id) => {\n    console.log(\"dataset was clicked.\");\n    window.open(`${window.location.origin}/dataset-display/${id}`);\n  };\n\n  return (\n    <div style={{ paddingTop: \"3vh\" }}>\n      <Typography variant=\"h4\" sx={{ padding: 3 }}>\n        Here are all datasets of <span style={{ color: \"red\" }}>{author}</span>\n      </Typography>\n      <Typography\n        variant=\"subtitle1\"\n        sx={{ paddingRight: 5, display: \"flex\", flexDirection: \"row-reverse\" }}\n      >\n        Tip: Select one dataset to start\n      </Typography>\n      <Box\n        sx={{\n          display: \"flex\",\n          flexDirection: \"row-reverse\",\n          paddingRight: 4,\n          paddingBottom: 1,\n        }}\n      ></Box>\n      {datasetObj !== null\n        ? datasetObj.map((item, key) => (\n            <div\n              id={key}\n              onClick={(event) => {\n                return handleClick(item.dataset_id);\n              }}\n            >\n              <Card\n                datasetId={item.dataset_id}\n                datasetName={item.dataset_name}\n                pi={item.pi}\n                uniqueCaseNumber={item.number_of_unique_cases}\n                datasetType={item.dataset_type}\n                description={item.description}\n              />\n            </div>\n          ))\n        : null}\n      {datasetObj?.length === 0 ? (\n        <Typography variant=\"h6\" sx={{ padding: 3 }}>\n          Looks like you don't have any dataset in nPOD portal.\n          <br></br>\n          You can create a new one{\" \"}\n          <a href=\"/dataset-submit\" target=\"_blank\">\n            here\n          </a>\n          .<br></br>\n          Or browse existing datasets{\" \"}\n          <a href=\"/dataset-explore\" target=\"_blank\">\n            here\n          </a>\n          .\n        </Typography>\n      ) : null}\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { styled } from \"@mui/material/styles\";\nimport Box from \"@mui/material/Box\";\nimport Paper from \"@mui/material/Paper\";\nimport Grid from \"@mui/material/Grid\";\nimport DatasetCardList from \"./component/DatasetCardList\";\n\nconst PaperPanel = styled(Paper)(({ theme }) => ({\n  ...theme.typography.body2,\n  padding: theme.spacing(1),\n  //textAlign: \"center\",\n}));\n\nexport default function DatasetManage() {\n  return (\n    <Box\n      sx={{\n        //flexGrow: 1,\n        minHeight: \"100vh\",\n        paddingBottom: 2,\n        backgroundImage: `url(${\n          process.env.PUBLIC_URL + \"/assets/caseExplorePage.jpg\"\n        })`,\n        backgroundSize: \"auto 100%\",\n      }}\n    >\n      <Paper\n        sx={{\n          flexGrow: 1,\n          backgroundColor: \"black\",\n          padding: 5,\n          color: \"white\",\n          fontSize: 48,\n        }}\n      >\n        Dataset Manage\n      </Paper>\n      <Grid container justifyContent={\"center\"} sx={{ padding: 5 }}>\n        <Grid item xs={8} md={10}>\n          <PaperPanel>\n            <DatasetCardList />\n          </PaperPanel>\n        </Grid>\n      </Grid>\n    </Box>\n  );\n}\n","import React, { useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { Auth } from \"aws-amplify\";\nimport { connect } from \"react-redux\";\nimport DatasetManage from \"../component/Dataset/DatasetManage/DatasetManage\";\n\nfunction DatasetManagePage(props) {\n  const history = useHistory();\n  useEffect(() => {\n    checkAuth();\n  }, []);\n\n  async function checkAuth() {\n    try {\n      const authRes = await Auth.currentAuthenticatedUser();\n    } catch (error) {\n      console.log(error);\n      history.push(\"/signin\");\n    }\n  }\n\n  return <div>{props.signedIn ? <DatasetManage /> : null}</div>;\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    signedIn: state.auth.signedIn,\n  };\n};\n\nexport default connect(mapStateToProps)(DatasetManagePage);\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useRetrieveDatasetByDatasetId(\n  datasetId,\n  setDatasetObj,\n  setDatasetRetrieveSuccess,\n  setDatasetRetrieveFail,\n  currUser,\n  setCanEdit\n) {\n  useEffect(() => {\n    if (datasetId !== null) {\n      getDatasetByDatasetId(datasetId);\n    }\n  }, []);\n\n  async function getDatasetByDatasetId(theDatasetId) {\n    const nowTime = new Date().toLocaleString().replace(\",\", \"\");\n    console.log(\"Retrieving dataset...\");\n    return await API.get(\"dbapi\", \"/db/dataset_by_datasetId\", {\n      queryStringParameters: {\n        dataset_id: theDatasetId,\n      },\n    })\n      .then((res) => {\n        console.log(\"Retrieve the dataset success!\", res[0]);\n        setDatasetObj(res[0]);\n        if (res[0].author === currUser) {\n          setCanEdit(true);\n        }\n        setDatasetRetrieveSuccess(\"Retrieve Dataset create success!\");\n        setDatasetRetrieveFail(null);\n      })\n      .catch((error) => {\n        console.log(\"New Dataset Create fail\", error);\n        setDatasetRetrieveSuccess(null);\n        setDatasetRetrieveFail(\"Retrieve Dataset Create fail\" + error);\n      });\n  }\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useRetrieveCaseIdByDatasetId(\n  datasetId,\n  setCaseIdList,\n  setCaseIdRetrieveSuccess,\n  setCaseIdRetrieveFail\n) {\n  useEffect(() => {\n    if (datasetId !== null) {\n      getCaseIdByDatasetId(datasetId);\n    }\n  }, [datasetId]);\n\n  async function getCaseIdByDatasetId(theDatasetId) {\n    const nowTime = new Date().toLocaleString().replace(\",\", \"\");\n    console.log(\"Retrieving caseId by datasetId...\");\n    return await API.get(\"dbapi\", \"/db/caseId_by_datasetId\", {\n      queryStringParameters: {\n        dataset_id: theDatasetId,\n      },\n    })\n      .then((res) => {\n        console.log(\n          \"Retrieve the unique cases Ids of the dataset success!\",\n          res\n        );\n        let caseIdListTemp = [];\n        res.forEach((element) => {\n          caseIdListTemp.push(element.case_id);\n        });\n        setCaseIdList(caseIdListTemp);\n        setCaseIdRetrieveSuccess(\n          \"Retrieve the unique cases Ids of the Dataset create success!\"\n        );\n        setCaseIdRetrieveFail(null);\n      })\n      .catch((error) => {\n        console.log(\"Get unique case Ids of the dataset fail\", error);\n        setCaseIdRetrieveSuccess(null);\n        setCaseIdRetrieveFail(\n          \"Get unique case Ids of the dataset fail\" + error\n        );\n      });\n  }\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useRetrieveCaseIdList(\n  caseIdList,\n  setRequestedCases,\n  setRequestedCasesRetrieveSuccess,\n  setRequestedCasesMapRetrieveFail\n) {\n  useEffect(() => {\n    getCasesByCaseIdList(caseIdList);\n  }, [caseIdList]);\n\n  async function getCasesByCaseIdList(theCaseIdList) {\n    const nowTime = new Date().toLocaleString().replace(\",\", \"\");\n    console.log(\"Retrieving cases by case id list...\");\n    const cilString = theCaseIdList.toString();\n    return await API.get(\"dbapi\", \"/db/case\", {\n      queryStringParameters: {\n        caseIdList: cilString,\n      },\n    })\n      .then((res) => {\n        console.log(\"Retrieve cases by caseIdList success!\", res);\n        setRequestedCases(res);\n        setRequestedCasesRetrieveSuccess(\n          \"Retrieve cases by caseIdList success!\"\n        );\n        setRequestedCasesMapRetrieveFail(null);\n      })\n      .catch((error) => {\n        console.log(\"Get cases by caseIdList fail\", error);\n        setRequestedCasesRetrieveSuccess(null);\n        setRequestedCasesMapRetrieveFail(\"Get Donor Type Map fail\" + error);\n      });\n  }\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useRetrieveDonorTypeMap(\n  setDonorTypeMap,\n  setDonorTypeMapRetrieveSuccess,\n  setDonorTypeMapRetrieveFail\n) {\n  useEffect(() => {\n    getDonorTypeMap();\n  }, []);\n\n  async function getDonorTypeMap() {\n    const nowTime = new Date().toLocaleString().replace(\",\", \"\");\n    console.log(\"Retrieving Donor Type Map...\");\n    return await API.get(\"dbapi\", \"/db/donor_type\")\n      .then((res) => {\n        console.log(\"Retrieve Donor Type Map success!\", res);\n        const dtMap = {};\n        for (var i = 0, dType; i < res.length; i++) {\n          dType = res[i];\n          dtMap[dType.donor_type_id] = dType.name;\n        }\n        setDonorTypeMap(dtMap);\n        setDonorTypeMapRetrieveSuccess(\"Retrieve Donor Type Map success!\");\n        setDonorTypeMapRetrieveFail(null);\n      })\n      .catch((error) => {\n        console.log(\"Get Donor Type Map fail\", error);\n        setDonorTypeMapRetrieveSuccess(null);\n        setDonorTypeMapRetrieveFail(\"Get Donor Type Map fail\" + error);\n      });\n  }\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useRetrieveCauseOfDeathMap(\n  setCauseOfDeathMap,\n  setCauseOfDeathMapRetrieveSuccess,\n  setCauseOfDeathMapRetrieveFail\n) {\n  useEffect(() => {\n    getCauseOfDeathMap();\n  }, []);\n\n  async function getCauseOfDeathMap() {\n    const nowTime = new Date().toLocaleString().replace(\",\", \"\");\n    console.log(\"Retrieving Cause of Death Map...\");\n    return await API.get(\"dbapi\", \"/db/cause_of_death\")\n      .then((res) => {\n        console.log(\"Retrieve Cause of Death Map success!\", res);\n        const cODMap = {};\n        for (var i = 0, causeOfDeath; i < res.length; i++) {\n          causeOfDeath = res[i];\n          cODMap[causeOfDeath.cause_of_death_id] = causeOfDeath.description;\n        }\n        setCauseOfDeathMap(cODMap);\n        setCauseOfDeathMapRetrieveSuccess(\"Retrieve Donor Type Map success!\");\n        setCauseOfDeathMapRetrieveFail(null);\n      })\n      .catch((error) => {\n        console.log(\"Get Cause of Death Map fail\", error);\n        setCauseOfDeathMapRetrieveSuccess(null);\n        setCauseOfDeathMapRetrieveFail(\"Get Cause of Death Map fail\" + error);\n      });\n  }\n}\n","import React, { useState, useEffect } from \"react\";\nimport { API, Auth } from \"aws-amplify\";\n\nexport default function useRetrieveHLAMap(\n  setHLAMap,\n  setHLAMapRetrieveSuccess,\n  setHLAMapRetrieveFail\n) {\n  useEffect(() => {\n    getHLAMap();\n  }, []);\n\n  async function getHLAMap() {\n    const nowTime = new Date().toLocaleString().replace(\",\", \"\");\n    console.log(\"Retrieving HLA Map...\");\n    return await API.get(\"dbapi\", \"/db/hla\")\n      .then((res) => {\n        console.log(\"Retrieve HLA Map success!\", res);\n        const HLAMap = {};\n        for (var i = 0, tempData, tempKey, tempMap = {}; i < res.length; i++) {\n          tempData = res[i];\n          Object.keys(tempData).map((key) => {\n            if (key === \"case_id\") {\n              tempKey = tempData[key];\n            } else {\n              tempMap[key] = tempData[key];\n            }\n          });\n          HLAMap[tempKey] = JSON.parse(JSON.stringify(tempMap));\n        }\n        setHLAMap(HLAMap);\n        setHLAMapRetrieveSuccess(\"Retrieve HLA Map success!\");\n        setHLAMapRetrieveFail(null);\n      })\n      .catch((error) => {\n        console.log(\"Get HLA Map fail\", error);\n        setHLAMapRetrieveSuccess(null);\n        setHLAMapRetrieveFail(\"Get HLA Map fail\" + error);\n      });\n  }\n}\n","import React, { useState, useEffect } from \"react\";\nimport FileSaver from \"file-saver\";\nimport XLSX from \"xlsx\";\nimport { Button } from \"@mui/material\";\n\nexport default function ButtonDownloadCsvFromJson({ jsonData }) {\n  const fileType =\n    \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8\";\n  const fileExtension = \".csv\";\n  const fileName = \"customized_case_data\";\n  const exportToXlsx = (jData, fName, fExtension) => {\n    const ws = XLSX.utils.json_to_sheet(jData);\n    const wb = { Sheets: { data: ws }, SheetNames: [\"data\"] };\n    const writeBuffer = XLSX.write(wb, { bookType: \"csv\", type: \"array\" });\n    const data = new Blob([writeBuffer], { type: fileType });\n    FileSaver.saveAs(data, fName + fExtension);\n  };\n\n  return (\n    <Button\n      variant=\"contained\"\n      onClick={() => exportToXlsx(jsonData, fileName, fileExtension)}\n    >\n      Download Case Data\n    </Button>\n  );\n}\n","import React, { useEffect } from \"react\";\nimport { Storage } from \"aws-amplify\";\n\nexport default function useRetrieveDataFileKey(setDataFileKey, datasetId) {\n  useEffect(() => {\n    getDataFileKey();\n  }, []);\n\n  async function getDataFileKey() {\n    try {\n      await Storage.list(`datasets/${datasetId}/`).then((fileKeyList) => {\n        console.log(\"file list\", fileKeyList);\n        if (fileKeyList.length >= 1) {\n          for (let i = 0; i < fileKeyList.length; i++) {\n            if (fileKeyList[i].size) {\n              setDataFileKey(fileKeyList[i].key);\n              break;\n            }\n          }\n        }\n      });\n    } catch (error) {\n      console.error(\"[S3] Get file error\", error);\n    }\n  }\n}\n","import React, { useEffect } from \"react\";\nimport { Storage } from \"aws-amplify\";\n\nexport default function useRetrieveDataFilePath(setDataFilePath, dataFileKey) {\n  useEffect(() => {\n    if (dataFileKey !== null) {\n      getDataFilePath();\n    }\n  }, [dataFileKey]);\n\n  async function getDataFilePath() {\n    try {\n      await Storage.get(dataFileKey).then((fileUrl) => {\n        setDataFilePath(fileUrl);\n      });\n    } catch (error) {\n      console.error(\"[S3] Get file error\", error);\n    }\n  }\n}\n","import React, { useState, useEffect } from \"react\";\nimport FileSaver from \"file-saver\";\nimport { Button } from \"@mui/material\";\n\nexport default function ButtonDownloadCsvFromPath({ path }) {\n  async function dowanloadFile(filePath) {\n    const response = await fetch(filePath);\n    const data = await response.blob();\n    FileSaver.saveAs(new File([data], \"exampleDataFile\", { type: data.type }));\n  }\n  return (\n    <Button\n      variant=\"contained\"\n      sx={{ marginTop: 2 }}\n      onClick={() => dowanloadFile(path)}\n    >\n      Download Example Data\n    </Button>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { DataGrid } from \"@mui/x-data-grid\";\nimport { Box, Button } from \"@mui/system\";\nimport FileSaver from \"file-saver\";\nimport useRetrieveDataFileKey from \"./component/useRetrieveDataFileKey\";\nimport useRetrieveDataFilePath from \"./component/useRetrieveDataFilePath\";\nimport useGenJsonWithPath from \"./component/useGenJsonWithPath\";\nimport ButtonDownloadCsvFromPath from \"./component/ButtonDownloadCsvFromPath\";\n\nexport default function ExampleDataFileGrid({ datasetId }) {\n  const [dataFilePath, setDataFilePath] = useState(null);\n  const [dataFileKey, setDataFileKey] = useState(null);\n  const [exampleDataJson, setExampleDataJson] = useState(null);\n  const [exampleDataColConfig, setExampleDataColConfig] = useState(null);\n  const [exampleDataKey, setExampleDataKey] = useState(null);\n\n  useRetrieveDataFileKey(setDataFileKey, datasetId);\n\n  useRetrieveDataFilePath(setDataFilePath, dataFileKey);\n\n  useGenJsonWithPath(\n    dataFilePath,\n    setExampleDataJson,\n    setExampleDataColConfig,\n    setExampleDataKey\n  );\n\n  console.log(\"dataset id in example data file\", datasetId);\n  console.log(\"example data file key\", dataFileKey);\n  console.log(\"example data file path\", dataFilePath);\n  console.log(\"example data file json\", exampleDataJson);\n  console.log(\"example data file column config\", exampleDataColConfig);\n  console.log(\"example data key id\", exampleDataKey);\n\n  return (\n    <div>\n      {dataFilePath ? (\n        <Box sx={{ height: 600, width: \"100%\" }}>\n          {exampleDataColConfig ? (\n            <DataGrid\n              getRowId={(row) => row[exampleDataKey]}\n              rows={exampleDataJson}\n              columns={exampleDataColConfig}\n              initialState={{\n                pagination: {\n                  paginationModel: {\n                    pageSize: 25,\n                  },\n                },\n              }}\n              pageSizeOptions={[25, 50, 100]}\n              disableRowSelectionOnClick\n              showCellVerticalBorder={true}\n              showColumnVerticalBorder={true}\n              checkboxSelection={false}\n              sx={{ maxHeight: 500 }}\n            />\n          ) : null}\n\n          {dataFilePath ? (\n            <ButtonDownloadCsvFromPath path={dataFilePath} />\n          ) : null}\n        </Box>\n      ) : (\n        \"None\"\n      )}\n    </div>\n  );\n}\n","import React, { useEffect, useState } from \"react\";\n\nimport Papa from \"papaparse\";\n\nexport default function useGenJsonWithPath(\n  path,\n  setExampleDataJson,\n  setExampleDataColConfig,\n  setExampleDataKey\n) {\n  useEffect(() => {\n    async function fetchData() {\n      fetchCsvFile(path);\n    }\n    fetchData();\n  }, [path]);\n\n  async function fetchCsvFile(filePath) {\n    const response = await fetch(filePath);\n    const data = await response.text();\n    if (isCsvData(data)) {\n      setExampleDataKey(data.split(\"\\n\").shift().split(\",\").shift());\n      const parsedDataPromise = csvToJson(data);\n      parsedDataPromise.then((data) => {\n        setExampleDataJson(data);\n        const header = Object.keys(data[0]);\n        const convertFunc = (item) => ({\n          field: item,\n          // headerName: item,\n          renderHeader: () => <strong>{item}</strong>,\n          minWidth: 150,\n          flex: 1,\n        });\n\n        const dataColConfig = header.map(convertFunc);\n        setExampleDataColConfig(dataColConfig);\n      });\n    }\n  }\n\n  function csvToJson(csvData) {\n    return new Promise((resolve, reject) => {\n      Papa.parse(csvData, {\n        header: true,\n        complete: (result) => {\n          resolve(result.data);\n        },\n        error: (error) => {\n          reject(error);\n        },\n      });\n    });\n  }\n\n  function isCsvData(data) {\n    const csvRegex =\n      /^([^\\n,]*,)*[^\\n,]*\\n?([^\\n,]*,)*[^\\n,]*\\n?([^\\n,]*,)*[^\\n,]*\\n?/;\n    return csvRegex.test(data);\n  }\n}\n","import React, { useState, useEffect } from \"react\";\n\nexport default function usePreprocessCaseData(\n  requestedCases,\n  donorTypeMap,\n  causeOfDeathMap,\n  HLAMap,\n  setDonorTypeChartData,\n  setSexChartData,\n  setRaceChartData,\n  setFilteredRequestedCases\n) {\n  useEffect(() => {\n    if (\n      requestedCases.length !== 0 &&\n      donorTypeMap !== null &&\n      causeOfDeathMap !== null &&\n      HLAMap !== null\n    ) {\n      let tempCases = hlaDataPreprocess(requestedCases, HLAMap);\n      setFilteredRequestedCases(\n        filterJSON(tempCases, donorTypeMap, causeOfDeathMap)\n      );\n    }\n\n    if (requestedCases.length !== 0 && donorTypeMap !== null) {\n      let donorTypeCount = {};\n      for (let i = 0; i < requestedCases.length; i++) {\n        const currDonorTypeId = requestedCases[i][\"donor_type_id\"];\n        const currDonorType = donorTypeMap[currDonorTypeId];\n        if (!donorTypeCount.hasOwnProperty(currDonorType)) {\n          donorTypeCount[currDonorType] = 0;\n        }\n        donorTypeCount[currDonorType] += 1;\n      }\n      console.log(\"donor type count\", donorTypeCount);\n      chartDataGen(donorTypeCount, \"donor type\");\n    }\n\n    if (requestedCases.length !== 0) {\n      let sexCount = {};\n      for (let i = 0; i < requestedCases.length; i++) {\n        const currSex = requestedCases[i][\"sex\"];\n        if (!sexCount.hasOwnProperty(currSex)) {\n          sexCount[currSex] = 0;\n        }\n        sexCount[currSex] += 1;\n      }\n      console.log(\"sex count map\", sexCount);\n      chartDataGen(sexCount, \"sex\");\n    }\n\n    if (requestedCases.length !== 0) {\n      let raceCount = {};\n      for (let i = 0; i < requestedCases.length; i++) {\n        const currRace = requestedCases[i][\"race_ethnicity\"];\n        if (!raceCount.hasOwnProperty(currRace)) {\n          raceCount[currRace] = 0;\n        }\n        raceCount[currRace] += 1;\n      }\n      console.log(\"sex count map\", raceCount);\n      chartDataGen(raceCount, \"race\");\n    }\n  }, [requestedCases, donorTypeMap, causeOfDeathMap, HLAMap]);\n\n  const chartDataGen = (chartObj, name) => {\n    let tempChartData = [[\"Key\", \"Value\"]];\n\n    if (name === \"donor type\") {\n      for (let [key, value] of Object.entries(chartObj)) {\n        tempChartData.push([key, value]);\n      }\n      setDonorTypeChartData(tempChartData);\n    } else if (name === \"sex\") {\n      let tempChartData = [[\"Sex\", \"Percentage\", { role: \"style\" }]];\n      const sumValues = (obj) => Object.values(obj).reduce((a, b) => a + b, 0);\n      let totcalCount = sumValues(chartObj);\n      Object.keys(chartObj).forEach((item) => {\n        chartObj[item] = (chartObj[item] * 100) / totcalCount;\n      });\n      // for (let [key, value] of Object.entries(chartObj)) {\n      //   tempChartData.push([key, value]);\n      // }\n      tempChartData.push([\"Male\", chartObj[\"Male\"], \"#454545\"]);\n      tempChartData.push([\"Female\", chartObj[\"Female\"], \"#adadad\"]);\n      setSexChartData(tempChartData);\n    } else if (name === \"race\") {\n      for (let [key, value] of Object.entries(chartObj)) {\n        tempChartData.push([key, value]);\n      }\n      setRaceChartData(tempChartData);\n    }\n  };\n\n  function filterJSON(raw, dtMap, cODMap) {\n    const allowedColumns = [\n      \"case_id\",\n      \"RR_id\",\n      \"donor_type_id\",\n      \"donor_type_comments\",\n      \"GADA_Result\",\n      \"IA_2A_Result\",\n      \"mIAA_Result\",\n      \"ZnT8A_Result\",\n      \"slices_shipping_status\",\n      \"islet_isolation_status\",\n      \"pancreas_weight_grams\",\n      \"pancreas_weight_comments\",\n      \"admission_course\",\n      \"clinical_history\",\n      \"downtime_minutes\",\n      \"age_years\",\n      \"gestational_age_weeks\",\n      \"diabetes_hx_years\",\n      \"sex\",\n      \"race_ethnicity\",\n      \"height_cm\",\n      \"weight_kg\",\n      \"BMI\",\n      \"BMI_percentile\",\n      \"HbA1c_percent\",\n      \"C_peptide_ng_mL\",\n      \"admission_glucose_mg_dL\",\n      \"peak_glucose_mg_dL\",\n      \"meds_diabetes\",\n      \"meds_home\",\n      \"meds_hospital\",\n      \"infections\",\n      \"allergies\",\n      \"HLA_transplant\",\n      \"serologies\",\n      \"SARS_COV_2_results\",\n      \"hemodiluted_status\",\n      \"ABO_blood_type\",\n      \"cause_of_death_id\",\n      \"ICU_time_days\",\n      \"transit_time_minutes\",\n      \"case_recovery_type\",\n      \"HLA_high_resolution\",\n      \"histopathology\",\n      \"RIN\",\n    ];\n    var newData = [];\n    console.log(\"donor type map\", dtMap);\n    console.log(\"cause of death map\", cODMap);\n    raw.forEach((donor) => {\n      const filteredDonor = Object.keys(donor)\n        .filter((key) => {\n          return allowedColumns.includes(key);\n        })\n        .reduce((obj, key) => {\n          if (key === \"donor_type_id\") {\n            obj[\"donor_type\"] = dtMap[donor[\"donor_type_id\"]];\n          } else if (key === \"cause_of_death_id\") {\n            obj[\"cause_of_death\"] = cODMap[donor[\"cause_of_death_id\"]];\n          } else {\n            obj[key] = donor[key];\n          }\n\n          return obj;\n        }, {});\n\n      newData.push(filteredDonor);\n    });\n    return newData;\n  }\n\n  function hlaDataPreprocess(rawData, hlaMap) {\n    const tempData = rawData;\n    for (const row in tempData) {\n      const thisCase = tempData[row];\n      for (const col in thisCase) {\n        if (col === \"case_id\") {\n          const thisCaseId = thisCase[col];\n          const HLA_transplant = null;\n          const HLA_high_resolution = null;\n          const thisHLA = hlaMap[thisCaseId];\n          if (thisHLA) {\n            // Transplant\n            const thisAt = thisHLA[\"T_A_1\"] + \"/\" + thisHLA[\"T_A_2\"];\n            const thisBt = thisHLA[\"T_B_1\"] + \"/\" + thisHLA[\"T_B_2\"];\n            const thisDRt = thisHLA[\"T_DR_1\"] + \"/\" + thisHLA[\"T_DR_2\"];\n            const thisDQBt = thisHLA[\"T_DQB_1\"] + \"/\" + thisHLA[\"T_DQB_2\"];\n            thisCase[\"HLA_transplant\"] =\n              \"A*\" +\n              thisAt +\n              \", \" +\n              \"B*\" +\n              thisBt +\n              \", \" +\n              \"DR*\" +\n              thisDRt +\n              \", \" +\n              \"DQB*\" +\n              thisDQBt;\n            thisCase[\"HLA_T_A\"] = thisAt;\n            thisCase[\"HLA_T_B\"] = thisBt;\n            thisCase[\"HLA_T_DR\"] = thisDRt;\n            thisCase[\"HLA_T_DQB\"] = thisDQBt;\n            // High Resolution\n            const thisA = highResHLAGenerator(thisHLA[\"A_1\"], thisHLA[\"A_2\"]);\n            const thisB = highResHLAGenerator(thisHLA[\"B_1\"], thisHLA[\"B_2\"]);\n            const thisC = highResHLAGenerator(thisHLA[\"C_1\"], thisHLA[\"C_2\"]);\n            const thisDRB1 = highResHLAGenerator(\n              thisHLA[\"DRB1_1\"],\n              thisHLA[\"DRB1_2\"]\n            );\n            const thisDQA1 = highResHLAGenerator(\n              thisHLA[\"DQA1_1\"],\n              thisHLA[\"DQA1_2\"]\n            );\n            const thisDQB1 = highResHLAGenerator(\n              thisHLA[\"DQB1_1\"],\n              thisHLA[\"DQB1_2\"]\n            );\n            const thisDPA1 = highResHLAGenerator(\n              thisHLA[\"DPA1_1\"],\n              thisHLA[\"DPA1_2\"]\n            );\n            const thisDPB1 = highResHLAGenerator(\n              thisHLA[\"DPB1_1\"],\n              thisHLA[\"DPB1_2\"]\n            );\n            thisCase[\"HLA_high_resolution\"] =\n              \"A*\" +\n              thisA +\n              \", \" +\n              \"B*\" +\n              thisB +\n              \", \" +\n              \"C*\" +\n              thisC +\n              \", \" +\n              \"DRB1*\" +\n              thisDRB1 +\n              \", \" +\n              \"DQA1*\" +\n              thisDQA1 +\n              \", \" +\n              \"DQB1*\" +\n              thisDQB1 +\n              \", \" +\n              \"DPA1*\" +\n              thisDPA1 +\n              \", \" +\n              \"DPB1*\" +\n              thisDPB1;\n            thisCase[\"HLA_A\"] = thisA;\n            thisCase[\"HLA_B\"] = thisB;\n            thisCase[\"HLA_C\"] = thisC;\n            thisCase[\"HLA_DRB1\"] = thisDRB1;\n            thisCase[\"HLA_DQA1\"] = thisDQA1;\n            thisCase[\"HLA_DQB1\"] = thisDQB1;\n            thisCase[\"HLA_DPA1\"] = thisDPA1;\n            thisCase[\"HLA_DPB1\"] = thisDPB1;\n            thisCase[\"A_1\"] =\n              thisA.split(\",\")[0] === \"null\" ? null : thisA.split(\",\")[0];\n            thisCase[\"A_2\"] =\n              thisA.split(\",\")[1] === \"null\" ? null : thisA.split(\",\")[1];\n            thisCase[\"B_1\"] =\n              thisB.split(\",\")[0] === \"null\" ? null : thisB.split(\",\")[0];\n            thisCase[\"B_2\"] =\n              thisB.split(\",\")[1] === \"null\" ? null : thisB.split(\",\")[1];\n            thisCase[\"C_1\"] =\n              thisC.split(\",\")[0] === \"null\" ? null : thisC.split(\",\")[0];\n            thisCase[\"C_2\"] =\n              thisC.split(\",\")[1] === \"null\" ? null : thisC.split(\",\")[1];\n            thisCase[\"DRB1_1\"] =\n              thisDRB1.split(\",\")[0] === \"null\" ? null : thisDRB1.split(\",\")[0];\n            thisCase[\"DRB1_2\"] =\n              thisDRB1.split(\",\")[1] === \"null\" ? null : thisDRB1.split(\",\")[1];\n            thisCase[\"DQA1_1\"] =\n              thisDQA1.split(\",\")[0] === \"null\" ? null : thisDQA1.split(\",\")[0];\n            thisCase[\"DQA1_2\"] =\n              thisDQA1.split(\",\")[1] === \"null\" ? null : thisDQA1.split(\",\")[1];\n            thisCase[\"DQB1_1\"] =\n              thisDQB1.split(\",\")[0] === \"null\" ? null : thisDQB1.split(\",\")[0];\n            thisCase[\"DQB1_2\"] =\n              thisDQB1.split(\",\")[1] === \"null\" ? null : thisDQB1.split(\",\")[1];\n            thisCase[\"DPA1_1\"] =\n              thisDPA1.split(\",\")[0] === \"null\" ? null : thisDPA1.split(\",\")[0];\n            thisCase[\"DPA1_2\"] =\n              thisDPA1.split(\",\")[1] === \"null\" ? null : thisDPA1.split(\",\")[1];\n            thisCase[\"DPB1_1\"] =\n              thisDPB1.split(\",\")[0] === \"null\" ? null : thisDPB1.split(\",\")[0];\n            thisCase[\"DPB1_2\"] =\n              thisDPB1.split(\",\")[1] === \"null\" ? null : thisDPB1.split(\",\")[1];\n          } else {\n            thisCase[\"HLA_transplant\"] = null;\n            thisCase[\"HLA_T_A\"] = null;\n            thisCase[\"HLA_T_B\"] = null;\n            thisCase[\"HLA_T_DR\"] = null;\n            thisCase[\"HLA_T_DQB\"] = null;\n            thisCase[\"HLA_A\"] = null;\n            thisCase[\"HLA_B\"] = null;\n            thisCase[\"HLA_C\"] = null;\n            thisCase[\"HLA_DRB1\"] = null;\n            thisCase[\"HLA_DQA1\"] = null;\n            thisCase[\"HLA_DQB1\"] = null;\n            thisCase[\"HLA_DPA1\"] = null;\n            thisCase[\"HLA_DPB1\"] = null;\n            thisCase[\"A_1\"] = null;\n            thisCase[\"A_2\"] = null;\n            thisCase[\"B_1\"] = null;\n            thisCase[\"B_2\"] = null;\n            thisCase[\"C_1\"] = null;\n            thisCase[\"C_2\"] = null;\n            thisCase[\"DRB1_1\"] = null;\n            thisCase[\"DRB1_2\"] = null;\n            thisCase[\"DQA1_1\"] = null;\n            thisCase[\"DQA1_2\"] = null;\n            thisCase[\"DQB1_1\"] = null;\n            thisCase[\"DQB1_2\"] = null;\n            thisCase[\"DPA1_1\"] = null;\n            thisCase[\"DPA1_2\"] = null;\n            thisCase[\"DPB1_1\"] = null;\n            thisCase[\"DPB1_2\"] = null;\n          }\n        }\n      }\n      tempData[row] = thisCase;\n    }\n    return tempData;\n  }\n\n  function highResHLAGenerator(lowVal, highVal) {\n    if (lowVal && !lowVal.includes(\":\") && lowVal.length === 4) {\n      lowVal = lowVal.substring(0, 2) + \":\" + lowVal.substring(2, 4);\n    }\n    if (highVal && !highVal.includes(\":\") && highVal.length === 4) {\n      highVal = highVal.substring(0, 2) + \":\" + highVal.substring(2, 4);\n    }\n    return lowVal + \",\" + highVal;\n  }\n}\n","import React, { useState, useEffect } from \"react\";\nimport { styled } from \"@mui/material/styles\";\nimport { Box, Paper, Typography, Button } from \"@mui/material\";\nimport MailOutlineIcon from \"@material-ui/icons/MailOutline\";\nimport useRetrieveCaseIdByDatasetId from \"./component/useRetrieveCaseIdByDatasetId\";\nimport useRetrieveCaseIdList from \"./component/useRetrieveCaseByCaseIdList\";\nimport useRetrieveDonorTypeMap from \"./component/useRetrieveDonorTypeMap\";\nimport useRetrieveCauseOfDeathMap from \"./component/useRetrieveCauseOfDeathMap\";\nimport useRetrieveHLAMap from \"./component/useRetrieveHLAMap\";\nimport { Chart } from \"react-google-charts\";\nimport ButtonDownloadCsvFromJson from \"./component/ButtonDownloadCsvFromJson\";\nimport ExampleDataFileGrid from \"./component/ExampleDataFIleGrid\";\nimport usePreprocessCaseData from \"./component/usePreprocessCaseData\";\n\nconst PaperPanel = styled(Paper)(({ theme }) => ({\n  ...theme.typography.body2,\n  padding: theme.spacing(1),\n  //textAlign: \"center\",\n  width: \"100%\",\n  // minHeight: \"80vh\",\n}));\n\nfunction DataPaper(props) {\n  return (\n    <Paper\n      elevation={3}\n      sx={{\n        marginTop: 2,\n        marginBottom: 2,\n        marginLeft: 4,\n        marginRight: 4,\n        paddingBottom: 3,\n      }}\n    >\n      {props.children}\n    </Paper>\n  );\n}\n\nconst DataEntry = ({\n  name,\n  value,\n  type = null,\n  value2 = null,\n  type2 = null,\n}) => (\n  <Box sx={{ display: \"flex\", flexDirection: \"column\" }}>\n    <Box sx={{ marginTop: 2, marginLeft: 3, marginRight: 3 }}>\n      <Typography\n        variant=\"overline\"\n        sx={{ fontSize: 15, fontWeight: 600 }}\n        style={{ color: \"#6e6e6e\" }}\n      >\n        {name}\n      </Typography>\n    </Box>\n    <Box\n      sx={{\n        display: \"flex\",\n        flexDirection: \"row\",\n        marginLeft: 3,\n        marginRight: 3,\n      }}\n    >\n      {type === \"link\" ? (\n        <Box sx={{ \"&:hover\": { cursor: \"pointer\" } }}>\n          <a href={value} target=\"_blank\">\n            <Typography variant=\"subtitle2\">{value}</Typography>\n          </a>\n        </Box>\n      ) : (\n        <Box>\n          <Typography variant=\"subtitle2\">{value}</Typography>\n        </Box>\n      )}\n      {type2 === \"email\" ? (\n        <Box\n          sx={{\n            display: \"flex\",\n            flexDirection: \"row\",\n            marginLeft: 2,\n            \"&:hover\": {\n              cursor: \"pointer\",\n            },\n          }}\n        >\n          <Box>\n            <MailOutlineIcon\n              onClick={() => (window.location = \"mailto:\" + value2)}\n            />\n          </Box>\n          <Box sx={{ marginLeft: 1 }}>\n            <Typography variant=\"subtitle2\">{value2}</Typography>\n          </Box>\n        </Box>\n      ) : null}\n    </Box>\n  </Box>\n);\n\nfunction DataEntryWrapper(props) {\n  return (\n    <Box sx={{ display: \"flex\", flexDirection: \"column\" }}>\n      <Box sx={{ marginTop: 2, marginLeft: 3, marginRight: 3 }}>\n        <Typography\n          variant=\"overline\"\n          sx={{ fontSize: 15, fontWeight: 600 }}\n          style={{ color: \"#6e6e6e\" }}\n        >\n          {props.name}\n        </Typography>\n      </Box>\n      <Box\n        sx={{\n          marginLeft: 5,\n          marginRight: 5,\n        }}\n      >\n        {props.children}\n      </Box>\n    </Box>\n  );\n}\n\nfunction ChartBox(props) {\n  return (\n    <Paper elevation={3} sx={{ width: \"80%\" }}>\n      {props.children}\n    </Paper>\n  );\n}\n\nconst CaseButtonMatrix = ({ caseList }) => (\n  <Box sx={{ display: \"flex\", flexWrap: \"wrap\" }}>\n    {caseList.map((item, key) => (\n      <Box sx={{ marginBottom: 2, marginTop: 2, marginRight: 2 }}>\n        <Button\n          variant=\"outlined\"\n          onClick={() =>\n            window.open(`${window.location.origin}/explore/${item}`)\n          }\n        >\n          {item}\n        </Button>\n      </Box>\n    ))}\n  </Box>\n);\n\nconst Title1 = ({ text }) => (\n  <Typography\n    variant=\"h3\"\n    sx={{\n      fontSize: 32,\n      fontWeight: 600,\n      marginTop: 4,\n      marginLeft: 4,\n      marginRight: 4,\n    }}\n    style={{ color: \"#0d4375\" }}\n  >\n    {text}\n  </Typography>\n);\n\nconst Title2 = ({ text }) => (\n  <Typography\n    sx={{\n      fontSize: 18,\n      fontWeight: 600,\n      marginTop: 6,\n      marginLeft: 4,\n      marginRight: 4,\n    }}\n    style={{ color: \"#474747\" }}\n  >\n    {text}\n  </Typography>\n);\n\nfunction Subtitle1(props) {\n  return (\n    <Typography\n      sx={{\n        fontSize: 15,\n        marginTop: 3,\n        marginLeft: 4,\n        marginRight: 2,\n      }}\n      style={{ color: \"#474747\" }}\n    >\n      {props.children}\n    </Typography>\n  );\n}\n\nexport default function NormalDisplay({ datasetObj }) {\n  const [caseIdList, setCaseIdList] = useState([]);\n  const [caseIdRetrieveSuccess, setCaseIdRetrieveSuccess] = useState(null);\n  const [caseIdRetrieveFail, setCaseIdRetrieveFail] = useState(null);\n  const [dataset_id, setDatasetId] = useState(null);\n  const [requestedCases, setRequestedCases] = useState([]);\n  const [requestedCasesRetrieveSuccess, setRequestedCasesRetrieveSuccess] =\n    useState(null);\n  const [requestedCasesRetrieveFail, setRequestedCasesRetrieveFail] =\n    useState(null);\n\n  const [filteredRequestedCases, setFilteredRequestedCases] = useState([]);\n  const [donorTypeMap, setDonorTypeMap] = useState(null);\n  const [donorTypeMapRetrieveSuccess, setDonorTypeMapRetrieveSuccess] =\n    useState(null);\n  const [donorTypeMapRetrieveFail, setDonorTypeMapRetrieveFail] =\n    useState(null);\n  const [causeOfDeathMap, setCauseOfDeathMap] = useState(null);\n  const [causeOfDeathRetrieveSuccess, setCauseOfDeathMapRetrieveSuccess] =\n    useState(null);\n  const [causeOfDeathRetrieveFail, setCauseOfDeathMapRetrieveFail] =\n    useState(null);\n\n  const [HLAMap, setHLAMap] = useState(null);\n  const [HLARetrieveSuccess, setHLAMapRetrieveSuccess] = useState(null);\n  const [HLARetrieveFail, setHLAMapRetrieveFail] = useState(null);\n\n  const [donorTypeChartData, setDonorTypeChartData] = useState([]);\n  const [sexChartData, setSexChartData] = useState([]);\n  const [raceChartData, setRaceChartData] = useState([]);\n\n  useEffect(() => {\n    try {\n      setDatasetId(datasetObj.dataset_id);\n    } catch (err) {\n      console.log(\"Dataset ID setting error in Normal Display\");\n    }\n  }, [datasetObj]);\n\n  useRetrieveCaseIdByDatasetId(\n    dataset_id,\n    setCaseIdList,\n    setCaseIdRetrieveSuccess,\n    setCaseIdRetrieveFail\n  );\n\n  useRetrieveCaseIdList(\n    caseIdList,\n    setRequestedCases,\n    setRequestedCasesRetrieveSuccess,\n    setRequestedCasesRetrieveFail\n  );\n\n  useRetrieveDonorTypeMap(\n    setDonorTypeMap,\n    setDonorTypeMapRetrieveSuccess,\n    setDonorTypeMapRetrieveFail\n  );\n\n  useRetrieveCauseOfDeathMap(\n    setCauseOfDeathMap,\n    setCaseIdRetrieveSuccess,\n    setCauseOfDeathMapRetrieveFail\n  );\n\n  useRetrieveHLAMap(setHLAMap, setHLAMapRetrieveSuccess, setHLAMapRetrieveFail);\n\n  usePreprocessCaseData(\n    requestedCases,\n    donorTypeMap,\n    causeOfDeathMap,\n    HLAMap,\n    setDonorTypeChartData,\n    setSexChartData,\n    setRaceChartData,\n    setFilteredRequestedCases\n  );\n\n  // console.log(\"current dataset\", datasetObj);\n  // console.log(\"all related case ID\", caseIdList);\n  // console.log(\"requested cases\", requestedCases);\n  // console.log(\"donor type map\", donorTypeMap);\n  // console.log(\"cause of death map\", causeOfDeathMap);\n\n  console.log(\"dataset obj\", datasetObj);\n  console.log(\"fitered requested cases\", filteredRequestedCases);\n  // console.log(\"donor type chart data\", donorTypeChartData);\n  // console.log(\"sex chart data\", sexChartData);\n  // console.log(\"HLA map\", HLAMap);\n\n  return (\n    <div>\n      {datasetObj !== null ? (\n        <PaperPanel sx={{ paddingBottom: 3 }}>\n          <Title1 text={datasetObj.dataset_name} />\n          <Box sx={{ display: \"flex\", flexDirection: \"row\" }}>\n            <Box>\n              <Subtitle1>\n                Dataset ID:{\" \"}\n                <span style={{ color: \"#e85a80\", fontWeight: 600 }}>\n                  {datasetObj.dataset_id}\n                </span>\n              </Subtitle1>\n            </Box>\n            <Box>\n              <Subtitle1>\n                Created By:{\" \"}\n                <span style={{ color: \"#e85a80\", fontWeight: 600 }}>\n                  {datasetObj.author}\n                </span>\n              </Subtitle1>\n            </Box>\n            <Box>\n              <Subtitle1>\n                Created Date:{\" \"}\n                <span style={{ color: \"#e85a80\", fontWeight: 600 }}>\n                  {datasetObj.created_time.slice(0, 10)}\n                </span>\n              </Subtitle1>\n            </Box>\n            <Box>\n              <Subtitle1>\n                Updated Date:{\" \"}\n                <span style={{ color: \"#e85a80\", fontWeight: 600 }}>\n                  {datasetObj.updated_time.slice(0, 10)}\n                </span>\n              </Subtitle1>\n            </Box>\n          </Box>\n\n          <Title2 text=\"Overview\" />\n          <DataPaper>\n            <DataEntry name=\"Description\" value={datasetObj.description} />\n            <DataEntry name=\"Dataset Type\" value={datasetObj.dataset_type} />\n            <DataEntry\n              name=\"Number of Analyses\"\n              value={datasetObj.number_of_analyses}\n            />\n          </DataPaper>\n\n          <Title2 text=\"Detail\" />\n          <DataPaper>\n            <DataEntry\n              name=\"PI\"\n              value={datasetObj.pi}\n              value2={datasetObj.pi_email}\n              type2=\"email\"\n            />\n            <DataEntry\n              name=\"Point Of Contact\"\n              value={datasetObj.poc}\n              value2={datasetObj.poc_email}\n              type2=\"email\"\n            />\n            <DataEntry\n              name=\"Published\"\n              value={datasetObj.published === 1 ? \"Yes\" : \"No\"}\n            />\n            <DataEntry\n              name=\"PMID\"\n              value={\n                datasetObj.pm_id === null ? \"Not available\" : datasetObj.pm_id\n              }\n            />\n            <DataEntry\n              name=\"Publication Link\"\n              value={\n                datasetObj.publication_link !== \"null\"\n                  ? datasetObj.publication_link\n                  : \"Not available\"\n              }\n              type={datasetObj.publication_link !== \"null\" ? \"link\" : null}\n            />\n            <DataEntryWrapper name=\"Unique Cases\">\n              <Typography variant=\"subtitle2\" sx={{ color: \"#474747\" }}>\n                Found{\" \"}\n                <span style={{ color: \"#e85a80\", fontWeight: 600 }}>\n                  {caseIdList.length}\n                </span>{\" \"}\n                cases. Click any case to explore more\n              </Typography>\n              <CaseButtonMatrix caseList={caseIdList} />\n              {requestedCases.length !== 0 ? (\n                <ButtonDownloadCsvFromJson jsonData={filteredRequestedCases} />\n              ) : null}\n            </DataEntryWrapper>\n            <DataEntryWrapper name=\"Case Data Summary\">\n              <Box sx={{ display: \"flex\", flexDirection: \"column\" }}>\n                <Box sx={{ paddingTop: 2 }}>\n                  {donorTypeChartData.length !== 0 ? (\n                    <ChartBox>\n                      <Chart\n                        chartType=\"PieChart\"\n                        width=\"100%\"\n                        height=\"500px\"\n                        data={donorTypeChartData}\n                        options={{\n                          title: \"DONOR TYPE\",\n                          titleTextStyle: {\n                            fontSize: 18,\n                            color: \"#454545\",\n                          },\n                          pieHole: 0.4,\n                          is3D: false,\n                          legend: { textStyle: { fontSize: 20 } },\n                        }}\n                      />\n                    </ChartBox>\n                  ) : (\n                    <Typography variant=\"subtitle2\">None</Typography>\n                  )}\n                </Box>\n                <Box sx={{ paddingTop: 4 }}>\n                  {sexChartData.length !== 0 ? (\n                    <ChartBox>\n                      <Chart\n                        chartType=\"PieChart\"\n                        width=\"100%\"\n                        height=\"500px\"\n                        data={sexChartData}\n                        options={{\n                          title: \"SEX\",\n                          titleTextStyle: {\n                            fontSize: 18,\n                            color: \"#454545\",\n                          },\n                          pieHole: 0.4,\n                          is3D: false,\n                          slices: {\n                            0: { color: \"#454545\" },\n                            1: { color: \"#adadad\" },\n                          },\n                          legend: { textStyle: { fontSize: 20 } },\n                        }}\n                      />\n                      {/* <Chart\n                        chartType=\"BarChart\"\n                        data={sexChartData}\n                        width=\"100%\"\n                        height=\"400px\"\n                        options={{\n                          title: \"Sex\",\n                          hAxis: {\n                            title: \"Percentage\",\n                            minValue: 0,\n                          },\n                          // vAxis: {\n                          //   title: \"Gender\",\n                          // },\n                          chartArea: { width: \"60%\" },\n                          colors: [\"#b0120a\", \"#ffab91\"],\n                          legend: { position: \"none\" },\n                        }}\n                      /> */}\n                    </ChartBox>\n                  ) : null}\n                </Box>\n                <Box sx={{ paddingTop: 4 }}>\n                  {raceChartData.length !== 0 ? (\n                    <ChartBox>\n                      <Chart\n                        chartType=\"PieChart\"\n                        width=\"100%\"\n                        height=\"500px\"\n                        data={raceChartData}\n                        options={{\n                          title: \"Race/Ethnicity\",\n                          titleTextStyle: {\n                            fontSize: 18,\n                            color: \"#454545\",\n                          },\n                          pieHole: 0.4,\n                          is3D: false,\n                          legend: { textStyle: { fontSize: 20 } },\n                        }}\n                      />\n                    </ChartBox>\n                  ) : null}\n                </Box>\n              </Box>\n            </DataEntryWrapper>\n          </DataPaper>\n\n          <Title2 text=\"Data\" />\n          <DataPaper>\n            <DataEntry\n              name=\"Raw Data File Link\"\n              value={\n                datasetObj.raw_data_file_link !== \"null\"\n                  ? datasetObj.raw_data_file_link\n                  : \"Not available\"\n              }\n              type={\n                datasetObj.raw_data_file_link !== \"null\" &&\n                datasetObj.raw_data_file_link !== \"None\"\n                  ? \"link\"\n                  : null\n              }\n            />\n            <DataEntryWrapper name=\"Example Data File Preview\">\n              <ExampleDataFileGrid datasetId={datasetObj.dataset_id} />\n            </DataEntryWrapper>\n          </DataPaper>\n        </PaperPanel>\n      ) : null}\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { styled } from \"@mui/material/styles\";\nimport { Box, Paper, Typography, OutlinedInput } from \"@mui/material\";\nimport MailOutlineIcon from \"@material-ui/icons/MailOutline\";\n\nconst PaperPanel = styled(Paper)(({ theme }) => ({\n  ...theme.typography.body2,\n  padding: theme.spacing(1),\n  //textAlign: \"center\",\n  width: \"100%\",\n  minHeight: \"80vh\",\n}));\n\nfunction DataPaper(props) {\n  return (\n    <Paper\n      elevation={3}\n      sx={{\n        marginTop: 2,\n        marginBottom: 2,\n        marginLeft: 4,\n        marginRight: 4,\n        paddingBottom: 3,\n      }}\n    >\n      {props.children}\n    </Paper>\n  );\n}\n\nconst DataEntry = ({\n  name,\n  value,\n  type = null,\n  value2 = null,\n  type2 = null,\n}) => (\n  <Box sx={{ display: \"flex\", flexDirection: \"column\" }}>\n    <Box sx={{ marginTop: 2, marginLeft: 3, marginRight: 3 }}>\n      <Typography\n        variant=\"overline\"\n        sx={{ fontSize: 15, fontWeight: 600 }}\n        style={{ color: \"#6e6e6e\" }}\n      >\n        {name}\n      </Typography>\n    </Box>\n    <Box\n      sx={{\n        display: \"flex\",\n        flexDirection: \"row\",\n        marginLeft: 3,\n        marginRight: 3,\n      }}\n    >\n      {/* {type === \"link\" ? (\n        <Box sx={{ \"&:hover\": { cursor: \"pointer\" } }}>\n          <a href={value} target=\"_blank\">\n            <Typography variant=\"subtitle2\">{value}</Typography>\n          </a>\n        </Box>\n      ) : (\n        <Box>\n          <Typography variant=\"subtitle2\">{value}</Typography>\n        </Box>\n      )} */}\n      <OutlinedInput defaultValue={value} sx={{ width: 500 }} />\n      {type2 === \"email\" ? (\n        <Box\n          sx={{\n            display: \"flex\",\n            flexDirection: \"row\",\n            marginLeft: 2,\n            \"&:hover\": {\n              cursor: \"pointer\",\n            },\n          }}\n        >\n          {/* <Box>\n            <MailOutlineIcon\n              onClick={() => (window.location = \"mailto:\" + value2)}\n            />\n          </Box>\n          <Box sx={{ marginLeft: 1 }}>\n            <Typography variant=\"subtitle2\">{value2}</Typography>\n          </Box> */}\n          <OutlinedInput defaultValue={value2} sx={{ width: 500 }} />\n        </Box>\n      ) : null}\n    </Box>\n  </Box>\n);\n\nconst Title1 = ({ text }) => (\n  <Typography\n    variant=\"h3\"\n    sx={{\n      fontSize: 32,\n      fontWeight: 600,\n      marginTop: 4,\n      marginLeft: 4,\n      marginRight: 4,\n    }}\n    style={{ color: \"#0d4375\" }}\n  >\n    {text}\n  </Typography>\n);\n\nconst Title2 = ({ text }) => (\n  <Typography\n    sx={{\n      fontSize: 18,\n      fontWeight: 600,\n      marginTop: 6,\n      marginLeft: 4,\n      marginRight: 4,\n    }}\n    style={{ color: \"#474747\" }}\n  >\n    {text}\n  </Typography>\n);\n\nfunction Subtitle1(props) {\n  return (\n    <Typography\n      sx={{\n        fontSize: 15,\n        marginTop: 3,\n        marginLeft: 4,\n        marginRight: 2,\n      }}\n      style={{ color: \"#474747\" }}\n    >\n      {props.children}\n    </Typography>\n  );\n}\n\nexport default function EditDisplay({ datasetObj }) {\n  console.log(\"current dataset\", datasetObj);\n  return (\n    <div>\n      {datasetObj !== null ? (\n        <PaperPanel sx={{ paddingBottom: 3 }}>\n          {/* <Title1 text={datasetObj.dataset_name} /> */}\n          <DataPaper>\n            <Typography\n              variant=\"overline\"\n              sx={{\n                fontSize: 15,\n                fontWeight: 600,\n                marginLeft: 4,\n              }}\n              style={{ color: \"#6e6e6e\" }}\n            >\n              DATASET NAME\n            </Typography>\n            <OutlinedInput\n              defaultValue={datasetObj.dataset_name}\n              sx={{ marginLeft: 4, width: 1000 }}\n            />\n          </DataPaper>\n\n          <Box sx={{ display: \"flex\", flexDirection: \"row\" }}>\n            <Box>\n              <Subtitle1>\n                Dataset ID:{\" \"}\n                <span style={{ color: \"#e85a80\", fontWeight: 600 }}>\n                  {datasetObj.dataset_id}\n                </span>\n              </Subtitle1>\n            </Box>\n            <Box>\n              <Subtitle1>\n                Created By:{\" \"}\n                <span style={{ color: \"#e85a80\", fontWeight: 600 }}>\n                  {datasetObj.author}\n                </span>\n              </Subtitle1>\n            </Box>\n            <Box>\n              <Subtitle1>\n                Created Time:{\" \"}\n                <span style={{ color: \"#e85a80\", fontWeight: 600 }}>\n                  {datasetObj.created_time.slice(0, 10)}\n                </span>\n              </Subtitle1>\n            </Box>\n            <Box>\n              <Subtitle1>\n                Updated Time:{\" \"}\n                <span style={{ color: \"#e85a80\", fontWeight: 600 }}>\n                  {datasetObj.updated_time.slice(0, 10)}\n                </span>\n              </Subtitle1>\n            </Box>\n          </Box>\n\n          <Title2 text=\"Overview\" />\n          <DataPaper>\n            <DataEntry name=\"Description\" value={datasetObj.description} />\n            <DataEntry name=\"Dataset Type\" value={datasetObj.dataset_type} />\n            <DataEntry\n              name=\"Number of Analyses\"\n              value={datasetObj.number_of_analyses}\n            />\n          </DataPaper>\n\n          <Title2 text=\"Detail\" />\n          <DataPaper>\n            <DataEntry\n              name=\"PI\"\n              value={datasetObj.pi}\n              value2={datasetObj.pi_email}\n              type2=\"email\"\n            />\n            <DataEntry\n              name=\"POC\"\n              value={datasetObj.poc}\n              value2={datasetObj.poc_email}\n              type2=\"email\"\n            />\n            <DataEntry\n              name=\"Published\"\n              value={datasetObj.published === 1 ? \"True\" : \"False\"}\n            />\n            <DataEntry\n              name=\"PMID\"\n              value={\n                datasetObj.pmid != null ? datasetObj.pmid : \"Not available\"\n              }\n            />\n            <DataEntry\n              name=\"Publication Link\"\n              value={\n                datasetObj.publication_link !== \"null\"\n                  ? datasetObj.publication_link\n                  : \"Not available\"\n              }\n              type={datasetObj.publication_link !== \"null\" ? \"link\" : null}\n            />\n          </DataPaper>\n\n          <Title2 text=\"Data\" />\n          <DataPaper>\n            <DataEntry\n              name=\"Raw Data File Link\"\n              value={\n                datasetObj.raw_data_file_link !== \"null\"\n                  ? datasetObj.raw_data_file_link\n                  : \"Not available\"\n              }\n              type={datasetObj.raw_data_file_link !== \"null\" ? \"link\" : null}\n            />\n          </DataPaper>\n        </PaperPanel>\n      ) : null}\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { styled } from \"@mui/material/styles\";\nimport { Box, Paper, Grid, Button } from \"@mui/material/\";\nimport useRetrieveDatasetByDatasetId from \"./component/useRetrieveDatasetByDatasetId\";\nimport NormalDisplay from \"./component/NormalDisplay\";\nimport EditDisplay from \"./component/EditDisplay\";\nimport { Auth } from \"aws-amplify\";\n\nexport default function DatasetPage({ datasetId, currUser }) {\n  const [canEdit, setCanEdit] = useState(false);\n  const [datasetObj, setDatasetObj] = useState(null);\n  const [datasetRetrieveSuccess, setDatasetRetrieveSuccess] = useState(null);\n  const [datasetRetrieveFail, setDatasetRetrieveFail] = useState(null);\n  const [displayMode, setDisplayMode] = useState(\"normal\");\n\n  useRetrieveDatasetByDatasetId(\n    datasetId,\n    setDatasetObj,\n    setDatasetRetrieveSuccess,\n    setDatasetRetrieveFail,\n    currUser,\n    setCanEdit\n  );\n\n  const NormalDisplayView = () => (\n    <div>\n      {canEdit ? (\n        <Box\n          sx={{\n            display: \"flex\",\n            flexDirection: \"row-reverse\",\n            marginBottom: 2,\n          }}\n        >\n          <Box>\n            <Button\n              variant=\"contained\"\n              onClick={handleClickEdit}\n              sx={{ width: 100 }}\n              disabled={true} // TO-DO dataset editing function\n            >\n              Edit\n            </Button>\n          </Box>\n        </Box>\n      ) : null}\n\n      <NormalDisplay datasetObj={datasetObj !== null ? datasetObj : null} />\n    </div>\n  );\n\n  const EditDisplayView = () => (\n    <div>\n      {canEdit ? (\n        <Box\n          sx={{\n            display: \"flex\",\n            flexDirection: \"row-reverse\",\n            marginBottom: 2,\n          }}\n        >\n          <Box>\n            <Button\n              variant=\"contained\"\n              onClick={handleClickCancel}\n              sx={{ width: 100 }}\n            >\n              Cancel\n            </Button>\n          </Box>\n          <Box>\n            <Button\n              variant=\"contained\"\n              onClick={handleClickCancel}\n              sx={{ width: 100, marginRight: 2 }}\n            >\n              Save\n            </Button>\n          </Box>\n        </Box>\n      ) : null}\n\n      <EditDisplay datasetObj={datasetObj !== null ? datasetObj : null} />\n    </div>\n  );\n\n  const handleClickEdit = () => {\n    setDisplayMode(\"edit\");\n  };\n\n  const handleClickSave = () => {\n    setDisplayMode(\"normal\");\n  };\n\n  const handleClickCancel = () => {\n    setDisplayMode(\"normal\");\n  };\n\n  console.log(\"the current datasetId\", datasetId);\n\n  return (\n    <Box\n      sx={{\n        //flexGrow: 1,\n        minHeight: \"100vh\",\n        paddingBottom: 2,\n        backgroundImage: `url(${\n          process.env.PUBLIC_URL + \"/assets/caseExplorePage.jpg\"\n        })`,\n        backgroundSize: \"auto 100%\",\n      }}\n    >\n      <Paper\n        sx={{\n          flexGrow: 1,\n          backgroundColor: \"black\",\n          padding: 5,\n          color: \"white\",\n          fontSize: 48,\n        }}\n      >\n        Dataset\n      </Paper>\n      <Grid container justifyContent={\"center\"} sx={{ paddingTop: 2 }}>\n        <Grid item xs={8} md={10}>\n          {displayMode === \"normal\" ? (\n            <NormalDisplayView />\n          ) : (\n            <EditDisplayView />\n          )}\n        </Grid>\n      </Grid>\n    </Box>\n  );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Auth } from \"aws-amplify\";\nimport { connect } from \"react-redux\";\nimport { useParams, useHistory } from \"react-router-dom\";\nimport DatasetDisplay from \"../component/Dataset/DatasetDisplay/DatasetDisplay\";\n\nfunction DatasetExplorePage(props) {\n  const history = useHistory();\n  const [currUser, setCurrUser] = useState(null);\n  useEffect(() => {\n    checkAuth();\n  }, []);\n\n  async function checkAuth() {\n    try {\n      const authRes = await Auth.currentAuthenticatedUser();\n      setCurrUser(authRes.username);\n    } catch (error) {\n      console.log(error);\n      history.push(\"/signin\");\n    }\n  }\n  const { datasetId } = useParams();\n\n  return (\n    <div>\n      {props.signedIn ? (\n        <DatasetDisplay datasetId={datasetId} currUser={currUser} />\n      ) : null}\n    </div>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    signedIn: state.auth.signedIn,\n  };\n};\n\nexport default connect(mapStateToProps)(DatasetExplorePage);\n","import \"./App.css\";\nimport React, { useState, useEffect } from \"react\";\nimport { Amplify, API, Hub, Auth } from \"aws-amplify\";\nimport config from \"./aws-exports\";\nimport { withAuthenticator, AmplifySignOut } from \"@aws-amplify/ui-react\";\nimport { BrowserRouter as Router, Switch, Route, Link } from \"react-router-dom\";\n\nimport Header from \"./component/Header\";\nimport LandingPage from \"./route/LandingPage\";\nimport AuthHeader from \"./component/AuthHeader\";\nimport SignIn from \"./route/SignIn\";\nimport SignUp from \"./route/SignUp\";\nimport SignUpConfirm from \"./route/SignUpConfirm\";\nimport { connect } from \"react-redux\";\nimport ForgotPassword from \"./route/ForgotPassword\";\nimport ChangePassword from \"./route/ChangePassword\";\nimport ExplorePage from \"./route/ExplorePage\";\nimport AdminPage from \"./route/AdminPage\";\nimport WriteInPage from \"./route/WriteInPage\";\nimport UserManagePage from \"./route/UserManagePage\";\nimport SupportPage from \"./route/SupportPage\";\nimport ContactPage from \"./route/ContactPage\";\nimport VerifyEmail from \"./route/VerifyEmail\";\nimport VerifyAttributeWithCode from \"./route/VerifyAttributeWithCode\";\nimport UserAgreementPage from \"./route/UserAgreementPage\";\nimport ResetPassword from \"./route/ResetPassword\";\nimport UsefulResourcesPage from \"./route/UsefulResourcesPage\";\nimport DatasetExplorePage from \"./route/DatasetExplorePage\";\nimport DatasetSubmitPage from \"./route/DatasetSubmitPage\";\nimport DatasetManagePage from \"./route/DatasetManagePage\";\nimport DatasetDisplayPage from \"./route/DatasetDisplayPage\";\n\nAmplify.configure({\n  ...config,\n  Auth: {\n    mandatorySignIn: true,\n  },\n});\n\nfunction App(props) {\n  useEffect(() => {\n    checkAuth();\n    authListener();\n  }, []);\n\n  async function checkAuth() {\n    try {\n      const authRes = await Auth.currentAuthenticatedUser();\n      props.setSignedIn(true);\n    } catch (error) {\n      console.log(error);\n      props.setSignedIn(false);\n    }\n  }\n\n  async function authListener() {\n    Hub.listen(\"auth\", (data) => {\n      switch (data.payload.event) {\n        case \"signIn\":\n          console.log(\"User signed in.\");\n          break;\n        case \"signOut\":\n          console.log(\"User signed out.\");\n          break;\n        default:\n          break;\n      }\n    });\n  }\n\n  return (\n    <Router>\n      <Route exact path=\"/\" component={LandingPage} />\n      <Route path=\"/signin\" component={SignIn} />\n      <Route path=\"/signup\" component={SignUp} />\n      <Route path=\"/signupconfirm\" component={SignUpConfirm} />\n      <Route path=\"/forgotpassword\" component={ForgotPassword} />\n      <Route path=\"/verifyemail\" component={VerifyEmail} />\n      <Route path=\"/changepassword\" component={ChangePassword} />\n      <Route path=\"/explore/\" component={ExplorePage} />\n      <Route path=\"/explore/:caseId\" component={ExplorePage} />\n      <Route exact path=\"/admin\" component={AdminPage} />\n      <Route path=\"/admin/writein\" component={WriteInPage} />\n      <Route path=\"/admin/usermanage\" component={UserManagePage} />\n      <Route path=\"/support\" component={SupportPage} />\n      <Route path=\"/contact\" component={ContactPage} />\n      <Route path=\"/verify\" component={VerifyAttributeWithCode} />\n      <Route path=\"/useragreement\" component={UserAgreementPage} />\n      <Route path=\"/resetpassword\" component={ResetPassword} />\n      <Route path=\"/usefulresources\" component={UsefulResourcesPage} />\n      <Route path=\"/dataset-explore\" component={DatasetExplorePage} />\n      <Route path=\"/dataset-submit\" component={DatasetSubmitPage} />\n      <Route path=\"/dataset-manage\" component={DatasetManagePage} />\n      <Route\n        path=\"/dataset-display/:datasetId\"\n        component={DatasetDisplayPage}\n      />\n    </Router>\n  );\n}\n\n// Subscribe\nconst mapStateToProps = (state) => {\n  return {\n    signedIn: state.auth.signedIn,\n  };\n};\n\n// Update\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    setSignedIn: (newSignedIn) =>\n      dispatch({ type: \"SET_SIGNEDIN\", value: newSignedIn }),\n  };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(App);\n","const reportWebVitals = onPerfEntry => {\n  if (onPerfEntry && onPerfEntry instanceof Function) {\n    import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n      getCLS(onPerfEntry);\n      getFID(onPerfEntry);\n      getFCP(onPerfEntry);\n      getLCP(onPerfEntry);\n      getTTFB(onPerfEntry);\n    });\n  }\n};\n\nexport default reportWebVitals;\n","const initialState = {\n  signedIn: false,\n  userName: \"\",\n};\n\nconst authReducer = (state = initialState, action) => {\n  switch (action.type) {\n    case \"SET_SIGNEDIN\":\n      return {\n        ...state,\n        signedIn: action.value,\n      };\n    case \"SET_USERNAME\":\n      return {\n        ...state,\n        userName: action.value,\n      };\n    default:\n      return state;\n  }\n};\n\nexport default authReducer;\n","const initialState = {\n  // Age\n  ageEnable: false,\n  ageRange: [0, 95],\n  ageMin: 0,\n  ageMax: 95,\n\n  // Age Onset: the start age having diabetes\n  ageOnsetEnable: false,\n  ageOnsetRange: [0, 95],\n  ageOnsetMin: 0,\n  ageOnsetMax: 95,\n\n  // Autoantibody\n  aaEnable: false,\n  gadaP: true,\n  gadaN: false,\n  ia2aP: true,\n  ia2aN: false,\n  miaaP: true,\n  miaaN: false,\n  znt8aP: true,\n  znt8aN: false,\n\n  // Autoanibody positive number\n  aaPositiveEnable: false,\n  zeroChecked: true,\n  oneChecked: true,\n  twoChecked: true,\n  threeChecked: true,\n  fourChecked: true,\n\n  // BMI\n  bmiEnable: false,\n  bmiRange: [5.0, 60.0],\n  bmiMin: 5.0,\n  bmiMax: 60.0,\n\n  // Diabetes Duration (DD)\n  DDEnable: false,\n  DDRange: [0, 85],\n  DDMin: 0,\n  DDMax: 85,\n\n  // Donor Type (object array)\n  donorTypeEnable: false,\n  selectedDonorType: [],\n\n  // Gender\n  genderEnable: false,\n  maleChecked: true,\n  femaleChecked: true,\n\n  // HbA1c\n  hEnable: false,\n  hRange: [2.0, 20.0],\n  hMin: 2.0,\n  hMax: 20.0,\n\n  // Insulitis\n  insulitisEnable: false,\n  insulitisPositiveChecked: true,\n  insulitisNegativeChecked: true,\n\n  // Race (object array)\n  raceEnable: false,\n  selectedRace: [],\n\n  // C-Peptide\n  cPeptideEnable: false,\n  cPeptidePositive: true,\n  cPeptideNegative: true,\n\n  // Genetic\n  geneticEnable: false,\n  grs1ScoreMin: 0,\n  grs1ScoreMax: 0.5,\n  grs1ScoreRange: [0, 0.5],\n  grs2ScoreMin: 0,\n  grs2ScoreMax: 20,\n  grs2ScoreRange: [0, 20],\n  aagrsScoreMin: 0,\n  aagrsScoreMax: 15,\n  aagrsScoreRange: [0, 15],\n\n  // Raw Data\n  rawData: [],\n\n  // Filtered Data\n  filteredData: [],\n\n  // Single case data\n  currentCase: [],\n\n  // Donor Types map\n  donorTypesMap: null,\n\n  // Cause of Death map\n  causeOfDeathMap: null,\n\n  // HLA\n  hla: null,\n\n  // HLA map\n  hlaMap: null,\n\n  // sample Types Map\n  sampleTypesMap: null,\n\n  // Case ID\n  caseIDEnable: false,\n  allCaseId: [],\n  selectedCaseId: [],\n\n  // Dataset\n  datasetEnable: false,\n  functionalAssayChecked: false,\n  electronMicroscopyChecked: false,\n  highResHLAChecked: false,\n  immunophenotypingChecked: false,\n  wholeExomeSequencingAvailable: false,\n  wholeExomeSequencingUnavailable: false,\n  snpsAvailable: false,\n  snpsUnavailable: false,\n\n  // electron microscopy images map\n  emiMap: null,\n\n  // immunophenotyping map\n  immunMap: null,\n\n  // genetic map\n  geneticMap: null,\n\n  // SNP\n  SNP: null,\n};\n\nconst exploreReducer = (state = initialState, action) => {\n  switch (action.type) {\n    // Reset all state\n    case \"SET_RESET\":\n      console.log(\"reset triggered.\");\n      return {\n        ...initialState,\n        allCaseId: state.allCaseId,\n        rawData: state.rawData,\n        donorTypesMap: state.donorTypesMap,\n        causeOfDeathMap: state.causeOfDeathMap,\n        hlaMap: state.hlaMap,\n        emiMap: state.emiMap,\n        immunMap: state.immunMap,\n        geneticMap: state.geneticMap,\n        SNP: state.SNP,\n      };\n\n    // Age\n    case \"SET_AGE_ENABLE\":\n      return {\n        ...state,\n        ageEnable: action.value,\n      };\n    case \"SET_AGE_RANGE\":\n      return {\n        ...state,\n        ageRange: action.value,\n        ageMin: action.value[0],\n        ageMax: action.value[1],\n      };\n    case \"SET_AGE_MIN\":\n      return {\n        ...state,\n        ageRange: [action.value, state.ageRange[1]],\n        ageMin: action.value,\n      };\n    case \"SET_AGE_MAX\":\n      return {\n        ...state,\n        ageRange: [state.ageRange[0], action.value],\n        ageMax: action.value,\n      };\n\n    // Age Onset: the start age having diabetes\n    case \"SET_AGE_ONSET_ENABLE\":\n      return {\n        ...state,\n        ageOnsetEnable: action.value,\n      };\n    case \"SET_AGE_ONSET_RANGE\":\n      return {\n        ...state,\n        ageOnsetRange: action.value,\n        ageOnsetMin: action.value[0],\n        ageOnsetMax: action.value[1],\n      };\n    case \"SET_AGE_ONSET_MIN\":\n      return {\n        ...state,\n        ageOnsetRange: [action.value, state.ageOnsetRange[1]],\n        ageOnsetMin: action.value,\n      };\n    case \"SET_AGE_ONSET_MAX\":\n      return {\n        ...state,\n        ageOnsetRange: [state.ageOnsetRange[0], action.value],\n        ageOnsetMax: action.value,\n      };\n\n    // Autoantibody\n    case \"SET_AA_ENABLE\":\n      return {\n        ...state,\n        aaEnable: action.value,\n      };\n    case \"SET_GADAP\":\n      return {\n        ...state,\n        gadaP: action.value,\n      };\n    case \"SET_GADAN\":\n      return {\n        ...state,\n        gadaN: action.value,\n      };\n    case \"SET_IA2AP\":\n      return {\n        ...state,\n        ia2aP: action.value,\n      };\n    case \"SET_IA2AN\":\n      return {\n        ...state,\n        ia2aN: action.value,\n      };\n    case \"SET_MIAAP\":\n      return {\n        ...state,\n        miaaP: action.value,\n      };\n    case \"SET_MIAAN\":\n      return {\n        ...state,\n        miaaN: action.value,\n      };\n    case \"SET_ZNT8AP\":\n      return {\n        ...state,\n        znt8aP: action.value,\n      };\n    case \"SET_ZNT8AN\":\n      return {\n        ...state,\n        znt8aN: action.value,\n      };\n\n    // Autoantibody Positive number\n    case \"SET_AA_POSITIVE_ENABLE\":\n      return {\n        ...state,\n        aaPositiveEnable: action.value,\n      };\n    case \"SET_ZERO_CHECKED\":\n      return {\n        ...state,\n        zeroChecked: action.value,\n      };\n    case \"SET_ONE_CHECKED\":\n      return {\n        ...state,\n        oneChecked: action.value,\n      };\n    case \"SET_TWO_CHECKED\":\n      return {\n        ...state,\n        twoChecked: action.value,\n      };\n    case \"SET_THREE_CHECKED\":\n      return {\n        ...state,\n        threeChecked: action.value,\n      };\n    case \"SET_FOUR_CHECKED\":\n      return {\n        ...state,\n        fourChecked: action.value,\n      };\n\n    // BMI\n    case \"SET_BMI_ENABLE\":\n      return {\n        ...state,\n        bmiEnable: action.value,\n      };\n    case \"SET_BMI_RANGE\":\n      return {\n        ...state,\n        bmiRange: action.value,\n        bmiMin: action.value[0],\n        bmiMax: action.value[1],\n      };\n    case \"SET_BMI_MIN\":\n      return {\n        ...state,\n        bmiRange: [action.value, state.bmiRange[1]],\n        bmiMin: action.value,\n      };\n    case \"SET_BMI_MAX\":\n      return {\n        ...state,\n        bmiRange: [state.bmiRange[0], action.value],\n        bmiMax: action.value,\n      };\n\n    // Diabetes Duration\n    case \"SET_DD_ENABLE\":\n      return {\n        ...state,\n        DDEnable: action.value,\n      };\n    case \"SET_DD_RANGE\":\n      return {\n        ...state,\n        DDRange: action.value,\n        DDMin: action.value[0],\n        DDMax: action.value[1],\n      };\n    case \"SET_DD_MIN\":\n      return {\n        ...state,\n        DDRange: [action.value, state.DDRange[1]],\n        DDMin: action.value,\n      };\n    case \"SET_DD_MAX\":\n      return {\n        ...state,\n        DDRange: [state.DDRange[0], action.value],\n        DDMax: action.value,\n      };\n\n    // Donor Type\n    case \"SET_DONOR_TYPE_ENABLE\":\n      return {\n        ...state,\n        donorTypeEnable: action.value,\n      };\n    case \"SET_SELECTED_TYPE\":\n      return {\n        ...state,\n        selectedDonorType: action.value,\n      };\n\n    // Gender\n    case \"SET_GENDER_ENABLE\":\n      return {\n        ...state,\n        genderEnable: action.value,\n      };\n    case \"SET_MALE_CHECKED\":\n      return {\n        ...state,\n        maleChecked: action.value,\n      };\n    case \"SET_FEMALE_CHECKED\":\n      return {\n        ...state,\n        femaleChecked: action.value,\n      };\n\n    // HbA1c\n    case \"SET_H_ENABLE\":\n      return {\n        ...state,\n        hEnable: action.value,\n      };\n    case \"SET_H_RANGE\":\n      return {\n        ...state,\n        hRange: action.value,\n        hMin: action.value[0],\n        hMax: action.value[1],\n      };\n    case \"SET_H_MIN\":\n      return {\n        ...state,\n        hRange: [action.value, state.hRange[1]],\n        hMin: action.value,\n      };\n    case \"SET_H_MAX\":\n      return {\n        ...state,\n        hRange: [state.hRange[0], action.value],\n        hMax: action.value,\n      };\n\n    // Insulitis\n    case \"SET_INSULITIS_ENABLE\":\n      return {\n        ...state,\n        insulitisEnable: action.value,\n      };\n    case \"SET_INSULITIS_POSITIVE_CHECKED\":\n      return {\n        ...state,\n        insulitisPositiveChecked: action.value,\n      };\n\n    case \"SET_INSULITIS_NEGATIVE_CHECKED\":\n      return {\n        ...state,\n        insulitisNegativeChecked: action.value,\n      };\n\n    // Race\n    case \"SET_RACE_ENABLE\":\n      return {\n        ...state,\n        raceEnable: action.value,\n      };\n    case \"SET_SELECTED_RACE\":\n      return {\n        ...state,\n        selectedRace: action.value,\n      };\n\n    // C-Peptide\n    case \"SET_CPEPTIDE_ENABLE\":\n      return {\n        ...state,\n        cPeptideEnable: action.value,\n      };\n    case \"SET_CPEPTIDE_POSITIVE\":\n      return {\n        ...state,\n        cPeptidePositive: action.value,\n      };\n\n    case \"SET_CPEPTIDE_NEGATIVE\":\n      return {\n        ...state,\n        cPeptideNegative: action.value,\n      };\n\n    // Genetic\n    case \"SET_GENETIC_ENABLE\":\n      return {\n        ...state,\n        geneticEnable: action.value,\n      };\n    case \"SET_GRS1_SCORE_MIN\":\n      return {\n        ...state,\n        grs1ScoreMin: action.value,\n      };\n    case \"SET_GRS1_SCORE_MAX\":\n      return {\n        ...state,\n        grs1ScoreMax: action.value,\n      };\n    case \"SET_GRS1_SCORE_RANGE\":\n      return {\n        ...state,\n        grs1ScoreRange: action.value,\n        grs1ScoreMin: action.value[0],\n        grs1ScoreMax: action.value[1],\n      };\n    case \"SET_GRS2_SCORE_MIN\":\n      return {\n        ...state,\n        grs2ScoreMin: action.value,\n      };\n    case \"SET_GRS2_SCORE_MAX\":\n      return {\n        ...state,\n        grs2ScoreMax: action.value,\n      };\n    case \"SET_GRS2_SCORE_RANGE\":\n      return {\n        ...state,\n        grs2ScoreRange: action.value,\n        grs2ScoreMin: action.value[0],\n        grs2ScoreMax: action.value[1],\n      };\n    case \"SET_AAGRS_SCORE_MIN\":\n      return {\n        ...state,\n        aagrsScoreMin: action.value,\n      };\n    case \"SET_AAGRS_SCORE_MAX\":\n      return {\n        ...state,\n        aagrsScoreMax: action.value,\n      };\n    case \"SET_AAGRS_SCORE_RANGE\":\n      return {\n        ...state,\n        aagrsScoreRange: action.value,\n        aagrsScoreMin: action.value[0],\n        aagrsScoreMax: action.value[1],\n      };\n\n    // Raw Data\n    case \"SET_RAW_DATA\":\n      return {\n        ...state,\n        rawData: action.value,\n      };\n\n    // Filtered Data\n    case \"SET_FILTERED_DATA\":\n      return {\n        ...state,\n        filteredData: action.value,\n      };\n\n    case \"SET_CURRENT_CASE\":\n      return {\n        ...state,\n        currentCase: action.value,\n      };\n\n    // Donor Types\n    case \"SET_DONOR_TYPES_MAP\":\n      return {\n        ...state,\n        donorTypesMap: action.value,\n      };\n\n    // Cause Of Death\n    case \"SET_CAUSE_OF_DEATH_MAP\":\n      return {\n        ...state,\n        causeOfDeathMap: action.value,\n      };\n\n    // HLA\n    case \"SET_HLA\":\n      return {\n        ...state,\n        hla: action.value,\n      };\n\n    // HLA map\n    case \"SET_HLA_MAP\":\n      return {\n        ...state,\n        hlaMap: action.value,\n      };\n\n    // sample types map\n    case \"SET_SAMPLETYPES_MAP\":\n      return {\n        ...state,\n        sampleTypesMap: action.value,\n      };\n\n    // Case ID\n    case \"SET_CASE_ID_ENABLE\":\n      return {\n        ...state,\n        caseIDEnable: action.value,\n      };\n    case \"SET_ALL_CASE_ID\":\n      return {\n        ...state,\n        allCaseId: action.value,\n      };\n    case \"SET_SELECTED_CASE_ID\":\n      return {\n        ...state,\n        selectedCaseId: action.value,\n      };\n\n    // Dataset\n    case \"SET_DATASET_ENABLE\":\n      return {\n        ...state,\n        datasetEnable: action.value,\n      };\n    case \"SET_FUNCTIONALASSAY_CHECKED_ENABLE\":\n      return {\n        ...state,\n        functionalAssayChecked: action.value,\n      };\n    case \"SET_ELECTRONMICROSCOPY_CHECKED_ENABLE\":\n      return {\n        ...state,\n        electronMicroscopyChecked: action.value,\n      };\n    case \"SET_HIGHRESHLA_CHECKED_ENABLE\":\n      return {\n        ...state,\n        highResHLAChecked: action.value,\n      };\n    case \"SET_IMMUNOPHENOTYPING_CHECKED_ENABLE\":\n      return {\n        ...state,\n        immunophenotypingChecked: action.value,\n      };\n    case \"SET_WHOLE_EXOME_SEQUENCING_AVAILABLE\":\n      return {\n        ...state,\n        wholeExomeSequencingAvailable: action.value,\n      };\n    case \"SET_WHOLE_EXOME_SEQUENCING_UNAVAILABLE\":\n      return {\n        ...state,\n        wholeExomeSequencingUnavailable: action.value,\n      };\n    case \"SET_SNPS_AVAILABLE\":\n      return {\n        ...state,\n        snpsAvailable: action.value,\n      };\n    case \"SET_SNPS_UNAVAILABLE\":\n      return {\n        ...state,\n        snpsUnavailable: action.value,\n      };\n\n    // electron microscopy images map\n    case \"SET_EMI_MAP\":\n      return {\n        ...state,\n        emiMap: action.value,\n      };\n\n    // immunophenotyping map\n    case \"SET_IMMUN_MAP\":\n      return {\n        ...state,\n        immunMap: action.value,\n      };\n\n    // genetic map\n    case \"SET_GENETIC_MAP\":\n      return {\n        ...state,\n        geneticMap: action.value,\n      };\n\n    // SNP table\n    case \"SET_SNP\":\n      return {\n        ...state,\n        SNP: action.value,\n      };\n\n    default:\n      return state;\n  }\n};\n\nexport default exploreReducer;\n","import { combineReducers } from \"redux\";\nimport { persistReducer } from \"redux-persist\";\nimport storage from \"redux-persist/lib/storage\";\n\nimport authReducer from \"./authReducer\";\nimport exploreReducer from \"./exploreReducer\";\n\nconst persistConfig = {\n  key: \"root\",\n  storage,\n  whitelist: [\"explore\"],\n};\n\nconst rootReducer = combineReducers({\n  auth: authReducer,\n  explore: exploreReducer,\n});\n\n// export default persistReducer(persistConfig, rootReducer);\nexport default rootReducer;\n","import { createStore } from \"redux\";\nimport { persistStore } from \"redux-persist\";\nimport { composeWithDevTools } from \"redux-devtools-extension\";\nimport rootReducer from \"./rootReducer\";\n\nconst store = createStore(rootReducer, composeWithDevTools());\n// const store = createStore(rootReducer);\n\nconst persistedStore = persistStore(store);\n\n// export { store, persistedStore };\nexport { store };\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.css\";\nimport App from \"./App\";\nimport reportWebVitals from \"./reportWebVitals\";\nimport { Provider } from \"react-redux\";\nimport { store, persistedStore } from \"./Redux/store\";\nimport { PersistGate } from \"redux-persist/integration/react\";\n\n// Material UI workaround, this will be patched when MUI 5.0 release.\nimport { createMuiTheme, ThemeProvider } from \"@material-ui/core\";\nimport { unstable_createMuiStrictModeTheme } from \"@material-ui/core\";\n// ...\nconst createTheme =\n  process.env.NODE_ENV === \"production\"\n    ? createMuiTheme\n    : unstable_createMuiStrictModeTheme;\nconst theme = createTheme({\n  // ...\n});\n\nReactDOM.render(\n  <Provider store={store}>\n    <React.StrictMode>\n      {/* <PersistGate persistor={persistedStore}> */}\n      <ThemeProvider theme={theme}>\n        <App />\n      </ThemeProvider>\n      {/* </PersistGate> */}\n    </React.StrictMode>\n  </Provider>,\n  document.getElementById(\"root\")\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n","import { useEffect, useState } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\n\nexport default function useMdImport(filePath) {\n  const [post, setPost] = useState();\n  useEffect(() => {\n    const setTheText = async () => {\n      const file = await import(`${filePath}`);\n      const response = await fetch(file.default);\n      const text = await response.text();\n      setPost(<ReactMarkdown children={text} />);\n    };\n    setTheText();\n  }, []);\n  return post;\n}\n","import React, { useEffect, useState, useRef } from \"react\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Container from \"@material-ui/core/Container\";\nimport AuthHeader from \"..//AuthHeader\";\nimport { Box, Grid, Paper } from \"@material-ui/core\";\nimport { Link } from \"react-router-dom\";\nimport SupportContent from \"./SupportContent\";\n\nfunction Copyright() {\n  return (\n    <Typography variant=\"body2\" color=\"textSecondary\" align=\"center\">\n      {\"Copyright © \"}\n      <a color=\"inherit\" href=\"https://nPOD.org/\">\n        nPOD\n      </a>{\" \"}\n      {new Date().getFullYear()}\n      {\".\"}\n    </Typography>\n  );\n}\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    // minHeight: \"150vh\",\n    backgroundImage: `url(${\n      process.env.PUBLIC_URL + \"/assets/supportPage.jpg\"\n    })`,\n    backgroundRepeat: \"repeat\",\n    // backgroundSize: \"cover\",\n    display: \"flex\",\n    justifyContent: \"flex-start\",\n  },\n\n  ul: {\n    listStyle: \"none\",\n    width: \"230px\",\n  },\n  li: {\n    paddingLeft: \"25px\",\n    textIndent: \"-20px\",\n    paddingTop: \"10px\",\n    paddingBottom: \"10px\",\n    borderLeft: \"3px solid #ccc\",\n    \"&.active\": {\n      borderLeft: \"3px solid #000\",\n      \"& a\": {\n        color: \"#333\",\n        // fontWeight: \"500\",\n        paddingLeft: \"20px\",\n      },\n    },\n    \"& a\": {\n      \"&:hover\": {\n        color: \"#666\",\n      },\n      \"&:active\": {\n        color: \"#000\",\n      },\n      fontSize: \"20px\",\n      paddingLeft: \"20px\",\n      textDecoration: \"none\",\n      color: \"#ccc\",\n      transition: \"all 50ms ease-in-out\",\n    },\n  },\n  contentList: {\n    marginTop: \"100px\",\n    paddingTop: \"40px\",\n    paddingBottom: \"40px\",\n    width: \"100%\",\n    // marginRight: \"auto\",\n    marginLeft: \"2vw\",\n    position: \"sticky\",\n    top: 50,\n\n    \"& h2\": {\n      paddingLeft: \"35px\",\n    },\n  },\n  articleContainer: {\n    marginTop: \"100px\",\n    width: \"100%\",\n    maxWidth: \"68vw\",\n    minWidth: \"700px\",\n    marginLeft: \"5vw\",\n    paddingBottom: \"20vh\",\n  },\n  articlePaper: {\n    padding: \"50px 60px\",\n  },\n}));\n\nfunction Support(props) {\n  const classes = useStyles();\n  const [viewTopTitle, setViewTopTitle] = useState();\n\n  useEffect(() => {\n    const observer = new IntersectionObserver((entries) => {\n      // if (entry.isIntersecting === true) {\n      //   console.log(\"You're viewing \" + entry.target.id);\n      // }\n      entries.forEach((entry) => {\n        const id = entry.target.getAttribute(\"id\");\n        try {\n          if (entry.intersectionRatio > 0) {\n            document\n              .querySelector(`ul li a[href=\"/support#${id}\"]`)\n              .parentElement.classList.add(\"active\");\n          } else {\n            document\n              .querySelector(`ul li a[href=\"/support#${id}\"]`)\n              .parentElement.classList.remove(\"active\");\n          }\n        } catch (error) {}\n      });\n    });\n    document.querySelectorAll(\"section[id]\").forEach((section) => {\n      observer.observe(section);\n    });\n  }, []);\n\n  const topics = [\n    \"introduction\",\n    \"sign-up\",\n    \"sign-in\",\n    \"explore-cases\",\n    \"sample-inventory\",\n    \"datasets\",\n    \"explore-datasets\",\n    \"submit-datasets\",\n  ];\n\n  const topicsName = [\n    \"Introduction\",\n    \"Sign Up\",\n    \"Sign In\",\n    \"Explore Cases\",\n    \"Sample Inventory\",\n    \"Datasets\",\n    \"➤ Explore Datasets\",\n    \"➤ Submit Datasets\",\n  ];\n\n  return (\n    <div>\n      <AuthHeader location=\"Support\" />\n      <div className={classes.root}>\n        <div className={classes.articleContainer}>\n          <Paper className={classes.articlePaper}>\n            <SupportContent />\n          </Paper>\n        </div>\n        <div>\n          <Paper className={classes.contentList}>\n            <h2>Contents</h2>\n            <ul className={classes.ul}>\n              {topics.map((topic, index) => {\n                const linkTo = \"/support#\" + topic;\n                const linkElement = topic;\n                return (\n                  <li className={classes.li}>\n                    <Link\n                      to={linkTo}\n                      onClick={() => {\n                        let target = document.getElementById(`${topic}`);\n                        target &&\n                          target.scrollIntoView({\n                            behavior: \"smooth\",\n                            block: \"start\",\n                          });\n                      }}\n                    >\n                      {/* {topic\n                        .split(\"-\")\n                        .map((word) => word[0].toUpperCase() + word.slice(1))\n                        .join(\" \")} */}\n                      {topicsName[index]}\n                    </Link>\n                  </li>\n                );\n              })}\n            </ul>\n          </Paper>\n        </div>\n      </div>\n    </div>\n  );\n}\n\nexport default Support;\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport useMdImport from \"./useMdImport\";\nimport ReactMarkdown from \"react-markdown\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {},\n\n  section: {\n    paddingTop: \"10px\",\n    paddingBottom: \"50px\",\n    marginBottom: \"50px\",\n    \"& h1\": {\n      margin: \"20px 30px\",\n      fontSize: \"40px\",\n    },\n    \"& h2\": {\n      margin: \"20px 30px\",\n      fontSize: \"30px\",\n    },\n    \"& p\": {\n      margin: \"20px 30px\",\n      fontSize: \"20px\",\n    },\n    \"& img\": {\n      maxHeight: \"60vh\",\n      maxWidth: \"35vw\",\n      display: \"block\",\n      marginLeft: \"auto\",\n      marginRight: \"auto\",\n      paddingTop: \"10px\",\n      paddingBottom: \"10px\",\n      boxShadow:\n        \"0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19)\",\n    },\n    \"& ol\": {\n      margin: \"20px 50px\",\n      padding: \"10px 50px\",\n      maxWidth: \"500px\",\n      fontSize: \"18px\",\n      borderLeft: \"5px solid #6b6b6b\",\n      backgroundColor: \"#e3e4e6\",\n    },\n  },\n}));\n\nexport default function SupportContent() {\n  const classes = useStyles();\n  // HTML content\n\n  const p1 = useMdImport(`./SupportParapraph/P1_Introduction.txt`);\n  const p2 = useMdImport(`./SupportParapraph/P2_SignUp.txt`);\n  const p3 = useMdImport(`./SupportParapraph/P3_SignIn.txt`);\n  const p4 = useMdImport(`./SupportParapraph/P4_ExploreCases.txt`);\n  const p5 = useMdImport(`./SupportParapraph/P5_SampleInventory.txt`);\n  const p6 = useMdImport(`./SupportParapraph/P6_Datasets.txt`);\n  const p6_1 = useMdImport(`./SupportParapraph/P6_1_Explore_Datasets.txt`);\n  const p6_2 = useMdImport(`./SupportParapraph/P6_2_Submit_Datasets.txt`);\n\n  return (\n    <div>\n      <section id=\"introduction\" className={classes.section}>\n        {p1}\n      </section>\n      <section id=\"sign-up\" className={classes.section}>\n        {p2}\n      </section>\n      <section id=\"sign-in\" className={classes.section}>\n        {p3}\n      </section>\n      <section id=\"explore-cases\" className={classes.section}>\n        {p4}\n      </section>\n      <section id=\"sample-inventory\" className={classes.section}>\n        {p5}\n      </section>\n      <section id=\"datasets\" className={classes.section}>\n        {p6}\n      </section>\n      <section id=\"explore-datasets\" className={classes.section}>\n        {p6_1}\n      </section>\n      <section id=\"submit-datasets\" className={classes.section}>\n        {p6_2}\n      </section>\n      <section\n        className={classes.section}\n        style={{\n          display: \"flex\",\n          justifyContent: \"flex-end\",\n        }}\n      >\n        <p style={{ fontStyle: \"italic\" }}>\n          Prepared by University of Florida, nPOD{\" \"}\n          <span style={{ fontStyle: \"normal\" }}>|</span> Version 2{\" \"}\n          <span style={{ fontStyle: \"normal\" }}>|</span> April 2024\n        </p>\n      </section>\n    </div>\n  );\n}\n","import React, { useEffect, useState, useRef } from \"react\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Container from \"@material-ui/core/Container\";\nimport AuthHeader from \"../AuthHeader\";\nimport { Box, Grid, Paper } from \"@material-ui/core\";\nimport { Link } from \"react-router-dom\";\nimport UsefulResourcesContent from \"./UsefulResourcesContent\";\n\nfunction Copyright() {\n  return (\n    <Typography variant=\"body2\" color=\"textSecondary\" align=\"center\">\n      {\"Copyright © \"}\n      <a color=\"inherit\" href=\"https://nPOD.org/\">\n        nPOD\n      </a>{\" \"}\n      {new Date().getFullYear()}\n      {\".\"}\n    </Typography>\n  );\n}\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    // minHeight: \"150vh\",\n    backgroundImage: `url(${\n      process.env.PUBLIC_URL + \"/assets/usefulResourcesPage.png\"\n    })`,\n    backgroundRepeat: \"repeat\",\n    // backgroundSize: \"cover\",\n    display: \"flex\",\n    justifyContent: \"flex-start\",\n  },\n\n  ul: {\n    listStyle: \"none\",\n    width: \"270px\",\n  },\n  li: {\n    paddingLeft: \"25px\",\n    textIndent: \"-20px\",\n    paddingTop: \"10px\",\n    paddingBottom: \"10px\",\n    borderLeft: \"3px solid #ccc\",\n    \"&.active\": {\n      borderLeft: \"3px solid #000\",\n      \"& a\": {\n        color: \"#333\",\n        // fontWeight: \"500\",\n        paddingLeft: \"20px\",\n      },\n    },\n    \"& a\": {\n      \"&:hover\": {\n        color: \"#666\",\n      },\n      \"&:active\": {\n        color: \"#000\",\n      },\n      fontSize: \"20px\",\n      paddingLeft: \"20px\",\n      textDecoration: \"none\",\n      color: \"#ccc\",\n      transition: \"all 50ms ease-in-out\",\n    },\n  },\n  contentList: {\n    marginTop: \"100px\",\n    paddingTop: \"40px\",\n    paddingBottom: \"40px\",\n    width: \"110%\",\n    // marginRight: \"auto\",\n    marginLeft: \"2vw\",\n    position: \"sticky\",\n    top: 50,\n\n    \"& h2\": {\n      paddingLeft: \"35px\",\n    },\n  },\n  articleContainer: {\n    marginTop: \"100px\",\n    width: \"100%\",\n    maxWidth: \"68vw\",\n    minWidth: \"700px\",\n    marginLeft: \"5vw\",\n    paddingBottom: \"20vh\",\n  },\n  articlePaper: {\n    padding: \"50px 60px\",\n  },\n}));\n\nfunction UsefulResources(props) {\n  const classes = useStyles();\n  const [viewTopTitle, setViewTopTitle] = useState();\n\n  useEffect(() => {\n    const observer = new IntersectionObserver((entries) => {\n      // if (entry.isIntersecting === true) {\n      //   console.log(\"You're viewing \" + entry.target.id);\n      // }\n      entries.forEach((entry) => {\n        const id = entry.target.getAttribute(\"id\");\n        try {\n          if (entry.intersectionRatio > 0) {\n            document\n              .querySelector(`ul li a[href=\"/usefulresources#${id}\"]`)\n              .parentElement.classList.add(\"active\");\n          } else {\n            document\n              .querySelector(`ul li a[href=\"/usefulresources#${id}\"]`)\n              .parentElement.classList.remove(\"active\");\n          }\n        } catch (error) {}\n      });\n    });\n    document.querySelectorAll(\"section[id]\").forEach((section) => {\n      observer.observe(section);\n    });\n  }, []);\n\n  const topics = [\n    \"introduction\",\n    \"npod-operational-model\",\n    \"organ-processing-at-npod\",\n    \"navigating-npod-platforms\",\n    \"maximizing-sample-requests\",\n    \"online-sample-ordering\",\n    \"rrid-portal\",\n    \"helpful-tutorials-and-publications-to-assist-in-data-interpretation\",\n    \"eletron-microscopy\",\n    \"genetics\",\n    \"npod-research-webinars\",\n    \"protocol-resources-for-life-scientists\",\n  ];\n\n  const topicsName = [\n    \"Introduction\",\n    \"nPOD Operational Model\",\n    \"Organ Processing at nPOD\",\n    \"Navigating nPOD Platforms\",\n    \"➤ Maximizing Sample Requests\",\n    \"➤ Online Sample Ordering\",\n    \"➤ RRID Portal\",\n    \"Helpful Tutorials and Publicaitons\",\n    \"➤ Eletron Microscopy\",\n    \"➤ Genetics\",\n    \"nPOD Research Webinars\",\n    \"Protocol Resources for Life Scientists\",\n  ];\n\n  return (\n    <div>\n      <AuthHeader location=\"Support\" />\n      <div className={classes.root}>\n        <div className={classes.articleContainer}>\n          <Paper className={classes.articlePaper}>\n            <UsefulResourcesContent />\n          </Paper>\n        </div>\n        <div>\n          <Paper className={classes.contentList}>\n            <h2>Contents</h2>\n            <ul className={classes.ul}>\n              {topics.map((topic, index) => {\n                const linkTo = \"/usefulresources#\" + topic;\n                const linkElement = topic;\n                return (\n                  <li className={classes.li}>\n                    <Link\n                      to={linkTo}\n                      onClick={() => {\n                        let target = document.getElementById(`${topic}`);\n                        target &&\n                          target.scrollIntoView({\n                            behavior: \"smooth\",\n                            block: \"start\",\n                          });\n                      }}\n                    >\n                      {/* {topic\n                        .split(\"-\")\n                        .map((word) => word[0].toUpperCase() + word.slice(1))\n                        .join(\" \")} */}\n                      {topicsName[index]}\n                    </Link>\n                  </li>\n                );\n              })}\n            </ul>\n          </Paper>\n        </div>\n      </div>\n    </div>\n  );\n}\n\nexport default UsefulResources;\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport useMdImport from \"./useMdImport\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {},\n\n  section: {\n    paddingTop: \"10px\",\n    paddingBottom: \"50px\",\n    marginBottom: \"50px\",\n    \"& h1\": {\n      margin: \"20px 30px\",\n      fontSize: \"40px\",\n    },\n    \"& h2\": {\n      margin: \"20px 30px\",\n      fontSize: \"30px\",\n    },\n    \"& h3\": {\n      margin: \"20px 30px\",\n      fontSize: \"25px\",\n    },\n    \"& h4\": {\n      margin: \"20px 30px\",\n      fontSize: \"20px\",\n    },\n    \"& p\": {\n      margin: \"20px 30px\",\n      fontSize: \"20px\",\n    },\n    \"& img\": {\n      maxHeight: \"60vh\",\n      maxWidth: \"35vw\",\n      display: \"block\",\n      marginLeft: \"auto\",\n      marginRight: \"auto\",\n      paddingTop: \"10px\",\n      paddingBottom: \"10px\",\n      boxShadow:\n        \"0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19)\",\n    },\n    \"& ol\": {\n      margin: \"20px 50px\",\n      padding: \"10px 50px\",\n      maxWidth: \"800px\",\n      fontSize: \"18px\",\n      borderLeft: \"5px solid #6b6b6b\",\n      backgroundColor: \"#e3e4e6\",\n    },\n  },\n}));\n\nexport default function UsefulResourcesContent() {\n  const classes = useStyles();\n  // HTML content\n\n  const p1 = useMdImport(`./UsefulResourcesParapraph/P1_Introduction.txt`);\n  const p2 = useMdImport(\n    `./UsefulResourcesParapraph/P2_nPOD_Operational_Model.txt`\n  );\n  const p3 = useMdImport(\n    `./UsefulResourcesParapraph/P3_Organ_Processing_At_nPOD.txt`\n  );\n  const p4 = useMdImport(\n    `./UsefulResourcesParapraph/P4_Navigating_nPOD_Platforms.txt`\n  );\n  const p4_1 = useMdImport(\n    `./UsefulResourcesParapraph/P4_1_Maximizing_nPOD_Sample_Requests.txt`\n  );\n  const p4_2 = useMdImport(\n    `./UsefulResourcesParapraph/P4_2_Online_Sample_Ordering.txt`\n  );\n  const p4_3 = useMdImport(`./UsefulResourcesParapraph/P4_3_RRID_Portal.txt`);\n  const p5 = useMdImport(\n    `./UsefulResourcesParapraph/P5_Useful_Tutorials_and_Publications.txt`\n  );\n  const p5_1 = useMdImport(\n    `./UsefulResourcesParapraph/P5_1_Electron_Microscopy.txt`\n  );\n  const p5_2 = useMdImport(`./UsefulResourcesParapraph/P5_2_Genetics.txt`);\n\n  const p6 = useMdImport(\n    `./UsefulResourcesParapraph/P6_nPOD_Research_Webinars.txt`\n  );\n  const p7 = useMdImport(\n    `./UsefulResourcesParapraph/P7_Protocol_Resouces_for_the_Life_Scientists.txt`\n  );\n\n  return (\n    <div>\n      <section id=\"introduction\" className={classes.section}>\n        {p1}\n      </section>\n      <section id=\"npod-operational-model\" className={classes.section}>\n        {p2}\n      </section>\n      <section id=\"organ-processing-at-npod\" className={classes.section}>\n        {p3}\n      </section>\n      <section id=\"navigating-npod-platforms\" className={classes.section}>\n        {p4}\n      </section>\n      <section id=\"maximizing-sample-requests\" className={classes.section}>\n        {p4_1}\n      </section>\n      <section id=\"online-sample-ordering\" className={classes.section}>\n        {p4_2}\n      </section>\n      <section id=\"rrid-portal\" className={classes.section}>\n        {p4_3}\n      </section>\n      <section\n        id=\"helpful-tutorials-and-publications-to-assist-in-data-interpretation\"\n        className={classes.section}\n      >\n        {p5}\n      </section>\n      <section id=\"eletron-microscopy\" className={classes.section}>\n        {p5_1}\n      </section>\n      <section id=\"genetics\" className={classes.section}>\n        {p5_2}\n      </section>\n      <section id=\"npod-research-webinars\" className={classes.section}>\n        {p6}\n      </section>\n      <section\n        id=\"protocol-resources-for-life-scientists\"\n        className={classes.section}\n      >\n        {p7}\n      </section>\n\n      <section\n        className={classes.section}\n        style={{\n          display: \"flex\",\n          justifyContent: \"flex-end\",\n        }}\n      >\n        <p style={{ fontStyle: \"italic\" }}>\n          Prepared by University of Florida, nPOD{\" \"}\n          <span style={{ fontStyle: \"normal\" }}>|</span> Version 1{\" \"}\n          <span style={{ fontStyle: \"normal\" }}>|</span> August 2022\n        </p>\n      </section>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport AppBar from \"@material-ui/core/AppBar\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Button from \"@material-ui/core/Button\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport MenuIcon from \"@material-ui/icons/Menu\";\nimport ArrowBackIosIcon from \"@material-ui/icons/ArrowBackIos\";\nimport { useParams, useHistory } from \"react-router-dom\";\nimport { Helmet } from \"react-helmet\";\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    flexGrow: 1,\n    backgroundColor: \"#263238\",\n  },\n  menuButton: {\n    marginRight: theme.spacing(1),\n    \"&:hover\": {\n      background: \"none\",\n    },\n  },\n  title: {\n    flexGrow: 1,\n  },\n  appBar: {\n    color: \"transparent\",\n  },\n}));\n\nexport default function AuthHeader({ location }) {\n  const classes = useStyles();\n  const [title, setTitle] = useState(\"\");\n  const history = useHistory();\n  const homeHandler = () => {\n    history.push(\"/\");\n  };\n\n  return (\n    <div className={classes.root}>\n      <Helmet>\n        <title>nPOD {location}</title>\n      </Helmet>\n      <AppBar position=\"static\" color=\"primary\">\n        <Toolbar>\n          <IconButton\n            edge=\"start\"\n            className={classes.menuButton}\n            color=\"inherit\"\n            aria-label=\"menu\"\n            onClick={homeHandler}\n          >\n            <ArrowBackIosIcon />\n            <div>\n              <Typography variant=\"h6\" className={classes.title}>\n                HOME\n              </Typography>\n            </div>\n          </IconButton>\n        </Toolbar>\n      </AppBar>\n    </div>\n  );\n}\n","var map = {\n\t\"./userAgreementText.txt\": [\n\t\t1450,\n\t\t30\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 634;\nmodule.exports = webpackAsyncContext;"],"sourceRoot":""}