{"version":3,"sources":["assets/images/patient-icon-woman.png","assets/images/bertie.png","assets/images/telephon-logo.png","assets/images/helpdesk-icon.png","assets/images/logout-icon.png","assets/images/inbox-icon.png","assets/images/patient-account-icon.png","assets/images/patient-overzicht-icon.png","assets/images/patient-materiaalraadplegen-icon.png","assets/images/check.png","assets/images/exercise-icon.png","assets/images/frans.png","assets/images/spaans.png","assets/images/uk.png","assets/images/duits.png","assets/images/catalan.png","assets/images/holland.png","assets/images/italy.png","assets/images/patient-opdrachten-icon.png","assets/images/patient-resultaten-icon.png","assets/images/admin.png","assets/images/book.png","assets/images/vaardigheidstraining.svg","assets/images/invuloefening.svg","assets/images/vragenlijst.svg","assets/images/document.svg","assets/images/check-white.png","assets/images/check-small.png","assets/images/check-white-small.png","components/exerciseUtilities/metronoom/metronome80.wav","assets/images/therapist-materiaalaanmaken-icon.png","assets/images/image.svg","assets/images/audio.svg","assets/images/video.svg","assets/images/unknown.svg","communication-module/images/video-call-placeholder.svg","assets/images/belgium.png","assets/images/paypal.png","assets/images/bancontact.png","assets/images/therapist-icon-man.png","assets/images/test.svg","assets/images/therapist-icon.png","../node_modules/peerjs/dist sync","components/styled/button.js","api.js","components/registrationStore.js","components/styled/flashMessage.js","components/styled/card.js","components/styled/typography.js","components/loadspinner.js","insights-constants.js","insights.js","insights-track.js","components/loginForm.js","components/styled/container.js","components/styled/link.js","components/languageSelector.js","components/header.js","components/styled/global.js","pages/login.js","components/verifyCode.js","components/2FAPhone.js","pages/login2.js","components/discountBox.js","components/checkoutStep.js","pages/checkout.js","components/sidebarPatient.js","components/notificationStore.js","components/accountMenu/accountMenuDropdown.js","components/accountMenu/accountMenu.js","components/overlays/patientOverlay.js","components/styled/pageWrapper.js","components/todayTask.js","components/styled/animation.js","communication-module/api.js","communication-module/services/chatService.js","communication-module/services/userService.js","communication-module/stores/chat.store.js","pages/patient/dashboard.js","components/notification.js","components/generalInbox.js","pages/patient/inbox.js","components/article.js","components/author.js","components/resultStore.js","pages/patient/materiaalDetail.js","components/stores/disciplineStore.js","components/resources/disciplines.js","components/stores/languageStore.js","components/resources/languages.js","components/search.js","components/helperComponents/tagSelect.js","components/hooks/localStorage.js","components/filterComponents/filter.js","components/helperComponents/dateConverter.js","components/libraryComponents/libraryCard.js","components/libraryComponents/pagination.js","components/libraryComponents/material.js","pages/patient/materiaalRaadplegen.js","components/gegevensForm.js","components/passwordResetForm.js","components/accountNavigation.js","pages/patient/mijnAccount.js","components/styled/list.js","components/checkoutComponents/PatientPlans.js","pages/patient/mijnPlan.js","components/progressBar.js","components/taskInAssignmentSmall.js","components/assignmentCard.js","pages/patient/opdrachten.js","components/resultsGraph/resultsGraph.js","components/resultsGraph/resultNavigation.js","pages/patient/resultatenDetail.js","components/video/Recorder.js","components/exerciseUtilities/metronoom/Metronoom.js","components/exerciseUtilities/chronometer/Chronometer.js","components/exercises/dagboek.js","components/exercises/stappenplan.js","components/exercises/stappenplanMetValidatie.js","components/exerciseUtilities/videoRecorder/record-button.js","components/exerciseUtilities/videoRecorder/stop-button.js","components/exerciseUtilities/videoRecorder/timer.js","components/exerciseUtilities/videoRecorder/countdown.js","components/exerciseUtilities/videoRecorder/videoRenderActions.js","azure.js","pages/patient/taakDetail.js","components/resultFormDagboek.js","components/resultForm.js","pages/patient/resultForm.js","components/areYouSure.js","components/myTherapists.js","pages/patient/therapeuten.js","components/sidebarTherapist.js","components/onboarding/onboardingStep.js","components/patientStore.js","components/onboarding/onboardingFlow.js","components/overlays/therapistOverlay.js","pages/therapeut/dashboard.js","components/styled/switch.js","components/documentComponents/documentForm.js","pages/therapeut/documentAanmaken.js","components/documentComponents/documentEditForm.js","pages/therapeut/documentAanpassen.js","components/fileForm/fileTarget.js","components/fileForm/fileForm.js","pages/therapeut/fileAanmaken.js","components/fileForm/fileEditForm.js","pages/therapeut/fileAanpassen.js","pages/therapeut/inbox.js","components/resultsGraph/logboekGraph.js","pages/therapeut/logboekDetail.js","components/myTemplate.js","components/myDocument.js","components/libraryComponents/ownDocuments.js","components/myMedia.js","components/libraryComponents/ownMedia.js","components/myExercise.js","components/libraryComponents/ownExercises.js","pages/therapeut/materiaalAanmaken.js","pages/therapeut/materiaalDetail.js","components/libraryComponents/mediaCard.js","components/libraryComponents/media.js","components/libraryComponents/adminList.js","pages/therapeut/materiaalRaadplegen.js","components/helperComponents/createBertie.js","components/helperComponents/createBertieEN.js","communication-module/components/external/loadspinner.js","pages/therapeut/mijnAccount.js","components/checkoutComponents/therapistPlans.js","pages/therapeut/mijnPlan.js","components/opdrachtStore.js","components/selectionOverlay.js","components/taskInAssignment.js","components/templateForm.js","pages/therapeut/opdrachtAanmaken.js","pages/therapeut/opdrachtAanpassen.js","components/patientNavigation.js","pages/therapeut/patientDetail.js","components/logboek.js","pages/therapeut/patientResultaat.js","components/trajectComponents/trajectStore.js","components/calendar/calendar.js","components/helperComponents/pagination.js","components/calendar/dateRangePicker.js","components/helperComponents/dateHelper.js","components/calendar/sheduler.js","components/patientopdrachtaanmaken.js","components/patientExistingAssignment.js","components/trajectComponents/createTraject.js","components/helperComponents/collapsible.js","components/trajectComponents/trajectDetails.js","pages/therapeut/patientTaak.js","components/patientCard.js","pages/therapeut/therapie.js","components/helpdeskForm.js","pages/therapeut/helpdesk.js","pages/patient/helpdesk.js","pages/therapeut/taakDetail.js","communication-module/helpers/errorHelper.js","communication-module/components/errorBoundary.js","communication-module/theme.js","communication-module/components/text.js","communication-module/services/callService.js","communication-module/components/icon.js","communication-module/components/backButton.js","communication-module/stores/authentication.store.js","communication-module/stores/library.store.js","communication-module/services/communicationService.js","communication-module/events.js","communication-module/stores/communication.store.js","communication-module/components/hangupCallButton.js","communication-module/hooks/useInterval.js","communication-module/components/stopWatch.js","communication-module/components/graphDrawer.js","communication-module/helpers/pitchHelper.js","communication-module/helpers/hnrHelper.js","communication-module/components/audioRecorder.js","communication-module/components/audioAnalyzer.js","communication-module/helpers/shimmerHelper.js","communication-module/helpers/jitterHelper.js","communication-module/services/libraryService.js","communication-module/components/containers/exercise.js","communication-module/components/containers/media.js","communication-module/components/containers/document.js","communication-module/components/containers/libraryContainer.js","communication-module/components/errorMessage.js","communication-module/components/containers/settingsModal.js","communication-module/components/containers/videoCallPage.js","communication-module/components/containers/chatPage.js","communication-module/components/containers/activeCallNotification.js","communication-module/components/containers/initialize.js","pages/resetPassword.js","pages/error.js","components/errorHandler.js","components/fileUploadStore.js","components/exerciseForm/mediaSelectionOverlay.js","components/exerciseForm/exerciseForm.js","pages/therapeut/oefeningAanvragen.js","pages/admin/modules/discounts.js","pages/admin/modules/exerciseRequests.js","pages/admin/modules/marketing-download.js","pages/admin/admin.js","i18n.js","components/backgroundUpload.js","components/registrationComponents/typeOfUser.js","components/registrationComponents/userName.js","components/registrationComponents/email.js","components/registrationComponents/phoneNumber.js","components/registrationComponents/password.js","components/registrationComponents/repeatPassword.js","components/registrationComponents/speciality.js","components/registrationComponents/acceptStatements.js","components/2FAEmail.js","pages/registration/register.js","pages/therapeut/mediaDetail.js","communication-module/components/containers/chatNotification.js","pages/patient/mediaDetail.js","components/styled/callbackSwitch.js","components/exerciseForm/exerciseEditForm.js","pages/therapeut/editExercise.js","pages/v2.js","App.js","serviceWorker.js","index.js","assets/images/patient-icon.png"],"names":["module","exports","webpackEmptyContext","req","e","Error","code","keys","resolve","id","Button","styled","button","props","secondary","small","large","source","axios","CancelToken","api","create","baseURL","process","headers","window","localStorage","getItem","document","cookie","split","find","row","startsWith","recordingApi","RegistrationStoreInstance","reaction","token","setItem","defaults","removeItem","user","name","value","this","newUser","newToken","newError","error","newEmail","email","newPassword","password","newValue","inProgress","newPlan","plan","newId","plan_id","newPlanLength","planLength","isTherapist","firstName","lastName","wantsMarketingEmails","speciality","newPhoneNumber","phoneNumber","individuFinished","get","auth","username","then","response","setToken","data","setUser","JSON","stringify","catch","setError","localStorageData","lastCheck","Date","now","public_id","parse","getDate","getMonth","undefined","registrationMessage","observable","action","createContext","Flash","div","red","green","center","fadein","keyframes","Card","ExCard","H1","h1","white","black","H2","h2","H3","h3","light","H4","h4","P","p","PageTitle","span","SmallTitle","Spinner","LoadSpinner","aria-label","eventConstants","LOGIN","LOGOUT","GET_STARTED","LIBRARY","CLIENTS","RESULTS","PUBLIC","PRIVATE","MEDIA","DETAILS","PAGE","UPDATE","CARE_PATHS","ADD_TASK","START_VIDEO_CALL","ASSIGNMENTS","START_ASSIGNMENT","typeUserConstants","getInsightUserType","browserHistory","createBrowserHistory","basename","reactPlugin","ReactPlugin","trackEvent","isAiEnabled","appInsights","ApplicationInsights","config","instrumentationKey","extensions","extensionConfig","identifier","history","loadAppInsights","LoginForm","Form","CenterSpinner","Container","FormGroup","Input","Field","Label","label","SubmitButton","Center","ForgotPassword","a","Overlay","OverlayCard","Times","FaTimes","OverlayTitle","ResetInput","input","LoginForm1","observer","useTranslation","t","store","i18n","useContext","RegistrationStore","useState","redirect","setRedirect","showReset","setShowReset","goTo2FA","setGoTo2FA","userDoesNotExist","setUserDoesNotExist","useAppInsightsContext","initialValues","onSubmit","values","actions","setEmail","setPassword","setInProgress","login","Loggeduser","type","therapist","shouldGoTo2FA","aMonthAgo","date","nofMonths","thisMonth","setMonth","setDate","getDateMonthsBefore","lastTwoFAPhone","TwoFAEnabled","setSubmitting","render","isSubmitting","errors","touched","placeholder","data-testid","onClick","disabled","to","validationSchema","Yup","shape","required","getElementById","flex","alignCenter","justifyEnd","TelLink","NavLink","MenuLink","StyledLink","AnchorLink","noline","Earth","FaGlobe","Arrow","FaAngleDown","Dropdown","Language","LanguageDropdown","Relative","OtherLanguage","Image","img","LanguageSelector","DropdownOpen","setDropdownOpen","changeLanguage","language","fullLanguage","getElementsByTagName","toString","userId","src","sidebar","className","classList","Catalan","Duits","Engels","Spaans","Frans","Italiaans","Netherlands","Navbar","Menu","Link","MenuNav","NavButton","ButtonLine","Auth","Logo","LogoImage","ContainerNav","LoginButton","ChooseLanguage","Header","menuActive","setMenuActive","href","TelephonLogo","Global","LoginCard","Title","NoAccountCreated","CreateAccount","Login","Rstore","qs","location","search","ignoreQueryPrefix","useEffect","CodeFlex","VerifyCode","part1","setPart1","part2","setPart2","part3","setPart3","part4","setPart4","part5","setPart5","part6","setPart6","ChangeInputField","target","length","nextSibling","focus","onChange","setCode","maxLength","tabIndex","autoComplete","Flex","Code","Resend","ResendText","Text","TwoFA","isInRegistration","setRegisterStepIsValid","setRegisterStepIsInvalid","showResendMessage","setShowResendMessage","showFailMessage","setShowFailMessage","setPhoneNumber","params","phone","console","log","VerifyCodeInput","put","res","success","addUserAttribute","substring","verify","setTimeout","Icon","FaArrowLeft","Back","Login2","DiscountBox","succes","discount","month_reduction","failure","A","CheckoutCard","Column","ColumnBorder","CheckoutFlex","TitleSmall","Price","Par","Item","ColumnBorderFlex","Checkout","paymentMethod","setPlan","succesMessage","setSuccesMessage","failureMessage","setFailureMessage","setDiscount","monthReduction","setMonthReduction","plans","forEach","naam","period","Math","round","price","toFixed","monthreduction","user_id","post","redirect_url","method","reload","checkout","Sidebar","Nav","NavIcon","SidebarPatient","registrationStore","mobileMenu","setMobileMenu","trackProps","DashboardIcon","expired","OpdrachtenIcon","MateriaalIcon","ResultaatIcon","AccountIcon","activeClassName","HelpdeskIcon","InboxIcon","logout","LogoutIcon","NotificationStoreInstance","newNotification","notifications","updateNotifications","inbox","Wrapper","Notification","RouteName","AccountLink","LinkManual","SeperatorLine","hr","AccountMenuDropdown","notificationStore","admin","AdminIcon","Therapist","Book","ActiveUser","UserIcon","Chevron","FaChevronDown","User","Name","Role","AccountMenu","open","setOpen","notificationstore","setNotifications","role","sex","TherapistIconMan","TherapistIcon","PatientIcon","PatientIconWoman","PatientOverlay","pageWrapper","TaskCard","Bold","StartButton","EditIcon","FaEdit","TodayTask","patient","title","pathname","task_id","shake","PageAnimation","uploadKeyframes","communicationApiUrl","telephonApiUrl","communicationApi","telephonApi","getSocketUrl","body","finished","counts","message","new_message","instigator_id","ChatStoreInstance","chat","showNotification","activeChat","newNumber","numberOfChats","Promise","all","fetchAndSetUser","initialized","chatId","chatService","userService","FlashMessage","Buttons","TrashIcon","FaTrashAlt","PrimaryButton","RedButton","Empty","SubTitle","Dashboard","assignments","setAssignments","chats","setChats","Loading","setLoading","setIndividuFinished","chatstore","ChatStore","individu_finished","ShowIndividuFinished","tasks","setRegistrationMessage","setPlanLength","plan_period","map","assignment","taken","task","index","key","style","marginTop","attendees","fullName","attendee","GetChatPartenerFullName","last","messages","instigatorId","GetCountNewMessages","state","finish","Message","IoIosClose","MobileFlex","TextFlex","GreenButton","FlexRow","deleteMessageFromInbox","delete","update","sendEmailNotification","status","sender_id","therapistEmail","sender","subject","template_name","template_content","isAddedAsPatientMessage","message_type","isEndedLinkMessage","isAcceptedMessage","isNewAssignmentMessage","isPlanNotification","displayedMessage","sender_name","primary","therapist_id","Inbox","setMessages","Document","Article","dangerouslySetInnerHTML","__html","content","setTherapist","loading","ResultStoreInstance","newResult","result","newRecording","recording","newDate","isRecording","FlexColumn","DoneButton","ButtonDiv","Description","MateriaalDetail","RStore","resultStore","startTime","setDocument","isExercise","setIsExercise","exercise","setExercise","match","clearRecording","d","description","DisciplineStoreInstance","newDisciplines","disciplines","discipline_name","discipline","x","subdisciplines","newInitialized","Disciplines","DisciplineStore","defaultValue","default","Subdisciplines","getSubdisciplines","subDiscipline","LanguageStoreInstance","newLanguages","languages","language_code","filter","pop","Languages","LanguageStore","SearchWrapper","SearchBox","FaSearch","SearchBar","currentSearch","handleSearch","onKeyDown","TagSelect","keywords","setKeywords","selectedTags","setSelectedTags","TagSelectStyle","control","styles","marginRight","marginBottom","minWidth","border","backgroundColor","color","boxSizing","boxShadow","borderRadius","outline","fontSize","minHeight","verticalAlign","setTags","lst","currentTags","y","isMulti","options","useLocalStorage","initialValue","item","storedValue","setStoredValue","FilterForm","FilterButton","FilterBox","Cols","FaFilter","Filter","tag","chosenText","setChosenText","getLanguage","filters","subdiscipline","tags","filterCallback","handleSubmit","useTags","component","hideDiscipline","dateConverter","today","dd","String","padStart","mm","yyyy","getFullYear","taskSelect","CardStyled","Details","SmallText","IconText","TagWrapper","Tag","TagText","AuthorInfo","LibraryCard","ActiveIcon","hoverText","info","Skilltraining","FillEx","Questionnaire","public","event","callBack","elems","querySelectorAll","call","el","remove","closest","handleCardClick","date_created","therapist_name","showType","push","IconArrowRight","FaAngleRight","IconArrowLeft","FaAngleLeft","IconDoubleArrowLeft","FaAngleDoubleLeft","IconDoubleArrowRight","FaAngleDoubleRight","PageNumber","PaginationWrapper","Pagination","pages","setPages","generateIndexList","index_list","i","totalPages","pageSlicer","currentPage","slice","pageForce","prevFunction","page","handlePageForce","nextFunction","Exercises","ExerciseWrapper","Material","exercisesToDisplay","setExercisesToDisplay","documentsToDisplay","setDocumentsToDisplay","start","end","pagination","setPagination","setTotalPages","setCurrentPage","langStore","setFilters","getFilterResults","getMaterial","onlyDocs","material","output","Array","from","ceil","total","handlePageChange","dir","filterData","selectCallback","MateriaalRaadplegen","FaArrowRight","PhoneNumber","InputPhone","RegisterForm","Half","ThreeFourth","OneFourth","FlexLeft","PhonePrefix","gegevensForm","telephone","isMan","setIsMan","SSN","socialSecurityNumber","dateOfBirth","TelephonePrefix","TelephoneNumber","streetName","street","houseNumber","number","zipCode","city","country","checked","setErrors","geslacht","flash","matches","oldpassword","newpassword","repeatnewpassword","test","parent","AccountNavigation","OneThird","TwoThird","MijnAccount","showFlash","setShowFlash","Li","li","iconWhiteSmall","iconWhite","iconSmall","icon","oneline","Ul","ul","select","Plan","PlanImage","SmallYear","CurrentPlanText","CustomPlan","PText","PlanText","NewPlan","MijnPlan","checkoutStep","setCheckoutStep","successMessage","setSuccessMessage","userPlan","setUserPlan","planStartDate","plan_start_date","afterPayment","onlyPublic","typeOfUser","freePlan","user_plans","planObj","dateActive","expireDate","PatientIconMale","PatientIconFemale","Progress","TaskTitle","Box","ProgressBarBox","Bar","width","Percentage","ProgressBar","progress","TaskCardFooterStats","Italic","InfoIcon","FaInfoCircle","CalendarIcon","FaCalendar","TaskCardFooter","firstDate","lastDate","dates","toLocaleDateString","TaskInAssignmentSmall","FlexBetween","AssignmentLargeCard","ProgBar","DeleteIcon","FlexStart","DatesText","TitleBold","AssignmentCard","sortedDates","setSortedDates","getSortedDates","sort","b","textTransform","margin","Opdrachten","assigns","setAssigns","reverse","GraphCard","Select","RightSelect","ButtonGroup","TaskButton","LabelColors","Labels","duration","ResultsGraph","myresults","results","setResults","xLabel","setXLabel","yLabel","setYLabel","dataSet","setDataSet","labelsArray","setLabelsArray","currentTask","setCurrentTask","resultProps","graphOptions","display","legend","position","hover","mode","intersect","tooltips","enabled","defaultFontFamily","scales","yAxes","ticks","beginAtZero","callback","gridLines","drawOnChartArea","xAxes","distribution","time","unit","tooltipFormat","min","max","plugins","zoom","speed","pan","setOptions","updateChart","labels","pointBackgroundColors","colorIndex","toLocaleString","dataObject","task_title","showLine","pointRadius","pointHoverRadius","pointBackgroundColor","borderColor","hidden","fill","tempOptions","datasets","taak","parseInt","NavItem","TaskDatesList","taskObjects","dates_firsttask","task_dates","myDate","dates_lasttask","ResultNavigation","assignment_id","assignment_title","UnAvailable","NotAvailableText","ResultatenDetail","GraphLoading","setGraphLoading","thisAssignment","setThisAssignment","activeGraph","handleClick","getAttribute","findIndex","activegraph","StopButton","Video","video","Canvas","canvas","VideoContainer","Recorder","replayVisible","setReplayVisible","buttonValue","setButtonValue","gridVisible","setGridVisible","overlayButtonValue","setOverlayButtonValue","canvasRef","useRef","previewRef","replayRef","resultstore","ResultStore","gridOptions","msg","stop","stream","getTracks","track","drawGridLines","current","srcObject","StartRecording","lengthInMS","recorder","MediaRecorder","stopBtn","setIsRecording","ondataavailable","delayInMS","stopped","reject","onstop","onerror","addEventListener","videoWidth","height","videoHeight","ctx","getContext","lineWidth","strokeStyle","beginPath","moveTo","lineTo","stroke","closePath","ref","controls","controlsList","autoplay","muted","preview","navigator","mediaDevices","getUserMedia","audio","facingMode","ideal","captureStream","mozCaptureStream","onloadedmetadata","play","onplaying","recordedChunks","recordedBlob","Blob","URL","createObjectURL","onRecordingComplete","Styled","PlayIcon","FaPlay","StopIcon","FaStop","BPMText","ButtonStart","ButtonStop","BPM","RangeDiv","Range","Metronoom","Audio","audioFile","intervalID","setIntervalID","rangeValue","setRangeValue","showPlay","setShowPlay","showStop","setShowStop","changeable","clearInterval","stopaudio","intervalId","setInterval","playaudio","Thing","ResetIcon","FaUndoAlt","Time","RoundList","ButtonReset","ButtonRound","Sec","FullWidth","Rounds","CreateTimer","MAXMIN","MAXSEC","MAXMILI","showTimeUp","setTimeUp","rounds","setRounds","timer","setTimer","showStart","setShowStart","minutes","seconds","mili","running","setState","updateState","handleStart","timerID","DagboekCard","Desc","TextBox","ButtonBox","FlexLabel","Fieldset","FlexCards","OptionsCard","QuestionElement","Dagboek","scores","setScores","openAnswers","setOpenAnswers","scaleAnswers","setScaleAnswers","allQuestions","setAllQuestions","showSucces","setShowSucces","isExample","setIsExample","isReview","setIsReview","shuffle","array","temporaryValue","randomIndex","currentIndex","floor","random","random_all","questions","question_types","concat","randQuestions","random_within_type","taskDescription","replace","dict","question","Totaalscore","maxTotaalScore","subscore","subtotaalscore","answer_possibility","max_score","fields","indexOf","redirectEnabled","endExercise","setFieldValue","autocomplete","str","scale","scale_possibilities","createScale","exerciseType","should_be_chrono","should_be_metronome","should_be_recorded","showRecorder","HandleRecording","STEMCard","NextIcon","NextIconPrimary","BackIconPrimary","BackIcon","BackText","Img","NextButton","CenterFlex","Stappenplan","activeStep","currentStep","setStep","activeMiniStep","miniStep","setCurrentMiniStep","goalIMG","setGoalIMG","goalVideo","setGoalVideo","prepIMG","setPrepIMG","prepVideo","setPrepVideo","medIMG","setMedIMG","compAudio","setCompAudio","compVideo","setCompVideo","questionUrls","setQuestionUrls","questionImgUrls","setQuestionImgUrls","questionVideoUrls","setQuestionVideoUrls","showEndRecorder","setShowEndRecorder","setCurrentStep","newStep","onStepChange","setMiniStep","newMiniStep","onMiniStepChange","getUrl","url","nextStep","preparation","isArray","text","goal","prevStep","nextMiniStep","prevMiniStep","FlexCardsId","OptionsCardId","isCommunicationComponent","add","media_complete_id","getRessource","audio_complete_id","video_complete_id","media_id","video_id","steps","step","audio_id","NextIconWhite","ListItem","UnorderedList","ScoreDiv","Score","Cue","FoutMessage","JuistMessage","InputTextBox","CenterDiv","StappenplanMetValidatie","setSteps","urls","setUrls","cueImgUrls","setCueImgUrls","cueVideoUrls","setCueVideoUrls","showCue","setShowCue","showCorrect","setShowCorrect","showFalse","setShowFalse","showFail","setShowFail","clickable","setClickable","score","setScore","amountClicked","setAmountClicked","answeredMiniStep","setAnsweredMiniStep","showAnswerBeforeNext","setShowAnswerBeforeNext","types","scoreObject","newlist","initQuestionsToSteps","qt","cue_media_id","cue_audio_id","cue_video_id","toResult","validateAnswer","answer","correctAnswer","trim","is_capital_sensitive","toLowerCase","is_punctuation_sensitive","found","newArr","attempts","answers","resultObject","toggleWarning","correct_answer","type_of_answer","answer_possibilities","cue_text","reward_system","Object","RecWrapper","ButtonBorder","TextCenter","defaultProps","Border","RecIcon","Timer","nextSeconds","timeLimit","getState","nextState","human","pad","defaultText","Component","Root","Countdown","updateNumber","nextNumber","timeout","countdownTime","ActionsWrapper","StartCamera","Record","Bottom","Actions","isVideoInputSupported","isInlineRecordingSupported","thereWasAnError","isCameraOn","streamIsReady","isConnecting","isRunningCountdown","isReplayingVideo","useVideoInput","onTurnOnCamera","onOpenVideoInput","onTurnOffCamera","onStartRecording","onStopRecording","onStopReplaying","onConfirm","shouldUseVideoInput","data-qa","renderContent","getContainer","container_name","BlobServiceClient","getContainerClient","blobToString","blob","fileReader","FileReader","onloadend","ev","readAsDataURL","getResourceUrl","file","resource_name","downloadOneFile","container","getBlobClient","download","blobResponse","FileSaver","blobBody","saveAs","createBlobInContainer","client","getBlockBlobClient","blobHTTPHeaders","blobContentType","uploadBrowserData","uploadOneFile","TaakDetail","exerciseComponent","setTaskDescriptions","GetRessource","formData","FormData","append","setRecording","BulletGreen","BulletOrange","BulletRed","ResultForm","regstore","day","month","year","setResult","clearResult","showScores","_boundary","recordingUrl","uploadFailed","setUploadFailed","SureOverlay","Modal","CloseLink","CloseLinkDiv","LoadSpinnerDiv","AreYouSure","setOverlay","HandleOverlay","HandleDelete","TherapistCard","BlueButton","NameDiv","CardLink","MyTherapists","therapists","setTherapists","receiverId","initiatorId","Therapeuten","SidebarTherapist","MateriaalAanmakenIcon","OnboardingCard","styling","ButtonBordered","OnboardingStep","backButtonDestination","backButton","nextButtonDestination","nextButton","PatientStoreInstance","BertieModal","OnboardingWrapper","OnboardingFlow","BertieIsVisible","setBertieIsVisibile","patientstore","patientStore","stepsAreVisible","setStepsAreVisible","users","bertie","setPatient","closeBertie","isOnboarded","previousStep","onboardingSteps","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","absolute","Bertie","TherapistOverlay","SwitchLabel","Slider","RoundSlider","SwitchInput","Switch","children","htmlFor","DocumentForm","documentForm","dataContent","setDataContent","published","editor","ClassicEditor","getData","cloudServices","tokenUrl","uploadUrl","DocumentAanmaken","DocumentAanpassen","UploadButton","UploadIcon","FaCloudUploadAlt","FileTarget","onDrop","useDrop","accept","NativeTypes","FILE","drop","monitor","collect","isOver","canDrop","isActive","FileFormStyle","SmallButton","ChoseFile","FileForm","fileAsDataTransfer","setFileAsDataTransfer","fileAsArray","setFileAsArray","filePreview","setFilePreview","setType","previewUrl","setPreviewUrl","fileName","setFileName","hasOwnProperty","setDescription","filesArray","dataTransferToArrayConverter","getFilePreview","file_url","file_name","fileType","dataTransfer","handleFileDrop","useCallback","files","changeSelectedFile","newFile","fileData","DataTransfer","thisItem","items","postFile","_","isValid","toolbar","onError","willEditorRestart","ui","view","element","notRequired","FileAanmaken","FileEditFormStyle","FileEditForm","fileUrl","setFileUrl","langauge","FileAanpassen","setFile","LogboekGraph","ScoresTitle","ScoreCard","OpenAnswCard","Question","Answer","Openanswertitle","VideoDiv","QABlock","Logboek","PatientStore","setTask","recordingLoad","setRecordingLoad","videoLoading","setVideoLoading","completedTask","getRecording","j","responseType","scaledAnswers","TemplateCard","MyTemplate","Author","PublishIcon","FaTelegramPlane","MyDocument","join","withRouter","MyDocuments","SelectFlex","OwnDocuments","documents","setDocuments","getDocuments","Documents","MyMedia","media","setMedia","MyMediaWrapper","OwnMedia","Files","mediaFile","MyExercise","username_private","created_at","MyExercises","OwnExercises","exercises","setExercises","private","getExercises","CardButton","CardButtonText","Plus","FaPlus","BufferIcon","FaBuffer","FileSignatureIcon","FaFileSignature","PhotoVideoIcon","FaPhotoVideo","CopyPasteIcon","FaPaste","PaintBrushIcon","FaPaintBrush","MyTemplates","MateriaalAanmaken","tempLoading","setTempLoading","isRequestExSubmit","exercisecreated","assignmentTemplates","mediaSelect","MediaCard","Unknown","card","showDescription","Media","mediaToDisplay","setMediaToDisplay","getMedia","refresh","AdminList","createBertie","dummyUser","uuid","paid","verified","dummyDetails","medicalDiagnosis","therapyPlan","paramedicalDiagnosis","helpRequest","personality","traject","patch","tasktype","frequency","category","traject_id","createBertieAfasie","createBertieDysfonie","createBertieDysfagie","createBertieEmpty","createBertieEN","setSuccess","bertieType","setBertieType","bertieName","setBertieName","createBerties","Duration","SubText","TherapistPlans","setValue","setPlans","TherapistIconMale","TherapistIconFemale","selectedPlan","setSelectedPlan","userPlans","setUserPlans","setPlanId","OpdrachtStoreInstance","taskObject","frequencyparam1","frequencyparam2","taskType","shedule","object","taskArray","splice","newOefeningen","oefeningen","titleInput","newExercise","selectedExercise","selectedExerciseTitle","newType","selectedType","newTitle","isFinishedCreating","CreateAssignment","Content","Third","SelectionOverlay","tempChosen","setTempChosen","setFilterData","close","setChosenElement","DeleteButton","TaskInAssignment","OpdrachtStore","removeFromArray","TitleField","TaskForm","TaskCards","FlexCenter","InputNumber","TextR","TemplateForm","showSelection","setShowSelection","chosenElement","privateExercises","setPrivateExercises","privateDocs","setPrivateDocs","setAssignment","taskComponents","clearArray","assignmentsTemplate","createObject","addToArray","cancel","handleSwitch","resetForm","positive","copy","setIsFinishedCreating","FlexLinks","OpdrachtAanmaken","newTemplate","setNewTemplate","templates","setTemplates","chosenOne","setChosenOne","editExisting","setEditExisting","handleNav","handleChange","template","OpdrachtAanpassen","PatientNavigation","SideBar","Main","Avatar","Line","EditButton","PrintIcon","FaPrint","EditField","PatientDetail","details","setDetails","isInEditModus","edit","setEdit","bertieEmail","setBertieEmail","bertiePassword","BertieIcon","isBertie","followUp","endEvaluation","print","LogboekCard","Day","DateTitle","logs","setLogs","durationTask","NoMobile","PatientResultaat","patientLoading","setPatientLoading","TrajectStoreInstance","trajectObject","chosenCategory","chosenTrajectId","trajectArray","Calendar","forwardRef","setDates","useImperativeHandle","clearDays","canChangeMonth","disabledDays","selectedDays","localeUtils","MomentLocaleUtils","locale","onDayClick","modifiers","prevDates","selected","selectedIndex","selectedDay","DateUtils","isSameDay","Page","Navigation","PageButton","N","pageSize","totalChildren","React","Children","count","childrenArray","chunk","toArray","changePage","newPage","size","DateInput","DateInputSpan","StyledDayPickerInput","DayPickerInput","DateRangePicker","setHours","setFrom","setTo","toInput","showFromMonth","dateFrom","dateTo","getDayPicker","showMonth","format","formatDate","parseDate","dayPickerProps","after","before","toMonth","numberOfMonths","getInput","onDayChange","fromMonth","LeftDiv","RightDiv","CalendarDiv","Sheduler","useRegularShedule","setUseRegularShedule","dateRange","setDateRange","setMin","calendarRef","getAllDates","sendShedule","resetShedule","handlePermitAddTask","getNumberDates","reduce","getWeekdays","week","getDay","days","arr","dt","getDaysArray","filteredDates","allDates","tempDates","dateTime","weekday","handleFrequencyChange","CreateButton","trajStore","TrajectStore","setResetShedule","setShedule","btnToggleAdd","setBtnToggleAdd","btnToggleAddTask","setBtnToggleAddTask","viewScheduler","setViewScheduler","setTitleInput","c","switch","clearTitle","patientEmail","DatumField","PatientExistingAssignment","opdrachtStore","setStart","CreateTask","trajectStore","TitleContainer","bold","CaretDown","FaCaretDown","CaretRight","FaCaretRight","Collapsible","CollapsibleTitle","ChevronDown","ChevronLeft","FaChevronLeft","TaskContainer","TrajectIcon","FaTasks","StethoscopeIcon","FaStethoscope","BriefcaseMed","FaBriefcaseMedical","Separator","TrajectDetails","viewTraject","setViewTraject","AssignmentInfo","openOverlay","patient_id","openAssignmentOverlay","setChosenCategory","setChosenTrajectId","hasContent","deleteTraject","OverlayTraject","OverlayCardTraject","OverlayAssignment","OverlayCardAssignment","PatientTaak","showOverlayTraject","setShowOverlayTraject","showAssignmentOverlay","setShowAssignmentOverlay","trajects","setTrajects","newAssignment","setNewAssignment","clearInputs","hideOverlayTraject","handleCloseAssignment","DisplayAssignmentOverlay","choice","Info","CenterBox","Diagnose","TaskIcon","ResultIcon","FaBook","PhoneIcon","FaPhone","ColumnTopBottom","Assignments","DeleteLink","PatientCard","percentage","Patients","Therapie","showOverlay","setShowOverlay","flashContent","setFlashContent","isError","setIsError","patients","setPatients","filteredPatients","setFilteredPatients","createDummyAccount","getPatients","filtered","includes","Succes","NoUserError","NoPatientError","AlreadyLinkedError","HelpdeskForm","bericht","HelpdeskT","HelpdeskP","GoBack","BackButton","isExampleEx","review","EndExercise","getResource","captureException","err","Sentry","scope","setExtras","ErrorBoundary","errorInfo","theme","colors","blue","grey","orange","breakpoints","space","fontSizes","extendedTheme","mediaQueries","medium","primaryLight","primaryDark","greyLight","greyDark","successLight","successDark","textColor","titleColor","components","compose","typography","flexbox","FontAwesomeIcon","addHover","css","propTypes","PropTypes","bool","mr","faArrowLeft","AuthenticationStoreInstance","redirectToLogin","LibraryStoreInstance","activeMediaId","activeDocumentId","activeExerciseId","activeExerciseResult","stepNumber","videoCallConnection","localStream","initializeVideoCallConnection","Peer","host","path","secure","debug","on","videoCallConnectionId","initializeLocalVideoStream","hasAudio","initializeScreenShareStream","getDisplayMedia","addTrack","initializeWebsocketConnection","socket","io","connect","transports","upgrade","emit","setRedirectToLogin","CommunicationStoreInstance","showActiveCallBanner","setIsCallFinished","setActiveMediaId","setActiveDocumentId","setActiveMiniStep","setActiveStep","setActiveExerciseResult","setActiveExerciseId","setNumberOfChats","setActiveChat","settings","setSettings","mousePos","setMousePosition","getVideoCallConnection","getLocalStream","stopLocalStream","getVideoTracks","destroyVideoConnection","destroy","isActiveCallBannerShown","isInCall","activeCall","callService","communicationService","connected","setActiveCall","filterCutoff","sampleRate","fftSize","calibrationDisplay","isCallFinished","jitterDisplay","spectrogramDisplay","spectrogramDim","shimmerDisplay","fundamentalDisplay","intensityDisplay","hnrDisplay","recorderDisplay","s","setSettingsChanged","settingsChanged","pos","mousePosition","setMouseChanged","mouseChanged","ButtonContainer","left","show","HangupCallButton","clickCallbacks","muteAudio","muteVideo","activeScreenShare","activeMouseShare","bottom","px","py","bg","faSlideshare","faPhoneAlt","transform","rotate","right","faMicrophoneSlash","faMicrophone","faVideoSlash","faVideo","useInterval","delay","savedCallback","StopWatchContainer","StopWatch","setSeconds","faClock","moment","hour","minute","second","GraphContainer","GraphDrawer","requestRef","fps","lineTension","pointDot","setData","hasRemoteStream","initializeAudioAnalyser","requestAnimationFrame","runSpectrum","cancelAnimationFrame","plotData","freq","dataset","newState","elements","point","radius","maintainAspectRatio","yMin","yMax","scaleLabel","labelString","autoSkip","maxTicksLimit","autoCorrelate","buf","SIZE","rms","val","sqrt","r1","r2","abs","maxval","maxpos","T0","x1","x2","x3","calculateCorrelation","require","AudioRecorder","audioType","audioSrc","audioProps","timeslice","startCallback","pauseCallback","stopCallback","onRecordCallback","errorCallback","controlAudio","recordButtonStart","recordButtonPause","AudioAnalyser","changeScheme","spectro","spectrogram","AnalyserContainer","SliderContainer","fundamentalCurrent","fundamentalSum","fundamentalArray","fundamentalMean","hnrCurrent","hnrSum","hnrArray","hnrMean","jitterCurrent","jitterSum","jitterArray","jitterMean","shimmerCurrent","shimmerSum","shimmerArray","shimmerMean","intensityCurrent","intensitySum","intensityArray","intensityMean","interval","resetResults","enable","AudioAnalyzer","communicationStore","CommunicationStore","audioContext","AudioContext","webkitAudioContext","audioData","createAnalyser","audioDataPre","gainNode","createGain","dest","createMediaStreamDestination","mediaRecorder","chunks","createMediaStreamSource","lowpass","createBiquadFilter","smoothingTimeConstant","connectSource","getHnr","bufferLength","frequencyBinCount","amplitudeArray","Float32Array","getFloatTimeDomainData","hnr","newbuf","newbufT","correlation","string","decimals","log10","autoCorrelateHnr","averagingShimmerArray","averagingLoop","getShimmer","shimmerVal","averagedBuffer","currentPitch","sampleJump","availablePeakCount","peakLocations","peakHeights","o","peakDiff","peakDiffSum","peakDiffAvg","peakSum","getShimmerValues","shimmerValAvg","getJitter","jitterVal","distanceBetweenPeaks","peakDistanceDifferences","peakDistanceDiffSum","peaKDistanceDiffAvg","distanceBetweenPeaksSum","getJitterValues","evt","fileURL","fileLink","createElement","click","gain","setSpectrogramDisplay","setJitterDisplay","setShimmerDisplay","setIntensityDisplay","setHnrDisplay","setRecorderDisplay","setFundamentalDisplay","setFilterCutoff","spectrumCanvas","opacity","dimSpectrum","frozenState","setFreezeState","freezeButtonPress","prevState","pause","class","faVolumeDown","faVolumeUp","loudness","sumOfSquares","vRms","intensityDb","getLoudness","peak","peakValue","getPeak","getRms","fundamental0","getFrequency","jitter","shimmer","requestData","preload","autobuffer","toDataURL","spectrumLink","spectrumDownloadButtonPress","onMouseMove","GetCursorPosition","mediaId","callId","documentId","exerciseId","Exercise","onEnd","libraryStore","LibraryStore","sendStepChange","libraryService","sendMiniStepChange","ExercisePlaceHolder","ScoreContainer","ColoredBullet","Scrollable","ExerciseContainer","showSelectExerciseButton","isPatient","showExerciseOverlay","setShowExerciseOverlay","isLibraryItemChosen","setLibraryItemChosen","Fragment","libraryItem","sendSelectedDocumentToPatient","flexDirection","alignItems","mt","mb","ErrorMessage","ModalFooterContainer","SettingsForm","form","HelpButton","AllSettingsContainer","SingleSettingContainer","isFirefox","InstallTrigger","SettingsModal","setStateFilterCutoff","setStateSampleRate","setStateFftSize","customSettings","customSettingsDisplay","setCustomSettingsDisplay","setCalibrationDisplay","useForm","defaultValues","register","CustomWidthTooltip","Tooltip","classes","popper","tooltipClasses","tooltip","maxWidth","modalTitle","ModalTitle","fontWeight","Typography","variant","faQuestionCircle","footer","setFftSize","pow","setSampleRate","setSpectrogramDim","ml","isOpen","isModalOpen","onClose","maxContentHeight","checkAccountIsExpired","unchecked","prev","handleCalibrationCheck","handleIntensityCheck","handleFundamentalCheck","handleJitterCheck","handleShimmerCheck","handleHnrCheck","handleSpectrogramCheck","handleRecorderCheck","handleCustomSettingsCheck","handleFilterValueChange","handleFftSizeValueChange","handleSampleRateValueChange","VideoCallPageContainer","ExerciseAndCallBlock","ArtvaResultBlock","CallContainer","MainVideoContainer","MainVideo","PlaceholderContainer","PlaceholderImage","SmallIconsOwn","SmallIconOwn","SmallIconsPartner","SmallIconPartner","BigIconPartner","top","ColorFade","SmallVideo","BackButtonContainer","CloseModalFooterContainer","HeaderContainer","SettingsButton","VideoCallPage","initiatorInfo","setInitiatorInfo","receiverInfo","setReceiverInfo","callStarted","setCallStarted","showCallButtons","setShowCallButtons","isCloseModalOpen","setIsCloseModalOpen","exerciseStore","ExerciseStore","setStream","isSettingsModalOpen","setIsSettingsModalOpen","isVideoSwitched","setVideoSwitched","isAudioMuted","setIsAudioMuted","isVideoMuted","setIsVideoMuted","isScreenShared","setIsScreenShared","isPartnerAudioMuted","setIsPartnerAudioMuted","isPartnerVideoMuted","setIsPartnerVideoMuted","isPartnerMouseShared","setIsPartnerMouseShared","isPartnerScreenShared","setIsPartnerScreenShared","isErrorModalOpen","setIsErrorModalOpen","peerConnection","setPeerConnection","setIsInCall","initiator","newPos","mouseY","screenHeight","documentElement","clientHeight","mouseX","screenWidth","clientWidth","shareMouse","shareScreen","activeCallsPromise","finishActiveCall","fetchReceiverInfo","receiverUserInfo","fetchInitiatorInfo","initiatorUserInfo","setupOwnMediaStream","callOther","displayLocalVideoStream","displayRemoteVideoStream","getSenders","remoteStream","connectionId","getCalleeName","getFullName","startShare","replaceTrack","openCloseModal","backModalFooter","goBack","NoCameraModal","errorModalFooter","faCog","faMousePointer","onMouseEnter","onMouseLeave","getAudioTracks","autoPlay","placeholderImageSrc","smallVideoElement","mainVideoElement","smallVideoSrc","mainVideoSrc","newIsVideoSwitchedState","intensityCurrentIntetrval","innerHTML","artvaModule","getIntensityCurrent","intensityMeanIntetrval","getIntensityMean","fundamentalCurrentIntetrval","getFundamentalCurrent","fundamentalMeanIntetrval","getFundamentalMean","hnrCurrentIntetrval","getHnrCurrent","hnrMeanIntetrval","getHnrMean","shimmerCurrentIntetrval","getShimmerCurrent","shimmerMeanIntetrval","getShimmerMean","jitterCurrentIntetrval","getJitterCurrent","jitterMeanIntetrval","getJitterMean","ChatPageContainer","ChatBlock","MessagesContainer","MessageForm","MessageWrapper","myMessage","ChatPage","SetMessage","SetChat","SetAttendees","chatStore","chatPromise","SendMessage","AlwaysScrollToBottom","elementRef","scrollIntoView","behavior","SetViewed","message_date","preventDefault","onFocus","Highlight","CardContainer","CallIconContainer","CallIconCircle","DescriptionContainer","ActionContainer","ActiveCallNotification","hideActiveCallBanner","caller","getCallerName","Initialize","authenticationStore","AuthenticationStore","initialize","isRequired","PasswordCard","ResetPassword","back","ErrorHandler","errorOccurred","FileUploadStoreInstance","isUploading","SelectMedia","MediaSelectionOverlay","setRefresh","selection","setSelection","showFileForm","setShowFileForm","handleFileFormClose","ExcerciseForm","MultiLineGroup","Trash","FaTrash","Pencil","FaPencilAlt","SelectMediaButton","FileCard","StepsIcon","FaShoePrints","CogIcon","FaCog","BullHornIcon","FaBullhorn","MultimediaIcon","ExerciseForm","formSchema","setFormShema","showSecondOverlay","setShowSecondOverlay","showMediaOverlay","setShowMediaOverlay","questionTypeId","setQuestionTypeId","questionId","setQuestionId","stepId","setStepId","mediaInputLabel","setMediaInputLabel","fullValues","shouldBePrivate","usernamePrivate","questionTypes","questionType","answerpossibility","scalePossibilities","fieldnames","maxScore","fieldvalues","mediaComplete","audioComplete","videoComplete","cue","qaTypes","answerTypes","rewardSystems","validationShape","mediaValidationShape","asset","when","is","otherwise","formikRef","adaptValidation","autoFocus","getQuestionId","newValidation","of","exclusive","typeOfAnswer","answerPossibilities","rewardSystem","handleShowOverlay","newTypeId","newStepId","handleShowSecondOverlay","newQuestionId","handleHideOverlay","handleHideSecondOverlay","len","getElementsByName","showError","wantTouched","getIn","SetMediaInput","MediaSwitch","fProps","switchLabel","valuePath","switchName","assetName","innerRef","validateOnMount","keyCode","charAt","toUpperCase","arrayHelpers","answerType","answP","qaType","fieldname","fieldvalue","FlexAround","ExerciseCard","ExerciseExpl","ExIcon","iframe","VerticalSpace","oefeningAanvragen","kindOfExercise","setKindOfExercise","isAllreadyUploadingError","setIsAllreadyUploadingError","filesAsDataTransfer","setFilesAsDataTransfer","filesAsArray","setFilesAsArray","fileStore","fileUploadStore","autoScrollToForm","block","setSelectedForm","tagName","siblings","parentNode","childNodes","ExerciseIcon","requestId","setId","setFiles","setIsUploading","changeSelectedFiles","newFiles","allFiles","progressObject","handleDeleteFile","DiscountCard","CodeTag","NormalButton","CodeInfo","DiscountText","PercentageText","CreateDiscountOverlay","FlexButtons","Active","Discounts","discounts","setDiscounts","allPlans","setAllPlans","loadingDiscounts","SetLoadingDiscounts","MonthsReduction","setMonthsReduction","active","amount_used","FlexCard","ExerciseRequests","requests","setRequests","redirectToId","setRedirectToId","setUsers","SendStatusEmailToTherapist","request","showMaterial","acceptRequest","UsersDownload","Admin","use","Backend","initReactI18next","init","lng","backend","loadPath","fallbackLng","ns","defaultNS","keySeparator","interpolation","escapeValue","formatSeparator","react","wait","MinimizedModal","FileName","CheckIcon","UploadingIcon","BackgroundUpload","fileProgress","modalIsVisible","setModalIsVisible","modalIsMinimized","setModalIsMinimized","onbeforeunload","backgroundPosition","uploadFiles","handleOpenModal","fileList","filename","Check","PlansWrapper","isSelected","UserType","SmallListIcon","handeChangeUserType","setIsTherapist","alt","FullName","TextError","UserName","firstNameIsValid","setFirstNameIsValid","lastNameIsValid","setLastNameIsValid","firstNameError","setFirstNameError","lastNameError","setLastNameError","validateForm","firstNameField","lastNameField","setFirstName","handleFirstNameChange","onKeyPress","setLastName","handleLastNameChange","Email","emailTaken","emailError","setEmailError","validateEmail","emailField","checkBox","handleEmailChange","setWantsMarketingEmails","countryCodes","PhoneNumberFields","Helper","Datalist","datalist","phonePrefix","setPhonePrefix","phonePrefixIsValid","setPhonePrefixIsValid","phoneNumberIsValid","setPhoneNumberIsValid","codes","handlePrefixChange","prefixField","validatePrefix","list","phoneField","validatePhoneNumber","handlePhoneNumberChange","InputDiv","EyeSlashIcon","FaEyeSlash","EyeIcon","FaEye","Password","passwordIsVisible","setPasswordIsVisible","passwordError","setPasswordError","validatePassword","handleEyeClick","passwordField","handlePasswordChange","RepeatPassword","repeatedPasswordValue","setRepeatedPasswordValue","repeatedPasswordError","setRepeatedPasswordError","option","Speciality","specilaity","setSpeciality","handleSpecialityChange","BlueLink","AcceptStatements","acceptedGeneralConditions","setAcceptedGeneralConditions","acceptedPrivacyStatement","setAcceptedPrivacyStatement","generalConditionsError","setGeneralConditionsError","privacyStatementError","setPrivacyStatementError","RegisterCard","CenteredWrapper","DefaultWrapper","BackDiv","BackArrow","Register","registrationStep","setRegistrationStep","invalidError","setInvalidError","isValidated","setIsValidated","emailIsTaken","setEmailIsTaken","loginRedirect","setLoginRedirect","dashboardRedirect","setDashboardRedirect","submitError","setSubmitError","statementError","setStatemenetError","stepIsBeforeSpeciality","individualTrack","individuTrack","verifiedPhone","triggerNextWithEnter","which","goToNextStep","checkIfEmailExists","setIsValidatedToTrue","SetIsValidatedToFalse","triggerNextWithEnterEmail","MediaDetail","mediaToShow","setMediaToShow","MessageIconContainer","MessageIconCircle","ChatNotification","setChat","removeNotification","faEnvelope","getMessageSender","CallbackSwitch","setChecked","ExerciseEditForm","nullable","is_private","question_type","field","skipUpload","EditExercise","V2Frame","frameBorder","onLoad","TherapistRoute","rest","PatientRoute","AdminRoute","App","languageStore","disciplineStore","setLanguages","setInitialized","setDisciplines","getDisciplines","root","childeren","DndProvider","HTML5Backend","fallback","exact","login2","resetPassword","taakDetailT","dashboard","materiaalDetail","materiaalRaadplegen","mijnAccount","mijnPlan","opdrachten","resultatenDetail","taakDetail","MediaDetailP","DashboardT","inboxT","MateriaalDetailT","MateriaalRaadplegenT","opdrachtAanpassen","patientDetail","patientResultaat","LogboekDetail","patientTaak","AppInsightsContext","Provider","appInsightsContextProvidor","Boolean","hostname","dsn","ReactDOM","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.ca0676bc.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/patient-icon-woman.87adad28.png\";","module.exports = __webpack_public_path__ + \"static/media/bertie.aad42fa6.png\";","module.exports = __webpack_public_path__ + \"static/media/telephon-logo.4b6b1a51.png\";","module.exports = __webpack_public_path__ + \"static/media/helpdesk-icon.3cd4073f.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/patient-account-icon.ccbe2416.png\";","module.exports = __webpack_public_path__ + \"static/media/patient-overzicht-icon.5585cdde.png\";","module.exports = __webpack_public_path__ + \"static/media/patient-materiaalraadplegen-icon.45aaaf69.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAODSURBVHgBzZhfctMwEMY/iZbhMdxANyA9QZ0TtMAB2p6g4QRNT9D0BIQLQHqCOK8wTNIT4CPkkRmoxW4sO2vX/+2kfDNObGUl/bIrySsp9KDzxWoA/B5ET28289HJBj1JoaEimL9D6NdnyoYeFRm6Bjmma2p8HdpwCeh5W+jagAymNa6txbgAqKqjWWhxS6BBlW3khCcPeLU+qmMcg9HVGCyWBS6V2np7hPL+hmS3IDjuyz+qYfyNwEzOzz6VP/I3XQFdcQgH0RVSXX1G9x5qageXOMIrBPy4XF1QSGaZ4g1B3dP3tMaY8tmOOjXckVY45RCjPhyor9vcMfhhubqhHyeyzI2hT33O0Co46mvyDJA8d00gU1HEXmOwGfagMji+VxljQ8a/kIYbkfEae1AVHEvLCs4YwvhF4VKAPO6A3Wx1YX1ROJZyFYyrYFzh7Kt3coUXhmPFHvQgvFe2HBwSLgGkSjdxAXuvzuvoEHBbQK6ItPfu8Z/AbQEJyRPPQd8TowtcBKhencYPKno91ej0h+c83zvc+eL7MMpmHKCCNfED5W6PqBAtR3dKHS2o45VbmnqDi9o+XnHbMSRPErMz0ZXhDa0yosNJHmTbsLpcE45pGAM2y/Gs5SVoUwTZdcxlVZmwZsWTiCBGEsJBIgzx0Ccciz0o0qenWt5kSH5PI+PJLnByYjht29Y2BagMaioPEt08ZzLPAX+QB1UyMbTS79BABZBtwyqXrWTrqmGflknD5Gk0lIAMOsDx+/ZUPO2clllaBjQWPLSDPKHrbdsJQeuxF99bGz7E95oa9CFCRCv3BVqIQ9J2v0JOuUR6PZ4nd/xBxEmCwPtXtxM7mGQ2RfJlNuXyQT2F8CJV+IwDiTdpSGfyqVx0C8ihkV4kUTLwc4w9iyMld5CUrMzdkEsDuls2DBJjpW/qZCxd4LKbNN53Z+0SwMiLeA9xhMEN7AMyuwdiuU1agCJAB8nLhfwXDrK/cItkwgg4XjunefaqoJFJZmY1Oj4raDM+JZvIcnr+Qm1eFtVTJQ2OCfIup0Ij0LJzRT6IonZKo6MqGn82VoR8q+gtFP6hV2UYUCYkFunjISce7vhtiOc556YsrLUBHSQ3Ps6GvIP4XPGqbgSaHAEb+uKxyS91g2ba8IYsjELqN6nY+BCd5RKKc4Ll9CwvhKzAQXG2tP9D9DK5YZBA9nky8Q9LMx/wVGHFFAAAAABJRU5ErkJggg==\"","module.exports = __webpack_public_path__ + \"static/media/exercise-icon.bd32757e.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAT5QTFRF////mczM/5mZTYDM5k1m6urqO3bE2DtOj6/P34+fgJzG1YCOKGu81yhDjKbM2YyZ7OzsfaTU4n2QaZbN4ml9UYfJ4FFo7+/v8PDw7+/vWIrI4Fhwc53P4nOISoPF30pkXpDL4l538PDwVIrK4FRt7+/vaZfO4ml/Z5bO4md+S4PH30tnSoLH4EplR4DG30djQH3F3kBeQn7ETITG30Je30xm8PDw8PDwRYDF30VhOHfCO3nD3ThW3ztZ8PDwMHHAO3nC3TBP3jtZO3nC3jtZOHbC3jhWK26/3CtLPXnC3j1ZJmq+3CZH8PDwLXDA3C1O8PDwGGK6GGK72hg7Dlu3FmG62g4z2xY6Dly32g4zCVi3DVq3D1u42Qku2Q0y2Q8z8PDwAFK0AlO0Bla1HWW72AAn2AIp2AYs2x0/8PDw/0mxfAAAAGF0Uk5TAAUFCgoMDQ0QEBISExMUFBs1NT09QkJOaHB0dHp6f3+FhYqMjKSnp6ioqamsrK2ttLS2tra2tr7Q0NXV1dXY5ubm5uzs7e3u7vDw8vLy8/P4+vr6/Pz8/P39/v7+/v7+/koDz7kAAAFvSURBVFjDrdfXUgJBEAXQa8AcMAJmUcw5gBFzFkUxR1ptlf//AR/UEmQXdufS7/dUbZiebsCmPL5AMBSJxmLRSCgY8Hngqrz+cDyVUfGw3+s0XTF0kExZVPJwuNJBvGbsUt5SlvWp1+O1+fJ9FyL2gOpVf854w5ZIbkB1u9E+3/Ug+QF97rbLT4g4AVQnLeNFC+IU0MXi7HzJujgHdLM0C1gWN4Cu/s+PiDtARzPzbS9ugff29HzTvbgF9Kk5DdgR94Du/uV7xATQ3t982ZkZkCj/AabEDNDp73zVjSlwWw0AGBBTQAcBACfmwCkAtIg5oK0AZhhgDsAeA+wDda8M8FGPDmEA7cQsB8xjiQNWsMYBGzjigGOcc0ACdxzwyAP0I9Avkf6M9I9E/8r0YaKPM91Q+JZGN1W6rfMXC3210Zcrf73TAwY/4vBDFj3m8YMmP+rywzY97vMLRwFWHn7p4te+Aiye/OpbgOXb3fr/BZ9C9PPQVNwdAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAMNQTFRF/////wAA1QAr2wAk3wAg/+M5zAAz3wAg1gAp2gAm1gAp/9xG1wAo/9xD2QAm2QAm2QAm2AAn2QAm1wAo/9lF1wAo2AAn1wAo2AAn/9pF2AAn1wAo/9tD1wAo2AAn2QAm2AAn/9pE2AAn2AAn/9pF2g8p2AAn2AAn/9pE2AAn/9pE2AAn2AAn2ggo2goo2AAn2AAn2w0p2AAn2w8p2hIp/9pE2AAn2xQp/9pE2AAn2xYq3Rgr2AAn2AAn3Boq3Rsr/9pEqEhhzwAAAD10Uk5TAAIGBwgJChAZIiwsP0hJUVdbXmBzdHd6fIKElJuho62xsba4usDDxcjM3uHl6Ovt7u7w8fT09ff3+Pr8/UDXTegAAAFRSURBVFjDrZfXdsJAEEMFmN47mN6LKabXAf7/q/KQ5AQCBq/l+y4dl90ZCbBAi5XqnZGx3RqjTr0U06BERO8f5IFDX4/YVWuZgbxkkLHzHAHdFEtMPfBJnzTkLUbyrTzclo+0w9b6xFJssExY6fNnscU5/1Luq4ltar5nvachCjQ8TwYVUaLyX18URYqP+pQok7rXh0x1AzN0Z9AUBzT/9GlxRPpXH5w7M5gHfwwK4pDCt947cWow8QIAsuKYLACgN50tVuvd8XS52uRyOu7Wq8Vs2gOA6I0gCiDHGOQAdBmDLuDfMwZ7P+I3ijjKnEEZVc6gihZn0MKQMxhizBmMseEMNrwB/Qr0R6R/I32Q6KNMXyb6OtMDhR9p9FClxzq/WOjVRi9Xfr3TAYOPOHzIomMeHzT5qMuHbTru84XDhcrDly6+9rlQPPnq60L5Vqv/X4XdBlZsqaQAAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAJNQTFRF/////wAA////YJ+/32CA6urqmarMlrfYep/V7+/vfaPR7+/v7+/vd6DS5YCQ8fHx6bvDeKHRSIHGToXH5oaX3jlXYJHMT4bI2ydIPnvD2x5BImi88PDw7+/w2hQ4E1+4AFK0AVO0BFS1UojIY5PNrsXg2AAn2Act4FJs5HiL5YeY5pCg6J6r67zF68PK7+/w8PDwMMdDPwAAACB0Uk5TAAEDCAgMDy4wTl5icHaKjpqgrq7M19zm6u/0+Pj5+/3LDBNJAAACUElEQVRYw7WX23aqQAyGo9aKZ8EDoiIBcURtJe//dPtCsEwmo3ZNd24n/7dgDskfAEt0+6PZerM/nfab9WzU78KvwpuvdkQ3VcWNaLeae++qP/0owwPpADpgFvmfb8g7QYKIEgARk6DzSj/eItoBiNvxU3kvTPE5ANOwZ9cPEsRXAMRkYNMP4/wdQB5PWpK8PSUq89eAvLyo5Yep/1gQNQhWQF5elFKLNte3lurcJNgAd/2ZphwwUUojWAC1nmjI9j++6AQZ8KOnWDuLXtJYKnMbQEtKmvchZIsygKWEjfubcrwE4B+ZPm51Z8s2iMrcBHA94rZ+WQGiQThywNHQIwbV+0/QJBAHkKnH5F4ffESZoAGuph7RBwCACC0EDVAIeowAALwMLQQGMPWYeQAwR7QQdICgR5wDwOqgx5GuRVF8c8A3EREdWfIKoLsjW+inIMauC31yAVAfRm6AEcxu1viqAV/2nBmslVOsYeMG2MDeDbCHkxvg5A5w/gXnTXQ+RueL5HyVnR+T83MWCgpV9UMvKEVRXKWCYpY0IqJzYXzBWSl1kUoaL6r3ZBMgETLPLOtVqgAQCJHZWOrEq7SJBsE3WtsjTT4FRqhaW6O5/iQJzdUkBLy9N1Kk9s4Jj/ZeG4xmgmgwdEI6ZhZHW5YtjpYSMpOl4y0mq5GkmSwYxOwHbTbvkRYzyz1kG2Q1mjVhwq3qVD8iu9W9E5aGYW8vtCN+YraJiBaSXV82L9kzu080bUsDQ2vy7sAx/F8jj/vQ5T72/cHg6T76/sHw/bvx/x9Vs/PMEyk+IAAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAASxQTFRF////AAAA//+AAAAA/9VVAAAA/9tJAAAA/99A4wAcAAAA/+ZNAAAA/99AAAAA/9ZHAAAA/9pEAAAA1gAp/9xGAAAA/9tF2AAnAAAA/9lCAAAA/9lFAAAA/9lDAAAA/9tDAAAA/9lEAAAA/9pF1wAoAAAA/9pEAAAA/9tFAAAA/9lFAAAA/9pE2AAnAAAA/9pEAAAA/9tD2AAnAAAA/9tEAAAA/9lDAAAA/9pEAAAA2AAn/9pEAAAA/9tFAAAA/9pE2QAmAAAA/9pEAAAA/9lFIwAG+bc/1wAoAAAA/9pE2AAnAAAA/9pEAAAA/9pEAAAA/9pEAAAA/9pEAAAA/9pE2AAnAAAA/9pE2AAnAAAA/9pEAAAA/9pEGwAF+r9AAAAAGwAF2AAn+r9A/9pEptxSpQAAAF90Uk5TAAICBgYHBwgICQoKEBAZGSIiLCwsPz9ISUlRUVdXW1teXmBgc3R0d3d6enx8goSElJSboaGjo62tsbGxtra4uLrDw8XFx8fIzMze4eHl5e3t7u7w8PT19ff4+P39/v6od0UFAAABvElEQVQYGaXBBz+yYRQH4L9Z2YTsma0iOyszKqOIzOO85/t/h1f4ofTUc9/nuuDE07OwtneWurtLne2tLfR4YKQrfPBARR4Owl1wyTN2RGUdjXlQXVM4Q44y4SZUMZCiilIDqKRjh6ra6YCjvhty4aYPDqaeyJWnKZTTsEKurTTgj5oNMrBRg1JLZGQJJebI0ByKDJGxIfzSliFjmTb82CILW/g2QlZG8KXliqxcteDTDFmawYe6C7J0UYeCCbI2gYKTlzdLLyd452cFP4AgKwQBxFkhDvjyrJD3IcAqAYRYJYQoq0QRY5UYEqySQJJVksixSg45VskhySpJJFglgRirxBBllShCrBJCgFUC8OVZIe8D4qwQBxBkhSAAPyv48e709Z+l11MUTIq1SRTUX4qly3p8mBVLs/jUei1WrlvxZVSsjOLbtljYxo/2rBjLtuOXYTE2jCLzYmgeJZbFyDJK1W6Kgc1a/NG4Kq6tNqKc6Wdx5XkaDvpvxYXbfjjq3JWqdjtRyWBaKkoPoormSFYcZSPNqM47fixlHY974VJ35PBRijweRrphxNu7uL5/nr6/T5/vry/2euHgP2zduk+2U2NOAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFDNDcxNzg4MEM3RTExRTZBN0RBODQzQUI2RDhGQjU5IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFDNDcxNzg5MEM3RTExRTZBN0RBODQzQUI2RDhGQjU5Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MUM0NzE3ODYwQzdFMTFFNkE3REE4NDNBQjZEOEZCNTkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MUM0NzE3ODcwQzdFMTFFNkE3REE4NDNBQjZEOEZCNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4YKFQKAAAD9UlEQVR42uSbWUhUURjHPycXBA3FVvMp0orKKJ+KslLoyUCIQiEqKtEiyBYKikKiIlqMDKM9LcKIKKEeAiNb6CFIW6RFxadsoc2i0nJU+v+559I0aTPOXMe59/zhhwzjvTPnP+ee851zvi9CyuaLpXJ3SFXOTslLm8tXLjAOTANTQBpIAUkgHkSrqzrBd/AJtIIm0AAegWbQ86WmVlqKisUVG2vp140U68V7zgILQBaYCGL8vDbV6/Uv8BLUgmvgHi0OVwNGgSWKqRbdM0bdixSrXnEBnAdvrPgAlwX3GAl2g8dgv4WN7018jPaqR4N/Rw+mAbx2DagDW5URodIIsAU8BGuD6cmBGjAZ1IByMEYGT8ngCLgJ0kNlwDI1GGVJ+GiO+k4rB9KACHAAVIAECT8NBafAITDEagNi1Oi7UcJfnC2qQKxVBrDxF0G+2EeLwCV/THD58T67fK7YTzmg0lcbfRmwD+SJfcWeUBqoAUtt8sz70jqwor8GTFDzq1N0WMUufhnAKeS4mlacojjVpih/DCgAmeI8zQRFvgwYBkrEudrhvWbxNmB9iBc1oRZ/4E19GTAcFIrztUrtXfxjABc5SRoYkOA5LZoGcHRcLvqIMU60pwEzwCSNDBgPZnsakCv6Kdc0gIFPtoYGcEMnkgaMVaGvbuIZRSoNmC5/Dih0EjdSM2hAuuirdJfqCroqjQakaGxAskuT6K8vJdKAeI0NiHNpOgOYinaJ5qIBnRq3v5MGfNPYgB804LPGBrTRgFcaG/CaBjRpbEATDWjQ2IAGGlCv6UzQBepoQAto1NAA5h8204BucEtDA5h76DYjwWoNDag2I0HqPniuWfe/62kA008rNTLgnBhpuH+dDFVoEhV+Bac9F0Om3oOTGhhwBrztzQCK+TQfHNx4puPv914Oi1cvKHGwAbs8f/3eDKBOqFnBaXogRm6z+DKAIWKhw/YJ2lWb3P4YQD0TI73MKWLmy5Pe3vjfnuBZMdLL7K6j6rGW/hpAMVHyso0bf9VXT/ZlABdKzKa4bsPG3xCjfqkrGAOoDrBYjOxru+gKWKgGPwnWANOEfJuMCeXqB2v355/7czDSI0YxQkGYTpEsvFwtRhFVt78XBXIyxLKUTHM5GSZi4Ma6oWP9vTDQozHWCGarEfbdIDacofsGMfJ96gO5QTBngxxdy0CGWmB8DPGiplR9NoukAt7UteJwlCWsm8UokN6mosiB0guwXX0WY5TWYG9oZe0wv8wecFCNESyenidGUmJUEL2MO9a3xSievgN+WunoQFSPc6upRsH7MweJmWhm+TwrTRPFKGIwjXGrUbxN9SieVj0Vo0a40VcwE4x+CzAAPFa1K5b01L8AAAAASUVORK5CYIIxOTI1\"","module.exports = __webpack_public_path__ + \"static/media/patient-opdrachten-icon.77565e78.png\";","module.exports = __webpack_public_path__ + \"static/media/patient-resultaten-icon.070cd461.png\";","module.exports = __webpack_public_path__ + \"static/media/admin.d5b3a155.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAHYgAAB2IBOHqZ2wAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAkfSURBVHic7d1djFQHHYbx98zO7M7AQncXShlqC9sqkFLIAn5EpU2psbENuKW90PSiJsavVG9VLkxT9cI08cpGTTQGE70waQxhbUxNY9qANzUtXxUKialUU2gLZRe6s3zMzDleEFIjmxZnxvnPmff53S6z5+VinjmzM2cmUY4d1I7VUrpV0oSUrJbSVVIyKmlYUum///3KzQc0suJUt2f2r7mqVFsRvaJ/lGqnk32vLOvmIYvdPFgnHNbk+qb0aCJ9QUpvee8nmaQkbBeQR7kJwEHt2CI1v5tK27ibA53R8wE4rMn1qfRTKb2LR3igs3o2AM/rnuKIbvh+Kn1b8zyfB9C+ngzAIT30oUzN30n6dPQWoJ/1XAD2a/KOTM1nJd3ygf8YQFt6KgAHtP1jifSspLHoLYCDQvSAqw5o20cSFZ4Rd36ga3riDOBF7ViSKH1OUlffBAG4Cz8DyKSkrOxXklZGbwHchJ8BHNKD35KyyegdgKPQM4AjemC5lP0gcgPgLDQAl1V6UtJI5AbAWVgADuvh2xLpkajjAwgMQKrGd9QDf4MAnIUE4JDuWyge/YFwIQHItOAhSYsijg3gPVFPAR4MOi6A/9D1AGR6oiBld3f7uACu1fUA/E3775S0tNvHBXCtrgcgVWFdt48JYH4BAdCabh8TwPy6HoCCMj5HGugRAX8E5OU/oFcEvAyYDXf/mADm0/UAJErCP4MAwBXcGQFjBAAwRgAAYwQAMEYAAGMEADBGAABjBAAwRgAAYwQAMEYAAGN8LHewtFHU7Dv5/ELkC7UbNVcbjZ7RkuqSWZVL9egZ4QhAsMsXy/rHXz8aPaMl54YqmilXome0pDL4Ly0fIwA8BQCMEQDAGAEAjBEAwBgBAIwRAMAYAQCMEQDAGAEAjBEAwBgBAIwRAMAYAQCMcTVgsIFiQ4tvejt6Rkuy+piaaRI9oyVDpUb0hJ5AAIKVyhc1/vGXome0Zq4q1fi29zzjKQBgjAAAxggAYIwAAMYIAGCMAADGCABgjAAAxggAYIwAAMYIAGCMAADGuBgoh2rTo2peLkXP6JkvBx0sNXXzkvPRM3KJAOTQqaNrVTsbf8frlS8HHcoaBKBFPAUAjBEAwBgBAIwRAMAYAQCMEQDAGAEAjBEAwBgBAIwRAMAYAQCMEQDAGAEAjHE1YA4tHJ3WQLEePUNZY0zNNP4xpFLkiz5bRQByqHrHsegJV/DloLkXn28AYQgAYIwAAMYIAGCMAADGCABgjAAAxggAYIwAAMYIAGCMAADGCABgjAAAxggAYIwAAMYIAGCMAADGCABgjI8EC/L6yxs1c7IaPaMt54YqmilXome0ZVFySVvXvhY9IwxnAIAxAgAYIwCAMQIAGCMAgDECABgjAIAxAgAYIwCAMQIAGCMAgDECABgjAIAxAgAY43LgHLrhqUdV3jYRPUOL6w0trTeiZ2j2F/v05q9fjJ6RS5wBAMYIAGCMAADGCABgjAAAxggAYIwAAMYIAGCMAADGCABgjAAAxggAYIwAAMYIAGCMAADGCABgjAAAxggAYIwAAMYIAGCMAADGCABgjAAAxggAYIwAAMYIAGCMAADGCABgjAAAxggAYIwAAMYIAGCMAADGCABgjAAAxggAYIwAAMYIAGCMAADGCABgjAAAxggAYIwAAMYIAGCMAADGCABgjAAAxggAYIwAAMYIAGCMAADGCABgjAAAxggAYIwAAMYIAGCsGD0A/7v6/hPREyRJs2+eV+3kTPQMXTp6KnpCbhGAHJrbtVfatTd6hs4NVTRTrkTPQBt4CgAYIwCAMQIAGCMAgDECABgjAIAxAgAYIwCAMQIAGCMAgDECABgjAIAxAgAY42rAIAvHpqMntK1QXyLVo1e0Z/HQpegJoQhAkKXjJ7R0/ET0jPbMVaXaiugVaANPAQBjBAAwRgAAYwQAMEYAAGMEADBGAABjBAAwRgAAYwQAMEYAAGMEADBGAABjBAAwRgAAYwQAMEYAAGMEADBGAABjBAAwRgAAYwQAMEYAAGMEADBGAABjBAAwRgAAYwQAMNZXXw6aDJdVHL9RA8tHVKgMXvPzuhqazUZb+t0Dty/TwNhwuxP7SnLqggonL0TP6C1Zmg5Mn32jpdsml492eM0Hyn8AkkQLtm/Sgkc+pfKWNdLg+/2XvirvL4PurLReV/Nyzr8fvMOSQuHM8pXjt0bvuF65DkBpTVWjP/mSBjeuip4C5FJuA1C+d53GfvkVFRZVoqcAuZXLAJQ23Kolu76uZJ7n+QCuX+5eBUiGy1r6m8e48wMdkLsALPrmfRqojkTPAPpCvgIwWNTw17ZGrwD6Rq4CUL57LX/0AzooVwEY+sTt0ROAvpKrAAxUW3sXH4D5dT0AmbK01dsmw+VOTgHsBZwBJLOt3jI9fb6TQwB7XQ9AIr3b6m0br5/p5BTAXsAZQNbalVKSLv75SCeHAPYi/gh4vNUb1l99Q/Xjpzq5BbAW8BQgaeth/PyP9nRqCmCv6wFYr41HMumdVm9/4Y8HdfFPhzs5CbAVcAbwRJpIL7TzO84+tkv1Yyc7tAjwFfJGoEzZ7nZun757Qacnf6xL+451ahJgKSQAzSsBaPnlQElKp+d05otP6dzjT6s5XevQMsBLEnXgg5r8uaRvdOJ3FRZXVLl/QuXPbVBpdVUDN48qWTDUiV+N98FnAl4rKRTeXr5y/KboHdcrLACH9fBtqRrH1cVPJVq5+YBGVvAyYsfMVaXaiugV/aNUO53se2VZNw8ZdjHQBv3+NUm/jTo+gOCrAQeU7ZQ0E7kBcBYagPWaeiuTvhe5AXAW/nkAE9rzs0QJb+8DAoQHIJGyokpflnQiegvgJjwAkrROT59tKvuspLeitwBOeiIAkrRZU39PlW2TdDZ6C+CiZwIgSZs09VJThS2J9M/oLYCDngqAJG3W7lebyj6ZSXujtwD9rucCIEmbNHVyRuc+I2U/lMR7TYH/k54MgCRt1QuNCU09nkoTkp6P3gP0o54NwFWbtOfohPbcKxXukrJnovcA/aTnA3DVhHb/ZUJT26X0TklPivcNAG3r2pV4nTKhPxyRtFPSzpf1+Q8XldwjaaOk1Zm0StKYpEWSSmEjgZz4N5lfZCVrLOt1AAAAAElFTkSuQmCC\"","module.exports = __webpack_public_path__ + \"static/media/vaardigheidstraining.5136c501.svg\";","module.exports = __webpack_public_path__ + \"static/media/invuloefening.58a703cc.svg\";","module.exports = __webpack_public_path__ + \"static/media/vragenlijst.a3093e3f.svg\";","module.exports = __webpack_public_path__ + \"static/media/document.28ac557f.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJVSURBVHgBzZmNcaswDMfF3RuAEbzBYwQ2aDd42aDZAN4E7QZ0g3QD2gnaTkA2SDdQzSGKohhsGfuu/zsdCUj2L7aMP1JAAiFiaS8lff0qiuILEqkApQimsnZnrbZmYIHj+iB7s/aSEnoVzFpj7YJx6qwZRV33Qf4JwLj6gPoqVlf/x+dsLyeYulHq1donXc/W5i6c85GnQZCovh6WlKm3nP85WmD8ZS1OeRhaqbF28HWxaLlZ7Zpz44DrNGAaaeEeHK12gEzSwhkHXAWZpIKjgEE4/yq4RjgfIZNi4IxovQ4ySQ1HQQcRYCCDouAocMjdenvgKhGUfGBEw1HwkQUNkFi74KiAk7Z7rV8d0tIxcBRT8hvvLNj7arE+j8y/gbRwc9nDD6QopAY/4ElU2qSAozi8YXHe3C7EVXmzFy4Z4BYk7hwQa4C8wHtFYS6YPXCliK3mBwO7qZp/VyDVcKwsrp9Bon7NBEC2oBReT7cX/uDofKCHHGLhqIyOcfT8QS1+fQ0RwimHorcEuJVqoouyLbU24LZXUzjt1NYd8gMOzu5lDqVoRe8GOyHcQ1CKOVox25Kf1WlEnact51I0de4dndxm+FMLb99pWSBX4MJ6DG9H1AUTdjdevzNntZoyXPk4qsMdoxuXUzKpZ4gRXs8w0aC4fXz35IsvPIUbmI7DjOPxKywnqGdYjt9GVRRzR5/lDDP6/renrl5Ar6gFWkynHnNMBDiNvGe8TfAQjd07rppqUEp9iE6wtb2Mi9u/4O7CUWeY0mDXIXoUoBRe/w0BFuYMifQNXBlH3arPTZwAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAHKSURBVHgBpVTdUcJAEN6L4Z0OjBWY6IwvPkAqMGABYAViBYYKoAOgAYgVJDw4PjhjYgXGDmyAO78liSQxCQzszGU3e7vf7d+doBpy/LBNJB2Ixk6rIqKzyLOtuM5PVAAZQtAMYrfWSdB02bGe8rr7dTjYkGZoJeUjjMMULFCKelgXq64lmGPZWAtJBbctmFQ0F0oO/yLsr8NnGLsQYwZCWhEdQBlY6meLJM33rhC6DzFiJcB+jgHj2mpJTfRZLrKjwVivowlDcEMp+eDZ1/EpYEwawrtLRe9UsC2KIGWAB+VUueO8DgHjUXPWn5MkQiITnYnLkcDRwZpy9/dHhnFRctR//TjXqYa4QZhJn0epH4QmH0A1aRZSVmxUuF4JcQnYmXiUaA+YOLtktry9+kbKggfYTO5uNSgmYNwUGfpg8sEs68htAQ0ikCP8u1WgVfqM8mOXgIN6QfgF1kYUVlN9KsDa6d2nwk3BD6Pz5qoq9TrSkleJoxtngYjcaS4AeUT2djL/xMGWwdxsT5QMRzCcpBtzqTYvqG3s2TeR478ZRC2TtFaHnylKSlQA+weYnQ7G0Q6onoIULChvCGpICwzjIM2dVovx8ZpepF99TTKM6TrMIgAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEXSURBVHgBpVWBEYIwDGw3cAMZgREcgQ10A92AbsAIuoFuwAi6AW6AG8TE+x45CKXC3/1xSZpPGiJ6NwMi2vGjYhbK/RJ6798uFyxUMFtKozHyjsx67DwzeySJaCUFVKED8zYWhJig0846Opmly7/RUeUV0XmA84nZrRdDoJs4N4idEDhtFkPwjmDWVZNiOCBzaw2/vPFzjhg2oImG4GoItojVS52xHRDbpwR36J7UWCZilmBnXdkQNcVw7ldQG/3cS4FooMRKodgzGhU6CG4FyFo7VOjpj8V2Q/cdGcu99qd3n3SngmFp+Oqs/sSF1MELDbhivqUSEbuh4RMXXMY1JPFGabQyJivfp4T5UYIRb+aD/wI+c3lfYzpcF4CSR9IAAAAASUVORK5CYII=\"","module.exports = __webpack_public_path__ + \"static/media/metronome80.0bd3a818.wav\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/image.0b64ab3f.svg\";","module.exports = __webpack_public_path__ + \"static/media/audio.8f8f6edb.svg\";","module.exports = __webpack_public_path__ + \"static/media/video.587ef873.svg\";","module.exports = __webpack_public_path__ + \"static/media/unknown.068a3f6b.svg\";","module.exports = __webpack_public_path__ + \"static/media/video-call-placeholder.0a16455c.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAVxQTFRF////AAAA/wAAAAAA1QArAAAA2wAkAAAA3wAg/+M5AAAAzAAzAAAA3wAgAAAA1gApAAAA2gAmAAAA1gAp/9xGAAAA1wAo/9xDAAAA2QAmAAAA2QAmAAAA2QAmAAAA2AAnAAAA2QAmAAAA1wAo/9lFAAAA1wAoAAAA2AAnAAAA1wAoAAAA2AAn/9pFAAAA2AAnAAAA1wAo/9tDAAAA1wAoAAAA2AAnAAAA2QAmAAAA2AAn/9pEAAAA2AAnAAAA2AAn/9pFEQ8E2g8pAAAA2AAnAAAA2AAn/9pEAAAA2AAn/9pEAAAA2AAnAAAA2AAnCQgC2ggoDAoD2gooAAAA2AAnAAAADw0E2AAn2w0pAAAA2AAnEg8E2w8pFRIF2hIp/9pEAAAA2AAnGBQG2xQp/9pEAAAA2AAnGxYH2xYqHBgI3RgrAAAA2AAnAAAAHxoIHxsI2AAn3Boq3Rsr/9pEUvsZjwAAAG10Uk5TAAICBgYHBwgICQoKEBAZGSIiLCwsPz9ISUlRUVdXW1teXmBgc3R0d3d6enx8goSElJSboaGjo62tsbGxtra4uLrAwMPDxcXIzMze4eHl5ejo6+vt7e7u7u7w8PHx9PT09fX39/f4+Pr6/Pz9/UR+fXQAAAGaSURBVFjDrddnU8JAEAbgs4O9oNgrdrFgFxWsKGAXsWPB7uoq/39GEylBDiV52e/vM5O73N2uEGnKbLU7nB5vKOT1OB12q1noKovNHY4kVdhts2SazutcikhruSs/g3hp7xbtyIFd3u4r+y/fekBEe3Jgn5kP2/6Ml8+SUkdy4JiVmqtIn28OqHk6kwPnKsDBlnT5forWhRy45GgNSOM5o7E83ciB2xjAY7mp+YLpeJ4e5MBjHOCZwhRgPJGnJznwnAB44ne+W5OnNznwoQG4Jzlf/6IF3uXApxZ4bdDmK09IL8CnVRpgnvQDvJDIN5IRgJti+WKfMcBfEgWGyRjAIz/5ooBRIGhSgXYyCnCHCqwZB9aVfDUZB7hGtoR6AGUZVxBg9XsP7hDg3iRqCQG4TgxiwJCYxIApsYgBLrGBAZvChwF+cYUB1zgAfwK8iPA2wj8S/CvDhwk+zvCFgl9p8KUKX+v4wwI/bfDjij/vcIOBtzh4kwW3eXijibe6eLMNt/v4wJGFkQcfuvCxLwuDJz76ZmH41jf+fwEveHRmiWZUvgAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAaUAAAB4CAMAAABl2x3ZAAAA2FBMVEX///8ROYQAneEWLG8Al+AAmeAAm+AALX8AI3wAMIL3+PsAKH0SNn4AIXuRn8CNzPAAM4EAK34AMoEXJWqu2fUOaaoJNoLi8/vs7/UAouY5VpUwq+fJ5/nP1eO4wNXq9/zf4uwAG3rw8/jJ0ODa7/pec6V6irJsf6wVPoitt8+fqscUMHUfpeTa3+pzwexTaqCLmLpGsOgiRowXH2a+4vYyUZJIYZtwvuyw2/SJye8AF3id0/JTtemyutB+jrQKRYgPX6EKebwRU5ULdrkADXYGi89meagAleFRH1dNAAAPuklEQVR4nO1daWPauhIN1DZglwRI6oQsBEL2ZqFZCClpe9t72/z/f/TYbHRGI0syBJqHz8fgIOHxjM6cGclraxkyZMiQIUOGDBkyZMiQIUOGDBkyqODrsOwJZlhbf6yVkhGe3+12z9Yb15m5lgT/LghzOoRhWKkVgnKw+7297AmvJM6qWhuJ5ioUz9ePlj3n1UNgY6SxoVqdZU961XBQtrXSANVcFvcWim/WvjTyp/Llsie+UugU0lgplyuvL3vmq4TbSjor5VoXy576CuFOT8NVZmoueeqrgyMrHg6odJc9+ZXBdTG1lXLFxrJnvypopKJ4E2faXfbsVwXr6SPegOddL3v6K4Kz2gxWKnxf9vRXBOkp3gDh47KnvxrwU+a0EwRZJWMRaM5A8QYoN5f9A1YCs1C8oS9lousiMBPFG1jp27J/wEpgJoqXWWlB2J2F4g2slKkPi8Bs5CFXPEg1amNdicuL9s6cf6Ml9jeU6Pcftuc1TG8rRk9z6VFLcfs/JiO6rJzqjp62CipUq9Vi+W6ZHTD9VzcJTv3pYR7DvDjT73zdSL72gPelzx8M8HlgqyBNn8qO6tGIEJbKd0sLpa6XT4TnOfn+HIYRvtLVWOmCpXhGRhqhlmaC/KDEUMXucgLfvpNspJGhnKvjGYc5BCtpvPO0xN0hYyN9+FHXxVRuUCNeWaumW/NmRN9VGgfslOJ3i4CHwdUsdmw5/aOxkTb/qTsv1jM05JXhUhT3G03Am5OZ4GHwNBfnuBtmHvA2f9bz7pWtlscOypmptITuzC9mVsrnnZnY3pMwjHeVfO0OSx7MrXT/ezjInt0Ej4zZf+kk/W1Ii7qplXT3Nhl7opWekq+9ZjsmjY304XN9OIp7YzVBBa/kUF740nRotCyNnWmWmOcJVtJRPF5rNQ94v0ZWyr9aMR6LNs3a2Qw3IhWODShe5AKWMUTEIZAHDcVbZ6tL5gHv52S+VgyCH1ThTOlvRDr0zH1plpUJKJ6jechPOE5sQfEit3UOLWb4BwcNikOUy8WgILOK4qJFiGe0kutEYJJdN31yuwXpkubuPc5G8SYBbzDOlsUMz2HQoH19cD1Cu5OTvKyw6G70FzCG2zue4GHjSvIy3aqfAPFh0NEQn10hjK00YnjjgSxCno/koSp+dkonVDtNcw9mwBVYyRGTjA26ZHlfUg8jPgy6m8d3TBpb6WM9HsiCleKgpD/2lHhTbcFcHCmeV4cP+8RMM3Bx8WFwn5OvnY3ibf5bn45kPkEctER6xTAc5iq39ndgFiDFo0/5Hq5N6a3kA8XTMPrL2SheXRjJnO7goHThIft0Fu1LD+hLJBHcwqUpvZWObSgeW043pXj3P9NZCQel7S3EvRedMG2AHSiJI8lU+oQJ+L6jUdhY2dPUSj/q4u8xt1IXBN6giZ8SYYIGxLfGE1I8km4SYcIuTRQBFK+uuXgWrXVK8Ea/xzxhwlpJiTxIbfSlqrSTzW9/W+90Ouvf3kQwx5WHpq3bxEqSMubv9zaeB9jaT/YPoHgaprjDqnhmVrr/JLqSBXvAQcM78vEFWokExMbZ3TD7HSIoBreTeq7fjBGL6M2DGMpq4tFBu92eXDT5R5LTkn/YJx9jQHy4uXKiMrnjfIlSyO0Y0ycZtFaNCtpOT/E2Id7pvVYYFEKatO58R1cT+yp2OqWgJnp/pfjYHPz9KCgXI/w3Mdyfr/Gfil8VUfOyNb2mOB7oECkeZQekQujsTz863Mg7ooKa95z66OOrWL1wXmOrihfqFIxLtrJtZKXPMF2b/A4HrdIt1F0IwmEp/sA/bckKUqXVRvV2sglk56t41VdWZmrDNeXRNegskraAq5a47D+7soLkOVso2MV3CR4G0dYc2HK6GXkgaonOa5WD0n4+EoSnrnZRZbOGsNgE8l4YHxfiw9ewFMSvijYPa6M73k+keGsqiref5zXagQFENhezDeD7Os22m7KcvkmNZKM7Yg2/SDgAaYmoRtnUWVlR363dwjdGVgcZOQyZeaDQPHYlUk6nFK+vIA/PjqJyOFgInrk6EnyRbklPSfE2P0pPji4xE4D7papYM6eS1cBThvB31V1HQUM0e2R1TLuY3s4L8LbCRC7Ecjr5Vb5HAt7EiC/qkpS7JfKEWGR4sqB4R+m01vtf8mx0iZnwU2FQQvF8og9NNrH5d0lNR2DAqD8Qq/YF6dikHX4aWE4n6QXVhyZO8CWpIgWrVWx1q3I6q7XqHOn+37o0F4skHGv4KNNdn5MQHIyzpUfjHQdTq2PIo3x/rQtf2Zp4YBLF2yZGikTSF4sSfPQs50UH0ywWfGVbY6NfrmwkbeFeAIYi4SH3D06ltacw+lkn5rXdqdUb8Ai2SM50CbMIIqKp1lqPnyUON171ny0q8JHVITnWldP5A4iSbfSbsZHVsoTl9PCx293tDvFYKkoeM6bVF5LLh7VCtVrgqM+UzflAJauo6TbRoePzEIjWerUXIe/KJcCRDeVOWM8bZrUewyfiFegNy+mb95//4W1kpQ2TcnoYg5lLdehKUjNapRiedC4vO91AphSCoAQDkSrWI0qJsaNtEBI3heLJ9PPkE8/xXp77/ecXj8mfojoSltM1Szp7ZwbkYVPC/f2HH59+13kb2dX/2Ro+j+LIAcizFJZvI8LmXxapPwlkjrA8kUt24KPy1LIvCkbN/eYRDSddEp6zF8evnmTauO1AZOc61YZvXvx8/+MTwb8/f7t1pYnyVlKrzyXSPGqj579N0txzUUfYobyiJTyYFfF5EPcsHrTEfyn9mX5yZWylcfjYJmmuJ9bzfMorYpFB5PvacjqrtW4OXIZCM2NdRRgGNe7Fm7QfY+ZdvSXxAWNXmBM+ApFD1AvPGdFhDGO65o1XE1SMvD3ytBLXjBut8lymqwBbTq980tlEnrGFKykEXs5I44S22RL/WJDq6034PiD2KOtOKyTYWlEWfNO8Y3Kc0PpINqR0BFetOLbhphhNOZ3dnV4zj8zxOOY0XCXwyqgUxisMOESFOakFiCp2HMG6GwuGDQghVfE/Hgx9Kdpvgfsm8jINgJLslOKBipeinB7+snclq+L/d7N1qXDeHF3uQ6WCOwIEKCASbgx5E3P4IKxjumu2dWkQPCYLDOS5Dpf3gJUi2Q9spwtEnNYaMsKCBha50prh8aO1VvSEQ9SSdZ4hRNKINUNYeMPzyQRQdGiK/2C0dcmLN2wBd+BZwAsnMliV09ll6ae1kWy6Wmk5nUNYKJ/EQjnkwEW26CranTgbqMnjLWuYIgdY3dJvXfIGXDsuB6FPsFUikXPHFM+mnM4eQFSDZgYTI9ltipFS1FDE6BUNjx2hmCH6u+L8UTF7DfAjCK8jT0SRlX6jlKKCfbzh/vQbwRg3+rRHTJPjBh6R76cqp9dsjWTZRUMHDR53BXTPOg30FzE8SWXdMU6mhgzJ0ZfQjzRaglBkDXAwunXJnSpEQ7w897BeZ6BsC8HNy0d/fBXHSFNOv7Nbliw9SdqdXtbsqAB/VxzTIqxLUhPFOeEe6yg6kNN5iCan3UQG/ak80RWCW0zUt23K6XOgeI71zhCkeNpmOyAPtKw7hlgkq9INGkDTqxcoskpts0jxtK0ccLcVPiEEzdjbsGMyDcWzyGk9N8WZB0jxtMe2QW2Fv1q8RPI2qKBVbqFJNKSdgLScrqNFx3pfEr0ztuOGDcU7Z2RPc4rnuV6aLVY4KE/aBEBUljxlBLFAP6m/Kz7NgbDHRFtSTtfEIsyB+XVJZHNxPgXldE351OdUPEOKNzrjxWb3X4yWOFpY0V0OVmI5HpTz5ONJ+e0KI5vLG6MSy+ky0EqcUzzAChRRD5tyOrtRvKLqhRHguq/5tOcl4cJAKZkMJBuM9AD0IkpclQOK10o1dqrK5aULCJBscNIDUHk3TTn9giPi5+yy5DlTSvrytNFLv+cXBV79Pj8k7vIuGR+kOm4XjaqcxVgcyxD6PtDj5D5YIiBNy+k2u9O/M7GAp3je3tyOhEOBV+7UpyCZd5FkTE3sZuEUJEXIC5jcK3nrEgPSNE6C1yF2s8QKEh5ApCFgnKDGU7zZTnIBYDndYP85LvjETBfkpZNcQsVvWKhxS1zy1iUGpKkIk8cHImTwHZO6A4i4w94rPxkrzbARWwLGH4MTEEmXRC7oxiXzxi5dWdlTs9n+XZZcPtlRPKlLIu9exfFr/wttd43rSDcWFI99nw9L8XSh0wKknG5wtl5Dak0pP3YuGo3Ls4r89tYq1+fBSSxlVsUgu9P1HFYqGg4W8JutXq//VJdbkuPSgU05naV4bAnQ6sCNZNhSPFpfGv9bIQiCqvx3jratsSGPP4PKJxHK4PfQPsqkNq/X6J9mLqfnGCPZ7D7XgWxd+qP/D9LemAjFdnYp5IUh21tFKJ5Jt+6DRcckW05nK4cCuHJ6yGmts50vhsD0p2D09kfTs/SUqqDUwauQePGWm63GsjMprcRSvFTl9H84K6Xe4SsDm2nNjiJvt9R2qYABFMSelrSqCokXTwkwa+bYTjiJF9smFR2TmtWEpXhcOd2mjUuHbuLWJQXWlafpFXavxV+hIvaYc/Cr15qktZqdfdd7le/YxCz1fdgUE3dM2hxAxCV7PMWzq5gnghwTZbib5lSh8hQHJED8SKXd4nEJraZimMStS0r0FWZy98gpNmw5XROnzMvpBnmDKfCYKPMXbK23GMcPh69yF0kjo+KN0OG3V0jALNSYM/W4fYCe80R0wTi22ZTTLSje/Ig4yvBU7klAO0e5TlgddSKL+USJp4y4rrGiwxigiFO5JwHHV5KdXG8YgETSGMc2NJ0mTnHyFk/xzI8I0ONU2LpftjoGqlMNhNWlViyNTbzztRyDX+ZQj6WdDiL6whsNHNpLnIh+XrDTMGO6GcVy35ueIRBTbt8V/qhLRY211hmOgGNwtBPD8gxq/9ttsRwMUSyX/sTs8Gh6Hge/yp2A3EE7HQCHAuwmt/bw4o7O4xgeSfmyFc3EP44x/cLD/Sl0CzOXLrEUz+KIgLeGf91ofGs01EehMMA9zm958PXxQ2+A/fkp0wNc/ye/rCXgdu/McDTpXwDs9VeIDn8xruUXH+2wVpqf1roE7EKq1Pq/eIchbe0cwq4L/C8DknCV6PC+wJ5Kr9v1+TfjGki4UnR4X9hnrDRPrXXRICT8/+TNutyp9PPUWheNM8g2LJLovxrPjJXmqbUuGEjCaws+S/nNwFK8OWqtiwXugUkSHd4XuG3075fiIQnnOx3eIzgNfo5ND4sF7oFZxtu23giMlfRtuH8p8ETQMPeO8wmCL4IoHL3t9r2Sh52vwRTFwjLeAvlG8IVXRk/wfuWhZmOK9hLeAZkhQ4YMGTJkyJAhQ4YMGTJkyJAhQ1r8Dw/yd/TrS7PIAAAAAElFTkSuQmCC\"","module.exports = __webpack_public_path__ + \"static/media/bancontact.ab4f2f69.png\";","module.exports = __webpack_public_path__ + \"static/media/therapist-icon-man.2a77ce42.png\";","module.exports = __webpack_public_path__ + \"static/media/test.72266c2b.svg\";","module.exports = __webpack_public_path__ + \"static/media/therapist-icon.7b91ebe7.png\";","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 824;","import styled from 'styled-components'\n\nconst Button = styled.button`\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n cursor: pointer;\n border: ${props => props.secondary ? \"2px solid #fff\" : \"2px solid #51C0CF\"};\n border-radius: 5px;\n background-color: ${props => props.secondary ? \"rgba(0,0,0,0)\" : \"#51C0CF\" };\n color: #fff;\n padding: ${props => props.small ? \"5px 10px\" : props.large ? \"12px 15px\" : \"7px 15px\"};\n font-size: ${props => props.small ? \"16px\" : props.large ? \"22px\" : \"18px\"};\n outline: none;\n transition: all .5s ease-out;\n\n &:disabled{\n opacity: 0.5;\n }\n\n &:hover{\n background-color: ${props => props.secondary ? \"#51C0CF\" : \"#469CA8\" };\n border: ${props => props.secondary ? \"2px solid #51C0CF\" : \"2px solid #469CA8\"};\n color: ${props => props.secondary ? \"#FFF\" : \"#FFF\"};\n transition: all .5s ease-out;\n }\n\n`\n\nexport default Button","import React, {useContext} from \"react\"\nimport axios from \"axios\"\nimport { observer } from \"mobx-react\"\nimport registrationStore from \"./components/registrationStore\"\n\nexport const source = axios.CancelToken.source();\n\nexport const api = axios.create({\n baseURL: process.env.REACT_APP_COBRAND_API || \"https://localhost:5001/v1\",\n headers: {\n \"x-access-token\": window.localStorage.getItem(\"token\") || \"\",\n // Here we take the session id from the application insights and send it with every request in the header (x-ai-session-id)\n // When there is no ai_session id, it will send an empty header\n \"x-ai-session-id\": document.cookie\n ? document.cookie.split(\"; \").find((row) => row.startsWith(\"ai_session=\"))\n ? document.cookie\n .split(\"; \")\n .find((row) => row.startsWith(\"ai_session=\"))\n .split(\"=\")[1]\n .split(\"|\")[0]\n : \"\" || \"\"\n : \"\",\n },\n});\n\nexport const recordingApi = axios.create({\n baseURL: process.env.REACT_APP_SOCKET_URL || \"https://localhost:5002\",\n headers: {\n \"x-access-token\": window.localStorage.getItem(\"token\") || \"\",\n }\n});\n","import { observable, action, reaction, get } from \"mobx\";\nimport { createContext } from \"react\";\nimport { api } from \"../api\";\n\nclass RegistrationStore {\n @observable publicID = \"\";\n @observable user = window.localStorage.getItem(\"user\");\n @observable newUser = {};\n @observable email = \"\";\n @observable password = \"\";\n @observable planLength = \"\";\n @observable plan = \"\";\n @observable plan_id = 0;\n @observable token = window.localStorage.getItem(\"token\");\n @observable api = \"\";\n @observable error = \"\";\n @observable registrationMessage = false;\n @observable inProgress = false;\n @observable isTherapist = false;\n @observable firstName = \"\";\n @observable lastName = \"\";\n @observable phoneNumber = \"\";\n @observable wantsMarketingEmails = false;\n @observable speciality = \"Logopedie\";\n @observable individuFinished = false;\n\n constructor() {\n const reaction1 = reaction(\n () => this.token,\n (token) => {\n if (token) {\n window.localStorage.setItem(\"token\", token);\n api.defaults.headers[\"x-access-token\"] = token;\n } else {\n window.localStorage.removeItem(\"token\");\n }\n }\n );\n const reaction2 = reaction(\n () => this.user,\n (user) => {\n if (user) {\n window.localStorage.setItem(\"user\", user);\n } else {\n window.localStorage.removeItem(\"user\");\n }\n }\n );\n }\n @action addUserAttribute(name, value) {\n this.newUser[name] = value;\n }\n @action setToken(newToken) {\n this.token = newToken;\n }\n @action setUser(newUser) {\n this.user = newUser;\n }\n @action setError(newError) {\n this.error = newError;\n }\n @action setEmail(newEmail) {\n this.email = newEmail;\n }\n @action setPassword(newPassword) {\n this.password = newPassword;\n }\n @action setInProgress(newValue) {\n this.inProgress = newValue;\n }\n @action setPlan(newPlan) {\n this.plan = newPlan;\n }\n @action setPlanId(newId) {\n this.plan_id = newId;\n }\n @action setPlanLength(newPlanLength) {\n this.planLength = newPlanLength;\n }\n\n @action setIsTherapist(isTherapist) {\n this.isTherapist = isTherapist;\n }\n\n @action setFirstName(firstName) {\n this.firstName = firstName;\n }\n\n @action setLastName(lastName) {\n this.lastName = lastName;\n }\n\n @action setWantsMarketingEmails(wantsMarketingEmails) {\n this.wantsMarketingEmails = wantsMarketingEmails;\n }\n\n @action setSpeciality(speciality) {\n this.speciality = speciality;\n }\n\n @action setPhoneNumber(newPhoneNumber) {\n this.phoneNumber = newPhoneNumber;\n }\n\n @action setIndividuFinished(newValue) {\n this.individuFinished = newValue;\n }\n\n @action login() {\n return api\n .get(\"/login\", { auth: { username: this.email, password: this.password } })\n .then((response) => {\n this.setToken(response.data.token);\n this.setUser(JSON.stringify(response.data.user));\n })\n .catch(() => {\n this.setError(\"Incorrect email or password.\");\n throw this.error;\n });\n }\n\n @action checkAccountIsExpired() {\n const localStorageData = window.localStorage.getItem(\"lastAccountCheck\");\n const lastCheck = new Date(localStorageData);\n const now = new Date();\n const public_id = JSON.parse(this.user)?.public_id;\n if (\n localStorageData === null ||\n lastCheck.getDate() !== now.getDate() ||\n lastCheck.getMonth() !== now.getMonth()\n ) {\n // api call\n api.get(`user/${public_id}/isExpired`).then((response) => {\n api.get(`user/${public_id}`).then((response) => {\n this.setUser(JSON.stringify(response.data.user));\n });\n });\n\n // set lastCheck\n window.localStorage.setItem(\"lastAccountCheck\", new Date());\n }\n }\n\n @action logout() {\n this.setToken(undefined);\n this.setUser(undefined);\n this.setError(\"\");\n }\n @action setRegistrationMessage(newValue) {\n this.registrationMessage = newValue;\n }\n}\n\nexport const RegistrationStoreInstance = new RegistrationStore();\n\nexport default createContext(RegistrationStoreInstance);\n","import styled from \"styled-components\";\n\nconst Flash = styled.div`\n background-color: ${(props) => (props.red ? \"#f02929\" : props.green ? \"#45AE7C\" : \"#51C0CF\")};\n padding: 10px 20px;\n border: ${(props) => (props.red ? \"1px solid #f02929\" : props.green ? \"1px solid #45AE7C\" : \"1px solid #51C0CF\")};\n text-align: ${(props) => (props.center ? \"center\" : \"left\")};\n border-radius: 10px;\n color: white;\n margin-bottom: 10px;\n margin-top: 10px;\n`;\n\nexport default Flash;\n","import styled, { keyframes } from 'styled-components'\n\nconst fadein = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`\nconst Card = styled.div`\n background: #FFFFFF;\n border: 0.5px solid #FFFFFF;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 20px;\n animation: ${fadein} 1s;\n`\n\nexport const ExCard = styled.div`\n background: #F8F8F8;\n border: 0.5px solid #F8F8F8;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 20px;\n animation: ${fadein} 1s;\n width: 100%;\n min-width: 100%;\n margin-bottom: 15px;\n cursor: pointer;\n word-wrap:break-word;\n\n &.active{\n border: 1px solid #51C0CF;\n background-color: #FFFFFF;\n }\n\n @media (min-width: 980px){\n width: 32.5%;\n min-width: 32.5%;\n margin-right: 0.7%;\n }\n\n`\n\nexport default Card\n\n","import styled from 'styled-components'\n\nexport const H1 = styled.h1`\n color: ${props => props.white ? \"#FFFFFF\" : props.black ? \"#545454\" : \"#51C0CF\"};\n font-size: 32px;\n text-align: ${props => props.center ? \"center\" : \"left\"};\n margin-top: 0px;\n margin-bottom: 0px;\n\n @media (min-width: 980px) {\n font-size: 40px\n }\n`;\n\nexport const H2 = styled.h2`\n color: ${props => props.white? \"#FFFFFF\" : props.black ? \"#545454\" : \"#51C0CF\"};\n font-size: 28px;\n text-align: ${props => props.center ? \"center\" : \"left\"};\n margin-top: 0px;\n margin-bottom: 0px;\n @media (min-width: 980px) {\n font-size: 32px\n }\n`\n\nexport const H3 = styled.h3`\n color: ${props => props.white? \"#FFFFFF\" : props.black ? \"#545454\" : \"#51C0CF\"};\n font-size: 22px;\n text-align: ${props => props.center ? \"center\" : \"left\"};\n font-weight: ${props => props.light ? \"500\" : \"auto\"};\n margin-top: 0px;\n margin-bottom: 0px;\n @media (min-width: 980px) {\n font-size: 28px\n }\n`\n\nexport const H4 = styled.h4`\n color: ${props => props.white? \"#FFFFFF\" : props.black ? \"#545454\" : \"#51C0CF\"};\n font-size: 18px;\n text-align: ${props => props.center ? \"center\" : \"left\"};\n font-weight: ${props => props.light ? \"500\" : \"auto\"};\n margin-top: 30px;\n margin-bottom: 30px;\n @media (min-width: 980px) {\n font-size: 24px\n }\n`\n\nexport const P = styled.p`\n color: ${props => props.white? \"#FFFFFF\" : props.black ? \"#545454\" : \"#929292\"};\n text-align: ${props => props.center ? \"center\" : \"left\"};\n font-size: 18px;\n margin-top: 30px;\n margin-bottom: 30px;\n`\n\nexport const Bold = styled.span`\n font-weight: bold;\n`\n\nexport const PageTitle = styled.h2`\n color: ${props => props.white? \"#FFFFFF\" : props.black ? \"#545454\" : \"#51C0CF\"};\n font-size: 28px;\n text-align: ${props => props.center ? \"center\" : \"left\"};\n @media (min-width: 980px) {\n font-size: 32px\n }\n`\n\nexport const SmallTitle = styled(H4)`\n margin-bottom: 10px;\n`\n","import React from \"react\"\nimport styled from \"styled-components\"\n\nconst Spinner = styled.div`\n @keyframes loadingspin {\n 100% {\n transform: rotate(360deg)\n }\n }\n pointer-events: none;\n\twidth: 20px;\n\theight: 20px;\n\tborder: 0.2em solid transparent;\n\tborder-color: #eee;\n\tborder-top-color: #51C0CF;\n\tborder-radius: 50%;\n animation: loadingspin 1s linear infinite;\n`\n\nfunction LoadSpinner(){\n return(\n \n )\n}\n\nexport default LoadSpinner","const eventConstants = {\n USER: {\n LOGIN: \"USER_LOGIN\",\n LOGOUT: \"USER_LOGOUT\",\n },\n NAVIGATION: {\n GET_STARTED: \"NAVIGATION_GET-STARTED\",\n LIBRARY: \"NAVIGATION_LIBRARY\",\n CLIENTS: \"NAVIGATION_CLIENTS\",\n RESULTS: \"NAVIGATION_RESULTS\",\n },\n PRESS: {\n LIBRARY: {\n PUBLIC: \"PRESS_LIBRARY_PUBLIC\",\n PRIVATE: \"PRESS_LIBRARY_PRIVATE\",\n MEDIA: \"PRESS_LIBRARY_MEDIA\",\n },\n CLIENTS: {\n DETAILS: {\n PAGE: \"PRESS_CLIENTS_DETAILS\",\n UPDATE: \"PRESS_CLIENTS_DETAILS_UPDATE\",\n },\n CARE_PATHS: {\n PAGE: \"PRESS_CLIENTS_CARE-PATHS\",\n ADD_TASK: \"PRESS_CLIENTS_CARE-PATHS_ADD-TASK\",\n },\n RESULTS: {\n PAGE: \"PRESS_CLIENTS_RESULTS\",\n },\n START_VIDEO_CALL: \"PRESS_CLIENTS_START-VIDEO-CALL\",\n },\n ASSIGNMENTS: {\n START_ASSIGNMENT: \"PRESS_ASSIGNMENTS_START-ASSIGNMENT\",\n },\n },\n};\n\nconst pageViewConstants = {\n GET_STARTED: \"GET-STARTED\",\n LIBRARY: \"LIBRARY\",\n CLIENTS: \"CLIENTS\",\n RESULTS: \"RESULTS\",\n};\n\nconst typeUserConstants = {\n UNKNOWN: \"UNKNOWN\",\n PATIENT: \"PATIENT\",\n THERAPIST: \"THERAPIST\",\n};\n\n/**\n * Get right user type for Applicatoin Insights\n * @param {boolean} isTherapist\n * @returns {string} user type constant\n */\nconst getInsightUserType = (isTherapist) => {\n switch (isTherapist) {\n case undefined:\n case null:\n return typeUserConstants.UNKNOWN;\n case true:\n return typeUserConstants.THERAPIST;\n case false:\n return typeUserConstants.PATIENT;\n default:\n return typeUserConstants.UNKNOWN;\n }\n};\n\nexport { eventConstants, pageViewConstants, typeUserConstants, getInsightUserType };\n","import { ApplicationInsights } from \"@microsoft/applicationinsights-web\";\nimport { ReactPlugin } from \"@microsoft/applicationinsights-react-js\";\nimport { createBrowserHistory } from \"history\";\n\n/**\n * Checks if env variable has been set\n * If there is a env key called REACT_APP_INSIGHTS_INSTRUMENTATION_KEY it will return true\n * @returns {boolean} enabled\n */\nfunction isAppInsigthsEnabled() {\n const instrumentationKey = process.env.REACT_APP_INSIGHTS_INSTRUMENTATION_KEY;\n let enabled = false;\n if (instrumentationKey && instrumentationKey !== null && instrumentationKey !== \"\") enabled = true;\n return enabled;\n}\n\n/**\n * This will call the isAppInsightsEnabled but will also log information at startup\n * @see {@link isAppInsightsEnabeld}\n * @returns {boolean} enabled\n */\nfunction isRootAppInsightsEnabled() {\n const enabled = isAppInsigthsEnabled();\n if (process.env.NODE_ENV !== \"production\") {\n console.log(\"isAppInsightsEnabeld\", enabled);\n if (enabled) {\n const instrumentationKey = process.env.REACT_APP_INSIGHTS_INSTRUMENTATION_KEY;\n console.log(\"instrumentationKey\", instrumentationKey);\n }\n }\n return enabled;\n}\n\nconst browserHistory = createBrowserHistory({ basename: \"\" });\n\nconst reactPlugin = new ReactPlugin();\n\nconst instrumentationKey = process.env.REACT_APP_INSIGHTS_INSTRUMENTATION_KEY || \"\";\n\nconst appInsights = new ApplicationInsights({\n config: {\n instrumentationKey: instrumentationKey,\n extensions: [reactPlugin],\n extensionConfig: {\n [reactPlugin.identifier]: { history: browserHistory },\n },\n },\n});\n\nif (isAppInsigthsEnabled()) appInsights.loadAppInsights();\n\nexport { reactPlugin, appInsights, isAppInsigthsEnabled, isRootAppInsightsEnabled };\n","/**\n * Track Press event\n * @param {boolean} isAiEnabled\n * @param {ReactPlugin} appInsights\n * @param {string} name\n * @param {{}} props\n */\nexport function trackEvent(isAiEnabled = false, appInsights, name = \"UNKNOWN EVENT\", props = {}) {\n if (isAiEnabled && appInsights && appInsights !== null) appInsights.trackEvent({ name: name }, props);\n}\n\n/**\n * Track PageView\n * @param {boolean} isAiEnabled\n * @param {ReactPlugin} appInsights\n * @param {string} name\n * @param {{}} props\n */\nexport function trackPageView(isAiEnabled = false, appInsights, name = \"UNKNOWN PAGEVIEW\", props = {}) {\n if (isAiEnabled && appInsights && appInsights !== null)\n appInsights.trackPageView({\n name: name,\n properties: props,\n });\n}\n","import React, { useContext, useState } from \"react\";\nimport { Formik, Form, Field } from \"formik\";\nimport * as Yup from \"yup\";\nimport styled from \"styled-components\";\nimport { Link } from \"react-router-dom\";\nimport { Redirect } from \"react-router\";\nimport Button from \"../components/styled/button\";\nimport RegistrationStore from \"../components/registrationStore\";\nimport { observer } from \"mobx-react-lite\";\nimport { api } from \"../api\";\nimport Flash from \"../components/styled/flashMessage\";\nimport Card from \"../components/styled/card\";\nimport { FaTimes } from \"react-icons/fa\";\nimport { SmallTitle } from \"../components/styled/typography\";\nimport LoadSpinner from \"../components/loadspinner\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAppInsightsContext } from \"@microsoft/applicationinsights-react-js\";\nimport { eventConstants, getInsightUserType } from \"../insights-constants\";\nimport { isAppInsigthsEnabled } from \"../insights\";\nimport { trackEvent } from \"../insights-track\";\n\nconst LoginForm = styled(Form)`\n padding: 0px 0px 20px 0px;\n\n @media (min-width: 768px) {\n padding: 0px 60px 40px 60px;\n }\n`;\n\nconst CenterSpinner = styled.div`\n display: flex;\n justify-content: center;\n padding-bottom: 15px;\n`;\n\nconst Container = styled.div`\n padding: 0px;\n\n @media (min-width: 768px) {\n padding: 0px 60px;\n }\n`;\n\nconst FormGroup = styled.div`\n display: flex;\n flex-direction: column;\n margin-bottom: 20px;\n`;\n\nconst Input = styled(Field)`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n`;\n\nconst Label = styled.label`\n font-size: 16px;\n font-weight: 600;\n color: #545454;\n`;\n\nconst SubmitButton = styled(Button)`\n margin-top: 20px;\n padding-right: 45px;\n padding-left: 45px;\n font-size: 18px;\n`;\n\nconst Error = styled.p`\n font-size: 16px;\n color: #fff;\n font-style: italic;\n background-color: #dc393d;\n border: 1px solid #dc393d;\n border-radius: 10px;\n padding: 10px 15px;\n`;\n\nconst Center = styled.div`\n text-align: center;\n`;\n\nconst ForgotPassword = styled.a`\n color: #51c0cf;\n cursor: pointer;\n`;\n\nconst Overlay = styled.div`\n background-color: rgba(60, 60, 60, 0.7);\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n z-index: 999;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst OverlayCard = styled(Card)`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n position: relative;\n`;\n\nconst Times = styled(FaTimes)`\n color: #545454;\n position: absolute;\n right: 20px;\n top: 20px;\n cursor: pointer;\n`;\n\nconst OverlayTitle = styled(SmallTitle)`\n margin: 0px;\n`;\n\nconst ResetInput = styled.input`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n width: 300px;\n margin: 20px auto;\n font-size: 16px;\n`;\n\nfunction getDateMonthsBefore(date, nofMonths) {\n var thisMonth = date.getMonth();\n // set the month index of the date by subtracting nofMonths from the current month index\n date.setMonth(thisMonth - nofMonths);\n // When trying to add or subtract months from a Javascript Date() Object which is any end date of a month,\n // JS automatically advances your Date object to next month's first date if the resulting date does not exist in its month.\n // For example when you add 1 month to October 31, 2008 , it gives Dec 1, 2008 since November 31, 2008 does not exist.\n // if the result of subtraction is negative and add 6 to the index and check if JS has auto advanced the date,\n // then set the date again to last day of previous month\n // Else check if the result of subtraction is non negative, subtract nofMonths to the index and check the same.\n if (thisMonth - nofMonths < 0 && date.getMonth() != thisMonth + nofMonths) {\n date.setDate(0);\n } else if (thisMonth - nofMonths >= 0 && date.getMonth() != thisMonth - nofMonths) {\n date.setDate(0);\n }\n return date;\n}\n\nconst LoginForm1 = observer(() => {\n const { t, i18n } = useTranslation();\n const store = useContext(RegistrationStore);\n const [user, setUser] = useState({});\n const [redirect, setRedirect] = useState(false);\n const [showReset, setShowReset] = useState(false);\n const [goTo2FA, setGoTo2FA] = useState(false);\n const [userDoesNotExist, setUserDoesNotExist] = useState(false);\n\n const isAiEnabled = isAppInsigthsEnabled();\n const appInsights = useAppInsightsContext();\n\n const handleClose = () => {\n setShowReset(false);\n };\n\n const HandleSubmit = () => {\n api.get(\"/user?email=\" + document.getElementById(\"EmailInput\").value).then((response) => {\n if (response.data.user) {\n api.get(\"/reset_password?email=\" + document.getElementById(\"EmailInput\").value).then(function () {\n setShowReset(false);\n });\n } else {\n setUserDoesNotExist(true);\n }\n });\n };\n\n return (\n
\n \n {store.error && {store.error}}\n {store.inProgress && (\n \n \n \n )}\n \n {\n store.setEmail(values.email);\n store.setPassword(values.password);\n store.setInProgress(true);\n store\n .login()\n .then(() => {\n setUser(JSON.parse(store.user));\n var Loggeduser = JSON.parse(store.user);\n trackEvent(isAiEnabled, appInsights, eventConstants.USER.LOGIN, {\n user: {\n public_id: Loggeduser.public_id, \n type: getInsightUserType(Loggeduser.therapist)\n }\n });\n var shouldGoTo2FA = false;\n var aMonthAgo = getDateMonthsBefore(new Date(), 1);\n if (new Date(Loggeduser.lastTwoFAPhone) < aMonthAgo) {\n shouldGoTo2FA = true;\n }\n if (!Loggeduser.TwoFAEnabled) {\n shouldGoTo2FA = false;\n }\n setGoTo2FA(shouldGoTo2FA);\n setRedirect(true);\n store.setInProgress(false);\n actions.setSubmitting(false);\n })\n .catch(() => store.setInProgress(false));\n }}\n render={({ errors, touched }, isSubmitting) => (\n \n {store.registrationMessage && {t(\"loginForm.succesRegister\")}}\n \n \n \n {touched.email && errors.email && {errors.email}}\n \n \n \n \n {touched.password && errors.password && {errors.password}}\n \n
\n setShowReset(true)}>{t(\"loginForm.forgot\")}\n
\n
\n \n {t(\"loginForm.login\")}\n \n
\n {redirect &&\n (goTo2FA === true ? (\n \n ) : user.therapist === true ? (\n \n ) : (\n \n ))}\n
\n )}\n validationSchema={Yup.object().shape({\n email: Yup.string().email(t(\"loginForm.corrEmail\")).required(t(\"loginForm.giveEmail\")),\n password: Yup.string().required(t(\"loginForm.givePass\")),\n })}\n />\n {showReset && (\n \n \n \n {t(\"loginForm.forgotPass\")}\n {userDoesNotExist && {t(\"loginForm.EmailDoesNotExist\")}}\n \n \n \n \n )}\n
\n );\n});\n\nexport default LoginForm1;\n","import styled from 'styled-components'\n\n\nconst Container = styled.div`\n padding-right: 25px;\n padding-left: 25px;\n margin-right: auto;\n margin-left: auto;\n display: ${props => props.flex ? \"flex\" : \"block\"};\n align-items: ${props => props.alignCenter ? \"center\" : \"flex-start\"};\n justify-content: ${props => props.justifyEnd ? \"flex-end\" : \"flex-start\"};\n\n @media (min-width: 768px) {\n width: 700px;\n }\n @media (min-width: 992px) {\n width: 970px;\n }\n @media (min-width: 1200px) {\n width: 1170px;\n }\n`\n\nexport default Container\n\n","import styled from 'styled-components'\nimport AnchorLink from 'react-anchor-link-smooth-scroll'\nimport { NavLink } from 'react-router-dom'\n\nexport const TelLink = styled(NavLink)`\n text-decoration: none; \n color: #51C0CF; \n padding: 20px;\n font-size: 18px;\n\n @media (min-width: 980px){\n color: #FFFFFF;\n font-size: 16px;\n font-weight: normal;\n text-transform: capitalize;\n padding: 0px 10px;\n }\n`\n\nexport const MenuLink = styled.a`\n text-decoration: none; \n color: #51C0CF; \n padding: 20px;\n font-size: 18px;\n\n @media (min-width: 980px){\n color: #FFFFFF;\n font-size: 16px;\n font-weight: normal;\n text-transform: capitalize;\n padding: 0px 10px;\n }\n`\n\nexport const StyledLinkAnchor = styled(AnchorLink)`\n color: ${props => props.white ? \"#FFFFFF\" : \"#51C0CF\"};\n text-decoration: ${props => props.noline ? \"none\" : \"underline\"};\n`\n\nexport const StyledLink = styled.a`\n color: ${props => props.white ? \"#FFFFFF\" : \"#51C0CF\"};\n text-decoration: ${props => props.noline ? \"none\" : \"underline\"};\n`","import React, { useState, useContext } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport styled from \"styled-components\";\nimport { FaGlobe } from \"react-icons/fa\";\nimport { FaAngleDown } from \"react-icons/fa\";\nimport Belgium from \"../assets/images/belgium.png\";\nimport Frans from \"../assets/images/frans.png\";\nimport Spaans from \"../assets/images/spaans.png\";\nimport Engels from \"../assets/images/uk.png\";\nimport Duits from \"../assets/images/duits.png\";\nimport Catalan from \"../assets/images/catalan.png\";\nimport Netherlands from \"../assets/images/holland.png\";\nimport Italiaans from \"../assets/images/italy.png\";\n\nconst Earth = styled(FaGlobe)`\n color: #fff;\n &#platform {\n @media (max-width: 980px) {\n color: #51c0cf;\n }\n }\n`;\nconst Arrow = styled(FaAngleDown)`\n color: #fff;\n &#platform {\n @media (max-width: 980px) {\n color: #51c0cf;\n }\n }\n`;\n\nconst Dropdown = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n -webkit-touch-callout: none; /* iOS Safari */\n -webkit-user-select: none; /* Safari */\n -khtml-user-select: none; /* Konqueror HTML */\n -moz-user-select: none; /* Old versions of Firefox */\n -ms-user-select: none; /* Internet Explorer/Edge */\n user-select: none;\n`;\nconst Language = styled.div`\n margin: 0px 10px 0px 10px;\n color: #fff;\n\n &.platform {\n @media (max-width: 980px) {\n color: #51c0cf;\n }\n }\n`;\n\nconst LanguageDropdown = styled.div`\n background-color: white;\n position: absolute;\n top: 35px;\n right: 0px;\n border: 2px solid #51c0cf;\n border-radius: 5px;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: center;\n z-index: 9;\n\n &.languagedropdown {\n display: none;\n }\n\n &#topside {\n position: absolute !important;\n top: auto !important;\n bottom: 35px !important;\n right: auto !important;\n left: -30px;\n }\n`;\n\nconst Relative = styled.div`\n position: relative;\n`;\nconst OtherLanguage = styled.div`\n color: #51c0cf;\n min-width: 110px;\n padding: 10px 25px 10px 25px;\n cursor: pointer;\n display: flex;\n align-items: center;\n\n &:hover {\n color: #fff;\n background-color: #51c0cf;\n }\n`;\nconst Image = styled.img`\n width: 20px;\n height: 20px;\n margin-right: 5px;\n`;\n\nconst LanguageSelector = (props) => {\n const { t, i18n } = useTranslation();\n const [DropdownOpen, setDropdownOpen] = useState(false);\n\n const changeLanguage = (language, fullLanguage) => {\n i18n.changeLanguage(language);\n window.localStorage.setItem(\"language\", language);\n setDropdownOpen(!DropdownOpen);\n if (document.getElementsByTagName('iframe')[0]) {\n let token = window.localStorage.getItem(\"token\").toString();\n let userId = JSON.parse(window.localStorage.getItem(\"user\")).public_id;\n document.getElementsByTagName('iframe')[0].src=`${process.env.REACT_APP_V2_URL}?token=${token}&user=${userId}&lang=${language}`\n }\n };\n\n const changeDropdown = () => {\n setDropdownOpen(!DropdownOpen);\n };\n\n return (\n \n \n \n \n {i18n.language}\n \n \n \n\n {DropdownOpen && (\n \n changeLanguage(\"ca\", \"Català\")}>\n \n Català\n \n changeLanguage(\"de\", \"Deutsch\")}>\n \n Deutsch\n \n changeLanguage(\"en\", \"English\")}>\n \n English\n \n changeLanguage(\"es\", \"Español\")}>\n \n Español\n \n changeLanguage(\"fr\", \"Français\")}>\n \n Français\n \n changeLanguage(\"it\", \"Italiano\")}>\n \n Italiano\n \n changeLanguage(\"nl\", \"Nederlands\")}>\n \n Nederlands\n \n \n )}\n \n );\n};\n\nexport default LanguageSelector;\n","import React, { useState } from \"react\";\n\nimport Container from \"../components/styled/container\";\nimport { TelLink, MenuLink } from \"../components/styled/link\";\nimport Button from \"../components/styled/button\";\nimport { Link } from \"react-router-dom\";\n\nimport TelephonLogo from \"../assets/images/telephon-logo.png\";\nimport LanguageSelector from \"../components/languageSelector\";\nimport { useTranslation } from \"react-i18next\";\n\nimport styled from \"styled-components\";\n\nconst Navbar = styled.div`\n background-color: #51c0cf;\n height: 100px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0px 20px;\n`;\n\nconst RegisterLink = styled(Link)`\n text-decoration: none;\n color: #51c0cf;\n padding: 20px;\n font-size: 20px;\n\n @media (min-width: 980px) {\n color: #ffffff;\n font-size: 16px;\n font-weight: normal;\n text-transform: capitalize;\n padding: 0px 10px;\n }\n`;\n\nconst Menu = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n visibility: hidden;\n z-index: 99 !important;\n\n &.show {\n visibility: visible;\n }\n\n @media (min-width: 980px) {\n display: block;\n margin-left: auto;\n position: static;\n visibility: visible;\n }\n`;\n\nconst MenuNav = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n height: 100vh;\n overflow: hidden;\n background: #ffffff;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n padding-left: 0px;\n height: auto;\n background: rgba(0, 0, 0, 0);\n }\n`;\n\nconst NavButton = styled.div`\n z-index: 999;\n cursor: pointer;\n\n &.close {\n transform: rotate(180deg);\n position: fixed;\n top: 20px;\n left: 30px;\n }\n\n @media (min-width: 980px) {\n display: none;\n }\n`;\n\nconst ButtonLine = styled.div`\n width: 25px;\n height: 3px;\n margin: 0px 0px 5px 0px;\n background: #ffffff;\n\n &.show:nth-child(1) {\n background: #51c0cf;\n transform: rotate(45deg) translate(5px, 5px);\n }\n //line 2\n &.show:nth-child(2) {\n opacity: 0;\n }\n //line 3\n &.show:nth-child(3) {\n background: #51c0cf;\n transform: rotate(-45deg) translate(6px, -6px);\n }\n`;\n\nconst Auth = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n\n @media (min-width: 980px) {\n display: inline;\n padding-left: 20px;\n }\n`;\n\nconst Logo = styled.div`\n width: 120px;\n padding-bottom: 10px;\n z-index: 999;\n order: -1;\n`;\n\nconst LogoImage = styled.img`\n height: 55px;\n`;\n\nconst ContainerNav = styled(Container)`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-right: 0px;\n margin-left: 0px;\n width: 100%;\n padding: 0px;\n\n @media (min-width: 980px) {\n margin-left: 20px;\n padding: 0px 25px;\n }\n`;\n\nconst LoginButton = styled(Button)`\n font-size: 20px;\n border: 1px solid #51c0cf;\n color: #51c0cf;\n background-color: rgba(0, 0, 0, 0);\n font-weight: normal;\n 1px 1px 3px 0 #30a0af;\n\n @media (min-width: 980px) {\n font-size: 16px;\n color: #51c0cf;\n border: 2px solid #ffffff;\n background-color: #fff;\n text-transform: capitalize;\n\n &:hover{\n color: #51c0cf;\n border: 2px solid #ffffff;\n background-color: #fff;\n }\n }\n`;\n\nconst ChooseLanguage = styled(LanguageSelector)`\n @media (min-width: 980px) {\n margin-right: 20px;\n }\n`;\n\nconst Language = styled.div`\n position: absolute;\n right: 60px;\n\n @media (min-width: 980px) {\n position: initial;\n }\n`;\n\nconst Header = () => {\n const [menuActive, setMenuActive] = useState(false);\n const { t, i18n } = useTranslation();\n\n function toggleClass() {\n setMenuActive(!menuActive);\n }\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {t(\"header.home\")}\n \n \n {t(\"header.about\")}\n \n \n {t(\"header.contact\")}\n \n\n \n \n {t(\"header.start\")}\n \n \n \n \n \n \n \n \n \n
\n );\n};\n\nexport default Header;\n","import styled from 'styled-components'\n\nconst Global = styled.div`\n @import url('https://fonts.googleapis.com/css?family=Raleway:300,400,600,700,800&display=swap');\n margin: 0;\n font-family: 'Raleway', sans-serif;\n background-color: #F8F8F8;\n padding-left: 0px;\n min-height: 100vh;\n margin-bottom: 15px;\n\n\n @media (min-width: 980px){\n padding-left: 175px;\n margin-bottom: auto;\n }\n`\n\nexport default Global","import React, {useEffect, useState, useContext} from 'react';\nimport LoginForm from \"../components/loginForm\"\nimport { observer } from \"mobx-react\"\nimport styled from 'styled-components'\nimport { Link } from 'react-router-dom'\nimport Header from '../components/header'\nimport { H2, P } from '../components/styled/typography'\nimport Card from '../components/styled/card'\nimport Global from '../components/styled/global'\nimport {api} from \"../api\"\nimport { useTranslation } from \"react-i18next\"\nimport qs from \"qs\"\nimport RegistrationStore from \"../components/registrationStore\"\nimport {Redirect} from 'react-router-dom'\n\nconst LoginCard = styled(Card)`\n width: 90%;\n margin: 5vh auto;\n padding: 40px 30px;\n\n @media (min-width: 768px) {\n width: 70%;\n margin: 10vh auto;\n padding: 40px 40px;\n }\n`\n\nconst Title = styled(H2)`\n margin: 20px auto 0px auto;\n padding-bottom: 20px;\n @media (min-width: 768px){\n padding-bottom: 40px;\n }\n`\n\nconst NoAccountCreated = styled(P)`\n\n @media (min-width: 768px) {\n padding: 0px 0px 0px 60px;\n }\n`\n\nconst CreateAccount = styled(Link)`\n color: #51C0CF;\n`\n\nconst Login = observer((props) => {\n const { t, i18n } = useTranslation()\n const Rstore = useContext(RegistrationStore)\n const user = (Rstore.user && JSON.parse(Rstore.user))\n const [redirect, setRedirect] = useState(false)\n const language = qs.parse(props.location.search, {ignoreQueryPrefix: true}).language\n const isMaintenance = process.env.REACT_APP_MAINTENANCE;\n\n useEffect(()=>{\n if (language){\n i18n.changeLanguage(language)\n }\n if(Rstore.user){\n setRedirect(true)\n }\n },[])\n\n return (\n
\n { redirect && (user.therapist ? : ) }\n
\n \n { (isMaintenance === 'True') ?\n (<>\n We are in maintenance\n Sorry we are in maintenance\n )\n :\n (<>\n {t('login.title')}\n \n {t('login.noAccountCreated')} {t('login.register')}\n )\n }\n \n
\n )\n }\n)\n\nexport default Login;\n","import React, { useState } from \"react\";\nimport styled from \"styled-components\";\n\nconst CodeFlex = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst Input = styled.input`\n padding: 5px;\n font-size: 16px;\n width: 22px;\n height: 22px;\n margin: 5px;\n border: 1px solid #51c0cf;\n border-radius: 5px;\n text-align: center;\n margin-bottom: 20px;\n\n &:focus {\n box-shadow: 0 0 10px #51c0cf;\n outline: none;\n }\n\n @media (min-width: 768px) {\n padding: 7px;\n font-size: 18px;\n width: 40px;\n height: 40px;\n margin: 7px;\n margin-bottom: 20px;\n }\n @media (min-width: 980px) {\n padding: 10px;\n font-size: 20px;\n width: 50px;\n height: 50px;\n margin: 10px;\n }\n`;\n\nconst VerifyCode = (props) => {\n const [part1, setPart1] = useState(\"\");\n const [part2, setPart2] = useState(\"\");\n const [part3, setPart3] = useState(\"\");\n const [part4, setPart4] = useState(\"\");\n const [part5, setPart5] = useState(\"\");\n const [part6, setPart6] = useState(\"\");\n\n const HandleChangePart1 = (e) => {\n setPart1(e.target.value);\n props.setCode(e.target.value + part2 + part3 + part4 + part5 + part6);\n ChangeInputField(e);\n };\n const HandleChangePart2 = (e) => {\n setPart2(e.target.value);\n props.setCode(part1 + e.target.value + part3 + part4 + part5 + part6);\n ChangeInputField(e);\n };\n const HandleChangePart3 = (e) => {\n setPart3(e.target.value);\n props.setCode(part1 + part2 + e.target.value + part4 + part5 + part6);\n ChangeInputField(e);\n };\n const HandleChangePart4 = (e) => {\n setPart4(e.target.value);\n props.setCode(part1 + part2 + part3 + e.target.value + part5 + part6);\n ChangeInputField(e);\n };\n const HandleChangePart5 = (e) => {\n setPart5(e.target.value);\n props.setCode(part1 + part2 + part3 + part4 + e.target.value + part6);\n ChangeInputField(e);\n };\n const HandleChangePart6 = (e) => {\n setPart6(e.target.value);\n props.setCode(part1 + part2 + part3 + part4 + part5 + e.target.value);\n ChangeInputField(e);\n };\n\n const ChangeInputField = (e) => {\n if (e.target.value.length === 1) {\n if (e.target.nextSibling) {\n e.target.nextSibling.focus();\n }\n }\n };\n\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default VerifyCode;\n","import React, { useState, useContext, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport VerifyCode from \"./verifyCode\";\nimport RegistrationStore from \"./registrationStore\";\nimport { api } from \"../api\";\nimport { Redirect } from \"react-router-dom\";\nimport Flash from \"./styled/flashMessage\";\nimport { useTranslation } from \"react-i18next\";\nimport Button from \"./styled/button\";\nimport { P } from \"./styled/typography\";\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n margin: 25px 0px 50px 0px;\n`;\n\nconst Code = styled.div`\n margin: 10px 0px;\n`;\n\nconst Resend = styled.span`\n color: #51c0cf;\n text-decoration: underline;\n cursor: pointer;\n`;\n\nconst ResendText = styled(P)`\n margin-top: 35px;\n`;\n\nconst Text = styled(P)`\n margin-top: 5px;\n`;\n\nconst Error = styled.p`\n font-size: 16px;\n color: #fff;\n font-style: italic;\n background-color: #dc393d;\n border: 1px solid #dc393d;\n border-radius: 10px;\n padding: 10px 15px;\n`;\nconst TwoFA = ({ isInRegistration, setRegisterStepIsValid, setRegisterStepIsInvalid }) => {\n const { t, i18n } = useTranslation();\n const store = useContext(RegistrationStore);\n const [code, setCode] = useState();\n const [showResendMessage, setShowResendMessage] = useState(false);\n const [showFailMessage, setShowFailMessage] = useState(false);\n const [phoneNumber, setPhoneNumber] = useState();\n const [redirect, setRedirect] = useState(false);\n\n useEffect(() => {\n setPhoneNumber(store.phoneNumber);\n });\n\n useEffect(() => {\n api.get(\"/2FA/phone\", { params: { phone: phoneNumber } }).then(() => {\n console.log(\"message sent to: \" + phoneNumber);\n });\n }, [phoneNumber]);\n\n const ResendEmail = () => {\n api.get(\"/2FA/phone\", { params: { phone: phoneNumber } }).then((res) => {\n setShowResendMessage(true);\n setTimeout(function () {\n setShowResendMessage(false);\n }, 5000);\n });\n };\n\n const VerifyCodeInput = () => {\n if (isInRegistration) {\n console.log(\"yes\");\n api.put(\"/2FA/code/\" + code, { type: \"phone-initial\" }).then((res) => {\n if (res.data.success) {\n store.addUserAttribute(\"verifiedPhone\", true);\n setRegisterStepIsValid();\n } else {\n setRegisterStepIsInvalid();\n setShowFailMessage(true);\n }\n });\n } else {\n api.put(\"/2FA/code/\" + code, { type: \"phone\" }).then((res) => {\n if (res.data.success) {\n setRedirect(true);\n } else {\n setShowFailMessage(true);\n }\n });\n }\n };\n\n return (\n \n {phoneNumber && {t(\"2FAPhone.codeSent\") + \"********\" + phoneNumber.substring(9)}}\n\n {showResendMessage && {t(\"2FAPhone.codeResent\")}}\n {showFailMessage && {t(\"2FAPhone.invalidCode\")}}\n {t(\"2FAPhone.inputCode\")}\n \n \n \n \n \n {t(\"2FAEmail.noCodeP1\")}\n {t(\"2FAEmail.noCodeP2\")}\n {t(\"2FAEmail.noCodeP3\")}\n \n \n );\n};\n\nexport default TwoFA;\n","import React, {useEffect, useState} from 'react';\nimport TwoFAPhone from \"../components/2FAPhone\"\nimport { observer } from \"mobx-react\"\nimport styled from 'styled-components'\nimport { Link } from 'react-router-dom'\nimport Header from '../components/header'\nimport { H2, P } from '../components/styled/typography'\nimport Card from '../components/styled/card'\nimport Global from '../components/styled/global'\nimport {api} from \"../api\"\nimport { useTranslation } from \"react-i18next\"\nimport qs from \"qs\"\nimport { FaArrowLeft } from 'react-icons/fa';\n\nconst LoginCard = styled(Card)`\n width: 90%;\n margin: 5vh auto;\n padding: 40px 30px;\n\n @media (min-width: 768px) {\n width: 70%;\n margin: 10vh auto;\n padding: 40px 40px;\n }\n`\n\nconst Title = styled(H2)`\n margin: 20px auto 0px auto;\n padding-bottom: 20px;\n @media (min-width: 768px){\n padding-bottom: 40px;\n }\n`\n\nconst NoAccountCreated = styled(P)`\n\n @media (min-width: 768px) {\n padding: 0px 0px 0px 60px;\n } \n`\n\nconst CreateAccount = styled(Link)`\n color: #51C0CF;\n`\n\nconst Icon = styled(FaArrowLeft)`\n vertical-align: middle;\n margin-right: 5px;\n`\n\nconst Step = styled(P)`\n font-weight: bold;\n text-align: right;\n margin-top: 0px;\n\n @media(min-width:980px){\n padding: 30px 60px 20px 0px;\n }\n`\n\n\nconst Flex = styled.div`\n display: flex;\n justify-content: space-between;\n`\n\n\nconst Back = styled(Link)`\n padding: 20px 0px 20px 10px;\n text-decoration: none;\n color: #AFAFAF;\n\n @media (min-width: 980px){\n padding: 20px 0px 20px 60px;\n }\n`\n\n\nconst Login2 = observer((props) => {\n const { t, i18n } = useTranslation()\n const language = qs.parse(props.location.search, {ignoreQueryPrefix: true}).language\n\n useEffect(()=>{\n if (language){\n i18n.changeLanguage(language)\n }\n },[])\n\n return (\n
\n
\n \n \n {t('checkoutStep.back')}\n \n {t('login2FA.title')}\n \n \n
\n )\n }\n)\n\nexport default Login2;\n","import React, {useState} from \"react\"\nimport { useTranslation } from \"react-i18next\"\nimport {api} from \"../api\"\nimport styled from 'styled-components'\n\nimport Button from './styled/button'\n\nconst Input = styled.input`\n background: #FFFFFF;\n border: 1px solid #51C0CF;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 10px;\n margin-bottom: 10px;\n outline: none;\n margin-right: 0px;\n min-width: 150px;\n`\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n`\n\nconst DiscountBox = (props) => {\n const { t, i18n } = useTranslation()\n const [code, setCode] = useState()\n\n const handleChange = (e) => {\n setCode(e.target.value)\n }\n\n const handleSubmit = () => {\n api.put(\"/discount/\" + code, {\"plan_id\": props.plan_id}).then(res => {\n if (res.data.succes){\n props.succes(res.data.discount, res.data.month_reduction)\n } else {\n props.failure()\n }\n })\n }\n return (\n \n \n \n \n )\n}\n\nexport default DiscountBox","import React, { useState, useContext, useEffect } from \"react\";\nimport Button from \"../components/styled/button\";\nimport styled from \"styled-components\";\nimport { api } from \"../api\";\nimport RegistrationStore from \"../components/registrationStore\";\nimport Header from \"../components/header\";\nimport Card from \"../components/styled/card\";\nimport { H2, P, H4 } from \"../components/styled/typography\";\nimport Flash from \"../components/styled/flashMessage\";\nimport { Link } from \"react-router-dom\";\nimport { FaArrowLeft } from \"react-icons/fa\";\nimport Paypal from \"../assets/images/paypal.png\";\nimport Bancontact from \"../assets/images/bancontact.png\";\nimport { Redirect } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport DiscountBox from \"./discountBox\";\n\nconst SubmitButton = styled(Button)`\n margin-top: 40px;\n padding-right: 45px;\n padding-left: 45px;\n font-size: 18px;\n`;\n\nconst A = styled.a`\n color: #51c0cf;\n`;\n\nconst CheckoutCard = styled(Card)`\n width: 100%;\n margin-top: 20px;\n\n @media (min-width: 1200px) {\n width: 50%;\n margin-top: 20px;\n padding: 40px 20px;\n }\n`;\nconst Icon = styled(FaArrowLeft)`\n vertical-align: middle;\n margin-right: 5px;\n`;\n\nconst Title = styled(H2)`\n margin: 20px auto 0px auto;\n`;\n\nconst Back = styled(Link)`\n padding: 40px 0px 20px 60px;\n text-decoration: none;\n color: #afafaf;\n`;\n\nconst Container = styled.div`\n padding: 0px 30px;\n\n @media (min-width: 768px) {\n padding: 0px 60px;\n }\n`;\n\nconst Column = styled.div`\n padding: 20px 0px;\n`;\n\nconst ColumnBorder = styled(Column)`\n border: 1px solid #51c0cf;\n border-radius: 10px;\n padding: 30px 20px;\n min-width: 100%;\n margin-bottom: 15px;\n\n @media (min-width: 768px) {\n min-width: 55%;\n }\n`;\n\nconst Step = styled(P)`\n font-weight: bold;\n text-align: right;\n padding: 0px 60px 20px 0px;\n`;\n\nconst Flex = styled.div`\n display: flex;\n justify-content: space-between;\n`;\n\nconst CheckoutFlex = styled(Flex)`\n margin-top: 50px;\n width: 100%;\n flex-direction: column;\n justify-content: space-between;\n align-items: center;\n`;\n\nconst TitleSmall = styled(H4)`\n font-size: 18px !important;\n margin: 0px;\n margin-bottom: 20px;\n`;\n\nconst PaymentImage = styled.img`\n height: 40px;\n cursor: pointer;\n`;\n\nconst PaymentImageBancontact = styled.img`\n height: 75px;\n cursor: pointer;\n`;\n\nconst NormalFlex = styled.div`\n display: flex;\n align-items: stretch;\n`;\n\nconst PaymentBox = styled.div`\n padding: 2px 10px;\n border-radius: 5px;\n display: flex;\n align-items: center;\n margin: 0px 5px;\n\n &.active {\n border: 1px solid #51c0cf;\n }\n`;\n\nconst Price = styled.span`\n color: #51c0cf;\n`;\n\nconst Par = styled.span`\n color: #525252;\n padding-top: 10px;\n`;\n\nconst Item = styled(Flex)`\n padding-bottom: 10px;\n border-bottom: 1px solid #51c0cf;\n align-items: center;\n`;\n\nconst ColumnBorderFlex = styled(ColumnBorder)`\n display: flex;\n flex-direction: column;\n align-items: center;\n`;\n\nconst Checkout = () => {\n const { t, i18n } = useTranslation();\n const store = useContext(RegistrationStore);\n const user = JSON.parse(store.user);\n const [paymentMethod, setPaymentMethod] = useState(\"\");\n const [plan, setPlan] = useState({});\n const [succesMessage, setSuccesMessage] = useState(false);\n const [failureMessage, setFailureMessage] = useState(false);\n const [discount, setDiscount] = useState(0.0);\n const [redirect, setRedirect] = useState(false);\n const [monthReduction, setMonthReduction] = useState(0);\n\n function handleClick(e) {\n if (e.target.id == \"Paypal\") {\n // document.getElementById(\"Paypal\").classList.add(\"active\")\n document.getElementById(\"bancontact\").classList.remove(\"active\");\n } else if (e.target.id == \"bancontact\") {\n document.getElementById(\"bancontact\").classList.add(\"active\");\n // document.getElementById(\"Paypal\").classList.remove(\"active\")\n }\n setPaymentMethod(e.target.id);\n }\n\n function handleClickImage(e) {\n if (e.target.id == \"Paypal\") {\n document.getElementById(\"bancontact\").classList.remove(\"active\");\n // document.getElementById(\"Paypal\").classList.add(\"active\")\n } else if (e.target.id == \"bancontact\") {\n // document.getElementById(\"Paypal\").classList.remove(\"active\")\n document.getElementById(\"bancontact\").classList.add(\"active\");\n }\n setPaymentMethod(e.target.id);\n }\n\n function GoCheckout(plan_id, user_id) {\n api.post(\"/payments\", {\n redirect_url: window.location.href,\n plan_id: plan_id,\n month_reduction: monthReduction,\n user_id: user_id,\n discount: discount,\n method: paymentMethod === \"\" ? \"bancontact\" : paymentMethod,\n }).then(function (response) {\n if (discount === 1) {\n window.location.reload()\n store.setUser(JSON.stringify(response.data.user));\n } else {\n window.location.href = response.data.checkout;\n }\n });\n }\n \n useEffect(() => {\n api.get(\"/plans\").then((response) => {\n response.data.plans.forEach((plan) => {\n if (store.plan_id === plan.id) {\n setPlan(plan);\n }\n });\n });\n }, []);\n\n const succesDiscount = (discount, monthreduction = 0) => {\n setSuccesMessage(true);\n setDiscount(discount);\n setMonthReduction(monthreduction);\n setFailureMessage(false);\n };\n\n const failedDiscount = () => {\n setFailureMessage(true);\n setSuccesMessage(false);\n };\n\n return (\n
\n \n \n {t(\"checkoutStep.payment\")}\n \n \n \n \n {t(\"checkoutStep.toPayout\")}\n \n \n {t(\"checkoutStep.subscription\")}{\" \"}\n {plan.naam + \" \" + (plan.period - monthReduction) + t(\"checkoutStep.months\")}:\n \n €{(Math.round(plan.price * 100) / 100).toFixed(2)}\n \n \n {t(\"checkoutStep.discountLabel\")}\n €{(discount * plan.price).toFixed(2)}\n \n \n {t(\"checkoutStep.stepout\")}:\n €{(Math.round((plan.price - discount * plan.price) * 100) / 100).toFixed(2)}\n \n \n {t(\"checkoutStep.vat\")}:\n \n €{(Math.round((plan.price - discount * plan.price) * 0.21 * 100) / 100).toFixed(2)}\n \n \n \n {t(\"checkoutStep.total\")}:\n \n €{(\n Math.round(\n (plan.price -\n discount * plan.price +\n (plan.price - discount * plan.price) * 0.21) *\n 100\n ) / 100\n ).toFixed(2)}\n \n \n \n \n\n \n {failureMessage && {t(\"checkoutstep.wrongcode\")}}\n {succesMessage && {t(\"checkoutstep.succescode\")}}\n {t(\"checkoutStep.discountCode\")}\n \n \n GoCheckout(store.plan_id, user.public_id)}>\n {t(\"checkoutStep.toPayout\")}\n \n \n

\n \n {t(\"checkoutStep.mailInvoice1\")}\n info@telephon.digital\n {t(\"checkoutStep.invoiceData\")}\n \n

\n
\n
\n
\n );\n};\n\nexport default Checkout;\n","import React from \"react\"\nimport CheckoutStep from \"../components/checkoutStep\"\n\n\nfunction Checkout(){\n return \n}\n\nexport default Checkout","import React, {useState, useContext} from \"react\"\nimport styled from 'styled-components'\nimport { TelLink } from \"../components/styled/link\" \nimport TelephonLogo from '../assets/images/telephon-logo.png'\nimport registrationStore from \"../components/registrationStore\"\nimport DashboardIcon from '../assets/images/patient-overzicht-icon.png'\nimport OpdrachtenIcon from '../assets/images/patient-opdrachten-icon.png'\nimport MateriaalIcon from '../assets/images/patient-materiaalraadplegen-icon.png'\nimport ResultaatIcon from '../assets/images/patient-resultaten-icon.png'\nimport AccountIcon from '../assets/images/patient-account-icon.png'\nimport HelpdeskIcon from '../assets/images/helpdesk-icon.png'\nimport LogoutIcon from '../assets/images/logout-icon.png'\nimport InboxIcon from '../assets/images/inbox-icon.png'\nimport LanguageSelector from \"../components/languageSelector\"\nimport { useTranslation } from \"react-i18next\"\nimport { useAppInsightsContext } from \"@microsoft/applicationinsights-react-js\";\nimport { eventConstants, getInsightUserType } from \"../insights-constants\";\nimport { isAppInsigthsEnabled } from \"../insights\"\nimport { trackEvent } from './../insights-track';\n\n/*\nconst Sidebar = styled.div`\n background-color: #51C0CF;\n height: 100%;\n width: 175px;\n position: fixed;\n z-index:9;\n top: 0;\n left: 0;\n overflow-x: hidden;\n overflow-y: hidden;\n padding-top: 20px;\n`\n\nconst LogoImage = styled.img`\n height: 55px;\n`\n\nconst Logo = styled.div`\n width: 120px;\n padding-bottom: 10px;\n z-index: 999;\n padding-left: 15px;\n @media (min-width: 980px){\n width: 10%;\n }\n`\n\nconst Nav = styled.div`\n display: flex;\n flex-direction: column;\n padding-top: 20px;\n`\n\nconst NavIcon = styled.img`\n width: 25px;\n height: 25px;\n padding-right: 10px;\n`\nconst MenuLink = styled(TelLink)`\n width: 100%;\n display: flex;\n align-items: center;\n margin-top: 20px;\n margin-bottom: 20px;\n padding-left: 20px;\n &.active{\n background-color: #469CA8;\n border-left: 5px solid #4E7693;\n box-shadow: inset 0px 2px 4px rgba(138, 138, 138, 0.3), inset 0px -2px 4px rgba(138, 138, 138, 0.3);\n padding-top: 20px;\n padding-bottom: 20px;\n margin-top: 0px;\n margin-bottom: 0px;\n }\n`\n*/\n\nconst Sidebar = styled.div`\n width: 100vw;\n height: 75px;\n background-color: #51C0CF;\n display: flex;\n align-items: center;\n position: absolute;\n top: 0px;\n left: 0px;\n z-index: 9999;\n \n\n\n @media (min-width: 980px){\n display: block;\n background-color: #51C0CF;\n height: 100%;\n width: 175px;\n position: fixed;\n z-index:9;\n top: 0;\n left: 0;\n overflow-x: hidden;\n overflow-y: hidden;\n padding-top: 20px;\n }\n\n &.show{\n background-color: white;\n\n position: fixed;\n top: 0;\n left:0;\n height: 100vh;\n width: 100vw;\n }\n\n`\n\nconst LogoImage = styled.img`\n height: 45px;\n`\n\nconst Logo = styled.div`\n width: 120px;\n z-index: 999;\n padding-left: 10px;\n @media (min-width: 980px){\n width: 10%;\n padding-left: 20px;\n padding-bottom: 10px;\n }\n`\n\nconst Nav = styled.div`\n display: none;\n \n @media (min-width: 980px){\n display: flex;\n flex-direction: column;\n padding-top: 20px;\n margin-bottom: 60px;\n }\n\n &.show{\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n`\n\nconst NavIcon = styled.img`\n width: 30px;\n height: 30px;\n padding-right: 10px;\n @media(min-width: 980px){\n width: 25px;\n height: 25px;\n }\n`\n\nconst MenuLink = styled(TelLink)`\n display: flex;\n align-items: center;\n font-size: 20px;\n @media (min-width: 980px){\n font-size: 18px;\n font-weight: normal;\n width: 150px;\n margin-top: 20px;\n margin-bottom: 20px;\n padding-left: 20px;\n &.active{\n background-color: #469CA8;\n border-left: 5px solid #4E7693;\n box-shadow: inset 0px 2px 4px rgba(138, 138, 138, 0.3), inset 0px -2px 4px rgba(138, 138, 138, 0.3);\n padding-top: 20px;\n padding-bottom: 20px;\n margin-top: 0px;\n margin-bottom: 0px;\n }\n }\n`\n\nconst HomeLink = styled.a`\n text-decoration: none;\n`\n\nconst NavButton = styled.div`\n z-index: 999;\n cursor: pointer;\n position: absolute;\n right: 30px;\n top: 27px;\n\n &.close {\n transform: rotate(180deg);\n position: fixed;\n top: 20px;\n left: 30px;\n }\n\n @media (min-width: 980px){\n display: none;\n }\n`\n\nconst ButtonLine = styled.div`\n width: 25px;\n height: 3px;\n margin: 0px 0px 5px 0px;\n background: #FFFFFF;\n\n &.show:nth-child(1){\n background: #51C0CF;\n transform: rotate(45deg) translate(5px, 5px);\n }\n //line 2\n &.show:nth-child(2){\n opacity: 0;\n }\n //line 3\n &.show:nth-child(3){\n background: #51C0CF;\n transform: rotate(-45deg) translate(6px, -6px);\n }\n`\n\nconst Language = styled.div`\n position: initial;\n\n @media(min-width: 980px){\n position: absolute;\n bottom: 60px;\n left: 40px;\n }\n`\n\nfunction SidebarPatient(){\n const { t, i18n } = useTranslation()\n const store = useContext(registrationStore)\n const user = JSON.parse(store.user)\n const [mobileMenu, setMobileMenu] = useState(false);\n\n const isAiEnabled = isAppInsigthsEnabled();\n const appInsights = useAppInsightsContext();\n const trackProps = {\n user: {\n type: getInsightUserType(user.therapist),\n public_id: user.public_id \n } \n }\n\n const toggleClass = () => {\n setMobileMenu(!mobileMenu);\n };\n\n function handleLogout(){\n trackEvent(isAiEnabled, appInsights, eventConstants.USER.LOGOUT, trackProps);\n store.logout();\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default SidebarPatient\n","import { observable, action } from \"mobx\";\nimport { createContext } from \"react\";\nimport { api } from \"../api\";\n\nclass NotificationStore {\n @observable notifications = [];\n\n @action updateNotifications(newNotification) {\n this.notifications = newNotification;\n }\n\n @action setNotifications(public_id) {\n api.get(\"/user/\" + public_id + \"/inbox\").then((response) => {\n this.updateNotifications(response.data.inbox);\n });\n }\n}\n\nexport const NotificationStoreInstance = new NotificationStore();\n\nexport default createContext(NotificationStoreInstance);\n","import React, { useContext, useState, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { Link } from \"react-router-dom\";\nimport registrationStore from \"../../components/registrationStore\";\nimport notificationStore from \"../../components/notificationStore\";\nimport InboxIcon from \"../../assets/images/inbox-icon.png\";\nimport HelpdeskIcon from \"../../assets/images/helpdesk-icon.png\";\nimport LogoutIcon from \"../../assets/images/logout-icon.png\";\nimport Therapist from \"../../assets/images/therapist-icon-man.png\";\nimport AdminIcon from \"../../assets/images/admin.png\";\nimport Book from \"../../assets/images/book.png\";\nimport { api } from \"../../api\";\nimport { useTranslation } from \"react-i18next\";\nimport { FaUserPlus } from \"react-icons/fa\";\nimport { useAppInsightsContext } from \"@microsoft/applicationinsights-react-js\";\nimport { eventConstants, getInsightUserType } from \"../../insights-constants\";\nimport { isAppInsigthsEnabled } from \"../../insights\";\nimport { trackEvent } from './../../insights-track';\n\nconst Wrapper = styled.div`\n position: absolute;\n top: 70px;\n right: 10px;\n border: 0.5px solid #a5a5af;\n background-color: white;\n border-radius: 20px;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n padding-top: 20px;\n padding-bottom: 20px;\n z-index: 99999;\n`;\n\nconst Notification = styled.div`\n display: inline-block;\n height: 15px;\n width: 15px;\n line-height: 1;\n background-color: #f23539;\n border: 1px solid #f23539;\n border-radius: 100%;\n font-size: 13px;\n text-align: center;\n vertical-align: middle;\n color: #ffffff;\n margin-left: 20px;\n`;\nconst MenuLink = styled.div`\n display: flex;\n align-items: center;\n padding-top: 10px;\n padding-bottom: 10px;\n padding-left: 30px;\n padding-right: 60px;\n`;\n\nconst Icon = styled.img`\n height: 22px;\n width: 22px;\n`;\n\nconst RouteName = styled.div`\n color: #929292;\n text-decoration: none;\n padding-left: 10px;\n`;\n\nconst AccountLink = styled(Link)`\n text-decoration: none;\n`;\n\nconst LinkManual = styled.a`\n text-decoration: none;\n`;\n\nconst SeperatorLine = styled.hr`\n color: #929292;\n width: 100%;\n border: 0.25px solid #929292;\n height: 1px;\n`;\n\nfunction AccountMenuDropdown(props) {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const notifications = useContext(notificationStore);\n\n const isAiEnabled = isAppInsigthsEnabled();\n const appInsights = useAppInsightsContext();\n const trackProps = {\n user: {\n type: getInsightUserType(user.therapist),\n public_id: user.public_id \n } \n }\n\n function handleClick() {\n trackEvent(isAiEnabled, appInsights, eventConstants.USER.LOGOUT, trackProps);\n store.logout();\n }\n\n return (\n \n {user.admin && (\n \n \n \n Admin\n \n \n )}\n \n \n \n \n {t(\"accountMenuDropdown.inbox\")}{\" \"}\n {notifications.notifications.length > 0 && (\n {notifications.notifications.length}\n )}{\" \"}\n \n \n \n \n \n \n {t(\"accountMenuDropdown.helpdesk\")}\n \n \n {user.therapist ? (\n \"\"\n ) : (\n \n \n \n {t(\"accountMenuDropdown.mytherapists\")}\n \n \n )}\n \n \n \n {t(\"accountMenuDropdown.userManual\")}\n \n \n \n \n \n \n {t(\"accountMenuDropdown.logout\")}\n \n \n \n );\n}\n\nexport default AccountMenuDropdown;\n","import React, { useState, useEffect, useContext } from \"react\";\nimport styled from \"styled-components\";\n\nimport AccountMenuDropdown from \"../../components/accountMenu/accountMenuDropdown\";\nimport { api } from \"../../api\";\nimport { FaChevronDown } from \"react-icons/fa\";\nimport { P } from \"../../components/styled/typography\";\nimport { observer } from \"mobx-react\";\nimport TherapistIcon from \"../../assets/images/therapist-icon.png\";\nimport TherapistIconMan from \"../../assets/images/therapist-icon-man.png\";\nimport PatientIcon from \"../../assets/images/patient-icon.png\";\nimport PatientIconWoman from \"../../assets/images/patient-icon-woman.png\";\nimport registrationStore from \"../registrationStore\";\nimport notificationStore from \"../notificationStore\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Wrapper = styled.div`\n display: none;\n\n @media (min-width: 980px) {\n display: block;\n position: relative;\n }\n`;\n\nconst ActiveUser = styled.div`\n position: absolute;\n top: 20px;\n right: 10px;\n display: flex;\n align-items: center;\n cursor: pointer;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n`;\n\nconst UserIcon = styled.div`\n position: relative;\n margin-right: 15px;\n`;\n\nconst Icon = styled.img`\n height: 30px;\n width: 30px;\n`;\n\nconst Chevron = styled(FaChevronDown)`\n color: #51c0cf;\n font-size: 24px;\n padding-left: 10px;\n`;\n\nconst Notification = styled.div`\n display: inline-block;\n height: 10px;\n width: 10px;\n line-height: 1;\n background-color: #f23539;\n border: 1px solid #f23539;\n border-radius: 100%;\n font-size: 10px;\n text-align: center;\n vertical-align: middle;\n color: #ffffff;\n position: absolute;\n top: 20px;\n left: 20px;\n`;\n\nconst User = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n`;\n\nconst Name = styled(P)`\n color: #51c0cf;\n font-weight: 600;\n padding-left: 10px;\n margin-top: 0px;\n margin-bottom: 0px;\n`;\n\nconst Role = styled(P)`\n margin-top: 0px !important;\n margin-bottom: 0px !important;\n`;\n\nconst AccountMenu = observer((props) => {\n const { t, i18n } = useTranslation();\n\n const [open, setOpen] = useState(false);\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const notificationstore = useContext(notificationStore);\n const [notifications, setNotifications] = useState(0);\n const handleClick = () => {\n setOpen(!open);\n };\n\n useEffect(() => {\n notificationstore.setNotifications(user.public_id);\n }, []);\n\n return (\n \n \n \n {notificationstore.notifications.length > 0 && (\n {notificationstore.notifications.length}\n )}\n \n \n \n {props.name}\n \n {props.role ? (\n {t(\"accountMenu.therapist\")}\n ) : (\n {t(\"accountMenu.patient\")}\n )}\n \n \n \n \n {open ? : \"\"}\n \n );\n});\n\nexport default AccountMenu;\n","import React, { useContext } from \"react\";\nimport registrationStore from \"../registrationStore\";\nimport SidebarPatient from \"../sidebarPatient\";\nimport AccountMenu from \"../accountMenu/accountMenu\";\n\nfunction PatientOverlay() {\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n return (\n
\n \n \n
\n );\n}\n\nexport default PatientOverlay;\n","import styled from 'styled-components'\n\nconst pageWrapper = styled.div`\n padding: 100px 30px 0px 30px;\n @media (min-width: 980px){\n padding: 10px 30px;\n margin-bottom: 40px;\n }\n\n`\n\nexport default pageWrapper\n","import React, { useContext } from \"react\";\nimport styled from \"styled-components\";\nimport { P } from \"../components/styled/typography\";\nimport Button from \"../components/styled/button\";\nimport { FaEdit } from \"react-icons/fa\";\nimport { Link } from \"react-router-dom\";\nimport Card from \"../components/styled/card\";\nimport { useTranslation } from \"react-i18next\";\nimport { isAppInsigthsEnabled } from \"../insights\";\nimport { useAppInsightsContext } from '@microsoft/applicationinsights-react-js';\nimport { eventConstants, getInsightUserType } from \"../insights-constants\";\nimport { trackEvent } from \"../insights-track\";\nimport RegistrationStore from \"../components/registrationStore\";\n\nconst TaskCard = styled(Card)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n padding: 10px 15px;\n margin: 10px 0px;\n\n @media (min-width: 980px) {\n width: 49.5%;\n }\n`;\n\nconst Bold = styled(P)`\n font-weight: bold;\n margin: 0px;\n`;\nconst StartButton = styled(Button)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 5px 15px;\n font-size: 16px;\n`;\n\nconst EditIcon = styled(FaEdit)`\n color: #ffffff;\n margin-right: 5px;\n font-size: 16px;\n`;\n\nconst A = styled(Link)`\n text-decoration: none;\n`;\n\nfunction TodayTask(props) {\n const { t, i18n } = useTranslation();\n const store = useContext(RegistrationStore);\n const user = JSON.parse(store.user)\n\n const isAiEnabled = isAppInsigthsEnabled();\n const appInsights = useAppInsightsContext();\n const trackProps = {\n user: {\n type: getInsightUserType(props.patient?.therapist),\n public_id: user?.public_id\n }\n }\n\n const determineType = () => {\n if (props.data.type === \"Document\") {\n return \"consultMaterial/Detail/\" + props.data.task_id;\n }\n if (props.data.type === \"stappenplan\" || props.data.type === \"dagboek\" || props.data.type === \"stappenplanValidatie\") {\n return \"Assignments/Detail/\" + props.data.id;\n }\n return \"consultMaterial/mediaDetail/\" + props.data.task_id;\n };\n\n return (\n \n \n {t(\"resultNavigation.assignment\")} {props.title} - {props.data.title}\n \n trackEvent(isAiEnabled, appInsights, eventConstants.PRESS.ASSIGNMENTS.START_ASSIGNMENT, trackProps)}\n >\n \n \n {t(\"metronoom.start\")}\n \n \n \n );\n}\n\nexport default TodayTask;\n","import styled, { keyframes } from \"styled-components\";\n\nconst fadein = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`;\n\nexport const shake = keyframes`\n 0% { transform: translate(1px, 0px); }\n 10% { transform: translate(-1px, 0px); }\n 20% { transform: translate(-3px, 0px); }\n 30% { transform: translate(3px, 0px); }\n 40% { transform: translate(1px, 0px); }\n 50% { transform: translate(-1px, 0px); }\n 60% { transform: translate(-3px, 0px); }\n 70% { transform: translate(3px, 0px) ; }\n 80% { transform: translate(-1px, 0px); }\n 90% { transform: translate(1px, 0px); }\n 100% { transform: translate(1px, 0px); }\n`;\n\nexport const PageAnimation = styled.div`\n animation: ${fadein} 0.5s;\n`;\n\nexport const uploadKeyframes = keyframes`\n from {\n background-position: right top;\n }\n to {\n background-potition: right bottom;\n }\n`;\n","import axios from 'axios';\n\nconst socketUrl = process.env.REACT_APP_SOCKET_URL || 'http://localhost:3001';\nconst communicationApiUrl = process.env.REACT_APP_API_URL || 'https://localhost:5001/communication';\nconst telephonApiUrl = process.env.REACT_APP_COBRAND_API || \"https://localhost:5001/v1\";\n\nlet communicationApi = null;\nlet telephonApi = null;\nlet socketApi = null;\n\nconst getSocketApi = () => socketApi;\nconst getSocketUrl = () => socketUrl;\nconst getCommunicationApi = () => communicationApi;\nconst getTelephonApi = () => telephonApi;\nconst getCommunicationApiUrl = () => communicationApiUrl;\nconst getTelephonApiUrl = () => telephonApiUrl;\n\nconst createAPI = () => {\n socketApi = axios.create({\n baseURL: getSocketUrl(),\n headers: {'x-access-token': window.localStorage.getItem('token') || ''}\n });\n\n communicationApi = axios.create({\n baseURL: communicationApiUrl,\n headers: {'x-access-token': window.localStorage.getItem('token') || ''}\n });\n\n telephonApi = axios.create({\n baseURL: telephonApiUrl,\n headers: {'x-access-token': window.localStorage.getItem('token') || ''}\n })\n};\n\nexport default {\n getCommunicationApi,\n getTelephonApi,\n getCommunicationApiUrl,\n getTelephonApiUrl,\n createAPI,\n getSocketApi,\n getSocketUrl\n}\n","import api from '../api';\n\nconst createChat = (body) => api.getCommunicationApi().post(`/chats`, body);\nconst getChats = () => api.getCommunicationApi()?.get(`/chats`);\nconst getChat = (id) => api.getCommunicationApi()?.get(`/chats/${id}`);\nconst finishChat = (id) => api.getCommunicationApi().put(`/chats/${id}`, {id, finished: true});\nconst setViewed = (id) => api.getCommunicationApi().put(`/chats/${id}`, {id, counts: 0});\nconst sendMessage = (id, message, user_id) => api.getCommunicationApi().put(`/chats/${id}/message`, {id, new_message: message, instigator_id: user_id});\n\nexport default {\n createChat,\n getChats,\n getChat,\n finishChat,\n setViewed,\n sendMessage\n}\n","import api from '../api';\n\nexport const INITIATOR = 'initiator';\nexport const RECEIVER = 'receiver';\n\nconst getUser = (id) => api.getCommunicationApi().get(`/users/${id}`);\n\nexport default {\n getUser\n}\n","import {createContext} from 'react';\nimport {action, observable} from 'mobx';\nimport api from '../api';\nimport userService from '../services/userService';\nimport chatService from '../services/chatService';\n\nclass ChatStore {\n @observable user = null;\n @observable initialized = false;\n @observable activeChat = null;\n @observable numberOfChats = 0;\n @observable showNotification = false;\n\n @action setActiveChat(chat, showNotification = false) {\n this.activeChat = chat;\n this.showNotification = showNotification;\n }\n\n @action setNumberOfChats(newNumber) {\n this.numberOfChats = newNumber;\n }\n\n @action initialize(userId) {\n api.createAPI();\n Promise.all([this.fetchAndSetUser(userId)]).then(() => this.initialized = true);\n }\n\n @action finish(chatId) {\n chatService.finishChat(chatId);\n }\n\n fetchAndSetUser(userId) {\n return userService.getUser(userId).then(({data}) => this.user = data);\n }\n}\n\nexport const ChatStoreInstance = new ChatStore();\n\nexport default createContext(ChatStoreInstance);","import React, { useEffect, useState, useContext } from \"react\";\nimport PatientOverlay from \"../../components/overlays/patientOverlay\";\nimport { observer } from \"mobx-react\";\nimport registrationStore from \"../../components/registrationStore\";\nimport Global from \"../../components/styled/global\";\nimport { PageTitle, SmallTitle } from \"../../components/styled/typography\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport TodayTask from \"../../components/todayTask\";\nimport { api } from \"../../api\";\nimport LoadSpinner from \"../../components/loadspinner\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport Flash from \"../../components/styled/flashMessage\";\nimport { Redirect, Link } from \"react-router-dom\";\nimport styled, { keyframes } from \"styled-components\";\nimport { useTranslation } from \"react-i18next\";\nimport chatService from '../../communication-module/services/chatService';\nimport ChatStore from \"../../communication-module/stores/chat.store\";\nimport { P } from \"../../components/styled/typography\";\nimport { FaTrashAlt, FaEdit } from \"react-icons/fa\";\nimport Button from \"../../components/styled/button\";\n\nconst FlashMessage = styled(Flash)`\n :hover {\n cursor: pointer;\n }\n`;\n\nconst EditIcon = styled(FaEdit)`\n color: #FFFFFF;\n margin-right: 5px;\n font-size: 16px;\n`\n\nconst Title = styled(SmallTitle)`\n margin-top: 10px;\n margin-right: 40px;\n`;\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n\n @media(min-width: 980px){\n flex-direction: row;\n justify-content: space-between;\n }\n`\n\nconst Buttons = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n margin-top: 15px;\n\n @media(min-width: 980px){\n margin-top: 0px;\n margin-left: 10px;\n justify-content: flex-start;\n }\n`\n\nconst Overlay = styled.div`\n display: none;\n\n /*@media (max-width: 980px){\n z-index: 999;\n background-color: white;\n position: fixed;\n top: 0;\n bottom: 0px;\n height: 100vh;\n width: 100vw;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center; \n }*/\n`;\n\nconst TrashIcon = styled(FaTrashAlt)`\n color: #FFFFFF;\n margin-right: 5px;\n font-size: 16px;\n`\n\nconst PrimaryButton = styled(Button)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n margin: 3px 0px;\n width: 100%;\n`\n\nconst RedButton = styled(Button)`\n background-color: #DC393D;\n border-color: #DC393D;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n margin: 3px 0px;\n width: 100%;\n\n &:hover {\n background-color: #b02a2e;\n border-color: #b02a2e;\n }\n`\n\nconst Empty = styled.div`\n width: 1px;\n height: 1px;\n`\n\nconst StyledLink = styled(Link)`\n text-decoration: none;\n`\n\nconst fadein = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`\n\nconst Wrapper = styled.div`\n background-color: #FFFFFF;\n box-sizing: border-box;\n width: 100%;\n padding: 20px;\n border: 1px solid #FFFFFF;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n height: auto;\n animation: ${fadein} 1s;\n\n`\n\nconst A = styled(Link)`\n text-decoration: none;\n width: 100%;\n margin: 5px 0px;\n\n @media (min-width: 980px){\n width: 49.5%;\n }\n`\n\nconst SubTitle = styled(P)`\n font-style: italic;\n margin-top: 0px;\n margin-bottom: 0px;\n font-size: 16px;\n`\n\nconst Dashboard = observer(() => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [assignments, setAssignments] = useState([]);\n const [chats, setChats] = useState([]);\n const [Loading, setLoading] = useState(true);\n const [redirect, setRedirect] = useState(false);\n const [individuFinished, setIndividuFinished] = useState(false);\n const chatstore = useContext(ChatStore);\n\n useEffect(() => {\n api.get(\"/tasksOfToday/\" + user.public_id).then((response) => {\n if (response.data.individu_finished && !store.individuFinished) {\n store.setIndividuFinished(true);\n ShowIndividuFinished();\n }\n setAssignments(response.data.tasks);\n setLoading(false);\n });\n\n chatService.getChats().then(({data}) => setChats(data));\n }, []);\n\n useEffect(() => {\n chatService.getChats().then(({data}) => setChats(data));\n }, [chatstore.numberOfChats, chatstore.activeChat]);\n\n const HandleClick = () => {\n store.setPlan(user.plan);\n store.setPlanLength(user.plan_period);\n store.addUserAttribute(\"ID\", user.public_id);\n setRedirect(true);\n };\n\n const HandleRegistrationClick = () => {\n store.setRegistrationMessage(false);\n }\n\n const ShowIndividuFinished = () => {\n setIndividuFinished(true);\n setTimeout(function(){\n setIndividuFinished(false)\n }, 5000)\n }\n\n const GetChatPartenerFullName = (attendees) => {\n var fullName;\n attendees.forEach(attendee => {\n if (attendee && attendee.public_id !== user.public_id) fullName = `${attendee.firstName} ${attendee.lastName}`;\n });\n return fullName;\n }\n\n const removeChat = (chatId) => {\n chatstore.finish(chatId);\n };\n\n const GetCountNewMessages = (chat) => {\n const last = chat.messages[chat.messages.length - 1];\n return last && last.instigatorId != user.public_id ? chat.counts : 0;\n }\n\n return (\n \n \n \n \n {t(\"sidebarPatient.over\")}\n {store.registrationMessage && {t(\"dashboard.succesRegister\")}}\n {individuFinished && {t(\"dashboard.individuFinished\")}}\n {user.expired && {t(\"dashboard.expired\")}}\n {redirect && }\n {!user.expired && {t(\"dashboard.tasksToday\")}}\n {!user.expired &&\n (Loading ? (\n \n ) : assignments.length > 0 ? (\n assignments.map((assignment) => {\n return assignment.taken.map((task, index) => (\n \n ));\n })\n ) : (\n
{t(\"dashboard.noTasks\")}
\n ))}\n {!user.expired && {t(\"dashboard.chats\")}}\n {!user.expired &&\n (chats.length > 0 ? (\n chats.map((chat) => (\n \n \n \n
\n {t(\"dashboard.chatTitle\")} {GetChatPartenerFullName(chat.attendees)}\n {GetCountNewMessages(chat)} {t(\"dashboard.chatCount\")}\n
\n \n \n \n {t(\"dashboard.chatOpen\")}\n \n \n removeChat(chat.id)}>\n {t(\"dashboard.chatDelete\")}\n \n \n
\n
\n
\n ))) : (\n

{t(\"chats.leeg\")}

\n ))\n }\n
\n \n
\n
\n );\n});\n\nexport default Dashboard;\n","import React, { useContext } from \"react\";\nimport registrationStore from \"./registrationStore\";\nimport notificationStore from \"./notificationStore\";\nimport styled from \"styled-components\";\nimport { Link } from \"react-router-dom\";\nimport Button from \"../components/styled/button\";\nimport { P } from \"../components/styled/typography\";\nimport { IoIosClose } from \"react-icons/io\";\nimport TherapistIcon from \"../assets/images/therapist-icon-man.png\";\nimport { api } from \"../api\";\nimport { useTranslation } from \"react-i18next\";\n\n\nconst Wrapper = styled.div`\n background-color: #ffffff;\n box-sizing: border-box;\n padding: 15px;\n border: 1px solid #ffffff;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n display: flex;\n flex-direction: column;\n position: relative;\n margin: 15px auto;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n }\n`;\n\nconst User = styled(P)`\n font-weight: 700;\n color: #51c0cf;\n margin-top: 0px;\n margin-bottom: 0px;\n`;\n\nconst Flex = styled.div`\n display: flex;\n\n flex-direction: column;\n\n @media (min-width: 980px) {\n flex-direction: row;\n align-items: center;\n width: 95%;\n }\n`;\n\nconst Message = styled.div`\n padding-left: 0px;\n padding-top: 5px;\n @media (min-width: 980px) {\n padding-left: 45px;\n padding-top: 0px;\n }\n`;\n\nconst Text = styled(P)`\n padding-right: 2px;\n margin-top: 0px;\n margin-bottom: 0px;\n`;\n\nconst UserIcon = styled.img`\n width: 25px;\n height: 25px;\n margin-right: 5px;\n\n @media (min-width: 980px) {\n width: 25px;\n height: 25px;\n margin-right: 15px;\n }\n`;\n\nconst Icon = styled(IoIosClose)`\n color: #51c0cf;\n font-size: 40px;\n cursor: pointer;\n position: absolute;\n top: 5px;\n right: 5px;\n\n @media (min-width: 980px) {\n position: static;\n }\n`;\n\nconst MobileFlex = styled.div`\n display: flex;\n flex-direction: row;\n padding-bottom: 5px;\n align-items: flex-end;\n\n @media (min-width: 980px) {\n flex-direction: row;\n padding-bottom: 0px;\n align-items: center;\n }\n`;\n\nconst TextFlex = styled.div`\n display: flex;\n\n @media (min-width: 980px) {\n display: block;\n }\n`;\n\nconst GreenButton = styled(Button)`\n background-color: #45ae7c;\n border-color: #45ae7c;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n margin: 3px 3px;\n width: 100%;\n\n &:hover {\n background-color: #3a9168;\n border-color: #3a9168;\n }\n`;\n\nconst A = styled(Link)`\n text-decoration: none;\n`\nconst RedButton = styled(Button)`\n background-color: #dc393d;\n border-color: #dc393d;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n margin: 3px 3px;\n width: 100%;\n\n &:hover {\n background-color: #b02a2e;\n border-color: #b02a2e;\n }\n`;\n\nconst FlexRow = styled.div`\n display: flex;\n`;\n\nfunction Notification(props) {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const notifications = useContext(notificationStore);\n const user = JSON.parse(store.user);\n\n const deleteMessageFromInbox = () => {\n notifications.setNotifications(user.public_id);\n return api.delete(\"/message/\" + props.message.id).then(function (response) {\n props.update();\n });\n };\n\n const sendEmailNotification = (status = \"accepted\") => {\n api.get(\"/user/\" + props.message.sender_id).then((res) => {\n const therapistEmail = res.data.user.email;\n\n api.post(\"/mailWithTemplate\", {\n sender: \"info@telephon.digital\",\n to: therapistEmail,\n subject: `${user.firstName} ${user.lastName} ${status} your request`,\n template_name: \"accepted-request-to-become-client\",\n template_content: [{\"name\": \"client-name\", \"content\": user.firstName}]\n });\n });\n };\n\n const declineInvite = () => {\n api.get(\"/user/\" + props.message.sender_id).then((res) => {\n const therapistEmail = res.data.user.email;\n deleteMessageFromInbox().then(() => {\n sendEmailNotification(\"declined\");\n });\n });\n };\n\n const acceptInvite = () => {\n api.post(\"/linkPatient/\" + user.public_id, { therapist_id: props.message.sender_id })\n .then((res) => {\n deleteMessageFromInbox();\n api.get(\"/user/\" + user.public_id).then(res => {\n store.setUser(JSON.stringify(res.data.user));\n })\n })\n .then(() => {\n sendEmailNotification(\"accepted\");\n });\n };\n const isAddedAsPatientMessage = props.message.message_type === \"Patient-Therapist-Link\";\n const isEndedLinkMessage = props.message.message_type === \"end-link\";\n const isAcceptedMessage = props.message.message_type === \"link-accept\";\n const isNewAssignmentMessage = props.message.message_type === \"new-assignment\";\n const isPlanNotification = props.message.message_type === \"plan-notification\";\n\n const displayCorrectMessage = () => {\n if (isAddedAsPatientMessage) return props.message.sender_name + \" \" + t(\"notification.addPatient\");\n else if (isEndedLinkMessage)\n return (\n t(\"notification.linkDeletedPart1\") +\n \" \" +\n props.message.sender_name +\n \" \" +\n t(\"notification.linkDeletedPart2\")\n );\n else if (isAcceptedMessage) return props.message.sender_name + \" \" + t(\"notification.acceptedMessage\");\n else if (isNewAssignmentMessage)\n return props.message.sender_name + \" \" + t(\"notification.newAssignmentMessage\");\n else if (isPlanNotification) return t('inbox.planNotification')\n return props.message.body;\n };\n\n const displayedMessage = displayCorrectMessage();\n\n return (\n \n {isPlanNotification ? \n \n \n \n \n \n {t(\"notification.noteOf\")}:\n {props.message.sender_name}\n \n \n \n {displayedMessage}\n \n \n \n :\n \n \n \n \n {t(\"notification.noteOf\")}:\n {props.message.sender_name}\n \n \n \n {displayedMessage}\n \n \n }\n \n {isAddedAsPatientMessage ? (\n \n {t(\"notification.accept\")}\n {t(\"notification.decline\")}\n \n ) : (\n \n )}\n \n );\n}\n\nexport default Notification;\n","import React, { useContext, useEffect, useState } from \"react\";\nimport Notification from \"./notification\";\nimport { PageTitle } from \"./styled/typography\";\nimport registrationStore from \"./registrationStore\";\nimport notificationStore from \"./notificationStore\";\nimport { observer } from \"mobx-react-lite\";\nimport { api } from \"../api\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Inbox = observer(() => {\n const { t, i18n } = useTranslation();\n const [messages, setMessages] = useState([]);\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const notifications = useContext(notificationStore);\n\n useEffect(() => {\n api.get(\"/user/\" + user.public_id + \"/inbox\").then((response) => {\n setMessages(response.data.inbox);\n });\n }, []);\n\n const update = () => {\n api.get(\"/user/\" + user.public_id + \"/inbox\").then((response) => {\n setMessages(response.data.inbox);\n notifications.setNotifications(user.public_id);\n });\n };\n return (\n
\n {t(\"accountMenuDropdown.inbox\")}\n {messages.length > 0 ? (\n messages.map((message) => {\n return ;\n })\n ) : (\n

{t(\"inbox.leeg\")}

\n )}\n
\n );\n});\n\nexport default Inbox;\n","import React, { useContext } from \"react\";\nimport PatientOverlay from \"../../components/overlays/patientOverlay\";\nimport Global from \"../../components/styled/global\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport registrationStore from \"../../components/registrationStore\";\nimport { observer } from \"mobx-react-lite\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport GeneralInbox from \"../../components/generalInbox\";\n\nconst Inbox = observer(() => {\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n\n return (\n \n \n \n \n \n \n \n \n );\n});\n\nexport default Inbox;\n","import React from \"react\"\nimport styled from \"styled-components\"\n\nimport Card from '../components/styled/card'\nimport { H2, P } from '../components/styled/typography'\n\nconst Wrapper = styled(Card)`\n padding: 30px;\n width: 100%;\n margin-bottom: 10px;\n overflow: hidden;\n\n img {\n max-width: 100%;\n }\n\n white-space: normal;\n word-wrap: break-word;\n\n @media (min-width: 980px){\n width: 98%;\n overflow: initial;\n }\n`\n\nconst Document = styled.div`\n image{\n width: 75%;\n }\n`\n\nfunction Article(props){\n\n return(\n \n

{props.title}

\n \n
\n )\n}\n\nexport default Article","import React, {useState, useEffect} from \"react\"\nimport styled from \"styled-components\"\nimport {api} from \"../api\"\nimport Card from '../components/styled/card'\nimport { H4 } from '../components/styled/typography'\nimport TherapistIconMan from \"../assets/images/therapist-icon-man.png\"\nimport TherapistIcon from '../assets/images/therapist-icon.png'\nimport LoadSpinner from '../components/loadspinner'\n\nconst Wrapper = styled(Card)`\n padding: 30px;\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n\n @media (min-width: 980px){\n width: 24%;\n }\n`\n\nconst Icon = styled.img`\n height: 50px;\n margin-right: 15px;\n`\n\nconst Name = styled(H4)`\n margin: 0px;\n`\n\nfunction Article(props){\n const [therapist, setTherapist] = useState({})\n const [loading, setLoading] = useState(true)\n const public_id = props.public_id\n\n useEffect(() => {\n api.get('/user/' + public_id).then((response) => {\n setTherapist(response.data.user)\n setLoading(false)\n })\n }, []);\n if (loading){\n return(\n \n \n \n )\n } else {\n return(\n \n \n {therapist.firstName + \" \" + therapist.lastName}\n \n )\n }\n}\n\nexport default Article","import { observable, action } from \"mobx\"\nimport { createContext } from \"react\";\n\nclass ResultStore{\n @observable result = \"\";\n @observable date =\"\";\n @observable recording;\n @observable isRecording = false;\n\n @action setResult(newResult){\n this.result = newResult\n }\n\n @action setRecording(newRecording){\n this.recording = newRecording\n }\n\n @action clearRecording(){\n this.recording = undefined\n }\n \n @action clearResult(){\n this.result = \"\";\n }\n\n @action setDate(newDate){\n this.date = newDate\n }\n\n @action setIsRecording() {\n this.isRecording = ! this.isRecording;\n }\n}\n\n\nexport const ResultStoreInstance = new ResultStore()\n\nexport default createContext(ResultStoreInstance)","import React, { useState, useEffect, useContext } from \"react\";\nimport styled from \"styled-components\";\nimport PatientOverlay from \"../../components/overlays/patientOverlay\";\nimport Global from \"../../components/styled/global\";\nimport Button from \"../../components/styled/button\";\nimport { PageTitle, P } from \"../../components/styled/typography\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport Article from \"../../components/article\";\nimport Author from \"../../components/author\";\nimport { observer } from \"mobx-react\";\nimport { api } from \"../../api\";\nimport LoadSpinner from \"../../components/loadspinner\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport registrationStore from \"../../components/registrationStore\";\nimport resultStore from \"../../components/resultStore\";\nimport { useTranslation } from \"react-i18next\";\nimport { Redirect } from \"react-router-dom\";\nimport qs from \"qs\";\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n align-items: flex-start;\n }\n`;\n\nconst FlexColumn = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`;\n\nconst DoneButton = styled(Button)`\n margin-top: 20px;\n`;\n\nconst ButtonDiv = styled.div``;\nconst Description = styled(P)`\n margin-top: 0px;\n color: #545454;\n`;\n\nconst MateriaalDetail = observer((props) => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const RStore = useContext(resultStore);\n const user = JSON.parse(store.user);\n const startTime = Date.now();\n const [document, setDocument] = useState({});\n const [loading, setLoading] = useState(true);\n const [redirect, setRedirect] = useState(false);\n const [isExercise, setIsExercise] = useState();\n const [exercise, setExercise] = useState();\n const { id } = props.match.params;\n const task_id = qs.parse(props.location.search, { ignoreQueryPrefix: true }).task_id;\n\n useEffect(() => {\n api.get(\"/document/\" + id).then((response) => {\n setDocument(response.data.document);\n if (task_id) {\n api.get(\"/task/\" + task_id).then((res) => {\n setExercise(res.data.task);\n setLoading(false);\n });\n } else {\n setLoading(false);\n }\n });\n\n RStore.clearRecording();\n }, []);\n\n useEffect(() => {\n var d = qs.parse(props.location.search, { ignoreQueryPrefix: true }).exercise;\n setIsExercise(d);\n }, [props.location.search]);\n\n const HandleSubmit = () => {\n setRedirect(true);\n };\n return (\n \n \n \n \n {t(\"sidebarPatient.material\")}\n\n {loading ? (\n \n ) : (\n \n \n {isExercise && {exercise.description}}\n
\n \n {isExercise && (\n {t(\"document.readingready\")}\n )}\n \n \n \n \n )}\n {redirect && (\n \n )}\n \n \n \n );\n});\n\nexport default MateriaalDetail;\n","import { observable, action } from \"mobx\";\nimport { createContext } from \"react\";\nimport api from '../../api';\n\nclass DisciplineStore{\n @observable disciplines = [];\n @observable initialized = false;\n\n @action setDisciplines(newDisciplines){\n this.disciplines = newDisciplines;\n }\n\n @action getSubdisciplines(discipline_name){\n var discipline = this.disciplines.find(x => x.name === discipline_name);\n return discipline ? discipline.subdisciplines : [];\n }\n\n @action setInitialized(newInitialized){\n this.initialized = newInitialized;\n }\n}\n\n\nexport const DisciplineStoreInstance = new DisciplineStore()\n\nexport default createContext(DisciplineStoreInstance)","import React, { useContext } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport DisciplineStore from \"../stores/disciplineStore\";\n\nexport function Disciplines(props) {\n const { t, i18n } = useTranslation();\n const store = useContext(DisciplineStore);\n const disciplines = store.disciplines;\n\n return disciplines.map((discipline) => (\n \n ));\n}\n\nexport function Subdisciplines(props) {\n const { t, i18n } = useTranslation();\n const store = useContext(DisciplineStore);\n const subdisciplines = store.getSubdisciplines(props.discipline);\n\n return subdisciplines?.map((subDiscipline) => (\n \n ));\n}\n","import { observable, action } from \"mobx\";\nimport { createContext } from \"react\";\nimport api from '../../api';\n\nclass LanguageStore{\n @observable languages = [];\n @observable initialized = false;\n\n @action setLanguages(newLanguages){\n this.languages = newLanguages;\n }\n\n @action setInitialized(newInitialized){\n this.initialized = newInitialized;\n }\n\n @action getLanguage(language_code){\n return this.languages.filter(x => x.value === language_code).map(x => x.name).pop();\n }\n}\n\n\nexport const LanguageStoreInstance = new LanguageStore()\n\nexport default createContext(LanguageStoreInstance)","import React, { useContext } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport LanguageStore from \"../stores/languageStore\";\n\nexport function Languages(props) {\n const { t, i18n } = useTranslation();\n const store = useContext(LanguageStore);\n const languages = store.languages;\n\n return languages.map((language) => (\n \n ));\n}\n","import React from \"react\"\nimport styled from \"styled-components\"\nimport { useTranslation } from \"react-i18next\"\n\nimport { FaSearch } from 'react-icons/fa'\n\nconst SearchWrapper = styled.div`\n display: flex;\n flex-direction: row;\n align-items: stretch;\n box-sizing: border-box;\n margin: 10px 0px;\n @media (min-width: 980px){\n margin: 0px;\n }\n`\n\nconst SearchBox = styled.input`\n border: 1px solid #51C0CF;\n font-size: 18px;\n letter-spacing: 0.05em;\n border-top-radius: 7px;\n border-bottom-radius: 7px;\n padding: 10px;\n padding-left: 10px;\n outline: none;\n height: 25px;\n width: calc(100% - 50px);\n \n @media (min-width: 980px){\n width: auto;\n }\n\n`\n\nconst Button = styled.button`\n border: 1px solid #51C0CF;\n background-color: #FFFFFF;\n border-top-right-radius: 7px;\n border-bottom-right-radius: 7px;\n cursor: pointer;\n outline: none;\n \n`\n\nconst Icon = styled(FaSearch)`\n color: #51C0CF;\n font-size: 16px;\n padding: 10px;\n padding-bottom: 11px;\n vertical-align: middle;\n \n`\n\nfunction SearchBar(props){\n const { t, i18n } = useTranslation()\n\n return(\n \n \n \n )\n}\n\nexport default SearchBar","import React, { useEffect, useState } from 'react';\nimport { SelectStyle } from '../styled/select';\nimport { useTranslation } from \"react-i18next\";\nimport { api } from \"../../api\";\nimport Select from \"react-select\";\n\n\n\nconst TagSelect = (props) => {\n const { t, i18n } = useTranslation()\n const [keywords, setKeywords] = useState([]);\n const [selectedTags, setSelectedTags] = useState();\n const [loading, setLoading] = useState(true);\n\n const TagSelectStyle = {\n control: (styles) => ({\n ...styles,\n marginRight: \"10px\",\n marginBottom: \"8px\",\n minWidth: \"250px\",\n border: \"1px solid #51C0CF\",\n backgroundColor: \"#FFFFFF\",\n color: \"#000000\",\n boxSizing: \"border-box\",\n boxShadow: \"0px 4px 4px rgba(197, 197, 197, 0.25)\",\n borderRadius: \"10px\",\n outline: \"none\",\n fontSize: \"18px\",\n minHeight: \"50px\",\n verticalAlign: \"middle\",\n \":hover\": {\n ...styles[\":hover\"],\n border: \"1px solid #51C0CF\",\n },\n \":active\": {\n ...styles[\":active\"],\n border: \"1px solid #51C0CF\",\n },\n })\n }\n\n useEffect(() => {\n api.get('/tags').then((response) => {\n setKeywords(response.data.map((x) => {\n var data = {};\n data[\"value\"] = x.name;\n data[\"label\"] = t(x.name);\n return data;\n }))\n })\n }, []);\n\n useEffect(() => {\n if(selectedTags){\n props.setTags(selectedTags.map(x => x?.value))\n }\n }, [selectedTags]);\n\n useEffect(() => {\n if (keywords.length > 0) {\n const lst = props.currentTags?.map((x) => {\n if (x) {\n if (typeof x === \"string\") {\n var data = {};\n const key = keywords.find(y => y.value == x);\n return key;\n } else {\n var data = {};\n data[\"value\"] = x.name;\n data[\"label\"] = t(x.name);\n return data;\n }\n } else {\n return [];\n }\n });\n setSelectedTags(lst);\n setLoading(false);\n }\n \n \n }, [keywords]);\n\n return (\n <>\n {! loading && }\n \n )\n}\n\nexport default TagSelect;","import { useState } from \"react\";\n\n\nexport default function useLocalStorage(key, initialValue) {\n const [storedValue, setStoredValue] = useState(() => {\n const item = localStorage.getItem(key);\n return item ? JSON.parse(item) : initialValue;\n });\n\n const setValue = (value) => {\n setStoredValue(value);\n localStorage.setItem(key, JSON.stringify(value));\n }\n\n return [storedValue, setValue];\n}","import React, { useState, useContext } from \"react\";\nimport styled from \"styled-components\";\nimport { useTranslation } from \"react-i18next\";\nimport { Disciplines, Subdisciplines} from \"../resources/disciplines\";\nimport { Languages } from \"../resources/languages\";\nimport SearchBar from \"../search\";\nimport Button from \"../styled/button\";\nimport registrationStore from \"../registrationStore\";\nimport { FaFilter } from \"react-icons/fa\";\nimport { Form, Field, Formik } from \"formik\";\nimport TagSelect from \"../helperComponents/tagSelect\";\nimport LanguageStore from \"../stores/languageStore\";\nimport useLocalStorage from \"../hooks/localStorage\";\n\nconst FilterForm = styled(Form)`\n margin-left: 0px;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n margin-top: 15px;\n\n @media (min-width: 1200px) {\n align-items: flex-start;\n }\n`;\n\nconst FilterButton = styled(Button)`\n font-size: 18px;\n margin: 0px 0px 5px 0px;\n padding: 0px 44px 0px 44px;\n height: 50px; \n`;\n\nconst FilterBox = styled.div`\n display: flex;\n flex-direction: column;\n align-items: stretch;\n margin-top: 15px;\n margin-left: 0px;\n \n @media (min-width: 980px) {\n margin-left: 15px;\n padding-bottom: 10px;\n flex-direction: row;\n align-items: center;\n }\n`;\n\nconst Cols = styled.span`\n display: flex;\n flex-direction: column;\n vertical-align: middle; !important;\n \n @media (min-width: 980px) {\n flex-direction: row;\n align-items: center;\n }\n`;\n\nconst Input = styled(Field)`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 14px 14px;\n outline: none;\n font-size: 16px;\n\n @media (min-width: 980px) {\n margin-bottom: 5px;\n margin-right: 12px;\n }\n`;\n\nconst Icon = styled(FaFilter)`\n color: white;\n vertical-align: middle;\n margin-right: 7px;\n`;\n\nfunction Filter(props) {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [chosenText, setChosenText] = useLocalStorage(props.tag + 'FilterDataTitle', \"\");\n const langStore = useContext(LanguageStore);\n const language = langStore.getLanguage(i18n.language);\n\n const setInitialValues = () => {\n if (props.filters) {\n return props.filters\n } else {\n return { language: language, discipline: user?.speciality, subdiscipline: \"\", tags: [] };\n }\n }\n\n\n return (\n {\n const data = {\n language: values.language,\n discipline: values.discipline,\n subdiscipline: values.subdiscipline,\n title: chosenText,\n tags: values.tags\n };\n props.filterCallback(data);\n }}\n render={({values, handleSubmit}) => (\n \n \n setChosenText(e.target.value)} />\n\n \n {props.useTags && values.tags = tags} />}\n \n \n \n \n {!props.hideDiscipline && (<>\n \n \n \n \n \n \n \n \n )}\n\n \n \n {t(\"selectionOverlay.filter\")}\n \n \n \n \n )}\n />\n \n );\n}\n\nexport default Filter;\n","const dateConverter = (date) => {\n let today = date;\n const dd = String(today.getDate()).padStart(2, \"0\");\n const mm = String(today.getMonth() + 1).padStart(2, \"0\"); //January is 0!\n const yyyy = today.getFullYear();\n\n today = dd + \"/\" + mm + \"/\" + yyyy;\n return today;\n};\n\nexport default dateConverter;\n","import React, { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport styled from \"styled-components\";\nimport Card from \"../styled/card\";\nimport { H4, P } from \"../styled/typography\";\nimport { Redirect, Link } from \"react-router-dom\";\nimport dateConverter from \"../helperComponents/dateConverter\";\n\n// Icons\nimport Skilltraining from \"../../assets/images/vaardigheidstraining.svg\";\nimport FillEx from \"../../assets/images/invuloefening.svg\";\nimport Questionnaire from \"../../assets/images/vragenlijst.svg\";\nimport Document from \"../../assets/images/document.svg\";\nimport Test from \"../../assets/images/test.svg\";\n\nconst Wrapper = styled.div`\n width: 100%;\n margin-bottom: 15px;\n\n @media (min-width: 768px) {\n width: ${(props) => (props.taskSelect ? \"100%\" : \"49.5%\")};\n }\n`;\n\nconst CardStyled = styled(Card)`\n height: 100%;\n cursor: pointer;\n\n &.active {\n border: 2px solid #51c0cf;\n }\n`;\n\nconst CardLink = styled(Link)`\n color: #545454;\n text-decoration: none;\n &:hover {\n color: white;\n }\n`;\n\nconst Title = styled(H4)`\n margin: 0px;\n font-size: 18px;\n margin-top: 5px;\n\n @media (min-width: 980px) {\n font-size: 20px;\n }\n`;\n\nconst Header = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n`;\n\nconst Details = styled.div`\n display: flex;\n align-items: center;\n justify-content: flex-end;\n width: 33%;\n`;\n\nconst SmallText = styled(P)`\n font-size: 16px;\n font-style: italic;\n margin: 0px;\n`;\n\nconst IconText = styled(P)`\n vertical-align: middle;\n font-size: 0.9em;\n font-style: italic; \n margin: 0px;\n`;\n\nconst Icon = styled.img`\n vertical-align: middle;\n width: 20px;\n height: 20px; \n\n @media (min-width: 1200px) {\n width: 30px;\n height: 30px;\n }\n`;\n\nconst TagWrapper = styled.div`\n display: flex;\n flex-wrap: wrap;\n width: 75%;\n`;\n\nconst Tag = styled.div`\n background-color: #51c0cf;\n border: 1px solid #51c0cf;\n border-radius: 5px;\n margin-right: 5px;\n margin-top: 5px;\n padding: 3px 10px;\n\n @media (min-width: 1400) {\n padding: 5px 15px;\n margin-right: 10px;\n }\n`;\n\nconst TagText = styled(P)`\n color: white;\n margin: 0px;\n font-size: 15px;\n\n @media (min-width: 1400px) {\n font-size: 18px;\n }\n`;\n\nconst AuthorInfo = styled.div`\n display: none;\n`;\n\nfunction LibraryCard(props) {\n const { t, i18n } = useTranslation();\n const [redirect, setRedirect] = useState(false);\n let ActiveIcon;\n let hoverText;\n let isExercise = true;\n\n if (props.info.type) {\n switch (props.info.type) {\n case \"stappenplan\":\n ActiveIcon = Skilltraining;\n hoverText = t(\"librarycard.vaardigheidstraining\");\n break;\n case \"stappenplanValidatie\":\n hoverText = t(\"librarycard.invulOefening\");\n ActiveIcon = FillEx;\n break;\n case \"dagboek\":\n ActiveIcon = Questionnaire;\n hoverText = t(\"librarycard.vragenlijst\");\n break;\n }\n } else {\n isExercise = false;\n hoverText = t(\"librarycard.document\");\n ActiveIcon = Document;\n }\n\n function handleCardClick(event) {\n if (props.taskSelect) {\n if (props.info.type) {\n props.callBack(props.info.id, props.info.title, props.info.type);\n } else {\n props.callBack(props.info.id, props.info.title, \"Document\");\n }\n\n var elems = document.querySelectorAll(\"#card\");\n elems.forEach.call(elems, function (el) {\n el.classList.remove(\"active\");\n });\n\n if (event.target.type !== \"div\") {\n event.target.closest(\"#card\").className += \" active\";\n } else {\n event.target.className += \" active\";\n }\n } else {\n setRedirect(true);\n }\n }\n\n return (\n \n handleCardClick(e)}>\n
\n {props.info && props.info.title}\n
\n \n {!isExercise && (\n <>\n {dateConverter(new Date(props.info.date_created))}\n {props.info.therapist_name}\n \n )}\n \n {props.showType && {hoverText}}\n \n
\n
\n \n {isExercise &&\n props.info.tags &&\n props.info.tags.map((tag) => {\n return (\n <>\n {tag && (\n \n {t(tag.name)}\n \n )}\n \n );\n })}\n \n
\n {redirect && (\n \n )}\n
\n );\n}\n\nexport default LibraryCard;\n","import React, { useState, useEffect } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { FaAngleLeft, FaAngleRight, FaAngleDoubleLeft, FaAngleDoubleRight } from \"react-icons/fa\";\nimport { P } from \"../styled/typography\";\n\nconst Wrapper = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst IconArrowRight = styled(FaAngleRight)`\n color: #51c0cf;\n margin: 0px 5px;\n cursor: pointer;\n font-size: 25px;\n`;\n\nconst IconArrowLeft = styled(FaAngleLeft)`\n color: #51c0cf;\n margin: 0px 5px;\n cursor: pointer;\n font-size: 25px;\n`;\n\nconst IconDoubleArrowLeft = styled(FaAngleDoubleLeft)`\n color: #51c0cf;\n margin: 0px 5px;\n cursor: pointer;\n font-size: 25px;\n`;\n\nconst IconDoubleArrowRight = styled(FaAngleDoubleRight)`\n color: #51c0cf;\n margin: 0px 5px;\n cursor: pointer;\n font-size: 25px;\n`;\n\nconst PageNumber = styled(P)`\n margin: 0px 7px;\n display: inlne;\n cursor: pointer;\n outline: none;\n font-size: 20px;\n\n &.active {\n color: white;\n background-color: #51c0cf;\n border: 1px solid #51c0cf;\n padding: 2px 5px 4px 5px;\n border-radius: 30px;\n }\n\n @media (min-width: 980%) {\n margin: 0px 3px;\n }\n`;\n\nconst PaginationWrapper = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n margin: 15px 5px;\n`;\n\nfunction Pagination(props) {\n const [pages, setPages] = useState([]);\n\n function generateIndexList() {\n let index_list = [];\n for (let i = 1; i < props.totalPages + 1; i++) {\n index_list.push(i);\n }\n return index_list;\n }\n\n useEffect(() => {\n let index_list = generateIndexList();\n if (index_list.length <= 4) {\n setPages(index_list);\n } else {\n setPages(index_list.slice(props.currentPage - 1, props.currentPage + 3));\n }\n }, []);\n\n useEffect(() => {\n let index_list = generateIndexList();\n if (index_list.length <= 4) {\n setPages(index_list);\n } else {\n setPages(index_list.slice(props.currentPage - 1, props.currentPage + 3));\n }\n }, [props.totalPages]);\n\n function pageSlicer() {\n let index_list = generateIndexList();\n if (props.currentPage >= 2) {\n setPages(index_list.slice(props.currentPage - 2, props.currentPage + 2));\n } else {\n setPages(index_list.slice(props.currentPage - 1, props.currentPage + 3));\n }\n }\n\n function handlePageForce(page) {\n props.pageForce(page);\n }\n\n function nextPage() {\n props.nextFunction();\n pageSlicer();\n }\n\n function prevPage() {\n props.prevFunction();\n pageSlicer();\n }\n\n function lastPage() {\n props.pageForce(props.totalPages);\n }\n\n function firstPage() {\n props.pageForce(1);\n }\n\n useEffect(() => {\n pageSlicer();\n }, [props.currentPage]);\n\n return (\n \n {props.currentPage !== 1 && (\n <>\n \n \n \n )}\n\n \n {pages &&\n props.totalPages >= 2 &&\n pages.map((page) => {\n return (\n handlePageForce(page)}\n >\n {page}\n \n );\n })}\n \n {props.currentPage !== props.totalPages && (\n <>\n \n \n \n )}\n \n );\n}\n\nexport default Pagination;\n","import React, { useEffect, useState, useContext } from \"react\";\nimport styled from \"styled-components\";\nimport Filter from \"../filterComponents/filter\";\nimport LibraryCard from \"./libraryCard\";\nimport { api } from \"../../api\";\nimport registrationStore from \"../registrationStore\";\nimport { useTranslation } from \"react-i18next\";\nimport LoadSpinner from \"../loadspinner\";\nimport Pagination from \"./pagination\";\nimport LanguageStore from \"../stores/languageStore\";\nimport useLocalStorage from \"../hooks/localStorage\";\n\nconst Flex = styled.div`\n display: flex;\n justify-content: space-between;\n flex-wrap: wrap;\n align-items: stretch;\n`;\n\nconst Exercises = styled.div`\n width: 100%;\n margin-top: 10px;\n`;\n\nconst ExerciseWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n`;\n\nfunction Material(props) {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [loading, setLoading] = useState(true);\n const [exercisesToDisplay, setExercisesToDisplay] = useState([]);\n const [documentsToDisplay, setDocumentsToDisplay] = useState([]);\n const [pagination, setPagination] = useLocalStorage(props.tag + 'Pagination', {\n start: 1,\n end: 12,\n });\n const [totalPages, setTotalPages] = useState();\n const [currentPage, setCurrentPage] = useLocalStorage(props.tag + 'page', 1);\n const langStore = useContext(LanguageStore);\n const [filters, setFilters] = useLocalStorage(props.tag + 'FilterData', {\n title: \"\",\n language: langStore.getLanguage(i18n.language),\n discipline: user.speciality,\n subdiscipline: \"\",\n tags: []\n });\n\n function getFilterResults(data) {\n setFilters(data);\n resetPagination();\n }\n\n function resetPagination() {\n setPagination({\n start: 1,\n end: 12,\n });\n setCurrentPage(1);\n }\n\n function getMaterial() {\n setLoading(true);\n const params = {\n title: filters.title,\n language: filters.language,\n discipline: filters.discipline,\n subdiscipline: filters.subdiscipline,\n start: pagination.start,\n end: pagination.end,\n onlyDocs: props.onlyDocs ? props.onlyDocs : false,\n tags: filters.tags\n };\n api.get((props.public ? \"/material\" : \"/material/\" + props.public_id), {\n params: params,\n }).then((response) => {\n var material = response.data.output;\n setExercisesToDisplay(Array.from(material[0]));\n setDocumentsToDisplay(Array.from(material[1]));\n setTotalPages(Math.ceil(response.data.total / 12));\n setLoading(false);\n });\n }\n\n useEffect(() => {\n getMaterial();\n }, [filters, pagination]);\n\n useEffect(() => {\n if (props.filterData !== undefined) {\n getFilterResults(props.filterData);\n }\n }, [props.filterData]);\n\n //update\n function update() {\n setLoading(true);\n setTimeout(() => {\n getMaterial();\n }, 2500);\n };\n\n //pagination\n function handlePageChange(dir) {\n setPagination({\n start: pagination.start + 12 * dir,\n end: pagination.end + 12 * dir,\n });\n setCurrentPage(currentPage + dir);\n }\n\n function handlePageForce(page) {\n setPagination({\n start: 12 * (page - 1) + 1,\n end: page * 12,\n });\n setCurrentPage(page);\n }\n\n return (\n <>\n
\n {!props.taskSelect && getFilterResults(data)} small={props.small} />}\n {loading ? (\n \n ) : (\n \n \n \n {exercisesToDisplay &&\n exercisesToDisplay.map((material) => {\n return ( props.selectCallback(id, title, type))\n }\n showType={props.showType}\n />\n );\n })}\n \n \n \n \n {documentsToDisplay &&\n documentsToDisplay.map((material) => {\n return ( props.selectCallback(id, title, type))\n }\n showType={props.showType}\n />\n );\n })}\n \n \n {totalPages ? (\n handlePageChange(1)}\n prevFunction={() => handlePageChange(-1)}\n totalPages={totalPages}\n currentPage={currentPage}\n pageForce={handlePageForce}\n />\n ) : (\n
{t(\"materiaalRaadplegen.noMaterial\")}
\n )}\n
\n )}\n
\n \n );\n}\n\nexport default Material;\n","import React, { useState, useEffect, useContext } from \"react\";\nimport styled from \"styled-components\";\nimport PatientOverlay from \"../../components/overlays/patientOverlay\";\nimport Global from \"../../components/styled/global\";\nimport { PageTitle, H4, SmallTitle, P } from \"../../components/styled/typography\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { observer } from \"mobx-react\";\nimport { api } from \"../../api\";\nimport LoadSpinner from \"../../components/loadspinner\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport registrationStore from \"../../components/registrationStore\";\nimport { useTranslation } from \"react-i18next\";\nimport { Formik, Form, Field } from \"formik\";\nimport Button from \"../../components/styled/button\";\nimport { FaFilter } from \"react-icons/fa\";\nimport { FaArrowLeft, FaArrowRight } from \"react-icons/fa\";\nimport Material from \"../../components/libraryComponents/material\";\n\nconst Flex = styled.div`\n display: flex;\n justify-content: space-between;\n flex-wrap: wrap;\n\n @media (min-width: 980px) {\n flex-direction: row;\n }\n`;\nconst SubmitButton = styled(Button)`\n margin-top: 20px;\n padding-right: 45px;\n padding-left: 45px;\n font-size: 18px;\n margin-left: 10px;\n`;\nconst Icon = styled(FaFilter)`\n color: white;\n vertical-align: middle;\n margin-right: 7px;\n`;\n\nconst Input = styled(Field)`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n`;\nconst DocFlex = styled(Flex)`\n margin-bottom: 20px;\n justify-content: flex-start;\n`;\n\nconst IconArrowRight = styled(FaArrowRight)`\n color: #51c0cf;\n margin: 0px 5px;\n cursor: pointer;\n`;\n\nconst IconArrowLeft = styled(FaArrowLeft)`\n color: #51c0cf;\n margin: 0px 5px;\n cursor: pointer;\n`;\n\nconst Pagination = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n margin: 15px 5px;\n`;\n\nconst PageNumber = styled(P)`\n margin: 0px 7px;\n display: inlne;\n cursor: pointer;\n outline: none;\n\n &.active {\n color: white;\n background-color: #51c0cf;\n border: 1px solid #51c0cf;\n padding: 2px 5px 4px 5px;\n border-radius: 30px;\n }\n\n @media (min-width: 980%) {\n margin: 0px 3px;\n }\n`;\nconst FilterButton = styled(SubmitButton)`\n margin-top: 0px;\n`;\n\nconst PaginationCenter = styled.div`\n width: 100%;\n display: flex;\n justify-content: center;\n`;\n\nconst MateriaalRaadplegen = observer(() => {\n const { t, i18n } = useTranslation();\n\n return (\n \n \n \n \n {t(\"materiaalRaadplegen.allDocs\")}\n \n \n \n \n );\n});\n\nexport default MateriaalRaadplegen;\n","import React, { useContext, useState } from \"react\";\nimport { Formik, Form, Field } from \"formik\";\nimport * as Yup from \"yup\";\nimport { observer } from \"mobx-react-lite\";\nimport styled from \"styled-components\";\nimport registrationStore from \"../components/registrationStore\";\nimport Button from \"../components/styled/button\";\nimport { H4 } from \"../components/styled/typography\";\nimport { api } from \"../api\";\nimport { useTranslation } from \"react-i18next\";\n\nconst FormGroup = styled.div`\n display: flex;\n flex-direction: column;\n margin-bottom: 20px;\n`;\n\nconst PhoneNumber = styled.div`\n display: flex;\n`;\n\nconst Input = styled(Field)`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n`;\n\nconst InputPhone = styled(Input)`\n margin-left: 10px;\n flex-grow: 2;\n`;\nconst Label = styled.label`\n font-size: 16px;\n font-weight: 600;\n color: #545454;\n`;\n\nconst RegisterForm = styled(Form)``;\n\nconst SmallTitle = styled(H4)`\n margin-bottom: 15px;\n margin-top: 0px;\n`;\n\nconst SubmitButton = styled(Button)`\n margin-top: 20px;\n padding-right: 45px;\n padding-left: 45px;\n font-size: 18px;\n`;\nconst Half = styled.div`\n width: 49%;\n`;\n\nconst ThreeFourth = styled.div`\n width: 74%;\n`;\n\nconst OneFourth = styled.div`\n width: 24%;\n`;\n\nconst Flex = styled.div`\n display: flex;\n justify-content: space-between;\n`;\n\nconst FlexLeft = styled.div`\n margin-top: 10px;\n display: flex;\n`;\n\nconst Error = styled.p`\n font-size: 16px;\n color: #afafaf;\n font-style: italic;\n`;\n\nconst Center = styled.div`\n text-align: center;\n`;\n\nconst PhonePrefix = styled(Input)`\n width: 30%;\n\n @media (min-width: 980px) {\n width: 20%;\n }\n`;\n\nconst gegevensForm = observer((props) => {\n const { t, i18n } = useTranslation();\n const telephone = props.user.telephone;\n const store = useContext(registrationStore);\n\n const [isMan, setIsMan] = useState(props.user.sex === \"Man\")\n\n return (\n
\n {\n if (\n document.getElementById(\"radioMan\").checked !== true &&\n document.getElementById(\"radioVrouw\").checked !== true\n ) {\n actions.setErrors({ geslacht: \"Gelieve een geslacht aan te duiden.\" });\n actions.setSubmitting(false);\n } else {\n var geslacht = \"\";\n if (document.getElementById(\"radioMan\").checked) {\n geslacht = \"Man\";\n } else {\n geslacht = \"Vrouw\";\n }\n api.put(\"/user/\" + props.user.public_id, {\n firstName: values.firstName,\n lastName: values.lastName,\n dateOfBirth: values.dateOfBirth,\n socialSecurityNumber: values.SSN,\n sex: geslacht,\n telephone: values.TelephonePrefix + values.TelephoneNumber,\n street: values.streetName,\n number: values.houseNumber ? values.houseNumber : null,\n zipCode: values.zipCode,\n city: values.city,\n country: values.country,\n }).then(function (response) {\n actions.setSubmitting(false);\n store.setUser(JSON.stringify(response.data.user));\n props.flash();\n });\n }\n }}\n render={({ errors, touched, values }, isSubmitting) => (\n \n {t(\"gegevensForm.general\")}\n \n \n \n \n \n {touched.firstName && errors.firstName && {errors.firstName}}\n \n \n \n \n \n \n {touched.lastName && errors.lastName && {errors.lastName}}\n \n \n \n \n \n \n \n \n {touched.dateOfBirth && errors.dateOfBirth && {errors.dateOfBirth}}\n \n \n \n \n \n \n {touched.SSN && errors.SSN && {errors.SSN}}\n \n \n \n \n \n \n \n \n \n {touched.TelephonePrefix && errors.TelephonePrefix && (\n {errors.TelephonePrefix}\n )}\n {touched.TelephoneNumber && errors.TelephoneNumber && (\n {errors.TelephoneNumber}\n )}\n \n \n \n \n \n \n \n {errors.geslacht && {errors.geslacht}}\n \n {t(\"gegevensForm.adress\")}\n \n \n \n \n \n {touched.streetName && errors.streetName && {errors.streetName}}\n \n \n \n \n \n \n {touched.houseNumber && errors.houseNumber && {errors.houseNumber}}\n \n \n \n \n \n \n \n \n {touched.zipCode && errors.zipCode && {errors.zipCode}}\n \n \n \n \n \n \n {touched.city && errors.city && {errors.city}}\n \n \n \n\n \n \n \n {touched.country && errors.country && {errors.country}}\n \n {t(\"gegevensForm.configure\")}\n \n )}\n validationSchema={Yup.object().shape({\n firstName: Yup.string().required(t(\"gegevensForm.fnPlace\")),\n lastName: Yup.string().required(t(\"gegevensForm.lnPlace\")),\n dateOfBirth: Yup.string()\n .required(t(\"gegevensForm.datePlace\"))\n .matches(/^([0-2][0-9]|(3)[0-1])(\\/)(((0)[0-9])|((1)[0-2]))(\\/)\\d{4}$/, \"Formaat: dd/mm/yyyy\"),\n SSN: Yup.string().required(t(\"gegevensForm.ssnForced\")),\n TelephonePrefix: Yup.string().required(t(\"gegevensForm.countryNumPlace\")),\n TelephoneNumber: Yup.string().length(9, t(\"gegevensForm.nmrPlace\")),\n streetName: Yup.string().required(t(\"gegevensForm.streetPlace\")),\n houseNumber: Yup.number().required(t(\"gegevensForm.housePlace\")),\n zipCode: Yup.string()\n .length(4, t(\"gegevensForm.correctZipPlace\"))\n .required(t(\"gegevensForm.zipPlace\")),\n city: Yup.string().required(t(\"gegevensForm.cityPlace\")),\n country: Yup.string().required(t(\"gegevensForm.countryPlace\")),\n })}\n />\n
\n );\n});\n\nexport default gegevensForm;\n","import React, {useContext, useState} from 'react'\nimport { Formik, Form, Field } from 'formik'\nimport * as Yup from 'yup'\nimport styled from 'styled-components'\nimport { Link } from 'react-router-dom'\nimport {Redirect} from \"react-router\"\nimport Button from '../components/styled/button'\nimport RegistrationStore from \"../components/registrationStore\"\nimport { observer } from \"mobx-react-lite\"\nimport {api} from \"../api\"\nimport { H4 } from '../components/styled/typography'\nimport { useTranslation } from \"react-i18next\"\n\nconst LoginForm = styled(Form)`\n`\n\nconst FormGroup = styled.div`\n display: flex;\n flex-direction: column;\n margin-bottom: 20px;\n`\n\nconst Input = styled(Field)`\n background: #FFFFFF;\n border: 1px solid #51C0CF;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n`\n\nconst Label = styled.label`\n font-size: 16px;\n font-weight: 600;\n color: #545454;\n`\n\nconst SubmitButton = styled(Button)`\n margin-top: 20px;\n padding-right: 45px;\n padding-left: 45px;\n font-size: 18px;\n`\nconst Error = styled.p`\n font-size: 16px;\n color: #FFF;\n font-style: italic;\n background-color: #DC393D;\n border: 1px solid #DC393D;\n border-radius: 10px;\n padding: 10px 15px;\n`\n\nconst Center = styled.div`\n text-align: center;\n`\n\nconst ForgotPassword = styled(Link)`\n color: #51C0CF;\n`\nconst SmallTitle = styled(H4)`\n margin-bottom: 15px;\n margin-top: 0px;\n`\n\n\n\nconst LoginForm1 = observer((props) => {\n const { t, i18n } = useTranslation()\n return (
\n {\n api.get('/login',{auth:{username: props.user.email, password: values.oldpassword}}).then((response) =>{\n if (response.data.user){\n api.put('/user/' + props.user.public_id, {password: values.newpassword}).then(function(response){\n actions.setSubmitting(false)\n window.location.reload()\n })\n } else {\n \n actions.setSubmitting(false)\n }\n }).catch((error) => {\n actions.setErrors({oldpassword : t('passwordResetForm.incorrectPassword')})\n })\n }}\n render={({errors, touched}, isSubmitting) => (\n \n {t('passwordResetForm.changeTitle')}\n \n \n \n { touched.oldpassword && errors.oldpassword && {errors.oldpassword} }\n \n \n \n \n { touched.newpassword && errors.newpassword && {errors.newpassword}}\n \n \n \n \n { touched.repeatnewpassword && errors.repeatnewpassword && {errors.repeatnewpassword}}\n \n
\n {t('passwordResetForm.changeTitle')}\n
\n
\n \n )}\n validationSchema={Yup.object().shape({\n oldpassword: Yup.string().required(t('passwordResetForm.givePass')),\n newpassword: Yup.string().matches(/^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,20}$/, t('passwordResetForm.passRes')).required(t('passwordResetForm.giveNew')),\n repeatnewpassword: Yup.string().test(t('passwordResetForm.match'), t('passwordResetForm.corrPass'), function(value) {\n return this.parent.newpassword === value;}),\n })}\n /> \n
)\n})\n\nexport default LoginForm1","import React from \"react\"\nimport styled from \"styled-components\"\nimport { NavLink } from 'react-router-dom'\nimport { useTranslation } from \"react-i18next\"\n\n\nconst Flex = styled.div`\n display: flex;\n`\n\nconst A = styled(NavLink)`\n color: #51C0CF;\n text-decoration: none;\n padding: 0px 5px;\n\n &.active{\n text-decoration: underline;\n color: #4E7693;\n }\n`\n\n\nfunction AccountNavigation(props){\n const { t, i18n } = useTranslation()\n return(\n \n {t('accountNavigation.data')}\n {t('accountNavigation.plan')}\n {props.therapist ? \"\" : {t('accountNavigation.mytherapists')}}\n \n )\n}\n\nexport default AccountNavigation","import React, { useContext, useState } from \"react\";\nimport styled from \"styled-components\";\nimport PatientOverlay from \"../../components/overlays/patientOverlay\";\nimport Global from \"../../components/styled/global\";\nimport GegevensForm from \"../../components/gegevensForm\";\nimport PasswordResetForm from \"../../components/passwordResetForm\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { PageTitle } from \"../../components/styled/typography\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport registrationStore from \"../../components/registrationStore\";\nimport AccountNavigation from \"../../components/accountNavigation\";\nimport Flash from \"../../components/styled/flashMessage\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n align-items: stretch;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n }\n`;\n\nconst OneThird = styled.div`\n width: 100%;\n margin: 15px 0px;\n\n @media (min-width: 980px) {\n width: 62%;\n }\n`;\n\nconst TwoThird = styled.div`\n width: 100%;\n margin: 15px auto;\n\n @media (min-width: 980px) {\n width: 33%;\n }\n`;\n\nfunction MijnAccount() {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [showFlash, setShowFlash] = useState(false);\n\n const flash = () => {\n setShowFlash(true);\n };\n return (\n \n \n \n \n {t(\"sidebarPatient.acc\")}\n \n {showFlash && {t(\"mijnAccount.dataConf\")}}\n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default MijnAccount;\n","import styled from 'styled-components'\nimport icon from '../../assets/images/check.png'\nimport iconWhite from '../../assets/images/check-white.png'\nimport iconSmall from '../../assets/images/check-small.png'\nimport iconWhiteSmall from '../../assets/images/check-white-small.png'\n\n\nexport const Li = styled.li`\n list-style: none;\n background-image: url(${props => props.white && props.small ? iconWhiteSmall : props.white ? iconWhite : props.small ? iconSmall : icon});\n background-repeat: no-repeat;\n line-height: ${props => props.oneline ? \"40px\" : \"auto\"};\n padding-left: ${props => props.small ? \"30px\" : \"60px\" };\n padding-bottom: 20px;\n font-weight: 600;\n color: ${props => props.white ? \"#FFFFFF\" : \"#929292\"};\n`\n\nexport const Ul = styled.ul`\n margin-left: -30px;\n`","import React, { useContext, useState, useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport styled from \"styled-components\";\nimport { Li, Ul } from \"../styled/list\";\nimport Button from \"../styled/button\";\nimport { H3 } from \"../styled/typography\";\nimport RegistrationStore from \"../registrationStore\";\nimport PatientIconFemale from \"../../assets/images/patient-icon.png\";\nimport PatientIconMale from \"../../assets/images/patient-icon-woman.png\";\n\nconst Plan = styled.div`\n border: 1px solid #51c0cf;\n border-radius: 10px;\n width: 100%;\n margin-bottom: 15px;\n margin-top: 20px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background: #fff;\n padding-bottom: 25px;\n\n @media (min-width: 980px) {\n width: 48%;\n max-width: 375px;\n margin-bottom: 0px;\n }\n`;\n\nconst PlanImage = styled.img`\n width: 100px;\n margin-top: 40px;\n`;\n\nconst Price = styled(H3)`\n font-weight: 400;\n margin-top: 20px;\n margin-bottom: 0px;\n`;\n\nconst Input = styled.select`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n width: 70%;\n font-size: 16px;\n`;\n\nconst SubmitButton = styled(Button)`\n margin-top: 20px;\n margin-bottom: 40px;\n padding-right: 30px;\n padding-left: 30px;\n font-size: 16px;\n width: 70%;\n`;\n\nconst PatientPlans = ({ setValue }) => {\n const { t, i18n } = useTranslation();\n const store = useContext(RegistrationStore);\n const user = JSON.parse(store.user);\n const [plan, setPlan] = useState(\"3\");\n\n useEffect(() => {\n setValue(plan);\n }, [plan]);\n\n function CostPlanPatient(value) {\n setPlan(value);\n if (value === \"3\") {\n document.getElementById(\"pricePatient\").innerHTML = \"€ 39\";\n } else if (value === \"6\") {\n document.getElementById(\"pricePatient\").innerHTML = \"€ 72\";\n }\n }\n return (\n <>\n \n \n € 39\n
    \n
  • {t(\"registerForm3.therapy\")}
  • \n
  • \n {t(\"registerForm3.ex\")} &
    {t(\"registerForm3.res\")}\n
  • \n
  • {t(\"registerForm3.doc\")}
  • \n
  • {t(\"registerForm3.com\")}
  • \n
\n CostPlanPatient(document.getElementById(\"PlanSelectorPatient\").value)}\n >\n \n \n \n
\n \n );\n};\n\nexport default PatientPlans;\n","import React, { useContext, useState, useEffect } from \"react\";\nimport PatientOverlay from \"../../components/overlays/patientOverlay\";\nimport Global from \"../../components/styled/global\";\nimport { Li, Ul } from \"../../components/styled/list\";\nimport { PageTitle, P } from \"../../components/styled/typography\";\nimport styled from \"styled-components\";\nimport { H3 } from \"../../components/styled/typography\";\nimport Button from \"../../components/styled/button\";\nimport PatientIconMale from \"../../assets/images/patient-icon.png\";\nimport PatientIconFemale from \"../../assets/images/patient-icon-woman.png\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport { observer } from \"mobx-react\";\nimport registrationStore from \"../../components/registrationStore\";\nimport AccountNavigation from \"../../components/accountNavigation\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { useTranslation } from \"react-i18next\";\nimport TwoFA from \"../../components/2FAPhone\";\nimport CheckoutStep from \"../../components/checkoutStep\";\nimport PatientPlans from \"../../components/checkoutComponents/PatientPlans\";\nimport Card from \"../../components/styled/card\";\nimport { api } from \"../../api\";\nimport qs from 'qs';\nimport LoadingSpinner from \"../../components/loadspinner\";\nimport Flash from \"../../components/styled/flashMessage\";\n\nconst Plan = styled.div`\n border: 1px solid #51c0cf;\n border-radius: 10px;\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background-color: #ffffff;\n margin-top: 20px;\n\n @media (min-width: 980px) {\n width: 375px;\n }\n`;\n\nconst TwoFACard = styled(Card)`\n margin-top: 20px;\n width: 100%;\n\n @media (min-width: 1200px) {\n width: 50%;\n }\n`;\nconst Title = styled(H3)`\n margin-top: 25px;\n`;\n\nconst A = styled.a`\n color: #51c0cf;\n`;\n\nconst PlanImage = styled.img`\n width: 100px;\n margin-top: 40px;\n`;\n\nconst Price = styled(H3)`\n font-weight: 400;\n margin-top: 20px;\n margin-bottom: 0px;\n @media (min-width: 980px) {\n font-size: 40px;\n }\n`;\n\nconst SmallYear = styled(P)`\n margin: 0px;\n margin-top: 15px;\n color: #51c0cf;\n`;\n\nconst SubmitButton = styled(Button)`\n margin-top: 10px;\n margin-bottom: 40px;\n padding-right: 30px;\n padding-left: 30px;\n font-size: 16px;\n`;\n\nconst CurrentPlanText = styled(P)`\n color: #545454;\n font-weight: 700;\n font-size: 18px;\n margin-top: 20px;\n margin-bottom: 0px;\n padding-top: 10px;\n`;\n\n\nconst CustomPlan = styled.div`\n background-color: #ffffff;\n border-radius: 10px;\n display: inline-block;\n border: 1px solid #51c0cf;\n`;\n\nconst PText = styled(P)`\n color: #545454;\n margin: 5px;\n padding: 8px;\n`;\n\nconst Flex = styled.div`\n display: flex;\n justify-content: space-between;\n margin-top: 20px;\n`;\n\nconst PlanText = styled(P)`\n color: #545454;\n font-weight: 700;\n font-size: 18px;\n margin: 5px;\n`;\n\nconst NewPlan = styled.div`\n margin-top: 25px;\n`;\n\nconst MijnPlan = observer((props) => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [checkoutStep, setCheckoutStep] = useState(1);\n const [successMessage, setSuccessMessage] = useState(false);\n const [loading, setLoading] = useState(false);\n const [userPlan, setUserPlan] = useState();\n\n const planStartDate = new Date(user.plan_start_date);\n const expireDate = new Date(\n planStartDate.setMonth(\n planStartDate.getMonth() +\n (user.month_reduction ? user.plan_period - user.month_reduction : user.plan_period)\n )\n );\n\n const afterPayment = qs.parse(props.location.search, { ignoreQueryPrefix: true }).afterPayment;\n\n const verlengPlan = () => {\n //TEMP override!!! TODO: Change too normal Checkout as with Therapuet plans\n // store.setPlan(\"Patiënt\");\n // store.setPlanId(userPlan.id);\n // setCheckoutStep(checkoutStep + 1);\n api.post(\"/payments\", {\n redirect_url: window.location.href,\n plan_id: userPlan.id,\n user_id: user.public_id,\n discount: 1\n }).then(function (response) {\n window.location.reload()\n store.setUser(JSON.stringify(response.data.user));\n });\n }\n\n useEffect(() => {\n if (afterPayment) {\n setSuccessMessage(true);\n setCheckoutStep(1);\n }\n setLoading(true);\n api.get(\"/plans\", { params: { onlyPublic: true, typeOfUser: \"Patiënt\" } }).then((res) => {\n const freePlan = res.data.plans.find(x => x.price === 0);\n setUserPlan(freePlan);\n });\n api.get(\"/user_plans/\" + user.public_id).then((res) => {\n if (res.data.user_plans.length <= 1) {\n setCheckoutStep(1);\n }\n let plans = [];\n for (var plan of res.data.user_plans) {\n const planObj = plan;\n const planStartDate = new Date(plan.dateActive);\n const expireDate = new Date(\n planStartDate.setMonth(\n planStartDate.getMonth() +\n (plan.month_reduction ? plan.plan_period - plan.month_reduction : plan.plan_period)\n )\n );\n planObj[\"expireDate\"] = expireDate;\n plans.push(planObj);\n }\n setLoading(false);\n });\n }, []);\n\n return (\n \n \n \n \n {t(\"sidebarPatient.acc\")}\n \n {loading ? :\n !user.expired ? (\n <>\n {successMessage && {t(\"mijnPlan.successMessage\")}}\n \n {{t(\"mijnPlan.currentPlanText\")}}\n \n \n {t(\"mijnPlan.customPlanMessage\")}\n info@telephon.digital\n \n \n \n \n \n \n {t('mijnPlan.patientFreePlan')}\n \n
    \n
  • {t(\"registerForm3.ex\")}
  • \n
  • {t(\"registerForm3.res\")}
  • \n
  • {t(\"registerForm3.doc\")}
  • \n
  • {t(\"registerForm3.com\")}
  • \n
\n
\n \n ) : (\n <>\n {t(\"mijnPlan.previousPlanExpiredText\")}\n \n \n )}\n {checkoutStep === 2 && (\n \n \n \n )}\n
\n
\n
\n );\n});\n\nexport default MijnPlan;\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nimport { P } from \"../components/styled/typography\";\n\nconst Progress = styled.div`\n margin-bottom: 10px;\n`;\n\nconst TaskTitle = styled(P)`\n color: #545454;\n margin: 0px;\n margin-bottom: 5px;\n`;\n\nconst Box = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n\nconst ProgressBarBox = styled.div`\n border: 0.5px solid #cfcfcf;\n border-radius: 30px;\n width: 90%;\n height: 20px;\n`;\n\nconst Bar = styled.div`\n width: ${(props) => props.width}%;\n height: 20px;\n background-color: #51c0cf;\n border-radius: 30px;\n`;\n\nconst Percentage = styled(P)`\n font-weight: 700;\n color: #51c0cf;\n margin: 0px;\n margin-left: 5px;\n`;\n\nfunction ProgressBar(props) {\n const progress = Math.round(props.progress * 100);\n return (\n \n {props.title}\n \n \n \n \n {progress}%\n \n \n );\n}\n\nexport default ProgressBar;\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nimport Card from \"../components/styled/card\";\nimport { P } from \"../components/styled/typography\";\nimport { useTranslation } from \"react-i18next\";\nimport {FaCalendar, FaInfoCircle, FaPlus} from \"react-icons/fa\";\n\nconst TaskCard = styled(Card)`\n border: 0.5px solid #aeadad;\n padding: 10px 40px 10px 20px;\n margin: 10px 0px 0px 0px;\n width: 100%;\n\n @media (min-width: 980px) {\n width: 49.5%;\n }\n`;\n\nconst Bold = styled(P)`\n font-weight: bold;\n margin: 0px;\n text-transform: capitalize;\n word-break: break-word;\n`;\n\nconst Text = styled(P)`\n margin: 0px;\n`;\n\nconst TaskCardFooterStats = styled(P)`\n margin: 0.5em 0px 0px 0px;\n font-size: 0.7em;\n cursor: default;\n`;\n\nconst Italic = styled.span`\n font-style: italic;\n font-size: 0.9em;\n`;\n\nconst InfoIcon = styled(FaInfoCircle)`\n font-size: 0.7em;\n margin: 0px 5px 0px 0px;\n`;\n\nconst CalendarIcon = styled(FaCalendar)`\n font-size: 0.7em;\n margin: 0px 5px 0px 10px;\n`;\n\nfunction TaskCardFooter(props) {\n const { t, i18n } = useTranslation();\n let firstDate = \"\";\n let lastDate = \"\";\n\n if (props.task.dates !== undefined && props.task.dates.length > 0){\n firstDate = new Date(props.task.dates[0].date).toLocaleDateString(i18n.language);\n lastDate = new Date(props.task.dates[props.task.dates.length-1].date).toLocaleDateString(i18n.language);\n }\n\n return (\n \n {t(\"checkoutStep.total\")}: #{props.task?.total} \n {firstDate !== \"\" ? (\n <>{firstDate} » {lastDate}\n ) : (\n <>\n )}\n \n )\n}\n\nfunction TaskInAssignmentSmall(props) {\n const { t, i18n } = useTranslation();\n\n return (\n \n \n {props.task.type}: {props.task.title}\n \n {/*{t('patientopdrachtaanmaken.freq')}: {props.task.total} {t('patientopdrachtaanmaken.perDay')} {props.task.frequencyparam1} {t('patientopdrachtaanmaken.days')}*/}\n\n \n \n );\n}\n\nexport default TaskInAssignmentSmall;\n","import React, { useContext, useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport {FaCalendar, FaEdit, FaTimes} from \"react-icons/fa\";\nimport Card from \"../components/styled/card\";\nimport ProgressBar from \"../components/progressBar\";\nimport TaskInAssignmentSmall from \"../components/taskInAssignmentSmall\";\nimport { P } from \"../components/styled/typography\";\nimport Button from \"../components/styled/button\";\nimport { api } from \"../api\";\nimport registrationStore from \"../components/registrationStore\";\nimport { useTranslation } from \"react-i18next\";\n\nconst FlexBetween = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: space-between;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n }\n`;\n\nconst AssignmentLargeCard = styled(Card)`\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0.5px solid #aeadad;\n width: 100%;\n\n @media (min-width: 980px) {\n margin-top: 10px;\n margin-bottom: 10px;\n width: 100%;\n height: 95%;\n }\n`;\n\nconst Bold = styled(P)`\n font-weight: bold;\n margin: 0px;\n`;\n\nconst Text = styled(P)`\n margin: 0px;\n`;\n\nconst RedButton = styled(Button)`\n background-color: #dc393d;\n border-color: #dc393d;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n margin: 3px 0px;\n width: 100%;\n\n &:hover {\n background-color: #b02a2e;\n border-color: #b02a2e;\n }\n`;\n\nconst GreenButton = styled(Button)`\n background-color: #45ae7c;\n border-color: #45ae7c;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n margin: 3px 0px;\n width: 100%;\n\n &:hover {\n background-color: #3a9168;\n border-color: #3a9168;\n }\n`;\n\nconst ProgBar = styled.div`\n width: 100%;\n margin-top: 10px;\n margin-bottom: 10px;\n\n @media (min-width: 980px) {\n width: 400px;\n margin-top: auto;\n margin-bottom: auto;\n }\n`;\n\nconst Flex = styled.div`\n display: flex;\n flex-wrap: wrap;\n margin-top: 15px;\n\n @media (min-width: 980px) {\n margin-top: auto;\n justify-content: space-between;\n }\n`;\n\nconst EditIcon = styled(FaEdit)`\n color: #ffffff;\n margin-right: 5px;\n font-size: 16px;\n`;\n\nconst DeleteIcon = styled(FaTimes)`\n color: #ffffff;\n margin-right: 5px;\n font-size: 16px;\n`;\n\nconst FlexStart = styled.div`\n display: flex;\n align-items: flex-start;\n margin-top: 15px;\n`;\n\nconst DatesText = styled(P)`\n margin: 0px 0px 0.4em 0.5em;\n font-size: 0.7em;\n\n letter-spacing: 0.02em;\n cursor: default;\n border-bottom: grey 1px dotted;\n`;\nconst CalendarIcon = styled(FaCalendar)`\n font-size: 0.7em;\n margin: 0px 5px 0px 0px;\n`;\n\nconst TitleBold = styled.span`\n font-weight: bold;\n`;\nfunction AssignmentCard(props) {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [sortedDates, setSortedDates] = useState([]);\n\n useEffect(() => {\n getSortedDates();\n }, []);\n\n const handleDelete = () => {\n api.delete(\"/assignment/\" + props.assignment.id).then(function (response) {\n props.update();\n });\n };\n\n const getSortedDates = () => {\n var sortedDates = [];\n for (let index = 0; index < props.assignment.tasks.length; index++) {\n const task = props.assignment.tasks[index];\n if (task.dates != null) sortedDates.push(...task.dates);\n }\n sortedDates.sort((a,b) => Date.parse(a.date) - Date.parse(b.date));\n setSortedDates(sortedDates);\n }\n\n return (\n \n \n
\n \n {props.assignment.title} - {new Date(sortedDates[0]?.date).toLocaleDateString(i18n.language)} » {new Date(sortedDates[sortedDates.length - 1]?.date).toLocaleDateString(i18n.language)}\n \n
\n\n {!user.therapist && (\n \n \n \n )}\n
\n \n {props.assignment.tasks.map((task) => (\n \n ))}\n \n \n
\n {user.therapist ? (\n \n \n {t(\"assignmentCard.delete\")}\n \n ) : (\n \"\"\n )}\n
\n
\n
\n );\n}\n\nexport default AssignmentCard;\n","import React, { useState, useEffect, useContext } from \"react\";\nimport PatientOverlay from \"../../components/overlays/patientOverlay\";\nimport Global from \"../../components/styled/global\";\nimport { PageTitle, SmallTitle } from \"../../components/styled/typography\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { api } from \"../../api\";\nimport AssignmentCard from \"../../components/assignmentCard\";\nimport TodayTask from \"../../components/todayTask\";\nimport LoadSpinner from \"../../components/loadspinner\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport registrationStore from \"../../components/registrationStore\";\nimport { observer } from \"mobx-react\";\nimport { useTranslation } from \"react-i18next\";\nimport Flash from \"../../components/styled/flashMessage\";\n\nconst Opdrachten = observer((props) => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [Loading, setLoading] = useState(true);\n const [assigns, setAssigns] = useState([]);\n const [assignments, setAssignments] = useState([]);\n const [individuFinished, setIndividuFinished] = useState(false);\n\n useEffect(() => {\n api.get(\"/tasksOfToday/\" + user.public_id).then((response) => {\n if (response.data.individu_finished) {\n setIndividuFinished(true);\n }\n setAssigns(response.data.tasks);\n setLoading(false);\n });\n api.get(\"/assignments/\" + user.public_id).then(function (response) {\n setAssignments(response.data.assignments.reverse());\n setLoading(false);\n });\n }, []);\n \n return (\n \n \n \n \n {t(\"patientCard.assignments\")}\n {individuFinished && {t(\"dashboard.individuFinished\")}}\n {t(\"dashboard.tasksToday\")}\n {Loading ? (\n \n ) : assigns.length > 0 ? (\n assigns.map((assignment) => {\n return assignment.taken.map((task, index) => (\n \n ));\n })\n ) : (\n
{t(\"dashboard.noTasks\")}
\n )}\n {t(\"opdrachten.running\")}\n {Loading ? (\n \n ) : assignments.length > 0 ? (\n assignments.map((assignment) => {\n return ;\n })\n ) : (\n
{t(\"opdrachten.noRunning\")}
\n )}\n
\n
\n
\n );\n});\n\nexport default Opdrachten;\n","import React, { useState, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { Line } from \"react-chartjs-2\";\nimport 'chartjs-plugin-zoom';\nimport Card from \"../../components/styled/card\";\nimport { useTranslation } from \"react-i18next\";\nimport Button from \"../styled/button\";\n\nconst GraphCard = styled(Card)`\n width: 100%;\n box-sizing: border-box;\n padding-right: 40px;\n\n @media (min-width: 980px) {\n width: 70%;\n }\n`;\n\nconst Select = styled.select`\n width: 20%;\n background: #FFFFFF;\n border: 1px solid #51C0CF;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n margin-bottom: 5px;\n outline: none;\n font-size: 16px;\n`\n\nconst RightSelect = styled(Select)`\n margin-left: auto;\n`\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n`\n\nconst ButtonGroup = styled.div`\n display: flex;\n flex-direction: row;\n`\n\nconst TaskButton = styled(Button)`\n margin: 5px 5px;\n cursor: pointer;\n\n &.active {\n background-color: #469CA8;\n border-color: #caecf0;\n }\n`\n\nconst LabelColors = [\n \"#F23539\",\n \"#F0C239\",\n \"#24AE5F\"\n]\nconst BackgroundColor = \"#51C0CF\"\nconst AxisColor = \"#545454\"\n\nconst Labels = {\n date: \"\",\n duration: \"ms\",\n recording: \"\",\n result: \"\",\n}\n\nconst ResultsGraph = (props) => {\n const { t, i18n } = useTranslation();\n const [results, setResults] = useState(props.myresults);\n const [xLabel, setXLabel] = useState(\"date\");\n const [yLabel, setYLabel] = useState(\"result\");\n const [dataSet, setDataSet] = useState([]);\n const [labelsArray, setLabelsArray] = useState([]);\n const [currentTask, setCurrentTask] = useState(0);\n\n const resultProps = [\n ,\n ,\n \n ];\n\n const graphOptions = {\n title: {\n display: false\n },\n legend: {\n display: true,\n position: \"bottom\",\n },\n hover: {\n mode: \"index\",\n intersect: false\n },\n tooltips: {\n enabled: true,\n mode: \"index\",\n intersect: false,\n },\n defaultFontFamily: \"Raleway, sans-serif\",\n scales: {\n yAxes: [\n {\n ticks: {\n beginAtZero: true,\n callback: function(value, index, values) {\n return value + Labels[yLabel];\n }\n },\n gridLines: {\n drawOnChartArea: false\n },\n }\n ],\n xAxes: [\n {\n type: 'time',\n distribution: 'series',\n time: {\n unit: 'day',\n tooltipFormat: 'll'\n },\n gridLines: {\n drawOnChartArea: false\n },\n ticks: {\n min: labelsArray[0],\n max: labelsArray[labelsArray.length - 1]\n }\n }\n ],\n },\n plugins: {\n zoom: {\n zoom: {\n enabled: true,\n mode: 'x',\n speed: 0.05\n },\n pan: {\n enabled: true,\n mode: 'x',\n }\n }\n }\n };\n\n const [options, setOptions] = useState(graphOptions);\n\n useEffect(() => {\n setResults(props.myresults);\n }, [props.myresults]);\n\n useEffect(() => {\n updateChart();\n }, [results, xLabel, yLabel, currentTask]);\n\n const updateChart = () => {\n var data = [];\n var labels = [];\n let pointBackgroundColors = [];\n\n if (typeof results === 'undefined')\n return false;\n\n results.taken[currentTask].results.forEach((result) => {\n data.push(result[yLabel]);\n \n let colorIndex = (result[yLabel] - 1 < LabelColors.length) ? result[yLabel] - 1 : 0;\n pointBackgroundColors.push(LabelColors[colorIndex]);\n\n var label = result[xLabel] + Labels[xLabel];\n if (xLabel === \"date\"){\n const elementDate = new Date(result[xLabel]);\n label = elementDate.toLocaleString('en');\n }\n labels.push(label);\n });\n\n const dataObject = {\n label: results.taken[currentTask].task_title,\n data: data,\n showLine: true,\n pointRadius: 5,\n pointHoverRadius: 10,\n pointBackgroundColor: pointBackgroundColors,\n backgroundColor: AxisColor,\n borderColor: BackgroundColor,\n hidden: false,\n fill: false\n };\n\n setDataSet([dataObject]);\n setLabelsArray(labels);\n \n var tempOptions = graphOptions;\n tempOptions.scales.xAxes[0].type = xLabel === \"date\" ? 'time' : 'category';\n tempOptions.scales.xAxes[0].ticks.min = Math.min(...labels);\n tempOptions.scales.xAxes[0].ticks.max = Math.max(...labels);\n setOptions(tempOptions);\n }\n\n const data = {\n labels: labelsArray,\n datasets: dataSet,\n };\n\n if (typeof results === 'undefined') {\n return false;\n }else {\n return (\n \n \n \n \n {(typeof results === 'undefined' ? '' : results.taken.map((taak, id) => {\n return (\n setCurrentTask(parseInt(e.target.value))}\n className={id === currentTask ? 'active' : 'default'}\n type=\"button\"\n >\n {t(\"resultGraph.taak\")} {taak.task_title}\n \n )\n }))}\n \n\n \n setXLabel(e.target.value)}>\n {resultProps}\n \n \n \n );\n }\n};\n\nexport default ResultsGraph;\n","import React, {useState} from \"react\";\nimport styled from \"styled-components\";\nimport Card from \"../styled/card\";\nimport { P } from \"../styled/typography\";\nimport { useTranslation } from \"react-i18next\";\nimport {FaCalendar, FaInfoCircle} from \"react-icons/fa\";\n\nconst NavItem = styled(Card)`\n width: 50%;\n margin: 5px 5px 5px 0px;\n cursor: pointer;\n\n @media (min-width: 980px) {\n width: 24%;\n }\n`;\n\nconst Text = styled(P)`\n margin: 0px;\n font-weight: bold;\n &.isactive {\n color: #51c0cf;\n }\n`;\n\nconst DatesText = styled(P)`\n margin: 10px 0px 0px 0px;\n font-size: 0.8em;\n font-style: italic;\n letter-spacing: 0.02em;\n cursor: default;\n vertical-align: middle;\n`;\n\nconst CalendarIcon = styled(FaCalendar)`\n font-size: 0.7em;\n margin: 0px 5px 0px 0px;\n`;\n\nfunction TaskDatesList(props) {\n const { t, i18n } = useTranslation();\n const taskObjects = props.tasks.map((task, i) => ({id: i, task: task}))\n const dates_firsttask = taskObjects[0].task.task_dates.map((myDate, i) => ({id: i, date: myDate.date}));\n const firstDate = new Date(dates_firsttask[0].date).toLocaleDateString(i18n.language);\n const dates_lasttask = taskObjects[taskObjects.length-1].task.task_dates.map((myDate, i) => ({id: i, date: myDate.date}));\n const lastDate = new Date(dates_lasttask[dates_lasttask.length-1].date).toLocaleDateString(i18n.language);\n\n return (\n \n {firstDate} » {lastDate}\n \n )\n}\n\nfunction ResultNavigation(props) {\n const { t, i18n } = useTranslation();\n const [dates, setDates] = useState();\n\n return (\n \n \n {t(\"resultNavigation.assignment\")} {props.result.assignment_title}\n \n \n \n );\n}\n\nexport default ResultNavigation;\n","import React, { useState, useEffect, useContext } from \"react\";\nimport styled from \"styled-components\";\nimport PatientOverlay from \"../../components/overlays/patientOverlay\";\nimport Global from \"../../components/styled/global\";\nimport { PageTitle, H4, SmallTitle } from \"../../components/styled/typography\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { api } from \"../../api\";\nimport ResultsGraph from \"../../components/resultsGraph/resultsGraph\";\nimport ResultNavigation from \"../../components/resultsGraph/resultNavigation\";\nimport LoadSpinner from \"../../components/loadspinner\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport { observer } from \"mobx-react\";\nimport registrationStore from \"../../components/registrationStore\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Flex = styled.div`\n display: flex;\n`;\n\nconst UnAvailable = styled.div`\n display: none;\n\n @media (min-width: 980px) {\n display: block;\n }\n`;\n\nconst NotAvailableText = styled.div`\n display: block;\n @media (min-width: 980px) {\n display: none;\n }\n`;\n\nconst ResultatenDetail = observer(() => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [Loading, setLoading] = useState(true);\n const [GraphLoading, setGraphLoading] = useState(true);\n const [thisAssignment, setThisAssignment] = useState([]);\n const [results, setResults] = useState([]);\n const [activeGraph, setActiveGraph] = useState();\n\n useEffect(() => {\n api.get(\"user/\" + user.public_id + \"/completedtasks\").then((response) => {\n setThisAssignment(response.data.output);\n setLoading(false);\n });\n }, []);\n const handleClick = (e) => {\n const index = e.target.getAttribute(\"value\");\n const assignment = thisAssignment.findIndex((p) => p.assignment_id == index);\n var elems = document.querySelectorAll(\".isactive\");\n [].forEach.call(elems, function (el) {\n el.classList.remove(\"isactive\");\n });\n e.target.className += \" isactive\";\n setResults(thisAssignment[assignment]);\n setGraphLoading(false);\n };\n return (\n \n \n \n \n {t(\"patientCard.results\")}\n \n {t(\"resultatenDetail.select\")}\n \n {Loading ? (\n \n ) : thisAssignment.length > 0 ? (\n thisAssignment.map((result) => (\n \n ))\n ) : (\n
{t(\"resultatenDetail.noAss\")}
\n )}\n
\n {Loading ? (\n \n ) : GraphLoading ? (\n \"\"\n ) : (\n \n )}\n
\n \n
{t(\"resultatenDetail.phone\")}
\n
\n
\n
\n
\n );\n});\n\nexport default ResultatenDetail;\n","import React, {useState, useRef, useEffect, useContext} from 'react';\nimport styled from \"styled-components\";\nimport Button from \"../styled/button\"\nimport { useTranslation } from \"react-i18next\"\nimport { observer } from \"mobx-react\";\nimport ResultStore from \"../resultStore\";\n\nconst Relative = styled.div`\n`\n\nconst Buttons = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: stretch;\n`\n\nconst StartButton = styled(Button)`\n background-color: #45AE7C;\n border-color: #45AE7C;\n margin-bottom: 10px;\n\n &:hover{\n background-color: #45AE7C;\n border-color: #45AE7C;\n }\n`\n\nconst StopButton = styled(Button)`\n background-color: #DC393D;\n border-color: #DC393D;\n margin-bottom: 10px;\n\n &:hover{\n background-color: #DC393D;\n border-color: #DC393D;\n }\n`\n\nconst Video = styled.video`\n width: 100%;\n object-fit: cover;\n border-radius: 5px;\n border: 1px solid #51C0CF;\n margin-bottom: 10px;\n`\n\nconst Canvas = styled.canvas`\n position: absolute;\n width: 100% !important;\n height: auto !important;\n object-fit: cover;\n border-radius: 5px;\n margin-bottom: 10px;\n`\n\nconst VideoContainer = styled.div`\n display: inline;\n position: relative;\n`\n\nconst Recorder = observer((props) => {\n const { t, i18n } = useTranslation()\n const [replayVisible, setReplayVisible] = useState(false)\n const [buttonValue, setButtonValue] = useState(t('recorder.startCamera'))\n const [gridVisible, setGridVisible] = useState(false)\n const [overlayButtonValue, setOverlayButtonValue] = useState(\"Show Grid\")\n const canvasRef = useRef(null);\n const previewRef = useRef(null);\n const replayRef = useRef(null);\n\n const resultstore = useContext(ResultStore);\n\n const gridOptions = {\n hSections: 4,\n vSections: 3,\n color: '#51C0CF',\n width: 10\n };\n\n useEffect(() => {\n if (gridVisible) drawGridLines();\n }, [gridVisible]);\n\n useEffect(() => {\n return () => {\n stop(previewRef.current?.srcObject);\n };\n }, []);\n\n function log(msg) {\n console.log(msg + \"\\n\");\n }\n\n function wait(delayInMS) {\n return new Promise(resolve => setTimeout(resolve, delayInMS));\n }\n\n function stop(stream) {\n if(stream) {\n stream.getTracks().forEach(track => track.stop());\n }\n }\n\n const StartRecording = (stream, lengthInMS) => {\n let recorder = new MediaRecorder(stream);\n let stopBtn = document.getElementById('stopBtn')\n let data = [];\n\n resultstore.setIsRecording();\n\n recorder.ondataavailable = event => data.push(event.data);\n recorder.start();\n log(recorder.state + \" for \" + (lengthInMS/1000) + \" seconds...\");\n\n let stopped = new Promise((resolve, reject) => {\n recorder.onstop = resolve;\n recorder.onerror = event => reject(event.name);\n });\n\n wait(lengthInMS).then(\n () => recorder.state === \"recording\" && recorder.stop()\n );\n\n stopBtn.addEventListener(\"click\", () => {\n recorder.state === \"recording\" && recorder.stop()\n })\n \n return Promise.all([\n stopped\n ])\n .then(() => data);\n }\n\n const handleClick = () => {\n if (replayVisible === true){\n setReplayVisible(false)\n setButtonValue(t('recorder.startCamera'))\n } else {\n setButtonValue(t('recorder.tryAgain'))\n }\n\n let preview = previewRef.current;\n navigator.mediaDevices.getUserMedia({\n audio: true,\n video: {facingMode: \"user\", width: {min: 640, ideal: 1280, max:1920}, height:{min:480, ideal:720, max:1080}}\n }).then(stream => {\n preview.srcObject = stream;\n preview.captureStream = preview.captureStream || preview.mozCaptureStream;\n preview.onloadedmetadata = () => {\n preview.play()\n }\n return new Promise(resolve => preview.onplaying = resolve);\n }).then(() =>\n StartRecording(preview.captureStream(), 300000)\n ).then (recordedChunks => {\n setReplayVisible(true);\n let recordedBlob = new Blob(recordedChunks);\n replayRef.current.src = URL.createObjectURL(recordedBlob);\n props.onRecordingComplete(recordedBlob);\n resultstore.setIsRecording();\n })\n .catch(log);\n }\n \n const handleStopClick = () => {\n setButtonValue(t('recorder.tryAgain'));\n stop(previewRef.current.srcObject);\n }\n\n const handleOverlayClick = () => {\n setOverlayButtonValue(!gridVisible ? \"Hide Grid\" : \"Show Grid\");\n setGridVisible(!gridVisible);\n }\n\n const drawGridLines = () => {\n let video = null;\n if (replayVisible){\n video = replayRef.current;\n }else{\n video = previewRef.current;\n }\n\n let canvas = canvasRef.current;\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n\n var width = canvas.width;\n var height = canvas.height;\n var ctx = canvas.getContext('2d');\n var lineWidth = gridOptions.width;\n ctx.strokeStyle = gridOptions.color;\n ctx.lineWidth = lineWidth;\n ctx.beginPath();\n\n var i = null;\n\n for (i = 1; i <= gridOptions.hSections; i++) {\n var x = (i * width / gridOptions.hSections);\n ctx.moveTo(x, 0);\n ctx.lineTo(x, height);\n ctx.stroke();\n }\n\n for (i = 1; i <= gridOptions.vSections; i++) {\n var y = (i * height / gridOptions.vSections);\n ctx.moveTo(0, y);\n ctx.lineTo(width, y);\n ctx.stroke();\n }\n\n ctx.closePath();\n }\n\n return (\n <>\n \n {gridVisible && }\n {replayVisible ?\n :\n \n }\n \n \n {buttonValue}\n {!replayVisible && {t('recorder.stopBtn')}}\n \n \n \n )\n})\n\nexport default Recorder","import React, { useState, useEffect } from 'react';\nimport audioFile from \"./metronome80.wav\";\nimport styled from \"styled-components\";\nimport Button from \"../../styled/button\";\nimport { FaPlay, FaStop } from \"react-icons/fa\";\nimport { useTranslation } from \"react-i18next\";\n\n\nconst Text = styled.p`\n font-size: 20px;\n font-weight: bold;\n color: #545454;\n display: block;\n margin-bottom: 0px;\n`\n\nconst Styled = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n width: 100%;\n`\nconst PlayIcon = styled(FaPlay)`\n font-size: 14px;\n color: white;\n margin-right: 15px;\n`\n\nconst StopIcon = styled(FaStop)`\n font-size: 14px;\n color: white;\n margin-right: 15px;\n`\n\nconst BPMText = styled.p`\n font-size: 20px;\n display: block;\n margin-top: 5px;\n`\n\nconst ButtonStart = styled(Button)`\n background: #45AE7C;\n border-color: #45AE7C;\n width: 100%;\n\n &:hover{\n background: #45AE7C;\n border-color: #45AE7C;\n }\n`\nconst ButtonStop = styled(Button)`\n background: #DC393D;\n border-color: #DC393D;\n width: 100%;\n\n &:hover{\n background: #DC393D;\n border-color: #DC393D;\n }\n`\n\nconst BPM = styled.span`\n color: #51C0CF;\n font-size: 16px;\n`\nconst RangeDiv = styled.div`\n width: 100%;\n`\n\nconst Range = styled.input`\n width: 100%;\n`\n\nconst Buttons = styled.div`\n width: 100%;\n margin: 15px auto;\n`\n\nconst Metronoom = () => {\n const { t, i18n } = useTranslation()\n const audio = new Audio(audioFile)\n const [intervalID, setIntervalID] = useState()\n const [rangeValue, setRangeValue] = useState(80)\n const [showPlay, setShowPlay] = useState(true)\n const [showStop, setShowStop] = useState(false)\n const [changeable, setChangeable] = useState(true)\n\n useEffect(() => {\n return function cleanup(){\n clearInterval(intervalID)\n }\n })\n\n const playaudio = () => {\n var intervalId = setInterval(function () {\n audio.play()\n }, 60 / rangeValue * 1000)\n setIntervalID(intervalId)\n setShowPlay(false)\n setShowStop(true)\n }\n const stopaudio = () => {\n clearInterval(intervalID)\n setShowPlay(true)\n setShowStop(false)\n }\n const HandleChange = (e) => {\n setRangeValue(e.target.value)\n stopaudio()\n\n }\n return (\n\n \n {t('metronoom.metronome')}\n \n {rangeValue} {t('metronoom.bpm')}\n \n \n \n \n \n {showPlay && playaudio()}>{t('metronoom.start')}}\n {showStop && stopaudio()}>{t('metronoom.stop')}}\n {\n // setChangeable(!changeable)} />\n }\n \n \n );\n}\n\nexport default Metronoom;","import React, { useState } from 'react';\nimport styled from \"styled-components\";\nimport Button from \"../../styled/button\"\nimport { FaPlay, FaStop, FaUndoAlt } from \"react-icons/fa\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Thing = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n width: 100%;\n`\n\nconst Text = styled.p`\n font-size: 20px;\n font-weight: bold;\n color: #545454;\n display: block;\n margin-bottom: 0px;\n`\n\nconst PlayIcon = styled(FaPlay)`\n font-size: 14px;\n color: white;\n margin-right: 15px;\n`\n\nconst StopIcon = styled(FaStop)`\n font-size: 14px;\n color: white;\n margin-right: 15px;\n`\n\nconst ResetIcon = styled(FaUndoAlt)`\n font-size: 14px;\n color: white;\n margin-right: 15px;\n`\n\nconst Time = styled.p`\n font-size: 30px;\n color: #545454;\n margin-top: 5px;\n margin-bottom: 10px;\n`\n\nconst RoundList = styled.p`\n margin: 5px 0px 0px 0px;\n font-family: Raleway;\n font-size: 20px;\n`\n\nconst ButtonStart = styled(Button)`\n background: #45AE7C;\n border-color: #45AE7C;\n width: 48%;\n\n &:hover{\n background: #45AE7C;\n border-color: #45AE7C;\n }\n`\nconst ButtonStop = styled(Button)`\n background: #DC393D;\n border-color: #DC393D;\n width: 48%;\n\n &:hover{\n background: #DC393D;\n border-color: #DC393D;\n }\n`\nconst ButtonReset = styled(Button)`\n background: #DC393D;\n border-color: #DC393D;\n width: 48%;\n\n &:hover{\n background: #DC393D;\n border-color: #DC393D;\n }\n\n`\nconst ButtonRound = styled(Button)`\n background: #45AE7C;\n border-color: #45AE7C;\n width: 100%;\n\n &:hover{\n background: #45AE7C;\n border-color: #45AE7C;\n }\n`\n\nconst Sec = styled.span`\n color: #51C0CF;\n font-size: 16px;\n`\n\nconst Buttons = styled.div`\n display: flex;\n justify-content: space-between;\n width: 100%;\n margin-bottom: 15px;\n`\n\nconst FullWidth = styled.div`\n width: 100%;\n`\n\nconst Rounds = styled.div`\n margin-bottom: 7px;\n`\n\nconst CreateTimer = (props) => {\n const { t, i18n } = useTranslation()\n const MAXMIN = props.MAXMIN;\n const MAXSEC = props.MAXSEC;\n const MAXMILI = props.MAXMILI;\n const [showTimeUp, setTimeUp] = useState(false);\n const [rounds, setRounds] = useState([\"\"]);\n const [timer, setTimer] = useState()\n const [showStart, setShowStart] = useState(true)\n const [showStop, setShowStop] = useState(false)\n let minutes = 0\n let seconds = 0\n let mili = 0\n let running = false\n const [state, setState] = useState(\"00:00:00\")\n\n const updateState = () => {\n setState((\"0\" + minutes).slice(-2) + \":\" + (\"0\" + seconds).slice(-2) + \":\" + (\"0\" + mili).slice(-2))\n\n if (MAXMIN === minutes && MAXSEC === seconds && MAXMILI === mili) {\n setTimeUp(true)\n }\n }\n\n const addMili = () => {\n mili = mili + 1\n if (mili === 100) {\n seconds = seconds + 1\n mili = mili - 100\n if (seconds === 60) {\n if (minutes === 99) {\n\n } else {\n minutes = minutes + 1\n }\n }\n }\n updateState()\n }\n\n const handleStart = () => {\n if (!running) {\n setRounds([\"\"])\n running = true\n var timerID\n timerID = setInterval(() => {\n addMili()\n }, 10)\n setTimer(timerID)\n }\n setShowStop(true)\n setShowStart(false)\n setTimeUp(false)\n }\n const handleStop = () => {\n running = false\n clearInterval(timer)\n setShowStop(false)\n setShowStart(true)\n }\n const handleReset = () => {\n minutes = 0\n seconds = 0\n mili = 0\n setRounds([\"\"])\n setState(\"00:00:00\")\n updateState()\n }\n const handleRounds = (round) => {\n setRounds(rounds => [...rounds, state]);\n }\n\n return (\n \n Chronometer\n {showTimeUp && {t('chronometer.timeUp')}}\n \n \n {\n rounds.map((item, index) => {\n return ({item})\n })\n }\n \n \n {showStart && handleStart()}>{t('chronometer.start')}}\n {showStop && handleStop()}>{t('chronometer.stop')}}\n handleReset()}>{t('chronometer.reset')}\n \n \n {showStop && handleRounds()}>{t('chronometer.round')}}\n \n \n \n )\n}\n\nexport default CreateTimer;","// @ts-nocheck\nimport React, {useState, useEffect, useContext} from \"react\";\nimport styled from \"styled-components\";\nimport { PageTitle, SmallTitle, P } from \"../styled/typography\";\nimport Card from \"../styled/card\";\nimport Button from \"../styled/button\";\nimport { Redirect } from \"react-router-dom\";\nimport { Formik, Field } from \"formik\";\nimport { useTranslation } from \"react-i18next\";\nimport Recorder from \"../video/Recorder\";\nimport Metronome from \"../exerciseUtilities/metronoom/Metronoom\";\nimport Chrono from \"../exerciseUtilities/chronometer/Chronometer\";\nimport Flash from \"../styled/flashMessage\";\nimport resultStore from \"../resultStore\";\n\nconst DagboekCard = styled(Card)`\n display: flex;\n flex-direction: column;\n align-items: center;\n position: relative;\n padding: 20px 50px 60px 50px;\n\n @media (min-width: 980px) {\n padding-top: 20px;\n padding-bottom: 60px;\n }\n`;\n\nconst Flex = styled.div`\n display: flex;\n`;\n\nconst FlexColumn = styled(Flex)`\n flex-direction: column;\n align-items: center;\n margin: 5px 20px;\n\n @media (min-width: 980px) {\n margin: 0px 20px;\n }\n`;\n\nconst Title = styled(SmallTitle)`\n margin-top: 0px;\n`;\n\nconst Description = styled(P)`\n margin: 0px;\n`;\n\nconst Desc = styled(P)`\n margin-top: 0px;\n color: #545454;\n`;\n\nconst Bold = styled(P)`\n font-weight: bold;\n color: #545454;\n margin: 0px;\n margin-top: 20px;\n margin-bottom: 10px;\n font-size: 20px;\n`;\n\nconst TextBox = styled(Field)`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n margin-bottom: 10px;\n outline: none;\n width: 100%;\n height: 200px;\n`;\n\nconst ButtonBox = styled.div`\n margin-top: 30px;\n width: 100%;\n`;\n\nconst SubmitButton = styled(Button)`\n width: 100%;\n\n @media (min-width: 768px) {\n width: auto;\n }\n`;\n\nconst FlexLabel = styled.label`\n display: flex;\n flex-direction: row-reverse;\n align-items: center;\n\n @media (min-width: 980px) {\n flex-direction: column;\n }\n`;\n\nconst Fieldset = styled.div`\n border: none;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n\n @media (min-width: 980px) {\n flex-direction: row;\n align-items: center;\n }\n`;\n\nconst FlexCards = styled(Flex)`\n flex-direction: column;\n align-items: stretch;\n\n &.communication-component {\n flex-direction: column;\n align-items: stretch;\n }\n\n @media (min-width: 768px) {\n flex-direction: row;\n align-items: flex-start;\n\n &.communication-component {\n flex-direction: column;\n align-items: stretch;\n margin-bottom: 30px;\n }\n }\n`;\n\nconst OptionsCard = styled(Card)`\n width: 100%;\n margin-top: 15px;\n\n @media (min-width: 768px) {\n width: 29.25%;\n margin-top: 0px;\n margin-left: 15px;\n\n &.communication-option-component {\n width: 100%;\n margin-top: 15px;\n margin-left: 0px;\n }\n }\n`;\n\nconst TaskCard = styled.div`\n width: 100%;\n\n @media (min-width: 980px) {\n width: 100%;\n }\n`;\n\nconst QuestionElement = styled.div`\n width: 70vw;\n`\n\nfunction Dagboek(props) {\n const { t, i18n } = useTranslation();\n\n const exercise = props.exercise;\n const [redirect, setRedirect] = useState(false);\n const [scores, setScores] = useState({});\n const [openAnswers, setOpenAnswers] = useState({});\n const [scaleAnswers, setScaleAnswers] = useState({});\n const [allQuestions, setAllQuestions] = useState([]);\n const [showSucces, setShowSucces] = useState(false);\n const [isExample, setIsExample] = useState(false);\n const [isReview, setIsReview] = useState(false);\n\n const ReceiveRecording = (recording) => {\n props.HandleRecording(recording);\n setShowSucces(true);\n setTimeout(function () {\n setShowSucces(false);\n }, 5000);\n };\n\n function shuffle(array) {\n var currentIndex = array.length,\n temporaryValue,\n randomIndex;\n\n // While there remain elements to shuffle...\n while (0 !== currentIndex) {\n // Pick a remaining element...\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n\n // And swap it with the current element.\n temporaryValue = array[currentIndex];\n array[currentIndex] = array[randomIndex];\n array[randomIndex] = temporaryValue;\n }\n\n return array;\n }\n\n function createScale(question) {\n let scale = [];\n var i;\n for (i = 0; i < question.scale_possibilities; i++) {\n scale.push(\n \n \n
{question.fields[0][i].name}
\n \n
\n
\n );\n }\n\n // else {\n // var i\n // for (i = 0; i < options.scalePossibilities; i++){\n // scale.push()\n // }\n // }\n return scale;\n }\n\n useEffect(() => {\n if (exercise.random_all) {\n var questions = [];\n exercise.question_types.map((type) => {\n questions = questions.concat(type.questions);\n });\n var randQuestions = shuffle(questions);\n setAllQuestions(randQuestions);\n } else if (exercise.random_within_type) {\n var questions = [];\n exercise.question_types.map((type) => {\n var randQuestions = shuffle(type.questions);\n questions = questions.concat(randQuestions);\n });\n setAllQuestions(questions);\n } else {\n var questions = [];\n exercise.question_types.map((type) => {\n questions = questions.concat(type.questions);\n });\n setAllQuestions(questions);\n }\n // exercise.description.split('\\n').map(str =>

{str}

);\n }, []);\n\n if (exercise) {\n return (\n
\n {exercise.title}\n {props.taskDescription}\n \n \n \n

\") }} />\n {\n var dict = {};\n exercise.question_types.map((type) => {\n return type.questions.map((question) => {\n return (dict[question.id] = 0);\n });\n });\n return dict;\n }}\n onSubmit={(values, actions) => {\n var scores = {};\n var Totaalscore = 0;\n var maxTotaalScore = 0;\n var type;\n var question;\n var aantalvragen = 0;\n var openAnswers = {};\n var scaleAnswers = {};\n for (type of exercise.question_types) {\n var subscore = 0;\n var subvragen = 0;\n var subtotaalscore = 0;\n for (question of type.questions) {\n if (question.answer_possibility === \"schaal\") {\n Totaalscore += parseInt(values[question.id], 10);\n subscore += parseInt(values[question.id], 10);\n aantalvragen += 1;\n subvragen += 1;\n subtotaalscore += parseInt(\n question.max_score, 10\n );\n maxTotaalScore += parseInt(\n question.max_score, 10\n );\n\n var index = question.fields.indexOf(values[question.id]);\n scaleAnswers[question.question] = question.fields[index];\n } else {\n openAnswers[question.question] = values[question.id];\n }\n }\n scores[type.name] = subscore + \"/\" + subtotaalscore;\n }\n var totalscoreName = t(\"dagboek.totaalScore\");\n scores[totalscoreName] = Totaalscore + \"/\" + maxTotaalScore;\n setScores(scores);\n setOpenAnswers(openAnswers);\n setScaleAnswers(scaleAnswers);\n if (props.redirectEnabled) {\n setRedirect(true);\n } else if(props.isExample) {\n setIsExample(true);\n } else if(props.isReview) {\n setIsReview(true);\n } else {\n props.endExercise({\n id: exercise.id,\n scores: scores,\n exercise: exercise,\n startTime: props.startTime,\n title: exercise.title,\n type: \"resultformdagboek\",\n });\n }\n }}\n render={({ handleSubmit, values, setFieldValue }) => (\n
\n {allQuestions.map((question) => {\n return (\n \n {question.question.split('\\n').map(str =>

{str}

)}
\n {question.answer_possibility == \"open antwoord\" ? (\n \n ) : (\n {createScale(question)}\n )}\n
\n );\n })}\n \n {t(\"dagboek.submit\")}\n {redirect && (\n \n )}\n {isExample && (\n \n )}\n {isReview && (\n \n )}\n \n
\n )}\n >\n \n \n {(exercise.should_be_chrono ||\n exercise.should_be_metronome ||\n exercise.should_be_recorded) && (\n \n {t(\"stappenplan.options\")}\n {props.showRecorder &&\n exercise.should_be_recorded && (<>\n \n {showSucces && {t(\"stappenplan.video\")}.}\n )}\n {exercise.should_be_chrono && }\n {exercise.should_be_metronome && }\n \n )}\n \n
\n );\n }\n}\n\nexport default Dagboek;\n","import React, { useState, useEffect, useContext } from \"react\";\nimport styled from \"styled-components\";\nimport { PageTitle, P } from \"../styled/typography\";\nimport Button from \"../styled/button\";\nimport Card from \"../styled/card\";\nimport { Redirect } from \"react-router-dom\";\nimport { FaArrowRight, FaArrowLeft } from \"react-icons/fa\";\nimport Flash from \"../styled/flashMessage\";\nimport Metronome from \"../exerciseUtilities/metronoom/Metronoom\";\nimport Chrono from \"../exerciseUtilities/chronometer/Chronometer\";\nimport Recorder from \"../video/Recorder\";\nimport { useTranslation } from \"react-i18next\";\nimport resultStore from \"../resultStore\";\nimport { observer } from \"mobx-react\";\n\nconst STEMCard = styled(Card)`\n display: flex;\n flex-direction: column;\n align-items: center;\n position: relative;\n padding: 40px 20px;\n\n @media (min-width: 980px) {\n padding-right: 80px;\n padding-left: 80px;\n padding-top: 20px;\n padding-bottom: 60px;\n }\n`;\n\nconst TaskCard = styled.div`\n width: 100%;\n\n @media (min-width: 980px) {\n width: 100%;\n }\n`;\n\nconst OptionsCard = styled(Card)`\n width: 100%;\n margin-top: 15px;\n\n @media (min-width: 768px) {\n width: 29.25%;\n margin-top: 0px;\n margin-left: 15px;\n\n &.communication-option-component {\n width: 100%;\n margin-top: 15px;\n margin-left: 0px;\n }\n }\n`;\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n }\n`;\n\nconst FlexCards = styled.div`\n display: flex;\n justify-content: space-between;\n flex-direction: column;\n align-items: stretch;\n\n @media (min-width: 768px) {\n flex-direction: row;\n align-items: flex-start;\n\n &.communication-component {\n flex-direction: column;\n align-items: stretch;\n margin-bottom: 30px;\n }\n }\n`;\n\nconst Title = styled(P)`\n font-weight: bold;\n font-size: 24px;\n color: #545454;\n text-align: center;\n margin-top: 0px;\n @media (min-width: 980px) {\n margin-top: 30px;\n }\n`;\n\nconst Bold = styled(P)`\n font-weight: bold;\n color: #545454;\n text-align: center;\n`;\n\nconst Text = styled(P)`\n text-align: center;\n padding: 0px 15px;\n`;\nconst Audio = styled.audio`\n max-width: 80%;\n margin-top: 20px;\n margin-bottom: 20px;\n`;\n\nconst NextIcon = styled(FaArrowRight)`\n color: #ffffff;\n padding-right: 10px;\n font-size: 16px;\n transform: translateY(2px);\n`;\n\nconst NextIconPrimary = styled(FaArrowRight)`\n color: #51c0cf;\n cursor: pointer;\n font-size: 45px;\n position: absolute;\n top: 50%;\n right: 30px;\n`;\n\nconst BackIconPrimary = styled(FaArrowLeft)`\n color: #51c0cf;\n cursor: pointer;\n font-size: 45px;\n position: absolute;\n top: 50%;\n left: 30px;\n`;\n\nconst BackIcon = styled(FaArrowLeft)`\n color: #afafaf;\n font-size: 16px;\n padding-right: 10px;\n cursor: pointer;\n`;\n\nconst BackText = styled(P)`\n margin: 0px;\n position: absolute;\n bottom: 20px;\n left: 30px;\n cursor: pointer;\n`;\n\nconst BlueText = styled(P)`\n color: #51c0cf;\n`;\n\nconst Description = styled(P)`\n margin-top: 0px;\n color: #545454;\n`;\n\nconst Img = styled.img`\n width: 80%;\n\n @media (min-width: 980px) {\n width: 60%;\n }\n`;\n\nconst NextButton = styled(Button)`\n margin-bottom: 20px;\n @media (min-width: 980px) {\n margin-bottom: auto;\n }\n`;\n\nconst CenterFlex = styled.div`\n display: flex;\n justify-content: center;\n`;\n\nconst Video = styled.video`\n width: 80%;\n margin-bottom: 10px;\n`;\n\nconst EndButton = styled(Button)`\n margin-top: 25px;\n`;\n\nconst LargeImage = styled(Img)`\n @media (min-width: 980px) {\n width: 60%;\n }\n`;\n\nconst Stappenplan = observer ((props) => {\n const { t, i18n } = useTranslation();\n const exercise = props.exercise;\n const [currentStep, setStep] = useState(props.activeStep ?? 1);\n const [miniStep, setCurrentMiniStep] = useState(props.activeMiniStep ?? 1);\n const [loading, setLoading] = useState(true);\n const [redirect, setRedirect] = useState(false);\n const [showSucces, setShowSucces] = useState(false);\n const [goalIMG, setGoalIMG] = useState();\n const [goalVideo, setGoalVideo] = useState();\n const [prepIMG, setPrepIMG] = useState();\n const [prepVideo, setPrepVideo] = useState();\n const [medIMG, setMedIMG] = useState();\n const [compAudio, setCompAudio] = useState();\n const [compVideo, setCompVideo] = useState();\n const [questionUrls, setQuestionUrls] = useState([]);\n const [questionImgUrls, setQuestionImgUrls] = useState([]);\n const [questionVideoUrls, setQuestionVideoUrls] = useState([]);\n const resultstore = useContext(resultStore);\n const [showEndRecorder, setShowEndRecorder] = useState(false);\n const [isExample, setIsExample] = useState(false);\n const [isReview, setIsReview] = useState(false);\n\n useEffect(() => { if(props.activeStep) setStep(props.activeStep) }, [props.activeStep])\n useEffect(() => { if(props.activeMiniStep) setCurrentMiniStep(props.activeMiniStep) }, [props.activeMiniStep])\n\n const setCurrentStep = (newStep) => {\n if(props.onStepChange) props.onStepChange(newStep);\n setStep(newStep);\n }\n\n const setMiniStep = (newMiniStep) => {\n if(props.onMiniStepChange) props.onMiniStepChange(newMiniStep);\n setCurrentMiniStep(newMiniStep);\n }\n\n function getUrl(type, id) {\n if (type === \"question\") {\n var output = questionUrls.find(url => url.id === id);\n return output ? output.value : output;\n } else if (type === \"questionImage\") {\n var output = questionImgUrls.find(url => url.id === id);\n return output ? output.value : output;\n } else if (type === \"questionVideo\") {\n var output = questionVideoUrls.find(url => url.id === id);\n return output ? output.value : output;\n }\n }\n\n const nextStep = () => {\n if (currentStep < 4) {\n if (\n exercise.preparation && ! Array.isArray(exercise.preparation) && exercise.preparation.text != '

' && exercise.goal\n ) {\n setCurrentStep(currentStep + 1);\n } else {\n if (currentStep === 3) {\n setCurrentStep(4);\n } else {\n setCurrentStep(3);\n }\n }\n }\n };\n const prevStep = () => {\n if (currentStep > 1) {\n if (\n exercise.preparation && ! Array.isArray(exercise.preparation) && exercise.preparation.text != '

' && exercise.goal\n ) {\n setCurrentStep(currentStep - 1);\n } else {\n setCurrentStep(1);\n }\n }\n };\n\n const nextMiniStep = () => {\n setMiniStep(miniStep + 1);\n };\n const prevMiniStep = () => {\n setMiniStep(miniStep - 1);\n };\n\n const toResult = () => {\n if (resultstore.isRecording) {\n setShowEndRecorder(true);\n } else {\n setShowEndRecorder(false);\n if (props.redirectEnabled) {\n setRedirect(true);\n } else if(props.isExample) {\n setIsExample(true);\n } else if(props.isReview) {\n setIsReview(true);\n } else {\n props.endExercise();\n }\n }\n };\n\n const ReceiveRecording = (recording) => {\n props.HandleRecording(recording);\n setShowSucces(true);\n setTimeout(function () {\n setShowSucces(false);\n }, 5000);\n };\n\n // Change styling for communication module\n const FlexCardsId = document.getElementById(\"flex-cards\");\n const OptionsCardId = document.getElementById(\"options-card\");\n if (props.isCommunicationComponent && FlexCardsId && OptionsCardId) {\n FlexCardsId.classList.add(\"communication-component\");\n OptionsCardId.classList.add(\"communication-option-component\");\n }\n\n useEffect(() => {\n if (! exercise.goal) {\n if (! exercise.preparation) {\n setCurrentStep(3);\n } else {\n setCurrentStep(2);\n }\n }\n\n if (exercise.media_complete_id) {\n props.getRessource(exercise.media_complete_id).then((res) => {\n setMedIMG(res);\n });\n }\n if (exercise.audio_complete_id) {\n props.getRessource(exercise.audio_complete_id).then((res) => {\n setCompAudio(res);\n });\n }\n if (exercise.video_complete_id) {\n props.getRessource(exercise.video_complete_id).then((res) => {\n setCompVideo(res);\n });\n }\n if (\n exercise.goal &&\n exercise.goal.media_id\n ) {\n props.getRessource(exercise.goal.media_id).then((res) => {\n setGoalIMG(res);\n });\n }\n if (\n exercise.goal &&\n exercise.goal.video_id\n ) {\n props.getRessource(exercise.goal.video_id).then((res) => {\n setGoalVideo(res);\n });\n }\n if (\n exercise.preparation &&\n exercise.preparation.media_id\n ) {\n props.getRessource(exercise.preparation.media_id).then((res) => {\n setPrepIMG(res);\n });\n }\n if (\n exercise.preparation &&\n exercise.preparation.video_id\n ) {\n props.getRessource(exercise.preparation.video_id).then((res) => {\n setPrepVideo(res);\n });\n }\n\n exercise.steps.map((step, index) => {\n if (step.media_id) {\n props.getRessource(step.media_id).then((response) => {\n setQuestionImgUrls((questionImgUrls) => [...questionImgUrls, {id: step.media_id, value: response}]);\n });\n }\n if (step.video_id) {\n props.getRessource(step.video_id).then((response) => {\n setQuestionVideoUrls((questionVideoUrls) => [...questionVideoUrls, {id: step.video_id, value: response}]);\n });\n }\n if (step.audio_id) {\n props.getRessource(step.audio_id).then((response) => {\n setQuestionUrls((questionUrls) => [...questionUrls, {id: step.audio_id, value: response}]);\n \n });\n }\n if (exercise.steps.length === index + 1) {\n setLoading(false);\n }\n });\n }, []);\n\n if (loading) {\n return \"\";\n } else {\n return (\n <>\n {exercise.title}\n
\n \n \n {currentStep === 1 && (\n \n {t(\"stappenplan.goal\")}\n {exercise.goal.media_id && (\n \n )}\n {exercise.goal.video_id && goalVideo && (\n \n )}\n {/* {exercise.goal.text !== undefined &&} */}\n {/*{exercise.goal.text.split('\\n').map(str =>

{str}

)}*/}\n {exercise.goal.text &&
}\n \n \n )}\n {currentStep === 2 && (\n \n {t(\"stappenplan.prep\")}\n {exercise.preparation.media_id && (\n \n )}\n {exercise.preparation.video_id && prepVideo && (\n \n )}\n {/* {exercise.preparation.text && } */}\n {/*{exercise.preparation.text.split('\\n').map(str =>

{str}

)}*/}\n {exercise.preparation.text &&
}\n \n \n {t(\"stappenplan.nextStep\")}\n \n {exercise.goal && exercise.goal.text && (\n \n \n {t(\"stappenplan.back\")}\n \n )}\n \n )}\n {currentStep === 3 && (\n \n {t(\"stappenplan.perf\")}\n {exercise.media_complete_id && (\n \n )}\n {exercise.audio_complete_id && (\n \n )}\n {exercise.video_complete_id && compVideo && (\n \n )}\n {exercise.steps.map((step, index) => {\n if (miniStep === index + 1)\n return (\n
\n \n {t(\"stappenplan.step\")} {index + 1}\n \n {/* */}\n {/*{step.text.split('\\n').map(str =>

{str}

)}*/}\n
\n {/* {step.text.replace('\\n', '
')}
*/}\n {step.media_id && (\n \n \n \n )}\n {step.audio_id && (\n \n \n \n )}\n {step.video_id && getUrl(\"questionVideo\", step.video_id) && (\n \n \n \n )}\n {miniStep < exercise.steps.length && (\n \n )}\n {miniStep > 1 && }\n
\n );\n }\n )}\n {miniStep === exercise.steps.length && (\n <>\n {showEndRecorder && {t(\"exercise.endCamera\")}}\n \n \n )}\n {redirect && (\n \n )}\n {isExample && (\n \n )}\n {isReview && (\n \n )}\n {exercise.goal &&\n exercise.goal.text &&\n exercise.preparation &&\n exercise.preparation.text && (\n \n \n {t(\"checkoutStep.back\")}\n \n )\n }\n \n )}\n \n\n {(exercise.should_be_chrono ||\n exercise.should_be_metronome ||\n exercise.should_be_recorded) && (\n \n {t(\"stappenplan.options\")}\n {props.showRecorder &&\n exercise.should_be_recorded && (<>\n \n {showSucces && {t(\"stappenplan.video\")}.}\n )}\n {exercise.should_be_chrono && }\n {exercise.should_be_metronome && }\n \n )}\n \n \n );\n }\n});\n\nexport default Stappenplan;\n","import React, { useState, useEffect, useContext } from \"react\";\nimport styled from \"styled-components\";\nimport { PageTitle, P } from \"../styled/typography\";\nimport Button from \"../styled/button\";\nimport Card from \"../styled/card\";\nimport { FaArrowRight, FaArrowLeft } from \"react-icons/fa\";\nimport { Redirect } from \"react-router-dom\";\nimport LoadingSpinner from \"../loadspinner\";\nimport { shake } from \"../styled/animation\";\nimport Metronome from \"../exerciseUtilities/metronoom/Metronoom\";\nimport Chrono from \"../exerciseUtilities/chronometer/Chronometer\";\nimport Flash from \"../styled/flashMessage\";\nimport Recorder from \"../video/Recorder\";\nimport { useTranslation } from \"react-i18next\";\nimport resultStore from \"../resultStore\";\n\n\nconst STEMCard = styled(Card)`\n display: flex;\n flex-direction: column;\n align-items: center;\n position: relative;\n padding: 20px 50px 60px 50px;\n\n @media (min-width: 980px) {\n padding-top: 20px;\n padding-bottom: 60px;\n }\n`;\n\nconst Description = styled(P)`\n margin-top: 0px;\n color: #545454;\n`;\n\nconst TaskCard = styled.div`\n width: 100%;\n\n @media (min-width: 980px) {\n width: 100%;\n }\n`;\n\nconst OptionsCard = styled(Card)`\n width: 100%;\n margin-top: 15px;\n\n @media (min-width: 768px) {\n width: 29.25%;\n margin-top: 0px;\n margin-left: 15px;\n\n &.communication-option-component {\n width: 100%;\n margin-top: 15px;\n margin-left: 0px;\n }\n }\n`;\n\nconst Flex = styled.div`\n display: flex;\n justify-content: space-between;\n`;\n\nconst FlexCards = styled(Flex)`\n flex-direction: column;\n align-items: stretch;\n\n &.communication-component {\n flex-direction: column;\n align-items: stretch;\n }\n\n @media (min-width: 768px) {\n flex-direction: row;\n align-items: flex-start;\n\n &.communication-component {\n flex-direction: column;\n align-items: stretch;\n margin-bottom: 30px;\n }\n }\n`;\n\nconst Title = styled(P)`\n font-weight: bold;\n font-size: 24px;\n color: #545454;\n text-align: center;\n`;\n\nconst Bold = styled(P)`\n font-weight: bold;\n color: #545454;\n text-align: center;\n font-size: 28px;\n margin-bottom: 15px;\n`;\n\nconst Text = styled(P)`\n text-align: center;\n margin-top: 0px;\n`;\n\nconst NextIcon = styled(FaArrowRight)`\n color: #ffffff;\n padding-right: 10px;\n font-size: 16px;\n transform: translateY(2px);\n`;\n\nconst NextIconWhite = styled(FaArrowRight)`\n color: #fff;\n font-size: 16px;\n`;\n\nconst NextIconPrimary = styled(FaArrowRight)`\n color: ${props => props.color};\n cursor: pointer;\n font-size: 45px;\n position: absolute;\n top: 50%;\n right: 30px;\n`;\n\nconst BackIconPrimary = styled(FaArrowLeft)`\n color: #51c0cf;\n cursor: pointer;\n font-size: 22px;\n position: absolute;\n top: 50%;\n left: 30px;\n`;\n\nconst BackIcon = styled(FaArrowLeft)`\n color: #afafaf;\n font-size: 16px;\n padding-right: 10px;\n cursor: pointer;\n`;\n\nconst BackText = styled(P)`\n margin: 0px;\n position: absolute;\n bottom: 20px;\n left: 30px;\n cursor: pointer;\n`;\n\nconst ListItem = styled.li`\n margin-top: 10px;\n cursor: pointer;\n border: 1px solid lightgrey;\n border-radius: 5px;\n padding: 10px 10px;\n text-align: center;\n color: #929292;\n\n &.clicked {\n border: 2px solid #51c0cf;\n border-radius: 5px;\n padding: 10px;\n }\n`;\nconst UnorderedList = styled.ul`\n list-style-type: none;\n padding: 0;\n margin-bottom: 40px;\n width: 100%;\n`;\n\nconst ScoreDiv = styled.div`\n position: absolute;\n left: 40px;\n bottom: 20px;\n display: flex;\n flex-direction: column;\n`;\n\nconst Score = styled.p`\n margin: 0px;\n margin-bottom: 5px;\n`;\n\nconst Audio = styled.audio`\n max-width: 80%;\n margin-top: 20px;\n margin-bottom: 20px;\n`;\n\nconst Img = styled.img`\n width: 80%;\n\n @media (min-width: 980px) {\n width: 60%;\n }\n`;\n\nconst NextButton = styled(Button)``;\n\nconst Cue = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n margin-top: 0px;\n margin-bottom: 25px;\n border: 1px solid #545454;\n border-radius: 5px;\n padding: 20px auto;\n padding-bottom: 20px;\n min-width: 50vw;\n`;\n\nconst Input = styled.input`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n`;\n\nconst FoutMessage = styled(Text)`\n display: block;\n padding: 10px 20px;\n background-color: #f23539;\n border: 1px solid #f23539;\n border-radius: 10px;\n color: white;\n font-size: 18px;\n font-weight: 500;\n margin-bottom: 0px;\n\n &.shake {\n animation: ${shake} 0.5s;\n }\n`;\n\nconst JuistMessage = styled(FoutMessage)`\n background-color: #24ae5f;\n border: 1px solid #24ae5f;\n`;\n\nconst BlueText = styled(P)`\n color: #51c0cf;\n`;\n\nconst CenterFlex = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n`;\n\nconst Video = styled.video`\n width: 80%;\n margin-bottom: 10px;\n`;\n\nconst InputTextBox = styled(Input)`\n margin-right: 10px;\n width: 50vw;\n`;\n\nconst CenterDiv = styled.div`\n text-align: center;\n`;\n\nfunction StappenplanMetValidatie(props) {\n const { t, i18n } = useTranslation();\n const exercise = props.exercise;\n const [currentStep, setStep] = useState(1);\n const [miniStep, setCurrentMiniStep] = useState(1);\n const [steps, setSteps] = useState();\n const [urls, setUrls] = useState([]);\n const [questionImgUrls, setQuestionImgUrls] = useState([]);\n const [questionVideoUrls, setQuestionVideoUrls] = useState([]);\n const [cueImgUrls, setCueImgUrls] = useState([]);\n const [cueVideoUrls, setCueVideoUrls] = useState([]);\n const [questionUrls, setQuestionUrls] = useState([]);\n const [loading, setLoading] = useState(true);\n const [showCue, setShowCue] = useState(false);\n const [showCorrect, setShowCorrect] = useState(false);\n const [showFalse, setShowFalse] = useState(false);\n const [showFail, setShowFail] = useState(false);\n const [clickable, setClickable] = useState(true);\n const [score, setScore] = useState(0);\n const [amountClicked, setAmountClicked] = useState(0);\n const [redirect, setRedirect] = useState(false);\n const [showSucces, setShowSucces] = useState(false);\n\n const [results, setResults] = useState([]);\n\n const [goalIMG, setGoalIMG] = useState();\n const [goalVideo, setGoalVideo] = useState();\n const [prepIMG, setPrepIMG] = useState();\n const [prepVideo, setPrepVideo] = useState();\n const [medIMG, setMedIMG] = useState();\n const [compAudio, setCompAudio] = useState();\n const [compVideo, setCompVideo] = useState();\n\n const [answeredMiniStep, setAnsweredMiniStep] = useState(false);\n const [showAnswerBeforeNext, setShowAnswerBeforeNext] = useState(false);\n\n const resultstore = useContext(resultStore);\n const [showEndRecorder, setShowEndRecorder] = useState(false);\n const [isExample, setIsExample] = useState(false);\n const [isReview, setIsReview] = useState(false);\n\n useEffect(() => { if(props.activeStep) setStep(props.activeStep) }, [props.activeStep])\n useEffect(() => { if(props.activeMiniStep) setCurrentMiniStep(props.activeMiniStep) }, [props.activeMiniStep])\n\n\n const setCurrentStep = (newStep) => {\n if(props.onStepChange) props.onStepChange(newStep);\n setStep(newStep);\n }\n\n const setMiniStep = (newMiniStep) => {\n if(props.onMiniStepChange) props.onMiniStepChange(newMiniStep);\n setCurrentMiniStep(newMiniStep);\n }\n\n function getUrl(type, id) {\n if (type === \"cue\") {\n var output = urls.find(url => url.id === id);\n return output ? output.value : output;\n } else if (type === \"question\") {\n var output = questionUrls.find(url => url.id === id);\n return output ? output.value : output;\n } else if (type === \"questionImage\") {\n var output = questionImgUrls.find(url => url.id === id)\n return output ? output.value : output;\n } else if (type === \"cueImage\") {\n var output = cueImgUrls.find(url => url.id === id)\n return output ? output.value : output;\n } else if (type === \"cueVideo\") {\n var output = cueVideoUrls.find(url => url.id === id)\n return output ? output.value : output;\n } else if (type === \"questionVideo\") {\n var output = questionVideoUrls.find(url => url.id === id)\n return output ? output.value : output;\n }\n }\n\n // Change styling for communication module\n const FlexCardsId = document.getElementById(\"flex-cards\");\n const OptionsCardId = document.getElementById(\"options-card\");\n if (props.isCommunicationComponent && FlexCardsId && OptionsCardId) {\n FlexCardsId.classList.add(\"communication-component\");\n OptionsCardId.classList.add(\"communication-option-component\");\n }\n\n function shuffle(array) {\n var currentIndex = array.length,\n temporaryValue,\n randomIndex;\n\n // While there remain elements to shuffle...\n while (0 !== currentIndex) {\n // Pick a remaining element...\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n\n // And swap it with the current element.\n temporaryValue = array[currentIndex];\n array[currentIndex] = array[randomIndex];\n array[randomIndex] = temporaryValue;\n }\n\n return array;\n }\n\n function initQuestionsToSteps(types) {\n var scoreObject = {};\n for (var type of types) {\n scoreObject[type.name] = 0;\n for (var question of type.questions) {\n question.type = type.name;\n }\n }\n setScore(scoreObject);\n\n var newlist = [];\n if (exercise.random_all) {\n var questions = [];\n types.map((type) => {\n questions = questions.concat(type.questions);\n });\n var randQuestions = shuffle(questions);\n newlist = randQuestions;\n } else if (exercise.random_within_type) {\n var questions = [];\n types.map((type) => {\n var randQuestions = shuffle(type.questions);\n questions = questions.concat(randQuestions);\n });\n newlist = questions;\n } else {\n var questions = [];\n types.map((type) => {\n questions = questions.concat(type.questions);\n });\n newlist = questions;\n }\n\n return newlist;\n }\n useEffect(() => {\n setSteps(initQuestionsToSteps(exercise.question_types));\n //.reduce((result, qt) => result + qt.questions.reduce((res, _) => res + 1, 0),0))\n\n if (! exercise.goal) {\n if (! exercise.preparation) {\n setCurrentStep(3);\n } else {\n setCurrentStep(2);\n }\n }\n\n if (exercise.media_complete_id) {\n props.getRessource(exercise.media_complete_id).then((res) => {\n setMedIMG(res);\n });\n }\n if (exercise.audio_complete_id) {\n props.getRessource(exercise.audio_complete_id).then((res) => {\n setCompAudio(res);\n });\n }\n if (exercise.video_complete_id) {\n props.getRessource(exercise.video_complete_id).then((res) => {\n setCompVideo(res);\n });\n }\n if (\n exercise.goal &&\n exercise.goal.media_id\n ) {\n props.getRessource(exercise.goal.media_id).then((res) => {\n setGoalIMG(res);\n });\n }\n if (\n exercise.goal &&\n exercise.goal.video_id\n ) {\n props.getRessource(exercise.goal.video_id).then((res) => {\n setGoalVideo(res);\n });\n }\n if (\n exercise.preparation &&\n exercise.preparation.media_id\n ) {\n props.getRessource(exercise.preparation.media_id).then((res) => {\n setPrepIMG(res);\n });\n }\n if (\n exercise.preparation &&\n exercise.preparation.video_id \n ) {\n props.getRessource(exercise.preparation.video_id).then((res) => {\n setPrepVideo(res);\n });\n }\n\n exercise.question_types.map(qt => qt.questions.map((step) => {\n if (step.media_id) {\n props.getRessource(step.media_id).then((response) => {\n setQuestionImgUrls((questionImgUrls) => [...questionImgUrls, {id: step.media_id, value: response}]);\n });\n }\n if (step.video_id) {\n props.getRessource(step.video_id).then((response) => {\n setQuestionVideoUrls((questionVideoUrls) => [...questionVideoUrls, {id: step.video_id, value: response}]);\n });\n }\n if (step.cue_media_id) {\n props.getRessource(step.cue_media_id).then((response) => {\n setCueImgUrls((cueImgUrls) => [...cueImgUrls, {id: step.cue_media_id, value: response}]);\n });\n }\n if (step.cue_audio_id) {\n props.getRessource(step.cue_audio_id).then((response) => {\n setUrls((urls) => [...urls, {id: step.cue_audio_id, value: response}]);\n });\n }\n if (step.cue_video_id) {\n props.getRessource(step.cue_video_id).then((response) => {\n setCueVideoUrls((cueVideoUrls) => [...cueVideoUrls, {id: step.cue_video_id, value: response}]);\n });\n }\n if (step.audio_id) {\n props.getRessource(step.audio_id).then((response) => {\n setQuestionUrls((questionUrls) => [...questionUrls, {id: step.audio_id, value: response}]);\n });\n }\n }));\n setLoading(false);\n }, []);\n\n const nextMiniStep = () => {\n setMiniStep(miniStep + 1);\n setAnsweredMiniStep(false);\n ResetValidation();\n };\n\n const toResult = () => {\n if (miniStep === steps.length) {\n setMiniStep(miniStep + 1);\n }\n if (resultstore.isRecording) {\n setShowEndRecorder(true);\n } else {\n setShowEndRecorder(false);\n if (props.redirectEnabled) {\n setRedirect(true);\n } else if(props.isExample) {\n setIsExample(true);\n } else if(props.isReview) {\n setIsReview(true);\n } else {\n props.endExercise();\n }\n }\n }\n\n const nextStep = () => {\n if (currentStep < 4) {\n if (\n exercise.preparation && ! Array.isArray(exercise.preparation) && exercise.preparation.text != '

' && exercise.goal\n ) {\n setCurrentStep(currentStep + 1);\n } else {\n if (currentStep === 3) {\n setCurrentStep(4);\n } else {\n setCurrentStep(3);\n }\n }\n }\n };\n const prevStep = () => {\n if (currentStep > 1) {\n if (\n exercise.preparation && ! Array.isArray(exercise.preparation) && exercise.preparation.text != '

' && exercise.goal\n ) {\n setCurrentStep(currentStep - 1);\n } else {\n setCurrentStep(1);\n }\n }\n };\n \n function validateAnswer(e, answer, correctAnswer, step) {\n if (document.getElementById(\"listitem\")) {\n e.target.classList.add(\"clicked\");\n }\n setAnsweredMiniStep(true);\n answer = answer.trim();\n correctAnswer = correctAnswer.trim();\n if (!step.is_capital_sensitive) {\n answer = answer.toLowerCase();\n correctAnswer = correctAnswer.toLowerCase();\n }\n if (!step.is_punctuation_sensitive) {\n answer = answer.replace(/[.,\\/#!$%\\^&\\*;:{}=\\-_`~()]/g, \"\").replace(/\\s{2,}/g, \" \");\n correctAnswer = correctAnswer.replace(/[.,\\/#!$%\\^&\\*;:{}=\\-_`~()]/g, \"\");\n }\n if (answer === correctAnswer) {\n setShowFalse(false);\n setShowCorrect(true);\n setShowAnswerBeforeNext(false);\n setShowCue(false);\n setClickable(false);\n if (amountClicked < 4) {\n setScore({ ...score, [step.type]: score[step.type] + 5 - amountClicked });\n }\n setAmountClicked(amountClicked + 1);\n\n var found = false;\n for (var i = 0; i < results.length; i++) {\n if (results[i].key == step.id) {\n found = true;\n let newArr = [...results];\n newArr[i].attempts += 1;\n newArr[i].answers.push(answer);\n setResults(newArr);\n }\n }\n if (!found) {\n var resultObject = {\n key: step.id,\n question: step.question,\n answers: [answer],\n attempts: 1,\n };\n setResults((results) => [...results, resultObject]);\n }\n } else {\n if (amountClicked >= 3) {\n setShowFail(true);\n setShowFalse(false);\n setShowCue(false);\n setClickable(false);\n setShowAnswerBeforeNext(false);\n \n } else {\n setShowFalse(true);\n setShowCue(true);\n setShowAnswerBeforeNext(false);\n }\n setAmountClicked(amountClicked + 1);\n\n var found = false;\n for (var i = 0; i < results.length; i++) {\n if (results[i].key == step.id) {\n found = true;\n let newArr = [...results];\n newArr[i].attempts += 1;\n newArr[i].answers.push(answer);\n setResults(newArr);\n }\n }\n if (!found) {\n var resultObject = {\n key: step.id,\n question: step.question,\n // step.question instanceof String\n // ? step.question\n // // : step.question.map((x) => x.children[0].text).join(\"\\n\"),\n answers: [answer],\n attempts: 1,\n };\n setResults((results) => [...results, resultObject]);\n }\n }\n\n if (showFalse == true) {\n document.getElementById(\"foutmessage\").classList.add(\"shake\");\n setTimeout(() => {\n if (document.getElementById(\"foutmessage\")) {\n document.getElementById(\"foutmessage\").classList.remove(\"shake\");\n }\n }, 500);\n }\n }\n\n function ResetValidation() {\n setShowFalse(false);\n setShowFail(false);\n setShowCorrect(false);\n setClickable(true);\n setShowCue(false);\n setAmountClicked(0);\n setShowAnswerBeforeNext(false);\n }\n\n const ReceiveRecording = (recording) => {\n props.HandleRecording(recording);\n setShowSucces(true);\n setTimeout(function () {\n setShowSucces(false);\n }, 5000);\n };\n \n const toggleWarning = () => {\n setShowAnswerBeforeNext(true);\n }\n\n if (loading) {\n return ;\n } else {\n return (\n <>\n {exercise.title}\n {props.taskDescription}\n \n \n {currentStep === 1 && (\n \n {t(\"stappenplan.goal\")}\n {exercise.goal.media_id && (\n \n )}\n {exercise.goal.video_id && (\n \n )}\n {exercise.goal.text &&
}\n \n \n {t(\"stappenplan.nextStep\")}\n \n \n )}\n {currentStep === 2 && (\n \n {t(\"stappenplan.prep\")}\n {exercise.preparation.media_id && (\n \n )}\n {exercise.preparation.video_id && (\n \n )}\n {exercise.preparation.text &&
}\n \n \n {t(\"stappenplan.nextStep\")}\n \n {exercise.goal && (\n \n \n {t(\"stappenplan.back\")}\n \n )}\n \n )}\n {currentStep === 3 && (\n
\n {steps.map((step, index) => {\n if (miniStep === index + 1) {\n return (\n
\n \n {t(\"stappenplan.perf\")}\n {exercise.media_complete_id && (\n \n )}\n {exercise.audio_complete_id && (\n \n )}\n {exercise.video_complete_id && (\n \n )}\n \n {t(\"stappenplanMetValidatie.question\")} {index + 1}\n \n {step.question.split('\\n').map(str =>

{str}

)}
\n {/* */}\n \n {step.media_id && (\n \n )}\n {step.audio_id && (\n \n )}\n {step.video_id && (\n \n )}\n {showCorrect && (\n \n {t(\"stappenplanMetValidatie.right\")}{\" \"}\n {step.correct_answer}\n \n )}\n {showFalse && (\n \n {t(\"stappenplanMetValidatie.wrong\")}\n \n )}\n {showFail && (\n \n {t(\"stappenplanMetValidatie.tries\")}{\" \"}\n {step.correct_answer}\n \n )}\n {showAnswerBeforeNext && (\n \n {t(\"stappenplanMetValidatie.answerBeforeNext\")}\n \n )}\n {t(\"stappenplanMetValidatie.answers\")}\n \n {step.type_of_answer === \"Meerkeuze\" &&\n step.answer_possibilities[0].map((answer) => {\n return clickable ? (\n {\n validateAnswer(\n e,\n answer.answer,\n step.correct_answer,\n step\n )\n }}\n >\n {answer.answer}\n \n ) : (\n {answer.answer}\n );\n })}\n {step.type_of_answer === \"Textbox\" && clickable && (\n \n \n \n validateAnswer(\n e,\n document.getElementById(\"inputExercise\")\n .value,\n step.correct_answer,\n step\n )\n }\n >\n \n \n \n )}\n \n\n {showCue && step.cue_text && (\n \n
{t(\"stappenplanMetValidatie.hint\")}
\n

{step.cue_text}

\n {step.cue_audio_id && (\n \n )}\n {step.cue_video_id && (\n \n )}\n {step.cue_media_id && (\n \n )}\n
\n )}\n {exercise.reward_system === \"Score\" && (\n \n {Object.keys(score).map((key) => {\n return {key + \": \" + score[key]};\n })}\n \n )}\n {miniStep < steps.length && answeredMiniStep && (\n \n )}\n {miniStep < steps.length && ! answeredMiniStep && (\n \n )}\n {miniStep === steps.length && (\n \n \n {t(\"registerForm1.next\")}\n \n )}\n
\n
\n
\n );\n }\n })}\n
\n )}\n {miniStep === steps.length + 1 && (\n \n {t(\"stappenplanMetValidatie.endscore\")} \n {Object.keys(score).map((key) => {\n return (\n \n {key + \": \" + score[key]}/\n {exercise.question_types.find((type) => {\n return type.name == key;\n }).questions.length * 5}\n \n );\n })}\n \n {showEndRecorder && {t(\"exercise.endCamera\")}}\n \n )}\n {redirect && (\n \n )}\n \n {(exercise.should_be_chrono ||\n exercise.should_be_metronome ||\n exercise.should_be_recorded) && (\n \n {t(\"stappenplan.options\")}\n {props.showRecorder &&\n exercise.should_be_recorded && (<>\n \n {showSucces && {t(\"stappenplan.video\")}.}\n )}\n {exercise.should_be_chrono && }\n {exercise.should_be_metronome && }\n \n )}\n \n \n );\n }\n}\n\nexport default StappenplanMetValidatie;\n","import React from 'react'\nimport styled from 'styled-components'\nimport { useTranslation } from \"react-i18next\"\n\nconst Button = styled.button`\n background: ${props => props.backgroundColor};\n color: ${props => props.color};\n border-radius: 50%;\n width: 40.5px;\n height: 40.5px;\n background: rgba(227, 73, 28, 0.8);\n outline: none;\n border: none;\n cursor: pointer;\n :hover {\n background: #fb6d42;\n }\n`\n\nconst RecWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n`\n\nconst ButtonBorder = styled.div`\n border: 5px solid rgba(255, 255, 255, 0.4);\n height: 50px;\n width: 50px;\n border-radius: 50%;\n`\nconst Instructions = styled.p`\n font-size: 14px;\n color: #ffffff;\n letter-spacing: 1.75px;\n display: flex;\n margin-bottom: 20px;\n`\n\nconst InstuctionsHighlight = styled.span`\n font-weight: 700;\n color: #dc6547;\n padding: 0 5px;\n`\n\nconst TextCenter = styled.p`\n text-align: center;\n`\n\nButton.defaultProps = {\n color: 'black',\n backgroundColor: 'white'\n}\n\nexport default props => {\n const { t, i18n } = useTranslation()\n return(\n \n {t('recordButton.pressButton')}\n\n \n \n )\n }\n\n if (isRecording) {\n return \n }\n\n if (isCameraOn && streamIsReady) {\n return (\n \n )\n }\n\n if (useVideoInput) {\n return (\n \n )\n }\n\n return shouldUseVideoInput ? (\n \n ) : (\n \n Start camera\n \n )\n }\n\n return (\n
\n {isRecording && }\n {isRunningCountdown && }\n {renderContent()}\n
\n )\n}\n\nActions.propTypes = {\n isVideoInputSupported: PropTypes.bool,\n isInlineRecordingSupported: PropTypes.bool,\n thereWasAnError: PropTypes.bool,\n isRecording: PropTypes.bool,\n isCameraOn: PropTypes.bool,\n streamIsReady: PropTypes.bool,\n isConnecting: PropTypes.bool,\n isRunningCountdown: PropTypes.bool,\n countdownTime: PropTypes.number,\n timeLimit: PropTypes.number,\n isReplayingVideo: PropTypes.bool,\n useVideoInput: PropTypes.bool,\n\n onTurnOnCamera: PropTypes.func,\n onTurnOffCamera: PropTypes.func,\n onOpenVideoInput: PropTypes.func,\n onStartRecording: PropTypes.func,\n onStopRecording: PropTypes.func,\n onStopReplaying: PropTypes.func,\n onConfirm: PropTypes.func\n}\n\nexport default Actions\n","import React from \"react\";\nimport FileSaver from \"file-saver\";\nimport {BlobServiceClient} from \"@azure/storage-blob\";\n\nfunction getContainer(container_name){\n const sasToken = process.env.REACT_APP_AZURE_STORAGE_SAS_TOKEN;\n const storageAccount = process.env.REACT_APP_AZURE_STORAGE_ACCOUNT;\n\n const blobServiceClient = new BlobServiceClient(`https://${storageAccount}.blob.core.windows.net${sasToken}`);\n const container = blobServiceClient.getContainerClient(container_name);\n\n return container;\n}\n\nasync function blobToString(blob) {\n const fileReader = new FileReader();\n\n return new Promise((resolve, reject) => {\n fileReader.onloadend = (ev) => {\n resolve(ev.target.result);\n };\n fileReader.onerror = reject;\n fileReader.readAsDataURL(blob);\n });\n}\n\nexport async function getResourceUrl(file) {\n // const container = getContainer(process.env.REACT_APP_AZURE_CONTAINER_MEDIA);\n // const blob = container.getBlobClient(file.resource_name);\n // const blobResponse = await blob.generateSasUrl();\n\n // // return await blobToString(await blobResponse.blobBody);\n // return blobResponse;\n const sasToken = process.env.REACT_APP_AZURE_STORAGE_SAS_TOKEN;\n const storageAccount = process.env.REACT_APP_AZURE_STORAGE_ACCOUNT;\n const container = process.env.REACT_APP_AZURE_CONTAINER_MEDIA;\n return `https://${storageAccount}.blob.core.windows.net/${container}/${file.resource_name}${sasToken}`\n}\n\nexport async function downloadOneFile(file) {\n const container = getContainer(process.env.REACT_APP_AZURE_CONTAINER_MEDIA);\n const blob = container.getBlobClient(file);\n const blobResponse = await blob.download();\n\n FileSaver.saveAs( await blobToString(await blobResponse.blobBody), file);\n}\n\nasync function createBlobInContainer(container, file) {\n const client = container.getBlockBlobClient(file.name);\n\n const options = { blobHTTPHeaders: { blobContentType: file.type }};\n\n await client.uploadBrowserData(file, options);\n}\n\nexport async function uploadOneFile(file) {\n const container = getContainer(process.env.REACT_APP_AZURE_CONTAINER_MEDIA);\n await createBlobInContainer(container, file);\n}","import React, { useEffect, useState, useContext } from \"react\";\nimport PatientOverlay from \"../../components/overlays/patientOverlay\";\nimport Global from \"../../components/styled/global\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { api } from \"../../api\";\nimport Dagboek from \"../../components/exercises/dagboek\";\nimport Stappenplan from \"../../components/exercises/stappenplan\";\nimport StappenplanMetValidatie from \"../../components/exercises/stappenplanMetValidatie\";\nimport LoadSpinner from \"../../components/loadspinner\";\nimport { observer } from \"mobx-react\";\nimport Actions from \"../../components/exerciseUtilities/videoRecorder/videoRenderActions\";\nimport ResultStore from \"../../components/resultStore\";\nimport { useTranslation } from \"react-i18next\";\nimport { getResourceUrl } from \"../../azure\";\n\nconst TaakDetail = observer((props) => {\n const { t, i18n } = useTranslation();\n const Rstore = useContext(ResultStore);\n const { id } = props.match.params;\n const [exercise, setExercise] = useState({});\n const [taskDescription, setTaskDescriptions] = useState(\"\");\n const [loading, setLoading] = useState(true);\n let exerciseComponent;\n let startTime = Date.now();\n\n useEffect(() => {\n api.get(\"/task/\" + id).then((response) => {\n setTaskDescriptions(response.data.task.description);\n api.get(\"/exercise/\" + response.data.task.task_id).then((response) => {\n setExercise(response.data.output);\n setLoading(false);\n });\n });\n }, []);\n\n async function GetRessource(id) {\n return api.get(\"/file/\" + id).then((response) => {\n return getResourceUrl(response.data.file) \n })\n }\n\n const HandleRecording = (blob) => {\n let formData = new FormData();\n formData.append(\"recording\", blob);\n Rstore.setRecording(formData);\n };\n\n if (! exercise) {\n console.log('oops something went wrong');\n } else {\n switch (exercise.type) {\n case \"dagboek\":\n exerciseComponent = \n break;\n case \"stappenplan\":\n exerciseComponent = \n break;\n case \"stappenplanValidatie\":\n exerciseComponent = \n break;\n default:\n exerciseComponent =
{t(\"taakDetail.wrong\")}
\n break;\n };\n }\n\n return (loading ? :\n \n \n \n {exerciseComponent}\n \n \n );\n});\n\nexport default TaakDetail;\n","import React, {useContext, useState, useEffect} from 'react'\nimport styled from \"styled-components\"\nimport { observer } from \"mobx-react-lite\"\nimport {Redirect} from \"react-router-dom\"\nimport ResultStore from \"../components/resultStore\"\nimport Card from \"../components/styled/card\"\nimport Button from '../components/styled/button'\nimport { SmallTitle, P } from '../components/styled/typography'\nimport {api, recordingApi} from '../api'\nimport registrationStore from \"../components/registrationStore\"\nimport { useTranslation } from \"react-i18next\"\nimport LoadSpinner from './loadspinner'\nimport Flash from \"../components/styled/flashMessage\";\n\n\nconst Wrapper = styled(Card)`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 70%;\n padding: 100px 60px;\n`\n\nconst Flex = styled.div`\n display: flex;\n justify-content: space-between;\n`\n\nconst Title = styled(SmallTitle)`\n text-align: center;\n`\n\nconst FlexColumn = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n margin: 40px 20px;\n`\n\nconst BulletGreen = styled.div`\n width: 40px;\n height: 40px;\n background-color: #24AE5F;\n border: 4px solid #24AE5F;\n border-radius: 100%;\n margin-right: 10px;\n cursor: pointer;\n box-sizing: content-box;\n\n &.active{\n border: 4px solid #51C0CF;\n }\n`\n\nconst BulletOrange = styled(BulletGreen)`\n background-color: #F0C239;\n border-color: #F0C239;\n`\n\nconst BulletRed = styled(BulletGreen)`\n background-color: #F23539;\n border-color: #F23539;\n`\n\nconst Bold = styled(P)`\n margin: 0px;\n font-weight: bold;\n margin-top: 10px;\n`\n\nconst ResultForm = observer((props) => {\n const { t, i18n } = useTranslation()\n const store = useContext(ResultStore)\n const id = props.id\n const regstore = useContext(registrationStore)\n const user = JSON.parse(regstore.user)\n const [redirect, setRedirect] = useState(false)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState(false);\n\n useEffect(() => {\n store.clearResult()\n }, []);\n\n function handleClick(value){\n let date = new Date();\n date = date.toLocaleDateString('en-US', {day: '2-digit', month: '2-digit', year: 'numeric'});\n store.setDate(date);\n\n if (value==3){\n store.setResult(3)\n } else if (value==2){\n store.setResult(2)\n } else{\n store.setResult(1)\n }\n }\n\n function HandleSubmit() {\n if (store.result == 0 || store.result == \"\") {\n setError(true);\n } else {\n setLoading(true)\n if (store.recording !== undefined) {\n recordingApi.post(\"/recording\", store.recording, {\n headers: {\"Content-Type\": `multipart/form-data; boundary=${store.recording._boundary}`},\n }).then((response) => {\n let recordingUrl = response.data.key;\n var endTime = Date.now()\n const duration = endTime - props.startTime\n api.post('/task', {\n \"task_id\": id,\n \"recording\": recordingUrl,\n \"result\": store.result,\n \"duration\": duration,\n \"scores\": props.scores,\n \"openAnswers\": props.openAnswers,\n \"scaleAnswers\": props.scaleAnswers,\n \"user_id\": user.public_id,\n exerciseType: props.exerciseType\n }).then(function (response) {\n store.clearRecording();\n setLoading(false)\n setRedirect(true)\n })\n })\n } else {\n setLoading(true)\n var endTime = Date.now()\n const duration = endTime - props.startTime\n api.post('/task', {\n \"task_id\": id,\n \"result\": store.result,\n \"duration\": duration,\n \"scores\": props.scores,\n \"openAnswers\": props.openAnswers,\n \"scaleAnswers\": props.scaleAnswers,\n \"user_id\": user.public_id,\n exerciseType: props.exerciseType\n }).then(function(response){\n setLoading(false)\n setRedirect(true)\n })\n }\n }\n }\n const showScores = () => {\n var score\n var output = []\n for (score in props.scores){\n output.push({score}: {props.scores[score]})\n }\n return output\n }\n\n return(\n \n {! loading && \n <>\n {t('resultForm.difficulty')}\n {error && {t(\"resultForm.NothingSelectedError\")}}\n \n \n handleClick(3)} />{t('legend.easy')}\n \n \n handleClick(2)} />{t('legend.average')}\n \n \n handleClick(1)} />{t('legend.hard')}\n \n \n {showScores()}\n
\n \n \n }\n {loading && \n <>\n {t(\"resultForm.uploadingTitle\")}\n

{t(\"resultForm.uploadingMessage\")}

\n \n \n }\n {redirect && }\n
\n )\n\n})\n\nexport default ResultForm","import React, { useContext, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { observer } from \"mobx-react-lite\";\nimport { Redirect } from \"react-router-dom\";\nimport ResultStore from \"../components/resultStore\";\nimport registrationStore from \"../components/registrationStore\";\nimport Card from \"../components/styled/card\";\nimport Button from \"../components/styled/button\";\nimport { SmallTitle, P } from \"../components/styled/typography\";\nimport { api, recordingApi } from \"../api\";\nimport { useTranslation } from \"react-i18next\";\nimport LoadSpinner from \"../components/loadspinner\";\nimport Flash from \"../components/styled/flashMessage\";\n\nconst Wrapper = styled(Card)`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n padding: 20px 40px 40px 40px;\n\n @media (min-width: 980px) {\n padding: 100px 60px;\n width: 70%;\n }\n`;\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n }\n`;\n\nconst Title = styled(SmallTitle)`\n text-align: center;\n margin-bottom: 15px;\n\n @media (min-width: 980px) {\n margin-bottom: auto;\n }\n`;\n\nconst FlexColumn = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n margin: 10px auto;\n\n @media (min-width: 980px) {\n margin: 40px 20px;\n }\n`;\n\nconst BulletGreen = styled.div`\n width: 30px;\n height: 30px;\n background-color: #24ae5f;\n border: 4px solid #24ae5f;\n border-radius: 100%;\n margin-right: 10px;\n cursor: pointer;\n box-sizing: content-box;\n\n &.active {\n border: 4px solid #51c0cf;\n }\n\n @media (min-width: 980px) {\n width: 40px;\n height: 40px;\n }\n`;\n\nconst BulletOrange = styled(BulletGreen)`\n background-color: #f0c239;\n border-color: #f0c239;\n`;\n\nconst BulletRed = styled(BulletGreen)`\n background-color: #f23539;\n border-color: #f23539;\n`;\n\nconst Bold = styled(P)`\n margin: 0px;\n font-weight: bold;\n margin-top: 10px;\n text-align: center;\n`;\n\nconst SubmitButton = styled(Button)`\n margin-top: 20px;\n @media (min-width: 980px) {\n margin-top: auto;\n }\n`;\n\nconst ResultForm = observer((props) => {\n const { t, i18n } = useTranslation();\n const store = useContext(ResultStore);\n const id = props.id;\n const regstore = useContext(registrationStore);\n const user = JSON.parse(regstore.user);\n const [redirect, setRedirect] = useState(false);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(false);\n const [uploadFailed, setUploadFailed] = useState(false);\n\n function handleClick(value) {\n let date = new Date();\n date = date.toLocaleDateString('en-US', {day: '2-digit', month: '2-digit', year: 'numeric'});\n store.setDate(date);\n\n if (value == 3) {\n store.setResult(3);\n } else if (value == 2) {\n store.setResult(2);\n } else {\n store.setResult(1);\n }\n }\n\n function HandleSubmit() {\n if (store.result == 0 || store.result == \"\") {\n setError(true);\n } else {\n setLoading(true);\n setError(false);\n var endTime = Date.now();\n const duration = endTime - props.startTime;\n if (store.recording !== undefined) {\n let recordingUrl;\n recordingApi.post(\"/recording\", store.recording, {\n headers: { \"Content-Type\": `multipart/form-data; boundary=${store.recording._boundary}` },\n }).then((response) => {\n recordingUrl = response.data.key;\n if (recordingUrl) {\n if (!props.exerciseType === \"Stappenplan\"){\n api.post(\"/task\", {\n task_id: id,\n result: store.result,\n duration: duration,\n recording: recordingUrl,\n results: props.results,\n scores: props.scores,\n exerciseType: props.exerciseType,\n user_id: user.public_id,\n }).then(function (response) {\n store.clearRecording();\n setLoading(false);\n setRedirect(true);\n });\n } else {\n api.post(\"/task\", {\n task_id: id,\n result: store.result,\n recording: recordingUrl,\n duration: duration,\n exerciseType: props.exerciseType,\n user_id: user.public_id,\n }).then(function (response) {\n store.clearRecording();\n setLoading(false);\n setRedirect(true);\n });\n }\n } else {\n setUploadFailed(true)\n setLoading(false);\n }\n \n });\n } else if (props.exerciseType !== \"Stappenplan\") {\n api.post(\"/task\", {\n task_id: id,\n result: store.result,\n duration: duration,\n results: props.results,\n exerciseType: props.exerciseType,\n scores: props.scores,\n user_id: user.public_id,\n }).then(function (response) {\n setLoading(false);\n setRedirect(true);\n });\n } else {\n api.post(\"/task\", {\n task_id: id,\n result: store.result,\n exerciseType: props.exerciseType,\n duration: duration,\n user_id: user.public_id,\n }).then(function (response) {\n setLoading(false);\n setRedirect(true);\n });\n }\n }\n }\n\n return (\n \n {! loading && \n <>\n {t(\"resultForm.difficulty\")}\n {error && {t(\"resultForm.NothingSelectedError\")}}\n \n \n handleClick(3)} />\n {t(\"legend.easy\")}\n \n \n handleClick(2)} />\n {t(\"legend.average\")}\n \n \n handleClick(1)} />\n {t(\"legend.hard\")}\n \n \n {uploadFailed && {t(\"resultForm.UploadFailedRetry\")}}\n {t(\"resultForm.endExer\")}\n \n }\n {loading && \n <>\n {t(\"resultForm.uploadingTitle\")}\n

{t(\"resultForm.uploadingMessage\")}

\n \n \n }\n {redirect && }\n
\n );\n});\n\nexport default ResultForm;\n","import React, { useContext } from \"react\";\nimport PatientOverlay from \"../../components/overlays/patientOverlay\";\nimport { PageTitle, P } from \"../../components/styled/typography\";\nimport Global from \"../../components/styled/global\";\nimport ResultFormDagboek from \"../../components/resultFormDagboek\";\nimport ResultFrom from \"../../components/resultForm\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport registrationStore from \"../../components/registrationStore\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { PageAnimation } from \"../../components/styled/animation\";\n\nfunction ResultForm(props) {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n return (\n \n \n \n \n {t(\"patientCard.results\")}\n {props.location.state.type == \"resultform\" ? (\n \n ) : (\n \n )}\n \n \n \n );\n}\n\nexport default ResultForm;\n","import React, {useContext, useState, useEffect} from \"react\"\nimport styled from \"styled-components\"\nimport { NavLink } from 'react-router-dom'\nimport {api} from \"../api\"\nimport { useTranslation } from \"react-i18next\"\nimport LoadSpinner from '../components/loadspinner'\n\nimport Button from './styled/button'\nimport Card from './styled/card'\n\n\nconst SureOverlay = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n background-color: rgba(60, 60, 60, 0.7);\n width: 100vw;\n height: 100vh;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 99;\n`\n\nconst Modal = styled(Card)`\n position: fixed;\n display: flex;\n flex-direction: column;\n align-items: center;\n`\n\nconst CloseLink = styled.a`\n text-decoration: none;\n color: #545454;\n font-weight: bold;\n cursor: pointer;\n`\n\nconst CloseLinkDiv = styled.div`\n display: flex;\n justify-content: flex-end;\n width: 100%;\n`\n\nconst RedButton = styled(Button)`\n background-color: #DC393D;\n border-color: #DC393D;\n margin-left: 20px;\n\n &:hover{\n background-color: #DC393D;\n border-color: #DC393D;\n }\n`\n\nconst LoadSpinnerDiv = styled.div`\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n margin: 5px 0px;\n`\n\n\nfunction AreYouSure(props){\n const { t, i18n } = useTranslation()\n const [Overlay, setOverlay] = useState(false)\n const [loading, setLoading] = useState(false)\n\n useEffect(() => {\n if (props.display === true){\n setOverlay(true)\n } else {\n setOverlay(false)\n }\n }, [props.display])\n\n const HandleDelete = () => {\n props.HandleDelete()\n setLoading(true)\n setTimeout(() => {\n setLoading(false)\n props.update()\n }, 5000);\n }\n\n const HandleOverlay = () => {\n setOverlay(!Overlay)\n }\n return(\n
\n {Overlay &&\n \n \n X\n

{t('areYouSure.areYouSure')}

\n
{t('areYouSure.delete')}{loading &&\n \n }
\n
\n
\n }\n
\n\n )\n}\n\nexport default AreYouSure","import React, {useEffect, useContext, useState} from \"react\"\nimport styled from \"styled-components\"\nimport {api} from \"../api\"\nimport registrationStore from \"./registrationStore\"\nimport AreYouSure from '../components/areYouSure'\nimport Card from '../components/styled/card'\nimport Button from '../components/styled/button'\nimport { H4 } from '../components/styled/typography'\nimport TherapistIcon from '../assets/images/therapist-icon.png'\nimport TherapistIconMan from '../assets/images/therapist-icon-man.png'\nimport { useTranslation } from \"react-i18next\"\nimport { Link } from \"react-router-dom\";\n\nconst Icon = styled.img`\n height: 30px;\n width: 30px;\n margin-right: 15px;\n`\n\nconst TherapistCard = styled(Card)`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 50%;\n margin: 10px 0px;\n`\n\nconst RedButton = styled(Button)`\n background-color: #DC393D;\n border-color: #DC393D;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n margin: 3px 0px;\n\n &:hover {\n background-color: #b02a2e;\n border-color: #b02a2e;\n }\n`\n\nconst BlueButton = styled(Button)`\n background-color: #4d8b94;\n border-color: #4d8b94;\n display: flex;\n justify-content: center;\n align-items: center;\n margin-top: 5px;\n font-size: 16px;\n width: 100%;\n\n &:hover {\n background-color: #41757d;\n border-color: #41757d;\n }\n`;\n\nconst NameDiv = styled.div`\n display: flex;\n align-items: center;\n`\n\nconst Name = styled(H4)`\n margin: 0px;\n font-size: 20px !important;\n font-weight: semi-bold;\n`\n\nconst Flex = styled.div `\n`\n\nconst CardLink = styled(Link)`\n text-decoration: none;\n`;\n\nconst MyTherapists = () => {\n const { t, i18n } = useTranslation()\n const store = useContext(registrationStore)\n const user = JSON.parse(store.user)\n const [therapists, setTherapists] = useState([])\n const [Overlay, setOverlay] = useState()\n\n useEffect(() => {\n api.get('/therapists/' + user.public_id).then(res => {\n setTherapists(res.data.output)\n })\n }, [])\n\n const update = () => {\n api.get('/therapists/' + user.public_id).then(res => {\n setTherapists(res.data.output)\n })\n setOverlay()\n }\n\n const HandleOverlay = (public_id) => {\n setOverlay(public_id)\n }\n\n const HandleDelete = (therapist_id) => {\n api.post('/disconnectPatient/' + user.public_id, {therapist_id: therapist_id})\n }\n\n return(\n \n {therapists.map(therapist => {\n return
\n HandleDelete(therapist.public_id)}/>\n \n \n {therapist.sex == 'Man' ? : }\n {therapist.firstName + \" \" + therapist.lastName}\n \n \n \n {/**/}\n {t(\"therapists.chat\")}\n \n \n HandleOverlay(therapist.public_id)}>{t('mytherapists.delete')}\n \n
\n })}\n \n
\n )\n}\n\nexport default MyTherapists","import React, { useContext } from \"react\";\nimport PatientOverlay from \"../../components/overlays/patientOverlay\";\nimport Global from \"../../components/styled/global\";\nimport { PageTitle, SmallTitle, P } from \"../../components/styled/typography\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport { observer } from \"mobx-react\";\nimport registrationStore from \"../../components/registrationStore\";\nimport AccountNavigation from \"../../components/accountNavigation\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { useTranslation } from \"react-i18next\";\nimport MyTherapists from \"../../components/myTherapists\";\n\nconst Therapeuten = observer(() => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n return (\n \n \n \n \n {t(\"therapists.mytherapists\")}\n \n {t(\"therapists.mytherapistssmall\")}\n \n \n \n \n );\n});\n\nexport default Therapeuten;\n","import React, { useState, useContext } from \"react\";\nimport styled from \"styled-components\";\n\nimport { TelLink } from \"../components/styled/link\";\nimport { observer } from \"mobx-react\";\nimport TelephonLogo from \"../assets/images/telephon-logo.png\";\nimport registrationStore from \"../components/registrationStore\";\nimport DashboardIcon from \"../assets/images/patient-overzicht-icon.png\";\nimport TherapistIcon from \"../assets/images/therapist-icon.png\";\nimport TherapistIconMan from \"../assets/images/therapist-icon-man.png\";\nimport MateriaalIcon from \"../assets/images/patient-materiaalraadplegen-icon.png\";\nimport MateriaalAanmakenIcon from \"../assets/images/therapist-materiaalaanmaken-icon.png\";\nimport AccountIcon from \"../assets/images/patient-account-icon.png\";\nimport HelpdeskIcon from \"../assets/images/helpdesk-icon.png\";\nimport LogoutIcon from \"../assets/images/logout-icon.png\";\nimport InboxIcon from \"../assets/images/inbox-icon.png\";\nimport LanguageSelector from \"../components/languageSelector\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAppInsightsContext } from \"@microsoft/applicationinsights-react-js\";\nimport { eventConstants, getInsightUserType, pageViewConstants } from \"../insights-constants\";\nimport { isAppInsigthsEnabled } from \"../insights\";\nimport { trackEvent } from './../insights-track';\n\nconst Sidebar = styled.div`\n width: 100vw;\n height: 75px;\n background-color: #51c0cf;\n display: flex;\n align-items: center;\n position: absolute;\n top: 0px;\n left: 0px;\n z-index: 999;\n\n @media (min-width: 980px) {\n display: block;\n background-color: #51c0cf;\n height: 100%;\n width: 175px;\n position: fixed;\n z-index: 9;\n top: 0;\n left: 0;\n overflow-x: hidden;\n overflow-y: hidden;\n padding-top: 20px;\n z-index: 999;\n }\n\n &.show {\n background-color: white;\n position: fixed;\n top: 0;\n left: 0;\n height: 100vh;\n width: 100vw;\n }\n`;\n\nconst LogoImage = styled.img`\n height: 45px;\n`;\n\nconst Logo = styled.div`\n width: 120px;\n z-index: 999;\n padding-left: 10px;\n @media (min-width: 980px) {\n width: 10%;\n padding-left: 20px;\n padding-bottom: 10px;\n }\n`;\n\nconst Nav = styled.div`\n display: none;\n\n @media (min-width: 980px) {\n display: flex;\n flex-direction: column;\n padding-top: 20px;\n }\n\n &.show {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n`;\n\nconst NavIcon = styled.img`\n width: 30px;\n height: 30px;\n padding-right: 10px;\n @media (min-width: 980px) {\n width: 25px;\n height: 25px;\n }\n`;\n\nconst MenuLink = styled(TelLink)`\n display: flex;\n align-items: center;\n\n font-size: 20px;\n margin: 0px auto;\n padding: 12px 20px;\n @media (min-width: 980px) {\n text-transform: initial;\n font-size: 18px;\n font-weight: normal;\n width: 150px;\n margin-top: 20px;\n margin-bottom: 20px;\n padding-left: 20px;\n &.active {\n background-color: #469ca8;\n border-left: 5px solid #4e7693;\n box-shadow: inset 0px 2px 4px rgba(138, 138, 138, 0.3), inset 0px -2px 4px rgba(138, 138, 138, 0.3);\n padding-top: 20px;\n padding-bottom: 20px;\n margin-top: 0px;\n margin-bottom: 0px;\n }\n }\n`;\n\nconst NavButton = styled.div`\n z-index: 999;\n cursor: pointer;\n position: absolute;\n right: 30px;\n top: 27px;\n\n &.close {\n transform: rotate(180deg);\n position: fixed;\n top: 20px;\n left: 30px;\n }\n\n @media (min-width: 980px) {\n display: none;\n }\n`;\n\nconst ButtonLine = styled.div`\n width: 25px;\n height: 3px;\n margin: 0px 0px 5px 0px;\n background: #ffffff;\n\n &.show:nth-child(1) {\n background: #51c0cf;\n transform: rotate(45deg) translate(5px, 5px);\n }\n //line 2\n &.show:nth-child(2) {\n opacity: 0;\n }\n //line 3\n &.show:nth-child(3) {\n background: #51c0cf;\n transform: rotate(-45deg) translate(6px, -6px);\n }\n`;\n\nconst Language = styled.div`\n position: initial;\n margin-top: 5px;\n\n @media (min-width: 980px) {\n position: absolute;\n bottom: 60px;\n left: 40px;\n }\n`;\n\nconst SidebarTherapist = observer(() => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [mobileMenu, setMobileMenu] = useState(false);\n\n const isAiEnabled = isAppInsigthsEnabled();\n const appInsights = useAppInsightsContext();\n const trackProps = {\n user: {\n type: getInsightUserType(user.therapist),\n public_id: user.public_id \n } \n }\n\n const toggleClass = () => {\n setMobileMenu(!mobileMenu);\n };\n\n function handleLogout() {\n trackEvent(isAiEnabled, appInsights, eventConstants.USER.LOGOUT, trackProps);\n store.logout();\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n});\n\nexport default SidebarTherapist;\n","// Example flow: https://getuserflow.com/demo\nimport React, { useState, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport Card from \"../styled/card\";\nimport { H2, P } from \"../styled/typography\";\nimport Button from \"../styled/button\";\nimport { Redirect } from \"react-router-dom\";\n\nconst OnboardingCard = styled(Card)`\n z-index: 99999;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n position: fixed;\n height: ${(props) => {\n if (props.styling.height) return `${props.styling.height}px`;\n return \"auto\";\n }};\n width: ${(props) => {\n if (props.styling.width) return `${props.styling.width}px`;\n return \"auto\";\n }};\n max-width: 40%;\n bottom: 45px;\n right: 125px;\n padding: 25px 45px;\n\n &:before {\n content: \"\";\n width: 0px;\n height: 0px;\n position: absolute;\n border-left: 10px solid #fff;\n border-right: 10px solid transparent;\n border-top: 10px solid #fff;\n border-bottom: 10px solid transparent;\n right: -20px;\n bottom: 6px;\n }\n`;\n\nconst Buttons = styled.div`\n display: flex;\n`;\n\nconst ButtonBordered = styled(Button)`\n background-color: transparent;\n color: #51c0cf;\n margin-right: 15px;\n`;\n\nconst Title = styled(H2)`\n margin: 0px;\n text-align: center;\n`;\n\nconst Text = styled(P)`\n margin: 0px;\n margin-top: 15px;\n margin-bottom: 20px;\n text-align: center;\n`;\n\nconst OnboardingStep = (props) => {\n const [redirect, setRedirect] = useState(false);\n\n return (\n \n {props.title}\n {props.description}\n \n {props.backButton}\n \n \n {redirect && }\n \n );\n};\n\nexport default OnboardingStep;\n","import { observable, action } from \"mobx\"\nimport { createContext } from \"react\";\n\nclass PatientStore{\n @observable patient = {\n firstName: \"\",\n lastName: \"\",\n public_id: \"\",\n sex: \"\"\n };\n \n @action setPatient(firstName, lastName, public_id, sex){\n this.patient.firstName = firstName\n this.patient.lastName = lastName\n this.patient.public_id = public_id\n this.patient.sex = sex\n }\n\n}\n\n\nexport const PatientStoreInstance = new PatientStore()\n\nexport default createContext(PatientStoreInstance)","import React, { useState, useEffect, useContext } from \"react\";\nimport { Redirect } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport OnboardingStep from \"./onboardingStep\";\nimport Bertie from \"../../assets/images/bertie.png\";\nimport { api } from \"../../api\";\nimport registrationStore from \"../../components/registrationStore\";\nimport patientStore from \"../../components/patientStore\";\nimport { useTranslation } from \"react-i18next\";\n\nconst BertieModal = styled.img`\n position: fixed;\n right: 10px;\n bottom: 10px;\n border-radius: 50%;\n width: 75px;\n border: 2px solid #51c0cf;\n padding: 5px;\n cursor: pointer;\n z-index: 99999;\n`;\n\nconst OnboardingWrapper = styled.div`\n display: none;\n\n @media (min-width: 768px) {\n display: block;\n }\n`;\n\nconst OnboardingFlow = () => {\n const { t, i18n } = useTranslation();\n const [BertieIsVisible, setBertieIsVisibile] = useState(false);\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const patientstore = useContext(patientStore);\n const [step, setStep] = useState(0);\n const [stepsAreVisible, setStepsAreVisible] = useState(true);\n const [redirect, setRedirect] = useState(false);\n const [bertieAccount, setBertieAccount] = useState();\n\n useEffect(() => {\n if (step === 1)\n api.get(`/patients?therapist_id=${user.public_id}`).then((res) => {\n if (res.data.users[0]) {\n const bertie = res.data.users[0];\n patientstore.setPatient(bertie.firstName, bertie.lastName, bertie.public_id, bertie.sex);\n }\n });\n }, [step]);\n\n const closeBertie = () => {\n setBertieIsVisibile(false);\n api.put(`/user/${user.public_id}`, {\n isOnboarded: true,\n }).then((res) => {\n setBertieIsVisibile(false);\n store.setUser(JSON.stringify(res.data.user));\n });\n };\n\n const nextStep = () => {\n setStep(step + 1);\n };\n\n const previousStep = () => {\n setStep(step - 1);\n };\n\n useEffect(() => {\n if (user.isOnboarded === true) {\n setBertieIsVisibile(false);\n } else {\n setBertieIsVisibile(true);\n }\n });\n\n const onboardingSteps = {\n 0: {\n title: `${t(\"onboardingSteps.stepOneTitleHello\")} ${user.firstName}! ${t(\"onboardingSteps.stepOneTitle\")}`,\n description: `${t(\"onboardingSteps.stepOneDescription\")}`,\n backButton: `${t(\"onboardingSteps.notnow\")}`,\n nextButton: `${t(\"onboardingSteps.nextbutton\")}`,\n backButtonDestination: closeBertie,\n nextButtonDestination: nextStep,\n redirect: \"/t/therapy\",\n },\n 1: {\n title: `${t(\"onboardingSteps.stepTwoTitle\")}`,\n description: `${t(\"onboardingSteps.stepTwoDescription\")}`,\n backButton: `${t(\"onboardingSteps.previous\")}`,\n nextButton: `${t(\"onboardingSteps.next\")}`,\n backButtonDestination: previousStep,\n nextButtonDestination: nextStep,\n redirect: `/t/therapy/PatientDetail/${patientstore.patient.public_id}`,\n },\n 2: {\n title: `${t(\"onboardingSteps.stepThreeTitle\")}`,\n description: `${t(\"onboardingSteps.stepThreeDescription\")}`,\n backButton: `${t(\"onboardingSteps.previous\")}`,\n nextButton: `${t(\"onboardingSteps.next\")}`,\n backButtonDestination: previousStep,\n nextButtonDestination: nextStep,\n redirect: `/t/therapy/PatientTask/${patientstore.patient.public_id}`,\n },\n 3: {\n title: `${t(\"onboardingSteps.stepFourTitle\")}`,\n description: `${t(\"onboardingSteps.stepFourDescription\")}`,\n backButton: `${t(\"onboardingSteps.previous\")}`,\n nextButton: `${t(\"onboardingSteps.next\")}`,\n backButtonDestination: previousStep,\n nextButtonDestination: nextStep,\n redirect: `/t/therapy/PatientTask/${patientstore.patient.public_id}`,\n },\n 4: {\n title: `${t(\"onboardingSteps.stepICFFourFiveTitle\")}`,\n description: `${t(\"onboardingSteps.stepICFFourFiveDescription\")}`,\n backButton: `${t(\"onboardingSteps.previous\")}`,\n nextButton: `${t(\"onboardingSteps.next\")}`,\n backButtonDestination: previousStep,\n nextButtonDestination: nextStep,\n redirect: `/t/therapy/PatientTask/${patientstore.patient.public_id}`,\n },\n 5: {\n title: `${t(\"onboardingSteps.stepFiveTitle\")}`,\n description: `${t(\"onboardingSteps.stepFiveDescription\")}`,\n backButton: `${t(\"onboardingSteps.previous\")}`,\n nextButton: `${t(\"onboardingSteps.next\")}`,\n backButtonDestination: previousStep,\n nextButtonDestination: nextStep,\n redirect: `/t/therapy/PatientTask/${patientstore.patient.public_id}`,\n },\n 6: {\n title: `${t(\"onboardingSteps.stepSixTitle\")}`,\n description: `${t(\"onboardingSteps.stepSixDescription\")}`,\n backButton: `${t(\"onboardingSteps.previous\")}`,\n nextButton: `${t(\"onboardingSteps.next\")}`,\n backButtonDestination: previousStep,\n nextButtonDestination: nextStep,\n redirect: `/t/therapy/PatientTask/${patientstore.patient.public_id}`,\n },\n 7: {\n title: `${t(\"onboardingSteps.stepSevenTitle\")}`,\n description: `${t(\"onboardingSteps.stepSevenDescription\")}`,\n backButton: `${t(\"onboardingSteps.previous\")}`,\n nextButton: `${t(\"onboardingSteps.next\")}`,\n backButtonDestination: previousStep,\n nextButtonDestination: nextStep,\n redirect: `/t/therapy/PatientTask/${patientstore.patient.public_id}`,\n },\n 8: {\n title: `${t(\"onboardingSteps.stepEightTitle\")}`,\n description: `${t(\"onboardingSteps.stepEightDescription\")}`,\n backButton: `${t(\"onboardingSteps.previous\")}`,\n nextButton: `${t(\"onboardingSteps.next\")}`,\n backButtonDestination: previousStep,\n nextButtonDestination: nextStep,\n redirect: `/t/therapy/PatientTask/${patientstore.patient.public_id}`,\n },\n 9: {\n title: `${t(\"onboardingSteps.stepNineTitle\")}`,\n description: `${t(\"onboardingSteps.stepNineDescription\")}`,\n backButton: `${t(\"onboardingSteps.previous\")}`,\n nextButton: `${t(\"onboardingSteps.next\")}`,\n backButtonDestination: previousStep,\n nextButtonDestination: nextStep,\n redirect: `/t/therapy/PatientTask/${patientstore.patient.public_id}`,\n },\n 10: {\n title: `${t(\"onboardingSteps.stepTenTitle\")}`,\n description: `${t(\"onboardingSteps.stepTenDescription\")}`,\n backButton: `${t(\"onboardingSteps.previous\")}`,\n nextButton: `${t(\"onboardingSteps.next\")}`,\n backButtonDestination: previousStep,\n nextButtonDestination: nextStep,\n redirect: `/t/therapy/PatientResults/${patientstore.patient.public_id}`,\n },\n 11: {\n title: `${t(\"onboardingSteps.stepElevenTitle\")}`,\n description: `${t(\"onboardingSteps.stepElevenDescription\")}`,\n backButton: `${t(\"onboardingSteps.previous\")}`,\n nextButton: `${t(\"onboardingSteps.next\")}`,\n backButtonDestination: previousStep,\n nextButtonDestination: nextStep,\n redirect: `/t/consultMaterial`,\n },\n 12: {\n title: `${t(\"onboardingSteps.stepTwelveTitle\")}`,\n description: `${t(\"onboardingSteps.stepTwelveDescription\")}`,\n backButton: `${t(\"onboardingSteps.previous\")}`,\n nextButton: `${t(\"onboardingSteps.next\")}`,\n backButtonDestination: previousStep,\n nextButtonDestination: nextStep,\n redirect: `/t/CreateMaterial`,\n },\n 13: {\n title: `${t(\"onboardingSteps.stepThirteenTitle\")}`,\n description: `${t(\"onboardingSteps.stepThirteenDescription\")}`,\n backButton: `${t(\"onboardingSteps.previous\")}`,\n nextButton: `${t(\"onboardingSteps.next\")}`,\n backButtonDestination: previousStep,\n nextButtonDestination: nextStep,\n redirect: `/t/therapy`,\n },\n 14: {\n title: `${t(\"onboardingSteps.stepFourteenTitle\")}`,\n description: `${t(\"onboardingSteps.stepFourteenDescription\")}`,\n backButton: `${t(\"onboardingSteps.previous\")}`,\n nextButton: `${t(\"onboardingSteps.endOnboarding\")}`,\n backButtonDestination: previousStep,\n nextButtonDestination: closeBertie,\n redirect: `/t/therapy`,\n },\n };\n\n const handleBertieClose = () => {\n setStepsAreVisible(!stepsAreVisible);\n };\n\n return (\n \n {BertieIsVisible ? (\n <>\n {stepsAreVisible && (\n onboardingSteps[step][\"backButtonDestination\"]}\n nextButtonDestination={() => onboardingSteps[step][\"nextButtonDestination\"]}\n redirect={onboardingSteps[step][\"redirect\"]}\n />\n )}\n \n {step > 0 ? : \"\"}\n \n ) : (\n <>\n )}\n \n );\n};\n\nexport default OnboardingFlow;\n","import React, { useContext } from \"react\";\nimport registrationStore from \"../registrationStore\";\nimport SidebarTherapist from \"../sidebarTherapist\";\nimport AccountMenu from \"../accountMenu/accountMenu\";\nimport OnboardingFlow from \"../onboarding/onboardingFlow\";\n\nfunction TherapistOverlay() {\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n return (\n
\n \n \n
\n );\n}\n\nexport default TherapistOverlay;\n","import React, { useEffect, useState, useContext } from \"react\";\nimport styled, { keyframes } from \"styled-components\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport Notification from \"../../components/notification\";\nimport Global from \"../../components/styled/global\";\nimport { PageTitle } from \"../../components/styled/typography\";\nimport { SmallTitle } from \"../../components/styled/typography\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { observer } from \"mobx-react-lite\";\nimport registrationStore from \"../../components/registrationStore\";\nimport { api } from \"../../api\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport Flash from \"../../components/styled/flashMessage\";\nimport { Redirect, Link } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport chatService from '../../communication-module/services/chatService';\nimport Button from \"../../components/styled/button\";\nimport ChatStore from \"../../communication-module/stores/chat.store\";\nimport { P } from \"../../components/styled/typography\";\nimport { FaTrashAlt, FaEdit } from \"react-icons/fa\"\n\nconst FlashMessage = styled(Flash)`\n :hover {\n cursor: pointer;\n }\n`;\n\nconst EditIcon = styled(FaEdit)`\n color: #FFFFFF;\n margin-right: 5px;\n font-size: 16px;\n`\n\nconst Title = styled(SmallTitle)`\n margin-top: 10px;\n margin-right: 40px;\n`;\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n\n @media(min-width: 980px){\n flex-direction: row;\n justify-content: space-between;\n }\n`\n\nconst Buttons = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n margin-top: 15px;\n\n @media(min-width: 980px){\n margin-top: 0px;\n margin-left: 10px;\n justify-content: flex-start;\n }\n`\n\nconst TrashIcon = styled(FaTrashAlt)`\n color: #FFFFFF;\n margin-right: 5px;\n font-size: 16px;\n`\n\nconst PrimaryButton = styled(Button)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n margin: 3px 0px;\n width: 100%;\n`\n\nconst RedButton = styled(Button)`\n background-color: #DC393D;\n border-color: #DC393D;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n margin: 3px 0px;\n width: 100%;\n\n &:hover {\n background-color: #b02a2e;\n border-color: #b02a2e;\n }\n`\n\nconst Empty = styled.div`\n width: 1px;\n height: 1px;\n`\n\nconst StyledLink = styled(Link)`\n text-decoration: none;\n`\n\nconst fadein = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`\n\nconst Wrapper = styled.div`\n background-color: #FFFFFF;\n box-sizing: border-box;\n width: 100%;\n padding: 20px;\n border: 1px solid #FFFFFF;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n height: auto;\n animation: ${fadein} 1s;\n\n`\n\nconst A = styled(Link)`\n text-decoration: none;\n width: 100%;\n margin: 5px 0px;\n\n @media (min-width: 980px){\n width: 49.5%;\n }\n`\n\nconst SubTitle = styled(P)`\n font-style: italic;\n margin-top: 0px;\n margin-bottom: 0px;\n font-size: 16px;\n`\n\n\nconst Dashboard = observer(() => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [messages, setMessages] = useState([]);\n const [chats, setChats] = useState([]);\n const [redirect, setRedirect] = useState(false);\n const chatstore = useContext(ChatStore);\n\n useEffect(() => {\n api.get(\"/user/\" + user.public_id + \"/inbox\").then((response) => {\n setMessages(response.data.inbox);\n });\n\n chatService.getChats().then(({data}) => setChats(data));\n }, []);\n\n useEffect(() => {\n chatService.getChats().then(({data}) => setChats(data));\n }, [chatstore.numberOfChats, chatstore.activeChat]);\n\n const update = () => {\n api.get(\"/user/\" + user.public_id + \"/inbox\").then((response) => {\n setMessages(response.data.inbox);\n });\n };\n\n const HandleClick = () => {\n store.setPlan(user.plan);\n store.setPlanLength(user.plan_period);\n store.addUserAttribute(\"ID\", user.public_id);\n setRedirect(true);\n };\n\n const GetChatPartenerFullName = (attendees) => {\n var fullName;\n attendees.forEach(attendee => {\n if (attendee && attendee.public_id !== user.public_id) fullName = `${attendee.firstName} ${attendee.lastName}`;\n });\n return fullName;\n };\n\n const removeChat = (chatId) => {\n chatstore.finish(chatId);\n };\n\n const GetCountNewMessages = (chat) => {\n const last = chat.messages[chat.messages.length - 1];\n return last && last.instigatorId != user.public_id ? chat.counts : 0;\n }\n\n return (\n \n \n \n \n {t(\"sidebarPatient.over\")}\n {user.expired && {t(\"dashboard.expired\")}}\n {redirect && }\n {t(\"accountMenuDropdown.inbox\")}\n {messages.length > 0 ? (\n messages.map((message) => {\n return ;\n })\n ) : (\n

{t(\"inbox.leeg\")}

\n )}\n\n {t(\"dashboard.chats\")}\n {chats.length > 0 ? (\n chats.map((chat) => (\n \n \n \n
\n {t(\"dashboard.chatTitle\")} {GetChatPartenerFullName(chat.attendees)}\n {GetCountNewMessages(chat)} {t(\"dashboard.chatCount\")}\n
\n \n \n \n {t(\"dashboard.chatOpen\")}\n \n \n removeChat(chat.id)}>\n {t(\"dashboard.chatDelete\")}\n \n \n
\n
\n
\n ))\n ) : (\n

{t(\"chats.leeg\")}

\n )}\n
\n
\n
\n );\n});\n\nexport default Dashboard;\n","import React, {useState} from \"react\";\nimport styled from \"styled-components\";\nimport { Field } from \"formik\";\n\nconst Wrapper = styled.div`\n display: flex;\n align-items: flex-end;\n margin: 5px 0px;\n`;\n\nconst SwitchLabel = styled.label`\n position: relative;\n display: inline-block;\n width: 47px;\n height: 20px;\n margin-top: 5px;\n`;\n\nconst Label = styled.label`\n margin: 0px;\n display: inline-block;\n margin-left: 10px;\n`;\n\nconst Slider = styled.div`\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: #ccc;\n -webkit-transition: 0.4s;\n transition: 0.4s;\n\n &:before {\n position: absolute;\n content: \"\";\n height: 13px;\n width: 13px;\n left: 4px;\n bottom: 4px;\n background-color: white;\n -webkit-transition: 0.4s;\n transition: 0.4s;\n }\n`;\n\nconst RoundSlider = styled(Slider)`\n border-radius: 34px;\n &:before {\n border-radius: 50%;\n }\n`;\n\nconst SwitchInput = styled(Field)`\n display: none;\n\n &:checked + ${Slider} {\n background-color: #51c0cf;\n }\n\n &:focus + ${Slider} {\n box-shadow: 0 0 1px #51c0cf;\n }\n\n &:checked + ${Slider}:before {\n -webkit-transform: translateX(26px);\n -ms-transform: translateX(26px);\n transform: translateX(26px);\n }\n`;\n\nexport const Switch = (props) => {\n return (<>\n \n \n \n \n \n {props.children ? document.getElementById(props.name)?.checked && props.children : null}\n \n \n );\n};","import React,{useContext, useState} from 'react'\nimport { Formik, Form, Field } from 'formik'\nimport * as Yup from 'yup'\nimport styled from 'styled-components'\nimport { Redirect } from \"react-router-dom\"\nimport Button from '../styled/button'\nimport CKEditor from '@ckeditor/ckeditor5-react';\nimport ClassicEditor from '@ckeditor/ckeditor5-build-classic';\nimport {api} from \"../../api\"\nimport {observer} from \"mobx-react-lite\"\nimport { useTranslation } from \"react-i18next\"\nimport TagSelect from \"../helperComponents/tagSelect\";\nimport registrationStore from \"../registrationStore\";\nimport { Disciplines, Subdisciplines} from \"../resources/disciplines\";\nimport { Languages } from '../resources/languages';\nimport { Switch } from \"../styled/switch\";\n\nconst DocumentForm = styled(Form)`\n`\n\nconst FormGroup = styled.div`\n display: flex;\n flex-direction: column;\n margin-bottom: 20px;\n`\n\nconst Input = styled(Field)`\n background: #FFFFFF;\n border: 1px solid #51C0CF;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n`\n\nconst Label = styled.label`\n font-size: 16px;\n font-weight: 600;\n color: #545454;\n`\n\nconst SubmitButton = styled(Button)`\n margin-top: 20px;\n padding-right: 45px;\n padding-left: 45px;\n font-size: 18px;\n`\nconst FlexLeft = styled.div`\n margin-top: 10px;\n display: flex;\n`\n\nconst Error = styled.p`\n font-size: 16px;\n color: #AFAFAF;\n font-style: italic;\n`\n\nconst Center = styled.div`\n text-align: center;\n`\n\nconst documentForm = observer((props) => {\n const { t, i18n } = useTranslation()\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [redirect, setRedirect] = useState(false)\n const [dataContent, setDataContent] = useState(\"\")\n const [tags, setTags] = useState([]);\n\n return (
\n {\n api.post('/document', {\n \"therapist_id\": props.user.public_id,\n \"published\" : values.published,\n \"title\" : values.title,\n \"discipline\" : values.discipline,\n \"subdiscipline\": values.subdiscipline,\n \"language\": values.language,\n \"content\" : dataContent,\n \"therapist_name\" : props.user.firstName + \" \" + props.user.lastName,\n \"description\": values.description,\n \"tags\": tags\n })\n actions.setSubmitting(false)\n setRedirect(true)\n }}\n render={({errors,touched, values}, isSubmitting) => (\n \n \n \n \n \n \n \n \n \n \n \n { touched.discipline && errors.discipline && {errors.discipline} }\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n { touched.language && errors.language && {errors.language} }\n \n \n \n \n { touched.title && errors.title && {errors.title} }\n \n \n \n \n { touched.description && errors.description && {errors.description} }\n \n \n \n

\"\n onChange={ ( event, editor ) => {\n const data = editor.getData();\n setDataContent(data)\n } }\n config={{\n cloudServices: {tokenUrl : process.env.REACT_APP_COBRAND_API + \"/editor_token/\" + props.user.public_id, uploadUrl : \"https://55482.cke-cs.com/easyimage/upload/\"},\n }}\n />\n
\n \n { touched.published && errors.published && {errors.published} }\n
\n {t('documentForm.configure')}\n
\n {redirect && }\n
\n )}\n validationSchema={Yup.object().shape({\n title: Yup.string().required(t('documentEditForm.titlePlaceholder')),\n description: Yup.string().required(t('documentEditForm.descriptionPlaceholder')),\n discipline: Yup.string().required(),\n language: Yup.string().required()\n })}\n \n />\n
)\n})\n\nexport default documentForm","import React, { useContext } from \"react\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport Global from \"../../components/styled/global\";\nimport DocumentForm from \"../../components/documentComponents/documentForm\";\nimport { observer } from \"mobx-react\";\nimport registrationStore from \"../../components/registrationStore\";\nimport { PageTitle } from \"../../components/styled/typography\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport { useTranslation } from \"react-i18next\";\n\nconst DocumentAanmaken = observer(() => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n return (\n \n \n \n \n {t(\"documentForm.configure\")}\n \n \n \n \n );\n});\n\nexport default DocumentAanmaken;\n","import React, {useContext, useEffect, useState} from 'react'\nimport { Formik, Form, Field } from 'formik'\nimport * as Yup from 'yup'\nimport styled from 'styled-components'\nimport { Redirect } from \"react-router-dom\"\nimport Button from '../styled/button'\nimport CKEditor from '@ckeditor/ckeditor5-react';\nimport ClassicEditor from '@ckeditor/ckeditor5-build-classic';\nimport {api} from \"../../api\"\nimport {observer} from \"mobx-react-lite\"\nimport RegistrationStore from \"../registrationStore\"\nimport { useTranslation } from \"react-i18next\"\nimport TagSelect from \"../helperComponents/tagSelect\";\nimport { Disciplines, Subdisciplines} from \"../resources/disciplines\";\nimport { Languages } from '../resources/languages';\nimport { Switch } from \"../styled/switch\";\n\nconst DocumentForm = styled(Form)`\n`\n\nconst FormGroup = styled.div`\n display: flex;\n flex-direction: column;\n margin-bottom: 20px;\n`\n\nconst Input = styled(Field)`\n background: #FFFFFF;\n border: 1px solid #51C0CF;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n`\n\nconst Label = styled.label`\n font-size: 16px;\n font-weight: 600;\n color: #545454;\n`\n\nconst SubmitButton = styled(Button)`\n margin-top: 20px;\n padding-right: 45px;\n padding-left: 45px;\n font-size: 18px;\n`\nconst FlexLeft = styled.div`\n margin-top: 10px;\n display: flex;\n`\n\nconst Error = styled.p`\n font-size: 16px;\n color: #AFAFAF;\n font-style: italic;\n`\n\nconst Center = styled.div`\n text-align: center;\n`\n\nconst documentForm = observer((props) => {\n const { t, i18n } = useTranslation()\n const store = useContext(RegistrationStore)\n const user = JSON.parse(store.user)\n const [redirect, setRedirect] = useState(false)\n const [dataContent, setDataContent] = useState(props.document.content)\n const [tags, setTags] = useState([]);\n\n return (
\n {\n api.put('/document/' + props.id, {\n \"published\" : values.published,\n \"title\": values.title,\n \"discipline\" : values.discipline,\n \"subdiscipline\": values.subdiscipline,\n \"language\": values.language,\n \"description\": values.description,\n \"content\": dataContent,\n \"tags\": tags\n }).then(function(){\n setRedirect(true)\n })\n actions.setSubmitting(false)\n }}\n render={({errors,touched, values}, isSubmitting) => (\n \n \n \n \n \n \n \n \n { touched.title && errors.title && {errors.title} }\n \n \n \n \n \n \n \n { touched.discipline && errors.discipline && {errors.discipline} }\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n { touched.language && errors.language && {errors.language} }\n \n \n \n \n { touched.description && errors.description && {errors.description} }\n \n \n \n {\n const data = editor.getData();\n setDataContent(data)\n } }\n config={{\n cloudServices: {tokenUrl : process.env.REACT_APP_COBRAND_API + \"/editor_token/\" + user.public_id, uploadUrl : \"https://55482.cke-cs.com/easyimage/upload/\"},\n \n }}\n />\n \n \n { touched.published && errors.published && {errors.published} }\n
\n {t('documentEditForm.configure')}\n
\n {redirect && }\n
\n )}\n validationSchema={Yup.object().shape({\n title: Yup.string().required(t('documentEditForm.titlePlaceholder')),\n description: Yup.string().required(t('documentEditForm.descriptionPlaceholder')),\n discipline: Yup.string().required(),\n language: Yup.string().required()\n })}\n \n />\n
)\n})\n\nexport default documentForm","import React, { useState, useEffect, useContext } from \"react\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport Global from \"../../components/styled/global\";\nimport DocumentEditForm from \"../../components/documentComponents/documentEditForm\";\nimport { observer } from \"mobx-react\";\nimport { api } from \"../../api\";\nimport { PageTitle } from \"../../components/styled/typography\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport LoadSpinner from \"../../components/loadspinner\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport registrationStore from \"../../components/registrationStore\";\nimport { useTranslation } from \"react-i18next\";\n\nconst DocumentAanpassen = observer((props) => {\n const { t, i18n } = useTranslation();\n const { id } = props.match.params;\n const [document, setDocument] = useState({});\n const [loading, setLoading] = useState(true);\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n\n useEffect(() => {\n api.get(\"/document/\" + id).then((response) => {\n setDocument(response.data.document);\n setLoading(false);\n });\n }, []);\n\n if (loading) {\n return ;\n } else {\n return (\n \n \n \n \n {t(\"documentAanpassen.config\")}\n \n \n \n \n );\n }\n});\nexport default DocumentAanpassen;\n","import React from 'react';\nimport { NativeTypes } from 'react-dnd-html5-backend';\nimport { useDrop } from 'react-dnd';\nimport { FaCloudUploadAlt } from \"react-icons/fa\";\nimport { useTranslation } from \"react-i18next\";\nimport styled from \"styled-components\";\n\nconst Label = styled.label`\n font-size: 16px;\n font-weight: 600;\n color: #545454;\n margin-right: 20px;\n`;\n\nconst UploadButton = styled(Label)`\n justify-content: flex-start;\n width: auto;\n border: 1px solid #929292;\n padding: 5px 10px;\n margin-bottom: 15px;\n`;\n\nconst UploadIcon = styled(FaCloudUploadAlt)`\n margin-right: 7px;\n`;\n\nexport const FileTarget = (props) => {\n const { t, i18n } = useTranslation();\n const { onDrop } = props;\n const [{ canDrop, isOver }, drop] = useDrop({\n accept: [NativeTypes.FILE],\n drop(item, monitor) {\n if (onDrop) {\n onDrop(props, monitor);\n }\n },\n collect: (monitor) => ({\n isOver: monitor.isOver(),\n canDrop: monitor.canDrop(),\n }),\n });\n const isActive = canDrop && isOver;\n return (\n {isActive ? t(\"fileTarget.releaseFile\") : t(\"fileTarget.uploadFile\")}\n );\n};","import React,{ useCallback, useState, useEffect } from 'react';\nimport { Formik, Form, Field } from 'formik';\nimport * as Yup from 'yup';\nimport styled from 'styled-components';\nimport { Redirect } from \"react-router-dom\";\nimport Button from '../styled/button';\nimport { api } from \"../../api\";\nimport { FileTarget } from \"./fileTarget\";\nimport { observer } from \"mobx-react-lite\";\nimport { useTranslation } from \"react-i18next\";\nimport { Switch } from \"../styled/switch\";\nimport FileSaver from \"file-saver\";\nimport Card from \"../styled/card\";\nimport LoadSpinner from '../loadspinner';\nimport TagSelect from \"../helperComponents/tagSelect\";\nimport { Languages } from '../resources/languages';\nimport { uploadOneFile } from '../../azure';\nimport CKEditor from '@ckeditor/ckeditor5-react';\nimport ClassicEditor from '@ckeditor/ckeditor5-build-classic';\n\nconst FileFormStyle = styled(Form)` \n`\n\nconst FormGroup = styled.div`\n display: flex;\n flex-direction: column;\n margin-bottom: 20px;\n`\n\nconst Input = styled(Field)`\n background: #FFFFFF;\n border: 1px solid #51C0CF;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n\n &:disabled{\n //background: #EEEEEE;\n //border: 1px solid #B0C1C4;\n opacity: 0.5;\n }\n`\n\nconst Label = styled.label`\n font-size: 16px;\n font-weight: 600;\n color: #545454;\n`\n\nconst SubmitButton = styled(Button)`\n margin-top: 20px;\n padding-right: 45px;\n padding-left: 45px;\n font-size: 18px;\n`\nconst FlexLeft = styled.div`\n margin-top: 10px;\n display: flex;\n`\n\nconst Error = styled.p`\n font-size: 16px;\n color: #AFAFAF;\n font-style: italic;\n`\n\nconst SmallButton = styled(Button)`\n margin-top: 5px;\n width: fit-content;\n`;\n\nconst Center = styled.div`\n text-align: center;\n`\n\nconst ChoseFile = styled(Input)`\n display: none;\n`;\n\nconst FileCard = styled(Card)`\n margin-bottom: 10px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n\nconst DeleteButton = styled(Button)`\n background-color: #dc393d;\n border-color: #dc393d;\n margin-left: 5px;\n\n &:hover {\n background-color: #dc393d;\n border-color: #dc393d;\n }\n\n &:clicked {\n background-color: #dc393d;\n border-color: #dc393d;\n }\n`;\n\nconst Img = styled.img`\n width: 80%;\n\n @media (min-width: 980px) {\n width: 40%;\n }\n`;\n\nconst Video = styled.video`\n width: 80%;\n margin-bottom: 10px;\n`;\n\nconst Audio = styled.audio`\n max-width: 80%;\n margin-top: 20px;\n margin-bottom: 20px;\n`;\n\nconst FileForm = observer((props) => {\n const { t, i18n } = useTranslation();\n const [tags, setTags] = useState([]);\n const [loading, setLoading] = useState(false);\n const [fileAsDataTransfer, setFileAsDataTransfer] = useState([]);\n const [fileAsArray, setFileAsArray] = useState([]);\n const [filePreview, setFilePreview] = useState('');\n const [redirect, setRedirect] = useState(false);\n const [type, setType] = useState(\"\");\n const [previewUrl, setPreviewUrl] = useState(\"\");\n const [fileName, setFileName] = useState(\"\");\n const [description, setDescription] = useState((props.hasOwnProperty('document') ? props.document.description : \"

\"))\n\n useEffect(() => {\n // Make sure all selected files are visible\n const filesArray = dataTransferToArrayConverter(fileAsDataTransfer);\n if (filesArray.length > 0) {\n setFileAsArray(filesArray);\n const previewUrl = URL.createObjectURL(fileAsDataTransfer[0]);\n const fileName = filesArray[0].name;\n setPreviewUrl(previewUrl);\n setFileName(fileName);\n getFilePreview(fileName, filesArray[0].type.split('/')[0], previewUrl);\n }\n }, [fileAsDataTransfer]);\n\n const downloadOneFile = async (file_url, file_name) => {\n FileSaver.saveAs(file_url, file_name);\n }\n\n const getFilePreview = (fileName, fileType, previewUrl) =>{\n setType(fileType);\n switch (fileType) {\n case \"image\":\n setFilePreview();\n break;\n case \"video\":\n setFilePreview();\n break;\n case \"audio\":\n setFilePreview();\n break;\n default:\n setFilePreview(null);\n break;\n }\n }\n\n useEffect(() => {\n // Make sure all selected files are visible\n const filesArray = dataTransferToArrayConverter(fileAsDataTransfer);\n setFileAsArray(filesArray);\n }, [fileAsDataTransfer]);\n\n const dataTransferToArrayConverter = (dataTransfer) => {\n let filesArray = [];\n for (let i = 0; i < dataTransfer.length; i++) {\n const file = dataTransfer.item(i);\n filesArray.push(file);\n }\n return filesArray;\n };\n\n const handleFileDrop = useCallback((item, monitor) => {\n if (monitor) {\n const item = monitor.getItem();\n const files = item.files;\n changeSelectedFile(files[0]);\n }\n }, []);\n\n const changeSelectedFile = (newFile) => {\n const fileData = new DataTransfer();\n\n const thisItem = newFile;\n fileData.items.add(thisItem);\n\n // Set initial upload progress to 0\n let progressObject = {};\n progressObject[newFile.name] = 0;\n\n setFileAsDataTransfer(fileData.files);\n };\n\n const postFile = async (values, actions) => {\n setLoading(true);\n const file = fileAsDataTransfer[0]\n uploadOneFile(file).then((_) => {\n //Add type as tag\n // let tempTags = tags;\n // if (!tempTags.includes(type)) tempTags.push(type);\n\n api.post('/file', {\n \"therapist_id\": props.user.public_id,\n \"therapist_name\" : props.user.firstName + \" \" + props.user.lastName,\n \"tags\": tags,\n \"name\": values.fileName,\n \"resource_name\": file.name,\n \"file_url\": \"\",\n \"language\": values.language,\n \"type\": type,\n \"description\": description,\n \"published\": values.published\n }).then((res) => {\n // sendNotificationEmail(values);\n actions.setSubmitting(false);\n setLoading(false);\n props.onSubmit ? props.onSubmit() : setRedirect(true);\n })\n })\n }\n\n const sendNotificationEmail = (values) => {\n var message = `Dag Mieke,\n\nEr werd zojuist nieuwe media upgeload genaamd: ${values.fileName}.\nDit is de soort media: ${type}.\nDe gevraagde tags zijn: ${tags}.\n\nGroeten,\nHet TD team`;\n api.post(\"/mail\", {\n body: \"request\",\n sender: \"info@telephon.digital\",\n to: \"mieke.moerman@telephon.digital\",\n subject: \"Upload nieuwe media\",\n message: message\n });\n };\n\n return (
\n {loading ? :\n (\n \n \n \n \n { touched.fileName && errors.fileName && {errors.fileName} }\n \n \n \n {\n const description = editor.getData();\n console.log( { event, editor });\n setDescription(description);\n }}\n config={{\n placeholder: t('fileForm.inputDescription'),\n toolbar: ['heading', '|', 'bold', 'italic', 'blockQuote', 'link', 'numberedList', 'bulletedList', 'insertTable', 'tableColumn', 'tableRow', 'mergeTableCells', '|', 'undo', 'redo', '|', 'code'],\n cloudServices: {tokenUrl : process.env.REACT_APP_COBRAND_API + \"/editor_token/\" + props.user.public_id, uploadUrl : \"https://55482.cke-cs.com/easyimage/upload/\"}\n }}\n onError={ ( { willEditorRestart } ) => {\n // If the editor is restarted, the toolbar element will be created once again.\n // The `onReady` callback will be called again and the new toolbar will be added.\n // This is why you need to remove the older toolbar.\n if ( willEditorRestart ) {\n this.editor.ui.view.toolbar.element.remove();\n }\n } }\n />\n \n \n \n \n \n \n \n \n \n \n \n { touched.language && errors.language && {errors.language} }\n \n \n \n {filePreview ?? <>\n {t(\"fileForm.noPreview\")}\n downloadOneFile(previewUrl, fileName)}>\n {t(\"mediaDetail.download\")}\n \n }\n \n \n \n changeSelectedFile(e.target.files[0])} />\n \n \n { touched.published && errors.published && {errors.published} }\n
\n 0 && isValid && !isSubmitting) ? null : 'disabled'}\n >\n {t('fileForm.configure')}\n \n
\n {redirect && }\n
\n )}\n validationSchema={Yup.object().shape({\n fileName: Yup.string().required(),\n language: Yup.string().required(),\n description: Yup.string().notRequired(),\n published: Yup.string().required()\n })}\n \n />}\n
)\n})\n\nexport default FileForm","import React, { useContext } from \"react\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport Global from \"../../components/styled/global\";\nimport FileForm from \"../../components/fileForm/fileForm\";\nimport { observer } from \"mobx-react\";\nimport registrationStore from \"../../components/registrationStore\";\nimport { PageTitle } from \"../../components/styled/typography\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport { useTranslation } from \"react-i18next\";\n\nconst FileAanmaken = observer(() => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n return (\n \n \n \n \n {t(\"fileForm.configure\")}\n \n \n \n \n );\n});\n\nexport default FileAanmaken;","import React,{ useCallback, useState, useEffect } from 'react';\nimport { Formik, Form, Field } from 'formik';\nimport * as Yup from 'yup';\nimport styled from 'styled-components';\nimport { Redirect } from \"react-router-dom\";\nimport Button from '../styled/button';\nimport { api } from \"../../api\";\nimport { Switch } from \"../styled/switch\";\nimport { observer } from \"mobx-react-lite\";\nimport { useTranslation } from \"react-i18next\";\nimport FileSaver from \"file-saver\";\nimport LoadSpinner from '../loadspinner';\nimport TagSelect from \"../helperComponents/tagSelect\";\nimport { Languages } from '../resources/languages';\nimport { getResourceUrl } from '../../azure';\nimport CKEditor from '@ckeditor/ckeditor5-react';\nimport ClassicEditor from '@ckeditor/ckeditor5-build-classic';\n\nconst FileEditFormStyle = styled(Form)`\n`\n\nconst FormGroup = styled.div`\n display: flex;\n flex-direction: column;\n margin-bottom: 20px;\n`\n\nconst Input = styled(Field)`\n background: #FFFFFF;\n border: 1px solid #51C0CF;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n\n &:disabled{\n //background: #EEEEEE;\n //border: 1px solid #B0C1C4;\n opacity: 0.5;\n }\n`\n\nconst Label = styled.label`\n font-size: 16px;\n font-weight: 600;\n color: #545454;\n`\n\nconst SubmitButton = styled(Button)`\n margin-top: 20px;\n padding-right: 45px;\n padding-left: 45px;\n font-size: 18px;\n`\n\nconst SmallButton = styled(Button)`\n margin-top: 5px;\n width: fit-content;\n`;\n\nconst Center = styled.div`\n text-align: center;\n`\n\nconst Img = styled.img`\n width: 80%;\n\n @media (min-width: 980px) {\n width: 40%;\n }\n`;\n\nconst Error = styled.p`\n font-size: 16px;\n color: #AFAFAF;\n font-style: italic;\n`\n\nconst Video = styled.video`\n width: 80%;\n margin-bottom: 10px;\n`;\n\nconst Audio = styled.audio`\n max-width: 80%;\n margin-top: 20px;\n margin-bottom: 20px;\n`;\n\nconst FileEditForm = observer((props) => {\n const { t, i18n } = useTranslation();\n const [tags, setTags] = useState([]);\n const [loading, setLoading] = useState(false);\n const [filePreview, setFilePreview] = useState('');\n const [redirect, setRedirect] = useState(false);\n const [fileUrl, setFileUrl] = useState(\"\");\n\n useEffect(() => {\n setLoading(true);\n getResourceUrl(props.file).then((url) => {\n setFileUrl(url);\n getFilePreview(url);\n setLoading(false);\n });\n }, []);\n\n const downloadOneFile = async (file_url) => {\n FileSaver.saveAs(file_url, props.file.resource_name);\n }\n\n const getFilePreview = (file_url) =>{\n switch (props.file.type) {\n case \"image\":\n setFilePreview();\n break;\n case \"audio\":\n setFilePreview();\n break;\n case \"video\":\n setFilePreview();\n break;\n default:\n setFilePreview(null);\n break;\n }\n }\n\n const postFile = async (values, actions) => {\n setLoading(true);\n //Add type as tag\n //let tempTags = tags;\n //if (!tempTags.includes(type)) tempTags.push(type);\n //if (!tempTags.includes('aangepast')) tempTags.push('aangepast');\n\n api.put('/file/' + props.file.id, {\n \"tags\": tags,\n \"name\": values.fileName,\n \"description\": values.description,\n \"published\": values.published,\n \"language\": values.language\n }).then((res) => {\n actions.setSubmitting(false);\n setLoading(false);\n setRedirect(true);\n })\n }\n\n return (
\n {loading ? :\n (\n \n \n \n \n { touched.fileName && errors.fileName && {errors.fileName} }\n \n \n \n {\n values.description = editor.getData();\n }}\n config={{\n placeholder: t('fileForm.inputDescription'),\n toolbar: ['heading', '|', 'bold', 'italic', 'blockQuote', 'link', 'numberedList', 'bulletedList', 'insertTable', 'tableColumn', 'tableRow', 'mergeTableCells', '|', 'undo', 'redo'],\n cloudServices: {tokenUrl : process.env.REACT_APP_COBRAND_API + \"/editor_token/\", uploadUrl : \"https://55482.cke-cs.com/easyimage/upload/\"}\n }}\n onError={ ( { willEditorRestart } ) => {\n // If the editor is restarted, the toolbar element will be created once again.\n // The `onReady` callback will be called again and the new toolbar will be added.\n // This is why you need to remove the older toolbar.\n if ( willEditorRestart ) {\n this.editor.ui.view.toolbar.element.remove();\n }\n } }\n />\n \n \n \n \n \n \n \n \n \n \n \n { touched.language && errors.language && {errors.language} }\n \n \n \n {filePreview ?? <>\n {t(\"fileForm.noPreview\")}\n downloadOneFile(fileUrl)}>\n {t(\"mediaDetail.download\")}\n \n }\n \n \n
\n \n {t('fileAanpassen.config')}\n \n
\n {redirect && }\n
\n )}\n validationSchema={Yup.object().shape({\n fileName: Yup.string().required(),\n language: Yup.string().required(),\n description: Yup.string().notRequired(),\n published: Yup.string().required()\n })}\n \n />}\n
)\n})\n\nexport default FileEditForm","import React, { useState, useEffect, useContext } from \"react\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport Global from \"../../components/styled/global\";\nimport FileEditForm from \"../../components/fileForm/fileEditForm\";\nimport { observer } from \"mobx-react\";\nimport { api } from \"../../api\";\nimport { PageTitle } from \"../../components/styled/typography\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport LoadSpinner from \"../../components/loadspinner\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport registrationStore from \"../../components/registrationStore\";\nimport { useTranslation } from \"react-i18next\";\n\nconst FileAanpassen = observer((props) => {\n const { t, i18n } = useTranslation();\n const { id } = props.match.params;\n const [file, setFile] = useState({});\n const [loading, setLoading] = useState(true);\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n\n useEffect(() => {\n api.get(\"/file/\" + id).then((response) => {\n setFile(response.data.file);\n setLoading(false);\n });\n }, []);\n\n if (loading) {\n return ;\n } else {\n return (\n \n \n \n \n {t(\"fileAanpassen.config\")}\n \n \n \n \n );\n }\n});\nexport default FileAanpassen;\n","import React, { useContext } from \"react\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport Global from \"../../components/styled/global\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport registrationStore from \"../../components/registrationStore\";\nimport { observer } from \"mobx-react-lite\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport GeneralInbox from \"../../components/generalInbox\";\n\nconst Inbox = observer(() => {\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n\n return (\n \n \n \n \n \n \n \n \n );\n});\n\nexport default Inbox;\n","import React, { useState, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { Line } from \"react-chartjs-2\";\nimport Card from \"../../components/styled/card\";\nimport { useTranslation } from \"react-i18next\";\n\nconst GraphCard = styled(Card)`\n width: 70%;\n box-sizing: border-box;\n padding-right: 40px;\n`;\n\nconst Select = styled.select`\n width: 20%;\n background: #FFFFFF;\n border: 1px solid #51C0CF;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n margin-bottom: 5px;\n outline: none;\n font-size: 16px;\n`\n\nconst RightSelect = styled(Select)`\n margin-left: auto;\n`\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n`\n\nconst LabelColors = [\n \"#F23539\",\n \"#F0C239\",\n \"#24AE5F\"\n]\nconst BackgroundColor = \"#51C0CF\"\nconst AxisColor = \"#545454\"\nconst Labels = {\n date: \"\",\n duration: \"ms\",\n recording: \"\",\n result: \"\",\n}\n\nconst LogboekGraph = (props) => {\n const { t, i18n } = useTranslation();\n const [results, setResults] = useState(props.myresults);\n const [xLabel, setXLabel] = useState(\"date\");\n const [yLabel, setYLabel] = useState(\"result\");\n const [dataSet, setDataSet] = useState([]);\n const [labelsArray, setLabelsArray] = useState([]);\n\n const resultProps = [\n ,\n ,\n ,\n ];\n\n const graphOptions = {\n title: {\n display: false\n },\n legend: {\n display: false\n },\n hover: {\n mode: \"index\",\n intersect: false\n },\n tooltips: {\n enabled: true,\n mode: \"index\",\n intersect: false,\n },\n defaultFontFamily: \"Raleway, sans-serif\",\n scales: {\n yAxes: [\n {\n ticks: {\n beginAtZero: true,\n callback: function(value, index, values) {\n return value + Labels[yLabel];\n }\n },\n gridLines: {\n drawOnChartArea: false\n },\n }\n ],\n xAxes: [\n {\n type: 'time',\n distribution: 'series',\n time: {\n unit: 'day',\n tooltipFormat: 'll'\n },\n gridLines: {\n drawOnChartArea: false\n },\n ticks: {\n min: labelsArray[0],\n max: labelsArray[labelsArray.length - 1]\n }\n }\n ],\n },\n plugins: {\n zoom: {\n zoom: {\n enabled: true,\n mode: 'x',\n speed: 0.05\n },\n pan: {\n enabled: true,\n mode: 'x',\n }\n }\n }\n };\n\n const [options, setOptions] = useState(graphOptions);\n\n useEffect(() => {\n setResults(props.myresults);\n }, [props.myresults]);\n\n useEffect(() => {\n updateChart();\n }, [results, xLabel, yLabel]);\n\n const updateChart = () => {\n let labels= [];\n let data= [];\n let pointBackgroundColors = [];\n\n results.forEach((taak) => {\n data.push(taak[yLabel]);\n \n let colorIndex = (taak[yLabel] - 1 < LabelColors.length) ? taak[yLabel] - 1 : 0;\n pointBackgroundColors.push(LabelColors[colorIndex]);\n\n var label = taak[xLabel] + Labels[xLabel];\n if (xLabel === \"date\"){\n const elementDate = new Date(taak[xLabel]);\n label = elementDate.toLocaleString('en');\n }\n labels.push(label);\n });\n\n const dataObject = {\n label: props.title,\n data: data,\n showLine: true,\n pointRadius: 5,\n pointHoverRadius: 10,\n pointBackgroundColor: pointBackgroundColors,\n backgroundColor: AxisColor,\n borderColor: BackgroundColor,\n hidden: false,\n fill: false\n };\n\n setDataSet([dataObject]);\n setLabelsArray(labels);\n\n var tempOptions = graphOptions;\n tempOptions.scales.xAxes[0].type = xLabel === \"date\" ? 'time' : 'category';\n tempOptions.scales.xAxes[0].ticks.min = Math.min(...labels);\n tempOptions.scales.xAxes[0].ticks.max = Math.max(...labels);\n setOptions(tempOptions);\n }\n\n const data = {\n labels: labelsArray,\n datasets: dataSet,\n };\n\n return (\n \n \n \n \n setXLabel(e.target.value)}>\n {resultProps}\n \n \n \n );\n};\n\nexport default LogboekGraph;\n","import React, { useState, useEffect, useContext } from \"react\";\nimport styled from \"styled-components\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport Global from \"../../components/styled/global\";\nimport Card from \"../../components/styled/card\";\nimport { api, recordingApi } from \"../../api\";\nimport { observer } from \"mobx-react\";\nimport registrationStore from \"../../components/registrationStore\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { PageTitle, SmallTitle, P } from \"../../components/styled/typography\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport PatientStore from \"../../components/patientStore\";\nimport LogboekGraph from \"../../components/resultsGraph/logboekGraph\";\nimport LoadSpinner from \"../../components/loadspinner\";\nimport FileSaver from \"file-saver\";\nimport { useTranslation } from \"react-i18next\";\nimport ResultsGraph from \"../../components/resultsGraph/resultsGraph\";\n\nconst ScoresTitle = styled(SmallTitle)`\n color: #545454;\n margin-top: 15px;\n font-size: 22px;\n`;\n\nconst ScoreCard = styled(Card)`\n width: 28%;\n`;\n\nconst Flex = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n`;\n\nconst OpenAnswCard = styled(Card)`\n margin-top: 20px;\n max-width: 70%;\n`;\nconst Question = styled.div`\n font-weight: bold;\n margin-bottom: 10px;\n color: #545454;\n`;\nconst Answer = styled.div`\n margin-bottom: 10px;\n max-width: 800px;\n color: #545454;\n`;\nconst Openanswertitle = styled.div`\n color: #545454;\n`;\n\nconst VideoDiv = styled.div`\n video {\n max-width: 70%;\n }\n`;\n\nconst QABlock = styled.div`\n border-bottom: 1px solid #51c0cf;\n margin-bottom: 10px;\n margin-top: 20px;\n`;\n\nconst Logboek = observer((props) => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const patientStore = useContext(PatientStore);\n const user = JSON.parse(store.user);\n const { id } = props.match.params;\n const [task, setTask] = useState({});\n const [thisAssignment, setThisAssignment] = useState([]);\n const [loading, setLoading] = useState(true);\n const [recording, setRecording] = useState();\n const [recordingLoad, setRecordingLoad] = useState(true);\n const [videoLoading, setVideoLoading] = useState(false);\n\n useEffect(() => {\n api.get(\"/completedTask/\" + id).then((response) => {\n setTask(response.data.completedTask);\n const task_id = response.data.completedTask.task_id;\n\n if (response.data.completedTask.recording) {\n setVideoLoading(true)\n getRecording(response.data.completedTask.recording);\n }\n api.get(\"user/\" + response.data.completedTask.user_id + \"/completedtasks\").then((response) => {\n for (var i = 0; i < response.data.output.length; i++) {\n for (var j = 0; j < response.data.output[i].taken.length; j++) {\n if (response.data.output[i].taken[j].task_id === task_id) {\n setThisAssignment(response.data.output[i].taken[j].results);\n setLoading(false);\n }\n }\n }\n });\n });\n }, []);\n\n const getRecording = (recording) => {\n recordingApi.get(\"/recording/\" + recording, { responseType: \"blob\" }).then(function (response) {\n setRecording(response.data);\n setRecordingLoad(false);\n setVideoLoading(false);\n });\n };\n\n return (\n \n \n \n \n \n {t(\"logboekDetail.log\")} {task.task_title}\n \n {loading ? (\n \n ) : (\n
\n \n \n {task.scores && (\n \n {t(\"logboekDetail.scores\")}\n {Object.keys(task.scores).map((key) => {\n return (\n

\n {key} : {task.scores[key]}\n

\n );\n })}\n
\n )}\n
\n {videoLoading && (\n <>\n

{t(\"logboekDetail.video\")}

\n \n \n )}\n {task.recording !== null && !recordingLoad && (\n \n

{t(\"logboekDetail.video\")}

\n \n
\n )}\n {task.scaledAnswers &&\n \n

\n {t(\"logboekDetail.scaleAnswers\")}:\n

\n
    \n {Object.keys(task.scaledAnswers).map((question) => {\n return (\n
  1. \n {question} :\n {task.scaledAnswers[question]}\n
  2. \n );\n })}\n
\n
\n }\n {task.openAnswers &&\n \n

\n {t(\"logboekDetail.openAnswers\")}:\n

\n
    \n {Object.keys(task.openAnswers).map((question) => {\n return (\n
  1. \n {question} :\n {task.openAnswers[question]}\n
  2. \n );\n })}\n
\n
\n }\n
\n )}\n {task.questions && (\n \n Oefening details\n {task.questions.map((question) => {\n return (\n \n Vraag:\n {question.question}\n Antwoorden:\n {question.answers.map((answer, index) => {\n return (\n \n poging {index + 1}: {answer}\n \n );\n })}\n \n );\n })}\n \n )}\n
\n
\n
\n );\n});\n\nexport default Logboek;\n","import React, {useState} from 'react'\nimport styled from 'styled-components'\nimport Card from './styled/card'\nimport { P } from './styled/typography'\nimport { Link } from 'react-router-dom'\nimport { FaEdit, FaTrashAlt } from \"react-icons/fa\"\nimport Button from './styled/button'\nimport TaskInAssignmentSmall from './taskInAssignmentSmall'\nimport {api} from \"../api\"\nimport { useTranslation } from \"react-i18next\"\n\nconst TemplateCard = styled(Card)`\n width: 100%;\n margin-top: 20px;\n\n @media (min-width: 980px){\n width: 49.5%;\n }\n`\n\nconst StyledLink = styled(Link)`\n text-decoration: none;\n`\n\nconst Bold = styled(P)`\n margin: 0px;\n font-weight: bold;\n font-size: 20px;\n`\n\nconst Text = styled(P)`\n margin: 0px;\n margin-top: 10px;\n`\n\nconst GreenButton = styled(Button)`\n background-color: #45AE7C;\n border-color: #45AE7C;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n margin: 3px 0px;\n width: 100%;\n \n &:hover{\n background-color: #3a9168;\n border-color: #3a9168;\n }\n`\n\nconst EditIcon = styled(FaEdit)`\n color: #FFFFFF;\n margin-right: 5px;\n font-size: 16px;\n`\n\nconst TrashIcon = styled(FaTrashAlt)`\n color: #FFFFFF;\n margin-right: 5px;\n font-size: 16px;\n`\n\nconst RedButton = styled(Button)`\n background-color: #DC393D;\n border-color: #DC393D;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n margin: 3px 0px;\n width: 100%;\n\n &:hover {\n background-color: #b02a2e;\n border-color: #b02a2e;\n }\n`\n\nconst Flex = styled.div`\n display: flex;\n justify-content: space-between;\n flex-wrap: wrap;\n`\n\nconst FlexBetween = styled(Flex)`\n justify-content: space-between;\n align-items: center;\n`\n\nconst FlexColumn = styled(Flex)`\n flex-direction: column;\n`\n\nfunction MyTemplate(props){\n const { t, i18n } = useTranslation()\n const [assignment, setAssignment] = useState(props.assignment)\n const deleteTemplate = () => {\n api.delete('/assignmentTemplate/' + assignment.id).then(\n props.update\n )\n }\n return(\n \n \n \n {t('myTemplate.assignment')}: {props.assignment.title}\n {props.assignment.description}\n \n \n \n {t('myDocument.adjust')}\n \n {t('myDocument.delete')}\n \n \n \n {props.assignment.tasks.map(task => )}\n \n \n )\n}\n\nexport default MyTemplate","import React, {useState} from \"react\"\nimport styled, { keyframes } from \"styled-components\"\nimport { Link } from 'react-router-dom'\nimport Button from '../components/styled/button'\nimport { observer } from \"mobx-react\"\nimport { P, H4 } from '../components/styled/typography'\nimport { FaTelegramPlane, FaEdit, FaTrashAlt } from \"react-icons/fa\"\nimport {api} from \"../api\"\nimport { withRouter } from \"react-router-dom\"\nimport { useTranslation } from \"react-i18next\"\n\nconst fadein = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`\n\nconst A = styled(Link)`\n text-decoration: none;\n width: 100%;\n margin: 5px 0px;\n\n @media (min-width: 980px){\n width: 49.5%;\n }\n`\n\nconst StyledLink = styled(Link)`\n text-decoration: none;\n`\n\nconst Wrapper = styled.div`\n background-color: #FFFFFF;\n box-sizing: border-box;\n width: 100%;\n padding: 20px;\n border: 1px solid #FFFFFF;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n height: auto;\n animation: ${fadein} 1s;\n\n @media(min-width: 980px){\n height: 250px;\n }\n`\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n\n @media(min-width: 980px){\n flex-direction: row;\n justify-content: space-between;\n }\n`\n\nconst Title = styled(H4)`\n margin-top: 0px;\n margin-bottom: 0px;\n word-break: break-word;\n`\n\nconst Author = styled(P)`\n font-style: italic;\n margin-top: 0px;\n margin-bottom: 0px;\n font-size: 16px;\n`\n\nconst Text = styled(P)`\n margin-top: 10px;\n margin-bottom: 0px;\n word-break: break-word;\n`\n\nconst Buttons = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n margin-top: 15px;\n\n @media(min-width: 980px){\n margin-top: 0px;\n margin-left: 10px;\n justify-content: flex-start;\n }\n`\n\nconst GreenButton = styled(Button)`\n background-color: #45AE7C;\n border-color: #45AE7C;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n margin: 3px 0px;\n width: 100%;\n\n &:hover{\n background-color: #3a9168;\n border-color: #3a9168;\n }\n`\n\nconst PublishIcon = styled(FaTelegramPlane)`\n color: #FFFFFF;\n margin-right: 5px;\n font-size: 16px;\n`\n\nconst EditIcon = styled(FaEdit)`\n color: #FFFFFF;\n margin-right: 5px;\n font-size: 16px;\n`\n\nconst TrashIcon = styled(FaTrashAlt)`\n color: #FFFFFF;\n margin-right: 5px;\n font-size: 16px;\n`\n\nconst PrimaryButton = styled(Button)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n margin: 3px 0px;\n width: 100%;\n`\n\nconst RedButton = styled(Button)`\n background-color: #DC393D;\n border-color: #DC393D;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n margin: 3px 0px;\n width: 100%;\n\n &:hover {\n background-color: #b02a2e;\n border-color: #b02a2e;\n }\n`\n\nconst Empty = styled.div`\n width: 1px;\n height: 1px;\n`\n\nconst MyDocument = observer((props) => {\n const { t, i18n } = useTranslation()\n const [document, setDocument] = useState(props.document)\n const [showComponent, setShowComponent] = useState(true)\n\n const publish = () => {\n api.put('/document/' + document.id, {published : true}).then((response) => {\n setDocument(response.data.document)\n props.flash()\n })\n }\n\n const deleteDocument = () => {\n api.delete('/document/' + document.id).then(\n props.update()\n )\n }\n\n return(\n \n \n \n
\n {document.title}\n {document.therapist_name} - {document.date_created.split(' ').slice(0, 4).join(' ')}\n {document.description}\n
\n \n {!document.published &&\n \n {t('myDocument.publish')}\n \n }\n \n \n {t('myDocument.adjust')}\n \n \n \n {t('myDocument.delete')}\n \n \n
\n
\n
\n )\n})\n\nexport default withRouter(MyDocument)","import React, { useState, useEffect, useContext } from \"react\";\nimport styled from \"styled-components\";\nimport { Link } from \"react-router-dom\";\nimport MyDocument from \"../myDocument\";\nimport registrationStore from \"../registrationStore\";\nimport { observer } from \"mobx-react\";\nimport { useTranslation } from \"react-i18next\";\nimport Filter from \"../filterComponents/filter\";\nimport { api } from \"../../api\";\nimport { SmallTitle, P } from \"../styled/typography\";\nimport LoadSpinner from \"../loadspinner\";\nimport { FaArrowLeft, FaArrowRight } from \"react-icons/fa\";\nimport Pagination from \"./pagination\";\nimport LanguageStore from \"../stores/languageStore\";\n\nconst MyDocuments = styled.div`\n display: flex;\n flex-direction: column;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n flex-wrap: wrap;\n align-items: stretch;\n }\n`;\n\nconst PageNumber = styled(P)`\n margin: 0px 7px;\n display: inlne;\n cursor: pointer;\n outline: none;\n\n &.active {\n color: white;\n background-color: #51c0cf;\n border: 1px solid #51c0cf;\n padding: 2px 5px 4px 5px;\n border-radius: 30px;\n }\n\n @media (min-width: 980%) {\n margin: 0px 3px;\n }\n`;\n\nconst SelectFlex = styled.div`\n display: flex;\n align-items: center;\n width: 100%;\n`;\n\nconst OwnDocuments = observer((props) => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [loading, setLoading] = useState(true);\n const [documents, setDocuments] = useState([]);\n const [pagination, setPagination] = useState({\n start: 1,\n end: 12,\n });\n const [totalPages, setTotalPages] = useState();\n const [currentPage, setCurrentPage] = useState(1);\n const langStore = useContext(LanguageStore);\n const [filters, setFilters] = useState({\n title: \"\",\n language: langStore.getLanguage(i18n.language),\n discipline: user.speciality,\n subdiscipline: \"\",\n tags: []\n });\n\n\n function getFilterResults(data) {\n setFilters(data);\n resetPagination();\n }\n\n function resetPagination() {\n setPagination({\n start: 1,\n end: 12,\n });\n setCurrentPage(1);\n }\n\n function getDocuments() {\n setLoading(true);\n const params = {\n title: filters.title,\n language: filters.language,\n discipline: filters.discipline,\n subdiscipline: filters.subdiscipline,\n start: pagination.start,\n end: pagination.end,\n };\n api.get((user.admin ? \"admin/documents\" : (props.public ? \"/documents\" : \"/documents/\" + props.public_id)), {\n params: params,\n }).then((response) => {\n setDocuments(response.data.Documents);\n setTotalPages(Math.ceil(response.data.total / 12));\n setLoading(false);\n });\n }\n\n useEffect(() => {\n getDocuments();\n }, [filters, pagination]);\n\n useEffect(() => {\n if (props.filterData !== undefined) {\n getFilterResults(props.filterData);\n }\n }, [props.filterData]);\n\n //update\n function update() {\n setLoading(true);\n setTimeout(() => {\n getDocuments();\n }, 2500);\n };\n\n //pagination\n function handlePageChange(dir) {\n setPagination({\n start: pagination.start + 12 * dir,\n end: pagination.end + 12 * dir,\n });\n setCurrentPage(currentPage + dir);\n }\n\n function handlePageForce(page) {\n setPagination({\n start: 12 * (page - 1) + 1,\n end: page * 12,\n });\n setCurrentPage(page);\n };\n\n return (<>\n \n getFilterResults(data)} />\n \n \n {loading ? (\n \n ) : documents.length > 0 ? ( documents.map((document) => {\n return (\n \n );\n })\n ) : (\n
{t(\"materiaalAanmaken.noDocs\")}
\n )}\n\n {totalPages ? (\n handlePageChange(1)}\n prevFunction={() => handlePageChange(-1)}\n totalPages={totalPages}\n currentPage={currentPage}\n pageForce={handlePageForce}\n />\n ) : (\n <>\n )}\n
\n )\n});\n\nexport default OwnDocuments;","import React, {useState} from \"react\"\nimport styled, { keyframes } from \"styled-components\"\nimport { Link } from 'react-router-dom'\nimport Button from '../components/styled/button'\nimport { observer } from \"mobx-react\"\nimport { P, H4 } from '../components/styled/typography'\nimport { FaTelegramPlane, FaEdit, FaTrashAlt } from \"react-icons/fa\"\nimport {api} from \"../api\"\nimport { withRouter } from \"react-router-dom\"\nimport { useTranslation } from \"react-i18next\"\n\nconst fadein = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`\n\nconst A = styled(Link)`\n text-decoration: none;\n width: 100%;\n margin: 5px 0px;\n\n @media (min-width: 980px){\n width: 49.5%;\n }\n`\n\nconst StyledLink = styled(Link)`\n text-decoration: none;\n`\n\nconst Wrapper = styled.div`\n background-color: #FFFFFF;\n box-sizing: border-box;\n width: 100%;\n padding: 20px;\n border: 1px solid #FFFFFF;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n height: auto;\n animation: ${fadein} 1s;\n\n @media(min-width: 980px){\n height: 250px;\n }\n`\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n\n @media(min-width: 980px){\n flex-direction: row;\n justify-content: space-between;\n }\n`\n\nconst Title = styled(H4)`\n margin-top: 0px;\n margin-bottom: 0px;\n word-break: break-word;\n`\n\nconst Author = styled(P)`\n font-style: italic;\n margin-top: 0px;\n margin-bottom: 0px;\n font-size: 16px;\n`\n\nconst Text = styled(P)`\n margin-top: 10px;\n margin-bottom: 0px;\n word-break: break-word;\n`\n\nconst Buttons = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n margin-top: 15px;\n\n @media(min-width: 980px){\n margin-top: 0px;\n margin-left: 10px;\n justify-content: flex-start;\n }\n`\n\nconst GreenButton = styled(Button)`\n background-color: #45AE7C;\n border-color: #45AE7C;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n margin: 3px 0px;\n width: 100%;\n\n &:hover{\n background-color: #3a9168;\n border-color: #3a9168;\n }\n`\n\nconst PublishIcon = styled(FaTelegramPlane)`\n color: #FFFFFF;\n margin-right: 5px;\n font-size: 16px;\n`\n\nconst EditIcon = styled(FaEdit)`\n color: #FFFFFF;\n margin-right: 5px;\n font-size: 16px;\n`\n\nconst TrashIcon = styled(FaTrashAlt)`\n color: #FFFFFF;\n margin-right: 5px;\n font-size: 16px;\n`\n\nconst PrimaryButton = styled(Button)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n margin: 3px 0px;\n width: 100%;\n`\n\nconst RedButton = styled(Button)`\n background-color: #DC393D;\n border-color: #DC393D;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n margin: 3px 0px;\n width: 100%;\n\n &:hover {\n background-color: #b02a2e;\n border-color: #b02a2e;\n }\n`\n\nconst Empty = styled.div`\n width: 1px;\n height: 1px;\n`\n\nconst TagWrapper = styled.div`\n display: flex;\n flex-wrap: wrap;\n margin-bottom: 15px;\n`;\n\nconst Tag = styled.div`\n background-color: #51c0cf;\n border: 1px solid #51c0cf;\n border-radius: 5px;\n margin-right: 5px;\n margin-top: 5px;\n padding: 3px 10px;\n\n @media (min-width: 1400) {\n padding: 5px 15px;\n margin-right: 10px;\n }\n`;\n\nconst TagText = styled(P)`\n color: white;\n margin: 0px;\n font-size: 15px;\n\n @media (min-width: 1400px) {\n font-size: 18px;\n }\n`;\n\nconst MyMedia = observer((props) => {\n const { t, i18n } = useTranslation()\n const [media, setMedia] = useState(props.media)\n\n const publish = () => {\n api.put('/file/' + media.id, {published : true}).then((response) => {\n setMedia(response.data.file)\n props.flash()\n })\n }\n\n const deleteMedia = () => {\n api.delete('/file/' + media.id).then(\n props.update()\n )\n }\n\n return(\n \n \n \n
\n \n {media.tags &&\n media.tags.map((tag) => {\n return (\n <>\n {tag.name !== \"\" && (\n \n { t(tag.name)}\n \n )}\n \n );\n })}\n \n {media.name}\n {media.therapist_name} - {media.date_created.split(' ').slice(0, 4).join(' ')}\n {media.description}\n
\n \n {!media.published &&\n {t('myMedia.publish')}\n }\n {t('myMedia.adjust')}\n {t('myMedia.delete')}\n \n
\n
\n
\n )\n})\n\nexport default withRouter(MyMedia)","import React, { useState, useEffect, useContext } from \"react\";\nimport styled from \"styled-components\";\nimport { Link } from \"react-router-dom\";\nimport MyMedia from \"../myMedia\";\nimport registrationStore from \"../registrationStore\";\nimport { observer } from \"mobx-react\";\nimport { useTranslation } from \"react-i18next\";\nimport Filter from \"../filterComponents/filter\";\nimport { api } from \"../../api\";\nimport { SmallTitle, P } from \"../styled/typography\";\nimport LoadSpinner from \"../loadspinner\";\nimport { FaArrowLeft, FaArrowRight } from \"react-icons/fa\";\nimport Pagination from \"./pagination\";\nimport LanguageStore from \"../stores/languageStore\";\n\nconst MyMediaWrapper = styled.div`\n display: flex;\n flex-direction: column;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n flex-wrap: wrap;\n align-items: stretch;\n }\n`;\n\nconst PageNumber = styled(P)`\n margin: 0px 7px;\n display: inlne;\n cursor: pointer;\n outline: none;\n\n &.active {\n color: white;\n background-color: #51c0cf;\n border: 1px solid #51c0cf;\n padding: 2px 5px 4px 5px;\n border-radius: 30px;\n }\n\n @media (min-width: 980%) {\n margin: 0px 3px;\n }\n`;\n\nconst SelectFlex = styled.div`\n display: flex;\n align-items: center;\n width: 100%;\n`;\n\nconst OwnMedia = observer((props) => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [loading, setLoading] = useState(true);\n const [media, setMedia] = useState([]);\n const [pagination, setPagination] = useState({\n start: 1,\n end: 12,\n });\n const [totalPages, setTotalPages] = useState();\n const [currentPage, setCurrentPage] = useState(1);\n const langStore = useContext(LanguageStore);\n const [filters, setFilters] = useState({\n title: \"\",\n language: langStore.getLanguage(i18n.language),\n tags: [],\n });\n\n function getFilterResults(data) {\n setFilters(data);\n resetPagination();\n }\n\n function resetPagination() {\n setPagination({\n start: 1,\n end: 12,\n });\n setCurrentPage(1);\n }\n\n function getDocuments() {\n setLoading(true);\n const params = {\n name: filters.title,\n language: filters.language,\n tags: filters.tags,\n start: pagination.start,\n end: pagination.end,\n };\n api.get(user.admin ? \"admin/files\" : \"/files/\" + props.public_id, {\n params: params,\n }).then((response) => {\n setMedia(response.data.Files);\n setTotalPages(Math.ceil(response.data.total / 12));\n setLoading(false);\n });\n }\n\n useEffect(() => {\n getDocuments();\n }, [filters, pagination]);\n\n useEffect(() => {\n if (props.filterData !== undefined) {\n getFilterResults(props.filterData);\n }\n }, [props.filterData]);\n\n //update\n function update() {\n setLoading(true);\n setTimeout(() => {\n getDocuments();\n }, 2500);\n };\n\n //pagination\n function handlePageChange(dir) {\n setPagination({\n start: pagination.start + 12 * dir,\n end: pagination.end + 12 * dir,\n });\n setCurrentPage(currentPage + dir);\n }\n\n function handlePageForce(page) {\n setPagination({\n start: 12 * (page - 1) + 1,\n end: page * 12,\n });\n setCurrentPage(page);\n };\n\n return (<>\n \n getFilterResults(data)} />\n \n \n {loading ? (\n \n ) : media.length > 0 ? (\n media.map((mediaFile) => {\n return (\n \n );\n })\n ) : (\n
{t(\"materiaalAanmaken.noMedia\")}
\n )}\n\n {totalPages ? (\n handlePageChange(1)}\n prevFunction={() => handlePageChange(-1)}\n totalPages={totalPages}\n currentPage={currentPage}\n pageForce={handlePageForce}\n />\n ) : (\n <>\n )}\n
\n )\n});\n\nexport default OwnMedia;","import React, {useState} from \"react\"\nimport styled, { keyframes } from \"styled-components\"\nimport { Link } from 'react-router-dom'\nimport Button from '../components/styled/button'\nimport { observer } from \"mobx-react\"\nimport { P, H4 } from '../components/styled/typography'\nimport { FaTelegramPlane, FaEdit, FaTrashAlt } from \"react-icons/fa\"\nimport {api} from \"../api\"\nimport { withRouter } from \"react-router-dom\"\nimport { useTranslation } from \"react-i18next\"\n\nconst fadein = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`\n\nconst A = styled(Link)`\n text-decoration: none;\n width: 100%;\n margin: 5px 0px;\n\n @media (min-width: 980px){\n width: 49.5%;\n }\n`\n\nconst StyledLink = styled(Link)`\n text-decoration: none;\n`\n\nconst Wrapper = styled.div`\n background-color: #FFFFFF;\n box-sizing: border-box;\n width: 100%;\n padding: 20px;\n border: 1px solid #FFFFFF;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n height: auto;\n animation: ${fadein} 1s;\n\n @media(min-width: 980px){\n height: 250px;\n }\n`\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n\n @media(min-width: 980px){\n flex-direction: row;\n justify-content: space-between;\n }\n`\n\nconst Title = styled(H4)`\n margin-top: 0px;\n margin-bottom: 0px;\n word-break: break-word;\n`\n\nconst Author = styled(P)`\n font-style: italic;\n margin-top: 0px;\n margin-bottom: 0px;\n font-size: 16px;\n`\n\nconst Text = styled(P)`\n margin-top: 10px;\n margin-bottom: 0px;\n word-break: break-word;\n`\n\nconst Buttons = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n margin-top: 15px;\n\n @media(min-width: 980px){\n margin-top: 0px;\n margin-left: 10px;\n justify-content: flex-start;\n }\n`\n\nconst GreenButton = styled(Button)`\n background-color: #45AE7C;\n border-color: #45AE7C;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n margin: 3px 0px;\n width: 100%;\n\n &:hover{\n background-color: #3a9168;\n border-color: #3a9168;\n }\n`\n\nconst PublishIcon = styled(FaTelegramPlane)`\n color: #FFFFFF;\n margin-right: 5px;\n font-size: 16px;\n`\n\nconst EditIcon = styled(FaEdit)`\n color: #FFFFFF;\n margin-right: 5px;\n font-size: 16px;\n`\n\nconst TrashIcon = styled(FaTrashAlt)`\n color: #FFFFFF;\n margin-right: 5px;\n font-size: 16px;\n`\n\nconst PrimaryButton = styled(Button)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n margin: 3px 0px;\n width: 100%;\n`\n\nconst RedButton = styled(Button)`\n background-color: #DC393D;\n border-color: #DC393D;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n margin: 3px 0px;\n width: 100%;\n\n &:hover {\n background-color: #b02a2e;\n border-color: #b02a2e;\n }\n`\n\nconst Empty = styled.div`\n width: 1px;\n height: 1px;\n`\n\nconst TagWrapper = styled.div`\n display: flex;\n flex-wrap: wrap;\n margin-bottom: 15px;\n`;\n\nconst Tag = styled.div`\n background-color: #51c0cf;\n border: 1px solid #51c0cf;\n border-radius: 5px;\n margin-right: 5px;\n margin-top: 5px;\n padding: 3px 10px;\n\n @media (min-width: 1400) {\n padding: 5px 15px;\n margin-right: 10px;\n }\n`;\n\nconst TagText = styled(P)`\n color: white;\n margin: 0px;\n font-size: 15px;\n\n @media (min-width: 1400px) {\n font-size: 18px;\n }\n`;\n\nconst MyExercise = observer((props) => {\n const { t, i18n } = useTranslation()\n const [exercise, setExercise] = useState(props.exercise)\n\n return(\n \n \n \n
\n \n {exercise.tags &&\n exercise.tags.map((tag) => {\n return (\n <>\n {tag.name !== \"\" && (\n \n { t(tag.name)}\n \n )}\n \n );\n })}\n \n {exercise.title}\n {exercise.username_private} - {exercise.created_at.split(' ').slice(0, 4).join(' ')}\n
\n
\n \n {t('myMedia.adjust')}\n \n \n \n
\n )\n})\n\nexport default withRouter(MyExercise)","import React, { useState, useEffect, useContext } from \"react\";\nimport { observer } from \"mobx-react\";\nimport Pagination from \"./pagination\";\nimport LanguageStore from \"../stores/languageStore\";\nimport registrationStore from \"../registrationStore\";\nimport { useTranslation } from \"react-i18next\";\nimport Filter from \"../filterComponents/filter\";\nimport { api } from \"../../api\";\nimport LoadSpinner from \"../loadspinner\";\nimport styled from \"styled-components\";\nimport LibraryCard from \"./libraryCard\";\nimport MyExercise from \"../myExercise\";\n\nconst MyExercises = styled.div`\n display: flex;\n flex-direction: column;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n flex-wrap: wrap;\n align-items: stretch;\n }\n`;\n\nconst SelectFlex = styled.div`\n display: flex;\n align-items: center;\n width: 100%;\n`;\n\nconst OwnExercises = observer((props) => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [loading, setLoading] = useState(true);\n const [exercises, setExercises] = useState([]);\n const [pagination, setPagination] = useState({\n start: 1,\n end: 12,\n });\n const [totalPages, setTotalPages] = useState();\n const [currentPage, setCurrentPage] = useState(1);\n const langStore = useContext(LanguageStore);\n const [filters, setFilters] = useState({\n title: \"\",\n language: langStore.getLanguage(i18n.language),\n discipline: user.speciality,\n subdiscipline: \"\",\n });\n\n function getFilterResults(data) {\n setFilters(data);\n resetPagination();\n }\n\n function resetPagination() {\n setPagination({\n start: 1,\n end: 12,\n });\n setCurrentPage(1);\n }\n\n function getExercises() {\n setLoading(true);\n const params = {\n private: false,\n title: filters.title,\n language: filters.language,\n discipline: filters.discipline,\n subdiscipline: filters.subdiscipline,\n start: pagination.start,\n end: pagination.end,\n };\n api.get(\"/exercises/\" + props.public_id, {\n params: params,\n }).then((response) => {\n setExercises(response.data.output);\n setTotalPages(Math.ceil(response.data.total / 12));\n setLoading(false);\n });\n }\n\n\n useEffect(() => {\n getExercises();\n }, [filters, pagination]);\n\n useEffect(() => {\n if (props.filterData !== undefined) {\n getFilterResults(props.filterData);\n }\n }, [props.filterData]);\n\n function handlePageChange(dir) {\n setPagination({\n start: pagination.start + 12 * dir,\n end: pagination.end + 12 * dir,\n });\n setCurrentPage(currentPage + dir);\n }\n\n function handlePageForce(page) {\n setPagination({\n start: 12 * (page - 1) + 1,\n end: page * 12,\n });\n setCurrentPage(page);\n };\n\n return (\n <>\n \n getFilterResults(data)} />\n \n \n {loading ? (\n \n ) : exercises.length > 0 ? ( exercises.map((exercise) => {\n return (\n \n );\n })\n ) : (\n
{t(\"materiaalAanmaken.noExercises\")}
\n )}\n {totalPages ? (\n handlePageChange(1)}\n prevFunction={() => handlePageChange(-1)}\n totalPages={totalPages}\n currentPage={currentPage}\n pageForce={handlePageForce}\n />\n ) : (\n <>\n )}\n
\n \n )\n});\n\nexport default OwnExercises;","import React, { useState, useEffect, useContext } from \"react\";\nimport styled from \"styled-components\";\nimport { Link } from \"react-router-dom\";\nimport { observer } from \"mobx-react\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport Global from \"../../components/styled/global\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { PageTitle, SmallTitle, P } from \"../../components/styled/typography\";\nimport {\n FaAccessibleIcon, FaBookOpen,\n FaBriefcaseMedical, FaBuffer, FaEdit,\n FaFileArchive, FaFileImage,\n FaFileSignature,\n FaFolderOpen, FaPaintBrush, FaPaste, FaPhotoVideo,\n FaPlus\n} from \"react-icons/fa\";\nimport registrationStore from \"../../components/registrationStore\";\nimport { api } from \"../../api\";\nimport MyTemplate from \"../../components/myTemplate\";\nimport LoadSpinner from \"../../components/loadspinner\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport Flash from \"../../components/styled/flashMessage\";\nimport { useTranslation } from \"react-i18next\";\nimport qs from \"qs\";\nimport Button from \"../../components/styled/button\";\nimport OwnDocuments from \"../../components/libraryComponents/ownDocuments\";\nimport OwnMedia from \"../../components/libraryComponents/ownMedia\";\nimport OwnExercises from \"../../components/libraryComponents/ownExercises\";\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n\n @media (min-width: 980px) {\n flex-direction: row;\n }\n`;\n\nconst SelectFlex = styled.div`\n display: flex;\n align-items: center;\n width: 100%;\n`;\n\nconst MyDocuments = styled.div`\n display: flex;\n flex-direction: column;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n flex-wrap: wrap;\n align-items: stretch;\n }\n`;\n\nconst A = styled(Link)`\n text-decoration: none;\n`;\n\nconst CardButton = styled.div`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n display: flex;\n flex-direction: column;\n justify-content: space-evenly;\n align-items: center;\n padding: 30px;\n margin-top: 20px;\n margin-right: 20px;\n cursor: pointer;\n\n @media (min-width: 980px) {\n width: 225px;\n height: 170px;\n }\n`;\n\nconst Empty = styled.div`\n height: 20px;\n width: 20px;\n`;\n\nconst CardButtonText = styled(P)`\n margin: 0px;\n color: #51c0cf;\n text-align: center;\n padding: 0px 10px;\n`;\n\nconst Plus = styled(FaPlus)`\n font-size: 10px;\n color: #51c0cf;\n`;\n\nconst BufferIcon = styled(FaBuffer)` \n color: #51c0cf;\n font-size: 25px;\n vertical-align: middle; \n`;\n\nconst FileSignatureIcon = styled(FaFileSignature)` \n color: #51c0cf;\n font-size: 25px;\n vertical-align: middle; \n`;\n\nconst PhotoVideoIcon = styled(FaPhotoVideo)` \n color: #51c0cf;\n font-size: 25px;\n vertical-align: middle;\n padding-right: 10px;\n`;\n\nconst EditIcon = styled(FaEdit)` \n color: #51c0cf;\n font-size: 25px;\n vertical-align: middle; \n`;\n\nconst CopyPasteIcon = styled(FaPaste)`\n color: #51c0cf;\n font-size: 25px;\n vertical-align: middle;\n padding-right: 10px;\n`;\n\nconst PaintBrushIcon = styled(FaPaintBrush)`\n color: #51c0cf;\n font-size: 25px;\n vertical-align: middle;\n padding-right: 10px;\n`;\nconst MyTemplates = styled(MyDocuments)``;\n\nconst MateriaalAanmaken = observer((props) => {\n const { t, i18n } = useTranslation();\n const [assignments, setAssignments] = useState([]);\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [tempLoading, setTempLoading] = useState(true);\n const [showFlash, setShowFlash] = useState(false);\n const isRequestExSubmit = qs.parse(props.location.search, { ignoreQueryPrefix: true }).exercisecreated;\n\n useEffect(() => {\n api.get(\"/assignmentTemplates/\" + user.public_id).then((response) => {\n setAssignments(response.data.assignmentTemplates);\n setTempLoading(false);\n });\n }, []);\n\n const update = () => {\n setTempLoading(true);\n setTimeout(() => {\n api.get(\"/assignmentTemplates/\" + user.public_id).then((response) => {\n setAssignments(response.data.assignmentTemplates);\n setTempLoading(false);\n });\n }, 2500);\n };\n\n const flash = () => {\n setShowFlash(true);\n };\n\n return (\n \n \n \n \n {t(\"sidebarTherapist.material\")}\n {showFlash && {t(\"materiaalAanmaken.succ\")}}\n {isRequestExSubmit == \"true\" && {t(\"OefeningAanvragen.succ\")}}\n \n  {t(\"sidebarTherapist.smallSubText\")}\n \n \n \n \n \n \n {t(\"materiaalAanmaken.assignment\")}\n \n \n \n \n \n \n {t(\"documentForm.configure\")}\n \n \n \n \n \n \n {t(\"fileForm.configure\")}\n \n \n \n \n \n \n {t(\"materiaalAanmaken.makeExercise\")}\n \n \n \n\n

\n\n  {t(\"materiaalAanmaken.ownDocs\")}\n \n

\n  {t(\"materiaalAanmaken.temp\")}\n \n {tempLoading ? (\n \n ) : assignments.length > 0 ? (\n assignments.map((assignment) => {\n return ;\n })\n ) : (\n
{t(\"materiaalAanmaken.noTemp\")}
\n )}\n
\n

\n\n  {t(\"materiaalAanmaken.media\")}\n \n\n  {t(\"materiaalAanmaken.ownExercises\")}\n \n\n
\n
\n
\n );\n});\n\nexport default MateriaalAanmaken;\n","import React, { useState, useEffect, useContext } from \"react\";\nimport styled from \"styled-components\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport Global from \"../../components/styled/global\";\nimport { PageTitle } from \"../../components/styled/typography\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport Article from \"../../components/article\";\nimport Author from \"../../components/author\";\nimport { observer } from \"mobx-react\";\nimport registrationStore from \"../../components/registrationStore\";\nimport { api } from \"../../api\";\nimport LoadSpinner from \"../../components/loadspinner\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n align-items: flex-start;\n }\n`;\n\nconst MateriaalDetail = observer((props) => {\n const { t, i18n } = useTranslation();\n const [document, setDocument] = useState({});\n const { id } = props.match.params;\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n api.get(\"/document/\" + id).then((response) => {\n setDocument(response.data.document);\n setLoading(false);\n });\n }, []);\n return (\n \n \n \n \n {t(\"sidebarPatient.material\")}\n {loading ? (\n \n ) : (\n \n
\n \n \n )}\n \n \n \n );\n});\n\nexport default MateriaalDetail;\n","import React, { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport styled from \"styled-components\";\nimport Card from \"../styled/card\";\nimport { H4, P } from \"../styled/typography\";\nimport { Redirect, Link } from \"react-router-dom\";\nimport dateConverter from \"../helperComponents/dateConverter\";\n\n// Icons\nimport Image from \"../../assets/images/image.svg\";\nimport Audio from \"../../assets/images/audio.svg\";\nimport Video from \"../../assets/images/video.svg\";\nimport Unknown from \"../../assets/images/unknown.svg\";\n\nconst Wrapper = styled.div`\n width: 100%;\n margin-bottom: 15px;\n\n @media (min-width: 768px) {\n width: ${(props) => (props.mediaSelect ? \"100%\" : \"49.5%\")};\n }\n`;\n\nconst CardStyled = styled(Card)`\n height: 100%;\n cursor: pointer;\n\n &.active {\n border: 2px solid #51c0cf;\n }\n`;\n\nconst Title = styled(H4)`\n margin: 0px;\n font-size: 18px;\n margin-top: 5px;\n\n @media (min-width: 980px) {\n font-size: 20px;\n }\n`;\n\nconst Header = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n`;\n\nconst Details = styled.div`\n display: flex;\n align-items: center;\n justify-content: flex-end;\n width: 33%;\n`;\n\nconst SmallText = styled(P)`\n font-size: 16px;\n font-style: italic;\n margin: 0px;\n`;\n\nconst Icon = styled.img`\n width: 25px;\n height: 25px;\n margin-left: 15px;\n\n @media (min-width: 1200px) {\n width: 35px;\n height: 35px;\n }\n`;\n\nconst TagWrapper = styled.div`\n display: flex;\n flex-wrap: wrap;\n width: 75%;\n`;\n\nconst Tag = styled.div`\n background-color: #51c0cf;\n border: 1px solid #51c0cf;\n border-radius: 5px;\n margin-right: 5px;\n margin-top: 5px;\n padding: 3px 10px;\n\n @media (min-width: 1400) {\n padding: 5px 15px;\n margin-right: 10px;\n }\n`;\n\nconst TagText = styled(P)`\n color: white;\n margin: 0px;\n font-size: 15px;\n\n @media (min-width: 1400px) {\n font-size: 18px;\n }\n`;\n\nconst AuthorInfo = styled.div`\n display: none;\n`;\n\nfunction MediaCard(props) {\n const { t, i18n } = useTranslation();\n const [redirect, setRedirect] = useState(false);\n const type = props.media.type;\n let ActiveIcon;\n let hoverText;\n switch (type) {\n case \"image\":\n ActiveIcon = Image;\n hoverText = t(\"mediacard.image\");\n break;\n case \"audio\":\n ActiveIcon = Audio;\n hoverText = t(\"mediacard.audio\");\n break;\n case \"video\":\n ActiveIcon = Video;\n hoverText = t(\"mediacard.video\");\n break;\n default:\n ActiveIcon = Unknown;\n hoverText = t(\"mediacard.unkown\");\n break;\n }\n\n function handleCardClick(event) {\n if (props.mediaSelect) {\n var elems = document.querySelectorAll(\"#card\");\n elems.forEach.call(elems, function (el) {\n el.classList.remove(\"active\");\n });\n\n let card = event.target;\n if (event.target.type !== \"div\") {\n card = event.target.closest(\"#card\");\n }\n card.className += \" active\";\n props.callBack(props.media.id, props.media.name, type);\n } else {\n setRedirect(true);\n }\n }\n\n return (\n \n handleCardClick(e)}>\n
\n {props.media && props.media.name}\n
\n \n {dateConverter(new Date(props.media.date_created))}\n {props.media.therapist_name}\n \n \n
\n
\n {props.showDescription && {props.media.description}}\n \n {props.media.tags &&\n props.media.tags.map((tag) => {\n return (\n <>\n {tag.name !== \"\" && (\n \n {t(tag.name)}\n \n )}\n \n );\n })}\n \n
\n {redirect && }\n
\n );\n}\n\nexport default MediaCard;\n","import React, { useEffect, useState, useContext } from \"react\";\nimport styled from \"styled-components\";\nimport MediaCard from \"./mediaCard\";\nimport { api } from \"../../api\";\nimport { useTranslation } from \"react-i18next\";\nimport registrationStore from \"../registrationStore\";\nimport Pagination from \"./pagination\";\nimport LoadSpinner from \"../loadspinner\";\nimport Filter from \"../filterComponents/filter\";\nimport LanguageStore from \"../stores/languageStore\";\nimport useLocalStorage from \"../hooks/localStorage\";\n\nconst Flex = styled.div`\n display: flex;\n justify-content: space-between;\n flex-wrap: wrap;\n align-items: stretch;\n`;\n\nconst Exercises = styled.div`\n width: 100%;\n margin-top: 10px;\n`;\n\nconst ExerciseWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n`;\n\nfunction Media(props) {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [loading, setLoading] = useState(true);\n const [mediaToDisplay, setMediaToDisplay] = useState([]);\n const [pagination, setPagination] = useState({\n start: 1,\n end: 12,\n });\n const [totalPages, setTotalPages] = useState();\n const [currentPage, setCurrentPage] = useState(1);\n const langStore = useContext(LanguageStore);\n const [filters, setFilters] = useLocalStorage(props.tag + 'FilterData', {\n title: \"\",\n language: langStore.getLanguage(i18n.language),\n discipline: user.speciality,\n subdiscipline: \"\",\n tags: []\n });\n\n function getFilterResults(data) {\n setFilters(data);\n resetPagination();\n }\n\n function resetPagination() {\n setPagination({\n start: 1,\n end: 12,\n });\n setCurrentPage(1);\n }\n\n function getMedia() {\n setLoading(true);\n const params = {\n name: filters.title,\n language: filters.language,\n tags: filters.tags,\n start: pagination.start,\n end: pagination.end,\n public: true\n };\n api.get(user.admin ? \"/admin/files\" : \"/files/\" + props.public_id, {\n params: params,\n }).then((response) => {\n setMediaToDisplay(response.data.Files);\n setTotalPages(Math.ceil(response.data.total / 12));\n setLoading(false);\n });\n }\n\n useEffect(() => {\n getMedia();\n }, [filters, pagination, props.refresh]);\n\n useEffect(() => {\n if (props.filterData !== undefined) {\n getFilterResults(props.filterData);\n }\n }, [props.filterData]);\n\n //pagination\n function nextPage() {\n setPagination({\n start: pagination.start + 12,\n end: pagination.end + 12,\n });\n setCurrentPage(currentPage + 1);\n }\n\n function prevPage() {\n setPagination({\n start: pagination.start - 12,\n end: pagination.end - 12,\n });\n setCurrentPage(currentPage - 1);\n }\n\n function handlePageForce(page) {\n setPagination({\n start: 12 * (page - 1) + 1,\n end: page * 12,\n });\n setCurrentPage(page);\n }\n\n return (\n <>\n
\n {!props.mediaSelect && getFilterResults(data)} small={props.small} />}\n {loading ? (\n \n ) : (\n \n \n \n {mediaToDisplay &&\n mediaToDisplay.map((media, index) => {\n return (\n props.selectCallback(id, title, type))}\n mediaSelect={props.mediaSelect}\n showDescription={props.showDescription}\n />\n );\n })}\n \n \n {totalPages ? (\n handlePageForce(page)}\n />\n ) : (\n
{t(\"materiaalRaadplegen.noMedia\")}
\n )}\n
\n )}\n
\n \n );\n}\n\nexport default Media;\n","import React, { useEffect, useState, useContext } from \"react\";\nimport styled from \"styled-components\";\nimport Filter from \"../filterComponents/filter\";\nimport LibraryCard from \"./libraryCard\";\nimport { useTranslation } from \"react-i18next\";\nimport { api } from \"../../api\";\nimport LoadSpinner from \"../loadspinner\";\nimport Pagination from \"./pagination\";\nimport LanguageStore from \"../stores/languageStore\";\nimport MediaCard from \"./mediaCard\";\nimport useLocalStorage from \"../hooks/localStorage\";\n\n\nconst Flex = styled.div`\n display: flex;\n justify-content: space-between;\n flex-wrap: wrap;\n align-items: stretch;\n`;\n\nconst Exercises = styled.div`\n width: 100%;\n margin-top: 10px;\n`;\n\nconst ExerciseWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n`;\n\nfunction AdminList(props) {\n const { t, i18n } = useTranslation();\n const [loading, setLoading] = useState(true);\n const [exercisesToDisplay, setExercisesToDisplay] = useState([]);\n const [documentsToDisplay, setDocumentsToDisplay] = useState([]);\n const [mediaToDisplay, setMediaToDisplay] = useState([]);\n const [pagination, setPagination] = useState({\n start: 1,\n end: 12,\n });\n const [currentPage, setCurrentPage] = useState(1);\n const [totalPages, setTotalPages] = useState(0);\n const langStore = useContext(LanguageStore);\n const [filters, setFilters] = useLocalStorage(props.tag + 'FilterData', {\n title: \"\",\n language: langStore.getLanguage(i18n.language),\n tags: [],\n discipline: \"\",\n subdiscipline: \"\"\n });\n\n function getMedia() {\n const params = {\n name: filters.title,\n language: filters.language,\n tags: filters.tags,\n start: pagination.start,\n end: pagination.end,\n public: true\n }\n return api.get(\"/admin/files\", {params: params});\n }\n\n function getMaterial() {\n const params = {\n title: filters.title,\n language: filters.language,\n discipline: filters.discipline,\n subdiscipline: filters.subdiscipline,\n start: pagination.start,\n end: pagination.end,\n onlyDocs: false\n };\n return props.public ? api.get(\"/material\", {params: params}) : api.get(\"/admin/material\", {params: params})\n }\n\n function getMediaAndMaterial() {\n setLoading(true);\n Promise.all([\n getMedia(),\n getMaterial()\n ]).then(([media, material]) => {\n setMediaToDisplay(media.data.Files);\n setExercisesToDisplay(Array.from(material.data.output[0]));\n setDocumentsToDisplay(Array.from(material.data.output[1]));\n let total = Math.ceil(media.data.total / 12);\n total += Math.ceil(material.data.total / 12);\n setTotalPages(total);\n setLoading(false);\n });\n }\n\n useEffect(() => {\n getMediaAndMaterial();\n }, [filters, pagination, props.refresh])\n\n useEffect(() => {\n if (props.filterData !== undefined) {\n getFilterResults(props.filterData);\n }\n }, [props.filterData]);\n\n function getFilterResults(data) {\n setFilters(data);\n resetPagination();\n }\n\n function resetPagination() {\n setPagination({\n start: 1,\n end: 12,\n });\n setCurrentPage(1);\n }\n\n function handlePageChange(dir) {\n setPagination({\n start: pagination.start + 12 * dir,\n end: pagination.end + 12 * dir,\n });\n setCurrentPage(currentPage + dir);\n }\n\n function handlePageForce(page) {\n setPagination({\n start: 12 * (page - 1) + 1,\n end: page * 12,\n });\n setCurrentPage(page);\n }\n\n return (\n <>\n
\n getFilterResults(data)} small={props.small} />\n {loading ? (\n \n ) : (\n \n \n \n {exercisesToDisplay &&\n exercisesToDisplay.map((material) => {\n return ( props.selectCallback(id, title, type))\n }\n />\n );\n })}\n {documentsToDisplay &&\n documentsToDisplay.map((material) => {\n return ( props.selectCallback(id, title, type))\n }\n />\n );\n })}\n {mediaToDisplay &&\n mediaToDisplay.map((media, index) => {\n return (\n props.selectCallback(id, title, type))}\n mediaSelect={props.mediaSelect}\n showDescription={props.showDescription}\n />\n );\n })}\n \n \n {totalPages ? (\n handlePageChange(1)}\n prevFunction={() => handlePageChange(-1)}\n totalPages={totalPages}\n currentPage={currentPage}\n pageForce={handlePageForce}\n />\n ) : (\n
{t(\"materiaalRaadplegen.noMaterial\")}
\n )}\n
\n )}\n
\n \n );\n}\n\nexport default AdminList;","import React, { useContext } from \"react\";\nimport styled from \"styled-components\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport Global from \"../../components/styled/global\";\nimport { PageTitle, SmallTitle, P } from \"../../components/styled/typography\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { observer } from \"mobx-react\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport registrationStore from \"../../components/registrationStore\";\nimport { useTranslation } from \"react-i18next\";\nimport Material from \"../../components/libraryComponents/material\";\nimport Media from \"../../components/libraryComponents/media\";\nimport AdminList from \"../../components/libraryComponents/adminList\";\n\nconst SelectFlex = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst MateriaalRaadplegen = observer(() => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n\n return (\n \n \n \n \n {t(\"materiaalRaadplegen.Title\")}\n \n {t(\"materiaalRaadplegen.publ\")}\n \n \n \n {t(\"materiaalRaadplegen.priv\")}\n \n \n \n {t(\"materiaalRaadplegen.media\")}\n \n \n { user.admin && (\n <>\n \n {t(\"materiaalRaadplegen.admin.private\")}\n \n \n \n )}\n \n \n \n );\n});\n\nexport default MateriaalRaadplegen;\n","import { api } from \"../../api\";\nimport { uuid } from \"uuidv4\";\nimport dateConverter from \"./dateConverter\";\n\nexport default async function createBertie(therapist_id, name = \"Bertie\") {\n const dummyUser = {\n email: `${uuid()}@gmail.com`,\n password: \"!Ya7:W6CD rechter hemiparese + afasie van Broca.\",\n therapyPlan: `\n 1)\tVoorstel Aanpak: Behandelen op (functie)niveau is gericht op herstel van de taalfuncties: visueel en auditief semantische therapie.-> training woordenschat, woordvormen, ritmisch lezen\n 2)\tDe behandeling op activiteiten- en participatieniveau gericht op het omgaan met de beperkingen en het verminderen van de gevolgen van de afasie op het persoonlijke leven van de cliënt en diens omgeving: -> taalzakboek, itemspecifieke en situatiespecifieke training`,\n paramedicalDiagnosis: `vloeiendheidsstoornis, woordvindingsstoornis, deleties, substituties zowel in spreken als schrijven (+ re hemiparese!). Mr spreekt in telegramstijl + begripsstoornis bij toenemende complexiteit\n Bewust van het probleem -> maakt zich vaak boos. \n Re hemiplegie\n `,\n helpRequest: `Dd 15 januari: verwijzing via neuroloog \n Vorig weekend opname op spoed omwille van verlamming rechter arm en been en spraakstoornissen. -> NMR: infarct li insula. Nu op de kamer. Opstart kine & logo\n Patiënt Wil zelfstandig zijn \n -> 1) herstel: communicatie & spraak herstel / optimaliseren tav directe omgeving en in 2e instantie derden \n -> 2) ondersteuning`,\n history: \"Nooit echt ziek geweest, wel altijd stress, roken 30 py, Bourgondisch leven zeker op zakenreis\",\n personality: `Man, 74jaar\n Beroep: gepensioneerd Burgerlijk Ingenieur, internationaal bedrijf voor klimatisatie\n Hobby’s: architectuur, tuinieren \n Persoonlijkheid: rustig en berekend, vaak op zichzelf, controlefreak. Stressgevoelig. Maakt zich boos (frustratie) door huidig communicatieprobleem`,\n };\n\n let patient = await api.post(\"/user\", dummyUser);\n let patientLink = await api.post(`/linkPatient/${patient.data.id}`, { therapist_id: therapist_id });\n let traject = await api.post(\"/traject\", {\n user_id: patient.data.id,\n therapist_id: therapist_id,\n title: \"Traject\",\n });\n api.patch(`/user/details/${patient.data.id}`, dummyDetails);\n}\n\nexport async function createBertieDysfonie(therapist_id, name) {\n const dummyUser = {\n email: `${uuid()}@gmail.com`,\n password: \"!Ya7:W6CD ademhalingstraining, adductie- en stootoefening, anterieure klankprojectie. Indien onvolledig resultaat: opnieuw doorverwijzen voor fonochirurgie (medialisatie)\n 2) Participatie & activiteit -> geen les in grote ruimtes gedurende 1maand (evtl vervangen door admin)\n 10/2 eerste sessie: start AH/Houding/Relaxatie`,\n paramedicalDiagnosis: `25/01:\n Hoog thoracaal ademhalingspatroon \n Verkorte zinslengte\n Spreektempo is snel, \n spreekt licht hypertoon\n perceptie: G2R0B2 (A0 S1)`,\n helpRequest: `25/01: spontane aanmelding omwille van plots stemverlies, zonder aanwijzing. Wil meer draagkracht in de stem en heeft last van kortademigheid. Wil kunnen werken (leerkracht Lich Opv)`,\n history: \"Stemplooi knobbeltjes als kind, waarvoor logo. Geen heelkunde\",\n personality: `vrouw, 25j, gezond\n Beroep: leerkracht Lichamelijke Opvoeding\n Hobby: sport \n Persoonlijkheid: evenwichtig, extrovert.`,\n };\n\n let patient = await api.post(\"/user\", dummyUser);\n let patientLink = await api.post(`/linkPatient/${patient.data.id}`, { therapist_id: therapist_id });\n let traject = await api.post(\"/traject\", {\n user_id: patient.data.id,\n therapist_id: therapist_id,\n title: \"Traject\",\n });\n api.patch(`/user/details/${patient.data.id}`, dummyDetails);\n // Vragenlijsten\n api.post(\"/assignment\", {\n user_id: patient.data.id,\n therapist_id: therapist_id,\n title: \"Vragenlijst\",\n tasks: [\n {\n id: 0,\n title: \"Vocal Fatigue Index\",\n tasktype: \"dagboek\",\n task: \"70faec99-4d7d-4587-b093-e91bd94b3af9\",\n total: 1,\n dates: [{ date: new Date(), frequency: 1 }],\n description: \"\",\n },\n {\n id: 1,\n title: \"VHI volw random\",\n tasktype: \"dagboek\",\n task: \"twCbctRZNezQBHVr8mSlOv\",\n total: 1,\n dates: [{ date: new Date(), frequency: 1 }],\n description: \"\",\n },\n ],\n category: \"research_questions\",\n traject_id: traject.data.traject_id,\n });\n // Testen\n api.post(\"/assignment\", {\n user_id: patient.data.id,\n therapist_id: therapist_id,\n title: \"Testen\",\n tasks: [\n {\n id: 0,\n title: \"MFT A1\",\n tasktype: \"oefening\",\n task: \"7NXlmx58UMJLLylFtmVtWF\",\n total: 1,\n dates: [{ date: new Date(), frequency: 1 }],\n description: \"\",\n },\n {\n id: 1,\n title: \" MFT A2\",\n tasktype: \"oefening\",\n task: \"0Y00gfj9k509KTSi0cq1i0\",\n total: 1,\n dates: [{ date: new Date(), frequency: 1 }],\n description: \"\",\n },\n {\n id: 2,\n title: \" MFT A3\",\n tasktype: \"oefening\",\n task: \"0Y00gfj9k509KTSi0cq3mK\",\n total: 1,\n dates: [{ date: new Date(), frequency: 1 }],\n description: \"\",\n },\n {\n id: 3,\n title: \" S/Z met webcam\",\n tasktype: \"oefening\",\n task: \"twCbctRZNezQBHVr93YnBk\",\n total: 1,\n dates: [{ date: new Date(), frequency: 1 }],\n description: \"\",\n },\n {\n id: 4,\n title: \"aa/AA/zin\",\n tasktype: \"oefening\",\n task: \"45ebd739-b8ac-4b99-84f8-ceb4656849a5\",\n total: 1,\n dates: [{ date: new Date(), frequency: 1 }],\n description: \"\",\n },\n {\n id: 5,\n title: \"Papa en Marloes\",\n tasktype: \"oefening\",\n task: \"twCbctRZNezQBHVr93aum5\",\n total: 1,\n dates: [{ date: new Date(), frequency: 1 }],\n description: \"\",\n },\n ],\n category: \"research_tests\",\n traject_id: traject.data.traject_id,\n });\n // Behandeltraject - Bewustwording\n api.post(\"/assignment\", {\n user_id: patient.data.id,\n therapist_id: therapist_id,\n title: \"Bewustwording\",\n tasks: [\n {\n id: 0,\n title: \"hoe adem ik\",\n tasktype: \"oefening\",\n task: \"OKW8zNDllfrWZZDk9l2foo\",\n total: 1,\n dates: [{ date: new Date(), frequency: 1 }],\n description: \"\",\n },\n ],\n category: \"treatment_awareness\",\n traject_id: traject.data.traject_id,\n });\n // Behandeltraject - Training\n api.post(\"/assignment\", {\n user_id: patient.data.id,\n therapist_id: therapist_id,\n title: \"Training\",\n tasks: [\n {\n id: 0,\n title: \"ademsteun\",\n tasktype: \"stappenplan\",\n task: \"WykEogMRnpxd6DHVia5vsx\",\n total: 1,\n dates: [{ date: new Date(), frequency: 1 }],\n description: \"\",\n },\n {\n id: 1,\n title: \"stootoefening1\",\n tasktype: \"stappenplan\",\n task: \"LgFk3sbs3o1mYFx7b7aBYe\",\n total: 1,\n dates: [{ date: new Date(), frequency: 1 }],\n description: \"\",\n },\n ],\n category: \"treatment_training\",\n traject_id: traject.data.traject_id,\n });\n}\n\nexport async function createBertieDysfagie(therapist_id, name) {\n const dummyUser = {\n email: `${uuid()}@gmail.com`,\n password: \"!Ya7:W6CD tong mobiliteit, orale controle, sliktrigger, versterken farynxspieren, larynxheffing, pittigheidsarticulatie, stemplooitrilling versoepelen, klankprojectie\n 2)\tParticipatie & activiteit -> aanpassen voedingsconsistentie, hulpaccessoires (vb micro) indien nodig`,\n paramedicalDiagnosis: `Mond: Het uitsteken van de tong gebeurt niet volledig. Het lijkt alsof de tong links achteraan wat vast zit. De flap neemt teveel volume in. Verminderd bolustransport en vertraagde faryngale onset (minder gevoelige trigger?) Gebrek aan pittigheid in de articulatie. Monddroogte: +++\n Hals: litteken halsuitruiming links. Hoofdbeweeglijkheid: beperkte rotatie naar rechts (links trekt tegen). Flexie OK. Bij slikken is er een beperkte larynxheffing\n Stem: G2R1B2A1S1`,\n helpRequest: `Dd 11 jan 2021: Op doorverwijzing van de medisch oncoloog \n Kan sinds de behandeling moeilijk slikken. Monddroogte. Kan ook moeilijk koekjes eten. Moet overal veel vocht bij doen. Durft zich wel eens te verslikken bij (snel) drinken. Alles heeft een andere smaak. Wil volwaardige voeding kunnen eten & op een tempo zoals de anderen\n Ook moeilijk spreken: beperkte articulatie, De stem klinkt ook anders.`,\n history: `8 november 2019 resectie li tongbasis en reconstructie met FRFF (voorarmflap) + halsevidement voor T2N2bM0 tongbasiscarcinoma links. + 9 dec start postop radio-chemotherapie. Daarbij is vorig jaar een stuk van de linker tong weggenomen, zijn de klieren in de linker hals weggehaald en werd hij na de operatie bestraald.\n Behalve maagzweer geen specifieke antecedenten. Gebruikt regelmatig alcohol, 2E/dag en in weekend duidelijk meer. De laatste tijd stress omwille van scheiding van zijn dochter en kan dan wel meer drinken. Roken: anderhalf pakje /dag sinds 30 jaar, sinds vorig jaar gestopt. `,\n personality: `man 63 jaar\n Beroep: hogere functie in een internationale bank instelling\n Hobby’s: culinaire geneugten, vroeger nog veel gefietst\n Persoonlijkheid: altijd al een dynamisch persoon geweest, een beetje hyper, opvliegend, nerveus`,\n };\n\n let patient = await api.post(\"/user\", dummyUser);\n let patientLink = await api.post(`/linkPatient/${patient.data.id}`, { therapist_id: therapist_id });\n let traject = await api.post(\"/traject\", {\n user_id: patient.data.id,\n therapist_id: therapist_id,\n title: \"Traject\",\n });\n api.patch(`/user/details/${patient.data.id}`, dummyDetails);\n // Vragenlijsten\n api.post(\"/assignment\", {\n user_id: patient.data.id,\n therapist_id: therapist_id,\n title: \"Vragenlijst\",\n tasks: [\n {\n id: 0,\n title: \"DHI random\",\n tasktype: \"dagboek\",\n task: \"faf85eca-0575-4679-988d-6a84bcb43f0a\",\n total: 1,\n dates: [{ date: new Date(), frequency: 1 }],\n description: \"\",\n },\n {\n id: 1,\n title: \"EAT-10\",\n tasktype: \"dagboek\",\n task: \"40hntiTmjoQFohqSz2xLEw\",\n total: 1,\n dates: [{ date: new Date(), frequency: 1 }],\n description: \"\",\n },\n ],\n category: \"research_questions\",\n traject_id: traject.data.traject_id,\n });\n // Behandeltraject - Training\n api.post(\"/assignment\", {\n user_id: patient.data.id,\n therapist_id: therapist_id,\n title: \"Training\",\n tasks: [\n {\n id: 0,\n title: \"ORALMOT/lippen\",\n tasktype: \"stappenplan\",\n task: \"KGX4urdh7UF2Vlz88ybSaQ\",\n total: 1,\n dates: [{ date: new Date(), frequency: 1 }],\n description: \"\",\n },\n {\n id: 1,\n title: \"Shaker-isometrisch\",\n tasktype: \"stappenplan\",\n task: \"To8GgA5EoQcWHALXjQaYxk\",\n total: 1,\n dates: [{ date: new Date(), frequency: 1 }],\n description: \"\",\n },\n {\n id: 2,\n title: \"Shaker-isokinetisch\",\n tasktype: \"stappenplan\",\n task: \"To8GgA5EoQcWHALXjQcDYi\",\n total: 1,\n dates: [{ date: new Date(), frequency: 1 }],\n description: \"\",\n },\n {\n id: 3,\n title: \"Masako\",\n tasktype: \"stappenplan\",\n task: \"To8GgA5EoQcWHALXjQRgwS\",\n total: 1,\n dates: [{ date: new Date(), frequency: 1 }],\n description: \"\",\n },\n ],\n category: \"treatment_training\",\n traject_id: traject.data.traject_id,\n });\n}\n\nexport async function createBertieEmpty(therapist_id, name) {\n const dummyUser = {\n email: `${uuid()}@gmail.com`,\n password: \"!Ya7:W6CD\n )\n}\n\nexport default LoadSpinner","import React, { useContext, useState } from \"react\";\nimport styled from \"styled-components\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport Global from \"../../components/styled/global\";\nimport GegevensForm from \"../../components/gegevensForm\";\nimport PasswordResetForm from \"../../components/passwordResetForm\";\nimport AccountNavigation from \"../../components/accountNavigation\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { PageTitle, SmallTitle } from \"../../components/styled/typography\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport Button from \"../../components/styled/button\";\nimport registrationStore from \"../../components/registrationStore\";\nimport { observer } from \"mobx-react\";\nimport Flash from \"../../components/styled/flashMessage\";\nimport { useTranslation } from \"react-i18next\";\nimport { api } from \"../../api\";\nimport createBertie, {\n createBertieDysfonie,\n createBertieDysfagie,\n createBertieAfasie,\n createBertieEmpty\n} from \"../../components/helperComponents/createBertie\";\nimport createBertieEN from \"../../components/helperComponents/createBertieEN\";\nimport LoadSpinner from \"../../communication-module/components/external/loadspinner\";\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n margin-top: 20px;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n }\n`;\n\nconst OneThird = styled.div`\n width: 100%;\n margin-bottom: 25px;\n @media (min-width: 980px) {\n width: 62%;\n margin-bottom: 0px;\n }\n`;\n\nconst TwoThird = styled.div`\n width: 100%;\n margin-bottom: 25px;\n @media (min-width: 980px) {\n width: 33%;\n margin-bottom: 0px;\n }\n`;\n\nconst Select = styled.select`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n outline: none;\n font-size: 16px;\n margin: 10px 0px;\n width: 100%;\n`;\n\nconst Input = styled.input`\n background: #FFFFFF;\n border: 1px solid #51C0CF;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n\n ::placeholder { /* Chrome, Firefox, Opera, Safari 10.1+ */\n opacity: 1; /* Firefox */\n font-style: italic;\n }\n \n :-ms-input-placeholder { /* Internet Explorer 10-11 */\n font-style: italic;\n }\n \n ::-ms-input-placeholder { /* Microsoft Edge */\n font-style: italic;\n }\n`\n\nconst MijnAccount = observer(() => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [showFlash, setShowFlash] = useState(false);\n const [success, setSuccess] = useState(false);\n const [loading, setLoading] = useState(false);\n const [bertieType, setBertieType] = useState(\"Empty\");\n const [bertieName, setBertieName] = useState(\"Bertie\");\n\n const flash = () => {\n setShowFlash(true);\n };\n\n const createBerties = async (therapist_id) => {\n setLoading(true);\n if (i18n.language === \"nl\") {\n if (bertieType === \"Empty\") {\n await createBertieEmpty(therapist_id, bertieName);\n }else if (bertieType === \"Afasie\") {\n await createBertieAfasie(therapist_id, bertieName);\n } else if (bertieType === \"Dysfonie\") {\n await createBertieDysfonie(therapist_id, bertieName);\n } else if (bertieType === \"Dysfagie\") {\n await createBertieDysfagie(therapist_id, bertieName);\n }\n } else {\n await createBertieEmpty(therapist_id, bertieName);\n }\n setSuccess(true);\n setLoading(false);\n };\n\n const redoOnboarding = () => {\n api.put(`/user/${user.public_id}`, {\n isOnboarded: false,\n }).then((res) => {\n store.setUser(JSON.stringify(res.data.user));\n });\n };\n return (\n \n \n \n \n {t(\"sidebarPatient.acc\")}\n \n {showFlash && {t(\"mijnAccount.dataConf\")}}\n {success && Bertie werd succesvol aangemaakt}\n \n \n \n \n \n \n {t(\"mijnAccount.Rondleiding\")}\n \n Berties\n {loading ? (\n \n ) : (\n <>\n \n setBertieName(e.target?.value)} placeholder={`${bertieName}...`} />\n \n \n \n )}\n \n \n \n \n \n );\n});\n\nexport default MijnAccount;\n","import React, { useContext, useState, useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport styled from \"styled-components\";\nimport { Li, Ul } from \"../styled/list\";\nimport Button from \"../styled/button\";\nimport { H3, H4 } from \"../styled/typography\";\nimport RegistrationStore from \"../registrationStore\";\nimport TherapistIconFemale from \"../../assets/images/therapist-icon.png\";\nimport TherapistIconMale from \"../../assets/images/therapist-icon-man.png\";\nimport LoadingSpinner from \"../../components/loadspinner\";\nimport { api } from \"../../api\";\nimport MijnPlan from \"../../pages/therapeut/mijnPlan\";\nimport { PropTypes } from \"mobx-react\";\n\nconst Plan = styled.div`\n border: 1px solid #51c0cf;\n border-radius: 10px;\n width: 100%;\n margin-bottom: 15px;\n margin-top: 20px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background: #fff;\n padding-bottom: 25px;\n margin-right: 25px;\n\n @media (min-width: 980px) {\n width: 48%;\n max-width: 375px;\n margin-bottom: 0px;\n }\n`;\n\nconst PlanImage = styled.img`\n width: 100px;\n margin-top: 40px;\n`;\n\nconst Flex = styled.div`\n display: flex;\n flex-wrap: wrap;\n`;\n\nconst Price = styled(H3)`\n font-weight: 400;\n margin-top: 20px;\n margin-bottom: 0px;\n`;\n\nconst Duration = styled(H4)`\n margin-bottom: 20px;\n font-weight: 300;\n margin-top: 0px;\n`;\n\nconst Input = styled.select`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n width: 70%;\n font-size: 16px;\n`;\n\nconst SubmitButton = styled(Button)`\n margin-top: 20px;\n margin-bottom: 40px;\n padding-right: 30px;\n padding-left: 30px;\n font-size: 16px;\n width: 70%;\n`;\n\nconst A = styled.a`\n text-decoration: none;\n`;\n\nconst SubText = styled(H4)`\n margin-bottom: 25px;\n margin-top: 25px;\n color: #929292;\n text-align: center;\n font-size: 18px;\n font-weight: 300;\n`;\n\nconst TherapistPlans = ({ setValue }) => {\n const { t, i18n } = useTranslation();\n const store = useContext(RegistrationStore);\n const user = JSON.parse(store.user);\n const [loading, setLoading] = useState(false);\n const [plans, setPlans] = useState([]);\n\n useEffect(() => {\n setLoading(true);\n api.get(\"/plans\", { params: { onlyPublic: true, typeOfUser: \"Therapeut\" } }).then((res) => {\n setPlans(res.data.plans);\n setLoading(false);\n });\n }, []);\n\n const selectPlan = (id) => {\n setValue(id);\n };\n\n return loading ? (\n \n ) : (\n \n {plans.map((plan) => {\n return (\n \n \n {(plan.price / plan.period).toFixed(2) + \"€ \" + t(\"mijnPlan.perMonth\")}\n
    \n
  • {t(\"registerForm3.therapy\")}
  • \n
  • \n {t(\"registerForm3.ex\")} &
    {t(\"registerForm3.res\")}\n
  • \n
  • {t(\"registerForm3.doc\")}
  • \n
  • {t(\"registerForm3.com\")}
  • \n
\n {plan.period + \" \" + t(\"mijnPlan.months\")}\n \n
\n );\n })}\n \n \n {t(\"mijnPlan.CustomPlan\")}\n {t(\"mijnPlan.CustomPlanLenght\")}\n \n \n \n \n
\n );\n};\n\nexport default TherapistPlans;\n","import React, { useContext, useState, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport Global from \"../../components/styled/global\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { PageTitle, P } from \"../../components/styled/typography\";\nimport { Li, Ul } from \"../../components/styled/list\";\nimport { H3 } from \"../../components/styled/typography\";\nimport Button from \"../../components/styled/button\";\nimport Flash from \"../../components/styled/flashMessage\";\nimport AccountNavigation from \"../../components/accountNavigation\";\nimport TherapistIconFemale from \"../../assets/images/therapist-icon.png\";\nimport TherapistIconMale from \"../../assets/images/therapist-icon-man.png\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport registrationStore from \"../../components/registrationStore\";\nimport { observer } from \"mobx-react\";\nimport { useTranslation } from \"react-i18next\";\nimport TherapistPlans from \"../../components/checkoutComponents/therapistPlans\";\nimport CheckoutStep from \"../../components/checkoutStep\";\nimport Card from \"../../components/styled/card\";\nimport { api } from \"../../api\";\nimport qs from \"qs\";\nimport LoadingSpinner from \"../../components/loadspinner\";\n\nconst Plan = styled.div`\n border: 1px solid #51c0cf;\n border-radius: 10px;\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background-color: #ffffff;\n margin-top: 10px;\n margin-right: 20px;\n\n @media (min-width: 980px) {\n width: 375px;\n }\n`;\n\nconst PlanImage = styled.img`\n width: 100px;\n margin-top: 40px;\n`;\n\nconst Price = styled(H3)`\n font-weight: 400;\n margin-top: 20px;\n margin-bottom: 0px;\n @media (min-width: 980px) {\n font-size: 40px;\n }\n`;\n\nconst Title = styled(H3)`\n margin-top: 25px;\n`;\n\nconst TwoFACard = styled(Card)`\n margin-top: 20px;\n width: 100%;\n\n @media (min-width: 768px) {\n width: 50%;\n }\n`;\n\nconst SmallYear = styled(P)`\n margin: 0px;\n margin-top: 15px;\n color: #51c0cf;\n`;\n\nconst A = styled.a`\n color: #51c0cf;\n`;\n\nconst SubmitButton = styled(Button)`\n margin-top: 20px;\n`;\n\nconst CustomPlan = styled.div`\n background-color: #ffffff;\n border-radius: 10px;\n display: inline-block;\n border: 1px solid #51c0cf;\n`;\n\nconst PlanText = styled(P)`\n color: #545454;\n font-weight: 700;\n font-size: 18px;\n margin: 5px;\n`;\n\nconst PText = styled(P)`\n color: #545454;\n margin: 5px;\n padding: 8px;\n`;\n\nconst Flex = styled.div`\n display: flex;\n justify-content: space-between;\n margin-top: 20px;\n`;\n\nconst FlexRow = styled.div`\n display: flex;\n`;\n\nconst NewPlan = styled.div`\n margin-top: 25px;\n`;\n\nconst MijnPlan = observer((props) => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [checkoutStep, setCheckoutStep] = useState();\n const [selectedPlan, setSelectedPlan] = useState();\n const [successMessage, setSuccessMessage] = useState(false);\n const [userPlans, setUserPlans] = useState([]);\n\n const [loading, setLoading] = useState(false);\n\n const afterPayment = qs.parse(props.location.search, { ignoreQueryPrefix: true }).afterPayment;\n\n useEffect(() => {\n store.setPlan(\"Therapeut\");\n store.setPlanId(selectedPlan);\n setCheckoutStep(checkoutStep + 1);\n }, [selectedPlan]);\n\n useEffect(() => {\n if (afterPayment) {\n setSuccessMessage(true);\n setCheckoutStep(-1);\n }\n setLoading(true);\n api.get(\"/user_plans/\" + user.public_id).then((res) => {\n if (res.data.user_plans.length <= 1) {\n setCheckoutStep(1);\n }\n let plans = [];\n for (var plan of res.data.user_plans) {\n const planObj = plan;\n const planStartDate = new Date(plan.dateActive);\n const expireDate = new Date(\n planStartDate.setMonth(\n planStartDate.getMonth() +\n (plan.month_reduction ? plan.plan_period - plan.month_reduction : plan.plan_period)\n )\n );\n planObj[\"expireDate\"] = expireDate;\n plans.push(planObj);\n }\n setUserPlans(res.data.user_plans);\n setLoading(false);\n });\n }, []);\n\n return (\n \n \n \n \n {t(\"sidebarPatient.acc\")}\n \n {loading ? (\n \n ) : !user.expired ? (\n <>\n {successMessage && {t(\"mijnPlan.successMessage\")}}\n {{t(\"mijnPlan.currentPlanText\")}}\n \n {userPlans.map((plan) => {\n return (\n \n \n \n {plan.plan_period === 1 && plan.price === 0 ? \n t(\"mijnPlan.freeTrial\") : \n plan.month_reduction ? \n plan.plan_period - plan.month_reduction + \" \" + t(\"mijnPlan.months\") : \n plan.plan_period + \" \" + t(\"mijnPlan.months\")}\n \n
    \n
  • {t(\"mijnPlan.manage\")}
  • \n
  • {t(\"mijnPlan.exercise\")}
  • \n
  • {t(\"mijnPlan.lookResult\")}
  • \n
  • {t(\"mijnPlan.docs\")}
  • \n
  • {t(\"mijnPlan.videochat\")}
  • \n
\n

\n {t(\"mijnPlan.expiresOnText\") +\n \" \" +\n plan.expireDate.getDate() +\n \"/\" +\n parseInt(plan.expireDate.getMonth() + 1) +\n \"/\" +\n plan.expireDate.getFullYear()}\n

\n
\n );\n })}\n
\n \n ) : (\n {t(\"mijnPlan.previousPlanExpiredText\")}\n )}\n {checkoutStep === 1 && (\n <>\n \n {t(\"mijnPlan.newPlan\")}\n \n \n \n )}\n {checkoutStep === 2 && (\n \n {t(\"mijnPlan.newPlan\")}\n \n \n )}\n
\n
\n
\n );\n});\n\nexport default MijnPlan;\n","import { observable, action } from \"mobx\"\nimport { createContext } from \"react\";\n\nlet today = new Date()\ntoday = String(today.getDate()).padStart(2, '0') + '/' + String(today.getMonth() + 1).padStart(2, '0') + '/' + today.getFullYear()\n\nclass OpdrachtStore{\n taskObject = {\n id: \"\",\n title: \"\",\n tasktype: \"\",\n task: \"\",\n description: \"\",\n total: \"\",\n frequencyparam1: null,\n frequencyparam2: null,\n //Changes: JEN\n dates: []\n }\n\n @observable taskArray= []\n @observable oefeningen = []\n @observable selectedExercise = 0\n @observable selectedExerciseTitle = \"\"\n @observable selectedType = \"\"\n @observable titleInput = \"\"\n @observable isFinishedCreating = false;\n\n @action createObject(id, title, taskType, task, shedule, description, total = null, frequency = null, frequencyparam2 = null){\n this.taskObject.id = id\n this.taskObject.title = title\n this.taskObject.tasktype= taskType\n this.taskObject.task = task\n if (shedule !== null){\n this.taskObject.total = shedule.total\n this.taskObject.dates = shedule.dates\n } else {\n this.taskObject.total = total\n this.taskObject.frequencyparam1 = frequency\n this.taskObject.frequencyparam2 = frequencyparam2\n }\n this.taskObject.description = description\n }\n\n @action addToArray(object){\n this.taskArray.push(object)\n }\n\n @action removeFromArray(index, items){\n this.taskArray.splice(index, items)\n }\n\n @action setOefeningen(newOefeningen){\n this.oefeningen = newOefeningen\n }\n @action clearArray(){\n this.taskArray = []\n }\n @action clearTitle(){\n this.titleInput = \"\"\n }\n @action setSelectedExercise(newExercise){\n this.selectedExercise = newExercise\n }\n\n @action setSelectedExerciseTitle(newExercise){\n this.selectedExerciseTitle = newExercise\n }\n\n @action setSelectedType(newType){\n this.selectedType = newType\n }\n\n @action setTitleInput(newTitle){\n this.titleInput = newTitle\n }\n\n @action clearInputs(){\n this.titleInput = \"\"\n this.selectedExercise = 0\n this.selectedExerciseTitle = \"\"\n this.selectedType = \"\"\n }\n\n @action setIsFinishedCreating(value) {\n this.isFinishedCreating = value;\n }\n \n}\n\n\nexport const OpdrachtStoreInstance = new OpdrachtStore()\n\nexport default createContext(OpdrachtStoreInstance)","import React, { useState, useEffect, useContext, useLayoutEffect } from \"react\";\nimport { FaTimes } from \"react-icons/fa\";\nimport styled from \"styled-components\";\nimport { Formik, Form, Field } from \"formik\";\nimport Card from \"../components/styled/card\";\nimport { PageTitle, SmallTitle, P } from \"../components/styled/typography\";\nimport Flash from \"../components/styled/flashMessage\";\nimport registrationStore from \"../components/registrationStore\";\nimport LoadSpinner from \"../components/loadspinner\";\nimport { ExCard } from \"../components/styled/card\";\nimport Button from \"../components/styled/button\";\nimport { FaFilter } from \"react-icons/fa\";\nimport { NavLink } from \"react-router-dom\";\nimport { FaArrowRight, FaArrowLeft } from \"react-icons/fa\";\nimport { useTranslation } from \"react-i18next\";\nimport SearchBar from \"../components/search\";\nimport Material from \"../components/libraryComponents/material\";\nimport Media from \"../components/libraryComponents/media\";\nimport Filter from \"../components/filterComponents/filter\";\nimport LanguageStore from \"../components/stores/languageStore\";\n\nconst Overlay = styled.div`\n background-color: rgba(60, 60, 60, 0.7);\n position: fixed;\n top: 0px;\n left: 0;\n width: 100vw;\n height: 100%;\n z-index: 999;\n display: flex;\n justify-content: center;\n align-items: center;\n\n @media (min-width: 980px) {\n top: 0;\n height: 100vh;\n width: 100vw;\n }\n`;\n\nconst OverlayCard = styled(Card)`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n box-sizing: border-box;\n padding: 30px;\n height: 98%;\n width: 98%;\n position: absolute;\n z-index: 999999;\n\n @media (min-width: 980px) {\n height: 90%;\n position: relative;\n top: 0;\n z-index: 9;\n }\n`;\nconst Times = styled(FaTimes)`\n color: #545454;\n position: absolute;\n right: 20px;\n top: 20px;\n cursor: pointer;\n`;\nconst CreateAssignment = styled(SmallTitle)`\n margin: 30px 0px 10px 0px;\n`;\n\nconst ExFlex = styled.div`\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n`;\n\nconst Content = styled.div`\n width: 100%;\n`;\n\nconst Title = styled.div`\n display: inline-block;\n position: relative;\n color: #545454;\n margin-bottom: 0px;\n`;\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n }\n`;\n\nconst Third = styled.div`\n width: 100%;\n\n @media (min-width: 980px) {\n width: 33%;\n }\n`;\n\nconst TwoThird = styled.div`\n width: 100%;\n\n @media (min-width: 980px) {\n width: 66%;\n }\n`;\n\nfunction SelectionOverlay(props) {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [tempChosen, setTempChosen] = useState({});\n const langStore = useContext(LanguageStore);\n const [filterData, setFilterData] = useState({\n title: \"\",\n language: langStore.getLanguage(i18n.language),\n discipline: user.speciality,\n subdiscipline: \"\",\n });\n\n const handleClick = (id, title, type) => {\n setTempChosen({ id: id, title: title, type: type });\n };\n\n const HandleSubmit = () => {\n props.setChosenElement(tempChosen);\n props.close();\n };\n\n const getFilterResults = (data) => {\n setFilterData(data);\n };\n\n return (\n \n \n props.close()} />\n {t(\"selectionOverlay.selectTask\")}\n \n getFilterResults(data)} />\n \n \n \n <h2>{t(\"materiaalRaadplegen.publ\")}</h2>\n \n handleClick(event, id, title, type)}\n showType={false}\n />\n \n \n \n <h2>{t(\"materiaalRaadplegen.priv\")}</h2>\n \n handleClick(event, id, title, type)}\n showType={false}\n />\n \n \n \n <h2>{t(\"materiaalRaadplegen.media\")}</h2>\n \n handleClick(event, id, title, type)}\n showType={false}\n />\n \n \n\n \n \n \n \n );\n}\n\nexport default SelectionOverlay;\n","import React, {useContext} from \"react\"\nimport styled from \"styled-components\"\n\nimport { P } from '../components/styled/typography'\nimport Button from '../components/styled/button'\nimport { FaTimes } from \"react-icons/fa\"\n\nimport OpdrachtStore from \"../components/opdrachtStore\"\nimport { useTranslation } from \"react-i18next\"\n\n\n\nconst Wrapper = styled.div`\n width: 100%;\n border: 0.5px solid #AEADAD;\n background-color: #FFFFFF;\n box-sizing: border-box;\n padding: 15px;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n margin: 5px 0px;\n\n @media (min-width: 980px){\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n }\n`\n\nconst Bold = styled(P)`\n font-weight: 600;\n margin: 0px;\n margin-bottom: 2px;\n margin-top: 2px;\n margin-right: 5px;\n`\n\nconst Text = styled(P)`\n margin: 0px;\n margin-bottom: 2px;\n margin-top: 2px;\n\n white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */\n white-space: -webkit-pre-wrap; /* Chrome & Safari */ \n white-space: -pre-wrap; /* Opera 4-6 */\n white-space: -o-pre-wrap; /* Opera 7 */\n white-space: pre-wrap; /* CSS3 */\n word-wrap: break-word; /* Internet Explorer 5.5+ */\n word-break: break-all;\n white-space: normal;\n`\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n\n @media(min-width: 980px){\n flex-direction: row;\n }\n`\n\nconst DeleteButton = styled(Button)`\n background-color: #DC393D;\n border-color: #DC393D;\n display: flex;\n align-items: center;\n margin-top: 5px;\n\n &:hover {\n background-color: #b02a2e;\n border-color: #b02a2e;\n }\n\n @media (min-width: 980px){\n margin-top: 0px\n }\n`\n\nconst Icon = styled(FaTimes)`\n color: #FFFFFF;\n margin-right: 5px;\n font-size: 14px;\n`\n\nfunction TaskInAssignment(props){\n const { t, i18n } = useTranslation()\n const store = useContext(OpdrachtStore)\n function removeItem(event){\n store.taskArray.forEach((element) => {\n if (event.target.value == element.task){\n const index = store.taskArray.indexOf(element)\n store.removeFromArray(index, 1)\n }\n })\n\n }\n\n return(\n \n
\n \n {props.tasktype}:{props.task}\n \n {t('checkoutStep.total')}: {props.total}\n
\n {t('myDocument.delete')}\n
\n \n )\n}\n\nexport default TaskInAssignment","import React, { useState, useContext, useEffect } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { useTranslation } from \"react-i18next\";\nimport styled from \"styled-components\";\nimport { SmallTitle, P } from \"./styled/typography\";\nimport * as Yup from \"yup\";\nimport { api, source } from \"../api\";\nimport registrationStore from \"./registrationStore\";\nimport OpdrachtStore from \"./opdrachtStore\";\nimport LoadSpinner from \"./loadspinner\";\nimport { Formik, Form, Field } from \"formik\";\nimport Button from \"./styled/button\";\nimport SelectionOverlay from \"./selectionOverlay\";\nimport TaskInAssignment from \"./taskInAssignment\";\nimport CKEditor from '@ckeditor/ckeditor5-react';\nimport ClassicEditor from '@ckeditor/ckeditor5-build-classic';\n\n\nconst TitleField = styled.input`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n margin-bottom: 20px;\n outline: none;\n width: 100%;\n`;\n\nconst TaskForm = styled(Form)``;\n\nconst FormGroup = styled.div`\n display: flex;\n flex-direction: column;\n margin-bottom: 20px;\n`;\n\nconst Input = styled(Field)`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n`;\n\nconst Label = styled.label`\n font-size: 16px;\n font-weight: 600;\n color: #545454;\n`;\n\nconst SubmitButton = styled(Button)`\n margin-top: 0px;\n padding-right: 45px;\n padding-left: 45px;\n font-size: 18px;\n background-color: #45ae7c;\n border-color: #45ae7c;\n\n &:hover {\n background-color: #3a9168;\n border-color: #3a9168;\n }\n`;\n\nconst Error = styled.p`\n font-size: 16px;\n color: #fff;\n font-style: italic;\n background-color: #dc393d;\n border: 1px solid #dc393d;\n border-radius: 10px;\n padding: 10px 15px;\n`;\n\nconst Center = styled.div`\n text-align: center;\n`;\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n align-items: flex-end;\n }\n`;\n\nconst Half = styled.div`\n width: 100%;\n\n @media (min-width: 980px) {\n width: 49.25%;\n }\n`;\n\nconst OneFourth = styled.div`\n width: 100%;\n\n @media (min-width: 980px) {\n width: 24.5%;\n }\n`;\n\nconst TaskCards = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst Description = styled(Field)`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n margin-bottom: 10px;\n outline: none;\n width: 100%;\n height: 60px;\n`;\n\nconst FlexCenter = styled.div`\n display: flex;\n align-items: flex-end;\n`;\n\nconst Text = styled(P)`\n margin: 0px;\n color: #545454;\n font-size: 18px;\n padding-bottom: 3px;\n`;\n\nconst InputNumber = styled(Input)`\n margin-left: 10px;\n margin-right: 10px;\n width: 60px;\n font-size: 16px;\n`;\n\nconst ThreeFourth = styled.div`\n width: 100%;\n`;\nconst TextR = styled(P)`\n font-style: italic;\n margin-top: 10px;\n margin-bottom: 10px;\n\n @media (min-width: 980px) {\n margin: 0px;\n margin-right: 15px;\n }\n`;\n\nconst TaskButton = styled(Button)`\n margin-top: 15px;\n`;\n\nconst TemplateForm = observer((props) => {\n const { t, i18n } = useTranslation();\n const [error, setError] = useState(\"\");\n const regstore = useContext(registrationStore);\n const user = JSON.parse(regstore.user);\n const store = useContext(OpdrachtStore);\n const [showSelection, setShowSelection] = useState(false);\n const [chosenElement, setChosenElement] = useState({});\n const [exercises, setExercises] = useState();\n const [privateExercises, setPrivateExercises] = useState();\n const [documents, setDocuments] = useState([]);\n const [privateDocs, setPrivateDocs] = useState();\n const [loading, setLoading] = useState(true);\n const [assignment, setAssignment] = useState({});\n const [description, setDescription] = useState(\"

\")\n\n let taskComponents = t(\"patientopdrachtaanmaken.taskComp\");\n\n const HandleSubmit = () => {\n if (document.getElementById(\"title\").value === \"\") {\n setError(t(\"patientopdrachtaanmaken.errTitel\"));\n } else {\n if (props.id && (!props.copy)) {\n api.put(\"/assignmentTemplate/\" + props.id, {\n therapist_id: user.public_id,\n title: document.getElementById(\"title\").value,\n tasks: store.taskArray,\n }).then(function (response) {\n store.setIsFinishedCreating(true);\n store.clearArray();\n });\n } else {\n api.post(\"/assignmentTemplate\", {\n therapist_id: user.public_id,\n title: document.getElementById(\"title\").value,\n tasks: store.taskArray,\n }).then(function (response) {\n store.setIsFinishedCreating(true);\n store.clearArray();\n });\n }\n }\n };\n\n useEffect(() => {\n store.clearArray();\n\n api.get(\"/exercises\", {\n params: {\n language: \"nederlands\",\n discipline: \"Logopedie\",\n },\n }).then((response) => {\n setExercises(response.data.output);\n api.get(\"/exercises/\" + user.email).then((res) => {\n setPrivateExercises(res.data.output);\n api.get(\"/documents\").then((response) => {\n setDocuments(response.data.Documents);\n api.get(\"/documents/\" + user.public_id).then((res) => {\n setPrivateDocs(res.data.Documents);\n setLoading(false);\n });\n });\n });\n });\n\n if (props.id) {\n api.get(\"/assignmentTemplate/\" + props.id).then(function (response) {\n var task;\n for (task of response.data.assignmentsTemplate.tasks) {\n var index = store.taskArray.length;\n\n store.createObject(\n index,\n task.title,\n task.type,\n task.task_id,\n null,\n task.description,\n task.total,\n task.frequencyparam1,\n task.frequencyparam2\n );\n\n store.addToArray(store.taskObject);\n }\n\n setAssignment(response.data.assignmentsTemplate);\n setLoading(false);\n });\n }\n return () => {\n source.cancel();\n }\n }, []);\n\n const handleSwitch = () => {\n setShowSelection(true);\n };\n\n const Close = () => {\n setShowSelection(false);\n };\n\n const SetChosenElement = (element) => {\n setChosenElement(element);\n };\n\n if (store.taskArray.length > 0) {\n taskComponents = store.taskArray.map((task) => {\n return ;\n });\n }\n\n return (\n <>\n { loading ? (\n \n ) : (\n <>\n {t(\"patientopdrachtaanmaken.title\")}\n \n {error}\n {\n const index = store.taskArray.length;\n store.createObject(\n index,\n chosenElement.title,\n chosenElement.type,\n chosenElement.id,\n null,\n values.description,\n values.total,\n values.frequency,\n values.frequencyparam2\n );\n store.addToArray(store.taskObject);\n actions.resetForm();\n actions.setSubmitting(false);\n }}\n render={({ errors, touched }, isSubmitting) => (\n \n {t(\"patientopdrachtaanmaken.tasksTitle\")}\n \n {chosenElement.title === undefined ? (\n \n \n \n handleSwitch()}>\n {t(\"patientopdrachtaanmaken.chooseTask\")}\n \n \n \n ) : (\n \n \n \n {chosenElement.title}\n handleSwitch()}>\n {t(\"patientopdrachtaanmaken.otherTask\")}\n \n \n \n )}\n \n {touched.total && errors.total && {errors.total}}\n {touched.frequency && errors.frequency && {errors.frequency}}\n {touched.frequencyparam2 && errors.frequencyparam2 && (\n {errors.frequencyparam2}\n )}\n \n \n \n \n \n \n \n \n \n \n \n \n {t(\"patientopdrachtaanmaken.perDay\")}\n \n {t(\"patientopdrachtaanmaken.days\")}\n \n \n \n \n \n\n \n \n {\n const description = editor.getData();\n console.log( { event, editor });\n setDescription(description);\n }}\n config={{\n placeholder: t('fileForm.inputDescription'),\n toolbar: ['heading', '|', 'bold', 'italic', 'blockQuote', 'link', 'numberedList', 'bulletedList', 'insertTable', 'tableColumn', 'tableRow', 'mergeTableCells', '|', 'undo', 'redo', '|', 'code'],\n cloudServices: {tokenUrl : process.env.REACT_APP_COBRAND_API + \"/editor_token/\" + user.public_id, uploadUrl : \"https://55482.cke-cs.com/easyimage/upload/\"}\n }}\n onError={ ( { willEditorRestart } ) => {\n // If the editor is restarted, the toolbar element will be created once again.\n // The `onReady` callback will be called again and the new toolbar will be added.\n // This is why you need to remove the older toolbar.\n if ( willEditorRestart ) {\n this.editor.ui.view.toolbar.element.remove();\n }\n } }\n />\n \n\n \n {t(\"patientopdrachtaanmaken.add\")}\n \n \n )}\n validationSchema={Yup.object().shape({\n frequency: Yup.number()\n .required(t(\"patientopdrachtaanmaken.obl\"))\n .positive(t(\"patientopdrachtaanmaken.bigger\")),\n frequencyparam2: Yup.number()\n .required(t(\"patientopdrachtaanmaken.obl\"))\n .positive(\"Geef een getal groter dan 0 in.\"),\n total: Yup.number()\n .required(t(\"patientopdrachtaanmaken.obl\"))\n .positive(t(\"patientopdrachtaanmaken.bigger\")),\n })}\n />\n {showSelection && (\n \n )}\n {t(\"patientopdrachtaanmaken.tasks\")}\n {taskComponents}\n {t(\"patientopdrachtaanmaken.makeAss\")}\n \n )}\n \n );\n})\n\nexport default TemplateForm;","import React, { useContext, useEffect, useState } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport styled from \"styled-components\";\nimport registrationStore from \"../../components/registrationStore\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport Global from \"../../components/styled/global\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { PageTitle, P, SmallTitle } from \"../../components/styled/typography\";\nimport OpdrachtStore from \"../../components/opdrachtStore\";\nimport { api } from \"../../api\";\nimport { Redirect } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport { NavLink } from \"react-router-dom\";\nimport TemplateForm from \"../../components/templateForm\";\nimport LoadSpinner from \"../../components/loadspinner\";\nimport { ExCard } from \"../../components/styled/card\";\nimport Button from \"../../components/styled/button\";\n\n\nconst A = styled(NavLink)`\n color: #51c0cf;\n text-decoration: none;\n padding: 0px 10px 0px 0px;\n margin-bottom: 10px;\n &.active {\n text-decoration: underline;\n color: #4e7693;\n }\n`;\n\nconst FlexLinks = styled.div`\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n @media (min-width: 980px) {\n flex-direction: row;\n }\n`;\n\nconst FlexColumn = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst Bold = styled(P)`\n margin: 0px;\n font-weight: 600;\n color: #a5a5af;\n`;\n\nconst Card = styled(ExCard)`\n width: 100%;\n`;\n\n\n\nconst OpdrachtAanmaken = observer((props) => {\n const regstore = useContext(registrationStore);\n const user = JSON.parse(regstore.user);\n const store = useContext(OpdrachtStore);\n const [redirect, setRedirect] = useState(false);\n const { t, i18n } = useTranslation();\n const [newTemplate, setNewTemplate] = useState(true);\n const [templates, setTemplates] = useState([]);\n const [loading, setLoading] = useState(false);\n const [chosenOne, setChosenOne] = useState(\"\");\n const [editExisting, setEditExisting] = useState(false);\n\n\n useEffect(() => {\n if (loading) {\n api.get(\"/assignmentTemplates/\" + user.public_id).then(function (response) {\n setTemplates(response.data.assignmentTemplates);\n setLoading(false);\n });\n }\n }, [loading])\n\n useEffect(() => {\n if (store.isFinishedCreating) {\n setRedirect(true);\n store.setIsFinishedCreating(false);\n }\n\n }, [store.isFinishedCreating])\n\n\n const handleNav = (page) => {\n setNewTemplate(page);\n if (! page) {\n setLoading(true);\n }\n }\n\n const handleChange = (event, id) => {\n setChosenOne(id);\n\n var elems = document.querySelectorAll(\"#card\");\n elems.forEach.call(elems, function (el) {\n el.classList.remove(\"active\");\n });\n\n if (event.target.id === \"text\") {\n event.target.closest(\"div\").className += \" active\";\n } else {\n event.target.className += \" active\";\n }\n };\n\n const handleSubmit = () => {\n setEditExisting(true);\n }\n\n const goBack = () => {\n setEditExisting(false);\n }\n\n return (\n \n \n \n \n {t(\"materiaalAanmaken.assignment\")}\n

{t(\"materiaalAanmaken.subtitle\")}

\n
\n \n handleNav(true)}>\n {t(\"patientopdrachtaanmaken.newTemplate\")}\n \n handleNav(false)}>\n {t(\"patientopdrachtaanmaken.existingTemplate\")}\n \n \n { newTemplate ? (\n \n ) : (\n <>\n {loading ? (\n \n ) : (\n <>\n {! editExisting && templates && (\n templates.length > 0 ? (\n <>\n \n {templates.map((template) => {\n return (\n handleChange(event, template.id)}>\n handleChange(event, template.id)}>\n {template.title}\n \n \n )\n })}\n \n \n \n ) : (\n
{t(\"patientExistingAssignment.noTemp\")}
\n )\n )}\n {editExisting && (\n <>\n \n \n \n )}\n \n )}\n \n )}\n
\n {redirect && }\n
\n
\n
\n );\n});\n\nexport default OpdrachtAanmaken;\n","import React, { useContext, useEffect, useState } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport Global from \"../../components/styled/global\";\nimport registrationStore from \"../../components/registrationStore\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { PageTitle } from \"../../components/styled/typography\";\nimport { useTranslation } from \"react-i18next\";\nimport LoadSpinner from \"../../components/loadspinner\";\nimport OpdrachtStore from \"../../components/opdrachtStore\";\nimport { api } from \"../../api\";\nimport { Redirect } from \"react-router-dom\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport TemplateForm from \"../../components/templateForm\";\n\nconst OpdrachtAanpassen = observer((props) => {\n const { t, i18n } = useTranslation();\n const regstore = useContext(registrationStore);\n const user = JSON.parse(regstore.user);\n const store = useContext(OpdrachtStore);\n const [redirect, setRedirect] = useState(false);\n const { id } = props.match.params;\n\n useEffect(() => {\n if (store.isFinishedCreating) {\n setRedirect(true);\n store.setIsFinishedCreating(false);\n }\n\n }, [store.isFinishedCreating])\n\n return (\n \n \n \n \n {t(\"opdrachtAanpassen.adj\")}\n \n {redirect && }\n \n \n \n );\n});\n\nexport default OpdrachtAanpassen;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { NavLink } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Flex = styled.div`\n display: flex;\n`;\n\nconst A = styled(NavLink)`\n color: #51c0cf;\n text-decoration: none;\n padding: 0px 5px;\n\n &.active {\n text-decoration: underline;\n color: #4e7693;\n }\n`;\n\nfunction PatientNavigation(props) {\n const { t, i18n } = useTranslation();\n return (\n \n {t(\"patientNavigation.det\")}\n {t(\"patientNavigation.ass\")}\n {t(\"patientNavigation.res\")}\n \n );\n}\n\nexport default PatientNavigation;\n","import React, { useEffect, useState, useContext } from \"react\";\nimport styled from \"styled-components\";\nimport { FaEdit, FaPrint } from \"react-icons/fa\";\nimport { Formik, Form, Field } from \"formik\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport Global from \"../../components/styled/global\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { PageTitle, SmallTitle, P } from \"../../components/styled/typography\";\nimport PatientNavigation from \"../../components/patientNavigation\";\nimport AreYouSure from \"../../components/areYouSure\";\nimport Card from \"../../components/styled/card\";\nimport { StyledLink } from \"../../components/styled/link\";\nimport Button from \"../../components/styled/button\";\nimport { api } from \"../../api\";\nimport PatientIcon from \"../../assets/images/patient-icon.png\";\nimport PatientIconWoman from \"../../assets/images/patient-icon-woman.png\";\nimport BertieIcon from \"../../assets/images/bertie.png\";\nimport LoadSpinner from \"../../components/loadspinner\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport registrationStore from \"../../components/registrationStore\";\nimport { observer } from \"mobx-react\";\nimport PatientStore from \"../../components/patientStore\";\nimport { useTranslation } from \"react-i18next\";\nimport { Redirect } from \"react-router-dom\";\nimport qs from \"qs\";\nimport { isAppInsigthsEnabled } from \"../../insights\";\nimport { useAppInsightsContext } from '@microsoft/applicationinsights-react-js';\nimport { eventConstants, getInsightUserType } from \"../../insights-constants\";\nimport { trackEvent } from './../../insights-track';\n\nconst Wrapper = styled(Card)`\n padding: 20px;\n display: flex;\n flex-direction: column;\n margin-top: 30px;\n position: relative;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n }\n`;\n\nconst SideBar = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n margin-right: 30px;\n\n @media (min-width: 980px) {\n width: 200px;\n }\n`;\n\nconst Main = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`;\n\nconst Avatar = styled.img`\n height: 200px;\n width: 200px;\n margin-right: 5px;\n padding: 20px;\n border: 0.7px solid #d1d1d1;\n box-sizing: border-box;\n margin-bottom: 20px;\n\n @media (min-width: 980px) {\n height: 200px;\n width: 200px;\n margin-bottom: 10px;\n }\n`;\n\nconst Box = styled.div`\n @media (min-width: 980px) {\n margin-bottom: 10px;\n }\n`;\n\nconst Title = styled(SmallTitle)`\n font-weight: 600;\n margin: 10px 0px;\n @media screen and (min-width: 980px) {\n font-size: 20px;\n }\n`;\n\nconst Text = styled(P)`\n margin: 0px;\n`;\n\nconst Bold = styled(Text)`\n font-weight: 600;\n`;\n\nconst Line = styled.hr`\n border: 0.8px solid #a5a5af;\n background-color: #a5a5af;\n margin-bottom: 10px;\n margin-top: 10px;\n width: 100%;\n\n @media (min-width: 980px) {\n width: 200px;\n }\n`;\n\nconst EditButton = styled(Button)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n padding: 4px 10px;\n margin-top: 15px;\n`;\n\nconst EditIcon = styled(FaEdit)`\n color: #ffffff;\n margin-right: 5px;\n font-size: 16px;\n`;\n\nconst PrintIcon = styled(FaPrint)`\n color: #ffffff;\n margin-right: 5px;\n font-size: 16px;\n`;\n\nconst EditField = styled(Field)`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n margin-bottom: 10px;\n outline: none;\n width: 100%;\n height: 200px;\n white-space: pre-line;\n font-size: 16px;\n`;\n\nconst RedButton = styled(Button)`\n background-color: #dc393d;\n border-color: #dc393d;\n margin-top: 10px;\n\n &:hover {\n background-color: #dc393d;\n border-color: #dc393d;\n }\n`;\n\nconst ButtonGroup = styled.div`\n display: flex;\n margin-right: 0;\n margin-left: auto;\n\n`\n\nconst PatientDetail = observer((props) => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const patientStore = useContext(PatientStore);\n const user = JSON.parse(store.user);\n const { public_id } = props.match.params;\n const [patient, setPatient] = useState({});\n const [details, setDetails] = useState();\n const [loading, setLoading] = useState(true);\n const isInEditModus = qs.parse(props.location.search, { ignoreQueryPrefix: true }).edit || false;\n const [edit, setEdit] = useState(isInEditModus);\n const [redirect, setRedirect] = useState(false);\n const [Overlay, setOverlay] = useState(false);\n const [bertieEmail, setBertieEmail] = useState();\n const [bertiePassword, setBertiePassword] = useState(\"!Ya7:W6CD {\n api.get(\"/user/\" + public_id).then((response) => {\n setBertieEmail(response.data.user.email);\n setPatient(response.data.user);\n patientStore.setPatient(\n response.data.user.firstName,\n response.data.user.lastName,\n response.data.user.public_id,\n response.data.user.sex\n );\n api.get(\"/user/details/\" + public_id).then((res) => {\n setDetails(res.data.details);\n setLoading(false);\n });\n });\n }, []);\n\n const handleClick = () => {\n trackEvent(isAiEnabled, appInsights, eventConstants.PRESS.CLIENTS.DETAILS.UPDATE, trackProps);\n setEdit(true);\n };\n\n const HandleOverlay = () => {\n setOverlay(!Overlay);\n };\n\n const updateDiagnosis = () => {\n api.get(\"/user/details/\" + public_id).then((response) => {\n setDetails(response.data.details);\n });\n };\n\n const update = () => {\n setRedirect(true);\n };\n\n const HandleDelete = async () => {\n api.post(\"/disconnectPatient/\" + patientStore.patient.public_id, { therapist_id: user.public_id }).then(() => {\n api.get(`/user/${patientStore.patient.public_id}`).then((response) => {\n if (response.data.user.plan == \"Patiënt\" && response.data.user.plan_period == 100) {\n api.delete(`/user/${patientStore.patient.public_id}`);\n }\n });\n });\n };\n\n {\n /* API call: \n -> info zit in state (variabelen: medical & paramedical)\n -> Denk wel dat het nog niet gaat werken om de bestaande tekst in de form te steken, check je dit nog eens?\n */\n }\n\n return (\n \n \n \n \n {loading ? (\n \n ) : (\n \n {patientStore.patient.firstName + \" \" + patientStore.patient.lastName}\n \n )}\n \n {loading ? (\n \n ) : (\n \n \n \n \n {patientStore.patient.firstName + \" \" + patientStore.patient.lastName}\n \n \n {t(\"accountNavigation.data\")}\n {patient.dateOfBirth && (\n \n {t(\"gegevensForm.birthDate\")}:\n {patient.dateOfBirth}\n \n )}\n {patient.socialSecurityNumber && (\n \n {t(\"gegevensForm.ssn\")}:\n {patient.socialSecurityNumber}\n \n )}\n\n {patient.street && patient.number && (\n \n {t(\"patientDetail.living\")}:\n {patient.street + \" \" + patient.number},\n {patient.zipCode + \" \" + patient.city},\n {patient.country}\n \n )}\n\n \n {t(\"loginForm.emailLbl\")}:\n \n {details.isBertie ? \"Bertie@gmail.com\" : patient.email}\n \n \n {details.isBertie && (\n <>\n {t(\"patientDetail.loginAsBertie\")}\n \n {t(\"loginForm.emailLbl\")}:\n {bertieEmail}\n {t(\"patientDetail.password\")}:\n {bertiePassword}\n \n \n )}\n {patient.telephone && (\n \n {t(\"gegevensForm.tel\")}:\n {patient.telephone}\n \n )}\n\n {t(\"patientDetail.patientVerwijderen\")}\n \n \n {redirect && }\n
\n {edit ? (\n {\n api.patch(\"/user/details/\" + patient.public_id, {\n medicalDiagnosis: values.medicalDiagnosis,\n paramedicalDiagnosis: values.paramedicalDiagnosis,\n therapyPlan: values.therapyPlan,\n followUp: values.followUp,\n endEvaluation: values.endEvaluation,\n helpRequest: values.helpRequest,\n history: values.history,\n personality: values.personality,\n }).then(function (response) {\n actions.setSubmitting(false);\n setEdit(false);\n updateDiagnosis();\n });\n }}\n render={({ errors, touched }, isSubmitting) => (\n
\n \n {t(\"patientDetail.helpRequest\")}\n \n \n \n {t(\"patientDetail.history\")}\n \n \n \n {t(\"patientDetail.personality\")}\n \n \n \n {t(\"patientDetail.paramedical\")}\n \n \n \n {t(\"patientDetail.medical\")}\n \n \n {/* \n {t(\"patientDetail.therapyPlan\")}\n \n */}\n\n \n {t(\"patientDetail.followUp\")}\n \n \n \n {t(\"patientDetail.endEvaluation\")}\n \n \n {t(\"patientDetail.saveChange\")}\n \n \n
\n )}\n />\n ) : (\n
\n \n {t(\"patientDetail.helpRequest\")}\n {details.helpRequest}\n \n \n {t(\"patientDetail.history\")}\n {details.history}\n \n \n {t(\"patientDetail.personality\")}\n {details.personality}\n \n \n {t(\"patientDetail.paramedical\")}\n {details.paramedicalDiagnosis}\n \n \n {t(\"patientDetail.medical\")}\n {details.medicalDiagnosis}\n \n\n {/* \n {t(\"patientDetail.therapyPlan\")}\n {details.therapyPlan}\n */}\n\n \n {t(\"patientDetail.followUp\")}\n {details.followUp}\n \n \n {t(\"patientDetail.endEvaluation\")}\n {details.endEvaluation}\n \n \n \n \n {t(\"myDocument.adjust\")}\n \n \n \n {t(\"myDocument.print\")}\n \n \n
\n )}\n
\n
\n )}\n
\n
\n
\n );\n});\n\nexport default PatientDetail;\n","import React, {useState, useEffect} from \"react\"\nimport styled from 'styled-components'\nimport {api} from \"../api\"\nimport { NavLink } from 'react-router-dom'\nimport {P} from '../components/styled/typography'\nimport { useTranslation } from \"react-i18next\"\n\nimport Card from '../components/styled/card'\n\n\nconst LogboekCard = styled(Card)`\n display: flex;\n flex-wrap: wrap;\n`\n\nconst BulletGreen = styled.div`\n width: 10px;\n height: 10px;\n background-color: #24AE5F;\n border: 4px solid #24AE5F;\n border-radius: 100%;\n margin-right: 10px;\n box-sizing: content-box;\n vertical-align: middle;\n display: inline-block;\n`\n\nconst BulletOrange = styled(BulletGreen)`\n background-color: #F0C239;\n border-color: #F0C239;\n`\n\nconst BulletRed = styled(BulletGreen)`\n background-color: #F23539;\n border-color: #F23539;\n`\n\nconst A = styled(NavLink)`\n text-decoration: none;\n color: #51C0CF;\n font-weight: 600;\n`\n\nconst Duration = styled.span`\n color: #A5A5A5;\n font-size: 16px;\n font-style: italic;\n font-weight: lighter;\n`\n\nconst Day = styled.div`\n margin-right: 20px;\n margin-left: 20px;\n`\n\nconst DateTitle = styled(P)`\n font-weight: bold;\n margin-bottom: 0px;\n margin-top: 15px;\n color: #545454;\n`\n\nconst Logboek = (props) => {\n const { t, i18n } = useTranslation()\n const [logs, setLogs] = useState([])\n useEffect(() => {\n api.get('/user/' + props.id + '/logs').then((response) =>{\n setLogs(response.data.output)\n })\n \n }, []);\n\n return (\n
\n { logs.length != 0 ? \n \n {logs.map(log => {\n return (\n \n \n {new Date(log[0].date).toLocaleDateString(i18n.language)}\n \n {\n log.map(task => {\n const durationTask= task.duration * 1.666666667 * (10**-5);\n let duration;\n if (durationTask < 1){\n duration = ((durationTask)*100).toFixed(0) + \" sec\"\n } else {\n duration = (durationTask).toFixed(2) + \" min\"\n }\n return \n })\n }\n \n )\n })}\n :\n
{t('logboek.taskAvailable')}
\n }\n
\n )\n}\n\nexport default Logboek","import React, { useState, useEffect, useContext } from \"react\";\nimport styled from \"styled-components\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport ResultsGraph from \"../../components/resultsGraph/resultsGraph\";\nimport Global from \"../../components/styled/global\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { PageTitle, SmallTitle, P } from \"../../components/styled/typography\";\nimport Card from \"../../components/styled/card\";\nimport PatientNavigation from \"../../components/patientNavigation\";\nimport registrationStore from \"../../components/registrationStore\";\nimport { observer } from \"mobx-react\";\nimport { api } from \"../../api\";\nimport ResultNavigation from \"../../components/resultsGraph/resultNavigation\";\nimport LoadSpinner from \"../../components/loadspinner\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport Logboek from \"../../components/logboek\";\nimport PatientStore from \"../../components/patientStore\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Title = styled(SmallTitle)`\n margin-bottom: 30px;\n`;\n\nconst Flex = styled.div`\n display: flex;\n align-items: flex-start;\n flex-wrap: wrap;\n`;\n\nconst NoMobile = styled.div`\n display: none;\n\n @media (min-width: 980px) {\n display: block;\n }\n`;\n\nconst UnAvailable = styled.div`\n display: block;\n\n @media (min-width: 980px) {\n display: none;\n }\n`;\n\nconst PatientResultaat = observer((props) => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const patientStore = useContext(PatientStore);\n const user = JSON.parse(store.user);\n const { public_id } = props.match.params;\n const [loading, setLoading] = useState(true);\n const [patientLoading, setPatientLoading] = useState(true);\n const [GraphLoading, setGraphLoading] = useState(true);\n const [thisAssignment, setThisAssignment] = useState([]);\n const [results, setResults] = useState([]);\n const [activeGraph, setActiveGraph] = useState();\n\n useEffect(() => {\n if (patientStore.patient.public_id !== public_id) {\n api.get(\"/user/\" + public_id).then((response) => {\n patientStore.setPatient(\n response.data.user.firstName,\n response.data.user.lastName,\n response.data.user.public_id,\n response.data.user.sex\n );\n setPatientLoading(false);\n });\n } else {\n setPatientLoading(false);\n }\n\n api.get(\"user/\" + public_id + \"/completedtasks\").then((response) => {\n setThisAssignment(response.data.output);\n setLoading(false);\n });\n }, []);\n\n const handleClick = (e) => {\n const index = e.target.getAttribute(\"value\");\n const assignment = thisAssignment.findIndex((p) => p.assignment_id == index);\n var elems = document.querySelectorAll(\".isactive\");\n [].forEach.call(elems, function (el) {\n el.classList.remove(\"isactive\");\n });\n e.target.className += \" isactive\";\n setResults(thisAssignment[assignment]);\n setGraphLoading(false);\n };\n\n return (\n \n \n \n \n {patientLoading ? (\n \n ) : (\n \n {patientStore.patient.firstName + \" \" + patientStore.patient.lastName}\n \n )}\n \n \n {t(\"patientResultaat.logbook\")}\n \n\n {t(\"patientResultaat.results\")}\n \n {loading ? (\n \n ) : thisAssignment.length > 0 ? (\n thisAssignment.map((result) => (\n \n ))\n ) : (\n
{t(\"resultatenDetail.noAss\")}
\n )}\n\n
\n {loading ? (\n \"\"\n ) : GraphLoading ? (\n \"\"\n ) : (\n \n )}\n
\n \n
{t(\"resultatenDetail.phone\")}
\n
\n
\n
\n
\n );\n});\n\nexport default PatientResultaat;\n","import { observable, action } from \"mobx\"\nimport { createContext } from \"react\";\n\nclass TrajectStore {\n trajectObject = {\n id: \"\",\n title: \"\"\n }\n\n @observable trajectArray = []\n @observable titleInput = \"\"\n @observable chosenCategory = \"\"\n @observable chosenTrajectId = 1\n\n @action createObject(id, title){\n this.trajectObject.id = id\n this.trajectObject.title = title\n }\n\n @action setChosenCategory(category){\n this.chosenCategory = category\n }\n @action setChosenTrajectId(id){\n this.chosenTrajectId = id\n }\n\n @action addToArray(object){\n this.trajectArray.push(object)\n }\n\n @action removeFromArray(index, items){\n this.trajectArray.splice(index, items)\n }\n\n @action setOefeningen(newOefeningen){\n this.oefeningen = newOefeningen\n }\n\n @action clearArray(){\n this.trajectArray = []\n }\n\n @action setTitleInput(newTitle){\n this.titleInput = newTitle\n }\n\n @action clearInputs(){\n this.titleInput = \"\"\n }\n \n}\n\n\nexport const TrajectStoreInstance = new TrajectStore()\n\nexport default createContext(TrajectStoreInstance)","import React, { forwardRef, useState, useEffect, useImperativeHandle } from \"react\";\nimport DayPicker, { DateUtils } from 'react-day-picker';\nimport { useTranslation } from \"react-i18next\";\nimport 'react-day-picker/lib/style.css';\n\n// Include the locale utils designed for moment\nimport MomentLocaleUtils from 'react-day-picker/moment';\n\n// Make sure moment.js has the required locale data\nimport 'moment/locale/ca';\nimport 'moment/locale/de';\nimport 'moment/locale/en-gb';\nimport 'moment/locale/es';\nimport 'moment/locale/fr';\nimport 'moment/locale/nl';\n\nconst Calendar = forwardRef((props, ref) => {\n const { t, i18n } = useTranslation();\n const [dates, setDates] = useState([]);\n const callback = props.callback;\n\n // Day clear option\n useImperativeHandle(ref, () => ({\n clearDays() {\n setDates([]);\n }\n }));\n\n useEffect(() => {\n callback(dates);\n }, [dates]);\n\n const handleDayClick = (day, modifiers) => {\n if (modifiers.disabled) {\n return;\n }\n var prevDates = [...dates];\n if (modifiers.selected) {\n const selectedIndex = prevDates.findIndex(selectedDay =>\n DateUtils.isSameDay(selectedDay, day)\n );\n prevDates.splice(selectedIndex, 1);\n } else {\n prevDates.push(day);\n }\n setDates(prevDates);\n };\n\n return (\n \n );\n});\n\nexport default Calendar;\n","import React, { useState } from \"react\";\nimport styled from \"styled-components\";\nimport _ from \"lodash/array\";\nimport { FaArrowRight, FaArrowLeft } from \"react-icons/fa\";\nimport Button from \"../styled/button\";\n\nconst Page = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst Navigation = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n margin: 15px 5px;\n`;\n\nconst IconArrowRight = styled(FaArrowRight)`\n color: #51c0cf;\n margin: 0px 5px;\n cursor: pointer;\n`;\n\nconst IconArrowLeft = styled(FaArrowLeft)`\n color: #51c0cf;\n margin: 0px 5px;\n cursor: pointer;\n`;\n\nconst ButtonGroup = styled.div`\n &::after {\n content: \"\";\n clear: both;\n display: table;\n }\n\n &::not(:last-child) {\n border-right: none; /* Prevent double borders */\n }\n\n &::hover {\n background-color: #3e8e41;\n }\n`;\n\nconst PageButton = styled(Button)`\n margin: 5px 5px;\n cursor: pointer;\n\n &.active {\n background-color: #caecf0;\n }\n`;\n\nfunction Pagination({ pageSize, children }) {\n const [currentPage, setCurrentPage] = useState(0);\n\n const totalChildren = React.Children.count(children);\n const totalPages = Math.ceil(totalChildren / pageSize);\n\n const childrenArray = _.chunk(React.Children.toArray(children), pageSize);\n\n const changePage = (newPage) => {\n if (childrenArray.length > newPage && newPage >= 0) {\n setCurrentPage(parseInt(newPage));\n }\n };\n\n const generateButtons = (N, onClick) =>\n [...Array(N).keys()].map((i) => (\n onClick(e.target.value)}\n className={i === currentPage ? \"active\" : \"default\"}\n type=\"button\"\n >\n {i + 1}\n \n ));\n\n return (\n <>\n {childrenArray.length > 0 && (\n <>\n {childrenArray[currentPage]}\n \n {\n changePage(currentPage - 1);\n }}\n />\n \n {generateButtons(totalPages, changePage)}\n \n {\n changePage(currentPage + 1);\n }}\n />\n \n \n )}\n \n );\n}\n\nexport default Pagination;\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport DayPickerInput from \"react-day-picker/DayPickerInput\";\nimport { monthDiff } from \"../helperComponents/dateHelper\";\nimport { formatDate, parseDate } from \"react-day-picker/moment\";\n\n// Include the locale utils designed for moment\nimport MomentLocaleUtils from \"react-day-picker/moment\";\n\n// Make sure moment.js has the required locale data\nimport \"moment/locale/ca\";\nimport \"moment/locale/de\";\nimport \"moment/locale/en-gb\";\nimport \"moment/locale/es\";\nimport \"moment/locale/fr\";\nimport \"moment/locale/nl\";\nimport styled from \"styled-components\";\n\nconst DateInput = styled.div`\n & .DayPickerInput {\n width: 35%;\n padding-right: 0.5rem;\n }\n\n & input {\n width: 100%;\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n }\n`;\n\nconst DateInputSpan = styled.span``;\n\nconst StyledDayPickerInput = styled(DayPickerInput)`\n boder: 1px solid #51c0cf;\n`;\n\nconst DateRangePicker = (props) => {\n const { t, i18n } = useTranslation();\n const now = new Date();\n now.setHours(12,0,0,0);\n const [from, setFrom] = useState(now);\n const [to, setTo] = useState(now);\n const modifiers = { start: from, end: to };\n var toInput = null;\n\n useEffect(() => {\n props.callback(modifiers);\n showFromMonth();\n }, [from, to]);\n\n const showFromMonth = () => {\n if (toInput.getDayPicker() == null) {\n return;\n }\n if (monthDiff(to, from) < 2) {\n toInput.getDayPicker().showMonth(from);\n }\n };\n\n const handleFromChange = (from) => {\n // Change the from date and focus the \"to\" input field\n if (from < now) return;\n if (from > to) setTo(from);\n setFrom(from);\n };\n\n const handleToChange = (to) => {\n if (to < now) return;\n if (to < from) setFrom(to);\n setTo(to);\n };\n\n return (\n \n toInput.getInput().focus(),\n }}\n onDayChange={handleFromChange}\n />\n {\" — \"}\n \n (toInput = el)}\n value={to}\n placeholder={to?.toLocaleDateString(i18n.language)}\n format=\"LL\"\n formatDate={formatDate}\n parseDate={parseDate}\n dayPickerProps={{\n selectedDays: [from, { from, to }],\n disabledDays: { before: from },\n modifiers,\n month: from,\n fromMonth: from,\n localeUtils: MomentLocaleUtils,\n locale: i18n.language,\n numberOfMonths: 2,\n }}\n onDayChange={handleToChange}\n />\n \n \n );\n};\n\nexport default DateRangePicker;\n","export const getDaysArray = (start, end) => {\n for(var arr=[],dt=new Date(start); dt<=end; dt.setDate(dt.getDate()+1)){\n arr.push(new Date(dt));\n }\n return arr;\n};\n\nexport const monthDiff = (dateFrom, dateTo) => {\n return dateTo.getMonth() - dateFrom.getMonth() + \n (12 * (dateTo.getFullYear() - dateFrom.getFullYear()))\n}","import React, { useState, useEffect, useRef } from \"react\";\nimport { DateUtils } from \"react-day-picker\";\nimport { getDaysArray } from \"../helperComponents/dateHelper\";\nimport styled from \"styled-components\";\nimport { observer } from \"mobx-react\";\nimport { useTranslation } from \"react-i18next\";\nimport Calendar from \"./calendar\";\nimport Pagination from \"../helperComponents/pagination\";\nimport \"react-day-picker/lib/style.css\";\nimport DateRangePicker from \"./dateRangePicker\";\nimport { P, SmallTitle } from \"../styled/typography\";\n\nconst FormGroup = styled.div`\n display: flex;\n flex-direction: column;\n margin-bottom: 20px;\n`;\n\nconst Label = styled.label`\n font-size: 16px;\n font-weight: 600;\n color: #545454;\n`;\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: flex-start;\n }\n`;\n\nconst LeftDiv = styled.div`\n width: fit-content;\n align-self: flex-start;\n display: flex;\n flex-direction: column;\n`;\n\nconst RightDiv = styled.div`\n padding-left: 0px;\n margin-left: 0px;\n border-left: none;\n border-top: 1px solid lightgrey;\n margin-top: 20px;\n padding-top: 20px;\n @media (min-width: 980px) {\n padding-left: 20px;\n margin-left: 10px;\n border-top: none;\n border-left: 1px solid lightgrey;\n margin-top: 0px;\n padding-top: 0px;\n }\n`;\n\nconst Input = styled.input`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n`;\n\nconst SubTitle = styled(SmallTitle)`\n @media (min-width: 980px) {\n font-size: 18px;\n margin-top: 10px;\n }\n`;\n\nconst CalendarDiv = styled.div`\n margin-left: -20px;\n`;\n\nconst FlexLabel = styled.label`\n display: flex;\n flex-direction: column;\n margin-top: 10px;\n`;\n\nconst Sheduler = observer((props) => {\n const now = new Date();\n const { t, i18n } = useTranslation();\n const [useRegularShedule, setUseRegularShedule] = useState(false);\n const [dates, setDates] = useState([]);\n const [dateRange, setDateRange] = useState({ start: null, end: null });\n const [min, setMin] = useState(1);\n const calendarRef = useRef(null);\n\n useEffect(() => {\n if (useRegularShedule) {\n if (getAllDates().length > 0) sendShedule();\n }\n else if (dates.length > 0) sendShedule();\n }, [dates, dateRange]);\n\n useEffect(() => {\n resetShedule();\n }, [props.resetShedule]);\n \n useEffect(() => {\n props.handlePermitAddTask(getNumberDates());\n }, [dates]);\n\n const getNumberDates = () => useRegularShedule ? getAllDates().reduce((a, b) => a + b.frequency, 0) : dates.reduce((a, b) => a + b.frequency, 0);\n \n const resetShedule = () => {\n setUseRegularShedule(false);\n setDates([]);\n setDateRange({ start: null, end: null });\n setMin(1);\n if (calendarRef.current != null) calendarRef.current.clearDays();\n }\n\n const handleFrequencyChange = (day, event) => {\n var prevDates = [...dates];\n const index = prevDates.findIndex((selectedDay) => DateUtils.isSameDay(selectedDay.date, day));\n prevDates[index].frequency = parseInt(event.target.value);\n setDates(prevDates);\n };\n\n const changeShedule = () => {\n if (calendarRef.current != null) {\n calendarRef.current.clearDays();\n }\n if (!useRegularShedule) {\n setDates(getWeekdays());\n setMin(0);\n } else {\n setDates([]);\n setMin(1);\n }\n setUseRegularShedule(!useRegularShedule);\n };\n\n const getWeekdays = () => {\n var week = [];\n var now = new Date();\n for (var i = 0; i < 7; i++) {\n week.push({\n date: new Date(now),\n frequency: 0,\n });\n now.setDate(now.getDate() + 1);\n }\n //Sort monday to sunday\n return week.sort((a, b) => (a.date.getDay() || 7 - 1) - (b.date.getDay() || 7 - 1));\n };\n\n const getDate = (dateTime) => {\n if (useRegularShedule) {\n return dateTime.toLocaleDateString(i18n.language, { weekday: \"long\" });\n }\n return dateTime.toLocaleDateString(i18n.language);\n };\n\n const getAllDates = () => {\n var start = new Date(dateRange.start);\n var end = new Date(dateRange.end);\n var days = getDaysArray(start, end);\n var selectedDays = [];\n days.forEach(day => {\n var filteredDates = dates.filter(x => x.date.getDay() === day.getDay() && x.frequency > 0);\n if(filteredDates.length > 0) selectedDays.push({'date': day, 'frequency': filteredDates[0].frequency});\n });\n return selectedDays;\n };\n\n const sendShedule = () => {\n var shedule = {};\n if (useRegularShedule) {\n var allDates = getAllDates();\n\n if (allDates.length > 0) {\n shedule.total = allDates.reduce((a, b) => a + b.frequency, 0);\n shedule.dates = allDates;\n }\n } else {\n shedule.total = dates.reduce((a, b) => a + b.frequency, 0);\n shedule.dates = dates;\n }\n props.callback(shedule);\n };\n \n const setShedule = (days) => {\n var tempDates = [];\n for (const day in days) {\n const selectedIndex = dates.findIndex((selectedDay) => DateUtils.isSameDay(selectedDay.date, days[day]));\n if (selectedIndex >= 0) {\n tempDates.push({ date: days[day], frequency: dates[selectedIndex].frequency });\n } else {\n tempDates.push({ date: days[day], frequency: 1 });\n }\n }\n setDates(tempDates.sort((a, b) => Date.parse(a.date) - Date.parse(b.date))); \n };\n\n return (\n \n {t(\"sheduler.selectShedule\")}\n \n \n \n \n {useRegularShedule ? (\n <>\n \n \n \n ) : (\n \n \n \n )}\n \n\n \n
\n {dates.length > 0 && (\n <>\n {t(\"sheduler.setNumberOfTasksPerDay\")}\n \n {dates.map((value, index) => {\n return (\n
\n \n {getDate(value.date)} :\n handleFrequencyChange(value.date, e)}\n />\n \n
\n );\n })}\n
\n \n )}\n
\n
\n
\n
\n );\n});\n\nexport default Sheduler;\n","import React, { useContext, useState, useEffect } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport styled from \"styled-components\";\nimport { Formik, Form, Field } from \"formik\";\nimport registrationStore from \"../components/registrationStore\";\nimport TaskInAssignment from \"../components/taskInAssignment\";\nimport { P, SmallTitle } from \"../components/styled/typography\";\nimport Button from \"../components/styled/button\";\nimport OpdrachtStore from \"../components/opdrachtStore\";\nimport { api } from \"../api\";\nimport * as Yup from \"yup\";\nimport { useTranslation } from \"react-i18next\";\nimport TrajectStore from \"../components/trajectComponents/trajectStore\"\n//Changes: JEN\nimport Sheduler from \"../components/calendar/sheduler\"\n\nconst TaskForm = styled(Form)`\n margin-top: 10px;\n\n @media (min-width: 980px) {\n margin-top: 0px;\n }\n`;\n\nconst FormGroup = styled.div`\n display: flex;\n flex-direction: column;\n margin-bottom: 10px;\n`;\n\nconst Input = styled(Field)`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n`;\n\nconst TitleField = styled.input`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n width: 100%;\n`;\nconst Label = styled.label`\n font-size: 16px;\n font-weight: 600;\n color: #545454;\n margin-bottom: 10px;\n`;\n\nconst SubmitButton = styled(Button)`\n margin-top: 0px;\n padding-right: 45px;\n padding-left: 45px;\n font-size: 18px;\n background-color: #45ae7c;\n border-color: #45ae7c;\n\n &:hover {\n background-color: #3a9168;\n border-color: #3a9168;\n }\n`;\n\nconst Error = styled.p`\n font-size: 16px;\n color: #fff;\n font-style: italic;\n background-color: #dc393d;\n border: 1px solid #dc393d;\n border-radius: 10px;\n padding: 10px 15px;\n`;\n\nconst Center = styled.div`\n text-align: center;\n`;\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n align-items: flex-end;\n }\n`;\n\nconst Half = styled.div`\n width: 49.5%;\n`;\n\nconst OneFourth = styled.div`\n width: 100%;\n @media (min-width: 980px) {\n width: 17.5%;\n }\n`;\n\nconst SchedulerContainer = styled.div`\n width: 100%;\n`;\n\nconst ThreeFourth = styled.div`\n width: 100%;\n`;\n\nconst TaskCards = styled.div`\n display: flex;\n flex-direction: column;\n`;\nconst Description = styled(Field)`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n margin-bottom: 10px;\n outline: none;\n width: 100%;\n height: 60px;\n`;\n\nconst DatumField = styled.div`\n margin-bottom: 10px;\n`;\n\nconst FlexCenter = styled.div`\n display: flex;\n flex-direction: column;\n\n @media (min-width: 980px) {\n flex-direction: row;\n align-items: flex-end;\n }\n`;\n\nconst Text = styled(P)`\n margin: 0px;\n color: #545454;\n font-size: 18px;\n padding-bottom: 3px;\n`;\n\nconst TextR = styled(P)`\n font-style: italic;\n margin-top: 10px;\n margin-bottom: 10px;\n\n @media (min-width: 980px) {\n margin: 0px;\n margin-right: 15px;\n }\n`;\n\nconst InputNumber = styled(Input)`\n margin-left: 10px;\n margin-right: 10px;\n width: 60px;\n`;\n\nconst InputDate = styled.input`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n width: 100%;\n`;\n\nconst MobileFlex = styled.div`\n display: flex;\n align-items: center;\n\n @media (min-width: 980px) {\n display: flex;\n align-items: flex-end;\n }\n`;\n\nconst SubTitle = styled(SmallTitle)`\n @media (min-width: 980px) {\n font-size: 18px;\n margin-top: 10px;\n }\n`;\n\nconst CreateButton = styled(Button)`\n margin-top: 15px;\n`;\n\nconst OpdrachtAanmaken = observer((props) => {\n const { t, i18n } = useTranslation();\n const regstore = useContext(registrationStore);\n const user = JSON.parse(regstore.user);\n const store = useContext(OpdrachtStore);\n const trajStore = useContext(TrajectStore)\n const [error, setError] = useState(\"\");\n //Changes: JEN\n const [resetShedule, setResetShedule] = useState(false);\n const [shedule, setShedule] = useState({});\n const [btnToggleAdd, setBtnToggleAdd] = useState(false);\n const [btnToggleAddTask, setBtnToggleAddTask] = useState(false);\n\n const [viewScheduler, setViewScheduler] = useState(false);\n\n let taskComponents = t(\"patientopdrachtaanmaken.taskComp\");\n\n if (store.taskArray.length > 0) {\n taskComponents = store.taskArray.map((task) => {\n return (\n \n );\n });\n }\n \n const HandleSubmit = () => {\n if (document.getElementById(\"title\").value === \"\") {\n setError(t(\"patientopdrachtaanmaken.errTitel\"));\n } else {\n api.post(\"/assignment\", {\n therapist_id: user.public_id,\n title: document.getElementById(\"title\").value,\n user_id: props.public_id,\n tasks: store.taskArray,\n category: trajStore.chosenCategory,\n traject_id: trajStore.chosenTrajectId\n })\n .then((response) => {\n props.close();\n props.update();\n store.clearArray();\n store.clearTitle()\n api.post(\"/send_message\", {\n body: \"New assignment\",\n sender_id: user.public_id,\n sender_name: user.firstName,\n user_id: props.public_id,\n type: \"new-assignment\",\n });\n })\n .then(() => {\n api.get(\"/user/\" + props.public_id).then((res) => {\n const patientEmail = res.data.user.email;\n api.post(\"/mailWithTemplate\", {\n sender: \"info@telephon.digital\",\n to: patientEmail,\n subject: \"Assignment added\",\n template_name: \"new-assignment-mail\",\n template_content: [{\"name\": \"therapist-name\", \"content\": user.firstName + \" \" + user.lastName}]\n });\n });\n });\n }\n };\n\n const handleSwitch = () => {\n props.switch();\n };\n\n const handleTitleInputChange = (e) => {\n store.setTitleInput(e.target.value);\n };\n\n const handleDateInputChange = (e) => {\n store.setDateInput(e.target.value);\n };\n\n useEffect(() => {\n if(props.chosenElement.title !== undefined)\n setViewScheduler(true);\n }, [props.chosenElement.title]);\n\n useEffect(() => { \n setBtnToggleAddTask(store.titleInput.length > 0 ? false : true);\n }, [store.titleInput]);\n\n const handlePermitAddTask = (e) => {\n setBtnToggleAdd(e > 0 ? false : true);\n }\n\n return (\n
\n
\n {t(\"patientopdrachtaanmaken.title\")} \n \n

{error}

\n {\n const index = store.taskArray.length;\n store.createObject(\n index,\n props.chosenElement.title,\n props.chosenElement.type,\n props.chosenElement.id,\n shedule,\n values.description\n );\n store.addToArray(store.taskObject);\n setResetShedule(!resetShedule);\n actions.resetForm();\n actions.setSubmitting(false);\n }} \n render={({ errors, touched }, isSubmitting) => ( \n \n
\n \n \n {t(\"patientopdrachtaanmaken.selTask\")}\n \n {props.chosenElement.title !== undefined ? (\n

► {props.chosenElement.title}

\n ) : ('')}\n
\n \n \n \n
\n
\n\n {/*Changes: JEN*/}\n \n
\n setShedule(e)} handlePermitAddTask={(e) => handlePermitAddTask(e)} resetShedule={resetShedule} /> \n \n \n \n \n setViewScheduler(false)}>\n {t(\"patientopdrachtaanmaken.add\")}\n \n
\n
\n
\n )}\n />\n {/* STEP 3 */}\n \n
0 ? {\"display\": \"inline\"} : {\"display\": \"none\"} )}>\n
\n {t(\"patientopdrachtaanmaken.tasks\")}\n {taskComponents} \n
\n
\n
\n
\n 0 ? false : true } onClick={HandleSubmit}>{t(\"patientopdrachtaanmaken.makeAss\")}\n
\n );\n});\n\nexport default OpdrachtAanmaken;\n","import React, { useState, useEffect, useContext } from \"react\";\nimport { SmallTitle } from \"../components/styled/typography\";\nimport { api } from \"../api\";\nimport registrationStore from \"../components/registrationStore\";\nimport LoadSpinner from \"../components/loadspinner\";\nimport styled from \"styled-components\";\nimport Button from \"../components/styled/button\";\nimport { ExCard } from \"../components/styled/card\";\nimport { P } from \"../components/styled/typography\";\nimport { useTranslation } from \"react-i18next\";\nimport opdrachtStore from \"../components/opdrachtStore\";\nimport TrajectStore from \"../components/trajectComponents/trajectStore\";\nimport DayPickerInput from \"react-day-picker/DayPickerInput\";\n// Include the locale utils designed for moment\nimport MomentLocaleUtils from \"react-day-picker/moment\";\nimport { formatDate, parseDate } from \"react-day-picker/moment\";\n// Make sure moment.js has the required locale data\nimport \"moment/locale/ca\";\nimport \"moment/locale/de\";\nimport \"moment/locale/en-gb\";\nimport \"moment/locale/es\";\nimport \"moment/locale/fr\";\nimport \"moment/locale/nl\";\n\nconst DatumField = styled.div`\n margin-bottom: 10px;\n\n & .DayPickerInput {\n width: 35%;\n padding-right: 0.5rem;\n }\n\n & input {\n width: 100%;\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n }\n`;\n\nconst Card = styled(ExCard)`\n width: 100%;\n`;\n\nconst Content = styled.div`\n width: 100%;\n`;\n\nconst Bold = styled(P)`\n margin: 0px;\n font-weight: 600;\n color: #a5a5af;\n`;\n\nconst FlexColumn = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst Error = styled(P)`\n color: #dc393d;\n`;\n\nfunction PatientExistingAssignment(props) {\n const { t, i18n } = useTranslation();\n const [templates, setTemplates] = useState([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(\"\");\n const regstore = useContext(registrationStore);\n const user = JSON.parse(regstore.user);\n const store = useContext(opdrachtStore);\n const trajStore = useContext(TrajectStore);\n const [chosenOne, setChosenOne] = useState(\"\");\n const now = new Date();\n now.setHours(12,0,0,0);\n const [start, setStart] = useState(now);\n const modifiers = { start: start };\n\n useEffect(() => {\n api.get(\"/assignmentTemplates/\" + user.public_id).then(function (response) {\n setTemplates(response.data.assignmentTemplates);\n setLoading(false);\n });\n }, []);\n\n const handleStartChange = (start) => {\n // Change the from date and focus the \"to\" input field\n if (start < now) return;\n setStart(start);\n };\n\n const handleSubmit = () => {\n api.post(\"/templateToAssignment/\" + chosenOne, {\n start: start,\n user_id: props.public_id,\n category: trajStore.chosenCategory,\n traject_id: trajStore.chosenTrajectId,\n })\n .then(function (response) {\n props.close();\n props.update();\n store.clearTitle();\n })\n .then(() => {\n api.get(\"/user/\" + props.public_id).then((res) => {\n const patientEmail = res.data.user.email;\n api.post(\"/mailWithTemplate\", {\n sender: \"info@telephon.digital\",\n to: patientEmail,\n subject: \"Assignment added\",\n template_name: \"new-assignment-mail\",\n template_content: [{\"name\": \"therapist-name\", \"content\": user.firstName + \" \" + user.lastName}]\n });\n });\n });\n };\n\n const handleChange = (event, id) => {\n setChosenOne(id);\n\n var elems = document.querySelectorAll(\"#card\");\n elems.forEach.call(elems, function (el) {\n el.classList.remove(\"active\");\n });\n\n if (event.target.id === \"text\") {\n event.target.closest(\"div\").className += \" active\";\n } else {\n event.target.className += \" active\";\n }\n };\n\n if (loading) {\n return ;\n } else {\n return (\n \n {t(\"patientExistingAssignment.selTemp\")}:\n {templates ? (\n templates.length > 0 ? (\n \n {templates.map((template) => {\n return (\n handleChange(event, template.id)}>\n handleChange(event, template.id)}>\n {template.title}\n \n \n );\n })}\n \n ) : (\n
{t(\"patientExistingAssignment.noTemp\")}
\n )\n ) : (\n
{t(\"patientExistingAssignment.noTemp\")}
\n )}\n\n {t(\"patientExistingAssignment.start\")}:\n \n \n \n \n {error}\n {/*error styling nodig*/}\n
\n );\n }\n}\n\nexport default PatientExistingAssignment;\n","import React, { useContext, useState, useEffect } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { useTranslation } from \"react-i18next\";\nimport styled from \"styled-components\";\nimport { api } from \"../../api\";\nimport registrationStore from \"../registrationStore\";\nimport trajectStore from \"./trajectStore\";\nimport Button from \"../styled/button\";\n\nconst TitleField = styled.input`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n width: 100%;\n`;\n\nconst CreateButton = styled(Button)`\n margin-top: 15px;\n`;\n\nconst CreateTask= observer((props) => {\n const { t, i18n } = useTranslation();\n const regstore = useContext(registrationStore);\n const user = JSON.parse(regstore.user);\n const store = useContext(trajectStore);\n const [error, setError] = useState(\"\");\n\n const HandleSubmit = () => {\n\n if (document.getElementById(\"title\").value === \"\") {\n setError(t(\"patientopdrachtaanmaken.errTitel\"));\n } else {\n var task;\n api.post(\"/traject\", {\n therapist_id: user.public_id,\n user_id: props.public_id,\n title: document.getElementById(\"title\").value,\n })\n .then((response) => {\n props.close();\n props.update();\n store.clearArray();\n // POST new traject message via api\n // then\n // SEND mail to user using api\n });\n }\n };\n\n const handleTitleInputChange = (e) => {\n store.setTitleInput(e.target.value);\n };\n\n return (\n
\n \n

{error}

\n {t('createTraject.createTraject')}\n
\n )\n})\n\nexport default CreateTask;","import React, { useEffect, useState } from \"react\";\nimport { FaCaretDown, FaCaretRight } from \"react-icons/fa\";\nimport styled from \"styled-components\";\n\nconst TitleContainer = styled.div`\n display: flex;\n flexdirection: \"row\";\n align-items: center;\n font-weight: ${(props) => (props.bold ? \"bold\" : \"normal\")};\n color: ${(props) => (props.color != null ? props.color : \"#000000\")};\n cursor: pointer;\n margin-bottom: 15px;\n margin-top: 5px;\n`;\n\nconst Container = styled.div`\n position: relative;\n backgroundcolor: \"#fff\";\n margin-left: 10px;\n overflow: \"hidden\";\n font-size: 18px;\n\n @media (min-width: 980px) {\n font-size: 22px;\n margin-left: 30px;\n }\n`;\n\nconst Content = styled.div`\n padding-left: 10px;\n font-size: 18px;\n\n @media (min-width: 980px) {\n font-size: 22px;\n }\n`;\n\nconst CaretDown = styled(FaCaretDown)`\n text-align: left;\n color: ${(props) => (props.color != null ? props.color : \"#000000\")};\n font-size: 25px;\n align-self: center;\n font-weight: ${(props) => (props.bold ? \"bold\" : \"normal\")};\n`;\n\nconst CaretRight = styled(FaCaretRight)`\n text-align: left;\n color: ${(props) => (props.color != null ? props.color : \"#000000\")};\n font-size: 25px;\n align-self: center;\n font-weight: ${(props) => (props.bold ? \"bold\" : \"normal\")};\n`;\n\nconst Collapsible = (props) => {\n const [open, setOpen] = useState(props.open);\n\n const toggle = () => {\n setOpen(!open);\n };\n\n return (\n \n \n {open ? (\n \n ) : (\n \n )}\n {props.icon}{props.title}\n \n {open ? {props.children} : null}\n \n );\n};\n\nexport default Collapsible;\n","import React, { useState, useEffect, useContext } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n FaBriefcaseMedical,\n FaCalendar,\n FaChevronDown,\n FaChevronLeft,\n FaStethoscope,\n FaTasks,\n FaTimes\n} from \"react-icons/fa\";\nimport { H1, H2 } from \"../styled/typography\";\nimport styled from \"styled-components\";\nimport Card from \"../styled/card\";\nimport Collapsible from \"../helperComponents/collapsible\";\nimport registrationStore from \"../registrationStore\";\nimport { api } from \"../../api\";\nimport Button from \"../styled/button\";\nimport AssignmentCard from \"../assignmentCard\";\nimport trajectStore from \"../trajectComponents/trajectStore\";\nimport { Redirect } from \"react-router-dom\";\nimport { isAppInsigthsEnabled } from \"../../insights\";\nimport { useAppInsightsContext } from '@microsoft/applicationinsights-react-js';\nimport { eventConstants, getInsightUserType } from \"../../insights-constants\";\nimport { trackEvent } from './../../insights-track';\n\nconst AssignmentLargeCard = styled(Card)`\n margin-top: 20px;\n margin-bottom: 20px;\n\n @media (min-width: 980px) {\n margin-top: 40px;\n margin-bottom: 20px;\n }\n`;\n\nconst CollapsibleTitle = styled(H2)`\n display: flex;\n text-align: left;\n margin: 10px 25px;\n font-size: 18px;\n cursor: pointer;\n\n @media (min-width: 980px) {\n margin: 10px 25px;\n font-size: 25px;\n }\n`;\n\nconst ChevronDown = styled(FaChevronDown)`\n text-align: right;\n color: #51c0cf;\n font-size: 18px;\n align-self: center;\n margin-left: auto;\n\n @media (min-width: 980px) {\n font-size: 25px;\n }\n`;\n\nconst ChevronLeft = styled(FaChevronLeft)`\n text-align: right;\n color: #51c0cf;\n font-size: 18px;\n align-self: center;\n margin-left: auto;\n\n @media (min-width: 980px) {\n font-size: 25px;\n }\n`;\n\nconst TaskContainer = styled.div`\n position: relative;\n margin-left: 0px;\n margin-bottom: 20px;\n\n @media (min-width: 980px) {\n margin-left: 30px;\n }\n`;\n\nconst Flex = styled.div`\n display: flex;\n justify-content: space-between;\n flex-wrap: wrap;\n margin-bottom: 10px;\n`;\n\nconst Half = styled.div`\n width: 100%;\n\n @media (min-width: 980px) {\n width: 49.5%;\n }\n`;\n\nconst DeleteButton = styled(Button)`\n background-color: #dc393d;\n border-color: #dc393d;\n display: flex;\n align-items: center;\n margin-top: 5px;\n margin-left: auto;\n font-size: 16px;\n\n &:hover {\n background-color: #b02a2e;\n border-color: #b02a2e;\n }\n\n @media (min-width: 980px) {\n margin-top: 0px;\n }\n`;\n\nconst DeleteIcon = styled(FaTimes)`\n color: #ffffff;\n margin-right: 5px;\n font-size: 14px;\n`;\n\nconst TrajectIcon = styled(FaTasks)` \n margin: 0.05em 0.5em 0px 0px;\n`;\n\nconst StethoscopeIcon = styled(FaStethoscope)`\n color: #51c0cf;\n margin: 0.05em 0.4em 0px 0.4em;\n`;\n\nconst BriefcaseMed = styled(FaBriefcaseMedical)`\n color: #51c0cf;\n margin: 0.05em 0.4em 0.4em 0.4em;\n`;\n\nconst Separator = styled.div`\n border-bottom: cadetblue 1px dotted;\n margin: 20px 0px 20px 25px; \n`;\n\nconst TrajectDetails = (props) => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [viewTraject, setViewTraject] = useState(props.viewTraject);\n const trajStore = useContext(trajectStore);\n const [redirect, setRedirect] = useState(false);\n\n const isAiEnabled = isAppInsigthsEnabled();\n const appInsights = useAppInsightsContext();\n const trackProps = {\n user: {\n type: getInsightUserType(user.therapist),\n public_id: user.public_id \n }\n }\n\n const toggleTraject = () => {\n setViewTraject(!viewTraject);\n };\n\n const AssignmentInfo = (category) => (\n \n \n {props.traject.assignments\n .filter((e) => e.category === category.category)\n .map((assignment, index) => {\n return (\n \n );\n })}\n \n {category.category !== \"research_clinical_observation\" ? (\n \n ) : (\n
\n \n {redirect && (\n \n )}\n
\n )}\n
\n );\n\n const openOverlay = (category) => {\n //Set current category & open overlay\n props.openAssignmentOverlay();\n trajStore.setChosenCategory(category.category);\n trajStore.setChosenTrajectId(props.traject.id);\n };\n\n const hasContent = (category) => props.traject.assignments.filter((e) => e.category === category).length > 0;\n\n return (\n \n \n {t(\"trajectDetails.traject\") + \" \" + props.traject.title}{\" \"}\n {viewTraject ? : }\n \n {viewTraject ? (\n
\n \n }>\n \n \n \n \n \n \n \n \n \n \n
\n }>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n props.deleteTraject(props.traject.id)}>\n \n {t(\"trajectDetails.deleteTraject\")}\n \n
\n ) : null}\n
\n );\n};\n\nexport default TrajectDetails;\n","import React, { useState, useEffect, useContext } from \"react\";\nimport styled from \"styled-components\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport Global from \"../../components/styled/global\";\nimport { FaEdit, FaTimes } from \"react-icons/fa\";\nimport { api } from \"../../api\";\nimport PatientNavigation from \"../../components/patientNavigation\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport AssignmentCard from \"../../components/assignmentCard\";\nimport { PageTitle, SmallTitle, P } from \"../../components/styled/typography\";\nimport Button from \"../../components/styled/button\";\nimport Card from \"../../components/styled/card\";\nimport registrationStore from \"../../components/registrationStore\";\nimport PatientStore from \"../../components/patientStore\";\nimport { observer } from \"mobx-react\";\nimport TaskInAssignmentSmall from \"../../components/taskInAssignmentSmall\";\nimport Patientopdrachtaanmaken from \"../../components/patientopdrachtaanmaken\";\nimport PatientIcon from \"../../assets/images/patient-icon.png\";\nimport PatientIconWoman from \"../../assets/images/patient-icon-woman.png\";\nimport BertieIcon from \"../../assets/images/bertie.png\";\nimport { FaPlus } from \"react-icons/fa\";\nimport LoadSpinner from \"../../components/loadspinner\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport { NavLink } from \"react-router-dom\";\nimport PatientExistingAssignment from \"../../components/patientExistingAssignment\";\nimport SelectionOverlay from \"../../components/selectionOverlay\";\nimport OpdrachtStore from \"../../components/opdrachtStore\";\nimport { useTranslation } from \"react-i18next\";\nimport CreateTraject from \"../../components/trajectComponents/createTraject\";\nimport TrajectDetails from \"../../components/trajectComponents/trajectDetails\";\n\nconst Avatar = styled.img`\n height: 175px;\n width: 175px;\n margin-right: 5px;\n padding: 5px;\n border: 0.7px solid #d1d1d1;\n box-sizing: border-box;\n`;\n\nconst FlexBetween = styled.div`\n display: flex;\n flex-direction: column-reverse;\n margin-top: 20px;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n margin-top: auto;\n }\n`;\n\nconst Plus = styled(FaPlus)`\n color: #ffffff;\n transform: translateY(3px);\n margin-right: 5px;\n`;\n\nconst Times = styled(FaTimes)`\n color: #545454;\n position: absolute;\n right: 20px;\n top: 20px;\n cursor: pointer;\n`;\n\nconst Title = styled(SmallTitle)`\n margin-bottom: 30px;\n`;\nconst OverlayTraject = styled.div`\n position: fixed;\n display: flex;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(60, 60, 60, 0.7);\n z-index: 999;\n justify-content: center;\n align-items: center;\n`;\n\nconst OverlayCardTraject = styled(Card)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n -ms-transform: translate(-50%, -50%);\n`;\n\nconst OverlayAssignment = styled.div`\n background-color: rgba(60, 60, 60, 0.7);\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n z-index: 999;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst OverlayCardAssignment = styled(Card)`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n box-sizing: border-box;\n padding: 30px;\n height: 98%;\n width: 98%;\n position: absolute;\n z-index: 999999;\n padding-bottom: 15%;\n @media (min-width: 980px) {\n height: 90%;\n position: relative;\n top: 0;\n z-index: 9;\n padding-bottom: 30px;\n }\n`;\n\nconst A = styled(NavLink)`\n color: #51c0cf;\n text-decoration: none;\n padding: 0px 10px 0px 0px;\n margin-bottom: 10px;\n &.active {\n text-decoration: underline;\n color: #4e7693;\n }\n`;\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n @media (min-width: 980px) {\n flex-direction: row;\n }\n`;\n\nconst CreateAssignment = styled(SmallTitle)`\n margin: 30px 0px 10px 0px;\n`;\n\nconst PatientTaak = observer((props) => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const patientStore = useContext(PatientStore);\n const opdrachtStore = useContext(OpdrachtStore);\n const user = JSON.parse(store.user);\n const { public_id } = props.match.params;\n const [showOverlayTraject, setShowOverlayTraject] = useState(false);\n const [showAssignmentOverlay, setShowAssignmentOverlay] = useState(false);\n const [loading, setLoading] = useState(true);\n const [patientLoading, setPatientLoading] = useState(true);\n const [trajects, setTrajects] = useState([]);\n const [newAssignment, setNewAssignment] = useState(false);\n const [showSelection, setShowSelection] = useState(false);\n const [chosenElement, setChosenElement] = useState({});\n const [exercises, setExercises] = useState();\n const [privateExercises, setPrivateExercises] = useState();\n const [privateDocs, setPrivateDocs] = useState();\n const [exerciseLoading, setExerciseLoading] = useState(true);\n const [documents, setDocuments] = useState();\n\n useEffect(() => {\n api.get(\"/trajects/\" + public_id).then(function (response) {\n setTrajects(response.data.trajects.reverse());\n setLoading(false);\n });\n\n if (patientStore.patient.public_id !== public_id) {\n api.get(\"/user/\" + public_id).then((response) => {\n patientStore.setPatient(\n response.data.user.firstName,\n response.data.user.lastName,\n response.data.user.public_id,\n response.data.user.sex\n );\n setPatientLoading(false);\n });\n } else {\n setPatientLoading(false);\n }\n\n api.get(\"/exercises\", {\n params: {\n language: \"nederlands\",\n discipline: \"Logopedie\",\n },\n }).then((response) => {\n setExercises(response.data.output);\n });\n api.get(\"/exercises/\" + user.email).then((res) => {\n setPrivateExercises(res.data.output);\n });\n api.get(\"/documents\", {\n params: {\n language: \"nederlands\",\n discipline: \"Logopedie\",\n },\n }).then((response) => {\n setDocuments(response.data.Documents);\n });\n api.get(\"/privateDocuments/\" + user.public_id).then((res) => {\n setPrivateDocs(res.data.Documents);\n });\n\n opdrachtStore.clearInputs();\n opdrachtStore.clearArray();\n }, []);\n\n const displayOverlayTraject = () => {\n setShowOverlayTraject(true);\n };\n\n const hideOverlayTraject = () => {\n setShowOverlayTraject(false);\n };\n\n const handleCloseAssignment = () => {\n setShowAssignmentOverlay(false);\n };\n\n const DisplayAssignmentOverlay = () => {\n setShowAssignmentOverlay(true);\n };\n\n const handleNav = (choice) => {\n if (choice === \"zelf\") {\n setNewAssignment(false);\n } else {\n setNewAssignment(true);\n }\n };\n\n const update = () => {\n api.get(\"/trajects/\" + public_id).then(function (response) {\n setTrajects(response.data.trajects.reverse());\n });\n };\n\n const SwitchToSelectionFromAssignment = () => {\n handleCloseAssignment();\n setShowSelection(true);\n };\n\n const Close = () => {\n setShowSelection(false);\n setShowAssignmentOverlay(true);\n };\n\n const deleteTraject = (id) => {\n api.delete(\"/traject/\" + id).then(() => {\n setTrajects(trajects.filter((traject) => traject.id !== id));\n });\n };\n\n async function getExercisePage(page) {\n let start = 12 * (page - 5);\n let end = 12 * page - 5;\n const response = await api.get(\"/exercises\", { params: { start: start, end: end } });\n return response.output;\n }\n\n return (\n \n \n \n \n {patientLoading ? (\n \n ) : (\n \n {patientStore.patient.firstName + \" \" + patientStore.patient.lastName}\n \n )}\n \n {loading ? (\n \n ) : (\n trajects.map((traject, index) => {\n return (\n \n );\n })\n )}\n \n {showOverlayTraject && (\n \n \n \n {t(\"patientTaak.createTraject\")}\n \n \n \n )}\n {showSelection && (\n \n )}\n {showAssignmentOverlay && (\n \n \n \n {t(\"patientopdrachtaanmaken.makeAss\")}\n \n handleNav(\"zelf\")}>\n {t(\"patientTaak.newAss\")}\n \n handleNav(\"template\")}>\n {t(\"patientTaak.existingAss\")}\n \n \n {newAssignment ? (\n \n ) : (\n \n )}\n \n \n )}\n \n \n \n );\n});\n\nexport default PatientTaak;\n","import React, { useContext, useState } from \"react\";\nimport styled from \"styled-components\";\nimport Card from \"../components/styled/card\";\nimport { P } from \"../components/styled/typography\";\nimport { Link } from \"react-router-dom\";\nimport Button from \"../components/styled/button\";\nimport ProgressBar from \"../components/progressBar\";\nimport AreYouSure from \"../components/areYouSure\";\nimport { api } from \"../api\";\nimport { FaTasks, FaBook, FaPhone } from \"react-icons/fa\";\nimport PatientIcon from \"../assets/images/patient-icon.png\";\nimport PatientIconWoman from \"../assets/images/patient-icon-woman.png\";\nimport BertieIcon from \"../assets/images/bertie.png\";\nimport {} from \"../components/styled/animation\";\nimport { observer } from \"mobx-react\";\nimport RegistrationStore from \"./registrationStore\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAppInsightsContext } from '@microsoft/applicationinsights-react-js';\nimport { isAppInsigthsEnabled } from \"../insights\";\nimport { eventConstants, getInsightUserType } from \"../insights-constants\";\nimport { trackEvent } from \"../insights-track\";\n\nconst Wrapper = styled(Card)`\n padding: 20px;\n width: 100%;\n display: flex;\n flex-direction: column;\n margin-top: 5px;\n\n @media (min-width: 980px) {\n width: 49.5%;\n margin-top: 15px;\n }\n`;\n\nconst CardLink = styled(Link)`\n text-decoration: none;\n`;\n\nconst Info = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n }\n`;\n\nconst CenterBox = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nconst Icon = styled.img`\n height: 75px;\n width: 75px;\n margin-right: 5px;\n padding-left: 5px;\n\n @media (min-width: 980px) {\n height: 100px;\n width: 100px;\n }\n`;\n\nconst Name = styled(P)`\n color: #545454;\n font-weight: 700;\n font-size: 18px;\n margin: 0px;\n padding-top: 10px;\n`;\n\nconst Diagnose = styled(P)`\n margin: 0px;\n`;\n\nconst A = styled(Link)`\n color: #51c0cf;\n text-decoration: none;\n`;\n\nconst GreenButton = styled(Button)`\n background-color: #45ae7c;\n border-color: #45ae7c;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 16px;\n width: 100%;\n\n &:hover {\n background-color: #3a9168;\n border-color: #3a9168;\n }\n`;\n\nconst BlueButton = styled(Button)`\n background-color: #4d8b94;\n border-color: #4d8b94;\n display: flex;\n justify-content: center;\n align-items: center;\n margin-top: 5px;\n font-size: 16px;\n width: 100%;\n\n &:hover {\n background-color: #41757d;\n border-color: #41757d;\n }\n`;\n\nconst TaskIcon = styled(FaTasks)`\n color: #ffffff;\n margin-right: 10px;\n font-size: 16px;\n`;\n\nconst ResultIcon = styled(FaBook)`\n color: #ffffff;\n margin-right: 10px;\n font-size: 16px;\n`;\n\nconst PhoneIcon = styled(FaPhone)`\n color: #ffffff;\n margin-right: 10px;\n font-size: 16px;\n`;\n\nconst Column = styled.div`\n display: flex;\n flex-direction: column;\n margin-top: 15px;\n @media (min-width: 980px) {\n margin: 0px;\n }\n`;\n\nconst Flex = styled.div`\n display: flex;\n`;\n\nconst ColumnTopBottom = styled(Column)`\n justify-content: space-between;\n align-items: flex-start;\n margin-left: 20px;\n`;\n\nconst Assignments = styled.div`\n margin-top: 20px;\n`;\nconst TaskTitle = styled(P)`\n color: #545454;\n margin: 0px;\n margin-bottom: 5px;\n`;\n\nconst DeleteLink = styled.a`\n text-decoration: none;\n color: #dc393d;\n font-weight: bold;\n cursor: pointer;\n width: 15px;\n`;\n\nconst PatientCard = observer((props) => {\n const { t, i18n } = useTranslation();\n const registrationStore = useContext(RegistrationStore);\n const user = JSON.parse(registrationStore.user);\n const [Overlay, setOverlay] = useState(false);\n\n const isAiEnabled = isAppInsigthsEnabled();\n const appInsights = useAppInsightsContext();\n const trackProps = {\n user: {\n type: getInsightUserType(user.therapist),\n public_id: user.public_id \n } \n }\n\n const HandleOverlay = () => {\n setOverlay(!Overlay);\n };\n\n const HandleDelete = async () => {\n api.post(\"/disconnectPatient/\" + props.patient.public_id, { therapist_id: user.public_id });\n };\n\n return (\n \n X\n \n \n \n \n \n \n \n
\n {props.patient.firstName + \" \" + props.patient.lastName}\n \n
\n
\n trackEvent(isAiEnabled, appInsights, eventConstants.PRESS.CLIENTS.DETAILS.PAGE, trackProps)}\n >\n {t(\"patientCard.details\")}\n \n
\n
\n
\n \n trackEvent(isAiEnabled, appInsights, eventConstants.PRESS.CLIENTS.CARE_PATHS.PAGE, trackProps)}\n >\n \n \n {t(\"patientCard.trajects\")}\n \n \n trackEvent(isAiEnabled, appInsights, eventConstants.PRESS.CLIENTS.RESULTS.PAGE, trackProps)}\n >\n \n \n {t(\"patientCard.results\")}\n \n \n trackEvent(isAiEnabled, appInsights, eventConstants.PRESS.CLIENTS.START_VIDEO_CALL, trackProps)}\n >\n \n \n {t(\"patientCard.convo\")}\n \n \n \n \n {/**/}\n {t(\"patientcard.chat\")}\n \n \n \n
\n \n {props.patient.progress.map((progress, index) => (\n
\n {progress.title}\n \n
\n ))}\n
\n \n \n
\n );\n});\n\nexport default PatientCard;\n","import React, { useState, useEffect, useContext } from \"react\";\nimport { uuid } from \"uuidv4\";\nimport styled from \"styled-components\";\nimport Global from \"../../components/styled/global\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport PatientCard from \"../../components/patientCard\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { PageTitle, SmallTitle } from \"../../components/styled/typography\";\nimport Card from \"../../components/styled/card\";\nimport Button from \"../../components/styled/button\";\nimport SearchBar from \"../../components/search\";\nimport { api } from \"../../api\";\nimport { FaPlus, FaTimes } from \"react-icons/fa\";\nimport LoadSpinner from \"../../components/loadspinner\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport { observer } from \"mobx-react\";\nimport registrationStore from \"../../components/registrationStore\";\nimport patientStore from \"../../components/patientStore\";\nimport Flash from \"../../components/styled/flashMessage\";\nimport { useTranslation } from \"react-i18next\";\nimport createBertie, {\n createBertieDysfonie,\n createBertieDysfagie,\n} from \"../../components/helperComponents/createBertie\";\nimport createBertieEN from \"../../components/helperComponents/createBertieEN\";\nimport Pagination from \"../../components/libraryComponents/pagination\";\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column-reverse;\n\n @media (min-width: 980px) {\n flex-direction: row;\n }\n`;\n\nconst FlexBetween = styled(Flex)`\n justify-content: flex-start;\n align-items: space-between;\n margin-bottom: 25px;\n\n @media (min-width: 980px) {\n justify-content: space-between;\n align-items: center;\n }\n`;\n\nconst Patients = styled.div`\n display: flex;\n flex-direction: column;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n flex-wrap: wrap;\n }\n`;\n\nconst Title = styled(SmallTitle)`\n margin-top: 10px;\n margin-right: 40px;\n`;\n\nconst Plus = styled(FaPlus)`\n color: #ffffff;\n padding-right: 7px;\n transform: translateY(2px);\n`;\n\nconst Times = styled(FaTimes)`\n color: #545454;\n position: absolute;\n right: 20px;\n top: 20px;\n cursor: pointer;\n`;\n\nconst Overlay = styled.div`\n background-color: rgba(60, 60, 60, 0.7);\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n z-index: 999;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst OverlayCard = styled(Card)`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n position: relative;\n`;\n\nconst Input = styled.input`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n width: 300px;\n margin: 20px auto;\n font-size: 16px;\n`;\n\nconst OverlayTitle = styled(SmallTitle)`\n margin: 0px;\n`;\n\nconst Therapie = observer(() => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const patientstore = useContext(patientStore);\n const [showOverlay, setShowOverlay] = useState(false);\n const [showFlash, setShowFlash] = useState(false);\n const [flashContent, setFlashContent] = useState(\"\");\n const [isError, setIsError] = useState(false);\n const [patients, setPatients] = useState([]);\n const [filteredPatients, setFilteredPatients] = useState([]);\n const [loading, setLoading] = useState(true);\n const [totalPages, setTotalPages] = useState(0);\n const [pagination, setPagination] = useState({\n start:1,\n end:20\n });\n const [currentPage, setCurrentPage] = useState(1);\n\n function handlePageChange(dir) {\n setPagination({\n start: pagination.start + 20 * dir,\n end: pagination.end + 20 * dir,\n });\n setCurrentPage(currentPage + dir);\n }\n\n function handlePageForce(page) {\n setPagination({\n start: 20 * (page - 1) + 1,\n end: page * 20,\n });\n setCurrentPage(page);\n }\n\n const handleSearch = (e) => {\n if (e.target.value === \"\") {\n setFilteredPatients(patients);\n } else {\n var filtered = patients.filter(function (patient) {\n if (\n patient.firstName.toLowerCase().includes(e.target.value.toLowerCase()) ||\n patient.lastName.toLowerCase().includes(e.target.value.toLowerCase())\n ) {\n return patient;\n }\n });\n setFilteredPatients(filtered);\n }\n };\n\n const HandleSubmit = () => {\n const patientEmail = document.getElementById(\"patient_email\").value;\n api.post(\n \"/addPatientRequest\",\n { body: \"request\", sender_id: user.public_id, sender_name: user.firstName },\n { params: { email: document.getElementById(\"patient_email\").value } }\n ).then(function (response) {\n setShowFlash(true);\n if (response.data.Succes) {\n setFlashContent(t(\"therapie.linkSucc\"));\n api.post(\"/mailWithTemplate\", {\n sender: \"info@telephon.digital\",\n to: patientEmail,\n subject: \"Request to become a client\",\n template_name: \"request-to-become-client\",\n template_content: [{ name: \"therapist-name\", content: user.firstName + \" \" + user.lastName }],\n });\n } else if (response.data.NoUserError) {\n setFlashContent(t(\"therapie.noUser\"));\n setIsError(true);\n } else if (response.data.NoPatientError) {\n setFlashContent(t(\"therapie.noPatient\"));\n setIsError(true);\n } else if (response.data.AlreadyLinkedError) {\n setFlashContent(t(\"therapie.AlreadyLinked\"));\n setIsError(true);\n }\n update();\n });\n setShowOverlay(false);\n };\n\n const handleClick = () => {\n setShowOverlay(true);\n };\n\n const handleClose = () => {\n setShowOverlay(false);\n };\n\n const update = () => {\n setLoading(true);\n api.get(\"/patients\", { params: { therapist_id: user.public_id } }).then((response) => {\n setPatients(response.data.users);\n setFilteredPatients(response.data.users);\n setLoading(false);\n });\n };\n\n const createDummyAccount = async (therapist_id) => {\n if (i18n.language === \"nl\") {\n await createBertie(therapist_id);\n } else {\n await createBertieEN(therapist_id);\n }\n api.get(\"/patients\", \n { params: \n { \n therapist_id: user.public_id,\n start: pagination.start,\n end: pagination.end \n } \n }).then((response) => {\n setPatients(response.data.users);\n setFilteredPatients(response.data.users);\n setTotalPages(Math.ceil(response.data.total / 25));\n setLoading(false);\n });\n };\n\n const getPatients = () => {\n api.get(\"/patients\",\n { params: \n { \n therapist_id: user.public_id,\n start: pagination.start,\n end: pagination.end \n } \n }).then((response) => {\n if (response.data.users.length != 0) {\n setPatients(response.data.users);\n setFilteredPatients(response.data.users);\n setTotalPages(Math.ceil(response.data.total / 25));\n setLoading(false);\n } else {\n createDummyAccount(user.public_id);\n }\n })\n .catch((e) => {\n console.log(e);\n });\n }\n\n useEffect(() => {\n getPatients()\n }, []);\n\n useEffect(() => {\n getPatients()\n }, [pagination])\n\n return (\n \n \n \n \n {t(\"sidebarTherapist.therapy\")}\n \n \n {t(\"therapie.patienten\")}\n \n \n \n \n {showFlash && {flashContent}}\n {showOverlay && (\n \n \n \n {t(\"therapie.link\")}\n \n \n \n \n )}\n {loading ? (\n \n ) : (\n <> \n \n {filteredPatients.length > 0 && (\n filteredPatients.map((patient) => {\n return ;\n })\n )}\n {filteredPatients.length <= 0 && (\n
{t(\"therapie.noPatients\")}
\n )}\n
\n {totalPages && (\n handlePageChange(1)}\n prevFunction={() => handlePageChange(-1)}\n totalPages={totalPages}\n currentPage={currentPage}\n pageForce={handlePageForce}\n />\n \n )}\n \n )}\n
\n
\n
\n );\n});\n\nexport default Therapie;\n","import React, { useContext, useState } from \"react\";\nimport { Formik, Form, Field } from \"formik\";\nimport * as Yup from \"yup\";\nimport styled from \"styled-components\";\nimport { Redirect } from \"react-router-dom\";\nimport Button from \"../components/styled/button\";\nimport { api } from \"../api\";\nimport { observer } from \"mobx-react-lite\";\nimport registrationStore from \"../components/registrationStore\";\nimport Flash from \"../components/styled/flashMessage\";\nimport { useTranslation } from \"react-i18next\";\n\nconst DocumentForm = styled(Form)``;\n\nconst FormGroup = styled.div`\n display: flex;\n flex-direction: column;\n margin-bottom: 20px;\n`;\n\nconst Input = styled(Field)`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n`;\n\nconst Label = styled.label`\n font-size: 16px;\n font-weight: 600;\n color: #545454;\n`;\n\nconst SubmitButton = styled(Button)`\n margin-top: 0px;\n padding-right: 45px;\n padding-left: 45px;\n font-size: 18px;\n`;\nconst FlexLeft = styled.div`\n margin-top: 10px;\n display: flex;\n`;\n\nconst Error = styled.p`\n font-size: 16px;\n color: #fff;\n font-style: italic;\n background-color: #dc393d;\n border: 1px solid #dc393d;\n border-radius: 10px;\n padding: 10px 15px;\n`;\n\nconst Message = styled(Field)`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n margin-bottom: 10px;\n outline: none;\n width: 100%;\n height: 150px;\n`;\n\nconst HelpdeskForm = observer((props) => {\n const { t, i18n } = useTranslation();\n const [showFlash, setShowFlash] = useState(false);\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n return (\n
\n {\n api.post(\"/mail\", {\n body: \"request\",\n sender: \"info@telephon.digital\",\n message: `\n Afzender: ${values.email}\n \nBericht:\n${values.bericht}`,\n subject: \"Helpdesk aanvraag\",\n to: \"helpdesk@telephon.digital\",\n })\n .then(function (response) {\n setShowFlash(true);\n actions.resetForm();\n })\n .catch((e) => {\n setShowFlash(true);\n actions.resetForm();\n });\n }}\n render={({ errors, touched, values }, isSubmitting) => (\n \n {showFlash && {t(\"helpdeskForm.sentSucc\")}}\n \n \n

{user.email}

\n {touched.email && errors.email && {errors.email}}\n
\n \n \n \n {touched.bericht && errors.bericht && {errors.bericht}}\n \n {t(\"helpdeskForm.sent\")}\n
\n )}\n validationSchema={Yup.object().shape({\n email: Yup.string().required(t(\"helpdeskForm.emailPlace\")),\n email: Yup.string().email(t(\"helpdeskForm.corrEmailPlace\")),\n bericht: Yup.string().required(t(\"helpdeskForm.messagePlace\")),\n })}\n />\n
\n );\n});\n\nexport default HelpdeskForm;","import React, { useContext, useEffect, useState } from \"react\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport Notification from \"../../components/notification\";\nimport Global from \"../../components/styled/global\";\nimport { PageTitle } from \"../../components/styled/typography\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport registrationStore from \"../../components/registrationStore\";\nimport { observer } from \"mobx-react-lite\";\nimport { api } from \"../../api\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport { templateElement } from \"@babel/types\";\nimport HelpdeskForm from \"../../components/helpdeskForm\";\nimport { P } from \"../../components/styled/typography\";\nimport { useTranslation } from \"react-i18next\";\n\nconst HelpdeskT = observer(() => {\n const { t, i18n } = useTranslation();\n const [messages, setMessages] = useState([]);\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n\n useEffect(() => {\n api.get(\"/user/\" + user.public_id + \"/inbox\").then((response) => {\n setMessages(response.data.inbox);\n });\n }, []);\n\n const update = () => {\n api.get(\"/user/\" + user.public_id + \"/inbox\").then((response) => {\n setMessages(response.data.inbox);\n });\n };\n\n return (\n \n \n \n \n {t(\"accountMenuDropdown.helpdesk\")}\n

{t(\"helpdesk.needHelp\")}

\n \n

{t(\"helpdesk.urgent\")}

\n
\n
\n
\n );\n});\n\nexport default HelpdeskT;\n","import React, { useContext, useEffect, useState } from \"react\";\nimport PatientOverlay from \"../../components/overlays/patientOverlay\";\nimport Notification from \"../../components/notification\";\nimport Global from \"../../components/styled/global\";\nimport { PageTitle } from \"../../components/styled/typography\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport registrationStore from \"../../components/registrationStore\";\nimport { observer } from \"mobx-react-lite\";\nimport { api } from \"../../api\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport { templateElement } from \"@babel/types\";\nimport HelpdeskForm from \"../../components/helpdeskForm\";\nimport { P } from \"../../components/styled/typography\";\nimport { useTranslation } from \"react-i18next\";\n\nconst HelpdeskP = observer(() => {\n const { t, i18n } = useTranslation();\n const [messages, setMessages] = useState([]);\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n\n useEffect(() => {\n api.get(\"/user/\" + user.public_id + \"/inbox\").then((response) => {\n setMessages(response.data.inbox);\n });\n }, []);\n\n const update = () => {\n api.get(\"/user/\" + user.public_id + \"/inbox\").then((response) => {\n setMessages(response.data.inbox);\n });\n };\n\n return (\n \n \n \n \n {t(\"accountMenuDropdown.helpdesk\")}\n

{t(\"helpdesk.needHelp\")}

\n \n

{t(\"helpdesk.urgent\")}

\n
\n
\n
\n );\n});\n\nexport default HelpdeskP;\n","import React, { useEffect, useState, useContext } from \"react\";\nimport styled from \"styled-components\";\nimport { Link } from \"react-router-dom\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport Global from \"../../components/styled/global\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { api } from \"../../api\";\nimport Dagboek from \"../../components/exercises/dagboek\";\nimport Stappenplan from \"../../components/exercises/stappenplan\";\nimport StappenplanMetValidatie from \"../../components/exercises/stappenplanMetValidatie\";\nimport LoadSpinner from \"../../components/loadspinner\";\nimport { observer } from \"mobx-react\";\nimport registrationStore from \"../../components/registrationStore\";\nimport Actions from \"../../components/exerciseUtilities/videoRecorder/videoRenderActions\";\nimport ResultStore from \"../../components/resultStore\";\nimport { Redirect } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport qs from \"qs\";\nimport { getResourceUrl } from \"../../azure\";\n\nconst GoBack = styled(Link)`\n padding: 10px 20px;\n border: 1px solid #51c0cf;\n background-color: #51c0cf;\n cursor: pointer;\n color: white;\n border-radius: 5px;\n text-decoration: none;\n`;\n\nconst BackButton = styled.div`\n margin-top: 30px;\n`;\n\nconst TaakDetail = observer((props) => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const Rstore = useContext(ResultStore);\n const user = JSON.parse(store.user);\n const { id } = props.match.params;\n const [exercise, setExercise] = useState({});\n const [taskDescription, setTaskDescriptions] = useState(\"\");\n const [loading, setLoading] = useState(true);\n const [redirect, setRedirect] = useState(false);\n const isExampleEx = qs.parse(props.location.search, { ignoreQueryPrefix: true }).preview;\n const isReview = qs.parse(props.location.review, { ignoreQueryPrefix: true }).preview;\n\n let exerciseComponent;\n let startTime = Date.now();\n useEffect(() => {\n api.get(\"/exercise/\" + id).then((response) => {\n setExercise(response.data.output);\n setLoading(false);\n });\n Rstore.clearRecording();\n }, []);\n\n const HandleRecording = (blob) => {\n let formData = new FormData();\n formData.append(\"recording\", blob);\n Rstore.setRecording(formData);\n };\n\n const EndExercise = () => {\n setRedirect(true);\n };\n\n const getResource = (id) => {\n return api.get(\"/file/\" + id).then((response) => {\n return getResourceUrl(response.data.file) \n })\n }\n\n if (exercise.type === \"dagboek\") {\n exerciseComponent = (\n \n );\n } else if (exercise.type === \"stappenplan\") {\n exerciseComponent = (\n \n );\n } else if (exercise.type === \"stappenplanValidatie\") {\n exerciseComponent = (\n \n );\n } else {\n exerciseComponent =
{t(\"taakDetail.wrong\")}
;\n }\n\n if (loading) {\n return ;\n } else {\n return (\n \n \n \n {isExampleEx == \"true\" && (\n \n {t(\"taakDetail.terugnaaraanvragen\")}\n \n )}\n {isReview == \"true\" && (\n \n {t(\"taakDetail.terugNaarAdmin\")}\n \n )}\n {exerciseComponent}\n {redirect &&\n (isExampleEx == \"true\" ? (\n \n ) : (isReview == \"true\" ? (\n \n ) : (\n \n )))}\n \n \n );\n }\n});\n\nexport default TaakDetail;\n","import * as Sentry from '@sentry/browser';\n\nexport const isProduction = process.env.NODE_ENV === 'production';\n\n\nexport const captureException = (err, description) => {\n if (!isProduction) {\n console.error(err, description)\n }\n\n Sentry.withScope(scope => {\n scope.setExtras(description);\n Sentry.captureException(err);\n });\n};\n","import {Component} from 'react';\nimport {captureException} from '../helpers/errorHelper';\n\nclass ErrorBoundary extends Component {\n componentDidCatch(error, errorInfo) {\n captureException(error);\n }\n\n render() {\n return this.props.children;\n }\n}\n\nexport default ErrorBoundary;\n","let theme = {\n name: 'Telephon',\n colors: {\n blue: ['#e9f4f6', '#daecf1', '#b5dae3', '#6bb5c7', '#388294', '#1c414a'],\n grey: ['#F2F2F2', '#bdb9bb', '#918b8d', '#655d60', '#4f4649', '#23181c', '#0d0106'],\n green: ['#C6F4E4', '#8AEFCC', '#1FA073'],\n red: ['#F4B5BD', '#C76774', '#AE5460'],\n orange: ['#F1E1C1', '#F7BA39', '#AE8124'],\n white: '#ffffff'\n },\n breakpoints: ['480px', '839px', '1240px'],\n space: [0, 4, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256],\n fontSizes: [12, 14, 16, 18, 20, 24, 30, 36, 48, 60, 72]\n};\n\nconst extendedTheme = {\n ...theme,\n mediaQueries: {\n small: `@media screen and (min-width: ${theme.breakpoints[0]})`,\n medium: `@media screen and (min-width: ${theme.breakpoints[1]})`,\n large: `@media screen and (min-width: ${theme.breakpoints[2]})`\n },\n colors: {\n ...theme.colors,\n primary: theme.colors.blue[3],\n primaryLight: [theme.colors.blue[3], theme.colors.blue[2], theme.colors.blue[1], theme.colors.blue[0]],\n primaryDark: [theme.colors.blue[4], theme.colors.blue[5]],\n grey: theme.colors.grey[3],\n greyLight: [theme.colors.grey[2], theme.colors.grey[1], theme.colors.grey[0]],\n greyDark: [theme.colors.grey[4], theme.colors.grey[5], theme.colors.grey[6]],\n success: theme.colors.green[1],\n successLight: [theme.colors.green[0]],\n successDark: [theme.colors.green[2]],\n error: theme.colors.red[2],\n textColor: theme.colors.grey[5],\n titleColor: theme.colors.grey[4]\n },\n components: {\n button: {\n 'border-radius': '0px'\n },\n input: {\n 'border': 'none !important',\n 'background-color': theme.colors.blue[1]\n }\n }\n};\n\nexport default extendedTheme;\n","import styled from 'styled-components';\nimport {color, compose, space, typography, flexbox} from 'styled-system';\n\nconst Text = styled.div`\n ${compose(\n space,\n color,\n typography,\n flexbox\n )};\n`;\n\nText.defaultProps = {\n color: 'textColor',\n};\n\nexport default Text;\n","import api from '../api';\n\nconst createCall = (body) => api.getCommunicationApi().post(`/calls`, body);\nconst getActiveCalls = () => api.getCommunicationApi()?.get(`/calls?active=true`);\nconst finishCall = (id) => api.getCommunicationApi().put(`/calls/${id}`, {id, finished: true});\n\nexport default {\n createCall,\n getActiveCalls,\n finishCall\n}\n","import styled, {css} from 'styled-components';\nimport {compose, flexbox, color, space, typography} from 'styled-system';\nimport PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\n\nconst Icon = styled(FontAwesomeIcon)`\n ${compose(flexbox, space, color, typography)};\n \n ${props => props.addHover && css`\n cursor: pointer;\n \n &:hover {\n opacity: 0.8;\n }\n `};\n`;\n\nIcon.propTypes = {\n addHover: PropTypes.bool\n};\n\nexport default Icon;\n","import React from 'react';\nimport Icon from './icon';\nimport Text from './text';\nimport styled from 'styled-components';\nimport {faArrowLeft} from '@fortawesome/free-solid-svg-icons';\n\nconst Container = styled.div`\n display: flex;\n align-items: center;\n cursor: pointer;\n\n &:hover {\n opacity: 0.8;\n }\n`;\nconst BackButton = ({children}) => {\n return (\n \n \n \n {children}\n \n \n );\n};\n\nexport default BackButton;\n","import {createContext} from 'react';\nimport {action, observable} from 'mobx';\n\nclass AuthenticationStore {\n @observable redirectToLogin = false;\n\n @action setRedirectToLogin(bool) {\n localStorage.removeItem('user');\n this.redirectToLogin = bool;\n }\n}\n\nexport const AuthenticationStoreInstance = new AuthenticationStore();\n\nexport default createContext(AuthenticationStoreInstance);\n","import {createContext} from 'react';\nimport {observable, action} from 'mobx';\n\nclass LibraryStore {\n @observable activeMediaId = null;\n @observable activeDocumentId = null;\n @observable activeExerciseId = null;\n @observable activeExerciseResult = null;\n @observable activeStep = 1;\n @observable activeMiniStep = 1;\n\n @action setActiveMediaId(id) {\n this.activeMediaId = id;\n this.activeDocumentId = null;\n this.activeExerciseId = null;\n }\n\n @action setActiveDocumentId(id) {\n this.activeDocumentId = id;\n this.activeMediaId = null;\n this.activeExerciseId = null;\n }\n\n @action setActiveExerciseId(id) {\n this.activeExerciseId = id;\n this.activeMediaId = null;\n this.activeDocumentId = null;\n }\n\n @action setActiveExerciseResult(result) {\n this.activeExerciseResult = result;\n }\n\n @action setActiveStep(stepNumber) {\n this.activeStep = stepNumber;\n }\n\n @action setActiveMiniStep(stepNumber) {\n this.activeMiniStep = stepNumber;\n }\n}\n\nexport const LibraryStoreInstance = new LibraryStore();\n\nexport default createContext(LibraryStoreInstance);\n","import Peer from 'peerjs';\nimport io from \"socket.io-client\";\nimport api from '../api';\nimport {captureException} from '../helpers/errorHelper';\nimport {CommunicationStoreInstance} from '../stores/communication.store';\nimport {AuthenticationStoreInstance} from '../stores/authentication.store';\nimport {ChatStoreInstance} from '../stores/chat.store';\nimport {\n AUTHENTICATE_EVENT,\n CALL_FINISHED_EVENT,\n EXERCISE_CHANGE_MINI_STEP,\n EXERCISE_CHANGE_STEP,\n EXERCISE_RESULT,\n MEDIA_SELECTED_BY_THERAPIST,\n DOCUMENT_SELECTED_BY_THERAPIST,\n EXERCISE_SELECTED_BY_THERAPIST,\n INCOMING_CALL_EVENT,\n UNAUTHORIZED_EVENT,\n INCOMING_CONVERSATION_EVENT,\n CONVERSATION_FINISHED_EVENT,\n INCOMMING_MESSAGE_EVENT,\n UPDATE_SETTING_EVENT,\n UPDATE_MOUSE_EVENT\n} from '../events';\nimport {LibraryStoreInstance} from '../stores/library.store';\n\n// let dataStreamConnection = null;\nlet videoCallConnection = null;\nlet localStream = null;\n\n// const getDataStreamConnection = () => dataStreamConnection;\nconst getVideoCallConnection = () => videoCallConnection;\nconst getLocalStream = () => localStream;\n\nconst initializeWebsocketConnection = () => {\n const socket = io.connect(api.getSocketUrl(), {\n path: '/socket/socket/call',\n transports: ['polling', 'websocket'],\n upgrade: false\n });\n\n socket.emit(AUTHENTICATE_EVENT, {token: localStorage.getItem('token')})\n .on(UNAUTHORIZED_EVENT, () => AuthenticationStoreInstance.setRedirectToLogin(true))\n .on(INCOMING_CALL_EVENT, () => CommunicationStoreInstance.showActiveCallBanner())\n .on(CALL_FINISHED_EVENT, () => CommunicationStoreInstance.setIsCallFinished(true))\n .on(MEDIA_SELECTED_BY_THERAPIST, (id) => {\n LibraryStoreInstance.setActiveMediaId(id);\n })\n .on(DOCUMENT_SELECTED_BY_THERAPIST, (id) => {\n LibraryStoreInstance.setActiveDocumentId(id);\n })\n .on(EXERCISE_SELECTED_BY_THERAPIST, (id) => {\n LibraryStoreInstance.setActiveMiniStep(1);\n LibraryStoreInstance.setActiveStep(1);\n LibraryStoreInstance.setActiveExerciseResult(null);\n LibraryStoreInstance.setActiveExerciseId(id);\n })\n .on(EXERCISE_RESULT, (result) => LibraryStoreInstance.setActiveExerciseResult(result))\n .on(EXERCISE_CHANGE_STEP, (stepNumber) => LibraryStoreInstance.setActiveStep(stepNumber))\n .on(EXERCISE_CHANGE_MINI_STEP, (stepNumber) => LibraryStoreInstance.setActiveMiniStep(stepNumber))\n .on(INCOMING_CONVERSATION_EVENT, () => ChatStoreInstance.setNumberOfChats(ChatStoreInstance.numberOfChats + 1))\n .on(CONVERSATION_FINISHED_EVENT, () => ChatStoreInstance.setNumberOfChats(ChatStoreInstance.numberOfChats - 1))\n .on(INCOMMING_MESSAGE_EVENT, (chat) => ChatStoreInstance.setActiveChat(chat, true))\n .on(UPDATE_SETTING_EVENT, (settings) => CommunicationStoreInstance.setSettings(settings))\n .on(UPDATE_MOUSE_EVENT, (mousePos) => CommunicationStoreInstance.setMousePosition(mousePos));\n\n socket.on('connect_error', (error) => {\n console.log(error)\n });\n};\n\nconst initializeVideoCallConnection = async (userId) => {\n \n videoCallConnection = new Peer({\n host: 'peerjs.telephon.digital',\n path: 'myapp',\n secure: true,\n debug: 3,\n config: {\n 'iceServers': [\n {url: 'stun:stun.l.google.com:19302'},\n {url: 'stun:stun1.l.google.com:19302'}\n ]\n }, \n });\n videoCallConnection.on('open', (id) => {\n return api.getCommunicationApi().patch(`/users/${userId}`, {videoCallConnectionId: id})\n });\n};\n\nconst initializeLocalVideoStream = (hasAudio = true) => {\n return navigator.mediaDevices.getUserMedia({video: true, audio: hasAudio})\n .then(stream => {\n localStream = stream;\n return stream;\n })\n .catch(err => captureException('Failed to open media stream ', err));\n};\n\nconst initializeScreenShareStream = () => {\n return navigator.mediaDevices.getDisplayMedia().then( stream => {\n localStream.addTrack(stream.getTracks()[0]);\n console.log(\"intitiaalize\", localStream);\n return stream;\n })\n .catch(err => captureException('Failed to open media stream ', err));\n};\n\nconst stopLocalStream = () => {\n if (localStream) {\n localStream.getTracks().forEach(track => track.stop());\n localStream.getVideoTracks().forEach(track => track.stop())\n localStream = null;\n }\n};\n\nconst destroyVideoConnection = (userId) => {\n videoCallConnection.destroy();\n // if (dataStreamConnection) dataStreamConnection.destroy();\n return initializeVideoCallConnection(userId);\n};\n\nexport default {\n initializeVideoCallConnection,\n // initializeDataStreamConnection,\n initializeLocalVideoStream,\n initializeScreenShareStream,\n initializeWebsocketConnection,\n getVideoCallConnection,\n // getDataStreamConnection,\n getLocalStream,\n stopLocalStream,\n destroyVideoConnection\n}\n","\nexport const INCOMING_CALL_EVENT = 'incoming-call';\nexport const UNAUTHORIZED_EVENT = 'unauthorized';\nexport const AUTHENTICATE_EVENT = 'authenticate';\nexport const CALL_FINISHED_EVENT = 'call-finished';\nexport const MEDIA_SELECTED_BY_THERAPIST = 'media-selected-by-therapist';\nexport const DOCUMENT_SELECTED_BY_THERAPIST = 'document-selected-by-therapist';\nexport const EXERCISE_SELECTED_BY_THERAPIST = 'exercise-selected-by-therapist';\nexport const EXERCISE_RESULT = 'exercise-result';\nexport const EXERCISE_CHANGE_STEP = 'exercise-change-step';\nexport const EXERCISE_CHANGE_MINI_STEP = 'exercise-change-mini-step';\nexport const INCOMING_CONVERSATION_EVENT = 'incoming-chat';\nexport const CONVERSATION_FINISHED_EVENT = 'chat-finished';\nexport const INCOMMING_MESSAGE_EVENT = 'chat-message-incomming';\nexport const UPDATE_SETTING_EVENT = 'update-partner-setting';\nexport const UPDATE_MOUSE_EVENT = 'update-mouse-event';\n","import {createContext} from 'react';\nimport {action, observable} from 'mobx';\nimport callService from '../services/callService';\nimport api from '../api';\nimport communicationService from '../services/communicationService';\nimport userService from '../services/userService';\n\n\n\nclass CommunicationStore {\n @observable isActiveCallBannerShown = false;\n @observable isInCall = false;\n @observable activeCall = null;\n @observable isCallFinished = false;\n @observable initialized = false;\n @observable connected = true;\n @observable user = null;\n @observable fftSize = 2048;\n @observable sampleRate = 44100;\n @observable filterCutoff = 1000;\n @observable settings = null;\n @observable settingsChanged = false;\n @observable mousePosition = null;\n @observable mouseChanged = false;\n @observable jitterDisplay = false;\n @observable shimmerDisplay = false;\n @observable fundamentalDisplay = false;\n @observable intensityDisplay = false;\n @observable hnrDisplay = false;\n @observable recorderDisplay = false;\n @observable spectrogramDisplay = false;\n @observable spectrogramDim = false;\n @observable calibrationDisplay = false;\n\n @action showActiveCallBanner() {\n this.isActiveCallBannerShown = true;\n }\n\n @action hideActiveCallBanner() {\n this.isActiveCallBannerShown = false;\n }\n\n @action setIsInCall(bool) {\n this.isInCall = bool;\n }\n\n @action setActiveCall(call) {\n this.activeCall = call;\n }\n\n @action finishActiveCall() {\n callService.finishCall(this.activeCall.id);\n communicationService.destroyVideoConnection(this.user.public_id);\n this.connected = false;\n this.setActiveCall(null);\n }\n\n @action initialize(userId) {\n api.createAPI();\n communicationService.initializeWebsocketConnection();\n\n Promise.all([\n communicationService.initializeVideoCallConnection(userId),\n // communicationService.initializeDataStreamConnection(userId),\n this.fetchAndSetUser(userId)\n ]).then(() => this.initialized = true);\n }\n\n // @action initializeData(userId) {\n // communicationService.initializeDataStreamConnection(userId);\n // }\n\n @action setFilterCutoff(value) {\n this.filterCutoff = value;\n }\n\n @action setSampleRate(value) {\n this.sampleRate = value;\n }\n\n @action setFftSize(value) {\n this.fftSize = value;\n }\n\n\n\n @action setCalibrationDisplay(bool) {\n this.calibrationDisplay = bool;\n }\n\n @action setIsCallFinished(bool) {\n this.isCallFinished = bool;\n }\n\n @action setJitterDisplay(bool) {\n this.jitterDisplay = bool;\n }\n\n @action setSpectrogramDisplay(bool) {\n this.spectrogramDisplay = bool;\n }\n @action setSpectrogramDim(bool) {\n this.spectrogramDim = bool;\n }\n @action setShimmerDisplay(bool) {\n this.shimmerDisplay = bool;\n }\n @action setFundamentalDisplay(bool) {\n this.fundamentalDisplay = bool;\n }\n @action setIntensityDisplay(bool) {\n this.intensityDisplay = bool;\n }\n @action setHnrDisplay(bool) {\n this.hnrDisplay = bool;\n }\n @action setRecorderDisplay(bool) {\n this.recorderDisplay = bool;\n }\n\n @action setSettings(s) {\n this.settings = s;\n this.setSettingsChanged(true);\n }\n\n @action setSettingsChanged(bool) {\n this.settingsChanged = bool;\n }\n\n @action setMousePosition(pos) {\n this.mousePosition = pos;\n this.setMouseChanged(true);\n }\n\n @action setMouseChanged(bool) {\n this.mouseChanged = bool;\n }\n\n fetchAndSetUser(userId) {\n return userService.getUser(userId).then(({data}) => this.user = data);\n }\n}\n\nexport const CommunicationStoreInstance = new CommunicationStore();\n\nexport default createContext(CommunicationStoreInstance);\n","import React, {useState} from 'react';\nimport {PrimaryButton} from '@eu.jstack/react-button';\nimport styled, {css} from 'styled-components';\nimport PropTypes from 'prop-types';\nimport Icon from './icon';\nimport {\n faPhoneAlt,\n faShareSquare,\n faMicrophoneSlash,\n faMousePointer,\n faMicrophone, faVideoSlash, faVideo\n} from '@fortawesome/free-solid-svg-icons';\nimport {compose, position} from 'styled-system';\nimport {faSlideshare} from \"@fortawesome/free-brands-svg-icons\";\n\nconst ButtonContainer = styled(PrimaryButton)`\n position: absolute;\n left: ${props => props.left};\n border-radius: 50%;\n width: 60px;\n height: 60px;\n transition: all ease-out 0.3s;\n opacity: 0;\n transform: translateY(150%);\n z-index: 2;\n ${compose(position)}; \n \n ${props => props.show && css`\n opacity: 1;\n transform: translateY(0%);\n `};\n \n :hover {\n transition: all linear 0.1s;\n transition-delay: 0s;\n margin-bottom: 10px;\n }\n`;\n\nconst HangupCallButton = ({show, clickCallbacks, muteAudio, muteVideo, activeMouseShare, activeScreenShare}) => {\n return (\n <>\n {/* \n \n */}\n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n {/* \n \n */}\n \n )\n};\n\nHangupCallButton.propTypes = {\n show: PropTypes.bool,\n onClick: PropTypes.func\n};\n\nexport default HangupCallButton;\n","import React, {useEffect, useRef} from 'react';\n\nfunction useInterval(callback, delay) {\n const savedCallback = useRef();\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n useEffect(() => {\n function tick() {\n savedCallback.current();\n }\n if (delay !== null) {\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n}\n\nexport default useInterval;\n","import React, {useState, useEffect} from 'react';\nimport styled, {css} from 'styled-components';\nimport moment from 'moment';\nimport PropTypes from 'prop-types';\nimport Icon from './icon';\nimport {faClock} from '@fortawesome/free-solid-svg-icons';\nimport {compose, position} from 'styled-system';\nimport Text from './text';\nimport useInterval from '../hooks/useInterval';\n\nconst StopWatchContainer = styled.div`\n position: absolute;\n display: flex;\n align-items: center;\n transition: all ease-out 0.3s;\n opacity: 0;\n transform: translateY(150%);\n z-index: 2;\n ${compose(position)};\n width: 100px;\n border-radius: 50px;\n background: ${props => props.theme.colors.primary};\n padding: 10px;\n \n ${props => props.show && css`\n opacity: 1;\n transform: translateY(0%);\n `};\n`;\n\nconst StopWatch = ({show}) => {\n const [seconds, setSeconds] = useState(0);\n\n const formatTime = () => moment().hour(0).minute(0).second(seconds).format('HH:mm:ss');\n\n useInterval(() => {\n setSeconds(seconds + 1);\n }, 1000);\n\n return (\n \n \n {formatTime()}\n \n )\n};\n\nStopWatch.propTypes = {\n show: PropTypes.bool\n};\n\nexport default StopWatch;\n","import React, {useEffect, useRef, useState} from 'react';\nimport styled from 'styled-components';\nimport {Line} from 'react-chartjs-2';\nimport extendedTheme from '../theme';\n\nconst GraphContainer = styled.div`\n width: 250px;\n height: 200px;\n`;\n\nconst GraphDrawer = (props) => {\n const requestRef = useRef();\n const fps = 15;\n const secondsToShow = 30;\n const labels = Array.from({length: fps * secondsToShow}, () => 0);\n const [data, setData] = useState({\n labels: labels,\n datasets: [\n {\n label: props.title,\n fill: false,\n lineTension: 1,\n backgroundColor: extendedTheme.colors.primary,\n borderColor: extendedTheme.colors.primary,\n pointDot: true,\n data: labels,\n }\n ]\n });\n\n useEffect(() => {\n if (props.hasRemoteStream) {\n props.initializeAudioAnalyser();\n requestRef.current = requestAnimationFrame(runSpectrum);\n return () => cancelAnimationFrame(requestRef.current);\n }\n }, [props.hasRemoteStream]);\n\n const runSpectrum = () => {\n props.getData(plotData);\n requestRef.current = requestAnimationFrame(runSpectrum);\n };\n\n const plotData = (freq) => {\n const dataset = data.datasets[0];\n const newState = {\n ...data,\n datasets: [{\n ...dataset,\n data: [...dataset.data, ...[freq]].slice(-(fps * secondsToShow))\n }]\n };\n setData(newState);\n };\n\n return (\n \n \n \n );\n};\n\nexport default GraphDrawer;\n","// Gekopieerd uit volgende repository: https://github.com/cwilso/PitchDetect\nexport const autoCorrelate = (buf, sampleRate) => {\n // Implements the ACF2+ algorithm\n let SIZE = buf.length;\n let rms = 0;\n \n for (let i = 0; i < SIZE; i++) {\n const val = buf[i];\n rms += val * val;\n }\n rms = Math.sqrt(rms / SIZE);\n if (rms < 0.01){ // not enough signal\n return 0;\n }\n \n //TRIM\n let r1 = 0, r2 = SIZE - 1, thres = 0.2;\n for (let i = 0; i < SIZE / 2; i++){\n if (Math.abs(buf[i]) < thres) { \n r1 = i; \n break; \n }\n }\n for (let i = 1; i < SIZE / 2; i++){\n if (Math.abs(buf[SIZE - i]) < thres) { \n r2 = SIZE - i; \n break; \n }\n }\n \n buf = buf.slice(r1, r2);\n SIZE = buf.length;\n \n //AUTO-CORRELATION\n const c = new Array(SIZE).fill(0);\n for (let i = 0; i < SIZE; i++){\n for (let j = 0; j < SIZE - i; j++){\n c[i] = c[i] + buf[j] * buf[j + i];\n }\n }\n \n //FIND FIRST DIP\n let d = 0; \n while (c[d] > c[d + 1]) {\n d++;\n }\n \n //FIND MAX\n let maxval = -1, maxpos = -1;\n for (let i = d; i < SIZE; i++) {\n if (c[i] > maxval) {\n maxval = c[i];\n maxpos = i;\n }\n }\n let T0 = maxpos;\n \n //INTERPOLATION\n const x1 = c[T0 - 1], x2 = c[T0], x3 = c[T0 + 1];\n const a = (x1 + x3 - 2 * x2) / 2;\n const b = (x3 - x1) / 2;\n if (a) {\n T0 = T0 - b / (2 * a);\n } \n return sampleRate / T0;\n }\n","\nconst calculateCorrelation = require(\"calculate-correlation\");\n\nexport const autoCorrelateHnr = (buf, sampleRate) => {\n // Implements the ACF2+ algorithm\n let SIZE = buf.length;\n let rms = 0;\n\n\n for (let i = 0; i < SIZE; i++) {\n const val = buf[i];\n rms += val * val;\n }\n rms = Math.sqrt(rms / SIZE);\n if (rms < 0.01){ // not enough signal\n return 0;\n }\n\n //TRIM\n let r1 = 0, r2 = SIZE - 1, thres = 0.2;\n for (let i = 0; i < SIZE / 2; i++){\n if (Math.abs(buf[i]) < thres) { \n r1 = i; \n break; \n }\n }\n for (let i = 1; i < SIZE / 2; i++){\n if (Math.abs(buf[SIZE - i]) < thres) { \n r2 = SIZE - i; \n break; \n }\n }\n\n \n buf = buf.slice(r1, r2);\n SIZE = buf.length;\n\n //AUTO-CORRELATION\n //i is lag\n //j loops through sample\n const c = new Array(SIZE).fill(0);\n for (let i = 0; i < SIZE; i++){\n for (let j = 0; j < SIZE - i; j++){\n\n c[i] = c[i] + buf[j] * buf[j + i];\n }\n }\n \n //FIND FIRST DIP\n let d = 0; \n while (c[d] > c[d + 1]) {\n d++;\n }\n \n //FIND MAX\n let maxval = -1, maxpos = -1;\n for (let i = d; i < SIZE; i++) {\n if (c[i] > maxval) {\n maxval = c[i];\n maxpos = i;\n }\n }\n let T0 = maxpos;\n\n const newbuf = new Array(SIZE-T0).fill(0);\n for (let i = 0; i < SIZE-T0; i++){\n newbuf[i] = buf[i]\n }\n\n const newbufT = new Array(SIZE-T0).fill(0);\n for (let i = 0; i < SIZE-T0; i++){\n newbufT[i] = buf[T0 + i]\n }\n\n const config = {\n string: true,\n decimals: 100,\n };\n const correlation = calculateCorrelation(newbuf, newbufT,config);\n\n let hnr = 10 * Math.log10( correlation / (1 - correlation))\n\n return hnr\n}\n","import React, { Component } from \"react\";\nimport styled from 'styled-components';\nimport AudioAnalyser from \"react-audio-analyser\";\n\nconst Button = styled.button`\n /* Adapt the colors based on primary prop */\n background: ${props => props.primary ? \"palevioletred\" : \"white\"};\n color: black};\n\n font-size: 1em;\n margin: 1em;\n padding: 0.25em 1em;\n border: 2px solid palevioletred;\n border-radius: 3px;\n z-index: 100;\n &:hover {\n border-color: ${props => props.theme.colors.primary};\n cursor: pointer;\n }\n`;\n\nexport default class AudioRecorder extends Component {\n constructor(props) {\n super(props);\n this.state = {\n status: \"\"\n };\n }\n\n controlAudio(status) {\n this.setState({\n status\n });\n }\n\n recordButtonStart(){\n document.getElementById('recorderStart').style.backgroundColor = \"violet\";\n }\n\n recordButtonPause(){\n document.getElementById('recorderStart').style.backgroundColor = \"white\";\n }\n\n recordButtonStop(){\n document.getElementById('recorderStart').style.backgroundColor = \"white\";\n }\n\n changeScheme(e) {\n this.setState({\n audioType: e.target.value\n });\n }\n\n componentDidMount() {\n this.setState({\n audioType: \"audio/wav\"\n });\n }\n\n render() {\n const { status, audioSrc, audioType } = this.state;\n const audioProps = {\n audioType,\n width: 0,\n height: 0,\n // audioOptions: {sampleRate: 30000}, // 设置输出音频采样率\n status,\n audioSrc,\n timeslice: 1000, // timeslice(https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder/start#Parameters)\n startCallback: e => {\n console.log(\"succ start\", e);\n },\n pauseCallback: e => {\n console.log(\"succ pause\", e);\n },\n stopCallback: e => {\n this.setState({\n audioSrc: window.URL.createObjectURL(e)\n });\n console.log(\"succ stop\", e);\n },\n onRecordCallback: e => {\n console.log(\"recording\", e);\n },\n errorCallback: err => {\n console.log(\"error\", err);\n }\n };\n return (\n
\n \n
\n {this.controlAudio(\"recording\"); this.recordButtonStart()}}\n >\n Record\n \n \n {this.controlAudio(\"inactive\"); this.recordButtonPause()}}\n >\n Stop\n \n \n
\n
\n

Choose audio output format

\n this.changeScheme(e)}\n value={audioType}\n >\n \n \n \n \n
\n );\n }\n}\n","import React, {useContext, useRef, useEffect, useState} from 'react';\nimport styled from 'styled-components';\nimport {observer} from 'mobx-react-lite';\nimport GraphDrawer from './graphDrawer';\nimport {autoCorrelate} from '../helpers/pitchHelper';\nimport {autoCorrelateHnr} from '../helpers/hnrHelper';\nimport {getShimmerValues} from '../helpers/shimmerHelper';\nimport {getJitterValues} from '../helpers/jitterHelper';\nimport CommunicationStore from '../stores/communication.store';\nimport {resetResults} from './containers/videoCallPage';\nimport GetCursorPosition from 'cursor-position'\nimport Icon from './icon';\nimport {faVolumeDown, faVolumeUp} from '@fortawesome/free-solid-svg-icons';\nimport AudioRecorder from \"./audioRecorder.js\";\nvar spectrogram = require('spectrogram');\nvar spectro;\n\nconst AnalyserContainer = styled.div`\n margin-bottom: 20px;\n display: flex;\n justify-content: flex-end;\n flex-direction: row; \n flex-wrap: wrap;\n z-index: 1;\n align-content: center;\n margin-right: 10px;\n margin-left: 35vw;\n`;\n\nconst SliderContainer = styled.div`\n margin-bottom: 20px;\n display: flex;\n justify-content: flex-end;\n flex-direction: row; \n flex-wrap: wrap;\n z-index: 1;\n align-content: center;\n margin-right: 10px;\n margin-left: 35vw;\n gap: 10px;\n`;\n\nconst SpectrumContainer = styled.div`\n height: 500px;\n`;\n\nconst wrapper = styled.div` \n flex-direction: column;\n display: grid;\n grid-template-columns: repeat(2, 50px);\n grid-auto-rows: 80px;\n z-index: 1;\n margin-right: 0;\n margin-left: auto;\n width: 100;\n`;\n\n\n\nconst box1 = styled.div`\n grid-column-start: 1;\n grid-column-end: 2;\n grid-row-start: 1;\n grid-row-end: 2;\n width: 100px;\n z-index: 1;\n`;\n\nconst box2 = styled.div`\n grid-column-start: 2;\n grid-column-end: 3;\n grid-row-start: 1;\n grid-row-end: 2;\n width: 100px;\n z-index: 1;\n`;\n\nconst box3 = styled.div`\n grid-column-start: 1;\n grid-column-end: 3;\n grid-row-start: 2;\n grid-row-end: 3;\n z-index: 1;\n width: 200px;\n`;\n\n\n\nconst Button = styled.button`\n /* Adapt the colors based on primary prop */\n background: ${props => props.primary ? \"palevioletred\" : \"white\"};\n color: black};\n\n font-size: 1em;\n margin: 1em;\n padding: 0.25em 1em;\n border: 2px solid palevioletred;\n border-radius: 3px;\n z-index: 100;\n &:hover {\n border-color: ${props => props.theme.colors.primary};\n cursor: pointer;\n }\n`;\n\nconst AudioControlsContainer = styled.div`\n margin-bottom: 50px;\n display: flex;\n justify-content: flex-end;\n flex-direction: row; \n z-index: 1;\n`;\n\nconst ButtonGroup = styled.div`\n display: flex;\n margin-right: 0;\n margin-left: auto;\n\n`\n\nconst SpectrumButtons = styled.button`\nposition: 'absolute',\n bottom:0,\n right:0;\nwidth: 400px;\n\n`;\n\nconst SpectrumButtonsTwo = styled.button`\n background-color: black;\n color: white;\n font-size: 20px;\n padding: 10px 60px;\n border-radius: 5px;\n margin: 10px 0px;\n cursor: pointer;\n &:disabled {\n color: grey;\n opacity: 0.7;\n cursor: default;\n }\n`;\n\nconst loudnessThresh = 50;\nconst jitterMax = 4; //2\nconst shimmerMax = 10; //8\nvar hnrAvg = 0;\nvar jitterAvg = 0;\nvar shimmerAvg = 0;\n\nvar fundamentalCurrent = 0;\nvar fundamentalSum = 0;\nvar fundamentalArray = [];\nvar fundamentalMean = 0;\n\nvar hnrCurrent = 0;\nvar hnrSum = 0;\nvar hnrArray = [];\nvar hnrMean = 0;\n\nvar jitterCurrent = 0;\nvar jitterSum = 0;\nvar jitterArray = [];\nvar jitterMean = 0;\n\nvar shimmerCurrent = 0;\nvar shimmerSum = 0;\nvar shimmerArray = [];\nvar shimmerMean = 0;\n\nvar intensityCurrent = 0;\nvar intensitySum = 0;\nvar intensityArray = [];\nvar intensityMean = 0;\n\nvar recorderIsRecording = 0;\n\n\nvar shimmerTotalSum = [];\nvar shimmerTotalAvg = 0;\n\nvar jitterTotalSum = [];\nvar jitterTotalAvg = 0;\n\nvar hnrTotalSum = [];\nvar hnrTotalAvg = 0;\n\nvar fzeroTotalSum = [];\nvar fzeroTotalAvg = 0;\n\nvar resetResultsTimer = setInterval(function() {\n if (resetResults == 1){\n fundamentalSum = 0;\n fundamentalArray = [];\n fundamentalMean = 0;\n\n hnrSum = 0;\n hnrArray = [];\n hnrMean = 0;\n\n jitterSum = 0;\n jitterArray = [];\n jitterMean = 0;\n\n shimmerSum = 0;\n shimmerArray = [];\n shimmerMean = 0;\n\n intensitySum = 0;\n intensityArray = [];\n intensityMean = 0;\n }\n}, 100);\n\nvar interval = setInterval(canvasLoad,500);\nfunction canvasLoad(){\n if (document.getElementById('spectrumCanvas') != null){\n spectro = spectrogram(document.getElementById('spectrumCanvas'), {\n audio: {\n enable: false\n }\n });\n clearInterval(interval);\n\n }\n else if (document.getElementById('spectrumCanvas') == null){\n //catch null\n }\n}\n\nconst AudioAnalyzer = observer(({stream}) => {\n const communicationStore = useContext(CommunicationStore);\n const AudioContext = window.AudioContext || window.webkitAudioContext;\n const audioContext = new AudioContext({sampleRate: communicationStore.sampleRate});\n const audioData = audioContext.createAnalyser();\n const audioDataPre = audioContext.createAnalyser();\n const gainNode = audioContext.createGain(); \n const dest = audioContext.createMediaStreamDestination();\n const mediaRecorder = new MediaRecorder(dest.stream);\n var chunks = [];\n\n\n const initializeAudioAnalyser = () => {\n //Audio chains\n const source = audioContext.createMediaStreamSource(stream);\n const lowpass = audioContext.createBiquadFilter();\n\n lowpass.type = 'lowpass';\n lowpass.frequency.value = communicationStore.filterCutoff;\n audioData.fftSize = communicationStore.fftSize;\n audioDataPre.smoothingTimeConstant = 0;\n audioData.smoothingTimeConstant = 0.4;\n \n //audio chain\n source.connect(gainNode); //sourece -> gain node\n gainNode.connect(dest); // gain node -> recorder\n gainNode.connect(audioDataPre); //gain node -> intensity, RMS, peak\n gainNode.connect(lowpass); // gain node -> lowpass\n lowpass.connect(audioData); //gain node -> features\n\n if((document.getElementById('spectrumCanvas') != null) && (communicationStore.spectrogramDisplay == true)){\n spectro.connectSource(audioDataPre, audioContext);\n spectro.start();\n }\n\n };\n\n function handleSliderChange(){\n gainNode.gain.value = document.getElementById(\"typeinp\").value;\n console.log(gainNode.gain.value);\n } \n\n //peak\n const getPeak = () => {\n \n const bufferLength = audioData.frequencyBinCount;\n const amplitudeArray = new Float32Array(bufferLength);\n audioDataPre.getFloatTimeDomainData(amplitudeArray);\n\n var peakValue = 0;\n let sumOfSquares = 0;\n\n for (let i = 0; i < amplitudeArray.length; i++) { \n sumOfSquares += amplitudeArray[i] ** 2;\n if(Math.abs(amplitudeArray[i]) > peakValue){\n peakValue = amplitudeArray[i]\n }\n } \n\n const vRms = Math.sqrt(sumOfSquares / amplitudeArray.length);\n\n //1 pascal = 93.9794 db\n //vrms measured in pascals\n return peakValue;\n }\n\n const getPeakData = (peak) => {\n return peak(getPeak());\n };\n\n //rms\n const getRms = () => {\n const bufferLength = audioData.frequencyBinCount;\n const amplitudeArray = new Float32Array(bufferLength);\n audioDataPre.getFloatTimeDomainData(amplitudeArray);\n var peakValue = 0;\n let sumOfSquares = 0;\n\n for (let i = 0; i < amplitudeArray.length; i++) { \n sumOfSquares += amplitudeArray[i] ** 2;\n if(Math.abs(amplitudeArray[i]) > peakValue){\n peakValue = amplitudeArray[i]\n }\n } \n const vRms = Math.sqrt(sumOfSquares / amplitudeArray.length);\n return vRms;\n }\n\n const getRmsData = (rms) => {\n return rms(getRms());\n };\n \n //f0\n const getFrequency = () => {\n const bufferLength = audioData.frequencyBinCount;\n const amplitudeArray = new Float32Array(bufferLength);\n audioData.getFloatTimeDomainData(amplitudeArray);\n const fundamental0 = autoCorrelate(amplitudeArray, audioContext.sampleRate);\n\n //display vars\n fundamentalCurrent = fundamental0;\n if (fundamental0 > 0){\n fundamentalArray.push(fundamental0);\n fundamentalSum = fundamentalSum + fundamental0;\n fundamentalMean = fundamentalSum / fundamentalArray.length;\n }\n\n //console.log(\"fundamentalMean: \", fundamentalMean);\n\n return fundamental0;\n };\n\n //f0\n const getFrequencyData = (frequency) => {\n return frequency(getFrequency());\n };\n\n\n //loudness (intensity)\n var loudnessCheck = -1\n\n const getLoudness = () => {\n \n const bufferLength = audioData.frequencyBinCount;\n const amplitudeArray = new Float32Array(bufferLength);\n audioDataPre.getFloatTimeDomainData(amplitudeArray);\n\n var peakValue = 0;\n var sumOfSquares = 0;\n var amplitudeArrayOut = []; \n\n for (let i = 0; i < amplitudeArray.length; i++) { \n sumOfSquares += amplitudeArray[i] ** 2;\n } \n\n const vRms = Math.sqrt(sumOfSquares / amplitudeArray.length);\n const intensityDb = 20 * Math.log10(vRms/0.00002);\n\n if (intensityDb > 10 ){\n intensityArray.push(intensityDb);\n intensitySum = intensitySum + intensityDb;\n intensityMean = intensitySum / intensityArray.length;\n intensityCurrent = intensityDb; \n }\n\n if (intensityDb > loudnessThresh){\n loudnessCheck = 1;\n }\n else{\n loudnessCheck = 0;\n }\n return intensityDb;\n };\n\n //loudness\n const getLoudnessData = (loudness) =>{\n return loudness(getLoudness());\n }\n\n //hnr\n const getHnr = () => {\n const bufferLength = audioData.frequencyBinCount;\n const amplitudeArray = new Float32Array(bufferLength);\n audioData.getFloatTimeDomainData(amplitudeArray);\n const hnr = autoCorrelateHnr(amplitudeArray, audioContext.sampleRate);\n //hnr display\n hnrCurrent = hnr;\n if (hnr > 0){\n hnrArray.push(hnr);\n hnrSum = hnrSum + hnr;\n hnrMean = hnrSum / hnrArray.length;\n }\n //console.log(\"hnrMean: \", hnrMean);\n return hnr;\n };\n\n //hnr\n const getHnrData = (frequency) => {\n return frequency(getHnr());\n };\n\n //shimmer\n const averagingShimmerArray = new Array(3).fill(0);\n var averagingLoop = 0;\n\n const getShimmer = () => {\n averagingLoop++;\n const bufferLength = audioData.frequencyBinCount;\n const amplitudeArray = new Float32Array(bufferLength);\n audioData.getFloatTimeDomainData(amplitudeArray);\n const shimmerVal = getShimmerValues(amplitudeArray, audioContext.sampleRate);\n\n averagingShimmerArray[averagingLoop%3] = shimmerVal\n const shimmerValAvg = (averagingShimmerArray[0] + averagingShimmerArray[1] + averagingShimmerArray[2])/3;\n\n if (averagingShimmerArray[0] < 0.1|| averagingShimmerArray[1] < 0.1 || averagingShimmerArray[2] < 0.1){\n return 0;\n }\n\n if (shimmerValAvg > shimmerMax){\n shimmerCurrent = 0;\n return 0;\n }\n //display shimmer\n shimmerCurrent = shimmerValAvg;\n if (shimmerValAvg > 0 && shimmerValAvg < shimmerMax){\n shimmerArray.push(shimmerValAvg);\n shimmerSum = shimmerSum + shimmerValAvg;\n shimmerMean = shimmerSum / shimmerArray.length;\n }\n //console.log(\"shimmerMean: \", shimmerMean);\n return shimmerValAvg;\n };\n\n //shimmer\n const getShimmerData = (shimmer) => {\n return shimmer(getShimmer())\n };\n\n //JITTER\n const getJitter = () => {\n const bufferLength = audioData.frequencyBinCount;\n const amplitudeArray = new Float32Array(bufferLength);\n audioData.getFloatTimeDomainData(amplitudeArray);\n const jitterVal = getJitterValues(amplitudeArray, audioContext.sampleRate)\n\n //check for value req\n if (jitterVal > jitterMax){\n jitterCurrent = 0;\n return 0;\n }\n \n //display jitter\n jitterCurrent = jitterVal;\n if (jitterVal > 0 && jitterVal < jitterMax){\n jitterArray.push(jitterVal);\n jitterSum = jitterSum + jitterVal;\n jitterMean = jitterSum / jitterArray.length;\n }\n //console.log(\"jitterMean: \", jitterMean);\n return jitterVal;\n };\n\n const getJitterData = (jitter) => {\n return jitter(getJitter())\n };\n\n //audioRec\n function recorderButtonPress () {\n if (mediaRecorder.state != \"recording\"){\n initializeAudioAnalyser();\n document.getElementById('recorder').style.backgroundColor = \"violet\";\n mediaRecorder.start(1000);\n }\n };\n\n function stopRecorderButtonPress () {\n \n if (mediaRecorder.state == \"recording\"){\n document.getElementById('recorder').style.backgroundColor = \"white\";\n mediaRecorder.requestData();\n mediaRecorder.stop();\n }\n \n }\n\n mediaRecorder.ondataavailable = function(evt) {\n // push each chunk (blobs) in an array\n chunks.push(evt.data);\n };\n\n mediaRecorder.onstop = function(evt) {\n \n // Make blob out of our blobs, and open it.\n var blob = new Blob(chunks, { 'type' : 'audio/wav; codecs=pcm' });\n //var blob = new Blob(chunks, { 'type' : 'audio/mp3; codecs=pcm' });\n //var blob = new Blob(chunks, {'type': 'audio/ogg; codecs=opus'});\n chunks = [];\n\n //let audioTag = document.querySelector(\"audioControls\")\n //let audioTag = document.getElementById('audioControls');\n //audioTag.src = URL.createObjectURL(blob);\n \n var fileURL = URL.createObjectURL(blob);\n //audioTag.currentTime = 1e101;\n // create tag dinamically\n var fileLink = document.createElement('a');\n fileLink.href = fileURL;\n\n // it forces the name of the downloaded file\n //fileLink.download = 'F0-' + fundamentalMean.toFixed(2) + '_HNR-' + hnrMean.toFixed(2) + '_SH-' + shimmerMean.toFixed(2) + '_JT-' + jitterMean.toFixed(2);\n fileLink.download = 'ARTVA_Recording';\n fileLink.download = fileLink.download.replace(/\\./g, ',');\n // triggers the click event\n fileLink.click();\n };\n\n function dimSpectrum(){\n //console.log(\"dimSpectrum reached\")\n var spectrumCanvas = document.getElementById(\"spectrumCanvas\");\n //console.log(\"communicationStore.spectrogramDim: \", communicationStore.spectrogramDim);\n if (communicationStore.spectrogramDim == false){\n spectrumCanvas.style.opacity = \"1.0\"; \n }\n else if(communicationStore.spectrogramDim == true){\n spectrumCanvas.style.opacity = \"0.0\";\n }\n }\n\n function handleSpectrumHover() {\n const {x, y} = GetCursorPosition();\n }\n\n function spectrumDownloadButtonPress (){\n var canvas = document.getElementById(\"spectrumCanvas\");\n var img = canvas.toDataURL(\"image/png\");\n \n\n var spectrumLink = document.createElement('a');\n spectrumLink.href = img;\n\n spectrumLink.download = 'ARTVA_Spectrogram';\n spectrumLink.download = spectrumLink.download.replace(/\\./g, ',');\n\n // triggers the click event\n spectrumLink.click();\n\n }\n\n useEffect(() => {\n //reset settings \"onMount\"\n defaultSettingsValues();\n\n //initiate dim spectrum interval\n const interval = setInterval(() => {\n if ((document.getElementById('spectrumCanvas') != null) && (communicationStore.spectrogramDisplay == true)){\n dimSpectrum();\n }\n }, 100);\n return () => \n clearInterval(interval)\n }, [])\n\n function defaultSettingsValues() {\n gainNode.gain.value = 0.4;\n communicationStore.setSpectrogramDisplay(false);\n communicationStore.setJitterDisplay(false); \n communicationStore.setShimmerDisplay(false);\n communicationStore.setIntensityDisplay(false);\n communicationStore.setHnrDisplay(false); \n communicationStore.setRecorderDisplay(false);\n communicationStore.setFundamentalDisplay(false);\n communicationStore.setFilterCutoff(1000);\n }\n\n //states for freeze\n const [frozenState, setFreezeState] = useState(null)\n\n //freeze spetrogram\n function freezeButtonPress () {\n setFreezeState(prevState => !prevState)\n\n if(frozenState){\n spectro.pause();\n\n }\n else if(!frozenState){\n spectro = spectrogram(document.getElementById('spectrumCanvas'), {\n audio: {\n enable: false\n }\n });\n initializeAudioAnalyser();\n }\n }\n\n return (\n <>\n {communicationStore.calibrationDisplay == true &&\n <>\n \n \n

Adjust the slider until RMS value is between 0.1 and 0.3.
\n The peak value to never go above 0.9.
\n (keep an eye on voice onset, it is usually the louest part)

\n
\n \n \n handleSliderChange()}/>\n \n \n }\n \n {(communicationStore.intensityDisplay == true || communicationStore.calibrationDisplay == true) &&\n }\n {communicationStore.calibrationDisplay == true &&\n }\n {communicationStore.calibrationDisplay == true &&\n }\n {communicationStore.fundamentalDisplay == true &&\n }\n {communicationStore.hnrDisplay == true &&\n }\n {communicationStore.jitterDisplay == true &&\n }\n {communicationStore.shimmerDisplay == true &&\n } \n {communicationStore.recorderDisplay == true &&\n \n \n \n \n \n }\n \n\n {communicationStore.spectrogramDisplay == true &&\n <>\n \n {communicationStore.spectrogramDim == false && \n <>\n {!frozenState &&\n }\n {frozenState &&\n }\n \n \n }\n \n \n \n \n }\n \n );\n});\n\nexport { fundamentalCurrent };\nexport { fundamentalMean };\nexport { fundamentalArray };\nexport { hnrCurrent };\nexport { hnrMean };\nexport { jitterCurrent };\nexport { jitterMean };\nexport { shimmerCurrent };\nexport { shimmerMean };\nexport { intensityCurrent };\nexport { intensityMean };\nexport default AudioAnalyzer;\n","import {autoCorrelate} from './pitchHelper';\n\n// Gekopieerd uit volgende repository: https://github.com/cwilso/PitchDetect\nexport const getShimmerValues = (buf, sampleRate) => {\n // Implements the ACF2+ algorithm\n let SIZE = buf.length;\n let rms = 0;\n \n for (let i = 0; i < SIZE; i++) {\n const val = buf[i];\n rms += val * val;\n }\n rms = Math.sqrt(rms / SIZE);\n if (rms < 0.01){ // not enough signal\n return 0;\n }\n\n //buf = buf.slice(r1, r2);\n SIZE = buf.length; \n\n const averagedBuffer = new Array(SIZE-3).fill(0);\n\n //for (let i = 0; i < averagedBuffer.length; i++){\n // averagedBuffer[i] = (buf[i] + buf[i+1] + buf[i+2]+ buf[i+3]+ buf[i+4]+ buf[i+5] + buf[i+6] + buf[i+7]+ buf[i+8]+ buf[i+9] + buf[i+10] + buf[i+11] + buf[i+12]+ buf[i+13]+ buf[i+14]+ buf[i+15] + buf[i+16] + buf[i+17]+ buf[i+18]+ buf[i+19])/ 20;\n //}\n\n for (let i = 0; i < averagedBuffer.length; i++){\n averagedBuffer[i] = (buf[i] + buf[i+1] + buf[i+2])/3;\n }\n\n //find current pitch\n const currentPitch = autoCorrelate(buf,sampleRate);\n\n //samplejump betwween peaks\n const sampleJump = Math.round((sampleRate/currentPitch)/4);\n\n //get theoretical peak count \n const availablePeakCount = Math.floor(averagedBuffer.length/(sampleRate/currentPitch))\n\n if (availablePeakCount < 3) {\n return 9\n }\n\n //peak sample no array\n const peakLocations = new Array(availablePeakCount).fill(-1);\n //peak sample height array\n const peakHeights = new Array(availablePeakCount).fill(-1);\n\n //populating peak locations and heights\n for (var i = 0; i < availablePeakCount; i++) { \n if (i == 0) { \n //saving buffer space by starting from 0\n for (var o = 0; o < (sampleJump*4);o++) {\n if (averagedBuffer[o] > peakHeights[i]) {\n peakLocations[i] = o;\n peakHeights[i] = averagedBuffer[o];\n }\n }\n }\n if (i > 0) {\n for (var p = peakLocations[i-1] + sampleJump*3; p < (peakLocations[i-1]+sampleJump*5);p++) {\n if (averagedBuffer[p] > peakHeights[i]) {\n peakLocations[i] = p;\n peakHeights[i] = averagedBuffer[p];\n }\n }\n }\n }\n\n const peakDiff = new Array(availablePeakCount-1).fill(-1);\n\n for (var i = 0; i < peakDiff.length; i++) {\n peakDiff[i] = Math.abs(peakHeights[i+1] - peakHeights[i]);\n }\n\n var peakDiffSum = 0;\n\n for (var i = 0; i < peakDiff.length; i++){\n peakDiffSum = peakDiffSum + peakDiff[i];\n }\n\n var peakDiffAvg = peakDiffSum / peakDiff.length;\n\n var peakSum = 0;\n\n for (var i = 0; i < peakHeights.length; i++){\n peakSum = peakSum + peakHeights[i];\n }\n\n var peakAvg = peakSum / peakHeights.length;\n\n let result = peakDiffAvg / peakAvg * 100\n\n return result;\n}","import {autoCorrelate} from './pitchHelper';\n\n//var extractPeaks = require('webaudio-peaks');\n\n// Gekopieerd uit volgende repository: https://github.com/cwilso/PitchDetect\nexport const getJitterValues = (buf, sampleRate) => {\n // Implements the ACF2+ algorithm\n let SIZE = buf.length;\n let rms = 0;\n \n for (let i = 0; i < SIZE; i++) {\n const val = buf[i];\n rms += val * val;\n }\n rms = Math.sqrt(rms / SIZE);\n if (rms < 0.01){ // not enough signal\n return 0;\n }\n\n const averagedBuffer = new Array(SIZE-2).fill(0);\n\n for (let i = 0; i < averagedBuffer.length; i++){\n averagedBuffer[i] = (buf[i] + buf[i+1] + buf[i+2])/3;\n }\n\n //find current pitch\n const currentPitch = autoCorrelate(buf,sampleRate);\n\n //samplejump betwween peaks\n const sampleJump = Math.round((sampleRate/currentPitch)/4);\n\n //get theoretical peak count \n const availablePeakCount = Math.floor(averagedBuffer.length/(sampleRate/currentPitch))\n\n //peak sample no array\n const peakLocations = new Array(availablePeakCount).fill(-1);\n //peak sample height array\n const peakHeights = new Array(availablePeakCount).fill(-1);\n\n\n for (var i = 0; i < availablePeakCount; i++) { \n if (i == 0) { \n //saving buffer space by starting from 0\n for (var o = 0; o < (sampleJump*4);o++) {\n if (averagedBuffer[o] > peakHeights[i]) {\n peakLocations[i] = o;\n peakHeights[i] = averagedBuffer[o];\n }\n }\n }\n if (i > 0) {\n for (var p = peakLocations[i-1] + sampleJump*3; p < (peakLocations[i-1]+sampleJump*5);p++) {\n if (averagedBuffer[p] > peakHeights[i]) {\n peakLocations[i] = p;\n peakHeights[i] = averagedBuffer[p];\n }\n }\n }\n }\n\n const distanceBetweenPeaks = new Array(availablePeakCount-1).fill(-1);\n\n for (var i = 0; i < distanceBetweenPeaks.length; i++) {\n distanceBetweenPeaks[i] = peakLocations[i+1] - peakLocations[i];\n }\n\n //if there isnt enough peaks we return zero\n if (distanceBetweenPeaks.length <= 0) {\n return 0;\n }\n\n //setum peak distance differences array\n const peakDistanceDifferences = new Array(distanceBetweenPeaks.length-1).fill(-1);\n \n // populate peakDistanceDifferences\n for (var i = 0; i < peakDistanceDifferences.length; i++){\n peakDistanceDifferences[i] = Math.abs(distanceBetweenPeaks[i+1] - distanceBetweenPeaks[i]);\n }\n\n var peakDistanceDiffSum = 0;\n\n for (var i = 0; i < peakDistanceDifferences.length; i++){\n peakDistanceDiffSum = peakDistanceDiffSum + peakDistanceDifferences[i];\n }\n\n var peaKDistanceDiffAvg = peakDistanceDiffSum / peakDistanceDifferences.length;\n\n let distanceBetweenPeaksSum = 0;\n for (var i = 0; i < distanceBetweenPeaks.length; i++) {\n distanceBetweenPeaksSum = distanceBetweenPeaksSum + distanceBetweenPeaks[i];\n }\n\n let avgPeriod = distanceBetweenPeaksSum / distanceBetweenPeaks.length;\n\n let result = peaKDistanceDiffAvg / avgPeriod * 100\n\n return result;\n}\n","import api from '../api';\n\nconst sendSelectedMediaToPatient = (mediaId, callId) => api.getCommunicationApi().post('/media/select', {\n mediaId,\n callId\n});\n\nconst sendSelectedDocumentToPatient = (documentId, callId) => api.getCommunicationApi().post('/document/select', {\n documentId,\n callId\n});\n\nconst sendSelectedExerciseToPatient = (exerciseId, callId) => api.getCommunicationApi().post('/exercises/select', {\n exerciseId,\n callId\n});\n\nconst sendResultToTherapist = (result, callId) => api.getCommunicationApi().post('/exercises/result', {\n result,\n callId\n});\n\nconst sendStepChange = (stepNumber, callId) => api.getCommunicationApi().post('/exercises/step/change', {\n stepNumber,\n callId\n});\n\nconst sendMiniStepChange = (stepNumber, callId) => api.getCommunicationApi().post('/exercises/mini-step/change', {\n stepNumber,\n callId\n});\n\nexport default {\n sendSelectedMediaToPatient,\n sendSelectedDocumentToPatient,\n sendSelectedExerciseToPatient,\n sendResultToTherapist,\n sendStepChange,\n sendMiniStepChange\n}\n","import React, {useContext, useEffect, useState} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport api from '../../api';\nimport Dagboek from '../../../components/exercises/dagboek';\nimport Stappenplan from '../../../components/exercises/stappenplan';\nimport StappenplanMetValidatie from '../../../components/exercises/stappenplanMetValidatie';\nimport libraryService from '../../services/libraryService';\nimport CommunicationStore from '../../stores/communication.store';\nimport LibraryStore from '../../stores/library.store';\nimport { getResourceUrl } from \"../../../azure\";\n\nconst Exercise = observer(({id, onEnd}) => {\n const [exercise, setExercise] = useState({});\n const [taskDescription, setTaskDescriptions] = useState(\"\");\n const communicationStore = useContext(CommunicationStore);\n const libraryStore = useContext(LibraryStore);\n let startTime = Date.now();\n\n useEffect(() => {\n api.getTelephonApi().get('/exercise/' + id).then(response => {\n setExercise(response.data.output);\n })\n }, [id]);\n\n const sendStepChange = (number) => {\n libraryService.sendStepChange(number, communicationStore.activeCall.id);\n };\n\n const sendMiniStepChange = (number) => {\n libraryService.sendMiniStepChange(number, communicationStore.activeCall.id);\n };\n\n async function getResource(id) {\n return api.getTelephonApi().get(\"/file/\" + id).then((response) => {\n return getResourceUrl(response.data.file) \n })\n }\n\n if (exercise.type === \"dagboek\") {\n return \n } else if (exercise.type === \"stappenplan\") {\n return \n } else if (exercise.type === \"stappenplanValidatie\") {\n return \n }\n\n return null;\n});\n\nexport default Exercise;\n","import React, {useContext, useEffect, useState} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport styled from 'styled-components';\nimport api from '../../api';\nimport Card from '../../../components/styled/card';\nimport { useTranslation } from \"react-i18next\";\nimport FileSaver from \"file-saver\";\nimport { H2 } from '../../../components/styled/typography';\nimport Button from \"../../../components/styled/button\";\nimport { downloadOneFile, getResourceUrl } from \"../../../azure\";\n\nconst Img = styled.img`\n width: 80%;\n\n @media (min-width: 980px) {\n width: 40%;\n }\n`;\n\nconst Video = styled.video`\n width: 80%;\n margin-bottom: 10px;\n`;\n\nconst Audio = styled.audio`\n max-width: 80%;\n margin-top: 20px;\n margin-bottom: 20px;\n`;\n\nconst Wrapper = styled(Card)`\n padding: 30px;\n width: 100%;\n margin-bottom: 10px;\n overflow: hidden;\n\n img {\n max-width: 100%;\n }\n\n white-space: normal;\n word-wrap: break-word;\n\n @media (min-width: 980px){\n width: 98%;\n overflow: initial;\n }\n`\n\nconst Media = observer(({id}) => {\n const { t, i18n } = useTranslation();\n const [media, setMedia] = useState({});\n const [fileUrl, setFileUrl] = useState(\"\");\n\n useEffect(() => {\n api.getTelephonApi().get('/file/' + id).then(response => {\n setMedia(response.data.file)\n })\n }, [id]);\n\n useEffect(() => {\n if (media.resource_name) {\n getResourceUrl(media.resource_name).then(url => setFileUrl(url))\n }\n }, [media]);\n\n if (!fileUrl) return null;\n\n if (media.type === \"image\") {\n return \n } else if (media.type === \"video\") {\n return \n } else if (media.type === \"audio\") {\n return \n } else {\n return (\n <>\n \n

{media.name}

\n {t(\"fileForm.noPreview\")}\n
\n \n )\n }\n});\n\nexport default Media;","import React, {useContext, useEffect, useState} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport styled from 'styled-components';\nimport api from '../../api';\nimport Article from \"../../../components/article\";\n\nconst Document = observer(({id}) => {\n const [document, setDocument] = useState({});\n\n useEffect(() => {\n api.getTelephonApi().get(\"/document/\" + id).then((response) => {\n setDocument(response.data.document);\n });\n }, [id]);\n\n return
;\n});\n\nexport default Document;","import React, {useContext, useState} from 'react';\nimport {withRouter} from 'react-router-dom';\nimport {INITIATOR} from '../../services/userService';\nimport {PrimaryButton} from '@eu.jstack/react-button';\nimport {observer} from 'mobx-react-lite';\nimport {color, compose, space, flexbox} from 'styled-system';\nimport styled from 'styled-components';\nimport SelectionOverlay from \"../../../components/selectionOverlay\";\nimport libraryService from '../../services/libraryService';\nimport CommunicationStore from '../../stores/communication.store';\nimport LibraryStore from '../../stores/library.store';\nimport Exercise from './exercise';\nimport Media from './media';\nimport Document from './document';\nimport Text from '../text';\nimport { useTranslation } from \"react-i18next\";\n\nconst Container = styled.div`\n flex: 2.5;\n height: 65vh;\n ${compose(space)}\n`;\n\nconst ExercisePlaceHolder = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n height: 100%;\n`;\n\nconst ScoreContainer = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst ColoredBullet = styled.div`\n display: inline-block;\n height: 15px;\n width: 15px;\n border-radius: 50%;\n ${compose(color, space)}\n`;\n\nconst Box = styled.div`\n display: flex;\n ${compose(flexbox, space)}\n`;\n\nconst Scrollable = styled.div`\n height: 75vh;\n overflow-y:auto;\n`;\n\nconst ExerciseContainer = observer(({showSelectExerciseButton, location}) => {\n const isPatient = location.state?.role !== INITIATOR;\n const communicationStore = useContext(CommunicationStore);\n const libraryStore = useContext(LibraryStore);\n const [showExerciseOverlay, setShowExerciseOverlay] = useState(false);\n const [isLibraryItemChosen, setLibraryItemChosen] = useState(false);\n const { t, i18n } = useTranslation();\n\n const sendSelectedExerciseToPatient = (exercise) => {\n setLibraryItemChosen(true);\n libraryStore.setActiveExerciseResult(null);\n libraryStore.setActiveStep(1);\n libraryStore.setActiveMiniStep(1);\n libraryService.sendSelectedExerciseToPatient(exercise.id, communicationStore.activeCall.id);\n };\n\n const sendSelectedDocumentToPatient = (document) => {\n setLibraryItemChosen(true);\n libraryService.sendSelectedDocumentToPatient(document.id, communicationStore.activeCall.id);\n };\n\n const sendSelectedMediaToPatient = (media) => {\n setLibraryItemChosen(true);\n libraryService.sendSelectedMediaToPatient(media.id, communicationStore.activeCall.id);\n };\n\n const sendResultToTherapist = (result) => {\n if (!isPatient) return;\n libraryService.sendResultToTherapist(result, communicationStore.activeCall.id);\n };\n\n const setFromLibrary = (libraryItem) => {\n switch (libraryItem.type) {\n case 'dagboek': case 'stappenplanValidatie': case 'stappenplan':\n //This is an exercise\n sendSelectedExerciseToPatient(libraryItem);\n break;\n case 'Document':\n //This is a document\n sendSelectedDocumentToPatient(libraryItem);\n break;\n default:\n //This is a media file\n sendSelectedMediaToPatient(libraryItem);\n break;\n }\n }\n\n return (\n \n {showExerciseOverlay && (\n setShowExerciseOverlay(false)}\n setChosenElement={setFromLibrary}\n />\n )}\n\n {!libraryStore.activeExerciseResult && (\n \n {showSelectExerciseButton && !isPatient && !(libraryStore.activeExerciseId || libraryStore.activeDocumentId || libraryStore.activeMediaId) && (\n \n setShowExerciseOverlay(true)}>\n {!isLibraryItemChosen && t('videochat.selectItem')}\n \n \n )}\n {(!isPatient && (libraryStore.activeExerciseId || libraryStore.activeDocumentId || libraryStore.activeMediaId)) && (\n \n \n {t('videochat.therapistDescription')}\n \n setShowExerciseOverlay(true)}>\n {!isLibraryItemChosen && t('videochat.selectItem')}\n {isLibraryItemChosen && t('videochat.selectOtherItem')}\n \n \n )}\n {libraryStore.activeExerciseId && (\n \n \n \n )}\n {libraryStore.activeDocumentId && (\n \n \n \n )}\n {libraryStore.activeMediaId && (\n \n \n \n )}\n \n )}\n\n {libraryStore.activeExerciseResult && (\n \n \n \n {t('videochat.score')}\n \n \n {t('videochat.yellow')}: {libraryStore.activeExerciseResult.scores['Gele vragen']}\n \n \n {t('videochat.green')}: {libraryStore.activeExerciseResult.scores['Groene vragen']}\n \n {t('videochat.totalScore')}: {libraryStore.activeExerciseResult.scores['Totaalscore']}\n \n\n {!isPatient && (\n setShowExerciseOverlay(true)}>\n {t('videochat.startNew')}\n \n )}\n \n \n )}\n \n )\n});\n\nexport default withRouter(ExerciseContainer);\n","import Text from './text';\nimport styled from 'styled-components';\nimport {fontSize} from 'styled-system';\nimport extendedTheme from '../theme';\n\nconst ErrorMessage = styled(Text)`\n`\nErrorMessage.defaultProps = {\n color: extendedTheme.colors.error,\n fontSize: 0\n}\n\nexport default ErrorMessage;\n","import React, {useContext, useEffect,useState} from 'react';\nimport useForm from 'react-hook-form';\nimport styled from 'styled-components';\nimport {compose, space} from 'styled-system';\nimport {BaseModal} from '@eu.jstack/react-modal';\nimport ModalStyles from '@eu.jstack/react-modal/src/modalStyles';\nimport Input from '@eu.jstack/react-input/src';\nimport {PrimaryButton, TertiaryButton} from '@eu.jstack/react-button/src';\nimport CommunicationStore from '../../stores/communication.store';\nimport RegistrationStore from \"../../../components/registrationStore\";\nimport ErrorMessage from '../errorMessage';\nimport Text from '../text';\nimport theme from '../../theme';\nimport Icon from '../icon';\nimport {faQuestionCircle} from '@fortawesome/free-solid-svg-icons';\nimport Select from 'react-select';\nimport ReactDOM from 'react-dom';\nimport Tooltip, { tooltipClasses } from '@mui/material/Tooltip';\nimport {Typography} from '@mui/material';\n\n\n\nconst ModalFooterContainer = styled.div`\n display: flex; \n flex-Direction: row;\n ${compose(space)}\n`;\n\nconst SettingsForm = styled.form`\n display: flex;\n flex-Direction: column;\n`\n\nconst TopModalContainer = styled.form`\n display: flex;\n flex-Direction: row;\n justify-content: space-evenly;\n margin-left: 0px;\n margin-right: 0px;\n`\n\nconst HelpButton = styled.button`\n margin-left: auto; \n margin-right: 0;\n background-color: transparent;\n border: none;\n justify-content: end;\n`\n\n\n//space-evenly space-around space-between\nconst AllSettingsContainer = styled.div`\n display: flex;\n flex-Direction: row;\n justify-content: sspace-evenly; \n flex-wrap: wrap; \n z-index: 1;\n align-content: space-evenly;\n margin-right: 35px;\n margin-left: 1px;\n width: 100%;\n max-width: 60vw;\n gap: 10px;\n`\n\n\nconst SingleSettingContainer = styled.div`\n display: flex;\n flex-grow: 1;\n flex-Direction: column;\n justify-content: space-evenly; \n z-index: 1;\n align-content: space-evenly;\n \n`\n\nvar spectrogramUsed;\n\nconst isFirefox = typeof InstallTrigger !== 'undefined';\n\nconst SettingsModal = (props) => {\n const communicationStore = useContext(CommunicationStore);\n //state setup for feature params\n //[current state, function to update the state value] = useState(defultvalue)\n const [filterCutoff,setStateFilterCutoff] = useState(communicationStore.filterCutoff)\n const [sampleRate,setStateSampleRate] = useState(communicationStore.sampleRate)\n const [fftSize,setStateFftSize] = useState(communicationStore.fftSize)\n const [value, setValue] = useState()\n const [customSettings] = useState(true);\n const [customSettingsDisplay,setCustomSettingsDisplay] = useState(false);\n //const [intensityDisplay,setIntensity] = useState(true);\n const [shimmerDisplay,setShimmerDisplay] = useState(false); //+\n const [jitterDisplay,setJitterDisplay] = useState(false); //+\n const [spectrogramDisplay,setSpectrogramDisplay] = useState(false); //-\n const [intensityDisplay,setIntensityDisplay] = useState(false); //-\n const [recorderDisplay,setRecorderDisplay] = useState(false); //- ???\n const [hnrDisplay,setHnrDisplay] = useState(false); //-\n const [fundamentalDisplay,setFundamentalDisplay] = useState(false); //-\n const [calibrationDisplay,setCalibrationDisplay] = useState(false);\n\n /*\n class App extends React.Component {\n constructor() {\n super(props);\n this.state = {\n selectedValue: {},\n selectOptions: []\n };\n }\n }*/\n\n const {register, handleSubmit, errors} = useForm({\n defaultValues: {\n fftSize: communicationStore.fftSize,\n filterCutoff: communicationStore.filterCutoff,\n sampleRate: communicationStore.sampleRate,\n jitterDisplay: communicationStore.jitterDisplay,\n shimmerDisplay: communicationStore.shimmerDisplay,\n spectrogramDisplay: communicationStore.spectrogramDisplay,\n calibrationDisplay: communicationStore.calibrationDisplay,\n recorderDisplay: communicationStore.recorderDisplay,\n hnrDisplay: communicationStore.hnrDisplay,\n fundamentalDisplay: communicationStore.fundamentalDisplay,\n intensityDisplay: communicationStore.intensityDisplay\n }\n });\n\n const onSubmit = (data) => {\n //console.log(\"communicationStore.sampleRate before:\", communicationStore.sampleRate);\n console.log(\"break1\")\n if (isFirefox) {\n\n }\n else { \n if(document.getElementById('shimmerDisplay').checked \n && !document.getElementById('jitterDisplay').checked\n && !document.getElementById('intensityDisplay').checked\n && !document.getElementById('fundamentalDisplay').checked\n && !document.getElementById('hnrDisplay').checked\n && !document.getElementById('spectrogramDisplay').checked ){\n // data.fftSize = 512\n // communicationStore.setFftSize(Math.pow(2, Math.round(Math.log(data.fftSize)/Math.log(2))));\n \n console.log(\"reached if\")\n\n data.filterCutoff = 300;\n communicationStore.setFilterCutoff(data.filterCutoff);\n\n }\n\n //fftSize must be a power of 2. This formular rounds to the closest power of 2.\n communicationStore.setFftSize(Math.pow(2, Math.round(Math.log(data.fftSize)/Math.log(2))));\n \n communicationStore.setSampleRate(data.sampleRate);\n\n communicationStore.setFilterCutoff(data.filterCutoff);\n //calibration\n if(document.getElementById('calibrationDisplay').checked){\n communicationStore.setCalibrationDisplay(true); \n }\n else if(!document.getElementById('calibrationDisplay').checked){\n communicationStore.setCalibrationDisplay(false); \n }\n //jitter\n if(document.getElementById('jitterDisplay').checked){\n communicationStore.setJitterDisplay(true); \n }\n else if(!document.getElementById('jitterDisplay').checked){\n communicationStore.setJitterDisplay(false);\n }\n //shimmer\n if(document.getElementById('shimmerDisplay').checked){\n communicationStore.setShimmerDisplay(true); \n }\n else if(!document.getElementById('shimmerDisplay').checked){\n communicationStore.setShimmerDisplay(false)\n }\n //intensity\n if(document.getElementById('intensityDisplay').checked){\n communicationStore.setIntensityDisplay(true); \n }\n else if(!document.getElementById('intensityDisplay').checked){\n communicationStore.setIntensityDisplay(false)\n }\n //f0\n if(document.getElementById('fundamentalDisplay').checked){\n communicationStore.setFundamentalDisplay(true); \n }\n else if(!document.getElementById('fundamentalDisplay').checked){\n communicationStore.setFundamentalDisplay(false)\n }\n //hnr\n if(document.getElementById('hnrDisplay').checked){\n communicationStore.setHnrDisplay(true); \n }\n\n else if(!document.getElementById('hnrDisplay').checked){\n communicationStore.setHnrDisplay(false)\n }\n //recorder\n if(document.getElementById('recorderDisplay').checked){\n communicationStore.setRecorderDisplay(true);\n }\n else if(!document.getElementById('recorderDisplay').checked){\n communicationStore.setRecorderDisplay(false)\n }\n //spectrogram\n if(document.getElementById('spectrogramDisplay').checked){\n communicationStore.setSpectrogramDisplay(true);\n communicationStore.setSpectrogramDim(false);\n }\n\n else if(!document.getElementById('spectrogramDisplay').checked){\n //communicationStore.setSpectrogramDisplay(false);\n communicationStore.setSpectrogramDim(true);\n //console.log(\"communicationStore.setSpectrogramDim\", communicationStore.setSpectrogramDim);\n }\n //console.log(\"communicationStore.sampleRate after:\", communicationStore.sampleRate);\n props.close(false);\n } \n };\n\n const store = useContext(RegistrationStore);\n\n const handleShimmerCheck = (value)=>{\n console.log('handleShimmerCheck ',value) \n //set the display if the value changed?\n setShimmerDisplay(prev=>!prev);\n //set prev to be equal to not the shimmerDisplaay\n let prev = !shimmerDisplay;\n //depending on prev set parameter values\n if(prev){\n setStateFilterCutoff(600)\n setStateSampleRate(22025)\n setStateFftSize(2048)\n //communicationStore.setFilterCutoff(300);\n }\n else{\n //setStateFilterCutoff(communicationStore.filterCutoff)\n //setStateSampleRate(communicationStore.sampleRate)\n //setStateFftSize(communicationStore.fftSize)\n }\n }\n\n const handleJitterCheck = (value)=>{\n console.log('handleJitterCheck ',value) \n //set the display if the value changed?\n setJitterDisplay(prev=>!prev);\n //set prev to be equal to not the shimmerDisplaay\n let prev = !jitterDisplay;\n //depending on prev set parameter values\n if(prev){\n setStateFilterCutoff(600)\n setStateSampleRate(22025)\n setStateFftSize(2048)\n }\n else{\n }\n }\n\n const handleIntensityCheck = (value)=>{\n console.log('handleIntensityCheck ',value) \n //set the display if the value changed?\n setIntensityDisplay(prev=>!prev);\n //set prev to be equal to not the shimmerDisplaay\n let prev = !intensityDisplay;\n //depending on prev set parameter values\n if(prev){\n setStateFilterCutoff(20000)\n setStateSampleRate(22025)\n setStateFftSize(2048)\n }\n else{\n }\n }\n\n const handleSpectrogramCheck = (value)=>{\n console.log('handleSpectrogramCheck ',value) \n //set the display if the value changed?\n setSpectrogramDisplay(prev=>!prev);\n //set prev to be equal to not the shimmerDisplaay\n let prev = !spectrogramDisplay;\n //depending on prev set parameter values\n if(prev){\n setStateFilterCutoff(20000)\n setStateSampleRate(22050)\n setStateFftSize(2048)\n }\n else{\n }\n }\n\n const handleFundamentalCheck = (value)=>{\n console.log('handleFundamentalCheck ',value) \n //set the display if the value changed?\n setFundamentalDisplay(prev=>!prev);\n //set prev to be equal to not the shimmerDisplaay\n let prev = !fundamentalDisplay;\n //depending on prev set parameter values\n if(prev){\n setStateFilterCutoff(1000)\n setStateSampleRate(22025)\n setStateFftSize(2048)\n }\n else{\n }\n }\n\n const handleHnrCheck = (value)=>{\n console.log('handleHnrCheck ',value) \n //set the display if the value changed?\n setHnrDisplay(prev=>!prev);\n //set prev to be equal to not the shimmerDisplaay\n let prev = !hnrDisplay;\n //depending on prev set parameter values\n if(prev){\n setStateFilterCutoff(20000)\n setStateSampleRate(44100)\n setStateFftSize(2048)\n }\n else{\n }\n }\n\n const handleRecorderCheck = (value)=>{\n console.log('handleRecorderCheck ',value) \n //set the display if the value changed?\n setRecorderDisplay(prev=>!prev);\n //set prev to be equal to not the shimmerDisplaay\n let prev = !recorderDisplay;\n //depending on prev set parameter values\n if(prev){\n setStateFilterCutoff(20000)\n setStateSampleRate(44100)\n setStateFftSize(2048)\n }\n else{\n }\n }\n\n const handleCalibrationCheck = (value)=>{\n console.log('handleCalibrationCheck ',value) \n //set the display if the value changed?\n setCalibrationDisplay(prev=>!prev);\n //set prev to be equal to not the shimmerDisplaay\n let prev = !calibrationDisplay;\n //depending on prev set parameter values\n if(prev){\n setStateFilterCutoff(20000)\n setStateSampleRate(44100)\n setStateFftSize(2048)\n communicationStore.setShimmerDisplay(false)\n }\n else{\n }\n }\n\n\n const handleCustomSettingsCheck = (value)=>{\n console.log('handleCustomSettingsCheck ',value)\n setCustomSettingsDisplay(prev=>!prev);\n let prev = !customSettingsDisplay;\n if(prev){\n setShimmerDisplay(false)\n }\n }\n\n const handleFilterValueChange = (e)=>{\n setStateFilterCutoff(e.target.value)\n }\n\n const handleSampleRateValueChange = (e)=>{\n setStateSampleRate(e.target.value)\n }\n\n const handleFftSizeValueChange = (e)=>{\n setStateFftSize(e.target.value)\n }\n\n const CustomWidthTooltip = styled(({ className, ...props }) => (\n \n ))({\n [`& .${tooltipClasses.tooltip}`]: {\n maxWidth: 323,\n },\n });\n \n const modalTitle = (\n <>\n {!isFirefox &&\n \n ARTVA Options\n \n }\n {isFirefox &&\n \n Please use Google Chrome to enable ARTVA\n \n }\n {\n \n For best results select only the features you need. \n Parameters are determined by the last feature selected. \n To see parameter changes turn on custom settings.\n \n }\n >\n \n Help \n \n \n }\n )\n const footer = ( \n \n Opslaan\n props.close(false)} ml={3}>Cancel\n )\n\n const label = (text) => (\n {text}\n );\n\n const optionsFftSize = [\n { value: '1024', label: '1024' },\n { value: '2048', label: '2048' },\n { value: '4096', label: '4096' }\n ]\n\n const optionsSampleRate = [\n { value: '48000', label: '48000' },\n { value: '44100', label: '44100' },\n { value: '22050', label: '22050' }\n ]\n\n const optionsFilterCutoff = [\n { value: '600', label: '600' },\n { value: '1000', label: '1000' },\n { value: '22000', label: '22000' }\n ]\n\n return (\n props.close(false)}\n title={modalTitle}\n footer={footer}\n maxContentHeight={800}\n >\n \n \n {!store.checkAccountIsExpired() &&\n <>\n \n \n {label('Calibration')}\n handleCalibrationCheck(calibrationDisplay?true:false)}\n />\n \n \n }\n\n\n {!store.checkAccountIsExpired() &&\n <>\n \n {label('Intensity (dB)')}\n handleIntensityCheck(intensityDisplay?true:false)}\n disabled={calibrationDisplay}\n />\n \n }\n \n {!store.checkAccountIsExpired() &&\n <>\n \n {label('Fundamental/F0 (Hz)')}\n handleFundamentalCheck(fundamentalDisplay?true:false)}\n disabled={calibrationDisplay}\n />\n \n }\n\n {!store.checkAccountIsExpired() &&\n <>\n \n {label('Jitter (%)')}\n handleJitterCheck(jitterDisplay?true:false)}\n disabled={calibrationDisplay}\n />\n \n }\n\n {!store.checkAccountIsExpired() &&\n <>\n \n {label('Shimmer (%)')}\n handleShimmerCheck(shimmerDisplay?true:false)}\n disabled={calibrationDisplay}\n />\n \n }\n\n {!store.checkAccountIsExpired() &&\n <>\n \n {label('Harmonicity/HNR (dB)')}\n handleHnrCheck(hnrDisplay?true:false)}\n disabled={calibrationDisplay}\n />\n \n }\n\n \n {label('Spectrogram')}\n handleSpectrogramCheck(spectrogramDisplay?true:false)}\n disabled={calibrationDisplay}\n />\n \n\n {!store.checkAccountIsExpired() &&\n <>\n \n {label('Recorder')}\n handleRecorderCheck(recorderDisplay?true:false)}\n disabled={calibrationDisplay}\n /> \n \n }\n\n {!store.checkAccountIsExpired() &&\n <>\n \n {label('Show custom settings')}\n handleCustomSettingsCheck(customSettings?true:false)}\n disabled={calibrationDisplay}\n /> \n \n } \n\n \n \n\n {!store.checkAccountIsExpired() &&\n <>\n {label()}\n handleFilterValueChange(e)}\n hidden={!customSettingsDisplay || calibrationDisplay}\n \n />\n }\n\n {!store.checkAccountIsExpired() &&\n <>\n {label()}\n handleFftSizeValueChange(e)}\n hidden={!customSettingsDisplay || calibrationDisplay}\n\n />\n {errors.fftSize && Fft size moet een getal zijn tussen 32 en 32768.}\n }\n\n {!store.checkAccountIsExpired() &&\n <> \n {label()}\n handleSampleRateValueChange(e)}\n hidden={!customSettingsDisplay || calibrationDisplay}\n />\n {errors.sampleRate && Sample rate moet een getal zijn tussen 8000 en 96000}\n }\n \n \n );\n};\n\nexport default SettingsModal;\n","import React, {useContext, useEffect, useState} from 'react';\nimport styled, {ThemeProvider} from 'styled-components';\nimport ErrorBoundary from '../errorBoundary';\nimport extendedTheme from '../../theme';\nimport {color, compose, position, space, flexbox} from 'styled-system';\nimport placeholderImageSrc from '../../images/video-call-placeholder.svg';\nimport Text from '../text';\nimport callService from '../../services/callService';\nimport userService, {INITIATOR, RECEIVER} from '../../services/userService';\nimport {withRouter} from 'react-router-dom';\nimport BackButton from '../backButton';\nimport CommunicationStore from '../../stores/communication.store';\nimport ExerciseStore from '../../stores/library.store';\nimport communicationService from '../../services/communicationService';\nimport api from '../../api';\nimport {captureException} from '../../helpers/errorHelper';\nimport HangupCallButton from '../hangupCallButton';\nimport StopWatch from '../stopWatch';\nimport AudioAnalyzer from '../audioAnalyzer';\nimport {BaseModal} from '@eu.jstack/react-modal';\nimport {PrimaryButton, TertiaryButton} from '@eu.jstack/react-button/src';\nimport LibraryContainer from './libraryContainer';\nimport SettingsModal from './settingsModal';\nimport Icon from '../icon';\nimport {faCog, faMicrophoneSlash, faMousePointer, faVideo, faVideoSlash} from '@fortawesome/free-solid-svg-icons';\nimport { useTranslation } from \"react-i18next\";\n\nimport {observer} from 'mobx-react-lite';\nimport {faSlideshare} from \"@fortawesome/free-brands-svg-icons\";\nimport * as artvaModule from '../audioAnalyzer';\n\nconst VideoCallPageContainer = styled.div`\n display: flex;\n flex-direction: column;\n ${compose(space)}\n`;\n\nconst ExerciseAndCallBlock = styled.div`\n display: flex;\n ${compose(flexbox)}\n`;\n\nconst ArtvaResultBlock = styled.div`\n display: flex;\n ${compose(flexbox)}\n`;\n\nconst CallContainer = styled.div`\n position: relative;\n flex: 3;\n height: 65vh;\n ${compose(color)}\n`;\n\nconst Button = styled.button`\n /* Adapt the colors based on primary prop */\n background: ${props => props.primary ? \"palevioletred\" : \"white\"};\n color: ${props => props.primary ? \"white\" : \"palevioletred\"};\n\n font-size: 1em;\n margin: 1em;\n padding: 0.25em 1em;\n border: 2px solid palevioletred;\n border-radius: 3px;\n`;\n\nconst MainVideoContainer = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n position: relative;\n overflow-y: hidden;\n z-index: 0;\n`;\n\nconst MainVideo = styled.video`\n width: 100%;\n height: 100%;\n object-fit: cover;\n`;\n\nconst PlaceholderContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n ${compose(space)}\n`;\n\nconst PlaceholderImage = styled.img`\n opacity: 0.9;\n max-width: 300px;\n`;\n\nconst SmallIconsOwn = styled.div`\n cursor: pointer;\n position: absolute;\n z-index: 5;\n top: 15px; \n object-fit: cover;\n border: 0px solid;\n color: white; \n right: 10px;\n font-size: 2em;\n text-align: right; \n margin-right: 10px;\n`;\n\nconst SmallIconOwn = styled(Icon)`\n margin-right: 5px;\n border-radius: 25px;\n background-color: ${props => props.theme.colors.primary};\n padding: 2px;\n width: 20px;\n height: 15px;\n`;\n\nconst SmallIconsPartner = styled.div`\n cursor: pointer;\n position: absolute;\n text-align: left;\n z-index: 5;\n font-size: 0.8em; \n top: 10px;\n left: 10px;\n object-fit: cover;\n border: 0px solid; \n color: white;\n padding-top: 10px;\n`;\n\nconst SmallIconPartner = styled(Icon)`\n margin-left: 10px;\n border-radius: 50px;\n background: ${props => props.theme.colors.primary};\n flex: 1 50px; \n padding: 15px;\n`;\n\nconst BigIconPartner = styled(Icon)`\n position: absolute;\n margin-left: 10px;\n border-radius: 50px;\n background: ${props => props.theme.colors.primary};\n flex: 1 50px; \n padding: 15px;\n top: ${props => props.top};\n left: ${props => props.left};\n`;\n\n\n\nconst ColorFade = styled.span`\n animation: colorfade 1.2s infinite;\n animation-direction: alternate;\n @keyframes colorfade {\n 25% {\n color: white; \n }\n 100% {\n color: red; \n }\n }\n`;\n\nconst SmallVideo = styled.video`\n cursor: pointer;\n height: 20%;\n position: absolute;\n object-fit: cover;\n border: 2px solid ${props => props.theme.colors.primary};\n background-color: ${props => props.theme.colors.primary};\n transition: border 200ms ease-out;\n border-radius: 10px;\n ${compose(position)};\n \n &:hover { \n border: 2px dotted #FFFFFF;\n }\n`;\n\nconst BackButtonContainer = styled.div`\n ${compose(space)}\n`;\n\nconst CloseModalFooterContainer = styled.div`\n display: flex;\n flex-direction: row;\n ${compose(space)}\n`;\n\nconst HeaderContainer = styled.div`\n width: 100%;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n`\n\nconst SettingsButton = styled.button`\n background-color: transparent;\n border: none;\n`\n\nvar labelUpdate = 1;\nvar resetResults = 0;\n\nconst VideoCallPage = observer (({location, history}) => {\n const [initiatorInfo, setInitiatorInfo] = useState(null);\n const [receiverInfo, setReceiverInfo] = useState(null);\n const [callStarted, setCallStarted] = useState(false);\n const [showCallButtons, setShowCallButtons] = useState(false);\n const [isCloseModalOpen, setIsCloseModalOpen] = useState(false);\n const communicationStore = useContext(CommunicationStore);\n const exerciseStore = useContext(ExerciseStore);\n const [stream, setStream] = useState();\n const [isSettingsModalOpen, setIsSettingsModalOpen] = useState(false);\n\n const [isVideoSwitched, setVideoSwitched] = useState(false);\n const [isAudioMuted, setIsAudioMuted] = useState (false);\n const [isVideoMuted, setIsVideoMuted] = useState (false);\n const [isScreenShared, setIsScreenShared] = useState (false);\n\n const [isPartnerAudioMuted, setIsPartnerAudioMuted] = useState (false);\n const [isPartnerVideoMuted, setIsPartnerVideoMuted] = useState (false);\n const [isPartnerMouseShared, setIsPartnerMouseShared] = useState (false);\n const [isPartnerScreenShared, setIsPartnerScreenShared] = useState (false);\n\n const [isErrorModalOpen, setIsErrorModalOpen] = useState(false);\n const { t, i18n } = useTranslation();\n const [peerConnection, setPeerConnection] = useState(null);\n const [mousePosition, setMousePosition] = useState(null);\n\n // initialize and cleanup stream when leaving\n useEffect(() => {\n communicationStore.setIsInCall(true);\n exerciseStore.setActiveExerciseId(null);\n return () => {\n communicationService.stopLocalStream();\n communicationStore.setIsInCall(false);\n }\n }, []);\n\n // create call if not exists\n useEffect(() => {\n if (location.state) {\n const body = {\n finished: false,\n initiator: location.state.initiatorId,\n attendees: [location.state.initiatorId, location.state.receiverId],\n };\n callService.createCall(body)\n .then(({data}) => communicationStore.setActiveCall(data))\n .catch(() => null);\n }\n }, []);\n\n const calculateLeft = (mouseX, screenWidth) => {\n const curWidth = document.documentElement.clientWidth;\n return mouseX / screenWidth * curWidth;\n };\n\n const calculateTop = (mouseY, screenHeight) => {\n const curHeight = document.documentElement.clientHeight;\n return mouseY / screenHeight * curHeight;\n };\n\n useEffect(() => {\n if (communicationStore.mouseChanged) {\n const pos = {...communicationStore.mousePosition};\n console.log(pos);\n const newPos = {};\n newPos.top = calculateTop(pos.y, pos.height) + 'px';\n newPos.left = calculateLeft(pos.x, pos.width) + 'px';\n setMousePosition(newPos);\n console.log(newPos);\n communicationStore.setMouseChanged(false);\n }\n }, [communicationStore.mouseChanged])\n\n useEffect(() => {\n setIsPartnerAudioMuted({...communicationStore.settings}.muteAudio);\n setIsPartnerVideoMuted({...communicationStore.settings}.muteVideo);\n setIsPartnerMouseShared({...communicationStore.settings}.shareMouse);\n setIsPartnerScreenShared({...communicationStore.settings}.shareScreen);\n\n communicationStore.setSettingsChanged(false);\n }, [communicationStore.settingsChanged]);\n\n // fetch active call\n useEffect(() => {\n var activeCallsPromise = callService.getActiveCalls();\n if(activeCallsPromise !== null) {\n activeCallsPromise.then(({data}) => {\n if (data.length > 0) {\n communicationStore.setActiveCall(data[0])\n }\n });\n }\n }, []);\n\n // finish call when leaving\n useEffect(() => {\n return () => {\n if (communicationStore.activeCall) {\n communicationStore.finishActiveCall();\n communicationService.stopLocalStream();\n }\n }\n }, []);\n\n // fetch user info of receiver and initiator\n useEffect(() => {\n const fetchReceiverInfo = async () => {\n const {data: receiverUserInfo} = await userService.getUser(location.state.receiverId);\n setReceiverInfo(receiverUserInfo);\n };\n\n const fetchInitiatorInfo = async () => {\n const {data: initiatorUserInfo} = await userService.getUser(location.state.initiatorId);\n setInitiatorInfo(initiatorUserInfo);\n };\n\n if (location.state) {\n fetchReceiverInfo();\n fetchInitiatorInfo();\n }\n }, []);\n\n // set local stream and call other person\n useEffect(() => {\n if (!receiverInfo || !initiatorInfo) {\n return;\n }\n\n setupOwnMediaStream()\n .then((result) => {\n if (!result) return setIsErrorModalOpen(true);\n if (location.state?.role === INITIATOR) {\n callOther(receiverInfo.videoCallConnectionId)\n }\n if (location.state?.role === RECEIVER) {\n callOther(initiatorInfo.videoCallConnectionId);\n }\n })\n }, [receiverInfo, initiatorInfo]);\n\n const setupOwnMediaStream = async () => {\n const stream = await communicationService.initializeLocalVideoStream();\n if (stream === undefined) return false;\n displayLocalVideoStream(stream);\n\n communicationService.getVideoCallConnection().on('call', (call) => {\n setCallStarted(true);\n call.answer(stream);\n call.on('stream', displayRemoteVideoStream);\n // HIER KAN DE TRACK VAN DE VIDEOSTREAM AANGEPAST WORDEN\n setPeerConnection(call.peerConnection.getSenders()[1])\n });\n\n // communicationService.getDataStreamConnection().on(\"connection\", (connection) => {\n // connection.on('data', (data) => {\n // console.log(\"in connection.data\", new Date().toString(), data);\n // });\n // });\n\n communicationService.getVideoCallConnection().on('error', (err) => captureException('Failed to open \"call\" event', err));\n\n // communicationService.getDataStreamConnection()\n // .on('error', (err) => captureException('Failed to open \"connection\" event', err))\n // .on(\"disconnected\", () => console.log('disconnected from data channel'));\n\n return true;\n };\n\n const displayRemoteVideoStream = (remoteStream) => {\n const element = document.getElementById('main-video');\n if (element) {\n element.srcObject = remoteStream;\n setStream(remoteStream);\n element.onloadedmetadata = (e) => element.play();\n }\n };\n\n const displayLocalVideoStream = (localStream) => {\n const element = document.getElementById('small-video');\n element.srcObject = localStream;\n element.muted = true;\n };\n\n const callOther = (connectionId) => {\n const call = communicationService.getVideoCallConnection().call(connectionId, communicationService.getLocalStream());\n if (call == undefined) {\n return;\n }\n call.on('stream', (remoteStream) => {\n setCallStarted(true);\n displayRemoteVideoStream(remoteStream);\n setPeerConnection(call.peerConnection.getSenders()[1])\n });\n call.on('error', (err) => captureException('Calling other person failed', err));\n };\n\n const switchVideoView = () => {\n const smallVideoElement = document.getElementById('small-video');\n const mainVideoElement = document.getElementById('main-video');\n const smallVideoSrc = smallVideoElement.srcObject;\n const mainVideoSrc = mainVideoElement.srcObject;\n\n mainVideoElement.srcObject = smallVideoSrc;\n smallVideoElement.srcObject = mainVideoSrc;\n\n const newIsVideoSwitchedState = !isVideoSwitched;\n\n if (newIsVideoSwitchedState) {\n mainVideoElement.muted = true;\n smallVideoElement.muted = false;\n } else {\n smallVideoElement.muted = true;\n mainVideoElement.muted = false;\n }\n\n setVideoSwitched(newIsVideoSwitchedState);\n };\n\n\n const getCalleeName = () => {\n if (!receiverInfo || !initiatorInfo) {\n return;\n }\n\n return getFullName(location.state?.role === INITIATOR ? RECEIVER : INITIATOR);\n };\n\n const getFullName = (role) => {\n if (role === INITIATOR) {\n return `${initiatorInfo.firstName} ${initiatorInfo.lastName}`;\n } else if (role === RECEIVER) {\n return `${receiverInfo.firstName} ${receiverInfo.lastName}`;\n }\n };\n\n const startShare = async () => {\n if (peerConnection) {\n if (isScreenShared) {\n communicationService.getLocalStream().getVideoTracks().forEach(track => track.stop())\n const stream = await communicationService.initializeLocalVideoStream(false);\n if (stream) {\n setIsScreenShared(false)\n const userId = location.state.role === INITIATOR ? receiverInfo.public_id : initiatorInfo.public_id;\n api.getCommunicationApi().put(`/calls/settings/${userId}`, {muteAudio: isAudioMuted, muteVideo: isVideoMuted, shareScreen: false});\n peerConnection.replaceTrack(stream.getTracks()[0]);\n displayLocalVideoStream(stream);\n }\n } else {\n const stream = await communicationService.initializeScreenShareStream();\n if(stream) {\n setIsScreenShared(true)\n const userId = location.state.role === INITIATOR ? receiverInfo.public_id : initiatorInfo.public_id;\n api.getCommunicationApi().put(`/calls/settings/${userId}`, {muteAudio: isAudioMuted, muteVideo: isVideoMuted, shareScreen: true});\n peerConnection.replaceTrack(stream.getTracks()[0]);\n displayLocalVideoStream(stream);\n }\n }\n }\n }\n\n\n const Button = styled.button`\n /* Adapt the colors based on primary prop */\n background: ${props => props.primary ? \"palevioletred\" : \"white\"};\n color: ${props => props.primary ? \"white\" : \"palevioletblue\"};\n\n font-size: 1em;\n margin: 1em;\n padding: 0.25em 1em;\n border: 2px solid palevioletred;\n border-radius: 3px;\n &:hover {\n border-color: ${props => props.theme.colors.primary};\n cursor: pointer;\n }\n `;\n\n //f0\n const getIntensityCurrent = () => {\n var intensityCurrentIntetrval = setInterval(function() { \n if (document.getElementById('intensityCurrent') == null){\n clearInterval(intensityCurrentIntetrval);\n }\n else {\n document.getElementById('intensityCurrent').innerHTML = artvaModule.intensityCurrent.toFixed(0);\n }\n }, 100) \n }\n\n\n const getIntensityMean = () => {\n var intensityMeanIntetrval = setInterval(function() { \n if (labelUpdate = 0 || document.getElementById('intensityMean') == null){\n //document.getElementById('fundamentalMean').innerHTML = \"0.00\";\n clearInterval(intensityMeanIntetrval);\n }\n else {\n document.getElementById('intensityMean').innerHTML = artvaModule.intensityMean.toFixed(0);\n }\n }, 100) \n }\n\n\n //f0\n const getFundamentalCurrent = () => {\n var fundamentalCurrentIntetrval = setInterval(function() { \n if (document.getElementById('fundamentalCurrent') == null){\n clearInterval(fundamentalCurrentIntetrval);\n }\n else {\n if (artvaModule.fundamentalCurrent > 70 && artvaModule.fundamentalCurrent < 1000){\n document.getElementById('fundamentalCurrent').innerHTML = artvaModule.fundamentalCurrent.toFixed(2);\n }\n else {\n document.getElementById('fundamentalCurrent').innerHTML = \"0.00\";\n }\n }\n }, 100) \n }\n\n\n const getFundamentalMean = () => {\n var fundamentalMeanIntetrval = setInterval(function() { \n if (labelUpdate = 0 || document.getElementById('fundamentalMean') == null){\n clearInterval(fundamentalMeanIntetrval);\n }\n else {\n if (artvaModule.fundamentalMean > 0){\n document.getElementById('fundamentalMean').innerHTML = artvaModule.fundamentalMean.toFixed(2);\n }\n else {\n document.getElementById('fundamentalMean').innerHTML = \"0.00\";\n }\n }\n }, 100) \n }\n\n\n //HNR\n const getHnrCurrent = () => {\n var hnrCurrentIntetrval = setInterval(function() { \n if (labelUpdate = 0 || document.getElementById('hnrCurrent') == null){\n clearInterval(hnrCurrentIntetrval);\n }\n else {\n if (artvaModule.hnrCurrent > 0.00){\n document.getElementById('hnrCurrent').innerHTML = artvaModule.hnrCurrent.toFixed(2);\n }\n else{\n document.getElementById('hnrCurrent').innerHTML = \"0.00\";\n }\n }\n }, 100) \n }\n\n\n const getHnrMean = () => {\n var hnrMeanIntetrval = setInterval(function() { \n if (labelUpdate = 0 || document.getElementById('hnrMean') == null){\n clearInterval(hnrMeanIntetrval);\n }\n else {\n if (artvaModule.hnrMean > 0){\n document.getElementById('hnrMean').innerHTML = artvaModule.hnrMean.toFixed(2);\n }\n else{\n document.getElementById('hnrMean').innerHTML = \"0.00\";\n }\n }\n }, 100) \n }\n\n //Jitter\n const getJitterCurrent = () => {\n var jitterCurrentIntetrval = setInterval(function() { \n if (labelUpdate = 0) {\n document.getElementById('jitterCurrent').innerHTML = \"0.00\";\n clearInterval(jitterCurrentIntetrval);\n }\n if (document.getElementById('jitterCurrent') == null){\n clearInterval(jitterCurrentIntetrval);\n }\n else {\n if (artvaModule.jitterCurrent > 0){\n document.getElementById('jitterCurrent').innerHTML = artvaModule.jitterCurrent.toFixed(2);\n }\n else{\n document.getElementById('jitterCurrent').innerHTML = \"0.00\";\n }\n }\n }, 100) \n }\n\n const getJitterMean = () => {\n var jitterMeanIntetrval = setInterval(function() { \n if (labelUpdate = 0 || document.getElementById('jitterMean') == null){\n clearInterval(jitterMeanIntetrval);\n }\n else {\n if (artvaModule.jitterMean > 0){\n\n document.getElementById('jitterMean').innerHTML = artvaModule.jitterMean.toFixed(2);\n }\n else{\n document.getElementById('jitterMean').innerHTML = \"0.00\";\n }\n }\n }, 100) \n }\n\n //Shimmer\n const getShimmerCurrent = () => {\n var shimmerCurrentIntetrval = setInterval(function() { \n if (labelUpdate = 0) {\n document.getElementById('shimmerCurrent').innerHTML = \"0.00\";\n clearInterval(shimmerCurrentIntetrval);\n }\n if (document.getElementById('shimmerCurrent') == null){\n clearInterval(shimmerCurrentIntetrval);\n }\n else {\n if (artvaModule.shimmerCurrent > 0){\n document.getElementById('shimmerCurrent').innerHTML = artvaModule.shimmerCurrent.toFixed(2);\n }\n else{\n document.getElementById('shimmerCurrent').innerHTML = \"0.00\";\n }\n }\n }, 100) \n }\n\n const getShimmerMean = () => {\n var shimmerMeanIntetrval = setInterval(function() { \n if (labelUpdate = 0 || document.getElementById('shimmerMean') == null){\n clearInterval(shimmerMeanIntetrval);\n }\n else {\n if (artvaModule.shimmerMean > 0){\n document.getElementById('shimmerMean').innerHTML = artvaModule.shimmerMean.toFixed(2);\n }\n else{\n document.getElementById('shimmerMean').innerHTML = \"0.00\";\n }\n }\n }, 100) \n }\n\n function resetResultsBtn () {\n if(communicationStore.hnrDisplay || communicationStore.shimmerDisplay || communicationStore.fundamentalDisplay || communicationStore.jitterDisplay){\n resetResults = 1;\n if(communicationStore.jitterDisplay){\n document.getElementById('jitterMean').innerHTML = \"0.00\";\n } \n if(communicationStore.shimmerDisplay){\n document.getElementById('shimmerMean').innerHTML = \"0.00\";\n } \n if(communicationStore.hnrDisplay){\n document.getElementById('hnrMean').innerHTML = \"0.00\";\n } \n if(communicationStore.fundamentalDisplay){\n document.getElementById('fundamentalMean').innerHTML = \"0.00\";\n }\n if(communicationStore.intensityDisplay){\n document.getElementById('intensityMean').innerHTML = \"0.00\";\n }\n setTimeout(() => { resetResults = 0; }, 400);\n }\n }\n\n function handlerFunction(stream){\n const rec = new MediaRecorder(stream);\n // rec.\n }\n\n function myFunction(){\n console.log(\"my function\");\n }\n\n const openCloseModal = () => setIsCloseModalOpen(!isCloseModalOpen);\n const openSettingsModal = () => setIsSettingsModalOpen(!isSettingsModalOpen);\n\n const backModalFooter =\n (\n history.goBack()} px={3}>Ja, beëindigen\n setIsCloseModalOpen(false)} ml={3}>Nee, in het gesprek\n blijven\n );\n\n const NoCameraModal = () => (\n \n De camera toestemming voor de browser staat geblokkeerd.\n );\n\n const errorModalFooter = (\n history.goBack()} px={3}>Ga terug\n );\n\n const toggleMuteSound = () => {\n communicationService.getLocalStream().getAudioTracks().forEach(t => t.enabled = !t.enabled);\n setIsAudioMuted(!isAudioMuted);\n const userId = location.state.role === INITIATOR ? receiverInfo.public_id : initiatorInfo.public_id;\n api.getCommunicationApi().put(`/calls/settings/${userId}`, {muteAudio: !isAudioMuted, muteVideo: isVideoMuted, shareScreen: isScreenShared});\n }\n\n const toggleMuteVideo = () => {\n communicationService.getLocalStream().getTracks().forEach(t => t.enabled = !t.enabled);\n setIsVideoMuted(!isVideoMuted);\n const userId = location.state.role === INITIATOR ? receiverInfo.public_id : initiatorInfo.public_id;\n api.getCommunicationApi().put(`/calls/settings/${userId}`, {muteAudio: isAudioMuted, muteVideo: !isVideoMuted, shareScreen: isScreenShared});\n \n }\n\n // const toggleMouseShare = async () => {\n // const userId = location.state.role === INITIATOR ? receiverInfo.public_id : initiatorInfo.public_id;\n // setIsMouseShared(!isMouseShared);\n // api.getCommunicationApi().put(`/calls/settings/${userId}`, {muteAudio: isAudioMuted, muteVideo: isVideoMuted, shareScreen: isScreenShared});\n\n // // if (isMouseShared) {\n // // let data = null;\n // // if (location.state.role === INITIATOR) {\n // // //await communicationService.initializeDataStreamConnection(receiverInfo.public_id)\n // // data = await communicationService.getDataStreamConnection().connect(receiverInfo.dataStreamConnectionId);\n // // } else {\n // // //await communicationService.initializeDataStreamConnection(initiatorInfo.public_id)\n // // data = await communicationService.getDataStreamConnection().connect(initiatorInfo.dataStreamConnectionId);\n // // }\n // // //setMousePosition(data);\n // // data.on('open', (dataConnection) => setMousePosition(data));\n // // data.on('error', (err) => console.log(err));\n // // data.on(\"disconnected\", () => console.log('disconnected from data channel in transmit mouse'));\n // // }\n // }\n\n // const captureMouseMovement = (event) => {\n // // console.log(\"captureMouse\")\n // // if (mousePosition) {\n // // mousePosition.send({x: event.offsetX, y: event.clientY});\n // // }\n // if (isMouseShared) {\n // const rect = event.target.getBoundingClientRect();\n // const posX = event.clientX - rect.left;\n // const posY = event.clientY - rect.top;\n\n // console.log(posX, posY);\n\n // const userId = location.state.role === INITIATOR ? receiverInfo.public_id : initiatorInfo.public_id;\n // api.getCommunicationApi().post(`/calls/mouse/${userId}`, {x: posX, y:posY, height:rect.bottom - rect.top, width:rect.right - rect.left});\n // }\n // };\n\n return (\n \n \n \n setIsCloseModalOpen(false)}\n >\n {t('videochat.warnEnd')}\n \n \n \n \n \n \n {t('videochat.back')}\n \n {location.state?.role === INITIATOR && !!stream &&\n \n \n ARTVA \n \n }\n \n {t('videochat.conversationWith')} {getCalleeName()}\n\n {callStarted && isPartnerMouseShared && mousePosition && }\n\n \n \n\n \n setShowCallButtons(true)}\n onMouseLeave={() => setShowCallButtons(false)}>\n\n {callStarted && }\n {callStarted && }\n {callStarted && }\n {!callStarted && (\n \n \n {t('videochat.waitingFor')} {getCalleeName()} {t('videochat.toStart')}\n \n )}\n \n \n \n \n {callStarted && isAudioMuted ? : <> }\n {callStarted && isVideoMuted ? : <> }\n {callStarted && isScreenShared ? : <> }\n \n \n \n {callStarted && isPartnerAudioMuted ? : <> }\n {callStarted && isPartnerVideoMuted ? : <> }\n {callStarted && isPartnerMouseShared ? : <> }\n {callStarted && isPartnerScreenShared ? : <> }\n \n \n \n \n {(communicationStore.hnrDisplay || communicationStore.shimmerDisplay || communicationStore.fundamentalDisplay || communicationStore.jitterDisplay || communicationStore.intensityDisplay) && !!stream && \n     ARTVA feature details
\n
\n {communicationStore.intensityDisplay == true && <>\n   Intensity (dB)
\n  Current:   
\n  Mean:    

\n }\n {communicationStore.fundamentalDisplay == true && <>\n   F0 (Hz)
\n  Current:   
\n  Mean:    

\n }\n {communicationStore.hnrDisplay == true && <>\n   HNR (dB)
\n  Current:   
\n  Mean:    

\n }\n {communicationStore.shimmerDisplay == true && <>\n   Shimmer (%)
\n  Current:   
\n  Mean:    

\n }\n {communicationStore.jitterDisplay == true && <>\n   Jitter (%)
\n  Current:   
\n  Mean:    

\n }\n \n
}\n
\n
\n {location.state?.role === INITIATOR && !!stream && \n }\n
\n
\n
\n );\n});\n\nexport default withRouter(VideoCallPage);\nexport { resetResults };\n","import React, {useContext, useEffect, useState, useRef} from 'react';\nimport styled from 'styled-components';\nimport {compose, space, flexbox} from 'styled-system';\nimport Text from '../text';\nimport {withRouter} from 'react-router-dom';\nimport BackButton from '../backButton';\nimport registrationStore from \"../../../components/registrationStore\";\nimport ChatStore from '../../stores/chat.store';\nimport chatService from '../../services/chatService';\nimport { observer } from \"mobx-react\";\nimport Button from '../../../components/styled/button';\nimport Card from '../../../components/styled/card';\nimport { useTranslation } from \"react-i18next\";\nimport Global from \"../../../components/styled/global\";\nimport PageWrapper from \"../../../components/styled/pageWrapper\";\nimport PatientOverlay from \"../../../components/overlays/patientOverlay\";\nimport TherapistOverlay from \"../../../components/overlays/therapistOverlay\";\n\nconst ChatPageContainer = styled.div`\n display: flex;\n flex-direction: column;\n ${compose(space)}\n`;\n\nconst ChatBlock = styled.div`\n display: flex;\n overflow: hidden;\n ${compose(flexbox)}\n`;\n\nconst BackButtonContainer = styled.div`\n ${compose(space)}\n`;\n\nconst HeaderContainer = styled.div`\n width: 100%;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n`\n\nconst MessagesContainer = styled(Card)`\n width: 45%;\n height: 50vh;\n overflow-y: scroll;\n display: flex;\n flex-direction: column;\n justify-content: left;\n -ms-overflow-style: none; /* Internet Explorer 10+ */\n scrollbar-width: none; /* Firefox */\n\n ::-webkit-scrollbar { \n display: none; /* Safari and Chrome */\n }\n`\n\nconst MessageForm = styled.form`\n width: 100%;\n display: flex;\n flex-Direction: row;\n`\n\nconst Input = styled.input`\n background: #FFFFFF;\n border: 1px solid #51C0CF;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 10px;\n margin-bottom: 10px;\n outline: none;\n margin-right: 0px;\n min-width: 35%;\n`\n\nconst SubmitButton = styled(Button)`\n margin-top: 10px;\n margin-bottom: 10px;\n margin-left: 10px;\n min-width: 10%;\n`\n\nconst CardStyled = styled(Card)`\n width: 100%;\n margin-top: auto;\n background: #e4e6eb;\n border: 0.5px solid #e4e6eb;\n`\n\nconst MessageWrapper = styled.div`\n width: 45%;\n margin-left: ${props => props.myMessage ? \"auto\" : \"0\"};\n`\n\nconst ChatPage = observer(({location, history}) => {\n const { t, i18n } = useTranslation();\n const [message, SetMessage] = useState(\"\");\n const [chat, SetChat] = useState(null);\n const [attendees, SetAttendees] = useState([]);\n const chatStore = useContext(ChatStore);\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n\n useEffect(() => {\n SetChat(chatStore.activeChat);\n }, [chatStore.activeChat]);\n\n // create chat if not exists\n useEffect(() => {\n var chatPromise = location.state.id ? chatService.getChat(location.state.id) : null;\n\n if (chatPromise !== null) {\n chatPromise.then(async({data}) => {\n chatStore.setActiveChat(data);\n SetAttendees(data.attendees);\n });\n } else {\n const body = {\n messages: [],\n finished: false,\n initiator: location.state.initiatorId,\n attendees: [location.state.initiatorId, location.state.receiverId],\n counts: 0\n };\n chatService.createChat(body)\n .then(async({data}) => {\n chatStore.setActiveChat(data);\n SetAttendees(data.attendees);\n })\n .catch(() => null);\n }\n }, []);\n\n // fetch user info of receiver and initiator\n const GetChatPartenerFullName = () => {\n if(attendees === undefined) return '';\n var fullName;\n attendees.forEach(attendee => {\n if (attendee.public_id !== user.public_id) fullName = `${attendee.firstName} ${attendee.lastName}`;\n });\n return fullName;\n }\n\n //send a new message\n const SendMessage = async (e) => {\n await chatService.sendMessage(chat?.id, message, user.public_id);\n }\n\n const AlwaysScrollToBottom = () => {\n const elementRef = useRef();\n useEffect(() => elementRef.current.scrollIntoView({behavior: \"smooth\"}));\n return
;\n };\n\n const HandleInputSubmit = (e) => {\n e.preventDefault();\n SendMessage();\n SetMessage(\"\");\n };\n\n const ShowAttendeeFullName = (public_id) => {\n return attendees.filter(x => x.public_id === public_id).map(x => `${x.firstName} ${x.lastName}`);\n }\n\n const SetViewed = async () => {\n if (chat && chat.counts > 0) {\n const last = chat.messages[chat.messages.length - 1];\n if (last && last.instigatorId != user.public_id) {\n await chatService.setViewed(chat.id);\n }\n }\n }\n\n return (\n \n \n {user.therapist ? : }\n \n \n history.goBack()} mb={3}>\n {t(\"chat.back\")} \n \n \n {t(\"chat.conversationWith\")} {GetChatPartenerFullName()}\n \n \n {chat?.messages.map((message) => {\n return (\n {ShowAttendeeFullName(message.instigatorId)}\n \n {message.message}\n \n {new Date(message.message_date).toLocaleString(i18n.language)}\n )\n })}\n \n \n \n SetMessage(e.target.value)}\n onFocus={() => SetViewed()}\n />\n {t(\"chat.sendMessage\")}\n \n \n \n \n \n );\n});\n\nexport default withRouter(ChatPage);\n\n","import {color, compose, space} from 'styled-system'\nimport React, {useEffect, useContext, useState} from 'react';\nimport Card from '@eu.jstack/react-card';\nimport {observer} from 'mobx-react-lite';\nimport styled, {ThemeProvider} from 'styled-components';\nimport extendedTheme from '../../theme';\nimport Icon from '../icon';\nimport {faPhoneAlt} from '@fortawesome/free-solid-svg-icons';\nimport Text from '../text';\nimport {withRouter} from 'react-router-dom';\nimport {PrimaryButton, TertiaryButton} from '@eu.jstack/react-button';\nimport callService from '../../services/callService';\nimport api from '../../api';\nimport CommunicationStore from '../../stores/communication.store';\nimport { useTranslation } from \"react-i18next\";\n\nconst Highlight = styled.div`\n height: 100px;\n width: 5px;\n ${compose(color)};\n`;\n\nconst CardContainer = styled.div`\n display: flex;\n align-items: center;\n ${compose(space)}\n`;\n\nconst CallIconContainer = styled.div`\n display: flex;\n align-items: center;\n height: 100%;\n ${compose(space)}\n`;\n\nconst CallIconCircle = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n width: 50px;\n height: 50px;\n border-radius: 50%;\n ${compose(color)}\n`;\n\nconst DescriptionContainer = styled.div`\n display: flex;\n flex-direction: column;\n ${compose(space)}\n`;\n\nconst ActionContainer = styled.div`\n display: flex;\n flex-direction: row;\n ${compose(space)}\n`;\n\nconst ActiveCallNotification = observer(({history, location}) => {\n const communicationStore = useContext(CommunicationStore);\n const [activeCall, setActiveCall] = useState(null);\n const { t, i18n } = useTranslation();\n\n useEffect(() => {\n api.createAPI();\n\n callService.getActiveCalls()\n .then(({data}) => {\n if (data.length > 0) {\n communicationStore.showActiveCallBanner();\n setActiveCall(data[0]); // for now only select the first active call\n } else {\n communicationStore.hideActiveCallBanner();\n setActiveCall(null);\n }\n });\n }, [communicationStore.isActiveCallBannerShown, communicationStore.isInCall, communicationStore.isCallFinished]);\n\n if (!communicationStore.isActiveCallBannerShown || location.pathname === '/video-chat') {\n return null;\n }\n\n const getCallerName = () => {\n if (!activeCall) {\n return;\n }\n\n // caller is initiator\n const caller = activeCall.attendees.find(attendee => attendee.public_id === activeCall.initiator);\n return `${caller.firstName} ${caller.lastName}`\n };\n\n const acceptCall = () => {\n communicationStore.hideActiveCallBanner();\n communicationStore.setIsInCall(true);\n history.push('/video-chat', {\n receiverId: activeCall.attendees.find(attendee => attendee.public_id !== activeCall.initiator).public_id,\n initiatorId: activeCall.initiator,\n role: 'receiver'\n });\n };\n\n const refuseCall = () => {\n communicationStore.hideActiveCallBanner();\n callService.finishCall(activeCall.id);\n };\n\n return (\n \n \n \n\n \n \n \n \n \n \n\n \n {t('videochat.incoming')}\n {t('videochat.from')} {getCallerName()}\n \n\n \n acceptCall()} px={3}>{t('videochat.accept')}\n refuseCall()} ml={3}>{t('videochat.deny')}\n \n \n \n \n )\n});\n\nexport default withRouter(ActiveCallNotification);\n","import React, {useEffect, useContext} from 'react';\nimport {observer} from 'mobx-react-lite';\nimport {withRouter} from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport CommunicationStore from '../../stores/communication.store';\nimport AuthenticationStore from '../../stores/authentication.store';\n\nconst Initialize = observer(({history, location, userId}) => {\n const communicationStore = useContext(CommunicationStore);\n const authenticationStore = useContext(AuthenticationStore);\n\n useEffect(() => {\n communicationStore.initialize(userId);\n }, [userId]);\n\n // useEffect(() => {\n // communicationStore.initializeData(userId);\n // }, []);\n\n useEffect(() => {\n if (authenticationStore.redirectToLogin) {\n history.replace('/login');\n authenticationStore.setRedirectToLogin(false);\n }\n }, [authenticationStore.redirectToLogin]);\n\n // on call finished navigate back to the overview\n useEffect(() => {\n if (communicationStore.isCallFinished && location.pathname === '/video-chat') {\n history.goBack();\n }\n communicationStore.setIsCallFinished(false);\n }, [communicationStore.isCallFinished]);\n\n return null;\n});\n\nInitialize.propTypes = {\n userId: PropTypes.string.isRequired\n};\n\nexport default withRouter(Initialize);\n","import React, {useContext, useState, useEffect} from 'react'\nimport { Formik, Form, Field } from 'formik'\nimport * as Yup from 'yup'\nimport styled from 'styled-components'\nimport Button from '../components/styled/button'\nimport {api} from \"../api\"\nimport { H2 } from '../components/styled/typography'\nimport Header from '../components/header'\nimport Card from '../components/styled/card'\nimport Global from '../components/styled/global'\nimport LoadSpinner from '../components/loadspinner'\nimport Flash from \"../components/styled/flashMessage\"\nimport { useTranslation } from \"react-i18next\"\n\nconst LoginForm = styled(Form)`\n`\n\nconst FormGroup = styled.div`\n display: flex;\n flex-direction: column;\n margin-bottom: 20px;\n`\n\nconst Input = styled(Field)`\n background: #FFFFFF;\n border: 1px solid #51C0CF;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n`\n\nconst Label = styled.label`\n font-size: 16px;\n font-weight: 600;\n color: #545454;\n`\n\nconst SubmitButton = styled(Button)`\n margin-top: 20px;\n padding-right: 45px;\n padding-left: 45px;\n font-size: 18px;\n`\n\nconst Error = styled.p`\n font-size: 16px;\n color: #FFF;\n font-style: italic;\n background-color: #DC393D;\n border: 1px solid #DC393D;\n border-radius: 10px;\n padding: 10px 15px;\n`\n\nconst Center = styled.div`\n text-align: center;\n`\n\nconst SmallTitle = styled(H2)`\n margin-bottom: 40px;\n margin-top: 20px;\n`\n\nconst PasswordCard = styled(Card)`\n width: 90%;\n margin: 5vh auto;\n\n @media (min-width: 768px) {\n width: 70%;\n margin: 10vh auto;\n padding: 40px 50px;\n }\n`\n\nfunction ResetPassword(props){\n const { t, i18n } = useTranslation()\n const token = props.match.params.token\n const [showFail, setShowFail] = useState(false)\n const [showSucces, setShowSucces] = useState(false)\n\n return(\n
\n
\n \n {showSucces && {t('resetPassword.passSucc')}}\n {showFail && {t('resetPassword.tokenInvalid')}}\n {\n api.put('/verify_token', {password: values.newpassword, token: token}).then(function(response){\n if (response.data.verified){\n setShowSucces(true)\n }else{\n setShowFail(true)\n }\n actions.setSubmitting(false)\n })\n }}\n render={({errors, touched}, isSubmitting) => (\n \n {t('passwordResetForm.changeTitle')}\n \n \n \n { touched.newpassword && errors.newpassword && {errors.newpassword}}\n \n \n \n \n { touched.repeatnewpassword && errors.repeatnewpassword && {errors.repeatnewpassword}}\n \n
\n {t('passwordResetForm.changeTitle')}\n
\n
\n \n )}\n validationSchema={Yup.object().shape({\n newpassword: Yup.string().matches(/^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,20}$/,t('passwordResetForm.passRes')).required(t('passwordResetForm.giveNew')),\n repeatnewpassword: Yup.string().test(t('passwordResetForm.match'), t('passwordResetForm.corrPass'), function(value) {\n return this.parent.newpassword === value;}),\n })}\n />\n
\n
\n )\n}\n\nexport default ResetPassword;","import React from 'react';\nimport styled from \"styled-components\"\nimport {H1} from \"../components/styled/typography\"\nimport Button from \"../components/styled/button\"\nimport { useTranslation } from \"react-i18next\"\n\n\nconst Flex = styled.div`\n height: 100vh;\n width: 100vw;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n`\n\nconst BackButton = styled(Button)`\n margin-top: 20px;\n`\n\n\nconst Error = () => {\n const { t, i18n } = useTranslation()\n\n const handleClick = () => {\n window.history.back()\n }\n return (\n \n

{t('error.err1')}

\n {t('error.err2')}\n
\n )\n}\n\nexport default Error;","import React from \"react\"\nimport Error from \"../pages/error\"\nimport * as Sentry from '@sentry/browser';\n\nexport const isProduction = process.env.NODE_ENV === 'production';\n\nclass ErrorHandler extends React.Component {\n constructor(props) {\n super(props)\n this.state = { errorOccurred: false }\n }\n \n componentDidCatch(err, description) {\n this.setState({ errorOccurred: true })\n if (!isProduction) {\n console.error(err, description)\n }\n Sentry.withScope(scope => {\n scope.setExtras(description);\n Sentry.captureException(err);\n })\n }\n render() {\n return this.state.errorOccurred ? : this.props.children\n }\n }\n \nexport default ErrorHandler;","import { observable, action } from \"mobx\";\nimport { createContext } from \"react\";\n\nclass FileUploadStore {\n @observable files = [];\n @observable id = 0;\n @observable isUploading = false;\n\n @action setFiles(files) {\n this.files = files;\n }\n\n @action setId(id) {\n this.id = id;\n }\n\n @action setIsUploading(isUploading) {\n this.isUploading = isUploading;\n }\n}\n\nexport const FileUploadStoreInstance = new FileUploadStore();\n\nexport default createContext(FileUploadStoreInstance);\n","import React, { useState, useContext } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport Media from \"../libraryComponents/media\";\nimport Card from \"../styled/card\";\nimport Button from \"../styled/button\";\nimport { useTranslation } from \"react-i18next\";\nimport { SmallTitle, P } from \"../styled/typography\";\nimport { FaTimes } from \"react-icons/fa\";\nimport FileForm from \"../fileForm/fileForm\";\nimport registrationStore from \"../registrationStore\";\nimport Filter from \"../filterComponents/filter\";\nimport LanguageStore from \"../stores/languageStore\";\n\nconst Overlay = styled.div`\n background-color: rgba(60, 60, 60, 0.7);\n position: fixed;\n top: 0px;\n left: 0;\n width: 100vw;\n height: 100%;\n z-index: 999;\n display: flex;\n justify-content: center;\n align-items: center;\n\n @media (min-width: 980px) {\n top: 0;\n height: 100vh;\n width: 100vw;\n }\n`;\n\nconst OverlayCard = styled(Card)`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n max-height: 75%;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n box-sizing: border-box;\n padding: 30px;\n position: absolute;\n z-index: 999999;\n\n @media (min-width: 980px) {\n position: relative;\n top: 0;\n z-index: 9;\n }\n`;\n\nconst Content = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n`;\n\nconst Title = styled.div`\n display: inline-block;\n position: relative;\n color: #545454;\n margin-bottom: 0px;\n`;\n\nconst SelectMedia = styled(SmallTitle)`\n margin: 30px 0px 10px 0px;\n`;\n\nconst Times = styled(FaTimes)`\n color: #545454;\n position: absolute;\n right: 20px;\n top: 20px;\n cursor: pointer;\n`;\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n }\n`;\n\nconst FullWidth = styled.div`\n width: 100%;\n`;\n\nconst LinkButton = styled(Button)`\n margin-bottom: 10px;\n`;\n\nfunction MediaSelectionOverlay(props) {\n const { t, i18n } = useTranslation();\n const [refresh, setRefresh] = useState(false);\n const [selection, setSelection] = useState([]);\n const [showFileForm, setShowFileForm] = useState(false);\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const langStore = useContext(LanguageStore);\n const [filterData, setFilterData] = useState({\n title: \"\",\n language: langStore.getLanguage(i18n.language),\n tags: [],\n });\n\n const handleFileFormClose = () => {\n setRefresh(!refresh);\n setShowFileForm();\n };\n\n const handleClick = (id, title, type) => {\n setSelection({ id, title, type });\n };\n\n const HandleSubmit = () => {\n props.setSelection(selection);\n props.close();\n };\n\n const getFilterResults = (data) => {\n setFilterData(data);\n };\n\n return (<>\n \n \n \n {t(\"mediaOverlay.selectMedia\")}\n \n getFilterResults(data)} />\n \n \n \n <h2>{t(\"materiaalRaadplegen.media\")}</h2>\n \n handleClick(event, id, title, type)}\n refresh={refresh}\n showDescription={true}\n />\n \n \n {/* {! props.skipUpload && \n setShowFileForm(true)}>{t(\"mediaOverlay.createNew\")} \n } */}\n \n \n \n \n\n { showFileForm &&\n \n \n \n \n \n \n }\n );\n}\n\nexport default MediaSelectionOverlay;\n","import React, { useState, useEffect, useRef, useContext } from \"react\";\nimport * as Yup from \"yup\";\nimport styled from \"styled-components\";\nimport { Formik, Form, Field, FieldArray, getIn, useFormikContext } from \"formik\";\nimport Button from \"../styled/button\";\nimport registrationStore from \"../registrationStore\";\nimport { observer } from \"mobx-react-lite\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n FaTimes,\n FaTrash,\n FaPencilAlt,\n FaInfoCircle,\n FaShoePrints,\n FaCog,\n FaBullhorn,\n FaPhotoVideo\n} from \"react-icons/fa\";\nimport Card from \"../styled/card\";\nimport { SmallTitle, P } from \"../styled/typography\";\nimport { Switch } from \"../styled/switch\";\nimport MediaOverlay from \"./mediaSelectionOverlay\";\nimport { Disciplines, Subdisciplines } from \"../resources/disciplines\";\nimport { Languages } from \"../resources/languages\";\nimport TagSelect from \"../helperComponents/tagSelect\";\nimport CKEditor from \"@ckeditor/ckeditor5-react\";\nimport ClassicEditor from \"@ckeditor/ckeditor5-build-classic\";\nimport {DisplayFormikState} from \"../helperComponents/formHelper\";\n\nconst ExcerciseForm = styled(Form)``;\n\nconst FormGroup = styled.div`\n display: flex;\n flex-direction: column;\n margin-bottom: 20px;\n`;\n\nconst MultiLineGroup = styled.div`\n display: flex;\n flex-direction: column;\n padding-left: 20px;\n border-left: 1px solid rgba(123, 140, 168, 0.25);\n`;\n\nconst Input = styled(Field)`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n max-height: 100%;\n margin-right: 20px;\n\n &:focus {\n resize: both;\n }\n`;\n\nconst Label = styled.label`\n font-size: 16px;\n font-weight: 600;\n color: #545454;\n margin-right: 20px;\n`;\n\nconst Error = styled.p`\n font-size: 16px;\n color: #afafaf;\n font-style: italic;\n`;\n\nconst Overlay = styled.div`\n background-color: rgba(60, 60, 60, 0.7);\n position: fixed;\n top: 0px;\n left: 0;\n width: 100vw;\n height: 100%;\n z-index: 999;\n display: flex;\n justify-content: center;\n align-items: center;\n\n @media (min-width: 980px) {\n top: 0;\n height: 100vh;\n width: 100vw;\n }\n`;\n\nconst OverlayCard = styled(Card)`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n max-height: 75%;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n box-sizing: border-box;\n padding: 30px;\n position: absolute;\n z-index: 999999;\n\n @media (min-width: 980px) {\n position: relative;\n top: 0;\n z-index: 9;\n }\n`;\n\nconst Times = styled(FaTimes)`\n color: #545454;\n position: absolute;\n right: 20px;\n top: 20px;\n cursor: pointer;\n`;\n\nconst Trash = styled(FaTrash)`\n color: #545454;\n cursor: pointer;\n`;\n\nconst Pencil = styled(FaPencilAlt)`\n color: #545454;\n margin-right: 20px;\n cursor: pointer;\n`;\n\nconst SmallButton = styled(Button)`\n margin-top: 5px;\n width: fit-content;\n`;\n\nconst SelectMediaButton = styled(Button)` \n display: inline-block;\n vertical-align: middle;\n height: 25px; \n padding: 3px 15px 10px 15px; \n font-size: 0.9em;\n text-align: center;\n margin-left: 10px;\n`;\n\nconst Title = styled(SmallTitle)`\n margin-top: 10px;\n margin-right: 40px;\n`;\n\nconst FileCard = styled(Card)`\n margin-bottom: 10px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n\nconst InfoIcon = styled(FaInfoCircle)` \n color: #51c0cf;\n font-size: 15px;\n margin-right: 10px;\n vertical-align: middle;\n margin-bottom: 5px;\n`;\n\nconst StepsIcon = styled(FaShoePrints)` \n color: #51c0cf;\n font-size: 15px;\n margin-right: 10px;\n vertical-align: middle;\n margin-bottom: 5px;\n`;\n\nconst CogIcon = styled(FaCog)` \n color: #51c0cf;\n font-size: 15px;\n margin-right: 10px;\n vertical-align: middle;\n margin-bottom: 5px;\n`;\n\nconst BullHornIcon = styled(FaBullhorn)` \n color: #51c0cf;\n font-size: 15px;\n margin-right: 10px;\n vertical-align: middle;\n margin-bottom: 5px;\n`;\n\nconst MultimediaIcon = styled(FaPhotoVideo)` \n color: #51c0cf;\n font-size: 15px;\n margin-right: 10px;\n vertical-align: middle;\n margin-bottom: 5px;\n`;\n\nconst ExerciseForm = observer(({ onSubmit, ...props }) => {\n const { t, i18n } = useTranslation();\n const [formSchema, setFormShema] = useState(Yup.object().shape({}));\n const [showOverlay, setShowOverlay] = useState(false);\n const [showSecondOverlay, setShowSecondOverlay] = useState(false);\n const [showMediaOverlay, setShowMediaOverlay] = useState(false);\n const [questionTypeId, setQuestionTypeId] = useState(-1);\n const [questionId, setQuestionId] = useState(-1);\n const [stepId, setStepId] = useState(-1);\n const [mediaInputLabel, setMediaInputLabel] = useState(\"\");\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [tags, setTags] = useState([]);\n\n const handleSubmit = async (values) => {\n let fullValues = { ...values };\n\n //Remap and add default tags\n fullValues.tags = tags;\n fullValues.type = props.exerciseType;\n\n //Add user email to private check\n if (fullValues.private?.shouldBePrivate) {\n fullValues.private = {\n shouldBePrivate: fullValues.private.shouldBePrivate,\n usernamePrivate: user?.email,\n };\n } else {\n fullValues.private = {\n shouldBePrivate: false,\n usernamePrivate: user?.email,\n };\n }\n\n //Add needed values to schaal type questions in vragenlijst\n if (props.exerciseType === \"dagboek\") {\n\n fullValues.questionTypes.forEach((questionType) => {\n questionType.questions.forEach((question) => {\n if (question.answerpossibility === \"schaal\") {\n question.scalePossibilities = question.fieldnames.length;\n question.maxScore = Math.max(...question.fieldvalues);\n }\n });\n });\n }\n\n //Clean unwanted step checker values\n fullValues.goal?.media?.enabled ? delete fullValues.goal?.media?.enabled : delete fullValues.goal?.media;\n fullValues.goal?.video?.enabled ? delete fullValues.goal?.video?.enabled : delete fullValues.goal?.video;\n fullValues.preparation?.media?.enabled\n ? delete fullValues.preparation?.media?.enabled\n : delete fullValues.preparation?.media;\n fullValues.preparation?.video?.enabled\n ? delete fullValues.preparation?.video?.enabled\n : delete fullValues.preparation?.video;\n fullValues.mediaComplete?.enabled ? delete fullValues.mediaComplete?.enabled : delete fullValues.mediaComplete;\n fullValues.audioComplete?.enabled ? delete fullValues.audioComplete?.enabled : delete fullValues.audioComplete;\n fullValues.videoComplete?.enabled ? delete fullValues.videoComplete?.enabled : delete fullValues.videoComplete;\n if (fullValues.steps) {\n fullValues.steps.forEach((step) => {\n step.media?.enabled ? delete step.media?.enabled : delete step.media;\n step.audio?.enabled ? delete step.audio?.enabled : delete step.audio;\n step.video?.enabled ? delete step.video?.enabled : delete step.video;\n });\n }\n if (fullValues.questionTypes) {\n fullValues.questionTypes.forEach((questionType) => {\n questionType.questions.forEach((question) => {\n question.media?.enabled ? delete question.media?.enabled : delete question.media;\n question.audio?.enabled ? delete question.audio?.enabled : delete question.audio;\n question.video?.enabled ? delete question.video?.enabled : delete question.video;\n question.cue?.media?.enabled ? delete question.cue?.media?.enabled : delete question.cue?.media;\n question.cue?.audio?.enabled ? delete question.cue?.audio?.enabled : delete question.cue?.audio;\n question.cue?.video?.enabled ? delete question.cue?.video?.enabled : delete question.cue?.video;\n });\n });\n }\n\n onSubmit(fullValues);\n };\n\n const qaTypes = [\n ,\n ,\n ,\n ];\n const answerTypes = [\n ,\n ,\n ,\n ];\n const rewardSystems = [\n ,\n ,\n ,\n ];\n\n // FORM LOGIC\n\n const initialValues = {\n title: \"\",\n discipline: \"\",\n language: \"nederlands\",\n description: \"\"\n };\n\n const validationShape = {\n title: Yup.string()\n .max(20, t(\"exerciseForm.titleMaxChars\"))\n .required(t(\"exerciseForm.titleReqError\")),\n discipline: Yup.string().required(t(\"exerciseForm.disciplineReqError\")),\n subdiscipline: Yup.string().notRequired(),\n language: Yup.string().required(t(\"exerciseForm.languageReqError\")),\n description: Yup.string().notRequired(),\n private: Yup.object().shape({\n shouldBePrivate: Yup.bool().notRequired(),\n })\n };\n\n const mediaValidationShape = {\n enabled: Yup.boolean().notRequired(),\n asset: Yup.string().when(\"enabled\", {\n is: (val) => val,\n then: Yup.string().required(t(\"exerciseForm.assetReqError\")),\n otherwise: Yup.string().notRequired(),\n }),\n };\n\n const formikRef = useRef();\n useEffect(() => {\n //restForm\n if (formikRef.current != null) {\n formikRef.current.resetForm();\n }\n //adapt validation\n adaptValidation();\n }, [props.exerciseType]);\n\n useEffect(() => {\n //Focus on overlay\n if (showOverlay) {\n autoFocus(\n 13,\n props.exerciseType === \"stappenplan\" ? `steps[${stepId}].text` : `questionTypes[${questionTypeId}].name`\n );\n }\n //adapt validation\n adaptValidation();\n }, [showOverlay]);\n\n useEffect(() => {\n //Focus on overlay\n if (showSecondOverlay) {\n autoFocus(13, `${getQuestionId()}.question`);\n }\n //adapt validation\n adaptValidation();\n }, [showSecondOverlay]);\n\n const adaptValidation = () => {\n let newValidation = validationShape;\n let question = {};\n let questionType = {};\n switch (props.exerciseType) {\n case \"dagboek\":\n question = Yup.object().shape({\n question: Yup.string().required(t(\"exerciseForm.vragenlijstQuestionReqError\")),\n answerpossibility: Yup.string().required(t(\"exerciseForm.vragenlijstAnswerPossibilityReqError\")),\n fieldnames: Yup.array()\n .of(Yup.string())\n .when(\"answerpossibility\", {\n is: (val) => val !== \"open antwoord\",\n then: Yup.array()\n .of(Yup.string().required(t(\"exerciseForm.fieldNameReqError\")))\n .min(1, t(\"exerciseForm.fieldNamesError\"))\n .required(t(\"exerciseForm.fieldNamesError\")),\n otherwise: Yup.array().of(Yup.string()).notRequired(),\n }),\n fieldvalues: Yup.array()\n .of(Yup.number())\n .when(\"answerpossibility\", {\n is: (val) => val !== \"open antwoord\",\n then: Yup.array()\n .of(\n Yup.number()\n .min(0, t(\"exerciseForm.fieldValueInvError\"))\n .required(t(\"exerciseForm.fieldValueReqError\"))\n )\n .test({\n name: \"min\",\n exclusive: false,\n params: {},\n message: t(\"exerciseForm.fieldValuesError\"),\n test: function (value) {\n return this.parent.fieldnames?.length > 0\n ? value?.length === this.parent.fieldnames?.length\n : value?.length > 0;\n },\n })\n .required(t(\"exerciseForm.fieldValuesError\")),\n otherwise: Yup.array().of(Yup.number()).notRequired(),\n })\n });\n questionType = Yup.object().shape({\n name: Yup.string().required(t(\"exerciseForm.vragenlijstQuestionTypeNameReqError\")),\n questions: Yup.array()\n .of(question)\n .min(1, t(\"exerciseForm.vragenlijstQuestionsError\"))\n .required(t(\"exerciseForm.vragenlijstQuestionsError\")),\n });\n newValidation.questionTypes = Yup.array()\n .of(questionType)\n .min(1, t(\"exerciseForm.vragenlijstQuestionTypeError\"))\n .required(t(\"exerciseForm.vragenlijstQuestionTypeError\"));\n break;\n case \"stappenplan\":\n const step = Yup.object().shape({\n text: Yup.string().required(t(\"exerciseForm.stepTextReqError\")),\n media: Yup.object().shape(mediaValidationShape),\n video: Yup.object().shape(mediaValidationShape),\n audio: Yup.object().shape(mediaValidationShape),\n });\n newValidation.steps = Yup.array()\n .of(step)\n .min(1, t(\"exerciseForm.stepsError\"))\n .required(t(\"exerciseForm.stepsError\"));\n newValidation.mediaComplete = Yup.object().shape(mediaValidationShape);\n newValidation.audioComplete = Yup.object().shape(mediaValidationShape);\n newValidation.videoComplete = Yup.object().shape(mediaValidationShape);\n newValidation.goal = Yup.object().shape({\n media: Yup.object().shape(mediaValidationShape),\n video: Yup.object().shape(mediaValidationShape),\n });\n newValidation.preparation = Yup.object().shape({\n media: Yup.object().shape(mediaValidationShape),\n video: Yup.object().shape(mediaValidationShape),\n });\n break;\n case \"stappenplanValidatie\":\n question = Yup.object().shape({\n question: Yup.string().required(t(\"exerciseForm.invulQuestionReqError\")),\n media: Yup.object().shape(mediaValidationShape),\n video: Yup.object().shape(mediaValidationShape),\n audio: Yup.object().shape(mediaValidationShape),\n cue: Yup.object()\n .shape({\n text: Yup.string().notRequired(),\n media: Yup.object().shape(mediaValidationShape),\n video: Yup.object().shape(mediaValidationShape),\n audio: Yup.object().shape(mediaValidationShape),\n })\n .notRequired(),\n typeOfAnswer: Yup.string().required(t(\"exerciseForm.typeOfAnswerReqError\")),\n correctAnswer: Yup.string().required(t(\"exerciseForm.correctAnswerReqError\")),\n answerPossibilities: Yup.array()\n .of(Yup.string())\n .when(\"typeOfAnswer\", {\n is: (val) => val === \"Meerkeuze\",\n then: Yup.array()\n .of(Yup.string().required(t(\"exerciseForm.invulAnswerPossibilityReqError\")))\n .min(1, t(\"exerciseForm.answerPossibilitiesError\"))\n .required(t(\"exerciseForm.answerPossibilitiesError\")),\n otherwise: Yup.array().of(Yup.string()).notRequired(),\n }),\n });\n questionType = Yup.object().shape({\n name: Yup.string().required(t(\"exerciseForm.invulQuestionTypeNameReqError\")),\n questions: Yup.array()\n .of(question)\n .min(1, t(\"exerciseForm.invulQuestionsError\"))\n .required(t(\"exerciseForm.invulQuestionsError\")),\n });\n newValidation.questionTypes = Yup.array()\n .of(questionType)\n .min(1, t(\"exerciseForm.invulQuestionTypeError\"))\n .required(t(\"exerciseForm.invulQuestionTypeError\"));\n newValidation.mediaComplete = Yup.object().shape(mediaValidationShape);\n newValidation.audioComplete = Yup.object().shape(mediaValidationShape);\n newValidation.videoComplete = Yup.object().shape(mediaValidationShape);\n newValidation.goal = Yup.object().shape({\n media: Yup.object().shape(mediaValidationShape),\n video: Yup.object().shape(mediaValidationShape),\n });\n newValidation.preparation = Yup.object().shape({\n media: Yup.object().shape(mediaValidationShape),\n video: Yup.object().shape(mediaValidationShape),\n });\n newValidation.options = Yup.object().shape({\n rewardSystem: Yup.string().required(t(\"exerciseForm.rewardSystemReqError\")),\n });\n break;\n default:\n break;\n }\n setFormShema(Yup.object().shape(newValidation));\n };\n\n const handleShowOverlay = (values, id = null) => {\n var newTypeId = id != null ? id : values.questionTypes?.length ?? 0;\n var newStepId = id != null ? id : values.steps?.length ?? 0;\n setQuestionTypeId(newTypeId);\n setStepId(newStepId);\n setShowOverlay(true);\n };\n\n const handleShowSecondOverlay = (values, id = null) => {\n var newQuestionId = id != null ? id : values.questionTypes?.[questionTypeId]?.questions?.length ?? 0;\n setQuestionId(newQuestionId);\n setShowSecondOverlay(true);\n };\n\n const handleHideOverlay = () => {\n setShowOverlay(false);\n };\n\n const handleHideSecondOverlay = () => {\n setShowSecondOverlay(false);\n };\n\n const getQuestionId = () => `questionTypes[${questionTypeId}].questions[${questionId}]`;\n\n const autoFocus = (key, name) => {\n if (key === 13) {\n var len = document.getElementsByName(name).length;\n if (len > 0) {\n const element = document.getElementsByName(name)[len - 1];\n element.focus();\n }\n }\n };\n\n const showError = (touched, errors, name, wantTouched = true) => {\n if (typeof getIn(errors, name) !== \"string\") return null;\n return wantTouched\n ? getIn(touched, name) && getIn(errors, name) && {getIn(errors, name)}\n : getIn(errors, name) && {getIn(errors, name)};\n };\n\n const showMediaSelOverlay = (inputLabel) => {\n setMediaInputLabel(inputLabel);\n setShowMediaOverlay(true);\n };\n\n const SetMediaInput = (media) => {\n formikRef.current.setFieldValue(mediaInputLabel, media.id);\n formikRef.current.setFieldValue(mediaInputLabel + \"Label\", `${media.id} - ${media.title}`);\n };\n\n const MediaSwitch = (fProps, switchLabel, valuePath) => {\n const switchName = valuePath + \".enabled\";\n const assetName = valuePath + \".asset\";\n return (\n <>\n \n

\n showMediaSelOverlay(assetName)}>\n {\" \"}\n {t(\"exerciseForm.selectMedia\")}{\" \"}\n \n \n
\n {showError(fProps.touched, fProps.errors, assetName, false)}\n {getIn(fProps.values, assetName) && {getIn(fProps.values, assetName + \"Label\")}}\n\n \n );\n };\n\n if (![\"stappenplan\", \"stappenplanValidatie\", \"dagboek\"].includes(props.exerciseType)) {\n return null;\n }\n\n const formLayout = ({ ...fProps }) => {\n return (\n \n {/*GENERAL HEADER FORM SECTION*/}\n \n \n autoFocus(e.keyCode, \"discipline\")}\n type=\"text\"\n id=\"title\"\n name=\"title\"\n placeholder={t(\"exerciseForm.titleInstructions\")}\n />\n {showError(fProps.touched, fProps.errors, \"title\")}\n \n \n \n autoFocus(e.keyCode, \"subdiscipline\")}\n >\n \n \n \n {showError(fProps.touched, fProps.errors, \"discipline\")}\n \n \n \n
\n autoFocus(e.keyCode, \"language\")}\n >\n \n \n \n
\n \n \n autoFocus(e.keyCode, props.exerciseType === \"dagboek\" ? \"description\" : \"goal.text\")}\n >\n \n \n {showError(fProps.touched, fProps.errors, \"language\")}\n \n\n {/* VRAGENLIJST UNIQUE HEADER FORM SECTION */}\n {props.exerciseType === \"dagboek\" && (\n <>\n \n \n {\n fProps.values.description = editor.getData();\n }}\n placeholder={t(\"exerciseForm.descriptionInstructions\")}\n config={{\n placeholder: t('fileForm.inputDescription'),\n toolbar: ['heading', '|', 'bold', 'italic', 'blockQuote', '|', 'numberedList', 'bulletedList', 'insertTable', 'tableColumn', 'tableRow', 'mergeTableCells', '|', 'undo', 'redo'],\n cloudServices: {tokenUrl : process.env.REACT_APP_COBRAND_API + \"/editor_token/\" + user.public_id, uploadUrl : \"https://55482.cke-cs.com/easyimage/upload/\"}\n }}\n onError={ ( { willEditorRestart } ) => {\n // If the editor is restarted, the toolbar element will be created once again.\n // The `onReady` callback will be called again and the new toolbar will be added.\n // This is why you need to remove the older toolbar.\n if ( willEditorRestart ) {\n this.editor.ui.view.toolbar.element.remove();\n }\n } }\n />\n {showError(fProps.touched, fProps.errors, \"description\")}\n \n \n )}\n\n {/* INVUL + UITVOER CROSSOVER HEADER FORM SECTION */}\n {(props.exerciseType === \"stappenplan\" || props.exerciseType === \"stappenplanValidatie\") && (\n <>\n \n \n
\n \n {\n if (! fProps.values.goal) {\n fProps.values.goal = {}\n }\n fProps.values.goal.text = editor.getData();\n }}\n config={{\n placeholder: t(\"exerciseForm.goalInstructions\"),\n toolbar: ['heading', '|', 'bold', 'italic', 'blockQuote', '|', 'numberedList', 'bulletedList', 'insertTable', 'tableColumn', 'tableRow', 'mergeTableCells', '|', 'undo', 'redo'],\n cloudServices: {tokenUrl : process.env.REACT_APP_COBRAND_API + \"/editor_token/\" + user.public_id, uploadUrl : \"https://55482.cke-cs.com/easyimage/upload/\"}\n }}\n onError={ ( { willEditorRestart } ) => {\n // If the editor is restarted, the toolbar element will be created once again.\n // The `onReady` callback will be called again and the new toolbar will be added.\n // This is why you need to remove the older toolbar.\n if ( willEditorRestart ) {\n this.editor.ui.view.toolbar.element.remove();\n }\n } }\n />\n {MediaSwitch(fProps, \"exerciseForm.mediaCheck\", \"goal.media\")}\n {MediaSwitch(fProps, \"exerciseForm.videoCheck\", \"goal.video\")}\n \n
\n \n \n
\n \n {\n if (! fProps.values.preparation) {\n fProps.values.preparation = {}\n }\n fProps.values.preparation.text = editor.getData();\n }}\n config={{\n placeholder: t(\"exerciseForm.preparationInstructions\"),\n toolbar: ['heading', '|', 'bold', 'italic', 'blockQuote', '|', 'numberedList', 'bulletedList', 'insertTable', 'tableColumn', 'tableRow', 'mergeTableCells', '|', 'undo', 'redo'],\n cloudServices: {tokenUrl : process.env.REACT_APP_COBRAND_API + \"/editor_token/\" + user.public_id, uploadUrl : \"https://55482.cke-cs.com/easyimage/upload/\"}\n }}\n onError={ ( { willEditorRestart } ) => {\n // If the editor is restarted, the toolbar element will be created once again.\n // The `onReady` callback will be called again and the new toolbar will be added.\n // This is why you need to remove the older toolbar.\n if ( willEditorRestart ) {\n this.editor.ui.view.toolbar.element.remove();\n }\n } }\n />\n {MediaSwitch(fProps, \"exerciseForm.mediaCheck\", \"preparation.media\")}\n {MediaSwitch(fProps, \"exerciseForm.videoCheck\", \"preparation.video\")}\n \n
\n \n \n
\n \n \n \n {MediaSwitch(fProps, \"exerciseForm.mediaCompleteCheck\", \"mediaComplete\")}\n \n \n \n {MediaSwitch(fProps, \"exerciseForm.audioCompleteCheck\", \"audioComplete\")}\n \n \n \n {MediaSwitch(fProps, \"exerciseForm.videoCompleteCheck\", \"videoComplete\")}\n \n \n
\n \n )}\n\n {/* UITVOER UNIQUE MIDDLE FORM SECTION */}\n {props.exerciseType === \"stappenplan\" && (\n \n \n
\n \n (\n
\n {fProps.values.steps?.map((step, index) => (\n \n \n
\n handleShowOverlay(fProps.values, index)} />\n arrayHelpers.remove(index)} />\n
\n
\n ))}\n handleShowOverlay(fProps.values)} type=\"button\">\n {t(\"exerciseForm.addNewStep\")}\n \n {showError(fProps.touched, fProps.errors, \"steps\", false)}\n
\n )}\n />\n
\n
\n )}\n\n {/* INVUL + VRAGENLIJST CROSSOVER MIDDLE FORM SECTION */}\n {(props.exerciseType === \"stappenplanValidatie\" || props.exerciseType === \"dagboek\") && (\n \n \n
\n \n (\n
\n {fProps.values.questionTypes?.map((questionType, index) => (\n \n

{questionType.name}

\n
\n handleShowOverlay(fProps.values, index)} />\n arrayHelpers.remove(index)} />\n
\n
\n ))}\n {showError(fProps.touched, fProps.errors, \"questionTypes\", false)}\n handleShowOverlay(fProps.values)} type=\"button\">\n {t(props.exerciseType === \"stappenplanValidatie\" ? \"exerciseForm.addNewStep\" : \"exerciseForm.addNewExerciseType\")}\n \n
\n )}\n />\n
\n
\n )}\n\n {/* GENERAL MIDDLE FORM SECTION */}\n {showOverlay && (\n \n \n \n \n {props.exerciseType === \"dagboek\" ? t(\"exerciseForm.editExerciseType\") : t(\"exerciseForm.editStep\")}\n \n {props.exerciseType === \"stappenplan\" ? (\n <>\n \n \n \n {showError(fProps.touched, fProps.errors, `steps[${stepId}].text`, false)}\n \n {MediaSwitch(fProps, \"exerciseForm.mediaCheck\", `steps[${stepId}].media`)}\n {MediaSwitch(fProps, \"exerciseForm.audioCheck\", `steps[${stepId}].audio`)}\n {MediaSwitch(fProps, \"exerciseForm.videoCheck\", `steps[${stepId}].video`)}\n \n {t(\"exerciseForm.addStep\")}\n \n \n ) : (\n <>\n \n \n \n {showError(fProps.touched, fProps.errors, `questionTypes[${questionTypeId}].name`, false)}\n \n \n (\n
\n {fProps.values.questionTypes?.[questionTypeId]?.questions?.map((question, index) => (\n \n

{question.question}

\n
\n handleShowSecondOverlay(fProps.values, index)} />\n arrayHelpers.remove(index)} />\n
\n
\n ))}\n {showError(fProps.touched, fProps.errors, `questionTypes[${questionTypeId}].questions`, false)}\n handleShowSecondOverlay(fProps.values)}>\n {t(\"exerciseForm.addExercise.\" + props.exerciseType)}\n \n
\n )}\n />\n \n {t(\n props.exerciseType === \"stappenplanValidatie\" ? \"exerciseForm.addStep\" : \"exerciseForm.addExerciseType\"\n )}\n \n \n )}\n
\n
\n )}\n\n {/*QUESTION CREATION OVERLAY SUBFORM SECTION*/}\n {showSecondOverlay && (\n \n \n \n {props.exerciseType === \"stappenplanValidatie\" ? (\n \n \n
\n \n autoFocus(e.keyCode, `${getQuestionId()}.cue.text`)}\n />\n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.question`, false)}\n {MediaSwitch(fProps, \"exerciseForm.mediaCheck\", `${getQuestionId()}.media`)}\n {MediaSwitch(fProps, \"exerciseForm.audioCheck\", `${getQuestionId()}.audio`)}\n {MediaSwitch(fProps, \"exerciseForm.videoCheck\", `${getQuestionId()}.video`)}\n \n \n autoFocus(e.keyCode, `${getQuestionId()}.typeOfAnswer`)}\n />\n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.cue.text`)}\n {MediaSwitch(fProps, \"exerciseForm.mediaCheck\", `${getQuestionId()}.cue.media`)}\n {MediaSwitch(fProps, \"exerciseForm.audioCheck\", `${getQuestionId()}.cue.audio`)}\n {MediaSwitch(fProps, \"exerciseForm.videoCheck\", `${getQuestionId()}.cue.video`)}\n \n
\n \n
\n \n autoFocus(e.keyCode, `${getQuestionId()}.correctAnswer`)}\n >\n {answerTypes.map((answerType) => {\n return answerType;\n })}\n \n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.typeOfAnswer`, false)}\n\n {getIn(fProps.values, `${getQuestionId()}.typeOfAnswer`) !== \"Textbox\" && (\n <>\n \n (\n
\n {getIn(fProps.values, `${getQuestionId()}.answerPossibilities`)?.map((answP, index) => (\n \n \n \n
\n arrayHelpers.remove(index)} />\n
\n
\n )\n )}\n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.answerPossibilities`, false)}\n arrayHelpers.push(\"\")}>\n {t(\"exerciseForm.addPossibleAnswer\")}\n \n
\n )}\n />\n \n )}\n
\n
\n \n
\n \n \n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.correctAnswer`, false)}\n\n \n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.isCapitalSensitive`)}\n\n \n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.isPunctuationSensitive`)}\n \n
\n ) : (\n <>\n \n \n \n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.question`, false)}\n \n \n \n \n {qaTypes.map((qaType) => {\n return qaType;\n })}\n \n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.answerPossibility`, false)}\n \n {getIn(fProps.values, `${getQuestionId()}.answerpossibility`) !== \"open antwoord\" && (\n <>\n \n (\n
\n {getIn(fProps.values, `${getQuestionId()}.fieldnames`)?.map((fieldname, index) => (\n \n \n \n
\n arrayHelpers.remove(index)} />\n
\n
\n ))}\n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.fieldnames`, false)}\n arrayHelpers.push(\"\")}>\n {t(\"exerciseForm.addFieldName\")}\n \n
\n )}\n />\n
\n \n \n (\n
\n {getIn(fProps.values, `${getQuestionId()}.fieldvalues`)?.map((fieldvalue, index) => (\n \n \n \n
\n arrayHelpers.remove(index)} />\n
\n
\n ))}\n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.fieldvalues`, false)}\n arrayHelpers.push(\"\")}>\n {t(\"exerciseForm.addFieldValue\")}\n \n
\n )}\n />\n
\n \n )}\n \n )}\n {t(\"exerciseForm.addQuestion.\" + props.exerciseType)}\n
\n
\n )}\n\n {/* GENERAL FOOTER FORM SECTION */}\n \n \n
\n \n {(props.exerciseType === \"dagboek\" || props.exerciseType === \"stappenplanValidatie\") && (\n <>\n {props.exerciseType === \"stappenplanValidatie\" && (\n <>\n \n \n {rewardSystems.map((rewardSystem) => {\n return rewardSystem;\n })}\n \n {showError(fProps.touched, fProps.errors, `options.rewardSystem`)}\n \n )}\n \n \n \n )}\n \n \n \n \n \n
\n \n \n
\n \n \n \n
\n\n {showMediaOverlay &&\n setShowMediaOverlay(!showMediaOverlay)} />\n }\n\n \n\n {/* To quickly debug the form uncomment the line underneath */}\n {/* */}\n
\n );\n };\n\n return (\n \n );\n});\n\nexport default ExerciseForm;\n","import React, { useContext, useState, useEffect } from \"react\";\nimport { Redirect } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport Flash from \"../../components/styled/flashMessage\";\nimport Global from \"../../components/styled/global\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport { PageTitle, SmallTitle, P } from \"../../components/styled/typography\";\nimport Card from \"../../components/styled/card\";\nimport Button from \"../../components/styled/button\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport { observer } from \"mobx-react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link } from \"react-router-dom\";\nimport { api } from \"../../api\";\nimport ExerciseIcon from \"../../assets/images/exercise-icon.png\";\nimport { FaCloudUploadAlt } from \"react-icons/fa\";\nimport fileUploadStore from \"../../components/fileUploadStore\";\nimport ExerciseForm from \"../../components/exerciseForm/exerciseForm\";\n\nconst FormGroup = styled.div`\n display: flex;\n flex-direction: column;\n margin-bottom: 20px;\n`;\nconst Error = styled.p`\n font-size: 16px;\n color: #fff;\n font-style: italic;\n background-color: #dc393d;\n border: 1px solid #dc393d;\n border-radius: 10px;\n padding: 10px 15px;\n`;\n\nconst FlexAround = styled.div`\n display: flex;\n flex-direction: column;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-around;\n align-items: stretch;\n margin: 50px 0px;\n }\n`;\n\nconst FlexBetween = styled.div`\n @media (min-width: 980px) {\n display: flex;\n justify-content: space-between;\n }\n`;\n\nconst Flex = styled.div`\n @media (min-width: 980px) {\n display: flex;\n flex-wrap: wrap;\n }\n`;\n\nconst Half = styled.div`\n width: 49%;\n`;\n\nconst Center = styled.div`\n text-align: center;\n`;\n\nconst Input = styled.input`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n outline: none;\n font-size: 16px;\n margin: 10px 0px;\n width: 100%;\n`;\n\nconst ChoseFile = styled(Input)`\n display: none;\n`;\n\nconst SubText = styled(P)`\n margin-top: 7px;\n font-weight: ${(props) => (props.bold ? \"bold\" : \"normal\")};\n`;\n\nconst ExerciseCard = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n max-width: 300px;\n border: 1px solid lightgrey;\n border-radius: 5px;\n padding: 25px 20px;\n cursor: pointer;\n margin-bottom: 18px;\n\n &.clicked {\n border: 1px solid #51c0cf;\n }\n\n @media (min-width: 980px) {\n margin-bottom: 0px;\n }\n`;\n\nconst ExerciseExpl = styled(P)`\n margin-top: 5px;\n margin-bottom: 15px;\n text-align: center;\n`;\n\nconst ExIcon = styled.img`\n width: 75px;\n`;\n\nconst Iframe = styled.iframe`\n width: 100%;\n border: none;\n border-shadow: none;\n height: 750px;\n`;\n\nconst IframeCard = styled(Card)`\n width: 100%;\n padding: 0px;\n margin: 0px;\n`;\n\nconst FileCard = styled(Card)`\n width: 33%;\n margin-right: 0.33%;\n margin-bottom: 10px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n\nconst Label = styled.label`\n border: 1px solid #ccc;\n display: inline-block;\n padding: 6px 12px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 25px;\n`;\n\nconst UploadButton = styled(Label)`\n justify-content: flex-start;\n width: auto;\n`;\n\nconst FlexColumn = styled.div`\n @media (min-width: 980px) {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n }\n`;\n\nconst UploadIcon = styled(FaCloudUploadAlt)`\n margin-right: 7px;\n`;\n\nconst DeleteButton = styled(Button)`\n background-color: #dc393d;\n border-color: #dc393d;\n\n &:hover {\n background-color: #dc393d;\n border-color: #dc393d;\n }\n\n &:clicked {\n background-color: #dc393d;\n border-color: #dc393d;\n }\n`;\n\nconst ButtonGroup = styled.div`\n display: flex;\n flex-direction: column;\n margin: 5px;\n`\n\nconst VerticalSpace = styled.div`\n padding: 2px\n`\n\nconst oefeningAanvragen = observer(() => {\n const { t, i18n } = useTranslation();\n const [redirect, setRedirect] = useState(false);\n const [kindOfExercise, setKindOfExercise] = useState(\"\");\n const [isAllreadyUploadingError, setIsAllreadyUploadingError] = useState(false);\n const [filesAsDataTransfer, setFilesAsDataTransfer] = useState([]);\n const [filesAsArray, setFilesAsArray] = useState([]);\n const fileStore = useContext(fileUploadStore);\n\n const autoScrollToForm = async (exercise) => {\n if (document.getElementById(\"form\")) {\n const element = document.getElementById(\"form\");\n element.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n }\n };\n\n const setSelectedForm = (exercise, e) => {\n autoScrollToForm(exercise);\n setKindOfExercise(exercise);\n\n if (e.target.tagName == \"DIV\") {\n const siblings = e.target.parentNode.childNodes;\n for (let i = 0; i < siblings.length; i++) {\n siblings[i].classList.remove(\"clicked\");\n }\n e.target.classList.add(\"clicked\");\n } else {\n const siblings = e.target.parentNode.parentNode.childNodes;\n for (let i = 0; i < siblings.length; i++) {\n siblings[i].classList.remove(\"clicked\");\n }\n e.target.parentNode.classList.add(\"clicked\");\n }\n };\n\n const submitRequestExercise = (values) => {\n if (fileStore.isUploading) {\n setIsAllreadyUploadingError(true);\n } else {\n api.post(\"/exercise_request\", values).then((res) => {\n if (filesAsDataTransfer.length > 0) {\n var requestId = res.data.message.match(/request (.*) created/);\n fileStore.setId(requestId[1]);\n fileStore.setFiles(filesAsDataTransfer);\n fileStore.setIsUploading(false);\n // Post request to database\n api.post(\"/exercise_request\", { id: fileStore.id, files: filesAsArray.map(x => x.name) });\n }\n setRedirect(true);\n });\n }\n };\n\n const changeSelectedFiles = (newFiles) => {\n //const newFiles = e.target.files;\n const allFiles = new DataTransfer();\n\n // Populate allFiles with exisiting and new files\n for (var i = 0; i < filesAsDataTransfer.length; ++i) {\n const thisItem = filesAsDataTransfer.item(i);\n allFiles.items.add(thisItem);\n }\n\n for (let i = 0; i < newFiles.length; i++) {\n const thisItem = newFiles[i];\n allFiles.items.add(thisItem);\n }\n\n // Set initial upload progress to 0\n let progressObject = {};\n for (let i = 0; i < allFiles.length; i++) {\n progressObject[allFiles[i].name] = 0;\n }\n\n setFilesAsDataTransfer(allFiles.files);\n };\n\n const handleDeleteFile = (e) => {\n const fileName = e.target.value;\n let newFiles = new DataTransfer();\n for (let i = 0; i < filesAsDataTransfer.length; ++i) {\n const thisItem = filesAsDataTransfer.item(i);\n if (thisItem.name !== fileName) {\n newFiles.items.add(thisItem);\n }\n }\n\n let progressObject = {};\n for (let i = 0; i < filesAsDataTransfer.length; i++) {\n progressObject[filesAsDataTransfer[i].name] = 0;\n }\n\n setFilesAsDataTransfer(newFiles.files);\n };\n\n const dataTransferToArrayConverter = (dataTransfer) => {\n let filesArray = [];\n for (let i = 0; i < dataTransfer.length; i++) {\n const file = dataTransfer.item(i);\n filesArray.push(file);\n }\n return filesArray;\n };\n \n useEffect(() => {\n // Make sure all selected files are visible\n const filesArray = dataTransferToArrayConverter(filesAsDataTransfer);\n setFilesAsArray(filesArray);\n }, [filesAsDataTransfer]);\n\n return (\n \n \n \n \n {t(\"OefeningAanvragen.titel\")}\n\n {/* SELECT KIND OF EXERCISE */}\n {t(\"OefeningAanvragen.stap1\")}\n \n {t(\"OefeningAanvragen.stap1Subtekst\")}\n {t(\"OefeningAanvragen.messageOnlyEnglish\")}\n \n \n setSelectedForm(\"dagboek\", e)}>\n \n

{t(\"OefeningAanvragen.dagboek\")}

\n {t(\"OefeningAanvragen.dagboekUitleg\")}\n \n \n \n \n \n \n \n \n
\n setSelectedForm(\"stappenplan\", e)}>\n \n

{t(\"OefeningAanvragen.stappenplan\")}

\n {t(\"OefeningAanvragen.stappenplanUitleg\")}\n \n \n \n \n \n \n \n
\n setSelectedForm(\"stappenplanValidatie\", e)}>\n \n

{t(\"OefeningAanvragen.stappenplanMetValidatie\")}

\n {t(\"OefeningAanvragen.stappenplanMetValidatieUitleg\")}\n \n \n \n \n \n \n \n
\n
\n\n {/* EXERCISE FORM SECTION */}\n \n {t(\"OefeningAanvragen.stap2\")}\n \n {t(\"OefeningAanvragen.stap2Subtekst\")}\n \n\n {/* CLARIFICATION SECTION */}\n {t(\"OefeningAanvragen.stap5\")}\n {t(\"OefeningAanvragen.stap5Subtekst\")}\n\n {redirect && (\n \n )}\n
\n
\n
\n );\n});\n\nexport default oefeningAanvragen;\n","import React, { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { api } from \"../../../api\";\nimport { FaTimes } from \"react-icons/fa\";\n\nimport LoadSpinner from \"../../../components/loadspinner\";\nimport Button from \"../../../components/styled/button\";\nimport Card from \"../../../components/styled/card\";\nimport { SmallTitle, P } from \"../../../components/styled/typography\";\n\nconst DiscountCard = styled(Card)`\n display: flex;\n flex-direction: column;\n align-items: space-between;\n margin: 10px 0px;\n padding-top: 10px;\n padding-bottom: 10px;\n\n @media (min-width: 768px) {\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n }\n`;\n\nconst Flex = styled.div`\n display: flex;\n align-items: center;\n margin: 5px 0px;\n`;\n\nconst CodeTag = styled.h2`\n margin: 0px;\n padding: 0px;\n color: #51c0cf;\n font-weight: 600;\n font-size: 20px;\n`;\n\nconst NormalButton = styled(Button)`\n font-size: 16px;\n`;\n\nconst Code = styled.div`\n display: flex;\n flex-direction: column;\n\n @media (min-width: 768px) {\n flex-direction: row;\n align-items: center;\n justify-content: flex-start;\n }\n`;\n\nconst CodeInfo = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst DiscountText = styled(P)`\n margin: 0px;\n margin-left: 5px;\n`;\n\nconst PercentageText = styled(P)`\n margin: 0px;\n font-size: 20px;\n border: 1px solid #51c0cf;\n border-radius: 5px;\n padding: 5px 15px;\n`;\n\nconst SmallText = styled(P)`\n font-size: 15px;\n margin: 0px;\n text-transform: italic;\n`;\n\nconst RedButton = styled(NormalButton)`\n background-color: #dc393d;\n border-color: #dc393d;\n margin-left: 10px;\n\n &:hover {\n background-color: #dc393d;\n border-color: #dc393d;\n }\n\n @media (min-width: 768px) {\n margin-left: 20px;\n }\n`;\n\nconst CreateButton = styled(Button)`\n margin-top: 20px;\n`;\n\nconst Title = styled(SmallTitle)`\n margin-top: 10px;\n margin-right: 40px;\n`;\n\nconst Label = styled.label`\n margin-top: 10px;\n`;\n\nconst Input = styled.input`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n outline: none;\n font-size: 16px;\n margin: 10px 0px;\n width: 100%;\n`;\n\nconst Select = styled.select`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n outline: none;\n font-size: 16px;\n margin: 10px 0px;\n width: 100%;\n`;\n\nconst Overlay = styled.div`\n background-color: rgba(60, 60, 60, 0.7);\n position: fixed;\n top: 0px;\n left: 0;\n width: 100vw;\n height: 100%;\n z-index: 999;\n display: flex;\n justify-content: center;\n align-items: center;\n\n @media (min-width: 980px) {\n top: 0;\n height: 100vh;\n width: 100vw;\n }\n`;\n\nconst CreateDiscountOverlay = styled(Card)`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n box-sizing: border-box;\n padding: 30px;\n position: absolute;\n z-index: 999999;\n\n @media (min-width: 980px) {\n position: relative;\n top: 0;\n z-index: 9;\n }\n`;\n\nconst Times = styled(FaTimes)`\n color: #545454;\n position: absolute;\n right: 20px;\n top: 20px;\n cursor: pointer;\n`;\n\nconst FlexButtons = styled.div`\n display: flex;\n`;\n\nconst FlexColumn = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-around;\n`;\n\nconst Active = styled.div`\n margin: 10px 0px;\n`;\n\nconst Discounts = () => {\n const [discounts, setDiscounts] = useState();\n const [allPlans, setAllPlans] = useState();\n const [loadingDiscounts, SetLoadingDiscounts] = useState(true);\n const [showOverlay, setShowOverlay] = useState(false);\n const [discount, setDiscount] = useState();\n const [code, setCode] = useState();\n const [plan, setPlan] = useState();\n const [MonthsReduction, setMonthsReduction] = useState();\n\n useEffect(() => {\n api.get(\"/discounts\").then((res) => {\n setDiscounts(res.data.output);\n SetLoadingDiscounts(false);\n });\n api.get(\"/plans\", { params: { onlyPublic: true } }).then((res) => {\n setAllPlans(res.data.plans);\n });\n }, []);\n\n const refresh = () => {\n SetLoadingDiscounts(true);\n api.get(\"/discounts\").then((res) => {\n setDiscounts(res.data.output);\n SetLoadingDiscounts(false);\n });\n };\n\n const HandleDisable = (id, status) => {\n api.patch(\"/discount/\" + id, { active: status ? false : true }).then((res) => {\n refresh();\n });\n };\n\n const HandleDelete = (id) => {\n api.delete(\"/discount/\" + id).then((res) => {\n refresh();\n });\n };\n\n const CreateDiscount = () => {\n api.post(\"/discount\", {\n code: code,\n discount: discount / 100,\n plan_id: plan,\n active: true,\n month_reduction: MonthsReduction,\n }).then((res) => {\n refresh();\n });\n setShowOverlay(false);\n };\n\n const ConvertDateFormat = (date) => {\n const convertedDate = new Date(date);\n return convertedDate.toLocaleDateString();\n };\n\n return (\n
\n {loadingDiscounts ? (\n \n ) : (\n discounts.map((discount) => {\n return (\n \n \n \n \n Code: \n {discount.code}\n \n \n {discount.plan && (\n \n Plan:\n \n {discount.plan.naam} ({discount.plan.period} maanden)\n \n \n )}\n {discount.plan && (\n \n Werkelijke duur:\n \n {discount.plan.period - discount.month_reduction} maanden\n \n \n )}\n {discount.date && (\n \n Aangemaakt op:\n {ConvertDateFormat(discount.date)}\n \n )}\n \n \n {discount.discount * 100}%\n {discount.active ? \"Actief\" : \"Inactief\"}\n \n {discount.amount_used && \"Aantal keer gebruikt: \" + discount.amount_used}\n \n \n \n HandleDisable(discount.id, discount.active)}>\n {discount.active ? \"Deactiveer\" : \"Activeer\"}\n \n HandleDelete(discount.id)}>Verwijder\n \n \n );\n })\n )}\n {showOverlay && (\n \n \n setShowOverlay(false)} />\n Kortingscode aanmaken\n\n \n setCode(e.target.value)} />\n\n \n setDiscount(e.target.value)} />\n\n \n \n\n \n Termijn plan - aftrek plan = aantal maanden dat plan actief is\n setMonthsReduction(e.target.value)} />\n\n \n \n \n )}\n\n setShowOverlay(true)}>Maak kortingscode aan\n
\n );\n};\n\nexport default Discounts;\n","import React, { useEffect, useState, useContext } from \"react\";\nimport styled from \"styled-components\";\nimport { api } from \"../../../api\";\nimport LoadSpinner from \"../../../components/loadspinner\";\nimport { useTranslation } from \"react-i18next\";\nimport registrationStore from \"../../../components/registrationStore\";\nimport FileSaver from \"file-saver\";\nimport Card from \"../../../components/styled/card\";\nimport Button from \"../../../components/styled/button\";\nimport TherapistIcon from \"../../../assets/images/therapist-icon-man.png\";\nimport { Redirect } from \"react-router-dom\";\nimport {Field} from 'formik';\n\nconst ExCard = styled(Card)`\n padding-top: 15px;\n padding-bottom: 15px;\n margin-bottom: 10px;\n`;\n\nconst FlexCard = styled.div`\n display: flex;\n flex-direction: column;\n\n @media (min-width: 768px) {\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n }\n`;\n\nconst Flex = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst FlexColumn = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n`;\n\nconst Bold = styled.p`\n margin: 0px;\n font-weight: bold;\n`;\n\nconst Text = styled.p`\n margin: 0px;\n margin-bottom: 5px;\n margin-top: 5px;\n`;\n\nconst UserIcon = styled.img`\n width: 25px;\n height: 25px;\n margin-right: 5px;\n\n @media (min-width: 980px) {\n width: 40px;\n height: 40px;\n margin-right: 15px;\n }\n`;\n\nconst FlexButtons = styled.div`\n display: flex;\n margin-top: 15px;\n\n @media (min-width: 768px) {\n margin-top: 0px;\n }\n`;\n\nconst RedButton = styled(Button)`\n background-color: #dc393d;\n border-color: #dc393d;\n margin-left: 10px;\n\n &:hover {\n background-color: #dc393d;\n border-color: #dc393d;\n }\n\n @media (min-width: 768px) {\n margin-left: 20px;\n }\n`;\n\nconst Input = styled(Field)`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n max-height: 100%;\n margin-right: 20px;\n\n &:focus {\n resize: both;\n }\n`;\n\nconst FormGroup = styled.div`\n display: flex;\n flex-direction: column;\n margin-bottom: 20px;\n`;\n\nconst ExerciseRequests = () => {\n const { t, i18n } = useTranslation();\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [requests, setRequests] = useState();\n const [loading, setLoading] = useState(true);\n const [redirect, setRedirect] = useState(false);\n const [redirectToId, setRedirectToId] = useState(\"\");\n const [users, setUsers] = useState()\n const [mapping, setMapping] = useState([])\n\n useEffect(() => {\n let users = api.get(\"/users?therapist=true\");\n let requests = api.get(\"/exercise_requests\");\n Promise.all([users, requests]).then(res => {\n setUsers(res[0].data.users)\n setRequests(res[1].data.output);\n setLoading(false);\n });\n }, []);\n\n const SendStatusEmailToTherapist = (status = \"accepted\", user_id, title) => {\n api.get(\"/user/\" + user_id).then((res) => {\n const therapistEmail = res.data.user.email;\n\n api.post(\"/mail\", {\n body: \"request\",\n sender: \"info@telephon.digital\",\n to: therapistEmail,\n subject: `Requested exercise ${status}`,\n message: `Dear TelePHON.digital Community Member,\n\nYou are receiving this message because your requested exercise (${title}) got ${status}.\nGo to telephon.digital to assign your new exercise to a client.\n\nWith warm regards,\nThe TelePHON.digital team`,\n }).then(() => {\n console.log(`mail succesfully send to ${therapistEmail}`);\n });\n });\n };\n\n const acceptRequest = (request) => {\n\n let user_id = request.user_id;\n let title = request.exercises[0].title;\n const id = request.id;\n\n // const mappedExercise = mapping.find(mapper => mapper.request.id == request.id)\n\n // if (mappedExercise && mappedExercise.user) {\n // user_id = mappedExercise.user.public_id\n // api.put(\"/exercise_request/\" + id, { status: \"Accepted\", email: mappedExercise.user.email}).then((res) => {\n // update();\n // });\n // } else {\n api.put(\"/exercise_request/\" + id, { status: \"Accepted\" }).then((res) => {\n update();\n });\n // }\n\n api.post(\"/send_message\", {\n user_id: user_id,\n body: t(\"AdminOefeningAanvragen.accepteerBericht\") + \" \" + title,\n sender_id: user.public_id,\n sender_name: \"Telephon admin\",\n type: \"regular\",\n });\n \n SendStatusEmailToTherapist(\"accepted\", user_id, title);\n };\n const rejectRequest = (user_id, title, id) => {\n api.post(\"/send_message\", {\n user_id: user_id,\n body: t(\"AdminOefeningAanvragen.weigerBericht\") + \" \" + title,\n sender_id: user.public_id,\n sender_name: \"Telephon admin\",\n type: \"regular\",\n });\n api.put(\"/exercise_request/\" + id, { status: \"Rejected\" }).then((res) => {\n update();\n });\n SendStatusEmailToTherapist(\"declined\", user_id, title);\n };\n const update = () => {\n api.get(\"/exercise_requests\").then((res) => {\n setRequests(res.data.output);\n });\n };\n\n async function showMaterial(id) {\n // requests.map(r => { console.log(r); console.log(r._type)});\n // for (let file of files) {\n // await downloadOneFile(file);\n // }\n setRedirectToId(id);\n setRedirect(true);\n\n }\n\n const handleTherapistChange = (email, request) => {\n // let user = users.find(user => user.email === email);\n // let filteredMapping = mapping.filter(mapper => mapper.request.id != request.id)\n // setMapping([...filteredMapping, {user, request}])\n }\n\n return (\n
\n {loading ? (\n \n ) : (\n <>\n {requests.map((request) => {\n if (! request.exercises) {\n return (<>);\n }\n return (\n \n \n \n \n
\n {t(\"AdminOefeningAanvragen.aangevraagddoor\")}\n {request.therapist_name}\n
\n
\n {/* \n {t(\"admin.isprivate\")}:{request.exercises[0].is_private.toString()}\n \n */}\n \n {request.exercises[0].title}\n \n \n \n acceptRequest(request)}\n >\n {t(\"AdminOefeningAanvragen.accepteer\")}\n \n rejectRequest(request.user_id, request.exercises[0].title, request.id)}\n >\n {t(\"AdminOefeningAanvragen.weiger\")}\n \n \n
\n
\n );\n })}\n {redirect && (\n \n )}\n \n )}\n
\n );\n};\n\nexport default ExerciseRequests;\n","import React, {useContext} from \"react\"\nimport {api} from \"../../../api\"\nimport { saveAs } from 'file-saver';\n\nconst UsersDownload = () => {\n\n const getExcelSheet = () => {\n api.get('/users/info', {responseType: 'blob'}).then(res => {\n saveAs(res.data, 'marketing_info_users.xlsx')\n })\n }\n return (\n
\n \n
\n )\n}\n\nexport default UsersDownload","import React, {useContext} from \"react\"\nimport Discounts from \"./modules/discounts\"\nimport styled from 'styled-components'\nimport SidebarTherapist from '../../components/sidebarTherapist'\nimport AccountMenu from '../../components/accountMenu/accountMenu'\nimport Global from \"../../components/styled/global\"\nimport { PageTitle } from '../../components/styled/typography'\nimport { PageAnimation } from '../../components/styled/animation'\nimport { SmallTitle } from '../../components/styled/typography'\nimport registrationStore from \"../../components/registrationStore\"\nimport PageWrapper from '../../components/styled/pageWrapper'\nimport ExerciseRequests from './modules/exerciseRequests'\nimport MarketingDownload from \"./modules/marketing-download\"\n\nconst Title = styled(SmallTitle)`\n margin-top: 20px;\n margin-bottom: 10px;\n margin-right: 40px;\n`\n\n\nconst Admin = () => {\n const store = useContext(registrationStore)\n const user = JSON.parse(store.user)\n return (\n \n \n \n \n \n Admin\n Kortingscodes\n \n Aangevraagde oefeningen\n \n Download users\n \n \n \n \n )\n}\n\nexport default Admin","import i18n from \"i18next\";\nimport Backend from \"i18next-xhr-backend\";\nimport { initReactI18next } from \"react-i18next\";\n\ni18n.use(Backend)\n .use(initReactI18next)\n .init({\n lng: window.localStorage.getItem(\"language\") || \"nl\",\n backend: {\n /* translation file path */\n loadPath: \"/assets/i18n/{{ns}}/{{lng}}.json\",\n },\n fallbackLng: \"en\",\n debug: false,\n /* can have multiple namespace, in case you want to divide a huge translation into smaller pieces and load them on demand */\n ns: [\"translations\"],\n defaultNS: \"translations\",\n keySeparator: false,\n interpolation: {\n escapeValue: false,\n formatSeparator: \",\",\n },\n react: {\n wait: true,\n },\n });\n\nexport default i18n;\n","import React, { useContext, useState, useEffect } from \"react\";\nimport Card from \"./styled/card\";\nimport styled from \"styled-components\";\nimport { P } from \"./styled/typography\";\nimport ProgressBar from \"./progressBar\";\nimport { observer } from \"mobx-react\";\nimport fileUploadStore from \"./fileUploadStore\";\nimport Check from \"../assets/images/check.png\";\nimport { FaCloudUploadAlt } from \"react-icons/fa\";\nimport { uploadKeyframes } from \"./styled/animation\";\nimport { uploadOneFile } from \"../azure\";\n\nconst Modal = styled(Card)`\n position: fixed;\n bottom: 10px;\n right: 10px;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n padding: 20px 40px;\n min-width: 300px;\n cursor: pointer;\n max-height: 200px;\n overflow: scroll;\n\n &::-webkit-scrollbar {\n -webkit-appearance: none;\n width: 7px;\n margin-right: 3px;\n }\n\n &::-webkit-scrollbar-thumb {\n border-radius: 5px;\n background-color: rgba(0, 0, 0, 0.5);\n -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, 0.5);\n }\n`;\n\nconst MinimizedModal = styled(Card)`\n position: fixed;\n bottom: 10px;\n right: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n\n background: linear-gradient(to top, #51c0cf 50%, white 50%);\n background-size: 100% 200%;\n background-position: right top;\n margin-left: 10px;\n transition: all 2s ease;\n\n animation: ${uploadKeyframes} 1.5s linear;\n animation-iteration-count: infinite;\n`;\n\nconst FileName = styled(P)`\n color: #545454;\n font-weight: 600;\n font-size: 18px;\n margin: 0px;\n padding-top: 10px;\n`;\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`;\n\nconst CheckIcon = styled.img`\n width: 25px;\n height: 25px;\n`;\n\nconst UploadingIcon = styled(FaCloudUploadAlt)`\n width: 25px;\n height: 25px;\n`;\n\nconst BackgroundUpload = observer((props) => {\n const fileStore = useContext(fileUploadStore);\n const files = fileStore.files;\n const [fileProgress, setFileProgress] = useState({});\n const [modalIsVisible, setModalIsVisible] = useState(false);\n const [modalIsMinimized, setModalIsMinimized] = useState(false);\n\n // Alert when user tries to leave before upload is done.\n window.onbeforeunload = () => {\n if (modalIsVisible) {\n return \"Your files are not completely uploaded...\";\n }\n };\n\n // Loading effect on minimized modal\n useEffect(() => {\n if (document.getElementById(\"upload-modal\")) {\n const uploadModal = document.getElementById(\"upload-modal\");\n uploadModal.style.backgroundPosition = \"right bottom\";\n }\n });\n\n // Make sure that files are uploaded only once (prevents infinite loop)\n useEffect(() => {\n uploadFiles();\n }, [files]);\n\n // Open or close modal\n const handleOpenModal = () => {\n setModalIsVisible(!modalIsVisible);\n setModalIsMinimized(!modalIsMinimized);\n };\n\n const uploadFiles = async () => {\n if (files && !fileStore.isUploading) {\n setModalIsVisible(true);\n\n // Prevents file upload to be overwritten by other request\n fileStore.setIsUploading(true);\n\n // Upload all files\n // TODO: Make uploads concurrent\n let fileList = [];\n for (var x = 0; x < files.length; x++) {\n await uploadOneFile(files[x]).then((filename) => fileList.push(filename));\n }\n\n setModalIsVisible(false);\n setModalIsMinimized(false);\n fileStore.setIsUploading(false);\n }\n };\n\n return (\n
\n {modalIsVisible && (\n \n {Object.keys(fileProgress).map((key) => {\n return (\n \n {key}:\n {fileProgress[key] < 1 && }\n {fileProgress[key] == 1 && }\n \n );\n })}\n \n )}\n\n {modalIsMinimized && (\n \n \n \n )}\n
\n );\n});\n\nexport default BackgroundUpload;\n","import React, { useContext } from \"react\";\nimport { withRouter } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport { observer } from \"mobx-react-lite\";\nimport RegistrationStore from \"../../components/registrationStore\";\nimport { Li, Ul } from \"../../components/styled/list\";\nimport { H3, P } from \"../../components/styled/typography\";\nimport Button from \"../../components/styled/button\";\nimport PatientIcon from \"../../assets/images/patient-icon.png\";\nimport TherapistIcon from \"../../assets/images/therapist-icon.png\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`;\n\nconst PlansWrapper = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n\n @media (min-width: 980px) {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n padding: 40px 0px;\n }\n`;\n\nconst Plan = styled.div`\n border: 1px solid lightgrey;\n border-radius: 10px;\n width: 100%;\n margin-bottom: 15px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n padding: 1px;\n\n @media (min-width: 980px) {\n width: 48%;\n margin-bottom: 0px;\n }\n\n ${({ isSelected }) =>\n isSelected &&\n `\n border: 2px solid #51C0CF;\n padding: 0px;\n `}\n\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n`;\n\nconst PlanImage = styled.img`\n width: 100px;\n margin-top: 40px;\n`;\n\nconst UserType = styled(H3)`\n font-weight: 400;\n margin-top: 20px;\n margin-bottom: 0px;\n`;\n\nconst SmallListIcon = styled(Ul)`\n margin: 30px 0px 30px -30px;\n`;\n\nconst SubText = styled(P)`\n margin: 0px auto;\n margin-bottom: 20px;\n @media (min-width: 980px) {\n margin: 0px auto;\n }\n`;\n\nconst typeOfUser = observer(({ setRegisterStepIsValid }) => {\n const { t, i18n } = useTranslation();\n const registrationStore = useContext(RegistrationStore);\n\n const handeChangeUserType = (type) => {\n if (type === \"Patient\"){\n registrationStore.setIsTherapist(true);\n } else if (type === \"Therapist\"){\n registrationStore.setIsTherapist(false);\n }\n \n };\n\n setRegisterStepIsValid();\n\n return (\n \n {t(\"typeOfUser.subText\")}\n \n handeChangeUserType(\"Patient\")}\n data-testid=\"therapist-plan\"\n >\n \n {t(\"typeOfUser.Therapist\")}\n
    \n
  • {t(\"registerForm3.therapy\")}
  • \n
  • \n {t(\"registerForm3.ex\")} &
    {t(\"registerForm3.res\")}\n
  • \n
  • {t(\"registerForm3.doc\")}
  • \n
  • {t(\"registerForm3.com\")}
  • \n
\n \n handeChangeUserType(\"Therapist\")}\n data-testid=\"patient-plan\"\n >\n \n {t(\"typeOfUser.client\")}\n \n
  • {t(\"registerForm3.ex\")}
  • \n
  • {t(\"registerForm3.res\")}
  • \n
  • {t(\"registerForm3.doc\")}
  • \n
  • {t(\"registerForm3.com\")}
  • \n
    \n \n
    \n
    \n );\n});\n\nexport default typeOfUser;\n","import React, { useContext, useState, useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { observer } from \"mobx-react-lite\";\nimport styled from \"styled-components\";\nimport { H4, P } from \"../../components/styled/typography\";\nimport RegistrationStore from \"../../components/registrationStore\";\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`;\n\nconst Question = styled(H4)`\n font-weight: 500;\n margin: 0px;\n margin-bottom: 15px;\n`;\n\nconst FullName = styled.div`\n display: flex;\n flex-direction: column;\n\n @media (min-width: 768px) {\n flex-direction: row;\n justify-content: space-between;\n }\n`;\n\nconst Input = styled.input`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n margin-bottom: 10px;\n width: 100%;\n\n &.valid {\n border-color: #45ae7c;\n }\n\n &.invalid {\n border-color: #f02929;\n }\n\n @media (min-width: 768px) {\n width: 49.5%;\n margin-bottom: 15px;\n }\n`;\n\nconst TextError = styled(P)`\n margin: 0px;\n margin-bottom: 15px;\n color: #f02929;\n`;\n\nconst UserName = observer(({ setRegisterStepIsValid, setRegisterStepIsInvalid, nextStep }) => {\n const { t, i18n } = useTranslation();\n const registrationStore = useContext(RegistrationStore);\n const [firstNameIsValid, setFirstNameIsValid] = useState(false);\n const [lastNameIsValid, setLastNameIsValid] = useState(false);\n const [firstNameError, setFirstNameError] = useState(false);\n const [lastNameError, setLastNameError] = useState(false);\n\n const validateForm = () => {\n if (firstNameIsValid && lastNameIsValid) {\n setRegisterStepIsValid();\n } else {\n setRegisterStepIsInvalid();\n }\n };\n\n useEffect(() => {\n validateForm();\n }, [firstNameIsValid, lastNameIsValid]);\n\n useEffect(() => {\n const firstNameField = document.getElementById(\"first-name\");\n const lastNameField = document.getElementById(\"last-name\");\n if (registrationStore.firstName != \"\" && registrationStore.lastName != \"\") {\n setFirstNameIsValid(true);\n setLastNameIsValid(true);\n firstNameField.classList.add(\"valid\");\n lastNameField.classList.add(\"valid\");\n }\n validateForm();\n });\n\n const handleFirstNameChange = (e) => {\n const firstNameField = document.getElementById(\"first-name\");\n registrationStore.setFirstName(e.target.value);\n if (e.target.value.length !== 0) {\n firstNameField.classList.remove(\"invalid\");\n firstNameField.classList.add(\"valid\");\n setFirstNameIsValid(true);\n setFirstNameError(false);\n } else {\n firstNameField.classList.remove(\"valid\");\n firstNameField.classList.add(\"invalid\");\n setFirstNameIsValid(false);\n setFirstNameError(true);\n }\n };\n\n const handleLastNameChange = (e) => {\n const lastNameField = document.getElementById(\"last-name\");\n registrationStore.setLastName(e.target.value);\n if (e.target.value.length !== 0) {\n lastNameField.classList.remove(\"invalid\");\n lastNameField.classList.add(\"valid\");\n setLastNameIsValid(true);\n setLastNameError(false);\n } else {\n lastNameField.classList.remove(\"valid\");\n lastNameField.classList.add(\"invalid\");\n setLastNameIsValid(false);\n setLastNameError(true);\n }\n };\n\n return (\n \n {t(\"userName.title\")}\n \n handleFirstNameChange(e)}\n onKeyPress={(e) => nextStep(e)}\n placeholder={t(\"userName.firstNamePlaceholder\")}\n autoFocus\n required\n data-testid=\"first-name\"\n />\n handleLastNameChange(e)}\n onKeyPress={(e) => nextStep(e)}\n placeholder={t(\"userName.lastNamePlaceholder\")}\n required\n data-testid=\"last-name\"\n />\n \n {firstNameError && {t(\"userName.firstNameError\")}}\n {lastNameError && {t(\"userName.lastNameError\")}}\n \n );\n});\n\nexport default UserName;\n","import React, { useContext, useState, useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport RegistrationStore from \"../registrationStore\";\nimport { observer } from \"mobx-react-lite\";\nimport styled from \"styled-components\";\nimport { H4, P } from \"../styled/typography\";\nimport Flash from \"../styled/flashMessage\";\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`;\n\nconst Question = styled(H4)`\n font-weight: 500;\n margin: 0px;\n margin-bottom: 15px;\n`;\n\nconst Input = styled.input`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n margin-bottom: 15px;\n\n &.valid {\n border-color: #45ae7c;\n }\n\n &.invalid {\n border-color: #f02929;\n }\n`;\n\nconst Label = styled.label`\n display: flex;\n margin-bottom: 15px;\n`;\n\nconst Par = styled(P)`\n margin: 0px;\n padding-top: 2px;\n padding-left: 5px;\n display: inline;\n font-size: 16px;\n cursor: pointer;\n`;\n\nconst Error = styled(P)`\n margin: 0px;\n margin-bottom: 15px;\n color: #f02929;\n`;\n\nconst Email = observer(({ setRegisterStepIsValid, setRegisterStepIsInvalid, nextStep, emailTaken }) => {\n const { t, i18n } = useTranslation();\n const registrationStore = useContext(RegistrationStore);\n const [emailError, setEmailError] = useState(false);\n\n useEffect(() => {\n const emailField = document.getElementById(\"email\");\n const checkBox = document.getElementById(\"checkbox\");\n if (validateEmail(registrationStore.email)) {\n checkBox.checked = registrationStore.wantsMarketingEmails;\n setRegisterStepIsValid();\n emailField.classList.remove(\"invalid\");\n emailField.classList.add(\"valid\");\n }\n }, []);\n\n function validateEmail(email) {\n const re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return re.test(String(email).toLowerCase());\n }\n\n const handleEmailChange = (e) => {\n const emailField = document.getElementById(\"email\");\n registrationStore.setEmail(e.target.value);\n if (validateEmail(registrationStore.email)) {\n emailField.classList.remove(\"invalid\");\n emailField.classList.add(\"valid\");\n setRegisterStepIsValid();\n setEmailError(false);\n } else {\n emailField.classList.remove(\"valid\");\n emailField.classList.add(\"invalid\");\n setRegisterStepIsInvalid();\n setEmailError(true);\n }\n };\n\n const handleWantsMarketingEmails = (e) => {\n registrationStore.setWantsMarketingEmails(!registrationStore.wantsMarketingEmails);\n };\n\n return (\n \n {t(\"emailRegister.title\")}\n {emailTaken && {t(\"emailRegister.emailExists\")}}\n handleEmailChange(e)}\n onKeyPress={(e) => nextStep(e)}\n placeholder={t(\"emailRegister.placeholder\")}\n autoFocus\n required\n data-testid=\"email\"\n />\n {emailError && {t(\"emailRegister.emailError\")}}\n \n \n );\n});\n\nexport default Email;\n","import React, { useContext, useState, useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport styled from \"styled-components\";\nimport Card from \"../styled/card\";\nimport RegistrationStore from \"../registrationStore\";\nimport { H4, P } from \"../styled/typography\";\nimport registrationStore from \"../registrationStore\";\n\nconst countryCodes = require(\"../../country_codes.json\");\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n margin-bottom: 15px;\n`;\n\nconst Question = styled(H4)`\n font-weight: 500;\n margin: 0px;\n`;\n\nconst FormGroup = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst PhoneNumberFields = styled.div`\n display: flex;\n flex-direction: column;\n\n @media (min-width: 980px) {\n flex-direction: row;\n }\n`;\nconst Input = styled.input`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n`;\n\nconst InputPhone = styled(Input)`\n margin-left: 0px;\n flex-grow: 2;\n font-size: 16px;\n\n @media (min-width: 980px) {\n margin-left: 10px;\n }\n\n &.valid {\n border-color: #45ae7c;\n }\n\n &.invalid {\n border-color: #f02929;\n }\n`;\n\nconst PhonePrefix = styled(Input)`\n width: 30%;\n\n @media (min-width: 980px) {\n width: 20%;\n }\n\n &.valid {\n border-color: #45ae7c;\n }\n\n &.invalid {\n border-color: #f02929;\n }\n`;\n\nconst Label = styled.label`\n font-size: 18px;\n font-weight: 600;\n color: #545454;\n`;\n\nconst Helper = styled(P)`\n margin: 0px;\n font-style: italic;\n font-size: 14px;\n margin: 5px 0px;\n margin-bottom: 15px;\n`;\n\nconst Datalist = styled.datalist`\n border: 1px solid #51c0cf;\n`;\n\nconst PhoneNumber = ({ setRegisterStepIsValid, setRegisterStepIsInvalid, nextStep }) => {\n const { t, i18n } = useTranslation();\n const store = useContext(RegistrationStore);\n const [phonePrefix, setPhonePrefix] = useState();\n const [phoneNumber, setPhoneNumber] = useState();\n const [phonePrefixIsValid, setPhonePrefixIsValid] = useState(false);\n const [phoneNumberIsValid, setPhoneNumberIsValid] = useState(false);\n\n useEffect(() => {\n store.setPhoneNumber(phonePrefix + phoneNumber);\n }, [phonePrefix, phoneNumber]);\n\n useEffect(() => {\n if (phonePrefixIsValid && phoneNumberIsValid) {\n setRegisterStepIsValid();\n console.log(\"valid\");\n } else {\n setRegisterStepIsInvalid();\n }\n }, [phonePrefixIsValid, phoneNumberIsValid]);\n\n let codes = [];\n for (const key in countryCodes) {\n codes.push(countryCodes[key]);\n }\n\n const validatePhoneNumber = (phoneNumber) => {\n const re = /^\\d+$/;\n if (phoneNumber.length > 0 && re.test(phoneNumber)) {\n return true;\n } else {\n return false;\n }\n };\n\n const validatePrefix = (phonePrefix) => {\n const re = /\\+\\d+/;\n if (re.test(phonePrefix) && codes.includes(phonePrefix)) {\n return true;\n } else {\n return false;\n }\n };\n\n const handlePhoneNumberChange = (e) => {\n setPhoneNumber(e.target.value);\n const phoneField = document.getElementById(\"phone\");\n\n if (validatePhoneNumber(e.target.value)) {\n phoneField.classList.remove(\"invalid\");\n phoneField.classList.add(\"valid\");\n setPhoneNumberIsValid(true);\n } else {\n phoneField.classList.remove(\"valid\");\n phoneField.classList.add(\"invalid\");\n setPhoneNumberIsValid(false);\n }\n };\n\n const handlePrefixChange = (e) => {\n setPhonePrefix(e.target.value);\n const prefixField = document.getElementById(\"prefix\");\n\n if (validatePrefix(e.target.value)) {\n prefixField.classList.remove(\"invalid\");\n prefixField.classList.add(\"valid\");\n setPhonePrefixIsValid(true);\n } else {\n prefixField.classList.remove(\"valid\");\n prefixField.classList.add(\"invalid\");\n setPhonePrefixIsValid(false);\n }\n };\n\n return (\n \n \n {t(\"gegevensForm.tel\")}\n {t(\"registerForm2.followingNumbers\")}\n \n handlePrefixChange(e)}\n />\n \n {codes.map((element) => (\n \n ))}\n \n nextStep(e)}\n onChange={(e) => handlePhoneNumberChange(e)}\n />\n \n \n \n );\n};\n\nexport default PhoneNumber;\n","import React, { useContext, useState, useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport RegistrationStore from \"../../components/registrationStore\";\nimport { observer } from \"mobx-react-lite\";\nimport styled from \"styled-components\";\nimport { H4, P } from \"../../components/styled/typography\";\nimport { FaEyeSlash, FaEye } from \"react-icons/fa\";\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`;\n\nconst Question = styled(H4)`\n font-weight: 500;\n margin: 0px;\n margin-bottom: 15px;\n`;\n\nconst Input = styled.input`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n margin-bottom: 15px;\n width: 100%;\n\n &.valid {\n border-color: #45ae7c;\n }\n\n &.invalid {\n border-color: #f02929;\n }\n`;\n\nconst InputDiv = styled.div`\n position: relative;\n width: 100%;\n`;\n\nconst EyeSlashIcon = styled(FaEyeSlash)`\n font-size: 20px;\n position: absolute;\n right: 15px;\n top: 16px;\n cursor: pointer;\n color: #545454;\n`;\n\nconst EyeIcon = styled(FaEye)`\n font-size: 20px;\n position: absolute;\n right: 15px;\n top: 16px;\n cursor: pointer;\n color: #545454;\n`;\n\nconst TextError = styled(P)`\n margin: 0px;\n margin-bottom: 15px;\n color: #f02929;\n`;\n\nconst Password = observer(({ setRegisterStepIsValid, setRegisterStepIsInvalid, nextStep }) => {\n const { t, i18n } = useTranslation();\n const registrationStore = useContext(RegistrationStore);\n const [passwordIsVisible, setPasswordIsVisible] = useState(false);\n const [passwordError, setPasswordError] = useState(false);\n\n const validatePassword = (password) => {\n // 1 uppercase, 1 lowercase, 1 number\n const re = /(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]){8}/;\n return re.test(String(password));\n };\n\n useEffect(() => {\n if (validatePassword(registrationStore.password)) {\n const passwordField = document.getElementById(\"password\");\n passwordField.classList.add(\"valid\");\n setRegisterStepIsValid();\n }\n }, []);\n\n const handlePasswordChange = (e) => {\n const passwordField = document.getElementById(\"password\");\n registrationStore.setPassword(e.target.value);\n if (\n validatePassword(registrationStore.password) &&\n registrationStore.password.length <= 20 &&\n registrationStore.password.length >= 8\n ) {\n passwordField.classList.remove(\"invalid\");\n passwordField.classList.add(\"valid\");\n setRegisterStepIsValid();\n setPasswordError(false);\n } else {\n passwordField.classList.remove(\"valid\");\n passwordField.classList.add(\"invalid\");\n setRegisterStepIsInvalid();\n setPasswordError(true);\n }\n };\n\n const handleEyeClick = () => {\n setPasswordIsVisible(!passwordIsVisible);\n };\n\n return (\n \n {t(\"passwordRegister.title\")}\n \n handlePasswordChange(e)}\n onKeyPress={(e) => nextStep(e)}\n placeholder={t(\"passwordRegister.placeholder\")}\n autoFocus\n required\n data-testid=\"password\"\n />\n {!passwordIsVisible && }\n {passwordIsVisible && }\n \n {passwordError && {t(\"passwordRegister.error\")}}\n \n );\n});\n\nexport default Password;\n","import React, { useContext, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport RegistrationStore from \"../../components/registrationStore\";\nimport { observer } from \"mobx-react-lite\";\nimport styled from \"styled-components\";\nimport { H4, P } from \"../../components/styled/typography\";\nimport { FaEyeSlash, FaEye } from \"react-icons/fa\";\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`;\n\nconst Question = styled(H4)`\n font-weight: 500;\n margin: 0px;\n margin-bottom: 15px;\n`;\n\nconst Input = styled.input`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n margin-bottom: 15px;\n width: 100%;\n\n &.valid {\n border-color: #45ae7c;\n }\n\n &.invalid {\n border-color: #f02929;\n }\n`;\n\nconst InputDiv = styled.div`\n position: relative;\n width: 100%;\n`;\n\nconst EyeSlashIcon = styled(FaEyeSlash)`\n font-size: 20px;\n position: absolute;\n right: 15px;\n top: 16px;\n cursor: pointer;\n color: #545454;\n`;\n\nconst EyeIcon = styled(FaEye)`\n font-size: 20px;\n position: absolute;\n right: 15px;\n top: 16px;\n cursor: pointer;\n color: #545454;\n`;\n\nconst TextError = styled(P)`\n margin: 0px;\n margin-bottom: 15px;\n color: #f02929;\n`;\n\nconst RepeatPassword = observer(({ setRegisterStepIsValid, setRegisterStepIsInvalid, nextStep }) => {\n const { t, i18n } = useTranslation();\n const registrationStore = useContext(RegistrationStore);\n const [passwordIsVisible, setPasswordIsVisible] = useState(false);\n const [repeatedPasswordValue, setRepeatedPasswordValue] = useState(\"\");\n const [repeatedPasswordError, setRepeatedPasswordError] = useState(false);\n\n function validatePassword(password) {\n return password == registrationStore.password;\n }\n\n const handlePasswordChange = (e) => {\n const passwordField = document.getElementById(\"password\");\n setRepeatedPasswordValue(e.target.value);\n if (validatePassword(e.target.value)) {\n passwordField.classList.remove(\"invalid\");\n passwordField.classList.add(\"valid\");\n setRegisterStepIsValid();\n setRepeatedPasswordError(false);\n } else {\n passwordField.classList.remove(\"valid\");\n passwordField.classList.add(\"invalid\");\n setRegisterStepIsInvalid();\n setRepeatedPasswordError(true);\n }\n };\n\n const handleEyeClick = () => {\n setPasswordIsVisible(!passwordIsVisible);\n };\n\n return (\n \n {t(\"repeatPasswordRegister.title\")}\n \n handlePasswordChange(e)}\n onKeyPress={(e) => nextStep(e)}\n placeholder={t(\"repeatPasswordRegister.placeholder\")}\n autoFocus\n required\n data-testid=\"password\"\n />\n {!passwordIsVisible && }\n {passwordIsVisible && }\n \n {repeatedPasswordError && (\n {t(\"repeatPasswordRegister.error\")}\n )}\n \n );\n});\n\nexport default RepeatPassword;\n","import React, { useContext, useState, useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport RegistrationStore from \"../../components/registrationStore\";\nimport { observer } from \"mobx-react-lite\";\nimport styled from \"styled-components\";\nimport { H4, P } from \"../../components/styled/typography\";\nimport { FaEyeSlash, FaEye } from \"react-icons/fa\";\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`;\n\nconst Question = styled(H4)`\n font-weight: 500;\n margin: 0px;\n margin-bottom: 15px;\n`;\n\nconst Select = styled.select`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n margin-bottom: 15px;\n width: 100%;\n\n &.valid {\n border-color: #45ae7c;\n }\n\n &.invalid {\n border-color: #f02929;\n }\n`;\n\nconst Option = styled.option``;\n\nconst InputDiv = styled.div`\n position: relative;\n width: 100%;\n`;\n\nconst TextError = styled(P)`\n margin: 0px;\n margin-bottom: 15px;\n color: #f02929;\n`;\n\nconst Speciality = observer(({ setRegisterStepIsValid, nextStep }) => {\n const { t, i18n } = useTranslation();\n const registrationStore = useContext(RegistrationStore);\n\n useEffect(() => {\n setRegisterStepIsValid();\n }, []);\n\n const handleSpecialityChange = (e) => {\n registrationStore.setSpeciality(e.target.value);\n };\n\n return (\n \n {t(\"specialityRegister.Question\")}\n \n handleSpecialityChange(e)}\n onKeyPress={(e) => nextStep(e)}\n placeholder=\"Your speciality\"\n autoFocus\n required\n data-testid=\"speciality\"\n >\n \n \n \n \n \n \n \n \n \n \n \n \n );\n});\n\nexport default Speciality;\n","import React, { useContext, useState, useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport RegistrationStore from \"../registrationStore\";\nimport { observer } from \"mobx-react-lite\";\nimport styled from \"styled-components\";\nimport { H4, P } from \"../styled/typography\";\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`;\n\nconst Question = styled(H4)`\n font-weight: 500;\n margin: 0px;\n margin-bottom: 15px;\n`;\n\nconst Input = styled.input`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n margin-bottom: 15px;\n\n &.valid {\n border-color: #45ae7c;\n }\n\n &.invalid {\n border-color: #f02929;\n }\n`;\n\nconst Label = styled.label`\n display: flex;\n margin-bottom: 10px;\n`;\n\nconst Par = styled(P)`\n margin: 0px;\n padding-top: 2px;\n padding-left: 5px;\n display: inline;\n font-size: 16px;\n cursor: pointer;\n`;\n\nconst Error = styled(P)`\n margin: 0px;\n margin-bottom: 15px;\n color: #f02929;\n`;\n\nconst BlueLink = styled.a`\n color: #51c0cf;\n`;\n\nconst AcceptStatements = observer(({ setRegisterStepIsValid, setRegisterStepIsInvalid }) => {\n const { t, i18n } = useTranslation();\n const [acceptedGeneralConditions, setAcceptedGeneralConditions] = useState(false);\n const [acceptedPrivacyStatement, setAcceptedPrivacyStatement] = useState(false);\n const [generalConditionsError, setGeneralConditionsError] = useState(false);\n const [privacyStatementError, setPrivacyStatementError] = useState(false);\n\n const managePrivacyErrorMessage = (status) => {\n if (status === true) {\n setPrivacyStatementError(false);\n } else {\n setPrivacyStatementError(true);\n }\n };\n\n const manageGeneralConsitionsErrorMessage = (status) => {\n if (status === true) {\n setGeneralConditionsError(false);\n } else {\n setGeneralConditionsError(true);\n }\n };\n\n const changeGeneralConditions = () => {\n manageGeneralConsitionsErrorMessage(!acceptedGeneralConditions);\n setAcceptedGeneralConditions(!acceptedGeneralConditions);\n };\n\n const changePrivacyStatement = () => {\n managePrivacyErrorMessage(!acceptedPrivacyStatement);\n setAcceptedPrivacyStatement(!acceptedPrivacyStatement);\n };\n\n useEffect(() => {\n console.log(acceptedGeneralConditions);\n console.log(acceptedPrivacyStatement);\n if (acceptedGeneralConditions && acceptedPrivacyStatement) {\n setRegisterStepIsValid();\n } else {\n setRegisterStepIsInvalid();\n }\n }, [acceptedGeneralConditions, acceptedPrivacyStatement]);\n\n return (\n \n {t(\"acceptStatements.title\")}\n \n \n {generalConditionsError && (\n {t(\"acceptStatements.GeneralConditionsError\")}\n )}\n {privacyStatementError && (\n {t(\"acceptStatements.privacyStatementError\")}\n )}\n \n );\n});\n\nexport default AcceptStatements;\n","import React, { useState, useContext, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport VerifyCode from \"./verifyCode\";\nimport RegistrationStore from \"./registrationStore\";\nimport { api } from \"../api\";\nimport { Redirect } from \"react-router-dom\";\nimport Flash from \"./styled/flashMessage\";\nimport { useTranslation } from \"react-i18next\";\nimport Button from \"./styled/button\";\nimport { P } from \"./styled/typography\";\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n margin: 25px 0px 50px 0px;\n`;\n\nconst Code = styled.div`\n margin: 10px 0px;\n`;\n\nconst Resend = styled.span`\n color: #51c0cf;\n text-decoration: underline;\n cursor: pointer;\n`;\n\nconst ResendText = styled(P)`\n margin-top: 35px;\n`;\n\nconst Text = styled(P)`\n margin-top: 5px;\n margin-bottom: 0px;\n`;\n\nconst Error = styled.p`\n font-size: 16px;\n color: #fff;\n font-style: italic;\n background-color: #dc393d;\n border: 1px solid #dc393d;\n border-radius: 10px;\n padding: 10px 15px;\n`;\n\nconst TwoFA = ({ setRegisterStepIsValid, setRegisterStepIsInvalid, verified }) => {\n const { t, i18n } = useTranslation();\n const store = useContext(RegistrationStore);\n const [code, setCode] = useState();\n const [showResendMessage, setShowResendMessage] = useState(false);\n const [showFailMessage, setShowFailMessage] = useState(false);\n\n useEffect(() => {\n api.get(\"/2FA/email\", { params: { email: store.email } });\n }, []);\n\n const ResendEmail = () => {\n api.get(\"/2FA/email\", { params: { email: store.email } }).then((res) => {\n setShowResendMessage(true);\n setTimeout(function () {\n setShowResendMessage(false);\n }, 5000);\n });\n };\n\n const VerifyCodeInput = () => {\n api.put(\"/2FA/code/\" + code, { type: \"email\" }).then((res) => {\n if (res.data.success) {\n store.addUserAttribute(\"verified\", true);\n setRegisterStepIsValid();\n } else {\n setRegisterStepIsInvalid();\n setShowFailMessage(true);\n }\n });\n };\n\n return (\n \n {t(\"2FAEmail.emailSent\")}\n {showResendMessage && {t(\"2FAEmail.emailResend\")}}\n {showFailMessage && {t(\"2FAEmail.invalidCode\")}}\n \n {t(\"2FAEmail.checkSpam\")}\n \n {t(\"2FAEmail.codeInput\")}\n \n \n \n \n \n {t(\"2FAEmail.noCodeP1\")}\n {t(\"2FAEmail.noCodeP2\")}\n {t(\"2FAEmail.noCodeP3\")}\n \n \n );\n};\n\nexport default TwoFA;\n","import React, { useEffect, useState, useContext } from \"react\";\nimport styled from \"styled-components\";\nimport qs from \"qs\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link } from \"react-router-dom\";\nimport { api } from \"../../api\";\nimport { Redirect } from \"react-router-dom\";\nimport { FaArrowLeft } from \"react-icons/fa\";\nimport Header from \"../../components/header\";\nimport Card from \"../../components/styled/card\";\nimport Button from \"../../components/styled/button\";\nimport Flash from \"../../components/styled/flashMessage\";\nimport { H2, P } from \"../../components/styled/typography\";\nimport RegistrationStore from \"../../components/registrationStore\";\nimport TypeOfUser from \"../../components/registrationComponents/typeOfUser\";\nimport UserName from \"../../components/registrationComponents/userName\";\nimport Email from \"../../components/registrationComponents/email\";\nimport PhoneNumber from \"../../components/registrationComponents/phoneNumber\";\nimport Password from \"../../components/registrationComponents/password\";\nimport RepeatPassword from \"../../components/registrationComponents/repeatPassword\";\nimport Speciality from \"../../components/registrationComponents/speciality\";\nimport AcceptStatements from \"../../components/registrationComponents/acceptStatements\";\nimport TwoFA from \"../../components/2FAEmail\";\nimport TwoFAPhone from \"../../components/2FAPhone\";\n\nconst RegisterCard = styled(Card)`\n width: 90%;\n margin: 5vh auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 50px 50px;\n position: relative;\n\n @media (min-width: 768px) {\n width: 90%;\n margin: 10vh auto;\n max-width: 650px;\n }\n\n @media (min-width: 980px) {\n width: 70%;\n margin: 10vh auto;\n }\n`;\n\nconst Title = styled(H2)`\n margin: 10px auto 30px auto;\n`;\n\nconst BlueLink = styled(Link)`\n color: #51c0cf;\n`;\n\nconst CenteredWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n`;\n\nconst DefaultWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n width: 100%;\n`;\n\nconst ProgressBar = styled.div`\n width: ${(props) => {\n if (props.step == 0) return \"0px\";\n else if (props.step === 1) return \"11.11%\";\n else if (props.step === 2) return \"22.22%\";\n else if (props.step === 3) return \"33.33%\";\n else if (props.step === 4) return \"44.44%\";\n else if (props.step === 5) return \"55.55%\";\n else if (props.step === 6) return \"66.66%\";\n else if (props.step === 7) return \"77.77%\";\n else if (props.step === 8) return \"88.88%\";\n else if (props.step === 9) return \"100%\";\n }};\n border: ${(props) => (props.step == 0 ? \"none\" : \"1px solid #51c0cf\")};\n border-top-left-radius: 10px;\n border-top-right-radius: ${(props) => (props.step == 6 ? \"10px\" : \"0px\")};\n height: 15px;\n position: absolute;\n top: 0px;\n left: 0px;\n background-color: #51c0cf;\n transition: width 1s;\n`;\n\nconst BackDiv = styled.div`\n width: 100%;\n`;\n\nconst Back = styled(P)`\n margin: 0px;\n text-align: left;\n padding-top: 25px;\n cursor: pointer;\n font-size: 16px;\n`;\n\nconst BackArrow = styled(FaArrowLeft)`\n margin-right: 5px;\n transform: translateY(2px);\n`;\n\nfunction Register(props) {\n const { t, i18n } = useTranslation();\n const registrationStore = useContext(RegistrationStore);\n const language = qs.parse(props.location.search, { ignoreQueryPrefix: true }).language;\n const [registrationStep, setRegistrationStep] = useState(0);\n const [invalidError, setInvalidError] = useState(false);\n const [isValidated, setIsValidated] = useState(false);\n const [emailIsTaken, setEmailIsTaken] = useState(false);\n const [loginRedirect, setLoginRedirect] = useState(false);\n const [dashboardRedirect, setDashboardRedirect] = useState(false);\n const [submitError, setSubmitError] = useState(false);\n const [statementError, setStatemenetError] = useState(false);\n const stepIsBeforeSpeciality = registrationStep === 7\n\n //Check if registration is called with individual account + which type (stem/slik)\n const individualTrack = qs.parse(props.location.search, { ignoreQueryPrefix: true }).individuTrack ?? null;\n\n useEffect(() => {\n if (language) {\n i18n.changeLanguage(language);\n }\n }, []);\n\n useEffect(() => {\n if (registrationStore.newUser.verified || registrationStore.newUser.verifiedPhone) {\n setRegistrationStep(registrationStep + 1);\n setIsValidated(false);\n }\n }, [registrationStore.newUser.verified, registrationStore.newUser.verifiedPhone]);\n\n const triggerNextWithEnter = (e) => {\n if (e.which === 13) {\n goToNextStep();\n }\n };\n\n const triggerNextWithEnterEmail = (e) => {\n if (e.which === 13) {\n checkIfEmailExists();\n }\n };\n\n const checkIfEmailExists = () => {\n api.get(\"/user\", { params: { email: registrationStore.email } }).then((response) => {\n if (response.data.user) {\n setEmailIsTaken(true);\n } else {\n setEmailIsTaken(false);\n goToNextStep();\n }\n });\n };\n\n const findCorrectNextStep = () => {\n if ((registrationStore.isTherapist === false || individualTrack !== null) && stepIsBeforeSpeciality) {\n registrationStore.setSpeciality(\"\");\n setRegistrationStep(registrationStep + 2);\n } else if (registrationStep === 0 && individualTrack !== null) {\n setRegistrationStep(registrationStep + 2);\n } else {\n setRegistrationStep(registrationStep + 1);\n }\n };\n\n const goToNextStep = () => {\n if (isValidated) {\n findCorrectNextStep();\n setInvalidError(false);\n } else {\n setInvalidError(true);\n }\n setIsValidated(false);\n };\n\n const goToPreviousStep = () => {\n if (registrationStep > 0) {\n setRegistrationStep(registrationStep - 1);\n }\n };\n\n const setIsValidatedToTrue = () => {\n setIsValidated(true);\n };\n\n const SetIsValidatedToFalse = () => {\n setIsValidated(false);\n };\n\n const createAccount = () => {\n if (isValidated) {\n const newUser = {\n email: registrationStore.email,\n password: registrationStore.password,\n firstName: registrationStore.firstName,\n lastName: registrationStore.lastName,\n therapist: registrationStore.isTherapist,\n expired: false,\n plan: registrationStore.isTherapist ? \"Therapeut\" : \"Patiënt\",\n plan_period: 1,\n verified: true,\n TwoFAEnabled: false,\n wantsMarketingEmails: registrationStore.wantsMarketingEmails,\n speciality: registrationStore.speciality,\n telephone: registrationStore.phoneNumber,\n track: individualTrack\n };\n\n api.post(\"/user\", newUser)\n .then(() => {\n registrationStore.setRegistrationMessage(true);\n if (individualTrack != null) {\n registrationStore.setInProgress(true);\n registrationStore.login().then(() => {\n setDashboardRedirect(true);\n registrationStore.setInProgress(false);\n })\n .catch(() => registrationStore.setInProgress(false));\n } else {\n setLoginRedirect(true);\n }\n })\n .catch(() => setSubmitError(true));\n } else {\n setStatemenetError(true);\n }\n };\n\n return (\n
    \n
    \n \n \n\n \n {t(\"register.reg\")}\n \n {submitError && {t(\"registration.submitError\")}}\n {invalidError && {t(\"registration.invalidError\")}}\n {statementError && {t(\"registration.statementError\")}}\n {(registrationStep === 0 && individualTrack === null) && (\n \n \n \n

    \n {t(\"register.acc\")} {t(\"register.log\")}\n

    \n
    \n )}\n\n {(registrationStep === 1 || (registrationStep < 2 && individualTrack !== null)) && (\n \n triggerNextWithEnter(e)}\n />\n \n \n )}\n\n {registrationStep === 2 && (\n \n triggerNextWithEnterEmail(e)}\n emailTaken={emailIsTaken}\n />\n \n \n )}\n\n {registrationStep === 3 && (\n \n triggerNextWithEnter(e)}\n verified={goToNextStep}\n />\n \n )}\n\n {registrationStep === 4 && (\n \n triggerNextWithEnter(e)}\n />\n \n \n )}\n\n {registrationStep === 5 && (\n \n triggerNextWithEnter(e)}\n verified={goToNextStep}\n isInRegistration={true}\n />\n \n )}\n\n {registrationStep === 6 && (\n \n triggerNextWithEnter(e)}\n />\n \n \n )}\n\n {stepIsBeforeSpeciality && (\n \n triggerNextWithEnter(e)}\n />\n \n \n )}\n\n {registrationStep === 8 && (\n \n triggerNextWithEnter(e)}\n />\n \n \n )}\n\n {registrationStep === 9 && (\n \n \n \n \n )}\n {registrationStep > 0 && registrationStep != 4 && (\n \n \n {t(\"register.goBack\")}\n \n \n )}\n
    \n {loginRedirect && }\n {dashboardRedirect && }\n
    \n );\n}\n\nexport default Register;\n","import React, { useState, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport Global from \"../../components/styled/global\";\nimport { PageTitle } from \"../../components/styled/typography\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport Author from \"../../components/author\";\nimport Button from \"../../components/styled/button\";\nimport { observer } from \"mobx-react\";\nimport { api } from \"../../api\";\nimport LoadSpinner from \"../../components/loadspinner\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport { H2} from '../../components/styled/typography';\nimport Card from '../../components/styled/card';\nimport { useTranslation } from \"react-i18next\";\nimport { getResourceUrl, downloadOneFile } from '../../azure';\n\nconst Wrapper = styled(Card)`\n padding: 30px;\n width: 100%;\n margin-bottom: 10px;\n overflow: hidden;\n\n img {\n max-width: 100%;\n }\n\n white-space: normal;\n word-wrap: break-word;\n\n @media (min-width: 980px){\n width: 98%;\n overflow: initial;\n }\n`\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n align-items: flex-start;\n }\n`;\n\nconst Img = styled.img`\n width: 80%;\n\n @media (min-width: 980px) {\n width: 40%;\n }\n`;\n\nconst Video = styled.video`\n width: 80%;\n margin-bottom: 10px;\n`;\n\nconst Audio = styled.audio`\n max-width: 80%;\n margin-top: 20px;\n margin-bottom: 20px;\n`;\n\nconst MediaDetail = observer((props) => {\n const { t, i18n } = useTranslation();\n const [media, setMedia] = useState({});\n const { id } = props.match.params;\n const [loading, setLoading] = useState(true);\n const [mediaToShow, setMediaToShow] = useState('');\n\n useEffect(() => {\n api.get(\"/file/\" + id).then(async (response) => {\n setMedia(response.data.file);\n getResourceUrl(response.data.file).then((file_url) => {\n setFile(file_url, response.data.file.type);\n setLoading(false);\n })\n });\n }, []);\n\n const setFile = (file_url, type) => {\n switch (type) {\n case \"image\":\n setMediaToShow();\n break;\n case \"video\":\n setMediaToShow();\n break;\n case \"audio\":\n setMediaToShow();\n break;\n default:\n setMediaToShow(null);\n break;\n }\n }\n\n return (\n \n \n \n \n {t(\"sidebarPatient.material\")}\n {loading ? (\n \n ) : (<>\n \n \n

    {media.name}

    \n {mediaToShow ?? {t(\"fileForm.noPreview\")}}\n
    \n \n
    \n \n )}\n
    \n
    \n
    \n );\n});\n\nexport default MediaDetail;\n","import React, { useContext, useEffect, useState } from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { withRouter } from 'react-router';\nimport ChatStore from '../../stores/chat.store';\nimport extendedTheme from '../../theme';\nimport styled, { ThemeProvider } from 'styled-components';\nimport {faEnvelope} from '@fortawesome/free-solid-svg-icons';\nimport Icon from '../icon';\nimport {color, compose, space} from 'styled-system';\nimport Card from '@eu.jstack/react-card';\nimport { PrimaryButton, TertiaryButton } from '@eu.jstack/react-button/src';\nimport Text from '../text';\nimport registrationStore from \"../../../components/registrationStore\";\nimport api from '../../api';\nimport chatService from '../../services/chatService';\n\nconst Highlight = styled.div`\n height: 100px;\n width: 5px;\n ${compose(color)};\n`;\n\nconst CardContainer = styled.div`\n display: flex;\n align-items: center;\n ${compose(space)}\n`;\n\nconst MessageIconContainer = styled.div`\n display: flex;\n align-items: center;\n height: 100%;\n ${compose(space)}\n`;\n\nconst MessageIconCircle = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n width: 50px;\n height: 50px;\n border-radius: 50%;\n ${compose(color)}\n`;\n\nconst DescriptionContainer = styled.div`\n display: flex;\n flex-direction: column;\n ${compose(space)}\n`;\n\nconst ActionContainer = styled.div`\n display: flex;\n flex-direction: row;\n ${compose(space)}\n`;\n\nconst ChatNotification = observer(({history}) => {\n const chatstore = useContext(ChatStore);\n const [chat, setChat] = useState(null);\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n\n useEffect(() => {\n\n if(chatstore.showNotification) {\n chatService.getChat(chatstore.activeChat.id).then((data) => setChat(data.data));\n setTimeout(() => chatstore.showNotification = false, 8000);\n }\n }, [chatstore.showNotification]);\n\n const getMessageSender = () => {\n if (chat) {\n var fullName;\n chat.attendees.forEach(attendee => {\n if (attendee.public_id !== user.public_id) fullName = `${attendee.firstName} ${attendee.lastName}`;\n });\n return fullName;\n } else {\n return \"\";\n }\n }\n\n const showNotification = () => {\n\n if (chatstore.activeChat) {\n //const target = JSON.parse(JSON.stringify(chatstore.activeChat));\n const last = chatstore.activeChat.messages[chatstore.activeChat.messages.length - 1];\n return ! (last && last.instigatorId != user.public_id);\n }\n }\n\n const removeNotification = () => {\n chatstore.showNotification = false;\n }\n\n const openChat = () => {\n removeNotification();\n history.push('/chat', { id: chat.id});\n }\n\n if(! chatstore.showNotification || showNotification()) {\n return null;\n }\n\n return(\n \n \n \n\n \n \n \n \n \n \n\n \n Inkomend bericht\n Van {getMessageSender()}\n \n\n \n openChat()} px={3}>Openen\n removeNotification()}ml={3}>Negeer\n \n \n \n \n );\n});\n\n\nexport default withRouter(ChatNotification);","import React, { useState, useEffect, useContext } from \"react\";\nimport styled from \"styled-components\";\nimport Global from \"../../components/styled/global\";\nimport { PageTitle } from \"../../components/styled/typography\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport Author from \"../../components/author\";\nimport Button from \"../../components/styled/button\";\nimport { observer } from \"mobx-react\";\nimport { api } from \"../../api\";\nimport LoadSpinner from \"../../components/loadspinner\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport { H2} from '../../components/styled/typography';\nimport Card from '../../components/styled/card';\nimport { useTranslation } from \"react-i18next\";\nimport resultStore from \"../../components/resultStore\";\nimport qs from \"qs\";\nimport { P } from \"../../components/styled/typography\";\nimport PatientOverlay from \"../../components/overlays/patientOverlay\";\nimport { Redirect } from \"react-router-dom\";\nimport { getResourceUrl, downloadOneFile } from \"../../azure\";\n\nconst Wrapper = styled(Card)`\n padding: 30px;\n width: 100%;\n margin-bottom: 10px;\n overflow: hidden;\n\n img {\n max-width: 100%;\n }\n\n white-space: normal;\n word-wrap: break-word;\n\n @media (min-width: 980px){\n width: 98%;\n overflow: initial;\n }\n`\n\nconst Flex = styled.div`\n display: flex;\n flex-direction: column;\n\n @media (min-width: 980px) {\n flex-direction: row;\n justify-content: space-between;\n align-items: flex-start;\n }\n`;\n\nconst Img = styled.img`\n width: 80%;\n\n @media (min-width: 980px) {\n width: 40%;\n }\n`;\n\nconst Video = styled.video`\n width: 80%;\n margin-bottom: 10px;\n`;\n\nconst Audio = styled.audio`\n max-width: 80%;\n margin-top: 20px;\n margin-bottom: 20px;\n`;\n\nconst Description = styled(P)`\n margin-top: 0px;\n color: #545454;\n`;\nconst DoneButton = styled(Button)`\n margin-top: 20px;\n`;\nconst ButtonDiv = styled.div``;\n\nconst MediaDetail = observer((props) => {\n const { t, i18n } = useTranslation();\n const [media, setMedia] = useState({});\n const { id } = props.match.params;\n const [loading, setLoading] = useState(true);\n const [mediaToShow, setMediaToShow] = useState('');\n const [isExercise, setIsExercise] = useState();\n const RStore = useContext(resultStore);\n const task_id = qs.parse(props.location.search, { ignoreQueryPrefix: true }).task_id;\n const [exercise, setExercise] = useState();\n const [redirect, setRedirect] = useState(false);\n const startTime = Date.now();\n\n useEffect(() => {\n api.get(\"/file/\" + id).then(async (response) => {\n setMedia(response.data.file);\n getResourceUrl(response.data.file).then((file_url) => {\n setFile(file_url, response.data.file.type);\n if (task_id) {\n api.get(\"/task/\" + task_id).then((res) => {\n setExercise(res.data.task);\n setLoading(false);\n });\n } else {\n setLoading(false);\n }\n })\n });\n RStore.clearRecording();\n }, []);\n\n useEffect(() => {\n var d = qs.parse(props.location.search, { ignoreQueryPrefix: true }).exercise;\n setIsExercise(d);\n }, [props.location.search]);\n\n const setFile= (file_url, type) => {\n switch (type) {\n case \"image\":\n setMediaToShow();\n break;\n case \"video\":\n setMediaToShow();\n break;\n case \"audio\":\n setMediaToShow();\n break;\n default:\n setMediaToShow(null);\n break;\n }\n }\n\n const HandleSubmit = () => {\n setRedirect(true);\n };\n\n return (\n \n \n \n \n {t(\"sidebarPatient.material\")}\n {loading ? (\n \n ) : (<>\n \n {isExercise && {exercise.description}}\n \n

    {media.name}

    \n {mediaToShow ?? {t(\"fileForm.noPreview\")}}\n
    \n \n
    \n \n {isExercise && (\n \n )}\n \n \n \n )}\n {redirect && (\n \n )}\n
    \n
    \n
    \n );\n});\n\nexport default MediaDetail;\n","import React, {useState} from \"react\";\nimport styled from \"styled-components\";\nimport { Field } from \"formik\";\n\nconst Wrapper = styled.div`\n display: flex;\n align-items: flex-end;\n margin: 5px 0px;\n`;\n\nconst SwitchLabel = styled.label`\n position: relative;\n display: inline-block;\n width: 47px;\n height: 20px;\n margin-top: 5px;\n`;\n\nconst Label = styled.label`\n margin: 0px;\n display: inline-block;\n margin-left: 10px;\n`;\n\nconst Slider = styled.div`\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: #ccc;\n -webkit-transition: 0.4s;\n transition: 0.4s;\n\n &:before {\n position: absolute;\n content: \"\";\n height: 13px;\n width: 13px;\n left: 4px;\n bottom: 4px;\n background-color: white;\n -webkit-transition: 0.4s;\n transition: 0.4s;\n }\n`;\n\nconst RoundSlider = styled(Slider)`\n border-radius: 34px;\n &:before {\n border-radius: 50%;\n }\n`;\n\nconst SwitchInput = styled(Field)`\n display: none;\n\n &:checked + ${Slider} {\n background-color: #51c0cf;\n }\n\n &:focus + ${Slider} {\n box-shadow: 0 0 1px #51c0cf;\n }\n\n &:checked + ${Slider}:before {\n -webkit-transform: translateX(26px);\n -ms-transform: translateX(26px);\n transform: translateX(26px);\n }\n`;\n\nexport const CallbackSwitch = (props) => {\n const [checked, setChecked] = useState(props.checked)\n return (<>\n \n \n {\n setChecked(e.target.checked)\n props.callback && props.callback(e.target.checked)\n }}\n />\n \n \n {props.children ? document.getElementById(props.name)?.checked && props.children : null}\n \n \n );\n};","import React, {useRef, useState, useEffect, useContext } from 'react';\nimport { useTranslation } from \"react-i18next\";\nimport { observer } from \"mobx-react\";\nimport { Formik, Form, Field, FieldArray, getIn, setIn } from 'formik';\nimport styled from \"styled-components\";\nimport Card from \"../styled/card\";\nimport Button from \"../styled/button\";\nimport { SmallTitle } from \"../styled/typography\";\nimport { CallbackSwitch } from \"../styled/callbackSwitch\";\nimport { Switch } from \"../styled/switch\";\nimport MediaOverlay from \"./mediaSelectionOverlay\";\nimport * as Yup from \"yup\";\nimport { Disciplines, Subdisciplines } from \"../resources/disciplines\";\nimport { Languages } from \"../resources/languages\";\nimport TagSelect from \"../helperComponents/tagSelect\";\nimport registrationStore from \"../registrationStore\";\nimport ClassicEditor from \"@ckeditor/ckeditor5-build-classic\";\nimport CKEditor from \"@ckeditor/ckeditor5-react\";\nimport LoadSpinner from '../loadspinner';\nimport { api } from '../../api';\nimport { Redirect } from \"react-router-dom\";\nimport { DisplayFormikState } from '../helperComponents/formHelper';\nimport {\n FaTimes,\n FaTrash,\n FaPencilAlt,\n FaInfoCircle,\n FaShoePrints,\n FaCog,\n FaBullhorn,\n FaPhotoVideo\n} from \"react-icons/fa\";\n\nconst ExcerciseForm = styled(Form)``;\n\nconst FormGroup = styled.div`\n display: flex;\n flex-direction: column;\n margin-bottom: 20px;\n`;\n\nconst MultiLineGroup = styled.div`\n display: flex;\n flex-direction: column;\n padding-left: 20px;\n border-left: 1px solid rgba(123, 140, 168, 0.25);\n`;\n\nconst Input = styled(Field)`\n background: #ffffff;\n border: 1px solid #51c0cf;\n box-sizing: border-box;\n box-shadow: 0px 4px 4px rgba(197, 197, 197, 0.25);\n border-radius: 10px;\n padding: 10px 10px;\n margin-top: 5px;\n outline: none;\n font-size: 16px;\n max-height: 100%;\n margin-right: 20px;\n\n &:focus {\n resize: both;\n }\n`;\n\nconst Label = styled.label`\n font-size: 16px;\n font-weight: 600;\n color: #545454;\n margin-right: 20px;\n`;\n\nconst Error = styled.p`\n font-size: 16px;\n color: #afafaf;\n font-style: italic;\n`;\n\nconst Overlay = styled.div`\n background-color: rgba(60, 60, 60, 0.7);\n position: fixed;\n top: 0px;\n left: 0;\n width: 100vw;\n height: 100%;\n z-index: 999;\n display: flex;\n justify-content: center;\n align-items: center;\n\n @media (min-width: 980px) {\n top: 0;\n height: 100vh;\n width: 100vw;\n }\n`;\n\nconst OverlayCard = styled(Card)`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n max-height: 75%;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n box-sizing: border-box;\n padding: 30px;\n position: absolute;\n z-index: 999999;\n\n @media (min-width: 980px) {\n position: relative;\n top: 0;\n z-index: 9;\n }\n`;\n\nconst Times = styled(FaTimes)`\n color: #545454;\n position: absolute;\n right: 20px;\n top: 20px;\n cursor: pointer;\n`;\n\nconst Trash = styled(FaTrash)`\n color: #545454;\n cursor: pointer;\n`;\n\nconst Pencil = styled(FaPencilAlt)`\n color: #545454;\n margin-right: 20px;\n cursor: pointer;\n`;\n\nconst SmallButton = styled(Button)`\n margin-top: 5px;\n width: fit-content;\n`;\n\nconst SelectMediaButton = styled(Button)` \n display: inline-block;\n vertical-align: middle;\n height: 25px; \n padding: 3px 15px 10px 15px; \n font-size: 0.9em;\n text-align: center;\n margin-left: 10px;\n`;\n\nconst Title = styled(SmallTitle)`\n margin-top: 10px;\n margin-right: 40px;\n`;\n\nconst FileCard = styled(Card)`\n margin-bottom: 10px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n\nconst InfoIcon = styled(FaInfoCircle)` \n color: #51c0cf;\n font-size: 15px;\n margin-right: 10px;\n vertical-align: middle;\n margin-bottom: 5px;\n`;\n\nconst StepsIcon = styled(FaShoePrints)` \n color: #51c0cf;\n font-size: 15px;\n margin-right: 10px;\n vertical-align: middle;\n margin-bottom: 5px;\n`;\n\nconst CogIcon = styled(FaCog)` \n color: #51c0cf;\n font-size: 15px;\n margin-right: 10px;\n vertical-align: middle;\n margin-bottom: 5px;\n`;\n\nconst BullHornIcon = styled(FaBullhorn)` \n color: #51c0cf;\n font-size: 15px;\n margin-right: 10px;\n vertical-align: middle;\n margin-bottom: 5px;\n`;\n\nconst MultimediaIcon = styled(FaPhotoVideo)` \n color: #51c0cf;\n font-size: 15px;\n margin-right: 10px;\n vertical-align: middle;\n margin-bottom: 5px;\n`;\n\nconst ExerciseEditForm = observer((props) => {\n const { t, i18n } = useTranslation();\n const [showOverlay, setShowOverlay] = useState(false);\n const [showSecondOverlay, setShowSecondOverlay] = useState(false);\n const [showMediaOverlay, setShowMediaOverlay] = useState(false);\n const [questionTypeId, setQuestionTypeId] = useState(-1);\n const [questionId, setQuestionId] = useState(-1);\n const [stepId, setStepId] = useState(-1);\n const [mediaInputLabel, setMediaInputLabel] = useState(\"\");\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n const [tags, setTags] = useState(props.exercise.tags);\n const [formSchema, setFormShema] = useState(Yup.object().shape({}));\n const [loading, setLoading] = useState(false);\n const [redirect, setRedirect] = useState(false);\n\n\n const formikRef = useRef();\n\n const validationShape = {\n title: Yup.string()\n .max(20, t(\"exerciseForm.titleMaxChars\"))\n .required(t(\"exerciseForm.titleReqError\")),\n discipline: Yup.string().required(t(\"exerciseForm.disciplineReqError\")),\n subdiscipline: Yup.string().notRequired().nullable(),\n language: Yup.string().required(t(\"exerciseForm.languageReqError\")),\n description: Yup.string().notRequired(),\n is_private: Yup.bool().notRequired()\n };\n\n useEffect(() => adaptValidation(), []);\n\n useEffect(() => {\n //Focus on overlay\n if (showOverlay) {\n autoFocus(\n 13,\n props.exerciseType === \"stappenplan\" ? `steps[${stepId}].text` : `question_types[${questionTypeId}].name`\n );\n }\n }, [showOverlay]);\n\n useEffect(() => {\n //Focus on overlay\n if (showSecondOverlay) {\n autoFocus(13, `${getQuestionId()}.question`);\n }\n }, [showSecondOverlay]);\n\n const adaptValidation = () => {\n let newValidation = validationShape;\n let question_type = {};\n let question = {};\n switch (props.exercise.type) {\n case \"dagboek\":\n const field = Yup.object().shape({\n name: Yup.string().required(t(\"exerciseForm.fieldNameReqError\"))\n });\n question = Yup.object().shape({\n question: Yup.string().required(t(\"exerciseForm.vragenlijstQuestionReqError\")),\n answer_possibility: Yup.string().required(t(\"exerciseForm.vragenlijstAnswerPossibilityReqError\")),\n fields: Yup.array()\n .when(\"answer_possibility\", {\n is: (val) => val != \"open antwoord\",\n then: Yup.array()\n .of(Yup.array()\n .of(field)\n .min(1, t(\"exerciseForm.fieldNamesError\"))\n .required(t(\"exerciseForm.fieldNamesError\"))),\n otherwise: Yup.array().notRequired().nullable(true)\n })\n });\n question_type = Yup.object().shape({\n name: Yup.string().required(t(\"exerciseForm.vragenlijstQuestionTypeNameReqError\")),\n questions: Yup.array()\n .of(question)\n .min(1, t(\"exerciseForm.vragenlijstQuestionsError\"))\n .required(t(\"exerciseForm.vragenlijstQuestionsError\")),\n });\n newValidation.question_types = Yup.array()\n .of(question_type)\n .min(1, t(\"exerciseForm.vragenlijstQuestionTypeError\"))\n .required(t(\"exerciseForm.vragenlijstQuestionTypeError\"));\n break;\n case \"stappenplan\":\n const step = Yup.object().shape({\n text: Yup.string().required(t(\"exerciseForm.stepTextReqError\")),\n media_id: Yup.number().nullable(true),\n video_id: Yup.number().nullable(true),\n audio_id: Yup.number().nullable(true),\n });\n newValidation.steps = Yup.array()\n .of(step)\n .min(1, t(\"exerciseForm.stepsError\"))\n .required(t(\"exerciseForm.stepsError\"));\n newValidation.media_complete_id = Yup.number().nullable(true);\n newValidation.audio_complete_id = Yup.number().nullable(true);\n newValidation.video_complete_id = Yup.number().nullable(true);\n newValidation.goal = Yup.object().shape({\n media_id: Yup.number().nullable(true),\n video_id: Yup.number().nullable(true),\n });\n newValidation.preparation = Yup.object().nullable(true).shape({\n media_id: Yup.number().nullable(true),\n video_id: Yup.number().nullable(true),\n });\n break;\n case \"stappenplanValidatie\":\n const answer_possibility = Yup.object().shape({\n answer: Yup.string().required(t(\"exerciseForm.invulAnswerPossibilityReqError\"))\n });\n question = Yup.object().shape({\n question: Yup.string().required(t(\"exerciseForm.invulQuestionReqError\")),\n media_id: Yup.number().nullable(true),\n video_id: Yup.number().nullable(true),\n audio_id: Yup.number().nullable(true),\n cue_text: Yup.string().notRequired().nullable(true),\n cue_media_id: Yup.number().nullable(true),\n cue_video_id: Yup.number().nullable(true),\n cue_audio_id: Yup.number().nullable(true),\n type_of_answer: Yup.string().required(t(\"exerciseForm.typeOfAnswerReqError\")),\n correct_answer: Yup.string().required(t(\"exerciseForm.correctAnswerReqError\")),\n answer_possibilities: Yup.array()\n .when(\"type_of_answer\", {\n is: (val) => val === \"Meerkeuze\",\n then: Yup.array()\n .of(Yup.array()\n .of(answer_possibility)\n .min(1, t(\"exerciseForm.answerPossibilitiesError\"))\n .required(t(\"exerciseForm.answerPossibilitiesError\"))),\n otherwise: Yup.array().notRequired().nullable(true)\n })\n });\n question_type = Yup.object().shape({\n name: Yup.string().required(t(\"exerciseForm.invulQuestionTypeNameReqError\")),\n questions: Yup.array()\n .of(question)\n .min(1, t(\"exerciseForm.invulQuestionsError\"))\n .required(t(\"exerciseForm.invulQuestionsError\")),\n });\n newValidation.question_types = Yup.array()\n .of(question_type)\n .min(1, t(\"exerciseForm.invulQuestionTypeError\"))\n .required(t(\"exerciseForm.invulQuestionTypeError\"));\n newValidation.media_complete_id = Yup.number().nullable(true);\n newValidation.audio_complete_id = Yup.number().nullable(true);\n newValidation.video_complete_id = Yup.number().nullable(true);\n newValidation.goal = Yup.object().shape({\n media_id: Yup.number().nullable(true),\n video_id: Yup.number().nullable(true),\n });\n newValidation.preparation = Yup.object().shape({\n media_id: Yup.number().nullable(true),\n video_id: Yup.number().nullable(true),\n }).nullable(true).notRequired();\n newValidation.reward_system = Yup.string().required(t(\"exerciseForm.rewardSystemReqError\"));\n break;\n default:\n break;\n }\n setFormShema(Yup.object().shape(newValidation));\n };\n\n const handleSubmit = async (values) => {\n let fullValues = { ...values };\n\n setLoading(true);\n\n fullValues.tags = tags;\n fullValues.username_private = user?.email;\n\n if (props.exercise.type === \"dagboek\") {\n fullValues.question_types.forEach((questionType) => {\n questionType.questions.forEach((question) => {\n if (question.answer_possibility === \"schaal\") {\n question.scale_possibilities = question.fields[0].length;\n var values = question.fields[0].map(field => field.value)\n question.max_score = Math.max(...values);\n }\n });\n });\n }\n\n api.put('/exercise/' + props.exercise.id, fullValues).then((res) => {\n setLoading(false);\n setRedirect(true);\n })\n };\n\n const qaTypes = [\n ,\n ,\n ,\n ];\n const answerTypes = [\n ,\n ,\n ,\n ];\n const rewardSystems = [\n ,\n ,\n ,\n ];\n\n const handleShowOverlay = (values, id = null) => {\n var newTypeId = id != null ? id : values.question_types?.length ?? 0;\n var newStepId = id != null ? id : values.steps?.length ?? 0;\n setQuestionTypeId(newTypeId);\n setStepId(newStepId);\n setShowOverlay(true);\n };\n\n const handleShowSecondOverlay = (values, id = null) => {\n var newQuestionId = id != null ? id : values.question_types?.[questionTypeId]?.questions?.length ?? 0;\n setQuestionId(newQuestionId);\n setShowSecondOverlay(true);\n };\n\n const handleHideOverlay = () => {\n setShowOverlay(false);\n };\n\n const handleHideSecondOverlay = () => {\n setShowSecondOverlay(false);\n };\n\n const getQuestionId = () => `question_types[${questionTypeId}].questions[${questionId}]`;\n\n const autoFocus = (key, name) => {\n if (key === 13) {\n var len = document.getElementsByName(name).length;\n if (len > 0) {\n const element = document.getElementsByName(name)[len - 1];\n element.focus();\n }\n }\n };\n\n const showError = (touched, errors, name, wantTouched = true) => {\n if (typeof getIn(errors, name) !== \"string\") return null;\n return wantTouched\n ? getIn(touched, name) && getIn(errors, name) && {getIn(errors, name)}\n : getIn(errors, name) && {getIn(errors, name)};\n };\n\n const showMediaSelOverlay = (inputLabel) => {\n setMediaInputLabel(inputLabel);\n setShowMediaOverlay(true);\n };\n\n const SetMediaInput = (media) => {\n formikRef.current.setFieldValue(mediaInputLabel, media.id);\n formikRef.current.setFieldValue(mediaInputLabel + \"Label\", `${media.id} - ${media.title}`);\n };\n\n const MediaSwitch = (fProps, switchLabel, valuePath) => {\n const switchName = valuePath;\n const assetName = valuePath;\n return (\n <>\n ! val && fProps.setFieldValue(assetName, null)}\n >\n

    \n showMediaSelOverlay(assetName)}>\n {\" \"}\n {t(\"exerciseForm.selectMedia\")}{\" \"}\n \n \n
    \n {showError(fProps.touched, fProps.errors, assetName, false)}\n {getIn(fProps.values, assetName) && {getIn(fProps.values, assetName)}}\n\n \n );\n };\n\n const formLayout = ({ ...fProps }) => {\n return (\n \n {/*GENERAL HEADER FORM SECTION*/}\n \n \n autoFocus(e.keyCode, \"discipline\")}\n type=\"text\"\n id=\"title\"\n name=\"title\"\n placeholder={t(\"exerciseForm.titleInstructions\")}\n />\n {showError(fProps.touched, fProps.errors, \"title\")}\n \n \n \n autoFocus(e.keyCode, \"subdiscipline\")}\n >\n \n \n \n {showError(fProps.touched, fProps.errors, \"discipline\")}\n \n \n \n
    \n autoFocus(e.keyCode, \"language\")}\n >\n \n \n \n
    \n \n \n autoFocus(e.keyCode, props.exercise.type === \"dagboek\" ? \"description\" : \"goal.text\")}\n >\n \n \n {showError(fProps.touched, fProps.errors, \"language\")}\n \n\n {/* VRAGENLIJST UNIQUE HEADER FORM SECTION */}\n {props.exercise.type === \"dagboek\" && (\n <>\n \n \n {\n fProps.values.description = editor.getData();\n }}\n placeholder={t(\"exerciseForm.descriptionInstructions\")}\n config={{\n placeholder: t('fileForm.inputDescription'),\n toolbar: ['heading', '|', 'bold', 'italic', 'blockQuote', '|', 'numberedList', 'bulletedList', 'insertTable', 'tableColumn', 'tableRow', 'mergeTableCells', '|', 'undo', 'redo'],\n cloudServices: {tokenUrl : process.env.REACT_APP_COBRAND_API + \"/editor_token/\" + user.public_id, uploadUrl : \"https://55482.cke-cs.com/easyimage/upload/\"}\n }}\n onError={ ( { willEditorRestart } ) => {\n // If the editor is restarted, the toolbar element will be created once again.\n // The `onReady` callback will be called again and the new toolbar will be added.\n // This is why you need to remove the older toolbar.\n if ( willEditorRestart ) {\n this.editor.ui.view.toolbar.element.remove();\n }\n } }\n />\n {showError(fProps.touched, fProps.errors, \"description\")}\n \n \n )}\n\n {/* INVUL + UITVOER CROSSOVER HEADER FORM SECTION */}\n {(props.exercise.type === \"stappenplan\" || props.exercise.type === \"stappenplanValidatie\") && (\n <>\n \n \n
    \n \n {\n fProps.values.goal.text = editor.getData();\n }}\n config={{\n placeholder: t(\"exerciseForm.goalInstructions\"),\n toolbar: ['heading', '|', 'bold', 'italic', 'blockQuote', '|', 'numberedList', 'bulletedList', 'insertTable', 'tableColumn', 'tableRow', 'mergeTableCells', '|', 'undo', 'redo'],\n cloudServices: {tokenUrl : process.env.REACT_APP_COBRAND_API + \"/editor_token/\" + user.public_id, uploadUrl : \"https://55482.cke-cs.com/easyimage/upload/\"}\n }}\n onError={ ( { willEditorRestart } ) => {\n // If the editor is restarted, the toolbar element will be created once again.\n // The `onReady` callback will be called again and the new toolbar will be added.\n // This is why you need to remove the older toolbar.\n if ( willEditorRestart ) {\n this.editor.ui.view.toolbar.element.remove();\n }\n } }\n />\n {MediaSwitch(fProps, \"exerciseForm.mediaCheck\", \"goal.media_id\")}\n {MediaSwitch(fProps, \"exerciseForm.videoCheck\", \"goal.video_id\")}\n \n
    \n \n \n
    \n \n {\n fProps.values.preparation.text = editor.getData();\n }}\n config={{\n placeholder: t(\"exerciseForm.preparationInstructions\"),\n toolbar: ['heading', '|', 'bold', 'italic', 'blockQuote', '|', 'numberedList', 'bulletedList', 'insertTable', 'tableColumn', 'tableRow', 'mergeTableCells', '|', 'undo', 'redo'],\n cloudServices: {tokenUrl : process.env.REACT_APP_COBRAND_API + \"/editor_token/\" + user.public_id, uploadUrl : \"https://55482.cke-cs.com/easyimage/upload/\"}\n }}\n onError={ ( { willEditorRestart } ) => {\n // If the editor is restarted, the toolbar element will be created once again.\n // The `onReady` callback will be called again and the new toolbar will be added.\n // This is why you need to remove the older toolbar.\n if ( willEditorRestart ) {\n this.editor.ui.view.toolbar.element.remove();\n }\n } }\n />\n {MediaSwitch(fProps, \"exerciseForm.mediaCheck\", \"preparation.media_id\")}\n {MediaSwitch(fProps, \"exerciseForm.videoCheck\", \"preparation.video_id\")}\n \n
    \n \n \n
    \n \n \n \n {MediaSwitch(fProps, \"exerciseForm.mediaCompleteCheck\", \"media_complete_id\")}\n \n \n \n {MediaSwitch(fProps, \"exerciseForm.audioCompleteCheck\", \"audio_complete_id\")}\n \n \n \n {MediaSwitch(fProps, \"exerciseForm.videoCompleteCheck\", \"video_complete_id\")}\n \n \n
    \n \n )}\n\n {/* UITVOER UNIQUE MIDDLE FORM SECTION */}\n {props.exercise.type === \"stappenplan\" && (\n \n \n
    \n \n (\n
    \n {fProps.values.steps?.map((step, index) => (\n \n \n
    \n handleShowOverlay(fProps.values, index)} />\n arrayHelpers.remove(index)} />\n
    \n
    \n ))}\n handleShowOverlay(fProps.values)} type=\"button\">\n {t(\"exerciseForm.addNewStep\")}\n \n {showError(fProps.touched, fProps.errors, \"steps\", false)}\n
    \n )}\n />\n
    \n
    \n )}\n\n {/* INVUL + VRAGENLIJST CROSSOVER MIDDLE FORM SECTION */}\n {(props.exercise.type === \"stappenplanValidatie\" || props.exercise.type === \"dagboek\") && (\n \n \n
    \n \n (\n
    \n {fProps.values.question_types?.map((questionType, index) => (\n \n

    {questionType.name}

    \n
    \n handleShowOverlay(fProps.values, index)} />\n arrayHelpers.remove(index)} />\n
    \n
    \n ))}\n {showError(fProps.touched, fProps.errors, \"question_type\", false)}\n handleShowOverlay(fProps.values)} type=\"button\">\n {t(props.exercise.type === \"stappenplanValidatie\" ? \"exerciseForm.addNewStep\" : \"exerciseForm.addNewExerciseType\")}\n \n
    \n )}\n />\n
    \n
    \n )}\n\n {/* GENERAL MIDDLE FORM SECTION */}\n {showOverlay && (\n \n \n \n \n {props.exercise.type === \"dagboek\" ? t(\"exerciseForm.editExerciseType\") : t(\"exerciseForm.editStep\")}\n \n {props.exercise.type === \"stappenplan\" ? (\n <>\n \n \n \n {showError(fProps.touched, fProps.errors, `steps[${stepId}].text`, false)}\n \n {MediaSwitch(fProps, \"exerciseForm.mediaCheck\", `steps[${stepId}].media_id`)}\n {MediaSwitch(fProps, \"exerciseForm.audioCheck\", `steps[${stepId}].audio_id`)}\n {MediaSwitch(fProps, \"exerciseForm.videoCheck\", `steps[${stepId}].video_id`)}\n \n {t(\"exerciseForm.addStep\")}\n \n \n ) : (\n <>\n \n \n \n {showError(fProps.touched, fProps.errors, `question_types[${questionTypeId}].name`, false)}\n \n \n (\n
    \n {fProps.values.question_types?.[questionTypeId]?.questions?.map((question, index) => (\n \n

    {question.question}

    \n
    \n handleShowSecondOverlay(fProps.values, index)} />\n arrayHelpers.remove(index)} />\n
    \n
    \n ))}\n {showError(fProps.touched, fProps.errors, `question_types[${questionTypeId}].questions`, false)}\n handleShowSecondOverlay(fProps.values)}>\n {t(\"exerciseForm.addExercise.\" + props.exercise.type)}\n \n
    \n )}\n />\n \n {t(\n props.exercise.type === \"stappenplanValidatie\" ? \"exerciseForm.addStep\" : \"exerciseForm.addExerciseType\"\n )}\n \n \n )}\n
    \n
    \n )}\n\n {/*QUESTION CREATION OVERLAY SUBFORM SECTION*/}\n {showSecondOverlay && (\n \n \n \n {props.exercise.type === \"stappenplanValidatie\" ? (\n \n \n
    \n \n autoFocus(e.keyCode, `${getQuestionId()}.question`)}\n />\n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.question`, false)}\n {MediaSwitch(fProps, \"exerciseForm.mediaCheck\", `${getQuestionId()}.media_id`)}\n {MediaSwitch(fProps, \"exerciseForm.audioCheck\", `${getQuestionId()}.audio_id`)}\n {MediaSwitch(fProps, \"exerciseForm.videoCheck\", `${getQuestionId()}.video_id`)}\n \n \n autoFocus(e.keyCode, `${getQuestionId()}.type_of_answer`)}\n />\n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.cue_text`)}\n {MediaSwitch(fProps, \"exerciseForm.mediaCheck\", `${getQuestionId()}.cue_media_id`)}\n {MediaSwitch(fProps, \"exerciseForm.audioCheck\", `${getQuestionId()}.cue_audio_id`)}\n {MediaSwitch(fProps, \"exerciseForm.videoCheck\", `${getQuestionId()}.cue_video_id`)}\n \n
    \n \n
    \n \n autoFocus(e.keyCode, `${getQuestionId()}.correct_answer`)}\n >\n {answerTypes.map((answerType) => {\n return answerType;\n })}\n \n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.type_of_answer`, false)}\n\n {getIn(fProps.values, `${getQuestionId()}.type_of_answer`) !== \"Textbox\" && (\n <>\n \n (\n
    \n {getIn(fProps.values, `${getQuestionId()}.answer_possibilities`)?.[0]?.map((answP, index) => (\n \n \n \n
    \n arrayHelpers.remove(index)} />\n
    \n
    \n )\n )}\n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.answer_possibilities[0]`, false)}\n arrayHelpers.push(\"\")}>\n {t(\"exerciseForm.addPossibleAnswer\")}\n \n
    \n )}\n />\n \n )}\n
    \n
    \n \n
    \n \n \n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.correct_answer`, false)}\n\n \n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.is_capital_sensitive`)}\n\n \n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.is_punctuation_sensitive`)}\n \n
    \n ) : (\n <>\n \n \n \n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.question`, false)}\n \n \n \n \n {qaTypes.map((qaType) => {\n return qaType;\n })}\n \n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.answer_possibility`, false)}\n \n {getIn(fProps.values, `${getQuestionId()}.answer_possibility`) !== \"open antwoord\" && (\n <>\n \n (\n
    \n {getIn(fProps.values, `${getQuestionId()}.fields`)?.[0]?.map((fieldname, index) => (\n \n \n \n
    \n arrayHelpers.remove(index)} />\n
    \n
    \n ))}\n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.answer_possibility`, false)}\n arrayHelpers.push(\"\")}>\n {t(\"exerciseForm.addFieldName\")}\n \n
    \n )}\n />\n
    \n \n \n (\n
    \n {getIn(fProps.values, `${getQuestionId()}.fields`)?.[0]?.map((fieldvalue, index) => (\n \n \n \n
    \n arrayHelpers.remove(index)} />\n
    \n
    \n ))}\n {showError(fProps.touched, fProps.errors, `${getQuestionId()}.fields`, false)}\n
    \n )}\n />\n
    \n \n )}\n \n )}\n {t(\"exerciseForm.addQuestion.\" + props.exercise.type)}\n
    \n
    \n )}\n {/* GENERAL FOOTER FORM SECTION */}\n \n \n
    \n \n {(props.exercise.type === \"dagboek\" || props.exercise.type === \"stappenplanValidatie\") && (\n <>\n {props.exercise.type === \"stappenplanValidatie\" && (\n <>\n \n \n {rewardSystems.map((rewardSystem) => {\n return rewardSystem;\n })}\n \n {showError(fProps.touched, fProps.errors, `reward_system`)}\n \n )}\n \n \n \n )}\n \n \n \n \n \n
    \n \n \n
    \n \n \n \n
    \n\n {showMediaOverlay &&\n setShowMediaOverlay(!showMediaOverlay)} />\n }\n\n \n \n {redirect && }\n {/* To quickly debug the form uncomment the line underneath */}\n {/* */}\n
    \n );\n };\n\n return (\n <>\n {loading ? :\n \n }\n \n )\n\n});\n\nexport default ExerciseEditForm","import React, { useState, useEffect, useContext } from \"react\";\nimport { observer } from \"mobx-react\";\nimport { useTranslation } from \"react-i18next\";\nimport { api } from \"../../api\";\nimport LoadSpinner from \"../../components/loadspinner\";\nimport registrationStore from \"../../components/registrationStore\";\nimport TherapistOverlay from \"../../components/overlays/therapistOverlay\";\nimport { PageAnimation } from \"../../components/styled/animation\";\nimport { PageTitle } from \"../../components/styled/typography\";\nimport PageWrapper from \"../../components/styled/pageWrapper\";\nimport Global from \"../../components/styled/global\";\nimport ExerciseEditForm from \"../../components/exerciseForm/exerciseEditForm\";\n\n\nconst EditExercise = observer((props) => {\n const { t, i18n } = useTranslation();\n const { id } = props.match.params;\n const [loading, setLoading] = useState(true);\n const [exercise, setExercise] = useState({});\n const store = useContext(registrationStore);\n const user = JSON.parse(store.user);\n\n useEffect(() => {\n api.get(\"/exercise/\" + id).then((response) => {\n setExercise(response.data.output);\n setLoading(false);\n });\n }, []);\n\n if (loading) {\n return ;\n } else {\n return (\n \n \n \n \n {t(\"editExercise.config\")}\n \n \n \n \n )\n }\n});\n\nexport default EditExercise;","import React from \"react\";\nimport PageWrapper from \"../components/styled/pageWrapper\";\nimport Global from \"../components/styled/global\";\nimport TherapistOverlay from \"../components/overlays/therapistOverlay\";\nimport styled from \"styled-components\";\n\nconst Container = styled.div`\n position: relative;\n overflow: hidden;\n margin-top: 75px;\n height: calc(100vh - 100px);\n @media (min-width: 980px) {\n width: calc(100vw - 250px);\n }\n`;\n\nconst V2Frame = () => {\n let language = window.localStorage.getItem(\"language\") === null ? \"nl\" : window.localStorage.getItem(\"language\");\n let userId = JSON.parse(window.localStorage.getItem(\"user\")).public_id;\n let token = window.localStorage.getItem(\"token\").toString();\n\n const hideLoading = () => (document.getElementById(\"loading\").style.display = \"none\");\n\n return (\n \n \n \n \n {/* eslint-disable-next-line jsx-a11y/iframe-has-title */}\n
    Loading...
    \n {/* eslint-disable-next-line jsx-a11y/iframe-has-title */}\n \n
    \n
    \n
    \n );\n};\n\nexport default V2Frame;\n","import React, { useContext, Suspense, useEffect } from \"react\";\nimport styled, { keyframes } from \"styled-components\";\nimport { BrowserRouter as Router, Switch, Route, Redirect } from \"react-router-dom\";\nimport login from \"./pages/login\";\nimport login2 from \"./pages/login2\";\nimport checkout from \"./pages/checkout\";\nimport dashboard from \"./pages/patient/dashboard\";\nimport Inbox from \"./pages/patient/inbox\";\nimport materiaalDetail from \"./pages/patient/materiaalDetail\";\nimport materiaalRaadplegen from \"./pages/patient/materiaalRaadplegen\";\nimport mijnAccount from \"./pages/patient/mijnAccount\";\nimport mijnPlan from \"./pages/patient/mijnPlan\";\nimport opdrachten from \"./pages/patient/opdrachten\";\nimport resultatenDetail from \"./pages/patient/resultatenDetail\";\nimport taakDetail from \"./pages/patient/taakDetail\";\nimport ResultForm from \"./pages/patient/resultForm\";\nimport Therapeuten from \"./pages/patient/therapeuten\";\nimport DashboardT from \"./pages/therapeut/dashboard\";\nimport DocumentAanmaken from \"./pages/therapeut/documentAanmaken\";\nimport DocumentAanpassen from \"./pages/therapeut/documentAanpassen\";\nimport FileAanmaken from \"./pages/therapeut/fileAanmaken\";\nimport FileAanpassen from \"./pages/therapeut/fileAanpassen\";\nimport inboxT from \"./pages/therapeut/inbox\";\nimport LogboekDetail from \"./pages/therapeut/logboekDetail\";\nimport MateriaalAanmaken from \"./pages/therapeut/materiaalAanmaken\";\nimport MateriaalDetailT from \"./pages/therapeut/materiaalDetail\";\nimport MateriaalRaadplegenT from \"./pages/therapeut/materiaalRaadplegen\";\nimport MijnAccount from \"./pages/therapeut/mijnAccount\";\nimport MijnPlan from \"./pages/therapeut/mijnPlan\";\nimport OpdrachtAanmaken from \"./pages/therapeut/opdrachtAanmaken\";\nimport opdrachtAanpassen from \"./pages/therapeut/opdrachtAanpassen\";\nimport patientDetail from \"./pages/therapeut/patientDetail\";\nimport patientResultaat from \"./pages/therapeut/patientResultaat\";\nimport patientTaak from \"./pages/therapeut/patientTaak\";\nimport Therapie from \"./pages/therapeut/therapie\";\nimport HelpdeskT from \"./pages/therapeut/helpdesk\";\nimport HelpdeskP from \"./pages/patient/helpdesk\";\nimport taakDetailT from \"./pages/therapeut/taakDetail\";\nimport { observer } from \"mobx-react-lite\";\nimport RegistrationStore from \"./components/registrationStore\";\nimport VideoCallPage from \"./communication-module/components/containers/videoCallPage\";\nimport ChatPage from \"./communication-module/components/containers/chatPage\";\nimport ActiveCallNotification from \"./communication-module/components/containers/activeCallNotification\";\nimport Initialize from \"./communication-module/components/containers/initialize\";\nimport resetPassword from \"./pages/resetPassword\";\nimport { H1, P } from \"./components/styled/typography\";\nimport ErrorHandler from \"./components/errorHandler\";\nimport oefeningAanvragen from \"./pages/therapeut/oefeningAanvragen\";\nimport Admin from \"./pages/admin/admin\";\nimport \"./i18n\";\nimport BackgroundUpload from \"./components/backgroundUpload\";\nimport Register from \"./pages/registration/register\";\nimport OnboardingFlow from \"./components/onboarding/onboardingFlow\";\nimport { DndProvider } from \"react-dnd\";\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\nimport MediaDetail from \"./pages/therapeut/mediaDetail\";\nimport LanguageStore from \"./components/stores/languageStore\";\nimport DisciplineStore from \"./components/stores/disciplineStore\";\nimport { api } from \"./api\";\nimport ChatNotification from \"./communication-module/components/containers/chatNotification\";\nimport MediaDetailP from \"./pages/patient/mediaDetail\";\nimport EditExercise from \"./pages/therapeut/editExercise\";\nimport V2Frame from \"./pages/v2\";\nimport { reactPlugin, isRootAppInsightsEnabled } from \"./insights\";\nimport { AppInsightsContext } from \"@microsoft/applicationinsights-react-js\";\n\nconst fadein = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`;\n\nconst Wrapper = styled.div`\n animation: ${fadein} 1s;\n`;\n\nconst Title = styled(H1)`\n text-align: center;\n margin: 0 20px;\n font-size: 25px;\n`;\n\nconst SmallText = styled(P)`\n text-align: center;\n margin: 20px 20px;\n`;\n\nconst Overlay = styled.div`\n display: none;\n\n /*@media (max-width: 980px){\n z-index: 999;\n background-color: white;\n position: fixed;\n top: 0;\n bottom: 0px;\n height: 100vh;\n width: 100vw;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center; \n }*/\n`;\n\nconst TherapistRoute = ({ component: Component, ...rest }) => {\n const store = useContext(RegistrationStore);\n store.checkAccountIsExpired();\n var user;\n store.user === null ? (user = {}) : (user = JSON.parse(store.user));\n return (\n \n user.therapist ? (\n \n ) : user.therapist === false ? (\n \n ) : (\n \n )\n }\n />\n );\n};\n\nconst PatientRoute = ({ component: Component, ...rest }) => {\n const store = useContext(RegistrationStore);\n store.checkAccountIsExpired();\n var user;\n store.user === null ? (user = {}) : (user = JSON.parse(store.user));\n return (\n \n user.therapist === false ? (\n \n ) : user.therapist === true ? (\n \n ) : (\n \n )\n }\n />\n );\n};\n\nconst AdminRoute = ({ component: Component, ...rest }) => {\n const store = useContext(RegistrationStore);\n var user;\n store.user === null ? (user = {}) : (user = JSON.parse(store.user));\n return (\n user.admin ? (\n \n ) : (\n \n )\n }\n />\n );\n};\n\nconst getLanguages = (store) => {\n // Session caching: will trigger reload when refreshed\n // TODO: Make this use local cache?\n if(!store.initialized) {\n api.get('/languages').then((response) => {\n store.setLanguages(response.data);\n store.setInitialized(true);\n })\n }\n}\n\nconst getDisciplines = (store) => {\n // Session caching: will trigger reload when refreshed\n // TODO: Make this use local cache?\n if(!store.initialized) {\n api.get('/disciplines').then((response) => {\n store.setDisciplines(response.data);\n store.setInitialized(true);\n })\n }\n}\n\nconst App = observer(() => {\n const registrationStore = useContext(RegistrationStore);\n const languageStore = useContext(LanguageStore);\n const disciplineStore = useContext(DisciplineStore);\n\n const isAppInsightsEnabeld = isRootAppInsightsEnabled(true);\n\n //Initialize the language and discipline stores\n useEffect(() => {\n getLanguages(languageStore);\n getDisciplines(disciplineStore);\n }, [registrationStore.token]);\n\n const root = (childeren) => (\n \n \n \n {childeren}\n \n \n \n );\n\n const appInsightsContextProvidor = (reactPlugin, childeren) => (\n {childeren}\n );\n\n const childeren = (\n <>\n \n {registrationStore.user && }\n {registrationStore.user && }\n {registrationStore.user && }\n \n } />\n \n \n \n \n \n \n\n \n\n {/* NEW REGISTRATION ROUTES */}\n \n\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {registrationStore.user && JSON.parse(registrationStore.user).therapist && }\n \n \n \n Deze applicatie is momenteel nog niet beschikbaar op kleine schermen.\n \n \n );\n\n if (isAppInsightsEnabeld && isAppInsightsEnabeld === true) {\n return root(appInsightsContextProvidor(reactPlugin, childeren));\n } else {\n return root(childeren);\n }\n});\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\nimport * as Sentry from '@sentry/react';\n\nconst isProduction = process.env.NODE_ENV === 'production';\n\nif (isProduction){\n Sentry.init({dsn: \"https://19e310354a754945b7db7984ef39c042@o382844.ingest.sentry.io/5320361\"});\n}\n\nReactDOM.render(, document.getElementById('root'));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","module.exports = __webpack_public_path__ + \"static/media/patient-icon.d7fd9e0b.png\";"],"sourceRoot":""}