{"version":3,"sources":["components/common/helpers/roles.ts","components/common/helpers/rules.ts","components/common/helpers/status.ts","components/common/helpers/recaptcha-res.ts","components/common/helpers/messages.ts","components/common/services/http-requester.ts","components/common/services/projects-svc.ts","components/common/services/patients-svc.ts","components/common/services/utils-svc.ts","components/common/services/users-svc.ts","components/common/services/payment-svc.ts","components/common/services/data-svc.ts","components/modules/new-project/constants.ts","components/modules/new-project/actionTypes.js","components/modules/new-project/actions.ts","components/modules/new-project/model.ts","components/common/static/loading-animation/loader.tsx","components/common/static/textbox.tsx","components/common/static/numberbox.tsx","components/common/static/dropdown.tsx","components/common/static/textarea.tsx","components/common/static/toggle-btn.tsx","components/common/static/date-menu.tsx","components/modules/new-project/components/project-info/general.tsx","components/common/static/toggle-btn-nonCMS.tsx","components/modules/new-project/components/project-info/patients.tsx","components/modules/new-project/components/project-info/index.tsx","components/common/static/emailbox.tsx","components/modules/new-project/components/researcher-info/personal.tsx","components/modules/new-project/components/researcher-info/company.tsx","components/modules/new-project/components/researcher-info/index.tsx","components/common/static/multiselect.tsx","components/common/static/GDPR-toggle.tsx","components/modules/new-project/components/patient-info/additional.tsx","components/common/static/select-menu.tsx","components/common/static/async-select-menu.tsx","components/common/static/checkbox-toggle.tsx","components/modules/new-project/components/patient-info/disease.tsx","components/modules/new-project/components/patient-info/index.tsx","components/common/static/confirm-page.tsx","components/modules/new-project/components/component-root.tsx","components/modules/new-project/containers/component-root.tsx","components/modules/new-project/reducer.ts","components/modules/new-project/index.ts","components/modules/patient-profile/constants.ts","components/modules/patient-profile/actionTypes.js","components/modules/patient-profile/model.ts","components/modules/patient-profile/actions.ts","components/modules/patient-profile/components/personal-info/generic.tsx","components/modules/patient-profile/components/personal-info/specific.tsx","components/modules/patient-profile/components/personal-info/index.tsx","components/modules/patient-profile/components/experience-info/disease-exp.tsx","components/modules/patient-profile/components/experience-info/proj-exp.tsx","components/modules/patient-profile/components/experience-info/index.tsx","components/modules/patient-profile/components/preference-info/comp-req.tsx","components/modules/patient-profile/components/preference-info/proj-req.tsx","components/modules/patient-profile/components/preference-info/index.tsx","components/modules/patient-profile/components/component-root.tsx","components/modules/patient-profile/containers/component-root.tsx","components/modules/patient-profile/reducer.ts","components/modules/patient-profile/index.ts","components/modules/home/constants.ts","components/modules/home/actionType.js","components/modules/home/actions.ts","images/net_ball_half.png","images/net_ball_light.png","components/modules/home/components/testimonials.tsx","images/why-eupati/why1.png","images/why-eupati/why2.png","images/why-eupati/why4.png","images/why-eupati/why5.png","images/why-eupati/why6.png","images/why-eupati/why9.png","components/api-authorization/ApiAuthorizationConstants.js","components/api-authorization/AuthorizeService.js","components/common/static/auth-context.tsx","components/modules/home/components/component-root.tsx","images/researcher.png","images/patient.png","images/why-eupati/why3.png","images/why-eupati/why7.png","images/why-eupati/why8.png","images/net_ball_partial.png","images/patient-engagement-tools/engagement_separator.png","images/patient-engagement-tools/roadmap.png","images/patient-engagement-tools/guidances.png","images/faq/faq_separator.png","images/faq/how_does_work.png","components/modules/home/containers/component-root.tsx","components/modules/home/reducer.ts","components/modules/home/index.ts","components/modules/admin/all-projects/constants.ts","components/modules/admin/all-projects/actionTypes.js","components/modules/admin/all-projects/model.ts","components/modules/admin/all-projects/actions.ts","components/common/static/arrows-menu.tsx","components/common/static/patient-details.tsx","components/common/static/popup-modal.tsx","components/common/static/react-table-checkbox.tsx","components/common/static/matched-patients-grid.tsx","components/common/static/manual-search/index.tsx","components/common/static/project-details.tsx","components/common/static/global-filter.tsx","components/common/static/projects-grid.tsx","components/modules/admin/all-projects/components/component-root.tsx","components/modules/admin/all-projects/containers/component-root.tsx","components/common/static/csv-import/csv-mapping-helper.ts","components/modules/admin/all-projects/reducer.ts","components/modules/admin/all-projects/index.ts","components/modules/admin/import-patients/constants.ts","components/modules/admin/import-patients/actionTypes.js","components/modules/admin/import-patients/actions.ts","components/common/static/csv-import/csv-mapping.tsx","components/modules/admin/import-patients/model.ts","components/common/static/import-preview-grid.tsx","components/modules/admin/import-patients/components/component-root.tsx","components/modules/admin/import-patients/containers/component-root.tsx","components/modules/admin/import-patients/reducer.ts","components/modules/admin/import-patients/index.ts","components/modules/admin/all-patients/constants.ts","components/modules/admin/all-patients/actionTypes.js","components/modules/admin/all-patients/actions.ts","components/common/static/confirm-deny-modal.tsx","components/common/static/patients-grid.tsx","components/modules/admin/all-patients/components/component-root.tsx","components/modules/admin/all-patients/containers/component-root.tsx","components/modules/admin/all-patients/reducer.ts","components/modules/admin/all-patients/index.ts","components/modules/admin/admins-ls/constants.ts","components/modules/admin/admins-ls/actionTypes.js","components/modules/admin/admins-ls/actions.ts","components/common/static/admins-grid.tsx","components/modules/admin/admins-ls/components/component-root.tsx","components/modules/admin/admins-ls/containers/component-root.tsx","components/modules/admin/admins-ls/reducer.ts","components/modules/admin/admins-ls/index.ts","components/modules/admin/content-editor/constants.ts","components/modules/admin/content-editor/actionTypes.js","components/modules/admin/content-editor/actions.ts","components/common/static/tinymce-editor.tsx","components/modules/admin/content-editor/components/component-root.tsx","components/modules/admin/content-editor/containers/component-root.tsx","components/modules/admin/content-editor/reducer.ts","components/modules/admin/content-editor/models.ts","components/modules/admin/content-editor/index.ts","components/modules/admin/price-catalog/constants.ts","components/modules/admin/price-catalog/actionTypes.js","components/modules/admin/price-catalog/actions.ts","components/common/helpers/pricing-list.ts","components/common/static/prices-grid.tsx","components/modules/admin/price-catalog/components/component-root.tsx","components/modules/admin/price-catalog/containers/component-root.tsx","components/modules/admin/price-catalog/reducer.ts","components/modules/admin/price-catalog/index.ts","components/modules/pricing/constants.ts","components/modules/pricing/actionType.js","components/modules/pricing/actions.ts","images/pricing/asterics.png","components/modules/pricing/components/basic-plan.tsx","components/modules/pricing/components/tailor-made-plan.tsx","components/modules/pricing/components/custom-plan.tsx","components/modules/pricing/components/component-root.tsx","components/modules/pricing/containers/component-root.tsx","components/modules/pricing/reducer.ts","components/modules/pricing/index.ts","components/modules/admin/content-management/constants.ts","components/modules/admin/content-management/actionTypes.js","components/modules/admin/content-management/actions.ts","components/modules/admin/content-management/components/content.tsx","components/modules/admin/content-management/components/component-root.tsx","components/modules/admin/content-management/containers/component-root.tsx","components/modules/admin/content-management/reducer.ts","components/modules/admin/content-management/model.ts","components/modules/admin/content-management/index.ts","components/modules/admin/email-templates/constants.ts","components/modules/admin/email-templates/actionTypes.js","components/modules/admin/email-templates/models.ts","components/modules/admin/email-templates/actions.ts","components/common/static/template-editor.tsx","components/common/static/actions-template-menu.tsx","components/modules/admin/email-templates/components/component-root.tsx","components/modules/admin/email-templates/containers/component-root.tsx","components/modules/admin/email-templates/reducer.ts","components/modules/admin/email-templates/index.ts","components/modules/confirm/constants.ts","components/modules/confirm/actionTypes.js","components/modules/confirm/actions.ts","components/modules/confirm/components/component-root.tsx","components/modules/confirm/containers/component-root.tsx","components/modules/confirm/reducer.ts","components/modules/confirm/index.ts","components/modules/payment/constants.ts","components/modules/payment/actionType.js","components/modules/payment/actions.ts","components/common/static/checkout-outcome.tsx","components/common/static/stripe-card.tsx","components/modules/payment/components/component-root.tsx","components/modules/payment/containers/component-root.tsx","components/modules/payment/reducer.ts","components/modules/payment/index.ts","store/index.ts","components/common/static/routes/admin-routes.js","components/common/static/routes/protected-route.js","images/logo.jpg","components/api-authorization/Login.js","components/api-authorization/LoginMenu.js","components/common/static/navbar.tsx","components/common/static/footer.tsx","components/common/static/Layout.tsx","components/api-authorization/Logout.js","components/api-authorization/ApiAuthorizationRoutes.js","App.tsx","registerServiceWorker.ts","index.tsx","store/configureStore.ts"],"names":["roles","requiredMessage","required","selectOptionMessage","notRequired","projectStatus","patientStatus","response","FAIL_AUTH_MSG","ADMIN_ACCESS_DENIED_MSG","SUCC_UPDATED_CATALOGS","INVALID_PRICING_DATA","INVALID_PAYMENT_METHOD","EMAILS_COPIED_MSG","SELECTED_ALL_MSG","REMOVE_ADMIN_SUCC_MSG","APPROVE_ADMIN_SUCC_MSG","REMOVE_PT_SUCC_MSG","ADD_PT_TO_PROJ_MSG","CONFIRM_PATIENT_MSG","DEL_PT_FROM_PROJ_MSG","ARCHIVE_PROJ_SUCC_MSG","SAVED_NEW_PRICES_MSG","SEND_EMAILS_SUCC_MSG","INVALID_NUMERIC_INPUT","CANCEL_PRICES_UPDATE","EMAIL_TEMPLATE_CREATED","EMAIL_TEMPLATE_UPDATED","FILL_ALL_FIELD_ERR_MSG","ANSWER_SUBMIT_SUCC","SUCC_ASSIGN_ACTIONS_TO_TEMPLATE","axios","require","HttpRequester","rootUrl","url","this","error","console","JSON","stringify","msg","message","data","status","path","that","Promise","resolve","reject","fullPath","get","then","result","handleError","content","post","headers","baseUrl","ProjectsSvc","httpRequester","httpGet","project","httpPost","id","inputModel","PatientSvc","patient","patientData","patientsData","UtilsSvc","condition","uid","tokenObj","name","contentData","UsersSvc","admin","PaymentSvc","DataSvc","projectsSvc","patientSvc","utilsSvc","usersSvc","paymentSvc","NAME","SET_PROJECTS_LOADING","SET_PROJECT","SET_LOOKUP_DATA","SET_IS_USER_REAL","setProjectLoading","isLoading","type","t","payload","setProject","setLookUpData","setIsUserReal","isUserReal","getLookUpDataAsync","dispatch","getState","getLookUpData","saveNewProjectAsync","newProject","saveNewProject","verifyUserTokenAsync","token","verifyUserByRecaptchaToken","recaptchaToken","Res","emptyProject","overview","projectTypeId","projectActivityId","projectNumberOfPatientsNeeded","interactionTypeId","roleAndExpectations","startDate","undefined","endDate","timeRequired","isCompensationProvided","compensation","isThereTravelReimbursement","equipmentRequirements","responseDeadline","diseases","noDiseaseExpertiseRequired","searchDiseaseTherapeuticArea","price","plan","package","paymentMethod","patientExpertises","patientExpertisesDescription","countries","languages","otherInformation","pocFirstName","projectTypeDescription","pocLastName","pocOrganisation","pocOrganisationTypeId","pocOrganisationTypeDescription","pocJobTitle","pocCountryId","pocPhoneNumber","pocEmail","isGDPRConsentGiven","matchedPatients","confirmedPatients","EupatiLoader","className","props","text","React","EupatiTextbox","Form","Group","Control","fieldType","value","placeholder","onChange","e","errorMsg","EupatiNumberbox","EupatiDropdown","state","vals","compare","bind","values","fieldName","toLowerCase","includes","setState","sort","a","b","optionsComponent","dropdownComponent","length","map","x","i","key","defaultOptionText","disabled","as","style","width","EupatiTextarea","element","height","current","scrollHeight","rows","rowsCount","placeholderMsg","isDisabled","ref","EupatiToggleBtn","returnProperIconType","icon","valuesComponent","btnComponent","ToggleButton","faDotCircle","clear","display","overflow","whiteSpace","trim","ToggleButtonGroup","EupatiDateMenu","toString","ProjectGeneralInfo","history","useHistory","useForm","handleSubmit","control","watch","errors","reset","formState","fieldsData","adjustFieldsValues","onSubmit","toast","Messages","push","updatedProject","Object","assign","showPatientsInfoSection","Label","defaultValue","returnProperDefaultValue","rules","Rules","render","field","returnProperLookUpData","projectId","projectTypes","find","toggleField","Button","variant","onClick","prevPage","EupatiNonCMSToggleBtn","isMoreThanTwoOptions","pop","ProjectPatientsInfo","nextPage","val","fieldToggle","hidePatientsInfoSection","ProjectInfo","useState","showSecondSubComponent","nextBtnClicked","setNextBtnClicked","toggleSectionVisibility","margin","EupatiEmailbox","PersonalInfo","showCompanyInfoSection","visibility","CompanyInfo","faInfoCircle","findLookUpData","orgTypeId","organisationTypes","hideCompanyInfoSection","ResearcherInfo","ALL_ELEMENTS_OPTION","EupatiMultiselect","handleOnChange","ids","forEach","multiSelectComponent","border","faCheckSquare","EupatiGDPRBtn","gdprComponent","href","target","PatientsAdditionalInfo","submitProject","ptExpertises","otherType","ot","some","hidePatientsAdditionalInfoSection","EupatiSelect","mapOptionsToValues","options","item","option","label","langCompare","mapArrayToValues","arr","newElement","returnComponentStyles","continentsBoldStyles","multiValueLabel","base","backgroundColor","color","padding","paddingLeft","multiValueRemove","cursor","dropdownIndicator","indicatorsContainer","fontWeight","menu","position","menuList","regularStyles","event","isMulti","styles","EupatiDiseaseAsyncSelect","mapDiseaseOptionsToValues","treeNumbers","loadAutocompleteOptions","inputValue","applyFiltersTimeoutId","clearTimeout","setTimeout","getMeshRecommendations","diseaseOptions","m","join","originalTerm","loadOptions","EupatiCheckbox","checked","CUSTOM_SPAN_STYLES","PatientsDiseaseInfo","showPatientsAdditionalInfoSection","multiline","isAutocomplete","flexDirection","fontSize","noDiseaseExpertise","PatientInfo","EupatiConfirmPage","marginTop","to","ComponentRoot","showComponentByIndex","nextPageHandler","previousPageHandler","historyState","location","window","initialProjectData","submitNewProject","prevState","lookUpDataType","lookUpData","filter","dataType","mainComponent","loadingComponent","spanStyles","borderRadius","action","onVerify","connect","globalState","Constants","Actions","RootComponent","initialState","setProjectsLoading","actions","components","Components","containers","Containers","constants","reducer","Root","SET_PATIENTS_LOADING","SET_PATIENT_INFO","SET_PATIENT_DATA_LOADING","defaultPatientInfo","firstName","lastName","phoneNumber","email","birthYear","genderTypeId","countryId","countriesWithExperience","isPOAffiliated","patientOrganisation","patientExperienceId","projectTypeExperiences","projectTypeExperiencesDescription","patientExpertiseDescription","genderTypeDescription","organisationPreferenceDescription","projectPreferenceDescription","isEligibleForCompensation","isAvailableForNoCompensation","projectPreferences","organisationPreferences","activityPreferenceId","matchedProjects","confirmedProjects","isBannedFromSearch","setPatientLoading","setPatientInfo","setPatientDataLoading","isPatientDataLoaded","updatePatientAsync","updatePatient","getRidOfIncorrectNullValues","saveNewPatientAsync","savePatient","getPatientInfoByIdAsync","patientId","getPatientById","getPatientInfoByUserIdAsync","userId","getPatientByUserId","object","updatedPatientObject","PatientGenericInfo","editedPatientInfo","showPatientSpecificInfoSection","PatientSpecificInfo","otherGenderType","gt","fieldGenderTypeToggle","fieldIsPOAffiliatedToggle","hidePatientSpecificInfoSection","PatientGeneralInfo","PatientsDiseaseExpInfo","hidePatientsDiseaseExpInfo","PatientsProjectExpInfo","showPatientsDiseaseExpInfo","togglePtExpertiseField","projTypeExp","toggleProjTypeExpField","PatientExpcInfo","PatientProjectReqInfo","orderLookUpOptionsByNameLength","showPatientCompensationReqInfo","projPrefs","toggleProjPrefField","orgTypes","toggleOrgPrefField","PatientCompensationReqInfo","isNewPatient","submitNewPatient","hidePatientCompensationReqInfo","RequirementsInfo","showLoadingComponent","locationState","setPatientData","isUserPatient","setUserPatientData","SET_HOME_LOADING","SET_HOME_LOGGED_IN","setHomeLoading","setHomeLoggedInStatus","isLoggedIn","setUserStatusAsync","isUserAdmin","Testimonials","carouselProps","autoPlay","interval","centerMode","centerSlidePercentage","infiniteLoop","showStatus","showThumbs","ApplicationName","QueryParameterNames","LogoutActions","LoginActions","prefix","ApplicationPaths","DefaultLoginRedirectPath","ApiAuthorizationClientConfigurationUrl","ApiAuthorizationPrefix","Login","LoginFailed","LoginCallback","Register","Profile","LogOut","LoggedOut","LogOutCallback","IdentityRegisterPath","IdentityManagePath","AuthorizeService","_callbacks","_nextSubscriptionId","_user","_isAuthenticated","_timesCalled","_popUpDisabled","getUser","user","profile","ensureUserManagerInitialized","userManager","promise","res","access_token","signinSilent","createArguments","silentUser","updateState","log","success","Error","signinPopup","popUpUser","signinRedirect","redirect","signinCallback","signoutPopup","signoutRedirect","signoutCallback","notifySubscribers","callback","subscription","subscriptionId","subscriptionIndex","index","found","splice","useReplaceToNavigate","AuthenticationResultStatus","Fail","Success","Redirect","fetch","ok","json","settings","automaticSilentRenew","includeIdTokenInSilentRenew","userStore","WebStorageStateStore","UserManager","events","addUserSignedOut","removeUser","authService","defaultState","userIdentity","AuthenticationContext","createContext","AuthenticationProvider","children","setIsUserAdmin","setUserIdentity","Provider","authenticateUser","role","toUpperCase","Roles","sub","context","setUserStatus","whyComponent","noteComponent","statsComponent","patientEngagementComponent","testimonialComponent","faqComponent","PatientBtn","withRouter","pathname","ResearcherBtn","Card","boxShadow","Img","src","Body","Title","textAlign","Text","imgWhy1","imgWhy2","imgWhy4","imgWhy5","imgWhy6","imgWhy9","imgNetBallHalf","faCheck","imgNetBallLight","contextType","isAdmin","SET_LOADING","SET_PROJECTS","SET_PROJECTS_FILTER","SET_MATCHED_PATIENTS","SET_MATCHED_PATIENTS_LOADING","SET_PROJECT_DATA","SET_PROJECT_LOADING","SET_TEMPLATES_LOADING","SET_EMAIL_TEMPLATES","SET_SINGLE_EMAIL_TEMPLATE","defaultEmailTemplate","subject","htmlContent","setLoading","setProjects","projects","setIsProjectsLoading","isProjectsLoading","setProjectsFilter","setMatchedPatients","setMatchedPatientsLoading","isMatchedPatientsLoading","setProjectData","setEmailTemplates","emailTemplates","setSingleEmailTemplate","singleEmailTemplate","setEmailTemplateLoading","emailTemplateLoading","getAllFilteredProjectsAsync","getAllProjects","projectStatusId","updateSearchPatients","searchData","projectName","searchPatients","pt","getProjectDataByIdAsync","getProjectById","removePatientFromProjectAsync","removePatientFromProject","addPatientToProjectAsync","assignPatientToProject","changePatientStatusToConfirmAsync","changePatientStatusToConfirm","changeProjectStatusAsync","statusId","changeProjectStatus","submitEmailDataAsync","sendEmail","catch","getAllEmailTemplatesAsync","getAllEmailTemplates","getEmailTemplateByNameAsync","getEmailTemplateByName","EupatiArrowsMenu","isBtnDisabled","setIsBtnDisabled","btnCursorProps","setBtnCursorProps","displayStylesProp","backBtnHandler","faArrowLeft","leftArrowText","isForwardArrowAvail","forwardBtnHandler","rightArrowText","assignPatientFromProject","EupatiPatientDetails","backBtnClicked","returnValueById","returnJoinedArrayValues","propName","projectPropId","propType","propValue","fieldProps","patientInfo","d","Table","striped","bordered","hover","escape_quotes","EmailModalPopup","isMaxSize","setIsMaxSize","singleTemplateData","setSingleTemplateData","targetedPeople","recipients","split","submitRequest","returnHtmlContent","patients","tp","handleTemplateOnChange","parseInt","selectTemplateByIndex","handleEditorChange","updatedHtmlContent","trigger","btnText","modal","close","onFocus","stopPropagation","faWindowClose","faWindowMaximize","faWindowMinimize","templates","dropdownValues","apiKey","init","menubar","convert_urls","relative_urls","remove_script_host","plugins","toolbar","content_style","onEditorChange","Check","forwardRef","indeterminate","rest","defaultRef","useRef","resolvedRef","useEffect","EupatiPatientsGrid","allTemplates","setAllTemplates","setDropdownValue","localeCompare","templatesToLookUpOptions","returnLookUpValueByTypeAndId","rightBtnHandler","rightBtnText","removePatient","deleteProjectPatient","addPatient","patientSearchData","addProjectPatient","useMemo","concat","country","expertises","pe","columns","Header","accessor","useTable","useRowSelect","hooks","isManualSearchBtnClicked","visibleColumns","cols","getToggleAllRowsSelectedProps","Cell","row","getToggleRowSelectedProps","getTableProps","getTableBodyProps","headerGroups","prepareRow","selectedFlatRows","toggleAllRowsSelected","headerGroup","getHeaderGroupProps","col","getHeaderProps","getRowProps","cells","cell","getCellProps","original","patientProfileBtnHandler","toggleComponents","leftBtnText","isConfirmed","changePatientStatus","isPatientProfileClicked","backToProjectProfile","alignItems","justifyContent","marginBottom","resetValues","selectedTemplate","EupatiManualMatch","isSubmitBtnClicked","setIsSubmitBtnClicked","setIsPatientProfileClicked","ptSearchData","setPtSearchData","loadingComp","patientsGridComp","EupatiProjectDetails","manualSearchBtnHandler","convertDate","setProjectById","date","pad","Date","getDate","getMonth","getFullYear","s","page","document","getElementById","html2canvas","canvas","imgData","toDataURL","pdf","jsPDF","addImage","open","output","backToAllProjects","textDecoration","downloadPDF","GlobalFilter","setFilter","OUTLINE_PADDING_STYLE","paddingRight","PRIMARY_PADDING_STYLE","EupatiAllProjectsGrid","isDetailsBtnClicked","setIsDetailsBtnClicked","clickedProjectId","setClickedProjectId","changeProjectStatusHandler","findIndex","unshift","projectsDetailsComp","projectStatusHandler","isProjectLoading","statuses","createdOn","org","statusText","useGlobalFilter","useSortBy","usePagination","previousPage","canNextPage","canPreviousPage","pageOptions","gotoPage","pageCount","setPageSize","setGlobalFilter","globalFilter","pageSize","pageIndex","getSortByToggleProps","isSorted","isSortedDesc","faSortAlphaDown","faSortAlphaUp","colSpan","min","preventDefault","pageNum","Number","projectsFilter","isNaN","ProjectStatus","filename","uniqid","faFileExcel","newMappedObj","SET_IS_DATA_SUBMITTED","SET_LOOK_UP_DATA","setIsDataSubmitted","isDataSubmitted","submitMatchedDataAsync","importPatients","CSVMappingComponent","mapping","selectMatchingCsvColumn","finishMapping","mapItem","objectProperty","csvColumnName","isOptionSelected","objPropsOptions","keys","csvObject","k","mappingComponent","objectProperties","p","FormGroup","ImportProperties","csvDataToJson","mappedData","j","ImportPreviewGrid","lookUpOptions","errorMessage","lookUpValue","expertise","isMappingMode","isPreviewMode","csvImportTypeHandler","readCSVData","handleReadingError","activateMapping","submitData","fileInfo","debug","err","patientExpertise","l","md","submitPatientsData","uploadCSVComponent","csvMappingComponent","previewComponent","confirmPage","cssClass","onFileLoaded","parserOptions","header","dynamicTyping","skipEmptyLines","encoding","transformHeader","replace","onError","inputId","inputName","inputStyle","csvMappingProps","previewData","slice","mappedPreviewData","FormLabel","getLookUpDate","SET_PATIENTS","SET_PATIENT_INFO_LOADING","setPatients","setIsPatientsLoading","isPatientsLoading","setPatientInfoLoading","isPatientInfoLoading","getAllPatientsAsync","getAllPatients","getPatientByIdAsync","removePatientByIdAsync","ConfirmDenyModal","toLocaleUpperCase","params","handleRemove","targetId","EupatiAllPatients","patientsDetailsComp","handleRemovePatient","removePatientById","phone","gender","patientExperience","activityPreference","pp","pte","op","c","loadComp","patientDetails","showPatientDetails","handlePatientDetails","setPatientsLoading","SET_ADMINS_LOADING","SET_ADMINS","setIsAdminsLoading","isAdminsLoading","setAdmins","admins","getAllAdminsAsync","getAllAdmins","removeAdminAsync","ownerId","getEupatiUserById","removeAdmin","approveAdminAsync","getAdminById","approveAdmin","EupatiAllAdminsGrid","contextData","useContext","handleOnRemove","Parser","setAdminsData","mainComp","removeAdminData","Component","setAdminsLoading","SET_CONTENT_LOADING","SET_CONTENT_RESPONSE","setContentLoading","isContentLoading","setContentResponse","contentResponse","getContentByNameAsync","getContent","updateContentAsync","updateContent","TinyMCEditor","editorRef","onInit","evt","editor","initialValue","setup","ui","registry","addButton","onAction","_","insertContent","pageName","rawDraftContent","SET_IS_CATALOGS_LOADING","SET_CATALOGS_DATA","setIsCatalogsLoading","isCatalogsLoading","setCatalogsData","catalogsData","getCatalogsPricesAsync","getPriceCatalogs","updateCatalogsPricesAsync","updatePriceCatalogs","CATALOG_TYPES","Basic","TailorMade","CATEGORY_NAMES","Researcher","Industry","Academia","OPTION_NAMES","CONVERTED_NAMES","EupatiPricesGrid","isEditBtnClicked","setIsEditBtnClicked","tempData","setTempData","formatNumber","num","Math","round","toFixed","convertCategoriesNames","convertOptionsNames","category","info","setCatalogsPrices","updateCatalogsPrices","catalogIndex","convertCatalogTypesNames","categoryOptionsData","categoryIndex","basePrice","updatedData","onChangeBasePriceHandler","parseFloat","additionalOptionsData","optionIndex","onChangeOptionsPriceHandler","totalPrice","SET_PRICING_LOADING","SET_PRICING_LOGGED_IN","SET_IS_USER_ADMIN","setPricingLoading","setPricingLoggedInStatus","getCatalogsPricesDataAsync","BasicPlanComponent","bgColor","selectedOption","setSelectedOption","faChevronDown","setIcon","faChevronUp","paymentIcon","setPaymentIcon","selectedPaymentMethod","setSelectedPaymentMethod","defaultPaymentMethod","setDefaultPaymentMethod","updatePaymentMethodOnClick","method","paymentMethods","pm","selectedOptionStyle","submitBtn","pricingCard","Accordion","Toggle","eventKey","returnIcon","Collapse","basicPlanCategories","categoryName","updatedState","priceChanged","paymentOptions","top","left","methodIndex","paymentsCard","submitBasic","defaultActiveKey","astericsImg","paddingTop","minHeight","DEFAULT_COLOR_SELECTED","DEFAULT_OPTIONS_MENU","TailorMadeComponent","additionals","updateAdditionalOptionsOnClick","updatedAdditionals","updatedText","removeItemFromAdditionals","addItemToAdditionals","displayCategoryNameWithOptions","optionNames","o","categoriesCard","tailorMadePlanCategories","optionsBlock","Fragment","optionName","faSquare","submitTailorMade","CustomPlanComponent","contactUsBtn","paddingBottom","lineHeight","returnCategoriesArrayByCatalogType","catalogType","priceCatalog","catalogData","tabs","Nav","Item","Link","tabContents","Tab","Pane","Container","Content","HtmlToReactParser","EupatiPrivacyPage","reactElement","parse","reactHtml","ReactDOMServer","renderToStaticMarkup","contentName","dangerouslySetInnerHTML","__html","CURRENT_PATH","substring","SET_EMAIL_TEMPLATES_LOADING","SET_EMAIL_TEMPLATE_DATA","SET_SINGLE_EMAIL_TEMPLATE_LOADING","SET_SINGLE_EMAIL_TEMPLATE_DATA","SET_PROJECT_MODEL_PROPS_NAMES","SET_PATIENT_MODEL_PROPS_NAMES","SET_TRIGGERS_MENU_OPTIONS","SET_TRIGGERS_MENU_OPTIONS_LOADING","SET_RECEIVERS_MENU_OPTIONS","SET_CHOOSEN_RECEIVERS","emptyTemplate","setIsEmailTemplatesLoading","isEmailTemplatesLoading","setEmailTemplatesData","emailTemplatesData","setIsSingleEmailTemplateLoading","isSingleEmailTemplateLoading","setSingleEmailTemplateData","emailTemplateData","setProjectModelPropsNames","projectModelPropsNames","setPatientModelPropsNames","patientModelPropsNames","setTriggersMenuOptions","emailAutomationTriggers","setTriggersMenuOptionsLoading","isTriggersMenuOptionsLoading","setReceiversMenuOptions","receiversMenuOptions","setChoosenReceivers","choosenReceivers","setAllEmailTemplatesAsync","setEmailTemplateByIdAsync","getEmailTemplate","createNewEmailTemplateAsync","addEmailTemplate","updateEmailTemplateDataAsync","alterEmailTemplateData","removeEmailTemplateDataAsync","removeEmailTemplate","setModelsPropsNamesAsync","getClassPropertiesNames","projectProps","items","patientsProps","setTriggersMenuOptionsAsync","getEmailAutomationTriggers","assignActionsToEmailTemplateAsync","assignActionsToEmailTemplate","misallocateActionsFromEmailTemplateAsync","misallocateActionsFromEmailTemplate","emailTemplateId","setReceiversMenuOptionsAsync","setEmailTriggerTemplateBeneficiariesAsync","getEmailTriggerTemplateBeneficiaries","randomstring","EmailTemplateEditor","eupatiURL","emailTemplateName","setEmailTemplateName","emailTemplateSubject","setEmailTemplateSubject","updatedEmailTemplateData","onSaveTemplateChangesHandler","onBackToAllHandler","properties","title","generate","addNestedMenuItem","getSubmenuItems","projectPropsNames","patientPropsNames","ActionsTemplateMenu","emailTemplate","eta","templateTriggers","setTemplateTriggers","assignActionsToTemplate","receivers","triggersMenuOptions","tt","EmailTemplates","isCreateTemplateClicked","setIsCreateTemplateClicked","isEditTemplateClicked","setIsEditTemplateClicked","isActionsBtnClicked","setIsActionsBtnClicked","getAllTemplates","getTriggersMenuOptions","getReceiversMenuOptions","getModelsPropsName","getSingleTemplate","onRemoveTemplateHandler","emailTemplatesComp","etd","emailTemplateEditor","singleEmailTemplateData","updateEmailTemplate","createEmailTemplate","emailTemplatesActionsComp","filteredTriggersMenuOptions","tmo","etda","setEmailTemplatesLoading","setSingleEmailTemplateLoading","changePatientStatusAsync","addSurveyAnswerAsync","addSurveyAnswer","addProjectFeedbackAsync","addFeedback","CONFRIM_PATH","REJECT_PATH","regex","DEFAULT_HTML","EmailResponsePage","html","setHtml","setText","setUID","pid","setPID","matches","setMatches","match","matchAll","sid","txt","addProjectFeedback","feedback","SET_PAYMENT_LOADING","SET_LOOKUP_DATA_LOADING","SET_PAYMENT_RESPONSE","SET_ALL_COUNTRIES_DATA","SET_ALL_COUNTRIES_LOADING","setPaymentLoading","setLookUpDataLoading","setPaymentResponse","model","setAllCountriesData","setAllCountriesLoading","getAllCountriesAsync","getAllCountries","createPaymentIntentAsync","createPaymentIntent","CheckoutResult","isFail","startLoading","swapComponents","clientSecret","StripeCard","elements","useElements","stripe","useStripe","setIsLoading","setMessage","shouldRenderSubComp","setShouldRenderSubComp","isPaymentFailed","setIsPaymentFailed","city","line1","line2","zip","cardElement","getElement","CardElement","confirmCardPayment","payment_method","card","billing_details","address","returnCountryCode","postal_code","stripeError","paymentIntent","code","shouldSwap","subComp","htmlFor","hidePostalCode","isLookUpDataLoading","isPaymentLoading","isCountriesLoading","paymentResponse","reducers","contentManagement","homePage","paymentPage","payment","patientProfile","emailResponse","allAdmins","adminsLs","allPatients","allProjects","contentEditor","pricingPage","pricing","AdminRoute","component","restOfProps","ProtectedRoute","loginHelper","fromQuery","URLSearchParams","search","startsWith","origin","returnUrl","login","getReturnUrl","processLoginCallback","redirectToProfile","redirectToRegister","signIn","navigateToReturnUrl","completeSignIn","redirectToApiAuthorizationPath","encodeURI","apiAuthorizationPath","redirectUrl","LoginMenu","isAuthenticated","userName","_subscription","subscribe","populateState","signInSilent","unsubscribe","all","profilePath","logoutPath","local","authenticatedView","registerPath","loginPath","anonymousView","NavItem","NavLink","tag","NavBar","forceUpdate","prevProps","ImgCard","Image","logo","rounded","Navbar","Brand","faHome","marginLeft","expand","collapseOnSelect","Footer","currentYear","PureComponent","Layout","Logout","isReady","authenticated","logout","processLogoutCallback","populateAuthenticationState","signOut","completeSignOut","ApiAuthorizationRoutes","loginAction","logoutAction","App","handler","closest","stopImmediatePropagation","addEventListener","removeEventListener","autoClose","transition","Slide","hideProgressBar","background","buttonStyle","buttonClasses","expires","exact","HomePage","PricingPage","NewProjectPage","ContentManagement","PatientInfoPage","AdminProjectsPage","AdminImportPatients","AdminPatientsPage","AdminLsPage","ContentEditor","PriceCatalog","isLocalhost","Boolean","hostname","registerValidSW","swUrl","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","getElementsByTagName","getAttribute","createBrowserHistory","basename","store","middleware","thunk","routerMiddleware","rootReducer","combineReducers","router","connectRouter","enhancers","windowIfDefined","__REDUX_DEVTOOLS_EXTENSION__","createStore","compose","applyMiddleware","configureStore","ReactDOM","reCaptchaKey","URL","process","contentType","indexOf","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.4203772c.chunk.js","sourcesContent":["export const roles = ({\r\n    Admin: 'EUPATIADMIN',\r\n    Patient: 'EUPATIPATIENT',\r\n    Member: 'EUPATIMEMBER'\r\n});","export const requiredMessage = ({\r\n    required: \"This field is required\"\r\n});\r\n\r\nexport const selectOptionMessage = ({\r\n    required: \"It is required to select an option\"\r\n});\r\n\r\nexport const notRequired = ({\r\n    required: false\r\n});","//based on Models.Enums.Status\r\nexport const projectStatus = ({\r\n    inProgressStatusID: 1,\r\n    archivedStatusID: 2,\r\n    pendingAcceptanceStatusID: 3,\r\n    declinedStatusID: 4\r\n});\r\n\r\n//based on Models.Enums.StatusType\r\nexport const patientStatus = ({\r\n    matchedStatusID: 1,\r\n    confirmedStatusID: 2,\r\n    notInterestedStatusID: 3\r\n});","export const response = ({\r\n    success: 'Server-side Google reCaptcha validation successfull',\r\n    failure: 'invalid-input-response'\r\n});","export const FAIL_AUTH_MSG = 'We cannot validate, that you are not a robot. Please, refresh the page and try again.';\r\n\r\nexport const ADMIN_ACCESS_DENIED_MSG = 'You are not a patient.';\r\n\r\nexport const SUCC_UPDATED_CATALOGS = 'You have successfully updated the catalogues prices.';\r\n\r\nexport const INVALID_PRICING_DATA = 'You have to select Pricing option, even if a free service applies to you.';\r\n\r\nexport const INVALID_PAYMENT_METHOD = 'You have to select Payment option, even if a free service applies to you.';\r\n\r\nexport const EMAILS_COPIED_MSG = 'Emails were copied to the clipboard.';\r\n\r\nexport const SELECTED_ALL_MSG = 'You have successfully selected all emails.'\r\n\r\nexport const REMOVE_ADMIN_SUCC_MSG = 'You have successfully removed the admin.';\r\n\r\nexport const APPROVE_ADMIN_SUCC_MSG = 'You have successfully approved the admin.'\r\n\r\nexport const REMOVE_PT_SUCC_MSG = 'You have successfully removed the patient.';\r\n\r\nexport const ADD_PT_TO_PROJ_MSG = 'You have successfully assigned patient to project.';\r\n\r\nexport const CONFIRM_PATIENT_MSG = 'You have successfully changed patient status to confirmed.';\r\n\r\nexport const DEL_PT_FROM_PROJ_MSG = 'You have successfully removed patient from project.';\r\n\r\nexport const ARCHIVE_PROJ_SUCC_MSG = 'You have changed the status of the project.';\r\n\r\nexport const SAVED_NEW_PRICES_MSG = 'You have successfully updated the prices.';\r\n\r\nexport const SEND_EMAILS_SUCC_MSG = 'You have successfully sent an email.';\r\n\r\nexport const INVALID_NUMERIC_INPUT = 'Price field expect a numeric value.';\r\n\r\nexport const CANCEL_PRICES_UPDATE = 'You have cancelled the prices update.';\r\n\r\nexport const EMAIL_TEMPLATE_CREATED = 'You have successfully created a new template.';\r\n\r\nexport const EMAIL_TEMPLATE_UPDATED = 'You have successfully updated the template.';\r\n\r\nexport const FILL_ALL_FIELD_ERR_MSG = 'Please fill in all the fields.';\r\n\r\nexport const ANSWER_SUBMIT_SUCC = 'You have successfully submitted your application.';\r\n\r\nexport const SUCC_ASSIGN_ACTIONS_TO_TEMPLATE = 'You have successfully assigned actions to email template.'","// request docs here: https://www.npmjs.com/package/request-promise\r\n//import * as request from \"request-promise-native\";\r\nconst axios = require('axios');\r\n\r\nexport default class HttpRequester {\r\n\turl: string;\r\n\r\n\tconstructor(rootUrl = '/') {\r\n\t\tthis.url = rootUrl;\r\n\t}\r\n\r\n\thandleError(error: any) {\r\n\t\tconsole.error(JSON.stringify(error)); //this does not output the complete error?!?!?\r\n\t\tlet msg = error.message;\t\t\r\n\t\r\n\t\t//see if the back end dev has put in some nice description\r\n\t\tif (typeof (error.response) != 'undefined' && typeof (error.response.data) != 'undefined') {\t\t\t\r\n\t\t\tmsg = error.response.data;\r\n\t\t}\r\n\t\t\r\n\t\tif (error.status === 403 && msg === '') {\r\n\t\t\tmsg = \"You don't have sufficient rights to perform this action. Contact us through the live chat.\";\r\n\t\t}\r\n\r\n\t\treturn msg;\r\n\t}\r\n\r\n\thttpGet(path: string) {\r\n\t\tvar that = this;\r\n\t\tvar promise = new Promise(function(resolve, reject) {\r\n\t\t\tlet fullPath = that.url + path;\r\n\r\n\t\t\taxios.get(fullPath).then(\r\n\t\t\t\tfunction(result: any) {\r\n\t\t\t\t\tresolve(result.data);\r\n\t\t\t\t},\r\n\t\t\t\tfunction(error: any) {\r\n\t\t\t\t\tlet msg = that.handleError(error);\r\n\t\t\t\t\treject(msg);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\treturn promise;\r\n\t}\r\n\r\n\thttpPost(path: string, content: any) {\r\n\t\tvar that = this;\r\n\t\t\r\n\t\tvar promise = new Promise(function (resolve, reject) {\r\n\t\t\tlet fullPath = that.url + path;\r\n\t\t\t\r\n\t\t\taxios.post(fullPath, content, { headers: { 'Content-Type': 'application/json' } }).then(\r\n\t\t\t\tfunction (result: any) {\r\n\t\t\t\t\tresolve(result.data);\r\n\t\t\t\t},\r\n\t\t\t\tfunction (error: any) {\r\n\t\t\t\t\tlet msg = that.handleError(error);\r\n\t\t\t\t\treject(msg);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\treturn promise;\r\n\t}\r\n}\r\n","import { ProjectFeedbackData, ProjectPatientData, ProjectStatusData } from '../models/input-models';\r\nimport { Project } from '../models/main-models';\r\nimport HttpRequester from './http-requester';\r\n\r\n//declare var baseUrl: string;\r\nvar baseUrl = \"/projects\";\r\n\r\nexport default class ProjectsSvc {\r\n\thttpRequester: HttpRequester;\r\n\r\n\tconstructor() {\r\n\t\tthis.httpRequester = new HttpRequester('/api');\r\n\t}\r\n\r\n\tgetAllProjects() {\r\n\t\treturn this.httpRequester.httpGet(\r\n\t\t\t`${baseUrl}/all`\r\n\t\t);\r\n\t}\r\n\r\n\tsaveNewProject(project: Project) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/savenewproject`,\r\n\t\t\tproject\r\n\t\t);\r\n\t}\r\n\r\n\tgetProjectById(id: string) {\r\n\t\treturn this.httpRequester.httpGet(\r\n\t\t\t`${baseUrl}/getproject?id=${id}`\r\n\t\t);\r\n\t}\r\n\r\n\tchangeProjectStatus(inputModel: ProjectStatusData) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/changestatus`,\r\n\t\t\tinputModel\r\n\t\t);\r\n\t}\r\n\r\n\tassignPatientToProject(inputModel: ProjectPatientData) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/assignpatient`,\r\n\t\t\tinputModel\r\n\t\t);\r\n\t}\r\n\r\n\tremovePatientFromProject(inputModel: ProjectPatientData) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/removepatient`,\r\n\t\t\tinputModel\r\n\t\t);\r\n\t}\r\n\r\n\tchangePatientStatusToConfirm(inputModel: ProjectPatientData) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/confirmpatient`,\r\n\t\t\tinputModel\r\n\t\t)\r\n\t}\r\n\r\n\taddFeedback(inputModel: ProjectFeedbackData) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/addfeedback`,\r\n\t\t\tinputModel\r\n\t\t)\r\n\t}\r\n}\r\n","import { ChangePatientStatusData, PatientSearchData, PatientsImportData, SurveyAnswerData } from '../models/input-models';\r\nimport { Patient } from '../models/main-models';\r\nimport HttpRequester from './http-requester';\r\n\r\n//declare var baseUrl: string;\r\nvar baseUrl = '/patients';\r\n\r\nexport default class PatientSvc {\r\n\thttpRequester: HttpRequester;\r\n\r\n\tconstructor() {\r\n\t\tthis.httpRequester = new HttpRequester('/api');\r\n\t}\r\n\r\n\tsavePatient(patient: Patient) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/savepatient`,\r\n\t\t\tpatient\r\n\t\t);\r\n\t}\r\n\r\n\tgetPatientByUserId(id: string) {\r\n\t\treturn this.httpRequester.httpGet(\r\n\t\t\t`${baseUrl}/getpatientbyuserid?userId=${id}`\r\n\t\t);\r\n\t}\r\n\r\n\tgetPatientById(id: string) {\r\n\t\treturn this.httpRequester.httpGet(\r\n\t\t\t`${baseUrl}/getpatientbyid?patientId=${id}`\r\n\t\t)\r\n\t}\r\n\r\n\tsearchPatients(patientData?: PatientSearchData) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/searchpatients`,\r\n\t\t\tpatientData\r\n\t\t);\r\n\t}\r\n\r\n\timportPatients(patientsData: PatientsImportData) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/importpatients`,\r\n\t\t\tpatientsData\r\n\t\t)\r\n\t}\r\n\r\n\tgetAllPatients() {\r\n\t\treturn this.httpRequester.httpGet(\r\n\t\t\t`${baseUrl}/all`\r\n\t\t)\r\n\t}\r\n\r\n\tupdatePatient(patient: Patient) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/updatepatient`,\r\n\t\t\tpatient\r\n\t\t)\r\n\t}\r\n\r\n\tremovePatient(patient: Patient) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/removepatient`,\r\n\t\t\tpatient\r\n\t\t)\r\n\t}\r\n\r\n\tchangePatientStatus(data: ChangePatientStatusData) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/changepatientstatus`,\r\n\t\t\tdata\r\n\t\t)\r\n\t}\r\n\r\n\taddSurveyAnswer(data: SurveyAnswerData) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/addsurveyanswer`,\r\n\t\t\tdata\r\n\t\t)\r\n\t}\r\n}","import { AdminVerifyModel, ActionsTemplateData, CatalogData, ChangePatientStatusData, ContentData, EmailTemplateData, RequestData, SurveyAnswerData } from '../models/input-models';\r\nimport HttpRequester from './http-requester';\r\n\r\n//declare var baseUrl: string;\r\nvar baseUrl = '/utils';\r\n\r\nexport default class UtilsSvc {\r\n\thttpRequester: HttpRequester;\r\n\r\n\tconstructor() {\r\n\t\tthis.httpRequester = new HttpRequester('/api');\r\n\t}\r\n\r\n\tgetLookUpData() {\r\n\t\treturn this.httpRequester.httpGet(\r\n\t\t\t`${baseUrl}/getlookupdata`\r\n\t\t);\r\n\t}\r\n\r\n\tgetMeshRecommendations(condition: string) {\r\n\t\treturn this.httpRequester.httpGet(\r\n\t\t\t`${baseUrl}/getmeshrecommendations?condition=${condition}`\r\n\t\t)\r\n\t}\r\n\r\n\tgetMeshRecordParents(uid: string) {\r\n\t\treturn this.httpRequester.httpGet(\r\n\t\t\t`${baseUrl}/getmeshrecordparents?uid=${uid}`\r\n\t\t)\r\n\t}\r\n\r\n\tverifyUserByRecaptchaToken(tokenObj: any) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/verifyuserbyrecaptchatoken`,\r\n\t\t\ttokenObj\r\n\t\t)\r\n\t}\r\n\r\n\tgetContent(name: string) {\r\n\t\treturn this.httpRequester.httpGet(\r\n\t\t\t`${baseUrl}/getcontent?name=${name}`\r\n\t\t)\r\n\t}\r\n\r\n\tupdateContent(contentData: ContentData) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/updatecontent`,\r\n\t\t\tcontentData\r\n\t\t)\r\n\t}\r\n\r\n\tgetPriceCatalogs() {\r\n\t\treturn this.httpRequester.httpGet(\r\n\t\t\t`${baseUrl}/getpricecatalogs`\r\n\t\t)\r\n\t}\r\n\r\n\tupdatePriceCatalogs(data: CatalogData[]) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/updatepricecatalogs`,\r\n\t\t\tdata\r\n\t\t)\r\n\t}\r\n\r\n\tsendEmail(data: RequestData) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/sendemail`,\r\n\t\t\tdata\r\n\t\t)\r\n\t}\r\n\r\n\tgetAllEmailTemplates() {\r\n\t\treturn this.httpRequester.httpGet(\r\n\t\t\t`${baseUrl}/getallemailtemplates`\r\n\t\t)\r\n\t}\r\n\r\n\tgetEmailTemplateByName(name: string) {\r\n\t\treturn this.httpRequester.httpGet(\r\n\t\t\t`${baseUrl}/getemailtemplatebyname?name=${name}`\r\n\t\t)\r\n\t}\r\n\r\n\tgetEmailTemplate(id: string) {\r\n\t\treturn this.httpRequester.httpGet(\r\n\t\t\t`${baseUrl}/getemailtemplate?id=${id}`\r\n\t\t)\r\n\t}\r\n\r\n\taddEmailTemplate(data: EmailTemplateData) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/addemailtemplate`,\r\n\t\t\tdata\r\n\t\t)\r\n\t}\r\n\r\n\talterEmailTemplateData(data: EmailTemplateData) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/alteremailtemplatedata`,\r\n\t\t\tdata\r\n\t\t)\r\n\t}\r\n\r\n\tremoveEmailTemplate(data: EmailTemplateData) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/removeemailtemplate`,\r\n\t\t\tdata\r\n\t\t)\r\n\t}\r\n\r\n\tgetClassPropertiesNames(id: AdminVerifyModel) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/getclasspropertiesnames`,\r\n\t\t\tid\r\n\t\t)\r\n\t}\r\n\r\n\tgetEmailAutomationTriggers() {\r\n\t\treturn this.httpRequester.httpGet(\r\n\t\t\t`${baseUrl}/getemailautomationtriggers`\r\n\t\t)\r\n\t}\r\n\r\n\tassignActionsToEmailTemplate(data: ActionsTemplateData) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/assignactionstoemailtemplate`,\r\n\t\t\tdata\r\n\t\t)\r\n\t}\r\n\r\n\tmisallocateActionsFromEmailTemplate(data: ActionsTemplateData) {\r\n\t\treturn this.httpRequester.httpPost(\r\n\t\t\t`${baseUrl}/misallocateactionsfromemailtemplate`,\r\n\t\t\tdata\r\n\t\t)\r\n\t}\r\n\r\n\tgetEmailTriggerTemplateBeneficiaries(id: string) {\r\n\t\treturn this.httpRequester.httpGet(\r\n\t\t\t`${baseUrl}/getemailtriggertemplatebeneficiaries?id=${id}`\r\n\t\t)\r\n\t}\r\n\r\n\tgetAllCountries() {\r\n\t\treturn this.httpRequester.httpGet(\r\n\t\t\t`${baseUrl}/getallcountries`\r\n\t\t)\r\n\t}\r\n}\r\n","import { User } from '../models/main-models';\r\nimport HttpRequester from './http-requester';\r\n\r\n//declare var baseUrl: string;\r\nvar baseUrl = '/users';\r\n\r\nexport default class UsersSvc {\r\n  httpRequester: HttpRequester;\r\n\r\n  constructor() {\r\n    this.httpRequester = new HttpRequester('/api');\r\n  }\r\n\r\n  getAllAdmins() {\r\n    return this.httpRequester.httpGet(`${baseUrl}/getalladmins`);\r\n  }\r\n\r\n  removeAdmin(admin: User) {\r\n    return this.httpRequester.httpPost(`${baseUrl}/removeadmin`, admin);\r\n  }\r\n\r\n  approveAdmin(admin: User) {\r\n    return this.httpRequester.httpPost(`${baseUrl}/approveadmin`, admin);\r\n  }\r\n\r\n  getAdminById(id: string) {\r\n    return this.httpRequester.httpGet(`${baseUrl}/getadminbyid/?id=${id}`);\r\n  }\r\n\r\n  getEupatiUserById(id: string) {\r\n    return this.httpRequester.httpGet(`${baseUrl}/geteupatiuserbyid/?id=${id}`);\r\n  }\r\n}\r\n","import { PaymentIntentCreateModel } from \"../models/input-models\";\r\nimport HttpRequester from \"./http-requester\";\r\n\r\n//declare var baseUrl: string;\r\nvar baseUrl = '/payments';\r\n\r\nexport default class PaymentSvc {\r\n    httpRequester: HttpRequester;\r\n\r\n    constructor() {\r\n        this.httpRequester = new HttpRequester('/api');\r\n    }\r\n\r\n    getStripeConfig() {\r\n        return this.httpRequester.httpGet(\r\n            `${baseUrl}/getstripeconfig`\r\n        );\r\n    }\r\n\r\n    createPaymentIntent(data: PaymentIntentCreateModel) {\r\n        return this.httpRequester.httpPost(\r\n            `${baseUrl}/createpaymentintent`,\r\n            data\r\n        );\r\n    }\r\n}","import ProjectsSvc from './projects-svc';\r\nimport PatientSvc from './patients-svc';\r\nimport UtilsSvc from './utils-svc';\r\nimport UsersSvc from './users-svc';\r\nimport PaymentSvc from './payment-svc';\r\n\r\nexport default class DataSvc {\r\n\tpublic static projectsSvc: ProjectsSvc = new ProjectsSvc();\r\n\tpublic static patientSvc: PatientSvc = new PatientSvc();\r\n\tpublic static utilsSvc: UtilsSvc = new UtilsSvc();\r\n\tpublic static usersSvc: UsersSvc = new UsersSvc();\r\n\tpublic static paymentSvc: PaymentSvc = new PaymentSvc();\r\n}","// constants.ts\r\n\r\nexport const NAME = 'newProject';","import { NAME } from \"./constants\";\r\n\r\nexport const SET_PROJECTS_LOADING = `${NAME}/SET_PROJECTS_LOADING`;\r\n\r\nexport const SET_PROJECT = `${NAME}/SET_PROJECT`;\r\n\r\nexport const SET_LOOKUP_DATA = `${NAME}/SET_LOOKUP_DATA`;\r\n\r\nexport const SUBMIT_NEW_PROJECT = `${NAME}/SUBMIT_NEW_PROJECT`;\r\n\r\nexport const SET_IS_USER_REAL = `${NAME}/SET_IS_USER_REAL`;","// matching/actions.js\r\nimport { Res } from '../../common/helpers';\r\nimport { LookUpData } from '../../common/models/input-models';\r\nimport { Project } from '../../common/models/main-models';\r\nimport DataSvc from '../../common/services/data-svc';\r\nimport * as t from './actionTypes';\r\n\r\nexport const setProjectLoading = (isLoading: boolean) => ({\r\n    type: t.SET_PROJECTS_LOADING,\r\n    payload: isLoading,\r\n});\r\n\r\nexport const setProject = (project: Project) => ({\r\n    type: t.SET_PROJECT,\r\n    payload: project\r\n});\r\n\r\nexport const setLookUpData = (data: LookUpData[]) => ({\r\n    type: t.SET_LOOKUP_DATA,\r\n    payload: data\r\n});\r\n\r\nexport const setIsUserReal = (isUserReal: boolean) => ({\r\n    type: t.SET_IS_USER_REAL,\r\n    payload: isUserReal\r\n});\r\n\r\nexport const getLookUpDataAsync = () => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setProjectLoading(true));\r\n        DataSvc.utilsSvc.getLookUpData().then(\r\n            (result: any) => {\r\n                dispatch(setLookUpData(result));\r\n                dispatch(setProjectLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        );\r\n    };\r\n};\r\n\r\nexport const saveNewProjectAsync = (newProject: Project) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setProjectLoading(true));\r\n        DataSvc.projectsSvc.saveNewProject(newProject);\r\n        dispatch(setProjectLoading(false));\r\n    };\r\n};\r\n\r\nexport const verifyUserTokenAsync = (token: string) => {\r\n    return (dispatch: any, getState: any) => {\r\n        DataSvc.utilsSvc.verifyUserByRecaptchaToken({ recaptchaToken: token }).then(\r\n            (result: any) => {\r\n                if (result !== Res.success) {\r\n                    dispatch(setIsUserReal(false));\r\n                }\r\n            },\r\n            (error) => { console.error(error); }\r\n        );\r\n    }\r\n}","// model.js\r\n// This is the model of our module state (e.g. return type of the reducer)\r\n\r\nimport { LookUpData, MeshData } from \"../../common/models/input-models\";\r\nimport { Project } from \"../../common/models/main-models\";\r\n\r\nexport type State = {\r\n    project: Project;\r\n    isLoading: boolean;\r\n    lookUpData: LookUpData[];\r\n    isUserReal: boolean;\r\n};\r\n\r\nexport const emptyProject = {\r\n    id: '',\r\n    name: '',\r\n    overview: '',\r\n    projectTypeId: 0,\r\n    projectActivityId: 0,\r\n    projectNumberOfPatientsNeeded: 0,\r\n    interactionTypeId: 0,\r\n    roleAndExpectations: '',\r\n    startDate: undefined,\r\n    endDate: undefined,\r\n    timeRequired: '',\r\n    isCompensationProvided: null as any,\r\n    compensation: '',\r\n    isThereTravelReimbursement: null as any,\r\n    equipmentRequirements: '',\r\n    responseDeadline: undefined,\r\n    diseases: [],\r\n    noDiseaseExpertiseRequired: false,\r\n    searchDiseaseTherapeuticArea: false,\r\n    price: -1,\r\n    plan: '',\r\n    package: '',\r\n    paymentMethod: '',\r\n    // diseaseNames: [],\r\n    // diseasesTreeIds: [],\r\n    // diseaseMeshId: '',\r\n    // diseaseTANames: '',\r\n    //diseaseTAMeshId: '',\r\n    patientExpertises: [],\r\n    patientExpertisesDescription: '',\r\n    countries: [],\r\n    languages: [],\r\n    otherInformation: '',\r\n    pocFirstName: '',\r\n    projectTypeDescription: '',\r\n    pocLastName: '',\r\n    pocOrganisation: '',\r\n    pocOrganisationTypeId: 0,\r\n    pocOrganisationTypeDescription: '',\r\n    pocJobTitle: '',\r\n    pocCountryId: 0,\r\n    pocPhoneNumber: '',\r\n    pocEmail: '',\r\n    isGDPRConsentGiven: false,\r\n    matchedPatients: [],\r\n    confirmedPatients: []\r\n} as Project;","import * as React from 'react';\r\nimport './loader.scss';\r\n\r\ntype OwnProps = { \r\n    text?: string;\r\n };\r\n\r\ntype OwnState = {};\r\n\r\ntype DispatchProps = {};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nlet defaultLoadingText = 'Loading...';\r\n\r\nclass EupatiLoader extends React.Component<Props, OwnState> {\r\n    render() {\r\n        return (\r\n            <div className='eupati-loader'>\r\n                <div className='eupati-loader-circle'></div>\r\n                <span className='eupati-loader-text'>{this.props.text ? this.props.text : defaultLoadingText}</span>\r\n            </div>\r\n        )\r\n    }\r\n}\r\n\r\nexport default EupatiLoader;","import * as React from 'react';\r\nimport { Form } from 'react-bootstrap';\r\n\r\ntype OwnProps = {\r\n    value: string;\r\n    errorMsg: string;\r\n    fieldType?: string;\r\n    placeholder?: string;\r\n};\r\n\r\nexport type DispatchProps = {\r\n    onChange: (e: any) => void;\r\n};\r\n\r\ntype OwnState = {};\r\n\r\ntype Props = DispatchProps & OwnProps;\r\n\r\nexport default class EupatiTextbox extends React.Component<Props, OwnState> {\r\n\r\n    render() {\r\n        return (\r\n            <>\r\n                <Form.Group>\r\n                    <Form.Control\r\n                        type={typeof this.props.fieldType === 'undefined' ? 'text' : this.props.fieldType}\r\n                        value={this.props.value}\r\n                        className=\"eupati-textbox\"\r\n                        placeholder={this.props.placeholder}\r\n                        onChange={(e) => this.props.onChange(e)}\r\n                    />\r\n                    {!!this.props.errorMsg &&\r\n                        <span className='text-danger'>{this.props.errorMsg}</span>\r\n                    }\r\n                </Form.Group>\r\n            </>\r\n        );\r\n    }\r\n}\r\n","import * as React from 'react';\r\nimport { Form } from 'react-bootstrap';\r\n\r\ntype OwnProps = {\r\n    value: number;\r\n    errorMsg: string;\r\n    fieldType?: string;\r\n    placeholder?: string;\r\n};\r\n\r\nexport type DispatchProps = {\r\n    onChange: (e: any) => void;\r\n};\r\n\r\ntype OwnState = {};\r\n\r\ntype Props = DispatchProps & OwnProps;\r\n\r\nexport default class EupatiNumberbox extends React.Component<Props, OwnState> {\r\n\r\n    render() {\r\n        return (\r\n            <>\r\n                <Form.Group>\r\n                    <Form.Control\r\n                        type={typeof this.props.fieldType === 'undefined' ? 'number' : this.props.fieldType}\r\n                        value={this.props.value}\r\n                        className=\"eupati-numberbox\"\r\n                        placeholder={this.props.placeholder}\r\n                        onChange={(e) => this.props.onChange(e)}\r\n                    />\r\n                    {!!this.props.errorMsg &&\r\n                        <span className='text-danger'>{this.props.errorMsg}</span>\r\n                    }\r\n                </Form.Group>\r\n            </>\r\n        );\r\n    }\r\n}\r\n","import * as React from 'react';\r\nimport { Form } from 'react-bootstrap';\r\nimport { LookUpOptions } from '../models/input-models';\r\n\r\ntype OwnProps = {\r\n    fieldName: string;\r\n    values: LookUpOptions[] | null;\r\n    errorMsg: string;\r\n    value?: number;\r\n    defaultOptionText?: string;\r\n    width?: string;\r\n};\r\n\r\nexport type DispatchProps = {\r\n    onChange: (e: any) => void;\r\n};\r\n\r\ntype OwnState = {\r\n    vals: LookUpOptions[] | null;\r\n}\r\n\r\ntype Props = DispatchProps & OwnProps;\r\n\r\nclass EupatiDropdown extends React.Component<Props, OwnState> {\r\n\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            vals: [],\r\n        };\r\n\r\n        this.compare = this.compare.bind(this);\r\n    }\r\n\r\n    componentDidMount() {\r\n        if (this.props.values !== null) {\r\n            if (this.props.fieldName.toLowerCase().includes('country')) {\r\n                this.setState({ vals: [...this.props.values].sort(this.compare) });\r\n            }\r\n            else {\r\n                this.setState({ vals: [...this.props.values] });\r\n            }\r\n        }\r\n    }\r\n\r\n    compare(a: any, b: any) {\r\n        if (a.name < b.name) {\r\n            return -1;\r\n        }\r\n        if (a.name > b.name) {\r\n            return 1;\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    render() {\r\n\r\n        let optionsComponent: any;\r\n\r\n        let dropdownComponent: any;\r\n\r\n        if (this.props.values &&\r\n            this.props.values.length > 0) {\r\n\r\n            optionsComponent = this.state.vals?.map((x, i) => {\r\n                if (i === 0) {\r\n                    return (\r\n                        <React.Fragment key={i + 'a'} >\r\n                            {typeof this.props.defaultOptionText !== 'undefined' &&\r\n                                <option\r\n                                    key={'default-option'}\r\n                                    className='option-item'\r\n                                    value=''\r\n                                >\r\n                                    {this.props.defaultOptionText ? this.props.defaultOptionText : \"Please select...\"}\r\n                                </option>\r\n                            }\r\n\r\n                            <option\r\n                                key={i}\r\n                                className='option-item'\r\n                                value={x.id}\r\n                            >\r\n                                {x.name}\r\n                            </option>\r\n                        </React.Fragment>\r\n                    );\r\n                } else {\r\n                    return (\r\n                        <option\r\n                            key={i}\r\n                            className='option-item'\r\n                            value={x.id}\r\n                        >\r\n                            {x.name}\r\n                        </option>\r\n                    );\r\n                }\r\n            });\r\n        }\r\n        else {\r\n            optionsComponent = (\r\n                <option\r\n                    key='option-disabled'\r\n                    className='option-item'\r\n                    disabled={true}\r\n                >\r\n                    No options available...\r\n                </option>\r\n            );\r\n        }\r\n\r\n        dropdownComponent = (\r\n            <Form.Control\r\n                as='select'\r\n                className=\"eupati-dropdown\"\r\n                value={this.props.value}\r\n                onChange={(e) => this.props.onChange(e)}\r\n                style={{ width: this.props.width ? this.props.width : '100%' }}\r\n            >\r\n                {optionsComponent}\r\n            </Form.Control>\r\n        );\r\n\r\n        return (\r\n            <>\r\n                {dropdownComponent}\r\n                {!!this.props.errorMsg &&\r\n                    <span className='text-danger'>{this.props.errorMsg}</span>\r\n                }\r\n            </>\r\n        );\r\n    }\r\n}\r\n\r\nexport default EupatiDropdown;\r\n","import * as React from 'react';\r\nimport { Form } from 'react-bootstrap';\r\n\r\ntype OwnProps = {\r\n    value: string;\r\n    errorMsg: string;\r\n    rowsCount?: number;\r\n    placeholderMsg?: string;\r\n    isDisabled?: boolean;\r\n};\r\n\r\nexport type DispatchProps = {\r\n    onChange: (e: any) => void;\r\n};\r\n\r\ntype OwnState = {};\r\n\r\ntype Props = DispatchProps & OwnProps;\r\n\r\n//const DEFAULT_ELEMENT_HEIGHT = 41;  // rowsCount: 1\r\nexport default class EupatiTextarea extends React.Component<Props, OwnState> {\r\n    element: any;\r\n\r\n    constructor(props: any) {\r\n        super(props);\r\n        this.element = React.createRef();\r\n    }\r\n\r\n    componentDidMount() {\r\n        const height = this.element.current.scrollHeight;\r\n        this.element.current.style.height = `${height}px`;\r\n    }\r\n\r\n    // handleKeyDown(e: any) {\r\n    //     e.target.style.height = 'inherit';\r\n    //     e.target.style.height = `${e.target.scrollHeight}px`;\r\n    //     if (e.target.scrollHeight === DEFAULT_ELEMENT_HEIGHT) {\r\n    //         e.target.style.height = 'inherit';\r\n    //     }\r\n    // }\r\n\r\n    render() {\r\n        return (\r\n            <>\r\n                <Form.Group>\r\n                    <Form.Control\r\n                        as='textarea'\r\n                        value={this.props.value}\r\n                        className=\"eupati-textbox\"\r\n                        rows={this.props.rowsCount ? this.props.rowsCount : 3}\r\n                        placeholder={this.props.placeholderMsg ? this.props.placeholderMsg : 'Please type in your information...'}\r\n                        disabled={this.props.isDisabled === undefined ? false : this.props.isDisabled}\r\n                        onChange={(e) => this.props.onChange(e)}\r\n                        //onKeyDown={this.handleKeyDown.bind(this)}\r\n                        ref={this.element}\r\n                    />\r\n                    {!!this.props.errorMsg &&\r\n                        <span className='text-danger'>{this.props.errorMsg}</span>\r\n                    }\r\n                </Form.Group>\r\n            </>\r\n        );\r\n    }\r\n}\r\n","import * as React from 'react';\r\nimport { ToggleButton, ToggleButtonGroup, ToggleButtonProps } from 'react-bootstrap';\r\nimport { LookUpOptions } from '../models/input-models';\r\n\r\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faDotCircle } from '@fortawesome/fontawesome-free-regular';\r\n\r\ntype OwnProps = {\r\n    fieldName: string;\r\n    values: LookUpOptions[] | null;\r\n    value: number;\r\n    errorMsg: string;\r\n};\r\n\r\ntype OwnState = {};\r\n\r\ntype DispatchProps = {\r\n    onChange: (e: any) => void;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nclass EupatiToggleBtn extends React.Component<Props, OwnState> {\r\n\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.returnProperIconType = this.returnProperIconType.bind(this);\r\n    }\r\n\r\n    returnProperIconType(icon: any) {\r\n        return icon as IconProp;\r\n    }\r\n\r\n    render() {\r\n\r\n        let valuesComponent: any;\r\n\r\n        let btnComponent: any;\r\n\r\n        valuesComponent = this.props.values?.map((x, i) => {\r\n            return (\r\n                <ToggleButton\r\n                    key={i}\r\n                    type='radio'\r\n                    value={x.id}\r\n                    name={this.props.fieldName}\r\n                >\r\n                    <div className='toggle-btn'>\r\n                        <FontAwesomeIcon                             \r\n                            icon={this.returnProperIconType(faDotCircle)}\r\n                            className='toggle-btn-circle'\r\n                        />\r\n                    </div>\r\n                    <div className='check-btn-text'><span style={{ clear: 'both', display: 'inline-block', overflow: 'hidden', whiteSpace: 'nowrap' }}>{x.name.trim()}</span></div>\r\n                </ToggleButton>\r\n            )\r\n        });\r\n\r\n        btnComponent = (\r\n            <ToggleButtonGroup\r\n                id={this.props.fieldName}\r\n                className={this.props.fieldName}\r\n                value={this.props.value}\r\n                name={this.props.fieldName}\r\n                onChange={(e: any) => this.props.onChange(e)}\r\n            >\r\n                {valuesComponent}\r\n            </ToggleButtonGroup>\r\n        );\r\n\r\n        return (\r\n            <>\r\n                {btnComponent}\r\n                {!!this.props.errorMsg &&\r\n                    <span className='text-danger'>{this.props.errorMsg}</span>\r\n                }\r\n            </>\r\n        );\r\n    }\r\n}\r\n\r\nexport default EupatiToggleBtn;","import * as React from 'react';\r\nimport { Form } from 'react-bootstrap';\r\n\r\ntype OwnProps = {\r\n    value: Date;\r\n    errorMsg: string;\r\n};\r\n\r\nexport type DispatchProps = {\r\n    onChange: (e: any) => void;\r\n};\r\n\r\ntype Props = DispatchProps & OwnProps;\r\n\r\nexport default class EupatiDateMenu extends React.Component<Props> {\r\n\r\n    render() {\r\n        return (\r\n            <>\r\n                <Form.Group>\r\n                    <Form.Control\r\n                        type='date'\r\n                        className=\"eupati-datemenu\"\r\n                        value={this.props.value.toString()}\r\n                        onChange={(e) => this.props.onChange(e)}\r\n                    />\r\n                    {!!this.props.errorMsg &&\r\n                        <span className='text-danger'>{this.props.errorMsg}</span>\r\n                    }\r\n                </Form.Group>\r\n            </>\r\n        );\r\n    }\r\n}\r\n","import React from \"react\";\r\nimport { Button, Form } from \"react-bootstrap\";\r\nimport { useForm, Controller } from \"react-hook-form\";\r\nimport EupatiTextbox from \"../../../../common/static/textbox\";\r\nimport EupatiNumberbox from \"../../../../common/static/numberbox\";\r\nimport EupatiDropdown from \"../../../../common/static/dropdown\";\r\nimport EupatiTextarea from \"../../../../common/static/textarea\";\r\nimport { Rules } from \"../../../../common/helpers\";\r\nimport { Messages } from \"../../../../common/helpers\";\r\nimport { useHistory } from \"react-router\";\r\nimport EupatiToggleBtn from \"../../../../common/static/toggle-btn\";\r\nimport EupatiDateMenu from \"../../../../common/static/date-menu\";\r\nimport { Project } from \"../../../../common/models/main-models\";\r\nimport { LookUpData, LookUpOptions } from \"../../../../common/models/input-models\";\r\nimport { toast } from 'react-toastify';\r\n\r\ntype OwnProps = {\r\n    project: Project,\r\n    isUserReal: boolean\r\n};\r\n\r\ntype DispatchProps = {\r\n    prevPage: () => void;\r\n    setProject: (project: Project) => void;\r\n    showPatientsInfoSection: () => void;\r\n    returnProperDefaultValue: (val: any) => any;\r\n    returnProperLookUpData: (dataType: any) => LookUpOptions[] | null;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\ntype FieldProps = {\r\n    name: string,\r\n    projectTypeId: number,\r\n    projectTypeDescription: string,\r\n    roleAndExpectations: string,\r\n    projectActivityId: number,\r\n    projectNumberOfPatientsNeeded: number,\r\n    interactionTypeId: number,\r\n    startDate?: Date,\r\n    endDate?: Date,\r\n    responseDeadline?: Date\r\n};\r\n\r\nexport default function ProjectGeneralInfo(props: Props) {\r\n\r\n    const history = useHistory();\r\n\r\n    const { handleSubmit, control, watch, reset, formState: { errors } } = useForm();\r\n\r\n    const fieldsData = {\r\n        name: watch(\"name\") as string,\r\n        projectTypeId: watch(\"projectTypeId\") as number,\r\n        projectTypeDescription: watch(\"projectTypeDescription\") as string,\r\n        roleAndExpectations: watch(\"roleAndExpectations\") as string,\r\n        projectActivityId: watch(\"projectActivityId\") as number,\r\n        projectNumberOfPatientsNeeded: watch(\"projectActivityId\") as number,\r\n        interactionTypeId: watch(\"interactionTypeId\") as number,\r\n        startDate: watch(\"startDate\") as Date | undefined,\r\n        endDate: watch(\"endDate\") as Date | undefined,\r\n        responseDeadline: watch(\"responseDeadline\") as Date | undefined\r\n    } as FieldProps;\r\n\r\n    const onSubmit = (data: any) => {\r\n        if (!props.isUserReal) {\r\n            toast.error(Messages.FAIL_AUTH_MSG);\r\n            return history.push('/');\r\n        }\r\n\r\n        const updatedProject = Object.assign(props.project, data);\r\n        props.setProject(updatedProject);\r\n        props.showPatientsInfoSection();\r\n    }\r\n\r\n    const onBackHandler = () => {\r\n        if (!props.isUserReal) {\r\n            toast.error(Messages.FAIL_AUTH_MSG);\r\n            return history.push('/');\r\n        }\r\n\r\n        if (adjustFieldsValues() === 0) {\r\n            const updatedProject = Object.assign(props.project, fieldsData);\r\n            props.setProject(updatedProject);\r\n        }\r\n        props.prevPage();\r\n    }\r\n\r\n    const toggleField = () => {\r\n        let projectId = 0;\r\n        if (fieldsData.projectTypeId !== undefined && fieldsData.projectTypeId !== null) {\r\n            projectId = fieldsData.projectTypeId;\r\n        }\r\n        else if (props.project.projectTypeId !== undefined && props.project.projectTypeId !== null) {\r\n            projectId = props.project.projectTypeId;\r\n        }\r\n\r\n        const projectTypes = props.returnProperLookUpData('projectType');\r\n        return projectTypes?.find(x => x.id.toString() === projectId.toString())?.name.toLowerCase().includes('other');\r\n    }\r\n\r\n    const adjustFieldsValues = () => {\r\n        if (fieldsData.name === undefined &&\r\n            fieldsData.projectTypeId === undefined &&\r\n            fieldsData.projectTypeDescription === undefined &&\r\n            fieldsData.roleAndExpectations === undefined &&\r\n            fieldsData.projectActivityId === undefined &&\r\n            fieldsData.interactionTypeId === undefined &&\r\n            fieldsData.startDate === undefined &&\r\n            fieldsData.endDate === undefined &&\r\n            fieldsData.responseDeadline === undefined) {\r\n            return 1;\r\n        }\r\n\r\n        if (fieldsData.name === undefined &&\r\n            props.project.name !== undefined) {\r\n            fieldsData.name = props.project.name;\r\n        }\r\n\r\n        if (fieldsData.projectTypeId === undefined &&\r\n            props.project.projectTypeId !== undefined) {\r\n            fieldsData.projectTypeId = props.project.projectTypeId;\r\n        }\r\n\r\n        if (fieldsData.projectTypeDescription === undefined &&\r\n            props.project.projectTypeDescription !== undefined) {\r\n            fieldsData.projectTypeDescription = props.project.projectTypeDescription;\r\n        }\r\n\r\n        if (fieldsData.roleAndExpectations === undefined &&\r\n            props.project.roleAndExpectations !== undefined) {\r\n            fieldsData.roleAndExpectations = props.project.roleAndExpectations;\r\n        }\r\n\r\n        if (fieldsData.projectActivityId === undefined &&\r\n            props.project.projectActivityId !== undefined) {\r\n            fieldsData.projectActivityId = props.project.projectActivityId;\r\n        }\r\n\r\n        if (fieldsData.projectNumberOfPatientsNeeded === undefined &&\r\n            props.project.projectNumberOfPatientsNeeded !== undefined) {\r\n            fieldsData.projectNumberOfPatientsNeeded = props.project.projectNumberOfPatientsNeeded;\r\n        }\r\n\r\n        if (fieldsData.interactionTypeId === undefined &&\r\n            props.project.interactionTypeId !== undefined) {\r\n            fieldsData.interactionTypeId = props.project.interactionTypeId;\r\n        }\r\n\r\n        if (fieldsData.startDate === undefined &&\r\n            props.project.startDate !== undefined) {\r\n            fieldsData.startDate = props.project.startDate;\r\n        }\r\n\r\n        if (fieldsData.endDate === undefined &&\r\n            props.project.endDate !== undefined) {\r\n            fieldsData.endDate = props.project.endDate;\r\n        }\r\n\r\n        if (fieldsData.responseDeadline === undefined &&\r\n            props.project.responseDeadline !== undefined) {\r\n            fieldsData.responseDeadline = props.project.responseDeadline;\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    return (\r\n        <Form className='project' onSubmit={handleSubmit(onSubmit)}>\r\n            <Form.Group className='project-info'>\r\n                <Form.Group className='lcolumn'>\r\n\r\n                    <Form.Group id='p-name' className='project-info-field mb-3'>\r\n                        <Form.Label>Project name</Form.Label>\r\n                        <Controller\r\n                            name='name'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.name)}\r\n                            rules={Rules.requiredMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiTextbox\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.name?.message,\r\n                                        placeholder: 'Please type project name'\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='p-projTp' className='project-info-field mb-3'>\r\n                        <Form.Label>Project type</Form.Label>\r\n                        <Controller\r\n                            name='projectTypeId'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.projectTypeId)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiDropdown\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.projectTypeId?.message,\r\n                                        fieldName: 'projectTypeId',\r\n                                        values: props.returnProperLookUpData('projectType'),\r\n                                        defaultOptionText: ''\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    {toggleField() &&\r\n                        <Form.Group id='p-projTpDescr' className='project-info-field mb-3'>\r\n                            <Form.Label>Other project type description</Form.Label>\r\n                            <Controller\r\n                                name='projectTypeDescription'\r\n                                control={control}\r\n                                defaultValue={props.returnProperDefaultValue(props.project.projectTypeDescription)}\r\n                                rules={Rules.notRequired}\r\n                                render={({ field }) =>\r\n                                    <EupatiTextbox\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.projectTypeDescription?.message,\r\n                                            placeholder: 'Please type project type'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n                    }\r\n\r\n                    <Form.Group id='p-roleAndExpctons' className='project-info-field mb-3'>\r\n                        <Form.Label>Patients role and expectations</Form.Label>\r\n                        <Controller\r\n                            name='roleAndExpectations'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.roleAndExpectations)}\r\n                            rules={Rules.requiredMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiTextarea\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.roleAndExpectations?.message\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='p-projAct' className='project-info-field mb-4'>\r\n                        <Form.Label>Activity</Form.Label>\r\n                        <Controller\r\n                            name='projectActivityId'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.projectActivityId)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiToggleBtn\r\n                                    {...{\r\n                                        ...field,\r\n                                        fieldName: 'projectActivityId',\r\n                                        values: props.returnProperLookUpData('activityType'),\r\n                                        errorMsg: errors?.projectActivityId?.message\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='p-intractnTp' className='project-info-field mb-4'>\r\n                        <Form.Label>Interaction type</Form.Label>\r\n                        <Controller\r\n                            name='interactionTypeId'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.interactionTypeId)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiToggleBtn\r\n                                    {...{\r\n                                        ...field,\r\n                                        fieldName: 'interactionTypeId',\r\n                                        values: props.returnProperLookUpData('interactionType'),\r\n                                        errorMsg: errors?.interactionTypeId?.message\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='p-projHowManyPatients' className='project-info-field mb-12'>\r\n                        <Form.Label>How many patients are you looking for?</Form.Label>\r\n                        <Controller\r\n                            name='projectNumberOfPatientsNeeded'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.projectNumberOfPatientsNeeded)}\r\n                            rules={Rules.notRequired}\r\n                            render={({ field }) =>\r\n                                <EupatiNumberbox\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.projectTypeDescription?.message,\r\n                                        placeholder: 'Please enter how many patients you are looking for'\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='p-startDate' className='project-info-field mb-3'>\r\n                        <Form.Label>Start date</Form.Label>\r\n                        <Controller\r\n                            name='startDate'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.startDate)}\r\n                            rules={Rules.requiredMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiDateMenu\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.startDate?.message\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='p-endDate' className='project-info-field mb-3'>\r\n                        <Form.Label>End date</Form.Label>\r\n                        <Controller\r\n                            name='endDate'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.endDate)}\r\n                            rules={Rules.requiredMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiDateMenu\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.endDate?.message\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='p-resDedln' className='project-info-field mb-3'>\r\n                        <Form.Label>Response deadline</Form.Label>\r\n                        <Controller\r\n                            name='responseDeadline'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.responseDeadline)}\r\n                            rules={Rules.requiredMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiDateMenu\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.responseDeadline?.message\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='p-btns' className='project-info-field'>\r\n                        <Button className='bck' variant='secondary' onClick={onBackHandler}>Back</Button>\r\n                        <Button className='nxt' variant='primary' type='submit'>Next</Button>\r\n                    </Form.Group>\r\n                </Form.Group>\r\n            </Form.Group>\r\n        </Form>\r\n    )\r\n}","import * as React from 'react';\r\nimport { ToggleButton, ToggleButtonGroup, ToggleButtonProps } from 'react-bootstrap';\r\n\r\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faDotCircle } from '@fortawesome/fontawesome-free-regular';\r\n\r\ntype OwnProps = {\r\n    fieldName: string;\r\n    value: number;\r\n    errorMsg: string;\r\n    isMoreThanTwoOptions: boolean;\r\n};\r\n\r\ntype OwnState = {};\r\n\r\ntype DispatchProps = {\r\n    onChange: (e: any) => void;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nclass EupatiNonCMSToggleBtn extends React.Component<Props, OwnState> {\r\n\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.returnProperIconType = this.returnProperIconType.bind(this);\r\n    }\r\n\r\n    returnProperIconType(icon: any) {\r\n        return icon as IconProp;\r\n    }\r\n\r\n    render() {\r\n\r\n        let values = [\r\n            {\r\n                id: true,\r\n                name: 'Yes'\r\n            },\r\n            {\r\n                id: false,\r\n                name: 'No'\r\n            },\r\n            {\r\n                id: null,\r\n                name: 'Maybe'\r\n            }\r\n        ];\r\n\r\n        let valuesComponent: any;\r\n\r\n        let btnComponent: any;\r\n\r\n        if (!this.props.isMoreThanTwoOptions) {\r\n            if (values.length > 2) {\r\n                values.pop();\r\n            }\r\n        }\r\n\r\n        valuesComponent = values?.map((x, i) => {\r\n            return (\r\n                <ToggleButton\r\n                    key={i}\r\n                    name={this.props.fieldName}\r\n                    className='radio-item'\r\n                    value={`${x.id}`}\r\n                    type='radio'\r\n                >\r\n                    <div className='toggle-btn'>\r\n                        <FontAwesomeIcon\r\n                            icon={this.returnProperIconType(faDotCircle)}\r\n                            className='toggle-btn-circle'\r\n                        />\r\n                    </div>\r\n                    <div className='check-btn-text'>{x.name}</div>\r\n                </ToggleButton>\r\n            )\r\n        });\r\n\r\n        btnComponent = (\r\n            <React.Fragment key={'abcde'}>\r\n                <ToggleButtonGroup\r\n                    id={this.props.fieldName}\r\n                    className='radio-items'\r\n                    onChange={(e: any) => this.props.onChange(e)}\r\n                    value={`${this.props.value}`}\r\n                    name={this.props.fieldName}\r\n                    type='radio'\r\n                >\r\n                    {valuesComponent}\r\n                </ToggleButtonGroup>\r\n                {!!this.props.errorMsg &&\r\n                    <span className='text-danger'>{this.props.errorMsg}</span>\r\n                }\r\n            </React.Fragment>\r\n        );\r\n\r\n        return (\r\n            <>\r\n                {btnComponent}\r\n            </>\r\n        );\r\n    }\r\n}\r\n\r\nexport default EupatiNonCMSToggleBtn;","import React from \"react\";\r\nimport { Form, Button } from \"react-bootstrap\";\r\nimport { Controller, useForm } from 'react-hook-form';\r\nimport EupatiNonCMSToggleBtn from \"../../../../common/static/toggle-btn-nonCMS\";\r\nimport EupatiTextbox from \"../../../../common/static/textbox\";\r\nimport { Rules, Messages } from \"../../../../common/helpers\";\r\nimport { useHistory } from \"react-router\";\r\nimport EupatiTextarea from \"../../../../common/static/textarea\";\r\nimport { Project } from \"../../../../common/models/main-models\";\r\nimport { LookUpOptions } from \"../../../../common/models/input-models\";\r\nimport { toast } from 'react-toastify';\r\n\r\ntype OwnProps = {\r\n    project: Project,\r\n    isUserReal: boolean\r\n}\r\n\r\ntype DispatchProps = {\r\n    setProject: (project: Project) => void;\r\n    returnProperDefaultValue: (val: any) => any;\r\n    returnProperLookUpData: (dataType: any) => LookUpOptions[] | null;\r\n    hidePatientsInfoSection: () => void;\r\n    nextPage: () => void;\r\n}\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\ntype FieldProps = {\r\n    equipmentRequirements: string,\r\n    timeRequired: string,\r\n    overview: string,\r\n    isThereTravelReimbursement?: number,\r\n    isCompensationProvided?: number,\r\n    compensation: string;\r\n};\r\n\r\nexport default function ProjectPatientsInfo(props: Props) {\r\n\r\n    const history = useHistory();\r\n\r\n    const { handleSubmit, control, watch, formState: { errors } } = useForm();\r\n\r\n    const fieldsData = {\r\n        equipmentRequirements: watch(\"equipmentRequirements\") as string,\r\n        timeRequired: watch(\"timeRequired\") as string,\r\n        overview: watch(\"overview\") as string,\r\n        isThereTravelReimbursement: watch(\"isThereTravelReimbursement\") as number | undefined,\r\n        isCompensationProvided: watch(\"isCompensationProvided\") as number | undefined,\r\n        compensation: watch(\"compensation\") as string\r\n    } as FieldProps;\r\n\r\n    const onSubmit = (data: any) => {\r\n        if (!props.isUserReal) {\r\n            toast.error(Messages.FAIL_AUTH_MSG);\r\n            return history.push('/');\r\n        }\r\n\r\n        const updatedProject = Object.assign(props.project, data);\r\n        props.setProject(updatedProject);\r\n        props.nextPage();\r\n    }\r\n\r\n    const onBackHandler = () => {\r\n        if (!props.isUserReal) {\r\n            toast.error(Messages.FAIL_AUTH_MSG);\r\n            return history.push('/');\r\n        }\r\n\r\n        if (adjustFieldsValues() === 0) {\r\n            const updatedProject = Object.assign(props.project, fieldsData);\r\n            props.setProject(updatedProject);\r\n        }\r\n        props.hidePatientsInfoSection();\r\n    }\r\n\r\n    const fieldToggle = () => {\r\n        let val = '';\r\n        if (fieldsData.isCompensationProvided !== undefined && fieldsData.isCompensationProvided !== null) {\r\n            val = fieldsData.isCompensationProvided.toString();\r\n        }\r\n        else if (props.project.isCompensationProvided !== undefined && props.project.isCompensationProvided !== null) {\r\n            val = props.project.isCompensationProvided.toString();\r\n        }\r\n\r\n        return val === 'true' ? true : false;\r\n    }\r\n\r\n    const adjustFieldsValues = () => {\r\n        if (fieldsData.equipmentRequirements === undefined &&\r\n            fieldsData.timeRequired === undefined &&\r\n            fieldsData.overview === undefined &&\r\n            fieldsData.isThereTravelReimbursement === undefined &&\r\n            fieldsData.isCompensationProvided === undefined &&\r\n            fieldsData.compensation === undefined) {\r\n            return 1;\r\n        }\r\n\r\n        if (fieldsData.equipmentRequirements === undefined &&\r\n            props.project.equipmentRequirements !== undefined) {\r\n            fieldsData.equipmentRequirements = props.project.equipmentRequirements;\r\n        }\r\n\r\n        if (fieldsData.timeRequired === undefined &&\r\n            props.project.timeRequired !== undefined) {\r\n            fieldsData.timeRequired = props.project.timeRequired;\r\n        }\r\n\r\n        if (fieldsData.overview === undefined &&\r\n            props.project.overview !== undefined) {\r\n            fieldsData.overview = props.project.overview;\r\n        }\r\n\r\n        if (fieldsData.isThereTravelReimbursement === undefined &&\r\n            props.project.isThereTravelReimbursement !== undefined) {\r\n            fieldsData.isThereTravelReimbursement = props.project.isThereTravelReimbursement;\r\n        }\r\n\r\n        if (fieldsData.isCompensationProvided === undefined &&\r\n            props.project.isCompensationProvided !== undefined) {\r\n            fieldsData.isCompensationProvided = props.project.isCompensationProvided;\r\n        }\r\n\r\n        if (fieldsData.compensation === undefined &&\r\n            props.project.compensation !== undefined) {\r\n            fieldsData.compensation = props.project.compensation;\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    return (\r\n        <Form className='project' onSubmit={handleSubmit(onSubmit)}>\r\n            <Form.Group className='project-info'>\r\n                <Form.Group className='rcolumn'>\r\n\r\n                    <Form.Group id='p-equptReq' className='project-info-field mb-3'>\r\n                        <Form.Label>Equipment requirements</Form.Label>\r\n                        <Controller\r\n                            name='equipmentRequirements'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.equipmentRequirements)}\r\n                            rules={Rules.requiredMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiTextarea\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.equipmentRequirements?.message\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='p-timeReq' className='project-info-field mb-3'>\r\n                        <Form.Label>Time required</Form.Label>\r\n                        <Controller\r\n                            name='timeRequired'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.timeRequired)}\r\n                            rules={Rules.requiredMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiTextarea\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.timeRequired?.message\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='p-overview' className='project-info-field mb-3'>\r\n                        <Form.Label>Project overview</Form.Label>\r\n                        <Controller\r\n                            name='overview'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.overview)}\r\n                            rules={Rules.requiredMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiTextarea\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.overview?.message,\r\n                                        rowsCount: 8\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='p-trvlReimb' className='project-info-field mb-5'>\r\n                        <Form.Label>Travel reimbursement</Form.Label>\r\n                        <Controller\r\n                            name='isThereTravelReimbursement'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.isThereTravelReimbursement)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiNonCMSToggleBtn\r\n                                    {...{\r\n                                        ...field,\r\n                                        fieldName: 'isThereTravelReimbursement',\r\n                                        errorMsg: errors?.isThereTravelReimbursement?.message,\r\n                                        isMoreThanTwoOptions: false\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='p-compProv' className='project-info-field mb-5'>\r\n                        <Form.Label>Compensation provided</Form.Label>\r\n                        <Controller\r\n                            name='isCompensationProvided'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.isCompensationProvided)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiNonCMSToggleBtn\r\n                                    {...{\r\n                                        ...field,\r\n                                        fieldName: 'isCompensationProvided',\r\n                                        errorMsg: errors?.isCompensationProvided?.message,\r\n                                        isMoreThanTwoOptions: false\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    {fieldToggle() &&\r\n                        <Form.Group id='p-comp' className='project-info-field mb-5'>\r\n                            <Form.Label>Amount</Form.Label>\r\n                            <Controller\r\n                                name='compensation'\r\n                                control={control}\r\n                                defaultValue={props.returnProperDefaultValue(props.project.compensation)}\r\n                                rules={Rules.requiredMessage}\r\n                                render={({ field }) =>\r\n                                    <EupatiTextbox\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.compensation?.message,\r\n                                            placeholder: 'Please type compensation amount'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n                    }\r\n\r\n                    <Form.Group id='p-btns' className='project-info-field'>\r\n                        <Button className='bck' variant='secondary' onClick={onBackHandler}>Back</Button>\r\n                        <Button className='nxt' variant='primary' type='submit'>Next</Button>\r\n                    </Form.Group>\r\n                </Form.Group>\r\n            </Form.Group>\r\n        </Form>\r\n    )\r\n}","import React, { useState } from 'react';\r\nimport { LookUpOptions } from '../../../../common/models/input-models';\r\nimport { Project } from '../../../../common/models/main-models';\r\nimport ProjectGeneralInfo from './general';\r\nimport ProjectPatientsInfo from './patients';\r\n\r\ntype OwnProps = {\r\n    project: Project,\r\n    isUserReal: boolean,\r\n    showSecondSubComponent: boolean\r\n};\r\n\r\ntype DispatchProps = {\r\n    setProject: (project: Project) => void;\r\n    nextPage: () => void;\r\n    prevPage: () => void;\r\n    returnProperDefaultValue: (val: any) => any;\r\n    setIsUserReal: (token: string) => void;\r\n    returnProperLookUpData: (dataType: any) => LookUpOptions[] | null;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nexport default function ProjectInfo(props: Props) {\r\n    const [nextBtnClicked, setNextBtnClicked] = useState<boolean>(props.showSecondSubComponent);\r\n\r\n    const toggleSectionVisibility = () => {\r\n        setNextBtnClicked(!nextBtnClicked);\r\n        //window.scrollTo(0, 0);\r\n    }\r\n\r\n    return (\r\n        <div style={{ margin: '0 0 7.5rem 0' }}>\r\n\r\n            {nextBtnClicked &&\r\n                <ProjectGeneralInfo\r\n                    {...{\r\n                        project: props.project,\r\n                        setProject: props.setProject,\r\n                        returnProperDefaultValue: props.returnProperDefaultValue,\r\n                        returnProperLookUpData: props.returnProperLookUpData,\r\n                        showPatientsInfoSection: toggleSectionVisibility,\r\n                        isUserReal: props.isUserReal,\r\n                        prevPage: props.prevPage\r\n                    }}\r\n                />\r\n            }\r\n\r\n            {!nextBtnClicked &&\r\n                <ProjectPatientsInfo\r\n                    {...{\r\n                        project: props.project,\r\n                        setProject: props.setProject,\r\n                        returnProperDefaultValue: props.returnProperDefaultValue,\r\n                        returnProperLookUpData: props.returnProperLookUpData,\r\n                        hidePatientsInfoSection: toggleSectionVisibility,\r\n                        isUserReal: props.isUserReal,\r\n                        nextPage: props.nextPage\r\n                    }}\r\n                />\r\n            }\r\n\r\n        </div>\r\n    )\r\n}","import * as React from 'react';\r\nimport { Form } from 'react-bootstrap';\r\n\r\ntype OwnProps = {\r\n    value: string;\r\n    errorMsg: string;\r\n};\r\n\r\nexport type DispatchProps = {\r\n    onChange: (e: any) => void;\r\n};\r\n\r\ntype OwnState = {};\r\n\r\ntype Props = DispatchProps & OwnProps;\r\n\r\nexport default class EupatiEmailbox extends React.Component<Props, OwnState> {\r\n\r\n    render() {\r\n        return (\r\n            <>\r\n                <Form.Group>\r\n                    <Form.Control\r\n                        type='email'\r\n                        value={this.props.value}\r\n                        className=\"eupati-textbox\"\r\n                        placeholder=\"Please type email\"\r\n                        onChange={(e) => this.props.onChange(e)}\r\n                    />\r\n                    {!!this.props.errorMsg &&\r\n                        <span className='text-danger'>{this.props.errorMsg}</span>\r\n                    }\r\n                </Form.Group>\r\n            </>\r\n        );\r\n    }\r\n}\r\n","import React from \"react\";\r\nimport { Button, Form } from \"react-bootstrap\";\r\nimport { useForm, Controller } from \"react-hook-form\";\r\nimport { Rules } from \"../../../../common/helpers\";\r\nimport EupatiTextbox from \"../../../../common/static/textbox\";\r\nimport EupatiEmailbox from \"../../../../common/static/emailbox\";\r\nimport { useHistory } from \"react-router\";\r\nimport { Messages } from \"../../../../common/helpers\";\r\nimport { Project } from \"../../../../common/models/main-models\";\r\nimport { LookUpOptions } from '../../../../common/models/input-models';\r\nimport { toast } from 'react-toastify';\r\n\r\ntype OwnProps = {\r\n    project: Project,\r\n    isUserReal: boolean\r\n};\r\n\r\ntype DispatchProps = {\r\n    showCompanyInfoSection: () => void;\r\n    setProject: (project: Project) => void;\r\n    returnProperDefaultValue: (val: any) => any;\r\n    findLookUpData: (lookUpDataType?: string) => LookUpOptions[] | null;\r\n}\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nexport default function PersonalInfo(props: Props) {\r\n\r\n    const history = useHistory();\r\n\r\n    const { handleSubmit, control, reset, formState: { errors } } = useForm();\r\n\r\n    const onSubmit = (data: any) => {\r\n        if (!props.isUserReal) {\r\n            toast.error(Messages.FAIL_AUTH_MSG);\r\n            return history.push('/');\r\n        }\r\n\r\n        const updatedProject = Object.assign(props.project, data);\r\n        props.setProject(updatedProject);\r\n        props.showCompanyInfoSection();\r\n    }\r\n\r\n    return (\r\n        <Form className='researcher' onSubmit={handleSubmit(onSubmit)}>\r\n            <Form.Group className='researcher-info'>\r\n                <Form.Group className=\"lcolumn\">\r\n\r\n                    <Form.Group id='r-fname' className='researcher-info-field mb-3'>\r\n                        <Form.Label>First name</Form.Label>\r\n                        <Controller\r\n                            name='pocFirstName'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.pocFirstName)}\r\n                            rules={Rules.requiredMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiTextbox\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.pocFirstName?.message,\r\n                                        placeholder: 'Please type first name'\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='r-lname' className='researcher-info-field mb-3'>\r\n                        <Form.Label>Surname</Form.Label>\r\n                        <Controller\r\n                            name='pocLastName'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.pocLastName)}\r\n                            rules={Rules.requiredMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiTextbox\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.pocLastName?.message,\r\n                                        placeholder: 'Please type last name'\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='r-tel' className='researcher-info-field mb-3'>\r\n                        <Form.Label>Phone</Form.Label>\r\n                        <Controller\r\n                            name='pocPhoneNumber'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.pocPhoneNumber)}\r\n                            rules={Rules.requiredMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiTextbox\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.pocPhoneNumber?.message,\r\n                                        placeholder: 'Please type phone number'\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='r-email' className='researcher-info-field mb-3'>\r\n                        <Form.Label>Email</Form.Label>\r\n                        <Controller\r\n                            name='pocEmail'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.pocEmail)}\r\n                            rules={Rules.requiredMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiEmailbox\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.pocEmail?.message\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='r-btns' className='researcher-info-field'>\r\n                        <Button className='bck' style={{ visibility: 'hidden' }} variant='secondary' disabled>Back</Button>\r\n                        <Button className='nxt' variant='primary' type='submit'>Next</Button>\r\n                    </Form.Group>\r\n                </Form.Group>\r\n            </Form.Group>\r\n        </Form>\r\n    )\r\n}","import React from \"react\";\r\nimport { Button, Form } from \"react-bootstrap\";\r\nimport { useForm, Controller } from \"react-hook-form\";\r\nimport { Rules } from \"../../../../common/helpers\";\r\nimport EupatiTextbox from \"../../../../common/static/textbox\";\r\nimport EupatiDropdown from \"../../../../common/static/dropdown\";\r\nimport EupatiToggleBtn from \"../../../../common/static/toggle-btn\";\r\nimport { useHistory } from \"react-router\";\r\nimport { Messages } from \"../../../../common/helpers\";\r\nimport { Project } from \"../../../../common/models/main-models\";\r\nimport { LookUpOptions } from \"../../../../common/models/input-models\";\r\nimport { toast } from 'react-toastify';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faInfoCircle } from '@fortawesome/fontawesome-free-solid';\r\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\r\nimport ReactTooltip from 'react-tooltip';\r\n\r\ntype OwnProps = {\r\n    project: Project,\r\n    isUserReal: boolean\r\n};\r\n\r\ntype DispatchProps = {\r\n    nextPage: () => void;\r\n    hideCompanyInfoSection: () => void;\r\n    setProject: (project: Project) => void;\r\n    returnProperDefaultValue: (val: any) => any;\r\n    findLookUpData: (lookUpDataType?: string) => LookUpOptions[] | null;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\ntype FieldProps = {\r\n    pocOrganisation: string,\r\n    pocJobTitle: string,\r\n    pocCountryId: number,\r\n    pocOrganisationTypeId: number,\r\n    pocOrganisationTypeDescription: string\r\n};\r\n\r\nexport default function CompanyInfo(props: Props) {\r\n\r\n    const history = useHistory();\r\n\r\n    const { handleSubmit, control, watch, reset, formState: { errors } } = useForm();\r\n\r\n    const fieldsData = {\r\n        pocOrganisation: watch(\"pocOrganisation\") as string,\r\n        pocJobTitle: watch(\"pocJobTitle\") as string,\r\n        pocCountryId: watch(\"pocCountryId\") as number,\r\n        pocOrganisationTypeId: watch(\"pocOrganisationTypeId\") as number,\r\n        pocOrganisationTypeDescription: watch(\"pocOrganisationTypeDescription\") as string\r\n    } as FieldProps;\r\n\r\n    const onSubmit = (data: any) => {\r\n        if (!props.isUserReal) {\r\n            toast.error(Messages.FAIL_AUTH_MSG);\r\n            return history.push('/');\r\n        }\r\n\r\n        const updatedProject = Object.assign(props.project, data);\r\n        props.setProject(updatedProject);\r\n        props.nextPage();\r\n    }\r\n\r\n    const onBackHandler = () => {\r\n        if (!props.isUserReal) {\r\n            toast.error(Messages.FAIL_AUTH_MSG);\r\n            return history.push('/');\r\n        }\r\n\r\n        if (adjustFieldsValues() === 0) {\r\n            const updatedProject = Object.assign(props.project, fieldsData);\r\n            props.setProject(updatedProject);\r\n        }\r\n        props.hideCompanyInfoSection();\r\n    }\r\n\r\n    const returnProperIconType = (icon: any) => {\r\n        return icon as IconProp;\r\n    }\r\n\r\n    const toggleField = () => {\r\n        let orgTypeId = 0;\r\n        if (fieldsData.pocOrganisationTypeId !== undefined && fieldsData.pocOrganisationTypeId !== null) {\r\n            orgTypeId = fieldsData.pocOrganisationTypeId;\r\n        }\r\n        else if (props.project.pocOrganisationTypeId !== undefined && props.project.pocOrganisationTypeId !== null) {\r\n            orgTypeId = props.project.pocOrganisationTypeId;\r\n        }\r\n\r\n        const organisationTypes = props.findLookUpData('organisationType');\r\n        return organisationTypes?.find(x => x.id.toString() === orgTypeId.toString())?.name.toLowerCase().includes('other');\r\n    }\r\n\r\n    const adjustFieldsValues = () => {\r\n        if (fieldsData.pocOrganisation === undefined &&\r\n            fieldsData.pocJobTitle === undefined &&\r\n            fieldsData.pocCountryId === undefined &&\r\n            fieldsData.pocOrganisationTypeId === undefined &&\r\n            fieldsData.pocOrganisationTypeDescription === undefined) {\r\n            return 1;\r\n        }\r\n\r\n        if (fieldsData.pocOrganisation === undefined &&\r\n            props.project.pocOrganisation !== undefined) {\r\n            fieldsData.pocOrganisation = props.project.pocOrganisation;\r\n        }\r\n\r\n        if (fieldsData.pocJobTitle === undefined &&\r\n            props.project.pocJobTitle !== undefined) {\r\n            fieldsData.pocJobTitle = props.project.pocJobTitle;\r\n        }\r\n\r\n        if (fieldsData.pocCountryId === undefined &&\r\n            props.project.pocCountryId !== undefined) {\r\n            fieldsData.pocCountryId = props.project.pocCountryId;\r\n        }\r\n\r\n        if (fieldsData.pocOrganisationTypeId === undefined &&\r\n            props.project.pocOrganisationTypeId !== undefined) {\r\n            fieldsData.pocOrganisationTypeId = props.project.pocOrganisationTypeId;\r\n        }\r\n\r\n        if (fieldsData.pocOrganisationTypeDescription === undefined &&\r\n            props.project.pocOrganisationTypeDescription !== undefined) {\r\n            fieldsData.pocOrganisationTypeDescription = props.project.pocOrganisationTypeDescription;\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    return (\r\n        <Form className='researcher' onSubmit={handleSubmit(onSubmit)}>\r\n            <Form.Group className='researcher-info'>\r\n                <Form.Group className='rcolumn'>\r\n\r\n                    <Form.Group id='r-org' className='researcher-info-field mb-3'>\r\n                        <Form.Label>Company</Form.Label>\r\n                        <Controller\r\n                            name='pocOrganisation'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.pocOrganisation)}\r\n                            rules={Rules.requiredMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiTextbox\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.pocOrganisation?.message,\r\n                                        placeholder: 'Please type company name'\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='r-jobTitle' className='researcher-info-field mb-3'>\r\n                        <Form.Label>Job title</Form.Label>\r\n                        <Controller\r\n                            name='pocJobTitle'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.pocJobTitle)}\r\n                            rules={Rules.requiredMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiTextbox\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.pocJobTitle?.message,\r\n                                        placeholder: 'Please type job title'\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='r-country' className='researcher-info-field'>\r\n                        <Form.Label>Country <FontAwesomeIcon data-tip data-for='ctryInfo' icon={returnProperIconType(faInfoCircle)} /> <ReactTooltip id='ctryInfo'><span>Country, where your organisation is based.</span></ReactTooltip> </Form.Label>\r\n                        <Controller\r\n                            name='pocCountryId'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.pocCountryId)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiDropdown\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.pocCountryId?.message,\r\n                                        fieldName: 'pocCountryId',\r\n                                        values: props.findLookUpData('country'),\r\n                                        defaultOptionText: 'Select country...'\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='r-orgType' className='researcher-info-field'>\r\n                        <Form.Label>Organization type</Form.Label>\r\n                        <Controller\r\n                            name='pocOrganisationTypeId'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.pocOrganisationTypeId)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiToggleBtn\r\n                                    {...{\r\n                                        ...field,\r\n                                        fieldName: 'pocOrganisationTypeId',\r\n                                        values: props.findLookUpData('organisationType'),\r\n                                        errorMsg: errors?.pocOrganisationTypeId?.message\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    {toggleField() &&\r\n                        <Form.Group id='r-orgTypeDescr' className='researcher-info-field'>\r\n                            <Form.Label>Organization type description</Form.Label>\r\n                            <Controller\r\n                                name='pocOrganisationTypeDescription'\r\n                                control={control}\r\n                                defaultValue={props.returnProperDefaultValue(props.project.pocOrganisationTypeDescription)}\r\n                                rules={Rules.notRequired}\r\n                                render={({ field }) =>\r\n                                    <EupatiTextbox\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.pocOrganisationTypeDescription?.message,\r\n                                            placeholder: 'Please type organization type'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n                    }\r\n\r\n                    <Form.Group id='r-btns' className='researcher-info-field'>\r\n                        <Button className='bck' variant='secondary' onClick={onBackHandler}>Back</Button>\r\n                        <Button className='nxt' variant='primary' type='submit'>Next</Button>\r\n                    </Form.Group>\r\n                </Form.Group>\r\n            </Form.Group>\r\n        </Form>\r\n    )\r\n}","import React, { useState } from \"react\";\r\nimport PersonalInfo from \"./personal\";\r\nimport CompanyInfo from \"./company\";\r\nimport { Project } from \"../../../../common/models/main-models\";\r\nimport { LookUpData, LookUpOptions } from \"../../../../common/models/input-models\";\r\n\r\ntype OwnProps = {\r\n    project: Project,\r\n    lookUpData: LookUpData[],\r\n    isUserReal: boolean,\r\n    showSecondSubComponent: boolean\r\n};\r\n\r\ntype DispatchProps = {\r\n    nextPage: () => void;\r\n    setIsUserReal: (token: string) => void;\r\n    setProject: (project: Project) => void;\r\n    returnProperDefaultValue: (val: any) => any;\r\n    findLookUpData: (lookUpDataType?: string) => LookUpOptions[] | null;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nexport default function ResearcherInfo(props: Props) {\r\n    const [nextBtnClicked, setNextBtnClicked] = useState<boolean>(props.showSecondSubComponent);\r\n\r\n    const toggleSectionVisibility = () => {\r\n        setNextBtnClicked(!nextBtnClicked);\r\n        //window.scrollTo(0, 0);\r\n    }\r\n\r\n    return (\r\n        <div style={{ margin: '0 0 7.5rem 0' }}>\r\n\r\n            {nextBtnClicked &&\r\n                <PersonalInfo\r\n                    {...{\r\n                        project: props.project,\r\n                        setProject: props.setProject,\r\n                        returnProperDefaultValue: props.returnProperDefaultValue,\r\n                        findLookUpData: props.findLookUpData,\r\n                        isUserReal: props.isUserReal,\r\n                        showCompanyInfoSection: toggleSectionVisibility\r\n                    }}\r\n                />\r\n            }\r\n\r\n            {!nextBtnClicked &&\r\n                <CompanyInfo\r\n                    {...{\r\n                        project: props.project,\r\n                        setProject: props.setProject,\r\n                        returnProperDefaultValue: props.returnProperDefaultValue,\r\n                        findLookUpData: props.findLookUpData,\r\n                        hideCompanyInfoSection: toggleSectionVisibility,\r\n                        isUserReal: props.isUserReal,\r\n                        nextPage: props.nextPage\r\n                    }}\r\n                />\r\n            }\r\n        </div>\r\n    );\r\n}","import * as React from 'react';\r\nimport { ToggleButtonGroup, ToggleButton } from 'react-bootstrap';\r\nimport { LookUpOptions } from '../models/input-models';\r\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faCheckSquare } from '@fortawesome/fontawesome-free-regular';\r\n\r\ntype OwnProps = {\r\n    fieldName: string;\r\n    values: LookUpOptions[] | null;\r\n    value: any[];\r\n    errorMsg: string;\r\n};\r\n\r\ntype DispatchProps = {\r\n    onChange: (e: any) => void;\r\n};\r\n\r\ntype OwnState = {\r\n    vals: any[];\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nconst ALL_ELEMENTS_OPTION = { id: 1312, name: \"All\" };\r\nexport default class EupatiMultiselect extends React.Component<Props, OwnState> {\r\n\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            vals: []\r\n        };\r\n\r\n        this.returnProperIconType = this.returnProperIconType.bind(this);\r\n        this.handleOnChange = this.handleOnChange.bind(this);\r\n        this.compare = this.compare.bind(this);\r\n    }\r\n\r\n    componentDidMount() {\r\n        if (this.props.values !== null) {\r\n            this.setState({ vals: [...this.props.values, ALL_ELEMENTS_OPTION] });\r\n        }\r\n    }\r\n\r\n    returnProperIconType(icon: any) {\r\n        return icon as IconProp;\r\n    }\r\n\r\n    compare(a: any, b: any) {\r\n        if (a.name < b.name) {\r\n            return -1;\r\n        }\r\n        if (a.name > b.name) {\r\n            return 1;\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    handleOnChange(e: any) {\r\n        if (e.includes(ALL_ELEMENTS_OPTION.id)) {\r\n            const ids: any[] = [];\r\n            this.state.vals.forEach(x => { if (x.id !== ALL_ELEMENTS_OPTION.id) { ids.push(x.id) } });\r\n            this.props.onChange(ids);\r\n        }\r\n        else {\r\n            this.props.onChange(e);\r\n        }\r\n    }\r\n\r\n    render() {\r\n        let valuesComponent: any;\r\n\r\n        let multiSelectComponent: any;\r\n\r\n        if (this.props.values) {\r\n\r\n            if (this.props.values.length > 3) {\r\n                valuesComponent = this.state.vals.sort(this.compare).map((x, i) => {\r\n                    return (\r\n                        <ToggleButton\r\n                            key={i}\r\n                            value={x.id}\r\n                            type='checkbox'\r\n                            className={this.props?.value?.length === this.props?.values?.length ? 'active' : ''}\r\n                            name={this.props.fieldName}\r\n                            style={{ border: '0' }}\r\n                        >\r\n                            <div className='toggle-btn'>\r\n                                <FontAwesomeIcon\r\n                                    icon={this.returnProperIconType(faCheckSquare)}\r\n                                    className='toggle-btn-circle'\r\n                                />\r\n                            </div>\r\n                            <div className='check-btn-text'>{x.name}</div>\r\n                        </ToggleButton>\r\n                    )\r\n                });\r\n            } else {\r\n                valuesComponent = this.state.vals.map((x, i) => {\r\n                    if (x.id !== 1312) {\r\n                        return (\r\n                            <ToggleButton\r\n                                key={i}\r\n                                value={x.id}\r\n                                type='checkbox'\r\n                                name={this.props.fieldName}\r\n                            >\r\n                                <div className='toggle-btn'>\r\n                                    <FontAwesomeIcon\r\n                                        icon={this.returnProperIconType(faCheckSquare)}\r\n                                        className='toggle-btn-circle'\r\n                                    />\r\n                                </div>\r\n                                <div className='check-btn-text'>{x.name}</div>\r\n                            </ToggleButton>\r\n                        )\r\n                    }\r\n                });\r\n            }\r\n        }\r\n\r\n        multiSelectComponent = (\r\n            <ToggleButtonGroup\r\n                id={this.props.fieldName}\r\n                className={this.props.fieldName}\r\n                value={this.props.value}\r\n                type='checkbox'\r\n                onChange={(e) => this.handleOnChange(e)}\r\n            >\r\n                {valuesComponent}\r\n            </ToggleButtonGroup>\r\n        )\r\n\r\n        return (\r\n            <>\r\n                {multiSelectComponent}\r\n                {!!this.props.errorMsg &&\r\n                    <span className='text-danger'>{this.props.errorMsg}</span>\r\n                }\r\n            </>\r\n        )\r\n    }\r\n}","import * as React from 'react';\r\nimport { ToggleButtonGroup, ToggleButton } from 'react-bootstrap';\r\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faCheckSquare } from '@fortawesome/fontawesome-free-solid';\r\nimport { Link, NavLink } from 'react-router-dom';\r\n\r\ntype OwnProps = {\r\n    fieldName: string;\r\n    value: any;\r\n    errorMsg: string;\r\n};\r\n\r\ntype DispatchProps = {\r\n    onChange: (e: any) => void;\r\n};\r\n\r\ntype OwnState = {};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nexport default class EupatiGDPRBtn extends React.Component<Props, OwnState> {\r\n\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.returnProperIconType = this.returnProperIconType.bind(this);\r\n    }\r\n\r\n    returnProperIconType(icon: any) {\r\n        return icon as IconProp;\r\n    }\r\n\r\n    render() {\r\n        let valuesComponent: any;\r\n\r\n        let gdprComponent: any;\r\n\r\n        let values = [\r\n            {\r\n                id: true,\r\n                name: 'I agree to '\r\n            }\r\n        ];\r\n\r\n        valuesComponent = values.map((x, i) => {\r\n            return (\r\n                <ToggleButton\r\n                    key={i}\r\n                    value={x.id.toString()}\r\n                    type='radio'\r\n                    name={this.props.fieldName}\r\n                >\r\n                    <div className='toggle-btn'>\r\n                        <FontAwesomeIcon\r\n                            icon={this.returnProperIconType(faCheckSquare)}\r\n                            className='toggle-btn-circle'\r\n                        />\r\n                    </div>\r\n                    <div className='check-btn-text'>{x.name}<a href='https://toolbox.eupati.eu/glossary/gdpr/' target=\"_blank\" >terms and conditions</a></div>\r\n                </ToggleButton>\r\n            )\r\n        });\r\n\r\n        gdprComponent = (\r\n            <ToggleButtonGroup\r\n                id={this.props.fieldName}\r\n                className={this.props.fieldName}\r\n                value={this.props.value.toString()}\r\n                name={this.props.fieldName}\r\n                type='radio'\r\n                onChange={(e) => this.props.onChange(e)}\r\n            >\r\n                {valuesComponent}\r\n            </ToggleButtonGroup>\r\n        )\r\n\r\n        return (\r\n            <>\r\n                {gdprComponent}\r\n                {!!this.props.errorMsg &&\r\n                    <span className='text-danger'>{this.props.errorMsg}</span>\r\n                }\r\n            </>\r\n        )\r\n    }\r\n}","import React from 'react';\r\nimport { Controller, useForm } from 'react-hook-form';\r\nimport { Button, Form } from 'react-bootstrap';\r\nimport { Rules, Messages } from '../../../../common/helpers';\r\nimport EupatiMultiselect from '../../../../common/static/multiselect';\r\nimport EupatiGDPRBtn from '../../../../common/static/GDPR-toggle';\r\nimport { useHistory } from 'react-router';\r\nimport EupatiTextarea from '../../../../common/static/textarea';\r\nimport { Project } from '../../../../common/models/main-models';\r\nimport { LookUpOptions } from '../../../../common/models/input-models';\r\nimport EupatiTextbox from '../../../../common/static/textbox';\r\nimport { toast } from 'react-toastify';\r\n\r\ntype OwnProps = {\r\n    project: Project,\r\n    isUserReal: boolean,\r\n};\r\n\r\ntype DispatchProps = {\r\n    setProject: (project: Project) => void;\r\n    submitProject: (project: Project) => void;\r\n    returnProperDefaultValue: (val: any) => any;\r\n    hidePatientsAdditionalInfoSection: () => void;\r\n    findLookUpData: (lookUpDataType?: string) => LookUpOptions[] | null;\r\n    nextPage: () => void;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\ntype FieldsProps = {\r\n    patientExpertises: number[],\r\n    patientExpertisesDescription: string,\r\n    otherInformation: string,\r\n    isGDPRConsentGiven: boolean\r\n};\r\n\r\nexport default function PatientsAdditionalInfo(props: Props) {\r\n\r\n    const history = useHistory();\r\n\r\n    const { handleSubmit, control, watch, formState: { errors } } = useForm();\r\n\r\n    const fieldsData = {\r\n        patientExpertises: watch(\"patientExpertises\") as number[],\r\n        patientExpertisesDescription: watch(\"patientExpertisesDescription\") as string,\r\n        otherInformation: watch(\"otherInformation\") as string,\r\n        isGDPRConsentGiven: watch(\"isGDPRConsentGiven\") as boolean\r\n    } as FieldsProps;\r\n\r\n    const onSubmit = (data: any) => {\r\n        if (!props.isUserReal) {\r\n            toast.error(Messages.FAIL_AUTH_MSG);\r\n            return history.push('/');\r\n        }\r\n\r\n        const updatedProject = Object.assign(props.project, Object.assign(data));\r\n        props.submitProject(updatedProject);\r\n        props.nextPage();\r\n    }\r\n\r\n    const onBackHandler = () => {\r\n        if (!props.isUserReal) {\r\n            toast.error(Messages.FAIL_AUTH_MSG);\r\n            return history.push('/');\r\n        }\r\n\r\n        if (adjustFieldsValues() === 0) {\r\n            const updatedProject = Object.assign(props.project, Object.assign(fieldsData));\r\n            props.setProject(updatedProject);\r\n        }\r\n        props.hidePatientsAdditionalInfoSection();\r\n    }\r\n\r\n    const adjustFieldsValues = () => {\r\n        if (fieldsData.patientExpertises === undefined &&\r\n            fieldsData.patientExpertisesDescription === undefined &&\r\n            fieldsData.otherInformation === undefined &&\r\n            fieldsData.isGDPRConsentGiven === undefined) {\r\n            return 1;   // if user hasn't changed anything\r\n        }\r\n\r\n        if (fieldsData.patientExpertises === undefined &&\r\n            props.project.patientExpertises !== undefined) {\r\n            fieldsData.patientExpertises = [...props.project.patientExpertises];\r\n        }\r\n\r\n        if (fieldsData.patientExpertisesDescription === undefined &&\r\n            props.project.patientExpertisesDescription !== undefined) {\r\n            fieldsData.patientExpertisesDescription = props.project.patientExpertisesDescription;\r\n        }\r\n\r\n        if (fieldsData.otherInformation === undefined &&\r\n            props.project.otherInformation !== undefined) {\r\n            fieldsData.otherInformation = props.project.otherInformation;\r\n        }\r\n\r\n        if (fieldsData.isGDPRConsentGiven === undefined &&\r\n            props.project.isGDPRConsentGiven !== undefined) {\r\n            fieldsData.isGDPRConsentGiven = props.project.isGDPRConsentGiven;\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    const toggleField = () => {\r\n        let ptExpertises: number[] = [];\r\n        if (fieldsData.patientExpertises !== undefined && fieldsData.patientExpertises !== null) {\r\n            ptExpertises = [...fieldsData.patientExpertises];\r\n        }\r\n        else if (props.project.patientExpertises !== undefined && props.project.patientExpertises !== null) {\r\n            ptExpertises = [...props.project.patientExpertises];\r\n        }\r\n\r\n        let otherType = props.findLookUpData('expertise')?.find(ot => ot.name.toLowerCase().includes('other'));\r\n        return ptExpertises?.some((x) => x === otherType?.id) ? true : false;\r\n    }\r\n\r\n    return (\r\n        <Form className='pt' onSubmit={handleSubmit(onSubmit)}>\r\n            <Form.Group className='pt-info'>\r\n                <Form.Group className='rcolumn'>\r\n\r\n                    <Form.Group id='pt-lvlExprt' className='pt-info-field mb-4'>\r\n                        <Form.Label>Level of expertise (multiple answers possible)</Form.Label>\r\n                        <Controller\r\n                            name='patientExpertises'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.patientExpertises)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiMultiselect\r\n                                    {...{\r\n                                        ...field,\r\n                                        fieldName: 'patientExpertises',\r\n                                        values: props.findLookUpData('expertise'),\r\n                                        errorMsg: errors?.patientExpertises?.message\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    {toggleField() &&\r\n                        <Form.Group id='pt-lvlExprtDescr' className='pt-info-field mb-4'>\r\n                            <Form.Label>Please specify your level of expertise</Form.Label>\r\n                            <Controller\r\n                                name='patientExpertisesDescription'\r\n                                control={control}\r\n                                defaultValue={props.returnProperDefaultValue(props.project.patientExpertisesDescription)}\r\n                                rules={Rules.notRequired}\r\n                                render={({ field }) =>\r\n                                    <EupatiTextbox\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.patientExpertisesDescription?.message,\r\n                                            placeholder: 'Please type level of expertise'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n                    }\r\n\r\n                    <Form.Group id='pt-otherInfo' className='pt-info-field mb-3'>\r\n                        <Form.Label>Additional patient information</Form.Label>\r\n                        <Controller\r\n                            name='otherInformation'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.otherInformation)}\r\n                            rules={Rules.requiredMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiTextarea\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.otherInformation?.message,\r\n                                        rowsCount: 8\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='pt-gdpr' className='pt-info-field mb-4'>\r\n                        <Controller\r\n                            name='isGDPRConsentGiven'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.isGDPRConsentGiven)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiGDPRBtn\r\n                                    {...{\r\n                                        ...field,\r\n                                        fieldName: 'isGDPRConsentGiven',\r\n                                        errorMsg: errors?.isGDPRConsentGiven?.message\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                        <small className='google-message'>\r\n                            This site is protected by reCAPTCHA and the Google\r\n                            <a className='google-message-privacy' href=\"https://policies.google.com/privacy\" target=\"_blank\"> Privacy Policy</a> and\r\n                            <a className='google-message-tos' href=\"https://policies.google.com/terms\" target=\"_blank\"> Terms of Service</a> apply.\r\n                        </small>\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='pt-btns' className='pt-info-field'>\r\n                        <Button className='bck' variant='secondary' onClick={onBackHandler} >Back</Button>\r\n                        <Button className='nxt' variant='primary' type='submit'>Submit</Button>\r\n                    </Form.Group>\r\n                </Form.Group>\r\n            </Form.Group>\r\n        </Form>\r\n    )\r\n}","//R.S docs: https://www.npmjs.com/package/react-select\r\nimport * as React from 'react';\r\nimport { Form } from 'react-bootstrap';\r\nimport Select from 'react-select';\r\nimport { LookUpOptions } from '../models/input-models';\r\nimport './static.scss';\r\n\r\ntype OwnProps = {\r\n    value: any[];\r\n    errorMsg: string;\r\n    values: LookUpOptions[] | null;\r\n    placeholder?: string;\r\n};\r\n\r\nexport type DispatchProps = {\r\n    onChange: (e: any) => void;\r\n};\r\n\r\ntype OwnState = {};\r\n\r\ntype Props = DispatchProps & OwnProps;\r\n\r\nconst CONTINENTS_LIST = ['Worldwide', 'Asia', 'Africa', 'North America', 'South America', 'Antarctica', 'Europe'];\r\nexport default class EupatiSelect extends React.Component<Props, OwnState> {\r\n\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.handleOnChange = this.handleOnChange.bind(this);\r\n        this.mapOptionsToValues = this.mapOptionsToValues.bind(this);\r\n        this.mapArrayToValues = this.mapArrayToValues.bind(this);\r\n        this.returnComponentStyles = this.returnComponentStyles.bind(this);\r\n        this.langCompare = this.langCompare.bind(this);\r\n    }\r\n\r\n    handleOnChange(event: any) {\r\n        this.props.onChange(Object.values(event).map((key: any) => key.value));\r\n    }\r\n\r\n    mapOptionsToValues = (options: any) => {\r\n        const isCountry = (item: any) => item.name.toLowerCase() === 'worldwide';\r\n        if (options.length) {\r\n            if (options.some(isCountry)) {\r\n                return options.map((option: any) => ({\r\n                    value: option.id,\r\n                    label: option.name\r\n                }));\r\n            }\r\n\r\n            return options.sort(this.langCompare).map((option: any) => ({\r\n                value: option.id,\r\n                label: option.name\r\n            }));\r\n        }\r\n    }\r\n\r\n    mapArrayToValues = (arr: any) => {\r\n        if (arr.length) {\r\n            return arr.map((element: any) => {\r\n                let newElement = this.props?.values?.find((x) => x.id === element);\r\n                return { value: newElement?.id, label: newElement?.name };\r\n            });\r\n        }\r\n    }\r\n\r\n    langCompare = (a: any, b: any) => {\r\n        if (a.name < b.name) {\r\n            return -1;\r\n        }\r\n        if (a.name > b.name) {\r\n            return 1;\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    returnComponentStyles = () => {\r\n\r\n        const continentsBoldStyles = {\r\n            multiValueLabel: (base: any) => ({ ...base, backgroundColor: '#DAEEF2', color: '#000', padding: '4px 8px', paddingLeft: '8px' }),\r\n            multiValueRemove: (base: any) => ({ ...base, backgroundColor: '#DAEEF2', color: '#808080', cursor: 'pointer', \"&:hover\": { backgroundColor: '#00A4B6', color: '#fff' } }),\r\n            dropdownIndicator: (base: any) => ({ ...base, cursor: 'pointer' }),\r\n            indicatorsContainer: (base: any) => ({ ...base, cursor: 'pointer', backgroundColor: '#DAEEF2', color: '#808080', \"&:hover\": { backgroundColor: '#00A4B6', color: '#fff' } }),\r\n            option: (base: any) => (\r\n                {\r\n                    ...base,\r\n                    \"&:nth-of-type(1)\": { fontWeight: 'bold' },\r\n                    \"&:nth-of-type(2)\": { fontWeight: 'bold' },\r\n                    \"&:nth-of-type(3)\": { fontWeight: 'bold' },\r\n                    \"&:nth-of-type(4)\": { fontWeight: 'bold' },\r\n                    \"&:nth-of-type(5)\": { fontWeight: 'bold' },\r\n                    \"&:nth-of-type(6)\": { fontWeight: 'bold' },\r\n                    \"&:nth-of-type(7)\": { fontWeight: 'bold' },\r\n                    \"&:nth-of-type(8)\": { fontWeight: 'bold' }\r\n                }\r\n            ),\r\n            menu: (base: any) => ({ ...base, position: 'relative', backgroundColor: '#fff' }),\r\n            menuList: (base: any) => ({ ...base, position: 'relative', backgroundColor: '#fff' })\r\n        }\r\n\r\n        const regularStyles = {\r\n            multiValueLabel: (base: any) => ({ ...base, backgroundColor: '#DAEEF2', color: '#000', padding: '4px 8px', paddingLeft: '8px' }),\r\n            multiValueRemove: (base: any) => ({ ...base, backgroundColor: '#DAEEF2', color: '#808080', cursor: 'pointer', \"&:hover\": { backgroundColor: '#00A4B6', color: '#fff' } }),\r\n            dropdownIndicator: (base: any) => ({ ...base, cursor: 'pointer' }),\r\n            indicatorsContainer: (base: any) => ({ ...base, cursor: 'pointer', backgroundColor: '#DAEEF2', color: '#808080', \"&:hover\": { backgroundColor: '#00A4B6', color: '#fff' } }),\r\n            menu: (base: any) => ({ ...base, position: 'relative', backgroundColor: '#fff' }),\r\n            menuList: (base: any) => ({ ...base, position: 'relative', backgroundColor: '#fff' })\r\n        }\r\n\r\n\r\n        if (this.props?.values !== null) {\r\n            return this.props?.values[0]?.name?.toLowerCase() === 'worldwide' ? continentsBoldStyles : regularStyles;\r\n        }\r\n\r\n        return regularStyles;\r\n    }\r\n\r\n    render() {\r\n        return (\r\n            <>\r\n                <Form.Group>\r\n                    <Select\r\n                        isMulti={true}\r\n                        placeholder={this.props.placeholder ? this.props.placeholder : 'Please select an option...'}\r\n                        options={this.mapOptionsToValues(this.props.values)}\r\n                        defaultValue={this.mapArrayToValues(this.props.value)}\r\n                        onChange={e => this.handleOnChange(e)}\r\n                        className='select-dropdown'\r\n                        styles={this.returnComponentStyles()}\r\n                    />\r\n                    {!!this.props.errorMsg &&\r\n                        <span className='text-danger'>{this.props.errorMsg}</span>\r\n                    }\r\n                </Form.Group>\r\n            </>\r\n        );\r\n    }\r\n}\r\n","//R.S docs: https://www.npmjs.com/package/react-select\r\nimport * as React from 'react';\r\nimport { Form } from 'react-bootstrap';\r\nimport Async from 'react-select/async';\r\nimport { LookUpOptions } from '../models/input-models';\r\nimport { DiseaseInfo } from '../models/main-models';\r\nimport DataSvc from '../services/data-svc';\r\nimport './static.scss';\r\n\r\ntype OwnProps = {\r\n    value: any[];\r\n    errorMsg: string;\r\n    placeholder?: string;\r\n};\r\n\r\nexport type DispatchProps = {\r\n    onChange: (e: any) => void;\r\n};\r\n\r\ntype OwnState = { applyFiltersTimeoutId: any; };\r\n\r\ntype Props = DispatchProps & OwnProps;\r\n\r\nexport default class EupatiDiseaseAsyncSelect extends React.Component<Props, OwnState> {\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.handleOnChange = this.handleOnChange.bind(this);\r\n        this.mapOptionsToValues = this.mapOptionsToValues.bind(this);\r\n        this.returnComponentStyles = this.returnComponentStyles.bind(this);\r\n\r\n        this.state = {\r\n            applyFiltersTimeoutId: undefined\r\n        };\r\n    }\r\n\r\n    handleOnChange(event: any) {\r\n        this.props?.onChange(Object.values(event).map((key: any) => ({ name: key.label, treeNumbers: key.value } as DiseaseInfo)));\r\n    }\r\n\r\n    mapOptionsToValues = (options: any) => {\r\n        return options?.map((option: any) => ({\r\n            value: option.id,\r\n            label: option.name\r\n        }));\r\n    }\r\n\r\n    mapDiseaseOptionsToValues = (options: any) => {\r\n        return options?.map((option: any) => ({\r\n            value: option.treeNumbers,\r\n            label: option.name\r\n        }));\r\n    }\r\n\r\n    returnComponentStyles = () => {\r\n\r\n        const regularStyles = {\r\n            multiValueLabel: (base: any) => ({ ...base, backgroundColor: '#DAEEF2', color: '#000', padding: '4px 8px', paddingLeft: '8px' }),\r\n            multiValueRemove: (base: any) => ({ ...base, backgroundColor: '#DAEEF2', color: '#808080', cursor: 'pointer', \"&:hover\": { backgroundColor: '#00A4B6', color: '#fff' } }),\r\n            dropdownIndicator: (base: any) => ({ ...base, cursor: 'pointer' }),\r\n            indicatorsContainer: (base: any) => ({ ...base, cursor: 'pointer', backgroundColor: '#DAEEF2', color: '#808080', \"&:hover\": { backgroundColor: '#00A4B6', color: '#fff' } }),\r\n            menu: (base: any) => ({ ...base, position: 'relative', backgroundColor: '#fff' }),\r\n            menuList: (base: any) => ({ ...base, position: 'relative', backgroundColor: '#fff' })\r\n        }\r\n\r\n\r\n        return regularStyles;\r\n    }\r\n\r\n    loadAutocompleteOptions = async (inputValue: string) => {\r\n        return new Promise<LookUpOptions[]>((resolve) => {\r\n            if (inputValue && inputValue.length > 2) {\r\n                if (this.state.applyFiltersTimeoutId) {\r\n                    clearTimeout(this.state.applyFiltersTimeoutId);\r\n                }\r\n\r\n                var that = this;\r\n                this.setState({\r\n                    applyFiltersTimeoutId: setTimeout(function () {\r\n                        that.setState({ applyFiltersTimeoutId: undefined });\r\n                        DataSvc.utilsSvc.getMeshRecommendations(inputValue).then((result: any) => {\r\n                            const diseaseOptions = result.map((m: any, i: any) => {\r\n                                return { id: m.treeNumbers.join(\";\"), name: m.originalTerm } as LookUpOptions;\r\n                            });\r\n\r\n                            resolve(that.mapOptionsToValues(diseaseOptions));\r\n                        },\r\n                            (error) => { console.error(error); })\r\n                    }, 800),\r\n                });\r\n            } else {\r\n                resolve([]);\r\n            }\r\n        });\r\n    }\r\n\r\n    render() {\r\n        return (\r\n            <>\r\n                <Form.Group>\r\n                    <Async\r\n                        isMulti={true}\r\n                        placeholder={this.props.placeholder ? this.props.placeholder : 'Enter a disease to get suggestions'}\r\n                        defaultValue={this.mapDiseaseOptionsToValues(this.props.value)}\r\n                        onChange={e => this.handleOnChange(e)}\r\n                        className='select-dropdown'\r\n                        styles={this.returnComponentStyles()}\r\n                        loadOptions={this.loadAutocompleteOptions}\r\n                    />\r\n                    {!!this.props.errorMsg &&\r\n                        <span className='text-danger'>{this.props.errorMsg}</span>\r\n                    }\r\n                </Form.Group>\r\n            </>\r\n        );\r\n    }\r\n}\r\n","import * as React from 'react';\r\nimport { Form } from 'react-bootstrap';\r\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\r\n\r\ntype OwnProps = {\r\n    fieldName: string;\r\n    text: string;\r\n    value: boolean;\r\n    errorMsg: string;\r\n};\r\n\r\ntype OwnState = {};\r\n\r\ntype DispatchProps = {\r\n    onChange: (e: any) => void;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nclass EupatiCheckbox extends React.Component<Props, OwnState> {\r\n\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.returnProperIconType = this.returnProperIconType.bind(this);\r\n    }\r\n\r\n    returnProperIconType(icon: any) {\r\n        return icon as IconProp;\r\n    }\r\n\r\n    render() {\r\n\r\n        let btnComponent: any;\r\n\r\n        btnComponent = (\r\n            <Form.Group>\r\n                <label className=\"form-check-container\">{this.props.text}\r\n                    <input\r\n                        id={this.props.fieldName}\r\n                        className='form-check-input'\r\n                        type=\"checkbox\"\r\n                        checked={this.props.value}\r\n                        onChange={(e: any) => this.props.onChange(e)}\r\n                    />\r\n                    <span className=\"form-check-checkmark\"></span>\r\n                </label>\r\n\r\n            </Form.Group>\r\n        );\r\n\r\n        return (\r\n            <>\r\n                {btnComponent}\r\n                {!!this.props.errorMsg &&\r\n                    <span className='text-danger'>{this.props.errorMsg}</span>\r\n                }\r\n            </>\r\n        );\r\n    }\r\n}\r\n\r\nexport default EupatiCheckbox;","\r\nimport React from \"react\";\r\nimport { Button, Form } from \"react-bootstrap\";\r\nimport { Controller, useForm } from 'react-hook-form';\r\nimport { Rules, Messages } from \"../../../../common/helpers\";\r\nimport { useHistory } from \"react-router\";\r\nimport EupatiSelect from \"../../../../common/static/select-menu\";\r\nimport EupatiDiseaseAsyncSelect from \"../../../../common/static/async-select-menu\";\r\nimport EupatiCheckbox from \"../../../../common/static/checkbox-toggle\";\r\nimport { DiseaseInfo, Project } from \"../../../../common/models/main-models\";\r\nimport { LookUpOptions } from \"../../../../common/models/input-models\";\r\nimport { toast } from 'react-toastify';\r\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faInfoCircle } from '@fortawesome/fontawesome-free-solid';\r\nimport ReactTooltip from 'react-tooltip';\r\n\r\ntype OwnProps = {\r\n    project: Project,\r\n    isUserReal: boolean\r\n};\r\n\r\ntype DispatchProps = {\r\n    setProject: (project: Project) => void;\r\n    returnProperDefaultValue: (val: any) => any;\r\n    showPatientsAdditionalInfoSection: () => void;\r\n    returnProperIconType: (icon: any) => IconProp;\r\n    findLookUpData: (lookUpDataType?: string) => LookUpOptions[] | null;\r\n    prevPage: () => void;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\ntype FieldsProps = {\r\n    countries: string[],\r\n    languages: string[],\r\n    diseases: DiseaseInfo[],\r\n    noDiseaseExpertiseRequired: boolean;\r\n    searchDiseaseTherapeuticArea: boolean;\r\n};\r\n\r\nconst CUSTOM_SPAN_STYLES = ({\r\n    boldFont: {\r\n        fontWeight: 600\r\n    }\r\n});\r\nexport default function PatientsDiseaseInfo(props: Props) {\r\n\r\n    const history = useHistory();\r\n\r\n    const { handleSubmit, control, watch, formState: { errors } } = useForm();\r\n\r\n    const fieldsData = {\r\n        countries: watch(\"countries\") as string[],\r\n        languages: watch(\"languages\") as string[],\r\n        diseases: watch(\"diseases\") as DiseaseInfo[],\r\n        noDiseaseExpertiseRequired: watch(\"noDiseaseExpertiseRequired\") as boolean,\r\n        searchDiseaseTherapeuticArea: watch(\"searchDiseaseTherapeuticArea\") as boolean\r\n    } as FieldsProps;\r\n\r\n    const onSubmit = (data: any) => {\r\n        if (!props.isUserReal) {\r\n            toast.error(Messages.FAIL_AUTH_MSG);\r\n            return history.push('/');\r\n        }\r\n\r\n        const updatedProject = Object.assign(props.project, data);\r\n        props.setProject(updatedProject);\r\n        props.showPatientsAdditionalInfoSection();\r\n    }\r\n\r\n    const onBackHandler = () => {\r\n        if (!props.isUserReal) {\r\n            toast.error(Messages.FAIL_AUTH_MSG);\r\n            return history.push('/');\r\n        }\r\n\r\n        if (adjustFieldsValues() === 0) {\r\n            const updatedProject = Object.assign(props.project, fieldsData);\r\n            props.setProject(updatedProject);\r\n        }\r\n        props.prevPage();\r\n    }\r\n\r\n    const adjustFieldsValues = () => {\r\n        if (fieldsData.countries === undefined &&\r\n            fieldsData.languages === undefined &&\r\n            fieldsData.diseases === undefined &&\r\n            fieldsData.noDiseaseExpertiseRequired === undefined &&\r\n            fieldsData.searchDiseaseTherapeuticArea === undefined) {\r\n            return 1;\r\n        }\r\n\r\n        if (fieldsData.countries === undefined &&\r\n            props.project.countries !== undefined) {\r\n            fieldsData.countries = [...props.project.countries];\r\n        }\r\n\r\n        if (fieldsData.languages === undefined &&\r\n            props.project.languages !== undefined) {\r\n            fieldsData.languages = [...props.project.languages];\r\n        }\r\n\r\n        if (fieldsData.diseases === undefined &&\r\n            props.project.diseases !== undefined) {\r\n            fieldsData.diseases = [...props.project.diseases];\r\n        }\r\n\r\n        if (fieldsData.noDiseaseExpertiseRequired === undefined &&\r\n            props.project.noDiseaseExpertiseRequired !== undefined) {\r\n            fieldsData.noDiseaseExpertiseRequired = props.project.noDiseaseExpertiseRequired;\r\n        }\r\n\r\n        if (fieldsData.searchDiseaseTherapeuticArea === undefined &&\r\n            props.project.searchDiseaseTherapeuticArea !== undefined) {\r\n            fieldsData.searchDiseaseTherapeuticArea = props.project.searchDiseaseTherapeuticArea;\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    const returnProperIconType = (icon: any) => {\r\n        return icon as IconProp;\r\n    }\r\n\r\n    const toggleDiseaseClarificationField = () => {\r\n        if (fieldsData.diseases === undefined || fieldsData.diseases === null) {\r\n            return false;\r\n        }\r\n        else if (fieldsData.diseases.length === 0) {\r\n            return false;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    return (\r\n        <Form className='pt' onSubmit={handleSubmit(onSubmit)}>\r\n            <Form.Group className='pt-info'>\r\n                <Form.Group className='lcolumn'>\r\n\r\n                    <Form.Group id='pt-ctrys' className='pt-info-field mb-5'>\r\n                        <Form.Label>Countries</Form.Label>\r\n                        <FontAwesomeIcon data-tip data-for='countriesInfo' icon={returnProperIconType(faInfoCircle)} />\r\n                        <ReactTooltip id='countriesInfo'>\r\n                            <span>Country(ies) where relevant patient engagement experience.</span>\r\n                        </ReactTooltip>\r\n                        <FontAwesomeIcon data-tip data-for='countriesControlInfo' icon={returnProperIconType(faInfoCircle)} />\r\n                        <ReactTooltip\r\n                            id='countriesControlInfo'\r\n                            multiline={true}>\r\n                            <span>\r\n                                It is possible to select multiple countries or continents.\r\n                                <br />\r\n                                You can achive that by typing their names in the input field.\r\n                                <br />\r\n                                Moreover, you can also pick them from the dropdown menu.\r\n                                <br />\r\n                            </span>\r\n                        </ReactTooltip>\r\n                        <Controller\r\n                            name='countries'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.countries)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiSelect\r\n                                    {...{\r\n                                        ...field,\r\n                                        values: props.findLookUpData('countryWithContinents'),\r\n                                        errorMsg: errors?.countries?.message,\r\n                                        isAutocomplete: false\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='pt-langs' className='pt-info-field mb-5'>\r\n                        <Form.Label>Languages</Form.Label>\r\n                        <FontAwesomeIcon data-tip data-for='languagesControlInfo' icon={returnProperIconType(faInfoCircle)} />\r\n                        <ReactTooltip\r\n                            id='languagesControlInfo'\r\n                            multiline={true}>\r\n                            <span>\r\n                                It is possible to select multiple languages.\r\n                                <br />\r\n                                You can achive that by typing their names in the input field.\r\n                                <br />\r\n                                Moreover, you can also pick them from the dropdown menu.\r\n                                <br />\r\n                            </span>\r\n                        </ReactTooltip>\r\n                        <Controller\r\n                            name='languages'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.project.languages)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiSelect\r\n                                    {...{\r\n                                        ...field,\r\n                                        values: props.findLookUpData('language'),\r\n                                        errorMsg: errors?.languages?.message,\r\n                                        isAutocomplete: false\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='pt-diseaseName' className='pt-info-field mb-5'>\r\n                        <Form.Label style={{ display: 'flex', flexDirection: 'column' }}>\r\n                            <span style={{ ...CUSTOM_SPAN_STYLES.boldFont }}>\r\n                                Therapeutic Areas or Diseases\r\n                                <FontAwesomeIcon data-tip data-for='diseasesControlInfo' icon={returnProperIconType(faInfoCircle)} />\r\n                                <ReactTooltip\r\n                                    id='diseasesControlInfo'\r\n                                    multiline={true}>\r\n                                    <span>\r\n                                        It is possible to select multiple diseases.\r\n                                        <br />\r\n                                        You can achive that by typing their names in the input field.\r\n                                        <br />\r\n                                        Moreover, you can also pick them from the dropdown menu.\r\n                                        <br />\r\n                                    </span>\r\n                                </ReactTooltip>\r\n                            </span>\r\n                            <span>\r\n                                <small style={{ fontSize: '11px' }}>\r\n                                    Diseases are listed according to the US National Library of Medicine.\r\n                                    &nbsp;You can find the controlled vocabulary, Medical Subject Headings (MEsH), <a href='https://meshb.nlm.nih.gov/search' target='_blank' >here.*</a>\r\n                                </small>\r\n                            </span>\r\n                        </Form.Label>\r\n\r\n                        <Controller\r\n                            name='diseases'\r\n                            control={control}\r\n                            defaultValue={props.project.diseases}\r\n                            rules={Rules.notRequired}\r\n                            render={({ field }) =>\r\n                                <EupatiDiseaseAsyncSelect\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.diseases?.message\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                        {toggleDiseaseClarificationField() === false ? (\r\n                            <Controller\r\n                                name='noDiseaseExpertiseRequired'\r\n                                control={control}\r\n                                defaultValue={props.project.noDiseaseExpertiseRequired}\r\n                                rules={Rules.notRequired}\r\n                                render={({ field }) =>\r\n                                    <EupatiCheckbox\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.noDiseaseExpertise?.message,\r\n                                            fieldName: 'noDiseaseExpertiseRequired',\r\n                                            text: 'No specific disease experience is required'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        ) : (\r\n                            <Controller\r\n                                name='searchDiseaseTherapeuticArea'\r\n                                control={control}\r\n                                defaultValue={props.project.searchDiseaseTherapeuticArea}\r\n                                rules={Rules.notRequired}\r\n                                render={({ field }) =>\r\n                                    <EupatiCheckbox\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.searchDiseaseTherapeuticArea?.message,\r\n                                            fieldName: 'searchDiseaseTherapeuticArea',\r\n                                            text: 'Match patients in the therapeutic area(s) as well(i.e. If Breast Cancer is selected, it would broaden the match to all Oncology experts).'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        )}\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='pt-btns' className='pt-info-field'>\r\n                        <Button className='bck' variant='secondary' onClick={onBackHandler} >Back</Button>\r\n                        <Button className='nxt' variant='primary' type='submit'>Next</Button>\r\n                    </Form.Group>\r\n                </Form.Group>\r\n            </Form.Group>\r\n        </Form >\r\n    )\r\n}","import { IconProp } from '@fortawesome/fontawesome-svg-core';\r\nimport React, { useState } from 'react';\r\nimport { LookUpOptions } from '../../../../common/models/input-models';\r\nimport { Project } from '../../../../common/models/main-models';\r\nimport PatientsAdditionalInfo from './additional';\r\nimport PatientsDiseaseInfo from './disease';\r\n\r\ntype OwnProps = {\r\n    project: Project,\r\n    isUserReal: boolean,\r\n    showSecondSubComponent: boolean\r\n};\r\n\r\ntype DispatchProps = {\r\n    prevPage: () => void;\r\n    nextPage: () => void;\r\n    setProject: (project: Project) => void;\r\n    setIsUserReal: (token: string) => void;\r\n    submitProject: (project: Project) => void;\r\n    returnProperDefaultValue: (val: any) => any;\r\n    findLookUpData: (lookUpDataType?: string) => LookUpOptions[] | null;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nexport default function PatientInfo(props: Props) {\r\n    const [nextBtnClicked, setNextBtnClicked] = useState<boolean>(props.showSecondSubComponent);\r\n\r\n    const toggleSectionVisibility = () => {\r\n        setNextBtnClicked(!nextBtnClicked);\r\n        //window.scrollTo(0, 0);\r\n    }\r\n\r\n    function returnProperIconType(icon: any) {\r\n        return icon as IconProp;\r\n    }\r\n\r\n    return (\r\n        <div style={{ margin: '0 0 7.5rem 0' }}>\r\n\r\n            {nextBtnClicked &&\r\n                <PatientsDiseaseInfo\r\n                    {...{\r\n                        project: props.project,\r\n                        setProject: props.setProject,\r\n                        returnProperDefaultValue: props.returnProperDefaultValue,\r\n                        showPatientsAdditionalInfoSection: toggleSectionVisibility,\r\n                        isUserReal: props.isUserReal,\r\n                        returnProperIconType: returnProperIconType,\r\n                        findLookUpData: props.findLookUpData,\r\n                        prevPage: props.prevPage\r\n                    }}\r\n                />\r\n            }\r\n\r\n            {!nextBtnClicked &&\r\n                <PatientsAdditionalInfo\r\n                    {...{\r\n                        project: props.project,\r\n                        submitProject: props.submitProject,\r\n                        nextPage: props.nextPage,\r\n                        setProject: props.setProject,\r\n                        hidePatientsAdditionalInfoSection: toggleSectionVisibility,\r\n                        returnProperDefaultValue: props.returnProperDefaultValue,\r\n                        isUserReal: props.isUserReal,\r\n                        findLookUpData: props.findLookUpData\r\n                    }}\r\n                />\r\n            }\r\n        </div>\r\n    )\r\n}","import * as React from 'react';\r\nimport { Form } from 'react-bootstrap';\r\nimport { NavLink } from 'react-router-dom';\r\n\r\ntype OwnProps = {};\r\n\r\nexport type DispatchProps = {};\r\n\r\ntype Props = {} & DispatchProps & OwnProps;\r\n\r\ntype OwnState = {};\r\n\r\nexport default class EupatiConfirmPage extends React.Component<Props, OwnState> {\r\n    render() {\r\n        return (\r\n            <div style={{ marginTop: '5rem' }}>\r\n                <Form.Group className='confirm-page-wrapper'>\r\n                    <h2>Thanks for your submission!</h2>\r\n                    <h4>We will contact you soon.</h4>\r\n                    <li className='nav-item'>\r\n                        <NavLink className='confirm-page-btn nav-link' to='/' style={{ color: '#fff' }}>Back To EUPATI</NavLink>\r\n                    </li>\r\n                </Form.Group>\r\n            </div>\r\n        );\r\n    }\r\n}","import * as React from 'react';\r\nimport { emptyProject, State } from '../model';\r\nimport '../style.scss';\r\nimport { Project } from '../../../common/models/main-models';\r\nimport EupatiLoader from '../../../common/static/loading-animation/loader';\r\nimport ProjectInfo from './project-info';\r\nimport ResearcherInfo from './researcher-info';\r\nimport PatientInfo from './patient-info';\r\nimport EupatiConfirmPage from '../../../common/static/confirm-page';\r\nimport { GoogleReCaptcha } from 'react-google-recaptcha-v3';\r\nimport { Form } from 'react-bootstrap';\r\nimport { RouteComponentProps } from '@reach/router';\r\nimport { INVALID_PRICING_DATA } from '../../../common/helpers/messages';\r\nimport { toast } from 'react-toastify';\r\n\r\ntype OwnProps = {};\r\n\r\nexport type DispatchProps = {\r\n\tsetProject: (project: Project) => void;\r\n\tsetLookUpData: () => void;\r\n\tsubmitNewProject: (project: Project) => void;\r\n\tsetIsUserReal: (token: string) => void;\r\n};\r\n\r\ntype Props = State & DispatchProps & OwnProps & RouteComponentProps<{ location: { state: { price: number, plan: string, package: string, paymentMethod: string } } }>;\r\n\r\ntype OwnState = {\r\n\tshowComponentByIndex: number;\r\n\tshowSecondSubComponent: boolean;\r\n};\r\n\r\nclass ComponentRoot extends React.Component<Props, OwnState> {\r\n\r\n\tconstructor(props: any) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tshowComponentByIndex: 0,\r\n\t\t\tshowSecondSubComponent: true\t// when this is \"true\" on render it will show the first subcomponent (ResearcherInfo --> PersonalInfo).\r\n\t\t}\r\n\r\n\t\tthis.submitProject = this.submitProject.bind(this);\r\n\t\tthis.nextPageHandler = this.nextPageHandler.bind(this);\r\n\t\tthis.previousPageHandler = this.previousPageHandler.bind(this);\r\n\t\tthis.findLookUpData = this.findLookUpData.bind(this);\r\n\t\tthis.returnProperDefaultValue = this.returnProperDefaultValue.bind(this);\r\n\t\tthis.returnProperLookUpData = this.returnProperLookUpData.bind(this);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tconst historyState = this.props.location?.state;\r\n\t\tif (historyState === undefined || historyState.price < 0 ||\r\n\t\t\thistoryState.package === '' || historyState.paymentMethod === '') {\r\n\t\t\ttoast.error(INVALID_PRICING_DATA);\r\n\t\t\twindow.location.href = '/pricing';\r\n\t\t}\r\n\t\tconst initialProjectData = Object.assign(emptyProject, { ...historyState });\r\n\t\tthis.props.setLookUpData();\r\n\t\tthis.props.setProject(initialProjectData);\r\n\t}\r\n\r\n\tsubmitProject() {\r\n\t\tthis.props.submitNewProject(this.props.project);\r\n\t}\r\n\r\n\tnextPageHandler() {\r\n\t\tif (this.state.showComponentByIndex !== 3) {\r\n\t\t\tthis.setState(prevState => ({\r\n\t\t\t\tshowComponentByIndex: prevState.showComponentByIndex + 1,\r\n\t\t\t\tshowSecondSubComponent: true\r\n\t\t\t}));\r\n\t\t}\r\n\t\t//window.scrollTo(0, 0);\r\n\t}\r\n\r\n\tpreviousPageHandler() {\r\n\t\tif (this.state.showComponentByIndex !== 0) {\r\n\t\t\tthis.setState(prevState => ({\r\n\t\t\t\tshowComponentByIndex: prevState.showComponentByIndex - 1,\r\n\t\t\t\tshowSecondSubComponent: false\r\n\t\t\t}));\r\n\t\t}\r\n\t\t//window.scrollTo(0, 0);\r\n\t}\r\n\r\n\tfindLookUpData(lookUpDataType?: string) {\r\n\t\tif (this.props.lookUpData &&\r\n\t\t\tthis.props.lookUpData.length > 0) {\r\n\t\t\treturn this.props.lookUpData?.filter((x: any) => x.name == lookUpDataType)[0]?.data;\r\n\t\t}\r\n\r\n\t\treturn [];\r\n\t}\r\n\r\n\treturnProperDefaultValue(val: any) {\r\n\t\treturn val ? val : '';\r\n\t}\r\n\r\n\treturnProperLookUpData(dataType: any) {\r\n\t\treturn typeof dataType !== 'undefined' ? this.findLookUpData(dataType) : null\r\n\t}\r\n\r\n\trender() {\r\n\r\n\t\tlet mainComponent: any;\r\n\r\n\t\tlet loadingComponent = (\r\n\t\t\t<div className='loader-wrapper'>\r\n\t\t\t\t<EupatiLoader />\r\n\t\t\t</div>\r\n\t\t);\r\n\r\n\t\tconst props = {\r\n\t\t\tproject: this.props.project,\r\n\t\t\tlookUpData: this.props.lookUpData,\r\n\t\t\tisUserReal: this.props.isUserReal,\r\n\t\t\tshowSecondSubComponent: this.state.showSecondSubComponent,\r\n\t\t\tsetProject: this.props.setProject,\r\n\t\t\tnextPage: this.nextPageHandler,\r\n\t\t\tprevPage: this.previousPageHandler,\r\n\t\t\tsubmitProject: this.props.submitNewProject,\r\n\t\t\tfindLookUpData: this.findLookUpData,\r\n\t\t\treturnProperDefaultValue: this.returnProperDefaultValue,\r\n\t\t\tsetIsUserReal: this.props.setIsUserReal,\r\n\t\t\treturnProperLookUpData: this.returnProperLookUpData\r\n\t\t};\r\n\r\n\t\tconst spanStyles = {\r\n\t\t\tfontWeight: 'bolder',\r\n\t\t\t//textDecoration: 'underline',\r\n\t\t\tbackgroundColor: '#00749F',\r\n\t\t\tborderRadius: '30px',\r\n\t\t\tcolor: '#fff'\r\n\t\t} as any;\r\n\r\n\t\tif (this.props.isLoading) {\r\n\t\t\tmainComponent = loadingComponent;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tmainComponent = (\r\n\t\t\t\t<>\r\n\t\t\t\t\t<GoogleReCaptcha action='newProjectPage' onVerify={token => this.props.setIsUserReal(token)} />\r\n\t\t\t\t\t<h2 className='heading' style={this.state.showComponentByIndex === 3 ? { display: 'none' } : {}}>Project Request</h2>\r\n\t\t\t\t\t{this.state.showComponentByIndex !== 3 &&\r\n\t\t\t\t\t\t<Form.Group className='titles-wrapper'>\r\n\t\t\t\t\t\t\t<div className='titles'>\r\n\t\t\t\t\t\t\t\t<div className='titles-title' style={this.state.showComponentByIndex === 0 ? { ...spanStyles } : {}}>\r\n\t\t\t\t\t\t\t\t\t<span >1. Personal info</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div className='titles-title' style={this.state.showComponentByIndex === 1 ? { ...spanStyles } : {}}>\r\n\t\t\t\t\t\t\t\t\t<span >2. Project data</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div className='titles-title' style={this.state.showComponentByIndex === 2 ? { ...spanStyles } : {}}>\r\n\t\t\t\t\t\t\t\t\t<span >3. EUPATI Experts</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</Form.Group>\r\n\t\t\t\t\t}\r\n\t\t\t\t\t{this.state.showComponentByIndex === 0 && <ResearcherInfo {...props} />}\r\n\t\t\t\t\t{this.state.showComponentByIndex === 1 && <ProjectInfo {...props} />}\r\n\t\t\t\t\t{this.state.showComponentByIndex === 2 && <PatientInfo {...props} />}\r\n\t\t\t\t\t{this.state.showComponentByIndex === 3 && <EupatiConfirmPage />}\r\n\t\t\t\t</>\r\n\t\t\t)\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t{mainComponent}\r\n\t\t\t</>\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default ComponentRoot;","import { default as RootComponent, DispatchProps } from '../components/component-root';\r\nimport * as Actions from '../actions';\r\nimport * as Constants from '../constants';\r\nimport { State } from '../model';\r\nimport { connect } from 'react-redux';\r\nimport { Project } from '../../../common/models/main-models';\r\n\r\nexport function mapStateToProps(globalState: any) {\r\n    let name = Constants.NAME;\r\n    let pageState = globalState[name] as State;\r\n    return pageState;\r\n}\r\n\r\nexport function mapDispatchToProps(dispatch: any) {\r\n    return {\r\n        setProject: (project: Project) => dispatch(Actions.setProject(project)),\r\n        setLookUpData: () => dispatch(Actions.getLookUpDataAsync()),\r\n        submitNewProject: (project: Project) => dispatch(Actions.saveNewProjectAsync(project)),\r\n        setIsUserReal: (token: string) => dispatch(Actions.verifyUserTokenAsync(token))\r\n    } as DispatchProps;\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RootComponent);","import { LookUpData, MeshData } from '../../common/models/input-models';\r\nimport { Project } from '../../common/models/main-models';\r\nimport * as t from './actionTypes';\r\nimport { emptyProject, State } from './model';\r\n\r\nconst initialState: State = {\r\n    project: emptyProject,\r\n    isLoading: false,\r\n    lookUpData: [],\r\n    isUserReal: true\r\n};\r\n\r\nexport default (state = initialState, action: any): State => {\r\n    switch (action.type) {\r\n        case t.SET_PROJECTS_LOADING:\r\n            return setProjectsLoading(state, action.payload);\r\n        case t.SET_PROJECT:\r\n            return setProject(state, action.payload);\r\n        case t.SET_LOOKUP_DATA:\r\n            return setLookUpData(state, action.payload);\r\n        case t.SET_IS_USER_REAL:\r\n            return setIsUserReal(state, action.payload);\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nconst setIsUserReal = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        setIsUserReal: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setProjectsLoading = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setProject = (state: State, val: Project): State => {\r\n    let newState = {\r\n        ...state,\r\n        project: { ...val }\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setLookUpData = (state: State, val: LookUpData[]): State => {\r\n    let newState = {\r\n        ...state,\r\n        lookUpData: [...val]\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n","import * as Actions from './actions';\r\nimport * as Components from './components/index';\r\nimport * as Containers from './containers/index';\r\nimport * as Constants from './constants';\r\nimport Reducer from './reducer';\r\n\r\nexport default {\r\n    actions: Actions,\r\n    components: Components,\r\n    containers: Containers,\r\n    constants: Constants,\r\n    reducer: Reducer\r\n};\r\n\r\nexport const Root = Containers.ComponentRoot;","// constants.ts\r\nexport const NAME = 'patientProfile';","// actionTypes.js\r\nimport { NAME } from './constants';\r\n\r\nexport const SET_PATIENTS_LOADING = `${NAME}/SET_PATIENTS_LOADING`;\r\n\r\nexport const SET_LOOKUP_DATA = `${NAME}/SET_LOOKUP_DATA`;\r\n\r\nexport const SET_PATIENT_INFO = `${NAME}/SET_PATIENT_INFO`;\r\n\r\nexport const SET_PATIENT_DATA_LOADING = `${NAME}/SET_PATIENT_DATA_LOADING`;","// model.js\r\n// This is the model of our module state (e.g. return type of the reducer)\r\n\r\nimport { LookUpData, MeshData } from \"../../common/models/input-models\";\r\nimport { Patient } from \"../../common/models/main-models\";\r\n\r\nexport type State = {\r\n    patient: Patient;\r\n    isLoading: boolean;\r\n    lookUpData: LookUpData[];\r\n    isPatientDataLoaded: boolean;\r\n};\r\n\r\nexport const defaultPatientInfo = {\r\n    id: '',\r\n    firstName: '',\r\n    lastName: '',\r\n    phoneNumber: '',\r\n    email: '',\r\n    birthYear: undefined,\r\n    genderTypeId: 0,\r\n    countryId: 0,\r\n    languages: [],\r\n    countriesWithExperience: [],\r\n    isPOAffiliated: false,\r\n    patientOrganisation: '',\r\n\r\n    diseases: [],\r\n    noDiseaseExpertise: false,\r\n    // diseaseName: '',\r\n    // diseaseMeshId: '',\r\n    // diseaseTAName: '',\r\n    // diseaseTAMeshId: '',\r\n    patientExperienceId: 0,\r\n    patientExpertises: [],\r\n    projectTypeExperiences: [],\r\n    projectTypeExperiencesDescription: '',\r\n    otherInformation: '',\r\n    patientExpertiseDescription: '',\r\n    genderTypeDescription: '',\r\n    organisationPreferenceDescription: '',\r\n    projectPreferenceDescription: '',\r\n\r\n    isEligibleForCompensation: false,\r\n    isAvailableForNoCompensation: false,\r\n    projectPreferences: [],\r\n    organisationPreferences: [],\r\n    activityPreferenceId: 0,\r\n\r\n    matchedProjects: [],\r\n    confirmedProjects: [],\r\n    isBannedFromSearch: false,\r\n    isGDPRConsentGiven: false,\r\n} as Patient;","// matching/actions.js\r\nimport { LookUpData } from '../../common/models/input-models';\r\nimport { Patient } from '../../common/models/main-models';\r\nimport DataSvc from '../../common/services/data-svc';\r\nimport * as t from './actionTypes';\r\nimport { defaultPatientInfo } from './model';\r\n\r\nexport const setPatientLoading = (isLoading: boolean) => ({\r\n    type: t.SET_PATIENTS_LOADING,\r\n    payload: isLoading,\r\n});\r\n\r\nexport const setLookUpData = (data: LookUpData[]) => ({\r\n    type: t.SET_LOOKUP_DATA,\r\n    payload: data\r\n});\r\n\r\nexport const setPatientInfo = (patient: Patient) => ({\r\n    type: t.SET_PATIENT_INFO,\r\n    payload: patient\r\n});\r\n\r\nexport const setPatientDataLoading = (isPatientDataLoaded: boolean) => ({\r\n    type: t.SET_PATIENT_DATA_LOADING,\r\n    payload: isPatientDataLoaded\r\n});\r\n\r\nexport const getLookUpDataAsync = () => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setPatientLoading(true));\r\n        DataSvc.utilsSvc.getLookUpData().then(\r\n            (result: any) => {\r\n                dispatch(setLookUpData(result));\r\n                dispatch(setPatientLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        );\r\n    };\r\n};\r\n\r\nexport const updatePatientAsync = (patient: Patient) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setPatientLoading(true));\r\n        DataSvc.patientSvc.updatePatient(getRidOfIncorrectNullValues(patient)).then(\r\n            (result: any) => {\r\n                dispatch(setPatientInfo(result));\r\n                dispatch(setPatientLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const saveNewPatientAsync = (patient: Patient) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setPatientLoading(true));\r\n        DataSvc.patientSvc.savePatient(getRidOfIncorrectNullValues(patient)).then(\r\n            () => {\r\n                dispatch(setPatientInfo(defaultPatientInfo));   //  return to default state on submit\r\n                dispatch(setPatientLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const getPatientInfoByIdAsync = (patientId?: string) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setPatientDataLoading(true));\r\n        if (patientId) {\r\n            DataSvc.patientSvc.getPatientById(patientId).then(\r\n                (result: any) => {\r\n                    dispatch(setPatientInfo(result));\r\n                    dispatch(setPatientDataLoading(false));\r\n                },\r\n                (error) => { console.error(error); }\r\n            )\r\n        }\r\n        else {\r\n            dispatch(setPatientInfo(defaultPatientInfo));\r\n            dispatch(setPatientDataLoading(false));\r\n        }\r\n    };\r\n};\r\n\r\nexport const getPatientInfoByUserIdAsync = (userId?: string) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setPatientDataLoading(true));\r\n        if (userId) {\r\n            DataSvc.patientSvc.getPatientByUserId(userId).then(\r\n                (result: any) => {\r\n                    dispatch(setPatientInfo(result));\r\n                    dispatch(setPatientDataLoading(false));\r\n                },\r\n                (error) => { console.error(error); }\r\n            )\r\n        }\r\n    }\r\n}\r\n\r\nfunction getRidOfIncorrectNullValues(object: any) {\r\n    var updatedPatientObject = { ...object };\r\n    if (updatedPatientObject.isAvailableForNoCompensation === 'null') {\r\n        updatedPatientObject.isAvailableForNoCompensation = null;\r\n    }\r\n    if (updatedPatientObject.isEligibleForCompensation === 'null') {\r\n        updatedPatientObject.isEligibleForCompensation = null;\r\n    }\r\n    return updatedPatientObject;\r\n}","import React from \"react\";\r\nimport { Button, Form } from \"react-bootstrap\";\r\nimport { useForm, Controller } from \"react-hook-form\";\r\nimport { Rules } from \"../../../../common/helpers\";\r\nimport EupatiTextbox from \"../../../../common/static/textbox\";\r\nimport EupatiEmailbox from \"../../../../common/static/emailbox\";\r\nimport { Patient } from \"../../../../common/models/main-models\";\r\n\r\ntype OwnProps = {\r\n    patient: Patient\r\n};\r\n\r\ntype DispatchProps = {\r\n    setPatientInfo: (patient: Patient) => void;\r\n    showPatientSpecificInfoSection: () => void;\r\n    returnProperDefaultValue: (val: any) => any;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nexport default function PatientGenericInfo(props: Props) {\r\n\r\n    const { handleSubmit, control, watch, formState: { errors } } = useForm();\r\n\r\n    const onSubmit = (data: any) => {\r\n        const editedPatientInfo = Object.assign(props.patient, data);\r\n        props.setPatientInfo(editedPatientInfo);\r\n        props.showPatientSpecificInfoSection();\r\n    }\r\n\r\n    return (\r\n        <Form className='profile' onSubmit={handleSubmit(onSubmit)}>\r\n            <Form.Group className='profile-info'>\r\n                <Form.Group className='lcolumn'>\r\n\r\n                    <Form.Group id='pt-fname' className='profile-info-field mb-3'>\r\n                        <Form.Label>First name</Form.Label>\r\n                        <Controller\r\n                            name='firstName'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.patient.firstName)}\r\n                            rules={Rules.requiredMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiTextbox\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.firstName?.message,\r\n                                        placeholder: 'Please type first name'\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='pt-lname' className='profile-info-field mb-3'>\r\n                        <Form.Label>Surname</Form.Label>\r\n                        <Controller\r\n                            name='lastName'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.patient.lastName)}\r\n                            rules={Rules.requiredMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiTextbox\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.lastName?.message,\r\n                                        placeholder: 'Please type last name'\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='pt-tel' className='profile-info-field mb-3'>\r\n                        <Form.Label>Phone</Form.Label>\r\n                        <Controller\r\n                            name='phoneNumber'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.patient.phoneNumber)}\r\n                            rules={Rules.requiredMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiTextbox\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.phoneNumber?.message,\r\n                                        placeholder: 'Please type phone number'\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='pt-year' className='profile-info-field mb-3'>\r\n                        <Form.Label>Year of birth</Form.Label>\r\n                        <Controller\r\n                            name='birthYear'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.patient.birthYear)}\r\n                            rules={Rules.requiredMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiTextbox\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.birthYear?.message,\r\n                                        fieldType: 'number',\r\n                                        placeholder: 'Please type year of birth'\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='pt-email' className='profile-info-field mb-3'>\r\n                        <Form.Label>Email</Form.Label>\r\n                        <Controller\r\n                            name='email'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.patient.email)}\r\n                            rules={Rules.requiredMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiEmailbox\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.email?.message\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n\r\n                    <Form.Group id='pt-btns'>\r\n                        <Button className='bck' variant='secondary' type='submit' style={{ visibility: 'hidden' }}>Back</Button>\r\n                        <Button className='nxt' variant='primary' type='submit'>Next</Button>\r\n                    </Form.Group>\r\n\r\n                </Form.Group>\r\n            </Form.Group>\r\n        </Form>\r\n    )\r\n}","import React from \"react\";\r\nimport { Button, Form } from \"react-bootstrap\";\r\nimport { useForm, Controller } from \"react-hook-form\";\r\nimport { Rules } from \"../../../../common/helpers\";\r\nimport EupatiDropdown from \"../../../../common/static/dropdown\";\r\nimport EupatiSelect from \"../../../../common/static/select-menu\";\r\nimport EupatiTextbox from \"../../../../common/static/textbox\";\r\nimport EupatiNonCMSToggleBtn from \"../../../../common/static/toggle-btn-nonCMS\";\r\nimport EupatiToggleBtn from \"../../../../common/static/toggle-btn\";\r\nimport { Patient } from \"../../../../common/models/main-models\";\r\nimport { LookUpOptions } from \"../../../../common/models/input-models\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faInfoCircle } from '@fortawesome/fontawesome-free-solid';\r\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\r\nimport ReactTooltip from 'react-tooltip';\r\n\r\ntype OwnProps = {\r\n    patient: Patient\r\n};\r\n\r\ntype DispatchProps = {\r\n    nextPage: () => void;\r\n    setPatientInfo: (patient: Patient) => void;\r\n    hidePatientSpecificInfoSection: () => void;\r\n    returnProperDefaultValue: (val: any) => any;\r\n    findLookUpData: (lookUpDataType?: string) => LookUpOptions[] | null;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\ntype FieldProps = {\r\n    countryId?: number,\r\n    languages: string[],\r\n    countriesWithExperience: string[],\r\n    genderTypeId?: number,\r\n    genderTypeDescription: string,\r\n    isPOAffiliated?: boolean,\r\n    patientOrganisation: string\r\n};\r\n\r\nexport default function PatientSpecificInfo(props: Props) {\r\n\r\n    const { handleSubmit, control, watch, formState: { errors } } = useForm();\r\n\r\n    const fieldsData = {\r\n        countryId: watch(\"countryId\") as number | undefined,\r\n        languages: watch(\"languages\") as string[],\r\n        countriesWithExperience: watch(\"countriesWithExperience\") as string[],\r\n        genderTypeId: watch(\"genderTypeId\") as number | undefined,\r\n        genderTypeDescription: watch(\"genderTypeDescription\") as string,\r\n        isPOAffiliated: watch(\"isPOAffiliated\") as boolean | undefined,\r\n        patientOrganisation: watch(\"patientOrganisation\") as string\r\n    } as FieldProps;\r\n\r\n    const onSubmit = (data: any) => {\r\n        const editedPatientInfo = Object.assign(props.patient, data);\r\n        props.setPatientInfo(editedPatientInfo);\r\n        props.nextPage();\r\n    }\r\n\r\n    const onBackHandler = () => {\r\n        if (adjustFieldsValues() === 0) {\r\n            const editedPatientInfo = Object.assign(props.patient, fieldsData);\r\n            props.setPatientInfo(editedPatientInfo);\r\n        }\r\n        props.hidePatientSpecificInfoSection();\r\n    }\r\n\r\n    const returnProperIconType = (icon: any) => {\r\n        return icon as IconProp;\r\n    }\r\n\r\n    const fieldIsPOAffiliatedToggle = () => {\r\n        if (fieldsData?.isPOAffiliated?.toString() === \"true\") {\r\n            return true;\r\n        }\r\n        else if (fieldsData?.isPOAffiliated?.toString() === \"false\") {\r\n            return false;\r\n        }\r\n\r\n        if (props.patient.isPOAffiliated !== undefined &&\r\n            props.patient.isPOAffiliated !== null) {\r\n            if (props?.patient?.isPOAffiliated.toString() === \"true\") {\r\n                return true;\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    const fieldGenderTypeToggle = () => {\r\n        const otherGenderType = props.findLookUpData(\"genderType\")?.find(gt => gt.name.toLowerCase().includes('other'));\r\n        if (fieldsData.genderTypeId !== undefined && fieldsData.genderTypeId !== null) {\r\n            return otherGenderType?.id === fieldsData.genderTypeId ? true : false;\r\n        }\r\n        if (props.patient.genderTypeId !== undefined && props.patient.genderTypeId !== null) {\r\n            return otherGenderType?.id.toString() === props.patient.genderTypeId.toString() ? true : false;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    const checkNullOrUndefined = (val: any) => {\r\n        return typeof val === undefined || val === null || val === 0 ? true : false;\r\n    }\r\n\r\n    const adjustFieldsValues = () => {\r\n        if (fieldsData.countryId === undefined &&\r\n            fieldsData.languages === undefined &&\r\n            fieldsData.countriesWithExperience === undefined &&\r\n            fieldsData.genderTypeId === undefined &&\r\n            fieldsData.genderTypeDescription === undefined &&\r\n            fieldsData.isPOAffiliated === undefined &&\r\n            fieldsData.patientOrganisation === undefined) {\r\n            return 1;\r\n        }\r\n\r\n        if (fieldsData.countryId === undefined &&\r\n            props.patient.countryId !== undefined) {\r\n            fieldsData.countryId = props.patient.countryId;\r\n        }\r\n\r\n        if (fieldsData.languages === undefined &&\r\n            props.patient.languages !== undefined) {\r\n            fieldsData.languages = [...props.patient.languages];\r\n        }\r\n\r\n        if (fieldsData.countriesWithExperience === undefined &&\r\n            props.patient.countriesWithExperience !== undefined) {\r\n            fieldsData.countriesWithExperience = [...props.patient.countriesWithExperience];\r\n        }\r\n\r\n        if (fieldsData.genderTypeId === undefined &&\r\n            props.patient.genderTypeId !== undefined) {\r\n            fieldsData.genderTypeId = props.patient.genderTypeId;\r\n        }\r\n\r\n        if (fieldsData.genderTypeDescription === undefined &&\r\n            props.patient.genderTypeDescription !== undefined) {\r\n            fieldsData.genderTypeDescription = props.patient.genderTypeDescription;\r\n        }\r\n\r\n        if (fieldsData.isPOAffiliated === undefined &&\r\n            props.patient.isPOAffiliated !== undefined) {\r\n            fieldsData.isPOAffiliated = props.patient.isPOAffiliated;\r\n        }\r\n\r\n        if (fieldsData.patientOrganisation === undefined &&\r\n            props.patient.patientOrganisation !== undefined) {\r\n            fieldsData.patientOrganisation = props.patient.patientOrganisation;\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    return (\r\n        <Form className='profile' onSubmit={handleSubmit(onSubmit)}>\r\n            <Form.Group className='profile-info'>\r\n                <Form.Group className='rcolumn'>\r\n\r\n                    <Form.Group id='pt-ctry' className='profile-info-field mb-4'>\r\n                        <Form.Label>Country of residence</Form.Label>\r\n                        <Controller\r\n                            name='countryId'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.patient.countryId)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiDropdown\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.countryId?.message,\r\n                                        values: props.findLookUpData('country'),\r\n                                        fieldName: 'countryId',\r\n                                        defaultOptionText: checkNullOrUndefined(props.patient.countryId) ? 'Please select country...' : undefined\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='pt-lang' className='profile-info-field mb-4'>\r\n                        <Form.Label>Languages</Form.Label>\r\n                        <FontAwesomeIcon data-tip data-for='languagesControlInfo' icon={returnProperIconType(faInfoCircle)} />\r\n                        <ReactTooltip\r\n                            id='languagesControlInfo'\r\n                            multiline={true}>\r\n                            <span>\r\n                                It is possible to select multiple languages.\r\n                                <br />\r\n                                You can achive that by typing their names in the input field.\r\n                                <br />\r\n                                Moreover, you can also pick them from the dropdown menu.\r\n                                <br />\r\n                            </span>\r\n                        </ReactTooltip>\r\n                        <Controller\r\n                            name='languages'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.patient.languages)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiSelect\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.languages?.message,\r\n                                        values: props.findLookUpData('language'),\r\n                                        placeholder: 'Select languages...',\r\n                                        isAutocomplete: false\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='pt-otherCtry' className='profile-info-field mb-4'>\r\n                        <Form.Label >Other country(ies) experience</Form.Label>\r\n                        <FontAwesomeIcon data-tip data-for='otherCtryInfo' icon={returnProperIconType(faInfoCircle)} />\r\n                        <ReactTooltip id='otherCtryInfo'>\r\n                            <span>Country(ies) in which you have experience relevant to patient engagement</span>\r\n                        </ReactTooltip>\r\n                        <FontAwesomeIcon data-tip data-for='otherCtryControlInfo' icon={returnProperIconType(faInfoCircle)} />\r\n                        <ReactTooltip\r\n                            id='otherCtryControlInfo'\r\n                            multiline={true}>\r\n                            <span>\r\n                                It is possible to select multiple countries or continents.\r\n                                <br />\r\n                                You can achive that by typing their names in the input field.\r\n                                <br />\r\n                                Moreover, you can also pick them from the dropdown menu.\r\n                                <br />\r\n                            </span>\r\n                        </ReactTooltip>\r\n                        <Controller\r\n                            name='countriesWithExperience'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.patient.countriesWithExperience)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiSelect\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.countriesWithExperience?.message,\r\n                                        values: props.findLookUpData('countryWithContinents'),\r\n                                        isAutocomplete: false\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='pt-gender' className='profile-info-field mb-4'>\r\n                        <Form.Label>Gender</Form.Label>\r\n                        <Controller\r\n                            name='genderTypeId'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.patient.genderTypeId)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiToggleBtn\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.genderTypeId?.message,\r\n                                        fieldName: 'genderTypeId',\r\n                                        values: props.findLookUpData('genderType')\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    {fieldGenderTypeToggle() &&\r\n                        <Form.Group id='pt-genderDescr' className='profile-info-field mb-4'>\r\n                            <Form.Label>Please specify the gender type</Form.Label>\r\n                            <Controller\r\n                                name='genderTypeDescription'\r\n                                control={control}\r\n                                defaultValue={props.returnProperDefaultValue(props.patient.genderTypeDescription)}\r\n                                rules={Rules.notRequired}\r\n                                render={({ field }) =>\r\n                                    <EupatiTextbox\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.genderTypeDescription?.message,\r\n                                            placeholder: 'Please specify gender type'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n                    }\r\n\r\n                    <div>\r\n                        <Form.Group id='pt-poa' className='profile-info-field mb-3'>\r\n                            <Form.Label>Affiliation to a patient organisation</Form.Label>\r\n                            <Controller\r\n                                name='isPOAffiliated'\r\n                                control={control}\r\n                                defaultValue={props.returnProperDefaultValue(props.patient.isPOAffiliated)}\r\n                                rules={Rules.selectOptionMessage}\r\n                                render={({ field }) =>\r\n                                    <EupatiNonCMSToggleBtn\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.isPOAffiliated?.message,\r\n                                            fieldName: 'isPOAffiliated',\r\n                                            isMoreThanTwoOptions: false\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n\r\n                        {fieldIsPOAffiliatedToggle() &&\r\n                            <Form.Group id='pt-org' className='profile-info-field mb-4'>\r\n                                <Form.Label>Patient organisation</Form.Label>\r\n                                <Controller\r\n                                    name='patientOrganisation'\r\n                                    control={control}\r\n                                    defaultValue={props.returnProperDefaultValue(props.patient.patientOrganisation)}\r\n                                    rules={Rules.requiredMessage}\r\n                                    render={({ field }) =>\r\n                                        <EupatiTextbox\r\n                                            {...{\r\n                                                ...field,\r\n                                                errorMsg: errors?.patientOrganisation?.message,\r\n                                                placeholder: 'Please type patient organisation'\r\n                                            }}\r\n                                        />\r\n                                    }\r\n                                />\r\n                            </Form.Group>\r\n                        }\r\n                    </div>\r\n\r\n                    <Form.Group id='pt-btns'>\r\n                        <Button className='bck' variant='secondary' type='submit' onClick={onBackHandler}>Back</Button>\r\n                        <Button className='nxt' variant='primary' type='submit'>Next</Button>\r\n                    </Form.Group>\r\n\r\n                </Form.Group>\r\n            </Form.Group>\r\n        </Form>\r\n    )\r\n}","import React, { useState } from \"react\";\r\nimport { LookUpData, LookUpOptions } from \"../../../../common/models/input-models\";\r\nimport { Patient } from \"../../../../common/models/main-models\";\r\nimport PatientGenericInfo from \"./generic\";\r\nimport PatientSpecificInfo from \"./specific\";\r\n\r\ntype OwnProps = {\r\n    patient: Patient,\r\n    lookUpData: LookUpData[],\r\n    showSecondSubComponent: boolean\r\n};\r\n\r\ntype DispatchProps = {\r\n    nextPage: () => void;\r\n    prevPage: () => void;\r\n    savePatient: (project: Patient) => void;\r\n    setPatientInfo: (project: Patient) => void;\r\n    returnProperDefaultValue: (val: any) => any;\r\n    findLookUpData: (lookUpDataType?: string) => LookUpOptions[] | null;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nexport default function PatientGeneralInfo(props: Props) {\r\n    const [nextBtnClicked, setNextBtnClicked] = useState<boolean>(props.showSecondSubComponent);\r\n\r\n    const toggleSectionVisibility = () => {\r\n        setNextBtnClicked(!nextBtnClicked);\r\n    }\r\n\r\n    return (\r\n        <div style={{ margin: '0 0 7.5rem 0' }}>\r\n\r\n            {nextBtnClicked &&\r\n                <PatientGenericInfo\r\n                    {...{\r\n                        ...props,\r\n                        showPatientSpecificInfoSection: toggleSectionVisibility\r\n                    }}\r\n                />\r\n            }\r\n\r\n            {!nextBtnClicked &&\r\n                <PatientSpecificInfo\r\n                    {...{\r\n                        ...props,\r\n                        hidePatientSpecificInfoSection: toggleSectionVisibility\r\n                    }}\r\n                />\r\n            }\r\n\r\n        </div>\r\n    );\r\n}","import React, { useState, useEffect } from \"react\";\r\nimport { Button, Form } from \"react-bootstrap\";\r\nimport { useForm, Controller } from \"react-hook-form\";\r\nimport EupatiDiseaseAsyncSelect from \"../../../../common/static/async-select-menu\";\r\nimport { Rules } from \"../../../../common/helpers\";\r\nimport EupatiToggleBtn from \"../../../../common/static/toggle-btn\";\r\nimport EupatiTextarea from \"../../../../common/static/textarea\";\r\nimport { DiseaseInfo, Patient } from \"../../../../common/models/main-models\";\r\nimport { LookUpOptions } from \"../../../../common/models/input-models\";\r\nimport EupatiCheckbox from \"../../../../common/static/checkbox-toggle\";\r\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faInfoCircle } from '@fortawesome/fontawesome-free-solid';\r\nimport ReactTooltip from 'react-tooltip';\r\n\r\ntype OwnProps = {\r\n    patient: Patient\r\n};\r\n\r\ntype DispatchProps = {\r\n    nextPage: () => void;\r\n    setPatientInfo: (patient: Patient) => void;\r\n    hidePatientsDiseaseExpInfo: () => void;\r\n    returnProperDefaultValue: (val: any) => any;\r\n    findLookUpData: (lookUpDataType?: string) => LookUpOptions[] | null;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\ntype FieldProps = {\r\n    diseases: DiseaseInfo[],\r\n    noDiseaseExpertise: boolean,\r\n    patientExperienceId: number,\r\n    otherInformation: string\r\n};\r\n\r\nconst CUSTOM_SPAN_STYLES = ({\r\n    boldFont: {\r\n        fontWeight: 600\r\n    }\r\n});\r\nexport default function PatientsDiseaseExpInfo(props: Props) {\r\n    const { handleSubmit, control, watch, formState: { errors } } = useForm();\r\n\r\n    const fieldsData = {\r\n        diseases: watch(\"diseases\") as DiseaseInfo[],\r\n        noDiseaseExpertise: watch(\"noDiseaseExpertise\") as boolean,\r\n        patientExperienceId: watch(\"patientExperienceId\") as number,\r\n        otherInformation: watch(\"otherInformation\") as string\r\n    } as FieldProps;\r\n\r\n    const onSubmit = (data: any) => {\r\n        const editedPatientInfo = Object.assign(props.patient, data);\r\n        props.setPatientInfo(editedPatientInfo);\r\n        props.nextPage();\r\n    }\r\n\r\n    function onBackHandler() {\r\n        if (adjustFieldsValues() === 0) {\r\n            const editedPatientInfo = Object.assign(props.patient, fieldsData);\r\n            props.setPatientInfo(editedPatientInfo);\r\n        }\r\n        props.hidePatientsDiseaseExpInfo();\r\n    }\r\n\r\n    const adjustFieldsValues = () => {\r\n        if (fieldsData.diseases === undefined &&\r\n            fieldsData.noDiseaseExpertise === undefined &&\r\n            fieldsData.patientExperienceId === undefined &&\r\n            fieldsData.otherInformation === undefined) {\r\n            return 1;   // if user hasn't changed anything\r\n        }\r\n\r\n        if (fieldsData.diseases === undefined &&\r\n            props.patient.diseases.length >= 0) {\r\n            fieldsData.diseases = [...props.patient.diseases];\r\n        }\r\n\r\n        if (fieldsData.noDiseaseExpertise === undefined &&\r\n            props.patient.noDiseaseExpertise !== undefined) {\r\n            fieldsData.noDiseaseExpertise = props.patient.noDiseaseExpertise;\r\n        }\r\n\r\n        if (fieldsData.otherInformation === undefined &&\r\n            props.patient.otherInformation !== undefined) {\r\n            fieldsData.otherInformation = props.patient.otherInformation;\r\n        }\r\n\r\n        if (fieldsData.patientExperienceId === undefined &&\r\n            props.patient.patientExperienceId !== undefined) {\r\n            fieldsData.patientExperienceId = props.patient.patientExperienceId;\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    const returnProperIconType = (icon: any) => {\r\n        return icon as IconProp;\r\n    }\r\n\r\n    return (\r\n        <Form className='experience' onSubmit={handleSubmit(onSubmit)}>\r\n            <Form.Group className='experience-info'>\r\n                <Form.Group className='rcolumn'>\r\n                    <Form.Group id='pt-disease-name' className='experience-info-field mb-3'>\r\n                        <Form.Label style={{ display: 'flex', flexDirection: 'column' }}>\r\n                            <span style={{ ...CUSTOM_SPAN_STYLES.boldFont }}>\r\n                                Disease experience\r\n                                <FontAwesomeIcon data-tip data-for='expDiseasesControlInfo' icon={returnProperIconType(faInfoCircle)} />\r\n                                <ReactTooltip\r\n                                    id='expDiseasesControlInfo'\r\n                                    multiline={true}\r\n                                >\r\n                                    <span>\r\n                                        It is possible to select multiple diseases.\r\n                                        <br />\r\n                                        You can achive that by typing their names in the input field.\r\n                                        <br />\r\n                                        Moreover, you can also pick them from the dropdown menu.\r\n                                        <br />\r\n                                    </span>\r\n                                </ReactTooltip>\r\n                            </span>\r\n                            <span>\r\n                                <small style={{ fontSize: '11px' }}>\r\n                                    Diseases are listed according to the US National Library of Medicine.\r\n                                    &nbsp;You can find the controlled vocabulary, Medical Subject Headings (MEsH), <a href='https://meshb.nlm.nih.gov/search' target='_blank' >here.*</a>\r\n                                </small>\r\n                            </span>\r\n                        </Form.Label>\r\n                        <Controller\r\n                            name='diseases'\r\n                            control={control}\r\n                            defaultValue={props?.patient?.diseases}\r\n                            rules={Rules.notRequired}\r\n                            render={({ field }) =>\r\n                                <EupatiDiseaseAsyncSelect\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.diseases?.message\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                        <Controller\r\n                            name='noDiseaseExpertise'\r\n                            control={control}\r\n                            defaultValue={props.patient.noDiseaseExpertise}\r\n                            rules={Rules.notRequired}\r\n                            render={({ field }) =>\r\n                                <EupatiCheckbox\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.noDiseaseExpertise?.message,\r\n                                        fieldName: 'noDiseaseExpertise',\r\n                                        text: 'I have no specific disease experience'\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='pt-expc' className='experience-info-field mb-3'>\r\n                        <Form.Label>Level of experience with disease</Form.Label>\r\n                        <Controller\r\n                            name='patientExperienceId'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.patient.patientExperienceId)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiToggleBtn\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.patientExperienceId?.message,\r\n                                        fieldName: 'patientExperienceId',\r\n                                        values: props.findLookUpData('patientExperiense')\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='pt-otherInfo' className='experience-info-field mb-3'>\r\n                        <Form.Label>Other relevant information</Form.Label>\r\n                        <Controller\r\n                            name='otherInformation'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.patient.otherInformation)}\r\n                            rules={Rules.requiredMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiTextarea\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.otherInformation?.message,\r\n                                        rowsCount: 8\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='pt-btns'>\r\n                        <Button className='bck' variant='secondary' type='submit' onClick={onBackHandler}>Back</Button>\r\n                        <Button className='nxt' variant='primary' type='submit'>Next</Button>\r\n                    </Form.Group>\r\n                </Form.Group>\r\n            </Form.Group>\r\n        </Form >\r\n    )\r\n}","import React from \"react\";\r\nimport { Button, Form } from \"react-bootstrap\";\r\nimport { useForm, Controller } from \"react-hook-form\";\r\nimport EupatiMultiselect from \"../../../../common/static/multiselect\";\r\nimport { Rules } from \"../../../../common/helpers\";\r\nimport { Patient } from \"../../../../common/models/main-models\";\r\nimport { LookUpOptions } from \"../../../../common/models/input-models\";\r\nimport EupatiTextbox from \"../../../../common/static/textbox\";\r\n\r\ntype OwnProps = {\r\n    patient: Patient\r\n};\r\n\r\ntype DispatchProps = {\r\n    prevPage: () => void;\r\n    showPatientsDiseaseExpInfo: () => void;\r\n    setPatientInfo: (patient: Patient) => void;\r\n    returnProperDefaultValue: (val: any) => any;\r\n    findLookUpData: (lookUpDataType?: string) => LookUpOptions[] | null;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\ntype FieldProps = {\r\n    patientExpertises: number[],\r\n    patientExpertiseDescription: string,\r\n    projectTypeExperiences: number[],\r\n    projectTypeExperiencesDescription: string\r\n};\r\n\r\nexport default function PatientsProjectExpInfo(props: Props) {\r\n    const { handleSubmit, control, watch, formState: { errors } } = useForm();\r\n\r\n    const fieldsData = {\r\n        patientExpertises: watch(\"patientExpertises\") as number[],\r\n        projectTypeExperiences: watch(\"projectTypeExperiences\") as number[],\r\n        patientExpertiseDescription: watch(\"patientExpertiseDescription\") as string,\r\n        projectTypeExperiencesDescription: watch(\"projectTypeExperiencesDescription\") as string\r\n    } as FieldProps;\r\n\r\n    const onSubmit = (data: any) => {\r\n        const editedPatientInfo = Object.assign(props.patient, Object.assign(data));\r\n        props.setPatientInfo(editedPatientInfo);\r\n        props.showPatientsDiseaseExpInfo();\r\n    }\r\n\r\n    const onBackHandler = () => {\r\n        if (adjustFieldsValues() === 0) {\r\n            const editedPatientInfo = Object.assign(props.patient, Object.assign(fieldsData));\r\n            props.setPatientInfo(editedPatientInfo);\r\n        }\r\n        props.prevPage();\r\n    }\r\n\r\n    const adjustFieldsValues = () => {\r\n        if (fieldsData.patientExpertises === undefined &&\r\n            fieldsData.projectTypeExperiences === undefined &&\r\n            fieldsData.patientExpertiseDescription === undefined &&\r\n            fieldsData.projectTypeExperiencesDescription === undefined) {\r\n            return 1;   // if user hasn't changed anything\r\n        }\r\n\r\n        if (fieldsData.patientExpertises === undefined &&\r\n            props.patient.patientExpertises !== undefined) {\r\n            fieldsData.patientExpertises = props.patient.patientExpertises;\r\n        }\r\n\r\n        if (fieldsData.projectTypeExperiences === undefined &&\r\n            props.patient.projectTypeExperiences !== undefined) {\r\n            fieldsData.projectTypeExperiences = [...props.patient.projectTypeExperiences];\r\n        }\r\n\r\n        if (fieldsData.projectTypeExperiencesDescription === undefined &&\r\n            props.patient.projectTypeExperiencesDescription !== undefined) {\r\n            fieldsData.projectTypeExperiencesDescription = props.patient.projectTypeExperiencesDescription;\r\n        }\r\n\r\n        if (fieldsData.patientExpertiseDescription === undefined &&\r\n            props.patient.patientExpertiseDescription !== undefined) {\r\n            fieldsData.patientExpertiseDescription = props.patient.patientExpertiseDescription;\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    const toggleProjTypeExpField = () => {\r\n        let projTypeExp: number[] = [];\r\n        if (fieldsData.projectTypeExperiences !== undefined && fieldsData.projectTypeExperiences !== null) {\r\n            projTypeExp = [...fieldsData.projectTypeExperiences];\r\n        }\r\n        else if (props.patient.projectTypeExperiences !== undefined && props.patient.projectTypeExperiences !== null) {\r\n            projTypeExp = [...props.patient.projectTypeExperiences];\r\n        }\r\n\r\n        //if (orgTypes.length > 1) { return false; }\r\n        let otherType = props.findLookUpData('projectType')?.find(ot => ot.name.toLowerCase().includes('other')); // gets { id: 3, name: 'Other' }\r\n        return projTypeExp?.some((x) => x === otherType?.id) ? true : false;\r\n    }\r\n\r\n    const togglePtExpertiseField = () => {\r\n        let ptExpertises: number[] = [];\r\n        if (fieldsData.patientExpertises !== undefined && fieldsData.patientExpertises !== null) {\r\n            ptExpertises = [...fieldsData.patientExpertises];\r\n        }\r\n        else if (props.patient.patientExpertises !== undefined && props.patient.patientExpertises !== null) {\r\n            ptExpertises = [...props.patient.patientExpertises];\r\n        }\r\n\r\n        //if (orgTypes.length > 1) { return false; }\r\n        let otherType = props.findLookUpData('expertise')?.find(ot => ot.name.toLowerCase().includes('other')); // gets { id: 3, name: 'Other' }\r\n        return ptExpertises?.some((x) => x === otherType?.id) ? true : false;\r\n    }\r\n\r\n    return (\r\n        <Form className='experience' onSubmit={handleSubmit(onSubmit)}>\r\n            <Form.Group className='experience-info'>\r\n                <Form.Group className='lcolumn'>\r\n\r\n                    <Form.Group id='pt-expertise' className='experience-info-field mb-4'>\r\n                        <Form.Label>Level of expertise (multiple answers possible)</Form.Label>\r\n                        <Controller\r\n                            name='patientExpertises'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.patient.patientExpertises)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiMultiselect\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.message,\r\n                                        fieldName: 'patientExpertises',\r\n                                        values: props.findLookUpData('expertise')\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    {togglePtExpertiseField() &&\r\n                        <Form.Group id='pt-expertiseDescr' className='experience-info-field mb-4'>\r\n                            <Form.Label>Please specify level of expertise</Form.Label>\r\n                            <Controller\r\n                                name='patientExpertiseDescription'\r\n                                control={control}\r\n                                defaultValue={props.returnProperDefaultValue(props.patient.patientExpertiseDescription)}\r\n                                rules={Rules.notRequired}\r\n                                render={({ field }) =>\r\n                                    <EupatiTextbox\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.patientExpertiseDescription?.message,\r\n                                            placeholder: 'Please type level of expertise'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n                    }\r\n\r\n                    <Form.Group id='pt-expcProj' className='experience-info-field mb-4'>\r\n                        <Form.Label>Type of project experience (multiple answers possible)</Form.Label>\r\n                        <Controller\r\n                            name='projectTypeExperiences'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.patient.projectTypeExperiences)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiMultiselect\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.projectTypeExperiences?.message,\r\n                                        fieldName: 'projectTypeExperiences',\r\n                                        values: props.findLookUpData('projectType')\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    {toggleProjTypeExpField() &&\r\n                        <Form.Group id='pt-expcProjDescr' className='experience-info-field mb-4' >\r\n                            <Form.Label>Please specify the type of project</Form.Label>\r\n                            <Controller\r\n                                name='projectTypeExperiencesDescription'\r\n                                control={control}\r\n                                defaultValue={props.returnProperDefaultValue(props.patient.projectTypeExperiencesDescription)}\r\n                                rules={Rules.notRequired}\r\n                                render={({ field }) =>\r\n                                    <EupatiTextbox\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.projectTypeExperiencesDescription?.message,\r\n                                            placeholder: 'Please specify project type'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n                    }\r\n\r\n                    <Form.Group id='pt-btns'>\r\n                        <Button className='bck' variant='secondary' type='submit' onClick={onBackHandler}>Back</Button>\r\n                        <Button className='nxt' variant='primary' type='submit'>Next</Button>\r\n                    </Form.Group>\r\n                </Form.Group>\r\n            </Form.Group>\r\n        </Form>\r\n    )\r\n}","import React, { useState } from \"react\";\r\nimport { LookUpData, LookUpOptions } from \"../../../../common/models/input-models\";\r\nimport { Patient } from \"../../../../common/models/main-models\";\r\nimport PatientsDiseaseExpInfo from \"./disease-exp\";\r\nimport PatientsProjectExpInfo from \"./proj-exp\";\r\n\r\ntype OwnProps = {\r\n    patient: Patient,\r\n    lookUpData: LookUpData[],\r\n    showSecondSubComponent: boolean\r\n};\r\n\r\ntype DispatchProps = {\r\n    setPatientInfo: (patient: Patient) => void;\r\n    nextPage: () => void;\r\n    prevPage: () => void;\r\n    returnProperDefaultValue: (val: any) => any;\r\n    findLookUpData: (lookUpDataType?: string) => LookUpOptions[] | null;\r\n    savePatient: (patient: Patient) => void;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nexport default function PatientExpcInfo(props: Props) {\r\n    const [nextBtnClicked, setNextBtnClicked] = useState<boolean>(props.showSecondSubComponent);\r\n\r\n    const toggleSectionVisibility = () => {\r\n        setNextBtnClicked(!nextBtnClicked);\r\n    }\r\n\r\n    return (\r\n        <div style={{ margin: '0 0 7.5rem 0' }}>\r\n\r\n            {nextBtnClicked &&\r\n                <PatientsProjectExpInfo\r\n                    {...{\r\n                        ...props,\r\n                        showPatientsDiseaseExpInfo: toggleSectionVisibility\r\n                    }}\r\n                />\r\n            }\r\n\r\n            {!nextBtnClicked &&\r\n                <PatientsDiseaseExpInfo\r\n                    {...{\r\n                        ...props,\r\n                        hidePatientsDiseaseExpInfo: toggleSectionVisibility\r\n                    }}\r\n                />\r\n            }\r\n        </div>\r\n    );\r\n}","import React from \"react\";\r\nimport { useForm, Controller } from \"react-hook-form\";\r\nimport { Button, Form } from 'react-bootstrap';\r\nimport { Rules } from \"../../../../common/helpers\";\r\nimport EupatiMultiselect from \"../../../../common/static/multiselect\";\r\nimport { Patient } from \"../../../../common/models/main-models\";\r\nimport { LookUpOptions } from \"../../../../common/models/input-models\";\r\nimport EupatiTextbox from \"../../../../common/static/textbox\";\r\n\r\ntype OwnProps = {\r\n    patient: Patient\r\n};\r\n\r\ntype DispatchProps = {\r\n    prevPage: () => void;\r\n    setPatientInfo: (patient: Patient) => void;\r\n    showPatientCompensationReqInfo: () => void;\r\n    returnProperDefaultValue: (val: any) => any;\r\n    findLookUpData: (lookUpDataType?: string) => LookUpOptions[] | null;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\ntype FieldsProps = {\r\n    projectPreferences: number[],\r\n    projectPreferenceDescription: string,\r\n    organisationPreferences: number[],\r\n    organisationPreferenceDescription: string\r\n};\r\n\r\nexport default function PatientProjectReqInfo(props: Props) {\r\n\r\n    const { handleSubmit, control, watch, formState: { errors } } = useForm();\r\n\r\n    const fieldsData = {\r\n        projectPreferences: watch(\"projectPreferences\") as number[],\r\n        projectPreferenceDescription: watch(\"projectPreferenceDescription\") as string,\r\n        organisationPreferences: watch(\"organisationPreferences\") as number[],\r\n        organisationPreferenceDescription: watch(\"organisationPreferenceDescription\") as string\r\n    } as FieldsProps;\r\n\r\n    const onSubmit = (data: any) => {\r\n        const editedPatientInfo = Object.assign(props.patient, data);\r\n        props.setPatientInfo(editedPatientInfo);\r\n        props.showPatientCompensationReqInfo();\r\n    }\r\n\r\n    function onBackHandler() {\r\n        if (adjustFieldsValues() === 0) {\r\n            const editedPatientInfo = Object.assign(props.patient, fieldsData);\r\n            props.setPatientInfo(editedPatientInfo);\r\n        }\r\n        props.prevPage();\r\n    }\r\n\r\n    const orderLookUpOptionsByNameLength = (options: LookUpOptions[] | null) => {\r\n        if (options !== null) {\r\n            return options.sort((a, b) => a.name.length - b.name.length);\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    const toggleOrgPrefField = () => {\r\n        let orgTypes: number[] = [];\r\n        if (fieldsData.organisationPreferences !== undefined && fieldsData.organisationPreferences !== null) {\r\n            orgTypes = [...fieldsData.organisationPreferences];\r\n        }\r\n        else if (props.patient.organisationPreferences !== undefined && props.patient.organisationPreferences !== null) {\r\n            orgTypes = [...props.patient.organisationPreferences];\r\n        }\r\n\r\n        //if (orgTypes.length > 1) { return false; }\r\n        let otherType = props.findLookUpData('organisationType')?.find(ot => ot.name.toLowerCase().includes('other')); // gets { id: 3, name: 'Other' }\r\n        return orgTypes?.some((x) => x === otherType?.id) ? true : false;\r\n    }\r\n\r\n    const toggleProjPrefField = () => {\r\n        let projPrefs: number[] = [];\r\n        if (fieldsData.projectPreferences !== undefined && fieldsData.projectPreferences !== null) {\r\n            projPrefs = [...fieldsData.projectPreferences];\r\n        }\r\n        else if (props.patient.projectPreferences !== undefined && props.patient.projectPreferences !== null) {\r\n            projPrefs = [...props.patient.projectPreferences];\r\n        }\r\n\r\n        //if (orgTypes.length > 1) { return false; }\r\n        let otherType = props.findLookUpData('projectType')?.find(ot => ot.name.toLowerCase().includes('other')); // gets { id: 3, name: 'Other' }\r\n        return projPrefs?.some((x) => x === otherType?.id) ? true : false;\r\n    }\r\n\r\n    const adjustFieldsValues = () => {\r\n        if (fieldsData.projectPreferences === undefined &&\r\n            fieldsData.organisationPreferences === undefined &&\r\n            fieldsData.projectPreferenceDescription === undefined &&\r\n            fieldsData.organisationPreferenceDescription === undefined) {\r\n            return 1;   // if user hasn't changed anything\r\n        }\r\n\r\n        if (fieldsData.projectPreferences === undefined &&\r\n            props.patient.projectPreferences !== undefined) {\r\n            fieldsData.projectPreferences = [...props.patient.projectPreferences];\r\n        }\r\n\r\n        if (fieldsData.organisationPreferences === undefined &&\r\n            props.patient.organisationPreferences !== undefined) {\r\n            fieldsData.organisationPreferences = [...props.patient.organisationPreferences];\r\n        }\r\n\r\n        if (fieldsData.projectPreferenceDescription === undefined &&\r\n            props.patient.projectPreferenceDescription !== undefined) {\r\n            fieldsData.projectPreferenceDescription = props.patient.projectPreferenceDescription;\r\n        }\r\n\r\n        if (fieldsData.organisationPreferenceDescription === undefined &&\r\n            props.patient.organisationPreferenceDescription !== undefined) {\r\n            fieldsData.organisationPreferenceDescription = props.patient.organisationPreferenceDescription;\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    return (\r\n        <Form className='requirements' onSubmit={handleSubmit(onSubmit)}>\r\n            <Form.Group className='requirements-info'>\r\n                <Form.Group className='lcolumn'>\r\n\r\n                    <Form.Group id='pt-tpProj' className='requirements-info-field mb-3'>\r\n                        <Form.Label>Preference on types of projects (multiple answers possible)</Form.Label>\r\n                        <Controller\r\n                            name='projectPreferences'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.patient.projectPreferences)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiMultiselect\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.projectPreferences?.message,\r\n                                        fieldName: 'projectPreferences',\r\n                                        values: props.findLookUpData('projectType')\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    {toggleProjPrefField() &&\r\n                        <Form.Group id='pt-projPrefDescr' className='requirements-info-field mb-3'>\r\n                            <Form.Label>Please specify project preference</Form.Label>\r\n                            <Controller\r\n                                name='projectPreferenceDescription'\r\n                                control={control}\r\n                                defaultValue={props.returnProperDefaultValue(props.patient.projectPreferenceDescription)}\r\n                                rules={Rules.notRequired}\r\n                                render={({ field }) =>\r\n                                    <EupatiTextbox\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.projectPreferenceDescription?.message,\r\n                                            placeholder: 'Please type project preference'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n                    }\r\n\r\n                    <Form.Group id='pt-orgTp' className='requirements-info-field mb-3'>\r\n                        <Form.Label>Preference on types of organisation (multiple answers possible)</Form.Label>\r\n                        <Controller\r\n                            name='organisationPreferences'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.patient.organisationPreferences)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiMultiselect\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.projectPreferences?.message,\r\n                                        fieldName: 'organisationPreferences',\r\n                                        values: orderLookUpOptionsByNameLength(props.findLookUpData('organisationType'))\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    {toggleOrgPrefField() &&\r\n                        <Form.Group id='pt-orgTpDescr' className='requirements-info-field mb-3'>\r\n                            <Form.Label>Please specify organisation preference</Form.Label>\r\n                            <Controller\r\n                                name='organisationPreferenceDescription'\r\n                                control={control}\r\n                                defaultValue={props.returnProperDefaultValue(props.patient.organisationPreferenceDescription)}\r\n                                rules={Rules.notRequired}\r\n                                render={({ field }) =>\r\n                                    <EupatiTextbox\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.organisationPreferenceDescription?.message,\r\n                                            placeholder: 'Please type organisation preference'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n                    }\r\n\r\n                    <Form.Group id='pt-btns'>\r\n                        <Button className='bck' variant='secondary' type='submit' onClick={onBackHandler}>Back</Button>\r\n                        <Button className='nxt' variant='primary' type='submit'>Next</Button>\r\n                    </Form.Group>\r\n                </Form.Group>\r\n            </Form.Group>\r\n        </Form>\r\n    )\r\n}","import React from \"react\";\r\nimport { useForm, Controller } from \"react-hook-form\";\r\nimport { Button, Form } from 'react-bootstrap';\r\nimport { Rules } from \"../../../../common/helpers\";\r\nimport EupatiNonCMSToggleBtn from \"../../../../common/static/toggle-btn-nonCMS\";\r\nimport EupatiToggleBtn from \"../../../../common/static/toggle-btn\";\r\nimport EupatiGDPRBtn from \"../../../../common/static/GDPR-toggle\";\r\nimport { Patient } from \"../../../../common/models/main-models\";\r\nimport { LookUpOptions } from \"../../../../common/models/input-models\";\r\n\r\ntype OwnProps = {\r\n    patient: Patient,\r\n    isNewPatient: boolean\r\n};\r\n\r\ntype DispatchProps = {\r\n    nextPage: () => void;\r\n    prevPage: () => void;\r\n    savePatient: (patient: Patient) => void;\r\n    hidePatientCompensationReqInfo: () => void;\r\n    setPatientInfo: (patient: Patient) => void;\r\n    returnProperDefaultValue: (val: any) => any;\r\n    findLookUpData: (lookUpDataType?: string) => LookUpOptions[] | null;\r\n    submitNewPatient: (patient: Patient) => void;\r\n};\r\n\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\ntype FieldProps = {\r\n    isEligibleForCompensation?: boolean,\r\n    isAvailableForNoCompensation?: boolean,\r\n    activityPreferenceId?: number,\r\n    isGDPRConsentGiven: boolean\r\n};\r\n\r\nexport default function PatientCompensationReqInfo(props: Props) {\r\n\r\n    const { handleSubmit, control, watch, formState: { errors } } = useForm();\r\n\r\n    const fieldsData = {\r\n        isEligibleForCompensation: watch(\"isEligibleForCompensation\") as boolean | undefined,\r\n        isAvailableForNoCompensation: watch(\"isAvailableForNoCompensation\") as boolean | undefined,\r\n        activityPreferenceId: watch(\"activityPreferenceId\") as number | undefined,\r\n        isGDPRConsentGiven: watch(\"isGDPRConsentGiven\") as boolean,\r\n    } as FieldProps;\r\n\r\n    const onSubmit = (data: any) => {\r\n        const editedPatientInfo = Object.assign(props.patient, data);\r\n        switch (props.isNewPatient) {\r\n            case true:\r\n                props.submitNewPatient(editedPatientInfo);\r\n                break;\r\n            case false:\r\n                props.savePatient(editedPatientInfo);\r\n                break;\r\n        }\r\n        props.nextPage();\r\n    }\r\n\r\n    function onBackHandler() {\r\n        if (adjustFieldsValues() === 0) {\r\n            const editedPatientInfo = Object.assign(props.patient, fieldsData);\r\n            props.setPatientInfo(editedPatientInfo);\r\n        }\r\n        props.hidePatientCompensationReqInfo();\r\n    }\r\n\r\n    const adjustFieldsValues = () => {\r\n        if (fieldsData.isEligibleForCompensation === undefined &&\r\n            fieldsData.isAvailableForNoCompensation === undefined &&\r\n            fieldsData.activityPreferenceId === undefined &&\r\n            fieldsData.isGDPRConsentGiven === undefined) {\r\n            return 1;   // if user hasn't changed anything\r\n        }\r\n\r\n        if (fieldsData.isEligibleForCompensation === undefined &&\r\n            props.patient.isEligibleForCompensation !== undefined) {\r\n            fieldsData.isEligibleForCompensation = props.patient.isEligibleForCompensation;\r\n        }\r\n\r\n        if (fieldsData.isAvailableForNoCompensation === undefined &&\r\n            props.patient.isAvailableForNoCompensation !== undefined) {\r\n            fieldsData.isAvailableForNoCompensation = props.patient.isAvailableForNoCompensation;\r\n        }\r\n\r\n        if (fieldsData.activityPreferenceId === undefined &&\r\n            props.patient.activityPreferenceId !== undefined) {\r\n            fieldsData.activityPreferenceId = props.patient.activityPreferenceId;\r\n        }\r\n\r\n        if (fieldsData.isGDPRConsentGiven === undefined &&\r\n            props.patient.isGDPRConsentGiven !== undefined) {\r\n            fieldsData.isGDPRConsentGiven = props.patient.isGDPRConsentGiven;\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    return (\r\n        <Form className='requirements' onSubmit={handleSubmit(onSubmit)}>\r\n            <Form.Group className='requirements-info'>\r\n                <Form.Group className='rcolumn'>\r\n                    <Form.Group id='pt-compEligbl' className='requirements-info-field mb-3'>\r\n                        <Form.Label>Are you eligible to receive compensation?</Form.Label>\r\n                        <Controller\r\n                            name='isEligibleForCompensation'\r\n                            control={control}\r\n                            defaultValue={props.patient.isEligibleForCompensation !== undefined ? `${props.patient.isEligibleForCompensation}` : ''}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiNonCMSToggleBtn\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.isEligibleForCompensation?.message,\r\n                                        fieldName: 'isEligibleForCompensation',\r\n                                        isMoreThanTwoOptions: true\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='pt-noCompAvlbl' className='requirements-info-field mb-3'>\r\n                        <Form.Label>Are you available for voluntary work?</Form.Label>\r\n                        <Controller\r\n                            name='isAvailableForNoCompensation'\r\n                            control={control}\r\n                            defaultValue={props.patient.isAvailableForNoCompensation !== undefined ? `${props.patient.isAvailableForNoCompensation}` : ''}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiNonCMSToggleBtn\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.isAvailableForNoCompensation?.message,\r\n                                        fieldName: 'isAvailableForNoCompensation',\r\n                                        isMoreThanTwoOptions: true\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='pt-expcProj' className='requirements-info-field mb-3'>\r\n                        <Form.Label>Preference for an individual or group projects</Form.Label>\r\n                        <Controller\r\n                            name='activityPreferenceId'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.patient.activityPreferenceId)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiToggleBtn\r\n                                    {...{\r\n                                        ...field,\r\n                                        errorMsg: errors?.activityPreferenceId?.message,\r\n                                        fieldName: 'activityPreferenceId',\r\n                                        values: props.findLookUpData('activityType')\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='pt-gdpr' className='requirements-info-field mb-4'>\r\n                        <Controller\r\n                            name='isGDPRConsentGiven'\r\n                            control={control}\r\n                            defaultValue={props.returnProperDefaultValue(props.patient.isGDPRConsentGiven)}\r\n                            rules={Rules.selectOptionMessage}\r\n                            render={({ field }) =>\r\n                                <EupatiGDPRBtn\r\n                                    {...{\r\n                                        ...field,\r\n                                        fieldName: 'isGDPRConsentGiven',\r\n                                        errorMsg: errors?.isGDPRConsentGiven?.message\r\n                                    }}\r\n                                />\r\n                            }\r\n                        />\r\n                        <small className='google-message'>\r\n                            This site is protected by reCAPTCHA and the Google\r\n                            <a className='google-message-privacy' href=\"https://policies.google.com/privacy\" target=\"_blank\"> Privacy Policy</a> and\r\n                            <a className='google-message-tos' href=\"https://policies.google.com/terms\" target=\"_blank\"> Terms of Service</a> apply.\r\n                        </small>\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='pt-btns'>\r\n                        <Button className='bck' variant='secondary' type='submit' onClick={onBackHandler}>Back</Button>\r\n                        <Button className='nxt' variant='primary' type='submit'>Submit</Button>\r\n                    </Form.Group>\r\n                </Form.Group>\r\n            </Form.Group>\r\n        </Form>\r\n    )\r\n}","import React, { useState } from \"react\";\r\nimport { LookUpOptions } from \"../../../../common/models/input-models\";\r\nimport { Patient } from \"../../../../common/models/main-models\";\r\nimport PatientProjectReqInfo from \"./comp-req\";\r\nimport PatientCompensationReqInfo from \"./proj-req\";\r\n\r\ntype OwnProps = {\r\n    patient: Patient,\r\n    isNewPatient: boolean,\r\n    showSecondSubComponent: boolean\r\n};\r\n\r\ntype DispatchProps = {\r\n    nextPage: () => void;\r\n    prevPage: () => void;\r\n    savePatient: (project: Patient) => void;\r\n    setPatientInfo: (project: Patient) => void;\r\n    returnProperDefaultValue: (val: any) => any;\r\n    findLookUpData: (lookUpDataType?: string) => LookUpOptions[] | null;\r\n    submitNewPatient: (patient: Patient) => void;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nexport default function RequirementsInfo(props: Props) {\r\n\r\n    const [nextBtnClicked, setNextBtnClicked] = useState<boolean>(props.showSecondSubComponent);\r\n\r\n    const toggleSectionVisibility = () => {\r\n        setNextBtnClicked(!nextBtnClicked);\r\n    }\r\n\r\n    return (\r\n        <div style={{ margin: '0 0 7.5rem 0' }}>\r\n\r\n            {nextBtnClicked &&\r\n                <PatientProjectReqInfo\r\n                    {...{\r\n                        ...props,\r\n                        showPatientCompensationReqInfo: toggleSectionVisibility\r\n                    }}\r\n                />\r\n            }\r\n\r\n            {!nextBtnClicked &&\r\n                // GDPR here...\r\n                <PatientCompensationReqInfo\r\n                    {...{\r\n                        ...props,\r\n                        hidePatientCompensationReqInfo: toggleSectionVisibility\r\n                    }}\r\n                />\r\n            }\r\n\r\n\r\n        </div>\r\n    );\r\n}","import * as React from 'react';\r\nimport { Form } from 'react-bootstrap';\r\nimport { Patient } from '../../../common/models/main-models';\r\nimport EupatiLoader from '../../../common/static/loading-animation/loader';\r\nimport { State } from '../model';\r\nimport PatientGeneralInfo from './personal-info';\r\nimport PatientExpcInfo from './experience-info';\r\nimport RequirementsInfo from './preference-info';\r\nimport EupatiConfirmPage from '../../../common/static/confirm-page';\r\nimport { RouteComponentProps } from '@reach/router';\r\nimport '../style.scss';\r\nimport { toast } from 'react-toastify';\r\n\r\ntype OwnProps = {};\r\n\r\nexport type DispatchProps = {\r\n    setPatientInfo: (patient: Patient) => void;\r\n    setLookUpData: () => void;\r\n    savePatient: (patient: Patient) => void;\r\n    setPatientData: (id?: string) => void;\r\n    setUserPatientData: (userId?: string) => void;\r\n    submitNewPatient: (patient: Patient) => void;\r\n};\r\n\r\ntype Props = State & DispatchProps & OwnProps & RouteComponentProps<{ location: { state: { userId: string, patientId: string, isNewPatient: boolean, isUserPatient: boolean } } }>;\r\n\r\ntype OwnState = {\r\n    showComponentByIndex: number;\r\n    showSecondSubComponent: boolean;\r\n};\r\n\r\nclass ComponentRoot extends React.Component<Props, OwnState> {\r\n\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            showComponentByIndex: 0,\r\n            showSecondSubComponent: true    // when this is \"true\" on render it will show the first subcomponent (PatientGeneralInfo --> PatientGenericInfo).\r\n        }\r\n\r\n        this.nextPageHandler = this.nextPageHandler.bind(this);\r\n        this.previousPageHandler = this.previousPageHandler.bind(this);\r\n        this.returnProperDefaultValue = this.returnProperDefaultValue.bind(this);\r\n        this.findLookUpData = this.findLookUpData.bind(this);\r\n        this.showLoadingComponent = this.showLoadingComponent.bind(this);\r\n    }\r\n\r\n    componentDidMount() {\r\n        this.props.setLookUpData();\r\n        const locationState = this.props.location?.state;\r\n        if (locationState === undefined || locationState === null) {\r\n            return toast.error(\"Something went wrong! Try again later.\");   //  unauthorized access\r\n        }\r\n        else if (locationState.isNewPatient === false) {\r\n            this.props.setPatientData(locationState.patientId);             //  admin edit patient\r\n        }\r\n        else if (locationState.isNewPatient === true) {\r\n            this.props.setPatientData();                                    //  admin add patient\r\n        }\r\n        else if (locationState.isUserPatient === true) {\r\n            this.props.setUserPatientData(locationState.userId);            //  user access patient profile\r\n        }\r\n    }\r\n\r\n    nextPageHandler() {\r\n        if (this.state.showComponentByIndex !== 3) {\r\n            this.setState(prevState => ({\r\n                showComponentByIndex: prevState.showComponentByIndex + 1,\r\n                showSecondSubComponent: true\r\n            }));\r\n        }\r\n        //window.scrollTo(0, 0);\r\n    }\r\n\r\n    previousPageHandler() {\r\n        if (this.state.showComponentByIndex !== 0) {\r\n            this.setState(prevState => ({\r\n                showComponentByIndex: prevState.showComponentByIndex - 1,\r\n                showSecondSubComponent: false\r\n            }));\r\n        }\r\n        //window.scrollTo(0, 0);\r\n    }\r\n\r\n    findLookUpData(lookUpDataType?: string) {\r\n        if (this.props.lookUpData &&\r\n            this.props.lookUpData.length > 0) {\r\n            return this.props.lookUpData?.filter((x: any) => x.name == lookUpDataType)[0]?.data;\r\n        }\r\n\r\n        return [];\r\n    }\r\n\r\n    returnProperDefaultValue = (val: any) => {\r\n        if (typeof val === 'undefined' || val === null) {\r\n            return '';\r\n        } else if (typeof val === 'boolean') {\r\n            return val.toString(); // it doesn't set default val when 'false'\r\n        }\r\n\r\n        return val;\r\n    }\r\n\r\n    showLoadingComponent = (isNewPatient?: boolean) => {\r\n        if (isNewPatient && !this.props.isLoading) {\r\n            return false;\r\n        }\r\n        else if (this.props.isLoading || this.props.isPatientDataLoaded) {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    render() {\r\n\r\n        let mainComponent: any;\r\n\r\n        let loadingComponent = (\r\n            <div className='loader-wrapper'>\r\n                <EupatiLoader />\r\n            </div>\r\n        );\r\n\r\n        const props = {\r\n            patient: this.props.patient,\r\n            lookUpData: this.props.lookUpData,\r\n            isNewPatient: typeof this.props.location?.state?.isNewPatient === 'undefined' ? false : this.props.location?.state?.isNewPatient,\r\n            showSecondSubComponent: this.state.showSecondSubComponent,\r\n            setPatientInfo: this.props.setPatientInfo,\r\n            nextPage: this.nextPageHandler,\r\n            prevPage: this.previousPageHandler,\r\n            returnProperDefaultValue: this.returnProperDefaultValue,\r\n            findLookUpData: this.findLookUpData,\r\n            savePatient: this.props.savePatient,\r\n            submitNewPatient: this.props.submitNewPatient\r\n        };\r\n\r\n        const spanStyles = {\r\n            fontWeight: 'bolder',\r\n            //textDecoration: 'underline',\r\n            backgroundColor: '#00749F',\r\n            borderRadius: '30px',\r\n            color: '#fff'\r\n        } as any;\r\n\r\n        if (this.showLoadingComponent(this.props.location?.state?.isNewPatient)) {\r\n            mainComponent = loadingComponent;\r\n        }\r\n        else {\r\n            mainComponent = (\r\n                <>\r\n                    <h2 className='heading' style={this.state.showComponentByIndex === 3 ? { display: 'none' } : {}}>Patient Profile</h2>\r\n                    {this.state.showComponentByIndex !== 3 &&\r\n                        <Form.Group className='titles-wrapper'>\r\n                            <div className='titles'>\r\n                                <div className='titles-title' style={this.state.showComponentByIndex === 0 ? { ...spanStyles } : {}}>\r\n                                    <span>1. General</span>\r\n                                </div>\r\n                                <div className='titles-title' style={this.state.showComponentByIndex === 1 ? { ...spanStyles } : {}}>\r\n                                    <span>2. Experience</span>\r\n                                </div>\r\n                                <div className='titles-title' style={this.state.showComponentByIndex === 2 ? { ...spanStyles } : {}}>\r\n                                    <span>3. Preferences</span>\r\n                                </div>\r\n                            </div>\r\n                        </Form.Group>\r\n                    }\r\n                    {this.state.showComponentByIndex === 0 && <PatientGeneralInfo {...props} />}\r\n                    {this.state.showComponentByIndex === 1 && <PatientExpcInfo {...props} />}\r\n                    {this.state.showComponentByIndex === 2 && <RequirementsInfo {...props} />}\r\n                    {this.state.showComponentByIndex === 3 && <EupatiConfirmPage />}\r\n                </>\r\n            )\r\n        }\r\n\r\n        return (\r\n            <>\r\n                {mainComponent}\r\n            </>\r\n        );\r\n    }\r\n}\r\n\r\nexport default ComponentRoot;","import { default as RootComponent, DispatchProps } from '../components/component-root'\r\nimport * as Constants from '../constants';\r\nimport * as Actions from '../actions';\r\nimport { State } from '../model';\r\nimport { connect } from 'react-redux';\r\nimport { Patient } from '../../../common/models/main-models';\r\n\r\nexport function mapStateToProps(globalState: any) {\r\n    let name = Constants.NAME;\r\n    let pageState = globalState[name] as State;\r\n    return pageState;\r\n}\r\n\r\nexport function mapDispatchToProps(dispatch: any) {\r\n    return {\r\n        setLookUpData: () => dispatch(Actions.getLookUpDataAsync()),\r\n        setPatientInfo: (patient: Patient) => dispatch(Actions.setPatientInfo(patient)),\r\n        savePatient: (patient: Patient) => dispatch(Actions.updatePatientAsync(patient)),\r\n        setPatientData: (patientId?: string) => dispatch(Actions.getPatientInfoByIdAsync(patientId)),\r\n        setUserPatientData: (userId?: string) => dispatch(Actions.getPatientInfoByUserIdAsync(userId)),\r\n        submitNewPatient: (patient: Patient) => dispatch(Actions.saveNewPatientAsync(patient)),\r\n    } as DispatchProps;\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RootComponent);","import { LookUpData, MeshData } from '../../common/models/input-models';\r\nimport { Patient } from '../../common/models/main-models';\r\nimport * as t from './actionTypes';\r\nimport { defaultPatientInfo, State } from './model';\r\n\r\nconst initialState: State = {\r\n    patient: defaultPatientInfo,\r\n    isLoading: true,\r\n    lookUpData: [],\r\n    isPatientDataLoaded: true\r\n};\r\n\r\nexport default (state = initialState, action: any): State => {\r\n    switch (action.type) {\r\n        case t.SET_LOOKUP_DATA:\r\n            return setLookUpData(state, action.payload);\r\n        case t.SET_PATIENT_INFO:\r\n            return setPatientInfo(state, action.payload);\r\n        case t.SET_PATIENTS_LOADING:\r\n            return setPatientLoading(state, action.payload);\r\n        case t.SET_PATIENT_DATA_LOADING:\r\n            return setPatientDataLoading(state, action.payload);\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nconst setLookUpData = (state: State, val: LookUpData[]): State => {\r\n    let newState = {\r\n        ...state,\r\n        lookUpData: [...val]\r\n    } as State;\r\n\r\n    return newState;\r\n};\r\n\r\nconst setPatientInfo = (state: State, val: Patient): State => {\r\n    let newState = {\r\n        ...state,\r\n        patient: {...val}\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setPatientLoading = (state: State, val: boolean): State => {\r\n    let newState = {\r\n\t\t...state,\r\n        isLoading: val\r\n\t} as State;\r\n\r\n\treturn newState;\r\n}\r\n\r\nconst setPatientDataLoading = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isPatientDataLoaded: val\r\n    } as State;\r\n\r\n    return newState;\r\n}","import * as Actions from './actions';\r\nimport * as Components from './components/index';\r\nimport * as Containers from './containers/index';\r\nimport * as Constants from './constants';\r\nimport Reducer from './reducer';\r\n\r\nexport default {\r\n    actions: Actions,\r\n    components: Components,\r\n    containers: Containers,\r\n    constants: Constants,\r\n    reducer: Reducer\r\n};\r\n\r\nexport const Root = Containers.ComponentRoot;","// constants.ts\r\n\r\nexport const NAME = 'homePage';","import { NAME } from \"./constants\";\r\n\r\nexport const SET_HOME_LOADING = `${NAME}/SET_HOME_LOADING`;\r\n\r\nexport const SET_HOME_LOGGED_IN = `${NAME}/SET_HOME_LOGGED_IN`;\r\n\r\nexport const SET_IS_USER_REAL = `${NAME}/SET_IS_USER_REAL`;\r\n\r\nexport const SET_IS_USER_ADMIN = `${NAME}/SET_IS_USER_ADMIN`;","// matching/actions.js\r\n\r\nimport DataSvc from '../../common/services/data-svc';\r\nimport * as t from './actionType';\r\nimport { Res } from '../../common/helpers';\r\n\r\nexport const setHomeLoading = (isLoading: boolean) => ({\r\n    type: t.SET_HOME_LOADING,\r\n    payload: isLoading,\r\n});\r\n\r\nexport const setHomeLoggedInStatus = (isLoggedIn: boolean) => ({\r\n    type: t.SET_HOME_LOGGED_IN,\r\n    payload: isLoggedIn\r\n});\r\n\r\nexport const setIsUserReal = (isUserReal: boolean) => ({\r\n    type: t.SET_IS_USER_REAL,\r\n    payload: isUserReal\r\n});\r\n\r\nexport const verifyUserTokenAsync = (token: string) => {\r\n    return (dispatch: any, getState: any) => {\r\n        DataSvc.utilsSvc.verifyUserByRecaptchaToken({ recaptchaToken: token }).then(\r\n            (result: any) => {\r\n                if (result !== Res.success) {\r\n                    dispatch(setIsUserReal(false));\r\n                }\r\n            },\r\n            (error) => { console.error(error); }\r\n        );\r\n    }\r\n}\r\n\r\nexport const setUserStatusAsync = (isUserAdmin: boolean) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setHomeLoading(true));\r\n        if (isUserAdmin !== undefined) {\r\n            dispatch(setHomeLoggedInStatus(true));\r\n        }\r\n        else {\r\n            dispatch(setHomeLoggedInStatus(false));\r\n        }\r\n        //isUserAdmin !== undefined ? dispatch(setHomeLoggedInStatus(true)) : dispatch(setHomeLoggedInStatus(false));\r\n        dispatch(setHomeLoading(false));\r\n    }\r\n}","export default __webpack_public_path__ + \"static/media/net_ball_half.ab9dbdd5.png\";","export default __webpack_public_path__ + \"static/media/net_ball_light.8ca2031d.png\";","import * as React from 'react';\r\nimport { Carousel } from 'react-responsive-carousel';\r\nimport \"../../../../styles/carousel.css\";\r\n\r\ntype OwnProps = {};\r\n\r\nexport type DispatchProps = {};\r\n\r\ntype OwnState = {};\r\n\r\ntype Props = DispatchProps & OwnProps;\r\n\r\nexport default class Testimonials extends React.Component<Props, OwnState> {\r\n\r\n    render() {\r\n        const carouselProps = {\r\n            autoPlay: true,\r\n            interval: 5000,\r\n            centerMode: true,\r\n            centerSlidePercentage: 100,\r\n            infiniteLoop: true,\r\n            showStatus: false,\r\n            showThumbs: false\r\n        }\r\n        return (\r\n            <>\r\n                <section className='testimonials-sec'>\r\n                    <div className='testimonials-sec-txt'>\r\n                        <h5 className='testimonials-sec-txt-title mb-4'>What People are Saying</h5>\r\n                    </div>\r\n                    <div className='testimonials-sec-content'>\r\n                        <Carousel {...carouselProps}>\r\n                            <div className='testimonials-sec-content-card'>\r\n                                <div className='testimonials-sec-content-card-quotes'></div>\r\n                                <div className='testimonials-sec-content-card-text'>There's a certain responsibility that comes with being a EUPATI fellow. We need to use what we have learned to make a real difference! EUPATIConnect means that I am working with trusted partners on topics that matter to patients. We learn from each other and make meaningful solutions together.</div>\r\n                                <div className='testimonials-sec-content-card-profile-image image-joana' />\r\n                                <div className='testimonials-sec-content-card-profile-name'>Joan Jordan</div>\r\n                                <div className='testimonials-sec-content-card-profile-title'>EUPATI Patient Expert</div>\r\n                            </div>\r\n                            <div className='testimonials-sec-content-card'>\r\n                                <div className='testimonials-sec-content-card-quotes'></div>\r\n                                <div className='testimonials-sec-content-card-text'>I had the opportunity to be involved as Patient Advisor in several clinical research projects, especially working on the study protocols and the development of patient relevant material. The involvement of a EUPATI Patient Expert means that any clinical research becomes more focused on the patients’ real needs as well as having the voice of the patient included in all steps.</div>\r\n                                <div className='testimonials-sec-content-card-profile-image image-paola' />\r\n                                <div className='testimonials-sec-content-card-profile-name'>Paola Kruger</div>\r\n                                <div className='testimonials-sec-content-card-profile-title'>EUPATI Patient Expert</div>\r\n                            </div>\r\n                            <div className='testimonials-sec-content-card'>\r\n                                <div className='testimonials-sec-content-card-quotes'></div>\r\n                                <div className='testimonials-sec-content-card-text'>We received some great insights in interviews with EUPATI fellows. Withing 24 hours of placing a request, we were connected to three patients. All interviews were completed in 2 days and gave us a great understanding of the patient perspective.</div>\r\n                                <div className='testimonials-sec-content-card-profile-image image-ankita' />\r\n                                <div className='testimonials-sec-content-card-profile-name'>Dr Ankita Batla</div>\r\n                                <div className='testimonials-sec-content-card-profile-title'>VMLY&Rx | Chief Medical Office Lead-Health Insights and Patient Partnerships</div>\r\n                            </div>\r\n                            <div className='testimonials-sec-content-card'>\r\n                                <div className='testimonials-sec-content-card-quotes'></div>\r\n                                <div className='testimonials-sec-content-card-text'>We had a fantastic response following our request for patient review of our informed consent (ICF) template.  EUPATI fellows had some hugely valuable feedback which will be used to inform our future ICF template to make it clearer and more user friendly.</div>\r\n                                <div className='testimonials-sec-content-card-profile-image image-kay' />\r\n                                <div className='testimonials-sec-content-card-profile-name'>Kay Warner</div>\r\n                                <div className='testimonials-sec-content-card-profile-title'>GSK</div>\r\n                            </div>\r\n                        </Carousel>\r\n                    </div>\r\n                </section>\r\n            </>\r\n        );\r\n    }\r\n}\r\n","export default __webpack_public_path__ + \"static/media/why1.203b1954.png\";","export default __webpack_public_path__ + \"static/media/why2.f9b4b22b.png\";","export default __webpack_public_path__ + \"static/media/why4.de557ce8.png\";","export default __webpack_public_path__ + \"static/media/why5.3a8914dc.png\";","export default __webpack_public_path__ + \"static/media/why6.3431a77d.png\";","export default __webpack_public_path__ + \"static/media/why9.cf5aa1ad.png\";","export const ApplicationName = 'EUPATIConnect';\r\n\r\nexport const QueryParameterNames = {\r\n  ReturnUrl: 'returnUrl',\r\n  Message: 'message'\r\n};\r\n\r\nexport const LogoutActions = {\r\n  LogoutCallback: 'logout-callback',\r\n  Logout: 'logout',\r\n  LoggedOut: 'logged-out'\r\n};\r\n\r\nexport const LoginActions = {\r\n  Login: 'login',\r\n  LoginCallback: 'login-callback',\r\n  LoginFailed: 'login-failed',\r\n  Profile: 'profile',\r\n  Register: 'register'\r\n};\r\n\r\nconst prefix = '/authentication';\r\n\r\nexport const ApplicationPaths = {\r\n  DefaultLoginRedirectPath: '/',\r\n  ApiAuthorizationClientConfigurationUrl: `_configuration/${ApplicationName}`,\r\n  ApiAuthorizationPrefix: prefix,\r\n  //Login: `${prefix}/${LoginActions.Login}`,\r\n  Login: `validate`,\r\n  LoginFailed: `${prefix}/${LoginActions.LoginFailed}`,\r\n  LoginCallback: `${prefix}/${LoginActions.LoginCallback}`,\r\n  Register: `${prefix}/${LoginActions.Register}`,\r\n  Profile: `${prefix}/${LoginActions.Profile}`,\r\n  LogOut: `${prefix}/${LogoutActions.Logout}`,\r\n  LoggedOut: `${prefix}/${LogoutActions.LoggedOut}`,\r\n  LogOutCallback: `${prefix}/${LogoutActions.LogoutCallback}`,\r\n  IdentityRegisterPath: 'Identity/Account/Register',\r\n  IdentityManagePath: 'Identity/Account/Manage/Email'\r\n};\r\n","import { UserManager, WebStorageStateStore } from 'oidc-client';\r\nimport { ApplicationPaths, ApplicationName } from './ApiAuthorizationConstants';\r\n\r\nexport class AuthorizeService {\r\n    _callbacks = [];\r\n    _nextSubscriptionId = 0;\r\n    _user = null;\r\n    _isAuthenticated = false;\r\n    _timesCalled = 0;\r\n\r\n    // By default pop ups are disabled because they don't work properly on Edge.\r\n    // If you want to enable pop up authentication simply set this flag to false.\r\n    _popUpDisabled = true;\r\n\r\n    async isAuthenticated() {\r\n        const user = await this.getUser();\r\n        return !!user;\r\n    }\r\n\r\n    async getUser() {\r\n        if (this._user && this._user.profile) {\r\n            return this._user.profile;\r\n        }\r\n\r\n        await this.ensureUserManagerInitialized();\r\n        let user = await this.userManager.getUser();\r\n\r\n        if (!user) {\r\n            const that = this;\r\n            const promise = new Promise((resolve, reject) => {\r\n                setTimeout(function () {\r\n                    that.userManager.getUser().then(res => {\r\n                        resolve(res);\r\n                    });\r\n                }, 1312);\r\n            });\r\n            user = await promise;\r\n        }\r\n\r\n        return user && user.profile;\r\n    }\r\n\r\n    async getAccessToken() {\r\n        await this.ensureUserManagerInitialized();\r\n        const user = await this.userManager.getUser();\r\n        return user && user.access_token;\r\n    }\r\n\r\n    async signInSilent() {\r\n        await this.ensureUserManagerInitialized();\r\n        try {\r\n            const silentUser = await this.userManager.signinSilent(this.createArguments());\r\n            this.updateState(silentUser);\r\n        } catch (silentError) {\r\n            console.log(\"Silent authentication error: \", silentError);\r\n        }\r\n    }\r\n\r\n    // We try to authenticate the user in three different ways:\r\n    // 1) We try to see if we can authenticate the user silently. This happens\r\n    //    when the user is already logged in on the IdP and is done using a hidden iframe\r\n    //    on the client.\r\n    // 2) We try to authenticate the user using a PopUp Window. This might fail if there is a\r\n    //    Pop-Up blocker or the user has disabled PopUps.\r\n    // 3) If the two methods above fail, we redirect the browser to the IdP to perform a traditional\r\n    //    redirect flow.\r\n    async signIn(state) {\r\n        await this.ensureUserManagerInitialized();\r\n        try {\r\n            const silentUser = await this.userManager.signinSilent(this.createArguments());\r\n            this.updateState(silentUser);\r\n            return this.success(state);\r\n        } catch (silentError) {\r\n            // User might not be authenticated, fallback to popup authentication\r\n            console.log(\"Silent authentication error: \", silentError);\r\n\r\n            try {\r\n                if (this._popUpDisabled) {\r\n                    throw new Error('Popup disabled. Change \\'AuthorizeService.js:AuthorizeService._popupDisabled\\' to false to enable it.')\r\n                }\r\n\r\n                const popUpUser = await this.userManager.signinPopup(this.createArguments());\r\n                this.updateState(popUpUser);\r\n                return this.success(state);\r\n            } catch (popUpError) {\r\n                if (popUpError.message === \"Popup window closed\") {\r\n                    // The user explicitly cancelled the login action by closing an opened popup.\r\n                    return this.error(\"The user closed the window.\");\r\n                } else if (!this._popUpDisabled) {\r\n                    console.log(\"Popup authentication error: \", popUpError);\r\n                }\r\n\r\n                // PopUps might be blocked by the user, fallback to redirect\r\n                try {\r\n                    await this.userManager.signinRedirect(this.createArguments(state));\r\n                    return this.redirect();\r\n                } catch (redirectError) {\r\n                    console.log(\"Redirect authentication error: \", redirectError);\r\n                    return this.error(redirectError);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    async completeSignIn(url) {\r\n        try {\r\n            await this.ensureUserManagerInitialized();\r\n            const user = await this.userManager.signinCallback(url);\r\n            this.updateState(user);\r\n            return this.success(user && user.state);\r\n        } catch (error) {\r\n            console.log('There was an error signing in: ', error);\r\n            return this.error('There was an error signing in.');\r\n        }\r\n    }\r\n\r\n    // We try to sign out the user in two different ways:\r\n    // 1) We try to do a sign-out using a PopUp Window. This might fail if there is a\r\n    //    Pop-Up blocker or the user has disabled PopUps.\r\n    // 2) If the method above fails, we redirect the browser to the IdP to perform a traditional\r\n    //    post logout redirect flow.\r\n    async signOut(state) {\r\n        await this.ensureUserManagerInitialized();\r\n        try {\r\n            if (this._popUpDisabled) {\r\n                throw new Error('Popup disabled. Change \\'AuthorizeService.js:AuthorizeService._popupDisabled\\' to false to enable it.')\r\n            }\r\n\r\n            await this.userManager.signoutPopup(this.createArguments());\r\n            this.updateState(undefined);\r\n            return this.success(state);\r\n        } catch (popupSignOutError) {\r\n            console.log(\"Popup signout error: \", popupSignOutError);\r\n            try {\r\n                await this.userManager.signoutRedirect(this.createArguments(state));\r\n                return this.redirect();\r\n            } catch (redirectSignOutError) {\r\n                console.log(\"Redirect signout error: \", redirectSignOutError);\r\n                return this.error(redirectSignOutError);\r\n            }\r\n        }\r\n    }\r\n\r\n    async completeSignOut(url) {\r\n        await this.ensureUserManagerInitialized();\r\n        try {\r\n            const response = await this.userManager.signoutCallback(url);\r\n            this.updateState(null);\r\n            return this.success(response && response.data);\r\n        } catch (error) {\r\n            console.log(`There was an error trying to log out '${error}'.`);\r\n            return this.error(error);\r\n        }\r\n    }\r\n\r\n    updateState(user) {\r\n        this._user = user;\r\n        this._isAuthenticated = !!this._user;\r\n        this.notifySubscribers();\r\n    }\r\n\r\n    subscribe(callback) {\r\n        this._callbacks.push({ callback, subscription: this._nextSubscriptionId++ });\r\n        return this._nextSubscriptionId - 1;\r\n    }\r\n\r\n    unsubscribe(subscriptionId) {\r\n        const subscriptionIndex = this._callbacks\r\n            .map((element, index) => element.subscription === subscriptionId ? { found: true, index } : { found: false })\r\n            .filter(element => element.found === true);\r\n        if (subscriptionIndex.length !== 1) {\r\n            throw new Error(`Found an invalid number of subscriptions ${subscriptionIndex.length}`);\r\n        }\r\n\r\n        this._callbacks.splice(subscriptionIndex[0].index, 1);\r\n    }\r\n\r\n    notifySubscribers() {\r\n        for (let i = 0; i < this._callbacks.length; i++) {\r\n            const callback = this._callbacks[i].callback;\r\n            callback();\r\n        }\r\n    }\r\n\r\n    createArguments(state) {\r\n        return { useReplaceToNavigate: true, data: state };\r\n    }\r\n\r\n    error(message) {\r\n        return { status: AuthenticationResultStatus.Fail, message };\r\n    }\r\n\r\n    success(state) {\r\n        return { status: AuthenticationResultStatus.Success, state };\r\n    }\r\n\r\n    redirect() {\r\n        return { status: AuthenticationResultStatus.Redirect };\r\n    }\r\n\r\n    async ensureUserManagerInitialized() {\r\n        if (this.userManager !== undefined) {\r\n            return;\r\n        }\r\n\r\n        let response = await fetch(ApplicationPaths.ApiAuthorizationClientConfigurationUrl);\r\n        if (!response.ok) {\r\n            throw new Error(`Could not load settings for '${ApplicationName}'`);\r\n        }\r\n\r\n        let settings = await response.json();\r\n        settings.automaticSilentRenew = true;\r\n        settings.includeIdTokenInSilentRenew = true;\r\n        settings.userStore = new WebStorageStateStore({\r\n            prefix: ApplicationName\r\n        });\r\n\r\n        this.userManager = new UserManager(settings);\r\n\r\n        this.userManager.events.addUserSignedOut(async () => {\r\n            await this.userManager.removeUser();\r\n            this.updateState(undefined);\r\n        });\r\n    }\r\n\r\n    static get instance() { return authService }\r\n}\r\n\r\nconst authService = new AuthorizeService();\r\n\r\nexport default authService;\r\n\r\nexport const AuthenticationResultStatus = {\r\n    Redirect: 'redirect',\r\n    Success: 'success',\r\n    Fail: 'fail'\r\n};\r\n","import React, { useState, FC, useContext } from 'react';\r\nimport authService from '../../api-authorization/AuthorizeService';\r\nimport { Roles } from '../helpers';\r\n\r\ninterface IAuthenticationContext {\r\n    isUserAdmin: boolean;\r\n    userIdentity: string;\r\n    authenticateUser?: () => void;\r\n}\r\n\r\nconst defaultState = {\r\n    isUserAdmin: false,\r\n    userIdentity: ''\r\n};\r\n\r\nconst AuthenticationContext = React.createContext<IAuthenticationContext>(defaultState);\r\n\r\nexport default AuthenticationContext;\r\n\r\nexport const AuthenticationProvider: FC = ({ children }) => {\r\n    const [isUserAdmin, setIsUserAdmin] = useState<any>(undefined);\r\n    const [userIdentity, setUserIdentity] = useState<string>('');\r\n\r\n    const authenticateUser = () => {\r\n        //  res.sub ==> current user id\r\n        authService.getUser().then(res => {\r\n            if (res === undefined || res === null) { return setIsUserAdmin(null); }\r\n            switch (res.role.toUpperCase() === Roles.Admin) {\r\n                case true:\r\n                    setIsUserAdmin(true);\r\n                    setUserIdentity(res.sub);\r\n                    break;\r\n                case false:\r\n                    setIsUserAdmin(false);\r\n                    setUserIdentity(res.sub);\r\n                    break;\r\n            }\r\n        })\r\n    };\r\n\r\n    return (\r\n        <AuthenticationContext.Provider\r\n            value={{\r\n                isUserAdmin: isUserAdmin,\r\n                userIdentity: userIdentity,\r\n                authenticateUser: authenticateUser\r\n            }}\r\n        >\r\n            {children}\r\n        </AuthenticationContext.Provider>\r\n    );\r\n};\r\n\r\nexport const useAuthenticationContext = () => useContext(AuthenticationContext);","import * as React from 'react';\r\nimport { Button, Card, Form } from 'react-bootstrap';\r\nimport { withRouter } from 'react-router';\r\nimport EupatiLoader from '../../../common/static/loading-animation/loader';\r\nimport { State } from '../model';\r\nimport '../style.scss';\r\nimport researcher from '../../../../images/researcher.png';\r\nimport patient from '../../../../images/patient.png';\r\nimport { GoogleReCaptcha } from 'react-google-recaptcha-v3';\r\nimport { FAIL_AUTH_MSG, ADMIN_ACCESS_DENIED_MSG } from '../../../common/helpers/messages';\r\nimport imgRoadmap from '../../../../images/patient-engagement-tools/roadmap.png';\r\nimport imgGuidances from '../../../../images/patient-engagement-tools/guidances.png';\r\nimport imgParadigmTools from '../../../../images/patient-engagement-tools/paradigm_tools.png';\r\nimport imgEngagementSeparator from '../../../../images/patient-engagement-tools/engagement_separator.png';\r\nimport imgFaqSeparator from '../../../../images/faq/faq_separator.png';\r\nimport imgFaqHowDoesWork from '../../../../images/faq/how_does_work.png';\r\nimport imgFaqWhatIsEupati from '../../../../images/faq/what_is_eupati.png';\r\nimport imgNetBall from '../../../../images/net_ball.png';\r\nimport imgNetBallHalf from '../../../../images/net_ball_half.png';\r\nimport imgNetBallLight from '../../../../images/net_ball_light.png';\r\nimport imgNetBallPartial from '../../../../images/net_ball_partial.png';\r\nimport Testimonials from './testimonials';\r\nimport imgWhy1 from '../../../../images/why-eupati/why1.png';\r\nimport imgWhy2 from '../../../../images/why-eupati/why2.png';\r\nimport imgWhy3 from '../../../../images/why-eupati/why3.png';\r\nimport imgWhy4 from '../../../../images/why-eupati/why4.png';\r\nimport imgWhy5 from '../../../../images/why-eupati/why5.png';\r\nimport imgWhy6 from '../../../../images/why-eupati/why6.png';\r\nimport imgWhy7 from '../../../../images/why-eupati/why7.png';\r\nimport imgWhy8 from '../../../../images/why-eupati/why8.png';\r\nimport imgWhy9 from '../../../../images/why-eupati/why9.png';\r\nimport { toast } from 'react-toastify';\r\nimport AuthenticationContext from '../../../common/static/auth-context';\r\nimport { faCheck } from '@fortawesome/fontawesome-free-solid';\r\nimport TinyMCEditor from '../../../common/static/tinymce-editor';\r\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\ntype OwnProps = {};\r\n\r\nexport type DispatchProps = {\r\n    setIsUserReal: (token: string) => void;\r\n    setUserStatus: (isAdmin: boolean) => void;\r\n};\r\n\r\ntype Props = State & DispatchProps & OwnProps;\r\n\r\ntype OwnState = {};\r\n\r\nexport default class ComponentRoot extends React.Component<Props, OwnState> {\r\n    static contextType = AuthenticationContext;\r\n    componentDidMount() {\r\n        if (this.context.isUserAdmin === null || this.context.isUserAdmin === undefined) {\r\n            this.context.authenticateUser();\r\n        }\r\n        this.props.setUserStatus(this.context.isUserAdmin);\r\n    }\r\n\r\n    returnProperIconType(icon: any) {\r\n        return icon as IconProp;\r\n    }\r\n\r\n    render() {\r\n\r\n        let mainComponent: any;\r\n        let whyComponent: any;\r\n        let noteComponent: any;\r\n        let statsComponent: any;\r\n        let patientEngagementComponent: any;\r\n        let testimonialComponent: any;\r\n        let faqComponent: any;\r\n\r\n        let loadingComponent = (\r\n            <div className='loader-wrapper'>\r\n                <EupatiLoader />\r\n            </div>\r\n        );\r\n\r\n        let PatientBtn = withRouter(({ history }) => (\r\n            <Button\r\n                variant='primary'\r\n                type='submit'\r\n                className='card-p-btn'\r\n                id='pt-home-btn'\r\n                onClick={() => {\r\n                    if (!this.props.isUserReal) {\r\n                        toast.error(FAIL_AUTH_MSG);\r\n                        return history.push('/');\r\n                    }\r\n\r\n                    switch (this.context.isUserAdmin) {\r\n                        case true:\r\n                            toast.error(ADMIN_ACCESS_DENIED_MSG);\r\n                            return history.push('/');\r\n                        case false:\r\n                            return history.push({ pathname: '/patient', state: { isUserPatient: (this.context.isUserAdmin !== undefined && this.context.isUserAdmin !== null), userId: this.context.userIdentity } });\r\n                        default:\r\n                            window.location.href = \"/validate\";\r\n                            break;\r\n                    }\r\n                }}\r\n            >\r\n                View Your Profile\r\n            </Button>\r\n        ));\r\n\r\n        let ResearcherBtn = withRouter(({ history }) => (\r\n            <Button\r\n                variant='primary'\r\n                type='submit'\r\n                className='card-r-btn'\r\n                id='res-home-btn'\r\n                onClick={() => {\r\n                    if (!this.props.isUserReal) {\r\n                        toast.error(FAIL_AUTH_MSG);\r\n                        return history.push('/');\r\n                    }\r\n\r\n                    history.push('/pricing');\r\n                }}\r\n            >\r\n                Connect Now\r\n            </Button>\r\n        ));\r\n\r\n        if (this.props.isLoading) {\r\n            mainComponent = loadingComponent;\r\n            whyComponent = null;\r\n            noteComponent = null;\r\n            statsComponent = null;\r\n            patientEngagementComponent = null;\r\n            testimonialComponent = null;\r\n        }\r\n        else {\r\n            mainComponent = (\r\n                <>\r\n                    <GoogleReCaptcha action='homePage' onVerify={token => this.props.setIsUserReal(token)} />\r\n\r\n                    <section className='upper-sec'>\r\n                        {/* <img className='upper-sec-img' src={upperSectionBg} /> */}\r\n                        <div className='upper-sec-txt'>\r\n                            <h5 className='upper-sec-txt-title mb-4'>EUPATIConnect</h5>\r\n                            <p className='upper-sec-txt-para'>\r\n                                Bringing EUPATI Patient Experts and researchers together\r\n                            </p>\r\n                        </div>\r\n\r\n                    </section>\r\n                    <section className='mid-sec'></section>\r\n                    <section className='lower-sec'>\r\n                        <div id='home-cards-container' className='row g-3 justify-content-center'>\r\n                            <Form.Group className='col-xs-auto mb-3'>\r\n                                <Card style={{ width: '20rem', boxShadow: 'rgb(0 0 0 / 20%) -4px 4px 8px 0px' }} className='left'>\r\n                                    <div className='card-img'>\r\n                                        <Card.Img variant=\"top\" src={researcher} />\r\n                                    </div>\r\n                                    <Card.Body>\r\n                                        <Card.Title style={{ textAlign: 'center' }}>Researcher</Card.Title>\r\n                                        <Card.Text className='mb-4'>\r\n                                            Would you like to involve a EUPATI Patient Expert in your patient engagement initiative or opportunity?\r\n                                        </Card.Text>\r\n                                        <Form.Group style={{ textAlign: 'center', margin: '0' }}>\r\n                                            <ResearcherBtn />\r\n                                        </Form.Group>\r\n                                    </Card.Body>\r\n                                </Card>\r\n                            </Form.Group>\r\n\r\n                            <Form.Group className='col-xs-auto mb-3'>\r\n                                <Card style={{ width: '20rem', boxShadow: 'rgb(0 0 0 / 20%) -4px 4px 8px 0px' }}>\r\n                                    <div className='card-img'>\r\n                                        <Card.Img variant=\"top\" src={patient} />\r\n                                    </div>\r\n                                    <Card.Body>\r\n                                        <Card.Title style={{ textAlign: 'center' }}>EUPATI Patient Expert</Card.Title>\r\n                                        <Card.Text className='mb-4'>\r\n                                            Update your profile to share your knowledge and participate in patient engagement opportunities today.\r\n                                        </Card.Text>\r\n                                        <Form.Group style={{ textAlign: 'center', margin: '0 0 2px 0' }}>\r\n                                            <PatientBtn />\r\n                                        </Form.Group>\r\n                                    </Card.Body>\r\n                                </Card>\r\n                            </Form.Group>\r\n                        </div>\r\n                    </section>\r\n\r\n                </>\r\n            )\r\n        }\r\n\r\n        if (!this.props.isLoading) {\r\n            whyComponent = (\r\n                <>\r\n                    <section className='why-title-sec'>\r\n                        <div className='why-title-sec-txt'>\r\n                            <h5 className='why-title-sec-txt-title mb-4'>Why EUPATIConnect?</h5>\r\n                            <p className='why-title-sec-txt-para'>\r\n                                EUPATIConnect is a place where both EUPATI Patient Experts and researchers can connect, to create mutually beneficial opportunities and to enhance the future of patient engagement.\r\n                            </p>\r\n                        </div>\r\n                    </section>\r\n                    <section className='why-content-sec'>\r\n                        <div className='why-content-sec-panel panel-right'>\r\n                            <div className='why-content-sec-panel-image'>\r\n                                <img className='why-image' src={imgWhy1} />\r\n                            </div>\r\n                            <div className='why-content-sec-panel-content'>\r\n                                <div className='why-content-sec-panel-content-title'>\r\n                                    Large database of EUPATI Fellows\r\n                                </div>\r\n                                <div className='why-content-sec-panel-content-description'>\r\n                                    We can connect you with 200+ EUPATI Patient Experts from over 100+ disease areas. We also have over 300+ EUPATI Open Classroom learners who have expertise in 1 or more EUPATI learning modules.\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                        <div id='small-panel' className='why-content-sec-panel panel-left'>\r\n                            <div className='why-content-sec-panel-content'>\r\n                                <div className='why-content-sec-panel-content-title'>\r\n                                    International Network <br />of EUPATI Fellows\r\n                                </div>\r\n                                <div className='why-content-sec-panel-content-description'>\r\n                                    Our Patient Experts come from over <br />39 number of countries.\r\n                                </div>\r\n                            </div>\r\n                            <div className='why-content-sec-panel-image'>\r\n                                <img className='why-image' src={imgWhy2} />\r\n                            </div>\r\n                        </div>\r\n                        <div className='why-content-sec-panel panel-right'>\r\n                            <div className='why-content-sec-panel-image'>\r\n                                <img className='why-image' src={imgWhy3} />\r\n                            </div>\r\n                            <div className='why-content-sec-panel-content'>\r\n                                <div className='why-content-sec-panel-content-title'>\r\n                                    Proficiency of Language\r\n                                </div>\r\n                                <div className='why-content-sec-panel-content-description'>\r\n                                    Fluency in English is a requirement of the EUPATI training programme therefore our patients have a high degree of fluency in English. However, as our Patient Experts hail from all over the world many also have proficiency in a second or third language.\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                        <div className='why-content-sec-panel panel-left'>\r\n                            <div className='why-content-sec-panel-content'>\r\n                                <div className='why-content-sec-panel-content-title'>\r\n                                    Scientific and Health Literacy\r\n                                </div>\r\n                                <div className='why-content-sec-panel-content-description'>\r\n                                    High level of knowledge of the medicines R&D process coupled with a high level of literacy in health and scientific terms. Our modules include Non-Clinical and Clinical Development, Health Technology Assessment, Regulatory Affairs.\r\n                                </div>\r\n                            </div>\r\n                            <div className='why-content-sec-panel-image'>\r\n                                <img className='why-image' src={imgWhy4} />\r\n                            </div>\r\n                        </div>\r\n                        <div className='why-content-sec-panel panel-right'>\r\n                            <div className='why-content-sec-panel-image'>\r\n                                <img className='why-image' src={imgWhy5} />\r\n                            </div>\r\n                            <div className='why-content-sec-panel-content'>\r\n                                <div className='why-content-sec-panel-content-title'>\r\n                                    Strongly Motivated\r\n                                </div>\r\n                                <div className='why-content-sec-panel-content-description'>\r\n                                    Patients Experts come to EUPATI driven internally by their desire to learn and change the future of patient engagement. As a result, they are strongly motivated to partner with researchers and to provide input, advice and feedback on all aspects of the medicines R&D process.\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                        <div className='why-content-sec-panel panel-left'>\r\n                            <div className='why-content-sec-panel-content'>\r\n                                <div className='why-content-sec-panel-content-title'>\r\n                                    Changing The Future Landscape of Patient Engagement\r\n                                </div>\r\n                                <div className='why-content-sec-panel-content-description'>\r\n                                    Our partners and Patient Experts regularly share their experience of working together on research projects. In turn, these experiences often become case studies within our Patient Expert toolbox, thereby enhancing learning for future generations of Patient Experts to come.\r\n                                </div>\r\n                            </div>\r\n                            <div className='why-content-sec-panel-image'>\r\n                                <img className='why-image' src={imgWhy6} />\r\n                            </div>\r\n                        </div>\r\n                        <div className='why-content-sec-panel panel-right'>\r\n                            <div className='why-content-sec-panel-image'>\r\n                                <img className='why-image' src={imgWhy7} />\r\n                            </div>\r\n                            <div className='why-content-sec-panel-content'>\r\n                                <div className='why-content-sec-panel-content-title'>\r\n                                    Quality of Training\r\n                                </div>\r\n                                <div className='why-content-sec-panel-content-description'>\r\n                                    We pride ourselves on the thorough and rigorous training of the EUPATI Programme. All content has been created via a rigorous multistakeholder (patient, academic and industry) process to ensure the highest standard of patient engagement education.\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                        <div className='why-content-sec-panel panel-left'>\r\n                            <div className='why-content-sec-panel-content'>\r\n                                <div className='why-content-sec-panel-content-title'>\r\n                                    Opportunity to Share Knowledge\r\n                                </div>\r\n                                <div className='why-content-sec-panel-content-description'>\r\n                                    EUPATIConnect provides a unique opportunity for EUPATI Fellows to share their knowledge, advance the patient engagement agenda and demonstrate their availability to be involved in future research opportunities and projects.\r\n                                </div>\r\n                            </div>\r\n                            <div className='why-content-sec-panel-image'>\r\n                                <img className='why-image' src={imgWhy8} />\r\n                            </div>\r\n                        </div>\r\n                        <div className='why-content-sec-panel panel-right'>\r\n                            <div className='why-content-sec-panel-image'>\r\n                                <img className='why-image' src={imgWhy9} />\r\n                            </div>\r\n                            <div className='why-content-sec-panel-content'>\r\n                                <div className='why-content-sec-panel-content-title'>\r\n                                    Building New Connections\r\n                                </div>\r\n                                <div className='why-content-sec-panel-content-description'>\r\n                                    EUPATIConnect provides EUPATI Fellows and Open Classroom learners the opportunity to build new connections as part of the large EUPATI Network.\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </section>\r\n                </>\r\n            );\r\n\r\n            noteComponent = (\r\n                <>\r\n                    <section className='note-sec'>\r\n                        <div className='note-sec-txt'>\r\n                            <h5 className='note-sec-txt-title mb-4'>EUPATI National Platforms with Local Connections</h5>\r\n                            <p className='note-sec-txt-para'>\r\n                                EUPATI has National Platforms in over 23 countries a number of which are currently running their own local versions of the course (Ireland, Italy & The Netherlands). Therefore, if you require specific local expertise, we can also connect you with our local ENPs.\r\n                            </p>\r\n                        </div>\r\n                        <img src={imgNetBallPartial} className='net-ball-partial' />\r\n                    </section>\r\n                </>\r\n            );\r\n\r\n            statsComponent = (\r\n                <>\r\n                    <section className='stats-sec'>\r\n                        <div className='stats-sec-txt'>\r\n                            <h5 className='stats-sec-txt-title mb-5'>Statistics</h5>\r\n                        </div>\r\n                        <div className='stats-sec-content'>\r\n                            <div className='stats-sec-content-stat'>\r\n                                <div className='stats-sec-content-stat-title'>300</div>\r\n                                <div className='stats-sec-content-stat-content'>hours of online training</div>\r\n                            </div>\r\n                            <div className='stats-sec-content-stat'>\r\n                                <div className='stats-sec-content-stat-title'>8 days</div>\r\n                                <div className='stats-sec-content-stat-content'>of intensive classroom training</div>\r\n                            </div>\r\n                            <div className='stats-sec-content-stat'>\r\n                                <div className='stats-sec-content-stat-title'>200+</div>\r\n                                <div className='stats-sec-content-stat-content'>EUPATI Fellows</div>\r\n                            </div>\r\n                            <div className='stats-sec-content-stat'>\r\n                                <div className='stats-sec-content-stat-title'>300+</div>\r\n                                <div className='stats-sec-content-stat-content'>EUPATI Open Classroom Learners</div>\r\n                            </div>\r\n                            <div className='stats-sec-content-stat'>\r\n                                <div className='stats-sec-content-stat-title'>100+</div>\r\n                                <div className='stats-sec-content-stat-content'>disease areas</div>\r\n                            </div>\r\n                            <div className='stats-sec-content-stat'>\r\n                                <div className='stats-sec-content-stat-title'>39</div>\r\n                                <div className='stats-sec-content-stat-content'>number of countries</div>\r\n                            </div>\r\n                            <div className='stats-sec-content-stat'>\r\n                                <div className='stats-sec-content-stat-title'>35</div>\r\n                                <div className='stats-sec-content-stat-content'>of languages spoken</div>\r\n                            </div>\r\n                        </div>\r\n                        <img src={imgNetBallHalf} className='net-ball-stats-right' />\r\n                    </section>\r\n                </>\r\n            );\r\n\r\n            patientEngagementComponent = (\r\n                <>\r\n                    <section className='engagement-sec'>\r\n                        <div className='engagement-sec-separator'>\r\n                            <img src={imgEngagementSeparator} />\r\n                        </div>\r\n                        <div className='engagement-sec-txt'>\r\n                            <h5 className='engagement-sec-txt-title mb-4'>Patient Engagement Tools</h5>\r\n                            <p className='engagement-sec-txt-para'>\r\n                                Looking for further information on how to engage patients in your project? Check out our patient engagement tools below\r\n                            </p>\r\n                        </div>\r\n                        <div className='engagement-sec-content'>\r\n                            <a href='https://toolbox.eupati.eu/resources-guidance/patient-engagement-roadmap/' target='_blank'>\r\n                                <div className='engagement-sec-content-card'>\r\n                                    <img src={imgRoadmap} />\r\n                                    <div className='engagement-sec-content-card-name'>Patient Engagement Roadmap</div>\r\n                                </div>\r\n                            </a>\r\n                            {/* <a href='https://toolbox.eupati.eu/guidance/' target='_blank'> */}\r\n                            <div className='engagement-sec-content-double-card'>\r\n                                <div className='engagement-sec-content-double-card-title'><img src={imgGuidances} /> Guidances</div>\r\n                                <ul>\r\n                                    <li><FontAwesomeIcon icon={this.returnProperIconType(faCheck)} /><div className='engagement-sec-content-double-card-item'><a href='https://toolbox.eupati.eu/guidance/' target='_blank'>EUPATI Patient Engagement Guidances</a></div></li>\r\n                                    <li><FontAwesomeIcon icon={this.returnProperIconType(faCheck)} /><div className='engagement-sec-content-double-card-item'><a href='https://imi-paradigm.eu/petoolbox/' target='_blank'>PARADIGM Tools</a></div></li>\r\n                                    <li><FontAwesomeIcon icon={this.returnProperIconType(faCheck)} /><div className='engagement-sec-content-double-card-item'><a href='https://pemsuite.org/legal-and-contractual-tools/' target='_blank'>PFMD Legal and Contracting Tools</a></div></li>\r\n                                    <li><FontAwesomeIcon icon={this.returnProperIconType(faCheck)} /><div className='engagement-sec-content-double-card-item'><a href='https://pemsuite.org/fmv/' target='_blank'>PFMD Remuneration and Fair Market Value tools</a></div></li>\r\n                                </ul>\r\n                            </div>\r\n                            {/* </a> */}\r\n                            {/* <a href='https://imi-paradigm.eu/' target='_blank'>\r\n                                <div className='engagement-sec-content-card'>\r\n                                    <img src={imgParadigmTools} />\r\n                                    <div className='engagement-sec-content-card-name'>Paradigm Tools</div>\r\n                                </div>\r\n                            </a> */}\r\n                        </div>\r\n                        <img src={imgNetBallLight} className='net-ball-stats-left' />\r\n                    </section>\r\n                </>\r\n            );\r\n\r\n            testimonialComponent = <Testimonials />;\r\n\r\n            faqComponent = (\r\n                <>\r\n                    <section className='faq-sec'>\r\n                        <div className='faq-sec-separator'>\r\n                            <img src={imgFaqSeparator} />\r\n                        </div>\r\n                        <div className='faq-sec-txt'>\r\n                            <h5 className='faq-sec-txt-title mb-4'>FAQ</h5>\r\n                            {/* <p className='faq-sec-txt-para'>\r\n                                Looking for further information on how to engage patients in your project? Check out our patient engagement tools below\r\n                            </p> */}\r\n                        </div>\r\n                        <div className='faq-sec-content'>\r\n                            {/* <a href='/faq'>\r\n                                <div className='faq-sec-content-card'>\r\n                                    <img src={imgFaqWhatIsEupati} />\r\n                                    <div className='faq-sec-content-card-name'>What is EUPATIConnect?</div>\r\n                                </div>\r\n                            </a> */}\r\n                            <a href='/faq'>\r\n                                <div className='faq-sec-content-card'>\r\n                                    <img src={imgFaqHowDoesWork} />\r\n                                    <div className='faq-sec-content-card-name'>\r\n                                        <span className='faq-sec-content-card-text'>What is EUPATIConnect?<br />How does it work?</span>\r\n                                    </div>\r\n                                </div>\r\n                            </a>\r\n                        </div>\r\n                        <div className='faq-sec-txt'>\r\n                            <p className='faq-sec-txt-link'>\r\n                                <a href='/faq'>Check our FAQ page</a>\r\n                            </p>\r\n                        </div>\r\n                    </section >\r\n                </>\r\n            );\r\n        }\r\n\r\n        return (\r\n            <>\r\n                {mainComponent}\r\n                {whyComponent}\r\n                {noteComponent}\r\n                {statsComponent}\r\n                {patientEngagementComponent}\r\n                {testimonialComponent}\r\n                {faqComponent}\r\n            </>\r\n        );\r\n    }\r\n}","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","import { default as RootComponent, DispatchProps } from '../components/component-root';\r\nimport * as Constants from '../constants';\r\nimport * as Actions from '../actions';\r\nimport { State } from '../model';\r\nimport { connect } from 'react-redux';\r\n\r\nexport function mapStateToProps(globalState: any) {\r\n    let name = Constants.NAME;\r\n    let pageState = globalState[name] as State;\r\n    return pageState;\r\n}\r\n\r\nexport function mapDispatchToProps(dispatch: any) {\r\n    return {\r\n        setIsUserReal: (token: string) => dispatch(Actions.verifyUserTokenAsync(token)),\r\n        setUserStatus: (isAdmin: boolean) => dispatch(Actions.setUserStatusAsync(isAdmin))\r\n    } as DispatchProps;\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RootComponent);","import { State } from './model';\r\nimport * as t from './actionType'\r\n\r\nconst initialState: State = {\r\n    isLoading: false,\r\n    isLoggedIn: false,\r\n    isUserReal: true\r\n};\r\n\r\nexport default (state = initialState, action: any): State => {\r\n    switch (action.type) {\r\n        case t.SET_HOME_LOADING:\r\n            return setHomeLoading(state, action.payload);\r\n        case t.SET_HOME_LOGGED_IN:\r\n            return setHomeLoggedInStatus(state, action.payload);\r\n        case t.SET_IS_USER_REAL:\r\n            return setIsUserReal(state, action.payload);\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nconst setHomeLoading = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setHomeLoggedInStatus = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isLoggedIn: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setIsUserReal = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isUserReal: val\r\n    } as State;\r\n\r\n    return newState;\r\n}","import * as Actions from './actions';\r\nimport * as Components from './components/index';\r\nimport * as Containers from './containers/index';\r\nimport * as Constants from './constants';\r\nimport Reducer from './reducer';\r\n\r\nexport default {\r\n    actions: Actions,\r\n    components: Components,\r\n    containers: Containers,\r\n    constants: Constants,\r\n    reducer: Reducer\r\n};\r\n\r\nexport const Root = Containers.ComponentRoot;","// constants.ts\r\n\r\nexport const NAME = 'allProjects';","import { NAME } from \"./constants\";\r\n\r\nexport const SET_LOOKUP_DATA = `${NAME}/SET_LOOKUP_DATA`;\r\n\r\nexport const SET_LOADING = `${NAME}/SET_LOADING`;\r\n\r\nexport const SET_PROJECTS = `${NAME}/SET_PROJECTS`;\r\n\r\nexport const SET_PROJECTS_LOADING = `${NAME}/SET_PROJECTS_LOADING`;\r\n\r\nexport const SET_PROJECTS_FILTER = `${NAME}/SET_PROJECTS_FILTER`;\r\n\r\nexport const SET_MATCHED_PATIENTS = `${NAME}/SET_MATCHED_PATIENTS`;\r\n\r\nexport const SET_MATCHED_PATIENTS_LOADING = `${NAME}/SET_MATCHED_PATIENTS_LOADING`;\r\n\r\nexport const SET_PROJECT_DATA = `${NAME}/SET_PROJECT_DATA`;\r\n\r\nexport const SET_PROJECT_LOADING = `${NAME}/SET_PROJECT_LOADING`;\r\n\r\nexport const SET_TEMPLATES_LOADING = `${NAME}/SET_TEMPLATES_LOADING`;\r\n\r\nexport const SET_EMAIL_TEMPLATES = `${NAME}/SET_EMAIL_TEMPLATES`;\r\n\r\nexport const SET_SINGLE_EMAIL_TEMPLATE = `${NAME}/SET_SINGLE_EMAIL_TEMPLATE`;","// model.js\r\n// This is the model of our module state (e.g. return type of the reducer)\r\n\r\nimport { EmailTemplateData, LookUpData } from \"../../../common/models/input-models\";\r\nimport { Patient, Project } from \"../../../common/models/main-models\";\r\n\r\nexport type State = {\r\n    isLoading: boolean;\r\n    lookUpData: LookUpData[];\r\n    isProjectsLoading: boolean;\r\n    projects: Project[];\r\n    filter: number;\r\n    matchedPatients: Patient[];\r\n    isMatchedPatientsLoading: boolean;\r\n    project: Project;\r\n    isProjectLoading: boolean;\r\n    emailTemplates: EmailTemplateData[];\r\n    singleEmailTemplate: EmailTemplateData;\r\n    emailTemplateLoading: boolean;\r\n};\r\n\r\nexport const defaultEmailTemplate = {\r\n    id: '',\r\n    name: '',\r\n    subject: '',\r\n    actions: [],\r\n    htmlContent: ''\r\n} as EmailTemplateData;","import { ProjectStatus } from \"../../../common/helpers\";\r\nimport { EmailTemplateData, LookUpData, PatientSearchData, ProjectPatientData, ProjectStatusData, RequestData } from \"../../../common/models/input-models\";\r\nimport { Patient, Project } from \"../../../common/models/main-models\";\r\nimport DataSvc from \"../../../common/services/data-svc\";\r\nimport * as t from './actionTypes';\r\nimport { defaultEmailTemplate } from \"./model\";\r\n\r\nexport const setLoading = (isLoading: boolean) => ({\r\n    type: t.SET_LOADING,\r\n    payload: isLoading\r\n});\r\n\r\nexport const setLookUpData = (data: LookUpData[]) => ({\r\n    type: t.SET_LOOKUP_DATA,\r\n    payload: data\r\n});\r\n\r\nexport const setProjects = (projects: Project[]) => ({\r\n    type: t.SET_PROJECTS,\r\n    payload: [...projects]\r\n});\r\n\r\nexport const setIsProjectsLoading = (isProjectsLoading: boolean) => ({\r\n    type: t.SET_PROJECTS_LOADING,\r\n    payload: isProjectsLoading\r\n});\r\n\r\nexport const setProjectsFilter = (filter: number) => ({\r\n    type: t.SET_PROJECTS_FILTER,\r\n    payload: filter\r\n});\r\n\r\nexport const setMatchedPatients = (matchedPatients: Patient[]) => ({\r\n    type: t.SET_MATCHED_PATIENTS,\r\n    payload: [...matchedPatients]\r\n});\r\n\r\nexport const setMatchedPatientsLoading = (isMatchedPatientsLoading: boolean) => ({\r\n    type: t.SET_MATCHED_PATIENTS_LOADING,\r\n    payload: isMatchedPatientsLoading\r\n});\r\n\r\nexport const setProjectData = (project: Project) => ({\r\n    type: t.SET_PROJECT_DATA,\r\n    payload: project\r\n});\r\n\r\nexport const setProjectLoading = (isProjectsLoading: boolean) => ({\r\n    type: t.SET_PROJECT_LOADING,\r\n    payload: isProjectsLoading\r\n});\r\n\r\nexport const setEmailTemplates = (emailTemplates: EmailTemplateData[]) => ({\r\n    type: t.SET_EMAIL_TEMPLATES,\r\n    payload: [...emailTemplates]\r\n});\r\n\r\nexport const setSingleEmailTemplate = (singleEmailTemplate: EmailTemplateData) => ({\r\n    type: t.SET_SINGLE_EMAIL_TEMPLATE,\r\n    payload: { ...singleEmailTemplate }\r\n});\r\n\r\nexport const setEmailTemplateLoading = (emailTemplateLoading: boolean) => ({\r\n    type: t.SET_TEMPLATES_LOADING,\r\n    payload: emailTemplateLoading\r\n});\r\n\r\nexport const getLookUpDataAsync = () => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setLoading(true));\r\n        DataSvc.utilsSvc.getLookUpData().then(\r\n            (result: any) => {\r\n                dispatch(setLookUpData(result));\r\n                dispatch(setLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        );\r\n    };\r\n};\r\n\r\nexport const getAllFilteredProjectsAsync = (condition: number) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setIsProjectsLoading(true));\r\n        DataSvc.projectsSvc.getAllProjects().then(\r\n            (result: any) => {\r\n                var projects = [];\r\n                if (condition > 0) {\r\n                    projects = [...result.filter((x: any) => {\r\n                        return x.projectStatusId == condition;\r\n                    })];\r\n                } else {\r\n                    projects = result;\r\n                }\r\n                dispatch(setProjects(projects));\r\n                dispatch(setIsProjectsLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const updateSearchPatients = (searchData?: PatientSearchData, projectName?: string) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setMatchedPatientsLoading(true));\r\n        DataSvc.patientSvc.searchPatients(searchData).then(\r\n            (result: any) => {\r\n                if (typeof result !== 'undefined' && typeof projectName !== 'undefined') {\r\n                    dispatch(setMatchedPatients([...result.filter((pt: Patient) =>\r\n                        !pt.matchedProjects.some((x: any) => x.name.toLowerCase() === projectName.toLowerCase()) &&\r\n                        !pt.confirmedProjects.some((x: any) => x.name.toLowerCase() === projectName.toLowerCase()))])\r\n                    );\r\n                }\r\n                dispatch(setMatchedPatientsLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const getProjectDataByIdAsync = (projectId: string) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setProjectLoading(true));\r\n        DataSvc.projectsSvc.getProjectById(projectId).then(\r\n            (result: any) => {\r\n                if (typeof result !== 'undefined') { dispatch(setProjectData(result)); }\r\n                dispatch(setProjectLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const removePatientFromProjectAsync = (inputModel: ProjectPatientData) => {\r\n    return (dispatch: any, getState: any) => {\r\n        DataSvc.projectsSvc.removePatientFromProject(inputModel).then(\r\n            () => {\r\n                dispatch(getProjectDataByIdAsync(inputModel.projectId));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const addPatientToProjectAsync = (inputModel: ProjectPatientData, searchData?: PatientSearchData, projectName?: string) => {\r\n    return (dispatch: any, getState: any) => {\r\n        DataSvc.projectsSvc.assignPatientToProject(inputModel).then(\r\n            () => {\r\n                dispatch(updateSearchPatients(searchData, projectName));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const changePatientStatusToConfirmAsync = (inputModel: ProjectPatientData) => {\r\n    return (dispatch: any, getState: any) => {\r\n        DataSvc.projectsSvc.changePatientStatusToConfirm(inputModel).then(\r\n            () => {\r\n                dispatch(getProjectDataByIdAsync(inputModel.projectId));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const changeProjectStatusAsync = (id: string, filter: number) => {\r\n    return (dispatch: any, getState: any) => {\r\n        DataSvc.projectsSvc.getProjectById(id).then(\r\n            (result: any) => {\r\n                const inputModel = {\r\n                    projectId: result.id,\r\n                    statusId: filter //=== ProjectStatus.archivedStatusID ? ProjectStatus.inProgressStatusID.toString() : ProjectStatus.archivedStatusID\r\n                } as ProjectStatusData;\r\n                DataSvc.projectsSvc.changeProjectStatus(inputModel).then(\r\n                    () => {\r\n                        dispatch(getAllFilteredProjectsAsync(result.projectStatusId));\r\n                    },\r\n                    (error) => { console.error(error); }\r\n                )\r\n            },\r\n            (error) => { console.error(error); }\r\n        );\r\n    }\r\n}\r\n\r\nexport const submitEmailDataAsync = (data: RequestData) => {\r\n    return (dispatch: any, getState: any) => {\r\n        DataSvc.utilsSvc.sendEmail(data).catch(error => console.error(error));\r\n    }\r\n}\r\n\r\nexport const getAllEmailTemplatesAsync = () => {\r\n    return (dispatch: any, getState: any) => {\r\n        DataSvc.utilsSvc.getAllEmailTemplates().then(\r\n            (result: any) => {\r\n                dispatch(setEmailTemplates(result));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const getEmailTemplateByNameAsync = (name: string) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setEmailTemplateLoading(true));\r\n        switch (name) {\r\n            case 'empty':\r\n                dispatch(setSingleEmailTemplate(defaultEmailTemplate));\r\n                dispatch(setEmailTemplateLoading(false));\r\n                break;\r\n            default:\r\n                DataSvc.utilsSvc.getEmailTemplateByName(name).then(\r\n                    (result: any) => {\r\n                        dispatch(setSingleEmailTemplate(result));\r\n                        dispatch(setEmailTemplateLoading(false));\r\n                    },\r\n                    (error) => { console.error(error); }\r\n                );\r\n        }\r\n    }\r\n}","import React, { useState } from 'react';\r\nimport { Button, Form } from 'react-bootstrap';\r\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faArrowLeft } from '@fortawesome/fontawesome-free-solid';\r\nimport './static.scss';\r\nimport { ProjectPatientData } from '../models/input-models';\r\nimport DataSvc from '../services/data-svc';\r\nimport { toast } from 'react-toastify';\r\nimport { DEL_PT_FROM_PROJ_MSG, ADD_PT_TO_PROJ_MSG } from '../helpers/messages';\r\n\r\ntype OwnProps = {\r\n    leftArrowText: string,\r\n    displayStylesProp: string,\r\n    isForwardArrowAvail: boolean\r\n    patientId?: string,\r\n    projectId?: string,\r\n    rightArrowText?: string,\r\n    forwardBtnHandler?: Function,\r\n}\r\n\r\ntype DispatchProps = {\r\n    backBtnHandler: () => void;\r\n}\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nexport default function EupatiArrowsMenu(props: Props) {\r\n\r\n    const [isBtnDisabled, setIsBtnDisabled] = useState<boolean>(false);\r\n    const [btnCursorProps, setBtnCursorProps] = useState<string>('');\r\n\r\n    function returnProperIconType(icon: any) {\r\n        return icon as IconProp;\r\n    }\r\n\r\n    function removePatientFromProject(inputModel: any) {\r\n        DataSvc.projectsSvc.removePatientFromProject(inputModel).then(\r\n            (result: any) => {\r\n                setIsBtnDisabled(true);\r\n                setBtnCursorProps('not-allowed');\r\n                toast.success(DEL_PT_FROM_PROJ_MSG);\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n\r\n    function assignPatientFromProject(inputModel: any) {\r\n        DataSvc.projectsSvc.assignPatientToProject(inputModel).then(\r\n            (result: any) => {\r\n                setIsBtnDisabled(true);\r\n                setBtnCursorProps('not-allowed');\r\n                toast.success(ADD_PT_TO_PROJ_MSG);\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n\r\n    function rightArrowBtn() {\r\n        let inputModel = {\r\n            projectId: props.projectId,\r\n            patientId: props.patientId\r\n        } as ProjectPatientData;\r\n\r\n        if (typeof inputModel.projectId === 'undefined' &&\r\n            typeof inputModel.patientId === 'undefined') {\r\n            if (props.forwardBtnHandler) { props.forwardBtnHandler(); } // redirect to manual search\r\n        }\r\n        else {\r\n            if (props?.rightArrowText?.toLowerCase().includes('remove')) {\r\n                removePatientFromProject(inputModel);\r\n            } else if (props?.rightArrowText?.toLowerCase().includes('assign')) {\r\n                assignPatientFromProject(inputModel);\r\n            } else if (props?.rightArrowText?.toLowerCase().includes('edit')) {\r\n                //TODO: edit patient info...\r\n                if (props.forwardBtnHandler) { props?.forwardBtnHandler(); }\r\n            }\r\n        }\r\n    }\r\n\r\n    return (\r\n        <Form.Group className='arrows-menu' style={{ display: `${props.displayStylesProp}` }}>\r\n            <Form.Group className='left-arrow-container' onClick={props.backBtnHandler}>\r\n                <FontAwesomeIcon\r\n                    icon={returnProperIconType(faArrowLeft)}\r\n                    className='left-arrow-container-icon'\r\n                />\r\n                <span className='left-arrow-container-text'>{props.leftArrowText.toUpperCase()}</span>\r\n            </Form.Group>\r\n            <Form.Group className='right-arrow-container' style={!props.isForwardArrowAvail ? { visibility: 'hidden' } : { visibility: 'visible' }} onClick={rightArrowBtn}>\r\n                <Button style={{ cursor: btnCursorProps }} disabled={isBtnDisabled} variant='warning' className='right-arrow-container-btn'>{props?.rightArrowText?.toUpperCase()}</Button>\r\n            </Form.Group>\r\n        </Form.Group>\r\n    );\r\n}\r\n","import { IconProp } from '@fortawesome/fontawesome-svg-core';\r\nimport * as React from 'react';\r\nimport { Table } from 'react-bootstrap';\r\nimport { LookUpData } from '../models/input-models';\r\nimport { Patient } from '../models/main-models';\r\nimport EupatiArrowsMenu from './arrows-menu';\r\n\r\ntype OwnProps = {\r\n    patientInfo: Patient;\r\n    lookUpData: LookUpData[];\r\n    leftArrowText: string;\r\n    rightArrowText?: string;\r\n    isForwardArrowAvail: boolean;\r\n    searchData?: any;\r\n    projectName?: string;\r\n    projectId?: string;\r\n    forwardBtnHandler?: Function;\r\n};\r\n\r\nexport type DispatchProps = {\r\n    backBtnHandler: () => void;\r\n};\r\n\r\ntype OwnState = {\r\n    backBtnClicked: boolean;\r\n};\r\n\r\ntype Props = DispatchProps & OwnProps;\r\n\r\nexport default class EupatiPatientDetails extends React.Component<Props, OwnState> {\r\n\r\n\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            backBtnClicked: false\r\n        }\r\n\r\n        this.returnValueById = this.returnValueById.bind(this);\r\n        this.returnJoinedArrayValues = this.returnJoinedArrayValues.bind(this);\r\n        this.returnProperIconType = this.returnProperIconType.bind(this);\r\n        this.toggleField = this.toggleField.bind(this);\r\n    }\r\n\r\n    returnValueById(propName: string, projectPropId: any) {\r\n        let propType = this.props.lookUpData?.find(x => x.name == propName); // projectType\r\n\r\n        let propValue = propType?.data.find(x => x.id == projectPropId);\r\n\r\n        return propValue?.name;\r\n    }\r\n\r\n    returnJoinedArrayValues(fieldProps: any, lookUpDataType: any) {\r\n        let arr = fieldProps?.map((x: any, i: any) => {\r\n            return (\r\n                this.returnValueById(lookUpDataType, x)\r\n            )\r\n        });\r\n\r\n        return arr?.join(', ');\r\n    }\r\n\r\n    returnProperIconType(icon: any) {\r\n        return icon as IconProp;\r\n    }\r\n\r\n    toggleField(val: string) {\r\n        return val !== null && val !== '' ? true : false;\r\n    }\r\n\r\n    render() {\r\n\r\n        let mainComponent = (\r\n            <>\r\n                <tbody>\r\n                    <tr>\r\n                        <th style={{ textAlign: 'center' }}>Patient information</th>\r\n                    </tr>\r\n                    <tr>\r\n                        <td>First name</td>\r\n                        <td>{this.props.patientInfo.firstName}</td>\r\n                    </tr>\r\n                    <tr>\r\n                        <td>Last name</td>\r\n                        <td>{this.props.patientInfo.lastName}</td>\r\n                    </tr>\r\n                    <tr>\r\n                        <td>Phone number</td>\r\n                        <td>{this.props.patientInfo.phoneNumber}</td>\r\n                    </tr>\r\n                    <tr>\r\n                        <td>Email</td>\r\n                        <td>{this.props.patientInfo.email}</td>\r\n                    </tr>\r\n                    <tr>\r\n                        <td>Birth year</td>\r\n                        <td>{this.props.patientInfo.birthYear}</td>\r\n                    </tr>\r\n                    <tr>\r\n                        <td>Gender</td>\r\n                        <td>{this.returnValueById('genderType', this.props.patientInfo.genderTypeId)}</td>\r\n                    </tr>\r\n                    {this.toggleField(this.props?.patientInfo?.genderTypeDescription) &&\r\n                        <tr>\r\n                            <td>Gender description</td>\r\n                            <td>{this.props?.patientInfo?.genderTypeDescription}</td>\r\n                        </tr>\r\n                    }\r\n                    <tr>\r\n                        <td>Country</td>\r\n                        <td>{this.returnValueById('country', this.props.patientInfo.countryId)}</td>\r\n                    </tr>\r\n                    <tr>\r\n                        <td>Languages</td>\r\n                        <td>{this.returnJoinedArrayValues(this.props.patientInfo?.languages, 'language')}</td>\r\n                    </tr>\r\n                    <tr>\r\n                        <td>Countries with experience</td>\r\n                        <td>{this.returnJoinedArrayValues(this.props.patientInfo?.countriesWithExperience, 'countryWithContinents')}</td>\r\n                    </tr>\r\n                    <tr>\r\n                        <td>Is patient org affiliated</td>\r\n                        <td>{this.props.patientInfo.isPOAffiliated ? \"Yes\" : \"No\"}</td>\r\n                    </tr>\r\n                    {this.props.patientInfo.isPOAffiliated &&\r\n                        <tr>\r\n                            <td>Patient organisation</td>\r\n                            <td>{this.props.patientInfo.patientOrganisation}</td>\r\n                        </tr>\r\n                    }\r\n                    <tr>\r\n                        <td>Disease experience</td>\r\n                        <td>{this.props.patientInfo.noDiseaseExpertise ? \"No specific disease experience\" : this.props.patientInfo.diseases.map(d => d.name).join(\", \")}</td>\r\n                    </tr>\r\n                    <tr>\r\n                        <td>Patient experience</td>\r\n                        <td>{this.returnValueById('patientExperiense', this.props.patientInfo?.patientExperienceId)}</td>\r\n                    </tr>\r\n                    <tr>\r\n                        <td>Patient expertise</td>\r\n                        <td>{this.returnJoinedArrayValues(this.props.patientInfo?.patientExpertises, 'expertise')}</td>\r\n                    </tr>\r\n                    {this.toggleField(this.props?.patientInfo?.patientExpertiseDescription) &&\r\n                        <tr>\r\n                            <td>Patient expertise description</td>\r\n                            <td>{this.props?.patientInfo?.patientExpertiseDescription}</td>\r\n                        </tr>\r\n                    }\r\n                    <tr>\r\n                        <td>Project type experiences</td>\r\n                        <td>{this.returnJoinedArrayValues(this.props.patientInfo?.projectTypeExperiences, 'projectType')}</td>\r\n                    </tr>\r\n                    {this.toggleField(this.props?.patientInfo?.projectTypeExperiencesDescription) &&\r\n                        <tr>\r\n                            <td>Project type experience description</td>\r\n                            <td>{this.props?.patientInfo?.projectTypeExperiencesDescription}</td>\r\n                        </tr>\r\n                    }\r\n                    <tr>\r\n                        <td>Is eligible for compensations</td>\r\n                        <td>{this.props.patientInfo.isEligibleForCompensation ? \"Yes\" : \"No\"}</td>\r\n                    </tr>\r\n                    <tr>\r\n                        <td>Is available for voluntary work</td>\r\n                        <td>{this.props.patientInfo.isAvailableForNoCompensation ? \"Yes\" : \"No\"}</td>\r\n                    </tr>\r\n                    <tr>\r\n                        <td>Project preferences</td>\r\n                        <td>{this.returnJoinedArrayValues(this.props.patientInfo?.projectPreferences, 'projectType')}</td>\r\n                    </tr>\r\n                    {this.toggleField(this.props?.patientInfo?.projectPreferenceDescription) &&\r\n                        <tr>\r\n                            <td>Project preferences description</td>\r\n                            <td>{this.props?.patientInfo?.projectPreferenceDescription}</td>\r\n                        </tr>\r\n                    }\r\n                    <tr>\r\n                        <td>Organisation preferences</td>\r\n                        <td>{this.returnJoinedArrayValues(this.props.patientInfo?.organisationPreferences, 'organisationType')}</td>\r\n                    </tr>\r\n                    {this.toggleField(this.props?.patientInfo?.organisationPreferenceDescription) &&\r\n                        <tr>\r\n                            <td>Organisation preference description</td>\r\n                            <td>{this.props?.patientInfo?.organisationPreferenceDescription}</td>\r\n                        </tr>\r\n                    }\r\n                    <tr>\r\n                        <td>Activity preference</td>\r\n                        <td>{this.returnValueById('activityType', this.props.patientInfo?.activityPreferenceId)}</td>\r\n                    </tr>\r\n                    <tr>\r\n                        <td>Other information</td>\r\n                        <td>{this.props.patientInfo.otherInformation}</td>\r\n                    </tr>\r\n                    {/* {this.props.patientInfo.matchedProjects.length > 0 &&\r\n                        <tr>\r\n                            <td>Matched projects</td>\r\n                            <td>{this.props.patientInfo.matchedProjects.map((x: any) => x.name).join(',')}</td>\r\n                        </tr>\r\n                    } */}\r\n                    <tr>\r\n                        <td>Is banned from search</td>\r\n                        <td>{this.props.patientInfo.isBannedFromSearch ? \"Yes\" : \"No\"}</td>\r\n                    </tr>\r\n                </tbody>\r\n            </>\r\n        )\r\n\r\n        return (\r\n            <>\r\n                <EupatiArrowsMenu\r\n                    {...{\r\n                        displayStylesProp: '',\r\n                        leftArrowText: this.props.leftArrowText,\r\n                        rightArrowText: this.props.rightArrowText,\r\n                        backBtnHandler: this.props.backBtnHandler,\r\n                        forwardBtnHandler: this.props.forwardBtnHandler,\r\n                        projectId: this.props.projectId,\r\n                        patientId: this.props.patientInfo.id,\r\n                        isForwardArrowAvail: this.props.isForwardArrowAvail\r\n                    }}\r\n                />\r\n\r\n                <Table striped bordered hover>\r\n                    {mainComponent}\r\n                </Table>\r\n            </>\r\n        );\r\n    }\r\n}","import React, { useEffect, useState } from 'react';\r\nimport Popup from 'reactjs-popup';\r\nimport { Form, Button } from 'react-bootstrap';\r\nimport { useForm, Controller } from \"react-hook-form\";\r\nimport EupatiTextbox from './textbox';\r\nimport EupatiTextarea from './textarea';\r\nimport { Rules } from '../helpers';\r\n//import { EditorState, ContentState } from 'draft-js';\r\n//import { Editor } from 'react-draft-wysiwyg';\r\nimport { toast } from 'react-toastify';\r\nimport './static.scss';\r\nimport 'reactjs-popup/dist/index.css';\r\n//import \"react-draft-wysiwyg/dist/react-draft-wysiwyg.css\";\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faWindowClose, faWindowMinimize, faWindowMaximize } from '@fortawesome/fontawesome-free-regular';\r\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\r\nimport { EmailPatientDetails, LookUpOptions, RequestData } from '../models/input-models';\r\n//import { stateToHTML } from 'draft-js-export-html';\r\nimport { SEND_EMAILS_SUCC_MSG } from '../helpers/messages';\r\n//import htmlToDraft from 'html-to-draftjs';\r\nimport { Patient, Project } from '../models/main-models';\r\nimport { EmailTemplateData } from '../models/input-models';\r\nimport EupatiDropdown from './dropdown';\r\nimport EupatiLoader from './loading-animation/loader';\r\nimport { Editor } from '@tinymce/tinymce-react';\r\nconst escape_quotes = require('escape-quotes');\r\n\r\ntype OwnProps = {\r\n    recipients: string;\r\n    project: Project;\r\n    btnText: string;\r\n    emailTemplates: EmailTemplateData[];\r\n    dropdownValues: LookUpOptions[];\r\n    singleEmailTemplate: EmailTemplateData;\r\n    emailTemplateLoading: boolean;\r\n    matchedPatients: Patient[];\r\n};\r\n\r\ntype DispatchProps = {\r\n    submitRequest: (reqData: RequestData) => void;\r\n    resetValues: () => void;\r\n    returnLookUpValueByTypeAndId: (propName: string, projectPropId: number) => string | undefined;\r\n    getAllEmailTemplates: () => void;\r\n    selectTemplateByIndex: (index: number) => void;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nexport default function EmailModalPopup(props: Props) {\r\n\r\n    const { handleSubmit, reset, control, watch, formState: { errors } } = useForm();\r\n\r\n    const [isMaxSize, setIsMaxSize] = useState<boolean>(false);\r\n    const [singleTemplateData, setSingleTemplateData] = useState<EmailTemplateData>({ ...props.singleEmailTemplate });\r\n\r\n    const onSubmit = (data: any) => {\r\n        toast.success(SEND_EMAILS_SUCC_MSG);\r\n        const targetedPeople = data.recipients.split('\\t');\r\n        props.submitRequest({\r\n            recipients: targetedPeople,\r\n            subject: data.subject,\r\n            content: escape_quotes(returnHtmlContent()),\r\n            projectId: props.project.id,\r\n            patients: props.matchedPatients.filter((x: Patient) => targetedPeople.some((tp: string) => tp === x.email)).map((x: Patient) => { return { id: x.id, email: x.email } as EmailPatientDetails })\r\n        } as RequestData);\r\n    }\r\n\r\n    const handleTemplateOnChange = (e: any) => {\r\n        if (e) {\r\n            //e.target.value --> selected menu option index\r\n            const index = parseInt(e.target.value);\r\n            if (index !== undefined && index !== null) {\r\n                props.selectTemplateByIndex(index);\r\n            }\r\n        }\r\n    }\r\n\r\n    const returnProperIconType = (icon: any) => {\r\n        return icon as IconProp;\r\n    }\r\n\r\n    const returnHtmlContent = () => {\r\n        let htmlContent = '';\r\n        if (singleTemplateData.htmlContent !== '') {\r\n            htmlContent = props.singleEmailTemplate.htmlContent === singleTemplateData.htmlContent ? props.singleEmailTemplate.htmlContent : singleTemplateData.htmlContent;\r\n        }\r\n        else {\r\n            htmlContent = props.singleEmailTemplate.htmlContent;\r\n        }\r\n\r\n        return htmlContent;\r\n    }\r\n\r\n    // const returnSelectedDropdownOption = () => {\r\n    //     if (templateIndex !== undefined && templateIndex !== null) {\r\n    //         return props.dropdownValues.filter((x: LookUpOptions) => x.id === templateIndex);\r\n    //     }\r\n    // }\r\n\r\n    const handleEditorChange = (content: any) => {\r\n        if (content) {\r\n            const updatedHtmlContent = Object.assign(props.singleEmailTemplate, { htmlContent: escape_quotes(content) });\r\n            setSingleTemplateData({ ...updatedHtmlContent });\r\n        }\r\n    }\r\n\r\n    return (\r\n        <Popup className={`${!isMaxSize ? 'modal' : 'modal max-size'}`} trigger={<Button className=\"button\"> {props.btnText} </Button>} modal>\r\n            {(close: any) => (\r\n                <Form onSubmit={handleSubmit(onSubmit)} onFocus={(e) => e.stopPropagation()} >\r\n                    <Form.Group className='modal-header'>\r\n                        <span className='modal-header-title'>New Message</span>\r\n                        <div className='modal-header-icons'>\r\n                            <div className='modal-header-icons-ext' onClick={() => { close(); reset(); props.selectTemplateByIndex(-1); }}>\r\n                                <FontAwesomeIcon icon={returnProperIconType(faWindowClose)} />\r\n                            </div>\r\n                            <div className='modal-header-icons-max'>\r\n                                <FontAwesomeIcon icon={returnProperIconType(faWindowMaximize)} onClick={() => setIsMaxSize(!isMaxSize)} />\r\n                            </div>\r\n                            <div className='modal-header-icons-min' onClick={close}>\r\n                                <FontAwesomeIcon icon={returnProperIconType(faWindowMinimize)} />\r\n                            </div>\r\n                        </div>\r\n                    </Form.Group>\r\n                    <div className='modal-content-wrapper'>\r\n                        <Form.Group className='modal-recipients'>\r\n                            <Form.Label className='modal-recipients-title'>Bcc recipients</Form.Label>\r\n                            <Controller\r\n                                name='recipients'\r\n                                control={control}\r\n                                defaultValue={props.recipients}\r\n                                rules={Rules.requiredMessage}\r\n                                render={({ field }) =>\r\n                                    <EupatiTextarea\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.recipients?.message,\r\n                                            rowsCount: 1,\r\n                                            placeholderMsg: 'Please select recipient(s)',\r\n                                            isDisabled: true\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n\r\n                        <Form.Group className='modal-subject'>\r\n                            <Form.Label className='modal-subject-title'>Subject</Form.Label>\r\n                            <Controller\r\n                                name='subject'\r\n                                control={control}\r\n                                defaultValue=''\r\n                                rules={Rules.requiredMessage}\r\n                                render={({ field }) =>\r\n                                    <EupatiTextbox\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.subject?.message,\r\n                                            placeholder: 'Please type subject'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n\r\n                        <Form.Group className='modal-templates'>\r\n                            <Form.Label className='modal-templates-title'>Choose template</Form.Label>\r\n                            <Controller\r\n                                name='templates'\r\n                                control={control}\r\n                                //defaultValue={returnSelectedDropdownOption()}\r\n                                rules={Rules.notRequired}\r\n                                render={({ field }) =>\r\n                                    <EupatiDropdown\r\n                                        {...{\r\n                                            ...field,\r\n                                            onChange: handleTemplateOnChange,\r\n                                            errorMsg: errors?.templates?.message,\r\n                                            fieldName: 'templates',\r\n                                            values: props.dropdownValues,\r\n                                            defaultOptionText: 'Select template...'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n\r\n                        <div style={{ padding: '1rem 1rem' }}>\r\n                            {props.emailTemplateLoading ? (\r\n                                <>\r\n                                    <EupatiLoader />\r\n                                </>\r\n                            ) : (\r\n                                <Form.Group id='content-editor' className='modal-content'>\r\n                                    {/* <Controller\r\n                                        name='content'\r\n                                        control={control}\r\n                                        defaultValue={props.singleEmailTemplate.htmlContent}\r\n                                        rules={Rules.requiredMessage}\r\n                                        render={({ field }) =>\r\n                                            <EupatiContentEditor\r\n                                                {...{\r\n                                                    ...field,\r\n                                                    errorMsg: errors?.content?.message,\r\n                                                }}\r\n                                            />\r\n                                        }\r\n                                    /> */}\r\n                                    <Editor\r\n                                        apiKey=\"gi5vdpb46pw329w18n94luc6ne2yimgpjks785wd387s2qvu\"\r\n                                        value={escape_quotes(props.singleEmailTemplate.htmlContent)}\r\n                                        init={{\r\n                                            height: 500,\r\n                                            menubar: false,\r\n                                            convert_urls: true,\r\n                                            relative_urls: false,\r\n                                            remove_script_host: false,\r\n                                            plugins: ['lists'],\r\n                                            toolbar: 'undo redo | ' +\r\n                                                'bold italic | alignleft aligncenter ' +\r\n                                                'alignright alignjustify | bullist numlist outdent indent | ' +\r\n                                                'removeformat',\r\n                                            content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:18px }'\r\n                                        }}\r\n                                        onEditorChange={handleEditorChange}\r\n                                    />\r\n                                </Form.Group>\r\n                            )}\r\n                        </div>\r\n\r\n                    </div>\r\n                    <Form.Group className='modal-btns'>\r\n                        <Button variant='primary' className='modal-btns-save' type='submit'>SEND</Button>\r\n                    </Form.Group>\r\n                </Form>\r\n            )\r\n            }\r\n        </Popup >\r\n    )\r\n};","// Row Selection: https://react-table.tanstack.com/docs/examples/row-selection\r\nimport React from \"react\";\r\n\r\n// @ts-ignore\r\nexport const Check = React.forwardRef(({ indeterminate, ...rest }, ref) => {\r\n    const defaultRef = React.useRef();\r\n    const resolvedRef = ref || defaultRef;\r\n\r\n    React.useEffect(() => {\r\n        // @ts-ignore\r\n        resolvedRef.current.indeterminate = indeterminate;\r\n    }, [resolvedRef, indeterminate]);\r\n\r\n    return (\r\n        <>\r\n            <input\r\n                type=\"checkbox\"\r\n                // @ts-ignore\r\n                ref={resolvedRef}\r\n                {...rest}\r\n            />\r\n        </>\r\n    );\r\n});\r\n","import React, { useEffect, useMemo, useState } from 'react';\r\nimport { Button, Table } from 'react-bootstrap';\r\nimport { useRowSelect, useTable } from 'react-table';\r\nimport { EmailTemplateData, LookUpData, LookUpOptions, PatientSearchData, ProjectPatientData, RequestData } from '../models/input-models';\r\nimport { Patient, Project } from '../models/main-models';\r\nimport EupatiPatientDetails from './patient-details';\r\nimport { toast } from 'react-toastify';\r\nimport { ADD_PT_TO_PROJ_MSG, DEL_PT_FROM_PROJ_MSG, CONFIRM_PATIENT_MSG } from '../helpers/messages';\r\nimport EmailPopupModal from '../static/popup-modal';\r\nimport { Check } from './react-table-checkbox';\r\n\r\ntype OwnProps = {\r\n    matchedPatients: Patient[],\r\n    lookUpData: LookUpData[],\r\n    isPatientProfileClicked: boolean,\r\n    leftArrowText: string,\r\n    rightArrowText: string\r\n    isForwardArrowAvail: boolean,\r\n    leftBtnText: string,\r\n    rightBtnText: string,\r\n    projectId: string,\r\n    projectName: string,\r\n    isManualSearchBtnClicked: boolean,\r\n    patientSearchData?: any,\r\n    project: Project,\r\n    isConfirmed: boolean,\r\n    emailTemplates: EmailTemplateData[],\r\n    singleEmailTemplate: EmailTemplateData,\r\n    emailTemplateLoading: boolean\r\n};\r\n\r\ntype DispatchProps = {\r\n    patientProfileBtnHandler: () => void;\r\n    backToProjectProfile: () => void;\r\n    toggleComponents: (val: string) => void;\r\n    removePatient: (inputModel: ProjectPatientData) => void;\r\n    addPatient: (inputModel: ProjectPatientData, searchData: PatientSearchData, projectName: string) => void;\r\n    updateSearchPatients?: (ptSrchData: any) => void;\r\n    submitRequest?: (data: RequestData) => void;\r\n    changePatientStatus: (inputModel: ProjectPatientData) => void;\r\n    getAllEmailTemplates: () => void;\r\n    getEmailTemplateByName: (name: string) => void;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nexport default function EupatiPatientsGrid(props: Props) {\r\n\r\n    const [patientInfo, setPatientInfo] = useState<any>({});\r\n    const [allTemplates, setAllTemplates] = useState<EmailTemplateData[]>(props.emailTemplates.length > 0 ? [...props.emailTemplates] : []);\r\n    const [dropdownValues, setDropdownValue] = useState<LookUpOptions[]>([]);\r\n\r\n    useEffect(() => {\r\n        if (allTemplates.length > 0) {\r\n            //sort by name alphabetically\r\n            setAllTemplates([...allTemplates.sort((a, b) => a.name.localeCompare(b.name))]);\r\n            //convert templates to dropdown menu options\r\n            templatesToLookUpOptions();\r\n        }\r\n    }, []);\r\n\r\n    let mainComponent: any;\r\n\r\n    const returnLookUpValueByTypeAndId = (propName: string, projectPropId: number) => {\r\n        const propType = props.lookUpData.find((x: any) => x.name == propName); // projectType\r\n        const propValue = propType?.data.find((x: any) => x.id == projectPropId);\r\n        return propValue?.name;\r\n    }\r\n\r\n    function profileBtnHandler(id: any) {\r\n        setPatientInfo(props.matchedPatients.find((x: any) => x.id === id));\r\n        props.patientProfileBtnHandler(); // isPatientProfileClicked:true\r\n        props.toggleComponents('none');\r\n        //window.scrollTo(0, 0);\r\n    }\r\n\r\n    function deleteProjectPatient(inputModel: ProjectPatientData) {\r\n        toast.success(DEL_PT_FROM_PROJ_MSG);\r\n        props.removePatient(inputModel);\r\n    }\r\n\r\n    function addProjectPatient(inputModel: ProjectPatientData) {\r\n        toast.success(ADD_PT_TO_PROJ_MSG);\r\n        props.addPatient(inputModel, props.patientSearchData, props.projectName);\r\n    }\r\n\r\n    function confirmPatient(inputModel: ProjectPatientData) {\r\n        toast.success(CONFIRM_PATIENT_MSG);\r\n        props.changePatientStatus(inputModel);\r\n    }\r\n\r\n    function resetTableSelectedState() {\r\n        toggleAllRowsSelected(false);   // reset tbl state\r\n    }\r\n\r\n    function rightBtnHandler(patientId: any) {\r\n        let inputModel = {\r\n            projectId: props.projectId,\r\n            patientId: patientId\r\n        } as ProjectPatientData;\r\n\r\n        switch (props.rightBtnText.toLowerCase()) {\r\n            case 'remove':\r\n                deleteProjectPatient(inputModel);\r\n                break;\r\n            case 'assign':\r\n                addProjectPatient(inputModel);\r\n                break;\r\n        }\r\n    }\r\n\r\n    function backBtnHandler() {\r\n        setPatientInfo({});\r\n        props.backToProjectProfile(); // isPatientProfileClicked:false\r\n        props.toggleComponents('');\r\n        if (typeof props.updateSearchPatients !== 'undefined') {\r\n            props.updateSearchPatients(props.patientSearchData);\r\n        }\r\n    }\r\n\r\n    function templatesToLookUpOptions() {\r\n        const arr = allTemplates?.map((x: EmailTemplateData, i: number) => {\r\n            return (\r\n                {\r\n                    id: i,\r\n                    name: x.name\r\n                } as LookUpOptions\r\n            )\r\n        });\r\n        setDropdownValue([...arr]);\r\n    }\r\n\r\n    function selectTemplateByIndex(index: number) {\r\n        const selectedTemplate = allTemplates[index];\r\n        if (selectedTemplate !== undefined) {\r\n            props.getEmailTemplateByName(selectedTemplate.name);\r\n        }\r\n        else {\r\n            props.getEmailTemplateByName('empty');\r\n        }\r\n    }\r\n\r\n    // function handleCopyOnClick(e: any) {\r\n    //     e.preventDefault();\r\n    //     const emails = selectedFlatRows.map((row: any) => row.original.email).join(';');\r\n    //     navigator.clipboard.writeText(emails.trim());\r\n    //     toast.success(EMAILS_COPIED_MSG);\r\n    // }\r\n\r\n    const data = useMemo(\r\n        () => props?.matchedPatients.map((x: any, i: any) => {\r\n            return {\r\n                id: x.id,\r\n                name: x.firstName.concat(' ', x.lastName),\r\n                country: returnLookUpValueByTypeAndId('country', x.countryId),\r\n                diseases: x.noDiseaseExpertise ? \"No specific disease experience\" : x.diseases?.map((d: any) => d.name).join(\", \"),\r\n                email: x.email,\r\n                expertises: x.patientExpertises.map((pe: number) => returnLookUpValueByTypeAndId('expertise', pe)).join(\", \")\r\n            }\r\n        }), [props.matchedPatients]\r\n    )\r\n\r\n    const columns = useMemo(\r\n        () => [\r\n            {\r\n                Header: 'Name',\r\n                accessor: 'name'\r\n            },\r\n            {\r\n                Header: 'Country',\r\n                accessor: 'country'\r\n            },\r\n            {\r\n                Header: 'Diseases',\r\n                accessor: 'diseases'\r\n            },\r\n            {\r\n                Header: 'Email',\r\n                accessor: 'email'\r\n            },\r\n            {\r\n                Header: 'Expertises',\r\n                accessor: 'expertises'\r\n            }\r\n        ], []\r\n    )\r\n\r\n    const {\r\n        getTableProps,\r\n        getTableBodyProps,\r\n        headerGroups,\r\n        rows,\r\n        prepareRow,\r\n        //@ts-ignore\r\n        selectedFlatRows,\r\n        //@ts-ignore\r\n        toggleAllRowsSelected\r\n    } = useTable({\r\n        //@ts-ignore\r\n        columns,\r\n        data\r\n    },\r\n        useRowSelect,\r\n        (hooks) => {\r\n            {\r\n                !props.isManualSearchBtnClicked &&\r\n                    hooks.visibleColumns.push((cols) => {\r\n                        return [\r\n                            {\r\n                                id: 'selection',\r\n                                //@ts-ignore\r\n                                Header: (({ getToggleAllRowsSelectedProps }) => (\r\n                                    <Check {...getToggleAllRowsSelectedProps()} />\r\n                                )),\r\n                                //@ts-ignore\r\n                                Cell: ({ row }) => <Check {...row.getToggleRowSelectedProps()} />\r\n                            },\r\n                            ...cols\r\n                        ]\r\n                    })\r\n            }\r\n        }\r\n    )\r\n\r\n    mainComponent = (\r\n        <Table {...getTableProps()} striped bordered hover>\r\n            <thead>\r\n                {headerGroups.map(headerGroup => (\r\n                    <tr {...headerGroup.getHeaderGroupProps()}>\r\n                        {headerGroup.headers.map(col => (\r\n                            <th {...col.getHeaderProps()}>\r\n                                {col.render('Header')}\r\n                            </th>\r\n                        ))}\r\n                    </tr>\r\n                ))}\r\n            </thead>\r\n            <tbody {...getTableBodyProps()}>\r\n                {rows.map(row => {\r\n                    prepareRow(row);\r\n                    return (\r\n                        <tr {...row.getRowProps()}>\r\n                            {row.cells.map(cell => {\r\n                                return (\r\n                                    <td {...cell.getCellProps()}>\r\n                                        {cell.render('Cell')}\r\n                                    </td>\r\n                                )\r\n                            })}\r\n                            <>\r\n                                <td>\r\n                                    <Button\r\n                                        variant=\"info\"\r\n                                        onClick={() => profileBtnHandler(row.original.id)}\r\n                                    >\r\n                                        {props.leftBtnText.toUpperCase()}\r\n                                    </Button>\r\n                                </td>\r\n                                {props.isConfirmed === false &&\r\n                                    <td>\r\n                                        <Button\r\n                                            variant=\"success\"\r\n                                            onClick={() => confirmPatient({ patientId: row.original.id, projectId: props.projectId } as ProjectPatientData)}\r\n                                        >\r\n                                            CONFIRM\r\n                                        </Button>\r\n                                    </td>\r\n                                }\r\n                                <td>\r\n                                    <Button\r\n                                        variant='danger'\r\n                                        onClick={() => rightBtnHandler(row.original.id)}\r\n                                    >\r\n                                        {props.rightBtnText.toUpperCase()}\r\n                                    </Button>\r\n                                </td>\r\n                            </>\r\n                        </tr>\r\n                    )\r\n                })}\r\n            </tbody>\r\n            {/* <pre>\r\n                <code>\r\n                    {JSON.stringify(\r\n                        {\r\n                            selectedFlatRows: selectedFlatRows.map((row: any) => row.original.email),\r\n                        },\r\n                        null,\r\n                        2\r\n                    )}\r\n                </code>\r\n            </pre> */}\r\n        </Table >\r\n    )\r\n\r\n    return (\r\n        <>\r\n            {props.isPatientProfileClicked &&\r\n                <EupatiPatientDetails\r\n                    {...{\r\n                        patientInfo,\r\n                        lookUpData: props.lookUpData,\r\n                        backBtnHandler,\r\n                        //forwardBtnHandler: props.rightArrowText.includes('remove') ? props.removePatient : props.addPatient,\r\n                        projectName: props.projectName,\r\n                        searchData: props.patientSearchData,\r\n                        leftArrowText: props.leftArrowText,\r\n                        rightArrowText: props.rightArrowText,\r\n                        isForwardArrowAvail: props.isForwardArrowAvail,\r\n                        projectId: props.projectId\r\n                    }}\r\n                />\r\n            }\r\n            {!props.isPatientProfileClicked &&\r\n                <>\r\n                    {!props.isManualSearchBtnClicked &&\r\n                        <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'flex-end', marginBottom: '10px' }}>\r\n                            {/* <Button\r\n                                id='copy-emails-btn'\r\n                                onClick={(e) => { handleCopyOnClick(e) }}\r\n                                disabled={selectedFlatRows.length === 0 ? true : false}\r\n                                style={selectedFlatRows.length === 0 ? { cursor: 'not-allowed', margin: '0 10px 0 0' } : { margin: '0 10px 0 0', cursor: 'pointer' }}\r\n                            >\r\n                                COPY SELECTED EMAILS\r\n                            </Button> */}\r\n                            <EmailPopupModal\r\n                                recipients={selectedFlatRows.map((row: any) => row.original.email).join('\\t')}\r\n                                submitRequest={props.submitRequest !== undefined ? props.submitRequest : () => { void 0; }}\r\n                                btnText='Email Patients'\r\n                                resetValues={() => { }}\r\n                                singleEmailTemplate={props.singleEmailTemplate}\r\n                                emailTemplateLoading={props.emailTemplateLoading}\r\n                                project={props.project}\r\n                                returnLookUpValueByTypeAndId={returnLookUpValueByTypeAndId}\r\n                                getAllEmailTemplates={props.getAllEmailTemplates}\r\n                                emailTemplates={props.emailTemplates}\r\n                                selectTemplateByIndex={selectTemplateByIndex}\r\n                                dropdownValues={dropdownValues}\r\n                                matchedPatients={props.matchedPatients}\r\n                            />\r\n                        </div>\r\n                    }\r\n                    {mainComponent}\r\n                </>\r\n            }\r\n        </>\r\n    );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { Button, Form } from 'react-bootstrap';\r\nimport { Controller, useForm } from 'react-hook-form';\r\nimport EupatiTextbox from '../textbox';\r\nimport EupatiPatientsGrid from '../matched-patients-grid';\r\nimport EupatiArrowsMenu from '../arrows-menu';\r\nimport EupatiLoader from '../loading-animation/loader';\r\nimport { LookUpData, PatientSearchData, ProjectPatientData, EmailTemplateData } from '../../models/input-models';\r\nimport './manual-search.scss';\r\nimport EupatiEmailbox from '../emailbox';\r\nimport EupatiDropdown from '../dropdown';\r\nimport EupatiDiseaseAsyncSelect from '../async-select-menu';\r\nimport EupatiMultiselect from '../multiselect';\r\nimport { Patient, Project } from '../../models/main-models';\r\nimport { DiseaseInfo } from '../../models/main-models';\r\n\r\ntype OwnProps = {\r\n    projectId: string,\r\n    displayStylesProp: string,\r\n    isPatientProfileClicked: boolean,\r\n    lookUpData: LookUpData[],\r\n    projectName: string,\r\n    matchedPatients: Patient[],\r\n    isMatchedPatientsLoading: boolean,\r\n    project: Project,\r\n    emailTemplates: EmailTemplateData[],\r\n    singleEmailTemplate: EmailTemplateData;\r\n    emailTemplateLoading: boolean;\r\n};\r\n\r\ntype DispatchProps = {\r\n    toggleComponents: (val: string) => void;\r\n    patientProfileBtnHandler: () => void;\r\n    backToProjectProfile: () => void;\r\n    setMatchedPatients: (searchData: PatientSearchData, projectName: string) => void;\r\n    removePatient: (inputModel: ProjectPatientData) => void;\r\n    addPatient: (inputModel: ProjectPatientData, searchData: PatientSearchData, projectName: string) => void;\r\n    changePatientStatus: (inputModel: ProjectPatientData) => void;\r\n    getAllEmailTemplates: () => void;\r\n    getEmailTemplateByName: (name: string) => void;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\ntype SubmitData = {\r\n    pocFirstName: string,\r\n    pocLastName: string,\r\n    email: string,\r\n    country: number,\r\n    diseases: DiseaseInfo[],\r\n    patientExpertises: number[]\r\n};\r\n\r\nexport default function EupatiManualMatch(props: Props) {\r\n\r\n    const { handleSubmit, control, watch, formState: { errors } } = useForm();\r\n\r\n    const [isSubmitBtnClicked, setIsSubmitBtnClicked] = useState<boolean>(false);\r\n    const [isPatientProfileClicked, setIsPatientProfileClicked] = useState<boolean>(false);\r\n    const [ptSearchData, setPtSearchData] = useState({});\r\n\r\n    const onSubmit = (data: SubmitData) => {\r\n        setIsSubmitBtnClicked(true);\r\n\r\n        const patientSearchData = {\r\n            firstName: data.pocFirstName === undefined ? '' : data.pocFirstName,\r\n            lastName: data.pocLastName === undefined ? '' : data.pocLastName,\r\n            email: data.email === undefined ? '' : data.email,\r\n            countryId: data.country === undefined ? null : data.country,\r\n            diseases: data.diseases === undefined ? [] : data.diseases,\r\n            patientExpertises: data.patientExpertises === undefined ? [] : data.patientExpertises\r\n        } as PatientSearchData;\r\n\r\n        setPtSearchData(patientSearchData);\r\n        updateSearchPatients(patientSearchData);\r\n    }\r\n\r\n    function updateSearchPatients(patientSearchData: PatientSearchData) {\r\n        props.setMatchedPatients(patientSearchData, props.projectName);\r\n    }\r\n\r\n    function findLookUpData(lookUpDataType?: string) {\r\n        if (props.lookUpData &&\r\n            props.lookUpData.length > 0) {\r\n            return props.lookUpData?.filter((x: any) => x.name == lookUpDataType)[0]?.data;\r\n        }\r\n\r\n        return [];\r\n    }\r\n\r\n    function backToManualSearch() {\r\n        setIsPatientProfileClicked(false);\r\n    }\r\n\r\n    function patientProfileBtnHandler() {\r\n        setIsPatientProfileClicked(true);\r\n    }\r\n\r\n    let loadingComp = (\r\n        <EupatiLoader />\r\n    )\r\n\r\n    let patientsGridComp = (\r\n        <EupatiPatientsGrid\r\n            {...{\r\n                matchedPatients: props.matchedPatients,\r\n                lookUpData: props.lookUpData,\r\n                emailTemplates: props.emailTemplates,\r\n                singleEmailTemplate: props.singleEmailTemplate,\r\n                emailTemplateLoading: props.emailTemplateLoading,\r\n                backToProjectProfile: backToManualSearch,\r\n                isPatientProfileClicked: isPatientProfileClicked,\r\n                patientProfileBtnHandler: patientProfileBtnHandler,\r\n                toggleComponents: props.toggleComponents,\r\n                leftArrowText: 'manual search',\r\n                rightArrowText: 'assign to project',\r\n                isForwardArrowAvail: true,\r\n                leftBtnText: 'profile',\r\n                rightBtnText: 'assign',\r\n                projectId: props.projectId,\r\n                updateSearchPatients,\r\n                patientSearchData: ptSearchData,\r\n                projectName: props.projectName,\r\n                addPatient: props.addPatient,\r\n                removePatient: props.removePatient,\r\n                isManualSearchBtnClicked: true,\r\n                project: props.project,\r\n                changePatientStatus: props.changePatientStatus,\r\n                isConfirmed: true,\r\n                getAllEmailTemplates: props.getAllEmailTemplates,\r\n                getEmailTemplateByName: props.getEmailTemplateByName\r\n            }}\r\n        />\r\n    )\r\n\r\n    if (props.isMatchedPatientsLoading) {\r\n        patientsGridComp = loadingComp;\r\n    }\r\n\r\n    return (\r\n        <>\r\n            <Form className='manual' onSubmit={handleSubmit(onSubmit)} style={{ display: `${props.displayStylesProp}` }}>\r\n                <EupatiArrowsMenu\r\n                    {...{\r\n                        displayStylesProp: props.displayStylesProp,\r\n                        leftArrowText: 'project details',\r\n                        rightArrowText: props.projectName,\r\n                        backBtnHandler: props.backToProjectProfile,\r\n                        //forwardBtnHandler: props.backToProjectProfile,\r\n                        isForwardArrowAvail: false\r\n                    }}\r\n                />\r\n                <Form.Group style={{ display: 'flex', justifyContent: 'center' }}>\r\n                    <h4 style={{ margin: 'auto auto 50px auto' }} >Current project - {props.projectName.toUpperCase()}</h4>\r\n                </Form.Group>\r\n                <Form.Group className='manual-info'>\r\n                    <Form.Group className='lcolumn'>\r\n                        <Form.Group className='manual-info-field'>\r\n                            <Form.Label>First name</Form.Label>\r\n                            <Controller\r\n                                control={control}\r\n                                name='pocFirstName'\r\n                                render={({ field }) =>\r\n                                    <EupatiTextbox {...{ ...field, errorMsg: errors?.pocFirstName?.message, placeholder: 'Please type first name' }} />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n\r\n                        <Form.Group className='manual-info-field'>\r\n                            <Form.Label>Surname</Form.Label>\r\n                            <Controller\r\n                                control={control}\r\n                                name='pocLastName'\r\n                                render={({ field }) =>\r\n                                    <EupatiTextbox {...{ ...field, errorMsg: errors?.pocLastName?.message, placeholder: 'Please type last name' }} />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n\r\n                        <Form.Group className='manual-info-field'>\r\n                            <Form.Label>Email</Form.Label>\r\n                            <Controller\r\n                                control={control}\r\n                                name='email'\r\n                                render={({ field }) =>\r\n                                    <EupatiEmailbox {...{ ...field, errorMsg: errors?.email?.message }} />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n\r\n                        <Form.Group className='manual-info-field'>\r\n                            <Form.Label>Therapeutic Areas or Diseases</Form.Label>\r\n                            <Controller\r\n                                name='diseases'\r\n                                control={control}\r\n                                render={({ field }) =>\r\n                                    <EupatiDiseaseAsyncSelect\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.diseases?.message\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n                    </Form.Group>\r\n\r\n                    <Form.Group className='rcolumn'>\r\n\r\n                        <Form.Group className='manual-info-field mb-4'>\r\n                            <Form.Label>Country</Form.Label>\r\n                            <Controller\r\n                                control={control}\r\n                                name='country'\r\n                                render={({ field }) =>\r\n                                    <EupatiDropdown\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.country?.message,\r\n                                            fieldName: 'countries',\r\n                                            values: findLookUpData('country'),\r\n                                            defaultOptionText: 'Please select country...'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n\r\n                        <Form.Group className='manual-info-field'>\r\n                            <Form.Label>Expertises (multiple answers possible)</Form.Label>\r\n                            <Controller\r\n                                control={control}\r\n                                name='patientExpertises'\r\n                                render={({ field }) =>\r\n                                    <EupatiMultiselect\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.patientExpertises?.message,\r\n                                            fieldName: 'patientExpertises',\r\n                                            values: findLookUpData('expertise')\r\n                                        }} />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n\r\n                    </Form.Group>\r\n                </Form.Group>\r\n                <Form.Group id='manual-btn' style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\r\n                    <Button className='sbmt' variant=\"primary\" type='submit'>SEARCH</Button>\r\n                </Form.Group>\r\n            </Form>\r\n            {isSubmitBtnClicked &&\r\n                <>\r\n                    {patientsGridComp}\r\n                </>\r\n            }\r\n        </>\r\n    );\r\n}\r\n","import * as React from 'react';\r\nimport { Table, Form, Button } from 'react-bootstrap';\r\nimport { LookUpData, PatientSearchData, ProjectPatientData, RequestData, EmailTemplateData, LookUpOptions } from '../models/input-models';\r\nimport EupatiLoader from './loading-animation/loader';\r\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\r\nimport EupatiManualMatch from './manual-search/index';\r\nimport EupatiPatientsGrid from './matched-patients-grid';\r\nimport './static.scss';\r\nimport EupatiArrowsMenu from './arrows-menu';\r\nimport { Patient, Project } from '../models/main-models';\r\nimport EmailModalPopup from './popup-modal';\r\nimport { jsPDF } from \"jspdf\";\r\nimport html2canvas from 'html2canvas';\r\n\r\ntype OwnProps = {\r\n    projectId: string;\r\n    lookUpData: LookUpData[];\r\n    patientSearchData?: any;\r\n    matchedPatients: Patient[];\r\n    isMatchedPatientsLoading: boolean;\r\n    isProjectLoading: boolean;\r\n    project: Project;\r\n    emailTemplates: EmailTemplateData[];\r\n    singleEmailTemplate: EmailTemplateData;\r\n    emailTemplateLoading: boolean;\r\n};\r\n\r\ntype OwnState = {\r\n    isManualSearchBtnClicked: boolean;\r\n    isPatientProfileClicked: boolean;\r\n    displayStylesProp: string;\r\n    allTemplates: EmailTemplateData[];\r\n};\r\n\r\ntype DispatchProps = {\r\n    updateSearchPatients?: (ptSrchData: any) => void;\r\n    backToAllProjects: () => void;\r\n    setMatchedPatients: (searchData: PatientSearchData, projectName: string) => void;\r\n    setProjectById: (id: string) => void;\r\n    removePatient: (inputModel: ProjectPatientData) => void;\r\n    addPatient: (inputModel: ProjectPatientData, searchData: PatientSearchData, projectName: string) => void;\r\n    submitRequest: (data: RequestData) => void;\r\n    changePatientStatus: (inputModel: ProjectPatientData) => void;\r\n    getAllEmailTemplates: () => void;\r\n    getEmailTemplateByName: (name: string) => void;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nexport default class EupatiProjectDetails extends React.Component<Props, OwnState> {\r\n\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            isManualSearchBtnClicked: false,\r\n            isPatientProfileClicked: false,\r\n            displayStylesProp: '',\r\n            allTemplates: this.props.emailTemplates.length > 0 ? [...this.props.emailTemplates] : [],\r\n        }\r\n\r\n        this.returnValueById = this.returnValueById.bind(this);\r\n        this.returnProperIconType = this.returnProperIconType.bind(this);\r\n        this.returnJoinedArrayValues = this.returnJoinedArrayValues.bind(this);\r\n        this.manualSearchBtnHandler = this.manualSearchBtnHandler.bind(this);\r\n        this.backToProjectProfile = this.backToProjectProfile.bind(this);\r\n        this.patientProfileBtnHandler = this.patientProfileBtnHandler.bind(this);\r\n        this.toggleComponents = this.toggleComponents.bind(this);\r\n        this.convertDate = this.convertDate.bind(this);\r\n        this.toggleField = this.toggleField.bind(this);\r\n        this.returnLookUpValueByTypeAndId = this.returnLookUpValueByTypeAndId.bind(this);\r\n        this.templatesToLookUpOptions = this.templatesToLookUpOptions.bind(this);\r\n        this.selectTemplateByIndex = this.selectTemplateByIndex.bind(this);\r\n    }\r\n\r\n    componentDidMount() {\r\n        this.props.setProjectById(this.props?.projectId);\r\n        if (this.state.allTemplates.length > 0) {\r\n            //sort by name alphabetically\r\n            this.setState(prevState => ({\r\n                allTemplates: [...prevState.allTemplates.sort((a, b) => a.name.localeCompare(b.name))]\r\n            }));\r\n        }\r\n    }\r\n\r\n    returnValueById(propName: string, projectPropId: number) {\r\n        let propType = this.props.lookUpData.find(x => x.name === propName); // projectType\r\n        let propValue = propType?.data.find(x => x.id === projectPropId);\r\n        return propValue?.name;\r\n    }\r\n\r\n    returnJoinedArrayValues(fieldProps: any, lookUpDataType: any) {\r\n        let arr = fieldProps?.map((x: any, i: any) => {\r\n            return (\r\n                this.returnValueById(lookUpDataType, x)\r\n            )\r\n        });\r\n\r\n        return arr?.join(', ');\r\n    }\r\n\r\n    templatesToLookUpOptions() {\r\n        const arr = this.state.allTemplates?.map((x: EmailTemplateData, i: number) => {\r\n            return (\r\n                {\r\n                    id: i,\r\n                    name: x.name\r\n                } as LookUpOptions\r\n            )\r\n        });\r\n\r\n        return arr;\r\n    }\r\n\r\n    selectTemplateByIndex(index: number) {\r\n        const selectedTemplate = this.state.allTemplates[index];\r\n        if (selectedTemplate !== undefined) {\r\n            this.props.getEmailTemplateByName(selectedTemplate.name);\r\n        }\r\n        else {\r\n            this.props.getEmailTemplateByName('empty');\r\n        }\r\n    }\r\n\r\n    returnProperIconType(icon: any) {\r\n        return icon as IconProp;\r\n    }\r\n\r\n    manualSearchBtnHandler() {\r\n        this.setState({\r\n            isManualSearchBtnClicked: true\r\n        });\r\n    }\r\n\r\n    backToProjectProfile() {\r\n        this.props.setProjectById(this.props?.projectId);\r\n        this.setState({\r\n            isManualSearchBtnClicked: false,\r\n            isPatientProfileClicked: false\r\n        })\r\n    }\r\n\r\n    patientProfileBtnHandler() {\r\n        this.setState({\r\n            isPatientProfileClicked: true\r\n        })\r\n    }\r\n\r\n    toggleComponents(val: string) {\r\n        this.setState({\r\n            displayStylesProp: val\r\n        })\r\n    }\r\n\r\n    convertDate(date: any) {\r\n        if (typeof date === 'undefined') { return }\r\n        date = new Date(date);\r\n        function pad(s: any) { return (s < 10) ? '0' + s : s; }\r\n        return [pad(date.getDate()), pad(date.getMonth() + 1), date.getFullYear()].join('/')\r\n    }\r\n\r\n    toggleField(val: string) {\r\n        return val !== null && val !== '' ? true : false;\r\n    }\r\n\r\n    returnLookUpValueByTypeAndId = (propName: string, projectPropId: number) => {\r\n        const propType = this.props.lookUpData.find((x: any) => x.name == propName); // projectType\r\n        const propValue = propType?.data.find((x: any) => x.id == projectPropId);\r\n        return propValue?.name;\r\n    }\r\n\r\n    downloadPDF() {\r\n        let page = document.getElementById('all-projects-tbl');\r\n        if (page) {\r\n            html2canvas(page)\r\n                .then((canvas) => {\r\n                    const imgData = canvas.toDataURL('image/png');\r\n                    const pdf = new jsPDF();\r\n                    pdf.addImage(imgData, 'JPEG', 0, 0, canvas.width / 12, canvas.height / 14);\r\n                    window.open(pdf.output('bloburl'))\r\n                    //pdf.save(\"EUPATIProject.pdf\");\r\n                })\r\n        }\r\n    }\r\n\r\n    render() {\r\n\r\n        let loadingComponent = (\r\n            <div className='loader-wrapper'>\r\n                <EupatiLoader />\r\n            </div>\r\n        );\r\n\r\n        let mainComponent: any;\r\n\r\n        if (this.props.project.name === '') {\r\n            mainComponent = loadingComponent;\r\n        } else {\r\n            mainComponent = (\r\n                <>\r\n                    <EupatiArrowsMenu\r\n                        {...{\r\n                            displayStylesProp: this.state.displayStylesProp,\r\n                            leftArrowText: 'all projects',\r\n                            rightArrowText: 'manual match',\r\n                            backBtnHandler: this.props.backToAllProjects,\r\n                            forwardBtnHandler: this.manualSearchBtnHandler,\r\n                            isForwardArrowAvail: true,\r\n                        }}\r\n                    />\r\n                    <Form.Group style={{ display: this.state.displayStylesProp === '' ? 'flex' : this.state.displayStylesProp, justifyContent: 'center' }}>\r\n                        <h5 style={{ color: '#F0B72F', fontWeight: 'bold', textDecoration: 'underline' }}>Projects information</h5>\r\n                    </Form.Group>\r\n                    <Table striped bordered hover style={{ display: `${this.state.displayStylesProp}` }}>\r\n                        <tbody>\r\n                            <tr>\r\n                                <td>Name</td>\r\n                                <td>{this.props?.project?.name}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Overview</td>\r\n                                <td>{this.props?.project?.overview}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Type</td>\r\n                                <td>{this.returnValueById('projectType', this.props?.project?.projectTypeId)}</td>\r\n                            </tr>\r\n                            {this.toggleField(this.props?.project?.projectTypeDescription) &&\r\n                                <tr>\r\n                                    <td>Type description</td>\r\n                                    <td>{this.props?.project?.projectTypeDescription}</td>\r\n                                </tr>\r\n                            }\r\n                            <tr>\r\n                                <td>Interaction</td>\r\n                                <td>{this.returnValueById('interactionType', this.props?.project?.interactionTypeId)}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Activity</td>\r\n                                <td>{this.returnValueById('activityType', this.props?.project?.projectActivityId)}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>How many patients are you looking for?</td>\r\n                                <td>{(this.props?.project?.projectNumberOfPatientsNeeded == 0 || this.props?.project?.projectNumberOfPatientsNeeded == undefined) ? '' : this.props?.project?.projectNumberOfPatientsNeeded}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Role and expectations</td>\r\n                                <td>{this.props?.project?.roleAndExpectations}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Start date</td>\r\n                                <td>{this.convertDate(this.props?.project?.startDate)}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>End date</td>\r\n                                <td>{this.convertDate(this.props?.project?.endDate)}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Time required</td>\r\n                                <td>{this.props?.project?.timeRequired}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Is compensation provided </td>\r\n                                <td>{this.props?.project?.isCompensationProvided ? \"Yes\" : \"No\"}</td>\r\n                            </tr>\r\n                            {this.props?.project?.isCompensationProvided &&\r\n                                <tr>\r\n                                    <td>Compensation amout</td>\r\n                                    <td>{this.props?.project?.compensation}</td>\r\n                                </tr>\r\n                            }\r\n                            <tr>\r\n                                <td>Is ThereTravel Reimbursement</td>\r\n                                <td>{this.props?.project?.isThereTravelReimbursement ? \"Yes\" : \"No\"}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Equipment requirements</td>\r\n                                <td>{this.props?.project?.equipmentRequirements}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Response deadline</td>\r\n                                <td>{this.convertDate(this.props?.project?.responseDeadline)}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Price</td>\r\n                                <td>{this.props.project.price}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Plan</td>\r\n                                <td>{this.props.project.plan}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Package</td>\r\n                                <td>{this.props.project.package}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Payment method</td>\r\n                                <td>{this.props.project.paymentMethod}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Disease Experience</td>\r\n                                <td>{this.props?.project?.noDiseaseExpertiseRequired ? \"No specific disease experience is required\" : this.props?.project?.diseases?.map((d: any) => d.name).join(\", \")}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Disease Preference</td>\r\n                                <td>{this.props?.project?.searchDiseaseTherapeuticArea ? \"Match patients in the therapeutic area(s) as well\" : \"Match only from the selected disease(s)\"}</td>\r\n                            </tr>\r\n                            {/* <tr>\r\n                                <td>Disease area</td>\r\n                                <td>{this.props?.project?.diseaseTAName}</td>\r\n                            </tr> */}\r\n                            <tr>\r\n                                <td>Patient expertises</td>\r\n                                <td>{this.returnJoinedArrayValues(this.props?.project?.patientExpertises, 'expertise')}</td>\r\n                            </tr>\r\n                            {this.toggleField(this.props?.project?.patientExpertisesDescription) &&\r\n                                <tr>\r\n                                    <td>Patient expertises description</td>\r\n                                    <td>{this.props?.project?.patientExpertisesDescription}</td>\r\n                                </tr>\r\n                            }\r\n                            <tr>\r\n                                <td>Countries</td>\r\n                                <td>{this.returnJoinedArrayValues(this.props?.project?.countries, 'countryWithContinents')}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Languages</td>\r\n                                <td>{this.returnJoinedArrayValues(this.props?.project?.languages, 'language')}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Other information</td>\r\n                                <td>{this.props?.project?.otherInformation}</td>\r\n                            </tr>\r\n                        </tbody>\r\n                    </Table>\r\n\r\n                    <Form.Group style={{ display: this.state.displayStylesProp === '' ? 'flex' : this.state.displayStylesProp, justifyContent: 'center' }}>\r\n                        <h5 style={{ color: '#F0B72F', fontWeight: 'bold', textDecoration: 'underline' }}>Person of contact</h5>\r\n                    </Form.Group>\r\n                    <Form.Group style={{ display: 'flex', justifyContent: 'flex-end' }}>\r\n                        <EmailModalPopup\r\n                            recipients={this.props?.project?.pocEmail}\r\n                            project={this.props?.project}\r\n                            btnText='Email Researcher'\r\n                            submitRequest={this.props.submitRequest}\r\n                            resetValues={() => { }}\r\n                            singleEmailTemplate={this.props.singleEmailTemplate}\r\n                            emailTemplateLoading={this.props.emailTemplateLoading}\r\n                            returnLookUpValueByTypeAndId={this.returnLookUpValueByTypeAndId}\r\n                            getAllEmailTemplates={this.props.getAllEmailTemplates}\r\n                            emailTemplates={this.state.allTemplates}\r\n                            selectTemplateByIndex={this.selectTemplateByIndex}\r\n                            dropdownValues={this.templatesToLookUpOptions()}\r\n                            matchedPatients={this.props.matchedPatients}\r\n                        />\r\n                    </Form.Group>\r\n                    <Table striped bordered hover style={{ display: `${this.state.displayStylesProp}` }}>\r\n                        <tbody>\r\n                            <tr>\r\n                                <td>First name</td>\r\n                                <td>{this.props?.project?.pocFirstName}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Last name</td>\r\n                                <td>{this.props?.project?.pocLastName}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Organisation</td>\r\n                                <td>{this.props?.project?.pocOrganisation}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Organisation type</td>\r\n                                <td>{this.returnValueById('organisationType', this.props?.project?.pocOrganisationTypeId)}</td>\r\n                            </tr>\r\n                            {this.toggleField(this.props?.project?.pocOrganisationTypeDescription) &&\r\n                                <tr>\r\n                                    <td>Organisation type description</td>\r\n                                    <td>{this.props?.project?.pocOrganisationTypeDescription}</td>\r\n                                </tr>\r\n                            }\r\n                            <tr>\r\n                                <td>Job title</td>\r\n                                <td>{this.props?.project?.pocJobTitle}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Country of origin</td>\r\n                                <td>{this.returnValueById('country', this.props?.project?.pocCountryId)}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Phone number</td>\r\n                                <td>{this.props?.project?.pocPhoneNumber}</td>\r\n                            </tr>\r\n                            <tr>\r\n                                <td>Email</td>\r\n                                <td>{this.props?.project?.pocEmail}</td>\r\n                            </tr>\r\n                        </tbody>\r\n                    </Table>\r\n                    <Form.Group onClick={this.downloadPDF}>\r\n                        <Button className='right-arrow-container-btn'>Download Project Information as PDF</Button>\r\n                    </Form.Group>\r\n                </>\r\n            );\r\n        }\r\n\r\n        return (\r\n            <>\r\n                {!this.state.isManualSearchBtnClicked ? (\r\n                    <>\r\n                        <>\r\n                            {mainComponent}\r\n                        </>\r\n                        {this.props?.project?.matchedPatients?.length > 0 &&\r\n                            <>\r\n                                <Form.Group style={{ display: this.state.displayStylesProp === '' ? 'flex' : this.state.displayStylesProp, justifyContent: 'center', margin: '0', padding: '0' }}>\r\n                                    <h5 style={{ color: '#F0B72F', fontWeight: 'bold', textDecoration: 'underline' }}>Matched patients</h5>\r\n                                </Form.Group>\r\n                                <EupatiPatientsGrid\r\n                                    {...{\r\n                                        matchedPatients: [...this.props?.project?.matchedPatients],\r\n                                        lookUpData: this.props.lookUpData,\r\n                                        emailTemplates: this.props.emailTemplates,\r\n                                        singleEmailTemplate: this.props.singleEmailTemplate,\r\n                                        emailTemplateLoading: this.props.emailTemplateLoading,\r\n                                        patientProfileBtnHandler: this.patientProfileBtnHandler,\r\n                                        backToProjectProfile: this.backToProjectProfile,\r\n                                        isPatientProfileClicked: this.state.isPatientProfileClicked,\r\n                                        toggleComponents: this.toggleComponents,\r\n                                        leftArrowText: 'projects details',\r\n                                        rightArrowText: 'remove from project',\r\n                                        isForwardArrowAvail: true,\r\n                                        leftBtnText: 'profile',\r\n                                        rightBtnText: 'remove',\r\n                                        projectId: this.props?.projectId,\r\n                                        updateSearchPatients: this.props.updateSearchPatients,\r\n                                        patientSearchData: this.props.patientSearchData,\r\n                                        projectName: this.props?.project?.name,\r\n                                        addPatient: this.props.addPatient,\r\n                                        removePatient: this.props.removePatient,\r\n                                        isManualSearchBtnClicked: this.state.isManualSearchBtnClicked,\r\n                                        submitRequest: this.props.submitRequest,\r\n                                        project: this.props.project,\r\n                                        changePatientStatus: this.props.changePatientStatus,\r\n                                        isConfirmed: false,\r\n                                        getAllEmailTemplates: this.props.getAllEmailTemplates,\r\n                                        getEmailTemplateByName: this.props.getEmailTemplateByName\r\n                                    }}\r\n                                />\r\n                            </>\r\n                        }\r\n                        {this.props?.project?.confirmedPatients?.length > 0 &&\r\n                            <>\r\n                                <Form.Group style={{ display: this.state.displayStylesProp === '' ? 'flex' : this.state.displayStylesProp, justifyContent: 'center', margin: '0', padding: '0' }}>\r\n                                    <h5 style={{ color: '#F0B72F', fontWeight: 'bold', textDecoration: 'underline' }}>Confirmed patients</h5>\r\n                                </Form.Group>\r\n                                <EupatiPatientsGrid\r\n                                    {...{\r\n                                        matchedPatients: [...this.props?.project?.confirmedPatients],\r\n                                        lookUpData: this.props.lookUpData,\r\n                                        emailTemplates: this.props.emailTemplates,\r\n                                        singleEmailTemplate: this.props.singleEmailTemplate,\r\n                                        emailTemplateLoading: this.props.emailTemplateLoading,\r\n                                        patientProfileBtnHandler: this.patientProfileBtnHandler,\r\n                                        backToProjectProfile: this.backToProjectProfile,\r\n                                        isPatientProfileClicked: this.state.isPatientProfileClicked,\r\n                                        toggleComponents: this.toggleComponents,\r\n                                        leftArrowText: 'projects details',\r\n                                        rightArrowText: 'remove from project',\r\n                                        isForwardArrowAvail: true,\r\n                                        leftBtnText: 'profile',\r\n                                        rightBtnText: 'remove',\r\n                                        projectId: this.props?.projectId,\r\n                                        updateSearchPatients: this.props.updateSearchPatients,\r\n                                        patientSearchData: this.props.patientSearchData,\r\n                                        projectName: this.props?.project?.name,\r\n                                        addPatient: this.props.addPatient,\r\n                                        removePatient: this.props.removePatient,\r\n                                        isManualSearchBtnClicked: this.state.isManualSearchBtnClicked,\r\n                                        submitRequest: this.props.submitRequest,\r\n                                        project: this.props.project,\r\n                                        changePatientStatus: this.props.changePatientStatus,\r\n                                        isConfirmed: true,\r\n                                        getAllEmailTemplates: this.props.getAllEmailTemplates,\r\n                                        getEmailTemplateByName: this.props.getEmailTemplateByName\r\n                                    }}\r\n                                />\r\n                            </>\r\n                        }\r\n                    </>\r\n                ) : (\r\n                    <>\r\n                        <EupatiManualMatch\r\n                            {...{\r\n                                //matchedPatients: [...this.props?.project?.matchedPatients],\r\n                                projectName: this.props?.project?.name,\r\n                                backToProjectProfile: this.backToProjectProfile,//\r\n                                lookUpData: this.props.lookUpData,\r\n                                emailTemplates: this.props.emailTemplates,\r\n                                singleEmailTemplate: this.props.singleEmailTemplate,\r\n                                emailTemplateLoading: this.props.emailTemplateLoading,\r\n                                isPatientProfileClicked: this.state.isPatientProfileClicked,\r\n                                patientProfileBtnHandler: this.patientProfileBtnHandler,\r\n                                toggleComponents: this.toggleComponents,\r\n                                displayStylesProp: this.state.displayStylesProp,\r\n                                projectId: this.props?.projectId,\r\n                                setMatchedPatients: this.props.setMatchedPatients,\r\n                                matchedPatients: this.props.matchedPatients,\r\n                                isMatchedPatientsLoading: this.props.isMatchedPatientsLoading,\r\n                                addPatient: this.props.addPatient,\r\n                                removePatient: this.props.removePatient,\r\n                                project: this.props.project,\r\n                                changePatientStatus: this.props.changePatientStatus,\r\n                                getAllEmailTemplates: this.props.getAllEmailTemplates,\r\n                                getEmailTemplateByName: this.props.getEmailTemplateByName\r\n                            }}\r\n                        />\r\n                    </>\r\n                )}\r\n            </>\r\n        );\r\n    }\r\n}","import React from 'react';\r\n\r\nexport default function GlobalFilter(props: any) {\r\n    return (\r\n        <span>\r\n            Search:{' '}\r\n            <input\r\n                value={props.filter || \"\"}\r\n                onChange={e => props.setFilter(e.target.value)}\r\n                placeholder='Filter the records...'\r\n                style={{ fontSize: '1.1rem', border: '0' }}\r\n            />\r\n        </span>\r\n    )\r\n}","import React, { useState } from 'react';\r\nimport { Table, Button, Form } from 'react-bootstrap';\r\nimport EupatiProjectDetails from './project-details';\r\nimport { useTable, useGlobalFilter, usePagination, useSortBy } from \"react-table\";\r\nimport { useMemo } from 'react';\r\nimport EupatiDropdown from './dropdown';\r\nimport { LookUpData, PatientSearchData, ProjectPatientData, RequestData, EmailTemplateData, LookUpOptions } from '../models/input-models';\r\nimport { ProjectStatus } from '../helpers';\r\nimport GlobalFilter from './global-filter';\r\nimport './static.scss';\r\nimport { Patient, Project } from '../models/main-models';\r\nimport EupatiLoader from './loading-animation/loader';\r\nimport { toast } from 'react-toastify';\r\nimport { ARCHIVE_PROJ_SUCC_MSG } from '../helpers/messages';\r\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faSortAlphaDown, faSortAlphaUp, faFileExcel } from '@fortawesome/fontawesome-free-solid';\r\nimport { faWindowMinimize } from '@fortawesome/fontawesome-free-regular';\r\nimport { CSVLink } from \"react-csv\";\r\nimport uniqid from 'uniqid';\r\nimport { projectStatus } from '../helpers/status';\r\n\r\ntype OwnProps = {\r\n    lookUpData: LookUpData[],\r\n    projects: Project[],\r\n    projectsFilter: number,\r\n    matchedPatients: Patient[],\r\n    isMatchedPatientsLoading: boolean,\r\n    isProjectLoading: boolean,\r\n    project: Project\r\n    emailTemplates: EmailTemplateData[];\r\n    singleEmailTemplate: EmailTemplateData;\r\n    emailTemplateLoading: boolean;\r\n};\r\n\r\ntype DispatchProps = {\r\n    setProjects: (condition: number) => void;\r\n    setProjectsFilter: (filter: number) => void;\r\n    setMatchedPatients: (searchData: PatientSearchData, projectName: string) => void;\r\n    setProjectById: (id: string) => void;\r\n    removePatient: (inputModel: ProjectPatientData) => void;\r\n    addPatient: (inputModel: ProjectPatientData, searchData: PatientSearchData, projectName: string) => void;\r\n    changeProjectStatus: (id: string, filter: number) => void;\r\n    submitRequest: (data: RequestData) => void;\r\n    changePatientStatus: (inputModel: ProjectPatientData) => void;\r\n    getAllEmailTemplates: () => void;\r\n    getEmailTemplateByName: (name: string) => void;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nconst OUTLINE_PADDING_STYLE = {\r\n    paddingLeft: '1.2rem',\r\n    paddingRight: '1.2rem'\r\n};\r\nconst PRIMARY_PADDING_STYLE = {\r\n    paddingLeft: '1.7rem',\r\n    paddingRight: '1.7rem'\r\n}\r\nexport default function EupatiAllProjectsGrid(props: Props) {\r\n\r\n    const [isDetailsBtnClicked, setIsDetailsBtnClicked] = useState<boolean>(false);\r\n    const [clickedProjectId, setClickedProjectId] = useState<string>('');\r\n\r\n    const detailsBtnHandler = (id: any) => {\r\n        setClickedProjectId(id);\r\n        props.setProjectById(id);\r\n        setIsDetailsBtnClicked(true);\r\n    }\r\n\r\n    const changeProjectStatusHandler = (id: any, filter: number) => {\r\n        toast.success(ARCHIVE_PROJ_SUCC_MSG);\r\n        props.changeProjectStatus(id, filter);\r\n    }\r\n\r\n    const backBtnHandler = () => {\r\n        setClickedProjectId('');\r\n        setIsDetailsBtnClicked(false);\r\n    }\r\n\r\n    const returnValueById = (propName: string, projectPropId: number) => {\r\n        let propType = props.lookUpData.find((x: any) => x.name == propName); // projectType\r\n        let propValue = propType?.data.find((x: any) => x.id == projectPropId);\r\n        return propValue?.name;\r\n    }\r\n\r\n    function findLookUpData(lookUpDataType?: string) {\r\n        if (props.lookUpData &&\r\n            props.lookUpData.length > 0) {\r\n            var data = props.lookUpData?.filter((x: any) => x.name == lookUpDataType)[0]?.data;\r\n            if (lookUpDataType == \"projectStatus\" && data.findIndex(d => d.id == 0) == -1)//add \"All Statuses option in the filter dropdown\"\r\n            {\r\n                data.unshift({\r\n                    id: 0, name: \"Show All\"\r\n                } as LookUpOptions)\r\n            }\r\n\r\n            return data;\r\n        }\r\n\r\n        return [];\r\n    }\r\n\r\n    const projectStatusHandler = (statusId: number) => {\r\n        props.setProjectsFilter(statusId);\r\n        props.setProjects(statusId);\r\n    }\r\n\r\n    function convertDate(date: any) {\r\n        if (typeof date === 'undefined') { return }\r\n        function pad(s: any) { return (s < 10) ? '0' + s : s; }                                 //  9 --> 09  ||  10 --> 10\r\n        return [pad(date.getDate()), pad(date.getMonth() + 1), date.getFullYear()].join('/')    //  format date --> 09/12/2021  \r\n    }\r\n\r\n    function setValue(val: any) {\r\n        if (isNaN(val)) {\r\n            projectStatusHandler(ProjectStatus.inProgressStatusID);\r\n            return ProjectStatus.inProgressStatusID;\r\n        }\r\n\r\n        return val;\r\n    }\r\n\r\n    function returnProperIconType(icon: any) {\r\n        return icon as IconProp;\r\n    }\r\n\r\n    let projectsDetailsComp: any;\r\n    let loadComp = (\r\n        <div className='loader-wrapper'>\r\n            <EupatiLoader />\r\n        </div>\r\n    )\r\n\r\n    if (clickedProjectId === '') {\r\n        projectsDetailsComp = loadComp;\r\n    }\r\n    else {\r\n        projectsDetailsComp = (\r\n            <EupatiProjectDetails\r\n                {...{\r\n                    projectId: clickedProjectId,\r\n                    backToAllProjects: backBtnHandler,\r\n                    lookUpData: props.lookUpData,\r\n                    emailTemplates: props.emailTemplates,\r\n                    singleEmailTemplate: props.singleEmailTemplate,\r\n                    emailTemplateLoading: props.emailTemplateLoading,\r\n                    setMatchedPatients: props.setMatchedPatients,\r\n                    matchedPatients: props.matchedPatients,\r\n                    isMatchedPatientsLoading: props.isMatchedPatientsLoading,\r\n                    setProjectById: props.setProjectById,\r\n                    isProjectLoading: props.isProjectLoading,\r\n                    project: props.project,\r\n                    removePatient: props.removePatient,\r\n                    addPatient: props.addPatient,\r\n                    submitRequest: props.submitRequest,\r\n                    changePatientStatus: props.changePatientStatus,\r\n                    getAllEmailTemplates: props.getAllEmailTemplates,\r\n                    getEmailTemplateByName: props.getEmailTemplateByName\r\n                }}\r\n            />\r\n        )\r\n    }\r\n\r\n    const headers = [\r\n        { label: \"Name\", key: \"name\" },\r\n        { label: \"Type\", key: \"type\" },\r\n        { label: \"Start date\", key: \"date\" },\r\n        { label: \"Disease(s) experience\", key: \"diseases\" },\r\n        { label: \"Chosen plan\", key: \"plan\" },\r\n        { label: \"Organisation\", key: \"org\" }\r\n    ];\r\n\r\n    const data = useMemo(\r\n        () => props.projects?.map((x: any, i: any) => {\r\n            let statuses = findLookUpData('projectStatus');\r\n\r\n            return {\r\n                id: x.id,\r\n                name: x.name,\r\n                type: returnValueById('projectType', x.projectTypeId),\r\n                date: x.createdOn,\r\n                diseases: x.noDiseaseExpertiseRequired ? \"No disease experience required\" : x.diseases?.map((d: any) => d.name).join(\", \"),\r\n                plan: x.plan,\r\n                org: x.pocOrganisation,\r\n                status: x.projectStatusId,\r\n                statusText: statuses.find(s => s.id == x.projectStatusId)?.name\r\n            }\r\n        }), [props.projects]\r\n    )\r\n\r\n    const columns = useMemo(\r\n        () => [\r\n            {\r\n                Header: 'Name',\r\n                accessor: 'name', // accessor is the \"key\" in the data\r\n            },\r\n            {\r\n                Header: 'Type',\r\n                accessor: 'type'\r\n            },\r\n            {\r\n                Header: 'Date',\r\n                accessor: 'date',\r\n                Cell: (props: any) => {\r\n                    if (props.value != undefined && props.value != null) {\r\n                        return props.value.toString() == \"0001-01-01T00:00:00\" ? \"-\" : convertDate(new Date(props.value));\r\n                    } else {\r\n                        return '';\r\n                    }\r\n                }\r\n            },\r\n            {\r\n                Header: 'Diseases',\r\n                accessor: 'diseases'\r\n            },\r\n            {\r\n                Header: 'Plan',\r\n                accessor: 'plan'\r\n            },\r\n            {\r\n                Header: 'Organisation',\r\n                accessor: 'org'\r\n            },\r\n            {\r\n                Header: 'Status',\r\n                accessor: 'statusText'\r\n            }\r\n        ], []\r\n    )\r\n\r\n    const {\r\n        getTableProps,\r\n        getTableBodyProps,\r\n        headerGroups, // columns Header\r\n        rows, // render data based on accessor\r\n        // @ts-ignore\r\n        page,\r\n        // @ts-ignore\r\n        nextPage,\r\n        // @ts-ignore\r\n        previousPage,\r\n        // @ts-ignore\r\n        canNextPage,\r\n        // @ts-ignore\r\n        canPreviousPage,\r\n        prepareRow,\r\n        // @ts-ignore\r\n        visibleColumns,\r\n        // @ts-ignore\r\n        pageOptions,\r\n        // @ts-ignore\r\n        gotoPage,\r\n        // @ts-ignore\r\n        pageCount,\r\n        // @ts-ignore\r\n        setPageSize,\r\n        // @ts-ignore\r\n        state,\r\n        // @ts-ignore\r\n        setGlobalFilter,\r\n    } = useTable({\r\n        // @ts-ignore\r\n        columns,\r\n        data\r\n    },\r\n        useGlobalFilter,\r\n        useSortBy,\r\n        usePagination,\r\n    )\r\n    // @ts-ignore\r\n    const { globalFilter, pageSize, pageIndex } = state;\r\n\r\n    let mainComponent = (\r\n        <>\r\n            <Table {...getTableProps()} striped bordered hover>\r\n                <thead>\r\n                    {headerGroups.map(headerGroup => (\r\n                        <tr {...headerGroup.getHeaderGroupProps()}>\r\n                            {headerGroup.headers.map(col => (\r\n                                //@ts-ignore\r\n                                <th {...col.getHeaderProps(col.getSortByToggleProps())}>\r\n                                    {col.render('Header')}\r\n                                    <span>\r\n                                        {/* @ts-ignore */\r\n                                            col.isSorted ? (col.isSortedDesc ? <FontAwesomeIcon icon={returnProperIconType(faSortAlphaDown)} /> : <FontAwesomeIcon icon={returnProperIconType(faSortAlphaUp)} />) : <FontAwesomeIcon id='line' icon={returnProperIconType(faWindowMinimize)} />\r\n                                        }\r\n                                    </span>\r\n                                </th>\r\n                            ))}\r\n                        </tr>\r\n                    ))}\r\n                    <tr>\r\n                        <th\r\n                            colSpan={visibleColumns.length}\r\n                            style={{ textAlign: 'left' }}\r\n                        >\r\n                            <GlobalFilter filter={globalFilter} setFilter={setGlobalFilter} />\r\n                        </th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody {...getTableBodyProps()}>\r\n                    {page.map((row: any) => {\r\n                        prepareRow(row)\r\n                        return (\r\n                            <tr {...row.getRowProps()}>\r\n                                {row.cells.map((cell: any) => {\r\n                                    return (\r\n                                        <td {...cell.getCellProps()}>\r\n                                            {cell.render('Cell')}\r\n                                        </td>\r\n                                    )\r\n                                })}\r\n                                <>\r\n                                    <td role='cell'>\r\n                                        <Button\r\n                                            variant=\"info\"\r\n                                            onClick={() => detailsBtnHandler(row.original.id)}\r\n                                        >\r\n                                            DETAILS\r\n                                        </Button>\r\n                                    </td>\r\n                                    {row.original.status === projectStatus.archivedStatusID ? (\r\n                                        <td role='cell'>\r\n                                            <Button\r\n                                                variant='secondary'\r\n                                                onClick={() => changeProjectStatusHandler(row.original.id, projectStatus.inProgressStatusID)}\r\n                                                style={{ cursor: 'pointer' }}\r\n                                            >\r\n                                                REVIVE\r\n                                            </Button>\r\n                                        </td>\r\n                                    ) : (\r\n                                        <td role='cell'>\r\n                                            <Button\r\n                                                variant='danger'\r\n                                                onClick={() => changeProjectStatusHandler(row.original.id, projectStatus.archivedStatusID)}\r\n                                                style={{ cursor: 'pointer' }}\r\n                                            >\r\n                                                ARCHIVE\r\n                                            </Button>\r\n                                        </td>\r\n                                    )}\r\n                                </>\r\n                            </tr>\r\n                        )\r\n                    })}\r\n                </tbody>\r\n            </Table>\r\n            <Form.Group style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\r\n                <span>\r\n                    Page{' '}\r\n                    <strong>\r\n                        {pageIndex + 1} of {pageOptions.length}\r\n                    </strong>\r\n                </span>\r\n                <span>\r\n                    Go to page: {' '}\r\n                    <input\r\n                        type='number'\r\n                        defaultValue={pageIndex + 1}\r\n                        min='1'\r\n                        disabled={pageSize >= rows.length}\r\n                        onChange={(e) => {\r\n                            e.preventDefault();\r\n                            const pageNum = e.target.value ? Number(e.target.value) - 1 : 0;\r\n                            gotoPage(pageNum);\r\n                        }}\r\n                    />\r\n                </span>\r\n                <select value={pageSize} onChange={e => setPageSize(e.target.value)}>\r\n                    {\r\n                        [10, 25, 50, 100].map(pageSize => (\r\n                            <option key={pageSize} value={pageSize}>\r\n                                Show {pageSize}\r\n                            </option>\r\n                        ))\r\n                    }\r\n                </select>\r\n                <Button id='backToFirstPageBtn' onClick={() => gotoPage(0)} disabled={!canPreviousPage} style={canPreviousPage ? { cursor: 'pointer', ...OUTLINE_PADDING_STYLE } : { cursor: 'not-allowed', ...OUTLINE_PADDING_STYLE }} className='btn btn-outline-dark btn-sm' >{'<<'}</Button>\r\n                <Button onClick={() => previousPage()} disabled={!canPreviousPage} style={canPreviousPage ? { cursor: 'pointer' } : { cursor: 'not-allowed' }} variant='secondary' >Previous</Button>\r\n                <Button onClick={() => nextPage()} disabled={!canNextPage} style={canNextPage ? { cursor: 'pointer', ...PRIMARY_PADDING_STYLE } : { cursor: 'not-allowed', ...PRIMARY_PADDING_STYLE }} variant='primary'>Next</Button>\r\n                <Button id='gotoLastPageBtn' onClick={() => gotoPage(pageCount - 1)} disabled={!canNextPage} style={canNextPage ? { cursor: 'pointer', ...OUTLINE_PADDING_STYLE } : { cursor: 'not-allowed', ...OUTLINE_PADDING_STYLE }} className='btn btn-outline-dark btn-sm' >{'>>'}</Button>\r\n            </Form.Group>\r\n        </>\r\n    );\r\n\r\n    return (\r\n        <>\r\n            {isDetailsBtnClicked &&\r\n                <>\r\n                    {projectsDetailsComp}\r\n                </>\r\n            }\r\n            {!isDetailsBtnClicked &&\r\n                <>\r\n                    <h4 style={{ textAlign: 'center', textDecoration: 'underline' }}>PROJECTS</h4>\r\n                    <div className='table-btns'>\r\n                        <EupatiDropdown {...{\r\n                            fieldName: 'projectStatusId',\r\n                            errorMsg: '',\r\n                            values: findLookUpData('projectStatus'),\r\n                            onChange: (e: any) => projectStatusHandler(parseInt(e.target.value)),\r\n                            value: setValue(parseInt(props.projectsFilter.toString())),\r\n                            width: 'auto'\r\n                        }} />\r\n                        <span><strong>{props.projects?.length}</strong> projects.</span>\r\n                        <CSVLink\r\n                            data={data}\r\n                            headers={headers}\r\n                            id='csv-download-btn'\r\n                            filename={`${uniqid('projects-table-')}.csv`}\r\n                            className=\"btn btn-success\"\r\n                        >\r\n                            DOWNLOAD <FontAwesomeIcon icon={returnProperIconType(faFileExcel)} />\r\n                        </CSVLink>\r\n                    </div>\r\n                    {mainComponent}\r\n                </>\r\n            }\r\n        </>\r\n    );\r\n}","import * as React from 'react';\r\nimport { Form } from 'react-bootstrap';\r\nimport { EmailTemplateData, LookUpData, PatientSearchData, ProjectPatientData, RequestData } from '../../../../common/models/input-models';\r\nimport { Patient, Project } from '../../../../common/models/main-models';\r\nimport EupatiLoader from '../../../../common/static/loading-animation/loader';\r\nimport EupatiAllProjectsGrid from '../../../../common/static/projects-grid';\r\nimport { State } from '../model';\r\nimport '../style.scss';\r\n\r\ntype OwnProps = {\r\n    isLoading: boolean;\r\n    lookUpData: LookUpData[];\r\n    isProjectsLoading: boolean;\r\n    projects: Project[];\r\n    filter: number;\r\n    matchedPatients: Patient[];\r\n    isMatchedPatientsLoading: boolean;\r\n    project: Project;\r\n    isProjectLoading: boolean;\r\n    emailTemplates: EmailTemplateData[];\r\n    singleEmailTemplate: EmailTemplateData;\r\n    emailTemplateLoading: boolean;\r\n};\r\n\r\nexport type DispatchProps = {\r\n    setLookUpData: () => void;\r\n    setProjects: (condition: number) => void;\r\n    setFilter: (filter: number) => void;\r\n    setMatchedPatients: (searchData: PatientSearchData, projectName: string) => void;\r\n    setProjectById: (id: string) => void;\r\n    removePatient: (inputModel: ProjectPatientData) => void;\r\n    addPatient: (inputModel: ProjectPatientData, searchData: PatientSearchData, projectName: string) => void;\r\n    changeProjectStatus: (id: string, filter: number) => void;\r\n    submitRequest: (data: RequestData) => void;\r\n    changePatientStatus: (inputModel: ProjectPatientData) => void;\r\n    getAllEmailTemplates: () => void;\r\n    getEmailTemplateByName: (name: string) => void;\r\n};\r\n\r\ntype Props = State & DispatchProps & OwnProps;\r\n\r\ntype OwnState = {};\r\n\r\n//TODO: pass func to grid so it doesnt call services directly\r\nexport default class ComponentRoot extends React.Component<Props, OwnState> {\r\n\r\n    componentDidMount() {\r\n        this.props.setLookUpData();\r\n        this.props.getAllEmailTemplates();\r\n        this.props.setProjects(this.props.filter);\r\n    }\r\n\r\n    render() {\r\n\r\n        let mainComponent: any;\r\n\r\n        let loadingComponent = (\r\n            <div className='loader-wrapper'>\r\n                <EupatiLoader />\r\n            </div>\r\n        )\r\n\r\n        if (this.props.isLoading ||\r\n            this.props.isProjectsLoading) {\r\n            mainComponent = loadingComponent;\r\n        }\r\n        else {\r\n            mainComponent = (\r\n                <Form.Group id='all-projects-tbl' className='all-projects-wrapper mb-5'>\r\n                    <EupatiAllProjectsGrid\r\n                        {...{\r\n                            lookUpData: this.props.lookUpData,\r\n                            projects: this.props.projects,\r\n                            setProjects: this.props.setProjects,\r\n                            setProjectsFilter: this.props.setFilter,\r\n                            projectsFilter: this.props.filter,\r\n                            emailTemplates: this.props.emailTemplates,\r\n                            singleEmailTemplate: this.props.singleEmailTemplate,\r\n                            emailTemplateLoading: this.props.emailTemplateLoading,\r\n                            setMatchedPatients: this.props.setMatchedPatients,\r\n                            matchedPatients: this.props.matchedPatients,\r\n                            isMatchedPatientsLoading: this.props.isMatchedPatientsLoading,\r\n                            setProjectById: this.props.setProjectById,\r\n                            isProjectLoading: this.props.isProjectLoading,\r\n                            project: this.props.project,\r\n                            removePatient: this.props.removePatient,\r\n                            addPatient: this.props.addPatient,\r\n                            changeProjectStatus: this.props.changeProjectStatus,\r\n                            submitRequest: this.props.submitRequest,\r\n                            changePatientStatus: this.props.changePatientStatus,\r\n                            getAllEmailTemplates: this.props.getAllEmailTemplates,\r\n                            getEmailTemplateByName: this.props.getEmailTemplateByName\r\n                        }}\r\n                    />\r\n                </Form.Group>\r\n            )\r\n        }\r\n\r\n        return (\r\n            <>\r\n                {mainComponent}\r\n            </>\r\n        );\r\n    }\r\n}","import { default as RootComponent, DispatchProps } from '../components/component-root';\r\nimport * as Constants from '../constants';\r\nimport * as Actions from '../actions';\r\nimport { State } from '../model';\r\nimport { connect } from 'react-redux';\r\nimport { PatientSearchData, ProjectPatientData, RequestData } from '../../../../common/models/input-models';\r\n\r\nexport function mapStateToProps(globalState: any) {\r\n    let name = Constants.NAME;\r\n    let pageState = globalState[name] as State;\r\n    return pageState;\r\n}\r\n\r\nexport function mapDispatchToProps(dispatch: any) {\r\n    return {\r\n        setLookUpData: () => dispatch(Actions.getLookUpDataAsync()),\r\n        setProjects: (condition: number) => dispatch(Actions.getAllFilteredProjectsAsync(condition)),\r\n        setFilter: (filter: number) => dispatch(Actions.setProjectsFilter(filter)),\r\n        setMatchedPatients: (searchData: PatientSearchData, projectName: string) => dispatch(Actions.updateSearchPatients(searchData, projectName)),\r\n        setProjectById: (id: string) => dispatch(Actions.getProjectDataByIdAsync(id)),\r\n        removePatient: (inputModel: ProjectPatientData) => dispatch(Actions.removePatientFromProjectAsync(inputModel)),\r\n        addPatient: (inputModel: ProjectPatientData, searchData: PatientSearchData, projectName: string) => dispatch(Actions.addPatientToProjectAsync(inputModel, searchData, projectName)),\r\n        changeProjectStatus: (id: string, filter: number) => dispatch(Actions.changeProjectStatusAsync(id, filter)),\r\n        submitRequest: (data: RequestData) => dispatch(Actions.submitEmailDataAsync(data)),\r\n        changePatientStatus: (inputModel: ProjectPatientData) => dispatch(Actions.changePatientStatusToConfirmAsync(inputModel)),\r\n        getAllEmailTemplates: () => dispatch(Actions.getAllEmailTemplatesAsync()),\r\n        getEmailTemplateByName: (name: string) => dispatch(Actions.getEmailTemplateByNameAsync(name))\r\n    } as DispatchProps;\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RootComponent);","import { CSVMappedField } from './csv-mapping-model';\r\n\r\nlet newMappedObj: any; // otherwise it gives an error\r\n\r\nexport const csvDataToJson = (data: any[], mapping: CSVMappedField[]) => {\r\n    let mappedData = [];\r\n    for (let i = 0; i < data.length; i++) {\r\n        const patientInfo = data[i];\r\n        newMappedObj = {};\r\n        for (let j = 0; j < mapping.length; j++) {\r\n            const mapItem = mapping[j];\r\n            newMappedObj[mapItem.objectProperty] = patientInfo[mapItem.csvColumnName];\r\n        }\r\n        mappedData.push(newMappedObj);\r\n    }\r\n\r\n    return mappedData;\r\n};\r\n","import { defaultEmailTemplate, State } from './model';\r\nimport * as t from './actionTypes';\r\nimport { EmailTemplateData, LookUpData } from '../../../common/models/input-models';\r\nimport { Patient, Project } from '../../../common/models/main-models';\r\nimport { emptyProject } from '../../new-project/model';\r\n\r\nconst initialState: State = {\r\n    projects: [],\r\n    lookUpData: [],\r\n    isLoading: false,\r\n    isProjectsLoading: false,\r\n    filter: 1,\r\n    matchedPatients: [],\r\n    isMatchedPatientsLoading: false,\r\n    project: emptyProject,\r\n    isProjectLoading: false,\r\n    emailTemplates: [],\r\n    singleEmailTemplate: defaultEmailTemplate,\r\n    emailTemplateLoading: false\r\n};\r\n\r\nexport default (state = initialState, action: any): State => {\r\n    switch (action.type) {\r\n        case t.SET_LOADING:\r\n            return setLoading(state, action.payload);\r\n        case t.SET_LOOKUP_DATA:\r\n            return setLookUpData(state, action.payload);\r\n        case t.SET_PROJECTS_LOADING:\r\n            return setProjectsLoading(state, action.payload);\r\n        case t.SET_PROJECTS:\r\n            return setProjects(state, action.payload);\r\n        case t.SET_PROJECTS_FILTER:\r\n            return setProjectsFilter(state, action.payload);\r\n        case t.SET_MATCHED_PATIENTS:\r\n            return setMatchedPatients(state, action.payload);\r\n        case t.SET_MATCHED_PATIENTS_LOADING:\r\n            return setMatchedPatientsLoading(state, action.payload);\r\n        case t.SET_PROJECT_DATA:\r\n            return setProjectData(state, action.payload);\r\n        case t.SET_PROJECTS_LOADING:\r\n            return setProjectLoading(state, action.payload);\r\n        case t.SET_EMAIL_TEMPLATES:\r\n            return setEmailTemplates(state, action.payload);\r\n        case t.SET_SINGLE_EMAIL_TEMPLATE:\r\n            return setSingleEmailTemplate(state, action.payload);\r\n        case t.SET_TEMPLATES_LOADING:\r\n            return setEmailTemplateLoading(state, action.payload);\r\n        default:\r\n            return state;\r\n    }\r\n}\r\n\r\nconst setLoading = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setLookUpData = (state: State, val: LookUpData[]): State => {\r\n    let newState = {\r\n        ...state,\r\n        lookUpData: [...val]\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setProjectsLoading = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isProjectsLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setProjects = (state: State, val: Project[]): State => {\r\n    let newState = {\r\n        ...state,\r\n        projects: [...val]\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setProjectsFilter = (state: State, val: number): State => {\r\n    let newState = {\r\n        ...state,\r\n        filter: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setMatchedPatients = (state: State, val: Patient[]): State => {\r\n    let newState = {\r\n        ...state,\r\n        matchedPatients: [...val]\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setMatchedPatientsLoading = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isMatchedPatientsLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setProjectData = (state: State, val: Project): State => {\r\n    let newState = {\r\n        ...state,\r\n        project: { ...val }\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setProjectLoading = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isProjectLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setEmailTemplates = (state: State, val: EmailTemplateData[]): State => {\r\n    let newState = {\r\n        ...state,\r\n        emailTemplates: [...val]\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setSingleEmailTemplate = (state: State, val: EmailTemplateData): State => {\r\n    let newState = {\r\n        ...state,\r\n        singleEmailTemplate: { ...val }\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setEmailTemplateLoading = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        emailTemplateLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n}","import * as Actions from './actions';\r\nimport * as Components from './components/index';\r\nimport * as Containers from './containers/index';\r\nimport * as Constants from './constants';\r\nimport Reducer from './reducer';\r\n\r\nexport default {\r\n    actions: Actions,\r\n    components: Components,\r\n    containers: Containers,\r\n    constants: Constants,\r\n    reducer: Reducer\r\n};\r\n\r\nexport const Root = Containers.ComponentRoot;","// constants.ts\r\n\r\nexport const NAME = 'importPatients';","import { NAME } from \"./constants\";\r\n\r\nexport const SET_IS_DATA_SUBMITTED = `${NAME}/SET_IS_DATA_SUBMITTED`;\r\n\r\nexport const SET_LOOK_UP_DATA = `${NAME}/SET_LOOK_UP_DATA`;","import { LookUpData, PatientsImportData } from \"../../../common/models/input-models\";\r\nimport DataSvc from \"../../../common/services/data-svc\";\r\nimport * as t from './actionTypes';\r\n\r\nexport const setIsDataSubmitted = (isDataSubmitted: boolean) => ({\r\n    type: t.SET_IS_DATA_SUBMITTED,\r\n    payload: isDataSubmitted,\r\n});\r\n\r\nexport const setLookUpData = (lookUpData: LookUpData[]) => ({\r\n    type: t.SET_LOOK_UP_DATA,\r\n    payload: lookUpData\r\n});\r\n\r\nexport const submitMatchedDataAsync = (patientsData: PatientsImportData) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setIsDataSubmitted(false));\r\n        DataSvc.patientSvc.importPatients(patientsData).then(\r\n            (result: any) => {\r\n                dispatch(setIsDataSubmitted(true));\r\n            },\r\n            (error) => {\r\n                console.error(error);\r\n            }\r\n        )\r\n    }\r\n}\r\n\r\nexport const getLookUpDataAsync = () => {\r\n    return (dispatch: any, getState: any) => {\r\n        DataSvc.utilsSvc.getLookUpData().then(\r\n            (result: any) => {\r\n                dispatch(setLookUpData(result));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}","import * as React from \"react\";\r\nimport { Button } from \"react-bootstrap\";\r\nimport { FormGroup } from \"reactstrap\";\r\nimport { CSVMappedField } from \"./csv-mapping-model\";\r\nimport { Rules } from '../../helpers';\r\nimport { toast } from 'react-toastify';\r\n\r\ntype OwnProps = {\r\n    csvObject: any;\r\n    objectProperties: string[];\r\n    mapping: CSVMappedField[];\r\n    isOptionSelected: boolean;\r\n}\r\n\r\nexport type DispatchProps = {\r\n    finishMapping: (mapping: any) => void;\r\n}\r\n\r\ntype Props = DispatchProps & OwnProps;\r\n\r\ntype OwnState = {\r\n    mapping: CSVMappedField[];\r\n}\r\n\r\nexport default class CSVMappingComponent extends React.Component<Props, OwnState> {\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            mapping: []\r\n        };\r\n\r\n        this.selectMatchingCsvColumn = this.selectMatchingCsvColumn.bind(this);\r\n        this.finishMapping = this.finishMapping.bind(this);\r\n    }\r\n\r\n    componentDidMount() {\r\n        this.setState({ mapping: this.props.mapping });\r\n    }\r\n\r\n    selectMatchingCsvColumn(value: any, key: any) {\r\n        let mapping = this.state.mapping;\r\n\r\n        let mapItem = mapping.filter((m) => m.objectProperty === key)[0];\r\n        if (mapItem) {\r\n            mapItem.csvColumnName = value;\r\n        } else {\r\n            mapping.push({\r\n                objectProperty: key,\r\n                csvColumnName: value,\r\n            } as CSVMappedField);\r\n        }\r\n\r\n        this.setState({ mapping: mapping });\r\n    }\r\n\r\n    finishMapping() {\r\n        if (!this.props.isOptionSelected) {\r\n            toast.error(Rules.selectOptionMessage.required);\r\n        }\r\n        else {\r\n            this.props.finishMapping(this.state.mapping);\r\n        }\r\n    }\r\n\r\n    render() {\r\n\r\n        let objPropsOptions = Object.keys(this.props.csvObject[0]).map((k, i) => {\r\n            return (\r\n                <option key={i} value={k}>\r\n                    {k.toLowerCase()}\r\n                </option>\r\n            );\r\n        });\r\n\r\n        let mappingComponent = this.props.objectProperties.map((p, i) => {\r\n            let mapItem = this.state.mapping.filter(\r\n                (m) => m.objectProperty === p\r\n            )[0];\r\n\r\n            if (!mapItem) {\r\n                mapItem = {\r\n                    objectProperty: '',\r\n                    csvColumnName: ''\r\n                };\r\n            }\r\n\r\n            return (\r\n                <FormGroup key={i} className=\"mapping-item-wrapper\">\r\n                    <FormGroup className=\"mapping-item-object-property\">{p.toUpperCase()}</FormGroup>\r\n                    <FormGroup className=\"mapping-item-csv-column\">\r\n                        <select\r\n                            onChange={(event) =>\r\n                                this.selectMatchingCsvColumn(\r\n                                    event.target.value,\r\n                                    p\r\n                                )\r\n                            }\r\n                            className=\"blue-dropdown\"\r\n                            value={mapItem.csvColumnName}\r\n                        >\r\n                            <option value=\"\">-</option>\r\n                            {objPropsOptions}\r\n                        </select>\r\n                    </FormGroup>\r\n                </FormGroup>\r\n            );\r\n        });\r\n\r\n        return (\r\n            <FormGroup id=\"mapping-wrapper\">\r\n                {mappingComponent}\r\n                <FormGroup className='mapping-item-wrapper'>\r\n                    <Button\r\n                        id=\"mapping-button\"\r\n                        className=\"btn-fmp\"\r\n                        onClick={this.finishMapping}\r\n                    >\r\n                        Finish Mapping\r\n                    </Button>\r\n                </FormGroup>\r\n            </FormGroup>\r\n        )\r\n    }\r\n}","// model.js\r\n// This is the model of our module state (e.g. return type of the reducer)\r\n\r\nimport { LookUpData } from \"../../../common/models/input-models\";\r\n\r\nexport type State = {\r\n    isDataSubmitted: boolean;\r\n    lookUpData: LookUpData[];\r\n};\r\n\r\nexport const ImportProperties = [\r\n    'firstName',\r\n    'lastName',\r\n    'phoneNumber',\r\n    'email',\r\n    'country',\r\n    //'countryCode',\r\n    'condition',\r\n    'gender'\r\n];","import React, { useMemo } from 'react';\r\nimport { Table } from 'react-bootstrap';\r\nimport { useTable } from 'react-table';\r\n\r\ntype OwnProps = {\r\n    importPatients: any[]\r\n};\r\n\r\ntype DispatchProps = {\r\n\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nexport default function ImportPreviewGrid(props: Props) {\r\n    const data = useMemo(\r\n        () => props?.importPatients.map((x: any, i: any) => {\r\n            return x\r\n        }), [props?.importPatients]\r\n    )\r\n\r\n    const columns = useMemo(\r\n        () => [\r\n            {\r\n                Header: 'First name',\r\n                accessor: 'firstName'\r\n            },\r\n            {\r\n                Header: 'Surname',\r\n                accessor: 'lastName'\r\n            },\r\n            {\r\n                Header: 'Phone number',\r\n                accessor: 'phoneNumber'\r\n            },\r\n            {\r\n                Header: 'Email',\r\n                accessor: 'email'\r\n            },\r\n            {\r\n                Header: 'Country',\r\n                accessor: 'country'\r\n            },\r\n            // {\r\n            //     Header: 'Country code',\r\n            //     accessor: 'countryCode'\r\n            // },\r\n            {\r\n                Header: 'Condition',\r\n                accessor: 'condition'\r\n            },\r\n            {\r\n                Header: 'Gender',\r\n                accessor: 'gender'\r\n            }\r\n        ], []\r\n    )\r\n\r\n    const {\r\n        getTableProps,\r\n        getTableBodyProps,\r\n        headerGroups,\r\n        rows,\r\n        prepareRow,\r\n    } = useTable({ columns, data })\r\n\r\n    return (\r\n        <Table {...getTableProps()} striped bordered hover>\r\n            <thead>\r\n                {headerGroups.map(headerGroup => (\r\n                    <tr {...headerGroup.getHeaderGroupProps()}>\r\n                        {headerGroup.headers.map(col => (\r\n                            <th {...col.getHeaderProps()}>\r\n                                {col.render('Header')}\r\n                            </th>\r\n                        ))}\r\n                    </tr>\r\n                ))}\r\n            </thead>\r\n            <tbody {...getTableBodyProps()}>\r\n                {rows.map(row => {\r\n                    prepareRow(row);\r\n                    return (\r\n                        <tr {...row.getRowProps()}>\r\n                            {row.cells.map(cell => {\r\n                                return (\r\n                                    <td {...cell.getCellProps()}>\r\n                                        {cell.render('Cell')}\r\n                                    </td>\r\n                                )\r\n                            })}\r\n                        </tr>\r\n                    )\r\n                })}\r\n            </tbody>\r\n        </Table>\r\n    )\r\n}\r\n","import * as React from 'react';\r\nimport { State } from '../model';\r\nimport CSVReader, { IFileInfo } from 'react-csv-reader';\r\nimport '../style.scss';\r\nimport EupatiDropdown from '../../../../common/static/dropdown';\r\nimport { FormGroup } from 'reactstrap';\r\nimport {\r\n  LookUpOptions,\r\n  PatientsImportData,\r\n} from '../../../../common/models/input-models';\r\nimport { Rules } from '../../../../common/helpers';\r\nimport { Button, FormLabel } from 'react-bootstrap';\r\nimport CSVMappingComponent from '../../../../common/static/csv-import/csv-mapping';\r\nimport { ImportProperties } from '../model';\r\nimport { csvDataToJson } from '../../../../common/static/csv-import/csv-mapping-helper';\r\nimport ImportPreviewGrid from '../../../../common/static/import-preview-grid';\r\nimport { CSVMappedField } from '../../../../common/static/csv-import/csv-mapping-model';\r\nimport EupatiConfirmPage from '../../../../common/static/confirm-page';\r\n\r\ntype OwnProps = {};\r\n\r\nexport type DispatchProps = {\r\n  submitPatientsData: (patientsData: PatientsImportData) => void;\r\n  //getLookUpDate: () => void;\r\n};\r\n\r\ntype Props = State & DispatchProps & OwnProps;\r\n\r\ntype OwnState = {\r\n  errorMessage: string;\r\n  lookUpValue: any;\r\n  data: any[];\r\n  mapping: CSVMappedField[];\r\n  isMappingMode: boolean;\r\n  isPreviewMode: boolean;\r\n  isOptionSelected: boolean;\r\n  isDataSubmitted: boolean;\r\n};\r\n\r\n// ids are based on enum PatientExpertises\r\nconst lookUpOptions = [\r\n  { id: 1, name: 'EUPATI Fellow' } as LookUpOptions,\r\n  { id: 3, name: 'EUPATI Open Classroom Learner' } as LookUpOptions,\r\n  { id: 2, name: 'National EUPATI Fellow' } as LookUpOptions,\r\n];\r\nexport default class ComponentRoot extends React.Component<Props, OwnState> {\r\n  constructor(props: any) {\r\n    super(props);\r\n\r\n    this.state = {\r\n      errorMessage: Rules.selectOptionMessage.required,\r\n      lookUpValue: { expertise: 0 },\r\n      data: [],\r\n      mapping: [],\r\n      isMappingMode: true,\r\n      isPreviewMode: false,\r\n      isOptionSelected: false,\r\n      isDataSubmitted: false,\r\n    };\r\n\r\n    this.csvImportTypeHandler = this.csvImportTypeHandler.bind(this);\r\n    this.readCSVData = this.readCSVData.bind(this);\r\n    this.handleReadingError = this.handleReadingError.bind(this);\r\n    this.finishMapping = this.finishMapping.bind(this);\r\n    this.activateMapping = this.activateMapping.bind(this);\r\n    this.submitData = this.submitData.bind(this);\r\n  }\r\n\r\n  csvImportTypeHandler(e: any) {\r\n    switch (e.target.value !== '') {\r\n      case true:\r\n        this.setState({\r\n          errorMessage: '',\r\n          lookUpValue: { expertise: parseInt(e.target.value) },\r\n          isOptionSelected: true,\r\n        });\r\n        break;\r\n      case false:\r\n        this.setState({\r\n          errorMessage: Rules.selectOptionMessage.required,\r\n          lookUpValue: { expertise: 0 },\r\n          isOptionSelected: false,\r\n          data: [],\r\n        });\r\n        break;\r\n    }\r\n  }\r\n\r\n  readCSVData(data: Array<any>, fileInfo: IFileInfo) {\r\n    this.setState({ data: data });\r\n    console.debug(fileInfo);\r\n  }\r\n\r\n  handleReadingError(err: any) {\r\n    console.error(err);\r\n  }\r\n\r\n  finishMapping(mapping: any) {\r\n    this.setState({\r\n      mapping: mapping,\r\n      isMappingMode: false,\r\n      isPreviewMode: true,\r\n    });\r\n  }\r\n\r\n  activateMapping() {\r\n    this.setState({\r\n      isMappingMode: true,\r\n      isPreviewMode: false,\r\n    });\r\n  }\r\n\r\n  submitData() {\r\n    const mappedData = csvDataToJson(this.state.data, this.state.mapping);\r\n    const patientExpertise = lookUpOptions.find(\r\n      (l) => l.id === this.state.lookUpValue.expertise\r\n    );\r\n    mappedData.forEach((md: any) =>\r\n      Object.assign(md, { expertise: patientExpertise })\r\n    );\r\n    this.props.submitPatientsData(mappedData as PatientsImportData);\r\n    this.setState({\r\n      isDataSubmitted: true,\r\n      isMappingMode: false,\r\n      isPreviewMode: false,\r\n      isOptionSelected: false,\r\n    });\r\n  }\r\n\r\n  render() {\r\n    //Upload CSV UTF-8 (Comma delimited)\r\n    let uploadCSVComponent: any;\r\n    if (this.state.isOptionSelected) {\r\n      let papaparseOptions = {\r\n        header: true,\r\n        dynamicTyping: true,\r\n        skipEmptyLines: true,\r\n        encoding: 'utf-8',\r\n        transformHeader: (header: any) =>\r\n          header.toLowerCase().replace(`/\\W/g`, '_'),\r\n      };\r\n      uploadCSVComponent = (\r\n        <>\r\n          <CSVReader\r\n            cssClass=\"csv-reader-input\"\r\n            label=\"Select CSV patients data\"\r\n            onFileLoaded={(data, fileInfo) => this.readCSVData(data, fileInfo)}\r\n            parserOptions={papaparseOptions}\r\n            onError={this.handleReadingError}\r\n            inputId=\"patients-csv-import\"\r\n            inputName=\"patients-csv\"\r\n            inputStyle={{ color: '#F0B72F', margin: 'auto' }}\r\n          />\r\n          <hr className=\"solid\" />\r\n        </>\r\n      );\r\n    }\r\n\r\n    //Column mapping\r\n    let csvMappingComponent: any;\r\n    if (this.state.data.length > 0 && this.state.isMappingMode) {\r\n      let csvMappingProps = {\r\n        csvObject: this.state.data,\r\n        objectProperties: ImportProperties,\r\n        mapping: this.state.mapping,\r\n        finishMapping: (mapping: any) => this.finishMapping(mapping),\r\n        isOptionSelected: this.state.isOptionSelected,\r\n      };\r\n      csvMappingComponent = <CSVMappingComponent {...csvMappingProps} />;\r\n    }\r\n\r\n    //Data preview\r\n    let previewComponent: any;\r\n    if (this.state.data.length > 0 && this.state.isPreviewMode) {\r\n      let previewData;\r\n      if (this.state.data.length > 10) {\r\n        previewData = this.state.data.slice(0, 10);\r\n      } else {\r\n        previewData = this.state.data;\r\n      }\r\n\r\n      let mappedPreviewData = csvDataToJson(previewData, this.state.mapping);\r\n\r\n      previewComponent = (\r\n        <>\r\n          <ImportPreviewGrid importPatients={mappedPreviewData} />\r\n          <div className=\"d-flex\" id=\"importBtns\">\r\n            <Button\r\n              id=\"mapping-button\"\r\n              className=\"btn-back\"\r\n              onClick={this.activateMapping}\r\n            >\r\n              Go To Mapping\r\n            </Button>\r\n            <Button\r\n              id=\"mapping-button\"\r\n              className=\"btn\"\r\n              onClick={this.submitData}\r\n            >\r\n              Upload Data\r\n            </Button>\r\n          </div>\r\n        </>\r\n      );\r\n    }\r\n\r\n    //Confirm page\r\n    let confirmPage: any;\r\n    if (this.state.isDataSubmitted) {\r\n      confirmPage = (\r\n        <>\r\n          <EupatiConfirmPage />\r\n        </>\r\n      );\r\n    }\r\n\r\n    return (\r\n      <FormGroup>\r\n        {!this.state.isDataSubmitted && (\r\n          <>\r\n            <h4\r\n              style={{\r\n                textAlign: 'center',\r\n                margin: '5rem auto auto auto',\r\n                textDecoration: 'underline',\r\n                fontWeight: 'bold',\r\n              }}\r\n            >\r\n              IMPORT PATIENTS DATA\r\n            </h4>\r\n            <hr className=\"solid\" />\r\n            <FormGroup className=\"import-pt-dropdown mb-5\">\r\n              <FormLabel style={{ alignItems: 'center' }}>\r\n                Select EUPATI Patient type\r\n              </FormLabel>\r\n              <EupatiDropdown\r\n                {...{\r\n                  fieldName: 'csv-type',\r\n                  errorMsg: this.state.errorMessage,\r\n                  values: lookUpOptions,\r\n                  onChange: (e: any) => this.csvImportTypeHandler(e),\r\n                  defaultOptionText: '',\r\n                  width: 'auto',\r\n                }}\r\n              />\r\n            </FormGroup>\r\n          </>\r\n        )}\r\n        {uploadCSVComponent}\r\n        {csvMappingComponent}\r\n        {previewComponent}\r\n        {confirmPage}\r\n      </FormGroup>\r\n    );\r\n  }\r\n}\r\n","import { default as RootComponent, DispatchProps } from '../components/component-root';\r\nimport * as Constants from '../constants';\r\nimport * as Actions from '../actions';\r\nimport { State } from '../model';\r\nimport { connect } from 'react-redux';\r\nimport { PatientsImportData } from '../../../../common/models/input-models';\r\n\r\nexport function mapStateToProps(globalState: any) {\r\n    let name = Constants.NAME;\r\n    let pageState = globalState[name] as State;\r\n    return pageState;\r\n}\r\n\r\nexport function mapDispatchToProps(dispatch: any) {\r\n    return {\r\n        submitPatientsData: (patientsData: PatientsImportData) => dispatch(Actions.submitMatchedDataAsync(patientsData)),\r\n        getLookUpDate: () => dispatch(Actions.getLookUpDataAsync())\r\n    } as DispatchProps;\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RootComponent);","import { State } from './model';\r\nimport * as t from './actionTypes';\r\nimport { LookUpData } from '../../../common/models/input-models';\r\n\r\nconst initialState: State = {\r\n    isDataSubmitted: false,\r\n    lookUpData: []\r\n};\r\n\r\nexport default (state = initialState, action: any): State => {\r\n    switch (action.type) {\r\n        case t.SET_IS_DATA_SUBMITTED:\r\n            return setIsDataSubmitted(state, action.payload);\r\n        case t.SET_LOOK_UP_DATA:\r\n            return setLookUpData(state, action.payload);\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nconst setIsDataSubmitted = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isDataSubmitted: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setLookUpData = (state: State, val: LookUpData[]): State => {\r\n    let newState = {\r\n        ...state,\r\n        lookUpData: [...val]\r\n    } as State;\r\n\r\n    return newState;\r\n}","import * as Actions from './actions';\r\nimport * as Components from './components/index';\r\nimport * as Containers from './containers/index';\r\nimport * as Constants from './constants';\r\nimport Reducer from './reducer';\r\n\r\nexport default {\r\n    actions: Actions,\r\n    components: Components,\r\n    containers: Containers,\r\n    constants: Constants,\r\n    reducer: Reducer\r\n};\r\n\r\nexport const Root = Containers.ComponentRoot;","// constants.ts\r\n\r\nexport const NAME = 'allPatients';","import { NAME } from \"./constants\";\r\n\r\nexport const SET_LOOKUP_DATA = `${NAME}/SET_LOOKUP_DATA`;\r\n\r\nexport const SET_LOADING = `${NAME}/SET_LOADING`;\r\n\r\nexport const SET_PATIENTS = `${NAME}/SET_PATIENTS`;\r\n\r\nexport const SET_PATIENTS_LOADING = `${NAME}/SET_PATIENTS_LOADING`;\r\n\r\nexport const REMOVE_PATIENT = `${NAME}/REMOVE_PATIENT`;\r\n\r\nexport const SET_PATIENT_INFO = `allPatient/SET_PATIENT_INFO`;\r\n\r\nexport const SET_PATIENT_INFO_LOADING = `allPatient/SET_PATIENT_INFO_LOADING`;","import { LookUpData } from \"../../../common/models/input-models\";\r\nimport { Patient } from \"../../../common/models/main-models\";\r\nimport DataSvc from \"../../../common/services/data-svc\";\r\nimport * as t from './actionTypes';\r\n\r\nexport const setLoading = (isLoading: boolean) => ({\r\n    type: t.SET_LOADING,\r\n    payload: isLoading\r\n});\r\n\r\nexport const setLookUpData = (data: LookUpData[]) => ({\r\n    type: t.SET_LOOKUP_DATA,\r\n    payload: data\r\n});\r\n\r\nexport const setPatients = (patients: Patient[]) => ({\r\n    type: t.SET_PATIENTS,\r\n    payload: [...patients]\r\n});\r\n\r\nexport const setIsPatientsLoading = (isPatientsLoading: boolean) => ({\r\n    type: t.SET_PATIENTS_LOADING,\r\n    payload: isPatientsLoading\r\n});\r\n\r\nexport const setPatientInfo = (patient: Patient) => ({\r\n    type: t.SET_PATIENT_INFO,\r\n    payload: patient\r\n});\r\n\r\nexport const setPatientInfoLoading = (isPatientInfoLoading: boolean) => ({\r\n    type: t.SET_PATIENT_INFO_LOADING,\r\n    payload: isPatientInfoLoading\r\n});\r\n\r\nexport const getLookUpDataAsync = () => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setLoading(true));\r\n        DataSvc.utilsSvc.getLookUpData().then(\r\n            (result: any) => {\r\n                dispatch(setLookUpData(result));\r\n                dispatch(setLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        );\r\n    };\r\n};\r\n\r\nexport const getAllPatientsAsync = () => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setIsPatientsLoading(true));\r\n        DataSvc.patientSvc.getAllPatients().then(\r\n            (result: any) => {\r\n                dispatch(setPatients(result));\r\n                dispatch(setIsPatientsLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const getPatientByIdAsync = (id: string) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setPatientInfoLoading(true));\r\n        DataSvc.patientSvc.getPatientById(id).then(\r\n            (result: any) => {\r\n                dispatch(setPatientInfo(result));\r\n                dispatch(setPatientInfoLoading(false));\r\n            },\r\n            (error) => { console.log(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const removePatientByIdAsync = (id: string) => {\r\n    return (dispatch: any, getState: any) => {\r\n        DataSvc.patientSvc.getPatientById(id).then(\r\n            (result: any) => {\r\n                DataSvc.patientSvc.removePatient(result).then(\r\n                    () => {\r\n                        dispatch(getAllPatientsAsync());\r\n                    },\r\n                    (error) => { console.log(error); }\r\n                )\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}","import React from 'react';\r\nimport { Button, Form } from 'react-bootstrap';\r\nimport Popup from 'reactjs-popup';\r\nimport './static.scss';\r\n\r\ntype OwnProps = {\r\n    target: string;\r\n    params: string;\r\n    targetId: string;\r\n};\r\n\r\ntype DispatchProps = {\r\n    handleRemove: (id: string, e: any) => void;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nexport default function ConfirmDenyModal(props: Props) {\r\n    return (\r\n        <Popup\r\n            className='modal'\r\n            trigger={\r\n                <Button variant='danger' className='modal-rm'>REMOVE</Button>\r\n            }\r\n            modal\r\n        >\r\n            {(close: any) => (\r\n                <Form.Group>\r\n                    <button className='modal-close' onClick={close}>\r\n                        &times;\r\n                    </button>\r\n                    <Form.Label className='modal-head'>Do you want to permanently delete this?</Form.Label>\r\n                    <Form.Group className='modal-core'>\r\n                        {' '}\r\n                        {`The following action will remove ${props.target.toLocaleUpperCase()} with ${props.params.toLocaleUpperCase()}`}\r\n                    </Form.Group>\r\n                    <Form.Group className='modal-actions'>\r\n                        <Button variant='success' onClick={(e: any) => props.handleRemove(props.targetId, e)} >CONFRIM</Button>\r\n                        <Button variant='secondary' onClick={close} >CANCEL</Button>\r\n                    </Form.Group>\r\n                </Form.Group>\r\n            )\r\n            }\r\n        </Popup >\r\n    )\r\n}","import React, { useMemo, useState } from 'react';\r\nimport { Table } from 'react-bootstrap';\r\nimport {\r\n  useTable,\r\n  useGlobalFilter,\r\n  usePagination,\r\n  useSortBy,\r\n} from 'react-table';\r\nimport { Button, Form } from 'react-bootstrap';\r\nimport GlobalFilter from './global-filter';\r\nimport EupatiPatientDetails from './patient-details';\r\nimport './static.scss';\r\nimport EupatiLoader from './loading-animation/loader';\r\nimport { DiseaseInfo, Patient } from '../models/main-models';\r\nimport { LookUpData } from '../models/input-models';\r\nimport { useHistory } from 'react-router';\r\nimport { toast } from 'react-toastify';\r\nimport { REMOVE_PT_SUCC_MSG } from '../../common/helpers/messages';\r\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport {\r\n  faSortAlphaDown,\r\n  faSortAlphaUp,\r\n  faFileExcel,\r\n} from '@fortawesome/fontawesome-free-solid';\r\nimport { faWindowMinimize } from '@fortawesome/fontawesome-free-regular';\r\nimport { CSVLink } from 'react-csv';\r\nimport uniqid from 'uniqid';\r\nimport ConfirmDenyModal from './confirm-deny-modal';\r\n\r\ntype OwnProps = {\r\n  lookUpData: LookUpData[];\r\n  patients: Patient[];\r\n  patientDetails: Patient;\r\n};\r\n\r\ntype DispatchProps = {\r\n  removePatientById: (patientId: string) => void;\r\n  showPatientDetails: (patientId: string) => void;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nconst OUTLINE_PADDING_STYLE = {\r\n  paddingLeft: '1.2rem',\r\n  paddingRight: '1.2rem',\r\n};\r\nconst PRIMARY_PADDING_STYLE = {\r\n  paddingLeft: '1.7rem',\r\n  paddingRight: '1.7rem',\r\n};\r\nexport default function EupatiAllPatients(props: Props) {\r\n  const history = useHistory();\r\n\r\n  const [isDetailsBtnClicked, setIsDetailsBtnClicked] =\r\n    useState<boolean>(false);\r\n\r\n  const handleRemovePatient = (id: string, e: any) => {\r\n    e.preventDefault();\r\n    props.removePatientById(id);\r\n    toast.success(REMOVE_PT_SUCC_MSG);\r\n  };\r\n\r\n  const handlePatientDetails = (id: string, e: any) => {\r\n    e.preventDefault();\r\n    setIsDetailsBtnClicked(true);\r\n    props.showPatientDetails(id);\r\n  };\r\n\r\n  const backBtnHandler = () => {\r\n    setIsDetailsBtnClicked(false);\r\n  };\r\n\r\n  const addBtnHandler = () => {\r\n    history.push({\r\n      pathname: '/patient',\r\n      state: { isNewPatient: true },\r\n    });\r\n  };\r\n\r\n  const returnValueById = (propName: string, projectPropId: number) => {\r\n    let propType = props.lookUpData.find((x: any) => x.name == propName); // projectType\r\n    let propValue = propType?.data.find((x: any) => x.id == projectPropId);\r\n    return propValue?.name;\r\n  };\r\n\r\n  const headers = [\r\n    { label: 'First Name', key: 'firstName' },\r\n    { label: 'Last Name', key: 'lastName' },\r\n    { label: 'Country', key: 'country' },\r\n    { label: 'Diseases', key: 'diseases' },\r\n    { label: 'Email', key: 'email' },\r\n    { label: 'Expertises', key: 'expertises' },\r\n    { label: 'Phone number', key: 'phone' },\r\n    { label: 'Other Information', key: 'otherInformation' },\r\n    { label: 'Gender', key: 'gender' },\r\n    { label: 'Patient Experience', key: 'patientExperience' },\r\n    { label: 'Activity Preference', key: 'activityPreference' },\r\n    { label: 'Is Affiliated With Patient Org', key: 'isPOAffiliated' },\r\n    { label: 'Is Eligible For Compensation', key: 'isEligibleForCompensation' },\r\n    {\r\n      label: 'Is Available Without Compensation',\r\n      key: 'isAvailableForNoCompensation',\r\n    },\r\n    { label: 'Languages', key: 'languages' },\r\n    { label: 'Project Preferences', key: 'projectPreferences' },\r\n    { label: 'Project Experiences', key: 'projectTypeExperiences' },\r\n    { label: 'Organisation Preferences', key: 'organisationPreferences' },\r\n    { label: 'Countries With Experience', key: 'countriesWithExperience' },\r\n  ];\r\n\r\n  const data = useMemo(\r\n    () =>\r\n      props.patients?.map((x: any, i: any) => {\r\n        return {\r\n          //default grid cols\r\n          id: x.id,\r\n          firstName: x.firstName,\r\n          lastName: x.lastName,\r\n          country: returnValueById('country', x.countryId),\r\n          diseases: x.noDiseaseExpertise\r\n            ? 'No specific disease experience'\r\n            : x.diseases?.map((d: any) => d.name).join(', '),\r\n          email: x.email,\r\n          expertises: x.patientExpertises\r\n            .map((pe: number) => returnValueById('expertise', pe))\r\n            .join(', '),\r\n          //additional csv cols\r\n          //single fields\r\n          phone: `${x.phoneNumber}`,\r\n          otherInformation: x.otherInformation?.replace(/\\r?\\n/g, ''),\r\n          gender: returnValueById('genderType', x.genderTypeId),\r\n          patientExperience: returnValueById(\r\n            'patientExperiense',\r\n            x.patientExperienceId\r\n          ),\r\n          activityPreference: returnValueById(\r\n            'activityType',\r\n            x.activityPreferenceId\r\n          ),\r\n          isPOAffiliated: x.isPOAffiliated ? 'Yes' : 'No',\r\n          isEligibleForCompensation: x.isEligibleForCompensation ? 'Yes' : 'No',\r\n          isAvailableForNoCompensation: x.isAvailableForNoCompensation\r\n            ? 'Yes'\r\n            : 'No',\r\n          //collections\r\n          projectPreferences: x.projectPreferences\r\n            .map((pp: number) => returnValueById('projectType', pp))\r\n            .join(', '),\r\n          projectTypeExperiences: x.projectTypeExperiences\r\n            .map((pte: number) => returnValueById('projectType', pte))\r\n            .join(', '),\r\n          organisationPreferences: x.organisationPreferences\r\n            .map((op: number) => returnValueById('organisationType', op))\r\n            .join(', '),\r\n          countriesWithExperience: x.countriesWithExperience\r\n            .map((c: string) => returnValueById('country', parseInt(c)))\r\n            .join(', '),\r\n          languages: x.languages\r\n            .map((l: string) => returnValueById('language', parseInt(l)))\r\n            .join(', '),\r\n          matchedProjects: x.matchedProjects.length,\r\n          confirmedProjects: x.confirmedProjects.length,\r\n        };\r\n      }),\r\n    [props.patients]\r\n  );\r\n\r\n  const columns = useMemo(\r\n    () => [\r\n      {\r\n        Header: 'Name',\r\n        accessor: 'name', // accessor is the \"key\" in the data\r\n      },\r\n      {\r\n        Header: 'Country',\r\n        accessor: 'country',\r\n      },\r\n      {\r\n        Header: 'Disease',\r\n        accessor: 'diseases',\r\n      },\r\n      {\r\n        Header: 'Email',\r\n        accessor: 'email',\r\n      },\r\n      {\r\n        Header: 'Expertises',\r\n        accessor: 'expertises',\r\n      },\r\n    ],\r\n    []\r\n  );\r\n\r\n  const {\r\n    getTableProps,\r\n    getTableBodyProps,\r\n    headerGroups,\r\n    // @ts-ignore\r\n    page,\r\n    rows,\r\n    // @ts-ignore\r\n    nextPage,\r\n    // @ts-ignore\r\n    previousPage,\r\n    // @ts-ignore\r\n    canNextPage,\r\n    // @ts-ignore\r\n    canPreviousPage,\r\n    prepareRow,\r\n    visibleColumns,\r\n    // @ts-ignore\r\n    pageOptions,\r\n    // @ts-ignore\r\n    gotoPage,\r\n    // @ts-ignore\r\n    pageCount,\r\n    // @ts-ignore\r\n    setPageSize,\r\n    state,\r\n    // @ts-ignore\r\n    setGlobalFilter,\r\n  } = useTable(\r\n    {\r\n      // @ts-ignore\r\n      columns,\r\n      data,\r\n      // @ts-ignore\r\n      initialState: { pageIndex: 0 },\r\n    },\r\n    useGlobalFilter,\r\n    useSortBy,\r\n    usePagination\r\n  );\r\n  // @ts-ignore\r\n  const { globalFilter, pageSize, pageIndex } = state;\r\n\r\n  let patientsDetailsComp: any;\r\n  let loadComp = (\r\n    <div className=\"loader-wrapper\">\r\n      <EupatiLoader />\r\n    </div>\r\n  );\r\n\r\n  function redirectToPatientsPage() {\r\n    history.push({\r\n      pathname: '/patient',\r\n      state: {\r\n        patientId: props.patientDetails.id,\r\n        isNewPatient: false,\r\n      },\r\n    });\r\n  }\r\n\r\n  function returnProperIconType(icon: any) {\r\n    return icon as IconProp;\r\n  }\r\n\r\n  if (props.patientDetails.id === '') {\r\n    patientsDetailsComp = loadComp;\r\n  } else {\r\n    patientsDetailsComp = (\r\n      <EupatiPatientDetails\r\n        {...{\r\n          patientInfo: props.patientDetails,\r\n          lookUpData: props.lookUpData,\r\n          backBtnHandler: backBtnHandler,\r\n          leftArrowText: 'all patients',\r\n          rightArrowText: 'edit patient',\r\n          forwardBtnHandler: redirectToPatientsPage,\r\n          isForwardArrowAvail: true,\r\n        }}\r\n      />\r\n    );\r\n  }\r\n\r\n  return (\r\n    <>\r\n      {isDetailsBtnClicked && <>{patientsDetailsComp}</>}\r\n      {!isDetailsBtnClicked && (\r\n        <>\r\n          <h4 style={{ textAlign: 'center', textDecoration: 'underline' }}>\r\n            PATIENTS\r\n          </h4>\r\n          <div className=\"table-btns\">\r\n            <Button id=\"add-pt-btn\" onClick={addBtnHandler}>\r\n              ADD PATIENT\r\n            </Button>\r\n            <span>\r\n              <strong>{props.patients?.length}</strong> patients in total.\r\n            </span>\r\n            <CSVLink\r\n              data={data}\r\n              headers={headers}\r\n              id=\"csv-download-btn\"\r\n              filename={`${uniqid('patients-table-')}.csv`}\r\n              className=\"btn btn-success\"\r\n            >\r\n              DOWNLOAD{' '}\r\n              <FontAwesomeIcon icon={returnProperIconType(faFileExcel)} />\r\n            </CSVLink>\r\n          </div>\r\n          <Table {...getTableProps()} striped bordered hover>\r\n            <thead>\r\n              {headerGroups.map((headerGroup) => (\r\n                <tr {...headerGroup.getHeaderGroupProps()}>\r\n                  {headerGroup.headers.map((col) => (\r\n                    //@ts-ignore\r\n                    <th {...col.getHeaderProps(col.getSortByToggleProps())}>\r\n                      {col.render('Header')}\r\n                      <span>\r\n                        {\r\n                          /* @ts-ignore */\r\n                          col.isSorted ? (\r\n                            /* @ts-ignore */\r\n                            col.isSortedDesc ? (\r\n                              <FontAwesomeIcon\r\n                                icon={returnProperIconType(faSortAlphaDown)}\r\n                              />\r\n                            ) : (\r\n                              <FontAwesomeIcon\r\n                                icon={returnProperIconType(faSortAlphaUp)}\r\n                              />\r\n                            )\r\n                          ) : (\r\n                            <FontAwesomeIcon\r\n                              id=\"line\"\r\n                              icon={returnProperIconType(faWindowMinimize)}\r\n                            />\r\n                          )\r\n                        }\r\n                      </span>\r\n                    </th>\r\n                  ))}\r\n                </tr>\r\n              ))}\r\n              <tr>\r\n                <th\r\n                  colSpan={visibleColumns.length}\r\n                  style={{ textAlign: 'left' }}\r\n                >\r\n                  <GlobalFilter\r\n                    filter={globalFilter}\r\n                    setFilter={setGlobalFilter}\r\n                  />\r\n                </th>\r\n              </tr>\r\n            </thead>\r\n            <tbody {...getTableBodyProps()}>\r\n              {page.map((row: any) => {\r\n                prepareRow(row);\r\n                return (\r\n                  <tr {...row.getRowProps()}>\r\n                    {row.cells.map((cell: any) => {\r\n                      return (\r\n                        <td {...cell.getCellProps()}>{cell.render('Cell')}</td>\r\n                      );\r\n                    })}\r\n                    <>\r\n                      <td>\r\n                        <Button\r\n                          variant=\"info\"\r\n                          onClick={(e: any) =>\r\n                            handlePatientDetails(row.original.id, e)\r\n                          }\r\n                        >\r\n                          DETAILS\r\n                        </Button>\r\n                      </td>\r\n                      <td>\r\n                        <ConfirmDenyModal\r\n                          {...{\r\n                            targetId: row.original.id,\r\n                            target: 'patient',\r\n                            params: `email address - ${\r\n                              props.patients.find(\r\n                                (pt: Patient) => pt.id === row.original.id\r\n                              )?.email\r\n                            }`,\r\n                            handleRemove: handleRemovePatient,\r\n                          }}\r\n                        />\r\n                        {/* <Button\r\n                                                    variant='danger'\r\n                                                    onClick={(e: any) => handleRemovePatient(row.original.id, e)}\r\n                                                >\r\n                                                    REMOVE\r\n                                                </Button> */}\r\n                      </td>\r\n                    </>\r\n                  </tr>\r\n                );\r\n              })}\r\n            </tbody>\r\n          </Table>\r\n          <Form.Group\r\n            style={{\r\n              display: 'flex',\r\n              justifyContent: 'space-between',\r\n              alignItems: 'center',\r\n            }}\r\n          >\r\n            <span>\r\n              Page{' '}\r\n              <strong>\r\n                {pageIndex + 1} of {pageOptions.length}\r\n              </strong>\r\n            </span>\r\n            <span>\r\n              Go to page:{' '}\r\n              <input\r\n                type=\"number\"\r\n                defaultValue={pageIndex + 1}\r\n                min=\"1\"\r\n                disabled={pageSize >= rows.length}\r\n                onChange={(e) => {\r\n                  e.preventDefault();\r\n                  const pageNum = e.target.value\r\n                    ? Number(e.target.value) - 1\r\n                    : 0;\r\n                  gotoPage(pageNum);\r\n                }}\r\n              />\r\n            </span>\r\n            <select\r\n              value={pageSize}\r\n              onChange={(e) => setPageSize(e.target.value)}\r\n            >\r\n              {[10, 25, 50, 100].map((pageSize) => (\r\n                <option key={pageSize} value={pageSize}>\r\n                  Show {pageSize}\r\n                </option>\r\n              ))}\r\n            </select>\r\n            <Button\r\n              id=\"backToFirstPageBtn\"\r\n              onClick={() => gotoPage(0)}\r\n              disabled={!canPreviousPage}\r\n              style={\r\n                canPreviousPage\r\n                  ? { cursor: 'pointer', ...OUTLINE_PADDING_STYLE }\r\n                  : { cursor: 'not-allowed', ...OUTLINE_PADDING_STYLE }\r\n              }\r\n              className=\"btn btn-outline-dark btn-sm\"\r\n            >\r\n              {'<<'}\r\n            </Button>\r\n            <Button\r\n              onClick={() => previousPage()}\r\n              disabled={!canPreviousPage}\r\n              style={\r\n                canPreviousPage\r\n                  ? { cursor: 'pointer' }\r\n                  : { cursor: 'not-allowed' }\r\n              }\r\n              variant=\"secondary\"\r\n            >\r\n              Previous\r\n            </Button>\r\n            <Button\r\n              onClick={() => nextPage()}\r\n              disabled={!canNextPage}\r\n              style={\r\n                canNextPage\r\n                  ? { cursor: 'pointer', ...PRIMARY_PADDING_STYLE }\r\n                  : { cursor: 'not-allowed', ...PRIMARY_PADDING_STYLE }\r\n              }\r\n              variant=\"primary\"\r\n            >\r\n              Next\r\n            </Button>\r\n            <Button\r\n              id=\"gotoLastPageBtn\"\r\n              onClick={() => gotoPage(pageCount - 1)}\r\n              disabled={!canNextPage}\r\n              style={\r\n                canNextPage\r\n                  ? { cursor: 'pointer', ...OUTLINE_PADDING_STYLE }\r\n                  : { cursor: 'not-allowed', ...OUTLINE_PADDING_STYLE }\r\n              }\r\n              className=\"btn btn-outline-dark btn-sm\"\r\n            >\r\n              {'>>'}\r\n            </Button>\r\n          </Form.Group>\r\n        </>\r\n      )}\r\n    </>\r\n  );\r\n}\r\n","import * as React from 'react';\r\nimport { Form } from 'react-bootstrap';\r\nimport EupatiLoader from '../../../../common/static/loading-animation/loader';\r\nimport EupatiAllPatients from '../../../../common/static/patients-grid';\r\nimport { State } from '../model';\r\nimport '../style.scss';\r\n\r\ntype OwnProps = {};\r\n\r\nexport type DispatchProps = {\r\n    setLookUpData: () => void;\r\n    setPatients: () => void;\r\n    removePatientById: (patientId: string) => void;\r\n    setPatientInfo: (patientId: string) => void;\r\n};\r\n\r\ntype Props = State & DispatchProps & OwnProps;\r\n\r\ntype OwnState = {};\r\n\r\nexport default class ComponentRoot extends React.Component<Props, OwnState> {\r\n\r\n    componentDidMount() {\r\n        this.props.setPatients();\r\n        this.props.setLookUpData();\r\n    }\r\n\r\n    render() {\r\n\r\n        let mainComponent: any;\r\n\r\n        let loadingComponent = (\r\n            <div className='loader-wrapper'>\r\n                <EupatiLoader />\r\n            </div>\r\n        )\r\n\r\n        if (this.props.isLoading ||\r\n            this.props.isPatientsLoading) {\r\n            mainComponent = loadingComponent;\r\n        }\r\n        else {\r\n            mainComponent = (\r\n                <Form.Group id='all-patients-tbl' className='all-patients-wrapper mb-5'>\r\n                    <EupatiAllPatients\r\n                        {...{\r\n                            lookUpData: this.props.lookUpData,\r\n                            patients: this.props.patients,\r\n                            removePatientById: this.props.removePatientById,\r\n                            showPatientDetails: this.props.setPatientInfo,\r\n                            patientDetails: this.props.patientInfo\r\n                        }}\r\n                    />\r\n                </Form.Group>\r\n            )\r\n        }\r\n\r\n        return (\r\n            <>\r\n                {mainComponent}\r\n            </>\r\n        );\r\n    }\r\n}","import { default as RootComponent, DispatchProps } from '../components/component-root';\r\nimport * as Constants from '../constants';\r\nimport * as Actions from '../actions';\r\nimport { State } from '../model';\r\nimport { connect } from 'react-redux';\r\n\r\nexport function mapStateToProps(globalState: any) {\r\n    let name = Constants.NAME;\r\n    let pageState = globalState[name] as State;\r\n    return pageState;\r\n}\r\n\r\nexport function mapDispatchToProps(dispatch: any) {\r\n    return {\r\n        setLookUpData: () => dispatch(Actions.getLookUpDataAsync()),\r\n        setPatients: () => dispatch(Actions.getAllPatientsAsync()),\r\n        removePatientById: (patientId: string) => dispatch(Actions.removePatientByIdAsync(patientId)),\r\n        setPatientInfo: (patientId: string) => dispatch(Actions.getPatientByIdAsync(patientId))\r\n    } as DispatchProps;\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RootComponent);","import { State } from './model';\r\nimport * as t from './actionTypes';\r\nimport { LookUpData } from '../../../common/models/input-models';\r\nimport { Patient } from '../../../common/models/main-models';\r\nimport { defaultPatientInfo } from '../../patient-profile/model';\r\n\r\nconst initialState: State = {\r\n    patients: [],\r\n    lookUpData: [],\r\n    isLoading: false,\r\n    isPatientsLoading: false,\r\n    isPatientInfoLoading: false,\r\n    patientInfo: defaultPatientInfo\r\n};\r\n\r\nexport default (state = initialState, action: any): State => {\r\n    switch (action.type) {\r\n        case t.SET_LOADING:\r\n            return setLoading(state, action.payload);\r\n        case t.SET_LOOKUP_DATA:\r\n            return setLookUpData(state, action.payload);\r\n        case t.SET_PATIENTS_LOADING:\r\n            return setPatientsLoading(state, action.payload);\r\n        case t.SET_PATIENTS:\r\n            return setPatients(state, action.payload);\r\n        case t.SET_PATIENT_INFO_LOADING:\r\n            return setPatientInfoLoading(state, action.payload);\r\n        case t.SET_PATIENT_INFO:\r\n            return setPatientInfo(state, action.payload);\r\n        default:\r\n            return state;\r\n    }\r\n}\r\n\r\nconst setLoading = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setLookUpData = (state: State, val: LookUpData[]): State => {\r\n    let newState = {\r\n        ...state,\r\n        lookUpData: [...val]\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setPatientsLoading = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isPatientsLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setPatients = (state: State, val: Patient[]): State => {\r\n    let newState = {\r\n        ...state,\r\n        patients: [...val]\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setPatientInfoLoading = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isPatientInfoLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setPatientInfo = (state: State, val: Patient): State => {\r\n    let newState = {\r\n        ...state,\r\n        patientInfo: { ...val }\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n","import * as Actions from './actions';\r\nimport * as Components from './components/index';\r\nimport * as Containers from './containers/index';\r\nimport * as Constants from './constants';\r\nimport Reducer from './reducer';\r\n\r\nexport default {\r\n    actions: Actions,\r\n    components: Components,\r\n    containers: Containers,\r\n    constants: Constants,\r\n    reducer: Reducer\r\n};\r\n\r\nexport const Root = Containers.ComponentRoot;","// constants.ts\r\n\r\nexport const NAME = 'allAdmins';","import { NAME } from \"./constants\";\r\n\r\nexport const SET_ADMINS_LOADING = `${NAME}/SET_ADMINS_LOADING`;\r\n\r\nexport const SET_ADMINS = `${NAME}/SET_ADMINS`;","import { User } from '../../../common/models/main-models';\r\nimport DataSvc from '../../../common/services/data-svc';\r\nimport * as t from './actionTypes';\r\n\r\nexport const setIsAdminsLoading = (isAdminsLoading: boolean) => ({\r\n  type: t.SET_ADMINS_LOADING,\r\n  payload: isAdminsLoading,\r\n});\r\n\r\nexport const setAdmins = (admins: User[]) => ({\r\n  type: t.SET_ADMINS,\r\n  payload: [...admins],\r\n});\r\n\r\nexport const getAllAdminsAsync = () => {\r\n  return (dispatch: any, getState: any) => {\r\n    dispatch(setIsAdminsLoading(true));\r\n    DataSvc.usersSvc.getAllAdmins().then(\r\n      (result: any) => {\r\n        dispatch(setAdmins(result));\r\n        dispatch(setIsAdminsLoading(false));\r\n      },\r\n      (error) => {\r\n        console.error(error);\r\n      }\r\n    );\r\n  };\r\n};\r\n\r\nexport const removeAdminAsync = (id: string, ownerId: string) => {\r\n  return (dispatch: any, getState: any) => {\r\n    dispatch(setIsAdminsLoading(true));\r\n    DataSvc.usersSvc.getEupatiUserById(ownerId).then(\r\n      (result: any) => {\r\n        DataSvc.usersSvc.removeAdmin({ id: id, email: '' } as User).then(\r\n          () => {\r\n            dispatch(getAllAdminsAsync());\r\n            dispatch(setIsAdminsLoading(false));\r\n          },\r\n          (error) => {\r\n            console.error(error);\r\n          }\r\n        );\r\n      },\r\n      (error) => {\r\n        console.error(error);\r\n      }\r\n    );\r\n  };\r\n};\r\n\r\nexport const approveAdminAsync = (id: string, ownerId: string) => {\r\n  return (dispatch: any, getState: any) => {\r\n    dispatch(setIsAdminsLoading(true));\r\n    DataSvc.usersSvc.getAdminById(ownerId).then(\r\n      (result: any) => {\r\n        DataSvc.usersSvc.approveAdmin({ id: id, email: '' } as User).then(\r\n          () => {\r\n            dispatch(getAllAdminsAsync());\r\n            dispatch(setIsAdminsLoading(false));\r\n          },\r\n          (error) => {\r\n            console.error(error);\r\n          }\r\n        );\r\n      },\r\n      (error) => {\r\n        console.error(error);\r\n      }\r\n    );\r\n  };\r\n};\r\n","import React, { useMemo, useContext } from 'react';\r\nimport { Button } from 'react-bootstrap';\r\nimport { useTable, useGlobalFilter, usePagination } from 'react-table';\r\nimport { Table } from 'reactstrap';\r\nimport { User } from '../models/main-models';\r\nimport GlobalFilter from './global-filter';\r\nimport { toast } from 'react-toastify';\r\nimport {\r\n  REMOVE_ADMIN_SUCC_MSG,\r\n  APPROVE_ADMIN_SUCC_MSG,\r\n} from '../../common/helpers/messages';\r\nimport AuthenticationContext from '../../common/static/auth-context';\r\nimport './static.scss';\r\nimport { Roles } from '../helpers';\r\nimport ConfirmDenyModal from './confirm-deny-modal';\r\n\r\ntype OwnProps = {\r\n  admins: User[];\r\n};\r\n\r\ntype DispatchProps = {\r\n  removeAdmin: (id: string, ownerId: string) => void;\r\n  approveAdmin: (id: string, ownerId: string) => void;\r\n};\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nexport default function EupatiAllAdminsGrid(props: Props) {\r\n  const contextData = useContext(AuthenticationContext);\r\n\r\n  const handleOnRemove = (id: string, event: any) => {\r\n    event.preventDefault();\r\n    props.removeAdmin(id, contextData.userIdentity);\r\n    toast.success(REMOVE_ADMIN_SUCC_MSG);\r\n  };\r\n\r\n  const handleOnApprove = (id: string, event: any) => {\r\n    event.preventDefault();\r\n    props.approveAdmin(id, contextData.userIdentity);\r\n    toast.success(APPROVE_ADMIN_SUCC_MSG);\r\n  };\r\n\r\n  const data = useMemo(\r\n    () =>\r\n      props?.admins?.map((x: any, i: any) => {\r\n        return {\r\n          id: x.id,\r\n          email: x.email,\r\n          role: x.role,\r\n        };\r\n      }),\r\n    [props?.admins]\r\n  );\r\n\r\n  const columns = useMemo(\r\n    () => [\r\n      {\r\n        Header: 'Email',\r\n        accessor: 'email',\r\n      },\r\n    ],\r\n    []\r\n  );\r\n\r\n  const {\r\n    getTableProps,\r\n    getTableBodyProps,\r\n    headerGroups, // columns Header\r\n    rows, // render data based on accessor\r\n    // @ts-ignore\r\n    page,\r\n    prepareRow,\r\n    // @ts-ignore\r\n    visibleColumns,\r\n    // @ts-ignore\r\n    state,\r\n    // @ts-ignore\r\n    setGlobalFilter,\r\n  } = useTable(\r\n    {\r\n      // @ts-ignore\r\n      columns,\r\n      data,\r\n    },\r\n    useGlobalFilter,\r\n    usePagination\r\n  );\r\n  // @ts-ignore\r\n  const { globalFilter, pageSize, pageIndex } = state;\r\n\r\n  return (\r\n    <>\r\n      <h4\r\n        style={{\r\n          textAlign: 'center',\r\n          textDecoration: 'underline',\r\n          margin: '5rem auto 2.5rem auto',\r\n        }}\r\n      >\r\n        ADMINS\r\n      </h4>\r\n      <Table {...getTableProps()} striped bordered hover>\r\n        <thead>\r\n          {headerGroups.map((headerGroup) => (\r\n            <tr {...headerGroup.getHeaderGroupProps()}>\r\n              {headerGroup.headers.map((col) => (\r\n                <th {...col.getHeaderProps()}>{col.render('Header')}</th>\r\n              ))}\r\n            </tr>\r\n          ))}\r\n          <tr>\r\n            <th colSpan={visibleColumns.length} style={{ textAlign: 'left' }}>\r\n              <GlobalFilter filter={globalFilter} setFilter={setGlobalFilter} />\r\n            </th>\r\n          </tr>\r\n        </thead>\r\n        <tbody {...getTableBodyProps()}>\r\n          {page.map((row: any) => {\r\n            prepareRow(row);\r\n            return (\r\n              <tr {...row.getRowProps()}>\r\n                {row.cells.map((cell: any) => {\r\n                  return (\r\n                    <td {...cell.getCellProps()}>{cell.render('Cell')}</td>\r\n                  );\r\n                })}\r\n                <>\r\n                  {props.admins\r\n                    .find((a) => a.id === row.original.id)\r\n                    ?.role.toUpperCase() === Roles.Member && (\r\n                    <td>\r\n                      <Button\r\n                        variant=\"success\"\r\n                        onClick={(e: any) =>\r\n                          handleOnApprove(row.original.id, e)\r\n                        }\r\n                      >\r\n                        APPROVE\r\n                      </Button>\r\n                    </td>\r\n                  )}\r\n                  <td>\r\n                    <ConfirmDenyModal\r\n                      {...{\r\n                        targetId: row.original.id,\r\n                        target: 'admin',\r\n                        params: `email - ${\r\n                          props.admins.find(\r\n                            (a: User) => a.id === row.original.id\r\n                          )?.email\r\n                        }`,\r\n                        handleRemove: handleOnRemove,\r\n                      }}\r\n                    />\r\n                    {/* <Button\r\n                                            variant=\"danger\"\r\n                                            onClick={(e: any) => handleOnRemove(row.original.id, e)}\r\n                                        >\r\n                                            REMOVE\r\n                                        </Button> */}\r\n                  </td>\r\n                </>\r\n              </tr>\r\n            );\r\n          })}\r\n        </tbody>\r\n      </Table>\r\n    </>\r\n  );\r\n}\r\n","import React from 'react';\r\nimport { Form } from 'react-bootstrap';\r\nimport EupatiAllAdminsGrid from '../../../../common/static/admins-grid';\r\nimport EupatiLoader from '../../../../common/static/loading-animation/loader';\r\nimport { State } from '../model';\r\nimport '../style.scss';\r\n\r\ntype OwnProps = {};\r\n\r\nexport type DispatchProps = {\r\n  setAdminsData: () => void;\r\n  removeAdminData: (id: string, ownerId: string) => void;\r\n  approveAdmin: (id: string, ownerId: string) => void;\r\n};\r\n\r\ntype Props = State & DispatchProps & OwnProps;\r\n\r\ntype OwnState = {};\r\n\r\nconst HtmlToReactParser = require('html-to-react').Parser;\r\nexport default class ComponentRoot extends React.Component<Props, OwnState> {\r\n  componentDidMount() {\r\n    this.props.setAdminsData();\r\n  }\r\n\r\n  render() {\r\n    let mainComp: any;\r\n\r\n    let loadComp = (\r\n      <div className=\"loader-wrapper\">\r\n        <EupatiLoader />\r\n      </div>\r\n    );\r\n\r\n    if (this.props.isAdminsLoading) {\r\n      mainComp = loadComp;\r\n    } else {\r\n      mainComp = (\r\n        <Form.Group id=\"all-admins-tbl\" className=\"all-admins-wrapper mb-5\">\r\n          <EupatiAllAdminsGrid\r\n            {...{\r\n              admins: this.props?.admins,\r\n              removeAdmin: this.props?.removeAdminData,\r\n              approveAdmin: this.props?.approveAdmin,\r\n            }}\r\n          />\r\n        </Form.Group>\r\n      );\r\n    }\r\n\r\n    return <>{mainComp}</>;\r\n  }\r\n}\r\n","import {\r\n  default as RootComponent,\r\n  DispatchProps,\r\n} from '../components/component-root';\r\nimport * as Constants from '../constants';\r\nimport * as Actions from '../actions';\r\nimport { State } from '../model';\r\nimport { connect } from 'react-redux';\r\n\r\nexport function mapStateToProps(globalState: any) {\r\n  let name = Constants.NAME;\r\n  let pageState = globalState[name] as State;\r\n  return pageState;\r\n}\r\n\r\nexport function mapDispatchToProps(dispatch: any) {\r\n  return {\r\n    setAdminsData: () => dispatch(Actions.getAllAdminsAsync()),\r\n    removeAdminData: (id: string, ownerId: string) =>\r\n      dispatch(Actions.removeAdminAsync(id, ownerId)),\r\n    approveAdmin: (id: string, ownerId: string) =>\r\n      dispatch(Actions.approveAdminAsync(id, ownerId)),\r\n  } as DispatchProps;\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RootComponent);\r\n","import { User } from \"../../../common/models/main-models\";\r\nimport { State } from \"./model\";\r\nimport * as t from './actionTypes';\r\n\r\nconst initialState: State = {\r\n    admins: [],\r\n    isAdminsLoading: false\r\n}\r\n\r\nexport default (state = initialState, action: any): State => {\r\n    switch (action.type) {\r\n        case t.SET_ADMINS_LOADING:\r\n            return setAdminsLoading(state, action.payload);\r\n        case t.SET_ADMINS:\r\n            return setAdmins(state, action.payload);\r\n        default:\r\n            return state;\r\n    }\r\n}\r\n\r\nconst setAdminsLoading = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isAdminsLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setAdmins = (state: State, val: User[]): State => {\r\n    let newState = {\r\n        ...state,\r\n        admins: [...val]\r\n    } as State;\r\n\r\n    return newState;\r\n}","import * as Actions from './actions';\r\nimport * as Components from './components/index';\r\nimport * as Containers from './containers/index';\r\nimport * as Constants from './constants';\r\nimport Reducer from './reducer';\r\n\r\nexport default {\r\n    actions: Actions,\r\n    components: Components,\r\n    containers: Containers,\r\n    constants: Constants,\r\n    reducer: Reducer\r\n};\r\n\r\nexport const Root = Containers.ComponentRoot;","// constants.ts\r\n\r\nexport const NAME = 'contentEditor';","import { NAME } from \"./constants\";\r\n\r\nexport const SET_CONTENT_LOADING = `${NAME}/SET_CONTENT_LOADING`;\r\n\r\nexport const SET_CONTENT_RESPONSE = `${NAME}/SET_CONTENT_RESPONSE`;","import { ContentData, ContentResponse } from '../../../common/models/input-models';\r\nimport DataSvc from '../../../common/services/data-svc';\r\nimport * as t from './actionTypes';\r\n\r\nexport const setContentLoading = (isContentLoading: boolean) => ({\r\n    type: t.SET_CONTENT_LOADING,\r\n    payload: isContentLoading\r\n});\r\n\r\nexport const setContentResponse = (contentResponse: ContentResponse) => ({\r\n    type: t.SET_CONTENT_RESPONSE,\r\n    payload: { ...contentResponse }\r\n});\r\n\r\nexport const getContentByNameAsync = (name: string) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setContentLoading(true));\r\n        DataSvc.utilsSvc.getContent(name).then(\r\n            (result: any) => {\r\n                dispatch(setContentResponse(result));\r\n                dispatch(setContentLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const updateContentAsync = (contentData: ContentData) => {\r\n    return (dispatch: any, getState: any) => {\r\n        try {\r\n            DataSvc.utilsSvc.updateContent(contentData);\r\n        }\r\n        catch (error) {\r\n            console.error(error);\r\n        }\r\n    }\r\n}","import React, { useRef } from 'react';\r\nimport { Editor } from '@tinymce/tinymce-react';\r\nimport { ContentData } from '../models/input-models';\r\nimport { useHistory } from 'react-router';\r\nimport { toast } from 'react-toastify';\r\nimport { Button } from 'react-bootstrap';\r\n\r\ntype OwnProps = {\r\n    content: string;    // default state\r\n    pageName: string;  //  privacy or terms\r\n}\r\n\r\nexport type DispatchProps = {\r\n    updateContent: (data: ContentData) => void;\r\n}\r\n\r\ntype Props = DispatchProps & OwnProps;\r\n\r\nexport default function TinyMCEditor(props: Props) {\r\n    const history = useHistory();\r\n    const editorRef = useRef(null);\r\n    const submit = () => {\r\n        if (editorRef.current) {\r\n            props.updateContent({\r\n                name: props.pageName,\r\n                rawDraftContent: '',\r\n                //@ts-ignore\r\n                htmlContent: editorRef.current.getContent()\r\n            } as ContentData);\r\n            toast.success(`You have successfully updated the ${props.pageName.toUpperCase()} content.`);\r\n            setTimeout(() => {\r\n                history.push(`/${props.pageName.toLowerCase()}`);\r\n            }, 200);\r\n        }\r\n    };\r\n    return (\r\n        <>\r\n            <Editor\r\n                //@ts-ignore\r\n                onInit={(evt, editor) => (editorRef.current) = editor}\r\n                initialValue={props.content}\r\n                apiKey=\"gi5vdpb46pw329w18n94luc6ne2yimgpjks785wd387s2qvu\"\r\n                init={{\r\n                    height: 500,\r\n                    convert_urls: true,\r\n                    relative_urls: false,\r\n                    remove_script_host: false,\r\n                    menubar: 'file edit view insert format tools table',\r\n                    plugins: [\r\n                        'advlist autolink lists link image charmap print preview anchor',\r\n                        'searchreplace visualblocks code fullscreen',\r\n                        'insertdatetime media table paste code wordcount'\r\n                    ],\r\n                    toolbar: 'undo redo | formatselect | ' +\r\n                        'bold italic backcolor | alignleft aligncenter ' +\r\n                        'alignright alignjustify | bullist numlist outdent indent | accordion |' +\r\n                        'removeformat',\r\n                    setup: function (editor) {\r\n                        editor.ui.registry.addButton('accordion', {\r\n                            text: 'Collapsible',\r\n                            onAction: function (_) {\r\n                                editor.insertContent('&nbsp;<details> <summary>CHANGE THE TITLE</summary> <p>CHANGE THE CONTENT</p></details>&nbsp;');\r\n                            }\r\n                        });\r\n                    },\r\n                    content_style: 'body {font-family:Helvetica,Arial,sans-serif; font-size:18px }'\r\n                }}\r\n            />\r\n            <div id='editor-btns'>\r\n                <Button variant='secondary' onClick={() => history.push(`/${props.pageName.toLowerCase()}`)} >{`BACK TO ${props.pageName.toUpperCase()}`}</Button>\r\n                <Button variant='primary' onClick={submit}>SAVE</Button>\r\n            </div>\r\n        </>\r\n    );\r\n}\r\n","import * as React from 'react';\r\nimport EupatiLoader from '../../../../common/static/loading-animation/loader';\r\nimport { State } from '../models';\r\nimport EupatiRichTextEditor from '../../../../common/static/text-editor';\r\nimport { ContentData, ContentResponse } from '../../../../common/models/input-models';\r\nimport { RouteComponentProps } from '@reach/router';\r\nimport { History } from 'history';\r\nimport \"react-draft-wysiwyg/dist/react-draft-wysiwyg.css\";\r\nimport TinyMCEditor from '../../../../common/static/tinymce-editor';\r\n\r\ntype OwnProps = {\r\n    isContentLoading: boolean,\r\n    contentResponse: ContentResponse,\r\n    history: History\r\n};\r\n\r\nexport type DispatchProps = {\r\n    getContent: (name: string) => void;\r\n    updateContent: (data: ContentData) => void;\r\n};\r\n\r\ntype Props = State & DispatchProps & OwnProps & RouteComponentProps<{ location: { state: { pageName: string } } }>;\r\n\r\ntype OwnState = {};\r\n\r\n//raw draft content:\r\n//`{\"blocks\": [{\"key\": \"fl66k\",\"text\": \"asdasdasdasd\",\"type\": \"unstyled\",\"depth\": 0,\"inlineStyleRanges\": [],\"entityRanges\": [],\"data\": {}}],\"entityMap\": {}}`,\r\nexport default class ComponentRoot extends React.Component<Props, OwnState> {\r\n\r\n    componentDidMount() {\r\n        if (this.props.location?.state.pageName !== undefined) {\r\n            this.props.getContent(this.props.location?.state.pageName);\r\n        }\r\n    }\r\n\r\n    render() {\r\n\r\n        let mainComp: any;\r\n\r\n        let loadComp = (\r\n            <div className='loader-wrapper'>\r\n                <EupatiLoader />\r\n            </div>\r\n        )\r\n\r\n        if (this.props.isContentLoading ||\r\n            this.props.location?.state.pageName === undefined) {\r\n            mainComp = loadComp;\r\n        }\r\n        else {\r\n            mainComp = (\r\n                // <EupatiRichTextEditor\r\n                //     {...{\r\n                //         pageName: this.props?.location?.state.pageName !== undefined ? this.props.location?.state.pageName : '',\r\n                //         content: this.props?.contentResponse?.rawDraftContent !== undefined ? this.props.contentResponse.rawDraftContent : '',\r\n                //         updateContent: this.props?.updateContent,\r\n                //         history: this.props.history\r\n                //     }}\r\n                // />\r\n                <TinyMCEditor\r\n                    {...{\r\n                        pageName: this.props?.location?.state.pageName !== undefined ? this.props.location?.state.pageName : '',\r\n                        content: this.props?.contentResponse?.htmlContent !== undefined ? this.props.contentResponse.htmlContent : '',\r\n                        updateContent: this.props?.updateContent\r\n                    }}\r\n                />\r\n            )\r\n        }\r\n\r\n        return (\r\n            <>\r\n                {mainComp}\r\n            </>\r\n        )\r\n    }\r\n}","import { default as RootComponent, DispatchProps } from '../components/component-root';\r\nimport * as Constants from '../constants';\r\nimport { State } from '../models';\r\nimport * as Actions from '../actions';\r\nimport { ContentData } from '../../../../common/models/input-models';\r\nimport { connect } from 'react-redux';\r\n\r\nexport function mapStateToProps(globalState: any) {\r\n    let name = Constants.NAME;\r\n    let pageState = globalState[name] as State;\r\n    return pageState;\r\n}\r\n\r\nexport function mapDispatchToProps(dispatch: any) {\r\n    return {\r\n        getContent: (name: string) => dispatch(Actions.getContentByNameAsync(name)),\r\n        updateContent: (data: ContentData) => dispatch(Actions.updateContentAsync(data))\r\n    } as DispatchProps;\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RootComponent);","import { blankResponse, State } from \"./models\";\r\nimport * as t from './actionTypes';\r\nimport { ContentResponse } from \"../../../common/models/input-models\";\r\n\r\nconst initialState: State = {\r\n    isContentLoading: false,\r\n    contentResponse: blankResponse\r\n}\r\n\r\nexport default (state = initialState, action: any): State => {\r\n    switch (action.type) {\r\n        case t.SET_CONTENT_LOADING:\r\n            return setContentLoading(state, action.payload);\r\n        case t.SET_CONTENT_RESPONSE:\r\n            return setContentResponse(state, action.payload);\r\n        default:\r\n            return state;\r\n    }\r\n}\r\n\r\nconst setContentLoading = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isContentLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setContentResponse = (state: State, val: ContentResponse): State => {\r\n    let newState = {\r\n        ...state,\r\n        contentResponse: { ...val }\r\n    } as State;\r\n\r\n    return newState;\r\n}","// model.js\r\n// This is the model of our module state (e.g. return type of the reducer)\r\n\r\nimport { ContentResponse } from \"../../../common/models/input-models\";\r\n\r\nexport type State = {\r\n    isContentLoading: boolean;\r\n    contentResponse: ContentResponse;\r\n}\r\n\r\nexport const blankResponse = {\r\n    rawDraftContent: '',\r\n    htmlContent: ''\r\n} as ContentResponse;","import * as Actions from './actions';\r\nimport * as Components from './components/index';\r\nimport * as Containers from './containers/index';\r\nimport * as Constants from './constants';\r\nimport Reducer from './reducer';\r\n\r\nexport default {\r\n    actions: Actions,\r\n    components: Components,\r\n    containers: Containers,\r\n    constants: Constants,\r\n    reducer: Reducer\r\n};\r\n\r\nexport const Root = Containers.ComponentRoot;","// constants.ts\r\n\r\nexport const NAME = 'priceCatalog';","import { NAME } from './constants';\r\n\r\nexport const SET_IS_CATALOGS_LOADING = `${NAME}/SET_IS_CATALOGS_LOADING`;\r\n\r\nexport const SET_CATALOGS_DATA = `${NAME}/SET_CATALOGS_DATA`;","import { Messages } from '../../../common/helpers';\r\nimport { CatalogData } from '../../../common/models/input-models';\r\nimport DataSvc from '../../../common/services/data-svc';\r\nimport * as t from './actionTypes';\r\n\r\nexport const setIsCatalogsLoading = (isCatalogsLoading: boolean) => ({\r\n    type: t.SET_IS_CATALOGS_LOADING,\r\n    payload: isCatalogsLoading\r\n});\r\n\r\nexport const setCatalogsData = (catalogsData: CatalogData[]) => ({\r\n    type: t.SET_CATALOGS_DATA,\r\n    payload: catalogsData\r\n});\r\n\r\nexport const getCatalogsPricesAsync = () => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setIsCatalogsLoading(true));\r\n        DataSvc.utilsSvc.getPriceCatalogs().then(\r\n            (result: any) => {\r\n                dispatch(setCatalogsData(result));\r\n                dispatch(setIsCatalogsLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const updateCatalogsPricesAsync = (data: CatalogData[]) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setIsCatalogsLoading(true));\r\n        DataSvc.utilsSvc.updatePriceCatalogs(data).then(\r\n            (result: any) => {\r\n                dispatch(getCatalogsPricesAsync());\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}","export const CATALOG_TYPES = {\r\n    Basic: 'Basic',\r\n    TailorMade: 'TailorMade'\r\n};\r\n\r\nexport const CATEGORY_NAMES = {\r\n    Researcher: 'ExternalResearcher',\r\n    Industry: 'IndustryPartner',\r\n    Academia: 'AcademiaPartner'\r\n};\r\n\r\nexport const OPTION_NAMES = {\r\n    Network: 'NetworkOption',\r\n    Mentorship: 'MentorshipOption'\r\n};\r\n\r\nexport const CONVERTED_NAMES = {\r\n    //  based on pricing excel spreadsheet\r\n    AcademiaPartner: 'EUPATI Partner - Academic',\r\n    IndustryPartner: 'EUPATI Partner - Industry',\r\n    ExternalResearcher: 'External Researcher',\r\n    NetworkOption: 'External Networks Option',\r\n    MentorshipOption: 'Mentorship Option',\r\n    TailorMadeType: 'Tailor-Made'\r\n}","import * as React from 'react';\r\nimport { Button, Table } from 'react-bootstrap';\r\nimport { CatalogData, CategoryData, OptionData } from '../models/input-models';\r\nimport { CATALOG_TYPES, CATEGORY_NAMES, CONVERTED_NAMES, OPTION_NAMES } from '../../common/helpers/pricing-list';\r\nimport { toast } from 'react-toastify';\r\nimport { SAVED_NEW_PRICES_MSG, INVALID_NUMERIC_INPUT, CANCEL_PRICES_UPDATE } from '../helpers/messages';\r\n\r\ntype OwnProps = {\r\n    catalogsData: CatalogData[]\r\n};\r\n\r\nexport type DispatchProps = {\r\n    setCatalogsPrices: () => void\r\n    updateCatalogsPrices: (data: CatalogData[]) => void;\r\n};\r\n\r\ntype Props = DispatchProps & OwnProps;\r\n\r\nexport default function EupatiPricesGrid(props: Props) {\r\n\r\n    const [isEditBtnClicked, setIsEditBtnClicked] = React.useState<boolean>(false);\r\n    const [tempData, setTempData] = React.useState<CatalogData[]>([...props.catalogsData]);\r\n\r\n    function onEditRowHandler(e: any) {\r\n        e.preventDefault();\r\n        setIsEditBtnClicked(true);\r\n    }\r\n\r\n    function onCancelOperationHandler(e: any) {\r\n        e.preventDefault();\r\n        toast.info(CANCEL_PRICES_UPDATE);\r\n        setTimeout(() => {\r\n            setIsEditBtnClicked(false);\r\n            props.setCatalogsPrices();\r\n        }, 100);\r\n    }\r\n\r\n    function onChangeBasePriceHandler(e: any, val: any, categoryIndex: number, catalogIndex: number) {\r\n        e.preventDefault();\r\n        if (isNaN(val.basePrice)) { return toast.error(INVALID_NUMERIC_INPUT); }\r\n        const updatedData = Object.assign(tempData[catalogIndex].categoryOptionsData[categoryIndex], val);\r\n        Object.assign(tempData[catalogIndex].categoryOptionsData[categoryIndex], updatedData);\r\n        setTempData([...tempData]);\r\n    }\r\n\r\n    function onChangeOptionsPriceHandler(e: any, val: any, catalogIndex: number, categoryIndex: number, optionIndex: number) {\r\n        e.preventDefault();\r\n        if (isNaN(val.price)) { return toast.error(INVALID_NUMERIC_INPUT); }\r\n        const updatedData = Object.assign(tempData[catalogIndex].categoryOptionsData[categoryIndex].additionalOptionsData[optionIndex], val);\r\n        Object.assign(tempData[catalogIndex].categoryOptionsData[categoryIndex].additionalOptionsData[optionIndex], updatedData);\r\n        setTempData([...tempData]);\r\n    }\r\n\r\n    function onSaveStateHandler(e: any) {\r\n        e.preventDefault();\r\n        toast.success(SAVED_NEW_PRICES_MSG);\r\n        props.updateCatalogsPrices(tempData);\r\n        setIsEditBtnClicked(false);\r\n    }\r\n\r\n    function formatNumber(num: number) {\r\n        return (Math.round(num * 100) / 100).toFixed(2);\r\n    }\r\n\r\n    function convertCategoriesNames(name: string) {\r\n        switch (name) {\r\n            case CATEGORY_NAMES.Academia:\r\n                return `${CONVERTED_NAMES.AcademiaPartner}`\r\n            case CATEGORY_NAMES.Industry:\r\n                return `${CONVERTED_NAMES.IndustryPartner}`\r\n            case CATEGORY_NAMES.Researcher:\r\n                return `${CONVERTED_NAMES.ExternalResearcher}`\r\n            default:\r\n                return ''\r\n        }\r\n    }\r\n\r\n    function convertOptionsNames(category: string, name: string) {\r\n        switch (name) {\r\n            case OPTION_NAMES.Network:\r\n                return `${category.concat(` with ${CONVERTED_NAMES.NetworkOption}`)}`\r\n            case OPTION_NAMES.Mentorship:\r\n                return `${category.concat(` with ${CONVERTED_NAMES.MentorshipOption}`)}`\r\n            default:\r\n                return ''\r\n        }\r\n    }\r\n\r\n    function convertCatalogTypesNames(name: string) {\r\n        switch (name) {\r\n            case CATALOG_TYPES.Basic:\r\n                return `${CATALOG_TYPES.Basic}`\r\n            case CATALOG_TYPES.TailorMade:\r\n                return `${CONVERTED_NAMES.TailorMadeType}`\r\n            default:\r\n                return ''\r\n        }\r\n    }\r\n\r\n    return (\r\n        <>\r\n            <h4 style={{ textAlign: 'center', textDecoration: 'underline', margin: '5rem auto auto auto' }} >PRICING DASHBOARD</h4>\r\n            <div style={isEditBtnClicked === false ? { display: 'flex', justifyContent: 'center', alignItems: 'center' } : { display: 'flex', justifyContent: 'space-evenly', alignItems: 'center' }}>\r\n                {isEditBtnClicked === true ? (\r\n                    <Button onClick={onCancelOperationHandler}>Exit</Button>\r\n                ) : (\r\n                    <Button onClick={onEditRowHandler}>Edit</Button>\r\n                )}\r\n                <Button onClick={onSaveStateHandler} style={isEditBtnClicked === false ? { display: 'none' } : { display: 'block' }} >Save</Button>\r\n            </div>\r\n            <Table striped bordered hover>\r\n                <thead>\r\n                    <tr>\r\n                        <th>Type</th>\r\n                        <th>Category</th>\r\n                        <th>Price</th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {tempData.map((data: CatalogData, catalogIndex: number) => {\r\n                        return (\r\n                            <React.Fragment key={catalogIndex + 'a'}>\r\n                                <tr style={{ fontWeight: 'bolder', textDecoration: 'underline', backgroundColor: '#113D7C', color: '#fff' }}>\r\n                                    <td>\r\n                                        {`${convertCatalogTypesNames(data.type)}`}\r\n                                    </td>\r\n                                    <td></td>\r\n                                    <td></td>\r\n                                </tr>\r\n                                <React.Fragment key={catalogIndex + 'b'}>\r\n                                    {data.categoryOptionsData.map((category: CategoryData, categoryIndex: number) => {\r\n                                        return (\r\n                                            <React.Fragment key={categoryIndex + 'c'}>\r\n                                                <tr>\r\n                                                    <td></td>\r\n                                                    <td>\r\n                                                        {`${convertCategoriesNames(category.name)}`}\r\n                                                    </td>\r\n                                                    {isEditBtnClicked &&\r\n                                                        <td>\r\n                                                            <input type='text' value={category.basePrice} onChange={(e: any) => onChangeBasePriceHandler(e, { basePrice: parseFloat(e.target.value) }, categoryIndex, catalogIndex)} />\r\n                                                        </td>\r\n                                                    }\r\n                                                    {!isEditBtnClicked &&\r\n                                                        <td>\r\n                                                            {formatNumber(category.basePrice)}\r\n                                                        </td>\r\n                                                    }\r\n                                                </tr>\r\n                                                {\r\n                                                    category.additionalOptionsData.map((option: OptionData, optionIndex: number) => {\r\n                                                        return (\r\n                                                            <React.Fragment key={optionIndex + 'd'}>\r\n                                                                <tr>\r\n                                                                    <td></td>\r\n                                                                    <td>\r\n                                                                        {convertOptionsNames(convertCategoriesNames(category.name), option.name)}\r\n                                                                    </td>\r\n                                                                    {isEditBtnClicked &&\r\n                                                                        <td>\r\n                                                                            <input type='text' value={option.price} onChange={(e: any) => onChangeOptionsPriceHandler(e, { price: parseFloat(e.target.value) }, catalogIndex, categoryIndex, optionIndex)} />\r\n                                                                        </td>\r\n                                                                    }\r\n                                                                    {!isEditBtnClicked &&\r\n                                                                        <td>\r\n                                                                            {formatNumber(option.price)}\r\n                                                                        </td>\r\n                                                                    }\r\n                                                                </tr>\r\n                                                            </React.Fragment>\r\n                                                        )\r\n                                                    })\r\n                                                }\r\n                                                {category.additionalOptionsData.length > 0 &&\r\n                                                    <tr style={{ fontWeight: 'bold', backgroundColor: '#F0B72F' }}>\r\n                                                        <td></td>\r\n                                                        <td>\r\n                                                            {`${convertCategoriesNames(category.name)} ${(category.additionalOptionsData.map(x => convertOptionsNames('', x.name)).join(' and ')).trim()}`}\r\n                                                        </td>\r\n                                                        <td>\r\n                                                            {formatNumber(category.totalPrice)}\r\n                                                        </td>\r\n                                                    </tr>\r\n                                                }\r\n                                            </React.Fragment>\r\n                                        )\r\n                                    })}\r\n                                </React.Fragment>\r\n                            </React.Fragment>\r\n                        )\r\n                    })}\r\n                </tbody>\r\n            </Table>\r\n        </>\r\n    );\r\n}\r\n","import * as React from 'react';\r\nimport { Form } from 'react-bootstrap';\r\nimport { CatalogData } from '../../../../common/models/input-models';\r\nimport EupatiLoader from '../../../../common/static/loading-animation/loader';\r\nimport EupatiPricesGrid from '../../../../common/static/prices-grid';\r\nimport { State } from '../model';\r\nimport '../style.scss';\r\n\r\ntype OwnProps = {\r\n    isCatalogsLoading: boolean;\r\n    catalogsData: CatalogData[]\r\n};\r\n\r\nexport type DispatchProps = {\r\n    setCatalogsPrices: () => void;\r\n    updateCatalogsPrices: (data: CatalogData[]) => void;\r\n};\r\n\r\ntype Props = State & DispatchProps & OwnProps;\r\n\r\ntype OwnState = {};\r\n\r\nexport default class ComponentRoot extends React.Component<Props, OwnState> {\r\n\r\n    componentDidMount() {\r\n        this.props.setCatalogsPrices();\r\n    }\r\n\r\n    render() {\r\n\r\n        let mainComp: any;\r\n\r\n        let loadComp = (\r\n            <div className='loader-wrapper'>\r\n                <EupatiLoader />\r\n            </div>\r\n        )\r\n\r\n        if (this.props.isCatalogsLoading) {\r\n            mainComp = loadComp;\r\n        }\r\n        else {\r\n            mainComp = (\r\n                <Form.Group id='price-catalog-tbl' className='price-catalog-wrapper mb-5'>\r\n                    <EupatiPricesGrid\r\n                        {...{\r\n                            catalogsData: this.props.catalogsData,\r\n                            setCatalogsPrices: this.props.setCatalogsPrices,\r\n                            updateCatalogsPrices: this.props.updateCatalogsPrices\r\n                        }}\r\n                    />\r\n                </Form.Group>\r\n            )\r\n        }\r\n\r\n        return (\r\n            <>\r\n                {mainComp}\r\n            </>\r\n        )\r\n    }\r\n}","import { default as RootComponent, DispatchProps } from '../components/component-root';\r\nimport * as Constants from '../constants';\r\nimport * as Actions from '../actions';\r\nimport { State } from '../model';\r\nimport { connect } from 'react-redux';\r\nimport { CatalogData } from '../../../../common/models/input-models';\r\n\r\nexport function mapStateToProps(globalState: any) {\r\n    let name = Constants.NAME;\r\n    let pageState = globalState[name] as State;\r\n    return pageState;\r\n}\r\n\r\nexport function mapDispatchToProps(dispatch: any) {\r\n    return {\r\n        setCatalogsPrices: () => dispatch(Actions.getCatalogsPricesAsync()),\r\n        updateCatalogsPrices: (data: CatalogData[]) => dispatch(Actions.updateCatalogsPricesAsync(data))\r\n    } as DispatchProps;\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RootComponent);","import { State } from \"./model\";\r\nimport * as t from './actionTypes';\r\nimport { CatalogData } from \"../../../common/models/input-models\";\r\n\r\nconst initialState: State = {\r\n    isCatalogsLoading: false,\r\n    catalogsData: []\r\n}\r\n\r\nexport default (state = initialState, action: any): State => {\r\n    switch (action.type) {\r\n        case t.SET_IS_CATALOGS_LOADING:\r\n            return setIsCatalogsLoading(state, action.payload);\r\n        case t.SET_CATALOGS_DATA:\r\n            return setCatalogsData(state, action.payload);\r\n        default:\r\n            return state;\r\n    }\r\n}\r\n\r\nconst setIsCatalogsLoading = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isCatalogsLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setCatalogsData = (state: State, val: CatalogData[]): State => {\r\n    let newState = {\r\n        ...state,\r\n        catalogsData: [...val]\r\n    } as State;\r\n\r\n    return newState;\r\n}","import * as Actions from './actions';\r\nimport * as Components from './components/index';\r\nimport * as Containers from './containers/index';\r\nimport * as Constants from './constants';\r\nimport Reducer from './reducer';\r\n\r\nexport default {\r\n    actions: Actions,\r\n    components: Components,\r\n    containers: Containers,\r\n    constants: Constants,\r\n    reducer: Reducer\r\n};\r\n\r\nexport const Root = Containers.ComponentRoot;","// constants.ts\r\n\r\nexport const NAME = 'pricingPage';","import { NAME } from \"./constants\";\r\n\r\nexport const SET_PRICING_LOADING = `${NAME}/SET_PRICING_LOADING`;\r\n\r\nexport const SET_PRICING_LOGGED_IN = `${NAME}/SET_PRICING_LOGGED_IN`;\r\n\r\nexport const SET_IS_USER_REAL = `${NAME}/SET_IS_USER_REAL`;\r\n\r\nexport const SET_IS_USER_ADMIN = `${NAME}/SET_IS_USER_ADMIN`;\r\n\r\nexport const SET_CATALOGS_DATA = `${NAME}/SET_CATALOGS_DATA`;","// matching/actions.js\r\n\r\nimport DataSvc from '../../common/services/data-svc';\r\nimport * as t from './actionType';\r\nimport { Res } from '../../common/helpers';\r\nimport { CatalogData } from '../../common/models/input-models';\r\n\r\nexport const setPricingLoading = (isLoading: boolean) => ({\r\n    type: t.SET_PRICING_LOADING,\r\n    payload: isLoading,\r\n});\r\n\r\nexport const setPricingLoggedInStatus = (isLoggedIn: boolean) => ({\r\n    type: t.SET_PRICING_LOGGED_IN,\r\n    payload: isLoggedIn\r\n});\r\n\r\nexport const setIsUserReal = (isUserReal: boolean) => ({\r\n    type: t.SET_IS_USER_REAL,\r\n    payload: isUserReal\r\n});\r\n\r\nexport const setIsUserAdmin = (isUserAdmin: boolean) => ({\r\n    type: t.SET_IS_USER_ADMIN,\r\n    payload: isUserAdmin\r\n});\r\n\r\nexport const setCatalogsData = (data: CatalogData[]) => ({\r\n    type: t.SET_CATALOGS_DATA,\r\n    payload: data\r\n});\r\n\r\nexport const verifyUserTokenAsync = (token: string) => {\r\n    return (dispatch: any, getState: any) => {\r\n        DataSvc.utilsSvc.verifyUserByRecaptchaToken({ recaptchaToken: token }).then(\r\n            (result: any) => {\r\n                if (result !== Res.success) {\r\n                    dispatch(setIsUserReal(false));\r\n                }\r\n            },\r\n            (error) => { console.error(error); }\r\n        );\r\n    }\r\n}\r\n\r\nexport const getCatalogsPricesDataAsync = () => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setPricingLoading(true));\r\n        DataSvc.utilsSvc.getPriceCatalogs().then(\r\n            (result: any) => {\r\n                dispatch(setCatalogsData(result));\r\n                dispatch(setPricingLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEDSURBVHgBlZDBTcNgDIXfb3qBC84G7QZ0AugFFXHpBqQTQCdomACYoGxAOQDlVDZoNoAN8gMXLo15riIUQhH0SZGj2H5+X4CGigdtv87UWFOskWBDSXGvg9/c6lffH/XC38PbTOcGHARgujSMVi4Bz6VhiA9MWzs4LYEzGLRcoiscGrJ5zqWBD24FjH2JdV+2sWAvM0NeCrrJccxD/SxLxqWTWpqcC6PkKD6thaarNeIrn/Z36BtVAo1FsOB0yrxXKzgyVTwTck6qBBDmnH/lNHR449IbZLvd7cdOxZc6X3Gne0IYh+5pP/aY9aURCfyWuZH/NYduJYcxxx+qjK5/QP9Hn3hDcJ1fpbEAAAAAAElFTkSuQmCC\"","import React, { useEffect, useState } from 'react';\r\nimport { Accordion, Button, Card, Form } from 'react-bootstrap';\r\nimport astericsImg from '../../../../images/pricing/asterics.png';\r\nimport { CategoryData } from '../../../common/models/input-models';\r\nimport { faChevronDown, faChevronUp, faCheck } from '@fortawesome/fontawesome-free-solid';\r\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { useHistory } from 'react-router';\r\nimport { CATALOG_TYPES } from '../../../common/helpers/pricing-list';\r\nimport { INVALID_PRICING_DATA, INVALID_PAYMENT_METHOD } from '../../../common/helpers/messages';\r\nimport { toast } from 'react-toastify';\r\n\r\ntype OwnProps = {\r\n    basicPlanCategories: CategoryData[],\r\n    paymentMethods: string[]\r\n};\r\n\r\nexport type DispatchProps = {\r\n    returnIcon: (icon: any) => IconProp;\r\n    convertCategoriesNames: (name: string) => string;\r\n};\r\n\r\ntype Props = DispatchProps & OwnProps;\r\n\r\ntype SelectedOptionData = {\r\n    price: number,\r\n    plan: string,\r\n    text: string,\r\n    index: number,\r\n    bgColor: string\r\n}\r\n\r\nconst DEFAULT_COLOR_SELECTED = '#00A4B6';\r\nexport default function BasicPlanComponent(props: Props) {\r\n    const history = useHistory();\r\n\r\n    const [selectedOption, setSelectedOption] = useState<SelectedOptionData>({ price: -1, plan: CATALOG_TYPES.Basic, text: '', index: -1, bgColor: DEFAULT_COLOR_SELECTED });\r\n    const [icon, setIcon] = useState<IconProp>(faChevronDown as IconProp);\r\n    const [paymentIcon, setPaymentIcon] = useState<IconProp>(faChevronUp as IconProp);\r\n    const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<string>('');\r\n    const [defaultPaymentMethod, setDefaultPaymentMethod] = useState<string>('');\r\n\r\n    useEffect(() => {\r\n        setDefaultPaymentMethod(props.paymentMethods.find(pm => pm.toLowerCase().includes('invoice'))!);//component-root state\r\n    }, []);\r\n\r\n    function priceChanged(price: number, categoryName: string, categoryIndex: number) {\r\n        const updatedState = Object.assign(selectedOption, { price: price, text: categoryName, index: categoryIndex });\r\n        setSelectedOption({ ...updatedState });\r\n    }\r\n\r\n    function toggleIcons() {\r\n        if (icon === props.returnIcon(faChevronDown)) {\r\n            setIcon(props.returnIcon(faChevronUp));\r\n            setPaymentIcon(props.returnIcon(faChevronDown));\r\n        }\r\n        else {\r\n            setIcon(props.returnIcon(faChevronDown));\r\n            setPaymentIcon(props.returnIcon(faChevronDown));\r\n        }\r\n    }\r\n\r\n    function updatePaymentMethodOnClick(method: string) {\r\n        if (selectedOption.price === -1) {\r\n            toast.error(INVALID_PRICING_DATA);\r\n            return;\r\n        }\r\n        setSelectedPaymentMethod(method);\r\n    }\r\n\r\n    function reverseToggleIcon() {\r\n        if (paymentIcon === props.returnIcon(faChevronUp)) {\r\n            setPaymentIcon(props.returnIcon(faChevronDown));\r\n            setIcon(props.returnIcon(faChevronDown));\r\n        }\r\n        else {\r\n            setPaymentIcon(props.returnIcon(faChevronUp));\r\n            setIcon(props.returnIcon(faChevronDown));\r\n        }\r\n    }\r\n\r\n    const selectedOptionStyle = {\r\n        backgroundColor: selectedOption.bgColor,\r\n        color: '#ffffff'\r\n    };\r\n\r\n    const submitBtn = (\r\n        <div className='pricing-plan-card-submit-button'>\r\n            <Button\r\n                variant='primary'\r\n                type='submit'\r\n                className='submit-btn'\r\n                onClick={() => {\r\n                    if (selectedOption.price < 0 || selectedOption.text === '') {\r\n                        return toast.error(INVALID_PRICING_DATA);\r\n                    }\r\n                    else if (selectedPaymentMethod === '') {\r\n                        return toast.error(INVALID_PAYMENT_METHOD);\r\n                    }\r\n                    history.push({\r\n                        pathname: '/new-project',\r\n                        state: {\r\n                            price: selectedOption.price,\r\n                            plan: selectedOption.plan,\r\n                            package: props.convertCategoriesNames(selectedOption.text),\r\n                            paymentMethod: selectedPaymentMethod\r\n                        }\r\n                    });\r\n                    //if they wanna pay via invoice\r\n                    //redirect directly to new project page\r\n                    //cos our stripe implementation works only with cards\r\n                    // switch (selectedPaymentMethod === defaultPaymentMethod) {\r\n                    //     case true:\r\n                    //         history.push({\r\n                    //             pathname: '/new-project',\r\n                    //             state: {\r\n                    //                 price: selectedOption.price,\r\n                    //                 plan: selectedOption.plan,\r\n                    //                 package: props.convertCategoriesNames(selectedOption.text),\r\n                    //                 paymentMethod: selectedPaymentMethod\r\n                    //             }\r\n                    //         });\r\n                    //         break;\r\n                    //     default:\r\n                    //         history.push({\r\n                    //             pathname: '/payment',\r\n                    //             state: {\r\n                    //                 price: selectedOption.price,\r\n                    //                 plan: selectedOption.plan,\r\n                    //                 package: props.convertCategoriesNames(selectedOption.text),\r\n                    //                 paymentMethod: selectedPaymentMethod\r\n                    //             }\r\n                    //         });\r\n                    //         break;\r\n                    // }\r\n                }}\r\n            >\r\n                Submit Your Request\r\n            </Button>\r\n        </div >\r\n    );\r\n\r\n    const pricingCard = (\r\n        <Card>\r\n            <Card.Header style={{ marginBottom: '0.5rem', borderRadius: '4px' }}>\r\n                <Accordion.Toggle as={Button} variant=\"link\" eventKey=\"0\" onClick={toggleIcons}>\r\n                    Pricing\r\n                    <FontAwesomeIcon icon={props.returnIcon(icon)} />\r\n                </Accordion.Toggle>\r\n\r\n            </Card.Header>\r\n            <Accordion.Collapse eventKey=\"0\">\r\n                <Card.Body>\r\n                    {props?.basicPlanCategories?.map((category: CategoryData, categoryIndex: number) => {\r\n                        return (\r\n                            <Form.Group\r\n                                key={categoryIndex + 'a'}\r\n                                style={selectedOption.index === categoryIndex ? { ...selectedOptionStyle } : {}}\r\n                                onClick={() => priceChanged(category.basePrice, category.name, categoryIndex)}\r\n                            >\r\n                                <Form.Label id='cat-price'>{`€\t${category.basePrice}`}</Form.Label>\r\n                                <Form.Label id='cat-name' >{props.convertCategoriesNames(category.name)}</Form.Label>\r\n                            </Form.Group>\r\n                        )\r\n                    })}\r\n                </Card.Body>\r\n            </Accordion.Collapse>\r\n        </Card>\r\n    );\r\n\r\n    const paymentOptions = (\r\n        <>\r\n            {selectedOption.price === 0 ? (\r\n                <Form.Group\r\n                    key={69420 + 'b'}\r\n                >\r\n                    <div\r\n                        className='payments-wrapper'\r\n                        style={selectedPaymentMethod === defaultPaymentMethod ? { ...selectedOptionStyle } : {}}\r\n                        onClick={() => updatePaymentMethodOnClick(defaultPaymentMethod)}\r\n                    >\r\n                        <div className='payment-check'>\r\n                            <FontAwesomeIcon icon={props.returnIcon(faCheck)} style={selectedPaymentMethod === defaultPaymentMethod ? { position: 'relative', top: '0', left: '0', color: '#fff' } : { position: 'relative', top: '0', left: '0' }} />\r\n                        </div>\r\n                        <Form.Label id='cat-name'>{defaultPaymentMethod}</Form.Label>\r\n                    </div>\r\n                </Form.Group>\r\n            ) : (\r\n                <>\r\n                    {props.paymentMethods.map((method: string, methodIndex: number) => {\r\n                        return (\r\n                            <Form.Group\r\n                                key={methodIndex + 'b'}\r\n                            //id={`${method.toLowerCase().includes('card') ? 'disabled-option-cursor' : ''}`}\r\n                            >\r\n                                <div\r\n                                    className='payments-wrapper'\r\n                                    //id={`${method.toLowerCase().includes('card') ? 'disabled-option-events' : ''}`}\r\n                                    style={selectedPaymentMethod === method ? { ...selectedOptionStyle } : {}}\r\n                                    onClick={() => updatePaymentMethodOnClick(method)}\r\n                                >\r\n                                    <div className='payment-check'>\r\n                                        <FontAwesomeIcon icon={props.returnIcon(faCheck)} style={selectedPaymentMethod === method ? { position: 'relative', top: '0', left: '0', color: '#fff' } : { position: 'relative', top: '0', left: '0' }} />\r\n                                    </div>\r\n                                    <Form.Label id='cat-name'>{method}</Form.Label>\r\n                                </div>\r\n                            </Form.Group>\r\n                        )\r\n                    })}\r\n                </>\r\n            )}\r\n        </>\r\n    )\r\n\r\n    const paymentsCard = (\r\n        <Card>\r\n            <Card.Header id='payment-card-header' style={{ marginBottom: '0.5rem', borderRadius: '4px' }}>\r\n                <Accordion.Toggle as={Button} variant=\"link\" eventKey=\"1\" onClick={reverseToggleIcon}>\r\n                    Payment method\r\n                    <FontAwesomeIcon icon={props.returnIcon(paymentIcon)} />\r\n                </Accordion.Toggle>\r\n            </Card.Header>\r\n            <Accordion.Collapse eventKey=\"1\">\r\n                <Card.Body style={{ border: '0' }}>\r\n                    {paymentOptions}\r\n                </Card.Body>\r\n            </Accordion.Collapse>\r\n        </Card>\r\n    );\r\n\r\n    const submitBasic = (\r\n        <>\r\n            <Accordion defaultActiveKey=\"0\">\r\n                {pricingCard}\r\n                {paymentsCard}\r\n            </Accordion>\r\n            <div className='pricing-plan-card-submit'>\r\n                {submitBtn}\r\n                <div className='pricing-plan-card-submit-note'>\r\n                    <img src={astericsImg} className='pricing-plan-card-submit-note-asterics' />\r\n                    <strong>Over 90% of our requests have been successfully matched.</strong> However, please note that EUPATI cannot guarantee a successful matching result.\r\n                </div>\r\n            </div>\r\n        </>\r\n    );\r\n\r\n    return <div className='pricing-plan'>\r\n        <div className='pricing-plan-card pricing-plan-basic' style={{ paddingTop: '15px' }}>\r\n            {selectedOption.text !== '' &&\r\n                <div className='d-flex' style={{ minHeight: '1px' }}>\r\n                    <div className='pricing-plan-card-pricebox'>{'€ ' + selectedOption.price}</div>\r\n                    <div className='pricing-plan-card-pricetitle'>{props.convertCategoriesNames(selectedOption.text)}</div>\r\n                </div>\r\n            }\r\n            {selectedOption.text === '' &&\r\n                <div className='d-flex' style={{ minHeight: '1px' }}>\r\n                    <div className='pricing-plan-card-plantitle'>Basic Plan</div>\r\n                </div>\r\n            }\r\n            <div className='pricing-plan-card-benefit'>\r\n                <div className='pricing-plan-card-benefit-description'>\r\n                    Are you are looking for a EUPATI Patient Expert and happy to manage the process of selecting the right patient for your project among a pool of matched individuals? Select the basic plan - we can connect you with patient experts corresponding to the requested profile and you can take it from there.\r\n                </div>\r\n            </div>\r\n            <div className='pricing-plan-card-benefit'>\r\n                <div className='pricing-plan-card-benefit-title'>\r\n                    Search\r\n                </div>\r\n                <div className='pricing-plan-card-benefit-description'>\r\n                    We will search over 200+ EUPATI Fellows along with our EUPATI Open Classroom Learners to find the right Patient Expert for you.\r\n                </div>\r\n            </div>\r\n            <div className='pricing-plan-card-benefit'>\r\n                <div className='pricing-plan-card-benefit-title'>\r\n                    Match\r\n                </div>\r\n                <div className='pricing-plan-card-benefit-description'>\r\n                    We will share your request with our matched Patient Experts.\r\n                </div>\r\n            </div>\r\n            <div className='pricing-plan-card-benefit'>\r\n                <div className='pricing-plan-card-benefit-title'>\r\n                    Connect\r\n                </div>\r\n                <div className='pricing-plan-card-benefit-description'>\r\n                    Our interested Patient Experts will contact you directly.\r\n                </div>\r\n            </div>\r\n            <div className='pricing-plan-card-benefit'>\r\n                <div className='pricing-plan-card-benefit-title'>\r\n                    Co-Create!\r\n                </div>\r\n                <div className='pricing-plan-card-benefit-description'>\r\n                    You and your matched Patients Experts can start working together straight away.\r\n                </div>\r\n            </div>\r\n        </div>\r\n        <div className='pricing-plan-card pricing-plan-basic pricing-plan-card-2'>\r\n            {submitBasic}\r\n        </div>\r\n    </div>;\r\n}","import React, { useEffect, useState } from 'react';\r\nimport { Accordion, Button, Card, Form } from 'react-bootstrap';\r\nimport { CategoryData, OptionData } from '../../../common/models/input-models';\r\nimport astericsImg from '../../../../images/pricing/asterics.png';\r\nimport { faCheck, faChevronDown, faChevronUp, faSquare } from '@fortawesome/fontawesome-free-solid';\r\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { CATALOG_TYPES, CATEGORY_NAMES } from '../../../common/helpers/pricing-list';\r\nimport { INVALID_PRICING_DATA, INVALID_PAYMENT_METHOD } from '../../../common/helpers/messages';\r\nimport { useHistory } from 'react-router';\r\nimport { toast } from 'react-toastify';\r\n\r\ntype OwnProps = {\r\n    tailorMadePlanCategories: CategoryData[],\r\n    paymentMethods: string[]\r\n};\r\n\r\nexport type DispatchProps = {\r\n    returnIcon: (icon: any) => IconProp;\r\n    convertCategoriesNames: (name: string) => string;\r\n    convertOptionsNames: (name: string) => string;\r\n};\r\n\r\ntype Props = DispatchProps & OwnProps;\r\n\r\ntype SelectedOptionData = {\r\n    price: number,\r\n    text: string[],\r\n    plan: string,\r\n    index: number,\r\n    bgColor: string,\r\n    additionals: AdditionalsData[]\r\n}\r\n\r\ntype AdditionalsData = {\r\n    name: string,\r\n    price: number\r\n}\r\n\r\nconst DEFAULT_COLOR_SELECTED = '#00A4B6';\r\nconst DEFAULT_OPTIONS_MENU = ['Mentorship Option', 'External Networks Option']; //  if these ever change blame Tech0\r\nconst SELECT_PRICING_WARNING = 'Please first select pricing option';\r\nexport default function TailorMadeComponent(props: Props) {\r\n    const history = useHistory();\r\n\r\n    const [selectedOption, setSelectedOption] = useState<SelectedOptionData>({ price: -1, text: [], plan: CATALOG_TYPES.TailorMade, index: -1, bgColor: DEFAULT_COLOR_SELECTED, additionals: [] });\r\n    const [icon, setIcon] = useState<IconProp>(faChevronDown as IconProp);\r\n    const [paymentIcon, setPaymentIcon] = useState<IconProp>(faChevronUp as IconProp);\r\n    const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<string>('');\r\n    const [defaultPaymentMethod, setDefaultPaymentMethod] = useState<string>('');\r\n\r\n    useEffect(() => {\r\n        setDefaultPaymentMethod(props.paymentMethods.find(pm => pm.toLowerCase().includes('invoice'))!);//component-root state\r\n    }, []);\r\n\r\n    function updateStateOnClick(price: number, categoryName: string, categoryIndex: number) {\r\n        //  calls only when selecting category (ExternalResearcher, IndustryPartner, AcademiaPartner)\r\n        const updatedText = [categoryName];\r\n        setSelectedOption({ price: price, text: updatedText, plan: CATALOG_TYPES.TailorMade, index: categoryIndex, additionals: [], bgColor: DEFAULT_COLOR_SELECTED });\r\n    }\r\n\r\n    function removeItemFromAdditionals(option: AdditionalsData) {\r\n        const updatedAdditionals = selectedOption.additionals.filter(x => x.name !== option.name);\r\n        const updatedText = selectedOption.text.filter(x => x !== option.name);\r\n        setSelectedOption({\r\n            price: selectedOption.price -= option.price,\r\n            text: updatedText,\r\n            plan: CATALOG_TYPES.TailorMade,\r\n            index: selectedOption.index,\r\n            bgColor: selectedOption.bgColor,\r\n            additionals: updatedAdditionals\r\n        });\r\n    }\r\n\r\n    function addItemToAdditionals(option: AdditionalsData) {\r\n        const updatedAdditionals = selectedOption.additionals.concat(option);\r\n        const updatedText = selectedOption.text.concat(option.name);\r\n        setSelectedOption({\r\n            price: selectedOption.price += option.price,\r\n            text: updatedText,\r\n            plan: CATALOG_TYPES.TailorMade,\r\n            index: selectedOption.index,\r\n            bgColor: selectedOption.bgColor,\r\n            additionals: updatedAdditionals\r\n        });\r\n    }\r\n\r\n    function updateAdditionalOptionsOnClick(option: AdditionalsData) {\r\n        selectedOption.additionals.some(x => x.name === option.name) ? removeItemFromAdditionals(option) : addItemToAdditionals(option);\r\n    }\r\n\r\n    function updatePaymentMethodOnClick(method: string) {\r\n        if (selectedOption.price === -1) {\r\n            toast.error(INVALID_PRICING_DATA);\r\n            return;\r\n        }\r\n        setSelectedPaymentMethod(method);\r\n    }\r\n\r\n    function toggleIcons() {\r\n        /*\r\n            down --> open\r\n            up   --> close\r\n        */\r\n        if (icon === props.returnIcon(faChevronDown)) {\r\n            setIcon(props.returnIcon(faChevronUp));\r\n            setPaymentIcon(props.returnIcon(faChevronDown));\r\n        }\r\n        else {\r\n            setIcon(props.returnIcon(faChevronDown));\r\n            setPaymentIcon(props.returnIcon(faChevronDown));\r\n        }\r\n    }\r\n\r\n    function reverseToggleIcon() {\r\n        if (paymentIcon === props.returnIcon(faChevronUp)) {\r\n            setPaymentIcon(props.returnIcon(faChevronDown));\r\n            setIcon(props.returnIcon(faChevronDown));\r\n        }\r\n        else {\r\n            setPaymentIcon(props.returnIcon(faChevronUp));\r\n            setIcon(props.returnIcon(faChevronDown));\r\n        }\r\n    }\r\n\r\n    function displayCategoryNameWithOptions() {\r\n        let result = '';\r\n        const categoryName = selectedOption.text.find(x => Object.values(CATEGORY_NAMES).some(name => name.toLowerCase() === x.toLowerCase()));\r\n        if (categoryName) {\r\n            //  \"NetworkOption\"--> \"External Networks Option\" --> \"External Networks\"   (convert names based on xlsx and extract 'Option' due to repetitiveness)\r\n            const optionNames = selectedOption.text.filter(x => x !== categoryName).map(x => props.convertOptionsNames(x)).map(x => x.replace('Option', '').trim());\r\n            //  \"External Researcher\" --> \"External Researcher with\"   (depends on whether optionNames.length > 0)\r\n            result = optionNames.length > 0 ? `${props.convertCategoriesNames(categoryName)} with ` : `${props.convertCategoriesNames(categoryName)}`;\r\n            //  \"Mentorship\" --> \"Mentorship and External Networks\"   (depends on whether optionNames.length > 1)\r\n            optionNames.length > 1 ? result += `${optionNames.join(' and ')}` : optionNames.forEach(o => result += `${o}`);\r\n        }\r\n\r\n        return result.trim();\r\n    }\r\n\r\n    const selectedOptionStyle = {\r\n        backgroundColor: selectedOption.bgColor,\r\n        color: '#ffffff'\r\n    };\r\n\r\n    const submitBtn = (\r\n        <div className='pricing-plan-card-submit-button'>\r\n            <Button\r\n                variant='primary'\r\n                type='submit'\r\n                className='submit-btn'\r\n                onClick={() => {\r\n                    if (selectedOption.price < 0 || selectedOption.text.length === 0) {\r\n                        return toast.error(INVALID_PRICING_DATA);\r\n                    }\r\n                    else if (selectedPaymentMethod === '') {\r\n                        return toast.error(INVALID_PAYMENT_METHOD);\r\n                    }\r\n                    history.push({\r\n                        pathname: '/new-project',\r\n                        state: {\r\n                            price: selectedOption.price,\r\n                            plan: selectedOption.plan,\r\n                            package: displayCategoryNameWithOptions(),\r\n                            paymentMethod: selectedPaymentMethod\r\n                        }\r\n                    });\r\n                    //if they wanna pay via invoice\r\n                    //redirect directly to new project page\r\n                    //cos our stripe implementation works only with cards\r\n                    // switch (selectedPaymentMethod === defaultPaymentMethod) {\r\n                    //     case true:\r\n                    //         history.push({\r\n                    //             pathname: '/new-project',\r\n                    //             state: {\r\n                    //                 price: selectedOption.price,\r\n                    //                 plan: selectedOption.plan,\r\n                    //                 package: displayCategoryNameWithOptions(),\r\n                    //                 paymentMethod: selectedPaymentMethod\r\n                    //             }\r\n                    //         });\r\n                    //         break;\r\n                    //     default:\r\n                    //         history.push({\r\n                    //             pathname: '/payment',\r\n                    //             state: {\r\n                    //                 price: selectedOption.price,\r\n                    //                 plan: selectedOption.plan,\r\n                    //                 package: displayCategoryNameWithOptions(),\r\n                    //                 paymentMethod: selectedPaymentMethod\r\n                    //             }\r\n                    //         });\r\n                    //         break;\r\n                    // }\r\n                }}\r\n            >\r\n                Submit Your Request\r\n            </Button>\r\n        </div>\r\n    );\r\n\r\n    const categoriesCard = (\r\n        <Card style={{ padding: '34px 26px 0px 26px' }}>\r\n            <Card.Header style={{ marginBottom: '0.5rem', borderRadius: '4px' }}>\r\n                <Accordion.Toggle as={Button} variant=\"link\" eventKey=\"0\" onClick={toggleIcons}>\r\n                    Pricing\r\n                    <FontAwesomeIcon icon={props.returnIcon(icon)} />\r\n                </Accordion.Toggle>\r\n\r\n            </Card.Header>\r\n            <Accordion.Collapse eventKey=\"0\">\r\n                <Card.Body>\r\n                    {props?.tailorMadePlanCategories?.map((category: CategoryData, index: number) => {\r\n                        return (\r\n                            <Form.Group\r\n                                key={index + 'ge'}\r\n                                style={selectedOption.index === index ? { ...selectedOptionStyle } : {}}\r\n                                onClick={() => updateStateOnClick(category.basePrice, category.name, index)}\r\n                            >\r\n                                <Form.Label id='cat-price'>{`€\t${category.basePrice}`}</Form.Label>\r\n                                <Form.Label id='cat-name' >{props.convertCategoriesNames(category.name)}</Form.Label>\r\n                            </Form.Group>\r\n                        )\r\n                    })}\r\n                </Card.Body>\r\n            </Accordion.Collapse>\r\n        </Card>\r\n    );\r\n\r\n    // const optionsCard = (\r\n    //     <Card>\r\n    //         <Card.Header style={{ marginBottom: '0.5rem', borderRadius: '4px' }}>\r\n    //             <Accordion.Toggle as={Button} variant=\"link\" eventKey=\"0\" onClick={toggleIcons}>\r\n    //                 Options\r\n    //                 <FontAwesomeIcon icon={props.returnIcon(icon)} />\r\n    //             </Accordion.Toggle>\r\n    //         </Card.Header>\r\n    //         <Accordion.Collapse eventKey=\"0\">\r\n    //             <Card.Body>\r\n    //                 {props.tailorMadePlanCategories[selectedOption.index]?.additionalOptionsData.map((option: OptionData, optionIndex: number) => {\r\n    //                     return (\r\n    //                         <Form.Group\r\n    //                             style={selectedOption.additionals.some(x => x.name === option.name) ? { ...selectedOptionStyle } : {}}\r\n    //                             onClick={() => updateAdditionalOptionsOnClick({ name: option.name, price: option.price } as AdditionalsData)}\r\n    //                         >\r\n    //                             <Form.Label id='cat-price'>{`€\t${option.price}`}</Form.Label>\r\n    //                             <Form.Label id='cat-name' >{props.convertOptionsNames(option.name)}</Form.Label>\r\n    //                         </Form.Group>\r\n    //                     )\r\n    //                 })}\r\n    //             </Card.Body>\r\n    //         </Accordion.Collapse>\r\n    //     </Card>\r\n    // );\r\n\r\n    const optionsBlock = (\r\n        <section className='options-section'>\r\n            <div className='options-section-title'>\r\n                <label>ADDITIONAL OPTIONS:</label>\r\n            </div>\r\n            <div className='options-section-menu'>\r\n                {props.tailorMadePlanCategories[selectedOption.index] === undefined ? (\r\n                    <React.Fragment key={selectedOption.index + 'a'}>\r\n                        {DEFAULT_OPTIONS_MENU.map((optionName: string, index: number) => {\r\n                            return (\r\n                                <div\r\n                                    key={index + 'ce'}\r\n                                    className='options-section-menu-item'\r\n                                    onClick={() => toast.error(SELECT_PRICING_WARNING)}>\r\n                                    <FontAwesomeIcon icon={props.returnIcon(faSquare)} />\r\n                                    <label>{optionName}</label>\r\n                                </div>\r\n                            )\r\n                        })}\r\n                    </React.Fragment>\r\n                ) : (\r\n                    <React.Fragment key={selectedOption.index + 'be'}>\r\n                        {props.tailorMadePlanCategories[selectedOption.index]?.additionalOptionsData.map((option: OptionData, optionIndex: number) => {\r\n                            return (\r\n                                <div\r\n                                    key={optionIndex + 'ef'}\r\n                                    className='options-section-menu-item'\r\n                                    onClick={() => updateAdditionalOptionsOnClick({ name: option.name, price: option.price } as AdditionalsData)}\r\n                                >\r\n                                    <FontAwesomeIcon icon={props.returnIcon(faSquare)} style={selectedOption.additionals.some(x => x.name === option.name) ? { color: 'rgb(0, 164, 182)', backgroundColor: '#fff' } : {}} />\r\n                                    <label>{`${props.convertOptionsNames(option.name)}  -   €\t${option.price}`}</label>\r\n                                </div>\r\n                            )\r\n                        })}\r\n                    </React.Fragment>\r\n                )}\r\n            </div>\r\n        </section>\r\n    );\r\n\r\n    const paymentOptions = (\r\n        <>\r\n            {selectedOption.price === 0 ? (\r\n                <Form.Group\r\n                    key={69420 + 'b'}\r\n                >\r\n                    <div\r\n                        className='payments-wrapper'\r\n                        style={selectedPaymentMethod === defaultPaymentMethod ? { ...selectedOptionStyle } : {}}\r\n                        onClick={() => updatePaymentMethodOnClick(defaultPaymentMethod)}\r\n                    >\r\n                        <div className='payment-check'>\r\n                            <FontAwesomeIcon icon={props.returnIcon(faCheck)} style={selectedPaymentMethod === defaultPaymentMethod ? { position: 'relative', top: '0', left: '0', color: '#fff' } : { position: 'relative', top: '0', left: '0' }} />\r\n                        </div>\r\n                        <Form.Label id='cat-name'>{defaultPaymentMethod}</Form.Label>\r\n                    </div>\r\n                </Form.Group>\r\n            ) : (\r\n                <>\r\n                    {props.paymentMethods.map((method: string, methodIndex: number) => {\r\n                        return (\r\n                            <Form.Group\r\n                                key={methodIndex + 'de'}\r\n                            //id={`${method.toLowerCase().includes('card') ? 'disabled-option-cursor' : ''}`}\r\n                            >\r\n                                <div\r\n                                    className='payments-wrapper'\r\n                                    //id={`${method.toLowerCase().includes('card') ? 'disabled-option-events' : ''}`}\r\n                                    style={selectedPaymentMethod === method ? { ...selectedOptionStyle } : {}}\r\n                                    onClick={() => updatePaymentMethodOnClick(method)}\r\n                                >\r\n                                    <div className='payment-check'>\r\n                                        <FontAwesomeIcon icon={props.returnIcon(faCheck)} style={selectedPaymentMethod === method ? { position: 'relative', top: '0', left: '0', color: '#fff' } : { position: 'relative', top: '0', left: '0' }} />\r\n                                    </div>\r\n                                    <Form.Label id='cat-name' >{method}</Form.Label>\r\n                                </div>\r\n                            </Form.Group>\r\n                        )\r\n                    })}\r\n                </>\r\n            )}\r\n        </>\r\n    )\r\n\r\n    const paymentsCard = (\r\n        <Card style={{ padding: '16px 26px 34px 26px' }}>\r\n            <Card.Header id='payment-card-header' style={{ marginBottom: '0.5rem', borderRadius: '4px' }}>\r\n                <Accordion.Toggle as={Button} variant=\"link\" eventKey=\"1\" onClick={reverseToggleIcon}>\r\n                    Payment method\r\n                    <FontAwesomeIcon icon={props.returnIcon(paymentIcon)} />\r\n                </Accordion.Toggle>\r\n            </Card.Header>\r\n            <Accordion.Collapse eventKey=\"1\">\r\n                <Card.Body style={{ border: '0' }}>\r\n                    {paymentOptions}\r\n                </Card.Body>\r\n            </Accordion.Collapse>\r\n        </Card>\r\n    )\r\n\r\n    const submitTailorMade = (\r\n        <>\r\n            <Accordion id='tailor-made-accordion' defaultActiveKey=\"0\" style={{ height: '100%' }}>\r\n                <section>\r\n                    {categoriesCard}\r\n                    {paymentsCard}\r\n                </section>\r\n                {optionsBlock}\r\n            </Accordion>\r\n            <div className='pricing-plan-card-submit' style={{ margin: '0.1px' }}>\r\n                {submitBtn}\r\n                <div className='pricing-plan-card-submit-note'>\r\n                    <img src={astericsImg} className='pricing-plan-card-submit-note-asterics' />\r\n                    <strong>Over 90% of our requests have been successfully matched.</strong> However, please note that EUPATI cannot guarantee a successful matching result. In the case of an unsuccessful match only the basic fee will be charged.\r\n                </div>\r\n            </div>\r\n        </>\r\n    );\r\n\r\n    return (\r\n        <div className='pricing-plan' key={selectedOption.text.length + 'eh'}>\r\n            <div className='pricing-plan-card pricing-plan-tailor-made' style={{ paddingTop: '27px' }}>\r\n                {selectedOption.text.length > 0 &&\r\n                    <div className='d-flex' style={{ minHeight: '1px' }}>\r\n                        <div className='pricing-plan-card-pricebox'>{'€ ' + selectedOption.price}</div>\r\n                        <div className='pricing-plan-card-pricetitle'>{displayCategoryNameWithOptions()}</div>\r\n                    </div>\r\n                }\r\n                {selectedOption.text.length === 0 &&\r\n                    <div className='d-flex' style={{ minHeight: '1px' }}>\r\n                        <div className='pricing-plan-card-plantitle'>Tailor-Made Plan</div>\r\n                    </div>\r\n                }\r\n                <div className='pricing-plan-card-benefit'>\r\n                    <div className='pricing-plan-card-benefit-description'>\r\n                        Need some extra help? Let us take the hassle out of finding the right patient for you! If you would like some additional help in finding the right Patient Expert for your project, select the Tailor-Made plan. Under this plan, we will use our expert knowledge of our patient database to find the most suitable Patient Expert for you, connecting you solely with the patients who are interested in your project. We can also reduce the burden on you by liaising on any follow up actions with our EUPATI Patient Experts where necessary.\r\n                    </div>\r\n                </div>\r\n                <div className='pricing-plan-card-benefit'>\r\n                    <div className='pricing-plan-card-benefit-title'>\r\n                        Search\r\n                    </div>\r\n                    <div className='pricing-plan-card-benefit-description'>\r\n                        We will search over 200+ EUPATI Fellows along with our EUPATI Open Classroom Learners to find the right Patient Expert for you.\r\n                    </div>\r\n                </div>\r\n                <div className='pricing-plan-card-benefit'>\r\n                    <div className='pricing-plan-card-benefit-title'>\r\n                        Match\r\n                    </div>\r\n                    <div className='pricing-plan-card-benefit-description'>\r\n                        We will share your request with our matched Patient Experts.\r\n                    </div>\r\n                </div>\r\n                <div className='pricing-plan-card-benefit'>\r\n                    <div className='pricing-plan-card-benefit-title'>\r\n                        Share & Connect\r\n                    </div>\r\n                    <div className='pricing-plan-card-benefit-description'>\r\n                        We will share the matched and interested Patient Experts with you.\r\n                    </div>\r\n                </div>\r\n                <div className='pricing-plan-card-benefit'>\r\n                    <div className='pricing-plan-card-benefit-title'>\r\n                        Co-Create!\r\n                    </div>\r\n                    <div className='pricing-plan-card-benefit-description'>\r\n                        You and your matched Patients Experts can start working together straight away.\r\n                    </div>\r\n                </div>\r\n                <div className='pricing-plan-card-benefit'>\r\n                    <div className='pricing-plan-card-benefit-title'>\r\n                        Follow Up\r\n                    </div>\r\n                    <div className='pricing-plan-card-benefit-description'>\r\n                        We liaise with you on any follow up where necessary.\r\n                    </div>\r\n                </div>\r\n            </div>\r\n            <div className='pricing-plan-card pricing-plan-tailor-made pricing-plan-card-2' style={{ padding: '0px' }}>\r\n                {submitTailorMade}\r\n            </div>\r\n            <div className='pricing-plan-card pricing-plan-tailor-made-options'>\r\n                <div id='options-icon-plus'>+</div>\r\n                <div id='options-title-box'>Additional Options:</div>\r\n                <div className='pricing-plan-card-benefit'>\r\n                    <div className='pricing-plan-card-benefit-title'>\r\n                        Mentorship\r\n                    </div>\r\n                    <div className='pricing-plan-card-benefit-description'>\r\n                        If you desire, we can provide additional mentorship to your organisation or the Patient Expert where either party has minimal expertise in previous patient engagement projects.\r\n                    </div>\r\n                </div>\r\n                <div className='pricing-plan-card-benefit'>\r\n                    <div className='pricing-plan-card-benefit-title'>\r\n                        External Networks\r\n                    </div>\r\n                    <div className='pricing-plan-card-benefit-description'>\r\n                        Are you looking to reach beyond EUPATI Expert Patients? If necessary, we can reach out to our external networks, outside the EUPATI Patient Expert Pool, to find the right patient for you.\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}","import React, { Component } from 'react';\r\nimport { Button } from 'react-bootstrap';\r\nimport astericsImg from '../../../../images/pricing/asterics.png';\r\n\r\ntype OwnProps = {};\r\n\r\nexport type DispatchProps = {};\r\n\r\ntype Props = DispatchProps & OwnProps;\r\n\r\ntype OwnState = {};\r\n\r\nexport default class CustomPlanComponent extends Component<Props, OwnState> {\r\n\r\n    constructor(props: any) {\r\n        super(props);\r\n    }\r\n\r\n    render() {\r\n\r\n        const contactUsBtn = (\r\n            <div className='pricing-plan-card-submit-button'>\r\n                <Button\r\n                    variant='primary'\r\n                    type='submit'\r\n                    className='submit-btn'\r\n                    onClick={(e) => {\r\n                        e.preventDefault();\r\n                        window.location.href = 'https://eupati.eu/contact/';\r\n                    }}\r\n                >\r\n                    Contact Us\r\n                </Button>\r\n            </div>\r\n        );\r\n\r\n        return (\r\n            <div className='pricing-plan' style={{ justifyContent: 'center', alignItems: 'center' }} >\r\n                <div className='pricing-plan-card pricing-plan-custom' style={{ display: 'flex', flexDirection: 'column', justifyContent: 'space-between' }}>\r\n                    <div className='d-flex' style={{ minHeight: '1px' }}>\r\n                        <div className='pricing-plan-card-pricebox' style={{ flexDirection: 'column', paddingBottom: '10px' }}>20% <span className='discount'>discount</span></div>\r\n                        <div className='pricing-plan-card-pricetitle'>Based on the number of requests</div>\r\n                    </div>\r\n                    <div className='pricing-plan-card-benefit'>\r\n                        <div className='pricing-plan-card-benefit-title'>\r\n                            Customised Annual Subscription Plan\r\n                        </div>\r\n                        <div className='pricing-plan-card-benefit-description' style={{ lineHeight: '250%' }}>\r\n                            Would you like to sign up for an annual subscription plan for a certain number of matchmaking requests per year to streamline your internal approval and payments processes? Contact us and we will customise the right matchmaking plan for you.\r\n                        </div>\r\n                    </div>\r\n                    <div className='pricing-plan-card-submit' style={{ backgroundColor: '#fff', display: 'flex', flexDirection: 'column', justifyContent: 'center', padding: '0px', height: 'auto' }}>\r\n                        {contactUsBtn}\r\n                        <div className='pricing-plan-card-submit-note' style={{ display: 'none' }}>\r\n                            <img src={astericsImg} className='pricing-plan-card-submit-note-asterics' />\r\n                            <strong>Over 90% of our requests have been successfully matched.</strong> However, please note that EUPATI cannot guarantee a successful matching result. In the case of an unsuccessful match only the basic fee will be charged.\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        )\r\n    }\r\n}","import * as React from 'react';\r\nimport { Nav, Tab } from 'react-bootstrap';\r\nimport EupatiLoader from '../../../common/static/loading-animation/loader';\r\nimport { State } from '../model';\r\nimport '../style.scss';\r\nimport { GoogleReCaptcha } from 'react-google-recaptcha-v3';\r\nimport BasicPlanComponent from './basic-plan';\r\nimport TailorMadeComponent from './tailor-made-plan';\r\nimport CustomPlanComponent from './custom-plan';\r\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\r\nimport { CATALOG_TYPES, CATEGORY_NAMES, CONVERTED_NAMES, OPTION_NAMES } from '../../../common/helpers/pricing-list';\r\n\r\ntype OwnProps = {};\r\n\r\nexport type DispatchProps = {\r\n    setIsUserReal: (token: string) => void;\r\n    setCatalogsPrices: () => void;\r\n};\r\n\r\ntype Props = State & DispatchProps & OwnProps;\r\n\r\ntype OwnState = {\r\n    paymentMethods: string[]\r\n};\r\n\r\n//const EMPTY_SUBMIT_WARNING = 'You have to select a Pricing from the menu.';\r\n//const PAYMENT_METHOD_WARNING = 'Please select a Payment method';\r\nexport default class ComponentRoot extends React.Component<Props, OwnState> {\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.returnIcon = this.returnIcon.bind(this);\r\n        this.convertOptionsNames = this.convertOptionsNames.bind(this);\r\n        this.convertCategoriesNames = this.convertCategoriesNames.bind(this);\r\n        this.returnCategoriesArrayByCatalogType = this.returnCategoriesArrayByCatalogType.bind(this);\r\n\r\n        this.state = {\r\n            //paymentMethods: ['Pay via Invoice', 'Pay by Credit Card']//'invoice' and 'card' are keywords\r\n            paymentMethods: ['Pay via Invoice']\r\n        }\r\n    }\r\n\r\n    componentDidMount() {\r\n        this.props.setCatalogsPrices();\r\n    }\r\n\r\n    convertCategoriesNames(name: string) {\r\n        switch (name) {\r\n            case CATEGORY_NAMES.Researcher:\r\n                return `${CONVERTED_NAMES.ExternalResearcher}`\r\n            case CATEGORY_NAMES.Industry:\r\n                return `${CONVERTED_NAMES.IndustryPartner}`\r\n            case CATEGORY_NAMES.Academia:\r\n                return `${CONVERTED_NAMES.AcademiaPartner}`\r\n            default:\r\n                return ''\r\n        }\r\n    }\r\n\r\n    convertOptionsNames(name: string) {\r\n        switch (name) {\r\n            case OPTION_NAMES.Network:\r\n                return `${CONVERTED_NAMES.NetworkOption}`\r\n            case OPTION_NAMES.Mentorship:\r\n                return `${CONVERTED_NAMES.MentorshipOption}`\r\n            default:\r\n                return ''\r\n        }\r\n    }\r\n\r\n    returnIcon(icon: any) {\r\n        return icon as IconProp;\r\n    }\r\n\r\n    returnCategoriesArrayByCatalogType(catalogType: string) {\r\n        const priceCatalog = this.props.catalogData.find(x => x.type.toLowerCase() === catalogType);\r\n        if (priceCatalog) {\r\n            return priceCatalog.categoryOptionsData;\r\n        }\r\n\r\n        return [];\r\n    }\r\n\r\n    render() {\r\n\r\n        let mainComponent: any;\r\n\r\n        let loadingComponent = (\r\n            <div className='loader-wrapper'>\r\n                <EupatiLoader />\r\n            </div>\r\n        );\r\n\r\n        if (this.props.isLoading) {\r\n            mainComponent = loadingComponent;\r\n        }\r\n        else {\r\n            const tabs = (\r\n                <div className=\"tabs-nav-wrapper\">\r\n                    <Nav variant=\"tabs\" className=\"tabs\">\r\n                        <Nav.Item>\r\n                            <Nav.Link eventKey='basic'>\r\n                                Basic\r\n                            </Nav.Link>\r\n                        </Nav.Item>\r\n                        <Nav.Item>\r\n                            <Nav.Link eventKey='tailor'>\r\n                                Tailor-Made\r\n                            </Nav.Link>\r\n                        </Nav.Item>\r\n                        <Nav.Item>\r\n                            <Nav.Link eventKey='custom'>\r\n                                Custom\r\n                            </Nav.Link>\r\n                        </Nav.Item>\r\n                    </Nav>\r\n                </div>\r\n            );\r\n\r\n            const tabContents = (\r\n                <>\r\n                    <Tab.Pane eventKey='basic'>\r\n                        <BasicPlanComponent\r\n                            {...{\r\n                                returnIcon: this.returnIcon,\r\n                                paymentMethods: this.state.paymentMethods,\r\n                                basicPlanCategories: this.returnCategoriesArrayByCatalogType(CATALOG_TYPES.Basic.toLowerCase()),\r\n                                convertCategoriesNames: this.convertCategoriesNames\r\n                            }}\r\n                        />\r\n                    </Tab.Pane>\r\n\r\n                    <Tab.Pane eventKey='tailor'>\r\n                        <TailorMadeComponent\r\n                            {...{\r\n                                returnIcon: this.returnIcon,\r\n                                paymentMethods: this.state.paymentMethods,\r\n                                convertOptionsNames: this.convertOptionsNames,\r\n                                convertCategoriesNames: this.convertCategoriesNames,\r\n                                tailorMadePlanCategories: this.returnCategoriesArrayByCatalogType(CATALOG_TYPES.TailorMade.toLowerCase())\r\n                            }}\r\n                        />\r\n                    </Tab.Pane>\r\n\r\n                    <Tab.Pane eventKey='custom'>\r\n                        <CustomPlanComponent />\r\n                    </Tab.Pane>\r\n                </>\r\n            );\r\n\r\n            mainComponent = (\r\n                <>\r\n                    <GoogleReCaptcha action='homePage' onVerify={token => this.props.setIsUserReal(token)} />\r\n\r\n                    <section className='pricing-upper-sec'>\r\n                        <div className='pricing-upper-sec-txt'>\r\n                            <h5 className='pricing-upper-sec-txt-title mb-4'>Connect Now</h5>\r\n                            <h5 className='pricing-upper-sec-txt-sub-title'>Would you like to engage a EUPATI Patient Expert in your patient engagement opportunity?</h5>\r\n                            <p className='pricing-upper-sec-txt-para'>\r\n                                We have created 3 different packages to suit your needs.\r\n                                Select the right one for you and we can begin finding the right patient for your project today.\r\n                            </p>\r\n                        </div>\r\n                    </section>\r\n\r\n                    <section className='pricing-lower-sec'>\r\n                        <div id='pricing-tabs'>\r\n                            <Tab.Container\r\n                                id=\"tabs\"\r\n                                defaultActiveKey='basic'\r\n                            >\r\n                                {tabs}\r\n                                <Tab.Content>{tabContents}</Tab.Content>\r\n                            </Tab.Container>\r\n                        </div>\r\n                    </section>\r\n                </>\r\n            );\r\n        }\r\n\r\n        return (\r\n            <>\r\n                {mainComponent}\r\n            </>\r\n        );\r\n    }\r\n}","import { default as RootComponent, DispatchProps } from '../components/component-root';\r\nimport * as Constants from '../constants';\r\nimport * as Actions from '../actions';\r\nimport { State } from '../model';\r\nimport { connect } from 'react-redux';\r\n\r\nexport function mapStateToProps(globalState: any) {\r\n    let name = Constants.NAME;\r\n    let pageState = globalState[name] as State;\r\n    return pageState;\r\n}\r\n\r\nexport function mapDispatchToProps(dispatch: any) {\r\n    return {\r\n        setIsUserReal: (token: string) => dispatch(Actions.verifyUserTokenAsync(token)),\r\n        setCatalogsPrices: () => dispatch(Actions.getCatalogsPricesDataAsync())\r\n    } as DispatchProps;\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RootComponent);","import { State } from './model';\r\nimport * as t from './actionType'\r\nimport { CatalogData } from '../../common/models/input-models';\r\n\r\nconst initialState: State = {\r\n    isLoading: false,\r\n    isLoggedIn: false,\r\n    isUserReal: true,\r\n    catalogData: []\r\n};\r\n\r\nexport default (state = initialState, action: any): State => {\r\n    switch (action.type) {\r\n        case t.SET_PRICING_LOADING:\r\n            return setPricingLoading(state, action.payload);\r\n        case t.SET_PRICING_LOGGED_IN:\r\n            return setPricingLoggedInStatus(state, action.payload);\r\n        case t.SET_IS_USER_REAL:\r\n            return setIsUserReal(state, action.payload);\r\n        case t.SET_CATALOGS_DATA:\r\n            return setCatalogsData(state, action.payload);\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nconst setPricingLoading = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setPricingLoggedInStatus = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isLoggedIn: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setIsUserReal = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isUserReal: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setCatalogsData = (state: State, val: CatalogData[]): State => {\r\n    let newState = {\r\n        ...state,\r\n        catalogData: [...val]\r\n    } as State;\r\n\r\n    return newState;\r\n}","import * as Actions from './actions';\r\nimport * as Components from './components/index';\r\nimport * as Containers from './containers/index';\r\nimport * as Constants from './constants';\r\nimport Reducer from './reducer';\r\n\r\nexport default {\r\n    actions: Actions,\r\n    components: Components,\r\n    containers: Containers,\r\n    constants: Constants,\r\n    reducer: Reducer\r\n};\r\n\r\nexport const Root = Containers.ComponentRoot;","// constants.ts\r\n\r\nexport const NAME = 'contentManagement';","import { NAME } from \"./constants\";\r\n\r\nexport const SET_CONTENT_LOADING = `${NAME}/SET_CONTENT_LOADING`;\r\n\r\nexport const SET_CONTENT_RESPONSE = `${NAME}/SET_CONTENT_RESPONSE`;","import { ContentData, ContentResponse } from '../../../common/models/input-models';\r\nimport DataSvc from '../../../common/services/data-svc';\r\nimport * as t from './actionTypes';\r\n\r\nexport const setContentLoading = (isContentLoading: boolean) => ({\r\n    type: t.SET_CONTENT_LOADING,\r\n    payload: isContentLoading\r\n});\r\n\r\nexport const setContentResponse = (contentResponse: ContentResponse) => ({\r\n    type: t.SET_CONTENT_RESPONSE,\r\n    payload: { ...contentResponse }\r\n});\r\n\r\nexport const getContentByNameAsync = (name: string) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setContentLoading(true));\r\n        DataSvc.utilsSvc.getContent(name).then(\r\n            (result: any) => {\r\n                dispatch(setContentResponse(result));\r\n                dispatch(setContentLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const updateContentAsync = (contentData: ContentData) => {\r\n    return (dispatch: any, getState: any) => {\r\n        try {\r\n            DataSvc.utilsSvc.updateContent(contentData);\r\n        }\r\n        catch (error) {\r\n            console.error(error);\r\n        }\r\n    }\r\n}","import * as React from 'react';\r\nimport { Button, Form } from 'react-bootstrap';\r\nimport { RouteComponentProps } from '@reach/router';\r\nimport { ContentResponse } from '../../../../common/models/input-models';\r\nimport ReactDOMServer from 'react-dom/server';\r\nimport EupatiLoader from '../../../../common/static/loading-animation/loader';\r\nimport { useHistory } from 'react-router';\r\nimport '../style.scss';\r\n\r\ntype OwnProps = {\r\n    content: ContentResponse,\r\n    isContentLoading: boolean,\r\n    contentName: string,\r\n    isUserAdmin: boolean\r\n};\r\n\r\nexport type DispatchProps = {};\r\n\r\ntype Props = DispatchProps & OwnProps & RouteComponentProps<{ location: { state: { html: string } } }>;\r\n\r\nconst HtmlToReactParser = require('html-to-react').Parser;\r\nexport default function EupatiPrivacyPage(props: Props) {\r\n    const history = useHistory();\r\n\r\n    const htmlToReactParser = new HtmlToReactParser();\r\n    const reactElement = htmlToReactParser.parse(props.content.htmlContent);\r\n    const reactHtml = ReactDOMServer.renderToStaticMarkup(reactElement);\r\n\r\n    const redirectToEditor = () => {\r\n        history.push({\r\n            pathname: '/admin/content-editor',\r\n            state: { pageName: props.contentName }\r\n        });\r\n    }\r\n\r\n    let mainComp: any;\r\n    let loadComp = (\r\n        <div className='loader-wrapper'>\r\n            <EupatiLoader />\r\n        </div>\r\n    )\r\n\r\n    if (props.isContentLoading) {\r\n        mainComp = loadComp;\r\n    }\r\n    else {\r\n        mainComp = (\r\n            <div className={`${props.contentName}-content`} dangerouslySetInnerHTML={{ __html: reactHtml }}></div>\r\n        );\r\n    }\r\n\r\n    return (\r\n        <>\r\n            <Form.Group id={`${props.contentName}`}>\r\n                {props.isUserAdmin &&\r\n                    <div id={`${props.contentName}-btns`}>\r\n                        <Button variant='primary' onClick={redirectToEditor}>Edit page</Button>\r\n                    </div>\r\n                }\r\n                {mainComp}\r\n            </Form.Group>\r\n        </>\r\n    );\r\n}\r\n","import React from \"react\"\r\nimport { ContentData, ContentResponse } from \"../../../../common/models/input-models\";\r\nimport { State } from \"../model\";\r\nimport EupatiContentPage from \"./content\";\r\nimport 'reactjs-popup/dist/index.css';\r\nimport '../style.scss';\r\nimport AuthenticationContext from \"../../../../common/static/auth-context\";\r\n\r\ntype OwnProps = {\r\n    isContentLoading: boolean,\r\n    contentResponse: ContentResponse\r\n};\r\n\r\nexport type DispatchProps = {\r\n    getContent: (name: string) => void;\r\n    updateContent: (data: ContentData) => void;\r\n};\r\n\r\ntype Props = State & DispatchProps & OwnProps;\r\n\r\ntype OwnState = {\r\n    name: string;\r\n};\r\n\r\nconst CURRENT_PATH = window.location.pathname;  //  (e.g. \"/privacy\")\r\nexport default class ComponentRoot extends React.Component<Props, OwnState> {\r\n    static contextType = AuthenticationContext;\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            name: CURRENT_PATH.substring(1)  //  removes the slash from CURRENT_PATH\r\n        }\r\n    }\r\n\r\n    componentDidMount() {\r\n        this.props.getContent(this.state.name);\r\n        if (this.context.isUserAdmin === null || this.context.isUserAdmin === undefined) {\r\n            this.context.authenticateUser();\r\n        }\r\n    }\r\n\r\n    render() {\r\n        return (\r\n            <>\r\n                <EupatiContentPage\r\n                    {...{\r\n                        content: this.props.contentResponse,\r\n                        isContentLoading: this.props.isContentLoading,\r\n                        contentName: this.state.name,\r\n                        isUserAdmin: this.context.isUserAdmin\r\n                    }}\r\n                />\r\n            </>\r\n        )\r\n    }\r\n}","import { default as RootComponent, DispatchProps } from '../components/component-root';\r\nimport * as Constants from '../constants';\r\nimport { State } from '../model';\r\nimport * as Actions from '../actions';\r\nimport { ContentData } from '../../../../common/models/input-models';\r\nimport { connect } from 'react-redux';\r\n\r\nexport function mapStateToProps(globalState: any) {\r\n    let name = Constants.NAME;\r\n    let pageState = globalState[name] as State;\r\n    return pageState;\r\n}\r\n\r\nexport function mapDispatchToProps(dispatch: any) {\r\n    return {\r\n        getContent: (name: string) => dispatch(Actions.getContentByNameAsync(name)),\r\n        updateContent: (data: ContentData) => dispatch(Actions.updateContentAsync(data))\r\n    } as DispatchProps;\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RootComponent);","import { blankResponse, State } from \"./model\";\r\nimport * as t from './actionTypes';\r\nimport { ContentResponse } from \"../../../common/models/input-models\";\r\n\r\nconst initialState: State = {\r\n    isContentLoading: false,\r\n    contentResponse: blankResponse\r\n}\r\n\r\nexport default (state = initialState, action: any): State => {\r\n    switch (action.type) {\r\n        case t.SET_CONTENT_LOADING:\r\n            return setContentLoading(state, action.payload);\r\n        case t.SET_CONTENT_RESPONSE:\r\n            return setContentResponse(state, action.payload);\r\n        default:\r\n            return state;\r\n    }\r\n}\r\n\r\nconst setContentLoading = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isContentLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setContentResponse = (state: State, val: ContentResponse): State => {\r\n    let newState = {\r\n        ...state,\r\n        contentResponse: { ...val }\r\n    } as State;\r\n\r\n    return newState;\r\n}","// model.js\r\n// This is the model of our module state (e.g. return type of the reducer)\r\n\r\nimport { ContentResponse } from \"../../../common/models/input-models\";\r\n\r\nexport type State = {\r\n    isContentLoading: boolean;\r\n    contentResponse: ContentResponse;\r\n}\r\n\r\nexport const blankResponse = {\r\n    rawDraftContent: '',\r\n    htmlContent: ''\r\n} as ContentResponse;","import * as Actions from './actions';\r\nimport * as Components from './components/index';\r\nimport * as Containers from './containers/index';\r\nimport * as Constants from './constants';\r\nimport Reducer from './reducer';\r\n\r\nexport default {\r\n    actions: Actions,\r\n    components: Components,\r\n    containers: Containers,\r\n    constants: Constants,\r\n    reducer: Reducer\r\n};\r\n\r\nexport const Root = Containers.ComponentRoot;","export const NAME = 'emailTemplates';","import { NAME } from './constants';\r\n\r\nexport const SET_EMAIL_TEMPLATES_LOADING = `${NAME}/SET_EMAIL_TEMPLATES_LOADING`;\r\n\r\nexport const SET_EMAIL_TEMPLATE_DATA = `${NAME}/SET_EMAIL_TEMPLATE_DATA`;\r\n\r\nexport const SET_SINGLE_EMAIL_TEMPLATE_LOADING = `${NAME}/SET_SINGLE_EMAIL_TEMPLATE_LOADING`;\r\n\r\nexport const SET_SINGLE_EMAIL_TEMPLATE_DATA = `${NAME}/SET_SINGLE_EMAIL_TEMPLATE_DATA`;\r\n\r\nexport const SET_PROJECT_MODEL_PROPS_NAMES = `${NAME}/SET_PROJECT_MODEL_PROPS_NAMES`;\r\n\r\nexport const SET_PATIENT_MODEL_PROPS_NAMES = `${NAME}/SET_PATIENT_MODEL_PROPS_NAMES`;\r\n\r\nexport const SET_TRIGGERS_MENU_OPTIONS = `${NAME}/SET_TRIGGERS_MENU_OPTIONS`;\r\n\r\nexport const SET_TRIGGERS_MENU_OPTIONS_LOADING = `${NAME}/SET_TRIGGERS_MENU_OPTIONS_LOADING`;\r\n\r\nexport const SET_RECEIVERS_MENU_OPTIONS = `${NAME}/SET_RECEIVERS_MENU_OPTIONS`;\r\n\r\nexport const SET_CHOOSEN_RECEIVERS = `${NAME}/SET_CHOOSEN_RECEIVERS`;","import { EmailAutomationTriggersMenu, EmailTemplateData, LookUpOptions, ModelPropsNames } from \"../../../common/models/input-models\";\r\n\r\nexport type State = {\r\n    isEmailTemplatesLoading: boolean;\r\n    isSingleEmailTemplateLoading: boolean;\r\n    emailTemplatesData: EmailTemplateData[];\r\n    singleEmailTemplateData: EmailTemplateData;\r\n    projectPropsNames: ModelPropsNames[];\r\n    patientPropsNames: ModelPropsNames[];\r\n    triggersMenuOptions: EmailAutomationTriggersMenu[];\r\n    isTriggersMenuOptionsLoading: boolean;\r\n    receiversMenuOptions: LookUpOptions[];\r\n    choosenReceivers: number[];\r\n};\r\n\r\nexport const emptyTemplate = {\r\n    id: '',\r\n    name: '',\r\n    htmlContent: ''\r\n} as EmailTemplateData;","import { ActionsTemplateData, EmailAutomationTriggersMenu, EmailTemplateData, LookUpOptions, ModelPropsNames } from '../../../common/models/input-models';\r\nimport DataSvc from '../../../common/services/data-svc';\r\nimport * as t from './actionTypes';\r\nimport { emptyTemplate } from './models';\r\n\r\nexport const setIsEmailTemplatesLoading = (isEmailTemplatesLoading: boolean) => ({\r\n    type: t.SET_EMAIL_TEMPLATES_LOADING,\r\n    payload: isEmailTemplatesLoading\r\n});\r\n\r\nexport const setEmailTemplatesData = (emailTemplatesData: EmailTemplateData[]) => ({\r\n    type: t.SET_EMAIL_TEMPLATE_DATA,\r\n    payload: [...emailTemplatesData]\r\n});\r\n\r\nexport const setIsSingleEmailTemplateLoading = (isSingleEmailTemplateLoading: boolean) => ({\r\n    type: t.SET_SINGLE_EMAIL_TEMPLATE_LOADING,\r\n    payload: isSingleEmailTemplateLoading\r\n});\r\n\r\nexport const setSingleEmailTemplateData = (emailTemplateData: EmailTemplateData) => ({\r\n    type: t.SET_SINGLE_EMAIL_TEMPLATE_DATA,\r\n    payload: { ...emailTemplateData }\r\n});\r\n\r\nexport const setProjectModelPropsNames = (projectModelPropsNames: ModelPropsNames[]) => ({\r\n    type: t.SET_PROJECT_MODEL_PROPS_NAMES,\r\n    payload: [...projectModelPropsNames]\r\n});\r\n\r\nexport const setPatientModelPropsNames = (patientModelPropsNames: ModelPropsNames[]) => ({\r\n    type: t.SET_PATIENT_MODEL_PROPS_NAMES,\r\n    payload: [...patientModelPropsNames]\r\n});\r\n\r\nexport const setTriggersMenuOptions = (emailAutomationTriggers: EmailAutomationTriggersMenu[]) => ({\r\n    type: t.SET_TRIGGERS_MENU_OPTIONS,\r\n    payload: [...emailAutomationTriggers]\r\n});\r\n\r\nexport const setTriggersMenuOptionsLoading = (isTriggersMenuOptionsLoading: boolean) => ({\r\n    type: t.SET_TRIGGERS_MENU_OPTIONS_LOADING,\r\n    payload: isTriggersMenuOptionsLoading\r\n});\r\n\r\nexport const setReceiversMenuOptions = (receiversMenuOptions: LookUpOptions[]) => ({\r\n    type: t.SET_RECEIVERS_MENU_OPTIONS,\r\n    payload: [...receiversMenuOptions]\r\n});\r\n\r\nexport const setChoosenReceivers = (choosenReceivers: number[]) => ({\r\n    type: t.SET_CHOOSEN_RECEIVERS,\r\n    payload: [...choosenReceivers]\r\n});\r\n\r\nexport const setAllEmailTemplatesAsync = () => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setIsEmailTemplatesLoading(true));\r\n        DataSvc.utilsSvc.getAllEmailTemplates().then(\r\n            (result: any) => {\r\n                dispatch(setEmailTemplatesData(result));\r\n                dispatch(setIsEmailTemplatesLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        );\r\n    };\r\n};\r\n\r\nexport const setEmailTemplateByIdAsync = (id?: string) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setIsSingleEmailTemplateLoading(true));\r\n        switch (id) {\r\n            case undefined:\r\n                dispatch(setSingleEmailTemplateData(emptyTemplate));\r\n                dispatch(setIsSingleEmailTemplateLoading(false));\r\n                break;\r\n            default:\r\n                DataSvc.utilsSvc.getEmailTemplate(id).then(\r\n                    (result: any) => {\r\n                        dispatch(setSingleEmailTemplateData(result));\r\n                        dispatch(setIsSingleEmailTemplateLoading(false));\r\n                        //dispatch(setEmailTriggerTemplateBeneficiariesAsync(id));\r\n                    },\r\n                    (error) => { console.error(error); }\r\n                );\r\n                break;\r\n        }\r\n    };\r\n};\r\n\r\nexport const createNewEmailTemplateAsync = (emailTemplateData: EmailTemplateData) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setIsSingleEmailTemplateLoading(true));\r\n        DataSvc.utilsSvc.addEmailTemplate(emailTemplateData).then(\r\n            (result: any) => {\r\n                dispatch(setIsSingleEmailTemplateLoading(false));\r\n                dispatch(setSingleEmailTemplateData(emptyTemplate));\r\n                dispatch(setAllEmailTemplatesAsync());\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    };\r\n};\r\n\r\nexport const updateEmailTemplateDataAsync = (emailTemplateData: EmailTemplateData) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setIsSingleEmailTemplateLoading(true));\r\n        DataSvc.utilsSvc.alterEmailTemplateData(emailTemplateData).then(\r\n            (result: any) => {\r\n                dispatch(setIsSingleEmailTemplateLoading(false));\r\n                dispatch(setSingleEmailTemplateData(emptyTemplate));\r\n                dispatch(setAllEmailTemplatesAsync());\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    };\r\n};\r\n\r\nexport const removeEmailTemplateDataAsync = (id: string) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setIsSingleEmailTemplateLoading(true));\r\n        DataSvc.utilsSvc.getEmailTemplate(id).then(\r\n            (result: any) => {\r\n                DataSvc.utilsSvc.removeEmailTemplate(result).then(\r\n                    (result: any) => {\r\n                        dispatch(setAllEmailTemplatesAsync());\r\n                        dispatch(setIsSingleEmailTemplateLoading(false));\r\n                    },\r\n                    (error) => { console.error(error); }\r\n                )\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    };\r\n};\r\n\r\nexport const setModelsPropsNamesAsync = (id: string) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setIsSingleEmailTemplateLoading(true));\r\n        DataSvc.utilsSvc.getClassPropertiesNames({ id: id }).then(\r\n            (result: any) => {\r\n                const projectProps = result.find((x: any) => x.name === 'project');\r\n                dispatch(setProjectModelPropsNames(projectProps.items));\r\n                const patientsProps = result.find((x: any) => x.name === 'patient');\r\n                dispatch(setPatientModelPropsNames(patientsProps.items));\r\n                dispatch(setIsSingleEmailTemplateLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    };\r\n};\r\n\r\nexport const setTriggersMenuOptionsAsync = () => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setTriggersMenuOptionsLoading(true));\r\n        DataSvc.utilsSvc.getEmailAutomationTriggers().then(\r\n            (result: any) => {\r\n                dispatch(setTriggersMenuOptions(result));\r\n                dispatch(setTriggersMenuOptionsLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const assignActionsToEmailTemplateAsync = (data: ActionsTemplateData) => {\r\n    return (dispatch: any, getState: any) => {\r\n        DataSvc.utilsSvc.assignActionsToEmailTemplate(data).then(\r\n            () => {\r\n                dispatch(setAllEmailTemplatesAsync())\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const misallocateActionsFromEmailTemplateAsync = (data: ActionsTemplateData) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setIsSingleEmailTemplateLoading(true));\r\n        DataSvc.utilsSvc.misallocateActionsFromEmailTemplate(data).then(\r\n            (result: any) => {\r\n                dispatch(setEmailTemplateByIdAsync(data.emailTemplateId));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const setReceiversMenuOptionsAsync = () => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setTriggersMenuOptionsLoading(true));\r\n        DataSvc.utilsSvc.getLookUpData().then(\r\n            (result: any) => {\r\n                dispatch(setReceiversMenuOptions(result.find((x: any) => x.name === \"receiverType\").data));\r\n                dispatch(setTriggersMenuOptionsLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const setEmailTriggerTemplateBeneficiariesAsync = (id: string) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setIsSingleEmailTemplateLoading(true));\r\n        DataSvc.utilsSvc.getEmailTriggerTemplateBeneficiaries(id).then(\r\n            (result: any) => {\r\n                dispatch(setChoosenReceivers(result));\r\n                dispatch(setIsSingleEmailTemplateLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}","import React, { useRef, useState } from \"react\";\r\nimport { Editor } from \"@tinymce/tinymce-react\";\r\nimport { EmailTemplateData, ModelPropsNames, OptionsData } from \"../models/input-models\";\r\nimport { Button, Form } from \"react-bootstrap\";\r\nimport { toast } from \"react-toastify\";\r\nimport { FILL_ALL_FIELD_ERR_MSG } from \"../helpers/messages\";\r\n\r\ntype OwnProps = {\r\n    emailTemplateData: EmailTemplateData;\r\n    projectPropsNames: ModelPropsNames[];\r\n    patientPropsNames: ModelPropsNames[];\r\n    options: OptionsData[];\r\n}\r\n\r\nexport type DispatchProps = {\r\n    onBackToAllHandler: () => void;\r\n    onSaveTemplateChangesHandler: (templateData: EmailTemplateData) => void;\r\n}\r\n\r\ntype Props = DispatchProps & OwnProps;\r\n\r\nconst randomstring = require(\"randomstring\");\r\nexport default function EmailTemplateEditor(props: Props) {\r\n    const editorRef = useRef(null);\r\n    const eupatiURL = \"https://connect.eupati.eu/\";\r\n\r\n    const [emailTemplateName, setEmailTemplateName] = useState<string>(props.emailTemplateData.name);\r\n    const [emailTemplateSubject, setEmailTemplateSubject] = useState<string>(props.emailTemplateData.subject);\r\n\r\n    const onSubmit = (e: any) => {\r\n        e.preventDefault();\r\n        if (editorRef.current) {\r\n            const updatedEmailTemplateData = Object.assign(props.emailTemplateData, {\r\n                name: emailTemplateName, actions: [],\r\n                subject: emailTemplateSubject,\r\n                //@ts-ignore\r\n                htmlContent: editorRef.current.getContent()\r\n            });\r\n            if (updatedEmailTemplateData.name === '' ||\r\n                updatedEmailTemplateData.subject === '' ||\r\n                updatedEmailTemplateData.htmlContent === '') {\r\n                return toast.error(FILL_ALL_FIELD_ERR_MSG);\r\n            }\r\n            props.onSaveTemplateChangesHandler(updatedEmailTemplateData);\r\n        }\r\n    }\r\n\r\n    const onEmailTemplateNameChangeHandler = (e: any) => {\r\n        setEmailTemplateName(e.target.value);\r\n    }\r\n\r\n    const onEmailTemplateSubjectChangeHandler = (e: any) => {\r\n        setEmailTemplateSubject(e.target.value);\r\n    }\r\n\r\n    return (\r\n        <Form onSubmit={onSubmit} >\r\n            <Form.Group id='email-template-editor-btns' className=\"mb-3\">\r\n                <Button\r\n                    variant='secondary'\r\n                    id='back-btn'\r\n                    onClick={() => props.onBackToAllHandler()}\r\n                >\r\n                    BACK\r\n                </Button>\r\n                <Button\r\n                    variant='primary'\r\n                    id='save-btn'\r\n                    type=\"submit\"\r\n                >\r\n                    SAVE\r\n                </Button>\r\n            </Form.Group>\r\n            <Form.Group className=\"mb-3\">\r\n                <Form.Label>Name</Form.Label>\r\n                <Form.Control type=\"text\" value={emailTemplateName} placeholder=\"Enter template name...\" onChange={onEmailTemplateNameChangeHandler} />\r\n            </Form.Group>\r\n            <Form.Group className=\"mb-3\">\r\n                <Form.Label>Subject</Form.Label>\r\n                <Form.Control type=\"text\" value={emailTemplateSubject} placeholder=\"Enter template subject...\" onChange={onEmailTemplateSubjectChangeHandler} />\r\n            </Form.Group>\r\n            <Form.Group className=\"mb-3\">\r\n                <Form.Label>Content</Form.Label>\r\n                <Editor\r\n                    //@ts-ignore\r\n                    onInit={(evt, editor) => (editorRef.current) = editor}\r\n                    initialValue={props.emailTemplateData.htmlContent}\r\n                    apiKey=\"gi5vdpb46pw329w18n94luc6ne2yimgpjks785wd387s2qvu\"\r\n                    init={{\r\n                        height: 500,\r\n                        convert_urls: true,\r\n                        relative_urls: false,\r\n                        remove_script_host: false,\r\n                        menubar: 'file edit view insert format tools table properties',\r\n                        plugins: [\r\n                            'advlist autolink lists link image charmap print preview anchor',\r\n                            'searchreplace visualblocks code fullscreen',\r\n                            'insertdatetime media table paste code wordcount'\r\n                        ],\r\n                        toolbar: 'undo redo | formatselect | ' +\r\n                            'bold italic backcolor | alignleft aligncenter ' +\r\n                            'alignright alignjustify | bullist numlist outdent indent |' +\r\n                            'removeformat | ptconfirmation | ptrejection | projconfirmation | projrejection',\r\n                        menu: {\r\n                            properties: { title: 'Fields', items: 'project patient' }\r\n                        },\r\n                        setup: function (editor) {\r\n                            //toolbar\r\n                            editor.ui.registry.addButton('ptconfirmation', {\r\n                                text: 'Patient Confirm',\r\n                                onAction: function () {\r\n                                    const url = `${eupatiURL}letter-of-confirmation/?uid=##uid##+${randomstring.generate(128)}&pid=##pid##`;\r\n                                    editor.insertContent(`<a href='${url}' target='_blank' style=\"color:#fff; border-radius:41px; border-color:transparent; background-color:#00749F; font-size: 18px; padding:12px 24px; cursor:pointer; margin-top:30px; text-decoration: none;\">Confirm</a>`);\r\n                                }\r\n                            });\r\n                            editor.ui.registry.addButton('ptrejection', {\r\n                                text: 'Patient Reject',\r\n                                onAction: function () {\r\n                                    const url = `${eupatiURL}letter-of-rejection/?uid=##uid##+${randomstring.generate(128)}&pid=##pid##`;\r\n                                    editor.insertContent(`<a href='${url}' target='_blank' style=\"color:#fff; border-radius:41px; border-color:transparent; background-color:#A7171A; font-size: 18px; padding:12px 24px; cursor:pointer; margin-top:30px; text-decoration: none;\">Not Interested</a>`);\r\n                                }\r\n                            });\r\n                            editor.ui.registry.addButton('projconfirmation', {\r\n                                text: 'Project Confirm',\r\n                                onAction: function () {\r\n                                    const url = `${eupatiURL}letter-of-confirmation/?pid=##pid##+${randomstring.generate(128)}`;\r\n                                    editor.insertContent(`<a href='${url}' target='_blank' style=\"color:#fff; border-radius:41px; border-color:transparent; background-color:#00749F; font-size: 18px; padding:12px 24px; cursor:pointer; margin-top:30px; text-decoration: none;\">Confirm</a>`);\r\n                                }\r\n                            });\r\n                            editor.ui.registry.addButton('projrejection', {\r\n                                text: 'Project Reject',\r\n                                onAction: function () {\r\n                                    const url = `${eupatiURL}letter-of-rejection/?pid=##pid##+${randomstring.generate(128)}`;\r\n                                    editor.insertContent(`<a href='${url}' target='_blank' style=\"color:#fff; border-radius:41px; border-color:transparent; background-color:#A7171A; font-size: 18px; padding:12px 24px; cursor:pointer; margin-top:30px; text-decoration: none;\">Not Interested</a>`);\r\n                                }\r\n                            });\r\n                            //menu\r\n                            editor.ui.registry.addNestedMenuItem('project', {\r\n                                text: 'Project',\r\n                                getSubmenuItems: () => {\r\n                                    return props.projectPropsNames.map(x => {\r\n                                        return {\r\n                                            type: x.type,\r\n                                            text: x.text,\r\n                                            onAction: () => {\r\n                                                editor.insertContent(`${x.value}`);\r\n                                            }\r\n                                        }\r\n                                    }) as any;\r\n                                }\r\n                            });\r\n                            editor.ui.registry.addNestedMenuItem('patient', {\r\n                                text: 'Patient',\r\n                                getSubmenuItems: () => {\r\n                                    return props.patientPropsNames.map(x => {\r\n                                        return {\r\n                                            type: x.type,\r\n                                            text: x.text,\r\n                                            onAction: () => {\r\n                                                editor.insertContent(`${x.value}`);\r\n                                            }\r\n                                        }\r\n                                    }) as any;\r\n                                }\r\n                            });\r\n                        },\r\n                        content_style: 'body {font - family:Helvetica,Arial,sans-serif; font-size:18px }'\r\n                    }}\r\n                />\r\n            </Form.Group>\r\n        </Form>\r\n    )\r\n}","import React, { useState } from \"react\";\r\nimport { Button, Form } from \"react-bootstrap\";\r\nimport { toast } from \"react-toastify\";\r\nimport { SUCC_ASSIGN_ACTIONS_TO_TEMPLATE } from \"../helpers/messages\";\r\nimport { ActionsTemplateData, EmailAutomationTriggersMenu, EmailTemplateData, LookUpOptions } from \"../models/input-models\";\r\nimport EupatiDropdown from \"./dropdown\";\r\n\r\ntype OwnProps = {\r\n    emailTemplate: EmailTemplateData;\r\n    triggersMenuOptions: EmailAutomationTriggersMenu[];\r\n    filteredTriggersMenuOptions: EmailAutomationTriggersMenu[];\r\n    receiversMenuOptions: LookUpOptions[];\r\n    choosenReceivers: number[];\r\n};\r\n\r\nexport type DispatchProps = {\r\n    onBackToAllHandler: () => void;\r\n    assignActionsToTemplate: (data: ActionsTemplateData) => void;\r\n    compare: (a: any, b: any) => number;\r\n    misallocateActionsFromEmailTemplate: (data: ActionsTemplateData) => void;\r\n};\r\n\r\ntype Props = DispatchProps & OwnProps;\r\n\r\nexport default function ActionsTemplateMenu(props: Props) {\r\n\r\n    const [templateTriggers, setTemplateTriggers] = useState<string[]>(props.emailTemplate?.actions?.length > 0 ? props.emailTemplate?.actions?.map((eta) => eta.name) : []);\r\n    //const [currentTrigger, setCurrentTrigger] = useState<EmailAutomationTriggersMenu | undefined>(props.triggersMenuOptions.sort(props.compare).find((o: any) => templateTriggers.some(tt => tt === o.name)))\r\n\r\n    const onSubmit = (e: any) => {\r\n        e.preventDefault();\r\n        toast.success(SUCC_ASSIGN_ACTIONS_TO_TEMPLATE);\r\n        props.assignActionsToTemplate({\r\n            emailTemplateId: props.emailTemplate.id,\r\n            actions: templateTriggers,\r\n            receivers: []\r\n        } as ActionsTemplateData);\r\n        props.onBackToAllHandler();\r\n    }\r\n\r\n    const onTemplateTriggersChangeHandler = (e: any) => {\r\n        //if empty string, remove assigned actions\r\n        const val = props.triggersMenuOptions[e.target.value].name;\r\n        switch (val) {\r\n            case undefined:\r\n                setTemplateTriggers([]);\r\n                break;\r\n            default:\r\n                setTemplateTriggers([val]);\r\n                break;\r\n        }\r\n    }\r\n\r\n    return (\r\n        <Form onSubmit={onSubmit}>\r\n            <Form.Group id='template-triggers-btns' className=\"mb-3\">\r\n                <Button\r\n                    variant='secondary'\r\n                    id='back-btn'\r\n                    onClick={() => props.onBackToAllHandler()}\r\n                >\r\n                    BACK\r\n                </Button>\r\n                <Button\r\n                    variant='primary'\r\n                    id='save-btn'\r\n                    type=\"submit\"\r\n                >\r\n                    SAVE\r\n                </Button>\r\n            </Form.Group>\r\n            <Form.Group className=\"mb-3\">\r\n                <Form.Label>Email Template Name</Form.Label>\r\n                <Form.Control type=\"text\" value={props.emailTemplate.name} placeholder=\"Enter template name...\" disabled={true} />\r\n            </Form.Group>\r\n            <Form.Group className=\"mb-3\" >\r\n                <Form.Label>Available Triggers</Form.Label>\r\n                <EupatiDropdown\r\n                    fieldName=\"actions\"\r\n                    values={props.triggersMenuOptions.sort(props.compare).map((x: EmailAutomationTriggersMenu, i: number) => { return { id: i, name: x.name } })}\r\n                    value={props.triggersMenuOptions.sort(props.compare).findIndex((o: any) => templateTriggers.some(tt => tt === o.name))}\r\n                    errorMsg=\"\"\r\n                    defaultOptionText=\"No action assigned...\"\r\n                    onChange={onTemplateTriggersChangeHandler}\r\n                />\r\n            </Form.Group>\r\n            {/* <Form.Group className=\"mb-3\">\r\n                <Form.Label>Choosen Receivers</Form.Label>\r\n                <EupatiMultiselect\r\n                    fieldName=\"receivers\"\r\n                    values={props.receiversMenuOptions}\r\n                    value={receivers}\r\n                    errorMsg=''\r\n                    onChange={(e) => onReceiversChangeHandler(e)}\r\n                />\r\n            </Form.Group> */}\r\n        </Form>\r\n    )\r\n}","import React, { useContext, useEffect, useMemo, useState } from \"react\";\r\nimport { Button, Form, Table } from \"react-bootstrap\";\r\nimport { useTable } from \"react-table\";\r\nimport { toast } from \"react-toastify\";\r\nimport { EMAIL_TEMPLATE_CREATED, EMAIL_TEMPLATE_UPDATED } from \"../../../../common/helpers/messages\";\r\nimport { ActionsTemplateData, EmailAutomationTriggerData, EmailAutomationTriggersMenu, EmailTemplateData, LookUpOptions, ModelPropsNames, OptionsData } from \"../../../../common/models/input-models\";\r\nimport AuthenticationContext from \"../../../../common/static/auth-context\";\r\nimport EupatiLoader from \"../../../../common/static/loading-animation/loader\";\r\nimport EmailTemplateEditor from \"../../../../common/static/template-editor\";\r\nimport ActionsTemplateMenu from '../../../../common/static/actions-template-menu';\r\nimport { State } from \"../models\";\r\nimport '../style.scss';\r\nimport ConfirmDenyModal from \"../../../../common/static/confirm-deny-modal\";\r\n\r\ntype OwnProps = {\r\n    isEmailTemplatesLoading: boolean;\r\n    isSingleEmailTemplateLoading: boolean;\r\n    emailTemplatesData: EmailTemplateData[];\r\n    singleEmailTemplateData: EmailTemplateData;\r\n    projectPropsNames: ModelPropsNames[];\r\n    patientPropsNames: ModelPropsNames[];\r\n    triggersMenuOptions: EmailAutomationTriggersMenu[];\r\n    isTriggersMenuOptionsLoading: boolean;\r\n    receiversMenuOptions: LookUpOptions[];\r\n    choosenReceivers: number[];\r\n};\r\n\r\nexport type DispatchProps = {\r\n    getAllTemplates: () => void;\r\n    getSingleTemplate: (id?: string) => void;\r\n    createEmailTemplate: (data: EmailTemplateData) => void;\r\n    updateEmailTemplate: (data: EmailTemplateData) => void\r\n    removeEmailTemplate: (id: string) => void;\r\n    getModelsPropsName: (id: string) => void;\r\n    getTriggersMenuOptions: () => void;\r\n    assignActionsToEmailTemplate: (data: ActionsTemplateData) => void;\r\n    getReceiversMenuOptions: () => void;\r\n    getEmailTriggerTemplateBeneficiaries: (id: string) => void;\r\n    misallocateActionsFromEmailTemplate: (data: ActionsTemplateData) => void;\r\n};\r\n\r\ntype Props = State & DispatchProps & OwnProps;\r\n\r\nconst options = [\r\n    { value: 'toResearcher', label: \"Send to researcher\" },\r\n    { value: 'toPatient', label: \"Send to patients\" }\r\n] as OptionsData[];\r\n\r\nexport default function EmailTemplates(props: Props) {\r\n    const contextData = useContext(AuthenticationContext);\r\n\r\n    const [isCreateTemplateClicked, setIsCreateTemplateClicked] = useState<boolean>(false);\r\n    const [isEditTemplateClicked, setIsEditTemplateClicked] = useState<boolean>(false);\r\n    const [isActionsBtnClicked, setIsActionsBtnClicked] = useState<boolean>(false);\r\n\r\n    useEffect(() => {\r\n        if (contextData.isUserAdmin === true) {\r\n            props.getAllTemplates();\r\n            props.getTriggersMenuOptions();\r\n            props.getReceiversMenuOptions();\r\n            props.getModelsPropsName(contextData.userIdentity);\r\n        }\r\n    }, []);\r\n\r\n    const onCreateNewHandler = () => {\r\n        props.getSingleTemplate();//reset to emptyTemplate\r\n        setIsCreateTemplateClicked(true);\r\n    }\r\n\r\n    const onEditTemplateHandler = (id: string) => {\r\n        setIsEditTemplateClicked(true);\r\n        props.getSingleTemplate(id);\r\n    }\r\n\r\n    const onBackToAllHandler = () => {\r\n        props.getSingleTemplate();//reset to emptyTemplate\r\n        setIsCreateTemplateClicked(false);\r\n        setIsEditTemplateClicked(false);\r\n        setIsActionsBtnClicked(false);\r\n    }\r\n\r\n    const onAssignActionsHandler = (id: string) => {\r\n        props.getSingleTemplate(id);\r\n        setIsActionsBtnClicked(true);\r\n    }\r\n\r\n    const onRemoveTemplateHandler = (id: string) => {\r\n        props.removeEmailTemplate(id);\r\n    }\r\n\r\n    const onSaveTemplateChangesHandler = (emailTemplateData: EmailTemplateData) => {\r\n        switch (emailTemplateData.id !== '') {\r\n            case true:\r\n                toast.success(EMAIL_TEMPLATE_UPDATED);\r\n                props.updateEmailTemplate(emailTemplateData);\r\n                break;\r\n            default:\r\n                toast.success(EMAIL_TEMPLATE_CREATED);\r\n                props.createEmailTemplate(emailTemplateData);\r\n                break;\r\n        }\r\n        setIsCreateTemplateClicked(false);\r\n        setIsEditTemplateClicked(false);\r\n    }\r\n\r\n    const compare = (a: any, b: any) => {\r\n        if (a.name < b.name) {\r\n            return -1;\r\n        }\r\n        if (a.name > b.name) {\r\n            return 1;\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    const data = useMemo(\r\n        () => props.emailTemplatesData?.sort(compare).map((x: any, i: any) => {\r\n            return {\r\n                id: x.id,\r\n                index: i + 1,\r\n                name: x.name,\r\n                //actions: options.filter((o: OptionsData) => x.actions.split(';').some((a: any) => a === o.value)).map((el: OptionsData) => el.label).join(', '),\r\n                content: x.htmlContent,\r\n            }\r\n        }), [props.emailTemplatesData]\r\n    )\r\n\r\n    const columns = useMemo(\r\n        () => [\r\n            {\r\n                Header: '#',\r\n                accessor: 'index'\r\n            },\r\n            {\r\n                Header: 'Name',\r\n                accessor: 'name'\r\n            },\r\n            // {\r\n            //     Header: 'Actions',\r\n            //     accessor: 'actions'\r\n            // }\r\n        ], []\r\n    )\r\n\r\n    const {\r\n        getTableProps,\r\n        getTableBodyProps,\r\n        headerGroups,\r\n        rows,\r\n        prepareRow\r\n    } = useTable({\r\n        // @ts-ignore\r\n        columns,\r\n        data,\r\n    });\r\n\r\n    const loadComp = (\r\n        <div className='loader-wrapper'>\r\n            <EupatiLoader />\r\n        </div>\r\n    );\r\n\r\n    const emailTemplatesComp = (\r\n        <>\r\n            <h4 style={{ textAlign: 'center', textDecoration: 'underline' }}>EMAIL TEMPLATES</h4>\r\n            <Button variant='primary' id='create-btn' onClick={onCreateNewHandler} >CREATE NEW</Button>\r\n            <Table {...getTableProps()} striped bordered hover>\r\n                <thead>\r\n                    {headerGroups.map(headerGroup => (\r\n                        <tr {...headerGroup.getHeaderGroupProps()}>\r\n                            {headerGroup.headers.map(col => (\r\n                                <th {...col.getHeaderProps()}>\r\n                                    {col.render('Header')}\r\n                                </th>\r\n                            ))}\r\n                        </tr>\r\n                    ))}\r\n                </thead>\r\n                <tbody {...getTableBodyProps()}>\r\n                    {rows.map((row: any) => {\r\n                        prepareRow(row);\r\n                        return (\r\n                            <tr {...row.getRowProps()}>\r\n                                {row.cells.map((cell: any) => {\r\n                                    return (\r\n                                        <td {...cell.getCellProps()}>\r\n                                            {cell.render('Cell')}\r\n                                        </td>\r\n                                    )\r\n                                })}\r\n                                <>\r\n                                    <td>\r\n                                        <Button\r\n                                            variant='info'\r\n                                            onClick={(e: any) => onAssignActionsHandler(row.original.id)}\r\n                                        >\r\n                                            ACTIONS\r\n                                        </Button>\r\n                                    </td>\r\n                                    <td>\r\n                                        <Button\r\n                                            variant='warning'\r\n                                            onClick={(e: any) => onEditTemplateHandler(row.original.id)}\r\n                                        >\r\n                                            EDIT\r\n                                        </Button>\r\n                                    </td>\r\n                                    <td>\r\n                                        <ConfirmDenyModal\r\n                                            {...{\r\n                                                targetId: row.original.id,\r\n                                                target: 'email template',\r\n                                                params: `name - ${props.emailTemplatesData.find((etd: EmailTemplateData) => etd.id === row.original.id)?.name}`,\r\n                                                handleRemove: onRemoveTemplateHandler\r\n                                            }}\r\n                                        />\r\n                                        {/* <Button\r\n                                            variant='danger'\r\n                                            onClick={(e: any) => onRemoveTemplateHandler(row.original.id)}\r\n                                        >\r\n                                            REMOVE\r\n                                        </Button> */}\r\n                                    </td>\r\n                                </>\r\n                            </tr>\r\n                        )\r\n                    })}\r\n                </tbody>\r\n            </Table>\r\n        </>\r\n    )\r\n\r\n    const emailTemplateEditor = (\r\n        <>\r\n            <h4 style={{ textAlign: 'center', textDecoration: 'underline' }}>EMAIL TEMPLATE EDITOR</h4>\r\n            <EmailTemplateEditor\r\n                {...{\r\n                    emailTemplateData: props.singleEmailTemplateData,\r\n                    onBackToAllHandler: onBackToAllHandler,\r\n                    onSaveTemplateChangesHandler: onSaveTemplateChangesHandler,\r\n                    projectPropsNames: props.projectPropsNames,\r\n                    patientPropsNames: props.patientPropsNames,\r\n                    options: options\r\n                }}\r\n            />\r\n        </>\r\n    )\r\n\r\n    const emailTemplatesActionsComp = (\r\n        <>\r\n            <h4 style={{ textAlign: 'center', textDecoration: 'underline' }}>ASSIGN TRIGGERS TO TEMPLATE</h4>\r\n            <ActionsTemplateMenu\r\n                {...{\r\n                    emailTemplate: props.singleEmailTemplateData,\r\n                    triggersMenuOptions: props.triggersMenuOptions,\r\n                    filteredTriggersMenuOptions: props.triggersMenuOptions.filter((tmo: EmailAutomationTriggersMenu) => !props.emailTemplatesData.map((etd: EmailTemplateData) => etd.actions).map((etda: EmailAutomationTriggerData[]) => etda.map((x: EmailAutomationTriggerData) => x.name)[0]).some((val: string) => val === tmo.name)),\r\n                    onBackToAllHandler: onBackToAllHandler,\r\n                    assignActionsToTemplate: props.assignActionsToEmailTemplate,\r\n                    receiversMenuOptions: props.receiversMenuOptions,\r\n                    choosenReceivers: props.choosenReceivers,\r\n                    compare: compare,\r\n                    misallocateActionsFromEmailTemplate: props.misallocateActionsFromEmailTemplate\r\n                }}\r\n            />\r\n        </>\r\n    )\r\n\r\n    const pageSwitcher = () => {\r\n        if (props.isEmailTemplatesLoading || props.isSingleEmailTemplateLoading || props.isTriggersMenuOptionsLoading) {\r\n            return loadComp;\r\n        }\r\n        else if (!isCreateTemplateClicked && !isEditTemplateClicked && !isActionsBtnClicked) {\r\n            return emailTemplatesComp//grid\r\n        }\r\n        else if (isActionsBtnClicked) {\r\n            return emailTemplatesActionsComp\r\n        }\r\n        else {\r\n            return emailTemplateEditor\r\n        }\r\n    }\r\n\r\n    return (\r\n        <Form.Group className='email-templates-wrapper'>\r\n            {pageSwitcher()}\r\n        </Form.Group>\r\n    )\r\n}","import { default as RootComponent, DispatchProps } from '../components/component-root';\r\nimport * as Constants from '../constants';\r\nimport { State } from '../models';\r\nimport * as Actions from '../actions';\r\nimport { connect } from 'react-redux';\r\nimport { ActionsTemplateData, EmailTemplateData } from '../../../../common/models/input-models';\r\n\r\nexport function mapStateToProps(globalState: any) {\r\n    let name = Constants.NAME;\r\n    let pageState = globalState[name] as State;\r\n    return pageState;\r\n}\r\n\r\nexport function mapDispatchToProps(dispatch: any) {\r\n    return {\r\n        getAllTemplates: () => dispatch(Actions.setAllEmailTemplatesAsync()),\r\n        getSingleTemplate: (id: string) => dispatch(Actions.setEmailTemplateByIdAsync(id)),\r\n        createEmailTemplate: (data: EmailTemplateData) => dispatch(Actions.createNewEmailTemplateAsync(data)),\r\n        updateEmailTemplate: (data: EmailTemplateData) => dispatch(Actions.updateEmailTemplateDataAsync(data)),\r\n        removeEmailTemplate: (id: string) => dispatch(Actions.removeEmailTemplateDataAsync(id)),\r\n        getModelsPropsName: (id: string) => dispatch(Actions.setModelsPropsNamesAsync(id)),\r\n        getTriggersMenuOptions: () => dispatch(Actions.setTriggersMenuOptionsAsync()),\r\n        assignActionsToEmailTemplate: (data: ActionsTemplateData) => dispatch(Actions.assignActionsToEmailTemplateAsync(data)),\r\n        getReceiversMenuOptions: () => dispatch(Actions.setReceiversMenuOptionsAsync()),\r\n        getEmailTriggerTemplateBeneficiaries: (id: string) => dispatch(Actions.setEmailTriggerTemplateBeneficiariesAsync(id)),\r\n        misallocateActionsFromEmailTemplate: (data: ActionsTemplateData) => dispatch(Actions.misallocateActionsFromEmailTemplateAsync(data))\r\n    } as DispatchProps;\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RootComponent);","import { emptyTemplate, State } from \"./models\";\r\nimport * as t from './actionTypes';\r\nimport { EmailAutomationTriggersMenu, EmailTemplateData, LookUpOptions, ModelPropsNames } from \"../../../common/models/input-models\";\r\n\r\nconst initialState: State = {\r\n    isEmailTemplatesLoading: false,\r\n    isSingleEmailTemplateLoading: false,\r\n    emailTemplatesData: [],\r\n    singleEmailTemplateData: emptyTemplate,\r\n    projectPropsNames: [],\r\n    patientPropsNames: [],\r\n    triggersMenuOptions: [],\r\n    isTriggersMenuOptionsLoading: false,\r\n    receiversMenuOptions: [],\r\n    choosenReceivers: []\r\n};\r\n\r\nexport default (state = initialState, action: any): State => {\r\n    switch (action.type) {\r\n        case t.SET_EMAIL_TEMPLATES_LOADING:\r\n            return setEmailTemplatesLoading(state, action.payload);\r\n        case t.SET_EMAIL_TEMPLATE_DATA:\r\n            return setEmailTemplatesData(state, action.payload);\r\n        case t.SET_SINGLE_EMAIL_TEMPLATE_LOADING:\r\n            return setSingleEmailTemplateLoading(state, action.payload);\r\n        case t.SET_SINGLE_EMAIL_TEMPLATE_DATA:\r\n            return setSingleEmailTemplateData(state, action.payload);\r\n        case t.SET_PROJECT_MODEL_PROPS_NAMES:\r\n            return setProjectModelPropsNames(state, action.payload);\r\n        case t.SET_PATIENT_MODEL_PROPS_NAMES:\r\n            return setPatientModelPropsNames(state, action.payload);\r\n        case t.SET_TRIGGERS_MENU_OPTIONS:\r\n            return setTriggersMenuOptions(state, action.payload);\r\n        case t.SET_TRIGGERS_MENU_OPTIONS_LOADING:\r\n            return setTriggersMenuOptionsLoading(state, action.payload);\r\n        case t.SET_RECEIVERS_MENU_OPTIONS:\r\n            return setReceiversMenuOptions(state, action.payload);\r\n        case t.SET_CHOOSEN_RECEIVERS:\r\n            return setChoosenReceivers(state, action.payload);\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nconst setEmailTemplatesLoading = (state: State, val: boolean): State => {\r\n    const newState = {\r\n        ...state,\r\n        isEmailTemplatesLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n};\r\n\r\nconst setSingleEmailTemplateLoading = (state: State, val: boolean): State => {\r\n    const newState = {\r\n        ...state,\r\n        isSingleEmailTemplateLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n};\r\n\r\nconst setEmailTemplatesData = (state: State, val: EmailTemplateData[]): State => {\r\n    const newState = {\r\n        ...state,\r\n        emailTemplatesData: [...val]\r\n    } as State;\r\n\r\n    return newState;\r\n};\r\n\r\nconst setSingleEmailTemplateData = (state: State, val: EmailTemplateData): State => {\r\n    const newState = {\r\n        ...state,\r\n        singleEmailTemplateData: { ...val }\r\n    } as State;\r\n\r\n    return newState;\r\n};\r\n\r\nconst setProjectModelPropsNames = (state: State, val: ModelPropsNames[]): State => {\r\n    const newState = {\r\n        ...state,\r\n        projectPropsNames: [...val]\r\n    } as State;\r\n\r\n    return newState;\r\n};\r\n\r\nconst setPatientModelPropsNames = (state: State, val: ModelPropsNames[]): State => {\r\n    const newState = {\r\n        ...state,\r\n        patientPropsNames: [...val]\r\n    } as State;\r\n\r\n    return newState;\r\n};\r\n\r\nconst setTriggersMenuOptions = (state: State, val: EmailAutomationTriggersMenu[]): State => {\r\n    const newState = {\r\n        ...state,\r\n        triggersMenuOptions: [...val]\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setTriggersMenuOptionsLoading = (state: State, val: boolean): State => {\r\n    const newState = {\r\n        ...state,\r\n        isTriggersMenuOptionsLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setReceiversMenuOptions = (state: State, val: LookUpOptions[]): State => {\r\n    const newState = {\r\n        ...state,\r\n        receiversMenuOptions: [...val]\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setChoosenReceivers = (state: State, val: number[]): State => {\r\n    const newState = {\r\n        ...state,\r\n        choosenReceivers: [...val]\r\n    } as State;\r\n\r\n    return newState;\r\n}","import * as Actions from './actions';\r\nimport * as Components from './components/index';\r\nimport * as Containers from './containers/index';\r\nimport * as Constants from './constants';\r\nimport Reducer from './reducer';\r\n\r\nexport default {\r\n    actions: Actions,\r\n    components: Components,\r\n    containers: Containers,\r\n    constants: Constants,\r\n    reducer: Reducer\r\n};\r\n\r\nexport const Root = Containers.ComponentRoot;","export const NAME = 'emailResponse';","import { NAME } from \"./constants\";\r\n\r\nexport const SET_LOADING = `${NAME}/SET_LOADING`;","import DataSvc from '../../common/services/data-svc';\r\nimport { ChangePatientStatusData, ProjectFeedbackData, ProjectStatusData, SurveyAnswerData } from '../../common/models/input-models';\r\nimport * as t from './actionTypes';\r\n\r\nexport const setLoading = (isLoading: boolean) => ({\r\n    type: t.SET_LOADING,\r\n    payload: isLoading\r\n});\r\n\r\nexport const changePatientStatusAsync = (data: ChangePatientStatusData) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setLoading(true));\r\n        DataSvc.patientSvc.changePatientStatus(data).then(\r\n            (result: any) => {\r\n                if (result === 'You got me on that one...') {\r\n                    dispatch(setLoading(false));\r\n                }\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const addSurveyAnswerAsync = (data: SurveyAnswerData) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setLoading(true));\r\n        DataSvc.patientSvc.addSurveyAnswer(data).then(\r\n            (result: any) => {\r\n                if (result === 'You are a wizard, Harry...') {\r\n                    dispatch(setLoading(false));\r\n                }\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const changeProjectStatusAsync = (data: ProjectStatusData) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setLoading(true));\r\n        DataSvc.projectsSvc.changeProjectStatus(data).then(\r\n            (result: any) => {\r\n                dispatch(setLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const addProjectFeedbackAsync = (data: ProjectFeedbackData) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setLoading(true));\r\n        DataSvc.projectsSvc.addFeedback(data).then(\r\n            (result: any) => {\r\n                dispatch(setLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}","import React, { useEffect, useState } from \"react\";\r\nimport { ChangePatientStatusData, ProjectFeedbackData, ProjectStatusData, SurveyAnswerData } from \"../../../common/models/input-models\";\r\nimport { State } from \"../model\";\r\nimport confrimImg from '../../../../images/confirm-img.png';\r\nimport declineImg from '../../../../images/decline-img.png';\r\nimport { Button } from \"react-bootstrap\";\r\nimport '../style.scss';\r\nimport { useHistory } from \"react-router\";\r\nimport EupatiLoader from \"../../../common/static/loading-animation/loader\";\r\nimport { toast } from \"react-toastify\";\r\nimport { ANSWER_SUBMIT_SUCC } from \"../../../common/helpers/messages\";\r\nimport { projectStatus, patientStatus } from '../../../common/helpers/status';\r\n\r\ntype OwnProps = {\r\n    isLoading: boolean;\r\n};\r\n\r\nexport type DispatchProps = {\r\n    changePatientStatus: (data: ChangePatientStatusData) => void;\r\n    addSurveyAnswer: (data: SurveyAnswerData) => void;\r\n    changeProjectStatus: (data: ProjectStatusData) => void;\r\n    addProjectFeedback: (data: ProjectFeedbackData) => void;\r\n};\r\n\r\ntype Props = State & DispatchProps & OwnProps;\r\n\r\nconst CONFRIM_PATH = 'letter-of-confirmation';\r\nconst REJECT_PATH = 'letter-of-rejection';\r\nconst url = window.location.href;\r\nconst regex = /(\\?|\\&)(uid|pid)\\=([a-zA-Z0-9-]+)/gm;\r\nconst DEFAULT_HTML = '<p>The page does not exist!</p>';\r\nexport default function EmailResponsePage(props: Props) {\r\n    const history = useHistory();\r\n\r\n    const [html, setHtml] = useState<string>(DEFAULT_HTML);\r\n    const [text, setText] = useState<string>('');\r\n    const [uid, setUID] = useState<string>('');\r\n    const [pid, setPID] = useState<string>('');\r\n    const [matches, setMatches] = useState<number>(0);\r\n\r\n    useEffect(() => {\r\n        //match 1:    ?uid=e9d034f0-410d-4b52-b6df-d754c942c0ee    match 2:    &pid=df915d9a-06c8-4af3-981a-b668e2c11db7\r\n        //group 1:    ?                                            group 1:    &\r\n        //group 2:    uid                                          group 2:    pid\r\n        //group 3:    e9d034f0-410d-4b52-b6df-d754c942c0ee         group 3:    df915d9a-06c8-4af3-981a-b668e2c11db7\r\n        const match = [...url.matchAll(regex)];\r\n        setMatches(match.length);\r\n        if (match !== null && match.length === 2) {\r\n            try {\r\n                const patientId = match[0][3];\r\n                const projectId = match[1][3];\r\n                setUID(patientId); setPID(projectId);\r\n                if (url.includes(REJECT_PATH)) {\r\n                    const data = {\r\n                        uid: patientId,\r\n                        pid: projectId,\r\n                        sid: patientStatus.notInterestedStatusID\r\n                    } as ChangePatientStatusData;\r\n                    props.changePatientStatus(data);\r\n                    setHtml('<p>Thank you for the response.</br>We understand you are busy right now.</br>We will keep you informed on further opportunities.</p>');\r\n                }\r\n                else if (url.includes(CONFRIM_PATH)) {\r\n                    const data = {\r\n                        uid: patientId,\r\n                        pid: projectId,\r\n                        sid: patientStatus.confirmedStatusID\r\n                    } as ChangePatientStatusData;\r\n                    props.changePatientStatus(data);\r\n                    setHtml('<p>Thank you for confirming.</br>We will contact you shortly.</p>');\r\n                }\r\n            } catch (error) {\r\n                console.error(error);\r\n            }\r\n        }\r\n        else if (match !== null && match.length === 1) {\r\n            try {\r\n                if (url.includes(CONFRIM_PATH)) {\r\n                    const projectId = match[0][3];\r\n                    setPID(projectId);\r\n                    const data = {\r\n                        projectId: projectId,\r\n                        statusId: projectStatus.inProgressStatusID\r\n                    } as ProjectStatusData;\r\n                    props.changeProjectStatus(data);\r\n                    setHtml('<p>Thank you for confirming.</br>We will contact you shortly.</p>');\r\n                }\r\n                else if (url.includes(REJECT_PATH)) {\r\n                    const projectId = match[0][3];\r\n                    setPID(projectId);\r\n                    const data = {\r\n                        projectId: projectId,\r\n                        statusId: projectStatus.declinedStatusID\r\n                    } as ProjectStatusData;\r\n                    props.changeProjectStatus(data);\r\n                    setHtml('<p>Thank you for the response.</br>Please do not hesitate to contact us, if you need further assistance.</p>');\r\n                }\r\n            }\r\n            catch (error) {\r\n                console.error(error);\r\n            }\r\n        }\r\n    }, []);\r\n    //patient response\r\n    function addPatientSurveyAnswerHandler() {\r\n        props.addSurveyAnswer({\r\n            uid: uid,\r\n            pid: pid,\r\n            txt: text\r\n        } as SurveyAnswerData);\r\n        toast.success(ANSWER_SUBMIT_SUCC);\r\n        history.push('/');\r\n    }\r\n    //researcher response\r\n    function addProjectFeedbackHandler() {\r\n        props.addProjectFeedback({\r\n            projectId: pid,\r\n            feedback: text\r\n        } as ProjectFeedbackData);\r\n        toast.success(ANSWER_SUBMIT_SUCC);\r\n        history.push('/');\r\n    }\r\n\r\n    let mainComp = null;\r\n    let loadingComp = (\r\n        <div className='loader-wrapper'>\r\n            <EupatiLoader />\r\n        </div>\r\n    );\r\n\r\n    if (props.isLoading) {\r\n        mainComp = loadingComp;\r\n    }\r\n    else {\r\n        mainComp = (\r\n            <div className='mail-response'>\r\n                {/* <img src={html === DEFAULT_HTML ? declineImg : confrimImg} alt='confrim' className=\"mail-response-img\" /> */}\r\n                <div\r\n                    className=\"mail-response-text\"\r\n                    dangerouslySetInnerHTML={{ __html: html }}\r\n                    style={{ paddingTop: '40px', paddingBottom: '40px' }}\r\n                >\r\n                </div>\r\n                {html !== DEFAULT_HTML &&\r\n                    <>\r\n                        <div>\r\n                            <textarea\r\n                                rows={10}\r\n                                cols={50}\r\n                                placeholder={html.includes('confirming') ?\r\n                                    \"Please tell us why you are fit for this project...\" : \"To help us improve, please give us your feedback...\"\r\n                                }\r\n                                value={text}\r\n                                onChange={(e) => setText(e.target.value)}\r\n                            />\r\n                        </div>\r\n                        <div style={{ width: '100%' }}>\r\n                            {matches === 2 && (\r\n                                <Button\r\n                                    className='mail-response-btn'\r\n                                    onClick={addPatientSurveyAnswerHandler}\r\n                                >\r\n                                    Submit\r\n                                </Button>\r\n                            )}\r\n                            {matches === 1 && (\r\n                                <Button\r\n                                    className='mail-response-btn'\r\n                                    onClick={addProjectFeedbackHandler}\r\n                                >\r\n                                    Submit\r\n                                </Button>\r\n                            )}\r\n                        </div>\r\n                    </>\r\n                }\r\n            </div>\r\n        )\r\n    }\r\n\r\n    return (\r\n        <>\r\n            {mainComp}\r\n        </>\r\n    )\r\n}","import { default as RootComponent, DispatchProps } from '../components/component-root';\r\nimport * as Constants from '../constants';\r\nimport * as Actions from '../actions';\r\nimport { State } from '../model';\r\nimport { connect } from 'react-redux';\r\nimport { ChangePatientStatusData, ProjectFeedbackData, ProjectStatusData, SurveyAnswerData } from '../../../common/models/input-models';\r\n\r\nexport function mapStateToProps(globalState: any) {\r\n    let name = Constants.NAME;\r\n    let pageState = globalState[name] as State;\r\n    return pageState;\r\n}\r\n\r\nexport function mapDispatchToProps(dispatch: any) {\r\n    return {\r\n        changePatientStatus: (data: ChangePatientStatusData) => dispatch(Actions.changePatientStatusAsync(data)),\r\n        addSurveyAnswer: (data: SurveyAnswerData) => dispatch(Actions.addSurveyAnswerAsync(data)),\r\n        changeProjectStatus: (data: ProjectStatusData) => dispatch(Actions.changeProjectStatusAsync(data)),\r\n        addProjectFeedback: (data: ProjectFeedbackData) => dispatch(Actions.addProjectFeedbackAsync(data))\r\n    } as DispatchProps;\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RootComponent);","import { State } from \"./model\";\r\nimport * as t from './actionTypes';\r\n\r\nconst initialState: State = {\r\n    isLoading: false\r\n};\r\n\r\nexport default (state = initialState, action: any): State => {\r\n    switch (action.type) {\r\n        case t.SET_LOADING:\r\n            return setLoading(state, action.payload);\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nconst setLoading = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n}","import * as Actions from './actions';\r\nimport * as Components from './components/index';\r\nimport * as Containers from './containers/index';\r\nimport * as Constants from './constants';\r\nimport Reducer from './reducer';\r\n\r\nexport default {\r\n    actions: Actions,\r\n    components: Components,\r\n    containers: Containers,\r\n    constants: Constants,\r\n    reducer: Reducer\r\n};\r\n\r\nexport const Root = Containers.ComponentRoot;","// constants.ts\r\n\r\nexport const NAME = 'paymentPage';","import { NAME } from \"./constants\";\r\n\r\nexport const SET_PAYMENT_LOADING = `${NAME}/SET_PAYMENT_LOADING`;\r\n\r\nexport const SET_LOOKUP_DATA_LOADING = `${NAME}/SET_LOOKUP_DATA_LOADING`;\r\n\r\nexport const SET_LOOKUP_DATA = `${NAME}/SET_LOOKUP_DATA`;\r\n\r\nexport const SET_PAYMENT_RESPONSE = `${NAME}/SET_PAYMENT_RESPONSE`;\r\n\r\nexport const SET_ALL_COUNTRIES_DATA = `${NAME}/SET_ALL_COUNTRIES_DATA`;\r\n\r\nexport const SET_ALL_COUNTRIES_LOADING = `${NAME}/SET_ALL_COUNTRIES_LOADING`;","// matching/actions.js\r\n\r\nimport { CountriesWithCodeModel, LookUpData, PaymentIntentCreateModel, PaymentIntentResponseModel } from '../../common/models/input-models.js';\r\nimport DataSvc from '../../common/services/data-svc';\r\nimport * as t from './actionType.js';\r\n\r\nexport const setPaymentLoading = (isLoading: boolean) => ({\r\n    type: t.SET_PAYMENT_LOADING,\r\n    payload: isLoading,\r\n});\r\n\r\nexport const setLookUpDataLoading = (isLoading: boolean) => ({\r\n    type: t.SET_LOOKUP_DATA_LOADING,\r\n    payload: isLoading\r\n});\r\n\r\nexport const setLookUpData = (data: LookUpData[]) => ({\r\n    type: t.SET_LOOKUP_DATA,\r\n    payload: [...data]\r\n});\r\n\r\nexport const setPaymentResponse = (model: PaymentIntentResponseModel) => ({\r\n    type: t.SET_PAYMENT_RESPONSE,\r\n    payload: { ...model }\r\n});\r\n\r\nexport const setAllCountriesData = (model: CountriesWithCodeModel[]) => ({\r\n    type: t.SET_ALL_COUNTRIES_DATA,\r\n    payload: [...model]\r\n});\r\n\r\nexport const setAllCountriesLoading = (isLoading: boolean) => ({\r\n    type: t.SET_ALL_COUNTRIES_LOADING,\r\n    payload: isLoading\r\n});\r\n\r\nexport const getLookUpDataAsync = () => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setLookUpDataLoading(true));\r\n        DataSvc.utilsSvc.getLookUpData().then(\r\n            (result: any) => {\r\n                dispatch(setLookUpData(result));\r\n                dispatch(setLookUpDataLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        );\r\n    };\r\n};\r\n\r\nexport const getAllCountriesAsync = () => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setAllCountriesLoading(true));\r\n        DataSvc.utilsSvc.getAllCountries().then(\r\n            (result: any) => {\r\n                dispatch(setAllCountriesData(result));\r\n                dispatch(setAllCountriesLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        )\r\n    }\r\n}\r\n\r\nexport const createPaymentIntentAsync = (data: PaymentIntentCreateModel) => {\r\n    return (dispatch: any, getState: any) => {\r\n        dispatch(setPaymentLoading(true));\r\n        DataSvc.paymentSvc.createPaymentIntent(data).then(\r\n            (result: any) => {\r\n                //TODO: add error handler;\r\n                //just to log the error is not enough in this case;\r\n                //because we are chargin real money;\r\n                //and if it fails for some reason;\r\n                //we should be able to display the message to the user;\r\n                //endless loading screen after you click \"Pay\" is a big no no imo.\r\n                dispatch(setPaymentResponse(result));//clientSecret\r\n                dispatch(setPaymentLoading(false));\r\n            },\r\n            (error) => { console.error(error); }\r\n        );\r\n    };\r\n};","import React from \"react\"\r\nimport { useHistory } from \"react-router\";\r\n\r\ntype OwnProps = {\r\n    message: string;\r\n    isFail: boolean;\r\n    price?: number;\r\n    plan?: string;\r\n    package?: string;\r\n    paymentMethod?: string;\r\n    clientSecret?: string;\r\n}\r\n\r\ntype DispatchProps = {\r\n    swapComponents: (shouldSwap: boolean) => void;\r\n    startLoading: () => void;\r\n}\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\nexport default function CheckoutResult(props: Props) {\r\n    const history = useHistory();\r\n\r\n    function redirectTo(pathname: string) {\r\n        history.push({\r\n            pathname: pathname,\r\n            state: {\r\n                price: props.price === undefined ? -1 : props.price,\r\n                plan: props.plan === undefined ? '' : props.plan,\r\n                package: props.package === undefined ? '' : props.package,\r\n                paymentMethod: props.paymentMethod === undefined ? '' : props.paymentMethod,\r\n                clientSecret: props.clientSecret\r\n            }\r\n        });\r\n    }\r\n\r\n    return (\r\n        <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\r\n            {props.isFail ? (\r\n                <div>purchased failed - <span style={{ color: '#bb2124' }} >{props.message}</span>\r\n                    <button onClick={() => {\r\n                        props.startLoading();\r\n                        setTimeout(() => {\r\n                            props.swapComponents(false)\r\n                        }, 200);\r\n                    }}>\r\n                        Try again\r\n                    </button>\r\n                </div>\r\n            ) : (\r\n                <div>thanks for the purchase - <span style={{ color: '#22bb33' }} >{props.message}</span>\r\n                    <button onClick={() => redirectTo('/new-project')}>Proceed</button>\r\n                </div>\r\n            )}\r\n        </div>\r\n    )\r\n}","import React, { useState } from 'react';\r\nimport { CardElement, useElements, useStripe } from '@stripe/react-stripe-js';\r\nimport { Button, Form } from 'react-bootstrap';\r\nimport { Controller, useForm } from 'react-hook-form';\r\nimport EupatiTextbox from './textbox';\r\nimport EupatiDropdown from './dropdown';\r\nimport { CountriesWithCodeModel, LookUpData } from '../models/input-models';\r\nimport { Rules } from '../helpers';\r\nimport CheckoutResult from './checkout-outcome';\r\nimport EupatiLoader from './loading-animation/loader';\r\nimport './static.scss';\r\n\r\ntype Props = {\r\n    lookUpData: LookUpData[],\r\n    clientSecret: string,\r\n    countries: CountriesWithCodeModel[];\r\n    price?: number;\r\n    plan?: string;\r\n    package?: string;\r\n    paymentMethod?: string;\r\n};\r\n\r\ntype SubmitFormData = {\r\n    name: string;\r\n    phone: string;\r\n    email: string;\r\n    city: string;\r\n    country: string;\r\n    line1: string;\r\n    line2: string;\r\n    zip: string;//postal_code\r\n    state: string;\r\n};\r\n\r\nexport default function StripeCard(props: Props) {\r\n    const { handleSubmit, control, watch, formState: { errors } } = useForm();\r\n\r\n    const elements = useElements();\r\n    const stripe = useStripe();\r\n\r\n    const [isLoading, setIsLoading] = useState<boolean>(false);\r\n    const [message, setMessage] = useState<string>('');\r\n    const [shouldRenderSubComp, setShouldRenderSubComp] = useState<boolean>(false);\r\n    const [isPaymentFailed, setIsPaymentFailed] = useState<boolean>(false);\r\n\r\n    const fieldsData = {\r\n        name: watch(\"name\", '') as string,\r\n        phone: watch(\"phone\", '') as string,\r\n        email: watch(\"email\", '') as string,\r\n        city: watch(\"city\", '') as string,\r\n        country: watch(\"country\", '') as string,\r\n        line1: watch(\"line1\", '') as string,\r\n        line2: watch(\"line2\", '') as string,\r\n        zip: watch(\"zip\", '') as string,\r\n        state: watch(\"state\", '') as string,\r\n    } as SubmitFormData;\r\n\r\n    const onSubmit = async (data: SubmitFormData) => {\r\n        if (!stripe || !elements) {\r\n            return;\r\n        }\r\n\r\n        // confirm payment\r\n        // TODO: add checkout outcome pages (success and fail)\r\n        const cardElement = elements.getElement(CardElement);\r\n        if (cardElement) {\r\n            const { error: stripeError, paymentIntent } = await stripe.confirmCardPayment(\r\n                //props.clientSecret, {\r\n                \"pi_3Ktr2NAfbriVg9as0afScgCw_secret_RHZRBa3UvEqVqYrWXWVILMSj9\", {\r\n                payment_method: {\r\n                    card: cardElement,\r\n                    billing_details: {\r\n                        address: {\r\n                            city: data.city,\r\n                            country: returnCountryCode(parseInt(data.country)),\r\n                            line1: data.line1,\r\n                            line2: data.line2,\r\n                            postal_code: data.zip,\r\n                            state: data.state\r\n                        },\r\n                        email: data.email,\r\n                        name: data.name,\r\n                        phone: data.phone\r\n                    }\r\n                }\r\n            });\r\n            setIsLoading(true);\r\n            if (stripeError) {\r\n                //console.error(stripeError);\r\n                setIsPaymentFailed(true);\r\n                const message = stripeError.message;\r\n                if (message) {\r\n                    setMessage(message);\r\n                }\r\n                else {\r\n                    setMessage('Something went wrong...');\r\n                }\r\n                swapComponents(true);\r\n                return;\r\n            }\r\n\r\n            //console.log(paymentIntent);\r\n            setIsPaymentFailed(false);\r\n            setMessage('you can now create a project');\r\n            swapComponents(true);\r\n        }\r\n    }\r\n\r\n    function findLookUpData(lookUpDataType?: string) {\r\n        if (props.lookUpData &&\r\n            props.lookUpData.length > 0) {\r\n            return props.lookUpData?.filter((x: any) => x.name == lookUpDataType)[0]?.data;\r\n        }\r\n\r\n        return [];\r\n    }\r\n\r\n    const returnCountryCode = (countryId: number) => {\r\n        const country = props.countries.find(c => c.id === countryId);\r\n        if (country) {\r\n            return country.code;\r\n        }\r\n\r\n        return '';\r\n    }\r\n\r\n    const swapComponents = (shouldSwap: boolean) => {\r\n        setIsLoading(true);\r\n        setShouldRenderSubComp(shouldSwap);\r\n        setTimeout(() => {\r\n            setIsLoading(false);\r\n        }, 300);\r\n    }\r\n\r\n    const cardElementOptions = {\r\n        // a way to inject styles into stripe iframe\r\n        hidePostalCode: true,\r\n    }\r\n\r\n    let loadComp = (\r\n        <div className='loader-wrapper'>\r\n            <EupatiLoader />\r\n        </div>\r\n    );\r\n\r\n    let mainComp = null;\r\n    let subComp = null;\r\n    if (isLoading) {\r\n        mainComp = loadComp;\r\n        subComp = loadComp;\r\n    }\r\n    else {\r\n        //#region MainComponent\r\n        mainComp = (\r\n            <div id='stripe-payment'>\r\n                <h4>Checkout</h4>\r\n                <Form id='stripe-payment-form' onSubmit={handleSubmit(onSubmit)}>\r\n                    {/* <Form.Group className='billing-info'>\r\n                        <h6 className='billing-info-text'>Billing details</h6>\r\n                    </Form.Group> */}\r\n\r\n                    <Form.Group id='row-wrapper'>\r\n                        <Form.Group className='stripe-payment-field' id='row'>\r\n                            <Form.Label>Name</Form.Label>\r\n                            <Controller\r\n                                control={control}\r\n                                name='name'\r\n                                rules={Rules.requiredMessage}\r\n                                defaultValue={fieldsData.name}\r\n                                render={({ field }) =>\r\n                                    <EupatiTextbox\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.name?.message,\r\n                                            placeholder: 'John Doe'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n\r\n                        <Form.Group className='stripe-payment-field' id='row'>\r\n                            <Form.Label>Phone</Form.Label>\r\n                            <Controller\r\n                                control={control}\r\n                                name='phone'\r\n                                rules={Rules.requiredMessage}\r\n                                defaultValue={fieldsData.phone}\r\n                                render={({ field }) =>\r\n                                    <EupatiTextbox\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.phone?.message,\r\n                                            placeholder: '+447975777666'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n\r\n                        <Form.Group className='stripe-payment-field' id='row'>\r\n                            <Form.Label>Email</Form.Label>\r\n                            <Controller\r\n                                control={control}\r\n                                name='email'\r\n                                rules={Rules.requiredMessage}\r\n                                defaultValue={fieldsData.email}\r\n                                render={({ field }) =>\r\n                                    <EupatiTextbox\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.email?.message,\r\n                                            placeholder: 'john.doe@example.com'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n\r\n                        <Form.Group className='stripe-payment-field' id='row'>\r\n                            <Form.Label>City</Form.Label>\r\n                            <Controller\r\n                                control={control}\r\n                                name='city'\r\n                                rules={Rules.requiredMessage}\r\n                                defaultValue={fieldsData.city}\r\n                                render={({ field }) =>\r\n                                    <EupatiTextbox\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.city?.message,\r\n                                            placeholder: 'Essex'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n\r\n                        <Form.Group className='stripe-payment-field' id='row'>\r\n                            <Form.Label>Аddress Line 1</Form.Label>\r\n                            <Controller\r\n                                control={control}\r\n                                name='line1'\r\n                                rules={Rules.requiredMessage}\r\n                                defaultValue={fieldsData.line1}\r\n                                render={({ field }) =>\r\n                                    <EupatiTextbox\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.line1?.message,\r\n                                            placeholder: 'Street address'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n\r\n                        <Form.Group className='stripe-payment-field' id='row'>\r\n                            <Form.Label>Address Line 2</Form.Label>\r\n                            <Controller\r\n                                control={control}\r\n                                name='line2'\r\n                                rules={Rules.notRequired}\r\n                                defaultValue={fieldsData.line2}\r\n                                render={({ field }) =>\r\n                                    <EupatiTextbox\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.line2?.message,\r\n                                            placeholder: 'Apartment, building, floor'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n\r\n                        <Form.Group className='stripe-payment-field' id='row'>\r\n                            <Form.Label>Postal code</Form.Label>\r\n                            <Controller\r\n                                control={control}\r\n                                name='zip'\r\n                                rules={Rules.requiredMessage}\r\n                                defaultValue={fieldsData.zip}\r\n                                render={({ field }) =>\r\n                                    <EupatiTextbox\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.zip?.message,\r\n                                            placeholder: 'CB1 6NU'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n\r\n                        <Form.Group className='stripe-payment-field' id='row'>\r\n                            <Form.Label>Province</Form.Label>\r\n                            <Controller\r\n                                control={control}\r\n                                name='state'\r\n                                rules={Rules.requiredMessage}\r\n                                defaultValue={fieldsData.state}\r\n                                render={({ field }) =>\r\n                                    <EupatiTextbox\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.state?.message,\r\n                                            placeholder: 'Greater London'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n                    </Form.Group>\r\n\r\n                    <Form.Group id='row-wrapper-2'>\r\n                        <Form.Group className='stripe-payment-field mb-4' id='row-2'>\r\n                            <Form.Label>Country</Form.Label>\r\n                            <Controller\r\n                                control={control}\r\n                                name='country'\r\n                                rules={Rules.selectOptionMessage}\r\n                                defaultValue={fieldsData.country}\r\n                                render={({ field }) =>\r\n                                    <EupatiDropdown\r\n                                        {...{\r\n                                            ...field,\r\n                                            errorMsg: errors?.country?.message,\r\n                                            fieldName: 'countries',\r\n                                            values: findLookUpData('country'),\r\n                                            defaultOptionText: 'Please select country...'\r\n                                        }}\r\n                                    />\r\n                                }\r\n                            />\r\n                        </Form.Group>\r\n\r\n                        <Form.Group className='card-info' id='row-2'>\r\n                            <Form.Label htmlFor='stripe-card-element'>Card information</Form.Label>\r\n                            <Form.Group className=\"form-control\" style={{ height: '2.4rem', paddingTop: '.7em' }} >\r\n                                <CardElement\r\n                                    id='stripe-card-element'\r\n                                    options={cardElementOptions}\r\n                                />\r\n                            </Form.Group>\r\n                        </Form.Group>\r\n                    </Form.Group>\r\n                    <Button type='submit'>Pay</Button>\r\n                </Form>\r\n            </div>\r\n        );\r\n        //#endregion\r\n\r\n        //#region SubComponent\r\n        subComp = (\r\n            <>\r\n                <CheckoutResult\r\n                    {...{\r\n                        isFail: isPaymentFailed,\r\n                        message: message,\r\n                        plan: props.plan,\r\n                        package: props.package,\r\n                        paymentMethod: props.paymentMethod,\r\n                        price: props.price,\r\n                        clientSecret: props.clientSecret,\r\n                        swapComponents: swapComponents,\r\n                        startLoading: () => setIsLoading(true)\r\n                    }}\r\n                />\r\n            </>\r\n        );\r\n        //#endregion\r\n    }\r\n\r\n    return (\r\n        <>\r\n            {shouldRenderSubComp ? (\r\n                <>\r\n                    {subComp}\r\n                </>\r\n            ) : (\r\n                <>\r\n                    {mainComp}\r\n                </>\r\n            )}\r\n        </>\r\n    )\r\n}","import { RouteComponentProps } from \"@reach/router\";\r\nimport React from \"react\";\r\nimport { INVALID_PRICING_DATA } from \"../../../common/helpers/messages\";\r\nimport { State } from \"../model\";\r\nimport { toast } from 'react-toastify';\r\nimport { CountriesWithCodeModel, LookUpData, PaymentIntentCreateModel, PaymentIntentResponseModel } from \"../../../common/models/input-models\";\r\nimport EupatiLoader from \"../../../common/static/loading-animation/loader\";\r\nimport '../styles.scss';\r\nimport StripeCard from \"../../../common/static/stripe-card\";\r\n\r\ntype OwnProps = {\r\n    isPaymentLoading: boolean;\r\n    isLookUpDataLoading: boolean;\r\n    isCountriesLoading: boolean;\r\n    lookUpData: LookUpData[];\r\n    countries: CountriesWithCodeModel[];\r\n    paymentResponse: PaymentIntentResponseModel;\r\n};\r\n\r\nexport type DispatchProps = {\r\n    getLookUpData: () => void;\r\n    getAllCountries: () => void;\r\n    createPaymentIntent: (data: PaymentIntentCreateModel) => void;\r\n};\r\n\r\ntype Props = State & DispatchProps & OwnProps & RouteComponentProps<{ location: { state: { price: number, plan: string, package: string, paymentMethod: string, clientSecret?: string } } }>;\r\n\r\ntype OwnState = {\r\n    clientSecret: string;\r\n};\r\n\r\nexport default class ComponentRoot extends React.Component<Props, OwnState> {\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            clientSecret: ''\r\n        } as OwnState;\r\n    }\r\n\r\n    componentDidMount() {\r\n        const historyState = this.props.location?.state;\r\n        if (historyState === undefined || historyState.price <= 0 ||\r\n            historyState.package === '' || historyState.paymentMethod === '') {\r\n            toast.error(INVALID_PRICING_DATA);\r\n            window.location.href = '/pricing';\r\n        }\r\n        else {\r\n            if (historyState.clientSecret === undefined) {\r\n                this.props.createPaymentIntent({ price: historyState.price });\r\n            }\r\n            else {\r\n                this.setState({ clientSecret: historyState.clientSecret });\r\n            }\r\n            this.props.getLookUpData();\r\n            this.props.getAllCountries();\r\n        }\r\n    }\r\n\r\n    render() {\r\n        let mainComp = null;\r\n        let loadComp = (\r\n            <div className='loader-wrapper'>\r\n                <EupatiLoader />\r\n            </div>\r\n        );\r\n\r\n        if (this.props.isLookUpDataLoading ||\r\n            this.props.isPaymentLoading ||\r\n            this.props.isCountriesLoading\r\n        ) {\r\n            mainComp = loadComp;\r\n        }\r\n        else {\r\n            mainComp = (\r\n                <>\r\n                    <StripeCard\r\n                        {...{\r\n                            lookUpData: this.props.lookUpData,\r\n                            countries: this.props.countries,\r\n                            clientSecret: this.state.clientSecret === '' ? this.props.paymentResponse.clientSecret : this.state.clientSecret,\r\n                            package: this.props.location?.state.package,\r\n                            plan: this.props.location?.state.plan,\r\n                            price: this.props.location?.state.price,\r\n                            paymentMethod: this.props.location?.state.paymentMethod\r\n                        }}\r\n                    />\r\n                </>\r\n            );\r\n        }\r\n\r\n        return (\r\n            <React.Fragment>\r\n                {mainComp}\r\n            </React.Fragment>\r\n        )\r\n    }\r\n}","import { default as RootComponent, DispatchProps } from '../components/component-root';\r\nimport * as Constants from '../constants';\r\nimport * as Actions from '../actions';\r\nimport { State } from '../model';\r\nimport { connect } from 'react-redux';\r\nimport { PaymentIntentCreateModel } from '../../../common/models/input-models';\r\n\r\nexport function mapStateToProps(globalState: any) {\r\n    let name = Constants.NAME;\r\n    let pageState = globalState[name] as State;\r\n    return pageState;\r\n}\r\n\r\nexport function mapDispatchToProps(dispatch: any) {\r\n    return {\r\n        getLookUpData: () => dispatch(Actions.getLookUpDataAsync()),\r\n        createPaymentIntent: (data: PaymentIntentCreateModel) => dispatch(Actions.createPaymentIntentAsync(data)),\r\n        getAllCountries: () => dispatch(Actions.getAllCountriesAsync())\r\n    } as DispatchProps;\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RootComponent);","import { State } from './model';\r\nimport * as t from './actionType'\r\nimport { CountriesWithCodeModel, LookUpData, PaymentIntentResponseModel } from '../../common/models/input-models';\r\n\r\nconst initialState: State = {\r\n    isPaymentLoading: false,\r\n    isLookUpDataLoading: false,\r\n    isCountriesLoading: false,\r\n    lookUpData: [],\r\n    countries: [],\r\n    paymentResponse: {\r\n        clientSecret: ''\r\n    }\r\n};\r\n\r\nexport default (state = initialState, action: any): State => {\r\n    switch (action.type) {\r\n        case t.SET_PAYMENT_LOADING:\r\n            return setPaymentLoading(state, action.payload);\r\n        case t.SET_LOOKUP_DATA_LOADING:\r\n            return setLookUpDataLoading(state, action.payload);\r\n        case t.SET_LOOKUP_DATA:\r\n            return setLookUpData(state, action.payload);\r\n        case t.SET_PAYMENT_RESPONSE:\r\n            return setPaymentResponse(state, action.payload);\r\n        case t.SET_ALL_COUNTRIES_DATA:\r\n            return setAllCountriesData(state, action.payload);\r\n        case t.SET_ALL_COUNTRIES_LOADING:\r\n            return setAllCountriesLoading(state, action.payload);\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nconst setPaymentLoading = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isPaymentLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setLookUpDataLoading = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isLookUpDataLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setLookUpData = (state: State, val: LookUpData[]): State => {\r\n    let newState = {\r\n        ...state,\r\n        lookUpData: [...val]\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setPaymentResponse = (state: State, val: PaymentIntentResponseModel): State => {\r\n    let newState = {\r\n        ...state,\r\n        paymentResponse: { ...val }\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setAllCountriesData = (state: State, val: CountriesWithCodeModel[]): State => {\r\n    let newState = {\r\n        ...state,\r\n        countries: [...val]\r\n    } as State;\r\n\r\n    return newState;\r\n}\r\n\r\nconst setAllCountriesLoading = (state: State, val: boolean): State => {\r\n    let newState = {\r\n        ...state,\r\n        isCountriesLoading: val\r\n    } as State;\r\n\r\n    return newState;\r\n}","import * as Actions from './actions';\r\nimport * as Components from './components/index';\r\nimport * as Containers from './containers/index';\r\nimport * as Constants from './constants';\r\nimport Reducer from './reducer';\r\n\r\nexport default {\r\n    actions: Actions,\r\n    components: Components,\r\n    containers: Containers,\r\n    constants: Constants,\r\n    reducer: Reducer\r\n};\r\n\r\nexport const Root = Containers.ComponentRoot;","import newProject from '../components/modules/new-project';\r\nimport patientProfile from '../components/modules/patient-profile';\r\nimport homePage from '../components/modules/home';\r\nimport allProjects from '../components/modules/admin/all-projects';\r\nimport importPatients from '../components/modules/admin/import-patients';\r\nimport allPatients from '../components/modules/admin/all-patients';\r\nimport adminsLs from '../components/modules/admin/admins-ls';\r\nimport contentEditor from '../components/modules/admin/content-editor';\r\nimport priceCatalog from '../components/modules/admin/price-catalog';\r\nimport pricing from '../components/modules/pricing';\r\nimport contentManagement from '../components/modules/admin/content-management';\r\nimport emailTemplates from '../components/modules/admin/email-templates';\r\nimport emailResponse from '../components/modules/confirm';\r\nimport payment from '../components/modules/payment';\r\n\r\n// The top-level state object\r\nexport interface ApplicationState {\r\n\r\n}\r\n\r\n// Whenever an action is dispatched, Redux will update each top-level application state property using\r\n// the reducer with the matching name. It's important that the names match exactly, and that the reducer\r\n// acts on the corresponding ApplicationState property type.\r\nexport const reducers = {\r\n    // guest\r\n    contentManagement: contentManagement.reducer,\r\n    homePage: homePage.reducer,\r\n    newProject: newProject.reducer,\r\n    paymentPage: payment.reducer,\r\n    // users\r\n    patientProfile: patientProfile.reducer,\r\n    emailResponse: emailResponse.reducer,\r\n    // admins\r\n    allAdmins: adminsLs.reducer,\r\n    allPatients: allPatients.reducer,\r\n    allProjects: allProjects.reducer,\r\n    contentEditor: contentEditor.reducer,\r\n    emailTemplates: emailTemplates.reducer,\r\n    importPatients: importPatients.reducer,\r\n    priceCatalog: priceCatalog.reducer,\r\n    pricingPage: pricing.reducer,\r\n};\r\n\r\n// This type can be used as a hint on action creators so that its 'dispatch' and 'getState' params are\r\n// correctly typed to match your store.\r\nexport interface AppThunkAction<TAction> {\r\n    (dispatch: (action: TAction) => void, getState: () => ApplicationState): void;\r\n}\r\n","import React, { useContext, useEffect } from \"react\";\r\nimport { Redirect, Route } from \"react-router-dom\";\r\nimport AuthenticationContext from \"../auth-context\";\r\n\r\nexport default function AdminRoute({ component: Component, ...restOfProps }) {\r\n\r\n  const contextData = useContext(AuthenticationContext);\r\n\r\n  useEffect(() => {\r\n    if (contextData.isUserAdmin === null || contextData.isUserAdmin === undefined) {\r\n      contextData.authenticateUser();\r\n    }\r\n  });\r\n\r\n  return (\r\n    <Route\r\n      {...restOfProps}\r\n      render={(props) =>\r\n        contextData.isUserAdmin ? <Component {...props} {...restOfProps} /> : <Redirect to=\"/\" />\r\n      }\r\n    />\r\n  );\r\n}","import React, { useContext, useEffect } from \"react\";\r\nimport { Redirect, Route } from \"react-router-dom\";\r\nimport AuthenticationContext from \"../auth-context\";\r\n\r\nexport default function ProtectedRoute({ component: Component, ...restOfProps }) {\r\n\r\n  const contextData = useContext(AuthenticationContext);\r\n\r\n  useEffect(() => {\r\n    if (contextData.isUserAdmin === null || contextData.isUserAdmin === undefined) {\r\n      contextData.authenticateUser();\r\n    }\r\n  });\r\n\r\n  function isUserLoggedIn() {\r\n    if (contextData.isUserAdmin === null || contextData.isUserAdmin === undefined) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  return (\r\n    <Route\r\n      {...restOfProps}\r\n      render={(props) =>\r\n        isUserLoggedIn() ? <Component {...props} {...restOfProps} /> : <Redirect to=\"/\" />\r\n      }\r\n    />\r\n  );\r\n}","export default __webpack_public_path__ + \"static/media/logo.aa07d840.jpg\";","import React from 'react'\r\nimport { Component } from 'react';\r\nimport authService from './AuthorizeService';\r\nimport { AuthenticationResultStatus } from './AuthorizeService';\r\nimport { LoginActions, QueryParameterNames, ApplicationPaths } from './ApiAuthorizationConstants';\r\nimport EupatiLoader from '../common/static/loading-animation/loader';\r\n\r\n// The main responsibility of this component is to handle the user's login process.\r\n// This is the starting point for the login process. Any component that needs to authenticate\r\n// a user can simply perform a redirect to this component with a returnUrl query parameter and\r\n// let the component perform the login and return back to the return url.\r\nexport class LoginHelper {\r\n\r\n    getReturnUrl(state) {\r\n        const params = new URLSearchParams(window.location.search);\r\n        const fromQuery = params.get(QueryParameterNames.ReturnUrl);\r\n        if (fromQuery && !fromQuery.startsWith(`${window.location.origin}/`)) {\r\n            // This is an extra check to prevent open redirects.\r\n            throw new Error(\"Invalid return url. The return url needs to have the same origin as the current page.\")\r\n        }\r\n        return (state && state.returnUrl) || fromQuery || `${window.location.origin}/`;\r\n    }\r\n}\r\nexport const loginHelper = new LoginHelper();\r\n\r\nexport class Login extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            message: undefined\r\n        };\r\n    }\r\n\r\n    componentDidMount() {\r\n        const action = this.props.action;\r\n        switch (action) {\r\n            case LoginActions.Login:\r\n                this.login(loginHelper.getReturnUrl());\r\n                break;\r\n            case LoginActions.LoginCallback:\r\n                this.processLoginCallback();\r\n                break;\r\n            case LoginActions.LoginFailed:\r\n                const params = new URLSearchParams(window.location.search);\r\n                const error = params.get(QueryParameterNames.Message);\r\n                this.setState({ message: error });\r\n                break;\r\n            case LoginActions.Profile:\r\n                this.redirectToProfile();\r\n                break;\r\n            case LoginActions.Register:\r\n                this.redirectToRegister();\r\n                break;\r\n            default:\r\n                throw new Error(`Invalid action '${action}'`);\r\n        }\r\n    }\r\n\r\n    render() {\r\n        const action = this.props.action;\r\n        const { message } = this.state;\r\n\r\n        if (!!message) {\r\n            return <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}>{message}</div>\r\n        } else {\r\n            switch (action) {\r\n                case LoginActions.Login:\r\n                    return (\r\n                        <div className='loader-wrapper'>\r\n                            <EupatiLoader />\r\n                        </div>\r\n                    );\r\n                case LoginActions.LoginCallback:\r\n                    return (<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}>Processing login callback</div>);\r\n                case LoginActions.Profile:\r\n                case LoginActions.Register:\r\n                    return (<div></div>);\r\n                default:\r\n                    throw new Error(`Invalid action '${action}'`);\r\n            }\r\n        }\r\n    }\r\n\r\n    async login(returnUrl) {\r\n        const state = { returnUrl };\r\n        const result = await authService.signIn(state);\r\n\r\n        switch (result.status) {\r\n            case AuthenticationResultStatus.Redirect:\r\n                break;\r\n            case AuthenticationResultStatus.Success:\r\n                await this.navigateToReturnUrl(returnUrl);\r\n                break;\r\n            case AuthenticationResultStatus.Fail:\r\n                this.setState({ message: result.message });\r\n                break;\r\n            default:\r\n                throw new Error(`Invalid status result ${result.status}.`);\r\n        }\r\n    }\r\n\r\n    async processLoginCallback() {\r\n        const url = window.location.href;\r\n        const result = await authService.completeSignIn(url);\r\n        switch (result.status) {\r\n            case AuthenticationResultStatus.Redirect:\r\n                // There should not be any redirects as the only time completeSignIn finishes\r\n                // is when we are doing a redirect sign in flow.\r\n                throw new Error('Should not redirect.');\r\n            case AuthenticationResultStatus.Success:\r\n                await this.navigateToReturnUrl(loginHelper.getReturnUrl(result.state));\r\n                break;\r\n            case AuthenticationResultStatus.Fail:\r\n                this.setState({ message: result.message });\r\n                break;\r\n            default:\r\n                throw new Error(`Invalid authentication result status '${result.status}'.`);\r\n        }\r\n    }\r\n\r\n    redirectToRegister() {\r\n        this.redirectToApiAuthorizationPath(`${ApplicationPaths.IdentityRegisterPath}?${QueryParameterNames.ReturnUrl}=${encodeURI(ApplicationPaths.Login)}`);\r\n    }\r\n\r\n    redirectToProfile() {\r\n        this.redirectToApiAuthorizationPath(ApplicationPaths.IdentityManagePath);\r\n    }\r\n\r\n    redirectToApiAuthorizationPath(apiAuthorizationPath) {\r\n        const redirectUrl = `${window.location.origin}/${apiAuthorizationPath}`;\r\n        // It's important that we do a replace here so that when the user hits the back arrow on the\r\n        // browser they get sent back to where it was on the app instead of to an endpoint on this\r\n        // component.\r\n        window.location.replace(redirectUrl);\r\n    }\r\n\r\n    navigateToReturnUrl(returnUrl) {\r\n        // It's important that we do a replace here so that we remove the callback uri with the\r\n        // fragment containing the tokens from the browser history.\r\n        window.location.replace(returnUrl);\r\n    }\r\n}\r\n","import React, { Component, Fragment } from 'react';\r\nimport { NavItem, NavLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport authService from './AuthorizeService';\r\nimport { loginHelper } from './Login';\r\nimport { ApplicationPaths, LoginActions } from './ApiAuthorizationConstants';\r\n\r\nexport class LoginMenu extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            isAuthenticated: false,\r\n            userName: null\r\n        };\r\n    }\r\n\r\n    componentDidMount() {\r\n        this._subscription = authService.subscribe(() => this.populateState());\r\n        this.populateState();\r\n\r\n        authService.signInSilent();\r\n    }\r\n\r\n    componentWillUnmount() {\r\n        authService.unsubscribe(this._subscription);\r\n    }\r\n\r\n    async populateState() {\r\n        const [isAuthenticated, user] = await Promise.all([authService.isAuthenticated(), authService.getUser()])\r\n\r\n        this.setState({\r\n            isAuthenticated,\r\n            userName: user && user.name\r\n        });\r\n    }\r\n\r\n    render() {\r\n        const { isAuthenticated, userName } = this.state;\r\n        if (!isAuthenticated) {\r\n            const registerPath = `${ApplicationPaths.Register}`;\r\n            const loginPath = `${ApplicationPaths.Login}`;\r\n            return this.anonymousView(registerPath, loginPath);\r\n        } else {\r\n            const profilePath = `${ApplicationPaths.Profile}`;\r\n            const logoutPath = { pathname: `${ApplicationPaths.LogOut}`, state: { local: true } };\r\n            return this.authenticatedView(userName, profilePath, logoutPath);\r\n        }\r\n    }\r\n\r\n    authenticatedView(userName, profilePath, logoutPath) {\r\n        return (<Fragment>\r\n            {/* <NavItem>\r\n                <NavLink tag={Link} className=\"text-dark\" to={profilePath}>{userName}</NavLink>\r\n            </NavItem> */}\r\n            <NavItem>\r\n                {/* <a href={logoutPath.pathname}>Logout</a> */}\r\n                <NavLink tag={Link} to={logoutPath} style={{ color: '#fff' }}>Logout</NavLink>\r\n            </NavItem>\r\n        </Fragment>);\r\n\r\n    }\r\n\r\n    anonymousView(registerPath, loginPath) {\r\n        return (<Fragment>\r\n            <NavItem>\r\n                <a href={\"/faq\"} style={{ color: '#fff' }}>About</a>\r\n            </NavItem>\r\n            <NavItem>\r\n                <a href={loginPath} style={{ color: '#fff' }}>Login</a>\r\n                {/* <NavLink tag={Link} className=\"text-dark\" to={loginPath}>Login</NavLink> */}\r\n            </NavItem>\r\n        </Fragment>);\r\n    }\r\n}\r\n","import * as React from 'react';\r\nimport { Image } from 'react-bootstrap';\r\nimport { withRouter, NavLink } from 'react-router-dom';\r\nimport logo from '../../../images/logo.jpg';\r\nimport { Navbar } from 'react-bootstrap';\r\nimport { Nav } from 'react-bootstrap';\r\nimport { LoginMenu } from '../../api-authorization/LoginMenu';\r\nimport { faHome } from '@fortawesome/fontawesome-free-solid';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\r\n\r\ntype OwnProps = {\r\n    isUserAdmin: boolean;\r\n    authenticateUser: () => void;\r\n}\r\n\r\nexport default class NavBar extends React.PureComponent<OwnProps, {}> {\r\n\r\n    componentDidMount() {\r\n        if (this.props.isUserAdmin === null || this.props.isUserAdmin === undefined) {\r\n            this.props.authenticateUser();\r\n            this.forceUpdate();\r\n        }\r\n    }\r\n\r\n    componentDidUpdate(prevProps: any) {\r\n        if (prevProps.isUserAdmin === null || prevProps.isUserAdmin === undefined) {\r\n            this.props.authenticateUser();\r\n        }\r\n    }\r\n\r\n    returnProperIconType(icon: any) {\r\n        return icon as IconProp;\r\n    }\r\n\r\n    public render() {\r\n\r\n        const ImgCard = withRouter(({ history }) => (\r\n            <Image\r\n                src={logo}\r\n                rounded\r\n                className='navbar-top-brand-logo'\r\n                onClick={() => history.push('/')}\r\n            >\r\n            </Image>\r\n        ));\r\n\r\n        return (\r\n            <div className='navigation-bar'>\r\n                <Navbar className='navbar-top'>\r\n                    <Navbar.Brand className='navbar-top-brand' style={{ cursor: 'pointer' }}>\r\n                        <ImgCard />\r\n                    </Navbar.Brand>\r\n                    <div className='navbar-top-btns'>\r\n                        <Nav>\r\n                            <Nav.Link id='homeLink' href='/' className='navbar-top-button'><FontAwesomeIcon className='navbar-top-home' icon={this.returnProperIconType(faHome)} />Home</Nav.Link>\r\n                        </Nav>\r\n                        <Nav>\r\n                            <Nav.Link id='eupatiLink' href='https://eupati.eu/' className='navbar-top-button' style={{ marginLeft: '1.5rem' }}>Back To EUPATI</Nav.Link>\r\n                        </Nav>\r\n                    </div>\r\n                </Navbar>\r\n                <Navbar className='navbar-bottom' expand='lg' collapseOnSelect style={{ display: 'flex', justifyContent: 'flex-end' }}>\r\n                    <Navbar.Toggle />\r\n                    <Navbar.Collapse className='navbar-bottom-menu'>\r\n                        <Nav className='navbar-bottom-menu-list' style={!this.props.isUserAdmin ? { justifyContent: 'flex-end' } : {}}>\r\n                            {this.props.isUserAdmin &&\r\n                                <div className='admin-nav-items'>\r\n                                    <li className='nav-item'>\r\n                                        <NavLink className='nav-link' to='/admin/prices' style={{ textDecoration: 'none', color: '#fff' }}>Pricing</NavLink>\r\n                                    </li>\r\n                                    <li className='nav-item'>\r\n                                        <NavLink className='nav-link' to='/admin/all-admins' style={{ textDecoration: 'none', color: '#fff' }}>Admins</NavLink>\r\n                                    </li>\r\n                                    <li className='nav-item'>\r\n                                        <NavLink className='nav-link' to='/admin/all-patients' style={{ textDecoration: 'none', color: '#fff' }}>Patients</NavLink>\r\n                                    </li>\r\n\r\n                                    <li className='nav-item'>\r\n                                        <NavLink className='nav-link' to='/admin/projects' style={{ textDecoration: 'none', color: '#fff' }}>Projects</NavLink>\r\n                                    </li>\r\n\r\n                                    <li className='nav-item'>\r\n                                        <NavLink className='nav-link' to='/admin/import-patients' style={{ textDecoration: 'none', color: '#fff' }}>Import</NavLink>\r\n                                    </li>\r\n\r\n                                    <li className='nav-item'>\r\n                                        <NavLink className='nav-link' to='/admin/email-templates' style={{ textDecoration: 'none', color: '#fff' }}>Templates</NavLink>\r\n                                    </li>\r\n                                </div>\r\n                            }\r\n                        </Nav>\r\n                        <Nav className='navbar-bottom-menu-list' style={!this.props.isUserAdmin ? { justifyContent: 'flex-end' } : {}}>\r\n                            <div className='auth-nav-items'>\r\n                                <LoginMenu />\r\n                            </div>\r\n                        </Nav>\r\n                    </Navbar.Collapse>\r\n                </Navbar>\r\n                <hr className='ribbon'></hr>\r\n            </div>\r\n        )\r\n    }\r\n}\r\n","import React from \"react\";\r\nimport { Navbar, Nav } from \"react-bootstrap\";\r\nimport { NavLink } from \"reactstrap\";\r\n\r\ntype OwnProps = {};\r\n\r\ntype DispatchProps = {};\r\n\r\ntype Props = {} & DispatchProps & OwnProps;\r\n\r\ntype OwnState = {\r\n    currentYear: number;\r\n};\r\n\r\nexport default class Footer extends React.PureComponent<Props, OwnState> {\r\n\r\n    constructor(props: any) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            currentYear: new Date().getFullYear()\r\n        }\r\n    }\r\n\r\n    render() {\r\n\r\n        return (\r\n            <div className='footer'>\r\n                <div className='footer-top'>\r\n                    <div className='footer-top-txt'>\r\n                        <a target='_blank' href='https://eupati.eu/contact/'><h5 className='footer-top-txt-title'>Contact Us</h5></a>\r\n                    </div>\r\n                    {/* <Nav className='footer-top-menu'>\r\n                        <li className='nav-item'>\r\n                            <NavLink className='nav-link' target='_blank' href='https://eupati.eu/contact/'>Contact</NavLink>\r\n                        </li>\r\n                        <li className='nav-item'>\r\n                            <NavLink className='nav-link' target='_blank' href='https://eupati.eu/donate/'>Donate</NavLink>\r\n                        </li>\r\n                        <li className='nav-item'>\r\n                            <NavLink className='nav-link' target='_blank' href='https://collaborate.eupati.eu/'>Collaborate</NavLink>\r\n                        </li>\r\n                    </Nav> */}\r\n                </div>\r\n                <Navbar className='footer-bottom'>\r\n                    <span>{`\\u00A9 Copyright EUPATI ${this.state.currentYear}`}</span>\r\n                    <Nav className='footer-bottom-menu'>\r\n                        <li className='nav-item'>\r\n                            <NavLink className='nav-link' href='/terms'>Terms & Conditions</NavLink>\r\n                        </li>\r\n                        <li className='nav-item'>\r\n                            <NavLink className='nav-link' href='/privacy'>Privacy</NavLink>\r\n                        </li>\r\n                        <li className='nav-item'>\r\n                            <NavLink className='nav-link' href='/faq'>FAQ</NavLink>\r\n                        </li>\r\n                        {/* <li className='nav-item'>\r\n                            <NavLink className='nav-link' target='_blank' href='https://eupati.eu/cookies/'>Cookies</NavLink>\r\n                        </li> */}\r\n                    </Nav>\r\n                </Navbar>\r\n            </div>\r\n        )\r\n    }\r\n}","import * as React from 'react';\r\nimport { Container } from 'react-bootstrap';\r\nimport NavBar from './navbar';\r\nimport Footer from './footer';\r\nimport AuthenticationContext from './auth-context';\r\n\r\nexport default class Layout extends React.PureComponent<{}, { children?: React.ReactNode }> {\r\n    static contextType = AuthenticationContext;\r\n    public render() {\r\n        return (\r\n            <React.Fragment>\r\n                <NavBar {...this.context} />\r\n                <Container>\r\n                    {this.props.children}\r\n                </Container>\r\n                <Footer />\r\n            </React.Fragment>\r\n        );\r\n    }\r\n}","import React from 'react'\r\nimport { Component } from 'react';\r\nimport authService from './AuthorizeService';\r\nimport { AuthenticationResultStatus } from './AuthorizeService';\r\nimport { QueryParameterNames, LogoutActions, ApplicationPaths } from './ApiAuthorizationConstants';\r\n\r\n// The main responsibility of this component is to handle the user's logout process.\r\n// This is the starting point for the logout process, which is usually initiated when a\r\n// user clicks on the logout button on the LoginMenu component.\r\nexport class Logout extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            message: undefined,\r\n            isReady: false,\r\n            authenticated: false\r\n        };\r\n    }\r\n\r\n    componentDidMount() {\r\n        const action = this.props.action;\r\n        switch (action) {\r\n            case LogoutActions.Logout:\r\n                if (!!window.history.state.state.local) {\r\n                    this.logout(this.getReturnUrl());\r\n                } else {\r\n                    // This prevents regular links to <app>/authentication/logout from triggering a logout\r\n                    this.setState({ isReady: true, message: \"The logout was not initiated from within the page.\" });\r\n                }\r\n                break;\r\n            case LogoutActions.LogoutCallback:\r\n                this.processLogoutCallback();\r\n                break;\r\n            case LogoutActions.LoggedOut:\r\n                this.navigateToReturnUrl('/');\r\n                //this.setState({ isReady: true, message: \"You successfully logged out!\" });\r\n                break;\r\n            default:\r\n                throw new Error(`Invalid action '${action}'`);\r\n        }\r\n\r\n        this.populateAuthenticationState();\r\n    }\r\n\r\n    render() {\r\n        const { isReady, message } = this.state;\r\n        if (!isReady) {\r\n            return <div></div>\r\n        }\r\n        if (!!message) {\r\n            return (<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}>{message}</div>);\r\n        } else {\r\n            const action = this.props.action;\r\n            switch (action) {\r\n                case LogoutActions.Logout:\r\n                    return (<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}>Processing logout</div>);\r\n                case LogoutActions.LogoutCallback:\r\n                    return (<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}>Processing logout callback</div>);\r\n                case LogoutActions.LoggedOut:\r\n                    return (<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}>{message}</div>);\r\n                default:\r\n                    throw new Error(`Invalid action '${action}'`);\r\n            }\r\n        }\r\n    }\r\n\r\n    async logout(returnUrl) {\r\n        const state = { returnUrl };\r\n        const isauthenticated = await authService.isAuthenticated();\r\n        if (isauthenticated) {\r\n            const result = await authService.signOut(state);\r\n            switch (result.status) {\r\n                case AuthenticationResultStatus.Redirect:\r\n                    break;\r\n                case AuthenticationResultStatus.Success:\r\n                    await this.navigateToReturnUrl(returnUrl);\r\n                    break;\r\n                case AuthenticationResultStatus.Fail:\r\n                    this.setState({ message: result.message });\r\n                    break;\r\n                default:\r\n                    throw new Error(\"Invalid authentication result status.\");\r\n            }\r\n        } else {\r\n            this.setState({ message: \"You successfully logged out!\" });\r\n        }\r\n    }\r\n\r\n    async processLogoutCallback() {\r\n        const url = window.location.href;\r\n        const result = await authService.completeSignOut(url);\r\n        switch (result.status) {\r\n            case AuthenticationResultStatus.Redirect:\r\n                // There should not be any redirects as the only time completeAuthentication finishes\r\n                // is when we are doing a redirect sign in flow.\r\n                throw new Error('Should not redirect.');\r\n            case AuthenticationResultStatus.Success:\r\n                await this.navigateToReturnUrl(this.getReturnUrl(result.state));\r\n                break;\r\n            case AuthenticationResultStatus.Fail:\r\n                this.setState({ message: result.message });\r\n                break;\r\n            default:\r\n                throw new Error(\"Invalid authentication result status.\");\r\n        }\r\n    }\r\n\r\n    async populateAuthenticationState() {\r\n        const authenticated = await authService.isAuthenticated();\r\n        this.setState({ isReady: true, authenticated });\r\n    }\r\n\r\n    getReturnUrl(state) {\r\n        const params = new URLSearchParams(window.location.search);\r\n        const fromQuery = params.get(QueryParameterNames.ReturnUrl);\r\n        if (fromQuery && !fromQuery.startsWith(`${window.location.origin}/`)) {\r\n            // This is an extra check to prevent open redirects.\r\n            throw new Error(\"Invalid return url. The return url needs to have the same origin as the current page.\")\r\n        }\r\n        return (state && state.returnUrl) ||\r\n            fromQuery ||\r\n            `${window.location.origin}${ApplicationPaths.LoggedOut}`;\r\n    }\r\n\r\n    navigateToReturnUrl(returnUrl) {\r\n        return window.location.replace(returnUrl);\r\n    }\r\n}\r\n","import React, { Component, Fragment } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { Login } from './Login'\r\nimport { Logout } from './Logout'\r\nimport { ApplicationPaths, LoginActions, LogoutActions } from './ApiAuthorizationConstants';\r\n\r\nexport default class ApiAuthorizationRoutes extends Component {\r\n\r\n  render () {\r\n    return(\r\n      <Fragment>\r\n          <Route path={ApplicationPaths.Login} render={() => loginAction(LoginActions.Login)} />\r\n          <Route path={ApplicationPaths.LoginFailed} render={() => loginAction(LoginActions.LoginFailed)} />\r\n          <Route path={ApplicationPaths.LoginCallback} render={() => loginAction(LoginActions.LoginCallback)} />\r\n          <Route path={ApplicationPaths.Profile} render={() => loginAction(LoginActions.Profile)} />\r\n          <Route path={ApplicationPaths.Register} render={() => loginAction(LoginActions.Register)} />\r\n          <Route path={ApplicationPaths.LogOut} render={() => logoutAction(LogoutActions.Logout)} />\r\n          <Route path={ApplicationPaths.LogOutCallback} render={() => logoutAction(LogoutActions.LogoutCallback)} />\r\n          <Route path={ApplicationPaths.LoggedOut} render={() => logoutAction(LogoutActions.LoggedOut)} />\r\n      </Fragment>);\r\n  }\r\n}\r\n\r\nfunction loginAction(name){\r\n    return (<Login action={name}></Login>);\r\n}\r\n\r\nfunction logoutAction(name) {\r\n    return (<Logout action={name}></Logout>);\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Route, useHistory } from 'react-router';\r\nimport AdminRoute from './components/common/static/routes/admin-routes';\r\nimport ProtectedRoute from './components/common/static/routes/protected-route';\r\nimport Layout from './components/common/static/Layout';\r\nimport { Root as NewProjectPage } from './components/modules/new-project';\r\nimport { Root as PatientInfoPage } from './components/modules/patient-profile';\r\nimport { Root as HomePage } from './components/modules/home';\r\nimport { Root as PricingPage } from './components/modules/pricing';\r\nimport { Root as AdminProjectsPage } from './components/modules/admin/all-projects';\r\nimport { Root as AdminImportPatients } from './components/modules/admin/import-patients';\r\nimport { Root as AdminPatientsPage } from './components/modules/admin/all-patients';\r\nimport { Root as AdminLsPage } from './components/modules/admin/admins-ls';\r\nimport { Root as ContentEditor } from './components/modules/admin/content-editor';\r\nimport { Root as PriceCatalog } from './components/modules/admin/price-catalog';\r\nimport { Root as ContentManagement } from './components/modules/admin/content-management';\r\nimport { Root as EmailTemplates } from './components/modules/admin/email-templates';\r\nimport { Root as EmailResponsePage } from './components/modules/confirm';\r\nimport { Root as PaymentPage } from './components/modules/payment';\r\n//import AuthorizeRoute from './components/api-authorization/AuthorizeRoute';\r\nimport ApiAuthorizationRoutes from './components/api-authorization/ApiAuthorizationRoutes';\r\nimport { ApplicationPaths } from './components/api-authorization/ApiAuthorizationConstants';\r\nimport './App.scss';\r\nimport { AuthenticationProvider } from './components/common/static/auth-context';\r\nimport { ToastContainer, Slide } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport CookieConsent, { Cookies } from 'react-cookie-consent';\r\nimport { Elements } from '@stripe/react-stripe-js';\r\nimport { loadStripe } from '@stripe/stripe-js';\r\n\r\nexport default function App() {\r\n  const history = useHistory();\r\n\r\n  useEffect(() => {\r\n    const handler = (e: any) => {\r\n      if (\r\n        e.target.closest(\r\n          '.tox-tinymce-aux, .moxman-window, .tam-assetmanager-root'\r\n        ) !== null\r\n      ) {\r\n        e.stopImmediatePropagation();\r\n      }\r\n    };\r\n    document.addEventListener('focusin', handler);\r\n    return () => document.removeEventListener('focusin', handler);\r\n  }, []);\r\n\r\n  // const getPublishableKey = async () => {\r\n  //     const { publishableKey } = await fetch('/api/payments/getstripeconfig').then(res => res.json());\r\n  //     const stripePromise = loadStripe(publishableKey);\r\n  //     return stripePromise;\r\n  // }\r\n\r\n  return (\r\n    //<Elements stripe={getPublishableKey()}>\r\n    <AuthenticationProvider>\r\n      <ToastContainer\r\n        autoClose={4000}\r\n        transition={Slide}\r\n        position={'top-center'}\r\n        style={{ width: '33%' }}\r\n        hideProgressBar={true}\r\n      />\r\n      <CookieConsent\r\n        location=\"bottom\"\r\n        style={{ background: '#113D7C' }}\r\n        buttonStyle={{ color: '#secondaryColor', fontSize: '13px' }}\r\n        buttonClasses=\"cookieConsentBtn\"\r\n        expires={150}\r\n      >\r\n        This website uses cookies to enhance the user experience.{' '}\r\n        <span style={{ fontSize: '13px' }}>\r\n          Please refer to our <a href=\"/privacy\">Privacy policy</a> page for\r\n          more details.\r\n        </span>\r\n      </CookieConsent>\r\n      <Layout>\r\n        <Route exact path=\"/\" component={HomePage} />\r\n        <Route exact path=\"/pricing\" component={PricingPage} />\r\n        <Route exact path=\"/new-project\" component={NewProjectPage} />\r\n        {/* <Route exact path='/payment' component={PaymentPage} /> */}\r\n        <Route exact path=\"/privacy\" component={ContentManagement} />\r\n        <Route exact path=\"/faq\" component={ContentManagement} />\r\n        <Route exact path=\"/terms\" component={ContentManagement} />\r\n        <Route path=\"/letter-of-confirmation\" component={EmailResponsePage} />\r\n        <Route path=\"/letter-of-rejection\" component={EmailResponsePage} />\r\n        <ProtectedRoute exact path=\"/patient\" component={PatientInfoPage} />\r\n        <AdminRoute\r\n          exact\r\n          path=\"/admin/projects\"\r\n          component={AdminProjectsPage}\r\n        />\r\n        <AdminRoute\r\n          exact\r\n          path=\"/admin/import-patients\"\r\n          component={AdminImportPatients}\r\n        />\r\n        <AdminRoute\r\n          exact\r\n          path=\"/admin/all-patients\"\r\n          component={AdminPatientsPage}\r\n        />\r\n        <AdminRoute exact path=\"/admin/all-admins\" component={AdminLsPage} />\r\n        <AdminRoute\r\n          exact\r\n          path=\"/admin/content-editor\"\r\n          history={history}\r\n          component={ContentEditor}\r\n        />\r\n        <AdminRoute exact path=\"/admin/prices\" component={PriceCatalog} />\r\n        <AdminRoute\r\n          exact\r\n          path=\"/admin/email-templates\"\r\n          component={EmailTemplates}\r\n        />\r\n        <Route\r\n          path={ApplicationPaths.ApiAuthorizationPrefix}\r\n          component={ApiAuthorizationRoutes}\r\n        />\r\n      </Layout>\r\n    </AuthenticationProvider>\r\n    //</Elements>\r\n  );\r\n}\r\n","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n    window.location.hostname === 'localhost' ||\r\n    // [::1] is the IPv6 localhost address.\r\n    window.location.hostname === '[::1]' ||\r\n    // 127.0.0.1/8 is considered localhost for IPv4.\r\n    window.location.hostname.match(\r\n        /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n    )\r\n);\r\n\r\nexport default function register() {\r\n    if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n        // The URL constructor is available in all browsers that support SW.\r\n        const url = process.env.PUBLIC_URL as string;\r\n        const publicUrl = new URL(url, window.location.toString());\r\n        if (publicUrl.origin !== window.location.origin) {\r\n            // Our service worker won't work if PUBLIC_URL is on a different origin\r\n            // from what our page is served on. This might happen if a CDN is used to\r\n            // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n            return;\r\n        }\r\n\r\n        window.addEventListener('load', () => {\r\n            const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n            if (isLocalhost) {\r\n                // This is running on localhost. Lets check if a service worker still exists or not.\r\n                checkValidServiceWorker(swUrl);\r\n            } else {\r\n                // Is not local host. Just register service worker\r\n                registerValidSW(swUrl);\r\n            }\r\n        });\r\n    }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string) {\r\n    navigator.serviceWorker\r\n        .register(swUrl)\r\n        .then(registration => {\r\n            registration.onupdatefound = () => {\r\n                const installingWorker = registration.installing as ServiceWorker;\r\n                installingWorker.onstatechange = () => {\r\n                    if (installingWorker.state === 'installed') {\r\n                        if (navigator.serviceWorker.controller) {\r\n                            // At this point, the old content will have been purged and\r\n                            // the fresh content will have been added to the cache.\r\n                            // It's the perfect time to display a \"New content is\r\n                            // available; please refresh.\" message in your web app.\r\n                            console.log('New content is available; please refresh.');\r\n                        } else {\r\n                            // At this point, everything has been precached.\r\n                            // It's the perfect time to display a\r\n                            // \"Content is cached for offline use.\" message.\r\n                            console.log('Content is cached for offline use.');\r\n                        }\r\n                    }\r\n                };\r\n            };\r\n        })\r\n        .catch(error => {\r\n            console.error('Error during service worker registration:', error);\r\n        });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string) {\r\n    // Check if the service worker can be found. If it can't reload the page.\r\n    fetch(swUrl)\r\n        .then(response => {\r\n            // Ensure service worker exists, and that we really are getting a JS file.\r\n            const contentType = response.headers.get('content-type');\r\n            if (response.status === 404 || (contentType && contentType.indexOf('javascript') === -1)) {\r\n                // No service worker found. Probably a different app. Reload the page.\r\n                navigator.serviceWorker.ready.then(registration => {\r\n                    registration.unregister().then(() => {\r\n                        window.location.reload();\r\n                    });\r\n                });\r\n            } else {\r\n                // Service worker found. Proceed as normal.\r\n                registerValidSW(swUrl);\r\n            }\r\n        })\r\n        .catch(() => {\r\n            console.log('No internet connection found. App is running in offline mode.');\r\n        });\r\n}\r\n\r\nexport function unregister() {\r\n    if ('serviceWorker' in navigator) {\r\n        navigator.serviceWorker.ready.then(registration => {\r\n            registration.unregister();\r\n        });\r\n    }\r\n}\r\n","import 'bootstrap/dist/css/bootstrap.css';\r\n\r\nimport * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport { ConnectedRouter } from 'connected-react-router';\r\nimport { createBrowserHistory } from 'history';\r\nimport configureStore from './store/configureStore';\r\nimport App from './App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\n\r\n// Create browser history to use in the Redux store\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href') as string;\r\nconst history = createBrowserHistory({ basename: baseUrl });\r\n\r\n// Get the application-wide store instance, prepopulating with state from the server where available.\r\nconst store = configureStore(history);\r\n\r\nconst SITE_KEY = '6LdxnJMcAAAAAFdlE2cY43syjTlKK_qAMAKZRocG';\r\n\r\nimport { GoogleReCaptchaProvider } from 'react-google-recaptcha-v3';\r\n\r\nReactDOM.render(\r\n    <Provider store={store}>\r\n        <ConnectedRouter history={history}>\r\n            <GoogleReCaptchaProvider reCaptchaKey={SITE_KEY}>\r\n                <App />\r\n            </GoogleReCaptchaProvider>\r\n        </ConnectedRouter>\r\n    </Provider>,\r\n    document.getElementById('root')\r\n);\r\n\r\nregisterServiceWorker();","import { applyMiddleware, combineReducers, compose, createStore } from 'redux';\r\nimport thunk from 'redux-thunk';\r\nimport { connectRouter, routerMiddleware } from 'connected-react-router';\r\nimport { History } from 'history';\r\nimport { ApplicationState, reducers } from './';\r\n\r\nexport default function configureStore(history: History, initialState?: ApplicationState) {\r\n    \r\n    let middleware = [\r\n        thunk,\r\n        routerMiddleware(history)\r\n    ];\r\n\r\n    if (process.env.NODE_ENV === 'development') {\r\n        middleware = [...middleware, require('redux-logger').default];\r\n    }\r\n\r\n    const rootReducer = combineReducers({\r\n        ...reducers,\r\n        router: connectRouter(history)\r\n    });\r\n\r\n    const enhancers = [];\r\n    const windowIfDefined = typeof window === 'undefined' ? null : window as any; // eslint-disable-line @typescript-eslint/no-explicit-any\r\n    if (windowIfDefined && windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__) {\r\n        enhancers.push(windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__());\r\n    }\r\n\r\n    return createStore(\r\n        rootReducer,\r\n        initialState,\r\n        compose(applyMiddleware(...middleware), ...enhancers)\r\n    );\r\n}\r\n"],"sourceRoot":""}