{"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}> </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 _ + - = [ ] { } ; ' : \" \\ | , . < > / ?\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 & 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} 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]} <=\n input length <= {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]} <=\n input length <= {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]} <=\n input length <= {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]} <=\n input <=\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]} <=\n input <=\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'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 ) _ + - = [ ] { } ; ' : \" \\ | , . < >\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":""}