{"version":3,"sources":["app/pages/home/admin/Faxes.js","app/pages/home/admin/GatherBillable.js","app/pages/home/configuration/AdminReporting.js","_metronic/_assets/js/header.js","_metronic/_assets/js/scrolltop.js","_metronic/_assets/js/util.js","_metronic/ducks/i18n.js","app/router/RouterHelpers.js","_metronic/utils/utils.js","app/store/ducks/auth.duck.js","_metronic/layout/LayoutConfig.js","_metronic/layout/MenuConfig.js","_metronic/ducks/builder.js","_metronic/layout/LayoutContext.js","_metronic/layout/LayoutInitializer.js","_metronic/i18n/I18nProvider.js","_metronic/materialUIThemeProvider/ThemeProvider.js","_metronic/index.js","app/store/ducks/registration.duck.js","app/store/rootDuck.js","app/store/store.js","app/partials/content/Portlet.js","app/widgets/TopPsychologists.js","app/widgets/QuickStat.js","app/widgets/SalesBarChart.js","app/widgets/CapacityBarChart.js","app/widgets/LatestNotes.js","app/components/StatisticsProviderDay.js","app/components/StatisticsProvider.js","app/widgets/BookingStatistics.js","app/widgets/ClientStatistics.js","app/pages/home/Dashboard.js","app/pages/home/admin/InterestedPsychologists.js","app/components/scheduler/data.js","app/components/scheduler/editors.js","app/components/AddressAutoComplete.js","app/components/Notes.js","app/components/Files.js","app/components/BookingBillingList.js","app/components/scheduler/custom-form-editor.js","app/components/scheduler/custom-dialog.js","app/components/scheduler/custom-form.js","app/components/AvailabilityNew.js","app/components/ReferralsView.js","app/components/Appointments.js","app/components/ToDos.js","app/components/BookingsList.js","app/components/APIKeyForm.js","app/pages/home/admin/RegisteredPsychologists.js","app/pages/home/admin/Referrers.js","app/components/ReferralMaintenance.js","app/components/Tags.js","app/pages/home/admin/Clients.js","app/pages/home/admin/ClientInvites.js","app/pages/home/admin/MedicalPractitioners.js","app/pages/home/admin/MedicalPractices.js","app/pages/home/admin/SearchClientData.js","app/pages/home/admin/SearchBookingData.js","app/components/RenderExpandableCell.js","app/pages/home/admin/Notifications.js","app/pages/home/admin/VerifyXero.js","app/pages/home/admin/VerifyNDISXero.js","app/pages/home/admin/Invoices.js","app/pages/home/admin/InvoiceContracts.js","app/pages/home/admin/InvoiceNthQLDPHN.js","app/pages/home/admin/InvoiceNDIS.js","app/pages/home/admin/InvoiceLog.js","app/pages/home/admin/GatherBillableAll.js","app/pages/home/admin/GatherBillableContracts.js","app/pages/home/admin/GatherBillableNthQLDPHN.js","app/pages/home/admin/GatherBillableNDIS.js","app/pages/home/admin/GatherBillableContractsProvider.js","app/pages/home/admin/GatherBillableNDISProvider.js","app/components/MFAForm.js","app/pages/home/admin/ProfileAdmin.js","app/pages/home/admin/PaymentNDIS.js","app/pages/home/admin/PaymentContracts.js","app/pages/home/configuration/AdminUsers.js","app/components/useClickOutside.js","app/components/PopoverPicker.js","app/pages/home/configuration/MetaDataConfig.js","app/pages/home/admin/ManageForms.js","app/pages/home/admin/FormQuestions.js","app/pages/home/admin/FormConfigAdmin.js","app/pages/home/admin/Contracts.js","app/pages/home/configuration/Programs.js","app/pages/home/configuration/Surveys.js","app/components/NthQLDPHNDetail.js","app/pages/home/configuration/NthQLDPHNStatistics.js","app/pages/home/configuration/ProviderStatistics.js","app/pages/home/configuration/Opportunity.js","app/pages/home/HomePageAdmin.js","app/components/UpdatePassword.js","app/components/DashStyle/ToggleButton.js","app/partials/content/PortletProvider.js","app/widgets/QuickStatProvider.js","app/components/DashStyle/TileGrid.js","app/components/DashStyle/InterestsPanels.js","app/components/BookingApproval.js","app/pages/home/DashboardPsychologist2.js","app/pages/home/admin/ClientsPsychologist.js","app/pages/home/admin/ReferralsPsychologist.js","app/components/Availability.js","app/pages/home/admin/AvailabilityPsychologist.js","app/pages/home/admin/BookingsPsychologist.js","app/components/InvoiceDetail.js","app/pages/home/admin/InvoicesPsychologist.js","app/pages/home/admin/MedipassCodes.js","app/components/BookingStatusDropDownCell.js","app/components/BookingServiceDropDownCell.js","app/components/BookingSubPaymentTypeDropDownCell.js","app/pages/home/admin/PlatformInvoicesPsychologist.js","app/components/ProviderProgramBio.js","app/pages/home/admin/ProfilePsychologist.js","app/pages/home/admin/ProviderSecurity.js","app/pages/home/admin/FilesPsychologist.js","app/pages/home/admin/FormConfig.js","app/pages/home/HomePagePsychologist.js","app/widgets/ClientActions.js","app/pages/home/DashboardClient.js","app/pages/home/admin/ProfileClient.js","app/pages/home/admin/BookingsClient.js","app/pages/home/admin/FilesClient.js","app/pages/home/admin/SearchClient.js","app/pages/home/HomePageClient.js","app/pages/home/DashboardReferrer.js","app/pages/home/admin/ProfileReferrer.js","app/pages/home/HomePageReferrer.js","app/pages/errors/ErrorPage1.js","app/pages/errors/ErrorPage2.js","app/pages/errors/ErrorPage3.js","app/pages/errors/ErrorPage4.js","app/pages/errors/ErrorPage5.js","app/pages/errors/ErrorPage6.js","app/pages/errors/ErrorsPage.js","app/pages/auth/Logout.js","_metronic/layout/header/QuickPanelToggle.js","_metronic/layout/header/Topbar.js","_metronic/layout/header/HMenu/HMenuItemInner.js","_metronic/layout/header/HMenu/HMenuColumn.js","_metronic/layout/header/HMenu/HMenuItem.js","_metronic/layout/header/HMenu/HMenu.js","app/partials/layout/AnimateLoading.js","_metronic/layout/header/RHCHeader.js","_metronic/layout/assets/layout-svg-icons/File-plus.svg","_metronic/layout/header/Header.js","_metronic/layout/assets/layout-svg-icons/SortNum1.svg","_metronic/layout/sub-header/components/QuickActions.js","_metronic/layout/assets/layout-svg-icons/Angle-double-left.svg","_metronic/layout/sub-header/SubHeader.js","_metronic/layout/header/HeaderMobile.js","_metronic/layout/assets/layout-svg-icons/Angle-double-right.svg","_metronic/layout/brand/Brand.js","_metronic/layout/aside/MenuSection.js","_metronic/layout/aside/MenuItemSeparator.js","_metronic/layout/aside/MenuItemText.js","_metronic/layout/aside/MenuSubmenu.js","_metronic/layout/aside/MenuItem.js","_metronic/layout/aside/MenuList.js","_metronic/layout/aside/Menu.js","_metronic/layout/aside/AsideLeft.js","_metronic/layout/footer/Footer.js","app/partials/layout/ScrollTop.js","_metronic/layout/HTMLClassService.js","app/partials/layout/QuickPanel.js","_metronic/layout/KtContent.js","_metronic/layout/Layout.js","app/crud/auth.crud.js","app/pages/auth/Login.js","app/pages/auth/ForgotPassword.js","app/pages/auth/BackupCode.js","app/pages/auth/Totp.js","app/pages/auth/PasswordUpdate.js","app/pages/auth/loginEmail.js","app/pages/auth/AuthPage.js","app/pages/registration/ClientRegistrationPage.js","app/pages/registration/PsychologistRegistrationPage.js","app/pages/registration/PsychologistInvitationPage.js","app/pages/registration/ReferrerInvitationPage.js","app/pages/auth/SurveyAuth.js","app/pages/auth/EmailAuth.js","app/router/Routes.js","App.js","index.js","app/components/GatherBillableDetail.js","app/pages/home/admin/FormDataEntry.js","app/store/ducks/reference.duck.js","_metronic/_assets/js/offcanvas.js","app/components/Cache.js","app/components/SendLetter.js","_metronic/_assets/js/menu.js","_metronic/_assets/js/toggle.js","app/store/ducks/admin.duck.js","app/store/ducks/forms.duck.js"],"names":["pdfjs","GlobalWorkerOptions","workerSrc","pdfjsWorker","useStyles","makeStyles","noBorder","border","Faxes","useState","showFax","setShowFax","showGPLetter","setShowGPLetter","inviteError","setInviteError","exportPDFStatus","setExportPDFStatus","prev","setPrev","next","setNext","userTZ","useSelector","state","auth","filters","admin","Filters","initSource","useCallback","id","firstName","surname","phone","email","organisationname","description","status","faxNumber","receivedOn","currentFax","setcurrentFax","currentLoadingFax","setcurrentLoadingFax","currentinviteid","setcurrentinviteid","currentFirstName","setcurrentFirstName","currentPreferredName","setcurrentPreferredName","currentSurname","setcurrentSurname","currentEmail","setcurrentEmail","currentMobile","setcurrentMobile","currentMessage","setcurrentMessage","currentAreasOfInterest","setcurrentAreasOfInterest","currentPsychologist","setcurrentPsychologist","currentTimeZone","setcurrentTimeZone","currentSlot","setcurrentSlot","currentAppointmentType","setcurrentAppointmentType","currentProviderType","setcurrentProviderType","dispatch","useDispatch","useEffect","Admin","fetchFaxes","fetchRegistered","Reference","fetchAreasOfInterest","fetchTimeZone","fetchClientInvites","fetchMatching","providertype","invite","availabilitytype","faxes","filteredFaxes","filter","fax","faxesStatus","clientname","toLowerCase","search","faxTerm","flagClean","length","searchFaxes","invites","ClientInvites","psychologists","Matching","MatchingPsychologist","matching","MatchingFinancial","MatchingGP","faxPDF","FaxPDF","areasOfInterest","reference","AreasOfInterest","PsychologyAreasOfInterest","area","FinancialAreasOfInterest","timeZone","TimeZone","matchingAvailability","MatchingAvailability","navFax","index","loadFax","thisFax","indexOf","faxBlobLength","fetchFaxPDF","tempInvite","find","v","clientregistrationid","loadInvite","initInvite","downloadExport","exportDocName","file","Blob","Buffer","from","type","saveAs","firstname","preferredname","message","clientAreasOfInterest","psychologistid","undefined","appointmenttype","thisInvite","aoi","issue","includes","timezone","bookingdate","row","handleFaxClose","handleGPLetterClose","numPages","setNumPages","onDocumentLoadSuccess","columns","field","headerName","hide","width","renderCell","params","onClick","className","value","cellClassName","flag","variant","name","defaultValue","onBlur","event","putFaxFlag","target","setFlag","InputProps","classes","notchedOutline","input","multiline","maxRows","style","onFocus","select","putFaxClientName","setClientName","valueFormatter","format","Date","sortable","size","sendClientInvite","color","fontWeight","background","marginRight","container","justifyContent","padding","item","marginTop","marginLeft","Prepend","Text","fontSize","Control","onChange","setFilters","filterName","filterValue","autoComplete","maxWidth","height","backgroundColor","Append","as","rows","pageSize","rowsPerPageOptions","checkboxSelection","sortModel","sort","show","onHide","dialogClassName","Header","closeButton","Title","textAlign","Body","spacing","md","overflowY","onLoadSuccess","Array","el","key","pageNumber","severity","marginBottom","Group","Label","multiple","options","getOptionLabel","option","newValue","fullWidth","display","wrap","renderInput","margin","inputProps","oneline","fetchMatchingAvailability","psychologistID","availabilityType","handleMatchingAutocompleteChange","displayEmpty","map","systemName","label","aria-label","minWidth","fromDate","Footer","action","trim","test","payload","faxid","join","invitetoken","replace","c","r","Math","random","toString","source","postClientInvite","putClientInvite","saveInvite","form","faxID","closeModal","borderRadius","position","transition","Flip","autoClose","hideProgressBar","newestOnTop","closeOnClick","rtl","pauseOnFocusLoss","draggable","pauseOnHover","theme","formControl","formControlWide","selectEmpty","paddingLeft","paddingRight","useStylesDatePicker","root","GatherBillable","classesDatePicker","billableIntents","BillableIntents","bookingBillableCSV","BookingBillableCSV","exportExcelStatus","setExportExcelStatus","searchTerm","setSearchTerm","fetchBillableIntents","startDate","invoiceStartDate","endDate","invoiceEndDate","filteredbillableIntents","billableIntent","psychologistName","invoiceStatus","billingstatus","searchBillableIntents","showClients","setShowClients","providerClients","setProviderClients","setPsychologistID","providerName","setProviderName","providerType","setProviderType","headingStartDate","headingEndDate","toISOString","split","thisPsychologist","intent","clients","handleClientsClose","direction","handleSearch","labelId","utils","DateFnsUtils","disableToolbar","inputVariant","InputLabelProps","shrink","KeyboardButtonProps","fetchBookingBillableCSV","billableStatus","rowHeight","billablestatus","closeClients","providerPayments","displayNote","AdminReporting","powerBIXlsx","PowerBIXlsx","runETL","fetchPowerBIXlsx","KTHeader","elementId","the","this","element","KTUtil","get","body","defaultOptions","classic","offset","mobile","desktop","minimize","Plugin","construct","data","has","init","build","set","events","deepExtend","lastScrollTop","eventTriggerState","getViewPort","getDocumentHeight","window","addEventListener","on","off","st","isInResponsiveRange","getScrollTop","addClass","removeClass","eventTrigger","args","i","one","handler","call","fired","addEvent","push","setDefaults","apply","module","exports","KTScrolltop","speed","toggleClass","navigator","userAgent","match","handle","scroll","pageYOffset","e","preventDefault","scrollTop","Element","prototype","matches","msMatchesSelector","webkitMatchesSelector","closest","s","ancestor","document","documentElement","contains","parentElement","elem","remove","parentNode","removeChild","lastTime","vendors","x","requestAnimationFrame","cancelAnimationFrame","callback","currTime","getTime","timeToCall","max","setTimeout","clearTimeout","Document","DocumentFragment","forEach","hasOwnProperty","Object","defineProperty","configurable","enumerable","writable","argArr","slice","arguments","docFrag","createDocumentFragment","argItem","isNode","Node","appendChild","createTextNode","String","insertBefore","firstChild","KTUtilElementDataStore","KTUtilElementDataStoreID","KTUtilDelegatedEventHandlers","resizeHandlers","breakpoints","sm","lg","xl","_windowResizeHandler","timeout","_runResizeHandlers","addResizeHandler","removeResizeHandler","runResizeHandlers","resize","Event","dispatchEvent","evt","createEvent","initUIEvent","getURLParam","paramName","val","location","substring","unescape","isMobileDevice","getBreakpoint","isDesktopDevice","a","mode","breakpoint","getUniqueID","prefix","floor","isset","obj","keys","stone","Error","shift","getHighestZindex","css","parseInt","isNaN","hasFixedPositionedParent","sleep","milliseconds","start","getRandomInt","min","isAngularVersion","Zone","out","extend","query","nodeType","getElementById","getElementsByTagName","getElementsByClassName","getByID","getByTag","getByClass","hasClasses","classesArr","hasClass","classList","RegExp","classNames","add","triggerCustomEvent","eventName","CustomEvent","detail","initCustomEvent","triggerEvent","node","doc","ownerDocument","eventClass","bubbles","initEvent","synthetic","fireEvent","createEventObject","elm","children","string","eventTriggered","currentTarget","dataset","triggered","parent","querySelector","findAll","querySelectorAll","insertAfter","referenceNode","nextSibling","parents","selector","matchesSelector","mozMatchesSelector","oMatchesSelector","log","childNodes","result","l","child","p","f","tagName","customDataTag","outerWidth","parseFloat","offsetWidth","rect","win","getClientRects","getBoundingClientRect","defaultView","top","left","pageXOffset","visible","offsetHeight","attr","getAttribute","setAttribute","hasAttr","removeAttr","removeAttribute","animate","to","duration","update","easing","done","easings","linear","t","b","d","rAF","change","performance","now","loop","timestamp","time","actualCss","prop","cache","HTMLElement","cssText","actualHeight","actualWidth","getScroll","method","self","browserSupportsBoxModel","styleProp","getComputedStyle","getPropertyValue","currentStyle","str","letter","toUpperCase","oldLeft","oldRsLeft","runtimeStyle","pixelLeft","slide","dir","recalcMaxHeight","calcHeight","calcPaddingTop","calcPaddingBottom","paddingTop","paddingBottom","overflow","slideUp","slideDown","removeEvent","removeEventListener","eventId","targets","j","callee","hash","charCodeAt","animateClass","animationName","animation","animations","OAnimation","MozAnimation","WebkitAnimation","msAnimation","transitionEnd","transitions","OTransition","MozTransition","WebkitTransition","msTransition","animationEnd","animateDelay","animateDuration","scrollTo","targetPos","scrollPos","isArray","ready","attachEvent","readyState","isEmpty","numberString","nStr","x1","x2","rgx","detectIE","ua","msie","rv","edge","isRTL","scrollInit","ps","Function","mobileNativeScroll","disableForMobile","resetHeightOnDestroy","destroy","desktopNativeScroll","PerfectScrollbar","wheelSpeed","swipeEasing","wheelPropagation","windowScroll","minScrollbarLength","maxScrollbarLength","suppressScrollX","uid","rememberPosition","Cookies","pos","handleWindowResize","scrollUpdate","scrollUpdateAll","scrollers","len","scrollDestroy","setHTML","html","innerHTML","getHTML","scrollHeight","clientHeight","scrollingElement","onload","actionTypes","initialState","lang","reducer","persistReducer","storage","actions","setLanguage","saveLastLocation","lastLocation","localStorateLocations","_useLocations","JSON","parse","pathname","acceptLocation","expires","schedule","localStorage","setItem","console","stringify","forgotLastLocation","getLastLocation","_userLocations","pop","fetchMFAQR","postConfirmCode","postUpdatePassword","postActivateMFA","postDeactivateMFA","actionWatcher","saga","BASE_URL","apiURL","initialAuthState","MFAQR","CodeAccepted","BckupCodes","user","authToken","preferredName","refreshToken","roleID","roleDesc","roleScope","winbrowserTZ","recoveryStatus","totp","forcePasswordChange","SSOStatus","SSOForm","whitelist","routerHelpers","qrCode","BackupCodes","backupCodes","CodeFailed","axios","response","process","REACT_APP_DEBUG","returnStatus","put","toast","error","returnText","Request","ErrorType","Message","post","success","popCache","login","logout","reauth","getMFA","updatePassword","clearMFAToken","clearRecovery","ssook","ssoclear","ssoform","ssoformclear","takeLatest","loginSaga","all","removeCSSClass","ele","cls","reg","toAbsoluteUrl","removeStorage","getStorage","expiresIn","getItem","abs","initLayoutConfig","demo","layout","logo","dark","light","brand","green","loader","enabled","colors","primary","info","warning","danger","base","shape","toolbar","header","skin","fixed","menu","arrow","toggle","submenu","accordion","subheader","displayDesc","displayDaterangepicker","clear","content","aside","default","footer","dropdown","LayoutConfig","MenuConfig","items","title","icon","page","bullet","section","translate","SetMenuConfig","SetLayoutConfigs","SetLayoutConfigsWithPageRefresh","SetHtmlClassService","selectors","getClasses","store","htmlClassServiceObjects","builder","path","getAttributes","getConfig","layoutConfig","objectPath","getLogo","menuAsideLeftSkin","logoObject","logos","getStickyLogo","menuConfig","blacklist","menuItems","setMenuConfig","setLayoutConfigs","setLayoutConfigsWithPageRefresh","setHtmlClassService","LayoutContext","State","createContext","Dispatch","findPageConfig","currentPage","breadcrumbs","pageConfig","reverse","breadcrumb","splashScreen","refs","nextState","nextRefs","LayoutContextProvider","history","useReducer","listen","splashScreenRefs","splashScreenVisible","useMemo","Provider","LayoutContextConsumer","Consumer","LayoutSplashScreen","useContext","LayoutInitializer","htmlClassService","builderState","allMessages","en","I18nProvider","locale","i18n","messages","createTheme","typography","fontFamily","palette","contrastThreshold","main","secondary","contrastText","props","MuiButtonBase","disableRipple","MuiPopover","elevation","ThemeProvider","metronic","fetchClientInvite","fetchEmailDuplicate","fetchPsychologistInvite","fetchRegisteredPublic","postPsychologistInvite","postReferrerInvite","postContactFormEntry","postPsychologistData","postClientData","Registered","ClientInvite","ClientEAP","PsychologistInvite","InviteToken","EmailDuplicate","RegisteredFetch","regstatus","newID","newURL","inviteToken","formData","rootSaga","rootReducer","combineReducers","registration","forms","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","sagaMiddleware","createSagaMiddleware","createStore","applyMiddleware","persistor","persistStore","run","PortletHeaderTitle","forwardRef","ref","clsx","PortletBody","sticky","labelRef","setTop","windowHeight","setWindowHeight","handleResize","innerWidth","headerElement","subheaderElement","headerMobileElement","nextMarginTop","isFragment","fit","fluid","Portlet","fluidHeight","TopPsychologists","fetchReport","reportname","output","topPsychologistsReferrals","Reports","alt","fullname","src","imageURL","referralLast","referrals","QuickStat","desc","SalesBarChart","clientsByDay","ClientsByDay","clientRegistrationsByDay","ClientRegistrationsByDay","useRef","labels","datekey","datasets","total","chart","Chart","current","tooltips","intersect","xPadding","yPadding","caretPadding","legend","responsive","maintainAspectRatio","barRadius","scales","xAxes","gridLines","stacked","yAxes","right","bottom","CapacityBarChart","clientsByWeek","ClientsByWeek","successColor","LatestNotes","latestNotes","clientFullName","note","createdOnformatted","psychologistFullName","StatisticsProviderDay","providerStatisticsDay","Paper","StatisticsProvider","week","providerStatistics","closeProviders","showProvidersDay","setShowProvidersDay","setProviderStatisticsDay","thisProvider","provider","providerID","statisticsProviderDay","handleProvidersDayClose","Modal","Button","BookingStatistics","fetchStatistics","statistics","Statistics","setWeek","showProviders","setShowProviders","setProviderStatistics","handleProvidersClose","thisWeek","weeks","weekStart","statisticsProvider","marginbottom","ClientStatistics","Dashboard","dashboardMetrics","fetchContexts","fetchTags","fetchClientsByDay","fetchClientsByWeek","fetchClientRegistrationsByDay","InterestedPsychologists","fetchInterested","interested","filteredInterested","psychologist","interestedPsychologistsTerm","interestedProviderType","interestedPsychologistsStatus","interestedPsychologistsType","specialisttype","showInvitation","setShowInvitation","handleInvitationClose","currentSpecialistType","setcurrentSpecialistType","currentComments","setcurrentComments","currentID","setcurrentID","currentTownOrSuburb","setcurrentTownOrSuburb","thisinterested","mobilephone","comments","townorsuburb","TextField","putInterestedProviderFlag","text","href","sendPsychologistInvite","getAction","deletePsychologistInvite","Grid","InputGroup","Form","Alert","Row","Col","readOnly","registrationid","eventTypes","eventTypesEAP","eventTypesNthQLDPHN","eventTypesAdmin","bookingTypes","paymentTypes","eventStatuses","TitleLabel","TitleEditor","StartTimezoneCheckedLabel","StartTimezoneCheckedEditor","DescriptionLabel","DescriptionEditor","EventTypeEditor","DropDownList","nthqldphn","eapcontractndis","dataItemKey","textField","ClientEditor","role","Clients","selectedClient","client","disabled","Autocomplete","propertyName","handleClientSelectChange","zIndex","PaymentTypeEditor","itemDisabled","StatusEditor","BookingTypeEditor","CustomEndEditor","defaultEndTime","React","defaultEndTimeCount","defaultOffset","setDefaultOffset","eventType","setMinutes","getMinutes","DateTimePicker","PlacesAutoComplete","usePlacesAutocomplete","requestOptions","componentRestrictions","country","debounce","suggestions","clearSuggestions","setValue","setCurrentID","currentfulladdress","handleSelect","setcurrentfulladdress","getGeocode","address","then","results","getLatLng","lat","lng","setcurrentLatitude","setcurrentLongitude","catch","getZipCode","zipCode","setcurrentPostCode","isInvalid","isValid","suggestion","place_id","structured_formatting","main_text","secondary_text","Notes","fetchNotes","pkID","pkid","Forms","fetchForms","fetchFiles","loadFiles","Files","newNote","setNewNote","waitingRoomURL","setFooter","newNoteHelpText","setNewNoteHelpText","emailSubjectHelpText","setEmailSubjectHelpText","emailSubject","setEmailSubject","emailCC","setEmailCC","emailCCHelpText","setEmailCCHelpText","noteAction","noteSelector","setnoteSelector","newFFile","setNewFFile","existingFile","setExistingFile","attachmentHelpText","setAttachmentHelpText","medicalPractice","faxDestination","setFaxDestination","faxDestinationHelpText","setFaxDestinationHelpText","sendFormID","setSendFormID","formHelpText","setFormHelpText","setShow","notes","clearNote","handleSelectForm","formName","handleSelectFile","EmailSubject","EmailCC","FaxDestination","muted","practicename","FormSelection","FormControl","cursor","getActionColour","Select","Attachment","filename","files","handleFileFFieldChange","borderColor","media","faxGP","gpName","gpEmail","referrerEmail","getFormDisabled","FormData","noteBody","append","postNote","addNote","TableContainer","Table","table","TableHead","TableRow","TableCell","TableBody","createdOn","FormDataEntry","setFormID","formID","formDataID","setShowFormData","inviteStatus","newFile","setNewFile","mhcp","setmhcp","pdfForms","formDataPlugin","showFormData","setFormData","showCompleteForm","setShowCompleteForm","showConfirmation","setShowConfirmation","deleteFileId","setDeleteFileId","deleteFileName","setDeleteFileName","selectedForm","setSelectedForm","subType","subtype","handleConfirmationClose","addFile","postFile","DeleteFeature","Tooltip","placement","delId","vertical","handleFileFieldChange","Checkbox","checked","mhcpFlag","clientViewable","currentState","setFileClientViewableFlag","loadDataEntry","downloadlink","contextName","contextID","pdfFlag","deleteFile","BookingBillingList","bookingBilling","BookingBilling","fetchBookingBilling","clientID","cols","flex","Typography","clipboard","writeText","xs","clientFirstName","clientPreferredName","clientSurname","clientDOB","clientEmail","clientMobile","clientMedicareNo","clientMedicareReferenceNo","clientMedicareExpiryDate","clientreferringGPName","clientreferringGPProviderNo","clientreferredOn","pagination","CustomFormEditor","registered","RegisteredPsychologists","medicalPractitioners","MedicalPractitioners","medicalPractices","MedicalPractices","GeneralPractitioner","Client","valueGetter","fetchClient","currentClientID","setcurrentClientID","currentMedicalPractitionerID","setcurrentMedicalPractitionerID","currentPaymentType","setcurrentPaymentType","currentLatitude","currentLongitude","currentPostCode","currentStatus","setcurrentStatus","currentDOB","setcurrentDOB","currentGender","setcurrentGender","currentOccupation","setcurrentOccupation","currentNote","setcurrentNote","currenthopeToGetFromTreatment","setcurrenthopeToGetFromTreatment","currentEmergencyContactName1","setcurrentEmergencyContactName1","currentEmergencyContactPhone1","setcurrentEmergencyContactPhone1","currentEmergencyContactRelation1","setcurrentEmergencyContactRelation1","currentEmergencyContactName2","setcurrentEmergencyContactName2","currentEmergencyContactPhone2","setcurrentEmergencyContactPhone2","currentEmergencyContactRelation2","setcurrentEmergencyContactRelation2","currentmedicareno","setcurrentmedicareno","currentmedicarereferenceno","setcurrentmedicarereferenceno","currentmedicareexpirydate","setcurrentmedicareexpirydate","nextBookingDate","setnextBookingDate","currentReferringGPName","setcurrentReferringGPName","currentReferringGPProviderNo","setcurrentReferringGPProviderNo","currentReferredGPOn","setcurrentReferredGPOn","showNotes","setShowNotes","showFiles","setShowFiles","showBookingBilling","setShowBookingBilling","showCancelProviderBooking","setShowCancelProviderBooking","cancellationReason","setCancellationReason","showCancellationReason","setShowCancellationReason","booking","setBooking","setNoteAction","setKey","loadMedicalPractitioner","thisMedicalPractitioner","setcurrentMedicalPractitioner","providernumber","salutation","tempMedicalPractice","medicalPracticeID","loadMedicalPractitice","thisMedicalPractice","setcurrentMedicalPractice","abn","address1","website","logoURL","practiceType","currentMedicalPractitioner","currentMedicalPractice","putClient","profileClientID","profileFirstName","profileSurname","profileDOB","profileEmail","profileGender","profileOccupation","profileMobile","profilefulladdress","profileStatus","profileNote","profilehopeToGetFromTreatment","profileMedicalPractitionerID","profilePaymentType","profileTimeZone","profileLatitude","profileLongitude","profilePostCode","emergencycontactname1","emergencycontactphone1","emergencycontactrelation1","emergencycontactname2","emergencycontactphone2","emergencycontactrelation2","profilemedicareno","profilemedicarereferenceno","profilemedicareexpirydate","profileAreasOfInterest","medicalPractitioner","putClientDetail","loadNotes","thisClient","nextBooking","medicalPractitionerID","SchedulerFormEditor","titleLabel","titleEditor","endEditor","startTimezoneCheckedLabel","startTimezoneCheckedEditor","descriptionLabel","descriptionEditor","horizontal","FormElement","FieldWrapper","Field","component","eapContractNDISAvailability","visited","errors","startEditor","bookingType","paymentType","TextArea","bookingData","loadBooking","fulladdress","latitude","longitude","dob","gender","occupation","postCode","hopeToGetFromTreatment","medicareno","medicarereferenceno","medicareexpirydate","referringGPName","referringGPProviderNo","referredGPOn","loadProfile","onSubmit","Tabs","activeKey","onSelect","k","Tab","eventKey","handleTimeZoneAutocompleteChange","getOptionSelected","getMedicalPractitionerOption","controlId","getMedicalPracticeOption","centered","clientfullname","psychologistDate","Check","Input","alignItems","putAppointment","refreshPayload","newishNote","psychologistfullname","cancelBooking","CustomDialog","appointmentType","contactMobilePhone","phoneNumber","Dialog","FormWithCustomEditor","requiredValidator","SchedulerForm","editor","dialog","validator","_dataItem","formValueGetter","Boolean","reduce","acc","initialValues","dataItem","load","likelySubtags","currencyData","weekData","numbers","currencies","caGregorian","dateFields","displayDate","AvailabilityNew","mainID","bookings","Bookings","availability","Availability","fetchConstants","fetchFundingTypes","fetchBookingTypeStatistics","fetchClients","providerId","fetchBookings","fetchAvailability","newBookings","parseISO","end","showTodoIcon","toDoCount","newAvailability","availabilityTypeDisplay","availabiltyType","recurrenceRule","rRule","recurrenceExceptions","exDate","payloadParams","payloadRef","setData","prevItems","setPrevItems","getUpdateTitle","IntlProvider","Scheduler","onDataChange","old","deleted","updated","concat","created","assign","guid","n","changed","slot","allDay","chgAvailability","isFinite","differenceInMinutes","appointment","added","addAvailability","newbookingdate","bookAppointment","delAvailability","backgroundStyles","customStyles","SchedulerItem","SchedulerItemContent","defaultDate","editable","drag","edit","WeekView","workDayStart","workDayEnd","selectedDateFormat","selectedShortDateFormat","workWeekStart","Day","Monday","MonthView","ReferralsView","fetchReferralsView","showReferralView","setShowReferralView","initReferral","referredOn","psychologistNote","clientMobilePhone","mpFullName","practiceAddress","practicePhone","practiceFax","referral","setReferral","thisReferral","changeReferralStatus","putReferralStatus","referenceID","statusCHG","refresh","viewerFullName","borderTop","gpFullName","BookingWeek","program","specialistType","setSinglePsychologist","fetchSundayThisWeek","startingSunday","SundayThisWeek","currentPsychologistID","setcurrentPsychologistID","currentHourlyRate","setcurrentHourlyRate","currentPsychologistFullname","setcurrentPsychologistFullname","currentWaitingRoomURL","setcurrentWaitingRoomURL","currentPsychologistTimeZone","setcurrentPsychologistTimeZone","displayTZ","setDisplayTZ","psychologistSet","setPsychologistSet","gpID","gpFullname","gpcurrentWaitingRoomURL","psychologistTZ","clientTZ","psychologistFullname","inviteType","changeDisplayTZ","flexGrow","paper","dayCol","setStartDate","setEndDate","nextWeek","setNextWeek","prevWeek","setPrevWeek","weekdays","setWeekDays","makeWeek","newDateStr","thisStartDate","setDate","getDate","tempDays","backWeek","formatDateString","dateInput","m_date","Intl","DateTimeFormat","formatToParts","m_ca","m_it","year","month","day","monthNames","showNewBooking","setShowNewBooking","newBookingProps","setNewBookingProps","showBookingError","setShowBookingError","startNewBooking","hour","InputLabel","hourlyrate","waitingroomurl","getYear","getMonth","setMakeBooking","thisDay","BookingDay","clientFullname","twoDaysInFuture","setHours","getHours","psychologistname","setShowAppointment","fetchClientFutureBookingStatus","saveAppointment","getActualStartTime","thisHour","currentDate","timeblock","getAvailabilityTypeForTimeBlock","hourItem","borderBottom","slotItem","dayHeading","minHeight","getFullYear","isToday","toDateString","getDay","getBookingTypeForTimeBlock","founditem","getActualStartTimeDisplay","ToDos","tagValues","setShowToDo","clientType","todos","initToDo","todoID","colour","dueDate","shareWith","complete","needsGPBooking","ppwFollowUp","todo","setToDo","replyID","setReplyID","replyText","setReplyText","replyShareWith","setReplyShareWith","fetchToDos","validationSchema","Yup","when","is","required","submitForm","values","putToDo","completeToDo","replyToDo","share","enableReinitialize","resetForm","handleChange","setFieldValue","handleSubmit","persist","handleCheckboxChange","noValidate","bind","additional","propertyValue","autoOk","FormGroup","FormControlLabel","control","onClose","createdByMe","toDoCreatedbyName","replies","reply","replyindex","replyToID","sendReply","BookingsList","showProvider","setShowProvider","isMobile","useMediaQuery","supervisionAreas","SupervisionAreas","sa","endorsedSupervisionAreas","currentpsychologistid","setCurrentPsychologistID","currentClientPaymentType","currentClientBookingType","setCurrentPsychologistFullname","currentGPID","currentgpid","currentGPFullname","currentClientFullname","setCurrentHourlyRate","setCurrentWaitingRoomURL","currentGPWaitingRoomURL","gpwaitingRoomURL","currentClientFirstName","currentClientEmail","currentPsychologistTZ","setCurrentPsychologistTZ","currentClientTZ","expanded","setExpanded","currentProgram","programid","futureBookingStatus","ClientFutureBookingStatus","filteredBookingsFuture","days","filteredBookingsFutureProvider","filteredBookingsPast","filteredBookingsPastProvider","psychologistsNew","psy","nextAvailableNew","psychologistsSupervision","nextAvailableSupervision","showProviderBio","setShowProviderBio","providerBioFullName","setProviderBioFullName","providerBioBio","setProviderBioBio","handleProviderClose","fetchSupervisionAreas","showBooking","setShowBooking","showCancelBooking","setShowCancelBooking","toggleCancelMessage","setToogleCancelMessage","toggleMessage","setToggleMessage","sentMsg","setSentMsg","makeBooking","showToDo","toDoClientID","setToDoClientID","toDoTitle","setToDoTitle","moreProviderBio","fullName","bio","thisBooking","clientDate","fullAddress","view","medipassapikey","notice48","noticePast","clientCancel","showMessageTimer","timer","createBooking","selectProvider","putClientPsychologist","clientid","NewBookingButton","BookingData","selectedList","bookingPhase","sendMessage","deleteBooking","clienttype","breakpointCols","columnClassName","Card","CardMedia","image","CardContent","hourlyRateOverrideGap","standardFeeOutOfPocket","hourlyRateOverrideRebate","medicareRebate","isReducedFee","reducedFeeOverrideGap","reducedFeeOutOfPocket","reducedFee","reducedFeeOverrideRebate","fontStyle","Chip","CardActions","disableSpacing","bulkBillingAvailable","IconButton","expand","expandOpen","handleExpandClick","aria-expanded","Collapse","in","unmountOnExit","therapyTypes","supervisorHourlyRate","supervisorBio","List","sRow","isChecked","supervisorAreas","ListItem","dense","button","ListItemIcon","tabIndex","ListItemText","disableTypography","linkSelected","link","APIKeyForm","APIKey","setAPIKey","apiKeyHelpText","setapiKeyHelpText","onCloseAPIKey","putAPIKey","apikey","areasOfInterestRAW","areasOfProviderInterest","areasOfTherapyTypes","aoi_focus","focusAreaIndex","aoi_other","mbsServices","MBSServices","Psychologist","fundingTypes","FundingTypes","showRegistrationView","setShowRegistrationView","setCurrentPaymentType","filteredRegistered","registeredTerm","registeredStatus","registeredProviderType","isSupervisor","registeredAOI","some","registeredInterest","registeredTherapy","registeredPsychologistsType","searchProviders","fetchMedicalPractices","fetchMBSServices","showAPIKey","setShowAPIKey","handleRegistrationViewClose","handleClose","handleAPIKeyClose","registrationView","feeType","putPsychologist","mergedAOI","currentKeyAreas","currentProviderInterest","currentTherapyTypes","currentFundingTypes","ft","currentMbsServices","mbs","currentBio","currentEducation","currentHourly","currentIsReducedFee","currentReducedFee","currentHourlyRateOverrideGap","currentHourlyRateOverrideRebate","currentReducedFeeOverrideGap","currentReducedFeeOverrideRebate","currentStartedPracticingYear","currentInsuranceNumber","currentProviderNumber","currentMedicalPracticeID","currentProfilePicture","currentNewInsuranceFile","currentNewProfilePicture","currentPDFPassword","currentAHPRARegistrationNo","currentCOVIURoomURL","currentTeleHealthProvider","currentTestProvider","currentIsRegistrationBlocked","currentEapContractNDISAvailability","currentAutoBulkBillingConsentForm","currentIsSupervisor","currentSupervisorBio","currentSupervisorEducation","currentSupervisorHourlyRate","currentSupervisorAreas","currentFaceToFaceBooking","currentInsuranceExpiry","newpracticeaddress","putPsychologistDetail","InsuranceDownload","documentLink","handleSupervisorAreaToggle","currentIndex","arr","getIndex","newChecked","splice","setCurrentSupervisorAreas","setCurrentInsuranceExpiry","setnewpracticeaddress","setcurrentMedicalPracticeID","setcurrentBio","setcurrentEducation","setcurrentPDFPassword","setcurrentHourly","setcurrentIsReducedFee","setcurrentHourlyRateOverrideGap","setcurrentHourlyRateOverrideRebate","setcurrentReducedFeeOverrideGap","setcurrentReducedFeeOverrideRebate","setcurrentReducedFee","currentMedicareRebate","setcurrentMedicareRebate","currentStandardFeeOutOfPocket","setcurrentStandardFeeOutOfPocket","currentReducedFeeOutOfPocket","setcurrentReducedFeeOutOfPocket","setcurrentInsuranceNumber","setcurrentProviderNumber","currentDocumentLink","setcurrentDocumentLink","setcurrentNewInsuranceFile","setcurrentKeyAreas","setcurrentProviderInterest","setcurrentTherapyTypes","setcurrentMbsServices","setcurrentFaceToFaceBooking","setcurrentFundingTypes","setcurrentProfilePicture","setcurrentNewProfilePicture","setcurrentStartedPracticingYear","currentProviderDescription","setcurrentProviderDescription","currentAPIKey","setcurrentAPIKey","currentNewPassword","setcurrentNewPassword","currentNewPasswordConfirmation","setcurrentNewPasswordConfirmation","setcurrentAHPRARegistrationNo","setcurrentCOVIURoomURL","currentMfaConfigured","setcurrentMfaConfigured","setcurrentTeleHealthProvider","setcurrentTestProvider","setcurrentIsRegistrationBlocked","setcurrentEapContractNDISAvailability","setcurrentAutoBulkBillingConsentForm","setCurrentIsSupervisor","setCurrentSupervisorBio","setCurrentSupervisorEducation","setCurrentSupervisorHourlyRate","thisRegistered","education","pdfPassword","stanardFeeOutofPocket","reducedFeeOutofPocket","startedpracticingyear","insurancenumber","mfaconfigured","facetoFaceBooking","ftypes","keyaoi","providerInterest","providerdescription","ahpraRegistrationNo","coviuRoomURL","teleHealthProvider","testprovider","isRegistrationBlocked","autoBulkBillingConsentForm","supervisorEducation","insuranceexpiry","dataBsFocus","mountOnEnter","postcode","handleFileFieldChangeNewInsuranceFile","serviceName","Image","maxHeight","handleFileFieldChangeNewProfilePicture","registeredid","registeredexistingpassword","registeredpassword","registeredpasswordconfirmation","putProviderPassword","Auth","Badge","Referrers","fetchReferrers","referrers","filteredreferrers","referrer","referrersTerm","showReferrer","setShowReferrer","referrerError","setReferrerError","handleReferrerClose","currentOrganisation","setcurrentOrganisation","currentModalHeader","setcurrentModalHeader","currentPasswordHeader","setcurrentPasswordHeader","thisReferrer","validation","newpassword","newpasswordconfirmation","putReferrer","Referrals","referralPeriodCode","referralPeriodDuration","clientRegistrationID","fetchMedicalPractitioners","showForm","setShowForm","currentReferralID","setcurrentReferralID","currentReferredOn","setcurrentReferredOn","currentPeriodCode","setcurrentPeriodCode","currentPeriodDuration","setcurrentPeriodDuration","currentSource","setcurrentSource","currentMedicalPractitionerFirstNameError","setcurrentMedicalPractitionerFirstNameError","currentMedicalPractitionerSurnameError","setcurrentMedicalPractitionerSurnameError","currentMedicalPractitionerMobilePhoneError","setcurrentMedicalPractitionerMobilePhoneError","currentMedicalPractitionerProviderNumberError","setcurrentMedicalPractitionerProviderNumberError","currentMedicalPracticeClinicNameError","setcurrentMedicalPracticeClinicNameError","currentMedicalPracticeClinicAddressError","setcurrentMedicalPracticeClinicAddressError","currentMedicalPracticeClinicPhoneError","setcurrentMedicalPracticeClinicPhoneError","currentMedicalPracticeClinicFaxError","setcurrentMedicalPracticeClinicFaxError","currentReferredOnError","setcurrentReferredOnError","currentPeriodDurationError","setcurrentPeriodDurationError","loadReferral","tempReferredOn","tempMedicalPractitioner","handleFormClose","Feedback","allOk","adminNote","newClient","putReferral","save","tooltip","Tags","context","setTagValues","autoSave","fkID","tagValuesFilter","contexts","Contexts","Context","ContextID","alltags","autoitems","TagValues","replaceAll","newTag","setnewTag","setItems","fetchTagValues","reftags","tag","tagID","allowMultipleValues","newTagValueRef","makeid","characters","charactersLength","charAt","selectNewTag","clearNewTag","addTagValue","newItem","tagValue","tempItems","putTagValues","updateTagValue","deleteTagValue","deleteid","TagValueText","thisTagValue","setnewValue","changeText","onKeyPress","charCode","keyCode","onDataEntry","onInput","TagValueSelect","thisTag","SelectNewTag","allowClear","EnterNewTagValue","dataType","ListTagsForm","focus","box","tags","actualClients","progressStatus","Source","listfilters","clientsList","clientBooking","Booking","setcurrentClientBookingType","currentwaitingRoomURL","setcurrentwaitingRoomURL","currentRHCNDISManagement","setcurrentRHCNDISManagement","currentRHCContractManagement","setcurrentRHCContractManagement","currentTagValues","setcurrentTagValues","currentForcePasswordChange","setcurrentForcePasswordChange","currentReferrerName","setcurrentReferrerName","currentReferrerEmail","setcurrentReferrerEmail","currentReferrerOrganisation","setcurrentReferrerOrganisation","currentReferrerMobile","setcurrentReferrerMobile","currentReferrerContactName","setcurrentReferrerContactName","currentReferrerContactMobile","setcurrentReferrerContactMobile","currentReferrerContactEmail","setcurrentReferrerContactEmail","currentBusinessName","setcurrentBusinessName","currentABN","setcurrentABN","currentBusinessAddress","setcurrentBusinessAddress","currentBackgroundInformation","setcurrentBackgroundInformation","currentHealthCareCard","setcurrentHealthCareCard","currentUnemployed","setcurrentUnemployed","currentGPMentalHealthPlan12Months","setcurrentGPMentalHealthPlan12Months","currentNaturalDisaster","setcurrentNaturalDisaster","currentBulkBilledReason","setcurrentBulkBilledReason","setcurrentGPID","currentListColor","setcurrentListColor","currentGPName","setcurrentGPName","currentGPClinicName","setcurrentGPClinicName","currentEAPWorkPlace","setcurrentEAPWorkPlace","currentNDISNumber","setcurrentNDISNumber","currentNDISDateFrom","setcurrentNDISDateFrom","currentNDISDateTo","setcurrentNDISDateTo","currentNDISPlanManagementProvider","setcurrentNDISPlanManagementProvider","currentNDISEmailForInvoices","setcurrentNDISEmailForInvoices","existingNDISEmailForInvoices","setexistingNDISEmailForInvoices","currentNDISDiagnosisHistory","setcurrentNDISDiagnosisHistory","currentNDISBookingFee","setcurrentNDISBookingFee","currentNDISProviderFee","setcurrentNDISProviderFee","currentNDISActualProviderFee","setcurrentNDISActualProviderFee","currentNDISSupportCoordinator","setcurrentNDISSupportCoordinator","currentNDISSupportCoordinatorPhone","setcurrentNDISSupportCoordinatorPhone","currentNDISBillingNote","setcurrentNDISBillingNote","currentRHCNDISItemCode","setcurrentRHCNDISItemCode","currentReferralGPPracticeFax","setcurrentReferralGPPracticeFax","currentConsentToShareWithGP","setcurrentConsentToShareWithGP","currentPronouns","setcurrentPronouns","currentHandOverNotes","setcurrentHandOverNotes","currentOpportunityDescription","setcurrentOpportunityDescription","currentOpportunityColour","setcurrentOpportunityColour","currentOpportunityStatus","setcurrentOpportunityStatus","currentOpportunityInterested","setcurrentOpportunityInterested","currentIndigenous","setcurrentIndigenous","currentProgramPopulation","setcurrentProgramPopulation","currentNthQLDPHNBookings","setcurrentNthQLDPHNBookings","currentNthQLDPHNPast","setcurrentNthQLDPHNPast","currentNthQLDPHNTotal","setcurrentNthQLDPHNTotal","currentNthQLDPHNFuture","setcurrentNthQLDPHNFuture","currentClientType","setcurrentClientType","programPopulationOptions","programPopulationOptionsPerinatal","validateMedicareNumber","require","filteredClients","clientsTerm","referrercontactname","clientsReferrer","referrerorganisation","clientsPsychologist","clientsStatus","toDoWarning","toDoPPWFollowUp","taskflags","toDoNeedsGPBooking","toDoRecentCancellation","toDoSentToProvider","abandoned","opportunity","providerUnallocated","providerEAPContract","providerNthQLDPHN","clientsType","clientsColour","listcolor","searchClients","fetchSource","fetchContracts","fetchPrograms","actualRegistered","registeredPsychologists","registeredFinancial","registeredGP","registeredPsychologistsNthQLDPHN","registeredPsychologistsNotNthQLDPHN","registeredWithClients","referralCount","contracts","Contracts","programs","Programs","areasOfInterestReference","showAppointment","medicarenoError","setmedicarenoError","initMedicalPractitioner","initMedicalPractice","initContract","initProgram","identifier","bulkbilling","loadSource","thisSource","loadProgram","thisProgram","setcurrentProgram","loadPreviousContract","thisContract","setPreviousContract","loadContract","setcurrentContract","currentContract","previousContract","handleToggle","clearClient","handleAppointmentClose","profilePreferredName","profileCurrentContractID","profilePreviousContactID","rhcndismanagement","rhccontractmanagement","profilepassword","profilepasswordconfirmation","profileforcepasswordchange","profilecurrentPsychologistID","profilecurrentGPID","profilegpname","profilegpclinicname","profileeapworkplace","profilendisnumber","profilendisdatefrom","profilendisdateto","profilendisplanmanagementprovider","profilendisemailforinvoices","profileexistingndisemailforinvoices","profilendisdiagnosishistory","profilendisbookingfee","profilendisproviderfee","profileConsentToShareWithGP","profilePronouns","profileNDISSupportCoordinator","profileNDISSupportCoordinatorPhone","profileRHCNDISItemCode","profileNDISBillingNote","profileOpportunityDescription","profileOpportunityColour","profileOpportunityStatus","profileHandoverNotes","profileIndigenous","profileprogrampopulation","pp","profileprogramid","profilelistcolor","profileNthQLDPHNBookings","loadClient","referrername","referrermobile","referreremail","referrercontactmobile","referrercontactemail","businessName","businessAddress","backgroundInformation","healthcarecard","gpmentalhealthplan12months","unemployed","naturaldisaster","bulkbilledreason","currentcontractid","gpClinicName","eapworkplace","ndisnumber","ndisdatefrom","ndisdateto","ndisplanmanagementprovider","ndisemailforinvoices","ndisdiagnosishistory","referralGPPracticeFax","ndisbookingfee","ndisproviderfee","ndisactualproviderfee","consentToShareWithGP","pronouns","indigenous","programPopulationPerinatal","programpopulation","programPopulation","handOverNotes","ndissupportcoordinator","ndissupportcoordinatorphone","rhcndisitemcode","ndisbillingnote","opportunitydescription","opportunitycolour","opportunitystatus","opportunityinterested","sourceid","nthQLDPHNEstimated","nthQLDPHNPast","nthQLDPHNFuture","nthQLDPHNTotal","setTaskFlag","taskFlags","flagChange","newTaskFlags","newTaskFlagString","putClientTaskFlag","statusName","setProgressStatus","statusClientID","statusValue","TaskFlags","LS","PPW","FLWUP","Spinner","currentcontractcolour","putClientFlag","createdon","nextBookingID","fetchBooking","bookingid","topBookingClient","filesAvailable","clientsListLoadClientID","ltype","listType","placeholder","disableColumnMenu","sorting","displayname","getContractOption","getProgramOption","cost","rhcfee","providerfee","handlePsychologistAutocompleteChange","handleGPAutocompleteChange","getSourceOption","putResetInterestedProviders","relevantInfo","setBookingStatus","ClientInvitesPsychologist","ClientInvitesReferrer","ClientInvitesAdmin","displayinvite","DisplayInvite","contract","referrerAlert","setReferrerAlert","clientInviteStartDate","clientInviteEndDate","currentid","setcurrentid","currentInviteToken","setcurrentInviteToken","viewedFilesUpload","setViewedFilesUpload","currentReferrerFirstName","setcurrentReferrerFirstName","currentReferrerSurname","setcurrentReferrerSurname","currentReferrerOrganisationName","setcurrentReferrerOrganisationName","currentReferrerOrgEmail","setcurrentReferrerOrgEmail","currentSelectLater","setcurrentSelectLater","currentReferralGPName","setcurrentReferralGPName","currentReferralGPPracticeEmail","setcurrentReferralGPPracticeEmail","invitedClientswithReferrers","referralcount","aoi_program","currentFacetoFaceBooking","setcurrentFacetoFaceBooking","referrerfirstname","referrersurname","referrerorganisationname","referrerorgemail","paymenttype","referralGPPracticeEmail","contractid","clearDisplayInvite","providers","getProviderType","filteredInvites","invitedClientsTerm","invitedClientsReferrer","createdby","invitedClientProviderType","invitedClientsStatus","invitedClientsType","searchInvites","loadNewInvite","deleteInvite","deleteClientInvite","sendInviteReminder","sendClientInviteReminder","invitesListLoadInviteID","contractcolour","putClientInviteFlag","referrertype","sendCallUnsuccessfulReminder","AlertTitle","programName","nextAvailable","renderOption","renderProviderOption","clientiD","filterType","setFilterType","practitioners","filteredPractitioners","practice","All","filteredMedicalPractices","currentpracticename","setcurrentpracticename","currentAbn","setcurrentAbn","currentPhone","setcurrentPhone","currentWebsite","setcurrentWebsite","currentLogoURL","setcurrentLogoURL","currentPracticeType","setcurrentPracticeType","putPractice","putMedicalPractice","thisPractice","SearchClientData","searchResults","SearchResults","searchClientData","filteredSearchResults","searchResult","aoiArray","searchClientDataType","entity","searchString","every","word","clientsAOI","searchSearchResults","uri","initialiseInvites","SearchBookingData","SearchBookingResults","searchBookingData","updatePayment","actionType","rhcpaymentstatus","updateRHCPaid","RenderExpandableCell","isOverflowed","setIsOverflow","textElementRef","checkOverflow","clientWidth","contentWidth","disableHoverListener","whiteSpace","textOverflow","Notifications","notifications","ActivityFeed","filteredNotifications","notification","fetchActivityFeed","VerifyXero","xerolinkfailures","XeroLinkFailures","filteredxerolinkfailures","toLocaleLowerCase","putXeroContactLink","xerondislinkfailures","XeroNDISLinkFailures","filteredxerondislinkfailures","putXeroNDISContactLink","Invoices","geninvoiceStartDate","geninvoiceEndDate","skip","take","dataState","setDataState","dataResult","setDataResult","prevBillableIntents","setPrevBillableIntents","reorderable","pageable","buttonCount","pageSizes","onDataStateChange","GridColumn","expandField","onExpandChange","isExpanded","aggregates","GridToolbar","putCreateInvoices","InvoicesContracts","BillableIntentContracts","fetchBillableIntentsContract","approved","putCreateInvoicesContract","InvoicesNthQLDPHN","fetchBillableIntentsNthQLDPHN","putCreateInvoicesNthQLDPHN","InvoicesNDIS","BillableIntentNDIS","fetchBillableIntentsNDIS","putCreateInvoicesNDIS","InvoiceLog","invoicelog","fetchInvoiceLog","filteredInvoiceLog","invlog","clientName","invoicelogTerm","invoicesPsychologist","searchInvoices","GatherBillableAll","billableIntentsAll","BillableIntentsAll","fetchBillableIntentsAll","filteredbillableIntentsAll","contractName","clientsContract","bookingPaymentType","bookingValidationStatus","validationStatus","searchBillableIntentsAll","bookingID","setBookingID","bookingStatus","setPaymentType","subPaymentType","setSubPaymentType","ndisPlanManagementProvider","setNDISPlanManagementProvider","ndisEmailForInvoices","setNDISEmailForInvoices","bookingNote","setBookingNote","approvalstatus","setApprovalStatus","setRHCPaymentStatus","setValidationStatus","handleBookingClose","bookingSubPaymentType","approvedstatus","subpaymenttype","updateBookingBilling","GatherBillableContracts","approvalStatus","GatherBillableDetail","GatherBillableNthQLDPHN","BillableIntentNthQLDPHN","approvedStatus","GatherBillableNDIS","ndisProviderClients","setNDISProviderClients","ndisProviderName","setNDISProviderName","thisNDISProvider","providerFee","GatherBillableContractsProvider","BillableIntentContractsProvider","fetchBillableIntentsContractProvider","GatherBillableNDISProvider","BillableIntentNDISProvider","fetchBillableIntentsNDISProvider","MFAForm","mfaQR","codeAccepted","currentLoadingQRCode","setcurrentLoadingQRCode","confirmationCode","setConfirmationCode","confirmationCodeHelpText","setConfirmationCodeHelpText","componentRef","handlePrint","useReactToPrint","onCloseMFA","confirmCode","ProfileAdmin","fetchAdminUser","showMFA","setShowMFA","handleMFAClose","adminUsers","AdminUser","myUser","putAdminUser","setSubmitting","touched","isSubmitting","profilePassword","profilePasswordConfirmation","PaymentNDIS","putCreateInvoicesNDISProvider","PaymentContracts","putCreateInvoicesContractProvider","AdminUsers","users","Users","fetchUsers","tabKey","setTabKey","userListTerm","setUserListTerm","showPassword","setShowPassword","changeFilter","filteredusers","userListStatus","initUser","userID","extUserID","lastName","initials","defaultDirectoryID","updatedOn","setUser","loadUser","thisUser","oneOf","headerAlign","align","putUser","rolescope","lable","useClickOutside","startedInside","startedWhenMounted","listener","validateEventStart","PopoverPicker","popover","isOpen","close","MetaDataConfig","initTag","allowAdHocValues","tagDataTypes","setTag","newTagOption","setNewTagOption","loadTag","setColour","addTagOption","updateTagOption","AddOption","newOptionText","setNewOptionText","EditOption","deleteTagOption","onKeyDown","formControlNoTopMargin","formControlLabelNoBottomMargin","myCheckbox","tagsTerm","putTag","refContext","tempContexts","handleContextChange","ManageForms","template","formStatuses","formDataPlugins","initForm","subscriberID","ownerID","formType","formDescription","formInstructions","confirmationText","inputOrientation","questionToAnswerWidth","formStyles","formStatus","autoCreate","setForm","loadForm","thisForm","questionCount","copyToProviders","putForm","deleteForm","responseCount","FormQuestions","dataNodes","DataNodes","fetchForm","fetchDataNodes","questions","setQuestions","formQuestions","types","initFormQuestion","questionID","questionIndex","questionText","questionHelpText","questionStatement","questionStatementPDFFile","typeInput","questionLayout","answerLayout","answerInputSize","questionStyles","questionStatus","mandatory","vhdataNodeName","formOptionListID","protected","questionPlaceHolderText","adminUseOnly","nodeID","formOptions","formQuestion","setFormQuestion","loadFormQuestion","thisFormQuestion","FormInput","question","FormVarchar","FormText","FormStatement","FormStatementPDF","FormOptionRadio","FormOptionSelect","FormOptionCheckbox","FormDate","FormFile","FormSignature","qname","questionPDF","showQuestionPDF","questionStatementPDFFileName","questionStatementPDF","scale","optionID","optionLabel","RadioGroup","Radio","FormHelperText","acceptedFiles","showPreviews","maxFileSize","showPreviewsInDropzone","dropzoneText","dropzoneClass","handleOnDragEnd","destination","itemsCopy","reorderedItem","ErrorsNotification","msg","Fragment","addLabel","updateLabel","AddItem","newLabel","setNewLabel","renderDraggable","div","createElement","pointerEvents","elt","render","provided","draggableProps","createPortal","useDraggableInPortal","stopImmediatePropagation","CardHeader","cardHeader","onDragEnd","putQuestionsOrder","droppableId","droppableProps","innerRef","draggableId","dragHandleProps","Divider","putFormQuestion","optionIndex","saveLabel","rowindextoDelete","deleteLabel","deleteFormQuestion","deleteQuestion","dropzoneQuestion","FormConfig","filteredContracts","currentContractID","setCurrentContractID","currentName","setCurrentName","currentOrganisationName","setCurrentOrganisationName","currentLocations","setCurrentLocations","setCurrentStatus","setCurrentEmail","currentCost","setCurrentCost","currentProviderFee","setCurrentProviderFee","currentRHCFee","setCurrentRHCFee","currentType","setCurrentType","currentItemCode","setCurrentItemCode","currentContractToken","setCurrentContractToken","currentContractManagedByRHC","setCurrentContractManagedByRHC","currentContractColour","setCurrentContractColour","createNewContract","locations","contactemail","itemcode","contracttoken","contractmanagedbyrhc","putContract","filteredPrograms","currentProgramID","setCurrentProgramID","currentDescription","setCurrentDescription","currentIdentifier","setCurrentIdentifier","currentAreaOfInterest","setCurrentAreaOfInterest","currentAvailabilityType","setCurrentAvailabilityType","currentBulkBilling","setCurrentBulkBilling","areaofinterest","putProgram","Surveys","surveys","filteredSurveys","fetchSurveys","currentSurveyID","setCurrentSurveyID","currentSurveyType","setCurrentSurveyType","currentSurveyTypeSetting1","setCurrentSurveyTypeSetting1","currentSurveyCondition1","setCurrentSurveyCondition1","currentSurveyCondition2","setCurrentSurveyCondition2","currentSurveyMonths","setCurrentSurveyMonths","thisSurvey","survey","surveytype","surveytypesetting1","surveycondition1","surveycondition2","surveymonths","putSurvey","NthQLDPHNDetail","nthqldphnDetails","NthQLDPHNDetails","NthQLDPHNStatistics","nthqldphnStatistics","nthqldphnIssues","NthQLDPHNIssues","showDetails","setShowDetails","detailsHeader","setDetailsHeader","fetchNthQLDPHNStatistics","fetchNthQLDPHNIssues","showDetail","lga","contentType","quarter","fetchNthQLDPHNDetails","handleDetailsClose","columnsTotal","renderHeader","lineHeight","ProviderStatistics","fetchProviderStatistics","filteredProviderStatistics","providerStatistic","providerStatisticsRecentBookings","noBookingsin12Months","providerStatisticsStatus","archivedProvider","searchProviderStatistic","Opportunity","opportunities","Opportunities","filteredOpportunities","opportunityStatus","opportunityType","searchOpportunities","fetchOpportunities","currentOpportunityID","setcurrentOpportunityID","setcurrentType","thisOpportunity","putOpportunity","HomePageAdmin","fallback","exact","VerifyNDISXero","InvoiceNthQLDPHN","InvoiceContracts","InvoiceNDIS","UpdatePassword","handleClickShowPassword","handleMouseDownPassword","newPassword","passwordConfirmation","setShowUpdatePassword","handleBlur","helperText","endAdornment","InputAdornment","onMouseDown","sx","btnDash","textTransform","btnDashSmall","btnHeroDarker","btnFocusContrast","btnContrastDarker","btnSupportDarker","btnAdditionalDarker","btnToggleButton","tooltipIcon","RHCTooltip","withStyles","ToggleButton","isActive","labelSuffix","disableElevation","Switch","stopPropagation","selectedColor","perfectScrollbarOptions","btnDashHuge","btnBulkBilling","btnBulkSwitcher","TileGrid","news","DashboardNews","activityfeed","opportunityFeed","OpportunityFeed","isBulkActive","setIsBulkActive","displayBulkBilling","setDisplayBulkBilling","showOpportunityRelevantInfo","setShowOpportunityRelevantInfo","useHistory","currentClient","setcurrentClient","showLetter","setShowLetter","clientOpportunityInterest","setClientOpportunityInterest","clientOpportunityID","setClientOpportunityID","clientOpportunityStatus","setClientOpportunityStatus","clientOpportunityRelevantInfo","setClientOpportunityRelevantInfo","fetchDashboardNews","fetchOpportunityFeed","handleClientAutocompleteChange","rel","startIcon","chgBulkBillingAvailability","bulkBillingAvailability","activeClients","upcomingBookings","bookingsOverPast30Days","bulkBilledRatioOverPast30Days","averageNumberSessionsPerClient","averageNumberRHCSessionsPerClient","totalSessionsDeliveredViaRHC","totalBulkBilledSessions","Carousel","itm","idx","Item","copy","interestcreatedon","putClientOpportunityInterest","providerStatus","withdrawInterest","float","interest","expressInterestModal","SendLetter","btnAOI","btnTT","InterestsPanels","activeInterestAreas","setActiveInterestAreas","showAOI","setShowAOI","showTT","setShowTT","handleAOIKeyAreasChange","providerAOI","issueIndex","chgProviderAOI","handleAOIClose","handleTTClose","tip","BookingApproval","providerBookingApproval","ProviderBookingApproval","viewOnlyMode","setViewOnlyMode","fetchProviderBookingApproval","filteredProviderBookingApproval","providerApprovalStatus","searchProviderBookingApproval","updateBooking","viewNote","charged","putApproveBooking","atype","rhcinvoiced","putRHCInvoicedBooking","getRowHeight","putBookingNote","DashboardPsychologist","isRecovery","showUpdatePassword","fetchHelpItems","fetchResourceItems","showRHCManagementLabel","rhcmanagement","isTodayMonday","ClientsPsychologist","haveBookings","sethaveBookings","loadArchive","setcurrentAction","setcurrentContractProviderFee","contractproviderfee","rhcndismanagment","setcurrentRHCNDISManagedLabel","setcurrentRHCContractManagedLabel","aoip","currentAction","currentContractProviderFee","currentRHCContractManagedLabel","topBookingPsy","getRowClassName","isNewClient","putClientArchive","changetype","ReferralsPsychologist","currentishDate","LabelComponent","TextEditor","BasicLayout","onFieldChange","appointmentData","restProps","newappointmentData","billingType","ResourceEditor","newprops","appointmentResources","fieldName","isMain","allowMultiple","filteredData","currentAvailability","fa","createdBy","currentBookings","addedAppointment","appointmentChanges","editingAppointment","currentDateChange","commitChanges","changeAddedAppointment","changeAppointmentChanges","changeEditingAppointment","FETCHBOOKINGS","prevProps","setState","startingAddedId","ADDAVAILABILITY","changeKey","changedData","CHGAVAILABILITY","CHGBOOKING","deleteData","DELAVAILABILITY","CANCELBOOKING","resources","firstDayOfWeek","onCurrentDateChange","onCommitChanges","onAddedAppointmentChange","onAppointmentChangesChange","onEditingAppointmentChange","startDayHour","endDayHour","cellDuration","appointmentComponent","Appointment","appointmentContentComponent","AppointmentContent","showOpenButton","showCloseButton","showDeleteButton","resourceEditorComponent","labelComponent","textEditorComponent","basicLayoutComponent","mainResourceName","connect","ADD_AVAILABILITY","CHG_AVAILABILITY","DEL_AVAILABILITY","PUT_BOOKING","FETCH_BOOKINGS","AvailabilityPsychologist","referenceFundingTypes","BookingsPsychologist","InvoiceDetail","fetchMedipassCodes","fetchMedipassClients","medipassCodes","MedipassCodes","medipassBookingDates","MedipassBookingDates","MedipassProviderClients","clientSelect","setClientSelect","invoiceitems","invoiceItems","setInvoiceItems","lineno","lineNumber","setLineNumber","newEntry","setNewEntry","submitError","setSubmitError","invoiceeditable","clientNames","setClientNames","prevProviderClients","setPrevProviderClients","currentProviderClients","setCurrentProviderClients","suburb","clientSuburb","codes","setCodes","prevCodes","setPrevCodes","currentCodes","setCurrentCodes","newCodes","code","bookingDates","setBookingDates","bookingTotal","prevBookingDates","setPrevBookingDates","currentBookingDates","setCurrentBookingDates","newBookingDates","i2","l2","prevClientID","setPrevClientID","fetchMedipassBookingDates","MyCommandCell","inEdit","editField","isNewItem","confirm","findIndex","record","newData","generateID","unshift","discard","cancel","originalItem","enterEdit","cn","disableClearable","setClientID","onChangeProviderClients","onItemChange","specificCode","newDataItem","codeProblem","bookingProblem","putMedipassInvoice","invoiceID","cell","dataValue","dataIndex","syntheticEvent","InvoicesPsychologist","fetchPaymentAPI","fetchMedipassInvoices","paymentAPI","PaymentAPI","medipassInvoices","MedipassInvoices","prevMedipassInvoices","setPrevMedipassInvoices","currentMedipassInvoices","setCurrentMedipassInvoices","currentInvoiceID","setCurrentInvoiceID","setCurrentClientID","currentClientName","setCurrentClientName","currentClientSuburb","setCurrentClientSuburb","currentClientSelect","setCurrentClientSelect","currentInvoiceItems","setCurrentInvoiceItems","currentInvoiceEditable","setCurrentInvoiceEditable","currentLineNo","setCurrentLineNo","DateFormatter","formatDate","openConnection","medipassTransactionSDK","setConfig","env","apiKey","secureapi","appId","appVersion","transactions","downloadPDF","transactionId","medipasstransactionid","displayMedipass","clientsuburb","maxlineno","o","download","referral_issueDateString","claimItems","itemCode","serviceDateString","servicedate","price","isGross","quantity","isTaxable","medipassSDK","referral_providerNumber","renderCreateTransaction","funder","providerNumber","invoiceReference","patient","refId","clientfirstname","clientsurname","clientmobilephone","clientdob","accountNumber","clientmedicareno","clientmedicarereferenceno","sex","clientgender","claimableItems","funderData","medicare","referral_providerName","referrerType","referral_referrerType","issueDateString","period","referral_period","periodDescription","referral_periodDescription","webhooks","url","disableModifyServiceItems","onSuccess","transaction","onError","onCancel","medipassSubmit","filteredMedipassCodes","medipasscode","currentCodeID","setCurrentCodeID","currentCode","setCurrentCode","istemplate","thisCode","putMedipassCode","BookingStatusDropDownCell","localizedData","BookingServiceDropDownCell","BookingSubPaymentTypeDropDownCell","localizedDataClinicalReducedGap","localizedDataReducedGap","localizedDataClinicalFullFee","localizedDataFullFee","service","PlatformInvoicesPsychologist","fetchSingleBillable","BillableSingleIntents","currentBillableIntents","setCurrentBillableIntents","subpaymentType","today","dd","mm","getlastDayofMonth","newerData","ProviderProgramBio","providerProgram","ProgramProviderBio","programbio","providerBio","setProviderBio","onCloseCustomBio","putProviderProgramBio","ProfilePsychologist","fundingTypesReference","mbsServicesReference","currentprofilepicture","setcurrentprofilepicture","psychologistInit","newInsuranceFile","keyAreas","pdfpassword","ahpraRegisrationNo","mfaConfigured","previewFile","setPreviewFile","showCustomBio","setShowCustomBio","insuranceFileClear","setInsuranceFileClear","providerRegistrationView","setProviderRegistrationView","handleCustomBioClose","aoi_tt","aoi_providerinterest","keyAoi","ttAoi","piAoi","therapytypes","typeError","psychologistAreasOfInterest","nullable","makePreview","Promise","resolve","reject","reader","FileReader","readAsDataURL","fileToDataUri","currentValue1","currentValue2","currentValue3","currentValue4","ListItemSecondaryAction","programID","fetchProviderProgramBio","newProfilePicture","ProviderSecurity","profileExistingPassword","FilesPsychologist","HomePagePsychologist","Platform","transform","create","shortest","ClientActions","fetchClientRegistered","ClientRegisteredPsychologists","mypsychologist","hourly","DashboardClient","ssoFormDisplay","allFormData","AllFormData","formDataToDo","formDataStatus","fetchReferrals","fetchAllFormData","showNewNote","setShowNewNote","loadFormDataEntry","getBookings","Number","providerid","gpid","postClientNote","ProfileClient","ProvisionalAreasOfInterest","clientInit","clientFundingTypeID","differenceInYears","BookingsClient","FilesClient","SearchClient","showBookingExistsError","setShowBookingExistsError","searchList","setSearchList","previousMatching","setPreviousMatching","currentPsychologistName","setCurrentPsychologistName","setCurrentGPName","searchType","setSearchType","searchName","setSearchName","searchAOI","setSearchAOI","filteredPsychologists","searchPsychologist","savePsychologist","HomePageClient","DashboardReferrer","YoutubeEmbed","embedId","frameBorder","allow","allowFullScreen","referrerState","textDecoration","ProfileReferrer","newpPasswordconfirmation","newPasswordconfirmation","HomePageReferrer","ErrorPage1","backgroundImage","ErrorPage2","ErrorPage3","ErrorPage4","ErrorPage5","ErrorPage6","ErrorsPage","Logout","setAdminInitialState","Component","hasAuthToken","QuickPanelToggler","panel","KTOffcanvas","overlay","baseClass","closeBy","toggleBy","data-toggle","data-placement","OverlayTrigger","Topbar","isDashStyle","noteCount","helpItems","HelpItems","resourceItems","ResourceItems","showResources","setShowResources","renderLink","pdf_url","youtube_url","HMenuItemInner","parentItem","itemCssClassWithBullet","badge","HMenuColumn","currentUrl","heading","HMenuItem","getItemAttrSubmenuToggle","isMenuItemIsActive","isMenuRootItemIsActive","_subItem","_column","getItemCssClasses","menuType","customClass","getItemMenuSubmenuClass","alignment","rootArrowEnabled","aria-haspopup","data-ktmenu-submenu-toggle","data-ktmenu-submenu-mode","data-ktmenu-dropdown-toggle-class","offcanvasOptions","HMenu","offCanvasCommonRef","createRef","ktMenuCommonRef","initOffCanvas","initKTMenu","menuOptions","tablet","slideSpeed","expandAll","menuDesktopMode","KTMenu","headerSelfSkin","disabledAsideSelfDisplay","ktMenuClasses","ulClasses","getHeaderLogo","withRouter","config","AnimateLoading","routeChanged","nextProps","animateTimeout","stopAnimate","animateInterval","stopAnimateTimeout","Progress","RHCHeader","_title","_desc","_defs","_g","first","headerCommonRef","menuHeaderDisplay","headerAttributes","roledesc","headerClasses","pageTitle","_extends","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_ref","svgRef","viewBox","stroke","strokeWidth","fill","fillRule","points","opacity","ForwardRef","QuickActionsDropdownToggle","QuickActions","Dropdown","drop","alignRight","Toggle","Menu","data-original-title","y","rx","SubHeader","subheaderCssClasses","subheaderContainerCssClasses","subheaderMobileToggle","HeaderMobile","toggleButtonRef","KTToggle","toggleOptions","headerLogo","asideDisplay","headerMenuSelfDisplay","headerMobileCssClasses","headerMobileAttributes","targetState","togglerState","Brand","ktToggleRef","brandClasses","asideSelfMinimizeToggle","headerStickyLogo","MenuSection","MenuItemSeparator","MenuItemText","defaultMessage","MenuSubmenu","separator","MenuItem","asideLeftLIRef","isDropdown","submenuToggle","mouseEnter","mouseLeave","subItem","onMouseEnter","onMouseLeave","MenuList","AsideLeft","asideMenuRef","outsideTm","insideTm","kUtilIsResponsiveRange","initMenu","setupMenuOptions","asideMenuAttr","asideClassesFromConfig","data-ktmenu-vertical","disableAsideSelfDisplay","asideOffCanvasRef","menuCanvasOptions","disableScroll","ScrollTop","scrollTopCommonRef","HtmlClassService","header_container","header_mobile","header_menu","aside_menu","subheader_container","content_container","footer_container","attributes","initLayout","initLoader","initHeader","initSubheader","initContent","initAside","initFooter","initSkin","_selfBodyClass","cssClass","additionalHeaderCssClass","asideSubmenuDHoverTimeout","QuickPanel","setTab","_tabName","selectedTab","setClientForDisplay","SET_CLIENT_FOR_DISPLAY","FETCHACTIVITYFEED","Container","defaultActiveKey","Nav","Link","Content","Pane","SET_FILTERS","FETCH_ACTIVITYFEED","contentContainerClasses","useRouteMatch","cssClassesState","setCssClassesState","fullClasses","startAnimation","timeOutId","HTMLClassService","selfLayout","subheaderDisplay","desktopHeaderDisplay","customiserClass","contentCssClasses","gridClasses","username","password","browserTZ","totpToken","injectIntl","intl","validate","setStatus","resolvedOptions","token","err","formatMessage","isRequested","setIsRequested","ForgotPasswordSchema","formik","useFormik","totpEntry","passwordconfirmation","passwordUpdate","dateofbirth","EmailLoginSchema","AuthPage","Login","ForgotPassword","LoginEmail","BackupCode","Totp","PasswordUpdate","EAPRegistrationPage","ClientRegistrationPage","NDISRegistrationPage","useParams","Registration","loadInviteAOI","aoiTouched","setaoiTouched","browserTZMS","tz","ianaName","tzIndex","step1","step2","userutcOffset","healthCareCard","naturalDisaster","bulkBilledReason","reducedGapReason","step3","step4","step5","currentStep","steps","setSteps","setStepValue","newSteps","selectedPsychologist","aoiProgram","fixAOI","gpNewSteps","supervisionNewSteps","provisionalNewSteps","socialNewSteps","nurseNewSteps","occupationalNewSteps","nthqldphnNewSteps","lgbtiqAoi","lgbtiqNewSteps","periNatalAoi","periNatalNewSteps","eapNewSteps","ndisNewSteps","programNI","aoiProgramNI","programNewSteps","PageWrapper","SelectPsychologist","ClientRegistrationForm","ClientRegistrationNotReady","ClientRegistrationConfirmation","ClientSupportFormConfirmation","linkItem","setChecked","psychologistsCount","paymentTypeSelect","specialAOI","programClientSelect","submitAOI","registeredFetch","programBulkBilling","currentbookingdate","setcurrentbookingdate","showpopoverTimeZone","setshowpopoverTimeZone","childModeAOI","childMode","previousPaymentType","setPreviousPaymentType","previousReducedGapReason","setPreviousReducedGapReason","previousBulkBilledReason","setPreviousBulkBilledReason","displayNoProvisionalMessage","setDisplayNoProvisionalMessage","showMoreProviders","setShowMoreProviders","MHCPFile","agreementAcceptance","privateClient","referrerid","backgroundinformation","gpname","gpclinicname","locality","PopulateProviders","useFormikContext","compareBulkBillingNextAvailable","temp","aoiCount","searchAOISpecificPsychologist","clientRegistrationSort","partA","partB","nextAvailableSort","localeCompare","validPsychologists","searchAllPsychologist","newAOI","existingAOI","popoverTimeZone","Popover","rowcount","inviteInit","clientInvite","setClientInvite","previousSteps","setPreviousSteps","FormLabel","defaultShow","bordered","hover","toDate","emailDuplicate","showEmailDuplicate","setShowEmailDuplicate","checkEmailDuplicate","newEmailDuplicate","gpperinatal","checkedProgram","setCheckedProgram","handleToggleProgram","postClient","backdrop","keyboard","linkIcon","linkIconSelected","backgroundSize","PsychologistRegistrationPage","areasOfInterest_focus","areasOfInterest_other","currentprofilepicturetouched","setcurrentprofilepicturetouched","regStatus","setregStatus","psychologistInvite","prevpsychologistInvite","setprevpsychologistInvite","calc_hourlyrate","calc_standardFeeOutOfPocket","calc_outOfPocketStandard","calc_medicareRebate","medicarerebate","calc_reducedFee","calc_reducedFeeOutOfPocket","calc_outOfPocket","toFixed","newValues","RegistrationConfirmation","enableLogin","PsychologistInvitationPage","PsychologistConfirmation","aapimemberno","ReferrerInvitationPage","ReferrerConfirmation","organisation","SurveyAuth","loading","setLoading","runOnce","setRunOnce","ssoStatus","searchParams","useLocation","URLSearchParams","checkFormStatus","spinner","EmailAuth","LicenseInfo","setLicenseKey","Routes","useLastLocation","urls","isAuthorized","isTotp","isForcePasswordChange","userLastLocation","shallowEqual","SurveyAuthPage","EmailAuthPage","LogoutPage","roleCheckLayout","App","basename","Suspense","interceptors","request","use","getState","headers","Authorization","originalRequest","_retry","res","SET_INITIAL","ReactDOM","DataGrid","setService","pdfGen","gpFax","preview","currentLoadingPreview","setcurrentLoadingPreview","previewPDF","PreviewPDF","fetchFormData","pdfWindow","open","write","encodeURI","stop","clearPreviewPDF","readonly","nfileUpload","fileHandler","generateFileHandle","d2","myValues","handleMyChange","sigPad","getTrimmedCanvas","toDataURL","onTouchEnd","canvasProps","tempSchema","arrayPointer","fileUploadItem","fileHandle","putFormData","q","putFaxStatus","Savesubmit","editedOn","callerRole","fetchPreviewPDF","answers","showPDF","SET_CONSTANTS","FETCH_CONSTANTS","SET_TIMEZONE","FETCH_TIMEZONE","SET_AREASOFINTEREST","FETCH_AREASOFINTEREST","FETCH_SUPERVISIONAREAS","SET_SUPERVISIONAREAS","SET_MBSSERVICES","FETCH_MBSSERVICES","SET_FUNDINGTYPES","FETCH_FUNDINGTYPES","FETCH_SUNDAYTHISWEEK","SET_SUNDAYTHISWEEK","SET_MEDICALPRACTICES","FETCH_MEDICALPRACTICES","SET_MEDICALPRACTITIONERS","FETCH_MEDICALPRACTITIONERS","FETCH_TAGS","FETCH_CONTEXTS","PUT_TAG","FETCH_USERS","PUT_USER","RUN_ETL","Constants","referenceName","grid","currentCache","isCached","retData","caller","object","actionPayload","classBase","classShown","classOverlay","isShown","togglerClass","timeNow","_","isEqual","autoScroll","autoScrollSpeed","reset","eventHandlers","pauseDropdownHoverTime","reload","resetSubmenuProps","handleSubmenuAccordion","getSubmenuMode","isConditionalSubmenuDropdown","handleSubmenuDrodownHoverEnter","handleSubmenuDrodownHoverExit","handleSubmenuDropdownClick","handleSubmenuDropdownTabClick","handleLinkClick","submenus","resumeDropdownHover","showSubmenuDropdown","hideSubmenuDropdown","hideSubmenuDropdowns","handleSubmenuDropdownClose","shown","li","subnav","closables","el_","submenu_","scrollToItem","classAlso","cnt","list","createSubmenuDropdownClickDropoff","dropoff","pauseDropdownHover","date","resetActiveItem","i_","len_","setActiveItem","getBreadcrumbs","submenuLink","getPageTitle","scrollReInit","hideDropdown","hideDropdowns","toggleOn","toggleOff","fetchPayments","fetchSingleBillableIntents","fetchIntent","fetchSearchClientData","fetchSearchBookingData","putOpportunityInterest","putMedipassCodes","putBookingBilling","putRHCPaid","putMedipassInvoices","putInvoiceStatus","putBillableEmails","setClientViewableFlag","putMedicalPractitioner","putInterestedStatus","postPsychologistDetail","sendPsychologistReferral","postClientDetail","putCard","putApikey","putArchiveClient","postBooking","putBooking","putBillableBooking","postAvailability","putAvailability","deleteAvailability","putError","SET_CACHE","SET_INTERESTED","FETCH_HELPITEMS","FETCH_RESOURCEITEMS","PUT_MEDICALPRACTICE","PUT_MEDICALPRACTITIONER","FETCH_SOURCE","FETCH_CLIENTFUTUREBOOKINGSTATUS","SET_CLIENTFUTUREBOOKINGSTATUS","FETCH_INTERESTED","PUT_INTERESTED","FETCH_REGISTERED","SET_REGISTERED","FETCH_CLIENTREGISTERED","SET_CLIENTREGISTERED","FETCH_OPPORTUNITIES","SET_OPPORTUNITIES","PUT_OPPORTUNITY","FETCH_REFERRALSVIEW","FETCH_REFERRALS","SET_REFERRALS","PUT_REFERRAL","PUT_REFERRALSTATUS","FETCH_FAXES","SET_FAXES","FETCH_FAXPDF","SET_FAXPDF","FETCH_INTENT","SET_INTENT","PUT_CARD","PUT_CLIENT_FLAG","PUT_FAX_FLAG","PUT_INTERESTEDPROVIDER_FLAG","PUT_CLIENTINVITE_FLAG","PUT_FAX_CLIENTNAME","PUT_CLIENT_TASKFLAG","PUT_ARCHIVECLIENT","PUT_INVOICESTATUS","SEND_PSYCHOLOGISTREFERRAL","SEND_PSYCHOLOGISTINVITE","POST_PSYCHOLOGISTINVITE","DEL_PSYCHOLOGISTINVITE","PUT_PSYCHOLOGISTDATA","POST_PSYCHOLOGISTDATA","PUT_APIKEY","POST_CLIENTINVITE","PUT_CLIENTINVITE","SEND_CLIENTINVITE","SEND_CLIENTINVITEREMINDER","SEND_SENDCALLUNSUCCESSFULREMINDER","DEL_CLIENTINVITE","FETCH_CLIENTINVITES","FETCH_CLIENTS","FETCH_CLIENT","SET_CLIENTINVITES","SET_CLIENTS","PUT_CLIENT","CLEAR_CLIENT","PUT_CLIENTDATA","POST_CLIENTDATA","PUT_CLIENTPSYCHOLOGIST","FETCH_PAYMENTAPI","SET_PAYMENTAPI","FETCH_NOTES","SET_NOTES","POST_NOTE","POST_CLIENTNOTE","FETCH_TODOS","PUT_TODO","FETCH_FILES","SET_FILES","POST_FILE","DELETE_FILE","SET_CLIENTVIEWABLEFLAG","FETCH_REFERRERS","SET_REFERRERS","PUT_REFERRER","CHG_BULKBILLINGAVAILABILITY","SET_AVAILABILITY","FETCH_AVAILABILITY","SET_BOOKINGS","FETCH_MATCHING","SET_MATCHING","FETCH_MATCHINGAVAILABILITY","SET_MATCHINGAVAILABILITY","CHG_PROVIDERAOI","FETCH_BOOKING","SET_BOOKING","ADD_BOOKING","PUT_XEROCONTACTLINK","SET_XEROCONTACTLINK","PUT_XERONDISCONTACTLINK","SET_XERONDISCONTACTLINK","PUT_BOOKINGBILLING","PUT_RHCPAID","FETCH_BILLABLE","FETCH_BILLABLEALL","FETCH_BILLABLECONTRACT","FETCH_BILLABLENTHQLDPHN","FETCH_BILLABLENDIS","FETCH_BILLABLECONTRACTPROVIDER","FETCH_BILLABLENDISPROVIDER","FETCH_SINGLEBILLABLE","SET_BILLABLE","SET_BILLABLECONTRACT","SET_BILLABLENTHQLDPHN","SET_BILLABLENDIS","SET_BILLABLECONTRACTPROVIDER","SET_BILLABLENDISPROVIDER","SET_SINGLEBILLABLE","PUT_BILLABLEBOOKING","CREATE_BILLABLEEMAILS","CREATE_INVOICES","CREATE_INVOICESCONTRACT","CREATE_INVOICESNTHQLDPHN","CREATE_INVOICESNDIS","CREATE_INVOICESNDISPROVIDER","CREATE_INVOICESCONTRACTPROVIDER","CREATE_PAYMENTS","FETCH_PAYMENTS","SET_PAYMENTS","FETCH_MEDIPASSINVOICES","SET_MEDIPASSINVOICES","FETCH_MEDIPASSCODES","SET_MEDIPASSCODES","FETCH_MEDIPASSBOOKINGDATES","SET_MEDIPASSBOOKINGDATES","PUT_MEDIPASSCODES","PUT_MEDIPASSINVOICES","FETCH_MEDIPASSCLIENTS","SET_MEDIPASSCLIENTS","FETCH_REPORT","SET_REPORT","FETCH_TAGVALUES","PUT_TAGVALUES","FETCH_DASHBOARDNEWS","FETCH_BOOKINGTYPESTATISTICS","SET_BOOKINGTYPESTATISTICS","SET_DISPLAYINVITE","CLEAR_DISPLAYINVITE","FETCH_INVOICELOG","SET_INVOICELOG","FETCH_CONTRACTS","SET_CONTRACTS","PUT_CONTRACT","FETCH_PROGRAMS","SET_PROGRAMS","PUT_PROGRAM","FETCH_SURVEYS","SET_SURVEYS","PUT_SURVEY","PUT_FAXSTATUS","FETCH_BOOKINGBILLABLECSV","SET_BOOKINGBILLABLECSV","FETCH_POWERBIXLSX","SET_POWERBIXLSX","SET_ACTIVITYFEED","PUT_PROVIDERPASSWORD","FETCH_OPPORTUNITYFEED","SET_OPPORTUNITYFEED","PUT_OPPORTUNITYINTEREST","PUT_RESETINTERESTEDPROVIDERS","SET_SEARCHRESULTS","FETCH_SEARCHCLIENTDATA","SET_SEARCHBOOKINGRESULTS","FETCH_SEARCHBOOKINGDATA","INITALISE_INVITES","SET_BOOKINGSTATUS","SET_PROGRESS_STATUS","FETCH_STATISTICS","SET_STATISTICS","FETCH_BOOKINGBILLING","SET_BOOKINGBILLING","FETCH_ADMINUSER","SET_ADMINUSER","PUT_ADMINUSER","FETCH_CLIENTSBYDAY","SET_CLIENTSBYDAY","FETCH_CLIENTSBYWEEK","SET_CLIENTSBYWEEK","FETCH_CLIENTREGISTRATIONSBYDAY","SET_CLIENTREGISTRATIONSBYDAY","FETCH_PROVIDERPROGRAMBIO","SET_PROVIDERPROGRAMBIO","PUT_PROVIDERPROGRAMBIO","FETCH_PROVIDERBOOKINGAPPROVAL","SET_PROVIDERBOOKINGAPPROVAL","PUT_PROVIDERBOOKINGAPPROVAL","PUT_APPROVEBOOKING","PUT_RHCINVOICEDBOOKING","PUT_BOOKINGNOTE","FETCH_NTHQLDPHNSTATISTICS","FETCH_NTHQLDPHNISSUES","FETCH_NTHQLDPHNDETAILS","SET_NTHQLDPHNSTATISTICS","SET_NTHQLDPHNISSUES","SET_NTHQLDPHNDETAILS","FETCH_PROVIDERSTATISTICS","SET_PROVIDERSTATISTICS","BookingTypeStatistics","Referral","Medicalpractitioner","Medicalpractice","ClientRegistration","Payments","Intent","Cancellations","FAXCounter","SMSCounter","DashboardMetrics","Fax","GP","Financial_Counsellor","Client_Registration","Invoice","clientsFlags","clientsSpecialisationType","todoStatus","toLocaleString","dateStyle","resultCount","count","faxBlob","exportCSV","progressStatusPayload","intentVars","encodedVars","intentReference","switchDataType","DataType","Value","Name","filterstate","fromEntries","delete","fetchStripeIntent","changeInterestedStatus","putBillableAppointment","putCreateProviderBillableEmails","putProviderBookingApproval","takeEvery","collectionName","thisValue","dataValues","gridData"],"mappings":"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","file":"static/js/main.0868f1c4.chunk.js","sourcesContent":["import React, { useEffect, useState, useCallback } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { Button, Modal, Form, Row, Col, InputGroup } from \"react-bootstrap\";\r\nimport { Paper, Grid, TextField, MenuItem, Select, makeStyles } from '@material-ui/core';\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { Document, Page, pdfjs } from 'react-pdf/dist/esm/entry.webpack';\r\nimport pdfjsWorker from \"pdfjs-dist/build/pdf.worker.entry\";\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport * as Reference from \"../../../store/ducks/reference.duck\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport Alert from '@material-ui/lab/Alert';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport ClearIcon from '@material-ui/icons/Clear';\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\nimport { format } from \"date-fns\";\r\nimport SendLetter from \"../../../components/SendLetter\";\r\nimport { saveAs } from 'file-saver';\r\n\r\n// load worker thread for pdf operations\r\npdfjs.GlobalWorkerOptions.workerSrc = pdfjsWorker;\r\n\r\nconst useStyles = makeStyles(() => ({\r\n noBorder: {\r\n border: \"none\",\r\n },\r\n}));\r\n\r\nexport default function Faxes() {\r\n\r\n // UI state controls\r\n const [showFax, setShowFax] = useState(false)\r\n const [showGPLetter, setShowGPLetter] = useState(false)\r\n const [inviteError, setInviteError] = useState('')\r\n const [exportPDFStatus, setExportPDFStatus] = useState('Not Started')\r\n\r\n var [prev, setPrev] = useState(0)\r\n var [next, setNext] = useState(0)\r\n\r\n const userTZ = useSelector(state => state.auth.userTZ)\r\n const filters = useSelector(state => state.admin.Filters)\r\n\r\n // Init methods to create valid objects for passing to the API when posting\r\n const initFax = () => {\r\n return { id: 0, faxNumber: '', receivedOn: '' }\r\n }\r\n\r\n const initSource = useCallback(() => {\r\n return { id: 0, firstName: '', surname: '', phone: '', email: '', organisationname: '',description: '', status: 'Active' }\r\n },[])\r\n\r\n var [currentFax, setcurrentFax] = useState(initFax()); \r\n var [currentLoadingFax, setcurrentLoadingFax] = useState();\r\n var [currentinviteid,setcurrentinviteid] = useState(0);\r\n var [currentFirstName,setcurrentFirstName] = useState();\r\n var [currentPreferredName,setcurrentPreferredName] = useState();\r\n var [currentSurname,setcurrentSurname] = useState();\r\n var [currentEmail,setcurrentEmail] = useState();\r\n var [currentMobile,setcurrentMobile] = useState();\r\n var [currentMessage, setcurrentMessage] = useState('')\r\n var [currentAreasOfInterest, setcurrentAreasOfInterest] = useState([]);\r\n var [currentPsychologist, setcurrentPsychologist] = useState();\r\n var [currentTimeZone, setcurrentTimeZone] = useState(userTZ ? userTZ : 'AUS Eastern Standard Time');\r\n var [currentSlot, setcurrentSlot] = useState();\r\n var [currentAppointmentType, setcurrentAppointmentType] = useState('0');\r\n var [currentProviderType, setcurrentProviderType] = useState();\r\n\r\n\r\n // All state hooks required\r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Admin.actions.fetchFaxes()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchRegistered()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchAreasOfInterest('ALL')) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchTimeZone()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchClientInvites({})) }, [dispatch] )\r\n \r\n useEffect( () => { dispatch(Admin.actions.fetchMatching( { providertype:'any', invite : false, availabilitytype : 'New' })) }, [dispatch] )\r\n\r\n const faxes = useSelector(state => state.admin.Faxes)\r\n\r\n\r\n // const filteredFaxes = faxes.filter(fax => (fax.status === filters.faxesStatus || filters.faxesStatus === 'All' ) && (fax.clientname.toLowerCase().search(filters.faxTerm.toLowerCase()) > -1 || filters.faxTerm.length === 0));\r\n\r\n const searchFaxes = (fax) => {\r\n if( true\r\n && (fax.status === filters.faxesStatus || filters.faxesStatus === 'All' )\r\n && (fax.clientname.toLowerCase().search(filters.faxTerm.toLowerCase()) > -1 || fax.flagClean.toLowerCase().search(filters.faxTerm.toLowerCase()) > -1 || filters.faxTerm.length === 0)\r\n )\r\n {\r\n return fax\r\n } \r\n }\r\n \r\n const filteredFaxes = faxes.filter(fax => searchFaxes(fax))\r\n\r\n const invites = useSelector(state => state.admin.ClientInvites);\r\n const psychologists = useSelector(state => state.admin.Matching)\r\n // Setup variables for Psychology and Financial Lists of Psychologists \r\n const MatchingPsychologist = psychologists.filter(matching => (matching.providertype === 'Psychologist' || matching.providertype === 'Clinical' || matching.providertype === 'Occupational'))\r\n const MatchingFinancial = psychologists.filter(matching => matching.providertype === 'Financial')\r\n const MatchingGP = psychologists.filter(matching => matching.providertype === 'GP') \r\n \r\n const faxPDF = useSelector(state => state.admin.FaxPDF)\r\n const areasOfInterest = useSelector(state => state.reference.AreasOfInterest)\r\n // Setup variables for Psychology and Financial Areas of Interest (note GP's do not have areas of interest)\r\n const PsychologyAreasOfInterest = areasOfInterest.filter(area => area.providertype === 'Psychologist')\r\n const FinancialAreasOfInterest = areasOfInterest.filter(area => area.providertype === 'Financial')\r\n \r\n const timeZone = useSelector(state => state.reference.TimeZone)\r\n const matchingAvailability = useSelector(state => state.admin.MatchingAvailability)\r\n \r\n// useEffect( () => { \r\n// if (psychologists && psychologists.length > 0)\r\n// {\r\n// setcurrentPsychologist(psychologists[0])\r\n// console.log(psychologists[0])\r\n// setcurrentProviderType(psychologists[0].providertype)\r\n// // console.log('setting psychologist - done')\r\n// }\r\n// }, [psychologists] )\r\n\r\n\r\n // Paginaton controls\r\n const navFax = (index) => {\r\n loadFax(filteredFaxes[index])\r\n }\r\n\r\n // Load a fax from the list\r\n const loadFax = (thisFax) => {\r\n var index = filteredFaxes.indexOf(thisFax);\r\n setPrev(index > 0 ? index-1 : null);\r\n setNext(index < filteredFaxes.length -1 ? index+1 : null);\r\n\r\n setcurrentFax(thisFax)\r\n setcurrentLoadingFax(false);\r\n if(thisFax.faxBlobLength) {\r\n dispatch(Admin.actions.fetchFaxPDF(thisFax.id))\r\n }\r\n var tempInvite = invites.find(v => v.id === thisFax.clientregistrationid);\r\n loadInvite(tempInvite ? tempInvite : initInvite())\r\n setShowFax(true);\r\n }\r\n\r\n const saveFax = (thisFax) => {\r\n setcurrentFax(thisFax)\r\n // console.log('In Save Fax');\r\n if(exportPDFStatus === 'Not Started')\r\n {\r\n dispatch(Admin.actions.fetchFaxPDF(thisFax.id))\r\n setExportPDFStatus('Fetching')\r\n }\r\n\r\n }\r\n\r\n // grab the blob from state and tell the browser to download\r\n const downloadExport = useCallback(() => {\r\n // console.log('In Download Export');\r\n let exportDocName = '';\r\n if (currentFax.faxNumber.length === 0)\r\n {\r\n exportDocName = 'RHC-Fax-NoNumber';\r\n }\r\n else\r\n {\r\n exportDocName = 'RHC-Fax-' + currentFax.faxNumber;\r\n }\r\n if(faxPDF && faxPDF !== '')\r\n {\r\n const file = new Blob(\r\n [Buffer.from(faxPDF,'base64')], \r\n {type: 'application/pdf'});\r\n saveAs(file, `${exportDocName}.pdf`);\r\n }\r\n },[faxPDF,currentFax.faxNumber])\r\n\r\n // useEffect to fire when status is 'Fetching' and we get the result in redux\r\n useEffect( () => {\r\n if(exportPDFStatus === 'Fetching' && faxPDF && faxPDF !== '')\r\n {\r\n // console.log('In UseEffect');\r\n downloadExport()\r\n setExportPDFStatus('Not Started')\r\n }\r\n }, [exportPDFStatus, faxPDF,downloadExport])\r\n\r\n const loadLetter = (thisFax) => {\r\n setcurrentFax(thisFax)\r\n setcurrentLoadingFax(false);\r\n if(thisFax.faxBlobLength) {\r\n dispatch(Admin.actions.fetchFaxPDF(thisFax.id))\r\n }\r\n setShowGPLetter(true);\r\n }\r\n\r\n const initInvite = () => {\r\n return { \r\n id: 0,\r\n firstname: '',\r\n preferredname: '',\r\n surname: '',\r\n email: '',\r\n phone: '',\r\n message: '',\r\n clientAreasOfInterest: [],\r\n psychologistid: undefined,\r\n providertype:'Psychologist',\r\n appointmenttype: '0',\r\n status: '' }\r\n }\r\n\r\n const loadInvite = (thisInvite) => {\r\n setcurrentinviteid(thisInvite.id)\r\n setcurrentFirstName(thisInvite.firstname)\r\n setcurrentPreferredName(thisInvite.preferredname)\r\n setcurrentSurname(thisInvite.surname)\r\n setcurrentEmail(thisInvite.email)\r\n setcurrentMobile(thisInvite.phone)\r\n setcurrentMessage(thisInvite.message)\r\n var aoi = areasOfInterest.filter(( {issue} ) => thisInvite.clientAreasOfInterest.includes(issue))\r\n setcurrentAreasOfInterest(aoi)\r\n setcurrentTimeZone(thisInvite.timezone)\r\n setcurrentSlot(thisInvite.bookingdate)\r\n setcurrentAppointmentType(thisInvite.appointmenttype)\r\n setcurrentPsychologist(psychologists.find(row => row.id === thisInvite.psychologistid))\r\n setcurrentProviderType(thisInvite.providertype)\r\n setInviteError('')\r\n }\r\n\r\n // to generate token for invitation\r\n function uuidv4() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & (0x3 | 0x8));\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n \r\n function setFlag(event, id) {\r\n dispatch(Admin.actions.putFaxFlag({ id: id, flag: event.target.value }));\r\n }\r\n\r\n function setClientName(event, id) {\r\n dispatch(Admin.actions.putFaxClientName({ id: id, clientname: event.target.value }));\r\n }\r\n\r\n function handleFaxClose() {\r\n setShowFax(false);\r\n }\r\n\r\n function handleGPLetterClose() {\r\n setShowGPLetter(false);\r\n }\r\n\r\n // when changing psychologists, fetch their availability\r\n function handleMatchingAutocompleteChange(newValue) { \r\n if (newValue) {\r\n setcurrentPsychologist(newValue);\r\n setcurrentTimeZone(newValue.timezone);\r\n setcurrentSlot();\r\n dispatch(Admin.actions.fetchMatchingAvailability({ psychologistID: newValue.id, userTZ: newValue.timezone, availabilityType : 'New', invite : false }));\r\n }\r\n }\r\n\r\n function handleTimeZoneChange(value) {\r\n currentPsychologist && dispatch(Admin.actions.fetchMatchingAvailability({ psychologistID: currentPsychologist.id, userTZ: value, availabilityType : 'New', invite : false }));\r\n setcurrentTimeZone(value);\r\n setcurrentSlot();\r\n }\r\n\r\n function handleAppointmentTypeChange(value) {\r\n setcurrentAppointmentType(value);\r\n }\r\n\r\n\r\n // Sets size of fax pdf to pass to viewer\r\n const [numPages, setNumPages] = useState(null); \r\n function onDocumentLoadSuccess({ numPages }) {\r\n setNumPages(numPages);\r\n }\r\n \r\n\r\n \r\n // For a language that is designed to work with API it is primitive that I need to set a flag to stop the React_PDF from erroring when a PDF is not loaded \r\n if (!currentLoadingFax && faxPDF.length > 5)\r\n {\r\n setcurrentLoadingFax(true);\r\n }\r\n\r\n function validateEmail(email) \r\n {\r\n var re = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n return re.test(email);\r\n }\r\n\r\n // Action buttons\r\n function saveInvite(action) {\r\n // console.log('Saving');\r\n if (\r\n (currentFirstName === '' )\r\n || (currentMobile === '' )\r\n || (currentEmail.trim.length > 1 && !validateEmail(currentEmail)) \r\n || (currentEmail.trim.length > 1 && currentEmail.includes('mailto'))\r\n )\r\n { \r\n setInviteError('You must provide a first name and a valid mobile phone number (and a valid email address if one has been included).')\r\n }\r\n else \r\n {\r\n setInviteError('')\r\n var payload = {\r\n id: currentinviteid,\r\n faxid: currentFax.id,\r\n firstname: currentFirstName,\r\n preferredname: currentPreferredName,\r\n surname: currentSurname,\r\n email: currentEmail,\r\n phone: currentMobile,\r\n message: currentMessage,\r\n appointmenttype : currentAppointmentType,\r\n clientAreasOfInterest: currentAreasOfInterest.map(aoi => aoi.issue).join(\",\"),\r\n psychologistid: currentPsychologist ? currentPsychologist.id : undefined,\r\n timezone: currentTimeZone ? currentTimeZone : userTZ,\r\n bookingdate: currentSlot,\r\n providertype: currentProviderType,\r\n invitetoken: uuidv4(),\r\n status: 'Saved',\r\n source: initSource()\r\n }\r\n if(currentinviteid === 0) {\r\n dispatch(Admin.actions.postClientInvite(payload));\r\n } else {\r\n dispatch(Admin.actions.putClientInvite(payload));\r\n }\r\n // if(action === 'SaveAndSend'){\r\n // dispatch(Admin.actions.sendClientInvite(payload));\r\n // }\r\n setShowFax(false)\r\n }\r\n }\r\n\r\n const sendInvite = (id) => {\r\n dispatch(Admin.actions.sendClientInvite(invites.find(row => row.id === id)));\r\n }\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', hide: true },\r\n { field: 'clientregistrationid', headerName: 'clientregistrationid', hide: true },\r\n { field: 'faxNumber', headerName: 'Fax No', width: 130,\r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadFax(faxes.find(fax => fax.id === params.row.id))} className=\"cell-Link\">\r\n {params.value.length ? params.value : 'No number'}\r\n </div>\r\n </strong>\r\n ), },\r\n { field: 'flag', headerName: 'Follow-up', width: 250,\r\n cellClassName: (params) => params.row.flag.length > 0 ? 'flag-full-cell' : 'flag-empty-cell',\r\n renderCell: (params) => (\r\n <>\r\n <TextField \r\n variant=\"outlined\"\r\n name={`flag`} \r\n defaultValue={params.row.flag} \r\n onBlur={(event) => setFlag(event, params.row.id)}\r\n InputProps={{ classes: { notchedOutline:classes.noBorder, input: params.row.flag.length > 0 ? 'flag-full' : 'flag-empty' }, }}\r\n multiline\r\n maxRows={4}\r\n style= {{ width: '100%'}}\r\n onFocus={event => {\r\n event.target.select();\r\n }}>\r\n </TextField>\r\n </>\r\n )\r\n },\r\n { field: 'clientname', headerName: 'Client Name', width: 250,\r\n cellClassName: (params) => params.row.clientname.length > 0 ? 'flag-full-cell' : 'flag-empty-cell',\r\n renderCell: (params) => (\r\n <>\r\n <TextField \r\n variant=\"outlined\"\r\n name={`clientname`} \r\n defaultValue={params.row.clientname} \r\n onBlur={(event) => setClientName(event, params.row.id)}\r\n InputProps={{ classes: { notchedOutline:classes.noBorder, input: params.row.clientname.length > 0 ? 'flag-full' : 'flag-empty' }, }}\r\n style= {{ width: '100%'}}\r\n onFocus={event => {\r\n event.target.select();\r\n }}>\r\n </TextField>\r\n </>\r\n )\r\n },\r\n { field: 'receivedOn', type: 'dateTime', headerName: 'Received', width: 140, valueFormatter: ({ value }) => format(new Date(value), \"dd-MM-yyyy HH:mm\") },\r\n { field: 'initialPages', headerName: 'Pages', width: 90, sortable: false },\r\n { field: 'status', headerName: 'Status', width: 90, sortable: false },\r\n { field: 'clientFullName', type: 'date', headerName: 'Client', width: 160 },\r\n { field: 'none', headerName: 'Actions', width: 220,\r\n renderCell: (params) => (\r\n <>\r\n {params.row.clientregistrationid > 0 && params.row.status !== 'Registered' &&\r\n <>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={()=>sendInvite(params.row.clientregistrationid)} style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#eee\", marginRight: 14 }} >\r\n Resend\r\n </Button>\r\n </>\r\n }\r\n {(params.row.status === 'New' || params.row.status === 'GP Faxed') &&\r\n <>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={()=>loadLetter(faxes.find(fax => fax.id === params.row.id))} style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#eee\", marginRight: 14 }} >\r\n Send GP Fax\r\n </Button>\r\n </>\r\n }\r\n <Button variant=\"secondary\" size=\"sm\" onClick={()=>saveFax(faxes.find(fax => fax.id === params.row.id))} style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#FFFACD\", marginRight: 14 }} >\r\n Download\r\n </Button>\r\n </>\r\n ) \r\n }\r\n ];\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n <>\r\n <h4>\r\n Faxes\r\n </h4>\r\n\r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10 }}>\r\n <Grid item style={{ marginTop: 2, marginLeft: 2 }}> \r\n <Grid container>\r\n <Grid item> \r\n <InputGroup size=\"sm\">\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={filters.faxTerm}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'faxTerm', filterValue: event.target.value }))}\r\n autoComplete='OFF'\r\n style={{ maxWidth: 170, height: 35, backgroundColor: filters.faxTerm.length > 0 ? 'rgb(250 239 195)' : 'white' }}\r\n />\r\n <InputGroup.Append onClick={() => dispatch(Admin.actions.setFilters({ filterName: 'faxTerm', filterValue: '' }))}>\r\n <InputGroup.Text>\r\n <ClearIcon fontSize=\"small\" style={{ color: filters.faxTerm.length > 0 ? '#222222' : 'silver', marginLeft: -3 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Append>\r\n </InputGroup>\r\n </Grid>\r\n <Grid item style={{ marginLeft: 10 }}> \r\n <Form.Control as=\"select\" size=\"sm\" style={{ height: 35 }} defaultValue={filters.faxesStatus} onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'faxesStatus', filterValue: event.target.value }))}>\r\n <option value=\"All\">All</option>\r\n <option value=\"New\">New</option>\r\n <option value=\"Sent\">Sent</option>\r\n <option value=\"Registered\">Registered</option>\r\n <option value=\"Deleted\">Deleted</option>\r\n </Form.Control>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n\r\n <Paper style={{ height: 800 }}>\r\n <DataGrid rows={filteredFaxes} columns={columns} pageSize={10} rowsPerPageOptions={[10]} checkboxSelection={false} sortModel={[{ field: 'receivedOn', sort: 'desc' }]} />\r\n </Paper>\r\n\r\n <Modal show={showFax} onHide={handleFaxClose} dialogClassName=\"editInboundFaxDialog-modal\">\r\n <Modal.Header closeButton className=\"editInboundFax-modal\" style={{ padding: 10 }}>\r\n <Modal.Title style={{ marginTop: 6, width: \"75%\", }}>\r\n Fax {currentFax.faxNumber} on {format(new Date(currentFax.receivedOn ? currentFax.receivedOn : null), \"dd-MM-yyyy HH:mm\")} \r\n </Modal.Title>\r\n <div style={{ width: \"50%\", textAlign: \"right\"}}>\r\n {prev || prev === 0 ? <Button className=\"lightButtonOutlined\" variant=\"light\" size=\"sm\" onClick={()=>navFax(prev)} style={{ marginLeft: 20 }}>< Prev </Button> : null}\r\n {next ? <Button className=\"lightButtonOutlined\" variant=\"light\" size=\"sm\" onClick={()=>navFax(next)} style={{ marginLeft: 20 }}>Next ></Button> : null}\r\n </div>\r\n </Modal.Header>\r\n <Modal.Body className=\"editInboundFax-modal\" style={{ height: 700 }}>\r\n <Grid container spacing={2}>\r\n <Grid item md={7} style={{ height: 680, overflowY: \"scroll\", backgroundColor: \"white\" }}>\r\n {currentLoadingFax ? \r\n <Document\r\n file={'data:application/pdf;base64,'+faxPDF}\r\n onLoadSuccess={onDocumentLoadSuccess}\r\n >\r\n {Array.from(\r\n new Array(numPages),\r\n (el, index) => (\r\n <Page\r\n key={`page_${index + 1}`}\r\n pageNumber={index + 1}\r\n />\r\n ),\r\n )}\r\n </Document> : <div style={{ marginLeft: 15, marginTop: 15 }}>No fax document available</div>}\r\n </Grid>\r\n\r\n <Grid item md={5} >\r\n <h3>Client Invite</h3>\r\n <hr></hr>\r\n {inviteError !== '' ?\r\n <Alert severity=\"error\" style={{ marginBottom: 14 }}>\r\n {inviteError}\r\n </Alert>\r\n :\r\n null }\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>First Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileFirstName\" value={currentFirstName} onChange={(event) => setcurrentFirstName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Preferred Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"profilePreferredName\" value={currentPreferredName} onChange={(event) => setcurrentPreferredName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Surname</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileSurname\" value={currentSurname} onChange={(event) => setcurrentSurname(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Email</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileEmail\" value={currentEmail} onChange={(event) => setcurrentEmail(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Mobile Phone Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileMobile\" value={currentMobile} onChange={(event) => setcurrentMobile(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Provider Type</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentProviderType} onChange={(event) => setcurrentProviderType(event.target.value)}>\r\n <option value=\"Psychologist\">Psychologist</option>\r\n <option value=\"Financial\">Financial Counsellor</option>\r\n <option value=\"Occupational\">Occupational Therapist</option>\r\n <option value=\"Clinical\">Clinical Psychologist</option>\r\n <option value=\"GP\">GP</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Message</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentMessage\" value={currentMessage} onChange={(event) => setcurrentMessage(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {(currentProviderType !== 'GP') ?\r\n <>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Please select the area(s) of interest your client is wanting to address (or leave blank and they can select)</Form.Label>\r\n <Autocomplete\r\n id=\"aoi\"\r\n variant=\"outlined\"\r\n multiple\r\n options={(currentProviderType === 'Financial') ? FinancialAreasOfInterest : PsychologyAreasOfInterest }\r\n getOptionLabel={(option) => option.issue }\r\n value={currentAreasOfInterest}\r\n onChange={(event, newValue) => setcurrentAreasOfInterest(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: \"white\", }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"AOISelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null \r\n }\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Psychologist (type to search)</Form.Label>\r\n <Autocomplete\r\n id=\"psychologist\"\r\n variant=\"outlined\"\r\n options={(currentProviderType === 'Financial') ? MatchingFinancial : (currentProviderType === 'GP') ? MatchingGP : MatchingPsychologist }\r\n getOptionLabel={(option) => option.oneline }\r\n value={currentPsychologist}\r\n onChange={(event, newValue) => handleMatchingAutocompleteChange(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: \"white\", }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"PsySelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"8\">\r\n <Form.Group >\r\n <Form.Label>Timezone</Form.Label>\r\n <Select\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n value={currentTimeZone}\r\n onChange={(event) => handleTimeZoneChange(event.target.value)}\r\n style={{ width: '100%', backgroundColor: \"#ffffff\" }}\r\n displayEmpty\r\n inputProps={{ 'aria-label': 'Without label' }}\r\n >\r\n {timeZone && timeZone.map(row => (\r\n <MenuItem key={row.systemName} value={row.systemName} label={row.name}>{row.name}</MenuItem>\r\n ))}\r\n <MenuItem value={undefined}></MenuItem>\r\n </Select>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Appointment Type</Form.Label>\r\n <Select \r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n id='appointmentType'\r\n aria-label='Select Appointment Type'\r\n name='appointmentType'\r\n value={currentAppointmentType} \r\n onChange={(event) => handleAppointmentTypeChange(event.target.value)}\r\n style={{ width: '100%', backgroundColor: \"#ffffff\" }} >\r\n <MenuItem key='Video' value='0'>Video Call</MenuItem>\r\n <MenuItem key='Phone' value='1'>Phone Call</MenuItem>\r\n </Select>\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Booking Slot</Form.Label> \r\n <Select\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n value={currentSlot}\r\n onChange={(event)=>setcurrentSlot(event.target.value)}\r\n style={{ minWidth: 300, backgroundColor: \"#ffffff\" }}\r\n displayEmpty\r\n inputProps={{ 'aria-label': 'Without label' }}\r\n >\r\n {currentPsychologist && matchingAvailability.map(row => (\r\n <MenuItem value={row.fromDate}>{format(new Date(row.fromDate), \"dd/MM/yyyy h:mm aaaa\")}</MenuItem>\r\n ))}\r\n <MenuItem value={undefined}></MenuItem> \r\n </Select>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </Grid> \r\n </Grid> {/* End container for fax and details forms */} \r\n </Modal.Body> \r\n\r\n <Modal.Footer className=\"addresource-modal\"> \r\n <Button variant=\"secondary\" onClick={handleFaxClose}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"success\" onClick={() => saveInvite('Save')}>\r\n Save\r\n </Button>\r\n </Modal.Footer>\r\n \r\n </Modal>\r\n\r\n <Modal show={showGPLetter} onHide={handleGPLetterClose} dialogClassName=\"editInboundFaxDialog-modal\">\r\n <Modal.Header closeButton className=\"editInboundFax-modal\" style={{ padding: 10 }}>\r\n <Modal.Title style={{ marginTop: 6, width: \"75%\", }}>\r\n Fax {currentFax.faxNumber} on {format(new Date(currentFax.receivedOn ? currentFax.receivedOn : null), \"dd-MM-yyyy HH:mm\")} \r\n </Modal.Title>\r\n <div style={{ width: \"50%\", textAlign: \"right\"}}>\r\n {prev || prev === 0 ? <Button className=\"lightButtonOutlined\" variant=\"light\" size=\"sm\" onClick={()=>navFax(prev)} style={{ marginLeft: 20 }}>< Prev </Button> : null}\r\n {next ? <Button className=\"lightButtonOutlined\" variant=\"light\" size=\"sm\" onClick={()=>navFax(next)} style={{ marginLeft: 20 }}>Next ></Button> : null}\r\n </div>\r\n </Modal.Header>\r\n <Modal.Body className=\"editInboundFax-modal\" style={{ height: 700 }}>\r\n <Grid container spacing={2}>\r\n <Grid item md={7} style={{ height: 680, overflowY: \"scroll\", backgroundColor: \"white\" }}>\r\n {currentLoadingFax ? \r\n <Document\r\n file={'data:application/pdf;base64,'+faxPDF}\r\n onLoadSuccess={onDocumentLoadSuccess}\r\n >\r\n {Array.from(\r\n new Array(numPages),\r\n (el, index) => (\r\n <Page\r\n key={`page_${index + 1}`}\r\n pageNumber={index + 1}\r\n />\r\n ),\r\n )}\r\n </Document> : <div style={{ marginLeft: 15, marginTop: 15 }}>No fax document available</div>}\r\n </Grid>\r\n\r\n <Grid item md={5} >\r\n <h3>Send Fax to Referring GP</h3>\r\n <SendLetter type=\"Client\" form=\"Fax to GP Referrer from Admin\" faxID={currentFax.id} closeModal={setShowGPLetter} />\r\n </Grid>\r\n </Grid> {/* End container for fax and details forms */} \r\n </Modal.Body> \r\n\r\n <Modal.Footer className=\"addresource-modal\"> \r\n <Button variant=\"secondary\" onClick={handleGPLetterClose}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n \r\n </Modal>\r\n\r\n <div style={{border: \"solid rgb(215, 215, 215) 1px\", borderRadius: \"4px\", backgroundColor: \"white\"}}> \r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n />\r\n </div>\r\n </>\r\n )\r\n}\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { Button, Modal, Form, InputGroup } from \"react-bootstrap\";\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport { Paper, Grid, FormControl, Select, InputLabel, MenuItem, makeStyles } from '@material-ui/core';\r\nimport DateFnsUtils from '@date-io/date-fns';\r\nimport { MuiPickersUtilsProvider, KeyboardDatePicker,} from '@material-ui/pickers';\r\nimport GatherBillableDetail from \"../../../components/GatherBillableDetail\"\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport { saveAs } from 'file-saver';\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\n\r\n// Need to rewrite this - as it is not completely correct \r\n// In the world of confusion - please note the following invoicing process \r\n//\r\n// Today we are billing per booking using the Services Table to define the prices - each booking has a billable type that is set (or defaulted) when a booking is made\r\n//\r\n// Process \r\n// \r\n// GatherBillable.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to email providers a list of those to be billed at the end of the month if still eliglible. \r\n// - Can toogle bookings to cancelled/noshow as needed \r\n// Invoices.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to create Invoices in Xero for these providers. \r\n// - This essentially a copy of GatherBillable though expect this will change at client acceptance occurs. \r\n// InvoiceLog.js - This is a searchable log of invoices/clients/providers \r\n// \r\n// PlatformPsychologist.js - Lists unbilled boookings \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Can toogle bookings to cancelled/noshow as needed //\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n noBorder: {\r\n border: \"none\",\r\n },\r\n\tformControl: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: 120,\r\n\t},\r\n\tformControlWide: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: '100%',\r\n\t},\r\n\tselectEmpty: {\r\n\t marginTop: theme.spacing(2),\r\n\t},\r\n\tlabel: {\r\n\t backgroundColor: '#fff',\r\n\t paddingLeft: 3,\r\n\t paddingRight: 3,\r\n\t}\r\n }));\r\n\r\n const useStylesDatePicker = makeStyles({\r\n root: {\r\n \"& .MuiInputBase-root\": {\r\n height: 33,\r\n }\r\n }\r\n });\r\n\r\nexport default function GatherBillable() \r\n{\r\n const dispatch = useDispatch()\r\n const classes = useStyles();\r\n const classesDatePicker = useStylesDatePicker();\r\n\r\n const billableIntents = useSelector(state => state.admin.BillableIntents)\r\n const filters = useSelector(state => state.admin.Filters)\r\n const bookingBillableCSV = useSelector(state => state.admin.BookingBillableCSV);\r\n const [exportExcelStatus, setExportExcelStatus] = useState('Not Started')\r\n const [searchTerm, setSearchTerm] = useState('')\r\n\r\n\r\n useEffect( () => {\r\n dispatch(Admin.actions.fetchBillableIntents({ startDate: filters.invoiceStartDate, endDate: filters.invoiceEndDate})) }, \r\n [dispatch, filters.invoiceStartDate, filters.invoiceEndDate] \r\n )\r\n\r\n const searchBillableIntents = (billableIntent) => {\r\n if ( true\r\n && (billableIntent => billableIntent.psychologistName.toLowerCase().search(searchTerm.toLowerCase()) > -1 || searchTerm.length === 0)\r\n && (!filters.invoiceStatus || filters.invoiceStatus === 'All' || (billableIntent.billingstatus === filters.invoiceStatus || billableIntent.billingstatus === 'Multiple'))\r\n )\r\n {\r\n return billableIntent\r\n } \r\n }\r\n \r\n\r\n const filteredbillableIntents = billableIntents.filter(billableIntent => searchBillableIntents(billableIntent))\r\n const [showClients, setShowClients] = useState(false);\r\n const [providerClients, setProviderClients] = useState();\r\n const [psychologistID,setPsychologistID] = useState();\r\n const [providerName, setProviderName] = useState();\r\n const [providerType, setProviderType] = useState();\r\n\r\n\r\n // initial call from the download button - fires fetch action if needed, otherwise triggers download \r\n const exportFile = () => {\r\n if(exportExcelStatus === 'Not Started')\r\n {\r\n dispatch(Admin.actions.fetchBookingBillableCSV({ startDate: filters.invoiceStartDate, endDate: filters.invoiceEndDate, billableStatus: filters.invoiceStatus}))\r\n setExportExcelStatus('Fetching')\r\n }\r\n } \r\n\r\n // grab the blob from state and tell the browser to download\r\n const downloadExport = useCallback(() => {\r\n // Sort out filename\r\n let headingStartDate = ''; \r\n let headingEndDate = '';\r\n let headingStatus = '';\r\n //\r\n if (filters.invoiceStartDate === '')\r\n {\r\n headingStartDate = '2020-01-01'\r\n }\r\n else\r\n {\r\n headingStartDate = filters.invoiceStartDate;\r\n }\r\n if (filters.invoiceEndDate === '')\r\n {\r\n let yourDate = new Date();\r\n headingEndDate = yourDate.toISOString().split('T')[0];\r\n // console.log(headingEndDate);\r\n }\r\n else\r\n {\r\n headingEndDate = filters.invoiceEndDate;\r\n }\r\n if (filters.invoiceStatus === 'All')\r\n {\r\n headingStatus = '';\r\n }\r\n else\r\n {\r\n if (filters.invoiceStatus === 'Unbilled')\r\n {\r\n headingStatus = '-Unbilled Bookings';\r\n }\r\n else\r\n {\r\n headingStatus = '-Billed Bookings';\r\n }\r\n }\r\n //\r\n var exportDocName = 'RHC-Bookings- FROM-' + headingStartDate + '-TO-' + headingEndDate + headingStatus;\r\n if(bookingBillableCSV && bookingBillableCSV !== '')\r\n {\r\n const file = new Blob(\r\n [Buffer.from(bookingBillableCSV)], \r\n {type: 'text/csv'});\r\n saveAs(file, `${exportDocName}.csv`);\r\n }\r\n },[bookingBillableCSV,filters.invoiceStartDate,filters.invoiceEndDate,filters.invoiceStatus])\r\n\r\n // useEffect to fire when status is 'Fetching' and we get the result in redux\r\n useEffect( () => {\r\n if(exportExcelStatus === 'Fetching' && bookingBillableCSV && bookingBillableCSV !== '')\r\n {\r\n downloadExport()\r\n setExportExcelStatus('Not Started')\r\n }\r\n }, [exportExcelStatus, bookingBillableCSV,downloadExport])\r\n\r\n\r\n\r\n // function sendProviderEmail() \r\n // {\r\n // if (process.env.REACT_APP_DEBUG) \r\n // {\r\n // console.log ('Generating Billable Client Emails to Psychologists');\r\n // }\r\n // dispatch(Admin.actions.putCreateProviderBillableEmails());\r\n // }\r\n\r\n\r\n const loadClients = (thisPsychologist) => {\r\n setProviderName(thisPsychologist.psychologistName);\r\n setProviderClients(thisPsychologist.clients);\r\n setPsychologistID(thisPsychologist.id);\r\n setProviderType(thisPsychologist.providerType)\r\n setShowClients(true);\r\n }\r\n\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', width: 100, hide: true },\r\n { field: 'psychologistSurname', headerName: 'psychologistSurname', width: 100, hide: true },\r\n { field: 'psychologistName', headerName: 'Name', width: 300, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadClients(billableIntents.find(intent => intent.psychologistName === params.row.psychologistName))} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'psychologistEmail', headerName: 'Email', width: 300 },\r\n { field: 'xero', headerName: 'Xero Link', width: 200 },\r\n { field: 'totalClients', headerName: 'Bookings', width: 200},\r\n { field: 'total', headerName: 'Total', width: 120 },\r\n { field: 'billingstatus', headerName: 'Billing Status', width: 150 }\r\n ];\r\n\r\n\r\n function handleClientsClose() {\r\n setShowClients(false);\r\n } \r\n\r\n const handleSearch = (event) => {\r\n const searchTerm = event.target.value \r\n setSearchTerm(searchTerm)\r\n }\r\n\r\n\r\n return (\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h4 style={{ marginBottom: 12 }}>Review Provider Bookings</h4></Grid>\r\n </Grid>\r\n\r\n <Paper> \r\n <Grid container style={{ padding: 10 }}>\r\n <Grid item style={{ paddingLeft: 2, paddingRight: 10 }}>\r\n {/* <Grid item style={{ marginTop: 2, marginLeft: 10 }}> */}\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(event) => handleSearch(event)}\r\n autoComplete='OFF'\r\n style={{ height: 33 }}\r\n />\r\n </InputGroup>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl} size=\"small\">\r\n <InputLabel id=\"invoiceStatus-label\" className={classes.label}> Invoice Status</InputLabel>\r\n <Select\r\n labelId=\"InvoiceStatus-label\"\r\n id=\"InvoiceStatus\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\", height: 33 }}\r\n value={filters.invoiceStatus}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'invoiceStatus', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n <MenuItem value='Billed'>Billed</MenuItem>\r\n <MenuItem value='Unbilled'>UnBilled</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"Start Date\"\r\n value={filters.invoiceStartDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'invoiceStartDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"End Date\"\r\n value={filters.invoiceEndDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'invoiceEndDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </Grid>\r\n </MuiPickersUtilsProvider>\r\n <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => exportFile()}>\r\n Download\r\n </Button>\r\n </Grid> \r\n\r\n {/* <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => sendProviderEmail()}>\r\n Generate Billable Emails to Providers\r\n </Button>\r\n </Grid> */}\r\n </Grid>\r\n </Paper>\r\n\r\n\r\n { billableIntents ? \r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={filteredbillableIntents} columns={columns} pageSize={10} checkboxSelection={false} rowHeight={40} sortModel={[{ field: 'psychologistSurname', sort: 'asc' }]} />\r\n </Paper>\r\n : ('None')\r\n }\r\n\r\n <Modal show={showClients} onHide={handleClientsClose} dialogClassName=\"editprofile-modal\">\r\n <Modal.Header closeButton className=\"editprofile-modal\">\r\n <Modal.Title>Provider Bookings - {providerName} </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"editprofile-modal\">\r\n <GatherBillableDetail\r\n billablestatus={filters.invoiceStatus}\r\n clients={providerClients}\r\n psychologistID={psychologistID}\r\n closeClients={setShowClients}\r\n providerPayments={false}\r\n displayNote={false}\r\n providerType={providerType}\r\n />\r\n </Modal.Body>\r\n <Modal.Footer className=\"editprofile-modal\">\r\n <Button variant=\"secondary\" onClick={handleClientsClose}>\r\n Cancel\r\n </Button>\r\n </Modal.Footer>\r\n\r\n </Modal>\r\n\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n","\r\nimport React, { useState, useEffect, useCallback } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport * as Reference from \"../../../store/ducks/reference.duck\";\r\nimport { Paper, Grid } from '@material-ui/core';\r\nimport { Button } from \"react-bootstrap\";\r\nimport { saveAs } from 'file-saver';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport '../../../../_metronic/_assets/css/app.css';\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\n\r\nexport default function AdminReporting() {\r\n\r\n // const classes = useStyles();\r\n const dispatch = useDispatch(); \r\n const powerBIXlsx = useSelector(state => state.admin.PowerBIXlsx);\r\n const [exportExcelStatus, setExportExcelStatus] = useState('Not Started')\r\n\r\n\r\n function runETL() {\r\n dispatch(Reference.actions.runETL())\r\n }\r\n\r\n // initial call from the download button - fires fetch action if needed, otherwise triggers download \r\n const exportFile = () => {\r\n if(exportExcelStatus === 'Not Started')\r\n {\r\n dispatch(Admin.actions.fetchPowerBIXlsx())\r\n setExportExcelStatus('Fetching')\r\n }\r\n } \r\n\r\n // grab the blob from state and tell the browser to download\r\n const downloadExport = useCallback(() => {\r\n if (powerBIXlsx && powerBIXlsx !== '')\r\n {\r\n const file = new Blob([Buffer.from(powerBIXlsx, 'base64')], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml'})\r\n saveAs(file, 'RHC-PowerBIData.xlsx');\r\n }\r\n },[powerBIXlsx])\r\n\r\n // useEffect to fire when status is 'Fetching' and we get the result in redux\r\n useEffect( () => {\r\n if(exportExcelStatus === 'Fetching' && powerBIXlsx && powerBIXlsx !== '')\r\n {\r\n downloadExport()\r\n setExportExcelStatus('Not Started')\r\n }\r\n }, [exportExcelStatus, powerBIXlsx,downloadExport])\r\n\r\n\r\n return (\r\n <div className='container-fluid'>\r\n <h4>\r\n Reporting\r\n </h4> \r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10, marginTop: 20 }}>\t\t\r\n <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => {runETL()}}>\r\n Run ETL\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n <Paper>\r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10, marginTop: 20 }}>\t\t\r\n <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => exportFile()}>\r\n {exportExcelStatus === 'Fetching' ? 'Building....' : 'Download Power BI File'}\r\n </Button>\r\n </Grid> \r\n </Grid>\r\n </Paper>\r\n\r\n <ToastContainer\r\n transition={Flip}\r\n position=\"bottom-right\"\r\n autoClose={2000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n />\r\n </div>\r\n )\r\n\r\n}\r\n\r\n// const useStyles = makeStyles((theme) => ({\r\n// \tformControl: {\r\n// \t margin: 0,\r\n// \t minWidth: 120,\r\n// \t},\r\n// \tformControlWide: {\r\n// \t margin: 0,\r\n// \t minWidth: '100%',\r\n// \t},\r\n// \tselectEmpty: {\r\n// \t marginTop: theme.spacing(2),\r\n// \t},\r\n// \tlabel: {\r\n// \t backgroundColor: '#fff',\r\n// \t paddingLeft: 3,\r\n// \t paddingRight: 3,\r\n// \t}\r\n// }));\r\n ","/* eslint-disable no-script-url,jsx-a11y/anchor-is-valid,no-loop-func,no-undef,no-restricted-globals,strict,no-unused-vars,no-cond-assign,eqeqeq,no-throw-literal,no-unreachable,no-useless-escape,no-redeclare,no-useless-concat,no-unused-expressions,no-sequences */\r\nimport KTUtil from \"./util\";\r\n\r\n\"use strict\";\r\nvar KTHeader = function(elementId, options) {\r\n // Main object\r\n var the = this;\r\n var init = false;\r\n\r\n // Get element object\r\n var element = KTUtil.get(elementId);\r\n var body = KTUtil.get('body');\r\n\r\n if (element === undefined) {\r\n return;\r\n }\r\n\r\n // Default options\r\n var defaultOptions = {\r\n classic: false,\r\n offset: {\r\n mobile: 150,\r\n desktop: 200\r\n },\r\n minimize: {\r\n mobile: false,\r\n desktop: false\r\n }\r\n };\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n /**\r\n * Run plugin\r\n * @returns {KTHeader}\r\n */\r\n construct: function(options) {\r\n if (KTUtil.data(element).has('header')) {\r\n the = KTUtil.data(element).get('header');\r\n } else {\r\n // reset header\r\n Plugin.init(options);\r\n\r\n // build header\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('header', the);\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Handles subheader click toggle\r\n * @returns {KTHeader}\r\n */\r\n init: function(options) {\r\n the.events = [];\r\n\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n },\r\n\r\n /**\r\n * Reset header\r\n * @returns {KTHeader}\r\n */\r\n build: function() {\r\n var lastScrollTop = 0;\r\n var eventTriggerState = true;\r\n var viewportHeight = KTUtil.getViewPort().height;\r\n var documentHeight = KTUtil.getDocumentHeight();\r\n\r\n if (the.options.minimize.mobile === false && the.options.minimize.desktop === false) {\r\n return;\r\n }\r\n\r\n window.addEventListener('scroll', function() {\r\n var offset = 0, on, off, st;\r\n\r\n if (KTUtil.isInResponsiveRange('desktop')) {\r\n offset = the.options.offset.desktop;\r\n on = the.options.minimize.desktop.on;\r\n off = the.options.minimize.desktop.off;\r\n } else if (KTUtil.isInResponsiveRange('tablet-and-mobile')) {\r\n offset = the.options.offset.mobile;\r\n on = the.options.minimize.mobile.on;\r\n off = the.options.minimize.mobile.off;\r\n }\r\n\r\n st = KTUtil.getScrollTop();\r\n\r\n if (\r\n (KTUtil.isInResponsiveRange('tablet-and-mobile') && the.options.classic && the.options.classic.mobile) ||\r\n (KTUtil.isInResponsiveRange('desktop') && the.options.classic && the.options.classic.desktop)\r\n ) {\r\n if (st > offset) { // down scroll mode\r\n KTUtil.addClass(body, on);\r\n KTUtil.removeClass(body, off);\r\n\r\n if (eventTriggerState) {\r\n Plugin.eventTrigger('minimizeOn', the);\r\n eventTriggerState = false;\r\n }\r\n } else { // back scroll mode\r\n KTUtil.addClass(body, off);\r\n KTUtil.removeClass(body, on);\r\n\r\n if (eventTriggerState == false) {\r\n Plugin.eventTrigger('minimizeOff', the);\r\n eventTriggerState = true;\r\n }\r\n }\r\n } else {\r\n if (st > offset && lastScrollTop < st) { // down scroll mode\r\n KTUtil.addClass(body, on);\r\n KTUtil.removeClass(body, off);\r\n\r\n if (eventTriggerState) {\r\n Plugin.eventTrigger('minimizeOn', the);\r\n eventTriggerState = false;\r\n }\r\n } else { // back scroll mode\r\n KTUtil.addClass(body, off);\r\n KTUtil.removeClass(body, on);\r\n\r\n if (eventTriggerState == false) {\r\n Plugin.eventTrigger('minimizeOff', the);\r\n eventTriggerState = true;\r\n }\r\n }\r\n\r\n lastScrollTop = st;\r\n }\r\n });\r\n },\r\n\r\n /**\r\n * Trigger events\r\n */\r\n eventTrigger: function(name, args) {\r\n for (var i = 0; i < the.events.length; i++) {\r\n var event = the.events[i];\r\n if (event.name == name) {\r\n if (event.one == true) {\r\n if (event.fired == false) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, the, args);\r\n }\r\n } else {\r\n return event.handler.call(this, the, args);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options\r\n */\r\n\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Register event\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n ///////////////////////////////\r\n // ** Plugin Construction ** //\r\n ///////////////////////////////\r\n\r\n // Run plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n // Init done\r\n init = true;\r\n\r\n // Return plugin instance\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTHeader;\r\n}\r\n\r\nexport default KTHeader;\r\n","/* eslint-disable no-script-url,jsx-a11y/anchor-is-valid,no-loop-func,no-undef,no-restricted-globals,strict,no-unused-vars,no-cond-assign,eqeqeq,no-throw-literal,no-unreachable,no-useless-escape,no-redeclare,no-useless-concat,no-unused-expressions,no-sequences */\r\nimport KTUtil from \"./util\";\r\n\r\n\"use strict\";\r\nvar KTScrolltop = function(elementId, options) {\r\n // Main object\r\n var the = this;\r\n var init = false;\r\n\r\n // Get element object\r\n var element = KTUtil.get(elementId);\r\n var body = KTUtil.get('body');\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n // Default options\r\n var defaultOptions = {\r\n offset: 300,\r\n speed: 600,\r\n toggleClass: 'kt-scrolltop--on'\r\n };\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n /**\r\n * Run plugin\r\n * @returns {mscrolltop}\r\n */\r\n construct: function(options) {\r\n if (KTUtil.data(element).has('scrolltop')) {\r\n the = KTUtil.data(element).get('scrolltop');\r\n } else {\r\n // reset scrolltop\r\n Plugin.init(options);\r\n\r\n // build scrolltop\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('scrolltop', the);\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Handles subscrolltop click toggle\r\n * @returns {mscrolltop}\r\n */\r\n init: function(options) {\r\n the.events = [];\r\n\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n },\r\n\r\n build: function() {\r\n // handle window scroll\r\n if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\r\n window.addEventListener('touchend', function() {\r\n Plugin.handle();\r\n });\r\n\r\n window.addEventListener('touchcancel', function() {\r\n Plugin.handle();\r\n });\r\n\r\n window.addEventListener('touchleave', function() {\r\n Plugin.handle();\r\n });\r\n } else {\r\n window.addEventListener('scroll', function() { \r\n Plugin.handle();\r\n });\r\n }\r\n\r\n // handle button click \r\n KTUtil.addEvent(element, 'click', Plugin.scroll);\r\n },\r\n\r\n /**\r\n * Handles scrolltop click scrollTop\r\n */\r\n handle: function() {\r\n var pos = window.pageYOffset; // current vertical position\r\n if (pos > the.options.offset) {\r\n KTUtil.addClass(body, the.options.toggleClass);\r\n } else {\r\n KTUtil.removeClass(body, the.options.toggleClass);\r\n }\r\n },\r\n\r\n /**\r\n * Handles scrolltop click scrollTop\r\n */\r\n scroll: function(e) {\r\n e.preventDefault();\r\n\r\n KTUtil.scrollTop(0, the.options.speed);\r\n },\r\n\r\n\r\n /**\r\n * Trigger events\r\n */\r\n eventTrigger: function(name, args) {\r\n for (var i = 0; i < the.events.length; i++) {\r\n var event = the.events[i];\r\n if (event.name == name) {\r\n if (event.one == true) {\r\n if (event.fired == false) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, the, args);\r\n }\r\n } else {\r\n return event.handler.call(this, the, args);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options \r\n */\r\n\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Get subscrolltop mode\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n /**\r\n * Set scrolltop content\r\n * @returns {mscrolltop}\r\n */\r\n the.one = function(name, handler) {\r\n return Plugin.addEvent(name, handler, true);\r\n };\r\n\r\n ///////////////////////////////\r\n // ** Plugin Construction ** //\r\n ///////////////////////////////\r\n\r\n // Run plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n // Init done\r\n init = true;\r\n\r\n // Return plugin instance\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTScrolltop;\r\n}\r\n\r\nexport default KTScrolltop;\r\n","/* eslint-disable no-script-url,jsx-a11y/anchor-is-valid,no-loop-func,no-undef,no-restricted-globals,strict,no-unused-vars,no-cond-assign,eqeqeq,no-throw-literal,no-unreachable,no-useless-escape,no-redeclare,no-useless-concat,no-unused-expressions,no-sequences */\r\n\"use strict\";\r\n/**\r\n * @class KTUtil base utilize class that privides helper functions\r\n */\r\n\r\n// Polyfills\r\n/**\r\n * Element.matches() polyfill (simple version)\r\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\r\n */\r\nif (!Element.prototype.matches) {\r\n\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\r\n}\r\n\r\n/**\r\n * Element.closest() polyfill\r\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\r\n */\r\nif (!Element.prototype.closest) {\r\n\tif (!Element.prototype.matches) {\r\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\r\n\t}\r\n\tElement.prototype.closest = function (s) {\r\n\t\tvar el = this;\r\n\t\tvar ancestor = this;\r\n\t\tif (!document.documentElement.contains(el)) return null;\r\n\t\tdo {\r\n\t\t\tif (ancestor.matches(s)) return ancestor;\r\n\t\t\tancestor = ancestor.parentElement;\r\n\t\t} while (ancestor !== null);\r\n\t\treturn null;\r\n\t};\r\n}\r\n\r\n/**\r\n * ChildNode.remove() polyfill\r\n * https://gomakethings.com/removing-an-element-from-the-dom-the-es6-way/\r\n * @author Chris Ferdinandi\r\n * @license MIT\r\n */\r\n(function (elem) {\r\n\tfor (var i = 0; i < elem.length; i++) {\r\n\t\tif (!window[elem[i]] || 'remove' in window[elem[i]].prototype) continue;\r\n\t\twindow[elem[i]].prototype.remove = function () {\r\n\t\t\tthis.parentNode.removeChild(this);\r\n\t\t};\r\n\t}\r\n})(['Element', 'CharacterData', 'DocumentType']);\r\n\r\n//\r\n// requestAnimationFrame polyfill by Erik Möller.\r\n// With fixes from Paul Irish and Tino Zijdel\r\n//\r\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\r\n//\r\n// MIT license\r\n//\r\n(function() {\r\n var lastTime = 0;\r\n var vendors = ['webkit', 'moz'];\r\n for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\r\n window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\r\n window.cancelAnimationFrame =\r\n window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\r\n }\r\n\r\n if (!window.requestAnimationFrame)\r\n window.requestAnimationFrame = function(callback) {\r\n var currTime = new Date().getTime();\r\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\r\n var id = window.setTimeout(function() {\r\n callback(currTime + timeToCall);\r\n }, timeToCall);\r\n lastTime = currTime + timeToCall;\r\n return id;\r\n };\r\n\r\n if (!window.cancelAnimationFrame)\r\n window.cancelAnimationFrame = function(id) {\r\n clearTimeout(id);\r\n };\r\n}());\r\n\r\n// Source: https://github.com/jserz/js_piece/blob/master/DOM/ParentNode/prepend()/prepend().md\r\n(function(arr) {\r\n arr.forEach(function(item) {\r\n if (item.hasOwnProperty('prepend')) {\r\n return;\r\n }\r\n Object.defineProperty(item, 'prepend', {\r\n configurable: true,\r\n enumerable: true,\r\n writable: true,\r\n value: function prepend() {\r\n var argArr = Array.prototype.slice.call(arguments),\r\n docFrag = document.createDocumentFragment();\r\n\r\n argArr.forEach(function(argItem) {\r\n var isNode = argItem instanceof Node;\r\n docFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem)));\r\n });\r\n\r\n this.insertBefore(docFrag, this.firstChild);\r\n }\r\n });\r\n });\r\n})([Element.prototype, Document.prototype, DocumentFragment.prototype]);\r\n\r\n// Global variables\r\nwindow.KTUtilElementDataStore = {};\r\nwindow.KTUtilElementDataStoreID = 0;\r\nwindow.KTUtilDelegatedEventHandlers = {};\r\n\r\nvar KTUtil = function() {\r\n var resizeHandlers = [];\r\n\r\n /** @type {object} breakpoints The device width breakpoints **/\r\n var breakpoints = {\r\n sm: 544, // Small screen / phone\r\n md: 768, // Medium screen / tablet\r\n lg: 1024, // Large screen / desktop\r\n xl: 1200 // Extra large screen / wide desktop\r\n };\r\n\r\n /**\r\n * Handle window resize event with some\r\n * delay to attach event handlers upon resize complete\r\n */\r\n var _windowResizeHandler = function() {\r\n var _runResizeHandlers = function() {\r\n // reinitialize other subscribed elements\r\n for (var i = 0; i < resizeHandlers.length; i++) {\r\n var each = resizeHandlers[i];\r\n each.call();\r\n }\r\n };\r\n\r\n var timeout = false; // holder for timeout id\r\n var delay = 250; // delay after event is \"complete\" to run callback\r\n\r\n window.addEventListener('resize', function() {\r\n clearTimeout(timeout);\r\n timeout = setTimeout(function() {\r\n _runResizeHandlers();\r\n }, delay); // wait 50ms until window resize finishes.\r\n });\r\n };\r\n\r\n return {\r\n /**\r\n * Class main initializer.\r\n * @param {object} options.\r\n * @returns null\r\n */\r\n //main function to initiate the theme\r\n init: function(options) {\r\n if (options && options.breakpoints) {\r\n breakpoints = options.breakpoints;\r\n }\r\n\r\n _windowResizeHandler();\r\n },\r\n\r\n /**\r\n * Adds window resize event handler.\r\n * @param {function} callback function.\r\n */\r\n addResizeHandler: function(callback) {\r\n resizeHandlers.push(callback);\r\n },\r\n\r\n /**\r\n * Removes window resize event handler.\r\n * @param {function} callback function.\r\n */\r\n removeResizeHandler: function(callback) {\r\n for (var i = 0; i < resizeHandlers.length; i++) {\r\n if (callback === resizeHandlers[i]) {\r\n delete resizeHandlers[i];\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Trigger window resize handlers.\r\n */\r\n runResizeHandlers: function() {\r\n _runResizeHandlers();\r\n },\r\n\r\n resize: function() {\r\n if (typeof(Event) === 'function') {\r\n // modern browsers\r\n window.dispatchEvent(new Event('resize'));\r\n } else {\r\n // for IE and other old browsers\r\n // causes deprecation warning on modern browsers\r\n var evt = window.document.createEvent('UIEvents');\r\n evt.initUIEvent('resize', true, false, window, 0);\r\n window.dispatchEvent(evt);\r\n }\r\n },\r\n\r\n /**\r\n * Get GET parameter value from URL.\r\n * @param {string} paramName Parameter name.\r\n * @returns {string}\r\n */\r\n getURLParam: function(paramName) {\r\n var searchString = window.location.search.substring(1),\r\n i, val, params = searchString.split(\"&\");\r\n\r\n for (i = 0; i < params.length; i++) {\r\n val = params[i].split(\"=\");\r\n if (val[0] == paramName) {\r\n return unescape(val[1]);\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n\r\n /**\r\n * Checks whether current device is mobile touch.\r\n * @returns {boolean}\r\n */\r\n isMobileDevice: function() {\r\n return (this.getViewPort().width < this.getBreakpoint('lg') ? true : false);\r\n },\r\n\r\n /**\r\n * Checks whether current device is desktop.\r\n * @returns {boolean}\r\n */\r\n isDesktopDevice: function() {\r\n return KTUtil.isMobileDevice() ? false : true;\r\n },\r\n\r\n /**\r\n * Gets browser window viewport size. Ref:\r\n * http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/\r\n * @returns {object}\r\n */\r\n getViewPort: function() {\r\n var e = window,\r\n a = 'inner';\r\n if (!('innerWidth' in window)) {\r\n a = 'client';\r\n e = document.documentElement || document.body;\r\n }\r\n\r\n return {\r\n width: e[a + 'Width'],\r\n height: e[a + 'Height']\r\n };\r\n },\r\n\r\n /**\r\n * Checks whether given device mode is currently activated.\r\n * @param {string} mode Responsive mode name(e.g: desktop,\r\n * desktop-and-tablet, tablet, tablet-and-mobile, mobile)\r\n * @returns {boolean}\r\n */\r\n isInResponsiveRange: function(mode) {\r\n var breakpoint = this.getViewPort().width;\r\n\r\n if (mode == 'general') {\r\n return true;\r\n } else if (mode == 'desktop' && breakpoint >= (this.getBreakpoint('lg') + 1)) {\r\n return true;\r\n } else if (mode == 'tablet' && (breakpoint >= (this.getBreakpoint('md') + 1) && breakpoint < this.getBreakpoint('lg'))) {\r\n return true;\r\n } else if (mode == 'mobile' && breakpoint <= this.getBreakpoint('md')) {\r\n return true;\r\n } else if (mode == 'desktop-and-tablet' && breakpoint >= (this.getBreakpoint('md') + 1)) {\r\n return true;\r\n } else if (mode == 'tablet-and-mobile' && breakpoint <= this.getBreakpoint('lg')) {\r\n return true;\r\n } else if (mode == 'minimal-desktop-and-below' && breakpoint <= this.getBreakpoint('xl')) {\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n\r\n /**\r\n * Generates unique ID for give prefix.\r\n * @param {string} prefix Prefix for generated ID\r\n * @returns {boolean}\r\n */\r\n getUniqueID: function(prefix) {\r\n return prefix + Math.floor(Math.random() * (new Date()).getTime());\r\n },\r\n\r\n /**\r\n * Gets window width for give breakpoint mode.\r\n * @param {string} mode Responsive mode name(e.g: xl, lg, md, sm)\r\n * @returns {number}\r\n */\r\n getBreakpoint: function(mode) {\r\n return breakpoints[mode];\r\n },\r\n\r\n /**\r\n * Checks whether object has property matchs given key path.\r\n * @param {object} obj Object contains values paired with given key path\r\n * @param {string} keys Keys path seperated with dots\r\n * @returns {object}\r\n */\r\n isset: function(obj, keys) {\r\n var stone;\r\n\r\n keys = keys || '';\r\n\r\n if (keys.indexOf('[') !== -1) {\r\n throw new Error('Unsupported object path notation.');\r\n }\r\n\r\n keys = keys.split('.');\r\n\r\n do {\r\n if (obj === undefined) {\r\n return false;\r\n }\r\n\r\n stone = keys.shift();\r\n\r\n if (!obj.hasOwnProperty(stone)) {\r\n return false;\r\n }\r\n\r\n obj = obj[stone];\r\n\r\n } while (keys.length);\r\n\r\n return true;\r\n },\r\n\r\n /**\r\n * Gets highest z-index of the given element parents\r\n * @param {object} el jQuery element object\r\n * @returns {number}\r\n */\r\n getHighestZindex: function(el) {\r\n var elem = KTUtil.get(el),\r\n position, value;\r\n\r\n while (elem && elem !== document) {\r\n // Ignore z-index if position is set to a value where z-index is ignored by the browser\r\n // This makes behavior of this function consistent across browsers\r\n // WebKit always returns auto if the element is positioned\r\n position = KTUtil.css(elem, 'position');\r\n\r\n if (position === \"absolute\" || position === \"relative\" || position === \"fixed\") {\r\n // IE returns 0 when zIndex is not specified\r\n // other browsers return a string\r\n // we ignore the case of nested elements with an explicit value of 0\r\n // <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\r\n value = parseInt(KTUtil.css(elem, 'z-index'));\r\n\r\n if (!isNaN(value) && value !== 0) {\r\n return value;\r\n }\r\n }\r\n\r\n elem = elem.parentNode;\r\n }\r\n\r\n return null;\r\n },\r\n\r\n /**\r\n * Checks whether the element has any parent with fixed positionfreg\r\n * @param {object} el jQuery element object\r\n * @returns {boolean}\r\n */\r\n hasFixedPositionedParent: function(el) {\r\n var position;\r\n\r\n while (el && el !== document) {\r\n position = KTUtil.css(el, 'position');\r\n\r\n if (position === \"fixed\") {\r\n return true;\r\n }\r\n\r\n el = el.parentNode;\r\n }\r\n\r\n return false;\r\n },\r\n\r\n /**\r\n * Simulates delay\r\n */\r\n sleep: function(milliseconds) {\r\n var start = new Date().getTime();\r\n for (var i = 0; i < 1e7; i++) {\r\n if ((new Date().getTime() - start) > milliseconds) {\r\n break;\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Gets randomly generated integer value within given min and max range\r\n * @param {number} min Range start value\r\n * @param {number} max Range end value\r\n * @returns {number}\r\n */\r\n getRandomInt: function(min, max) {\r\n return Math.floor(Math.random() * (max - min + 1)) + min;\r\n },\r\n\r\n /**\r\n * Checks whether Angular library is included\r\n * @returns {boolean}\r\n */\r\n isAngularVersion: function() {\r\n return window.Zone !== undefined ? true : false;\r\n },\r\n\r\n // jQuery Workarounds\r\n\r\n // Deep extend: $.extend(true, {}, objA, objB);\r\n deepExtend: function(out) {\r\n out = out || {};\r\n\r\n for (var i = 1; i < arguments.length; i++) {\r\n var obj = arguments[i];\r\n\r\n if (!obj)\r\n continue;\r\n\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n if (typeof obj[key] === 'object')\r\n out[key] = KTUtil.deepExtend(out[key], obj[key]);\r\n else\r\n out[key] = obj[key];\r\n }\r\n }\r\n }\r\n\r\n return out;\r\n },\r\n\r\n // extend: $.extend({}, objA, objB);\r\n extend: function(out) {\r\n out = out || {};\r\n\r\n for (var i = 1; i < arguments.length; i++) {\r\n if (!arguments[i])\r\n continue;\r\n\r\n for (var key in arguments[i]) {\r\n if (arguments[i].hasOwnProperty(key))\r\n out[key] = arguments[i][key];\r\n }\r\n }\r\n\r\n return out;\r\n },\r\n\r\n get: function(query) {\r\n var el;\r\n\r\n if (query === document) {\r\n return document;\r\n }\r\n\r\n if (!!(query && query.nodeType === 1)) {\r\n return query;\r\n }\r\n\r\n if (el = document.getElementById(query)) {\r\n return el;\r\n } else if (el = document.getElementsByTagName(query), el.length > 0) {\r\n return el[0];\r\n } else if (el = document.getElementsByClassName(query), el.length > 0) {\r\n return el[0];\r\n } else {\r\n return null;\r\n }\r\n },\r\n\r\n getByID: function(query) {\r\n if (!!(query && query.nodeType === 1)) {\r\n return query;\r\n }\r\n\r\n return document.getElementById(query);\r\n },\r\n\r\n getByTag: function(query) {\r\n var el;\r\n\r\n if (el = document.getElementsByTagName(query)) {\r\n return el[0];\r\n } else {\r\n return null;\r\n }\r\n },\r\n\r\n getByClass: function(query) {\r\n var el;\r\n\r\n if (el = document.getElementsByClassName(query)) {\r\n return el[0];\r\n } else {\r\n return null;\r\n }\r\n },\r\n\r\n /**\r\n * Checks whether the element has given classes\r\n * @param {object} el jQuery element object\r\n * @param {string} Classes string\r\n * @returns {boolean}\r\n */\r\n hasClasses: function(el, classes) {\r\n if (!el) {\r\n return;\r\n }\r\n\r\n var classesArr = classes.split(\" \");\r\n\r\n for (var i = 0; i < classesArr.length; i++) {\r\n if (KTUtil.hasClass(el, KTUtil.trim(classesArr[i])) == false) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n\r\n hasClass: function(el, className) {\r\n if (!el) {\r\n return;\r\n }\r\n\r\n return el.classList ? el.classList.contains(className) : new RegExp('\\\\b' + className + '\\\\b').test(el.className);\r\n },\r\n\r\n addClass: function(el, className) {\r\n if (!el || typeof className === 'undefined') {\r\n return;\r\n }\r\n\r\n var classNames = className.split(' ');\r\n\r\n if (el.classList) {\r\n for (var i = 0; i < classNames.length; i++) {\r\n if (classNames[i] && classNames[i].length > 0) {\r\n el.classList.add(KTUtil.trim(classNames[i]));\r\n }\r\n }\r\n } else if (!KTUtil.hasClass(el, className)) {\r\n for (var x = 0; x < classNames.length; x++) {\r\n el.className += ' ' + KTUtil.trim(classNames[x]);\r\n }\r\n }\r\n },\r\n\r\n removeClass: function(el, className) {\r\n if (!el || typeof className === 'undefined') {\r\n return;\r\n }\r\n\r\n var classNames = className.split(' ');\r\n\r\n if (el.classList) {\r\n for (var i = 0; i < classNames.length; i++) {\r\n el.classList.remove(KTUtil.trim(classNames[i]));\r\n }\r\n } else if (KTUtil.hasClass(el, className)) {\r\n for (var x = 0; x < classNames.length; x++) {\r\n el.className = el.className.replace(new RegExp('\\\\b' + KTUtil.trim(classNames[x]) + '\\\\b', 'g'), '');\r\n }\r\n }\r\n },\r\n\r\n triggerCustomEvent: function(el, eventName, data) {\r\n var event;\r\n if (window.CustomEvent) {\r\n event = new CustomEvent(eventName, {\r\n detail: data\r\n });\r\n } else {\r\n event = document.createEvent('CustomEvent');\r\n event.initCustomEvent(eventName, true, true, data);\r\n }\r\n\r\n el.dispatchEvent(event);\r\n },\r\n\r\n triggerEvent: function(node, eventName) {\r\n // Make sure we use the ownerDocument from the provided node to avoid cross-window problems\r\n var doc;\r\n if (node.ownerDocument) {\r\n doc = node.ownerDocument;\r\n } else if (node.nodeType == 9) {\r\n // the node may be the document itself, nodeType 9 = DOCUMENT_NODE\r\n doc = node;\r\n } else {\r\n throw new Error(\"Invalid node passed to fireEvent: \" + node.id);\r\n }\r\n\r\n if (node.dispatchEvent) {\r\n // Gecko-style approach (now the standard) takes more work\r\n var eventClass = \"\";\r\n\r\n // Different events have different event classes.\r\n // If this switch statement can't map an eventName to an eventClass,\r\n // the event firing is going to fail.\r\n switch (eventName) {\r\n case \"click\": // Dispatching of 'click' appears to not work correctly in Safari. Use 'mousedown' or 'mouseup' instead.\r\n case \"mouseenter\":\r\n case \"mouseleave\":\r\n case \"mousedown\":\r\n case \"mouseup\":\r\n eventClass = \"MouseEvents\";\r\n break;\r\n\r\n case \"focus\":\r\n case \"change\":\r\n case \"blur\":\r\n case \"select\":\r\n eventClass = \"HTMLEvents\";\r\n break;\r\n\r\n default:\r\n throw \"fireEvent: Couldn't find an event class for event '\" + eventName + \"'.\";\r\n break;\r\n }\r\n var event = doc.createEvent(eventClass);\r\n\r\n var bubbles = eventName == \"change\" ? false : true;\r\n event.initEvent(eventName, bubbles, true); // All events created as bubbling and cancelable.\r\n\r\n event.synthetic = true; // allow detection of synthetic events\r\n // The second parameter says go ahead with the default action\r\n node.dispatchEvent(event, true);\r\n } else if (node.fireEvent) {\r\n // IE-old school style\r\n var event = doc.createEventObject();\r\n event.synthetic = true; // allow detection of synthetic events\r\n node.fireEvent(\"on\" + eventName, event);\r\n }\r\n },\r\n\r\n index: function( elm ){\r\n elm = KTUtil.get(elm);\r\n var c = elm.parentNode.children, i = 0;\r\n for(; i < c.length; i++ )\r\n if( c[i] == elm ) return i;\r\n },\r\n\r\n trim: function(string) {\r\n return string.trim();\r\n },\r\n\r\n eventTriggered: function(e) {\r\n if (e.currentTarget.dataset.triggered) {\r\n return true;\r\n } else {\r\n e.currentTarget.dataset.triggered = true;\r\n\r\n return false;\r\n }\r\n },\r\n\r\n remove: function(el) {\r\n if (el && el.parentNode) {\r\n el.parentNode.removeChild(el);\r\n }\r\n },\r\n\r\n find: function(parent, query) {\r\n parent = KTUtil.get(parent);\r\n if (parent) {\r\n return parent.querySelector(query);\r\n }\r\n },\r\n\r\n findAll: function(parent, query) {\r\n parent = KTUtil.get(parent);\r\n if (parent) {\r\n return parent.querySelectorAll(query);\r\n }\r\n },\r\n\r\n insertAfter: function(el, referenceNode) {\r\n return referenceNode.parentNode.insertBefore(el, referenceNode.nextSibling);\r\n },\r\n\r\n parents: function(elem, selector) {\r\n // Element.matches() polyfill\r\n if (!Element.prototype.matches) {\r\n Element.prototype.matches =\r\n Element.prototype.matchesSelector ||\r\n Element.prototype.mozMatchesSelector ||\r\n Element.prototype.msMatchesSelector ||\r\n Element.prototype.oMatchesSelector ||\r\n Element.prototype.webkitMatchesSelector ||\r\n function(s) {\r\n var matches = (this.document || this.ownerDocument).querySelectorAll(s),\r\n i = matches.length;\r\n while (--i >= 0 && matches.item(i) !== this) {}\r\n return i > -1;\r\n };\r\n }\r\n\r\n // Set up a parent array\r\n var parents = [];\r\n\r\n // Push each parent element to the array\r\n for ( ; elem && elem !== document; elem = elem.parentNode ) {\r\n if (selector) {\r\n if (elem.matches(selector)) {\r\n parents.push(elem);\r\n }\r\n continue;\r\n }\r\n parents.push(elem);\r\n }\r\n\r\n // Return our parent array\r\n return parents;\r\n },\r\n\r\n children: function(el, selector, log) {\r\n if (!el || !el.childNodes) {\r\n return;\r\n }\r\n\r\n var result = [],\r\n i = 0,\r\n l = el.childNodes.length;\r\n\r\n for (var i; i < l; ++i) {\r\n if (el.childNodes[i].nodeType == 1 && KTUtil.matches(el.childNodes[i], selector, log)) {\r\n result.push(el.childNodes[i]);\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n child: function(el, selector, log) {\r\n var children = KTUtil.children(el, selector, log);\r\n\r\n return children ? children[0] : null;\r\n },\r\n\r\n matches: function(el, selector, log) {\r\n var p = Element.prototype;\r\n var f = p.matches || p.webkitMatchesSelector || p.mozMatchesSelector || p.msMatchesSelector || function(s) {\r\n return [].indexOf.call(document.querySelectorAll(s), this) !== -1;\r\n };\r\n\r\n if (el && el.tagName) {\r\n return f.call(el, selector);\r\n } else {\r\n return false;\r\n }\r\n },\r\n\r\n data: function(element) {\r\n element = KTUtil.get(element);\r\n\r\n return {\r\n set: function(name, data) {\r\n if (element === undefined) {\r\n return;\r\n }\r\n\r\n if (element.customDataTag === undefined) {\r\n window.KTUtilElementDataStoreID++;\r\n element.customDataTag = window.KTUtilElementDataStoreID;\r\n }\r\n\r\n if (window.KTUtilElementDataStore[element.customDataTag] === undefined) {\r\n window.KTUtilElementDataStore[element.customDataTag] = {};\r\n }\r\n\r\n window.KTUtilElementDataStore[element.customDataTag][name] = data;\r\n },\r\n\r\n get: function(name) {\r\n if (element === undefined) {\r\n return;\r\n }\r\n\r\n if (element.customDataTag === undefined) {\r\n return null;\r\n }\r\n\r\n return this.has(name) ? window.KTUtilElementDataStore[element.customDataTag][name] : null;\r\n },\r\n\r\n has: function(name) {\r\n if (element === undefined) {\r\n return false;\r\n }\r\n\r\n if (element.customDataTag === undefined) {\r\n return false;\r\n }\r\n\r\n return (window.KTUtilElementDataStore[element.customDataTag] && window.KTUtilElementDataStore[element.customDataTag][name]) ? true : false;\r\n },\r\n\r\n remove: function(name) {\r\n if (element && this.has(name)) {\r\n delete window.KTUtilElementDataStore[element.customDataTag][name];\r\n }\r\n }\r\n };\r\n },\r\n\r\n outerWidth: function(el, margin) {\r\n var width;\r\n\r\n if (margin === true) {\r\n width = parseFloat(el.offsetWidth);\r\n width += parseFloat(KTUtil.css(el, 'margin-left')) + parseFloat(KTUtil.css(el, 'margin-right'));\r\n\r\n return parseFloat(width);\r\n } else {\r\n width = parseFloat(el.offsetWidth);\r\n\r\n return width;\r\n }\r\n },\r\n\r\n offset: function(elem) {\r\n var rect, win;\r\n elem = KTUtil.get(elem);\r\n\r\n if ( !elem ) {\r\n return;\r\n }\r\n\r\n // Return zeros for disconnected and hidden (display: none) elements (gh-2310)\r\n // Support: IE <=11 only\r\n // Running getBoundingClientRect on a\r\n // disconnected node in IE throws an error\r\n\r\n if ( !elem.getClientRects().length ) {\r\n return { top: 0, left: 0 };\r\n }\r\n\r\n // Get document-relative position by adding viewport scroll to viewport-relative gBCR\r\n rect = elem.getBoundingClientRect();\r\n win = elem.ownerDocument.defaultView;\r\n\r\n return {\r\n top: rect.top + win.pageYOffset,\r\n left: rect.left + win.pageXOffset\r\n };\r\n },\r\n\r\n height: function(el) {\r\n return KTUtil.css(el, 'height');\r\n },\r\n\r\n visible: function(el) {\r\n return !(el.offsetWidth === 0 && el.offsetHeight === 0);\r\n },\r\n\r\n attr: function(el, name, value) {\r\n el = KTUtil.get(el);\r\n\r\n if (el == undefined) {\r\n return;\r\n }\r\n\r\n if (value !== undefined) {\r\n el.setAttribute(name, value);\r\n } else {\r\n return el.getAttribute(name);\r\n }\r\n },\r\n\r\n hasAttr: function(el, name) {\r\n el = KTUtil.get(el);\r\n\r\n if (el == undefined) {\r\n return;\r\n }\r\n\r\n return el.getAttribute(name) ? true : false;\r\n },\r\n\r\n removeAttr: function(el, name) {\r\n el = KTUtil.get(el);\r\n\r\n if (el == undefined) {\r\n return;\r\n }\r\n\r\n el.removeAttribute(name);\r\n },\r\n\r\n animate: function(from, to, duration, update, easing, done) {\r\n /**\r\n * TinyAnimate.easings\r\n * Adapted from jQuery Easing\r\n */\r\n var easings = {};\r\n var easing;\r\n\r\n easings.linear = function(t, b, c, d) {\r\n return c * t / d + b;\r\n };\r\n\r\n easing = easings.linear;\r\n\r\n // Early bail out if called incorrectly\r\n if (typeof from !== 'number' ||\r\n typeof to !== 'number' ||\r\n typeof duration !== 'number' ||\r\n typeof update !== 'function') {\r\n return;\r\n }\r\n\r\n // Create mock done() function if necessary\r\n if (typeof done !== 'function') {\r\n done = function() {};\r\n }\r\n\r\n // Pick implementation (requestAnimationFrame | setTimeout)\r\n var rAF = window.requestAnimationFrame || function(callback) {\r\n window.setTimeout(callback, 1000 / 50);\r\n };\r\n\r\n // Animation loop\r\n var canceled = false;\r\n var change = to - from;\r\n\r\n function loop(timestamp) {\r\n var time = (timestamp || +new Date()) - start;\r\n\r\n if (time >= 0) {\r\n update(easing(time, from, change, duration));\r\n }\r\n if (time >= 0 && time >= duration) {\r\n update(to);\r\n done();\r\n } else {\r\n rAF(loop);\r\n }\r\n }\r\n\r\n update(from);\r\n\r\n // Start animation loop\r\n var start = window.performance && window.performance.now ? window.performance.now() : +new Date();\r\n\r\n rAF(loop);\r\n },\r\n\r\n actualCss: function(el, prop, cache) {\r\n el = KTUtil.get(el);\r\n var css = '';\r\n\r\n if (el instanceof HTMLElement === false) {\r\n return;\r\n }\r\n\r\n if (!el.getAttribute('kt-hidden-' + prop) || cache === false) {\r\n var value;\r\n\r\n // the element is hidden so:\r\n // making the el block so we can meassure its height but still be hidden\r\n css = el.style.cssText;\r\n el.style.cssText = 'position: absolute; visibility: hidden; display: block;';\r\n\r\n if (prop == 'width') {\r\n value = el.offsetWidth;\r\n } else if (prop == 'height') {\r\n value = el.offsetHeight;\r\n }\r\n\r\n el.style.cssText = css;\r\n\r\n // store it in cache\r\n el.setAttribute('kt-hidden-' + prop, value);\r\n\r\n return parseFloat(value);\r\n } else {\r\n // store it in cache\r\n return parseFloat(el.getAttribute('kt-hidden-' + prop));\r\n }\r\n },\r\n\r\n actualHeight: function(el, cache) {\r\n return KTUtil.actualCss(el, 'height', cache);\r\n },\r\n\r\n actualWidth: function(el, cache) {\r\n return KTUtil.actualCss(el, 'width', cache);\r\n },\r\n\r\n getScroll: function(element, method) {\r\n // The passed in `method` value should be 'Top' or 'Left'\r\n method = 'scroll' + method;\r\n return (element == window || element == document) ? (\r\n self[(method == 'scrollTop') ? 'pageYOffset' : 'pageXOffset'] ||\r\n (browserSupportsBoxModel && document.documentElement[method]) ||\r\n document.body[method]\r\n ) : element[method];\r\n },\r\n\r\n css: function(el, styleProp, value) {\r\n el = KTUtil.get(el);\r\n\r\n if (!el) {\r\n return;\r\n }\r\n\r\n if (value !== undefined) {\r\n el.style[styleProp] = value;\r\n } else {\r\n var defaultView = (el.ownerDocument || document).defaultView;\r\n // W3C standard way:\r\n if (defaultView && defaultView.getComputedStyle) {\r\n // sanitize property name to css notation\r\n // (hyphen separated words eg. font-Size)\r\n styleProp = styleProp.replace(/([A-Z])/g, \"-$1\").toLowerCase();\r\n return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp);\r\n } else if (el.currentStyle) { // IE\r\n // sanitize property name to camelCase\r\n styleProp = styleProp.replace(/\\-(\\w)/g, function(str, letter) {\r\n return letter.toUpperCase();\r\n });\r\n value = el.currentStyle[styleProp];\r\n // convert other units to pixels on IE\r\n if (/^\\d+(em|pt|%|ex)?$/i.test(value)) {\r\n return (function(value) {\r\n var oldLeft = el.style.left,\r\n oldRsLeft = el.runtimeStyle.left;\r\n el.runtimeStyle.left = el.currentStyle.left;\r\n el.style.left = value || 0;\r\n value = el.style.pixelLeft + \"px\";\r\n el.style.left = oldLeft;\r\n el.runtimeStyle.left = oldRsLeft;\r\n return value;\r\n })(value);\r\n }\r\n return value;\r\n }\r\n }\r\n },\r\n\r\n slide: function(el, dir, speed, callback, recalcMaxHeight) {\r\n if (!el || (dir == 'up' && KTUtil.visible(el) === false) || (dir == 'down' && KTUtil.visible(el) === true)) {\r\n return;\r\n }\r\n\r\n speed = (speed ? speed : 600);\r\n var calcHeight = KTUtil.actualHeight(el);\r\n var calcPaddingTop = false;\r\n var calcPaddingBottom = false;\r\n\r\n if (KTUtil.css(el, 'padding-top') && KTUtil.data(el).has('slide-padding-top') !== true) {\r\n KTUtil.data(el).set('slide-padding-top', KTUtil.css(el, 'padding-top'));\r\n }\r\n\r\n if (KTUtil.css(el, 'padding-bottom') && KTUtil.data(el).has('slide-padding-bottom') !== true) {\r\n KTUtil.data(el).set('slide-padding-bottom', KTUtil.css(el, 'padding-bottom'));\r\n }\r\n\r\n if (KTUtil.data(el).has('slide-padding-top')) {\r\n calcPaddingTop = parseInt(KTUtil.data(el).get('slide-padding-top'));\r\n }\r\n\r\n if (KTUtil.data(el).has('slide-padding-bottom')) {\r\n calcPaddingBottom = parseInt(KTUtil.data(el).get('slide-padding-bottom'));\r\n }\r\n\r\n if (dir == 'up') { // up\r\n el.style.cssText = 'display: block; overflow: hidden;';\r\n\r\n if (calcPaddingTop) {\r\n KTUtil.animate(0, calcPaddingTop, speed, function(value) {\r\n el.style.paddingTop = (calcPaddingTop - value) + 'px';\r\n }, 'linear');\r\n }\r\n\r\n if (calcPaddingBottom) {\r\n KTUtil.animate(0, calcPaddingBottom, speed, function(value) {\r\n el.style.paddingBottom = (calcPaddingBottom - value) + 'px';\r\n }, 'linear');\r\n }\r\n\r\n KTUtil.animate(0, calcHeight, speed, function(value) {\r\n el.style.height = (calcHeight - value) + 'px';\r\n }, 'linear', function() {\r\n callback();\r\n el.style.height = '';\r\n el.style.display = 'none';\r\n });\r\n\r\n\r\n } else if (dir == 'down') { // down\r\n el.style.cssText = 'display: block; overflow: hidden;';\r\n\r\n if (calcPaddingTop) {\r\n KTUtil.animate(0, calcPaddingTop, speed, function(value) {\r\n el.style.paddingTop = value + 'px';\r\n }, 'linear', function() {\r\n el.style.paddingTop = '';\r\n });\r\n }\r\n\r\n if (calcPaddingBottom) {\r\n KTUtil.animate(0, calcPaddingBottom, speed, function(value) {\r\n el.style.paddingBottom = value + 'px';\r\n }, 'linear', function() {\r\n el.style.paddingBottom = '';\r\n });\r\n }\r\n\r\n KTUtil.animate(0, calcHeight, speed, function(value) {\r\n el.style.height = value + 'px';\r\n }, 'linear', function() {\r\n callback();\r\n el.style.height = '';\r\n el.style.display = '';\r\n el.style.overflow = '';\r\n });\r\n }\r\n },\r\n\r\n slideUp: function(el, speed, callback) {\r\n KTUtil.slide(el, 'up', speed, callback);\r\n },\r\n\r\n slideDown: function(el, speed, callback) {\r\n KTUtil.slide(el, 'down', speed, callback);\r\n },\r\n\r\n show: function(el, display) {\r\n if (typeof el !== 'undefined') {\r\n el.style.display = (display ? display : 'block');\r\n }\r\n },\r\n\r\n hide: function(el) {\r\n if (typeof el !== 'undefined') {\r\n el.style.display = 'none';\r\n }\r\n },\r\n\r\n addEvent: function(el, type, handler, one) {\r\n el = KTUtil.get(el);\r\n\r\n if (typeof el !== 'undefined' && el !== null) {\r\n el.addEventListener(type, handler);\r\n }\r\n },\r\n\r\n removeEvent: function(el, type, handler) {\r\n el = KTUtil.get(el);\r\n\r\n if (el !== null) {\r\n el.removeEventListener(type, handler);\r\n }\r\n },\r\n\r\n on: function(element, selector, event, handler) {\r\n if (!selector) {\r\n return;\r\n }\r\n\r\n var eventId = KTUtil.getUniqueID('event');\r\n\r\n window.KTUtilDelegatedEventHandlers[eventId] = function(e) {\r\n var targets = element.querySelectorAll(selector);\r\n var target = e.target;\r\n\r\n while (target && target !== element) {\r\n for (var i = 0, j = targets.length; i < j; i++) {\r\n if (target === targets[i]) {\r\n handler.call(target, e);\r\n }\r\n }\r\n\r\n target = target.parentNode;\r\n }\r\n }\r\n\r\n KTUtil.addEvent(element, event, window.KTUtilDelegatedEventHandlers[eventId]);\r\n\r\n return eventId;\r\n },\r\n\r\n off: function(element, event, eventId) {\r\n if (!element || !window.KTUtilDelegatedEventHandlers[eventId]) {\r\n return;\r\n }\r\n\r\n KTUtil.removeEvent(element, event, window.KTUtilDelegatedEventHandlers[eventId]);\r\n\r\n delete window.KTUtilDelegatedEventHandlers[eventId];\r\n },\r\n\r\n one: function onetime(el, type, callback) {\r\n el = KTUtil.get(el);\r\n\r\n el.addEventListener(type, function callee(e) {\r\n // remove event\r\n if (e.target && e.target.removeEventListener) {\r\n e.target.removeEventListener(e.type, callee);\r\n }\r\n\r\n // call handler\r\n return callback(e);\r\n });\r\n },\r\n\r\n hash: function(str) {\r\n var hash = 0,\r\n i, chr;\r\n\r\n if (str.length === 0) return hash;\r\n for (i = 0; i < str.length; i++) {\r\n chr = str.charCodeAt(i);\r\n hash = ((hash << 5) - hash) + chr;\r\n hash |= 0; // Convert to 32bit integer\r\n }\r\n\r\n return hash;\r\n },\r\n\r\n animateClass: function(el, animationName, callback) {\r\n var animation;\r\n var animations = {\r\n animation: 'animationend',\r\n OAnimation: 'oAnimationEnd',\r\n MozAnimation: 'mozAnimationEnd',\r\n WebkitAnimation: 'webkitAnimationEnd',\r\n msAnimation: 'msAnimationEnd',\r\n };\r\n\r\n for (var t in animations) {\r\n if (el.style[t] !== undefined) {\r\n animation = animations[t];\r\n }\r\n }\r\n\r\n KTUtil.addClass(el, 'animated ' + animationName);\r\n\r\n KTUtil.one(el, animation, function() {\r\n KTUtil.removeClass(el, 'animated ' + animationName);\r\n });\r\n\r\n if (callback) {\r\n KTUtil.one(el, animation, callback);\r\n }\r\n },\r\n\r\n transitionEnd: function(el, callback) {\r\n var transition;\r\n var transitions = {\r\n transition: 'transitionend',\r\n OTransition: 'oTransitionEnd',\r\n MozTransition: 'mozTransitionEnd',\r\n WebkitTransition: 'webkitTransitionEnd',\r\n msTransition: 'msTransitionEnd'\r\n };\r\n\r\n for (var t in transitions) {\r\n if (el.style[t] !== undefined) {\r\n transition = transitions[t];\r\n }\r\n }\r\n\r\n KTUtil.one(el, transition, callback);\r\n },\r\n\r\n animationEnd: function(el, callback) {\r\n var animation;\r\n var animations = {\r\n animation: 'animationend',\r\n OAnimation: 'oAnimationEnd',\r\n MozAnimation: 'mozAnimationEnd',\r\n WebkitAnimation: 'webkitAnimationEnd',\r\n msAnimation: 'msAnimationEnd'\r\n };\r\n\r\n for (var t in animations) {\r\n if (el.style[t] !== undefined) {\r\n animation = animations[t];\r\n }\r\n }\r\n\r\n KTUtil.one(el, animation, callback);\r\n },\r\n\r\n animateDelay: function(el, value) {\r\n var vendors = ['webkit-', 'moz-', 'ms-', 'o-', ''];\r\n for (var i = 0; i < vendors.length; i++) {\r\n KTUtil.css(el, vendors[i] + 'animation-delay', value);\r\n }\r\n },\r\n\r\n animateDuration: function(el, value) {\r\n var vendors = ['webkit-', 'moz-', 'ms-', 'o-', ''];\r\n for (var i = 0; i < vendors.length; i++) {\r\n KTUtil.css(el, vendors[i] + 'animation-duration', value);\r\n }\r\n },\r\n\r\n scrollTo: function(target, offset, duration) {\r\n var duration = duration ? duration : 500;\r\n var target = KTUtil.get(target);\r\n var targetPos = target ? KTUtil.offset(target).top : 0;\r\n var scrollPos = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\r\n var from, to;\r\n\r\n if (offset) {\r\n scrollPos += offset;\r\n }\r\n\r\n from = scrollPos;\r\n to = targetPos;\r\n\r\n KTUtil.animate(from, to, duration, function(value) {\r\n document.documentElement.scrollTop = value;\r\n document.body.parentNode.scrollTop = value;\r\n document.body.scrollTop = value;\r\n }); //, easing, done\r\n },\r\n\r\n scrollTop: function(offset, duration) {\r\n KTUtil.scrollTo(null, offset, duration);\r\n },\r\n\r\n isArray: function(obj) {\r\n return obj && Array.isArray(obj);\r\n },\r\n\r\n ready: function(callback) {\r\n if (document.attachEvent ? document.readyState === \"complete\" : document.readyState !== \"loading\") {\r\n callback();\r\n } else {\r\n document.addEventListener('DOMContentLoaded', callback);\r\n }\r\n },\r\n\r\n isEmpty: function(obj) {\r\n for (var prop in obj) {\r\n if (obj.hasOwnProperty(prop)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n\r\n numberString: function(nStr) {\r\n nStr += '';\r\n var x = nStr.split('.');\r\n var x1 = x[0];\r\n var x2 = x.length > 1 ? '.' + x[1] : '';\r\n var rgx = /(\\d+)(\\d{3})/;\r\n while (rgx.test(x1)) {\r\n x1 = x1.replace(rgx, '$1' + ',' + '$2');\r\n }\r\n return x1 + x2;\r\n },\r\n\r\n detectIE: function() {\r\n var ua = window.navigator.userAgent;\r\n\r\n // Test values; Uncomment to check result …\r\n\r\n // IE 10\r\n // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';\r\n\r\n // IE 11\r\n // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';\r\n\r\n // Edge 12 (Spartan)\r\n // ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0';\r\n\r\n // Edge 13\r\n // ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586';\r\n\r\n var msie = ua.indexOf('MSIE ');\r\n if (msie > 0) {\r\n // IE 10 or older => return version number\r\n return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\r\n }\r\n\r\n var trident = ua.indexOf('Trident/');\r\n if (trident > 0) {\r\n // IE 11 => return version number\r\n var rv = ua.indexOf('rv:');\r\n return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\r\n }\r\n\r\n var edge = ua.indexOf('Edge/');\r\n if (edge > 0) {\r\n // Edge (IE 12+) => return version number\r\n return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\r\n }\r\n\r\n // other browser\r\n return false;\r\n },\r\n\r\n isRTL: function() {\r\n return (KTUtil.attr(KTUtil.get('html'), 'direction') == 'rtl');\r\n },\r\n\r\n //\r\n\r\n // Scroller\r\n scrollInit: function(element, options) {\r\n if(!element) return;\r\n // Define init function\r\n function init() {\r\n var ps;\r\n var height;\r\n\r\n if (options.height instanceof Function) {\r\n height = parseInt(options.height.call());\r\n } else {\r\n height = parseInt(options.height);\r\n }\r\n\r\n // Destroy scroll on table and mobile modes\r\n if ((options.mobileNativeScroll || options.disableForMobile) && KTUtil.isInResponsiveRange('tablet-and-mobile')) {\r\n ps = KTUtil.data(element).get('ps');\r\n if (ps) {\r\n if (options.resetHeightOnDestroy) {\r\n KTUtil.css(element, 'height', 'auto');\r\n } else {\r\n KTUtil.css(element, 'overflow', 'auto');\r\n if (height > 0) {\r\n KTUtil.css(element, 'height', height + 'px');\r\n }\r\n }\r\n\r\n ps.destroy();\r\n ps = KTUtil.data(element).remove('ps');\r\n } else if (height > 0){\r\n KTUtil.css(element, 'overflow', 'auto');\r\n KTUtil.css(element, 'height', height + 'px');\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (height > 0) {\r\n KTUtil.css(element, 'height', height + 'px');\r\n }\r\n\r\n if (options.desktopNativeScroll) {\r\n KTUtil.css(element, 'overflow', 'auto');\r\n return;\r\n }\r\n\r\n // Init scroll\r\n KTUtil.css(element, 'overflow', 'hidden');\r\n\r\n ps = KTUtil.data(element).get('ps');\r\n if (ps) {\r\n ps.update();\r\n } else {\r\n KTUtil.addClass(element, 'kt-scroll');\r\n ps = new PerfectScrollbar(element, {\r\n wheelSpeed: 0.5,\r\n swipeEasing: true,\r\n wheelPropagation: (options.windowScroll === false ? false : true),\r\n minScrollbarLength: 40,\r\n maxScrollbarLength: 300,\r\n suppressScrollX: KTUtil.attr(element, 'data-scroll-x') != 'true' ? true : false\r\n });\r\n\r\n KTUtil.data(element).set('ps', ps);\r\n }\r\n\r\n // Remember scroll position in cookie\r\n var uid = KTUtil.attr(element, 'id');\r\n\r\n if (options.rememberPosition === true && Cookies && uid) {\r\n if (Cookies.get(uid)) {\r\n var pos = parseInt(Cookies.get(uid));\r\n\r\n if (pos > 0) {\r\n element.scrollTop = pos;\r\n }\r\n }\r\n\r\n element.addEventListener('ps-scroll-y', function() {\r\n Cookies.set(uid, element.scrollTop);\r\n });\r\n }\r\n }\r\n\r\n // Init\r\n init();\r\n\r\n // Handle window resize\r\n if (options.handleWindowResize) {\r\n KTUtil.addResizeHandler(function() {\r\n init();\r\n });\r\n }\r\n },\r\n\r\n scrollUpdate: function(element) {\r\n var ps = KTUtil.data(element).get('ps');\r\n if (ps) {\r\n ps.update();\r\n }\r\n },\r\n\r\n scrollUpdateAll: function(parent) {\r\n var scrollers = KTUtil.findAll(parent, '.ps');\r\n for (var i = 0, len = scrollers.length; i < len; i++) {\r\n KTUtil.scrollUpdate(scrollers[i]);\r\n }\r\n },\r\n\r\n scrollDestroy: function(element) {\r\n var ps = KTUtil.data(element).get('ps');\r\n if (ps) {\r\n ps.destroy();\r\n ps = KTUtil.data(element).remove('ps');\r\n }\r\n },\r\n\r\n setHTML: function(el, html) {\r\n if (KTUtil.get(el)) {\r\n KTUtil.get(el).innerHTML = html;\r\n }\r\n },\r\n\r\n getHTML: function(el) {\r\n if (KTUtil.get(el)) {\r\n return KTUtil.get(el).innerHTML;\r\n }\r\n },\r\n\r\n getDocumentHeight: function() {\r\n var body = document.body;\r\n var html = document.documentElement;\r\n\r\n return Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight );\r\n },\r\n\r\n getScrollTop: function() {\r\n return (document.scrollingElement || document.documentElement).scrollTop;\r\n }\r\n }\r\n}();\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTUtil;\r\n}\r\n\r\n// Initialize KTUtil class on document ready\r\nKTUtil.ready(function() {\r\n KTUtil.init();\r\n});\r\n\r\n// CSS3 Transitions only after page load(.kt-page-loading class added to body tag and remove with JS on page load)\r\nwindow.onload = function() {\r\n KTUtil.removeClass(KTUtil.get('body'), 'kt-page--loading');\r\n}\r\n\r\nexport default KTUtil;\r\n","import { persistReducer } from \"redux-persist\";\r\nimport storage from \"redux-persist/lib/storage\";\r\n\r\nconst actionTypes = {\r\n SetLanguage: \"i18n/SET_LANGUAGE\"\r\n};\r\n\r\nconst initialState = {\r\n lang: \"en\"\r\n};\r\n\r\nexport const reducer = persistReducer(\r\n { storage, key: \"i18n\" },\r\n (state = initialState, action) => {\r\n switch (action.type) {\r\n case actionTypes.SetLanguage:\r\n return { ...state, lang: action.payload.lang };\r\n\r\n default:\r\n return state;\r\n }\r\n }\r\n);\r\n\r\nexport const actions = {\r\n setLanguage: lang => ({ type: actionTypes.SetLanguage, payload: { lang } })\r\n};\r\n","import * as utils from \"../../_metronic/utils/utils\";\r\n\r\nconst localStorageLastLocationKey = \"demo1-lastLocation\";\r\n\r\nfunction acceptLocation(lastLocation) {\r\n if (\r\n lastLocation &&\r\n lastLocation.pathname &&\r\n lastLocation.pathname !== \"/\" &&\r\n lastLocation.pathname.indexOf(\"auth\") === -1 &&\r\n lastLocation.pathname !== \"/logout\"\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport function saveLastLocation(lastLocation) {\r\n const localStorateLocations = utils.getStorage(localStorageLastLocationKey);\r\n let _useLocations = localStorateLocations\r\n ? JSON.parse(localStorateLocations)\r\n : [];\r\n\r\n if (acceptLocation(lastLocation)) {\r\n _useLocations.push(lastLocation.pathname);\r\n utils.setStorage(\r\n localStorageLastLocationKey,\r\n JSON.stringify(_useLocations),\r\n 120\r\n );\r\n }\r\n}\r\n\r\nexport function forgotLastLocation() {\r\n utils.removeStorage(localStorageLastLocationKey);\r\n}\r\n\r\nexport function getLastLocation() {\r\n const localStorateLocations = utils.getStorage(localStorageLastLocationKey);\r\n if (!localStorateLocations) {\r\n return \"/\";\r\n }\r\n\r\n const _userLocations = JSON.parse(localStorateLocations);\r\n const result = _userLocations.length > 0 ? _userLocations.pop() : \"/\";\r\n return result;\r\n}\r\n","\r\nimport * as auth from \"../../app/store/ducks/auth.duck\";\r\nimport * as reference from \"../../app/store/ducks/reference.duck\";\r\nimport * as admin from \"../../app/store/ducks/admin.duck\";\r\n\r\n// import { reauth } from \"../../app/crud/auth.crud\";\r\n\r\nexport const apiURL = process.env.REACT_APP_APIIP;\r\n\r\nexport function removeCSSClass(ele, cls) {\r\n const reg = new RegExp(\"(\\\\s|^)\" + cls + \"(\\\\s|$)\");\r\n ele.className = ele.className.replace(reg, \" \");\r\n}\r\n\r\nexport function addCSSClass(ele, cls) {\r\n ele.classList.add(cls);\r\n}\r\n\r\nexport const toAbsoluteUrl = pathname => process.env.PUBLIC_URL + pathname;\r\n\r\nexport const hashPassword = (salt, password) => {\r\n\r\nvar crypto = require('crypto')\r\n\r\n if (salt && password) {\r\n var hashed = crypto.pbkdf2Sync(password, salt, 100000, 64, 'sha512').toString('hex');\r\n // console.log(\"hashed:\",hashed);\r\n return hashed;\r\n } else {\r\n return password;\r\n }\r\n};\r\n\r\nexport function setupAxios(axios, store) {\r\n axios.interceptors.request.use(\r\n config => {\r\n if ((config.url.search('/psychologistdata') !== -1) || (config.url.search('/files') !== -1) || (config.url.search('/note') !== -1) || (config.url.search('/register/clientdata') !== -1))\r\n {\r\n // ok it is a form post \r\n // console.log('Its a form PUT');\r\n const {\r\n auth: { authToken }\r\n } = store.getState();\r\n if (authToken) {\r\n config.headers = { Authorization: `Bearer ${authToken}`, 'Content-Type' : 'multipart/form-data'}\r\n }\r\n }\r\n else\r\n {\r\n // console.log('Auth');\r\n // console.log(config.url);\r\n const \r\n {\r\n auth: { authToken }\r\n } = store.getState();\r\n if (authToken) \r\n {\r\n config.headers = { Authorization: `Bearer ${authToken}`, 'Content-Type' : 'application/json'}\r\n }\r\n }\r\n return config;\r\n },\r\n err => Promise.reject(err)\r\n );\r\n\r\n axios.interceptors.request.use(\r\n config => {\r\n const {\r\n auth: { authToken }\r\n } = store.getState();\r\n\r\n if (authToken) {\r\n config.headers.Authorization = `Bearer ${authToken}`;\r\n }\r\n\r\n return config;\r\n },\r\n err => Promise.reject(err)\r\n );\r\n axios.interceptors.response.use((response) => {\r\n return response\r\n }, \r\n function (error) {\r\n const originalRequest = error.config;\r\n const { auth: { refreshToken }} = store.getState();\r\n if (error.response.status === 401 && !originalRequest._retry && refreshToken) {\r\n originalRequest._retry = true;\r\n // const { auth: { authToken,refreshToken }} = store.getState();\r\n // console.log ('Get New Token');\r\n // console.log (refreshToken);\r\n // console.log(originalRequest);\r\n return axios.post(apiURL+'/users/reauth',{ refreshToken })\r\n .then(res => {\r\n //console.log(res);\r\n if (res.status === 200) \r\n {\r\n // 1) put token to LocalStorage\r\n // console.log ('Received New Token');\r\n // console.log (res.data.token);\r\n // console.log (res.data.refreshToken);\r\n // const { authToken } = res.data.token;\r\n // const { refreshToken } = res.data.refreshToken;\r\n store.dispatch({ type: auth.actionTypes.Reauth, payload: { authToken:res.data.token, refreshToken:res.data.refreshToken } })\r\n // console.log(originalRequest);\r\n return axios(originalRequest);\r\n }\r\n })\r\n .catch(() => {\r\n store.dispatch({ type: reference.actionTypes.SET_INITIAL }); \r\n store.dispatch({ type: admin.actionTypes.SET_INITIAL }); \r\n store.dispatch({ type: auth.actionTypes.Logout })\r\n // console.log('Logged Out');\r\n });\r\n } \r\n else\r\n {\r\n return Promise.reject(error);\r\n }\r\n\r\n });\r\n}\r\n\r\n/* removeStorage: removes a key from localStorage and its sibling expiracy key\r\n params:\r\n key <string> : localStorage key to remove\r\n returns:\r\n <boolean> : telling if operation succeeded\r\n */\r\nexport function removeStorage(key) {\r\n try {\r\n localStorage.setItem(key, \"\");\r\n localStorage.setItem(key + \"_expiresIn\", \"\");\r\n } catch (e) {\r\n console.log(\r\n \"removeStorage: Error removing key [\" +\r\n key +\r\n \"] from localStorage: \" +\r\n JSON.stringify(e)\r\n );\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\n/* getStorage: retrieves a key from localStorage previously set with setStorage().\r\n params:\r\n key <string> : localStorage key\r\n returns:\r\n <string> : value of localStorage key\r\n null : in case of expired key or failure\r\n */\r\nexport function getStorage(key) {\r\n const now = Date.now(); //epoch time, lets deal only with integer\r\n // set expiration for storage\r\n let expiresIn = localStorage.getItem(key + \"_expiresIn\");\r\n if (expiresIn === undefined || expiresIn === null) {\r\n expiresIn = 0;\r\n }\r\n\r\n expiresIn = Math.abs(expiresIn);\r\n if (expiresIn < now) {\r\n // Expired\r\n removeStorage(key);\r\n return null;\r\n } else {\r\n try {\r\n const value = localStorage.getItem(key);\r\n return value;\r\n } catch (e) {\r\n console.log(\r\n \"getStorage: Error reading key [\" +\r\n key +\r\n \"] from localStorage: \" +\r\n JSON.stringify(e)\r\n );\r\n return null;\r\n }\r\n }\r\n}\r\n/* setStorage: writes a key into localStorage setting a expire time\r\n params:\r\n key <string> : localStorage key\r\n value <string> : localStorage value\r\n expires <number> : number of seconds from now to expire the key\r\n returns:\r\n <boolean> : telling if operation succeeded\r\n */\r\nexport function setStorage(key, value, expires) {\r\n if (expires === undefined || expires === null) {\r\n expires = 24 * 60 * 60; // default: seconds for 1 day\r\n }\r\n\r\n const now = Date.now(); //millisecs since epoch time, lets deal only with integer\r\n const schedule = now + expires * 1000;\r\n try {\r\n localStorage.setItem(key, value);\r\n localStorage.setItem(key + \"_expiresIn\", schedule);\r\n } catch (e) {\r\n console.log(\r\n \"setStorage: Error setting key [\" +\r\n key +\r\n \"] in localStorage: \" +\r\n JSON.stringify(e)\r\n );\r\n return false;\r\n }\r\n return true;\r\n}\r\n","import { persistReducer } from 'redux-persist';\r\nimport storage from 'redux-persist/lib/storage';\r\nimport { put, takeLatest, all } from 'redux-saga/effects';\r\n// import { getUserByToken } from '../../crud/auth.crud';\r\nimport * as routerHelpers from '../../router/RouterHelpers';\r\nimport axios from 'axios';\r\nimport { apiURL } from '../../../settings';\r\nimport { toast } from 'react-toastify';\r\n\r\nexport const BASE_URL = apiURL()+'/users';\r\n\r\nexport const actionTypes = {\r\n Login: '[Login] Action',\r\n Logout: '[Logout] Action',\r\n Reauth: '[Reauth] Action',\r\n FETCH_MFAQR: 'FETCH_MFAQR',\r\n SET_MFAQR: 'SET_MFAQR',\r\n SET_CONFIRMCODE: 'SET_CONFIRMCODE',\r\n POST_CONFIRMCODE: 'POST_CONFIRMCODE',\r\n POST_ACTIVATEMFA: 'POST_ACTIVATEMFA',\r\n POST_DEACTIVATEMFA: 'POST_DEACTIVATEMFA',\r\n SET_INITAL: 'SET_INITAL',\r\n SET_INITALTOTP: 'SET_INITALTOTP',\r\n POST_UPDATEPASSWORD: 'POST_UPDATEPASSWORD',\r\n SET_INITIALRECOVERY: 'SET_INITIALRECOVERY',\r\n SET_SSOOK : \"SET_SSOOK\",\r\n SET_SSOCLEAR : \"SET_SSOCLEAR\",\r\n SET_SSOFORM : \"SET_SSOFORM\",\r\n SET_SSOFORMCLEAR : \"SET_SSOFORMCLEAR\"\r\n\r\n}\r\n\r\nconst initialAuthState = {\r\n MFAQR: undefined,\r\n CodeAccepted: undefined,\r\n BckupCodes: undefined,\r\n user: undefined,\r\n authToken: undefined,\r\n firstName: undefined,\r\n surname: undefined,\r\n preferredName: undefined,\r\n refreshToken: undefined,\r\n roleID : undefined,\r\n roleDesc: undefined,\r\n roleScope: undefined,\r\n userTZ: undefined,\r\n winbrowserTZ: undefined,\r\n providertype: undefined,\r\n recoveryStatus: undefined,\r\n totp: undefined,\r\n forcePasswordChange: undefined,\r\n SSOStatus: null,\r\n SSOForm: null,\r\n}\r\n\r\n\r\nexport const reducer = persistReducer(\r\n { storage, key: 'RuralHealthConnect-Auth-2022-02-16', whitelist: ['user', 'authToken', 'refreshToken', 'firstName', 'surname', 'preferredName','roleId', 'roleDesc', 'roleScope','userTZ', 'winbrowserTZ', 'providertype', 'Filters'] },\r\n (state = initialAuthState, action) => {\r\n switch (action.type) {\r\n\r\n case actionTypes.Login: {\r\n // console.log ('In Login reducer')\r\n // console.log (action.payload);\r\n const { authToken, refreshToken, firstName, surname, preferredName, roleID, roleDesc, roleScope, userTZ, winbrowserTZ, totp, forcePasswordChange, providertype, recoveryStatus} = action.payload;\r\n // console.log(authToken);\r\n // console.log(refreshToken);\r\n // console.log(recoveryStatus);\r\n // console.log(forcePasswordChange)\r\n return { ...state, authToken, refreshToken, firstName, surname, preferredName, roleID, roleDesc, roleScope, userTZ, winbrowserTZ, totp, forcePasswordChange, providertype, user: undefined, recoveryStatus, SSOStatus: true};\r\n }\r\n\r\n case actionTypes.Logout: {\r\n routerHelpers.forgotLastLocation();\r\n return initialAuthState;\r\n }\r\n\r\n case actionTypes.Reauth: {\r\n // console.log ('In Reauth reducer')\r\n // console.log(action.payload);\r\n const { authToken, refreshToken } = action.payload;\r\n return { ...state, authToken, refreshToken }; \r\n }\r\n\r\n case actionTypes.SET_MFAQR: {\r\n // console.log('In Reducer - SET_MFAQR')\r\n // console.log(action.payload)\r\n return {\r\n ...state,\r\n MFAQR : action.payload[0].qrCode, \r\n };\r\n }\r\n\r\n case actionTypes.SET_CONFIRMCODE: {\r\n return {\r\n ...state,\r\n CodeAccepted : action.payload.status,\r\n BackupCodes: action.payload.backupCodes,\r\n };\r\n }\r\n\r\n case actionTypes.SET_INITIALRECOVERY:\r\n {\r\n return {\r\n ...state,\r\n recoveryStatus: undefined\r\n }\r\n }\r\n\r\n case actionTypes.SET_INITALTOTP:\r\n {\r\n return {\r\n ...state,\r\n totp: undefined\r\n }\r\n }\r\n\r\n case actionTypes.SET_INITAL: {\r\n return {\r\n ...state,\r\n CodeAccepted : undefined,\r\n CodeFailed : undefined\r\n };\r\n }\r\n\r\n case actionTypes.SET_SSOOK:{\r\n return {\r\n ...state,\r\n SSOStatus: true,\r\n };\r\n }\r\n case actionTypes.SET_SSOCLEAR:{\r\n return {\r\n ...state,\r\n SSOStatus: null,\r\n };\r\n }\r\n\r\n case actionTypes.SET_SSOFORM:{\r\n return {\r\n ...state,\r\n SSOForm: action.payload,\r\n };\r\n }\r\n\r\n case actionTypes.SET_SSOFORMCLEAR:{\r\n return {\r\n ...state,\r\n SSOForm: null,\r\n };\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n }\r\n);\r\n\r\nexport function* fetchMFAQR(action)\r\n{\r\n try \r\n {\r\n const newURL = BASE_URL + '/mfa';\r\n // Request QR Code\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== 'Error') \r\n {\r\n yield put({ type: 'SET_MFAQR', payload: response.data});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Action Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* postConfirmCode(action)\r\n{\r\n try \r\n {\r\n // Reset Parameters \r\n yield put({ type: 'SET_INITAL'});\r\n // Send TOTP for validation and receive backup codes \r\n const newURL = BASE_URL + '/validatetotp';\r\n const response = yield axios.post(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== 'Error') \r\n {\r\n yield put({ type: 'SET_CONFIRMCODE', payload: response.data});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Action Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* postUpdatePassword(action)\r\n{\r\n try \r\n {\r\n const newURL = BASE_URL + '/updatepassword';\r\n const response = yield axios.post(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== 'Error') \r\n {\r\n toast.success(\"Password Updated\",{ autoClose:5000 });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error('`Password Update Failed');\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* postActivateMFA(action)\r\n{\r\n try \r\n {\r\n // Advise that MFA should be activated \r\n const newURL = BASE_URL + '/activatemfa';\r\n const response = yield axios.post(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== 'Error') \r\n {\r\n if(action.payload.type === 'Admin')\r\n {\r\n yield put({ type: 'FETCH_ADMINUSER', payload: { popCache: true } });\r\n } \r\n else\r\n {\r\n yield put({ type: 'FETCH_REGISTERED', payload: { popCache: true } });\r\n }\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Action Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* postDeactivateMFA(action)\r\n{\r\n try \r\n {\r\n // Advise that MFA should be deactivated \r\n const newURL = BASE_URL + '/deactivatemfa';\r\n const response = yield axios.post(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== 'Error') \r\n {\r\n if(action.payload.type === 'Admin')\r\n {\r\n yield put({ type: 'FETCH_ADMINUSER', payload: { popCache: true } });\r\n } \r\n else\r\n {\r\n yield put({ type: 'FETCH_REGISTERED', payload: { popCache: true } });\r\n }\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Action Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\n\r\n\r\nexport const actions = {\r\n login: (authToken,refreshToken,firstName,surname,preferredName,roleID,roleDesc,roleScope,userTZ,winbrowserTZ,totp,forcePasswordChange,providertype,recoveryStatus) => ({ type: actionTypes.Login, payload: { authToken, refreshToken, firstName, surname, preferredName, roleID, roleDesc, roleScope, userTZ, winbrowserTZ, totp, forcePasswordChange, providertype, recoveryStatus } }),\r\n logout: () => ({ type: actionTypes.Logout }),\r\n reauth: (authToken,refreshToken) => ({ type: actionTypes.Reauth, payload: { authToken, refreshToken }}),\r\n getMFA: () => ({ type: actionTypes.FETCH_MFAQR }),\r\n postActivateMFA: (payload) => ({type: actionTypes.POST_ACTIVATEMFA, payload : payload }),\r\n postDeactivateMFA: (payload) => ({type: actionTypes.POST_DEACTIVATEMFA, payload : payload }),\r\n postConfirmCode: (payload) => ({type: actionTypes.POST_CONFIRMCODE, payload : payload }),\r\n updatePassword: (payload) => ({type: actionTypes.POST_UPDATEPASSWORD, payload : payload }),\r\n clearMFAToken: () => ({type: actionTypes.SET_INITALTOTP }),\r\n clearRecovery: () => ({type: actionTypes.SET_INITIALRECOVERY }),\r\n ssook: () => ({ type: actionTypes.SET_SSOOK }),\r\n ssoclear: () => ({ type: actionTypes.SET_SSOCLEAR }),\r\n ssoform: (payload) => ({ type: actionTypes.SET_SSOFORM, payload: payload }),\r\n ssoformclear: () => ({ type: actionTypes.SET_SSOFORMCLEAR }),\r\n\r\n};\r\n\r\nfunction* actionWatcher() {\r\n yield takeLatest('FETCH_MFAQR',fetchMFAQR);\r\n yield takeLatest('POST_CONFIRMCODE',postConfirmCode);\r\n yield takeLatest('POST_ACTIVATEMFA',postActivateMFA);\r\n yield takeLatest('POST_DEACTIVATEMFA',postDeactivateMFA);\r\n yield takeLatest('POST_UPDATEPASSWORD',postUpdatePassword);\r\n}\r\n\r\nexport function* saga() {\r\n yield takeLatest(actionTypes.Login, function* loginSaga() {\r\n \r\n });\r\n yield all([\r\n actionWatcher(),\r\n ]); \r\n\r\n\r\n\r\n}\r\n","import { toAbsoluteUrl } from \"../utils/utils\";\r\n\r\nexport const initLayoutConfig = {\r\n demo: \"demo1\",\r\n // == Base Layout\r\n self: {\r\n layout: \"fluid\",\r\n // body: { \"background-image\": toAbsoluteUrl(\"/media/misc/bg-1.jpg\") },\r\n logo: {\r\n dark: toAbsoluteUrl(\"/media/logos/logo-light.png\"),\r\n light: toAbsoluteUrl(\"/media/logos/logo-dark.png\"),\r\n brand: toAbsoluteUrl(\"/media/logos/logo-light.png\"),\r\n green: toAbsoluteUrl(\"/media/logos/logo-light.png\")\r\n }\r\n },\r\n // == Portlet Plugin\r\n // portlet: {\r\n // sticky: {\r\n // offset: 50\r\n // }\r\n // },\r\n // == Page Splash Screen loading\r\n loader: {\r\n enabled: true,\r\n type: \"spinner-logo\",\r\n logo: toAbsoluteUrl(\"/media/logos/logo-mini-md.png\"),\r\n message: \"Please wait...\"\r\n },\r\n // == Colors for javascript\r\n colors: {\r\n state: {\r\n brand: \"#5d78ff\",\r\n dark: \"#282a3c\",\r\n light: \"#ffffff\",\r\n primary: \"#5867dd\",\r\n success: \"#34bfa3\",\r\n info: \"#36a3f7\",\r\n warning: \"#ffb822\",\r\n danger: \"#fd3995\"\r\n },\r\n base: {\r\n label: [\"#c5cbe3\", \"#a1a8c3\", \"#3d4465\", \"#3e4466\"],\r\n shape: [\"#f0f3ff\", \"#d9dffa\", \"#afb4d4\", \"#646c9a\"]\r\n }\r\n },\r\n // page toolbar\r\n toolbar: {\r\n display: true\r\n },\r\n header: {\r\n self: {\r\n width: \"fluid\", // fixed|fluid\r\n skin: \"light\",\r\n fixed: {\r\n desktop: true,\r\n mobile: true\r\n }\r\n },\r\n menu: {\r\n self: {\r\n display: true,\r\n layout: \"default\",\r\n \"root-arrow\": false,\r\n \"icon-style\": \"duotone\"\r\n },\r\n desktop: {\r\n arrow: true,\r\n toggle: \"click\",\r\n submenu: {\r\n skin: \"light\",\r\n arrow: true\r\n }\r\n },\r\n mobile: {\r\n submenu: {\r\n skin: \"dark\",\r\n accordion: true\r\n }\r\n }\r\n }\r\n },\r\n subheader: {\r\n display: false,\r\n displayDesc: false,\r\n displayDaterangepicker: true,\r\n layout: \"subheader-v1\",\r\n fixed: true,\r\n width: 'fluid', // fixed|fluid,\r\n clear: false,\r\n style: 'solid'\r\n },\r\n content: {\r\n width: \"fluid\"\r\n },\r\n brand: {\r\n self: {\r\n skin: \"dark\"\r\n }\r\n },\r\n aside: {\r\n self: {\r\n skin: \"dark\",\r\n display: true,\r\n fixed: true,\r\n minimize: {\r\n toggle: true,\r\n default: false\r\n }\r\n },\r\n footer: {\r\n self: {\r\n display: true\r\n }\r\n },\r\n menu: {\r\n dropdown: \"false\",\r\n scroll: false,\r\n \"icon-style\": \"duotone\",\r\n submenu: {\r\n accordion: true,\r\n dropdown: {\r\n arrow: true,\r\n \"hover-timeout\": 100\r\n }\r\n }\r\n }\r\n },\r\n footer: {\r\n self: {\r\n width: 'fluid',\r\n fixed: false\r\n }\r\n }\r\n};\r\n\r\nlet LayoutConfig = JSON.parse(JSON.stringify(initLayoutConfig)); // deep object copy\r\nexport default LayoutConfig;","\r\nexport default function MenuConfig({roleDesc,roleScope}) {\r\n\r\n switch(roleDesc) {\r\n case 'Client': \r\n const itemsBasic = { \r\n header: {\r\n self: {},\r\n items: []\r\n },\r\n aside: {\r\n self: {},\r\n items: [\r\n {\r\n title: \"Dashboard\",\r\n root: true,\r\n icon: \"flaticon2-architecture-and-city\",\r\n page: \"dashboard\",\r\n bullet: \"dot\"\r\n },\r\n {\r\n title: \"Search Providers\",\r\n root: true,\r\n icon: \"flaticon2-map\",\r\n bullet: \"dot\",\r\n page: \"search\"\r\n },\r\n {\r\n title: \"Bookings\",\r\n root: true,\r\n icon: \"flaticon2-time\",\r\n bullet: \"dot\",\r\n page: \"bookings\"\r\n },\r\n {\r\n title: \"Profile\",\r\n root: true,\r\n icon: \"flaticon2-gear\",\r\n bullet: \"dot\",\r\n page: \"profile\"\r\n },\r\n {\r\n title: \"Files\",\r\n root: true,\r\n icon: \"flaticon-file\",\r\n bullet: \"dot\",\r\n page: \"files\"\r\n },\r\n {\r\n title: \"Log out\",\r\n root: true,\r\n icon: \"flaticon2-circular-arrow\",\r\n page: \"logout\"\r\n },\r\n ]\r\n }\r\n };\r\n return itemsBasic;\r\n\r\n case 'Admin': \r\n // console.log(roleScope)\r\n if (roleScope !== 'Provisional')\r\n {\r\n const itemsAdmin = {\r\n header: {\r\n self: {},\r\n items: []\r\n },\r\n aside: {\r\n self: {},\r\n items: [\r\n {\r\n title: \"Dashboard\",\r\n root: true,\r\n icon: \"flaticon2-architecture-and-city\",\r\n page: \"dashboard\",\r\n bullet: \"dot\"\r\n },\r\n {\r\n title: \"Search\",\r\n root: true,\r\n icon: \"flaticon2-search\",\r\n page: \"searchclientdata\",\r\n bullet: \"dot\"\r\n },\r\n {\r\n title: \"Search Bookings\",\r\n root: true,\r\n icon: \"flaticon2-search\",\r\n page: \"searchbookingdata\",\r\n bullet: \"dot\"\r\n },\r\n {\r\n title: \"Faxes\",\r\n root: true,\r\n icon: \"flaticon2-paper\",\r\n page: \"faxes\"\r\n },\r\n {\r\n title: \"Interested Providers\",\r\n root: true,\r\n icon: \"flaticon2-map\",\r\n page: \"interestedPsychologists\"\r\n },\r\n {\r\n title: \"Registered Providers\",\r\n root: true,\r\n icon: \"flaticon2-avatar\",\r\n page: \"registeredPsychologists\"\r\n },\r\n {\r\n title: \"Referrers\",\r\n root: true,\r\n icon: \"flaticon2-avatar\",\r\n page: \"referrers\"\r\n },\r\n {\r\n title: \"Invited Clients\",\r\n root: true,\r\n icon: \"flaticon-download-1\",\r\n page: \"clientinvites\"\r\n },\r\n {\r\n title: \"Clients\",\r\n root: true,\r\n icon: \"flaticon2-user\",\r\n bullet : \"dot\",\r\n submenu: [\r\n {\r\n title: \"Psychology\",\r\n page: \"psychologyclients\"\r\n },\r\n {\r\n title: \"Provisional\",\r\n page: \"provisionalclients\"\r\n },\r\n {\r\n title: \"MH Social Worker\",\r\n page: \"socialclients\"\r\n },\r\n { title: \"Mental Health Nurse\",\r\n page: \"nurseclients\"\r\n },\r\n {\r\n title: \"Financial\",\r\n page: \"financialclients\"\r\n },\r\n {\r\n title: \"GP\",\r\n page: \"gpclients\"\r\n },\r\n {\r\n title: \"Supervision\",\r\n page: \"supervisionclients\"\r\n },\r\n {\r\n title: \"EAP/Contract\",\r\n page: \"eapcontractclients\"\r\n },\r\n {\r\n title: \"NthQLDPHN\",\r\n page: \"nthqldphnclients\"\r\n },\r\n {\r\n title: \"NDIS\",\r\n page: \"ndisclients\"\r\n },\r\n {\r\n title: \"Private\",\r\n page: \"privateclients\"\r\n },\r\n {\r\n title: \"Unassociated\",\r\n page: \"unassociated\"\r\n },\r\n ]\r\n },\r\n {\r\n title: \"Medical\",\r\n root: true,\r\n icon: \"flaticon2-hospital\",\r\n bullet: \"dot\",\r\n submenu: [\r\n {\r\n title: \"Medical Practitioners\",\r\n page: \"medicalpractitioners\"\r\n },\r\n {\r\n title: \"Practices\",\r\n page: \"medicalpractices\"\r\n }\r\n ]\r\n },\r\n {\r\n title: \"Provider Invoicing\",\r\n root: true,\r\n icon: \"flaticon2-shopping-cart\",\r\n submenu: [\r\n {\r\n title: \"Verify Provider\",\r\n page: \"xeroverify\"\r\n },\r\n {\r\n title: \"Gather All Bookings\",\r\n page: \"gatherbillableall\"\r\n },\r\n {\r\n title: \"Gather Provider Clients\",\r\n page: \"gatherbillable\"\r\n },\r\n {\r\n title: \"Gather Contract/EAP Clients\",\r\n page: \"gathercontracts\"\r\n },\r\n {\r\n title: \"Gather NthQLDPHN Clients\",\r\n page: \"gathernthqldphn\"\r\n },\r\n {\r\n title: \"Gather Contract by Provider\",\r\n page: \"gathercontractsprovider\"\r\n },\r\n {\r\n title: \"Generate Provider Invoices\",\r\n page: \"invoices\"\r\n },\r\n {\r\n title: \"Generate Contract/EAP Invoices\",\r\n page: \"contractinv\"\r\n },\r\n {\r\n title: \"Invoice Log\",\r\n page: \"invoicelog\"\r\n }\r\n ]\r\n },\r\n {\r\n title: \"Notifications\",\r\n root: true,\r\n icon: \"flaticon2-bell\",\r\n page: \"notifications\"\r\n },\r\n {\r\n title: \"My Profile\",\r\n root: true,\r\n icon: \"flaticon2-user-1\",\r\n page: \"adminprofile\"\r\n },\r\n {\r\n title: \"Log out\",\r\n root: true,\r\n icon: \"flaticon-logout\",\r\n page: \"logout\"\r\n },\r\n { section: \"System Configuration\" }, \r\n {\r\n title: \"Admin Users\",\r\n root: true,\r\n icon: \"flaticon2-document\",\r\n bullet: \"dot\",\r\n page: \"adminusers\"\r\n },\r\n {\r\n title: \"Forms\",\r\n root: true,\r\n icon: \"flaticon2-document\",\r\n bullet: \"dot\",\r\n page: \"forms\"\r\n },\r\n {\r\n title: \"Tags Setup\",\r\n root: true,\r\n icon: \"flaticon2-document\",\r\n bullet: \"dot\",\r\n page: \"metadataconfig\"\r\n },\r\n {\r\n title: \"Contract/EAP Setup\",\r\n root: true,\r\n icon: \"flaticon2-document\",\r\n bullet: \"dot\",\r\n page: \"contracts\"\r\n },\r\n {\r\n title: \"Opportunity Setup\",\r\n root: true,\r\n icon: \"flaticon2-document\",\r\n bullet: \"dot\",\r\n page: \"opportunity\"\r\n },\r\n {\r\n title: \"Program Setup\",\r\n root: true,\r\n icon: \"flaticon2-document\",\r\n bullet: \"dot\",\r\n page: \"programs\"\r\n },\r\n {\r\n title: \"Survey Setup\",\r\n root: true,\r\n icon: \"flaticon2-document\",\r\n bullet: \"dot\",\r\n page: \"surveys\"\r\n },\r\n {\r\n title: \"Provider Stats\",\r\n root: true,\r\n icon: \"flaticon2-document\",\r\n bullet: \"dot\",\r\n page: \"providerstatistics\"\r\n },\r\n {\r\n title: \"NthQLDPHN Stats\",\r\n root: true,\r\n icon: \"flaticon2-document\",\r\n bullet: \"dot\",\r\n page: \"nthqldphnstatistics\"\r\n },\r\n {\r\n title: \"Reporting Options\",\r\n root: true,\r\n icon: \"flaticon2-document\",\r\n bullet: \"dot\",\r\n page: \"adminreporting\"\r\n },\r\n\r\n ]\r\n }\r\n };\r\n return itemsAdmin;\r\n }\r\n else\r\n {\r\n const itemsAdmin = {\r\n header: {\r\n self: {},\r\n items: []\r\n },\r\n aside: {\r\n self: {},\r\n items: [\r\n {\r\n title: \"Dashboard\",\r\n root: true,\r\n icon: \"flaticon2-architecture-and-city\",\r\n page: \"dashboard\",\r\n bullet: \"dot\"\r\n },\r\n {\r\n title: \"Registered Providers\",\r\n root: true,\r\n icon: \"flaticon2-avatar\",\r\n page: \"registeredPsychologists\"\r\n },\r\n {\r\n title: \"Invited Clients\",\r\n root: true,\r\n icon: \"flaticon-download-1\",\r\n page: \"clientinvites\"\r\n },\r\n {\r\n title: \"Clients\",\r\n root: true,\r\n icon: \"flaticon2-user\",\r\n page: \"provisionalclients\"\r\n },\r\n {\r\n title: \"My Profile\",\r\n root: true,\r\n icon: \"flaticon2-user-1\",\r\n page: \"adminprofile\"\r\n },\r\n {\r\n title: \"Log out\",\r\n root: true,\r\n icon: \"flaticon-logout\",\r\n page: \"logout\"\r\n }\r\n ]\r\n }\r\n };\r\n return itemsAdmin;\r\n }\r\n\r\n case 'Psychologist': \r\n const itemsPsychologist = {\r\n header: {\r\n self: {},\r\n items: []\r\n },\r\n aside: {\r\n self: {},\r\n items: [\r\n {\r\n title: \"Dashboard\",\r\n root: true,\r\n icon: \"flaticon2-architecture-and-city\",\r\n page: \"dashboard\",\r\n translate: \"MENU.DASHBOARD\",\r\n bullet: \"dot\"\r\n },\r\n {\r\n title: \"Invited Clients\",\r\n root: true,\r\n icon: \"flaticon-download-1\",\r\n page: \"clientinvites\"\r\n },\r\n {\r\n title: \"Clients\",\r\n root: true,\r\n icon: \"flaticon2-map\",\r\n page: \"Clients\"\r\n },\r\n {\r\n title: \"Bookings\",\r\n root: true,\r\n icon: \"flaticon2-time\",\r\n bullet: \"dot\",\r\n page: \"bookings\"\r\n },\r\n {\r\n title: \"Tyro\",\r\n root: true,\r\n icon: \"flaticon2-shopping-cart\",\r\n submenu: [\r\n {\r\n title: \"Maintain Service Codes\",\r\n page: \"codes\"\r\n },\r\n {\r\n title: \"Invoicing\",\r\n page: \"invoices\"\r\n },\r\n ]\r\n },\r\n {\r\n title: \"Files\",\r\n root: true,\r\n icon: \"flaticon-file\",\r\n bullet: \"dot\",\r\n page: \"files\"\r\n },\r\n {\r\n title: \"Platform\",\r\n root: true,\r\n icon: \"flaticon2-document\",\r\n bullet: \"dot\",\r\n page: \"platform\"\r\n },\r\n {\r\n title: \"Forms\",\r\n root: true,\r\n icon: \"flaticon2-document\",\r\n bullet: \"dot\",\r\n page: \"forms\"\r\n },\r\n {\r\n title: \"Profile\",\r\n root: true,\r\n icon: \"flaticon2-gear\",\r\n bullet: \"dot\",\r\n page: \"profile\"\r\n },\r\n {\r\n title: \"Security\",\r\n root: true,\r\n icon: \"flaticon2-gear\",\r\n bullet: \"dot\",\r\n page: \"security\"\r\n },\r\n {\r\n title: \"Log out\",\r\n root: true,\r\n icon: \"flaticon2-circular-arrow\",\r\n page: \"logout\"\r\n },\r\n ]\r\n }\r\n };\r\n return itemsPsychologist;\r\n \r\n case 'Referrer': \r\n const itemsReferrer = { \r\n header: {\r\n self: {},\r\n items: []\r\n },\r\n aside: {\r\n self: {},\r\n items: [\r\n {\r\n title: \"Welcome\",\r\n root: true,\r\n icon: \"flaticon2-architecture-and-city\",\r\n page: \"dashboard\",\r\n bullet: \"dot\"\r\n },\r\n {\r\n title: \"Invited Clients\",\r\n root: true,\r\n icon: \"flaticon-download-1\",\r\n page: \"clientinvites\"\r\n },\r\n {\r\n title: \"Providers\",\r\n root: true,\r\n icon: \"flaticon2-map\",\r\n bullet: \"dot\",\r\n page: \"search\"\r\n },\r\n {\r\n title: \"Profile\",\r\n root: true,\r\n icon: \"flaticon2-gear\",\r\n bullet: \"dot\",\r\n page: \"profile\"\r\n },\r\n {\r\n title: \"Log out\",\r\n root: true,\r\n icon: \"flaticon2-circular-arrow\",\r\n page: \"logout\"\r\n },\r\n ]\r\n }\r\n };\r\n return itemsReferrer;\r\n \r\n\r\n\r\n default:\r\n }\r\n }\r\n\r\n\r\n\r\n","import objectPath from \"object-path\";\r\nimport { persistReducer } from \"redux-persist\";\r\nimport storage from \"redux-persist/lib/storage\";\r\n\r\nimport LayoutConfig from \"../layout/LayoutConfig\";\r\nimport MenuConfig from \"../layout/MenuConfig\";\r\n\r\nexport const actionTypes = {\r\n SetMenuConfig: \"builder/SET_MENU_CONFIG\",\r\n SetLayoutConfigs: \"builder/SET_LAYOUT_CONFIGS\",\r\n SetLayoutConfigsWithPageRefresh: \"builder/SET_LAYOUT_CONFIGS_WITH_PAGE_REFRESH\",\r\n SetHtmlClassService: \"builder/SET_HTML_CLASS_SERVICE\"\r\n};\r\n\r\nexport const selectors = {\r\n getClasses: (store, params) => {\r\n const { htmlClassServiceObjects } = store.builder;\r\n\r\n return htmlClassServiceObjects\r\n ? htmlClassServiceObjects.getClasses(params.path, params.toString)\r\n : \"\";\r\n },\r\n getAttributes: (store, params) => {\r\n if (params.path) {\r\n // if path is specified, get the value within object\r\n const { htmlClassServiceObjects } = store.builder;\r\n\r\n return htmlClassServiceObjects\r\n ? htmlClassServiceObjects.getAttributes(params.path)\r\n : []; }\r\n\r\n return [];\r\n },\r\n getConfig: (state, path) => {\r\n const { layoutConfig } = state.builder;\r\n\r\n if (path) {\r\n // if path is specified, get the value within object\r\n return objectPath.get(layoutConfig, path);\r\n }\r\n\r\n return \"\";\r\n },\r\n\r\n getLogo: ({ builder: { layoutConfig } }) => {\r\n const menuAsideLeftSkin = objectPath.get(layoutConfig, \"brand.self.skin\");\r\n // set brand logo\r\n const logoObject = objectPath.get(layoutConfig, \"self.logo\");\r\n let logo;\r\n if (typeof logoObject === \"string\") {\r\n logo = logoObject;\r\n }\r\n\r\n if (typeof logoObject === \"object\") {\r\n logo = objectPath.get(logoObject, menuAsideLeftSkin + \"\");\r\n }\r\n\r\n if (typeof logo === \"undefined\") {\r\n try {\r\n const logos = objectPath.get(this.layoutConfig, \"self.logo\");\r\n logo = logos[Object.keys(logos)[0]];\r\n } catch (e) {}\r\n }\r\n return logo;\r\n },\r\n\r\n getStickyLogo: store => {\r\n const { layoutConfig } = store.builder;\r\n let logo = objectPath.get(layoutConfig, \"self.logo.sticky\");\r\n if (typeof logo === \"undefined\") {\r\n logo = selectors.getLogo(store);\r\n }\r\n return logo + \"\";\r\n }\r\n};\r\n\r\nconst initialState = {\r\n menuConfig: {\r\n header: {\r\n self: {},\r\n items: []\r\n },\r\n aside: {\r\n self: {},\r\n items: []\r\n }\r\n },\r\n layoutConfig: LayoutConfig,\r\n htmlClassServiceObjects: undefined\r\n};\r\n\r\nexport const reducer = persistReducer(\r\n {\r\n storage,\r\n key: \"RuralHealthConnect\",\r\n blacklist: [\"htmlClassServiceObjects\"]\r\n },\r\n (state = initialState, { type, payload }) => {\r\n switch (type) {\r\n case actionTypes.SetMenuConfig:\r\n const menuItems = MenuConfig(payload);\r\n \r\n return { ...state, menuConfig: menuItems };\r\n\r\n case actionTypes.SetLayoutConfigs:\r\n return { ...state, layoutConfig: payload };\r\n\r\n case actionTypes.SetLayoutConfigsWithPageRefresh: {\r\n return {...state, layoutConfig: payload};\r\n }\r\n case actionTypes.SetHtmlClassService:\r\n return { ...state, htmlClassServiceObjects: payload };\r\n\r\n default:\r\n return state;\r\n }\r\n }\r\n);\r\n\r\nexport const actions = {\r\n setMenuConfig: payload => ({ payload, type: actionTypes.SetMenuConfig }),\r\n\r\n setLayoutConfigs: payload => ({\r\n payload,\r\n type: actionTypes.SetLayoutConfigs\r\n }),\r\n\r\n setLayoutConfigsWithPageRefresh: payload => ({\r\n payload,\r\n type: actionTypes.SetLayoutConfigsWithPageRefresh\r\n }),\r\n\r\n setHtmlClassService: payload => ({\r\n payload,\r\n type: actionTypes.SetHtmlClassService\r\n })\r\n};\r\n","import React, {\r\n createContext,\r\n useContext,\r\n useEffect,\r\n useMemo,\r\n useReducer\r\n} from \"react\";\r\n\r\n/**\r\n * Both context used to create inside react `redux`-like global state managed\r\n * entirely by react.\r\n *\r\n * @see https://kentcdodds.com/blog/how-to-use-react-context-effectively\r\n */\r\n\r\nconst LayoutContext = {\r\n /**\r\n * Stores layout state, can be consumed globally.\r\n */\r\n State: createContext(null),\r\n\r\n /**\r\n * Stores `dispatch` function to update layout state, intended to be internal.\r\n */\r\n Dispatch: createContext(null)\r\n};\r\n\r\n/**\r\n * Layout action types, used to filter out dispatched actions.\r\n */\r\nconst actionTypes = {\r\n /**\r\n * Initializes layout state from provided `{ pathname, menuConfig }` action\r\n * payload.\r\n */\r\n INIT: \"INIT\",\r\n\r\n /**\r\n * Updates current subheader from provided `{ title }` action payload.\r\n */\r\n SET_SUBHEADER: \"SET_SUBHEADER\",\r\n\r\n /**\r\n * Controls splash screen visibility.\r\n */\r\n SHOW_SPLASH_SCREEN: \"SHOW_SPLASH_SCREEN\",\r\n HIDE_SPLASH_SCREEN: \"HIDE_SPLASH_SCREEN\"\r\n};\r\n\r\n/**\r\n * Recursively runs over `items` to find `pageConfig` of `currentPage`.\r\n *\r\n * Returns `undefined` if there are no matches.\r\n */\r\nfunction findPageConfig(currentPage, items, breadcrumbs) {\r\n // Ignore non array `items`.\r\n if (!items || !Array.isArray(items)) {\r\n return;\r\n }\r\n\r\n for (const item of items) {\r\n // Return `item` if it's `page` matches `currentPage`\r\n if (currentPage === item.page && !item.submenu) {\r\n return item;\r\n }\r\n\r\n // Try to `pageConfig` in `item.submenu` if it is defined.\r\n if (item.submenu) {\r\n const pageConfig = findPageConfig(currentPage, item.submenu, breadcrumbs);\r\n if (pageConfig) {\r\n breadcrumbs.push(item);\r\n return pageConfig;\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Used to lazily create initial layout state.\r\n */\r\nfunction init({ pathname, menuConfig }) {\r\n const currentPage = pathname.slice(1 /* Remove leading slash. */);\r\n let breadcrumbs = [];\r\n const pageConfig =\r\n findPageConfig(currentPage, menuConfig.aside.items, breadcrumbs) ||\r\n findPageConfig(currentPage, menuConfig.header.items, breadcrumbs);\r\n\r\n breadcrumbs.reverse();\r\n const state = { subheader: { title: \"\", breadcrumb: [], description: \"\" }, splashScreen: { refs: {} } };\r\n if (pageConfig) {\r\n breadcrumbs.push(pageConfig);\r\n state.subheader.title = pageConfig.title;\r\n state.subheader.breadcrumb = breadcrumbs;\r\n }\r\n\r\n return state;\r\n}\r\n\r\nfunction reducer(state, { type, payload }) {\r\n if (type === actionTypes.INIT) {\r\n const nextState = init(payload);\r\n\r\n // Update only subheader.\r\n return { ...state, subheader: nextState.subheader };\r\n }\r\n\r\n if (type === actionTypes.SET_SUBHEADER) {\r\n return { ...state, subheader: payload };\r\n }\r\n\r\n if (type === actionTypes.SHOW_SPLASH_SCREEN) {\r\n return {\r\n ...state,\r\n splashScreen: {\r\n ...state.splashScreen,\r\n refs: { ...state.splashScreen.refs, [payload.id]: true }\r\n }\r\n };\r\n }\r\n\r\n if (type === actionTypes.HIDE_SPLASH_SCREEN) {\r\n const { [payload.id]: skip, ...nextRefs } = state.splashScreen.refs;\r\n\r\n return {\r\n ...state,\r\n splashScreen: { ...state.splashScreen, refs: nextRefs }\r\n };\r\n }\r\n\r\n return state;\r\n}\r\n\r\n/**\r\n * Creates layout reducer and provides it's `state` and ` dispatch`.\r\n */\r\nexport function LayoutContextProvider({ history, children, menuConfig }) {\r\n const [state, dispatch] = useReducer(\r\n reducer,\r\n { menuConfig, pathname: history.location.pathname },\r\n // See https://reactjs.org/docs/hooks-reference.html#lazy-initialization\r\n init\r\n );\r\n\r\n // Subscribe to history changes and reinitialize on each change.\r\n useEffect(\r\n () =>\r\n history.listen(({ pathname }) => {\r\n dispatch({\r\n type: actionTypes.INIT,\r\n payload: { pathname, menuConfig }\r\n });\r\n }),\r\n\r\n /**\r\n * Passing `history` and `menuConfig` to `deps` ensures that `useEffect`\r\n * will cleanup current `history` listener and will dispatch `INIT`\r\n * with `menuConfig` reference from current render.\r\n *\r\n * @see https://reactjs.org/docs/hooks-reference.html#conditionally-firing-an-effect\r\n */\r\n [history, menuConfig]\r\n );\r\n\r\n const { refs: splashScreenRefs } = state.splashScreen;\r\n const splashScreenVisible = useMemo(\r\n () => Object.keys(splashScreenRefs).length > 0,\r\n [splashScreenRefs]\r\n );\r\n\r\n useEffect(() => {\r\n const splashScreen = document.getElementById(\"splash-screen\");\r\n\r\n if (splashScreenVisible) {\r\n splashScreen.classList.remove(\"hidden\");\r\n\r\n return () => {\r\n splashScreen.classList.add(\"hidden\");\r\n };\r\n }\r\n\r\n const timeout = setTimeout(() => {\r\n splashScreen.classList.add(\"hidden\");\r\n }, 1000);\r\n\r\n return () => {\r\n clearTimeout(timeout);\r\n };\r\n }, [splashScreenVisible]);\r\n\r\n // Pass state and dispatch to it's contexts.\r\n return (\r\n <LayoutContext.State.Provider value={state}>\r\n <LayoutContext.Dispatch.Provider value={dispatch}>\r\n {children}\r\n </LayoutContext.Dispatch.Provider>\r\n </LayoutContext.State.Provider>\r\n );\r\n}\r\n\r\n/**\r\n * Used to access latest layout context state.\r\n *\r\n * @example\r\n *\r\n * export function Subheader() {\r\n * return (\r\n * <LayoutContextConsumer>\r\n * {({ subheader: { title } }) => <h1>{title}</h1>}\r\n * </LayoutContextConsumer>\r\n * );\r\n * }\r\n */\r\nexport const LayoutContextConsumer = LayoutContext.State.Consumer;\r\n\r\n/**\r\n * Hook to access latest layout context state.\r\n *\r\n * @example\r\n *\r\n * export function Subheader() {\r\n * const { subheader: { title } } = useLayoutContext();\r\n *\r\n * return <h1>{title}</h1>;\r\n * }\r\n */\r\nexport function useLayoutContext() {\r\n const context = useContext(LayoutContext.State);\r\n\r\n if (!context) {\r\n throw new Error(\"\");\r\n }\r\n\r\n return context;\r\n}\r\n\r\n/**\r\n * Used to override layout subheader state.\r\n */\r\nexport function LayoutSubheader({ title, breadcrumb, description }) {\r\n const dispatch = useContext(LayoutContext.Dispatch);\r\n\r\n useEffect(() => {\r\n dispatch({\r\n type: actionTypes.SET_SUBHEADER,\r\n payload: { title, breadcrumb, description }\r\n });\r\n }, [dispatch, title, breadcrumb, description]);\r\n\r\n return null;\r\n}\r\n\r\nexport function LayoutSplashScreen({ visible = false }) {\r\n const dispatch = useContext(LayoutContext.Dispatch);\r\n\r\n useEffect(() => {\r\n if (!visible) {\r\n return;\r\n }\r\n\r\n const id = Math.random();\r\n\r\n dispatch({ type: actionTypes.SHOW_SPLASH_SCREEN, payload: { id } });\r\n\r\n return () => {\r\n dispatch({ type: actionTypes.HIDE_SPLASH_SCREEN, payload: { id } });\r\n };\r\n }, [visible, dispatch]);\r\n\r\n return null;\r\n}\r\n","import React, { useEffect } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { LayoutSplashScreen } from \"./LayoutContext\";\r\nimport * as builder from \"../ducks/builder\";\r\n\r\n/**\r\n * Used to synchronize current layout `menuConfig`, `layoutConfig` and\r\n * `htmlClassService` with redux store.\r\n */\r\nexport default function LayoutInitializer({\r\n children,\r\n layoutConfig,\r\n htmlClassService\r\n}) {\r\n const dispatch = useDispatch();\r\n const builderState = useSelector(({ builder }) => builder);\r\n\r\n useEffect(() => {\r\n if (layoutConfig.demo !== builderState.layoutConfig.demo) {\r\n dispatch(builder.actions.setLayoutConfigs(layoutConfig));\r\n }\r\n }, [dispatch, builderState, layoutConfig]);\r\n\r\n useEffect(() => {\r\n dispatch(builder.actions.setHtmlClassService(htmlClassService));\r\n }, [dispatch, htmlClassService]);\r\n\r\n return htmlClassService === builderState.htmlClassServiceObjects ? (\r\n // Render content when `htmlClassService` synchronized with redux store.\r\n <>{children}</>\r\n ) : (\r\n // Otherwise sow loading splash screen.\r\n <LayoutSplashScreen />\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { IntlProvider } from \"react-intl\";\r\nimport \"@formatjs/intl-relativetimeformat/polyfill\";\r\nimport \"@formatjs/intl-relativetimeformat/locale-data/en\";\r\n\r\nimport enMessages from \"./messages/en\";\r\n\r\nconst allMessages = {\r\n en: enMessages,\r\n};\r\n\r\nexport default function I18nProvider({ children }) {\r\n const locale = useSelector(({ i18n }) => i18n.lang);\r\n const messages = allMessages[locale];\r\n\r\n return (\r\n <IntlProvider locale={locale} messages={messages}>\r\n {children}\r\n </IntlProvider>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { createTheme } from \"@material-ui/core/styles\";\r\nimport { ThemeProvider as MuiThemeProvider } from \"@material-ui/styles\";\r\n\r\nconst theme = createTheme(\r\n /**\r\n * @see https://material-ui.com/customization/themes/#theme-configuration-variables\r\n */\r\n {\r\n // direction: \"rtl\",\r\n typography: {\r\n fontFamily: [\"Poppins\"].join(\",\")\r\n },\r\n\r\n palette: {\r\n contrastThreshold: 2,\r\n primary: {\r\n // light: will be calculated from palette.primary.main,\r\n main: \"#5d78ff\"\r\n // dark: will be calculated from palette.primary.main,\r\n // contrastText: will be calculated to contrast with palette.primary.main\r\n },\r\n secondary: {\r\n // light: will be calculated from palette.primary.main,\r\n main: \"#0abb87\",\r\n // dark: will be calculated from palette.primary.main,\r\n contrastText: \"#ffffff\"\r\n },\r\n error: {\r\n // light: will be calculated from palette.primary.main,\r\n main: \"#fd397a\"\r\n // dark: will be calculated from palette.primary.main,\r\n // contrastText: will be calculated to contrast with palette.primary.main\r\n }\r\n },\r\n\r\n /**\r\n * @see https://material-ui.com/customization/globals/#default-props\r\n */\r\n props: {\r\n // Name of the component âš›ï¸\r\n MuiButtonBase: {\r\n // The properties to apply\r\n disableRipple: true // No more ripple, on the whole application 💣!\r\n },\r\n\r\n // Set default elevation to 1 for popovers.\r\n MuiPopover: {\r\n elevation: 1\r\n }\r\n }\r\n }\r\n);\r\n\r\nexport default function ThemeProvider(props) {\r\n const { children } = props;\r\n\r\n return <MuiThemeProvider theme={theme}>{children}</MuiThemeProvider>;\r\n}\r\n","import * as i18n from \"./ducks/i18n\";\r\nimport * as builder from \"./ducks/builder\";\r\n\r\n/**\r\n * Reexports\r\n */\r\nexport * from \"./utils/utils\";\r\nexport * from \"./layout/LayoutContext\";\r\nexport * from \"./layout/LayoutConfig\";\r\nexport { default as LayoutConfig } from \"./layout/LayoutConfig\";\r\nexport { default as LayoutInitializer } from \"./layout/LayoutInitializer\";\r\nexport { default as I18nProvider } from \"./i18n/I18nProvider\";\r\nexport { default as ThemeProvider } from \"./materialUIThemeProvider/ThemeProvider\";\r\n\r\n/**\r\n * Ducks\r\n */\r\n\r\nexport const metronic = { i18n, builder };\r\n","import { put, takeLatest, all } from \"redux-saga/effects\";\r\nimport axios from \"axios\";\r\nimport { toast } from \"react-toastify\";\r\n\r\nexport const BASE_URL = process.env.REACT_APP_APIIP + \"/register\";\r\n\r\nexport const actionTypes = {\r\n // Init actiontypes to build reference data \r\n SET_INITIAL: \"SET_INITIAL\",\r\n\r\n SET_REGSTATUS: \"SET_REGSTATUS\",\r\n\r\n POST_PSYCHOLOGISTINVITE_REQUEST : \"POST_PSYCHOLOGISTINVITE_REQUEST\",\r\n POST_REFERRERINVITE_REQUEST : \"POST_REFERRERINVITE_REQUEST\",\r\n FETCH_PSYCHOLOGISTINVITE: \"FETCH_PSYCHOLOGISTINVITE\",\r\n SET_PSYCHOLOGISTINVITE: \"SET_PSYCHOLOGISTINVITE\",\r\n POST_PSYCHOLOGIST_REGISTRATION : \"POST_PSYCHOLOGIST_REGISTRATION\",\r\n\r\n POST_CONTACTFORM_REQUEST : \"POST_CONTACTFORM_REQUEST\",\r\n FETCH_CLIENTINVITE: \"FETCH_CLIENTINVITE\",\r\n SET_CLIENTINVITE: \"SET_CLIENTINVITE\",\r\n PUT_CLIENTINVITE: \"POST_CLIENTINVITE\",\r\n // FETCH_CLIENTEAP: \"FETCH_CLIENTEAP\",\r\n // SET_CLIENTEAP: \"SET_CLIENTEAP\",\r\n // PUT_CLIENTEAP: \"PUT_CLIENTEAP\",\r\n\r\n POST_CLIENT_REGISTRATION : \"POST_CLIENT_REGISTRATION\",\r\n\r\n FETCH_MATCHINGAVAILABILITY_REGISTRATION: \"FETCH_MATCHINGAVAILABILITY_REGISTRATION\",\r\n SET_MATCHINGAVAILABILITY_REGISTRATION: \"SET_MATCHINGAVAILABILITY_REGISTRATION\",\r\n\r\n FETCH_REGISTEREDPUBLIC : \"FETCH_REGISTEREDPUBLIC\",\r\n\r\n FETCH_EMAILDUPLICATE : \"FETCH_EMAILDUPLICATE\",\r\n SET_EMAILDUPLICATE : \"SET_EMAILDUPLICATE\",\r\n SET_EMAILDUPLICATECLEAR: \"SET_EMAILDUPLICATECLEAR\",\r\n SET_REGISTEREDFLAG : \"SET_REGISTEREDFLAG\"\r\n};\r\n\r\nconst initialState = {\r\n Registered: [],\r\n ClientInvite: {},\r\n ClientEAP: {},\r\n PsychologistInvite: {},\r\n InviteToken: '',\r\n // EAPToken: '',\r\n MatchingAvailability: [],\r\n EmailDuplicate: null,\r\n RegisteredFetch: false,\r\n regstatus: { form: 'client', status: 'Not Started', newID: null }\r\n};\r\n\r\nexport function reducer(state = initialState, {type, ...action }) \r\n{\r\n switch (type) \r\n {\r\n case 'SET_REGISTEREDPUBLIC': {\r\n return {\r\n ...state,\r\n Registered : action.payload.data\r\n };\r\n }\r\n case 'SET_PSYCHOLOGISTINVITE': {\r\n return {\r\n ...state,\r\n PsychologistInvite : action.payload.data, \r\n InviteToken : action.payload.invitetoken\r\n };\r\n }\r\n case 'SET_MATCHINGAVAILABILITY_REGISTRATION': {\r\n return {\r\n ...state,\r\n MatchingAvailability : action.payload\r\n };\r\n }\r\n case 'SET_EMAILDUPLICATECLEAR':{\r\n return {\r\n ...state,\r\n EmailDuplicate: null, \r\n };\r\n }\r\n case 'SET_EMAILDUPLICATE':{\r\n return {\r\n ...state,\r\n EmailDuplicate: action.payload, \r\n };\r\n }\r\n case 'SET_REGISTEREDFLAG':{\r\n return {\r\n ...state,\r\n RegisteredFetch: action.payload, \r\n };\r\n }\r\n case 'SET_CLIENTINVITE': {\r\n return {\r\n ...state,\r\n ClientInvite : action.payload.data, \r\n InviteToken : action.payload.invitetoken\r\n };\r\n }\r\n // case 'SET_CLIENTEAP': {\r\n // return {\r\n // ...state,\r\n // ClientEAP : action.payload.data, \r\n // EAPToken : action.payload.eaptoken\r\n // };\r\n // }\r\n case 'SET_REGSTATUS': {\r\n return {\r\n ...state,\r\n regstatus : action.payload\r\n };\r\n }\r\n case 'SET_INITIAL': {\r\n return initialState;\r\n }\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nexport function* fetchClientInvite(action)\r\n{\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n try \r\n {\r\n const newURL = BASE_URL + \"/clientinvite/\" + action.payload;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_CLIENTINVITE', payload: { data: response.data[0], invitetoken: action.payload }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* fetchEmailDuplicate(action)\r\n{\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n try \r\n {\r\n const newURL = BASE_URL + \"/emailduplicate/\" + action.payload;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_EMAILDUPLICATE', payload: response.data[0]});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\n// export function* fetchClientEAP(action)\r\n// {\r\n// process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n// try \r\n// {\r\n// const newURL = BASE_URL + \"/clienteap/\" + action.payload;\r\n// const response = yield axios.get(newURL);\r\n// process.env.REACT_APP_DEBUG && console.log(response);\r\n// if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n// {\r\n// yield put({ type: 'SET_CLIENTEAP', payload: { data: response.data[0], invitetoken: action.payload }});\r\n// } \r\n// else // API completed with 200, however there is an error message\r\n// {\r\n// yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n// }\r\n// } \r\n// catch (error) // API call itself has errored out\r\n// {\r\n// yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n// }\r\n// }\r\n\r\nexport function* fetchPsychologistInvite(action)\r\n{\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n try \r\n {\r\n const newURL = BASE_URL + \"/psychologistinvite/\" + action.payload;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_PSYCHOLOGISTINVITE', payload: { data: response.data[0], invitetoken: action.payload }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* fetchRegisteredPublic(action)\r\n{\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n try \r\n {\r\n // Clear get registered flag\r\n yield put({ type: 'SET_REGISTEREDFLAG', payload: false });\r\n // \r\n const newURL = BASE_URL + \"/registered/\" + action.payload.providerType + \"/\" + action.payload.inviteToken;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_REGISTEREDFLAG', payload: true });\r\n yield put({ type: 'SET_REGISTEREDPUBLIC', payload: { data: response.data }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* fetchMatchingAvailability(action)\r\n{\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n try \r\n {\r\n // registration events will fire this sometimes before a psychologist and timezone have been set, so ignore those requests\r\n if(action.payload.psychologistID && action.payload.userTZ){ \r\n const newURL = BASE_URL + \"/matchingavailability/\" + action.payload.psychologistID + \"/\" + action.payload.userTZ + \"/\" + action.payload.invitetoken + \"/\" + action.payload.providerType;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_MATCHINGAVAILABILITY_REGISTRATION', payload: response.data});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\n\r\n// Put's below \r\n\r\nexport function* postPsychologistInvite(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/psychologistinvite\"\r\n const response = yield axios.post(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* postReferrerInvite(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/referrerinvite\"\r\n const response = yield axios.post(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* postContactFormEntry(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/contactformentry\"\r\n const response = yield axios.post(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* postPsychologistData(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/psychologistdata\"\r\n const response = yield axios.post(newURL, action.payload.formData);\r\n\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n yield put({ type: 'SET_REGSTATUS', payload : { form: 'psychologist', status: 'Success', newID: response.data.newID } });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* postClientData(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/clientdata\"\r\n const response = yield axios.post(newURL, action.payload.formData);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n // SET the reg form state with the new ClientID so that the UI knows it was completed successfully\r\n // yield put({ type: 'FETCH_CLIENTINVITE', payload : action.payload.invitetoken });\r\n yield put({ type: 'SET_REGSTATUS', payload : { form: 'client', status: 'Success', newID: response.data.newID } });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putAvailability(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/availability\";\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n // Currently not refetching on change as calendar state should be able to handle change and slot id not needed \r\n // yield put({ type: 'FETCH_AVAILABILITY', payload: action.payload.mainID});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport const actions = {\r\n postPsychologistInvite: (payload) => ({ type: actionTypes.POST_PSYCHOLOGISTINVITE_REQUEST, payload : payload }),\r\n postReferrerInvite: (payload) => ({ type: actionTypes.POST_REFERRERINVITE_REQUEST, payload : payload }),\r\n postContactFormEntry: (payload) => ({ type: actionTypes.POST_CONTACTFORM_REQUEST, payload : payload }),\r\n fetchPsychologistInvite: (payload) => ({ type: actionTypes.FETCH_PSYCHOLOGISTINVITE, payload : payload }),\r\n postPsychologistData: (payload) => ({ type: actionTypes.POST_PSYCHOLOGIST_REGISTRATION, payload : payload }),\r\n\r\n fetchClientInvite: (payload) => ({ type: actionTypes.FETCH_CLIENTINVITE, payload : payload }),\r\n // fetchClientEAP: (payload) => ({ type: actionTypes.FETCH_CLIENTEAP, payload : payload }),\r\n postClientData: (payload) => ({ type: actionTypes.POST_CLIENT_REGISTRATION, payload : payload }),\r\n\r\n fetchMatchingAvailability: (payload) => ({ type: actionTypes.FETCH_MATCHINGAVAILABILITY_REGISTRATION, payload : payload }),\r\n fetchRegisteredPublic: (payload) => ({ type: actionTypes.FETCH_REGISTEREDPUBLIC, payload : payload }),\r\n emailDuplicate: (payload) => ({ type: actionTypes.FETCH_EMAILDUPLICATE, payload : payload }),\r\n emailDuplicateClear: () => ({ type: actionTypes.SET_EMAILDUPLICATECLEAR }),\r\n};\r\n\r\nfunction* actionWatcher() { \r\n yield takeLatest('POST_PSYCHOLOGISTINVITE_REQUEST',postPsychologistInvite);\r\n yield takeLatest('POST_REFERRERINVITE_REQUEST',postReferrerInvite);\r\n yield takeLatest('POST_CONTACTFORM_REQUEST',postContactFormEntry);\r\n yield takeLatest('FETCH_PSYCHOLOGISTINVITE',fetchPsychologistInvite);\r\n yield takeLatest('POST_PSYCHOLOGIST_REGISTRATION',postPsychologistData);\r\n\r\n yield takeLatest('FETCH_CLIENTINVITE',fetchClientInvite);\r\n // yield takeLatest('FETCH_CLIENTEAP',fetchClientEAP);\r\n yield takeLatest('POST_CLIENT_REGISTRATION',postClientData);\r\n \r\n yield takeLatest('FETCH_MATCHINGAVAILABILITY_REGISTRATION', fetchMatchingAvailability);\r\n yield takeLatest('FETCH_REGISTEREDPUBLIC',fetchRegisteredPublic);\r\n yield takeLatest('FETCH_EMAILDUPLICATE',fetchEmailDuplicate);\r\n}\r\n\r\nexport function* saga() {\r\n yield all([\r\n actionWatcher(),\r\n ]); \r\n}\r\n\r\n\r\n","import { all } from \"redux-saga/effects\";\r\nimport { combineReducers } from \"redux\";\r\n\r\nimport * as auth from \"./ducks/auth.duck\";\r\nimport * as admin from \"./ducks/admin.duck\";\r\nimport * as reference from \"./ducks/reference.duck\";\r\nimport * as registration from \"./ducks/registration.duck\";\r\nimport * as forms from \"./ducks/forms.duck\";\r\nimport { metronic } from \"../../_metronic\";\r\n\r\nexport const rootReducer = combineReducers({\r\n auth: auth.reducer,\r\n i18n: metronic.i18n.reducer,\r\n builder: metronic.builder.reducer,\r\n admin: admin.reducer,\r\n reference: reference.reducer,\r\n registration: registration.reducer,\r\n forms: forms.reducer\r\n});\r\n\r\nexport function* rootSaga() {\r\n yield all([auth.saga(),admin.saga(),reference.saga(),registration.saga(),forms.saga()]);\r\n}\r\n","import { applyMiddleware, compose, createStore } from \"redux\";\r\nimport createSagaMiddleware from \"redux-saga\";\r\nimport { persistStore } from \"redux-persist\";\r\n\r\nimport { rootReducer, rootSaga } from \"./rootDuck\";\r\n\r\nconst composeEnhancers = (process.env.REACT_APP_DEBUG && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) || compose;\r\n\r\nconst sagaMiddleware = createSagaMiddleware();\r\nconst store = createStore(\r\n rootReducer,\r\n composeEnhancers(applyMiddleware(sagaMiddleware))\r\n);\r\n\r\n/**\r\n * @see https://github.com/rt2zz/redux-persist#persiststorestore-config-callback\r\n * @see https://github.com/rt2zz/redux-persist#persistor-object\r\n */\r\nexport const persistor = persistStore(store);\r\n\r\nsagaMiddleware.run(rootSaga);\r\n\r\nexport default store;\r\n","import React, { forwardRef, useEffect, useState } from \"react\";\r\nimport clsx from \"clsx\";\r\nimport { isFragment } from \"react-is\";\r\n\r\nexport const PortletHeaderIcon = forwardRef(({ className }, ref) => (\r\n <span ref={ref} className={clsx(\"kt-portlet__head-icon\", className)} />\r\n));\r\n\r\nexport const PortletHeaderTitle = forwardRef(({ className, ...props }, ref) => (\r\n // eslint-disable-next-line jsx-a11y/heading-has-content\r\n <h3\r\n {...props}\r\n ref={ref}\r\n className={clsx(\"kt-portlet__head-title\", className)}\r\n />\r\n));\r\n\r\nexport const PortletHeaderToolbar = forwardRef(\r\n ({ className, ...props }, ref) => (\r\n <div\r\n {...props}\r\n ref={ref}\r\n className={clsx(\"kt-portlet__head-toolbar\", className)}\r\n />\r\n )\r\n);\r\n\r\nexport const PortletHeader = forwardRef(\r\n (\r\n { icon, title, toolbar, className, sticky = false, labelRef, ...props },\r\n ref\r\n ) => {\r\n const [top, setTop] = useState(0);\r\n const [windowHeight, setWindowHeight] = useState(0);\r\n\r\n useEffect(() => {\r\n handleResize();\r\n\r\n function handleResize() {\r\n setWindowHeight(window.innerWidth);\r\n }\r\n\r\n window.addEventListener(\"resize\", handleResize);\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", handleResize);\r\n };\r\n });\r\n\r\n useEffect(() => {\r\n // Skip if sticky is disabled or on initial render when we don't know about window height.\r\n if (!sticky || windowHeight === 0) {\r\n return;\r\n }\r\n\r\n const headerElement = document.querySelector(\".kt-header\");\r\n const subheaderElement = document.querySelector(\".kt-subheader\");\r\n const headerMobileElement = document.querySelector(\".kt-header-mobile\");\r\n\r\n let nextMarginTop = 0;\r\n\r\n // mobile header\r\n if (window.getComputedStyle(headerElement).height === \"0px\") {\r\n nextMarginTop = headerMobileElement.offsetHeight;\r\n } else {\r\n // desktop header\r\n if (document.body.classList.contains(\"kt-header--minimize-topbar\")) {\r\n // hardcoded minimized header height\r\n nextMarginTop = 60;\r\n } else {\r\n // normal fixed header\r\n if (document.body.classList.contains(\"kt-header--fixed\")) {\r\n nextMarginTop += headerElement.offsetHeight;\r\n }\r\n\r\n if (document.body.classList.contains(\"kt-subheader--fixed\")) {\r\n nextMarginTop += subheaderElement.offsetHeight;\r\n }\r\n }\r\n }\r\n\r\n setTop(nextMarginTop);\r\n }, [sticky, windowHeight]);\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className=\"kt-portlet__head\"\r\n style={\r\n !sticky\r\n ? undefined\r\n : { top, position: \"sticky\", backgroundColor: \"#fff\" }\r\n }\r\n >\r\n {title != null && (\r\n <div\r\n ref={labelRef}\r\n className={clsx(\"kt-portlet__head-label\", className)}\r\n >\r\n {icon}\r\n\r\n {/* Wrap string and fragments in PortletHeaderTitle */\r\n typeof title === \"string\" || isFragment(title) ? (\r\n <PortletHeaderTitle>{title}</PortletHeaderTitle>\r\n ) : (\r\n title\r\n )}\r\n </div>\r\n )}\r\n\r\n {toolbar}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nexport const PortletBody = forwardRef(\r\n ({ fit, fluid, className, ...props }, ref) => (\r\n <div\r\n {...props}\r\n ref={ref}\r\n className={clsx(\r\n \"kt-portlet__body\",\r\n {\r\n \"kt-portlet__body--fit\": fit,\r\n \"kt-portlet__body--fluid\": fluid\r\n },\r\n className\r\n )}\r\n />\r\n )\r\n);\r\n\r\nexport const PortletFooter = forwardRef(({ className, ...props }, ref) => (\r\n <div {...props} ref={ref} className={clsx(\"kt-portlet__foot\", className)} />\r\n));\r\n\r\nexport const Portlet = forwardRef(\r\n ({ fluidHeight, className, ...props }, ref) => (\r\n <div\r\n {...props}\r\n ref={ref}\r\n className={clsx(\r\n \"kt-portlet\",\r\n { \"kt-portlet--height-fluid\": fluidHeight },\r\n className\r\n )}\r\n />\r\n )\r\n);\r\n\r\n// Set display names for debugging.\r\nif (process.env.NODE_ENV !== \"production\") {\r\n Portlet.displayName = \"Portlet\";\r\n\r\n PortletHeader.displayName = \"PortletHeader\";\r\n PortletHeaderIcon.displayName = \"PortletHeaderIcon\";\r\n PortletHeaderTitle.displayName = \"PortletHeaderTitle\";\r\n PortletHeaderToolbar.displayName = \"PortletHeaderToolbar\";\r\n\r\n PortletBody.displayName = \"PortletBody\";\r\n PortletFooter.displayName = \"PortletFooter\";\r\n}\r\n","/* eslint-disable no-script-url,jsx-a11y/anchor-is-valid,jsx-a11y/anchor-has-content */\r\nimport React, { useEffect } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { useDispatch } from 'react-redux'\r\nimport * as Admin from \"../../app/store/ducks/admin.duck\";\r\n\r\n// Blob setup for psychologist photos \r\nconst containerName = `psychologists`;\r\nconst storageAccountName = process.env.REACT_APP_STORAGERESOURCENAME || \"\"; \r\n\r\nexport default function TopPsychologists() {\r\n\r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Admin.actions.fetchReport({ reportname: 'topPsychologistsReferrals', output: 'query'})) }, [dispatch] )\r\n const topPsychologistsReferrals = useSelector(state => state.admin.Reports['topPsychologistsReferrals'])\r\n \r\n\r\n return (\r\n <>\r\n <div className=\"kt-portlet kt-portlet--height-fluid\">\r\n <div className=\"kt-portlet__head\">\r\n <div className=\"kt-portlet__head-label\">\r\n <h3 className=\"kt-portlet__head-title\">Top Psychologist Referrals</h3>\r\n </div>\r\n \r\n </div>\r\n <div className=\"kt-portlet__body\">\r\n <div className=\"kt-widget4\">\r\n\r\n {topPsychologistsReferrals ? topPsychologistsReferrals.map((row, index) => {\r\n return (\r\n <div className=\"kt-widget4__item\" key={`psych_${index}`}>\r\n\r\n <div className=\"kt-widget4__pic kt-widget4__pic--pic\">\r\n <img\r\n alt={row.fullname}\r\n src={`https://${storageAccountName}.blob.core.windows.net/${containerName}/${row.imageURL}`}\r\n />\r\n </div>\r\n <div className=\"kt-widget4__info\">\r\n <Link to=\"/registeredPsychologists\" className=\"kt-widget4__title\">\r\n {row.fullname}\r\n </Link>\r\n <p className=\"kt-widget4__text\">{row.referralLast}</p>\r\n </div>\r\n <span className=\"kt-widget4__number kt-font-brand\">{row.referrals}</span>\r\n </div>\r\n )\r\n })\r\n \r\n : null}\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React from \"react\";\r\n\r\nexport default function QuickStat({ value, desc, color }) {\r\n \r\n return (\r\n <div className=\"kt-widget26\">\r\n <div className=\"kt-widget26__content\" style={{ paddingBottom: \"0.35rem\", position: 'relative' }}>\r\n <span className=\"kt-widget26__number\" style={{ fontSize: \"2.4rem\" }}>{value}</span>\r\n <span className=\"kt-widget26__desc\">{desc}</span>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { useEffect, useMemo, useRef } from \"react\";\r\nimport { Chart } from \"chart.js\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nexport default function SalesBarChart({ title, desc, type }) {\r\n\r\n const clientsByDay = useSelector(state => state.admin.ClientsByDay)\r\n const clientRegistrationsByDay = useSelector(state => state.admin.ClientRegistrationsByDay)\r\n const ref = useRef();\r\n const data = useMemo(\r\n () => ({\r\n labels : type === 'Clients' ? clientsByDay.map(a => a.datekey) : clientRegistrationsByDay.map(a => a.datekey) ,\r\n datasets: [\r\n {\r\n // label: 'dataset 1',\r\n backgroundColor: \"#5d78ff\",\r\n data: type === 'Clients' ? clientsByDay.map(a => a.total) : clientRegistrationsByDay.map(a => a.total)\r\n },\r\n // {\r\n // // label: 'dataset 2',\r\n // backgroundColor: \"#e0e0ff\", // f3f3fb\r\n // data: [15, 20, 25, 30, 25, 20, 15, 20, 25, 30, 25, 20, 15, 10, 15, 20]\r\n // }\r\n ]\r\n }),\r\n [clientsByDay,clientRegistrationsByDay,type]\r\n );\r\n\r\n useEffect(() => {\r\n const chart = new Chart(ref.current, {\r\n data,\r\n type: \"bar\",\r\n options: {\r\n title: { display: false },\r\n tooltips: {\r\n intersect: false,\r\n mode: \"nearest\",\r\n xPadding: 10,\r\n yPadding: 10,\r\n caretPadding: 10\r\n },\r\n legend: { display: false },\r\n responsive: true,\r\n maintainAspectRatio: false,\r\n barRadius: 4,\r\n scales: {\r\n xAxes: [{ display: false, gridLines: false, stacked: true }],\r\n yAxes: [{ display: false, stacked: true, gridLines: false }]\r\n },\r\n layout: { padding: { left: 0, right: 0, top: 0, bottom: 0 } }\r\n }\r\n });\r\n\r\n return () => {\r\n chart.destroy();\r\n };\r\n }, [data]);\r\n\r\n return (\r\n <div className=\"kt-widget14\" >\r\n <div className=\"kt-widget14__header\">\r\n <h3 className=\"kt-widget14__title\">{title}</h3>\r\n <span className=\"kt-widget14__desc\">{desc}</span>\r\n </div>\r\n <div className=\"kt-widget14__chart\" style={{ height: \"70px\" }}>\r\n <canvas ref={ref} />\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { useEffect, useMemo, useRef } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { Chart } from \"chart.js\";\r\nimport { metronic } from \"../../_metronic\";\r\n\r\nexport default function CapacityBarChart({ title, desc }) {\r\n const ref = useRef();\r\n const clientsByWeek = useSelector(state => state.admin.ClientsByWeek)\r\n const { successColor } = useSelector(state => ({\r\n successColor: metronic.builder.selectors.getConfig(\r\n state,\r\n \"colors.state.success\"\r\n )\r\n }));\r\n\r\n const data = useMemo(\r\n () => ({\r\n labels : clientsByWeek.map(a => a.datekey),\r\n datasets: [\r\n {\r\n // label: 'dataset 1',\r\n backgroundColor: successColor,\r\n // backgroundColor: \"#5d78ff\",\r\n data: clientsByWeek.map(a => a.total)\r\n },\r\n // {\r\n // // label: 'dataset 2',\r\n // backgroundColor: \"#e0e0ff\", // f3f3fb\r\n // data: [15, 20, 25, 30, 25, 20, 15, 20, 25, 30, 25, 20, 15, 10, 15, 20]\r\n // }\r\n ]\r\n }),\r\n [clientsByWeek,successColor]\r\n );\r\n\r\n\r\n useEffect(() => {\r\n const chart = new Chart(ref.current, {\r\n data,\r\n type: \"bar\",\r\n options: {\r\n title: { display: false },\r\n tooltips: {\r\n intersect: false,\r\n mode: \"nearest\",\r\n xPadding: 10,\r\n yPadding: 10,\r\n caretPadding: 10\r\n },\r\n legend: { display: false },\r\n responsive: true,\r\n maintainAspectRatio: false,\r\n barRadius: 4,\r\n scales: {\r\n xAxes: [{ display: false, gridLines: false, stacked: true }],\r\n yAxes: [{ display: false, stacked: true, gridLines: false }]\r\n },\r\n layout: { padding: { left: 0, right: 0, top: 0, bottom: 0 } }\r\n }\r\n });\r\n\r\n return () => {\r\n chart.destroy();\r\n };\r\n }, [data]);\r\n\r\n return (\r\n <div className=\"kt-widget14\">\r\n <div className=\"kt-widget14__header\">\r\n <h3 className=\"kt-widget14__title\">{title}</h3>\r\n <span className=\"kt-widget14__desc\">{desc}</span>\r\n </div>\r\n <div className=\"kt-widget14__chart\" style={{ height: \"70px\" }}>\r\n <canvas ref={ref} />\r\n </div>\r\n </div>\r\n );\r\n}\r\n","/* eslint-disable no-script-url,jsx-a11y/anchor-is-valid */\r\nimport React, { useEffect } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { useSelector, useDispatch } from 'react-redux'\r\n// import { ProgressBar } from \"react-bootstrap\";\r\nimport * as Admin from \"../store/ducks/admin.duck\";\r\nimport KTUtil from \"../../_metronic/_assets/js/util\";\r\n\r\nexport default function LatestNotes() {\r\n\r\nconst dispatch = useDispatch()\r\nuseEffect( () => { dispatch(Admin.actions.fetchReport({ reportname: 'latestNotes', output: 'query'})) }, [dispatch] )\r\nconst latestNotes = useSelector(state => state.admin.Reports['latestNotes'])\r\n \r\n return (\r\n <>\r\n <div className=\"kt-portlet kt-portlet--height-fluid\">\r\n <div className=\"kt-portlet__head\">\r\n <div className=\"kt-portlet__head-label\">\r\n <h3 className=\"kt-portlet__head-title\">Activity Feed</h3>\r\n </div>\r\n </div>\r\n <div className=\"kt-portlet__body\">\r\n <div className=\"kt-widget5\">\r\n {KTUtil.isEmpty(latestNotes) ? 'No recent notes history.' : \r\n latestNotes.map((row, index) => {\r\n return (\r\n <div className=\"kt-widget5__item\" key={`note_${index}`}>\r\n <div className=\"kt-widget5__content\">\r\n <div className=\"kt-widget5__section\"> \r\n <div className=\"kt-widget5__info\"> \r\n <span><Link to=\"/clients\" style={{ fontWeight: 400, }}>Client: {row.clientFullName}</Link><br />{row.note}</span>\r\n <span className=\"kt-font-info\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"kt-widget5__content\">\r\n <div className=\"kt-widget5__stats\">\r\n <span className=\"kt-widget5__number\" style={{ fontSize: 12, fontWeight: 400 }}>{row.createdOnformatted}</span>\r\n <span className=\"kt-widget5__votes\">{row.psychologistFullName}</span>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n })\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n\r\n}\r\n","import React from 'react';\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { Paper } from '@material-ui/core';\r\n\r\n\r\n\r\nexport default function StatisticsProviderDay({providerStatisticsDay}) \r\n{\r\n \r\n \r\n const columns = [\r\n { field: 'id', headerName: 'id', width: 100, hide: true },\r\n { field: 'statisticsSortDay', headerName: 'SortDay', width: 200, hide: true },\r\n { field: 'statisticsDay', headerName: 'Day', width: 200 },\r\n { field: 'dailyProviderBookingsTotal', headerName: 'Bookings', width: 130},\r\n { field: 'dailyProviderSlotsTotal', headerName: 'Slots', width: 120},\r\n { field: 'dailyProviderFreeSlotsTotal', headerName: 'Free Slots (Total)', width: 200},\r\n { field: 'dailyProviderAnyFreeSlotsTotal', headerName: 'Free Slots (Any', width: 200},\r\n { field: 'dailyProviderExistingFreeSlotsTotal', headerName: 'Existing', width: 120},\r\n { field: 'dailyProviderSupervisionFreeSlotsTotal', headerName: 'Supervision)', width: 150}\r\n ];\r\n\r\n // public string weekProviderStart { get; set; }\r\n\r\n return (\r\n <>\r\n { providerStatisticsDay ? \r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={providerStatisticsDay} columns={columns} pageSize={10} checkboxSelection={false} rowHeight={40} sortModel={[{ field: 'statisticsSortDay', sort: 'asc' }]} />\r\n </Paper>\r\n : ('None')\r\n }\r\n </>\r\n )\r\n}\r\n","import React, { useState } from 'react';\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { Button, Modal } from \"react-bootstrap\";\r\nimport { Paper } from '@material-ui/core';\r\nimport StatisticsProviderDay from \"./StatisticsProviderDay\"\r\n\r\n\r\nexport default function StatisticsProvider({week, providerStatistics, closeProviders}) \r\n{\r\n const [showProvidersDay, setShowProvidersDay] = useState(false);\r\n const [providerStatisticsDay, setProviderStatisticsDay] = useState();\r\n const [providerName, setProviderName] = useState();\r\n \r\n\r\n const loadWeek = (thisProvider) => {\r\n setProviderStatisticsDay(thisProvider.statisticsProviderDay);\r\n setProviderName(thisProvider.providerName)\r\n setShowProvidersDay(true);\r\n }\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'id', width: 100, hide: true },\r\n { field: 'providerID', headerName: 'BookingID', width: 100, hide: true },\r\n { field: 'providerName', headerName: 'Provider Name', width: 200, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadWeek(providerStatistics.find(provider => provider.providerID === params.row.providerID))} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'weekProviderBookingsTotal', headerName: 'Bookings', width: 130},\r\n { field: 'weekProviderSlotsTotal', headerName: 'Slots', width: 120},\r\n { field: 'weekProviderFreeSlotsTotal', headerName: 'Free Slots Total', width: 200},\r\n { field: 'weekProviderAnyFreeSlotsTotal', headerName: 'Free Slots (Any', width: 200},\r\n { field: 'weekProviderExistingFreeSlotsTotal', headerName: 'Existing', width: 120},\r\n { field: 'weekProviderSupervisionFreeSlotsTotal', headerName: 'Supervision)', width: 150}\r\n ];\r\n\r\n\r\n // public string weekProviderStart { get; set; }\r\n\r\n\r\n\r\n\r\n function handleProvidersDayClose() {\r\n setShowProvidersDay(false);\r\n } \r\n\r\n return (\r\n <>\r\n { providerStatistics ? \r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={providerStatistics} columns={columns} pageSize={10} checkboxSelection={false} rowHeight={40} sortModel={[{ field: 'providerName', sort: 'asc' }]} />\r\n </Paper>\r\n : ('None')\r\n }\r\n\r\n <Modal show={showProvidersDay} onHide={handleProvidersDayClose} dialogClassName=\"editprofile-modal\">\r\n <Modal.Header closeButton className=\"editprofile-modal\">\r\n <Modal.Title>Daily Statistics for {providerName} for week Starting - {week}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"editprofile-modal\">\r\n <StatisticsProviderDay\r\n providerStatisticsDay={providerStatisticsDay}\r\n />\r\n </Modal.Body>\r\n <Modal.Footer className=\"editprofile-modal\">\r\n <Button variant=\"secondary\" onClick={handleProvidersDayClose}>\r\n Cancel\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n </>\r\n )\r\n}\r\n","/* eslint-disable no-script-url,jsx-a11y/anchor-is-valid */\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useSelector, useDispatch } from 'react-redux'\r\n// import { ProgressBar } from \"react-bootstrap\";\r\nimport * as Admin from \"../store/ducks/admin.duck\";\r\nimport StatisticsProvider from \"../components/StatisticsProvider\"\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { Paper } from '@material-ui/core';\r\nimport { Button, Modal } from \"react-bootstrap\";\r\n\r\n\r\nexport default function BookingStatistics() {\r\n\r\nconst dispatch = useDispatch()\r\nuseEffect( () => { dispatch(Admin.actions.fetchStatistics()) }, [dispatch] )\r\nconst statistics = useSelector(state => state.admin.Statistics )\r\n\r\nconst [week,setWeek] = useState();\r\nconst [showProviders, setShowProviders] = useState(false);\r\nconst [providerStatistics,setProviderStatistics] = useState(false);\r\n\r\nconst loadProviders = (thisWeek) => {\r\n setWeek(thisWeek.weekStart);\r\n setProviderStatistics(thisWeek.statisticsProvider);\r\n setShowProviders(true);\r\n}\r\n\r\nfunction handleProvidersClose() {\r\n setShowProviders(false);\r\n} \r\n\r\n\r\nconst columns = [\r\n { field: 'id', headerName: 'ID', width: 100, hide: true },\r\n { field: 'weekSortStart', type:'date', headerName: 'Week Sort Starting', width: 200, hide: true }, \r\n { field: 'weekStart', type:'date', headerName: 'Week Starting', width: 150, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadProviders(statistics.find(weeks => weeks.weekStart === params.row.weekStart))} className=\"cell-Link\" >\r\n {params.value} \r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'weekBookingsTotal', headerName: 'Bookings', width: 130},\r\n { field: 'weekSlotsTotal', headerName: 'Slots', width: 120},\r\n { field: 'weekFreeSlotsTotal', headerName: 'Free Slots Total', width: 160},\r\n { field: 'weekAnyFreeSlotsTotal', headerName: '(Any', width: 100},\r\n { field: 'weekExistingFreeSlotsTotal', headerName: 'Existing', width: 120},\r\n { field: 'weekSupervisionFreeSlotsTotal', headerName: 'Supervision)', width: 150}\r\n];\r\n\r\n \r\n return (\r\n <>\r\n <div className=\"kt-portlet kt-portlet--height-fluid\">\r\n <div className=\"kt-portlet__head\">\r\n <div className=\"kt-portlet__head-label\">\r\n <h3 className=\"kt-portlet__head-title\">Booking Statistics</h3>\r\n </div>\r\n </div>\r\n <div className=\"kt-portlet__body\">\r\n <div className=\"kt-widget5\">\r\n { statistics ? \r\n <Paper style={{ height: 450, marginbottom:20 }}>\r\n <DataGrid rows={statistics} columns={columns} pageSize={10} checkboxSelection={false} rowHeight={40} sortModel={[{ field: 'weekSortStart', sort: 'asc' }]} />\r\n </Paper>\r\n : \r\n ('None')\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <Modal show={showProviders} onHide={handleProvidersClose} dialogClassName=\"editprofile-modal\">\r\n <Modal.Header closeButton className=\"editprofile-modal\">\r\n <Modal.Title>Provider Statistics for Week Starting - {week} </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"editprofile-modal\">\r\n <StatisticsProvider\r\n week={week}\r\n closeProviders={setShowProviders}\r\n providerStatistics={providerStatistics}\r\n />\r\n </Modal.Body>\r\n <Modal.Footer className=\"editprofile-modal\">\r\n <Button variant=\"secondary\" onClick={handleProvidersClose}>\r\n Cancel\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n\r\n </>\r\n );\r\n\r\n}\r\n","/* eslint-disable no-script-url,jsx-a11y/anchor-is-valid */\r\nimport React from \"react\";\r\n// import { useSelector, useDispatch } from 'react-redux'\r\n// import { ProgressBar } from \"react-bootstrap\";\r\n// import * as Admin from \"../store/ducks/admin.duck\";\r\n\r\n// import StatisticsProvider from \"../components/StatisticsProvider\"\r\n// import { DataGrid } from '@material-ui/data-grid';\r\n// import { Paper } from '@material-ui/core';\r\n// import { Button, Modal } from \"react-bootstrap\";\r\n\r\n\r\nexport default function ClientStatistics() {\r\n\r\n// const dispatch = useDispatch()\r\n// useEffect( () => { dispatch(Admin.actions.fetchClientStatistics()) }, [dispatch] )\r\n// const statistics = useSelector(state => state.admin.ClientStatistics )\r\n\r\n// const [week,setWeek] = useState();\r\n// const [showProviders, setShowProviders] = useState(false);\r\n// const [providerStatistics,setProviderStatistics] = useState(false);\r\n\r\n// const loadProviders = (thisWeek) => {\r\n// setWeek(thisWeek.weekStart);\r\n// setProviderStatistics(thisWeek.statisticsProvider);\r\n// setShowProviders(true);\r\n// }\r\n\r\n// function handleProvidersClose() {\r\n// setShowProviders(false);\r\n// } \r\n\r\n\r\n// const columns = [\r\n// { field: 'id', headerName: 'ID', width: 100, hide: true },\r\n// { field: 'weekSortStart', type:'date', headerName: 'Week Sort Starting', width: 200, hide: true }, \r\n// { field: 'weekStart', type:'date', headerName: 'Week Starting', width: 200, \r\n// renderCell: (params) => (\r\n// <strong>\r\n// <div onClick={() => loadProviders(statistics.find(weeks => weeks.weekStart === params.row.weekStart))} className=\"cell-Link\" >\r\n// {params.value} \r\n// </div>\r\n// </strong>\r\n// ), \r\n// },\r\n// { field: 'weekBookingsTotal', headerName: 'Bookings', width: 200},\r\n// { field: 'weekSlotsTotal', headerName: 'Slots', width: 200},\r\n// { field: 'weekFreeSlotsTotal', headerName: 'Free Slots', width: 200}\r\n// ];\r\n\r\n \r\n return (\r\n <>\r\n <div className=\"kt-portlet kt-portlet--height-fluid\">\r\n <div className=\"kt-portlet__head\">\r\n <div className=\"kt-portlet__head-label\">\r\n <h3 className=\"kt-portlet__head-title\">Client Statistics</h3>\r\n </div>\r\n </div>\r\n <div className=\"kt-portlet__body\">\r\n <div className=\"kt-widget5\">\r\n Coming Soon\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* <Modal show={showProviders} onHide={handleProvidersClose} dialogClassName=\"editprofile-modal\">\r\n <Modal.Header closeButton className=\"editprofile-modal\">\r\n <Modal.Title>Provider Statistics for Week Starting - {week} </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"editprofile-modal\">\r\n <StatisticsProvider\r\n week={week}\r\n closeProviders={setShowProviders}\r\n providerStatistics={providerStatistics}\r\n />\r\n </Modal.Body>\r\n <Modal.Footer className=\"editprofile-modal\">\r\n <Button variant=\"secondary\" onClick={handleProvidersClose}>\r\n Cancel\r\n </Button>\r\n </Modal.Footer>\r\n </Modal> */}\r\n\r\n\r\n </>\r\n );\r\n\r\n}\r\n","import React, { useEffect } from \"react\"; \r\nimport { useSelector } from \"react-redux\";\r\nimport { Portlet, PortletBody } from \"../../partials/content/Portlet\";\r\nimport TopPsychologists from \"../../widgets/TopPsychologists\";\r\nimport QuickStat from \"../../widgets/QuickStat\";\r\nimport SalesBarChart from \"../../widgets/SalesBarChart\";\r\nimport CapacityBarChart from \"../../widgets/CapacityBarChart\";\r\nimport LatestNotes from \"../../widgets/LatestNotes\";\r\nimport BookingStatistics from \"../../widgets/BookingStatistics\";\r\nimport ClientStatistics from \"../../widgets/ClientStatistics\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { useDispatch } from 'react-redux'\r\nimport * as Admin from \"../../store/ducks/admin.duck\";\r\nimport * as Reference from \"../../store/ducks/reference.duck\";\r\nimport '../../../_metronic/_assets/css/app2.css';\r\n\r\n// background-image: url(\"/media/icons/background_fax.png\")\r\n\r\nexport default function Dashboard() {\r\n \r\n const dashboardMetrics = useSelector(state => state.admin.Reports['dashboardMetrics'])\r\n const roleScope = useSelector(state => state.auth.roleScope)\r\n\r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Admin.actions.fetchReport({ reportname: 'dashboardMetrics', output: 'collection'})) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchContexts()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchTags()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchClientsByDay()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchClientsByWeek()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchClientRegistrationsByDay()) }, [dispatch] )\r\n\r\n return (\r\n <>\r\n {roleScope !== 'Provisional' ?\r\n <>\r\n <div className=\"row\">\r\n <div className=\"col-xl-12\">\r\n <div className=\"row row-full-height\">\r\n\r\n <div className=\"col-sm-12 col-md-12 col-lg-2\">\r\n <Portlet className=\"kt-portlet--height-fluid kt-portlet--border-bottom-brand\">\r\n <PortletBody fluid={true} className=\"quick-stat-fax\">\r\n <Link to=\"/psychologyclients\">\r\n <QuickStat\r\n value={dashboardMetrics? dashboardMetrics['Clients Last 30 Days'] : 0}\r\n desc=\"New Clients (Last 30 Days)\"\r\n />\r\n </Link>\r\n </PortletBody>\r\n </Portlet>\r\n </div> \r\n <div className=\"col-sm-12 col-md-12 col-lg-2\">\r\n <Portlet className=\"kt-portlet--height-fluid kt-portlet--border-bottom-brand\">\r\n <PortletBody fluid={true} className=\"quick-stat-client\" >\r\n <Link to=\"/psychologyclients\">\r\n <QuickStat\r\n value={dashboardMetrics? dashboardMetrics['Clients All'] : 0}\r\n desc=\"Clients\"\r\n />\r\n </Link>\r\n </PortletBody>\r\n </Portlet>\r\n </div> \r\n\r\n <div className=\"col-sm-12 col-md-12 col-lg-2\"> \r\n <Portlet className=\"kt-portlet--height-fluid kt-portlet--border-bottom-brand\">\r\n <PortletBody fluid={true} className=\"quick-stat-registered\">\r\n <Link to=\"/registeredPsychologists\">\r\n <QuickStat\r\n value={dashboardMetrics? dashboardMetrics['Psychologists All'] : 0}\r\n desc=\"Registered Psychologists\"\r\n />\r\n </Link>\r\n </PortletBody>\r\n </Portlet>\r\n </div> \r\n <div className=\"col-sm-12 col-md-12 col-lg-2\">\r\n <Portlet className=\"kt-portlet--height-fluid kt-portlet--border-bottom-brand\">\r\n <PortletBody fluid={true} className=\"quick-stat-interested\">\r\n <Link to=\"/interestedPsychologists\">\r\n <QuickStat\r\n value={dashboardMetrics? dashboardMetrics['Psychologist Registrations Pending'] : 0}\r\n desc=\"Interested Psychologists\"\r\n />\r\n </Link>\r\n </PortletBody>\r\n </Portlet>\r\n </div> \r\n <div className=\"col-sm-12 col-md-12 col-lg-2\"> \r\n <Portlet className=\"kt-portlet--height-fluid kt-portlet--border-bottom-brand\">\r\n <PortletBody fluid={true} className=\"quick-stat-referral\">\r\n <Link to=\"/clients\">\r\n <QuickStat\r\n value={dashboardMetrics? dashboardMetrics['Past Bookings per Day'] : 0}\r\n desc=\"Average Bookings in Last 30\"\r\n />\r\n </Link>\r\n </PortletBody>\r\n </Portlet>\r\n </div> \r\n <div className=\"col-sm-12 col-md-12 col-lg-2\">\r\n <Portlet className=\"kt-portlet--height-fluid kt-portlet--border-bottom-brand\">\r\n <PortletBody fluid={true} className=\"quick-stat-clientinvite\">\r\n <Link to=\"/clientInvites\">\r\n <QuickStat\r\n value={dashboardMetrics? dashboardMetrics['Client Registrations Pending'] : 0}\r\n desc=\"Client Invitations Pending\"\r\n />\r\n </Link>\r\n </PortletBody>\r\n </Portlet>\r\n </div>\r\n </div>\r\n </div>\r\n </div> \r\n <Portlet>\r\n <PortletBody fit={true}>\r\n <div className=\"row row-no-padding row-col-separator-xl\">\r\n {/* <div className=\"col-xl-4\">\r\n <OrdersWidget />\r\n </div> */}\r\n <div className=\"col-xl-12\">\r\n <SalesBarChart\r\n title=\"Client Registrations\"\r\n desc=\"New Clients Per Day\"\r\n type='Clients'\r\n />\r\n </div>\r\n </div>\r\n </PortletBody>\r\n </Portlet> \r\n <Portlet>\r\n <PortletBody fit={true}>\r\n <div className=\"row row-no-padding row-col-separator-xl\">\r\n {/* <div className=\"col-xl-4\">\r\n <OrdersWidget />\r\n </div> */}\r\n <div className=\"col-xl-12\">\r\n <SalesBarChart\r\n title=\"Client Invites\"\r\n desc=\"New Client Invites Per Day\"\r\n type='Invites'\r\n />\r\n </div>\r\n </div>\r\n </PortletBody>\r\n </Portlet> \r\n <Portlet>\r\n <PortletBody fit={true}>\r\n <div className=\"row row-no-padding row-col-separator-xl\">\r\n <div className=\"col-xl-12\">\r\n <CapacityBarChart\r\n title=\"Client Registrations\"\r\n desc=\"New Clients Per Week\"\r\n />\r\n </div>\r\n </div>\r\n </PortletBody>\r\n </Portlet> \r\n\r\n <div className=\"row\">\r\n <div className=\"col-xl-6\">\r\n <BookingStatistics />\r\n </div>\r\n <div className=\"col-xl-6\">\r\n <ClientStatistics />\r\n </div>\r\n </div>\r\n </>\r\n :\r\n null\r\n }\r\n\r\n <div className=\"row\">\r\n <div className=\"col-xl-8\">\r\n <LatestNotes />\r\n </div>\r\n <div className=\"col-xl-4\">\r\n <TopPsychologists />\r\n </div>\r\n </div>\r\n\r\n </>\r\n );\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { Button, Modal, Form, Row, Col, InputGroup } from \"react-bootstrap\";\r\nimport { Paper, Grid, TextField, makeStyles } from '@material-ui/core';\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport ClearIcon from '@material-ui/icons/Clear';\r\nimport Alert from '@material-ui/lab/Alert';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport KTUtil from \"../../../../_metronic/_assets/js/util\";\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { format } from \"date-fns\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\nconst useStyles = makeStyles(() => ({\r\n noBorder: {\r\n border: \"none\",\r\n },\r\n}));\r\n\r\n\r\nexport default function InterestedPsychologists() {\r\n\r\n const dispatch = useDispatch()\r\n const classes = useStyles();\r\n\r\n useEffect( () => { dispatch(Admin.actions.fetchInterested()) }, [dispatch] )\r\n \r\n const filters = useSelector(state => state.admin.Filters)\r\n const interested = useSelector(state => state.admin.InterestedPsychologists)\r\n const filteredInterested = interested.filter(psychologist => \r\n (psychologist.fullname.toLowerCase().search(filters.interestedPsychologistsTerm.toLowerCase()) > -1 || psychologist.flagClean.toLowerCase().search(filters.interestedPsychologistsTerm.toLowerCase()) > -1 || filters.interestedPsychologistsTerm.length === 0) \r\n && (psychologist.providertype === filters.interestedProviderType || filters.interestedProviderType === 'All') \r\n && (psychologist.status === filters.interestedPsychologistsStatus || filters.interestedPsychologistsStatus === 'All') \r\n && (filters.interestedPsychologistsType === 'All' || (psychologist.specialisttype === filters.interestedPsychologistsType)) \r\n\r\n )\r\n\r\n function uuidv4() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & (0x3 | 0x8));\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n var [showInvitation, setShowInvitation] = useState(false)\r\n var [inviteError, setInviteError] = useState('')\r\n\r\n function handleInvitationClose() {\r\n setShowInvitation(false);\r\n } \r\n\r\n function setFlag(event, id) {\r\n dispatch(Admin.actions.putInterestedProviderFlag({ id: id, flag: event.target.value }));\r\n }\r\n\r\n\r\n function loadNewInvite() {\r\n setcurrentID(0)\r\n setcurrentFirstName('');\r\n setcurrentSurname('');\r\n setcurrentEmail('');\r\n setcurrentMobile('');\r\n setcurrentMessage('');\r\n setcurrentProviderType('Psychologist');\r\n setInviteError('')\r\n setShowInvitation(true)\r\n setcurrentComments('')\r\n setcurrentSpecialistType('Standard')\r\n }\r\n\r\n function putInvite() {\r\n if(currentFirstName === '' || (currentEmail === '' && currentMobile === ''))\r\n { \r\n setInviteError('You must provide a first name and either a mobile phone number or an email address.')\r\n } else {\r\n // Note message has been deprecated as the message is now canned \r\n setInviteError('')\r\n var payload = {\r\n registrationid : currentID,\r\n firstname: currentFirstName,\r\n surname: currentSurname,\r\n email: currentEmail,\r\n mobilephone: currentMobile,\r\n providertype: currentProviderType,\r\n message: currentMessage,\r\n specialisttype: currentSpecialistType,\r\n invitetoken: uuidv4(),\r\n status: 'New by Admin'\r\n }\r\n dispatch(Admin.actions.postPsychologistInvite(payload));\r\n // dispatch(Admin.actions.sendPsychologistInvite(payload));\r\n setShowInvitation(false)\r\n }\r\n }\r\n\r\n const deleteInvite = (id) => {\r\n dispatch(Admin.actions.deletePsychologistInvite(id));\r\n }\r\n\r\n const sendInvite = (id) => {\r\n dispatch(Admin.actions.sendPsychologistInvite(filteredInterested.find(row => row.id === id)));\r\n }\r\n\r\n var [currentFirstName,setcurrentFirstName] = useState()\r\n var [currentSurname,setcurrentSurname] = useState()\r\n var [currentEmail,setcurrentEmail] = useState()\r\n var [currentMobile,setcurrentMobile] = useState()\r\n var [currentProviderType,setcurrentProviderType] = useState()\r\n var [currentSpecialistType,setcurrentSpecialistType] = useState()\r\n var [currentMessage, setcurrentMessage] = useState('')\r\n var [currentComments,setcurrentComments] = useState() \r\n var [currentID, setcurrentID] = useState()\r\n var [currentTownOrSuburb, setcurrentTownOrSuburb] = useState()\r\n\r\n const loadInvite = (thisinterested) => {\r\n // console.log(thisinterested)\r\n setcurrentID(thisinterested.id);\r\n setcurrentFirstName(thisinterested.firstname);\r\n setcurrentSurname(thisinterested.surname)\r\n setcurrentEmail(thisinterested.email)\r\n setcurrentMobile(thisinterested.mobilephone)\r\n setcurrentMessage(thisinterested.message)\r\n setcurrentProviderType(thisinterested.providertype)\r\n setcurrentSpecialistType(thisinterested.specialisttype)\r\n setcurrentComments(thisinterested.comments)\r\n setcurrentTownOrSuburb(thisinterested.townorsuburb)\r\n setShowInvitation(true)\r\n }\r\n\r\n\r\n\r\n if (KTUtil.isEmpty(interested))\r\n {\r\n // return('No Interest Psychologists Found');\r\n return(null);\r\n } \r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', hide: true },\r\n { field: 'fullname', headerName: 'Name', width: 190,\r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadInvite(interested.find(invite => invite.id === params.row.id))} className=\"cell-Link\">\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), },\r\n { field: 'flag', headerName: 'Follow-up', width: 200,\r\n cellClassName: (params) => params.row.flag && params.row.flag.length > 0 ? 'flag-full-cell' : 'flag-empty-cell',\r\n renderCell: (params) => (\r\n <>\r\n <TextField \r\n variant=\"outlined\"\r\n name={`flag`} \r\n defaultValue={params.row.flag} \r\n onBlur={(event) => setFlag(event, params.row.id)}\r\n InputProps={{ classes: { notchedOutline:classes.noBorder, input: params.row.flag && params.row.flag.length > 0 ? 'flag-full' : 'flag-empty' }, }}\r\n multiline\r\n maxRows={4}\r\n style= {{ width: '100%'}}\r\n onFocus={event => {\r\n event.target.select();\r\n }}>\r\n </TextField>\r\n </>\r\n )\r\n },\r\n { field: 'email', headerName: 'Email', width: 220,\r\n renderCell: (params) => (\r\n <CopyToClipboard text={params.row.email}>\r\n <span className=\"cell-Link\" style={{ fontWeight: 500}}>{params.row.email}</span>\r\n </CopyToClipboard>\r\n ) \r\n },\r\n { field: 'providernumber', headerName: 'Provider No.', width: 140 },\r\n { field: 'mobilephone', headerName: 'Phone', width: 110 },\r\n // { field: 'postcode', headerName: 'Postcode', width: 70 },\r\n { field: 'providertype', headerName: 'Type', width: 120 },\r\n { field: 'comments', headerName: 'Question/Comments', width: 190, \r\n renderCell: (params) => (\r\n <>\r\n {params.row.comments && params.row.comments.length > 0 ?\r\n <div onClick={() => loadInvite(interested.find(invite => invite.id === params.row.id))} className=\"cell-Link\">\r\n View\r\n </div>\r\n :\r\n <div>\r\n None\r\n </div>\r\n }\r\n </>\r\n )\r\n },\r\n { field: 'status', headerName: 'Status', width: 115 }, \r\n { field: 'createdon', type: 'date', headerName: 'Created', width: 140, valueFormatter: ({ value }) => format(new Date(value), \"dd-MM-yyyy HH:mm\") },\r\n { field: 'none', headerName: 'Actions', width: 270,\r\n renderCell: (params) => (\r\n <>\r\n {params.row.status !== 'Registered' && \r\n <a href={`/psychologistregistration/${params.row.invitetoken}`} target=\"RHC\">\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#FFFACD\", marginRight: 14 }} >\r\n Test Invite\r\n </Button>\r\n </a> \r\n }\r\n {params.row.status !== 'Registered' && \r\n <Button variant=\"secondary\" size=\"sm\" onClick={()=>sendInvite(params.row.id)} style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#eee\", marginRight: 14 }} >\r\n {getAction(params.row.status)}\r\n </Button>\r\n }\r\n {params.row.status !== 'Registered' && \r\n <Button variant=\"secondary\" size=\"sm\" onClick={()=>deleteInvite(params.row.id)} style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#eee\" }} >\r\n Delete\r\n </Button>\r\n }\r\n </>\r\n ) \r\n }\r\n ];\r\n\r\n const getAction = (status) => {\r\n switch(status) {\r\n case 'New':\r\n case 'New by Admin':\r\n return 'Send'\r\n case 'Sent':\r\n return 'Resend'\r\n case 'Resent':\r\n return ''\r\n default :\r\n return\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n <h4>\r\n Interested Providers\r\n </h4>\r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10 }}>\r\n <Grid item style={{ marginTop: 2, marginLeft: 2 }}> \r\n <Grid container>\r\n <Grid item> \r\n <InputGroup size=\"sm\">\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={filters.interestedPsychologistsTerm}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'interestedPsychologistsTerm', filterValue: event.target.value }))}\r\n autoComplete='OFF'\r\n style={{ maxWidth: 170, height: 35, backgroundColor: filters.interestedPsychologistsTerm.length > 0 ? 'rgb(250 239 195)' : 'white' }}\r\n />\r\n <InputGroup.Append onClick={() => dispatch(Admin.actions.setFilters({ filterName: 'interestedPsychologistsTerm', filterValue: '' }))}>\r\n <InputGroup.Text>\r\n <ClearIcon fontSize=\"small\" style={{ color: filters.interestedPsychologistsTerm.length > 0 ? '#222222' : 'silver', marginLeft: -3 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Append>\r\n </InputGroup>\r\n </Grid>\r\n <Grid item style={{ marginLeft: 10 }}> \r\n <Form.Control as=\"select\" size=\"sm\" style={{ height: 35 }} defaultValue={filters.interestedProviderType} onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'interestedProviderType', filterValue: event.target.value }))}>\r\n <option value=\"All\">All</option>\r\n <option value=\"Psychologist\">Psychologist</option>\r\n <option value=\"Financial\">Financial Counsellor</option>\r\n <option value=\"Clinical\">Clinical Psychologist</option>\r\n <option value=\"GP\">GP</option>\r\n <option value=\"Provisional\">Provisional Psychologist</option>\r\n <option value=\"Social\">MH Social Worker</option>\r\n <option value=\"Nurse\">Mental Health Nurse</option>\r\n <option value=\"Occupational\">Occupational Therapist</option>\r\n </Form.Control>\r\n </Grid>\r\n <Grid item style={{ marginLeft: 10 }}> \r\n <Form.Control as=\"select\" size=\"sm\" style={{ height: 35 }} defaultValue={filters.interestedPsychologistsStatus} onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'interestedPsychologistsStatus', filterValue: event.target.value }))}>\r\n <option value=\"All\">All</option>\r\n <option value=\"New\">New</option>\r\n <option value=\"New by Admin\">New by Admin</option>\r\n <option value=\"Sent\">Sent</option>\r\n <option value=\"Registered\">Registered</option>\r\n </Form.Control>\r\n </Grid>\r\n <Grid item style={{ marginLeft: 10 }}> \r\n <Form.Control as=\"select\" size=\"sm\" style={{ height: 35 }} defaultValue={filters.interestedPsychologistsType} onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'interestedPsychologistsType', filterValue: event.target.value }))}>\r\n <option value=\"All\">All</option>\r\n <option value=\"nthqldphn\">Nth QLD PHN</option>\r\n </Form.Control>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => loadNewInvite()} style={{ marginRight: 20 }}>\r\n Invite Provider\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n\r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={filteredInterested} columns={columns} pageSize={10} rowsPerPageOptions={[10]} checkboxSelection={false} sortModel={[{ field: 'createdon', sort: 'desc' }]} />\r\n </Paper>\r\n\r\n <Modal show={showInvitation} onHide={handleInvitationClose} dialogClassName=\"invite-modal\">\r\n <Modal.Header closeButton className=\"invite-modal\">\r\n {currentID === 0 ?\r\n <Modal.Title>Invite New Provider</Modal.Title>\r\n :\r\n <Modal.Title>Interested Provider Detail</Modal.Title>\r\n }\r\n </Modal.Header>\r\n <Modal.Body className=\"invite-modal\">\r\n {inviteError !== '' ?\r\n <Alert severity=\"error\" style={{ marginBottom: 14 }}>\r\n {inviteError}\r\n </Alert>\r\n :\r\n null }\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>First Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileFirstName\" defaultValue={currentFirstName} onBlur={(event) => setcurrentFirstName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Surname</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileSurname\" defaultValue={currentSurname} onBlur={(event) => setcurrentSurname(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Email</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileEmail\" defaultValue={currentEmail} onBlur={(event) => setcurrentEmail(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Mobile Phone Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileMobile\" defaultValue={currentMobile} onBlur={(event) => setcurrentMobile(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Provider Type</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentProviderType} onBlur={(event) => setcurrentProviderType(event.target.value)}>\r\n <option value=\"Psychologist\">Psychologist</option>\r\n <option value=\"Financial\">Financial Counsellor</option>\r\n <option value=\"Clinical\">Clinical Psychologist</option>\r\n <option value=\"GP\">GP</option>\r\n <option value=\"Provisional\">Provisional Psychologist</option>\r\n <option value=\"Social\">MH Social Worker</option>\r\n <option value=\"Nurse\">Mental Health Nurse</option>\r\n <option value=\"Occupational\">Occupational Therapist</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Specialist Type</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentSpecialistType} onBlur={(event) => setcurrentSpecialistType(event.target.value)}>\r\n <option value=\"Standard\">Standard</option>\r\n <option value=\"nthqldphn\">Nth QLD PHN</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"8\">\r\n <Form.Group>\r\n <Form.Label>Town or Suburb (if entered on Registration of Interest Form)</Form.Label>\r\n <Form.Control type=\"text\" name=\"townorsuburb\" readOnly defaultValue={currentTownOrSuburb} />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group>\r\n <Form.Label>Comments/Questions</Form.Label>\r\n <Form.Control as=\"textarea\" rows={3} type=\"text\" name=\"comments\" defaultValue={currentComments} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </Modal.Body>\r\n <Modal.Footer className=\"invite-modal\">\r\n <Button variant=\"secondary\" onClick={handleInvitationClose}>\r\n Close\r\n </Button>\r\n <Button variant=\"primary\" onClick={putInvite}>\r\n Save \r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <div style={{border: \"solid rgb(215, 215, 215) 1px\", borderRadius: \"4px\", backgroundColor: \"white\"}}>\r\n \r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n />\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\n","\r\nexport const eventTypes = [\r\n {\r\n value: 'booking',\r\n text: 'Booking'\r\n }, \r\n {\r\n value: 'availabilityAny',\r\n text: 'Availability - New Client Bookings'\r\n }, \r\n {\r\n value: 'availabilityExisting',\r\n text: 'Availability - Existing'\r\n }, \r\n {\r\n value: 'availabilityOther',\r\n text: 'Other (Not Available)'\r\n }, \r\n {\r\n value: 'availabilitySupervision',\r\n text: 'Availability - Supervision'\r\n }, \r\n {\r\n value: 'availabilityPerinatalGriefLoss', \r\n text: 'Availability - Perinatal Grief & Loss'\r\n }\r\n];\r\n\r\n\r\nexport const eventTypesEAP = [\r\n {\r\n value: 'booking',\r\n text: 'Booking'\r\n }, \r\n {\r\n value: 'availabilityAny',\r\n text: 'Availability - New Client Bookings'\r\n }, \r\n {\r\n value: 'availabilityExisting',\r\n text: 'Availability - Existing'\r\n }, \r\n {\r\n value: 'availabilityOther',\r\n text: 'Other (Not Available)'\r\n }, \r\n {\r\n value: 'availabilitySupervision',\r\n text: 'Availability - Supervision'\r\n }, \r\n {\r\n value: 'availabilityNDISContractEAP',\r\n text: 'Availability - NDIS/Contract/EAP'\r\n }, \r\n {\r\n value: 'availabilityNDISContractEAPNew', \r\n text: 'Availability - New Client or NDIS/Contract/EAP'\r\n },\r\n {\r\n value: 'availabilityNDISContractEAPExisting', \r\n text: 'Availability - Existing Client or NDIS/Contract/EAP'\r\n },\r\n {\r\n value: 'availabilityPerinatalGriefLoss', \r\n text: 'Availability - Perinatal Grief & Loss'\r\n }\r\n];\r\n\r\nexport const eventTypesNthQLDPHN = [\r\n {\r\n value: 'booking',\r\n text: 'Booking'\r\n }, \r\n {\r\n value: 'availabilityNthQLDPHNNew',\r\n text: 'Availability - Nth QLD PHN New'\r\n }, \r\n {\r\n value: 'availabilityNthQLDPHNExisting',\r\n text: 'Availability - Nth QLD PHN Existing'\r\n }, \r\n {\r\n value: 'availabilityNthQLDPHNFacetoFace', \r\n text: 'Availability- Nth QLD PHN Face to Face Clients'\r\n }\r\n];\r\n\r\nexport const eventTypesAdmin = [\r\n {\r\n value: 'booking',\r\n text: 'Booking'\r\n }, \r\n {\r\n value: 'availabilityAny',\r\n text: 'Availability - New Client Bookings'\r\n }, \r\n {\r\n value: 'availabilityExisting',\r\n text: 'Availability - Existing'\r\n }, \r\n {\r\n value: 'availabilityOther',\r\n text: 'Other (Not Available)'\r\n }, \r\n {\r\n value: 'availabilitySupervision',\r\n text: 'Availability - Supervision'\r\n }, \r\n {\r\n value: 'availabilityNDISContractEAP',\r\n text: 'Availability - NDIS/Contract/EAP'\r\n }, \r\n {\r\n value: 'availabilityNDISContractEAPNew', \r\n text: 'Availability - New Client or NDIS/Contract/EAP'\r\n },\r\n {\r\n value: 'availabilityNDISContractEAPExisting', \r\n text: 'Availability - Existing Client or NDIS/Contract/EAP'\r\n },\r\n {\r\n value: 'availabilityPerinatalGriefLoss', \r\n text: 'Availability - Perinatal Grief & Loss'\r\n },\r\n {\r\n value: 'availabilityNthQLDPHNNew',\r\n text: 'Availability - Nth QLD PHN New'\r\n }, \r\n {\r\n value: 'availabilityNthQLDPHNExisting',\r\n text: 'Availability - Nth QLD PHN Existing'\r\n }, \r\n {\r\n value: 'availabilityNthQLDPHNFacetoFace', \r\n text: 'Availability- Nth QLD PHN Face to Face Clients'\r\n } \r\n];\r\n\r\nexport const bookingTypes = [\r\n {\r\n value: 'VIDEO',\r\n text: 'Video'\r\n }, {\r\n value: 'PHONE',\r\n text: 'Phone'\r\n }, {\r\n value: 'FACE',\r\n text: 'Face to Face'\r\n }, \r\n];\r\n\r\nexport const paymentTypes = [\r\n {\r\n value: 'NDIS',\r\n text: 'NDIS'\r\n }, {\r\n value: 'Bulk Billed',\r\n text: 'Bulk Billed'\r\n }, {\r\n value: 'Reduced Gap',\r\n text: 'Reduced Gap'\r\n }, {\r\n value: 'Full Fee',\r\n text: 'Full Fee'\r\n }, \r\n {\r\n value: 'EAP',\r\n text: 'EAP'\r\n }, \r\n {\r\n value: 'Contract',\r\n text: 'Contract'\r\n }, \r\n {\r\n value: 'Provisional',\r\n text: 'Provisional'\r\n }, \r\n];\r\n\r\nexport const eventStatuses = [{\r\n value: 'Active',\r\n text: 'Active'\r\n }, {\r\n value: 'Cancelled',\r\n text: 'Cancelled'\r\n }, {\r\n value: 'Deleted',\r\n text: 'Deleted'\r\n }, {\r\n value: 'NoShow',\r\n text: 'No Show'\r\n }, \r\n];\r\n\r\nexport const treatments = [{\r\n value: 138,\r\n text: 'Vital sign'\r\n}, {\r\n value: 189,\r\n text: 'Blood test'\r\n}, {\r\n value: 392,\r\n text: 'Electrooculography(EOG)'\r\n}, {\r\n value: 491,\r\n text: 'Holter monitor(ECG)'\r\n}];\r\n\r\nexport const customModelFields = {\r\n id: 'AppointmentID',\r\n description: 'Note',\r\n start: 'Start',\r\n end: 'End',\r\n title: 'Title',\r\n recurrenceRule: 'RecurrenceRule',\r\n recurrenceId: 'RecurrenceID',\r\n recurrenceExceptions: 'RecurrenceException'\r\n};\r\n","import React, { useState } from 'react'\r\nimport { useSelector } from 'react-redux'\r\nimport { DropDownList } from '@progress/kendo-react-dropdowns'\r\nimport { DateTimePicker } from '@progress/kendo-react-dateinputs'\r\nimport Autocomplete from '@material-ui/lab/Autocomplete'\r\nimport { TextField } from '@material-ui/core'\r\nimport { eventStatuses, eventTypes, eventTypesEAP, eventTypesNthQLDPHN, eventTypesAdmin, paymentTypes, bookingTypes } from './data'\r\n\r\nexport const TitleLabel = props => {\r\n return null;\r\n};\r\n\r\nexport const TitleEditor = props => {\r\n return null;\r\n};\r\n\r\nexport const StartTimezoneCheckedLabel = props => {\r\n return null;\r\n};\r\n\r\nexport const StartTimezoneCheckedEditor = props => {\r\n return null;\r\n};\r\n\r\nexport const DescriptionLabel = props => {\r\n return null;\r\n};\r\n\r\nexport const DescriptionEditor = props => {\r\n return null;\r\n};\r\n\r\nexport const EventTypeEditor = props => {\r\n const handleChange = event => {\r\n if (props.onChange) {\r\n props.onChange.call(undefined, {\r\n value: event.value.value\r\n });\r\n }\r\n };\r\n\r\n return <DropDownList \r\n onChange={handleChange} \r\n value={props.admin ? eventTypesAdmin.find(t => t.value === props.value) : props.nthqldphn ? eventTypesNthQLDPHN.find(t => t.value === props.value) : props.eapcontractndis ? eventTypesEAP.find(t => t.value === props.value) : eventTypes.find(t => t.value === props.value)} \r\n data={props.admin ? eventTypesAdmin : props.nthqldphn ? eventTypesNthQLDPHN : props.eapcontractndis ? eventTypesEAP : eventTypes} \r\n dataItemKey={'value'} \r\n textField={'text'} \r\n style={{ width: 250 }} />\r\n};\r\n\r\nexport const ClientEditor = props => {\r\n //console.log(props.value)\r\n const role = useSelector(state => state.auth.roleDesc)\r\n const clients = useSelector(state => state.admin.Clients)\r\n const handleChange = event => {\r\n //console.log(event)\r\n const selectedClient = clients.find(client => client.fullname === event.value.fullname)\r\n //console.log(selectedClient)\r\n if (selectedClient)\r\n {\r\n const id = selectedClient.id\r\n //console.log(id)\r\n if (props.onChange) {\r\n props.onChange.call(undefined, {\r\n value: id\r\n });\r\n }\r\n }\r\n };\r\n\r\n function handleClientSelectChange(propertyName, event, newValue) { \r\n // console.log('NewValue')\r\n // console.log(newValue);\r\n // console.log(props);\r\n if (newValue) \r\n {\r\n //console.log(newValue)\r\n if (props.onChange) {\r\n props.onChange.call(undefined, {\r\n value: newValue.id\r\n });\r\n }\r\n //\r\n // formRenderProps.onChange('paymentType', {\r\n // value: newValue.paymentType\r\n // });\r\n }\r\n } \r\n\r\n if (role === 'Admin')\r\n {\r\n return <DropDownList onChange={handleChange} value={clients.find(client => client.id === props.value)} data={clients} dataItemKey={'id'} textField={'fullname'} disabled={props.disabled ? true : false} style={{ width: 240 }} />; \r\n }\r\n else\r\n {\r\n return <Autocomplete\r\n id=\"clientSelect\"\r\n variant=\"outlined\"\r\n options={clients}\r\n getOptionLabel={(option) => option.fullname}\r\n value={clients.find(client => client.id === props.value) ? clients.find(client => client.id === props.value) : null} \r\n onChange={(event, newValue) => handleClientSelectChange('clientSelect', event, newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', position: 'relative'}}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"clientSelector\"\r\n style={{backgroundColor: \"white\", margin: 0, padding: 0,zIndex: '20000' }}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n }\r\n\r\n};\r\n\r\nexport const PaymentTypeEditor = props => { \r\n const handleChange = event => {\r\n if (props.onChange) {\r\n // Check if Payment Type is being changed to Contract and bounce it - this must be changed by Admin \r\n // Kendo React has no disabled support in DropDownList - though it exists in Angular - Telerik for the win. \r\n if (event.value.value && event.value.value !== 'Contract')\r\n {\r\n props.onChange.call(undefined, {\r\n value: event.value.value\r\n });\r\n }\r\n }\r\n };\r\n return <DropDownList onChange={handleChange} itemDisabled='Contract' value={paymentTypes.find(t => t.value === props.value)} data={paymentTypes} dataItemKey={'value'} textField={'text'} style={{ width: 200 }} />;\r\n};\r\n\r\nexport const StatusEditor = props => {\r\n return <DropDownList value={eventStatuses.find(t => t.value === props.value)} readOnly data={[eventStatuses.find(t => t.value === props.value)]} dataItemKey={'value'} textField={'text'} />;\r\n};\r\n\r\nexport const BookingTypeEditor = props => {\r\n const handleChange = event => {\r\n if (props.onChange) {\r\n props.onChange.call(undefined, {\r\n value: event.value.value\r\n });\r\n }\r\n };\r\n return <DropDownList onChange={handleChange} value={bookingTypes.find(t => t.value === props.value)} data={bookingTypes} dataItemKey={'value'} textField={'text'} style={{ width: 200 }} />;\r\n};\r\n\r\nexport const CustomEndEditor = (props) => {\r\n\r\n // We need to add 30 mins to the end time for new bookings\r\n\r\n const defaultEndTime = React.useRef(props.value)\r\n const defaultEndTimeCount = React.useRef(0)\r\n const [defaultOffset, setDefaultOffset] = useState(false);\r\n\r\n React.useEffect(() => {\r\n if(!defaultOffset && props.eventType && props.eventType === 'booking')\r\n {\r\n defaultEndTime.current = defaultEndTime.current.setMinutes(props.value.getMinutes() + 30)\r\n // props.onChange.call(undefined, { value: defaultEndTime.current });\r\n defaultEndTimeCount.current = defaultEndTimeCount + 1\r\n setDefaultOffset(true)\r\n }\r\n }, [defaultOffset, props])\r\n \r\n return (\r\n <DateTimePicker {...props} defaultValue={new Date(defaultEndTime.current)}/>\r\n );\r\n};\r\n","import React, { useEffect, useState } from \"react\";\r\nimport usePlacesAutocomplete, {getGeocode, getLatLng, getZipCode} from \"use-places-autocomplete\";\r\nimport { Form } from \"react-bootstrap\";\r\n\r\nconst PlacesAutoComplete = (props) => {\r\n\r\n const {\r\n value,\r\n suggestions: { status, data },\r\n clearSuggestions,\r\n setValue\r\n } = usePlacesAutocomplete({\r\n requestOptions: {\r\n /* Define search scope here */\r\n componentRestrictions : {country: 'au'},\r\n },\r\n // defaultValue : props.currentfulladdress,\r\n debounce: 300,\r\n });\r\n\r\n // need to reset the value when changing faxes - not when we change it internally via getGeocode\r\n const [currentID, setCurrentID] = useState(0)\r\n useEffect(() => {\r\n if (currentID !== props.currentID) {\r\n setValue(props.currentfulladdress, false);\r\n setCurrentID(props.currentID)\r\n }\r\n }, [currentID, props.currentID, props.currentfulladdress, setValue]);\r\n\r\n // console.log(props.currentfulladdress);\r\n\r\n const handleSelect = ({ description }) => () => {\r\n // When user selects a place, we can replace the keyword without request data from API\r\n // by setting the second parameter to \"false\"\r\n props.setcurrentfulladdress(description);\r\n setValue(description, false);\r\n clearSuggestions();\r\n\r\n // Get latitude and longitude via utility functions\r\n getGeocode({ address: description })\r\n .then((results) => getLatLng(results[0]))\r\n .then(({ lat, lng }) => {\r\n props.setcurrentLatitude(lat);\r\n props.setcurrentLongitude(lng);\r\n })\r\n .catch((error) => {\r\n console.log(\"😱 Error: \", error);\r\n });\r\n\r\n getGeocode({ address: description })\r\n .then((results) => getZipCode(results[0],false))\r\n .then(( zipCode ) => {\r\n props.setcurrentPostCode(zipCode);\r\n // console.log('Getting ZipCode');\r\n // console.log(zipCode);\r\n })\r\n .catch((error) => {\r\n console.log(\"😱 Error: \", error);\r\n });\r\n\r\n\r\n };\r\n\r\n const handleInput = (e) => {\r\n // Place a \"string\" to update the value of the input element\r\n setValue(e.target.value);\r\n };\r\n\r\n const renderSuggestions = () =>\r\n data.map((suggestion) => {\r\n const {\r\n place_id,\r\n structured_formatting: { main_text, secondary_text },\r\n } = suggestion;\r\n\r\n return (\r\n <li key={place_id} onClick={handleSelect(suggestion)}>\r\n <strong>{main_text}</strong> <small>{secondary_text}</small>\r\n </li>\r\n );\r\n });\r\n\r\n return (\r\n <div>\r\n <Form.Control type=\"text\" name=\"profilefulladdress\" value={value} onChange={handleInput} autoComplete='new-password' isInvalid={props.isInvalid} isValid={props.isValid} />\r\n {/* <input value={value} onChange={handleInput} /> */}\r\n {status === 'OK' && <ul>{renderSuggestions()}</ul>}\r\n </div>\r\n );\r\n};\r\n\r\nexport default PlacesAutoComplete","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport * as Admin from \"../store/ducks/admin.duck\";\r\nimport * as Forms from \"../store/ducks/forms.duck\";\r\nimport { Button, Form, Row, Col, Modal } from \"react-bootstrap\";\r\nimport { Grid, TableContainer, FormControl, Select, MenuItem, Table, TableHead, TableBody, TableRow, TableCell, makeStyles } from '@material-ui/core';\r\nimport { format } from \"date-fns\";\r\nimport FormDataEntry from \"../pages/home/admin/FormDataEntry\";\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport LaunchIcon from '@material-ui/icons/Launch';\r\n\r\nexport default function Notes(props) {\r\n \r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Admin.actions.fetchNotes({ type: props.type, pkID: props.pkid })) }, [dispatch, props.type, props.pkid] )\r\n // useEffect( () => { dispatch(Admin.actions.fetchCounter()) }, [dispatch] )\r\n useEffect( () => { dispatch(Forms.actions.fetchForms()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchFiles({ type: props.type, pkID: props.pkid })) }, [dispatch, props.type, props.pkid] )\r\n\r\n const files = useSelector(state => state.admin.Files[props.type])\r\n const loadFiles = files.filter(file => file.formData === null)\r\n const [newNote, setNewNote] = useState('')\r\n const [footer, setFooter] = useState(props.waitingRoomURL)\r\n const [newNoteHelpText, setNewNoteHelpText] = useState('')\r\n const [emailSubjectHelpText, setEmailSubjectHelpText] = useState('')\r\n const [emailSubject, setEmailSubject] = useState('')\r\n const [emailCC, setEmailCC] = useState('')\r\n const [emailCCHelpText, setEmailCCHelpText] = useState('')\r\n const [noteSelector, setnoteSelector] = useState(props.noteAction ? props.noteAction : 'SMS')\r\n const [newFFile, setNewFFile] = useState()\r\n const [existingFile, setExistingFile] = useState(0)\r\n const [attachmentHelpText, setAttachmentHelpText] = useState('')\r\n const [faxDestination, setFaxDestination] = useState((props.medicalPractice && props.medicalPractice.fax) || '')\r\n const [faxDestinationHelpText, setFaxDestinationHelpText] = useState('')\r\n const [sendFormID, setSendFormID] = useState(0);\r\n const [formHelpText, setFormHelpText] = useState('')\r\n const [show,setShow] = useState(false);\r\n\r\n const notes = useSelector(state => state.admin.Notes[props.type])\r\n const role = useSelector(state => state.auth.roleDesc)\r\n const forms = useSelector(state => state.forms.Forms);\r\n\r\n // const faxStatus = useSelector(state => state.admin.FAXCounter)\r\n // const smsStatus = useSelector(state => state.admin.SMSCounter)\r\n\r\n function validateEmail(email) \r\n {\r\n var re = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n return re.test(email);\r\n }\r\n\r\n function addNote() {\r\n // Determine if the criteria has been made \r\n var error = false;\r\n // Check if note has been entered (note is not required for Fax)\r\n if ((newNote.length === 0) && noteSelector !== 'Fax' && noteSelector !== 'FaxGP')\r\n {\r\n setNewNoteHelpText(\"You haven't typed anything!\");\r\n error = true;\r\n }\r\n else\r\n {\r\n setNewNoteHelpText('');\r\n }\r\n // Check if subject has been entered if note is email \r\n if ((emailSubject.length === 0) && (noteSelector === 'Email' || noteSelector === 'ReferrerEmail' || noteSelector === 'GPEmail'))\r\n {\r\n setEmailSubjectHelpText('Did you forget to add a subject?');\r\n error = true;\r\n }\r\n else\r\n {\r\n setEmailSubjectHelpText('');\r\n }\r\n // Check if file has been added if note is fax \r\n if ((existingFile === 0 && !(newFFile && newFFile.size > 0)) && (noteSelector === 'Fax' || noteSelector === 'FaxGP'))\r\n {\r\n setAttachmentHelpText('Did you forget to attach a file to be faxed?');\r\n error = true;\r\n }\r\n else\r\n {\r\n setAttachmentHelpText('');\r\n }\r\n // Check if form has been selected if note is form\r\n if ((!sendFormID) && (noteSelector === 'Form'))\r\n {\r\n setFormHelpText('You must select a form. If you do not have any forms then please contact us for help.');\r\n error = true;\r\n }\r\n else\r\n {\r\n setFormHelpText('');\r\n }\r\n // Check if file has been added if note is fax \r\n if ((noteSelector === 'Fax' || noteSelector === 'FaxGP') && ((!faxDestination) || (faxDestination.length !== 10)))\r\n {\r\n setFaxDestinationHelpText('Did you forget to enter a correct (ie. 10 digit) receipient fax number?');\r\n error = true;\r\n }\r\n else\r\n {\r\n setFaxDestinationHelpText('');\r\n }\r\n // Adding catch-all to prevent errors \r\n if (!noteSelector || noteSelector === '')\r\n {\r\n setNewNoteHelpText(\"You haven't typed anything!\");\r\n error = true;\r\n }\r\n else\r\n {\r\n setNewNoteHelpText('');\r\n }\r\n // Check email in CC is actually an email address \r\n if (emailCC.length > 1 && !validateEmail(emailCC)) \r\n {\r\n setEmailCCHelpText('CC Email not valid');\r\n error = true;\r\n }\r\n else\r\n {\r\n setEmailCCHelpText('');\r\n }\r\n\r\n // Check no errors \r\n if (!error)\r\n {\r\n // Ok time to go - move from useState to FormData \r\n const formData = new FormData();\r\n // Add fields \r\n var noteBody = newNote;\r\n if((noteSelector === 'Email' || noteSelector === 'SMS') && footer)\r\n {\r\n noteBody = newNote + ' ' + footer\r\n }\r\n formData.append('type',props.type);\r\n formData.append('pkid',props.pkid);\r\n formData.append('subject',emailSubject);\r\n formData.append('cc',emailCC);\r\n formData.append('selector',noteSelector);\r\n formData.append('note',noteBody);\r\n formData.append('faxdestination',faxDestination);\r\n formData.append('faxFile',newFFile);\r\n formData.append('existingFile',existingFile);\r\n formData.append('sendFormID',sendFormID);\r\n // Ok Time to Dispatch \r\n process.env.REACT_APP_DEBUG && console.log(...formData);\r\n dispatch(Admin.actions.postNote({ formData:formData, type: props.type, pkID: props.pkid}));\r\n clearNote();\r\n }\r\n }\r\n\r\n function viewForm(formID)\r\n {\r\n // console.log(formID);\r\n setShow(true);\r\n }\r\n\r\n const clearNote = () => {\r\n setnoteSelector(props.noteAction ? props.noteAction : 'SMS');\r\n setNewNote('');\r\n setNewNoteHelpText('');\r\n setEmailSubject('');\r\n setEmailCC('');\r\n setEmailSubjectHelpText('');\r\n setNewFFile();\r\n setExistingFile(0);\r\n setFaxDestination('');\r\n setSendFormID(forms.length > 0 ? forms[0].id : 0);\r\n }\r\n\r\n function handleFileFFieldChange(propertyName, event) { \r\n // console.log(event.currentTarget.files[0]);\r\n setNewFFile(event.currentTarget.files[0]) \r\n }\r\n\r\n const handleSelectChange = (event) => {\r\n setnoteSelector(event.target.value);\r\n //\r\n // Set defaults based on selection\r\n //\r\n if (event.target.value === 'FaxGP')\r\n {\r\n // Set fax destination to that of their GP (based on referral)\r\n setFaxDestination(props.faxGP);\r\n }\r\n if (event.target.value === 'SMSGP')\r\n {\r\n // Set custom SMS message \r\n setNewNote(`Hello ${props.firstName}, Thank you for completing an appointment with Rural Health Connect. You can now book your next appointment with another practitioner. Please log in to the portal at https://portal.ruralhealthconnect.com.au to book an appointment. If you need assistance, please call us via the numbers on our website. Thank you, Rural Health Connect`)\r\n }\r\n else\r\n {\r\n if (event.target.value === 'SMSChg')\r\n {\r\n // Set custom SMS message \r\n setNewNote(`Hello ${props.firstName}, If you would like to book with a different practitioner. Please log in to the portal at https://portal.ruralhealthconnect.com.au and make a selection. If you need assistance, please call us via the numbers on our website. Thank you, Rural Health Connect`)\r\n }\r\n else\r\n {\r\n if (event.target.value === 'SMSCR')\r\n {\r\n // Set custom SMS message \r\n setNewNote(`Hello ${props.firstName}, This is a reminder to complete your registration. Please click on the link below and follow the steps <INVITEURL> . If you need assistance, please call us via the numbers on our website. Thank you, Rural Health Connect`)\r\n }\r\n else\r\n {\r\n if (event.target.value === 'SMSCRCL')\r\n {\r\n // Set custom SMS message\r\n setNewNote(`Hello ${props.firstName}, we have received a referral and been trying to connect with you to book an appointment. Can you please ring within 5 business days to discuss or complete your registration by clicking on this link <INVITEURL> . If we do not hear from you we will assume you no longer require our service and will close your referral. Please feel free to contact us at any time in the future. Kind regards, Rural Health Connect 0493 201 005 or 0493 432 144. PLEASE DO NOT REPLY TO THIS TEXT`)\r\n }\r\n else\r\n {\r\n if (event.target.value === 'SMSCRNC')\r\n {\r\n // Set custom SMS message \r\n setNewNote(`Hello ${props.firstName}, This is a reminder we have a referral for you. If you would like to book an appointment please click on the following link below to register for your telehealh sessions <INVITEURL> . If you need assistance, please call us via the numbers on our website. Thank you, Rural Health Connect`)\r\n }\r\n else\r\n {\r\n if (event.target.value === 'SMSCRMR')\r\n {\r\n // Set custom SMS message \r\n setNewNote(`Hello ${props.firstName}, We have received your paperwork for psychology sessions however in order for you to be eligible for a Medicare rebate, we require a Mental Health Care Plan and GP referral. They can fax it to us on 0745731100. If you require assistance, please call us on 0493 201 005 or 0493 432 144. Kind regards, Rural Health Connect. PLEASE DO NOT REPLY TO THIS MESSAGE`)\r\n }\r\n else \r\n {\r\n if (event.target.value === 'GPEmail')\r\n {\r\n // Set custom Email Message \r\n setNewNote(`Dear ${props.gpName},<br> Thank you for your referral of ${props.firstName} ${props.surname} <br><br> We have made several attempts to contact them however they have not yet signed up with our program.<br> We are therefore closing this file. <br> Please feel free to direct any questions regarding this to us at info@ruralhealthconnect.com.au or\r\n call us on 0427 692 377.<br> <br> Kind Regards <br> <br> Rural Health Connect.`)\r\n }\r\n else\r\n {\r\n if (event.target.value === 'SMSADMC')\r\n {\r\n // Set custom SMS message - Carly\r\n setNewNote(`Hi ${props.firstName}, I am trying to contact you to book in an appointment. When you have a moment can you please call me back on 0493201005. Thanks, Carly, Rural Health Connect. PLEASE DO NOT REPLY TO THIS MESSAGE`)\r\n }\r\n else\r\n {\r\n if (event.target.value === 'SMSADMK')\r\n {\r\n // Set custom SMS message - Kass\r\n setNewNote(`Hi ${props.firstName}, I am trying to contact you to book in an appointment. When you have a moment can you please call me back on 0493432144. Thanks, Kass, Rural Health Connect. PLEASE DO NOT REPLY TO THIS MESSAGE`)\r\n }\r\n else\r\n {\r\n if(event.target.value === 'Form')\r\n {\r\n // set form selection to first form if not already selected\r\n if(forms && forms.length > 0)\r\n {\r\n setSendFormID(forms[0].id)\r\n setNewNote(`Hello ${props.firstName}, \r\n \r\n You have some paperwork that needs your attention ahead of your session on Rural Health Connect.\r\n\r\n Please log in to the portal at https://portal.ruralhealthconnect.com.au and complete the ${forms[0].formName} form via your dashboard.\r\n\r\n Thank you,\r\n\r\n Rural Health Connect`)\r\n }\r\n else\r\n {\r\n setNewNote(`Hello ${props.firstName}, \r\n \r\n You have some paperwork that needs your attention ahead of your session on Rural Health Connect.\r\n\r\n Please log in to the portal at https://portal.ruralhealthconnect.com.au and complete the form via your dashboard.\r\n\r\n Thank you,\r\n\r\n Rural Health Connect`)\r\n\r\n }\r\n }\r\n else\r\n {\r\n setNewNote('')\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n const handleSelectForm = (event) => {\r\n setSendFormID(event.target.value); \r\n setNewNote(`Hello ${props.firstName}, \r\n \r\nYou have some paperwork that needs your attention ahead of your session on Rural Health Connect.\r\n\r\nPlease log in to the portal https://portal.ruralhealthconnect.com.au and complete the ${forms.find(row => row.id === event.target.value).formName} form via your dashboard.\r\n\r\nThank you,\r\n\r\nRural Health Connect`)\r\n // setNewNote(`Please log in to the portal and complete the ${forms.find(row => row.id === event.target.value).formName} form via your dashboard.`)\r\n };\r\n\r\n const handleSelectFile = (event) => {\r\n setExistingFile(event.target.value); \r\n }\r\n\r\n const useStyles = makeStyles((theme) => ({\r\n root: {\r\n // minWidth: 200,\r\n // maxWidth: 200,\r\n },\r\n media: {\r\n height: 200,\r\n },\r\n title: {\r\n fontSize: 14,\r\n },\r\n pos: {\r\n marginBottom: 12,\r\n },\r\n }));\r\n \r\n function EmailSubject(){\r\n // Check if noteSelector is set to email \r\n if ((noteSelector !== 'Email') && (noteSelector !== 'ReferrerEmail') && (noteSelector !== 'GPEmail'))\r\n {\r\n return (null);\r\n }\r\n //\r\n return (\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Subject</Form.Label>\r\n <Form.Control type=\"text\" name=\"Subject\" defaultValue={emailSubject} onBlur={(event) => setEmailSubject(event.target.value)} autoComplete='new-password' style={{ backgroundColor: 'white' }} />\r\n {emailSubjectHelpText.length ? (<p className='error-help'>{emailSubjectHelpText}</p>) : ''}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n )\r\n }\r\n\r\n function EmailCC(){\r\n // Check if noteSelector is set to email \r\n if ((noteSelector !== 'Email') && (noteSelector !== 'ReferrerEmail') && (noteSelector !== 'GPEmail'))\r\n {\r\n return (null);\r\n }\r\n //\r\n return (\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>CC</Form.Label>\r\n <Form.Control type=\"text\" name=\"CC\" defaultValue={emailCC} onBlur={(event) => setEmailCC(event.target.value)} autoComplete='new-password' style={{ backgroundColor: 'white' }} />\r\n {emailCCHelpText.length ? (<p className='error-help'>{emailCCHelpText}</p>) : ''}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n )\r\n }\r\n\r\n function FaxDestination(){\r\n // Check if noteSelector is set to fax \r\n if ((noteSelector !== 'Fax') && (noteSelector !== 'FaxGP'))\r\n {\r\n return (null);\r\n }\r\n //\r\n return (\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Recipient Fax Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"FaxDestination\" defaultValue={faxDestination} onBlur={(event) => setFaxDestination(event.target.value)} autoComplete='new-password' />\r\n {faxDestinationHelpText.length ? (<p className='error-help'>{faxDestinationHelpText}</p>) : ''}\r\n <Form.Text id=\"FaxDestination\" muted style={{ marginLeft: 10 }}>\r\n {props.medicalPractice ?\r\n <>\r\n {(props.medicalPractice && props.medicalPractice.practicename) || ''} - {(props.medicalPractice && props.medicalPractice.fax) || ''}\r\n </>\r\n :\r\n null\r\n }\r\n </Form.Text>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n )\r\n } \r\n\r\n function FormSelection(){\r\n // Check if noteSelector is set to form \r\n if (noteSelector !== 'Form')\r\n {\r\n return (null);\r\n }\r\n //\r\n return (\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <FormControl variant=\"outlined\" margin=\"dense\">\r\n <Form.Label>Select Form <div onClick={() => viewForm(sendFormID)} style={{ marginLeft: 10, display: 'inline-block', cursor: 'pointer', fontWeight: 600, backgroundColor: getActionColour() }}>(<LaunchIcon fontSize=\"small\" style={{ fontWeight: 600, paddingBottom: 4 }} /> Preview)</div></Form.Label>\r\n <Select \r\n id='sendFormID'\r\n aria-label='Select Action Type'\r\n name='sendFormID'\r\n value={sendFormID} \r\n onChange={handleSelectForm}\r\n style={{ backgroundColor: 'white' }}>\r\n {forms.map(row => { return (\r\n <MenuItem key={`form-${row.id}`} value={row.id}>{row.formName}</MenuItem>\r\n )}\r\n )}\r\n \r\n </Select>\r\n </FormControl> \r\n {formHelpText.length ? (<p className='error-help'>{formHelpText}</p>) : ''} \r\n </Form.Group> \r\n </Col>\r\n </Row>\r\n )\r\n }\r\n\r\n function Attachment(){\r\n // Check if noteSelector is set to fax \r\n if (noteSelector !== 'Fax' && noteSelector !== 'FaxGP' && noteSelector !== 'Email' && noteSelector !== 'ReferrerEmail' && noteSelector !== 'GPEmail')\r\n {\r\n return (null);\r\n }\r\n //\r\n return (\r\n <>\r\n <Row>\r\n <Col md=\"12\"> \r\n <Form.Label>Select an Existing File or Upload</Form.Label>\r\n <Form.Group className=\"file-upload-form\"> \r\n <FormControl variant=\"outlined\" margin=\"dense\">\r\n <Select \r\n id='fileSelect'\r\n aria-label='Select Existing File'\r\n name='existingFile'\r\n value={existingFile} \r\n onChange={handleSelectFile}\r\n style={{ backgroundColor: 'white', width:'100%', marginBottom:20 }}>\r\n <MenuItem key='file-0' value={0}> Not Selected</MenuItem>\r\n {loadFiles.map(row => { return (\r\n <MenuItem key={`file-${row.id}`} value={row.id}>{row.filename}</MenuItem>\r\n )}\r\n )}\r\n </Select>\r\n </FormControl>\r\n { existingFile === 0 ?\r\n <>\r\n <Form.Control type=\"file\" name=\"newfile\" onChange={(event) => handleFileFFieldChange('newfile', event)} /> \r\n {newFFile ? `Selected: ${newFFile.name}` : ''}\r\n </>\r\n :\r\n null\r\n }\r\n {attachmentHelpText.length ? (<p className='error-help'>{attachmentHelpText}</p>) : ''}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n\r\n </>\r\n )\r\n }\r\n\r\n function Footer(){\r\n // Check if noteSelector is set to email \r\n if ((noteSelector === 'Email' || noteSelector === 'SMS') && (props.type !== \"ClientRegistration\"))\r\n {\r\n return (\r\n <Form.Group>\r\n <Form.Label>Footer (Waiting Room URL)</Form.Label>\r\n <Form.Control type=\"text\" name=\"footer\" defaultValue={props.waitingRoomURL} onBlur={(event) => setFooter(event.target.value)} autoComplete='new-password' style={{ fontSize: 12, backgroundColor: 'white' }} />\r\n </Form.Group>\r\n )\r\n }\r\n else \r\n {\r\n return (null);\r\n }\r\n }\r\n \r\n function Message(){\r\n // Check if noteSelector is set to fax \r\n if (noteSelector === 'Fax' || noteSelector === 'FaxGP')\r\n {\r\n return (null);\r\n }\r\n //\r\n return (\r\n <Row>\r\n <Col md=\"12\"> \r\n <Form.Group >\r\n <Form.Label>Message</Form.Label>\r\n <Form.Control as=\"textarea\" rows={8} type=\"text\" name=\"psychologistNote\" defaultValue={newNote} onBlur={(event) => setNewNote(event.target.value)} autoComplete='new-password' style={{ borderColor: '#D1D1D1'}} />\r\n {newNoteHelpText.length ? (<p className='error-help'>{newNoteHelpText}</p>) : ''}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n )\r\n }\r\n\r\n const classes = useStyles();\r\n\r\n // const getSMSDisabled = val => {\r\n // // \r\n // if (role !== 'Admin')\r\n // {\r\n // if (!smsStatus)\r\n // {\r\n // return {disabled: true};\r\n // }\r\n // }\r\n // return {}; \r\n // }\r\n\r\n // const getFaxDisabled = val => {\r\n // // \r\n // if (role !== 'Admin')\r\n // {\r\n // if (!faxStatus)\r\n // {\r\n // return {disabled: true};\r\n // }\r\n // }\r\n // return {}; \r\n // }\r\n\r\n const getFaxGPDisabled = val => {\r\n // \r\n // Check if provider has run out of faxes \r\n //\r\n // if (role !== 'Admin')\r\n // {\r\n // if (!faxStatus)\r\n // {\r\n // return {disabled: true};\r\n // }\r\n // }\r\n // Check if GP Fax has been sent \r\n if (!props.faxGP)\r\n {\r\n return {disabled: true};\r\n }\r\n return {}; \r\n }\r\n\r\n const getReferrerEmailDisabled = val => {\r\n // \r\n // Check if Referrer Email Provided \r\n //\r\n if ((!props.referrerEmail) || (props.referrerEmail && props.referrerEmail.length < 0))\r\n {\r\n return {disabled: true};\r\n }\r\n return {}; \r\n }\r\n\r\n const getGPEmailDisabled = val => {\r\n // \r\n // Check if GP Email Provided \r\n //\r\n if ((!props.gpEmail) || (props.gpEmail && props.gpEmail.length < 0))\r\n {\r\n return {disabled: true};\r\n }\r\n return {}; \r\n }\r\n\r\n\r\n const getFormDisabled = val => {\r\n // \r\n // Check if in invite - cannot send client invites forms \r\n //\r\n if (props.type ===\"ClientRegistration\")\r\n {\r\n return {disabled: true};\r\n }\r\n }\r\n\r\n\r\n function getActionColour() {\r\n if(noteSelector === 'Note'){\r\n return '#ebfae8';\r\n } else if (noteSelector === 'Email') {\r\n return '#d2f9fa';\r\n } else if (noteSelector === 'ReferrerEmail') {\r\n return '#fffbc2';\r\n } else if (noteSelector === 'GPEmail') {\r\n return '#ffe6ff';\r\n } else if (noteSelector === 'SMS') {\r\n return '#faefcf';\r\n } else if (noteSelector === 'SMSCR') {\r\n return '#00B3BE';\r\n } else if (noteSelector === 'SMSGP') {\r\n return '#00B3BE';\r\n } else if (noteSelector === 'SMSChg') {\r\n return '#93A33A';\r\n } else if (noteSelector === 'SMSCRNC') {\r\n return '#93A33A';\r\n } else if (noteSelector === 'SMSCRMR') {\r\n return '#93A33A';\r\n } else if (noteSelector === 'SMSADMC') {\r\n return '#00B3BE';\r\n } else if (noteSelector === 'SMSADMK') {\r\n return '#00B3BE';\r\n } else if (noteSelector === 'Form') {\r\n return '#fffbc2';\r\n } else if (noteSelector === 'Fax') {\r\n return '#fff0ed';\r\n } else if (noteSelector === 'FaxGP') {\r\n return '#ffe6ff';\r\n }\r\n }\r\n return(\r\n <>\r\n <Grid container spacing={4}>\r\n <Grid item md={4}> \r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <FormControl variant=\"outlined\" margin=\"dense\">\r\n <Form.Label>Select Action</Form.Label>\r\n <Select \r\n id='noteSelector'\r\n aria-label='Select Action Type'\r\n name='noteSelector'\r\n value={noteSelector} \r\n onChange={handleSelectChange}\r\n style={{ backgroundColor: getActionColour() }}>\r\n <MenuItem key='Note' value='Note' >Record Note</MenuItem>\r\n <MenuItem key='Email' value='Email' >Email To {props.type === 'ClientRegistration' ? 'Invitee' : props.type}</MenuItem>\r\n { props.type === 'ClientRegistration' ? <MenuItem key='GPEmail' value='GPEmail' {...getGPEmailDisabled(true)} >Email To Referring GP</MenuItem> : null }\r\n { props.type === 'ClientRegistration' ? <MenuItem key='ReferrerEmail' value='ReferrerEmail' {...getReferrerEmailDisabled(true)} >Email To Referrer</MenuItem> : null }\r\n <MenuItem key='SMS' value='SMS'>SMS To {props.type === 'ClientRegistration' ? 'Invitee' : props.type}</MenuItem>\r\n { props.type === 'Client' ? <MenuItem key='SMSADMC' value='SMSADMC' >SMS To Client from Carly</MenuItem> : null }\r\n { props.type === 'Client' ? <MenuItem key='SMSADMK' value='SMSADMK' >SMS To Client from Kass</MenuItem> : null }\r\n { props.type === 'ClientRegistration' ? <MenuItem key='SMSCR' value='SMSCR' >SMS To Invitee re Registration</MenuItem> : null }\r\n { props.type === 'ClientRegistration' ? <MenuItem key='SMSCRNC' value='SMSCRNC' >SMS To Invitee re No Contact</MenuItem> : null }\r\n { props.type === 'ClientRegistration' ? <MenuItem key='SMSCRCL' value='SMSCRCL' >SMS to Invitee re Close file</MenuItem> : null }\r\n <MenuItem key='SMSCRMR' value='SMSCRMR' >SMS re Medicare Paperwork</MenuItem>\r\n { props.type === 'Client' ? <MenuItem key='SMSGP' value='SMSGP' >SMS To Client re Need to Select a Provider</MenuItem> : null }\r\n { props.type === 'Client' ? <MenuItem key='SMSChg' value='SMSChg' >SMS To Client re New Provider Selection</MenuItem> : null }\r\n <MenuItem key='Form' value='Form' {...getFormDisabled(true)}>Send Form to {props.type === 'ClientRegistration' ? 'Invitee' : props.type}</MenuItem>\r\n <MenuItem key='Fax' value='Fax' >Send Fax Document</MenuItem>\r\n <MenuItem key='FaxGP' value='FaxGP' {...getFaxGPDisabled(true)} >Send Fax to Client GP</MenuItem>\r\n </Select>\r\n </FormControl> \r\n </Form.Group> \r\n\r\n <EmailSubject />\r\n <EmailCC />\r\n <FaxDestination />\r\n <FormSelection />\r\n <Attachment />\r\n <Message />\r\n <Footer />\r\n \r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container spacing={0} padding={6} justifyContent=\"space-between\">\r\n <Button variant=\"light\" size=\"sm\" onClick={() => clearNote()} style={{ borderColor: '#D1D1D1'}}>\r\n Clear\r\n </Button>\r\n <Button variant=\"success\" size=\"sm\" onClick={() => addNote()}>\r\n {noteSelector === 'Note' ? 'Save' : 'Send'}\r\n </Button>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n </Grid>\r\n <Grid item md={8}>\r\n <Form.Group>\r\n <Form.Label>Notes</Form.Label>\r\n <TableContainer style={{ backgroundColor: '#FFF', height: 540, width: \"100%\", overflowY: \"scroll\" }}>\r\n <Table className={classes.table} aria-label=\"simple table\">\r\n <TableHead>\r\n <TableRow>\r\n <TableCell style={{ width: 100 }}>Date</TableCell>\r\n <TableCell>Type</TableCell>\r\n <TableCell>Note</TableCell>\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {notes ? notes.map((row) => (\r\n <TableRow key={row.id}>\r\n <TableCell>\r\n {format(new Date(row.createdOn), \"dd-MM-yyyy HH:mm\")}\r\n </TableCell>\r\n <TableCell>\r\n {row.action}\r\n </TableCell>\r\n <TableCell>\r\n {row.note}\r\n </TableCell>\r\n </TableRow>\r\n )): null}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </Form.Group >\r\n </Grid>\r\n </Grid>\r\n\r\n <Modal show={show} onHide={() => setShow(false)} dialogClassName=\"edit-md-modal\">\r\n <Modal.Header className=\"edit-md-modal\">\r\n <Modal.Title>View Form</Modal.Title>\r\n <CloseIcon onClick={() => setShow(false)} style={{ cursor: 'pointer' }} />\r\n </Modal.Header>\r\n <Modal.Body className=\"edit-md-modal\"> \r\n <FormDataEntry setFormID={sendFormID} formID={sendFormID} formDataID={0} setShowFormData={setShow} />\r\n </Modal.Body>\r\n </Modal>\r\n\r\n </>\r\n\r\n )\r\n}\r\n \r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport * as Admin from \"../store/ducks/admin.duck\";\r\nimport * as Forms from \"../store/ducks/forms.duck\";\r\nimport { Button, Form, Row, Col, Modal } from \"react-bootstrap\";\r\nimport { Paper, Grid, TableContainer, Table, TableHead, TableBody, TableRow, TableCell, makeStyles, Tooltip, Checkbox, FormControl, Select, MenuItem } from '@material-ui/core';\r\nimport FormDataEntry from \"../pages/home/admin/FormDataEntry\";\r\nimport CloudDownload from '@material-ui/icons/CloudDownload';\r\nimport DescriptionIcon from '@material-ui/icons/Description';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport Delete from '@material-ui/icons/Delete';\r\nimport { format } from \"date-fns\";\r\n\r\n\r\n\r\nexport default function Files(props) {\r\n \r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Admin.actions.fetchFiles({ type: props.type, pkID: props.pkid })) }, [dispatch, props.type, props.pkid] )\r\n useEffect( () => { dispatch(Forms.actions.fetchForms()) }, [dispatch] )\r\n const role = useSelector(state => state.auth.roleDesc)\r\n const inviteStatus = props.inviteStatus ? props.inviteStatus : 'none'\r\n \r\n var [newFile, setNewFile] = useState('')\r\n var [mhcp, setmhcp] = useState(0)\r\n const forms = useSelector(state => state.forms.Forms);\r\n // Will need to add more to this filter as they are developed\r\n const pdfForms = forms.filter(form => (form.formDataPlugin === 'Referring GP Letter' || form.formDataPlugin === 'Referring GP Ad-Hoc Letter' || form.formDataPlugin === 'Referring GP No Contact Letter'))\r\n const [sendFormID, setSendFormID] = useState(0);\r\n const [showFormData, setShowFormData] = useState(false);\r\n const [formData, setFormData] = useState()\r\n const [showCompleteForm, setShowCompleteForm] = useState(false)\r\n const [showConfirmation, setShowConfirmation] = useState(false)\r\n const [deleteFileId, setDeleteFileId] = useState()\r\n const [deleteFileName, setDeleteFileName] = useState()\r\n const [selectedForm, setSelectedForm] = useState()\r\n const files = useSelector(state => state.admin.Files[props.type])\r\n const subType = (props.subtype && props.subtype === 'NDIS' ? 'NDIS' : 'notset')\r\n\r\n function handleFileFieldChange(propertyName, event) { \r\n // console.log(event.currentTarget.files[0]);\r\n setNewFile(event.currentTarget.files[0]) \r\n }\r\n\r\n function handleConfirmationClose() {\r\n setShowConfirmation(false);\r\n } \r\n\r\n function addFile() {\r\n // Move from useState to FormData \r\n const formData = new FormData();\r\n // Add fields \r\n // console.log(newFile);\r\n formData.append('type',props.type);\r\n formData.append('pkid',props.pkid);\r\n formData.append('newfile',newFile);\r\n formData.append('mhcpFlag',mhcp);\r\n // Ok Time to Dispatch \r\n process.env.REACT_APP_DEBUG && console.log(...formData);\r\n dispatch(Admin.actions.postFile({formData:formData, type: props.type, pkID: props.pkid}));\r\n setNewFile('');\r\n }\r\n\r\n function completeForm() {\r\n setShowCompleteForm(true);\r\n setSelectedForm(forms.filter(form => form.id === sendFormID)[0].formName)\r\n // console.log(forms.filter(form => form.id === sendFormID));\r\n }\r\n\r\n\r\n const handleSelectForm = (event,row) => {\r\n setSendFormID(event.target.value); \r\n };\r\n\r\n function DeleteFeature(props)\r\n {\r\n // Do not display delete icon for clients \r\n if (role === 'Client')\r\n {\r\n return(null);\r\n }\r\n return(\r\n <Tooltip title=\"Delete\" aria-label=\"Delete\" placement=\"top\" arrow>\r\n <Delete onClick={() => deleteConfirmation(props.id)} style={{ color: '#646c9a', cursor: 'pointer', marginLeft: 14 }} />\r\n </Tooltip>\r\n )\r\n }\r\n\r\n function handleCheckBoxChange(id,currentState) \r\n {\r\n // console.log(id)\r\n // console.log(currentState)\r\n dispatch(Admin.actions.setFileClientViewableFlag({id:id, current: currentState, type: props.type, pkID: props.pkid}));\r\n };\r\n\r\n\r\n const loadDataEntry = (formData) => {\r\n setFormData(formData)\r\n setShowFormData(true);\r\n }\r\n\r\n function deleteConfirmation(delId)\r\n {\r\n setDeleteFileId(delId)\r\n setDeleteFileName(files.filter(file => file.id === delId)[0].filename)\r\n // console.log('Files')\r\n // console.log(delId)\r\n // console.log(files.filter(file => file.id === delId)[0].filename)\r\n setShowConfirmation(true)\r\n }\r\n \r\n function deleteFile() {\r\n // Soft delete file \r\n // console.log(id);\r\n dispatch(Admin.actions.deleteFile({id: deleteFileId, type: props.type, pkID: props.pkid}));\r\n }\r\n\r\n const useStyles = makeStyles((theme) => ({\r\n root: {\r\n // minWidth: 200,\r\n // maxWidth: 200,\r\n },\r\n media: {\r\n height: 200,\r\n },\r\n title: {\r\n fontSize: 14,\r\n },\r\n pos: {\r\n marginBottom: 12,\r\n },\r\n }));\r\n \r\n const classes = useStyles();\r\n\r\n return(\r\n <>\r\n <Grid container spacing={4}>\r\n <Grid item md={props.vertical ? 12 : 4}> \r\n <Row>\r\n <Col md=\"12\"> \r\n <Form.Group >\r\n <Form.Label>Add File:</Form.Label>\r\n <Grid container className=\"file-upload-form\">\r\n <Grid item md={8} >\r\n <Form.Control type=\"file\" name=\"newfile\" onChange={(event) => handleFileFieldChange('newfile', event)}/>\r\n </Grid>\r\n {props.vertical ? \r\n <Grid item md={4}>\r\n <Button variant=\"success\" size=\"sm\" onClick={() => addFile()}>\r\n Upload\r\n </Button>\r\n </Grid>\r\n : null }\r\n </Grid>\r\n </Form.Group>\r\n </Col>\r\n {props.type === 'Client' ? \r\n <Col md=\"12\">\r\n <Form.Group>\r\n <Checkbox aria-label='Mental Health Care Plan' name=\"mhcp\" value={mhcp} onChange={(event) => setmhcp(event.target.checked)} style={{ paddingTop: 6, paddingLeft: 0 }} />\r\n {subType && subType === 'NDIS' ?\r\n <span style={{ paddingBottom: 4 }}>This is the current NDIS Plan</span>\r\n \r\n :\r\n <span style={{ paddingBottom: 4 }}>This is the current Mental Health Care Plan</span>\r\n }\r\n </Form.Group>\r\n </Col> \r\n : null} \r\n {props.vertical ? null :\r\n <Col md=\"12\"> \r\n <Grid container spacing={0} padding={6} justifyContent=\"space-between\">\r\n <Grid item>\r\n\r\n </Grid>\r\n <Grid item>\r\n <Button variant=\"success\" size=\"sm\" onClick={() => addFile()}>\r\n Upload\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n }\r\n </Row> \r\n {role !== 'Client' && role !== 'Referrer' && (inviteStatus === 'Sent' || inviteStatus === 'none') ?\r\n <>\r\n <hr />\r\n {pdfForms && pdfForms.length > 0 ?\r\n <Row>\r\n <Col md=\"12\"> \r\n <Form.Group >\r\n <FormControl variant=\"outlined\" margin=\"dense\">\r\n <Form.Label>Generate PDF:</Form.Label>\r\n <Select \r\n id='sendFormID'\r\n aria-label='Select Action Type'\r\n name='sendFormID'\r\n value={sendFormID} \r\n onChange={handleSelectForm}\r\n style={{ backgroundColor: 'white', minWidth: 150 }}>\r\n <MenuItem key={0} value={0}></MenuItem>\r\n {pdfForms.map(row => { return (\r\n <MenuItem key={`form-${row.id}`} value={row.id}>{row.formName}</MenuItem>\r\n )}\r\n )}\r\n </Select>\r\n </FormControl> \r\n </Form.Group> \r\n </Col>\r\n {sendFormID !== 0 ? \r\n <Col md=\"12\"> \r\n <Grid container spacing={0} padding={6} justifyContent=\"space-between\">\r\n <Grid item>\r\n\r\n </Grid>\r\n <Grid item>\r\n <Button variant=\"success\" size=\"sm\" onClick={() => completeForm()}>\r\n Display Form\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n :\r\n null\r\n }\r\n </Row>\r\n :\r\n null\r\n }\r\n </>\r\n :\r\n null\r\n }\r\n </Grid>\r\n <Grid item md={props.vertical ? 12 : 8}>\r\n {/* <hr style={{ marginTop: 40 }}></hr> */}\r\n <Form.Group>\r\n <Form.Label>Files</Form.Label>\r\n <Paper>\r\n <TableContainer style={{ backgroundColor: '#FFF', height: props.vertical ? 300 : 540, width: \"100%\", overflowY: \"scroll\" }}>\r\n <Table className={classes.table} aria-label=\"simple table\">\r\n <TableHead>\r\n <TableRow>\r\n <TableCell>Date</TableCell>\r\n <TableCell>File</TableCell>\r\n {props.type === 'Client' ? \r\n <TableCell>Type</TableCell>\r\n :\r\n null\r\n }\r\n {props.type === 'Client' && role !== 'Client' ? \r\n <TableCell>Client View</TableCell>\r\n :\r\n null\r\n }\r\n <TableCell>Action</TableCell>\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {files ? files.map((row) => (\r\n <TableRow key={row.id}>\r\n <TableCell>\r\n {format(new Date(row.createdOn), \"dd-MM-yyyy HH:mm\")}\r\n </TableCell>\r\n <TableCell>\r\n {row.filename}\r\n </TableCell>\r\n {props.type === 'Client' ? \r\n <TableCell>\r\n {subType && subType === 'NDIS' && row.mhcpFlag === 'MHCP'?\r\n 'NDIS Plan'\r\n :\r\n <>\r\n {row.mhcpFlag}\r\n </>\r\n }\r\n </TableCell>\r\n :\r\n null\r\n }\r\n {props.type === 'Client' && role !== 'Client' ? \r\n <TableCell>\r\n <Checkbox checked={row.clientViewable === '1' ? true : false} onClick={() => handleCheckBoxChange(row.id,row.clientViewable)} />\r\n </TableCell>\r\n :\r\n null\r\n }\r\n <TableCell>\r\n {row.formData \r\n ? <DescriptionIcon style={{ color: '#646c9a', cursor: 'pointer' }} onClick={() => loadDataEntry(row.formData)} />\r\n : \r\n <a href={row.downloadlink}>\r\n <Tooltip title=\"Download\" aria-label=\"Download\" placement=\"top\" arrow>\r\n <CloudDownload style={{ color: '#646c9a' }} />\r\n </Tooltip>\r\n </a>\r\n } \r\n {!row.formData && <DeleteFeature id={row.id} />}\r\n </TableCell>\r\n </TableRow>\r\n )): null}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </Paper>\r\n </Form.Group >\r\n </Grid>\r\n </Grid>\r\n\r\n <Modal show={showFormData} onHide={() => setShowFormData(false)} dialogClassName=\"edit-md-sm-dialog-modal\">\r\n <Modal.Header className=\"edit-md-sm-modal\">\r\n <Modal.Title>{formData && formData.formName}</Modal.Title>\r\n <Button variant=\"outlined\" size=\"sm\" style={{ marginTop: 5, background: \"#eeeeee\", border: '1px solid #9da8e5', padding: 5, marginLeft: 10 }} onClick={() => setShowFormData(false)} >\r\n <CloseIcon />\r\n </Button> \r\n </Modal.Header>\r\n <Modal.Body className=\"edit-md-modal\">\r\n {formData && <FormDataEntry formID={formData.formID} formDataID={formData.formDataID} setShowFormData={setShowFormData} />}\r\n </Modal.Body>\r\n </Modal>\r\n\r\n <Modal show={showCompleteForm} onHide={() => setShowCompleteForm(false)} dialogClassName=\"edit-md-sm-dialog-modal\">\r\n <Modal.Header className=\"edit-md-sm-modal\">\r\n <Modal.Title>Generating {selectedForm && selectedForm} PDF</Modal.Title>\r\n <Button variant=\"outlined\" size=\"sm\" style={{ marginTop: 5, background: \"#eeeeee\", border: '1px solid #9da8e5', padding: 5, marginLeft: 10 }} onClick={() => setShowCompleteForm(false)} >\r\n <CloseIcon />\r\n </Button> \r\n </Modal.Header>\r\n <Modal.Body className=\"edit-md-modal\">\r\n <FormDataEntry formID={sendFormID} formDataID={0} setShowFormData={setShowCompleteForm} contextName={props.type} contextID={props.pkid} pdfFlag={true} />\r\n </Modal.Body>\r\n </Modal>\r\n\r\n <Modal show={showConfirmation} onHide={handleConfirmationClose} dialogClassName=\"edit-md-sm-dialog-modal\">\r\n <Modal.Header className=\"edit-md-sm-modal\">\r\n <Modal.Title>Delete File Confirmation</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"edit-md-modal\">\r\n <Grid item md={12}>\r\n <p>Delete File: <span style={{ fontWeight: 600 }}>{deleteFileName}</span>?</p>\r\n </Grid>\r\n </Modal.Body>\r\n <Modal.Footer className=\"edit-md-modal\">\r\n <Button variant=\"secondary\" onClick={handleConfirmationClose}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"success\" onClick={() => deleteFile()}>\r\n Delete\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n </>\r\n )\r\n\r\n\r\n}\r\n \r\n","import React, { useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport * as Admin from \"../store/ducks/admin.duck\";\r\nimport { DataGridPro } from '@mui/x-data-grid-pro';\r\nimport CopyIcon from '@material-ui/icons/FileCopyOutlined';\r\n\r\nimport { Paper, Grid, Typography } from '@material-ui/core';\r\nimport { format } from \"date-fns\";\r\nimport '../../_metronic/_assets/css/app.css';\r\nimport '../../_metronic/_assets/css/app2.css';\r\n\r\n// import medipassSDK from '@medipass/partner-sdk';\r\n\r\nexport default function BookingBillingList(props) {\r\n\r\n const dispatch = useDispatch()\r\n // const isMobile = useMediaQuery('(max-width: 760px)');\r\n const bookingBilling = useSelector(state => state.admin.BookingBilling)\r\n\r\n useEffect( () => { dispatch(Admin.actions.fetchBookingBilling({ clientID : props.id })) }, [dispatch, props.id] )\r\n \r\n var cols = [\r\n { field: 'id', headerName: 'ID', hide: true },\r\n { field: 'psychologistDate', type: 'date', headerName: 'Booking Date', flex: 1, \r\n renderCell: (params) => (\r\n <div>\r\n <Typography><CopyIcon onClick={() => navigator.clipboard.writeText(format(new Date(params.value ? params.value : null), \"dd-MM-yyyy\"))} style={{marginRight : 10}}/> {format(new Date(params.value ? params.value : null), \"dd-MM-yyyy\")} </Typography>\r\n </div>\r\n )\r\n },\r\n { field: 'paymentType', headerName: 'Payment Type', flex: 0.7 },\r\n { field: 'status', headerName: 'Booking Status', flex: 0.7 }\r\n]\r\n\r\n\r\n\r\n return (\r\n <>\r\n <Paper> \r\n <Grid container style={{ padding: 10 }}>\r\n <Grid item md={1} style={{ paddingTop: 8, paddingLeft: 4, color: \"#646c9a\" }}>\r\n <h4>Bookings</h4>\r\n </Grid>\r\n </Grid>\r\n <Grid container spacing={2} style={{marginLeft : 10}}>\r\n <Grid item md={3} xs={6} style={{ fontWeight: 600 }}>\r\n Client First Name:\r\n </Grid>\r\n <Grid item md={9} xs={6}>\r\n <CopyIcon onClick={() => navigator.clipboard.writeText(props.clientFirstName)} style={{marginRight : 10}}/> {props.clientFirstName}\r\n </Grid>\r\n <Grid item md={3} xs={6} style={{ fontWeight: 600 }}>\r\n Client Preferred Name:\r\n </Grid>\r\n <Grid item md={9} xs={6}>\r\n <CopyIcon onClick={() => navigator.clipboard.writeText(props.clientPreferredName)} style={{marginRight : 10}}/> {props.clientPreferredName}\r\n </Grid>\r\n <Grid item md={3} xs={6} style={{ fontWeight: 600 }}>\r\n Client Surname:\r\n </Grid>\r\n <Grid item md={9} xs={6}>\r\n <CopyIcon onClick={() => navigator.clipboard.writeText(props.clientSurname)} style={{marginRight : 10}}/> {props.clientSurname} \r\n </Grid>\r\n <Grid item md={3} xs={6} style={{ fontWeight: 600 }}>\r\n DOB:\r\n </Grid>\r\n <Grid item md={9} xs={6} >\r\n <CopyIcon onClick={() => navigator.clipboard.writeText(props.clientDOB)} style={{marginRight : 10}}/> {props.clientDOB} \r\n </Grid>\r\n <Grid item md={3} xs={6} style={{ fontWeight: 600 }}>\r\n Email:\r\n </Grid>\r\n <Grid item md={9} xs={6} > \r\n <CopyIcon onClick={() => navigator.clipboard.writeText(props.clientEmail)} style={{marginRight : 10}}/> {props.clientEmail} \r\n </Grid>\r\n <Grid item md={3} xs={6} style={{ fontWeight: 600 }}>\r\n Mobile:\r\n </Grid>\r\n <Grid item md={9} xs={6} >\r\n <CopyIcon onClick={() => navigator.clipboard.writeText(props.clientMobile)} style={{marginRight : 10}}/> {props.clientMobile} \r\n </Grid>\r\n <Grid item md={3} xs={6} style={{ fontWeight: 600 }}>\r\n Medicare No:\r\n </Grid>\r\n <Grid item md={9} xs={6} > \r\n <CopyIcon onClick={() => navigator.clipboard.writeText(props.clientMedicareNo)} style={{marginRight : 10}}/> {props.clientMedicareNo} \r\n </Grid>\r\n <Grid item md={3} xs={6} style={{ fontWeight: 600 }}>\r\n Order On Card:\r\n </Grid>\r\n <Grid item md={9} xs={6} >\r\n <CopyIcon onClick={() => navigator.clipboard.writeText(props.clientMedicareReferenceNo)} style={{marginRight : 10}}/> {props.clientMedicareReferenceNo} \r\n </Grid>\r\n <Grid item md={3} xs={6} style={{ fontWeight: 600 }}>\r\n Expiry:\r\n </Grid>\r\n <Grid item md={9} xs={6} >\r\n <CopyIcon onClick={() => navigator.clipboard.writeText(props.clientMedicareExpiryDate)} style={{marginRight : 10}}/> {props.clientMedicareExpiryDate} \r\n </Grid>\r\n <Grid item md={3} xs={6} style={{ fontWeight: 600 }}>\r\n Referring GP:\r\n </Grid>\r\n <Grid item md={9} xs={6} >\r\n <CopyIcon onClick={() => navigator.clipboard.writeText(props.clientreferringGPName)} style={{marginRight : 10}}/> {props.clientreferringGPName} \r\n </Grid>\r\n <Grid item md={3} xs={6} style={{ fontWeight: 600 }}>\r\n Provider No:\r\n </Grid>\r\n <Grid item md={9} xs={6} >\r\n <CopyIcon onClick={() => navigator.clipboard.writeText(props.clientreferringGPProviderNo)} style={{marginRight : 10}}/> {props.clientreferringGPProviderNo}\r\n </Grid>\r\n <Grid item md={3} xs={6} style={{ fontWeight: 600 }}>\r\n Referred On:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{marginBottom: 30}}>\r\n <CopyIcon onClick={() => navigator.clipboard.writeText(props.clientreferredOn)} style={{marginRight : 10}}/> {format(new Date(props.clientreferredOn ? props.clientreferredOn : null), \"dd-MM-yyyy\")} \r\n </Grid>\r\n\r\n </Grid>\r\n </Paper>\r\n\r\n <Paper style={{ height: 500 }}>\r\n <DataGridPro\r\n rows={bookingBilling} \r\n columns={cols} \r\n pagination={false}\r\n checkboxSelection={false} \r\n sortModel={[{ field: 'psychologistDate', sort: 'desc' }]} \r\n />\r\n </Paper>\r\n </>\r\n )\r\n}\r\n\r\n\r\n\r\n// thisBookingBilling.id = (int)dr[\"BookingID\"];\r\n// thisBookingBilling.status = (dr[\"Status\"]).ToString();\r\n// thisBookingBilling.paymentType = dr[\"PaymentType\"] == null ? \"\" : (dr[\"PaymentType\"]).ToString();\r\n// thisBookingBilling.psychologistDate = DateTime.Parse((dr[\"PsychologistBookingDate\"]).ToString());\r\n// thisBookingBilling.referringGPName = dr[\"GPName\"].ToString();\r\n// thisBookingBilling.referringGPProvderNo = dr[\"ProviderNumber\"].ToString();\r\n// thisBookingBilling.referredOn = dr[\"ReferredOn\"].ToString();\r\n","import React, { useState, useEffect } from \"react\"; \r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { FormElement, FieldWrapper, Field } from '@progress/kendo-react-form';\r\nimport { Label, Error } from '@progress/kendo-react-labels';\r\nimport { TextArea } from '@progress/kendo-react-inputs';\r\nimport { DateTimePicker } from '@progress/kendo-react-dateinputs';\r\nimport { SchedulerFormEditor } from \"@progress/kendo-react-scheduler\";\r\nimport { TitleEditor, TitleLabel, CustomEndEditor, StartTimezoneCheckedLabel, StartTimezoneCheckedEditor, DescriptionLabel, DescriptionEditor, ClientEditor, StatusEditor, BookingTypeEditor, EventTypeEditor, PaymentTypeEditor } from './editors';\r\nimport { TextField, MenuItem, Grid, Select } from '@material-ui/core';\r\nimport { Button, Modal, Form, Row, Col, Tabs, Tab } from \"react-bootstrap\";\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport * as Admin from \"../../store/ducks/admin.duck\";\r\nimport PlacesAutoComplete from \"../AddressAutoComplete\";\r\nimport { format } from \"date-fns\";\r\nimport Notes from \"../Notes\";\r\nimport Files from \"../Files\";\r\nimport BookingBillingList from \"../BookingBillingList\";\r\n\r\nexport const CustomFormEditor = props => {\r\n \r\n const dispatch = useDispatch();\r\n const registered = useSelector(state => state.admin.RegisteredPsychologists[0]);\r\n const medicalPractitioners = useSelector(state => state.admin.MedicalPractitioners);\r\n const medicalPractices = useSelector(state => state.admin.MedicalPractices.GeneralPractitioner);\r\n const timeZone = useSelector(state => state.reference.TimeZone);\r\n const areasOfInterest = useSelector(state => state.reference.AreasOfInterest);\r\n const client = useSelector(state => state.admin.Client);\r\n const role = useSelector(state => state.auth.roleDesc)\r\n \r\n useEffect( () => { props.valueGetter('clientID') && dispatch(Admin.actions.fetchClient( { clientID: props.valueGetter('clientID'), type: props.valueGetter('clienttype') } )) }, [dispatch, props] )\r\n \r\n var [currentClientID, setcurrentClientID] = useState(); \r\n var [currentMedicalPractitionerID, setcurrentMedicalPractitionerID] = useState();\r\n var [currentPaymentType, setcurrentPaymentType] = useState();\r\n var [currentTimeZone, setcurrentTimeZone] = useState();\r\n var [currentfulladdress, setcurrentfulladdress] = useState();\r\n var [currentLatitude, setcurrentLatitude] = useState();\r\n var [currentLongitude, setcurrentLongitude] = useState();\r\n var [currentID, setcurrentID] = useState();\r\n var [currentPostCode, setcurrentPostCode] = useState();\r\n var [currentStatus, setcurrentStatus] = useState(); \r\n var [currentFirstName, setcurrentFirstName] = useState();\r\n var [currentSurname, setcurrentSurname] = useState();\r\n var [currentDOB, setcurrentDOB] = useState();\r\n var [currentEmail, setcurrentEmail] = useState();\r\n var [currentGender, setcurrentGender] = useState();\r\n var [currentOccupation, setcurrentOccupation] = useState();\r\n var [currentMobile, setcurrentMobile] = useState();\r\n var [currentNote, setcurrentNote] = useState();\r\n var [currenthopeToGetFromTreatment, setcurrenthopeToGetFromTreatment] = useState();\r\n var [currentEmergencyContactName1, setcurrentEmergencyContactName1] = useState();\r\n var [currentEmergencyContactPhone1, setcurrentEmergencyContactPhone1] = useState();\r\n var [currentEmergencyContactRelation1, setcurrentEmergencyContactRelation1] = useState();\r\n var [currentEmergencyContactName2, setcurrentEmergencyContactName2] = useState();\r\n var [currentEmergencyContactPhone2, setcurrentEmergencyContactPhone2] = useState();\r\n var [currentEmergencyContactRelation2, setcurrentEmergencyContactRelation2] = useState();\r\n var [currentAreasOfInterest, setcurrentAreasOfInterest] = useState();\r\n var [currentmedicareno, setcurrentmedicareno] = useState();\r\n var [currentmedicarereferenceno, setcurrentmedicarereferenceno] = useState();\r\n var [currentmedicareexpirydate, setcurrentmedicareexpirydate] = useState();\r\n var [nextBookingDate, setnextBookingDate] = useState();\r\n var [currentAppointmentType, setcurrentAppointmentType] = useState('0');\r\n const [currentReferringGPName,setcurrentReferringGPName] = useState();\r\n const [currentReferringGPProviderNo,setcurrentReferringGPProviderNo] = useState();\r\n const [currentReferredGPOn,setcurrentReferredGPOn] = useState();\r\n\r\n var [show, setShow] = useState(false);\r\n var [showNotes, setShowNotes] = useState(false);\r\n var [showFiles, setShowFiles] = useState(false);\r\n var [showBookingBilling, setShowBookingBilling] = useState(false);\r\n const [showCancelProviderBooking,setShowCancelProviderBooking] = useState(false);\r\n const [cancellationReason,setCancellationReason] = useState()\r\n const [showCancellationReason,setShowCancellationReason] = useState('')\r\n const [booking, setBooking] = useState(false)\r\n\r\n var [noteAction, setNoteAction] = useState('SMS')\r\n var [key, setKey] = React.useState('personalDetails');\r\n \r\n const initMedicalPractitioner = () => {\r\n return { id: 0, providernumber: '', salutation: 'Dr', firstName: '', surname: '', fullname: '', mobilephone: '', phone: '', type: 'Client GP', }\r\n }\r\n\r\n const initMedicalPractice = () => {\r\n return { id: 0, abn: '', practicename: '', phone: '', address1: '', email: '', website: '', logoURL: '', practiceType: 'GeneralPractitioner' }\r\n }\r\n\r\n const loadMedicalPractitioner = (thisMedicalPractitioner) =>{\r\n setcurrentMedicalPractitioner(thisMedicalPractitioner ? thisMedicalPractitioner : initMedicalPractitioner())\r\n setcurrentMedicalPractitionerID(thisMedicalPractitioner ? thisMedicalPractitioner.id : 0);\r\n var tempMedicalPractice = thisMedicalPractitioner ? medicalPractices.find(v => v.id === thisMedicalPractitioner.medicalPracticeID) : null;\r\n loadMedicalPractitice(tempMedicalPractice)\r\n }\r\n\r\n const loadMedicalPractitice = (thisMedicalPractice) => {\r\n setcurrentMedicalPractice(thisMedicalPractice ? thisMedicalPractice : initMedicalPractice())\r\n }\r\n\r\n function handleAppointmentTypeChange(value) {\r\n setcurrentAppointmentType(value);\r\n }\r\n\r\n\r\n var [currentMedicalPractitioner, setcurrentMedicalPractitioner] = useState(initMedicalPractitioner()); \r\n var [currentMedicalPractice, setcurrentMedicalPractice] = useState(initMedicalPractice());\r\n\r\n const getMedicalPractitionerOption = (option, value) => {\r\n if (option.id === value.id) {\r\n return option\r\n } else {\r\n return initMedicalPractitioner();\r\n }\r\n }\r\n\r\n const getMedicalPracticeOption = (option, value) => {\r\n if (option.id === value.id) {\r\n return option\r\n } else {\r\n return initMedicalPractice();\r\n }\r\n }\r\n \r\n function handleTimeZoneAutocompleteChange(propertyName, event, newValue) { \r\n if (newValue) {\r\n setcurrentTimeZone(newValue.systemName);\r\n }\r\n } \r\n\r\n function cancelBooking(id) {\r\n // Need to handle no show which is triggered if it is save by a provider and reason is not selected - it is like the multiverse \r\n if (!showCancellationReason || (showCancellationReason && showCancellationReason === 'N')) \r\n {\r\n // Update database \r\n dispatch(Admin.actions.putAppointment( \r\n { id: id, \r\n status: 'NoShow', \r\n refreshPayload: { key: 'psychologist', id: registered.id } \r\n }));\r\n // Update local display \r\n setBooking({...booking, status: 'NoShow'});\r\n }\r\n else\r\n {\r\n // Update database \r\n dispatch(Admin.actions.putAppointment( \r\n { id: id, \r\n status: 'Cancelled', \r\n refreshPayload: { key: 'psychologist', id: registered.id } \r\n }));\r\n // Update local display \r\n setBooking({...booking, status: 'Cancelled'});\r\n }\r\n // Save note if a cancellation reason was set - it can be set in provider cancellations \r\n if (showCancellationReason && showCancellationReason === 'Y')\r\n {\r\n // ok we have a note to save \r\n const formData = new FormData();\r\n // Create note \r\n var newishNote = `Please note your consultation with ${booking.psychologistfullname} at ${format(new Date(booking.psychologistDate ? booking.psychologistDate: null), \"dd-MM-yyyy hh:mm aa\")}. was cancelled by the provider due to ${cancellationReason}`;\r\n // Add fields \r\n formData.append('type','Client');\r\n formData.append('pkid', booking.clientID);\r\n formData.append('subject','');\r\n formData.append('selector','Note');\r\n formData.append('note',newishNote);\r\n formData.append('faxdestination','');\r\n formData.append('faxFile','');\r\n formData.append('sendFormID',0);\r\n // Ok Time to Dispatch \r\n process.env.REACT_APP_DEBUG && console.log(...formData);\r\n dispatch(Admin.actions.postNote({ formData:formData, type: 'Client', pkID: booking.clientID}));\r\n }\r\n else\r\n {\r\n\r\n }\r\n // Close provider booking cancel modal - if open\r\n setShowCancelProviderBooking(false)\r\n }\r\n\r\n\r\n function putClient() {\r\n var payload = {\r\n profileClientID: currentClientID,\r\n profileFirstName: currentFirstName,\r\n profileSurname: currentSurname,\r\n profileDOB: currentDOB,\r\n profileEmail: currentEmail,\r\n profileGender: currentGender,\r\n profileOccupation: currentOccupation,\r\n profileMobile: currentMobile,\r\n profilefulladdress: currentfulladdress,\r\n profileStatus: currentStatus,\r\n profileNote: currentNote,\r\n profilehopeToGetFromTreatment: currenthopeToGetFromTreatment,\r\n profileMedicalPractitionerID: currentMedicalPractitionerID,\r\n profilePaymentType: currentPaymentType,\r\n profileTimeZone: currentTimeZone,\r\n profileLatitude: currentLatitude, \r\n profileLongitude: currentLongitude,\r\n profilePostCode: currentPostCode,\r\n emergencycontactname1: currentEmergencyContactName1,\r\n emergencycontactphone1: currentEmergencyContactPhone1,\r\n emergencycontactrelation1: currentEmergencyContactRelation1,\r\n emergencycontactname2: currentEmergencyContactName2,\r\n emergencycontactphone2: currentEmergencyContactPhone2,\r\n emergencycontactrelation2: currentEmergencyContactRelation2,\r\n profilemedicareno: currentmedicareno,\r\n profilemedicarereferenceno: currentmedicarereferenceno,\r\n profilemedicareexpirydate: currentmedicareexpirydate, \r\n profileAreasOfInterest: currentAreasOfInterest.map(aoi => aoi.issue).join(\",\"), \r\n medicalPractice: currentMedicalPractice,\r\n medicalPractitioner: currentMedicalPractitioner, \r\n appointmenttype: currentAppointmentType, \r\n status: currentStatus, \r\n }\r\n //\r\n if (process.env.REACT_APP_DEBUG) {\r\n // Output form\r\n // console.log(payload);\r\n }\r\n //\r\n // console.log(payload);\r\n // Check if there is an update or insert \r\n if (currentClientID > 0)\r\n {\r\n if (process.env.REACT_APP_DEBUG) \r\n {\r\n console.log ('Putting (Update)');\r\n } \r\n // Save update \r\n dispatch(Admin.actions.putClientDetail(payload));\r\n }\r\n // Close form\r\n setShow(false);\r\n }\r\n\r\n const loadProfile = (thisClient) => {\r\n setcurrentClientID(thisClient.id);\r\n setcurrentID(thisClient.id);\r\n setcurrentMedicalPractitionerID(thisClient.medicalPractitionerID);\r\n setcurrentPaymentType(thisClient.paymentType);\r\n setcurrentfulladdress(thisClient.fulladdress);\r\n setcurrentStatus(thisClient.status);\r\n setcurrentLatitude(thisClient.latitude);\r\n setcurrentLongitude(thisClient.longitude);\r\n setcurrentFirstName(thisClient.firstname);\r\n setcurrentSurname(thisClient.surname);\r\n setcurrentDOB(thisClient.dob);\r\n setcurrentEmail(thisClient.email);\r\n setcurrentGender(thisClient.gender);\r\n setcurrentOccupation(thisClient.occupation);\r\n setcurrentMobile(thisClient.mobilephone);\r\n setcurrentNote(thisClient.note);\r\n setcurrentTimeZone(thisClient.timeZone);\r\n setcurrentPostCode(thisClient.postCode);\r\n setcurrenthopeToGetFromTreatment(thisClient.hopeToGetFromTreatment);\r\n setcurrentEmergencyContactName1(thisClient.emergencycontactname1);\r\n setcurrentEmergencyContactPhone1(thisClient.emergencycontactphone1);\r\n setcurrentEmergencyContactRelation1(thisClient.emergencycontactrelation1);\r\n setcurrentEmergencyContactName2(thisClient.emergencycontactname2);\r\n setcurrentEmergencyContactPhone2(thisClient.emergencycontactphone2);\r\n setcurrentEmergencyContactRelation2(thisClient.emergencycontactrelation2);\r\n setcurrentmedicareno(thisClient.medicareno);\r\n setcurrentmedicarereferenceno(thisClient.medicarereferenceno);\r\n setcurrentmedicareexpirydate(thisClient.medicareexpirydate);\r\n setcurrentAppointmentType(thisClient.appointmenttype);\r\n setcurrentStatus(thisClient.status);\r\n setcurrentReferringGPName(thisClient.referringGPName)\r\n setcurrentReferringGPProviderNo(thisClient.referringGPProviderNo)\r\n setcurrentReferredGPOn(thisClient.referredGPOn)\r\n\r\n\r\n var aoi = areasOfInterest.filter(( {issue} ) => thisClient.clientAreasOfInterest.includes(issue))\r\n setcurrentAreasOfInterest(aoi);\r\n\r\n loadMedicalPractitioner(medicalPractitioners.find(v => v.id === thisClient.medicalPractitionerID));\r\n // Load Form\r\n setShow(true);\r\n }\r\n\r\n function loadBooking(props)\r\n {\r\n var bookingData = {\r\n 'id' : props.valueGetter('id'),\r\n 'clientfullname' : client.fullname,\r\n 'psychologistfullname' : registered.fullname,\r\n 'psychologistDate' : props.valueGetter('start'),\r\n 'clientID' : client.id,\r\n 'paymentType' : props.valueGetter('paymentType'),\r\n 'bookingType' : props.valueGetter('bookingType')\r\n\r\n }\r\n setBooking(bookingData)\r\n // console.log(bookingData)\r\n // Open Provider Cancel Modal\r\n setShowCancelProviderBooking(true);\r\n }\r\n\r\n\r\n function loadFiles(thisClient) {\r\n setcurrentClientID(thisClient.id);\r\n setcurrentFirstName(thisClient.firstname);\r\n setcurrentSurname(thisClient.surname);\r\n setShowFiles(true);\r\n }\r\n\r\n function loadNotes(thisClient, noteAction) {\r\n setNoteAction(noteAction);\r\n setcurrentClientID(thisClient.id);\r\n setcurrentID(thisClient.id);\r\n setcurrentFirstName(thisClient.firstname);\r\n setcurrentSurname(thisClient.surname);\r\n setnextBookingDate(thisClient.nextBooking)\r\n loadMedicalPractitioner(medicalPractitioners.find(v => v.id === thisClient.medicalPractitionerID));\r\n setShowNotes(true);\r\n }\r\n\r\n function loadBookingBilling(thisClient, noteAction) {\r\n setcurrentClientID(thisClient.id);\r\n setcurrentID(thisClient.id);\r\n setcurrentFirstName(thisClient.firstname);\r\n setcurrentSurname(thisClient.surname);\r\n setcurrentDOB(thisClient.dob);\r\n setcurrentEmail(thisClient.email);\r\n setcurrentMobile(thisClient.mobilephone);\r\n setcurrentmedicareno(thisClient.medicareno);\r\n setcurrentmedicarereferenceno(thisClient.medicarereferenceno);\r\n setcurrentmedicareexpirydate(thisClient.medicareexpirydate);\r\n setcurrentReferringGPName(thisClient.referringGPName)\r\n setcurrentReferringGPProviderNo(thisClient.referringGPProviderNo)\r\n setcurrentReferredGPOn(thisClient.referredGPOn)\r\n setShowBookingBilling(true);\r\n }\r\n\r\n // Availability uses the default form editor because it contains the RR controls\r\n if(props.valueGetter('eventType') === 'availability')\r\n {\r\n return (\r\n <SchedulerFormEditor \r\n {...props}\r\n titleLabel={TitleLabel}\r\n titleEditor={TitleEditor}\r\n endEditor={!props.valueGetter('id') ? CustomEndEditor : DateTimePicker}\r\n startTimezoneCheckedLabel={StartTimezoneCheckedLabel}\r\n startTimezoneCheckedEditor={StartTimezoneCheckedEditor}\r\n descriptionLabel={DescriptionLabel}\r\n descriptionEditor={DescriptionEditor}\r\n horizontal={true}\r\n >\r\n </SchedulerFormEditor>\r\n );\r\n }\r\n if(props.valueGetter('eventType') === 'availabilityAny')\r\n {\r\n return (\r\n <SchedulerFormEditor \r\n {...props}\r\n titleLabel={TitleLabel}\r\n titleEditor={TitleEditor}\r\n endEditor={!props.valueGetter('id') ? CustomEndEditor : DateTimePicker}\r\n startTimezoneCheckedLabel={StartTimezoneCheckedLabel}\r\n startTimezoneCheckedEditor={StartTimezoneCheckedEditor}\r\n descriptionLabel={DescriptionLabel}\r\n descriptionEditor={DescriptionEditor}\r\n horizontal={true}\r\n >\r\n </SchedulerFormEditor>\r\n );\r\n }\r\n\r\n if(props.valueGetter('eventType') === 'availabilityExisting')\r\n {\r\n return (\r\n <SchedulerFormEditor \r\n {...props}\r\n titleLabel={TitleLabel}\r\n titleEditor={TitleEditor}\r\n endEditor={!props.valueGetter('id') ? CustomEndEditor : DateTimePicker}\r\n startTimezoneCheckedLabel={StartTimezoneCheckedLabel}\r\n startTimezoneCheckedEditor={StartTimezoneCheckedEditor}\r\n descriptionLabel={DescriptionLabel}\r\n descriptionEditor={DescriptionEditor}\r\n horizontal={true}\r\n >\r\n </SchedulerFormEditor>\r\n );\r\n }\r\n\r\n if(props.valueGetter('eventType') === 'availabilityOther')\r\n {\r\n return (\r\n <SchedulerFormEditor \r\n {...props}\r\n titleLabel={TitleLabel}\r\n titleEditor={TitleEditor}\r\n endEditor={!props.valueGetter('id') ? CustomEndEditor : DateTimePicker}\r\n startTimezoneCheckedLabel={StartTimezoneCheckedLabel}\r\n startTimezoneCheckedEditor={StartTimezoneCheckedEditor}\r\n descriptionLabel={DescriptionLabel}\r\n descriptionEditor={DescriptionEditor}\r\n horizontal={true}\r\n >\r\n </SchedulerFormEditor>\r\n );\r\n }\r\n\r\n if(props.valueGetter('eventType') === 'availabilitySupervision')\r\n {\r\n return (\r\n <SchedulerFormEditor \r\n {...props}\r\n titleLabel={TitleLabel}\r\n titleEditor={TitleEditor}\r\n endEditor={!props.valueGetter('id') ? CustomEndEditor : DateTimePicker}\r\n startTimezoneCheckedLabel={StartTimezoneCheckedLabel}\r\n startTimezoneCheckedEditor={StartTimezoneCheckedEditor}\r\n descriptionLabel={DescriptionLabel}\r\n descriptionEditor={DescriptionEditor}\r\n horizontal={true}\r\n >\r\n </SchedulerFormEditor>\r\n );\r\n }\r\n\r\n if(props.valueGetter('eventType') === 'availabilityNDISContractEAP')\r\n {\r\n return (\r\n <SchedulerFormEditor \r\n {...props}\r\n titleLabel={TitleLabel}\r\n titleEditor={TitleEditor}\r\n endEditor={!props.valueGetter('id') ? CustomEndEditor : DateTimePicker}\r\n startTimezoneCheckedLabel={StartTimezoneCheckedLabel}\r\n startTimezoneCheckedEditor={StartTimezoneCheckedEditor}\r\n descriptionLabel={DescriptionLabel}\r\n descriptionEditor={DescriptionEditor}\r\n horizontal={true}\r\n >\r\n </SchedulerFormEditor>\r\n );\r\n }\r\n\r\n if(props.valueGetter('eventType') === 'availabilityNDISContractEAPNew')\r\n {\r\n return (\r\n <SchedulerFormEditor \r\n {...props}\r\n titleLabel={TitleLabel}\r\n titleEditor={TitleEditor}\r\n endEditor={!props.valueGetter('id') ? CustomEndEditor : DateTimePicker}\r\n startTimezoneCheckedLabel={StartTimezoneCheckedLabel}\r\n startTimezoneCheckedEditor={StartTimezoneCheckedEditor}\r\n descriptionLabel={DescriptionLabel}\r\n descriptionEditor={DescriptionEditor}\r\n horizontal={true}\r\n >\r\n </SchedulerFormEditor>\r\n );\r\n }\r\n\r\n if(props.valueGetter('eventType') === 'availabilityNDISContractEAPExisting')\r\n {\r\n return (\r\n <SchedulerFormEditor \r\n {...props}\r\n titleLabel={TitleLabel}\r\n titleEditor={TitleEditor}\r\n endEditor={!props.valueGetter('id') ? CustomEndEditor : DateTimePicker}\r\n startTimezoneCheckedLabel={StartTimezoneCheckedLabel}\r\n startTimezoneCheckedEditor={StartTimezoneCheckedEditor}\r\n descriptionLabel={DescriptionLabel}\r\n descriptionEditor={DescriptionEditor}\r\n horizontal={true}\r\n >\r\n </SchedulerFormEditor>\r\n );\r\n }\r\n\r\n if(props.valueGetter('eventType') === 'availabilityPerinatalGriefLoss')\r\n {\r\n return (\r\n <SchedulerFormEditor \r\n {...props}\r\n titleLabel={TitleLabel}\r\n titleEditor={TitleEditor}\r\n endEditor={!props.valueGetter('id') ? CustomEndEditor : DateTimePicker}\r\n startTimezoneCheckedLabel={StartTimezoneCheckedLabel}\r\n startTimezoneCheckedEditor={StartTimezoneCheckedEditor}\r\n descriptionLabel={DescriptionLabel}\r\n descriptionEditor={DescriptionEditor}\r\n horizontal={true}\r\n >\r\n </SchedulerFormEditor>\r\n );\r\n }\r\n\r\n if(props.valueGetter('eventType') === 'availabilityNthQLDPHNNew')\r\n {\r\n return (\r\n <SchedulerFormEditor \r\n {...props}\r\n titleLabel={TitleLabel}\r\n titleEditor={TitleEditor}\r\n endEditor={!props.valueGetter('id') ? CustomEndEditor : DateTimePicker}\r\n startTimezoneCheckedLabel={StartTimezoneCheckedLabel}\r\n startTimezoneCheckedEditor={StartTimezoneCheckedEditor}\r\n descriptionLabel={DescriptionLabel}\r\n descriptionEditor={DescriptionEditor}\r\n horizontal={true}\r\n >\r\n </SchedulerFormEditor>\r\n );\r\n }\r\n\r\n if(props.valueGetter('eventType') === 'availabilityNthQLDPHNExisting')\r\n {\r\n return (\r\n <SchedulerFormEditor \r\n {...props}\r\n titleLabel={TitleLabel}\r\n titleEditor={TitleEditor}\r\n endEditor={!props.valueGetter('id') ? CustomEndEditor : DateTimePicker}\r\n startTimezoneCheckedLabel={StartTimezoneCheckedLabel}\r\n startTimezoneCheckedEditor={StartTimezoneCheckedEditor}\r\n descriptionLabel={DescriptionLabel}\r\n descriptionEditor={DescriptionEditor}\r\n horizontal={true}\r\n >\r\n </SchedulerFormEditor>\r\n );\r\n }\r\n\r\n if(props.valueGetter('eventType') === 'availabilityNthQLDPHNFacetoFace')\r\n {\r\n return (\r\n <SchedulerFormEditor \r\n {...props}\r\n titleLabel={TitleLabel}\r\n titleEditor={TitleEditor}\r\n endEditor={!props.valueGetter('id') ? CustomEndEditor : DateTimePicker}\r\n startTimezoneCheckedLabel={StartTimezoneCheckedLabel}\r\n startTimezoneCheckedEditor={StartTimezoneCheckedEditor}\r\n descriptionLabel={DescriptionLabel}\r\n descriptionEditor={DescriptionEditor}\r\n horizontal={true}\r\n >\r\n </SchedulerFormEditor>\r\n );\r\n }\r\n\r\n // Bookings use completely custom form for all client related features\r\n else if(props.valueGetter('eventType') === undefined || props.valueGetter('eventType') === 'booking')\r\n {\r\n return (\r\n <FormElement horizontal={true} style={{ height: 460 }}>\r\n {!props.valueGetter('id') &&\r\n <FieldWrapper style={{ display: 'flex' }}> \r\n <Label>\r\n Type\r\n </Label>\r\n <div className={\"k-form-field-wrap\"} style={{ width: 120 }}>\r\n <Field \r\n label=\"Type\" \r\n name={'eventType'} \r\n component={EventTypeEditor} \r\n eapcontractndis={(registered && registered.eapContractNDISAvailability === 'Y') || (role === 'Admin') ? true : false} \r\n nthqldphn={(registered && registered.specialisttype === 'nthqldphn') || (role === 'Admin') ? true : false}\r\n admin={ role === 'Admin' ? true : false}\r\n />\r\n {props.visited && props.errors.eventType && <Error>{props.errors.eventType}</Error>}\r\n </div>\r\n </FieldWrapper>\r\n }\r\n <FieldWrapper style={{ display: 'flex' }}>\r\n <Label>\r\n Start\r\n </Label>\r\n <div className=\"k-form-field-wrap\">\r\n <Field name={'start'} component={props.startEditor || DateTimePicker} as={DateTimePicker} rows={1} width={'200px'} format=\"dd/MM/yyyy hh:mm a\" />\r\n </div>\r\n </FieldWrapper>\r\n <FieldWrapper style={{ display: 'flex' }}>\r\n <Label>\r\n End\r\n </Label>\r\n <div className=\"k-form-field-wrap\">\r\n <Field name={'end'} component={!props.valueGetter('id') ? CustomEndEditor : DateTimePicker} as={DateTimePicker} eventType={props.valueGetter('eventType')} rows={1} width={'200px'} format=\"dd/MM/yyyy hh:mm a\" />\r\n </div>\r\n </FieldWrapper>\r\n <FieldWrapper style={{ display: 'flex' }}>\r\n <Label>\r\n Client\r\n </Label>\r\n <div className=\"k-form-field-wrap\">\r\n <Field name={'clientID'} component={ClientEditor} disabled={props.valueGetter('id')} />\r\n {props.visited && props.errors.clientID && <Error>{props.errors.clientID}</Error>}\r\n </div>\r\n </FieldWrapper>\r\n {props.valueGetter('id') && \r\n <FieldWrapper style={{ display: 'flex' }}>\r\n <Label>\r\n Booking Type\r\n </Label>\r\n <div className=\"k-form-field-wrap\">\r\n <Field name={'bookingType'} component={BookingTypeEditor} client={client} />\r\n {props.visited && props.errors.bookingType && <Error>{props.errors.bookingType}</Error>}\r\n </div>\r\n </FieldWrapper>\r\n }\r\n {props.valueGetter('id') && \r\n <FieldWrapper style={{ display: 'flex' }}>\r\n <Label>\r\n Payment\r\n </Label>\r\n <div className=\"k-form-field-wrap\">\r\n <Field name={'paymentType'} component={PaymentTypeEditor} client={client} />\r\n {props.visited && props.errors.paymentType && <Error>{props.errors.paymentType}</Error>}\r\n </div>\r\n </FieldWrapper>\r\n }\r\n {/* {client && (client.paymentType === 'NDIS') ?\r\n <>\r\n <FieldWrapper style={{ display: 'flex' }}>\r\n <Label>\r\n\r\n </Label>\r\n <div className=\"k-form-field-wrap\">\r\n <strong>\r\n <p>If this was a NDIS standard session for this client please <br /> invoice <i>accounts@ruralhealthconnect.com.au</i> the <br /> amount {client.ndisproviderfee} for this session. If not, note any changes below.</p>\r\n </strong>\r\n </div>\r\n </FieldWrapper>\r\n </>\r\n :\r\n null\r\n } */}\r\n {/* {console.log(client && client)} */}\r\n <FieldWrapper style={{ display: 'flex' }}>\r\n <Label>\r\n Note\r\n </Label>\r\n <div className=\"k-form-field-wrap\">\r\n <Field name={'note'} component={TextArea} rows={2} />\r\n </div>\r\n </FieldWrapper>\r\n <FieldWrapper style={{ display: 'flex' }}>\r\n <Label>\r\n Type\r\n </Label>\r\n <div className=\"k-form-field-wrap\" style={{ maxWidth: 120 }}>\r\n <Field name={'bookingType'} component={BookingTypeEditor}/>\r\n </div>\r\n </FieldWrapper>\r\n <FieldWrapper style={{ display: 'flex' }}>\r\n <Label>\r\n Status\r\n </Label>\r\n <div className=\"k-form-field-wrap\" style={{ maxWidth: 120 }}>\r\n <Field name={'status'} component={StatusEditor}/>\r\n </div>\r\n { props.valueGetter('status') === 'Active' && props.valueGetter('clientID') > 0 && client.id > 0 && props.valueGetter('id') > 0?\r\n <div className=\"k-form-field-wrap\" style={{ maxWidth: 220 }}>\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: '1px solid rgb(192 192 192)', background: \"#faa0a0\", marginLeft: 30, marginRight: 10 }} onClick={() => loadBooking(props)}>\r\n Cancel Booking\r\n </Button>\r\n </div>\r\n :\r\n null\r\n }\r\n </FieldWrapper>\r\n {props.valueGetter('clientID') > 0 && client.id > 0 && role !== 'Admin' ?\r\n <FieldWrapper style={{ display: 'flex' }}>\r\n <Label>\r\n Actions\r\n </Label> \r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: '1px solid rgb(192 192 192)', background: \"#b2b6eb\", marginRight: 10 }} onClick={() => loadProfile(client)}>\r\n Profile \r\n </Button>\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: '1px solid rgb(192 192 192)', background: \"#faefcf\", marginRight: 10 }} onClick={() => loadNotes(client, 'SMS')}>\r\n SMS \r\n </Button>\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: '1px solid rgb(192 192 192)', background: \"#d2f9fa\", marginRight: 10 }} onClick={() => loadNotes(client, 'Email')}>\r\n Email \r\n </Button>\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: '1px solid rgb(192 192 192)', background: \"#ebfae8\", marginRight: 10 }} onClick={() => loadFiles(client)}>\r\n Files \r\n </Button>\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: '1px solid rgb(192 192 192)', background: \"#fff0ed\", marginRight: 10 }} onClick={() => loadNotes(client, 'Fax')}>\r\n Fax \r\n </Button>\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: '1px solid rgb(192 192 192)', background: \"#fffbc2\", marginRight: 10 }} onClick={() => loadNotes(client, 'Form')}>\r\n Forms \r\n </Button>\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: '1px solid rgb(192 192 192)', background: \"#FF9636\", marginRight: 10 }} onClick={() => loadBookingBilling(client)}>\r\n Billing \r\n </Button>\r\n </FieldWrapper>\r\n : \r\n <FieldWrapper style={{ display: 'flex' }}>\r\n </FieldWrapper>\r\n }\r\n \r\n <Modal show={showNotes} onHide={()=>setShowNotes(false)} dialogClassName=\"notes-modal-dialog\" style={{zIndex:1150}}>\r\n <Modal.Header closeButton className=\"notes-modal\">\r\n <Modal.Title>Notes - {currentFirstName} {currentSurname}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"notes-modal\">\r\n {registered ? \r\n <Notes type=\"Client\" noteAction={noteAction} pkid={currentClientID} medicalPractice={currentMedicalPractice} waitingRoomURL={registered && registered.waitingRoomURL} nextBookingDate={nextBookingDate} psychologistFullName={registered.firstname + ' ' + registered.surname} clientFirstName={currentFirstName} />\r\n : null} \r\n </Modal.Body>\r\n <Modal.Footer className=\"notes-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowNotes(false)}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showFiles} onHide={()=>setShowFiles(false)} dialogClassName=\"notes-modal-dialog\" style={{zIndex:1150}}>\r\n <Modal.Header closeButton className=\"notes-modal\">\r\n <Modal.Title>Files - {currentFirstName} {currentSurname}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"notes-modal\">\r\n {registered ? \r\n <Files type=\"Client\" pkid={currentClientID} />\r\n : null} \r\n </Modal.Body>\r\n <Modal.Footer className=\"notes-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowFiles(false)}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showBookingBilling} onHide={()=>setShowBookingBilling(false)} dialogClassName=\"notes-modal-dialog\" style={{zIndex:1150}}>\r\n <Modal.Header closeButton className=\"notes-modal\">\r\n <Modal.Title>Billing - {currentFirstName} {currentSurname}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"notes-modal\">\r\n {registered ? \r\n <BookingBillingList\r\n id={currentClientID}\r\n clientFirstName={currentFirstName}\r\n clientSurname={currentSurname}\r\n clientDOB={currentDOB}\r\n clientEmail={currentEmail}\r\n clientMobile={currentMobile}\r\n clientMedicareNo={currentmedicareno}\r\n clientMedicareReferenceNo={currentmedicarereferenceno}\r\n clientMedicareExpiryDate={currentmedicareexpirydate}\r\n clientreferringGPName={currentReferringGPName}\r\n clientreferringGPProviderNo={currentReferringGPProviderNo}\r\n clientreferredOn={currentReferredGPOn}\r\n />\r\n : null} \r\n </Modal.Body>\r\n <Modal.Footer className=\"notes-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowBookingBilling(false)}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n\r\n <Modal show={show} onHide={()=>setShow(false)} dialogClassName=\"editprofile-modal\" style={{zIndex:1150}}>\r\n <Modal.Header closeButton className=\"editprofile-modal\">\r\n <Modal.Title>Edit Profile - {currentFirstName} {currentSurname}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"editprofile-modal\">\r\n <Form onSubmit={putClient}>\r\n <Tabs\r\n id=\"EditModal\"\r\n activeKey={key}\r\n onSelect={(k) => setKey(k)}\r\n >\r\n <Tab eventKey=\"personalDetails\" title=\"Personal\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>First Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileFirstName\" defaultValue={currentFirstName} onBlur={(event) => setcurrentFirstName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Surname</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileSurname\" defaultValue={currentSurname} onBlur={(event) => setcurrentSurname(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Gender</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentGender} onBlur={(event) => setcurrentGender(event.target.value)}>\r\n <option value=\"Male\">Male</option>\r\n <option value=\"Female\">Female</option>\r\n <option value=\"Other\">Other</option>\r\n <option value=\"Prefer not to say\">Prefer not to say</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Date of Birth</Form.Label>\r\n <Form.Control type=\"date\" name=\"profileDOB\" defaultValue={currentDOB} onBlur={(event) => setcurrentDOB(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Email</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileEmail\" defaultValue={currentEmail} onBlur={(event) => setcurrentEmail(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Contact Phone Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileMobile\" defaultValue={currentMobile} onBlur={(event) => setcurrentMobile(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label>TimeZone</Form.Label>\r\n <Autocomplete\r\n id=\"profileTimeZone\"\r\n variant=\"outlined\"\r\n options={timeZone}\r\n getOptionLabel={(option) => option.name}\r\n value={timeZone.find(v => v.systemName === currentTimeZone) || ''}\r\n onChange={(event, newValue) => handleTimeZoneAutocompleteChange('profileTimeZone', event, newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"TimeZoneSelector\"\r\n style={{backgroundColor: \"white\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n \r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label>Home Address</Form.Label>\r\n <PlacesAutoComplete \r\n currentID={currentID}\r\n currentfulladdress={currentfulladdress}\r\n setcurrentfulladdress = {setcurrentfulladdress}\r\n setcurrentLatitude = {setcurrentLatitude} \r\n setcurrentLongitude = {setcurrentLongitude}\r\n setcurrentPostCode = {setcurrentPostCode}\r\n />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Occupation</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileOccupation\" defaultValue={currentOccupation} onBlur={(event) => setcurrentOccupation(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label>Funding Type</Form.Label> \r\n <Form.Control as=\"select\" defaultValue={currentPaymentType} onBlur={(event) => setcurrentPaymentType(event.target.value)}>\r\n <option value=\"Bulk Billed\">Bulk Billed</option>\r\n <option value=\"Reduced Gap\">Reduced Gap</option>\r\n <option value=\"Full Fee\">Full Fee</option>\r\n <option value=\"NDIS\">NDIS</option>\r\n <option value=\"Contract\" disabled>Contract</option>\r\n <option value=\"EAP\" disabled>EAP</option>\r\n <option value=\"Provisional\" disabled>Provisional</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {/* Note this field doesn't current exist */}\r\n {/* <Row>\r\n <Col md=\"10\">\r\n <Form.Group controlId=\"addForm.profileNote\">\r\n <Form.Label>Client Note</Form.Label>\r\n <Form.Control as=\"textarea\" rows={10} type=\"text\" name=\"profileNote\" value={addForm.profileNote} onChange={(event) => handleTextFieldChange('profileNote', event)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row> */}\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Areas of Interest (Select all that apply) </Form.Label>\r\n <Autocomplete\r\n id=\"searchAOI\"\r\n variant=\"outlined\"\r\n multiple\r\n options={areasOfInterest}\r\n getOptionLabel={(option) => option.issue }\r\n value={currentAreasOfInterest}\r\n onChange={(event, newValue) => setcurrentAreasOfInterest(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: \"white\", }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"AOISelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>What are you hoping to get out of your sessions?</Form.Label>\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" name=\"profilehopeToGetFromTreatment\" defaultValue={currenthopeToGetFromTreatment} onBlur={(event) => setcurrenthopeToGetFromTreatment(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n </Row>\r\n {/* <Row>\r\n <Col md=\"10\">\r\n <Form.Group controlId=\"currentMedicalPractitioner.address\">\r\n <Form.Label>Address - may need to add this </Form.Label>\r\n <Form.Control type=\"text\" name=\"address\" value={currentMedicalPractitioner ? currentMedicalPractitioner.address : ''} readOnly />\r\n </Form.Group>\r\n </Col>\r\n </Row> */}\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Primary Emergency Contact</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactname1\" defaultValue={currentEmergencyContactName1 || ''} onBlur={(event) => setcurrentEmergencyContactName1(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Relationship</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactrelation1\" defaultValue={currentEmergencyContactRelation1 || ''} onBlur={(event) => setcurrentEmergencyContactRelation1(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactphone1\" defaultValue={currentEmergencyContactPhone1 || ''} onBlur={(event) => setcurrentEmergencyContactPhone1(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Secondary Emergency Contact</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactname2\" defaultValue={currentEmergencyContactName2 || ''} onBlur={(event) => setcurrentEmergencyContactName2(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Relationship</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencyrelation2\" defaultValue={currentEmergencyContactRelation2 || ''} onBlur={(event) => setcurrentEmergencyContactRelation2(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactphone2\" defaultValue={currentEmergencyContactPhone2 || ''} onBlur={(event) => setcurrentEmergencyContactPhone2(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Medicare Card Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"medicareno\" defaultValue={currentmedicareno || ''} onBlur={(event) => setcurrentmedicareno(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Order On Card</Form.Label>\r\n <Form.Control type=\"text\" name=\"medicarereferenceno\" defaultValue={currentmedicarereferenceno || ''} onBlur={(event) => setcurrentmedicarereferenceno(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Medicare Expiry Date</Form.Label>\r\n <Form.Control type=\"text\" name=\"medicareexpirydate\" defaultValue={currentmedicareexpirydate || ''} onBlur={(event) => setcurrentmedicareexpirydate(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Appointment Type</Form.Label>\r\n <Select \r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n id='appointmentType'\r\n aria-label='Select Appointment Type'\r\n name='appointmentType'\r\n value={currentAppointmentType} \r\n onChange={(event) => handleAppointmentTypeChange(event.target.value)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: '#fff' }}>\r\n <MenuItem key='Video' value='0'>Video Call</MenuItem>\r\n <MenuItem key='Phone' value='1'>Phone Call</MenuItem>\r\n </Select>\r\n </Form.Group>\r\n </Col> \r\n </Row>\r\n </Tab>\r\n <Tab eventKey=\"clientGP\" title=\"GP\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}> \r\n \r\n {/* Medical Practitioner */}\r\n <Row>\r\n <Col md=\"4\">\r\n <h4>Client's GP</h4>\r\n </Col>\r\n <Col md=\"2\" style={{ textAlign: \"right\"}}>\r\n <SearchIcon style={{ marginTop: 8, marginRight: -13 }} />\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group style={{ width: \"100%\", marginBottom: 0 }}>\r\n <Autocomplete\r\n id=\"profileMedicalPractitionerID\"\r\n variant=\"outlined\"\r\n options={medicalPractitioners}\r\n getOptionLabel={(option) => option.fullname }\r\n getOptionSelected={(option, value) => getMedicalPractitionerOption(option, value)}\r\n value={currentMedicalPractitioner}\r\n onChange={(event, newValue) => loadMedicalPractitioner(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"MedicalPractitionerSelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group controlId=\"currentMedicalPractitionerFirstName\">\r\n <Form.Label>Firstname</Form.Label>\r\n <Form.Control type=\"text\" name=\"firstName\" value={currentMedicalPractitioner.firstName} onChange={(event) => setcurrentMedicalPractitioner({...currentMedicalPractitioner, firstName: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group controlId=\"currentMedicalPractitionerSurname\">\r\n <Form.Label>Surname</Form.Label>\r\n <Form.Control type=\"text\" name=\"surname\" value={currentMedicalPractitioner.surname} onChange={(event) => setcurrentMedicalPractitioner({...currentMedicalPractitioner, surname: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group controlId=\"currentMedicalPractitionerMobilePhone\">\r\n <Form.Label>Mobile Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"mobilephone\" value={currentMedicalPractitioner.mobilephone} onChange={(event) => setcurrentMedicalPractitioner({...currentMedicalPractitioner, mobilephone: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group controlId=\"currentMedicalPractitionerProviderNo\">\r\n <Form.Label>Provider Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"providernumber\" value={currentMedicalPractitioner.providernumber} onChange={(event) => setcurrentMedicalPractitioner({...currentMedicalPractitioner, providernumber: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n {/* Medical Practice */} \r\n <Row>\r\n <Col md=\"4\">\r\n <h4>Practice</h4>\r\n </Col>\r\n <Col md=\"2\" style={{ textAlign: \"right\"}}>\r\n <SearchIcon style={{ marginTop: 8, marginRight: -13 }} />\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group style={{ width: \"100%\", marginBottom: 0 }}>\r\n <Autocomplete\r\n id=\"profileMedicalPractice\"\r\n variant=\"outlined\"\r\n options={medicalPractices}\r\n getOptionLabel={(option) => option.practicename }\r\n getOptionSelected={(option, value) => getMedicalPracticeOption(option, value)}\r\n value={currentMedicalPractice}\r\n onChange={(event, newValue) => loadMedicalPractitice(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"MedicalPracticeSelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Clinic Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"practicename\" value={currentMedicalPractice ? currentMedicalPractice.practicename : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, practicename: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>ABN</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentAbn\" value={currentMedicalPractice ? currentMedicalPractice.abn : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, abn: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Contact Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentPhone\" value={currentMedicalPractice ? currentMedicalPractice.phone : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, phone: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"9\">\r\n <Form.Group >\r\n <Form.Label>Clinic Address</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentAddress1\" value={currentMedicalPractice ? currentMedicalPractice.address1 : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, address1: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Clinic Email</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentEmail\" value={currentMedicalPractice ? currentMedicalPractice.email : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, email: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n\r\n </Tab>\r\n <Tab eventKey=\"notes\" title=\"Notes\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}> \r\n <Notes type=\"Client\" pkid={currentClientID} medicalPractice={currentMedicalPractice} waitingRoomURL={registered && registered.waitingRoomURL}/>\r\n </Tab>\r\n <Tab eventKey=\"files\" title=\"Files\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}>\r\n <Files type=\"Client\" pkid={currentClientID} />\r\n </Tab>\r\n </Tabs>\r\n </Form> \r\n </Modal.Body>\r\n <Modal.Footer className=\"editprofile-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShow(false)}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"primary\" onClick={putClient}>\r\n Save\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showCancelProviderBooking} onHide={()=>setShowCancelProviderBooking(false)} dialogClassName=\"new-bookingDialog-modal\" style={{zIndex:1150}} centered>\r\n <Modal.Header closeButton className=\"new-booking-modal\">\r\n <Modal.Title>Booking with {booking.clientfullname}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"new-booking-modal\" style={{ backgroundColor: 'rgb(245,245,245)' }}>\r\n <Grid container spacing={3} >\r\n <Grid item md={3} xs={6}>\r\n Client:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {booking.clientfullname}\r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Date:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {format(new Date(booking.psychologistDate ? booking.psychologistDate: null), \"dd-MM-yyyy\")}\r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Time:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {format(new Date(booking.psychologistDate ? booking.psychologistDate: null), \"h:mm aa\")}\r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Session URL:\r\n </Grid>\r\n <hr />\r\n <Grid item md={12} xs={6}>\r\n <Form.Group>\r\n <Form.Label>Payment Type: {booking.paymentType}</Form.Label>\r\n <Form.Label >Reason for Cancelling</Form.Label>\r\n <Form.Check id=\"cancellationType\" name=\"selectlater\" type=\"radio\" style={{ marginBottom: 8 }} >\r\n <Form.Check.Input name=\"SelectLater\" type=\"radio\" checked={showCancellationReason === 'N' ? true: false} onChange={e => setShowCancellationReason('N')} />\r\n <Form.Check.Label style={{marginLeft: 12 }}>Did not attend </Form.Check.Label>\r\n </Form.Check>\r\n <Form.Check id=\"NotSelectLater\" name=\"notselectlater\" type=\"radio\" style={{ marginBottom: 8 }} >\r\n <Form.Check.Input name=\"SelectLater\" type=\"radio\" checked={showCancellationReason === 'Y' ? true: false} onChange={e => setShowCancellationReason('Y')} />\r\n <Form.Check.Label style={{marginLeft: 12 }}>Reason - please enter below</Form.Check.Label>\r\n </Form.Check>\r\n { showCancellationReason === 'Y' ?\r\n <Form.Control as=\"textarea\" rows={3} name=\"cancellationReason\" value={cancellationReason} onChange={(event) => setCancellationReason(event.target.value)} autoComplete='new-password' />\r\n :\r\n null\r\n }\r\n </Form.Group>\r\n </Grid>\r\n </Grid>\r\n </Modal.Body>\r\n <Modal.Footer className=\"new-booking-modal\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\" alignItems=\"center\">\r\n <Grid item>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={() => setShowCancelProviderBooking(false)} className=\"lightButtonOutlinedLarge\">\r\n Close\r\n </Button>\r\n </Grid>\r\n {(showCancellationReason === 'N') || (showCancellationReason === 'Y' && cancellationReason && cancellationReason.length > 5) ? \r\n <>\r\n <Grid item>\r\n <Button variant=\"warning\" size=\"sm\" onClick={() => cancelBooking(booking.id)}>\r\n Cancel Booking >\r\n </Button>\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n </Grid>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n\r\n\r\n\r\n\r\n </FormElement>\r\n );\r\n }\r\n\r\n};","import * as React from \"react\";\r\nimport { Dialog } from \"@progress/kendo-react-dialogs\";\r\n// import { useSchedulerEditItemPropsContext } from \"@progress/kendo-react-scheduler\";\r\n\r\nexport const CustomDialog = (props) => {\r\n \r\n var title = props.children[0].props.valueGetter('title');\r\n var eventType = props.children[0].props.valueGetter('eventType');\r\n var paymentType = props.children[0].props.valueGetter('paymentType');\r\n var bookingtType = props.children[0].props.valueGetter('bookinhType');\r\n var appointmentType = props.children[0].props.valueGetter('appointmenttype');\r\n var contactMobilePhone = props.children[0].props.valueGetter('contactMobilePhone');\r\n\r\n var className = '';\r\n\r\n switch (eventType)\r\n {\r\n case 'availability':\r\n title = 'Availability';\r\n className = 'availability';\r\n break;\r\n case 'availabilityExisting':\r\n title = 'Availability - Existing';\r\n className = 'availability';\r\n break;\r\n case 'availabilityAny' :\r\n title = 'Availability - New Client Bookings';\r\n className = 'availability';\r\n break;\r\n case 'availabilityOther' :\r\n title = 'Availability - Other (Not Available)';\r\n className = 'availability';\r\n break;\r\n case 'availabilitySupervision' :\r\n title = 'Availability - Supervision';\r\n className = 'availability';\r\n break;\r\n case 'availabilityNDISContractEAP' :\r\n title = 'Availability - NDIS/Contract/EAP';\r\n className = 'availability';\r\n break;\r\n case 'availabilityNDISContractEAPNew' : \r\n title = 'Availability - New Client or NDIS/Contract/EAP';\r\n className = 'availability';\r\n break;\r\n case 'availabilityNDISContractEAPExisting' : \r\n title = 'Availability - Existing Client or NDIS/Contract/EAP'\r\n className = 'availability';\r\n break;\r\n case 'availabilityPerinatalGriefLoss' : \r\n title = 'Availability - Perinatal Grief & Loss'\r\n className = 'availability';\r\n break;\r\n case 'availabilityNthQLDPHNNew' : \r\n title = 'Availability - Nth QLD PHN New'\r\n className = 'availability';\r\n break;\r\n case 'availabilityNthQLDPHNExisting' : \r\n title = 'Availability - Nth QLD PHN Existing'\r\n className = 'availability';\r\n break;\r\n case 'availabilityNthQLDPHNFacetoFace' : \r\n title = 'Available - Nth QLD PHN Face to Face Clients'\r\n className = 'availability';\r\n break;\r\n default:\r\n {\r\n title = `${title ? `Booking: ${title}` : 'New Booking'}`;\r\n if(appointmentType && appointmentType === \"1\" && contactMobilePhone)\r\n {\r\n var phoneNumber = contactMobilePhone.slice(0, 4) + \" \" + contactMobilePhone.slice(4,7) + \" \" + contactMobilePhone.slice(7,10);\r\n title = `${title} - ${phoneNumber}`\r\n }\r\n className = `${eventType}-${paymentType}`;\r\n }\r\n }\r\n \r\n\r\n return <Dialog {...props} title={`${title}`} id={`rhc-event-${className}`} className=\"scheduler-dialog\" style={{zIndex:1100}}/>;\r\n};\r\n\r\n\r\n","import React from \"react\";\r\nimport { SchedulerForm } from \"@progress/kendo-react-scheduler\";\r\nimport { CustomFormEditor } from \"./custom-form-editor\";\r\nimport { CustomDialog } from \"./custom-dialog\";\r\n\r\nexport const FormWithCustomEditor = (props) => {\r\n\r\n const requiredValidator = React.useCallback(\r\n (value) =>\r\n (value === undefined || value === null || value === \"\")\r\n ? \"Field is required.\"\r\n : undefined,\r\n []\r\n );\r\n\r\n const formValidator = (_dataItem, formValueGetter) => {\r\n let result = {};\r\n if(_dataItem.eventType === 'booking')\r\n {\r\n result.clientID = [requiredValidator(formValueGetter(\"clientID\"))]\r\n .filter(Boolean)\r\n .reduce((current, acc) => current || acc, \"\");\r\n result.status = [requiredValidator(formValueGetter(\"status\"))]\r\n .filter(Boolean)\r\n .reduce((current, acc) => current || acc, \"\");\r\n }\r\n return result;\r\n };\r\n\r\n const initDataItem = {\r\n eventType: 'booking',\r\n status: 'Active', \r\n bookingType: 'VIDEO',\r\n paymentType: 'Bulk Billed' \r\n }\r\n\r\n return (\r\n <SchedulerForm\r\n {...props}\r\n editor={CustomFormEditor}\r\n dialog={CustomDialog}\r\n validator={formValidator}\r\n initialValues={{ ...initDataItem, ...props.dataItem }}\r\n />\r\n );\r\n \r\n};","import React, { useEffect, useState } from \"react\"; \r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport * as Reference from \"../store/ducks/reference.duck\";\r\nimport * as Admin from \"../store/ducks/admin.duck\";\r\nimport { Scheduler, WeekView, MonthView, SchedulerItem, SchedulerItemContent } from \"@progress/kendo-react-scheduler\";\r\n// import { Modal } from \"react-bootstrap\";\r\nimport { FormWithCustomEditor } from \"./scheduler/custom-form\";\r\nimport { IntlProvider, load } from \"@progress/kendo-react-intl\";\r\nimport { guid } from \"@progress/kendo-react-common\";\r\nimport likelySubtags from \"cldr-core/supplemental/likelySubtags.json\";\r\nimport currencyData from \"cldr-core/supplemental/currencyData.json\";\r\nimport weekData from \"cldr-core/supplemental/weekData.json\";\r\nimport numbers from \"cldr-numbers-full/main/en-AU/numbers.json\";\r\nimport currencies from \"cldr-numbers-full/main/en-AU/currencies.json\";\r\nimport caGregorian from \"cldr-dates-full/main/en-AU/ca-gregorian.json\";\r\nimport dateFields from \"cldr-dates-full/main/en-AU/dateFields.json\";\r\nimport { Day } from \"@progress/kendo-date-math\";\r\nimport { parseISO, differenceInMinutes } from \"date-fns\";\r\nimport PhoneIcon from '@material-ui/icons/Phone';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\n\r\n\r\nimport '../../_metronic/_assets/css/app2.css';\r\n\r\nload( likelySubtags, currencyData, weekData, numbers, currencies, caGregorian, dateFields);\r\n\r\nconst displayDate = new Date();\r\n\r\nexport default function AvailabilityNew({mainID, userTZ}) {\r\n \r\n const dispatch = useDispatch()\r\n // const registered = useSelector(state => state.admin.RegisteredPsychologists[0]);\r\n const bookings = useSelector(state => state.admin.Bookings)\r\n const availability = useSelector(state => state.admin.Availability)\r\n const clients = useSelector(state => state.admin.Clients)\r\n \r\n useEffect( () => { dispatch(Reference.actions.fetchTimeZone()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchConstants()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchFundingTypes()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchBookingTypeStatistics()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchClients( { status: 'Active', providerId: mainID } )) }, [dispatch, mainID] )\r\n\r\n\r\n dispatch(Admin.actions.fetchBookings({ key: 'psychologist', id: mainID })) \r\n dispatch(Admin.actions.fetchAvailability({ psychologistid: mainID, userTZ: userTZ }))\r\n\r\n\r\n // Assemble data from bookings and availability\r\n const newBookings = bookings.filter(r => r.status !== 'Cancelled').map(row => { \r\n return {\r\n id: row.id,\r\n clientID: row.clientID,\r\n eventType: 'booking',\r\n title: row.clientfullname,\r\n start: parseISO(row.startDate),\r\n end: parseISO(row.endDate),\r\n note: row.note,\r\n paymentType: row.paymentType,\r\n bookingType: row.bookingType,\r\n status: row.status,\r\n contactMobilePhone: row.contactMobilePhone,\r\n showTodoIcon: row.toDoCount !== 0 ? true : false,\r\n appointmenttype: row.appointmenttype\r\n } \r\n })\r\n\r\n const newAvailability = availability.map(row => { \r\n //\r\n // Handle change of availabilityType for Display (i.e. Any = All)\r\n let availabilityTypeDisplay = 'Available - New Client Bookings';\r\n if (row.availabilityType !== 'Any' \r\n && row.availabilityType !== 'New Client Bookings' \r\n && row.availabilityType !== 'Other' \r\n && row.availabilityType !== 'NDISContractEAP' \r\n && row.availabilityType !== 'NDISContractEAPNew' \r\n && row.availabilityType !== 'NDISContractEAPExisting'\r\n && row.availabilityType !== 'PerinatalGriefLoss'\r\n && row.availabilityType !== 'NthQLDPHNNew'\r\n && row.availabilityType !== 'NthQLDPHNExisting'\r\n && row.availabilityType !== 'NthQLDPHNFacetoFace'\r\n )\r\n {\r\n availabilityTypeDisplay = 'Available - Existing';\r\n }\r\n if (row.availabilityType === 'Other')\r\n {\r\n availabilityTypeDisplay = 'Other (Not Available)';\r\n }\r\n if (row.availabilityType === 'Supervision')\r\n {\r\n availabilityTypeDisplay = 'Available - Supervision';\r\n }\r\n if (row.availabilityType === 'NDISContractEAP')\r\n {\r\n availabilityTypeDisplay = 'Available - NDIS/Contract/EAP';\r\n }\r\n if (row.availabilityType === 'NDISContractEAPNew')\r\n {\r\n availabilityTypeDisplay = 'Available - New Client or NDIS/Contract/EAP';\r\n }\r\n if (row.availabilityType === 'NDISContractEAPExisting')\r\n {\r\n availabilityTypeDisplay = 'Available - Existing Client or NDIS/Contract/EAP'\r\n }\r\n if (row.availabilityType === 'PerinatalGriefLoss')\r\n {\r\n availabilityTypeDisplay = 'Available - Perinatal Grief & Loss'\r\n }\r\n if (row.availabilityType === 'NthQLDPHNNew')\r\n {\r\n availabilityTypeDisplay = 'Available - Nth QLD PHN New Clients'\r\n }\r\n if (row.availabilityType === 'NthQLDPHNExisting')\r\n {\r\n availabilityTypeDisplay = 'Available - Nth QLD PHN Existing Clients'\r\n }\r\n if (row.availabilityType === 'NthQLDPHNFacetoFace')\r\n {\r\n availabilityTypeDisplay = 'Available - Nth QLD PHN Face to Face Clients'\r\n }\r\n //\r\n return {\r\n id: row.id,\r\n availabiltyType: row.availabilityType,\r\n eventType: 'availability' + row.availabilityType,\r\n psychologistID: row.psychologistID,\r\n availabilityType: row.availabilityType,\r\n title: availabilityTypeDisplay,\r\n start: new Date(row.startDate),\r\n end: new Date(row.endDate),\r\n recurrenceRule: row.rRule && row.rRule.length > 0 ? row.rRule.replace(\"RRULE:\", \"\") : undefined,\r\n recurrenceExceptions: row.exDate.length > 0 ? row.exDate.split(',').map((item) => item.length === 16 ? parseISO(item) : new Date(item)) : []\r\n } \r\n })\r\n const items = [...newBookings, ...newAvailability]\r\n \r\n // create ref to vars we need to submit with actions, so we can fetch the vales after they have been set by useEffect\r\n const payloadParams = {\r\n psychologistID: mainID,\r\n userTZ: userTZ\r\n }\r\n const payloadRef = React.useRef(payloadParams);\r\n React.useEffect(() => {\r\n payloadRef.current = payloadParams;\r\n }, [payloadParams]);\r\n\r\n // Custom item to apply colour for bookings/paymentType vs. availability\r\n const CustomItem = (props) => {\r\n var backgroundStyles = { backgroundColor: 'blue' }\r\n switch (props.dataItem.eventType)\r\n {\r\n case 'availability':\r\n backgroundStyles = { backgroundColor: 'blue'}\r\n break\r\n case 'availabilityExisting':\r\n backgroundStyles = { background: 'repeating-linear-gradient(45deg, #575ec2, #575ec2 10px, blue 10px, blue 20px)' }\r\n break\r\n case 'availabilityAny' :\r\n backgroundStyles = { backgroundColor: 'blue'}\r\n break\r\n case 'availabilityOther' :\r\n backgroundStyles = { backgroundColor: 'purple'}\r\n break\r\n case 'availabilitySupervision' :\r\n backgroundStyles = { backgroundColor: 'gray'}\r\n break\r\n case 'availabilityNDISContractEAP' : \r\n backgroundStyles = { backgroundColor: '#21B6A8'}\r\n break\r\n case 'availabilityNDISContractEAPNew' : \r\n backgroundStyles = { backgroundColor: '#CDB199'}\r\n break;\r\n case 'availabilityNDISContractEAPExisting' : \r\n backgroundStyles = { backgroundColor: '#189AB4'}\r\n break;\r\n case 'availabilityPerinatalGriefLoss' : \r\n backgroundStyles = { backgroundColor: '#E1C340'}\r\n break;\r\n case 'availabilityNthQLDPHNNew' : \r\n backgroundStyles = { backgroundColor: '#D3B1C2'}\r\n break;\r\n case 'availabilityNthQLDPHNExisting' : \r\n backgroundStyles = { backgroundColor: '#C197D2'}\r\n break;\r\n case 'availabilityNthQLDPHNFacetoFace' : \r\n backgroundStyles = { backgroundColor: '#f6c324'}\r\n break;\r\n default:\r\n backgroundStyles = { backgroundColor: 'blue'}\r\n }\r\n switch (props.dataItem.paymentType) {\r\n case 'Provisional':\r\n backgroundStyles = { backgroundColor: 'pink'}\r\n break\r\n case 'Bulk Billed':\r\n backgroundStyles = { backgroundColor: 'green'}\r\n break\r\n case 'NDIS':\r\n backgroundStyles = { backgroundColor: 'rgb(103 39 113)'}\r\n break\r\n case 'Reduced Gap':\r\n backgroundStyles = { backgroundColor: '#6acccc'}\r\n break\r\n case 'Contract':\r\n backgroundStyles = { backgroundColor: '#256A87'}\r\n break\r\n case 'EAP':\r\n backgroundStyles = { backgroundColor: '#FFC5D0'}\r\n break\r\n case 'Full Fee':\r\n backgroundStyles = { backgroundColor: '#cfb94a'}\r\n break\r\n default:\r\n break\r\n }\r\n var customStyles = { ...backgroundStyles, fontSize: 12, }\r\n\r\n return (\r\n <SchedulerItem\r\n {...props}\r\n style={{ ...props.style, ...customStyles }}\r\n >\r\n {props.children}\r\n {props.dataItem.eventType === 'booking' && props.dataItem.appointmenttype === \"1\" ?\r\n <SchedulerItemContent>\r\n <PhoneIcon />\r\n </SchedulerItemContent>\r\n : null}\r\n </SchedulerItem>\r\n )\r\n };\r\n \r\n \r\n // We manage both local state and redux state, to make the UI more responsive and not wait for redux.\r\n // data = local state, updated directly by change events - the calendar displays from this array\r\n // items = redux state, updated via actions. We only update local from this once the items != prevItems (i.e. redux has changed)\r\n // So, the sequence is update => update data => send action => items get updated from redux => is now different to prevItems => update data (again) with fresh copy from items\r\n const [data, setData] = React.useState([]);\r\n const [prevItems, setPrevItems] = useState([]);\r\n\r\n useEffect( () => {\r\n if((JSON.stringify(items) !== JSON.stringify(prevItems)) && items.length > 0){\r\n setPrevItems(items)\r\n setData(items)\r\n }\r\n }, [prevItems, items])\r\n\r\n function isNumeric(n) {\r\n return !isNaN(parseFloat(n)) && isFinite(n);\r\n } \r\n\r\n const getUpdateTitle = (item) => {\r\n switch (item.eventType)\r\n {\r\n case 'availability':\r\n return 'Availability'\r\n case 'availabilityAny' :\r\n return 'Availability - New Client (Medicare) Bookings'\r\n case 'availabilityOther' :\r\n return 'Availability - Other (Not Available)'\r\n case 'availabilityExisting':\r\n return 'Availability - Existing (Medicare)'\r\n case 'availabilitySupervision':\r\n return 'Availability - Supervision'\r\n case 'availabilityNDISContractEAP' : \r\n return 'Availability - NDIS/Contract/EAP'\r\n case 'availabilityNDISContractEAPNew' : \r\n return 'Availability - New Client or NDIS/Contract/EAP'\r\n case 'availabilityNDISContractEAPExisting' : \r\n return 'Availability - Existing Client or NDIS/Contract/EAP'\r\n case 'availabilityPerinatalGriefLoss' : \r\n return 'Availability - Perinatal Grief & Loss'\r\n case 'availabilityNthQLDPHNNew' : \r\n return 'Availability - Nth QLD PHN New'\r\n case 'availabilityNthQLDPHNExisting' : \r\n return 'Availability - Nth QLD PHN Existing'\r\n case 'availabilityNthQLDPHNFacetoFace' : \r\n return 'Availability - Nth QLD PHN Face to Face Clients'\r\n default:\r\n return clients.find(row => row.id === parseInt(item.clientID)).fullname\r\n }\r\n }\r\n \r\n // { created, updated, deleted }\r\n const handleDataChange = (props) => {\r\n setData((old) =>\r\n old\r\n .filter(\r\n (item) => (props.deleted.find( (current) => current.id === item.id ) === undefined) && (props.updated.find( (current) => current.id === item.id && current.status === 'Cancelled' ) === undefined )\r\n )\r\n .map(\r\n (item) => props.updated.find((current) => current.id === item.id) || item\r\n )\r\n .concat(\r\n props.created.map((item) =>\r\n Object.assign({}, item, {\r\n id: guid(),\r\n title: getUpdateTitle(item), // get the proper title to display (e.g. client fullname for bookings)\r\n })\r\n )\r\n )\r\n );\r\n var payload = {};\r\n var duration = 0;\r\n // Updated\r\n if(props.updated.length > 0)\r\n {\r\n var changed = props.updated[0];\r\n // console.log(changed.eventType);\r\n if(changed.eventType === 'availability' \r\n || changed.eventType === 'availabilityAny' \r\n || changed.eventType === 'availabilityExisting' \r\n || changed.eventType === 'availabilityOther' \r\n || changed.eventType === 'availabilitySupervision' \r\n || changed.eventType === 'availabilityNDISContractEAP' \r\n || changed.eventType === 'availabilityNDISContractEAPNew' \r\n || changed.eventType === 'availabilityNDISContractEAPExisting'\r\n || changed.eventType === 'availabilityPerinatalGriefLoss'\r\n || changed.eventType === 'availabilityNthQLDPHNNew'\r\n || changed.eventType === 'availabilityNthQLDPHNExisting'\r\n || changed.eventType === 'availabilityNthQLDPHNFacetoFace'\r\n ) \r\n {\r\n payload = {\r\n slot: changed.id,\r\n id: changed.id,\r\n mainID: changed.psychologistID,\r\n startDate: changed.start,\r\n endDate: changed.end,\r\n title: changed.title,\r\n allDay: false,\r\n rRule: changed.recurrenceRule,\r\n availabilityType: changed.availabilityType,\r\n exDate: changed.recurrenceExceptions ? changed.recurrenceExceptions.join(\", \") : '',\r\n userTZ: payloadRef.current.userTZ\r\n }\r\n dispatch(Admin.actions.chgAvailability(payload))\r\n }\r\n else if(changed.eventType === 'booking')\r\n {\r\n // If the event being changed has recently been created and has not saved, it has a GUID for an ID and cannot be changed by the API - thus bounce it\r\n if (isNumeric(changed.id))\r\n {\r\n duration = differenceInMinutes(new Date(changed.end), new Date(changed.start));\r\n var status = changed.status === 'Active' ? 'Updated' : changed.status;\r\n payload = { \r\n id: changed.id, \r\n status: status,\r\n appointment: {\r\n id: changed.id, \r\n userTZ: 'UTC', //done\r\n startDate: changed.start, \r\n duration: duration,\r\n clientID: changed.clientID, // done\r\n psychologistID: payloadRef.current.psychologistID, // done\r\n note: changed.note,\r\n paymentType: changed.paymentType,\r\n bookingType: changed.bookingType,\r\n status: status\r\n },\r\n refreshPayload: { key: 'psychologist', id: payloadRef.current.psychologistID } \r\n }\r\n dispatch(Admin.actions.putAppointment(payload))\r\n }\r\n } \r\n }\r\n // Added\r\n if(props.created.length > 0)\r\n {\r\n var added = props.created[0];\r\n if(added.title === 'a' \r\n || (added.eventType === 'availability' \r\n || added.eventType === 'availabilityAny' \r\n || added.eventType === 'availabilityExisting' \r\n || added.eventType === 'availabilityOther' \r\n || added.eventType === 'availabilitySupervision' \r\n || added.eventType === 'availabilityNDISContractEAP' \r\n || added.eventType === 'availabilityNDISContractEAPNew' \r\n || added.eventType === 'availabilityNDISContractEAPExisting'\r\n || added.eventType === 'availabilityPerinatalGriefLoss'\r\n || added.eventType === 'availabilityNthQLDPHNNew'\r\n || added.eventType === 'availabilityNthQLDPHNExisting'\r\n || added.eventType === 'availabilityNthQLDPHNFacetoFace'\r\n ))\r\n {\r\n // Need to determine availabilityType\r\n let availabilityType;\r\n switch (added.eventType)\r\n {\r\n case 'availability':\r\n availabilityType = 'Any'\r\n break\r\n case 'availabilityExisting':\r\n availabilityType = 'Existing'\r\n break\r\n case 'availabilityOther':\r\n availabilityType = 'Other'\r\n break\r\n case 'availabilitySupervision':\r\n availabilityType = 'Supervision'\r\n break\r\n case 'availabilityNDISContractEAP':\r\n availabilityType = 'NDISContractEAP'\r\n break\r\n case 'availabilityNDISContractEAPNew' : \r\n availabilityType = 'NDISContractEAPNew'\r\n break;\r\n case 'availabilityNDISContractEAPExisting' : \r\n availabilityType = 'NDISContractEAPExisting'\r\n break;\r\n case 'availabilityPerinatalGriefLoss' :\r\n availabilityType = 'PerinatalGriefLoss'\r\n break \r\n case 'availabilityNthQLDPHNNew' :\r\n availabilityType = 'NthQLDPHNNew'\r\n break \r\n case 'availabilityNthQLDPHNExisting' :\r\n availabilityType = 'NthQLDPHNExisting'\r\n break \r\n case 'availabilityNthQLDPHNFacetoFace' :\r\n availabilityType = 'NthQLDPHNFacetoFace'\r\n break \r\n case 'availabilityAny' :\r\n availabilityType = 'Any';\r\n break;\r\n default:\r\n availabilityType = 'Any';\r\n }\r\n payload = {\r\n mainID: payloadRef.current.psychologistID,\r\n startDate: added.start,\r\n endDate: added.end,\r\n title: added.title,\r\n allDay: false,\r\n rRule: added.recurrenceRule,\r\n availabilityType: availabilityType,\r\n exDate: '',\r\n userTZ: payloadRef.current.userTZ\r\n }\r\n dispatch(Admin.actions.addAvailability(payload))\r\n }\r\n else if(added.eventType === 'booking')\r\n {\r\n duration = differenceInMinutes(new Date(added.end), new Date(added.start));\r\n payload = { \r\n timezone: 'UTC', //done\r\n newbookingdate: added.start, \r\n duration: duration,\r\n clientID: added.clientID, // done\r\n psychologistID: payloadRef.current.psychologistID, // done\r\n note: added.note,\r\n paymentType: added.paymentType,\r\n bookingType: added.bookingType,\r\n refreshPayload: { key: 'psychologist', id: payloadRef.current.psychologistID },\r\n source: 'ProviderPortal'\r\n }\r\n dispatch(Admin.actions.bookAppointment(payload))\r\n } \r\n }\r\n // Deleted\r\n if(props.deleted.length > 0)\r\n {\r\n var deleted = props.deleted[0];\r\n if(deleted.eventType === 'availability' \r\n || deleted.eventType === 'availabilityAny' \r\n || deleted.eventType === 'availabilityExisting' \r\n || deleted.eventType === 'availabilityOther' \r\n || deleted.eventType === 'availabilitySupervision' \r\n || deleted.eventType === 'availabilityNDISContractEAP' \r\n || deleted.eventType === 'availabilityNDISContractEAPNew' \r\n || deleted.eventType === 'availabilityNDISContractEAPExisting'\r\n || deleted.eventType === 'availabilityPerinatalGriefLoss'\r\n || deleted.eventType === 'availabilityNthQLDPHNNew'\r\n || deleted.eventType === 'availabilityNthQLDPHNExisting'\r\n || deleted.eventType === 'availabilityNthQLDPHNFacetoFace'\r\n )\r\n {\r\n payload = {\r\n slot: deleted.id,\r\n mainID: payloadRef.current.psychologistID,\r\n userTZ: payloadRef.current.userTZ\r\n }\r\n dispatch(Admin.actions.delAvailability(payload))\r\n }\r\n else if(deleted.eventType === 'booking')\r\n {\r\n dispatch(Admin.actions.putAppointment({ \r\n id: deleted.id, \r\n status: 'Cancelled',\r\n appointment: {\r\n id: deleted.id, \r\n userTZ: 'UTC', //done\r\n startDate: deleted.start, \r\n clientID: deleted.clientID, // done\r\n psychologistID: payloadRef.current.psychologistID, // done\r\n status: status\r\n },\r\n refreshPayload: { key: 'psychologist', id: payloadRef.current.psychologistID } \r\n }))\r\n } \r\n }\r\n };\r\n \r\n return(\r\n <>\r\n <div className=\"row\"> \r\n <div className=\"col-xl-12\">\r\n <div className=\"kt-portlet kt-portlet--height-fluid\"> \r\n <div className=\"kt-portlet__body\" style={{ padding: 0 }}>\r\n <div className=\"kt-widget4\">\r\n <IntlProvider locale=\"en-AU\">\r\n <Scheduler \r\n data={data} \r\n onDataChange={handleDataChange}\r\n item={CustomItem}\r\n defaultDate={displayDate} \r\n editable={{ add: true, remove: true, drag: true, resize: true, edit: true }} \r\n form={FormWithCustomEditor}\r\n // header={CustomHeader}\r\n height={900} >\r\n <WeekView\r\n title=\"Week\"\r\n workDayStart=\"06:00\"\r\n workDayEnd=\"22:00\"\r\n selectedDateFormat=\"{0:M}\"\r\n selectedShortDateFormat=\"{0:M}\"\r\n workWeekStart={Day.Monday}\r\n \r\n />\r\n <MonthView />\r\n </Scheduler>\r\n </IntlProvider>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport * as Admin from \"../store/ducks/admin.duck\";\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { Button, Modal } from \"react-bootstrap\";\r\nimport { Paper, Grid } from '@material-ui/core';\r\nimport { format } from \"date-fns\";\r\n\r\nexport default function ReferralsView(props) {\r\n\r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Admin.actions.fetchReferralsView({type: props.type, id: props.id})) }, [dispatch, props.type, props.id] )\r\n\r\n const referrals = useSelector(state => state.admin.ReferralsView)\r\n\r\n const [showReferralView, setShowReferralView] = useState(false)\r\n\r\n const initReferral = {\r\n status: '',\r\n referredOn: new Date(),\r\n psychologistFullName: '',\r\n psychologistNote: '',\r\n clientFullName: '',\r\n clientMobilePhone: '',\r\n clientEmail: '',\r\n mpFullName: '',\r\n practicename: '',\r\n practiceAddress: '',\r\n practicePhone: '',\r\n practiceFax : ''\r\n }\r\n\r\n const [referral, setReferral] = useState(initReferral)\r\n\r\n const loadReferral = (thisReferral) => {\r\n setReferral(thisReferral)\r\n setShowReferralView(true)\r\n }\r\n\r\n const cols = [\r\n { field: 'id', headerName: 'ID', hide: true },\r\n { field: 'referredOn', type: 'date', headerName: 'Date', width: 210, renderCell: (params) => (format(new Date(params.value ? params.value : null), \"dd-MM-yyyy\"))},\r\n { field: 'clientFullName', headerName: 'Client', width: 250, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadReferral(referrals.find(r => r.id === params.row.id))} className=\"cell-Link\">\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), },\r\n { field: 'status', headerName: 'Status', width: 100 },\r\n ];\r\n\r\n function getActionButtons() {\r\n if (referral.status === 'Sent') {\r\n return(\r\n <>\r\n <Button variant=\"warning\" onClick={() => changeReferralStatus('Declined')}>\r\n Decline Referral\r\n </Button>\r\n <Button variant=\"primary\" onClick={() => changeReferralStatus('Accepted')}>\r\n Accept Referral\r\n </Button>\r\n </>\r\n )\r\n } else if (referral.status === 'Accepted') {\r\n return(\r\n <Button variant=\"danger\" onClick={() => changeReferralStatus('Cancelled')}>\r\n Cancel Referral\r\n </Button>\r\n ) \r\n } else {\r\n return(null)\r\n }\r\n }\r\n\r\n function changeReferralStatus(action) {\r\n // console.log(action)\r\n // put status & send refresh action to fetch the referrals collection again for this psychologist\r\n dispatch(Admin.actions.putReferralStatus( \r\n { referenceID: referral.id, \r\n statusCHG: action, \r\n refresh: { \r\n action: 'FETCH_REFERRALSVIEW', \r\n payload: { type: props.type, id: props.id }\r\n } \r\n }));\r\n setReferral({...referral, status: action});\r\n dispatch(Admin.actions.postNote({ type: 'Referral', pkID: referral.id, note: `Referral ${action} by ${props.viewerFullName}.` }));\r\n }\r\n\r\n return(\r\n <>\r\n { referrals ? \r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={referrals} columns={cols} pageSize={10} rowsPerPageOptions={[10]} checkboxSelection={false} sortModel={[{ field: 'referredOn', sort: 'desc' }]} />\r\n </Paper>\r\n : ('None')\r\n }\r\n\r\n\r\n <Modal show={showReferralView} onHide={() => setShowReferralView(false)} dialogClassName=\"referralsViewDialog-modal\" centered>\r\n <Modal.Header closeButton className=\"referralsView-modal\">\r\n <Modal.Title>Referral</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"referralsView-modal\" style={{ padding: 30 }}>\r\n <Paper>\r\n <Grid container spacing={4} style={{ paddingLeft: 25 }}>\r\n <Grid item md=\"3\">\r\n Referred On:\r\n </Grid>\r\n <Grid item md=\"9\" style={{ fontWeight: 600 }}>\r\n {format(new Date(referral.referredOn ? referral.referredOn: null), \"dd-MM-yyyy\")}\r\n </Grid>\r\n <Grid item md=\"3\">\r\n Status:\r\n </Grid>\r\n <Grid item md=\"9\" style={{ fontWeight: 600 }}>\r\n {referral.status}\r\n </Grid>\r\n <hr style={{ borderTop: '2px dotted #8c8c8c' }}></hr>\r\n <Grid item md=\"3\">\r\n Pyschologist:\r\n </Grid>\r\n <Grid item md=\"9\" style={{ fontWeight: 600 }}>\r\n {referral.psychologistFullName}\r\n </Grid>\r\n <Grid item md=\"3\">\r\n Additional Details:\r\n </Grid>\r\n <Grid item md=\"9\" style={{ fontWeight: 600 }}>\r\n {referral.psychologistNote}\r\n </Grid>\r\n <hr></hr>\r\n <Grid item md=\"3\">\r\n Client:\r\n </Grid>\r\n <Grid item md=\"9\" style={{ fontWeight: 600 }}>\r\n {referral.clientFullName}\r\n </Grid>\r\n <Grid item md=\"3\">\r\n Email:\r\n </Grid>\r\n <Grid item md=\"9\" style={{ fontWeight: 600 }}>\r\n {referral.clientEmail}\r\n </Grid>\r\n <Grid item md=\"3\">\r\n Phone:\r\n </Grid>\r\n <Grid item md=\"9\" style={{ fontWeight: 600 }}>\r\n {referral.clientMobilePhone}\r\n </Grid>\r\n <hr></hr>\r\n <Grid item md=\"3\">\r\n GP:\r\n </Grid>\r\n <Grid item md=\"9\" style={{ fontWeight: 600 }}>\r\n {referral.gpFullName}\r\n </Grid>\r\n <Grid item md=\"3\">\r\n Practice:\r\n </Grid>\r\n <Grid item md=\"9\" style={{ fontWeight: 600 }}>\r\n {referral.practicename} {referral.practicename !== referral.practiceAddress ? referral.practiceAddress : null}\r\n </Grid>\r\n <Grid item md=\"3\">\r\n Phone:\r\n </Grid>\r\n <Grid item md=\"9\" style={{ fontWeight: 600 }}>\r\n {referral.practicePhone}\r\n </Grid>\r\n <Grid item md=\"3\">\r\n Fax:\r\n </Grid>\r\n <Grid item md=\"9\" style={{ fontWeight: 600 }}>\r\n {referral.practiceFax}\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n </Modal.Body>\r\n <Modal.Footer className=\"referralsView-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowReferralView(false)}>\r\n Close\r\n </Button>\r\n {getActionButtons()}\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n\r\n </>\r\n )\r\n\r\n\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport { Paper, Grid, TextField, InputLabel, makeStyles } from '@material-ui/core';\r\nimport { Button, Modal } from \"react-bootstrap\";\r\nimport * as Admin from \"../store/ducks/admin.duck\";\r\nimport * as Reference from \"../store/ducks/reference.duck\";\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\nimport '../../_metronic/_assets/css/app.css';\r\nimport '../../_metronic/_assets/css/app2.css';\r\n\r\nexport function BookingWeek(props) {\r\n\r\n\r\n console.log(props)\r\n // process.env.REACT_APP_DEBUG && console.log(props.inviteType)\r\n \r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Admin.actions.fetchMatching({providertype: props.providerType, invite : false, availabilitytype : props.program === 1 ? 'PerinatalGriefLoss' : props.specialistType === 'nthqldphn' ? 'NthQLDPHNExisting' : props.paymentType === 'NDIS' || props.paymentType === 'EAP' || props.paymentType === 'Contract' ? 'NDISContractEAP' : props.providerType==='Supervision' ? 'Supervision' : 'Existing'})) }, [dispatch, props.providerType,props.paymentType] ) \r\n useEffect( () => { setSinglePsychologist() } ) \r\n useEffect( () => { dispatch(Reference.actions.fetchTimeZone()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchSundayThisWeek()) }, [dispatch] )\r\n\r\n const startingSunday = useSelector(state => state.reference.SundayThisWeek)\r\n const matching = useSelector(state => state.admin.Matching)\r\n const matchingAvailability = useSelector(state => state.admin.MatchingAvailability)\r\n const timeZone = useSelector(state => state.reference.TimeZone)\r\n var [currentPsychologistID, setcurrentPsychologistID] = useState();\r\n var [currentHourlyRate, setcurrentHourlyRate] = useState();\r\n var [currentPsychologistFullname, setcurrentPsychologistFullname] = useState();\r\n var [currentWaitingRoomURL, setcurrentWaitingRoomURL] = useState();\r\n var [currentPsychologistTimeZone, setcurrentPsychologistTimeZone] = useState();\r\n var [displayTZ, setDisplayTZ] = useState('psychologist');\r\n var [psychologistSet, setPsychologistSet] = useState(false)\r\n\r\n // console.log(props)\r\n\r\n // in psychologist mode, we do not select one, but set it up from props\r\n const setSinglePsychologist = () => {\r\n if(props.mode === 'psychologist' && props.psychologistID && !psychologistSet)\r\n {\r\n // setSinglePsychologist\r\n // Determine providertype \r\n if (props.providerType === 'GP')\r\n {\r\n setcurrentPsychologistID(props.gpID);\r\n setcurrentPsychologistFullname(props.gpFullname);\r\n setcurrentWaitingRoomURL(props.gpcurrentWaitingRoomURL);\r\n // These two are not in use - both TBA\r\n setcurrentHourlyRate(props.currentHourlyRate);\r\n setcurrentPsychologistTimeZone(props.psychologistTZ);\r\n dispatch(Admin.actions.fetchMatchingAvailability({ psychologistID: props.gpID, userTZ: displayTZ === 'psychologist' ? props.psychologistTZ : props.clientTZ, availabilityType : props.program === 1 ? 'PerinatalGriefLoss' : props.specialistType === 'nthqldphn' ? 'NthQLDPHNExisting' : props.providerType === 'Supervision' ? 'Supervision' : 'Existing', invite : false}))\r\n }\r\n else\r\n {\r\n setcurrentPsychologistID(props.psychologistID);\r\n setcurrentPsychologistFullname(props.psychologistFullname);\r\n setcurrentWaitingRoomURL(props.currentWaitingRoomURL);\r\n // These two are not in use - both TBA\r\n setcurrentHourlyRate(props.currentHourlyRate);\r\n setcurrentPsychologistTimeZone(props.psychologistTZ);\r\n dispatch(Admin.actions.fetchMatchingAvailability({ psychologistID: props.psychologistID, userTZ: displayTZ === 'psychologist' ? props.psychologistTZ : props.clientTZ, availabilityType : props.program === 1 ? 'PerinatalGriefLoss' : props.specialistType === 'nthqldphn' ? 'NthQLDPHNExisting' : props.paymentType === 'NDIS' || props.paymentType === 'EAP' || props.paymentType === 'Contract' ? 'NDISContractEAP' : props.providerType === 'Supervision' ? 'Supervision' : 'Existing', invite : false}))\r\n }\r\n //\r\n setPsychologistSet(true)\r\n }\r\n\r\n if(props.mode === 'client' && props.psychologistID && !psychologistSet)\r\n {\r\n // Client Setting;\r\n if (props.providerType === 'GP')\r\n {\r\n setcurrentPsychologistID(props.gpID);\r\n setcurrentPsychologistFullname(props.gpFullname);\r\n setcurrentWaitingRoomURL(props.gpcurrentWaitingRoomURL);\r\n // These two are not in use - both TBA\r\n setcurrentHourlyRate(props.currentHourlyRate);\r\n setcurrentPsychologistTimeZone(props.psychologistTZ);\r\n dispatch(Admin.actions.fetchMatchingAvailability({ psychologistID: props.gpID, userTZ: displayTZ === 'client' ? props.psychologistTZ : props.clientTZ, availabilityType : 'Existing', invite : props.inviteType && props.inviteType === 'client' ? true : false })) \r\n }\r\n else\r\n {\r\n setcurrentPsychologistID(props.psychologistID);\r\n setcurrentPsychologistFullname(props.psychologistFullname);\r\n setcurrentWaitingRoomURL(props.currentWaitingRoomURL);\r\n // These two are not in use - both TBA\r\n setcurrentHourlyRate(props.currentHourlyRate);\r\n setcurrentPsychologistTimeZone(props.psychologistTZ);\r\n dispatch(Admin.actions.fetchMatchingAvailability({ psychologistID: props.psychologistID, userTZ: displayTZ === 'client' ? props.psychologistTZ : props.clientTZ, availabilityType : props.program === 1 ? 'PerinatalGriefLoss' : props.specialistType === 'nthqldphn' ? 'NthQLDPHNExisting' : props.paymentType === 'NDIS' || props.paymentType === 'EAP' || props.paymentType === 'Contract' ? 'NDISContractEAP' : props.providerType === 'Supervision' ? 'Supervision' : 'Existing', invite : props.inviteType && props.inviteType === 'client' ? true : false }))\r\n } \r\n //\r\n setDisplayTZ('client');\r\n setPsychologistSet(true)\r\n // console.log('setSinglePsychologist')\r\n }\r\n }\r\n\r\n // in admin mode, we handle the selection of psychologists\r\n function handleMatchingAutocompleteChange(propertyName, event, newValue) { \r\n // console.log(newValue); \r\n if (newValue) {\r\n setcurrentPsychologistID(newValue.id)\r\n setcurrentPsychologistFullname(newValue.firstname + ' ' + newValue.surname)\r\n setcurrentHourlyRate(newValue.hourlyrate)\r\n setcurrentWaitingRoomURL(newValue.waitingroomurl)\r\n setcurrentPsychologistTimeZone(newValue.timezone)\r\n dispatch(Admin.actions.fetchMatchingAvailability({ psychologistID: newValue.id, userTZ: displayTZ === 'psychologist' ? newValue.timezone : props.clientTZ, availabilityType : props.program === 1 ? 'PerinatalGriefLoss' : props.specialistType === 'nthqldphn' ? 'NthQLDPHNExisting' : props.paymentType === 'NDIS' || props.paymentType === 'EAP' || props.paymentType === 'Contract' ? 'NDISContractEAP' : props.providerType === 'Supervision' ? 'Supervision' : 'Existing', invite : false }))\r\n }\r\n }\r\n\r\n function changeDisplayTZ(value) {\r\n if(props.mode === 'client')\r\n {\r\n currentPsychologistID && dispatch(Admin.actions.fetchMatchingAvailability({ psychologistID: currentPsychologistID, userTZ: value === 'client' ? currentPsychologistTimeZone : props.clientTZ, availabilityType : props.program === 1 ? 'PerinatalGriefLoss' : props.specialistType === 'nthqldphn' ? 'NthQLDPHNExisting' : props.paymentType === 'NDIS' || props.paymentType === 'EAP' || props.paymentType === 'Contract' ? 'NDISContractEAP' : props.providerType === 'Supervision' ? 'Supervision' : 'Existing', invite : false }));\r\n }\r\n else\r\n {\r\n currentPsychologistID && dispatch(Admin.actions.fetchMatchingAvailability({ psychologistID: currentPsychologistID, userTZ: value === 'psychologist' ? currentPsychologistTimeZone : props.clientTZ, availabilityType : props.program === 1 ? 'PerinatalGriefLoss' : props.specialistType === 'nthqldphn' ? 'NthQLDPHNExisting' : props.paymentType === 'NDIS' || props.paymentType === 'EAP' || props.paymentType === 'Contract' ? 'NDISContractEAP' : props.providerType === 'Supervision' ? 'Supervision' : 'Existing', invite : false }));\r\n }\r\n setDisplayTZ(value)\r\n }\r\n\r\n const useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n padding: 4\r\n },\r\n paper: {\r\n padding: theme.spacing(1),\r\n textAlign: 'center',\r\n color: theme.palette.text.secondary,\r\n },\r\n dayCol : {\r\n padding: 2,\r\n }\r\n }));\r\n\r\n var [startDate, setStartDate] = useState(new Date(startingSunday))\r\n var [endDate, setEndDate] = useState(new Date(startingSunday))\r\n var [nextWeek, setNextWeek] = useState('');\r\n var [prevWeek, setPrevWeek] = useState('');\r\n var [weekdays, setWeekDays] = useState([]);\r\n\r\n function makeWeek (newDateStr) {\r\n var thisStartDate = new Date(newDateStr);\r\n setStartDate(new Date(newDateStr))\r\n\r\n var endDate = new Date(thisStartDate)\r\n endDate.setDate(endDate.getDate() + 6);\r\n setEndDate(new Date(endDate))\r\n\r\n var tempDays = []\r\n // set start date one day back so we can \r\n thisStartDate.setDate(thisStartDate.getDate() )\r\n\r\n var i = 1\r\n while(i <= 7) {\r\n tempDays.push(new Date(thisStartDate.setDate(thisStartDate.getDate() + 1 )));\r\n i++;\r\n }\r\n \r\n var backWeek = new Date(newDateStr)\r\n backWeek.setDate(backWeek.getDate() - 7); \r\n setPrevWeek(formatDateString(backWeek))\r\n \r\n var nextWeek = new Date(newDateStr)\r\n nextWeek.setDate(nextWeek.getDate() + 7); \r\n setNextWeek(formatDateString(nextWeek)) \r\n\r\n setWeekDays(tempDays);\r\n }\r\n\r\n function formatDateString (dateInput) {\r\n const o_date = new Intl.DateTimeFormat('au');\r\n const f_date = (m_ca, m_it) => Object({...m_ca, [m_it.type]: m_it.value});\r\n const m_date = o_date.formatToParts(dateInput).reduce(f_date, {});\r\n return m_date.year + '-' + (m_date.month < 10 ? '0' + m_date.month : m_date.month) + '-' + m_date.day;\r\n }\r\n\r\n useEffect( () => { initWeek() }, ) \r\n\r\n function initWeek() {\r\n if(startingSunday.length && weekdays.length === 0) {\r\n makeWeek(startingSunday)\r\n }\r\n }\r\n\r\n const classes = useStyles();\r\n\r\n const monthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\r\n \r\n function getDateRangeLabel() {\r\n if (startDate.getYear() === endDate.getYear()) { \r\n return (\r\n <>\r\n {startDate ? startDate.getDate() : ''}-{startDate ? endDate.getDate() : ''} {startDate ? monthNames[endDate.getMonth()] : ''}\r\n </>\r\n )\r\n } else {\r\n return (\r\n <>\r\n {startDate ? startDate.getDate() : ''} {startDate ? monthNames[startDate.getMonth()] : ''} - {startDate ? endDate.getDate() : ''} {startDate ? monthNames[endDate.getMonth()] : ''}\r\n </>\r\n )\r\n }\r\n }\r\n\r\n const [showNewBooking, setShowNewBooking] = useState(false);\r\n const [newBookingProps, setNewBookingProps] = useState({})\r\n const [showBookingError, setShowBookingError] = useState(false);\r\n\r\n const startNewBooking = (booking) =>{\r\n setShowNewBooking(true)\r\n setNewBookingProps({ mode: booking.mode, day: booking.day, hour: booking.hour, psychologistID: booking.psychologistID, paymentType: booking.paymentType, bookingType: booking.bookingType, clientID: booking.clientID })\r\n }\r\n\r\n const saveAppointment = (newBookingProps) => {\r\n // Need to consider this further - need to support removing appointments as well \r\n // console.log(newBookingProps)\r\n var newbookingdate = newBookingProps.day + newBookingProps.hour.substring(0,5)\r\n if (newBookingProps.mode === 'client')\r\n {\r\n // Check if date within 48 hours as clients cannot book Psychologists within next 48 hours \r\n var twoDaysInFuture = new Date();\r\n twoDaysInFuture.setHours(twoDaysInFuture.getHours() + 48);\r\n var booking_date = new Date(newbookingdate);\r\n if (booking_date.getTime() < twoDaysInFuture.getTime())\r\n {\r\n // Bookings must be at least 48 hours in advance\r\n // console.log('Too Soon');\r\n setShowNewBooking(false);\r\n setShowBookingError(true);\r\n }\r\n else\r\n {\r\n dispatch(Admin.actions.bookAppointment({ \r\n timezone: displayTZ === 'psychologist' ? currentPsychologistTimeZone : props.clientTZ, \r\n newbookingdate: newbookingdate, \r\n day: newBookingProps.day, \r\n hour: newBookingProps.hour, \r\n clientID: newBookingProps.clientID, \r\n psychologistID: newBookingProps.psychologistID, \r\n psychologistname : newBookingProps.psychologistname, \r\n waitingRoomURL: newBookingProps.waitingRoomURL, \r\n clientFullName : newBookingProps.clientFullName, \r\n clientFirstName : newBookingProps.clientFirstName, \r\n clientPreferredName: newBookingProps.clientPreferredName,\r\n clientEmail : newBookingProps.clientEmail, \r\n paymentType: newBookingProps.paymentType, \r\n bookingType: newBookingProps.bookingType,\r\n refreshPayload: { key: 'client', id: newBookingProps.clientID } }))\r\n setShowNewBooking(false)\r\n props.setShowAppointment && props.setShowAppointment(false)\r\n props.setMakeBooking(false)\r\n }\r\n // Update future booking status \r\n dispatch(Admin.actions.fetchClientFutureBookingStatus( { providertype : props.providerType }))\r\n }\r\n else\r\n {\r\n dispatch(Admin.actions.bookAppointment({ \r\n timezone: displayTZ === 'psychologist' ? currentPsychologistTimeZone : props.clientTZ, \r\n newbookingdate: newbookingdate, \r\n day: newBookingProps.day, \r\n hour: newBookingProps.hour, \r\n clientID: newBookingProps.clientID, \r\n psychologistID: newBookingProps.psychologistID, \r\n psychologistname : newBookingProps.psychologistname, \r\n waitingRoomURL: newBookingProps.waitingRoomURL, \r\n clientFullName : newBookingProps.clientFullName, \r\n clientFirstName : newBookingProps.clientFirstName, \r\n clientPreferredName: newBookingProps.clientPreferredName,\r\n clientEmail : newBookingProps.clientEmail, \r\n paymentType: newBookingProps.paymentType, \r\n bookingType: newBookingProps.bookingType, \r\n refreshPayload: { key: 'psychologist', id: newBookingProps.psychologistID } }))\r\n setShowNewBooking(false)\r\n props.setShowAppointment && props.setShowAppointment(false)\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n <div className={classes.root}>\r\n <Grid container spacing={2}>\r\n {(props.mode === 'admin') ?\r\n <Grid item xs={6} md={6}>\r\n <InputLabel>\r\n {props.providerType === 'GP' ? \r\n <>\r\n GP Selection\r\n </> \r\n :\r\n <>\r\n {props.providerType === 'Financial' ?\r\n <>\r\n Financial Counsellor Selection\r\n </> \r\n :\r\n <>\r\n Psychologist Selection\r\n </>\r\n }\r\n </>\r\n }\r\n </InputLabel>\r\n <Autocomplete\r\n id=\"MatchingID\"\r\n variant=\"outlined\"\r\n options={matching}\r\n getOptionLabel={(option) => option.oneline || ''}\r\n value={matching.find(v => v.id === currentPsychologistID) || undefined}\r\n onChange={(event, newValue) => handleMatchingAutocompleteChange('MatchingID', event, newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"MatchingSelector\"\r\n multiline={true}\r\n style={{backgroundColor: \"white\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Grid>\r\n : \r\n null \r\n }\r\n </Grid>\r\n <Grid container direction=\"row\" justifyContent='space-between' spacing={2} style={{ marginTop: 8 }}>\r\n <Grid item md={5}>\r\n <Button variant=\"light\" onClick={() => {makeWeek(startingSunday)}} style={{ marginRight: 10 }}>Today</Button>\r\n <Button variant=\"light\" onClick={() => {makeWeek(prevWeek)}} style={{ marginRight: 10 }} alt=\"here\"> < </Button>\r\n <Button variant=\"light\" onClick={() => {makeWeek(nextWeek)}} style={{ marginRight: 10 }}> > </Button>\r\n {getDateRangeLabel()}\r\n </Grid>\r\n {props.mode !== 'client' ?\r\n <Grid item md={7}>\r\n {currentPsychologistTimeZone !== props.clientTZ ?\r\n <>\r\n <Button variant='light' className={displayTZ === 'psychologist' ? 'selected-tz' : null} onClick={() => {changeDisplayTZ('psychologist')}} style={{ marginRight: 10 }}>\r\n {props.providerType === 'GP' ? \r\n <>\r\n GP:\r\n </> \r\n :\r\n <>\r\n {props.providerType === 'Financial' ?\r\n <>\r\n Fin:\r\n </> \r\n :\r\n <>\r\n Psy:\r\n </>\r\n }\r\n </>\r\n }\r\n {currentPsychologistTimeZone && timeZone.find(row => row.systemName === currentPsychologistTimeZone).name}\r\n </Button>\r\n <Button variant='light' className={displayTZ === 'client' ? 'selected-tz' : null} onClick={() => {changeDisplayTZ('client')}} style={{ marginRight: 10 }}>\r\n Client: {props.clientTZ && timeZone.find(row => row.systemName === props.clientTZ).name}\r\n </Button>\r\n </>\r\n : \r\n <Button variant='light' className=\"selected-tz\" style={{ marginRight: 10 }}>\r\n Psy/Client: {currentPsychologistTimeZone && timeZone.find(row => row.systemName === currentPsychologistTimeZone).name}\r\n </Button>\r\n }\r\n </Grid>\r\n : \r\n <>\r\n <Grid item md={5}>\r\n {props.providerType === 'GP' ? \r\n <h4>Availability for GP: {currentPsychologistFullname}</h4>\r\n :\r\n <>\r\n {props.providerType === 'Financial' ?\r\n <h4>Availability for Financial Counsellor : {currentPsychologistFullname}</h4>\r\n :\r\n <>\r\n {props.providerType === 'Supervision' ?\r\n <h4>Availability for Supervising Psychologist : {currentPsychologistFullname}</h4>\r\n :\r\n <h4>Availability for Psychologist : {currentPsychologistFullname}</h4>\r\n }\r\n </>\r\n }\r\n </>\r\n }\r\n </Grid>\r\n <Grid item md={2} style={{ textAlign: \"right\"}}>\r\n <Button variant='light' onClick={() => props.setMakeBooking(false)} style={{ textAlign: \"right\", marginRight: 10 }}>\r\n Cancel\r\n </Button>\r\n </Grid>\r\n <Grid item md={12} style={{ textAlign: \"center\", fontWeight:600 }}>\r\n <p>If your psychologist does not have any availability showing but you are an existing client, they will book you in. Please send them a message and if you need further help, please contact Rural Heath Connect admin via the phone numbers on our website</p>\r\n </Grid>\r\n\r\n </> \r\n \r\n \r\n }\r\n </Grid>\r\n{/* */}\r\n <Grid container direction=\"row\" spacing={2}>\r\n {weekdays.map(thisDay => (\r\n <Grid item xs className={classes.dayCol} key={thisDay}>\r\n <Paper className={classes.paper}>\r\n <BookingDay matchingAvailability={matchingAvailability} mode={props.mode} day={thisDay} clientID={props.clientID} clientFullName={props.clientFullname} bookingType={props.bookingType} paymentType={props.paymentType} currentPsychologistID={currentPsychologistID ? currentPsychologistID : 0} startNewBooking={startNewBooking} />\r\n </Paper> \r\n </Grid>\r\n ))}\r\n \r\n </Grid>\r\n </div>\r\n \r\n <Modal show={showNewBooking} onHide={()=>setShowNewBooking(false)} dialogClassName=\"new-bookingDialog-modal\" centered>\r\n <Modal.Header closeButton className=\"new-booking-modal\">\r\n <Modal.Title>New Booking</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"new-booking-modal\" style={{ backgroundColor: 'rgb(245,245,245)' }}>\r\n <Grid container spacing={2}>\r\n <Grid item md={3} xs={6}>\r\n Psychologist:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {currentPsychologistFullname} \r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Client:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {props.clientFullname} \r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Date:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {newBookingProps.day && newBookingProps.day.substring(0,10)}\r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Time:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {newBookingProps.hour && newBookingProps.hour.substring(0,5)}\r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Booking Type:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {newBookingProps.bookingType && newBookingProps.bookingType === 'FACE' ? 'Face to Face' : 'Video'}\r\n </Grid>\r\n {newBookingProps.mode !== 'client' ?\r\n <>\r\n <Grid item md={3} xs={6}>\r\n Cost:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {currentHourlyRate}\r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Payment Type:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {props.paymentType}\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n {/* <Grid item md={3} xs={6}>\r\n Session URL:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {currentWaitingRoomURL}\r\n </Grid> */}\r\n </Grid>\r\n </Modal.Body>\r\n <Modal.Footer className=\"new-booking-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowNewBooking(false)} className=\"lightButtonOutlinedLarge\">\r\n Close\r\n </Button>\r\n <Button variant=\"primary\" onClick={() => saveAppointment({...newBookingProps, psychologistID: currentPsychologistID, psychologistname : currentPsychologistFullname , paymentType : props.paymentType, waitingRoomURL: currentWaitingRoomURL, clientFirstName : props.clientFirstName, clientPreferredName : props.clientPreferredName, clientEmail : props.clientEmail})}>\r\n Book Now\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showBookingError} onHide={()=>setShowBookingError(false)} dialogClassName=\"new-bookingDialog-modal\" centered>\r\n <Modal.Header closeButton className=\"new-booking-modal\">\r\n <Modal.Title>Warning - Booking Failed</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"new-booking-modal\" style={{ backgroundColor: 'rgb(245,245,245)' }}>\r\n <Grid container spacing={2}>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n Bookings must be at least 48 hours in Advance\r\n </Grid>\r\n </Grid>\r\n </Modal.Body>\r\n <Modal.Footer className=\"new-booking-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowBookingError(false)} className=\"lightButtonOutlinedLarge\">\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n </>\r\n )\r\n}\r\n\r\nfunction getActualStartTime(props,thisHour,currentDate)\r\n{\r\n // Determine actual time for saving appointment\r\n const founditem = props.matchingAvailability.find(timeblock => timeblock.fromDate.toString().substring(0,13) === (currentDate + thisHour.substring(0,2)));\r\n return(founditem.fromDate.toString().substring(11,16))\r\n}\r\n\r\nfunction getActualStartTimeDisplay(props,thisHour,currentDate)\r\n{\r\n // Determine descriptor to show in calendar \r\n const founditem = props.matchingAvailability.find(timeblock => timeblock.fromDate.toString().substring(0,13) === (currentDate + thisHour.substring(0,2)));\r\n if (props.mode === 'client')\r\n {\r\n return('Book Session @' + founditem.fromDate.toString().substring(11,16))\r\n }\r\n else\r\n {\r\n return(founditem.fromDate.toString().substring(11,16))\r\n }\r\n}\r\n\r\nfunction getAvailabilityTypeForTimeBlock(props,thisHour,currentDate)\r\n{\r\n // Determine availability type of slot - only used in the Face to Face to change the booking button colour\r\n const founditem = props.matchingAvailability.find(timeblock => timeblock.fromDate.toString().substring(0,13) === (currentDate + thisHour.substring(0,2)));\r\n return(founditem.availabilityType)\r\n}\r\n\r\nfunction getBookingTypeForTimeBlock(props,thisHour,currentDate)\r\n{\r\n // Determine bookingType based on availability type of slot - only used in Face to Face bookings \r\n const founditem = props.matchingAvailability.find(timeblock => timeblock.fromDate.toString().substring(0,13) === (currentDate + thisHour.substring(0,2)))\r\n //\r\n if (founditem.availabilityType ==='NthQLDPHNFacetoFace')\r\n {\r\n return('FACE')\r\n }\r\n else\r\n {\r\n return('VIDEO')\r\n }\r\n}\r\n\r\n\r\nfunction BookingDay(props) {\r\n\r\n const useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n padding: 4\r\n },\r\n hourItem : {\r\n borderBottom: \"solid 1px silver\",\r\n textAlign: \"left\"\r\n },\r\n slotItem : {\r\n backgroundColor: \"rgb(254, 255, 204)\",\r\n borderBottom: \"solid 1px yellow\",\r\n textAlign: \"left\"\r\n },\r\n dayHeading : {\r\n borderBottom: \"solid 1px silver\",\r\n fontWeight: 600,\r\n fontSize: 14,\r\n minHeight: 45\r\n }\r\n }));\r\n\r\n const classes = useStyles();\r\n var days = ['Sunday','Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\r\n var hours = ['06:00:00','07:00:00','08:00:00','09:00:00', '10:00:00', '11:00:00', '12:00:00', '13:00:00', '14:00:00', '15:00:00', '16:00:00', '17:00:00', '18:00:00', '19:00:00', '20:00:00', '21:00:00', '22:00:00']\r\n var currentDate = props.day.getFullYear() + '-' + ((props.day.getMonth()+ 1)<10?'0'+(props.day.getMonth()+1):props.day.getMonth()+1) + '-' + (props.day.getDate()<10?('0'+props.day.getDate()):props.day.getDate()) + 'T';\r\n \r\n var today = new Date();\r\n var isToday = (today.toDateString() === props.day.toDateString())\r\n var twoDaysInFuture = new Date();\r\n twoDaysInFuture.setHours(twoDaysInFuture.getHours() + 48);\r\n \r\n // \r\n // console.log(props.matchingAvailability.find(timeblock => timeblock.fromDate.toString() === (currentDate + '07:00')));\r\n return(\r\n <div className={classes.root}>\r\n <Grid container direction=\"column\" spacing={1}>\r\n\r\n <Grid item xs className={classes.dayHeading}>\r\n <div className=\"bookingsDayHeader\">\r\n <p className={isToday ? \"bookingsDayNameToday\" : \"bookingsDayName\"}>{days[props.day.getDay()]}</p>\r\n <div className={isToday ? \"bookingsDayNumberToday\" : \"bookingsDayNumber\"}>{props.day.getDate()}</div>\r\n </div> \r\n </Grid>\r\n\r\n {hours.map(thisHour => (\r\n props.matchingAvailability ? \r\n (props.matchingAvailability.find(timeblock => timeblock.fromDate.toString().substring(0,13) === (currentDate + thisHour.substring(0,2)))) ? \r\n (\r\n <Grid item xs className={classes.slotItem} key={getActualStartTime(props,thisHour,currentDate)} onClick={() => props.startNewBooking({ mode: props.mode, day: currentDate, hour: getActualStartTime(props,thisHour,currentDate), psychologistid: props.currentPsychologistID, paymentType: props.paymentType, bookingType: props.bookingType, bookingType: getBookingTypeForTimeBlock(props,thisHour,currentDate), clientID: props.clientID })}>\r\n <Button size=\"sm\" style={{ width: \"100%\", backgroundColor : getAvailabilityTypeForTimeBlock(props,thisHour,currentDate) === 'NthQLDPHNFacetoFace' ? '#ffa384' : '#384ad7' }}>\r\n {getActualStartTimeDisplay(props,thisHour,currentDate)}\r\n </Button>\r\n </Grid>\r\n )\r\n : (\r\n <Grid item xs className={classes.hourItem} key={thisHour.substring(0,5)}>\r\n <p>{thisHour.substring(0,5)}</p> \r\n </Grid>\r\n )\r\n : (\r\n <Grid item xs className={classes.hourItem}>\r\n <p>{thisHour.substring(0,5)}</p> \r\n </Grid>\r\n )\r\n ))}\r\n\r\n </Grid>\r\n </div>\r\n )\r\n\r\n\r\n\r\n}\r\n\r\n\r\n","\r\nimport React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport * as Admin from \"../store/ducks/admin.duck\";\r\nimport { Formik } from 'formik';\r\nimport * as Yup from \"yup\";\r\nimport { Grid } from '@material-ui/core';\r\nimport { FormGroup, FormControl, FormControlLabel, Checkbox, Typography } from '@material-ui/core';\r\nimport { Button, Form, Alert, Badge } from \"react-bootstrap\";\r\nimport { MuiPickersUtilsProvider, KeyboardDatePicker } from '@material-ui/pickers';\r\nimport DateFnsUtils from '@date-io/date-fns';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport { format } from \"date-fns\";\r\nimport CancelIcon from '@material-ui/icons/Cancel';\r\nimport ReplyIcon from '@material-ui/icons/Reply';\r\nimport BookmarkIcon from '@material-ui/icons/Bookmark';\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport '../../_metronic/_assets/css/app.css';\r\nimport '../../_metronic/_assets/css/app2.css';\r\n\r\nexport default function ToDos({ clientID, setShowToDo, tagValues, clientType }) {\r\n\r\n const dispatch = useDispatch(); \r\n // const filters = useSelector(state => state.admin.Filters)\r\n const todos = useSelector(state => state.admin.ToDos);\r\n const roleDesc = useSelector(state => state.auth.roleDesc)\r\n\r\n const initToDo = () => {\r\n return {\r\n\t id: 0,\r\n\t todoID: 0,\r\n\t clientID: clientID,\r\n\t label: '',\r\n\t colour: '',\r\n\t dueDate: null,\r\n shareWith: '',\r\n\t complete: false,\r\n needsGPBooking: 0,\r\n ppwFollowUp: 0\r\n\t }\r\n }\r\n \r\n const [todo, setToDo] = useState(initToDo())\r\n const [replyID, setReplyID] = useState()\r\n const [replyText, setReplyText] = useState('')\r\n const [replyShareWith, setReplyShareWith] = useState('')\r\n \r\n useEffect( () => { dispatch(Admin.actions.fetchToDos({ clientID: clientID })) }, [dispatch,clientID] )\r\n\r\n // const filteredtodos = todos.filter(row => filters.todoStatus === 'All' || (filters.todoStatus === 'Active' && row.complete === false))\r\n\r\n const validationSchema = Yup.object().shape({\r\n label: Yup.string()\r\n .when(['ppwFollowUp','needsGPBooking'],\r\n {\r\n is: (ppwFollowUp,needsGPBooking) => (ppwFollowUp !== '1' && needsGPBooking !== '1'),\r\n then: Yup.string().required(\"Label is required\"),\t\r\n }),\r\n });\r\n\r\n const submitForm = (values) => {\r\n // Add label for ppwFollowUp\r\n if (values.ppwFollowUp === '1' && values.label.length === 0)\r\n {\r\n values.label = 'PPW Followup'\r\n }\r\n // Add label for needsGPBooking\r\n if (values.needsGPBooking === '1' && values.label.length === 0)\r\n {\r\n values.label = 'Needs GP Booking'\r\n }\r\n\t var payload = {\r\n\t\t todo: values,\r\n clientType: clientType,\r\n\t }\r\n dispatch(Admin.actions.putToDo(payload))\r\n setToDo(initToDo())\r\n }\r\n\r\n const completeToDo = (item) => {\r\n\t var payload = {\r\n\t\t todo: { ...item, complete: true },\r\n tagValues: tagValues, \r\n clientType: clientType,\r\n\t }\r\n dispatch(Admin.actions.putToDo(payload))\r\n }\r\n\r\n const replyToDo = (id, share) => {\r\n setReplyID(id)\r\n setReplyShareWith(share)\r\n }\r\n\r\n const clearReply = () => {\r\n setReplyID()\r\n setReplyText('')\r\n setReplyShareWith('')\r\n }\r\n\r\n const sendReply = () => { \r\n\t var payload = { \r\n ...todo, \r\n replyToID: replyID,\r\n label: replyText, \r\n shareWith: replyShareWith \r\n\t }\r\n submitForm(payload)\r\n setReplyText('')\r\n setReplyID()\r\n }\r\n\r\n return (\r\n <div className='container-fluid'> \r\n\t\t\t<Formik\r\n\t\t\t enableReinitialize={true}\r\n\t\t\t initialValues={todo}\r\n\t\t\t validationSchema = {validationSchema}\r\n\t\t\t onSubmit={(values, actions) => {\r\n\t\t\t\tsubmitForm(values);\r\n\t\t\t\tactions.resetForm();\r\n\t\t\t }}\r\n\t\t\t>\r\n\t\t\t{props => {\r\n\t\t\tconst { values, handleChange, setFieldValue, handleSubmit } = props; \r\n\t\t\tconst change = (name,e) => { e.persist(); handleChange(e); };\r\n const handleCheckboxChange = (event) => {\r\n if(event.target.checked)\r\n {\r\n setFieldValue(event.target.name, event.target.value);\r\n }\r\n else\r\n {\r\n setFieldValue(event.target.name, '');\r\n }\r\n }; \r\n\t\t\treturn (\r\n <>\r\n <form noValidate={true} autoComplete=\"off\" onSubmit={handleSubmit}>\r\n <Grid container spacing={1}>\r\n <Grid item md={12}>\r\n <label>Todo Label</label>\r\n <Form.Control type=\"text\" as=\"textarea\" rows={2} id=\"label\" name=\"label\" value={values.label} onChange={change.bind(null, \"label\")} style={{ minHeight: 37, borderColor: 'rgb(210 210 210)' }} autoComplete='new-password'/>\r\n </Grid>\r\n <Grid item md={12}>\r\n <label>Additional Information (if needed)</label>\r\n <Form.Control type=\"text\" as=\"textarea\" rows={2} id=\"label\" name=\"label\" value={values.additional} onChange={change.bind(null, \"additional\")} style={{ minHeight: 37, borderColor: 'rgb(210 210 210)' }} autoComplete='new-password'/>\r\n </Grid>\r\n <Grid item md={12}>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>\r\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\r\n <KeyboardDatePicker\r\n name='dueDate'\r\n inputVariant=\"outlined\"\r\n format=\"MM/dd/yyyy\"\r\n margin=\"dense\"\r\n id=\"dueDate\"\r\n value={values.dueDate} \r\n onChange={(propertyValue) => setFieldValue(\"dueDate\", propertyValue)}\r\n autoOk={true}\r\n className=\"ev-form-control-inputDate summary-dense date-small\"\r\n label=\"Deadline\"\r\n InputProps={{ classes: { input: 'input-date-picker' }, }}\r\n />\r\n </MuiPickersUtilsProvider>\r\n </Grid>\r\n <Grid item>\r\n {/* className={classes.formControl} */}\r\n <FormControl component=\"fieldset\" style={{ marginTop: 6 }}>\r\n <FormGroup row={true}>\r\n <FormControlLabel\r\n control={<Checkbox name=\"shareWith\" value={roleDesc === 'Admin' ? 'Psychologist' : 'Admin'} checked={values.shareWith !== ''} onChange={handleCheckboxChange} className=\"form-radio-input\" />}\r\n label={<Typography className='form-radio-label'>Send to {roleDesc === 'Admin' ? 'Psychologist' : 'Admin'}</Typography>}\r\n style={{ marginBottom: 0, cursor: 'pointer' }}\r\n />\r\n <FormControlLabel\r\n control={<Checkbox name=\"ppwFollowUp\" value={'1'} checked={values.ppwFollowUp === '1'} onChange={handleCheckboxChange} className=\"form-radio-input\" />}\r\n label={<Typography className='form-radio-label'>PPW Followup</Typography>}\r\n style={{ marginBottom: 0, cursor: 'pointer' }}\r\n />\r\n <FormControlLabel\r\n control={<Checkbox name=\"needsGPBooking\" value={'1'} checked={values.needsGPBooking === '1'} onChange={handleCheckboxChange} className=\"form-radio-input\" />}\r\n label={<Typography className='form-radio-label'>Need GP Appt.</Typography>}\r\n style={{ marginBottom: 0, cursor: 'pointer' }}\r\n />\r\n </FormGroup>\r\n </FormControl>\r\n </Grid>\r\n <Grid item>\r\n <Button size=\"sm\" style={{ marginTop: 2, height: 35 }} type=\"submit\">Add</Button>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </form>\r\n </>\r\n\t\t\t)\r\n\t\t\t}}\r\n\t\t\t</Formik>\r\n\r\n <hr/>\r\n {todos.map(item => \r\n <div key={item.id}>\r\n <Alert variant=\"light\" onClose={() => completeToDo(item.id)} style={{ paddingRight: 0, paddingLeft: 10, paddingTop: 10, paddingBottom: 10, marginTop: replyID && replyID === item.id ? 10 : 20 }}>\r\n {/* replyID && replyID === item.id ? 0 : 10 */}\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item md={11}>\r\n <Grid container>\r\n {item.dueDate && \r\n <Grid item md={12} style={{ marginBottom: 6 }}>\r\n <Badge variant={(new Date(item.dueDate) - new Date()) < 0 ? 'danger' : 'warning'} style={{ marginRight: 6 }}>Due: {format(new Date(item.dueDate), \"dd-MM-yyyy\")} </Badge>\r\n </Grid>\r\n } \r\n <Grid item md={12}>\r\n <div className='todo-message-date'>\r\n {format(new Date(item.createdOn), \"dd/MM/yy HH:mm\")}\r\n\r\n {item.ppwFollowUp && <BookmarkIcon className='todo-flag-ppw' />}\r\n {item.needsGPBooking && <BookmarkIcon className='todo-flag-gp' />}\r\n {item.shareWith !=='' && <BookmarkIcon className='todo-flag-shared' />}\r\n\r\n </div>\r\n {(item.shareWith !=='') && <Badge variant={item.createdByMe ? 'secondary' : 'primary'} className=\"todo-from\">{item.toDoCreatedbyName} : </Badge>}\r\n <span className='todo-message-content'>{item.label}</span>\r\n </Grid>\r\n\r\n </Grid>\r\n </Grid>\r\n <Grid item md={1} style={{ textAlign: 'right' }}>\r\n {item.replies.length === 0 && <ReplyIcon onClick={() => replyToDo(item.id, item.shareWith !=='' ? item.shareWith : '')} style={{ marginRight: 4 }} className=\"todo-close-icon\" />}\r\n <CancelIcon onClick={() => completeToDo(item)} style={{ marginRight: 5 }} className=\"todo-close-icon\" />\r\n {/* roleDesc === 'Admin' ? 'Psychologist' : 'Admin' */}\r\n </Grid>\r\n </Grid>\r\n </Alert>\r\n {item.replies.map((reply, replyindex) => \r\n <Grid key={`reply-${reply.id}`} container justifyContent=\"flex-end\">\r\n <Grid item md={1}>\r\n </Grid>\r\n <Grid item md={11} >\r\n <Alert variant=\"light\" onClose={() => completeToDo(reply.id)} style={{ paddingRight: 0, paddingLeft: 10, paddingTop: 10, marginTop: 4, width: '100%' }}>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item md={11}>\r\n <Grid container>\r\n {reply.dueDate && \r\n <Grid item md={12} style={{ marginBottom: 6 }}>\r\n <Badge variant={(new Date(reply.dueDate) - new Date()) < 0 ? 'danger' : 'warning'} style={{ marginRight: 6 }}>Due: {format(new Date(reply.dueDate), \"dd-MM-yyyy\")} </Badge>\r\n </Grid>}\r\n \r\n <Grid item md={12}>\r\n <div className='todo-message-date'>{format(new Date(reply.createdOn), \"dd/MM/yy HH:mm\")}</div>\r\n {((reply.createdByMe && reply.shareWith !=='') || (!reply.createdByMe && reply.shareWith !=='')) && <Badge variant={reply.createdByMe ? 'secondary' : 'primary'} className=\"todo-from\">{reply.toDoCreatedbyName} : </Badge>}\r\n <span className='todo-message-content'>{reply.label}</span>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item md={1} style={{ textAlign: 'right' }}>\r\n {(replyindex + 1) === item.replies.length && <ReplyIcon onClick={() => replyToDo(item.id, item.shareWith !=='' ? item.shareWith : '')} style={{ marginRight: 4 }} className=\"todo-close-icon\" />}\r\n <CancelIcon onClick={() => completeToDo(reply)} style={{ marginRight: 5 }} className=\"todo-close-icon\" />\r\n </Grid>\r\n </Grid>\r\n </Alert>\r\n </Grid>\r\n </Grid>\r\n )}\r\n\r\n {replyID && replyID === item.id && \r\n <Grid container justifyContent=\"flex-end\">\r\n <Grid item md={1}>\r\n </Grid>\r\n <Grid item md={11} style={{ textAlign: 'right' }} >\r\n <Form.Control type=\"text\" as=\"textarea\" rows={2} id=\"label\" name=\"label\" value={replyText} onChange={(event)=>setReplyText(event.target.value)} style={{ minHeight: 37, borderColor: 'rgb(210 210 210)' }} autoComplete='new-password'/>\r\n <Button size=\"sm\" variant=\"secondary\" style={{ height: 35, marginTop: 6, marginBottom: 15, marginRight: 10 }} onClick={()=>clearReply()} >Cancel</Button>\r\n <Button size=\"sm\" style={{ height: 35, marginTop: 6, marginBottom: 15 }} onClick={()=>sendReply()} >Send</Button>\r\n </Grid>\r\n </Grid>\r\n }\r\n </div>\r\n )}\r\n\r\n <ToastContainer\r\n transition={Flip}\r\n position=\"bottom-right\"\r\n autoClose={2000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n />\r\n\r\n </div>\r\n )\r\n\r\n}\r\n\r\n// const useStyles = makeStyles((theme) => ({\r\n// \tformControl: {\r\n// \t margin: 0,\r\n// \t minWidth: 120,\r\n// \t},\r\n// \tformControlWide: {\r\n// \t margin: 0,\r\n// \t minWidth: '100%',\r\n// \t},\r\n// \tselectEmpty: {\r\n// \t marginTop: theme.spacing(2),\r\n// \t},\r\n// \tlabel: {\r\n// \t backgroundColor: '#fff',\r\n// \t paddingLeft: 3,\r\n// \t paddingRight: 3,\r\n// \t}\r\n// }));\r\n ","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport * as Admin from \"../store/ducks/admin.duck\";\r\nimport * as Reference from \"../store/ducks/reference.duck\";\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { Button, Modal, Row, Col, Form, Badge} from \"react-bootstrap\";\r\nimport { Paper, Grid, List, ListItem, ListItemIcon, ListItemText,FormControl, MenuItem, Select, Card, Checkbox, CardMedia, CardActions, CardContent, Chip, Typography, makeStyles, useMediaQuery, IconButton, Collapse } from '@material-ui/core';\r\nimport { BookingWeek } from \"./Appointments\";\r\nimport Interweave from 'interweave';\r\nimport { format } from \"date-fns\";\r\nimport EmailIcon from '@material-ui/icons/Email';\r\nimport ToDos from './ToDos';\r\nimport clsx from 'clsx';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport Masonry from 'react-masonry-css';\r\nimport '../../_metronic/_assets/css/app.css';\r\nimport '../../_metronic/_assets/css/app2.css';\r\n\r\n// import medipassSDK from '@medipass/partner-sdk';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n noBorder: {\r\n border: \"none\",\r\n },\r\n media: {\r\n height: 200,\r\n },\r\n\tformControl: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: 120,\r\n\t},\r\n\tformControlWide: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: '100%',\r\n\t},\r\n\tselectEmpty: {\r\n\t marginTop: theme.spacing(2),\r\n\t},\r\n\tlabel: {\r\n\t backgroundColor: '#fff',\r\n\t paddingLeft: 3,\r\n\t paddingRight: 3,\r\n\t}\r\n }));\r\n\r\n\r\n\r\n\r\nexport default function BookingsList(props) {\r\n\r\n // Blob setup for psychologist photos \r\n const containerName = `psychologists`;\r\n const storageAccountName = process.env.REACT_APP_STORAGERESOURCENAME || \"\"; \r\n const [showProvider, setShowProvider] = useState(false)\r\n\r\n const dispatch = useDispatch()\r\n const isMobile = useMediaQuery('(max-width: 760px)');\r\n const bookings = useSelector(state => state.admin.Bookings)\r\n const client = useSelector(state => state.admin.Client)\r\n const filters = useSelector(state => state.admin.Filters)\r\n // console.log(props);\r\n\r\n const supervisionAreas = useSelector(state => state.reference.SupervisionAreas).filter(sa => sa.providertype === 'Psychologist')\r\n const endorsedSupervisionAreas = useSelector(state => state.reference.SupervisionAreas).filter(sa => sa.providertype === 'Psychologist-Endorsed')\r\n const [currentPsychologistID,setCurrentPsychologistID] = useState(props.type==='client' ? client.currentpsychologistid : 0)\r\n const currentClientPaymentType = props.type==='client' ? client.paymentType : 0;\r\n const currentClientBookingType = props.type==='client' ? client.appointmenttype === '1' ? 'PHONE' : 'VIDEO' : 'VIDEO';\r\n const [currentPsychologistFullname,setCurrentPsychologistFullname] = useState(props.type==='client' ? client.psychologistName : 0)\r\n const currentGPID = props.type==='client' ? client.currentgpid : 0;\r\n const currentGPFullname = props.type==='client' ? client.gpFullName : 0;\r\n const currentClientID = props.type==='client' ? client.id : 0;\r\n const currentClientFullname = props.type==='client' ? client.fullname : '';\r\n const [currentHourlyRate,setCurrentHourlyRate] = useState('TBA')\r\n const [currentWaitingRoomURL,setCurrentWaitingRoomURL] = useState(props.type==='client' ? client.waitingRoomURL : '')\r\n const currentGPWaitingRoomURL = props.type==='client' ? client.gpwaitingRoomURL : ''\r\n const currentClientFirstName = props.type==='client' ? client.firstname : ''\r\n const currentClientEmail = props.type==='client' ? client.email : ''\r\n const currentPreferredName = props.type==='client' ? client.preferredName : '' \r\n const [currentPsychologistTZ,setCurrentPsychologistTZ] = useState('TBA')\r\n const currentClientTZ= props.type==='client' ? client.timeZone : ''\r\n const [expanded, setExpanded] = useState(1)\r\n const currentSpecialistType = props.type==='client' ? client.specialisttype : '';\r\n const currentProgram = props.type==='client' ? client.programid : '';\r\n const classes = useStyles();\r\n const futureBookingStatus = useSelector(state => state.admin.ClientFutureBookingStatus)\r\n const filteredBookingsFuture = bookings.filter(booking => (booking.days === 'Future'));\r\n const filteredBookingsFutureProvider = bookings.filter(booking => ((booking.days === 'Future') && booking.status === 'Active'));\r\n const filteredBookingsPast = bookings.filter(booking => (booking.days === 'Past'));\r\n const filteredBookingsPastProvider = bookings.filter(booking => ((booking.days === 'Past') && booking.status === 'Active'));\r\n const psychologists = useSelector(state => state.admin.Matching)\r\n const psychologistsNew = psychologists.filter(psy => (psy.nextAvailableNew !== null && psy.nextAvailableNew !== ''))\r\n const psychologistsSupervision = psychologists.filter(psy => (psy.nextAvailableSupervision !== null && psy.nextAvailableSupervision !== ''))\r\n\r\n const [cancellationReason,setCancellationReason] = useState()\r\n const [showCancellationReason,setShowCancellationReason] = useState('')\r\n const [showProviderBio,setShowProviderBio] = useState(false)\r\n const [providerBioFullName,setProviderBioFullName] = useState()\r\n const [providerBioBio,setProviderBioBio] = useState()\r\n \r\n // props.type === 'psychologist'\r\n function handleProviderClose() {\r\n setShowProvider(false);\r\n } \r\n \r\n var [providerType, setProviderType] = useState(props.providerType)\r\n\r\n useEffect( () => { dispatch(Reference.actions.fetchSupervisionAreas()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchBookings({ key: props.type, id: props.id })) }, [dispatch, props.type, props.id] )\r\n useEffect( () => { dispatch(Admin.actions.fetchMatching( { providertype : providerType, invite : true, availabilitytype : 'Both' })) }, [dispatch, providerType] )\r\n // useEffect( () => { dispatch(Admin.actions.fetchMatching( { providertype : 'Psychologist', invite : true, availabilitytype : props.paymentType === 'NDIS' || props.paymentType === 'EAP' || props.paymentType === 'Contract' ? 'NDIS/Contract/EAP' : 'Both' })) }, [dispatch] )\r\n useEffect( () => { \r\n // console.log('Running UseEffect')\r\n if (props.type === 'client')\r\n {\r\n // console.log('Calling Dispatch')\r\n dispatch(Admin.actions.fetchClientFutureBookingStatus( { providertype : providerType }))\r\n }\r\n }, [dispatch, props.type,client, providerType] )\r\n\r\n var [showBooking, setShowBooking] = useState(false)\r\n var [showCancelBooking, setShowCancelBooking] = useState(false);\r\n const [toggleCancelMessage,setToogleCancelMessage] = useState(false);\r\n const [showCancelProviderBooking,setShowCancelProviderBooking] = useState(false)\r\n var [booking, setBooking] = useState(false)\r\n var [toggleMessage, setToggleMessage] = useState(false)\r\n var [newNote, setNewNote] = useState('')\r\n var [sentMsg, setSentMsg] = useState()\r\n var [makeBooking, setMakeBooking] = useState(false)\r\n \r\n const [showToDo, setShowToDo] = useState(false)\r\n const [toDoClientID, setToDoClientID] = useState()\r\n const [toDoTitle, setToDoTitle] = useState('')\r\n\r\n\r\n const loadToDos = (clientID, fullName) => {\r\n setToDoClientID(clientID)\r\n setToDoTitle(fullName)\r\n setShowToDo(true)\r\n }\r\n\r\n const handleExpandClick = (id) => {\r\n if(id === expanded) {\r\n setExpanded(0)\r\n } else {\r\n setExpanded(id);\r\n }\r\n };\r\n\r\n const moreProviderBio = (fullName, bio) => {\r\n // console.log('Read More Clicked')\r\n setProviderBioFullName(fullName)\r\n setProviderBioBio(bio)\r\n setShowProviderBio(true)\r\n }\r\n\r\n const clientCancel = (thisBooking) => {\r\n // Load data\r\n setBooking(thisBooking)\r\n // Check if in Admin portal - no rules apply \r\n if (props.view !== 'admin')\r\n {\r\n // Clients cannot cancel bookings with 48 hours \r\n var notice48 = new Date();\r\n var noticePast = new Date();\r\n var clientDate = new Date(thisBooking.clientDate);\r\n notice48.setDate(notice48.getDate() + 2);\r\n // Check if the booking is in the next 48 hours\r\n if ((clientDate < notice48) && (clientDate > noticePast))\r\n {\r\n // console.log('Within48');\r\n setToogleCancelMessage(true);\r\n }\r\n }\r\n // \r\n // Open Modal\r\n setShowCancelBooking(true);\r\n }\r\n\r\n\r\n const providerCancel = (thisBooking) => {\r\n // Load data\r\n setBooking(thisBooking);\r\n // Close current modal \r\n setShowBooking(false);\r\n // Open Provider Cancel Modal\r\n setShowCancelProviderBooking(true);\r\n }\r\n\r\n\r\n const loadBooking = (thisBooking) => {\r\n setBooking(thisBooking);\r\n var newishNote = `Dear ${thisBooking && thisBooking.clientPreferredName && thisBooking.clientPreferredName.length > 0 ? thisBooking.clientPreferredName : thisBooking.clientFirstName},\r\n\r\nPlease note you have been booked for a consultation with ${thisBooking.psychologistfullname} at ${format(new Date(thisBooking.clientDate ? thisBooking.clientDate: null), \"dd-MM-yyyy hh:mm aa\")}. `;\r\n\r\n if (!thisBooking.bookingType)\r\n {\r\n if (thisBooking.appointmenttype === '1')\r\n {\r\n setNewNote(`${newishNote} \r\n ${thisBooking.psychologistfullname} will call you.`)\r\n }\r\n else\r\n {\r\n setNewNote(`${newishNote}\r\n Please connect here: ${thisBooking.waitingroomurl} at that time.`)\r\n }\r\n } else {\r\n if (thisBooking.bookingType === 'PHONE')\r\n {\r\n setNewNote(`${newishNote} \r\n ${thisBooking.psychologistfullname} will call you.`)\r\n } else {\r\n if (thisBooking.bookingType === 'VIDEO')\r\n {\r\n setNewNote(`${newishNote}\r\n Please connect here: ${thisBooking.waitingroomurl} at that time.`)\r\n }\r\n else\r\n {\r\n setNewNote(`${newishNote}\r\n Please attend here: ${thisBooking.fullAddress} at that time.`)\r\n }\r\n\r\n }\r\n \r\n }\r\n\r\n\r\n\r\n setToggleMessage(false);\r\n setShowBooking(true);\r\n }\r\n\r\n var cols = [\r\n { field: 'id', headerName: 'ID', flex: 0.5 },\r\n { field: 'psychologistDate', type: 'date', headerName: 'Date', flex: 1, renderCell: (params) => (format(new Date(params.value ? params.value : null), \"dd-MM-yyyy\"))}\r\n ]\r\n\r\n if(props.type === 'psychologist')\r\n { \r\n cols.push(\r\n { field: 'clientDate', type: 'date', headerName: 'My Time / Client Time', flex: 1, renderCell: (params) => (\r\n format(new Date(params.row.psychologistDate), \"h:mm aa\") + ((params.row.clientDate !== params.row.psychologistDate) ? \" / \" + format(new Date(params.row.clientDate), \"h:mm aa\") : '')\r\n )},\r\n )\r\n }\r\n\r\n if(props.type === 'client')\r\n { \r\n cols.push(\r\n { field: 'clientDate', type: 'date', headerName: 'Time', flex: 0.7, renderCell: (params) => (format(new Date(params.row.clientDate), \"h:mm aa\"))},\r\n )\r\n }\r\n\r\n if(props.type !== 'psychologist')\r\n { \r\n cols.push(\r\n { field: 'title', headerName: 'Provider', flex: 1 }\r\n )\r\n }\r\n else\r\n {\r\n cols.push(\r\n { field: 'title', headerName: 'Provider', flex: 1,\r\n renderCell: (params) => {\r\n return(\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>\r\n {params.value}\r\n </Grid>\r\n {params.row.toDoCount !== 0 ?\r\n <>\r\n <Grid item>\r\n <EmailIcon style={{ marginLeft: 8, color: 'green' }} onClick={()=>loadToDos(params.row.clientID, params.value)} />\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n </Grid>\r\n )\r\n }\r\n },\r\n )\r\n }\r\n\r\n if (props.view === 'admin')\r\n {\r\n cols.push(\r\n { field: 'charged', headerName: 'Charged', flex: 0.7 },\r\n { field: 'status', headerName: 'Status', flex: 0.7 }\r\n )\r\n }\r\n\r\n if (props.type === 'psychologist' && props.medipassapikey === 'Configured')\r\n {\r\n cols.push(\r\n { field: 'invoicedate', type: 'date', headerName: 'Invoice Date', flex: 1},\r\n { field: 'invoicestatus', headerName: 'Invoice Status', flex: 0.7 }\r\n )\r\n }\r\n\r\n cols.push(\r\n { field: 'action', headerName: 'Actions', flex: 1.5, //width: 100\r\n renderCell: (params) => (\r\n <>\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#eee\", marginRight: 10 }} onClick={() => loadBooking(bookings.find(r => r.id === params.row.id))} >\r\n View \r\n </Button>\r\n {props.type === 'client' && params.row.status !== 'Cancelled' ?\r\n <Button variant=\"warning\" size=\"sm\" style={{ color: \"white\", fontWeight: 500, border: 0, background: \"#A33383\", marginRight: 10 }} onClick={() => clientCancel(bookings.find(r => r.id === params.row.id))} >\r\n Cancel Booking\r\n </Button>\r\n :\r\n null\r\n }\r\n </>\r\n ),\r\n },\r\n )\r\n\r\n function getActionButtons(id) {\r\n if (props.type === 'psychologist') {\r\n if (booking.status === 'Cancelled') {\r\n return(\r\n <>\r\n <Button variant=\"danger\" size=\"sm\" onClick={() => deleteBooking(id)}>\r\n Delete Booking\r\n </Button>\r\n </>\r\n )\r\n }\r\n else \r\n {\r\n return(\r\n <>\r\n <Button variant=\"warning\" size=\"sm\" onClick={() => providerCancel(bookings.find(r => r.id === id))} >\r\n Cancel Booking\r\n </Button>\r\n </>\r\n )\r\n }\r\n } \r\n else \r\n {\r\n return(null)\r\n }\r\n }\r\n\r\n function cancelBooking(id) {\r\n // Need to handle no show which is triggered if it is save by a provider and reason is not selected - it is like the multiverse \r\n if (props.type === 'psychologist' && (!showCancellationReason || (showCancellationReason && showCancellationReason === 'N'))) \r\n {\r\n // Update database \r\n dispatch(Admin.actions.putAppointment( \r\n { id: id, \r\n status: 'NoShow', \r\n refreshPayload: { key: props.type, id: props.id },\r\n note: cancellationReason\r\n }));\r\n // Update local display \r\n setBooking({...booking, status: 'NoShow'});\r\n }\r\n else\r\n {\r\n // Update database \r\n dispatch(Admin.actions.putAppointment( \r\n { id: id, \r\n status: 'Cancelled', \r\n refreshPayload: { key: props.type, id: props.id },\r\n note: cancellationReason\r\n }));\r\n // Update local display \r\n setBooking({...booking, status: 'Cancelled'});\r\n }\r\n // Save note if a cancellation reason was set - it can be set in provider cancellations \r\n if (showCancellationReason && showCancellationReason === 'Y')\r\n {\r\n // ok we have a note to save \r\n const formData = new FormData();\r\n // Create note \r\n var newishNote = `Please note your consultation with ${booking.psychologistfullname} at ${format(new Date(booking.clientDate ? booking.clientDate: null), \"dd-MM-yyyy hh:mm aa\")}. was cancelled by the provider due to ${cancellationReason}`;\r\n // Add fields \r\n formData.append('type','Client');\r\n formData.append('pkid', booking.clientID);\r\n formData.append('subject','');\r\n formData.append('selector','Note');\r\n formData.append('note',newishNote);\r\n formData.append('faxdestination','');\r\n formData.append('faxFile','');\r\n formData.append('sendFormID',0);\r\n // Ok Time to Dispatch \r\n process.env.REACT_APP_DEBUG && console.log(...formData);\r\n dispatch(Admin.actions.postNote({ formData:formData, type: props.type, pkID: props.pkid}));\r\n }\r\n else\r\n {\r\n\r\n }\r\n // Close client booking cancel modal - if open\r\n setShowCancelBooking(false);\r\n // Close provider booking cancel modal - if open\r\n setShowCancelProviderBooking(false)\r\n }\r\n\r\n function deleteBooking(id) {\r\n dispatch(Admin.actions.putAppointment( \r\n { id: id, \r\n status: 'Deleted', \r\n refreshPayload: { key: props.type, id: props.id }\r\n }));\r\n setBooking({...booking, status: 'Deleted'});\r\n setShowBooking(false)\r\n }\r\n\r\n // function noshowBooking(id) {\r\n // dispatch(Admin.actions.putAppointment( \r\n // { id: id, \r\n // status: 'NoShow', \r\n // refreshPayload: { key: props.type, id: props.id }\r\n // }));\r\n // setBooking({...booking, status: 'NoShow'});\r\n // setShowBooking(false)\r\n // }\r\n\r\n\r\n function sendMessage() {\r\n const formData = new FormData();\r\n // Add fields \r\n formData.append('type','Client');\r\n formData.append('pkid', booking.clientID);\r\n formData.append('subject','');\r\n formData.append('selector','SMS');\r\n formData.append('note',newNote);\r\n formData.append('faxdestination','');\r\n formData.append('faxFile','');\r\n formData.append('sendFormID',0);\r\n // Ok Time to Dispatch \r\n process.env.REACT_APP_DEBUG && console.log(...formData);\r\n dispatch(Admin.actions.postNote({ formData:formData, type: props.type, pkID: props.pkid}));\r\n setSentMsg('Message sent!')\r\n showMessageTimer();\r\n }\r\n\r\n const showMessageTimer =() => {\r\n const timer = setTimeout(() => {\r\n setSentMsg(undefined);\r\n setShowBooking(false)\r\n }, 3000);\r\n return () => clearTimeout(timer);\r\n }\r\n\r\n function createBooking(type)\r\n {\r\n setProviderType(type);\r\n setMakeBooking(true) \r\n }\r\n\r\n\r\n function selectProvider(row) {\r\n // Update State with newly chosen psychologist\r\n setCurrentPsychologistID(row.id)\r\n setCurrentPsychologistFullname(row.fullname)\r\n setCurrentHourlyRate(row.hourlyrate)\r\n setCurrentWaitingRoomURL(row.waitingroomurl)\r\n setCurrentPsychologistTZ(row.timezone)\r\n // Update Client \r\n dispatch(Admin.actions.putClientPsychologist({ psychologistid: row.id, clientid: currentClientID, providerName: row.fullname }))\r\n // Now ask client to make new booking \r\n setProviderType('Psychologst');\r\n if (props.paymentType === 'Supervision' || props.providerType === 'Supervision')\r\n {\r\n setProviderType('Supervision');\r\n }\r\n setShowProvider(false);\r\n setMakeBooking(true) \r\n }\r\n\r\n\r\n function NewBookingButton()\r\n {\r\n // Changed this to show the book new appointment button on client dashboard - may need to change it back - 16/11/22\r\n // if (props.type !== 'client' || props.view !== 'client')\r\n if (props.type !== 'client')\r\n {\r\n return(null);\r\n }\r\n // console.log(props.currentpsychologistid);\r\n // console.log(futureBookingStatus)\r\n // console.log(props.currentgpid);\r\n return(\r\n <>\r\n {props.currentpsychologistid ?\r\n <>\r\n {providerType === 'Financial' ?\r\n <Grid item style={{ marginLeft: 10, paddingLeft: 2 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => createBooking('Financial')}>\r\n Book Financial Counsellor Appointment\r\n </Button>\r\n </Grid>\r\n :\r\n <>\r\n {providerType === 'Supervision' ?\r\n <>\r\n <Grid item style={{ marginLeft: 10, paddingLeft: 2 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => createBooking('Supervision')}>\r\n Book Supervision Appointment\r\n </Button>\r\n </Grid>\r\n { !futureBookingStatus ?\r\n <Grid item style={{ marginLeft: 10, paddingLeft: 2 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => setShowProvider(true)} >\r\n Select Different Supervisor\r\n </Button>\r\n </Grid>\r\n :\r\n null\r\n }\r\n </>\r\n : \r\n <>\r\n <Grid item style={{ marginLeft: 10, paddingLeft: 2 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => createBooking('Psychologist')}>\r\n Book Psychologist Appointment\r\n </Button>\r\n </Grid>\r\n { !futureBookingStatus ?\r\n <Grid item style={{ marginLeft: 10, paddingLeft: 2 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => setShowProvider(true)} >\r\n Select Different Psychologist\r\n </Button>\r\n </Grid>\r\n :\r\n null\r\n }\r\n </>\r\n }\r\n </>\r\n }\r\n </>\r\n :\r\n null\r\n }\r\n {props.currentgpid ?\r\n <Grid item style={{ marginLeft: 10, paddingLeft: 2 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => createBooking('GP')}>\r\n Book GP Appointment\r\n </Button> \r\n </Grid>\r\n :\r\n null\r\n }\r\n\r\n\r\n\r\n </>\r\n )\r\n }\r\n\r\n function BookingData()\r\n {\r\n let selectedList; \r\n if (filters.bookingPhase === 'Future')\r\n {\r\n // Don't display non active bookings to psychologists \r\n if (props.type === 'psychologist')\r\n {\r\n selectedList = filteredBookingsFutureProvider;\r\n }\r\n else\r\n {\r\n selectedList = filteredBookingsFuture;\r\n }\r\n }\r\n else\r\n {\r\n // Don't display non active bookings to psychologists \r\n if (props.type === 'psychologist')\r\n {\r\n selectedList = filteredBookingsPastProvider;\r\n }\r\n else\r\n {\r\n selectedList = filteredBookingsPast; \r\n }\r\n }\r\n // console.log(props.view)\r\n // console.log(props.type)\r\n return(\r\n <>\r\n { bookings ? \r\n props.nextBooking ? \r\n <Button variant=\"primary\" size=\"sm\" onClick={() => loadBooking(bookings.find(r => r.id === props.nextBooking.id))}>\r\n View\r\n </Button> \r\n :\r\n <>\r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10 }}>\r\n <Grid item style={{ marginTop: 2, marginLeft: 2 }}> \r\n <Grid container>\r\n <Grid item style={{ marginLeft: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl}> \r\n <Select\r\n labelId=\"bookingPhase-label\"\r\n id=\"bookingPhase\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\" }}\r\n value={filters.bookingPhase}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'bookingPhase', filterValue: event.target.value }))}\r\n >\r\n <MenuItem key={1} value='Future'>Future</MenuItem>\r\n <MenuItem key={2} value='Past'>Past</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n <NewBookingButton />\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n {(props.view !=='dashboard') ?\r\n <Paper style={{ height: 660 }}>\r\n <DataGrid rows={selectedList} columns={cols} pageSize={10} rowsPerPageOptions={[10]} checkboxSelection={false} sortModel={[{ field: 'psychologistDate', sort: 'asc' }]} />\r\n </Paper>\r\n :\r\n <Paper style={{ height: 200 }}>\r\n <DataGrid rows={selectedList} columns={cols} pageSize={5} rowsPerPageOptions={[5]} checkboxSelection={false} sortModel={[{ field: 'psychologistDate', sort: 'asc' }]} />\r\n </Paper>\r\n }\r\n </>\r\n : ('None')\r\n }\r\n </>\r\n )\r\n }\r\n\r\n // note that next booking prop renders the next booking button to provide all booking actions when used on a dashboard. Otherwise we return the list.\r\n return(\r\n <>\r\n { makeBooking ?\r\n <BookingWeek\r\n mode=\"client\"\r\n inviteType = {props.type}\r\n gpID = {currentGPID}\r\n gpFullname = {currentGPFullname}\r\n psychologistID = {currentPsychologistID}\r\n psychologistFullname = {currentPsychologistFullname}\r\n clientID = {currentClientID}\r\n clientFullname = {currentClientFullname}\r\n currentHourlyRate = {currentHourlyRate}\r\n currentWaitingRoomURL = {currentWaitingRoomURL}\r\n gpcurrentWaitingRoomURL = {currentGPWaitingRoomURL}\r\n clientFirstName = {currentClientFirstName}\r\n clientPreferredName = {currentPreferredName}\r\n clientEmail = {currentClientEmail}\r\n psychologistTZ = {currentPsychologistTZ}\r\n clientTZ={currentClientTZ}\r\n paymentType={currentClientPaymentType}\r\n bookingType={currentClientBookingType}\r\n setMakeBooking={setMakeBooking}\r\n providerType={providerType}\r\n specialistType={currentSpecialistType}\r\n program={currentProgram}\r\n />\r\n :\r\n <>\r\n <BookingData />\r\n <Modal show={showBooking} onHide={()=>setShowBooking(false)} dialogClassName=\"new-bookingDialog-modal\" centered>\r\n <Modal.Header closeButton className=\"new-booking-modal\">\r\n <Modal.Title>Booking - {booking.status}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"new-booking-modal\" style={{ backgroundColor: 'rgb(245,245,245)' }}>\r\n {!toggleMessage ?\r\n <Grid container spacing={3} style={{ height: 247 }}>\r\n <Grid item md={3} xs={6}>\r\n {props.providerType === 'GP' ? \r\n <>\r\n GP:\r\n </>\r\n :\r\n <>\r\n {props.providerType === 'Financial' ?\r\n <>\r\n Financial Counsellor:\r\n </>\r\n :\r\n <>\r\n Psychologist:\r\n </>\r\n }\r\n </>\r\n }\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {booking.psychologistfullname}\r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Client:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {booking.clientfullname}\r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Date:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {format(new Date(booking.psychologistDate ? booking.psychologistDate: null), \"dd-MM-yyyy\")}\r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Time:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {format(new Date(booking.psychologistDate ? booking.psychologistDate: null), \"h:mm aa\")}\r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Booking Type:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {booking.bookingType && booking.bookingType === 'FACE' ? 'Face to Face' : 'Video'}\r\n </Grid>\r\n { booking.clientDate !== booking.psychologistDate ?\r\n <>\r\n <Grid item md={3} xs={6}>\r\n Client's Time:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {format(new Date(booking.clientDate ? booking.clientDate: null), \"h:mm aa\")}\r\n </Grid>\r\n </>\r\n : \r\n null\r\n }\r\n {/* <Grid item md={3} xs={6}>\r\n Session URL:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n <a href={booking.waitingroomurl} target=\"_blank\" rel=\"noopener noreferrer\">\r\n {booking.waitingroomurl}\r\n </a>\r\n </Grid> */}\r\n </Grid>\r\n :\r\n sentMsg ? \r\n <>\r\n <Row>\r\n <Col md=\"12\" style={{ height: 222 }}> \r\n {sentMsg}\r\n </Col>\r\n </Row>\r\n </>\r\n : \r\n <>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Message</Form.Label>\r\n <Form.Control as=\"textarea\" rows={8} type=\"text\" name=\"psychologistNote\" defaultValue={newNote} onBlur={(event) => setNewNote(event.target.value)} autoComplete='new-password' style={{ borderColor: '#D1D1D1'}} />\r\n {/* {newNoteHelpText.length ? (<p className='error-help'>{newNoteHelpText}</p>) : ''} */}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n }\r\n </Modal.Body>\r\n <Modal.Footer className=\"new-booking-modal\">\r\n <Grid\r\n container\r\n direction=\"row\"\r\n justifyContent=\"space-between\"\r\n alignItems=\"center\"\r\n >\r\n {!toggleMessage ?\r\n <>\r\n <Grid item>\r\n {getActionButtons(booking.id)}\r\n </Grid>\r\n <Grid item>\r\n { props.type === 'psychologist' ? \r\n <Button variant=\"primary\" size=\"sm\" onClick={() => setToggleMessage(!toggleMessage)} style={{ marginRight: 15 }}>\r\n Message\r\n </Button>\r\n : null }\r\n <Button variant=\"secondary\" size=\"sm\" onClick={() => setShowBooking(false)} className=\"lightButtonOutlinedLarge\">\r\n Close\r\n </Button>\r\n </Grid>\r\n </>\r\n :\r\n <>\r\n <Grid item>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={() => setToggleMessage(!toggleMessage)} className=\"lightButtonOutlinedLarge\">\r\n Cancel\r\n </Button>\r\n </Grid>\r\n <Grid item>\r\n <Button variant=\"success\" size=\"sm\" onClick={() => sendMessage()}>\r\n Send >\r\n </Button>\r\n </Grid>\r\n </>\r\n }\r\n </Grid>\r\n </Modal.Footer>\r\n </Modal>\r\n </>\r\n }\r\n\r\n <Modal show={showCancelBooking} onHide={()=>setShowCancelBooking(false)} dialogClassName=\"new-bookingDialog-modal\" centered>\r\n <Modal.Header closeButton className=\"new-booking-modal\">\r\n <Modal.Title>Cancel your booking on {format(new Date(booking.psychologistDate ? booking.psychologistDate: null), \"dd-MM-yyyy\")} at {format(new Date(booking.psychologistDate ? booking.psychologistDate: null), \"h:mm aa\")}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"new-booking-modal\" style={{ backgroundColor: 'rgb(245,245,245)' }}>\r\n {!toggleCancelMessage ?\r\n <Grid container spacing={3} style={{ height: 150 }}>\r\n <Grid item md={6} xs={6}>\r\n {props.providerType === 'GP' ? \r\n <>\r\n With GP:\r\n </>\r\n :\r\n <>\r\n {props.providerType === 'Financial' ?\r\n <>\r\n With Financial Counsellor:\r\n </>\r\n :\r\n <>\r\n With Psychologist:\r\n </>\r\n }\r\n </>\r\n }\r\n </Grid>\r\n <Grid item md={6} xs={6} style={{ fontWeight: 600 }}>\r\n {booking.psychologistfullname}\r\n </Grid>\r\n <Grid item md={6} xs={6}>\r\n Date:\r\n </Grid>\r\n <Grid item md={6} xs={6} style={{ fontWeight: 600 }}>\r\n {format(new Date(booking.clientDate ? booking.psychologistDate: null), \"dd-MM-yyyy\")}\r\n </Grid>\r\n <Grid item md={6} xs={6}>\r\n Time:\r\n </Grid>\r\n <Grid item md={6} xs={6} style={{ fontWeight: 600 }}>\r\n {format(new Date(booking.clientDate ? booking.psychologistDate: null), \"h:mm aa\")}\r\n </Grid>\r\n </Grid>\r\n :\r\n <>\r\n <Row>\r\n <Col md=\"12\" style={{ height: 222, fontWeight: 600 }}> \r\n <p>Cancelling appointments within 48 hrs may incur costs.</p>\r\n <p>Please call 0427 692 377 for assistance.</p> \r\n </Col>\r\n </Row>\r\n </>\r\n }\r\n </Modal.Body>\r\n <Modal.Footer className=\"new-booking-modal\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\" alignItems=\"center\">\r\n <Grid item>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={() => setShowCancelBooking(false)} className=\"lightButtonOutlinedLarge\">\r\n Close\r\n </Button>\r\n </Grid>\r\n {!toggleCancelMessage ?\r\n <>\r\n <Grid item>\r\n <Button variant=\"warning\" size=\"sm\" onClick={() => cancelBooking(booking.id)}>\r\n Cancel Booking >\r\n </Button>\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n </Grid>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showCancelProviderBooking} onHide={()=>setShowCancelProviderBooking(false)} dialogClassName=\"new-bookingDialog-modal\" centered>\r\n <Modal.Header closeButton className=\"new-booking-modal\">\r\n <Modal.Title>Booking with {booking.clientfullname}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"new-booking-modal\" style={{ backgroundColor: 'rgb(245,245,245)' }}>\r\n <Grid container spacing={3} >\r\n <Grid item md={3} xs={6}>\r\n Client:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {booking.clientfullname}\r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Date:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {format(new Date(booking.psychologistDate ? booking.psychologistDate: null), \"dd-MM-yyyy\")}\r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Time:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {format(new Date(booking.psychologistDate ? booking.psychologistDate: null), \"h:mm aa\")}\r\n </Grid>\r\n { booking.clientDate !== booking.psychologistDate ?\r\n <>\r\n <Grid item md={3} xs={6}>\r\n Client's Time:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {format(new Date(booking.clientDate ? booking.clientDate: null), \"h:mm aa\")}\r\n </Grid>\r\n </>\r\n : \r\n null\r\n }\r\n {/* <Grid item md={3} xs={6}>\r\n Session URL:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n <a href={booking.waitingroomurl} target=\"_blank\" rel=\"noopener noreferrer\">\r\n {booking.waitingroomurl}\r\n </a>\r\n </Grid> */}\r\n <hr />\r\n <Grid item md={12} xs={6}>\r\n <Form.Group>\r\n <Form.Label >Reason for Cancelling</Form.Label>\r\n <Form.Check id=\"cancellationType\" name=\"selectlater\" type=\"radio\" style={{ marginBottom: 8 }} >\r\n {booking.paymentType === 'NDIS' ?\r\n <>\r\n <Form.Check.Input name=\"SelectLater\" type=\"radio\" checked={showCancellationReason === 'N' ? true: false} onChange={e => setShowCancellationReason('N')} />\r\n <Form.Check.Label style={{marginLeft: 12 }}>Did not attend (Enter Reason for NDIS Billing)</Form.Check.Label>\r\n </> \r\n :\r\n <>\r\n <Form.Check.Input name=\"SelectLater\" type=\"radio\" checked={showCancellationReason === 'N' ? true: false} onChange={e => setShowCancellationReason('N')} />\r\n <Form.Check.Label style={{marginLeft: 12 }}>Did not attend</Form.Check.Label>\r\n </> \r\n }\r\n </Form.Check>\r\n <Form.Check id=\"NotSelectLater\" name=\"notselectlater\" type=\"radio\" style={{ marginBottom: 8 }} >\r\n <Form.Check.Input name=\"SelectLater\" type=\"radio\" checked={showCancellationReason === 'Y' ? true: false} onChange={e => setShowCancellationReason('Y')} />\r\n <Form.Check.Label style={{marginLeft: 12 }}>Reason - please enter below</Form.Check.Label>\r\n </Form.Check>\r\n { showCancellationReason === 'Y' || booking.paymentType === 'NDIS' ?\r\n <Form.Control as=\"textarea\" rows={3} name=\"cancellationReason\" value={cancellationReason} onChange={(event) => setCancellationReason(event.target.value)} autoComplete='new-password' />\r\n :\r\n null\r\n }\r\n </Form.Group>\r\n </Grid>\r\n </Grid>\r\n </Modal.Body>\r\n <Modal.Footer className=\"new-booking-modal\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\" alignItems=\"center\">\r\n <Grid item>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={() => setShowCancelProviderBooking(false)} className=\"lightButtonOutlinedLarge\">\r\n Close\r\n </Button>\r\n </Grid>\r\n {(showCancellationReason === 'N' && booking.paymentType !== 'NDIS') || (showCancellationReason === 'Y' && cancellationReason && cancellationReason.length > 5) || (booking.paymentType === 'NDIS' && cancellationReason && cancellationReason.length > 5)? \r\n <>\r\n <Grid item>\r\n <Button variant=\"warning\" size=\"sm\" onClick={() => cancelBooking(booking.id)}>\r\n Cancel Booking >\r\n </Button>\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n </Grid>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showToDo} onHide={()=>setShowToDo(false)} dialogClassName=\"todos-modal-dialog\">\r\n <Modal.Header closeButton className=\"todos-modal\">\r\n <Modal.Title>To Do - {toDoTitle}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"todos-modal\">\r\n {toDoClientID && <ToDos clientID={toDoClientID} setShowToDo={setShowToDo} clientType={props.clienttype} />}\r\n </Modal.Body>\r\n </Modal>\r\n\r\n\r\n <Modal show={showProvider} onHide={handleProviderClose} dialogClassName=\"invite-modal\">\r\n <Modal.Header closeButton className=\"invite-modal\">\r\n <Modal.Title>Available Providers</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"invite-modal\">\r\n <Grid item md={12} style={{ height: 710, width: \"100%\", overflowY: \"scroll\", paddingLeft: 20, backgroundColor: \"rgb(255,255,255)\" }}>\r\n {providerType !== 'Supervision' ?\r\n <Masonry\r\n breakpointCols={isMobile ? 1 : 3}\r\n className=\"my-masonry-grid\"\r\n columnClassName=\"my-masonry-grid_column\">\r\n {psychologistsNew && psychologistsNew.map((row, index) => {\r\n return (\r\n <>\r\n <Card className={classes.root} variant=\"outlined\" key={index}>\r\n <CardMedia\r\n className={classes.media}\r\n image={`https://${storageAccountName}.blob.core.windows.net/${containerName}/${row.imageURL}`}\r\n title=\"Psychologist\"\r\n />\r\n <CardContent>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item sm={12}>\r\n <Typography variant=\"h5\" component=\"h3\">\r\n {row.fullname} (Next available: {row.nextAvailableNew})\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n {(providerType !== 'GP' && providerType !== 'Provisional') ?\r\n <>\r\n {currentClientPaymentType === 'Full Fee' ?\r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={6} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 , marginTop: 11 }}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={6} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {row.hourlyRateOverrideGap && row.hourlyRateOverrideGap !== '0' ? row.hourlyRateOverrideGap : row.standardFeeOutOfPocket }\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={12}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay {row.hourlyrate} on the day \r\n </Typography>\r\n <Typography>\r\n Receive back {row.hourlyRateOverrideRebate && row.hourlyRateOverrideRebate !== '0' ? row.hourlyRateOverrideRebate : row.medicareRebate} from Medicare\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n {currentClientPaymentType === 'Reduced Gap' ?\r\n <>\r\n {row.isReducedFee === 'Y' ? \r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={6} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600, textAlign: \"top\"}}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={6} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {row.reducedFeeOverrideGap && row.reducedFeeOverrideGap !== '0' ? row.reducedFeeOverrideGap : row.reducedFeeOutOfPocket }\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={12}>\r\n { row.reducedFee === '0' ?\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay $0 on the day\r\n </Typography>\r\n :\r\n <>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay {row.reducedFee} on the day\r\n </Typography>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n Receive back {row.reducedFeeOverrideRebate && row.reducedFeeOverrideRebate !== '0' ? row.reducedFeeOverrideRebate : row.medicareRebate} from Medicare\r\n </Typography>\r\n </>\r\n }\r\n </Grid>\r\n { row.reducedFee !== '0' ?\r\n <Grid item sm={12}>\r\n <Typography variant=\"subtitle2\" style={{ fontWeight:300, fontStyle: 'italic' }}>\r\n Note this provider offers some flexibility, depending on client circumstances\r\n </Typography>\r\n </Grid>\r\n :\r\n null\r\n }\r\n </Grid>\r\n </>\r\n :\r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={6} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600, textAlign: \"top\" }}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={6} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {row.reducedFeeOverrideGap && row.reducedFeeOverrideGap !== '0' ? row.reducedFeeOverrideGap : row.reducedFeeOutOfPocket }\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={12} >\r\n { row.reducedFee === '0' ?\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay $0 on the day\r\n </Typography>\r\n :\r\n <>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay {row.reducedFee} on the day\r\n </Typography>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n Receive back {row.reducedFeeOverrideRebate && row.reducedFeeOverrideRebate !== '0' ? row.reducedFeeOverrideRebate : row.medicareRebate} from Medicare\r\n </Typography>\r\n </>\r\n }\r\n </Grid>\r\n </Grid>\r\n </>\r\n }\r\n </>\r\n :\r\n null\r\n }\r\n <Grid container style={{ marginBottom: 15, marginTop: 10 }}>\r\n {row.areasOfInterest.map((row) => {return (<Chip size=\"small\" key={row} variant=\"outlined\" label={row} style={{ margin: 2 }} />)})}\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n <Typography className={classes.pos} color=\"textSecondary\">\r\n <br />\r\n </Typography>\r\n <Grid container>\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={row.bio.substring(0,700)} />\r\n {row.bio.length > 700 ?\r\n <>\r\n ...\r\n <Badge variant=\"secondary\" onClick={()=>moreProviderBio(row.fullname, row.bio)} style={{ marginRight: 5, cursor: 'pointer' }}>\r\n more\r\n </Badge>\r\n </>\r\n :\r\n null\r\n }\r\n </Typography>\r\n </Grid>\r\n <br />\r\n </CardContent>\r\n <CardActions disableSpacing>\r\n {(currentClientPaymentType === 'Bulk Billed' && row.bulkBillingAvailable === '0') ?\r\n <Button variant=\"secondary\">\r\n Not Available to Bulk Bill\r\n </Button>\r\n :\r\n <Button onClick={()=>selectProvider(row)}>Select and Book</Button>\r\n }\r\n <IconButton\r\n className={clsx(classes.expand, {\r\n [classes.expandOpen]: expanded,\r\n })}\r\n onClick={() => handleExpandClick(row.id)}\r\n aria-expanded={expanded}\r\n aria-label=\"show more\"\r\n >\r\n <ExpandMoreIcon />\r\n </IconButton>\r\n </CardActions>\r\n <Collapse in={(expanded !== row.id)} timeout=\"auto\" unmountOnExit>\r\n <CardContent>\r\n <Typography variant=\"body2\" component=\"div\"> \r\n {row.therapyTypes && row.therapyTypes.map((row) => {return (<Chip size=\"small\" key={row} variant=\"outlined\" label={row} style={{ margin: 2 }} />)})} \r\n </Typography>\r\n </CardContent>\r\n </Collapse> \r\n </Card>\r\n </>\r\n )\r\n })}\r\n </Masonry>\r\n :\r\n <Masonry\r\n breakpointCols={isMobile ? 1 : 3}\r\n className=\"my-masonry-grid\"\r\n columnClassName=\"my-masonry-grid_column\">\r\n {psychologistsSupervision && psychologistsSupervision.map((row, index) => {\r\n return (\r\n <>\r\n <Card className={classes.root} variant=\"outlined\" key={index}>\r\n <CardMedia\r\n className={classes.media}\r\n image={`https://${storageAccountName}.blob.core.windows.net/${containerName}/${row.imageURL}`}\r\n title=\"Psychologist\"\r\n />\r\n <CardContent>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item sm={12}>\r\n <Typography variant=\"h5\" component=\"h3\">\r\n {row.fullname} (Next available: {row.nextAvailableSupervision})\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={8} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={4} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {row.supervisorHourlyRate}\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n <Typography className={classes.pos} color=\"textSecondary\">\r\n <br />\r\n </Typography>\r\n <Grid container>\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={row.supervisorBio.substring(0,700)} />\r\n {row.supervisorBio.length > 700 ?\r\n <>\r\n ...\r\n <Badge variant=\"secondary\" onClick={()=>moreProviderBio(row.fullname, row.supervisorBio)} style={{ marginRight: 5, cursor: 'pointer' }}>\r\n more\r\n </Badge>\r\n </>\r\n :\r\n null\r\n }\r\n </Typography>\r\n </Grid>\r\n <br />\r\n </CardContent>\r\n <CardActions disableSpacing>\r\n <Button onClick={()=>selectProvider(row)}>Select and Book</Button>\r\n </CardActions>\r\n <CardContent>\r\n <Typography variant=\"h6\" component=\"h3\">\r\n Available For\r\n </Typography>\r\n <Row>\r\n <List className={classes.root}>\r\n {supervisionAreas.map(sRow => {\r\n const labelId = `checkbox-list-label-${sRow.id}`;\r\n var isChecked = row.supervisorAreas.includes(sRow.id);\r\n return (\r\n <ListItem key={sRow.id} role={undefined} dense button >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{sRow.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n })}\r\n </List>\r\n </Row>\r\n <Typography variant=\"h6\" component=\"h3\" style={{paddingTop:20}}>\r\n Endorsed In \r\n </Typography>\r\n <Row>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {endorsedSupervisionAreas.map(sRow => {\r\n var isChecked = row.supervisorAreas.includes(sRow.id);\r\n const labelId = `checkbox-list-label-${sRow.id}`;\r\n if (isChecked) {\r\n return(\r\n <ListItem key={sRow.id} role={undefined} dense button >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{sRow.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n )\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Col>\r\n </Row>\r\n </CardContent>\r\n </Card>\r\n </>\r\n )\r\n })}\r\n </Masonry>\r\n }\r\n </Grid>\r\n\r\n </Modal.Body>\r\n <Modal.Footer className=\"invite-modal\">\r\n <Button variant=\"secondary\" onClick={handleProviderClose}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showProviderBio} onHide={()=>setShowProviderBio(false)} dialogClassName=\"invite-modal\" >\r\n <Modal.Header closeButton className=\"invite-modal\">\r\n <Modal.Title>{providerBioFullName}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"invite-modal\" style={{ backgroundColor: 'rgb(245,245,245)' }}>\r\n <Grid container >\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={providerBioBio} />\r\n </Typography>\r\n </Grid>\r\n </Modal.Body>\r\n <Modal.Footer className=\"invite-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowProviderBio(false)} className=\"lightButtonOutlinedLarge\">\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n\r\n </>\r\n )\r\n}","import React, { useState } from 'react';\r\nimport { useDispatch } from 'react-redux'\r\nimport * as Admin from \"../store/ducks/admin.duck\";\r\nimport { Button, Form, Row, Col } from \"react-bootstrap\";\r\nimport { Grid } from '@material-ui/core';\r\n// import { makeStyles } from '@material-ui/core';\r\n\r\nexport default function APIKeyForm(props) {\r\n \r\n const dispatch = useDispatch()\r\n \r\n var [APIKey, setAPIKey] = useState()\r\n var [apiKeyHelpText, setapiKeyHelpText] = useState('')\r\n\r\n\r\n function addAPIKey() {\r\n // Determine if the criteria has been made \r\n // Check if note has been entered (note is not required for Fax)\r\n if ((APIKey.length === 0))\r\n {\r\n setapiKeyHelpText(\"Please enter your Tyro APIKey\");\r\n }\r\n // Ok Time to Dispatch \r\n process.env.REACT_APP_DEBUG && console.log(APIKey);\r\n dispatch(Admin.actions.putAPIKey({ apikey:APIKey, pkID: props.referenceID}));\r\n props.onCloseAPIKey();\r\n }\r\n\r\n // const useStyles = makeStyles((theme) => ({\r\n // root: {\r\n // // minWidth: 200,\r\n // // maxWidth: 200,\r\n // },\r\n // media: {\r\n // height: 200,\r\n // },\r\n // title: {\r\n // fontSize: 14,\r\n // },\r\n // pos: {\r\n // marginBottom: 12,\r\n // },\r\n // }));\r\n \r\n // const classes = useStyles();\r\n\r\n return(\r\n <Grid item md={12}> \r\n <Row>\r\n <Col md=\"12\"> \r\n <Form.Group >\r\n <Form.Label>API Key</Form.Label>\r\n <Form.Control type=\"text\" name=\"apikey\" defaultValue={APIKey} onBlur={(event) => setAPIKey(event.target.value)} autoComplete='new-password' style={{ borderColor: '#D1D1D1'}} />\r\n {apiKeyHelpText.length ? (<p className='error-help'>{apiKeyHelpText}</p>) : ''}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container spacing={0} padding={6} justifyContent=\"space-between\">\r\n <Button variant=\"light\" onClick={()=>props.onCloseAPIKey()}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"success\" size=\"sm\" onClick={() => addAPIKey()}>\r\n Save\r\n </Button>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n </Grid>\r\n )\r\n\r\n\r\n}\r\n \r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\n\r\nimport { TextField, Paper, Grid, MenuItem, Select, Checkbox, List, ListItem, ListItemIcon, ListItemText, Typography, makeStyles, Card, CardContent, CardMedia, Badge, Chip} from '@material-ui/core';\r\nimport { Button, Modal, Form, Row, Col, Tabs, Tab, InputGroup, Image } from \"react-bootstrap\";\r\nimport ReactQuill from 'react-quill';\r\nimport 'react-quill/dist/quill.snow.css';\r\n// import { Editor } from '@tinymce/tinymce-react';\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport Interweave from 'interweave';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport DescriptionIcon from '@material-ui/icons/Description';\r\nimport ClearIcon from '@material-ui/icons/Clear';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport * as Reference from \"../../../store/ducks/reference.duck\";\r\nimport * as Auth from \"../../../store/ducks/auth.duck\";\r\nimport AvailabilityNew from \"../../../components/AvailabilityNew\";\r\nimport PlacesAutoComplete from \"../../../components/AddressAutoComplete\";\r\nimport Masonry from 'react-masonry-css';\r\nimport ReferralsView from \"../../../components/ReferralsView\";\r\nimport BookingsList from \"../../../components/BookingsList\";\r\nimport Notes from \"../../../components/Notes\";\r\nimport Files from \"../../../components/Files\";\r\nimport { MuiPickersUtilsProvider, KeyboardDatePicker } from '@material-ui/pickers';\r\nimport DateFnsUtils from '@date-io/date-fns';\r\nimport { format } from \"date-fns\";\r\n// import CardSetupForm from \"../../../components/CardSetupForm\";\r\nimport APIKeyForm from \"../../../components/APIKeyForm\";\r\n// import InvoiceDetail from \"../../../components/InvoiceDetail\";\r\n// import {Elements} from '@stripe/react-stripe-js';\r\n// import {loadStripe} from '@stripe/stripe-js';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\nimport '../../../../_metronic/_assets/css/app.css';\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\nconst useStyles = makeStyles(() => ({\r\n noBorder: {\r\n border: \"none\",\r\n },\r\n media: {\r\n height: 200,\r\n },\r\n root: {\r\n \"& .MuiInputBase-root\": {\r\n height: 33,\r\n }\r\n } \r\n}));\r\n\r\n\r\nexport default function RegisteredPsychologists() {\r\n \r\n const classes = useStyles();\r\n\r\n const areasOfInterestRAW = useSelector(state => state.reference.AreasOfInterest)\r\n const areasOfProviderInterest = areasOfInterestRAW.filter(aoi => aoi.providertype === 'ProviderInterest')\r\n const areasOfTherapyTypes = areasOfInterestRAW.filter(aoi => aoi.providertype === 'TherapyType')\r\n const areasOfInterest = areasOfInterestRAW.filter(aoi => aoi.providertype !== 'ProviderInterest')\r\n const aoi_focus = areasOfInterest.filter(aoi => aoi.focusAreaIndex !== null && aoi.providertype === 'Psychologist')\r\n const aoi_other = areasOfInterest.filter(aoi => aoi.focusAreaIndex === null && aoi.providertype === 'Psychologist')\r\n const FinancialAreasOfInterest = areasOfInterest.filter(area => area.providertype === 'Financial')\r\n const mbsServices = useSelector(state => state.reference.MBSServices)\r\n const medicalPractices = useSelector(state => state.admin.MedicalPractices.Psychologist)\r\n const registered = useSelector(state => state.admin.RegisteredPsychologists)\r\n const timeZone = useSelector(state => state.reference.TimeZone)\r\n const fundingTypes = useSelector(state => state.reference.FundingTypes)\r\n const userTZ = useSelector(state => state.auth.userTZ)\r\n const filters = useSelector(state => state.admin.Filters)\r\n const supervisionAreas = useSelector(state => state.reference.SupervisionAreas).filter(sa => sa.providertype === 'Psychologist')\r\n const endorsedSupervisionAreas = useSelector(state => state.reference.SupervisionAreas).filter(sa => sa.providertype === 'Psychologist-Endorsed')\r\n \r\n \r\n var [showRegistrationView, setShowRegistrationView] = useState(false) \r\n var [showProviderBio,setShowProviderBio] = useState(false)\r\n var [providerBioFullName,setProviderBioFullName] = useState()\r\n var [providerBioBio,setProviderBioBio] = useState()\r\n var [currentPaymentType,setCurrentPaymentType] = useState('Reduced Gap')\r\n var [currentSpecialistType,setcurrentSpecialistType] = useState()\r\n\r\n\r\n // const filteredRegistered = registered.filter(psychologist => (psychologist.fullname.toLowerCase().search(filters.registeredTerm.toLowerCase()) > -1 || filters.registeredTerm.length === 0) && (psychologist.providertype === filters.registeredProviderType || filters.registeredProviderType === 'All')) \r\n\r\n \r\n\r\n const searchProviders = (provider) => {\r\n if( true\r\n && (provider.fullname.toLowerCase().search(filters.registeredTerm.toLowerCase()) > -1 || filters.registeredTerm.length === 0)\r\n && (filters.registeredStatus === 'All' || (filters.registeredStatus === 'Active' && provider.status === 'Active') || (filters.registeredStatus === 'Archived' && provider.status === 'Archived')) \r\n && ((provider.providertype === filters.registeredProviderType) || (filters.registeredProviderType === 'All') || (filters.registeredProviderType === 'PsychologistClinical' && (provider.providertype ==='Psychologist' || provider.providertype === 'Clinical')) || (filters.registeredProviderType === 'Supervisor' && provider.isSupervisor === 'Y'))\r\n && (\r\n (!filters.registeredAOI) \r\n || (filters.registeredAOI === 'All') \r\n || (filters.registeredAOI === '') \r\n || (filters.registeredAOI && provider.areasOfInterest.some(issue => issue === filters.registeredAOI.issue)))\r\n && (\r\n (!filters.registeredInterest) \r\n || (filters.registeredInterest === 'All') \r\n || (filters.registeredInterest === '')\r\n || (filters.registeredInterest && provider.areasOfInterest.some(issue => issue === filters.registeredInterest.issue)))\r\n && (\r\n (!filters.registeredTherapy) \r\n || (filters.registeredTherapy === 'All') \r\n || (filters.registeredTherapy === '') \r\n || (filters.registeredTherapy && provider.areasOfInterest.some(issue => issue === filters.registeredTherapy.issue)))\r\n && (filters.registeredPsychologistsType === 'All' || (provider.specialisttype === filters.registeredPsychologistsType)) \r\n )\r\n {\r\n return provider\r\n } \r\n }\r\n\r\n const filteredRegistered = registered.filter(provider => searchProviders(provider))\r\n\r\n // Blob setup for psychologist photos \r\n const containerName = `psychologists`;\r\n const storageAccountName = process.env.REACT_APP_STORAGERESOURCENAME || \"\"; \r\n \r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Admin.actions.fetchRegistered()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchMedicalPractices({ type: 'Psychologist' })) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchAreasOfInterest('ALL')) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchMBSServices()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchTimeZone()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchConstants()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchFundingTypes()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchSupervisionAreas()) }, [dispatch] )\r\n\r\n var [show, setShow] = useState(false);\r\n // var [showCard, setShowCard] = useState(false);\r\n var [showAPIKey, setShowAPIKey] = useState(false);\r\n // var [showInvoiceDetail, setShowInvoiceDetail] = useState(false);\r\n\r\n function handleRegistrationViewClose() {\r\n setShowRegistrationView(false);\r\n } \r\n\r\n function DeactivateMFA(psychologistID) {\r\n // Ok Time to Dispatch \r\n setcurrentMfaConfigured('Not Configured')\r\n dispatch(Auth.actions.postDeactivateMFA({type : 'Provider', providerID : psychologistID}));\r\n }\r\n\r\n function handleClose() {\r\n setShow(false);\r\n } \r\n\r\n // function handleCardClose() {\r\n // setShowCard(false);\r\n // } \r\n\r\n // function handleInvoiceDetailClose() {\r\n // setShowInvoiceDetail(false);\r\n // } \r\n\r\n function handleAPIKeyClose() {\r\n setShowAPIKey(false);\r\n } \r\n\r\n const registrationView = (feeType) => {\r\n // Populate Modal which contains preview of Provider Registration Information\r\n setCurrentPaymentType(feeType)\r\n setShowRegistrationView(true)\r\n }\r\n\r\n \r\n const moreProviderBio = (fullName, bio) => {\r\n setProviderBioFullName(fullName)\r\n setProviderBioBio(bio)\r\n setShowProviderBio(true)\r\n }\r\n\r\n function handleTimeZoneAutocompleteChange(propertyName, event, newValue) { \r\n // console.log(newValue); \r\n if (newValue) {\r\n setcurrentTimeZone(newValue.systemName);\r\n }\r\n } \r\n\r\n function handleFileFieldChangeNewInsuranceFile(propertyName, event) { \r\n // console.log(event.currentTarget.files[0]);\r\n setcurrentNewInsuranceFile(event.currentTarget.files[0]) \r\n }\r\n\r\n function handleFileFieldChangeNewProfilePicture(propertyName, event) { \r\n // console.log(event.currentTarget.files[0]);\r\n setcurrentNewProfilePicture(event.currentTarget.files[0]) \r\n }\r\n\r\n function updatePassword() {\r\n // Put together packet\r\n var payload = {\r\n registeredid : currentPsychologistID,\r\n registeredexistingpassword : '',\r\n registeredpassword: currentNewPassword,\r\n registeredpasswordconfirmation: currentNewPasswordConfirmation\r\n }\r\n // Save new password for provider\r\n dispatch(Admin.actions.putProviderPassword(payload));\r\n }\r\n\r\n\r\n function putPsychologist() {\r\n // Move from useState to FormData \r\n const formData = new FormData();\r\n // Merge AOI and Key AOI into one field \r\n let mergedAOI = [];\r\n if (currentAreasOfInterest.length > 0)\r\n {\r\n mergedAOI = [...mergedAOI,...currentAreasOfInterest]; \r\n }\r\n if (currentKeyAreas.length > 0)\r\n {\r\n mergedAOI = [...mergedAOI,...currentKeyAreas]; \r\n }\r\n if (currentProviderInterest.length > 0 )\r\n {\r\n mergedAOI = [...mergedAOI,...currentProviderInterest ];\r\n }\r\n if (currentTherapyTypes.length > 0 )\r\n {\r\n mergedAOI = [...mergedAOI,...currentTherapyTypes ];\r\n }\r\n\r\n // \r\n // Add fields \r\n formData.append('psychologistID',currentPsychologistID)\r\n formData.append('areasOfInterest',mergedAOI.map(aoi => aoi.issue))\r\n formData.append('fundingTypes',currentFundingTypes.map(ft => ft.id))\r\n formData.append('mbsServices',currentMbsServices.map(mbs => mbs.id))\r\n formData.append('bio',currentBio)\r\n // Field currently readOnly - formData.append('documentLink',currentDocumentLink);\r\n formData.append('education',currentEducation)\r\n formData.append('firstName',currentFirstName)\r\n formData.append('gender',currentGender)\r\n formData.append('hourlyrate',currentHourly)\r\n formData.append('isReducedFee',currentIsReducedFee)\r\n formData.append('reducedFee',currentReducedFee)\r\n formData.append('hourlyRateOverrideGap',currentHourlyRateOverrideGap)\r\n formData.append('hourlyRateOverrideRebate',currentHourlyRateOverrideRebate)\r\n formData.append('reducedFeeOverrideGap',currentReducedFeeOverrideGap)\r\n formData.append('reducedFeeOverrideRebate',currentReducedFeeOverrideRebate)\r\n formData.append('startedpracticingyear',currentStartedPracticingYear)\r\n formData.append('email',currentEmail)\r\n formData.append('waitingRoomURL',currentWaitingRoomURL)\r\n formData.append('mobilephone',currentMobile)\r\n formData.append('insurancenumber',currentInsuranceNumber)\r\n formData.append('providernumber',currentProviderNumber)\r\n formData.append('medicalPracticeID',currentMedicalPracticeID)\r\n formData.append('imageURL',currentProfilePicture)\r\n formData.append('newInsuranceFile',currentNewInsuranceFile)\r\n formData.append('newProfilePicture',currentNewProfilePicture)\r\n formData.append('pdfPassword',currentPDFPassword)\r\n formData.append('status',currentStatus)\r\n formData.append('surname',currentSurname)\r\n formData.append('timeZone',currentTimeZone)\r\n formData.append('providertype',currentProviderType)\r\n formData.append('ahpraRegistrationNo',currentAHPRARegistrationNo)\r\n formData.append('coviuRoomURL',currentCOVIURoomURL)\r\n formData.append('teleHealthProvider',currentTeleHealthProvider)\r\n formData.append('testprovider',currentTestProvider)\r\n formData.append('isRegistrationBlocked',currentIsRegistrationBlocked)\r\n formData.append('eapContractNDISAvailability', currentEapContractNDISAvailability)\r\n formData.append('autoBulkBillingConsentForm',currentAutoBulkBillingConsentForm)\r\n // Handle Supervisor Fields \r\n formData.append('isSupervisor',currentIsSupervisor)\r\n formData.append('supervisorBio',currentSupervisorBio)\r\n formData.append('supervisorEducation',currentSupervisorEducation)\r\n formData.append('supervisorHourlyRate',currentSupervisorHourlyRate)\r\n formData.append('supervisorAreas',currentSupervisorAreas)\r\n formData.append('specialisttype', currentSpecialistType)\r\n formData.append('facetoFaceBooking',currentFaceToFaceBooking)\r\n formData.append('insuranceexpiry',currentInsuranceExpiry)\r\n // Patch for bug where the address autocomplete sets the currentmedicalpractice, yet it reverts\r\n var medicalPractice = newpracticeaddress !== '' ? {...currentMedicalPractice, address1: newpracticeaddress} : currentMedicalPractice\r\n formData.append('medicalPractice', JSON.stringify(medicalPractice))\r\n // Check if there is an update or insert \r\n process.env.REACT_APP_DEBUG && console.log(...formData)\r\n process.env.REACT_APP_DEBUG && console.log ('Putting (Update)')\r\n // Save update \r\n dispatch(Admin.actions.putPsychologistDetail({formData}))\r\n // Close form\r\n setShow(false);\r\n }\r\n\r\n function InsuranceDownload(props) {\r\n // Check to see if link is populated\r\n if (!props.documentLink)\r\n {\r\n return(null)\r\n }\r\n //\r\n return (\r\n <Button variant=\"info\" size=\"sm\" href={props.documentLink} style={{ marginTop: 5, paddingTop: 6 }}>\r\n <DescriptionIcon fontSize=\"small\" style={{ marginRight: 6, marginTop: -1 }} /> Download\r\n </Button>\r\n )\r\n }\r\n \r\n const loadAPIKey = (thisPsychologist) => {\r\n setcurrentFirstName(thisPsychologist.firstname);\r\n setcurrentSurname(thisPsychologist.surname);\r\n setcurrentPsychologistID(thisPsychologist.id);\r\n // Load Form\r\n setShowAPIKey(true);\r\n }\r\n\r\n function getIndex(value, arr, prop) {\r\n for(var i = 0; i < arr.length; i++) {\r\n if(arr[i][prop] === value) {\r\n return i;\r\n }\r\n }\r\n return -1; // where the value doesn't exist\r\n }\r\n\r\n const handleSupervisorAreaToggle = (value) => () => {\r\n const currentIndex = getIndex(value.id, currentSupervisorAreas, 'id') //checked.find(r => r.id === value.id);\r\n const newChecked = [...currentSupervisorAreas];\r\n if (currentIndex === -1) {\r\n newChecked.push(value);\r\n } else {\r\n newChecked.splice(currentIndex, 1);\r\n }\r\n setCurrentSupervisorAreas(newChecked);\r\n };\r\n\r\n\r\n\r\n // const loadInvoiceDetail = (thisInvoice) => {\r\n // setcurrentInvoiceID(thisInvoice.id);\r\n // setcurrentInvoiceItems(thisInvoice.invoiceitems);\r\n // setShowInvoiceDetail(true);\r\n // }\r\n\r\n console.log(setCurrentInsuranceExpiry)\r\n\r\n const loadProfile = (thisRegistered) => {\r\n // dispatch(Admin.actions.fetchAvailability({ psychologistid: thisRegistered.id, userTZ: userTZ }));\r\n var tempMedicalPractice = thisRegistered ? medicalPractices.find(v => v.id === thisRegistered.medicalPracticeID) : null;\r\n loadMedicalPractitice(tempMedicalPractice)\r\n setcurrentMedicalPracticeID(thisRegistered.medicalPracticeID)\r\n setcurrentPsychologistID(thisRegistered.id)\r\n setcurrentFirstName(thisRegistered.firstname)\r\n setcurrentSurname(thisRegistered.surname)\r\n setcurrentGender(thisRegistered.gender)\r\n setcurrentEmail(thisRegistered.email)\r\n setcurrentMobile(thisRegistered.mobilephone)\r\n setcurrentBio(thisRegistered.bio)\r\n setcurrentProviderNumber(thisRegistered.providernumber)\r\n setcurrentSpecialistType(thisRegistered.specialisttype)\r\n setcurrentEducation(thisRegistered.education)\r\n setcurrentPDFPassword(thisRegistered.pdfPassword)\r\n // Remove Prefix $ character from Fields \r\n setcurrentIsReducedFee(thisRegistered.isReducedFee)\r\n setcurrentHourly(thisRegistered.hourlyrate.substring(0,1) === '$' ? thisRegistered.hourlyrate.substring(1) : thisRegistered.hourlyrate)\r\n setcurrentReducedFee(thisRegistered.reducedFee.substring(0,1) === '$' ? thisRegistered.reducedFee.substring(1) : thisRegistered.reducedFee)\r\n setcurrentHourlyRateOverrideGap(thisRegistered.hourlyRateOverrideGap.substring(0,1) === '$' ? thisRegistered.hourlyRateOverrideGap.substring(1) : thisRegistered.hourlyRateOverrideGap)\r\n setcurrentHourlyRateOverrideRebate(thisRegistered.hourlyRateOverrideRebate.substring(0,1) === '$' ? thisRegistered.hourlyRateOverrideRebate.substring(1) : thisRegistered.hourlyRateOverrideRebate)\r\n setcurrentReducedFeeOverrideGap(thisRegistered.reducedFeeOverrideGap.substring(0,1) === '$' ? thisRegistered.reducedFeeOverrideGap.substring(1) : thisRegistered.reducedFeeOverrideGap)\r\n setcurrentReducedFeeOverrideRebate(thisRegistered.reducedFeeOverrideRebate.substring(0,1) === '$' ? thisRegistered.reducedFeeOverrideRebate.substring(1) : thisRegistered.reducedFeeOverrideRebate)\r\n setcurrentMedicareRebate(thisRegistered.medicareRebate)\r\n setcurrentStandardFeeOutOfPocket(thisRegistered.stanardFeeOutofPocket)\r\n setcurrentReducedFeeOutOfPocket(thisRegistered.reducedFeeOutofPocket)\r\n //\r\n setcurrentStartedPracticingYear(thisRegistered.startedpracticingyear);\r\n setcurrentInsuranceNumber(thisRegistered.insurancenumber);\r\n setcurrentDocumentLink(thisRegistered.documentLink);\r\n setcurrentStatus(thisRegistered.status);\r\n setcurrentProfilePicture(thisRegistered.imageURL);\r\n setcurrentMfaConfigured(thisRegistered.mfaconfigured);\r\n setcurrentFaceToFaceBooking(thisRegistered.facetoFaceBooking)\r\n var ftypes = fundingTypes.filter(( {id} ) => thisRegistered.fundingTypes.includes(id))\r\n setcurrentFundingTypes(ftypes);\r\n var aoi = aoi_focus.filter(( {issue} ) => thisRegistered.areasOfInterest.includes(issue))\r\n setcurrentAreasOfInterest(aoi);\r\n var keyaoi = aoi_other.filter(( {issue} ) => thisRegistered.areasOfInterest.includes(issue))\r\n setcurrentKeyAreas(keyaoi);\r\n var mbs = mbsServices.filter(( {id} ) => thisRegistered.mbsServices.includes(id))\r\n setcurrentMbsServices(mbs);\r\n var providerInterest = areasOfProviderInterest.filter(( {issue} ) => thisRegistered.areasOfInterest.includes(issue))\r\n setcurrentProviderInterest(providerInterest);\r\n var therapyTypes = areasOfTherapyTypes.filter(( {issue} ) => thisRegistered.areasOfInterest.includes(issue))\r\n setcurrentTherapyTypes(therapyTypes);\r\n // setcurrentCcExpiry(thisRegistered.ccExpiry);\r\n // setcurrentCcLast4(thisRegistered.ccLast4);\r\n setcurrentTimeZone(thisRegistered.timeZone);\r\n setcurrentWaitingRoomURL(thisRegistered.waitingRoomURL);\r\n // setcurrentInvoices(thisRegistered.invoices);\r\n setcurrentAPIKey(thisRegistered.medipassapikey);\r\n setcurrentProviderType(thisRegistered.providertype);\r\n setcurrentProviderDescription(thisRegistered.providerdescription);\r\n setcurrentAHPRARegistrationNo(thisRegistered.ahpraRegistrationNo);\r\n setcurrentCOVIURoomURL(thisRegistered.coviuRoomURL);\r\n setcurrentTeleHealthProvider(thisRegistered.teleHealthProvider)\r\n setcurrentTestProvider(thisRegistered.testprovider)\r\n setcurrentIsRegistrationBlocked(thisRegistered.isRegistrationBlocked)\r\n setcurrentEapContractNDISAvailability(thisRegistered.eapContractNDISAvailability)\r\n setcurrentAutoBulkBillingConsentForm(thisRegistered.autoBulkBillingConsentForm)\r\n // Supervisor Fields\r\n setCurrentIsSupervisor(thisRegistered.isSupervisor)\r\n setCurrentSupervisorBio(thisRegistered.supervisorBio)\r\n setCurrentSupervisorEducation(thisRegistered.supervisorEducation)\r\n setCurrentSupervisorHourlyRate(thisRegistered.supervisorHourlyRate)\r\n setCurrentSupervisorAreas(thisRegistered.supervisorAreas)\r\n setCurrentInsuranceExpiry(thisRegistered.insuranceexpiry)\r\n // setcurrentInvoiceColumns([\r\n // { field: 'id', headerName: 'ID', width: 100, \r\n // renderCell: (params) => (\r\n // <strong>\r\n // <div onClick={() => loadInvoiceDetail(thisRegistered.invoices.find(invoice => invoice.id === params.row.id))} className=\"cell-Link\">\r\n // {params.value}\r\n // </div>\r\n // </strong>\r\n // ), \r\n // },\r\n // { field: 'invoiceDate', type: 'date', headerName: 'Date', width: 210 },\r\n // { field: 'total', headerName: 'Total', width: 250 },\r\n // { field: 'status', headerName: 'Status', width: 200 },\r\n // ]);\r\n setcurrentNewPassword(null);\r\n setcurrentNewPasswordConfirmation(null);\r\n\r\n // Load Form\r\n setShow(true);\r\n }\r\n \r\n var [newpracticeaddress, setnewpracticeaddress] = useState(''); // for weird bug in Autocompleteaddress where setting state gets undone\r\n var [currentMedicalPractice, setcurrentMedicalPractice] = useState({ address1: '' });\r\n var [currentMedicalPracticeID, setcurrentMedicalPracticeID] = useState();\r\n var [currentTimeZone, setcurrentTimeZone] = useState();\r\n var [currentPsychologistID,setcurrentPsychologistID] = useState();\r\n var [currentFirstName,setcurrentFirstName] = useState();\r\n var [currentSurname,setcurrentSurname] = useState();\r\n var [currentGender, setcurrentGender] = useState();\r\n var [currentEmail,setcurrentEmail] = useState();\r\n var [currentMobile,setcurrentMobile] = useState();\r\n var [currentBio,setcurrentBio] = useState();\r\n var [currentEducation,setcurrentEducation] = useState();\r\n var [currentPDFPassword,setcurrentPDFPassword] = useState();\r\n //\r\n var [currentHourly,setcurrentHourly] = useState();\r\n var [currentIsReducedFee,setcurrentIsReducedFee] = useState();\r\n var [currentHourlyRateOverrideGap,setcurrentHourlyRateOverrideGap] = useState();\r\n var [currentHourlyRateOverrideRebate,setcurrentHourlyRateOverrideRebate] = useState();\r\n var [currentReducedFeeOverrideGap,setcurrentReducedFeeOverrideGap] = useState();\r\n var [currentReducedFeeOverrideRebate,setcurrentReducedFeeOverrideRebate] = useState();\r\n var [currentReducedFee,setcurrentReducedFee] = useState();\r\n var [currentMedicareRebate,setcurrentMedicareRebate] = useState()\r\n var [currentStandardFeeOutOfPocket,setcurrentStandardFeeOutOfPocket] = useState()\r\n var [currentReducedFeeOutOfPocket,setcurrentReducedFeeOutOfPocket] = useState()\r\n //\r\n var [currentInsuranceNumber,setcurrentInsuranceNumber] = useState();\r\n var [currentInsuranceExpiry,setCurrentInsuranceExpiry] = useState();\r\n var [currentProviderNumber,setcurrentProviderNumber] = useState(); \r\n var [currentDocumentLink,setcurrentDocumentLink] = useState();\r\n var [currentNewInsuranceFile,setcurrentNewInsuranceFile] = useState();\r\n var [currentStatus,setcurrentStatus] = useState();\r\n var [currentProviderType,setcurrentProviderType] = useState();\r\n var [currentAreasOfInterest,setcurrentAreasOfInterest] = useState();\r\n var [currentKeyAreas,setcurrentKeyAreas] = useState();\r\n var [currentProviderInterest,setcurrentProviderInterest] = useState();\r\n var [currentTherapyTypes,setcurrentTherapyTypes] = useState();\r\n var [currentMbsServices,setcurrentMbsServices] = useState();\r\n var [currentFaceToFaceBooking,setcurrentFaceToFaceBooking] = useState()\r\n // var [currentCcExpiry,setcurrentCcExpiry] = useState();\r\n // var [currentCcLast4,setcurrentCcLast4] = useState();\r\n var [currentFundingTypes,setcurrentFundingTypes] = useState([]); \r\n // var [currentInvoices, setcurrentInvoices] = useState([]); \r\n // var [currentInvoiceColumns,setcurrentInvoiceColumns] = useState([]);\r\n var [currentWaitingRoomURL,setcurrentWaitingRoomURL] = useState();\r\n var [currentProfilePicture,setcurrentProfilePicture] = useState();\r\n var [currentNewProfilePicture,setcurrentNewProfilePicture] = useState();\r\n var [currentStartedPracticingYear,setcurrentStartedPracticingYear] = useState(2000);\r\n // var [currentInvoiceID,setcurrentInvoiceID] = useState();\r\n // var [currentInvoiceItems,setcurrentInvoiceItems] = useState();\r\n var [currentProviderDescription,setcurrentProviderDescription] = useState();\r\n var [currentAPIKey,setcurrentAPIKey] = useState();\r\n var [currentNewPassword,setcurrentNewPassword] = useState();\r\n var [currentNewPasswordConfirmation,setcurrentNewPasswordConfirmation] = useState();\r\n const [currentAHPRARegistrationNo,setcurrentAHPRARegistrationNo] = useState();\r\n const [currentCOVIURoomURL,setcurrentCOVIURoomURL] = useState();\r\n const [currentMfaConfigured,setcurrentMfaConfigured] = useState();\r\n const [currentTeleHealthProvider,setcurrentTeleHealthProvider] = useState();\r\n const [currentTestProvider,setcurrentTestProvider] = useState();\r\n const [currentIsRegistrationBlocked,setcurrentIsRegistrationBlocked] = useState();\r\n const [currentEapContractNDISAvailability,setcurrentEapContractNDISAvailability] = useState()\r\n const [currentAutoBulkBillingConsentForm,setcurrentAutoBulkBillingConsentForm] = useState()\r\n // Supervisor Fields\r\n const[currentIsSupervisor,setCurrentIsSupervisor] = useState()\r\n const[currentSupervisorBio,setCurrentSupervisorBio] = useState()\r\n const[currentSupervisorEducation,setCurrentSupervisorEducation] = useState()\r\n const[currentSupervisorHourlyRate,setCurrentSupervisorHourlyRate] = useState()\r\n const[currentSupervisorAreas,setCurrentSupervisorAreas] = useState()\r\n const [key, setKey] = React.useState('personalDetails');\r\n\r\n function handleTestProviderChange(value) {\r\n setcurrentTestProvider(value);\r\n }\r\n \r\n const columns = [\r\n { field: 'id', headerName: 'ID', hide: true },\r\n { field: 'fullname', headerName: 'Name', sortable: true, width: 190,\r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadProfile(registered.find(psychologist => psychologist.id === params.row.id))} className=\"cell-Link\">\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), },\r\n { field: 'email', headerName: 'Email', width: 250,\r\n renderCell: (params) => (\r\n <CopyToClipboard text={params.row.email}>\r\n <span className=\"cell-Link\" style={{ fontWeight: 500}}>{params.row.email}</span>\r\n </CopyToClipboard>\r\n ) \r\n },\r\n { field: 'hourlyrate', headerName: 'Hourly', width: 110 },\r\n { field: 'practicename', headerName: 'Clinic', width: 250 },\r\n { field: 'referralCount', headerName: 'Clients', width: 110 },\r\n { field: 'providertype', headerName: 'Type', width: 100 },\r\n { field: 'created', headerName: 'Joined', sortable: true, width: 135, renderCell: (params) => (format(new Date(params.row.created), \"dd-MM-yyyy\")), cellClassName: 'grid-mono-font' },\r\n ]; \r\n\r\n const initMedicalPractice = () => {\r\n return { id: 0, abn: '', practicename: '', phone: '', address1: '', email: '', website: '', logoURL: '', practiceType: 'Psychologist' }\r\n }\r\n \r\n const getMedicalPracticeOption = (option, value) => {\r\n if (option.id === value.id) {\r\n return option\r\n } else {\r\n return initMedicalPractice();\r\n }\r\n }\r\n\r\n const loadMedicalPractitice = (thisMedicalPractice) => {\r\n setcurrentMedicalPractice(thisMedicalPractice ? thisMedicalPractice : initMedicalPractice())\r\n }\r\n\r\n\r\n const handleToggle = () => {\r\n if (currentIsReducedFee === 'Y')\r\n {\r\n setcurrentIsReducedFee('N')\r\n }\r\n else\r\n {\r\n setcurrentIsReducedFee('Y')\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <h4>\r\n Registered Providers\r\n </h4>\r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10 }}>\r\n <Grid item style={{ marginTop: 2, marginLeft: 2 }}> \r\n <Grid container> \r\n <Grid item> \r\n <InputGroup size=\"sm\">\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -3 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={filters.registeredTerm}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'registeredTerm', filterValue: event.target.value }))}\r\n autoComplete='OFF'\r\n style={{ height: 35, backgroundColor: filters.registeredTerm.length > 0 ? 'rgb(250 239 195)' : 'white' }}\r\n />\r\n <InputGroup.Append onClick={() => dispatch(Admin.actions.setFilters({ filterName: 'registeredTerm', filterValue: '' }))}>\r\n <InputGroup.Text>\r\n <ClearIcon fontSize=\"small\" style={{ color: filters.registeredTerm.length > 0 ? '#222222' : 'silver', marginLeft: -3 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Append>\r\n </InputGroup>\r\n </Grid>\r\n <Grid item style={{ marginLeft: 10, paddingRight: 10 }}> \r\n <Form.Control as=\"select\" size=\"sm\" style={{ height: 35 }} defaultValue={filters.registeredProviderType} onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'registeredProviderType', filterValue: event.target.value }))}>\r\n <option value=\"All\">All</option>\r\n <option value=\"PsychologistClinical\">Psychologist/Clinical</option>\r\n <option value=\"Psychologist\">Psychologist</option>\r\n <option value=\"Financial\">Financial Counsellor</option>\r\n <option value=\"Clinical\">Clinical Psychologist</option>\r\n <option value=\"GP\">GP</option>\r\n <option value=\"Provisional\">Provisional</option>\r\n <option value=\"Social\">MH Social Worker</option>\r\n <option value=\"Nurse\">Mental Health Nurse</option>\r\n <option value=\"Occupational\">Occupational Therapist</option>\r\n <option value=\"Supervisor\">Supervisor</option>\r\n </Form.Control>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <Form.Control as=\"select\" size=\"sm\" style={{ height: 35 }} defaultValue={filters.registeredStatus} onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'registeredStatus', filterValue: event.target.value }))}>\r\n <option value=\"All\">All</option>\r\n <option value='Active'>Active</option>\r\n <option value='OnHold'>On Hold</option>\r\n <option value='Archived'>Archived</option>\r\n </Form.Control>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <Autocomplete\r\n id=\"searchAOI\"\r\n variant=\"outlined\"\r\n options={areasOfInterest}\r\n getOptionLabel={(option) => ((filters.registeredAOI === 'All' && !option.issue) || !option.issue) ? 'All' : option.issue}\r\n value={filters.registeredAOI === 'All' ? null : filters.registeredAOI}\r\n onChange={(event, newValue) => dispatch(Admin.actions.setFilters({ filterName: 'registeredAOI', filterValue: newValue ? newValue : 'All' }))}\r\n style={{ minWidth: 200, fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n label=\"Area of Interest\"\r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"AOISelector\"\r\n style={{ backgroundColor: \"white\", margin: 0, padding: 0, maxWidth: 200 }}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <Autocomplete\r\n id=\"searchProviderInterest\"\r\n variant=\"outlined\"\r\n options={areasOfProviderInterest}\r\n getOptionLabel={(option) => ((filters.registeredInterest === 'All' && !option.issue) || !option.issue) ? 'All' : option.issue}\r\n value={filters.registeredInterest === 'All' ? null : filters.registeredInterest}\r\n onChange={(event, newValue) => dispatch(Admin.actions.setFilters({ filterName: 'registeredInterest', filterValue: newValue ? newValue : 'All' }))}\r\n style={{ minWidth: 200, fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n label=\"Provider Interest\"\r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"ProviderInterestSelector\"\r\n style={{ backgroundColor: \"white\", margin: 0, padding: 0, maxWidth: 200 }}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <Autocomplete\r\n id=\"searchTherapyTypes\"\r\n variant=\"outlined\"\r\n options={areasOfTherapyTypes}\r\n getOptionLabel={(option) => ((filters.registeredTherapy === 'All' && !option.issue) || !option.issue) ? 'All' : option.issue}\r\n value={filters.registeredTherapy === 'All' ? null : filters.registeredTherapy}\r\n onChange={(event, newValue) => dispatch(Admin.actions.setFilters({ filterName: 'registeredTherapy', filterValue: newValue ? newValue : 'All' }))}\r\n style={{ minWidth: 200, fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n label=\"Therapy Types\"\r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"TherapyTypesSelector\"\r\n style={{ backgroundColor: \"white\", margin: 0, padding: 0, maxWidth: 200 }}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <Form.Control as=\"select\" size=\"sm\" style={{ height: 35 }} defaultValue={filters.registeredPsychologistsType} onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'registeredPsychologistsType', filterValue: event.target.value }))}>\r\n <option value=\"All\">All</option>\r\n <option value=\"nthqldphn\">Nth QLD PHN</option>\r\n </Form.Control>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n\r\n <Paper style={{ height: 700 }}>\r\n <DataGrid \r\n rows={filteredRegistered} \r\n columns={columns} \r\n pageSize={10} \r\n rowsPerPageOptions={[10]} \r\n checkboxSelection={false} \r\n sortModel={[{ field: 'created', sort: 'desc' }]}\r\n />\r\n </Paper>\r\n\r\n {/* <Demo /> */}\r\n\r\n <Modal show={show} onHide={handleClose} dialogClassName=\"edit-psychologist-dialog-modal\" style={{dataBsFocus:false}}>\r\n <Modal.Header closeButton className=\"edit-psychologist-modal\">\r\n <Modal.Title>Edit Profile - {currentFirstName} {currentSurname} ({currentProviderDescription})</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"edit-psychologist-modal\">\r\n <Form onSubmit={putPsychologist}>\r\n <Tabs\r\n id=\"EditModal\"\r\n activeKey={key}\r\n onSelect={(k) => setKey(k)}\r\n mountOnEnter={true}\r\n >\r\n <Tab eventKey=\"personalDetails\" title=\"Profile\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}> \r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>First Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"FirstName\" defaultValue={currentFirstName} onBlur={(event) => setcurrentFirstName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Surname</Form.Label>\r\n <Form.Control type=\"text\" name=\"Surname\" defaultValue={currentSurname} onBlur={(event) => setcurrentSurname(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Gender</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentGender} onBlur={(event) => setcurrentGender(event.target.value)}>\r\n <option value=\"Male\">Male</option>\r\n <option value=\"Female\">Female</option>\r\n <option value=\"Other\">Other</option>\r\n <option value=\"Prefer not to say\">Prefer not to say</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label>TimeZone</Form.Label>\r\n <Autocomplete\r\n id=\"profileTimeZone\"\r\n variant=\"outlined\"\r\n options={timeZone}\r\n getOptionLabel={(option) => option.name}\r\n value={timeZone.find(v => v.systemName === currentTimeZone) || ''}\r\n onChange={(event, newValue) => handleTimeZoneAutocompleteChange('TimeZone', event, newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"TimeZoneSelector\"\r\n style={{backgroundColor: \"white\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Email</Form.Label>\r\n <Form.Control type=\"text\" name=\"email\" defaultValue={currentEmail} onBlur={(event) => setcurrentEmail(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Mobile Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"mobilephone\" defaultValue={currentMobile} onBlur={(event) => setcurrentMobile(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n {(currentProviderType === 'Psychologist' || currentProviderType === 'Clinical' || currentProviderType === 'Occupational') ?\r\n <>\r\n <Col md=\"5\">\r\n <Form.Group >\r\n <Form.Label>Education</Form.Label>\r\n <Form.Control type=\"text\" name=\"Education\" defaultValue={currentEducation} onBlur={(event) => setcurrentEducation(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </>\r\n :\r\n null\r\n }\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label style={{ fontWeight: 500 }}>Is this a test provider</Form.Label>\r\n <Select \r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n id='testProvider'\r\n aria-label='Select Test Provider'\r\n name='testProvider'\r\n value={currentTestProvider} \r\n onChange={(event) => handleTestProviderChange(event.target.value)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: '#fff' }}>\r\n <MenuItem key='No' value='0'>No</MenuItem>\r\n <MenuItem key='Yes' value='1'>Yes</MenuItem>\r\n </Select>\r\n </Form.Group>\r\n </Col> \r\n </Row>\r\n\r\n {/* Medical Practice */} \r\n <Row>\r\n <Col md=\"4\">\r\n {(currentProviderType === 'Financial') ?\r\n <h4>Organisation</h4>\r\n :\r\n <h4>Practice</h4>\r\n }\r\n </Col>\r\n <Col md=\"2\" style={{ textAlign: \"right\"}}>\r\n <SearchIcon style={{ marginTop: 8, marginRight: -13 }} />\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group style={{ width: \"100%\", marginBottom: 0 }}>\r\n <Autocomplete\r\n id=\"profileMedicalPractice\"\r\n variant=\"outlined\"\r\n options={medicalPractices}\r\n getOptionLabel={(option) => option.practicename }\r\n getOptionSelected={(option, value) => getMedicalPracticeOption(option, value)}\r\n value={currentMedicalPractice}\r\n onChange={(event, newValue) => loadMedicalPractitice(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"MedicalPracticeSelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n {(currentProviderType === 'Financial') ?\r\n <Form.Label>Organisation Name</Form.Label>\r\n :\r\n <Form.Label>Practice Name</Form.Label>\r\n }\r\n <Form.Control type=\"text\" name=\"practicename\" value={currentMedicalPractice ? currentMedicalPractice.practicename : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, practicename: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>ABN</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentAbn\" value={currentMedicalPractice ? currentMedicalPractice.abn : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, abn: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Contact Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentPhone\" value={currentMedicalPractice ? currentMedicalPractice.phone : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, phone: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"9\">\r\n <Form.Group >\r\n <Form.Label>Practice Address</Form.Label>\r\n <PlacesAutoComplete \r\n currentID={currentMedicalPractice.id}\r\n currentfulladdress={currentMedicalPractice.address1}\r\n setcurrentfulladdress = {(value) => setnewpracticeaddress(value)} \r\n setcurrentLatitude = {(value) => setcurrentMedicalPractice({...currentMedicalPractice, latitude: value})}\r\n setcurrentLongitude = {(value) => setcurrentMedicalPractice({...currentMedicalPractice, longitude: value})}\r\n setcurrentPostCode = {(value) => setcurrentMedicalPractice({...currentMedicalPractice, postcode: value})}\r\n />\r\n {/* <Form.Control type=\"text\" name=\"currentAddress1\" value={currentMedicalPractice ? currentMedicalPractice.address1 : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, address1: event.target.value})} autoComplete='new-password' /> */}\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Practice Email</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentEmail\" value={currentMedicalPractice ? currentMedicalPractice.email : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, email: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n <Row>\r\n <Col md=\"12\" className=\"quill-field\">\r\n <Form.Group>\r\n <Form.Label>Bio</Form.Label>\r\n <ReactQuill \r\n theme=\"snow\"\r\n value={currentBio}\r\n onChange={setcurrentBio} \r\n />\r\n {/* <Editor apiKey='wnbo4skoom9pnqmbfdjvwn8xdl1nfjtwhc2ofsqb1myqn5lo'\r\n value={currentBio}\r\n onEditorChange={(newValue, editor)=>setcurrentBio(newValue)}\r\n init={{ branding: false, statusbar: false, height: 500 }}\r\n /> */}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Status</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentStatus} onBlur={(event) => setcurrentStatus(event.target.value)}>\r\n <option value=\"Active\">Active</option>\r\n <option value=\"Archived\">Archived</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Provider Type</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentProviderType} onBlur={(event) => setcurrentProviderType(event.target.value)}>\r\n <option value=\"Psychologist\">Psychologist</option>\r\n <option value=\"Financial\">Financial Counsellor</option>\r\n <option value=\"Clinical\">Clinical Psychologist</option>\r\n <option value=\"GP\">GP</option>\r\n <option value=\"Provisional\">Provisional Psychologist</option>\r\n <option value=\"Social\">MH Social Worker</option>\r\n <option value=\"Nurse\">Mental Health Nurse</option>\r\n <option value=\"Occupational\">Occupational Therapist</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Specialist Type</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentSpecialistType} onBlur={(event) => setcurrentSpecialistType(event.target.value)}>\r\n <option value=\"Standard\">Standard</option>\r\n <option value=\"nthqldphn\">Nth QLD PHN</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n\r\n </Row>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Create Consent Forms on Bulk Billing Booking</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentAutoBulkBillingConsentForm} onBlur={(event) => setcurrentAutoBulkBillingConsentForm(event.target.value)}>\r\n <option value=\"Y\">Yes</option>\r\n <option value=\"N\">No</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Allow Provider to Receive New Registrations</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentIsRegistrationBlocked} onBlur={(event) => setcurrentIsRegistrationBlocked(event.target.value)}>\r\n <option value=\"N\">Yes</option>\r\n <option value=\"Y\">No</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Allow Provider to Create EAP/Contract/NDIS Availability</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentEapContractNDISAvailability} onBlur={(event) => setcurrentEapContractNDISAvailability(event.target.value)}>\r\n <option value=\"Y\">Yes</option>\r\n <option value=\"N\">No</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n\r\n </Row>\r\n </Tab>\r\n <Tab eventKey=\"professionalDetails\" title=\"Professional\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}> \r\n <>\r\n {(currentProviderType === 'Psychologist' || currentProviderType === 'Clinical' || currentProviderType === 'GP' || currentProviderType === 'Provisional' || currentProviderType === 'Occupational' || currentProviderType === 'Social' || currentProviderType === 'Nurse') ?\r\n <>\r\n <Row>\r\n {(currentProviderType === 'Psychologist' || currentProviderType === 'Clinical' || currentProviderType === 'Provisional' || currentProviderType === 'Occupational') ? \r\n <>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>AHPRA Registration Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"AHPRARegistrationNo\" defaultValue={currentAHPRARegistrationNo} onBlur={(event) => setcurrentAHPRARegistrationNo(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </>\r\n :\r\n null\r\n }\r\n {(currentProviderType === 'Psychologist' || currentProviderType === 'Clinical' || currentProviderType === 'Occupational' || currentProviderType === 'GP') ?\r\n <>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Provider Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"ProviderNumber\" defaultValue={currentProviderNumber} onBlur={(event) => setcurrentProviderNumber(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </>\r\n :\r\n null\r\n }\r\n {currentProviderType !== 'Provisional' ? \r\n <>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Insurance No.</Form.Label>\r\n <Form.Control type=\"text\" name=\"InsuranceNumber\" defaultValue={currentInsuranceNumber} onBlur={(event) => setcurrentInsuranceNumber(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </>\r\n :\r\n null\r\n }\r\n {(currentProviderType === 'Psychologist' || currentProviderType === 'Clinical'|| currentProviderType === 'Occupational') ?\r\n <>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Year First Practiced</Form.Label>\r\n <Form.Control type=\"text\" name=\"StartedPracticingYear\" defaultValue={currentStartedPracticingYear} onBlur={(event) => setcurrentStartedPracticingYear(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </>\r\n :\r\n null\r\n }\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>PDF Password</Form.Label>\r\n <Form.Control type=\"text\" name=\"PdfPassword\" defaultValue={currentPDFPassword} onBlur={(event) => setcurrentPDFPassword(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {currentProviderType === 'Psychologist' || currentProviderType === 'Clinical' || currentProviderType === 'Social' || currentProviderType === 'Nurse' || currentProviderType ==='Occupational' ? \r\n <>\r\n <Form.Label>Client Billing Settings</Form.Label><Form.Label onClick={() => registrationView('Full Fee')} style={{ marginLeft:10, color: 'blue', cursor:'pointer' }}>(Preview Full Fee)</Form.Label><Form.Label onClick={() => registrationView('Reduced Gap')} style={{ marginLeft:10, color: 'blue', cursor:'pointer' }}>(Preview Reduced Fee)</Form.Label>\r\n <Row> \r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label >Full Fee Rate (Total) *</Form.Label>\r\n <InputGroup>\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>$</InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control type=\"text\" name=\"Hourly\" defaultValue={currentHourly} onBlur={(event) => setcurrentHourly(event.target.value)} autoComplete='new-password' />\r\n </InputGroup>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Full Fee Gap (Override)</Form.Label>\r\n <InputGroup>\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>$</InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control type=\"text\" name=\"HourlyRateOverrideGap\" defaultValue={currentHourlyRateOverrideGap} onBlur={(event) => setcurrentHourlyRateOverrideGap(event.target.value)} autoComplete='new-password' />\r\n </InputGroup>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Full Fee Rebate (Override)</Form.Label>\r\n <InputGroup>\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>$</InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control type=\"text\" name=\"HourlyRateOverrideRebate\" defaultValue={currentHourlyRateOverrideRebate} onBlur={(event) => setcurrentHourlyRateOverrideRebate(event.target.value)} autoComplete='new-password' />\r\n </InputGroup>\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Reduced Fee Rate (Total) *</Form.Label>\r\n <InputGroup>\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>$</InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control type=\"text\" name=\"ReducedFee\" defaultValue={currentReducedFee} onBlur={(event) => setcurrentReducedFee(event.target.value)} autoComplete='new-password' />\r\n </InputGroup>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Reduced Fee Gap (Override)</Form.Label>\r\n <InputGroup>\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>$</InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control type=\"text\" name=\"ReducedFeeOverrideGap\" defaultValue={currentReducedFeeOverrideGap} onBlur={(event) => setcurrentReducedFeeOverrideGap(event.target.value)} autoComplete='new-password' />\r\n </InputGroup>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Reduced Fee Rebate (Override)</Form.Label>\r\n <InputGroup>\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>$</InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control type=\"text\" name=\"ReducedFeeOverrideRebate\" defaultValue={currentReducedFeeOverrideRebate} onBlur={(event) => setcurrentReducedFeeOverrideRebate(event.target.value)} autoComplete='new-password' />\r\n </InputGroup>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group>\r\n <Checkbox aria-label='Offer Client Pricing Flexibility' name='isReducedFee' checked={currentIsReducedFee === 'Y' ? true : false} onClick={() => handleToggle()} style={{ paddingTop: 6, paddingLeft: 0 }} />\r\n <span style={{ fontWeight:600 }} >Offer flexible fees based on client circumstances </span>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n </>\r\n : \r\n null\r\n }\r\n </>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>TeleConference Provider Selection</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentTeleHealthProvider} onBlur={(event) => setcurrentTeleHealthProvider(event.target.value)}>\r\n <option value=\"COVIU\">COVIU</option>\r\n <option value=\"Alternate Meeting\">Other Meeting Room</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"5\">\r\n <Form.Group >\r\n <Form.Label>COVIU URL</Form.Label>\r\n <Form.Control type=\"text\" name=\"coviuRoomURL\" defaultValue={currentCOVIURoomURL} onBlur={(event) => setcurrentCOVIURoomURL(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Alternate link (Zoom etc)</Form.Label>\r\n <Form.Control type=\"text\" name=\"WaitingRoomURL\" defaultValue={currentWaitingRoomURL} onBlur={(event) => setcurrentWaitingRoomURL(event.target.value)} autoComplete='new-password' /> \r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {currentSpecialistType === 'nthqldphn' ?\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group>\r\n <Form.Label>Offer Face to Face Booking (when face to face availability is set)</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentFaceToFaceBooking} onBlur={(event) => setcurrentFaceToFaceBooking(event.target.value)}>\r\n <option value=\"N\">No</option>\r\n <option value=\"Y\">Yes</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n :\r\n null\r\n }\r\n\r\n <Row> \r\n {(currentProviderType === 'Psychologist' || currentProviderType === 'Clinical' || currentProviderType === 'GP' || currentProviderType === 'Occupational' || currentProviderType === 'Social' || currentProviderType === 'Nurse') ?\r\n <>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Insurance Expiry</Form.Label>\r\n <MuiPickersUtilsProvider utils={DateFnsUtils} >\r\n <KeyboardDatePicker\r\n name='insuranceexpiry'\r\n inputVariant=\"outlined\"\r\n format=\"yyyy-MM-dd\"\r\n margin=\"dense\"\r\n id='insuranceexpiry'\r\n style={{marginTop: 28, marginLeft: -110}}\r\n value={currentInsuranceExpiry}\r\n autoOk={true}\r\n size=\"small\"\r\n onChange={(event, newValue) => setCurrentInsuranceExpiry(newValue)}\r\n className=\"formquestion-datepicker summary-date\" \r\n InputProps={{ classes: { input: 'input-date-picker' }, }}\r\n />\r\n </MuiPickersUtilsProvider> \r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group>\r\n <Form.Label>Insurance Document:</Form.Label>\r\n <Form.Control type=\"file\" name=\"NewInsuranceFile\" onChange={(event) => handleFileFieldChangeNewInsuranceFile('NewInsuranceFile', event)} className=\"form-control\" style={{ paddingTop: 6, paddingLeft: 6 }} />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group>\r\n <div style={{ width: \"100%\", paddingTop: 25 }}>\r\n <InsuranceDownload documentLink={currentDocumentLink} />\r\n </div>\r\n </Form.Group>\r\n </Col>\r\n\r\n\r\n </>\r\n :\r\n null\r\n } \r\n </Row>\r\n <Row>\r\n <Col md=\"10\">\r\n <Form.Group >\r\n <Form.Label>Areas of Interest (Select all that apply) </Form.Label>\r\n <Autocomplete\r\n id=\"searchAOI\"\r\n variant=\"outlined\"\r\n multiple\r\n options={(currentProviderType === 'Financial') ? FinancialAreasOfInterest : aoi_focus }\r\n getOptionLabel={(option) => option.issue }\r\n value={currentAreasOfInterest}\r\n onChange={(event, newValue) => setcurrentAreasOfInterest(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: \"white\", }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"AOISelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {(currentProviderType !== 'GP') ?\r\n <>\r\n <Row>\r\n <Col md=\"10\">\r\n <Form.Group >\r\n <Form.Label>Key Areas (Select all that apply) </Form.Label>\r\n <Autocomplete\r\n id=\"searchKeyAOI\"\r\n variant=\"outlined\"\r\n multiple\r\n options={(currentProviderType === 'Financial') ? FinancialAreasOfInterest : aoi_other }\r\n getOptionLabel={(option) => option.issue }\r\n value={currentKeyAreas}\r\n onChange={(event, newValue) => setcurrentKeyAreas(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: \"white\", }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"AOIKeySelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {(currentProviderType !== 'GP') ?\r\n <>\r\n <Row>\r\n <Col md=\"10\">\r\n <Form.Group >\r\n <Form.Label>Client Interest Areas (Select all that apply) </Form.Label>\r\n <Autocomplete\r\n id=\"searchInterestAOI\"\r\n variant=\"outlined\"\r\n multiple\r\n options={areasOfProviderInterest}\r\n getOptionLabel={(option) => option.issue }\r\n value={currentProviderInterest}\r\n onChange={(event, newValue) => setcurrentProviderInterest(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: \"white\", }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"AOIInterestSelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"10\">\r\n <Form.Group >\r\n <Form.Label>Therapy Types (Select all that apply) </Form.Label>\r\n <Autocomplete\r\n id=\"searchTherapyAOI\"\r\n variant=\"outlined\"\r\n multiple\r\n options={areasOfTherapyTypes}\r\n getOptionLabel={(option) => option.issue }\r\n value={currentTherapyTypes}\r\n onChange={(event, newValue) => setcurrentTherapyTypes(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: \"white\", }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"AOITherapyTypeSelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"10\">\r\n <Form.Group >\r\n <Form.Label>Accepted Funding Types (Select all that apply) </Form.Label>\r\n <Autocomplete\r\n id=\"fundingTypes\"\r\n variant=\"outlined\"\r\n multiple\r\n options={fundingTypes}\r\n getOptionLabel={(option) => option.type }\r\n value={currentFundingTypes}\r\n onChange={(event, newValue) => setcurrentFundingTypes(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: \"white\", }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"AOISelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n {(currentProviderType === 'Psychologist' || currentProviderType === 'Clinical' || currentProviderType === 'Occupational') ?\r\n <>\r\n <Row>\r\n <Col md=\"10\">\r\n <Form.Group >\r\n <Form.Label>MBS Services (Select all that apply) </Form.Label>\r\n <Autocomplete\r\n id=\"mbsServices\"\r\n variant=\"outlined\"\r\n multiple\r\n options={mbsServices}\r\n getOptionLabel={(option) => option.serviceName}\r\n value={currentMbsServices}\r\n onChange={(event, newValue) => setcurrentMbsServices(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: \"white\", }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"AOISelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group> \r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n } \r\n </>\r\n :\r\n null\r\n }\r\n </Tab>\r\n <Tab eventKey=\"notes\" title=\"Comms/Notes\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}>\r\n <Notes type=\"Psychologist\" pkid={currentPsychologistID} medicalPractice={currentMedicalPractice} />\r\n </Tab>\r\n <Tab eventKey=\"availability\" title=\"Availability\" style={{backgroundColor: \"rgb(252, 252, 252)\", padding: 0}}>\r\n <AvailabilityNew\r\n mainID={currentPsychologistID}\r\n currentFundingTypes={currentFundingTypes}\r\n userTZ={userTZ}\r\n /> \r\n </Tab>\r\n <Tab eventKey=\"bookings\" title=\"Bookings\" style={{backgroundColor: \"rgb(252, 252, 252)\", padding: 0}}>\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\" style={{ padding: 16 }}>\r\n <Grid item><h4 style={{ marginBottom: 0 }}>Bookings</h4></Grid>\r\n </Grid>\r\n <BookingsList\r\n type='psychologist'\r\n id={currentPsychologistID && currentPsychologistID}\r\n userTZ={userTZ}\r\n providerType={currentProviderType}\r\n />\r\n </>\r\n </Tab>\r\n {(currentProviderType !== 'Financial') ?\r\n <Tab eventKey=\"referrals\" title=\"Referrals\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}> \r\n <ReferralsView \r\n viewerFullName={`${currentFirstName} ${currentSurname}`}\r\n type=\"psychologist\"\r\n id={currentPsychologistID}\r\n />\r\n </Tab>\r\n :\r\n null\r\n }\r\n {(currentProviderType !== 'Financial') ?\r\n <Tab eventKey=\"Tyro\" title=\"Tyro\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}> \r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>API Key</Form.Label>\r\n <Form.Control type=\"text\" name=\"APIKey\" value={currentAPIKey} readOnly />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"10\">\r\n <Button \r\n variant=\"primary\" \r\n size=\"sm\" \r\n style={{ marginLeft: 5, }} \r\n onClick={() => loadAPIKey(registered.find(psychologist => psychologist.id === currentPsychologistID))}\r\n >\r\n Update APIKey \r\n </Button>\r\n </Col>\r\n </Row>\r\n </Tab>\r\n :\r\n null\r\n }\r\n {/* <Tab eventKey=\"invoices\" title=\"Invoices\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}> \r\n { currentInvoices ? \r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={currentInvoices} columns={currentInvoiceColumns} pageSize={10} rowsPerPageOptions={[10]} checkboxSelection={false} />\r\n </Paper>\r\n : ('None')\r\n }\r\n </Tab> */}\r\n {/* <Tab eventKey=\"chargeDetails\" title=\"Charge Information\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}> \r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Card Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"CcLast4\" value={'XXXX-XXXX-XXXX-' + currentCcLast4} readOnly />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Expiry</Form.Label>\r\n <Form.Control type=\"text\" name=\"CcExpiry\" value={currentCcExpiry} readOnly />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"10\">\r\n <Button \r\n variant=\"primary\" \r\n size=\"sm\" \r\n style={{ marginLeft: 5, }} \r\n onClick={() => loadCard(registered.find(psychologist => psychologist.id === currentPsychologistID))}\r\n >\r\n Update Card Information \r\n </Button>\r\n </Col>\r\n </Row>\r\n </Tab> */}\r\n {(currentProviderType === 'Psychologist' || currentProviderType === 'Clinical') ?\r\n <Tab eventKey=\"supervision\" title=\"Supervision\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}> \r\n <>\r\n <Row>\r\n <Col md=\"10\">\r\n <Form.Group>\r\n <Form.Label style={{ fontWeight: 500 }}>Do you offer Supervision sessions to Other Providers? </Form.Label>\r\n <Form.Check id=\"supervsior-nosupervision\" name=\"isSupervisor\" type=\"radio\" style={{ marginBottom: 8 }} >\r\n <Form.Check.Input name=\"isSupervisor\" type=\"radio\" checked={currentIsSupervisor === 'N' ? true : false} onChange={e => setCurrentIsSupervisor('N')} />\r\n <Form.Check.Label style={{marginLeft: 12 }}>No</Form.Check.Label>\r\n </Form.Check>\r\n <Form.Check id=\"supervisor-supervision\" name=\"isSupervisor\" type=\"radio\" style={{ marginBottom: 8 }} >\r\n <Form.Check.Input name=\"isSupervisor\" type=\"radio\" checked={currentIsSupervisor === 'Y' ? true : false} onChange={e => setCurrentIsSupervisor('Y')} />\r\n <Form.Check.Label style={{marginLeft: 12 }}>​Yes</Form.Check.Label>\r\n </Form.Check>\r\n {currentIsSupervisor === 'Y' ?\r\n <>\r\n <Row>\r\n <Col md=\"12\" className=\"quill-field\">\r\n <Form.Label onClick={() => registrationView('Supervision')} style={{ marginLeft:10, color: 'blue', cursor:'pointer' }}>(Preview Supervision)</Form.Label>\r\n <Form.Group >\r\n <Form.Label>Supervisor Bio (if blank standard Bio will be displayed)</Form.Label>\r\n <ReactQuill \r\n theme=\"snow\"\r\n value={currentSupervisorBio}\r\n onChange={setCurrentSupervisorBio} \r\n />\r\n {/* <Editor apiKey='wnbo4skoom9pnqmbfdjvwn8xdl1nfjtwhc2ofsqb1myqn5lo'\r\n value={currentSupervisorBio}\r\n onEditorChange={(newValue, editor)=>setCurrentSupervisorBio(newValue)}\r\n init={{ branding: false, statusbar: false, height: 500 }}\r\n /> */}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"8\">\r\n <Form.Group >\r\n <Form.Label>Supervisor Education (if blank standard Education will be displayed)</Form.Label>\r\n <Form.Control type=\"text\" name=\"supervisorEducation\" defaultValue={currentSupervisorEducation} onBlur={(event) => setCurrentSupervisorEducation(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group>\r\n <Form.Label >Supervisor Rate (if blank Full Fee Rate will be used)</Form.Label>\r\n <InputGroup>\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>$</InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control type=\"text\" name=\"supervisorHourlyRate\" defaultValue={currentSupervisorHourlyRate} onBlur={(event) => setCurrentSupervisorHourlyRate(event.target.value)} autoComplete='new-password'/>\r\n </InputGroup>\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Available For</Form.Label>\r\n <Row>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {supervisionAreas.map(row => {\r\n if(row.index <= supervisionAreas.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = currentSupervisorAreas.find(r => r === row.id)\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleSupervisorAreaToggle(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })\r\n }\r\n </List>\r\n </Col>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {supervisionAreas.map(row => {\r\n if(row.id > supervisionAreas.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = currentSupervisorAreas.find(r => r === row.id)\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleSupervisorAreaToggle(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })\r\n }\r\n </List>\r\n </Col>\r\n </Row>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Endorsed In </Form.Label>\r\n <Row>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {endorsedSupervisionAreas.map(row => {\r\n console.log(endorsedSupervisionAreas.length/2)\r\n if(row.index <= endorsedSupervisionAreas.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${row.index}`;\r\n var isChecked = currentSupervisorAreas.find(r => r === row.id)\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleSupervisorAreaToggle(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })\r\n }\r\n </List>\r\n </Col>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {endorsedSupervisionAreas.map(row => {\r\n if(row.index > endorsedSupervisionAreas.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${row.index}`;\r\n var isChecked = currentSupervisorAreas.find(r => r === row.id)\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleSupervisorAreaToggle(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })\r\n }\r\n </List>\r\n </Col>\r\n </Row>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n\r\n </>\r\n :\r\n null\r\n }\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n </Tab>\r\n :\r\n null\r\n }\r\n <Tab eventKey=\"photoDetails\" title=\"Photo\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}> \r\n <Row>\r\n <Col md=\"10\">\r\n <Image src={`https://${storageAccountName}.blob.core.windows.net/${containerName}/${currentProfilePicture}`} style={{ maxHeight: 400, marginBottom: 30 }} />\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"10\">\r\n <Form.Group>\r\n <Form.Label>Upload New Profile Photo</Form.Label>\r\n <Form.Control type=\"file\" name=\"NewProfilePhoto\" onChange={(event) => handleFileFieldChangeNewProfilePicture('NewProfilePhoto', event)}/>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </Tab>\r\n <Tab eventKey=\"files\" title=\"Files\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}>\r\n <Files type=\"Psychologist\" pkid={currentPsychologistID} />\r\n </Tab>\r\n <Tab eventKey=\"security\" title=\"Security\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>New Password</Form.Label>\r\n <Form.Control type=\"password\" name=\"newpassword\" defaultValue={currentNewPassword} onBlur={(event) => setcurrentNewPassword(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>New Confirm Password</Form.Label>\r\n <Form.Control type=\"password\" name=\"newpasswordconfirmation\" defaultValue={currentNewPasswordConfirmation} onBlur={(event) => setcurrentNewPasswordConfirmation(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Button variant=\"success\" size=\"sm\" onClick={() => updatePassword()} style={{marginTop : 30}}>\r\n Update\r\n </Button>\r\n </Col>\r\n </Row>\r\n <Paper style={{ backgroundColor: \"rgb(245,245,245)\", padding: 20, marginTop:20 }} >\r\n <h4>Multi Factor Authentication</h4>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label> Status</Form.Label>\r\n <Form.Control type=\"text\" name=\"MFAConfigured\" value={currentMfaConfigured} readOnly />\r\n </Form.Group>\r\n </Col>\r\n {currentMfaConfigured === 'Configured' ?\r\n <Col md=\"3\" style={{ paddingTop: 29}}> \r\n <Button \r\n variant=\"danger\" \r\n size=\"sm\" \r\n style={{ marginLeft: 5, }} \r\n onClick={() => DeactivateMFA(currentPsychologistID)}\r\n >\r\n Disable \r\n </Button>\r\n </Col>\r\n :\r\n null\r\n }\r\n </Row>\r\n </Paper>\r\n\r\n\r\n </Tab>\r\n </Tabs>\r\n </Form> \r\n </Modal.Body>\r\n <Modal.Footer className=\"edit-psychologist-dialog-modal\">\r\n <Button variant=\"secondary\" onClick={handleClose}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"primary\" onClick={putPsychologist}>\r\n Save\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n {/* <Modal show={showCard} onHide={handleCardClose} centered>\r\n <Modal.Header closeButton className=\"chargeCard-modal\">\r\n <Modal.Title>Update Card Details - {currentFirstName} {currentSurname}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"chargeCard-modal\">\r\n <Elements stripe={stripePromise}>\r\n <CardSetupForm \r\n referenceID={\"PS\" + currentPsychologistID}\r\n name={currentFirstName + \" \" + currentSurname}\r\n mobile={currentMobile ? currentMobile : 'not supplied'}\r\n email={currentEmail ? currentEmail : 'not supplied'}\r\n onCloseCard={handleCardClose}\r\n />\r\n </Elements>\r\n </Modal.Body>\r\n </Modal> */}\r\n\r\n <Modal show={showAPIKey} onHide={handleAPIKeyClose} centered>\r\n <Modal.Header closeButton className=\"apiKey-modal\">\r\n <Modal.Title>Update Tyro APIKey Details</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"apiKey-modal\">\r\n <APIKeyForm \r\n referenceID={currentPsychologistID}\r\n onCloseAPIKey={handleAPIKeyClose}\r\n />\r\n </Modal.Body>\r\n </Modal>\r\n\r\n\r\n {/* <Modal show={showInvoiceDetail} onHide={handleInvoiceDetailClose} centered>\r\n <Modal.Header closeButton className=\"invoiceDetail-modal\">\r\n <Modal.Title>Invoice #{currentInvoiceID} {}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"invoiceDetail-modal\">\r\n <InvoiceDetail \r\n invoiceID={currentInvoiceID}\r\n invoiceitems={currentInvoiceItems}\r\n onCloseInvoiceDetail={handleInvoiceDetailClose}\r\n />\r\n </Modal.Body>\r\n </Modal> */}\r\n\r\n <Modal show={showRegistrationView} onHide={handleRegistrationViewClose} dialogClassName=\"providerRegistrationView-modal\">\r\n <Modal.Header closeButton className=\"providerRegistrationView-modal\">\r\n <Modal.Title>Client Registration View</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"providerRegistrationView-modal\">\r\n <Grid item md={12} style={{ height: 710, width: \"100%\", overflowY: \"scroll\", paddingLeft: 20, backgroundColor: \"rgb(255,255,255)\" }}>\r\n <Masonry\r\n breakpointCols={1}\r\n className=\"my-masonry-grid\"\r\n columnClassName=\"my-masonry-grid_column\">\r\n <Card className={classes.root} variant=\"outlined\" key={currentPsychologistID}>\r\n <CardMedia\r\n className={classes.media}\r\n image={`https://${storageAccountName}.blob.core.windows.net/${containerName}/${currentProfilePicture}`}\r\n title=\"Psychologist\"\r\n />\r\n <CardContent>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item sm={12}>\r\n <Typography variant=\"h5\" component=\"h3\">\r\n {currentFirstName} {currentSurname} (Next available: Next Available)\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n {(currentProviderType !== 'GP' && currentProviderType !== 'Provisional') ?\r\n <>\r\n {currentPaymentType === 'Supervision' ?\r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={6} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={6} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {currentSupervisorHourlyRate}\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n {currentPaymentType === 'Full Fee' ?\r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={6} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={6} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {currentHourlyRateOverrideGap && currentHourlyRateOverrideGap !== '0' ? '$' + currentHourlyRateOverrideGap : currentStandardFeeOutOfPocket }\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={12}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay ${currentHourly} on the day \r\n </Typography>\r\n <Typography>\r\n Receive back {currentHourlyRateOverrideRebate && currentHourlyRateOverrideRebate !== '0' ? '$' + currentHourlyRateOverrideRebate : currentMedicareRebate} from Medicare\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n {currentPaymentType === 'Reduced Gap' ?\r\n <>\r\n {currentIsReducedFee === 'Y' ? \r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={6} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600, textAlign: \"top\"}}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={6} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {currentReducedFeeOverrideGap && currentReducedFeeOverrideGap !== '0' ? '$' + currentReducedFeeOverrideGap : currentReducedFeeOutOfPocket }\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={12} >\r\n { currentReducedFee === '0' ?\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay $0 on the day\r\n </Typography>\r\n :\r\n <>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay ${currentReducedFee} on the day\r\n </Typography>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n Receive back {currentReducedFeeOverrideRebate && currentReducedFeeOverrideRebate !== '0' ? '$' + currentReducedFeeOverrideRebate : currentMedicareRebate} from Medicare\r\n </Typography>\r\n </>\r\n }\r\n </Grid>\r\n { currentReducedFee !== '0' ?\r\n <Grid item sm={12}>\r\n <Typography variant=\"subtitle2\" style={{ fontWeight:300, fontStyle: 'italic' }}>\r\n Note this provider offers some flexibility, depending on client circumstances\r\n </Typography>\r\n </Grid>\r\n :\r\n null\r\n }\r\n </Grid>\r\n </>\r\n :\r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={6} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600, textAlign: \"top\" }}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={6} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {currentReducedFeeOverrideGap && currentReducedFeeOverrideGap !== '0' ? '$' + currentReducedFeeOverrideGap : '$' + currentReducedFeeOutOfPocket }\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={12} >\r\n { currentReducedFee === '0' ?\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay $0 on the day\r\n </Typography>\r\n :\r\n <>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay ${currentReducedFee} on the day\r\n </Typography>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n Receive back {currentReducedFeeOverrideRebate && currentReducedFeeOverrideRebate !== '0' ? '$' + currentReducedFeeOverrideRebate : currentMedicareRebate} from Medicare\r\n </Typography>\r\n </>\r\n }\r\n </Grid>\r\n </Grid>\r\n </>\r\n }\r\n </>\r\n :\r\n null\r\n } \r\n {currentPaymentType !== 'Supervision' ?\r\n <Grid container style={{ marginBottom: 15, marginTop: 10 }}>\r\n {currentAreasOfInterest && currentAreasOfInterest.map((row) => {return (<Chip size=\"small\" key={`AOI${row.id}`} variant=\"outlined\" label={row.issue} style={{ margin: 2 }} />)})}\r\n </Grid>\r\n :\r\n null\r\n }\r\n </>\r\n :\r\n null\r\n }\r\n <Typography className={classes.pos} color=\"textSecondary\">\r\n <br />\r\n </Typography>\r\n <Grid container>\r\n {currentPaymentType === 'Supervision' ?\r\n <>\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={currentSupervisorBio && currentSupervisorBio.substring(0,700)} />\r\n {currentSupervisorBio && currentSupervisorBio.length > 700 ?\r\n <>\r\n ...\r\n <Badge variant=\"secondary\" onClick={()=>moreProviderBio(currentFirstName + ' ' + currentSurname, currentSupervisorBio && currentSupervisorBio)} style={{ marginRight: 5, cursor: 'pointer' }}>\r\n more\r\n </Badge>\r\n </>\r\n :\r\n null\r\n }\r\n </Typography>\r\n </>\r\n :\r\n <>\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={currentBio && currentBio.substring(0,700)} />\r\n {currentBio && currentBio.length > 700 ?\r\n <>\r\n ...\r\n <Badge variant=\"secondary\" onClick={()=>moreProviderBio(currentFirstName + ' ' + currentSurname, currentBio && currentBio)} style={{ marginRight: 5, cursor: 'pointer' }}>\r\n more\r\n </Badge>\r\n </>\r\n :\r\n null\r\n }\r\n </Typography>\r\n </>\r\n }\r\n </Grid>\r\n {currentPaymentType === 'Supervision' ?\r\n <>\r\n <Typography variant=\"h6\" component=\"h3\" style={{paddingTop:20}}>\r\n Available For\r\n </Typography>\r\n <Row>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {supervisionAreas.map(sRow => {\r\n if(sRow.index <= supervisionAreas.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${sRow.id}`;\r\n var isChecked = currentSupervisorAreas.includes(sRow.id);\r\n return (\r\n <ListItem key={sRow.id} role={undefined} dense button >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{sRow.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Col>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {supervisionAreas.map(sRow => {\r\n if(sRow.index > supervisionAreas.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${sRow.id}`;\r\n var isChecked = currentSupervisorAreas.includes(sRow.id);\r\n return (\r\n <ListItem key={sRow.id} role={undefined} dense button >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{sRow.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Col>\r\n </Row>\r\n <Typography variant=\"h6\" component=\"h3\" style={{paddingTop:20}}>\r\n Endorsed In \r\n </Typography>\r\n <Row>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {endorsedSupervisionAreas.map(sRow => {\r\n var isChecked = currentSupervisorAreas.includes(sRow.id);\r\n const labelId = `checkbox-list-label-${sRow.id}`;\r\n if (isChecked) {\r\n return(\r\n <ListItem key={sRow.id} role={undefined} dense button >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{sRow.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n )\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n } \r\n </CardContent>\r\n </Card>\r\n </Masonry>\r\n </Grid>\r\n\r\n </Modal.Body>\r\n <Modal.Footer className=\"invite-modal\">\r\n <Button variant=\"secondary\" onClick={handleRegistrationViewClose}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showProviderBio} onHide={()=>setShowProviderBio(false)} dialogClassName=\"invite-modal\" >\r\n <Modal.Header closeButton className=\"invite-modal\">\r\n <Modal.Title>{providerBioFullName}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"invite-modal\" style={{ backgroundColor: 'rgb(245,245,245)' }}>\r\n <Grid container >\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={providerBioBio} />\r\n </Typography>\r\n </Grid>\r\n </Modal.Body>\r\n <Modal.Footer className=\"invite-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowProviderBio(false)} className=\"lightButtonOutlinedLarge\">\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n\r\n\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n\r\n}\r\n\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { Button, Modal, Form, Row, Col, InputGroup } from \"react-bootstrap\";\r\nimport { Paper, Grid, MenuItem, Select } from '@material-ui/core';\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport ClearIcon from '@material-ui/icons/Clear';\r\nimport Alert from '@material-ui/lab/Alert';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport * as Reference from \"../../../store/ducks/reference.duck\";\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\nexport default function Referrers() {\r\n\r\n const dispatch = useDispatch()\r\n\r\n useEffect( () => { dispatch(Admin.actions.fetchReferrers()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchTimeZone()) }, [dispatch] )\r\n\r\n const userTZ = useSelector(state => state.auth.userTZ)\r\n const timeZone = useSelector(state => state.reference.TimeZone)\r\n const filters = useSelector(state => state.admin.Filters)\r\n const referrers = useSelector(state => state.admin.Referrers)\r\n const filteredreferrers = referrers.filter(referrer => (referrer.fullname.toLowerCase().search(filters.referrersTerm.toLowerCase()) > -1 || filters.referrersTerm.length === 0))\r\n\r\n var [showReferrer, setShowReferrer] = useState(false)\r\n var [referrerError, setReferrerError] = useState('')\r\n\r\n function handleReferrerClose() {\r\n setShowReferrer(false);\r\n } \r\n\r\n function loadNewReferrer() {\r\n setcurrentModalHeader('Adding Referrer');\r\n setcurrentPasswordHeader('Please enter password for new login');\r\n setcurrentID(0);\r\n setcurrentFirstName('');\r\n setcurrentSurname('');\r\n setcurrentEmail('');\r\n setcurrentMobile('');\r\n setcurrentOrganisation('');\r\n setcurrentStatus('Active');\r\n setReferrerError('');\r\n setShowReferrer(true);\r\n setcurrentNewPassword(null);\r\n setcurrentNewPasswordConfirmation(null);\r\n }\r\n\r\n const loadExistingReferrer = (thisReferrer) => {\r\n setcurrentModalHeader('Updating ' + thisReferrer.firstname + ' ' + thisReferrer.surname);\r\n setcurrentPasswordHeader('Password Update (Leave blank unless resetting)');\r\n setcurrentID(thisReferrer.id);\r\n setcurrentFirstName(thisReferrer.firstname);\r\n setcurrentSurname(thisReferrer.surname);\r\n setcurrentEmail(thisReferrer.email);\r\n setcurrentMobile(thisReferrer.mobilephone);\r\n setcurrentOrganisation(thisReferrer.organisationname);\r\n setcurrentStatus(thisReferrer.status);\r\n setcurrentTimeZone(thisReferrer.timezone);\r\n setcurrentNewPassword(null);\r\n setcurrentNewPasswordConfirmation(null);\r\n setReferrerError('');\r\n setShowReferrer(true);\r\n }\r\n\r\n function postReferrer() {\r\n let validation = true;\r\n // Check if passwords are the same\r\n if (currentNewPassword)\r\n {\r\n // Check passwords are the same\r\n if (currentNewPassword !== currentNewPasswordConfirmation)\r\n {\r\n setReferrerError('Passwords do not match')\r\n validation = false;\r\n } \r\n }\r\n if (currentFirstName === ''|| currentSurname === '' || currentEmail === '' || currentMobile === '' || currentOrganisation === '') \r\n { \r\n setReferrerError('You must complete all fields.')\r\n validation = false;\r\n } \r\n //\r\n // Submit if no errors \r\n if (validation)\r\n {\r\n setReferrerError('')\r\n var payload = {\r\n id: currentID,\r\n firstname: currentFirstName,\r\n surname: currentSurname,\r\n email: currentEmail,\r\n mobilephone: currentMobile,\r\n organisationname: currentOrganisation,\r\n status: currentStatus,\r\n timezone: currentTimeZone,\r\n newpassword: currentNewPassword,\r\n newpasswordconfirmation: currentNewPasswordConfirmation\r\n }\r\n dispatch(Admin.actions.putReferrer(payload));\r\n setShowReferrer(false)\r\n }\r\n }\r\n\r\n var [currentID,setcurrentID] = useState();\r\n var [currentFirstName,setcurrentFirstName] = useState();\r\n var [currentSurname,setcurrentSurname] = useState();\r\n var [currentEmail,setcurrentEmail] = useState();\r\n var [currentMobile,setcurrentMobile] = useState();\r\n var [currentOrganisation,setcurrentOrganisation] = useState(); \r\n var [currentNewPasswordConfirmation,setcurrentNewPasswordConfirmation] = useState();\r\n var [currentNewPassword,setcurrentNewPassword] = useState();\r\n var [currentStatus,setcurrentStatus] = useState(); \r\n var [currentModalHeader,setcurrentModalHeader] = useState(); \r\n var [currentPasswordHeader,setcurrentPasswordHeader] = useState();\r\n var [currentTimeZone, setcurrentTimeZone] = useState(userTZ ? userTZ : 'AUS Eastern Standard Time');\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', hide: true },\r\n { field: 'fullname', headerName: 'Name', width: 190,\r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadExistingReferrer(referrers.find(referrer => referrer.id === params.row.id))} className=\"cell-Link\">\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), },\r\n { field: 'email', headerName: 'Email', width: 220,\r\n renderCell: (params) => (\r\n <CopyToClipboard text={params.row.email}>\r\n <span className=\"cell-Link\" style={{ fontWeight: 500}}>{params.row.email}</span>\r\n </CopyToClipboard>\r\n ) \r\n },\r\n { field: 'mobilephone', headerName: 'Phone', width: 110 },\r\n { field: 'organisationname', headerName: 'Organisation', width: 150 },\r\n { field: 'status', headerName: 'Status', width: 115 } \r\n ];\r\n\r\n\r\n return (\r\n <>\r\n <h4>\r\n Referrers\r\n </h4>\r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10 }}>\r\n <Grid item style={{ marginTop: 2, marginLeft: 2 }}> \r\n <Grid container>\r\n <Grid item> \r\n <InputGroup size=\"sm\">\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={filters.referrersTerm}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'referrersTerm', filterValue: event.target.value }))}\r\n autoComplete='OFF'\r\n style={{ maxWidth: 170, height: 35, backgroundColor: filters.referrersTerm.length > 0 ? 'rgb(250 239 195)' : 'white' }}\r\n />\r\n <InputGroup.Append onClick={() => dispatch(Admin.actions.setFilters({ filterName: 'referrersTerm', filterValue: '' }))}>\r\n <InputGroup.Text>\r\n <ClearIcon fontSize=\"small\" style={{ color: filters.referrersTerm.length > 0 ? '#222222' : 'silver', marginLeft: -3 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Append>\r\n </InputGroup>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => loadNewReferrer()} style={{ marginRight: 20 }}>\r\n Add Referrer\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n\r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={filteredreferrers} columns={columns} pageSize={10} rowsPerPageOptions={[10]} checkboxSelection={false} sortModel={[{ field: 'fullname', sort: 'desc' }]} />\r\n </Paper>\r\n\r\n <Modal show={showReferrer} onHide={handleReferrerClose} dialogClassName=\"invite-modal\">\r\n <Modal.Header closeButton className=\"invite-modal\">\r\n <Modal.Title>{currentModalHeader}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"invite-modal\">\r\n {referrerError !== '' ?\r\n <Alert severity=\"error\" style={{ marginBottom: 14 }}>\r\n {referrerError}\r\n </Alert>\r\n :\r\n null }\r\n <h4>Personal Details</h4>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>First Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileFirstName\" defaultValue={currentFirstName} onBlur={(event) => setcurrentFirstName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Surname</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileSurname\" defaultValue={currentSurname} onBlur={(event) => setcurrentSurname(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Email</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileEmail\" defaultValue={currentEmail} onBlur={(event) => setcurrentEmail(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Mobile Phone Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileMobile\" defaultValue={currentMobile} onBlur={(event) => setcurrentMobile(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Timezone</Form.Label>\r\n <Select\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n value={currentTimeZone}\r\n onChange={(event) => setcurrentTimeZone(event.target.value)}\r\n className=\"select-edit\"\r\n displayEmpty\r\n inputProps={{ 'aria-label': 'Without label' }}\r\n >\r\n {timeZone && timeZone.map((row, index) => (\r\n <MenuItem key={`tz_${index}`} value={row.systemName}>{row.name}</MenuItem>\r\n ))}\r\n <MenuItem value={undefined}></MenuItem> \r\n </Select>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <h4>Organisation</h4>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileOrgnisationName\" defaultValue={currentOrganisation} onBlur={(event) => setcurrentOrganisation(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <h4>{currentPasswordHeader}</h4>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>New Password</Form.Label>\r\n <Form.Control type=\"password\" name=\"newpassword\" defaultValue={currentNewPassword} onBlur={(event) => setcurrentNewPassword(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>New Confirm Password</Form.Label>\r\n <Form.Control type=\"password\" name=\"newpasswordconfirmation\" defaultValue={currentNewPasswordConfirmation} onBlur={(event) => setcurrentNewPasswordConfirmation(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Status</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentStatus} onBlur={(event) => setcurrentStatus(event.target.value)}>\r\n <option value=\"Active\">Active</option>\r\n <option value=\"Archived\">Inactive</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </Modal.Body>\r\n <Modal.Footer className=\"invite-modal\">\r\n <Button variant=\"secondary\" onClick={handleReferrerClose}>\r\n Close\r\n </Button>\r\n <Button variant=\"primary\" onClick={postReferrer}>\r\n Save\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <div style={{border: \"solid rgb(215, 215, 215) 1px\", borderRadius: \"4px\", backgroundColor: \"white\"}}>\r\n \r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n />\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\n\r\nimport * as Admin from \"../store/ducks/admin.duck\";\r\n\r\n\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { format } from \"date-fns\";\r\nimport { Paper, TextField, Grid, Select, MenuItem } from '@material-ui/core';\r\n// import { makeStyles } from '@material-ui/core';\r\nimport { Button, Modal, Form, Row, Col } from \"react-bootstrap\";\r\n\r\n\r\nexport default function Referrals(props) {\r\n\r\n // const useStyles = makeStyles((theme) => ({\r\n // root: {\r\n // // minWidth: 200,\r\n // // maxWidth: 200,\r\n // },\r\n // media: {\r\n // height: 200,\r\n // },\r\n // title: {\r\n // fontSize: 14,\r\n // },\r\n // pos: {\r\n // marginBottom: 12,\r\n // },\r\n // expand: {\r\n // transform: 'rotate(0deg)',\r\n // marginLeft: 'auto',\r\n // transition: theme.transitions.create('transform', {\r\n // duration: theme.transitions.duration.shortest,\r\n // }),\r\n // },\r\n // expandOpen: {\r\n // transform: 'rotate(180deg)',\r\n // },\r\n // }));\r\n \r\n const initReferral = {\r\n id : 0,\r\n psychologistid : 0,\r\n source : 'FAX',\r\n status : 'CURRENT',\r\n referredOn: new Date().toISOString().slice(0,10),\r\n medicalPractitionerID : 0,\r\n referralPeriodCode : 'S',\r\n referralPeriodDuration : '0'\r\n }\r\n\r\n\r\n\r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Admin.actions.fetchReferralsView({type: props.type, id: !props.clientID ? props.clientRegistrationID : props.clientID})) }, [dispatch, props.type, props.clientID, props.clientRegistrationID] )\r\n\r\n //console.log(props.clientRegistrationID);\r\n // console.log(props.clientiD);\r\n\r\n useEffect( () => { dispatch(Admin.actions.fetchMedicalPractitioners()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchMedicalPractices({ type: 'GeneralPractitioner' })) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchRegistered()) }, [dispatch] )\r\n\r\n const medicalPractitioners = useSelector(state => state.admin.MedicalPractitioners)\r\n const medicalPractices = useSelector(state => state.admin.MedicalPractices.GeneralPractitioner)\r\n const referrals = useSelector(state => state.admin.ReferralsView)\r\n const [showForm, setShowForm] = useState(false)\r\n\r\n const initMedicalPractitioner = () => {\r\n return { id: 0, providernumber: '', salutation: 'Dr', firstName: '', surname: '', mobilephone: '', phone: '', type: 'Referring GP', description: '' }\r\n }\r\n\r\n const initMedicalPractice = () => {\r\n return { id: 0, abn: '', practicename: '', phone: '', fax: '',address1: '', email: '', website: '', logoURL: '', practiceType: 'GeneralPractitioner' }\r\n }\r\n\r\n function handlePeriodCodeChange(value) {\r\n setcurrentPeriodCode(value);\r\n }\r\n\r\n function handleSourceChange(value) {\r\n setcurrentSource(value);\r\n }\r\n\r\n var [currentReferralID,setcurrentReferralID] = useState();\r\n var [currentReferredOn,setcurrentReferredOn] = useState(); \r\n var [currentMedicalPractitioner, setcurrentMedicalPractitioner] = useState(initMedicalPractitioner()); \r\n var [currentMedicalPractice, setcurrentMedicalPractice] = useState(initMedicalPractice());\r\n var [currentPeriodCode,setcurrentPeriodCode] = useState();\r\n var [currentPeriodDuration,setcurrentPeriodDuration] = useState();\r\n var [currentStatus,setcurrentStatus] = useState();\r\n var [currentSource,setcurrentSource] = useState(); \r\n\r\n var [currentMedicalPractitionerFirstNameError,setcurrentMedicalPractitionerFirstNameError] = useState('');\r\n var [currentMedicalPractitionerSurnameError,setcurrentMedicalPractitionerSurnameError] = useState('');\r\n var [currentMedicalPractitionerMobilePhoneError,setcurrentMedicalPractitionerMobilePhoneError] = useState('');\r\n var [currentMedicalPractitionerProviderNumberError,setcurrentMedicalPractitionerProviderNumberError] = useState('');\r\n var [currentMedicalPracticeClinicNameError,setcurrentMedicalPracticeClinicNameError] = useState('');\r\n var [currentMedicalPracticeClinicAddressError,setcurrentMedicalPracticeClinicAddressError] = useState('');\r\n var [currentMedicalPracticeClinicPhoneError,setcurrentMedicalPracticeClinicPhoneError] = useState('');\r\n var [currentMedicalPracticeClinicFaxError,setcurrentMedicalPracticeClinicFaxError] = useState('');\r\n var [currentReferredOnError,setcurrentReferredOnError] = useState('');\r\n var [currentPeriodDurationError,setcurrentPeriodDurationError] = useState('');\r\n \r\n const loadReferral = (thisReferral) => {\r\n setcurrentReferralID(thisReferral.id);\r\n setcurrentSource(thisReferral.source);\r\n setcurrentPeriodDuration(thisReferral.referralPeriodDuration);\r\n setcurrentStatus(thisReferral.status);\r\n // Need to handle date comes through as yyyy-MM-ddThh:mm\r\n var tempReferredOn = thisReferral.referredOn;\r\n tempReferredOn = tempReferredOn.split('T')[0];\r\n setcurrentReferredOn(tempReferredOn);\r\n setcurrentPeriodCode(thisReferral.referralPeriodCode);\r\n var tempMedicalPractitioner = thisReferral ? medicalPractitioners.find(v => v.id === thisReferral.medicalPractitionerID) : null; \r\n loadMedicalPractitioner(tempMedicalPractitioner ? tempMedicalPractitioner : initMedicalPractitioner())\r\n // Display Modal\r\n setShowForm(true)\r\n }\r\n\r\n const loadNewReferral = () => {\r\n loadReferral(initReferral);\r\n }\r\n \r\n const loadMedicalPractitioner = (thisMedicalPractitioner) =>{\r\n setcurrentMedicalPractitioner(thisMedicalPractitioner ? thisMedicalPractitioner : initMedicalPractitioner())\r\n var tempMedicalPractice = thisMedicalPractitioner ? medicalPractices.find(v => v.id === thisMedicalPractitioner.medicalPracticeID) : null;\r\n loadMedicalPractitice(tempMedicalPractice)\r\n }\r\n\r\n const loadMedicalPractitice = (thisMedicalPractice) => {\r\n setcurrentMedicalPractice(thisMedicalPractice ? thisMedicalPractice : initMedicalPractice())\r\n }\r\n\r\n\r\n const cols = [\r\n { field: 'id', headerName: 'ID', hide: true },\r\n { field: 'referredOn', type: 'date', headerName: 'Date', width: 210, renderCell: (params) => (format(new Date(params.value ? params.value : null), \"dd-MM-yyyy\"))},\r\n { field: 'clientFullName', headerName: 'Client', width: 250, hide: props.clientRegistrationID ? true: false,\r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadReferral(referrals.find(r => r.id === params.row.id))} className=\"cell-Link\">\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'mpFullName', headerName: 'Referring GP', width: 200,\r\n renderCell: (params) => (\r\n <>\r\n Dr. {params.value}\r\n </>\r\n ),\r\n }, \r\n { field: 'referralPeriodCode', headerName: 'Type', width: 150,\r\n renderCell: (params) => (\r\n <>\r\n {params.value === 'S' ?\r\n 'Standard'\r\n :\r\n <>\r\n {params.value === 'NS' ?\r\n <>\r\n 'Non-Standard for ' + {params.row.referralPeriodDuration}\r\n </>\r\n :\r\n 'Indefinite'}\r\n </>\r\n }\r\n </>\r\n ),\r\n },\r\n { field: 'status', headerName: 'Status', width: 150 },\r\n { field: 'none', headerName: 'Actions', width: 150,\r\n renderCell: (params) => (\r\n <>\r\n {params.row.status !== 'CANCELLED' ?\r\n <Button variant=\"danger\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#eee\", marginRight: 10 }} onClick={() => changeReferralStatus(referrals.find(r => r.id === params.row.id),'CANCELLED')} >\r\n Close \r\n </Button>\r\n :\r\n <Button variant=\"danger\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#eee\", marginRight: 10 }} onClick={() => changeReferralStatus(referrals.find(r => r.id === params.row.id),'CURRENT')} >\r\n Enable \r\n </Button>\r\n }\r\n </>\r\n ),\r\n },\r\n\r\n ];\r\n\r\n function handleFormClose() {\r\n setShowForm(false);\r\n } \r\n\r\n const getMedicalPractitionerOption = (option, value) => {\r\n if (option.id === value.id) {\r\n return option\r\n } else {\r\n return initMedicalPractitioner();\r\n }\r\n }\r\n\r\n function save() {\r\n // Need to review and see if everything is populated \r\n var allOk = true;\r\n // Key fields are the name and provider name for the referring gp \r\n if (currentMedicalPractitioner.firstName.length < 3)\r\n {\r\n setcurrentMedicalPractitionerFirstNameError('Please specify the First Name of the referring GP');\r\n allOk = false;\r\n }\r\n if (currentMedicalPractitioner.surname.length < 2)\r\n {\r\n setcurrentMedicalPractitionerSurnameError('Please specify the Surname of the referring GP');\r\n allOk = false;\r\n }\r\n if (currentMedicalPractitioner.mobilephone.length !== 10)\r\n {\r\n setcurrentMedicalPractitionerMobilePhoneError('Please specify the Mobile Phone number of the referring GP');\r\n allOk = false;\r\n }\r\n if (currentMedicalPractitioner.providernumber.length < 7)\r\n {\r\n setcurrentMedicalPractitionerProviderNumberError('Please specify the Medicare Provider Number of the referring GP');\r\n allOk = false;\r\n }\r\n if (currentMedicalPractice.practicename.length < 3)\r\n {\r\n setcurrentMedicalPracticeClinicNameError('Please specify the Clinic Name of the referring GP');\r\n allOk = false;\r\n }\r\n if (currentMedicalPractice.phone.length !== 10)\r\n {\r\n setcurrentMedicalPracticeClinicPhoneError('Please specify the Phone Number of the referring GP Practice');\r\n allOk = false;\r\n }\r\n if (currentMedicalPractice.fax.length !== 10)\r\n {\r\n setcurrentMedicalPracticeClinicFaxError('Please specify the Fax Number of the referring GP Practice');\r\n allOk = false;\r\n }\r\n if (currentMedicalPractice.address1.length < 5)\r\n {\r\n setcurrentMedicalPracticeClinicAddressError('Please specify the address of the referring GP Practice');\r\n allOk = false;\r\n }\r\n if ((!currentReferredOn) || (currentReferredOn.length < 6))\r\n {\r\n setcurrentReferredOnError('Please specify the Referred On Date');\r\n allOk = false;\r\n }\r\n if ((currentPeriodCode === 'NS') && ((currentPeriodDuration.length < 1) || (currentPeriodDuration === '0')))\r\n {\r\n setcurrentPeriodDurationError('Please specify the Referral Duration in Months');\r\n allOk = false;\r\n }\r\n // Check error status \r\n if (allOk)\r\n {\r\n var payload = \r\n { \r\n referral: \r\n {\r\n id : currentReferralID,\r\n source : currentSource,\r\n clientID : props.clientID, \r\n clientRegistrationID : props.clientRegistrationID,\r\n psychologistID : props.psychologistID,\r\n referralPeriodCode : currentPeriodCode,\r\n referralPeriodDuration : currentPeriodDuration,\r\n adminNote : '',\r\n psychologistNote : '',\r\n referredOn : currentReferredOn,\r\n status : currentStatus\r\n }, \r\n medicalPractitioner: currentMedicalPractitioner, \r\n medicalPractice: currentMedicalPractice,\r\n newClient : false,\r\n refresh: { \r\n action: 'FETCH_REFERRALSVIEW', \r\n payload: { type: 'client', id: props.clientID }\r\n } \r\n }\r\n\r\n // console.log(payload);\r\n dispatch(Admin.actions.putReferral(payload));\r\n setShowForm(false);\r\n }\r\n }\r\n\r\n\r\n const getMedicalPracticeOption = (option, value) => {\r\n if (option.id === value.id) {\r\n return option\r\n } else {\r\n return initMedicalPractice();\r\n }\r\n }\r\n\r\n function changeReferralStatus(thisReferral,action) {\r\n // put status & send refresh action to fetch the referrals collection again for this psychologist\r\n dispatch(Admin.actions.putReferralStatus( \r\n { referenceID: thisReferral.id, \r\n statusCHG: action, \r\n refresh: { \r\n action: 'FETCH_REFERRALSVIEW', \r\n payload: { type: 'client', id: props.clientID }\r\n } \r\n }));\r\n }\r\n\r\n // const classes = useStyles();\r\n\r\n return(\r\n <>\r\n <h4>\r\n Referrals\r\n </h4>\r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10 }}>\r\n <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => loadNewReferral()}>\r\n Add Referral\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n\r\n { referrals ? \r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={referrals} columns={cols} pageSize={10} rowsPerPageOptions={[10]} checkboxSelection={false} sortModel={[{ field: 'referredOn', sort: 'desc' }]} />\r\n </Paper>\r\n : ('None')\r\n }\r\n\r\n <Modal show={showForm} onHide={handleFormClose} dialogClassName=\"editReferralDialog-modal\">\r\n <Modal.Header closeButton className=\"editReferral-modal\" style={{ padding: 10 }}>\r\n <Modal.Title style={{ width: \"50%\", marginTop: 6 }}>\r\n <h4>Referral</h4>\r\n </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"editReferral-modal\" style={{ height: 800 }}> \r\n {/* Medical Practitioner */}\r\n <Row>\r\n <Col md=\"4\">\r\n <h5>Referring GP</h5>\r\n </Col>\r\n <Col md=\"2\" style={{ textAlign: \"right\"}}>\r\n <SearchIcon style={{ marginTop: 8, marginRight: -13 }} />\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group style={{ width: \"100%\", marginBottom: 0 }}>\r\n <Autocomplete\r\n id=\"profileMedicalPractitionerID\"\r\n variant=\"outlined\"\r\n options={medicalPractitioners}\r\n getOptionLabel={(option) => option.description }\r\n getOptionSelected={(option, value) => getMedicalPractitionerOption(option, value)}\r\n value={currentMedicalPractitioner}\r\n onChange={(event, newValue) => loadMedicalPractitioner(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"MedicalPractitionerSelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group controlId=\"currentMedicalPractitionerFirstName\">\r\n <Form.Label>Firstname</Form.Label>\r\n <Form.Control type=\"text\" name=\"firstName\" value={currentMedicalPractitioner.firstName} onChange={(event) => setcurrentMedicalPractitioner({...currentMedicalPractitioner, firstName: event.target.value})} isInvalid={!!currentMedicalPractitionerFirstNameError} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{currentMedicalPractitionerFirstNameError}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group controlId=\"currentMedicalPractitionerSurname\">\r\n <Form.Label>Surname</Form.Label>\r\n <Form.Control type=\"text\" name=\"surname\" value={currentMedicalPractitioner.surname} onChange={(event) => setcurrentMedicalPractitioner({...currentMedicalPractitioner, surname: event.target.value})} isInvalid={!!currentMedicalPractitionerSurnameError} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{currentMedicalPractitionerSurnameError}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group controlId=\"currentMedicalPractitionerMobilePhone\">\r\n <Form.Label>Mobile Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"mobilephone\" value={currentMedicalPractitioner.mobilephone} onChange={(event) => setcurrentMedicalPractitioner({...currentMedicalPractitioner, mobilephone: event.target.value})} isInvalid={!!currentMedicalPractitionerMobilePhoneError} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{currentMedicalPractitionerMobilePhoneError}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group controlId=\"currentMedicalPractitionerProviderNo\">\r\n <Form.Label>Provider Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"providernumber\" value={currentMedicalPractitioner.providernumber} onChange={(event) => setcurrentMedicalPractitioner({...currentMedicalPractitioner, providernumber: event.target.value})} isInvalid={!!currentMedicalPractitionerProviderNumberError} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{currentMedicalPractitionerProviderNumberError}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n {/* Medical Practice */} \r\n <Row>\r\n <Col md=\"4\">\r\n <h5>Practice</h5>\r\n </Col>\r\n <Col md=\"2\" style={{ textAlign: \"right\"}}>\r\n <SearchIcon style={{ marginTop: 8, marginRight: -13 }} />\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group style={{ width: \"100%\", marginBottom: 0 }}>\r\n <Autocomplete\r\n id=\"profileMedicalPractice\"\r\n variant=\"outlined\"\r\n options={medicalPractices}\r\n getOptionLabel={(option) => option.practicename }\r\n getOptionSelected={(option, value) => getMedicalPracticeOption(option, value)}\r\n value={currentMedicalPractice}\r\n onChange={(event, newValue) => loadMedicalPractitice(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"MedicalPracticeSelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Clinic Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"practicename\" value={currentMedicalPractice ? currentMedicalPractice.practicename : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, practicename: event.target.value})} isInvalid={!!currentMedicalPracticeClinicNameError} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{currentMedicalPracticeClinicNameError}</Form.Control.Feedback> \r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>ABN</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentAbn\" value={currentMedicalPractice ? currentMedicalPractice.abn : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, abn: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Contact Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentPhone\" value={currentMedicalPractice ? currentMedicalPractice.phone : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, phone: event.target.value})} isInvalid={!!currentMedicalPracticeClinicPhoneError} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{currentMedicalPracticeClinicPhoneError}</Form.Control.Feedback> \r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Contact Fax</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentFax\" value={currentMedicalPractice ? currentMedicalPractice.fax : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, fax: event.target.value})} isInvalid={!!currentMedicalPracticeClinicFaxError} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{currentMedicalPracticeClinicFaxError}</Form.Control.Feedback> \r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"9\">\r\n <Form.Group >\r\n <Form.Label>Clinic Address</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentAddress1\" value={currentMedicalPractice ? currentMedicalPractice.address1 : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, address1: event.target.value})} isInvalid={!!currentMedicalPracticeClinicAddressError} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{currentMedicalPracticeClinicAddressError}</Form.Control.Feedback> \r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Clinic Email</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentEmail\" value={currentMedicalPractice ? currentMedicalPractice.email : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, email: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n <Grid container spacing={3}>\r\n <Grid item md={12}>\r\n <h3>Referral</h3>\r\n <hr></hr>\r\n <Grid container spacing={4}>\r\n <Grid item md={12}>\r\n <Row>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Referral Date</Form.Label>\r\n <Form.Control type=\"date\" name=\"ReferredOn\" value={currentReferredOn} onChange={(event) => setcurrentReferredOn(event.target.value)} isInvalid={!!currentReferredOnError} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{currentReferredOnError}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Status</Form.Label>\r\n <Form.Control type=\"text\" name=\"referredOn\" value={currentStatus} readOnly />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Referral Period</Form.Label>\r\n <Select \r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n id='periodCode'\r\n aria-label='Select Referral Period'\r\n name='periodCode'\r\n value={currentPeriodCode} \r\n onChange={(event) => handlePeriodCodeChange(event.target.value)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: '#fff' }}>\r\n <MenuItem key='Stanard' value='S'>Standard</MenuItem>\r\n <MenuItem key='Non-Standard' value='NS'>Non Standard</MenuItem>\r\n <MenuItem key='Indefinite' value='I'>Indefinite</MenuItem>\r\n </Select>\r\n </Form.Group>\r\n </Col> \r\n {currentPeriodCode && currentPeriodCode === 'NS' ?\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Referral Duration (Mths)</Form.Label>\r\n <Form.Control type=\"text\" name=\"PeriodDuration\" value={currentPeriodDuration} onChange={(event) => setcurrentPeriodDuration(event.target.value)} isInvalid={!!currentPeriodDurationError} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{currentPeriodDurationError}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n :\r\n null\r\n } \r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Referral Source</Form.Label>\r\n <Select \r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n id='source'\r\n aria-label='Select Referral Source'\r\n name='source'\r\n value={currentSource} \r\n onChange={(event) => handleSourceChange(event.target.value)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: '#fff' }}>\r\n <MenuItem key='Fax' value='FAX'>Fax</MenuItem>\r\n <MenuItem key='Email' value='EMAIL'>Email</MenuItem>\r\n <MenuItem key='Other' value='OTHER'>Other</MenuItem>\r\n </Select>\r\n </Form.Group>\r\n </Col> \r\n </Row>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Modal.Body> \r\n <Modal.Footer className=\"addresource-modal\">\r\n <Button variant=\"secondary\" onClick={handleFormClose}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"primary\" onClick={() => save()}>\r\n Save\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n </>\r\n )\r\n\r\n\r\n}","import React, { useState, useEffect, useRef } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport * as Admin from \"../store/ducks/admin.duck\";\r\nimport { Grid } from '@material-ui/core';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { Form, InputGroup } from \"react-bootstrap\";\r\nimport ClearIcon from '@material-ui/icons/Clear';\r\nimport HighlightOffIcon from '@material-ui/icons/HighlightOff';\r\nimport LabelOutlinedIcon from '@material-ui/icons/LabelOutlined';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport KTUtil from \"../../_metronic/_assets/js/util\";\r\n\r\n/* Display instances of tags and values\r\n Let user add a tag by selecting a yet unused tag and entering a value\r\n\r\n Props are sent in an args object:\r\n args.context - used to offer only relevant tags\r\n args.tagValues - existing tag values passed in\r\n args.setTagValues - function to set the values of the tags back to the caller\r\n args.display - Layout and funcitonality is different for data entry on forms(entities) vs. a list where they are used as filters\r\n args.readOnly - disable input for either permissions reasons or archived records\r\n args.tagValuesFilter - passed through to use when fetching after put in redux\r\n args.autoSave - Mode where tags fetch and put their own values directly rather than from the caller\r\n*/\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n tooltip: {\r\n fontSize: 12,\r\n },\r\n}));\r\n\r\nexport default function Tags(props) {\r\n\r\n const dispatch = useDispatch();\r\n const classes = useStyles();\r\n const initDisplay = { layout: 'form', header: true }\r\n\r\n const context = props.args.context;\r\n const tagValues = props.args.tagValues;\r\n const setTagValues = props.args.setTagValues;\r\n const display = { ...initDisplay, ...props.args.display };\r\n const readOnly = props.args.readOnly ? true : false;\r\n const autoSave = props.args.autoSave ? true : false;\r\n const fkID = props.args.fkID;\r\n const tagValuesFilter = props.args.tagValuesFilter\r\n\r\n const contexts = useSelector(state => state.reference.Contexts);\r\n const contextID = contexts.length > 0 && contexts.find(row => row.Context === context).ContextID;\r\n const alltags = useSelector(state => state.reference.Tags);\r\n const autoitems = useSelector(state => state.admin.TagValues[context.replaceAll(\" \", \"\")]);\r\n\r\n const [newTag, setnewTag] = useState();\r\n const [items, setItems] = useState(Array.isArray(tagValues) ? tagValues : []);\r\n\r\n // If auto save, then fetch tagValues directly\r\n useEffect( () => { autoSave && context && fkID && dispatch(Admin.actions.fetchTagValues({ context: context, fkID: fkID })) }, [dispatch, context, fkID, autoSave] )\r\n\r\n // when state differs from items, update to state values\r\n useEffect(() => {\r\n if(autoSave)\r\n {\r\n if(items && items !== autoitems){\r\n setItems(autoitems);\r\n }\r\n }\r\n else\r\n {\r\n if (items && items !== tagValues) {\r\n setItems(tagValues);\r\n }\r\n }\r\n }, [items, tagValues, autoSave, autoitems, setItems]);\r\n\r\n // filters tag array for data entry by removing those with values already (unless multiple values are allowed)\r\n const reftags = alltags.filter(tag => tag.contexts.find(row => row.context === context) && (!items.find(item => item.tagID === tag.id) || tag.allowMultipleValues ));\r\n const newTagValueRef = useRef(null);\r\n\r\n // If this is a list search, and no Tag is selected, then load the search tag (EntityName) system tag\r\n useEffect(() => {\r\n if (!newTag && display.layout === 'list') { \r\n var newValue = reftags.find(row => row.systemName === 'EntityName')\r\n if(newValue){\r\n setnewTag(newValue)\r\n } \r\n }\r\n }, [newTag, display, reftags]);\r\n\r\n // set focus to new tag value on tag selection\r\n useEffect(() => {\r\n if (newTag && newTag.dataType === 'General') {\r\n newTagValueRef.current.focus();\r\n }\r\n }, [newTag]);\r\n\r\n function makeid(length) {\r\n var result = [];\r\n var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\r\n var charactersLength = characters.length;\r\n for ( var i = 0; i < length; i++ ) {\r\n result.push(characters.charAt(Math.floor(Math.random() * charactersLength)));\r\n }\r\n return result.join('');\r\n }\r\n\r\n function selectNewTag(id) {\r\n var newValue = reftags.find(row => row.id === parseInt(id))\r\n setnewTag(newValue)\r\n }\r\n\r\n function clearNewTag() {\r\n setnewTag();\r\n }\r\n\r\n function addTagValue(value) {\r\n if(value.length > 0)\r\n {\r\n var newItem = { id: makeid(6), tagID: newTag.id, tagName: newTag.tagName, contextID: contextID, tagValue: value }\r\n var tempItems = [ ...items ];\r\n tempItems.push(newItem);\r\n setItems(tempItems);\r\n clearNewTag();\r\n setTagValues && setTagValues(tempItems);\r\n autoSave && dispatch(Admin.actions.putTagValues({ tagValues: tempItems, context: context, contextID: contextID, fkID: fkID, tagValuesFilter: tagValuesFilter }))\r\n }\r\n }\r\n\r\n // merge in new item into items array\r\n function updateTagValue(id, value) {\r\n var tempItems = [ ...items ]\r\n tempItems.forEach(function(obj) {\r\n if (obj.id.toString() === id.toString()) {\r\n obj.tagValue = value;\r\n }\r\n });\r\n setItems(tempItems);\r\n setTagValues && setTagValues(tempItems);\r\n autoSave && dispatch(Admin.actions.putTagValues({ tagValues: tempItems, context: context, contextID: contextID, fkID: fkID, tagValuesFilter: tagValuesFilter }))\r\n }\r\n\r\n function deleteTagValue(deleteid) {\r\n var tempItems = items.filter((row) => row.id !== deleteid);\r\n setItems(tempItems);\r\n setTagValues && setTagValues(tempItems);\r\n autoSave && dispatch(Admin.actions.putTagValues({ tagValues: tempItems, context: context, contextID: contextID, fkID: fkID, tagValuesFilter: tagValuesFilter }))\r\n }\r\n\r\n function deleteAllTagValues() {\r\n setItems([]);\r\n setTagValues && setTagValues([]);\r\n autoSave && dispatch(Admin.actions.putTagValues({ tagValues: [], context: context, contextID: contextID, fkID: fkID, tagValuesFilter: tagValuesFilter }))\r\n } \r\n\r\n // For Tag Data Entry - Text field\r\n function TagValueText(props) {\r\n var [newValue, setnewValue] = useState(props.thisTagValue.tagValue) \r\n function onDataEntry(event) {\r\n if ((event.charCode || event.keyCode) === 13) { \r\n changeText(event.target.value)\r\n }\r\n }\r\n\r\n function changeText(value) {\r\n if (props.thisTagValue.id) {\r\n updateTagValue(props.thisTagValue.id, value)\r\n }\r\n else {\r\n addTagValue(value)\r\n }\r\n }\r\n\r\n return ( \r\n <Form.Control \r\n ref={newTagValueRef}\r\n type=\"text\"\r\n defaultValue={newValue}\r\n readOnly={readOnly}\r\n onKeyPress={(event) => onDataEntry(event)}\r\n onInput={(event) => setnewValue(event.target.value)}\r\n onBlur={(event) => changeText(event.target.value)}\r\n autoComplete='OFF'\r\n className=\"tag-input\"\r\n />\r\n )\r\n }\r\n\r\n // For Tag Data Entry - Select\r\n function TagValueSelect(props) {\r\n const change = (value) => {\r\n if (props.thisTagValue.id) {\r\n updateTagValue(props.thisTagValue.id, value)\r\n }\r\n else {\r\n addTagValue(value)\r\n }\r\n }\r\n return (\r\n <Form.Control \r\n as=\"select\"\r\n value={props.thisTagValue.tagValue}\r\n onChange={(event) => change(event.target.value)}\r\n autoComplete='OFF'\r\n className=\"tag-input\"\r\n disabled={readOnly}\r\n >\r\n <option> - Select Value - </option>\r\n {props.thisTag.options.map(option => {\r\n return <option key={option.id} value={option.tagValue} style={{ height: 35 }}>{option.tagValue}</option>\r\n })}\r\n </Form.Control>\r\n )\r\n }\r\n\r\n function SelectNewTag(props) {\r\n return (\r\n\r\n <InputGroup size=\"sm\">\r\n <Form.Control\r\n as=\"select\"\r\n onChange={(event) => selectNewTag(event.target.value)}\r\n autoComplete='OFF'\r\n className=\"tag-select-new\"\r\n style={{ maxWidth: 130 }}\r\n value={newTag && newTag.id}\r\n >\r\n <option>Select Tag: </option>\r\n {reftags && reftags.map(option => {\r\n return !(display.layout === 'form' && option.systemName === 'EntityName') && <option key={option.id} value={option.id} style={{ height: 35 }}>{option.tagName}</option> \r\n })}\r\n </Form.Control>\r\n <Form.Control \r\n type=\"text\"\r\n value=\"\"\r\n readOnly\r\n className=\"tag-select-new-blank-input\"\r\n /> \r\n {props.allowClear ?\r\n <InputGroup.Append onClick={()=> !readOnly ? deleteAllTagValues() : null } className=\"tag-input-append\">\r\n <InputGroup.Text>\r\n <ClearIcon fontSize=\"small\" style={{ marginRight: 5 }} /> <span style={{ fontWeight: 500 }}>Clear</span>\r\n </InputGroup.Text>\r\n </InputGroup.Append>\r\n : \r\n <InputGroup.Append className=\"tag-input-append\">\r\n <InputGroup.Text>\r\n <ClearIcon fontSize=\"small\" style={{ color: \"#f7f8fa\" }} />\r\n </InputGroup.Text>\r\n </InputGroup.Append>\r\n }\r\n </InputGroup>\r\n )\r\n }\r\n\r\n function EnterNewTagValue() {\r\n return (\r\n <InputGroup size=\"sm\"> \r\n <Form.Control\r\n as=\"select\"\r\n onChange={(event) => selectNewTag(event.target.value)}\r\n autoComplete='OFF'\r\n className=\"tag-select-new\"\r\n style={{ maxWidth: 130 }}\r\n value={newTag && newTag.id}\r\n >\r\n <option>Select Tag: </option>\r\n {reftags && reftags.map(option => {\r\n return !(display.layout === 'form' && option.systemName === 'EntityName') && <option key={option.id} value={option.id} style={{ height: 35 }}>{option.tagName}</option> \r\n })}\r\n </Form.Control>\r\n {newTag.dataType === 'List' ?\r\n <TagValueSelect thisTag={newTag} thisTagValue={{ tagValue: '' }} />\r\n :\r\n <TagValueText thisTag={newTag} thisTagValue={{ tagValue: '' }} />\r\n } \r\n <InputGroup.Append onClick={clearNewTag} className=\"tag-input-append\">\r\n <InputGroup.Text>\r\n <ClearIcon fontSize=\"small\" />\r\n </InputGroup.Text>\r\n </InputGroup.Append> \r\n </InputGroup>\r\n )\r\n }\r\n\r\n function ListTagsForm () {\r\n return (\r\n <>\r\n <Grid container p={2} style={{ maxWidth: 450 }}>\r\n {display.header ?\r\n <Grid item md={12} style={{ marginTop: 10, fontWeight: 400, marginBottom: '0.5rem' }}>\r\n Tags\r\n <hr></hr>\r\n </Grid>\r\n :\r\n null\r\n }\r\n <Grid item md={12}>\r\n {items.map(({ id, tagName, tagValue, tagID }) => {\r\n var thisTag = alltags.find(ref => { return ref.id === tagID })\r\n return thisTag.systemName !== 'EntityName' && (\r\n <InputGroup size=\"sm\" key={id}>\r\n <InputGroup.Prepend className=\"tag-input-prepend\">\r\n <InputGroup.Text className=\"tag-input-prepend-text\">\r\n {thisTag && thisTag.tagName} :\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n {\r\n thisTag.dataType === 'List' ?\r\n <TagValueSelect key={`tvs${id}`} thisTag={thisTag} thisTagValue={{ id, tagName, tagValue, tagID }} />\r\n :\r\n <TagValueText key={`tvt${id}`} thisTag={thisTag} thisTagValue={{ id, tagName, tagValue, tagID }} /> \r\n }\r\n <InputGroup.Append onClick={()=> !readOnly ? deleteTagValue(id) : null } className=\"tag-input-append\">\r\n <InputGroup.Text>\r\n {!readOnly ? <ClearIcon fontSize=\"small\" /> : null }\r\n </InputGroup.Text>\r\n </InputGroup.Append>\r\n </InputGroup>\r\n )\r\n }\r\n )}\r\n {items.length < 1 && <p>No tags yet.</p>} \r\n </Grid>\r\n {!readOnly ?\r\n <>\r\n <Grid item md={12} style={{ marginTop: 10, fontWeight: 400, marginBottom: '0.5rem' }}>\r\n Add Tag\r\n </Grid>\r\n <Grid item md={12}>\r\n {!newTag ?\r\n <SelectNewTag allowClear={false} />\r\n :\r\n <EnterNewTagValue />\r\n }\r\n </Grid>\r\n </> \r\n : null }\r\n </Grid>\r\n </>\r\n )\r\n }\r\n\r\n if (KTUtil.isEmpty(alltags)) {\r\n return <p>...loading Tags</p>\r\n }\r\n\r\n if (display.layout === 'form') \r\n {\r\n return (\r\n <>\r\n {display.box ? \r\n <div className=\"tag-box\"> \r\n <ListTagsForm />\r\n </div>\r\n :\r\n <ListTagsForm />\r\n }\r\n </>\r\n );\r\n }\r\n else if (display.layout === 'title') \r\n {\r\n return (\r\n <>\r\n {/* <div style={{ marginLeft: 10 }}> */}\r\n {items.map(({ id, tagName, tagValue, tagID }) => { \r\n var thisTag = alltags.find(ref => { return ref.id === tagID })\r\n return (\r\n <div key={`add_div${id}`} className=\"tag-title-item\">\r\n <Tooltip title={tagName} classes={{ tooltip: classes.tooltip }}> \r\n <span style={{ backgroundColor: thisTag.colour }}>\r\n <LabelOutlinedIcon style={{ marginRight: 5, marginBottom: 2 }} />\r\n <span className=\"tag-title-value-span\">{tagValue}</span>\r\n </span>\r\n </Tooltip>\r\n </div>\r\n )}\r\n )}\r\n {/* </div> */}\r\n </>\r\n );\r\n }\r\n else // if not form, this is a list. Other uses may emerge later\r\n {\r\n return (\r\n <>\r\n <Grid container className=\"tag-search-container\">\r\n <Grid item md={12}>\r\n <div className=\"tag-search-input-container\">\r\n {!newTag ?\r\n <SelectNewTag allowClear={true} />\r\n :\r\n <EnterNewTagValue />\r\n }\r\n </div>\r\n </Grid>\r\n <Grid item md={12}>\r\n {items.map(({ id, tagName, tagValue, tagID }) => { \r\n var thisTag = alltags.find(ref => { return ref.id === tagID })\r\n return (\r\n <div key={`add_div${id}`} className=\"tag-search-item\">\r\n {thisTag && thisTag.tagName}: <span style={{ fontWeight: 600 }}>{tagValue}</span> \r\n <HighlightOffIcon key={`add${id}`} onClick={()=>deleteTagValue(id)} className=\"tag-search-item-delete\" />\r\n </div>\r\n )}\r\n )}\r\n </Grid>\r\n </Grid>\r\n </>\r\n );\r\n }\r\n\r\n \r\n}\r\n\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport { Button, Modal, Form, Row, Col, Tabs, Tab, InputGroup, Badge, Spinner } from \"react-bootstrap\";\r\nimport { Paper, TableContainer, Table, TableHead, TableBody, TableRow, TableCell, TextField, List, ListItem, ListItemIcon, ListItemText, Typography, Grid, FormControl, Checkbox, Select, InputLabel, MenuItem, Tooltip, makeStyles } from '@material-ui/core';\r\nimport { DataGridPro } from '@mui/x-data-grid-pro';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport ClearIcon from '@material-ui/icons/Clear';\r\nimport TodayIcon from '@material-ui/icons/Today';\r\nimport ForumIcon from '@material-ui/icons/Forum';\r\nimport BookmarkIcon from '@material-ui/icons/Bookmark';\r\nimport InsertDriveFileIcon from '@material-ui/icons/InsertDriveFile';\r\nimport BookingsList from \"../../../components/BookingsList\";\r\nimport MoveToInboxIcon from '@material-ui/icons/MoveToInbox';\r\n// import LabelOutlinedIcon from '@material-ui/icons/LabelOutlined';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport * as Reference from \"../../../store/ducks/reference.duck\";\r\nimport ReferralMaintenance from \"../../../components/ReferralMaintenance\";\r\nimport PlacesAutoComplete from \"../../../components/AddressAutoComplete\";\r\nimport { BookingWeek } from \"../../../components/Appointments\";\r\nimport Notes from \"../../../components/Notes\";\r\nimport Files from \"../../../components/Files\";\r\nimport Tags from '../../../components/Tags';\r\nimport ToDos from '../../../components/ToDos';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport { format } from \"date-fns\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\nimport '../../../../_metronic/_assets/css/app.css';\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n noBorder: {\r\n border: \"none\",\r\n },\r\n\tformControl: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: 120,\r\n\t},\r\n\tformControlWide: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: '100%',\r\n\t},\r\n\tselectEmpty: {\r\n\t marginTop: theme.spacing(2),\r\n\t},\r\n\tlabel: {\r\n\t backgroundColor: '#fff',\r\n\t paddingLeft: 3,\r\n\t paddingRight: 3,\r\n\t}\r\n }));\r\n\r\nexport default function Clients(props) {\r\n \r\n const dispatch = useDispatch()\r\n const contexts = useSelector(state => state.reference.Contexts)\r\n const tags = useSelector(state => state.reference.Tags)\r\n const actualClients = useSelector(state => state.admin.Clients)\r\n const client = useSelector(state => state.admin.Client)\r\n const progressStatus = useSelector(state => state.admin.progressStatus)\r\n const source = useSelector(state => state.admin.Source)\r\n \r\n const clients = actualClients.filter(client => (props.clienttype === 'Psychologist' ? (client.providertype === props.clienttype || client.providertype === 'Occupational' || client.providertype === 'Clinical' ) : client.providertype === props.clienttype))\r\n const filters = useSelector(state => state.admin.Filters)\r\n const listfilters = useSelector(state => state.admin.Filters.clientsList)\r\n const bookings = useSelector(state => state.admin.Bookings)\r\n const clientBooking = useSelector(state => state.admin.Booking)\r\n\r\n var [currentClientID, setcurrentClientID] = useState(); \r\n var [currentMedicalPractitionerID, setcurrentMedicalPractitionerID] = useState();\r\n var [currentPaymentType, setcurrentPaymentType] = useState();\r\n var [currentClientBookingType, setcurrentClientBookingType] = useState()\r\n var [currentTimeZone, setcurrentTimeZone] = useState();\r\n var [currentfulladdress, setcurrentfulladdress] = useState();\r\n var [currentLatitude, setcurrentLatitude] = useState();\r\n var [currentLongitude, setcurrentLongitude] = useState();\r\n var [currentID, setcurrentID] = useState();\r\n var [currentPostCode, setcurrentPostCode] = useState();\r\n var [currentStatus, setcurrentStatus] = useState(); \r\n var [currentFirstName, setcurrentFirstName] = useState();\r\n var [currentPreferredName, setcurrentPreferredName] = useState();\r\n var [currentSurname, setcurrentSurname] = useState();\r\n var [currentDOB, setcurrentDOB] = useState();\r\n var [currentEmail, setcurrentEmail] = useState();\r\n var [currentGender, setcurrentGender] = useState();\r\n var [currentOccupation, setcurrentOccupation] = useState();\r\n var [currentMobile, setcurrentMobile] = useState();\r\n var [currentNote, setcurrentNote] = useState();\r\n var [currenthopeToGetFromTreatment, setcurrenthopeToGetFromTreatment] = useState();\r\n var [currentEmergencyContactName1, setcurrentEmergencyContactName1] = useState();\r\n var [currentEmergencyContactPhone1, setcurrentEmergencyContactPhone1] = useState();\r\n var [currentEmergencyContactRelation1, setcurrentEmergencyContactRelation1] = useState();\r\n var [currentEmergencyContactName2, setcurrentEmergencyContactName2] = useState();\r\n var [currentEmergencyContactPhone2, setcurrentEmergencyContactPhone2] = useState();\r\n var [currentEmergencyContactRelation2, setcurrentEmergencyContactRelation2] = useState();\r\n var [currentAreasOfInterest, setcurrentAreasOfInterest] = useState();\r\n var [currentmedicareno, setcurrentmedicareno] = useState();\r\n var [currentmedicarereferenceno, setcurrentmedicarereferenceno] = useState();\r\n var [currentmedicareexpirydate, setcurrentmedicareexpirydate] = useState();\r\n var [currentwaitingRoomURL, setcurrentwaitingRoomURL] = useState('');\r\n var [currentAppointmentType, setcurrentAppointmentType] = useState('0');\r\n var [currentRHCNDISManagement, setcurrentRHCNDISManagement] = useState('0')\r\n var [currentRHCContractManagement, setcurrentRHCContractManagement] = useState('0')\r\n var [currentTagValues, setcurrentTagValues] = useState([]);\r\n var [currentNewPassword,setcurrentNewPassword] = useState();\r\n var [currentNewPasswordConfirmation,setcurrentNewPasswordConfirmation] = useState();\r\n var [currentForcePasswordChange,setcurrentForcePasswordChange] = useState();\r\n var [currentReferrerName,setcurrentReferrerName] = useState();\r\n var [currentReferrerEmail,setcurrentReferrerEmail] = useState();\r\n var [currentReferrerOrganisation,setcurrentReferrerOrganisation] = useState();\r\n var [currentReferrerMobile,setcurrentReferrerMobile] = useState();\r\n var [currentReferrerContactName,setcurrentReferrerContactName] = useState();\r\n var [currentReferrerContactMobile,setcurrentReferrerContactMobile] = useState();\r\n var [currentReferrerContactEmail,setcurrentReferrerContactEmail] = useState();\r\n var [currentBusinessName,setcurrentBusinessName] = useState();\r\n var [currentABN,setcurrentABN] = useState();\r\n var [currentBusinessAddress,setcurrentBusinessAddress] = useState();\r\n var [currentBackgroundInformation,setcurrentBackgroundInformation] = useState()\r\n var [currentHealthCareCard,setcurrentHealthCareCard] = useState();\r\n var [currentUnemployed,setcurrentUnemployed] = useState();\r\n var [currentGPMentalHealthPlan12Months, setcurrentGPMentalHealthPlan12Months] = useState();\r\n \r\n var [currentNaturalDisaster,setcurrentNaturalDisaster] = useState();\r\n var [currentBulkBilledReason,setcurrentBulkBilledReason] = useState();\r\n var [currentPsychologistID,setcurrentPsychologistID] = useState();\r\n var [currentGPID,setcurrentGPID] = useState();\r\n var [currentListColor, setcurrentListColor] = useState();\r\n \r\n const [currentGPName,setcurrentGPName] = useState();\r\n const [currentGPClinicName,setcurrentGPClinicName] = useState();\r\n const [currentEAPWorkPlace,setcurrentEAPWorkPlace] = useState();\r\n const [currentNDISNumber,setcurrentNDISNumber] = useState();\r\n const [currentNDISDateFrom,setcurrentNDISDateFrom] = useState();\r\n const [currentNDISDateTo,setcurrentNDISDateTo] = useState();\r\n const [currentNDISPlanManagementProvider,setcurrentNDISPlanManagementProvider] = useState();\r\n const [currentNDISEmailForInvoices,setcurrentNDISEmailForInvoices] = useState();\r\n const [existingNDISEmailForInvoices,setexistingNDISEmailForInvoices] = useState();\r\n const [currentNDISDiagnosisHistory,setcurrentNDISDiagnosisHistory] = useState();\r\n const [currentNDISBookingFee,setcurrentNDISBookingFee] = useState();\r\n const [currentNDISProviderFee,setcurrentNDISProviderFee] = useState();\r\n const [currentNDISActualProviderFee,setcurrentNDISActualProviderFee] = useState()\r\n const [currentNDISSupportCoordinator,setcurrentNDISSupportCoordinator] = useState();\r\n const [currentNDISSupportCoordinatorPhone,setcurrentNDISSupportCoordinatorPhone] = useState();\r\n const [currentNDISBillingNote,setcurrentNDISBillingNote] = useState();\r\n const [currentRHCNDISItemCode, setcurrentRHCNDISItemCode] = useState()\r\n // const [currentReferralGPName,setcurrentReferralGPName] = useState();\r\n const [currentReferralGPPracticeFax,setcurrentReferralGPPracticeFax] = useState();\r\n // const [currentReferralGPPracticeEmail,setcurrentReferralGPPracticeEmail] = useState();\r\n const [currentConsentToShareWithGP,setcurrentConsentToShareWithGP] = useState();\r\n const [currentPronouns,setcurrentPronouns] = useState();\r\n const [currentHandOverNotes,setcurrentHandOverNotes] = useState();\r\n const [currentOpportunityDescription,setcurrentOpportunityDescription] = useState();\r\n const [currentOpportunityColour,setcurrentOpportunityColour] = useState();\r\n const [currentOpportunityStatus,setcurrentOpportunityStatus] = useState();\r\n const [currentOpportunityInterested,setcurrentOpportunityInterested] = useState();\r\n const [currentIndigenous,setcurrentIndigenous] = useState()\r\n const [currentProgramPopulation,setcurrentProgramPopulation] = useState([])\r\n const [currentNthQLDPHNBookings,setcurrentNthQLDPHNBookings] = useState()\r\n const [currentNthQLDPHNPast,setcurrentNthQLDPHNPast] = useState()\r\n const [currentNthQLDPHNTotal,setcurrentNthQLDPHNTotal] = useState()\r\n const [currentNthQLDPHNFuture,setcurrentNthQLDPHNFuture] = useState()\r\n\r\n var [currentSpecialistType,setcurrentSpecialistType] = useState()\r\n var [currentClientType,setcurrentClientType] = useState()\r\n const [key, setKey] = React.useState('personalDetails');\r\n var [showBooking, setShowBooking] = useState(false)\r\n \r\n var [toggleMessage, setToggleMessage] = useState(false)\r\n var [newNote, setNewNote] = useState('')\r\n var [sentMsg, setSentMsg] = useState()\r\n\r\n\r\n // Define Program Question responses \r\n const programPopulationOptions = [\r\n {\r\n \"id\" : \"1\",\r\n \"index\" : \"1\",\r\n \"name\" : \"Aboriginal and/or Torres Strait Islander\",\r\n },\r\n {\r\n \"id\" : \"2\",\r\n \"index\" : \"2\",\r\n \"name\": \"Culturally and linguistically diverse\",\r\n },\r\n {\r\n \"id\": \"3\",\r\n \"index\": \"3\",\r\n \"name\": \"Migrant and Refugee\",\r\n },\r\n {\r\n \"id\" : \"4\",\r\n \"index\": \"4\",\r\n \"name\": \"Under 20\",\r\n },\r\n {\r\n \"id\" : \"5\",\r\n \"index\": \"5\",\r\n \"name\": \"Rural and Remote\",\r\n }\r\n ]\r\n\r\n // Define Program Question responses \r\n const programPopulationOptionsPerinatal = [\r\n {\r\n \"id\" : \"1\",\r\n \"index\" : \"1\",\r\n \"name\" : \"Aboriginal and/or Torres Strait Islander\",\r\n },\r\n {\r\n \"id\" : \"2\",\r\n \"index\" : \"2\",\r\n \"name\": \"Culturally and linguistically diverse\",\r\n },\r\n {\r\n \"id\": \"3\",\r\n \"index\": \"3\",\r\n \"name\": \"Migrant and Refugee\",\r\n },\r\n {\r\n \"id\" : \"4\",\r\n \"index\": \"4\",\r\n \"name\": \"Under 20\",\r\n },\r\n {\r\n \"id\" : \"5\",\r\n \"index\": \"5\",\r\n \"name\": \"Rural and Remote\",\r\n },\r\n {\r\n \"id\" : \"6\",\r\n \"index\": \"6\",\r\n \"name\": \"Miscarriage\",\r\n },\r\n {\r\n \"id\" : \"7\",\r\n \"index\": \"7\",\r\n \"name\": \"Stillbirth\",\r\n },\r\n {\r\n \"id\" : \"6\",\r\n \"index\": \"6\",\r\n \"name\": \"Early Miscarriage\",\r\n },\r\n {\r\n \"id\" : \"7\",\r\n \"index\": \"7\",\r\n \"name\": \"Late Miscarriage\",\r\n },\r\n {\r\n \"id\" : \"6\",\r\n \"index\": \"6\",\r\n \"name\": \"Multple Miscarriage\",\r\n }\r\n\r\n ]\r\n\r\n function getIndex(value, arr, prop) {\r\n for(var i = 0; i < arr.length; i++) {\r\n if(arr[i][prop] === value) {\r\n return i;\r\n }\r\n }\r\n return -1; // where the value doesn't exist\r\n }\r\n\r\n \r\n const searchClients = (client) => {\r\n if( true\r\n && (client.fullname.toLowerCase().search(filters.clientsTerm.toLowerCase()) > -1 || client.flagClean.toLowerCase().search(filters.clientsTerm.toLowerCase()) > -1 || client.psychologistName.toLowerCase().search(filters.clientsTerm.toLowerCase()) > -1 || filters.clientsTerm.length === 0)\r\n && (client.referrercontactname.toLowerCase().search(filters.clientsReferrer.toLowerCase()) > -1 || client.referrerorganisation.toLowerCase().search(filters.clientsReferrer.toLowerCase()) > -1 || filters.clientsReferrer.length === 0)\r\n && (!filters.clientsPsychologist || filters.clientsPsychologist === 'All' || (filters.clientsPsychologist && client.currentpsychologistid === filters.clientsPsychologist.id))\r\n // && (filters.clientsFlags === 'All' || (client.clientRegistrationID === null && filters.clientsFlags === 'Self-registered'))\r\n // Removed for performance reasons && (filters.clientsAOI === '' || client.clientAreasOfInterest.some(issue => issue === filters.clientsAOI))\r\n && (filters.clientsStatus === 'All' \r\n || (filters.clientsStatus === 'Active' && client.status === 'Active') \r\n || (filters.clientsStatus === 'Archived' && client.status === 'Archived') \r\n || (filters.clientsStatus === 'ToDoWarning' && client.toDoWarning > 0 && client.status === 'Active') \r\n || (filters.clientsStatus === 'ToDo' && client.toDoCount > 0 && client.status === 'Active')\r\n || (filters.clientsStatus === 'ToDoPPW' && (client.toDoPPWFollowUp > 0 || (client.taskflags && client.taskflags.length > 1 && client.taskflags[1] === '0')) && client.status === 'Active')\r\n || (filters.clientsStatus === 'ToDoGP' && client.toDoNeedsGPBooking > 0 && client.status === 'Active')\r\n || (filters.clientsStatus === 'ToDoCancel' && client.toDoRecentCancellation > 0 && client.status === 'Active')\r\n || (filters.clientsStatus === 'ToDoSentToProvider' && client.toDoSentToProvider > 0 && client.status === 'Active')\r\n || (filters.clientsStatus === 'Abandoned' && client.abandoned && client.status === 'Active')\r\n || (filters.clientsStatus === 'Opportunity' && client.opportunity && client.status === 'Active')\r\n || (filters.clientsStatus === 'GPUnallocated' && client.providerUnallocated && client.status === 'Active')\r\n || (filters.clientsStatus === 'EAP/Contract' && client.providerEAPContract && client.status === 'Active')\r\n || (filters.clientsStatus === 'NthQLDPHN' && client.providerNthQLDPHN && client.status === 'Active')\r\n || (filters.clientsStatus === 'Followup' && client.taskflags && client.taskflags[0] === '1' && client.taskflags.length > 1 && client.status === 'Active')\r\n )\r\n // && (filters.clientsSpecialisationType === 'All' || (client.specialisttype === filters.clientsSpecialisationType)) \r\n && (filters.clientsType === 'All' || ( filters.clientsType === 'RHC' && client.clienttype === 'RHC' ) || ( filters.clientsType === 'Private' && client.clienttype === 'Private' ) || ( filters.clientsType === 'Self-registered' && client.clientRegistrationID === null )) \r\n && (!filters.clientsColour || filters.clientsColour === 'All' || (client.listcolor === filters.clientsColour))\r\n )\r\n {\r\n return client\r\n } \r\n }\r\n \r\n const validateMedicareNumber = require('validate-medicare-number');\r\n\r\n const filteredClients = clients.filter(client => searchClients(client))\r\n // const filteredClients = clients;\r\n\r\n // useEffect( () => { dispatch(Admin.actions.fetchClients()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchSource()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchMedicalPractitioners()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchMedicalPractices({ type: 'GeneralPractitioner' })) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchContracts()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchPrograms()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchRegistered()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchTimeZone()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchConstants()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchFundingTypes()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchSundayThisWeek()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchAreasOfInterest(props.clienttype)) }, [dispatch, props.clienttype] )\r\n useEffect( () => { (contexts && contexts.length < 1) && dispatch(Reference.actions.fetchContexts()) }, [dispatch, contexts] )\r\n useEffect( () => { (tags && tags.length < 1) && dispatch(Reference.actions.fetchTags()) }, [dispatch, tags] )\r\n\r\n const actualRegistered = useSelector(state => state.admin.RegisteredPsychologists)\r\n const registered = actualRegistered.filter(psychologist => (props.clienttype === 'Psychologist' ? (psychologist.providertype === 'Psychologist' || psychologist.providertype === 'Occupational' || psychologist.providertype === 'Nurse' || psychologist.providertype === 'Social' || psychologist.providertype === 'Provisional' || psychologist.providertype === 'Clinical') : psychologist.providertype === props.clienttype))\r\n const registeredPsychologists = actualRegistered.filter(psychologist => ((psychologist.providertype === 'Psychologist') || psychologist.providertype === 'Occupational' || psychologist.providertype === 'Social' || psychologist.providertype === 'Nurse' || psychologist.providertype === 'Provisional' || psychologist.providertype === 'Clinical'))\r\n const registeredFinancial = actualRegistered.filter(psychologist => (psychologist.providertype === 'Financial'))\r\n const registeredGP = actualRegistered.filter(psychologist => (psychologist.providertype === 'GP'))\r\n const registeredPsychologistsNthQLDPHN = registeredPsychologists.filter(psychologist => (psychologist.specialisttype === 'nthqldphn'))\r\n const registeredPsychologistsNotNthQLDPHN = registeredPsychologists.filter(psychologist => (psychologist.specialisttype !== 'nthqldphn'))\r\n\r\n const registeredWithClients = registered.filter(psychologist => psychologist.referralCount > 0)\r\n const medicalPractitioners = useSelector(state => state.admin.MedicalPractitioners)\r\n const medicalPractices = useSelector(state => state.admin.MedicalPractices.GeneralPractitioner)\r\n // const fundingTypes = useSelector(state => state.reference.FundingTypes)\r\n const timeZone = useSelector(state => state.reference.TimeZone)\r\n const contracts = useSelector(state => state.admin.Contracts)\r\n const programs = useSelector(state => state.admin.Programs)\r\n const areasOfInterestReference = useSelector(state => state.reference.AreasOfInterest)\r\n\r\n // based on the provider type, filter the AOI\r\n const areasOfInterest = areasOfInterestReference.filter(aoi => aoi.providertype === (props.clienttype === 'Unassociated' ? 'Psychologist' : props.clienttype))\r\n \r\n\r\n var [show, setShow] = useState(false)\r\n var [showAppointment, setShowAppointment] = useState(false)\r\n var [showNotes, setShowNotes] = useState(false);\r\n var [showFiles, setShowFiles] = useState(false);\r\n var [medicarenoError,setmedicarenoError] = useState('');\r\n const [showToDo, setShowToDo] = useState(false)\r\n const [toDoClientID, setToDoClientID] = useState()\r\n const [toDoTitle, setToDoTitle] = useState('')\r\n\r\n const initSource = useCallback(() => {\r\n return { id: 0, firstName: '', surname: '', phone: '', email: '', organisationname: '', description: '',status: 'Active' }\r\n },[])\r\n\r\n const initMedicalPractitioner = useCallback(() => {\r\n return { id: 0, providernumber: '', salutation: 'Dr', firstName: '', surname: '', fullname: '', mobilephone: '', phone: '', type: 'Client GP', }\r\n },[])\r\n\r\n const initMedicalPractice = useCallback(() => {\r\n return { id: 0, abn: '', practicename: '', phone: '', fax: '', address1: '', email: '', website: '', logoURL: '', practiceType: 'GeneralPractitioner' }\r\n },[])\r\n\r\n const initContract = useCallback(() => {\r\n return { id:0, name: ''}\r\n },[])\r\n\r\n const initProgram = useCallback(() => {\r\n return { id:0, name: '', identifier: '', description: '', status: 'Active', aoi: 0, availabilitytype: '', bulkbilling: 'N' }\r\n },[])\r\n\r\n const loadSource = useCallback((thisSource) => {\r\n // console.log(thisSource)\r\n setcurrentSource(thisSource ? thisSource : initSource())\r\n },[initSource])\r\n\r\n\r\n const getSourceOption = (option, value) => {\r\n if (option.id === value.id) {\r\n return option\r\n } else {\r\n return initSource();\r\n }\r\n }\r\n\r\n const [currentSource, setcurrentSource] = useState(initSource()); \r\n\r\n const loadMedicalPractitice = useCallback((thisMedicalPractice) => {\r\n setcurrentMedicalPractice(thisMedicalPractice ? thisMedicalPractice : initMedicalPractice())\r\n },[initMedicalPractice])\r\n\r\n\r\n const loadMedicalPractitioner = useCallback((thisMedicalPractitioner) =>{\r\n setcurrentMedicalPractitioner(thisMedicalPractitioner ? thisMedicalPractitioner : initMedicalPractitioner())\r\n setcurrentMedicalPractitionerID(thisMedicalPractitioner ? thisMedicalPractitioner.id : 0);\r\n var tempMedicalPractice = thisMedicalPractitioner ? medicalPractices.find(v => v.id === thisMedicalPractitioner.medicalPracticeID) : null;\r\n loadMedicalPractitice(tempMedicalPractice)\r\n },[setcurrentMedicalPractitionerID,loadMedicalPractitice,medicalPractices,initMedicalPractitioner])\r\n\r\n\r\n const loadProgram = useCallback((thisProgram) => {\r\n setcurrentProgram(thisProgram ? thisProgram : initProgram())\r\n }, [initProgram])\r\n\r\n const loadPreviousContract = useCallback((thisContract) => {\r\n setPreviousContract(thisContract ? thisContract : initContract())\r\n }, [initContract])\r\n\r\n\r\n const loadContract = useCallback((thisContract) => {\r\n setcurrentContract(thisContract ? thisContract : initContract())\r\n }, [initContract])\r\n\r\n\r\n var [currentMedicalPractitioner, setcurrentMedicalPractitioner] = useState(initMedicalPractitioner()); \r\n var [currentMedicalPractice, setcurrentMedicalPractice] = useState(initMedicalPractice());\r\n var [currentProgram, setcurrentProgram] = useState(initProgram())\r\n var [currentContract, setcurrentContract] = useState(initContract())\r\n var [previousContract, setPreviousContract] = useState(initContract());\r\n\r\n const getMedicalPractitionerOption = (option, value) => {\r\n if (option.id === value.id) {\r\n return option\r\n } else {\r\n return initMedicalPractitioner();\r\n }\r\n }\r\n\r\n const getMedicalPracticeOption = (option, value) => {\r\n if (option.id === value.id) {\r\n return option\r\n } else {\r\n return initMedicalPractice();\r\n }\r\n }\r\n\r\n const getContractOption = (option, value) => {\r\n if (option.id === value.id) {\r\n return option\r\n } else {\r\n return initContract();\r\n }\r\n }\r\n\r\n const getProgramOption = (option, value) => {\r\n if (option.id === value.id) {\r\n return option\r\n } else {\r\n return initProgram();\r\n }\r\n }\r\n\r\n const handleToggle = (value) => () => {\r\n const currentIndex = getIndex(value.id, currentProgramPopulation, 'id') //checked.find(r => r.id === value.id);\r\n const newChecked = [...currentProgramPopulation];\r\n if (currentIndex === -1) {\r\n newChecked.push(value);\r\n } else {\r\n newChecked.splice(currentIndex, 1);\r\n }\r\n setcurrentProgramPopulation(newChecked);\r\n }\r\n\r\n\r\n function handleClose() {\r\n setShow(false);\r\n // Clear Client Selection in state\r\n dispatch(Admin.actions.clearClient());\r\n } \r\n\r\n function handleAppointmentClose() {\r\n setShowAppointment(false);\r\n } \r\n\r\n function handleRHCNDISManagementChange(value) {\r\n setcurrentRHCNDISManagement(value);\r\n }\r\n\r\n function handleRHCContractManagementChange(value) {\r\n setcurrentRHCContractManagement(value);\r\n }\r\n\r\n function handleAppointmentTypeChange(value) {\r\n setcurrentAppointmentType(value);\r\n }\r\n \r\n function handleTimeZoneAutocompleteChange(propertyName, event, newValue) { \r\n if (newValue) {\r\n setcurrentTimeZone(newValue.systemName);\r\n }\r\n } \r\n\r\n function handlePsychologistAutocompleteChange(propertyName,event,newValue)\r\n {\r\n if (newValue) \r\n {\r\n setcurrentPsychologistID(newValue.id);\r\n }\r\n }\r\n\r\n function handleGPAutocompleteChange(propertyName,event,newValue)\r\n {\r\n if (newValue) \r\n {\r\n setcurrentGPID(newValue.id);\r\n }\r\n }\r\n\r\n function putClient() {\r\n // Need to do some validation with Medicare Numbers firstly is their one entered \r\n if (currentmedicareno.length > 0)\r\n {\r\n // Ok now check it is a valid number \r\n var clientmedicare = validateMedicareNumber(currentmedicareno);\r\n if (!clientmedicare) \r\n {\r\n // Its a bad number - don't save \r\n setmedicarenoError('Medicare Number is invalid');\r\n return;\r\n }\r\n }\r\n\r\n var payload = {\r\n profileClientID: currentClientID,\r\n profileFirstName: currentFirstName,\r\n profilePreferredName: currentPreferredName,\r\n profileSurname: currentSurname,\r\n profileDOB: currentDOB,\r\n profileEmail: currentEmail,\r\n profileGender: currentGender,\r\n profileOccupation: currentOccupation,\r\n profileMobile: currentMobile,\r\n profilefulladdress: currentfulladdress,\r\n profileStatus: currentStatus,\r\n profileNote: currentNote,\r\n profilehopeToGetFromTreatment: currenthopeToGetFromTreatment,\r\n profileMedicalPractitionerID: currentMedicalPractitionerID,\r\n profilePaymentType: currentPaymentType,\r\n profileCurrentContractID : currentContract.id,\r\n profilePreviousContactID: previousContract.id,\r\n profileTimeZone: currentTimeZone,\r\n profileLatitude: currentLatitude, \r\n profileLongitude: currentLongitude,\r\n profilePostCode: currentPostCode,\r\n emergencycontactname1: currentEmergencyContactName1,\r\n emergencycontactphone1: currentEmergencyContactPhone1,\r\n emergencycontactrelation1: currentEmergencyContactRelation1,\r\n emergencycontactname2: currentEmergencyContactName2,\r\n emergencycontactphone2: currentEmergencyContactPhone2,\r\n emergencycontactrelation2: currentEmergencyContactRelation2,\r\n profileAreasOfInterest: currentAreasOfInterest.map(aoi => aoi.issue).join(\",\"),\r\n profilemedicareno: currentmedicareno,\r\n profilemedicarereferenceno: currentmedicarereferenceno,\r\n profilemedicareexpirydate: currentmedicareexpirydate, \r\n medicalPractice: currentMedicalPractice,\r\n status: currentStatus,\r\n medicalPractitioner: currentMedicalPractitioner, \r\n appointmenttype: currentAppointmentType, \r\n rhcndismanagement : currentRHCNDISManagement,\r\n rhccontractmanagement : currentRHCContractManagement,\r\n profilepassword: currentNewPassword,\r\n profilepasswordconfirmation : currentNewPasswordConfirmation,\r\n profileforcepasswordchange : currentForcePasswordChange, \r\n profilecurrentPsychologistID : currentPsychologistID,\r\n profilecurrentGPID : currentGPID,\r\n profilegpname : currentGPName,\r\n profilegpclinicname : currentGPClinicName,\r\n profileeapworkplace : currentEAPWorkPlace,\r\n profilendisnumber: currentNDISNumber,\r\n profilendisdatefrom : currentNDISDateFrom,\r\n profilendisdateto : currentNDISDateTo,\r\n profilendisplanmanagementprovider : currentNDISPlanManagementProvider,\r\n profilendisemailforinvoices : currentNDISEmailForInvoices,\r\n profileexistingndisemailforinvoices : existingNDISEmailForInvoices,\r\n profilendisdiagnosishistory : currentNDISDiagnosisHistory,\r\n profilendisbookingfee : currentNDISBookingFee,\r\n profilendisproviderfee: currentNDISProviderFee,\r\n profileConsentToShareWithGP : currentConsentToShareWithGP,\r\n profilePronouns : currentPronouns,\r\n profileNDISSupportCoordinator : currentNDISSupportCoordinator,\r\n profileNDISSupportCoordinatorPhone : currentNDISSupportCoordinatorPhone,\r\n profileRHCNDISItemCode: currentRHCNDISItemCode,\r\n profileNDISBillingNote: currentNDISBillingNote,\r\n profileOpportunityDescription: currentOpportunityDescription,\r\n profileOpportunityColour: currentOpportunityColour,\r\n profileOpportunityStatus: currentOpportunityStatus,\r\n profileHandoverNotes: currentHandOverNotes,\r\n profileIndigenous: currentIndigenous,\r\n profileprogrampopulation: currentProgramPopulation.map(pp => pp.name).join(\",\"),\r\n profileprogramid: currentProgram.id,\r\n source: currentSource,\r\n profilelistcolor: currentListColor,\r\n specialisttype: currentSpecialistType,\r\n clienttype: currentClientType,\r\n profileNthQLDPHNBookings: currentNthQLDPHNBookings\r\n } \r\n // Only Updates are allowed (inserts via registration) \r\n if (process.env.REACT_APP_DEBUG) \r\n {\r\n console.log ('Putting (Update)');\r\n } \r\n // Save update \r\n dispatch(Admin.actions.putClientDetail(payload));\r\n // Close form\r\n setShow(false);\r\n }\r\n\r\n function loadNotes(thisClient) {\r\n setcurrentClientID(thisClient.id)\r\n setcurrentID(thisClient.id)\r\n setcurrentFirstName(thisClient.firstname)\r\n setcurrentPreferredName(thisClient.preferredname)\r\n setcurrentSurname(thisClient.surname)\r\n setcurrentwaitingRoomURL(thisClient.waitingRoomURL)\r\n // setcurrentReferralGPName(thisClient.referringGPName)\r\n setcurrentReferralGPPracticeFax(thisClient.referralGPPracticeFax)\r\n // setcurrentReferralGPPracticeEmail(thisClient.referralGPPracticeEmail)\r\n setShowNotes(true)\r\n }\r\n \r\n function loadFiles(thisClient) {\r\n setcurrentClientID(thisClient.id)\r\n setcurrentPaymentType(thisClient.paymentType)\r\n setcurrentFirstName(thisClient.firstname)\r\n setcurrentPreferredName(thisClient.preferredname)\r\n setcurrentSurname(thisClient.surname)\r\n setShowFiles(true)\r\n }\r\n\r\n const loadClient = useCallback((id) => {\r\n dispatch(Admin.actions.fetchClient( { clientID: id, type: props.clienttype } ))\r\n },[props.clienttype,dispatch])\r\n\r\n const loadProfile = useCallback((thisClient) => {\r\n // console.log(thisClient);\r\n dispatch(Admin.actions.fetchBookings({ key: 'client', id: thisClient.id }))\r\n setcurrentClientID(thisClient.id);\r\n setcurrentID(thisClient.id);\r\n setcurrentMedicalPractitionerID(thisClient.medicalPractitionerID);\r\n setcurrentPaymentType(thisClient.paymentType)\r\n setcurrentClientBookingType(thisClient.appointmenttype === '1' ? 'PHONE' : 'VIDEO')\r\n setcurrentfulladdress(thisClient.fulladdress)\r\n setcurrentStatus(thisClient.status)\r\n setcurrentLatitude(thisClient.latitude)\r\n setcurrentLongitude(thisClient.longitude)\r\n setcurrentFirstName(thisClient.firstname)\r\n setcurrentPreferredName(thisClient.preferredname)\r\n setcurrentSurname(thisClient.surname);\r\n setcurrentDOB(thisClient.dob);\r\n setcurrentEmail(thisClient.email);\r\n setcurrentGender(thisClient.gender);\r\n setcurrentOccupation(thisClient.occupation);\r\n setcurrentMobile(thisClient.mobilephone);\r\n setcurrentNote(thisClient.note);\r\n setcurrentTimeZone(thisClient.timeZone);\r\n setcurrentPostCode(thisClient.postCode);\r\n setcurrenthopeToGetFromTreatment(thisClient.hopeToGetFromTreatment);\r\n setcurrentEmergencyContactName1(thisClient.emergencycontactname1);\r\n setcurrentEmergencyContactPhone1(thisClient.emergencycontactphone1);\r\n setcurrentEmergencyContactRelation1(thisClient.emergencycontactrelation1);\r\n setcurrentEmergencyContactName2(thisClient.emergencycontactname2);\r\n setcurrentEmergencyContactPhone2(thisClient.emergencycontactphone2);\r\n setcurrentEmergencyContactRelation2(thisClient.emergencycontactrelation2);\r\n setcurrentmedicareno(thisClient.medicareno);\r\n setcurrentmedicarereferenceno(thisClient.medicarereferenceno);\r\n setcurrentmedicareexpirydate(thisClient.medicareexpirydate);\r\n setcurrentAppointmentType(thisClient.appointmenttype);\r\n setcurrentStatus(thisClient.status);\r\n setcurrentTagValues(thisClient.tagValues);\r\n setcurrentwaitingRoomURL(thisClient.waitingRoomURL);\r\n setcurrentNewPassword(null);\r\n setcurrentNewPasswordConfirmation(null);\r\n setcurrentForcePasswordChange(null)\r\n setcurrentReferrerName(thisClient.referrername);\r\n setcurrentReferrerOrganisation(thisClient.referrerorganisation);\r\n setcurrentReferrerMobile(thisClient.referrermobile);\r\n setcurrentReferrerEmail(thisClient.referreremail);\r\n setcurrentReferrerContactName(thisClient.referrercontactname);\r\n setcurrentReferrerContactMobile(thisClient.referrercontactmobile);\r\n setcurrentReferrerContactEmail(thisClient.referrercontactemail);\r\n setcurrentBusinessName(thisClient.businessName);;\r\n setcurrentABN(thisClient.abn);\r\n setcurrentBusinessAddress(thisClient.businessAddress);\r\n setcurrentBackgroundInformation(thisClient.backgroundInformation);\r\n setcurrentHealthCareCard(thisClient.healthcarecard);\r\n setcurrentGPMentalHealthPlan12Months(thisClient.gpmentalhealthplan12months);\r\n setcurrentUnemployed(thisClient.unemployed);\r\n setcurrentNaturalDisaster(thisClient.naturaldisaster);\r\n setcurrentBulkBilledReason(thisClient.bulkbilledreason);\r\n setcurrentPsychologistID(thisClient.currentpsychologistid);\r\n setcurrentGPID(thisClient.currentgpid);\r\n setcurrentListColor(thisClient.listcolor);\r\n var aoi_clienttype = areasOfInterestReference.filter(aoi => aoi.providertype === (props.clienttype === 'Unassociated' ? 'Psychologist' : props.clienttype))\r\n var aoi = aoi_clienttype.filter(( {issue} ) => thisClient.clientAreasOfInterest.includes(issue))\r\n setcurrentAreasOfInterest(aoi);\r\n loadMedicalPractitioner(medicalPractitioners.find(v => v.id === thisClient.medicalPractitionerID));\r\n loadPreviousContract(contracts.find(v => v.id === thisClient.currentcontractid))\r\n loadContract(contracts.find(v => v.id === thisClient.currentcontractid))\r\n loadProgram(programs.find(v => v.id === thisClient.programid))\r\n setcurrentGPName(thisClient.gpName);\r\n setcurrentGPClinicName(thisClient.gpClinicName)\r\n setcurrentEAPWorkPlace(thisClient.eapworkplace)\r\n setcurrentNDISNumber(thisClient.ndisnumber)\r\n setcurrentNDISDateFrom(thisClient.ndisdatefrom)\r\n setcurrentNDISDateTo(thisClient.ndisdateto)\r\n setcurrentNDISPlanManagementProvider(thisClient.ndisplanmanagementprovider)\r\n setcurrentNDISEmailForInvoices(thisClient.ndisemailforinvoices)\r\n setexistingNDISEmailForInvoices(thisClient.ndisemailforinvoices)\r\n setcurrentNDISDiagnosisHistory(thisClient.ndisdiagnosishistory)\r\n // setcurrentReferralGPName(thisClient.referringGPName)\r\n setcurrentReferralGPPracticeFax(thisClient.referralGPPracticeFax)\r\n // setcurrentReferralGPPracticeEmail(thisClient.referralGPPracticeEmail)\r\n setcurrentNDISBookingFee(thisClient.ndisbookingfee)\r\n setcurrentNDISProviderFee(thisClient.ndisproviderfee)\r\n setcurrentNDISActualProviderFee(thisClient.ndisactualproviderfee)\r\n setcurrentRHCNDISManagement(thisClient.rhcndismanagement)\r\n setcurrentRHCContractManagement(thisClient.rhccontractmanagement)\r\n setcurrentConsentToShareWithGP(thisClient.consentToShareWithGP)\r\n setcurrentPronouns(thisClient.pronouns)\r\n setcurrentIndigenous(thisClient.indigenous)\r\n // Check if Perinatal Program as it uses different Program Population Options\r\n if (thisClient.programid === 1) \r\n {\r\n var programPopulationPerinatal = programPopulationOptionsPerinatal.filter(( {name} ) => thisClient.programpopulation.includes(name))\r\n setcurrentProgramPopulation(programPopulationPerinatal)\r\n }\r\n else \r\n {\r\n var programPopulation = programPopulationOptions.filter(( {name} ) => thisClient.programpopulation.includes(name))\r\n setcurrentProgramPopulation(programPopulation)\r\n }\r\n setcurrentHandOverNotes(thisClient.handOverNotes)\r\n setcurrentNDISSupportCoordinator(thisClient.ndissupportcoordinator)\r\n setcurrentNDISSupportCoordinatorPhone(thisClient.ndissupportcoordinatorphone)\r\n setcurrentRHCNDISItemCode(thisClient.rhcndisitemcode)\r\n setcurrentNDISBillingNote(thisClient.ndisbillingnote)\r\n setcurrentOpportunityDescription(thisClient.opportunitydescription)\r\n setcurrentOpportunityColour(thisClient.opportunitycolour)\r\n setcurrentOpportunityStatus(thisClient.opportunitystatus)\r\n setcurrentOpportunityInterested(thisClient.opportunityinterested)\r\n loadSource(source.find(v => v.id === thisClient.sourceid));\r\n setcurrentSpecialistType(thisClient.specialisttype)\r\n setcurrentClientType(thisClient.clienttype)\r\n setcurrentNthQLDPHNBookings(thisClient.nthQLDPHNEstimated)\r\n setcurrentNthQLDPHNPast(thisClient.nthQLDPHNPast)\r\n setcurrentNthQLDPHNTotal(thisClient.nthQLDPHNFuture)\r\n setcurrentNthQLDPHNFuture(thisClient.nthQLDPHNTotal)\r\n // Load Form\r\n setShow(true);\r\n }, [dispatch,areasOfInterestReference,contracts,programs,medicalPractitioners,loadContract,loadProgram,loadPreviousContract,loadMedicalPractitioner,props.clienttype])\r\n\r\n\r\n useEffect( () => { client && client.id && client.id > 0 && loadProfile(client) }, [client,loadProfile] )\r\n\r\n const loadAppointment = (thisClient) => {\r\n setcurrentClientID(thisClient.id);\r\n setcurrentMedicalPractitionerID(thisClient.medicalPractitionerID);\r\n setcurrentPaymentType(thisClient.paymentType);\r\n setcurrentfulladdress(thisClient.fulladdress);\r\n setcurrentStatus(thisClient.status);\r\n setcurrentLatitude(thisClient.latitude);\r\n setcurrentLongitude(thisClient.longitude);\r\n setcurrentFirstName(thisClient.firstname);\r\n setcurrentPreferredName(thisClient.preferredname)\r\n setcurrentSurname(thisClient.surname);\r\n setcurrentDOB(thisClient.dob);\r\n setcurrentEmail(thisClient.email);\r\n setcurrentGender(thisClient.gender);\r\n setcurrentOccupation(thisClient.occupation);\r\n setcurrentMobile(thisClient.mobile);\r\n setcurrentNote(thisClient.note);\r\n setcurrentTimeZone(thisClient.timeZone);\r\n setcurrenthopeToGetFromTreatment(thisClient.hopeToGetFromTreatment);\r\n setcurrentEmergencyContactName1(thisClient.emergencycontactname1);\r\n setcurrentEmergencyContactRelation1(thisClient.emergencycontactrelation1);\r\n setcurrentEmergencyContactPhone1(thisClient.emergencycontactphone1);\r\n setcurrentEmergencyContactName2(thisClient.emergencycontactname2);\r\n setcurrentEmergencyContactPhone2(thisClient.emergencycontactphone2);\r\n setcurrentEmergencyContactRelation2(thisClient.emergencycontactrelation2);\r\n setcurrentAreasOfInterest(thisClient.clientAreasOfInterest);\r\n setcurrentSpecialistType(thisClient.specialisttype)\r\n setcurrentProgram(thisClient.programid)\r\n // console.log('LoadAppointment ProgramID')\r\n // console.log(thisClient)\r\n loadMedicalPractitioner(medicalPractitioners.find(v => v.id === thisClient.medicalPractitionerID));\r\n // Load Form\r\n setShowAppointment(true);\r\n }\r\n\r\n \r\n useEffect( ()=> {\r\n setNewNote(`Dear ${clientBooking.clientFirstName},\r\n\r\n Please note you have been booked for a consultation with ${clientBooking.psychologistfullname} at ${format(new Date(clientBooking.clientDate ? clientBooking.clientDate: null), \"dd-MM-yyyy hh:mm aa\")}. \r\n\r\n Please connect here: ${clientBooking.waitingroomurl} at that time.`);\r\n\r\n }, [clientBooking,newNote,setNewNote])\r\n\r\n const loadBooking = (thisBooking) => {\r\n setNewNote();\r\n dispatch(Admin.actions.fetchBooking({ bookingid: thisBooking }))\r\n setToggleMessage(false);\r\n setShowBooking(true);\r\n }\r\n\r\n function getActionButtons(id) {\r\n if (clientBooking.status === 'Cancelled') {\r\n return(\r\n <>\r\n <Button variant=\"danger\" size=\"sm\" onClick={() => deleteBooking(id)}>\r\n Delete Booking\r\n </Button>\r\n </>\r\n )\r\n }\r\n else if (clientBooking.status === 'Active') {\r\n return(\r\n <>\r\n <Button variant=\"warning\" size=\"sm\" onClick={() => cancelBooking(id)}>\r\n Cancel Booking\r\n </Button>\r\n </>\r\n )\r\n }\r\n }\r\n\r\n function cancelBooking(id) {\r\n dispatch(Admin.actions.putAppointment( \r\n { id: id, \r\n status: 'Cancelled', \r\n refreshPayload: { key: 'client', id: currentClientID, bookingid : id }\r\n }));\r\n dispatch(Admin.actions.setBookingStatus({status: 'Cancelled'}));\r\n }\r\n\r\n function deleteBooking(id) {\r\n dispatch(Admin.actions.putAppointment( \r\n { id: id, \r\n status: 'Deleted', \r\n refreshPayload: { key: 'client', id: currentClientID }\r\n }));\r\n dispatch(Admin.actions.setBookingStatus({status: 'Deleted'}));\r\n setShowBooking(false)\r\n }\r\n\r\n function sendMessage() {\r\n const formData = new FormData();\r\n // Add fields \r\n formData.append('type','Client');\r\n formData.append('pkid', clientBooking.clientID);\r\n formData.append('subject','');\r\n formData.append('selector','SMS');\r\n formData.append('note',newNote);\r\n formData.append('faxdestination','');\r\n formData.append('faxFile','');\r\n formData.append('sendFormID',0);\r\n // Ok Time to Dispatch \r\n process.env.REACT_APP_DEBUG && console.log(...formData);\r\n dispatch(Admin.actions.postNote({ formData:formData, type: 'Client', pkID: clientBooking.clientID}));\r\n setSentMsg('Message sent!')\r\n showMessageTimer();\r\n }\r\n\r\n function setTaskFlag(clientID, taskFlags, flagChange)\r\n {\r\n // console.log('In setTaskFlag')\r\n // console.log(clientID);\r\n // console.log(taskFlags);\r\n // console.log(flagChange);\r\n // Define new string \r\n let newTaskFlags = [...taskFlags]\r\n // console.log(newTaskFlags)\r\n // Check for change - FLWUP\r\n if (flagChange === 'FLWUP')\r\n {\r\n // Check current setting\r\n if (taskFlags.length > 0)\r\n {\r\n // Ok something is already set\r\n if (taskFlags[0] === \"1\")\r\n {\r\n // Currently it is on - change to off\r\n newTaskFlags[0] = \"0\"\r\n }\r\n else\r\n {\r\n // Currently it is off - change to on\r\n newTaskFlags[0] = \"1\"\r\n }\r\n }\r\n else\r\n {\r\n // Ok nothing is set\r\n newTaskFlags[0] = \"1\"\r\n }\r\n }\r\n // Check for change - PPW\r\n if (flagChange === 'PPW')\r\n {\r\n // Check current setting\r\n if (taskFlags.length > 1)\r\n {\r\n // Ok something is already set\r\n if (taskFlags[1] === \"1\")\r\n {\r\n // Currently it is on - change to off\r\n newTaskFlags[1] = \"0\"\r\n }\r\n else\r\n {\r\n // Currently it is off - change to on\r\n newTaskFlags[1] = \"1\"\r\n }\r\n }\r\n else\r\n {\r\n // Check if anything is set\r\n if (taskFlags.length > 0)\r\n {\r\n // Ok nothing is set for PPW\r\n newTaskFlags[1] = \"1\"\r\n }\r\n else\r\n {\r\n // Ok nothing is set\r\n newTaskFlags[0] = \"0\"\r\n newTaskFlags[1] = \"1\"\r\n }\r\n }\r\n }\r\n // Check for change - LS\r\n if (flagChange === 'LS')\r\n {\r\n // Check current setting\r\n if (taskFlags.length > 2)\r\n {\r\n // Ok something is already set\r\n if (taskFlags[2] === \"1\")\r\n {\r\n // Currently it is on - change to off\r\n newTaskFlags[2] = \"0\"\r\n }\r\n else\r\n {\r\n // Currently it is off - change to on\r\n newTaskFlags[2] = \"1\"\r\n }\r\n }\r\n else\r\n {\r\n // Check if anything is set\r\n if (taskFlags.length > 1)\r\n {\r\n // Ok nothing is set for LS\r\n newTaskFlags[2] = \"1\"\r\n }\r\n else\r\n {\r\n if (taskFlags.length > 1)\r\n {\r\n newTaskFlags[1] = \"0\"\r\n newTaskFlags[2] = \"1\"\r\n }\r\n else\r\n {\r\n // Ok nothing is set\r\n newTaskFlags[0] = \"0\"\r\n newTaskFlags[1] = \"0\"\r\n newTaskFlags[2] = \"1\"\r\n }\r\n }\r\n }\r\n }\r\n const newTaskFlagString = newTaskFlags.join(\"\")\r\n // console.log(newTaskFlags);\r\n // Update taskFlags \r\n dispatch(Admin.actions.putClientTaskFlag({ id: clientID, taskflags: newTaskFlagString, type: props.clienttype, statusName: flagChange }));\r\n dispatch(Admin.actions.setProgressStatus({ statusClientID: clientID, statusName: flagChange, statusValue: 'In Progress' }));\r\n }\r\n\r\n function setFlag(event, id, flag) {\r\n if(event.target.value !== flag)\r\n {\r\n dispatch(Admin.actions.putClientFlag({ id: id, flag: event.target.value, type: props.clienttype }));\r\n }\r\n }\r\n\r\n function resetInterestedProviders(clientID)\r\n {\r\n dispatch(Admin.actions.putResetInterestedProviders({ clientID: clientID, type: props.clienttype }));\r\n }\r\n\r\n const showMessageTimer =() => {\r\n const timer = setTimeout(() => {\r\n setSentMsg(undefined);\r\n setShowBooking(false)\r\n }, 3000);\r\n return () => clearTimeout(timer);\r\n }\r\n\r\n const TaskFlags = ({clientID,taskFlags}) => {\r\n // Task Flags is part of the ever growing need for check boxes or buttons in this case\r\n // Define a few variables \r\n let LS = '';\r\n let PPW = '';\r\n let FLWUP = '';\r\n // Slice and dice \r\n if (taskFlags && taskFlags.length>0)\r\n {\r\n // Is FLWUP Set\r\n if (taskFlags[0] === '1')\r\n {\r\n FLWUP = '#f3e300'\r\n }\r\n else\r\n {\r\n FLWUP = \"#eeeeee\"\r\n } \r\n // Is PPW Defined \r\n if (taskFlags.length > 1)\r\n {\r\n // Is PPW Set\r\n if (taskFlags[1] === '1')\r\n {\r\n PPW = '#f3e300'\r\n }\r\n else\r\n {\r\n PPW = \"#eeeeee\"\r\n } \r\n // Is LS Defined \r\n if (taskFlags.length > 2)\r\n {\r\n // Is LS Set\r\n if (taskFlags[2] === '1')\r\n {\r\n LS = '#f3e300'\r\n }\r\n else\r\n {\r\n LS = \"#eeeeee\"\r\n } \r\n }\r\n }\r\n else\r\n {\r\n PPW = \"#eeeeee\"\r\n LS = \"#eeeeee\"\r\n }\r\n }\r\n else\r\n {\r\n // All default \r\n FLWUP = \"#eeeeee\"\r\n PPW = \"#eeeeee\"\r\n LS = \"#eeeeee\"\r\n }\r\n\r\n \r\n // <Button variant=\"outlined\" size=\"sm\" style={{ marginTop: 5, background: \"#eeeeee\", border: '1px solid #9da8e5', padding: 5, marginLeft: 10 }} onClick={() => setShowFormData(false)} >\r\n return(\r\n <>\r\n <Button size='sm' variant='contained' style={{ background: FLWUP, paddingLeft: 10, paddingRight: 10, minWidth: 36 }} onClick={() => setTaskFlag(clientID,taskFlags,'FLWUP')} >\r\n {progressStatus[clientID] && progressStatus[clientID].statusName === 'FLWUP' && progressStatus[clientID].statusValue === 'In Progress' ? <Spinner animation=\"border\" style={{ marginRight: 0, marginTop: 0 }} size=\"sm\" variant=\"primary\" /> : 'P' }\r\n </Button>\r\n <Button size='sm' variant='contained' style={{ marginLeft: 5, background: PPW, paddingLeft: 10, paddingRight: 10, minWidth: 36 }} onClick={() => setTaskFlag(clientID,taskFlags,'PPW')} >\r\n {progressStatus[clientID] && progressStatus[clientID].statusName === 'PPW' && progressStatus[clientID].statusValue === 'In Progress' ? <Spinner animation=\"border\" style={{ marginRight: 0, marginTop: 0 }} size=\"sm\" variant=\"primary\" /> : 'F' }\r\n </Button>\r\n <Button size='sm' variant='contained' style={{ marginLeft: 5, background: LS, paddingLeft: 10, paddingRight: 10, minWidth: 36 }} onClick={() => setTaskFlag(clientID,taskFlags,'LS')} >\r\n {progressStatus[clientID] && progressStatus[clientID].statusName === 'LS' && progressStatus[clientID].statusValue === 'In Progress' ? <Spinner animation=\"border\" style={{ marginRight: 0, marginTop: 0 }} size=\"sm\" variant=\"primary\" /> : 'L' }\r\n </Button>\r\n </>\r\n )\r\n\r\n\r\n }\r\n\r\n const loadToDos = (clientID, fullName) => {\r\n setToDoClientID(clientID)\r\n setToDoTitle(fullName)\r\n setShowToDo(true)\r\n }\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', hide: true },\r\n { field: 'listcolor', headerName: 'List Color', hide: true },\r\n { field: 'fullname', headerName: 'Name', width: 280,\r\n renderCell: (params) => {\r\n return(\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item onClick={() => loadClient(params.row.id)} className=\"cell-Link\">\r\n <strong>\r\n { params.row.taskflags && params.row.taskflags > 0 && params.row.taskflags[0] === '1' ? \r\n <>\r\n <span style={{ color: 'red' }}>{params.value}</span>\r\n </>\r\n :\r\n <>\r\n { params.row.providerEAPContract ? \r\n <>\r\n <span style={{ color: params.row.currentcontractcolour }}>{params.value}</span>\r\n </>\r\n :\r\n <>\r\n { params.row.listcolor && params.row.listcolor.length > 0 ?\r\n <>\r\n <span style={{ color: params.row.listcolor }}>{params.value}</span>\r\n </>\r\n :\r\n <>\r\n {params.value}\r\n </>\r\n }\r\n </>\r\n }\r\n </>\r\n }\r\n {params.row.clientRegistrationID === null ? <MoveToInboxIcon style={{ marginLeft: 8, color: 'green' }} /> : null} \r\n </strong>\r\n </Grid>\r\n <Grid item>\r\n {params.row.toDoPPWFollowUp === 1 && <BookmarkIcon className='todo-flag-ppw' />}\r\n {params.row.toDoNeedsGPBooking === 1 && <BookmarkIcon className='todo-flag-gp' />}\r\n {params.row.toDoSentToProvider === 1 && <BookmarkIcon className='todo-flag-shared' />}\r\n {params.row.toDoRecentCancellation === 1 && <BookmarkIcon className='todo-flag-cancel' />}\r\n <Badge variant={params.row.toDoCount === 0 ? \"secondary\" : params.row.toDoWarning ? \"warning\" : \"success\"} onClick={()=>loadToDos(params.row.id, params.value)} style={{ marginRight: 2, cursor: 'pointer', minWidth: 21 }}>\r\n {params.row.toDoCount}\r\n {/* {params.row.toDoCount === 0 ?\r\n <NoteAddIcon style={{ marginLeft: 8, color: 'green' }} />\r\n : params.row.toDoCount } */}\r\n </Badge> \r\n </Grid>\r\n </Grid>\r\n )\r\n }, \r\n },\r\n { field: 'taskflags', headerName: 'Tasks', width: 150,\r\n renderCell: (params) => {\r\n return(\r\n <TaskFlags \r\n clientID = {params.row.id} \r\n taskFlags = {params.row.taskflags} \r\n />\r\n )\r\n }\r\n }, \r\n { field: 'flag', headerName: 'Follow-up', width: 170,\r\n cellClassName: (params) => params.row.flag.length > 0 ? 'flag-full-cell' : 'flag-empty-cell',\r\n renderCell: (params) => (\r\n <>\r\n <TextField \r\n variant=\"outlined\"\r\n name={`flag`} \r\n defaultValue={params.row.flag} \r\n onBlur={(event) => setFlag(event, params.row.id, params.row.flag)}\r\n InputProps={{ classes: { notchedOutline:classes.noBorder, input: params.row.flag.length > 0 ? 'flag-full' : 'flag-empty' }, }}\r\n multiline\r\n maxRows={4}\r\n style= {{ width: '100%'}}\r\n onFocus={event => {\r\n event.target.select();\r\n }}>\r\n </TextField>\r\n </>\r\n )\r\n },\r\n { field: 'createdon', headerName: 'Created On', width: 135, sortable : true, renderCell: (params) => (format(new Date(params.row.createdon), \"dd-MM-yyyy HH:mm\")), cellClassName: 'grid-mono-font' },\r\n { field: 'nextBookingID', headerName: 'Next Booking ID', width: 120, hide: true },\r\n { field: 'topBookingClient', type: 'date', headerName: 'Booking (Client)', width: 155, sortable: true,\r\n // valueFormatter: ({ value }) => value ? format(new Date(value), \"dd-MM-yyyy HH:mm\") : null, \r\n cellClassName: (params) => params.row.nextBookingID !== null ? 'future-booking' : 'grid-mono-font',\r\n renderCell: (params) => (\r\n <>\r\n {bookings && params.row.nextBookingID ?\r\n <div onClick={() => loadBooking(params.row.nextBookingID)} className=\"cell-Link\"> \r\n {format(new Date(params.row.topBookingClient), \"dd-MM-yyyy HH:mm\")}\r\n </div>\r\n :\r\n params.row.topBookingClient != null ? format(new Date(params.row.topBookingClient), \"dd-MM-yyyy HH:mm\") : null\r\n }\r\n </>\r\n )\r\n },\r\n { field: 'psychologistName', headerName: props.clienttype === 'Unassociated' ? 'Psychologist' : props.clienttype, width: 160 },\r\n { field: 'none', headerName: 'Actions', width: 120,\r\n renderCell: (params) => (\r\n <>\r\n <Tooltip title=\"Book Appointment\" aria-label=\"Book Appointment\" placement=\"top\" arrow>\r\n <TodayIcon onClick={() => loadAppointment(clients.find(client => client.id === params.row.id))} style={{ color: '#646c9a', cursor: 'pointer' }} />\r\n </Tooltip>\r\n \r\n <Tooltip title=\"Notes/Email/SMS\" aria-label=\"Notes/Email/SMS\" placement=\"top\" arrow>\r\n <ForumIcon onClick={() => loadNotes(clients.find(client => client.id === params.row.id))} style={{ color: '#646c9a', cursor: 'pointer', marginLeft: 8, marginRight: 8 }} />\r\n </Tooltip>\r\n\r\n {params.row.filesAvailable ?\r\n <Tooltip title=\"Files\" aria-label=\"Files\" placement=\"top\" arrow>\r\n <InsertDriveFileIcon onClick={() => loadFiles(clients.find(client => client.id === params.row.id))} style={{ color: '#646c9a', cursor: 'pointer', marginLeft: 8, marginRight: 8 }} />\r\n </Tooltip>\r\n :\r\n null\r\n }\r\n </>\r\n )\r\n },\r\n { field: 'referrercontactname', headerName: 'Referred by', width: 160},\r\n { field: 'referralGPPractice', headerName: 'GP Practice', width: 200 }\r\n ];\r\n\r\n useEffect( () => { dispatch(Admin.actions.fetchClients( { status: filters.clientsStatus, type: props.clienttype } )) }, [dispatch, props.clienttype, filters.clientsStatus] )\r\n\r\n useEffect( () => {\r\n if(filters.clientsListLoadClientID)\r\n {\r\n loadClient(filters.clientsListLoadClientID)\r\n dispatch(Admin.actions.setFilters({ filterName: 'clientsListLoadClientID', filterValue: undefined }))\r\n }\r\n }, [loadClient, dispatch, filters.clientsListLoadClientID])\r\n\r\n const classes = useStyles();\r\n\r\n function listType(ltype)\r\n {\r\n switch(ltype)\r\n {\r\n case 'Financial':\r\n return('Financial')\r\n case 'Psychologist':\r\n return('Psychology')\r\n case 'Provisional':\r\n return('Provisional Psychology')\r\n case 'Social':\r\n return('MH Social Worker')\r\n case 'Nurse':\r\n return('Mental Health Nurse')\r\n case 'Occupational':\r\n return('Occupational Therapist')\r\n case 'Unassociated':\r\n return('Unassociated')\r\n case 'GP':\r\n return('GP')\r\n case 'NDIS':\r\n return('NDIS')\r\n case 'EAPContract':\r\n return('EAP/Contract')\r\n case 'NthQLDPHN':\r\n return('NthQLDPHN')\r\n case 'Private':\r\n return('Private')\r\n default:\r\n return('Psychology')\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n <h4>\r\n {listType(props.clienttype)} Clients\r\n </h4>\r\n <Paper> \r\n <Grid container style={{ padding: 10 }}>\r\n <Grid item style={{ paddingLeft: 2, paddingRight: 10 }}>\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={filters.clientsTerm}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'clientsTerm', filterValue: event.target.value }))}\r\n autoComplete='OFF'\r\n style={{ maxWidth: 170, height: 35, backgroundColor: filters.clientsTerm.length > 0 ? 'rgb(250 239 195)' : 'white' }}\r\n />\r\n <InputGroup.Append onClick={() => dispatch(Admin.actions.setFilters({ filterName: 'clientsTerm', filterValue: '' }))}>\r\n <InputGroup.Text>\r\n <ClearIcon fontSize=\"small\" style={{ color: filters.clientsTerm.length > 0 ? '#222222' : 'silver', marginLeft: -3 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Append>\r\n </InputGroup>\r\n </Grid>\r\n {/* filters.clientsPsychologist === 'All' ? 'All' : */}\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <Autocomplete\r\n id=\"searchPsychologist\"\r\n variant=\"outlined\"\r\n options={registeredWithClients}\r\n getOptionLabel={(option) => ((filters.clientsPsychologist === 'All' && !option.fullname) || !option.fullname) ? 'All' : option.fullname}\r\n value={filters.clientsPsychologist === 'All' ? null : filters.clientsPsychologist}\r\n onChange={(event, newValue) => dispatch(Admin.actions.setFilters({ filterName: 'clientsPsychologist', filterValue: newValue ? newValue : 'All' }))}\r\n style={{ minWidth: 200, fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n label=\"Provider\"\r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"PsychologistSelector\"\r\n style={{ backgroundColor: \"white\", margin: 0, padding: 0, maxWidth: 200 }}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Grid>\r\n <Grid item style={{ paddingLeft: 2, paddingRight: 10 }}>\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n placeholder=\"Referrer Lookup\"\r\n type=\"text\"\r\n value={filters.clientsReferrer}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'clientsReferrer', filterValue: event.target.value }))}\r\n autoComplete='OFF'\r\n style={{ maxWidth: 170, height: 35, backgroundColor: filters.clientsTerm.length > 0 ? 'rgb(250 239 195)' : 'white' }}\r\n />\r\n <InputGroup.Append onClick={() => dispatch(Admin.actions.setFilters({ filterName: 'clientsReferrer', filterValue: '' }))}>\r\n <InputGroup.Text>\r\n <ClearIcon fontSize=\"small\" style={{ color: filters.clientsTerm.length > 0 ? '#222222' : 'silver', marginLeft: -3 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Append>\r\n </InputGroup>\r\n </Grid>\r\n {/* <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl}>\r\n <InputLabel id=\"clientsAOI-label\" className={classes.label}>Area of Interest</InputLabel>\r\n <Select\r\n labelId=\"clientsAOI-label\"\r\n id=\"clientsAOI\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\" }}\r\n value={filters.clientsAOI}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'clientsAOI', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n {areasOfInterest.map(row => {\r\n return <MenuItem key={`key-${row.id}`} value={row.issue}>{row.issue}</MenuItem>\r\n })}\r\n </Select>\r\n </FormControl>\r\n </Grid> */}\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl}>\r\n <InputLabel id=\"clientsStatus-label\" className={classes.label}>Status</InputLabel>\r\n <Select\r\n labelId=\"clientsStatus-label\"\r\n id=\"clientsStatus\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\" }}\r\n value={filters.clientsStatus}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'clientsStatus', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n <MenuItem value='Followup'>Followup</MenuItem>\r\n <MenuItem value='ToDo'>With Messages</MenuItem>\r\n <MenuItem value='ToDoWarning'>With Deadline</MenuItem>\r\n <MenuItem value='ToDoPPW'>Needs PPW</MenuItem>\r\n <MenuItem value='ToDoGP'>Needs GP Appointment</MenuItem>\r\n <MenuItem value='ToDoCancel'>Recent Cancellation</MenuItem>\r\n <MenuItem value='ToDoSentToProvider'>Sent to Provider</MenuItem>\r\n <MenuItem value='Abandoned'>Abandoned</MenuItem>\r\n <MenuItem value='Opportunity'>Opportunity</MenuItem>\r\n <MenuItem value='EAP/Contract'>EAP/Contract</MenuItem>\r\n {props.clienttype === 'GP' ?\r\n <MenuItem value='GPUnallocated'>GP Unallocated</MenuItem>\r\n :\r\n null\r\n }\r\n <MenuItem value='Active'>Active</MenuItem>\r\n <MenuItem value='Archived'>Archived</MenuItem>\r\n \r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl}>\r\n <InputLabel id=\"clientsType-label\" className={classes.label}>Type</InputLabel>\r\n <Select\r\n labelId=\"clientsType-label\"\r\n id=\"clientsType\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n value={filters.clientsType}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'clientsType', filterValue: event.target.value }))}\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\" }}\r\n displayEmpty\r\n inputProps={{ 'aria-label': 'Without label' }}\r\n >\r\n <MenuItem value='RHC'>Rural Health</MenuItem>\r\n <MenuItem value=\"Self-registered\">Self-registered</MenuItem>\r\n <MenuItem value='Private'>Private</MenuItem>\r\n <MenuItem value='All'>All</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl}>\r\n <InputLabel id=\"clientsColour-label\" className={classes.label}>Colour</InputLabel>\r\n <Select\r\n labelId=\"clientsColour-label\"\r\n id=\"clientsColour\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\" }}\r\n value={filters.clientsColour}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'clientsColour', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n <MenuItem value='Black'>Black</MenuItem>\r\n <MenuItem value='Red'>Red</MenuItem>\r\n <MenuItem value='Green'>Green</MenuItem>\r\n <MenuItem value='Blue'>Blue</MenuItem>\r\n <MenuItem value='Brown'>Brown</MenuItem>\r\n <MenuItem value='Orange'>Orange</MenuItem>\r\n <MenuItem value='Purple'>Purple</MenuItem>\r\n <MenuItem value='Pink'>Pink</MenuItem>\r\n <MenuItem value='Grey'>Grey</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n {/* <Grid item style={{ marginLeft: 10 }}> \r\n <Form.Control as=\"select\" size=\"sm\" style={{ height: 35 }} defaultValue={filters.clientsSpecialisationType} onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'clientsSpecialisationType', filterValue: event.target.value }))}>\r\n <option value=\"All\">All</option>\r\n <option value=\"nthqldphn\">Nth QLD PHN</option>\r\n </Form.Control>\r\n </Grid> */}\r\n\r\n </Grid>\r\n </Paper>\r\n\r\n <Paper style={{ height: 700 }}>\r\n <DataGridPro \r\n rows={filteredClients} \r\n columns={columns} \r\n pagination={false}\r\n checkboxSelection={false} \r\n disableColumnMenu={true}\r\n rowHeight={38} \r\n initialState={{\r\n sorting: {\r\n sortModel: [{ field: 'createdon', sort: 'desc' }],\r\n },\r\n }}\r\n />\r\n </Paper>\r\n\r\n <Modal show={show} onHide={handleClose} dialogClassName=\"editprofile-modal\">\r\n <Modal.Header closeButton className=\"editprofile-modal\" style={{ paddingBottom: 0 }}>\r\n <Modal.Title>\r\n <Grid container direction='row' spacing={0}>\r\n <Grid item > \r\n {currentFirstName} {currentSurname}\r\n </Grid>\r\n <Grid item style={{ paddingLeft: 10 }}> \r\n <Tags args={{ \r\n context: 'Client', \r\n fkID: currentClientID,\r\n tagValues: currentTagValues,\r\n display: { layout: 'title', header: false, box: false } ,\r\n }}/>\r\n </Grid>\r\n </Grid>\r\n </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"editprofile-modal\">\r\n <Form onSubmit={putClient}>\r\n <Tabs\r\n id=\"EditModal\"\r\n activeKey={key}\r\n onSelect={(k) => setKey(k)}\r\n mountOnEnter={true}\r\n >\r\n <Tab eventKey=\"personalDetails\" title=\"Personal\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}>\r\n <Row>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>First Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileFirstName\" defaultValue={currentFirstName} onBlur={(event) => setcurrentFirstName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Preferred Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"profilePreferredName\" defaultValue={currentPreferredName} onBlur={(event) => setcurrentPreferredName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Surname</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileSurname\" defaultValue={currentSurname} onBlur={(event) => setcurrentSurname(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n {props.clienttype !== 'Supervision' ?\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Gender</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentGender} onBlur={(event) => setcurrentGender(event.target.value)}>\r\n <option value=\"Male\">Male</option>\r\n <option value=\"Female\">Female</option>\r\n <option value=\"Other\">Other</option>\r\n <option value=\"Prefer not to say\">Prefer not to say</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n : \r\n null\r\n }\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Pronouns</Form.Label>\r\n <Form.Control type=\"text\" name=\"profilePronouns\" defaultValue={currentPronouns} onBlur={(event) => setcurrentPronouns(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n {props.clienttype !== 'Supervision' ?\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Date of Birth</Form.Label>\r\n <Form.Control type=\"date\" name=\"profileDOB\" defaultValue={currentDOB} onBlur={(event) => setcurrentDOB(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n :\r\n null\r\n }\r\n </Row>\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Email</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileEmail\" defaultValue={currentEmail} onBlur={(event) => setcurrentEmail(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Contact Phone Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileMobile\" defaultValue={currentMobile} onBlur={(event) => setcurrentMobile(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"5\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label>TimeZone</Form.Label>\r\n <Autocomplete\r\n id=\"profileTimeZone\"\r\n variant=\"outlined\"\r\n options={timeZone}\r\n getOptionLabel={(option) => option.name}\r\n value={timeZone.find(v => v.systemName === currentTimeZone) || ''}\r\n onChange={(event, newValue) => handleTimeZoneAutocompleteChange('profileTimeZone', event, newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"TimeZoneSelector\"\r\n style={{backgroundColor: \"white\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label>Home Address</Form.Label>\r\n <PlacesAutoComplete \r\n currentID={currentID}\r\n currentfulladdress={currentfulladdress}\r\n setcurrentfulladdress = {setcurrentfulladdress}\r\n setcurrentLatitude = {setcurrentLatitude} \r\n setcurrentLongitude = {setcurrentLongitude}\r\n setcurrentPostCode = {setcurrentPostCode}\r\n />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Reporting Postcode</Form.Label>\r\n <Form.Control type=\"text\" name=\"profilePostcode\" defaultValue={currentPostCode} onBlur={(event) => setcurrentPostCode(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n {props.clienttype !== 'Supervision' ?\r\n <Col md=\"2\">\r\n <Form.Group >\r\n {currentPaymentType === 'EAP' ?\r\n <Form.Label>Job Title (if relevant)</Form.Label>\r\n :\r\n <Form.Label>Occupation </Form.Label>\r\n }\r\n <Form.Control type=\"text\" name=\"profileOccupation\" defaultValue={currentOccupation} onBlur={(event) => setcurrentOccupation(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n :\r\n null\r\n }\r\n {(currentPaymentType === 'Contract' || currentPaymentType === 'EAP') ?\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>EAP Program Code</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileEAPWorkPlace\" defaultValue={currentEAPWorkPlace} onBlur={(event) => setcurrentEAPWorkPlace(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n :\r\n null\r\n }\r\n </Row>\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Do you identify as Aboriginal and/or Torres Strait islander</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentIndigenous} onBlur={(event) => setcurrentIndigenous(event.target.value)}>\r\n <option value=\"N\">No</option>\r\n <option value=\"Y\">Yes</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Specialist Type</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentSpecialistType} onBlur={(event) => setcurrentSpecialistType(event.target.value)}>\r\n <option value=\"Standard\">Standard</option>\r\n <option value=\"nthqldphn\">Nth QLD PHN</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {programPopulationOptions && currentProgram ? \r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Do you identify as any of the following populations that we are particularly supporting via this program? (select all that apply)</Form.Label>\r\n <Row>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {(currentProgram && currentProgram.id === 1 ? programPopulationOptionsPerinatal : programPopulationOptions).map(row => {\r\n if(row.index <= (currentProgram && currentProgram.id === 1 ? programPopulationOptionsPerinatal.length/2 : programPopulationOptions.length/2))\r\n {\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = currentProgramPopulation.find(r => r.id === row.id);\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleToggle(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.name}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })\r\n }\r\n </List>\r\n </Col>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {(currentProgram && currentProgram.id === 1 ? programPopulationOptionsPerinatal : programPopulationOptions).map(row => {\r\n if(row.index > (currentProgram && currentProgram.id === 1 ? programPopulationOptionsPerinatal.length/2 : programPopulationOptions.length/2))\r\n {\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = currentProgramPopulation.find(r => r.id === row.id);\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleToggle(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.name}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })\r\n }\r\n </List>\r\n </Col>\r\n </Row>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n :\r\n null\r\n }\r\n {props.clienttype !== 'Financial' && props.clienttype !== 'Supervision' ?\r\n <>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label style={{ color: 'green', fontWeight: 500 }}>Funding Type</Form.Label> \r\n <Form.Control as=\"select\" defaultValue={currentPaymentType} onChange={(event) => setcurrentPaymentType(event.target.value)}>\r\n <option value=\"Bulk Billed\">Bulk Billed</option>\r\n <option value=\"Reduced Gap\">Reduced Gap (+$20)</option>\r\n <option value=\"Full Fee\">Full Fee</option>\r\n <option value=\"NDIS\">NDIS</option>\r\n <option value=\"Contract\">Contract/EAP</option>\r\n <option value=\"EAP\" disabled>EAP Please Update</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n {currentPaymentType === 'Contract' ? \r\n <Col md=\"9\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label style={{ color: 'green', fontWeight: 500 }}>Contract</Form.Label> \r\n <Autocomplete\r\n id=\"currentContractID\"\r\n variant=\"outlined\"\r\n options={contracts}\r\n getOptionLabel={(option) => option.displayname}\r\n getOptionSelected={(option, value) => getContractOption(option, value)}\r\n value= {currentContract}\r\n onChange={(event, newValue) => loadContract(newValue)}\r\n style={{ minWidth: 200, fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"currentContactID\"\r\n style={{ backgroundColor: \"white\", margin: 0, padding: 0, maxWidth: 600 }}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n :\r\n <Col md=\"9\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label style={{ color: 'green', fontWeight: 500 }}>Program</Form.Label> \r\n <Autocomplete\r\n id=\"ProgramID\"\r\n variant=\"outlined\"\r\n options={programs}\r\n getOptionLabel={(option) => option.name}\r\n getOptionSelected={(option, value) => getProgramOption(option, value)}\r\n value= {currentProgram}\r\n onChange={(event, newValue) => loadProgram(newValue)}\r\n style={{ minWidth: 200, fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"currentProgramID\"\r\n style={{ backgroundColor: \"white\", margin: 0, padding: 0, maxWidth: 600 }}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n }\r\n </Row>\r\n {currentPaymentType === 'Contract' || currentPaymentType === 'EAP' ? \r\n <>\r\n {currentSpecialistType === 'nthqldphn' ?\r\n <>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Label style={{ color: 'green', fontWeight: 500 }} >Nth QLD PHN Booking Management for this client</Form.Label>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Estimated Total</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileNthQLDPHNBookings\" defaultValue={currentNthQLDPHNBookings} onBlur={(event) => setcurrentNthQLDPHNBookings(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Total To Date</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileNthQLDPHNTotal\" defaultValue={currentNthQLDPHNTotal} readOnly />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Past Bookings</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileNthQLDPHNPast\" defaultValue={currentNthQLDPHNPast} readOnly />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Future Bookings</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileNthQLDPHNFuture\" defaultValue={currentNthQLDPHNFuture} readOnly />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n : \r\n null \r\n }\r\n <Row> \r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Contract Total Fee</Form.Label>\r\n <Form.Control type=\"text\" name=\"contracteaptotalfee\" defaultValue={(currentContract && currentContract.cost) || ''} readOnly />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Contract RHC Fee</Form.Label>\r\n <Form.Control type=\"text\" name=\"contracteaprhcfee\" defaultValue={(currentContract && currentContract.rhcfee) || ''} readOnly />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Contract Provider Fee</Form.Label>\r\n <Form.Control type=\"text\" name=\"contracteapproviderfee\" defaultValue={(currentContract && currentContract.providerfee) || ''} readOnly />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n </> \r\n :\r\n null\r\n }\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n {props.clienttype === 'Financial' ?\r\n <Form.Label>Selected Financial Counsellor </Form.Label>\r\n :\r\n <Form.Label>Selected Provider (Not GP) </Form.Label>\r\n }\r\n <Autocomplete\r\n id=\"currentPsychologist\"\r\n variant=\"outlined\"\r\n options={props.clienttype === 'Financial' ? registeredFinancial : currentSpecialistType === 'nthqldphn' ? registeredPsychologistsNthQLDPHN : registeredPsychologistsNotNthQLDPHN}\r\n getOptionLabel={(option) => `${option.fullname} (${option.providertype})`}\r\n value= {currentPsychologistID && actualRegistered.find(v => v.id === currentPsychologistID) ? actualRegistered.find(v => v.id === currentPsychologistID) : null}\r\n onChange={(event, newValue) => handlePsychologistAutocompleteChange('profilecurrentpsychologistid', event, newValue)}\r\n style={{ minWidth: 200, fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"currentPsychologist\"\r\n style={{ backgroundColor: \"white\", margin: 0, padding: 0, maxWidth: 300 }}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n {props.clienttype !== 'Financial' && props.clienttype !== 'Supervision' ? \r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Selected GP </Form.Label>\r\n <Autocomplete\r\n id=\"currentGP\"\r\n variant=\"outlined\"\r\n options={registeredGP}\r\n getOptionLabel={(option) => option.fullname}\r\n value= {currentGPID && actualRegistered.find(v => v.id === currentGPID) ? actualRegistered.find(v => v.id === currentGPID) : null}\r\n onChange={(event, newValue) => handleGPAutocompleteChange('profilecurrentgpid', event, newValue)}\r\n style={{ minWidth: 200, fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"currentGP\"\r\n style={{ backgroundColor: \"white\", margin: 0, padding: 0, maxWidth: 300 }}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n :\r\n null\r\n }\r\n </Row>\r\n {(props.clienttype !== 'GP' && props.clienttype !== 'Supervision') ?\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Areas of Interest (Select all that apply) </Form.Label>\r\n <Autocomplete\r\n id=\"searchAOI\"\r\n variant=\"outlined\"\r\n multiple\r\n options={areasOfInterest}\r\n getOptionLabel={(option) => option.issue }\r\n value={currentAreasOfInterest}\r\n onChange={(event, newValue) => setcurrentAreasOfInterest(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: \"white\", }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"AOISelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n :\r\n null\r\n }\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n {props.clienttype !== 'Supervision' ? \r\n <Form.Label>What are you hoping to get out of your sessions?</Form.Label>\r\n :\r\n <Form.Label>Details on the type of supervision you are after, where you are currently practicing and other relevant information.</Form.Label>\r\n }\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" name=\"profilehopeToGetFromTreatment\" defaultValue={currenthopeToGetFromTreatment} onBlur={(event) => setcurrenthopeToGetFromTreatment(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {currentHandOverNotes && currentHandOverNotes.length > 2 ? \r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Referrer Handover Notes</Form.Label>\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" name=\"profilehandOverNotes\" defaultValue={currentHandOverNotes} onBlur={(event) => setcurrentHandOverNotes(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n :\r\n null\r\n }\r\n <Row>\r\n </Row>\r\n {/* <Row>\r\n <Col md=\"10\">\r\n <Form.Group controlId=\"currentMedicalPractitioner.address\">\r\n <Form.Label>Address - may need to add this </Form.Label>\r\n <Form.Control type=\"text\" name=\"address\" value={currentMedicalPractitioner ? currentMedicalPractitioner.address : ''} readOnly />\r\n </Form.Group>\r\n </Col>\r\n </Row> */}\r\n {props.clienttype === 'Financial' ?\r\n <>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Business Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"businessName\" readOnly defaultValue={currentBusinessName || ''} />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>ABN</Form.Label>\r\n <Form.Control type=\"text\" name=\"abn\" readOnly defaultValue={currentABN || ''} />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Business Address</Form.Label>\r\n <Form.Control type=\"text\" name=\"businessAddress\" readOnly defaultValue={currentBusinessAddress || ''} />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Background Information</Form.Label>\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" readOnly name=\"backgroundinformation\" defaultValue={currentBackgroundInformation} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n {props.clienttype !== 'Financial' && props.clienttype !== 'Supervision' ?\r\n <>\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Emergency Contact 1</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactname1\" defaultValue={currentEmergencyContactName1 || ''} onBlur={(event) => setcurrentEmergencyContactName1(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Relationship</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactrelation1\" defaultValue={currentEmergencyContactRelation1 || ''} onBlur={(event) => setcurrentEmergencyContactRelation1(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactphone1\" defaultValue={currentEmergencyContactPhone1 || ''} onBlur={(event) => setcurrentEmergencyContactPhone1(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Emergency Contact 2</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactname2\" defaultValue={currentEmergencyContactName2 || ''} onBlur={(event) => setcurrentEmergencyContactName2(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Relationship</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencyrelation2\" defaultValue={currentEmergencyContactRelation2 || ''} onBlur={(event) => setcurrentEmergencyContactRelation2(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactphone2\" defaultValue={currentEmergencyContactPhone2 || ''} onBlur={(event) => setcurrentEmergencyContactPhone2(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {currentPaymentType === 'NDIS' ?\r\n <>\r\n <Row>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>NDIS Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"ndisnumber\" defaultValue={currentNDISNumber || ''} onBlur={(event) => setcurrentNDISNumber(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>NDIS Date From</Form.Label>\r\n <Form.Control type=\"date\" name=\"profileNDISDateFrom\" defaultValue={currentNDISDateFrom} onBlur={(event) => setcurrentNDISDateFrom(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>To</Form.Label>\r\n <Form.Control type=\"date\" name=\"profileNDISDateTo\" defaultValue={currentNDISDateTo} onBlur={(event) => setcurrentNDISDateTo(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>NDIS Total Fee</Form.Label>\r\n <Form.Control type=\"text\" name=\"ndisbookingfee\" defaultValue={currentNDISBookingFee || ''} onBlur={(event) => setcurrentNDISBookingFee(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>NDIS RHC Fee</Form.Label>\r\n <Form.Control type=\"text\" name=\"ndisproviderfee\" defaultValue={currentNDISProviderFee || ''} onBlur={(event) => setcurrentNDISProviderFee(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Provider to Invoice</Form.Label>\r\n <Form.Control type=\"text\" name=\"ndisactualproviderfee\" defaultValue={currentNDISActualProviderFee || ''} readOnly />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>NDIS Plan Management Provider</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileNDISPlanManagementProvider\" defaultValue={currentNDISPlanManagementProvider} onBlur={(event) => setcurrentNDISPlanManagementProvider(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>NDIS Invoice Email</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileNDISEmailForInvoices\" defaultValue={currentNDISEmailForInvoices} onBlur={(event) => setcurrentNDISEmailForInvoices(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>NDIS Support Coordinator</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileNDISSupportCoordinator\" defaultValue={currentNDISSupportCoordinator} onBlur={(event) => setcurrentNDISSupportCoordinator(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>NDIS Support Coordinator Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileNDISSupportCoordinatorPhone\" defaultValue={currentNDISSupportCoordinatorPhone} onBlur={(event) => setcurrentNDISSupportCoordinatorPhone(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>NDIS Item Code</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileRHCNDISItemCode\" defaultValue={currentRHCNDISItemCode} onBlur={(event) => setcurrentRHCNDISItemCode(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label >Managed by RHC</Form.Label>\r\n <Select \r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n id='RHCNDISManagement'\r\n aria-label='Managed by RHC'\r\n name='RHCNDISManagement'\r\n value={currentRHCNDISManagement} \r\n onChange={(event) => handleRHCNDISManagementChange(event.target.value)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: '#fff' }}>\r\n <MenuItem key='Video' value='0'>No</MenuItem>\r\n <MenuItem key='Phone' value='1'>Yes</MenuItem>\r\n </Select>\r\n </Form.Group>\r\n </Col> \r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>NDIS Billing Note</Form.Label>\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" name=\"currentNDISBillingNote\" defaultValue={currentNDISBillingNote} onBlur={(event) => setcurrentNDISBillingNote(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Medical Diagnoses/History</Form.Label>\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" readOnly name=\"currentNDISDiagnosisHistory\" defaultValue={currentNDISDiagnosisHistory} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n\r\n {(currentPaymentType !== 'Contract' && currentPaymentType !== 'EAP' && currentPaymentType !== 'NDIS' && currentPaymentType !== 'Supervision') ?\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Medicare Card Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"medicareno\" defaultValue={currentmedicareno || ''} onBlur={(event) => setcurrentmedicareno(event.target.value)} autoComplete='new-password' isInvalid={!!medicarenoError} />\r\n <Form.Control.Feedback type=\"invalid\">{medicarenoError}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Order on Card</Form.Label>\r\n <Form.Control type=\"text\" name=\"medicarereferenceno\" defaultValue={currentmedicarereferenceno || ''} onBlur={(event) => setcurrentmedicarereferenceno(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Medicare Expiry Date</Form.Label>\r\n <Form.Control type=\"text\" name=\"medicareexpirydate\" defaultValue={currentmedicareexpirydate || ''} onBlur={(event) => setcurrentmedicareexpirydate(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n :\r\n null\r\n }\r\n <h5 style={{paddingBottom: 20}}>Registration Questions and Responses</h5>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Have you received a Mental Health Plan in the last 12 Months ?</Form.Label>\r\n <Form.Control type=\"text\" name=\"gpmentalhealthplan12months\" readOnly defaultValue={currentGPMentalHealthPlan12Months || ''} />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {currentPaymentType === 'Bulk Billed' || currentPaymentType === 'Reduced Gap'?\r\n <> \r\n {currentPaymentType === 'Bulk Billed' ?\r\n <>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Do you have a Health Care Card?</Form.Label>\r\n <Form.Control type=\"text\" name=\"healthcarecard\" readOnly defaultValue={currentHealthCareCard || ''} />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Are you Unemployed?</Form.Label>\r\n <Form.Control type=\"text\" name=\"unemployed\" readOnly defaultValue={currentUnemployed || ''} />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Have you been impacted by drought, bushfire, flood or other natural disaster?</Form.Label>\r\n <Form.Control type=\"text\" name=\"naturaldisaster\" readOnly defaultValue={currentNaturalDisaster || ''} />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Please tell us why you need to be billed a reduced fee (or bulk billed)?</Form.Label>\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" readOnly name=\"buldbilledreason\" defaultValue={currentBulkBilledReason} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n </>\r\n :\r\n null\r\n }\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label style={{ color: 'green', fontWeight: 500 }}>Appointment Type</Form.Label>\r\n <Select \r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n id='appointmentType'\r\n aria-label='Select Appointment Type'\r\n name='appointmentType'\r\n value={currentAppointmentType} \r\n onChange={(event) => handleAppointmentTypeChange(event.target.value)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: '#fff' }}>\r\n <MenuItem key='Video' value='0'>Video Call</MenuItem>\r\n <MenuItem key='Phone' value='1'>Phone Call</MenuItem>\r\n </Select>\r\n </Form.Group>\r\n </Col> \r\n </Row>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Status</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentStatus} onBlur={(event) => setcurrentStatus(event.target.value)}>\r\n <option value=\"Active\">Active</option>\r\n <option value=\"Archived\">Archived</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Client Type</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentClientType} onBlur={(event) => setcurrentClientType(event.target.value)}>\r\n <option value=\"RHC\">RHC</option>\r\n <option value=\"Private\">Private</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>List Colour</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentListColor} onBlur={(event) => setcurrentListColor(event.target.value)}>\r\n <option value=\"Black\">Black</option>\r\n <option value=\"Green\">Green</option>\r\n <option value=\"Blue\">Blue</option>\r\n <option value=\"Brown\">Brown</option>\r\n {/* <option value=\"Red\">Red</option> - Already used */}\r\n {/* <option value=\"Yellow\">Yellow</option> - Not Readable */}\r\n <option value=\"Orange\">Orange</option>\r\n <option value=\"Purple\">Purple</option>\r\n <option value=\"Pink\">Pink</option>\r\n <option value=\"Grey\">Grey</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </Tab>\r\n {(props.clienttype !== 'Financial' && props.clienttype !== 'Supervision') ?\r\n <Tab eventKey=\"clientSource\" title=\"Referrer Souce\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}> \r\n <>\r\n <h4>Source Referrer</h4>\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label style={{ color: 'green', fontWeight: 500 }}>Select Referrer (or enter a new one below)</Form.Label> \r\n <Autocomplete\r\n id=\"sourceReferrerLookUp\"\r\n variant=\"outlined\"\r\n options={source}\r\n getOptionLabel={(option) => option.description }\r\n getOptionSelected={(option, value) => getSourceOption(option, value)}\r\n value={currentSource}\r\n onChange={(event, newValue) => loadSource(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"SourceSelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>First Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentSourceFirstname\" value={currentSource ? currentSource.firstname : ''} onChange={(event) => setcurrentSource({...currentSource, firstname: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Surname</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentSourceSurname\" value={currentSource ? currentSource.surname : ''} onChange={(event) => setcurrentSource({...currentSource, surname: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Organisation</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentSourceOrganisationName\" value={currentSource ? currentSource.organisationname : ''} onChange={(event) => setcurrentSource({...currentSource, organisationname: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentSourcePhone\" value={currentSource ? currentSource.phone : ''} onChange={(event) => setcurrentSource({...currentSource, phone: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Email</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentSourceEmail\" value={currentSource ? currentSource.email : ''} onChange={(event) => setcurrentSource({...currentSource, email: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n </>\r\n </Tab>\r\n :\r\n null\r\n }\r\n {(props.clienttype !== 'Financial' && props.clienttype !== 'Supervision') ?\r\n <Tab eventKey=\"clientGP\" title=\"GP\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}> \r\n {/* Medical Practitioner */}\r\n <>\r\n {props.clienttype !== 'Provisional' && props.clienttype !== 'GP' ?\r\n <>\r\n <Row>\r\n <Col md=\"4\">\r\n <h4>Client's GP</h4>\r\n </Col>\r\n <Col md=\"2\" style={{ textAlign: \"right\"}}>\r\n <SearchIcon style={{ marginTop: 8, marginRight: -13 }} />\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group style={{ width: \"100%\", marginBottom: 0 }}>\r\n <Autocomplete\r\n id=\"profileMedicalPractitionerID\"\r\n variant=\"outlined\"\r\n options={medicalPractitioners}\r\n getOptionLabel={(option) => option.fullname }\r\n getOptionSelected={(option, value) => getMedicalPractitionerOption(option, value)}\r\n value={currentMedicalPractitioner}\r\n onChange={(event, newValue) => loadMedicalPractitioner(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"MedicalPractitionerSelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group controlId=\"currentMedicalPractitionerFirstName\">\r\n <Form.Label>Firstname</Form.Label>\r\n <Form.Control type=\"text\" name=\"firstName\" value={currentMedicalPractitioner.firstName} onChange={(event) => setcurrentMedicalPractitioner({...currentMedicalPractitioner, firstName: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group controlId=\"currentMedicalPractitionerSurname\">\r\n <Form.Label>Surname</Form.Label>\r\n <Form.Control type=\"text\" name=\"surname\" value={currentMedicalPractitioner.surname} onChange={(event) => setcurrentMedicalPractitioner({...currentMedicalPractitioner, surname: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group controlId=\"currentMedicalPractitionerMobilePhone\">\r\n <Form.Label>Mobile Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"mobilephone\" value={currentMedicalPractitioner.mobilephone} onChange={(event) => setcurrentMedicalPractitioner({...currentMedicalPractitioner, mobilephone: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group controlId=\"currentMedicalPractitionerProviderNo\">\r\n <Form.Label>Provider Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"providernumber\" value={currentMedicalPractitioner.providernumber} onChange={(event) => setcurrentMedicalPractitioner({...currentMedicalPractitioner, providernumber: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n {/* Medical Practice */} \r\n <Row>\r\n <Col md=\"4\">\r\n <h4>Practice</h4>\r\n </Col>\r\n <Col md=\"2\" style={{ textAlign: \"right\"}}>\r\n <SearchIcon style={{ marginTop: 8, marginRight: -13 }} />\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group style={{ width: \"100%\", marginBottom: 0 }}>\r\n <Autocomplete\r\n id=\"profileMedicalPractice\"\r\n variant=\"outlined\"\r\n options={medicalPractices}\r\n getOptionLabel={(option) => option.practicename }\r\n getOptionSelected={(option, value) => getMedicalPracticeOption(option, value)}\r\n value={currentMedicalPractice}\r\n onChange={(event, newValue) => loadMedicalPractitice(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"MedicalPracticeSelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Clinic Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"practicename\" value={currentMedicalPractice ? currentMedicalPractice.practicename : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, practicename: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>ABN</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentAbn\" value={currentMedicalPractice ? currentMedicalPractice.abn : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, abn: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Contact Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentPhone\" value={currentMedicalPractice ? currentMedicalPractice.phone : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, phone: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Clinic Address</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentAddress1\" value={currentMedicalPractice ? currentMedicalPractice.address1 : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, address1: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Clinic Fax</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentFax\" value={currentMedicalPractice ? currentMedicalPractice.fax : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, fax: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Clinic Email</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentEmail\" value={currentMedicalPractice ? currentMedicalPractice.email : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, email: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n </>\r\n :\r\n <>\r\n <Row>\r\n <Col md=\"4\">\r\n <h4>Client's GP</h4>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>GP Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"profilegpname\" defaultValue={currentGPName} onBlur={(event) => setcurrentGPName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>GP Clinic Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"profilegpclinicname\" defaultValue={currentGPClinicName} onBlur={(event) => setcurrentGPClinicName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n {props.clienttype === 'GP' ?\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Client consent to share their Mental Health Treatment Plan with their GP</Form.Label>\r\n <Form.Control as=\"select\" name=\"profileconsentToShareWithGP\" defaultValue={currentConsentToShareWithGP} onBlur={(event) => setcurrentConsentToShareWithGP(event.target.value)} >\r\n <option value=''></option>\r\n <option value='N'>No</option>\r\n <option value='Y'>Yes</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n :\r\n null\r\n }\r\n </Row>\r\n </>\r\n }\r\n </>\r\n </Tab>\r\n :\r\n null\r\n }\r\n <Tab eventKey=\"bookings\" title=\"Bookings\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}> \r\n <BookingsList\r\n type='client'\r\n id={currentClientID}\r\n userTZ={currentTimeZone}\r\n view='admin'\r\n providerType={props.type}\r\n />\r\n </Tab>\r\n {/* <Tab eventKey=\"todos\" title=\"Messages\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}>\r\n <Row>\r\n <Col md=\"3\">\r\n {currentClientID && <ToDos clientID={currentClientID} setShowToDo={setShowToDo} tagValues={listfilters} clientType={props.clienttype} noForm={true} />}\r\n </Col>\r\n </Row>\r\n </Tab> */}\r\n <Tab eventKey=\"notes\" title=\"Notes\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}> \r\n <Notes type=\"Client\" \r\n firstName={currentPreferredName && currentPreferredName.length > 2 ? currentPreferredName : currentFirstName}\r\n pkid={currentClientID} \r\n medicalPractice={currentMedicalPractice} \r\n waitingRoomURL={currentwaitingRoomURL}\r\n faxGP={currentReferralGPPracticeFax}\r\n />\r\n </Tab>\r\n <Tab eventKey=\"files\" title=\"Files\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}>\r\n <Files type=\"Client\" subtype={currentPaymentType} pkid={currentClientID} />\r\n </Tab>\r\n {(props.clienttype !== 'Financial' && props.clienttype !== 'Supervision') ?\r\n <Tab eventKey=\"referrals\" title=\"Referrals\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}>\r\n <ReferralMaintenance \r\n viewerFullName={`${currentFirstName} ${currentSurname}`}\r\n clientID={currentClientID}\r\n psychologistID={currentPsychologistID}\r\n type={'client'}\r\n />\r\n </Tab>\r\n :\r\n null\r\n }\r\n <Tab eventKey=\"opportunity\" title=\"Opportunity\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}> \r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Opportunity Details (Max 500 characters)</Form.Label>\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" name=\"profileOpportunityDescription\" defaultValue={currentOpportunityDescription} onBlur={(event) => setcurrentOpportunityDescription(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Colour</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentOpportunityColour} onBlur={(event) => setcurrentOpportunityColour(event.target.value)}>\r\n <option value=\"#00B3BE\">Aqua</option>\r\n <option value=\"#A33383\">Magenta</option>\r\n <option value=\"#D2B12B\">Yellow</option>\r\n <option value=\"#93A33A\">Green</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Status</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentOpportunityStatus} onBlur={(event) => setcurrentOpportunityStatus(event.target.value)}>\r\n <option value=\"Active\">Active</option>\r\n <option value=\"Closed\">Closed</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\" style={{ paddingTop: 26}}>\r\n <Button variant=\"primary\" onClick={() => resetInterestedProviders(currentClientID)}>\r\n Reset Interested Providers\r\n </Button>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Label>Interested Providers</Form.Label>\r\n <Paper>\r\n <TableContainer style={{ backgroundColor: '#FFF', height: 340, width: \"100%\", overflowY: \"scroll\" }}>\r\n <Table className={classes.table} aria-label=\"simple table\">\r\n <TableHead>\r\n <TableRow>\r\n <TableCell>Provider</TableCell>\r\n <TableCell>Expressed Interest</TableCell>\r\n <TableCell>Relevant Info</TableCell>\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {currentOpportunityInterested ? currentOpportunityInterested.map((row) => (\r\n <TableRow key={row.id}>\r\n <TableCell>\r\n {row.providerName}\r\n </TableCell>\r\n <TableCell>\r\n {format(new Date(row.createdOn), \"dd-MM-yyyy HH:mm\")}\r\n </TableCell>\r\n <TableCell>\r\n {row.relevantInfo}\r\n </TableCell>\r\n </TableRow>\r\n ))\r\n : \r\n null\r\n }\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </Paper>\r\n </Col>\r\n </Row>\r\n </Tab>\r\n <Tab eventKey=\"referrer\" title=\"Referrer\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"referrerName\" defaultValue={currentReferrerName}/>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Organisation</Form.Label>\r\n <Form.Control type=\"text\" name=\"referrerOrganisation\" defaultValue={currentReferrerOrganisation} />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Email</Form.Label>\r\n <Form.Control type=\"text\" name=\"referrerEmail\" defaultValue={currentReferrerEmail} />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Contact Phone Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"referrerMobile\" defaultValue={currentReferrerMobile} />\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Label>Client Invite Entered by (if not an Admin user)</Form.Label>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Contact Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"referrerContactName\" defaultValue={currentReferrerContactName}/>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Contact Phone Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"referrerContactMobile\" defaultValue={currentReferrerContactMobile} />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Contact Email Address</Form.Label>\r\n <Form.Control type=\"text\" name=\"referrerContactEmail\" defaultValue={currentReferrerContactEmail} />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </Tab>\r\n {currentClientID && currentClientID > 0 ?\r\n <Tab eventKey=\"tags\" title=\"Tags\" className=\"tags-tab\">\r\n <Tags args={{ \r\n context: 'Client', \r\n fkID: currentClientID,\r\n display: { layout: 'form', header: false, box: true } ,\r\n autoSave: true,\r\n }}/>\r\n </Tab>\r\n : null}\r\n {/* <Tab eventKey=\"bookings\" title=\"Bookings\" style={{backgroundColor: \"rgb(252, 252, 252)\", padding: 0}}>\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\" style={{ padding: 16 }}>\r\n <Grid item><h4 style={{ marginBottom: 0 }}>Bookings ({currentTimeZone})</h4></Grid>\r\n </Grid>\r\n <BookingsList\r\n type='client'\r\n id={currentClientID && currentClientID}\r\n userTZ={currentTimeZone}\r\n />\r\n </>\r\n </Tab> */}\r\n <Tab eventKey=\"security\" title=\"Security\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}>\r\n <h4>Password Update (Leave blank unless resetting password)</h4>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>New Password</Form.Label>\r\n <Form.Control type=\"password\" name=\"newpassword\" defaultValue={currentNewPassword} onBlur={(event) => setcurrentNewPassword(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>New Confirm Password</Form.Label>\r\n <Form.Control type=\"password\" name=\"newpasswordconfirmation\" defaultValue={currentNewPasswordConfirmation} onBlur={(event) => setcurrentNewPasswordConfirmation(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"5\">\r\n <Form.Group>\r\n <span style={{ paddingBottom: 4 }}>Force Password Change at Next Login</span>\r\n <Checkbox aria-label='Force Password Change at Next Login' name=\"ForcePasswordChange\" value={currentForcePasswordChange} onChange={(event) => setcurrentForcePasswordChange(event.target.checked)} style={{ paddingTop: 6, paddingLeft: 15 }} />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </Tab>\r\n </Tabs>\r\n </Form> \r\n </Modal.Body> \r\n <Modal.Footer className=\"editprofile-modal\">\r\n <Button variant=\"secondary\" onClick={handleClose}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"primary\" onClick={putClient}>\r\n Save\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showAppointment} onHide={handleAppointmentClose} dialogClassName=\"editappointment-modal\">\r\n <Modal.Header closeButton className=\"editappointment-modal\">\r\n <Modal.Title>Appointments - {currentFirstName} {currentSurname}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"editappointment-modal\"> \r\n <BookingWeek\r\n mode=\"admin\"\r\n clientID={currentClientID}\r\n clientFullname={currentFirstName && (currentPreferredName && currentPreferredName.length > 2 ? currentPreferredName + ' ' + currentSurname : currentFirstName + ' ' + currentSurname)}\r\n clientFirstName={currentFirstName}\r\n clientPreferredName={currentPreferredName}\r\n clientEmail={currentEmail}\r\n clientTZ={currentTimeZone}\r\n paymentType={currentPaymentType}\r\n bookingType={currentClientBookingType}\r\n providerType={props.clienttype}\r\n setShowAppointment={setShowAppointment}\r\n specialistType={currentSpecialistType}\r\n program={currentProgram}\r\n />\r\n </Modal.Body>\r\n <Modal.Footer className=\"editappointment-modal\">\r\n <Button variant=\"secondary\" onClick={handleAppointmentClose}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showBooking} onHide={()=>setShowBooking(false)} dialogClassName=\"new-bookingDialog-modal\" centered>\r\n <Modal.Header closeButton className=\"new-booking-modal\">\r\n {clientBooking && clientBooking.id ?\r\n <Modal.Title>Booking - {clientBooking.status}</Modal.Title>\r\n :\r\n <Modal.Title>Retrieving Booking Information - Please wait </Modal.Title>\r\n }\r\n </Modal.Header>\r\n <Modal.Body className=\"new-booking-modal\" style={{ backgroundColor: 'rgb(245,245,245)' }}>\r\n {!toggleMessage ?\r\n <Grid container spacing={3} style={{ height: 247 }}>\r\n <Grid item md={3} xs={6}>\r\n Psychologist:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {clientBooking.psychologistfullname}\r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Client:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {clientBooking.clientfullname}\r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Date:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {format(new Date(clientBooking.psychologistDate ? clientBooking.psychologistDate: null), \"dd-MM-yyyy\")}\r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Time:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {format(new Date(clientBooking.psychologistDate ? clientBooking.psychologistDate: null), \"h:mm aa\")}\r\n </Grid>\r\n { clientBooking.clientDate !== clientBooking.psychologistDate ?\r\n <>\r\n <Grid item md={3} xs={6}>\r\n Client's Time:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {format(new Date(clientBooking.clientDate ? clientBooking.clientDate: null), \"h:mm aa\")}\r\n </Grid>\r\n </>\r\n : null\r\n }\r\n {/* <Grid item md={3} xs={6}>\r\n Session URL:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n <a href={clientBooking.waitingroomurl} target=\"_blank\" rel=\"noopener noreferrer\">\r\n {clientBooking.waitingroomurl}\r\n </a>\r\n </Grid> */}\r\n </Grid>\r\n :\r\n sentMsg ? \r\n <>\r\n <Row>\r\n <Col md=\"12\" style={{ height: 222 }}> \r\n {sentMsg}\r\n </Col>\r\n </Row>\r\n </>\r\n : \r\n <>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Message</Form.Label>\r\n <Form.Control as=\"textarea\" rows={8} type=\"text\" name=\"psychologistNote\" defaultValue={newNote} onBlur={(event) => setNewNote(event.target.value)} autoComplete='new-password' style={{ borderColor: '#D1D1D1'}} />\r\n {/* {newNoteHelpText.length ? (<p className='error-help'>{newNoteHelpText}</p>) : ''} */}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n }\r\n </Modal.Body>\r\n <Modal.Footer className=\"new-booking-modal\">\r\n <Grid\r\n container\r\n direction=\"row\"\r\n justifyContent=\"space-between\"\r\n alignItems=\"center\"\r\n >\r\n {!toggleMessage ?\r\n <>\r\n {clientBooking && clientBooking.id ?\r\n <>\r\n <Grid item>\r\n {getActionButtons(clientBooking.id)}\r\n </Grid>\r\n <Grid item>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => setToggleMessage(!toggleMessage)} style={{ marginRight: 15 }}>\r\n Message\r\n </Button>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={() => setShowBooking(false)} className=\"lightButtonOutlinedLarge\">\r\n Close\r\n </Button>\r\n </Grid>\r\n </>\r\n :\r\n <Grid item>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={() => setShowBooking(false)} className=\"lightButtonOutlinedLarge\">\r\n Close\r\n </Button>\r\n </Grid>\r\n }\r\n </>\r\n :\r\n <>\r\n <Grid item>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={() => setToggleMessage(!toggleMessage)} className=\"lightButtonOutlinedLarge\">\r\n Cancel\r\n </Button>\r\n </Grid>\r\n <Grid item>\r\n <Button variant=\"success\" size=\"sm\" onClick={() => sendMessage()}>\r\n Send >\r\n </Button>\r\n </Grid>\r\n </>\r\n }\r\n </Grid>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showNotes} onHide={()=>setShowNotes(false)} dialogClassName=\"notes-modal-dialog\">\r\n <Modal.Header closeButton className=\"notes-modal\">\r\n <Modal.Title>Notes - {currentFirstName} {currentSurname}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"notes-modal\">\r\n <Notes type=\"Client\" pkid={currentClientID} waitingRoomURL={currentwaitingRoomURL} firstName ={currentPreferredName && currentPreferredName.length > 2 ? currentPreferredName : currentFirstName} faxGP={currentReferralGPPracticeFax} />\r\n </Modal.Body>\r\n <Modal.Footer className=\"notes-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowNotes(false)}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showFiles} onHide={()=>setShowFiles(false)} dialogClassName=\"notes-modal-dialog\">\r\n <Modal.Header closeButton className=\"notes-modal\">\r\n <Modal.Title>Files - {currentFirstName} {currentSurname}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"notes-modal\">\r\n {registered ? \r\n <Files type=\"Client\" subtype={currentPaymentType} pkid={currentClientID} />\r\n : null} \r\n </Modal.Body>\r\n <Modal.Footer className=\"notes-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowFiles(false)}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showToDo} onHide={()=>setShowToDo(false)} dialogClassName=\"todos-modal-dialog\">\r\n <Modal.Header closeButton className=\"todos-modal\">\r\n <Modal.Title>To Do - {toDoTitle}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"todos-modal\">\r\n {toDoClientID && <ToDos clientID={toDoClientID} setShowToDo={setShowToDo} tagValues={listfilters} clientType={props.clienttype} />}\r\n </Modal.Body>\r\n </Modal>\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n ) \r\n}\r\n\r\n","import React, { useEffect, useState, useCallback } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { Button, Modal, Form, Row, Col, InputGroup, Tabs, Tab, Badge } from \"react-bootstrap\";\r\nimport Interweave from 'interweave';\r\nimport { Paper, Grid, List, ListItem, ListItemIcon, ListItemText, TextField, CardActions, MenuItem, Select, Card, CardMedia, CardContent, Chip, Typography, makeStyles, Checkbox, useMediaQuery } from '@material-ui/core';\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport ClearIcon from '@material-ui/icons/Clear';\r\nimport Alert from '@material-ui/lab/Alert';\r\nimport AlertTitle from '@material-ui/lab/AlertTitle';\r\nimport Files from \"../../../components/Files\";\r\nimport Tags from '../../../components/Tags';\r\nimport DateFnsUtils from '@date-io/date-fns';\r\nimport { MuiPickersUtilsProvider, KeyboardDatePicker,} from '@material-ui/pickers';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport * as Reference from \"../../../store/ducks/reference.duck\";\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport ReferralMaintenance from \"../../../components/ReferralMaintenance\";\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\nimport { format } from \"date-fns\";\r\nimport Masonry from 'react-masonry-css';\r\nimport Notes from \"../../../components/Notes\";\r\n// import clsx from 'clsx';\r\n// import ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\nconst useStyles = makeStyles(() => ({\r\n noBorder: {\r\n border: \"none\",\r\n },\r\n}));\r\n\r\nconst useStylesDatePicker = makeStyles({\r\n root: {\r\n \"& .MuiInputBase-root\": {\r\n height: 33,\r\n }\r\n }\r\n});\r\n\r\n\r\nexport function ClientInvitesPsychologist() {\r\n return <ClientInvites type=\"Psychologist\" />;\r\n}\r\n\r\nexport function ClientInvitesReferrer() {\r\n return <ClientInvites type=\"Referrer\" />;\r\n}\r\n\r\nexport function ClientInvitesAdmin() {\r\n return <ClientInvites type=\"Admin\" />;\r\n}\r\n\r\n\r\nexport default function ClientInvites(props) {\r\n\r\n const dispatch = useDispatch()\r\n const isMobile = useMediaQuery('(max-width: 760px)');\r\n const userTZ = useSelector(state => state.auth.userTZ)\r\n const filters = useSelector(state => state.admin.Filters)\r\n const displayinvite = useSelector(state => state.admin.DisplayInvite)\r\n const allcontracts = useSelector(state => state.admin.Contracts)\r\n const contracts = allcontracts.filter(contract => contract.type === 'Contract' && contract.status === 'Active')\r\n const invites = useSelector(state => state.admin.ClientInvites);\r\n const classesDatePicker = useStylesDatePicker();\r\n const [currentProviderType, setcurrentProviderType] = useState('Psychologist');\r\n const [referrerAlert, setReferrerAlert] = useState('Please upload Mental Health Care Plan (MHCP) here, or ask your client to ask their GP to fax it to 074573 1100')\r\n const roleScope = useSelector(state => state.auth.roleScope)\r\n const source = useSelector(state => state.admin.Source)\r\n \r\n useEffect( () => {\r\n dispatch(Admin.actions.fetchClientInvites({ startDate: filters.clientInviteStartDate, endDate: filters.clientInviteEndDate })) },\r\n [dispatch, filters.clientInviteStartDate, filters.clientInviteEndDate] \r\n )\r\n\r\n useEffect( () => { dispatch(Admin.actions.fetchSource()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchSupervisionAreas()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchAreasOfInterest('ALL')) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchTimeZone()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchMatching( { providertype: currentSpecialistType === 'nthqldphn' ? 'NthQLDPHN' : currentProviderType, invite : true, availabilitytype : currentProviderType === 'Supervision' ? 'Supervision' : 'New' })) }, [dispatch, currentProviderType, currentSpecialistType] )\r\n useEffect( () => { dispatch(Admin.actions.fetchReferrers()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchContracts()) }, [dispatch] )\r\n \r\n const initSource = useCallback(() => {\r\n return { id: 0, firstName: '', surname: '', phone: '', email: '', organisationname: '',description: '', status: 'Active' }\r\n },[])\r\n\r\n // Blob setup for psychologist photos \r\n const containerName = `psychologists`;\r\n const storageAccountName = process.env.REACT_APP_STORAGERESOURCENAME || \"\"; \r\n\r\n const [currentid,setcurrentid] = useState(0);\r\n const [currentFirstName,setcurrentFirstName] = useState();\r\n const [currentPreferredName,setcurrentPreferredName] = useState();\r\n const [currentSurname,setcurrentSurname] = useState();\r\n const [currentEmail,setcurrentEmail] = useState();\r\n const [currentMobile,setcurrentMobile] = useState();\r\n const [currentMessage, setcurrentMessage] = useState('');\r\n const [currentAreasOfInterest, setcurrentAreasOfInterest] = useState([]);\r\n const [currentKeyAreas,setcurrentKeyAreas] = useState([]);\r\n const [currentPsychologist, setcurrentPsychologist] = useState('');\r\n const [currentTimeZone, setcurrentTimeZone] = useState(userTZ ? userTZ : 'AUS Eastern Standard Time');\r\n const [currentSlot, setcurrentSlot] = useState();\r\n const [currentInviteToken, setcurrentInviteToken] = useState();\r\n const [currentPaymentType, setcurrentPaymentType] = useState();\r\n const [currentAppointmentType, setcurrentAppointmentType] = useState('0');\r\n const [viewedFilesUpload, setViewedFilesUpload] = useState(false)\r\n \r\n const [currentReferrerFirstName,setcurrentReferrerFirstName] = useState();\r\n const [currentReferrerSurname,setcurrentReferrerSurname] = useState();\r\n const [currentReferrerMobile,setcurrentReferrerMobile] = useState();\r\n const [currentReferrerEmail,setcurrentReferrerEmail] = useState();\r\n const [currentStatus,setcurrentStatus] = useState();\r\n const [currentContract, setcurrentContract] = useState(null);\r\n\r\n const [currentReferrerName,setcurrentReferrerName]= useState();\r\n const [currentReferrerOrganisationName,setcurrentReferrerOrganisationName] = useState();\r\n const [currentReferrerOrgEmail,setcurrentReferrerOrgEmail] = useState();\r\n const [currentSelectLater,setcurrentSelectLater] = useState('Y');\r\n const [currentHandOverNotes,setcurrentHandOverNotes] = useState();\r\n const [currentBulkBilledReason,setcurrentBulkBilledReason] = useState();\r\n const [showProviderBio,setShowProviderBio] = useState(false)\r\n const [providerBioFullName,setProviderBioFullName] = useState()\r\n const [providerBioBio,setProviderBioBio] = useState()\r\n const [currentReferralGPName,setcurrentReferralGPName] = useState();\r\n const [currentReferralGPPracticeFax,setcurrentReferralGPPracticeFax] = useState();\r\n const [currentReferralGPPracticeEmail,setcurrentReferralGPPracticeEmail] = useState();\r\n const [currentProgram, setcurrentProgram] = useState(0)\r\n const referrers = useSelector(state => state.admin.Referrers)\r\n const invitedClientswithReferrers = referrers.filter(referrer => referrer.referralcount > 0)\r\n\r\n const areasOfInterest = useSelector(state => state.reference.AreasOfInterest);\r\n // Setup variables for Psychology and Financial Areas of Interest (note GP's and Provisional Psychologist Invites Do not have areas of interest)\r\n const FinancialAreasOfInterest = areasOfInterest.filter(area => area.providertype === 'Financial')\r\n // const ProvisionalAreasOfInterest = areasOfInterest.filter(area => (area.issue === 'Anxiety' || area.issue === 'Depression' || area.issue === 'Grief & Loss'))\r\n const aoi_focus = areasOfInterest.filter(aoi => aoi.focusAreaIndex !== null && aoi.providertype === 'Psychologist')\r\n const aoi_other = areasOfInterest.filter(aoi => aoi.focusAreaIndex === null && aoi.providertype === 'Psychologist')\r\n const aoi_program = areasOfInterest.filter(aoi => aoi.program !== null && aoi.providertype === 'Psychologist')\r\n const supervisionAreas = useSelector(state => state.reference.SupervisionAreas).filter(sa => sa.providertype === 'Psychologist')\r\n const endorsedSupervisionAreas = useSelector(state => state.reference.SupervisionAreas).filter(sa => sa.providertype === 'Psychologist-Endorsed')\r\n const psychologists = useSelector(state => state.admin.Matching)\r\n const [currentSource, setcurrentSource] = useState(initSource()) \r\n var [currentFacetoFaceBooking,setcurrentFacetoFaceBooking] = useState()\r\n var [currentSpecialistType,setcurrentSpecialistType] = useState()\r\n\r\n const loadSource = useCallback((thisSource) => {\r\n setcurrentSource(thisSource ? thisSource : initSource())\r\n },[initSource])\r\n\r\n\r\n const getSourceOption = (option, value) => {\r\n if (option.id === value.id) {\r\n return option\r\n } else {\r\n return initSource();\r\n }\r\n }\r\n\r\n // when changing psychologists, fetch their availability\r\n const handleMatchingAutocompleteChange = useCallback((newValue) => { \r\n if (newValue) {\r\n setcurrentPsychologist(newValue);\r\n setcurrentSlot();\r\n dispatch(Admin.actions.fetchMatchingAvailability({ psychologistID: newValue.id, userTZ: currentTimeZone, availabilityType : currentProviderType === 'Supervision' ? 'Supervision' : 'New', invite : true }));\r\n }\r\n },[currentTimeZone, currentProviderType, dispatch])\r\n\r\n const loadInvite = useCallback((thisInvite) => {\r\n thisInvite.psychologistid && dispatch(Admin.actions.fetchMatchingAvailability({ psychologistID: thisInvite.psychologistid, userTZ: thisInvite.timezone, availabilityType : currentProviderType === 'Supervision' ? 'Supervision' : 'New', invite : true }));\r\n setcurrentid(thisInvite.id);\r\n setcurrentFirstName(thisInvite.firstname)\r\n setcurrentPreferredName(thisInvite.preferredname)\r\n setcurrentSurname(thisInvite.surname)\r\n setcurrentEmail(thisInvite.email)\r\n setcurrentMobile(thisInvite.phone)\r\n setcurrentMessage(thisInvite.message)\r\n var aoi = aoi_focus.filter(( {issue} ) => thisInvite.clientAreasOfInterest.includes(issue))\r\n setcurrentAreasOfInterest(aoi);\r\n var keyaoi = aoi_other.filter(( {issue} ) => thisInvite.clientAreasOfInterest.includes(issue))\r\n setcurrentKeyAreas(keyaoi);\r\n setcurrentInviteToken(thisInvite.invitetoken);\r\n setcurrentTimeZone(thisInvite.timezone);\r\n setcurrentSlot(thisInvite.bookingdate);\r\n setcurrentReferrerFirstName(thisInvite.referrerfirstname);\r\n setcurrentReferrerSurname(thisInvite.referrersurname);\r\n setcurrentReferrerMobile(thisInvite.referrermobile) \r\n setcurrentReferrerEmail(thisInvite.referreremail) \r\n setcurrentReferrerName(thisInvite.referrername)\r\n setcurrentReferrerOrganisationName(thisInvite.referrerorganisationname)\r\n setcurrentReferrerOrgEmail(thisInvite.referrerorgemail)\r\n setcurrentPaymentType(thisInvite.paymenttype)\r\n setcurrentBulkBilledReason(thisInvite.bulkbilledreason)\r\n setcurrentAppointmentType(thisInvite.appointmenttype);\r\n setcurrentStatus(thisInvite.status);\r\n setTagValues(thisInvite.tagValues);\r\n setcurrentHandOverNotes(thisInvite.handOverNotes);\r\n setcurrentReferralGPName(thisInvite.referringGPName)\r\n setcurrentReferralGPPracticeFax(thisInvite.referralGPPracticeFax)\r\n setcurrentReferralGPPracticeEmail(thisInvite.referralGPPracticeEmail)\r\n loadContract(contracts.find(v => v.id === thisInvite.contractid))\r\n loadSource(source.find(v => v.id === thisInvite.sourceid))\r\n setcurrentProgram(thisInvite.programid)\r\n setcurrentFacetoFaceBooking(thisInvite.facetoFaceBooking)\r\n setcurrentSpecialistType(thisInvite.specialisttype)\r\n if (psychologists && props.type === 'Psychologist' && psychologists.length > 0)\r\n {\r\n setcurrentProviderType(psychologists[0].providertype)\r\n }\r\n else\r\n {\r\n setcurrentProviderType(thisInvite.providertype)\r\n }\r\n setInviteError('');\r\n\r\n if(props.type === 'Psychologist' && psychologists)\r\n {\r\n handleMatchingAutocompleteChange(psychologists[0]);\r\n }\r\n else\r\n {\r\n if(thisInvite.psychologistid)\r\n {\r\n setcurrentPsychologist(psychologists.find(row => row.id === thisInvite.psychologistid))\r\n setcurrentSelectLater('N')\r\n }\r\n else \r\n {\r\n setcurrentPsychologist(null)\r\n setcurrentSelectLater('Y')\r\n }\r\n }\r\n setShowInvitation(true);\r\n },[aoi_focus,aoi_other,contracts,dispatch,handleMatchingAutocompleteChange,props.type,psychologists,currentProviderType,source,loadSource])\r\n\r\n const moreProviderBio = (fullName, bio) => {\r\n setProviderBioFullName(fullName)\r\n setProviderBioBio(bio)\r\n setShowProviderBio(true)\r\n\r\n\r\n }\r\n\r\n useEffect(() => {\r\n // \r\n // Some Commentary about this\r\n // Essentially when someone creates a new invite, the application creates the new invite then opens the invite modal with that invite displayed\r\n // To do this a Redux variable - DisplayInvite is set with the id \r\n // This DisplayInvite variable is used to display the modal then cleared in another dispatch call\r\n //\r\n if (displayinvite && invites.some(invite => invite.id === displayinvite))\r\n {\r\n loadInvite(invites.find(invite => invite.id === displayinvite));\r\n dispatch(Admin.actions.clearDisplayInvite());\r\n if (props.type === 'Referrer')\r\n {\r\n // setReferrerAlert('Please upload Mental Health Care Plan (MHCP) here, or ask your client to ask their GP to fax it to 074573 1100')\r\n setReferrerAlert('Please upload mental health care plan, or ask your client to do so when they sign up.')\r\n\r\n }\r\n //\r\n if(!viewedFilesUpload)\r\n {\r\n setKey('files');\r\n setViewedFilesUpload(true);\r\n }\r\n else\r\n {\r\n setShowInvitation(false)\r\n }\r\n\r\n }\r\n },[setReferrerAlert,invites,displayinvite,props.type,dispatch,loadInvite,viewedFilesUpload]);\r\n\r\n const loadContract = (thisContract) => {\r\n setcurrentContract(thisContract ? thisContract : null)\r\n }\r\n\r\n function getProviderType(provider) {\r\n if(currentProviderType === 'Financial' || currentProviderType === 'GP' || currentProviderType === 'Provisional' || currentProviderType === 'Supervision' || currentProviderType === 'NDIS' || currentProviderType === 'Nurse' || currentProviderType === 'Social' )\r\n {\r\n return provider.providertype === currentProviderType;\r\n }\r\n else\r\n {\r\n if (currentProviderType === 'ALL')\r\n {\r\n // Need to include all provider types except NDIS, Provisional, Financial, GP or Supervision \r\n return provider.providertype === 'Psychologist' || provider.providertype === 'Clinical' || provider.providertype === 'Occupational' || provider.providertype === 'Nurse' || provider.providertype === 'Social'\r\n }\r\n else\r\n {\r\n return provider.providertype === 'Psychologist' || provider.providertype === 'Clinical' || provider.providertype === 'Occupational'\r\n }\r\n }\r\n }\r\n\r\n const providers = psychologists.filter(provider => getProviderType(provider)); \r\n\r\n const timeZone = useSelector(state => state.reference.TimeZone)\r\n const matchingAvailability = useSelector(state => state.admin.MatchingAvailability)\r\n\r\n const searchInvites = (invite) => {\r\n if( true\r\n && (invite.fullname.toLowerCase().search(filters.invitedClientsTerm.toLowerCase()) > -1 || invite.flagClean.toLowerCase().search(filters.invitedClientsTerm.toLowerCase()) > -1 || filters.invitedClientsTerm.length === 0)\r\n && (!filters.invitedClientsReferrer || (filters.invitedClientsReferrer && invite.createdby === filters.invitedClientsReferrer.id))\r\n && (filters.invitedClientProviderType === 'All' || (invite.providertype === filters.invitedClientProviderType))\r\n && ((filters.invitedClientsStatus === 'All' && invite.status !== 'Archived') || invite.status === filters.invitedClientsStatus)\r\n && (filters.invitedClientsType === 'All' || (invite.specialisttype === filters.invitedClientsType)) \r\n )\r\n {\r\n return invite\r\n } \r\n }\r\n const filteredInvites = invites.filter(invite => searchInvites(invite))\r\n\r\n\r\n function setFlag(event, id) {\r\n dispatch(Admin.actions.putClientInviteFlag({ id: id, flag: event.target.value }));\r\n }\r\n\r\n function validateEmail(email) \r\n {\r\n var re = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n return re.test(email);\r\n }\r\n\r\n useEffect( () => { \r\n if (psychologists && props.type === 'Psychologist' && psychologists.length > 0)\r\n {\r\n setcurrentPsychologist(psychologists[0])\r\n setcurrentProviderType(psychologists[0].providertype)\r\n }\r\n }, [props.type, psychologists] )\r\n \r\n function uuidv4() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & (0x3 | 0x8));\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n var [showInvitation, setShowInvitation] = useState(false)\r\n var [showConfirmation, setShowConfirmation] = useState(false)\r\n var [showProvider, setShowProvider] = useState(false)\r\n var [inviteError, setInviteError] = useState('')\r\n\r\n function handleInvitationClose() {\r\n setShowInvitation(false);\r\n } \r\n\r\n function handleConfirmationClose() {\r\n setShowConfirmation(false);\r\n } \r\n\r\n\r\n function handleProviderClose() {\r\n setShowProvider(false);\r\n } \r\n\r\n\r\n const [tagValues, setTagValues] = useState([]);\r\n\r\n const initInvite = () => {\r\n return { \r\n id: 0,\r\n firstname: '',\r\n preferredname: '',\r\n surname: '',\r\n email: '',\r\n phone: '',\r\n message: '',\r\n clientAreasOfInterest: [],\r\n psychologistid: undefined,\r\n timezone: currentTimeZone,\r\n bookingdate: undefined,\r\n appointmenttype:'0',\r\n providertype:'ALL',\r\n invitetoken: uuidv4(),\r\n status: '',\r\n referrerfirstname:'',\r\n referrersurname:'',\r\n referrermobile:'',\r\n referreremail:'',\r\n handOverNotes: '',\r\n paymenttype:'Reduced Gap',\r\n programid : 0,\r\n specialisttype: 'Stamdard',\r\n tagValues: [] }\r\n }\r\n\r\n\r\n const loadNewInvite = () => {\r\n loadInvite(initInvite());\r\n setViewedFilesUpload(false);\r\n setKey('inviteDetails');\r\n }\r\n\r\n function saveInviteConfirmation(props)\r\n {\r\n // Display confirmation modal\r\n setShowConfirmation(true);\r\n }\r\n\r\n function saveInvite(type) {\r\n // Check if files were meant to be uploaded \r\n if (\r\n (currentFirstName === '' )\r\n || (currentMobile === '' )\r\n || (currentEmail.length > 1 && !validateEmail(currentEmail)) \r\n || (currentEmail.length > 1 && currentEmail.includes('mailto'))\r\n || ((currentReferrerFirstName.length < 5) && currentReferrerSurname.length < 5 && currentReferrerMobile.length !== 10 && currentProviderType === 'Referrer')\r\n || ((currentPaymentType === 'Contract') && !currentContract)\r\n )\r\n { \r\n if (currentProviderType === 'Referrer')\r\n {\r\n setInviteError('You must provide a client first name, Area of Interest, a valid client mobile phone number, your name and your mobile phone number.')\r\n }\r\n else\r\n {\r\n setInviteError('You must provide a first name, Area of Interest and a valid mobile phone number (and a valid email address if one has been included).')\r\n }\r\n \r\n if ((currentPaymentType === 'Contract') && !currentContract)\r\n {\r\n setInviteError(inviteError + ' Contract has not been selected.')\r\n }\r\n\r\n } \r\n else \r\n {\r\n setInviteError('')\r\n // Merge AOI and Key AOI into one field \r\n let mergedAOI = [];\r\n if (currentAreasOfInterest.length > 0)\r\n {\r\n // Ok currentareasofinterest is populated \r\n // Check if currentkeyareas is populated \r\n if (currentKeyAreas.length > 0)\r\n {\r\n // ok both are populated - the excitement grows\r\n mergedAOI = [ ...currentAreasOfInterest, ...currentKeyAreas ];\r\n }\r\n else\r\n {\r\n // keyareas is not populated\r\n mergedAOI = [ ...currentAreasOfInterest]; \r\n }\r\n }\r\n else\r\n {\r\n // Check if currentkeyareas is populated \r\n if (currentKeyAreas.length > 0)\r\n {\r\n // ok keyareas is populated though areasofinterest is not thus set variable \r\n mergedAOI = [...currentKeyAreas ];\r\n }\r\n else\r\n {\r\n // nothing is populated let it go through to the keeper as null \r\n }\r\n }\r\n //\r\n var payload = {\r\n id: currentid,\r\n firstname: currentFirstName,\r\n preferredname: currentPreferredName,\r\n surname: currentSurname,\r\n email: currentEmail,\r\n phone: currentMobile,\r\n message: currentMessage,\r\n clientAreasOfInterest: mergedAOI.map(aoi => aoi.issue).join(\",\"),\r\n psychologistid: currentPsychologist ? currentPsychologist.id : undefined,\r\n timezone: currentTimeZone ? currentTimeZone : userTZ,\r\n bookingdate: currentSlot,\r\n appointmenttype: currentAppointmentType,\r\n invitetoken: currentInviteToken,\r\n providertype: currentProviderType,\r\n referrerfirstname: currentReferrerFirstName,\r\n referrersurname: currentReferrerSurname,\r\n referrermobile: currentReferrerMobile,\r\n referreremail: currentReferrerEmail,\r\n contractid : currentContract && currentContract.id,\r\n handOverNotes: currentHandOverNotes,\r\n paymenttype: currentSelectLater === 'Y' ? '' : currentProviderType === 'GP' ? 'Bulk Billed' : currentProviderType === 'Provisional' ? 'Provisional' : currentProviderType === 'Supervision' ? 'Full Fee' : currentPaymentType,\r\n bulkbilledreason: currentBulkBilledReason,\r\n status: type === 'Update' ? currentStatus : type,\r\n tagValues: tagValues,\r\n source: currentSource,\r\n programid: currentProgram,\r\n facetoFaceBooking: currentFacetoFaceBooking,\r\n specialisttype: currentSpecialistType\r\n }\r\n\r\n if (currentid === 0) {\r\n dispatch(Admin.actions.postClientInvite(payload));\r\n } else {\r\n dispatch(Admin.actions.putClientInvite(payload));\r\n }\r\n if (type === 'Sent')\r\n {\r\n dispatch(Admin.actions.sendClientInvite(payload));\r\n setShowConfirmation(false);\r\n setShowInvitation(false)\r\n }\r\n\r\n\r\n }\r\n }\r\n\r\n const deleteInvite = (id) => {\r\n dispatch(Admin.actions.deleteClientInvite(id));\r\n }\r\n\r\n const sendCallUnsuccessfulReminder = (id) => {\r\n dispatch(Admin.actions.sendCallUnsuccessfulReminder(filteredInvites.find(row => row.id === id)));\r\n }\r\n\r\n const sendInvite = (id) => {\r\n dispatch(Admin.actions.sendClientInvite(filteredInvites.find(row => row.id === id)));\r\n }\r\n\r\n const sendInviteReminder = (id) => {\r\n dispatch(Admin.actions.sendClientInviteReminder(filteredInvites.find(row => row.id === id)));\r\n }\r\n\r\n function handleAppointmentTypeChange(value) {\r\n setcurrentAppointmentType(value);\r\n }\r\n\r\n function handleStatusChange(value) {\r\n setcurrentStatus(value);\r\n }\r\n\r\n function getIndex(value, arr, prop) {\r\n for(var i = 0; i < arr.length; i++) {\r\n if(arr[i][prop] === value) {\r\n return i;\r\n }\r\n }\r\n return -1; // where the value doesn't exist\r\n }\r\n\r\n const handleToggle = (value) => () => {\r\n const currentIndex = getIndex(value.id, currentKeyAreas, 'id') //checked.find(r => r.id === value.id);\r\n const newChecked = [...currentKeyAreas];\r\n if (currentIndex === -1) {\r\n newChecked.push(value);\r\n } else {\r\n newChecked.splice(currentIndex, 1);\r\n }\r\n setcurrentKeyAreas(newChecked);\r\n };\r\n\r\n\r\n function handleTimeZoneChange(value) {\r\n currentPsychologist && dispatch(Admin.actions.fetchMatchingAvailability({ psychologistID: currentPsychologist.id, userTZ: value, availabilityType : currentProviderType === 'Supervision' ? 'Supervision' : 'New', invite : true }));\r\n setcurrentTimeZone(value);\r\n setcurrentSlot();\r\n }\r\n\r\n function handleProgramChange(value) {\r\n setcurrentProgram(value);\r\n }\r\n\r\n function changeSpecialistType(value) {\r\n dispatch(Admin.actions.fetchMatching( { providertype: value === 'nthqldphn' ? 'NthQLDPHN' : currentProviderType, invite : true, availabilitytype : currentProviderType === 'Supervision' ? 'Supervision' : 'New' }))\r\n setcurrentSpecialistType(value)\r\n // setcurrentAreasOfInterest([]) // wipe the selected AOI as they belong to a different provider type\r\n // setcurrentSelectLater(value === 'Supervision' ? 'N' : value === 'GP' ? 'N' : value === 'NDIS' ? 'N' : 'Y')\r\n }\r\n\r\n\r\n function changeProviderType(value) {\r\n dispatch(Admin.actions.fetchMatching( { providertype: currentSpecialistType === 'nthqldphn' ? 'NthQLDPHN' : value, invite : true, availabilitytype : value === 'Supervision' ? 'Supervision' : 'New' }))\r\n setcurrentProviderType(value)\r\n setcurrentAreasOfInterest([]) // wipe the selected AOI as they belong to a different provider type\r\n setcurrentSelectLater(value === 'Supervision' ? 'N' : value === 'GP' ? 'N' : value === 'NDIS' ? 'N' : 'Y')\r\n }\r\n\r\n function selectProvider(row) {\r\n handleMatchingAutocompleteChange(row)\r\n setShowProvider(false);\r\n }\r\n\r\n useEffect( () => {\r\n if(filters.invitesListLoadInviteID)\r\n {\r\n if (invites && invites.length > 1)\r\n {\r\n loadInvite(invites.find(invite => invite.id === filters.invitesListLoadInviteID));\r\n dispatch(Admin.actions.setFilters({ filterName: 'invitesListLoadInviteID', filterValue: undefined }))\r\n }\r\n }\r\n }, [loadInvite, dispatch, filters.invitesListLoadInviteID,invites])\r\n\r\n\r\n function renderProviderOption(option) {\r\n // Check to see if option can be listed based on Payment Type selected \r\n return (\r\n <>\r\n { (currentPaymentType !== 'Bulk Billed') || (currentPaymentType === 'Bulk Billed' && option.bulkBillingAvailable !== \"0\") ?\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item md={4}>{option.fullname}</Grid>\r\n <Grid item md={4}>{option.providertype}</Grid>\r\n <Grid item md={4} className='provider-option-available'><span style={{ color: '#ccc' }}>Next available:</span> {option.nextAvailable}</Grid>\r\n </Grid>\r\n :\r\n null\r\n }\r\n </>\r\n )\r\n }\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', hide: true},\r\n { field: 'fullname', headerName: 'Name', width: 180,\r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadInvite(invites.find(invite => invite.id === params.row.id))} className=\"cell-Link\">\r\n {(params.row.contractid || params.row.specialisttype === 'nthqldphn') ?\r\n <>\r\n <span style={{ color: params.row.contractcolour }}>{params.value}</span>\r\n </>\r\n :\r\n <>\r\n {params.value}\r\n </>\r\n } \r\n </div>\r\n </strong>\r\n ), },\r\n { field: 'flag', headerName: 'Follow-up', width: 250,\r\n cellClassName: (params) => params.row.flag && params.row.flag.length > 0 ? 'flag-full-cell' : 'flag-empty-cell',\r\n renderCell: (params) => (\r\n <>\r\n <TextField \r\n variant=\"outlined\"\r\n name={`flag`} \r\n defaultValue={params.row.flag} \r\n onBlur={(event) => setFlag(event, params.row.id)}\r\n InputProps={{ classes: { notchedOutline:classes.noBorder, input: params.row.flag && params.row.flag.length > 0 ? 'flag-full' : 'flag-empty' }, }}\r\n multiline\r\n maxRows={4}\r\n style= {{ width: '100%'}}\r\n onFocus={event => {\r\n event.target.select();\r\n }}>\r\n </TextField>\r\n </>\r\n )\r\n },\r\n { field: 'email', headerName: 'Email', width: 200,\r\n renderCell: (params) => (\r\n <CopyToClipboard text={params.row.email}>\r\n <span className=\"cell-Link\" style={{ fontWeight: 500}}>{params.row.email}</span>\r\n </CopyToClipboard>\r\n ) },\r\n { field: 'phone', headerName: 'Mobile', width: 110 },\r\n { field: 'providertype', headerName: 'Type', width: 120 },\r\n { field: 'status', headerName: 'Status', width: 110,\r\n cellClassName: (params) => \r\n params.row.status === 'Registered' ? 'registered-status' : (params.row.status === 'Sent' ? 'sent-status' : (params.row.status === 'Reminder' ? 'sent-status' : (params.row.status === 'Called' ? 'sent-status' : (params.row.status === 'Call' ? 'sent-status' : (params.row.status === 'Ready to Archive' ? 'sent-status' : (params.row.status === 'Saved' ? 'saved-status' : (params.row.status === 'Archived' ? 'archived-status' : (params.row.status === 'Hold' ? 'hold-status' : null))))))))\r\n }, \r\n { field: 'createdon', type: 'date', headerName: 'Created', width: 130, valueFormatter: ({ value }) => format(new Date(value), \"dd-MM-yyyy HH:mm\") },\r\n { field: 'updatedon', type: 'date', headerName: 'Updated', width: 130, valueFormatter: ({ value }) => value ? format(new Date(value), \"dd-MM-yyyy HH:mm\") : null },\r\n { field: 'referrer', headerName: 'Last Updated By', width: 230,\r\n cellClassName: (params) => params.row.referrertype && params.row.referrertype === 'R' ? 'referrer-client' : params.row.referrertype && params.row.referrertype === 'P' ? 'private-client' : null },\r\n { field: 'none', headerName: 'Actions', width: 270,\r\n renderCell: (params) => (\r\n <>\r\n {(params.row.status === 'Sent' || params.row.status === 'Reminder' || params.row.status === 'Call' || params.row.status === 'Saved' || params.row.status === 'Called' || params.row.status === 'Ready to Archive') && props.type !== 'Referrer' && \r\n <>\r\n <a href={`/clientregistration/${params.row.invitetoken}`} target=\"RHC\">\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#FFFACD\", marginRight: 14 }} >\r\n Test Invite\r\n </Button>\r\n </a>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={()=>deleteInvite(params.row.id)} style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#eee\", marginRight: 14 }} >\r\n Delete\r\n </Button>\r\n </>\r\n }\r\n {(params.row.status === 'Sent' || params.row.status === 'Reminder' || params.row.status === 'Called' || params.row.status === 'Call' || params.row.status === 'Ready to Archive') && props.type === 'Referrer' && \r\n <>\r\n <a href={`/clientregistration/${params.row.invitetoken}`} target=\"RHC\">\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#FFFACD\", marginRight: 14 }} >\r\n View Invite\r\n </Button>\r\n </a>\r\n </>\r\n }\r\n {((params.row.status === 'Saved' || params.row.status === 'Hold') && params.row.email.length > 5) && \r\n <>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={()=>sendInvite(params.row.id)} style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#eee\", marginRight: 14 }} >\r\n Send\r\n </Button>\r\n </>\r\n }\r\n {(params.row.status === 'Sent' || params.row.status === 'Reminder' || params.row.status === 'Call' || params.row.status === 'Called' || params.row.status === 'Ready to Archive') && params.row.email.length > 5 &&\r\n <>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={()=>sendInviteReminder(params.row.id)} style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#eee\", marginRight: 14 }} >\r\n Reminder\r\n </Button>\r\n </>\r\n }\r\n {(params.row.status === 'Saved' || params.row.status === 'Hold') && props.type === 'Referrer' && \r\n <>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={()=>deleteInvite(params.row.id)} style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#eee\" }} >\r\n Delete\r\n </Button>\r\n </>\r\n }\r\n {(params.row.status === 'Call') && props.type === 'Referrer' && \r\n <>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={()=>sendInviteReminder(params.row.id)} style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#eee\", marginRight: 14 }} >\r\n Call Successful\r\n </Button>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={()=>sendCallUnsuccessfulReminder(params.row.id)} style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#eee\" }} >\r\n Call Unsuccessful\r\n </Button>\r\n </>\r\n }\r\n </>\r\n ) \r\n }\r\n ];\r\n \r\n const [key, setKey] = React.useState('inviteDetails');\r\n const classes = useStyles();\r\n\r\n return (\r\n <>\r\n <h4 >Invited Clients</h4>\r\n {props.type === 'Referrer' ? \r\n <Alert severity=\"info\" variant=\"light\" style={{ backgroundColor: \"#DAF3F4\", borderColor: \"#CEE6E7\", marginBottom: 15 }}>\r\n <AlertTitle>Please tell your client this info:</AlertTitle>\r\n <ul>\r\n <li>\r\n <p>This link sends an invitation to sign up to the Rural Health Connect Portal as an SMS and Email.</p>\r\n </li> \r\n <li>\r\n <p>They need to complete the registration form to confirm their appointment.</p>\r\n </li>\r\n <li>\r\n <p>They will then receive a reminder via SMS and email the day before their appointment with a portal link attached that they click on to enter the call.</p>\r\n </li>\r\n <li>\r\n <p>If they have any issues they should call Rural Health Connect via the number on our website.</p>\r\n </li>\r\n </ul> \r\n </Alert>\r\n :\r\n null\r\n }\r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10 }}>\r\n <Grid item style={{ marginTop: 2, marginLeft: 2 }}> \r\n <Grid container>\r\n <Grid item> \r\n <InputGroup size=\"sm\">\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={filters.invitedClientsTerm}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'invitedClientsTerm', filterValue: event.target.value }))}\r\n autoComplete='OFF'\r\n style={{ maxWidth: 170, height: 35, backgroundColor: filters.invitedClientsTerm.length > 0 ? 'rgb(250 239 195)' : 'white' }}\r\n />\r\n <InputGroup.Append onClick={() => dispatch(Admin.actions.setFilters({ filterName: 'invitedClientsTerm', filterValue: '' }))}>\r\n <InputGroup.Text>\r\n <ClearIcon fontSize=\"small\" style={{ color: filters.invitedClientsTerm.length > 0 ? '#222222' : 'silver', marginLeft: -3 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Append>\r\n </InputGroup>\r\n </Grid>\r\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"Start Date\"\r\n value={filters.clientInviteStartDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'clientInviteStartDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"End Date\"\r\n value={filters.clientInviteEndDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'clientInviteEndDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </Grid>\r\n </MuiPickersUtilsProvider>\r\n <Grid item style={{ marginLeft: 10 }}> \r\n <Form.Control as=\"select\" size=\"sm\" style={{ height: 35 }} defaultValue={filters.invitedClientProviderType} onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'invitedClientProviderType', filterValue: event.target.value }))}>\r\n <option value=\"All\">All</option>\r\n <option value=\"Psychologist\">Psychologist</option>\r\n <option value=\"Financial\">Financial Counsellor</option>\r\n <option value=\"Clinical\">Clinical Psychologist</option>\r\n <option value=\"GP\">GP</option>\r\n <option value=\"Provisional\">Provisional Psychologist</option>\r\n <option value=\"Social\">MH Social Worker</option>\r\n <option value=\"Nurse\">Mental Health Nurse</option>\r\n <option value=\"Occupational\">Occupational Therapist</option>\r\n <option value=\"NDIS\">NDIS</option>\r\n <option value=\"Supervision\">Supervision</option>\r\n </Form.Control>\r\n </Grid>\r\n <Grid item style={{ marginLeft: 10 }}> \r\n <Form.Control as=\"select\" size=\"sm\" style={{ height: 35 }} defaultValue={filters.invitedClientsStatus} onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'invitedClientsStatus', filterValue: event.target.value }))}>\r\n <option value=\"All\">All</option>\r\n <option value=\"Saved\">Saved</option>\r\n <option value=\"Hold\">On Hold</option>\r\n <option value=\"Sent\">Sent</option>\r\n <option value=\"Reminder\">Reminder</option>\r\n <option value=\"Registered\">Registered</option>\r\n <option value=\"Call\">Call</option>\r\n <option value=\"Called\">Called</option>\r\n <option value=\"Ready to Archive\">Ready to Archive</option>\r\n <option value=\"Archived\">Archived</option>\r\n </Form.Control>\r\n </Grid>\r\n {props.type !== 'Psychologist' && props.type !== 'Referrer' ?\r\n <>\r\n <Grid item style={{ marginLeft: 10 }}> \r\n <Autocomplete\r\n id=\"searchReferrer\"\r\n variant=\"outlined\"\r\n options={invitedClientswithReferrers}\r\n getOptionLabel={(option) => option ? option.fullname : ''}\r\n value={filters.invitedClientsReferrer}\r\n onChange={(event, newValue) => dispatch(Admin.actions.setFilters({ filterName: 'invitedClientsReferrer', filterValue: newValue }))}\r\n style={{ minWidth: 200, fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n label=\"Referrer\"\r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"ReferrerSelector\"\r\n style={{ backgroundColor: \"white\", margin: 0, padding: 0, maxWidth: 200 }}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n <Grid item style={{ marginLeft: 10 }}> \r\n <Form.Control as=\"select\" size=\"sm\" style={{ height: 35 }} defaultValue={filters.invitedClientsType} onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'invitedClientsType', filterValue: event.target.value }))}>\r\n <option value=\"All\">All</option>\r\n <option value=\"nthqldphn\">Nth QLD PHN</option>\r\n </Form.Control>\r\n </Grid>\r\n {props.type === 'Referrer' ? \r\n <>\r\n <Grid item style={{ marginLeft: 10 }}>\r\n <a href={`https://files.ruralhealthconnect.com.au/fileStoreRHC/RHCReferralGuidelines.pdf`} target=\"_Referrers\">\r\n <Button variant=\"secondary\" size=\"sm\" >\r\n Review Invite Guidelines\r\n </Button>\r\n </a>\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n </Grid>\r\n </Grid>\r\n <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => loadNewInvite()}>\r\n Add Invite\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n\r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={filteredInvites} columns={columns} pageSize={15} rowHeight={38} rowsPerPageOptions={[15]} checkboxSelection={false} sortModel={[{ field: 'createdon', sort: 'desc' }]} />\r\n </Paper>\r\n \r\n <Modal show={showInvitation} onHide={handleInvitationClose} dialogClassName=\"invite-modal\">\r\n <Modal.Header closeButton className=\"invite-modal\">\r\n <Modal.Title style={{ width: 400 }}>\r\n <Grid container>\r\n <Grid item md={5} style={{ paddingTop: 6 }}>\r\n Invite New Client:\r\n </Grid>\r\n <Grid item md={7}>\r\n {props.type !== 'Psychologist' ? \r\n <Form.Control as=\"select\" value={currentProviderType} onChange={(event) => changeProviderType(event.target.value)} style={{ width: 230, backgroundColor: '#fffed0' }}>\r\n {roleScope !== 'Provisional' ? <option value=\"ALL\">All</option> : null }\r\n {roleScope !== 'Provisional' ? <option value=\"Psychologist\">Psychologist</option> : null }\r\n {roleScope !== 'Provisional' ? <option value=\"GP\" >GP</option> : null }\r\n <option value=\"Provisional\">Provisional Psychologist</option>\r\n {roleScope !== 'Provisional' ? <option value=\"NDIS\" >NDIS</option> : null }\r\n {roleScope !== 'Provisional' ? <option value=\"Social\">MH Social Worker</option> : null }\r\n {roleScope !== 'Provisional' ? <option value=\"Nurse\">Mental Health Nurse</option> : null }\r\n {roleScope !== 'Provisional' ? <option value=\"Occupational\">Occupational Therapist</option> : null }\r\n {roleScope !== 'Provisional' ? <option value=\"Clinical\">Clinical Psychologist</option> : null }\r\n {roleScope !== 'Provisional' ? <option value=\"Supervision\">Supervision</option> : null }\r\n\r\n </Form.Control>\r\n :\r\n null\r\n }\r\n </Grid>\r\n </Grid> \r\n </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"invite-modal\">\r\n {inviteError !== '' ?\r\n <Alert severity=\"error\" style={{ marginBottom: 14 }}>\r\n {inviteError}\r\n </Alert>\r\n :\r\n null }\r\n <Tabs\r\n id=\"ClientInvite\"\r\n activeKey={key}\r\n onSelect={(k) => setKey(k)}\r\n >\r\n <Tab eventKey=\"inviteDetails\" title=\"Invite Details\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}> \r\n {(props.type === 'Referrer' && (currentStatus === 'Saved' || currentStatus === '' || currentStatus === 'Hold')) || (props.type !== 'Referrer') ?\r\n <Row>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>First Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileFirstName\" value={currentFirstName} onChange={(event) => setcurrentFirstName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Preferred Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"profilePreferredName\" value={currentPreferredName} onChange={(event) => setcurrentPreferredName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Surname</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileSurname\" value={currentSurname} onChange={(event) => setcurrentSurname(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Mobile Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileMobile\" value={currentMobile} onChange={(event) => setcurrentMobile(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Email</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileEmail\" value={currentEmail} onChange={(event) => setcurrentEmail(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n :\r\n null\r\n } \r\n { (currentProviderType !== 'Provisional' && currentProviderType !== 'Supervision') ?\r\n <Row>\r\n { (currentProviderType !== 'Social' && currentProviderType !== 'Occupational' && currentProviderType !== 'Nurse' ) ?\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Is this invitation part of a program (please select)</Form.Label><br />\r\n <Select\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n value={currentProgram}\r\n onChange={(event) => handleProgramChange(event.target.value)}\r\n className=\"select-edit\"\r\n style={{ minWidth: 400 }}\r\n displayEmpty\r\n inputProps={{ 'aria-label': 'Without label' }}\r\n >\r\n {aoi_program && aoi_program.map((row, index) => (\r\n <MenuItem key={`program_${index}`} value={row.program}>{row.programName} (Area of Interest: {row.issue})</MenuItem>\r\n ))}\r\n <MenuItem value={0}></MenuItem> \r\n </Select>\r\n </Form.Group>\r\n </Col>\r\n : \r\n null\r\n }\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Specialist Type</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentSpecialistType} onChange={(event) => changeSpecialistType(event.target.value)}>\r\n <option value=\"Standard\">Standard</option>\r\n <option value=\"nthqldphn\">Nth QLD PHN</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n :\r\n null\r\n }\r\n { currentSpecialistType === 'nthqldphn' ? \r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Client requires Face to Face booking</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentFacetoFaceBooking} onBlur={(event) => setcurrentFacetoFaceBooking(event.target.value)}>\r\n <option value=\"N\">No</option>\r\n <option value=\"Y\">Yes</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n :\r\n null\r\n }\r\n { (currentProviderType !== 'GP' && currentProviderType !== 'Provisional' && currentProviderType !== 'Supervision' && currentProgram === 0) ?\r\n <>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Please choose up to four areas of interest your client is wanting to address (or leave blank and they can select)</Form.Label>\r\n <Autocomplete\r\n id=\"aoi\"\r\n variant=\"outlined\"\r\n multiple\r\n options={(currentProviderType === 'Financial') ? FinancialAreasOfInterest : aoi_focus }\r\n getOptionLabel={(option) => option.issue }\r\n value={currentAreasOfInterest}\r\n onChange={(event, newValue) => setcurrentAreasOfInterest(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: \"white\", }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"AOISelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Rural Health Connect is working on projects targeting these key areas of need. Please tick all that apply</Form.Label>\r\n <Row>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {((currentProviderType === 'Financial') ? FinancialAreasOfInterest : aoi_other).map(row => {\r\n if(row.index <= aoi_other.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = currentKeyAreas.find(r => r.id === row.id);\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleToggle(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })\r\n }\r\n </List>\r\n </Col>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {((currentProviderType === 'Financial') ? FinancialAreasOfInterest : aoi_other).map(row => {\r\n if(row.index > aoi_other.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = currentKeyAreas.find(r => r.id === row.id);\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleToggle(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })\r\n }\r\n </List>\r\n </Col>\r\n </Row>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null \r\n\r\n }\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group>\r\n <Form.Label>Referral Hand Over Notes</Form.Label>\r\n <Form.Control as=\"textarea\" rows={3} name=\"handOverNotes\" value={currentHandOverNotes} onChange={(event) => setcurrentHandOverNotes(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n { ( currentProviderType !== 'NDIS' && currentProviderType !== 'GP' && currentProviderType !== 'Supervision') ? \r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group>\r\n <Form.Label style={{ fontWeight: 500 }}>Invite Selection</Form.Label>\r\n <Form.Check id=\"SelectLater\" name=\"selectlater\" type=\"radio\" style={{ marginBottom: 8 }} >\r\n <Form.Check.Input name=\"SelectLater\" type=\"radio\" checked={currentSelectLater === 'Y' ? true: false} onChange={e => setcurrentSelectLater('Y')} />\r\n <Form.Check.Label style={{marginLeft: 12 }}>Client will choose psychologist and payment option</Form.Check.Label>\r\n </Form.Check>\r\n <Form.Check id=\"NotSelectLater\" name=\"notselectlater\" type=\"radio\" style={{ marginBottom: 8 }} >\r\n <Form.Check.Input name=\"SelectLater\" type=\"radio\" checked={currentSelectLater === 'N' ? true: false} onChange={e => setcurrentSelectLater('N')} />\r\n <Form.Check.Label style={{marginLeft: 12 }}>I want to select the psychologist and payment option below</Form.Check.Label>\r\n </Form.Check>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n :\r\n null\r\n }\r\n {currentSelectLater !== 'Y' || currentProviderType === 'GP' || currentProviderType === 'Supervision' ?\r\n <>\r\n <hr></hr>\r\n { (currentProviderType !== 'Financial' && currentProviderType !== 'Provisional' && currentProviderType !== 'GP' && currentProviderType !== 'NDIS' && currentProviderType !== 'Supervision') ? \r\n <Row>\r\n <Col md=\"12\">\r\n <fieldset disabled={currentSelectLater === 'Y' ? true : false}>\r\n <Form.Group>\r\n <Form.Label style={{ fontWeight: 500 }}>Payment Options</Form.Label>\r\n <p>We want everyone be able to access a psychologist and therefore have a range of pricing options. Reduced fee places are limited so please only apply if it suits your circumstances:</p>\r\n <Form.Check id=\"payment-fullfee\" name=\"paymenttype\" type=\"radio\" style={{ marginBottom: 8 }}>\r\n <Form.Check.Input name=\"paymenttype\" type=\"radio\" value=\"Full Fee\" checked={currentPaymentType === 'Full Fee' ? true : false} onChange={e => { setcurrentPaymentType('Full Fee')}} />\r\n <Form.Check.Label style={{marginLeft: 12 }}>STANDARD FEE: I am employed and/or am not experiencing financial hardship </Form.Check.Label>\r\n </Form.Check>\r\n <Form.Check id=\"payment-reducedgap\" name=\"paymenttype\" type=\"radio\" style={{ marginBottom: 8 }} >\r\n <Form.Check.Input name=\"paymenttype\" type=\"radio\" value=\"Reduced Gap\" checked={currentPaymentType === 'Reduced Gap' ? true : false} onChange={e => { setcurrentPaymentType('Reduced Gap')}} />\r\n <Form.Check.Label style={{marginLeft: 12 }}>REDUCED FEE: I am experiencing financial hardship and would like to apply for the psychologist's the reduced gap fee option. </Form.Check.Label>\r\n </Form.Check>\r\n {currentPaymentType === 'Reduced Gap' ?\r\n <>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Please tell us about your circumstances in a few sentences</Form.Label>\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" name=\"bulkBilledReason\" value={currentBulkBilledReason} onChange={(event) => setcurrentBulkBilledReason(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n {props.type === 'Admin' ?\r\n <Form.Check id=\"payment-contract\" name=\"paymenttype\" type=\"radio\" style={{ marginBottom: 8 }} >\r\n <Form.Check.Input name=\"paymenttype\" type=\"radio\" value=\"Contract\" checked={currentPaymentType === 'Contract' ? true : false} onChange={e => { setcurrentPaymentType('Contract')}} />\r\n <Form.Check.Label style={{marginLeft: 12 }}>Contract Sessions (Select Contract Selection Below)</Form.Check.Label>\r\n </Form.Check>\r\n :\r\n null\r\n }\r\n <Form.Check id=\"payment-bulkbilled\" name=\"paymenttype\" type=\"radio\" style={{ marginTop: 20, marginBottom: 8 }} >\r\n <Form.Check.Input name=\"paymenttype\" type=\"radio\" value=\"Bulk Billed\" checked={currentPaymentType === 'Bulk Billed' ? true : false} onChange={e => { setcurrentPaymentType('Bulk Billed')}} />\r\n <Form.Check.Label style={{marginLeft: 12 }}>​BULK BILL(limited sessions available) We have some bulk billed sessions available for those most in need. For Healthcare, Pension or Disability card holders only. </Form.Check.Label>\r\n </Form.Check> \r\n </Form.Group>\r\n </fieldset>\r\n </Col>\r\n </Row> \r\n :\r\n null\r\n } \r\n \r\n {props.type === 'Admin' && currentPaymentType === 'Contract' && currentProviderType !== 'Supervision' ?\r\n <Row>\r\n <Col md=\"9\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label>Contract Selection </Form.Label> \r\n <Autocomplete\r\n id=\"currentContractID\"\r\n variant=\"outlined\"\r\n options={contracts}\r\n getOptionLabel={(option) => option.displayname}\r\n // getOptionSelected={(option, value) => getContractOption(option, value)}\r\n value= {currentContract}\r\n onChange={(event, newValue) => loadContract(newValue)}\r\n style={{ minWidth: 200, fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"currentContactID\"\r\n style={{ backgroundColor: \"white\", margin: 0, padding: 0, maxWidth: 600 }}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n :\r\n null\r\n }\r\n <Row>\r\n {!(props.type === 'Psychologist' && psychologists && currentPsychologist) && (currentProviderType !== 'NDIS') ?\r\n <>\r\n <Col md=\"9\">\r\n <Form.Group >\r\n <Form.Label>Provider (type to search)</Form.Label>\r\n <Autocomplete\r\n id=\"psychologist\"\r\n variant=\"outlined\"\r\n options={providers}\r\n getOptionLabel={(option) => `${option.fullname} ${option.providertype} (Next available: ${option.nextAvailable})` }\r\n renderOption={(option) => renderProviderOption(option)}\r\n disabled={currentSelectLater === 'Y' ? true : false}\r\n value={currentPsychologist}\r\n onChange={(event, newValue) => handleMatchingAutocompleteChange(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: \"white\", }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"PsySelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col> \r\n <Col md=\"2\">\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => setShowProvider(true)} style={{ marginTop: 28 }} disabled={currentSelectLater === 'Y' ? true : false}>\r\n Search\r\n </Button>\r\n </Col>\r\n </>\r\n : null}\r\n </Row>\r\n {(currentProviderType !== 'NDIS') ?\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Booking Date and Time</Form.Label> \r\n <Select\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n disabled={currentSelectLater === 'Y' ? true : false}\r\n value={currentSlot ? currentSlot : ''}\r\n onChange={(event)=>setcurrentSlot(event.target.value)}\r\n className=\"select-edit\"\r\n style={{ minWidth: 200 }}\r\n displayEmpty\r\n inputProps={{ 'aria-label': 'Without label' }}\r\n >\r\n {currentPsychologist && matchingAvailability.map((row, index) => (\r\n <MenuItem key={`key-${index}`} value={row.fromDate}>{format(new Date(row.fromDate), \"dd/MM/yyyy h:mm aaaa\")}</MenuItem>\r\n ))}\r\n <MenuItem value={undefined}></MenuItem> \r\n </Select>\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n :\r\n null\r\n }\r\n </>\r\n :\r\n null\r\n }\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Timezone</Form.Label><br />\r\n <Select\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n value={currentTimeZone}\r\n onChange={(event) => handleTimeZoneChange(event.target.value)}\r\n className=\"select-edit\"\r\n style={{ minWidth: 200 }}\r\n displayEmpty\r\n inputProps={{ 'aria-label': 'Without label' }}\r\n >\r\n {timeZone && timeZone.map((row, index) => (\r\n <MenuItem key={`tz_${index}`} value={row.systemName}>{row.name}</MenuItem>\r\n ))}\r\n <MenuItem value={undefined}></MenuItem> \r\n </Select>\r\n </Form.Group>\r\n </Col>\r\n {(currentProviderType !== 'GP' && currentProviderType !== 'NDIS') ?\r\n <Col md=\"3\">\r\n <Form.Group >\r\n\r\n <Form.Label>Appointment Type</Form.Label>\r\n <Select \r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n id='appointmentType'\r\n aria-label='Select Appointment Type'\r\n name='appointmentType'\r\n value={currentAppointmentType} \r\n onChange={(event) => handleAppointmentTypeChange(event.target.value)}\r\n style={{ minWidth: 200, backgroundColor: \"#ffffff\" }} >\r\n <MenuItem key='Video' value='0'>Video Call</MenuItem>\r\n <MenuItem key='Phone' value='1'>Phone Call</MenuItem>\r\n </Select>\r\n </Form.Group>\r\n </Col>\r\n :\r\n null\r\n }\r\n {currentStatus !== '' && props.type !== 'Referrer' ?\r\n <>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Status</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentStatus} onChange={(event) => handleStatusChange(event.target.value)}>\r\n <option value=\"Saved\">Saved</option>\r\n <option value=\"Hold\">On Hold</option>\r\n <option value=\"Sent\" disabled>Sent</option>\r\n <option value=\"Reminder\" disabled>Reminder</option>\r\n <option value=\"Registered\" disabled>Registered</option>\r\n <option value=\"Call\" disabled>Call</option>\r\n <option value=\"Called\" disabled>Called</option>\r\n <option value=\"Ready to Archive\" disabled>Ready to Archive</option>\r\n <option value=\"Archived\">Archived</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </>\r\n :\r\n null\r\n }\r\n </Row>\r\n {props.type === 'Referrer' || props.type === 'Admin' ? \r\n <>\r\n <h5>Referrer Details</h5>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n {props.type === 'Admin' ?\r\n <Form.Label>Referrer First Name</Form.Label>\r\n :\r\n <Form.Label>Your First Name</Form.Label>\r\n }\r\n <Form.Control type=\"text\" name=\"profileReferrerFirstName\" value={currentReferrerFirstName} onChange={(event) => setcurrentReferrerFirstName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n {props.type === 'Admin' ?\r\n <Form.Label>Referrer Surname</Form.Label>\r\n :\r\n <Form.Label>Your Surname</Form.Label>\r\n }\r\n <Form.Control type=\"text\" name=\"profileReferrerSurname\" value={currentReferrerSurname} onChange={(event) => setcurrentReferrerSurname(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n {props.type === 'Admin' ?\r\n <Form.Label>Referrer Mobile Phone</Form.Label>\r\n :\r\n <Form.Label>Your Mobile Phone</Form.Label>\r\n }\r\n <Form.Control type=\"text\" name=\"profileReferrerMobile\" value={currentReferrerMobile} onChange={(event) => setcurrentReferrerMobile(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n {props.type === 'Admin' ?\r\n <Form.Label>Referrer Email Address</Form.Label>\r\n :\r\n <Form.Label>Your Email Address</Form.Label>\r\n }\r\n <Form.Control type=\"text\" name=\"profileReferrerEmail\" value={currentReferrerEmail} onChange={(event) => setcurrentReferrerEmail(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {props.type === 'Admin' && currentStatus!=='' ? \r\n <>\r\n <h5>Referrer Account Details</h5>\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Name </Form.Label>\r\n <Form.Control type=\"text\" name=\"referrername\" value={currentReferrerName} readOnly />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Email </Form.Label>\r\n <Form.Control type=\"text\" name=\"referreremail\" value={currentReferrerOrgEmail} readOnly />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Organisation</Form.Label>\r\n <Form.Control type=\"text\" name=\"referrerorganisationname\" value={currentReferrerOrganisationName} readOnly />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n {props.type === 'Admin' ?\r\n <>\r\n <h5>Source Referrer</h5>\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label style={{ color: 'green', fontWeight: 500 }}>Select Referrer (or enter a new one below)</Form.Label> \r\n <Autocomplete\r\n id=\"sourceReferrerLookUp\"\r\n variant=\"outlined\"\r\n options={source}\r\n getOptionLabel={(option) => option.description }\r\n getOptionSelected={(option, value) => getSourceOption(option, value)}\r\n value={currentSource}\r\n onChange={(event, newValue) => loadSource(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"SourceSelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>First Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentSourceFirstname\" value={currentSource ? currentSource.firstname : ''} onChange={(event) => setcurrentSource({...currentSource, firstname: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Surname</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentSourceSurname\" value={currentSource ? currentSource.surname : ''} onChange={(event) => setcurrentSource({...currentSource, surname: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Organisation</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentSourceOrganisationName\" value={currentSource ? currentSource.organisationname : ''} onChange={(event) => setcurrentSource({...currentSource, organisationname: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentSourcePhone\" value={currentSource ? currentSource.phone : ''} onChange={(event) => setcurrentSource({...currentSource, phone: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Email</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentSourceEmail\" value={currentSource ? currentSource.email : ''} onChange={(event) => setcurrentSource({...currentSource, email: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n </>\r\n :\r\n null\r\n }\r\n </>\r\n :\r\n null\r\n }\r\n </Tab>\r\n <Tab eventKey=\"files\" title=\"Files\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}>\r\n {currentid ? \r\n <>\r\n {(props.type === 'Referrer' && (currentStatus === 'Saved' || currentStatus === 'Hold' || currentStatus === '' || currentStatus === 'Sent' || currentStatus === 'Reminder' || currentStatus === 'Called' || currentStatus === 'Call' || currentStatus === 'Ready to Archive')) || (props.type !== 'Referrer') ?\r\n <>\r\n {props.type === 'Referrer' ?\r\n <Alert severity=\"info\" variant=\"light\" style={{ backgroundColor: \"#DAF3F4\", borderColor: \"#CEE6E7\", marginBottom: 15 }}>\r\n <AlertTitle>{referrerAlert}</AlertTitle>\r\n </Alert>\r\n :\r\n null\r\n }\r\n <Files type=\"ClientRegistration\" pkid={currentid} vertical={true} inviteStatus={currentStatus}/>\r\n </>\r\n :\r\n null\r\n }\r\n </> \r\n : \r\n <>\r\n After you have saved this invite to your client please upload MHCP and other relevant documents here.\r\n </>\r\n } \r\n </Tab>\r\n <Tab eventKey=\"notes\" title=\"Notes\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}> \r\n {currentid ? \r\n <>\r\n {(props.type === 'Referrer' && (currentStatus === 'Saved' || currentStatus === 'Hold' || currentStatus === '' || currentStatus === 'Sent' || currentStatus === 'Call' || currentStatus === 'Called' || currentStatus === 'Reminder' || currentStatus === 'Ready to Archive')) || (props.type !== 'Referrer') ?\r\n <>\r\n <Notes type=\"ClientRegistration\" \r\n pkid={currentid} \r\n firstName={currentPreferredName && currentPreferredName.length > 2 ? currentPreferredName : currentFirstName} \r\n preferredName={currentPreferredName}\r\n surname={currentSurname}\r\n referrerEmail={currentReferrerEmail} \r\n faxGP={currentReferralGPPracticeFax}\r\n gpEmail={currentReferralGPPracticeEmail}\r\n gpName={currentReferralGPName}\r\n />\r\n </>\r\n :\r\n null\r\n }\r\n </> \r\n : \r\n <>\r\n After you have saved this invite you can make notes etc. here.\r\n </>\r\n } \r\n </Tab>\r\n\r\n <Tab eventKey=\"tags\" title=\"Tags\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}>\r\n <Row>\r\n <Col md=\"8\">\r\n <Tags args={{ \r\n context: 'Client_Registration', \r\n tagValues: tagValues, \r\n setTagValues: setTagValues, \r\n display: { layout: 'form', box: true },\r\n readOnly: false }} />\r\n </Col>\r\n </Row> \r\n </Tab>\r\n <Tab eventKey=\"referral\" title=\"Referral\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}>\r\n {(currentid && props.type === 'Admin') ? \r\n <ReferralMaintenance \r\n viewerFullName={`${currentFirstName} ${currentSurname}`}\r\n clientRegistrationID={currentid}\r\n clientiD={null}\r\n type={'clientregistration'}\r\n /> \r\n :\r\n null\r\n }\r\n </Tab>\r\n </Tabs>\r\n </Modal.Body>\r\n <Modal.Footer className=\"invite-modal\">\r\n <Button variant=\"secondary\" onClick={handleInvitationClose}>\r\n Close\r\n </Button>\r\n {(props.type === 'Referrer' && (currentStatus === 'Saved' || currentStatus === 'Hold' || currentStatus === '')) || (props.type !== 'Referrer') ?\r\n <>\r\n {!viewedFilesUpload ?\r\n <>\r\n {currentStatus !== '' && currentStatus !== 'Saved' ?\r\n <>\r\n {currentStatus === 'Call' && props.type !== 'Referrer' ?\r\n <>\r\n <Button variant=\"success\" onClick={() => saveInvite('Called')}>\r\n Called\r\n </Button>\r\n </>\r\n :\r\n null\r\n }\r\n <Button variant=\"primary\" onClick={() => saveInvite('Update')}>\r\n Next >\r\n </Button>\r\n </>\r\n :\r\n <>\r\n <Button variant=\"primary\" onClick={() => saveInvite('Saved')} style={{ color: \"black\", fontWeight: 500, background: \"#FFFACD\" }}>\r\n Save & Next >\r\n </Button>\r\n <Button variant=\"primary\" onClick={() => saveInvite('Sent')} >\r\n Send & Next >\r\n </Button>\r\n </>\r\n }\r\n </>\r\n : \r\n null\r\n }\r\n {viewedFilesUpload ?\r\n <>\r\n {currentStatus !== '' && currentStatus !== 'Saved' ?\r\n <>\r\n <Button variant=\"success\" onClick={() => saveInvite('Update')}>\r\n Update\r\n </Button>\r\n </>\r\n :\r\n <>\r\n {props.type === 'Referrer' ?\r\n <Button variant=\"success\" onClick={() => saveInviteConfirmation('Sent')}>\r\n Send\r\n </Button>\r\n :\r\n <Button variant=\"success\" onClick={() => saveInvite('Sent')}>\r\n Send\r\n </Button>\r\n }\r\n </>\r\n } \r\n </> \r\n : \r\n null\r\n }\r\n </>\r\n :\r\n null\r\n }\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showProvider} onHide={handleProviderClose} dialogClassName=\"invite-modal\">\r\n <Modal.Header closeButton className=\"invite-modal\">\r\n <Modal.Title>Available Providers</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"invite-modal\">\r\n <Grid item md={12} style={{ height: 710, width: \"100%\", overflowY: \"scroll\", paddingLeft: 20, backgroundColor: \"rgb(255,255,255)\" }}>\r\n {currentProviderType !== 'Supervision' ?\r\n <Masonry\r\n breakpointCols={isMobile ? 1 : 3}\r\n className=\"my-masonry-grid\"\r\n columnClassName=\"my-masonry-grid_column\">\r\n {providers && providers.map((row, index) => {\r\n return (\r\n <Card className={classes.root} variant=\"outlined\" key={index}>\r\n <CardMedia\r\n className={classes.media}\r\n image={`https://${storageAccountName}.blob.core.windows.net/${containerName}/${row.imageURL}`}\r\n title=\"Psychologist\"\r\n />\r\n <CardContent>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item sm={12}>\r\n <Typography variant=\"h5\" component=\"h3\">\r\n {row.fullname} (Next available: {row.nextAvailable})\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n {(currentProviderType !== 'GP' && currentProviderType !== 'Provisional') ?\r\n <>\r\n {currentPaymentType === 'Full Fee' ?\r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={6} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={6} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {row.hourlyRateOverrideGap !== '0' ? row.hourlyRateOverrideGap : row.standardFeeOutOfPocket }\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={12}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay {row.hourlyrate} on the day\r\n </Typography>\r\n <Typography>\r\n Receive back {row.hourlyRateOverrideRebate !== '0' ? row.hourlyRateOverrideRebate : row.medicareRebate} from Medicare)\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n {currentPaymentType === 'Reduced Gap' ?\r\n <>\r\n {row.isReducedFee === 'Y' ? \r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={6} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600, textAlign: \"top\"}}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={6} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {row.reducedFeeOverrideGap && row.reducedFeeOverrideGap !== '0' ? row.reducedFeeOverrideGap : row.reducedFeeOutOfPocket }\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={12}>\r\n { row.reducedFee === '0' ?\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay $0 on the day\r\n </Typography>\r\n :\r\n <>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay {row.reducedFee} on the day\r\n </Typography>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n Receive back {row.reducedFeeOverrideRebate && row.reducedFeeOverrideRebate !== '0' ? row.reducedFeeOverrideRebate : row.medicareRebate} from Medicare\r\n </Typography>\r\n </>\r\n }\r\n </Grid>\r\n { row.reducedFee !== '0' ?\r\n <Grid item sm={12}>\r\n <Typography variant=\"subtitle2\" style={{ fontWeight:300, fontStyle: 'italic' }}>\r\n Note this provider offers some flexibility, depending on client circumstances\r\n </Typography>\r\n </Grid>\r\n :\r\n null\r\n }\r\n </Grid>\r\n </>\r\n :\r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={6} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600, textAlign: \"top\" }}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={6} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {row.reducedFeeOverrideGap && row.reducedFeeOverrideGap !== '0' ? row.reducedFeeOverrideGap : row.reducedFeeOutOfPocket }\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={12} >\r\n { row.reducedFee === '0' ?\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay $0 on the day\r\n </Typography>\r\n :\r\n <>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay {row.reducedFee} on the day\r\n </Typography>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n Receive back {row.reducedFeeOverrideRebate && row.reducedFeeOverrideRebate !== '0' ? row.reducedFeeOverrideRebate : row.medicareRebate} from Medicare\r\n </Typography>\r\n </>\r\n }\r\n </Grid>\r\n </Grid>\r\n </>\r\n }\r\n </>\r\n :\r\n null\r\n }\r\n <Grid container style={{ marginBottom: 15, marginTop: 10 }}>\r\n {row.areasOfInterest.map((row) => {return (<Chip size=\"small\" key={row} variant=\"outlined\" label={row} style={{ margin: 2 }} />)})}\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n <Typography className={classes.pos} color=\"textSecondary\">\r\n <br />\r\n </Typography>\r\n <Grid container>\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={row.bio.substring(0,700)} />\r\n {row.bio.length > 700 ?\r\n <>\r\n ...\r\n <Badge variant=\"secondary\" onClick={()=>moreProviderBio(row.fullname, row.bio)} style={{ marginRight: 5, cursor: 'pointer' }}>\r\n more\r\n </Badge>\r\n </>\r\n :\r\n null\r\n }\r\n </Typography>\r\n </Grid>\r\n <br />\r\n {(currentPaymentType === 'Bulk Billed' && row.bulkBillingAvailable === '0') ?\r\n <Button variant=\"secondary\">\r\n Not Available to Bulk Bill\r\n </Button>\r\n :\r\n <Button onClick={()=>selectProvider(row)}>Select</Button>\r\n }\r\n </CardContent>\r\n {/* This hides the AOI requiring a click to view them, Megan now wants AOI above the bio - hence it has been commented out \r\n <CardActions disableSpacing>\r\n <IconButton\r\n className={clsx(classes.expand, {\r\n [classes.expandOpen]: expanded,\r\n })}\r\n onClick={() => handleExpandClick(row.id)}\r\n aria-expanded={expanded}\r\n aria-label=\"show more\"\r\n >\r\n <ExpandMoreIcon />\r\n </IconButton>\r\n </CardActions>\r\n <Collapse in={(expanded === row.id)} timeout=\"auto\" unmountOnExit>\r\n <CardContent>\r\n <Typography variant=\"body2\" component=\"div\"> \r\n {row.areasOfInterest.map((row, index) => {return (<Chip size=\"small\" variant=\"outlined\" key={index} label={row} style={{ margin: 2 }} />)})}\r\n </Typography>\r\n </CardContent>\r\n </Collapse> */}\r\n </Card>\r\n )\r\n })\r\n }\r\n </Masonry>\r\n :\r\n <Masonry\r\n breakpointCols={isMobile ? 1 : 3}\r\n className=\"my-masonry-grid\"\r\n columnClassName=\"my-masonry-grid_column\">\r\n {providers && providers.map((row, index) => {\r\n return (\r\n <>\r\n <Card className={classes.root} variant=\"outlined\" key={index}>\r\n <CardMedia\r\n className={classes.media}\r\n image={`https://${storageAccountName}.blob.core.windows.net/${containerName}/${row.imageURL}`}\r\n title=\"Psychologist\"\r\n />\r\n <CardContent>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item sm={12}>\r\n <Typography variant=\"h5\" component=\"h3\">\r\n {row.fullname} (Next available: {row.nextAvailable})\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={8} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={4} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {row.supervisorHourlyRate}\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n <Typography className={classes.pos} color=\"textSecondary\">\r\n <br />\r\n </Typography>\r\n <Grid container>\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={row.supervisorBio.substring(0,700)} />\r\n {row.supervisorBio.length > 700 ?\r\n <>\r\n ...\r\n <Badge variant=\"secondary\" onClick={()=>moreProviderBio(row.fullname, row.supervisorBio)} style={{ marginRight: 5, cursor: 'pointer' }}>\r\n more\r\n </Badge>\r\n </>\r\n :\r\n null\r\n }\r\n </Typography>\r\n </Grid>\r\n <br />\r\n </CardContent>\r\n <CardActions disableSpacing>\r\n <Button onClick={()=>selectProvider(row)}>Select</Button>\r\n </CardActions>\r\n <CardContent>\r\n <Typography variant=\"h6\" component=\"h3\">\r\n Available For\r\n </Typography>\r\n <Row>\r\n <List className={classes.root}>\r\n {supervisionAreas.map(sRow => {\r\n const labelId = `checkbox-list-label-${sRow.id}`;\r\n var isChecked = row.supervisorAreas.includes(sRow.id);\r\n return (\r\n <ListItem key={sRow.id} role={undefined} dense button >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{sRow.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n })}\r\n </List>\r\n </Row>\r\n <Typography variant=\"h6\" component=\"h3\" style={{paddingTop:20}}>\r\n Endorsed In \r\n </Typography>\r\n <Row>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {endorsedSupervisionAreas.map(sRow => {\r\n var isChecked = row.supervisorAreas.includes(sRow.id);\r\n const labelId = `checkbox-list-label-${sRow.id}`;\r\n if (isChecked) {\r\n return(\r\n <ListItem key={sRow.id} role={undefined} dense button >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{sRow.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n )\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Col>\r\n </Row>\r\n </CardContent>\r\n </Card>\r\n </>\r\n )\r\n })}\r\n </Masonry>\r\n }\r\n </Grid>\r\n\r\n </Modal.Body>\r\n <Modal.Footer className=\"invite-modal\">\r\n <Button variant=\"secondary\" onClick={handleProviderClose}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showConfirmation} onHide={handleConfirmationClose} dialogClassName=\"invite-modal-dialog-confirmation\">\r\n <Modal.Header closeButton className=\"invite-modal-confirmation\">\r\n <Modal.Title>MHCP Confirmation</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"invite-modal-confirmation\">\r\n <Grid item md={12}>\r\n <p style={{ fontWeight: 600 }}>If you have the clients' MHCP have you uploaded it?</p>\r\n </Grid>\r\n </Modal.Body>\r\n <Modal.Footer className=\"invite-modal-confirmation\">\r\n <Button variant=\"secondary\" onClick={handleConfirmationClose}>\r\n < Back\r\n </Button>\r\n <Button variant=\"success\" onClick={() => saveInvite('Sent')}>\r\n Send\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <div style={{border: \"solid rgb(215, 215, 215) 1px\", borderRadius: \"4px\", backgroundColor: \"white\"}}>\r\n \r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n />\r\n </div>\r\n\r\n <Modal show={showProviderBio} onHide={()=>setShowProviderBio(false)} dialogClassName=\"invite-modal\" >\r\n <Modal.Header closeButton className=\"invite-modal\">\r\n <Modal.Title>{providerBioFullName}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"invite-modal\" style={{ backgroundColor: 'rgb(245,245,245)' }}>\r\n <Grid container >\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={providerBioBio} />\r\n </Typography>\r\n </Grid>\r\n </Modal.Body>\r\n <Modal.Footer className=\"invite-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowProviderBio(false)} className=\"lightButtonOutlinedLarge\">\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n </>\r\n )\r\n}\r\n\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { Button, Form, InputGroup } from \"react-bootstrap\";\r\nimport { Paper, Grid } from '@material-ui/core';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\n\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\nimport KTUtil from \"../../../../_metronic/_assets/js/util\";\r\n\r\nexport default function MedicalPractitioners() {\r\n\r\n\r\n const dispatch = useDispatch()\r\n const [searchTerm, setSearchTerm] = useState('')\r\n const [filterType, setFilterType] = useState('Referring GP')\r\n // var [show, setShow] = useState(false)\r\n\r\n useEffect( () => { dispatch(Admin.actions.fetchMedicalPractitioners()) }, [dispatch] )\r\n\r\n const practitioners = useSelector(state => state.admin.MedicalPractitioners) \r\n const filteredPractitioners = practitioners.filter(practice => ((practice.type === filterType || filterType === 'All') && (practice.fullname.toLowerCase().search(searchTerm.toLowerCase()) > -1 || searchTerm.length === 0)) )\r\n\r\n const loadNew = () => {\r\n // setcurrentMedicalPractitionerID(null);\r\n // setcurrentFirstname('');\r\n // setcurrentSurname('');\r\n // setcurrentProviderNumber('');\r\n // setcurrentMobilePhone('');\r\n // setcurrentSalutation('');\r\n // setcurrenttype('');\r\n // setShow(true);\r\n }\r\n\r\n if (KTUtil.isEmpty(practitioners))\r\n {\r\n // return('No Interest Psychologists Found');\r\n return(null);\r\n } \r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', hide: true },\r\n { field: 'fullname', headerName: 'Name', width: 230 },\r\n { field: 'providernumber', headerName: 'Provider No.', width: 120 },\r\n { field: 'phone', headerName: 'Phone', width: 150 },\r\n { field: 'status', headerName: 'Status', width: 80 }, \r\n { field: 'created', type: 'date', headerName: 'Created', width: 100 }\r\n ];\r\n\r\n const handleSearch = (event) => {\r\n const searchTerm = event.target.value \r\n setSearchTerm(searchTerm)\r\n }\r\n\r\n return (\r\n <>\r\n <h4>\r\n Medical Practitioners\r\n </h4>\r\n\r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10 }}>\r\n\r\n <Grid item style={{ marginTop: 2, marginLeft: 10 }}>\r\n <Grid container justifyContent=\"space-between\" style={{ padding: 0 }}>\r\n <Grid item md={6} style={{ paddingRight: 10 }}> \r\n <InputGroup size=\"sm\">\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(event) => handleSearch(event)}\r\n autoComplete='OFF'\r\n />\r\n </InputGroup>\r\n </Grid>\r\n <Grid item md={6}> \r\n <Form.Control as=\"select\" size=\"sm\" defaultValue={filterType} onChange={(event) => setFilterType(event.target.value)}>\r\n <option value=\"All\">All</option>\r\n <option value=\"Referring GP\">Referring GP</option>\r\n <option value=\"Client GP\">Client GP</option>\r\n </Form.Control>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => loadNew()}>\r\n Add Practitioner\r\n </Button>\r\n </Grid>\r\n\r\n </Grid>\r\n </Paper>\r\n\r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={filteredPractitioners} columns={columns} pageSize={10} rowsPerPageOptions={[10]} checkboxSelection={false} />\r\n </Paper>\r\n\r\n <div style={{border: \"solid rgb(215, 215, 215) 1px\", borderRadius: \"4px\", backgroundColor: \"white\"}}>\r\n \r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n />\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { Button, Modal, Form, Row, Col, InputGroup } from \"react-bootstrap\";\r\nimport { Paper, Grid } from '@material-ui/core';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\n\r\nimport PlacesAutoComplete from \"../../../components/AddressAutoComplete\";\r\n\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\nimport KTUtil from \"../../../../_metronic/_assets/js/util\";\r\n\r\nexport default function MedicalPractices() {\r\n\r\n const dispatch = useDispatch()\r\n const [searchTerm, setSearchTerm] = useState('')\r\n const [filterType, setFilterType] = useState('Psychologist')\r\n var [show, setShow] = useState(false)\r\n\r\n \r\n useEffect( () => { dispatch(Admin.actions.fetchMedicalPractices({ type: 'All' })) }, [dispatch] )\r\n const medicalPractices = useSelector(state => state.admin.MedicalPractices.All)\r\n const filteredMedicalPractices = medicalPractices.filter(practice => ((practice.practiceType === filterType || filterType === 'All') && (practice.practicename.toLowerCase().search(searchTerm.toLowerCase()) > -1 || searchTerm.length === 0)) )\r\n\r\n function handleClose() {\r\n setShow(false);\r\n } \r\n\r\n var [currentMedicalPracticeID, setcurrentMedicalPracticeID] = useState(null);\r\n var [currentID, setcurrentID] = useState(null);\r\n var [currentpracticename, setcurrentpracticename] = useState('')\r\n var [currentAbn, setcurrentAbn] = useState('');\r\n var [currentPhone, setcurrentPhone] = useState('');\r\n var [currentFax, setcurrentFax] = useState('');\r\n var [currentfulladdress, setcurrentfulladdress] = useState('');\r\n var [currentEmail, setcurrentEmail] = useState('');\r\n var [currentWebsite, setcurrentWebsite] = useState('');\r\n var [currentLogoURL, setcurrentLogoURL] = useState('');\r\n var [currentPracticeType, setcurrentPracticeType] = useState('');\r\n var [currentPostCode, setcurrentPostCode] = useState('');\r\n var [currentLongitude, setcurrentLongitude] = useState('');\r\n var [currentLatitude, setcurrentLatitude] = useState('');\r\n\r\n const loadPractice = (thisPractice) => {\r\n setcurrentMedicalPracticeID(thisPractice.id);\r\n setcurrentID(thisPractice.id);\r\n setcurrentpracticename(thisPractice.practicename);\r\n setcurrentAbn(thisPractice.abn);\r\n setcurrentPhone(thisPractice.phone);\r\n setcurrentFax(thisPractice.fax);\r\n setcurrentEmail(thisPractice.email);\r\n setcurrentfulladdress(thisPractice.address1);\r\n setcurrentWebsite(thisPractice.website);\r\n setcurrentLogoURL(thisPractice.logoURL);\r\n setcurrentPracticeType(thisPractice.practiceType);\r\n setcurrentLongitude(thisPractice.longitude);\r\n setcurrentLatitude(thisPractice.latitude);\r\n setcurrentPostCode(thisPractice.postCode);\r\n // Load Form\r\n setShow(true);\r\n }\r\n\r\n const loadNew = () => {\r\n setcurrentMedicalPracticeID(0);\r\n setcurrentID(0);\r\n setcurrentpracticename('');\r\n setcurrentAbn('');\r\n setcurrentPhone('');\r\n setcurrentFax('');\r\n setcurrentEmail('');\r\n setcurrentfulladdress('');\r\n setcurrentWebsite('');\r\n setcurrentLogoURL('');\r\n setcurrentPostCode('');\r\n setcurrentLongitude('');\r\n setcurrentLatitude('');\r\n setcurrentPracticeType(filterType);\r\n setShow(true);\r\n }\r\n\r\n function putPractice() {\r\n if (process.env.REACT_APP_DEBUG) \r\n {\r\n console.log ('Saving to FormData');\r\n }\r\n // Move from useState to FormData \r\n const formData = new FormData();\r\n // Add fields \r\n formData.append('id',currentMedicalPracticeID);\r\n formData.append('abn',currentAbn);\r\n formData.append('practicename',currentpracticename);\r\n formData.append('phone',currentPhone);\r\n formData.append('address1',currentfulladdress);\r\n formData.append('email',currentEmail);\r\n formData.append('website',currentWebsite);\r\n formData.append('fax',currentFax);\r\n formData.append('logoURL',currentLogoURL);\r\n formData.append('practiceType',currentPracticeType);\r\n formData.append('postcode',currentPostCode);\r\n formData.append('longitude',currentLongitude);\r\n formData.append('latitude',currentLatitude);\r\n // Put update \r\n process.env.REACT_APP_DEBUG && console.log ('Putting (Update)');\r\n dispatch(Admin.actions.putMedicalPractice({formData}));\r\n // Close form\r\n setShow(false);\r\n }\r\n\r\n if (KTUtil.isEmpty(medicalPractices))\r\n {\r\n return(null);\r\n } \r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', hide: true },\r\n { field: 'practicename', headerName: 'Practice Name', width: 400,\r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadPractice(medicalPractices.find(practice => practice.id === params.row.id))} className=\"cell-Link\">\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), },\r\n { field: 'address1', headerName: 'Address', width: 400 },\r\n { field: 'createdOn', type: 'date', headerName: 'Created', width: 100 },\r\n \r\n ];\r\n\r\n const handleSearch = (event) => {\r\n const searchTerm = event.target.value \r\n setSearchTerm(searchTerm)\r\n }\r\n\r\n return (\r\n <>\r\n <h4>\r\n Medical Practices\r\n </h4>\r\n\r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10 }}>\r\n\r\n <Grid item style={{ marginTop: 2, marginLeft: 10 }}>\r\n <Grid container justifyContent=\"space-between\" style={{ padding: 0 }}>\r\n <Grid item md={6} style={{ paddingRight: 10 }}> \r\n <InputGroup size=\"sm\">\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(event) => handleSearch(event)}\r\n autoComplete='OFF'\r\n />\r\n </InputGroup>\r\n </Grid>\r\n <Grid item md={6}> \r\n <Form.Control as=\"select\" size=\"sm\" defaultValue={filterType} onChange={(event) => setFilterType(event.target.value)}>\r\n <option value=\"All\">All</option>\r\n <option value=\"Psychologist\">Psychologist</option>\r\n <option value=\"GeneralPractitioner\">General Practitioner</option>\r\n </Form.Control>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => loadNew()}>\r\n Add Practice\r\n </Button>\r\n </Grid>\r\n\r\n </Grid>\r\n </Paper>\r\n\r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={filteredMedicalPractices} columns={columns} pageSize={10} rowsPerPageOptions={[10]} checkboxSelection={false} sortModel={[{ field: 'practicename', sort: 'asc' }]} />\r\n </Paper>\r\n\r\n <Modal show={show} onHide={handleClose} dialogClassName=\"editprofile-modal\">\r\n <Modal.Header closeButton className=\"editprofile-modal\">\r\n <Modal.Title>Edit Practice</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"editprofile-modal\">\r\n <Form onSubmit={putPractice} autoComplete=\"OFF\">\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Clinic Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"practicename\" defaultValue={currentpracticename} onBlur={(event) => setcurrentpracticename(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>ABN</Form.Label>\r\n <Form.Control type=\"text\" name=\"abn\" defaultValue={currentAbn} onBlur={(event) => setcurrentAbn(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Contact Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"phone\" defaultValue={currentPhone} onBlur={(event) => setcurrentPhone(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Clinic Address</Form.Label>\r\n <PlacesAutoComplete \r\n currentID={currentID}\r\n currentfulladdress={currentfulladdress}\r\n setcurrentfulladdress = {setcurrentfulladdress}\r\n setcurrentLatitude = {setcurrentLatitude} \r\n setcurrentLongitude = {setcurrentLongitude}\r\n setcurrentPostCode = {setcurrentPostCode}\r\n />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Clinic Fax</Form.Label>\r\n <Form.Control type=\"text\" name=\"fax\" defaultValue={currentFax} onBlur={(event) => setcurrentFax(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Clinic Email</Form.Label>\r\n <Form.Control type=\"text\" name=\"phone\" defaultValue={currentEmail} onBlur={(event) => setcurrentEmail(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Website</Form.Label>\r\n <Form.Control type=\"text\" name=\"website\" defaultValue={currentWebsite} onBlur={(event) => setcurrentWebsite(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Logo</Form.Label>\r\n <Form.Control type=\"text\" name=\"logoURL\" defaultValue={currentLogoURL} onBlur={(event) => setcurrentLogoURL(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Type</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentPracticeType} onBlur={(event) => setcurrentPracticeType(event.target.value)}>\r\n <option value=\"Psychologist\">Psychologist</option>\r\n <option value=\"General Practitioner\">General Practitioner</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </Form>\r\n </Modal.Body>\r\n \r\n <Modal.Footer className=\"editprofile-modal\">\r\n <Button variant=\"secondary\" onClick={handleClose}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"primary\" onClick={putPractice}>\r\n Save\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <div style={{border: \"solid rgb(215, 215, 215) 1px\", borderRadius: \"4px\", backgroundColor: \"white\"}}>\r\n \r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n />\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\n","import React, { useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { DataGridPro } from '@mui/x-data-grid-pro';\r\nimport { Form, InputGroup } from \"react-bootstrap\";\r\nimport ClearIcon from '@material-ui/icons/Clear';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport * as Reference from \"../../../store/ducks/reference.duck\";\r\nimport { Grid, Paper, MenuItem, FormControl, Select, InputLabel, makeStyles } from '@material-ui/core';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n noBorder: {\r\n border: \"none\",\r\n },\r\n\tformControl: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: 120,\r\n\t},\r\n\tformControlWide: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: '100%',\r\n\t},\r\n\tselectEmpty: {\r\n\t marginTop: theme.spacing(2),\r\n\t},\r\n\tlabel: {\r\n\t backgroundColor: '#fff',\r\n\t paddingLeft: 3,\r\n\t paddingRight: 3,\r\n\t}\r\n }));\r\n\r\n\r\n\r\nexport default function SearchClientData(props) {\r\n\r\n const dispatch = useDispatch()\r\n const classes = useStyles();\r\n const filters = useSelector(state => state.admin.Filters)\r\n const searchResults = useSelector(state => state.admin.SearchResults)\r\n const areasOfInterestReference = useSelector(state => state.reference.AreasOfInterest)\r\n useEffect( () => { dispatch(Admin.actions.searchClientData() )}, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchAreasOfInterest('Psychologist')) }, [dispatch] )\r\n\r\n\r\n const searchSearchResults = (searchResult) => {\r\n if (searchResult.aoi && searchResult.aoi.length > 0) \r\n {\r\n var aoiArray = searchResult.aoi.split(',')\r\n }\r\n else\r\n {\r\n var aoiArray = null\r\n }\r\n //\r\n if( true\r\n\r\n && (!filters.searchClientDataType || filters.searchClientDataType === 'All' || (filters.searchClientDataType && searchResult.entity === filters.searchClientDataType))\r\n && (\r\n !filters.searchClientData \r\n || filters.searchClientData.length === 0 \r\n || (searchResult.searchString.length > 0 && searchResult.searchString.match(/^[a-zA-Z0-9&@ ]*$/) !== null && filters.searchClientData.split(\" \").every(word => searchResult.searchString.toLowerCase().search(word.toLowerCase()) !== -1))\r\n )\r\n && (\r\n filters.clientsAOI === 'All' \r\n || (aoiArray && aoiArray.length > 0 && aoiArray.some(issue => issue === filters.clientsAOI))\r\n )\r\n )\r\n {\r\n return searchResult\r\n } \r\n }\r\n\r\n const filteredSearchResults = searchResults.filter(searchResult => searchSearchResults(searchResult))\r\n \r\n const linkPage = (uri,id,entity) => {\r\n //\r\n if (entity === 'Clients')\r\n {\r\n dispatch(Admin.actions.setFilters({ filterName: 'clientsListLoadClientID', filterValue: id })) \r\n props.history.push(uri) \r\n }\r\n if (entity === 'ClientInvites')\r\n {\r\n // Client Invites are an issue as the default display only displays the last month so a random call to particular id will lead to problems thus the creation date is stored in the URL \r\n // console.log(uri)\r\n // console.log(new Date(uri))\r\n dispatch(Admin.actions.initialiseInvites())\r\n dispatch(Admin.actions.setFilters({ filterName: 'clientInviteStartDate', filterValue: new Date(uri) }))\r\n dispatch(Admin.actions.setFilters({ filterName: 'invitesListLoadInviteID', filterValue: id })) \r\n props.history.push('clientinvites') \r\n }\r\n // Note don't redirect to a particular id in faxes as faxes are not an entity (i.e. modal) \r\n if (entity === 'Faxes')\r\n {\r\n props.history.push('faxes') \r\n }\r\n }\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', width: 100, hide: true },\r\n { field: 'clientName', headerName: 'Name', width: 200 }, \r\n { field: 'searchString', headerName: 'Matching Field', width: 300 },\r\n { field: 'entity', headerName: 'Area', width: 120 },\r\n { field: 'status', headerName: 'Status', width: 120,\r\n cellClassName: (params) => params.row.status && params.row.status === 'Archived' ? 'flag-archive-cell' : 'flag-empty-cell',\r\n },\r\n { field: 'uri', headerName: 'Link', width: 120,\r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => linkPage(params.row.uri,params.row.id,params.row.entity)} className=\"cell-Link\" >\r\n View \r\n </div>\r\n </strong>\r\n ), \r\n }\r\n ];\r\n\r\n\r\n return (\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h4 style={{ marginBottom: 12 }}>Global Client Data Search</h4></Grid>\r\n </Grid>\r\n\r\n <Paper> \r\n <Grid container style={{ padding: 10 }}>\r\n <Grid item style={{ paddingLeft: 2, paddingRight: 10 }}>\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={filters.searchClientData}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'searchClientData', filterValue: event.target.value }))}\r\n autoComplete='OFF'\r\n style={{ maxWidth: 170, height: 35, backgroundColor: filters.clientsTerm.length > 0 ? 'rgb(250 239 195)' : 'white' }}\r\n />\r\n <InputGroup.Append onClick={() => dispatch(Admin.actions.setFilters({ filterName: 'searchClientData', filterValue: '' }))}>\r\n <InputGroup.Text>\r\n <ClearIcon fontSize=\"small\" style={{ color: filters.clientsTerm.length > 0 ? '#222222' : 'silver', marginLeft: -3 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Append>\r\n </InputGroup>\r\n </Grid>\r\n <Grid item style={{ paddingLeft: 2, paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl}>\r\n <InputLabel id=\"clientsStatus-label\" className={classes.label}>Area</InputLabel>\r\n <Select\r\n labelId=\"clientsStatus-label\"\r\n id=\"searchClientDataType\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\" }}\r\n value={filters.searchClientDataType}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'searchClientDataType', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n <MenuItem value='Clients'>Clients</MenuItem>\r\n <MenuItem value='ClientInvites'>Client Invites</MenuItem>\r\n <MenuItem value='Faxes'>Faxes</MenuItem> \r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl}>\r\n <InputLabel id=\"clientsAOI-label\" className={classes.label}>Area of Interest</InputLabel>\r\n <Select\r\n labelId=\"clientsAOI-label\"\r\n id=\"clientsAOI\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\" }}\r\n value={filters.clientsAOI}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'clientsAOI', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n {areasOfInterestReference.map(row => {\r\n return <MenuItem key={`key-${row.id}`} value={row.id}>{row.issue}</MenuItem>\r\n })}\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n\r\n\r\n <Paper style={{ height: 700 }}>\r\n <DataGridPro rows={filteredSearchResults} columns={columns} checkboxSelection={false} rowHeight={40} />\r\n </Paper>\r\n\r\n </>\r\n )\r\n}\r\n","import React, { useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { DataGridPro } from '@mui/x-data-grid-pro';\r\nimport { Form, InputGroup, Button } from \"react-bootstrap\";\r\nimport ClearIcon from '@material-ui/icons/Clear';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { Grid, Paper } from '@material-ui/core';\r\n\r\nexport default function SearchBookingData(props) {\r\n\r\n const dispatch = useDispatch()\r\n const filters = useSelector(state => state.admin.Filters)\r\n const searchResults = useSelector(state => state.admin.SearchBookingResults)\r\n useEffect( () => { dispatch(Admin.actions.searchBookingData() )}, [dispatch] )\r\n\r\n const updatePayment = (id,actionType) => {\r\n console.log('updatePayment',id,actionType)\r\n var payload = {\r\n id : id,\r\n rhcpaymentstatus : actionType,\r\n }\r\n // Save update \r\n dispatch(Admin.actions.updateRHCPaid(payload));\r\n }\r\n\r\n const searchSearchResults = (searchResult) => {\r\n //\r\n if( true\r\n\r\n && (!filters.searchClientDataType || filters.searchClientDataType === 'All' || (filters.searchClientDataType && searchResult.entity === filters.searchClientDataType))\r\n && (\r\n !filters.searchClientData \r\n || filters.searchClientData.length === 0 \r\n || (searchResult.searchString.length > 0 && searchResult.searchString.match(/^[a-zA-Z0-9&@ ]*$/) !== null && filters.searchClientData.split(\" \").every(word => searchResult.searchString.toLowerCase().search(word.toLowerCase()) !== -1))\r\n )\r\n )\r\n {\r\n return searchResult\r\n } \r\n }\r\n\r\n const filteredSearchResults = searchResults.filter(searchResult => searchSearchResults(searchResult))\r\n \r\n const linkPage = (uri,id,entity) => {\r\n //\r\n if (entity === 'Clients')\r\n {\r\n dispatch(Admin.actions.setFilters({ filterName: 'clientsListLoadClientID', filterValue: id })) \r\n props.history.push(uri) \r\n }\r\n }\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', width: 100 },\r\n { field: 'clientid', headerName: 'Client ID', width: 100, hide: true },\r\n { field: 'clientName', headerName: 'Name (Booking Date/Status)', width: 450 }, \r\n { field: 'searchString', headerName: 'Matching', width: 150 },\r\n { field: 'entity', headerName: 'Area', width: 120 },\r\n { field: 'status', headerName: 'Status', width: 120 },\r\n { field: 'paymenttype', headerName: 'Payment Type', width: 120, hide: true },\r\n { field: 'uri', headerName: 'Link', width: 120,\r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => linkPage(params.row.uri,params.row.clientid,params.row.entity)} className=\"cell-Link\" >\r\n View \r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'none', headerName: 'Actions', width: 270,\r\n renderCell: (params) => (\r\n <>\r\n {params.row.paymenttype === 'Contract' || params.row.paymenttype === 'EAP' ? \r\n <>\r\n {params.row.rhcpaymentstatus === 'Paid' ?\r\n <Button variant=\"secondary\" size=\"sm\" onClick={()=>updatePayment(params.row.id,'UnPaid')} style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#FFFACD\", marginRight: 14 }} >\r\n UnPay\r\n </Button>\r\n :\r\n <Button variant=\"primary\" size=\"sm\" onClick={()=>updatePayment(params.row.id,'Paid')} style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#FFFACD\", marginRight: 14 }} >\r\n Pay\r\n </Button>\r\n }\r\n </>\r\n : null\r\n }\r\n </>\r\n ) \r\n }\r\n ];\r\n\r\n\r\n return (\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h4 style={{ marginBottom: 12 }}>Global Client Booking Search</h4></Grid>\r\n </Grid>\r\n\r\n <Paper> \r\n <Grid container style={{ padding: 10 }}>\r\n <Grid item style={{ paddingLeft: 2, paddingRight: 10 }}>\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={filters.searchClientData}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'searchClientData', filterValue: event.target.value }))}\r\n autoComplete='OFF'\r\n style={{ maxWidth: 170, height: 35, backgroundColor: filters.clientsTerm.length > 0 ? 'rgb(250 239 195)' : 'white' }}\r\n />\r\n <InputGroup.Append onClick={() => dispatch(Admin.actions.setFilters({ filterName: 'searchClientData', filterValue: '' }))}>\r\n <InputGroup.Text>\r\n <ClearIcon fontSize=\"small\" style={{ color: filters.clientsTerm.length > 0 ? '#222222' : 'silver', marginLeft: -3 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Append>\r\n </InputGroup>\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n\r\n\r\n <Paper style={{ height: 700 }}>\r\n <DataGridPro rows={filteredSearchResults} columns={columns} checkboxSelection={false} rowHeight={40} />\r\n </Paper>\r\n\r\n </>\r\n )\r\n}\r\n","import React, { useEffect, useRef, useState } from 'react'\r\nimport Tooltip \tfrom '@material-ui/core/Tooltip'\r\nimport { Typography } from '@material-ui/core';\r\n\r\nconst RenderExpandableCell = (props) => {\r\n const [isOverflowed, setIsOverflow] = useState(false);\r\n const { value } = props;\r\n const textElementRef = useRef(null);\r\n\r\n const checkOverflow = () => {\r\n // Using getBoundingClientRect, instead of scrollWidth and clientWidth, to get width with fractional accuracy\r\n if (textElementRef.current)\r\n {\r\n const clientWidth = textElementRef.current.getBoundingClientRect().width;\r\n textElementRef.current.style.overflow = 'visible';\r\n const contentWidth = textElementRef.current.getBoundingClientRect().width;\r\n textElementRef.current.style.overflow = 'hidden';\r\n setIsOverflow(contentWidth > clientWidth);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n checkOverflow();\r\n window.addEventListener('resize', checkOverflow);\r\n return () => {\r\n window.removeEventListener('resize', checkOverflow);\r\n };\r\n }, []);\r\n\r\n return (\r\n <Tooltip title={<Typography fontSize={30}>{value}</Typography>} disableHoverListener={!isOverflowed}>\r\n <span\r\n ref={textElementRef}\r\n style={{\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n }}\r\n >\r\n {value}\r\n </span>\r\n </Tooltip>\r\n );\r\n};\r\n\r\nexport default RenderExpandableCell;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { Form, InputGroup } from \"react-bootstrap\";\r\nimport SearchIcon from '@material-ui/icons/Search';\r\n\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { Grid, Paper } from '@material-ui/core';\r\nimport RenderExpandableCell from \"../../../components/RenderExpandableCell\";\r\n\r\nexport default function Notifications(props) {\r\n\r\n const [searchTerm, setSearchTerm] = useState('')\r\n const notifications = useSelector(state => state.admin.ActivityFeed)\r\n const filteredNotifications = notifications.filter(notification => notification.label.toLowerCase().search(searchTerm.toLowerCase()) > -1 || searchTerm.length === 0 )\r\n\r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Admin.actions.fetchActivityFeed()) }, [dispatch] )\r\n\r\n const linkPage = (link,id) => {\r\n //\r\n dispatch(Admin.actions.setFilters({ filterName: 'clientsListLoadClientID', filterValue: id })) \r\n props.history.push(link ? link : '/dashboard') \r\n }\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', width: 100, hide: true },\r\n { field: 'clientID', headerName: 'ClientID', width: 100, hide: true },\r\n { field: 'label', headerName: 'Notification Description (Hover to View Note)', width: 500 , renderCell: (params) => (\r\n <RenderExpandableCell {...params} />)}, \r\n { field: 'created', headerName: 'Created', width: 150 }, \r\n { field: 'link', headerName: 'Link', width: 120,\r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => linkPage(params.row.link,params.row.clientID)} className=\"cell-Link\" >\r\n View Client\r\n </div>\r\n </strong>\r\n ), \r\n }\r\n\r\n ];\r\n\r\n const handleSearch = (event) => {\r\n const searchTerm = event.target.value \r\n setSearchTerm(searchTerm)\r\n }\r\n\r\n\r\n return (\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h4 style={{ marginBottom: 12 }}>Admin Notifications</h4></Grid>\r\n </Grid>\r\n\r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10 }}>\r\n <Grid item style={{ marginTop: 2, marginLeft: 10 }}>\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(event) => handleSearch(event)}\r\n autoComplete='OFF'\r\n />\r\n </InputGroup>\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n { notifications ? \r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={filteredNotifications} columns={columns} pageSize={10} checkboxSelection={false} rowHeight={40} />\r\n </Paper>\r\n : ('None')\r\n }\r\n\r\n </>\r\n )\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\n// import Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport { Form, InputGroup, Col } from \"react-bootstrap\";\r\nimport { Paper, Grid } from '@material-ui/core';\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\n\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport KTUtil from \"../../../../_metronic/_assets/js/util\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\nimport '../../../../_metronic/_assets/css/app.css';\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\nexport default function VerifyXero() {\r\n\r\n // In the world of confusion - please note the following\r\n //\r\n // Entering this window runs a simple process of validation all providers (psychologists) with Xero. \r\n // Those that cannot be found in Xero are displayed for follow up \r\n //\r\n // This process inserts/updates the paymentmethods table with the Xero Contact GUID (in Xero RHC Customers are called Contacts)\r\n //\r\n const dispatch = useDispatch()\r\n const [searchTerm, setSearchTerm] = useState('')\r\n const xerolinkfailures = useSelector(state => state.admin.XeroLinkFailures)\r\n const filteredxerolinkfailures = xerolinkfailures.filter(xerolinkfailures => (xerolinkfailures.fullname.toLowerCase().search(searchTerm.toLocaleLowerCase()) > -1 || searchTerm.length === 0))\r\n \r\n // Note this currently a put - not sure it will stay this way\r\n useEffect( () => { dispatch(Admin.actions.putXeroContactLink()) }, [dispatch] )\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', hide: true },\r\n { field: 'fullname', headerName: 'Provider Name', width: 230 },\r\n { field: 'email', headerName: 'Email', width: 350 },\r\n { field: 'mobilephone', headerName: 'MobilePhone', width: 200 },\r\n ];\r\n\r\n const handleSearch = (event) => {\r\n const searchTerm = event.target.value \r\n setSearchTerm(searchTerm)\r\n }\r\n\r\n if (KTUtil.isEmpty(xerolinkfailures))\r\n {\r\n return('Looking - Takes a few minutes to populate');\r\n } \r\n\r\n return (\r\n <>\r\n \r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10 }}>\r\n <Grid item style={{ marginTop: 2, marginLeft: 10 }}>\r\n <Grid container direction=\"row\">\r\n <Grid item>\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(event) => handleSearch(event)}\r\n autoComplete='OFF'\r\n />\r\n </InputGroup>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>These Providers need to be created in Xero or set as Inactive</Form.Label>\r\n </Form.Group>\r\n </Col>\r\n </Grid> \r\n </Grid>\r\n </Paper>\r\n\r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={filteredxerolinkfailures} columns={columns} pageSize={10} checkboxSelection={false} sortModel={[{ field: 'fullname', sort: 'desc' }]} />\r\n </Paper>\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n ) \r\n}\r\n\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\n// import Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport { Form, InputGroup, Col } from \"react-bootstrap\";\r\nimport { Paper, Grid } from '@material-ui/core';\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\n\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport KTUtil from \"../../../../_metronic/_assets/js/util\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\nimport '../../../../_metronic/_assets/css/app.css';\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\nexport default function VerifyXero() {\r\n\r\n // In the world of confusion - please note the following\r\n //\r\n // Entering this window runs a simple process of validation all providers (psychologists) with Xero. \r\n // Those that cannot be found in Xero are displayed for follow up \r\n //\r\n // This process inserts/updates the paymentmethods table with the Xero Contact GUID (in Xero RHC Customers are called Contacts)\r\n //\r\n const dispatch = useDispatch()\r\n const [searchTerm, setSearchTerm] = useState('')\r\n const xerondislinkfailures = useSelector(state => state.admin.XeroNDISLinkFailures)\r\n const filteredxerondislinkfailures = xerondislinkfailures.filter(xerondislinkfailures => (xerondislinkfailures.ndisplanmanagementprovider.toLowerCase().search(searchTerm.toLocaleLowerCase()) > -1 || searchTerm.length === 0))\r\n \r\n // Note this currently a put - not sure it will stay this way\r\n useEffect( () => { dispatch(Admin.actions.putXeroNDISContactLink()) }, [dispatch] )\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', hide: true },\r\n { field: 'ndisplanmanagementprovider', headerName: 'Plan Management Provider', width: 250 },\r\n { field: 'ndisemailforinvoices', headerName: 'Invoice Email', width: 350 },\r\n { field: 'supportcoordinator', headerName: 'Support Coordinator', width: 200 },\r\n { field: 'supportcoordinatorphone', headerName: 'Coordinator Phone', width: 200 },\r\n { field: 'ndiserror', headerName: 'Error', width: 450 },\r\n ];\r\n\r\n const handleSearch = (event) => {\r\n const searchTerm = event.target.value \r\n setSearchTerm(searchTerm)\r\n }\r\n\r\n if (KTUtil.isEmpty(xerondislinkfailures))\r\n {\r\n return('Looking - Takes a few minutes to populate');\r\n } \r\n\r\n return (\r\n <>\r\n \r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10 }}>\r\n <Grid item style={{ marginTop: 2, marginLeft: 10 }}>\r\n <Grid container direction=\"row\">\r\n <Grid item>\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(event) => handleSearch(event)}\r\n autoComplete='OFF'\r\n />\r\n </InputGroup>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>These NDIS Providers need to be created in Xero or removed from Active clients</Form.Label>\r\n </Form.Group>\r\n </Col>\r\n </Grid> \r\n </Grid>\r\n </Paper>\r\n\r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={filteredxerondislinkfailures} columns={columns} pageSize={10} checkboxSelection={false} sortModel={[{ field: 'ndisplanmanagementprovider', sort: 'desc' }]} />\r\n </Paper>\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n ) \r\n}\r\n\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\n\r\nimport { Grid, GridColumn, GridToolbar } from '@progress/kendo-react-grid';\r\n\r\nimport { process } from '@progress/kendo-data-query';\r\nimport { MuiPickersUtilsProvider, KeyboardDatePicker} from '@material-ui/pickers';\r\nimport { Grid as MGrid, makeStyles } from '@material-ui/core';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport DateFnsUtils from '@date-io/date-fns';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\n\r\nconst useStylesDatePicker = makeStyles({\r\n root: {\r\n \"& .MuiInputBase-root\": {\r\n height: 33,\r\n }\r\n }\r\n});\r\n\r\n\r\n// In the world of confusion - please note the following invoicing process \r\n//\r\n// Today we are billing per booking using the Services Table to define the prices - each booking has a billable type that is set (or defaulted) when a booking is made\r\n//\r\n// Process \r\n// \r\n// GatherBillable.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to email providers a list of those to be billed at the end of the month if still eliglible. \r\n// - Can toogle bookings to cancelled/noshow as needed \r\n// Invoices.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to create Invoices in Xero for these providers. \r\n// - This essentially a copy of GatherBillable though expect this will change at client acceptance occurs. \r\n// InvoiceLog.js - This is a searchable log of invoices/clients/providers \r\n// \r\n// PlatformPsychologist.js - Lists unbilled boookings \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Can toogle bookings to cancelled/noshow as needed //\r\n\r\nexport default function Invoices() \r\n{\r\n const dispatch = useDispatch()\r\n const classesDatePicker = useStylesDatePicker();\r\n const billableIntents = useSelector(state => state.admin.BillableIntents)\r\n const filters = useSelector(state => state.admin.Filters)\r\n useEffect( () => {\r\n dispatch(Admin.actions.fetchBillableIntents({ startDate: filters.geninvoiceStartDate, endDate: filters.geninvoiceEndDate, status: 'Invoicing'})) }, \r\n [dispatch, filters.geninvoiceStartDate, filters.geninvoiceEndDate] \r\n )\r\n\r\n const [dataState, setDataState] = useState({\r\n skip: 0,\r\n take: 20,\r\n sort: [{\r\n field: 'psychologistSurname',\r\n dir: 'asc'\r\n }],\r\n });\r\n\r\n const [dataResult, setDataResult] = useState(process(billableIntents, dataState)); \r\n const [prevBillableIntents, setPrevBillableIntents] = useState();\r\n\r\n useEffect( () => {\r\n if ((JSON.stringify(billableIntents) !== JSON.stringify(prevBillableIntents)) && billableIntents.length > 0)\r\n {\r\n // console.log('Refreshing Data')\r\n setPrevBillableIntents(billableIntents)\r\n setDataResult(process(billableIntents, dataState))\r\n // console.log('dataResult')\r\n // console.log(dataResult)\r\n }\r\n }, [prevBillableIntents, billableIntents, dataResult, dataState])\r\n\r\n // This is the expanded grid section \r\n const DetailComponent = props => {\r\n const dataItem = props.dataItem;\r\n return <div>\r\n <Grid style={{width: \"1000px\"}} \r\n data={dataItem.clients} \r\n >\r\n <GridColumn field=\"clientName\" title=\"Client Name\" width=\"220px\" />\r\n <GridColumn field=\"bookingDate\" title=\"Booking Date\" width=\"200px\" />\r\n <GridColumn field=\"service\" title=\"Service\" width=\"150px\" />\r\n <GridColumn field=\"subpaymenttype\" title=\"Sub\" width=\"100px\" />\r\n <GridColumn field=\"cost\" filter={\"numeric\"} title=\"Cost (exGST)\" width=\"120px\" />\r\n <GridColumn field=\"status\" filter={\"numeric\"} title=\"Status\" width=\"120px\" />\r\n </Grid> \r\n </div>;\r\n };\r\n\r\n function sendProviderEmail() \r\n {\r\n // console.log ('Generating Invoices in Xero for Psychologists');\r\n dispatch(Admin.actions.putCreateInvoices({ startDate: filters.geninvoiceStartDate, endDate: filters.geninvoiceEndDate}));\r\n }\r\n\r\n const dataStateChange = event => {\r\n setDataResult(process(billableIntents, event.dataState));\r\n setDataState(event.dataState);\r\n };\r\n\r\n const expandChange = event => {\r\n const isExpanded = event.dataItem.expanded === undefined ? event.dataItem.aggregates : event.dataItem.expanded;\r\n event.dataItem.expanded = !isExpanded;\r\n setDataResult({ ...dataResult});\r\n };\r\n\r\n\r\n return(\r\n <>\r\n <div>\r\n <h4>Select Period for the Providers to be Invoiced</h4>\r\n <MGrid container style={{ padding: 10 }}>\r\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\r\n <MGrid item style={{ paddingLeft: 2, paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"Start Date\"\r\n value={filters.geninvoiceStartDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'geninvoiceStartDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </MGrid>\r\n <MGrid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"End Date\"\r\n value={filters.geninvoiceEndDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'geninvoiceEndDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </MGrid>\r\n </MuiPickersUtilsProvider>\r\n </MGrid>\r\n\r\n <Grid\r\n style={{height: \"700px\",}}\r\n sortable={true}\r\n reorderable={true}\r\n pageable={{buttonCount: 4,pageSizes: true,}}\r\n data={dataResult} {...dataState} \r\n onDataStateChange={dataStateChange}\r\n detail={DetailComponent}\r\n expandField=\"expanded\"\r\n onExpandChange={expandChange}\r\n >\r\n <GridToolbar>\r\n <button title=\"General Invoices in Xero\" className=\"k-button k-primary\" onClick={sendProviderEmail}>\r\n Generate Invoices\r\n </button> \r\n </GridToolbar>\r\n <GridColumn field=\"psychologistName\" title=\"Name\" width=\"300px\" />\r\n <GridColumn field=\"psychologistEmail\" title=\"Email\" width=\"350px\" />\r\n <GridColumn field=\"xero\" title=\"Xero Link\" width=\"100px\" />\r\n <GridColumn field=\"total\" filter={\"numeric\"} title=\"Total Cost (exGST)\" width=\"200px\" />\r\n </Grid>\r\n </div>\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\n\r\nimport { Grid, GridColumn, GridToolbar } from '@progress/kendo-react-grid';\r\n\r\nimport { process } from '@progress/kendo-data-query';\r\nimport { MuiPickersUtilsProvider, KeyboardDatePicker} from '@material-ui/pickers';\r\nimport { Grid as MGrid, makeStyles } from '@material-ui/core';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport DateFnsUtils from '@date-io/date-fns';\r\n// import * as Reference from \"../../../store/ducks/reference.duck\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\n\r\nconst useStylesDatePicker = makeStyles({\r\n root: {\r\n \"& .MuiInputBase-root\": {\r\n height: 33,\r\n }\r\n }\r\n});\r\n\r\n\r\n// In the world of confusion - please note the following invoicing process \r\n//\r\n// Today we are billing per booking using the Services Table to define the prices - each booking has a billable type that is set (or defaulted) when a booking is made\r\n//\r\n// Process \r\n// \r\n// GatherBillable.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to email providers a list of those to be billed at the end of the month if still eliglible. \r\n// - Can toogle bookings to cancelled/noshow as needed \r\n// Invoices.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to create Invoices in Xero for these providers. \r\n// - This essentially a copy of GatherBillable though expect this will change at client acceptance occurs. \r\n// InvoiceLog.js - This is a searchable log of invoices/clients/providers \r\n// \r\n// PlatformPsychologist.js - Lists unbilled boookings \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Can toogle bookings to cancelled/noshow as needed //\r\n\r\nexport default function InvoicesContracts() \r\n{\r\n const dispatch = useDispatch()\r\n const classesDatePicker = useStylesDatePicker();\r\n const filters = useSelector(state => state.admin.Filters)\r\n const billableIntents = useSelector(state => state.admin.BillableIntentContracts)\r\n\r\n useEffect( () => {\r\n dispatch(Admin.actions.fetchBillableIntentsContract({ startDate: filters.geninvoiceStartDate, endDate: filters.geninvoiceEndDate, status: 'Unbilled', approved: 'Approved'})) }, \r\n [dispatch, filters.geninvoiceStartDate, filters.geninvoiceEndDate] \r\n )\r\n\r\n const [dataState, setDataState] = useState({\r\n skip: 0,\r\n take: 20,\r\n sort: [{\r\n field: 'psychologistName',\r\n dir: 'asc'\r\n }],\r\n });\r\n\r\n const [dataResult, setDataResult] = useState(process(billableIntents, dataState)); \r\n const [prevBillableIntents, setPrevBillableIntents] = useState();\r\n\r\n useEffect( () => {\r\n if ((JSON.stringify(billableIntents) !== JSON.stringify(prevBillableIntents)) && billableIntents.length > 0)\r\n {\r\n // console.log('Refreshing Data')\r\n setPrevBillableIntents(billableIntents)\r\n setDataResult(process(billableIntents, dataState))\r\n // console.log('dataResult')\r\n // console.log(dataResult)\r\n }\r\n }, [prevBillableIntents, billableIntents, dataResult, dataState])\r\n\r\n // This is the expanded grid section \r\n const DetailComponent = props => {\r\n const dataItem = props.dataItem;\r\n return <div>\r\n <Grid style={{width: \"1600px\"}} \r\n data={dataItem.clients} \r\n >\r\n <GridColumn field=\"clientName\" title=\"Client Name\" width=\"220px\" />\r\n <GridColumn field=\"providerName\" title=\"Provider Name\" width=\"220px\" />\r\n <GridColumn field=\"bookingDate\" title=\"Booking Date\" width=\"200px\" />\r\n <GridColumn field=\"service\" title=\"Service\" width=\"150px\" />\r\n <GridColumn field=\"cost\" filter={\"numeric\"} title=\"Cost (exGST)\" width=\"120px\" />\r\n <GridColumn field=\"status\" filter={\"numeric\"} title=\"Status\" width=\"80px\" />\r\n </Grid> \r\n </div>;\r\n };\r\n\r\n function sendProviderEmail() \r\n {\r\n //console.log ('Generating Invoices in Xero for Contracts');\r\n dispatch(Admin.actions.putCreateInvoicesContract({ startDate: filters.geninvoiceStartDate, endDate: filters.geninvoiceEndDate}));\r\n }\r\n\r\n\r\n\r\n const dataStateChange = event => {\r\n setDataResult(process(billableIntents, event.dataState));\r\n setDataState(event.dataState);\r\n };\r\n\r\n const expandChange = event => {\r\n const isExpanded = event.dataItem.expanded === undefined ? event.dataItem.aggregates : event.dataItem.expanded;\r\n event.dataItem.expanded = !isExpanded;\r\n setDataResult({ ...dataResult});\r\n };\r\n\r\n\r\n return(\r\n <>\r\n <div>\r\n <h4>Select Period for the Contracts to be Invoiced</h4>\r\n <MGrid container style={{ padding: 10 }}>\r\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\r\n <MGrid item style={{ paddingLeft: 2, paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"Start Date\"\r\n value={filters.geninvoiceStartDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'geninvoiceStartDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </MGrid>\r\n <MGrid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"End Date\"\r\n value={filters.geninvoiceEndDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'geninvoiceEndDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </MGrid>\r\n </MuiPickersUtilsProvider>\r\n </MGrid>\r\n\r\n <Grid\r\n style={{height: \"700px\",}}\r\n sortable={true}\r\n reorderable={true}\r\n pageable={{buttonCount: 4,pageSizes: true,}}\r\n data={dataResult} {...dataState} \r\n onDataStateChange={dataStateChange}\r\n detail={DetailComponent}\r\n expandField=\"expanded\"\r\n onExpandChange={expandChange}\r\n >\r\n <GridToolbar>\r\n <button title=\"General Invoices in Xero\" className=\"k-button k-primary\" onClick={sendProviderEmail}>\r\n Generate Invoices\r\n </button> \r\n </GridToolbar>\r\n <GridColumn field=\"psychologistName\" title=\"Name\" width=\"300px\" />\r\n <GridColumn field=\"psychologistEmail\" title=\"Email\" width=\"350px\" />\r\n <GridColumn field=\"xero\" title=\"Xero Link\" width=\"100px\" />\r\n <GridColumn field=\"total\" filter={\"numeric\"} title=\"Total Cost (exGST)\" width=\"300px\" />\r\n </Grid>\r\n </div>\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\n\r\nimport { Grid, GridColumn, GridToolbar } from '@progress/kendo-react-grid';\r\n\r\nimport { process } from '@progress/kendo-data-query';\r\nimport { MuiPickersUtilsProvider, KeyboardDatePicker} from '@material-ui/pickers';\r\nimport { Grid as MGrid, makeStyles } from '@material-ui/core';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport DateFnsUtils from '@date-io/date-fns';\r\n// import * as Reference from \"../../../store/ducks/reference.duck\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\n\r\nconst useStylesDatePicker = makeStyles({\r\n root: {\r\n \"& .MuiInputBase-root\": {\r\n height: 33,\r\n }\r\n }\r\n});\r\n\r\n\r\n// In the world of confusion - please note the following invoicing process \r\n//\r\n// Today we are billing per booking using the Services Table to define the prices - each booking has a billable type that is set (or defaulted) when a booking is made\r\n//\r\n// Process \r\n// \r\n// GatherBillable.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to email providers a list of those to be billed at the end of the month if still eliglible. \r\n// - Can toogle bookings to cancelled/noshow as needed \r\n// Invoices.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to create Invoices in Xero for these providers. \r\n// - This essentially a copy of GatherBillable though expect this will change at client acceptance occurs. \r\n// InvoiceLog.js - This is a searchable log of invoices/clients/providers \r\n// \r\n// PlatformPsychologist.js - Lists unbilled boookings \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Can toogle bookings to cancelled/noshow as needed //\r\n\r\nexport default function InvoicesNthQLDPHN() \r\n{\r\n const dispatch = useDispatch()\r\n const classesDatePicker = useStylesDatePicker();\r\n const filters = useSelector(state => state.admin.Filters)\r\n const billableIntents = useSelector(state => state.admin.BillableIntentContracts)\r\n\r\n useEffect( () => {\r\n dispatch(Admin.actions.fetchBillableIntentsNthQLDPHN({ startDate: filters.geninvoiceStartDate, endDate: filters.geninvoiceEndDate, status: 'Unbilled', approved: 'Approved'})) }, \r\n [dispatch, filters.geninvoiceStartDate, filters.geninvoiceEndDate] \r\n )\r\n\r\n const [dataState, setDataState] = useState({\r\n skip: 0,\r\n take: 20,\r\n sort: [{\r\n field: 'psychologistName',\r\n dir: 'asc'\r\n }],\r\n });\r\n\r\n const [dataResult, setDataResult] = useState(process(billableIntents, dataState)); \r\n const [prevBillableIntents, setPrevBillableIntents] = useState();\r\n\r\n useEffect( () => {\r\n if ((JSON.stringify(billableIntents) !== JSON.stringify(prevBillableIntents)) && billableIntents.length > 0)\r\n {\r\n // console.log('Refreshing Data')\r\n setPrevBillableIntents(billableIntents)\r\n setDataResult(process(billableIntents, dataState))\r\n // console.log('dataResult')\r\n // console.log(dataResult)\r\n }\r\n }, [prevBillableIntents, billableIntents, dataResult, dataState])\r\n\r\n // This is the expanded grid section \r\n const DetailComponent = props => {\r\n const dataItem = props.dataItem;\r\n return <div>\r\n <Grid style={{width: \"1600px\"}} \r\n data={dataItem.clients} \r\n >\r\n <GridColumn field=\"clientName\" title=\"Client Name\" width=\"220px\" />\r\n <GridColumn field=\"providerName\" title=\"Provider Name\" width=\"220px\" />\r\n <GridColumn field=\"bookingDate\" title=\"Booking Date\" width=\"200px\" />\r\n <GridColumn field=\"service\" title=\"Service\" width=\"150px\" />\r\n <GridColumn field=\"cost\" filter={\"numeric\"} title=\"Cost (exGST)\" width=\"120px\" />\r\n <GridColumn field=\"status\" filter={\"numeric\"} title=\"Status\" width=\"80px\" />\r\n </Grid> \r\n </div>;\r\n };\r\n\r\n function sendProviderEmail() \r\n {\r\n //console.log ('Generating Invoices in Xero for Contracts');\r\n dispatch(Admin.actions.putCreateInvoicesNthQLDPHN({ startDate: filters.geninvoiceStartDate, endDate: filters.geninvoiceEndDate}));\r\n }\r\n\r\n\r\n\r\n const dataStateChange = event => {\r\n setDataResult(process(billableIntents, event.dataState));\r\n setDataState(event.dataState);\r\n };\r\n\r\n const expandChange = event => {\r\n const isExpanded = event.dataItem.expanded === undefined ? event.dataItem.aggregates : event.dataItem.expanded;\r\n event.dataItem.expanded = !isExpanded;\r\n setDataResult({ ...dataResult});\r\n };\r\n\r\n\r\n return(\r\n <>\r\n <div>\r\n <h4>Select Period for the NthQLDPHN Contracts to be Invoiced</h4>\r\n <MGrid container style={{ padding: 10 }}>\r\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\r\n <MGrid item style={{ paddingLeft: 2, paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"Start Date\"\r\n value={filters.geninvoiceStartDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'geninvoiceStartDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </MGrid>\r\n <MGrid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"End Date\"\r\n value={filters.geninvoiceEndDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'geninvoiceEndDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </MGrid>\r\n </MuiPickersUtilsProvider>\r\n </MGrid>\r\n\r\n <Grid\r\n style={{height: \"700px\",}}\r\n sortable={true}\r\n reorderable={true}\r\n pageable={{buttonCount: 4,pageSizes: true,}}\r\n data={dataResult} {...dataState} \r\n onDataStateChange={dataStateChange}\r\n detail={DetailComponent}\r\n expandField=\"expanded\"\r\n onExpandChange={expandChange}\r\n >\r\n <GridToolbar>\r\n <button title=\"General Invoices in Xero\" className=\"k-button k-primary\" onClick={sendProviderEmail}>\r\n Generate Invoices\r\n </button> \r\n </GridToolbar>\r\n <GridColumn field=\"psychologistName\" title=\"Name\" width=\"300px\" />\r\n <GridColumn field=\"psychologistEmail\" title=\"Email\" width=\"350px\" />\r\n <GridColumn field=\"xero\" title=\"Xero Link\" width=\"100px\" />\r\n <GridColumn field=\"total\" filter={\"numeric\"} title=\"Total Cost (exGST)\" width=\"300px\" />\r\n </Grid>\r\n </div>\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\n\r\nimport { Grid, GridColumn, GridToolbar } from '@progress/kendo-react-grid';\r\n\r\nimport { process } from '@progress/kendo-data-query';\r\nimport { MuiPickersUtilsProvider, KeyboardDatePicker} from '@material-ui/pickers';\r\nimport { Grid as MGrid, makeStyles } from '@material-ui/core';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport DateFnsUtils from '@date-io/date-fns';\r\n// import * as Reference from \"../../../store/ducks/reference.duck\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\n\r\nconst useStylesDatePicker = makeStyles({\r\n root: {\r\n \"& .MuiInputBase-root\": {\r\n height: 33,\r\n }\r\n }\r\n});\r\n\r\n// In the world of confusion - please note the following invoicing process \r\n//\r\n// Today we are billing per booking using the Services Table to define the prices - each booking has a billable type that is set (or defaulted) when a booking is made\r\n//\r\n// Process \r\n// \r\n// GatherBillable.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to email providers a list of those to be billed at the end of the month if still eliglible. \r\n// - Can toogle bookings to cancelled/noshow as needed \r\n// Invoices.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to create Invoices in Xero for these providers. \r\n// - This essentially a copy of GatherBillable though expect this will change at client acceptance occurs. \r\n// InvoiceLog.js - This is a searchable log of invoices/clients/providers \r\n// \r\n// PlatformPsychologist.js - Lists unbilled boookings \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Can toogle bookings to cancelled/noshow as needed //\r\n\r\nexport default function InvoicesNDIS() \r\n{\r\n const dispatch = useDispatch()\r\n const classesDatePicker = useStylesDatePicker();\r\n const filters = useSelector(state => state.admin.Filters)\r\n const billableIntents = useSelector(state => state.admin.BillableIntentNDIS)\r\n\r\n const [dataState, setDataState] = useState({\r\n skip: 0,\r\n take: 20,\r\n sort: [{\r\n field: 'ndisPlanManagementProvider',\r\n dir: 'asc'\r\n }],\r\n });\r\n\r\n useEffect( () => {\r\n dispatch(Admin.actions.fetchBillableIntentsNDIS({ startDate: filters.geninvoiceStartDate, endDate: filters.geninvoiceEndDate, status: 'Unbilled', approved: 'Approved' })) }, \r\n [dispatch, filters.geninvoiceStartDate, filters.geninvoiceEndDate] \r\n )\r\n\r\n\r\n const [dataResult, setDataResult] = useState(process(billableIntents, dataState)); \r\n const [prevBillableIntents, setPrevBillableIntents] = useState();\r\n\r\n useEffect( () => {\r\n if ((JSON.stringify(billableIntents) !== JSON.stringify(prevBillableIntents)) && billableIntents.length > 0)\r\n {\r\n // console.log('Refreshing Data')\r\n setPrevBillableIntents(billableIntents)\r\n setDataResult(process(billableIntents, dataState))\r\n // console.log('dataResult')\r\n // console.log(dataResult)\r\n }\r\n }, [prevBillableIntents, billableIntents, dataResult, dataState])\r\n\r\n // This is the expanded grid section \r\n const DetailComponent = props => {\r\n const dataItem = props.dataItem;\r\n return <div>\r\n <Grid style={{width: 1600}} \r\n data={dataItem.clients} \r\n >\r\n <GridColumn field=\"clientName\" title=\"Client Name\" width=\"220px\" />\r\n <GridColumn field=\"providerName\" title=\"Provider Name\" width=\"220px\" />\r\n <GridColumn field=\"bookingDate\" title=\"Booking Date\" width=\"200px\" />\r\n <GridColumn field=\"service\" title=\"Service\" width=\"150px\" />\r\n <GridColumn field=\"cost\" filter={\"numeric\"} title=\"Cost (exGST)\" width=\"120px\" />\r\n <GridColumn field=\"status\" filter={\"numeric\"} title=\"Status\" width=\"80px\" />\r\n <GridColumn field=\"note\" title=\"Note\" width=\"200px\" />\r\n </Grid> \r\n </div>;\r\n };\r\n\r\n function sendProviderEmail() \r\n {\r\n //console.log ('Generating Invoices in Xero for NDIS');\r\n dispatch(Admin.actions.putCreateInvoicesNDIS({ startDate: filters.geninvoiceStartDate, endDate: filters.geninvoiceEndDate}));\r\n }\r\n\r\n\r\n\r\n const dataStateChange = event => {\r\n setDataResult(process(billableIntents, event.dataState));\r\n setDataState(event.dataState);\r\n };\r\n\r\n const expandChange = event => {\r\n const isExpanded = event.dataItem.expanded === undefined ? event.dataItem.aggregates : event.dataItem.expanded;\r\n event.dataItem.expanded = !isExpanded;\r\n setDataResult({ ...dataResult});\r\n };\r\n\r\n\r\n return(\r\n <>\r\n <div>\r\n <h4>Select Period for the NDIS Providers to be Invoiced (Do Not Use For bookings after 1/10/24)</h4>\r\n <MGrid container style={{ padding: 10 }}>\r\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\r\n <MGrid item style={{ paddingLeft: 2, paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"Start Date\"\r\n value={filters.geninvoiceStartDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'geninvoiceStartDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </MGrid>\r\n <MGrid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"End Date\"\r\n value={filters.geninvoiceEndDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'geninvoiceEndDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </MGrid>\r\n </MuiPickersUtilsProvider>\r\n </MGrid>\r\n <Grid\r\n style={{height: \"700px\",}}\r\n sortable={true}\r\n reorderable={true}\r\n pageable={{buttonCount: 4,pageSizes: true,}}\r\n data={dataResult} {...dataState} \r\n onDataStateChange={dataStateChange}\r\n detail={DetailComponent}\r\n expandField=\"expanded\"\r\n onExpandChange={expandChange}\r\n >\r\n <GridToolbar>\r\n <button title=\"General NDIS Invoices in Xero\" className=\"k-button k-primary\" onClick={sendProviderEmail}>\r\n Generate NDIS Invoices\r\n </button> \r\n </GridToolbar>\r\n <GridColumn field=\"ndisPlanManagementProvider\" title=\"Name\" width=\"300px\" />\r\n <GridColumn field=\"ndisEmailForInvoices\" title=\"Email\" width=\"350px\" />\r\n <GridColumn field=\"xero\" title=\"Xero Link\" width=\"100px\" />\r\n <GridColumn field=\"total\" filter={\"numeric\"} title=\"Total Cost (exGST)\" width=\"600px\" />\r\n </Grid>\r\n </div>\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n\r\n","import React, { useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { Form, InputGroup } from \"react-bootstrap\";\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport ClearIcon from '@material-ui/icons/Clear';\r\nimport { Paper, Grid, TextField } from '@material-ui/core';\r\nimport { format } from \"date-fns\";\r\n\r\n\r\nexport default function InvoiceLog(props) {\r\n\r\n const dispatch = useDispatch()\r\n\r\n const invoicelog = useSelector(state => state.admin.InvoiceLog)\r\n const filters = useSelector(state => state.admin.Filters)\r\n const registered = useSelector(state => state.admin.RegisteredPsychologists)\r\n const registeredWithClients = registered.filter(psychologist => psychologist.referralCount > 0)\r\n\r\n useEffect( () => { dispatch(Admin.actions.fetchInvoiceLog()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchRegistered()) }, [dispatch] )\r\n\r\n const searchInvoices = (invlog) => {\r\n if( true\r\n && (invlog.clientName.toLowerCase().search(filters.invoicelogTerm.toLowerCase()) > -1 || invlog.providerName.toLowerCase().search(filters.invoicelogTerm.toLowerCase()) > -1 || filters.invoicelogTerm.length === 0)\r\n && (!filters.invoicesPsychologist || (filters.invoicesPsychologist && invlog.psychologistid === filters.invoicesPsychologist.id))\r\n )\r\n {\r\n return invlog\r\n } \r\n }\r\n\r\n const filteredInvoiceLog = invoicelog.filter(invlog => searchInvoices(invlog))\r\n\r\n var cols = [\r\n { field: 'id', headerName: 'ID', hide: true },\r\n { field: 'invoiceDate', type: 'date', headerName: 'Date', flex: 1, renderCell: (params) => (format(new Date(params.value ? params.value : null), \"dd-MM-yyyy\"))},\r\n { field: 'providerName', headerName: 'Provider', flex: 2 }, \r\n { field: 'clientName', headerName: 'Client', flex: 2 }, \r\n { field: 'clientAddress', headerName: 'Address', flex: 2 }, \r\n { field: 'psychologistDate', type: 'datetime', headerName: 'Booking Date', flex: 1, renderCell: (params) => (format(new Date(params.value ? params.value : null), \"dd-MM-yyyy hh:mm aa\"))},\r\n { field: 'total', type: 'currency',headerName: 'Amount', flex: 0.7 },\r\n ]\r\n\r\n return(\r\n <>\r\n <Paper> \r\n <Grid container style={{ padding: 10 }}>\r\n <Grid item style={{ marginTop: 2, paddingLeft: 2 }} md={3}>\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={filters.invoicelogTerm}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'invoicelogTerm', filterValue: event.target.value }))}\r\n autoComplete='OFF'\r\n style={{ maxWidth: 170, height: 35, backgroundColor: filters.invoicelogTerm.length > 0 ? 'rgb(250 239 195)' : 'white' }}\r\n />\r\n <InputGroup.Append onClick={() => dispatch(Admin.actions.setFilters({ filterName: 'invoicelogTerm', filterValue: '' }))}>\r\n <InputGroup.Text>\r\n <ClearIcon fontSize=\"small\" style={{ color: filters.invoicelogTerm.length > 0 ? '#222222' : 'silver', marginLeft: -3 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Append>\r\n </InputGroup>\r\n </Grid>\r\n <Grid item style={{ marginTop: 2, paddingLeft: 10 }} md={9}>\r\n <Grid container>\r\n <Grid item>\r\n <Autocomplete\r\n id=\"searchPsychologist\"\r\n variant=\"outlined\"\r\n options={registeredWithClients}\r\n getOptionLabel={(option) => option.fullname}\r\n value={filters.invoicesPsychologist}\r\n onChange={(event, newValue) => dispatch(Admin.actions.setFilters({ filterName: 'invoicesPsychologist', filterValue: newValue }))}\r\n style={{ minWidth: 200, fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n label=\"Provider\"\r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"PsychologistSelector\"\r\n style={{ backgroundColor: \"white\", margin: 0, padding: 0, maxWidth: 200 }}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n <Paper style={{ height: 660 }}>\r\n <DataGrid \r\n rows={filteredInvoiceLog} \r\n columns={cols} \r\n pageSize={10} \r\n rowsPerPageOptions={[10]} \r\n checkboxSelection={false} \r\n sortModel={[{ field: 'invoiceDate', sort: 'asc' }]} />\r\n </Paper>\r\n </>\r\n )\r\n }\r\n\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { Button, Modal, Form, InputGroup, Row, Col, } from \"react-bootstrap\";\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport { Paper, Grid, FormControl, Select, InputLabel, MenuItem, makeStyles, TextField } from '@material-ui/core';\r\nimport DateFnsUtils from '@date-io/date-fns';\r\nimport { MuiPickersUtilsProvider, KeyboardDatePicker,} from '@material-ui/pickers';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport { hide } from '@popperjs/core';\r\nimport { set } from 'lodash';\r\n\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n noBorder: {\r\n border: \"none\",\r\n },\r\n\tformControl: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: 120,\r\n\t},\r\n\tformControlWide: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: '100%',\r\n\t},\r\n\tselectEmpty: {\r\n\t marginTop: theme.spacing(2),\r\n\t},\r\n\tlabel: {\r\n\t backgroundColor: '#fff',\r\n\t paddingLeft: 3,\r\n\t paddingRight: 3,\r\n\t}\r\n }));\r\n\r\n const useStylesDatePicker = makeStyles({\r\n root: {\r\n \"& .MuiInputBase-root\": {\r\n height: 33,\r\n }\r\n }\r\n });\r\n\r\nexport default function GatherBillableAll() \r\n{\r\n const dispatch = useDispatch()\r\n const classes = useStyles();\r\n const classesDatePicker = useStylesDatePicker();\r\n\r\n const billableIntentsAll = useSelector(state => state.admin.BillableIntentsAll)\r\n const registered = useSelector(state => state.admin.RegisteredPsychologists)\r\n const contracts = useSelector(state => state.admin.Contracts)\r\n const filters = useSelector(state => state.admin.Filters)\r\n const [searchTerm, setSearchTerm] = useState('')\r\n\r\n const initContract = () => {\r\n return { id:0, name: ''}\r\n }\r\n const [currentContract, setcurrentContract] = useState(initContract());\r\n const loadContract = (thisContract) => {\r\n setcurrentContract(thisContract ? thisContract : initContract())\r\n }\r\n\r\n\r\n useEffect( () => {\r\n dispatch(Admin.actions.fetchBillableIntentsAll({ startDate: filters.invoiceStartDate, endDate: filters.invoiceEndDate})) }, \r\n [dispatch, filters.invoiceStartDate, filters.invoiceEndDate] \r\n )\r\n useEffect( () => { dispatch(Admin.actions.fetchContracts()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchRegistered()) }, [dispatch] )\r\n\r\n\r\n const searchBillableIntentsAll = (billableIntent) => {\r\n if ( true\r\n // && (billableIntent => billableIntent.psychologistName.toLowerCase().search(searchTerm.toLowerCase()) > -1 || searchTerm.length === 0)\r\n && (billableIntent.clientName.toLowerCase().search(searchTerm.toLowerCase()) > -1 \r\n || billableIntent.psychologistName.toLowerCase().search(searchTerm.toLowerCase()) > -1 \r\n || billableIntent.bookingid.toString().search(searchTerm.toLowerCase()) > -1 \r\n || billableIntent.contractName.toLowerCase().search(searchTerm.toLowerCase()) > -1 \r\n || searchTerm.length === 0)\r\n && (!filters.clientsPsychologist || filters.clientsPsychologist === 'All' || (filters.clientsPsychologist && billableIntent.psychologistid === filters.clientsPsychologist.id)) \r\n && (!filters.clientsContract || filters.clientsContract === 'All' || (filters.clientsContract && billableIntent.contractid && billableIntent.contractid === filters.clientsContract.id)) \r\n && (!filters.bookingPaymentType || filters.bookingPaymentType === 'All' || (billableIntent.bookingPaymentType === filters.bookingPaymentType))\r\n && (!filters.invoiceStatus || filters.invoiceStatus === 'All' || (billableIntent.billingstatus === filters.invoiceStatus))\r\n && (!filters.bookingValidationStatus || filters.bookingValidationStatus === 'All' || (filters.bookingValidationStatus === 'Issue' && billableIntent.validationStatus && billableIntent.validationStatus.length > 0))\r\n )\r\n {\r\n return billableIntent\r\n } \r\n }\r\n \r\n const filteredbillableIntentsAll = billableIntentsAll.filter(billableIntent => searchBillableIntentsAll(billableIntent))\r\n const [showBooking, setShowBooking] = useState(false)\r\n const [clientName, setClientName] = useState()\r\n const [bookingID,setBookingID] = useState()\r\n const [bookingStatus,setBookingStatus] = useState()\r\n const [paymentType,setPaymentType] = useState()\r\n const [subPaymentType,setSubPaymentType] = useState()\r\n const [providerType, setProviderType] = useState()\r\n const [ndisPlanManagementProvider,setNDISPlanManagementProvider] = useState()\r\n const [ndisEmailForInvoices,setNDISEmailForInvoices] = useState()\r\n const [bookingNote,setBookingNote] = useState()\r\n const [approvalstatus,setApprovalStatus] = useState();\r\n const [rhcpaymentstatus,setRHCPaymentStatus] = useState();\r\n const [validationStatus, setValidationStatus] = useState()\r\n\r\n\r\n const loadBooking = (thisBooking) => {\r\n setClientName(thisBooking.clientName)\r\n setBookingID(thisBooking.bookingid)\r\n setBookingStatus(thisBooking.bookingStatus)\r\n setProviderType(thisBooking.providerType)\r\n setcurrentContract(contracts.find(contract => contract.id === thisBooking.contractid))\r\n setPaymentType(thisBooking.bookingPaymentType)\r\n setSubPaymentType(thisBooking.bookingSubPaymentType)\r\n setNDISPlanManagementProvider(thisBooking.ndisPlanManagementProvider)\r\n setNDISEmailForInvoices(thisBooking.ndisEmailForInvoices)\r\n setBookingNote(thisBooking.bookingNote)\r\n setApprovalStatus(thisBooking.approvedstatus);\r\n setRHCPaymentStatus(thisBooking.rhcpaymentstatus);\r\n setValidationStatus(thisBooking.validationStatus)\r\n setShowBooking(true);\r\n console.log(thisBooking)\r\n }\r\n\r\n function UpdateBooking() {\r\n // Create payload to send to API \r\n var payload = {\r\n id : bookingID,\r\n paymenttype: paymentType,\r\n subpaymenttype: subPaymentType,\r\n contractid : currentContract && currentContract.id,\r\n status : bookingStatus,\r\n approvalstatus : approvalstatus,\r\n rhcpaymentstatus : rhcpaymentstatus,\r\n refresh : 'ALL'\r\n }\r\n \r\n process.env.REACT_APP_DEBUG && console.log(payload);\r\n process.env.REACT_APP_DEBUG && console.log ('Saving data');\r\n // Save update \r\n dispatch(Admin.actions.updateBookingBilling(payload));\r\n setShowBooking(false)\r\n }\r\n\r\n const handleSearch = (event) => {\r\n const searchTerm = event.target.value \r\n setSearchTerm(searchTerm)\r\n }\r\n\r\n function handleBookingClose() {\r\n setShowBooking(false);\r\n } \r\n\r\n const getContractOption = (option, value) => {\r\n // console.log(option);\r\n // console.log(value);\r\n if (option.id === value.id) {\r\n return option\r\n } else {\r\n return initContract();\r\n }\r\n }\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', width: 100,\r\n renderCell: (params) => (\r\n <>\r\n <strong>\r\n <div onClick={() => loadBooking(billableIntentsAll.find(booking => booking.id === params.row.id))} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n </>\r\n )},\r\n { field: 'psychologistid', headerName: 'Psychologist ID', width: 100, hide: true },\r\n { field: 'psychologistSurname', headerName: 'psychologistSurname', width: 100, hide: true },\r\n { field: 'psychologistName', headerName: 'Provider Name', width: 250, \r\n renderCell: (params) => {\r\n return(\r\n <strong>\r\n { params.row.validationStatus && params.row.validationStatus.length > 0 ? \r\n <>\r\n <span style={{ color: 'red' }}>{params.value}</span>\r\n </>\r\n :\r\n <>\r\n {params.value}\r\n </>\r\n }\r\n </strong>\r\n )\r\n }\r\n },\r\n { field: 'clientName', headerName: 'Client Name', width: 250 },\r\n { field: 'bookingDate', headerName: 'Booking Date', width: 150 },\r\n { field: 'bookingStatus', headerName: 'Booking Status', width: 170 },\r\n { field: 'bookingPaymentType', headerName: 'Payment Type', width: 180 },\r\n { field: 'bookingSubPaymentType', headerName: 'Sub', width: 100 },\r\n { field: 'contractid', headerName: 'Contract ID', width: 100, hide: true },\r\n { field: 'contractName', headerName: 'Contract', width: 150 },\r\n // { field: 'ndisEmailForInvoices', headerName: 'NDIS Email', width: 150 },\r\n { field: 'rhcpaymentstatus', headerName: 'Paid by RHC', width: 150,\r\n renderCell: (params) => {\r\n return(\r\n <>\r\n { params.row.contractid ?\r\n <>\r\n { params.value === 'Paid' ? \r\n <span style={{ color: 'green' }}>{params.value}</span>\r\n :\r\n <span style={{ color: 'red' }}>{params.value}</span>\r\n }\r\n </>\r\n :\r\n null \r\n }\r\n </>\r\n )\r\n }\r\n },\r\n { field: 'billingstatus', headerName: 'Billing Status', width: 150 },\r\n { field: 'validationStatus', headerName: 'Validation', width: 150, hide: true }\r\n ];\r\n\r\n return (\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h4 style={{ marginBottom: 12 }}>Review All Bookings</h4></Grid>\r\n </Grid>\r\n\r\n <Paper> \r\n <Grid container style={{ padding: 10 }}>\r\n <Grid item style={{ paddingLeft: 2, paddingRight: 10 }}>\r\n {/* <Grid item style={{ marginTop: 2, marginLeft: 10 }}> */}\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(event) => handleSearch(event)}\r\n autoComplete='OFF'\r\n style={{ height: 33 }}\r\n />\r\n </InputGroup>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <Autocomplete\r\n id=\"searchPsychologist\"\r\n variant=\"outlined\"\r\n options={registered}\r\n getOptionLabel={(option) => ((filters.clientsPsychologist === 'All' && !option.fullname) || !option.fullname) ? 'All' : option.fullname}\r\n value={filters.clientsPsychologist === 'All' ? null : filters.clientsPsychologist}\r\n onChange={(event, newValue) => dispatch(Admin.actions.setFilters({ filterName: 'clientsPsychologist', filterValue: newValue ? newValue : 'All' }))}\r\n style={{ minWidth: 200, fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n label=\"Provider\"\r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"PsychologistSelector\"\r\n style={{ backgroundColor: \"white\", margin: 0, padding: 0, maxWidth: 200 }}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <Autocomplete\r\n id=\"searchContract\"\r\n variant=\"outlined\"\r\n options={contracts}\r\n getOptionLabel={(option) => ((filters.clientsContract === 'All' && !option.name) || !option.name) ? 'All' : option.name}\r\n value={filters.clientsContract === 'All' ? null : filters.clientsContract}\r\n onChange={(event, newValue) => dispatch(Admin.actions.setFilters({ filterName: 'clientsContract', filterValue: newValue ? newValue : 'All' }))}\r\n style={{ minWidth: 200, fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n label=\"Contract/EAP\"\r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"ContractSelector\"\r\n style={{ backgroundColor: \"white\", margin: 0, padding: 0, maxWidth: 200 }}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl} size=\"small\">\r\n <InputLabel id=\"PaymentType-label\" className={classes.label}> Payment Type</InputLabel>\r\n <Select\r\n labelId=\"PaymentType-label\"\r\n id=\"PaymentTypeFilter\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\", height: 33 }}\r\n value={filters.bookingPaymentType}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'bookingPaymentType', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n <MenuItem value='Full Fee'>Full Fee</MenuItem>\r\n <MenuItem value='Reduced Gap'>Reduced Gap</MenuItem>\r\n <MenuItem value='Reduced GapX'>'Reduced GapX</MenuItem> \r\n <MenuItem value='Bulk Billed'>Bulk Billed</MenuItem>\r\n <MenuItem value='NDIS'>NDIS</MenuItem>\r\n <MenuItem value='Contract'>Contract</MenuItem>\r\n <MenuItem value='EAP'>EAP</MenuItem>\r\n <MenuItem value='Provisional'>Provisional</MenuItem>\r\n <MenuItem value='Supervision'>Supervision</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl} size=\"small\">\r\n <InputLabel id=\"invoiceStatus-label\" className={classes.label}> Invoice Status</InputLabel>\r\n <Select\r\n labelId=\"InvoiceStatus-label\"\r\n id=\"InvoiceStatus\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\", height: 33 }}\r\n value={filters.invoiceStatus}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'invoiceStatus', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n <MenuItem value='Billed'>Billed</MenuItem>\r\n <MenuItem value='Unbilled'>UnBilled</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl} size=\"small\">\r\n <InputLabel id=\"ValidationStatus-label\" className={classes.label}> Validation</InputLabel>\r\n <Select\r\n labelId=\"ValidationStatus-label\"\r\n id=\"ValidationStatusFilter\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\", height: 33 }}\r\n value={filters.bookingValidationStatus}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'bookingValidationStatus', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n <MenuItem value='Issue'>Issue</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n\r\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"Start Date\"\r\n value={filters.invoiceStartDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'invoiceStartDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"End Date\"\r\n value={filters.invoiceEndDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'invoiceEndDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </Grid>\r\n </MuiPickersUtilsProvider>\r\n </Grid>\r\n </Paper>\r\n\r\n\r\n { billableIntentsAll ? \r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={filteredbillableIntentsAll} columns={columns} pageSize={10} checkboxSelection={false} rowHeight={40} sortModel={[{ field: 'psychologistSurname', sort: 'asc' }]} />\r\n </Paper>\r\n : ('None')\r\n }\r\n\r\n <Modal show={showBooking} onHide={handleBookingClose} dialogClassName=\"editprofile-modal\">\r\n <Modal.Header closeButton className=\"editprofile-modal\">\r\n <Modal.Title>Update Booking Status and Funding - {clientName}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"editprofile-modal\">\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label style={{ color: 'green', fontWeight: 500 }}>Booking Status</Form.Label> \r\n <Form.Control as=\"select\" defaultValue={bookingStatus} onChange={(event) => setBookingStatus(event.target.value)}>\r\n <option value=\"Active\">Billable</option>\r\n <option value=\"Cancelled\">Cancelled</option>\r\n <option value=\"NoShow\">No Show</option>\r\n <option value=\"Deleted\" disabled>Deleted</option> \r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label style={{ color: 'green', fontWeight: 500 }}>Funding Type</Form.Label> \r\n <Form.Control as=\"select\" defaultValue={paymentType} onChange={(event) => setPaymentType(event.target.value)}>\r\n <option value=\"Bulk Billed\">Bulk Billed</option>\r\n <option value=\"Reduced Gap\">Reduced Gap (+$20)</option>\r\n <option value=\"Full Fee\">Full Fee</option>\r\n <option value=\"NDIS\">NDIS</option>\r\n <option value=\"Contract\">Contract</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n {paymentType === 'Reduced Gap' || paymentType === 'Full Fee' ?\r\n <>\r\n <Col md=\"3\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label style={{ color: 'green', fontWeight: 500 }}>Sub Payment Type</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={subPaymentType} onChange={(event) => setSubPaymentType(event.target.value)}>\r\n <option value=\"\">N/A</option>\r\n {providerType === 'Clinical' ? \r\n <>\r\n {paymentType === 'Reduced Gap' ?\r\n <>\r\n <option value=\"Over30C\">Gap Over $30</option>\r\n <option value=\"Under50C\">Gap Under $50</option>\r\n </>\r\n :\r\n null\r\n } \r\n <option value=\"Over50C\">Gap Over $50</option>\r\n </>\r\n :\r\n <>\r\n {paymentType === 'Reduced Gap' ?\r\n <>\r\n <option value=\"Over30\">Gap Over $30</option>\r\n <option value=\"Under50\">Gap Under $50</option>\r\n </>\r\n :\r\n null\r\n } \r\n <option value=\"Over50\">Gap Over $50</option>\r\n </>\r\n }\r\n </Form.Control>\r\n </Form.Group> \r\n </Col>\r\n </>\r\n : \r\n null\r\n } \r\n {paymentType === 'Contract' ? \r\n <>\r\n <Col md=\"4\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label style={{ color: 'green', fontWeight: 500 }}>Contract</Form.Label> \r\n <Autocomplete\r\n id=\"contractID\"\r\n variant=\"outlined\"\r\n options={contracts}\r\n getOptionLabel={(option) => option.name}\r\n getOptionSelected={(option, value) => getContractOption(option, value)}\r\n value= {currentContract}\r\n onChange={(event, newValue) => loadContract(newValue)}\r\n style={{ minWidth: 200, fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"currentContactID\"\r\n style={{ backgroundColor: \"white\", margin: 0, padding: 0, maxWidth: 400 }}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label style={{ color: 'green', fontWeight: 500 }}>Approval Status</Form.Label> \r\n <Form.Control as=\"select\" defaultValue={approvalstatus} onChange={(event) => setApprovalStatus(event.target.value)}>\r\n <option value=\"Approved\">Approved</option>\r\n <option value=\"Unapproved\">Unapproved</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label style={{ color: 'green', fontWeight: 500 }}>RHC Payment Status</Form.Label> \r\n <Form.Control as=\"select\" defaultValue={rhcpaymentstatus} onChange={(event) => setRHCPaymentStatus(event.target.value)}>\r\n <option value=\"UnPaid\">UnPaid</option>\r\n <option value=\"Paid\">Paid</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </>\r\n :\r\n null\r\n }\r\n </Row>\r\n {paymentType === 'NDIS' ? \r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group>\r\n <Form.Label>NDIS Plan Management Provider</Form.Label>\r\n <Form.Control type=\"text\" name=\"ndisPlanManagementProvider\" defaultValue={ndisPlanManagementProvider} readOnly />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group>\r\n <Form.Label>NDIS Email for Invoices</Form.Label>\r\n <Form.Control type=\"text\" name=\"ndisEmailForInvoices\" defaultValue={ndisEmailForInvoices} readOnly />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n :\r\n null\r\n }\r\n {(paymentType === 'NDIS' || paymentType === 'Contract' || paymentType === 'EAP') ? \r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Booking Note</Form.Label>\r\n <Form.Control as=\"textarea\" rows={8} type=\"text\" name=\"bookingNote\" defaultValue={bookingNote} />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n :\r\n null\r\n }\r\n {validationStatus && validationStatus.length > 0 ?\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group>\r\n <Form.Label>Warning</Form.Label>\r\n <Form.Control type=\"text\" name=\"validationStatus\" defaultValue={validationStatus} readOnly />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n : \r\n null\r\n } \r\n </Modal.Body>\r\n <Modal.Footer className=\"editprofile-modal\">\r\n <Button variant=\"secondary\" onClick={handleBookingClose}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"primary\" onClick={UpdateBooking}>\r\n Save\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { Button, Modal, Form, InputGroup } from \"react-bootstrap\";\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport { Paper, Grid, FormControl, Select, InputLabel, MenuItem, makeStyles } from '@material-ui/core';\r\nimport DateFnsUtils from '@date-io/date-fns';\r\nimport { MuiPickersUtilsProvider, KeyboardDatePicker,} from '@material-ui/pickers';\r\nimport GatherBillableDetail from \"../../../components/GatherBillableDetail\"\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\n// import { saveAs } from 'file-saver';\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\n\r\n// Need to rewrite this - as it is not completely correct \r\n// In the world of confusion - please note the following invoicing process \r\n//\r\n// Today we are billing per booking using the Services Table to define the prices - each booking has a billable type that is set (or defaulted) when a booking is made\r\n//\r\n// Process \r\n// \r\n// GatherBillable.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to email providers a list of those to be billed at the end of the month if still eliglible. \r\n// - Can toogle bookings to cancelled/noshow as needed \r\n// Invoices.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to create Invoices in Xero for these providers. \r\n// - This essentially a copy of GatherBillable though expect this will change at client acceptance occurs. \r\n// InvoiceLog.js - This is a searchable log of invoices/clients/providers \r\n// \r\n// PlatformPsychologist.js - Lists unbilled boookings \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Can toogle bookings to cancelled/noshow as needed //\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n noBorder: {\r\n border: \"none\",\r\n },\r\n\tformControl: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: 120,\r\n\t},\r\n\tformControlWide: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: '100%',\r\n\t},\r\n\tselectEmpty: {\r\n\t marginTop: theme.spacing(2),\r\n\t},\r\n\tlabel: {\r\n\t backgroundColor: '#fff',\r\n\t paddingLeft: 3,\r\n\t paddingRight: 3,\r\n\t}\r\n }));\r\n\r\n const useStylesDatePicker = makeStyles({\r\n root: {\r\n \"& .MuiInputBase-root\": {\r\n height: 33,\r\n }\r\n }\r\n });\r\n\r\nexport default function GatherBillableContracts() \r\n{\r\n const dispatch = useDispatch()\r\n const classes = useStyles();\r\n const classesDatePicker = useStylesDatePicker();\r\n\r\n const billableIntents = useSelector(state => state.admin.BillableIntentContracts)\r\n const filters = useSelector(state => state.admin.Filters)\r\n // const bookingBillableCSV = useSelector(state => state.admin.BookingBillableCSV);\r\n // const [exportExcelStatus, setExportExcelStatus] = useState('Not Started')\r\n const [searchTerm, setSearchTerm] = useState('')\r\n\r\n\r\n useEffect( () => {\r\n dispatch(Admin.actions.fetchBillableIntentsContract({ startDate: filters.invoiceStartDate, endDate: filters.invoiceEndDate})) }, \r\n [dispatch, filters.invoiceStartDate, filters.invoiceEndDate] \r\n )\r\n\r\n const searchBillableIntents = (billableIntent) => {\r\n if ( true\r\n && (billableIntent => billableIntent.psychologistName.toLowerCase().search(searchTerm.toLowerCase()) > -1 || searchTerm.length === 0)\r\n && (!filters.invoiceStatus || filters.invoiceStatus === 'All' || (billableIntent.billingstatus === filters.invoiceStatus || billableIntent.billingstatus === 'Multiple'))\r\n && (!filters.approvalStatus || filters.approvalStatus === 'All' || (billableIntent.approvedstatus === filters.approvalStatus || billableIntent.approvedstatus === 'Multiple'))\r\n && (!filters.rhcpaymentstatus || filters.rhcpaymentstatus === 'All' || (billableIntent.rhcpaymentstatus === filters.approvalStatus || billableIntent.rhcpaymentstatus === 'Multiple'))\r\n )\r\n {\r\n return billableIntent\r\n } \r\n }\r\n \r\n\r\n const filteredbillableIntents = billableIntents.filter(billableIntent => searchBillableIntents(billableIntent))\r\n const [showClients, setShowClients] = useState(false);\r\n const [providerClients, setProviderClients] = useState();\r\n const [psychologistID,setPsychologistID] = useState();\r\n const [providerName, setProviderName] = useState();\r\n\r\n\r\n // initial call from the download button - fires fetch action if needed, otherwise triggers download \r\n // const exportFile = () => {\r\n // if(exportExcelStatus === 'Not Started')\r\n // {\r\n // dispatch(Admin.actions.fetchBookingBillableCSV({ startDate: filters.invoiceStartDate, endDate: filters.invoiceEndDate, billableStatus: filters.invoiceStatus}))\r\n // setExportExcelStatus('Fetching')\r\n // }\r\n // } \r\n\r\n // grab the blob from state and tell the browser to download\r\n // const downloadExport = () => {\r\n // // Sort out filename\r\n // let headingStartDate = ''; \r\n // let headingEndDate = '';\r\n // let headingStatus = '';\r\n // //\r\n // if (filters.invoiceStartDate === '')\r\n // {\r\n // headingStartDate = '2020-01-01'\r\n // }\r\n // else\r\n // {\r\n // headingStartDate = filters.invoiceStartDate;\r\n // }\r\n // if (filters.invoiceEndDate === '')\r\n // {\r\n // let yourDate = new Date();\r\n // headingEndDate = yourDate.toISOString().split('T')[0];\r\n // console.log(headingEndDate);\r\n // }\r\n // else\r\n // {\r\n // headingEndDate = filters.invoiceEndDate;\r\n // }\r\n // if (filters.invoiceStatus === 'All')\r\n // {\r\n // headingStatus = '';\r\n // }\r\n // else\r\n // {\r\n // if (filters.invoiceStatus === 'Unbilled')\r\n // {\r\n // headingStatus = '-Unbilled Bookings';\r\n // }\r\n // else\r\n // {\r\n // headingStatus = '-Billed Bookings';\r\n // }\r\n // }\r\n // //\r\n // var exportDocName = 'RHC-Bookings- FROM-' + headingStartDate + '-TO-' + headingEndDate + headingStatus;\r\n // if(bookingBillableCSV && bookingBillableCSV !== '')\r\n // {\r\n // const file = new Blob(\r\n // [Buffer.from(bookingBillableCSV)], \r\n // {type: 'text/csv'});\r\n // saveAs(file, `${exportDocName}.csv`);\r\n // }\r\n // }\r\n\r\n // useEffect to fire when status is 'Fetching' and we get the result in redux\r\n // useEffect( () => {\r\n // if(exportExcelStatus === 'Fetching' && bookingBillableCSV && bookingBillableCSV !== '')\r\n // {\r\n // downloadExport()\r\n // setExportExcelStatus('Not Started')\r\n // }\r\n // }, [exportExcelStatus, bookingBillableCSV,downloadExport])\r\n\r\n\r\n\r\n // function sendProviderEmail() \r\n // {\r\n // if (process.env.REACT_APP_DEBUG) \r\n // {\r\n // console.log ('Generating Billable Client Emails to Psychologists');\r\n // }\r\n // dispatch(Admin.actions.putCreateProviderBillableEmails());\r\n // }\r\n\r\n\r\n const loadClients = (thisPsychologist) => {\r\n setProviderName(thisPsychologist.psychologistName);\r\n setProviderClients(thisPsychologist.clients);\r\n setPsychologistID(thisPsychologist.id);\r\n setShowClients(true);\r\n }\r\n\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', width: 100, hide: true },\r\n { field: 'psychologistSurname', headerName: 'psychologistSurname', width: 100, hide: true },\r\n { field: 'psychologistName', headerName: 'Name', width: 300, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadClients(billableIntents.find(intent => intent.psychologistName === params.row.psychologistName))} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'psychologistEmail', headerName: 'Email', width: 300 },\r\n { field: 'xero', headerName: 'Xero Link', width: 200 },\r\n { field: 'totalClients', headerName: 'Bookings', width: 200},\r\n { field: 'total', headerName: 'Total', width: 120 },\r\n { field: 'rhcpaymentstatus', headerName: 'Paid by RHC', width: 150,\r\n renderCell: (params) => {\r\n return(\r\n <>\r\n { params.value === 'Paid' ? \r\n <span style={{ color: 'green' }}>{params.value}</span>\r\n :\r\n <span style={{ color: 'red' }}>{params.value}</span>\r\n }\r\n </>\r\n )\r\n }\r\n },\r\n { field: 'billingstatus', headerName: 'Billing Status', width: 150 },\r\n { field: 'approvedstatus', headerName: 'Approval Status', width: 150 }\r\n ];\r\n\r\n\r\n function handleClientsClose() {\r\n setShowClients(false);\r\n } \r\n\r\n const handleSearch = (event) => {\r\n const searchTerm = event.target.value \r\n setSearchTerm(searchTerm)\r\n }\r\n\r\n\r\n return (\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h4 style={{ marginBottom: 12 }}>Review Contract Bookings</h4></Grid>\r\n </Grid>\r\n\r\n <Paper> \r\n <Grid container style={{ padding: 10 }}>\r\n <Grid item style={{ paddingLeft: 2, paddingRight: 10 }}>\r\n {/* <Grid item style={{ marginTop: 2, marginLeft: 10 }}> */}\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(event) => handleSearch(event)}\r\n autoComplete='OFF'\r\n style={{ height: 33 }}\r\n />\r\n </InputGroup>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl} size=\"small\">\r\n <InputLabel id=\"invoiceStatus-label\" className={classes.label}> Invoice Status</InputLabel>\r\n <Select\r\n labelId=\"InvoiceStatus-label\"\r\n id=\"InvoiceStatus\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\", height: 33 }}\r\n value={filters.invoiceStatus}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'invoiceStatus', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n <MenuItem value='Billed'>Billed</MenuItem>\r\n <MenuItem value='Unbilled'>UnBilled</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl} size=\"small\">\r\n <InputLabel id=\"approvalStatus-label\" className={classes.label}> Approval Status</InputLabel>\r\n <Select\r\n labelId=\"approvalStatus-label\"\r\n id=\"approvalStatus\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\", height: 33 }}\r\n value={filters.approvalStatus}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'approvalStatus', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n <MenuItem value='Approved'>Approved</MenuItem>\r\n <MenuItem value='Unapproved'>Unapproved</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl} size=\"small\">\r\n <InputLabel id=\"rhcpaymentstatus-label\" className={classes.label}> RHC Paid Status</InputLabel>\r\n <Select\r\n labelId=\"rhcpaymentstatus-label\"\r\n id=\"rhcpaymentstatus\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\", height: 33 }}\r\n value={filters.rhcpaymentstatus}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'rhcpaymentstatus', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n <MenuItem value='UnPaid'>UnPaid</MenuItem>\r\n <MenuItem value='Paid'>Paid</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n\r\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"Start Date\"\r\n value={filters.invoiceStartDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'invoiceStartDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"End Date\"\r\n value={filters.invoiceEndDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'invoiceEndDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </Grid>\r\n </MuiPickersUtilsProvider>\r\n {/* <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => exportFile()}>\r\n Download\r\n </Button>\r\n </Grid> */}\r\n\r\n {/* <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => sendProviderEmail()}>\r\n Generate Billable Emails to Providers\r\n </Button>\r\n </Grid> */}\r\n </Grid>\r\n </Paper>\r\n\r\n\r\n { billableIntents ? \r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={filteredbillableIntents} columns={columns} pageSize={10} checkboxSelection={false} rowHeight={40} sortModel={[{ field: 'psychologistSurname', sort: 'asc' }]} />\r\n </Paper>\r\n : ('None')\r\n }\r\n\r\n <Modal show={showClients} onHide={handleClientsClose} dialogClassName=\"editBilling-modal\">\r\n <Modal.Header closeButton className=\"editBilling-modal\">\r\n <Modal.Title>Contract Bookings - {providerName} </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"editBilling-modal\">\r\n <GatherBillableDetail\r\n billablestatus={filters.invoiceStatus}\r\n approvalstatus={filters.approvalStatus}\r\n rhcpaymentstatus={filters.rhcpaymentstatus}\r\n clients={providerClients}\r\n psychologistID={psychologistID}\r\n closeClients={setShowClients}\r\n displayNote={true}\r\n />\r\n </Modal.Body>\r\n <Modal.Footer className=\"editBilling-modal\">\r\n <Button variant=\"secondary\" onClick={handleClientsClose}>\r\n Cancel\r\n </Button>\r\n </Modal.Footer>\r\n\r\n </Modal>\r\n\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { Button, Modal, Form, InputGroup } from \"react-bootstrap\";\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport { Paper, Grid, FormControl, Select, InputLabel, MenuItem, makeStyles } from '@material-ui/core';\r\nimport DateFnsUtils from '@date-io/date-fns';\r\nimport { MuiPickersUtilsProvider, KeyboardDatePicker,} from '@material-ui/pickers';\r\nimport GatherBillableDetail from \"../../../components/GatherBillableDetail\"\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\n// import { saveAs } from 'file-saver';\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\n\r\n// Need to rewrite this - as it is not completely correct \r\n// In the world of confusion - please note the following invoicing process \r\n//\r\n// Today we are billing per booking using the Services Table to define the prices - each booking has a billable type that is set (or defaulted) when a booking is made\r\n//\r\n// Process \r\n// \r\n// GatherBillable.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to email providers a list of those to be billed at the end of the month if still eliglible. \r\n// - Can toogle bookings to cancelled/noshow as needed \r\n// Invoices.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to create Invoices in Xero for these providers. \r\n// - This essentially a copy of GatherBillable though expect this will change at client acceptance occurs. \r\n// InvoiceLog.js - This is a searchable log of invoices/clients/providers \r\n// \r\n// PlatformPsychologist.js - Lists unbilled boookings \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Can toogle bookings to cancelled/noshow as needed //\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n noBorder: {\r\n border: \"none\",\r\n },\r\n\tformControl: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: 120,\r\n\t},\r\n\tformControlWide: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: '100%',\r\n\t},\r\n\tselectEmpty: {\r\n\t marginTop: theme.spacing(2),\r\n\t},\r\n\tlabel: {\r\n\t backgroundColor: '#fff',\r\n\t paddingLeft: 3,\r\n\t paddingRight: 3,\r\n\t}\r\n }));\r\n\r\n const useStylesDatePicker = makeStyles({\r\n root: {\r\n \"& .MuiInputBase-root\": {\r\n height: 33,\r\n }\r\n }\r\n });\r\n\r\nexport default function GatherBillableNthQLDPHN() \r\n{\r\n const dispatch = useDispatch()\r\n const classes = useStyles();\r\n const classesDatePicker = useStylesDatePicker();\r\n\r\n const billableIntents = useSelector(state => state.admin.BillableIntentNthQLDPHN)\r\n const filters = useSelector(state => state.admin.Filters)\r\n // const bookingBillableCSV = useSelector(state => state.admin.BookingBillableCSV);\r\n // const [exportExcelStatus, setExportExcelStatus] = useState('Not Started')\r\n const [searchTerm, setSearchTerm] = useState('')\r\n\r\n\r\n useEffect( () => {\r\n dispatch(Admin.actions.fetchBillableIntentsNthQLDPHN({ startDate: filters.invoiceStartDate, endDate: filters.invoiceEndDate})) }, \r\n [dispatch, filters.invoiceStartDate, filters.invoiceEndDate] \r\n )\r\n\r\n const searchBillableIntents = (billableIntent) => {\r\n if ( true\r\n && (billableIntent => billableIntent.psychologistName.toLowerCase().search(searchTerm.toLowerCase()) > -1 || searchTerm.length === 0)\r\n && (!filters.invoiceStatus || filters.invoiceStatus === 'All' || (billableIntent.billingstatus === filters.invoiceStatus || billableIntent.billingstatus === 'Multiple'))\r\n && (!filters.approvedStatus || filters.approvalStatus === 'All' || (billableIntent.approvedstatus === filters.approvalStatus || billableIntent.approvedstatus === 'Multiple'))\r\n )\r\n {\r\n return billableIntent\r\n } \r\n }\r\n \r\n\r\n const filteredbillableIntents = billableIntents.filter(billableIntent => searchBillableIntents(billableIntent))\r\n const [showClients, setShowClients] = useState(false);\r\n const [providerClients, setProviderClients] = useState();\r\n const [psychologistID,setPsychologistID] = useState();\r\n const [providerName, setProviderName] = useState();\r\n\r\n\r\n // initial call from the download button - fires fetch action if needed, otherwise triggers download \r\n // const exportFile = () => {\r\n // if(exportExcelStatus === 'Not Started')\r\n // {\r\n // dispatch(Admin.actions.fetchBookingBillableCSV({ startDate: filters.invoiceStartDate, endDate: filters.invoiceEndDate, billableStatus: filters.invoiceStatus}))\r\n // setExportExcelStatus('Fetching')\r\n // }\r\n // } \r\n\r\n // grab the blob from state and tell the browser to download\r\n // const downloadExport = () => {\r\n // // Sort out filename\r\n // let headingStartDate = ''; \r\n // let headingEndDate = '';\r\n // let headingStatus = '';\r\n // //\r\n // if (filters.invoiceStartDate === '')\r\n // {\r\n // headingStartDate = '2020-01-01'\r\n // }\r\n // else\r\n // {\r\n // headingStartDate = filters.invoiceStartDate;\r\n // }\r\n // if (filters.invoiceEndDate === '')\r\n // {\r\n // let yourDate = new Date();\r\n // headingEndDate = yourDate.toISOString().split('T')[0];\r\n // console.log(headingEndDate);\r\n // }\r\n // else\r\n // {\r\n // headingEndDate = filters.invoiceEndDate;\r\n // }\r\n // if (filters.invoiceStatus === 'All')\r\n // {\r\n // headingStatus = '';\r\n // }\r\n // else\r\n // {\r\n // if (filters.invoiceStatus === 'Unbilled')\r\n // {\r\n // headingStatus = '-Unbilled Bookings';\r\n // }\r\n // else\r\n // {\r\n // headingStatus = '-Billed Bookings';\r\n // }\r\n // }\r\n // //\r\n // var exportDocName = 'RHC-Bookings- FROM-' + headingStartDate + '-TO-' + headingEndDate + headingStatus;\r\n // if(bookingBillableCSV && bookingBillableCSV !== '')\r\n // {\r\n // const file = new Blob(\r\n // [Buffer.from(bookingBillableCSV)], \r\n // {type: 'text/csv'});\r\n // saveAs(file, `${exportDocName}.csv`);\r\n // }\r\n // }\r\n\r\n // useEffect to fire when status is 'Fetching' and we get the result in redux\r\n // useEffect( () => {\r\n // if(exportExcelStatus === 'Fetching' && bookingBillableCSV && bookingBillableCSV !== '')\r\n // {\r\n // downloadExport()\r\n // setExportExcelStatus('Not Started')\r\n // }\r\n // }, [exportExcelStatus, bookingBillableCSV,downloadExport])\r\n\r\n\r\n\r\n // function sendProviderEmail() \r\n // {\r\n // if (process.env.REACT_APP_DEBUG) \r\n // {\r\n // console.log ('Generating Billable Client Emails to Psychologists');\r\n // }\r\n // dispatch(Admin.actions.putCreateProviderBillableEmails());\r\n // }\r\n\r\n\r\n const loadClients = (thisPsychologist) => {\r\n setProviderName(thisPsychologist.psychologistName);\r\n setProviderClients(thisPsychologist.clients);\r\n setPsychologistID(thisPsychologist.id);\r\n setShowClients(true);\r\n }\r\n\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', width: 100, hide: true },\r\n { field: 'psychologistSurname', headerName: 'psychologistSurname', width: 100, hide: true },\r\n { field: 'psychologistName', headerName: 'Name', width: 300, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadClients(billableIntents.find(intent => intent.psychologistName === params.row.psychologistName))} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'psychologistEmail', headerName: 'Email', width: 300 },\r\n { field: 'xero', headerName: 'Xero Link', width: 200 },\r\n { field: 'totalClients', headerName: 'Bookings', width: 200},\r\n { field: 'total', headerName: 'Total', width: 120 },\r\n { field: 'billingstatus', headerName: 'Billing Status', width: 150 },\r\n { field: 'approvedstatus', headerName: 'Approval Status', width: 150 }\r\n ];\r\n\r\n\r\n function handleClientsClose() {\r\n setShowClients(false);\r\n } \r\n\r\n const handleSearch = (event) => {\r\n const searchTerm = event.target.value \r\n setSearchTerm(searchTerm)\r\n }\r\n\r\n\r\n return (\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h4 style={{ marginBottom: 12 }}>Review Contract Bookings</h4></Grid>\r\n </Grid>\r\n\r\n <Paper> \r\n <Grid container style={{ padding: 10 }}>\r\n <Grid item style={{ paddingLeft: 2, paddingRight: 10 }}>\r\n {/* <Grid item style={{ marginTop: 2, marginLeft: 10 }}> */}\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(event) => handleSearch(event)}\r\n autoComplete='OFF'\r\n style={{ height: 33 }}\r\n />\r\n </InputGroup>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl} size=\"small\">\r\n <InputLabel id=\"invoiceStatus-label\" className={classes.label}> Invoice Status</InputLabel>\r\n <Select\r\n labelId=\"InvoiceStatus-label\"\r\n id=\"InvoiceStatus\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\", height: 33 }}\r\n value={filters.invoiceStatus}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'invoiceStatus', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n <MenuItem value='Billed'>Billed</MenuItem>\r\n <MenuItem value='Unbilled'>UnBilled</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl} size=\"small\">\r\n <InputLabel id=\"approvalStatus-label\" className={classes.label}> Approval Status</InputLabel>\r\n <Select\r\n labelId=\"approvalStatus-label\"\r\n id=\"approvalStatus\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\", height: 33 }}\r\n value={filters.approvalStatus}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'approvalStatus', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n <MenuItem value='Approved'>Approved</MenuItem>\r\n <MenuItem value='Unapproved'>Unapproved</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"Start Date\"\r\n value={filters.invoiceStartDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'invoiceStartDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"End Date\"\r\n value={filters.invoiceEndDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'invoiceEndDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </Grid>\r\n </MuiPickersUtilsProvider>\r\n {/* <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => exportFile()}>\r\n Download\r\n </Button>\r\n </Grid> */}\r\n\r\n {/* <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => sendProviderEmail()}>\r\n Generate Billable Emails to Providers\r\n </Button>\r\n </Grid> */}\r\n </Grid>\r\n </Paper>\r\n\r\n\r\n { billableIntents ? \r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={filteredbillableIntents} columns={columns} pageSize={10} checkboxSelection={false} rowHeight={40} sortModel={[{ field: 'psychologistSurname', sort: 'asc' }]} />\r\n </Paper>\r\n : ('None')\r\n }\r\n\r\n <Modal show={showClients} onHide={handleClientsClose} dialogClassName=\"editBilling-modal\">\r\n <Modal.Header closeButton className=\"editBilling-modal\">\r\n <Modal.Title>Nth QLD PHN Bookings - {providerName} </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"editBilling-modal\">\r\n <GatherBillableDetail\r\n billablestatus={filters.invoiceStatus}\r\n approvalstatus={filters.approvalStatus}\r\n clients={providerClients}\r\n psychologistID={psychologistID}\r\n closeClients={setShowClients}\r\n displayNote={true}\r\n />\r\n </Modal.Body>\r\n <Modal.Footer className=\"editBilling-modal\">\r\n <Button variant=\"secondary\" onClick={handleClientsClose}>\r\n Cancel\r\n </Button>\r\n </Modal.Footer>\r\n\r\n </Modal>\r\n\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { DataGrid } from '@material-ui/data-grid'\r\nimport { Button, Modal, Form, InputGroup } from \"react-bootstrap\";\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport { Paper, Grid, FormControl, Select, InputLabel, MenuItem, makeStyles } from '@material-ui/core';\r\nimport DateFnsUtils from '@date-io/date-fns';\r\nimport { MuiPickersUtilsProvider, KeyboardDatePicker,} from '@material-ui/pickers';\r\nimport GatherBillableDetail from \"../../../components/GatherBillableDetail\"\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\n// import { saveAs } from 'file-saver';\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\n\r\n// Need to rewrite this - as it is not completely correct \r\n// In the world of confusion - please note the following invoicing process \r\n//\r\n// Today we are billing per booking using the Services Table to define the prices - each booking has a billable type that is set (or defaulted) when a booking is made\r\n//\r\n// Process \r\n// \r\n// GatherBillable.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to email providers a list of those to be billed at the end of the month if still eliglible. \r\n// - Can toogle bookings to cancelled/noshow as needed \r\n// Invoices.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to create Invoices in Xero for these providers. \r\n// - This essentially a copy of GatherBillable though expect this will change at client acceptance occurs. \r\n// InvoiceLog.js - This is a searchable log of invoices/clients/providers \r\n// \r\n// PlatformPsychologist.js - Lists unbilled boookings \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Can toogle bookings to cancelled/noshow as needed //\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n noBorder: {\r\n border: \"none\",\r\n },\r\n\tformControl: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: 120,\r\n\t},\r\n\tformControlWide: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: '100%',\r\n\t},\r\n\tselectEmpty: {\r\n\t marginTop: theme.spacing(2),\r\n\t},\r\n\tlabel: {\r\n\t backgroundColor: '#fff',\r\n\t paddingLeft: 3,\r\n\t paddingRight: 3,\r\n\t}\r\n }));\r\n\r\n const useStylesDatePicker = makeStyles({\r\n root: {\r\n \"& .MuiInputBase-root\": {\r\n height: 33,\r\n }\r\n }\r\n });\r\n\r\nexport default function GatherBillableNDIS() \r\n{\r\n const dispatch = useDispatch()\r\n const classes = useStyles();\r\n const classesDatePicker = useStylesDatePicker();\r\n\r\n const billableIntents = useSelector(state => state.admin.BillableIntentNDIS)\r\n const filters = useSelector(state => state.admin.Filters)\r\n // const bookingBillableCSV = useSelector(state => state.admin.BookingBillableCSV);\r\n // const [exportExcelStatus, setExportExcelStatus] = useState('Not Started')\r\n const [searchTerm, setSearchTerm] = useState('')\r\n\r\n\r\n useEffect( () => {\r\n dispatch(Admin.actions.fetchBillableIntentsNDIS({ startDate: filters.invoiceStartDate, endDate: filters.invoiceEndDate})) }, \r\n [dispatch, filters.invoiceStartDate, filters.invoiceEndDate] \r\n )\r\n\r\n const searchBillableIntents = (billableIntent) => {\r\n if ( true\r\n && (billableIntent => billableIntent.ndisplanmanagementprovider.toLowerCase().search(searchTerm.toLowerCase()) > -1 || searchTerm.length === 0)\r\n && (!filters.invoiceStatus || filters.invoiceStatus === 'All' || (billableIntent.billingstatus === filters.invoiceStatus || billableIntent.billingstatus === 'Multiple'))\r\n && (!filters.approvalStatus || filters.approvalStatus === 'All' || (billableIntent.approvedstatus === filters.approvalStatus || billableIntent.approvedstatus === 'Multiple'))\r\n )\r\n {\r\n return billableIntent\r\n } \r\n }\r\n \r\n\r\n const filteredbillableIntents = billableIntents.filter(billableIntent => searchBillableIntents(billableIntent))\r\n const [showClients, setShowClients] = useState(false);\r\n const [ndisProviderClients, setNDISProviderClients] = useState();\r\n const [ndisProviderName, setNDISProviderName] = useState();\r\n // const [ndisProviderEmail, setNDISProviderEmail] = useState();\r\n\r\n\r\n // initial call from the download button - fires fetch action if needed, otherwise triggers download \r\n // const exportFile = () => {\r\n // if(exportExcelStatus === 'Not Started')\r\n // {\r\n // dispatch(Admin.actions.fetchBookingBillableCSV({ startDate: filters.invoiceStartDate, endDate: filters.invoiceEndDate, billableStatus: filters.invoiceStatus}))\r\n // setExportExcelStatus('Fetching')\r\n // }\r\n // } \r\n\r\n // grab the blob from state and tell the browser to download\r\n // const downloadExport = () => {\r\n // // Sort out filename\r\n // let headingStartDate = ''; \r\n // let headingEndDate = '';\r\n // let headingStatus = '';\r\n // //\r\n // if (filters.invoiceStartDate === '')\r\n // {\r\n // headingStartDate = '2020-01-01'\r\n // }\r\n // else\r\n // {\r\n // headingStartDate = filters.invoiceStartDate;\r\n // }\r\n // if (filters.invoiceEndDate === '')\r\n // {\r\n // let yourDate = new Date();\r\n // headingEndDate = yourDate.toISOString().split('T')[0];\r\n // console.log(headingEndDate);\r\n // }\r\n // else\r\n // {\r\n // headingEndDate = filters.invoiceEndDate;\r\n // }\r\n // if (filters.invoiceStatus === 'All')\r\n // {\r\n // headingStatus = '';\r\n // }\r\n // else\r\n // {\r\n // if (filters.invoiceStatus === 'Unbilled')\r\n // {\r\n // headingStatus = '-Unbilled Bookings';\r\n // }\r\n // else\r\n // {\r\n // headingStatus = '-Billed Bookings';\r\n // }\r\n // }\r\n // //\r\n // var exportDocName = 'RHC-Bookings- FROM-' + headingStartDate + '-TO-' + headingEndDate + headingStatus;\r\n // if(bookingBillableCSV && bookingBillableCSV !== '')\r\n // {\r\n // const file = new Blob(\r\n // [Buffer.from(bookingBillableCSV)], \r\n // {type: 'text/csv'});\r\n // saveAs(file, `${exportDocName}.csv`);\r\n // }\r\n // }\r\n\r\n // useEffect to fire when status is 'Fetching' and we get the result in redux\r\n // useEffect( () => {\r\n // if(exportExcelStatus === 'Fetching' && bookingBillableCSV && bookingBillableCSV !== '')\r\n // {\r\n // downloadExport()\r\n // setExportExcelStatus('Not Started')\r\n // }\r\n // }, [exportExcelStatus, bookingBillableCSV,downloadExport])\r\n\r\n\r\n\r\n // function sendProviderEmail() \r\n // {\r\n // if (process.env.REACT_APP_DEBUG) \r\n // {\r\n // console.log ('Generating Billable Client Emails to Psychologists');\r\n // }\r\n // dispatch(Admin.actions.putCreateProviderBillableEmails());\r\n // }\r\n\r\n\r\n const loadClients = (thisNDISProvider) => {\r\n setNDISProviderName(thisNDISProvider.ndisPlanManagementProvider);\r\n // setNDISProviderEmail(thisNDISProvider.ndisemailforinvoices)\r\n setNDISProviderClients(thisNDISProvider.clients);\r\n // setPsychologistID(thisPsychologist.id);\r\n setShowClients(true);\r\n }\r\n\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', width: 100, hide: true },\r\n { field: 'ndisPlanManagementProvider', headerName: 'Name', width: 300, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadClients(billableIntents.find(intent => intent.ndisPlanManagementProvider === params.row.ndisPlanManagementProvider))} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'ndisEmailForInvoices', headerName: 'Email', width: 300 },\r\n { field: 'xero', headerName: 'Xero Link', width: 200 },\r\n { field: 'totalClients', headerName: 'Bookings', width: 200},\r\n { field: 'total', headerName: 'Total', width: 120 },\r\n { field: 'billingstatus', headerName: 'Billing Status', width: 150 },\r\n { field: 'approvedstatus', headerName: 'Approval Status', width: 170 }\r\n ];\r\n\r\n\r\n function handleClientsClose() {\r\n setShowClients(false);\r\n } \r\n\r\n const handleSearch = (event) => {\r\n const searchTerm = event.target.value \r\n setSearchTerm(searchTerm)\r\n }\r\n\r\n\r\n return (\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h4 style={{ marginBottom: 12 }}>Review NDIS Bookings (Do Not Use For bookings after 1/10/24)</h4></Grid>\r\n </Grid>\r\n\r\n <Paper> \r\n <Grid container style={{ padding: 10 }}>\r\n <Grid item style={{ paddingLeft: 2, paddingRight: 10 }}>\r\n {/* <Grid item style={{ marginTop: 2, marginLeft: 10 }}> */}\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(event) => handleSearch(event)}\r\n autoComplete='OFF'\r\n style={{ height: 33 }}\r\n />\r\n </InputGroup>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl} size=\"small\">\r\n <InputLabel id=\"invoiceStatus-label\" className={classes.label}> Invoice Status</InputLabel>\r\n <Select\r\n labelId=\"InvoiceStatus-label\"\r\n id=\"InvoiceStatus\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\", height: 33 }}\r\n value={filters.invoiceStatus}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'invoiceStatus', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n <MenuItem value='Billed'>Billed</MenuItem>\r\n <MenuItem value='Unbilled'>UnBilled</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl} size=\"small\">\r\n <InputLabel id=\"approvalStatus-label\" className={classes.label}>Approval Status</InputLabel>\r\n <Select\r\n labelId=\"approvalStatus-label\"\r\n id=\"approvalStatus\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\", height: 33 }}\r\n value={filters.approvalStatus}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'approvalStatus', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n <MenuItem value='Approved'>Approved</MenuItem>\r\n <MenuItem value='Unapproved'>Unapproved</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"Start Date\"\r\n value={filters.invoiceStartDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'invoiceStartDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"End Date\"\r\n value={filters.invoiceEndDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'invoiceEndDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </Grid>\r\n </MuiPickersUtilsProvider>\r\n {/* <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => exportFile()}>\r\n Download\r\n </Button>\r\n </Grid> */}\r\n\r\n {/* <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => sendProviderEmail()}>\r\n Generate Billable Emails to Providers\r\n </Button>\r\n </Grid> */}\r\n </Grid>\r\n </Paper>\r\n\r\n\r\n { billableIntents ? \r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={filteredbillableIntents} columns={columns} pageSize={10} checkboxSelection={false} rowHeight={40} sortModel={[{ field: 'ndisPlanManagementProvider', sort: 'asc' }]} />\r\n </Paper>\r\n : ('None')\r\n }\r\n\r\n <Modal show={showClients} onHide={handleClientsClose} dialogClassName=\"editBilling-modal\">\r\n <Modal.Header closeButton className=\"editBilling-modal\">\r\n <Modal.Title>NDIS Bookings - {ndisProviderName} </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"editBilling-modal\">\r\n <GatherBillableDetail\r\n billablestatus={filters.invoiceStatus}\r\n approvalstatus={filters.approvalStatus}\r\n clients={ndisProviderClients}\r\n closeClients={setShowClients}\r\n providerFee={true}\r\n displayNote={true}\r\n />\r\n </Modal.Body>\r\n <Modal.Footer className=\"editBilling-modal\">\r\n <Button variant=\"secondary\" onClick={handleClientsClose}>\r\n Cancel\r\n </Button>\r\n </Modal.Footer>\r\n\r\n </Modal>\r\n\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { Button, Modal, Form, InputGroup } from \"react-bootstrap\";\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport { Paper, Grid, FormControl, Select, InputLabel, MenuItem, makeStyles } from '@material-ui/core';\r\nimport DateFnsUtils from '@date-io/date-fns';\r\nimport { MuiPickersUtilsProvider, KeyboardDatePicker,} from '@material-ui/pickers';\r\nimport GatherBillableDetail from \"../../../components/GatherBillableDetail\"\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\n// import { saveAs } from 'file-saver';\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\n\r\n// Need to rewrite this - as it is not completely correct \r\n// In the world of confusion - please note the following invoicing process \r\n//\r\n// Today we are billing per booking using the Services Table to define the prices - each booking has a billable type that is set (or defaulted) when a booking is made\r\n//\r\n// Process \r\n// \r\n// GatherBillable.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to email providers a list of those to be billed at the end of the month if still eliglible. \r\n// - Can toogle bookings to cancelled/noshow as needed \r\n// Invoices.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to create Invoices in Xero for these providers. \r\n// - This essentially a copy of GatherBillable though expect this will change at client acceptance occurs. \r\n// InvoiceLog.js - This is a searchable log of invoices/clients/providers \r\n// \r\n// PlatformPsychologist.js - Lists unbilled boookings \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Can toogle bookings to cancelled/noshow as needed //\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n noBorder: {\r\n border: \"none\",\r\n },\r\n\tformControl: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: 120,\r\n\t},\r\n\tformControlWide: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: '100%',\r\n\t},\r\n\tselectEmpty: {\r\n\t marginTop: theme.spacing(2),\r\n\t},\r\n\tlabel: {\r\n\t backgroundColor: '#fff',\r\n\t paddingLeft: 3,\r\n\t paddingRight: 3,\r\n\t}\r\n }));\r\n\r\n const useStylesDatePicker = makeStyles({\r\n root: {\r\n \"& .MuiInputBase-root\": {\r\n height: 33,\r\n }\r\n }\r\n });\r\n\r\nexport default function GatherBillableContractsProvider() \r\n{\r\n const dispatch = useDispatch()\r\n const classes = useStyles();\r\n const classesDatePicker = useStylesDatePicker();\r\n\r\n const billableIntents = useSelector(state => state.admin.BillableIntentContractsProvider)\r\n const filters = useSelector(state => state.admin.Filters)\r\n // const bookingBillableCSV = useSelector(state => state.admin.BookingBillableCSV);\r\n // const [exportExcelStatus, setExportExcelStatus] = useState('Not Started')\r\n const [searchTerm, setSearchTerm] = useState('')\r\n\r\n\r\n useEffect( () => {\r\n dispatch(Admin.actions.fetchBillableIntentsContractProvider({ startDate: filters.invoiceStartDate, endDate: filters.invoiceEndDate})) }, \r\n [dispatch, filters.invoiceStartDate, filters.invoiceEndDate] \r\n )\r\n\r\n const searchBillableIntents = (billableIntent) => {\r\n if ( true\r\n && (billableIntent => billableIntent.psychologistName.toLowerCase().search(searchTerm.toLowerCase()) > -1 || searchTerm.length === 0)\r\n && (!filters.invoiceStatus || filters.invoiceStatus === 'All' || (billableIntent.billingstatus === filters.invoiceStatus || billableIntent.billingstatus === 'Multiple'))\r\n && (!filters.approvalStatus || filters.approvalStatus === 'All' || (billableIntent.approvedstatus === filters.approvalStatus || billableIntent.approvedstatus === 'Multiple'))\r\n )\r\n {\r\n return billableIntent\r\n } \r\n }\r\n \r\n\r\n const filteredbillableIntents = billableIntents.filter(billableIntent => searchBillableIntents(billableIntent))\r\n const [showClients, setShowClients] = useState(false);\r\n const [providerClients, setProviderClients] = useState();\r\n const [psychologistID,setPsychologistID] = useState();\r\n const [providerName, setProviderName] = useState();\r\n\r\n\r\n // initial call from the download button - fires fetch action if needed, otherwise triggers download \r\n // const exportFile = () => {\r\n // if(exportExcelStatus === 'Not Started')\r\n // {\r\n // dispatch(Admin.actions.fetchBookingBillableCSV({ startDate: filters.invoiceStartDate, endDate: filters.invoiceEndDate, billableStatus: filters.invoiceStatus}))\r\n // setExportExcelStatus('Fetching')\r\n // }\r\n // } \r\n\r\n // grab the blob from state and tell the browser to download\r\n // const downloadExport = () => {\r\n // // Sort out filename\r\n // let headingStartDate = ''; \r\n // let headingEndDate = '';\r\n // let headingStatus = '';\r\n // //\r\n // if (filters.invoiceStartDate === '')\r\n // {\r\n // headingStartDate = '2020-01-01'\r\n // }\r\n // else\r\n // {\r\n // headingStartDate = filters.invoiceStartDate;\r\n // }\r\n // if (filters.invoiceEndDate === '')\r\n // {\r\n // let yourDate = new Date();\r\n // headingEndDate = yourDate.toISOString().split('T')[0];\r\n // console.log(headingEndDate);\r\n // }\r\n // else\r\n // {\r\n // headingEndDate = filters.invoiceEndDate;\r\n // }\r\n // if (filters.invoiceStatus === 'All')\r\n // {\r\n // headingStatus = '';\r\n // }\r\n // else\r\n // {\r\n // if (filters.invoiceStatus === 'Unbilled')\r\n // {\r\n // headingStatus = '-Unbilled Bookings';\r\n // }\r\n // else\r\n // {\r\n // headingStatus = '-Billed Bookings';\r\n // }\r\n // }\r\n //\r\n // var exportDocName = 'RHC-Bookings- FROM-' + headingStartDate + '-TO-' + headingEndDate + headingStatus;\r\n // if(bookingBillableCSV && bookingBillableCSV !== '')\r\n // {\r\n // const file = new Blob(\r\n // [Buffer.from(bookingBillableCSV)], \r\n // {type: 'text/csv'});\r\n // saveAs(file, `${exportDocName}.csv`);\r\n // }\r\n // }\r\n\r\n // useEffect to fire when status is 'Fetching' and we get the result in redux\r\n // useEffect( () => {\r\n // if(exportExcelStatus === 'Fetching' && bookingBillableCSV && bookingBillableCSV !== '')\r\n // {\r\n // downloadExport()\r\n // setExportExcelStatus('Not Started')\r\n // }\r\n // }, [exportExcelStatus, bookingBillableCSV])\r\n\r\n\r\n\r\n // function sendProviderEmail() \r\n // {\r\n // if (process.env.REACT_APP_DEBUG) \r\n // {\r\n // console.log ('Generating Billable Client Emails to Psychologists');\r\n // }\r\n // dispatch(Admin.actions.putCreateProviderBillableEmails());\r\n // }\r\n\r\n\r\n const loadClients = (thisPsychologist) => {\r\n setProviderName(thisPsychologist.psychologistName);\r\n setProviderClients(thisPsychologist.clients);\r\n setPsychologistID(thisPsychologist.id);\r\n setShowClients(true);\r\n }\r\n\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', width: 100, hide: true },\r\n { field: 'psychologistSurname', headerName: 'psychologistSurname', width: 100, hide: true },\r\n { field: 'psychologistName', headerName: 'Name', width: 300, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadClients(billableIntents.find(intent => intent.psychologistName === params.row.psychologistName))} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'psychologistEmail', headerName: 'Email', width: 300 },\r\n { field: 'xero', headerName: 'Xero Link', width: 200 },\r\n { field: 'totalClients', headerName: 'Bookings', width: 200},\r\n { field: 'total', headerName: 'Total', width: 120 },\r\n { field: 'billingstatus', headerName: 'Billing Status', width: 170 },\r\n { field: 'approvedstatus', headerName: 'Approval Status', width: 170 }\r\n\r\n ];\r\n\r\n\r\n function handleClientsClose() {\r\n setShowClients(false);\r\n } \r\n\r\n const handleSearch = (event) => {\r\n const searchTerm = event.target.value \r\n setSearchTerm(searchTerm)\r\n }\r\n\r\n\r\n return (\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h4 style={{ marginBottom: 12 }}>Review Contract Bookings</h4></Grid>\r\n </Grid>\r\n\r\n <Paper> \r\n <Grid container style={{ padding: 10 }}>\r\n <Grid item style={{ paddingLeft: 2, paddingRight: 10 }}>\r\n {/* <Grid item style={{ marginTop: 2, marginLeft: 10 }}> */}\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(event) => handleSearch(event)}\r\n autoComplete='OFF'\r\n style={{ height: 33 }}\r\n />\r\n </InputGroup>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl} size=\"small\">\r\n <InputLabel id=\"invoiceStatus-label\" className={classes.label}> Invoice Status</InputLabel>\r\n <Select\r\n labelId=\"InvoiceStatus-label\"\r\n id=\"InvoiceStatus\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\", height: 33 }}\r\n value={filters.invoiceStatus}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'invoiceStatus', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n <MenuItem value='Paid'>Paid</MenuItem>\r\n <MenuItem value='Not Paid'>Not Paid</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl} size=\"small\">\r\n <InputLabel id=\"approvalStatus-label\" className={classes.label}>Approval Status</InputLabel>\r\n <Select\r\n labelId=\"approvalStatus-label\"\r\n id=\"approvalStatus\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\", height: 33 }}\r\n value={filters.approvalStatus}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'approvalStatus', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n <MenuItem value='Approved'>Approved</MenuItem>\r\n <MenuItem value='Unapproved'>Unapproved</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"Start Date\"\r\n value={filters.invoiceStartDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'invoiceStartDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"End Date\"\r\n value={filters.invoiceEndDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'invoiceEndDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </Grid>\r\n </MuiPickersUtilsProvider>\r\n {/* <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => exportFile()}>\r\n Download\r\n </Button>\r\n </Grid> */}\r\n\r\n {/* <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => sendProviderEmail()}>\r\n Generate Billable Emails to Providers\r\n </Button>\r\n </Grid> */}\r\n </Grid>\r\n </Paper>\r\n\r\n\r\n { billableIntents ? \r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={filteredbillableIntents} columns={columns} pageSize={10} checkboxSelection={false} rowHeight={40} sortModel={[{ field: 'psychologistSurname', sort: 'asc' }]} />\r\n </Paper>\r\n : ('None')\r\n }\r\n\r\n <Modal show={showClients} onHide={handleClientsClose} dialogClassName=\"editprofile-modal\">\r\n <Modal.Header closeButton className=\"editprofile-modal\">\r\n <Modal.Title>Provider Bookings - {providerName} </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"editprofile-modal\">\r\n <GatherBillableDetail\r\n billablestatus={filters.invoiceStatus}\r\n clients={providerClients}\r\n psychologistID={psychologistID}\r\n closeClients={setShowClients}\r\n providerFee={true}\r\n providerPayments={true}\r\n displayNote={false}\r\n />\r\n </Modal.Body>\r\n <Modal.Footer className=\"editprofile-modal\">\r\n <Button variant=\"secondary\" onClick={handleClientsClose}>\r\n Cancel\r\n </Button>\r\n </Modal.Footer>\r\n\r\n </Modal>\r\n\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { Button, Modal, Form, InputGroup } from \"react-bootstrap\";\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport { Paper, Grid, FormControl, Select, InputLabel, MenuItem, makeStyles } from '@material-ui/core';\r\nimport DateFnsUtils from '@date-io/date-fns';\r\nimport { MuiPickersUtilsProvider, KeyboardDatePicker,} from '@material-ui/pickers';\r\nimport GatherBillableDetail from \"../../../components/GatherBillableDetail\"\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\n// import { saveAs } from 'file-saver';\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\n\r\n// Need to rewrite this - as it is not completely correct \r\n// In the world of confusion - please note the following invoicing process \r\n//\r\n// Today we are billing per booking using the Services Table to define the prices - each booking has a billable type that is set (or defaulted) when a booking is made\r\n//\r\n// Process \r\n// \r\n// GatherBillable.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to email providers a list of those to be billed at the end of the month if still eliglible. \r\n// - Can toogle bookings to cancelled/noshow as needed \r\n// Invoices.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to create Invoices in Xero for these providers. \r\n// - This essentially a copy of GatherBillable though expect this will change at client acceptance occurs. \r\n// InvoiceLog.js - This is a searchable log of invoices/clients/providers \r\n// \r\n// PlatformPsychologist.js - Lists unbilled boookings \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Can toogle bookings to cancelled/noshow as needed //\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n noBorder: {\r\n border: \"none\",\r\n },\r\n\tformControl: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: 120,\r\n\t},\r\n\tformControlWide: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: '100%',\r\n\t},\r\n\tselectEmpty: {\r\n\t marginTop: theme.spacing(2),\r\n\t},\r\n\tlabel: {\r\n\t backgroundColor: '#fff',\r\n\t paddingLeft: 3,\r\n\t paddingRight: 3,\r\n\t}\r\n }));\r\n\r\n const useStylesDatePicker = makeStyles({\r\n root: {\r\n \"& .MuiInputBase-root\": {\r\n height: 33,\r\n }\r\n }\r\n });\r\n\r\nexport default function GatherBillableNDISProvider() \r\n{\r\n const dispatch = useDispatch()\r\n const classes = useStyles();\r\n const classesDatePicker = useStylesDatePicker();\r\n\r\n const billableIntents = useSelector(state => state.admin.BillableIntentNDISProvider)\r\n const filters = useSelector(state => state.admin.Filters)\r\n // const bookingBillableCSV = useSelector(state => state.admin.BookingBillableCSV);\r\n // const [exportExcelStatus, setExportExcelStatus] = useState('Not Started')\r\n const [searchTerm, setSearchTerm] = useState('')\r\n\r\n\r\n useEffect( () => {\r\n dispatch(Admin.actions.fetchBillableIntentsNDISProvider({ startDate: filters.invoiceStartDate, endDate: filters.invoiceEndDate})) }, \r\n [dispatch, filters.invoiceStartDate, filters.invoiceEndDate] \r\n )\r\n\r\n const searchBillableIntents = (billableIntent) => {\r\n if ( true\r\n && (billableIntent => billableIntent.ndisplanmanagementprovider.toLowerCase().search(searchTerm.toLowerCase()) > -1 || searchTerm.length === 0)\r\n && (!filters.invoiceStatus || filters.invoiceStatus === 'All' || (billableIntent.billingstatus === filters.invoiceStatus || billableIntent.billingstatus === 'Multiple'))\r\n && (!filters.approvalStatus || filters.approvalStatus === 'All' || (billableIntent.approvedstatus === filters.approvalStatus || billableIntent.approvedstatus === 'Multiple'))\r\n )\r\n {\r\n return billableIntent\r\n } \r\n }\r\n \r\n\r\n const filteredbillableIntents = billableIntents.filter(billableIntent => searchBillableIntents(billableIntent))\r\n const [showClients, setShowClients] = useState(false);\r\n const [providerClients, setProviderClients] = useState();\r\n const [psychologistID,setPsychologistID] = useState();\r\n const [providerName, setProviderName] = useState();\r\n\r\n // initial call from the download button - fires fetch action if needed, otherwise triggers download \r\n // const exportFile = () => {\r\n // if(exportExcelStatus === 'Not Started')\r\n // {\r\n // dispatch(Admin.actions.fetchBookingBillableCSV({ startDate: filters.invoiceStartDate, endDate: filters.invoiceEndDate, billableStatus: filters.invoiceStatus}))\r\n // setExportExcelStatus('Fetching')\r\n // }\r\n // } \r\n\r\n // grab the blob from state and tell the browser to download\r\n // const downloadExport = () => {\r\n // // Sort out filename\r\n // let headingStartDate = ''; \r\n // let headingEndDate = '';\r\n // let headingStatus = '';\r\n // //\r\n // if (filters.invoiceStartDate === '')\r\n // {\r\n // headingStartDate = '2020-01-01'\r\n // }\r\n // else\r\n // {\r\n // headingStartDate = filters.invoiceStartDate;\r\n // }\r\n // if (filters.invoiceEndDate === '')\r\n // {\r\n // let yourDate = new Date();\r\n // headingEndDate = yourDate.toISOString().split('T')[0];\r\n // console.log(headingEndDate);\r\n // }\r\n // else\r\n // {\r\n // headingEndDate = filters.invoiceEndDate;\r\n // }\r\n // if (filters.invoiceStatus === 'All')\r\n // {\r\n // headingStatus = '';\r\n // }\r\n // else\r\n // {\r\n // if (filters.invoiceStatus === 'Unbilled')\r\n // {\r\n // headingStatus = '-Unbilled Bookings';\r\n // }\r\n // else\r\n // {\r\n // headingStatus = '-Billed Bookings';\r\n // }\r\n // }\r\n //\r\n // var exportDocName = 'RHC-Bookings- FROM-' + headingStartDate + '-TO-' + headingEndDate + headingStatus;\r\n // if(bookingBillableCSV && bookingBillableCSV !== '')\r\n // {\r\n // const file = new Blob(\r\n // [Buffer.from(bookingBillableCSV)], \r\n // {type: 'text/csv'});\r\n // saveAs(file, `${exportDocName}.csv`);\r\n // }\r\n // }\r\n\r\n // useEffect to fire when status is 'Fetching' and we get the result in redux\r\n // useEffect( () => {\r\n // if(exportExcelStatus === 'Fetching' && bookingBillableCSV && bookingBillableCSV !== '')\r\n // {\r\n // downloadExport()\r\n // setExportExcelStatus('Not Started')\r\n // }\r\n // }, [exportExcelStatus, bookingBillableCSV])\r\n\r\n\r\n\r\n // function sendProviderEmail() \r\n // {\r\n // if (process.env.REACT_APP_DEBUG) \r\n // {\r\n // console.log ('Generating Billable Client Emails to Psychologists');\r\n // }\r\n // dispatch(Admin.actions.putCreateProviderBillableEmails());\r\n // }\r\n const loadClients = (thisPsychologist) => {\r\n setProviderName(thisPsychologist.psychologistName);\r\n setProviderClients(thisPsychologist.clients);\r\n setPsychologistID(thisPsychologist.id);\r\n setShowClients(true);\r\n }\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', width: 100, hide: true },\r\n { field: 'psychologistSurname', headerName: 'psychologistSurname', width: 100, hide: true },\r\n { field: 'psychologistName', headerName: 'Name', width: 300, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadClients(billableIntents.find(intent => intent.psychologistName === params.row.psychologistName))} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'psychologistEmail', headerName: 'Email', width: 300 },\r\n { field: 'xero', headerName: 'Xero Link', width: 200 },\r\n { field: 'totalClients', headerName: 'Bookings', width: 200},\r\n { field: 'total', headerName: 'Total', width: 120 },\r\n { field: 'billingstatus', headerName: 'Payment Status', width: 170 },\r\n { field: 'approvedstatus', headerName: 'Approval Status', width: 170 }\r\n ];\r\n\r\n function handleClientsClose() {\r\n setShowClients(false);\r\n } \r\n\r\n const handleSearch = (event) => {\r\n const searchTerm = event.target.value \r\n setSearchTerm(searchTerm)\r\n }\r\n\r\n\r\n return (\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h4 style={{ marginBottom: 12 }}>Review NDIS Bookings (Do Not Use For bookings after 1/10/24)</h4></Grid>\r\n </Grid>\r\n\r\n <Paper> \r\n <Grid container style={{ padding: 10 }}>\r\n <Grid item style={{ paddingLeft: 2, paddingRight: 10 }}>\r\n {/* <Grid item style={{ marginTop: 2, marginLeft: 10 }}> */}\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(event) => handleSearch(event)}\r\n autoComplete='OFF'\r\n style={{ height: 33 }}\r\n />\r\n </InputGroup>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl} size=\"small\">\r\n <InputLabel id=\"invoiceStatus-label\" className={classes.label}> Invoice Status</InputLabel>\r\n <Select\r\n labelId=\"InvoiceStatus-label\"\r\n id=\"InvoiceStatus\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\", height: 33 }}\r\n value={filters.invoiceStatus}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'invoiceStatus', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n <MenuItem value='Paid'>Paid</MenuItem>\r\n <MenuItem value='Not Paid'>Not Paid</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl} size=\"small\">\r\n <InputLabel id=\"approvalStatus-label\" className={classes.label}>Approval Status</InputLabel>\r\n <Select\r\n labelId=\"approvalStatus-label\"\r\n id=\"approvalStatus\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\", height: 33 }}\r\n value={filters.approvalStatus}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'approvalStatus', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n <MenuItem value='Approved'>Approved</MenuItem>\r\n <MenuItem value='Unapproved'>Unapproved</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"Start Date\"\r\n value={filters.invoiceStartDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'invoiceStartDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"End Date\"\r\n value={filters.invoiceEndDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'invoiceEndDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </Grid>\r\n </MuiPickersUtilsProvider>\r\n {/* <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => exportFile()}>\r\n Download\r\n </Button>\r\n </Grid> */}\r\n\r\n {/* <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => sendProviderEmail()}>\r\n Generate Billable Emails to Providers\r\n </Button>\r\n </Grid> */}\r\n </Grid>\r\n </Paper>\r\n\r\n\r\n { billableIntents ? \r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={filteredbillableIntents} columns={columns} pageSize={10} checkboxSelection={false} rowHeight={40} sortModel={[{ field: 'psychologistSurname', sort: 'asc' }]} />\r\n </Paper>\r\n : ('None')\r\n }\r\n\r\n <Modal show={showClients} onHide={handleClientsClose} dialogClassName=\"editprofile-modal\">\r\n <Modal.Header closeButton className=\"editprofile-modal\">\r\n <Modal.Title>Provider Bookings - {providerName} </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"editprofile-modal\">\r\n <GatherBillableDetail\r\n billablestatus={filters.invoiceStatus}\r\n clients={providerClients}\r\n psychologistID={psychologistID}\r\n closeClients={setShowClients}\r\n providerFee={true}\r\n providerPayments={true}\r\n displayNote={true}\r\n />\r\n </Modal.Body>\r\n <Modal.Footer className=\"editprofile-modal\">\r\n <Button variant=\"secondary\" onClick={handleClientsClose}>\r\n Cancel\r\n </Button>\r\n </Modal.Footer>\r\n\r\n </Modal>\r\n\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n","import React, { useState, useEffect, useRef } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport * as Auth from \"../store/ducks/auth.duck\";\r\nimport { Button, Form, Row, Col } from \"react-bootstrap\";\r\nimport { Grid, Typography, List, ListItem, ListItemText } from '@material-ui/core';\r\nimport { useReactToPrint } from 'react-to-print';\r\n\r\n// import { makeStyles } from '@material-ui/core';\r\n\r\nexport default function MFAForm(props) {\r\n \r\n const dispatch = useDispatch()\r\n \r\n useEffect( () => { dispatch(Auth.actions.getMFA()) }, [dispatch] )\r\n const mfaQR = useSelector(state => state.auth.MFAQR)\r\n const codeAccepted = useSelector(state => state.auth.CodeAccepted)\r\n const backupCodes = useSelector(state => state.auth.BackupCodes)\r\n const [currentLoadingQRCode,setcurrentLoadingQRCode] = useState(false)\r\n const [confirmationCode, setConfirmationCode] = useState()\r\n const [confirmationCodeHelpText, setConfirmationCodeHelpText] = useState('') \r\n \r\n \r\n // For a language that is designed to work with API it is primitive that I need to set a flag to stop the React_PDF from erroring when a PDF is not loaded \r\n if (!currentLoadingQRCode && mfaQR && mfaQR.length > 5)\r\n {\r\n setcurrentLoadingQRCode(true);\r\n }\r\n \r\n function confirmMFA() {\r\n // Determine if the criteria has been made \r\n if ((confirmationCode.length !== 6))\r\n {\r\n setConfirmationCodeHelpText(\"Please enter the six digit code\");\r\n }\r\n // Ok Time to Dispatch \r\n process.env.REACT_APP_DEBUG && console.log(confirmationCode);\r\n dispatch(Auth.actions.postConfirmCode({ confirmCode: confirmationCode}));\r\n // props.onCloseAPIKey();\r\n }\r\n\r\n function activateMFA() {\r\n // Ok Time to Dispatch \r\n dispatch(Auth.actions.postActivateMFA({type : props.type}));\r\n props.onCloseMFA();\r\n }\r\n\r\n const componentRef = useRef();\r\n const handlePrint = useReactToPrint({\r\n content: () => componentRef.current,\r\n });\r\n\r\n // const useStyles = makeStyles((theme) => ({\r\n // root: {\r\n // // minWidth: 200,\r\n // // maxWidth: 200,\r\n // },\r\n // media: {\r\n // height: 200,\r\n // },\r\n // title: {\r\n // fontSize: 14,\r\n // },\r\n // pos: {\r\n // marginBottom: 12,\r\n // },\r\n // }));\r\n \r\n // const classes = useStyles();\r\n\r\n return(\r\n <>\r\n {codeAccepted ?\r\n <>\r\n <Row> \r\n <p style={{ marginLeft:10, fontWeight:600 }}>Backup Codes</p>\r\n </Row>\r\n <Row style={{ marginTop: 15}}>\r\n <Col md=\"12\"> \r\n <Form.Group >\r\n <Form.Label>Backup codes are unsed to access your account in the event that you cannot receive two-factor authentication. For security reasons, each code can only be used once.</Form.Label>\r\n <Form.Label style={{ fontWeight:600}}>Print or copy your Backup Codes before continuing two-factor authentication setup</Form.Label>\r\n <Row style={{ marginTop:10, marginBottom:20, padding:5, border:\"solid 1px gray\"}} ref={componentRef}>\r\n <Col md=\"6\">\r\n <List >\r\n {backupCodes.map((row,index) => {\r\n if(index+1 <= backupCodes.length/2)\r\n {\r\n return (\r\n <ListItem key={index} dense button >\r\n <ListItemText id={row} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography>{row}</Typography>} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Col>\r\n <Col md=\"6\">\r\n <List >\r\n {backupCodes.map((row,index) => {\r\n if(index+1 > backupCodes.length/2)\r\n {\r\n return (\r\n <ListItem key={index} dense button >\r\n <ListItemText id={row} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography>{row}</Typography>} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Col> \r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container spacing={0} padding={6} >\r\n <Button variant=\"warning\" onClick={()=> handlePrint()}>\r\n Print\r\n </Button>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={() => navigator.clipboard.writeText(backupCodes)} style={{ marginLeft:20}}>\r\n Copy\r\n </Button>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <hr />\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container spacing={0} padding={6} justifyContent=\"space-between\">\r\n <Button variant=\"light\" onClick={()=>props.onCloseMFA()}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"success\" size=\"sm\" onClick={() => activateMFA()}>\r\n Finish\r\n </Button>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n <>\r\n <Row> \r\n <p style={{ marginLeft:10 }}>Scan the QR code below with the two-factor authenticaiton app on your phone.</p>\r\n </Row>\r\n {currentLoadingQRCode ? \r\n <div style={{ marginTop:10, padding:5, border:\"solid 1px gray\", maxWidth:160}}>\r\n <img src={`data:image/png;base64,${mfaQR}`} style={{ maxHeight: 150 }} alt='MFA QR Code' />\r\n </div>\r\n : \r\n <div style={{ marginLeft: 15, marginTop: 15 }}>No QR code available</div>\r\n }\r\n <Row style={{ marginTop: 15}}>\r\n <Col md=\"12\"> \r\n <Form.Group >\r\n <Form.Label>Enter the six-digit code from the application</Form.Label>\r\n <Form.Label>After scanning the QR code, the app will display a six-digit code that you can enter below.</Form.Label>\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Control type=\"text\" name=\"confirmationCode\" defaultValue={confirmationCode} onBlur={(event) => setConfirmationCode(event.target.value)} autoComplete='new-password' style={{ borderColor: '#D1D1D1'}} />\r\n {confirmationCodeHelpText.length ? (<p className='error-help'>{confirmationCodeHelpText}</p>) : ''}\r\n </Col>\r\n { confirmationCodeHelpText && confirmationCodeHelpText.length > 1 ?\r\n <Col md=\"4\">\r\n <Form.Label style={{ color: 'red', marginTop: 10}}>Code Too Short - Try Again</Form.Label>\r\n </Col>\r\n :\r\n null\r\n } \r\n { codeAccepted === false ?\r\n <Col md=\"4\">\r\n <Form.Label style={{ color: 'red', marginTop: 10}}>Code Not Valid - Try Again</Form.Label>\r\n </Col>\r\n :\r\n null\r\n }\r\n </Row>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container spacing={0} padding={6} justifyContent=\"space-between\">\r\n <Button variant=\"light\" onClick={()=>props.onCloseMFA()}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"success\" size=\"sm\" onClick={() => confirmMFA()}>\r\n Next\r\n </Button>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n </>\r\n }\r\n </>\r\n )\r\n\r\n\r\n}\r\n \r\n","import React, { useState, useEffect } from \"react\";\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport * as Reference from \"../../../store/ducks/reference.duck\";\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport * as Auth from \"../../../store/ducks/auth.duck\";\r\nimport MFAForm from \"../../../components/MFAForm\";\r\nimport { Button, Modal, Form, Row, Col } from \"react-bootstrap\";\r\nimport { Paper, Grid, TextField} from '@material-ui/core';\r\nimport { Formik } from 'formik';\r\nimport * as Yup from \"yup\";\r\nimport Alert from '@material-ui/lab/Alert';\r\nimport KTUtil from \"../../../../_metronic/_assets/js/util\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport \"../../../../_metronic/_assets/sass/pages/login/login-1.scss\";\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\n\r\n\r\n\r\nexport default function ProfileAdmin() {\r\n\r\n const dispatch = useDispatch()\r\n \r\n useEffect( () => { dispatch(Admin.actions.fetchAdminUser()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchTimeZone()) }, [dispatch] )\r\n\r\n var [showMFA, setShowMFA] = useState(false);\r\n const timeZone = useSelector(state => state.reference.TimeZone)\r\n \r\n \r\n // now init the fields with values so that Formik can manage the touched state\r\n const adminInit = {\r\n firstname: '', \r\n surname: '', \r\n email: '', \r\n }\r\n\r\n const loadMFAInit = () => {\r\n // Load Form\r\n setShowMFA(true);\r\n }\r\n\r\n function handleMFAClose() {\r\n setShowMFA(false);\r\n } \r\n\r\n function DeactivateMFA() {\r\n // Ok Time to Dispatch \r\n dispatch(Auth.actions.postDeactivateMFA({type : 'Admin'}));\r\n }\r\n\r\n\r\n // get the psychologist from state and merge with the initialised fields\r\n const adminUsers = useSelector(state => state.admin.AdminUser);\r\n var myUser = {...adminInit, ...adminUsers};\r\n\r\n function submitForm(data){\r\n // Save data \r\n dispatch(Admin.actions.putAdminUser(data))\r\n }\r\n\r\n const validationSchema = Yup.object().shape({\r\n firstname: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n .required(\"First Name is required\"),\r\n surname: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n .required(\"Surname is required\"),\r\n email: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(200,\"Too Long\")\r\n .email(\"Enter a valid email\")\r\n .required(\"Email is required\"),\r\n });\r\n\r\n return (\r\n <>\r\n <Formik\r\n enableReinitialize={true}\r\n initialValues={myUser}\r\n validationSchema = {validationSchema}\r\n onSubmit={(values, actions) => {\r\n submitForm(values);\r\n actions.setSubmitting(false);\r\n }}\r\n >\r\n {props => {\r\n const { values, errors, touched, handleChange, handleSubmit, setFieldValue, isSubmitting } = props;\r\n const change = (name,e) => { e.persist(); handleChange(e); }; \r\n return (\r\n <form noValidate={true} autoComplete=\"off\" onSubmit={!isSubmitting ? handleSubmit : undefined} >\r\n\r\n <Paper style={{ backgroundColor: \"rgb(245,245,245)\", padding: 20 }} >\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-end\">\r\n <Grid item md={6} xs={12}>\r\n <h2>Profile</h2>\r\n </Grid>\r\n <Grid item md={3} xs={6} style={{ fontStyle: \"italic\", fontWeight: 400, textAlign: \"right\", paddingBottom: 4, fontSize: 12 }}>\r\n * indicates required fields\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\"> \r\n {values.message ? (\r\n <Alert severity=\"info\" style={{ marginBottom: 10, marginTop: 8, fontSize: 14 }}>\r\n {values.message}\r\n </Alert>) \r\n : null\r\n }\r\n </Col>\r\n </Row>\r\n <hr style={{ marginTop: 4 }}></hr>\r\n <Row>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>First Name *</Form.Label>\r\n <Form.Control type=\"text\" name=\"firstname\" value={values.firstname} onChange={change.bind(null, \"firstname\")} autoComplete='new-password' isInvalid={touched.firstname && !!errors.firstname} isValid={touched.firstname && !errors.firstname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.firstname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Surname *</Form.Label>\r\n <Form.Control type=\"text\" name=\"surname\" value={values.surname} onChange={change.bind(null, \"surname\")} autoComplete='new-password' isInvalid={touched.surname && !!errors.surname} isValid={touched.surname && !errors.surname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.surname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Email *</Form.Label>\r\n <Form.Control type=\"text\" name=\"email\" value={values.email} onChange={change.bind(null, \"email\")} isInvalid={touched.email && !!errors.email} isValid={touched.email && !errors.email} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.email}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label>TimeZone</Form.Label>\r\n <Autocomplete\r\n id=\"profileTimeZone\"\r\n variant=\"outlined\"\r\n options={timeZone}\r\n getOptionLabel={(option) => option.name}\r\n value={timeZone.find(v => v.systemName === values.timeZone) || ''}\r\n onChange={(event, newValue) => setFieldValue(\"timeZone\", newValue.systemName)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"TimeZoneSelector\"\r\n style={{backgroundColor: \"white\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <h4>Multi Factor Authentication</h4>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label> Status</Form.Label>\r\n <Form.Control type=\"text\" name=\"MFAConfigured\" value={values.mfaconfigured} readOnly />\r\n </Form.Group>\r\n </Col>\r\n {values.mfaconfigured !== 'Configured' ?\r\n <Col md=\"3\" style={{ paddingTop: 29}}> \r\n <Button \r\n variant=\"primary\" \r\n size=\"sm\" \r\n style={{ marginLeft: 5, }} \r\n onClick={() => loadMFAInit()}\r\n >\r\n Enable \r\n </Button>\r\n </Col>\r\n :\r\n <Col md=\"3\" style={{ paddingTop: 29}}> \r\n <Button \r\n variant=\"danger\" \r\n size=\"sm\" \r\n style={{ marginLeft: 5, }} \r\n onClick={() => DeactivateMFA()}\r\n >\r\n Disable \r\n </Button>\r\n </Col>\r\n }\r\n </Row> \r\n <h4>Login Details (Leave blank unless updating password)</h4>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>New Password</Form.Label>\r\n <Form.Control type=\"password\" name=\"profilePassword\" value={values.profilePassword} autoComplete='new-password' onChange={change.bind(null, \"profilePassword\")} isInvalid={touched.profilePassword && !!errors.profilePassword} isValid={touched.profilePassword && !errors.profilePassword} />\r\n <Form.Control.Feedback type=\"invalid\">{errors.profilePassword}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>New Confirm Password</Form.Label>\r\n <Form.Control type=\"password\" name=\"profilePasswordConfirmation\" value={values.profilePasswordConfirmation} onChange={change.bind(null, \"profilePasswordConfirmation\")} isInvalid={touched.profilePasswordConfirmation && !!errors.profilePasswordConfirmation} isValid={touched.profilePasswordConfirmation && !errors.profilePasswordConfirmation} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.profilePasswordConfirmation}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item md={3} xs={6}>\r\n \r\n </Grid>\r\n <Grid item md={3} xs={6} style={{ textAlign: 'right' }}>\r\n {!KTUtil.isEmpty(errors) && <div style={{ color: 'red', padding: 8 }}>There are incomplete fields above!</div>}\r\n <Button variant=\"primary\" type=\"submit\" >\r\n Submit\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n </Paper>\r\n </form>\r\n )\r\n }}\r\n </Formik>\r\n\r\n <Modal show={showMFA} onHide={handleMFAClose} centered dialogClassName=\"mfa-modal-dialog\">\r\n <Modal.Header closeButton >\r\n <Modal.Title>Configure MFA</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"mfa-modal\">\r\n <MFAForm \r\n referenceID={myUser.id}\r\n type={'Admin'}\r\n onCloseMFA={handleMFAClose}\r\n />\r\n </Modal.Body>\r\n </Modal>\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n );\r\n}\r\n\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\n\r\nimport { Grid, GridColumn, GridToolbar } from '@progress/kendo-react-grid';\r\n\r\nimport { process } from '@progress/kendo-data-query';\r\nimport { MuiPickersUtilsProvider, KeyboardDatePicker} from '@material-ui/pickers';\r\nimport { Grid as MGrid, makeStyles } from '@material-ui/core';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport DateFnsUtils from '@date-io/date-fns';\r\n// import * as Reference from \"../../../store/ducks/reference.duck\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\n\r\nconst useStylesDatePicker = makeStyles({\r\n root: {\r\n \"& .MuiInputBase-root\": {\r\n height: 33,\r\n }\r\n }\r\n});\r\n\r\n// Note this process previously created invoices in Xero on behalf of NDIS providers \r\n// This is temporarily running until Megan moved to approved NDIS/EAP/Contract Bookings Process \r\n\r\nexport default function PaymentNDIS() \r\n{\r\n const dispatch = useDispatch()\r\n const classesDatePicker = useStylesDatePicker();\r\n const filters = useSelector(state => state.admin.Filters)\r\n const billableIntents = useSelector(state => state.admin.BillableIntentNDISProvider)\r\n\r\n const [dataState, setDataState] = useState({\r\n skip: 0,\r\n take: 20,\r\n sort: [{\r\n field: 'psychologistSurname',\r\n dir: 'asc'\r\n }],\r\n });\r\n\r\n useEffect( () => {\r\n dispatch(Admin.actions.fetchBillableIntentsNDISProvider({ startDate: filters.geninvoiceStartDate, endDate: filters.geninvoiceEndDate, status: 'Not Paid'})) }, \r\n [dispatch, filters.geninvoiceStartDate, filters.geninvoiceEndDate] \r\n )\r\n \r\n const [dataResult, setDataResult] = useState(process(billableIntents, dataState)); \r\n const [prevBillableIntents, setPrevBillableIntents] = useState();\r\n\r\n useEffect( () => {\r\n if ((JSON.stringify(billableIntents) !== JSON.stringify(prevBillableIntents)) && billableIntents.length > 0)\r\n {\r\n // console.log('Refreshing Data')\r\n setPrevBillableIntents(billableIntents)\r\n setDataResult(process(billableIntents, dataState))\r\n // console.log('dataResult')\r\n // console.log(dataResult)\r\n }\r\n }, [prevBillableIntents, billableIntents, dataResult, dataState])\r\n\r\n // This is the expanded grid section \r\n const DetailComponent = props => {\r\n const dataItem = props.dataItem;\r\n return <div>\r\n <Grid style={{width: \"1600px\"}} \r\n data={dataItem.clients} \r\n >\r\n <GridColumn field=\"clientName\" title=\"Client Name\" width=\"220px\" />\r\n <GridColumn field=\"providerName\" title=\"Provider Name\" width=\"220px\" />\r\n <GridColumn field=\"bookingDate\" title=\"Booking Date\" width=\"200px\" />\r\n <GridColumn field=\"cost\" filter={\"numeric\"} title=\"NDIS Cost (exGST)\" width=\"130px\" />\r\n <GridColumn field=\"providerfee\" filter={\"numeric\"} title=\"Fee to Provider (exGST)\" width=\"170px\" />\r\n <GridColumn field=\"status\" filter={\"numeric\"} title=\"Status\" width=\"80px\" />\r\n <GridColumn field=\"note\" title=\"Note\" width=\"200px\" />\r\n </Grid> \r\n </div>;\r\n };\r\n\r\n function sendProviderEmail() \r\n {\r\n //console.log ('Generating Invoices in Xero for NDIS');\r\n dispatch(Admin.actions.putCreateInvoicesNDISProvider({ startDate: filters.geninvoiceStartDate, endDate: filters.geninvoiceEndDate}));\r\n }\r\n\r\n\r\n\r\n const dataStateChange = event => {\r\n setDataResult(process(billableIntents, event.dataState));\r\n setDataState(event.dataState);\r\n };\r\n\r\n const expandChange = event => {\r\n const isExpanded = event.dataItem.expanded === undefined ? event.dataItem.aggregates : event.dataItem.expanded;\r\n event.dataItem.expanded = !isExpanded;\r\n setDataResult({ ...dataResult});\r\n };\r\n\r\n\r\n return(\r\n <>\r\n <div>\r\n <h4>Select Period for the NDIS Providers to be Paid (Do Not Use For bookings after 4/8/24)</h4>\r\n <MGrid container style={{ padding: 10 }}>\r\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\r\n <MGrid item style={{ paddingLeft: 2, paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"Start Date\"\r\n value={filters.geninvoiceStartDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'geninvoiceStartDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </MGrid>\r\n <MGrid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"End Date\"\r\n value={filters.geninvoiceEndDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'geninvoiceEndDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </MGrid>\r\n </MuiPickersUtilsProvider>\r\n </MGrid>\r\n <Grid\r\n style={{height: \"700px\",}}\r\n sortable={true}\r\n reorderable={true}\r\n pageable={{buttonCount: 4,pageSizes: true,}}\r\n data={dataResult} {...dataState} \r\n onDataStateChange={dataStateChange}\r\n detail={DetailComponent}\r\n expandField=\"expanded\"\r\n onExpandChange={expandChange}\r\n >\r\n <GridToolbar>\r\n <button title=\"General NDIS Payments for Providers in Xero\" className=\"k-button k-primary\" onClick={sendProviderEmail}>\r\n Generate NDIS Provider Payments\r\n </button> \r\n </GridToolbar>\r\n <GridColumn field=\"psychologistName\" title=\"Name\" width=\"300px\" />\r\n <GridColumn field=\"psychologistEmail\" title=\"Email\" width=\"350px\" />\r\n <GridColumn field=\"xero\" title=\"Xero Link\" width=\"100px\" />\r\n <GridColumn field=\"total\" filter={\"numeric\"} title=\"Total Cost (exGST)\" width=\"600px\" />\r\n </Grid>\r\n </div>\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\n\r\nimport { Grid, GridColumn, GridToolbar } from '@progress/kendo-react-grid';\r\n\r\nimport { process } from '@progress/kendo-data-query';\r\nimport { MuiPickersUtilsProvider, KeyboardDatePicker} from '@material-ui/pickers';\r\nimport { Grid as MGrid, makeStyles } from '@material-ui/core';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport DateFnsUtils from '@date-io/date-fns';\r\n// import * as Reference from \"../../../store/ducks/reference.duck\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\n\r\nconst useStylesDatePicker = makeStyles({\r\n root: {\r\n \"& .MuiInputBase-root\": {\r\n height: 33,\r\n }\r\n }\r\n});\r\n\r\n// Note this process previously created invoices in Xero on behalf of Contract providers \r\n// This is temporarily running until Megan moved to approved NDIS/EAP/Contract Bookings Process \r\n\r\n\r\nexport default function PaymentContracts() \r\n{\r\n const dispatch = useDispatch()\r\n const classesDatePicker = useStylesDatePicker();\r\n const filters = useSelector(state => state.admin.Filters)\r\n const billableIntents = useSelector(state => state.admin.BillableIntentContractsProvider)\r\n\r\n const [dataState, setDataState] = useState({\r\n skip: 0,\r\n take: 20,\r\n sort: [{\r\n field: 'psychologistSurname',\r\n dir: 'asc'\r\n }],\r\n });\r\n\r\n useEffect( () => {\r\n dispatch(Admin.actions.fetchBillableIntentsContractProvider({ startDate: filters.geninvoiceStartDate, endDate: filters.geninvoiceEndDate, status: 'Not Paid'})) }, \r\n [dispatch, filters.geninvoiceStartDate, filters.geninvoiceEndDate] \r\n )\r\n\r\n \r\n const [dataResult, setDataResult] = useState(process(billableIntents, dataState)); \r\n const [prevBillableIntents, setPrevBillableIntents] = useState();\r\n\r\n useEffect( () => {\r\n if ((JSON.stringify(billableIntents) !== JSON.stringify(prevBillableIntents)) && billableIntents.length > 0)\r\n {\r\n // console.log('Refreshing Data')\r\n setPrevBillableIntents(billableIntents)\r\n setDataResult(process(billableIntents, dataState))\r\n // console.log('dataResult')\r\n // console.log(dataResult)\r\n }\r\n }, [prevBillableIntents, billableIntents, dataResult, dataState])\r\n\r\n // This is the expanded grid section \r\n const DetailComponent = props => {\r\n const dataItem = props.dataItem;\r\n return <div>\r\n <Grid style={{width: \"1800px\"}} \r\n data={dataItem.clients} \r\n >\r\n <GridColumn field=\"clientName\" title=\"Client Name\" width=\"300px\" />\r\n <GridColumn field=\"providerName\" title=\"Provider Name\" width=\"220px\" />\r\n <GridColumn field=\"bookingDate\" title=\"Booking Date\" width=\"200px\" />\r\n <GridColumn field=\"cost\" filter={\"numeric\"} title=\"Contract Cost (exGST)\" width=\"130px\" />\r\n <GridColumn field=\"providerfee\" filter={\"numeric\"} title=\"Fee to Provider (exGST)\" width=\"170px\" />\r\n <GridColumn field=\"status\" filter={\"numeric\"} title=\"Status\" width=\"80px\" />\r\n </Grid> \r\n </div>;\r\n };\r\n\r\n function sendProviderEmail() \r\n {\r\n //console.log ('Generating Invoices in Xero for NDSI');\r\n dispatch(Admin.actions.putCreateInvoicesContractProvider({ startDate: filters.geninvoiceStartDate, endDate: filters.geninvoiceEndDate}));\r\n }\r\n\r\n\r\n\r\n const dataStateChange = event => {\r\n setDataResult(process(billableIntents, event.dataState));\r\n setDataState(event.dataState);\r\n };\r\n\r\n const expandChange = event => {\r\n const isExpanded = event.dataItem.expanded === undefined ? event.dataItem.aggregates : event.dataItem.expanded;\r\n event.dataItem.expanded = !isExpanded;\r\n setDataResult({ ...dataResult});\r\n };\r\n\r\n\r\n return(\r\n <>\r\n <div>\r\n <h4>Select Period for the Contract Providers to be Paid (Do Not Use For bookings after 4/8/24)</h4>\r\n <MGrid container style={{ padding: 10 }}>\r\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\r\n <MGrid item style={{ paddingLeft: 2, paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"Start Date\"\r\n value={filters.geninvoiceStartDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'geninvoiceStartDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </MGrid>\r\n <MGrid item style={{ paddingRight: 10 }}>\r\n <KeyboardDatePicker\r\n disableToolbar\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id=\"date-picker-inline\"\r\n label=\"End Date\"\r\n value={filters.geninvoiceEndDate}\r\n style={{ marginTop: 0, maxWidth: 140 }}\r\n className={classesDatePicker.root}\r\n onChange={(newValue) => dispatch(Admin.actions.setFilters({ filterName: 'geninvoiceEndDate', filterValue: newValue }))}\r\n InputLabelProps={{ shrink: true }}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n />\r\n </MGrid>\r\n </MuiPickersUtilsProvider>\r\n </MGrid>\r\n <Grid\r\n style={{height: \"700px\",}}\r\n sortable={true}\r\n reorderable={true}\r\n pageable={{buttonCount: 4,pageSizes: true,}}\r\n data={dataResult} {...dataState} \r\n onDataStateChange={dataStateChange}\r\n detail={DetailComponent}\r\n expandField=\"expanded\"\r\n onExpandChange={expandChange}\r\n >\r\n <GridToolbar>\r\n <button title=\"General Contract Payments for Providers in Xero\" className=\"k-button k-primary\" onClick={sendProviderEmail}>\r\n Generate Contract Provider Payments\r\n </button> \r\n </GridToolbar>\r\n <GridColumn field=\"psychologistName\" title=\"Name\" width=\"300px\" />\r\n <GridColumn field=\"psychologistEmail\" title=\"Email\" width=\"350px\" />\r\n <GridColumn field=\"xero\" title=\"Xero Link\" width=\"100px\" />\r\n <GridColumn field=\"total\" filter={\"numeric\"} title=\"Total Cost (exGST)\" width=\"500px\" />\r\n </Grid>\r\n </div>\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n\r\n","\r\nimport React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport * as Reference from \"../../../store/ducks/reference.duck\";\r\nimport { Formik } from 'formik';\r\nimport * as Yup from \"yup\";\r\nimport { DataGridPro } from '@mui/x-data-grid-pro';\r\nimport { Paper, Grid } from '@material-ui/core';\r\nimport { MenuItem, FormControl, Select, InputLabel, makeStyles } from '@material-ui/core';\r\nimport { Button, Modal, Form, Row, Col, Tabs, Tab, InputGroup } from \"react-bootstrap\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport ClearIcon from '@material-ui/icons/Clear';\r\nimport VisibilityIcon from '@material-ui/icons/Visibility';\r\nimport VisibilityOffIcon from '@material-ui/icons/VisibilityOff';\r\nimport '../../../../_metronic/_assets/css/app.css';\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\nimport { format } from \"date-fns\";\r\n\r\nexport default function AdminUsers() {\r\n\r\n const classes = useStyles();\r\n const dispatch = useDispatch(); \r\n const filters = useSelector(state => state.admin.Filters)\r\n const users = useSelector(state => state.reference.Users)\r\n useEffect( () => { dispatch(Reference.actions.fetchUsers()) }, [dispatch] )\r\n\r\n const [show, setShow] = useState(false);\r\n const [tabKey, setTabKey] = useState('details')\r\n const [userListTerm, setUserListTerm] = useState(filters.userListTerm);\r\n const [showPassword, setShowPassword] = useState(false);\r\n\r\n function changeFilter(value) {\r\n setUserListTerm(value);\r\n dispatch(Admin.actions.setFilters({ filterName: 'userListTerm', filterValue: value }))\r\n }\r\n\r\n const filteredusers = users.filter(user => (\r\n (user.email.toLowerCase().search(userListTerm.toLowerCase()) > -1 || userListTerm.length === 0))\r\n && (filters.userListStatus === 'All' || user.status === filters.userListStatus)\r\n )\r\n\r\n const initUser = () => {\r\n return {\r\n\t id: 0,\r\n\t userID: 0,\r\n\t extUserID: null,\r\n\t firstName: '',\r\n\t lastName: '',\r\n\t initials: '',\r\n\t email: '',\r\n\t roleDesc: 'Verifier',\r\n roleScope : '',\r\n profilePassword: '',\r\n profilePasswordConfirmation: '',\r\n\t status: '',\r\n defaultDirectoryID: 1,\r\n\t timeZone: '',\r\n\t updatedOn: new Date(),\r\n\t createdOn: new Date(),\r\n\t }\r\n }\r\n \r\n const [user, setUser] = useState(initUser())\r\n\r\n const loadUser = (thisUser) => {\r\n setUser({ ...thisUser, profilePassword: '', profilePasswordConfirmation: '' });\r\n\t setShow(true);\r\n }\r\n \r\n const validationSchema = Yup.object().shape({\r\n email: Yup.string()\r\n .required(\"Email is required\"),\r\n firstname: Yup.string()\r\n .required(\"Firstname is required\"),\r\n surname: Yup.string()\r\n .required(\"Surname is required\"),\r\n profilePasswordConfirmation: Yup.string()\r\n .min(8,\"Too Short\")\r\n .oneOf([Yup.ref('profilePassword'), null], 'Passwords must match'),\r\n });\r\n\r\n const submitForm = (values) => {\r\n\t var payload = {\r\n\t\t user: values,\r\n\t }\r\n setShow(false);\r\n dispatch(Reference.actions.putUser(payload))\r\n }\r\n \r\n const columns = [\r\n { field: \"id\", headerName: \"User\", hide: false, width: 300,\r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadUser(users.find(row => row.id === params.row.id))} className=\"cell-link\">\r\n {params.row.email}\r\n </div>\r\n </strong>\r\n ) },\r\n { field: 'fullname', type: 'string', headerName: 'Name', width: 200 }, \r\n { field: 'status', type: 'string', headerName: 'Status', width: 100 },\r\n { field: 'rolescope', type: 'string', headerName: 'Role Scope', width: 120 },\r\n { field: 'updatedOn', type: 'date', headerName: 'Status', width: 100, valueFormatter: ({ value }) => format(new Date(value), \"MM-dd-yyyy\"), headerAlign: 'center', align: 'center', cellClassName: 'grid-mono-font' },\r\n ]\r\n\r\n return (\r\n <div className='container-fluid'>\r\n <h4>\r\n Users\r\n </h4> \r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10 }}>\t\t\r\n <Grid item style={{ marginTop: 2, marginLeft: 2 }}> \r\n <Grid container>\r\n <Grid item>\r\n <InputGroup size=\"sm\">\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={userListTerm}\r\n onChange={(event) => changeFilter(event.target.value)}\r\n autoComplete='OFF'\r\n style={{ maxWidth: 170, height: 36, backgroundColor: userListTerm !== '' ? 'rgb(250 239 195)' : 'white' }}\r\n />\r\n <InputGroup.Append onClick={() => changeFilter('')}>\r\n <InputGroup.Text>\r\n <ClearIcon fontSize=\"small\" style={{ color: userListTerm !== '' ? '#222222' : 'silver', marginLeft: -3 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Append>\r\n </InputGroup>\r\n </Grid>\r\n <Grid item style={{ marginLeft: 10 }}> \r\n <FormControl variant=\"outlined\" className={classes.formControl}>\r\n <InputLabel id=\"userListStatus-label\" className={classes.label}>User Status</InputLabel>\r\n <Select\r\n labelId=\"userListStatus-label\"\r\n id=\"userListStatus\"\r\n margin=\"dense\"\r\n value={filters.userListStatus}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'userListStatus', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value=\"All\">All</MenuItem>\r\n <MenuItem value=\"Active\">Active</MenuItem>\r\n <MenuItem value=\"Archived\">Archived</MenuItem>\r\n <MenuItem value=\"Deleted\">Deleted</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => {\r\n\t\t\t\t\t\t\tsetTabKey('details')\r\n\t\t\t\t\t\t\tloadUser(initUser())\r\n\t\t\t\t\t\t}}>\r\n New User\r\n </Button>\r\n </Grid>\r\n\r\n </Grid>\r\n </Paper>\r\n\r\n <Paper style={{ height: 700 }}>\r\n <DataGridPro rows={filteredusers} columns={columns} checkboxSelection={false} rowHeight={38} disableColumnMenu={true} />\r\n </Paper>\r\n\r\n\t\t<Modal show={show} onHide={() => setShow(false)} dialogClassName=\"edit-sm-dialog-modal\">\r\n\t\t\t<Modal.Header closeButton className=\"edit-md-modal\">\r\n\t\t\t<Modal.Title>Edit User</Modal.Title>\r\n\t\t\t</Modal.Header>\r\n \r\n\t\t\t<Formik\r\n\t\t\t enableReinitialize={false}\r\n\t\t\t initialValues={user}\r\n\t\t\t validationSchema = {validationSchema}\r\n\t\t\t onSubmit={(values, actions) => {\r\n\t\t\t\tsubmitForm(values);\r\n\t\t\t\t// actions.setSubmitting(false);\r\n\t\t\t }}\r\n\t\t\t>\r\n\t\t\t{props => {\r\n\t\t\tconst { values, errors, touched, handleChange, handleSubmit, isSubmitting } = props; \r\n\t\t\tconst change = (name,e) => { e.persist(); handleChange(e); };\r\n\t\t\treturn (\r\n\t\t\t<form noValidate={true} autoComplete=\"off\" onSubmit={!isSubmitting ? handleSubmit : undefined}>\r\n\r\n\t\t\t<Modal.Body className=\"edit-md-modal\">\r\n\t\t\t <Tabs\r\n\t\t\t\tid=\"EditModal\"\r\n\t\t\t\tactiveKey={tabKey}\r\n\t\t\t\tonSelect={(k) => setTabKey(k)}\r\n\t\t\t\tmountOnEnter={true}\r\n\t\t\t > \r\n\t\t\t <Tab eventKey=\"details\" title=\"Details\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}>\r\n\t\t\t <Row>\r\n <Col md=\"12\">\r\n <Form.Group>\r\n <Form.Label>Email</Form.Label>\r\n <Form.Control type=\"text\" id=\"email\" name=\"email\" value={values.email} onChange={change.bind(null, \"email\")} autoComplete='new-password' isInvalid={touched.email && !!errors.email} isValid={touched.email && !errors.email}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.email}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n\t\t\t </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>First Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"firstname\" value={values.firstname} onChange={change.bind(null, \"firstname\")} autoComplete='new-password' isInvalid={touched.firstname && !!errors.firstname} isValid={touched.firstname && !errors.firstname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.firstname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Surname</Form.Label>\r\n <Form.Control type=\"text\" name=\"surname\" value={values.surname} onChange={change.bind(null, \"surname\")} autoComplete='new-password' isInvalid={touched.surname && !!errors.surname} isValid={touched.surname && !errors.surname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.surname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n\t\t\t <Row>\r\n <Col md=\"6\">\r\n <Form.Group>\r\n <Form.Label>Role Scope</Form.Label>\r\n <FormControl className=\"evform-control\">\r\n <Select\r\n name=\"rolescope\" variant=\"outlined\" margin=\"dense\" className=\"evform-select\"\r\n value={values.rolescope} onChange={change.bind(null, \"rolescope\")}\r\n >\r\n <MenuItem value='' label='Not Set'>Not Set</MenuItem>\r\n <MenuItem value='Provisional' label='Provisional'>Provisional Only</MenuItem>\r\n </Select>\r\n </FormControl>\r\n <Form.Control.Feedback type=\"invalid\">{errors.rolescope}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n\t\t\t </Row>\r\n\t\t\t <Row>\r\n <Col md=\"6\">\r\n <Form.Group>\r\n <Form.Label>Status</Form.Label>\r\n <FormControl className=\"evform-control\">\r\n <Select\r\n name=\"status\" variant=\"outlined\" margin=\"dense\" className=\"evform-select\"\r\n value={values.status} onChange={change.bind(null, \"status\")}\r\n >\r\n <MenuItem value='Active' label='Active'>Active</MenuItem>\r\n <MenuItem value=\"Archived\" lable='Archived'>Archived</MenuItem>\r\n </Select>\r\n </FormControl>\r\n <Form.Control.Feedback type=\"invalid\">{errors.status}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n\t\t\t </Row>\r\n\t\t\t <Row>\r\n <Col md=\"6\">\r\n <Form.Group>\r\n <Form.Label>Change Password</Form.Label>\r\n <InputGroup>\r\n <Form.Control type={showPassword ? \"text\" : \"password\"} name=\"profilePassword\" value={values.profilePassword} autoComplete='new-password' onChange={change.bind(null, \"profilePassword\")} isInvalid={touched.profilePassword && !!errors.profilePassword} isValid={touched.profilePassword && !errors.profilePassword} />\r\n <InputGroup.Append onClick={()=>setShowPassword(!showPassword)}>\r\n <InputGroup.Text>\r\n {showPassword ?\r\n <VisibilityOffIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n : \r\n <VisibilityIcon fontSize=\"small\" style={{ marginLeft: -4 }} /> \r\n }\r\n </InputGroup.Text>\r\n </InputGroup.Append> \r\n <Form.Control.Feedback type=\"invalid\">{errors.profilePassword}</Form.Control.Feedback>\r\n </InputGroup>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group>\r\n <Form.Label>Confirm Password</Form.Label>\r\n <InputGroup>\r\n <Form.Control type={showPassword ? \"text\" : \"password\"} name=\"profilePasswordConfirmation\" value={values.profilePasswordConfirmation} autoComplete='new-password' onChange={change.bind(null, \"profilePasswordConfirmation\")} isInvalid={touched.profilePasswordConfirmation && !!errors.profilePasswordConfirmation} isValid={touched.profilePasswordConfirmation && !errors.profilePasswordConfirmation} />\r\n <InputGroup.Append onClick={()=>setShowPassword(!showPassword)}>\r\n <InputGroup.Text>\r\n {showPassword ?\r\n <VisibilityOffIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n : \r\n <VisibilityIcon fontSize=\"small\" style={{ marginLeft: -4 }} /> \r\n }\r\n </InputGroup.Text>\r\n </InputGroup.Append> \r\n <Form.Control.Feedback type=\"invalid\">{errors.profilePasswordConfirmation}</Form.Control.Feedback>\r\n </InputGroup>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n\t\t\t\t</Tab>\r\n\r\n\t\t\t </Tabs>\r\n\t\t\t</Modal.Body>\r\n\t\t\t<Modal.Footer className=\"edit-md-modal\">\r\n\t\t\t<Grid container justifyContent=\"space-between\">\r\n\t\t\t\t<Grid item>\r\n\t\t\t\t</Grid>\r\n\t\t\t\t<Grid item>\r\n\t\t\t\t<Button variant=\"secondary\" onClick={()=>setShow(false)}>\r\n\t\t\t\t\tCancel\r\n\t\t\t\t</Button>\r\n\t\t\t\t<Button variant=\"primary\" type=\"submit\" style={{ marginLeft: 8 }}>\r\n\t\t\t\t\tSave\r\n\t\t\t\t</Button>\r\n\t\t\t\t</Grid>\r\n\t\t\t</Grid>\r\n\t\t\t</Modal.Footer>\r\n\t\t\t</form>\r\n\t\t\t)\r\n\t\t\t}}\r\n\t\t\t</Formik>\r\n\t\t</Modal>\r\n\r\n <ToastContainer\r\n transition={Flip}\r\n position=\"bottom-right\"\r\n autoClose={2000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n />\r\n\r\n </div>\r\n )\r\n\r\n}\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n\tformControl: {\r\n\t margin: 0,\r\n\t minWidth: 120,\r\n\t},\r\n\tformControlWide: {\r\n\t margin: 0,\r\n\t minWidth: '100%',\r\n\t},\r\n\tselectEmpty: {\r\n\t marginTop: theme.spacing(2),\r\n\t},\r\n\tlabel: {\r\n\t backgroundColor: '#fff',\r\n\t paddingLeft: 3,\r\n\t paddingRight: 3,\r\n\t}\r\n }));\r\n ","import { useEffect } from \"react\";\r\n\r\n// Improved version of https://usehooks.com/useOnClickOutside/\r\nconst useClickOutside = (ref, handler) => {\r\n useEffect(() => {\r\n let startedInside = false;\r\n let startedWhenMounted = false;\r\n\r\n const listener = (event) => {\r\n // Do nothing if `mousedown` or `touchstart` started inside ref element\r\n if (startedInside || !startedWhenMounted) return;\r\n // Do nothing if clicking ref's element or descendent elements\r\n if (!ref.current || ref.current.contains(event.target)) return;\r\n\r\n handler(event);\r\n };\r\n\r\n const validateEventStart = (event) => {\r\n startedWhenMounted = ref.current;\r\n startedInside = ref.current && ref.current.contains(event.target);\r\n };\r\n\r\n document.addEventListener(\"mousedown\", validateEventStart);\r\n document.addEventListener(\"touchstart\", validateEventStart);\r\n document.addEventListener(\"click\", listener);\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", validateEventStart);\r\n document.removeEventListener(\"touchstart\", validateEventStart);\r\n document.removeEventListener(\"click\", listener);\r\n };\r\n }, [ref, handler]);\r\n};\r\n\r\nexport default useClickOutside;","import React, { useCallback, useRef, useState } from \"react\";\r\nimport { HexColorPicker } from \"react-colorful\";\r\n\r\nimport useClickOutside from \"./useClickOutside\";\r\n\r\nexport const PopoverPicker = ({ color, onChange }) => {\r\n const popover = useRef();\r\n const [isOpen, toggle] = useState(false);\r\n\r\n const close = useCallback(() => toggle(false), []);\r\n useClickOutside(popover, close);\r\n\r\n return (\r\n <div className=\"picker\">\r\n <div\r\n className=\"swatch\"\r\n style={{ backgroundColor: color }}\r\n onClick={() => toggle(true)}\r\n />\r\n\r\n {isOpen && (\r\n <div className=\"popover\" ref={popover}>\r\n <HexColorPicker color={color} onChange={onChange} />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};","import React, { useState, useRef, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport * as Reference from \"../../../store/ducks/reference.duck\";\r\nimport * as Auth from \"../../../store/ducks/auth.duck\";\r\nimport { Formik } from 'formik';\r\nimport * as Yup from \"yup\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { Paper, Grid } from '@material-ui/core';\r\nimport { FormControl, FormControlLabel, Checkbox, FormGroup, Select, MenuItem, makeStyles } from '@material-ui/core';\r\nimport { Button, Modal, Form, Row, Col, InputGroup } from \"react-bootstrap\";\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport ClearIcon from '@material-ui/icons/Clear';\r\nimport DeleteOutlineIcon from '@material-ui/icons/DeleteOutline';\r\nimport { PopoverPicker } from \"../../../components/PopoverPicker\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport '../../../../_metronic/_assets/css/app.css';\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\nimport { format } from \"date-fns\";\r\n\r\nexport default function MetaDataConfig() {\r\n \r\n const filters = useSelector(state => state.admin.Filters)\r\n const contexts = useSelector(state => state.reference.Contexts)\r\n const tags = useSelector(state => state.reference.Tags)\r\n\r\n const dispatch = useDispatch() \r\n useEffect( () => { (contexts && contexts.length < 1) && dispatch(Reference.actions.fetchContexts()) }, [dispatch, contexts] )\r\n useEffect( () => { (tags && tags.length < 1) && dispatch(Reference.actions.fetchTags()) }, [dispatch, tags] )\r\n\r\n var [show, setShow] = useState(false);\r\n\r\n const initTag = () => {\r\n return { \r\n tagID: 0,\r\n tagName: '',\r\n description: '',\r\n contexts: [],\r\n dataType: 'List',\r\n allowMultipleValues: false,\r\n allowAdHocValues: false,\r\n colour: '',\r\n updatedOn: new Date(),\r\n options: []\r\n }\r\n }\r\n\r\n function makeid(length) {\r\n var result = [];\r\n var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\r\n var charactersLength = characters.length;\r\n for ( var i = 0; i < length; i++ ) {\r\n result.push(characters.charAt(Math.floor(Math.random() * charactersLength)));\r\n }\r\n return result.join('');\r\n }\r\n\r\n const tagDataTypes = ['List','General']\r\n // const tagDisplayLists = ['','Clients - 1','Clients - 2','Clients - 3','Psychologists']\r\n\r\n const [tag, setTag] = useState(initTag())\r\n const [items, setItems] = useState();\r\n const [newTagOption, setNewTagOption] = useState(false);\r\n const newTagValueRef = useRef(null);\r\n\r\n // set focus to new tag value on tag selection\r\n useEffect(() => {\r\n if (newTagOption) {\r\n newTagValueRef.current.focus();\r\n // console.log('focus me')\r\n // console.log(newTagOption)\r\n }\r\n }, [newTagOption]);\r\n\r\n const loadTag = (thisTag) => {\r\n setTag({ ...thisTag });\r\n setItems(thisTag.options);\r\n setColour(thisTag.colour);\r\n setShow(true);\r\n }\r\n\r\n function handleClose() {\r\n setShow(false);\r\n }\r\n\r\n function handleContextChange(refContext, checked) {\r\n var tempContexts = []\r\n if(checked)\r\n {\r\n tempContexts = [ ...tag.contexts ];\r\n tempContexts.push({ id: 0, contextID: refContext.ContextID });\r\n setTag({ ...tag, contexts: tempContexts });\r\n }\r\n else\r\n { \r\n tempContexts = tag.contexts.filter((row) => row.contextID !== refContext.ContextID);\r\n setTag({ ...tag, contexts: tempContexts });\r\n }\r\n }\r\n\r\n // create a new item and add it to the items array\r\n function addTagOption(value) {\r\n if(value.length > 0)\r\n {\r\n var newItem = { id: makeid(6), tagValue: value }\r\n var tempItems = [ ...items ];\r\n tempItems.push(newItem);\r\n setItems(tempItems);\r\n setNewTagOption(true);\r\n // console.log('set focas on...')\r\n }\r\n }\r\n\r\n // merge in new item into items array\r\n function updateTagOption(id, value) {\r\n var tempItems = [ ...items ]\r\n tempItems.forEach(function(obj) {\r\n if (obj.id.toString() === id.toString()) {\r\n obj.tagValue = value;\r\n }\r\n });\r\n setItems(tempItems);\r\n }\r\n\r\n function deleteTagOption(deleteid) {\r\n var tempItems = items.filter((row) => row.id !== deleteid);\r\n setItems(tempItems);\r\n }\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', hide: true},\r\n { field: 'tagName', headerName: 'Tag Name', width: 280,\r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadTag(tags.find(row => row.id === params.row.id))} className=\"cell-link\">\r\n {params.row.tagName}\r\n </div>\r\n </strong>\r\n ), },\r\n { field: 'dataType', headerName: 'Type', width: 150 },\r\n { field: 'tagCount', headerName: 'Used', width: 100 },\r\n { field: 'updatedOn', headerName: 'Updated', width: 130, valueFormatter: ({ value }) => format(new Date(value), \"dd-MM-yyyy HH:mm\") }\r\n ];\r\n\r\n const validationSchema = Yup.object().shape({\r\n tagName: Yup.string()\r\n .min(4,\"Too Short\")\r\n .max(160,\"Too Long\")\r\n .required(\"Template Name is required\")\r\n });\r\n\r\n function AddOption() {\r\n var [newOptionText, setNewOptionText] = useState('') \r\n return ( \r\n <Form.Group style={{ marginTop: 10 }}>\r\n <Form.Label>Add Option:</Form.Label> \r\n <div className=\"checklist-item\"> \r\n <InputGroup size=\"sm\">\r\n <Form.Control \r\n ref={newTagValueRef} \r\n style={{ height: 40 }} \r\n type=\"text\" \r\n id=\"newTagOption\" \r\n name=\"newTagOption\" \r\n value={newOptionText} \r\n onChange={(event) => setNewOptionText(event.target.value)} \r\n onBlur={(event) => addTagOption(event.target.value)} autoComplete='new-password'/>\r\n </InputGroup>\r\n </div>\r\n </Form.Group>\r\n )\r\n }\r\n\r\n function EditOption(props) {\r\n var [item, setItem] = useState(props.item) \r\n return ( \r\n <InputGroup size=\"sm\" key={`edit_option_input_key_${props.item.id}`}>\r\n <Form.Control \r\n style={{ height: 40, marginBottom: 5 }} \r\n key={`edit_option_key_${props.item.id}`}\r\n type=\"text\" \r\n id={item.id} \r\n name=\"tagOption\" \r\n value={item.tagValue} \r\n onChange={(event) => setItem({ ...item, tagValue: event.target.value })} \r\n onBlur={(event) => updateTagOption(event.target.id, event.target.value)} \r\n autoComplete='new-password'/> \r\n <InputGroup.Append\r\n style={{ height: 40, marginBottom: 5 }} >\r\n <InputGroup.Text onClick={() => deleteTagOption(item.id)}>\r\n <DeleteOutlineIcon />\r\n </InputGroup.Text>\r\n </InputGroup.Append>\r\n </InputGroup>\r\n )\r\n }\r\n\r\n // general function to capture Enter key press (to align it with tab/onBlur) - this will prevent the form being submitted and run relevant update/save methods instead\r\n function onKeyDown(event) {\r\n if ((event.charCode || event.keyCode) === 13) {\r\n\r\n // new tag option\r\n if(event.target.name === 'newTagOption')\r\n {\r\n addTagOption(event.target.value)\r\n }\r\n \r\n // existing tag option\r\n if(event.target.name === 'tagOption')\r\n {\r\n updateTagOption(event.target.id, event.target.value)\r\n }\r\n\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n const submitForm = (values) => {\r\n setShow(false);\r\n dispatch(Reference.actions.putTag({ ...values, colour: colour, contexts: tag.contexts, options: items }))\r\n }\r\n\r\n const useStyles = makeStyles(theme => ({\r\n root: {\r\n display: \"flex\"\r\n },\r\n formControl: {\r\n margin: theme.spacing(2)\r\n },\r\n formControlNoTopMargin: {\r\n marginTop: theme.spacing(0),\r\n marginLeft: theme.spacing(2)\r\n },\r\n formControlLabelNoBottomMargin: {\r\n marginBottom: theme.spacing(0),\r\n },\r\n myCheckbox: {\r\n marginRight: 12\r\n }\r\n }));\r\n\r\n const classes = useStyles();\r\n\r\n const [colour, setColour] = useState('#ffffff');\r\n\r\n return (\r\n <div className='container-fluid'>\r\n <h4>\r\n Meta Data Tags\r\n </h4>\r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10 }}>\r\n <Grid item style={{ marginTop: 2, marginLeft: 2 }}> \r\n <Grid container>\r\n <Grid item> \r\n <InputGroup size=\"sm\">\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={filters.tagsTerm}\r\n onChange={(event) => dispatch(Auth.actions.setFilters({ filterName: 'tagsTerm', filterValue: event.target.value }))}\r\n autoComplete='OFF'\r\n style={{ maxWidth: 170, height: 36, backgroundColor: filters.tagsTerm.length > 0 ? 'rgb(250 239 195)' : 'white' }}\r\n />\r\n <InputGroup.Append onClick={() => dispatch(Auth.actions.setFilters({ filterName: 'tagsTerm', filterValue: '' }))}>\r\n <InputGroup.Text>\r\n <ClearIcon fontSize=\"small\" style={{ color: filters.tagsTerm.length > 0 ? '#222222' : 'silver', marginLeft: -3 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Append>\r\n </InputGroup>\r\n </Grid>\r\n \r\n </Grid>\r\n </Grid>\r\n <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => loadTag(initTag())}>\r\n Add Tag\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n\r\n <Paper style={{ height: 800 }}>\r\n <DataGrid rows={tags} columns={columns} checkboxSelection={false} rowHeight={38} pageSize={15} />\r\n {/* sortModel={[{ field: 'tagName', sort: 'asc' }]} */}\r\n </Paper>\r\n\r\n <ToastContainer\r\n transition={Flip}\r\n position=\"bottom-right\"\r\n autoClose={2000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n />\r\n\r\n <Modal show={show} onHide={handleClose} dialogClassName=\"edit-tags-modal\">\r\n <Modal.Header closeButton className=\"edit-tags-modal\">\r\n <Modal.Title>Edit Tag</Modal.Title>\r\n </Modal.Header> \r\n <Formik\r\n enableReinitialize={false}\r\n initialValues={tag}\r\n validationSchema = {validationSchema}\r\n onSubmit={(values, actions) => {\r\n submitForm(values);\r\n // actions.setSubmitting(false);\r\n }}\r\n >\r\n {props => {\r\n const { values, errors, touched, handleChange, handleSubmit, setFieldValue } = props; \r\n const change = (name,e) => { e.persist(); handleChange(e); };\r\n return (\r\n <form noValidate={true} autoComplete=\"off\" onSubmit={handleSubmit} onKeyDown={onKeyDown}> \r\n <Modal.Body className=\"edit-tags-modal\"> \r\n <Row>\r\n <Col md=\"4\">\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group>\r\n <Form.Label>Tag Name & Colour</Form.Label>\r\n <InputGroup>\r\n <Form.Control type=\"text\" id=\"tagName\" name=\"tagName\" value={values.tagName} onChange={change.bind(null, \"tagName\")} autoComplete='new-password' isInvalid={touched.tagName && !!errors.tagName} isValid={touched.tagName && !errors.tagName}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.tagName}</Form.Control.Feedback>\r\n <InputGroup.Append style={{ cursor: 'pointer' }}>\r\n <InputGroup.Text style={{ backgroundColor: colour ? colour : '#ffffff', padding: 0 }}>\r\n {/* <PaletteOutlinedIcon /> */}\r\n <PopoverPicker color={colour ? colour : '#ffffff'} onChange={setColour} />\r\n </InputGroup.Text>\r\n </InputGroup.Append>\r\n </InputGroup>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"12\">\r\n <Form.Group>\r\n <Form.Label>Tag Context</Form.Label>\r\n <br></br>\r\n <FormControl\r\n component=\"fieldset\"\r\n className={classes.formControl}\r\n >\r\n <FormGroup>\r\n {contexts.map((refContext, index) => {\r\n return (\r\n <FormControlLabel \r\n key={`key_cl_${index}`}\r\n className={classes.formControlLabelNoBottomMargin} \r\n control={\r\n <Checkbox\r\n key={`key_${index}`}\r\n name=\"tagContexts\"\r\n checked={tag.contexts.some(row => row.contextID === refContext.ContextID)}\r\n onChange={(event) => handleContextChange(refContext, event.target.checked)}\r\n value={true}\r\n className={classes.myCheckbox}\r\n />\r\n }\r\n label={refContext.Context}\r\n />\r\n )\r\n })}\r\n </FormGroup>\r\n </FormControl>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </Col>\r\n <Col md=\"8\">\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group>\r\n <Form.Label>Data Type</Form.Label>\r\n <br></br>\r\n <FormControl style={{ minWidth: 130 }}>\r\n <Select\r\n id=\"dataType\"\r\n name=\"dataType\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n className=\"select-wide\"\r\n value={values.dataType}\r\n onChange={(event) => setFieldValue('dataType', event.target.value)}\r\n readOnly={false}\r\n >\r\n {tagDataTypes.map((row, index) => {\r\n return (<MenuItem key={`type_key_${index}`} value={row} >{row}</MenuItem>)\r\n })\r\n }\r\n </Select>\r\n </FormControl>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"8\">\r\n <Form.Group>\r\n <Form.Label>Data Entry</Form.Label>\r\n <br></br>\r\n <FormControl\r\n component=\"fieldset\"\r\n className={classes.formControlNoTopMargin}\r\n >\r\n <FormControlLabel \r\n className={classes.formControlLabelNoBottomMargin} \r\n control={\r\n <Checkbox\r\n // key={value}\r\n name=\"allowMultipleValues\"\r\n checked={values.allowMultipleValues}\r\n onChange={(event) => setFieldValue('allowMultipleValues', !values.allowMultipleValues)}\r\n value={true}\r\n className={classes.myCheckbox}\r\n />\r\n }\r\n label=\"Allow multiple selections\"\r\n />\r\n </FormControl>\r\n </Form.Group>\r\n </Col>\r\n {values.dataType === 'List' ?\r\n <Col md=\"12\">\r\n <Form.Group>\r\n <Form.Label>Tag Options</Form.Label>\r\n <br></br>\r\n {items.map((item) => {\r\n return (\r\n <EditOption key={`option_key_${item.id}`} item={item} />\r\n )}\r\n )} \r\n <AddOption />\r\n </Form.Group>\r\n </Col>\r\n : \r\n null\r\n }\r\n </Row>\r\n </Col>\r\n </Row>\r\n </Modal.Body>\r\n <Modal.Footer className=\"edit-tags-modal\">\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>\r\n </Grid>\r\n <Grid item>\r\n <Button variant=\"secondary\" onClick={handleClose}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"primary\" type=\"submit\" style={{ marginLeft: 8 }}>\r\n Save\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Modal.Footer>\r\n </form>)\r\n }}\r\n </Formik>\r\n </Modal>\r\n </div>\r\n )\r\n\r\n}\r\n","\r\nimport React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport * as Forms from \"../../../store/ducks/forms.duck\";\r\nimport { Formik } from 'formik';\r\nimport * as Yup from \"yup\";\r\nimport { DataGridPro } from '@mui/x-data-grid-pro';\r\nimport { Paper, Grid } from '@material-ui/core';\r\nimport { MenuItem, Select } from '@material-ui/core';\r\nimport { Button, Modal, Form, Row, Col, Tabs, Tab } from \"react-bootstrap\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport '../../../../_metronic/_assets/css/app.css';\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\nexport default function ManageForms({ setFormID, template }) {\r\n\r\n const forms = useSelector(state => state.forms.Forms);\r\n const dispatch = useDispatch();\r\n \r\n useEffect( () => { dispatch(Forms.actions.fetchForms()) }, [dispatch] )\r\n\r\n const [show, setShow] = useState(false);\r\n const [tagValues, setTagValues] = useState([]);\r\n const [tabKey, setTabKey] = useState('details');\r\n\r\n // const formTypes = ['General','Client Intake','Survey']\r\n const formStatuses = ['Active','Inactive']\r\n const formDataPlugins = ['DASS-21','DASS-Y','PSC-17','Referring GP Letter','Referring GP Ad-Hoc Letter','Referring GP No Contact Letter','Fax from Provider to GP','Fax to GP Referrer from Admin']\r\n\r\n const initForm = () => {\r\n return {\r\n id: 0,\r\n formID: 0,\r\n subscriberID: 0,\r\n ownerID: null,\r\n formType: 'General',\r\n formName: '',\r\n formDescription: '',\r\n formInstructions: '',\r\n confirmationText: 'Thank you - your form has been submitted.',\r\n inputOrientation: '',\r\n questionToAnswerWidth: '',\r\n formStyles: '',\r\n formStatus: 'Active',\r\n autoCreate: false,\r\n template: template ? true : false,\r\n formDataPlugin: ''\r\n }\r\n }\r\n \r\n const [form, setForm] = useState(initForm())\r\n\r\n const loadForm = (thisForm) => {\r\n setForm({ ...thisForm });\r\n setTagValues(thisForm.tagValues);\r\n setShow(true);\r\n }\r\n \r\n const validationSchema = Yup.object().shape({\r\n\tformName: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n\t.required(\"Form Name is required\"),\r\n\tconfirmationText: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n\t.required(\"Confirmation Message is required\"),\r\n });\r\n\r\n const deleteForm = () => {\r\n setShow(false);\r\n dispatch(Forms.actions.deleteForm(form.formID))\r\n }\r\n\r\n const copyToProviders = (formID) => {\r\n dispatch(Forms.actions.copyToProviders(formID))\r\n }\r\n\r\n const submitForm = (values) => {\r\n\tvar payload = {\r\n\t\tform: values,\r\n\t\ttagValues: tagValues\r\n\t}\r\n setShow(false);\r\n dispatch(Forms.actions.putForm(payload))\r\n }\r\n \r\n var columns = [\r\n\t{ field: \"id\", headerName: \"Form Name\", hide: false, width: 200,\r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadForm(forms.find(row => row.id === params.row.id))} className=\"cell-link\">\r\n {params.row.formName}\r\n </div>\r\n </strong>\r\n ) },\r\n\t{ field: 'formDescription', type: 'string', headerName: 'Description', width: 300 },\r\n ]\r\n\r\n if(!template)\r\n {\r\n columns = [ ...columns, { field: 'responseCount', type: 'string', headerName: 'Responses', width: 140 } ]\r\n }\r\n\r\n if(template)\r\n {\r\n columns = [ ...columns, { field: 'autoCreate', type: 'boolean', headerName: 'Auto Create', width: 140 } ]\r\n }\r\n\r\n columns = [ ...columns, \r\n { field: 'formStatus', type: 'string', headerName: 'Status', width: 110 }, \r\n { field: 'questionCount', headerName: \"Questions\", hide: false, width: 130,\r\n renderCell: (params) => (\r\n <div onClick={() => setFormID(params.row.id)} className=\"cell-link\">\r\n {params.row.questionCount} Questions\r\n </div>\r\n ) },\r\n { field: 'formID', headerName: \"Actions\", hide: false, width: 150,\r\n renderCell: (params) => (\r\n <div>\r\n {template ?\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: '1px solid rgb(192 192 192)', background: \"#ebf7f7\", marginRight: 10 }} onClick={() => copyToProviders(params.row.id)}>\r\n Copy to Providers \r\n </Button>\r\n : null}\r\n </div>\r\n ) },\r\n\t]\r\n\r\nreturn (\r\n <div className='container-fluid'>\r\n <h4>\r\n {template ? 'Form Templates' : 'Forms'}\r\n </h4>\r\n \r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10 }}>\r\n <Grid item style={{ marginTop: 2, marginLeft: 2 }}> \r\n </Grid>\r\n <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => loadForm(initForm())}>\r\n New Form\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n\r\n <Paper style={{ height: 740 }}>\r\n <DataGridPro \r\n rows={forms} \r\n columns={columns} \r\n checkboxSelection={false} \r\n sortModel={[{ field: 'id', sort: 'asc' }]} \r\n rowHeight={38}\r\n pagination={false} />\r\n </Paper>\r\n\r\n\t\t<Modal show={show} onHide={() => setShow(false)} dialogClassName=\"edit-md-modal\">\r\n\t\t\t<Modal.Header className=\"edit-md-modal\">\r\n\t\t\t <Modal.Title>Edit Form</Modal.Title>\r\n <CloseIcon onClick={() => setShow(false)} style={{ cursor: 'pointer' }} />\r\n\t\t\t</Modal.Header>\r\n \r\n\t\t\t<Formik\r\n\t\t\t enableReinitialize={false}\r\n\t\t\t initialValues={form}\r\n\t\t\t validationSchema = {validationSchema}\r\n\t\t\t onSubmit={(values, actions) => {\r\n\t\t\t\tsubmitForm(values);\r\n\t\t\t\t// actions.setSubmitting(false);\r\n\t\t\t }}\r\n\t\t\t>\r\n\t\t\t{props => {\r\n\t\t\tconst { values, errors, touched, handleChange, handleSubmit } = props; \r\n\t\t\tconst change = (name,e) => { e.persist(); handleChange(e); };\r\n\t\t\treturn (\r\n\t\t\t<form noValidate={true} autoComplete=\"off\" onSubmit={handleSubmit}>\r\n\r\n\t\t\t<Modal.Body className=\"edit-md-modal\">\r\n\t\t\t <Tabs\r\n\t\t\t\tid=\"EditModal\"\r\n\t\t\t\tactiveKey={tabKey}\r\n\t\t\t\tonSelect={(k) => setTabKey(k)}\r\n\t\t\t\tmountOnEnter={true}\r\n\t\t\t > \r\n\t\t\t <Tab eventKey=\"details\" title=\"Details\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}>\r\n\t\t\t <Row>\r\n\r\n <Col md=\"8\">\r\n <Form.Group>\r\n <Form.Label>Form Name</Form.Label>\r\n <Form.Control type=\"text\" id=\"formName\" name=\"formName\" value={values.formName} onChange={change.bind(null, \"formName\")} autoComplete='new-password' isInvalid={touched.formName && !!errors.formName} isValid={touched.formName && !errors.formName}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.formName}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"12\">\r\n <Form.Group>\r\n <Form.Label>Description</Form.Label>\r\n <Form.Control type=\"text\" id=\"formDescription\" name=\"formDescription\" value={values.formDescription} onChange={change.bind(null, \"formDescription\")} autoComplete='new-password' isInvalid={touched.formDescription && !!errors.formDescription} isValid={touched.formDescription && !errors.formDescription}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.formDescription}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"12\">\r\n <Form.Group>\r\n <Form.Label>Confirmation Message</Form.Label>\r\n <Form.Control type=\"text\" id=\"confirmationText\" name=\"confirmationText\" value={values.confirmationText} onChange={change.bind(null, \"confirmationText\")} autoComplete='new-password' isInvalid={touched.confirmationText && !!errors.confirmationText} isValid={touched.confirmationText && !errors.confirmationText}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.confirmationText}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n\t\t\t\t </Row>\r\n <Row> \r\n <Col md=\"8\">\r\n <Form.Group >\r\n <Form.Label style={{ width: '100%'}}>Form Data Plugin</Form.Label>\r\n <Select \r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n id='formDataPlugin'\r\n aria-label='Type'\r\n name='formDataPlugin'\r\n value={values.formDataPlugin}\r\n onChange={change.bind(null, \"formDataPlugin\")}\r\n style={{ backgroundColor: \"#ffffff\", minWidth: 120 }} >\r\n {formDataPlugins.map(row => {\r\n return <MenuItem key={row} value={row}>{row}</MenuItem>\r\n })}\r\n </Select>\r\n </Form.Group>\r\n\t\t\t\t\t </Col>\r\n </Row>\r\n {values.template ? \r\n <Row>\r\n <Col md=\"8\">\r\n <Form.Group >\r\n <Form.Label style={{ width: '100%'}}>Auto create form for new providers?</Form.Label>\r\n <Select \r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n id='autoCreate'\r\n aria-label='Type'\r\n name='autoCreate'\r\n value={values.autoCreate}\r\n onChange={change.bind(null, \"autoCreate\")}\r\n style={{ backgroundColor: \"#ffffff\", minWidth: 120 }} >\r\n <MenuItem value={true}>Yes</MenuItem>\r\n <MenuItem value={false}>No</MenuItem>\r\n </Select>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n : null}\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label style={{ width: '100%'}}>Status</Form.Label>\r\n <Select \r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n id='formStatus'\r\n aria-label='Type'\r\n name='formStatus'\r\n value={values.formStatus}\r\n onChange={change.bind(null, \"formStatus\")}\r\n style={{ backgroundColor: \"#ffffff\", minWidth: 120 }} >\r\n {formStatuses.map(row => {\r\n return <MenuItem key={row} value={row}>{row}</MenuItem>\r\n })}\r\n </Select>\r\n </Form.Group>\r\n\t\t\t\t\t </Col>\r\n </Row>\r\n\t\t\t\t</Tab>\r\n\t\t\t </Tabs>\r\n\t\t\t</Modal.Body>\r\n\t\t\t<Modal.Footer className=\"edit-md-modal\">\r\n\t\t\t<Grid container justifyContent=\"space-between\">\r\n <Grid item>\r\n <Button variant=\"warning\" onClick={() => deleteForm()}>\r\n {form.responseCount > 0 ? 'Archive' : 'Delete'}\r\n </Button>\r\n </Grid>\r\n\t\t\t\t<Grid item>\r\n\t\t\t\t<Button variant=\"secondary\" onClick={()=>setShow(false)}>\r\n\t\t\t\t\tCancel\r\n\t\t\t\t</Button>\r\n\t\t\t\t<Button variant=\"primary\" type=\"submit\" style={{ marginLeft: 8 }}>\r\n\t\t\t\t\tSave\r\n\t\t\t\t</Button>\r\n\t\t\t\t</Grid>\r\n\t\t\t</Grid>\r\n\t\t\t</Modal.Footer>\r\n\t\t\t</form>\r\n\t\t\t)\r\n\t\t\t}}\r\n\t\t\t</Formik>\r\n\t\t</Modal>\r\n\r\n <ToastContainer\r\n transition={Flip}\r\n position=\"bottom-right\"\r\n autoClose={2000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n />\r\n\r\n </div>\r\n )\r\n\r\n}","\r\nimport React, { useState, useEffect, useRef } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport * as Forms from \"../../../store/ducks/forms.duck\";\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport DeleteOutlineIcon from '@material-ui/icons/DeleteOutline';\r\n// import { Editor } from '@tinymce/tinymce-react';\r\nimport Interweave from 'interweave';\r\nimport { Document, Page } from 'react-pdf/dist/esm/entry.webpack';\r\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\r\nimport { Grid, Card, CardHeader, CardContent, makeStyles, Divider, MenuItem, Select, RadioGroup, TextField, FormControl, FormGroup, FormHelperText, FormControlLabel, Radio, Checkbox } from '@material-ui/core';\r\nimport { MuiPickersUtilsProvider, KeyboardDatePicker } from '@material-ui/pickers';\r\nimport { Button, Modal, Form, Row, Col, Tabs, Tab, InputGroup } from \"react-bootstrap\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport { Formik } from 'formik';\r\nimport DateFnsUtils from '@date-io/date-fns';\r\nimport { DropzoneArea } from 'material-ui-dropzone';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport * as Yup from \"yup\";\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport KTUtil from \"../../../../_metronic/_assets/js/util\";\r\nimport ReactQuill from 'react-quill';\r\nimport 'react-quill/dist/quill.snow.css';\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport '../../../../_metronic/_assets/css/app.css';\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\nconst useDraggableInPortal = () => {\r\n const self = useRef({}).current;\r\n\r\n useEffect(() => {\r\n const div = document.createElement('div');\r\n div.style.position = 'absolute';\r\n div.style.pointerEvents = 'none';\r\n div.style.top = '0';\r\n div.style.width = '100%';\r\n div.style.height = '100%';\r\n self.elt = div;\r\n document.body.appendChild(div);\r\n return () => {\r\n document.body.removeChild(div);\r\n };\r\n }, [self]);\r\n\r\n return (render) => (provided, ...args) => {\r\n const element = render(provided, ...args);\r\n if (provided.draggableProps.style.position === 'fixed') {\r\n return createPortal(element, self.elt);\r\n }\r\n return element;\r\n };\r\n};\r\n \r\nexport default function FormQuestions({ setFormID, formID, readOnly }) {\r\n\r\n const classes = useStyles();\r\n const form = useSelector(state => state.forms.Form);\r\n const dataNodes = useSelector(state => state.forms.DataNodes);\r\n const dispatch = useDispatch();\r\n \r\n useEffect( () => { dispatch(Forms.actions.fetchForm(formID)) }, [dispatch, formID] )\r\n useEffect( () => { dispatch(Forms.actions.fetchDataNodes()) }, [dispatch])\r\n\r\n const [questions, setQuestions] = useState();\r\n\r\n useEffect( () => { setQuestions(form.formQuestions) }, [setQuestions, form] )\r\n\r\n const [show, setShow] = useState(false);\r\n const [tabKey, setTabKey] = useState('details');\r\n\r\n const types = [\r\n { type: 'VARCHAR', label: 'General (text)' },\r\n { type: 'TEXT', label: 'Paragraph' },\r\n { type: 'DATE', label: 'Date' },\r\n { type: 'OPTION', label: 'Option List' },\r\n { type: 'MULTIOPTION', label: 'Multiple Options' },\r\n { type: 'FILE', label: 'File' },\r\n { type: 'STATEMENT', label: 'Statement' },\r\n { type: 'STATEMENTPDF', label: 'PDF Statement' },\r\n { type: 'SIGNATURE', label: 'Signature'}\r\n ]\r\n\r\n // const formStatuses = ['Active','Inactive']\r\n const initFormQuestion = () => {\r\n return {\r\n id: 0,\r\n formID: formID,\r\n questionID: 0,\r\n questionIndex: 0,\r\n type: 'VARCHAR',\r\n reference: '',\r\n questionText: '',\r\n questionHelpText: '',\r\n questionStatement: '',\r\n questionStatementPDFFile: '',\r\n typeInput: 'radio',\r\n questionLayout: '',\r\n answerLayout: 'column',\r\n answerInputSize: '',\r\n questionStyles: '', \r\n questionStatus: '',\r\n mandatory: true,\r\n vhdataNodeName: '',\r\n formOptionListID: null,\r\n readOnly: 0,\r\n protected: false,\r\n questionPlaceHolderText: '',\r\n adminUseOnly: false,\r\n nodeID:0,\r\n formOptions: []\r\n }\r\n }\r\n \r\n const [formQuestion, setFormQuestion] = useState(initFormQuestion())\r\n\r\n useEffect( () => { \r\n if(formQuestion.type !== 'OPTION' && formQuestion.type !== 'MULTIOPTION' && tabKey === 'options'){\r\n setTabKey('details')\r\n } \r\n }, [setTabKey, tabKey, formQuestion] ) \r\n\r\n const loadFormQuestion = (thisFormQuestion) => {\r\n setFormQuestion({ ...thisFormQuestion });\r\n setItems(thisFormQuestion.formOptions)\r\n setShow(true);\r\n }\r\n \r\n const validationSchema = Yup.object().shape({\r\n reference: Yup.string()\r\n .min(2,\"Reference Too Short\")\r\n .max(50,\"Reference Too Long\")\r\n .required(\"Reference is required\"),\r\n questionText: Yup.string()\r\n .when(['type'],\r\n {\r\n is: (type) => type === 'VARCHAR' || type === 'TEXT',\r\n then: Yup.string().required(\"Question Text is required\")\r\n .min(2,\"Question Text Too Short\")\r\n .max(3950,\"Question Text Too Long\")\r\n }),\r\n questionStatement: Yup.string()\r\n .when(['type'],\r\n {\r\n is: (type) => type === 'STATEMENT',\r\n then: Yup.string().required(\"Statement Text is required\")\r\n .min(2,\"Statement Text Too Short\")\r\n .max(3950,\"Statement Text Too Long\")\r\n }),\r\n });\r\n\r\n \r\n\r\n\r\n const submitForm = (values) => {\r\n // var payload = {\r\n // formQuestion: values,\r\n // formOptions: items\r\n // }\r\n const formData = new FormData();\r\n formData.append('id', values['id'])\r\n formData.append('formID', values['formID'])\r\n formData.append('questionID', values['questionID'])\r\n formData.append('questionIndex', values['questionIndex'])\r\n formData.append('type', values['type'])\r\n formData.append('reference', values['reference'])\r\n formData.append('questionText', values['questionText'])\r\n formData.append('questionHelpText', values['questionHelpText'])\r\n formData.append('questionStatement', values['questionStatement'])\r\n formData.append('questionStatementPDFFile', values['questionStatementPDFFile'])\r\n formData.append('typeInput', values['typeInput'])\r\n formData.append('questionLayout', values['questionLayout'])\r\n formData.append('answerLayout', values['answerLayout'])\r\n formData.append('answerInputSize', values['answerInputSize'])\r\n formData.append('questionStyles', values['questionStyles'])\r\n formData.append('questionStatus', values['questionStatus'])\r\n if (values['nodeID'] === null)\r\n {\r\n formData.append('nodeID', 0)\r\n }\r\n else\r\n {\r\n formData.append('nodeID', values['nodeID'])\r\n }\r\n formData.append('mandatory', values['mandatory'])\r\n formData.append('vhdataNodeName', values['vhdataNodeName'])\r\n formData.append('formOptionListID', values['formOptionListID'])\r\n formData.append('readOnly', values['readOnly'])\r\n formData.append('protected', values['protected'])\r\n formData.append('questionPlaceHolderText', values['questionPlaceHolderText'])\r\n formData.append('adminUseOnly', values['adminUseOnly'])\r\n formData.append('formOptionsJSON', JSON.stringify(items))\r\n\r\n setShow(false);\r\n dispatch(Forms.actions.putFormQuestion({formData}))\r\n }\r\n \r\n const deleteQuestion = () => {\r\n if (!readOnly)\r\n {\r\n var payload = {\r\n formID: formID,\r\n questionID: formQuestion.questionID\r\n }\r\n setShow(false);\r\n dispatch(Forms.actions.deleteFormQuestion(payload))\r\n }\r\n }\r\n\r\n function FormInput({question}) {\r\n switch(question.type) {\r\n case 'VARCHAR':\r\n return <FormVarchar question={question}/>\r\n case 'TEXT':\r\n return <FormText question={question}/>\r\n case 'STATEMENT':\r\n return <FormStatement question={question}/>\r\n case 'STATEMENTPDF':\r\n return <FormStatementPDF question={question}/>\r\n case 'OPTION':\r\n if(question.typeInput === 'radio')\r\n {\r\n return <FormOptionRadio question={question}/>\r\n }\r\n else // question.typeInput === 'radio'\r\n {\r\n return <FormOptionSelect question={question}/>\r\n }\r\n case 'MULTIOPTION':\r\n return <FormOptionCheckbox question={question}/>\r\n case 'DATE':\r\n return <FormDate question={question}/>\r\n case 'FILE':\r\n return <FormFile question={question}/>\r\n case 'SIGNATURE':\r\n return <FormSignature question={question}/>\r\n default :\r\n return null\r\n }\r\n }\r\n\r\n function FormVarchar({question}) {\r\n // Add q to name - having issues with variables as numbers (it is a primtive language)\r\n const qname = 'Q' + question.questionID;\r\n return <Form.Control type=\"text\" id={qname} name={qname} autoComplete='new-password' placeholder={question.questionPlaceHolderText}/> \r\n }\r\n\r\n function FormText({question}) {\r\n // Add q to name - having issues with variables as numbers (it is a primtive language)\r\n const qname = 'Q' + question.questionID;\r\n return <Form.Control as=\"textarea\" rows={4} type=\"text\" id={qname} name={qname} autoComplete='new-password' placeholder={question.questionPlaceHolderText}/> \r\n }\r\n\r\n function FormStatement({question}) {\r\n return <Interweave content={question.questionStatement} />\r\n }\r\n\r\n function FormStatementPDF({question}) {\r\n const [questionPDF, showQuestionPDF] = useState(false);\r\n const [numPages, setNumPages] = useState(null); \r\n function onDocumentLoadSuccess({ numPages }) {\r\n setNumPages(numPages);\r\n }\r\n return (\r\n <>\r\n <Button onClick={()=>showQuestionPDF(true)}>{question.questionStatementPDFFileName}</Button>\r\n \r\n <Modal show={questionPDF} onHide={()=>showQuestionPDF(false)} dialogClassName=\"viewQuestionPDF-dialog-modal\">\r\n <Modal.Header closeButton className=\"viewQuestionPDF-modal\" style={{ padding: 10 }}>\r\n <Modal.Title style={{ marginTop: 6, width: \"75%\", }}>\r\n {question.questionStatementPDFFileName}\r\n </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"viewQuestionPDF-modal\" style={{ height: 700 }}>\r\n <Grid container spacing={2}>\r\n <Grid item md={12} style={{ height: 680, overflowY: \"scroll\", backgroundColor: \"white\" }}>\r\n {question.questionStatementPDF.length > 5 ? \r\n <Document\r\n file={'data:application/pdf;base64,'+ question.questionStatementPDF}\r\n onLoadSuccess={onDocumentLoadSuccess}\r\n >\r\n {Array.from(\r\n new Array(numPages),\r\n (el, index) => (\r\n <Page\r\n key={`page_${index + 1}`}\r\n pageNumber={index + 1}\r\n scale={1.5}\r\n />\r\n ),\r\n )}\r\n </Document> : <div style={{ marginLeft: 15, marginTop: 15 }}>No PDF Attached.</div>}\r\n </Grid>\r\n </Grid>\r\n </Modal.Body>\r\n </Modal>\r\n </>\r\n )\r\n }\r\n\r\n function FormOptionSelect({question}) {\r\n // Add q to name - having issues with variables as numbers (it is a primtive language)\r\n const qname = 'Q' + question.questionID;\r\n return ( \r\n <Select \r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n id={qname}\r\n aria-label='Type'\r\n name={qname}\r\n value=''\r\n style={{ backgroundColor: \"#ffffff\" }} >\r\n <MenuItem value=''> </MenuItem>\r\n {question.formOptions ? question.formOptions.map(options => {\r\n return (\r\n <MenuItem \r\n key={options.optionID}\r\n value={options.optionID}>\r\n {options.optionLabel}\r\n </MenuItem>\r\n )\r\n })\r\n : null}\r\n </Select>\r\n )\r\n }\r\n\r\n function FormOptionRadio({question}) {\r\n // Add q to name - having issues with variables as numbers (it is a primtive language)\r\n const qname = 'Q' + question.questionID;\r\n //<Form.Control type=\"text\" id={qname} name={qname} autoComplete='new-password' placeholder={question.questionPlaceHolderText}/> \r\n return (\r\n <Grid item xs={12} md={12}>\r\n <RadioGroup \r\n aria-label={question.questionText} \r\n style={{ paddingLeft: 8 }}\r\n //name={values[qname] || ''} \r\n //value={values[qname] || ''} \r\n row={question.answerLayout === 'row' ? true : false}\r\n >\r\n {question.formOptions ? \r\n question.formOptions.map(options => {\r\n return (\r\n <FormControlLabel\r\n key={options.optionID}\r\n value={options.optionID}\r\n control={<Radio name={qname} className=\"form-radio-input\" />}\r\n label={options.optionLabel}\r\n style={{ marginBottom: 0 }}\r\n // onChange={handleChange(qname)}\r\n />\r\n )\r\n })\r\n : ('None')\r\n }\r\n </RadioGroup>\r\n </Grid>\r\n ) \r\n }\r\n\r\n function FormOptionCheckbox({question}) {\r\n // Add q to name - having issues with variables as numbers (it is a primtive language)\r\n const qname = 'Q' + question.questionID;\r\n return (\r\n <FormControl component=\"fieldset\" className={classes.formControl}>\r\n <FormGroup row={question.answerLayout === 'row' ? true : false}>\r\n {question.formOptions ? \r\n question.formOptions.map(options => {\r\n return (\r\n <FormControlLabel\r\n key={options.optionID}\r\n control={<Checkbox name={qname} className=\"form-radio-input\" />}\r\n label={options.optionLabel}\r\n style={{ marginBottom: 0 }}\r\n />\r\n )\r\n })\r\n : ('None')\r\n }\r\n </FormGroup>\r\n <FormHelperText>{question.questionHelpText}</FormHelperText>\r\n </FormControl>\r\n ) \r\n }\r\n\r\n function FormDate({question}) {\r\n // Add q to name - having issues with variables as numbers (it is a primtive language)\r\n const qname = 'Q' + question.questionID;\r\n return ( \r\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\r\n <KeyboardDatePicker\r\n name={qname}\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id={qname}\r\n autoOk={true}\r\n size=\"small\"\r\n onChange={() => null}\r\n />\r\n </MuiPickersUtilsProvider>\r\n ) \r\n }\r\n\r\n function FormFile({question}) {\r\n // Add q to name - having issues with variables as numbers (it is a primtive language)\r\n const qname = 'Q' + question.questionID;\r\n return (\r\n <Grid item xs={12} md={12} style={{ marginTop: 12 }}> \r\n <DropzoneArea\r\n name={qname}\r\n acceptedFiles={['image/*,.pdf']}\r\n showPreviews={true}\r\n maxFileSize={4000000}\r\n showPreviewsInDropzone={false}\r\n dropzoneText={\"Drag and drop files here, or use your phone camera.\"}\r\n dropzoneClass=\"drop-zone-area\"\r\n onChange={() => null}\r\n />\r\n </Grid> \r\n ) \r\n }\r\n\r\n function FormSignature({question}) {\r\n return (\r\n <>\r\n <FormHelperText>Please draw your signature with mouse or touch:</FormHelperText>\r\n <div className=\"sigOuterContainer\">\r\n <div className=\"sigContainer\" style={{ height: 200 }}>\r\n </div>\r\n </div>\r\n </>\r\n ) \r\n }\r\n\r\n\r\n // Manage question options\r\n const [items, setItems] = useState([]);\r\n\r\n function handleOnDragEnd(result) {\r\n // create a new re-ordered array from the draggable context and set it back to state\r\n if(result.destination) {\r\n const itemsCopy = Array.from(items);\r\n const [reorderedItem] = itemsCopy.splice(result.source.index, 1);\r\n itemsCopy.splice(result.destination.index, 0, reorderedItem);\r\n setItems(itemsCopy);\r\n }\r\n }\r\n\r\n function ErrorsNotification ({ errors, touched }) {\r\n // console.log(errors)\r\n // console.log(touched)\r\n if(!KTUtil.isEmpty(errors) && !KTUtil.isEmpty(touched))\r\n {\r\n return(\r\n <>\r\n <div className=\"errors-list\">\r\n <h4 className=\"errors-list-heading\">Please fix the following fields before you submit:</h4>\r\n <ul>\r\n {Object.keys(errors).map(msg => (\r\n <React.Fragment key={msg}>\r\n {touched[msg] ?\r\n <li>{errors[msg]}</li>\r\n :\r\n null\r\n }\r\n </React.Fragment>\r\n ))}\r\n </ul>\r\n </div>\r\n <hr />\r\n </>\r\n )\r\n } \r\n else\r\n {\r\n return null\r\n }\r\n }\r\n\r\n\r\n function handleOnDragEndQuestions(result) {\r\n // create a new re-ordered array from the draggable context and set it back to state\r\n if (!readOnly)\r\n {\r\n if(result.destination) {\r\n const itemsCopy = Array.from(questions);\r\n const [reorderedItem] = itemsCopy.splice(result.source.index, 1);\r\n itemsCopy.splice(result.destination.index, 0, reorderedItem);\r\n setQuestions(itemsCopy);\r\n var payload = {\r\n formID: formID,\r\n formQuestions: itemsCopy.map((question, index) => {\r\n return {\r\n questionID: question.questionID,\r\n questionIndex: index + 1\r\n }\r\n })\r\n }\r\n dispatch(Forms.actions.putQuestionsOrder(payload))\r\n }\r\n }\r\n }\r\n\r\n function makeid(length) {\r\n var result = [];\r\n var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\r\n var charactersLength = characters.length;\r\n for ( var i = 0; i < length; i++ ) {\r\n result.push(characters.charAt(Math.floor(Math.random() * charactersLength)));\r\n }\r\n return result.join('');\r\n }\r\n\r\n function saveLabel(event) {\r\n if(event.key === 'Enter' || event.key === undefined)\r\n {\r\n updateLabel(event.target.name, event.target.value)\r\n }\r\n }\r\n\r\n function addLabel(value) {\r\n if(value.length > 0)\r\n {\r\n var newItem = { optionID: makeid(6), optionLabel: value }\r\n var tempItems = [ ...items ];\r\n tempItems.push(newItem);\r\n setItems(tempItems);\r\n }\r\n }\r\n\r\n function updateLabel(optionID, value) {\r\n // merge in new label into item in items array\r\n var tempItems = [ ...items ]\r\n tempItems.forEach(function(obj) {\r\n if (obj.optionID === optionID) {\r\n obj.optionLabel = value;\r\n }\r\n setItems(tempItems); \r\n });\r\n }\r\n\r\n function deleteLabel(rowindextoDelete) {\r\n var tempItems = items.filter((row, index) => index !== rowindextoDelete);\r\n setItems(tempItems);\r\n }\r\n\r\n function AddItem () {\r\n const [newLabel, setNewLabel] = useState('');\r\n function addNewLabel(value) {\r\n addLabel(value)\r\n setNewLabel('')\r\n }\r\n return(\r\n <Form.Control style={{ height: 40 }} type=\"text\" id=\"itemLabel\" name=\"newLabel\" value={newLabel} onChange={(event) => setNewLabel(event.target.value)} onBlur={(event) => addNewLabel(event.target.value)} autoComplete='new-password'/>\r\n )\r\n }\r\n\r\n // general function to capture Enter key press (to align it with tab/onBlur) - this will prevent the form being submitted and run relevant update/save methods instead\r\n function onKeyDown(event) {\r\n if ((event.charCode || event.keyCode) === 13) {\r\n \r\n // new checklist item\r\n if(event.target.name === 'newLabel')\r\n {\r\n addLabel(event.target.value)\r\n }\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n const renderDraggable = useDraggableInPortal();\r\n\r\n useEffect(() => {\r\n const handler = (e) => {\r\n if (e.target.closest(\".tox-tinymce-aux, .moxman-window, .tam-assetmanager-root\") !== null) {\r\n e.stopImmediatePropagation();\r\n }\r\n };\r\n document.addEventListener(\"focusin\", handler);\r\n return () => document.removeEventListener(\"focusin\", handler);\r\n }, []);\r\n \r\nreturn (\r\n <div className='container-fluid'>\r\n \r\n <Card className={classes.root}>\r\n {!readOnly ?\r\n <CardHeader\r\n title={form.formName}\r\n subheader={null}\r\n className={classes.cardHeader}\r\n action={\r\n <>\r\n <Button variant=\"outlined\" size=\"sm\" style={{ marginTop: 5, background: \"#eeeeee\", border: '1px solid #9da8e5' }} onClick={() => loadFormQuestion(initFormQuestion())} >\r\n Add Question\r\n </Button>\r\n <Button variant=\"outlined\" size=\"sm\" style={{ marginTop: 5, background: \"#eeeeee\", border: '1px solid #9da8e5', padding: 5, marginLeft: 10 }} onClick={() => setFormID()} >\r\n <CloseIcon />\r\n </Button> \r\n </>\r\n }\r\n />\r\n :\r\n <CardHeader\r\n title={form.formName}\r\n subheader={null}\r\n className={classes.cardHeader}\r\n />\r\n }\r\n <CardContent className=\"formquestion-card\">\r\n\r\n <Grid container spacing={1}>\r\n <Grid item xs={12} md={12}>\r\n <p>{form.formInstructions}</p>\r\n </Grid>\r\n <DragDropContext onDragEnd={handleOnDragEndQuestions}>\r\n <Droppable droppableId=\"questionsList\">\r\n {(provided) => (\r\n <div className=\"formquestions-draggable\" {...provided.droppableProps} ref={provided.innerRef}>\r\n\r\n <Grid container spacing={1}>\r\n {questions && questions.map((question, index) => {\r\n return (\r\n \r\n <Draggable key={`id-${question.questionID}`} draggableId={`idd-${question.questionID}`} index={index}>\r\n {renderDraggable((provided) => (\r\n\r\n <Grid item xs={12} md={12} key={question.questionID} ref={provided.innerRef} {...provided.draggableProps} {...provided.dragHandleProps} className={question.adminUseOnly ? 'formquestion-container-admin-only' : 'formquestion-container'}>\r\n \r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item xs={10} md={10}>\r\n {question.type !== 'STATEMENT' ?\r\n <Form.Label style={{ width: '100%', fontWeight: 600 }}>\r\n {question.questionText} {question.mandatory ? ' * ' : null} {question.adminUseOnly ? ' (admin only) ' : null}\r\n </Form.Label>\r\n : null}\r\n </Grid>\r\n {!readOnly ? \r\n <Grid item xs={2} md={2} style={{ textAlign: 'right' }}>\r\n <EditIcon className=\"formquestion-edit-icon\" onClick={() => loadFormQuestion(question)} />\r\n </Grid>\r\n :\r\n null\r\n }\r\n </Grid>\r\n <FormInput question={question} />\r\n <FormHelperText>{question.questionHelpText}</FormHelperText>\r\n \r\n </Grid>\r\n ))}\r\n </Draggable>\r\n\r\n );\r\n })}\r\n {provided.placeholder}\r\n </Grid>\r\n </div>\r\n )}\r\n </Droppable>\r\n </DragDropContext>\r\n </Grid>\r\n\r\n </CardContent>\r\n <Divider />\r\n\r\n </Card>\r\n\r\n <ToastContainer\r\n transition={Flip}\r\n position=\"bottom-right\"\r\n autoClose={2000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n />\r\n\r\n <Modal show={show} onHide={() => setShow(false)} dialogClassName=\"edit-md-sm-dialog-modal\">\r\n\t\t\t<Modal.Header closeButton className=\"edit-md-sm-modal\">\r\n\t\t\t<Modal.Title>Edit Form Question</Modal.Title>\r\n\t\t\t</Modal.Header>\r\n \r\n\t\t\t<Formik\r\n\t\t\t enableReinitialize={false}\r\n\t\t\t initialValues={formQuestion}\r\n\t\t\t validationSchema = {validationSchema}\r\n\t\t\t onSubmit={(values, actions) => {\r\n\t\t\t\tsubmitForm(values);\r\n\t\t\t\t// actions.setSubmitting(false);\r\n\t\t\t }}\r\n\t\t\t>\r\n\t\t\t{props => {\r\n\t\t\tconst { values, errors, touched, setFieldValue, handleChange, handleSubmit } = props; \r\n\t\t\tconst change = (name,e) => { e.persist(); handleChange(e); };\r\n\t\t\treturn (\r\n\t\t\t<form noValidate={true} autoComplete=\"off\" onSubmit={handleSubmit}>\r\n\r\n\t\t\t<Modal.Body className=\"edit-md-modal\">\r\n\t\t\t <Tabs\r\n\t\t\t\tid=\"EditModal\"\r\n\t\t\t\tactiveKey={tabKey}\r\n\t\t\t\tonSelect={(k) => setTabKey(k)}\r\n\t\t\t\tmountOnEnter={true}\r\n\t\t\t > \r\n\t\t\t <Tab eventKey=\"details\" title=\"Details\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}>\r\n\t\t\t <Row>\r\n\r\n\t\t\t\t\t<Col md=\"6\">\r\n\t\t\t\t\t\t<Form.Group>\r\n\t\t\t\t\t\t\t<Form.Label>Reference</Form.Label>\r\n\t\t\t\t\t\t\t<Form.Control type=\"text\" id=\"reference\" name=\"reference\" value={values.reference} onChange={change.bind(null, \"reference\")} autoComplete='new-password' isInvalid={touched.reference && !!errors.reference} isValid={touched.reference && !errors.reference}/>\r\n\t\t\t\t\t\t\t<Form.Control.Feedback type=\"invalid\">{errors.reference}</Form.Control.Feedback>\r\n\t\t\t\t\t\t</Form.Group>\r\n\t\t\t\t\t</Col>\r\n\t\t\t\t\t<Col md=\"6\">\r\n\t\t\t\t\t\t<Form.Group>\r\n\t\t\t\t\t\t\t<Form.Label>Type</Form.Label>\r\n <Select \r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n id='type'\r\n aria-label='Type'\r\n name='type'\r\n value={values.type}\r\n onChange={change.bind(null, \"type\")}\r\n style={{ width: '100%', backgroundColor: \"#ffffff\" }} >\r\n {types.map(row => {\r\n return <MenuItem key={row.type} value={row.type}>{row.label}</MenuItem>\r\n })}\r\n </Select>\r\n\t\t\t\t\t\t</Form.Group>\r\n\t\t\t\t\t</Col>\r\n\r\n {values.type !== 'STATEMENT' ? \r\n\t\t\t\t\t<Col md=\"12\">\r\n\t\t\t\t\t\t<Form.Group>\r\n\t\t\t\t\t\t\t<Form.Label>Question Text</Form.Label>\r\n\t\t\t\t\t\t\t<Form.Control as=\"textarea\" rows={4} type=\"text\" id=\"questionText\" name=\"questionText\" value={values.questionText} onChange={change.bind(null, \"questionText\")} autoComplete='new-password' isInvalid={touched.questionText && !!errors.questionText} isValid={touched.questionText && !errors.questionText}/>\r\n\t\t\t\t\t\t\t<Form.Control.Feedback type=\"invalid\">{errors.questionText}</Form.Control.Feedback>\r\n\t\t\t\t\t\t</Form.Group>\r\n\t\t\t\t\t</Col>\r\n : null}\r\n\r\n {values.type === 'STATEMENTPDF' ?\r\n <Col md=\"12\">\r\n <Form.Group>\r\n <Form.Label>PDF Statement</Form.Label>\r\n <Form.Control type=\"file\" name=\"questionStatementPDFFile\" onChange={(event) => setFieldValue('questionStatementPDFFile', event.currentTarget.files[0])} isInvalid={touched.questionStatementPDFFile && !!errors.questionStatementPDFFile} isValid={touched.questionStatementPDFFile && !errors.questionStatementPDFFile} className=\"form-control\" style={{ paddingTop: 6, paddingLeft: 6 }} />\r\n <Form.Control.Feedback type=\"invalid\">{errors.questionStatementPDFFile}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n : null}\r\n\r\n {values.type === 'STATEMENT' ? \r\n <Col md=\"12\" className=\"quill-field\">\r\n <Form.Group>\r\n <Form.Label>Statement</Form.Label>\r\n <ReactQuill \r\n theme=\"snow\"\r\n value={values.questionStatement}\r\n onChange={(newValue, editor)=>setFieldValue(\"questionStatement\", newValue)} \r\n />\r\n {/* <Editor apiKey='wnbo4skoom9pnqmbfdjvwn8xdl1nfjtwhc2ofsqb1myqn5lo'\r\n value={values.questionStatement}\r\n onEditorChange={(newValue, editor)=>setFieldValue(\"questionStatement\", newValue)}\r\n init={{ branding: false, statusbar: false, height: 500 }}\r\n /> */}\r\n </Form.Group>\r\n </Col>\r\n : \r\n <>\r\n <Col md=\"12\">\r\n <Form.Group>\r\n <Form.Label>Help Text</Form.Label>\r\n <Form.Control type=\"text\" id=\"questionHelpText\" name=\"questionHelpText\" value={values.questionHelpText} onChange={change.bind(null, \"questionHelpText\")} autoComplete='new-password' isInvalid={touched.questionHelpText && !!errors.questionHelpText} isValid={touched.questionHelpText && !errors.questionHelpText}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.questionHelpText}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"12\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label>DataNode Link</Form.Label> \r\n <Autocomplete\r\n id=\"dataNodeID\"\r\n variant=\"outlined\"\r\n options={dataNodes}\r\n getOptionLabel={(option) => option.description || ''}\r\n value={dataNodes.find(v => v.id === values.nodeID) || null}\r\n onChange={(e, newValue) => {setFieldValue(\"nodeID\", newValue ? newValue.id : null);}}\r\n style={{ minWidth: 200, fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"currentContactID\"\r\n style={{ backgroundColor: \"white\", margin: 0, padding: 0, maxWidth: 400 }}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group>\r\n <Form.Label>Placeholder Text</Form.Label>\r\n <Form.Control type=\"text\" id=\"questionPlaceHolderText\" name=\"questionPlaceHolderText\" value={values.questionPlaceHolderText} onChange={change.bind(null, \"questionPlaceHolderText\")} autoComplete='new-password' isInvalid={touched.questionPlaceHolderText && !!errors.questionPlaceHolderText} isValid={touched.questionPlaceHolderText && !errors.questionPlaceHolderText}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.questionPlaceHolderText}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"12\">\r\n <Form.Group>\r\n <Form.Label>Other Settings</Form.Label>\r\n <br/>\r\n <FormControl component=\"fieldset\" className={classes.formControl}>\r\n <FormGroup>\r\n <FormControlLabel\r\n control={<Checkbox name=\"mandatory\" className=\"form-radio-input\" checked={values.mandatory} onChange={change.bind(null, \"mandatory\")} />}\r\n label=\"Mandatory - question must be answered\"\r\n style={{ marginBottom: 0 }}\r\n />\r\n <FormControlLabel\r\n control={<Checkbox name=\"adminUseOnly\" className=\"form-radio-input\" checked={values.adminUseOnly} onChange={change.bind(null, \"adminUseOnly\")} />}\r\n label=\"Admin use only (not displayed for data entry)\"\r\n style={{ marginBottom: 0 }}\r\n />\r\n </FormGroup>\r\n </FormControl>\r\n </Form.Group>\r\n </Col>\r\n </>\r\n }\r\n\t\t\t\t</Row>\r\n\t\t\t\t</Tab>\r\n \r\n {values.type === 'OPTION' || values.type === 'MULTIOPTION' ?\r\n <Tab eventKey=\"questionOptions\" title=\"Answer Options\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}} onKeyDown={onKeyDown} >\r\n {values.type === 'OPTION' ?\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group>\r\n <Form.Label>Input Type</Form.Label>\r\n <Select \r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n id='typeInput'\r\n aria-label='Input Type'\r\n name='typeInput'\r\n value={values.typeInput}\r\n onChange={change.bind(null, \"typeInput\")}\r\n style={{ backgroundColor: \"#ffffff\" }} >\r\n <MenuItem value='radio'>Radio Buttons</MenuItem>\r\n <MenuItem value='select'>Dropdown</MenuItem>\r\n </Select>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group>\r\n <Form.Label>Options Layout</Form.Label>\r\n <Select \r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n id='answerLayout'\r\n aria-label='Options Layout'\r\n name='answerLayout'\r\n value={values.answerLayout}\r\n onChange={change.bind(null, \"typeInput\")}\r\n style={{ backgroundColor: \"#ffffff\" }} >\r\n <MenuItem value='row'>Horizontal</MenuItem>\r\n <MenuItem value='column'>Vertical</MenuItem>\r\n </Select>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n : null}\r\n {values.type === 'MULTIOPTION' ?\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group>\r\n <Form.Label>Options Layout</Form.Label>\r\n <Select \r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n id='answerLayout'\r\n aria-label='Options Layout'\r\n name='answerLayout'\r\n value={values.answerLayout}\r\n onChange={change.bind(null, \"typeInput\")}\r\n style={{ backgroundColor: \"#ffffff\" }} >\r\n <MenuItem value='row'>Horizontal</MenuItem>\r\n <MenuItem value='column'>Vertical</MenuItem>\r\n </Select>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n : null}\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group>\r\n <Form.Label>Options</Form.Label> <span style={{ fontSize: 12 }}>( Drag items by # to reorder )</span>\r\n <DragDropContext onDragEnd={handleOnDragEnd}>\r\n <Droppable droppableId=\"mylist\">\r\n {(provided) => (\r\n <div className=\"characters\" {...provided.droppableProps} ref={provided.innerRef}>\r\n {items && items.map(({ optionID, optionLabel, optionIndex }, index) => {\r\n return (\r\n <Draggable key={`id-${optionID}`} draggableId={`id-${optionID}`} index={index}>\r\n {(provided) => (\r\n <div ref={provided.innerRef} {...provided.draggableProps} {...provided.dragHandleProps} className=\"checklist-item\"> \r\n <InputGroup size=\"sm\">\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n {index + 1}.\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control style={{ height: 45 }} type=\"text\" id={optionID} name={optionID} defaultValue={optionLabel} onKeyPress={(event) => saveLabel(event)} onBlur={(event) => updateLabel(event.target.name, event.target.value)} autoComplete='new-password'/> \r\n <InputGroup.Append>\r\n <InputGroup.Text onClick={() => deleteLabel(index)}>\r\n <DeleteOutlineIcon style={{ cursor: 'pointer' }} />\r\n </InputGroup.Text>\r\n </InputGroup.Append>\r\n </InputGroup> \r\n </div>\r\n )}\r\n </Draggable>\r\n );\r\n })}\r\n {provided.placeholder}\r\n </div>\r\n )}\r\n </Droppable>\r\n </DragDropContext>\r\n </Form.Group> \r\n <Form.Group>\r\n <Form.Label>Add Item:</Form.Label> \r\n <div className=\"checklist-item\"> \r\n <InputGroup size=\"sm\">\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n \r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <AddItem />\r\n </InputGroup>\r\n </div>\r\n </Form.Group>\r\n </Col>\r\n\t\t\t\t </Row>\r\n </Tab>\r\n : null}\r\n\t\t\t </Tabs>\r\n\t\t\t</Modal.Body>\r\n <ErrorsNotification errors={errors} touched={touched} />\r\n\t\t\t<Modal.Footer className=\"edit-md-modal\">\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>\r\n <Button variant=\"warning\" onClick={() => deleteQuestion()}>\r\n Delete\r\n </Button>\r\n </Grid>\r\n <Grid item>\r\n <Button variant=\"secondary\" onClick={() => setShow(false)}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"primary\" type=\"submit\" style={{ marginLeft: 8 }}>\r\n Save\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n\t\t\t</Modal.Footer>\r\n\t\t\t</form>\r\n\t\t\t)\r\n\t\t\t}}\r\n\t\t\t</Formik>\r\n\t\t</Modal>\r\n\r\n </div>\r\n )\r\n\r\n}\r\n\r\nconst useStyles = makeStyles(theme => ({ \r\n root: {\r\n maxWidth: 650,\r\n },\r\n cardHeader: {\r\n borderBottom: \"solid 1px silver\",\r\n backgroundColor: \"#daeaf5\",\r\n },\r\n formControl: {\r\n // margin: theme.spacing(1),\r\n // minWidth: 120,\r\n marginLeft: 8\r\n },\r\n dropzoneQuestion: {\r\n height: 100\r\n }\r\n}));\r\n\r\n","\r\nimport React, { useState } from 'react';\r\nimport ManageForms from \"../../home/admin/ManageForms\";\r\nimport FormQuestions from \"../../home/admin/FormQuestions\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport '../../../../_metronic/_assets/css/app.css';\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\n\r\nexport default function FormConfig() {\r\n\r\n const [formID, setFormID] = useState();\r\n\r\n if(!formID)\r\n {\r\n return <ManageForms setFormID={setFormID} template={true} />\r\n }\r\n else\r\n {\r\n return <FormQuestions setFormID={setFormID} formID={formID} />\r\n }\r\n\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { Button, Modal, Form, Row, Col, InputGroup } from \"react-bootstrap\";\r\nimport { Select, MenuItem } from '@material-ui/core';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\n\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { Grid, Paper } from '@material-ui/core';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\nimport '../../../../_metronic/_assets/css/app.css';\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\nexport default function Contracts() {\r\n\r\n const [searchTerm, setSearchTerm] = useState('')\r\n const contracts = useSelector(state => state.admin.Contracts)\r\n const filteredContracts = contracts.filter(contract => contract.name.toLowerCase().search(searchTerm.toLowerCase()) > -1 || searchTerm.length === 0 )\r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Admin.actions.fetchContracts()) }, [dispatch] )\r\n\r\n\r\n function uuidv4() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & (0x3 | 0x8));\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n\r\n var [show, setShow] = useState(false);\r\n var [currentContractID,setCurrentContractID] = useState();\r\n var [currentName,setCurrentName] = useState();\r\n var [currentOrganisationName,setCurrentOrganisationName] = useState();\r\n var [currentLocations,setCurrentLocations] = useState();\r\n var [currentStatus,setCurrentStatus] = useState();\r\n var [currentEmail,setCurrentEmail] = useState();\r\n var [currentCost,setCurrentCost] = useState();\r\n var [currentProviderFee,setCurrentProviderFee] = useState();\r\n var [currentRHCFee,setCurrentRHCFee] = useState();\r\n var [currentType,setCurrentType] = useState();\r\n var [currentItemCode,setCurrentItemCode] = useState(); \r\n var [currentContractToken,setCurrentContractToken] = useState();\r\n var [currentContractManagedByRHC, setCurrentContractManagedByRHC] = useState('0')\r\n var [currentContractColour,setCurrentContractColour] = useState('')\r\n\r\n\r\n const loadContractDetail = (thisContract) => {\r\n setCurrentContractID(thisContract.id)\r\n setCurrentName(thisContract.name)\r\n setCurrentOrganisationName(thisContract.organisationname)\r\n setCurrentLocations(thisContract.locations)\r\n setCurrentStatus(thisContract.status)\r\n setCurrentEmail(thisContract.contactemail)\r\n setCurrentCost(thisContract.cost)\r\n setCurrentProviderFee(thisContract.providerfee)\r\n setCurrentRHCFee(thisContract.rhcfee)\r\n setCurrentType(thisContract.type)\r\n setCurrentItemCode(thisContract.itemcode)\r\n setCurrentContractToken(thisContract.contracttoken)\r\n setCurrentContractManagedByRHC(thisContract.contractmanagedbyrhc)\r\n setCurrentContractColour(thisContract.colour)\r\n setShow(true)\r\n }\r\n\r\n const createNewContract = (thisContract) => {\r\n setCurrentContractID(0)\r\n setCurrentName()\r\n setCurrentOrganisationName()\r\n setCurrentLocations()\r\n setCurrentEmail()\r\n setCurrentStatus('Active')\r\n setCurrentCost()\r\n setCurrentProviderFee()\r\n setCurrentRHCFee()\r\n setCurrentType('Contract')\r\n setCurrentItemCode()\r\n setCurrentContractToken(uuidv4())\r\n setCurrentContractManagedByRHC(0)\r\n setCurrentContractColour('#00B3BE')\r\n setShow(true)\r\n }\r\n\r\n function putContract() {\r\n // Create payload to send to API \r\n var payload = {\r\n id : currentContractID,\r\n name : currentName,\r\n organisationname : currentOrganisationName,\r\n locations : currentLocations,\r\n status : currentStatus,\r\n email : currentEmail,\r\n cost : currentCost,\r\n providerfee: currentProviderFee,\r\n rhcfee: currentRHCFee,\r\n type : currentType,\r\n itemcode: currentItemCode,\r\n contracttoken : currentContractToken,\r\n contractmanagedbyrhc : currentContractManagedByRHC,\r\n colour : currentContractColour\r\n }\r\n //\r\n process.env.REACT_APP_DEBUG && console.log(payload);\r\n process.env.REACT_APP_DEBUG && console.log ('Saving data');\r\n // Save update \r\n dispatch(Admin.actions.putContract(payload));\r\n setShow(false);\r\n }\r\n\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', width: 100, hide: true },\r\n { field: 'displayname', headerName: 'Name', width: 300, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadContractDetail(contracts.find(contract => contract.id === params.row.id))} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'organisationname', headerName: 'Organisation', width: 300 },\r\n { field: 'type', headerName: 'Type', width: 300 },\r\n { field: 'cost', headerName: 'Cost', width: 120 },\r\n { field: 'status', headerName: 'Status', width: 120 },\r\n { field: 'none', headerName: 'Actions', width: 120,\r\n renderCell: (params) => (\r\n <>\r\n {params.row.type === 'EAP' && \r\n <>\r\n <a href={`/eap/${params.row.contracttoken}`} target=\"RHC\">\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#FFFACD\", marginRight: 14 }} >\r\n Test EAP Link\r\n </Button>\r\n </a>\r\n </>\r\n }\r\n </>\r\n ) \r\n }\r\n ];\r\n\r\n \r\n function handleClose() {\r\n setShow(false);\r\n } \r\n\r\n function handleContractManagedByRHCChange(value) {\r\n setCurrentContractManagedByRHC(value);\r\n }\r\n\r\n const handleSearch = (event) => {\r\n const searchTerm = event.target.value \r\n setSearchTerm(searchTerm)\r\n }\r\n\r\n\r\n return (\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h4 style={{ marginBottom: 12 }}>Contract Maintenance</h4></Grid>\r\n </Grid>\r\n\r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10 }}>\r\n <Grid item style={{ marginTop: 2, marginLeft: 10 }}>\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(event) => handleSearch(event)}\r\n autoComplete='OFF'\r\n />\r\n </InputGroup>\r\n </Grid>\r\n <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => createNewContract()}>\r\n Create Contract\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n\r\n\r\n { contracts ? \r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={filteredContracts} columns={columns} pageSize={20} checkboxSelection={false} rowHeight={40} />\r\n </Paper>\r\n : ('None')\r\n }\r\n\r\n <Modal show={show} onHide={handleClose} dialogClassName=\"contracts-modal\" >\r\n <Modal.Header closeButton className=\"contracts-modal\">\r\n <Modal.Title>Contract Maintenance </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"contracts-modal\">\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Contract Type</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentType} onBlur={(event) => setCurrentType(event.target.value)}>\r\n <option value=\"Contract\">Contract</option>\r\n <option value=\"EAP\">EAP</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col> \r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"Name\" defaultValue={currentName} onBlur={(event) => setCurrentName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Organisation</Form.Label>\r\n <Form.Control type=\"text\" name=\"OrganisationName\" defaultValue={currentOrganisationName} onBlur={(event) => setCurrentOrganisationName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Location</Form.Label>\r\n <Form.Control type=\"text\" name=\"Locations\" defaultValue={currentLocations} onBlur={(event) => setCurrentLocations(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Contact Email (used for Xero Link)</Form.Label>\r\n <Form.Control type=\"text\" name=\"Email\" defaultValue={currentEmail} onBlur={(event) => setCurrentEmail(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Colour</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentContractColour} onBlur={(event) => setCurrentContractColour(event.target.value)}>\r\n <option value=\"#00B3BE\">Aqua</option>\r\n <option value=\"#A33383\">Magenta</option>\r\n <option value=\"#D2B12B\">Yellow</option>\r\n <option value=\"#93A33A\">Green</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col> \r\n </Row> \r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Session Cost</Form.Label>\r\n <Form.Control type=\"text\" name=\"Cost\" defaultValue={currentCost} onBlur={(event) => setCurrentCost(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>RHC Fee</Form.Label>\r\n <Form.Control type=\"text\" name=\"RHCFee\" defaultValue={currentRHCFee} onBlur={(event) => setCurrentRHCFee(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Provider Fee</Form.Label>\r\n <Form.Control type=\"text\" name=\"ProviderFee\" defaultValue={currentProviderFee} onBlur={(event) => setCurrentProviderFee(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Invoicing Item Code</Form.Label>\r\n <Form.Control type=\"text\" name=\"ItemCode\" defaultValue={currentItemCode} onBlur={(event) => setCurrentItemCode(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n <Row>\r\n <Col md=\"9\">\r\n <Form.Group >\r\n <Form.Label >Contract Managed by RHC</Form.Label>\r\n <Select \r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n id='ContractManagedByRHC'\r\n aria-label='Contract will be Managed by RHC'\r\n name='ContractManagedByRHC'\r\n value={currentContractManagedByRHC} \r\n onChange={(event) => handleContractManagedByRHCChange(event.target.value)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: '#fff' }}>\r\n <MenuItem key='ContractManagedByRHCNo' value='0'>No</MenuItem>\r\n <MenuItem key='ContractManagedByRHCYes' value='1'>Yes</MenuItem>\r\n </Select>\r\n </Form.Group>\r\n </Col> \r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Status</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentStatus} onBlur={(event) => setCurrentStatus(event.target.value)}>\r\n <option value=\"Active\">Active</option>\r\n <option value=\"InActive\">InActive</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col> \r\n </Row>\r\n {currentType === 'EAP' && currentContractID !== 0 ?\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Label>EAP Link</Form.Label>\r\n <Form.Control as=\"textarea\" rows={2} type=\"text\" name=\"contracttoken\" defaultValue={`https://portal.ruralhealthconnect/eap/${currentContractToken}`} />\r\n </Col>\r\n </Row>\r\n :\r\n null\r\n }\r\n </Modal.Body>\r\n <Modal.Footer className=\"contracts-modal\">\r\n <Button variant=\"secondary\" onClick={handleClose}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"primary\" onClick={putContract}>\r\n Save\r\n </Button>\r\n </Modal.Footer>\r\n\r\n </Modal>\r\n\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { Button, Modal, Form, Row, Col, InputGroup } from \"react-bootstrap\";\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport * as Reference from \"../../../store/ducks/reference.duck\";\r\nimport { Grid, Paper, TextField } from '@material-ui/core';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\nimport '../../../../_metronic/_assets/css/app.css';\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\nexport default function Programs() {\r\n\r\n const [searchTerm, setSearchTerm] = useState('')\r\n const programs = useSelector(state => state.admin.Programs)\r\n const areasOfInterest = useSelector(state => state.reference.AreasOfInterest)\r\n const aoi_focus = areasOfInterest.filter(aoi => aoi.focusAreaIndex !== null && aoi.providertype === 'Psychologist')\r\n const filteredPrograms = programs.filter(programs => programs.name.toLowerCase().search(searchTerm.toLowerCase()) > -1 || searchTerm.length === 0 )\r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Admin.actions.fetchPrograms()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchAreasOfInterest('ALL')) }, [dispatch] )\r\n\r\n var [show, setShow] = useState(false);\r\n var [currentProgramID,setCurrentProgramID] = useState();\r\n var [currentName,setCurrentName] = useState();\r\n var [currentDescription,setCurrentDescription] = useState();\r\n var [currentIdentifier,setCurrentIdentifier] = useState();\r\n var [currentStatus,setCurrentStatus] = useState();\r\n var [currentAreaOfInterest,setCurrentAreaOfInterest] = useState()\r\n var [currentAvailabilityType,setCurrentAvailabilityType] = useState()\r\n var [currentBulkBilling,setCurrentBulkBilling] = useState()\r\n\r\n const loadProgramDetail = (thisProgram) => {\r\n setCurrentProgramID(thisProgram.id)\r\n setCurrentName(thisProgram.name)\r\n setCurrentDescription(thisProgram.description)\r\n setCurrentIdentifier(thisProgram.identifier)\r\n setCurrentStatus(thisProgram.status)\r\n setCurrentAvailabilityType(thisProgram.availabilitytype)\r\n setCurrentBulkBilling(thisProgram.bulkbilling)\r\n setCurrentAreaOfInterest(aoi_focus.find(aoi => aoi.id === thisProgram.aoi.toString()))\r\n setShow(true)\r\n }\r\n\r\n const createNewProgram = (thisProgram) => {\r\n setCurrentProgramID(0)\r\n setCurrentName()\r\n setCurrentDescription()\r\n setCurrentIdentifier()\r\n setCurrentStatus('Active')\r\n setCurrentAreaOfInterest()\r\n setCurrentAvailabilityType()\r\n setCurrentBulkBilling('N')\r\n setShow(true)\r\n }\r\n\r\n function putProgram() {\r\n // Create payload to send to API \r\n var payload = {\r\n id : currentProgramID,\r\n name : currentName,\r\n description : currentDescription,\r\n identifier : currentIdentifier,\r\n status : currentStatus,\r\n availabilitytype : currentAvailabilityType,\r\n areaofinterest : currentAreaOfInterest && currentAreaOfInterest.id,\r\n bulkbilling: currentBulkBilling\r\n }\r\n //\r\n process.env.REACT_APP_DEBUG && console.log(payload);\r\n process.env.REACT_APP_DEBUG && console.log ('Saving data');\r\n // Save update \r\n dispatch(Admin.actions.putProgram(payload));\r\n setShow(false);\r\n }\r\n\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', width: 100, hide: true },\r\n { field: 'name', headerName: 'Name', width: 300, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadProgramDetail(programs.find(program => program.id === params.row.id))} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'identifier', headerName: 'URL Tag', width: 300 },\r\n { field: 'status', headerName: 'Status', width: 120 },\r\n { field: 'none', headerName: 'Actions', width: 120,\r\n renderCell: (params) => (\r\n <>\r\n <a href={`/clientregistration/${params.row.identifier}`} target=\"RHC\">\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#FFFACD\", marginRight: 14 }} >\r\n Test Link\r\n </Button>\r\n </a>\r\n </>\r\n ) \r\n }\r\n ];\r\n\r\n \r\n function handleClose() {\r\n setShow(false);\r\n } \r\n\r\n const handleSearch = (event) => {\r\n const searchTerm = event.target.value \r\n setSearchTerm(searchTerm)\r\n }\r\n\r\n\r\n return (\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h4 style={{ marginBottom: 12 }}>Program Maintenance</h4></Grid>\r\n </Grid>\r\n\r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10 }}>\r\n <Grid item style={{ marginTop: 2, marginLeft: 10 }}>\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(event) => handleSearch(event)}\r\n autoComplete='OFF'\r\n />\r\n </InputGroup>\r\n </Grid>\r\n <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => createNewProgram()}>\r\n Create Program\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n\r\n\r\n { programs ? \r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={filteredPrograms} columns={columns} pageSize={10} checkboxSelection={false} rowHeight={40} />\r\n </Paper>\r\n : ('None')\r\n }\r\n\r\n <Modal show={show} onHide={handleClose} dialogClassName=\"contracts-modal\" >\r\n <Modal.Header closeButton className=\"contracts-modal\">\r\n <Modal.Title>Program Maintenance </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"contracts-modal\">\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"Name\" defaultValue={currentName} onBlur={(event) => setCurrentName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Description</Form.Label>\r\n <Form.Control as=\"textarea\" rows={3} name=\"Description\" defaultValue={currentDescription} onBlur={(event) => setCurrentDescription(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Identifier</Form.Label>\r\n <Form.Control type=\"text\" name=\"Identifier\" defaultValue={currentIdentifier} onBlur={(event) => setCurrentIdentifier(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Linked Availabilty Type</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentAvailabilityType} onBlur={(event) => setCurrentAvailabilityType(event.target.value)}>\r\n <option value='Any'>Any</option>\r\n <option value= 'Existing'>Existing</option>\r\n <option value= 'NDISContractEAP'>NDIS/Contract/EAP</option>\r\n <option value= 'NDISContractEAPNew'>New Client or NDIS/Contract/EAP</option>\r\n <option value= 'NDISContractEAPExisting'>Existing Client or NDIS/Contract/EAP</option>\r\n <option value=\"PerinatalGriefLoss\">Perinatal Grief & Loss</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col> \r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Default Bulk Billing (During Registration)</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentBulkBilling} onBlur={(event) => setCurrentBulkBilling(event.target.value)}>\r\n <option value='N'>No</option>\r\n <option value= 'Y'>Yes</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col> \r\n </Row>\r\n {currentProgramID !== 0 ?\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Please choose Area of Interest to link this program to</Form.Label>\r\n <Autocomplete\r\n id=\"aoi\"\r\n variant=\"outlined\"\r\n options={aoi_focus}\r\n getOptionLabel={(option) => option.issue }\r\n value={currentAreaOfInterest}\r\n onChange={(event, newValue) => setCurrentAreaOfInterest(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: \"white\", }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"AOISelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n :\r\n null\r\n }\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Status</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentStatus} onBlur={(event) => setCurrentStatus(event.target.value)}>\r\n <option value=\"Active\">Active</option>\r\n <option value=\"InActive\">InActive</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col> \r\n </Row>\r\n {currentProgramID !== 0 ?\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Label>Link</Form.Label>\r\n <Form.Control as=\"textarea\" rows={2} type=\"text\" name=\"contracttoken\" defaultValue={`https://portal.ruralhealthconnect/clientregistration/${currentIdentifier}`} />\r\n </Col>\r\n </Row>\r\n :\r\n null\r\n }\r\n </Modal.Body>\r\n <Modal.Footer className=\"contracts-modal\">\r\n <Button variant=\"secondary\" onClick={handleClose}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"primary\" onClick={putProgram}>\r\n Save\r\n </Button>\r\n </Modal.Footer>\r\n\r\n </Modal>\r\n\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { Button, Modal, Form, Row, Col, InputGroup } from \"react-bootstrap\";\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport * as Forms from \"../../../store/ducks/forms.duck\";\r\nimport { Grid, Paper } from '@material-ui/core';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\nimport '../../../../_metronic/_assets/css/app.css';\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\nexport default function Surveys() {\r\n\r\n const [searchTerm, setSearchTerm] = useState('')\r\n const forms = useSelector(state => state.forms.Forms);\r\n const surveys = useSelector(state => state.admin.Surveys)\r\n const filteredSurveys = surveys.filter(surveys => surveys.name.toLowerCase().search(searchTerm.toLowerCase()) > -1 || searchTerm.length === 0 )\r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Admin.actions.fetchSurveys()) }, [dispatch] )\r\n useEffect( () => { dispatch(Forms.actions.fetchForms()) }, [dispatch] )\r\n\r\n var [show, setShow] = useState(false);\r\n var [currentSurveyID,setCurrentSurveyID] = useState();\r\n var [currentName,setCurrentName] = useState();\r\n var [currentSurveyType,setCurrentSurveyType] = useState();\r\n var [currentSurveyTypeSetting1,setCurrentSurveyTypeSetting1] = useState();\r\n var [currentSurveyCondition1,setCurrentSurveyCondition1] = useState();\r\n var [currentSurveyCondition2,setCurrentSurveyCondition2] = useState();\r\n var [currentSurveyMonths,setCurrentSurveyMonths] = useState();\r\n var [currentStatus,setCurrentStatus] = useState();\r\n \r\n const loadSurveyDetail = (thisSurvey) => {\r\n setCurrentSurveyID(thisSurvey.id)\r\n setCurrentName(thisSurvey.name)\r\n setCurrentSurveyType(thisSurvey.surveytype)\r\n setCurrentSurveyTypeSetting1(thisSurvey.surveytypesetting1)\r\n setCurrentSurveyCondition1(thisSurvey.surveycondition1)\r\n setCurrentSurveyCondition2(thisSurvey.surveycondition2)\r\n setCurrentSurveyMonths(thisSurvey.surveymonths)\r\n setCurrentStatus(thisSurvey.status)\r\n setShow(true)\r\n }\r\n\r\n const createNewSurvey = (thisSurvey) => {\r\n setCurrentSurveyID(0)\r\n setCurrentName()\r\n setCurrentName()\r\n setCurrentSurveyType()\r\n setCurrentSurveyTypeSetting1()\r\n setCurrentSurveyCondition1()\r\n setCurrentSurveyCondition2()\r\n setCurrentSurveyMonths()\r\n setCurrentStatus('Active')\r\n setShow(true)\r\n }\r\n\r\n function putSurvey() {\r\n // Create payload to send to API \r\n var payload = {\r\n id : currentSurveyID,\r\n name : currentName,\r\n surveytype : currentSurveyType,\r\n surveytypesetting1 : currentSurveyTypeSetting1,\r\n surveycondition1 : currentSurveyCondition1,\r\n surveycondition2 : currentSurveyCondition2,\r\n surveymonths : currentSurveyMonths,\r\n status : currentStatus\r\n }\r\n //\r\n process.env.REACT_APP_DEBUG && console.log(payload);\r\n process.env.REACT_APP_DEBUG && console.log ('Saving data');\r\n // Save update \r\n dispatch(Admin.actions.putSurvey(payload));\r\n setShow(false);\r\n }\r\n\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', width: 100, hide: true },\r\n { field: 'name', headerName: 'Name', width: 300, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadSurveyDetail(surveys.find(survey => survey.id === params.row.id))} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n\r\n\r\n\r\n { field: 'status', headerName: 'Status', width: 120 },\r\n ];\r\n\r\n \r\n function handleClose() {\r\n setShow(false);\r\n } \r\n\r\n const handleSearch = (event) => {\r\n const searchTerm = event.target.value \r\n setSearchTerm(searchTerm)\r\n }\r\n\r\n\r\n return (\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h4 style={{ marginBottom: 12 }}>Survey Maintenance</h4></Grid>\r\n </Grid>\r\n\r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10 }}>\r\n <Grid item style={{ marginTop: 2, marginLeft: 10 }}>\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(event) => handleSearch(event)}\r\n autoComplete='OFF'\r\n />\r\n </InputGroup>\r\n </Grid>\r\n <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => createNewSurvey()}>\r\n Create Survey\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n\r\n\r\n { surveys ? \r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={filteredSurveys} columns={columns} pageSize={10} checkboxSelection={false} rowHeight={40} />\r\n </Paper>\r\n : ('None')\r\n }\r\n\r\n <Modal show={show} onHide={handleClose} dialogClassName=\"contracts-modal\" >\r\n <Modal.Header closeButton className=\"contracts-modal\">\r\n <Modal.Title>Survey Maintenance </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"contracts-modal\">\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"name\" defaultValue={currentName} onBlur={(event) => setCurrentName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Survey Type</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentSurveyType} onBlur={(event) => setCurrentSurveyType(event.target.value)}>\r\n <option value=\"Booking\">Booking</option>\r\n <option value=\"Client\">Client</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col> \r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Send Form After</Form.Label>\r\n <Form.Control type=\"text\" name=\"surveycondition1\" defaultValue={currentSurveyCondition1} onBlur={(event) => setCurrentSurveyCondition1(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n {/* <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Send Form After</Form.Label>\r\n <Form.Control type=\"text\" name=\"surveycondition1\" defaultValue={currentSurveyCondition1} onBlur={(event) => setCurrentSurveyCondition1(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row> */}\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Number of Months (in the past to review) (i.e. 4)</Form.Label>\r\n <Form.Control type=\"text\" name=\"surveymonths\" defaultValue={currentSurveyMonths} onBlur={(event) => setCurrentSurveyMonths(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"8\">\r\n <Form.Group >\r\n <Form.Label>Form Selection</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentSurveyTypeSetting1} onBlur={(event) => setCurrentSurveyTypeSetting1(event.target.value)}>\r\n {forms && forms.map((form) => ( \r\n <option value={form.formID}>{form.formName}</option>\r\n ))}\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Label style={{fontWeight: 600}}>Changing Form may retrigger forms being sent to clients from the past</Form.Label>\r\n </Col>\r\n </Row>\r\n <Row style={{marginTop: 10}}>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Status</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentStatus} onBlur={(event) => setCurrentStatus(event.target.value)}>\r\n <option value=\"Active\">Active</option>\r\n <option value=\"InActive\">InActive</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col> \r\n </Row>\r\n </Modal.Body>\r\n <Modal.Footer className=\"contracts-modal\">\r\n <Button variant=\"secondary\" onClick={handleClose}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"primary\" onClick={putSurvey}>\r\n Save\r\n </Button>\r\n </Modal.Footer>\r\n\r\n </Modal>\r\n\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n","import React from 'react'\r\nimport { useSelector } from 'react-redux'\r\nimport { DataGridPro } from '@mui/x-data-grid-pro'\r\nimport { Paper } from '@material-ui/core'\r\n\r\n\r\nexport default function NthQLDPHNDetail() \r\n{\r\n const nthqldphnDetails = useSelector(state => state.admin.NthQLDPHNDetails)\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'BookingID', width: 100, hide: true },\r\n { field: 'clientName', headerName: 'Name', width: 200 },\r\n { field: 'providerName', headerName: 'Provider', width: 200 },\r\n { field: 'bookingDate', headerName: 'Booking Date', width: 160 },\r\n { field: 'status', headerName: 'Status', width: 110 }\r\n ];\r\n\r\n\r\n return (\r\n <>\r\n { nthqldphnDetails ? \r\n <Paper style={{ height: 700 }}>\r\n <DataGridPro \r\n disableColumnMenu={true}\r\n rows={nthqldphnDetails} columns={columns} pageSize={10} checkboxSelection={false} sortModel={[{ field: 'clientName', sort: 'asc' }]}\r\n />\r\n </Paper>\r\n : ('None')\r\n }\r\n </>\r\n )\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { DataGridPro } from '@mui/x-data-grid-pro'\r\nimport { Button, Modal } from \"react-bootstrap\";\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { Grid, Paper } from '@material-ui/core';\r\nimport NthQLDPHNDetail from \"../../../components/NthQLDPHNDetail\"\r\nimport { toAbsoluteUrl } from \"../../../../_metronic\";\r\n\r\n\r\nexport default function NthQLDPHNStatistics() {\r\n\r\n const nthqldphnStatistics = useSelector(state => state.admin.NthQLDPHNStatistics)\r\n const nthqldphnIssues = useSelector(state => state.admin.NthQLDPHNIssues)\r\n const [showDetails, setShowDetails] = useState(false);\r\n const [detailsHeader, setDetailsHeader] = useState('');\r\n\r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Admin.actions.fetchNthQLDPHNStatistics()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchNthQLDPHNIssues()) }, [dispatch] )\r\n\r\n const showDetail = (lga,contentType,quarter,month) => {\r\n // console.log('Lga',lga)\r\n // console.log('contentType',contentType)\r\n // console.log('quarter',quarter)\r\n // Need to remove / character from quarter\r\n quarter = quarter.replace('/','-')\r\n dispatch(Admin.actions.fetchNthQLDPHNDetails({lga : lga, contentType : contentType, quarter : quarter, month: month}))\r\n if (month === '')\r\n {\r\n setDetailsHeader(lga + ' ' + contentType + ' For the period ' + quarter)\r\n }\r\n else\r\n {\r\n setDetailsHeader(lga + ' ' + contentType + ' For the period ' + quarter + ' Month ' + month)\r\n }\r\n setShowDetails(true)\r\n }\r\n\r\n function handleDetailsClose() {\r\n setShowDetails(false);\r\n } \r\n\r\n const columnsIssues = [\r\n { field: 'id', headerName: 'ID', width: 100, hide: true },\r\n { field: 'firstname', headerName: 'FirstName', width: 150 },\r\n { field: 'surname', headerName: 'Surname', width: 150 },\r\n { field: 'issue', headerName: 'Issue', width: 650 }\r\n ];\r\n\r\n \r\n const columnsTotal = [\r\n { field: 'id', headerName: 'ID', width: 100, hide: true },\r\n { field: 'quarter', headerName: 'Year/Quarter', width: 130,\r\n renderCell: (params) => (\r\n <>\r\n {params.row.month === 'Tot' ?\r\n <strong>\r\n {params.value}\r\n </strong>\r\n :\r\n <>\r\n {params.value}\r\n </>\r\n }\r\n </>\r\n ),\r\n },\r\n { field: 'month', headerName: 'Mth', width: 80,\r\n renderCell: (params) => (\r\n <>\r\n {params.value === 'Tot' ?\r\n <strong>\r\n {params.value}\r\n </strong>\r\n :\r\n <>\r\n {params.value}\r\n </>\r\n }\r\n </>\r\n ),\r\n },\r\n { field: 'cairnsBookings', width: 90, renderHeader: () => {\r\n return (\r\n <div style={{ lineHeight: \"1.5em\" }}>\r\n <span>Cairns</span>\r\n <br />\r\n <span>Bookings</span>\r\n </div>\r\n );\r\n }, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => showDetail('Cairns','Bookings',params.row.quarter,params.row.month)} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'cairnsBookingsDNA', width: 80, renderHeader: () => {\r\n return (\r\n <div style={{ lineHeight: \"1.5em\" }}>\r\n <span>Cairns</span>\r\n <br />\r\n <span>DNA</span>\r\n </div>\r\n );\r\n }, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => showDetail('Cairns','BookingsDNA',params.row.quarter,params.row.month)} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'cairnsClients', width: 80, renderHeader: () => {\r\n return (\r\n <div style={{ lineHeight: \"1.5em\" }}>\r\n <span>Cairns</span>\r\n <br />\r\n <span>Clients</span>\r\n </div>\r\n );\r\n }, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => showDetail('Cairns','Clients',params.row.quarter,params.row.month)} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n\r\n { field: 'townsvilleBookings', width: 90, renderHeader: () => {\r\n return (\r\n <div style={{ lineHeight: \"1.5em\" }}>\r\n <span>Townsville</span>\r\n <br />\r\n <span>Bookings</span>\r\n </div>\r\n );\r\n }, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => showDetail('Townsville','Bookings',params.row.quarter,params.row.month)} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'townsvilleBookingsDNA', width: 90, renderHeader: () => {\r\n return (\r\n <div style={{ lineHeight: \"1.5em\" }}>\r\n <span>Townsville</span>\r\n <br />\r\n <span>DNA</span>\r\n </div>\r\n );\r\n }, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => showDetail('Townsville','BookingsDNA',params.row.quarter,params.row.month)} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'townsvilleClients', width: 90, renderHeader: () => {\r\n return (\r\n <div style={{ lineHeight: \"1.5em\" }}>\r\n <span>Townsville</span>\r\n <br />\r\n <span>Clients</span>\r\n </div>\r\n );\r\n }, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => showDetail('Townsville','Clients',params.row.quarter,params.row.month)} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n\r\n { field: 'mackayBookings', width: 80, renderHeader: () => {\r\n return (\r\n <div style={{ lineHeight: \"1.5em\" }}>\r\n <span>Mackay</span>\r\n <br />\r\n <span>Bookings</span>\r\n </div>\r\n );\r\n }, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => showDetail('Mackay','Bookings',params.row.quarter,params.row.month)} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'mackayBookingsDNA', width: 80, renderHeader: () => {\r\n return (\r\n <div style={{ lineHeight: \"1.5em\" }}>\r\n <span>Mackay</span>\r\n <br />\r\n <span>DNA</span>\r\n </div>\r\n );\r\n }, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => showDetail('Mackay','BookingsDNA',params.row.quarter,params.row.month)} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'mackayClients', width: 80, renderHeader: () => {\r\n return (\r\n <div style={{ lineHeight: \"1.5em\" }}>\r\n <span>Mackay</span>\r\n <br />\r\n <span>Clients</span>\r\n </div>\r\n );\r\n }, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => showDetail('Mackay','Clients',params.row.quarter,params.row.month)} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n\r\n { field: 'unknownBookings', width: 80, renderHeader: () => {\r\n return (\r\n <div style={{ lineHeight: \"1.5em\" }}>\r\n <span>Unknown</span>\r\n <br />\r\n <span>Bookings</span>\r\n </div>\r\n );\r\n }, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => showDetail('Unknown','Bookings',params.row.quarter,params.row.month)} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'unknownBookingsDNA', width: 80, renderHeader: () => {\r\n return (\r\n <div style={{ lineHeight: \"1.5em\" }}>\r\n <span>Unknown</span>\r\n <br />\r\n <span>DNA</span>\r\n </div>\r\n );\r\n }, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => showDetail('Unknown','BookingsDNA',params.row.quarter,params.row.month)} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'unknownClients', width: 80, renderHeader: () => {\r\n return (\r\n <div style={{ lineHeight: \"1.5em\" }}>\r\n <span>Unknown</span>\r\n <br />\r\n <span>Clients</span>\r\n </div>\r\n );\r\n }, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => showDetail('Unknown','Clients',params.row.quarter,params.row.month)} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n\r\n { field: 'totalBookings', width: 80, renderHeader: () => {\r\n return (\r\n <div style={{ lineHeight: \"1.5em\" }}>\r\n <span>Total</span>\r\n <br />\r\n <span>Bookings</span>\r\n </div>\r\n );\r\n }, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => showDetail('Total','Bookings',params.row.quarter,params.row.month)} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'totalBookingsDNA', width: 80, renderHeader: () => {\r\n return (\r\n <div style={{ lineHeight: \"1.5em\" }}>\r\n <span>Total</span>\r\n <br />\r\n <span>DNA</span>\r\n </div>\r\n );\r\n }, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => showDetail('Total','BookingsDNA',params.row.quarter,params.row.month)} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'totalClients', width: 80, renderHeader: () => {\r\n return (\r\n <div style={{ lineHeight: \"1.5em\" }}>\r\n <span>Total</span>\r\n <br />\r\n <span>Clients</span>\r\n </div>\r\n );\r\n }, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => showDetail('Total','Clients',params.row.quarter,params.row.month)} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n ];\r\n\r\n return (\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h4 style={{ marginBottom: 12 }}>NthQLDPHN Program Statistics</h4></Grid>\r\n </Grid>\r\n <img\r\n alt=\"Logo\"\r\n src={toAbsoluteUrl(\"/media/misc/NthQLDPHNPlan.png\")}\r\n style={{ marginLeft: -10 }}\r\n />\r\n\r\n\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h6 style={{ marginBottom: 15, marginTop: 15 }}>Region Totals Per Year/Quarter/Month (includes future bookings)</h6></Grid>\r\n </Grid>\r\n\r\n { nthqldphnStatistics ? \r\n <Paper style={{ height: 600 }}>\r\n <DataGridPro \r\n disableColumnMenu={true}\r\n rows={nthqldphnStatistics} columns={columnsTotal} pageSize={10} checkboxSelection={false} \r\n />\r\n </Paper>\r\n : ('None')\r\n }\r\n\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h6 style={{ marginBottom: 15, marginTop: 15 }}>Reporting Issues Found</h6></Grid>\r\n </Grid>\r\n\r\n { nthqldphnIssues ? \r\n <Paper style={{ height: 300, paddingBottom: 15 }}>\r\n <DataGridPro rows={nthqldphnIssues} columns={columnsIssues} pageSize={5} checkboxSelection={false} rowHeight={40} />\r\n </Paper>\r\n : ('None')\r\n }\r\n\r\n\r\n <Modal show={showDetails} onHide={handleDetailsClose} dialogClassName=\"editprofile-modal\">\r\n <Modal.Header closeButton className=\"editprofile-modal\">\r\n <Modal.Title>{detailsHeader} </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"editprofile-modal\">\r\n <NthQLDPHNDetail/>\r\n </Modal.Body>\r\n <Modal.Footer className=\"editprofile-modal\">\r\n <Button variant=\"secondary\" onClick={handleDetailsClose}>\r\n Cancel\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n </>\r\n )\r\n\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { DataGridPro } from '@mui/x-data-grid-pro'\r\nimport { Form, InputGroup } from \"react-bootstrap\"; \r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { Grid, Paper } from '@material-ui/core';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport Alert from '@material-ui/lab/Alert';\r\nimport AlertTitle from '@material-ui/lab/AlertTitle';\r\n\r\n\r\n\r\nexport default function ProviderStatistics() {\r\n\r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Admin.actions.fetchProviderStatistics()) }, [dispatch] )\r\n const [searchTerm, setSearchTerm] = useState('')\r\n const providerStatistics = useSelector(state => state.admin.ProviderStatistics)\r\n const filters = useSelector(state => state.admin.Filters)\r\n\r\n const searchProviderStatistic = (provider) => {\r\n if( true\r\n && ((provider.fullname && provider.fullname.toLowerCase().search(searchTerm.toLowerCase()) > -1) || (searchTerm.length === 0))\r\n && (filters.providerStatisticsRecentBookings === 'All' || (filters.providerStatisticsRecentBookings === 'Recent' && provider.noBookingsin12Months === 0) || (filters.providerStatisticsRecentBookings === 'NotRecent' && provider.noBookingsin12Months === 1)) \r\n && (filters.providerStatisticsStatus === 'All' || (filters.providerStatisticsStatus === 'Active' && provider.archivedProvider === 1) || (filters.providerStatisticsStatus === 'InActive' && provider.archivedProvider === 0)) \r\n )\r\n {\r\n return provider\r\n } \r\n }\r\n const filteredProviderStatistics = providerStatistics.filter(providerStatistic => searchProviderStatistic(providerStatistic))\r\n\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', width: 100, hide: true },\r\n { field: 'fullName', headerName: 'Name', width: 200 },\r\n { field: 'email', headerName: 'Email', width: 300 },\r\n { field: 'activeClients', headerName: 'AC', type: 'number', width: 100 },\r\n { field: 'upcomingBookings', headerName: 'UB', type: 'number', width: 100 },\r\n { field: 'bookingsOverPast30Days', headerName: 'BP30', type: 'number', width: 100 },\r\n { field: 'bulkBilledRatioOverPast30Days', headerName: 'BB', type: 'number', width: 100 },\r\n { field: 'averageNumberSessionsPerClient', headerName: 'AV', type: 'number', width: 100 },\r\n { field: 'averageNumberRHCSessionsPerClient', headerName: 'RHC Av', type: 'number', width: 100 },\r\n { field: 'averageNumberRHCSessionsPerClientNoGP', headerName: 'RHC AvNGP', type: 'number', width: 100 },\r\n { field: 'totalSessionsDeliveredViaRHC', headerName: 'SD', type: 'number', width: 100 },\r\n { field: 'totalBulkBilledSessions', headerName: 'TBB', type: 'number', width: 100 }\r\n ];\r\n\r\n\r\n const handleSearch = (event) => {\r\n const searchTerm = event.target.value \r\n setSearchTerm(searchTerm)\r\n }\r\n\r\n\r\n return (\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h4 style={{ marginBottom: 12 }}>Provider Statistics</h4></Grid>\r\n </Grid>\r\n\r\n <Alert severity=\"info\" variant=\"light\" style={{ backgroundColor: \"#DAF3F4\", borderColor: \"#CEE6E7\", marginBottom: 15 }}>\r\n <AlertTitle>Column Headings:</AlertTitle>\r\n <ul>\r\n <li>\r\n <p>AC - Active Clients</p>\r\n </li>\r\n <li>\r\n <p>UB - Upcoming Bookings</p>\r\n </li>\r\n <li>\r\n <p>BP30 - Bookings Over Past 30 Days</p>\r\n </li>\r\n <li>\r\n <p>BB - Bulk Billed Percentage Over Past 30 Days</p>\r\n </li>\r\n <li>\r\n <p>AV - Average Number of Sessions Per Client</p>\r\n </li>\r\n <li>\r\n <p>RHC Av - Average Number RHC Sessions Per Client</p>\r\n </li>\r\n <li>\r\n <p>RHC AvNGP - Average Number RHC Sessions Per Client not including GP Bookings</p>\r\n </li>\r\n <li>\r\n <p>SD - Total Sessions Delivered via RHC</p>\r\n </li>\r\n <li>\r\n <p>TBB - Total Bulk Billed Sessions</p> \r\n </li> \r\n </ul> \r\n </Alert>\r\n \r\n\r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10 }}>\r\n <Grid item style={{ marginTop: 2, marginLeft: 10 }}>\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(event) => handleSearch(event)}\r\n autoComplete='OFF'\r\n />\r\n </InputGroup>\r\n </Grid>\r\n <Grid item style={{ marginLeft: 10 }}> \r\n <Form.Control as=\"select\" size=\"sm\" style={{ height: 35 }} defaultValue={filters.providerStatisticsStatus} onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'providerStatisticsStatus', filterValue: event.target.value }))}>\r\n <option value=\"All\">All</option>\r\n <option value=\"Active\">Active</option>\r\n <option value=\"InActive\">InActive</option>\r\n </Form.Control>\r\n </Grid>\r\n <Grid item style={{ marginLeft: 10 }}> \r\n <Form.Control as=\"select\" size=\"sm\" style={{ height: 35 }} defaultValue={filters.providerStatisticsRecentBookings} onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'providerStatisticsRecentBookings', filterValue: event.target.value }))}>\r\n <option value=\"All\">All</option>\r\n <option value=\"Recent\">Recent Only</option>\r\n <option value=\"NotRecent\">Not Recent Only</option>\r\n </Form.Control> \r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n\r\n { providerStatistics ? \r\n <Paper style={{ height: 700 }}>\r\n <DataGridPro rows={filteredProviderStatistics} columns={columns} pageSize={10} checkboxSelection={false} rowHeight={40} />\r\n </Paper>\r\n : ('None')\r\n }\r\n\r\n </>\r\n )\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { Button, Modal, Form, Row, Col, InputGroup } from \"react-bootstrap\";\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { Paper, TableContainer, Table, TableHead, TableBody, TableRow, TableCell, Grid, FormControl, Select, InputLabel, MenuItem, makeStyles } from '@material-ui/core';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport { format } from \"date-fns\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\nimport '../../../../_metronic/_assets/css/app.css';\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n noBorder: {\r\n border: \"none\",\r\n },\r\n\tformControl: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: 120,\r\n\t},\r\n\tformControlWide: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: '100%',\r\n\t},\r\n\tselectEmpty: {\r\n\t marginTop: theme.spacing(2),\r\n\t},\r\n\tlabel: {\r\n\t backgroundColor: '#fff',\r\n\t paddingLeft: 3,\r\n\t paddingRight: 3,\r\n\t}\r\n }));\r\n\r\nexport default function Opportunity() {\r\n\r\n const [searchTerm, setSearchTerm] = useState('')\r\n const filters = useSelector(state => state.admin.Filters)\r\n const opportunities = useSelector(state => state.admin.Opportunities)\r\n\r\n const searchOpportunities = (opportunity) => {\r\n if( true\r\n && (opportunity.description.toLowerCase().search(searchTerm.toLowerCase()) > -1 || searchTerm.length === 0)\r\n && (!filters.opportunityStatus || (filters.opportunityStatus && opportunity.status === filters.opportunityStatus))\r\n && (!filters.opportunityType || filters.opportunityType === 'All' || (filters.opportunityStatus && opportunity.type === filters.opportunityStatus))\r\n )\r\n {\r\n return opportunity\r\n } \r\n }\r\n\r\n const filteredOpportunities = opportunities.filter(opportunity => searchOpportunities(opportunity))\r\n\r\n const dispatch = useDispatch()\r\n const classes = useStyles()\r\n useEffect( () => { dispatch(Admin.actions.fetchOpportunities()) }, [dispatch] )\r\n\r\n const [show, setShow] = useState(false)\r\n const [currentOpportunityID, setcurrentOpportunityID] = useState()\r\n const [currentOpportunityDescription,setcurrentOpportunityDescription] = useState()\r\n const [currentOpportunityColour,setcurrentOpportunityColour] = useState()\r\n const [currentOpportunityStatus,setcurrentOpportunityStatus] = useState()\r\n const [currentOpportunityInterested, setcurrentOpportunityInterested] = useState()\r\n const [currentType, setcurrentType] = useState()\r\n\r\n const loadOpportunityDetail = (thisOpportunity) => {\r\n setcurrentOpportunityID(thisOpportunity.id)\r\n setcurrentOpportunityDescription(thisOpportunity.description)\r\n setcurrentOpportunityStatus(thisOpportunity.status)\r\n setcurrentOpportunityColour(thisOpportunity.colour)\r\n setcurrentOpportunityInterested(thisOpportunity.opportunityinterested)\r\n setcurrentType(thisOpportunity.type)\r\n setShow(true)\r\n }\r\n\r\n const createNewOpportunity = (thisOpportunity) => {\r\n setcurrentOpportunityID(0)\r\n setcurrentOpportunityDescription('')\r\n setcurrentOpportunityStatus('Active')\r\n setcurrentOpportunityColour('#00B3BE')\r\n setcurrentOpportunityInterested()\r\n setcurrentType('System')\r\n setShow(true)\r\n }\r\n\r\n function putOpportunity() {\r\n // Create payload to send to API \r\n var payload = {\r\n id : currentOpportunityID,\r\n description : currentOpportunityDescription,\r\n status : currentOpportunityStatus,\r\n colour : currentOpportunityColour\r\n }\r\n //\r\n // process.env.REACT_APP_DEBUG && console.log(payload);\r\n process.env.REACT_APP_DEBUG && console.log ('Saving data');\r\n // Save update \r\n dispatch(Admin.actions.putOpportunity(payload));\r\n setShow(false);\r\n }\r\n\r\n function resetInterestedProviders()\r\n {\r\n dispatch(Admin.actions.putResetInterestedProviders({ clientID: currentOpportunityID, type: 'Admin' }))\r\n setShow(false)\r\n }\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', width: 100, hide: true },\r\n { field: 'description', headerName: 'Description', width: 400, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => loadOpportunityDetail(opportunities.find(opportunity => opportunity.id === params.row.id))} className=\"cell-Link\" >\r\n {params.value.substring(0,100)}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'created', headerName: 'Created On', width: 155, sortable : true, renderCell: (params) => (format(new Date(params.row.created), \"dd-MM-yyyy HH:mm:ss a\")), cellClassName: 'grid-mono-font' },\r\n { field: 'type', headerName: 'Type', width: 120 },\r\n { field: 'firstname', headerName: 'Firstname', width: 150 },\r\n { field: 'surname', headerName: 'Surname', width: 120 },\r\n { field: 'status', headerName: 'Status', width: 150 },\r\n ];\r\n\r\n \r\n function handleClose() {\r\n setShow(false);\r\n } \r\n\r\n const handleSearch = (event) => {\r\n const searchTerm = event.target.value \r\n setSearchTerm(searchTerm)\r\n }\r\n\r\n\r\n return (\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h4 style={{ marginBottom: 12 }}>Opportunity Maintenance</h4></Grid>\r\n </Grid>\r\n\r\n <Paper> \r\n <Grid container style={{ padding: 10 }}>\r\n <Grid item style={{ paddingTop: 2, paddingRight: 10 }}>\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(event) => handleSearch(event)}\r\n autoComplete='OFF'\r\n />\r\n </InputGroup>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl}>\r\n <InputLabel id=\"opportunityStatus-label\" className={classes.label}>Status</InputLabel>\r\n <Select\r\n labelId=\"opportunityStatus-label\"\r\n id=\"opportunityStatus\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n value={filters.opportunityStatus}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'opportunityStatus', filterValue: event.target.value }))}\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\" }}\r\n displayEmpty\r\n inputProps={{ 'aria-label': 'Without label' }}\r\n >\r\n <MenuItem value='Active'>Active</MenuItem>\r\n <MenuItem value=\"Closed\">Closed</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl}>\r\n <InputLabel id=\"opportunityType-label\" className={classes.label}>Type</InputLabel>\r\n <Select\r\n labelId=\"opportunityType-label\"\r\n id=\"opportunityType\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n value={filters.opportunityType}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'opportunityType', filterValue: event.target.value }))}\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\" }}\r\n displayEmpty\r\n inputProps={{ 'aria-label': 'Without label' }}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n <MenuItem value='System'>System</MenuItem>\r\n <MenuItem value=\"Client\">Client</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n <Grid item >\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => createNewOpportunity()}>\r\n Create System Opportunity\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n\r\n\r\n { opportunities ? \r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={filteredOpportunities} columns={columns} pageSize={10} checkboxSelection={false} rowHeight={40} sortModel={[{ field: 'created', sort: 'desc' }]} />\r\n </Paper>\r\n : ('None')\r\n }\r\n\r\n\r\n <Modal show={show} onHide={handleClose} dialogClassName=\"editprofile-modal\">\r\n <Modal.Header closeButton className=\"editprofile-modal\" style={{ paddingBottom: 0 }}>\r\n <Modal.Title>\r\n {currentOpportunityID === 0 ? 'Create Opportunity' : 'Update Opportunity'}\r\n </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"editprofile-modal\">\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Opportunity Details (Max 500 characters)</Form.Label>\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" name=\"opportunityDescription\" defaultValue={currentOpportunityDescription} onBlur={(event) => setcurrentOpportunityDescription(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Colour</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentOpportunityColour} onBlur={(event) => setcurrentOpportunityColour(event.target.value)}>\r\n <option value=\"#00B3BE\">Aqua</option>\r\n <option value=\"#A33383\">Magenta</option>\r\n <option value=\"#D2B12B\">Yellow</option>\r\n <option value=\"#93A33A\">Green</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Status</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentOpportunityStatus} onBlur={(event) => setcurrentOpportunityStatus(event.target.value)}>\r\n <option value=\"Active\">Active</option>\r\n <option value=\"Closed\">Closed</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n {currentType === 'System' ?\r\n <Col md=\"3\" style={{ paddingTop: 26}}>\r\n <Button variant=\"primary\" onClick={() => resetInterestedProviders()}>\r\n Reset Interested Providers\r\n </Button>\r\n </Col>\r\n :\r\n null\r\n }\r\n </Row>\r\n <Row>\r\n <Col md=\"9\">\r\n <Form.Label>Interested Providers</Form.Label>\r\n <Paper>\r\n <TableContainer style={{ backgroundColor: '#FFF', height: 340, width: \"100%\", overflowY: \"scroll\" }}>\r\n <Table className={classes.table} aria-label=\"simple table\">\r\n <TableHead>\r\n <TableRow>\r\n <TableCell>Provider</TableCell>\r\n <TableCell>Expressed Interest</TableCell>\r\n <TableCell>Relevant Info</TableCell>\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {currentOpportunityInterested ? currentOpportunityInterested.map((row) => (\r\n <TableRow key={row.id}>\r\n <TableCell>\r\n {row.providerName}\r\n </TableCell>\r\n <TableCell>\r\n {format(new Date(row.createdOn), \"dd-MM-yyyy HH:mm\")}\r\n </TableCell>\r\n <TableCell>\r\n {row.relevantInfo}\r\n </TableCell>\r\n </TableRow>\r\n ))\r\n : \r\n null\r\n }\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </Paper>\r\n </Col>\r\n </Row>\r\n </Modal.Body> \r\n <Modal.Footer className=\"editprofile-modal\">\r\n <Button variant=\"secondary\" onClick={handleClose}>\r\n Cancel\r\n </Button>\r\n {currentType === 'System' ?\r\n <Button variant=\"primary\" onClick={putOpportunity}>\r\n Save\r\n </Button>\r\n :\r\n null\r\n }\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n\r\n\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n","import React, { Suspense } from \"react\";\r\nimport { Redirect, Route, Switch } from \"react-router-dom\";\r\nimport Dashboard from \"./Dashboard\";\r\nimport { useSelector } from 'react-redux'\r\n\r\n\r\n// Not sure about these two\r\n// import Basic from \"./Basic\"; \r\nimport { LayoutSplashScreen } from \"../../../_metronic\";\r\n\r\n// Admin Pages \r\nimport InterestedPsychologists from \"./admin/InterestedPsychologists\";\r\nimport RegisteredPsychologists from \"./admin/RegisteredPsychologists\";\r\nimport Referrers from \"./admin/Referrers\";\r\nimport Clients from \"./admin/Clients\";\r\nimport { ClientInvitesAdmin } from \"./admin/ClientInvites\";\r\nimport MedicalPractitioners from \"./admin/MedicalPractitioners\";\r\nimport MedicalPractices from \"./admin/MedicalPractices\";\r\nimport SearchClientData from \"./admin/SearchClientData\";\r\nimport SearchBookingData from \"./admin/SearchBookingData\";\r\nimport Notifications from \"./admin/Notifications\";\r\n// import Referrals from \"./admin/Referrals\";\r\nimport Faxes from \"./admin/Faxes\";\r\nimport VerifyXero from \"./admin/VerifyXero\";\r\nimport VerifyNDISXero from \"./admin/VerifyNDISXero\";\r\nimport Invoices from \"./admin/Invoices\";\r\nimport InvoiceContracts from \"./admin/InvoiceContracts\"\r\nimport InvoiceNthQLDPHN from \"./admin/InvoiceNthQLDPHN\"\r\nimport InvoiceNDIS from \"./admin/InvoiceNDIS\";\r\nimport InvoiceLog from \"./admin/InvoiceLog\";\r\nimport GatherBillable from \"./admin/GatherBillable\"\r\nimport GatherBillableAll from \"./admin/GatherBillableAll\"\r\nimport GatherBillableContracts from \"./admin/GatherBillableContracts\"\r\nimport GatherBillableNthQLDPHN from \"./admin/GatherBillableNthQLDPHN\"\r\nimport GatherBillableNDIS from \"./admin/GatherBillableNDIS\";\r\nimport GatherBillableContractsProvider from \"./admin/GatherBillableContractsProvider\";\r\nimport GatherBillableNDISProvider from \"./admin/GatherBillableNDISProvider\";\r\nimport ProfileAdmin from \"./admin/ProfileAdmin\"\r\nimport PaymentNDIS from \"./admin/PaymentNDIS\";\r\nimport PaymentContracts from \"./admin/PaymentContracts\";\r\n// import Cancellations from \"./admin/Cancellations\";\r\nimport AdminReporting from \"./configuration/AdminReporting\";\r\nimport AdminUsers from \"./configuration/AdminUsers\";\r\nimport MetaDataConfig from \"./configuration/MetaDataConfig\";\r\nimport FormConfig from \"./admin/FormConfigAdmin\";\r\nimport Contracts from \"./admin/Contracts\";\r\nimport Programs from './configuration/Programs'\r\nimport Surveys from './configuration/Surveys'\r\nimport NthQLDPHNStatistics from './configuration/NthQLDPHNStatistics'\r\nimport ProviderStatistics from './configuration/ProviderStatistics'\r\nimport Opportunity from './configuration/Opportunity'\r\n\r\n// Reference Pages \r\n// import UserRoles from \"./reference/UserRoles\";\r\n\r\nexport default function HomePageAdmin() {\r\n\r\n const roleScope = useSelector(state => state.auth.roleScope)\r\n if (roleScope === 'Provisional')\r\n {\r\n return (\r\n <Suspense fallback={<LayoutSplashScreen />}>\r\n <Switch>\r\n {\r\n /* Redirect from root URL to /dashboard. */\r\n <Redirect exact from=\"/\" to=\"/dashboard\" />\r\n }\r\n <Route path=\"/dashboard\" component={Dashboard} />\r\n <Route path=\"/interestedpsychologists\" component={InterestedPsychologists} />\r\n <Route path=\"/registeredpsychologists\" component={RegisteredPsychologists} />\r\n <Route path=\"/provisionalclients\" render={(props) => <Clients {...props} clienttype={`Provisional`} />} />\r\n <Route path=\"/gpclients\" render={(props) => <Clients {...props} clienttype={`GP`} />} />\r\n <Route path=\"/clientinvites\" component={ClientInvitesAdmin} />\r\n <Redirect to=\"/error/error-v1\" />\r\n </Switch>\r\n </Suspense>\r\n );\r\n }\r\n else\r\n {\r\n return (\r\n <Suspense fallback={<LayoutSplashScreen />}>\r\n <Switch>\r\n {\r\n /* Redirect from root URL to /dashboard. */\r\n <Redirect exact from=\"/\" to=\"/dashboard\" />\r\n }\r\n <Route path=\"/dashboard\" component={Dashboard} />\r\n \r\n {/* Admin Pages */}\r\n <Route path=\"/interestedpsychologists\" component={InterestedPsychologists} />\r\n <Route path=\"/registeredpsychologists\" component={RegisteredPsychologists} />\r\n \r\n <Route path=\"/referrers\" component={Referrers} />\r\n \r\n <Route path=\"/psychologyclients\" render={(props) => <Clients {...props} clienttype={`Psychologist`} />} />\r\n <Route path=\"/financialclients\" render={(props) => <Clients {...props} clienttype={`Financial`} />} />\r\n <Route path=\"/gpclients\" render={(props) => <Clients {...props} clienttype={`GP`} />} />\r\n <Route path=\"/provisionalclients\" render={(props) => <Clients {...props} clienttype={`Provisional`} />} />\r\n <Route path=\"/socialclients\" render={(props) => <Clients {...props} clienttype={`Social`} />} />\r\n <Route path=\"/nurseclients\" render={(props) => <Clients {...props} clienttype={`Nurse`} />} />\r\n <Route path=\"/occupationalclients\" render={(props) => <Clients {...props} clienttype={`Occupational`} />} />\r\n <Route path=\"/supervisionclients\" render={(props) => <Clients {...props} clienttype={`Supervision`} />} />\r\n <Route path=\"/ndisclients\" render={(props) => <Clients {...props} clienttype={`NDIS`} />} />\r\n <Route path=\"/unassociated\" render={(props) => <Clients {...props} clienttype={`Unassociated`} />} />\r\n <Route path=\"/nthqldphnclients\" render={(props) => <Clients {...props} clienttype={`NthQLDPHN`} />} />\r\n <Route path=\"/eapcontractclients\" render={(props) => <Clients {...props} clienttype={`EAPContract`} />} />\r\n <Route path=\"/privateclients\" render={(props) => <Clients {...props} clienttype={`Private`} />} />\r\n\r\n\r\n <Route path=\"/searchclientdata\" component={SearchClientData} />\r\n <Route path=\"/searchbookingdata\" component={SearchBookingData} />\r\n <Route path=\"/clientinvites\" component={ClientInvitesAdmin} />\r\n <Route path=\"/medicalpractitioners\" component={MedicalPractitioners} />\r\n <Route path=\"/medicalpractices\" component={MedicalPractices} />\r\n <Route path=\"/faxes\" component={Faxes} />\r\n <Route path=\"/notifications\" component={Notifications} />\r\n {/* <Route path=\"/referrals\" component={Referrals} /> */}\r\n <Route path=\"/xeroverify\" component={VerifyXero} />\r\n <Route path=\"/xerondisverify\" component={VerifyNDISXero} />\r\n <Route path=\"/gatherbillableall\" component={GatherBillableAll} />\r\n <Route path=\"/gatherbillable\" component={GatherBillable} />\r\n <Route path=\"/gathercontracts\" component={GatherBillableContracts} />\r\n <Route path=\"/gatherndis\" component={GatherBillableNDIS} />\r\n <Route path=\"/gathercontractsprovider\" component={GatherBillableContractsProvider} />\r\n <Route path=\"/gatherndisprovider\" component={GatherBillableNDISProvider} />\r\n\r\n <Route path=\"/gathernthqldphn\" component={GatherBillableNthQLDPHN} />\r\n <Route path=\"/nthqldphninv\" component={InvoiceNthQLDPHN} />\r\n <Route path=\"/invoices\" component={Invoices} />\r\n <Route path=\"/contractinv\" component={InvoiceContracts} />\r\n <Route path=\"/contractpay\" component={PaymentContracts} />\r\n <Route path=\"/ndisinv\" component={InvoiceNDIS} />\r\n <Route path=\"/ndispay\" component={PaymentNDIS} /> \r\n <Route path=\"/invoicelog\" component={InvoiceLog} />\r\n <Route path=\"/adminprofile\" component={ProfileAdmin} />\r\n \r\n {/* Reference Pages */}\r\n <Route path=\"/adminreporting\" component={AdminReporting} />\r\n <Route path=\"/adminusers\" component={AdminUsers} />\r\n <Route path=\"/metadataconfig\" component={MetaDataConfig} />\r\n <Route path=\"/forms\" component={FormConfig} />\r\n <Route path=\"/contracts\" component={Contracts} />\r\n <Route path=\"/programs\" component={Programs} />\r\n <Route path=\"/surveys\" component={Surveys} />\r\n <Route path=\"/providerstatistics\" component={ProviderStatistics} />\r\n <Route path=\"/nthqldphnstatistics\" component={NthQLDPHNStatistics} />\r\n <Route path=\"/opportunity\" component={Opportunity} />\r\n \r\n <Redirect to=\"/error/error-v1\" />\r\n </Switch>\r\n </Suspense>\r\n );\r\n }\r\n\r\n}\r\n\r\n\r\n","import React, {useState} from \"react\" \r\nimport { useDispatch } from 'react-redux';\r\nimport * as Yup from \"yup\";\r\nimport { Formik } from 'formik';\r\nimport { TextField } from \"@material-ui/core\";\r\nimport { Button } from 'react-bootstrap'\r\nimport * as Auth from '../store/ducks/auth.duck';\r\nimport { Paper } from '@material-ui/core';\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport Visibility from \"@material-ui/icons/Visibility\";\r\nimport VisibilityOff from \"@material-ui/icons/VisibilityOff\";\r\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\r\n\r\n\r\nexport default function UpdatePassword(props) {\r\n\r\n const dispatch = useDispatch()\r\n const [showPassword,setShowPassword] = useState(false);\r\n\r\n const handleClickShowPassword = () => {\r\n // Check existing state value\r\n if (showPassword)\r\n {\r\n setShowPassword(false)\r\n }\r\n else\r\n {\r\n setShowPassword(true)\r\n }\r\n };\r\n\r\n const handleMouseDownPassword = (event) => {\r\n event.preventDefault();\r\n };\r\n\r\n\r\n\r\n function submitForm(values)\r\n {\r\n dispatch(Auth.actions.updatePassword(values))\r\n props.setShowUpdatePassword(false)\r\n }\r\n\r\n const validationSchema = Yup.object().shape({\r\n newPassword: Yup.string()\r\n .min(8,\"Too Short\")\r\n .oneOf([Yup.ref('passwordConfirmation'), null], 'Passwords must match'),\r\n passwordConfirmation: Yup.string()\r\n .min(8,\"Too Short\")\r\n .oneOf([Yup.ref('newPassword'), null], 'Passwords must match'),\r\n });\r\n\r\n \r\n return (\r\n <>\r\n <Formik\r\n initialValues={{\r\n newPassword: '',\r\n passwordConfirmation: ''\r\n }}\r\n validationSchema = {validationSchema}\r\n onSubmit={(values, actions) => {\r\n submitForm(values);\r\n actions.setSubmitting(false);\r\n }}\r\n >\r\n {props => {\r\n const { values, errors, touched, handleChange, handleBlur, handleSubmit, isSubmitting } = props;\r\n return (\r\n <form noValidate={true} autoComplete=\"off\" onSubmit={!isSubmitting ? handleSubmit : undefined} >\r\n <Paper style={{ backgroundColor: \"rgb(245,245,245)\", padding: 20 }} >\r\n <div className=\"form-group\">\r\n <TextField\r\n variant=\"outlined\"\r\n type= {showPassword ? \"text\" : \"password\"}\r\n margin=\"normal\"\r\n label=\"New Password\"\r\n className=\"kt-width-full\"\r\n inputProps={{ style: { backgroundColor: \"white\" }}}\r\n name=\"newPassword\"\r\n onBlur={handleBlur}\r\n onChange={handleChange}\r\n value={values.newPassword}\r\n helperText={touched.newPassword && errors.newPassword}\r\n error={Boolean(touched.newPassword && errors.newPassword)}\r\n autoComplete=\"current-password\"\r\n InputProps={{\r\n endAdornment: <InputAdornment position=\"end\">\r\n <IconButton\r\n onClick={handleClickShowPassword}\r\n onMouseDown={handleMouseDownPassword}\r\n sx={{backgroundColor: \"white\" }}\r\n >\r\n {showPassword ? <Visibility /> : <VisibilityOff />}\r\n </IconButton>\r\n </InputAdornment>\r\n }}\r\n />\r\n </div>\r\n <div className=\"form-group\">\r\n <TextField\r\n variant=\"outlined\"\r\n type= {showPassword ? \"text\" : \"password\"}\r\n margin=\"normal\"\r\n label=\"Confirm Password\"\r\n className=\"kt-width-full\"\r\n inputProps={{ style: { backgroundColor: \"white\" }}}\r\n name=\"passwordConfirmation\"\r\n onBlur={handleBlur}\r\n onChange={handleChange}\r\n value={values.passwordConfirmation}\r\n helperText={touched.passwordConfirmation && errors.passwordConfirmation}\r\n error={Boolean(touched.passwordConfirmation && errors.passwordConfirmation)}\r\n autoComplete=\"current-password\"\r\n InputProps={{\r\n endAdornment: <InputAdornment position=\"end\">\r\n <IconButton\r\n onClick={handleClickShowPassword}\r\n onMouseDown={handleMouseDownPassword}\r\n sx={{backgroundColor: \"white\" }}\r\n >\r\n {showPassword ? <Visibility /> : <VisibilityOff />}\r\n </IconButton>\r\n </InputAdornment>\r\n }}\r\n />\r\n </div>\r\n <div className='kt-login__actions'>\r\n <Button id='kt_login_signin_submit' type='submit' disabled={isSubmitting} variant='primary' >\r\n Update\r\n </Button>\r\n </div>\r\n </Paper>\r\n </form>\r\n )\r\n }}\r\n </Formik>\r\n </>\r\n )\r\n}\r\n","import React from 'react'\r\nimport { withStyles, makeStyles, Switch, Button } from '@material-ui/core'\r\n// import OndemandVideoIcon \t\tfrom '@material-ui/icons/OndemandVideo';\r\n// import SendIcon \t\t\t\tfrom '@material-ui/icons/Send';\r\n// import MarkunreadMailboxIcon \tfrom '@material-ui/icons/MarkunreadMailbox';\r\n// import MessageIcon \t\t\t\tfrom '@material-ui/icons/Message';\r\nimport Tooltip \t\t\t\t\tfrom '@material-ui/core/Tooltip';\r\nimport HelpIcon \t\t\t\tfrom '@material-ui/icons/Help';\r\nimport './ToggleButton.scss'\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n\tbtnDash: {\r\n\t\tcolor: '#fff',\r\n\t\tpadding: '1em 2em 1em 1.5em',\r\n\t\tfontSize: '15px',\r\n\t\ttextTransform: \"capitalize\",\r\n\t\tfontWeight: '100',\r\n\t},\r\n\tbtnDashSmall: {\r\n\t\tpadding: '0.6em 1.2em 0.6em 1em',\r\n\t\tfontSize: '1.1em',\r\n\t},\r\n\tbtnHeroDarker: {\t\tbackgroundColor: '#93A33A',\t'&:hover': {\tbackgroundColor: '#7c9300',\t}\t},\r\n\tbtnFocusContrast: {\t\tbackgroundColor: '#00B3BE',\t'&:hover': {\tbackgroundColor: '#D2B12B',\t}\t},\r\n\tbtnContrastDarker: {\tbackgroundColor: '#D2B12B',\t'&:hover': {\tbackgroundColor: '#b79300',\t}\t},\r\n\tbtnSupportDarker: {\t\tbackgroundColor: '#A33383',\t'&:hover': {\tbackgroundColor: '#890062',\t}\t},\r\n\tbtnAdditionalDarker: {\tbackgroundColor: '#007cbe',\t'&:hover': {\tbackgroundColor: '#005481',\t}\t},\r\n\tbtnToggleButton: {\t\tbackgroundColor: '#00B3BE',\t'&:hover': {\tbackgroundColor: '#009ba5',\t}\t},\r\n\ttooltipIcon: {\r\n\t\tcolor: '#333',\r\n\t\tmarginLeft: '0.6em'\r\n\t}\r\n}));\r\n\r\nconst RHCTooltip = withStyles({\r\n\ttooltip: {\r\n\t color: \"#FFFFFF\",\r\n\t backgroundColor: \"#666\",\r\n\t fontSize: '1.2em',\r\n\t fontWeight: '100',\r\n\t padding: '1em',\r\n\t}\r\n})(Tooltip);\r\n\r\n// WHOLE-BUTTON-TIP\r\n// const ToolTipWrap = ({ title, children }) => title ? <RHCTooltip title={title}>{children}</RHCTooltip> : children;\r\n\r\nexport default function ToggleButton(props) {\r\n\t\r\n\tconst {\r\n\t\tisActive,\r\n\t\thandleToggle,\r\n\t\tlabel,\r\n\t\tid,\r\n\t\tlabelSuffix,\r\n\t\tsize,\r\n\t\ttooltip,\r\n\t} = props;\r\n\r\n\tconst classes = useStyles();\r\n\t// const countClass = isActive\t? 'active' : 'inactive';\r\n\treturn (\r\n\t\t\r\n\r\n\t\t// <ToolTipWrap title={tooltip} className>\t\t\t\t\t\t\t\t// See: WHOLE-BUTTON-TIP ... use this if the tip needs to be on the whole button\r\n\t\t\t<Button\r\n\t\t\t\tclassName={[\r\n\t\t\t\t\t'switch-box',\r\n\t\t\t\t\t'bulk-switcher',\r\n\t\t\t\t\tisActive ? 'active' : 'inactive',\r\n\t\t\t\t\tclasses.btnToggleButton,\r\n\t\t\t\t\tclasses.btnDash,\r\n\t\t\t\t\tsize===\"small\" ? classes.btnDashSmall : ''\r\n\t\t\t\t\t].join(' ')}\r\n\t\t\t\ttabIndex=\"0\"\r\n\t\t\t\ttype=\"button\"\r\n\t\t\t\tonClick={(e) => handleToggle(e,id)}\r\n\t\t\t\tvariant=\"contained\"\r\n\t\t\t\tdisableElevation\r\n\t\t\t\t>\r\n\t\t\t\t\t<Switch\r\n\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\tchecked={isActive}\r\n\t\t\t\t\t\tonClick={(e) => { e.stopPropagation(); handleToggle(e,id) } }\r\n\t\t\t\t\t\tclassName={`bulk-switch ${isActive ? 'active' : 'inactive'}`}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\r\n\t\t\t\t\t{label}{labelSuffix && labelSuffix}\r\n\r\n\t\t\t\t\t{tooltip && <RHCTooltip title={tooltip} >\r\n\t\t\t\t\t\t<HelpIcon className={classes.tooltipIcon} />\r\n\t\t\t\t\t</RHCTooltip>}\r\n\r\n\t\t\t</Button>\r\n\t\t// </ToolTipWrap>\t\t\t\t\t\t\t\t\t\t\t\t\t\t// WHOLE-BUTTON-TIP\r\n\t)\r\n}","import React, { forwardRef, useEffect, useState } from \"react\";\r\nimport clsx from \"clsx\";\r\nimport { isFragment } from \"react-is\";\r\nimport style from \"react-syntax-highlighter/dist/esm/styles/hljs/a11y-dark\";\r\n\r\n// export const PortletHeaderIcon = forwardRef(({ className }, ref) => (\r\n// <span ref={ref} className={clsx(\"kt-portlet__head-icon\", className)} />\r\n// ));\r\n\r\nexport const PortletHeaderTitle = forwardRef(({ className, ...props }, ref) => (\r\n // eslint-disable-next-line jsx-a11y/heading-has-content\r\n <h3\r\n {...props}\r\n ref={ref}\r\n className={clsx(\"kt-portlet__head-title\", className)}\r\n />\r\n));\r\n\r\nexport const PortletHeaderToolbar = forwardRef(\r\n ({ className, ...props }, ref) => (\r\n <div\r\n {...props}\r\n ref={ref}\r\n className={clsx(\"kt-portlet__head-toolbar\", className)}\r\n />\r\n )\r\n);\r\n\r\nexport const PortletHeader = forwardRef(\r\n (\r\n { icon, title, toolbar, className, sticky = false, labelRef, ...props },\r\n ref\r\n ) => {\r\n const [top, setTop] = useState(0);\r\n const [windowHeight, setWindowHeight] = useState(0);\r\n\r\n useEffect(() => {\r\n handleResize();\r\n\r\n function handleResize() {\r\n setWindowHeight(window.innerWidth);\r\n }\r\n\r\n window.addEventListener(\"resize\", handleResize);\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", handleResize);\r\n };\r\n });\r\n\r\n useEffect(() => {\r\n // Skip if sticky is disabled or on initial render when we don't know about window height.\r\n if (!sticky || windowHeight === 0) {\r\n return;\r\n }\r\n\r\n const headerElement = document.querySelector(\".kt-header\");\r\n const subheaderElement = document.querySelector(\".kt-subheader\");\r\n const headerMobileElement = document.querySelector(\".kt-header-mobile\");\r\n\r\n let nextMarginTop = 0;\r\n\r\n // mobile header\r\n if (window.getComputedStyle(headerElement).height === \"0px\") {\r\n nextMarginTop = headerMobileElement.offsetHeight;\r\n } else {\r\n // desktop header\r\n if (document.body.classList.contains(\"kt-header--minimize-topbar\")) {\r\n // hardcoded minimized header height\r\n nextMarginTop = 60;\r\n } else {\r\n // normal fixed header\r\n if (document.body.classList.contains(\"kt-header--fixed\")) {\r\n nextMarginTop += headerElement.offsetHeight;\r\n }\r\n\r\n if (document.body.classList.contains(\"kt-subheader--fixed\")) {\r\n nextMarginTop += subheaderElement.offsetHeight;\r\n }\r\n }\r\n }\r\n\r\n setTop(nextMarginTop);\r\n }, [sticky, windowHeight]);\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className=\"kt-portlet__head\"\r\n style={\r\n !sticky\r\n ? undefined\r\n : { top, position: \"sticky\", backgroundColor: \"#fff\" }\r\n }\r\n >\r\n {title != null && (\r\n <div\r\n ref={labelRef}\r\n className={clsx(\"kt-portlet__head-label\", className)}\r\n >\r\n {icon}\r\n\r\n {/* Wrap string and fragments in PortletHeaderTitle */\r\n typeof title === \"string\" || isFragment(title) ? (\r\n <PortletHeaderTitle>{title}</PortletHeaderTitle>\r\n ) : (\r\n title\r\n )}\r\n </div>\r\n )}\r\n\r\n {toolbar}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nexport const PortletBody = forwardRef(\r\n ({ fit, fluid, className, ...props }, ref) => (\r\n <div\r\n {...props}\r\n ref={ref}\r\n className={clsx(\r\n \"kt-portlet__body\",\r\n {\r\n \"kt-portlet__body--fit\": fit,\r\n \"kt-portlet__body--fluid\": fluid\r\n },\r\n className,\r\n )}\r\n />\r\n )\r\n);\r\n\r\nexport const PortletFooter = forwardRef(({ className, ...props }, ref) => (\r\n <div {...props} ref={ref} className={clsx(\"kt-portlet__foot\", className)} />\r\n));\r\n\r\nexport const Portlet = forwardRef(\r\n ({ fluidHeight, selectedColor, className, ...props }, ref) => (\r\n <div\r\n {...props}\r\n ref={ref}\r\n className={clsx(\r\n \"kt-portlet\",\r\n { \"kt-portlet--height-fluid\": fluidHeight },\r\n className\r\n )}\r\n style={{ \"backgroundColor\": selectedColor }}\r\n />\r\n )\r\n);\r\n\r\n// Set display names for debugging.\r\nif (process.env.NODE_ENV !== \"production\") {\r\n Portlet.displayName = \"Portlet\";\r\n\r\n PortletHeader.displayName = \"PortletHeader\";\r\n // PortletHeaderIcon.displayName = \"PortletHeaderIcon\";\r\n PortletHeaderTitle.displayName = \"PortletHeaderTitle\";\r\n PortletHeaderToolbar.displayName = \"PortletHeaderToolbar\";\r\n\r\n PortletBody.displayName = \"PortletBody\";\r\n PortletFooter.displayName = \"PortletFooter\";\r\n}\r\n","import React from \"react\";\r\n\r\nexport default function QuickStat({ value, desc, color }) {\r\n \r\n return (\r\n <div className=\"kt-widget26\">\r\n <div className=\"kt-widget26__content\" style={{ paddingBottom: \"0.35rem\", position: 'relative' }}>\r\n <span className=\"kt-widget26__number\" style={{ fontSize: \"2.4rem\",color:'white' }}>{value}</span>\r\n <span className=\"kt-widget26__desc\" style={{color:'white'}}>{desc}</span>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import React, { useState, useEffect } from 'react'\r\nimport { Button, Modal, Form, Row, Col } from \"react-bootstrap\";\r\nimport { makeStyles, TextField, Grid, Button as MUIButton } from '@material-ui/core'\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport OndemandVideoIcon \t\tfrom '@material-ui/icons/OndemandVideo';\r\nimport FolderOpenIcon from '@material-ui/icons/FolderOpen';\r\nimport Carousel from 'react-bootstrap/Carousel';\r\nimport * as Admin from \"../../store/ducks/admin.duck\";\r\nimport Notes from \"../../components/Notes\";\r\nimport SendLetter from \"../../components/SendLetter\";\r\nimport PerfectScrollbar from \"react-perfect-scrollbar\";\r\nimport { Link } from \"react-router-dom\";\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport ToggleButton from './ToggleButton';\r\nimport './TileGrid.scss'\r\nimport { isArray } from 'lodash';\r\nimport { useHistory } from 'react-router-dom'\r\nimport { Portlet, PortletBody } from \"../../partials/content/PortletProvider\";\r\nimport QuickStat from \"../../widgets/QuickStatProvider\";\r\n\r\n\r\nconst perfectScrollbarOptions = {\r\n wheelSpeed: 2,\r\n wheelPropagation: false\r\n};\r\n\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n\tbtnDash: {\r\n\t\tcolor: '#fff',\r\n\t\tpadding: '1em 2em',\r\n\t\tfontSize: '1.1em',\r\n\t\ttextTransform: \"capitalize\",\r\n\t\tfontWeight: '100',\r\n width: '90%'\r\n\t},\r\n\tbtnDashHuge: {\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// CONNECTED TO min-width of panel $min-cp-width\r\n\t\tpadding: '0.7em 2.2em',\r\n\t\tfontSize: '1.4em',\r\n\t\t// Adjust icon adding style={{ fontSize: 40 }} to the componentattributes.\r\n\t},\r\n btnBulkBilling: {\r\n width: '100%',\r\n },\r\n\tbtnHeroDarker: {\t\tbackgroundColor: '#93A33A',\t'&:hover': {\tbackgroundColor: '#7c9300',\t}\t},\r\n\tbtnFocusContrast: {\t\tbackgroundColor: '#00B3BE',\t'&:hover': {\tbackgroundColor: '#D2B12B',\t}\t},\r\n\tbtnContrastDarker: {\tbackgroundColor: '#D2B12B',\t'&:hover': {\tbackgroundColor: '#b79300',\t}\t},\r\n\tbtnSupportDarker: {\t\tbackgroundColor: '#A33383',\t'&:hover': {\tbackgroundColor: '#890062',\t}\t},\r\n\tbtnAdditionalDarker: {\tbackgroundColor: '#007cbe',\t'&:hover': {\tbackgroundColor: '#005481',\t}\t},\r\n\tbtnBulkSwitcher: {\t\tbackgroundColor: '#00B3BE',\t'&:hover': {\tbackgroundColor: '#009ba5',\t}\t},\r\n\r\n}));\r\n\r\n\r\nexport default function TileGrid(props) {\r\n\r\n const dispatch = useDispatch()\r\n const registered = useSelector(state => state.admin.RegisteredPsychologists[0]);\r\n const news = useSelector(state => state.admin.DashboardNews)\r\n const activityfeed = useSelector(state => state.admin.ActivityFeed)\r\n const opportunityFeed = useSelector(state => state.admin.OpportunityFeed)\r\n const providerStatistics = useSelector(state => state.admin.ProviderStatistics)\r\n const [isBulkActive, setIsBulkActive] = useState(false)\r\n const [displayBulkBilling, setDisplayBulkBilling] = useState(false)\r\n const [showOpportunityRelevantInfo,setShowOpportunityRelevantInfo] = useState(false)\r\n\r\n const history = useHistory();\r\n const clients = useSelector(state => state.admin.Clients)\r\n const client = useSelector(state => state.admin.Client)\r\n // const medicalPractitioners = useSelector(state => state.admin.MedicalPractitioners);\r\n // const medicalPractices = useSelector(state => state.admin.MedicalPractices.GeneralPractitioner);\r\n \r\n const [currentClient,setcurrentClient] = useState()\r\n const [showNotes, setShowNotes] = useState(false)\r\n const [showLetter,setShowLetter] = useState(false)\r\n // const [showFiles, setShowFiles] = useState(false);\r\n const [noteAction, setNoteAction] = useState('SMS')\r\n const [currentDOB,setcurrentDOB] = useState()\r\n const [currentClientID, setcurrentClientID] = useState() \r\n const [currentFirstName, setcurrentFirstName] = useState()\r\n const [currentPreferredName, setcurrentPreferredName] = useState()\r\n const [currentSurname, setcurrentSurname] = useState();\r\n const [clientOpportunityInterest,setClientOpportunityInterest] = useState()\r\n const [clientOpportunityID,setClientOpportunityID] = useState()\r\n const [clientOpportunityStatus,setClientOpportunityStatus] = useState()\r\n const [clientOpportunityRelevantInfo,setClientOpportunityRelevantInfo] = useState()\r\n // const [currentMedicalPractitionerID, setcurrentMedicalPractitionerID] = useState();\r\n const [nextBookingDate, setnextBookingDate] = useState();\r\n\r\n useEffect( () => { dispatch(Admin.actions.fetchProviderStatistics()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchDashboardNews()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchOpportunityFeed()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchActivityFeed()) }, [dispatch] )\r\n useEffect( () => {\r\n // Determine if bulk billing button can be displayed \r\n if (registered && (registered.providertype === 'Psychologist' || registered.providertype === 'Clinical' || registered.providertype === 'Occupational'))\r\n {\r\n setDisplayBulkBilling(true)\r\n }\r\n else\r\n {\r\n setDisplayBulkBilling(false)\r\n }\r\n // Determine if bulk billing button is set\r\n if (registered && registered.bulkBillingAvailable === \"1\")\r\n {\r\n setIsBulkActive(true)\r\n }\r\n else\r\n {\r\n setIsBulkActive(false)\r\n }\r\n },[registered])\r\n\r\n \r\n\tconst classes = useStyles();\t\r\n\r\n const handleBulkbillingAvailableChange = () => { \r\n if(registered && registered.bulkBillingAvailable === \"0\")\r\n {\r\n // setBulkBillingAvailable(\"1\")\r\n dispatch(Admin.actions.chgBulkBillingAvailability( { id: registered.id, bulkBillingAvailability: \"1\" } ))\r\n }\r\n else\r\n {\r\n // setBulkBillingAvailable(\"0\")\r\n dispatch(Admin.actions.chgBulkBillingAvailability( { id: registered.id, bulkBillingAvailability: \"0\" } ))\r\n } \r\n }\r\n\t\t\r\n function handleClientAutocompleteChange(propertyName, event, newValue) { \r\n if (newValue) {\r\n // console.log(newValue);\r\n setcurrentClient(newValue);\r\n setcurrentClientID(newValue.id)\r\n setcurrentFirstName(newValue.firstname)\r\n setcurrentPreferredName(newValue.preferredname)\r\n setcurrentSurname(newValue.surname)\r\n // console.log(registered);\r\n dispatch(Admin.actions.fetchClient( { clientID: newValue.id, type: registered.providertype } ))\r\n }\r\n } \r\n\r\n function sendLetter(thisClient) {\r\n setNoteAction(noteAction)\r\n setcurrentClientID(thisClient.id);\r\n setcurrentFirstName(thisClient.firstname)\r\n setcurrentPreferredName(thisClient.preferredname)\r\n setcurrentSurname(thisClient.surname)\r\n setcurrentDOB(thisClient.dob)\r\n setShowLetter(true)\r\n }\r\n \r\n function expressInterest() {\r\n // Close modal\r\n setShowOpportunityRelevantInfo(false)\r\n // Make API call to express interest\r\n dispatch(Admin.actions.putClientOpportunityInterest( { clientOpportunityID: clientOpportunityID, providerStatus : clientOpportunityStatus, relevantInfo : clientOpportunityRelevantInfo } ))\r\n }\r\n\r\n function withdrawInterest(clientOpportunityID,status) {\r\n // Make API call to withdraw interest\r\n dispatch(Admin.actions.putClientOpportunityInterest( { clientOpportunityID: clientOpportunityID, providerStatus : status, relevantInfo : '' } ))\r\n }\r\n\r\n function expressInterestModal(clientOpportunityID,status,interest) { \r\n // Pop Modal for Relevant Info\r\n setClientOpportunityInterest(interest)\r\n setClientOpportunityID(clientOpportunityID)\r\n setClientOpportunityStatus(status)\r\n setClientOpportunityRelevantInfo()\r\n setShowOpportunityRelevantInfo(true)\r\n } \r\n\r\n function ReviewPlatFormCosts() {\r\n // console.log(history)\r\n history.push('/platform')\r\n }\r\n\r\n\r\n function loadNotes(thisClient, noteAction) {\r\n setNoteAction(noteAction);\r\n setcurrentClientID(thisClient.id);\r\n setcurrentFirstName(thisClient.firstname)\r\n setcurrentPreferredName(thisClient.preferredname)\r\n setcurrentSurname(thisClient.surname)\r\n setnextBookingDate(thisClient.nextBooking)\r\n setShowNotes(true);\r\n }\r\n\r\n const initMedicalPractice = () => {\r\n return { id: 0, abn: '', practicename: '', phone: '', address1: '', email: '', website: '', logoURL: '', practiceType: 'GeneralPractitioner' }\r\n }\r\n\r\n\treturn (\r\n <>\r\n <Grid container spacing={4} style={{marginBottom:4}}>\r\n <Grid item md={4} >\r\n <Grid container spacing={2} style={{backgroundColor: '#F2F2F2', paddingLeft: 3, marginTop: 10, paddingBottom: 10, marginbottom: 10}}>\r\n {/* marginTop: 10, paddingBottom: 10, paddingTop: 5 */}\r\n <Grid item md={12} >\r\n <h2 className='h2' style={{textTransform: 'uppercase', fontSize: 15, marginBottom: 10, marginLeft: 5, fontWeight: 500}}>Control Panel</h2>\r\n </Grid>\r\n <Grid container spacing={1}>\r\n <Grid item md={3}>\r\n <Grid item md={12} style={{ paddingLeft: 20 }}>\r\n <a href={ registered && registered.teleHealthProvider && registered.teleHealthProvider !== 'COVIU' ? registered.waitingRoomURL : \"https://vcc.healthdirect.org.au/login\" } target=\"_blank\" rel=\"noopener noreferrer\">\r\n <MUIButton\r\n variant=\"contained\"\r\n className={[classes.btnHeroDarker, classes.btnDash, classes.btnDash].join(' ')}\r\n startIcon={<OndemandVideoIcon style={{ fontSize: 40 }} />}\r\n disableElevation\r\n size=\"small\"\r\n >\r\n Enter TeleHealth Room \r\n </MUIButton>\r\n </a>\r\n </Grid>\r\n </Grid>\r\n <Grid item md={9}> \r\n <Grid container spacing={1}>\r\n <Grid item md={6} >\r\n <div className='switch-set' style={{width: '100%'}}>\r\n {displayBulkBilling ?\r\n <ToggleButton\r\n isActive={isBulkActive}\r\n handleToggle={handleBulkbillingAvailableChange}\r\n label='Bulk Billing'\r\n className={classes.btnBulkBilling}\r\n labelSuffix=<span className='bulk-suffix-fixed-width'>{isBulkActive ? 'Active' : 'Paused'}</span>\r\n />\r\n :\r\n null\r\n }\r\n </div>\r\n </Grid>\r\n <Grid item md={6}>\r\n <MUIButton\r\n variant=\"contained\"\r\n className={[classes.btnAdditionalDarker, classes.btnDash].join(' ')}\r\n startIcon={<FolderOpenIcon style={{ fontSize: 24 }} />}\r\n disableElevation\r\n size=\"small\" \r\n onClick={() => loadNotes(client, 'SMS')}\r\n >\r\n Quick Action \r\n </MUIButton>\r\n </Grid>\r\n <Grid item md={6}>\r\n <MUIButton\r\n variant=\"contained\"\r\n className={[classes.btnSupportDarker, classes.btnDash].join(' ')}\r\n startIcon={<FolderOpenIcon style={{ fontSize: 24 }} />}\r\n disableElevation\r\n size=\"small\" \r\n onClick={() => sendLetter(client)}\r\n >\r\n Send Letter\r\n </MUIButton>\r\n </Grid>\r\n <Grid item md={6}>\r\n <MUIButton\r\n variant=\"contained\"\r\n className={[classes.btnContrastDarker, classes.btnDash].join(' ')}\r\n startIcon={<FolderOpenIcon style={{ fontSize: 24 }} />}\r\n disableElevation\r\n size=\"small\" \r\n onClick={() => ReviewPlatFormCosts()}\r\n >\r\n Review Invoice\r\n </MUIButton>\r\n </Grid>\r\n </Grid> \r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid container spacing={2} style={{ backgroundColor: '#F2F2F2', marginTop: 20, paddingBottom: 10, paddingTop: 10}} >\r\n <Grid item md={12} >\r\n <h2 className='h2' style={{ textTransform: 'uppercase', fontSize: 15, marginBottom: 10, marginLeft: 5,fontWeight: 500}}>Notifications</h2>\r\n </Grid>\r\n <Grid item md={12} >\r\n <PerfectScrollbar\r\n options={perfectScrollbarOptions}\r\n style={{\r\n maxHeight: 550,\r\n position: \"relative\"\r\n }} >\r\n <div className=\"kt-notification\">\r\n {activityfeed && activityfeed.map((item, index) => \r\n <Link key={index} to={item.link ? item.link : '/dashboard'} onClick={() => dispatch(Admin.actions.setFilters({ filterName: 'clientsListLoadClientID', filterValue: item.clientID }))} >\r\n <div className=\"kt-notification__item\" key={item.id} style={{ paddingLeft: 2, paddingRight: 1, paddingTop: 3, paddingBottom: 3 }}>\r\n {/* a href={item.link} */}\r\n <div className=\"kt-notification__item-icon\">\r\n <i className={item.icon} />\r\n </div>\r\n <div className=\"kt-notification__item-details\">\r\n <div className=\"kt-notification__item-title\" style={{ color:item.colour}}>\r\n {item.label}\r\n </div>\r\n {item.additional ? \r\n <div className=\"kt-notification__item-title\" >\r\n {item.additional}\r\n </div>\r\n :\r\n null\r\n }\r\n <div className=\"kt-notification__item-time\">\r\n {item.created}\r\n </div>\r\n </div>\r\n </div>\r\n </Link>\r\n )}\r\n </div>\r\n </PerfectScrollbar>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item md={8}>\r\n <Grid container spacing={2} style={{backgroundColor: '#F2F2F2', paddingLeft: 3, marginTop: 10, paddingTop: 5,paddingBottom: 10}}>\r\n {/* marginTop: 10, paddingBottom: 10, paddingTop: 5 */}\r\n <Grid item md={12} >\r\n <h2 className='h2' style={{textTransform: 'uppercase', fontSize: 15, marginBottom: 10, marginLeft: 5, fontWeight: 500}}>Your Statistics</h2>\r\n </Grid>\r\n <div className=\"row\">\r\n <div className=\"col-xl-12\">\r\n <div className=\"row row-full-height\">\r\n <div className=\"col-sm-12 col-md-12 col-lg-3\">\r\n <Portlet className=\"kt-portlet--border-bottom-brand\" selectedColor={'green'}>\r\n <PortletBody fluid={true} >\r\n <QuickStat\r\n value={providerStatistics && providerStatistics.activeClients ? providerStatistics.activeClients : 'N/A'}\r\n desc=\"Active Clients\"\r\n color='green'\r\n />\r\n </PortletBody>\r\n </Portlet>\r\n </div>\r\n\r\n <div className=\"col-sm-12 col-md-12 col-lg-3\">\r\n <Portlet className=\"kt-portlet--border-bottom-brand\" selectedColor={'#E1C340'}>\r\n <PortletBody fluid={true} >\r\n <QuickStat\r\n value={providerStatistics && providerStatistics.upcomingBookings ? providerStatistics.upcomingBookings : 'N/A'}\r\n desc=\"Upcoming Bookings\"\r\n />\r\n </PortletBody>\r\n </Portlet>\r\n </div>\r\n\r\n <div className=\"col-sm-12 col-md-12 col-lg-3\">\r\n <Portlet className=\"kt-portlet--border-bottom-brand\" selectedColor={'#189AB4'}>\r\n <PortletBody fluid={true} >\r\n <QuickStat\r\n value={providerStatistics && providerStatistics.bookingsOverPast30Days ? providerStatistics.bookingsOverPast30Days : 'N/A'}\r\n desc=\"Bookings Over Past 30 Days\"\r\n />\r\n </PortletBody>\r\n </Portlet>\r\n </div>\r\n\r\n <div className=\"col-sm-12 col-md-12 col-lg-3\">\r\n <Portlet className=\"kt-portlet--border-bottom-brand\" selectedColor={'#256A87'}>\r\n <PortletBody fluid={true} >\r\n <QuickStat\r\n value={providerStatistics && providerStatistics.bulkBilledRatioOverPast30Days ? providerStatistics.bulkBilledRatioOverPast30Days : 'N/A'}\r\n desc=\"Bulk Billed Ratio Past 30 Days\"\r\n />\r\n </PortletBody>\r\n </Portlet>\r\n </div>\r\n\r\n <div className=\"col-sm-12 col-md-12 col-lg-3\">\r\n <Portlet className=\"kt-portlet--border-bottom-brand\" selectedColor={'#21B6A8'}>\r\n <PortletBody fluid={true} >\r\n <QuickStat\r\n value={providerStatistics && providerStatistics.averageNumberSessionsPerClient ? providerStatistics.averageNumberSessionsPerClient : 'N/A'}\r\n desc=\"Average Sessions Per Client\"\r\n />\r\n </PortletBody>\r\n </Portlet>\r\n </div>\r\n\r\n <div className=\"col-sm-12 col-md-12 col-lg-3\">\r\n <Portlet className=\"kt-portlet--border-bottom-brand\" selectedColor={'gray'}>\r\n <PortletBody fluid={true} >\r\n <QuickStat\r\n value={providerStatistics && providerStatistics.averageNumberRHCSessionsPerClient ? providerStatistics.averageNumberRHCSessionsPerClient : 'N/A'}\r\n desc=\"RHC Average Sessions Per Client\"\r\n />\r\n </PortletBody>\r\n </Portlet>\r\n </div>\r\n\r\n <div className=\"col-sm-12 col-md-12 col-lg-3\">\r\n <Portlet className=\"kt-portlet--border-bottom-brand\" selectedColor={'purple'}>\r\n <PortletBody fluid={true} >\r\n <QuickStat\r\n value={providerStatistics && providerStatistics.totalSessionsDeliveredViaRHC ? providerStatistics.totalSessionsDeliveredViaRHC : 'N/A'}\r\n desc=\"Sessions Delivered\"\r\n />\r\n </PortletBody>\r\n </Portlet>\r\n </div>\r\n\r\n <div className=\"col-sm-12 col-md-12 col-lg-3\">\r\n <Portlet className=\"kt-portlet--border-bottom-brand\" selectedColor={'blue'}>\r\n <PortletBody fluid={true} >\r\n <QuickStat\r\n value={providerStatistics && providerStatistics.totalBulkBilledSessions ? providerStatistics.totalBulkBilledSessions : 'N/A'}\r\n desc=\"Bulk Billed Sessions\"\r\n />\r\n </PortletBody>\r\n </Portlet>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </Grid>\r\n <Grid container spacing={4} >\r\n <Grid item md={6} >\r\n <Grid container spacing={2} style={{ backgroundColor: '#F2F2F2', marginTop: 20, paddingBottom: 10, paddingTop: 10}} >\r\n <Grid item md={12} >\r\n <Carousel variant='dark'\r\n style={{\r\n maxHeight: 387,\r\n minHeight: 387,\r\n position: \"relative\"\r\n }} >\r\n {news && isArray(news) && news.map( (itm,idx) => {\r\n return (\r\n <Carousel.Item key={idx}>\r\n <div key={idx} className={`grit`}>\r\n <div className='grit-content' style={{ height: 300 }}>\r\n <h2 className='h2'>{itm.title}</h2>\r\n {/* <h3 className='h3'>{itm.subheading}</h3> */}\r\n <p style={{paddingTop: 5}}>{itm.copy}</p>\r\n </div>\t\t\t\t\t\r\n {/* {itm.download} */}\r\n </div>\r\n </Carousel.Item>\r\n )\r\n })}\r\n </Carousel>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item md={6} >\r\n <Grid container spacing={2} style={{ backgroundColor: '#F2F2F2', marginTop: 20, paddingBottom: 10, paddingTop: 5}}>\r\n <Grid item md={6} >\r\n <h2 className='h2' style={{ textTransform: 'uppercase', fontSize: 15, marginBottom: 4, marginLeft: 5,fontWeight: 500}}>Available Opportunities</h2>\r\n </Grid>\r\n <Grid item md={12} >\r\n <PerfectScrollbar\r\n options={perfectScrollbarOptions}\r\n style={{\r\n maxHeight: 410,\r\n minHeight: 410,\r\n position: \"relative\"\r\n }} >\r\n <div className=\"kt-notification\">\r\n {opportunityFeed && opportunityFeed.map((item) => \r\n <div className=\"kt-notification__item\" key={item.id} style={{ paddingLeft: 2, paddingRight: 1, paddingTop: 10, paddingBottom: 10 }}>\r\n <div className=\"kt-notification__item-details\">\r\n <div className=\"kt-notification__item-title\" style={{ color:item.colour}}>\r\n {item.description}\r\n </div>\r\n <div className=\"kt-notification__item-time\">\r\n Listed {item.created}\r\n {item.interestcreatedon ? \r\n <Button variant=\"success\" size=\"sm\" onClick={() => withdrawInterest(item.id,'Withdraw')} style={{ float: 'right', backgroundColor : item.colour }} >\r\n Withdraw Interest\r\n </Button> \r\n :\r\n <Button size=\"sm\" onClick={() => expressInterestModal(item.id,'Express',item.description)} style={{ float: 'right', backgroundColor : item.colour }}>\r\n Express Interest\r\n </Button> \r\n }\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n )}\r\n </div>\r\n </PerfectScrollbar>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n\r\n <Modal show={showNotes} onHide={()=>setShowNotes(false)} dialogClassName=\"notes-modal-dialog\">\r\n <Modal.Header closeButton className=\"notes-modal\">\r\n <Modal.Title>Notes - {currentClient && `${currentFirstName} ${currentSurname}`}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"notes-modal\">\r\n <div className=\"row\"> \r\n <div className=\"col-xl-12\">\r\n <Form.Group style={{ marginBottom: 5 }}>\r\n <Form.Label>Client</Form.Label>\r\n <Autocomplete\r\n id=\"searchClient\"\r\n variant=\"outlined\"\r\n options={clients}\r\n getOptionLabel={(option) => option.fullname}\r\n value={currentClient ? currentClient : null}\r\n onChange={(event, newValue) => handleClientAutocompleteChange('profileTimeZone', event, newValue)}\r\n style={{ minWidth: 300, fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"ClientSelector\"\r\n style={{ backgroundColor: \"white\", margin: 0, padding: 0, maxWidth: 300 }}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </div>\r\n </div>\r\n {registered && currentClient ? \r\n <Notes type=\"Client\" noteAction={noteAction} pkid={currentClientID} medicalPractice={initMedicalPractice()} waitingRoomURL={registered && (registered.teleHealthProvider === 'COVIU' ? registered.coviuRoomURL : registered.waitingRoomURL)} nextBookingDate={nextBookingDate} psychologistFullName={registered.firstname + ' ' + registered.surname} firstName={currentFirstName} faxGP={client && client.referralGPPracticeFax} />\r\n : \r\n null\r\n } \r\n </Modal.Body>\r\n <Modal.Footer className=\"notes-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowNotes(false)}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showLetter} onHide={()=>setShowLetter(false)} dialogClassName=\"notes-modal-dialog\">\r\n <Modal.Header closeButton className=\"notes-modal\">\r\n <Modal.Title>Send Letter - {currentClient && `${currentFirstName} ${currentSurname}`}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"notes-modal\">\r\n <div className=\"row\"> \r\n <div className=\"col-xl-12\">\r\n <Form.Group style={{ marginBottom: 5 }}>\r\n <Form.Label>Client</Form.Label>\r\n <Autocomplete\r\n id=\"searchClient\"\r\n variant=\"outlined\"\r\n options={clients}\r\n getOptionLabel={(option) => option.fullname}\r\n value={currentClient ? currentClient : null}\r\n onChange={(event, newValue) => handleClientAutocompleteChange('profileTimeZone', event, newValue)}\r\n style={{ minWidth: 300, fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"ClientSelector\"\r\n style={{ backgroundColor: \"white\", margin: 0, padding: 0, maxWidth: 300 }}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </div>\r\n </div>\r\n {registered && currentClient ? \r\n <SendLetter type=\"Client\" pkid={currentClientID} psychologistFullName={registered.firstname + ' ' + registered.surname} dob={currentDOB} firstName={currentPreferredName && currentPreferredName.length > 2 ? currentPreferredName : currentFirstName} surname={currentSurname} faxGP={client && client.referralGPPracticeFax} />\r\n : null} \r\n </Modal.Body>\r\n <Modal.Footer className=\"notes-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowLetter(false)}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showOpportunityRelevantInfo} onHide={()=>setShowOpportunityRelevantInfo(false)} dialogClassName=\"todos-modal-dialog\">\r\n <Modal.Header closeButton className=\"todos-modal\">\r\n <Modal.Title>Please enter any relevant information to your expression of interest</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"todos-modal\">\r\n <Grid item md={12}> \r\n <Row>\r\n <Col md=\"12\"> \r\n <Form.Group >\r\n <Form.Label>Opportunity</Form.Label>\r\n <p style={{ fontStyle:'italic' }}>{clientOpportunityInterest}</p>\r\n <Form.Label>Relevant Info (maximum 500 characters)</Form.Label>\r\n <Form.Control as=\"textarea\" rows={3} type=\"text\" name=\"relevantInfo\" defaultValue={clientOpportunityRelevantInfo} onBlur={(event) => setClientOpportunityRelevantInfo(event.target.value)} autoComplete='new-password' style={{ borderColor: '#D1D1D1'}} />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container spacing={0} padding={6} justifyContent=\"space-between\">\r\n <Button variant=\"light\" onClick={()=>setShowOpportunityRelevantInfo(false)}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"success\" size=\"sm\" onClick={() => expressInterest()}>\r\n Express Interest\r\n </Button>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n </Grid>\r\n </Modal.Body>\r\n </Modal>\r\n\r\n\r\n </>\r\n\t)\r\n}","import React, { useState, useEffect } from \"react\"; \r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport ToggleButton from './ToggleButton';\r\nimport { makeStyles, Button as MUIButton } from '@material-ui/core'\r\nimport { Button, Modal, Form } from \"react-bootstrap\";\r\nimport * as Reference from \"../../store/ducks/reference.duck\";\r\nimport * as Admin from \"../../store/ducks/admin.duck\";\r\nimport './InterestsPanels.scss'\r\nimport '../../../_metronic/_assets/css/app2.css';\r\n// import { Form } from \"react-bootstrap/lib/navbar\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n\tbtnAOI: {\r\n\t\tcolor: '#fff',\r\n\t\tpadding: '0.7em 0.8em',\r\n\t\tfontSize: '1.1em',\r\n\t\ttextTransform: \"capitalize\",\r\n\t\tfontWeight: '100',\r\n marginTop: 10,\r\n\t},\r\n\tbtnTT: {\r\n\t\tcolor: '#fff',\r\n\t\tpadding: '0.7em 0.8em',\r\n\t\tfontSize: '1.1em',\r\n\t\ttextTransform: \"capitalize\",\r\n\t\tfontWeight: '100',\r\n marginTop: 10,\r\n\t},\r\n\tbtnAdditionalDarker: {\tbackgroundColor: '#007cbe',\t'&:hover': {\tbackgroundColor: '#005481',\t}\t},\r\n btnHeroDarker: {\t\tbackgroundColor: '#93A33A',\t'&:hover': {\tbackgroundColor: '#7c9300',\t}\t},\r\n}));\r\n\r\nexport default function InterestsPanels() {\r\n\r\n const dispatch = useDispatch()\r\n\tconst registered = useSelector(state => state.admin.RegisteredPsychologists[0]);\r\n\tconst areasOfInterestRAW = useSelector(state => state.reference.AreasOfInterest)\r\n const areasOfProviderInterest = areasOfInterestRAW.filter(aoi => aoi.providertype === 'ProviderInterest')\r\n const areasOfTherapyTypes = areasOfInterestRAW.filter(aoi => aoi.providertype === 'TherapyType')\r\n\tconst areasOfInterest = areasOfInterestRAW.filter(aoi => (aoi.providertype !== 'ProviderInterest' && aoi.providertype !== 'TherapyType'))\r\n\tconst aoi_focus = areasOfInterest.filter(aoi => aoi.focusAreaIndex !== null && aoi.providertype === 'Psychologist')\r\n\tconst aoi_other = areasOfInterest.filter(aoi => aoi.focusAreaIndex === null && aoi.providertype === 'Psychologist')\r\n const [activeInterestAreas, setActiveInterestAreas] = useState([]);\t\r\n const [showAOI, setShowAOI] = useState(false)\r\n const [showTT, setShowTT] = useState(false)\r\n\tuseEffect( () => { dispatch(Reference.actions.fetchAreasOfInterest('ALL')) }, [dispatch] )\r\n\r\n useEffect( () => {\r\n // Populate AOI Key Areas from Registered \r\n if (registered && registered.areasOfInterest.length > 0)\r\n {\r\n setActiveInterestAreas(registered.areasOfInterest)\r\n }\r\n },[registered])\r\n\r\n const handleAOIKeyAreasChange = (e = undefined, id) => {\r\n if(registered)\r\n {\r\n // Set temporary variable\r\n let providerAOI = [...activeInterestAreas]\r\n // Check if we are removing or adding this AOI\r\n if (activeInterestAreas.includes(id))\r\n {\r\n // Ok it exists so we must be removing it \r\n let issueIndex = providerAOI.indexOf(id)\r\n if (issueIndex !== -1)\r\n {\r\n providerAOI.splice(issueIndex,1)\r\n }\r\n // Removed from database\r\n dispatch(Admin.actions.chgProviderAOI( { id: registered.id, aoi : id, action : 'DEL' } )) \r\n }\r\n else\r\n {\r\n // Ok it doesn't exist so we must be adding it\r\n providerAOI = [...providerAOI, id]\r\n // Add to database\r\n dispatch(Admin.actions.chgProviderAOI( { id: registered.id, aoi : id, action : 'ADD' } )) \r\n }\r\n // Set State\r\n setActiveInterestAreas(providerAOI)\r\n }\r\n }\r\n\r\n function handleAOIClose() {\r\n setShowAOI(false);\r\n } \r\n\r\n function handleTTClose() {\r\n setShowTT(false);\r\n } \r\n\r\n\tconst classes = useStyles();\t\r\n\r\n\treturn (\r\n <>\r\n <div className=\"row interests-panels\">\r\n <div className={`provider_help`}> \r\n Please review and update your Profile Information\r\n </div>\r\n <div className=\"grid-box col-xl-12\">\r\n {registered && (registered.providertype === 'Psychologist' || registered.providertype === 'Clinical' || registered.providertype === 'Occupational') ?\r\n <div className='grit interest-areas-panel'>\r\n \r\n <div className='grit-content'>\r\n <div className='panel-info interest-areas-info'>\r\n <h2 className='h2'>Support for Key Areas of Need</h2>\r\n <p>I can work with RHC on projects targeting the following key areas of need and will bulk bill when possible:</p>\r\n </div>\r\n <div className='panel-actions interest-areas-actions'>\r\n {aoi_other && aoi_other.map( (itm, idx) => {\r\n const isActive = activeInterestAreas.includes(itm.issue)\r\n return (\t\t\t\t\t\t\t\t\t\r\n <ToggleButton\r\n key={idx}\r\n id={itm.issue}\t\t\t\t\t\t\t\t\t// change for actual ID\r\n isActive={isActive}\r\n handleToggle={handleAOIKeyAreasChange}\r\n label={itm.issue}\r\n size=\"small\"\r\n tooltip={itm.tip}\r\n />\r\n )\r\n })}\r\n </div>\r\n <div>\r\n <hr></hr>\r\n <MUIButton\r\n variant=\"contained\"\r\n className={[classes.btnAdditionalDarker, classes.btnAOI].join(' ')}\r\n disableElevation\r\n size=\"small\" \r\n onClick={() => setShowAOI(true)}\r\n >\r\n My Areas of Interest \r\n </MUIButton>\r\n <MUIButton\r\n style={{ marginLeft: 20, marginRight: 10 }}\r\n variant=\"contained\"\r\n className={[classes.btnHeroDarker, classes.btnAOI].join(' ')}\r\n disableElevation\r\n size=\"small\" \r\n onClick={() => setShowTT(true)}\r\n >\r\n My Therapy Types \r\n </MUIButton>\r\n </div>\r\n </div>\r\n </div>\r\n :\r\n null\r\n }\r\n <div className='grit work-options-panel'>\r\n <div className='grit-content'>\r\n <div className='panel-info work-options-info'>\r\n <h2 className='h2'>Other Options</h2>\r\n <p>We ask that if you click these options, you also aim to take on some bulk billed clients, to help meet the significant need. Thank you.</p>\r\n </div>\r\n <div className='panel-actions work-options-actions'>\r\n {areasOfProviderInterest && areasOfProviderInterest.map( (itm, idx) => {\r\n const isActive = activeInterestAreas.includes(itm.issue)\r\n return (\r\n <ToggleButton\r\n key={idx}\r\n id={itm.issue}\t\t\t\t\t\t\t\t\t// change for actual ID\r\n isActive={isActive}\r\n handleToggle={handleAOIKeyAreasChange}\r\n label={itm.issue}\r\n size=\"small\"\r\n tooltip={itm.tip}\r\n />\r\n )\r\n })}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <Modal show={showAOI} onHide={handleAOIClose} >\r\n <Modal.Header closeButton >\r\n <Modal.Title>Areas of Interest Update</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body>\r\n <div className=\"row custom-rhc\" style={{ padding: 10 }}>\r\n <div className=\"interests-panels\">\r\n {/* <div className=\"grid-box col-xl-12\"> */}\r\n <div className='grit work-options-panel'>\r\n <div className='grit-content'>\r\n <Form.Label>\r\n Please select the areas you specialise in:\r\n </Form.Label>\r\n <div className='panel-actions work-options-actions'>\r\n {aoi_focus && aoi_focus.map( (itm, idx) => {\r\n const isActive = activeInterestAreas.includes(itm.issue)\r\n return (\t\t\t\t\t\t\t\t\t\r\n <ToggleButton\r\n key={idx}\r\n id={itm.issue}\t\t\t\t\t\t\t\t\t// change for actual ID\r\n isActive={isActive}\r\n handleToggle={handleAOIKeyAreasChange}\r\n label={itm.issue}\r\n size=\"small\"\r\n tooltip={itm.tip}\r\n />\r\n )\r\n })}\r\n </div>\r\n </div>\r\n </div>\r\n {/* </div> */}\r\n </div>\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"secondary\" onClick={handleAOIClose}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showTT} onHide={handleTTClose} >\r\n <Modal.Header closeButton >\r\n <Modal.Title>Therapy Types Update</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body>\r\n <div className=\"row custom-rhc\" style={{ padding: 10 }}>\r\n <div className=\"interests-panels\">\r\n {/* <div className=\"grid-box col-xl-12\"> */}\r\n <div className='grit work-options-panel'>\r\n <div className='grit-content'>\r\n <Form.Label>\r\n Please select the therapy types you specialise in:\r\n </Form.Label>\r\n <div className='panel-actions work-options-actions'>\r\n {areasOfTherapyTypes && areasOfTherapyTypes.map( (itm, idx) => {\r\n const isActive = activeInterestAreas.includes(itm.issue)\r\n return (\t\t\t\t\t\t\t\t\t\r\n <ToggleButton\r\n key={idx}\r\n id={itm.issue}\t\t\t\t\t\t\t\t\t// change for actual ID\r\n isActive={isActive}\r\n handleToggle={handleAOIKeyAreasChange}\r\n label={itm.issue}\r\n size=\"small\"\r\n tooltip={itm.tip}\r\n />\r\n )\r\n })}\r\n </div>\r\n </div>\r\n </div>\r\n {/* </div> */}\r\n </div>\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <Button variant=\"secondary\" onClick={handleTTClose}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n </>\r\n\t)\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { DataGrid } from '@material-ui/data-grid'\r\nimport { Button, Modal, Form, InputGroup, Row, Col } from \"react-bootstrap\";\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport { Paper, Grid, FormControl, Select, InputLabel, MenuItem, makeStyles, Typography } from '@material-ui/core';\r\nimport * as Admin from \"../store/ducks/admin.duck\"\r\nimport { Formik } from 'formik'\r\nimport * as Yup from \"yup\"\r\nimport RenderExpandableCell from \"./RenderExpandableCell\"\r\nimport Tooltip from '@material-ui/core/Tooltip'\r\nimport { ToastContainer, Flip } from \"react-toastify\"\r\nimport CopyIcon from '@material-ui/icons/FileCopyOutlined';\r\nimport Alert from '@material-ui/lab/Alert';\r\n// import { saveAs } from 'file-saver';\r\nimport \"react-toastify/dist/ReactToastify.css\"\r\nimport '../../_metronic/_assets/css/app2.css';\r\n\r\n\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n noBorder: {\r\n border: \"none\",\r\n },\r\n\tformControl: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: 120,\r\n\t},\r\n\tformControlWide: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: '100%',\r\n\t},\r\n\tselectEmpty: {\r\n\t marginTop: theme.spacing(2),\r\n\t},\r\n\tlabel: {\r\n\t backgroundColor: '#fff',\r\n\t paddingLeft: 3,\r\n\t paddingRight: 3,\r\n\t}\r\n }));\r\n\r\nexport default function BookingApproval() \r\n{\r\n const dispatch = useDispatch()\r\n const classes = useStyles();\r\n \r\n const providerBookingApproval = useSelector(state => state.admin.ProviderBookingApproval)\r\n const filters = useSelector(state => state.admin.Filters)\r\n const [searchTerm, setSearchTerm] = useState('')\r\n const [showBooking, setShowBooking] = useState(false)\r\n const [booking, setBooking] = useState()\r\n const [clientName,setClientName] = useState()\r\n const [viewOnlyMode,setViewOnlyMode] = useState(false)\r\n\r\n useEffect( () => {\r\n dispatch(Admin.actions.fetchProviderBookingApproval()) }, \r\n [dispatch] \r\n )\r\n\r\n const searchProviderBookingApproval = (billableIntent) => {\r\n if ( true\r\n && (billableIntent => billableIntent.clientName.toLowerCase().search(searchTerm.toLowerCase()) > -1 || searchTerm.length === 0)\r\n && (!filters.providerApprovalStatus || filters.providerApprovalStatus === 'All' || (billableIntent.approvedstatus === filters.providerApprovalStatus))\r\n )\r\n {\r\n return billableIntent\r\n } \r\n }\r\n \r\n const filteredProviderBookingApproval = providerBookingApproval.filter(billableIntent => searchProviderBookingApproval(billableIntent))\r\n\r\n const updateBooking = (thisBooking) => {\r\n setViewOnlyMode(false)\r\n setBooking(thisBooking)\r\n setClientName(thisBooking.clientName)\r\n setShowBooking(true)\r\n }\r\n\r\n const viewNote = (thisBooking) => {\r\n setViewOnlyMode(true)\r\n setBooking(thisBooking)\r\n setClientName(thisBooking.clientName)\r\n setShowBooking(true)\r\n }\r\n\r\n const approveBooking = (thisBooking) => {\r\n //\r\n setViewOnlyMode(false)\r\n dispatch(Admin.actions.putApproveBooking({ id: thisBooking.id, atype: 'A'}))\r\n }\r\n\r\n const noShowBooking = (thisBooking) => {\r\n //\r\n setViewOnlyMode(false)\r\n dispatch(Admin.actions.putApproveBooking({ id: thisBooking.id, atype: 'N'}))\r\n }\r\n\r\n const unapproveBooking = (thisBooking) => {\r\n //\r\n setViewOnlyMode(false)\r\n dispatch(Admin.actions.putApproveBooking({ id: thisBooking.id, atype: 'U'}))\r\n }\r\n\r\n const rhcInvoicedBooking = (thisBooking) => {\r\n //\r\n dispatch(Admin.actions.putRHCInvoicedBooking({ id: thisBooking.id}))\r\n }\r\n\r\n const validationSchema = Yup.object().shape({\r\n note: Yup.string().min(2, 'Too Short').max(3800, 'Too Long')\r\n })\r\n\r\n function submitForm(data){\r\n // Save data \r\n dispatch(Admin.actions.putBookingNote({id : data.id, note : data.note}))\r\n setShowBooking(false)\r\n }\r\n\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'Booking ID', width: 150, \r\n renderCell: (params) => (\r\n <div>\r\n <Typography><CopyIcon onClick={() => navigator.clipboard.writeText(params.row.id)} style={{marginRight : 10}}/> {params.row.id} </Typography>\r\n </div>\r\n ) \r\n },\r\n { field: 'charged', headerName: 'RHC', width: 50, hide: true},\r\n { field: 'clientName', headerName: 'Name', width: 150, \r\n renderCell: (params) => (\r\n <strong>\r\n <div onClick={() => updateBooking(providerBookingApproval.find(intent => intent.id === params.row.id))} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n ), \r\n },\r\n { field: 'status', headerName: 'Status', width: 120 }, \r\n { field: 'bookingDate', headerName: 'Date', width: 150 },\r\n { field: 'service', headerName: 'Type', width: 100},\r\n { field: 'approvedstatus', headerName: 'Status', width: 110 }, \r\n // { field: 'providerfee', headerName: 'Fee', width: 100 }, \r\n { field: 'rhcinvoiced', headerName: 'Invoiced', width: 120 },\r\n { field: 'note', headerName: 'Note (Hover to View)', width: 190, renderCell: (params) => (\r\n <RenderExpandableCell {...params} />)}, \r\n { field: 'none', headerName: 'Actions (DNA - Did Not Attend)', width: 430,\r\n renderCell: (params) => (\r\n <>\r\n {params.row.charged !== 'Y' ?\r\n <>\r\n {params.row.approvedstatus === 'Incomplete' ?\r\n <>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={()=>approveBooking(providerBookingApproval.find(intent => intent.id === params.row.id))} style={{ color: \"green\", fontWeight: 500, border: 0, background: \"#eee\", marginRight: 14 }} >\r\n Completed\r\n </Button>\r\n <Tooltip title='Note required to Set as No Show' >\r\n <Button variant=\"secondary\" size=\"sm\" disabled = {params.row.note.length < 10} onClick={()=>noShowBooking(providerBookingApproval.find(intent => intent.id === params.row.id))} style={{ color: \"red\", fontWeight: 500, border: 0, background: \"#eee\", marginRight: 14 }} >\r\n DNA \r\n </Button>\r\n </Tooltip>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={()=>updateBooking(providerBookingApproval.find(intent => intent.id === params.row.id))} style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#eee\", marginRight: 14 }} >\r\n Update Note\r\n </Button>\r\n </>\r\n :\r\n <>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={()=>unapproveBooking(providerBookingApproval.find(intent => intent.id === params.row.id))} style={{ color: \"green\", fontWeight: 500, border: 0, background: \"#eee\", marginRight: 14 }} >\r\n Uncomplete\r\n </Button>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={()=>viewNote(providerBookingApproval.find(intent => intent.id === params.row.id))} style={{ color: \"green\", fontWeight: 500, border: 0, background: \"#eee\", marginRight: 14 }} >\r\n View Note\r\n </Button>\r\n </>\r\n }\r\n </>\r\n :\r\n <Button variant=\"secondary\" size=\"sm\" onClick={()=>viewNote(providerBookingApproval.find(intent => intent.id === params.row.id))} style={{ color: \"green\", fontWeight: 500, border: 0, background: \"#eee\", marginRight: 14 }} >\r\n View Note\r\n </Button>\r\n }\r\n {params.row.rhcinvoiced === 'No' ?\r\n <Button variant=\"secondary\" size=\"sm\" onClick={()=>rhcInvoicedBooking(providerBookingApproval.find(intent => intent.id === params.row.id))} style={{ color: \"blue\", fontWeight: 500, border: 0, background: \"#eee\", marginRight: 14 }} >\r\n Mark Invoiced\r\n </Button>\r\n : \r\n null\r\n }\r\n\r\n </>\r\n ) \r\n }\r\n\r\n\r\n ];\r\n\r\n function handleBookingClose() {\r\n setShowBooking(false);\r\n } \r\n\r\n const handleSearch = (event) => {\r\n const searchTerm = event.target.value \r\n setSearchTerm(searchTerm)\r\n }\r\n\r\n\r\n return (\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h4 style={{ marginBottom: 12 }}>Review NDIS, Contract and EAP Bookings</h4></Grid>\r\n </Grid>\r\n <Alert severity=\"info\" style={{fontSize: 14, width: '100%' }}>\r\n <ul>\r\n <li>\r\n <p>For NDIS Clients - please send your own invoice.</p> \r\n </li>\r\n <li>\r\n <p>For EAP and Cocos/Christmas Islands Clients - RHC will pay you. No invoice needed.</p>\r\n </li>\r\n <li>\r\n <p>For Nth Qld PHN Clients - Please include the Booking ID reference on all invoicing. Send to <i>invoices@ruralhealthconnect.com.au</i></p>\r\n </li>\r\n </ul>\r\n </Alert>\r\n\r\n <Paper> \r\n <Grid container style={{ padding: 10 }}>\r\n <Grid item style={{ paddingLeft: 2, paddingRight: 10 }}>\r\n {/* <Grid item style={{ marginTop: 2, marginLeft: 10 }}> */}\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(event) => handleSearch(event)}\r\n autoComplete='OFF'\r\n style={{ height: 33 }}\r\n />\r\n </InputGroup>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl} size=\"small\">\r\n <InputLabel id=\"providerApprovalStatus-label\" className={classes.label}> Approval Status</InputLabel>\r\n <Select\r\n labelId=\"providerApprovalStatus-label\"\r\n id=\"providerApprovalStatus\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\", height: 33 }}\r\n value={filters.providerApprovalStatus}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'providerApprovalStatus', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n <MenuItem value='Completed'>Completed</MenuItem>\r\n <MenuItem value='Incomplete'>Incomplete</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n\r\n\r\n { providerBookingApproval ? \r\n <Paper style={{ minHeight: 200, height: 300 }}>\r\n <DataGrid rows={filteredProviderBookingApproval} getRowHeight={() => 'auto'} columns={columns} rowsPerPageOptions={[20]} pagination checkboxSelection={false} rowHeight={40} sortModel={[{ field: 'bookingDate', sort: 'desc' }]} />\r\n </Paper>\r\n : ('None')\r\n }\r\n\r\n <Modal show={showBooking} onHide={handleBookingClose} dialogClassName=\"edit-tags-modal\">\r\n <Modal.Header closeButton className=\"edit-tags-modal\">\r\n <Modal.Title>Update Booking - {clientName} </Modal.Title>\r\n </Modal.Header> \r\n <Formik\r\n enableReinitialize={true}\r\n initialValues={booking}\r\n validationSchema = {validationSchema}\r\n onSubmit={(values, actions) => {\r\n submitForm(values);\r\n }}\r\n >\r\n {props => {\r\n const { values, errors, handleChange, handleSubmit } = props; \r\n const change = (name,e) => { e.persist(); handleChange(e); };\r\n return (\r\n <form noValidate={true} autoComplete=\"off\" onSubmit={handleSubmit} > \r\n <Modal.Body className=\"edit-tags-modal\"> \r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Update Booking Note for Invoicing Purposes </Form.Label>\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" name=\"note\" value={values.note} onChange={change.bind(null, \"note\")} autoComplete='new-password' style={{ borderColor: '#D1D1D1'}} />\r\n {errors ? (<p className='error-help'>{errors.note}</p>) : ''}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </Modal.Body>\r\n <Modal.Footer className=\"edit-tags-modal\">\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>\r\n </Grid>\r\n <Grid item>\r\n <Button variant=\"secondary\" onClick={handleBookingClose}>\r\n Cancel\r\n </Button>\r\n {!viewOnlyMode ?\r\n <Button variant=\"primary\" type=\"submit\" style={{ marginLeft: 8 }}>\r\n Save\r\n </Button>\r\n :\r\n null\r\n }\r\n </Grid>\r\n </Grid>\r\n </Modal.Footer>\r\n </form>)\r\n }}\r\n </Formik>\r\n </Modal>\r\n\r\n\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n","import React, { useEffect, useState } from \"react\"; \r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport * as Reference from \"../../store/ducks/reference.duck\";\r\nimport * as Admin from \"../../store/ducks/admin.duck\";\r\nimport * as Auth from \"../../store/ducks/auth.duck\";\r\nimport * as Forms from \"../../store/ducks/forms.duck\";\r\nimport { Scheduler, WeekView, MonthView, SchedulerItem, SchedulerItemContent } from \"@progress/kendo-react-scheduler\";\r\nimport { Modal } from \"react-bootstrap\";\r\nimport { FormWithCustomEditor } from \"../../components/scheduler/custom-form\";\r\nimport { IntlProvider, load } from \"@progress/kendo-react-intl\";\r\nimport { guid } from \"@progress/kendo-react-common\";\r\nimport likelySubtags from \"cldr-core/supplemental/likelySubtags.json\";\r\nimport currencyData from \"cldr-core/supplemental/currencyData.json\";\r\nimport weekData from \"cldr-core/supplemental/weekData.json\";\r\nimport numbers from \"cldr-numbers-full/main/en-AU/numbers.json\";\r\nimport currencies from \"cldr-numbers-full/main/en-AU/currencies.json\";\r\nimport caGregorian from \"cldr-dates-full/main/en-AU/ca-gregorian.json\";\r\nimport dateFields from \"cldr-dates-full/main/en-AU/dateFields.json\";\r\nimport { Day } from \"@progress/kendo-date-math\";\r\nimport { parseISO, differenceInMinutes } from \"date-fns\";\r\nimport PhoneIcon from '@material-ui/icons/Phone';\r\nimport EmailIcon from '@material-ui/icons/Email';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport ToDos from '../../components/ToDos';\r\nimport UpdatePassword from '../../components/UpdatePassword'\r\n\r\nimport TileGrid from '../../components/DashStyle/TileGrid';\t\t\t\t\t\t// RHC-DASH-STYLE\r\nimport InterestsPanels from '../../components/DashStyle/InterestsPanels';\t\t// RHC-DASH-STYLE\r\nimport BookingApproval from '../../components/BookingApproval'\r\n\r\nimport '../../../_metronic/_assets/css/app2.css';\r\n\r\nload( likelySubtags, currencyData, weekData, numbers, currencies, caGregorian, dateFields);\r\n\r\nconst displayDate = new Date();\r\n\r\nexport default function DashboardPsychologist(props) {\r\n \r\n const dispatch = useDispatch()\r\n \r\n const registered = useSelector(state => state.admin.RegisteredPsychologists[0]);\r\n const bookings = useSelector(state => state.admin.Bookings)\r\n const availability = useSelector(state => state.admin.Availability)\r\n const clients = useSelector(state => state.admin.Clients)\r\n const userTZ = useSelector(state => state.auth.userTZ)\r\n const isRecovery = useSelector(state => state.auth.recoveryStatus)\r\n const providerBookingApproval = useSelector(state => state.admin.ProviderBookingApproval)\r\n const [showToDo, setShowToDo] = useState(false)\r\n const [toDoClientID, setToDoClientID] = useState()\r\n const [toDoTitle, setToDoTitle] = useState('')\r\n const [showUpdatePassword,setShowUpdatePassword] = useState(false)\r\n \r\n useEffect( () => { dispatch(Admin.actions.fetchRegistered()) }, [dispatch] )\r\n // May need to consider this - do providers need to see inactive clients? \r\n useEffect( () => { dispatch(Admin.actions.fetchClients({status : 'Active'})) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchMedicalPractitioners()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchMedicalPractices({ type: 'GeneralPractitioner' })) }, [dispatch] )\r\n useEffect( () => { dispatch(Forms.actions.fetchForms()) }, [dispatch] )\r\n \r\n useEffect( () => { dispatch(Reference.actions.fetchTimeZone()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchConstants()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchFundingTypes()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchHelpItems()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchResourceItems()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchBookingTypeStatistics()) }, [dispatch] )\r\n useEffect( () => {dispatch(Admin.actions.fetchProviderBookingApproval())}, [dispatch] )\r\n\r\n useEffect( () => { if(registered && userTZ)\r\n {\r\n dispatch(Admin.actions.fetchBookings({ key: 'psychologist', id: registered.id })) \r\n dispatch(Admin.actions.fetchAvailability({ psychologistid: registered.id, userTZ: userTZ }))\r\n // setBulkBillingAvailable(registered.bulkBillingAvailable)\r\n // console.log('setting')\r\n // console.log(registered && registered.bulkBillingAvailable)\r\n }\r\n }, [dispatch, registered, userTZ] )\r\n\r\n useEffect( () => {\r\n if (isRecovery === 'Recovery') {\r\n dispatch(Auth.actions.clearRecovery())\r\n setShowUpdatePassword(true)\r\n }\r\n }, [dispatch,isRecovery])\r\n\r\n const loadToDos = (clientID, fullName) => {\r\n // console.log(clientID)\r\n // console.log(fullName)\r\n setToDoClientID(clientID)\r\n setToDoTitle(fullName)\r\n setShowToDo(true)\r\n }\r\n\r\n function isTodayMonday() {\r\n //\r\n var response = false;\r\n var today = new Date();\r\n //\r\n var day = today.getDay() || 7; // Get current day number, converting Sun. to 7\r\n if (day === 1) \r\n {\r\n response = true;\r\n }\r\n // console.log(day)\r\n //\r\n return response;\r\n }\r\n\r\n\r\n // Assemble data from bookings and availability\r\n const newBookings = bookings.filter(r => r.status !== 'Cancelled').map(row => { \r\n\r\n return {\r\n id: row.id,\r\n clientID: row.clientID,\r\n eventType: 'booking',\r\n title: row.clientfullname,\r\n start: parseISO(row.startDate),\r\n end: parseISO(row.endDate),\r\n note: row.note,\r\n paymentType: row.paymentType,\r\n bookingType: row.bookingType,\r\n status: row.status,\r\n contactMobilePhone: row.contactMobilePhone,\r\n showTodoIcon: row.toDoCount !== 0 ? true : false,\r\n showRHCManagementLabel: row.rhcmanagement === 'Y' ? true : false,\r\n appointmenttype: row.appointmenttype\r\n } \r\n\r\n })\r\n const newAvailability = availability.map(row => { \r\n //\r\n // Handle change of availabilityType for Display (i.e. Any = All)\r\n let availabilityTypeDisplay = 'Available - New Client Bookings';\r\n if (row.availabilityType !== 'Any' \r\n && row.availabilityType !== 'New Client Bookings' \r\n && row.availabilityType !== 'Other' \r\n && row.availabilityType !== 'NDISContractEAP' \r\n && row.availabilityType !== 'NDISContractEAPNew' \r\n && row.availabilityType !== 'NDISContractEAPExisting' \r\n && row.availabilityType !== 'PerinatalGriefLoss'\r\n && row.availabilityType !== 'NthQLDPHNNew'\r\n && row.availabilityType !== 'NthQLDPHNExisting'\r\n && row.availabilityType !== 'NthQLDPHNFacetoFace'\r\n )\r\n {\r\n availabilityTypeDisplay = 'Available - Existing';\r\n }\r\n if (row.availabilityType === 'Other')\r\n {\r\n availabilityTypeDisplay = 'Other (Not Available)';\r\n }\r\n if (row.availabilityType === 'Supervision')\r\n {\r\n availabilityTypeDisplay = 'Available - Supervision';\r\n }\r\n if (row.availabilityType === 'NDISContractEAP')\r\n {\r\n availabilityTypeDisplay = 'Available - NDIS/Contract/EAP';\r\n }\r\n if (row.availabilityType === 'NDISContractEAPNew')\r\n {\r\n availabilityTypeDisplay = 'Available - New Client or NDIS/Contract/EAP';\r\n }\r\n if (row.availabilityType === 'NDISContractEAPExisting')\r\n {\r\n availabilityTypeDisplay = 'Available - Existing Client or NDIS/Contract/EAP'\r\n }\r\n if (row.availabilityType === 'PerinatalGriefLoss')\r\n {\r\n availabilityTypeDisplay = 'Available - Perinatal Grief & Loss'\r\n }\r\n if (row.availabilityType === 'NthQLDPHNNew')\r\n {\r\n availabilityTypeDisplay = 'Available - Nth QLD PHN New Clients'\r\n }\r\n if (row.availabilityType === 'NthQLDPHNExisting')\r\n {\r\n availabilityTypeDisplay = 'Available - Nth QLD PHN Existing Clients'\r\n }\r\n if (row.availabilityType === 'NthQLDPHNFacetoFace')\r\n {\r\n availabilityTypeDisplay = 'Available - Nth QLD PHN Face to Face Clients'\r\n }\r\n\r\n //\r\n return {\r\n id: row.id,\r\n availabiltyType: row.availabilityType,\r\n eventType: 'availability' + row.availabilityType,\r\n psychologistID: row.psychologistID,\r\n availabilityType: row.availabilityType,\r\n title: availabilityTypeDisplay,\r\n start: new Date(row.startDate),\r\n end: new Date(row.endDate),\r\n recurrenceRule: row.rRule && row.rRule.length > 0 ? row.rRule.replace(\"RRULE:\", \"\") : undefined,\r\n recurrenceExceptions: row.exDate.length > 0 ? row.exDate.split(',').map((item) => item.length === 16 ? parseISO(item) : new Date(item)) : []\r\n } \r\n })\r\n const items = [...newBookings, ...newAvailability]\r\n\r\n // create ref to vars we need to submit with actions, so we can fetch the vales after they have been set by useEffect\r\n const payloadParams = {\r\n psychologistID: registered && registered.id,\r\n userTZ: userTZ\r\n }\r\n const payloadRef = React.useRef(payloadParams);\r\n React.useEffect(() => {\r\n payloadRef.current = payloadParams;\r\n }, [payloadParams]);\r\n\r\n // Custom item to apply colour for bookings/paymentType vs. availability\r\n const CustomItem = (props) => {\r\n var backgroundStyles = { backgroundColor: 'blue' }\r\n switch (props.dataItem.eventType)\r\n {\r\n case 'availability':\r\n backgroundStyles = { backgroundColor: 'blue'}\r\n break\r\n case 'availabilityExisting':\r\n backgroundStyles = { background: 'repeating-linear-gradient(45deg, #575ec2, #575ec2 10px, blue 10px, blue 20px)' }\r\n break\r\n case 'availabilityAny' :\r\n backgroundStyles = { backgroundColor: 'blue'}\r\n break\r\n case 'availabilityOther' :\r\n backgroundStyles = { backgroundColor: 'purple'}\r\n break\r\n case 'availabilitySupervision' :\r\n backgroundStyles = { backgroundColor: 'gray'}\r\n break\r\n case 'availabilityNDISContractEAP' : \r\n backgroundStyles = { backgroundColor: '#21B6A8'}\r\n break\r\n case 'availabilityNDISContractEAPNew' : \r\n backgroundStyles = { backgroundColor: '#CDB199'}\r\n break;\r\n case 'availabilityNDISContractEAPExisting' : \r\n backgroundStyles = { backgroundColor: '#189AB4'}\r\n break;\r\n case 'availabilityPerinatalGriefLoss' : \r\n backgroundStyles = { backgroundColor: '#E1C340'}\r\n break;\r\n case 'availabilityNthQLDPHNNew' : \r\n backgroundStyles = { backgroundColor: '#D3B1C2'}\r\n break;\r\n case 'availabilityNthQLDPHNExisting' : \r\n backgroundStyles = { backgroundColor: '#C197D2'}\r\n break;\r\n case 'availabilityNthQLDPHNFacetoFace' : \r\n backgroundStyles = { backgroundColor: '#f6c324'}\r\n break;\r\n default:\r\n backgroundStyles = { backgroundColor: 'blue'}\r\n }\r\n switch (props.dataItem.paymentType) {\r\n case 'Provisional':\r\n backgroundStyles = { backgroundColor: 'pink'}\r\n break\r\n case 'Bulk Billed':\r\n backgroundStyles = { backgroundColor: 'green'}\r\n break\r\n case 'NDIS':\r\n backgroundStyles = { backgroundColor: 'rgb(103 39 113)'}\r\n break\r\n case 'Reduced Gap':\r\n backgroundStyles = { backgroundColor: '#6acccc'}\r\n break\r\n case 'Contract':\r\n backgroundStyles = { backgroundColor: '#256A87'}\r\n break\r\n case 'EAP':\r\n backgroundStyles = { backgroundColor: '#FFC5D0'}\r\n break\r\n case 'Full Fee':\r\n backgroundStyles = { backgroundColor: '#cfb94a'}\r\n break\r\n default:\r\n break\r\n }\r\n var customStyles = { ...backgroundStyles, fontSize: 12, }\r\n return (\r\n <SchedulerItem\r\n {...props}\r\n style={{ ...props.style, ...customStyles }}\r\n >\r\n {props.children}\r\n {props.dataItem.eventType === 'booking' && props.dataItem.appointmenttype === \"1\" ?\r\n <SchedulerItemContent>\r\n <PhoneIcon />\r\n </SchedulerItemContent>\r\n : null}\r\n {props.dataItem.eventType === 'booking' && props.dataItem.showTodoIcon ?\r\n <SchedulerItemContent>\r\n <EmailIcon onClick={()=>loadToDos(props.dataItem.clientID,props.dataItem.title)} />\r\n </SchedulerItemContent>\r\n : null }\r\n {props.dataItem.showRHCManagementLabel ?\r\n <SchedulerItemContent>\r\n (RHC Managed)\r\n </SchedulerItemContent>\r\n : null }\r\n </SchedulerItem>\r\n )};\r\n\r\n\r\n // We manage both local state and redux state, to make the UI more responsive and not wait for redux.\r\n // data = local state, updated directly by change events - the calendar displays from this array\r\n // items = redux state, updated via actions. We only update local from this once the items != prevItems (i.e. redux has changed)\r\n // So, the sequence is update => update data => send action => items get updated from redux => is now different to prevItems => update data (again) with fresh copy from items\r\n const [data, setData] = React.useState([]);\r\n const [prevItems, setPrevItems] = useState([]);\r\n\r\n useEffect( () => {\r\n if((JSON.stringify(items) !== JSON.stringify(prevItems)) && items.length > 0){\r\n setPrevItems(items)\r\n setData(items)\r\n }\r\n }, [prevItems, items])\r\n\r\n function isNumeric(n) {\r\n return !isNaN(parseFloat(n)) && isFinite(n);\r\n } \r\n\r\n const getUpdateTitle = (item) => {\r\n switch (item.eventType)\r\n {\r\n case 'availability':\r\n return 'Availability'\r\n case 'availabilityAny' :\r\n return 'Availability - New Client (Medicare) Bookings'\r\n case 'availabilityOther' :\r\n return 'Availability - Other (Not Available)'\r\n case 'availabilityExisting':\r\n return 'Availability - Existing (Medicare)'\r\n case 'availabilitySupervision':\r\n return 'Availability - Supervision'\r\n case 'availabilityNDISContractEAP' : \r\n return 'Availability - NDIS/Contract/EAP'\r\n case 'availabilityNDISContractEAPNew' : \r\n return 'Availability - New Client or NDIS/Contract/EAP'\r\n case 'availabilityNDISContractEAPExisting' : \r\n return 'Availability - Existing Client or NDIS/Contract/EAP'\r\n case 'availabilityPerinatalGriefLoss' : \r\n return 'Availability - Perinatal Grief & Loss'\r\n case 'availabilityNthQLDPHNNew' : \r\n return 'Availability - Nth QLD PHN New'\r\n case 'availabilityNthQLDPHNExisting' : \r\n return 'Availability - Nth QLD PHN Existing'\r\n case 'availabilityNthQLDPHNFacetoFace' : \r\n return 'Availability - Nth QLD PHN Face to Face Clients'\r\n default:\r\n return clients.find(row => row.id === parseInt(item.clientID)).fullname\r\n }\r\n }\r\n\r\n // { created, updated, deleted }\r\n const handleDataChange = (props) => {\r\n setData((old) =>\r\n old\r\n .filter(\r\n (item) => (props.deleted.find( (current) => current.id === item.id ) === undefined) && (props.updated.find( (current) => current.id === item.id && current.status === 'Cancelled' ) === undefined )\r\n )\r\n .map(\r\n (item) => props.updated.find((current) => current.id === item.id) || item\r\n )\r\n .concat(\r\n props.created.map((item) =>\r\n Object.assign({}, item, {\r\n id: guid(),\r\n title: getUpdateTitle(item), // get the proper title to display (e.g. client fullname for bookings)\r\n })\r\n )\r\n )\r\n );\r\n var payload = {};\r\n var duration = 0;\r\n // Updated\r\n if(props.updated.length > 0)\r\n {\r\n var changed = props.updated[0];\r\n // console.log(changed.eventType);\r\n if(changed.eventType === 'availability' \r\n || changed.eventType === 'availabilityAny' \r\n || changed.eventType === 'availabilityExisting' \r\n || changed.eventType === 'availabilityOther' \r\n || changed.eventType === 'availabilitySupervision' \r\n || changed.eventType === 'availabilityNDISContractEAP' \r\n || changed.eventType === 'availabilityNDISContractEAPNew' \r\n || changed.eventType === 'availabilityNDISContractEAPExisting'\r\n || changed.eventType === 'availabilityPerinatalGriefLoss'\r\n || changed.eventType === 'availabilityNthQLDPHNNew'\r\n || changed.eventType === 'availabilityNthQLDPHNExisting'\r\n || changed.eventType === 'availabilityNthQLDPHNFacetoFace'\r\n ) \r\n {\r\n payload = {\r\n slot: changed.id,\r\n id: changed.id,\r\n mainID: changed.psychologistID,\r\n startDate: changed.start,\r\n endDate: changed.end,\r\n title: changed.title,\r\n allDay: false,\r\n rRule: changed.recurrenceRule,\r\n availabilityType: changed.availabilityType,\r\n exDate: changed.recurrenceExceptions ? changed.recurrenceExceptions.join(\", \") : '',\r\n userTZ: payloadRef.current.userTZ\r\n }\r\n dispatch(Admin.actions.chgAvailability(payload))\r\n }\r\n else if(changed.eventType === 'booking')\r\n {\r\n // If the event being changed has recently been created and has not saved, it has a GUID for an ID and cannot be changed by the API - thus bounce it\r\n if (isNumeric(changed.id))\r\n {\r\n duration = differenceInMinutes(new Date(changed.end), new Date(changed.start));\r\n var status = changed.status === 'Active' ? 'Updated' : changed.status;\r\n payload = { \r\n id: changed.id, \r\n status: status,\r\n appointment: {\r\n id: changed.id, \r\n userTZ: 'UTC', //done\r\n startDate: changed.start, \r\n duration: duration,\r\n clientID: changed.clientID, // done\r\n psychologistID: payloadRef.current.psychologistID, // done\r\n note: changed.note,\r\n paymentType: changed.paymentType,\r\n bookingType: changed.bookingType,\r\n status: status\r\n },\r\n refreshPayload: { key: 'psychologist', id: payloadRef.current.psychologistID } \r\n }\r\n dispatch(Admin.actions.putAppointment(payload))\r\n }\r\n } \r\n }\r\n // Added\r\n if(props.created.length > 0)\r\n {\r\n var added = props.created[0];\r\n if(added.title === 'a' \r\n || (added.eventType === 'availability' \r\n || added.eventType === 'availabilityAny' \r\n || added.eventType === 'availabilityExisting' \r\n || added.eventType === 'availabilityOther' \r\n || added.eventType === 'availabilitySupervision' \r\n || added.eventType === 'availabilityNDISContractEAP' \r\n || added.eventType === 'availabilityNDISContractEAPNew' \r\n || added.eventType === 'availabilityNDISContractEAPExisting'\r\n || added.eventType === 'availabilityPerinatalGriefLoss'\r\n || added.eventType === 'availabilityNthQLDPHNNew'\r\n || added.eventType === 'availabilityNthQLDPHNExisting'\r\n || added.eventType === 'availabilityNthQLDPHNFacetoFace'\r\n ))\r\n {\r\n // Need to determine availabilityType\r\n let availabilityType;\r\n switch (added.eventType)\r\n {\r\n case 'availability':\r\n availabilityType = 'Any'\r\n break\r\n case 'availabilityExisting':\r\n availabilityType = 'Existing'\r\n break\r\n case 'availabilityOther':\r\n availabilityType = 'Other'\r\n break\r\n case 'availabilitySupervision':\r\n availabilityType = 'Supervision'\r\n break\r\n case 'availabilityNDISContractEAP':\r\n availabilityType = 'NDISContractEAP'\r\n break\r\n case 'availabilityNDISContractEAPNew' : \r\n availabilityType = 'NDISContractEAPNew'\r\n break;\r\n case 'availabilityNDISContractEAPExisting' : \r\n availabilityType = 'NDISContractEAPExisting'\r\n break;\r\n case 'availabilityPerinatalGriefLoss' :\r\n availabilityType = 'PerinatalGriefLoss'\r\n break \r\n case 'availabilityNthQLDPHNNew' :\r\n availabilityType = 'NthQLDPHNNew'\r\n break \r\n case 'availabilityNthQLDPHNExisting' :\r\n availabilityType = 'NthQLDPHNExisting'\r\n break \r\n case 'availabilityNthQLDPHNFacetoFace' :\r\n availabilityType = 'NthQLDPHNFacetoFace'\r\n break \r\n case 'availabilityAny' :\r\n availabilityType = 'Any';\r\n break;\r\n default:\r\n availabilityType = 'Any';\r\n }\r\n payload = {\r\n mainID: payloadRef.current.psychologistID,\r\n startDate: added.start,\r\n endDate: added.end,\r\n title: added.title,\r\n allDay: false,\r\n rRule: added.recurrenceRule,\r\n availabilityType: availabilityType,\r\n exDate: '',\r\n userTZ: payloadRef.current.userTZ\r\n }\r\n dispatch(Admin.actions.addAvailability(payload))\r\n }\r\n else if(added.eventType === 'booking')\r\n {\r\n duration = differenceInMinutes(new Date(added.end), new Date(added.start));\r\n payload = { \r\n timezone: 'UTC', //done\r\n newbookingdate: added.start, \r\n duration: duration,\r\n clientID: added.clientID, // done\r\n psychologistID: payloadRef.current.psychologistID, // done\r\n note: added.note,\r\n paymentType: added.paymentType,\r\n bookingType: added.bookingType,\r\n refreshPayload: { key: 'psychologist', id: payloadRef.current.psychologistID },\r\n source: 'ProviderPortal'\r\n }\r\n dispatch(Admin.actions.bookAppointment(payload))\r\n } \r\n }\r\n // Deleted\r\n if(props.deleted.length > 0)\r\n {\r\n var deleted = props.deleted[0];\r\n if(deleted.eventType === 'availability' \r\n || deleted.eventType === 'availabilityAny' \r\n || deleted.eventType === 'availabilityExisting' \r\n || deleted.eventType === 'availabilityOther' \r\n || deleted.eventType === 'availabilitySupervision' \r\n || deleted.eventType === 'availabilityNDISContractEAP' \r\n || deleted.eventType === 'availabilityNDISContractEAPNew' \r\n || deleted.eventType === 'availabilityNDISContractEAPExisting'\r\n || deleted.eventType === 'availabilityPerinatalGriefLoss'\r\n || deleted.eventType === 'availabilityNthQLDPHNNew'\r\n || deleted.eventType === 'availabilityNthQLDPHNExisting'\r\n || deleted.eventType === 'availabilityNthQLDPHNFacetoFace'\r\n )\r\n {\r\n payload = {\r\n slot: deleted.id,\r\n mainID: payloadRef.current.psychologistID,\r\n userTZ: payloadRef.current.userTZ\r\n }\r\n dispatch(Admin.actions.delAvailability(payload))\r\n }\r\n else if(deleted.eventType === 'booking')\r\n {\r\n dispatch(Admin.actions.putAppointment({ \r\n id: deleted.id, \r\n status: 'Cancelled',\r\n appointment: {\r\n id: deleted.id, \r\n userTZ: 'UTC', //done\r\n startDate: deleted.start, \r\n clientID: deleted.clientID, // done\r\n psychologistID: payloadRef.current.psychologistID, // done\r\n status: status\r\n },\r\n refreshPayload: { key: 'psychologist', id: payloadRef.current.psychologistID } \r\n }))\r\n } \r\n }\r\n };\r\n \r\n\r\n return(\r\n <>\r\n <TileGrid history={props.history} />\r\n {isTodayMonday() ?\r\n\t\t\t <InterestsPanels />\r\n :\r\n null\r\n }\r\n {providerBookingApproval && providerBookingApproval.length > 0 ?\r\n <BookingApproval />\r\n :\r\n null\r\n } \r\n <div className=\"row\"> \r\n <div className=\"col-xl-12\">\r\n <div className=\"kt-portlet kt-portlet--height-fluid\"> \r\n <div className=\"kt-portlet__body\" style={{ padding: 0 }}>\r\n <div className=\"kt-widget4\">\r\n <IntlProvider locale=\"en-AU\">\r\n <Scheduler \r\n data={data} \r\n onDataChange={handleDataChange}\r\n item={CustomItem}\r\n defaultDate={displayDate} \r\n editable={{ add: true, remove: true, drag: true, resize: true, edit: true }} \r\n form={FormWithCustomEditor}\r\n // header={CustomHeader}\r\n height={900} >\r\n <WeekView\r\n title=\"Week\"\r\n workDayStart=\"06:00\"\r\n workDayEnd=\"22:00\"\r\n selectedDateFormat=\"{0:M}\"\r\n selectedShortDateFormat=\"{0:M}\"\r\n workWeekStart={Day.Monday}\r\n \r\n />\r\n <MonthView />\r\n </Scheduler>\r\n </IntlProvider>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n\r\n\r\n <Modal show={showToDo} onHide={()=>setShowToDo(false)} dialogClassName=\"todos-modal-dialog\">\r\n <Modal.Header closeButton className=\"todos-modal\">\r\n <Modal.Title>To Do - {toDoTitle}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"todos-modal\">\r\n {toDoClientID && <ToDos clientID={toDoClientID} setShowToDo={setShowToDo} />}\r\n </Modal.Body>\r\n </Modal>\r\n\r\n\r\n <Modal show={showUpdatePassword} onHide={()=>setShowUpdatePassword(false)} dialogClassName=\"todos-modal-dialog\">\r\n <Modal.Header closeButton className=\"todos-modal\">\r\n <Modal.Title>You have recently recovered your password, please update your password</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"todos-modal\">\r\n <UpdatePassword setShowUpdatePassword={setShowUpdatePassword} />\r\n </Modal.Body>\r\n </Modal>\r\n\r\n\r\n </>\r\n\r\n )\r\n\r\n}\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport { Button, Modal, Form, Row, Col, Tabs, Tab, InputGroup, Badge } from \"react-bootstrap\";\r\nimport { Paper, TextField, Grid, MenuItem, Select, FormControl, InputLabel, makeStyles, List, ListItem, ListItemIcon, ListItemText, Typography, Checkbox } from '@material-ui/core';\r\nimport { DataGridPro } from '@mui/x-data-grid-pro';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport * as Reference from \"../../../store/ducks/reference.duck\";\r\nimport PlacesAutoComplete from \"../../../components/AddressAutoComplete\";\r\nimport BookingsList from \"../../../components/BookingsList\";\r\nimport BookingBillingList from \"../../../components/BookingBillingList\";\r\nimport { BookingWeek } from \"../../../components/Appointments\";\r\nimport ReferralMaintenance from \"../../../components/ReferralMaintenance\";\r\nimport Notes from \"../../../components/Notes\";\r\nimport Files from \"../../../components/Files\";\r\nimport ToDos from '../../../components/ToDos';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport { format } from \"date-fns\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\nimport '../../../../_metronic/_assets/css/app.css';\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n noBorder: {\r\n border: \"none\",\r\n },\r\n\tformControl: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: 120,\r\n\t},\r\n\tformControlWide: {\r\n\t margin: 0, //theme.spacing(1),\r\n\t minWidth: '100%',\r\n\t},\r\n\tselectEmpty: {\r\n\t marginTop: theme.spacing(2),\r\n\t},\r\n\tlabel: {\r\n\t backgroundColor: '#fff',\r\n\t paddingLeft: 3,\r\n\t paddingRight: 3,\r\n\t}\r\n }));\r\n\r\nexport default function ClientsPsychologist() {\r\n \r\n const classes = useStyles();\r\n const [searchTerm, setSearchTerm] = useState('')\r\n const [haveBookings, sethaveBookings] = useState(false);\r\n\r\n const dispatch = useDispatch()\r\n const clients = useSelector(state => state.admin.Clients)\r\n const client = useSelector(state => state.admin.Client)\r\n const filters = useSelector(state => state.admin.Filters)\r\n\r\n const searchClients = (client) => {\r\n if( true\r\n && (client.fullname.toLowerCase().search(searchTerm.toLowerCase()) > -1 || searchTerm.length === 0 )\r\n // && (client.clientAreasOfInterest.some(issue => issue === searchAOI) || searchAOI === '')\r\n && (filters.clientsStatus === 'All' \r\n || (filters.clientsStatus === 'Active' && client.status === 'Active') \r\n || (filters.clientsStatus === 'Archived' && client.status === 'Archived') ) \r\n )\r\n {\r\n return client\r\n } \r\n }\r\n \r\n const filteredClients = clients.filter(client => searchClients(client))\r\n\r\n // May need to consider this - do providers need to see inactive clients? \r\n useEffect( () => { dispatch(Admin.actions.fetchClients( { status: filters.clientsStatus } )) }, [dispatch, filters.clientsStatus] )\r\n useEffect( () => { dispatch(Admin.actions.fetchMedicalPractitioners()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchMedicalPractices({ type: 'GeneralPractitioner' })) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchTimeZone()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchConstants()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchFundingTypes()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchSundayThisWeek()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchAreasOfInterest('ALL')) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchRegistered()) }, [dispatch] )\r\n\r\n const registered = useSelector(state => state.admin.RegisteredPsychologists[0]);\r\n const providerType = useSelector(state => (state.admin.RegisteredPsychologists[0] && state.admin.RegisteredPsychologists[0].providertype))\r\n const userTZ = useSelector(state => state.auth.userTZ)\r\n const medicalPractitioners = useSelector(state => state.admin.MedicalPractitioners)\r\n const medicalPractices = useSelector(state => state.admin.MedicalPractices.GeneralPractitioner)\r\n const timeZone = useSelector(state => state.reference.TimeZone)\r\n const areasOfInterestReference = useSelector(state => state.reference.AreasOfInterest)\r\n const areasOfInterest = areasOfInterestReference.filter(area => area.providertype === providerType)\r\n \r\n const bookings = useSelector(state => state.admin.Bookings)\r\n \r\n const getBookings = () => {\r\n if (!haveBookings && registered) {\r\n dispatch(Admin.actions.fetchBookings({ key: 'psychologist', id: registered.id, userTZ: userTZ }))\r\n sethaveBookings(true)\r\n } \r\n }\r\n\r\n useEffect( () => {\r\n if(filters.clientsListLoadClientID)\r\n {\r\n loadClient(filters.clientsListLoadClientID)\r\n dispatch(Admin.actions.setFilters({ filterName: 'clientsListLoadClientID', filterValue: undefined }))\r\n }\r\n })\r\n\r\n useEffect( () => { getBookings() }, )\r\n\r\n var [show, setShow] = useState(false);\r\n var [showAppointment, setShowAppointment] = useState(false);\r\n var [showNotes, setShowNotes] = useState(false);\r\n var [showFiles, setShowFiles] = useState(false);\r\n const [showToDo, setShowToDo] = useState(false)\r\n const [toDoClientID, setToDoClientID] = useState()\r\n const [toDoTitle, setToDoTitle] = useState('')\r\n \r\n const initMedicalPractitioner = () => {\r\n return { id: 0, providernumber: '', salutation: 'Dr', firstName: '', surname: '', fullname: '', mobilephone: '', phone: '', type: 'Client GP', }\r\n }\r\n\r\n const initMedicalPractice = useCallback(() => {\r\n return { id: 0, abn: '', practicename: '', phone: '', address1: '', email: '', website: '', logoURL: '', practiceType: 'GeneralPractitioner' }\r\n },[])\r\n\r\n const loadMedicalPractitice = useCallback((thisMedicalPractice) => {\r\n setcurrentMedicalPractice(thisMedicalPractice ? thisMedicalPractice : initMedicalPractice())\r\n },[initMedicalPractice])\r\n\r\n\r\n const loadMedicalPractitioner = useCallback((thisMedicalPractitioner) =>{\r\n setcurrentMedicalPractitioner(thisMedicalPractitioner ? thisMedicalPractitioner : initMedicalPractitioner())\r\n setcurrentMedicalPractitionerID(thisMedicalPractitioner ? thisMedicalPractitioner.id : 0);\r\n var tempMedicalPractice = thisMedicalPractitioner ? medicalPractices.find(v => v.id === thisMedicalPractitioner.medicalPracticeID) : null;\r\n loadMedicalPractitice(tempMedicalPractice)\r\n },[loadMedicalPractitice,medicalPractices])\r\n\r\n \r\n function handleAppointmentTypeChange(value) {\r\n setcurrentAppointmentType(value);\r\n }\r\n\r\n\r\n var [currentMedicalPractitioner, setcurrentMedicalPractitioner] = useState(initMedicalPractitioner()); \r\n var [currentMedicalPractice, setcurrentMedicalPractice] = useState(initMedicalPractice());\r\n\r\n const getMedicalPractitionerOption = (option, value) => {\r\n if (option.id === value.id) {\r\n return option\r\n } else {\r\n return initMedicalPractitioner();\r\n }\r\n }\r\n\r\n const getMedicalPracticeOption = (option, value) => {\r\n if (option.id === value.id) {\r\n return option\r\n } else {\r\n return initMedicalPractice();\r\n }\r\n }\r\n \r\n function handleTimeZoneAutocompleteChange(propertyName, event, newValue) { \r\n if (newValue) {\r\n setcurrentTimeZone(newValue.systemName);\r\n }\r\n } \r\n\r\n function putArchive()\r\n {\r\n // Archive client - i.e. alter status to Archived from Active \r\n // console.log(currentClientID);\r\n dispatch(Admin.actions.putClientArchive({id : currentClientID, changetype: currentAction}));\r\n setShowConfirmation(false)\r\n }\r\n\r\n function getIndex(value, arr, prop) {\r\n for(var i = 0; i < arr.length; i++) {\r\n if(arr[i][prop] === value) {\r\n return i;\r\n }\r\n }\r\n return -1; // where the value doesn't exist\r\n }\r\n\r\n const handleToggle = (value) => () => {\r\n const currentIndex = getIndex(value.id, currentProgramPopulation, 'id') //checked.find(r => r.id === value.id);\r\n const newChecked = [...currentProgramPopulation];\r\n if (currentIndex === -1) {\r\n newChecked.push(value);\r\n } else {\r\n newChecked.splice(currentIndex, 1);\r\n }\r\n setcurrentProgramPopulation(newChecked);\r\n };\r\n\r\n function putClient() {\r\n var payload = {\r\n profileClientID: currentClientID,\r\n profileFirstName: currentFirstName,\r\n profilePreferredName: currentPreferredName,\r\n profileSurname: currentSurname,\r\n profileDOB: currentDOB,\r\n profileEmail: currentEmail,\r\n profileGender: currentGender,\r\n profileOccupation: currentOccupation,\r\n profileMobile: currentMobile,\r\n profilefulladdress: currentfulladdress,\r\n profileStatus: currentStatus,\r\n profileNote: currentNote,\r\n profilehopeToGetFromTreatment: currenthopeToGetFromTreatment,\r\n profileMedicalPractitionerID: currentMedicalPractitionerID,\r\n profilePaymentType: currentPaymentType,\r\n profileTimeZone: currentTimeZone,\r\n profileLatitude: currentLatitude, \r\n profileLongitude: currentLongitude,\r\n profilePostCode: currentPostCode,\r\n emergencycontactname1: currentEmergencyContactName1,\r\n emergencycontactphone1: currentEmergencyContactPhone1,\r\n emergencycontactrelation1: currentEmergencyContactRelation1, \r\n emergencycontactname2: currentEmergencyContactName2,\r\n emergencycontactphone2: currentEmergencyContactPhone2,\r\n emergencycontactrelation2: currentEmergencyContactRelation2,\r\n profilemedicareno: currentmedicareno,\r\n profilemedicarereferenceno: currentmedicarereferenceno,\r\n profilemedicareexpirydate: currentmedicareexpirydate, \r\n profileAreasOfInterest: currentAreasOfInterest.map(aoi => aoi.issue).join(\",\"), \r\n medicalPractice: currentMedicalPractice,\r\n medicalPractitioner: currentMedicalPractitioner, \r\n status: currentStatus,\r\n appointmenttype: currentAppointmentType, \r\n profilegpname: currentGPName,\r\n profilegpclinicname : currentGPClinicName, \r\n profilendisnumber: currentNDISNumber,\r\n profilendisdatefrom : currentNDISDateFrom,\r\n profilendisdateto : currentNDISDateTo,\r\n profilendisplanmanagementprovider : currentNDISPlanManagementProvider,\r\n profilendisdiagnosishistory : currentNDISDiagnosisHistory,\r\n profilendisemailforinvoices : currentNDISEmailForInvoices,\r\n profilendisbookingfee : currentNDISBookingFee,\r\n profileRHCNDISItemCode: currentRHCNDISItemCode,\r\n profileNDISBillingNote : currentNDISBillingNote,\r\n profilepassword: null,\r\n profilepasswordconfirmation : null,\r\n profileConsentToShareWithGP : currentConsentToShareWithGP,\r\n profilePronouns : currentPronouns,\r\n profileIndigenous: currentIndigenous,\r\n profileNDISSupportCoordinator : currentNDISSupportCoordinator,\r\n profileNDISSupportCoordinatorPhone : currentNDISSupportCoordinatorPhone,\r\n profileprogrampopulation: currentProgramPopulation.map(pp => pp.name).join(\",\"),\r\n profileNthQLDPHNBookings: currentNthQLDPHNBookings\r\n }\r\n //\r\n if (process.env.REACT_APP_DEBUG) \r\n {\r\n console.log ('Putting (Update)');\r\n } \r\n // Save update \r\n dispatch(Admin.actions.putClientDetail(payload));\r\n // Close form\r\n setShow(false);\r\n }\r\n\r\n function loadFiles(thisClient) {\r\n setcurrentClientID(thisClient.id)\r\n setcurrentPaymentType(thisClient.paymentType)\r\n setcurrentFirstName(thisClient.firstname)\r\n setcurrentPreferredName(thisClient.preferredname)\r\n setcurrentSurname(thisClient.surname)\r\n setShowFiles(true)\r\n }\r\n\r\n function loadNotes(thisClient, noteAction) {\r\n setNoteAction(noteAction)\r\n setcurrentClientID(thisClient.id)\r\n setcurrentID(thisClient.id)\r\n setcurrentFirstName(thisClient.firstname)\r\n setcurrentPreferredName(thisClient.preferredname)\r\n setcurrentSurname(thisClient.surname)\r\n setcurrentReferralGPPracticeFax(thisClient.referralGPPracticeFax)\r\n setShowNotes(true)\r\n }\r\n\r\n const loadArchive = (thisClient,action) => {\r\n // console.log(providerType);\r\n setcurrentClientID(thisClient.id)\r\n setcurrentID(thisClient.id)\r\n setcurrentFirstName(thisClient.firstname)\r\n setcurrentPreferredName(thisClient.preferredname)\r\n setcurrentSurname(thisClient.surname)\r\n setcurrentAction(action)\r\n \r\n setShowConfirmation(true)\r\n }\r\n\r\n const loadClient = (id) => {\r\n dispatch(Admin.actions.fetchClient( { clientID: id, type: providerType } ))\r\n setcurrentProgram(false)\r\n }\r\n\r\n // Define Program Question responses \r\n const programPopulationOptions = [\r\n {\r\n \"id\" : \"1\",\r\n \"index\" : \"1\",\r\n \"name\" : \"Aboriginal and/or Torres Strait Islander\",\r\n },\r\n {\r\n \"id\" : \"2\",\r\n \"index\" : \"2\",\r\n \"name\": \"Culturally and linguistically diverse\",\r\n },\r\n {\r\n \"id\": \"3\",\r\n \"index\": \"3\",\r\n \"name\": \"Migrant and Refugee\",\r\n },\r\n {\r\n \"id\" : \"4\",\r\n \"index\": \"4\",\r\n \"name\": \"Under 20\",\r\n },\r\n {\r\n \"id\" : \"5\",\r\n \"index\": \"5\",\r\n \"name\": \"Rural and Remote\",\r\n }\r\n ]\r\n\r\n const loadProfile = useCallback((thisClient) => {\r\n // console.log(providerType);\r\n setcurrentProviderType(providerType);\r\n setcurrentPaymentType(thisClient.paymentType);\r\n // Check to see if it supervision client - if so update providertype \r\n if (thisClient.paymentType === \"Supervision\")\r\n {\r\n setcurrentProviderType('Supervision');\r\n }\r\n //\r\n setcurrentClientID(thisClient.id);\r\n setcurrentID(thisClient.id);\r\n setcurrentMedicalPractitionerID(thisClient.medicalPractitionerID);\r\n setcurrentPaymentType(thisClient.paymentType);\r\n setcurrentClientBookingType(thisClient.appointmenttype === '1' ? 'PHONE' : 'VIDEO')\r\n setcurrentfulladdress(thisClient.fulladdress);\r\n setcurrentStatus(thisClient.status);\r\n setcurrentLatitude(thisClient.latitude);\r\n setcurrentLongitude(thisClient.longitude);\r\n setcurrentFirstName(thisClient.firstname);\r\n setcurrentPreferredName(thisClient.preferredname)\r\n setcurrentSurname(thisClient.surname);\r\n setcurrentDOB(thisClient.dob);\r\n setcurrentEmail(thisClient.email);\r\n setcurrentGender(thisClient.gender);\r\n setcurrentOccupation(thisClient.occupation);\r\n setcurrentMobile(thisClient.mobilephone);\r\n setcurrentNote(thisClient.note);\r\n setcurrentTimeZone(thisClient.timeZone);\r\n setcurrentPostCode(thisClient.postCode);\r\n setcurrenthopeToGetFromTreatment(thisClient.hopeToGetFromTreatment);\r\n setcurrentEmergencyContactName1(thisClient.emergencycontactname1);\r\n setcurrentEmergencyContactPhone1(thisClient.emergencycontactphone1);\r\n setcurrentEmergencyContactRelation1(thisClient.emergencycontactrelation1);\r\n setcurrentEmergencyContactName2(thisClient.emergencycontactname2);\r\n setcurrentEmergencyContactPhone2(thisClient.emergencycontactphone2);\r\n setcurrentEmergencyContactRelation2(thisClient.emergencycontactrelation2);\r\n setcurrentmedicareno(thisClient.medicareno);\r\n setcurrentmedicarereferenceno(thisClient.medicarereferenceno);\r\n setcurrentmedicareexpirydate(thisClient.medicareexpirydate);\r\n setcurrentAppointmentType(thisClient.appointmenttype);\r\n setcurrentStatus(thisClient.status);\r\n setcurrentBusinessName(thisClient.businessName);;\r\n setcurrentABN(thisClient.abn);\r\n setcurrentBusinessAddress(thisClient.businessAddress);\r\n setcurrentBackgroundInformation(thisClient.backgroundInformation);\r\n setcurrentHealthCareCard(thisClient.healthcarecard);\r\n setcurrentUnemployed(thisClient.unemployed);\r\n setcurrentNaturalDisaster(thisClient.naturaldisaster);\r\n setcurrentGPMentalHealthPlan12Months(thisClient.gpmentalhealthplan12months);\r\n setcurrentBulkBilledReason(thisClient.bulkbilledreason);\r\n setcurrentGPName(thisClient.gpName);\r\n setcurrentGPClinicName(thisClient.gpClinicName)\r\n setcurrentNDISNumber(thisClient.ndisnumber)\r\n setcurrentNDISDateFrom(thisClient.ndisdatefrom)\r\n setcurrentNDISDateTo(thisClient.ndisdateto)\r\n setcurrentNDISPlanManagementProvider(thisClient.ndisplanmanagementprovider)\r\n setcurrentNDISDiagnosisHistory(thisClient.ndisdiagnosishistory)\r\n setcurrentNDISActualProviderFee(thisClient.ndisactualproviderfee)\r\n setcurrentReferralGPPracticeFax(thisClient.referralGPPracticeFax)\r\n setcurrentNDISEmailForInvoices(thisClient.ndisemailforinvoices)\r\n setcurrentNDISBookingFee(thisClient.ndisbookingfee)\r\n setcurrentRHCNDISItemCode(thisClient.rhcndisitemcode)\r\n setcurrentNDISBillingNote(thisClient.ndisbillingnote)\r\n setcurrentConsentToShareWithGP(thisClient.consentToShareWithGP)\r\n setcurrentPronouns(thisClient.pronouns)\r\n setcurrentIndigenous(thisClient.indigenous)\r\n setcurrentHandOverNotes(thisClient.handOverNotes)\r\n setcurrentNDISSupportCoordinator(thisClient.ndissupportcoordinator)\r\n setcurrentNDISSupportCoordinatorPhone(thisClient.ndissupportcoordinatorphone)\r\n setcurrentReferringGPName(thisClient.referringGPName)\r\n setcurrentReferringGPProviderNo(thisClient.referringGPProviderNo)\r\n setcurrentReferredGPOn(thisClient.referredGPOn)\r\n setcurrentContractProviderFee(thisClient.contractproviderfee)\r\n setcurrentNthQLDPHNBookings(thisClient.nthQLDPHNEstimated)\r\n setcurrentNthQLDPHNPast(thisClient.nthQLDPHNPast)\r\n setcurrentNthQLDPHNTotal(thisClient.nthQLDPHNTotal)\r\n setcurrentNthQLDPHNFuture(thisClient.nthQLDPHNFuture)\r\n setcurrentSpecialistType(thisClient.specialisttype)\r\n if (thisClient.rhcndismanagment === '1')\r\n {\r\n setcurrentRHCNDISManagedLabel(true)\r\n }\r\n else\r\n {\r\n setcurrentRHCNDISManagedLabel(false)\r\n }\r\n if (thisClient.rhccontractmanagement === '1')\r\n {\r\n setcurrentRHCContractManagedLabel(true)\r\n }\r\n else\r\n {\r\n setcurrentRHCContractManagedLabel(false)\r\n }\r\n \r\n var aoi_clienttype = areasOfInterestReference.filter(area => area.providertype === providerType)\r\n var aoi = aoi_clienttype.filter(( {issue} ) => thisClient.clientAreasOfInterest.includes(issue))\r\n setcurrentAreasOfInterest(aoi);\r\n\r\n var aoi_program = aoi.filter(aoip => (aoip.program !== null && aoip.program !== 0)) \r\n // console.log(aoi_program)\r\n if (aoi_program && aoi_program.length > 0)\r\n {\r\n //console.log('Not here')\r\n setcurrentProgram(true)\r\n }\r\n var programPopulation = programPopulationOptions.filter(( {name} ) => thisClient.programpopulation.includes(name))\r\n setcurrentProgramPopulation(programPopulation)\r\n\r\n loadMedicalPractitioner(medicalPractitioners.find(v => v.id === thisClient.medicalPractitionerID));\r\n // Load Form\r\n setShow(true);\r\n },[areasOfInterestReference,loadMedicalPractitioner,medicalPractitioners,providerType])\r\n\r\n useEffect( () => { client && client.id && client.id > 0 && loadProfile(client) }, [client,loadProfile] )\r\n\r\n var [currentClientID, setcurrentClientID] = useState(); \r\n var [currentMedicalPractitionerID, setcurrentMedicalPractitionerID] = useState();\r\n var [currentPaymentType, setcurrentPaymentType] = useState();\r\n var [currentClientBookingType, setcurrentClientBookingType] = useState()\r\n var [currentTimeZone, setcurrentTimeZone] = useState();\r\n var [currentfulladdress, setcurrentfulladdress] = useState();\r\n var [currentLatitude, setcurrentLatitude] = useState();\r\n var [currentLongitude, setcurrentLongitude] = useState();\r\n var [currentID, setcurrentID] = useState();\r\n var [currentPostCode, setcurrentPostCode] = useState()\r\n var [currentStatus, setcurrentStatus] = useState() \r\n var [currentFirstName, setcurrentFirstName] = useState()\r\n var [currentPreferredName, setcurrentPreferredName] = useState()\r\n var [currentSurname, setcurrentSurname] = useState()\r\n var [currentDOB, setcurrentDOB] = useState();\r\n var [currentEmail, setcurrentEmail] = useState();\r\n var [currentGender, setcurrentGender] = useState();\r\n var [currentOccupation, setcurrentOccupation] = useState();\r\n var [currentMobile, setcurrentMobile] = useState();\r\n var [currentNote, setcurrentNote] = useState();\r\n var [currenthopeToGetFromTreatment, setcurrenthopeToGetFromTreatment] = useState();\r\n var [currentEmergencyContactName1, setcurrentEmergencyContactName1] = useState();\r\n var [currentEmergencyContactPhone1, setcurrentEmergencyContactPhone1] = useState();\r\n var [currentEmergencyContactRelation1, setcurrentEmergencyContactRelation1] = useState();\r\n var [currentEmergencyContactName2, setcurrentEmergencyContactName2] = useState();\r\n var [currentEmergencyContactPhone2, setcurrentEmergencyContactPhone2] = useState();\r\n var [currentEmergencyContactRelation2, setcurrentEmergencyContactRelation2] = useState();\r\n var [currentAreasOfInterest, setcurrentAreasOfInterest] = useState();\r\n var [currentmedicareno, setcurrentmedicareno] = useState();\r\n var [currentmedicarereferenceno, setcurrentmedicarereferenceno] = useState();\r\n var [currentmedicareexpirydate, setcurrentmedicareexpirydate] = useState();\r\n var [currentAppointmentType, setcurrentAppointmentType] = useState('0');\r\n var [currentProviderType, setcurrentProviderType] = useState(); \r\n var [currentBusinessName,setcurrentBusinessName] = useState();\r\n var [currentABN,setcurrentABN] = useState();\r\n var [currentBusinessAddress,setcurrentBusinessAddress] = useState();\r\n var [currentBackgroundInformation,setcurrentBackgroundInformation] = useState();\r\n var [currentHealthCareCard,setcurrentHealthCareCard] = useState();\r\n var [currentUnemployed,setcurrentUnemployed] = useState();\r\n var [currentGPMentalHealthPlan12Months, setcurrentGPMentalHealthPlan12Months] = useState();\r\n var [currentNaturalDisaster,setcurrentNaturalDisaster] = useState();\r\n var [currentBulkBilledReason,setcurrentBulkBilledReason] = useState();\r\n const [currentGPName,setcurrentGPName] = useState();\r\n const [currentGPClinicName,setcurrentGPClinicName] = useState();\r\n const [currentNDISNumber,setcurrentNDISNumber] = useState();\r\n const [currentNDISDateFrom,setcurrentNDISDateFrom] = useState();\r\n const [currentNDISDateTo,setcurrentNDISDateTo] = useState();\r\n const [currentNDISPlanManagementProvider,setcurrentNDISPlanManagementProvider] = useState();\r\n const [currentNDISDiagnosisHistory,setcurrentNDISDiagnosisHistory] = useState();\r\n const [currentNDISSupportCoordinator,setcurrentNDISSupportCoordinator] = useState();\r\n const [currentNDISSupportCoordinatorPhone,setcurrentNDISSupportCoordinatorPhone] = useState();\r\n const [currentNDISActualProviderFee,setcurrentNDISActualProviderFee] = useState()\r\n const [currentNDISBookingFee,setcurrentNDISBookingFee] = useState()\r\n const [currentNDISEmailForInvoices,setcurrentNDISEmailForInvoices] = useState()\r\n const [currentRHCNDISItemCode, setcurrentRHCNDISItemCode] = useState()\r\n const [currentNDISBillingNote,setcurrentNDISBillingNote] = useState();\r\n const [currentReferralGPPracticeFax,setcurrentReferralGPPracticeFax] = useState();\r\n const [currentConsentToShareWithGP,setcurrentConsentToShareWithGP] = useState();\r\n const [currentPronouns,setcurrentPronouns] = useState();\r\n const [currentHandOverNotes,setcurrentHandOverNotes] = useState(); \r\n const [currentReferringGPName,setcurrentReferringGPName] = useState();\r\n const [currentReferringGPProviderNo,setcurrentReferringGPProviderNo] = useState();\r\n const [currentReferredGPOn,setcurrentReferredGPOn] = useState()\r\n const [currentAction,setcurrentAction] = useState('None')\r\n const [currentIndigenous,setcurrentIndigenous] = useState()\r\n const [currentProgramPopulation,setcurrentProgramPopulation] = useState([])\r\n const [currentProgram, setcurrentProgram] = useState(false)\r\n const [currentContractProviderFee, setcurrentContractProviderFee] = useState()\r\n const [currentRHCNDISManagedLabel,setcurrentRHCNDISManagedLabel] = useState(false)\r\n const [currentRHCContractManagedLabel,setcurrentRHCContractManagedLabel] = useState(false)\r\n const [currentNthQLDPHNBookings,setcurrentNthQLDPHNBookings] = useState()\r\n const [currentNthQLDPHNPast,setcurrentNthQLDPHNPast] = useState()\r\n const [currentNthQLDPHNTotal,setcurrentNthQLDPHNTotal] = useState()\r\n const [currentNthQLDPHNFuture,setcurrentNthQLDPHNFuture] = useState()\r\n var [currentSpecialistType,setcurrentSpecialistType] = useState()\r\n \r\n // console.log('Form Reload');\r\n\r\n const [key, setKey] = React.useState('personalDetails');\r\n\r\n var [showBooking, setShowBooking] = useState(false)\r\n var [showConfirmation,setShowConfirmation] = useState(false);\r\n var [booking, setBooking] = useState(false)\r\n var [toggleMessage, setToggleMessage] = useState(false)\r\n var [newNote, setNewNote] = useState('')\r\n var [sentMsg, setSentMsg] = useState()\r\n var [noteAction, setNoteAction] = useState('SMS')\r\n\r\n // const initBooking = {\r\n // id: 0,\r\n // status: '',\r\n // psychologistDate: new Date(),\r\n // endDate: new Date(),\r\n // title: '',\r\n // clientfullname: '',\r\n // clientMobilePhone: '',\r\n // psychologistfullname: '',\r\n // }\r\n\r\n const loadBooking = (thisBooking) => {\r\n setBooking(thisBooking);\r\n setNewNote(`Dear ${thisBooking.clientFirstName},\r\n\r\nPlease note you have been booked for a consultation with ${thisBooking.psychologistfullname} at ${format(new Date(thisBooking.clientDate ? thisBooking.clientDate: null), \"dd-MM-yyyy hh:mm aa\")}. \r\n\r\nPlease connect here: ${thisBooking.waitingroomurl} at that time.`);\r\n setToggleMessage(false);\r\n setShowBooking(true);\r\n }\r\n\r\n\r\n \r\n\r\n function getActionButtons(id) {\r\n if (booking.status === 'Cancelled') {\r\n return(\r\n <>\r\n <Button variant=\"danger\" size=\"sm\" onClick={() => deleteBooking(id)}>\r\n Delete Booking\r\n </Button>\r\n </>\r\n )\r\n }\r\n else if (booking.status === 'Active') {\r\n return(\r\n <>\r\n <Button variant=\"warning\" size=\"sm\" onClick={() => cancelBooking(id)}>\r\n Cancel Booking\r\n </Button>\r\n </>\r\n )\r\n }\r\n }\r\n\r\n function cancelBooking(id) {\r\n dispatch(Admin.actions.putAppointment( \r\n { id: id, \r\n status: 'Cancelled', \r\n refreshPayload: { key: 'psychologist', id: registered.id }\r\n }));\r\n setBooking({...booking, status: 'Cancelled'});\r\n }\r\n\r\n function deleteBooking(id) {\r\n dispatch(Admin.actions.putAppointment( \r\n { id: id, \r\n status: 'Deleted', \r\n refreshPayload: { key: 'psychologist', id: registered.id }\r\n }));\r\n setBooking({...booking, status: 'Deleted'});\r\n setShowBooking(false)\r\n }\r\n\r\n function sendMessage() {\r\n const formData = new FormData();\r\n // Add fields \r\n formData.append('type','Client');\r\n formData.append('pkid', booking.clientID);\r\n formData.append('subject','');\r\n formData.append('selector','SMS');\r\n formData.append('note',newNote);\r\n formData.append('faxdestination','');\r\n formData.append('faxFile','');\r\n formData.append('sendFormID',0);\r\n // Ok Time to Dispatch \r\n process.env.REACT_APP_DEBUG && console.log(...formData);\r\n dispatch(Admin.actions.postNote({ formData:formData, type: 'Client', pkID: booking.clientID}));\r\n setSentMsg('Message sent!')\r\n showMessageTimer();\r\n }\r\n\r\n const showMessageTimer =() => {\r\n const timer = setTimeout(() => {\r\n setSentMsg(undefined);\r\n setShowBooking(false)\r\n }, 3000);\r\n return () => clearTimeout(timer);\r\n }\r\n\r\n const loadToDos = (clientID, fullName) => {\r\n setToDoClientID(clientID)\r\n setToDoTitle(fullName)\r\n setShowToDo(true)\r\n }\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', hide: true },\r\n { field: 'fullname', headerName: 'Name', width: 250,\r\n renderCell: (params) => (\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item onClick={() => loadClient(params.row.id)} className=\"cell-Link\">\r\n <strong>\r\n {params.value} \r\n </strong>\r\n </Grid>\r\n <Grid item>\r\n <Badge variant={params.row.toDoCount === 0 ? \"secondary\" : params.row.toDoWarning ? \"warning\" : \"success\"} onClick={()=>loadToDos(params.row.id, params.value)} style={{ marginRight: 2, cursor: 'pointer', minWidth: 21 }}>\r\n {params.row.toDoCount}\r\n {/* {params.row.toDoCount === 0 ?\r\n <NoteAddIcon style={{ marginLeft: 8, color: 'green' }} />\r\n : params.row.toDoCount } */}\r\n </Badge> \r\n </Grid>\r\n </Grid>\r\n // <strong>\r\n // <div onClick={() => loadClient(params.row.id)} className=\"cell-Link\">\r\n // {params.value}\r\n // </div>\r\n // </strong>\r\n ), },\r\n { field: 'email', headerName: 'Email', width: 230 },\r\n { field: 'mobilephone', headerName: 'Phone', width: 120 },\r\n // { field: 'medicareisvalid', headerName: 'Medicare', width: 130 },\r\n { field: 'createdon', type: 'date', headerName: 'Created', width: 120, hide: true },\r\n { field: 'nextBookingID', headerName: 'Next Booking ID', width: 120, hide: true },\r\n { field: 'status', headerName: 'Status', width: 100, hide: true },\r\n { field: 'topBookingPsy', type: 'date', headerName: 'Booking', width: 140, \r\n // valueFormatter: ({ value }) => value ? format(new Date(value), \"dd-MM-yyyy HH:mm\") : null, \r\n cellClassName: (params) => params.row.nextBookingID !== null ? 'future-booking' : null,\r\n renderCell: (params) => (\r\n <>\r\n {bookings && params.row.nextBookingID ?\r\n <div onClick={() => loadBooking(bookings.find(r => r.id === params.row.nextBookingID))} className=\"cell-Link\"> \r\n {format(new Date(params.row.topBookingPsy), \"dd-MM-yyyy HH:mm\")}\r\n </div>\r\n :\r\n params.row.topBookingPsy != null ? format(new Date(params.row.topBookingPsy), \"dd-MM-yyyy HH:mm\") : null\r\n }\r\n </>\r\n )\r\n },\r\n { field: 'fileCount', headerName: 'File Count', width: 120, hide: true },\r\n { field: 'totalbookings', headerName: 'Bookings', width: 125, hide: false },\r\n { field: 'files', headerName: 'Files', width: 120, hide: true },\r\n { field: 'none', headerName: 'Actions', width: 360,\r\n renderCell: (params) => (\r\n <>\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: '1px solid rgb(192 192 192)', background: \"#faefcf\", marginRight: 10 }} onClick={() => loadNotes(clients.find(client => client.id === params.row.id), 'SMS')}>\r\n SMS \r\n </Button>\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: '1px solid rgb(192 192 192)', background: \"#d2f9fa\", marginRight: 10 }} onClick={() => loadNotes(clients.find(client => client.id === params.row.id), 'Email')}>\r\n Email \r\n </Button>\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: '1px solid rgb(192 192 192)', background: \"#ebfae8\", marginRight: 10 }} onClick={() => loadFiles(clients.find(client => client.id === params.row.id))}>\r\n Files \r\n </Button>\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: '1px solid rgb(192 192 192)', background: \"#fff0ed\", marginRight: 10 }} onClick={() => loadNotes(clients.find(client => client.id === params.row.id), 'Fax')}>\r\n Fax \r\n </Button>\r\n {bookings && params.row.nextBookingID ?\r\n <Button variant=\"secondary\" disabled size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: '1px solid rgb(192 192 192)', background: \"#ffff00\", marginRight: 10 }} onClick={() => loadArchive(clients.find(client => client.id === params.row.id), 'Archive')}>\r\n Archive \r\n </Button>\r\n :\r\n <>\r\n {params.row.status === 'Active' ?\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: '1px solid rgb(192 192 192)', background: \"#ffff00\", marginRight: 10 }} onClick={() => loadArchive(clients.find(client => client.id === params.row.id), 'Archived')}>\r\n Archive \r\n </Button>\r\n :\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: '1px solid rgb(192 192 192)', background: \"#ffff00\", marginRight: 10 }} onClick={() => loadArchive(clients.find(client => client.id === params.row.id), 'Active')}>\r\n UnArchive \r\n </Button>\r\n }\r\n </>\r\n }\r\n {/* {params.row.fileCount > 0 ? \r\n <>\r\n <PopupState variant=\"popover\" popupId=\"demo-popup-menu\">\r\n {(popupState) => (\r\n <React.Fragment>\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: '1px solid rgb(192 192 192)', background: \"#eee\", marginRight: 10 }} {...bindTrigger(popupState)}>\r\n Files\r\n </Button>\r\n <Menu {...bindMenu(popupState)}>\r\n {params.row.files.map(file => (\r\n <a href={file.downloadlink} key={file.filename}>\r\n <MenuItem onClick={popupState.close}>{file.filename}</MenuItem>\r\n </a>\r\n )\r\n )}\r\n </Menu>\r\n </React.Fragment>\r\n )}\r\n </PopupState>\r\n </>\r\n : null } */}\r\n </>\r\n )\r\n }\r\n ];\r\n\r\n const handleSearch = (event) => {\r\n const searchTerm = event.target.value \r\n setSearchTerm(searchTerm)\r\n }\r\n\r\n return (\r\n <>\r\n \r\n <Paper> \r\n <Grid container style={{ padding: 10 }}>\r\n <Grid item style={{ paddingTop: 8, paddingRight: 50, paddingLeft: 4, color: \"#646c9a\" }}>\r\n <h4>Clients</h4>\r\n </Grid>\r\n <Grid item style={{ marginTop: 2, paddingRight: 10 }}>\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(event) => handleSearch(event)}\r\n autoComplete='OFF'\r\n style={{ height: 37, maxWidth: 200 }}\r\n />\r\n </InputGroup>\r\n </Grid>\r\n <Grid item style={{ marginTop: 2, paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl}>\r\n <InputLabel id=\"clientsStatus-label\" className={classes.label}>Status</InputLabel>\r\n <Select\r\n labelId=\"clientsStatus-label\"\r\n id=\"clientsStatus\"\r\n margin=\"dense\"\r\n style={{ minWidth: 120, backgroundColor: \"#ffffff\" }}\r\n value={filters.clientsStatus}\r\n onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'clientsStatus', filterValue: event.target.value }))}\r\n >\r\n <MenuItem value='All'>All</MenuItem>\r\n <MenuItem value='Active'>Active</MenuItem>\r\n <MenuItem value='Archived'>Archived</MenuItem>\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n {/* <Grid item style={{ marginTop: 2, paddingRight: 10 }}>\r\n <FormControl variant=\"outlined\" className={classes.formControl}>\r\n <InputLabel id=\"clientsAOI-label\" className={classes.label}>Area of Interest</InputLabel>\r\n <Select\r\n labelId=\"clientsAOI-label\"\r\n id=\"clientsAOI\"\r\n margin=\"dense\"\r\n value={searchAOI}\r\n onChange={(event) => setSearchAOI(event.target.value)}\r\n style={{ minWidth: 140, backgroundColor: \"#ffffff\" }}\r\n >\r\n <MenuItem value=''>All</MenuItem>\r\n {areasOfInterest.sort((a,b) => (a.issue > b.issue) ? 1 : ((b.issue > a.issue) ? -1 : 0)).map(row => {\r\n return <MenuItem key={`key-${row.id}`} value={row.issue}>{row.issue}</MenuItem>\r\n })}\r\n </Select>\r\n </FormControl>\r\n </Grid> */}\r\n </Grid>\r\n </Paper>\r\n\r\n <Paper style={{ height: 700 }}>\r\n <DataGridPro\r\n rows={filteredClients} \r\n columns={columns} \r\n pagination={false}\r\n checkboxSelection={false} \r\n sortModel={[{ field: 'topBookingPsy', sort: 'desc' }]} \r\n getRowClassName={(params) => `datagrid-row-clients-${params.row.isNewClient.toString()}`} />\r\n </Paper>\r\n\r\n {/* {currentRHCNDISManagedLabel ? <span style={{ marginLeft:40, color: 'blue' }}>Managed by RHC. Provider payment per session ${currentNDISActualProviderFee}</span> : null} */}\r\n\r\n <Modal show={show} onHide={()=>setShow(false)} dialogClassName=\"editprofile-modal\">\r\n <Modal.Header closeButton className=\"editprofile-modal\">\r\n <Modal.Title>Edit Profile - {currentFirstName} {currentSurname} \r\n {currentRHCContractManagedLabel ? <span style={{ marginLeft:40, color: 'blue' }}>Managed by RHC. Provider payment per session ${currentContractProviderFee}</span> : null} \r\n </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"editprofile-modal\">\r\n <Form onSubmit={putClient}>\r\n <Tabs\r\n id=\"EditModal\"\r\n activeKey={key}\r\n onSelect={(k) => setKey(k)}\r\n >\r\n <Tab eventKey=\"personalDetails\" title=\"Personal\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>First Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileFirstName\" defaultValue={currentFirstName} onBlur={(event) => setcurrentFirstName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Preferred Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"profilePreferredName\" defaultValue={currentPreferredName} onBlur={(event) => setcurrentPreferredName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Surname</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileSurname\" defaultValue={currentSurname} onBlur={(event) => setcurrentSurname(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n {(currentProviderType !== 'Supervision') ?\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Gender</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentGender} onBlur={(event) => setcurrentGender(event.target.value)}>\r\n <option value=\"Male\">Male</option>\r\n <option value=\"Female\">Female</option>\r\n <option value=\"Other\">Other</option>\r\n <option value=\"Prefer not to say\">Prefer not to say</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n :\r\n null\r\n }\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Pronouns</Form.Label>\r\n <Form.Control type=\"text\" name=\"profilePronouns\" defaultValue={currentPronouns} onBlur={(event) => setcurrentPronouns(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n {(currentProviderType !== 'Supervision') ?\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Date of Birth</Form.Label>\r\n <Form.Control type=\"date\" name=\"profileDOB\" defaultValue={currentDOB} onBlur={(event) => setcurrentDOB(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n :\r\n null\r\n }\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Email</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileEmail\" defaultValue={currentEmail} onBlur={(event) => setcurrentEmail(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Contact Phone Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileMobile\" defaultValue={currentMobile} onBlur={(event) => setcurrentMobile(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label>TimeZone</Form.Label>\r\n <Autocomplete\r\n id=\"profileTimeZone\"\r\n variant=\"outlined\"\r\n options={timeZone}\r\n getOptionLabel={(option) => option.name}\r\n value={timeZone.find(v => v.systemName === currentTimeZone) || ''}\r\n onChange={(event, newValue) => handleTimeZoneAutocompleteChange('profileTimeZone', event, newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"TimeZoneSelector\"\r\n style={{backgroundColor: \"white\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n \r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label>Home Address</Form.Label>\r\n <PlacesAutoComplete \r\n currentID={currentID}\r\n currentfulladdress={currentfulladdress}\r\n setcurrentfulladdress = {setcurrentfulladdress}\r\n setcurrentLatitude = {setcurrentLatitude} \r\n setcurrentLongitude = {setcurrentLongitude}\r\n setcurrentPostCode = {setcurrentPostCode}\r\n />\r\n </Form.Group>\r\n </Col>\r\n {(currentProviderType !== 'Supervision') ?\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Occupation</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileOccupation\" defaultValue={currentOccupation} onBlur={(event) => setcurrentOccupation(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n :\r\n null\r\n }\r\n {(currentProviderType !== 'Financial' && currentProviderType !== 'Supervision') ?\r\n <>\r\n <Col md=\"3\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label>Funding Type</Form.Label> \r\n <Form.Control as=\"select\" defaultValue={currentPaymentType} onChange={(event) => setcurrentPaymentType(event.target.value)}>\r\n <option value=\"Bulk Billed\">Bulk Billed</option>\r\n <option value=\"Reduced Gap\">Reduced Gap</option>\r\n <option value=\"Full Fee\">Full Fee</option>\r\n <option value=\"NDIS\">NDIS</option>\r\n <option value=\"Contract\" disabled>Contract</option>\r\n <option value=\"EAP\" disabled>EAP</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </>\r\n :\r\n null\r\n }\r\n </Row>\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Do you identify as Aboriginal and/or Torres Strait islander</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={currentIndigenous} onBlur={(event) => setcurrentIndigenous(event.target.value)}>\r\n <option value=\"N\">No</option>\r\n <option value=\"Y\">Yes</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n {currentPaymentType === 'Contract' || currentPaymentType === 'EAP' ?\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Contract Provider Fee</Form.Label>\r\n <Form.Control type=\"text\" name=\"contractproviderfee\" defaultValue={currentContractProviderFee} readOnly />\r\n </Form.Group>\r\n </Col>\r\n :\r\n null\r\n }\r\n </Row>\r\n {currentPaymentType === 'Contract' || currentPaymentType === 'EAP' ? \r\n <>\r\n {currentSpecialistType === 'nthqldphn' ?\r\n <>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Label style={{ color: 'green', fontWeight: 500 }} >Nth QLD PHN Booking Management for this client</Form.Label>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Estimated Total</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileNthQLDPHNBookings\" defaultValue={currentNthQLDPHNBookings} onBlur={(event) => setcurrentNthQLDPHNBookings(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Total To Date</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileNthQLDPHNTotal\" defaultValue={currentNthQLDPHNTotal} readOnly />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Past Bookings</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileNthQLDPHNPast\" defaultValue={currentNthQLDPHNPast} readOnly />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Future Bookings</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileNthQLDPHNFuture\" defaultValue={currentNthQLDPHNFuture} readOnly />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n : \r\n null \r\n }\r\n </>\r\n :\r\n null\r\n }\r\n {programPopulationOptions && currentProgram ? \r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Do you identify as any of the following populations that we are particularly supporting via this program? (select all that apply)</Form.Label>\r\n <Row>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {programPopulationOptions.map(row => {\r\n if(row.index <= programPopulationOptions.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = currentProgramPopulation.find(r => r.id === row.id);\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleToggle(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.name}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })\r\n }\r\n </List>\r\n </Col>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {programPopulationOptions.map(row => {\r\n if(row.index > programPopulationOptions.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = currentProgramPopulation.find(r => r.id === row.id);\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleToggle(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.name}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })\r\n }\r\n </List>\r\n </Col>\r\n </Row>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n :\r\n null\r\n }\r\n {(currentProviderType !== 'GP' && currentProviderType !== 'Supervision') ?\r\n <>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Areas of Interest (Select all that apply) </Form.Label>\r\n <Autocomplete\r\n id=\"searchAOI\"\r\n variant=\"outlined\"\r\n multiple\r\n options={areasOfInterest}\r\n getOptionLabel={(option) => option.issue }\r\n value={currentAreasOfInterest}\r\n onChange={(event, newValue) => setcurrentAreasOfInterest(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: \"white\", }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"AOISelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n {currentProviderType !== 'Supervision' ? \r\n <Form.Label>What are you hoping to get out of your sessions?</Form.Label>\r\n :\r\n <Form.Label>Details on the type of supervision you are after, where you are currently practicing and other relevant information.</Form.Label>\r\n }\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" name=\"profilehopeToGetFromTreatment\" defaultValue={currenthopeToGetFromTreatment} onBlur={(event) => setcurrenthopeToGetFromTreatment(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {currentHandOverNotes && currentHandOverNotes.length > 2 ? \r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Handover Notes </Form.Label>\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" name=\"profilehandOverNotes\" readOnly defaultValue={currentHandOverNotes} />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n :\r\n null\r\n }\r\n <Row>\r\n </Row>\r\n {/* <Row>\r\n <Col md=\"10\">\r\n <Form.Group controlId=\"currentMedicalPractitioner.address\">\r\n <Form.Label>Address - may need to add this </Form.Label>\r\n <Form.Control type=\"text\" name=\"address\" value={currentMedicalPractitioner ? currentMedicalPractitioner.address : ''} readOnly />\r\n </Form.Group>\r\n </Col>\r\n </Row> */}\r\n {currentProviderType === 'Financial' ?\r\n <>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Business Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"businessName\" readOnly defaultValue={currentBusinessName || ''} />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>ABN</Form.Label>\r\n <Form.Control type=\"text\" name=\"abn\" readOnly defaultValue={currentABN || ''} />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Business Address</Form.Label>\r\n <Form.Control type=\"text\" name=\"businessAddress\" readOnly defaultValue={currentBusinessAddress || ''} />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Background Information</Form.Label>\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" readOnly name=\"backgroundinformation\" defaultValue={currentBackgroundInformation} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n\r\n {(currentProviderType !== 'Financial' && currentProviderType !== 'Supervision') ?\r\n <>\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Emergency Contact 1</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactname1\" defaultValue={currentEmergencyContactName1 || ''} onBlur={(event) => setcurrentEmergencyContactName1(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Relationship</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactrelation1\" defaultValue={currentEmergencyContactRelation1 || ''} onBlur={(event) => setcurrentEmergencyContactRelation1(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactphone1\" defaultValue={currentEmergencyContactPhone1 || ''} onBlur={(event) => setcurrentEmergencyContactPhone1(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Emergency Contact 2</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactname2\" defaultValue={currentEmergencyContactName2 || ''} onBlur={(event) => setcurrentEmergencyContactName2(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Relationship</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencyrelation2\" defaultValue={currentEmergencyContactRelation2 || ''} onBlur={(event) => setcurrentEmergencyContactRelation2(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactphone2\" defaultValue={currentEmergencyContactPhone2 || ''} onBlur={(event) => setcurrentEmergencyContactPhone2(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n {currentPaymentType === 'NDIS' ?\r\n <>\r\n <h5 style={{paddingBottom: 20}}>Billing Information</h5>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>NDIS Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"ndisnumber\" defaultValue={currentNDISNumber || ''} onBlur={(event) => setcurrentNDISNumber(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>NDIS Date From</Form.Label>\r\n <Form.Control type=\"date\" name=\"profileNDISDateFrom\" defaultValue={currentNDISDateFrom} onBlur={(event) => setcurrentNDISDateFrom(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>To</Form.Label>\r\n <Form.Control type=\"date\" name=\"profileNDISDateTo\" defaultValue={currentNDISDateTo} onBlur={(event) => setcurrentNDISDateTo(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>NDIS Total Fee</Form.Label>\r\n <Form.Control type=\"text\" name=\"ndisbookingfee\" defaultValue={currentNDISBookingFee || ''} onBlur={(event) => setcurrentNDISBookingFee(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>NDIS Plan Management Provider</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileNDISPlanManagementProvider\" defaultValue={currentNDISPlanManagementProvider} onBlur={(event) => setcurrentNDISPlanManagementProvider(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>NDIS Invoice Email</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileNDISEmailForInvoices\" defaultValue={currentNDISEmailForInvoices} onBlur={(event) => setcurrentNDISEmailForInvoices(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>NDIS Support Coordinator</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileNDISSupportCoordinator\" defaultValue={currentNDISSupportCoordinator} onBlur={(event) => setcurrentNDISSupportCoordinator(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>NDIS Support Coordinator Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileNDISSupportCoordinatorPhone\" defaultValue={currentNDISSupportCoordinatorPhone} onBlur={(event) => setcurrentNDISSupportCoordinatorPhone(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>NDIS Item Code</Form.Label>\r\n <Form.Control type=\"text\" name=\"profileRHCNDISItemCode\" defaultValue={currentRHCNDISItemCode} onBlur={(event) => setcurrentRHCNDISItemCode(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>NDIS Billing Note</Form.Label>\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" name=\"currentNDISBillingNote\" defaultValue={currentNDISBillingNote} onBlur={(event) => setcurrentNDISBillingNote(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n\r\n {(currentProviderType !== 'Financial') ?\r\n <>\r\n <Row>\r\n {(currentPaymentType !== 'Contract' && currentPaymentType !== 'NDIS' && currentPaymentType !== 'EAP' && currentProviderType !== 'Supervision') ?\r\n <>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Medicare Card Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"medicareno\" defaultValue={currentmedicareno || ''} onBlur={(event) => setcurrentmedicareno(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Order on Card</Form.Label>\r\n <Form.Control type=\"text\" name=\"medicarereferenceno\" defaultValue={currentmedicarereferenceno || ''} onBlur={(event) => setcurrentmedicarereferenceno(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Medicare Expiry Date</Form.Label>\r\n <Form.Control type=\"text\" name=\"medicareexpirydate\" defaultValue={currentmedicareexpirydate || ''} onBlur={(event) => setcurrentmedicareexpirydate(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </>\r\n :\r\n null\r\n }\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Appointment Type</Form.Label>\r\n <Select \r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n id='appointmentType'\r\n aria-label='Select Appointment Type'\r\n name='appointmentType'\r\n value={currentAppointmentType} \r\n onChange={(event) => handleAppointmentTypeChange(event.target.value)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: '#fff' }}>\r\n <MenuItem key='Video' value='0'>Video Call</MenuItem>\r\n <MenuItem key='Phone' value='1'>Phone Call</MenuItem>\r\n </Select>\r\n </Form.Group>\r\n </Col> \r\n </Row>\r\n <h5 style={{paddingBottom: 20}}>Registration Questions and Responses</h5>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Have you received a Mental Health Plan in the last 12 Months ?</Form.Label>\r\n <Form.Control type=\"text\" name=\"gpmentalhealthplan12months\" readOnly defaultValue={currentGPMentalHealthPlan12Months || ''} />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {currentPaymentType === 'Bulk Billed' || currentPaymentType === 'Reduced Gap'?\r\n <> \r\n {currentPaymentType === 'Bulk Billed' ?\r\n <>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Do you have a Health Care Card?</Form.Label>\r\n <Form.Control type=\"text\" name=\"healthcarecard\" readOnly defaultValue={currentHealthCareCard || ''} />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Are you Unemployed?</Form.Label>\r\n <Form.Control type=\"text\" name=\"unemployed\" readOnly defaultValue={currentUnemployed || ''} />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Have you been impacted by drought, bushfire, flood or other natural disaster?</Form.Label>\r\n <Form.Control type=\"text\" name=\"naturaldisaster\" readOnly defaultValue={currentNaturalDisaster || ''} />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Please tell us why you need to be billed a reduced fee (or bulk billed)?</Form.Label>\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" readOnly name=\"bulkbilledreason\" defaultValue={currentBulkBilledReason} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n </>\r\n :\r\n null\r\n }\r\n </Tab>\r\n {(currentProviderType !== 'Financial' && currentProviderType !== 'Supervision') ?\r\n <Tab eventKey=\"clientGP\" title=\"GP\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}> \r\n <>\r\n {/* Medical Practitioner */}\r\n {(currentProviderType !== 'Provisional' && currentProviderType !== 'GP') ?\r\n <>\r\n <Row>\r\n <Col md=\"4\">\r\n <h4>Client's GP</h4>\r\n </Col>\r\n <Col md=\"2\" style={{ textAlign: \"right\"}}>\r\n <SearchIcon style={{ marginTop: 8, marginRight: -13 }} />\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group style={{ width: \"100%\", marginBottom: 0 }}>\r\n <Autocomplete\r\n id=\"profileMedicalPractitionerID\"\r\n variant=\"outlined\"\r\n options={medicalPractitioners}\r\n getOptionLabel={(option) => option.fullname }\r\n getOptionSelected={(option, value) => getMedicalPractitionerOption(option, value)}\r\n value={currentMedicalPractitioner}\r\n onChange={(event, newValue) => loadMedicalPractitioner(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"MedicalPractitionerSelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group controlId=\"currentMedicalPractitionerFirstName\">\r\n <Form.Label>Firstname</Form.Label>\r\n <Form.Control type=\"text\" name=\"firstName\" value={currentMedicalPractitioner.firstName} onChange={(event) => setcurrentMedicalPractitioner({...currentMedicalPractitioner, firstName: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group controlId=\"currentMedicalPractitionerSurname\">\r\n <Form.Label>Surname</Form.Label>\r\n <Form.Control type=\"text\" name=\"surname\" value={currentMedicalPractitioner.surname} onChange={(event) => setcurrentMedicalPractitioner({...currentMedicalPractitioner, surname: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group controlId=\"currentMedicalPractitionerMobilePhone\">\r\n <Form.Label>Mobile Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"mobilephone\" value={currentMedicalPractitioner.mobilephone} onChange={(event) => setcurrentMedicalPractitioner({...currentMedicalPractitioner, mobilephone: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group controlId=\"currentMedicalPractitionerProviderNo\">\r\n <Form.Label>Provider Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"providernumber\" value={currentMedicalPractitioner.providernumber} onChange={(event) => setcurrentMedicalPractitioner({...currentMedicalPractitioner, providernumber: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n {/* Medical Practice */} \r\n <Row>\r\n <Col md=\"4\">\r\n <h4>Practice</h4>\r\n </Col>\r\n <Col md=\"2\" style={{ textAlign: \"right\"}}>\r\n <SearchIcon style={{ marginTop: 8, marginRight: -13 }} />\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group style={{ width: \"100%\", marginBottom: 0 }}>\r\n <Autocomplete\r\n id=\"profileMedicalPractice\"\r\n variant=\"outlined\"\r\n options={medicalPractices}\r\n getOptionLabel={(option) => option.practicename }\r\n getOptionSelected={(option, value) => getMedicalPracticeOption(option, value)}\r\n value={currentMedicalPractice}\r\n onChange={(event, newValue) => loadMedicalPractitice(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"MedicalPracticeSelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"5\">\r\n <Form.Group >\r\n <Form.Label>Clinic Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"practicename\" value={currentMedicalPractice ? currentMedicalPractice.practicename : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, practicename: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>ABN</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentAbn\" value={currentMedicalPractice ? currentMedicalPractice.abn : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, abn: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Contact Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentPhone\" value={currentMedicalPractice ? currentMedicalPractice.phone : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, phone: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Clinic Address</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentAddress1\" value={currentMedicalPractice ? currentMedicalPractice.address1 : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, address1: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Clinic Fax</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentFax\" value={currentMedicalPractice ? currentMedicalPractice.fax : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, fax: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Clinic Email</Form.Label>\r\n <Form.Control type=\"text\" name=\"currentEmail\" value={currentMedicalPractice ? currentMedicalPractice.email : ''} onChange={(event) => setcurrentMedicalPractice({...currentMedicalPractice, email: event.target.value})} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n </>\r\n :\r\n <>\r\n <Row>\r\n <Col md=\"4\">\r\n <h4>Client's GP</h4>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>GP Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"profilegpname\" defaultValue={currentGPName} onBlur={(event) => setcurrentGPName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>GP Clinic Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"profilegpclinicname\" defaultValue={currentGPClinicName} onBlur={(event) => setcurrentGPClinicName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n {currentProviderType === 'GP' ?\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Client consent to share their Mental Health Treatment Plan with their GP</Form.Label>\r\n <Form.Control as=\"select\" name=\"profileconsentToShareWithGP\" defaultValue={currentConsentToShareWithGP} onBlur={(event) => setcurrentConsentToShareWithGP(event.target.value)} >\r\n <option value=''></option>\r\n <option value='N'>No</option>\r\n <option value='Y'>Yes</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n :\r\n null\r\n }\r\n </Row>\r\n </>\r\n }\r\n </>\r\n </Tab>\r\n :\r\n null\r\n }\r\n <Tab eventKey=\"notes\" title=\"Notes\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}> \r\n <Notes type=\"Client\" pkid={currentClientID} firstName={currentPreferredName && currentPreferredName.length > 2 ? currentPreferredName : currentFirstName} medicalPractice={currentMedicalPractice} waitingRoomURL={registered && (registered.teleHealthProvider === 'COVIU' ? registered.coviuRoomURL : registered.waitingRoomURL )} faxGP={currentReferralGPPracticeFax} />\r\n </Tab>\r\n <Tab eventKey=\"files\" title=\"Files\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}>\r\n <Files type=\"Client\" subtype={currentPaymentType} pkid={currentClientID} />\r\n </Tab>\r\n {(currentProviderType !== 'Financial' && (currentProviderType !== 'GP')) ?\r\n <Tab eventKey=\"referrals\" title=\"Referrals\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}>\r\n <ReferralMaintenance \r\n viewerFullName={`${currentFirstName} ${currentSurname}`}\r\n clientID={currentClientID}\r\n psychologistID={registered && registered.id}\r\n type={'client'}\r\n />\r\n </Tab>\r\n :\r\n null\r\n }\r\n <Tab eventKey=\"bookings\" title=\"Bookings\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}> \r\n <BookingsList\r\n type='client'\r\n id={currentClientID}\r\n userTZ={currentTimeZone}\r\n view='psychologist'\r\n providerType={currentProviderType}\r\n />\r\n </Tab>\r\n <Tab eventKey=\"billing\" title=\"Billing\" style={{backgroundColor: \"rgb(245, 245, 245)\", padding: 6}}> \r\n <BookingBillingList\r\n id={currentClientID}\r\n clientFirstName={currentFirstName}\r\n clientPreferredName={currentPreferredName}\r\n clientSurname={currentSurname}\r\n clientDOB={currentDOB}\r\n clientEmail={currentEmail}\r\n clientMobile={currentMobile}\r\n clientMedicareNo={currentmedicareno}\r\n clientMedicareReferenceNo={currentmedicarereferenceno}\r\n clientMedicareExpiryDate={currentmedicareexpirydate}\r\n clientreferringGPName={currentReferringGPName}\r\n clientreferringGPProviderNo={currentReferringGPProviderNo}\r\n clientreferredOn={currentReferredGPOn}\r\n />\r\n </Tab>\r\n </Tabs>\r\n </Form> \r\n </Modal.Body>\r\n <Modal.Footer className=\"editprofile-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShow(false)}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"primary\" onClick={putClient}>\r\n Save\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showAppointment} onHide={() => setShowAppointment(false)} dialogClassName=\"editappointment-modal\">\r\n <Modal.Header closeButton className=\"editappointment-modal\">\r\n <Modal.Title>Appointments - {currentFirstName} {currentSurname}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"editappointment-modal\">\r\n {registered ? \r\n <BookingWeek\r\n mode=\"psychologist\"\r\n psychologistID={registered && registered.id}\r\n psychologistFullname = {registered.firstname + ' ' + registered.surname}\r\n clientID = {currentClientID && currentClientID}\r\n clientFullname={currentFirstName && (currentPreferredName && currentPreferredName.length > 2 ? currentPreferredName + ' ' + currentSurname : currentFirstName + ' ' + currentSurname)}\r\n clientFirstName={currentFirstName}\r\n clientPreferredName={currentPreferredName}\r\n currentHourlyRate = {registered.hourlyrate}\r\n currentWaitingRoomURL = {registered && (registered.teleHealthProvider === 'COVIU' ? registered.coviuRoomURL : registered.waitingRoomURL )}\r\n clientEmail = {currentEmail}\r\n psychologistTZ = {registered.timeZone}\r\n clientTZ={currentTimeZone}\r\n providerType={currentPaymentType}\r\n bookingType={currentClientBookingType}\r\n setShowAppointment={setShowAppointment}\r\n />\r\n : null} \r\n </Modal.Body>\r\n <Modal.Footer className=\"editappointment-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowAppointment(false)}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showBooking} onHide={()=>setShowBooking(false)} dialogClassName=\"new-bookingDialog-modal\" centered>\r\n <Modal.Header closeButton className=\"new-booking-modal\">\r\n <Modal.Title>Booking - {booking.status}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"new-booking-modal\" style={{ backgroundColor: 'rgb(245,245,245)' }}>\r\n {!toggleMessage ?\r\n <Grid container spacing={3} style={{ height: 247 }}>\r\n <Grid item md={3} xs={6}>\r\n Provider:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {booking.psychologistfullname}\r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Client:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {booking.clientfullname}\r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Date:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {format(new Date(booking.psychologistDate ? booking.psychologistDate: null), \"dd-MM-yyyy\")}\r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Time:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {format(new Date(booking.psychologistDate ? booking.psychologistDate: null), \"h:mm aa\")}\r\n </Grid>\r\n { booking.clientDate !== booking.psychologistDate ?\r\n <>\r\n <Grid item md={3} xs={6}>\r\n Client's Time:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {format(new Date(booking.clientDate ? booking.clientDate: null), \"h:mm aa\")}\r\n </Grid>\r\n </>\r\n : null\r\n }\r\n {/* <Grid item md={3} xs={6}>\r\n Session URL:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n <a href={booking.waitingroomurl} target=\"_blank\" rel=\"noopener noreferrer\">\r\n {booking.waitingroomurl}\r\n </a>\r\n </Grid> */}\r\n </Grid>\r\n :\r\n sentMsg ? \r\n <>\r\n <Row>\r\n <Col md=\"12\" style={{ height: 222 }}> \r\n {sentMsg}\r\n </Col>\r\n </Row>\r\n </>\r\n : \r\n <>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Message</Form.Label>\r\n <Form.Control as=\"textarea\" rows={8} type=\"text\" name=\"psychologistNote\" defaultValue={newNote} onBlur={(event) => setNewNote(event.target.value)} autoComplete='new-password' style={{ borderColor: '#D1D1D1'}} />\r\n {/* {newNoteHelpText.length ? (<p className='error-help'>{newNoteHelpText}</p>) : ''} */}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n }\r\n </Modal.Body>\r\n <Modal.Footer className=\"new-booking-modal\">\r\n <Grid\r\n container\r\n direction=\"row\"\r\n justifyContent=\"space-between\"\r\n alignItems=\"center\"\r\n >\r\n {!toggleMessage ?\r\n <>\r\n <Grid item>\r\n {getActionButtons(booking.id)}\r\n </Grid>\r\n <Grid item>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => setToggleMessage(!toggleMessage)} style={{ marginRight: 15 }}>\r\n Message\r\n </Button>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={() => setShowBooking(false)} className=\"lightButtonOutlinedLarge\">\r\n Close\r\n </Button>\r\n </Grid>\r\n </>\r\n :\r\n <>\r\n <Grid item>\r\n <Button variant=\"secondary\" size=\"sm\" onClick={() => setToggleMessage(!toggleMessage)} className=\"lightButtonOutlinedLarge\">\r\n Cancel\r\n </Button>\r\n </Grid>\r\n <Grid item>\r\n <Button variant=\"success\" size=\"sm\" onClick={() => sendMessage()}>\r\n Send >\r\n </Button>\r\n </Grid>\r\n </>\r\n }\r\n </Grid>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showNotes} onHide={()=>setShowNotes(false)} dialogClassName=\"notes-modal-dialog\">\r\n <Modal.Header closeButton className=\"notes-modal\">\r\n <Modal.Title>Notes - {currentFirstName} {currentSurname}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"notes-modal\">\r\n {registered ? \r\n <Notes type=\"Client\" noteAction={noteAction} pkid={currentClientID} firstName ={currentPreferredName && currentPreferredName.length > 2 ? currentPreferredName : currentFirstName} faxGP={currentReferralGPPracticeFax} medicalPractice={currentMedicalPractice} waitingRoomURL={registered && (registered.teleHealthProvider === 'COVIU' ? registered.coviuRoomURL : registered.waitingRoomURL)} psychologistFullName={registered.firstname + ' ' + registered.surname} clientFirstName={currentFirstName} />\r\n : null} \r\n </Modal.Body>\r\n <Modal.Footer className=\"notes-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowNotes(false)}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showFiles} onHide={()=>setShowFiles(false)} dialogClassName=\"notes-modal-dialog\">\r\n <Modal.Header closeButton className=\"notes-modal\">\r\n <Modal.Title>Files - {currentFirstName} {currentSurname}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"notes-modal\">\r\n {registered ? \r\n <Files type=\"Client\" subtype={currentPaymentType} pkid={currentClientID} />\r\n : null} \r\n </Modal.Body>\r\n <Modal.Footer className=\"notes-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowFiles(false)}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showConfirmation} onHide={()=>setShowConfirmation(false)} dialogClassName=\"notes-modal-dialog\">\r\n <Modal.Header closeButton className=\"notes-modal\">\r\n <Modal.Title>{currentAction === 'Active' ? 'Re activate - ' : 'Archive - '} {currentFirstName} {currentSurname} ?</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Footer className=\"notes-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowConfirmation(false)}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"primary\" onClick={putArchive}>\r\n Confirm\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showToDo} onHide={()=>setShowToDo(false)} dialogClassName=\"todos-modal-dialog\">\r\n <Modal.Header closeButton className=\"todos-modal\">\r\n <Modal.Title>To Do - {toDoTitle}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"todos-modal\">\r\n {toDoClientID && <ToDos clientID={toDoClientID} setShowToDo={setShowToDo} />}\r\n </Modal.Body>\r\n </Modal>\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n ) \r\n}\r\n\r\n","import React, { useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport ReferralsView from \"../../../components/ReferralsView\";\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\n\r\nexport default function ReferralsPsychologist() {\r\n\r\n const dispatch = useDispatch()\r\n \r\n useEffect( () => { dispatch(Admin.actions.fetchRegistered()) }, [dispatch] )\r\n const registered = useSelector(state => state.admin.RegisteredPsychologists[0]);\r\n \r\n if(registered) {\r\n return (\r\n <>\r\n <h4>Referrals</h4>\r\n <ReferralsView \r\n viewerFullName={registered.fullname}\r\n type=\"psychologist\"\r\n id={registered.id}\r\n />\r\n </>\r\n )\r\n }\r\n else\r\n {\r\n return <div>Loading...</div>\r\n }\r\n\r\n}\r\n","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Paper } from '@material-ui/core';\r\nimport InfoOutlinedIcon from '@material-ui/icons/InfoOutlined';\r\nimport { ViewState, EditingState } from '@devexpress/dx-react-scheduler';\r\nimport {\r\n Scheduler,\r\n Resources,\r\n Toolbar,\r\n WeekView,\r\n Appointments,\r\n AppointmentTooltip,\r\n AppointmentForm,\r\n DateNavigator,\r\n EditRecurrenceMenu,\r\n ConfirmationDialog,\r\n TodayButton,\r\n AllDayPanel,\r\n\r\n} from '@devexpress/dx-react-scheduler-material-ui';\r\n\r\n// import { yellow, lime, blue, amber, cyan, pink, teal, purple, orange, green, grey } from '@material-ui/core/colors';\r\nimport * as Admin from \"../store/ducks/admin.duck\";\r\n\r\n\r\nconst currentishDate = new Date();\r\n\r\nconst LabelComponent = (props) => {\r\n if (props.text === \"Details\" || props.text === \"More Information\") {\r\n return null;\r\n }\r\n return <AppointmentForm.Label {...props} />;\r\n};\r\n\r\nconst TextEditor = (props) => {\r\n // eslint-disable-next-line react/destructuring-assignment\r\n // console.log(props);\r\n if (props.type === 'multilineTextEditor' || props.type === 'titleTextEditor') {\r\n return null;\r\n } return <AppointmentForm.TextEditor {...props} />;\r\n};\r\n\r\nconst BasicLayout = ({ onFieldChange, appointmentData, ...restProps }) => {\r\n // Force title to be Available\r\n var newappointmentData = {...appointmentData, title:'Available', billingType: \"1\"}\r\n // console.log('Here')\r\n // console.log(newappointmentData)\r\n return (\r\n <AppointmentForm.BasicLayout\r\n appointmentData={newappointmentData }\r\n onFieldChange={onFieldChange}\r\n {...restProps}\r\n >\r\n </AppointmentForm.BasicLayout>\r\n );\r\n};\r\n\r\nconst ResourceEditor = props => {\r\n var newprops = {}\r\n if(props.appointmentResources.length === 0){\r\n newprops = { ...props, \r\n appointmentResources: [ { id: \"1\", color: \"green\", fieldName: \"billingType\", text: \"Medicare\", title: \"BillingTypes\", isMain: true, allowMultiple: false } ] \r\n }\r\n } else {\r\n newprops = props;\r\n }\r\n return <AppointmentForm.ResourceEditor {...newprops} />;\r\n};\r\n\r\nclass Availability extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n let filteredData = [];\r\n props.currentAvailability.forEach(event => {\r\n if (event.availabilityType === 'Any')\r\n {\r\n // Note this is known as New and Existing Clients - i.e. Any \r\n let fa = {\r\n \"slot\" : event.id,\r\n \"type\" : 'A',\r\n \"id\" : event.id,\r\n \"psychologistID\" : event.psychologistID,\r\n \"startDate\" : new Date(event.startDate),\r\n \"endDate\" : new Date(event.endDate),\r\n \"title\" : 'Available-New Client Bookings',\r\n \"allDay\" : event.allDay,\r\n \"rRule\" : event.rRule, \r\n \"exDate\" : event.exDate,\r\n \"createdBy\" : event.createdBy,\r\n \"createdOn\" : event.createdOn,\r\n \"billingType\" : event.billingType[0],\r\n \"availabilityType\": 'Any',\r\n \"color\" : \"blue\",\r\n };\r\n filteredData.push(fa);\r\n }\r\n if (event.availabilityType === 'Existing')\r\n {\r\n // Note this is known as Existing Clients Only - i.e. Existing \r\n let fa = {\r\n \"slot\" : event.id,\r\n \"type\" : 'A',\r\n \"id\" : event.id,\r\n \"psychologistID\" : event.psychologistID,\r\n \"startDate\" : new Date(event.startDate),\r\n \"endDate\" : new Date(event.endDate),\r\n \"title\" : 'Available-Existing',\r\n \"allDay\" : event.allDay,\r\n \"rRule\" : event.rRule, \r\n \"exDate\" : event.exDate,\r\n \"createdBy\" : event.createdBy,\r\n \"createdOn\" : event.createdOn,\r\n \"billingType\" : event.billingType[0],\r\n \"availabilityType\": 'Existing',\r\n \"color\" : \"orange\",\r\n };\r\n filteredData.push(fa);\r\n }\r\n if (event.availabilityType === 'Other')\r\n {\r\n // \r\n let fa = {\r\n \"slot\" : event.id,\r\n \"type\" : 'A',\r\n \"id\" : event.id,\r\n \"psychologistID\" : event.psychologistID,\r\n \"startDate\" : new Date(event.startDate),\r\n \"endDate\" : new Date(event.endDate),\r\n \"title\" : 'Available-Other (Not Available)',\r\n \"allDay\" : event.allDay,\r\n \"rRule\" : event.rRule, \r\n \"exDate\" : event.exDate,\r\n \"createdBy\" : event.createdBy,\r\n \"createdOn\" : event.createdOn,\r\n \"billingType\" : event.billingType[0],\r\n \"availabilityType\": 'Other',\r\n \"color\" : \"purple\",\r\n };\r\n filteredData.push(fa);\r\n }\r\n if (event.availabilityType === 'NDISContractEAP')\r\n {\r\n // \r\n let fa = {\r\n \"slot\" : event.id,\r\n \"type\" : 'A',\r\n \"id\" : event.id,\r\n \"psychologistID\" : event.psychologistID,\r\n \"startDate\" : new Date(event.startDate),\r\n \"endDate\" : new Date(event.endDate),\r\n \"title\" : 'Available - NDIS/Contract/EAP',\r\n \"allDay\" : event.allDay,\r\n \"rRule\" : event.rRule, \r\n \"exDate\" : event.exDate,\r\n \"createdBy\" : event.createdBy,\r\n \"createdOn\" : event.createdOn,\r\n \"billingType\" : event.billingType[0],\r\n \"availabilityType\": 'NDISContractEAP',\r\n \"color\" : \"#F7D6D0\",\r\n };\r\n filteredData.push(fa);\r\n }\r\n if (event.availabilityType === 'Supervision')\r\n {\r\n // \r\n let fa = {\r\n \"slot\" : event.id,\r\n \"type\" : 'A',\r\n \"id\" : event.id,\r\n \"psychologistID\" : event.psychologistID,\r\n \"startDate\" : new Date(event.startDate),\r\n \"endDate\" : new Date(event.endDate),\r\n \"title\" : 'Available-Supervision',\r\n \"allDay\" : event.allDay,\r\n \"rRule\" : event.rRule, \r\n \"exDate\" : event.exDate,\r\n \"createdBy\" : event.createdBy,\r\n \"createdOn\" : event.createdOn,\r\n \"billingType\" : event.billingType[0],\r\n \"availabilityType\": 'Supervision',\r\n \"color\" : \"gray\",\r\n };\r\n filteredData.push(fa);\r\n }\r\n });\r\n\r\n this.props.currentBookings.forEach(event => {\r\n if (event.status !== 'Cancelled')\r\n {\r\n let fa = {\r\n \"slot\" : event.id.toString(),\r\n \"type\" : 'B',\r\n \"id\" : event.id.toString(),\r\n \"psychologistID\" : event.psychologistID,\r\n \"startDate\" : new Date(event.startDate),\r\n \"endDate\" : new Date(event.endDate),\r\n \"title\" : 'Booked - ' + event.clientfullname,\r\n \"allDay\" : event.allDay,\r\n \"rRule\" : event.rRule, \r\n \"exDate\" : event.exDate,\r\n \"createdBy\" : event.createdBy,\r\n \"createdOn\" : event.createdOn,\r\n \"color\" : \"green\",\r\n };\r\n filteredData.push(fa);\r\n }\r\n });\r\n\r\n\r\n\r\n this.state = {\r\n data: filteredData,\r\n currentDate: currentishDate,\r\n\r\n addedAppointment: { \r\n title: \"Available\",\r\n billingType: \"1\",\r\n availabilityType: \"Any\",\r\n allDay: false\r\n },\r\n appointmentChanges: {},\r\n editingAppointment: undefined,\r\n \r\n\r\n \r\n };\r\n\r\n this.currentDateChange = this.currentDateChange.bind(this); //(currentDate) => { this.setState({ currentDate }); };\r\n this.commitChanges = this.commitChanges.bind(this);\r\n this.changeAddedAppointment = this.changeAddedAppointment.bind(this);\r\n this.changeAppointmentChanges = this.changeAppointmentChanges.bind(this);\r\n this.changeEditingAppointment = this.changeEditingAppointment.bind(this);\r\n this.mainID = props.mainID;\r\n this.userTZ = props.userTZ;\r\n this.winbrowserTZ = props.winbrowserTZ;\r\n \r\n }\r\n\r\n \r\n\r\n componentDidMount() {\r\n this.currentDateChange(this.state.currentDate)\r\n this.props.FETCHBOOKINGS({ key: 'psychologist', id: this.props.mainID, userTZ: this.props.userTZ, winbrowserTZ: this.props.winbrowserTZ });\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if ((this.props.currentAvailability !== prevProps.currentAvailability) || (this.props.currentBookings !== prevProps.currentBookings))\r\n {\r\n let filteredData = [];\r\n this.props.currentAvailability.forEach(event => {\r\n if (event.availabilityType === 'Any')\r\n {\r\n // Note this is known as New and Existing Clients - i.e. Any \r\n let fa = {\r\n \"slot\" : event.id,\r\n \"type\" : 'A',\r\n \"id\" : event.id,\r\n \"psychologistID\" : event.psychologistID,\r\n \"startDate\" : new Date(event.startDate),\r\n \"endDate\" : new Date(event.endDate),\r\n \"title\" : 'Available-New Client Bookings',\r\n \"allDay\" : event.allDay,\r\n \"rRule\" : event.rRule, \r\n \"exDate\" : event.exDate,\r\n \"createdBy\" : event.createdBy,\r\n \"createdOn\" : event.createdOn,\r\n \"billingType\" : event.billingType[0],\r\n \"availabilityType\": 'Any',\r\n \"color\" : \"blue\",\r\n };\r\n filteredData.push(fa);\r\n }\r\n if (event.availabilityType === 'Existing')\r\n {\r\n // Note this is known as Existing Clients Only - i.e. Existing \r\n let fa = {\r\n \"slot\" : event.id,\r\n \"type\" : 'A',\r\n \"id\" : event.id,\r\n \"psychologistID\" : event.psychologistID,\r\n \"startDate\" : new Date(event.startDate),\r\n \"endDate\" : new Date(event.endDate),\r\n \"title\" : 'Available-Existing',\r\n \"allDay\" : event.allDay,\r\n \"rRule\" : event.rRule, \r\n \"exDate\" : event.exDate,\r\n \"createdBy\" : event.createdBy,\r\n \"createdOn\" : event.createdOn,\r\n \"billingType\" : event.billingType[0],\r\n \"availabilityType\": 'Existing',\r\n \"color\" : \"orange\",\r\n };\r\n filteredData.push(fa);\r\n }\r\n if (event.availabilityType === 'Other')\r\n {\r\n // \r\n let fa = {\r\n \"slot\" : event.id,\r\n \"type\" : 'A',\r\n \"id\" : event.id,\r\n \"psychologistID\" : event.psychologistID,\r\n \"startDate\" : new Date(event.startDate),\r\n \"endDate\" : new Date(event.endDate),\r\n \"title\" : 'Available-Other (Not Available)',\r\n \"allDay\" : event.allDay,\r\n \"rRule\" : event.rRule, \r\n \"exDate\" : event.exDate,\r\n \"createdBy\" : event.createdBy,\r\n \"createdOn\" : event.createdOn,\r\n \"billingType\" : event.billingType[0],\r\n \"availabilityType\": 'Other',\r\n \"color\" : \"purple\",\r\n };\r\n filteredData.push(fa);\r\n }\r\n if (event.availabilityType === 'NDISContractEAP')\r\n {\r\n // \r\n let fa = {\r\n \"slot\" : event.id,\r\n \"type\" : 'A',\r\n \"id\" : event.id,\r\n \"psychologistID\" : event.psychologistID,\r\n \"startDate\" : new Date(event.startDate),\r\n \"endDate\" : new Date(event.endDate),\r\n \"title\" : 'Available - NDIS/Contract/EAP',\r\n \"allDay\" : event.allDay,\r\n \"rRule\" : event.rRule, \r\n \"exDate\" : event.exDate,\r\n \"createdBy\" : event.createdBy,\r\n \"createdOn\" : event.createdOn,\r\n \"billingType\" : event.billingType[0],\r\n \"availabilityType\": 'NDISContractEAP',\r\n \"color\" : \"#F7D6D0\",\r\n };\r\n filteredData.push(fa);\r\n }\r\n if (event.availabilityType === 'Supervision')\r\n {\r\n // \r\n let fa = {\r\n \"slot\" : event.id,\r\n \"type\" : 'A',\r\n \"id\" : event.id,\r\n \"psychologistID\" : event.psychologistID,\r\n \"startDate\" : new Date(event.startDate),\r\n \"endDate\" : new Date(event.endDate),\r\n \"title\" : 'Available-Supervision',\r\n \"allDay\" : event.allDay,\r\n \"rRule\" : event.rRule, \r\n \"exDate\" : event.exDate,\r\n \"createdBy\" : event.createdBy,\r\n \"createdOn\" : event.createdOn,\r\n \"billingType\" : event.billingType[0],\r\n \"availabilityType\": 'Supervision',\r\n \"color\" : \"gray\",\r\n };\r\n filteredData.push(fa);\r\n }\r\n });\r\n this.props.currentBookings.forEach(event => {\r\n if (event.status !== 'Cancelled')\r\n {\r\n let fa = {\r\n \"slot\" : event.id.toString(),\r\n \"type\" : 'B',\r\n \"id\" : event.id.toString(),\r\n \"psychologistID\" : event.psychologistID,\r\n \"startDate\" : new Date(event.startDate),\r\n \"endDate\" : new Date(event.endDate),\r\n \"title\" : 'Booked - ' + event.clientfullname,\r\n \"allDay\" : event.allDay,\r\n \"rRule\" : event.rRule, \r\n \"exDate\" : event.exDate,\r\n \"createdBy\" : event.createdBy,\r\n \"createdOn\" : event.createdOn,\r\n \"color\" : \"green\",\r\n };\r\n filteredData.push(fa);\r\n }\r\n });\r\n\r\n this.setState({ \r\n data: filteredData\r\n });\r\n // console.log('filteredData');\r\n // console.log(filteredData);\r\n }\r\n }\r\n\r\n currentDateChange(currentDate) {\r\n this.setState({ currentDate }); \r\n };\r\n\r\n changeAddedAppointment(addedAppointment) {\r\n if(!addedAppointment.slot) {\r\n addedAppointment = { \r\n ...addedAppointment,\r\n title: \"Available\",\r\n billingType: \"1\",\r\n };\r\n }\r\n this.setState({ addedAppointment });\r\n }\r\n\r\n changeAppointmentChanges(appointmentChanges) {\r\n this.setState({ appointmentChanges });\r\n }\r\n\r\n changeEditingAppointment(editingAppointment) {\r\n this.setState({ editingAppointment });\r\n }\r\n\r\n commitChanges({ added, changed, deleted }) {\r\n this.setState((state) => {\r\n let { data } = state;\r\n if (added) {\r\n const startingAddedId = data.length > 0 ? data[data.length - 1].id + 1 : 0;\r\n data = [...data, { id: startingAddedId, mainID: this.mainID, userTZ: this.userTZ, ...added }];\r\n added = {...added, mainID : this.mainID, userTZ: this.userTZ }\r\n // Note this causes calendar reload from API to get slotid of new record \r\n this.props.ADDAVAILABILITY(added);\r\n }\r\n if (changed) {\r\n // console.log(changed);\r\n var changeKey = Object.keys(changed);\r\n // console.log(changeKey[0]);\r\n data = data.map(appointment => (\r\n changed[appointment.id] ? { ...appointment, ...changed[appointment.id] } : appointment));\r\n var changedData = data.find(appointment => appointment.id === changeKey[0]);\r\n changedData = {...changedData, mainID : this.mainID, userTZ: this.userTZ}\r\n // Need to handle availability and booking\r\n if (changedData.type === 'A')\r\n {\r\n // Add psychologist ID into packet for API \r\n // console.log('A');\r\n // console.log(changedData);\r\n // Note this changes the current calendar event without API reload\r\n this.props.CHGAVAILABILITY(changedData);\r\n }\r\n else\r\n {\r\n // console.log('B');\r\n // console.log(changedData);\r\n // Add psychologist ID into packet for API \r\n this.props.CHGBOOKING( \r\n { id: 0, \r\n appointment : changedData,\r\n status: 'Updated', \r\n refreshPayload: { key: 'psychologist', id: this.mainID }\r\n });\r\n }\r\n }\r\n if (deleted !== undefined) {\r\n var deleteData = data.find(appointment => appointment.id === deleted.toString());\r\n data = data.filter(appointment => appointment.id !== deleted);\r\n // Add psychologist ID into packet for API \r\n deleteData = {...deleteData, mainID : this.mainID, userTZ: this.userTZ}\r\n // console.log(deleteData);\r\n // Need to handle availability and booking\r\n if (deleteData.type === 'A')\r\n {\r\n // Note this deletes the current calendar event without API reload \r\n this.props.DELAVAILABILITY(deleteData);\r\n }\r\n else\r\n {\r\n if (deleteData.type === 'B')\r\n {\r\n this.props.CANCELBOOKING( \r\n { id: deleteData.id, \r\n status: 'Cancelled', \r\n refreshPayload: { key: 'psychologist', id: this.mainID }\r\n }\r\n );\r\n }\r\n }\r\n }\r\n return { data };\r\n });\r\n }\r\n\r\n \r\n\r\n render() {\r\n const {\r\n currentDate, data, resources, addedAppointment, appointmentChanges, editingAppointment,\r\n } = this.state;\r\n\r\n const AppointmentContent = (props) => {\r\n // const { data, style } = props;\r\n return (\r\n <Appointments.AppointmentContent\r\n {...props}\r\n />\r\n );\r\n };\r\n\r\n\r\n const Appointment = ({ children, style, data, ...restProps }) => (\r\n <Appointments.Appointment\r\n {...restProps}\r\n data={data}\r\n readOnly={true}\r\n style={{\r\n ...style,\r\n backgroundColor: data.color\r\n }}\r\n >\r\n {children}\r\n </Appointments.Appointment>\r\n );\r\n \r\n \r\n // const { classes } = this.props;\r\n // console.log(data);\r\n return (\r\n <>\r\n <Paper>\r\n <div className=\"availability-info\">\r\n <InfoOutlinedIcon className=\"availability-info-icon\" /> \r\n Double click on a time slot to create an entry for availability. \r\n <strong> All Times in {this.winbrowserTZ}</strong>\r\n </div>\r\n \r\n {/* <div>{data.length}</div> */}\r\n <Scheduler data={data} firstDayOfWeek={1}>\r\n <ViewState \r\n currentDate={currentDate} \r\n onCurrentDateChange={this.currentDateChange}\r\n />\r\n <EditingState\r\n onCommitChanges={this.commitChanges}\r\n\r\n addedAppointment={addedAppointment}\r\n onAddedAppointmentChange={this.changeAddedAppointment}\r\n\r\n appointmentChanges={appointmentChanges}\r\n onAppointmentChangesChange={this.changeAppointmentChanges}\r\n\r\n editingAppointment={editingAppointment}\r\n onEditingAppointmentChange={this.changeEditingAppointment}\r\n\r\n />\r\n <WeekView \r\n startDayHour={5}\r\n endDayHour={23}\r\n cellDuration={60}\r\n />\r\n\r\n <Toolbar />\r\n <DateNavigator />\r\n <TodayButton />\r\n <AllDayPanel /> \r\n\r\n {/* <IntegratedEditing /> */}\r\n <EditRecurrenceMenu />\r\n <ConfirmationDialog />\r\n <Appointments \r\n appointmentComponent={Appointment} \r\n appointmentContentComponent={AppointmentContent}\r\n />\r\n <AppointmentTooltip\r\n showOpenButton\r\n showCloseButton\r\n showDeleteButton\r\n />\r\n <AppointmentForm \r\n resourceEditorComponent={ResourceEditor} \r\n labelComponent={LabelComponent}\r\n textEditorComponent={TextEditor}\r\n basicLayoutComponent={BasicLayout}\r\n />\r\n <Resources data={resources} mainResourceName=\"billingType\" />\r\n </Scheduler>\r\n </Paper>\r\n </>\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n currentAvailability: state.admin.Availability,\r\n currentBookings: state.admin.Bookings,\r\n userTZ: state.auth.userTZ,\r\n winbrowserTZ: state.auth.winbrowserTZ\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n ADDAVAILABILITY: added => dispatch({ type: Admin.actionTypes.ADD_AVAILABILITY, payload: added }),\r\n CHGAVAILABILITY: changed => dispatch({ type: Admin.actionTypes.CHG_AVAILABILITY, payload: changed }),\r\n DELAVAILABILITY: deleted => dispatch({ type: Admin.actionTypes.DEL_AVAILABILITY, payload: deleted }),\r\n CHGBOOKING: (payload) => dispatch({ type: Admin.actionTypes.PUT_BOOKING, payload: payload}),\r\n CANCELBOOKING: (payload) => dispatch({ type: Admin.actionTypes.PUT_BOOKING, payload: payload}),\r\n FETCHBOOKINGS: (payload) => dispatch({ type: Admin.actionTypes.FETCH_BOOKINGS, payload: {...payload} }),\r\n // FETCHAVAILABILITY: psyID => dispatch({ type: Admin.actionTypes.FETCH_AVAILABILITY, payload: { psychologistid: psyID, userTZ: this.userTZ } }),\r\n };\r\n };\r\n \r\n export default connect(mapStateToProps,mapDispatchToProps)(Availability);","import React, { useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport Availability from \"../../../components/Availability\";\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport * as Reference from \"../../../store/ducks/reference.duck\";\r\n\r\nexport default function AvailabilityPsychologist() {\r\n\r\n const dispatch = useDispatch()\r\n \r\n useEffect( () => { dispatch(Reference.actions.fetchFundingTypes()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchRegistered()) }, [dispatch] )\r\n \r\n const referenceFundingTypes = useSelector(state => state.reference.FundingTypes)\r\n const registered = useSelector(state => state.admin.RegisteredPsychologists[0]);\r\n const ftypes = referenceFundingTypes.filter(( {id} ) => registered && registered.fundingTypes.includes(id))\r\n const userTZ = useSelector(state => state.auth.userTZ)\r\n \r\n useEffect( () => {\r\n if (registered) \r\n {\r\n dispatch(Admin.actions.fetchAvailability({ psychologistid: registered.id, userTZ: userTZ }))\r\n }\r\n }, [dispatch, registered, userTZ]);\r\n \r\n\r\n // const [fetched, setFetched] = useState(false);\r\n\r\n // function getAvailability() {\r\n // if(!fetched && registered) {\r\n // dispatch(Admin.actions.fetchAvailability({ psychologistid: registered.id, userTZ: userTZ }));\r\n // setFetched(true)\r\n // }\r\n // }\r\n\r\n if(registered && ftypes && referenceFundingTypes) {\r\n return (\r\n <>\r\n <h4>Availability</h4>\r\n <Availability\r\n mainID={registered.id}\r\n currentFundingTypes={ftypes}\r\n userTZ={userTZ}\r\n /> \r\n </>\r\n )\r\n }\r\n else\r\n {\r\n return <div>Loading...</div>\r\n }\r\n\r\n}\r\n","import React, { useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\n// import Bookings from \"../../../components/Bookings\";\r\nimport BookingsList from \"../../../components/BookingsList\";\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { Grid } from '@material-ui/core';\r\n\r\nexport default function BookingsPsychologist() {\r\n\r\n const dispatch = useDispatch()\r\n const registered = useSelector(state => state.admin.RegisteredPsychologists[0]);\r\n const userTZ = useSelector(state => state.auth.userTZ)\r\n\r\n useEffect( () => { dispatch(Admin.actions.fetchRegistered()) }, [dispatch] )\r\n\r\n // const [mode, setMode] = useState('list');\r\n\r\n if(registered) {\r\n return (\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h4 style={{ marginBottom: 12 }}>Bookings</h4></Grid>\r\n {/* <Grid item> <a onClick={() => setMode('list')} style={{ fontWeight: (mode === 'list') ? 600 : 300 }}>List</a> | <a onClick={() =>setMode('calendar')}style={{ fontWeight: (mode === 'calendar') ? 600 : 300 }}>Calendar</a> </Grid> */}\r\n </Grid>\r\n <BookingsList\r\n type='psychologist'\r\n view='psychologist'\r\n id={registered && registered.id}\r\n medipassapikey={registered && registered.medipassapikey}\r\n userTZ={userTZ}\r\n providerType={registered.providertype}\r\n />\r\n </>\r\n )\r\n } \r\n else \r\n {\r\n return <div>...loading</div>\r\n }\r\n\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { DropDownList } from '@progress/kendo-react-dropdowns';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport { Grid, GridColumn, GridToolbar } from '@progress/kendo-react-grid';\r\nimport { Button } from \"react-bootstrap\";\r\nimport { TextField } from '@material-ui/core';\r\nimport * as Admin from \"../store/ducks/admin.duck\";\r\nimport '../../_metronic/_assets/css/app2.css';\r\nexport default function InvoiceDetail(props) {\r\n\r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Admin.actions.fetchMedipassCodes()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchMedipassClients()) }, [dispatch] )\r\n\r\n const medipassCodes = useSelector(state => state.admin.MedipassCodes)\r\n const medipassBookingDates = useSelector(state => state.admin.MedipassBookingDates)\r\n const providerClients = useSelector(state => state.admin.MedipassProviderClients)\r\n const editField = \"inEdit\";\r\n const [clientSelect, setClientSelect] = useState(props.clientSelect);\r\n // const [defaultClient, setDefaultClient] = useState();\r\n const [invoiceItems, setInvoiceItems] = useState(props.invoiceitems);\r\n const [lineNumber, setLineNumber] = useState(props.lineno);\r\n const [newEntry, setNewEntry] = useState(true);\r\n const [submitError,setSubmitError] = useState('');\r\n const editable = props.invoiceeditable;\r\n \r\n // Handle Client Autocmplete selection \r\n const onChangeProviderClients = (newValue) => {\r\n // console.log(newValue)\r\n // Find descriptor \r\n // const client = clientNames.find(p => p.text === event.value);\r\n // Check if something was found - as it is an autocomplete this fires relentlessly \r\n if (newValue)\r\n {\r\n props.setClientID(newValue.id);\r\n dispatch(Admin.actions.fetchMedipassBookingDates(newValue.id));\r\n }\r\n };\r\n\r\n // Handle loading of invoice items from API \r\n //\r\n if (!clientSelect && invoiceItems.length > 0) \r\n {\r\n // Prevent altering the client name if there are invoice items \r\n setClientSelect(true);\r\n }\r\n\r\n // Populate drop down of clients \r\n const [clientNames, setClientNames] = useState(); \r\n const [prevProviderClients, setPrevProviderClients] = useState();\r\n const [currentProviderClients, setCurrentProviderClients] = useState(); \r\n useEffect( () => {\r\n if ((JSON.stringify(providerClients) !== JSON.stringify(prevProviderClients)) && providerClients.length > 0)\r\n {\r\n setPrevProviderClients(providerClients)\r\n setCurrentProviderClients(providerClients)\r\n //\r\n let clientNames = []; \r\n for (var i = 0, l = providerClients.length; i < l; i++) {\r\n // Add to array\r\n clientNames.push(\r\n {\r\n text : providerClients[i].clientName + ' (' + providerClients[i].suburb + ')',\r\n id : providerClients[i].id\r\n } \r\n );\r\n // Check if pre-existing invoice client name is in the client names list as the clientnames API call only includes those with uninvoiced bookings thus an existing invoice may have a client without any bookings uninvoiced \r\n // Confusing isn't it\r\n if (props.clientID !== 0)\r\n {\r\n const specificName = clientNames.find(p => p.id === props.clientID);\r\n // console.log(specificName);\r\n if (!specificName)\r\n {\r\n\r\n // Cannot find it - thus add it \r\n clientNames.push(\r\n {\r\n text : props.clientName + ' (' + props.clientSuburb + ')',\r\n id : props.clientID\r\n } \r\n );\r\n }\r\n }\r\n }\r\n setClientNames(clientNames);\r\n }\r\n }, [prevProviderClients, currentProviderClients, providerClients, clientNames, clientSelect, props])\r\n\r\n // Populate drop down of Tyro Codes\r\n const [codes, setCodes] = useState(); \r\n const [prevCodes, setPrevCodes] = useState();\r\n const [currentCodes, setCurrentCodes] = useState(); \r\n useEffect( () => {\r\n if ((JSON.stringify(medipassCodes) !== JSON.stringify(prevCodes)) && medipassCodes.length > 0)\r\n {\r\n // console.log('Loading Codes');\r\n setPrevCodes(medipassCodes)\r\n setCurrentCodes(medipassCodes)\r\n let newCodes = []; \r\n // Define the defaults \r\n newCodes.push(\r\n {\r\n text : '',\r\n value : 'Unselected'\r\n } \r\n );\r\n for (var i = 0, l = medipassCodes.length; i < l; i++) {\r\n newCodes.push(\r\n {\r\n text : medipassCodes[i].code,\r\n value : medipassCodes[i].code\r\n } \r\n );\r\n }\r\n setCodes(newCodes);\r\n }\r\n }, [prevCodes, currentCodes, medipassCodes, codes])\r\n \r\n // Populate drop down of Tyro Booking Dates\r\n const [bookingDates, setBookingDates] = useState(); \r\n\r\n \r\n useEffect( () => {\r\n if (bookingDates)\r\n {\r\n // Check if unselected default has been added to bookingDates \r\n const specificDate= bookingDates.find(p => p.value === 'Unselected');\r\n let bookingTotal = 0;\r\n if (specificDate)\r\n {\r\n bookingTotal = bookingDates.length - 1; \r\n }\r\n else\r\n {\r\n bookingTotal = bookingDates.length; \r\n }\r\n if (invoiceItems.length === (bookingTotal))\r\n {\r\n // If bookingDates = Invoiceitems then no more\r\n setNewEntry(false);\r\n }\r\n else\r\n {\r\n setNewEntry(true);\r\n }\r\n }\r\n }, [newEntry,invoiceItems,bookingDates])\r\n\r\n\r\n const [prevBookingDates, setPrevBookingDates] = useState();\r\n const [currentBookingDates, setCurrentBookingDates] = useState(); \r\n useEffect( () => {\r\n if ((JSON.stringify(medipassBookingDates) !== JSON.stringify(prevBookingDates)) && medipassBookingDates.length > 0)\r\n {\r\n setPrevBookingDates(medipassBookingDates);\r\n setCurrentBookingDates(medipassBookingDates);\r\n // console.log('Adding API Booking Dates');\r\n let newBookingDates = []; \r\n // Define the defaults \r\n newBookingDates.push(\r\n {\r\n text : '',\r\n value : 'Unselected'\r\n } \r\n );\r\n for (var i = 0, l = medipassBookingDates.length; i < l; i++) {\r\n newBookingDates.push(\r\n {\r\n text : medipassBookingDates[i].bookingdate,\r\n value : medipassBookingDates[i].bookingdate,\r\n id : medipassBookingDates[i].id\r\n } \r\n );\r\n }\r\n // So we have a problem when loading a previously saved invoice that has invoice items that will not have been retrieved by the API call as they are already marked as invoiced \r\n // So lets try just adding them to the dropdown \r\n for (var i2 = 0, l2 = invoiceItems.length; i2 < l2; i2++) {\r\n newBookingDates.push(\r\n {\r\n text : invoiceItems[i2].booking,\r\n value : invoiceItems[i2].booking,\r\n id : invoiceItems[i2].bookingid\r\n } \r\n );\r\n }\r\n setBookingDates(newBookingDates);\r\n }\r\n }, [prevBookingDates, currentBookingDates, medipassBookingDates, bookingDates,invoiceItems])\r\n\r\n // Need to handle the situation where there are no uninvoiced bookings for a client hence the API call returns zero however I need to load the already invoiced ones - confusing isn't it\r\n useEffect( () => {\r\n if ((medipassBookingDates && medipassBookingDates.length === 0) && (invoiceItems && invoiceItems.length > 0) && !bookingDates)\r\n {\r\n // console.log('Adding Existing Booking Dates');\r\n let newBookingDates = []; \r\n // So we have a problem when loading a previously saved invoice that has invoice items that will not have been retrieved by the API call as they are already marked as invoiced \r\n // So lets try just adding them to the dropdown \r\n for (var i = 0, l = invoiceItems.length; i < l; i++) {\r\n newBookingDates.push(\r\n {\r\n text : invoiceItems[i].booking,\r\n value : invoiceItems[i].booking,\r\n id : invoiceItems[i].bookingid\r\n } \r\n );\r\n }\r\n setBookingDates(newBookingDates);\r\n // As this useeffect is running all there cannot be any uninvoiced bookings for this client thus prevent adding a new one \r\n // setNewEntry(false);\r\n }\r\n }, [medipassBookingDates, bookingDates,invoiceItems])\r\n\r\n // Time for more useeffect - need to load bookingdates if client is set \r\n const [prevClientID, setPrevClientID] = useState();\r\n useEffect( () => {\r\n if (props.clientID !== prevClientID && clientSelect)\r\n {\r\n // console.log('Attempting to load booking dates for existing client')\r\n // Load booking dates \r\n setPrevClientID(props.clientID);\r\n // Load booking dates \r\n dispatch(Admin.actions.fetchMedipassBookingDates(props.clientID));\r\n }\r\n }, [invoiceItems, medipassBookingDates, clientSelect, props.clientID, prevClientID, dispatch])\r\n\r\n\r\n // Handle Booking Dropdown \r\n const BookingDropDownCell = props => {\r\n // \r\n // console.log(bookingDates);\r\n const handleChangeBooking = e => {\r\n if (props.onChange) {\r\n props.onChange({\r\n dataIndex: 0,\r\n dataItem: props.dataItem,\r\n field: props.field,\r\n syntheticEvent: e.syntheticEvent,\r\n value: e.target.value.value,\r\n });\r\n }\r\n };\r\n //\r\n const {dataItem} = props;\r\n const field = props.field || '';\r\n const dataValue = dataItem[field] === null ? '' : dataItem[field];\r\n return <td>\r\n {dataItem.inEdit ? <DropDownList style={{\r\n width: \"185px\"\r\n }} onChange={handleChangeBooking} value={bookingDates.find(c => c.value === dataValue)} data={bookingDates} textField=\"text\" /> : dataValue.toString()}\r\n </td>;\r\n };\r\n\r\n\r\n // Handle Tyro Code Dropdown \r\n const MedipassCodeDropDownCell = props => {\r\n // \r\n const handleChangeMedipassCode = e => {\r\n if (props.onChange) {\r\n props.onChange({\r\n dataIndex: 0,\r\n dataItem: props.dataItem,\r\n field: props.field,\r\n syntheticEvent: e.syntheticEvent,\r\n value: e.target.value.value,\r\n });\r\n }\r\n };\r\n //\r\n const {dataItem} = props;\r\n const field = props.field || '';\r\n const dataValue = dataItem[field] === null ? '' : dataItem[field];\r\n return <td>\r\n {dataItem.inEdit ? <DropDownList style={{\r\n width: \"85px\"\r\n }} onChange={handleChangeMedipassCode} value={codes.find(c => c.value === dataValue)} data={codes} textField=\"text\" /> : dataValue.toString()}\r\n </td>;\r\n };\r\n\r\n // Handle row buttons \r\n const MyCommandCell = props => {\r\n //\r\n const {dataItem} = props;\r\n const inEdit = dataItem[props.editField];\r\n const isNewItem = dataItem.lineno === undefined;\r\n return inEdit ? <td className=\"k-command-cell\">\r\n <button className=\"k-button k-grid-save-command\" onClick={() => isNewItem ? props.add(dataItem) : props.update(dataItem)}>\r\n {isNewItem ? \"Add\" : \"Update\"}\r\n </button>\r\n </td> : <td className=\"k-command-cell\">\r\n <button className=\"k-primary k-button k-grid-edit-command\" onClick={() => props.edit(dataItem)}>\r\n Edit\r\n </button>\r\n <button className=\"k-button k-grid-remove-command\" onClick={() => window.confirm(\"Confirm deleting Line : \" + dataItem.lineno) && props.remove(dataItem)}>\r\n Remove\r\n </button>\r\n </td>;\r\n };\r\n\r\n const remove = dataItem => {\r\n let index = invoiceItems.findIndex(record => record.lineno === dataItem.lineno);\r\n // State is nonsense - shallow copy ? If I wanted I shallow copy I will tell you \r\n let newData = [...invoiceItems];\r\n newData.splice(index, 1);\r\n // Need special handling if the grid will be empty when this is deleted otherwise it is error city\r\n if (invoiceItems.length === 0)\r\n {\r\n setInvoiceItems([]);\r\n setLineNumber(0); \r\n }\r\n else\r\n {\r\n setInvoiceItems(newData);\r\n }\r\n };\r\n\r\n const generateID = invoiceItems => invoiceItems.reduce((acc, current) => Math.max(acc, current.lineno), 0) + 1;\r\n\r\n const add = dataItem => {\r\n dataItem.inEdit = true; \r\n dataItem.lineno = generateID(invoiceItems);\r\n dataItem.inEdit = false;\r\n let newData = invoiceItems;\r\n newData.unshift(dataItem);\r\n setInvoiceItems(newData);\r\n };\r\n\r\n const update = dataItem => {\r\n if(dataItem.booking !== 'Unselected' && dataItem.code !== 'Unselected'){\r\n setInvoiceItems(invoiceItems.map(item => item.lineno === dataItem.lineno ? { ...item,\r\n inEdit: false\r\n } : item));\r\n }\r\n // Need to remove the booking date that was inserted - reported to Telerik\r\n // let bookingIndex = bookingDates.findIndex(record => record.value === dataItem.booking);\r\n // if (bookingIndex != 0)\r\n // { \r\n // let newBookingData = bookingDates\r\n // newBookingData.splice(bookingIndex, 1);\r\n // setBookingDates([newBookingData]);\r\n // }\r\n };\r\n\r\n const discard = dataItem => {\r\n const newData = [...invoiceItems];\r\n newData.splice(0, 1);\r\n setInvoiceItems(newData);\r\n };\r\n\r\n const cancel = dataItem => {\r\n const originalItem = invoiceItems.find(p => p.lineno === dataItem.lineno);\r\n const newData = invoiceItems.map(item => item.lineno === originalItem.lineno ? originalItem : item);\r\n setInvoiceItems(newData);\r\n };\r\n\r\n const enterEdit = dataItem => {\r\n setInvoiceItems(invoiceItems.map(item => item.lineno === dataItem.lineno ? { ...item,\r\n inEdit: true\r\n } : item));\r\n };\r\n\r\n const itemChange = event => {\r\n let newData = invoiceItems;\r\n if (event.field === 'code')\r\n {\r\n if(event.value !== 'Unselected'){\r\n // If the code is being changed then update the description and cost too. \r\n const specificCode = medipassCodes.find(p => p.code === event.value);\r\n // Need to limit the description to first 100 characters as they appear to be very, very long \r\n const description = specificCode.description.substring(0,100) + '...';\r\n const cost = specificCode.cost;\r\n newData = invoiceItems.map(item => item.lineno === event.dataItem.lineno ? { ...item,\r\n 'code' : event.value,\r\n 'description' : description,\r\n 'cost' : cost,\r\n } : item);\r\n }\r\n }\r\n else\r\n {\r\n if (event.field === 'booking')\r\n {\r\n // if the booking is being set need to do a few things \r\n // firstly get the item from the list \r\n const booking = bookingDates.find(p => p.value === event.value);\r\n //\r\n newData = invoiceItems.map(item => item.lineno === event.dataItem.lineno ? { ...item,\r\n 'booking' : event.value,\r\n 'bookingid' : booking.id,\r\n } : item);\r\n }\r\n else\r\n {\r\n // Otherwise - build a bridge and get over it \r\n newData = invoiceItems.map(item => item.lineno === event.dataItem.lineno ? { ...item,\r\n [event.field || '']: event.value,\r\n } : item);\r\n }\r\n }\r\n // Update the main table \r\n setInvoiceItems(newData);\r\n };\r\n\r\n const addNew = () => {\r\n setLineNumber(lineNumber + 1);\r\n let lineN = lineNumber + 1;\r\n // Default new line item \r\n const newDataItem = {\r\n inEdit: true,\r\n status: 'UnSaved',\r\n lineno: lineN,\r\n booking: 'Unselected',\r\n code: 'Unselected',\r\n description: 'Unselected',\r\n cost: '0.00'\r\n };\r\n setInvoiceItems([...invoiceItems,newDataItem]);\r\n };\r\n\r\n const saveInvoice = (event) => {\r\n // console.log('Save Invoice');\r\n // Need to check if invoice items are fully completed - especially the code and the booking (yes one of the psychologists cannot remember to select the booking - repeatedly)\r\n // console.log(invoiceItems);\r\n const codeProblem = invoiceItems.find(i => i.code === 'Unselected');\r\n const bookingProblem = invoiceItems.find(i => i.booking === 'Unselected');\r\n if (!(codeProblem) && !(bookingProblem))\r\n {\r\n dispatch(Admin.actions.putMedipassInvoice({id: props.invoiceID, clientid: props.clientID, items: invoiceItems}));\r\n props.setClientID(0)\r\n setInvoiceItems([]);\r\n props.closeModal();\r\n }\r\n else\r\n {\r\n if (codeProblem)\r\n {\r\n setSubmitError('Invalid Medicare Code - Check rows below');\r\n }\r\n if (bookingProblem)\r\n {\r\n setSubmitError('Invalid Booking Selection - Check rows below');\r\n }\r\n }\r\n };\r\n \r\n const cancelModal = (event) => {\r\n props.setClientID(0)\r\n setInvoiceItems([]);\r\n props.closeModal();\r\n }\r\n // Define Row Level Actions \r\n const CommandCell = props => <MyCommandCell {...props} edit={enterEdit} remove={remove} add={add} discard={discard} update={update} cancel={cancel} editField={editField} />;\r\n\r\n\r\n return(\r\n <div className=\"row example-wrapper\">\r\n <div className=\"col-xs-12 col-sm-12 offset-sm-12 example-col\">\r\n <div className=\"card\">\r\n <div className=\"card-block\" style={{ padding: 10 }}>\r\n <div className=\"mb-3\" style={{ width: 440 }}>\r\n {/* <span>To begin, select a client. Start typing to search.</span> */}\r\n {!clientSelect ?\r\n <>\r\n <span style={{ fontWeight: 600 }}>To begin, select a client:</span>\r\n <Autocomplete\r\n id=\"clientName\"\r\n variant=\"outlined\"\r\n disableClearable={true}\r\n options={clientNames ? clientNames : []}\r\n getOptionLabel={(option) => option.text }\r\n value={clientNames && clientNames.find(cn => cn.id === props.clientID) ? clientNames.find(cn => cn.id === props.clientID) : null}\r\n onChange={(event, newValue) => onChangeProviderClients(newValue)}\r\n style={{ display: 'flex', wrap: 'nowrap', backgroundColor: \"white\", marginTop: 10, marginBottom: 30 }}\r\n disabled={clientSelect}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n label=\"Start typing to search...\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"clientNameSelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </>\r\n : \r\n <>\r\n <h5><span style={{ fontWeight: 200 }}>Client: </span> {clientNames && clientNames.find(cn => cn.id === props.clientID) && clientNames.find(cn => cn.id === props.clientID).text}</h5>\r\n </>\r\n }\r\n </div>\r\n {props.clientID ? \r\n <div style={{ marginTop: 10 }}>\r\n <h5>Service Items:</h5>\r\n <Grid\r\n style={{height: \"700px\",}}\r\n data={invoiceItems}\r\n onItemChange={itemChange} \r\n dataItemKey={'lineno'}\r\n editField={editField} \r\n >\r\n <GridToolbar>\r\n {editable ?\r\n <>\r\n {newEntry ?\r\n <Button variant=\"primary\" size=\"sm\" onClick={addNew}>\r\n Add New\r\n </Button>\r\n :\r\n null\r\n }\r\n <Button variant=\"success\" size=\"sm\" onClick={saveInvoice}>\r\n Save\r\n </Button>\r\n </>\r\n :\r\n null\r\n }\r\n <Button variant=\"secondary\" size=\"sm\" onClick={cancelModal}>\r\n Cancel\r\n </Button>\r\n <span style={{color:'red', fontSize: 14, fontWeight: 600}}> {submitError}</span>\r\n </GridToolbar>\r\n <GridColumn field=\"lineno\" title=\"#\" width=\"50px\" editable={false} /> \r\n <GridColumn field=\"booking\" title=\"Consultation\" cell={BookingDropDownCell} width=\"210px\" /> \r\n <GridColumn field=\"code\" title=\"Code\" cell={MedipassCodeDropDownCell} width=\"110px\"/> \r\n <GridColumn field=\"description\" title=\"Description\" width=\"400px\" editable={false}/>\r\n <GridColumn field=\"cost\" title=\"Cost\" width=\"100px\" className=\"kendo-grid-col-right\" /> \r\n <GridColumn field=\"payment\" title=\"Payment\" width=\"100px\" editable={false} className=\"kendo-grid-col-right\" /> \r\n <GridColumn field=\"status\" title=\"Status\" width=\"100px\" editable={false}/>\r\n {editable ?\r\n <GridColumn title=\"Actions\" cell={CommandCell} width=\"140px\" />\r\n :\r\n null\r\n }\r\n </Grid>\r\n </div>\r\n : null}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n \r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\n// import { DropDownList } from '@progress/kendo-react-dropdowns';\r\nimport { Grid, GridColumn, GridToolbar } from '@progress/kendo-react-grid';\r\nimport { Button } from \"react-bootstrap\";\r\nimport { Grid as MUIGrid } from '@material-ui/core';\r\nimport { process } from '@progress/kendo-data-query';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { Modal } from \"react-bootstrap\";\r\nimport { ToastContainer, Flip, toast } from \"react-toastify\";\r\nimport InvoiceDetail from '../../../components/InvoiceDetail';\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\nimport '../../../../_metronic/_assets/css/app.css';\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\nimport medipassSDK from '@medipass/partner-sdk';\r\nimport medipassTransactionSDK from '@medipass/partner-sdk';\r\nimport { formatDate } from '@telerik/kendo-intl';\r\n\r\nexport default function InvoicesPsychologist() {\r\n\r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Admin.actions.fetchPaymentAPI()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchMedipassInvoices()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchRegistered()) }, [dispatch] )\r\n \r\n const registered = useSelector(state => state.admin.RegisteredPsychologists[0]);\r\n const paymentAPI = useSelector(state => state.admin.PaymentAPI)\r\n const medipassInvoices = useSelector(state => state.admin.MedipassInvoices)\r\n\r\n const [dataState, setDataState] = useState({\r\n skip: 0,\r\n take: 20,\r\n sort: [{\r\n field: 'invoicedate',\r\n dir: 'desc'\r\n }],\r\n });\r\n\r\n const [dataResult, setDataResult] = useState(process(medipassInvoices, dataState)); \r\n const [prevMedipassInvoices, setPrevMedipassInvoices] = useState();\r\n const [currentMedipassInvoices, setCurrentMedipassInvoices] = useState(); \r\n \r\n\r\n var [show, setShow] = useState(false);\r\n var [currentInvoiceID, setCurrentInvoiceID] = useState();\r\n var [currentClientID, setCurrentClientID] = useState();\r\n var [currentClientName, setCurrentClientName] = useState(); \r\n var [currentClientSuburb, setCurrentClientSuburb] = useState();\r\n var [currentClientSelect, setCurrentClientSelect] = useState(false);\r\n var [currentInvoiceItems, setCurrentInvoiceItems] = useState();\r\n var [currentInvoiceEditable, setCurrentInvoiceEditable] = useState(true);\r\n var [currentLineNo,setCurrentLineNo] = useState(0)\r\n\r\n useEffect( () => {\r\n if ((JSON.stringify(medipassInvoices) !== JSON.stringify(prevMedipassInvoices)) && medipassInvoices.length > 0)\r\n {\r\n setPrevMedipassInvoices(medipassInvoices)\r\n setCurrentMedipassInvoices(medipassInvoices)\r\n setDataResult(process(medipassInvoices, dataState))\r\n }\r\n }, [prevMedipassInvoices, currentMedipassInvoices, medipassInvoices, dataResult, dataState])\r\n\r\n \r\n function addNew() \r\n {\r\n setCurrentInvoiceID(0);\r\n setCurrentClientID(0);\r\n setCurrentClientSelect(false);\r\n setCurrentInvoiceItems([]);\r\n setCurrentInvoiceEditable(true);\r\n setShow(true);\r\n }\r\n \r\n function handleClose() {\r\n setShow(false);\r\n } \r\n\r\n const dataStateChange = event => {\r\n setDataResult(process(medipassInvoices, event.dataState));\r\n setDataState(event.dataState);\r\n };\r\n\r\n const DateFormatter = dataItem => {\r\n const value = dataItem.dataItem[dataItem.field];\r\n return(\r\n <td>\r\n {formatDate(new Date(value),'dd-MM-yyyy')}\r\n </td>\r\n )\r\n }\r\n\r\n const medipassSubmit = dataItem => {\r\n //\r\n // console.log('In Tyro Submit');\r\n // console.log(paymentAPI);\r\n // process.env.REACT_APP_DEBUG && \r\n // console.log(dataItem);\r\n // Need to sort out the ReferredOn date \r\n var tempReferredOn = \"\";\r\n if (dataItem.referral_issueDateString)\r\n {\r\n tempReferredOn = dataItem.referral_issueDateString;\r\n tempReferredOn = tempReferredOn.split(' ')[0];\r\n // console.log(tempReferredOn);\r\n }\r\n // Build JSON array of claimable items \r\n let claimItems = [];\r\n for (var i = 0, l = dataItem.invoiceitems.length; i < l; i++) {\r\n // Add to array\r\n claimItems.push(\r\n {\r\n itemCode: dataItem.invoiceitems[i].code,\r\n reference: dataItem.invoiceitems[i].id.toString(),\r\n serviceDateString: dataItem.invoiceitems[i].servicedate,\r\n price: '$' + dataItem.invoiceitems[i].cost,\r\n isGross: true,\r\n quantity: 1,\r\n isTaxable: false,\r\n } \r\n );\r\n }\r\n // console.log(claimItems);\r\n // Setup connection \r\n // Note the env variable below should be set to \r\n // env : 'stg', for Tyro staging \r\n // env : 'prod', for Tyro prod \r\n // Check if using test psychologist \r\n if (registered && registered.id === 14)\r\n {\r\n\r\n // Ok using test psychologist - thus envionrment is staging \r\n medipassSDK.setConfig({\r\n env: 'stg',\r\n apiKey: paymentAPI.secureapi,\r\n appId: 'ruralhealthconnect-web',\r\n appVersion: '2021Oct'\r\n });\r\n }\r\n else\r\n {\r\n medipassSDK.setConfig({\r\n env: 'prod',\r\n apiKey: paymentAPI.secureapi,\r\n appId: 'ruralhealthconnect-web',\r\n appVersion: '2021Oct'\r\n });\r\n }\r\n // Call Funder Modal \r\n // Welcome to the world of not great solutions - need to stop sending referral information if blank\r\n if (dataItem.referral_providerNumber)\r\n {\r\n medipassSDK.renderCreateTransaction({}, {\r\n funder: \"medicare\",\r\n providerNumber: paymentAPI.providernumber,\r\n invoiceReference: 'RHC' + dataItem.id,\r\n\r\n patient: {\r\n refId: dataItem.clientid.toString(),\r\n firstName: dataItem.clientfirstname.trim(),\r\n lastName: dataItem.clientsurname.trim(),\r\n mobile: dataItem.clientmobilephone,\r\n dob: dataItem.clientdob,\r\n accountNumber: dataItem.clientmedicareno,\r\n reference: dataItem.clientmedicarereferenceno,\r\n sex: dataItem.clientgender\r\n },\r\n\r\n claimableItems: claimItems,\r\n\r\n funderData: {\r\n medicare: {\r\n referral: {\r\n providerNumber: dataItem.referral_providerNumber,\r\n providerName: dataItem.referral_providerName,\r\n referrerType: dataItem.referral_referrerType,\r\n issueDateString: tempReferredOn,\r\n period: dataItem.referral_period,\r\n periodDescription: dataItem.referral_periodDescription\r\n },\r\n }\r\n },\r\n \r\n webhooks: [\r\n {\r\n url: 'https://apicloud.ruralhealthconnect.com.au/medipass/creation',\r\n event: 'invoiceCreated' ,\r\n method: 'POST',\r\n },\r\n {\r\n url: 'https://apicloud.ruralhealthconnect.com.au/medipass/balpaid',\r\n event: 'invoiceBalancePaid',\r\n method: 'POST',\r\n },\r\n {\r\n url: 'https://apicloud.ruralhealthconnect.com.au/medipass/cancelled',\r\n event: 'invoiceCancelled',\r\n method: 'POST',\r\n },\r\n {\r\n url: 'https://apicloud.ruralhealthconnect.com.au/medipass/completed',\r\n event: 'invoiceCompleted',\r\n method: 'POST',\r\n },\r\n {\r\n url: 'https://apicloud.ruralhealthconnect.com.au/medipass/approved',\r\n event: 'healthFundApprovedInvoice',\r\n method: 'POST',\r\n },\r\n {\r\n url: 'https://apicloud.ruralhealthconnect.com.au/medipass/rejected',\r\n event: 'healthFundRejectedInvoice',\r\n method: 'POST',\r\n },\r\n ],\r\n\r\n disableModifyServiceItems: true,\r\n\r\n // Production webhooks \r\n\r\n // url: 'https://apicloud.ruralhealthconnect.com.au/medipass/creation',\r\n // url: 'https://apicloud.ruralhealthconnect.com.au/medipass/cancelled',\r\n // url: 'https://apicloud.ruralhealthconnect.com.au/medipass/completed',\r\n // url: 'https://apicloud.ruralhealthconnect.com.au/medipass/approved',\r\n // url: 'https://apicloud.ruralhealthconnect.com.au/medipass/rejected',\r\n\r\n // Test Webhooks via Logic App to capture the packet \r\n // url: 'https://prod-09.australiasoutheast.logic.azure.com:443/workflows/5bbaefa6a9844816b8c4b625bda66a9b/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=A-6rwRycc1VL6tNtqIPGCrdv4YXsxmyaJtabBugo-xA',\r\n\r\n onSuccess: function (transaction) {\r\n // handle successful submission of transaction\r\n // Toast time\r\n toast.success(\"Claim Submitted\",{ autoClose:5000 });\r\n process.env.REACT_APP_DEBUG && console.log(transaction);\r\n },\r\n onError: function (error) {\r\n // handle errored submission of transaction\r\n toast.error(\"`Claimed Not Submitted\",{ autoClose:5000 });\r\n process.env.REACT_APP_DEBUG && console.log(error);\r\n },\r\n onCancel: function () {\r\n // handle when create transaction flow has been cancelled\r\n // cancelled - do nothing\r\n }\r\n });\r\n }\r\n else\r\n {\r\n medipassSDK.renderCreateTransaction({}, {\r\n funder: \"medicare\",\r\n providerNumber: paymentAPI.providernumber,\r\n invoiceReference: 'RHC' + dataItem.id,\r\n\r\n patient: {\r\n refId: dataItem.clientid.toString(),\r\n firstName: dataItem.clientfirstname.trim(),\r\n lastName: dataItem.clientsurname.trim(),\r\n mobile: dataItem.clientmobilephone,\r\n dob: dataItem.clientdob,\r\n accountNumber: dataItem.clientmedicareno,\r\n reference: dataItem.clientmedicarereferenceno,\r\n sex: dataItem.clientgender\r\n },\r\n\r\n claimableItems: claimItems,\r\n\r\n // funderData: {\r\n // medicare: {\r\n // referral: {\r\n // providerNumber: dataItem.referral_providerNumber,\r\n // providerName: dataItem.referral_providerName,\r\n // referrerType: dataItem.referral_referrerType,\r\n // issueDateString: tempReferredOn,\r\n // period: dataItem.referral_period,\r\n // periodDescription: dataItem.referral_periodDescription\r\n // },\r\n // }\r\n // },\r\n \r\n webhooks: [\r\n {\r\n url: 'https://apicloud.ruralhealthconnect.com.au/medipass/creation',\r\n event: 'invoiceCreated' ,\r\n method: 'POST',\r\n },\r\n {\r\n url: 'https://apicloud.ruralhealthconnect.com.au/medipass/balpaid',\r\n event: 'invoiceBalancePaid',\r\n method: 'POST',\r\n },\r\n {\r\n url: 'https://apicloud.ruralhealthconnect.com.au/medipass/cancelled',\r\n event: 'invoiceCancelled',\r\n method: 'POST',\r\n },\r\n {\r\n url: 'https://apicloud.ruralhealthconnect.com.au/medipass/completed',\r\n event: 'invoiceCompleted',\r\n method: 'POST',\r\n },\r\n {\r\n url: 'https://apicloud.ruralhealthconnect.com.au/medipass/approved',\r\n event: 'healthFundApprovedInvoice',\r\n method: 'POST',\r\n },\r\n {\r\n url: 'https://apicloud.ruralhealthconnect.com.au/medipass/rejected',\r\n event: 'healthFundRejectedInvoice',\r\n method: 'POST',\r\n },\r\n ],\r\n\r\n disableModifyServiceItems: true,\r\n\r\n // Production webhooks \r\n\r\n // url: 'https://apicloud.ruralhealthconnect.com.au/medipass/creation',\r\n // url: 'https://apicloud.ruralhealthconnect.com.au/medipass/cancelled',\r\n // url: 'https://apicloud.ruralhealthconnect.com.au/medipass/completed',\r\n // url: 'https://apicloud.ruralhealthconnect.com.au/medipass/approved',\r\n // url: 'https://apicloud.ruralhealthconnect.com.au/medipass/rejected',\r\n\r\n // Test Webhooks via Logic App to capture the packet \r\n // url: 'https://prod-09.australiasoutheast.logic.azure.com:443/workflows/5bbaefa6a9844816b8c4b625bda66a9b/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=A-6rwRycc1VL6tNtqIPGCrdv4YXsxmyaJtabBugo-xA',\r\n\r\n onSuccess: function (transaction) {\r\n // handle successful submission of transaction\r\n // Toast time\r\n toast.success(\"Claim Submitted\",{ autoClose:5000 });\r\n process.env.REACT_APP_DEBUG && console.log(transaction);\r\n },\r\n onError: function (error) {\r\n // handle errored submission of transaction\r\n toast.error(\"`Claimed Not Submitted\",{ autoClose:5000 });\r\n process.env.REACT_APP_DEBUG && console.log(error);\r\n },\r\n onCancel: function () {\r\n // handle when create transaction flow has been cancelled\r\n // cancelled - do nothing\r\n }\r\n });\r\n }\r\n }\r\n\r\n const openConnection = async(dataItem) => {\r\n // Note the env variable below should be set to \r\n // env : 'stg', for Tyro staging \r\n // env : 'prod', for Tyro prod\r\n // Check if using test psychologist \r\n if (registered && registered.id === 14)\r\n {\r\n // Ok using test psychologist - thus envionrment is staging \r\n await medipassTransactionSDK.setConfig({\r\n env: 'stg',\r\n apiKey: paymentAPI.secureapi,\r\n appId: 'ruralhealthconnect-web',\r\n appVersion: '2021Oct'\r\n });\r\n medipassTransactionSDK.transactions.downloadPDF({ transactionId: dataItem.medipasstransactionid });\r\n }\r\n else\r\n {\r\n await medipassTransactionSDK.setConfig({\r\n env: 'prod',\r\n apiKey: paymentAPI.secureapi,\r\n appId: 'ruralhealthconnect-web',\r\n appVersion: '2021Oct'\r\n });\r\n medipassTransactionSDK.transactions.downloadPDF({ transactionId: dataItem.medipasstransactionid }); \r\n }\r\n }\r\n\r\n const download = dataItem => {\r\n openConnection(dataItem);\r\n }\r\n\r\n\r\n const view = dataItem => {\r\n setCurrentInvoiceID(dataItem.id);\r\n setCurrentClientID(dataItem.clientid)\r\n setCurrentClientName(dataItem.clientName)\r\n // \r\n setCurrentClientSuburb(dataItem.clientsuburb)\r\n setCurrentInvoiceItems(dataItem.invoiceitems)\r\n setCurrentClientSelect(true);\r\n // Determine current line number based on existing invoice \r\n const maxlineno = Math.max(...dataItem.invoiceitems.map(o => o.lineno), 0);\r\n setCurrentLineNo(maxlineno);\r\n // Check status to determine if invoice is editable \r\n if (dataItem.status === 'Saved')\r\n {\r\n setCurrentInvoiceEditable(true);\r\n }\r\n else\r\n {\r\n setCurrentInvoiceEditable(false);\r\n }\r\n setShow(true)\r\n }\r\n\r\n\r\n const CommandCell = props => {\r\n //\r\n const {dataItem} = props;\r\n // Hide Submit to Tyro if already submitted - even if failed\r\n let displayMedipass = false;\r\n if (dataItem.status === 'Saved')\r\n {\r\n displayMedipass = true\r\n }\r\n //\r\n return (\r\n <td className=\"k-command-cell\">\r\n <button className=\"k-button k-grid-save-command\" onClick={() => view(dataItem)} >\r\n View\r\n </button>\r\n {dataItem.medipasstransactionid ? <button className=\"k-button k-grid-save-command\" onClick={() => download(dataItem)} >\r\n Statement\r\n </button>\r\n :\r\n null\r\n }\r\n {displayMedipass ? <button className=\"k-button k-grid-cancel-command\" onClick={() => medipassSubmit(dataItem)}>\r\n Submit to Tyro \r\n </button>\r\n :\r\n null\r\n }\r\n </td>\r\n )\r\n };\r\n\r\n if (paymentAPI && !paymentAPI.secureapi)\r\n {\r\n return('Tyro not configured')\r\n }\r\n\r\n\r\n return(\r\n <>\r\n <div>\r\n <h4>Tyro Invoices</h4>\r\n <Grid\r\n style={{height: \"700px\",}}\r\n sortable={true}\r\n reorderable={true}\r\n pageable={{buttonCount: 4,pageSizes: true,}}\r\n data={dataResult} {...dataState} \r\n onDataStateChange={dataStateChange}\r\n >\r\n <GridToolbar style={{ align: 'right' }}>\r\n <MUIGrid container justifyContent=\"space-between\">\r\n <MUIGrid item style={{ marginTop: 2, marginLeft: 2 }}>\r\n \r\n </MUIGrid>\r\n <MUIGrid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={addNew}>\r\n Add New\r\n </Button>\r\n </MUIGrid>\r\n </MUIGrid>\r\n </GridToolbar>\r\n <GridColumn field=\"id\" title=\"#\" width=\"55px\" /> \r\n <GridColumn field=\"invoicedate\" title=\"Date\" format=\"{0:d}\" width=\"90px\" cell={DateFormatter}/> \r\n <GridColumn field=\"clientName\" title=\"Client\" width=\"200px\" />\r\n <GridColumn field=\"clientdob\" title=\"DOB\" format='{0:d}' width=\"94px\" cell={DateFormatter} /> \r\n <GridColumn field=\"clientsuburb\" title=\"Suburb\" width=\"94px\" /> \r\n <GridColumn field=\"total\" filter={\"numeric\"} title=\"Total Cost\" width=\"90px\" className=\"kendo-grid-col-right\" />\r\n <GridColumn field=\"payment\" filter={\"numeric\"} title=\"Payment\" width=\"90px\" className=\"kendo-grid-col-right\" />\r\n <GridColumn field=\"status\" title=\"Invoice Status\" width=\"120px\" />\r\n <GridColumn field=\"claimstatus\" title=\"Claim Status\" width=\"150px\" />\r\n <GridColumn title=\"Actions\" cell={CommandCell} width=\"220px\" />\r\n </Grid>\r\n </div>\r\n\r\n <Modal show={show} onHide={handleClose} dialogClassName=\"edit-psychologist-dialog-modal\">\r\n <Modal.Header closeButton className=\"edit-psychologist-modal\">\r\n <Modal.Title>Invoice Maintenance </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"edit-psychologist-modal\">\r\n <InvoiceDetail\r\n invoiceID = {currentInvoiceID}\r\n closeModal = {handleClose}\r\n clientID = {currentClientID}\r\n clientName = {currentClientName}\r\n clientSuburb = {currentClientSuburb}\r\n setClientID = {setCurrentClientID}\r\n clientSelect = {currentClientSelect}\r\n invoiceitems = {currentInvoiceItems}\r\n invoiceeditable = {currentInvoiceEditable}\r\n lineno = {currentLineNo}\r\n />\r\n </Modal.Body>\r\n </Modal>\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { DataGrid } from '@material-ui/data-grid';\r\nimport { Button, Modal, Form, Row, Col, InputGroup } from \"react-bootstrap\"; \r\nimport SearchIcon from '@material-ui/icons/Search';\r\n\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { Grid, Paper } from '@material-ui/core';\r\n\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\n\r\nexport default function MedipassCodes() {\r\n\r\n const [searchTerm, setSearchTerm] = useState('')\r\n const medipassCodes = useSelector(state => state.admin.MedipassCodes)\r\n // const psychologistMedipassCodes = medipassCodes.filter(medipasscode => medipasscode.istemplate === 0)\r\n const filteredMedipassCodes = medipassCodes.filter(medipasscode => medipasscode.description.toLowerCase().search(searchTerm.toLowerCase()) > -1 || searchTerm.length === 0 )\r\n\r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Admin.actions.fetchMedipassCodes()) }, [dispatch] )\r\n\r\n var [show, setShow] = useState(false);\r\n var [currentCodeID,setCurrentCodeID] = useState();\r\n var [currentCode,setCurrentCode] = useState();\r\n var [currentDescription,setCurrentDescription] = useState();\r\n var [currentCost,setCurrentCost] = useState();\r\n\r\n\r\n const loadCodeDetail = (thisCode) => {\r\n setCurrentCodeID(thisCode.id);\r\n setCurrentCode(thisCode.code);\r\n setCurrentDescription(thisCode.description);\r\n setCurrentCost(thisCode.cost);\r\n setShow(true)\r\n }\r\n\r\n const createNewCode = (thisCode) => {\r\n setCurrentCodeID(0);\r\n setCurrentCode();\r\n setCurrentDescription();\r\n setCurrentCost('0');\r\n setShow(true)\r\n }\r\n\r\n function putCode() {\r\n // Create payload to send to API \r\n var payload = {\r\n id: currentCodeID,\r\n code: currentCode,\r\n description: currentDescription,\r\n cost: currentCost\r\n }\r\n //\r\n process.env.REACT_APP_DEBUG && console.log(payload);\r\n process.env.REACT_APP_DEBUG && console.log ('Saving data');\r\n // Save update \r\n dispatch(Admin.actions.putMedipassCode(payload));\r\n setShow(false);\r\n }\r\n\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'ID', width: 100, hide: true },\r\n { field: 'code', headerName: 'Code', width: 100, \r\n renderCell: (params) => (\r\n <strong>\r\n {params.row.istemplate === 0 ?\r\n <div onClick={() => loadCodeDetail(medipassCodes.find(medipasscode => medipasscode.code === params.row.code))} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n :\r\n <div>\r\n {params.value}\r\n </div>\r\n }\r\n </strong>\r\n ), \r\n },\r\n { field: 'description', headerName: 'Description', width: 500 },\r\n { field: 'cost', headerName: 'Cost', width: 120 },\r\n { field: 'istemplate', headerName: 'Template', width:150,\r\n renderCell: (params) => (\r\n <>\r\n {params.row.istemplate === 0 ?\r\n 'N'\r\n :\r\n 'Y'\r\n }\r\n </>\r\n ), \r\n }\r\n ];\r\n\r\n \r\n function handleClose() {\r\n setShow(false);\r\n } \r\n\r\n const handleSearch = (event) => {\r\n const searchTerm = event.target.value \r\n setSearchTerm(searchTerm)\r\n }\r\n\r\n\r\n return (\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h4 style={{ marginBottom: 12 }}>Medicare Code Maintenance</h4></Grid>\r\n </Grid>\r\n\r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10 }}>\r\n <Grid item style={{ marginTop: 2, marginLeft: 10 }}>\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(event) => handleSearch(event)}\r\n autoComplete='OFF'\r\n />\r\n </InputGroup>\r\n </Grid>\r\n <Grid item style={{ marginLeft: 20, marginRight: 10 }}>\r\n <Button variant=\"primary\" size=\"sm\" onClick={() => createNewCode()}>\r\n Create Code\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n\r\n\r\n { medipassCodes ? \r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={filteredMedipassCodes} columns={columns} pageSize={10} checkboxSelection={false} rowHeight={40} />\r\n </Paper>\r\n : ('None')\r\n }\r\n\r\n <Modal show={show} onHide={handleClose} dialogClassName=\"contracts-modal\">\r\n <Modal.Header closeButton className=\"contracts-modal\">\r\n <Modal.Title>Code Maintenance </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"contracts-modal\">\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Medicare Code</Form.Label>\r\n <Form.Control type=\"text\" name=\"Code\" defaultValue={currentCode} onBlur={(event) => setCurrentCode(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Description</Form.Label>\r\n <textarea className=\"form-control\" rows=\"6\" name=\"Description\" defaultValue={currentDescription} onBlur={(event) => setCurrentDescription(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Cost</Form.Label>\r\n <Form.Control type=\"text\" name=\"Cost\" defaultValue={currentCost} onBlur={(event) => setCurrentCost(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </Modal.Body>\r\n <Modal.Footer className=\"contracts-modal\">\r\n <Button variant=\"secondary\" onClick={handleClose}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"primary\" onClick={putCode}>\r\n Save\r\n </Button>\r\n </Modal.Footer>\r\n\r\n </Modal>\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n","import React from 'react';\r\nimport { DropDownList } from '@progress/kendo-react-dropdowns';\r\n\r\nexport const BookingStatusDropDownCell = props => {\r\n const localizedData = [{\r\n text: 'Active',\r\n value: 'Active'\r\n }, {\r\n text: 'Cancelled',\r\n value: 'Cancelled'\r\n }, {\r\n text: 'No Show',\r\n value: 'NoShow'\r\n }];\r\n\r\n const handleChange = e => {\r\n if (props.onChange) {\r\n props.onChange({\r\n dataIndex: 0,\r\n dataItem: props.dataItem,\r\n field: props.field,\r\n syntheticEvent: e.syntheticEvent,\r\n value: e.target.value.value,\r\n });\r\n // console.log(e.target.value.value);\r\n }\r\n };\r\n\r\n const {\r\n dataItem\r\n } = props;\r\n const field = props.field || '';\r\n const dataValue = dataItem[field] === null ? '' : dataItem[field];\r\n return <td>\r\n {dataItem.inEdit ? <DropDownList style={{\r\n width: \"150px\"\r\n }} onChange={handleChange} value={localizedData.find(c => c.value === dataValue)} data={localizedData} textField=\"text\" /> : dataValue.toString()}\r\n </td>;\r\n };","import React from 'react';\r\nimport { DropDownList } from '@progress/kendo-react-dropdowns';\r\n\r\nexport const BookingServiceDropDownCell = props => {\r\n const localizedData = [\r\n {\r\n text: 'Bulk Billed',\r\n value: 'Bulk Billed'\r\n },\r\n {\r\n text: 'Reduced Gap',\r\n value: 'Reduced Gap'\r\n }, \r\n {\r\n text: 'Full Fee',\r\n value: 'Full Fee'\r\n },\r\n {\r\n text: 'PrivateClient',\r\n value: 'PrivateClient'\r\n },\r\n {\r\n text: 'Contract',\r\n value: 'Contract'\r\n },\r\n {\r\n text: 'NDIS',\r\n value: 'NDIS'\r\n },\r\n {\r\n text: 'EAP',\r\n value: 'EAP'\r\n },\r\n {\r\n text: 'Provisional',\r\n value: 'Provisional'\r\n },\r\n ];\r\n\r\n const handleChange = e => {\r\n if (e.target.value.value && e.target.value.value !== 'NDIS' && e.target.value.value !== 'EAP' && e.target.value.value !== 'Contract' && e.target.value.value !== 'Provisional')\r\n {\r\n if (props.onChange) {\r\n props.onChange({\r\n dataIndex: 0,\r\n dataItem: props.dataItem,\r\n field: props.field,\r\n syntheticEvent: e.syntheticEvent,\r\n value: e.target.value.value,\r\n });\r\n // console.log(e.target.value.value);\r\n }\r\n }\r\n };\r\n\r\n const {\r\n dataItem\r\n } = props;\r\n const field = props.field || '';\r\n const dataValue = dataItem[field] === null ? '' : dataItem[field];\r\n return <td>\r\n {dataItem.inEdit ? <DropDownList style={{\r\n width: \"150px\"\r\n }} onChange={handleChange} value={localizedData.find(c => c.value === dataValue)} data={localizedData} textField=\"text\" /> : dataValue.toString()}\r\n </td>;\r\n };\r\n\r\n\r\n ","import React from 'react';\r\nimport { DropDownList } from '@progress/kendo-react-dropdowns';\r\n\r\nexport const BookingSubPaymentTypeDropDownCell = props => {\r\n\r\n const localizedDataClinicalReducedGap = [\r\n {\r\n text: 'N/A',\r\n value: ''\r\n },\r\n {\r\n text: 'Gap Over $30',\r\n value: 'Over30C'\r\n }, \r\n {\r\n text: 'Gap Under $50',\r\n value: 'Under50C'\r\n },\r\n {\r\n text: 'Gap Over $50',\r\n value: 'Over50C'\r\n },\r\n ];\r\n\r\n const localizedDataReducedGap = [\r\n {\r\n text: 'N/A',\r\n value: ''\r\n },\r\n {\r\n text: 'Gap Over $30',\r\n value: 'Over30'\r\n }, \r\n {\r\n text: 'Gap Under $50',\r\n value: 'Under50'\r\n },\r\n {\r\n text: 'Gap Over $50',\r\n value: 'Over50'\r\n },\r\n ];\r\n\r\n const localizedDataClinicalFullFee = [\r\n {\r\n text: 'N/A',\r\n value: ''\r\n },\r\n {\r\n text: 'Gap Over $50',\r\n value: 'Over50C'\r\n },\r\n ];\r\n\r\n const localizedDataFullFee = [\r\n {\r\n text: 'N/A',\r\n value: ''\r\n },\r\n {\r\n text: 'Gap Over $50',\r\n value: 'Over50'\r\n },\r\n ];\r\n\r\n const handleChange = e => {\r\n if (props.onChange) {\r\n props.onChange({\r\n dataIndex: 0,\r\n dataItem: props.dataItem,\r\n field: props.field,\r\n syntheticEvent: e.syntheticEvent,\r\n value: e.target.value.value,\r\n });\r\n // console.log(e.target.value.value);\r\n }\r\n };\r\n\r\n const {\r\n dataItem\r\n } = props;\r\n const field = props.field || '';\r\n const dataValue = dataItem[field] === null ? '' : dataItem[field];\r\n const providerType = props.dataItem.providerType;\r\n const paymentType = props.dataItem.service;\r\n console.log(props.dataItem);\r\n return <td>\r\n {dataItem.inEdit ? <DropDownList style={{\r\n width: \"150px\"\r\n }} onChange={handleChange} \r\n value={providerType === 'Clinical' ? paymentType === 'Reduced Gap' ? localizedDataClinicalReducedGap.find(c => c.value === dataValue) : localizedDataClinicalFullFee.find(c => c.value === dataValue) : paymentType === 'Reduced Gap' ? localizedDataReducedGap.find(c => c.value === dataValue) : localizedDataFullFee.find(c => c.value === dataValue) } \r\n data={providerType === 'Clinical' ? paymentType === 'Reduced Gap' ? localizedDataClinicalReducedGap : localizedDataClinicalFullFee : paymentType === 'Reduced Gap' ? localizedDataReducedGap : localizedDataFullFee } \r\n textField=\"text\" /> : dataValue.toString()} </td>;\r\n };\r\n\r\n\r\n ","import React, { useEffect, useState } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { Grid, GridColumn } from '@progress/kendo-react-grid';\r\nimport { process } from '@progress/kendo-data-query';\r\nimport { BookingStatusDropDownCell } from '../../../components/BookingStatusDropDownCell';\r\nimport { BookingServiceDropDownCell } from '../../../components/BookingServiceDropDownCell';\r\nimport { BookingSubPaymentTypeDropDownCell } from '../../../components/BookingSubPaymentTypeDropDownCell';\r\n\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\n// import * as Reference from \"../../../store/ducks/reference.duck\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\nimport '../../../../_metronic/_assets/css/app.css';\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\n// In the world of confusion - please note the following invoicing process \r\n//\r\n// Today we are billing per booking using the Services Table to define the prices - each booking has a billable type that is set (or defaulted) when a booking is made\r\n//\r\n// Process \r\n// \r\n// GatherBillable.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to email providers a list of those to be billed at the end of the month if still eliglible. \r\n// - Can toogle bookings to cancelled/noshow as needed \r\n// Invoices.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to create Invoices in Xero for these providers. \r\n// - This essentially a copy of GatherBillable though expect this will change at client acceptance occurs. \r\n// InvoiceLog.js - This is a searchable log of invoices/clients/providers \r\n// \r\n// PlatformPsychologist.js - Lists unbilled boookings \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Can toogle bookings to cancelled/noshow as needed \r\n//\r\n\r\n \r\n\r\nexport default function PlatformInvoicesPsychologist() {\r\n\r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Admin.actions.fetchSingleBillable()) }, [dispatch] )\r\n const billableIntents = useSelector(state => state.admin.BillableSingleIntents);\r\n const editField = \"inEdit\";\r\n\r\n // Note these lines are temporary whilst the page is limited to the test psychologist - they can be removed when Xero goes live\r\n // const registered = useSelector(state => state.admin.RegisteredPsychologists[0]);\r\n // useEffect( () => { dispatch(Admin.actions.fetchRegistered()) }, [dispatch] )\r\n\r\n const [dataState, setDataState] = useState({\r\n skip: 0,\r\n take: 20,\r\n sort: [{\r\n field: 'clientName',\r\n dir: 'asc'\r\n }],\r\n });\r\n\r\n function getlastDayofMonth()\r\n {\r\n var today = new Date();\r\n // Determine last day of the month \r\n today.setDate(1); // going to 1st of the month\r\n today.setHours(-1); // going to last hour before this date even started.\r\n // All this code just to returnm dd/mm/yyyy - how primitve \r\n var dd = today.getDate();\r\n var mm = today.getMonth()+1;\r\n var yyyy = today.getFullYear();\r\n if (dd < 10) \r\n {\r\n dd = '0' + dd;\r\n }\r\n if (mm < 10) \r\n {\r\n mm = '0' + mm;\r\n }\r\n var newToday = dd + '/' + mm + '/' + yyyy;\r\n return(newToday);\r\n }\r\n\r\n const MyCommandCell = (props) => {\r\n const { dataItem } = props;\r\n const inEdit = dataItem[props.editField];\r\n return inEdit ? (\r\n <td className=\"k-command-cell\">\r\n <button className=\"k-primary k-button k-grid-save-command\" onClick={() => props.update(dataItem)}>\r\n Update\r\n </button>\r\n <button className=\"k-button k-grid-cancel-command\" onClick={() => props.cancel(dataItem)}>\r\n Cancel\r\n </button>\r\n </td>\r\n ) : (\r\n <td className=\"k-command-cell\">\r\n <button className=\"k-primary k-button k-grid-edit-command\" onClick={() => props.edit(dataItem)}>\r\n Edit\r\n </button>\r\n </td>\r\n );\r\n };\r\n\r\n const [dataResult, setDataResult] = useState(process(billableIntents, dataState)); \r\n const [prevBillableIntents, setPrevBillableIntents] = useState();\r\n const [currentBillableIntents, setCurrentBillableIntents] = useState(); \r\n\r\n\r\n useEffect( () => {\r\n if ((JSON.stringify(billableIntents) !== JSON.stringify(prevBillableIntents)) && billableIntents.length > 0)\r\n {\r\n setPrevBillableIntents(billableIntents)\r\n setCurrentBillableIntents(billableIntents)\r\n setDataResult(process(billableIntents, dataState))\r\n }\r\n }, [prevBillableIntents, currentBillableIntents, billableIntents, dataResult, dataState])\r\n\r\n const CommandCell = (props) => (\r\n <MyCommandCell\r\n {...props}\r\n edit={enterEdit}\r\n update={update}\r\n cancel={cancel}\r\n editField={editField}\r\n />\r\n );\r\n\r\n \r\n const update = (dataItem) => {\r\n dataItem.inEdit = false;\r\n // console.log('Update');\r\n // console.log(dataItem.status);\r\n dispatch(Admin.actions.putAppointment( \r\n { id: dataItem.bookingid, \r\n status: dataItem.status, \r\n paymentType: dataItem.service,\r\n subpaymentType: dataItem.subpaymenttype,\r\n email: false,\r\n refreshPayload: { key: 'BillableSingle', id: dataItem.bookingid }\r\n }));\r\n };\r\n\r\n const cancel = (dataItem) => {\r\n const originalItem = billableIntents.find((p) => p.bookingid === dataItem.bookingid);\r\n const newData = billableIntents.map((item) => item.bookingid === originalItem.bookingid ? originalItem : item);\r\n setDataResult(process(newData,dataState));\r\n };\r\n\r\n const enterEdit = (dataItem) => {\r\n let newData = billableIntents.map((item) =>\r\n item.bookingid === dataItem.bookingid ? { ...item, inEdit: true } : item\r\n );\r\n setDataResult(process(newData,dataState));\r\n };\r\n\r\n const itemChange = event => {\r\n const field = event.field || '';\r\n let newData = billableIntents.map(item => item.bookingid === event.dataItem.bookingid ? { ...item,[field]: event.value} : item);\r\n\r\n let newerData = newData.map((item) => item.bookingid === event.dataItem.bookingid ? { ...item, inEdit: true } : item);\r\n\r\n setDataResult(process(newerData,dataState));\r\n };\r\n\r\n const dataStateChange = event => {\r\n setDataResult(process(billableIntents, event.dataState));\r\n setDataState(event.dataState);\r\n };\r\n\r\n return(\r\n <>\r\n <div>\r\n <h4>Bookings to be Invoiced (for month ending {getlastDayofMonth()})</h4>\r\n <Grid\r\n style={{height: \"700px\",}}\r\n sortable={true}\r\n reorderable={true}\r\n editField={editField}\r\n onItemChange={itemChange}\r\n pageable={{buttonCount: 4,pageSizes: true,}}\r\n data={dataResult} {...dataState} \r\n dataItemKey={\"bookingid\"}\r\n onDataStateChange={dataStateChange}\r\n >\r\n <GridColumn field=\"clientName\" title=\"Client Name\" width=\"250px\" editable={false} />\r\n <GridColumn field=\"bookingDate\" title=\"Booking Date\" width=\"200px\" editable={false} />\r\n <GridColumn field=\"service\" cell={BookingServiceDropDownCell} title=\"Service\" width=\"160px\" editable={false} />\r\n <GridColumn field=\"subpaymenttype\" cell={BookingSubPaymentTypeDropDownCell} title=\"Sub\" width=\"160px\" editable={false} />\r\n <GridColumn field=\"cost\" filter={\"numeric\"} title=\"Cost (exGST)\" width=\"120px\" editable={false} />\r\n <GridColumn field=\"status\" cell={BookingStatusDropDownCell} title=\"Status\" width=\"100px\" />\r\n <GridColumn title=\"Actions\" cell={CommandCell} width=\"240px\" />\r\n </Grid>\r\n </div>\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n\r\n","import React, { useState } from 'react'\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport * as Admin from \"../store/ducks/admin.duck\";\r\nimport { Button, Form, Row, Col } from \"react-bootstrap\";\r\nimport { Grid } from '@material-ui/core';\r\nimport ReactQuill from 'react-quill';\r\nimport 'react-quill/dist/quill.snow.css';\r\nimport '../../_metronic/_assets/css/app2.css';\r\n// import { Editor } from '@tinymce/tinymce-react';\r\n// import { makeStyles } from '@material-ui/core';\r\n\r\nexport default function ProviderProgramBio(props) {\r\n \r\n const dispatch = useDispatch()\r\n const providerProgram = useSelector(state => state.admin.ProgramProviderBio)\r\n var [providerBio,setProviderBio] = useState(providerProgram.programbio)\r\n \r\n\r\n\r\n function addProviderBIO() {\r\n // Update BIO \r\n dispatch(Admin.actions.putProviderProgramBio({ id: providerProgram.id, bio: providerBio }));\r\n props.onCloseCustomBio();\r\n }\r\n\r\n return(\r\n <Grid item md={12}> \r\n <Row>\r\n <Col md=\"12\" className=\"quill-field\">\r\n <Form.Group >\r\n <Form.Label>Custom Bio for Program - {providerProgram && providerProgram.name}</Form.Label>\r\n <ReactQuill \r\n theme=\"snow\"\r\n value={providerBio || providerProgram.programbio}\r\n onChange={setProviderBio} \r\n />\r\n {/* <Editor apiKey='wnbo4skoom9pnqmbfdjvwn8xdl1nfjtwhc2ofsqb1myqn5lo'\r\n value={providerBio || providerProgram.programbio}\r\n onEditorChange={(newValue, editor)=>setProviderBio(newValue)}\r\n init={{ branding: false, statusbar: false, height: 500 }}\r\n /> */}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container spacing={0} padding={6} justifyContent=\"space-between\">\r\n <Button variant=\"light\" onClick={()=>props.onCloseCustomBio()}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"success\" size=\"sm\" onClick={() => addProviderBIO()}>\r\n Save\r\n </Button>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n </Grid>\r\n )\r\n\r\n\r\n}\r\n \r\n","import React, { useState, useEffect } from \"react\";\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport PlacesAutoComplete from \"../../../components/AddressAutoComplete\";\r\nimport * as Reference from \"../../../store/ducks/reference.duck\";\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { Button, Modal, Form, Row, Col, InputGroup, Image, Badge } from \"react-bootstrap\";\r\nimport { Paper, Grid, TextField, Typography, makeStyles, List, ListItem, ListItemIcon, ListItemText, ListItemSecondaryAction, Checkbox, Card, CardMedia, CardContent, Chip } from '@material-ui/core';\r\nimport Interweave from 'interweave'\r\nimport DescriptionIcon from '@material-ui/icons/Description';\r\nimport { Formik } from 'formik';\r\nimport * as Yup from \"yup\";\r\nimport Alert from '@material-ui/lab/Alert';\r\nimport APIKeyForm from \"../../../components/APIKeyForm\";\r\nimport ProviderProgramBio from \"../../../components/ProviderProgramBio\";\r\n// import { Editor } from '@tinymce/tinymce-react';\r\nimport StarIcon from '@material-ui/icons/Star';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport Masonry from 'react-masonry-css';\r\nimport KTUtil from \"../../../../_metronic/_assets/js/util\";\r\nimport ReactQuill from 'react-quill';\r\nimport { MuiPickersUtilsProvider, KeyboardDatePicker } from '@material-ui/pickers';\r\nimport DateFnsUtils from '@date-io/date-fns';\r\nimport 'react-quill/dist/quill.snow.css';\r\nimport \"../../../../_metronic/_assets/sass/pages/login/login-1.scss\";\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\n\r\n\r\nconst useStyles = makeStyles(() => ({\r\n noBorder: {\r\n border: \"none\",\r\n },\r\n media: {\r\n height: 200,\r\n },\r\n root: {\r\n \"& .MuiInputBase-root\": {\r\n height: 33,\r\n }\r\n } \r\n}));\r\n\r\n\r\nexport default function ProfilePsychologist() {\r\n\r\n const dispatch = useDispatch()\r\n \r\n useEffect( () => { dispatch(Admin.actions.fetchRegistered()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchConstants()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchFundingTypes()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchSundayThisWeek()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchAreasOfInterest('ALL')) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchSupervisionAreas()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchMBSServices()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchTimeZone()) }, [dispatch] )\r\n\r\n \r\n const fundingTypesReference = useSelector(state => state.reference.FundingTypes)\r\n const mbsServicesReference = useSelector(state => state.reference.MBSServices)\r\n const timeZone = useSelector(state => state.reference.TimeZone)\r\n const classes = useStyles();\r\n\r\n \r\n // Blob setup for psychologist photos \r\n const containerName = `psychologists`;\r\n const storageAccountName = process.env.REACT_APP_STORAGERESOURCENAME || \"\"; \r\n var [currentprofilepicture, setcurrentprofilepicture] = useState();\r\n\r\n // now init the fields with values so that Formik can manage the touched state\r\n const psychologistInit = {\r\n psychologistid : 0,\r\n firstname: '', \r\n surname: '', \r\n gender: '',\r\n email: '', \r\n mobilephone: '',\r\n education: '',\r\n startedpracticingyear: 2000,\r\n bio: '',\r\n\r\n practicename: '',\r\n abn: '',\r\n fulladdress: '',\r\n latitude: '',\r\n longitude: '',\r\n postcode: '',\r\n\r\n providernumber : '',\r\n insurancenumber: '',\r\n hourlyrate: '',\r\n newInsuranceFile: '',\r\n reducedFee:'',\r\n \r\n areasOfInterest: [],\r\n keyAreas: [],\r\n fundingTypes: [],\r\n mbsServices: [],\r\n waitingRoomURL: '',\r\n imageURL: currentprofilepicture,\r\n\r\n pdfpassword: '',\r\n timeZone: 'AUS Eastern Standard Time',\r\n medipassapikey: '',\r\n providertype: 'Psychologist',\r\n providerdescription: 'Psychologist',\r\n ahpraRegisrationNo: '',\r\n coviuRoomURL: '',\r\n isReducedFee: 'N',\r\n teleHealthProvider: 'COVIU',\r\n mfaConfigured: false,\r\n supervisorAreas: [],\r\n supervisorBio: '',\r\n supervisorEducation: '',\r\n supervisorHourlyRate : '',\r\n autoBulkBillingConsentForm: 'N',\r\n insuranceexpiry : null\r\n }\r\n\r\n\r\n // for previewing uploaded profile pictures\r\n var [previewFile, setPreviewFile] = useState('')\r\n var [showAPIKey, setShowAPIKey] = useState(false)\r\n var [showCustomBio,setShowCustomBio] = useState(false)\r\n var [insuranceFileClear, setInsuranceFileClear] = useState(0)\r\n var [showRegistrationView, setShowRegistrationView] = useState(false) \r\n var [showProviderBio,setShowProviderBio] = useState(false)\r\n var [providerBioFullName,setProviderBioFullName] = useState()\r\n var [providerBioBio,setProviderBioBio] = useState()\r\n var [providerRegistrationView,setProviderRegistrationView] = useState(psychologistInit)\r\n var [currentPaymentType,setCurrentPaymentType] = useState('Reduced Gap')\r\n\r\n function handleRegistrationViewClose() {\r\n setShowRegistrationView(false);\r\n } \r\n\r\n function handleAPIKeyClose() {\r\n setShowAPIKey(false);\r\n } \r\n\r\n function handleCustomBioClose() {\r\n setShowCustomBio(false)\r\n } \r\n\r\n const registrationView = (values,feeType) => {\r\n // Populate Modal which contains preview of Provider Registration Information\r\n setCurrentPaymentType(feeType)\r\n setProviderRegistrationView(values)\r\n setShowRegistrationView(true)\r\n }\r\n\r\n\r\n const moreProviderBio = (fullName, bio) => {\r\n setProviderBioFullName(fullName)\r\n setProviderBioBio(bio)\r\n setShowProviderBio(true)\r\n }\r\n\r\n function ErrorsNotification ({ errors, touched }) {\r\n if(!KTUtil.isEmpty(errors) && !KTUtil.isEmpty(touched))\r\n {\r\n return(\r\n <>\r\n <div className=\"errors-list\">\r\n <h4 className=\"errors-list-heading\">Please fix the following fields before you submit:</h4>\r\n <ul>\r\n {Object.keys(errors).map(msg => (\r\n <React.Fragment key={msg}>\r\n {touched[msg] ?\r\n <li>{errors[msg]}</li>\r\n :\r\n null\r\n }\r\n </React.Fragment>\r\n ))}\r\n </ul>\r\n </div>\r\n <hr />\r\n </>\r\n )\r\n } \r\n else\r\n {\r\n return null\r\n }\r\n }\r\n\r\n\r\n\r\n // get the psychologist from state and merge with the initialised fields\r\n const registered = useSelector(state => state.admin.RegisteredPsychologists[0]);\r\n var psychologist = {...psychologistInit, ...registered};\r\n\r\n // setup the aoi according to provider type and aoi type\r\n // const areasOfInterestReference = useSelector(state => state.reference.AreasOfInterest).filter(area => area.providertype === (registered && registered.providertype === 'Provisional' ? 'Psychologist' : registered && registered.providertype))\r\n\r\n const aoi_focus = useSelector(state => state.reference.AreasOfInterest).filter(aoi => aoi.focusAreaIndex !== null && aoi.providertype === (registered && registered.providertype === 'Provisional' ? 'Psychologist' : registered && registered.providertype === 'Clinical' ? 'Psychologist': registered && registered.providertype === 'Occupational' ? 'Psychologist': registered && registered.providertype === 'Social' ? 'Psychologist' : registered && registered.providertype === 'GP' ? 'Psychologist' : registered && registered.providertype === 'Nurse' ? 'Psychologist': registered && registered.providertype))\r\n const aoi_other = useSelector(state => state.reference.AreasOfInterest).filter(aoi => aoi.focusAreaIndex === null && aoi.providertype === (registered && registered.providertype === 'Provisional' ? 'Psychologist' : registered && registered.providertype === 'Clinical' ? 'Psychologist': registered && registered.providertype === 'Occupational' ? 'Psychologist': registered && registered.providertype === 'Social' ? 'Psychologist' : registered && registered.providertype === 'GP' ? 'Psychologist' : registered && registered.providertype === 'Nurse' ? 'Psychologist': registered && registered.providertype))\r\n const aoi_program = useSelector(state => state.reference.AreasOfInterest).filter(aoi => aoi.program !== null && aoi.providertype === (registered && registered.providertype === 'Provisional' ? 'Psychologist' : registered && registered.providertype === 'Clinical' ? 'Psychologist': registered && registered.providertype === 'Occupational' ? 'Psychologist': registered && registered.providertype === 'Social' ? 'Psychologist': registered && registered.providertype === 'GP' ? 'Psychologist' : registered && registered.providertype === 'Nurse' ? 'Psychologist': registered && registered.providertype))\r\n\r\n const supervisionAreas = useSelector(state => state.reference.SupervisionAreas).filter(sa => sa.providertype === 'Psychologist')\r\n const endorsedSupervisionAreas = useSelector(state => state.reference.SupervisionAreas).filter(sa => sa.providertype === 'Psychologist-Endorsed')\r\n const aoi_tt = useSelector(state => state.reference.AreasOfInterest).filter(aoi => aoi.providertype === 'TherapyType')\r\n const aoi_providerinterest = useSelector(state => state.reference.AreasOfInterest).filter(aoi => aoi.providertype === 'ProviderInterest')\r\n \r\n // Convert the various selections to their array members\r\n var ftypes = fundingTypesReference.filter(( {id} ) => psychologist.fundingTypes.includes(id))\r\n var aoi = aoi_focus.filter(( {issue} ) => psychologist.areasOfInterest.includes(issue))\r\n var keyAoi = aoi_other.filter(( {issue} ) => psychologist.areasOfInterest.includes(issue))\r\n var ttAoi = aoi_tt.filter(( {issue} ) => psychologist.areasOfInterest.includes(issue))\r\n var piAoi = aoi_providerinterest.filter(( {issue} ) => psychologist.areasOfInterest.includes(issue)) \r\n var mbs = mbsServicesReference.filter(( {id} ) => psychologist.mbsServices.includes(id))\r\n\r\n // And merge those back into the primary record\r\n psychologist = {...psychologist, \r\n hourlyrate: psychologist.hourlyrate.substring(0,1) === '$' ? psychologist.hourlyrate.substring(1) : psychologist.hourlyrate,\r\n reducedFee: psychologist.reducedFee.substring(0,1) === '$' ? psychologist.reducedFee.substring(1) : psychologist.reducedFee,\r\n fundingTypes: ftypes,\r\n areasOfInterest: aoi,\r\n keyAreas: keyAoi,\r\n providerInterest: piAoi,\r\n therapytypes: ttAoi,\r\n mbsServices: mbs,\r\n }\r\n \r\n const loadAPIKey = (thisPsychologist) => {\r\n // Load Form\r\n setShowAPIKey(true);\r\n }\r\n\r\n const loadCustomBio = (programID) => {\r\n // Load CustomBIO\r\n dispatch(Admin.actions.fetchProviderProgramBio({ programID: programID}))\r\n // Display Modal with BIO \r\n setShowCustomBio(true)\r\n }\r\n\r\n function InsuranceDownload(props) {\r\n // Check to see if link is populated\r\n if (!props.documentLink)\r\n {\r\n return(null)\r\n }\r\n //\r\n return (\r\n <Button variant=\"info\" size=\"sm\" href={props.documentLink} >\r\n <DescriptionIcon fontSize=\"small\" style={{ marginRight: 6, marginTop: -1 }} /> Download\r\n </Button>\r\n )\r\n }\r\n\r\n function submitForm(data){\r\n //\r\n const formData = new FormData();\r\n // Merge AOI and Key AOI into one field \r\n let mergedAOI = [];\r\n if (data['areasOfInterest'].length > 0)\r\n {\r\n mergedAOI = [...mergedAOI,...data['areasOfInterest']]; \r\n }\r\n if (data['keyAreas'].length > 0)\r\n {\r\n mergedAOI = [...mergedAOI,...data['keyAreas']]; \r\n }\r\n if (data['providerInterest'].length > 0 )\r\n {\r\n mergedAOI = [...mergedAOI,...data['providerInterest']];\r\n }\r\n if (data['therapytypes'].length > 0 )\r\n {\r\n mergedAOI = [...mergedAOI,...data['therapytypes']];\r\n }\r\n\r\n formData.append('psychologistID',psychologist.id);\r\n formData.append('firstname',data['firstname'])\r\n formData.append('surname',data['surname'])\r\n formData.append('gender',data['gender'])\r\n formData.append('email',data['email'])\r\n formData.append('education',data['education'])\r\n formData.append('mobilephone',data['mobilephone'])\r\n formData.append('bio',data['bio'])\r\n formData.append('practicename',data['practicename'])\r\n formData.append('abn',data['abn'])\r\n formData.append('fulladdress',data['fulladdress'])\r\n formData.append('providernumber',data['providernumber'])\r\n formData.append('insurancenumber',data['insurancenumber'])\r\n formData.append('insuranceexpiry',data['insuranceexpiry'])\r\n formData.append('newInsuranceFile',data['newInsuranceFile'])\r\n formData.append('areasOfInterest',mergedAOI.map(aoi => aoi.issue));\r\n formData.append('fundingTypes',data['fundingTypes'].map(ft => ft.id));\r\n formData.append('mbsServices',data['mbsServices'].map(mbs => mbs.id));\r\n formData.append('pdfpassword',data['pdfpassword'])\r\n formData.append('timeZone',data['timeZone'])\r\n formData.append('imageURL',data['imageURL'])\r\n formData.append('waitingRoomURL',data['waitingRoomURL'])\r\n formData.append('startedpracticingyear',data['startedpracticingyear']);\r\n formData.append('providertype',data['providertype'])\r\n formData.append('newProfilePicture', currentprofilepicture)\r\n formData.append('ahpraRegistrationNo',data['ahpraRegistrationNo']);\r\n formData.append('coviuRoomURL',data['coviuRoomURL']);\r\n formData.append('teleHealthProvider',data['teleHealthProvider']);\r\n formData.append('autoBulkBillingConsentForm',data['autoBulkBillingConsentForm'])\r\n // Handle Supervisor Fields \r\n formData.append('isSupervisor',data['isSupervisor'])\r\n formData.append('supervisorBio',data['supervisorBio'])\r\n formData.append('supervisorEducation',data['supervisorEducation'])\r\n formData.append('supervisorHourlyRate',data['supervisorHourlyRate'])\r\n formData.append('supervisorAreas',data['supervisorAreas'])\r\n // Handle Payment \r\n formData.append('hourlyrate',data['hourlyrate'])\r\n formData.append('reducedFee',data['reducedFee'])\r\n formData.append('facetoFaceBooking',data['facetoFaceBooking'])\r\n // formData.append('hourlyRateOverrideGap',data['hourlyRateOverrideGap'])\r\n // formData.append('hourlyRateOverrideRebate',data['hourlyRateOverrideRebate'])\r\n // formData.append('reducedFeeOverrideGap',data['reducedFeeOverrideGap'])\r\n // formData.append('reducedFeeOverrideRebate',data['reducedFeeOverrideRebate'])\r\n if (data['isReducedFee'])\r\n {\r\n formData.append('isReducedFee','Y');\r\n }\r\n else\r\n {\r\n formData.append('isReducedFee','N');\r\n }\r\n // Medical Practice - need to determine if one has been entered \r\n if (psychologist.medicalPracticeID !== null)\r\n {\r\n // Ok one already exists so send an upodate \r\n formData.append('medicalPracticeID',psychologist.medicalPracticeID);\r\n const initMedicalPractice = { \r\n id: psychologist.medicalPracticeID, \r\n abn: data['abn'], \r\n practicename: data['practicename'], \r\n phone: psychologist.phone, \r\n address1: data['fulladdress'], \r\n latitude: data['latitude'],\r\n longitude: data['longitude'],\r\n postcode: data['postcode'],\r\n email: data['email'], \r\n website: '', \r\n logoURL: '', \r\n practiceType: 'Psychologist'\r\n };\r\n formData.append('medicalPractice', JSON.stringify(initMedicalPractice))\r\n }\r\n else\r\n {\r\n // One didn't exist previously though may been entered \r\n if (data['practicename'] !== '' && data['fulladdress'] !== '')\r\n {\r\n // We have a new one\r\n formData.append('medicalPracticeID',0);\r\n const initMedicalPractice = { \r\n id: 0, \r\n abn: data['abn'], \r\n practicename: data['practicename'], \r\n phone: psychologist.phone, \r\n address1: data['fulladdress'], \r\n latitude: data['latitude'],\r\n longitude: data['longitude'],\r\n postcode: data['postcode'],\r\n email: data['email'], \r\n website: '', \r\n logoURL: '', \r\n practiceType: 'Psychologist'\r\n };\r\n formData.append('medicalPractice', JSON.stringify(initMedicalPractice))\r\n }\r\n else\r\n {\r\n // Nothing has been entered proceed as before \r\n formData.append('medicalPracticeID',psychologist.medicalPracticeID);\r\n const initMedicalPractice = { \r\n id: psychologist.medicalPracticeID, \r\n abn: data['abn'], \r\n practicename: data['practicename'], \r\n phone: psychologist.phone, \r\n address1: data['fulladdress'], \r\n latitude: data['latitude'],\r\n longitude: data['longitude'],\r\n postcode: data['postcode'],\r\n email: data['email'], \r\n website: '', \r\n logoURL: '', \r\n practiceType: 'Psychologist'\r\n };\r\n formData.append('medicalPractice', JSON.stringify(initMedicalPractice))\r\n }\r\n }\r\n \r\n \r\n dispatch(Admin.actions.putPsychologistDetail({formData}));\r\n //\r\n setInsuranceFileClear(1)\r\n\r\n }\r\n\r\n const validationSchema = Yup.object().shape({\r\n firstname: Yup.string()\r\n .min(2,\"First Name too Short\")\r\n .max(255,\"First Name too Long\")\r\n .required(\"First Name is required\"),\r\n surname: Yup.string()\r\n .min(2,\"Surname too Short\")\r\n .max(255,\"Surname too Long\")\r\n .required(\"Surname is required\"),\r\n mobilephone: Yup.string()\r\n .min(2,\"Mobile Phone NumberToo Short\")\r\n .max(12,\"Mobile Phone NumberToo Long\")\r\n .required(\"Mobile Phone Number is required\"),\r\n gender: Yup.string()\r\n .min(2,\"Gender too Short\")\r\n .max(20,\"Gender too Long\")\r\n .required(\"Gender is required\"),\r\n email: Yup.string()\r\n .min(2,\"Email Address too Short\")\r\n .max(200,\"Email Address too Long\")\r\n .email(\"Enter a valid email\")\r\n .required(\"Email is required\"),\r\n bio: Yup.string()\r\n .max(3900,\"Bio too Long\"),\r\n education: Yup.string()\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.string().min(2,\"Education too Short\")\r\n .max(100,\"Education too Long\")\r\n .required(\"Education is required\")\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.string().min(2,\"Education too Short\")\r\n .max(100,\"Education too Long\")\r\n .required(\"Education is required\")\r\n }),\r\n practicename: Yup.string()\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'GP',\r\n then: Yup.string().min(2,\"Practice Name too Short\")\r\n .max(200,\"Practice Name too Long\")\r\n .required(\"Practice Name is required\")\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Financial',\r\n then: Yup.string().min(2,\"Organisation too Short\")\r\n .max(200,\"Organisation too Long\")\r\n .required(\"Organisation is required\")\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.string().min(2,\"Organisation too Short\")\r\n .max(200,\"Organisation too Long\")\r\n .required(\"Organisation is required\")\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.string().min(2,\"Organisation too Short\")\r\n .max(200,\"Organisation too Long\")\r\n .required(\"Organisation is required\")\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Occupational',\r\n then: Yup.string().min(2,\"Organisation too Short\")\r\n .max(200,\"Organisation too Long\")\r\n .required(\"Organisation is required\")\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Social',\r\n then: Yup.string().min(2,\"Organisation too Short\")\r\n .max(200,\"Organisation too Long\")\r\n .required(\"Organisation is required\")\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Nurse',\r\n then: Yup.string().min(2,\"Organisation too Short\")\r\n .max(200,\"Organisation too Long\")\r\n .required(\"Organisation is required\")\r\n }),\r\n fulladdress: Yup.string()\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.string().min(2,\"Address too Short\")\r\n .max(100,\"Address too Long\")\r\n .required(\"Address is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.string().min(2,\"Address too Short\")\r\n .max(100,\"Address too Long\")\r\n .required(\"Address is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'GP',\r\n then: Yup.string().min(2,\"Address too Short\")\r\n .max(100,\"Address too Long\")\r\n .required(\"Address is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Financial',\r\n then: Yup.string().min(2,\"AddressToo Short\")\r\n .max(100,\"Address too Long\")\r\n .required(\"Address is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Nurse',\r\n then: Yup.string().min(2,\"AddressToo Short\")\r\n .max(100,\"Address too Long\")\r\n .required(\"Address is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Social',\r\n then: Yup.string().min(2,\"AddressToo Short\")\r\n .max(100,\"Address too Long\")\r\n .required(\"Address is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.string().min(2,\"AddressToo Short\")\r\n .max(100,\"Address too Long\")\r\n .required(\"Address is required\"),\r\n }),\r\n abn: Yup.string()\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'GP',\r\n then: Yup.string().min(8,\"ABN too Short\")\r\n .max(20,\"ABN too Long\")\r\n .required(\"ABN is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Financial',\r\n then: Yup.string().min(8,\"ABN too Short\")\r\n .max(20,\"ABN too Long\")\r\n .required(\"ABN is required\"),\r\n }),\r\n providernumber: Yup.string()\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.string().min(2,\"Provider Number too Short\")\r\n .max(255,\"Provider Number too Long\")\r\n .required(\"Provider Number is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.string().min(2,\"Provider Number too Short\")\r\n .max(255,\"Provider Number too Long\")\r\n .required(\"Provider Number is required\"),\r\n }),\r\n insurancenumber: Yup.string()\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.string().min(8,\"Insurance Number too Short\")\r\n .max(20,\"Insurance Number too Long\")\r\n .required(\"Insurance Number is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.string().min(8,\"Insurance Number too Short\")\r\n .max(20,\"Insurance Number too Long\")\r\n .required(\"Insurance Number is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Social',\r\n then: Yup.string().min(8,\"Insurance Number too Short\")\r\n .max(20,\"Insurance Number too Long\")\r\n .required(\"Insurance Number is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Nurse',\r\n then: Yup.string().min(8,\"Insurance Number too Short\")\r\n .max(20,\"Insurance Number too Long\")\r\n .required(\"Insurance Number is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'GP',\r\n then: Yup.string().min(8,\"Insurance Number too Short\")\r\n .max(20,\"Insurance Number too Long\")\r\n .required(\"Insurance Number is required\"),\r\n }),\r\n insuranceexpiry: Yup.date()\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.date().required(\"Insurance Expiry Date is required\").typeError(\"Insurance Expiry Date is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.date().required(\"Insurance Expiry Date is required\").typeError(\"Insurance Expiry Date is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'GP',\r\n then: Yup.date().required(\"Insurance Expiry Date is required\").typeError(\"Insurance Expiry Date is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Nurse',\r\n then: Yup.date().required(\"Insurance Expiry Date is required\").typeError(\"Insurance Expiry Date is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Social',\r\n then: Yup.date().required(\"Insurance Expiry Date is required\").typeError(\"Insurance Expiry Date is required\"),\r\n }),\r\n startedpracticingyear: Yup.number()\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.number().max(2027)\r\n .min(1960)\r\n .required('Year First Practiced is required'),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.number().max(2027)\r\n .min(1960)\r\n .required('Year First Practiced is required'),\r\n }),\r\n psychologistAreasOfInterest: Yup.array()\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.array().min(1, \"Please select at least one area of interest\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.array().min(1, \"Please select at least one area of interest\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Social',\r\n then: Yup.array().min(1, \"Please select at least one area of interest\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Occupational',\r\n then: Yup.array().min(1, \"Please select at least one area of interest\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Provisional',\r\n then: Yup.array().min(1, \"Please select at least one area of interest\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Financial',\r\n then: Yup.array().min(1, \"Please select at least one area of interest\"),\r\n }), \r\n hourlyrate: Yup.number()\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.number().max(1000,\"Full Fee Hourly rate is too High\")\r\n .required(\"Hourly rate is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Social',\r\n then: Yup.number().max(1000,\"Full Fee Hourly rate is too High\")\r\n .required(\"Hourly rate is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Occupational',\r\n then: Yup.number().max(1000,\"Full Fee Hourly rate is too High\")\r\n .required(\"Hourly rate is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.number().max(1000,\"Full Fee Hourly rate is too High\")\r\n .required(\"Full Fee Hourly rate is required\"),\r\n }),\r\n reducedFee: Yup.number()\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => (providertype === 'Psychologist'),\r\n then: Yup.number().max(1000,\"Reduced Fee Hourly rate is too High\")\r\n .min(89,\"Reduced Fee Hourly rate is too Low\")\r\n .required(\"Reduced Fee Hourly rate is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => (providertype === 'Occupational'),\r\n then: Yup.number().max(1000,\"Reduced Fee Hourly rate is too High\")\r\n .min(89,\"Reduced Fee Hourly rate is too Low\")\r\n .required(\"Reduced Fee Hourly rate is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => (providertype === 'Social'),\r\n then: Yup.number().max(1000,\"Reduced Fee Hourly rate is too High\")\r\n .min(89,\"Reduced Fee Hourly rate is too Low\")\r\n .required(\"Reduced Fee Hourly rate is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => (providertype === 'Clinical'),\r\n then: Yup.number().max(1000,\"Reduced Fee Hourly rate is too High\")\r\n .min(89,\"Reduced Fee Hourly rate is too Low\")\r\n .required(\"Reduced Fee Hourly rate is required\"),\r\n }),\r\n supervisorEducation: Yup.string().nullable(true)\r\n .when(['providertype','isSupervisor'], \r\n {\r\n is: (providertype,isSupervisor) => (providertype === 'Psychologist' && isSupervisor === 'Y'),\r\n then: Yup.string().max(100,\"Supervisor Education is too Long\")\r\n .nullable(true)\r\n })\r\n .when(['providertype','isSupervisor'], \r\n {\r\n is: (providertype,isSupervisor) => (providertype === 'Clinical' && isSupervisor === 'Y'),\r\n then: Yup.string().max(100,\"Supervisor Education is too Long\")\r\n .nullable(true)\r\n }),\r\n supervisorHourlyRate: Yup.number().nullable(true)\r\n .when(['providertype','isSupervisor'], \r\n {\r\n is: (providertype,isSupervisor) => (providertype === 'Psychologist' && isSupervisor === 'Y'),\r\n then: Yup.number().max(1000,\"Supervior Fee Hourly rate is too High\")\r\n .min(89,\"Supervior Fee Hourly rate is too Low\")\r\n .nullable(true)\r\n })\r\n .when(['providertype','isSupervisor'], \r\n {\r\n is: (providertype,isSupervisor) => (providertype === 'Clinical' && isSupervisor === 'Y'),\r\n then: Yup.number().max(1000,\"Supervior Fee Hourly rate is too High\")\r\n .min(89,\"Supervior Fee Hourly rate is too Low\")\r\n .nullable(true)\r\n }),\r\n supervisorBio: Yup.string().nullable(true)\r\n .when(['providertype','isSupervisor'], \r\n {\r\n is: (providertype,isSupervisor) => (providertype === 'Psychologist' && isSupervisor === 'Y'),\r\n then: Yup.string().max(3900,\"Supervisor Bio is too Long\")\r\n .nullable(true)\r\n })\r\n .when(['providertype','isSupervisor'], \r\n {\r\n is: (providertype,isSupervisor) => (providertype === 'Clinical' && isSupervisor === 'Y'),\r\n then: Yup.string().max(3900,\"Supervisor Bio is too Long\")\r\n }),\r\n coviuRoomURL: Yup.string().nullable(true)\r\n .when(['teleHealthProvider'],\r\n {\r\n is: (teleHealthProvider) => (teleHealthProvider === 'COVIU'),\r\n then: Yup.string().max(400,'COVIU URL is too long') \r\n }),\r\n waitingRoomURL: Yup.string().nullable(true)\r\n .when(['teleHealthProvider'],\r\n {\r\n is: (teleHealthProvider) => (teleHealthProvider === 'Alternate Meeting'),\r\n then: Yup.string().max(400,'Alternate Meeting URL is too long') \r\n }),\r\n });\r\n\r\n const fileToDataUri = (file) => new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = (event) => {\r\n resolve(event.target.result)\r\n };\r\n reader.readAsDataURL(file);\r\n })\r\n\r\n return (\r\n <>\r\n <Formik\r\n enableReinitialize={true}\r\n initialValues={psychologist}\r\n validationSchema = {validationSchema}\r\n onSubmit={(values, actions) => {\r\n submitForm(values);\r\n actions.setSubmitting(false);\r\n }}\r\n >\r\n {props => {\r\n const { values, errors, touched, handleChange, handleSubmit, setFieldValue, isSubmitting } = props;\r\n const change = (name,e) => { e.persist(); handleChange(e); }; \r\n // function to create image preview by reading file into a URL object \r\n const makePreview = (file) => {\r\n if(!file) {\r\n setPreviewFile('');\r\n return;\r\n }\r\n setcurrentprofilepicture(file); \r\n fileToDataUri(file)\r\n .then(newFile => {\r\n setPreviewFile(newFile)\r\n }) \r\n } \r\n return (\r\n <form noValidate={true} autoComplete=\"off\" onSubmit={!isSubmitting ? handleSubmit : undefined} >\r\n\r\n <Paper style={{ backgroundColor: \"rgb(245,245,245)\", padding: 20 }} >\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-end\">\r\n <Grid item md={6} xs={12}>\r\n <h2>{psychologist.providerdescription} Profile</h2>\r\n </Grid>\r\n <Grid item md={3} xs={6} style={{ fontStyle: \"italic\", fontWeight: 400, textAlign: \"right\", paddingBottom: 4, fontSize: 12 }}>\r\n * indicates required fields\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\"> \r\n {values.message ? (\r\n <Alert severity=\"info\" style={{ marginBottom: 10, marginTop: 8, fontSize: 14 }}>\r\n {values.message}\r\n </Alert>) \r\n : null\r\n }\r\n </Col>\r\n </Row>\r\n <hr style={{ marginTop: 4 }}></hr>\r\n <Row>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>First Name *</Form.Label>\r\n <Form.Control type=\"text\" name=\"firstname\" value={values.firstname} onChange={change.bind(null, \"firstname\")} autoComplete='new-password' isInvalid={touched.firstname && !!errors.firstname} isValid={touched.firstname && !errors.firstname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.firstname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Surname *</Form.Label>\r\n <Form.Control type=\"text\" name=\"surname\" value={values.surname} onChange={change.bind(null, \"surname\")} autoComplete='new-password' isInvalid={touched.surname && !!errors.surname} isValid={touched.surname && !errors.surname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.surname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Phone Number *</Form.Label>\r\n <Form.Control type=\"text\" name=\"mobilephone\" value={values.mobilephone} onChange={change.bind(null, \"mobilephone\")} isInvalid={touched.mobilephone && !!errors.mobilephone} isValid={touched.mobilephone && !errors.mobilephone} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.mobilephone}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label>TimeZone</Form.Label>\r\n <Autocomplete\r\n id=\"profileTimeZone\"\r\n variant=\"outlined\"\r\n options={timeZone}\r\n getOptionLabel={(option) => option.name || ''}\r\n value={timeZone.find(v => v.systemName === values.timeZone) || ''}\r\n onChange={(event, newValue) => setFieldValue(\"timeZone\", newValue.systemName)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"TimeZoneSelector\"\r\n style={{backgroundColor: \"white\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Gender</Form.Label>\r\n <Form.Control as=\"select\" name=\"gender\" value={values.gender} onChange={change.bind(null, \"gender\")} >\r\n <option value=\"Prefer not to say\">Prefer not to say</option>\r\n <option value=\"Female\">Female</option>\r\n <option value=\"Male\">Male</option>\r\n <option value=\"Other\">Other</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Email *</Form.Label>\r\n <Form.Control type=\"text\" name=\"email\" value={values.email} onChange={change.bind(null, \"email\")} isInvalid={touched.email && !!errors.email} isValid={touched.email && !errors.email} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.email}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n {psychologist && (psychologist.providertype === 'Psychologist' || psychologist.providertype === 'Clinical') ?\r\n <>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Education</Form.Label>\r\n <Form.Control type=\"text\" name=\"education\" value={values.education} onChange={change.bind(null, \"education\")} isInvalid={touched.education && !!errors.education} isValid={touched.education && !errors.education} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.education}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col> \r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Year First Practiced</Form.Label>\r\n <Form.Control type=\"text\" name=\"startedpracticingyear\" value={values.startedpracticingyear} onChange={change.bind(null, \"startedpracticingyear\")} isInvalid={touched.startedpracticingyear && !!errors.startedpracticingyear} isValid={touched.startedpracticingyear && !errors.startedpracticingyear} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.startedpracticingyear}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col> \r\n </>\r\n :\r\n null\r\n }\r\n </Row>\r\n <Row>\r\n <Col md=\"12\" className=\"quill-field\">\r\n <Form.Group >\r\n <Form.Label>Bio </Form.Label>\r\n <ReactQuill \r\n theme=\"snow\"\r\n value={values.bio}\r\n onChange={(newValue, editor)=>setFieldValue(\"bio\", newValue)} \r\n />\r\n {/* <Editor apiKey='wnbo4skoom9pnqmbfdjvwn8xdl1nfjtwhc2ofsqb1myqn5lo'\r\n value={values.bio}\r\n onEditorChange={(newValue, editor)=>setFieldValue(\"bio\", newValue)}\r\n init={{ branding: false, statusbar: false, height: 500 }}\r\n /> */}\r\n {/* <Form.Control as=\"textarea\" rows={4} type=\"text\" name=\"bio\" value={values.bio} onChange={change.bind(null, \"bio\")} isInvalid={touched.bio && !!errors.bio} isValid={touched.bio && !errors.bio} autoComplete='new-password' /> */}\r\n <Form.Control.Feedback type=\"invalid\">{errors.bio}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {psychologist && (psychologist.providertype === 'Psychologist' || psychologist.providertype === 'Clinical') ? \r\n <>\r\n <h4>Supervision Details</h4><Form.Label onClick={() => registrationView(values,'Supervision')} style={{ marginLeft:10, color: 'blue', cursor:'pointer' }}>(Preview Supervision)</Form.Label>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"10\">\r\n <Form.Group>\r\n <Form.Label style={{ fontWeight: 500 }}>Do you offer Supervision sessions to Other Providers? </Form.Label>\r\n <Form.Check id=\"supervsior-nosupervision\" name=\"isSupervisor\" type=\"radio\" style={{ marginBottom: 8 }} >\r\n <Form.Check.Input name=\"isSupervisor\" type=\"radio\" value='N' checked={values.isSupervisor === 'N' ? true : false} onChange={change.bind(null, \"isSupervisor\")} />\r\n <Form.Check.Label style={{marginLeft: 12 }}>No</Form.Check.Label>\r\n </Form.Check>\r\n <Form.Check id=\"supervisor-supervision\" name=\"isSupervisor\" type=\"radio\" style={{ marginBottom: 8 }} >\r\n <Form.Check.Input name=\"isSupervisor\" type=\"radio\" value='Y' checked={values.isSupervisor === 'Y' ? true : false} onChange={change.bind(null, \"isSupervisor\")} />\r\n <Form.Check.Label style={{marginLeft: 12 }}>​Yes</Form.Check.Label>\r\n </Form.Check>\r\n {values.isSupervisor === 'Y' ?\r\n <>\r\n <Row>\r\n <Col md=\"12\" className=\"quill-field\">\r\n <Form.Group >\r\n <Form.Label>Supervisor Bio (if blank standard Bio will be displayed)</Form.Label>\r\n <ReactQuill \r\n theme=\"snow\"\r\n value={values.supervisorBio}\r\n onChange={(newValue, editor)=>setFieldValue(\"supervisorBio\", newValue)} \r\n />\r\n {/* <Editor apiKey='wnbo4skoom9pnqmbfdjvwn8xdl1nfjtwhc2ofsqb1myqn5lo'\r\n value={values.supervisorBio}\r\n onEditorChange={(newValue, editor)=>setFieldValue(\"supervisorBio\", newValue)}\r\n init={{ branding: false, statusbar: false, height: 500 }}\r\n /> */}\r\n {/* <Form.Control as=\"textarea\" rows={4} type=\"text\" name=\"supervisorBio\" value={values.supervisorBio} onChange={change.bind(null, \"supervisorBio\")} isInvalid={touched.supervisorBio && !!errors.supervisorBio} isValid={touched.supervisorBio && !errors.supervisorBio} autoComplete='new-password' /> */}\r\n <Form.Control.Feedback type=\"invalid\">{errors.supervisorBio}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"8\">\r\n <Form.Group >\r\n <Form.Label>Supervisor Education (if blank standard Education will be displayed)</Form.Label>\r\n <Form.Control type=\"text\" name=\"supervisorEducation\" value={values.supervisorEducation} onChange={change.bind(null, \"supervisorEducation\")} isInvalid={touched.supervisorEducation && !!errors.supervisorEducation} isValid={touched.supervisorEducation && !errors.supervisorEducation} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.supervisorEducation}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group>\r\n <Form.Label >Supervisor Rate (if blank Full Fee Rate will be used)</Form.Label>\r\n <InputGroup>\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>$</InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control type=\"text\" name=\"supervisorHourlyRate\" value={values.supervisorHourlyRate} onChange={change.bind(null, \"supervisorHourlyRate\")} autoComplete='new-password' isInvalid={touched.supervisorHourlyRate && !!errors.supervisorHourlyRate} isValid={touched.supervisorHourlyRate && !errors.supervisorHourlyRate}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.supervisorHourlyRate}</Form.Control.Feedback>\r\n </InputGroup>\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Available For</Form.Label>\r\n <Row>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {supervisionAreas.map(row => {\r\n if(row.index <= supervisionAreas.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = values.supervisorAreas.includes(row.id);\r\n return (\r\n <ListItem key={`S${row.id}`} role={undefined} dense button \r\n onClick={\r\n e => {\r\n const idx = values.supervisorAreas.indexOf(row.id);\r\n if (idx === -1) \r\n {\r\n var currentValue1 = values.supervisorAreas;\r\n currentValue1.push(row.id);\r\n setFieldValue(\"supervisorAreas\", currentValue1);\r\n } \r\n else \r\n {\r\n var currentValue2 = values.supervisorAreas;\r\n currentValue2.splice(idx, 1);\r\n setFieldValue(\"supervisorAreas\", currentValue2);\r\n }\r\n }}\r\n >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{row.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })\r\n }\r\n </List>\r\n </Col>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {supervisionAreas.map(row => {\r\n if(row.index > supervisionAreas.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = values.supervisorAreas.includes(row.id);\r\n return (\r\n <ListItem key={`S${row.id}`} role={undefined} dense button onClick={\r\n e => {\r\n const idx = values.supervisorAreas.indexOf(row.id);\r\n if (idx === -1) \r\n {\r\n var currentValue3 = values.supervisorAreas;\r\n currentValue3.push(row.id);\r\n setFieldValue(\"supervisorAreas\", currentValue3);\r\n } \r\n else \r\n {\r\n var currentValue4 = values.supervisorAreas;\r\n currentValue4.splice(idx, 1);\r\n setFieldValue(\"supervisorAreas\", currentValue4);\r\n }\r\n }}\r\n >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{row.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })\r\n }\r\n </List>\r\n </Col>\r\n </Row>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Endorsed In</Form.Label>\r\n <Row>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {endorsedSupervisionAreas.map(row => {\r\n if(row.index <= endorsedSupervisionAreas.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = values.supervisorAreas.includes(row.id);\r\n return (\r\n <ListItem key={`S${row.id}`} role={undefined} dense button \r\n onClick={\r\n e => {\r\n const idx = values.supervisorAreas.indexOf(row.id);\r\n if (idx === -1) \r\n {\r\n var currentValue1 = values.supervisorAreas;\r\n currentValue1.push(row.id);\r\n setFieldValue(\"supervisorAreas\", currentValue1);\r\n } \r\n else \r\n {\r\n var currentValue2 = values.supervisorAreas;\r\n currentValue2.splice(idx, 1);\r\n setFieldValue(\"supervisorAreas\", currentValue2);\r\n }\r\n }}\r\n >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{row.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })\r\n }\r\n </List>\r\n </Col>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {endorsedSupervisionAreas.map(row => {\r\n if(row.index > endorsedSupervisionAreas.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = values.supervisorAreas.includes(row.id);\r\n return (\r\n <ListItem key={`S${row.id}`} role={undefined} dense button onClick={\r\n e => {\r\n const idx = values.supervisorAreas.indexOf(row.id);\r\n if (idx === -1) \r\n {\r\n var currentValue3 = values.supervisorAreas;\r\n currentValue3.push(row.id);\r\n setFieldValue(\"supervisorAreas\", currentValue3);\r\n } \r\n else \r\n {\r\n var currentValue4 = values.supervisorAreas;\r\n currentValue4.splice(idx, 1);\r\n setFieldValue(\"supervisorAreas\", currentValue4);\r\n }\r\n }}\r\n >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{row.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })\r\n }\r\n </List>\r\n </Col>\r\n </Row>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n\r\n </>\r\n :\r\n null\r\n }\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n {psychologist && (psychologist.providertype !== 'Provisional') ? \r\n <> \r\n {psychologist && (psychologist.providertype === 'Financial' ) ? \r\n <h4>Organisation Details</h4>\r\n :\r\n <h4>Practice Details</h4>\r\n }\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n {psychologist && (psychologist.providertype === 'Financial' ) ? \r\n <Form.Label>Organisation Name</Form.Label>\r\n :\r\n <Form.Label>Practice Name</Form.Label>\r\n }\r\n <Form.Control type=\"text\" name=\"practicename\" value={values.practicename} onChange={change.bind(null, \"practivename\")} autoComplete='new-password' isInvalid={touched.practicename && !!errors.practicename} isValid={touched.practicename && !errors.practicename}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.practicename}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>ABN</Form.Label>\r\n <Form.Control type=\"text\" name=\"abn\" value={values.abn} onChange={change.bind(null, \"abn\")} autoComplete='new-password' isInvalid={touched.abn && !!errors.abn} isValid={touched.abn && !errors.abn}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.abn}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label>Practice Address or Town (start typing to search) *</Form.Label>\r\n <PlacesAutoComplete \r\n currentID={psychologist.id}\r\n currentfulladdress={psychologist.fulladdress}\r\n setcurrentfulladdress = {(value) => setFieldValue(\"fulladdress\", value)}\r\n setcurrentLatitude = {(value) => setFieldValue(\"latitude\", value)} \r\n setcurrentLongitude = {(value) => setFieldValue(\"longitude\", value)}\r\n setcurrentPostCode = {(value) => setFieldValue(\"postcode\", value)}\r\n isInvalid={touched.fulladdress && !!errors.fulladdress} \r\n isValid={touched.fulladdress && !errors.fulladdress} \r\n />\r\n {touched.fulladdress && !!errors.fulladdress ? (<p className='error-help'>{errors.fulladdress}</p>) : ''}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n <h4>Professional Details</h4>\r\n <hr></hr>\r\n {psychologist && (psychologist.providertype === 'Psychologist' || psychologist.providertype === 'Clinical' || psychologist.providertype === 'GP' || psychologist.providertype === 'Provisional') ?\r\n <>\r\n <Row>\r\n {psychologist && (psychologist.providertype === 'Psychologist' || psychologist.providertype === 'Clinical' || psychologist.providertype === 'Provisional') ? \r\n <>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>AHPRA Registration Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"ahpraRegistrationNo\" value={values.ahpraRegistrationNo} onChange={change.bind(null, \"ahpraRegistrationNo\")} autoComplete='new-password' isInvalid={touched.ahpraRegistrationNo && !!errors.ahpraRegistrationNo} isValid={touched.ahpraRegistrationNo && !errors.ahpraRegistrationNo}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.ahpraRegistrationNo}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </>\r\n :\r\n null\r\n }\r\n {psychologist && (psychologist.providertype === 'Psychologist' || psychologist.providertype === 'Clinical' || psychologist.providertype === 'GP') ? \r\n <>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Provider Number *</Form.Label>\r\n <Form.Control type=\"text\" name=\"providernumber\" value={values.providernumber} onChange={change.bind(null, \"providernumber\")} autoComplete='new-password' isInvalid={touched.providernumber && !!errors.providernumber} isValid={touched.providernumber && !errors.providernumber}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.providernumber}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </>\r\n :\r\n null\r\n }\r\n {psychologist && psychologist.providertype !== 'Provisional' ? \r\n <>\r\n <Col md=\"2\">\r\n <Form.Group>\r\n <Form.Label>Create Consent Forms on Bulk Billing Booking*</Form.Label>\r\n <Form.Control as=\"select\" name=\"autoBulkBillingConsentForm\" value={values.autoBulkBillingConsentForm} onChange={change.bind(null, \"autoBulkBillingConsentForm\")} >\r\n <option value=\"N\">No</option>\r\n <option value=\"Y\">Yes</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </>\r\n :\r\n null\r\n }\r\n </Row>\r\n {psychologist && psychologist.providertype !== 'Provisional' ? \r\n <Row>\r\n <Col md=\"2\">\r\n <Form.Group>\r\n <Form.Label>Insurance Number *</Form.Label>\r\n <Form.Control type=\"text\" name=\"insurancenumber\" value={values.insurancenumber} onChange={change.bind(null, \"insurancenumber\")} autoComplete='new-password' isInvalid={touched.insurancenumber && !!errors.insurancenumber} isValid={touched.insurancenumber && !errors.insurancenumber}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.insurancenumber}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Insurance Expiry</Form.Label>\r\n <MuiPickersUtilsProvider utils={DateFnsUtils} >\r\n <KeyboardDatePicker\r\n name='insuranceexpiry'\r\n inputVariant=\"outlined\"\r\n format=\"yyyy-MM-dd\"\r\n margin=\"dense\"\r\n id='insuranceexpiry'\r\n style={{marginTop: 28, marginLeft: -110}}\r\n value={values.insuranceexpiry}\r\n autoOk={true}\r\n size=\"small\"\r\n onChange={(newValue) => setFieldValue('insuranceexpiry', newValue)}\r\n className=\"formquestion-datepicker summary-date\" \r\n InputProps={{ classes: { input: 'input-date-picker' }, }}\r\n />\r\n </MuiPickersUtilsProvider> \r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group>\r\n {psychologist && (psychologist.providertype === 'Social' || psychologist.providertype === 'Nurse') ?\r\n <Form.Label>Mental Health Certification</Form.Label>\r\n :\r\n <Form.Label>Certificate of Currency</Form.Label>\r\n }\r\n <div style={{ width: \"100%\" }}>\r\n <InsuranceDownload documentLink={values.documentLink} />\r\n </div>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group>\r\n <Form.Label>Upload New:</Form.Label>\r\n <Form.Control type=\"file\" key={insuranceFileClear} name=\"newInsuranceFile\" onChange={(event) => setFieldValue('newInsuranceFile', event.currentTarget.files[0])} isInvalid={touched.newInsuranceFile && !!errors.newInsuranceFile} isValid={touched.newInsuranceFile && !errors.newInsuranceFile} className=\"form-control\" style={{ paddingTop: 6, paddingLeft: 6 }} />\r\n <Form.Control.Feedback type=\"invalid\">{errors.newInsuranceFile}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n :\r\n null\r\n }\r\n {values.specialisttype === 'nthqldphn' ?\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group>\r\n <Form.Label>Offer Face to Face Booking (when face to face availability is set)</Form.Label>\r\n <Form.Control as=\"select\" name=\"facetoFaceBooking\" value={values.facetoFaceBooking} onChange={change.bind(null, \"facetoFaceBooking\")} >\r\n <option value=\"N\">No</option>\r\n <option value=\"Y\">Yes</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n :\r\n null\r\n }\r\n </>\r\n :\r\n null\r\n }\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Areas of Interest (Select all that apply) *</Form.Label>\r\n <Autocomplete\r\n id=\"areasOfInterest\"\r\n variant=\"outlined\"\r\n multiple\r\n options={aoi_focus}\r\n getOptionLabel={(option) => option.issue || ''}\r\n value={values.areasOfInterest}\r\n // onChange={(event, newValue) => setcurrentAreasOfInterest(newValue)}\r\n onChange={(e, newValue) => {\r\n setFieldValue(\"areasOfInterest\", newValue);\r\n }}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: \"\", }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"AOISelector\"\r\n style={{backgroundColor: \"white\", margin: 0, padding: 0}}\r\n error={touched.areasOfInterest && !!errors.areasOfInterest} \r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n {touched.areasOfInterest && !!errors.areasOfInterest ? (<p className='error-help'>{errors.areasOfInterest}</p>) : ''}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {psychologist && (psychologist.providertype !== 'GP' ) ? \r\n <>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Key Areas (Select all that apply) *</Form.Label>\r\n <Autocomplete\r\n id=\"keyAreas\"\r\n variant=\"outlined\"\r\n multiple\r\n options={aoi_other}\r\n getOptionLabel={(option) => option.issue || ''}\r\n value={values.keyAreas}\r\n // onChange={(event, newValue) => setcurrentAreasOfInterest(newValue)}\r\n onChange={(e, newValue) => {\r\n setFieldValue(\"keyAreas\", newValue);\r\n }}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: \"\", }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"KeyAOISelector\"\r\n style={{backgroundColor: \"white\", margin: 0, padding: 0}}\r\n error={touched.keyAreas && !!errors.keyAreas} \r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n {touched.keyAreas && !!errors.keyAreas ? (<p className='error-help'>{errors.keyAreas}</p>) : ''}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Therapy Types (Select all that apply) *</Form.Label>\r\n <Autocomplete\r\n id=\"therapytypes\"\r\n variant=\"outlined\"\r\n multiple\r\n options={aoi_tt}\r\n getOptionLabel={(option) => option.issue || ''}\r\n value={values.therapytypes}\r\n // onChange={(event, newValue) => setcurrentAreasOfInterest(newValue)}\r\n onChange={(e, newValue) => {\r\n setFieldValue(\"therapytypes\", newValue);\r\n }}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: \"\", }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"TherapyTypeAOISelector\"\r\n style={{backgroundColor: \"white\", margin: 0, padding: 0}}\r\n error={touched.therapytypes && !!errors.therapytypes} \r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n {touched.therapytypes && !!errors.therapytypes ? (<p className='error-help'>{errors.therapytypes}</p>) : ''}\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Provider Interests (Select all that apply) *</Form.Label>\r\n <Autocomplete\r\n id=\"keyAreas\"\r\n variant=\"outlined\"\r\n multiple\r\n options={aoi_providerinterest}\r\n getOptionLabel={(option) => option.issue || ''}\r\n value={values.providerInterest}\r\n // onChange={(event, newValue) => setcurrentAreasOfInterest(newValue)}\r\n onChange={(e, newValue) => {\r\n setFieldValue(\"providerInterest\", newValue);\r\n }}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: \"\", }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"ProviderInterestAOISelector\"\r\n style={{backgroundColor: \"white\", margin: 0, padding: 0}}\r\n error={touched.keyAreas && !!errors.keyAreas} \r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n {touched.keyAreas && !!errors.keyAreas ? (<p className='error-help'>{errors.keyAreas}</p>) : ''}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n {aoi_program && aoi_program.length > 0 ?\r\n <>\r\n <h4>Open Programs</h4>\r\n <hr></hr>\r\n <Row style={{ paddingBottom: 40}}>\r\n <List className={classes.root} >\r\n {aoi_program.map(program => {\r\n return (\r\n <ListItem key={program.id} dense button style={{display:'flex', minWidth:'100%'}}> \r\n <ListItemIcon style={{ minWidth: 60 }}>\r\n <StarIcon/>\r\n </ListItemIcon>\r\n <ListItemText id={program.id} style={{ fontSize: 12, paddingRight: 160 }} \r\n disableTypography \r\n primary={<Typography>{program.programName} (Area of Interest: {program.issue})</Typography>} \r\n className={classes.link} />\r\n <ListItemSecondaryAction >\r\n <Button \r\n variant=\"primary\" \r\n size=\"sm\" \r\n style={{ marginLeft: 5, }} \r\n onClick={() => loadCustomBio(program.program)}\r\n >\r\n Add/Update Custom Bio\r\n </Button> \r\n </ListItemSecondaryAction>\r\n </ListItem>\r\n );\r\n })}\r\n </List>\r\n </Row>\r\n </>\r\n : \r\n null\r\n }\r\n {psychologist && (psychologist.providertype === 'Psychologist' \r\n || psychologist.providertype === 'Clinical'\r\n || psychologist.providertype === 'Social'\r\n || psychologist.providertype === 'Nurse'\r\n || psychologist.providertype ==='Occupational') ? \r\n <>\r\n <h4>Client Billing Settings </h4>\r\n <Form.Label onClick={() => registrationView(values,'Full Fee')} style={{ marginLeft:10, color: 'blue', cursor:'pointer' }}>(Preview Full Fee)</Form.Label><Form.Label onClick={() => registrationView(values,'Reduced Gap')} style={{ marginLeft:10, color: 'blue', cursor:'pointer' }}>(Preview Reduced Fee)</Form.Label>\r\n <hr></hr>\r\n <Alert severity=\"info\" style={{ marginBottom: 10, marginTop: 8, fontSize: 14 }}>\r\n <p>Please use the review button above to check client view.</p>\r\n </Alert>\r\n <Row>\r\n <Col md=\"2\">\r\n <Form.Group>\r\n <Form.Label >Full Fee Rate (Total)*</Form.Label>\r\n <InputGroup>\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>$</InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control type=\"text\" name=\"hourlyrate\" value={values.hourlyrate} onChange={change.bind(null, \"hourlyrate\")} autoComplete='new-password' isInvalid={touched.hourlyrate && !!errors.hourlyrate} isValid={touched.hourlyrate && !errors.hourlyrate}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.hourlyrate}</Form.Control.Feedback>\r\n </InputGroup>\r\n </Form.Group>\r\n </Col>\r\n {/* <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Full Fee Gap (Override)</Form.Label>\r\n <InputGroup>\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>$</InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control type=\"text\" name=\"hourlyRateOverrideGap\" value={values.hourlyRateOverrideGap} onChange={change.bind(null, \"hourlyRateOverrideGap\")} autoComplete='new-password' isInvalid={touched.hourlyRateOverrideGap && !!errors.hourlyRateOverrideGap} isValid={touched.reducedFeeOverrideGap && !errors.reducedFeeOverrideGap}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.hourlyRateOverrideGap}</Form.Control.Feedback>\r\n </InputGroup>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Full Fee Rebate (Override)</Form.Label>\r\n <InputGroup>\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>$</InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control type=\"text\" name=\"hourlyRateOverrideRebate\" value={values.hourlyRateOverrideRebate} onChange={change.bind(null, \"hourlyRateOverrideRebate\")} autoComplete='new-password' isInvalid={touched.hourlyRateOverrideRebate && !!errors.hourlyRateOverrideRebate} isValid={touched.hourlyRateOverrideRebate && !errors.hourlyRateOverrideRebate}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.hourlyRateOverrideRebate}</Form.Control.Feedback>\r\n </InputGroup>\r\n </Form.Group>\r\n </Col> */}\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Label>Reduced Fee Rate (Total)* </Form.Label>\r\n <Form.Label style={{ fontWeight:600 }}> For clients in financial hardship (ideally between $10 and $45 out of pocket) </Form.Label>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <InputGroup>\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>$</InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control type=\"text\" name=\"reducedFee\" value={values.reducedFee} onChange={change.bind(null, \"reducedFee\")} autoComplete='new-password' isInvalid={touched.reducedFee && !!errors.reducedFee} isValid={touched.reducedFee && !errors.reducedFee}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.reducedFee}</Form.Control.Feedback>\r\n </InputGroup>\r\n </Form.Group>\r\n </Col>\r\n {/* <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Reduced Fee Gap (Override)</Form.Label>\r\n <InputGroup>\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>$</InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control type=\"text\" name=\"reducedFeeOverrideGap\" value={values.reducedFeeOverrideGap} onChange={change.bind(null, \"reducedFeeOverrideGap\")} autoComplete='new-password' isInvalid={touched.reducedFeeOverrideGap && !!errors.reducedFeeOverrideGap} isValid={touched.reducedFeeOverrideGap && !errors.reducedFeeOverrideGap}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.reducedFeeOverrideGap}</Form.Control.Feedback>\r\n </InputGroup>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Reduced Fee Rebate (Override)</Form.Label>\r\n <InputGroup>\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>$</InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control type=\"text\" name=\"reducedFeeOverrideRebate\" value={values.reducedFeeOverrideRebate} onChange={change.bind(null, \"reducedFeeOverrideRebate\")} autoComplete='new-password' isInvalid={touched.reducedFeeOverrideRebate && !!errors.reducedFeeOverrideRebate} isValid={touched.reducedFeeOverrideRebate && !errors.reducedFeeOverrideRebate}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.reducedFeeOverrideRebate}</Form.Control.Feedback>\r\n </InputGroup>\r\n </Form.Group>\r\n </Col> */}\r\n </Row>\r\n <Row>\r\n <Form.Label style={{ fontWeight:300, marginLeft:10 }}>*Set your Reduced Fee to 0 for client bulk billing as reduced fee option</Form.Label>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Label style={{ marginTop:20 }}>Check the box below if you want this text to appear alongside your fees</Form.Label>\r\n <Form.Group>\r\n <Checkbox aria-label='Offer Client Pricing Flexibility' name='isReducedFee' value={values.isReducedFee === 'Y' ? true : false} onChange={change.bind(null, 'isReducedFee')} style={{ paddingTop: 6, paddingLeft: 0 }} />\r\n <span style={{ fontWeight:600 }} >Some flexibility, depending on client circumstances</span>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n <h4>Platform Provider Type</h4>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Control as=\"select\" name='providertype' value={values.providertype} onChange={change.bind(null, \"providertype\")}>\r\n <option value=\"Psychologist\">Psychologist</option>\r\n <option value=\"Financial\">Financial Counsellor</option>\r\n <option value=\"Clinical\">Clinical Psychologist</option>\r\n <option value=\"GP\">GP</option>\r\n <option value=\"Provisional\">Provisional Psychologist</option>\r\n <option value=\"Social\">MH Social Worker</option>\r\n <option value=\"Nurse\">Mental Health Nurse</option>\r\n <option value=\"Occupational\">Occupational Therapist</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {psychologist && (psychologist.providertype === 'Psychologist' || psychologist.providertype === 'Social' || psychologist.providertype === 'Nurse' || psychologist.providertype === 'Clinical' || psychologist.providertype === 'GP' || psychologist.providertype === 'Occupational') ?\r\n <>\r\n <h4>Tyro</h4>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label> API Key</Form.Label>\r\n <Form.Control type=\"text\" name=\"APIKey\" value={values.medipassapikey} readOnly />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\" style={{ paddingTop: 29}}>\r\n \r\n <Button \r\n variant=\"primary\" \r\n size=\"sm\" \r\n style={{ marginLeft: 5, }} \r\n onClick={() => loadAPIKey()}\r\n >\r\n Update APIKey \r\n </Button>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>TeleConference Provider Selection</Form.Label>\r\n <Form.Control as=\"select\" name=\"teleHealthProvider\" value={values.teleHealthProvider} onChange={change.bind(null, \"teleHealthProvider\")} >\r\n <option value=\"COVIU\">COVIU</option>\r\n <option value=\"Alternate Meeting\">Other Meeting Room</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"5\">\r\n <Form.Group >\r\n <Form.Label>COVIU URL</Form.Label>\r\n <Form.Control type=\"text\" name=\"coviuRoomURL\" value={values.coviuRoomURL} onChange={change.bind(null, \"coviuRoomURL\")} autoComplete='new-password' isInvalid={touched.coviuRoomURL && !!errors.coviuRoomURL} isValid={touched.coviuRoomURL && !errors.coviuRoomURL}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.coviuRoomURL}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Alternate link (Zoom etc)</Form.Label>\r\n <Form.Control type=\"text\" name=\"waitingRoomURL\" value={values.waitingRoomURL} onChange={change.bind(null, \"waitingRoomURL\")} autoComplete='new-password' isInvalid={touched.waitingRoomURL && !!errors.waitingRoomURL} isValid={touched.waitingRoomURL && !errors.waitingRoomURL}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.waitingRoomURL}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <h4>Login Details (Leave blank unless updating password)</h4>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>New Password</Form.Label>\r\n <Form.Control type=\"password\" name=\"profilePassword\" value={values.profilePassword} autoComplete='new-password' onChange={change.bind(null, \"profilePassword\")} isInvalid={touched.profilePassword && !!errors.profilePassword} isValid={touched.profilePassword && !errors.profilePassword} />\r\n <Form.Control.Feedback type=\"invalid\">{errors.profilePassword}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>New Confirm Password</Form.Label>\r\n <Form.Control type=\"password\" name=\"profilePasswordConfirmation\" value={values.profilePasswordConfirmation} onChange={change.bind(null, \"profilePasswordConfirmation\")} isInvalid={touched.profilePasswordConfirmation && !!errors.profilePasswordConfirmation} isValid={touched.profilePasswordConfirmation && !errors.profilePasswordConfirmation} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.profilePasswordConfirmation}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <h4>Profile Photo</h4>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"10\">\r\n <Image src={previewFile ? previewFile : (values.imageURL ? `https://${storageAccountName}.blob.core.windows.net/${containerName}/${values.imageURL}` : null)} style={{ maxHeight: 400, marginBottom: 30 }} />\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"10\">\r\n <Form.Group>\r\n <Form.Label>Upload New Profile Photo</Form.Label>\r\n <Form.Control type=\"file\" name=\"newProfilePicture\" onChange={(event) => makePreview(event.target.files[0])} isInvalid={touched.newProfilePicture && !!errors.newProfilePicture} isValid={touched.newProfilePicture && !errors.newProfilePicture} />\r\n <Form.Control.Feedback type=\"invalid\">{errors.newProfilePicture}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <ErrorsNotification errors={errors} touched={touched} />\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item md={3} xs={6}>\r\n \r\n </Grid>\r\n <Grid item md={3} xs={6} style={{ textAlign: 'right' }}>\r\n {!KTUtil.isEmpty(errors) && <div style={{ color: 'red', padding: 8 }}>There are incomplete fields above!</div>}\r\n <Button variant=\"primary\" type=\"submit\" >\r\n Submit\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n </Paper>\r\n </form>\r\n )\r\n }}\r\n </Formik>\r\n\r\n\r\n <Modal show={showAPIKey} onHide={handleAPIKeyClose} centered>\r\n <Modal.Header closeButton className=\"apiKey-modal\">\r\n <Modal.Title>Update Tyro APIKey Details</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"apiKey-modal\">\r\n <APIKeyForm \r\n referenceID={psychologist.id}\r\n onCloseAPIKey={handleAPIKeyClose}\r\n />\r\n </Modal.Body>\r\n </Modal>\r\n\r\n <Modal show={showRegistrationView} onHide={handleRegistrationViewClose} dialogClassName=\"providerRegistrationView-modal\">\r\n <Modal.Header closeButton className=\"providerRegistrationView-modal\">\r\n <Modal.Title>Client Registration View</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"providerRegistrationView-modal\">\r\n <Grid item md={12} style={{ height: 710, width: \"100%\", overflowY: \"scroll\", paddingLeft: 20, backgroundColor: \"rgb(255,255,255)\" }}>\r\n <Masonry\r\n breakpointCols={1}\r\n className=\"my-masonry-grid\"\r\n columnClassName=\"my-masonry-grid_column\">\r\n <Card className={classes.root} variant=\"outlined\" key={psychologist.id}>\r\n <CardMedia\r\n className={classes.media}\r\n image={`https://${storageAccountName}.blob.core.windows.net/${containerName}/${providerRegistrationView.imageURL}`}\r\n title=\"Psychologist\"\r\n />\r\n <CardContent>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item sm={12}>\r\n <Typography variant=\"h5\" component=\"h3\">\r\n {providerRegistrationView.firstname} {providerRegistrationView.surname} (Next available: Next Available)\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n {(providerRegistrationView.providertype !== 'GP' && providerRegistrationView.providertype !== 'Provisional') ?\r\n <>\r\n {currentPaymentType === 'Supervision' ?\r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={6} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={6} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {providerRegistrationView.supervisorHourlyRate}\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n {currentPaymentType === 'Full Fee' ?\r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={6} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={6} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {providerRegistrationView.hourlyRateOverrideGap && providerRegistrationView.hourlyRateOverrideGap !== '0' ? providerRegistrationView.hourlyRateOverrideGap : providerRegistrationView.standardFeeOutOfPocket }\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={12}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay ${providerRegistrationView.hourlyrate} on the day \r\n </Typography>\r\n <Typography>\r\n Receive back {providerRegistrationView.hourlyRateOverrideRebate && providerRegistrationView.hourlyRateOverrideRebate !== '0' ? providerRegistrationView.hourlyRateOverrideRebate : providerRegistrationView.medicareRebate} from Medicare\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n {currentPaymentType === 'Reduced Gap' ?\r\n <>\r\n {providerRegistrationView.isReducedFee === 'Y' ? \r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={6} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600, textAlign: \"top\"}}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={6} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {providerRegistrationView.reducedFeeOverrideGap && providerRegistrationView.reducedFeeOverrideGap !== '0' ? providerRegistrationView.reducedFeeOverrideGap : providerRegistrationView.reducedFeeOutOfPocket }\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={12} >\r\n { providerRegistrationView.reducedFee === '0' ?\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay $0 on the day\r\n </Typography>\r\n :\r\n <>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay ${providerRegistrationView.reducedFee} on the day\r\n </Typography>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n Receive back {providerRegistrationView.reducedFeeOverrideRebate && providerRegistrationView.reducedFeeOverrideRebate !== '0' ? providerRegistrationView.reducedFeeOverrideRebate : providerRegistrationView.medicareRebate} from Medicare\r\n </Typography>\r\n </>\r\n }\r\n </Grid>\r\n { providerRegistrationView.reducedFee !== '0' ?\r\n <Grid item sm={12}>\r\n <Typography variant=\"subtitle2\" style={{ fontWeight:300, fontStyle: 'italic' }}>\r\n Note this provider offers some flexibility, depending on client circumstances\r\n </Typography>\r\n </Grid>\r\n :\r\n null\r\n }\r\n </Grid>\r\n </>\r\n :\r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={6} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600, textAlign: \"top\" }}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={6} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {providerRegistrationView.reducedFeeOverrideGap && providerRegistrationView.reducedFeeOverrideGap !== '0' ? providerRegistrationView.reducedFeeOverrideGap : providerRegistrationView.reducedFeeOutOfPocket }\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={12} >\r\n { providerRegistrationView.reducedFee === '0' ?\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay $0 on the day\r\n </Typography>\r\n :\r\n <>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay ${providerRegistrationView.reducedFee} on the day\r\n </Typography>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n Receive back {providerRegistrationView.reducedFeeOverrideRebate && providerRegistrationView.reducedFeeOverrideRebate !== '0' ? providerRegistrationView.reducedFeeOverrideRebate : providerRegistrationView.medicareRebate} from Medicare\r\n </Typography>\r\n </>\r\n }\r\n </Grid>\r\n </Grid>\r\n </>\r\n }\r\n </>\r\n :\r\n null\r\n } \r\n {currentPaymentType !== 'Supervision' ?\r\n <Grid container style={{ marginBottom: 15, marginTop: 10 }}>\r\n {providerRegistrationView.areasOfInterest.map((row) => {return (<Chip size=\"small\" key={`AOI${row.id}`} variant=\"outlined\" label={row.issue} style={{ margin: 2 }} />)})}\r\n </Grid>\r\n :\r\n null\r\n }\r\n </>\r\n :\r\n null\r\n }\r\n <Typography className={classes.pos} color=\"textSecondary\">\r\n <br />\r\n </Typography>\r\n <Grid container>\r\n {currentPaymentType === 'Supervision' ?\r\n <>\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={providerRegistrationView.supervisorBio.substring(0,700)} />\r\n {providerRegistrationView.supervisorBio.length > 700 ?\r\n <>\r\n ...\r\n <Badge variant=\"secondary\" onClick={()=>moreProviderBio(providerRegistrationView.fullname, providerRegistrationView.supervisorBio)} style={{ marginRight: 5, cursor: 'pointer' }}>\r\n more\r\n </Badge>\r\n </>\r\n :\r\n null\r\n }\r\n </Typography>\r\n </>\r\n :\r\n <>\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={providerRegistrationView.bio.substring(0,700)} />\r\n {providerRegistrationView.bio.length > 700 ?\r\n <>\r\n ...\r\n <Badge variant=\"secondary\" onClick={()=>moreProviderBio(providerRegistrationView.fullname, providerRegistrationView.bio)} style={{ marginRight: 5, cursor: 'pointer' }}>\r\n more\r\n </Badge>\r\n </>\r\n :\r\n null\r\n }\r\n </Typography>\r\n </>\r\n }\r\n </Grid>\r\n {currentPaymentType === 'Supervision' ?\r\n <>\r\n <Typography variant=\"h6\" component=\"h3\" style={{paddingTop:20}}>\r\n Available For\r\n </Typography>\r\n <Row>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {supervisionAreas.map(sRow => {\r\n if(sRow.index <= supervisionAreas.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${sRow.id}`;\r\n var isChecked = providerRegistrationView.supervisorAreas.includes(sRow.id);\r\n return (\r\n <ListItem key={sRow.id} role={undefined} dense button >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{sRow.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Col>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {supervisionAreas.map(sRow => {\r\n if(sRow.index > supervisionAreas.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${sRow.id}`;\r\n var isChecked = providerRegistrationView.supervisorAreas.includes(sRow.id);\r\n return (\r\n <ListItem key={sRow.id} role={undefined} dense button >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{sRow.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Col>\r\n </Row>\r\n <Typography variant=\"h6\" component=\"h3\" style={{paddingTop:20}}>\r\n Endorsed In \r\n </Typography>\r\n <Row>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {endorsedSupervisionAreas.map(sRow => {\r\n var isChecked = providerRegistrationView.supervisorAreas.includes(sRow.id);\r\n const labelId = `checkbox-list-label-${sRow.id}`;\r\n if (isChecked) {\r\n return(\r\n <ListItem key={sRow.id} role={undefined} dense button >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{sRow.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n )\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n } \r\n </CardContent>\r\n </Card>\r\n </Masonry>\r\n </Grid>\r\n\r\n </Modal.Body>\r\n <Modal.Footer className=\"invite-modal\">\r\n <Button variant=\"secondary\" onClick={handleRegistrationViewClose}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showProviderBio} onHide={()=>setShowProviderBio(false)} dialogClassName=\"invite-modal\" >\r\n <Modal.Header closeButton className=\"invite-modal\">\r\n <Modal.Title>{providerBioFullName}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"invite-modal\" style={{ backgroundColor: 'rgb(245,245,245)' }}>\r\n <Grid container >\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={providerBioBio} />\r\n </Typography>\r\n </Grid>\r\n </Modal.Body>\r\n <Modal.Footer className=\"invite-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowProviderBio(false)} className=\"lightButtonOutlinedLarge\">\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showCustomBio} onHide={handleCustomBioClose} centered>\r\n <Modal.Header closeButton className=\"apiKey-modal\">\r\n <Modal.Title>Enter Custom Bio </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"apiKey-modal\">\r\n <ProviderProgramBio\r\n providerID={psychologist.id}\r\n onCloseCustomBio={handleCustomBioClose}\r\n />\r\n </Modal.Body>\r\n </Modal>\r\n\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n );\r\n}\r\n\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport * as Auth from \"../../../store/ducks/auth.duck\";\r\nimport { Button, Modal, Form, Row, Col } from \"react-bootstrap\";\r\nimport { Paper, Grid } from '@material-ui/core';\r\nimport { Formik } from 'formik';\r\nimport * as Yup from \"yup\";\r\nimport MFAForm from \"../../../components/MFAForm\";\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport KTUtil from \"../../../../_metronic/_assets/js/util\";\r\nimport \"../../../../_metronic/_assets/sass/pages/login/login-1.scss\";\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\nexport default function ProviderSecurity() {\r\n\r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Admin.actions.fetchRegistered()) }, [dispatch] )\r\n\r\n const loadMFAInit = () => {\r\n // Load Form\r\n setShowMFA(true);\r\n }\r\n\r\n function handleMFAClose() {\r\n setShowMFA(false);\r\n } \r\n\r\n function DeactivateMFA() {\r\n // Ok Time to Dispatch \r\n dispatch(Auth.actions.postDeactivateMFA({type : 'Provider'}));\r\n }\r\n\r\n // now init the fields with values so that Formik can manage the touched state\r\n const psychologistInit = {\r\n psychologistid : 0,\r\n profilePassword: '',\r\n profileExistingPassword: '',\r\n profilePasswordConfirmation: '',\r\n }\r\n\r\n // get the psychologist from state and merge with the initialised fields\r\n const registered = useSelector(state => state.admin.RegisteredPsychologists[0]);\r\n var psychologist = {...psychologistInit, ...registered};\r\n var [showMFA, setShowMFA] = useState(false);\r\n\r\n function submitForm(data){\r\n //\r\n var payload = {\r\n registeredid : psychologist.id,\r\n registeredexistingpassword : data['profileExistingPassword'],\r\n registeredpassword: data['profilePassword'],\r\n registeredpasswordconfirmation: data['profilePasswordConfirmation']\r\n }\r\n // Save new password for provider\r\n dispatch(Admin.actions.putProviderPassword(payload));\r\n }\r\n\r\n const validationSchema = Yup.object().shape({\r\n profileExistingPassword: Yup.string()\r\n .required(\"Existing Password is required\"),\r\n profilePassword: Yup.string()\r\n .min(8,\"Too Short\")\r\n .oneOf([Yup.ref('profilePasswordConfirmation'), null], 'Passwords must match'),\r\n profilePasswordConfirmation: Yup.string()\r\n .min(8,\"Too Short\")\r\n .oneOf([Yup.ref('profilePassword'), null], 'Passwords must match'),\r\n });\r\n\r\n return (\r\n <>\r\n <Formik\r\n enableReinitialize={true}\r\n initialValues={psychologist}\r\n validationSchema = {validationSchema}\r\n onSubmit={(values, actions) => {\r\n submitForm(values);\r\n actions.setSubmitting(false);\r\n }}\r\n >\r\n {props => {\r\n const { values, errors, touched, handleChange, handleSubmit } = props;\r\n const change = (name,e) => { e.persist(); handleChange(e); }; \r\n return (\r\n <form noValidate={true} autoComplete=\"off\" onSubmit={handleSubmit} >\r\n <Paper style={{ backgroundColor: \"rgb(245,245,245)\", padding: 20 }} >\r\n <h4>Update Password</h4>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Existing Password</Form.Label>\r\n <Form.Control type=\"password\" name=\"profileExistingPassword\" value={values.profileExistingPassword} autoComplete='new-password' onChange={change.bind(null, \"profileExistingPassword\")} isInvalid={touched.profileExistingPassword && !!errors.profileExistingPassword} isValid={touched.profileExistingPassword && !errors.profileExistingPassword} />\r\n <Form.Control.Feedback type=\"invalid\">{errors.profileExistingPassword}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>New Password</Form.Label>\r\n <Form.Control type=\"password\" name=\"profilePassword\" value={values.profilePassword} autoComplete='new-password' onChange={change.bind(null, \"profilePassword\")} isInvalid={touched.profilePassword && !!errors.profilePassword} isValid={touched.profilePassword && !errors.profilePassword} />\r\n <Form.Control.Feedback type=\"invalid\">{errors.profilePassword}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>New Confirm Password</Form.Label>\r\n <Form.Control type=\"password\" name=\"profilePasswordConfirmation\" value={values.profilePasswordConfirmation} onChange={change.bind(null, \"profilePasswordConfirmation\")} isInvalid={touched.profilePasswordConfirmation && !!errors.profilePasswordConfirmation} isValid={touched.profilePasswordConfirmation && !errors.profilePasswordConfirmation} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.profilePasswordConfirmation}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item md={3} xs={6}>\r\n \r\n </Grid>\r\n <Grid item md={3} xs={6} style={{ textAlign: 'right' }}>\r\n {!KTUtil.isEmpty(errors) && <div style={{ color: 'red', padding: 8 }}>There are incomplete fields above!</div>}\r\n <Button variant=\"primary\" type=\"submit\" >\r\n Submit\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n </Paper>\r\n </form>\r\n )\r\n }}\r\n </Formik>\r\n <Paper style={{ backgroundColor: \"rgb(245,245,245)\", padding: 20, marginTop:20 }} >\r\n <h4>Multi Factor Authentication</h4>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label> Status</Form.Label>\r\n <Form.Control type=\"text\" name=\"MFAConfigured\" value={psychologist.mfaconfigured} readOnly />\r\n </Form.Group>\r\n </Col>\r\n {psychologist.mfaconfigured !== 'Configured' ?\r\n <Col md=\"3\" style={{ paddingTop: 29}}> \r\n <Button \r\n variant=\"primary\" \r\n size=\"sm\" \r\n style={{ marginLeft: 5, }} \r\n onClick={() => loadMFAInit()}\r\n >\r\n Enable \r\n </Button>\r\n </Col>\r\n :\r\n <Col md=\"3\" style={{ paddingTop: 29}}> \r\n <Button \r\n variant=\"danger\" \r\n size=\"sm\" \r\n style={{ marginLeft: 5, }} \r\n onClick={() => DeactivateMFA()}\r\n >\r\n Disable \r\n </Button>\r\n </Col>\r\n }\r\n </Row>\r\n </Paper>\r\n\r\n <Modal show={showMFA} onHide={handleMFAClose} centered dialogClassName=\"mfa-modal-dialog\">\r\n <Modal.Header closeButton >\r\n <Modal.Title>Configure MFA</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"mfa-modal\">\r\n <MFAForm \r\n referenceID={psychologist.id}\r\n onCloseMFA={handleMFAClose}\r\n type={'Provider'}\r\n />\r\n </Modal.Body>\r\n </Modal>\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n );\r\n}\r\n\r\n","import React, { useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport Files from \"../../../components/Files\";\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\n\r\nexport default function FilesPsychologist() {\r\n\r\n const dispatch = useDispatch()\r\n \r\n useEffect( () => { dispatch(Admin.actions.fetchRegistered()) }, [dispatch] )\r\n\r\n const registered = useSelector(state => state.admin.RegisteredPsychologists[0]);\r\n \r\n if(registered) {\r\n return (\r\n <>\r\n <h4>Shared Files</h4>\r\n <Files type=\"Psychologist\" pkid={registered.id} />\r\n </>\r\n )\r\n }\r\n else\r\n {\r\n return <div>Loading...</div>\r\n }\r\n\r\n}\r\n","\r\nimport React, { useState } from 'react';\r\nimport ManageForms from \"../../home/admin/ManageForms\";\r\nimport FormQuestions from \"../../home/admin/FormQuestions\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport '../../../../_metronic/_assets/css/app.css';\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\nexport default function FormConfig() {\r\n\r\n const [formID, setFormID] = useState();\r\n\r\n if(!formID)\r\n {\r\n return <ManageForms setFormID={setFormID} />\r\n }\r\n else\r\n {\r\n return <FormQuestions setFormID={setFormID} formID={formID} />\r\n }\r\n\r\n}","import React, { Suspense } from \"react\";\r\nimport { Redirect, Route, Switch } from \"react-router-dom\";\r\nimport DashboardPsychologist from \"./DashboardPsychologist2\";\r\n\r\n// Not sure about these two\r\n// import Basic from \"./Basic\"; \r\nimport { LayoutSplashScreen } from \"../../../_metronic\";\r\n\r\n// Admin Pages \r\nimport { ClientInvitesPsychologist } from \"./admin/ClientInvites\";\r\nimport ClientsPsychologist from \"./admin/ClientsPsychologist\";\r\nimport ReferralsPsychologist from \"./admin/ReferralsPsychologist\";\r\nimport AvailabilityPsychologist from \"./admin/AvailabilityPsychologist\";\r\nimport BookingsPsychologist from \"./admin/BookingsPsychologist\";\r\nimport InvoicesPsychologist from \"./admin/InvoicesPsychologist\";\r\nimport MedipassCodes from \"./admin/MedipassCodes\";\r\nimport Platform from \"./admin/PlatformInvoicesPsychologist\";\r\nimport ProfilePsychologist from \"./admin/ProfilePsychologist\";\r\nimport ProviderSecurity from \"./admin/ProviderSecurity\";\r\nimport FilesPsychologist from \"./admin/FilesPsychologist\";\r\nimport FormConfig from \"./admin/FormConfig\";\r\n// Reference Pages \r\n// import UserRoles from \"./reference/UserRoles\";\r\n\r\nexport default function HomePagePsychologist() {\r\n\r\n return (\r\n <Suspense fallback={<LayoutSplashScreen />}>\r\n\r\n <Switch>\r\n {\r\n /* Redirect from root URL to /dashboard. */\r\n <Redirect exact from=\"/\" to=\"/dashboard\" />\r\n }\r\n <Route path=\"/dashboard\" component={DashboardPsychologist} />\r\n\r\n {/* Admin Pages */}\r\n <Route path=\"/clients\" component={ClientsPsychologist} />\r\n <Route path=\"/clientinvites\" component={ClientInvitesPsychologist} />\r\n <Route path=\"/referrals\" component={ReferralsPsychologist} />\r\n <Route path=\"/availability\" component={AvailabilityPsychologist} /> \r\n <Route path=\"/bookings\" component={BookingsPsychologist} /> \r\n <Route path=\"/codes\" component={MedipassCodes} /> \r\n <Route path=\"/invoices\" component={InvoicesPsychologist} />\r\n\r\n <Route path=\"/profile\" component={ProfilePsychologist} />\r\n <Route path=\"/security\" component={ProviderSecurity} />\r\n <Route path=\"/platform\" component={Platform} /> \r\n <Route path=\"/files\" component={FilesPsychologist} />\r\n <Route path=\"/forms\" component={FormConfig} />\r\n\r\n {/* Reference Pages */}\r\n <Redirect to=\"/error/error-v1\" />\r\n </Switch>\r\n </Suspense>\r\n );\r\n}\r\n\r\n","/* eslint-disable no-script-url,jsx-a11y/anchor-is-valid,jsx-a11y/anchor-has-content */\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { useDispatch } from 'react-redux';\r\nimport { Link } from 'react-router-dom';\r\nimport Interweave from 'interweave';\r\nimport * as Admin from \"../../app/store/ducks/admin.duck\";\r\nimport * as Reference from \"../../app/store/ducks/reference.duck\";\r\nimport { Card, Grid, List, ListItem, ListItemIcon, ListItemText, Typography, Checkbox,CardMedia, CardContent, Chip, CardActions, makeStyles } from '@material-ui/core';\r\nimport { Row, Col, Badge, Modal, Button } from \"react-bootstrap\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n // minWidth: 200,\r\n // maxWidth: 200,\r\n },\r\n media: {\r\n height: 200,\r\n },\r\n title: {\r\n fontSize: 14,\r\n },\r\n pos: {\r\n marginBottom: 12,\r\n },\r\n expand: {\r\n transform: 'rotate(0deg)',\r\n marginLeft: 'auto',\r\n transition: theme.transitions.create('transform', {\r\n duration: theme.transitions.duration.shortest,\r\n }),\r\n },\r\n expandOpen: {\r\n transform: 'rotate(180deg)',\r\n },\r\n}));\r\n\r\nexport default function ClientActions(props) {\r\n \r\n const classes = useStyles();\r\n const dispatch = useDispatch()\r\n \r\n useEffect( () => { dispatch(Admin.actions.fetchClients()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchClientRegistered( {providertype : props.providerType === 'Supervision' ? 'Psychologist' : props.providerType })) }, [dispatch, props.providerType] )\r\n useEffect( () => { dispatch(Reference.actions.fetchSupervisionAreas()) }, [dispatch] )\r\n \r\n const client = useSelector(state => state.admin.Clients[0]);\r\n const psychologists = useSelector(state => state.admin.ClientRegisteredPsychologists)\r\n const mypsychologist = client ? psychologists.find(v => v.id === client.currentpsychologistid) : null; \r\n const supervisionAreas = useSelector(state => state.reference.SupervisionAreas).filter(sa => sa.providertype === 'Psychologist')\r\n const endorsedSupervisionAreas = useSelector(state => state.reference.SupervisionAreas).filter(sa => sa.providertype === 'Psychologist-Endorsed')\r\n const [showProviderBio,setShowProviderBio] = useState(false)\r\n const [providerBioFullName,setProviderBioFullName] = useState()\r\n const [providerBioBio,setProviderBioBio] = useState()\r\n\r\n const moreProviderBio = (fullName, bio) => {\r\n // console.log('Read More Clicked')\r\n setProviderBioFullName(fullName)\r\n setProviderBioBio(bio)\r\n setShowProviderBio(true)\r\n }\r\n \r\n // Blob setup for psychologist photos \r\n const containerName = `psychologists`;\r\n const storageAccountName = process.env.REACT_APP_STORAGERESOURCENAME || \"\"; \r\n\r\n return (\r\n <>\r\n <div className=\"kt-portlet kt-portlet--height-fluid\">\r\n <div className=\"kt-portlet__head\">\r\n <div className=\"kt-portlet__head-label\">\r\n {props.providerType === 'Supervision' ?\r\n <h3 className=\"kt-portlet__head-title\">My Supervisor</h3>\r\n :\r\n <h3 className=\"kt-portlet__head-title\">My Psychologist</h3>\r\n }\r\n </div>\r\n \r\n </div>\r\n <div className=\"kt-portlet__body\">\r\n <div className=\"kt-widget4\">\r\n {mypsychologist ? \r\n <Grid item md={12} style={{ height: '50vh', width: \"100%\", paddingLeft: 20 }}> \r\n <Card className={classes.root} variant=\"outlined\">\r\n <CardMedia\r\n className={classes.media}\r\n image={`https://${storageAccountName}.blob.core.windows.net/${containerName}/${mypsychologist.imageURL}`}\r\n title=\"Psychologist\"\r\n />\r\n <CardContent>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item sm={9}>\r\n <Typography variant=\"h5\" component=\"h3\">\r\n {mypsychologist.fullname}\r\n </Typography>\r\n </Grid>\r\n {props.providerType === 'Supervision' ?\r\n <Grid item sm={3} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\">\r\n {mypsychologist.supervisorHourlyRate}\r\n </Typography>\r\n </Grid>\r\n :\r\n <Grid item sm={3} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\">\r\n {mypsychologist.hourly}\r\n </Typography>\r\n </Grid>\r\n }\r\n </Grid>\r\n {props.providerType === 'Supervision' ?\r\n <Grid container>\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={mypsychologist.supervisorBio.substring(0,700)} />\r\n {mypsychologist.supervisorBio.length > 700 ?\r\n <>\r\n ...\r\n <Badge variant=\"secondary\" onClick={()=>moreProviderBio(mypsychologist.fullname, mypsychologist.supervisorBio)} style={{ marginRight: 5, cursor: 'pointer' }}>\r\n more\r\n </Badge>\r\n </>\r\n :\r\n null\r\n }\r\n </Typography>\r\n </Grid>\r\n :\r\n <Grid container>\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={mypsychologist.bio.substring(0,700)} />\r\n {mypsychologist.bio.length > 700 ?\r\n <>\r\n ...\r\n <Badge variant=\"secondary\" onClick={()=>moreProviderBio(mypsychologist.fullname, mypsychologist.bio)} style={{ marginRight: 5, cursor: 'pointer' }}>\r\n more\r\n </Badge>\r\n </>\r\n :\r\n null\r\n }\r\n </Typography>\r\n </Grid>\r\n }\r\n {props.providerType === 'Supervision' ?\r\n <> \r\n\r\n <Typography variant=\"h6\" component=\"h3\">\r\n Available For\r\n </Typography>\r\n <Row>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {supervisionAreas.map(sRow => {\r\n if(sRow.index <= supervisionAreas.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${sRow.id}`;\r\n var isChecked = mypsychologist.supervisorAreas.includes(sRow.id);\r\n return (\r\n <ListItem key={sRow.id} role={undefined} dense button >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{sRow.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Col>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {supervisionAreas.map(sRow => {\r\n if(sRow.index > supervisionAreas.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${sRow.id}`;\r\n var isChecked = mypsychologist.supervisorAreas.includes(sRow.id);\r\n return (\r\n <ListItem key={sRow.id} role={undefined} dense button >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{sRow.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Col>\r\n </Row>\r\n <Typography variant=\"h6\" component=\"h3\" >\r\n Endorsed In \r\n </Typography>\r\n <Row>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {endorsedSupervisionAreas.map(sRow => {\r\n var isChecked = mypsychologist.supervisorAreas.includes(sRow.id);\r\n const labelId = `checkbox-list-label-${sRow.id}`;\r\n if (isChecked) {\r\n return(\r\n <ListItem key={sRow.id} role={undefined} dense button >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{sRow.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n )\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n <Grid container>\r\n {mypsychologist && mypsychologist.therapyTypes && mypsychologist.therapyTypes.map((row) => {return (<Chip size=\"small\" key={row} variant=\"outlined\" label={row} style={{ margin: 2 }} />)})}\r\n </Grid>\r\n }\r\n </CardContent>\r\n <CardActions>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item sm={12} >\r\n <Link to=\"/search\">\r\n {props.providerType === 'Supervision' ?\r\n <Button size=\"small\" >Search Supervisors</Button>\r\n :\r\n <Button size=\"small\" >Search Psychologists</Button>\r\n }\r\n </Link>\r\n </Grid>\r\n </Grid>\r\n </CardActions>\r\n \r\n </Card>\r\n </Grid>\r\n : (<div>Select Psychologist</div>)}\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <Modal show={showProviderBio} onHide={()=>setShowProviderBio(false)} dialogClassName=\"invite-modal\" >\r\n <Modal.Header closeButton className=\"invite-modal\">\r\n <Modal.Title>{providerBioFullName}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"invite-modal\" style={{ backgroundColor: 'rgb(245,245,245)' }}>\r\n <Grid container >\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={providerBioBio} />\r\n </Typography>\r\n </Grid>\r\n </Modal.Body>\r\n <Modal.Footer className=\"invite-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowProviderBio(false)} className=\"lightButtonOutlinedLarge\">\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n </>\r\n );\r\n}\r\n","import React, { useEffect, useState, useCallback } from \"react\"; \r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport ClientActions from \"../../widgets/ClientActions\";\r\nimport * as Admin from \"../../store/ducks/admin.duck\";\r\nimport * as Forms from \"../../store/ducks/forms.duck\";\r\nimport * as Auth from \"../../store/ducks/auth.duck\";\r\nimport BookingsList from \"../../components/BookingsList\";\r\nimport FormDataEntry from \"../../pages/home/admin/FormDataEntry\";\r\nimport { Formik } from 'formik';\r\nimport * as Yup from \"yup\";\r\nimport { Grid, TableContainer, Table, TableHead, TableBody, TableRow, TableCell, makeStyles } from '@material-ui/core';\r\nimport { format } from \"date-fns\";\r\nimport { Alert, Button, Modal, Form, Row, Col } from \"react-bootstrap\";\r\nimport VoiceChatOutlinedIcon from '@material-ui/icons/VoiceChatOutlined';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport AssignmentIcon from '@material-ui/icons/Assignment';\r\nimport '../../../_metronic/_assets/css/app2.css';\r\nimport UpdatePassword from '../../components/UpdatePassword'\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\n\r\nexport default function DashboardClient() {\r\n \r\n const useStyles = makeStyles((theme) => ({\r\n root: {\r\n // minWidth: 200,\r\n // maxWidth: 200,\r\n },\r\n media: {\r\n height: 200,\r\n },\r\n title: {\r\n fontSize: 14,\r\n },\r\n pos: {\r\n marginBottom: 12,\r\n },\r\n }));\r\n\r\n const classes = useStyles();\r\n const dispatch = useDispatch()\r\n const ssoFormDisplay = useSelector(state => state.auth.SSOForm);\r\n const clients = useSelector(state => state.admin.Clients);\r\n const client = useSelector(state => state.admin.Client);\r\n // const client = useSelector(state => state.admin.Clients[0]);\r\n const userTZ = useSelector(state => state.auth.userTZ)\r\n const ssoForm = useSelector(state => state.auth.SSOForm)\r\n const bookings = useSelector(state => state.admin.Bookings)\r\n const allFormData = useSelector(state => state.forms.AllFormData);\r\n const formDataToDo = allFormData.filter(row => row.formDataStatus === 'Not Started' || row.formDataStatus === 'In Progress')\r\n const notes = useSelector(state => state.admin.Notes['Client'])\r\n const isRecovery = useSelector(state => state.auth.recoveryStatus)\r\n\r\n useEffect( () => { dispatch(Admin.actions.fetchReferrals()) }, [dispatch] )\r\n useEffect( () => { dispatch(Forms.actions.fetchAllFormData(0)) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchClients({status : 'Active'})) }, [dispatch] )\r\n useEffect( () => { clients.length > 0 && dispatch(Admin.actions.fetchClient( { clientID: clients[0].id, type: clients[0].clienttype } )) }, [dispatch, clients] )\r\n useEffect( () => { clients.length > 0 && dispatch(Admin.actions.fetchNotes({ type: 'Client', pkID: clients[0].id })) }, [dispatch, clients] )\r\n\r\n const [showFormData, setShowFormData] = useState(false);\r\n const [haveBookings, sethaveBookings] = useState(false);\r\n const [showNewNote, setShowNewNote] = useState(false);\r\n const [showUpdatePassword, setShowUpdatePassword] = useState(false)\r\n\r\n const [formData, setFormData] = useState()\r\n const loadFormDataEntry = (formData) => {\r\n setFormData(formData)\r\n setShowFormData(true);\r\n }\r\n\r\n const getBookings = useCallback(() => {\r\n if (!haveBookings && clients.length && client && client.id) {\r\n dispatch(Admin.actions.fetchBookings({ key: 'client', id: client.id, userTZ: userTZ }))\r\n sethaveBookings(true)\r\n // console.log('fetching bookings')\r\n } \r\n },[dispatch,haveBookings,clients,client, userTZ]) \r\n\r\n useEffect( () => { getBookings() }, [clients, client, getBookings] )\r\n \r\n useEffect( () => {\r\n if (isRecovery === 'Recovery') {\r\n dispatch(Auth.actions.clearRecovery())\r\n setShowUpdatePassword(true)\r\n }\r\n }, [dispatch,isRecovery])\r\n\r\n useEffect( () => {\r\n console.log('In Use Effect')\r\n console.log(client)\r\n console.log(ssoFormDisplay)\r\n console.log(allFormData)\r\n console.log(allFormData.filter(forms => forms.formDataID === Number(ssoFormDisplay)))\r\n if(client && client.id > 0 && ssoFormDisplay && allFormData && allFormData.length > 0)\r\n {\r\n console.log('In if')\r\n console.log(allFormData.filter(forms => forms.formDataID === Number(ssoFormDisplay))[0])\r\n loadFormDataEntry(allFormData.filter(forms => forms.formDataID === Number(ssoFormDisplay))[0])\r\n dispatch(Auth.actions.ssoformclear())\r\n }\r\n }, [loadFormDataEntry, dispatch, ssoFormDisplay, client, allFormData])\r\n\r\n\r\n const submitForm = (values) => {\r\n // Handle preferred name if it is set\r\n let fullname = ''\r\n if (client && client.preferredName && client.preferredName.length > 2)\r\n {\r\n fullname = client.preferredname + ' ' + client.surname\r\n }\r\n else\r\n {\r\n fullname = client.firstname + ' ' + client.surname\r\n }\r\n //\r\n var payload = {\r\n type : 'Client',\r\n pkid : client.id,\r\n providerid : client.currentpsychologistid, \r\n gpid : client.currentgpid,\r\n name : fullname,\r\n note : values.noteBody\r\n }\r\n dispatch(Admin.actions.postClientNote(payload));\r\n }\r\n\r\n\r\n const validationSchema = Yup.object().shape({\r\n noteBody: Yup.string()\r\n .required(\"You haven't typed anything yet!\"),\t\r\n });\r\n\r\n\r\n if(!client)\r\n {\r\n return <div>Loading...</div>\r\n }\r\n\r\n if (client) \r\n {\r\n return (\r\n <>\r\n {bookings && bookings[bookings.length-1] && bookings[bookings.length-1].waitingroomurl ? \r\n <div className=\"row\">\r\n <div className=\"col-xl-12\">\r\n <Alert className=\"client-dashboard-top-alert\">\r\n <VoiceChatOutlinedIcon className=\"client-dashboard-top-alert-icon\" /> \r\n <div className=\"client-dashboard-top-alert-message\">To join your telehealth session, simply click here: </div>\r\n <a href={bookings[bookings.length-1].waitingroomurl} target=\"_blank\" rel=\"noopener noreferrer\">\r\n <Button variant=\"primary\" size=\"sm\" style={{ marginLeft: 14 }}>Start Session</Button>\r\n </a>\r\n </Alert>\r\n </div>\r\n </div>\r\n : \r\n null\r\n }\r\n {formDataToDo.length > 0 ?\r\n <div className=\"row\">\r\n <div className=\"col-xl-12\">\r\n <Alert className=\"client-dashboard-form-alert\">\r\n <AssignmentIcon className=\"client-dashboard-form-alert-icon\" /> \r\n <div className=\"client-dashboard-form-alert-message\">You have forms to complete: </div>\r\n {formDataToDo.map(formData => {return(\r\n <Button key={`key-${formData.id}`} variant=\"primary\" size=\"sm\" style={{ marginLeft: 14 }} onClick={()=>loadFormDataEntry(formData)}>{formData.formName}</Button>\r\n )})}\r\n </Alert>\r\n </div>\r\n </div>\r\n : \r\n null\r\n }\r\n <div className=\"row\">\r\n <div className=\"kt-portlet kt-portlet--height-fluid\">\r\n <div className=\"kt-portlet__head\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item style={{ paddingTop: 19 }}>\r\n <h4>My Bookings</h4>\r\n </Grid>\r\n </Grid>\r\n </div> \r\n <div className=\"kt-portlet__body\" style={{ padding: 0 }}>\r\n <div className=\"kt-widget4\">\r\n {client && client.id > 0 ?\r\n <BookingsList\r\n type='client'\r\n view='dashboard'\r\n id={client.id}\r\n providerType={client.paymentType === 'Supervision' ? 'Supervision' : client.paymentType === 'Provisional' ? 'Provisional' : 'psychologist'}\r\n currentpsychologistid={client.currentpsychologistid}\r\n currentgpid={client.currentgpid}\r\n userTZ={userTZ}\r\n />\r\n : \r\n '...loading Bookings' \r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"row\">\r\n <div className=\"col-xl-8\">\r\n <div className=\"row\">\r\n <div className=\"kt-portlet kt-portlet--height-fluid\">\r\n <div className=\"kt-portlet__head\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item style={{ paddingTop: 19 }}><h4 >Recent Correspondence</h4></Grid>\r\n <Grid item style={{ paddingTop: 13 }}>\r\n {!showNewNote ? \r\n <Button variant=\"primary\" size=\"sm\" onClick={()=>setShowNewNote(true)}>\r\n {client.paymentType === 'Supervision' ? \r\n <>\r\n Send message to your Supervisor\r\n </>\r\n :\r\n <>\r\n Send message to your Psychologist\r\n </>\r\n }\r\n </Button>\r\n : null }\r\n </Grid>\r\n </Grid>\r\n </div> \r\n {client && client.id > 0 ?\r\n <div className=\"kt-portlet__body\" style={{ padding: 20 }}>\r\n <div className=\"kt-widget4\">\r\n <Formik\r\n enableReinitialize={false}\r\n initialValues={{}}\r\n validationSchema = {validationSchema}\r\n onSubmit={(values, {resetForm}) => {\r\n resetForm();\r\n submitForm(values);\r\n setShowNewNote(false);\r\n }}\r\n >\r\n {props => {\r\n const { values, errors, handleChange, setFieldValue, handleSubmit } = props; \r\n const change = (name,e) => { e.persist(); handleChange(e); };\r\n return (\r\n <>\r\n {showNewNote ? \r\n <form noValidate={true} autoComplete=\"off\" onSubmit={handleSubmit}>\r\n <Grid container spacing={1}></Grid>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n {client.paymentType === 'Supervision' ? \r\n <Form.Label>Send your supervisor a message <span style={{ fontStyle:'italic', fontWeight:'bold'}}>(for non urgent matters only)</span>:</Form.Label>\r\n :\r\n <Form.Label>Send your psychologist a message <span style={{ fontStyle:'italic', fontWeight:'bold'}}>(for non urgent matters only)</span>:</Form.Label>\r\n }\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" name=\"noteBody\" value={values.noteBody} onChange={change.bind(null, \"noteBody\")} autoComplete='new-password' style={{ borderColor: '#D1D1D1'}} />\r\n {errors ? (<p className='error-help'>{errors.noteBody}</p>) : ''}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\" style={{ marginBottom: 15 }}>\r\n <Grid container spacing={0} padding={6} justifyContent=\"space-between\">\r\n <Button variant=\"light\" size=\"sm\" onClick={() => {\r\n setFieldValue(\"noteBody\", ' ')\r\n setShowNewNote(false)\r\n }} style={{ borderColor: '#D1D1D1'}}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"success\" size=\"sm\" type=\"submit\">\r\n Send\r\n </Button>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n </form>\r\n : null }\r\n </>\r\n )\r\n }}\r\n </Formik>\r\n <TableContainer style={{ backgroundColor: '#FFF', height: '50vh', width: \"100%\", overflowY: \"scroll\", marginTop: 5 }}>\r\n <Table className={classes.table} aria-label=\"simple table\">\r\n <TableHead>\r\n <TableRow>\r\n <TableCell style={{ width: 130 }}>Date</TableCell>\r\n <TableCell>Type</TableCell>\r\n <TableCell>Note</TableCell>\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {notes ? notes.map((row) => (\r\n <TableRow key={row.id}>\r\n <TableCell>\r\n {format(new Date(row.createdOn), \"dd-MM-yyyy HH:mm\")}\r\n </TableCell>\r\n <TableCell>\r\n {row.action}\r\n </TableCell>\r\n <TableCell>\r\n {row.note}\r\n </TableCell>\r\n </TableRow>\r\n ))\r\n : \r\n null\r\n }\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </div>\r\n </div>\r\n : \r\n '...loading Correspondence' \r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"col-xl-4\" >\r\n <ClientActions \r\n providerType={client.paymentType === 'Supervision' ? 'Supervision' : 'Psychologist'}\r\n />\r\n </div>\r\n </div>\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n\r\n <Modal show={showFormData} onHide={() => setShowFormData(false)} dialogClassName=\"edit-md-sm-dialog-modal\">\r\n <Modal.Header className=\"edit-md-sm-modal\">\r\n <Modal.Title>{formData && formData.formName}</Modal.Title>\r\n <Button variant=\"outlined\" size=\"sm\" style={{ marginTop: 5, background: \"#eeeeee\", border: '1px solid #9da8e5', padding: 5, marginLeft: 10 }} onClick={() => setShowFormData(false)} >\r\n <CloseIcon />\r\n </Button> \r\n </Modal.Header>\r\n <Modal.Body className=\"edit-md-modal\">\r\n {formData && <FormDataEntry formID={formData.formID} formDataID={formData.formDataID} setShowFormData={setShowFormData} />}\r\n </Modal.Body>\r\n </Modal>\r\n\r\n <Modal show={showUpdatePassword} onHide={()=>setShowUpdatePassword(false)} dialogClassName=\"todos-modal-dialog\">\r\n <Modal.Header closeButton className=\"todos-modal\">\r\n <Modal.Title>You have recently recovered your password, please update your password</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"todos-modal\">\r\n <UpdatePassword setShowUpdatePassword={setShowUpdatePassword} />\r\n </Modal.Body>\r\n </Modal>\r\n\r\n </>\r\n )\r\n }\r\n}\r\n","import React, { useEffect } from \"react\";\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport PlacesAutoComplete from \"../../../components/AddressAutoComplete\";\r\nimport * as Reference from \"../../../store/ducks/reference.duck\";\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { Button, Form, Row, Col, } from \"react-bootstrap\";\r\nimport { Paper, TextField, Grid } from '@material-ui/core';\r\nimport { Formik } from 'formik';\r\nimport * as Yup from \"yup\";\r\nimport Alert from '@material-ui/lab/Alert';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport { differenceInYears } from \"date-fns\";\r\nimport \"../../../../_metronic/_assets/sass/pages/login/login-1.scss\";\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\nexport default function ProfileClient() {\r\n\r\n const dispatch = useDispatch()\r\n const clients = useSelector(state => state.admin.Clients);\r\n const thisClient = useSelector(state => state.admin.Client);\r\n const areasOfInterestReference = useSelector(state => state.reference.AreasOfInterest) \r\n const PsychologyAreasOfInterest = areasOfInterestReference.filter(area => area.providertype === 'Psychologist') \r\n const FinancialAreasOfInterest = areasOfInterestReference.filter(area => area.providertype === 'Financial')\r\n const ProvisionalAreasOfInterest = areasOfInterestReference.filter(area => (area.issue === 'Anxiety' || area.issue === 'Depression' || area.issue === 'Managing Stress' || area.issue === 'Grief & Loss'))\r\n const validateMedicareNumber = require('validate-medicare-number');\r\n \r\n useEffect( () => { dispatch(Admin.actions.fetchClients({status : 'Active'})) }, [dispatch] )\r\n useEffect( () => { clients.length > 0 && dispatch(Admin.actions.fetchClient( { clientID: clients[0].id, type: clients[0].clienttype } )) }, [dispatch, clients] )\r\n useEffect( () => { dispatch(Reference.actions.fetchFundingTypes()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchSundayThisWeek()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchAreasOfInterest('ALL')) }, [dispatch] )\r\n \r\n // now init the fields with values so that Formik can manage the touched state\r\n const clientInit = {\r\n firstname: '', \r\n surname: '', \r\n preferredname: '',\r\n email: '', \r\n mobilephone: '',\r\n clientFundingTypeID: 1,\r\n dob: undefined,\r\n gender: '',\r\n occupation: '',\r\n fulladdress: '',\r\n latitude: '',\r\n longitude: '',\r\n postcode: '',\r\n timezone: 'AUS Eastern Standard Time',\r\n clientAreasOfInterest: [],\r\n hopeToGetFromTreatment: '',\r\n emergencycontactname1: '',\r\n emergencycontactphone1: '',\r\n emergencycontactrelation1: '',\r\n emergencycontactname2: '',\r\n emergencycontactphone2: '',\r\n emergencycontactrelation2: '',\r\n profilePassword: '',\r\n profilePasswordConfirmation: '',\r\n medicareno: '',\r\n medicarereferenceno: '',\r\n medicareexpirydate: '',\r\n appointmenttype: '0',\r\n providertype: '',\r\n pronouns: '',\r\n indigenous: 'N',\r\n id : 0\r\n }\r\n\r\n \r\n\r\n // get the invite (if any) from state and merge with the initialised fields\r\n var client = {...clientInit, ...thisClient};\r\n\r\n var aoi = areasOfInterestReference.filter(( {issue} ) => client.clientAreasOfInterest.includes(issue));\r\n // And merge those back into the primary record\r\n client = {...client, \r\n clientAreasOfInterest: aoi,\r\n }\r\n\r\n function submitForm(data){\r\n // add in gp and practice blanks for now, ui and real data to come later. The API will skip inserting or updating these.\r\n const thisMedicalPractice = { \r\n id: 0,\r\n practicename: ''\r\n }\r\n const thisMedicalPractitioner = { \r\n id: 0,\r\n firstName: ''\r\n }\r\n data = {...data,\r\n medicalPractice: thisMedicalPractice,\r\n medicalPractitioner: thisMedicalPractitioner,\r\n clientAreasOfInterest: data['clientAreasOfInterest'].map(aoi => aoi.issue).join(\",\"),\r\n }\r\n dispatch(Admin.actions.putClient(data))\r\n }\r\n\r\n const validationSchema = Yup.object().shape({\r\n firstname: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(200,\"Too Long\")\r\n .required(\"First Name is required\"),\r\n surname: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(200,\"Too Long\")\r\n .required(\"Surname is required\"),\r\n preferredname: Yup.string()\r\n .max(200,\"Too Long\"),\r\n dob: Yup.string()\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => (providertype !== 'Supervision'),\r\n then: Yup.string().required(\"Date of Birth is required\")\r\n .test(\"dob\", \"Please enter a valid date\", function (value) {\r\n return ((differenceInYears(new Date(), new Date(value)) >= 1) && (differenceInYears(new Date(), new Date(value)) <= 100)) \r\n }),\r\n }),\r\n pronouns: Yup.string()\r\n .max(20,\"Too Long\"),\r\n email: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(200,\"Too Long\")\r\n .email(\"Enter a valid email\")\r\n .required(\"Email is required\"),\r\n mobilephone: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(12,\"Too Long\")\r\n .required(\"Phone Number is required\"),\r\n fulladdress: Yup.string()\r\n .min(4,\"Too Short\")\r\n .max(80,\"Too Long\")\r\n .required(\"Address is required\"),\r\n profilePassword: Yup.string()\r\n .min(8,\"Too Short\")\r\n .oneOf([Yup.ref('profilePasswordConfirmation'), null], 'Passwords must match'),\r\n areasOfInterest: Yup.array()\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.array().min(1, \"Please select at least one area of interest\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.array().min(1, \"Please select at least one area of interest\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Occupational',\r\n then: Yup.array().min(1, \"Please select at least one area of interest\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Financial',\r\n then: Yup.array().min(1, \"Please select at least one area of interest\"),\r\n }), \r\n emergencycontactname1: Yup.string()\r\n .nullable()\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Provisional',\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Social',\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Nurse',\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Occupational',\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact is required\"),\r\n }),\r\n emergencycontactrelation1: Yup.string()\r\n .nullable()\r\n .when(['providertype'],\r\n {\r\n is: (providerType) => (providerType === 'Psychologist'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(50,\"Too Long\")\r\n .required(\"Emergency Contact Relationship is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providerType) => (providerType === 'Clinical'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(50,\"Too Long\")\r\n .required(\"Emergency Contact Relationship is required\"),\r\n }) \r\n .when(['providertype'],\r\n {\r\n is: (providerType) => (providerType === 'NDIS'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(50,\"Too Long\")\r\n .required(\"Emergency Contact Relationship is required\"),\r\n }) \r\n .when(['providertype'],\r\n {\r\n is: (providerType) => (providerType === 'Provisional'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(50,\"Too Long\")\r\n .required(\"Emergency Contact Relationship is required\"),\r\n }) \r\n .when(['providertype'],\r\n {\r\n is: (providerType) => (providerType === 'Social'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(50,\"Too Long\")\r\n .required(\"Emergency Contact Relationship is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providerType) => (providerType === 'Nurse'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(50,\"Too Long\")\r\n .required(\"Emergency Contact Relationship is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providerType) => (providerType === 'Occupational'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(50,\"Too Long\")\r\n .required(\"Emergency Contact Relationship is required\"),\r\n }), \r\n emergencycontactphone1: Yup.string()\r\n .nullable()\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact phone is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Provisional',\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact phone is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Social',\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact phone is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Nurse',\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact phone is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Occupational',\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact phone is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact phone is required\"),\r\n }), \r\n emergencycontactname2: Yup.string()\r\n .nullable()\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.string().nullable()\r\n .min(6,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Provisional',\r\n then: Yup.string().nullable()\r\n .min(6,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Social',\r\n then: Yup.string().nullable()\r\n .min(6,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Nurse',\r\n then: Yup.string().nullable()\r\n .min(6,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Occupational',\r\n then: Yup.string().nullable()\r\n .min(6,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.string().nullable()\r\n .min(6,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n }), \r\n emergencycontactrelation2: Yup.string()\r\n .nullable()\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Psychologist'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(50,\"Too Long\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Clinical'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(50,\"Too Long\"),\r\n }) \r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'NDIS'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(50,\"Too Long\"),\r\n }) \r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Provisional'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(50,\"Too Long\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Social'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(50,\"Too Long\"),\r\n }) \r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Nurse'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(50,\"Too Long\"),\r\n }) \r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Occupational'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(50,\"Too Long\"),\r\n }), \r\n emergencycontactphone2: Yup.string().nullable()\r\n .nullable()\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.string().nullable()\r\n .min(6,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Provisional',\r\n then: Yup.string().nullable()\r\n .min(6,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Social',\r\n then: Yup.string().nullable()\r\n .min(6,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Nurse',\r\n then: Yup.string().nullable()\r\n .min(6,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Occupational',\r\n then: Yup.string().nullable()\r\n .min(6,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.string().nullable()\r\n .min(6,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n }), \r\n profilePasswordConfirmation: Yup.string()\r\n .min(8,\"Too Short\")\r\n .oneOf([Yup.ref('profilePassword'), null], 'Passwords must match'),\r\n medicareno: Yup.string()\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.string().min(10,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Card Number is required\")\r\n .test('cardValid','A Valid Medicare Number is required',(value) => {\r\n if (value)\r\n {\r\n return validateMedicareNumber(value)\r\n }\r\n else\r\n {\r\n return false;\r\n }\r\n }),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.string().min(10,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Card Number is required\")\r\n .test('cardValid','A Valid Medicare Number is required',(value) => {\r\n if (value)\r\n {\r\n return validateMedicareNumber(value)\r\n }\r\n else\r\n {\r\n return false;\r\n }\r\n }),\r\n }) \r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Social',\r\n then: Yup.string().min(10,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Card Number is required\")\r\n .test('cardValid','A Valid Medicare Number is required',(value) => {\r\n if (value)\r\n {\r\n return validateMedicareNumber(value)\r\n }\r\n else\r\n {\r\n return false;\r\n }\r\n }),\r\n }) \r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Nurse',\r\n then: Yup.string().min(10,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Card Number is required\")\r\n .test('cardValid','A Valid Medicare Number is required',(value) => {\r\n if (value)\r\n {\r\n return validateMedicareNumber(value)\r\n }\r\n else\r\n {\r\n return false;\r\n }\r\n }),\r\n }) \r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Occupational',\r\n then: Yup.string().min(10,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Card Number is required\")\r\n .test('cardValid','A Valid Medicare Number is required',(value) => {\r\n if (value)\r\n {\r\n return validateMedicareNumber(value)\r\n }\r\n else\r\n {\r\n return false;\r\n }\r\n }),\r\n }) \r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'GP',\r\n then: Yup.string().min(10,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Card Number is required\")\r\n .test('cardValid','A Valid Medicare Number is required',(value) => {\r\n if (value)\r\n {\r\n return validateMedicareNumber(value)\r\n }\r\n else\r\n {\r\n return false;\r\n }\r\n }),\r\n }), \r\n medicarereferenceno: Yup.number()\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.number().typeError('you must specify a number')\r\n .test('len', 'Must be 1 number', (val) => { if(val) return val.toString().length === 1; })\r\n .required(\"Medicare Reference Number is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.number().typeError('you must specify a number')\r\n .test('len', 'Must be 1 number', (val) => { if(val) return val.toString().length === 1; })\r\n .required(\"Medicare Reference Number is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Social',\r\n then: Yup.number().typeError('you must specify a number')\r\n .test('len', 'Must be 1 number', (val) => { if(val) return val.toString().length === 1; })\r\n .required(\"Medicare Reference Number is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Nurse',\r\n then: Yup.number().typeError('you must specify a number')\r\n .test('len', 'Must be 1 number', (val) => { if(val) return val.toString().length === 1; })\r\n .required(\"Medicare Reference Number is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Occupational',\r\n then: Yup.number().typeError('you must specify a number')\r\n .test('len', 'Must be 1 number', (val) => { if(val) return val.toString().length === 1; })\r\n .required(\"Medicare Reference Number is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'GP',\r\n then: Yup.number().typeError('you must specify a number')\r\n .test('len', 'Must be 1 number', (val) => { if(val) return val.toString().length === 1; })\r\n .required(\"Medicare Reference Number is required\"),\r\n }),\r\n medicareexpirydate: Yup.string()\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.string().min(5,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Expiry is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.string().min(5,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Expiry is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Social',\r\n then: Yup.string().min(5,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Expiry is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Nurse',\r\n then: Yup.string().min(5,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Expiry is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'Occupational',\r\n then: Yup.string().min(5,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Expiry is required\"),\r\n })\r\n .when(['providertype'],\r\n {\r\n is: (providertype) => providertype === 'GP',\r\n then: Yup.string().min(5,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Expiry is required\"),\r\n }),\r\n });\r\n\r\n return (\r\n <>\r\n {client && client.id > 0 ?\r\n <Formik\r\n enableReinitialize={true}\r\n initialValues={client}\r\n validationSchema = {validationSchema}\r\n onSubmit={(values, actions) => {\r\n submitForm(values);\r\n actions.setSubmitting(false);\r\n }}\r\n >\r\n {props => {\r\n const { values, errors, touched, handleChange, handleSubmit, setFieldValue, isSubmitting } = props;\r\n const change = (name,e) => { e.persist(); handleChange(e); };\r\n return (\r\n <form noValidate={true} autoComplete=\"off\" onSubmit={!isSubmitting ? handleSubmit : undefined}>\r\n\r\n <Paper style={{ backgroundColor: \"rgb(245,245,245)\", padding: 20 }} >\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-end\">\r\n <Grid item md={6} xs={12}>\r\n <h3>Client Profile</h3>\r\n </Grid>\r\n <Grid item md={3} xs={6} style={{ fontStyle: \"italic\", fontWeight: 400, textAlign: \"right\", paddingBottom: 4, fontSize: 12 }}>\r\n * indicates required fields\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\"> \r\n {values.message ? (\r\n <Alert severity=\"info\" style={{ marginBottom: 10, marginTop: 8, fontSize: 14 }}>\r\n {values.message}\r\n </Alert>) \r\n : null\r\n }\r\n </Col>\r\n </Row>\r\n <hr style={{ marginTop: 4 }}></hr>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>First Name *</Form.Label>\r\n <Form.Control type=\"text\" name=\"firstname\" value={values.firstname} onChange={change.bind(null, \"firstname\")} autoComplete='new-password' isInvalid={touched.firstname && !!errors.firstname} isValid={touched.firstname && !errors.firstname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.firstname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Preferred Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"preferredname\" value={values.preferredname} onChange={change.bind(null, \"preferredname\")} autoComplete='new-password' isInvalid={touched.preferredname && !!errors.preferredname} isValid={touched.preferredname && !errors.preferredname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.preferredname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Surname *</Form.Label>\r\n <Form.Control type=\"text\" name=\"surname\" value={values.surname} onChange={change.bind(null, \"surname\")} autoComplete='new-password' isInvalid={touched.surname && !!errors.surname} isValid={touched.surname && !errors.surname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.surname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n { client.providertype !== 'Supervision'? \r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Gender</Form.Label>\r\n <Form.Control as=\"select\" name=\"gender\" value={values.gender} onChange={change.bind(null, \"gender\")} >\r\n <option value=\"Prefer not to say\">Prefer not to say</option>\r\n <option value=\"Female\">Female</option>\r\n <option value=\"Male\">Male</option>\r\n <option value=\"Other\">Other</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n :\r\n null\r\n }\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Pronouns</Form.Label>\r\n <Form.Control type=\"text\" name=\"pronouns\" value={values.pronouns} onChange={change.bind(null, \"pronouns\")} autoComplete='new-password' isInvalid={touched.pronouns && !!errors.pronouns} isValid={touched.pronouns && !errors.pronouns}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.pronouns}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n { client.providertype !== 'Supervision'? \r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Date of Birth *</Form.Label>\r\n <Form.Control type=\"date\" name=\"dob\" value={values.dob} onChange={change.bind(null, \"dob\")} isInvalid={touched.dob && !!errors.dob} isValid={touched.dob && !errors.dob} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.dob}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n :\r\n null\r\n }\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Email *</Form.Label>\r\n <Form.Control type=\"text\" name=\"email\" value={values.email} onChange={change.bind(null, \"email\")} isInvalid={touched.email && !!errors.email} isValid={touched.email && !errors.email} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.email}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Phone Number *</Form.Label>\r\n <Form.Control type=\"text\" name=\"mobilephone\" value={values.mobilephone} onChange={change.bind(null, \"mobilephone\")} isInvalid={touched.mobilephone && !!errors.mobilephone} isValid={touched.mobilephone && !errors.mobilephone} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.mobilephone}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Occupation</Form.Label>\r\n <Form.Control type=\"text\" name=\"occupation\" value={values.occupation} onChange={change.bind(null, \"occupation\")} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n \r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label>Home Address (start typing to search) *</Form.Label>\r\n <PlacesAutoComplete \r\n currentID={client.id}\r\n currentfulladdress={client.fulladdress}\r\n setcurrentfulladdress = {(value) => setFieldValue(\"fulladdress\", value)}\r\n setcurrentLatitude = {(value) => setFieldValue(\"latitude\", value)} \r\n setcurrentLongitude = {(value) => setFieldValue(\"longitude\", value)}\r\n setcurrentPostCode = {(value) => setFieldValue(\"postcode\", value)}\r\n isInvalid={touched.fulladdress && !!errors.fulladdress} \r\n isValid={touched.fulladdress && !errors.fulladdress} \r\n />\r\n {touched.fulladdress && !!errors.fulladdress ? (<p className='error-help'>{errors.fulladdress}</p>) : ''}\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Password</Form.Label>\r\n <Form.Control type=\"password\" name=\"profilePassword\" value={values.profilePassword} autoComplete='new-password' onChange={change.bind(null, \"profilePassword\")} isInvalid={touched.profilePassword && !!errors.profilePassword} isValid={touched.profilePassword && !errors.profilePassword} />\r\n <div style={{ fontSize: 10, fontWeight: 400, paddingTop: 4, paddingLeft: 4 }}>(Leave blank unless changing)</div>\r\n <Form.Control.Feedback type=\"invalid\">{errors.profilePassword}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Confirm Password </Form.Label>\r\n <Form.Control type=\"password\" name=\"profilePasswordConfirmation\" value={values.profilePasswordConfirmation} onChange={change.bind(null, \"profilePasswordConfirmation\")} isInvalid={touched.profilePasswordConfirmation && !!errors.profilePasswordConfirmation} isValid={touched.profilePasswordConfirmation && !errors.profilePasswordConfirmation} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.profilePasswordConfirmation}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Do you identify as Aboriginal and/or Torres Strait islander</Form.Label>\r\n <Form.Control as=\"select\" name=\"indigenous\" value={values.indigenous} onChange={change.bind(null, \"indigenous\")} >\r\n <option value=\"N\">No</option>\r\n <option value=\"Y\">Yes</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {client.providertype !== 'GP' && client.providertype !== 'Supervision' ? \r\n <>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Areas of Interest (Select all that apply) *</Form.Label>\r\n <Autocomplete\r\n id=\"clientAreasOfInterest\"\r\n variant=\"outlined\"\r\n multiple\r\n options={(client && (client.providertype === 'Financial')) ? FinancialAreasOfInterest : (client && (client.providertype === 'Provisional')) ? ProvisionalAreasOfInterest : PsychologyAreasOfInterest }\r\n getOptionLabel={(option) => option.issue }\r\n value={values.clientAreasOfInterest}\r\n // onChange={(event, newValue) => setcurrentAreasOfInterest(newValue)}\r\n onChange={(e, newValue) => {\r\n setFieldValue(\"clientAreasOfInterest\", newValue);\r\n }}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: \"\", }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"AOISelector\"\r\n style={{backgroundColor: \"white\", margin: 0, padding: 0}}\r\n error={touched.clientAreasOfInterest && !!errors.clientAreasOfInterest} \r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n {touched.clientAreasOfInterest && !!errors.clientAreasOfInterest ? (<p className='error-help'>{errors.clientAreasOfInterest}</p>) : ''}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>What are you hoping to get out of your sessions?</Form.Label>\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" name=\"hopeToGetFromTreatment\" value={values.hopeToGetFromTreatment} onChange={change.bind(null, \"hopeToGetFromTreatment\")} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n </Row>\r\n {client.providertype !== 'Financial' && client.providertype !== 'Supervision' ? \r\n <>\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Emergency Contact 1 *</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactname1\" value={values.emergencycontactname1 || ''} onChange={change.bind(null, \"emergencycontactname1\")} isInvalid={touched.emergencycontactname1 && !!errors.emergencycontactname1} isValid={touched.emergencycontactname1 && !errors.emergencycontactname1} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.emergencycontactname1}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Relationship*</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactrelation1\" value={values.emergencycontactrelation1 || ''} onChange={change.bind(null, \"emergencycontactrelation1\")} isInvalid={touched.emergencycontactrelation1 && !!errors.emergencycontactrelation1} isValid={touched.emergencycontactrelation1 && !errors.emergencycontactrelation1} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.emergencycontactrelation1}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Phone *</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactphone1\" value={values.emergencycontactphone1 || ''} onChange={change.bind(null, \"emergencycontactphone1\")} isInvalid={touched.emergencycontactphone1 && !!errors.emergencycontactphone1} isValid={touched.emergencycontactphone1 && !errors.emergencycontactphone1} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.emergencycontactphone1}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Emergency Contact 2</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactname2\" value={values.emergencycontactname2 || ''} onChange={change.bind(null, \"emergencycontactname2\")} isInvalid={touched.emergencycontactrelation2 && !!errors.emergencycontactrelation2} isValid={touched.emergencycontactrelation2 && !errors.emergencycontactrelation2} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.emergencycontactname2}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Relationship</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactrelation2\" value={values.emergencycontactrelation2 || ''} onChange={change.bind(null, \"emergencycontactrelation2\")} isInvalid={touched.emergencycontactrelation2 && !!errors.emergencycontactrelation2} isValid={touched.emergencycontactrelation2 && !errors.emergencycontactrelation2} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.emergencycontactrelation2}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactphone2\" value={values.emergencycontactphone2 || ''} onChange={change.bind(null, \"emergencycontactphone2\")} isInvalid={touched.emergencycontactphone2 && !!errors.emergencycontactphone2} isValid={touched.emergencycontactphone2 && !errors.emergencycontactphone2} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.emergencycontactphone2}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n <Row>\r\n {client.providertype !== 'Financial' && client.providertype !== 'Supervision' ? \r\n <>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n {client.providerType && client.providerType === 'Provisional' ?\r\n <Form.Label>Medicare Card Number (Optional)</Form.Label>\r\n :\r\n <Form.Label>Medicare Card Number</Form.Label>\r\n }\r\n <Form.Control type=\"text\" name=\"medicareno\" value={values.medicareno || ''} onChange={change.bind(null, \"medicareno\")} isInvalid={touched.medicareno && !!errors.medicareno} isValid={touched.medicareno && !errors.medicareno} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.medicareno}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n {client.providerType && client.providerType === 'Provisional' ?\r\n <Form.Label>Order on Card (Optional)</Form.Label>\r\n :\r\n <Form.Label>Order on Card</Form.Label>\r\n }\r\n <Form.Control type=\"text\" name=\"medicarereferenceno\" value={values.medicarereferenceno || ''} onChange={change.bind(null, \"medicarereferenceno\")} isInvalid={touched.medicarereferenceno && !!errors.medicarereferenceno} isValid={touched.medicarereferenceno && !errors.medicarereferenceno} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.medicarereferenceno}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n {client.providerType && client.providerType === 'Provisional' ?\r\n <Form.Label>Medicare Expiry Date (MM/YY) (Optional)</Form.Label>\r\n :\r\n <Form.Label>Medicare Expiry Date (MM/YY)</Form.Label>\r\n }\r\n <Form.Control type=\"text\" name=\"medicareexpirydate\" value={values.medicareexpirydate || ''} onChange={change.bind(null, \"medicareexpirydate\")} isInvalid={touched.medicareexpirydate && !!errors.medicareexpirydate} isValid={touched.medicareexpirydate && !errors.medicareexpirydate} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.medicareexpirydate}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </>\r\n :\r\n null\r\n }\r\n {/* {client.providertype !== 'GP' ? \r\n <>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Appointment Type</Form.Label>\r\n <Form.Control as=\"select\" name=\"appointmenttype\" value={values.appointmenttype} onChange={change.bind(null, \"appointmenttype\")} >\r\n <option value='0'>Video Call</option>\r\n <option value='1'>Phone Call</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col> \r\n </>\r\n :\r\n null\r\n } */}\r\n <Col md=\"12\">\r\n <p><strong>Note</strong> Sessions are done via video call. If you need your session to be done via phone call instead please call 0493 201 005 or 0493 432 144.</p>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item md={3} xs={6}>\r\n \r\n </Grid>\r\n <Grid item md={1} xs={6} style={{ textAlign: \"right\"}}>\r\n <Button variant=\"primary\" type=\"submit\">\r\n Submit\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n </Paper>\r\n </form>\r\n )\r\n }}\r\n </Formik>\r\n : 'loading...' }\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n />\r\n </>\r\n );\r\n}\r\n\r\n","import React, { useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport BookingsList from \"../../../components/BookingsList\";\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { Grid } from '@material-ui/core';\r\n\r\nexport default function BookingsClient() {\r\n\r\n const dispatch = useDispatch()\r\n \r\n const userTZ = useSelector(state => state.auth.userTZ)\r\n const clients = useSelector(state => state.admin.Clients);\r\n const client = useSelector(state => state.admin.Client);\r\n\r\n useEffect( () => { dispatch(Admin.actions.fetchClients({status : 'Active'})) }, [dispatch] )\r\n useEffect( () => { clients.length > 0 && dispatch(Admin.actions.fetchClient( { clientID: clients[0].id, type: clients[0].clienttype } )) }, [dispatch, clients] )\r\n\r\n\r\n \r\n if(client && client.id && client.id > 0) {\r\n return (\r\n <>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item><h4 style={{ marginBottom: 12 }}>Bookings</h4></Grid>\r\n </Grid>\r\n <BookingsList\r\n type='client'\r\n id={client.id}\r\n currentpsychologistid={client.currentpsychologistid}\r\n providerType={client.paymentType === 'Supervision' ? 'Supervision' : 'psychologist'}\r\n currentgpid={client.currentgpid}\r\n userTZ={userTZ}\r\n view='client'\r\n />\r\n </>\r\n )\r\n } \r\n else \r\n {\r\n return <div>...loading</div>\r\n }\r\n\r\n}\r\n","import React, { useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport Files from \"../../../components/Files\";\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\n\r\nexport default function FilesClient() {\r\n\r\n const dispatch = useDispatch()\r\n const clients = useSelector(state => state.admin.Clients);\r\n const client = useSelector(state => state.admin.Client);\r\n \r\n useEffect( () => { dispatch(Admin.actions.fetchClients({status : 'Active'})) }, [dispatch] )\r\n useEffect( () => { clients.length && dispatch(Admin.actions.fetchClient( { clientID: clients[0].id, type: clients[0].clienttype } )) }, [dispatch, clients] )\r\n \r\n if(client.id) {\r\n return (\r\n <>\r\n <h4>Shared Files</h4>\r\n <Files type=\"Client\" subtype={client.paymentType} pkid={client.id} />\r\n </>\r\n )\r\n }\r\n else\r\n {\r\n return <div>Loading...</div>\r\n }\r\n\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { Redirect, } from \"react-router-dom\";\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport { Button, Form, Row, Col, Modal, Badge } from \"react-bootstrap\";\r\nimport { Paper, List, ListItem, ListItemIcon, ListItemText, Checkbox, TextField, Grid, Card, CardMedia, CardContent, CardActions, Chip, Typography, makeStyles, useMediaQuery, IconButton, Collapse } from '@material-ui/core';\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport * as Reference from \"../../../store/ducks/reference.duck\";\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport Interweave from 'interweave';\r\nimport Masonry from 'react-masonry-css';\r\nimport clsx from 'clsx';\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport 'bootstrap/dist/css/bootstrap.min.css'\r\nimport '../../../../_metronic/_assets/css/app.css';\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n // minWidth: 200,\r\n // maxWidth: 200,\r\n },\r\n media: {\r\n height: 200,\r\n },\r\n title: {\r\n fontSize: 14,\r\n },\r\n pos: {\r\n marginBottom: 12,\r\n },\r\n expand: {\r\n transform: 'rotate(0deg)',\r\n marginLeft: 'auto',\r\n transition: theme.transitions.create('transform', {\r\n duration: theme.transitions.duration.shortest,\r\n }),\r\n },\r\n expandOpen: {\r\n transform: 'rotate(180deg)',\r\n },\r\n}));\r\n\r\n// Blob setup for psychologist photos \r\nconst containerName = `psychologists`;\r\nconst storageAccountName = process.env.REACT_APP_STORAGERESOURCENAME || \"\"; \r\n\r\nexport default function SearchClient() {\r\n \r\n const dispatch = useDispatch()\r\n\r\n const isMobile = useMediaQuery('(max-width: 760px)');\r\n const role = useSelector(state => state.auth.roleDesc)\r\n const [showBookingExistsError, setShowBookingExistsError] = useState(false);\r\n const [searchList, setSearchList] = useState();\r\n const [expanded, setExpanded] = useState(0);\r\n const supervisionAreas = useSelector(state => state.reference.SupervisionAreas).filter(sa => sa.providertype === 'Psychologist')\r\n const endorsedSupervisionAreas = useSelector(state => state.reference.SupervisionAreas).filter(sa => sa.providertype === 'Psychologist-Endorsed')\r\n // const [searchListLoaded, setSearchListLoaded] = useState(false);\r\n const matching = useSelector(state => state.admin.Matching)\r\n const [previousMatching,setPreviousMatching] = useState()\r\n const futureBookingStatus = useSelector(state => state.admin.ClientFutureBookingStatus)\r\n const [currentPsychologistName,setCurrentPsychologistName] = useState(\"Not Selected\")\r\n const [currentGPName, setCurrentGPName] = useState(\"Not Selected\")\r\n const client = useSelector(state => state.admin.Clients)\r\n const [searchType, setSearchType] = useState('Psychologist');\r\n const [showProviderBio,setShowProviderBio] = useState(false)\r\n const [providerBioFullName,setProviderBioFullName] = useState()\r\n const [providerBioBio,setProviderBioBio] = useState()\r\n\r\n \r\n useEffect( () => { dispatch(Reference.actions.fetchSupervisionAreas()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchClients({status : 'Active'})) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchConstants()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchFundingTypes()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchSundayThisWeek()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchAreasOfInterest()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchMatching( { providertype : searchType, invite : true, availabilitytype : searchType === 'Supervision' ? 'Supervision' : 'Existing' })) }, [dispatch,searchType] )\r\n useEffect( () => { dispatch(Admin.actions.fetchClientFutureBookingStatus( { providertype : searchType })) }, [dispatch,searchType] )\r\n // useEffect( () => { dispatch(Admin.actions.fetchClientRegistered( {providertype : searchType })) }, [dispatch] )\r\n\r\n useEffect( () => { \r\n if (matching !== previousMatching)\r\n {\r\n setSearchList(matching)\r\n setPreviousMatching(matching)\r\n }\r\n },[matching,previousMatching])\r\n\r\n useEffect( () => {\r\n if (client && client.length > 0 && client[0].psychologistName && (client[0].psychologistName !== currentPsychologistName))\r\n {\r\n setCurrentPsychologistName(client[0].psychologistName)\r\n setSearchType(client && client.length > 0 && client[0].paymentType === 'Supervision' ? 'Supervision' : 'Psychologist')\r\n }\r\n },[currentPsychologistName,setCurrentPsychologistName,client])\r\n\r\n useEffect( () => {\r\n if (client && client.length > 0 && client[0].gpName && (client[0].gpName !== currentGPName))\r\n {\r\n setCurrentGPName(client[0].gpName)\r\n }\r\n },[currentGPName,setCurrentGPName,client])\r\n\r\n\r\n const handleExpandClick = (id) => {\r\n // console.log(id)\r\n if(id === expanded) {\r\n setExpanded(0)\r\n } else {\r\n setExpanded(id);\r\n }\r\n };\r\n\r\n const moreProviderBio = (fullName, bio) => {\r\n // console.log('Read More Clicked')\r\n setProviderBioFullName(fullName)\r\n setProviderBioBio(bio)\r\n setShowProviderBio(true)\r\n }\r\n\r\n const areasOfInterest = useSelector(state => state.reference.AreasOfInterest)\r\n const [searchName, setSearchName] = useState('');\r\n const [searchAOI, setSearchAOI] = useState();\r\n \r\n // const [currentPsychologist, setcurrentPsychologist] = useState();\r\n \r\n const searchPsychologist = (p) => {\r\n if ( true\r\n // if there is AOI selections, then return if number of matches in psychologist equals the number of options in the selection\r\n && ( !searchAOI || (searchAOI && searchAOI.length === 0) || (searchAOI && searchAOI.filter(( {issue} ) => p.areasOfInterest.includes(issue)).length === searchAOI.length) )\r\n // search fullname for search string\r\n && (p.fullname.toUpperCase().indexOf(searchName.toUpperCase()) > -1 || searchName === '')\r\n && (p.bulkBillingAvailable === \"1\" || (p.bulkBillingAvailable === \"0\" && client && client.length > 0 && client[0].paymentType && client[0].paymentType !== \"Bulk Billed\"))\r\n )\r\n {\r\n return p\r\n }\r\n }\r\n \r\n var filteredPsychologists = searchList ? searchList.filter(p => searchPsychologist(p)) : []\r\n\r\n const savePsychologist = (thisPsychologist) => {\r\n //\r\n // Check to see if there are any future bookings\r\n if (futureBookingStatus)\r\n {\r\n setShowBookingExistsError(true)\r\n return(null)\r\n }\r\n else\r\n {\r\n //\r\n // setcurrentPsychologist(thisPsychologist)\r\n // Update clients' current provider\r\n if (searchType === 'GP')\r\n {\r\n dispatch(Admin.actions.putClientPsychologist({ gpid: thisPsychologist.id, clientid: client[0].id, providerName: thisPsychologist.fullname }))\r\n // Reload the page so the current provider settings are updated \r\n setCurrentGPName()\r\n }\r\n else\r\n {\r\n dispatch(Admin.actions.putClientPsychologist({ psychologistid: thisPsychologist.id, clientid: client[0].id, providerName: thisPsychologist.fullname }))\r\n // Reload the page so the current provider settings are updated \r\n setPreviousMatching()\r\n }\r\n // \r\n return(\r\n <Redirect from=\"/auth\" to='/dashboard' />\r\n )\r\n }\r\n\r\n }\r\n\r\n const handleSearchTypeChange = (event) => {\r\n // Set State \r\n setSearchType(event.target.value)\r\n // Call for new data \r\n dispatch(Admin.actions.fetchMatching( { providertype : searchType, invite : true, availabilitytype : searchType === 'Supervision' ? 'Supervision' : 'Existing' }))\r\n // dispatch(Admin.actions.fetchClientRegistered( {providertype : event.target.value })) \r\n dispatch(Admin.actions.fetchClientFutureBookingStatus( { providertype : event.target.value }))\r\n setPreviousMatching()\r\n }\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n <>\r\n {/* <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#eee\" }} onClick={() => loadAppointment()}>\r\n Book \r\n </Button> */}\r\n <h4>\r\n Search Providers\r\n </h4>\r\n <Paper style={{ padding: 15, backgroundColor: \"rgb(245,245,245)\" }}> \r\n <Grid container spacing={3}>\r\n <Grid item md={12}>\r\n <div className=\"client-portal-heading-container\">\r\n <span className=\"client-portal-heading-text\">Your current Psychologist is <span className=\"client-portal-heading-highlight\">{currentPsychologistName}</span>. </span>\r\n {currentGPName && currentGPName !== '' ? <span className=\"client-portal-heading-text\">Your current GP is <span className=\"client-portal-heading-highlight\">{currentGPName}.</span></span> : ''}\r\n </div>\r\n </Grid>\r\n </Grid>\r\n <Grid container spacing={3}>\r\n <Grid item md={3} style={{ height: isMobile ? 270 : 750, backgroundColor: \"rgb(245,245,245)\", paddingLeft: 10, paddingTop: 10 }}>\r\n {/* Psychologist search form */}\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Search</Form.Label>\r\n <Form.Control type=\"text\" name=\"searchName\" value={searchName} onChange={(event) => setSearchName(event.target.value)} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Provider Type</Form.Label>\r\n <Form.Control id=\"searchType\" as=\"select\" value={searchType} onChange={handleSearchTypeChange} >\r\n <option value='Psychologist' disabled={searchType === 'Supervision'}>Psychologist</option>\r\n <option value=\"GP\" disabled={searchType === 'Supervision'}>GP</option>\r\n <option value=\"Provisional\" disabled={searchType === 'Supervision'}>Provisional Psychologist</option>\r\n <option value='Supervision' disabled={searchType !== 'Supervision'}>Supervision</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n { searchType !== 'Supervision' ?\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Area of Interest</Form.Label>\r\n <Autocomplete\r\n id=\"searchAOI\"\r\n variant=\"outlined\"\r\n multiple\r\n options={areasOfInterest}\r\n getOptionLabel={(option) => option.issue }\r\n value={searchAOI}\r\n onChange={(event, newValue) => setSearchAOI(newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', backgroundColor: \"white\", }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"AOISelector\"\r\n style={{backgroundColor: \"\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n :\r\n null\r\n }\r\n </Row>\r\n </Grid>\r\n <Grid item md={9} style={{ height: 710, width: \"100%\", overflowY: \"scroll\", paddingLeft: 20, backgroundColor: \"rgb(255,255,255)\" }}>\r\n {searchType !== 'Supervision' ?\r\n <Masonry\r\n breakpointCols={isMobile ? 1 : 3}\r\n className=\"my-masonry-grid\"\r\n columnClassName=\"my-masonry-grid_column\">\r\n {filteredPsychologists.map((row, index) => {\r\n return (\r\n <Card className={classes.root} variant=\"outlined\" key={index}>\r\n <CardMedia\r\n className={classes.media}\r\n image={`https://${storageAccountName}.blob.core.windows.net/${containerName}/${row.imageURL}`}\r\n title=\"Psychologist\"\r\n />\r\n <CardContent>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item sm={12}>\r\n <Typography variant=\"h5\" component=\"h3\">\r\n {row.fullname} {`(Next available: ${row.nextAvailable})`}\r\n </Typography>\r\n </Grid>\r\n {(searchType !== 'GP' && searchType !== 'Provisional' ) ?\r\n <>\r\n {client && client.length > 0 && client[0].paymentType === 'Full Fee' ?\r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={6} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 , marginTop: 11 }}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={6} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {row.hourlyRateOverrideGap && row.hourlyRateOverrideGap !== '0' ? row.hourlyRateOverrideGap : row.standardFeeOutOfPocket }\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={12}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay {row.hourlyrate} on the day and receive back {row.hourlyRateOverrideRebate && row.hourlyRateOverrideRebate !== '0' ? row.hourlyRateOverrideRebate : row.medicareRebate} from Medicare\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n {client && client.length > 0 && client[0].paymentType === 'Reduced Gap' ?\r\n <>\r\n {row.isReducedFee === 'Y' ? \r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={5} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600, textAlign: \"top\"}}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={7} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {row.reducedFeeOverrideGap && row.reducedFeeOverrideGap !== '0' ? row.reducedFeeOverrideGap : row.reducedFeeOutOfPocket }\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={12}>\r\n { row.reducedFee === '0' ?\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay $0 on the day\r\n </Typography>\r\n :\r\n <>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay {row.reducedFee} on the day\r\n </Typography>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n Receive back {row.reducedFeeOverrideRebate && row.reducedFeeOverrideRebate !== '0' ? row.reducedFeeOverrideRebate : row.medicareRebate} from Medicare\r\n </Typography>\r\n </>\r\n }\r\n </Grid>\r\n { row.reducedFee !== '0' ?\r\n <Grid item sm={12}>\r\n <Typography variant=\"subtitle2\" style={{ fontWeight:300, fontStyle: 'italic' }}>\r\n Note this provider offers some flexibility, depending on client circumstances\r\n </Typography>\r\n </Grid>\r\n :\r\n null\r\n }\r\n </Grid>\r\n </>\r\n :\r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={5} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600, textAlign: \"top\" }}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={7} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {row.reducedFeeOverrideGap && row.reducedFeeOverrideGap !== '0' ? row.reducedFeeOverrideGap : row.reducedFeeOutOfPocket }\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={12}>\r\n { row.reducedFee === '0' ?\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay $0 on the day\r\n </Typography>\r\n :\r\n <>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay {row.reducedFee} on the day\r\n </Typography>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n Receive back {row.reducedFeeOverrideRebate && row.reducedFeeOverrideRebate !== '0' ? row.reducedFeeOverrideRebate : row.medicareRebate} from Medicare\r\n </Typography>\r\n </>\r\n }\r\n </Grid>\r\n </Grid>\r\n </>\r\n }\r\n </>\r\n :\r\n null\r\n }\r\n <Grid container style={{ marginBottom: 15, marginTop: 10 }}>\r\n {row.areasOfInterest.map((row) => {return (<Chip size=\"small\" key={row} variant=\"outlined\" label={row} style={{ margin: 2 }} />)})}\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n </Grid>\r\n <Typography className={classes.pos} color=\"textSecondary\">\r\n <br />\r\n </Typography>\r\n <Grid container>\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={row.bio.substring(0,700)} />\r\n {row.bio.length > 700 ?\r\n <>\r\n ...\r\n <Badge variant=\"secondary\" onClick={()=>moreProviderBio(row.fullname, row.bio)} style={{ marginRight: 5, cursor: 'pointer' }}>\r\n more\r\n </Badge>\r\n </>\r\n :\r\n null\r\n }\r\n </Typography>\r\n </Grid>\r\n </CardContent>\r\n {role && role === 'Client' ?\r\n <>\r\n <CardActions disableSpacing>\r\n <Button size=\"sm\" onClick={()=>savePsychologist(row)}>Select as your {row.providerdescription} </Button>\r\n <IconButton\r\n className={clsx(classes.expand, {\r\n [classes.expandOpen]: expanded,\r\n })}\r\n onClick={() => handleExpandClick(row.id)}\r\n aria-expanded={expanded}\r\n aria-label=\"show more\"\r\n >\r\n <ExpandMoreIcon />\r\n </IconButton>\r\n </CardActions> \r\n <Collapse in={(expanded !== row.id)} timeout=\"auto\" unmountOnExit>\r\n <CardContent> \r\n {row.therapyTypes && row.therapyTypes.map((row) => {return (<Chip size=\"small\" key={row} variant=\"outlined\" label={row} style={{ margin: 2 }} />)})}\r\n </CardContent>\r\n </Collapse> \r\n </>\r\n :\r\n null\r\n }\r\n\r\n </Card>\r\n )\r\n })\r\n }\r\n </Masonry>\r\n :\r\n <Masonry\r\n breakpointCols={isMobile ? 1 : 3}\r\n className=\"my-masonry-grid\"\r\n columnClassName=\"my-masonry-grid_column\">\r\n {filteredPsychologists.map((row, index) => {\r\n return (\r\n <>\r\n <Card className={classes.root} variant=\"outlined\" key={index}>\r\n <CardMedia\r\n className={classes.media}\r\n image={`https://${storageAccountName}.blob.core.windows.net/${containerName}/${row.imageURL}`}\r\n title=\"Psychologist\"\r\n />\r\n <CardContent>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item sm={12}>\r\n <Typography variant=\"h5\" component=\"h3\">\r\n {row.fullname} (Next available: {row.nextAvailable})\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={8} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={4} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {row.supervisorHourlyRate}\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n <Typography className={classes.pos} color=\"textSecondary\">\r\n <br />\r\n </Typography>\r\n <Grid container>\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={row.supervisorBio.substring(0,700)} />\r\n {row.supervisorBio.length > 700 ?\r\n <>\r\n ...\r\n <Badge variant=\"secondary\" onClick={()=>moreProviderBio(row.fullname, row.supervisorBio)} style={{ marginRight: 5, cursor: 'pointer' }}>\r\n more\r\n </Badge>\r\n </>\r\n :\r\n null\r\n }\r\n </Typography>\r\n </Grid>\r\n <br />\r\n </CardContent>\r\n <CardActions disableSpacing>\r\n <Button size=\"sm\" onClick={()=>savePsychologist(row)}>Select as your {row.providerdescription} </Button>\r\n </CardActions> \r\n <CardContent>\r\n <Typography variant=\"h6\" component=\"h3\">\r\n Available For\r\n </Typography>\r\n <Row>\r\n <List className={classes.root}>\r\n {supervisionAreas.map(sRow => {\r\n const labelId = `checkbox-list-label-${sRow.id}`;\r\n var isChecked = row.supervisorAreas.includes(sRow.id);\r\n return (\r\n <ListItem key={sRow.id} role={undefined} dense button >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{sRow.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n })}\r\n </List>\r\n </Row>\r\n <Typography variant=\"h6\" component=\"h3\" style={{paddingTop:20}}>\r\n Endorsed In \r\n </Typography>\r\n <Row>\r\n <List className={classes.root}>\r\n {endorsedSupervisionAreas.map(sRow => {\r\n var isChecked = row.supervisorAreas.includes(sRow.id);\r\n const labelId = `checkbox-list-label-${sRow.id}`;\r\n if (isChecked) {\r\n return(\r\n <ListItem key={sRow.id} role={undefined} dense button >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{sRow.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n )\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Row>\r\n </CardContent>\r\n </Card>\r\n </>\r\n )\r\n })}\r\n </Masonry>\r\n }\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n\r\n <Modal show={showBookingExistsError} onHide={()=>setShowBookingExistsError(false)} dialogClassName=\"new-bookingDialog-modal\" centered>\r\n <Modal.Header closeButton className=\"new-booking-modal\">\r\n <Modal.Title>Warning - Future Booking Exists</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"new-booking-modal\" style={{ backgroundColor: 'rgb(245,245,245)' }}>\r\n <Grid container spacing={2}>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n Unable to change provider as future booking exists. Please cancel future booking and then change Provider\r\n </Grid>\r\n </Grid>\r\n </Modal.Body>\r\n <Modal.Footer className=\"new-booking-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowBookingExistsError(false)} className=\"lightButtonOutlinedLarge\">\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showProviderBio} onHide={()=>setShowProviderBio(false)} dialogClassName=\"invite-modal\" >\r\n <Modal.Header closeButton className=\"invite-modal\">\r\n <Modal.Title>{providerBioFullName}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"invite-modal\" style={{ backgroundColor: 'rgb(245,245,245)' }}>\r\n <Grid container >\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={providerBioBio} />\r\n </Typography>\r\n </Grid>\r\n </Modal.Body>\r\n <Modal.Footer className=\"invite-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowProviderBio(false)} className=\"lightButtonOutlinedLarge\">\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n \r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n ) \r\n}\r\n\r\n","import React, { Suspense } from \"react\";\r\nimport { Redirect, Route, Switch } from \"react-router-dom\";\r\nimport DashboardClient from \"./DashboardClient\";\r\n\r\n// Not sure about these two\r\n// import Basic from \"./Basic\"; \r\nimport { LayoutSplashScreen } from \"../../../_metronic\";\r\n\r\n// Admin Pages \r\nimport ProfileClient from \"./admin/ProfileClient\";\r\nimport BookingsClient from \"./admin/BookingsClient\";\r\nimport FilesClient from \"./admin/FilesClient\";\r\nimport SearchClient from \"./admin/SearchClient\";\r\n\r\n// Reference Pages \r\n// import UserRoles from \"./reference/UserRoles\";\r\n\r\nexport default function HomePageClient() {\r\n\r\n return (\r\n <Suspense fallback={<LayoutSplashScreen />}>\r\n <Switch>\r\n {\r\n /* Redirect from root URL to /dashboard. */\r\n <Redirect exact from=\"/\" to=\"/dashboard\" />\r\n }\r\n <Route path=\"/dashboard\" component={DashboardClient} />\r\n\r\n {/* Client Pages */}\r\n <Route path=\"/profile\" component={ProfileClient} />\r\n <Route path=\"/bookings\" component={BookingsClient} />\r\n <Route path=\"/files\" component={FilesClient} />\r\n <Route path=\"/search\" component={SearchClient} />\r\n\r\n {/* Reference Pages */}\r\n <Redirect to=\"/error/error-v1\" />\r\n </Switch>\r\n </Suspense>\r\n );\r\n}\r\n","import React, { useEffect, useState } from \"react\"; \r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport * as Admin from \"../../store/ducks/admin.duck\";\r\nimport * as Auth from \"../../store/ducks/auth.duck\";\r\nimport { Card, Button, Modal } from \"react-bootstrap\";\r\nimport '../../../_metronic/_assets/css/app2.css';\r\nimport UpdatePassword from '../../components/UpdatePassword'\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\n\r\nexport default function DashboardReferrer() {\r\n \r\n const dispatch = useDispatch()\r\n const isRecovery = useSelector(state => state.auth.recoveryStatus)\r\n const [showUpdatePassword, setShowUpdatePassword] = useState(false)\r\n useEffect( () => { dispatch(Admin.actions.fetchReferrers()) }, [dispatch] )\r\n \r\n useEffect( () => {\r\n if (isRecovery === 'Recovery') {\r\n dispatch(Auth.actions.clearRecovery())\r\n setShowUpdatePassword(true)\r\n }\r\n }, [dispatch,isRecovery])\r\n\r\n\r\n // now init the fields with values so that Formik can manage the touched state\r\n const referrerInit = {\r\n firstname: '', \r\n surname: '', \r\n email: '', \r\n mobilephone: '',\r\n timezone: 'AUS Eastern Standard Time',\r\n newpassword: '',\r\n newpasswordconfirmation: '',\r\n id : 0,\r\n organisationname : ''\r\n }\r\n\r\n\r\n const YoutubeEmbed = ({ embedId }) => (\r\n <div className=\"ytvideo-responsive\">\r\n <iframe\r\n width=\"853\"\r\n height=\"480\"\r\n src={`https://www.youtube.com/embed/${embedId}`}\r\n frameBorder=\"0\"\r\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\r\n allowFullScreen\r\n title=\"Embedded youtube\"\r\n />\r\n </div>\r\n );\r\n\r\n\r\n // get the Referrer records and merge with the initialised fields\r\n var referrerState = useSelector(state => state.admin.Referrers[0]);\r\n var referrer = {...referrerInit, ...referrerState};\r\n\r\n\r\n\r\n return (\r\n <>\r\n <div className=\"row\" style={{ marginBottom: 20 }}>\r\n <div className=\"col-xl-6\">\r\n <Card style={{ marginRight: 20 }}>\r\n <Card.Body className=\"welcome-bg\">\r\n <Card.Title><img src=\"https://files.ruralhealthconnect.com.au/images/logo.png\" className=\"welcome-bg-logo\" alt=\"Rural Health Connect Logo\" /></Card.Title>\r\n <p>Dear {referrer.firstname},</p>\r\n <p>Welcome to Rural Health Connect. We are pleased to be working with you.</p>\r\n <p><strong>NOTE: We now require mental health care plans to be completed before a referral is made via this service. You can attach the mental health care plan as part of this referral. Or your client can request it from their GP and upload it when they sign up. Photos of the pages are fine.</strong></p>\r\n <p>If your client is unable to access a GP then you can refer them to our GP on the platform first.</p>\r\n <p>Before referring your client please ensure that they are suitable for our telehealth service. You can read our referral guidelines <a href={`https://files.ruralhealthconnect.com.au/fileStoreRHC/RHCReferralGuidelines.pdf`} target=\"_Referrers\" style={{ textDecoration: 'underline' }}>here</a></p>\r\n <p>To assist your client in understanding our process, and what to expect, please pass on the information in the blue dot points on the referral page.</p>\r\n <p>As always we are on hand to help if needed. Please email info@ruralhealthconnect.com.au ​or call 0427 692 377.</p>\r\n <p>Thank you!</p>\r\n <p>Rural Health Connect </p>\r\n <hr />\r\n <a href={`https://files.ruralhealthconnect.com.au/fileStoreRHC/RHCReferralGuidelines.pdf`} target=\"_Referrers\">\r\n <Button variant=\"secondary\" size=\"sm\" style={{ color: \"black\", fontWeight: 500, border: 0, background: \"#eee\" }} >\r\n Referral Guidelines\r\n </Button>\r\n </a>\r\n </Card.Body>\r\n </Card>\r\n </div>\r\n <div className=\"col-xl-6\">\r\n < YoutubeEmbed\r\n embedId = {'IYmoANPP3Ko'}\r\n />\r\n </div>\r\n </div>\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n\r\n <Modal show={showUpdatePassword} onHide={()=>setShowUpdatePassword(false)} dialogClassName=\"todos-modal-dialog\">\r\n <Modal.Header closeButton className=\"todos-modal\">\r\n <Modal.Title>You have recently recovered your password, please update your password</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"todos-modal\">\r\n <UpdatePassword setShowUpdatePassword={setShowUpdatePassword} />\r\n </Modal.Body>\r\n </Modal>\r\n </>\r\n )\r\n\r\n}\r\n","import React, { useEffect } from \"react\";\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { Button, Form, Row, Col } from \"react-bootstrap\";\r\nimport { Paper, Grid } from '@material-ui/core';\r\nimport { Formik } from 'formik';\r\nimport * as Yup from \"yup\";\r\nimport Alert from '@material-ui/lab/Alert';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport \"../../../../_metronic/_assets/sass/pages/login/login-1.scss\";\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\n\r\nexport default function ProfileReferrer() {\r\n\r\n const dispatch = useDispatch()\r\n \r\n useEffect( () => { dispatch(Admin.actions.fetchReferrers()) }, [dispatch] )\r\n \r\n \r\n // now init the fields with values so that Formik can manage the touched state\r\n const referrerInit = {\r\n firstname: '', \r\n surname: '', \r\n email: '', \r\n mobilephone: '',\r\n timezone: 'AUS Eastern Standard Time',\r\n newpassword: '',\r\n newpasswordconfirmation: '',\r\n id : 0,\r\n organisationname : ''\r\n }\r\n\r\n // get the Referrer records and merge with the initialised fields\r\n var referrerState = useSelector(state => state.admin.Referrers[0]);\r\n var referrer = {...referrerInit, ...referrerState};\r\n\r\n function submitForm(data){\r\n // Submission Time\r\n dispatch(Admin.actions.putReferrer(data))\r\n }\r\n\r\n const validationSchema = Yup.object().shape({\r\n firstname: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n .required(\"First Name is required\"),\r\n surname: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n .required(\"Surname is required\"),\r\n organisationname: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n .required(\"Organisation is required\"),\r\n email: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(200,\"Too Long\")\r\n .email(\"Enter a valid email\")\r\n .required(\"Email is required\"),\r\n mobilephone: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(12,\"Too Long\")\r\n .required(\"Phone Number is required\"),\r\n newpassword: Yup.string()\r\n .min(8,\"Too Short\")\r\n .oneOf([Yup.ref('newpasswordconfirmation'), null], 'Passwords must match'),\r\n newpasswordconfirmation: Yup.string()\r\n .min(8,\"Too Short\")\r\n .oneOf([Yup.ref('newpassword'), null], 'Passwords must match'),\r\n });\r\n\r\n return (\r\n <>\r\n <Formik\r\n enableReinitialize={true}\r\n initialValues={referrer}\r\n validationSchema = {validationSchema}\r\n onSubmit={(values, actions) => {\r\n submitForm(values);\r\n actions.setSubmitting(false);\r\n }}\r\n >\r\n {props => {\r\n const { values, errors, touched, handleChange, handleSubmit} = props;\r\n const change = (name,e) => { e.persist(); handleChange(e); };\r\n return (\r\n <form noValidate={true} autoComplete=\"off\" onSubmit={handleSubmit} >\r\n\r\n <Paper style={{ backgroundColor: \"rgb(245,245,245)\", padding: 20 }} >\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-end\">\r\n <Grid item md={6} xs={12}>\r\n <h3>Referrer Profile</h3>\r\n </Grid>\r\n <Grid item md={3} xs={6} style={{ fontStyle: \"italic\", fontWeight: 400, textAlign: \"right\", paddingBottom: 4, fontSize: 12 }}>\r\n * indicates required fields\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\"> \r\n {values.message ? (\r\n <Alert severity=\"info\" style={{ marginBottom: 10, marginTop: 8, fontSize: 14 }}>\r\n {values.message}\r\n </Alert>) \r\n : null\r\n }\r\n </Col>\r\n </Row>\r\n <hr style={{ marginTop: 4 }}></hr>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>First Name *</Form.Label>\r\n <Form.Control type=\"text\" name=\"firstname\" value={values.firstname} onChange={change.bind(null, \"firstname\")} autoComplete='new-password' isInvalid={touched.firstname && !!errors.firstname} isValid={touched.firstname && !errors.firstname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.firstname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Surname *</Form.Label>\r\n <Form.Control type=\"text\" name=\"surname\" value={values.surname} onChange={change.bind(null, \"surname\")} autoComplete='new-password' isInvalid={touched.surname && !!errors.surname} isValid={touched.surname && !errors.surname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.surname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Email *</Form.Label>\r\n <Form.Control type=\"text\" name=\"email\" value={values.email} onChange={change.bind(null, \"email\")} isInvalid={touched.email && !!errors.email} isValid={touched.email && !errors.email} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.email}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Phone Number *</Form.Label>\r\n <Form.Control type=\"text\" name=\"mobilephone\" value={values.mobilephone} onChange={change.bind(null, \"mobilephone\")} isInvalid={touched.mobilephone && !!errors.mobilephone} isValid={touched.mobilephone && !errors.mobilephone} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.mobilephone}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Organisation</Form.Label>\r\n <Form.Control type=\"text\" name=\"organisationname\" value={values.organisationname} onChange={change.bind(null, \"organisationname\")} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <h4>Login Details (Leave blank unless updating password)</h4>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Password</Form.Label>\r\n <Form.Control type=\"password\" name=\"newpassword\" value={values.newpassword} autoComplete='new-password' onChange={change.bind(null, \"newpassword\")} isInvalid={touched.newPassword && !!errors.newpassword} isValid={touched.newpassword && !errors.newpassword} />\r\n <div style={{ fontSize: 10, fontWeight: 400, paddingTop: 4, paddingLeft: 4 }}>(Leave blank unless changing)</div>\r\n <Form.Control.Feedback type=\"invalid\">{errors.newpassword}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Confirm Password </Form.Label>\r\n <Form.Control type=\"password\" name=\"newpasswordconfirmation\" value={values.newpasswordconfirmation} onChange={change.bind(null, \"newpasswordconfirmation\")} isInvalid={touched.newpasswordconfirmation && !!errors.newpasswordconfirmation} isValid={touched.newpPasswordconfirmation && !errors.newPasswordconfirmation} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.newpasswordconfirmation}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item md={3} xs={6}>\r\n </Grid>\r\n <Grid item md={1} xs={6} style={{ textAlign: \"right\"}}>\r\n <Button variant=\"primary\" type=\"submit\">\r\n Submit\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n </Paper>\r\n </form>\r\n )\r\n }}\r\n </Formik>\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n />\r\n </>\r\n );\r\n}\r\n\r\n","import React, { Suspense } from \"react\";\r\nimport { Redirect, Route, Switch } from \"react-router-dom\";\r\nimport DashboardReferrer from \"./DashboardReferrer\";\r\n\r\n// Not sure about these two\r\nimport { LayoutSplashScreen } from \"../../../_metronic\";\r\n\r\n// Admin Pages \r\nimport { ClientInvitesReferrer } from \"./admin/ClientInvites\";\r\nimport ProfileReferrer from \"./admin/ProfileReferrer\";\r\nimport SearchClient from \"./admin/SearchClient\";\r\n\r\n// Reference Pages \r\n// import UserRoles from \"./reference/UserRoles\";\r\n\r\nexport default function HomePageReferrer() {\r\n\r\n return (\r\n <Suspense fallback={<LayoutSplashScreen />}>\r\n <Switch>\r\n {\r\n /* Redirect from root URL to /dashboard. */\r\n <Redirect exact from=\"/\" to=\"/dashboard\" />\r\n }\r\n <Route path=\"/dashboard\" component={DashboardReferrer} />\r\n\r\n {/* Admin Pages */}\r\n <Route path=\"/clientinvites\" component={ClientInvitesReferrer} />\r\n <Route path=\"/profile\" component={ProfileReferrer} />\r\n <Route path=\"/search\" component={SearchClient} />\r\n {/* Reference Pages */}\r\n <Redirect to=\"/error/error-v1\" />\r\n </Switch>\r\n </Suspense>\r\n );\r\n}\r\n\r\n","import React from \"react\";\r\nimport { toAbsoluteUrl } from \"../../../_metronic\";\r\nimport \"../../../_metronic/_assets/sass/pages/error/error-1.scss\";\r\n\r\nexport function ErrorPage1() {\r\n return (\r\n <>\r\n <div className=\"kt-grid kt-grid--ver kt-grid--root\">\r\n <div\r\n className=\"kt-grid__item kt-grid__item--fluid kt-grid kt-error-v1\"\r\n style={{\r\n backgroundImage: `url(${toAbsoluteUrl(\r\n \"/media/error/bg1.jpg\"\r\n )})`\r\n }}\r\n >\r\n <div className=\"kt-error-v1__container\">\r\n <h1 className=\"kt-error-v1__number\">404</h1>\r\n <p className=\"kt-error-v1__desc\">OOPS! Something went wrong here</p>\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { toAbsoluteUrl } from \"../../../_metronic\";\r\nimport \"../../../_metronic/_assets/sass/pages/error/error-2.scss\";\r\n\r\nexport function ErrorPage2() {\r\n return (\r\n <>\r\n <div className=\"kt-grid kt-grid--ver kt-grid--root\">\r\n <div\r\n className=\"kt-grid__item kt-grid__item--fluid kt-grid kt-error-v2\"\r\n style={{\r\n backgroundImage: `url(${toAbsoluteUrl(\"/media/error/bg2.jpg\")})`\r\n }}\r\n >\r\n <div className=\"kt-error_container\">\r\n <div className=\"kt-error-v1__container\">\r\n <span className=\"kt-error_title2 kt-font-light\">\r\n <h1>OOPS!</h1>\r\n </span>\r\n <span className=\"kt-error_desc kt-font-light\">\r\n Something went wrong here\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { toAbsoluteUrl } from \"../../../_metronic\";\r\nimport \"../../../_metronic/_assets/sass/pages/error/error-3.scss\";\r\n\r\nexport function ErrorPage3() {\r\n return (\r\n <>\r\n <div className=\"kt-grid kt-grid--ver kt-grid--root\">\r\n <div\r\n className=\"kt-grid__item kt-grid__item--fluid kt-grid kt-error-v3\"\r\n style={{\r\n backgroundImage: `url(${toAbsoluteUrl(\r\n \"/media/error/bg3.jpg\"\r\n )})`\r\n }}\r\n >\r\n <div className=\"kt-error_container\">\r\n <div className=\"kt-error_number\">\r\n <h1>404</h1>\r\n </div>\r\n <p className=\"kt-error_title kt-font-light\">How did you get here</p>\r\n <p className=\"kt-error_subtitle\">\r\n Sorry we can't seem to find the page you're looking for.\r\n </p>\r\n <p className=\"kt-error_description\">\r\n There may be a misspelling in the URL entered,\r\n <br />\r\n or the page you are looking for may no longer exist.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { toAbsoluteUrl } from \"../../../_metronic\";\r\nimport \"../../../_metronic/_assets/sass/pages/error/error-4.scss\";\r\n\r\nexport function ErrorPage4() {\r\n return (\r\n <>\r\n <div className=\"kt-grid kt-grid--ver kt-grid--root\">\r\n <div\r\n className=\"kt-grid__item kt-grid__item--fluid kt-grid kt-error-v4\"\r\n style={{\r\n backgroundImage: `url(${toAbsoluteUrl(\"/media//error/bg4.jpg\")})`\r\n }}\r\n >\r\n <div className=\"kt-error_container\">\r\n <h1 className=\"kt-error_number\">404</h1>\r\n <p className=\"kt-error_title\">ERROR</p>\r\n <p className=\"kt-error_description\">Nothing left to do here.</p>\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { toAbsoluteUrl } from \"../../../_metronic\";\r\nimport \"../../../_metronic/_assets/sass/pages/error/error-5.scss\";\r\n\r\nexport function ErrorPage5() {\r\n return (\r\n <>\r\n <div className=\"kt-grid kt-grid--ver kt-grid--root\">\r\n <div\r\n className=\"kt-grid__item kt-grid__item--fluid kt-grid kt-error-v5\"\r\n style={{\r\n backgroundImage: `url(${toAbsoluteUrl(\"/media/error/bg5.jpg\")})`\r\n }}\r\n >\r\n <div className=\"kt-error_container\">\r\n <span className=\"kt-error_title\">\r\n <h1>Oops!</h1>\r\n </span>\r\n <p className=\"kt-error_subtitle\">Something went wrong here.</p>\r\n <p className=\"kt-error_description\">\r\n We're working on it and we'll get it fixed\r\n <br />\r\n as soon possible.\r\n <br />\r\n You can back or use our Help Center.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { toAbsoluteUrl } from \"../../../_metronic\";\r\nimport \"../../../_metronic/_assets/sass/pages/error/error-6.scss\";\r\n\r\nexport function ErrorPage6() {\r\n return (\r\n <>\r\n <div className=\"kt-grid kt-grid--ver kt-grid--root\">\r\n <div\r\n className=\"kt-grid__item kt-grid__item--fluid kt-grid kt-error-v6\"\r\n style={{\r\n backgroundImage: `url(${toAbsoluteUrl(\"/media//error/bg6.jpg\")})`\r\n }}\r\n >\r\n <div className=\"kt-error_container\">\r\n <div className=\"kt-error_subtitle kt-font-light\">\r\n <h1>Oops...</h1>\r\n </div>\r\n\r\n <p className=\"kt-error_description kt-font-light\">\r\n Looks like something went wrong.\r\n <br />\r\n We're working on it\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { Redirect, Route, Switch } from \"react-router-dom\";\r\nimport { ErrorPage1 } from \"./ErrorPage1\";\r\nimport { ErrorPage2 } from \"./ErrorPage2\";\r\nimport { ErrorPage3 } from \"./ErrorPage3\";\r\nimport { ErrorPage4 } from \"./ErrorPage4\";\r\nimport { ErrorPage5 } from \"./ErrorPage5\";\r\nimport { ErrorPage6 } from \"./ErrorPage6\";\r\n\r\nexport default function ErrorsPage() {\r\n return (\r\n <Switch>\r\n <Redirect from=\"/error\" exact={true} to=\"/error/error-v1\" />\r\n <Route path=\"/error/error-v1\" component={ErrorPage1} />\r\n <Route path=\"/error/error-v2\" component={ErrorPage2} />\r\n <Route path=\"/error/error-v3\" component={ErrorPage3} />\r\n <Route path=\"/error/error-v4\" component={ErrorPage4} />\r\n <Route path=\"/error/error-v5\" component={ErrorPage5} />\r\n <Route path=\"/error/error-v6\" component={ErrorPage6} />\r\n </Switch>\r\n );\r\n}\r\n","import React, { Component } from \"react\";\r\nimport * as auth from \"../../store/ducks/auth.duck\";\r\nimport * as admin from \"../../store/ducks/admin.duck\";\r\nimport { connect } from \"react-redux\";\r\nimport { Redirect } from \"react-router-dom\";\r\n// import { LayoutSplashScreen } from \"../../../_metronic\";\r\n\r\n\r\nclass Logout extends Component {\r\n componentDidMount() {\r\n this.props.setAdminInitialState();\r\n this.props.logout();\r\n }\r\n\r\n render() {\r\n // for some reason this just hangs, so replace it with simple Redirect\r\n \r\n // const { hasAuthToken } = this.props;\r\n // return hasAuthToken ? <LayoutSplashScreen /> : <Redirect to=\"/auth\" />;\r\n return <Redirect to=\"/auth\" />\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n logout: () => dispatch(auth.actions.logout()),\r\n setAdminInitialState: () => dispatch(admin.actions.setAdminInitialState()),\r\n };\r\n};\r\n\r\n\r\n\r\nexport default connect(\r\n ({ auth }) => ({ hasAuthToken: Boolean(auth.authToken) }),\r\n mapDispatchToProps\r\n)(Logout);\r\n","/* eslint-disable no-script-url,jsx-a11y/anchor-is-valid */\r\nimport React from \"react\";\r\nimport { OverlayTrigger, Tooltip } from \"react-bootstrap\";\r\n// import { ReactComponent as Layout4BlocksIcon } from \"../assets/layout-svg-icons/Layout-4-blocks.svg\";\r\nimport KTOffcanvas from \"../../_assets/js/offcanvas\";\r\nimport NotificationsActiveIcon from '@material-ui/icons/NotificationsActive';\r\n\r\nexport default class QuickPanelToggler extends React.Component {\r\n componentDidMount() {\r\n // eslint-disable-next-line\r\n const panel = document.getElementById(\"kt_quick_panel\");\r\n\r\n // eslint-disable-next-line\r\n const offCanvas = new KTOffcanvas(panel, {\r\n overlay: true,\r\n baseClass: \"kt-quick-panel\",\r\n closeBy: \"kt_quick_panel_close_btn\",\r\n toggleBy: \"kt_quick_panel_toggler_btn\"\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n <div\r\n className=\"kt-header__topbar-item kt-header__topbar-item--quick-panel\"\r\n data-toggle=\"kt-tooltip\"\r\n title=\"Quick panel\"\r\n data-placement=\"right\"\r\n >\r\n <span\r\n className=\"kt-header__topbar-icon\"\r\n id=\"kt_quick_panel_toggler_btn\"\r\n >\r\n <OverlayTrigger\r\n placement=\"bottom\"\r\n overlay={<Tooltip id=\"quick-panel-tooltip\">Notifications</Tooltip>}\r\n >\r\n <NotificationsActiveIcon style={{ fontSize: 30, marginLeft: 20, marginTop: -24 }} />\r\n </OverlayTrigger>\r\n </span>\r\n </div>\r\n </>\r\n );\r\n }\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\n// import { useLocation } from 'react-router-dom';\r\nimport * as Admin from \"../../../app/store/ducks/admin.duck\";\r\nimport { Modal } from \"react-bootstrap\";\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport DescriptionIcon from '@material-ui/icons/Description';\r\n// import HelpOutlineIcon from '@material-ui/icons/HelpOutline';\r\nimport YouTubeIcon from '@material-ui/icons/YouTube';\r\nimport List from '@material-ui/core/List';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport QuickPanelToggler from \"./QuickPanelToggle\";\r\n\r\nimport '../../../app/components/DashStyle/topbar.scss'\t\t\t\t\t\t\t\t\t\t// RHC-DASH-STYLE: Obviously this is garbage. ¯\\_(ツ)_/¯\r\n \r\nexport default function Topbar({ isDashStyle=false }) {\t\t\t\t\t\t\t\t\t\t// RHC-DASH-STYLE-UPDATE: Add the props\r\n\r\n // const pathname = useLocation().pathname\t\t\t\t\t\t\t\t\t\t\t\t\t// RHC-DASH-STYLE\r\n\t// (below) Get from redux. Random here to show different \t\t\t\t\t\t\t\t RHC-DASH-STYLE\r\n\t// styles for 0, 1,8 and 9+. max set to show 9+ more often.\t\t\t\t\t\t\t RHC-DASH-STYLE\r\n\tconst noteCount = Math.floor(Math.random() * 15);\t\t\t\t\t\t\t\t\t\t// RHC-DASH-STYLE:\r\n\r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Admin.actions.fetchHelpItems()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchResourceItems()) }, [dispatch] )\r\n\r\n const helpItems = useSelector(state => state.admin.HelpItems)\r\n const resourceItems = useSelector(state => state.admin.ResourceItems)\r\n const [show, setShow] = useState(false);\r\n const [showResources, setShowResources] = useState(false);\r\n // const ConditionalWrapper = ({ condition, wrapper, children }) => condition ? wrapper(children) : children;\t// RHC-DASH-STYLE-UPDATE: Overkill but you may eventually have more than just the help item.\r\n \r\n function renderLink(item) {\r\n if(item.pdf_url !== '')\r\n {\r\n return (\r\n <ListItem button key={`item-${item.title}`}>\r\n <ListItemIcon>\r\n <DescriptionIcon />\r\n </ListItemIcon>\r\n <a href={`https://files.ruralhealthconnect.com.au/fileStoreRHC/${item.pdf_url}`} target=\"_help\">\r\n <ListItemText primary={item.title} /> \r\n </a>\r\n </ListItem>\r\n )\r\n }\r\n else if(item.youtube_url !== '')\r\n {\r\n return (\r\n <ListItem button key={`item-${item.title}`}>\r\n <ListItemIcon>\r\n <YouTubeIcon />\r\n </ListItemIcon>\r\n <a href={item.youtube_url} target=\"_help\">\r\n <ListItemText primary={item.title} /> \r\n </a>\r\n </ListItem>\r\n )\r\n }\r\n }\r\n \r\n return (\r\n <>\r\n <div className=\"kt-header__topbar\" style={{ paddingTop: 20, cursor: 'pointer' }}>\r\n <h4 style={{ paddingRight: 10 }} onClick={()=>setShow(true)}>Help</h4>\r\n <h4 onClick={()=>setShowResources(true)}>Resources</h4>\r\n <QuickPanelToggler noteCount={noteCount} /> \r\n </div>\r\n\r\n\r\n <Modal show={show} onHide={() => setShow(false)} dialogClassName=\"edit-md-modal\">\r\n <Modal.Header className=\"edit-md-modal\">\r\n <Modal.Title>Online Help</Modal.Title>\r\n <CloseIcon onClick={() => setShow(false)} style={{ cursor: 'pointer' }} />\r\n </Modal.Header>\r\n <Modal.Body className=\"edit-md-modal\">\r\n <List component=\"nav\" aria-label=\"Help topics\">\r\n {helpItems.map(item=>renderLink(item))}\r\n </List>\r\n </Modal.Body>\r\n </Modal>\r\n\r\n <Modal show={showResources} onHide={() => setShowResources(false)} dialogClassName=\"edit-md-modal\">\r\n <Modal.Header className=\"edit-md-modal\">\r\n <Modal.Title>Resources</Modal.Title>\r\n <CloseIcon onClick={() => setShowResources(false)} style={{ cursor: 'pointer' }} />\r\n </Modal.Header>\r\n <Modal.Body className=\"edit-md-modal\">\r\n <List component=\"nav\" aria-label=\"Resources\">\r\n {resourceItems.map(item=>renderLink(item))}\r\n </List>\r\n </Modal.Body>\r\n </Modal>\r\n\r\n </>\r\n );\r\n}\r\n","import React from \"react\";\r\n\r\nexport default class HMenuItemInner extends React.Component {\r\n\r\n itemCssClassWithBullet(item, parentItem) {\r\n if (item.bullet) {\r\n return `kt-menu__link-bullet--${item.bullet}`;\r\n }\r\n\r\n if (parentItem && parentItem.bullet) {\r\n return `kt-menu__link-bullet--${parentItem.bullet}`;\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n render() {\r\n const { item, parentItem} = this.props;\r\n return (\r\n <>\r\n {/* if menu item has icon */}\r\n {item.icon && (\r\n <i className={`kt-menu__link-icon ${item.icon}`} />\r\n )}\r\n\r\n {/* if menu item using bullet */}\r\n {(!item.icon && (item.bullet || (parentItem && parentItem.bullet))) && (\r\n <i className={`kt-menu__link-bullet ${this.itemCssClassWithBullet(item, parentItem)}`}><span /></i>\r\n )}\r\n\r\n {!item.badge ? (\r\n <>\r\n <span className=\"kt-menu__item-here\"/>\r\n {/* menu item title text */}\r\n <span className=\"kt-menu__link-text\">{item.title}</span>\r\n </>\r\n ) : (\r\n <>\r\n {/* menu item with badge */}\r\n <span className=\"kt-menu__link-text\">{item.title}</span>\r\n <span className=\"kt-menu__link-badge\">\r\n <span className={`kt-badge kt-badge--brand kt-badge--inline kt-badge--pill ${item.badge.type} `}>\r\n {item.badge.value}\r\n </span>\r\n </span>\r\n </>\r\n )}\r\n </>\r\n );\r\n }\r\n}\r\n","import React from \"react\";\r\nimport HMenuItem from \"./HMenuItem\";\r\n\r\nexport default class HMenuColumn extends React.Component {\r\n render() {\r\n const { item, currentUrl } = this.props;\r\n return (\r\n <li className=\"kt-menu__item\">\r\n {item.heading && (\r\n <h3 className=\"kt-menu__heading kt-menu__toggle\">\r\n <span className=\"kt-menu__link-text\">{item.heading.title}</span>\r\n <i className=\"kt-menu__ver-arrow la la-angle-right\" />\r\n </h3>\r\n )}\r\n {item.items && item.items.length && (\r\n <ul className=\"kt-menu__inner\">\r\n {item.items.map((child, index) => {\r\n return (\r\n <React.Fragment key={`hmenuColumnInnerColumn${index}`}>\r\n <HMenuItem\r\n item={child}\r\n parentItem={item}\r\n currentUrl={currentUrl}\r\n />\r\n </React.Fragment>\r\n );\r\n })}\r\n </ul>\r\n )}\r\n </li>\r\n );\r\n }\r\n}\r\n","/* eslint-disable no-script-url,jsx-a11y/anchor-is-valid */\r\nimport React from \"react\";\r\nimport objectPath from \"object-path\";\r\nimport clsx from \"clsx\";\r\nimport MenuItemInner from \"./HMenuItemInner\";\r\nimport HMenuColumn from \"./HMenuColumn\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\nexport default class HMenuItem extends React.Component {\r\n /**\r\n * Returns Attribute SubMenu Toggle\r\n * @param item: any\r\n */\r\n getItemAttrSubmenuToggle = item => {\r\n const toggleEvent = objectPath.get(item, \"toggle\");\r\n if (toggleEvent === \"click\") {\r\n return \"click\";\r\n }\r\n\r\n if (objectPath.get(item, \"submenu.type\") === \"tabs\") {\r\n return \"tabs\";\r\n }\r\n\r\n return \"hover\";\r\n };\r\n\r\n /**\r\n * Check Menu is active\r\n * @param item: any\r\n */\r\n isMenuItemIsActive = item => {\r\n if (item.submenu) {\r\n return this.isMenuRootItemIsActive(item);\r\n }\r\n\r\n if (!item.page) {\r\n return false;\r\n }\r\n\r\n return this.props.currentUrl.indexOf(item.page) !== -1;\r\n };\r\n\r\n /**\r\n * Check Menu Root Item is active\r\n * @param item: any\r\n */\r\n isMenuRootItemIsActive = item => {\r\n if (item.submenu && !item.submenu.type) {\r\n for (const _subItem of item.submenu) {\r\n const isActive = this.isMenuItemIsActive(_subItem);\r\n if (isActive) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n if (item.submenu && item.submenu.columns) {\r\n for (const _column of item.submenu.columns) {\r\n for (const _subItem of _column.items)\r\n {\r\n const isActive = this.isMenuItemIsActive(_subItem);\r\n if (isActive) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n /**\r\n * Return Css Class Name\r\n * @param item: any\r\n */\r\n getItemCssClasses = item => {\r\n let classes = \"kt-menu__item\";\r\n\r\n if (objectPath.get(item, \"submenu\")) {\r\n classes += \" kt-menu__item--submenu\";\r\n }\r\n\r\n const isActive = this.isMenuItemIsActive(item);\r\n if (!item.submenu && isActive) {\r\n classes += \" kt-menu__item--active kt-menu__item--here\";\r\n }\r\n\r\n if (item.submenu && isActive) {\r\n classes += \" kt-menu__item--open kt-menu__item--here\";\r\n }\r\n\r\n if (objectPath.get(item, \"resizer\")) {\r\n classes += \" kt-menu__item--resize\";\r\n }\r\n\r\n const menuType = objectPath.get(item, \"submenu.type\") || \"classic\";\r\n if (\r\n (objectPath.get(item, \"root\") && menuType === \"classic\") ||\r\n parseInt(objectPath.get(item, \"submenu.width\"), 10) > 0\r\n ) {\r\n classes += \" kt-menu__item--rel\";\r\n }\r\n\r\n const customClass = objectPath.get(item, \"custom-class\");\r\n if (customClass) {\r\n classes += \" \" + customClass;\r\n }\r\n\r\n if (objectPath.get(item, \"icon-only\")) {\r\n classes += \" kt-menu__item--icon-only\";\r\n }\r\n\r\n return classes;\r\n };\r\n\r\n /**\r\n * Returns Submenu CSS Class Name\r\n * @param item: any\r\n */\r\n getItemMenuSubmenuClass = item => {\r\n let classes = \"\";\r\n\r\n const alignment = objectPath.get(item, \"alignment\") || \"right\";\r\n\r\n if (alignment) {\r\n classes += \" kt-menu__submenu--\" + alignment;\r\n }\r\n\r\n const type = objectPath.get(item, \"type\") || \"classic\";\r\n if (type === \"classic\") {\r\n classes += \" kt-menu__submenu--classic\";\r\n }\r\n if (type === \"tabs\") {\r\n classes += \" kt-menu__submenu--tabs\";\r\n }\r\n if (type === \"mega\") {\r\n if (objectPath.get(item, \"width\")) {\r\n classes += \" kt-menu__submenu--fixed\";\r\n }\r\n }\r\n\r\n if (objectPath.get(item, \"pull\")) {\r\n classes += \" kt-menu__submenu--pull\";\r\n }\r\n\r\n return classes;\r\n };\r\n\r\n render() {\r\n const { item, parentItem, currentUrl, rootArrowEnabled } = this.props;\r\n return (\r\n <li\r\n className={this.getItemCssClasses(item)}\r\n aria-haspopup=\"true\"\r\n data-ktmenu-submenu-toggle={this.getItemAttrSubmenuToggle(item)}\r\n data-ktmenu-submenu-mode={item.mode}\r\n data-ktmenu-dropdown-toggle-class={item[\"dropdown-toggle-class\"]}\r\n >\r\n {/* if item has submenu */}\r\n {item.submenu && (\r\n <a\r\n className={`kt-menu__link ${clsx({\r\n \"kt-menu__toggle\": item.root || item.submenu\r\n })}`}\r\n >\r\n <MenuItemInner\r\n item={item}\r\n parentItem={parentItem}\r\n currentUrl={currentUrl}\r\n />\r\n {rootArrowEnabled && (\r\n <>\r\n {item.submenu && item.root && (\r\n <>\r\n <i className=\"kt-menu__hor-arrow la la-angle-down\" />\r\n <i className=\"kt-menu__ver-arrow la la-angle-right\" />\r\n </>\r\n )}\r\n </>\r\n )}\r\n\r\n {item.submenu && !item.root && (\r\n <>\r\n <i className=\"kt-menu__hor-arrow la la-angle-right\" />\r\n <i className=\"kt-menu__ver-arrow la la-angle-right\" />\r\n </>\r\n )}\r\n </a>\r\n )}\r\n\r\n {/* if item hasn't submenu */}\r\n {!item.submenu && (\r\n <Link to={`/${item.page || \"\"}`} className=\"kt-menu__link\">\r\n <MenuItemInner\r\n item={item}\r\n parentItem={parentItem}\r\n currentUrl={currentUrl}\r\n />\r\n </Link>\r\n )}\r\n\r\n {/* if menu item has submenu child then recursively call new menu item component */}\r\n {item.submenu && (\r\n <div\r\n className={`kt-menu__submenu ${this.getItemMenuSubmenuClass(item)}`}\r\n style={{ width: item.submenu.width }}\r\n >\r\n <span\r\n className={`kt-menu__arrow ${clsx({\r\n \"kt-menu__arrow--adjust\": item.root\r\n })}`}\r\n />\r\n\r\n {item.submenu && item.submenu.length && (\r\n <ul className=\"kt-menu__subnav\">\r\n {item.submenu.map((child, index) => {\r\n return (\r\n <React.Fragment key={`hmenuListInner${index}`}>\r\n <HMenuItem\r\n item={child}\r\n parentItem={item}\r\n currentUrl={currentUrl}\r\n />\r\n </React.Fragment>\r\n );\r\n })}\r\n </ul>\r\n )}\r\n\r\n {item.submenu.items && item.submenu.items.length && (\r\n <ul className=\"kt-menu__subnav\">\r\n {item.submenu.items.map((child, index) => {\r\n return (\r\n <React.Fragment key={`hmenuListInner2${index}`}>\r\n <HMenuItem\r\n item={child}\r\n parentItem={item}\r\n currentUrl={currentUrl}\r\n />\r\n </React.Fragment>\r\n );\r\n })}\r\n </ul>\r\n )}\r\n\r\n {item.submenu.type === \"mega\" &&\r\n (item.submenu.columns && item.submenu.columns.length) && (\r\n <div className=\"kt-menu__subnav\">\r\n <ul className=\"kt-menu__content\">\r\n {item.submenu.columns.map((child, index) => {\r\n return (\r\n <React.Fragment key={`hmenuColumnInner${index}`}>\r\n <HMenuColumn\r\n item={child}\r\n parentItem={item}\r\n currentUrl={currentUrl}\r\n />\r\n </React.Fragment>\r\n );\r\n })}\r\n </ul>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </li>\r\n );\r\n }\r\n}\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { Link, withRouter } from \"react-router-dom\";\r\nimport objectPath from \"object-path\";\r\nimport HMenuItem from \"./HMenuItem\";\r\nimport * as builder from \"../../../ducks/builder\";\r\nimport { toAbsoluteUrl } from \"../../..\";\r\nimport KTMenu from \"../../../_assets/js/menu\";\r\nimport KTOffcanvas from \"../../../_assets/js/offcanvas\";\r\n\r\nconst offcanvasOptions = {\r\n overlay: true,\r\n baseClass: \"kt-header-menu-wrapper\",\r\n closeBy: \"kt_header_menu_mobile_close_btn\",\r\n toggleBy: {\r\n target: \"kt_header_mobile_toggler\",\r\n state: \"kt-header-mobile__toolbar-toggler--active\"\r\n }\r\n};\r\n\r\nclass HMenu extends React.Component {\r\n offCanvasCommonRef = React.createRef();\r\n ktMenuCommonRef = React.createRef();\r\n\r\n getHeaderLogo() {\r\n let result = \"logo-light.png\";\r\n // console.log(\"this.props.headerSelfSkin\", this.props.headerSelfSkin);\r\n if (this.props.headerSelfSkin && this.props.headerSelfSkin !== \"dark\") {\r\n result = \"logo-dark.png\";\r\n }\r\n return toAbsoluteUrl(`/media/logos/${result}`);\r\n }\r\n\r\n get currentUrl() {\r\n return this.props.location.pathname.split(/[?#]/)[0];\r\n }\r\n\r\n componentDidMount() {\r\n // Canvas\r\n this.initOffCanvas();\r\n // Menu\r\n this.initKTMenu();\r\n }\r\n\r\n initOffCanvas = () => {\r\n // eslint-disable-next-line no-undef\r\n new KTOffcanvas(this.offCanvasCommonRef.current, offcanvasOptions);\r\n };\r\n\r\n initKTMenu = () => {\r\n let menuOptions = {\r\n submenu: {\r\n desktop: \"dropdown\",\r\n tablet: \"accordion\",\r\n mobile: \"accordion\"\r\n },\r\n accordion: {\r\n slideSpeed: 200, // accordion toggle slide speed in milliseconds\r\n expandAll: false // allow having multiple expanded accordions in the menu\r\n },\r\n dropdown: {\r\n timeout: 50\r\n }\r\n };\r\n\r\n let menuDesktopMode = \"accordion\";\r\n if (\r\n this.ktMenuCommonRef.current.getAttribute(\"data-ktmenu-dropdown\") === \"1\"\r\n ) {\r\n menuDesktopMode = \"dropdown\";\r\n }\r\n\r\n if (typeof objectPath.get(menuOptions, \"submenu.desktop\") === \"object\") {\r\n menuOptions.submenu.desktop = {\r\n default: menuDesktopMode\r\n };\r\n }\r\n\r\n // eslint-disable-next-line no-undef\r\n new KTMenu(this.ktMenuCommonRef.current, menuOptions);\r\n };\r\n\r\n render() {\r\n const {\r\n disabledAsideSelfDisplay,\r\n ktMenuClasses,\r\n ulClasses,\r\n rootArrowEnabled\r\n } = this.props;\r\n const items = this.props.menuConfig.header.items;\r\n return (\r\n <>\r\n <button\r\n className=\"kt-header-menu-wrapper-close\"\r\n id=\"kt_header_menu_mobile_close_btn\"\r\n >\r\n <i className=\"la la-close\" />\r\n </button>\r\n <div\r\n className=\"kt-header-menu-wrapper\"\r\n id=\"kt_header_menu_wrapper\"\r\n ref={this.offCanvasCommonRef}\r\n >\r\n {disabledAsideSelfDisplay && (\r\n <div className=\"kt-header-logo\">\r\n <Link to=\"/\">\r\n <img alt=\"logo\" src={this.getHeaderLogo()} />\r\n </Link>\r\n </div>\r\n )}\r\n\r\n <div\r\n id=\"kt_header_menu\"\r\n className={`kt-header-menu kt-header-menu-mobile ${ktMenuClasses}`}\r\n ref={this.ktMenuCommonRef}\r\n >\r\n <ul className={`kt-menu__nav ${ulClasses}`}>\r\n {items.map((item, index) => {\r\n return (\r\n <React.Fragment key={`hmenuList${index}`}>\r\n {item.title && (\r\n <HMenuItem\r\n item={item}\r\n currentUrl={this.currentUrl}\r\n rootArrowEnabled={rootArrowEnabled}\r\n />\r\n )}\r\n </React.Fragment>\r\n );\r\n })}\r\n </ul>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = store => ({\r\n config: store.builder.layoutConfig,\r\n menuConfig: store.builder.menuConfig,\r\n ktMenuClasses: builder.selectors.getClasses(store, {\r\n path: \"header_menu\",\r\n toString: true\r\n }),\r\n rootArrowEnabled: builder.selectors.getConfig(\r\n store,\r\n \"header.menu.self.root-arrow\"\r\n ),\r\n headerSelfSkin: builder.selectors.getConfig(store, \"header.self.skin\"),\r\n ulClasses: builder.selectors.getClasses(store, {\r\n path: \"header_menu_nav\",\r\n toString: true\r\n }),\r\n disabledAsideSelfDisplay:\r\n objectPath.get(store.builder.layoutConfig, \"aside.self.display\") === false\r\n});\r\n\r\nexport default withRouter(connect(mapStateToProps)(HMenu));\r\n","import React from \"react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { Progress } from \"reactstrap\";\r\n\r\nclass AnimateLoading extends React.Component {\r\n animateTimeout;\r\n stopAnimateTimeout;\r\n state = {\r\n width: 0,\r\n routeChanged: false\r\n };\r\n\r\n componentDidUpdate(nextProps) {\r\n if (this.props.location.pathname !== nextProps.location.pathname) {\r\n this.animate();\r\n }\r\n }\r\n\r\n animate() {\r\n this.animateTimeout = setTimeout(() => {\r\n if (this.state.width <= 100) {\r\n this.setState({ width: this.state.width + 10 });\r\n this.animate();\r\n } else {\r\n this.stopAnimate();\r\n }\r\n }, 30);\r\n }\r\n stopAnimate() {\r\n clearTimeout(this.animateInterval);\r\n this.stopAnimateTimeout = setTimeout(() => {\r\n this.setState({ width: 0 });\r\n }, 300);\r\n }\r\n componentWillUnmount() {\r\n if (this.stopAnimateTimeout) {\r\n clearTimeout(this.stopAnimateTimeout);\r\n }\r\n if (this.animateTimeout) {\r\n clearTimeout(this.animateTimeout);\r\n }\r\n }\r\n render() {\r\n return (\r\n <div\r\n className=\"header-progress-bar\"\r\n style={{ height: \"3px\", width: \"100%\" }}\r\n >\r\n {this.state.width > 0 && (\r\n <Progress value={this.state.width} style={{ height: \"3px\" }} />\r\n )}\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default withRouter(AnimateLoading);\r\n","import React from 'react'\r\n// import { useLocation } from 'react-router-dom'\r\nimport { useSelector } from 'react-redux'\r\n\r\nfunction RHCHeader() {\r\n \r\n \r\n const firstName = useSelector(state => state.auth.firstName)\r\n const preferredName = useSelector(state => state.auth.preferredName)\r\n const surname = useSelector(state => state.auth.surname)\r\n\r\n let first = ''\r\n if (preferredName && preferredName.length > 2) {\r\n first = preferredName\r\n } else {\r\n first = firstName\r\n }\r\n\r\n return (\r\n <div className={`bc_header`}>\r\n <h2 className=\"kt-subheader__title\">\r\n Hello {(first || surname) && ` ${first} ${surname} `}\r\n </h2>\r\n </div>\r\n )\r\n}\r\n\r\nexport default RHCHeader\r\n","var _title, _desc, _defs, _g;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgFilePlus = function SvgFilePlus(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"24px\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"Stockholm-icons / Files / File-plus\")) : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null)), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Stockholm-icons-/-Files-/-File-plus\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Shape\",\n points: \"0 0 24 0 24 24 0 24\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.85714286,2 L13.7364114,2 C14.0910962,2 14.4343066,2.12568431 14.7051108,2.35473959 L19.4686994,6.3839416 C19.8056532,6.66894833 20,7.08787823 20,7.52920201 L20,20.0833333 C20,21.8738751 19.9795521,22 18.1428571,22 L5.85714286,22 C4.02044787,22 4,21.8738751 4,20.0833333 L4,3.91666667 C4,2.12612489 4.02044787,2 5.85714286,2 Z\",\n id: \"Combined-Shape\",\n fill: \"#000000\",\n fillRule: \"nonzero\",\n opacity: 0.3\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11,14 L9,14 C8.44771525,14 8,13.5522847 8,13 C8,12.4477153 8.44771525,12 9,12 L11,12 L11,10 C11,9.44771525 11.4477153,9 12,9 C12.5522847,9 13,9.44771525 13,10 L13,12 L15,12 C15.5522847,12 16,12.4477153 16,13 C16,13.5522847 15.5522847,14 15,14 L13,14 L13,16 C13,16.5522847 12.5522847,17 12,17 C11.4477153,17 11,16.5522847 11,16 L11,14 Z\",\n id: \"Combined-Shape\",\n fill: \"#000000\"\n }))));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgFilePlus, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/File-plus.7a98d07d.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport objectPath from \"object-path\";\r\nimport Topbar from \"./Topbar\";\r\nimport HMenu from \"./HMenu/HMenu\";\r\nimport AnimateLoading from \"../../../app/partials/layout/AnimateLoading\";\r\nimport KTHeader from \"../../_assets/js/header\";\r\nimport * as builder from \"../../ducks/builder\";\r\nimport RHCHeader from './RHCHeader'\r\nimport { withRouter } from 'react-router-dom';\r\n\r\nclass Header extends React.Component {\r\n headerCommonRef = React.createRef();\r\n\r\n componentDidMount() {\r\n let options = {};\r\n if (\r\n this.headerCommonRef.current.getAttribute(\"data-ktheader-minimize\") ===\r\n \"1\"\r\n ) {\r\n options[\"minimize.desktop.on\"] = \"kt-header--minimize\";\r\n options[\"offset.desktop\"] = 130;\r\n }\r\n\r\n // eslint-disable-next-line no-undef\r\n new KTHeader(this.headerCommonRef.current, options);\r\n }\r\n\r\n render() {\r\n const {\r\n menuHeaderDisplay,\r\n headerAttributes,\r\n roledesc,\r\n location,\r\n headerClasses\r\n } = this.props;\r\n\r\n\r\n //let pathname = location.pathname;\r\n let currentPage = location.pathname.slice(1 /* Remove leading slash. */);\r\n\r\n\r\n // console.log(currentPage);\r\n const pageTitle = () => {\r\n if (roledesc !== 'Psychologist')\r\n {\r\n return null\r\n }\r\n else\r\n {\r\n switch(currentPage) {\r\n // case 'dashboard':\r\n // return 'Welcome to your Rural Health Connect dashboard. This is where you manage your calendar and bookings.'\r\n // case 'clientinvites':\r\n // return 'You can invite your own clients onto the platform here. Can all clients referred to RHC please go via our admin. Enter their details to send a link via text and email containing the registration form. Once they have completed it, you will see them appear in your client list.'\r\n case 'profile':\r\n return 'Update your personal information here'\r\n // case 'platform':\r\n // return 'See a list of your completed sessions here. We use this list to send out invoices at the end of each month so please remove any appointments that did not go ahead. Rural Health Connect proudly operates on trust. If we are missing any clients or appointments from this list, please let us know at info@ruralhealthconnect.com.au'\r\n case 'forms':\r\n return 'Create new forms for electronic signing here. These forms are sent to clients via the dashboard.'\r\n case 'codes':\r\n return 'Add new Medicare item numbers for billing through Tyro here'\r\n case 'invoices':\r\n return 'Process all payments via Tyro here. For help with anything regarding Tyro please use their chat icon in the bottom right corner to talk to an operator.'\r\n default: \r\n return null\r\n }\r\n }\r\n }\r\n \r\n\r\n return (\r\n <>\r\n <div className={`warning_banner_off`}> \r\n {/* <div className={`warning_banner_on`}> */}\r\n There is a new version of RHC available, please <a href=\"https://refreshyourcache.com/en/cache/\" style={{ color: 'white', fontWeight: 600, }}>perform a force refresh</a> of your browser to prevent problems.\r\n </div>\r\n {pageTitle() ?\r\n <div className={`provider_help`}> \r\n {pageTitle()}\r\n </div>\r\n :\r\n null\r\n }\r\n\r\n <div\r\n className={`kt-header kt-grid__item ${headerClasses}`}\r\n id=\"kt_header\"\r\n ref={this.headerCommonRef}\r\n {...headerAttributes}\r\n >\r\n\r\n <h3 className=\"kt-subheader__title\"><RHCHeader /></h3>\r\n <AnimateLoading />\r\n {/* <!-- begin: Header Menu --> */}\r\n {menuHeaderDisplay && <HMenu />}\r\n {/* <!-- end: Header Menu --> */}\r\n {/* <!-- begin:: Header Topbar --> */}\r\n {/* <!-- empty div to fix topbar to stay on the right when menu-horizontal is hidden --> */}\r\n {!menuHeaderDisplay && <div />}\r\n {roledesc !== 'Client' ? \r\n <Topbar isDashStyle={this.props.isDashStyle} />\t\t\t\r\n :\r\n null\r\n }\r\n\r\n </div>\r\n </>\r\n );\r\n }\r\n}\r\n\r\n\r\nconst mapStateToProps = store => ({\r\n headerClasses: builder.selectors.getClasses(store, {\r\n path: \"header\",\r\n toString: true\r\n }),\r\n headerAttributes: builder.selectors.getAttributes(store, { path: \"header\" }),\r\n menuHeaderDisplay: objectPath.get(\r\n store.builder.layoutConfig,\r\n \"header.menu.self.display\"\r\n ),\r\n fluid:\r\n objectPath.get(store.builder.layoutConfig, \"header.self.width\") === \"fluid\",\r\n roledesc : store.auth.roleDesc\r\n});\r\n\r\nexport default withRouter(connect(mapStateToProps)(Header));\r\n","var _title, _desc, _defs, _g;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgSortNum1 = function SvgSortNum1(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"24px\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"Stockholm-icons / Shopping / Sort1\")) : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null)), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Stockholm-icons-/-Shopping-/-Sort1\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n id: \"bound\",\n x: 0,\n y: 0,\n width: 24,\n height: 24\n }), /*#__PURE__*/React.createElement(\"rect\", {\n id: \"Rectangle-8\",\n fill: \"#000000\",\n x: 4,\n y: 5,\n width: 16,\n height: 3,\n rx: 1.5\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.5,11 L16.5,11 C17.3284271,11 18,11.6715729 18,12.5 C18,13.3284271 17.3284271,14 16.5,14 L7.5,14 C6.67157288,14 6,13.3284271 6,12.5 C6,11.6715729 6.67157288,11 7.5,11 Z M10.5,17 L13.5,17 C14.3284271,17 15,17.6715729 15,18.5 C15,19.3284271 14.3284271,20 13.5,20 L10.5,20 C9.67157288,20 9,19.3284271 9,18.5 C9,17.6715729 9.67157288,17 10.5,17 Z\",\n id: \"Combined-Shape\",\n fill: \"#000000\",\n opacity: 0.3\n }))));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgSortNum1, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/SortNum1.2e2495e0.svg\";\nexport { ForwardRef as ReactComponent };","/* eslint-disable no-script-url,jsx-a11y/anchor-is-valid */\r\nimport React from \"react\";\r\nimport { OverlayTrigger, Tooltip } from \"react-bootstrap\";\r\nimport Dropdown from \"react-bootstrap/Dropdown\";\r\nimport { ReactComponent as FilePlusIcon } from \"../../assets/layout-svg-icons/File-plus.svg\";\r\n\r\nconst QuickActionsDropdownToggle = React.forwardRef((props, ref) => {\r\n return (\r\n <a\r\n ref={ref}\r\n href=\"#\"\r\n onClick={e => {\r\n e.preventDefault();\r\n props.onClick(e);\r\n }}\r\n id=\"kt_dashboard_daterangepicker\"\r\n className=\"btn btn-icon\"\r\n >\r\n {\" \"}\r\n <FilePlusIcon className=\"kt-svg-icon kt-svg-icon--success kt-svg-icon--md\" />\r\n </a>\r\n );\r\n});\r\n\r\nexport class QuickActions extends React.Component {\r\n render() {\r\n return (\r\n <>\r\n <OverlayTrigger\r\n placement=\"left\"\r\n overlay={<Tooltip id=\"quick-actions-tooltip\">Quick actions</Tooltip>}\r\n >\r\n <Dropdown className=\"dropdown-inline\" drop=\"down\" alignRight>\r\n <Dropdown.Toggle\r\n as={QuickActionsDropdownToggle}\r\n id=\"dropdown-toggle-quick-actions-subheader\"\r\n />\r\n\r\n <Dropdown.Menu className=\"dropdown-menu-fit dropdown-menu-md dropdown-menu-right\">\r\n <ul className=\"kt-nav\">\r\n <li className=\"kt-nav__head\">\r\n Add anything or jump to:\r\n <i\r\n className=\"flaticon2-information\"\r\n data-toggle=\"kt-tooltip\"\r\n data-placement=\"right\"\r\n title=\"\"\r\n data-original-title=\"Click to learn more...\"\r\n />\r\n </li>\r\n <li className=\"kt-nav__separator\" />\r\n <li className=\"kt-nav__item\">\r\n <a href=\"#\" className=\"kt-nav__link\">\r\n <i className=\"kt-nav__link-icon flaticon2-drop\" />\r\n <span className=\"kt-nav__link-text\">Order</span>\r\n </a>\r\n </li>\r\n <li className=\"kt-nav__item\">\r\n <a href=\"#\" className=\"kt-nav__link\">\r\n <i className=\"kt-nav__link-icon flaticon2-calendar-8\" />\r\n <span className=\"kt-nav__link-text\">Ticket</span>\r\n </a>\r\n </li>\r\n <li className=\"kt-nav__item\">\r\n <a href=\"#\" className=\"kt-nav__link\">\r\n <i className=\"kt-nav__link-icon flaticon2-telegram-logo\" />\r\n <span className=\"kt-nav__link-text\">Goal</span>\r\n </a>\r\n </li>\r\n <li className=\"kt-nav__item\">\r\n <a href=\"#\" className=\"kt-nav__link\">\r\n <i className=\"kt-nav__link-icon flaticon2-new-email\" />\r\n <span className=\"kt-nav__link-text\">Support Case</span>\r\n <span className=\"kt-nav__link-badge\">\r\n <span className=\"kt-badge kt-badge--brand kt-badge--rounded\">\r\n 5\r\n </span>\r\n </span>\r\n </a>\r\n </li>\r\n <li className=\"kt-nav__separator\" />\r\n <li className=\"kt-nav__foot\">\r\n <a className=\"btn btn-label-brand btn-bold btn-sm\" href=\"#\">\r\n Upgrade plan\r\n </a>\r\n <a\r\n className=\"btn btn-clean btn-bold btn-sm kt-hidden\"\r\n href=\"#\"\r\n data-toggle=\"kt-tooltip\"\r\n data-placement=\"right\"\r\n title=\"\"\r\n data-original-title=\"Click to learn more...\"\r\n >\r\n Learn more\r\n </a>\r\n </li>\r\n </ul>\r\n </Dropdown.Menu>\r\n </Dropdown>\r\n </OverlayTrigger>\r\n </>\r\n );\r\n }\r\n}\r\n","var _title, _desc, _defs, _g;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgAngleDoubleLeft = function SvgAngleDoubleLeft(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"24px\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"Stockholm-icons / Navigation / Angle-double-left\")) : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null)), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Stockholm-icons-/-Navigation-/-Angle-double-left\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Shape\",\n points: \"0 0 24 0 24 24 0 24\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.29288961,6.70710318 C4.90236532,6.31657888 4.90236532,5.68341391 5.29288961,5.29288961 C5.68341391,4.90236532 6.31657888,4.90236532 6.70710318,5.29288961 L12.7071032,11.2928896 C13.0856821,11.6714686 13.0989277,12.281055 12.7371505,12.675721 L7.23715054,18.675721 C6.86395813,19.08284 6.23139076,19.1103429 5.82427177,18.7371505 C5.41715278,18.3639581 5.38964985,17.7313908 5.76284226,17.3242718 L10.6158586,12.0300721 L5.29288961,6.70710318 Z\",\n id: \"Path-94\",\n fill: \"#000000\",\n fillRule: \"nonzero\",\n transform: \"translate(8.999997, 11.999999) scale(-1, 1) translate(-8.999997, -11.999999) \"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.7071009,15.7071068 C10.3165766,16.0976311 9.68341162,16.0976311 9.29288733,15.7071068 C8.90236304,15.3165825 8.90236304,14.6834175 9.29288733,14.2928932 L15.2928873,8.29289322 C15.6714663,7.91431428 16.2810527,7.90106866 16.6757187,8.26284586 L22.6757187,13.7628459 C23.0828377,14.1360383 23.1103407,14.7686056 22.7371482,15.1757246 C22.3639558,15.5828436 21.7313885,15.6103465 21.3242695,15.2371541 L16.0300699,10.3841378 L10.7071009,15.7071068 Z\",\n id: \"Path-94\",\n fill: \"#000000\",\n fillRule: \"nonzero\",\n opacity: 0.3,\n transform: \"translate(15.999997, 11.999999) scale(-1, 1) rotate(-270.000000) translate(-15.999997, -11.999999) \"\n }))));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgAngleDoubleLeft, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/Angle-double-left.5056745c.svg\";\nexport { ForwardRef as ReactComponent };","/* eslint-disable no-script-url,jsx-a11y/anchor-is-valid */\r\nimport React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport objectPath from \"object-path\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { QuickActions } from \"./components/QuickActions\";\r\nimport { LayoutContextConsumer } from \"../LayoutContext\";\r\nimport { ReactComponent as SortNum1Icon } from \"../../../_metronic/layout/assets/layout-svg-icons/SortNum1.svg\";\r\nimport * as builder from \"../../ducks/builder\";\r\n// import BreadCrumbs from \"./components/BreadCrumbs\";\r\n\r\nclass SubHeader extends React.Component {\r\n render() {\r\n const {\r\n subheaderCssClasses,\r\n subheaderContainerCssClasses,\r\n subheaderMobileToggle\r\n } = this.props;\r\n return (\r\n <div\r\n id=\"kt_subheader\"\r\n className={`kt-subheader ${subheaderCssClasses} kt-grid__item`}\r\n >\r\n <div className={`kt-container ${subheaderContainerCssClasses}`}>\r\n <div className=\"kt-subheader__main\">\r\n {subheaderMobileToggle && (\r\n <button\r\n className=\"kt-subheader__mobile-toggle kt-subheader__mobile-toggle--left\"\r\n id=\"kt_subheader_mobile_toggle\"\r\n >\r\n <span />\r\n </button>\r\n )}\r\n\r\n <LayoutContextConsumer>\r\n {/*{({ subheader: { title, breadcrumb } }) => (*/}\r\n\r\n {({ subheader: { title } }) => (\r\n <>\r\n <h3 className=\"kt-subheader__title\">{title}</h3>\r\n {/*<BreadCrumbs items={breadcrumb} />*/}\r\n </>\r\n )}\r\n </LayoutContextConsumer>\r\n\r\n <span className=\"kt-subheader__separator kt-subheader__separator--v\" />\r\n <span className=\"kt-subheader__desc\">#XRS-45670</span>\r\n <a\r\n href=\"#\"\r\n className=\"btn btn-label-warning btn-bold btn-sm btn-icon-h kt-margin-l-10\"\r\n >\r\n Add New\r\n </a>\r\n </div>\r\n\r\n <div className=\"kt-subheader__toolbar\">\r\n <div className=\"kt-subheader__wrapper\">\r\n <button type=\"button\" className=\"btn kt-subheader__btn-primary\">\r\n Actions \r\n <SortNum1Icon className=\"kt-svg-icon kt-svg-icon--sm\" />\r\n </button>\r\n <QuickActions />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = store => ({\r\n config: store.builder.layoutConfig,\r\n menuConfig: store.builder.menuConfig,\r\n subheaderMobileToggle: objectPath.get(\r\n store.builder.layoutConfig,\r\n \"subheader.mobile-toggle\"\r\n ),\r\n subheaderCssClasses: builder.selectors.getClasses(store, {\r\n path: \"subheader\",\r\n toString: true\r\n }),\r\n subheaderContainerCssClasses: builder.selectors.getClasses(store, {\r\n path: \"subheader_container\",\r\n toString: true\r\n })\r\n});\r\n\r\nexport default withRouter(connect(mapStateToProps)(SubHeader));\r\n","import React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { connect } from \"react-redux\";\r\nimport objectPath from \"object-path\";\r\nimport * as builder from \"../../ducks/builder\";\r\nimport KTToggle from \"../../_assets/js/toggle\";\r\n\r\nclass HeaderMobile extends React.Component {\r\n toggleButtonRef = React.createRef();\r\n\r\n componentDidMount() {\r\n new KTToggle(this.toggleButtonRef.current, this.props.toggleOptions);\r\n }\r\n\r\n render() {\r\n const {\r\n headerLogo,\r\n asideDisplay,\r\n headerMenuSelfDisplay,\r\n headerMobileCssClasses,\r\n headerMobileAttributes\r\n } = this.props;\r\n return (\r\n <div\r\n id=\"kt_header_mobile\"\r\n className={`kt-header-mobile ${headerMobileCssClasses}`}\r\n {...headerMobileAttributes}\r\n >\r\n <div className=\"kt-header-mobile__logo\">\r\n <Link to=\"/\">\r\n <img alt=\"logo\" src={headerLogo} />\r\n </Link>\r\n </div>\r\n\r\n <div className=\"kt-header-mobile__toolbar\">\r\n {asideDisplay && (\r\n <button\r\n className=\"kt-header-mobile__toggler kt-header-mobile__toggler--left\"\r\n id=\"kt_aside_mobile_toggler\"\r\n >\r\n <span />\r\n </button>\r\n )}\r\n\r\n {headerMenuSelfDisplay && (\r\n <button\r\n className=\"kt-header-mobile__toggler\"\r\n id=\"kt_header_mobile_toggler\"\r\n >\r\n <span />\r\n </button>\r\n )}\r\n\r\n <button\r\n ref={this.toggleButtonRef}\r\n className=\"kt-header-mobile__topbar-toggler\"\r\n id=\"kt_header_mobile_topbar_toggler\"\r\n >\r\n <i className=\"flaticon-more\" />\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = store => ({\r\n headerLogo: builder.selectors.getStickyLogo(store),\r\n asideDisplay: objectPath.get(\r\n store.builder.layoutConfig,\r\n \"aside.self.display\"\r\n ),\r\n headerMenuSelfDisplay:\r\n objectPath.get(store.builder.layoutConfig, \"header.menu.self.display\") ===\r\n true,\r\n toggleOptions: {\r\n target: \"body\",\r\n targetState: \"kt-header__topbar--mobile-on\",\r\n togglerState: \"kt-header-mobile__toolbar-topbar-toggler--active\"\r\n },\r\n headerMobileCssClasses: builder.selectors.getClasses(store, {\r\n path: \"header_mobile\",\r\n toString: true\r\n }),\r\n headerMobileAttributes: builder.selectors.getAttributes(store, {\r\n path: \"aside_menu\"\r\n })\r\n});\r\n\r\nexport default connect(mapStateToProps)(HeaderMobile);\r\n","var _title, _desc, _defs, _g;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgAngleDoubleRight = function SvgAngleDoubleRight(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"24px\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n ref: svgRef\n }, props), title === undefined ? _title || (_title = /*#__PURE__*/React.createElement(\"title\", null, \"Stockholm-icons / Navigation / Angle-double-right\")) : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null)), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Stockholm-icons-/-Navigation-/-Angle-double-right\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Shape\",\n points: \"0 0 24 0 24 24 0 24\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.2928955,6.70710318 C11.9023712,6.31657888 11.9023712,5.68341391 12.2928955,5.29288961 C12.6834198,4.90236532 13.3165848,4.90236532 13.7071091,5.29288961 L19.7071091,11.2928896 C20.085688,11.6714686 20.0989336,12.281055 19.7371564,12.675721 L14.2371564,18.675721 C13.863964,19.08284 13.2313966,19.1103429 12.8242777,18.7371505 C12.4171587,18.3639581 12.3896557,17.7313908 12.7628481,17.3242718 L17.6158645,12.0300721 L12.2928955,6.70710318 Z\",\n id: \"Path-94\",\n fill: \"#000000\",\n fillRule: \"nonzero\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.70710678,15.7071068 C3.31658249,16.0976311 2.68341751,16.0976311 2.29289322,15.7071068 C1.90236893,15.3165825 1.90236893,14.6834175 2.29289322,14.2928932 L8.29289322,8.29289322 C8.67147216,7.91431428 9.28105859,7.90106866 9.67572463,8.26284586 L15.6757246,13.7628459 C16.0828436,14.1360383 16.1103465,14.7686056 15.7371541,15.1757246 C15.3639617,15.5828436 14.7313944,15.6103465 14.3242754,15.2371541 L9.03007575,10.3841378 L3.70710678,15.7071068 Z\",\n id: \"Path-94\",\n fill: \"#000000\",\n fillRule: \"nonzero\",\n opacity: 0.3,\n transform: \"translate(9.000003, 11.999999) rotate(-270.000000) translate(-9.000003, -11.999999) \"\n }))));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgAngleDoubleRight, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/Angle-double-right.5590cf20.svg\";\nexport { ForwardRef as ReactComponent };","/* eslint-disable no-script-url,jsx-a11y/anchor-is-valid */\r\nimport React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { connect } from \"react-redux\";\r\nimport objectPath from \"object-path\";\r\nimport KTToggle from \"../../_assets/js/toggle\";\r\nimport * as builder from \"../../ducks/builder\";\r\nimport { ReactComponent as AngleDoubleLeftIcon } from \"../assets/layout-svg-icons/Angle-double-left.svg\";\r\nimport { ReactComponent as AngleDoubleRightIcon } from \"../assets/layout-svg-icons/Angle-double-right.svg\";\r\n\r\n\r\nclass Brand extends React.Component {\r\n ktToggleRef = React.createRef();\r\n\r\n componentDidMount() {\r\n // eslint-disable-next-line no-undef\r\n new KTToggle(this.ktToggleRef.current, this.props.toggleOptions);\r\n }\r\n\r\n render() {\r\n return (\r\n <div\r\n className={`kt-aside__brand kt-grid__item ${this.props.brandClasses}`}\r\n id=\"kt_aside_brand\"\r\n >\r\n <div className=\"kt-aside__brand-logo\">\r\n <Link to=\"\">\r\n <img alt=\"logo\" src={this.props.headerLogo} />\r\n </Link>\r\n </div>\r\n\r\n {this.props.asideSelfMinimizeToggle && (\r\n <div className=\"kt-aside__brand-tools\">\r\n <button\r\n ref={this.ktToggleRef}\r\n className=\"kt-aside__brand-aside-toggler\"\r\n id=\"kt_aside_toggler\"\r\n >\r\n <span>\r\n <AngleDoubleLeftIcon />\r\n </span>\r\n <span>\r\n <AngleDoubleRightIcon />\r\n </span>\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = store => {\r\n return {\r\n brandClasses: builder.selectors.getClasses(store, {\r\n path: \"brand\",\r\n toString: true\r\n }),\r\n asideSelfMinimizeToggle: objectPath.get(\r\n store.builder.layoutConfig,\r\n \"aside.self.minimize.toggle\"\r\n ),\r\n headerLogo: builder.selectors.getLogo(store),\r\n headerStickyLogo: builder.selectors.getStickyLogo(store),\r\n toggleOptions: {\r\n target: \"body\",\r\n targetState: \"kt-aside--minimize\",\r\n togglerState: \"kt-aside__brand-aside-toggler--active\"\r\n }\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(Brand);\r\n","import React from \"react\";\r\n\r\nexport default class MenuSection extends React.Component {\r\n render() {\r\n const { item } = this.props;\r\n return (\r\n <li className=\"kt-menu__section\">\r\n <h4 className=\"kt-menu__section-text\">{item.section}</h4>\r\n <i className=\"kt-menu__section-icon flaticon-more-v2\" />\r\n </li>\r\n );\r\n }\r\n}\r\n","import React from \"react\";\r\n\r\nexport default class MenuItemSeparator extends React.Component {\r\n render() {\r\n return (\r\n <li className=\"kt-menu__separator\">\r\n <span />\r\n </li>\r\n );\r\n }\r\n}\r\n","import React from \"react\";\r\nimport { FormattedMessage } from \"react-intl\";\r\n\r\nexport default class MenuItemText extends React.Component {\r\n render() {\r\n const { item, parentItem } = this.props;\r\n\r\n return (\r\n <>\r\n {item.icon && <i className={`kt-menu__link-icon ${item.icon}`} />}\r\n\r\n {parentItem && parentItem.bullet === \"dot\" && (\r\n <i className=\"kt-menu__link-bullet kt-menu__link-bullet--dot\">\r\n <span />\r\n </i>\r\n )}\r\n\r\n {parentItem && parentItem.bullet === \"line\" && (\r\n <i className=\"kt-menu__link-bullet kt-menu__link-bullet--line\">\r\n <span />\r\n </i>\r\n )}\r\n\r\n <span className=\"kt-menu__link-text\" style={{ whiteSpace: \"nowrap\" }}>\r\n {!item.translate ? (\r\n item.title\r\n ) : (\r\n <FormattedMessage id={item.translate} defaultMessage={item.title} />\r\n )}\r\n </span>\r\n\r\n {item.badge && (\r\n <span className=\"kt-menu__link-badge\">\r\n <span className={`kt-badge ${item.badge.type}`}>\r\n {item.badge.value}\r\n </span>\r\n </span>\r\n )}\r\n\r\n {item.submenu && <i className=\"kt-menu__ver-arrow la la-angle-right\" />}\r\n </>\r\n );\r\n }\r\n}\r\n","import React from \"react\";\r\nimport MenuSection from \"./MenuSection\";\r\nimport MenuItemSeparator from \"./MenuItemSeparator\";\r\nimport MenuItem from \"./MenuItem\";\r\n\r\nexport default class MenuSubmenu extends React.Component {\r\n render() {\r\n const { item, currentUrl, layoutConfig } = this.props;\r\n\r\n return (\r\n <ul className=\"kt-menu__subnav\">\r\n {item.submenu.map((child, index) => (\r\n <React.Fragment key={index}>\r\n {child.section && (\r\n <MenuSection\r\n item={child}\r\n parentItem={item}\r\n currentUrl={currentUrl}\r\n />\r\n )}\r\n\r\n {child.separator && (\r\n <MenuItemSeparator\r\n item={child}\r\n parentItem={item}\r\n currentUrl={currentUrl}\r\n />\r\n )}\r\n\r\n {child.title && (\r\n <MenuItem\r\n item={child}\r\n parentItem={item}\r\n currentUrl={currentUrl}\r\n layoutConfig={layoutConfig}\r\n />\r\n )}\r\n </React.Fragment>\r\n ))}\r\n </ul>\r\n );\r\n }\r\n}\r\n","import React from \"react\";\r\nimport objectPath from \"object-path\";\r\nimport { Link } from \"react-router-dom\";\r\nimport MenuItemText from \"./MenuItemText\";\r\nimport MenuSubmenu from \"./MenuSubmenu\";\r\nimport clsx from \"clsx\";\r\n\r\nexport default class MenuItem extends React.Component {\r\n asideLeftLIRef = React.createRef();\r\n isDropdown = document.body.classList.contains(\"kt-aside-menu--dropdown\");\r\n\r\n submenuToggle =\r\n this.props.item.toggle === \"click\"\r\n ? \"click\"\r\n : objectPath.get(this.props.item, \"submenu.type\") === \"tabs\"\r\n ? \"tabs\"\r\n : \"hover\";\r\n\r\n /**\r\n * Use for fixed left aside menu, to show menu on mouseenter event.\r\n * @param event Event\r\n */\r\n mouseEnter = event => {\r\n if (!this.isDropdown) {\r\n return;\r\n }\r\n\r\n if (this.props.item.submenu) {\r\n this.asideLeftLIRef.current.classList.add(\"kt-menu__item--hover\");\r\n this.asideLeftLIRef.current.setAttribute(\r\n \"data-ktmenu-submenu-toggle\",\r\n this.submenuToggle\r\n );\r\n }\r\n };\r\n\r\n /**\r\n * Mouse Leave event\r\n * @param event: MouseEvent\r\n */\r\n mouseLeave = event => {\r\n if (!this.isDropdown) {\r\n return;\r\n }\r\n\r\n if (this.props.item.submenu && this.submenuToggle === \"hover\") {\r\n this.asideLeftLIRef.current.classList.remove(\"kt-menu__item--hover\");\r\n this.asideLeftLIRef.current.removeAttribute(\"data-ktmenu-submenu-toggle\");\r\n }\r\n };\r\n\r\n isMenuItemIsActive = item => {\r\n if (item.submenu) {\r\n return this.isMenuRootItemIsActive(item);\r\n }\r\n\r\n if (!item.page) {\r\n return false;\r\n }\r\n\r\n return this.props.currentUrl.indexOf(item.page) !== -1;\r\n };\r\n\r\n isMenuRootItemIsActive = item => {\r\n for (const subItem of item.submenu) {\r\n if (this.isMenuItemIsActive(subItem)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n render() {\r\n const { item, currentUrl, parentItem, layoutConfig } = this.props;\r\n const isActive = this.isMenuItemIsActive(item);\r\n\r\n return (\r\n <li\r\n ref={this.asideLeftLIRef}\r\n aria-haspopup=\"true\"\r\n data-placement=\"right\"\r\n data-ktmenu-submenu-mode={item.mode}\r\n onMouseEnter={this.mouseEnter}\r\n onMouseLeave={this.mouseLeave}\r\n className={clsx(\r\n \"kt-menu__item\",\r\n {\r\n \"kt-menu__item--submenu\": item.submenu,\r\n \"kt-menu__item--open kt-menu__item--here\": isActive && item.submenu,\r\n \"kt-menu__item--active kt-menu__item--here\":\r\n isActive && !item.submenu,\r\n \"kt-menu__item--icon-only\": item[\"icon-only\"]\r\n },\r\n item[\"custom-class\"]\r\n )}\r\n data-ktmenu-dropdown-toggle-class={item[\"dropdown-toggle-class\"]}\r\n >\r\n {!item.submenu && (\r\n <Link to={`/${item.page}`} className=\"kt-menu__link kt-menu__toggle\">\r\n <MenuItemText item={item} parentItem={parentItem} />\r\n </Link>\r\n )}\r\n\r\n {item.submenu && (\r\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\r\n <a className=\"kt-menu__link kt-menu__toggle\">\r\n <MenuItemText item={item} parentItem={parentItem} />\r\n </a>\r\n )}\r\n\r\n {item.submenu && (\r\n <div className=\"kt-menu__submenu\">\r\n <span className=\"kt-menu__arrow\" />\r\n\r\n {item[\"custom-class\"] === \"kt-menu__item--submenu-fullheight\" && (\r\n <div className=\"kt-menu__wrapper\">\r\n <MenuSubmenu\r\n item={item}\r\n parentItem={item}\r\n currentUrl={currentUrl}\r\n />\r\n </div>\r\n )}\r\n\r\n {item[\"custom-class\"] !== \"kt-menu__item--submenu-fullheight\" && (\r\n <MenuSubmenu\r\n item={item}\r\n parentItem={item}\r\n currentUrl={currentUrl}\r\n layoutConfig={layoutConfig}\r\n />\r\n )}\r\n </div>\r\n )}\r\n </li>\r\n );\r\n }\r\n}\r\n","import React from \"react\";\r\nimport MenuSection from \"./MenuSection\";\r\nimport MenuItemSeparator from \"./MenuItemSeparator\";\r\nimport MenuItem from \"./MenuItem\";\r\n\r\nexport default class MenuList extends React.Component {\r\n render() {\r\n const { currentUrl, menuConfig, layoutConfig } = this.props;\r\n\r\n return menuConfig.aside.items.map((child, index) => {\r\n return (\r\n <React.Fragment key={`menuList${index}`}>\r\n {child.section && <MenuSection item={child} />}\r\n {child.separator && <MenuItemSeparator item={child} />}\r\n {child.title && (\r\n <MenuItem\r\n item={child}\r\n currentUrl={currentUrl}\r\n layoutConfig={layoutConfig}\r\n />\r\n )}\r\n </React.Fragment>\r\n );\r\n });\r\n }\r\n}\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport objectPath from \"object-path\";\r\nimport { Link, withRouter } from \"react-router-dom\";\r\nimport clsx from \"clsx\";\r\nimport { removeCSSClass } from \"../../utils/utils\";\r\nimport * as builder from \"../../ducks/builder\";\r\nimport MenuList from \"./MenuList\";\r\nimport KTMenu from \"../../_assets/js/menu\";\r\nimport KTUtil from \"../../_assets/js/util\";\r\n\r\nclass AsideLeft extends React.Component {\r\n asideMenuRef = React.createRef();\r\n\r\n insideTm;\r\n outsideTm;\r\n\r\n componentDidMount() {\r\n this.initMenu(); // By ID\r\n\r\n const options = this.setupMenuOptions();\r\n const ktMenu = new KTMenu(this.asideMenuRef.current, options); // eslint-disable-line\r\n }\r\n\r\n initMenu() {\r\n const { config } = this.props;\r\n if (\r\n objectPath.get(config, \"aside.menu.dropdown\") !== \"true\" &&\r\n objectPath.get(config, \"aside.self.fixed\")\r\n ) {\r\n this.asideMenuRef.current.setAttribute(\"data-ktmenu-scroll\", \"1\");\r\n }\r\n\r\n if (objectPath.get(config, \"aside.menu.dropdown\") === \"true\") {\r\n this.asideMenuRef.current.setAttribute(\"data-ktmenu-dropdown\", \"1\");\r\n this.asideMenuRef.current.setAttribute(\r\n \"data-ktmenu-dropdown-timeout\",\r\n objectPath.get(config, \"aside.menu.submenu.dropdown.hover-timeout\")\r\n );\r\n }\r\n }\r\n\r\n setupMenuOptions() {\r\n let menuOptions = {\r\n // vertical scroll\r\n scroll: null,\r\n // submenu setup\r\n submenu: {\r\n desktop: {\r\n // by default the menu mode set to accordion in desktop mode\r\n default: \"dropdown\"\r\n },\r\n tablet: \"accordion\", // menu set to accordion in tablet mode\r\n mobile: \"accordion\" // menu set to accordion in mobile mode\r\n },\r\n // accordion setup\r\n accordion: {\r\n expandAll: false // allow having multiple expanded accordions in the menu\r\n }\r\n };\r\n\r\n // init aside menu\r\n let menuDesktopMode = \"accordion\";\r\n const dataKtmenuDropdown = this.asideMenuRef.current.getAttribute(\r\n \"data-ktmenu-dropdown\"\r\n );\r\n if (dataKtmenuDropdown === \"1\") {\r\n menuDesktopMode = \"dropdown\";\r\n }\r\n\r\n if (typeof objectPath.get(menuOptions, \"submenu.desktop\") === \"object\") {\r\n menuOptions.submenu.desktop.default = menuDesktopMode;\r\n }\r\n\r\n return menuOptions;\r\n }\r\n\r\n get currentUrl() {\r\n return this.props.location.pathname.split(/[?#]/)[0];\r\n }\r\n\r\n /**\r\n * Use for fixed left aside menu, to show menu on mouseenter event.\r\n * @param e Event\r\n */\r\n mouseEnter = e => {\r\n // check if the left aside menu is fixed\r\n if (document.body.classList.contains(\"kt-aside--fixed\")) {\r\n if (this.outsideTm) {\r\n clearTimeout(this.outsideTm);\r\n this.outsideTm = null;\r\n }\r\n\r\n this.insideTm = setTimeout(() => {\r\n // if the left aside menu is minimized\r\n if (\r\n document.body.classList.contains(\"kt-aside--minimize\") &&\r\n // eslint-disable-next-line no-undef\r\n KTUtil.isInResponsiveRange(\"desktop\")\r\n ) {\r\n removeCSSClass(document.body, \"kt-aside--minimize\");\r\n document.body.classList.add(\"kt-aside--minimize-hover\");\r\n }\r\n }, 50);\r\n }\r\n };\r\n\r\n /**\r\n * Use for fixed left aside menu, to show menu on mouseenter event.\r\n * @param e Event\r\n */\r\n mouseLeave = e => {\r\n if (document.body.classList.contains(\"kt-aside--fixed\")) {\r\n if (this.insideTm) {\r\n clearTimeout(this.insideTm);\r\n this.insideTm = null;\r\n }\r\n\r\n this.outsideTm = setTimeout(() => {\r\n // if the left aside menu is expand\r\n /* eslint-disable-next-line */\r\n const kUtilIsResponsiveRange = KTUtil.isInResponsiveRange(\"desktop\");\r\n const hasMinimizeHover = document.body.classList.contains(\r\n \"kt-aside--minimize-hover\"\r\n );\r\n if (\r\n hasMinimizeHover &&\r\n // eslint-disable-next-line no-undef\r\n kUtilIsResponsiveRange\r\n ) {\r\n // hide back the left aside menu\r\n removeCSSClass(document.body, \"kt-aside--minimize-hover\");\r\n document.body.classList.add(\"kt-aside--minimize\");\r\n }\r\n }, 100);\r\n }\r\n };\r\n\r\n render() {\r\n const {\r\n ulClasses,\r\n menuConfig,\r\n layoutConfig,\r\n asideMenuAttr,\r\n asideClassesFromConfig,\r\n location: { pathname }\r\n } = this.props;\r\n\r\n return (\r\n <>\r\n <div\r\n id=\"kt_aside_menu\"\r\n ref={this.asideMenuRef}\r\n style={{ maxHeight: \"90vh\", position: \"relative\" }}\r\n onMouseEnter={this.mouseEnter}\r\n onMouseLeave={this.mouseLeave}\r\n data-ktmenu-vertical=\"1\"\r\n className={clsx(\"kt-aside-menu\", asideClassesFromConfig)}\r\n {...asideMenuAttr}\r\n >\r\n {this.props.disableAsideSelfDisplay && (\r\n <div className=\"kt-header-logo\">\r\n <Link to=\"\">\r\n <img alt=\"logo\" src={this.props.headerLogo} />\r\n </Link>\r\n </div>\r\n )}\r\n <ul className={clsx(\"kt-menu__nav\", ulClasses)}>\r\n <MenuList\r\n currentUrl={pathname}\r\n menuConfig={menuConfig}\r\n layoutConfig={layoutConfig}\r\n />\r\n </ul>\r\n </div>\r\n </>\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = store => ({\r\n menuConfig: store.builder.menuConfig,\r\n layoutConfig: store.builder.layoutConfig,\r\n headerLogo: builder.selectors.getLogo(store),\r\n asideMenuAttr: builder.selectors.getAttributes(store, { path: \"aside_menu\" }),\r\n disableAsideSelfDisplay:\r\n builder.selectors.getConfig(store, \"aside.self.display\") === false,\r\n\r\n ulClasses: builder.selectors.getClasses(store, {\r\n path: \"aside_menu_nav\",\r\n toString: true\r\n }),\r\n\r\n asideClassesFromConfig: builder.selectors.getClasses(store, {\r\n path: \"aside_menu\",\r\n toString: true\r\n })\r\n});\r\n\r\nexport default withRouter(connect(mapStateToProps)(AsideLeft));\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport * as builder from \"../../ducks/builder\";\r\nimport Brand from \"../brand/Brand\";\r\nimport PerfectScrollbar from \"react-perfect-scrollbar\";\r\nimport Menu from \"./Menu\";\r\nimport KTOffcanvas from \"../../_assets/js/offcanvas\";\r\n\r\nclass AsideLeft extends React.Component {\r\n asideOffCanvasRef = React.createRef();\r\n\r\n componentDidMount() {\r\n // eslint-disable-next-line\r\n const ktoffConvas = new KTOffcanvas(\r\n this.asideOffCanvasRef.current,\r\n this.props.menuCanvasOptions\r\n );\r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n <button className=\"kt-aside-close\" id=\"kt_aside_close_btn\">\r\n <i className=\"la la-close\" />\r\n </button>\r\n <div\r\n id=\"kt_aside\"\r\n ref={this.asideOffCanvasRef}\r\n className={`kt-aside ${this.props.asideClassesFromConfig} kt-grid__item kt-grid kt-grid--desktop kt-grid--hor-desktop`}\r\n >\r\n <Brand />\r\n <div\r\n id=\"kt_aside_menu_wrapper\"\r\n className=\"kt-aside-menu-wrapper kt-grid__item kt-grid__item--fluid\"\r\n >\r\n {this.props.disableScroll && (\r\n <Menu htmlClassService={this.props.htmlClassService} />\r\n )}\r\n {!this.props.disableScroll && (\r\n <PerfectScrollbar\r\n options={{ wheelSpeed: 2, wheelPropagation: false }}\r\n >\r\n <Menu htmlClassService={this.props.htmlClassService} />\r\n </PerfectScrollbar>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = store => ({\r\n disableAsideSelfDisplay:\r\n builder.selectors.getConfig(store, \"aside.self.display\") === false,\r\n disableScroll:\r\n builder.selectors.getConfig(store, \"aside.menu.dropdown\") === \"true\" ||\r\n false,\r\n asideClassesFromConfig: builder.selectors.getClasses(store, {\r\n path: \"aside\",\r\n toString: true\r\n }),\r\n menuCanvasOptions: {\r\n baseClass: \"kt-aside\",\r\n overlay: true,\r\n closeBy: \"kt_aside_close_btn\",\r\n toggleBy: {\r\n target: \"kt_aside_mobile_toggler\",\r\n state: \"kt-header-mobile__toolbar-toggler--active\"\r\n }\r\n }\r\n});\r\n\r\nexport default connect(mapStateToProps)(AsideLeft);\r\n","import React from \"react\";\r\n// import { useSelector } from 'react-redux';\r\n\r\n\r\nexport function Footer() {\r\n\r\n return (\r\n <div>\r\n </div>\r\n );\r\n \r\n}\r\n\r\nexport default Footer\r\n\r\n// const mapStateToProps = store => ({\r\n// fluid:\r\n// objectPath.get(store.builder.layoutConfig, \"footer.self.width\") === \"fluid\",\r\n// footerClasses: builder.selectors.getClasses(store, {\r\n// path: \"footer\",\r\n// toString: true\r\n// }),\r\n// footerContainerClasses: builder.selectors.getClasses(store, {\r\n// path: \"footer_container\",\r\n// toString: true\r\n// })\r\n// });\r\n\r\n// export default connect(mapStateToProps)(Footer);\r\n","import React from \"react\";\r\nimport KTScrolltop from \"../../../_metronic/_assets/js/scrolltop\";\r\n\r\nexport default class ScrollTop extends React.Component {\r\n scrollTopCommonRef = React.createRef();\r\n\r\n componentDidMount() {\r\n const scrollTopOptions = {\r\n offset: 300,\r\n speed: 600\r\n };\r\n // eslint-disable-next-line no-undef\r\n new KTScrolltop(this.scrollTopCommonRef.current, scrollTopOptions);\r\n }\r\n\r\n render() {\r\n return (\r\n <div\r\n id=\"kt_scrolltop\"\r\n className=\"kt-scrolltop\"\r\n ref={this.scrollTopCommonRef}\r\n >\r\n <i className=\"la la-arrow-up\" />\r\n </div>\r\n );\r\n }\r\n}\r\n","import objectPath from \"object-path\";\r\n\r\nexport default class HtmlClassService {\r\n // Public properties\r\n config;\r\n classes;\r\n attributes;\r\n\r\n /**\r\n * Build html element classes from layout config\r\n * @param layoutConfig\r\n */\r\n setConfig(layoutConfig) {\r\n this.config = layoutConfig;\r\n\r\n // scope list of classes\r\n this.classes = {\r\n header: [],\r\n header_container: [],\r\n header_mobile: [],\r\n header_menu: [],\r\n aside: [],\r\n aside_menu: [],\r\n subheader: [],\r\n subheader_container: [],\r\n content: [],\r\n content_container: [],\r\n footer_container: []\r\n };\r\n\r\n this.attributes = {\r\n aside_menu: {},\r\n header_mobile: {},\r\n header_menu: {}\r\n };\r\n\r\n // init base layout\r\n this.initLayout();\r\n this.initLoader();\r\n\r\n // not yet implemented\r\n // this.initAsideSecondary();\r\n\r\n // init header and subheader menu\r\n this.initHeader();\r\n this.initSubheader();\r\n\r\n this.initContent();\r\n // init aside and aside menu\r\n this.initAside();\r\n\r\n // init footer\r\n this.initFooter();\r\n\r\n this.initSkin();\r\n }\r\n\r\n /**\r\n * Returns Classes\r\n *\r\n * @param path: string\r\n * @param toString boolean\r\n */\r\n getClasses(path, toString) {\r\n if (path) {\r\n const classes = objectPath.get(this.classes, path) || \"\";\r\n if (toString && Array.isArray(classes)) {\r\n return classes.join(\" \");\r\n }\r\n return classes.toString();\r\n }\r\n return this.classes;\r\n }\r\n\r\n getAttributes(path) {\r\n if (path) {\r\n const attributes = objectPath.get(this.attributes, path) || [];\r\n return attributes;\r\n }\r\n return [];\r\n }\r\n\r\n /**\r\n * Init Layout\r\n */\r\n initLayout() {\r\n if (objectPath.has(this.config, \"self.body.background-image\")) {\r\n document.body.style.backgroundImage =\r\n 'url(\"' +\r\n objectPath.get(this.config, \"self.body.background-image\") +\r\n '\")';\r\n }\r\n\r\n const _selfBodyClass = objectPath.get(this.config, \"self.body.class\");\r\n if (_selfBodyClass) {\r\n if (_selfBodyClass) {\r\n const bodyClasses = _selfBodyClass.toString().split(\" \");\r\n bodyClasses.forEach(cssClass => document.body.classList.add(cssClass));\r\n }\r\n }\r\n\r\n // Offcanvas directions\r\n document.body.classList.add(\"kt-quick-panel--right\");\r\n document.body.classList.add(\"kt-demo-panel--right\");\r\n document.body.classList.add(\"kt-offcanvas-panel--right\");\r\n }\r\n\r\n /**\r\n * Init Loader\r\n */\r\n initLoader() {}\r\n\r\n /**\r\n * Init Header\r\n */\r\n initHeader() {\r\n // Fixed header\r\n if (objectPath.get(this.config, \"header.self.fixed.desktop\")) {\r\n document.body.classList.add(\"kt-header--fixed\");\r\n objectPath.push(this.classes, \"header\", \"kt-header--fixed\");\r\n } else {\r\n document.body.classList.add(\"kt-header--static\");\r\n }\r\n\r\n if (objectPath.get(this.config, \"header.self.fixed.mobile\")) {\r\n document.body.classList.add(\"kt-header-mobile--fixed\");\r\n objectPath.push(this.classes, \"header_mobile\", \"kt-header-mobile--fixed\");\r\n }\r\n\r\n const additionalHeaderCssClass = objectPath.get(\r\n this.config,\r\n \"header.menu.self.layout\"\r\n );\r\n if (additionalHeaderCssClass) {\r\n objectPath.push(\r\n this.classes,\r\n \"header_menu\",\r\n \"kt-header-menu--layout-\" + additionalHeaderCssClass\r\n );\r\n }\r\n\r\n if (objectPath.get(this.config, \"header.self.width\") === \"fluid\") {\r\n objectPath.push(this.classes, \"header_container\", \"kt-container--fluid\");\r\n }\r\n }\r\n\r\n /**\r\n * Init Subheader\r\n */\r\n initSubheader() {\r\n if (objectPath.get(this.config, \"subheader.display\")) {\r\n document.body.classList.add(\"kt-subheader--enabled\");\r\n }\r\n\r\n // Fixed content head\r\n if (\r\n objectPath.get(this.config, \"subheader.fixed\") &&\r\n objectPath.get(this.config, \"header.self.fixed.desktop\")\r\n ) {\r\n document.body.classList.add(\"kt-subheader--fixed\");\r\n }\r\n\r\n if (objectPath.has(this.config, \"subheader.style\")) {\r\n document.body.classList.add(\r\n \"kt-subheader--\" + objectPath.get(this.config, \"subheader.style\")\r\n );\r\n }\r\n\r\n if (objectPath.get(this.config, \"subheader.width\") === \"fluid\") {\r\n objectPath.push(\r\n this.classes,\r\n \"subheader_container\",\r\n \"kt-container--fluid\"\r\n );\r\n }\r\n\r\n if (objectPath.get(this.config, \"subheader.clear\")) {\r\n objectPath.push(this.classes, \"subheader\", \"kt-subheader--clear\");\r\n }\r\n }\r\n\r\n /**\r\n * Init Content\r\n */\r\n initContent() {\r\n if (objectPath.get(this.config, \"content.fit-top\")) {\r\n objectPath.push(this.classes, \"content\", \"kt-content--fit-top\");\r\n }\r\n\r\n if (objectPath.get(this.config, \"content.fit-bottom\")) {\r\n objectPath.push(this.classes, \"content\", \"kt-content--fit-bottom\");\r\n }\r\n\r\n if (objectPath.get(this.config, \"content.width\") === \"fluid\") {\r\n objectPath.push(this.classes, \"content_container\", \"kt-container--fluid\");\r\n }\r\n }\r\n\r\n /**\r\n * Init Aside\r\n */\r\n initAside() {\r\n if (objectPath.get(this.config, \"aside.self.display\") !== true) {\r\n return;\r\n }\r\n\r\n document.body.classList.add(\"kt-aside--enabled\");\r\n\r\n // Fixed Aside\r\n if (objectPath.get(this.config, \"aside.self.fixed\")) {\r\n document.body.classList.add(\"kt-aside--fixed\");\r\n objectPath.push(this.classes, \"aside\", \"kt-aside--fixed\");\r\n } else {\r\n document.body.classList.add(\"kt-aside--static\");\r\n }\r\n\r\n // Default fixed\r\n if (objectPath.get(this.config, \"aside.self.minimize.default\")) {\r\n document.body.classList.add(\"kt-aside--minimize\");\r\n }\r\n\r\n // Menu\r\n // Dropdown Submenu\r\n if (objectPath.get(this.config, \"aside.menu.dropdown\") === \"true\") {\r\n objectPath.push(this.classes, \"aside_menu\", \"kt-aside-menu--dropdown\");\r\n document.body.classList.add(\"kt-aside-menu--dropdown\");\r\n this.attributes.aside_menu[\"data-ktmenu-dropdown\"] = \"1\";\r\n this.attributes.aside_menu[\"data-ktmenu-scroll\"] = \"0\";\r\n } else {\r\n this.attributes.aside_menu[\"data-ktmenu-scroll\"] = \"1\";\r\n }\r\n\r\n const asideSubmenuDHoverTimeout = objectPath.get(\r\n this.config,\r\n \"aside.menu.submenu.dropdown.hover-timeout\"\r\n );\r\n if (asideSubmenuDHoverTimeout) {\r\n this.attributes.aside_menu[\r\n \"data-ktmenu-dropdown-timeout\"\r\n ] = asideSubmenuDHoverTimeout;\r\n }\r\n }\r\n\r\n /**\r\n * Init Footer\r\n */\r\n initFooter() {\r\n // Fixed header\r\n if (objectPath.get(this.config, \"footer.self.fixed\")) {\r\n document.body.classList.add(\"kt-footer--fixed\");\r\n }\r\n\r\n if (objectPath.get(this.config, \"footer.self.width\") === \"fluid\") {\r\n objectPath.push(this.classes, \"footer_container\", \"kt-container--fluid\");\r\n }\r\n }\r\n\r\n /**\r\n * Set the body class name based on page skin options\r\n */\r\n initSkin() {\r\n if (objectPath.get(this.config, \"header.self.skin\")) {\r\n document.body.classList.add(\r\n \"kt-header-base-\" + objectPath.get(this.config, \"header.self.skin\")\r\n );\r\n }\r\n\r\n if (objectPath.get(this.config, \"header.menu.desktop.submenu.skin\")) {\r\n document.body.classList.add(\r\n \"kt-header-menu-\" +\r\n objectPath.get(this.config, \"header.menu.desktop.submenu.skin\")\r\n );\r\n }\r\n\r\n if (objectPath.get(this.config, \"aside.self.display\") === false) {\r\n document.body.classList.add(\r\n \"kt-header-base-\" + objectPath.get(this.config, \"header.self.skin\")\r\n );\r\n } else {\r\n document.body.classList.add(\r\n \"kt-brand-\" + objectPath.get(this.config, \"brand.self.skin\")\r\n );\r\n }\r\n\r\n if (objectPath.get(this.config, \"aside.self.skin\")) {\r\n document.body.classList.add(\r\n \"kt-aside-\" + objectPath.get(this.config, \"aside.self.skin\")\r\n );\r\n }\r\n }\r\n}\r\n","/* eslint-disable no-script-url,jsx-a11y/anchor-is-valid,no-undef */\r\nimport React from \"react\";\r\nimport PerfectScrollbar from \"react-perfect-scrollbar\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { Nav, Tab } from \"react-bootstrap\";\r\nimport { connect } from 'react-redux';\r\nimport * as Admin from \"../../store/ducks/admin.duck\";\r\n\r\nconst perfectScrollbarOptions = {\r\n wheelSpeed: 2,\r\n wheelPropagation: false\r\n};\r\n\r\nclass QuickPanel extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n activityfeed: props.activityfeed,\r\n selectedTab: \"Notifications\",\r\n clientID: undefined\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (this.props.activityfeed !== prevProps.activityfeed)\r\n {\r\n this.setState({ \r\n activityfeed: this.props.activityfeed\r\n });\r\n // console.log(filteredData);\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.props.FETCHACTIVITYFEED();\r\n }\r\n\r\n setTab = _tabName => {\r\n this.setState({ selectedTab: _tabName });\r\n };\r\n\r\n setClientForDisplay = clientID => {\r\n this.setState({ clientID: clientID });\r\n this.props.SET_CLIENT_FOR_DISPLAY({ filterName: 'clientsListLoadClientID', filterValue: clientID });\r\n }\r\n\r\n render() {\r\n const {\r\n activityfeed,\r\n } = this.state;\r\n \r\n\r\n return (\r\n <div id=\"kt_quick_panel\" className=\"kt-quick-panel\">\r\n <a\r\n href=\"#\"\r\n className=\"kt-quick-panel__close\"\r\n id=\"kt_quick_panel_close_btn\"\r\n >\r\n <i className=\"flaticon2-delete\" />\r\n </a>\r\n <Tab.Container defaultActiveKey={this.state.selectedTab}>\r\n <div className=\"kt-quick-panel__nav\">\r\n <Nav\r\n onSelect={this.setTab}\r\n className=\"nav nav-tabs nav-tabs-line nav-tabs-bold nav-tabs-line-3x nav-tabs-line-brand kt-notification-item-padding-x\"\r\n >\r\n <Nav.Item className=\"nav-item\">\r\n <Nav.Link eventKey=\"Notifications\" className=\"nav-link show\">\r\n Notifications\r\n </Nav.Link>\r\n </Nav.Item>\r\n </Nav>\r\n </div>\r\n <div className=\"kt-quick-panel__content\">\r\n <Tab.Content>\r\n <Tab.Pane eventKey=\"Notifications\">\r\n <PerfectScrollbar\r\n options={perfectScrollbarOptions}\r\n style={{\r\n maxHeight: \"calc(100vh - 100px)\",\r\n position: \"relative\"\r\n }}\r\n >\r\n <div className=\"kt-notification\">\r\n {activityfeed && activityfeed.map((item, index) => \r\n <Link key={index} to={item.link ? item.link : '/dashboard'} onClick={()=>this.setClientForDisplay(item.clientID)}>\r\n <div className=\"kt-notification__item\" key={item.id}>\r\n {/* a href={item.link} */}\r\n <div className=\"kt-notification__item-icon\">\r\n <i className={item.icon} />\r\n </div>\r\n <div className=\"kt-notification__item-details\">\r\n <div className=\"kt-notification__item-title\">\r\n {item.label}\r\n </div>\r\n <div className=\"kt-notification__item-time\">\r\n {item.created}\r\n </div>\r\n </div>\r\n </div>\r\n </Link>\r\n )}\r\n </div>\r\n </PerfectScrollbar>\r\n </Tab.Pane>\r\n \r\n </Tab.Content>\r\n </div>\r\n </Tab.Container>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => ({\r\n activityfeed : state.admin.ActivityFeed\r\n});\r\n \r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n SET_CLIENT_FOR_DISPLAY: (payload) => dispatch({ type: Admin.actionTypes.SET_FILTERS, payload: payload }),\r\n FETCHACTIVITYFEED: () => dispatch({ type: Admin.actionTypes.FETCH_ACTIVITYFEED }),\r\n };\r\n};\r\n \r\nexport default connect(mapStateToProps,mapDispatchToProps)(QuickPanel);\r\n\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { useRouteMatch } from \"react-router-dom\";\r\nimport * as builder from \"../ducks/builder\";\r\n\r\nfunction KtContent({ children, contentContainerClasses }) {\r\n const match = useRouteMatch() || {};\r\n const animationEndClass = \"kt-grid--animateContent-finished\";\r\n const [cssClassesState, setCssClassesState] = useState([\r\n \"kt-grid--animateContent\",\r\n \"kt-container\",\r\n contentContainerClasses.split(\" \"),\r\n \"kt-grid__item kt-grid__item--fluid\",\r\n animationEndClass\r\n ]);\r\n\r\n useEffect(() => {\r\n // for animation start should toggle 'kt-grid--animateContent-finished' css class\r\n // TODO: change useMemo\r\n const fullClasses = [...cssClassesState];\r\n const startAnimation = fullClasses.filter(el => el !== animationEndClass);\r\n setCssClassesState(startAnimation);\r\n const timeOutId = setTimeout(() => {\r\n setCssClassesState(fullClasses);\r\n }, 200);\r\n\r\n return () => {\r\n clearTimeout(timeOutId);\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [match.url]);\r\n\r\n return <div className={cssClassesState.join(\" \")}>{children}</div>;\r\n}\r\n\r\nconst mapStateToProps = store => ({\r\n contentContainerClasses: builder.selectors.getClasses(store, {\r\n path: \"content_container\",\r\n toString: true\r\n })\r\n});\r\n\r\nexport default connect(mapStateToProps)(KtContent);\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport objectPath from \"object-path\";\r\nimport Header from \"./header/Header\";\r\nimport SubHeader from \"./sub-header/SubHeader\";\r\nimport HeaderMobile from \"./header/HeaderMobile\";\r\nimport AsideLeft from \"./aside/AsideLeft\";\r\nimport Footer from \"./footer/Footer\";\r\nimport ScrollTop from \"../../app/partials/layout/ScrollTop\";\r\nimport HTMLClassService from \"./HTMLClassService\";\r\nimport LayoutConfig from \"./LayoutConfig\";\r\nimport LayoutInitializer from \"./LayoutInitializer\";\r\nimport QuickPanel from \"../../app/partials/layout/QuickPanel\";\r\nimport KtContent from \"./KtContent\";\r\nimport \"./assets/Base.scss\";\r\n\r\nconst htmlClassService = new HTMLClassService();\r\n\r\nfunction Layout({\r\n children,\r\n asideDisplay,\r\n subheaderDisplay,\r\n selfLayout,\r\n layoutConfig,\r\n contentContainerClasses,\r\n customiserClass\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// RHC-DASH-STYLE: Optional className string to add to classes array\r\n}) {\r\n htmlClassService.setConfig(layoutConfig);\r\n // scroll to top after location changes\r\n // window.scrollTo(0, 0);\r\n\r\n const contentCssClasses = htmlClassService.classes.content.join(\" \");\r\n\r\n\tconst gridClasses = [ 'kt-grid', 'kt-grid--hor', 'kt-grid--root' ]\t\t\t// RHC-DASH-STYLE\r\n\tif(customiserClass){\t\t\t\t\t\t\t\t\t\t\t\t\t\t// RHC-DASH-STYLE\r\n\t\tgridClasses.push(customiserClass)\t\t\t\t\t\t\t\t\t\t// RHC-DASH-STYLE\r\n\t}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// RHC-DASH-STYLE\r\n\r\n return selfLayout !== \"blank\" ? (\r\n <LayoutInitializer\r\n layoutConfig={LayoutConfig}\r\n htmlClassService={htmlClassService}\r\n >\r\n {/* <!-- begin:: Header Mobile --> */}\r\n <HeaderMobile />\r\n {/* <!-- end:: Header Mobile --> */}\r\n\r\n <div className={gridClasses.join(' ')}>\t\t\t\t\t\t\t\t\t{/* RHC-DASH-STYLE */}\r\n {/* <!-- begin::Body --> */}\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid kt-grid--ver kt-page\">\r\n {/* <!-- begin:: Aside Left --> */}\r\n {asideDisplay && (\r\n <>\r\n <AsideLeft />\r\n </>\r\n )}\r\n {/* <!-- end:: Aside Left --> */}\r\n <div\r\n className=\"kt-grid__item kt-grid__item--fluid kt-grid kt-grid--hor kt-wrapper\"\r\n id=\"kt_wrapper\"\r\n >\r\n {/* <!-- begin:: Header READY --> */}\r\n\r\n <Header isDashStyle={customiserClass && customiserClass==='custom-rhc'} />\t{/* RHC-DASH-STYLE-UPDATE: use the customiserClass to define we are using the Dash Style */}\r\n {/* <!-- end:: Header --> */}\r\n\r\n {/* <!-- begin:: Content --> */}\r\n <div\r\n id=\"kt_content\"\r\n className={`kt-content ${contentCssClasses} kt-grid__item kt-grid__item--fluid kt-grid kt-grid--hor`}\r\n >\r\n {/* <!-- begin:: Content Head --> */}\r\n {subheaderDisplay && (\r\n <SubHeader />\r\n )}\r\n {/* <!-- end:: Content Head --> */}\r\n\r\n {/* <!-- begin:: Content Body --> */}\r\n {/* TODO: add class to animate kt-grid--animateContent-finished */}\r\n <KtContent>\r\n {children}\r\n </KtContent>\r\n {/*<!-- end:: Content Body -->*/}\r\n </div>\r\n {/* <!-- end:: Content --> */}\r\n <Footer /> \r\n </div>\r\n </div>\r\n {/* <!-- end:: Body --> */}\r\n </div>\r\n <QuickPanel />\r\n <ScrollTop />\r\n </LayoutInitializer>\r\n ) : (\r\n // BLANK LAYOUT\r\n <div className=\"kt-grid kt-grid--ver kt-grid--root\">\r\n <KtContent>\r\n {children}\r\n </KtContent>\r\n </div>\r\n );\r\n}\r\n\r\nconst mapStateToProps = ({ builder: { layoutConfig } }) => ({\r\n layoutConfig,\r\n selfLayout: objectPath.get(layoutConfig, \"self.layout\"),\r\n asideDisplay: objectPath.get(layoutConfig, \"aside.self.display\"),\r\n subheaderDisplay: objectPath.get(layoutConfig, \"subheader.display\"),\r\n desktopHeaderDisplay: objectPath.get(\r\n layoutConfig,\r\n \"header.self.fixed.desktop\"\r\n ),\r\n contentContainerClasses: \"\"\r\n // contentContainerClasses: builder.selectors.getClasses(store, {\r\n // path: \"content_container\",\r\n // toString: true\r\n // })\r\n});\r\n\r\nexport default connect(mapStateToProps)(Layout);\r\n","import axios from \"axios\"\r\n\r\nexport const apiURL = process.env.REACT_APP_APIIP\r\n\r\n// console.log(apiURL());\r\n\r\nexport function reauth(refreshToken){\r\n return axios.post(apiURL + \"/users/reauth\", { refreshToken })\r\n}\r\n\r\nexport function login(username, password, browserTZ) {\r\n return axios.post(apiURL + \"/users/authenticate\", { username, password, browserTZ })\r\n}\r\n\r\nexport function totp(totp, totpToken, browserTZ) {\r\n return axios.post(apiURL + \"/users/authenticatetotp\", { totp, totpToken, browserTZ })\r\n}\r\n\r\nexport function passwordUpdate(password, passwordconfirmation) {\r\n return axios.post(apiURL + \"/users/passwordupdate\", { password, passwordconfirmation })\r\n}\r\n\r\nexport function requestPassword(username) {\r\n return axios.post(apiURL + \"/users/lostpassword\", { username })\r\n}\r\n\r\nexport function emailLogin(username, dateofbirth) {\r\n return axios.post(apiURL + \"/users/emaillogin\", { username, dateofbirth })\r\n}\r\n\r\n","import React, { useState } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { Formik } from \"formik\";\r\nimport { connect } from \"react-redux\";\r\nimport { FormattedMessage, injectIntl } from \"react-intl\";\r\nimport { TextField } from \"@material-ui/core\";\r\nimport * as auth from \"../../store/ducks/auth.duck\";\r\nimport { Button } from \"react-bootstrap\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport Visibility from \"@material-ui/icons/Visibility\";\r\nimport VisibilityOff from \"@material-ui/icons/VisibilityOff\";\r\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\r\nimport { useDispatch } from 'react-redux'\r\nimport * as builder from \"../../../_metronic/ducks/builder\";\r\nimport { login } from \"../../crud/auth.crud\";\r\n\r\nfunction Login(props) {\r\n const { intl } = props;\r\n // const [loading, setLoading] = useState(false);\r\n const dispatch = useDispatch()\r\n const [showPassword,setShowPassword] = useState(false);\r\n \r\n\r\n const handleClickShowPassword = () => {\r\n // Check existing state value\r\n if (showPassword)\r\n {\r\n setShowPassword(false)\r\n }\r\n else\r\n {\r\n setShowPassword(true)\r\n }\r\n };\r\n\r\n const handleMouseDownPassword = (event) => {\r\n event.preventDefault();\r\n };\r\n\r\n // const [loadingButtonStyle, setLoadingButtonStyle] = useState({\r\n // paddingRight: \"2.5rem\"\r\n // });\r\n\r\n // const enableLoading = () => {\r\n // // setLoading(true);\r\n // setLoadingButtonStyle({ paddingRight: \"3.5rem\" });\r\n // };\r\n\r\n // const disableLoading = () => {\r\n // // setLoading(false);\r\n // setLoadingButtonStyle({ paddingRight: \"2.5rem\" });\r\n // };\r\n\r\n return (\r\n <>\r\n <div className=\"kt-login__head\">\r\n {/* <span className=\"kt-login__signup-label\">\r\n Don't have an account yet?\r\n </span>\r\n \r\n <Link to=\"/auth/registration\" className=\"kt-link kt-login__signup-link\">\r\n Sign Up!\r\n </Link> */}\r\n </div>\r\n\r\n <div className=\"kt-login__body\">\r\n <div className=\"kt-login__form\">\r\n <div className=\"kt-login__title\" style={{ marginBottom: 0 }}>\r\n <h3>\r\n {/* https://github.com/formatjs/react-intl/blob/master/docs/Components.md#formattedmessage */}\r\n Portal Login\r\n </h3>\r\n <div className=\"login-message\">\r\n <p>Welcome to the new look Rural Health Connect. </p>\r\n <p>If you are here for a session you can access the session directly using the URL provided with your booking, or please login here and click Start Session button on the dashboard</p> \r\n <p>If you did not receive a URL or you experience any issues connecting please call us on 0427 692 377. We are here to help.</p>\r\n <p></p>If you don't have an account, you can register here:\r\n <ul style={{ marginTop: 10, fontWeight: 500 }}>\r\n <li>\r\n <Link\r\n to=\"/clientregistration/new\"\r\n className=\"kt-link kt-login__link-forgot\"\r\n >\r\n Clients\r\n </Link>\r\n </li>\r\n <li>\r\n <Link\r\n to=\"/psychologistInvitation\"\r\n className=\"kt-link kt-login__link-forgot\"\r\n >\r\n Psychologists\r\n </Link>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <Formik\r\n initialValues={{\r\n email: \"\",\r\n password: \"\"\r\n }}\r\n validate={values => {\r\n const errors = {};\r\n\r\n // Disable as userid of members not an email address \r\n // if (!values.email) {\r\n // https://github.com/formatjs/react-intl/blob/master/docs/API.md#injection-api\r\n // errors.email = intl.formatMessage({\r\n // id: \"AUTH.VALIDATION.REQUIRED_FIELD\"\r\n // });\r\n // } else if (\r\n // !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i.test(values.email)\r\n // ) {\r\n // errors.email = intl.formatMessage({\r\n // id: \"AUTH.VALIDATION.INVALID_FIELD\"\r\n // });\r\n // }\r\n\r\n // if (!values.password) {\r\n // errors.password = intl.formatMessage({\r\n // id: \"AUTH.VALIDATION.REQUIRED_FIELD\"\r\n // });\r\n // }\r\n\r\n return errors;\r\n }}\r\n onSubmit={(values, { setStatus, setSubmitting }) => {\r\n // enableLoading();\r\n setTimeout(() => {\r\n const browserTZ = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n login(values.email, values.password, browserTZ)\r\n .then(({ data: { token, refreshToken, firstName, surname, preferredName, roleID, roleDesc, roleScope, userTZ, winbrowserTZ, totp, forcePasswordChange, providertype, recoveryStatus } }) => {\r\n // disableLoading();\r\n // console.log('In Login')\r\n // console.log(recoveryStatus);\r\n props.login(token,refreshToken,firstName,surname,preferredName,roleID,roleDesc, roleScope, userTZ, winbrowserTZ, totp, forcePasswordChange, providertype, recoveryStatus);\r\n dispatch(builder.actions.setMenuConfig({roleDesc,roleScope}))\r\n })\r\n .catch((err) => {\r\n // disableLoading();\r\n setSubmitting(false);\r\n if (err)\r\n {\r\n if (err.response)\r\n {\r\n if (err.response.data.message && err.response.data.message === 'Expired Recovery')\r\n {\r\n setStatus(\r\n intl.formatMessage({\r\n id: \"AUTH.VALIDATION.EXPIRED_RECOVERY\"\r\n })\r\n )\r\n }\r\n else\r\n { \r\n if (err.response.data.message && err.response.data.message === 'Invalid Recovery')\r\n {\r\n setStatus(\r\n intl.formatMessage({\r\n id: \"AUTH.VALIDATION.INVALID_RECOVERY\"\r\n })\r\n );\r\n }\r\n else\r\n {\r\n setStatus(\r\n intl.formatMessage({\r\n id: \"AUTH.VALIDATION.INVALID_LOGIN\"\r\n })\r\n );\r\n }\r\n }\r\n }\r\n else\r\n {\r\n setStatus(\r\n intl.formatMessage({\r\n id: \"AUTH.VALIDATION.SERVER_OUTAGE\"\r\n })\r\n );\r\n }\r\n }\r\n else\r\n {\r\n setStatus(\r\n intl.formatMessage({\r\n id: \"AUTH.VALIDATION.SERVER_OUTAGE\"\r\n })\r\n );\r\n }\r\n });\r\n }, 1000);\r\n }}\r\n >\r\n {({\r\n values,\r\n status,\r\n errors,\r\n touched,\r\n handleChange,\r\n handleBlur,\r\n handleSubmit,\r\n isSubmitting\r\n }) => (\r\n <form\r\n noValidate={true}\r\n autoComplete=\"off\"\r\n className=\"kt-form\"\r\n onSubmit={handleSubmit}\r\n >\r\n {status ? (\r\n <div role=\"alert\" className=\"alert alert-danger\">\r\n <div className=\"alert-text\">{status}</div>\r\n </div>\r\n ) : (\r\n <div role=\"alert\" className=\"alert alert-danger\">\r\n <div className=\"alert-text\">\r\n <i className=\"far far-warning\"></i> Confidential Information - Authorized access only.\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div className=\"form-group\">\r\n <TextField\r\n variant=\"outlined\"\r\n type=\"text\"\r\n label=\"Email\"\r\n margin=\"normal\"\r\n className=\"kt-width-full\"\r\n inputProps={{ style: { backgroundColor: \"white\" }}}\r\n name=\"email\"\r\n onBlur={handleBlur}\r\n onChange={handleChange}\r\n value={values.email}\r\n helperText={touched.email && errors.email}\r\n error={Boolean(touched.email && errors.email)}\r\n autoComplete='new-password'\r\n />\r\n </div>\r\n\r\n <div className=\"form-group\">\r\n <TextField\r\n variant=\"outlined\"\r\n type= {showPassword ? \"text\" : \"password\"}\r\n margin=\"normal\"\r\n label=\"Password\"\r\n className=\"kt-width-full\"\r\n inputProps={{ style: { backgroundColor: \"white\" }}}\r\n name=\"password\"\r\n onBlur={handleBlur}\r\n onChange={handleChange}\r\n value={values.password}\r\n helperText={touched.password && errors.password}\r\n error={Boolean(touched.password && errors.password)}\r\n autoComplete=\"current-password\"\r\n InputProps={{\r\n endAdornment: <InputAdornment position=\"end\">\r\n <IconButton\r\n onClick={handleClickShowPassword}\r\n onMouseDown={handleMouseDownPassword}\r\n sx={{backgroundColor: \"white\" }}\r\n >\r\n {showPassword ? <Visibility /> : <VisibilityOff />}\r\n </IconButton>\r\n </InputAdornment>\r\n }}\r\n />\r\n </div>\r\n\r\n <div style={{ alignItems: 'right', display: 'flex', justifyContent: 'right', marginBottom: 10 }}>\r\n <Link\r\n to=\"/auth/passwordupdate\"\r\n className=\"kt-link kt-login__link-forgot\"\r\n >\r\n <FormattedMessage id=\"AUTH.GENERAL.FORGOT_BUTTON\" />\r\n </Link>\r\n </div>\r\n\r\n <div> \r\n <Button\r\n id=\"kt_login_signin_submit\"\r\n type=\"submit\"\r\n disabled={isSubmitting}\r\n style={{ width: '100%', marginTop:30}}\r\n variant=\"primary\" \r\n >\r\n Sign In\r\n </Button>\r\n </div>\r\n\r\n <div >\r\n <Link to=\"/auth/loginEmail\">\r\n <Button\r\n id=\"kt_login_signin_submit\"\r\n type=\"button\"\r\n disabled={isSubmitting}\r\n style={{ width: '100%', marginTop:20}}\r\n variant=\"outline-primary\" \r\n >\r\n Sign In Without A Password\r\n </Button>\r\n </Link>\r\n </div>\r\n </form>\r\n )}\r\n </Formik>\r\n\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n\r\nexport default injectIntl(\r\n connect(\r\n null,\r\n auth.actions\r\n )(Login)\r\n);\r\n","import React, { useState } from \"react\";\r\nimport { useFormik } from \"formik\";\r\nimport { connect } from \"react-redux\";\r\nimport { Link, Redirect } from \"react-router-dom\";\r\nimport * as Yup from \"yup\";\r\nimport { injectIntl } from \"react-intl\";\r\nimport * as auth from \"../../store/ducks/auth.duck\";\r\nimport { requestPassword } from \"../../crud/auth.crud\";\r\nimport { TextField, Grid } from \"@material-ui/core\";\r\nimport { Button} from \"react-bootstrap\";\r\nimport { values } from \"lodash-es\";\r\n\r\n\r\nconst initialValues = {\r\n email: \"\",\r\n};\r\n\r\nfunction ForgotPassword(props) {\r\n const { intl } = props;\r\n const [isRequested, setIsRequested] = useState(false);\r\n const ForgotPasswordSchema = Yup.object().shape({\r\n email: Yup.string()\r\n .email(\"Wrong email format\")\r\n .min(3, \"Minimum 3 symbols\")\r\n .max(50, \"Maximum 50 symbols\")\r\n .required(\r\n intl.formatMessage({\r\n id: \"AUTH.VALIDATION.REQUIRED_FIELD\",\r\n })\r\n ),\r\n });\r\n\r\n const formik = useFormik({\r\n initialValues,\r\n validationSchema: ForgotPasswordSchema,\r\n onSubmit: (values, { setStatus, setSubmitting }) => {\r\n requestPassword(values.email)\r\n .then(() => setIsRequested(true))\r\n .catch(() => {\r\n setIsRequested(false);\r\n setSubmitting(false);\r\n setStatus(\r\n intl.formatMessage(\r\n { id: \"AUTH.VALIDATION.NOT_FOUND\" },\r\n { name: values.email }\r\n )\r\n );\r\n });\r\n },\r\n });\r\n\r\n return (\r\n <>\r\n {isRequested && <Redirect to=\"/auth\" />}\r\n {!isRequested && (\r\n <div className=\"kt-login__body\">\r\n <div className=\"login-form login-forgot\" style={{ display: \"block\" }}>\r\n <div className=\"text-center mb-10 mb-lg-20\">\r\n <h3 className=\"font-size-h1\">Forgotten Password ?</h3>\r\n <div className=\"text-muted font-weight-bold\">\r\n Enter your email to reset your password\r\n </div>\r\n </div>\r\n <form\r\n onSubmit={formik.handleSubmit}\r\n className=\"form fv-plugins-bootstrap fv-plugins-framework animated animate__animated animate__backInUp\"\r\n >\r\n {formik.status && (\r\n <div className=\"mb-10 alert alert-custom alert-light-danger alert-dismissible\">\r\n <div className=\"alert-text font-weight-bold\">\r\n {formik.status}\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div className=\"form-group fv-plugins-icon-container\">\r\n \r\n <div className=\"form-group\">\r\n <TextField\r\n variant=\"outlined\"\r\n type=\"email\"\r\n label=\"Email\"\r\n margin=\"normal\"\r\n className=\"kt-width-full\"\r\n inputProps={{ style: { backgroundColor: \"white\" }}}\r\n name=\"email\"\r\n value={values.email}\r\n onChange={formik.handleChange}\r\n helperText={formik.touched.email && formik.errors.email}\r\n error={Boolean(formik.touched.email && formik.errors.email)}\r\n />\r\n </div>\r\n {/* <input\r\n type=\"email\"\r\n className={`form-control form-control-solid h-auto py-5 px-6 ${getInputClasses(\r\n \"email\"\r\n )}`}\r\n name=\"email\"\r\n {...formik.getFieldProps(\"email\")}\r\n />\r\n {formik.touched.email && formik.errors.email ? (\r\n <div className=\"fv-plugins-message-container\">\r\n <div className=\"fv-help-block\">{formik.errors.email}</div>\r\n </div>\r\n ) : null} */}\r\n </div>\r\n <div className=\"form-group d-flex flex-wrap flex-center\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item md={3}>\r\n <Link to=\"/auth\">\r\n <Button\r\n type=\"button\"\r\n id=\"kt_login_forgot_cancel\"\r\n variant=\"secondary\"\r\n >\r\n Cancel\r\n </Button>\r\n </Link>\r\n </Grid>\r\n <Grid item md={3}>\r\n <Button\r\n id=\"kt_login_forgot_submit\"\r\n type=\"submit\"\r\n variant=\"primary\"\r\n disabled={formik.isSubmitting}\r\n >\r\n Submit\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nexport default injectIntl(connect(null, auth.actions)(ForgotPassword));\r\n","import React from 'react';\r\nimport { Formik } from 'formik';\r\nimport { connect } from 'react-redux';\r\nimport { injectIntl } from 'react-intl';\r\nimport { TextField } from '@material-ui/core';\r\nimport * as auth from '../../store/ducks/auth.duck';\r\nimport { Button } from 'react-bootstrap';\r\nimport { useDispatch } from 'react-redux'\r\nimport * as builder from '../../../_metronic/ducks/builder';\r\nimport { totp } from '../../crud/auth.crud';\r\n\r\nfunction BackupCode(props) {\r\n const { intl } = props\r\n // const [loading, setLoading] = useState(false);\r\n const dispatch = useDispatch()\r\n // const [loadingButtonStyle, setLoadingButtonStyle] = useState({\r\n // paddingRight: '2.5rem'\r\n // });\r\n\r\n // const enableLoading = () => {\r\n // // setLoading(true);\r\n // setLoadingButtonStyle({ paddingRight: '3.5rem' });\r\n // };\r\n\r\n // const disableLoading = () => {\r\n // // setLoading(false);\r\n // setLoadingButtonStyle({ paddingRight: '2.5rem' });\r\n // };\r\n\r\n return (\r\n <>\r\n <div className='kt-login__head'>\r\n {/* <span className='kt-login__signup-label'>\r\n Don't have an account yet?\r\n </span>\r\n \r\n <Link to='/auth/registration' className='kt-link kt-login__signup-link'>\r\n Sign Up!\r\n </Link> */}\r\n </div>\r\n\r\n <div className='kt-login__body'>\r\n <div className='kt-login__form'>\r\n <div className='kt-login__title' style={{ marginBottom: 0 }}>\r\n <h3>\r\n {/* https://github.com/formatjs/react-intl/blob/master/docs/Components.md#formattedmessage */}\r\n Multi Factor Recovery\r\n </h3>\r\n {/* <div className='login-message'>\r\n <p>Please enter your MFA Code </p>\r\n </div> */}\r\n </div>\r\n\r\n <Formik\r\n initialValues={{\r\n totpEntry: ''\r\n }}\r\n validate={values => {\r\n const errors = {};\r\n\r\n // Disable as userid of members not an email address \r\n // if (!values.email) {\r\n // https://github.com/formatjs/react-intl/blob/master/docs/API.md#injection-api\r\n // errors.email = intl.formatMessage({\r\n // id: 'AUTH.VALIDATION.REQUIRED_FIELD'\r\n // });\r\n // } else if (\r\n // !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i.test(values.email)\r\n // ) {\r\n // errors.email = intl.formatMessage({\r\n // id: 'AUTH.VALIDATION.INVALID_FIELD'\r\n // });\r\n // }\r\n\r\n // if (!values.password) {\r\n // errors.password = intl.formatMessage({\r\n // id: 'AUTH.VALIDATION.REQUIRED_FIELD'\r\n // });\r\n // }\r\n\r\n return errors;\r\n }}\r\n onSubmit={(values, { setStatus, setSubmitting }) => {\r\n // enableLoading();\r\n setTimeout(() => {\r\n const browserTZ = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n totp(values.totpEntry, props.totpToken, browserTZ)\r\n .then(({ data: { token, refreshToken, firstName, surname, preferredName, roleID, roleDesc, roleScope, userTZ, winbrowserTZ, totp, providertype } }) => {\r\n // disableLoading();\r\n // console.log(firstName);\r\n props.login(token,refreshToken,firstName,surname, preferredName, roleID,roleDesc, roleScope, userTZ, winbrowserTZ, totp, providertype);\r\n dispatch(builder.actions.setMenuConfig({roleDesc,roleScope}))\r\n })\r\n .catch((err) => {\r\n // disableLoading();\r\n setSubmitting(false);\r\n if (err)\r\n {\r\n if (err.response)\r\n {\r\n if (err.response.data.message && err.response.data.message === 'FailedTOTP')\r\n {\r\n //console.log('Redirecting')\r\n //console.log(props)\r\n dispatch(auth.actions.clearMFAToken());\r\n props.history.push(\"/auth/login\")\r\n }\r\n if (err.response.data.message && err.response.data.message === 'No Access')\r\n {\r\n setStatus(\r\n intl.formatMessage({\r\n id: \"AUTH.VALIDATION.INVALID_BACKUPCODE\"\r\n })\r\n );\r\n }\r\n }\r\n };\r\n });\r\n }, 1000);\r\n }}\r\n >\r\n {({\r\n values,\r\n status,\r\n errors,\r\n touched,\r\n handleChange,\r\n handleBlur,\r\n handleSubmit,\r\n isSubmitting\r\n }) => (\r\n <form\r\n noValidate={true}\r\n autoComplete='off'\r\n className='kt-form'\r\n onSubmit={handleSubmit}\r\n >\r\n {status ? (\r\n <div role=\"alert\" className=\"alert alert-danger\">\r\n <div className=\"alert-text\">{status}</div>\r\n </div>\r\n ) : (\r\n <div role=\"alert\" className=\"alert alert-danger\">\r\n <div className=\"alert-text\">\r\n <i className=\"far far-warning\"></i> Confidential Information - Authorized access only.\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div className='form-group'>\r\n <TextField\r\n variant='outlined'\r\n type='text'\r\n label='Please enter one of your Backup Codes'\r\n margin='normal'\r\n className='kt-width-full'\r\n inputProps={{ style: { backgroundColor: 'white' }}}\r\n name='totpEntry'\r\n onBlur={handleBlur}\r\n onChange={handleChange}\r\n value={values.totpEntry}\r\n helperText={touched.totpEntry && errors.totpEntry}\r\n error={Boolean(touched.totpEntry && errors.totpEntry)}\r\n autoComplete='totpEntry'\r\n />\r\n </div>\r\n\r\n <div className='kt-login__actions'>\r\n <Button id='kt_login_signin_submit' type='submit' disabled={isSubmitting} variant='primary' >\r\n Send\r\n </Button>\r\n </div>\r\n </form>\r\n )}\r\n </Formik>\r\n\r\n </div>\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n totpToken: state.auth.totp\r\n }\r\n};\r\n\r\nexport default injectIntl(\r\n connect(\r\n mapStateToProps,\r\n auth.actions\r\n )(BackupCode)\r\n);\r\n\r\n\r\n\r\n","import React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Formik } from 'formik';\r\nimport { connect } from 'react-redux';\r\nimport { FormattedMessage, injectIntl } from 'react-intl';\r\nimport { TextField } from '@material-ui/core';\r\nimport * as auth from '../../store/ducks/auth.duck';\r\nimport { Button } from 'react-bootstrap';\r\nimport { useDispatch } from 'react-redux'\r\nimport * as builder from '../../../_metronic/ducks/builder';\r\nimport { totp } from '../../crud/auth.crud';\r\n\r\nfunction Totp(props) {\r\n const { intl } = props\r\n // const [loading, setLoading] = useState(false);\r\n const dispatch = useDispatch()\r\n // const [loadingButtonStyle, setLoadingButtonStyle] = useState({\r\n // paddingRight: '2.5rem'\r\n // });\r\n\r\n // const enableLoading = () => {\r\n // // setLoading(true);\r\n // setLoadingButtonStyle({ paddingRight: '3.5rem' });\r\n // };\r\n\r\n // const disableLoading = () => {\r\n // // setLoading(false);\r\n // setLoadingButtonStyle({ paddingRight: '2.5rem' });\r\n // };\r\n\r\n return (\r\n <>\r\n <div className='kt-login__head'>\r\n {/* <span className='kt-login__signup-label'>\r\n Don't have an account yet?\r\n </span>\r\n \r\n <Link to='/auth/registration' className='kt-link kt-login__signup-link'>\r\n Sign Up!\r\n </Link> */}\r\n </div>\r\n\r\n <div className='kt-login__body'>\r\n <div className='kt-login__form'>\r\n <div className='kt-login__title' style={{ marginBottom: 0 }}>\r\n <h3>\r\n {/* https://github.com/formatjs/react-intl/blob/master/docs/Components.md#formattedmessage */}\r\n Multi Factor Authentication\r\n </h3>\r\n {/* <div className='login-message'>\r\n <p>Please enter your MFA Code </p>\r\n </div> */}\r\n </div>\r\n\r\n <Formik\r\n initialValues={{\r\n totpEntry: ''\r\n }}\r\n validate={values => {\r\n const errors = {};\r\n\r\n // Disable as userid of members not an email address \r\n // if (!values.email) {\r\n // https://github.com/formatjs/react-intl/blob/master/docs/API.md#injection-api\r\n // errors.email = intl.formatMessage({\r\n // id: 'AUTH.VALIDATION.REQUIRED_FIELD'\r\n // });\r\n // } else if (\r\n // !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i.test(values.email)\r\n // ) {\r\n // errors.email = intl.formatMessage({\r\n // id: 'AUTH.VALIDATION.INVALID_FIELD'\r\n // });\r\n // }\r\n\r\n // if (!values.password) {\r\n // errors.password = intl.formatMessage({\r\n // id: 'AUTH.VALIDATION.REQUIRED_FIELD'\r\n // });\r\n // }\r\n\r\n return errors;\r\n }}\r\n onSubmit={(values, { setStatus, setSubmitting }) => {\r\n // enableLoading();\r\n setTimeout(() => {\r\n const browserTZ = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n totp(values.totpEntry, props.totpToken, browserTZ)\r\n .then(({ data: { token, refreshToken, firstName, surname, preferredName, roleID, roleDesc, roleScope, userTZ, winbrowserTZ, totp, providertype } }) => {\r\n // disableLoading();\r\n // console.log(firstName);\r\n props.login(token,refreshToken,firstName,surname, preferredName, roleID,roleDesc, roleScope, userTZ, winbrowserTZ, totp, providertype);\r\n dispatch(builder.actions.setMenuConfig({roleDesc,roleScope}))\r\n })\r\n .catch((err) => {\r\n // disableLoading();\r\n setSubmitting(false);\r\n if (err)\r\n {\r\n if (err.response)\r\n {\r\n if (err.response.data.message && err.response.data.message === 'FailedTOTP')\r\n {\r\n // console.log('Redirecting')\r\n // console.log(props)\r\n dispatch(auth.actions.clearMFAToken());\r\n props.history.push(\"/auth/login\")\r\n }\r\n if (err.response.data.message && err.response.data.message === 'No Access')\r\n {\r\n setStatus(\r\n intl.formatMessage({\r\n id: \"AUTH.VALIDATION.INVALID_TOTP\"\r\n })\r\n );\r\n }\r\n }\r\n };\r\n });\r\n }, 1000);\r\n }}\r\n >\r\n {({\r\n values,\r\n status,\r\n errors,\r\n touched,\r\n handleChange,\r\n handleBlur,\r\n handleSubmit,\r\n isSubmitting\r\n }) => (\r\n <form\r\n noValidate={true}\r\n autoComplete='off'\r\n className='kt-form'\r\n onSubmit={handleSubmit}\r\n >\r\n {status ? (\r\n <div role=\"alert\" className=\"alert alert-danger\">\r\n <div className=\"alert-text\">{status}</div>\r\n </div>\r\n ) : (\r\n <div role=\"alert\" className=\"alert alert-danger\">\r\n <div className=\"alert-text\">\r\n <i className=\"far far-warning\"></i> Confidential Information - Authorized access only.\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div className='form-group'>\r\n <TextField\r\n variant='outlined'\r\n type='text'\r\n label='Please enter your MFA Code'\r\n margin='normal'\r\n className='kt-width-full'\r\n inputProps={{ style: { backgroundColor: 'white' }}}\r\n name='totpEntry'\r\n onBlur={handleBlur}\r\n onChange={handleChange}\r\n value={values.totpEntry}\r\n helperText={touched.totpEntry && errors.totpEntry}\r\n error={Boolean(touched.totpEntry && errors.totpEntry)}\r\n autoComplete='totpEntry'\r\n />\r\n </div>\r\n\r\n <div className='kt-login__actions'>\r\n <Link\r\n to='/auth/backupcode'\r\n className='kt-link kt-login__link-forgot'\r\n >\r\n <FormattedMessage id='AUTH.GENERAL.NOPHONE_BUTTON' />\r\n </Link>\r\n\r\n <Button id='kt_login_signin_submit' type='submit' disabled={isSubmitting} variant='primary' >\r\n Send\r\n </Button>\r\n </div>\r\n </form>\r\n )}\r\n </Formik>\r\n\r\n </div>\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n totpToken: state.auth.totp\r\n }\r\n};\r\n\r\nexport default injectIntl(\r\n connect(\r\n mapStateToProps,\r\n auth.actions\r\n )(Totp)\r\n);\r\n\r\n\r\n\r\n","import React, { useState } from 'react';\r\nimport { Formik } from 'formik';\r\nimport { connect } from 'react-redux';\r\nimport { injectIntl } from 'react-intl';\r\nimport * as auth from '../../store/ducks/auth.duck';\r\nimport { Button, Form, Row, Col, InputGroup } from \"react-bootstrap\";\r\nimport * as Yup from \"yup\";\r\nimport VisibilityIcon from '@material-ui/icons/Visibility';\r\nimport VisibilityOffIcon from '@material-ui/icons/VisibilityOff';\r\nimport { passwordUpdate } from '../../crud/auth.crud';\r\n\r\nconsole.log('Here')\r\n\r\nfunction PasswordUpdate(props) {\r\n\r\n\r\n const { intl } = props\r\n // const [loading, setLoading] = useState(false);\r\n \r\n const [showPassword, setShowPassword] = useState(false);\r\n console.log('Here2')\r\n const validationSchema = Yup.object().shape({\r\n profilePasswordConfirmation: Yup.string()\r\n .min(8,\"Too Short\")\r\n .oneOf([Yup.ref('profilePassword'), null], 'Passwords must match'),\r\n });\r\n\r\n return (\r\n <>\r\n <div className='kt-login__head'>\r\n {/* <span className='kt-login__signup-label'>\r\n Don't have an account yet?\r\n </span>\r\n \r\n <Link to='/auth/registration' className='kt-link kt-login__signup-link'>\r\n Sign Up!\r\n </Link> */}\r\n </div>\r\n\r\n <div className='kt-login__body'>\r\n <div className='kt-login__form'>\r\n <div className='kt-login__title' style={{ marginBottom: 0 }}>\r\n <h3>\r\n {/* https://github.com/formatjs/react-intl/blob/master/docs/Components.md#formattedmessage */}\r\n Your Password Needs to be Changed\r\n </h3>\r\n {/* <div className='login-message'>\r\n <p>Please enter your MFA Code </p>\r\n </div> */}\r\n </div>\r\n\r\n <Formik\r\n initialValues={{\r\n profilePassword: '',\r\n profilePasswordConfirmation: '',\r\n }}\r\n validationSchema = {validationSchema}\r\n onSubmit={(values, { setStatus, setSubmitting }) => {\r\n // enableLoading();\r\n setTimeout(() => {\r\n const browserTZ = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n passwordUpdate(values.profilePassword, values.profilePasswordConfirmation)\r\n .then(({ data: { response } }) => {\r\n // disableLoading();\r\n // console.log(firstName);\r\n props.passwordUpdate(response);\r\n })\r\n .catch((err) => {\r\n // disableLoading();\r\n setSubmitting(false);\r\n if (err)\r\n {\r\n if (err.response)\r\n {\r\n if (err.response.data.message && err.response.data.message === 'FailedPasswordUpdate')\r\n {\r\n // console.log('Redirecting')\r\n // console.log(props)\r\n props.history.push(\"/auth/login\")\r\n }\r\n if (err.response.data.message && err.response.data.message === 'No Access')\r\n {\r\n setStatus(\r\n intl.formatMessage({\r\n id: \"AUTH.VALIDATION.FailedPasswordUpdate\",\r\n })\r\n );\r\n }\r\n }\r\n };\r\n });\r\n }, 1000);\r\n }}\r\n >\r\n {({\r\n values,\r\n status,\r\n errors,\r\n touched,\r\n handleChange,\r\n handleBlur,\r\n handleSubmit,\r\n isSubmitting\r\n }) => (\r\n <form\r\n noValidate={true}\r\n autoComplete='off'\r\n className='kt-form'\r\n onSubmit={handleSubmit}\r\n >\r\n {status ? (\r\n <div role=\"alert\" className=\"alert alert-danger\">\r\n <div className=\"alert-text\">{status}</div>\r\n </div>\r\n ) : (\r\n <div role=\"alert\" className=\"alert alert-danger\">\r\n <div className=\"alert-text\">\r\n <i className=\"far far-warning\"></i> Confidential Information - Authorized access only.\r\n </div>\r\n </div>\r\n )}\r\n\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group>\r\n <Form.Label>New Password</Form.Label>\r\n <InputGroup>\r\n <Form.Control type={showPassword ? \"text\" : \"password\"} name=\"profilePassword\" value={values.profilePassword} autoComplete='new-password' onChange={handleChange} isInvalid={touched.profilePassword && !!errors.profilePassword} isValid={touched.profilePassword && !errors.profilePassword} />\r\n <InputGroup.Append onClick={()=>setShowPassword(!showPassword)}>\r\n <InputGroup.Text>\r\n {showPassword ?\r\n <VisibilityOffIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n : \r\n <VisibilityIcon fontSize=\"small\" style={{ marginLeft: -4 }} /> \r\n }\r\n </InputGroup.Text>\r\n </InputGroup.Append> \r\n <Form.Control.Feedback type=\"invalid\">{errors.profilePassword}</Form.Control.Feedback>\r\n </InputGroup>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group>\r\n <Form.Label>Confirm Password</Form.Label>\r\n <InputGroup>\r\n <Form.Control type={showPassword ? \"text\" : \"password\"} name=\"profilePasswordConfirmation\" value={values.profilePasswordConfirmation} autoComplete='new-password' onChange={handleChange} isInvalid={touched.profilePasswordConfirmation && !!errors.profilePasswordConfirmation} isValid={touched.profilePasswordConfirmation && !errors.profilePasswordConfirmation} />\r\n <InputGroup.Append onClick={()=>setShowPassword(!showPassword)}>\r\n <InputGroup.Text>\r\n {showPassword ?\r\n <VisibilityOffIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n : \r\n <VisibilityIcon fontSize=\"small\" style={{ marginLeft: -4 }} /> \r\n }\r\n </InputGroup.Text>\r\n </InputGroup.Append> \r\n <Form.Control.Feedback type=\"invalid\">{errors.profilePasswordConfirmation}</Form.Control.Feedback>\r\n </InputGroup>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n\r\n <div className='kt-login__actions'>\r\n <Button id='kt_login_signin_submit' type='submit' disabled={isSubmitting} variant='primary' >\r\n Update\r\n </Button>\r\n </div>\r\n </form>\r\n )}\r\n </Formik>\r\n\r\n </div>\r\n </div>\r\n </>\r\n )\r\n}\r\n\r\nexport default injectIntl(\r\n connect(\r\n null,\r\n auth.actions\r\n )(PasswordUpdate)\r\n);\r\n\r\n\r\n\r\n","import React from \"react\";\r\nimport { Formik } from \"formik\";\r\nimport { connect } from \"react-redux\";\r\nimport { Link } from \"react-router-dom\";\r\nimport * as Yup from \"yup\";\r\nimport { injectIntl } from \"react-intl\";\r\nimport * as auth from \"../../store/ducks/auth.duck\";\r\nimport { emailLogin } from \"../../crud/auth.crud\";\r\nimport { TextField, Grid } from \"@material-ui/core\";\r\nimport { Button} from \"react-bootstrap\";\r\n// import { values } from \"lodash-es\";\r\n\r\n\r\nconst initialValues = {\r\n email: '',\r\n dateofbirth: '',\r\n};\r\n\r\nfunction LoginEmail(props) {\r\n const { intl } = props;\r\n // const [isRequested, setIsRequested] = useState(false);\r\n const EmailLoginSchema = Yup.object().shape({\r\n email: Yup.string()\r\n .email(\"Wrong email format\")\r\n .min(3, \"Minimum 3 symbols\")\r\n .max(50, \"Maximum 50 symbols\")\r\n .required(\r\n intl.formatMessage({\r\n id: \"AUTH.VALIDATION.REQUIRED_FIELD\",\r\n })\r\n ),\r\n dateofbirth: Yup.string().min(10, 'Please enter your date of birth - DD/MM/YYYY').max(10, 'Please enter your date of birth - DD/MM/YYYY').required('Date of Birth (DD/MM/YYYY) is required') \r\n });\r\n\r\n return (\r\n <>\r\n <div className=\"kt-login__body\">\r\n <div className=\"kt-login__form\">\r\n <div className=\"kt-login__title\" style={{ marginBottom: 0 }}>\r\n <h3>\r\n {/* https://github.com/formatjs/react-intl/blob/master/docs/Components.md#formattedmessage */}\r\n Secure Access, Password-Free\r\n </h3>\r\n <div className=\"login-message\">\r\n <p>Enter your email address and birth date and we'll email you a one-time code to access your account.</p>\r\n </div>\r\n </div>\r\n\r\n <Formik\r\n initialValues={initialValues}\r\n validationSchema={EmailLoginSchema}\r\n onSubmit={(values, { setStatus, setSubmitting }) => {\r\n setTimeout(() => {\r\n emailLogin(values.email, values.dateofbirth)\r\n .then(() => setStatus(intl.formatMessage({ id: \"AUTH.VALIDATION.SSO_EMAIL\" })))\r\n .catch((err) => {\r\n // disableLoading();\r\n setSubmitting(false);\r\n if (err)\r\n {\r\n if (err.response)\r\n {\r\n if (err.response.data.message && err.response.data.message === 'Login via email is for Clients only')\r\n {\r\n setStatus(\r\n intl.formatMessage({\r\n id: \"AUTH.VALIDATION.SSO_CLIENTONLY\"\r\n })\r\n );\r\n }\r\n else\r\n {\r\n setStatus(\r\n intl.formatMessage({\r\n id: \"AUTH.VALIDATION.SSO_NOTFOUND\"\r\n })\r\n );\r\n }\r\n }\r\n else\r\n {\r\n setStatus(\r\n intl.formatMessage({\r\n id: \"AUTH.VALIDATION.SERVER_OUTAGE\"\r\n })\r\n );\r\n }\r\n }\r\n else\r\n {\r\n setStatus(\r\n intl.formatMessage({\r\n id: \"AUTH.VALIDATION.SERVER_OUTAGE\"\r\n })\r\n );\r\n }\r\n });\r\n }, 1000);\r\n }}\r\n >\r\n {({\r\n values,\r\n status,\r\n errors,\r\n touched,\r\n handleChange,\r\n handleBlur,\r\n handleSubmit,\r\n isSubmitting\r\n }) => (\r\n <form\r\n noValidate={true}\r\n autoComplete=\"off\"\r\n className=\"kt-form\"\r\n onSubmit={handleSubmit}\r\n >\r\n {status ? (\r\n <>\r\n {status === intl.formatMessage({ id: \"AUTH.VALIDATION.SSO_EMAIL\" }) ? (\r\n <div role=\"alert\" className=\"alert alert-info\">\r\n <div className=\"alert-text\">{status}</div>\r\n </div>\r\n ):(\r\n <div role=\"alert\" className=\"alert alert-danger\">\r\n <div className=\"alert-text\">{status}</div>\r\n </div>\r\n )}\r\n </>\r\n ) : (\r\n <div role=\"alert\" className=\"alert alert-danger\">\r\n <div className=\"alert-text\">\r\n <i className=\"far far-warning\"></i> Confidential Information - Authorized access only.\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div className=\"login-form login-forgot\" style={{ display: \"block\" }}>\r\n <div className=\"form-group fv-plugins-icon-container\">\r\n <div className=\"form-group\">\r\n <TextField\r\n variant=\"outlined\"\r\n type=\"email\"\r\n label=\"Email\"\r\n margin=\"normal\"\r\n className=\"kt-width-full\"\r\n inputProps={{ style: { backgroundColor: \"white\" }}}\r\n name=\"email\"\r\n value={values.email}\r\n onChange={handleChange}\r\n helperText={touched.email && errors.email}\r\n error={Boolean(touched.email && errors.email)}\r\n />\r\n </div>\r\n <div className=\"form-group\">\r\n <TextField\r\n variant=\"outlined\"\r\n type=\"text\"\r\n label=\"Date of Birth (DD/MM/YYYY)\"\r\n margin=\"normal\"\r\n className=\"kt-width-full\"\r\n inputProps={{ style: { backgroundColor: \"white\" }}}\r\n name=\"dateofbirth\"\r\n value={values.dateofbirth}\r\n onChange={handleChange}\r\n helperText={touched.dateofbirth && errors.dateofbirth}\r\n error={Boolean(touched.dateofbirth && errors.dateofbirth)}\r\n />\r\n </div>\r\n <div className='kt-login__actions'>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item md={3}>\r\n <Link to=\"/auth\">\r\n <Button\r\n type=\"button\"\r\n id=\"kt_login_forgot_cancel\"\r\n variant=\"secondary\"\r\n >\r\n Cancel\r\n </Button>\r\n </Link>\r\n </Grid>\r\n <Grid item md={3}>\r\n <Button\r\n id=\"kt_login_forgot_submit\"\r\n type=\"submit\"\r\n variant=\"primary\"\r\n disabled={isSubmitting}\r\n >\r\n Submit\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n )}\r\n </Formik>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n\r\nexport default injectIntl(connect(null, auth.actions)(LoginEmail));\r\n","import React from \"react\";\r\nimport { Link, Switch, Route, Redirect } from \"react-router-dom\"\r\nimport { useMediaQuery } from '@material-ui/core'\r\nimport { toAbsoluteUrl } from \"../../../_metronic\"\r\nimport \"../../../_metronic/_assets/sass/pages/login/login-1.scss\"\r\nimport Login from \"./Login\"\r\nimport ForgotPassword from \"./ForgotPassword\"\r\nimport BackupCode from \"./BackupCode\"\r\nimport Totp from \"./Totp\";\r\nimport PasswordUpdate from \"./PasswordUpdate\";\r\nimport LoginEmail from \"./loginEmail\";\r\n\r\nexport default function AuthPage() {\r\n const isMobile = useMediaQuery('(max-width: 760px)');\r\n \r\n return (\r\n <>\r\n <div className=\"kt-grid kt-grid--ver kt-grid--root\">\r\n <div\r\n id=\"kt_login\"\r\n className=\"kt-grid kt-grid--hor kt-grid--root kt-login kt-login--v1\"\r\n >\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid kt-grid--desktop kt-grid--ver-desktop kt-grid--hor-tablet-and-mobile\">\r\n <div\r\n className=\"kt-grid__item kt-grid__item--order-tablet-and-mobile-2 kt-grid kt-grid--hor kt-login__aside\"\r\n style={{\r\n backgroundImage: `url(${toAbsoluteUrl(\"/media/bg/rhc-farm.jpg\")})`\r\n }}\r\n >\r\n <div className=\"kt-grid__item\">\r\n <Link to=\"/auth/login\" className=\"kt-login__logo\">\r\n <img\r\n alt=\"Logo\"\r\n src={toAbsoluteUrl(\"/media/logos/logo-3.png\")}\r\n style={{ marginLeft: -10 }}\r\n />\r\n </Link>\r\n </div>\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid \">\r\n <div className=\"kt-grid__item kt-grid__item--middle\">\r\n <h3 className=\"kt-login__title\" style={{ marginTop: isMobile ? 0 : 80 }}>Rural Health Connect</h3>\r\n <h4 className=\"kt-login__subtitle\" style={{ marginTop: 20 }}>\r\n Welcome to the Rural Health Connect Portal.\r\n </h4>\r\n </div>\r\n </div>\r\n <div className=\"kt-grid__item\">\r\n <div className=\"kt-login__info\">\r\n <div className=\"kt-login__copyright\">\r\n © 2025 Rural Health Connect\r\n </div>\r\n <div className=\"kt-login__menu\">\r\n {/* <Link to=\"/terms\" className=\"kt-link\">\r\n Privacy\r\n </Link>\r\n <Link to=\"/terms\" className=\"kt-link\">\r\n Legal\r\n </Link>\r\n <Link to=\"/terms\" className=\"kt-link\">\r\n Contact\r\n </Link> */}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid__item--order-tablet-and-mobile-1 kt-login__wrapper\" style={{ backgroundColor: \"#FBFBFB\" }}>\r\n <Switch>\r\n <Route path=\"/auth/login\" component={Login} />\r\n <Route path=\"/auth/forgot-password\" component={ForgotPassword} />\r\n <Route path=\"/auth/loginemail\" component={LoginEmail} />\r\n <Route path=\"/auth/backupcode\" component={BackupCode} />\r\n <Route path=\"/auth/totp\" component={Totp} />\r\n <Route path=\"/auth/passwordupdate\" component={PasswordUpdate} />\r\n <Redirect from=\"/auth\" exact={true} to=\"/auth/login\" />\r\n <Redirect to=\"/auth/login\" />\r\n </Switch>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useState, useEffect, useCallback } from \"react\";\r\nimport { Link, useParams } from \"react-router-dom\";\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport PlacesAutoComplete from \"../../components/AddressAutoComplete\";\r\nimport * as Reference from \"../../store/ducks/reference.duck\"\r\nimport * as Registration from \"../../store/ducks/registration.duck\"\r\nimport * as Admin from \"../../store/ducks/admin.duck\"\r\nimport { Button, Form, Row, Col, InputGroup, Table, Modal, Popover, OverlayTrigger, Badge } from \"react-bootstrap\";\r\nimport { Paper, Grid, List, ListItem, ListItemIcon, ListItemText, Typography, Checkbox, Card, FormLabel, CardActions, CardMedia, CardContent, Chip, TextField, makeStyles, FormControl, RadioGroup, FormControlLabel, Radio } from '@material-ui/core';\r\nimport { IconButton, Collapse } from '@material-ui/core';\r\nimport { Formik, useFormikContext } from 'formik';\r\nimport * as Yup from \"yup\";\r\nimport Alert from '@material-ui/lab/Alert';\r\nimport { useMediaQuery } from '@material-ui/core';\r\nimport { toAbsoluteUrl } from \"../../../_metronic\";\r\nimport HelpOutlineIcon from '@material-ui/icons/HelpOutline';\r\nimport GroupIcon from '@material-ui/icons/Group';\r\nimport AssignmentIcon from '@material-ui/icons/Assignment';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport Masonry from 'react-masonry-css';\r\nimport clsx from 'clsx';\r\nimport { format, differenceInYears } from \"date-fns\";\r\nimport VisibilityIcon from '@material-ui/icons/Visibility';\r\nimport VisibilityOffIcon from '@material-ui/icons/VisibilityOff';\r\nimport Interweave from 'interweave';\r\n\r\nimport \"../../../_metronic/_assets/sass/pages/login/login-1.scss\";\r\nimport '../../../_metronic/_assets/css/app2.css';\r\n\r\nexport function EAPRegistrationPage() {\r\n return <ClientRegistrationPage \r\n type=\"EAP\" \r\n />;\r\n}\r\n\r\nexport function NDISRegistrationPage() {\r\n return <ClientRegistrationPage \r\n type=\"NDIS\" \r\n />;\r\n}\r\n\r\n\r\nexport default function ClientRegistrationPage(props) { \r\n \r\n const { invitetoken } = useParams();\r\n \r\n // console.log(props.type)\r\n\r\n\r\n const [providerType,setProviderType] = useState();\r\n if (!providerType)\r\n {\r\n if (props.type === 'EAP')\r\n {\r\n setProviderType('EAP');\r\n }\r\n else\r\n {\r\n switch(invitetoken)\r\n {\r\n case 'new':\r\n setProviderType('ALL');\r\n break;\r\n case 'lgbtiq':\r\n setProviderType('Psychologist');\r\n break;\r\n case 'perinatal':\r\n setProviderType('Psychologist');\r\n break;\r\n case 'newfinancial':\r\n setProviderType('Financial');\r\n break;\r\n case 'newgp':\r\n setProviderType('GP');\r\n break;\r\n case 'newprovisional':\r\n setProviderType('Provisional');\r\n break;\r\n case 'newsocial':\r\n setProviderType('Social');\r\n break;\r\n case 'newnurse':\r\n setProviderType('Nurse');\r\n break;\r\n case 'newoccupational':\r\n setProviderType('Occupational');\r\n break;\r\n case 'newsupervision':\r\n setProviderType('Supervision');\r\n break;\r\n case 'nthqldphn':\r\n setProviderType('NthQLDPHN');\r\n break;\r\n default:\r\n setProviderType('Psychologist');\r\n break;\r\n }\r\n }\r\n }\r\n\r\n\r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Registration.actions.fetchClientInvite(invitetoken)) }, [dispatch, invitetoken] )\r\n useEffect( () => { dispatch(Reference.actions.fetchAreasOfInterest('ALL')) }, [dispatch] )\r\n useEffect( () => { dispatch(Registration.actions.fetchRegisteredPublic({ inviteToken: invitetoken, providerType : providerType})) }, [dispatch, invitetoken, providerType] )\r\n useEffect( () => { dispatch(Reference.actions.fetchTimeZone()) }, [dispatch] )\r\n useEffect( () => loadInviteAOI(invitetoken), )\r\n useEffect( () => { dispatch(Reference.actions.fetchSupervisionAreas()) }, [dispatch] )\r\n useEffect( () => { dispatch(Admin.actions.fetchPrograms()) }, [dispatch] )\r\n \r\n const areasOfInterestReference = useSelector(state => state.reference.AreasOfInterest)\r\n const registered = useSelector(state => state.registration.Registered);\r\n const invite = useSelector(state => state.registration.ClientInvite)\r\n const programs = useSelector(state => state.admin.Programs)\r\n \r\n // const regstatus = useSelector(state => state.registration.regstatus)\r\n const [aoiTouched, setaoiTouched] = useState(false)\r\n // Determine browser timezone\r\n const timeZone = useSelector(state => state.reference.TimeZone)\r\n const browserTZ = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n const browserTZMS = (timeZone && timeZone.some(tz => tz.ianaName === browserTZ)) ? timeZone.find(tz => tz.ianaName === browserTZ) : timeZone.find(tz => tz.tzIndex === '6')\r\n // const browserTZMS = timeZone && timeZone.find(tz => tz.ianaName === browserTZ)\r\n \r\n const [steps, setSteps] = useState({ \r\n step1: { title: '1. Areas of Interest', status: 'Not Started', data: [], search: [] }, \r\n step2: { title: '2. Select Psychologist', status: 'Not Started', data: {}, \r\n bookingdate: undefined, \r\n providerType : providerType, \r\n userTZ: browserTZMS && browserTZMS.systemName, \r\n userutcOffset: '', \r\n paymenttype: '', \r\n healthCareCard: '',\r\n unemployed: '',\r\n naturalDisaster: '',\r\n bulkBilledReason: '',\r\n reducedGapReason: ''\r\n }, \r\n step3: { title: '3. Registration Form', status: 'Not Started', data: {}, providerType : providerType}, \r\n step4: { title: '4. Confirmation', status: 'Not Started', data: {},providerType : providerType }, \r\n step5: { title: '4. Form Submitted', status: 'Not Started', data: {},providerType : providerType }, \r\n currentStep: 1,\r\n message: ''\r\n });\r\n\r\n const setStepValue = (value) => {\r\n setSteps({...steps, ...value})\r\n }\r\n\r\n\r\n // Check if there was an invite guid\r\n const loadInviteAOI = () => {\r\n if(invite \r\n && registered.length > 0 \r\n && invitetoken !== 'new' \r\n && invitetoken !== 'newoccupational' \r\n && invitetoken !== 'newsocial' \r\n && invitetoken !== 'newnurse' \r\n && invitetoken !== 'newsupervision' \r\n && invitetoken !== 'newprovisional' \r\n && invitetoken !== 'newfinancial' \r\n && invitetoken !== 'newgp' \r\n && invitetoken !== 'perinatal' \r\n && invitetoken !== 'lgbtiq' \r\n && invitetoken !== 'nthqldphn' \r\n && Object.keys(invite).length > 0 \r\n && !programs.find(program => program.identifier === invitetoken)\r\n && !aoiTouched)\r\n { \r\n // Determine invite providertype before reviewing aoi\r\n // console.log('Inside If')\r\n setProviderType(invite.providertype);\r\n // add aoi from invite \r\n var aoi = areasOfInterestReference.filter(( {issue} ) => invite.clientAreasOfInterest.includes(issue))\r\n var newSteps = {...steps, ...{ step1: { status: 'Completed', data: aoi, search: aoi }, currentStep: 2, message: invite.message }}\r\n // add psychologist from invite\r\n\r\n var selectedPsychologist = registered.find(row => row.id === invite.psychologistid)\r\n if (invite.psychologistid)\r\n {\r\n newSteps = {...newSteps, ...{ step2: { ...newSteps.step2, ...{ status: 'Completed', data: {...selectedPsychologist}, paymenttype: invite.paymenttype, bulkBilledReason : invite.bulkbilledreason, bookingdate: invite.bookingdate, providerType: invite.providertype,userTZ: invite.timezone }}, currentStep: selectedPsychologist && invite.bookingdate ? 3 : 2 }}\r\n }\r\n else\r\n {\r\n // Need to default payment type for GP to Bulk Billed \r\n if (invite.providertype === 'GP')\r\n {\r\n // console.log(invite)\r\n // console.log(programs)\r\n // console.log(programs.find(program => program.id === invite.programid))\r\n if (invite.programid && programs.find(program => program.id === invite.programid))\r\n {\r\n // Ok the invite token was a program identifer\r\n // console.log(invite)\r\n var program = programs.find(program => program.id === invite.programid)\r\n // find AOI issue label \r\n var aoiProgram = areasOfInterestReference.filter(aoi => aoi.id === program.aoi.toString())\r\n // console.log('Program',program.id)\r\n // console.log(aoiProgram)\r\n newSteps = {...steps, ...{ step1: { ...steps.step1, ...{ status: 'Completed', data: aoiProgram, search: aoiProgram }}, step2: { ...steps.step2, ...{ status: 'In Progress', programid: program.id, program: program.bulkbilling && program.bulkbilling === 'Y' ? true : false, fixAOI: true, data: {}, paymenttype: 'Bulk Billed', bookingdate: null, providerType: invite.providertype, userTZ: invite.timezone }}, currentStep: 2 }}\r\n // console.log('New Steps')\r\n // console.log(newSteps)\r\n } else {\r\n newSteps = {...newSteps, ...{ step2: { ...newSteps.step2, ...{ status: 'In Progress', data: {}, bookingdate: null, paymenttype: 'Bulk Billed', providerType: invite.providertype, userTZ: invite.timezone }}, currentStep: 2 }}\r\n }\r\n }\r\n else\r\n {\r\n if (invite.providertype === 'Financial')\r\n {\r\n newSteps = {...newSteps, ...{ step2: { ...newSteps.step2, ...{ status: 'In Progress', data: {}, bookingdate: null, paymenttype: 'Reduced Gap', providerType: invite.providertype, userTZ: invite.timezone }}, currentStep: 2 }}\r\n }\r\n else\r\n {\r\n if (invite.providertype === 'Provisional')\r\n {\r\n newSteps = {...newSteps, ...{ step2: { ...newSteps.step2, ...{ status: 'In Progress', data: {}, bookingdate: null, paymenttype: 'Provisional', providerType: invite.providertype, userTZ: invite.timezone }}, currentStep: 2 }}\r\n }\r\n else\r\n {\r\n if (invite.providertype === 'Social')\r\n {\r\n // Check to see if any AOI have been selected \r\n if (aoi && aoi.length > 0)\r\n {\r\n // AOI found in invite\r\n newSteps = {...newSteps, ...{ step2: { ...newSteps.step2, ...{ status: 'In Progress', data: {}, bookingdate: null, paymenttype: invite.paymenttype, bulkBilledReason : invite.bulkbilledreason, providerType: invite.providertype, userTZ: invite.timezone }}, currentStep: 2 }}\r\n }\r\n else\r\n {\r\n // No AOI found in invite\r\n newSteps = {...steps, ...{ step1: { ...steps.step1, ...{ status: 'Not Started', data: [], search: [] }}, step2: { ...steps.step2, ...{ status: 'Not Started', data: {}, bookingdate: null, paymenttype: invite.paymenttype, bulkBilledReason : invite.bulkbilledreason, providerType: invite.providertype, userTZ: invite.timezone }}, currentStep: 1 }}\r\n }\r\n // newSteps = {...newSteps, ...{ step2: { ...newSteps.step2, ...{ status: 'In Progress', data: {}, bookingdate: null, paymenttype: invite.paymenttype, providerType: invite.providertype, userTZ: invite.timezone }}, currentStep: 1 }}\r\n }\r\n else\r\n {\r\n if (invite.providertype === 'Occupational')\r\n {\r\n // Check to see if any AOI have been selected \r\n if (aoi && aoi.length > 0)\r\n {\r\n // AOI found in invite\r\n newSteps = {...newSteps, ...{ step2: { ...newSteps.step2, ...{ status: 'In Progress', data: {}, bookingdate: null, paymenttype: invite.paymenttype, bulkBilledReason : invite.bulkbilledreason, providerType: invite.providertype, userTZ: invite.timezone }}, currentStep: 2 }}\r\n }\r\n else\r\n {\r\n // No AOI found in invite\r\n newSteps = {...steps, ...{ step1: { ...steps.step1, ...{ status: 'Not Started', data: [], search: [] }}, step2: { ...steps.step2, ...{ status: 'Not Started', data: {}, bookingdate: null, paymenttype: invite.paymenttype, bulkBilledReason : invite.bulkbilledreason, providerType: invite.providertype, userTZ: invite.timezone }}, currentStep: 1 }}\r\n }\r\n // newSteps = {...newSteps, ...{ step2: { ...newSteps.step2, ...{ status: 'In Progress', data: {}, bookingdate: null, paymenttype: invite.paymenttype, providerType: invite.providertype, userTZ: invite.timezone }}, currentStep: 1 }}\r\n }\r\n else\r\n {\r\n if (invite.providertype === 'Nurse')\r\n {\r\n // Check to see if any AOI have been selected \r\n if (aoi && aoi.length > 0)\r\n {\r\n // AOI found in invite\r\n newSteps = {...newSteps, ...{ step2: { ...newSteps.step2, ...{ status: 'In Progress', data: {}, bookingdate: null, paymenttype: invite.paymenttype, bulkBilledReason : invite.bulkbilledreason, providerType: invite.providertype, userTZ: invite.timezone }}, currentStep: 2 }}\r\n }\r\n else\r\n {\r\n // No AOI found in invite\r\n newSteps = {...steps, ...{ step1: { ...steps.step1, ...{ status: 'Not Started', data: [], search: [] }}, step2: { ...steps.step2, ...{ status: 'Not Started', data: {}, bookingdate: null, paymenttype: invite.paymenttype, bulkBilledReason : invite.bulkbilledreason, providerType: invite.providertype, userTZ: invite.timezone }}, currentStep: 1 }}\r\n }\r\n // newSteps = {...newSteps, ...{ step2: { ...newSteps.step2, ...{ status: 'In Progress', data: {}, bookingdate: null, paymenttype: invite.paymenttype, providerType: invite.providertype, userTZ: invite.timezone }}, currentStep: 1 }}\r\n }\r\n else\r\n {\r\n if (invite.providertype === 'NDIS')\r\n {\r\n newSteps = {...newSteps, ...{ step2: { ...steps.step2, ...{ status: 'Completed', data: {}, paymenttype: 'NDIS', bookingdate: null, providerType: 'NDIS', userTZ: browserTZMS.systemName }}, currentStep: 3 }}\r\n }\r\n else\r\n {\r\n if (invite.providertype === 'Supervision')\r\n {\r\n newSteps = {...newSteps, ...{ step2: { ...newSteps.step2, ...{ status: 'In Progress', data: {}, bookingdate: null, paymenttype: 'Supervision', providerType: invite.providertype, userTZ: invite.timezone }}, currentStep: 2 }}\r\n }\r\n else\r\n {\r\n // console.log(invite)\r\n // console.log(programs)\r\n // console.log(programs.find(program => program.id === invite.programid))\r\n if (invite.programid && programs.find(program => program.id === invite.programid))\r\n {\r\n // Ok the invite token was a program identifer\r\n // console.log(invite)\r\n var program = programs.find(program => program.id === invite.programid)\r\n // find AOI issue label \r\n var aoiProgram = areasOfInterestReference.filter(aoi => aoi.id === program.aoi.toString())\r\n // console.log('Program',program.id)\r\n // console.log(aoiProgram)\r\n newSteps = {...steps, ...{ step1: { ...steps.step1, ...{ status: 'Completed', data: aoiProgram, search: aoiProgram }}, step2: { ...steps.step2, ...{ status: 'In Progress', programid: program.id, program: program.bulkbilling && program.bulkbilling === 'Y' ? true : false, paymenttype: 'Bulk Billed', fixAOI: true, data: {}, bookingdate: null, providerType: 'Psychologist', userTZ: invite.timezone }}, currentStep: 2 }}\r\n // console.log('New Steps')\r\n // console.log(newSteps)\r\n }\r\n else\r\n {\r\n // Check to see if any AOI have been selected \r\n if (aoi && aoi.length > 0)\r\n {\r\n // console.log('AOI Set')\r\n // AOI found in invite\r\n newSteps = {...newSteps, ...{ step2: { ...newSteps.step2, ...{ status: 'In Progress', data: {}, bookingdate: null, paymenttype: invite.paymenttype, bulkBilledReason : invite.bulkbilledreason, providerType: invite.providertype, userTZ: invite.timezone }}, currentStep: 2 }}\r\n }\r\n else\r\n {\r\n // console.log('AOI Not Set')\r\n // No AOI found in invite\r\n // newSteps = {...newSteps, ...{ step1: { ...newSteps.step1, ...{ status: 'Not Started', data: [], search: [], bookingdate: null, paymenttype: invite.paymenttype, providerType: invite.providertype, userTZ: invite.timezone }}, currentStep: 1 }}\r\n newSteps = {...steps, ...{ step1: { ...steps.step1, ...{ status: 'Not Started', data: [], search: [] }}, step2: { ...steps.step2, ...{ status: 'Not Started', data: {}, bookingdate: null, paymenttype: invite.paymenttype, bulkBilledReason : invite.bulkbilledreason, providerType: invite.providertype, userTZ: invite.timezone }}, currentStep: 1 }}\r\n // newSteps = {...newSteps, ...{ step2: { ...newSteps.step2, ...{ status: 'Not Started', data: {}, bookingdate: null, paymenttype: invite.paymenttype, bulkBilledReason : invite.bulkbilledreason, providerType: invite.providertype, userTZ: invite.timezone }} }} \r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n setStepValue(newSteps)\r\n setaoiTouched(true)\r\n } \r\n else\r\n {\r\n // Ok Non Invite\r\n // Handle non invite GP\r\n if (invitetoken && invitetoken === 'newgp' && !aoiTouched && browserTZMS)\r\n {\r\n setProviderType('GP')\r\n var gpNewSteps = ({ \r\n step1: { status: 'Completed', data: [], search: [] }, \r\n step2: { ...steps.step2, ...{ title: '2. Select GP', status: 'Not Started', data: {}, bookingdate: undefined,providerType: 'GP', paymenttype : 'Bulk Billed', userTZ: browserTZMS.systemName, userutcOffset: '' }}\r\n })\r\n // Set the step to step 2\r\n gpNewSteps = {...gpNewSteps, currentStep: 2 }\r\n setStepValue(gpNewSteps)\r\n setaoiTouched(true)\r\n }\r\n // Handle non invite Supervision\r\n if (invitetoken && invitetoken === 'newsupervision' && !aoiTouched && browserTZMS)\r\n {\r\n setProviderType('Supervision')\r\n var supervisionNewSteps = ({ \r\n step1: { status: 'Completed', data: [], search: [] }, \r\n step2: { ...steps.step2, ...{ title: '2. Select Supervising Psychologist', status: 'Not Started', data: {}, bookingdate: undefined,providerType: 'Supervision', paymenttype : 'Supervision', userTZ: browserTZMS.systemName, userutcOffset: '' }}\r\n })\r\n // Set the step to step 2\r\n supervisionNewSteps = {...supervisionNewSteps, currentStep: 2 }\r\n setStepValue(supervisionNewSteps)\r\n setaoiTouched(true)\r\n }\r\n // Handle non invite Provisional\r\n if (invitetoken && invitetoken === 'newprovisional' && !aoiTouched && browserTZMS)\r\n {\r\n setProviderType('Provisional')\r\n var provisionalNewSteps = ({ \r\n step1: { status: 'Completed', data: [], search: [] }, \r\n step2: { ...steps.step2, ...{ title: '2. Select Provisional Psychologist', status: 'Not Started', data: {}, bookingdate: undefined,providerType: 'Provisional', paymenttype : 'Provisional', userTZ: browserTZMS.systemName, userutcOffset: '' }}\r\n })\r\n // Set the step to step 2\r\n provisionalNewSteps = {...provisionalNewSteps, currentStep: 2 }\r\n setStepValue(provisionalNewSteps)\r\n setaoiTouched(true)\r\n }\r\n // Handle non invite Social\r\n if (invitetoken && invitetoken === 'newsocial' && !aoiTouched && browserTZMS)\r\n {\r\n setProviderType('Social')\r\n var socialNewSteps = ({ \r\n step1: { ...steps.step1, ...{ status: 'Not Started', data: [], search: [] }}, \r\n step2: { ...steps.step2, ...{ title: '2. Select MH Social Worker', status: 'Not Started', data: {}, bookingdate: undefined,providerType: 'Social', paymenttype : null, userTZ: browserTZMS.systemName, userutcOffset: '' }}\r\n })\r\n // Set the step to step 2\r\n socialNewSteps = {...socialNewSteps, currentStep: 1 }\r\n setStepValue(socialNewSteps)\r\n setaoiTouched(true)\r\n }\r\n // Handle non invite Nurse\r\n if (invitetoken && invitetoken === 'newnurse' && !aoiTouched && browserTZMS)\r\n {\r\n setProviderType('Nurse')\r\n var nurseNewSteps = ({ \r\n step1: { ...steps.step1, ...{ status: 'Not Started', data: [], search: [] }}, \r\n step2: { ...steps.step2, ...{ title: '2. Select Mental Health Nurse', status: 'Not Started', data: {}, bookingdate: undefined,providerType: 'Nurse', paymenttype : null, userTZ: browserTZMS.systemName, userutcOffset: '' }}\r\n })\r\n // Set the step to step 2\r\n nurseNewSteps = {...nurseNewSteps, currentStep: 1 }\r\n setStepValue(nurseNewSteps)\r\n setaoiTouched(true)\r\n }\r\n // Handle non invite Occupational\r\n if (invitetoken && invitetoken === 'newoccupational' && !aoiTouched && browserTZMS)\r\n {\r\n setProviderType('Occupational')\r\n var occupationalNewSteps = ({ \r\n step1: { ...steps.step1, ...{ status: 'Not Started', data: [], search: [] }}, \r\n step2: { ...steps.step2, ...{ title: '2. Select Occupational Therapist', status: 'Not Started', data: {}, bookingdate: undefined,providerType: 'Occupational', paymenttype : null, userTZ: browserTZMS.systemName, userutcOffset: '' }}\r\n })\r\n // Set the step to step 2\r\n occupationalNewSteps = {...occupationalNewSteps, currentStep: 1 }\r\n setStepValue(occupationalNewSteps)\r\n setaoiTouched(true)\r\n }\r\n // Handle non invite NthQLDPHN\r\n if (invitetoken && invitetoken === 'nthqldphn' && !aoiTouched && browserTZMS)\r\n {\r\n setProviderType('NthQLDPHN')\r\n var nthqldphnNewSteps = ({ \r\n step1: { ...steps.step1, ...{ status: 'Not Started', data: [], search: [] }}, \r\n step2: { ...steps.step2, ...{ title: '2. Select Provider', status: 'Not Started', data: {}, bookingdate: undefined, providerType: 'NthQLDPHN', paymenttype : 'Contract', userTZ: browserTZMS.systemName, userutcOffset: '' }}\r\n })\r\n // Set the step to step 2\r\n nthqldphnNewSteps = {...nthqldphnNewSteps, currentStep: 1 }\r\n setStepValue(nthqldphnNewSteps)\r\n setaoiTouched(true)\r\n }\r\n }\r\n // Handle LGBTIQ\r\n if (invitetoken && invitetoken === 'lgbtiq' && !aoiTouched && registered.length > 0)\r\n {\r\n // This simply pre populates the AOI for LGBTIQ \r\n var lgbtiqAoi = areasOfInterestReference.filter(area => area.issue === 'LGBTIQA+')\r\n var lgbtiqNewSteps = {...steps, ...{ step1: { ...steps.step1, ...{ status: 'In Progress', data: lgbtiqAoi, search: lgbtiqAoi }}, currentStep: 1 }}\r\n setStepValue(lgbtiqNewSteps)\r\n setaoiTouched(true)\r\n }\r\n // Handle PeriNatal \r\n if (invitetoken && invitetoken === 'perinatal' && !aoiTouched && registered.length > 0)\r\n {\r\n // This simply pre populates the AOI for PeriNatal\r\n var periNatalAoi = areasOfInterestReference.filter(area => area.issue === 'Perinatal Depression and Anxiety')\r\n var periNatalNewSteps = {...steps, ...{ step1: { ...steps.step1, ...{ status: 'In Progress', data: periNatalAoi, search: periNatalAoi }}, currentStep: 1 }}\r\n setStepValue(periNatalNewSteps)\r\n setaoiTouched(true)\r\n }\r\n // Handle EAP \r\n if (props.type && props.type ==='EAP' && !aoiTouched && browserTZMS)\r\n {\r\n // Ok this will be exciting \r\n // EAP clients access simply using a URL - they do not choose AOI though now choose a Psychologist (with all AOI) - this is all handled manually by Admin \r\n // \r\n setProviderType('EAP')\r\n var eapNewSteps = {...steps, ...{ step2: { ...steps.step2, ...{ status: 'Not Started', data: {}, paymenttype: 'EAP', bookingdate: null, providerType: 'EAP', userTZ: browserTZMS.systemName }}, currentStep: 2 }}\r\n // Ok all done - lets go\r\n setStepValue(eapNewSteps)\r\n setaoiTouched(true)\r\n }\r\n // Handle NDIS \r\n if (props.type && props.type ==='NDIS' && !aoiTouched && browserTZMS)\r\n {\r\n // Ok this will be exciting \r\n // NDIS clients access simply using a URL - they do not choose AOI or a Psychologist - this is all handled manually by Admin \r\n // \r\n setProviderType('NDIS')\r\n var ndisNewSteps = {...steps, ...{ step2: { ...steps.step2, ...{ status: 'Completed', data: {}, paymenttype: 'NDIS', bookingdate: null, providerType: 'NDIS', userTZ: browserTZMS.systemName }}, currentStep: 3 }}\r\n // Ok all done - lets go\r\n setStepValue(ndisNewSteps)\r\n setaoiTouched(true)\r\n }\r\n // Handle Program \r\n if (invitetoken && programs.find(program => program.identifier === invitetoken) && !aoiTouched && browserTZMS && areasOfInterestReference && areasOfInterestReference.length > 0)\r\n {\r\n // Ok the invite token was a program identifer\r\n var programNI = programs.find(program => program.identifier === invitetoken)\r\n // find AOI issue label \r\n var aoiProgramNI = areasOfInterestReference.filter(aoi => aoi.id === programNI.aoi.toString())\r\n console.log('ProgramNI',programNI.id)\r\n var programNewSteps = {...steps, ...{ step1: { ...steps.step1, ...{ status: 'Completed', data: aoiProgramNI, search: aoiProgramNI }}, step2: { ...steps.step2, ...{ status: 'In Progress', programid: programNI.id, program: programNI.bulkbilling && programNI.bulkbilling === 'Y' ? true : false, fixAOI: true, data: {}, bookingdate: null, providerType: 'Psychologist', userTZ: browserTZMS.systemName }}, currentStep: 2 }}\r\n setStepValue(programNewSteps)\r\n setaoiTouched(true)\r\n }\r\n }\r\n // when the invite is converted to a client, show the confirmation message and link to the login page\r\n // Old test for registration completed - left people hanging if APi errored ((regstatus.form === 'client' && regstatus.status === 'Success' && regstatus.newID) || (invite && invite.hasOwnProperty('clientid') && invite.clientid))\r\n switch(steps.currentStep) {\r\n case 1:\r\n return(\r\n <PageWrapper setStepValue={setStepValue} steps={steps} providerType={providerType}>\r\n <AreasOfInterest setStepValue={setStepValue} steps={steps} setaoiTouched={setaoiTouched} providerType={providerType} userTZ={browserTZMS} contract={(invite && invite.contract) || providerType === 'NthQLDPHN'}/>\r\n </PageWrapper>\r\n );\r\n case 2:\r\n return(\r\n <PageWrapper setStepValue={setStepValue} steps={steps} providerType={providerType} userTZ={browserTZMS} contract={(invite && invite.contract) || providerType === 'NthQLDPHN'}>\r\n <SelectPsychologist setStepValue={setStepValue} steps={steps} userTZ={browserTZMS} />\r\n </PageWrapper>\r\n );\r\n case 3:\r\n return (\r\n <PageWrapper setStepValue={setStepValue} steps={steps} providerType={providerType} contract={(invite && invite.contract) || providerType === 'NthQLDPHN'}>\r\n {(steps.step2.data.id && steps.step2.data.id > 0 && (steps.step1.data.length > 0 || providerType === 'GP' || providerType === 'Supervision' || providerType === 'Provisional') && steps.step2.userTZ && steps.step2.userTZ.length > 0 && steps.step2.bookingdate && steps.step2.bookingdate.length > 0) || (providerType === 'EAP') || (providerType === 'NDIS') ?\r\n <ClientRegistrationForm setStepValue={setStepValue} steps={steps} providerType={providerType}/>\r\n :\r\n <ClientRegistrationNotReady setStepValue={setStepValue} steps={steps} providerType={providerType} />\r\n }\r\n </PageWrapper>\r\n )\r\n case 4:\r\n return (\r\n <PageWrapper setStepValue={setStepValue} steps={steps} providerType={providerType}>\r\n <ClientRegistrationConfirmation steps={steps} providerType={providerType} />\r\n </PageWrapper>\r\n )\r\n case 5:\r\n return (\r\n <PageWrapper setStepValue={setStepValue} steps={steps} providerType={providerType}>\r\n <ClientSupportFormConfirmation steps={steps} providerType={providerType} />\r\n </PageWrapper>\r\n )\r\n \r\n default: \r\n return 'Default';\r\n }\r\n}\r\n\r\nfunction AreasOfInterest (props) {\r\n \r\n const useStyles = makeStyles((theme) => ({\r\n root: {\r\n width: '100%',\r\n maxWidth: 340,\r\n backgroundColor: theme.palette.background.paper,\r\n paddingRight: 20,\r\n marginTop: 14,\r\n marginLeft: 20\r\n },\r\n linkItem: {\r\n minWidth: 50,\r\n },\r\n link: {\r\n color: 'rgba(0,0,0,0.7)',\r\n fontSize: 12,\r\n fontWeight: 400,\r\n },\r\n linkSelected: {\r\n color: 'rgba(0,0,0,1)',\r\n fontSize: 12,\r\n fontWeight: 600,\r\n },\r\n }));\r\n\r\n const classes = useStyles()\r\n const dispatch = useDispatch()\r\n const areasOfInterestReference = useSelector(state => state.reference.AreasOfInterest)\r\n \r\n\r\n // Setup variables for Psychology and Financial Areas of Interest (note GP's do not have areas of interest)\r\n const PsychologyAreasOfInterest = areasOfInterestReference.filter(area => area.providertype === 'Psychologist')\r\n const FinancialAreasOfInterest = areasOfInterestReference.filter(area => area.providertype === 'Financial')\r\n const ProvisionalAreasOfInterest = areasOfInterestReference.filter(area => (area.issue === 'Anxiety' || area.issue === 'Depression' || area.issue === 'Grief'))\r\n const aoi_focus = PsychologyAreasOfInterest.filter(aoi => aoi.focusAreaIndex !== null).length\r\n const aoi_other = PsychologyAreasOfInterest.filter(aoi => aoi.focusAreaIndex === null).length\r\n const invite = useSelector(state => state.registration.ClientInvite) \r\n const [checked, setChecked] = useState([...props.steps.step1.data])\r\n const programs = useSelector(state => state.admin.Programs)\r\n\r\n useEffect( () => { \r\n setChecked(props.steps.step1.data);\r\n }, [setChecked, props.steps.step1.data] )\r\n\r\n const handleToggle = (value) => () => {\r\n const currentIndex = getIndex(value.id, checked, 'id') //checked.find(r => r.id === value.id);\r\n const newChecked = [...checked];\r\n if (currentIndex === -1) {\r\n newChecked.push(value);\r\n } else {\r\n newChecked.splice(currentIndex, 1);\r\n }\r\n setChecked(newChecked);\r\n };\r\n\r\n const submitAOI = () => {\r\n props.setaoiTouched(true)\r\n // Set Title\r\n let title = '';\r\n let paymentTypeSelect = '';\r\n switch(props.providerType)\r\n {\r\n case 'Clinical':\r\n case 'Psychologist':\r\n title = '2. Select Psychologist';\r\n // paymentTypeSelect = 'Reduced Gap';\r\n break;\r\n case 'Provisional':\r\n title = '2. Select Provisional Psychologist';\r\n paymentTypeSelect = 'Provisional';\r\n break;\r\n case 'Financial':\r\n title = '2. Select Financial Counsellor';\r\n paymentTypeSelect = 'Reduced Gap';\r\n break;\r\n case 'GP':\r\n title = '2. Select GP';\r\n break;\r\n case 'Social':\r\n title = '2. Select MH Social Worker';\r\n // paymentTypeSelect = 'Reduced Gap';\r\n break;\r\n case 'Nurse':\r\n title = '2. Select Mental Health Nurse';\r\n // paymentTypeSelect = 'Reduced Gap';\r\n break;\r\n case 'Occupational':\r\n title = '2. Select Occupational Therapist';\r\n // paymentTypeSelect = 'Reduced Gap';\r\n break;\r\n case 'Supervision':\r\n title = '2. Select Supervising Psychologist';\r\n break;\r\n case 'NthQLDPHN':\r\n title = '2. Select Provider';\r\n paymentTypeSelect = 'Contract';\r\n break;\r\n default:\r\n title = '2. Select Provider';\r\n break;\r\n }\r\n\r\n // Megan has requested any one who ticks 'Perinatal Grief and Loss' is only shown those providers specialising in that AOI (i.e. program)\r\n // All very hardcoded\r\n // Thus the code below \r\n var specialAOI = checked.filter(aoi => aoi.issue === 'Perinatal Grief and Loss')\r\n if (specialAOI && specialAOI.length > 0)\r\n {\r\n // Ok we found one - lets use that\r\n // Need to get the program information \r\n console.log('Special AOI')\r\n // console.log(specialAOI[0].id)\r\n // console.log('Programs')\r\n // console.log(programs)\r\n var programClientSelect = programs.find(program => program.aoi.toString() === specialAOI[0].id)\r\n props.setStepValue({ \r\n step1: { status: 'Completed', data: [...specialAOI], search: [...specialAOI] }, \r\n step2: { ...props.steps.step2, ...{ title: title, status: 'Not Started', programid: programClientSelect.id, program: programClientSelect.bulkbilling && programClientSelect.bulkbilling === 'Y' ? true : false, fixAOI: true, data: {}, bookingdate: undefined,providerType: props.providerType, paymenttype : 'Bulk Billed' } }, currentStep: 2 }, )\r\n // Need to get a new list of providers with the program selected \r\n dispatch(Registration.actions.fetchRegisteredPublic({ inviteToken: 'pgnl', providerType : props.providerType}))\r\n }\r\n else\r\n {\r\n props.setStepValue({ \r\n step1: { status: 'Completed', data: [...checked], search: [...checked] }, \r\n step2: { ...props.steps.step2, ...{ title: title, status: 'Not Started', data: {}, bookingdate: undefined,providerType: props.providerType, paymenttype : paymentTypeSelect } }, currentStep: 2 }, )\r\n }\r\n }\r\n\r\n function getIndex(value, arr, prop) {\r\n for(var i = 0; i < arr.length; i++) {\r\n if(arr[i][prop] === value) {\r\n return i;\r\n }\r\n }\r\n return -1; // where the value doesn't exist\r\n }\r\n\r\n return(\r\n\r\n <Paper style={{ backgroundColor: \"rgb(245,245,245)\", padding: 20 }} >\r\n {props.providerType && (props.providerType === 'ALL' || props.providerType === 'NthQLDPHN' || props.providerType === 'Psychologist' || props.providerType === 'Clinical' || props.providerType === 'Occupational' || props.providerType === 'Supervision' || props.providerType === 'Nurse' || props.providerType === 'Social') ?\r\n <>\r\n <Row>\r\n <Col md=\"12\">\r\n <h2>1. Areas of Interest</h2>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\"> \r\n {props.steps.message ? (\r\n <Alert severity=\"info\" style={{ marginBottom: 10, marginTop: 8, fontSize: 14 }}>\r\n {props.steps.message}\r\n </Alert>) \r\n : null\r\n }\r\n </Col>\r\n </Row>\r\n\r\n {!invite || (invite && invite.contractid !== 11) ?\r\n <Row> \r\n <Alert severity=\"info\" style={{ marginBottom: 10, marginTop: 8, fontSize: 14 }}> \r\n <p>If you want to claim your sessions on Medicare you will need a mental health treatment plan from your GP. You can download a flyer with our referral information to show your GP <a href={`https://ruralhealthconnect.com.au/assets/RHC-client-flyer-V02.pdf`} target=\"ClientGPInformation\" style={{ textDecoration: 'underline' }}>here.</a></p>\r\n </Alert>\r\n </Row> \r\n :\r\n null\r\n }\r\n\r\n <hr style={{ marginTop: 4 }}></hr>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>\r\n Please choose up to four areas that you are wanting to work on:\r\n </Form.Label>\r\n \r\n <Grid container style={{ backgroundColor: \"rgba(255,255,255,1)\", marginTop: 20, paddingBottom: 15 }}>\r\n {/* Column 1 */}\r\n <Grid item md={6} xs={12}> \r\n <List className={classes.root}>\r\n {PsychologyAreasOfInterest.filter(aoi => aoi.psychologistsCount > 0).map(row => {\r\n if(row.focusAreaIndex !== null && row.focusAreaIndex <= aoi_focus/2){\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = checked.find(r => r.id === row.id);\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleToggle(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Grid>\r\n\r\n {/* Column 2 */}\r\n <Grid item md={6} xs={12}> \r\n <List className={classes.root}>\r\n {PsychologyAreasOfInterest.filter(aoi => aoi.psychologistsCount > 0).map(row => {\r\n if(row.focusAreaIndex !== null && row.focusAreaIndex > aoi_focus/2){\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = checked.find(r => r.id === row.id);\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleToggle(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Grid>\r\n </Grid>\r\n\r\n <Form.Label style={{ marginTop: 20 }}>\r\n Rural Health Connect is part of programs supporting key areas of need. Please tick any that apply to you.\r\n </Form.Label>\r\n\r\n <Grid container style={{ backgroundColor: \"rgba(255,255,255,1)\", marginTop: 20, paddingBottom: 15 }}>\r\n {/* Column 1 */}\r\n <Grid item md={6} xs={12}> \r\n <List className={classes.root}>\r\n {PsychologyAreasOfInterest.filter(aoi => aoi.psychologistsCount > 0).map(row => {\r\n if(row.focusAreaIndex === null && row.index <= aoi_other/2){\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = checked.find(r => r.id === row.id);\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleToggle(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Grid>\r\n\r\n {/* Column 2 */}\r\n <Grid item md={6} xs={12}> \r\n <List className={classes.root}>\r\n {PsychologyAreasOfInterest.filter(aoi => aoi.psychologistsCount > 0).map(row => {\r\n if(row.focusAreaIndex === null && row.index > aoi_other/2){\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = checked.find(r => r.id === row.id);\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleToggle(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Grid>\r\n </Grid>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n <>\r\n {props.providerType && props.providerType === 'Provisional' ?\r\n <>\r\n <Row>\r\n <Col md=\"12\">\r\n <h2>1. Areas of Interest</h2>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\"> \r\n {props.steps.message ? (\r\n <Alert severity=\"info\" style={{ marginBottom: 10, marginTop: 8, fontSize: 14 }}>\r\n {props.steps.message}\r\n </Alert>) \r\n : null\r\n }\r\n </Col>\r\n </Row> \r\n <hr style={{ marginTop: 4 }}></hr>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>\r\n Please tell us if you are part of any of these key target groups for our support, and then nominate what you are wanting to work on, below:\r\n </Form.Label>\r\n \r\n <Grid container style={{ backgroundColor: \"rgba(255,255,255,1)\", marginTop: 20, paddingBottom: 15 }}>\r\n {/* Column 1 */}\r\n <Grid item md={6} xs={12}> \r\n <List className={classes.root}>\r\n {ProvisionalAreasOfInterest.filter(aoi => aoi.psychologistsCount > 0).map(row => {\r\n if(row.focusAreaIndex !== null && row.focusAreaIndex <= aoi_focus/2){\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = checked.find(r => r.id === row.id);\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleToggle(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Grid>\r\n\r\n {/* Column 2 */}\r\n <Grid item md={6} xs={12}> \r\n <List className={classes.root}>\r\n {ProvisionalAreasOfInterest.filter(aoi => aoi.psychologistsCount > 0).map(row => {\r\n if(row.focusAreaIndex !== null && row.focusAreaIndex > aoi_focus/2){\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = checked.find(r => r.id === row.id);\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleToggle(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid container style={{ backgroundColor: \"rgba(255,255,255,1)\", marginTop: 20, paddingBottom: 15 }}>\r\n {/* Column 1 */}\r\n <Grid item md={6} xs={12}> \r\n <List className={classes.root}>\r\n {ProvisionalAreasOfInterest.filter(aoi => aoi.psychologistsCount > 0).map(row => {\r\n if(row.focusAreaIndex === null && row.index <= aoi_other/2){\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = checked.find(r => r.id === row.id);\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleToggle(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Grid>\r\n\r\n {/* Column 2 */}\r\n <Grid item md={6} xs={12}> \r\n <List className={classes.root}>\r\n {ProvisionalAreasOfInterest.filter(aoi => aoi.psychologistsCount > 0).map(row => {\r\n if(row.focusAreaIndex === null && row.index > aoi_other/2){\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = checked.find(r => r.id === row.id);\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleToggle(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Grid>\r\n </Grid>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n <>\r\n <Row>\r\n <Col md=\"12\">\r\n <h2>1. Locations</h2>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\"> \r\n <Alert severity=\"info\" style={{ marginBottom: 10, marginTop: 8, fontSize: 14 }}>\r\n <p>This is currently a pilot covering Southern Queensland, Gippsland and North East Victoria only as part of bushfire recovery efforts, it is open to any resident in these regions. If you are outside these areas and would like to speak to a financial counsellor please call 1300 771 741.</p>\r\n <p>Sessions are free of charge and are funded by the Commonwealth Department of Agriculture and the Victorian and Queensland Governments.</p> \r\n <p>There are different financial counsellors for people in different situations: \"<strong>Primary Producer</strong>\" counselling is for farmers, \"<strong>Small Business</strong>\" counselling is for small business operations and \"<strong>Individual</strong>\" is for people wanting help with their personal finances.</p> \r\n <p>Please choose the option and location right for you.</p>\r\n </Alert> \r\n </Col>\r\n </Row>\r\n <hr style={{ marginTop: 4 }}></hr>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>\r\n Please select the type of counsellor and the location that is right for you.\r\n </Form.Label>\r\n\r\n <Grid container style={{ backgroundColor: \"rgba(255,255,255,1)\", marginTop: 20, paddingBottom: 15 }}>\r\n {/* Column 1 */}\r\n <Grid item md={6} xs={12}> \r\n <List className={classes.root}>\r\n {FinancialAreasOfInterest.filter(aoi => aoi.psychologistsCount > 0).map(row => {\r\n if(row.index <= aoi_other/2){\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = checked.find(r => r.id === row.id);\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleToggle(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Grid>\r\n\r\n {/* Column 2 */}\r\n <Grid item md={6} xs={12}> \r\n <List className={classes.root}>\r\n {FinancialAreasOfInterest.filter(aoi => aoi.psychologistsCount > 0).map(row => {\r\n if(row.index > aoi_other/2){\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = checked.find(r => r.id === row.id);\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleToggle(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Grid>\r\n </Grid>\r\n\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n }\r\n </>\r\n }\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item md={3} xs={6}>\r\n \r\n </Grid>\r\n <Grid item md={2} xs={6} style={{ textAlign: \"right\"}}>\r\n <Button variant=\"primary\" type=\"submit\" onClick={() => submitAOI()}>\r\n Save & Next >\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n </Paper>\r\n\r\n )\r\n}\r\n\r\nfunction SelectPsychologist (props) {\r\n\r\n const dispatch = useDispatch()\r\n const { invitetoken } = useParams();\r\n const registered = useSelector(state => state.registration.Registered);\r\n const registeredFetch = useSelector(state => state.registration.RegisteredFetch);\r\n const matchingAvailability = useSelector(state => state.registration.MatchingAvailability)\r\n const timeZone = useSelector(state => state.reference.TimeZone)\r\n const invite = useSelector(state => state.registration.ClientInvite) \r\n const searchAOI = [...props.steps.step1.search];\r\n const filters = useSelector(state => state.admin.Filters)\r\n var [programBulkBilling] = useState(props.steps.step2.program)\r\n var [programid] = useState(props.steps.step2.programid)\r\n var [currentTimeZone, setcurrentTimeZone] = useState(props.steps.step2.userTZ ? props.steps.step2.userTZ : props.userTZ && props.userTZ.systemName); \r\n var [currentPsychologist, setcurrentPsychologist] = useState({...props.steps.step2.data});\r\n var [showNewBooking, setShowNewBooking] = useState(false);\r\n var [currentbookingdate, setcurrentbookingdate] = useState(props.steps.step2.bookingdate);\r\n var [showpopoverTimeZone, setshowpopoverTimeZone] = useState(!props.steps.step2.userTZ)\r\n // Need to ensure only providers who have Children (under 12) and Adolescents (13-17) AOI are shown - no one else so setting a flag to do this\r\n const childModeAOI = ['Children (under 12)','Adolescents (13-17)']\r\n var [childMode, setChildMode] = useState(props.steps.step1.data && props.steps.step1.data.filter(aoi => childModeAOI.includes(aoi.issue)).length > 0 ? true : false)\r\n // var [bookingConfirmed, setbookingConfirmed] = useState(!!props.steps.step2.bookingdate);\r\n const supervisionAreas = useSelector(state => state.reference.SupervisionAreas).filter(sa => sa.providertype === 'Psychologist')\r\n const endorsedSupervisionAreas = useSelector(state => state.reference.SupervisionAreas).filter(sa => sa.providertype === 'Psychologist-Endorsed')\r\n var [providerType] = useState(props.steps.step2.providerType)\r\n const [previousPaymentType,setPreviousPaymentType] = useState('')\r\n const [previousReducedGapReason,setPreviousReducedGapReason] = useState('')\r\n const [previousBulkBilledReason,setPreviousBulkBilledReason] = useState('')\r\n // const [displayContactForm,setDisplayContactForm] = useState(false);\r\n const [displayNoProvisionalMessage,setDisplayNoProvisionalMessage] = useState(false);\r\n const [expanded, setExpanded] = useState(0)\r\n const [showProviderBio,setShowProviderBio] = useState(false)\r\n const [providerBioFullName,setProviderBioFullName] = useState()\r\n const [providerBioBio,setProviderBioBio] = useState()\r\n const [showMoreProviders, setShowMoreProviders] = useState(false)\r\n\r\n\r\n // now init the fields with values so that Formik can manage the touched state\r\n const clientInit = {\r\n firstname: '', \r\n preferredname: '',\r\n surname: '', \r\n email: '', \r\n phone: '',\r\n clientFundingTypeID: 1,\r\n dob: undefined,\r\n gender: '',\r\n occupation: '',\r\n fulladdress: '',\r\n latitude: '',\r\n longitude: '',\r\n postcode: '',\r\n timezone: props.steps.step2.userTZ,\r\n clientAreasOfInterest: [...props.steps.step1.data],\r\n hopeToGetFromTreatment: '',\r\n emergencycontactname1: '',\r\n emergencycontactphone1: '',\r\n emergencycontactrelation1: '',\r\n emergencycontactname2: '',\r\n emergencycontactphone2: '',\r\n emergencycontactrelation2: '',\r\n profilePassword: '',\r\n profilePasswordConfirmation: '',\r\n medicareno: '',\r\n medicarereferenceno: '',\r\n medicareexpirydate: '',\r\n appointmenttype: '0',\r\n MHCPFile: '',\r\n invitetoken: invitetoken,\r\n agreementAcceptance:false,\r\n clientid : null,\r\n paymenttype: invitetoken && invitetoken.paymenttype ? invitetoken.paymenttype : '',\r\n privateClient: false,\r\n referrerid: null,\r\n abn : '',\r\n businessName : '',\r\n businessAddress : '',\r\n backgroundinformation : '',\r\n gpname : '',\r\n gpmentalhealthplan12months: 'N/A',\r\n gpclinicname: '',\r\n healthCareCard: invitetoken && invitetoken.paymenttype === 'Bulk Billed' ? 'Y' : '',\r\n unemployed: 'NA',\r\n naturalDisaster: 'NA',\r\n bulkBilledReason: '',\r\n contract: false,\r\n providerType: props.providerType,\r\n locality: '',\r\n programid: 0,\r\n\r\n }\r\n\r\n const handleExpandClick = (id) => {\r\n if(id === expanded) {\r\n setExpanded(0)\r\n } else {\r\n setExpanded(id);\r\n }\r\n };\r\n\r\n // const handleExpandPricingDetailClick = (id) => {\r\n // if(id === expandPricingDetail) {\r\n // setExpandPricingDetail(0)\r\n // } else {\r\n // setExpandPricingDetail(id);\r\n // }\r\n // };\r\n\r\n // Called by values changing in Formik - useEffect only fires for certain values\r\n const PopulateProviders = () => {\r\n const { values } = useFormikContext();\r\n useEffect(() => {\r\n if (values.reducedGapReason !== previousReducedGapReason)\r\n {\r\n if (values.reducedGapReason !== '')\r\n {\r\n // Set ReducedGapReason\r\n props.setStepValue({ step2: { ...props.steps.step2, reducedGapReason : values.reducedGapReason }})\r\n setPreviousReducedGapReason(values.reducedGapReason)\r\n }\r\n }\r\n // See if bulkBilledReason value has changed \r\n if (values.bulkBilledReason !== previousBulkBilledReason)\r\n {\r\n if (values.bulkBilledReason !== '')\r\n {\r\n // Set BulkBilledReason\r\n props.setStepValue({ step2: { ...props.steps.step2, bulkBilledReason : values.bulkBilledReason }})\r\n setPreviousBulkBilledReason(values.bulkBilledReason)\r\n }\r\n }\r\n // See if the payment type value has changed \r\n if (values.paymenttype !== previousPaymentType)\r\n {\r\n if (values.paymenttype !== '')\r\n {\r\n // Set Payment Type \r\n props.setStepValue({ step2: { ...props.steps.step2, paymenttype : values.paymenttype, healthCareCard : values.healthCareCard, bulkBilledReason : values.bulkBilledReason, reducedGapReason : values.reducedGapReason }})\r\n setPreviousPaymentType(values.paymenttype)\r\n }\r\n else\r\n {\r\n setPreviousPaymentType(values.paymenttype)\r\n }\r\n \r\n }\r\n }, [values.paymenttype,values.healthCareCard,values.reducedGapReason,values.bulkBilledReason]);\r\n return null;\r\n };\r\n \r\n useEffect( () => { dispatch(Registration.actions.fetchMatchingAvailability({ psychologistID: currentPsychologist.id, userTZ: currentTimeZone, providerType: providerType, invitetoken: programid && programid === 1 ? 'pgnl' : invitetoken })) }, [dispatch, currentPsychologist, currentTimeZone, providerType, props.invitetoken,invitetoken] )\r\n\r\n const searchPsychologist = (p) => {\r\n if ( true\r\n // if there is AOI selections, then return if number of matches in psychologist equals the number of options in the selection\r\n && (!searchAOI || (searchAOI && searchAOI.length === 0) || (searchAOI && searchAOI.filter(( {issue} ) => p.areasOfInterest.includes(issue)).length === searchAOI.length) )\r\n // search fullname for search string\r\n && ( p.id === currentPsychologist.id || currentPsychologist.id === undefined)\r\n // Note the contractid 11 reference below is related to the NthQLDPHN project - if the client registering is part of this project then any providertype will do\r\n && ((invite && invite.contractid === 11) || (props.steps.step2.providerType === 'NthQLDPHN') || (props.steps.step2.providerType === 'ALL') || (props.steps.step2.providerType !== 'Psychologist' && p.providertype === props.steps.step2.providerType) || (props.steps.step2.providerType === 'Psychologist' && (p.providertype === 'Clinical' || p.providertype === 'Psychologist' || p.providertype === 'Occupational'))) \r\n )\r\n {\r\n return p\r\n }\r\n }\r\n\r\n const searchAllPsychologist = (p) => {\r\n if ( true\r\n // Check not in FilteredPsychologists\r\n && (!filteredPsychologists || (filteredPsychologists && filteredPsychologists.length === 0) || (filteredPsychologists && filteredPsychologists.filter(( {id} ) => p.id === id).length === 0) )\r\n )\r\n {\r\n return p\r\n }\r\n }\r\n\r\n const searchAOISpecificPsychologist = (p) => {\r\n if ( true\r\n // if there is AOI selections, then return if number of matches in psychologist equals the number of options in the selection\r\n && (!searchAOI || (searchAOI && searchAOI.length === 0) || (searchAOI && searchAOI.filter(( {issue} ) => p.areasOfInterest.includes(issue)).length === searchAOI.length) )\r\n // search years experience\r\n // && (p.experience > parseInt(searchExperience) || parseInt(searchExperience) === 0)\r\n // search fullname for search string\r\n && ( p.id === currentPsychologist.id || currentPsychologist.id === undefined)\r\n && ((props.steps.step2.providerType !== 'Psychologist' && p.providertype === props.steps.step2.providerType) || (props.steps.step2.providerType === 'ALL') || (props.steps.step2.providerType === 'Psychologist' && (p.providertype === 'Clinical' || p.providertype === 'Psychologist' || p.providertype === 'Occupational'))) \r\n )\r\n {\r\n return p\r\n }\r\n }\r\n\r\n\r\n function compareAoiCount( a, b ) {\r\n if ( a.aoiCount < b.aoiCount ){\r\n return 1;\r\n }\r\n if ( a.aoiCount > b.aoiCount ){\r\n return -1;\r\n }\r\n return 0;\r\n }\r\n\r\n function compareStandardCost( a, b ) {\r\n var partA = parseFloat(a.standardFeeOutOfPocket.substring(1,a.standardFeeOutOfPocket.length-1))\r\n var partB = parseFloat(b.standardFeeOutOfPocket.substring(1,b.standardFeeOutOfPocket.length-1))\r\n if ( partA > partB ){\r\n return 1;\r\n }\r\n if ( partA < partB ){\r\n return -1;\r\n }\r\n return 0;\r\n }\r\n\r\n function compareReducedCost( a, b ) {\r\n var partA = parseFloat(a.reducedFeeOutOfPocket.substring(1,a.reducedFeeOutOfPocket.length-1))\r\n var partB = parseFloat(b.reducedFeeOutOfPocket.substring(1,b.reducedFeeOutOfPocket.length-1))\r\n if ( partA > partB ){\r\n return 1;\r\n }\r\n if ( partA < partB ){\r\n return -1;\r\n }\r\n return 0;\r\n }\r\n\r\n // (props.steps.step2.paymenttype === \"Bulk Billed\" && row.bulkBillingAvailable === \"0\" && !props.steps.step2.program) ?\r\n\r\n function compareBulkBillingNextAvailable( a, b ) {\r\n if ( a.bulkBillingAvailable === \"1\" && b.bulkBillingAvailable === \"0\" ){\r\n return -1;\r\n }\r\n if ( (a.bulkBillingAvailable === \"0\" || props.steps.step2.program) && b.bulkBillingAvailable === \"1\" ){\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n\r\n // nextAvailable\r\n // function compareNextAvailable( a, b ) {\r\n // // console.log(a.nextAvailable)\r\n // var partsA = a.nextAvailable.split(\"/\");\r\n // var dateA = new Date(parseInt(partsA[2], 10),\r\n // parseInt(partsA[1], 10) - 1,\r\n // parseInt(partsA[0], 10)).getTime() \r\n // // console.log(dateA)\r\n\r\n // // console.log(b.nextAvailable)\r\n // var partsB = b.nextAvailable.split(\"/\");\r\n // var dateB = new Date(parseInt(partsB[2], 10),\r\n // parseInt(partsB[1], 10) - 1,\r\n // parseInt(partsB[0], 10)).getTime()\r\n // // console.log(dateB)\r\n // return dateA > dateB ? 1 : -1; \r\n // // return 0;\r\n // }\r\n\r\n // var filteredPsychologists = registered.filter(p => searchPsychologist(p))\r\n const temp = registered.map(row => { return {aoiCount: row.areasOfInterest.filter((issue) => searchAOI.some( aoi => aoi.issue === issue)).length, ...row } })\r\n // If the ProviderType is EAP then display all Providers with availability other use AOI\r\n // If fixAOI is set then only match on that AOI - nothing else\r\n\r\n // Some documentation about the ever growing complexity of the provider order \r\n // Condition 1 - If the ProviderType is EAP then display all Providers with availability \r\n // Condition 2 - If the type is fixAOI (i.e. Perinatal Loss etc.) then only match on that AOI - nothing else \r\n // Condition 3 - if sort order filter (clientRegistrationSort) set to cost and payment type is Full Fee then sort by standard cost\r\n // Condition 4 - if sort order filter (clientRegistrationSort) set to cost and payment type is Reduced Gap then sort by reduced cost\r\n // Condition 5 - Regardless of sort order selection, if payment type is set to Bulk Billed then sort by Next Availabile prioritizing those with Bulk Billing availablity \r\n // Condition 6 - Default Sort Order (i.e. Next Available) then do the usual \r\n // \r\n\r\n // console.log(props.steps.step1)\r\n // console.log(props.steps.step2)\r\n\r\n var filteredPsychologists = \r\n providerType === 'EAP' ? registered.filter(p => searchPsychologist(p)) : \r\n props.steps.step2.fixAOI ? registered.filter(p => searchAOISpecificPsychologist(p)) : \r\n filters.clientRegistrationSort === 'Cost' && props.steps.step2.paymenttype === 'Full Fee' ? temp.sort(compareStandardCost).filter(p => searchPsychologist(p)) :\r\n filters.clientRegistrationSort === 'Cost' && props.steps.step2.paymenttype === 'Reduced Gap' ? temp.sort(compareReducedCost).filter(p => searchPsychologist(p)) :\r\n filters.clientRegistrationSort === 'Cost' && props.steps.step2.paymenttype === 'Bulk Billed' ? temp.sort(compareBulkBillingNextAvailable).filter(p => searchPsychologist(p)) :\r\n filters.clientRegistrationSort === 'NextAvailable' && props.steps.step2.paymenttype === 'Bulk Billed' ? temp.sort(compareBulkBillingNextAvailable).filter(p => searchPsychologist(p)) :\r\n temp.sort((a,b) => a.nextAvailableSort.localeCompare(b.nextAvailableSort)).sort(compareAoiCount).filter(p => searchPsychologist(p))\r\n\r\n // Gather all providers that are not in the filtered list \r\n var validPsychologists = registered.filter(p => searchAllPsychologist(p))\r\n\r\n // console.log(temp)\r\n useEffect( () => { \r\n \r\n // console.log('In Use Effect')\r\n // console.log('FilteredPsychologists')\r\n // console.log(filteredPsychologists)\r\n // console.log('Valid Psychologists')\r\n // console.log(validPsychologists)\r\n // console.log('Registered')\r\n // console.log(registered)\r\n // console.log('Search')\r\n // console.log(props.steps.step1.search)\r\n\r\n if(filteredPsychologists.length < 1 && registered.length > 0)\r\n {\r\n // If fixAOI is set then only match on that AOI - nothing else\r\n if(props.steps.step1.search.length > 0 && !props.steps.step2.fixAOI)\r\n {\r\n var newAOI = [...props.steps.step1.search];\r\n var existingAOI = [...props.steps.step1.data];\r\n // const childModeAOI = ['Children (under 12)','Adolescents (13-17)']\r\n // Before trimming off the last element need to ensure the last element is not a childModeAOI\r\n if(childMode)\r\n {\r\n if(childModeAOI.includes(newAOI[newAOI.length-1].issue))\r\n {\r\n // Ok the last element is a childModeAOI so we can't remove it\r\n // Are there more than two elements? \r\n if(newAOI.length > 1)\r\n {\r\n // Remove first element \r\n newAOI.shift();\r\n }\r\n }\r\n else\r\n {\r\n // Ok the last element is not a childModeAOI so we can remove it\r\n newAOI.pop();\r\n }\r\n }\r\n else\r\n {\r\n newAOI.pop();\r\n }\r\n props.setStepValue({ step1: { status: 'Completed', data: existingAOI, search: newAOI }, currentStep: 2 }, )\r\n }\r\n else\r\n {\r\n // Ok we could not find a provider available regardless of the area of interest selection \r\n // Check if Provisional - we display a contact form for them \r\n if (providerType === 'Provisional')\r\n {\r\n //setDisplayContactForm(true);\r\n setDisplayNoProvisionalMessage(true)\r\n }\r\n // May need to add these actions to all \r\n }\r\n }\r\n // Registered is fetching by provider type so it is possible there will be no registered response for Provisional \r\n if(filteredPsychologists.length < 1 && registeredFetch && registered.length === 0 && providerType === 'Provisional')\r\n {\r\n //setDisplayContactForm(true);\r\n setDisplayNoProvisionalMessage(true)\r\n }\r\n else\r\n {\r\n setDisplayNoProvisionalMessage(false)\r\n }\r\n }, [filteredPsychologists, registered, props, providerType, registeredFetch] )\r\n\r\n // const handleExpandClick = (id) => {\r\n // if(id === expanded) {\r\n // setExpanded(0)\r\n // } else {\r\n // setExpanded(id);\r\n // }\r\n // };\r\n\r\n function handleTimeZoneAutocompleteChange(propertyName, event, newValue) { \r\n if (newValue) {\r\n props.setStepValue({ step2: { ...props.steps.step2, status: 'In Progress', data: {...currentPsychologist}, bookingdate: undefined, providerType : providerType,userTZ: newValue.systemName }, currentStep: 2 })\r\n setcurrentTimeZone(newValue.systemName);\r\n setshowpopoverTimeZone(false)\r\n }\r\n } \r\n\r\n const submitPsychologist = () => {\r\n if(currentPsychologist.id !== undefined && currentbookingdate !== undefined) {\r\n props.setStepValue({ step2: { ...props.steps.step2, status: 'Completed', data: {...currentPsychologist}, bookingdate: currentbookingdate, providerType : providerType, userTZ: currentTimeZone }, currentStep: 3 })\r\n }\r\n }\r\n\r\n const isMobile = useMediaQuery('(max-width: 760px)');\r\n \r\n const useStyles = makeStyles((theme) => ({\r\n root: {\r\n // minWidth: 200,\r\n // maxWidth: 200,\r\n },\r\n media: {\r\n height: 240,\r\n },\r\n title: {\r\n fontSize: 14,\r\n },\r\n pos: {\r\n marginBottom: 12,\r\n },\r\n expand: {\r\n transform: 'rotate(0deg)',\r\n marginLeft: 'auto',\r\n transition: theme.transitions.create('transform', {\r\n duration: theme.transitions.duration.shortest,\r\n }),\r\n },\r\n expandOpen: {\r\n transform: 'rotate(180deg)',\r\n },\r\n }));\r\n const classes = useStyles();\r\n\r\n // Blob setup for psychologist photos \r\n const containerName = `psychologists`;\r\n const storageAccountName = process.env.REACT_APP_STORAGERESOURCENAME || \"\"; \r\n\r\n const startNewBooking = (bookingdate) =>{\r\n setcurrentbookingdate(bookingdate)\r\n setShowNewBooking(true)\r\n }\r\n\r\n const saveAppointment = () => {\r\n // Need to consider this further - need to support removing appointments as well\r\n props.setStepValue({ step2: { ...props.steps.step2, status: 'Completed', data: {...currentPsychologist}, bookingdate: currentbookingdate, providerType : providerType, userTZ: currentTimeZone }, currentStep: 3 })\r\n setShowNewBooking(false)\r\n }\r\n\r\n const popoverTimeZone = (\r\n <Popover id=\"popover-basic\" className=\"popover-instruction\">\r\n <Popover.Title as=\"h3\">TimeZone</Popover.Title>\r\n <Popover.Content>\r\n Next, <strong>select</strong> your timezone so that we can look up your Providers's availability. \r\n </Popover.Content>\r\n </Popover>\r\n );\r\n\r\n // const popoverBooking = (\r\n // // !bookingConfirmed ? \r\n // <Popover id=\"popover-basic\" className=\"popover-instruction\">\r\n // <Popover.Title as=\"h3\">Make a Booking</Popover.Title>\r\n // <Popover.Content>\r\n // You must select a timezone and make a booking to continue. \r\n // </Popover.Content>\r\n // </Popover>\r\n // // :\r\n // // <div id=\"popover-basic\" style={{ display: 'none' }} className=\"popover-instruction\">Here</div>\r\n // );\r\n\r\n var rowcount = 0 //count of bookings displayed\r\n\r\n // get the invite (if any) from state and merge with the initialised fields\r\n const inviteInit = useSelector(state => state.registration.ClientInvite)\r\n const [clientInvite, setClientInvite] = useState({...clientInit, ...inviteInit, steps: props.steps});\r\n const [previousSteps, setPreviousSteps] = useState()\r\n\r\n useEffect( ()=> {\r\n if (previousSteps !== props.steps)\r\n {\r\n setClientInvite({ ...clientInvite, \r\n steps: { ...props.steps },\r\n program: props.steps.step2.fixAOI,\r\n programid: props.steps.step2.programid,\r\n paymenttype: props.steps.step2.paymenttype, \r\n unemployed: props.steps.step2.unemployed,\r\n naturalDisaster: props.steps.step2.naturalDisaster,\r\n bulkBilledReason: props.steps.step2.bulkBilledReason,\r\n reducedGapReason: props.steps.step2.reducedGapReason,\r\n healthCareCard: props.steps.step2.paymenttype === 'Bulk Billed' ? 'Y' : ''\r\n })\r\n setPreviousSteps(props.steps)\r\n }\r\n }, [props.steps.step2,props.steps,providerType,previousSteps])\r\n\r\n const validationSchema = Yup.object().shape({\r\n healthCareCard: Yup.string() \r\n .when(['providerType','paymenttype'],\r\n {\r\n is: (providerType,paymenttype) => paymenttype === 'Bulk Billed' && (providerType === 'Clinical' || providerType === 'Psychologist' || providerType === 'Occupational'),\r\n then: Yup.string().oneOf(['Y', 'N'])\r\n .required('Please advise if you have a Health Care Card')\r\n }),\r\n });\r\n\r\n const moreProviderBio = (fullName, bio) => {\r\n setProviderBioFullName(fullName)\r\n setProviderBioBio(bio)\r\n setShowProviderBio(true)\r\n }\r\n\r\n function submitForm(data) {\r\n props.setStepValue({ step2: { \r\n status: 'In Progress', \r\n data: {}, \r\n bookingdate: currentbookingdate, \r\n providerType : providerType, \r\n userTZ: currentTimeZone,\r\n paymenttype: data.paymenttype,\r\n healthCareCard: data.healthCareCard,\r\n unemployed: data.unemployed,\r\n naturalDisaster: data.naturalDisaster,\r\n bulkBilledReason: data.bulkBilledReason,\r\n reducedGapReason: data.reducedGapReason\r\n }, currentStep: 2 })\r\n }\r\n\r\n // function submitContactForm(data){\r\n // dispatch(Registration.actions.postContactFormEntry(data))\r\n // props.setStepValue({ step2: { ...props.steps.step2, status: 'Not Started', data: {}, bookingdate: null, providerType : providerType, userTZ: currentTimeZone }, currentStep: 5 })\r\n // // setStatus('Submitted')\r\n // }\r\n\r\n // const contactForm = {\r\n // firstname: '', \r\n // surname: '',\r\n // email: '', \r\n // phone: '',\r\n // locality: ''\r\n // }\r\n\r\n // const contactFormBValidationSchema = Yup.object().shape({\r\n // firstname: Yup.string()\r\n // .min(2,\"Too Short\")\r\n // .max(255,\"Too Long\")\r\n // .required(\"First Name is required\"),\r\n // surname: Yup.string()\r\n // .min(2,\"Too Short\")\r\n // .max(255,\"Too Long\")\r\n // .required(\"Surname is required\"),\r\n // email: Yup.string()\r\n // .min(2,\"Too Short\")\r\n // .max(200,\"Too Long\")\r\n // .email(\"Enter a valid email\")\r\n // .required(\"Email is required\"),\r\n // phone: Yup.string()\r\n // .min(2,\"Too Short\")\r\n // .max(12,\"Too Long\")\r\n // .required(\"Phone Number is required\"),\r\n // locality: Yup.string()\r\n // .min(2,\"Too Short\")\r\n // .max(250,\"Too Long\")\r\n // .required('Locality is required'),\r\n // });\r\n\r\n if (displayNoProvisionalMessage)\r\n {\r\n return(\r\n <>\r\n <Paper style={{ padding: 20, backgroundColor: \"rgb(245,245,245)\" }}> \r\n <Row>\r\n <Col md=\"12\">\r\n {providerType && providerType === 'Financial' ?\r\n <h2>2. Financial Counsellor</h2>\r\n :\r\n <>\r\n {providerType && providerType === 'GP' ? \r\n <h2>2. GP</h2>\r\n :\r\n <>\r\n {providerType && providerType === 'Provisional'?\r\n <h2>2. Provisional Psychologist</h2>\r\n :\r\n <>\r\n {providerType && providerType === 'Social'?\r\n <h2>2. MH Social Worker</h2>\r\n :\r\n <>\r\n {providerType && providerType === 'Nurse'?\r\n <h2>2. Mental Health Nurse</h2>\r\n :\r\n <>\r\n {providerType && providerType === 'Occupational'?\r\n <h2>2. Occupational Therapist</h2>\r\n :\r\n <>\r\n {providerType && providerType === 'Supervision'?\r\n <h2>2. Supervising Psychologist</h2>\r\n :\r\n <>\r\n {clientInvite && clientInvite.contract ?\r\n <h2>2. Practitioner</h2>\r\n :\r\n <h2>2. Practitioner</h2>\r\n }\r\n </>\r\n }\r\n </>\r\n }\r\n </>\r\n }\r\n </>\r\n } \r\n </>\r\n }\r\n </>\r\n }\r\n </>\r\n }\r\n </Col>\r\n </Row>\r\n <hr style={{ marginTop: 4 }}></hr>\r\n <Alert severity=\"error\" style={{ backgroundColor: \"#DAF3F4\", borderColor: \"#CEE6E7\", marginBottom: 15 }}>\r\n <h4 style={{ marginBottom: 15 }}>The Rural Recovery Provisional Psychologist program is currently at capacity.</h4>\r\n <p>You can book a registered psychologist under a mental health treatment plan. </p>\r\n <p>Book a registered psychologist <a href={`https://portal.ruralhealthconnect.com.au/clientregistration/new`} style={{ textDecoration: 'underline' }}>here.</a></p> \r\n <p>Download Rural Health Connect flyer with referral information to show your GP <a href={`https://ruralhealthconnect.com.au/assets/RHC-client-flyer-V02.pdf`} target=\"ClientGPInformation\" style={{ textDecoration: 'underline' }}>here.</a></p>\r\n </Alert>\r\n <hr style={{ marginTop: 4 }}></hr>\r\n </Paper>\r\n </>\r\n )\r\n }\r\n // No using the contact form at the moment - however it may be back later \r\n // if (displayContactForm)\r\n // {\r\n // return(\r\n // <>\r\n // <Paper style={{ padding: 20, backgroundColor: \"rgb(245,245,245)\" }}> \r\n // <Row>\r\n // <Col md=\"12\">\r\n // {providerType && providerType === 'Financial' ?\r\n // <h2>2. Financial Counsellor</h2>\r\n // :\r\n // <>\r\n // {providerType && providerType === 'GP' ? \r\n // <h2>2. GP</h2>\r\n // :\r\n // <>\r\n // {providerType && providerType === 'Provisional'?\r\n // <h2>2. Provisional Psychologist</h2>\r\n // :\r\n // <>\r\n // {providerType && providerType === 'Social'?\r\n // <h2>2. MH Social Worker</h2>\r\n // :\r\n // <>\r\n // {providerType && providerType === 'Occupational'?\r\n // <h2>2. Occupational Therapist</h2>\r\n // :\r\n // <h2>2. Psychologist</h2>\r\n // }\r\n // </>\r\n // } \r\n // </>\r\n // }\r\n // </>\r\n // }\r\n // </>\r\n // }\r\n // </Col>\r\n // </Row>\r\n // <hr style={{ marginTop: 4 }}></hr>\r\n // <Formik\r\n // enableReinitialize={true}\r\n // initialValues={contactForm}\r\n // validationSchema = {contactFormBValidationSchema }\r\n // onSubmit={(values, actions) => {\r\n // submitContactForm(values);\r\n // actions.setSubmitting(false);\r\n // }}\r\n // >\r\n // {props => {\r\n // const { values, errors, touched, handleChange, handleSubmit } = props;\r\n // const change = (name,e) => { e.persist(); handleChange(e); };\r\n // return (\r\n // <form noValidate={true} autoComplete=\"off\" onSubmit={handleSubmit} >\r\n // <Paper style={{ backgroundColor: \"rgb(245,245,245)\", padding: 20, maxWidth: 800 }}>\r\n // {/* <Row>\r\n // <Col md=\"12\">\r\n // <Grid container direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-end\">\r\n // <Grid item md={9} xs={12}>\r\n // <h2>Referrer Registration of Interest Form</h2>\r\n // </Grid>\r\n // <Grid item md={3} xs={12} style={{ fontStyle: \"italic\", fontWeight: 400, textAlign: \"right\", paddingBottom: 4, fontSize: 12 }}>\r\n // * indicates required fields\r\n // </Grid>\r\n // </Grid>\r\n // </Col>\r\n // </Row>\r\n // <hr style={{ marginTop: 4 }}></hr> */}\r\n // <Alert style={{ backgroundColor: \"#DAF3F4\", borderColor: \"#CEE6E7\", marginBottom: 15 }}>\r\n // <p>Unfortunately there are no appointments available at this time. If you would like someone to call you back to arrange an appointment please enter your details here and we will be in touch:</p>\r\n // </Alert>\r\n // <hr style={{ marginTop: 4 }}></hr>\r\n // <Row>\r\n // <Col md=\"4\">\r\n // <Form.Group >\r\n // <Form.Label>First Name *</Form.Label>\r\n // <Form.Control type=\"text\" name=\"firstname\" value={values.firstname} onChange={change.bind(null, \"firstname\")} autoComplete='new-password' isInvalid={touched.firstname && !!errors.firstname} isValid={touched.firstname && !errors.firstname}/>\r\n // <Form.Control.Feedback type=\"invalid\">{errors.firstname}</Form.Control.Feedback>\r\n // </Form.Group>\r\n // </Col>\r\n // <Col md=\"4\">\r\n // <Form.Group >\r\n // <Form.Label>Surname *</Form.Label>\r\n // <Form.Control type=\"text\" name=\"surname\" value={values.surname} onChange={change.bind(null, \"surname\")} autoComplete='new-password' isInvalid={touched.surname && !!errors.surname} isValid={touched.surname && !errors.surname}/>\r\n // <Form.Control.Feedback type=\"invalid\">{errors.surname}</Form.Control.Feedback>\r\n // </Form.Group>\r\n // </Col>\r\n // </Row>\r\n // <Row>\r\n // <Col md=\"8\">\r\n // <Form.Group >\r\n // <Form.Label>Email *</Form.Label>\r\n // <Form.Control type=\"text\" name=\"email\" value={values.email} onChange={change.bind(null, \"email\")} isInvalid={touched.email && !!errors.email} isValid={touched.email && !errors.email} autoComplete='new-password' />\r\n // <Form.Control.Feedback type=\"invalid\">{errors.email}</Form.Control.Feedback>\r\n // </Form.Group>\r\n // </Col>\r\n // <Col md=\"4\">\r\n // <Form.Group >\r\n // <Form.Label>Phone Number *</Form.Label>\r\n // <Form.Control type=\"text\" name=\"phone\" value={values.phone} onChange={change.bind(null, \"phone\")} isInvalid={touched.phone && !!errors.phone} isValid={touched.phone && !errors.phone} autoComplete='new-password' />\r\n // <Form.Control.Feedback type=\"invalid\">{errors.phone}</Form.Control.Feedback>\r\n // </Form.Group>\r\n // </Col> \r\n // </Row>\r\n // <Row>\r\n // <Col md=\"4\">\r\n // <Form.Group>\r\n // <Form.Label>Locality *</Form.Label>\r\n // <Form.Control type=\"text\" name=\"locality\" value={values.locality} onChange={change.bind(null, \"locality\")} isInvalid={touched.locality && !!errors.locality} isValid={touched.locality && !errors.locality} autoComplete='new-password' />\r\n // <Form.Control.Feedback type=\"invalid\">{errors.locality}</Form.Control.Feedback>\r\n // </Form.Group>\r\n // </Col>\r\n // </Row>\r\n // <Row>\r\n // <Col md=\"12\">\r\n // <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n // <Grid item md={3} xs={6}> \r\n\r\n // </Grid>\r\n // <Grid item md={1} xs={6}>\r\n // <Button variant=\"primary\" type=\"submit\" >\r\n // Submit\r\n // </Button>\r\n // </Grid>\r\n // </Grid>\r\n // </Col>\r\n // </Row>\r\n // </Paper>\r\n // </form>\r\n // )\r\n // }}\r\n // </Formik>\r\n // </Paper>\r\n // </>\r\n // )\r\n // }\r\n else\r\n {\r\n return(\r\n <>\r\n <Paper style={{ padding: 20, backgroundColor: \"rgb(245,245,245)\" }}> \r\n <Row>\r\n <Col md=\"12\">\r\n {providerType && providerType === 'Financial' ?\r\n <h2>2. Financial Counsellor</h2>\r\n :\r\n <>\r\n {providerType && providerType === 'GP' ? \r\n <h2>2. GP</h2>\r\n :\r\n <>\r\n {providerType && providerType === 'Provisional'?\r\n <h2>2. Provisional Psychologist</h2>\r\n :\r\n <>\r\n {providerType && providerType === 'Social'?\r\n <h2>2. MH Social Worker</h2>\r\n :\r\n <>\r\n {providerType && providerType === 'Nurse'?\r\n <h2>2. Mental Health Nurse</h2>\r\n :\r\n <>\r\n {providerType && providerType === 'Occupational'?\r\n <h2>2. Occupational Therapist</h2>\r\n :\r\n <>\r\n {providerType && providerType === 'Supervision'?\r\n <h2>2. Supervising Psychologist</h2>\r\n :\r\n <>\r\n {clientInvite && clientInvite.contract ?\r\n <h2>2. Practitioner</h2>\r\n :\r\n <h2>2. Practitioner</h2>\r\n }\r\n </>\r\n }\r\n </>\r\n }\r\n </>\r\n }\r\n </>\r\n } \r\n </>\r\n }\r\n </>\r\n }\r\n </>\r\n }\r\n </Col>\r\n </Row>\r\n <hr style={{ marginTop: 4 }}></hr>\r\n <Formik\r\n enableReinitialize={true}\r\n initialValues={clientInvite}\r\n validationSchema = {validationSchema}\r\n onSubmit={(values, actions) => {\r\n submitForm(values);\r\n // actions.setSubmitting(false);\r\n }}\r\n >\r\n {props => {\r\n const { values, errors, touched, handleChange, handleSubmit } = props;\r\n const change = (name,e) => { e.persist(); handleChange(e); };\r\n return (\r\n <form noValidate={true} autoComplete=\"off\" onSubmit={handleSubmit} >\r\n <PopulateProviders />\r\n {providerType && (providerType === 'ALL' || providerType === 'Psychologist' || providerType === 'Nurse' || providerType === 'Social' || providerType === 'Occupational' || providerType === 'Clinical') && (!clientInvite.contract) ?\r\n <>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group>\r\n <Form.Label style={{ fontWeight: 500 }}>Payment Options</Form.Label>\r\n <p>We want everyone be able to access a provider and therefore have a range of pricing options. Reduced fee places are limited so please only apply if it suits your circumstances:</p>\r\n <Form.Check id=\"payment-fullfee\" name=\"paymenttype\" type=\"radio\" style={{ marginBottom: 8 }}>\r\n <Form.Check.Input name=\"paymenttype\" type=\"radio\" value=\"Full Fee\" checked={values.paymenttype === 'Full Fee' ? true : false} onChange={change.bind(null, \"paymenttype\")} />\r\n <Form.Check.Label style={{marginLeft: 12 }}>STANDARD FEE: I am employed and/or am not experiencing financial hardship </Form.Check.Label>\r\n </Form.Check>\r\n <Form.Check id=\"payment-reducedgap\" name=\"paymenttype\" type=\"radio\" style={{ marginBottom: 8 }} >\r\n <Form.Check.Input name=\"paymenttype\" type=\"radio\" value=\"Reduced Gap\" checked={values.paymenttype === 'Reduced Gap' ? true : false} onChange={change.bind(null, \"paymenttype\")} />\r\n <Form.Check.Label style={{marginLeft: 12 }}>REDUCED FEE: I am experiencing financial hardship and would like to apply for the psychologist's reduced gap fee option. </Form.Check.Label>\r\n </Form.Check>\r\n {values.paymenttype === 'Reduced Gap' ?\r\n <>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Please tell us about your circumstances in a few sentences</Form.Label>\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" name=\"reducedGapReason\" value={values.reducedGapReason} onChange={change.bind(null, \"reducedGapReason\")} isInvalid={touched.reducedGapReason && !!errors.reducedGapReason} isValid={touched.reducedGapReason && !errors.reducedGapReason} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.reducedGapReason}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n <Form.Check id=\"payment-bulkbilled\" name=\"paymenttype\" type=\"radio\" style={{ marginBottom: 8 }} >\r\n <Form.Check.Input name=\"paymenttype\" type=\"radio\" value=\"Bulk Billed\" checked={values.paymenttype === 'Bulk Billed' ? true : false} onChange={change.bind(null, \"paymenttype\")} />\r\n <Form.Check.Label style={{marginLeft: 12 }}>​BULK BILL(limited sessions available) We have some bulk billed sessions available for those most in need. {programBulkBilling === true ? null : 'For Healthcare, Pension or Disability card holders only.' } </Form.Check.Label>\r\n </Form.Check> \r\n {(values.paymenttype === 'Bulk Billed' && !programBulkBilling) ?\r\n <>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Please tell us about your circumstances in a few sentences</Form.Label>\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" name=\"bulkBilledReason\" value={values.bulkBilledReason} onChange={change.bind(null, \"bulkBilledReason\")} isInvalid={touched.bulkBilledReason && !!errors.bulkBilledReason} isValid={touched.bulkBilledReason && !errors.bulkBilledReason} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.bulkBilledReason}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n } \r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item md={3} xs={6}>\r\n </Grid>\r\n <Grid item md={2} xs={6} style={{ textAlign: \"right\"}}>\r\n <Button variant=\"primary\" type=\"submit\">\r\n {values.steps.step2.status === 'Not Started'? 'Save & Next' : 'Update'}\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n <>\r\n {providerType && providerType === 'Supervision' ?\r\n <>\r\n <hr style={{ marginTop: 4 }}></hr>\r\n <Alert severity=\"info\" style={{ backgroundColor: \"#DAF3F4\", borderColor: \"#CEE6E7\", marginBottom: 15 }}>\r\n <h5 style={{ marginBottom: 15 }}>Any income generated by Rural Health Connect through this program goes directly to programs supporting disaster impacted rural Australians. Thank you for being part of this.</h5>\r\n </Alert>\r\n <hr style={{ marginTop: 4 }}></hr>\r\n </>\r\n :\r\n null\r\n }\r\n </>\r\n } \r\n </form>\r\n )\r\n }}\r\n </Formik>\r\n <hr style={{ marginTop: 20, marginBottom: 20 }}></hr>\r\n <Row>\r\n <Col md=\"12\"> \r\n {props.steps.message ? (\r\n <Alert severity=\"info\" style={{ marginBottom: 10, marginTop: 8, fontSize: 14 }}>\r\n {props.steps.message}\r\n </Alert>) \r\n : null\r\n }\r\n </Col>\r\n </Row>\r\n { providerType && providerType !== 'EAP' && providerType !== 'NthQLDPHN' && providerType !== 'Contract' ?\r\n <Row>\r\n <Col md=\"12\" style={{ marginBottom: 20}}>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item md={2} xs={6} >\r\n <FormControl variant=\"outlined\" className={classes.formControl}>\r\n <FormLabel id=\"clientRegistrationSort-label\" component='legend' style={{ fontWeight: 500 }}>Sort By</FormLabel>\r\n <RadioGroup aria-label=\"SortBy\" name=\"clientRegistrationSort\" value={filters.clientRegistrationSort} onChange={(event) => dispatch(Admin.actions.setFilters({ filterName: 'clientRegistrationSort', filterValue: event.target.value }))}>\r\n <FormControlLabel value=\"NextAvailable\" control={<Radio />} label=\"Next Available\" />\r\n <FormControlLabel value=\"Cost\" control={<Radio />} label=\"Out of Pocket Cost\" />\r\n </RadioGroup> \r\n </FormControl>\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n : \r\n null\r\n }\r\n <Grid container spacing={3}>\r\n {/* {!currentPsychologist ? */}\r\n <Grid item md={currentPsychologist.id !== undefined ? 4 : 12} style={{ width: \"100%\", }}>\r\n <Masonry\r\n breakpointCols={isMobile || currentPsychologist.id !== undefined ? 1 : 3}\r\n className=\"my-masonry-grid\"\r\n columnClassName=\"my-masonry-grid_column\">\r\n\r\n {filteredPsychologists.map((row, index) => {\r\n return (\r\n <Card className={classes.root} variant=\"outlined\" key={index}>\r\n <CardMedia\r\n className={classes.media}\r\n image={`https://${storageAccountName}.blob.core.windows.net/${containerName}/${row.imageURL}`}\r\n title=\"Psychologist\"\r\n />\r\n {providerType && providerType==='Financial' ? \r\n <>\r\n {/* Financial Counsellor Output */}\r\n <CardContent>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item sm={9}>\r\n <Typography variant=\"h5\" component=\"h3\">\r\n {row.fullname}\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={3} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\">\r\n {row.practicename}\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n <Grid container style={{ marginBottom: 15, marginTop: 10 }}>\r\n {row.areasOfInterest.map((row) => {return (<Chip size=\"small\" key={row} variant=\"outlined\" label={row} style={{ margin: 2 }} />)})}\r\n </Grid>\r\n <Grid container style={{ height: 220 }}>\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={row.bio} />\r\n {/* {row.bio.substring(0,700)} */}\r\n {row.bio.length > 700 ?\r\n <>\r\n ...\r\n <Badge variant=\"secondary\" onClick={()=>moreProviderBio(row.fullname, row.bio)} style={{ marginRight: 5, cursor: 'pointer' }}>\r\n more\r\n </Badge>\r\n </>\r\n :\r\n null\r\n }\r\n </Typography>\r\n </Grid>\r\n </CardContent>\r\n </>\r\n :\r\n <>\r\n {providerType && (providerType === 'GP' || providerType === 'EAP' || providerType === 'Provisional' || providerType === 'Supervision') ?\r\n <>\r\n {/* GP, EAP, Supervision or Provisional Output i.e. no AOI */}\r\n <CardContent>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item sm={9}>\r\n <Typography variant=\"h5\" component=\"h3\">\r\n {row.fullname} \r\n </Typography>\r\n <Typography variant=\"subtitle1\">\r\n {row.providerdescription}\r\n </Typography>\r\n {clientInvite && clientInvite.facetoFaceBooking === 'Y' ?\r\n <Typography variant=\"subtitle2\">\r\n {row.fulladdress}\r\n </Typography>\r\n :\r\n null\r\n }\r\n <Typography variant=\"subtitle2\" style={{ marginTop:20}}>\r\n {`(Next Available Booking: ${row.nextAvailable})`}\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n {providerType && providerType === 'Supervision' ?\r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={6} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={6} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {row.hourlyrate}\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n <Grid container style={{ marginTop: 10}}>\r\n <Typography variant=\"body2\" component=\"p\">\r\n {/* {row.bio.substring(0,700)} */}\r\n <Interweave content={row.bio} />\r\n {row.bio.length > 700 ?\r\n <>\r\n ...\r\n <Badge variant=\"secondary\" onClick={()=>moreProviderBio(row.fullname, row.bio)} style={{ marginRight: 5, cursor: 'pointer' }}>\r\n more\r\n </Badge>\r\n </>\r\n :\r\n null\r\n }\r\n </Typography>\r\n </Grid>\r\n {providerType && providerType === 'Supervision' ?\r\n <>\r\n <Typography variant=\"h6\" component=\"h3\" style={{paddingTop:20}}>\r\n Available For\r\n </Typography>\r\n <Row>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {supervisionAreas.map(sRow => {\r\n if(sRow.index <= supervisionAreas.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${sRow.id}`;\r\n var isChecked = row.supervisorAreas.includes(sRow.id);\r\n return (\r\n <ListItem key={sRow.id} role={undefined} dense button >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{sRow.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Col>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {supervisionAreas.map(sRow => {\r\n if(sRow.index > supervisionAreas.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${sRow.id}`;\r\n var isChecked = row.supervisorAreas.includes(sRow.id);\r\n return (\r\n <ListItem key={sRow.id} role={undefined} dense button >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{sRow.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Col>\r\n </Row>\r\n <Typography variant=\"h6\" component=\"h3\" style={{paddingTop:20}}>\r\n Endorsed In \r\n </Typography>\r\n <Row>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {endorsedSupervisionAreas.map(sRow => {\r\n var isChecked = row.supervisorAreas.includes(sRow.id);\r\n const labelId = `checkbox-list-label-${sRow.id}`;\r\n if (isChecked) {\r\n return(\r\n <ListItem key={sRow.id} role={undefined} dense button >\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked ? classes.linkSelected : classes.link}>{sRow.issue}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n )\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })}\r\n </List>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n } \r\n\r\n </CardContent>\r\n </>\r\n :\r\n <>\r\n {/* Psychologist, Social, Occupation, Nurse and Clinical Output */}\r\n <CardContent>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item sm={9}>\r\n <Typography variant=\"h5\" component=\"h3\">\r\n {row.fullname} \r\n </Typography>\r\n <Typography variant=\"subtitle1\" >\r\n {row.providerdescription}\r\n </Typography>\r\n {clientInvite && clientInvite.facetoFaceBooking === 'Y' ?\r\n <Typography variant=\"subtitle2\">\r\n {row.fulladdress}\r\n </Typography>\r\n :\r\n null\r\n }\r\n <Typography variant=\"subtitle2\" style={{ marginTop:20}}>\r\n {`(Next Available Booking: ${row.nextAvailable})`}\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n { props.steps.step2.paymenttype === 'Full Fee' ?\r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={4} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600, textAlign: \"top\" }}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={8} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {row.hourlyRateOverrideGap !== '0' ? row.hourlyRateOverrideGap : row.standardFeeOutOfPocket }\r\n </Typography>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay {row.hourlyrate} on the day\r\n </Typography>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n Receive back {row.hourlyRateOverrideRebate !== '0' ? row.hourlyRateOverrideRebate : row.medicareRebate} from Medicare\r\n </Typography> \r\n </Grid>\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n { props.steps.step2.paymenttype === 'Reduced Gap' ?\r\n <>\r\n {row.isReducedFee === 'Y' ? \r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={4} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600, textAlign: \"top\"}}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={8} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {row.reducedFeeOverrideGap && row.reducedFeeOverrideGap !== '0' ? row.reducedFeeOverrideGap : row.reducedFeeOutOfPocket }\r\n </Typography>\r\n { row.reducedFee === '0' ?\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay $0 on the day\r\n </Typography>\r\n :\r\n <>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay {row.reducedFee} on the day\r\n </Typography>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n Receive back {row.reducedFeeOverrideRebate && row.reducedFeeOverrideRebate !== '0' ? row.reducedFeeOverrideRebate : row.medicareRebate} from Medicare\r\n </Typography>\r\n </>\r\n }\r\n </Grid>\r\n { row.reducedFee !== '0' ?\r\n <Grid item sm={12}>\r\n <Typography variant=\"subtitle2\" style={{ fontWeight:300, fontStyle: 'italic' }}>\r\n Note this provider offers some flexibility, depending on client circumstances\r\n </Typography>\r\n </Grid>\r\n :\r\n null\r\n }\r\n </Grid>\r\n </>\r\n :\r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={4} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600, textAlign: \"top\" }}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={8} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {row.reducedFeeOverrideGap && row.reducedFeeOverrideGap !== '0' ? row.reducedFeeOverrideGap : row.reducedFeeOutOfPocket }\r\n </Typography>\r\n { row.reducedFee === '0' ?\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay $0 on the day\r\n </Typography>\r\n :\r\n <>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay {row.reducedFee} on the day\r\n </Typography>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n Receive back {row.reducedFeeOverrideRebate && row.reducedFeeOverrideRebate !== '0' ? row.reducedFeeOverrideRebate : row.medicareRebate} from Medicare\r\n </Typography>\r\n </>\r\n }\r\n </Grid>\r\n </Grid>\r\n </>\r\n }\r\n </>\r\n :\r\n null\r\n } \r\n <Grid container style={{ marginBottom: 15, marginTop: 10 }}>\r\n {row.areasOfInterest.map((row) => {return (<Chip size=\"small\" key={row} variant=\"outlined\" label={row} style={{ margin: 2 }} />)})}\r\n </Grid>\r\n <Grid container style={{ height: 220 }}>\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={row.bio.substring(0,700)} />\r\n {row.bio.length > 700 ?\r\n <>\r\n ...\r\n <Badge variant=\"secondary\" onClick={()=>moreProviderBio(row.fullname, row.bio)} style={{ marginRight: 5, cursor: 'pointer' }}>\r\n more\r\n </Badge>\r\n </>\r\n :\r\n null\r\n }\r\n </Typography>\r\n </Grid>\r\n </CardContent>\r\n </>\r\n }\r\n </>\r\n }\r\n <CardActions disableSpacing>\r\n {props.steps.step2.paymenttype !== '' ?\r\n <>\r\n {currentPsychologist.id === undefined ? \r\n (props.steps.step2.paymenttype === \"Bulk Billed\" && row.bulkBillingAvailable === \"0\" && !props.steps.step2.program) ?\r\n <Button variant=\"secondary\">\r\n Not Available to Bulk Bill\r\n </Button>\r\n :\r\n <Button variant=\"primary\" type=\"submit\" onClick={() => {\r\n setcurrentPsychologist(row)\r\n props.setStepValue({ step2: { ...props.steps.step2, status: 'Completed', data: {...row}, booking: { day: '' }, providerType : providerType }, currentStep: 2 })\r\n }}>\r\n Select\r\n </Button>\r\n : \r\n <Button variant=\"secondary\" type=\"submit\" onClick={() => {\r\n setcurrentPsychologist({})\r\n props.setStepValue({ step2: { ...props.steps.step2, status: 'In Progress', data: {}, booking: { day: '' }, providerType : providerType }, currentStep: 2 })\r\n }}>\r\n Change\r\n </Button>\r\n }\r\n </>\r\n :\r\n <Button variant=\"secondary\">\r\n Choose Payment Type to Select\r\n </Button>\r\n }\r\n {providerType && providerType !== 'Supervision' ?\r\n <IconButton\r\n className={clsx(classes.expand, {\r\n [classes.expandOpen]: expanded,\r\n })}\r\n onClick={() => handleExpandClick(row.id)}\r\n aria-expanded={expanded}\r\n aria-label=\"show more\"\r\n >\r\n <ExpandMoreIcon />\r\n </IconButton>\r\n :\r\n null\r\n }\r\n </CardActions> \r\n {providerType && providerType !== 'Supervision' ?\r\n <Collapse in={(expanded !== row.id)} timeout=\"auto\" unmountOnExit>\r\n <CardContent> \r\n {row.therapyTypes && row.therapyTypes.map((row) => {return (<Chip size=\"small\" key={row} variant=\"outlined\" label={row} style={{ margin: 2 }} />)})}\r\n </CardContent>\r\n </Collapse> \r\n :\r\n null \r\n } \r\n </Card> \r\n )\r\n }\r\n )}\r\n </Masonry>\r\n { validPsychologists && validPsychologists.length > 0 && !showMoreProviders && !childMode && providerType && (providerType !== 'GP' && providerType !== 'EAP' && providerType !== 'Provisional' && providerType !== 'Supervision' && providerType !== 'Financial' ) ?\r\n <Grid item md={12} style={{ textAlign: \"center\", marginTop: 20 }}>\r\n <Button variant=\"primary\" type=\"submit\" onClick={() => { setShowMoreProviders(true) }}>\r\n Show More Providers\r\n </Button> \r\n </Grid>\r\n : null }\r\n { showMoreProviders ? \r\n <>\r\n <Masonry\r\n breakpointCols={isMobile || currentPsychologist.id !== undefined ? 1 : 3}\r\n className=\"my-masonry-grid\"\r\n columnClassName=\"my-masonry-grid_column\">\r\n\r\n {validPsychologists.map((row, index) => {\r\n return (\r\n <Card className={classes.root} variant=\"outlined\" key={index}>\r\n <CardMedia\r\n className={classes.media}\r\n image={`https://${storageAccountName}.blob.core.windows.net/${containerName}/${row.imageURL}`}\r\n title=\"Psychologist\"\r\n />\r\n <CardContent>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item sm={9}>\r\n <Typography variant=\"h5\" component=\"h3\">\r\n {row.fullname} \r\n </Typography>\r\n <Typography variant=\"subtitle1\" >\r\n {row.providerdescription}\r\n </Typography>\r\n {clientInvite && clientInvite.facetoFaceBooking === 'Y' ?\r\n <Typography variant=\"subtitle2\">\r\n {row.fulladdress}\r\n </Typography>\r\n :\r\n null\r\n }\r\n <Typography variant=\"subtitle2\" style={{ marginTop:20}}>\r\n {`(Next Available Booking: ${row.nextAvailable})`}\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n { props.steps.step2.paymenttype === 'Full Fee' ?\r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={4} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600, textAlign: \"top\" }}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={8} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {row.hourlyRateOverrideGap !== '0' ? row.hourlyRateOverrideGap : row.standardFeeOutOfPocket }\r\n </Typography>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay {row.hourlyrate} on the day\r\n </Typography>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n Receive back {row.hourlyRateOverrideRebate !== '0' ? row.hourlyRateOverrideRebate : row.medicareRebate} from Medicare\r\n </Typography> \r\n </Grid>\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n { props.steps.step2.paymenttype === 'Reduced Gap' ?\r\n <>\r\n {row.isReducedFee === 'Y' ? \r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={4} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600, textAlign: \"top\"}}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={8} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {row.reducedFeeOverrideGap && row.reducedFeeOverrideGap !== '0' ? row.reducedFeeOverrideGap : row.reducedFeeOutOfPocket }\r\n </Typography>\r\n { row.reducedFee === '0' ?\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay $0 on the day\r\n </Typography>\r\n :\r\n <>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay {row.reducedFee} on the day\r\n </Typography>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n Receive back {row.reducedFeeOverrideRebate && row.reducedFeeOverrideRebate !== '0' ? row.reducedFeeOverrideRebate : row.medicareRebate} from Medicare\r\n </Typography>\r\n </>\r\n }\r\n </Grid>\r\n { row.reducedFee !== '0' ?\r\n <Grid item sm={12}>\r\n <Typography variant=\"subtitle2\" style={{ fontWeight:300, fontStyle: 'italic' }}>\r\n Note this provider offers some flexibility, depending on client circumstances\r\n </Typography>\r\n </Grid>\r\n :\r\n null\r\n }\r\n </Grid>\r\n </>\r\n :\r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={4} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600, textAlign: \"top\" }}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={8} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {row.reducedFeeOverrideGap && row.reducedFeeOverrideGap !== '0' ? row.reducedFeeOverrideGap : row.reducedFeeOutOfPocket }\r\n </Typography>\r\n { row.reducedFee === '0' ?\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay $0 on the day\r\n </Typography>\r\n :\r\n <>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay {row.reducedFee} on the day\r\n </Typography>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n Receive back {row.reducedFeeOverrideRebate && row.reducedFeeOverrideRebate !== '0' ? row.reducedFeeOverrideRebate : row.medicareRebate} from Medicare\r\n </Typography>\r\n </>\r\n }\r\n </Grid>\r\n </Grid>\r\n </>\r\n }\r\n </>\r\n :\r\n null\r\n } \r\n <Grid container style={{ marginBottom: 15, marginTop: 10 }}>\r\n {row.areasOfInterest.map((row) => {return (<Chip size=\"small\" key={row} variant=\"outlined\" label={row} style={{ margin: 2 }} />)})}\r\n </Grid>\r\n <Grid container style={{ height: 220 }}>\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={row.bio.substring(0,700)} />\r\n {row.bio.length > 700 ?\r\n <>\r\n ...\r\n <Badge variant=\"secondary\" onClick={()=>moreProviderBio(row.fullname, row.bio)} style={{ marginRight: 5, cursor: 'pointer' }}>\r\n more\r\n </Badge>\r\n </>\r\n :\r\n null\r\n }\r\n </Typography>\r\n </Grid>\r\n </CardContent>\r\n <CardActions disableSpacing>\r\n {props.steps.step2.paymenttype !== '' ?\r\n <>\r\n {currentPsychologist.id === undefined ? \r\n (props.steps.step2.paymenttype === \"Bulk Billed\" && row.bulkBillingAvailable === \"0\" && !props.steps.step2.program) ?\r\n <Button variant=\"secondary\">\r\n Not Available to Bulk Bill\r\n </Button>\r\n :\r\n <Button variant=\"primary\" type=\"submit\" onClick={() => {\r\n setcurrentPsychologist(row)\r\n props.setStepValue({ step2: { ...props.steps.step2, status: 'Completed', data: {...row}, booking: { day: '' }, providerType : providerType }, currentStep: 2 })\r\n }}>\r\n Select\r\n </Button>\r\n : \r\n <Button variant=\"secondary\" type=\"submit\" onClick={() => {\r\n setcurrentPsychologist({})\r\n props.setStepValue({ step2: { ...props.steps.step2, status: 'In Progress', data: {}, booking: { day: '' }, providerType : providerType }, currentStep: 2 })\r\n }}>\r\n Change\r\n </Button>\r\n }\r\n </>\r\n :\r\n <Button variant=\"secondary\">\r\n Choose Payment Type to Select\r\n </Button>\r\n }\r\n <IconButton\r\n className={clsx(classes.expand, {\r\n [classes.expandOpen]: expanded,\r\n })}\r\n onClick={() => handleExpandClick(row.id)}\r\n aria-expanded={expanded}\r\n aria-label=\"show more\"\r\n >\r\n <ExpandMoreIcon />\r\n </IconButton>\r\n </CardActions> \r\n <Collapse in={(expanded !== row.id)} timeout=\"auto\" unmountOnExit>\r\n <CardContent> \r\n {row.therapyTypes && row.therapyTypes.map((row) => {return (<Chip size=\"small\" key={row} variant=\"outlined\" label={row} style={{ margin: 2 }} />)})}\r\n </CardContent>\r\n </Collapse> \r\n </Card> \r\n )\r\n }\r\n )}\r\n </Masonry>\r\n </>\r\n : null \r\n }\r\n </Grid>\r\n {currentPsychologist.id !== undefined ? \r\n <Grid item md={8}>\r\n {props.steps.step2.bookingdate ? \r\n <>\r\n <h4>Your Booking:</h4>\r\n <Grid container spacing={3} style={{ maxWidth: 400, marginTop: 15, marginLeft: 5, backgroundColor: \"white\"}}>\r\n <Grid item md={3} xs={6}>\r\n {providerType && providerType === 'Financial' ?\r\n 'Financial Counsellor:'\r\n :\r\n <>\r\n {providerType && providerType === 'GP' ? \r\n 'GP:'\r\n :\r\n <>\r\n {providerType && providerType === 'Provisional'?\r\n 'Provisional Psychologist'\r\n :\r\n <>\r\n {providerType && providerType === 'Social'?\r\n 'MH Social Worker'\r\n :\r\n <>\r\n {providerType && providerType === 'Nurse'?\r\n 'Mental Health Nurse'\r\n :\r\n <>\r\n {providerType && providerType === 'Occupational'?\r\n 'Occupational Therapist'\r\n :\r\n <>\r\n {providerType && providerType === 'Supervision'?\r\n 'Supervising Psychologist'\r\n :\r\n 'Psychologist'\r\n }\r\n </>\r\n }\r\n </>\r\n }\r\n </>\r\n } \r\n </>\r\n }\r\n </>\r\n }\r\n </>\r\n }\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {currentPsychologist.fullname} \r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Date:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {props.steps.step2.bookingdate && format(new Date(props.steps.step2.bookingdate), \"dd-MM-yyyy\")}\r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Time:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {props.steps.step2.bookingdate && format(new Date(props.steps.step2.bookingdate), \"h:mm aa\")}\r\n </Grid>\r\n {/* <Grid item md={3} xs={6}>\r\n Session URL:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {currentPsychologist.waitingRoomURL}\r\n </Grid> */}\r\n <Grid item md={12}>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item md={6} xs={6}>\r\n <Button variant=\"secondary\" type=\"submit\" onClick={() => {\r\n props.setStepValue({ step2: { ...props.steps.step2, status: 'Completed', data: {...currentPsychologist}, bookingdate: null }, currentStep: 2 })\r\n // step2: { ...props.steps.step2, { status: 'Completed', data: {...currentPsychologist}}, bookingdate: null }\r\n // setbookingConfirmed(false)\r\n }}>\r\n Change\r\n </Button> \r\n </Grid>\r\n <Grid item md={6} xs={6} style={{ textAlign: \"right\"}}>\r\n <Button variant=\"primary\" type=\"submit\" onClick={() => submitPsychologist()}>\r\n Save & Next >\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </>\r\n : \r\n <>\r\n <h4>Available Bookings:</h4>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label>TimeZone</Form.Label>\r\n <OverlayTrigger defaultShow={showpopoverTimeZone} show={showpopoverTimeZone} placement=\"right\" overlay={popoverTimeZone}>\r\n <Autocomplete\r\n id=\"profileTimeZone\"\r\n variant=\"outlined\"\r\n options={timeZone}\r\n getOptionLabel={(option) => option.name}\r\n value={timeZone.find(v => v.systemName === currentTimeZone) || timeZone.find(v => v.systemName === 'AUS Eastern Standard Time')}\r\n onChange={(event, newValue) => handleTimeZoneAutocompleteChange('TimeZone', event, newValue)}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"TimeZoneSelector\"\r\n style={{backgroundColor: \"white\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </OverlayTrigger>\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n <div className='register-table-responsive'>\r\n <Table bordered hover style={{ backgroundColor: \"white\"}} className='register-table'>\r\n <thead className='register-thead'>\r\n <tr className='register-tr'>\r\n <th>Date</th>\r\n <th>From</th>\r\n <th>To</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody className='register-tbody'>\r\n {matchingAvailability && matchingAvailability.map((row) => {\r\n if(rowcount < 20) {\r\n rowcount++\r\n return(\r\n <tr key={`key_${rowcount}`} className='register-tr'>\r\n <td>{format(new Date(row.fromDate), \"dd-MM-yyyy\")}</td>\r\n <td>{format(new Date(row.fromDate), \"HH:mm aa\")}</td>\r\n <td>{format(new Date(row.toDate), \"HH:mm aa\")}</td>\r\n <td><Button onClick={() => startNewBooking(row.fromDate)} >Book</Button></td>\r\n </tr>\r\n )\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })\r\n }\r\n </tbody>\r\n </Table>\r\n </div>\r\n </>\r\n }\r\n </Grid>\r\n : \r\n null \r\n }\r\n {/* <Grid item md={12} xs={12}>\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item md={3} xs={6}>\r\n </Grid>\r\n <Grid item md={3} xs={6} style={{ textAlign: \"right\"}}>\r\n {!bookingConfirmed ? \r\n <Button variant={!bookingConfirmed ? \"secondary\" : \"primary\"} type=\"submit\">\r\n Save & Next >\r\n </Button> \r\n :\r\n <Button variant=\"primary\" type=\"submit\" onClick={() => submitPsychologist()}>\r\n Save & Next >\r\n </Button>\r\n } \r\n </Grid>\r\n </Grid>\r\n </Grid> */}\r\n </Grid>\r\n </Paper>\r\n\r\n <Modal show={showNewBooking} onHide={()=>setShowNewBooking(false)} dialogClassName=\"new-bookingDialog-modal\" centered>\r\n <Modal.Header closeButton className=\"new-booking-modal\">\r\n <Modal.Title>New Booking</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"new-booking-modal\" style={{ backgroundColor: 'rgb(245,245,245)' }}>\r\n <Grid container spacing={2}>\r\n <Grid item md={3} xs={6}>\r\n {providerType && providerType === 'Financial' ?\r\n 'Financial Counsellor:'\r\n :\r\n <>\r\n {providerType && providerType === 'GP' ? \r\n 'GP:'\r\n :\r\n <>\r\n {providerType && providerType === 'Provisional'?\r\n 'Provisional Psychologist'\r\n :\r\n <>\r\n {providerType && providerType === 'Social'?\r\n 'MH Social Worker'\r\n :\r\n <>\r\n {providerType && providerType === 'Nurse'?\r\n 'Mental Health Nurse'\r\n :\r\n <>\r\n {providerType && providerType === 'Occupational'?\r\n 'Occupational Therapist'\r\n :\r\n <>\r\n {providerType && providerType === 'Supervision'?\r\n 'Supervising Psychologist'\r\n :\r\n 'Psychologist'\r\n }\r\n </>\r\n }\r\n </>\r\n }\r\n </>\r\n } \r\n </>\r\n }\r\n </>\r\n }\r\n </>\r\n }\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {currentPsychologist.fullname} \r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Date:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {currentbookingdate && format(new Date(currentbookingdate), \"dd-MM-yyyy\")}\r\n </Grid>\r\n <Grid item md={3} xs={6}>\r\n Time:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {currentbookingdate && format(new Date(currentbookingdate), \"HH:mm aa\")}\r\n </Grid>\r\n {/* <Grid item md={3} xs={6}>\r\n Session URL:\r\n </Grid>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n {currentPsychologist.waitingRoomURL}\r\n </Grid> */}\r\n </Grid>\r\n </Modal.Body>\r\n <Modal.Footer className=\"new-booking-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowNewBooking(false)} className=\"lightButtonOutlinedLarge\">\r\n Close\r\n </Button>\r\n <Button variant=\"primary\" onClick={() => saveAppointment({ bookingdate: currentbookingdate, psychologistID: currentPsychologist.id, psychologistname : currentPsychologist.fullname , waitingRoomURL: currentPsychologist.waitingRoomURL, clientFirstName : '', clientEmail : ''})}>\r\n Book Now\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n <Modal show={showProviderBio} onHide={()=>setShowProviderBio(false)} dialogClassName=\"invite-modal\" >\r\n <Modal.Header closeButton className=\"invite-modal\">\r\n <Modal.Title>{providerBioFullName}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"invite-modal\" style={{ backgroundColor: 'rgb(245,245,245)' }}>\r\n <Grid container >\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={providerBioBio} />\r\n </Typography>\r\n </Grid>\r\n </Modal.Body>\r\n <Modal.Footer className=\"invite-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowProviderBio(false)} className=\"lightButtonOutlinedLarge\">\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n </>\r\n )\r\n }\r\n}\r\n\r\nfunction ClientRegistrationForm(props) {\r\n const useStyles = makeStyles((theme) => ({\r\n root: {\r\n width: '100%',\r\n maxWidth: 340,\r\n paddingRight: 20,\r\n marginTop: 14,\r\n marginLeft: 20\r\n },\r\n linkItem: {\r\n minWidth: 50,\r\n },\r\n link: {\r\n color: 'rgba(0,0,0,0.7)',\r\n fontSize: 12,\r\n fontWeight: 400,\r\n },\r\n linkSelected: {\r\n color: 'rgba(0,0,0,1)',\r\n fontSize: 12,\r\n fontWeight: 600,\r\n },\r\n }));\r\n\r\n const classes = useStyles()\r\n\r\n const { invitetoken } = useParams();\r\n const dispatch = useDispatch()\r\n\r\n const validateMedicareNumber = require('validate-medicare-number');\r\n const [showPassword, setShowPassword] = useState(false);\r\n const providerType = props.providerType;\r\n const timeZone = useSelector(state => state.reference.TimeZone);\r\n const emailDuplicate = useSelector(state => state.registration.EmailDuplicate);\r\n const [showEmailDuplicate, setShowEmailDuplicate] = useState(false);\r\n\r\n const checkEmailDuplicate = useCallback((newEmailDuplicate) => {\r\n // Check if email address was found\r\n if (newEmailDuplicate)\r\n {\r\n setShowEmailDuplicate(true);\r\n }\r\n // Clear flag\r\n dispatch(Registration.actions.emailDuplicateClear());\r\n },[dispatch])\r\n\r\n\r\n useEffect(() => {\r\n // \r\n // Some Commentary about this\r\n // Essentially when someone creates a submits a form, a processing window appears and disappears once the form is processed\r\n // To do this a Redux variable - <formtype>Form is set with a number - null is not set, 1 is processing and 2 is an error state \r\n //\r\n if (emailDuplicate)\r\n {\r\n checkEmailDuplicate(emailDuplicate);\r\n }\r\n },[emailDuplicate,checkEmailDuplicate]);\r\n\r\n \r\n // now init the fields with values so that Formik can manage the touched state\r\n const clientInit = {\r\n firstname: '', \r\n preferredname: '',\r\n surname: '', \r\n email: '', \r\n phone: '',\r\n clientFundingTypeID: 1,\r\n dob: undefined,\r\n gender: '',\r\n occupation: '',\r\n eapworkplace: '',\r\n fulladdress: '',\r\n latitude: '',\r\n longitude: '',\r\n postcode: '',\r\n timezone: props.steps.step2.userTZ,\r\n clientAreasOfInterest: [...props.steps.step1.data],\r\n hopeToGetFromTreatment: '',\r\n emergencycontactname1: '',\r\n emergencycontactphone1: '',\r\n emergencycontactrelation1: '',\r\n emergencycontactname2: '',\r\n emergencycontactphone2: '',\r\n emergencycontactrelation2: '',\r\n profilePassword: '',\r\n profilePasswordConfirmation: '',\r\n medicareno: '',\r\n medicarereferenceno: '',\r\n medicareexpirydate: '',\r\n appointmenttype: '0',\r\n MHCPFile: '',\r\n invitetoken: invitetoken,\r\n agreementAcceptance:false,\r\n clientid : null,\r\n paymenttype: 'Reduced Gap',\r\n privateClient: false,\r\n referrerid: null,\r\n abn : '',\r\n businessName : '',\r\n businessAddress : '',\r\n backgroundinformation : '',\r\n gpname : '',\r\n gpclinicname: '',\r\n healthCareCard: props.steps.step2.paymenttype === 'Bulk Billed' ? 'Y' : '',\r\n unemployed: 'NA',\r\n naturalDisaster: 'NA',\r\n reducedGapReason: 'N/A',\r\n bulkBilledReason: 'N/A',\r\n consentToShareWithGP: 'N/A',\r\n gpmentalhealthplan12months: 'N/A',\r\n gpperinatal: 'N/A',\r\n contract: false,\r\n providerType: props.providerType,\r\n ndisnumber : '',\r\n ndisdatefrom : undefined,\r\n ndisdateto : undefined,\r\n ndisplanmanagementprovider : '',\r\n ndisemailforinvoices : '',\r\n ndisdiagnosishistory : '',\r\n ndissupportcoordinator : '',\r\n ndissupportcoordinatorphone : '',\r\n locality: '',\r\n pronouns: '',\r\n indigenous: 'N',\r\n program: undefined,\r\n programid: 0\r\n }\r\n\r\n // get the invite (if any) from state and merge with the initialised fields\r\n const inviteInit = useSelector(state => state.registration.ClientInvite)\r\n const [clientInvite, setClientInvite] = useState({...clientInit, ...inviteInit, steps: props.steps});\r\n const [previousSteps, setPreviousSteps] = useState() \r\n const [checkedProgram, setCheckedProgram] = useState([]);\r\n \r\n // when user submits payment type form, we set it to the steps object, thus need to reload the formik form values\r\n useEffect( ()=> {\r\n if (previousSteps !== props.steps)\r\n {\r\n setClientInvite({ ...clientInvite, \r\n steps: { ...props.steps },\r\n program: props.steps.step2.fixAOI,\r\n programid: props.steps.step2.programid, \r\n gpperinatal: props.steps.step2.programid && props.steps.step2.programid === 1 ? 'Y' : 'N/A',\r\n paymenttype: (props.steps.step2.paymenttype === '' && providerType !== 'Provisional' && providerType !== 'GP') ? 'Reduced Gap' : providerType === 'Provisional' ? 'Provisional' : providerType === 'GP' ? 'Bulk Billed' : providerType === 'Supervision' ? 'Supervision' : props.steps.step2.paymenttype, \r\n unemployed: props.steps.step2.unemployed,\r\n naturalDisaster: props.steps.step2.naturalDisaster,\r\n bulkBilledReason: props.steps.step2.bulkBilledReason,\r\n reducedGapReason: props.steps.step2.reducedGapReason,\r\n healthCareCard: props.steps.step2.paymenttype === 'Bulk Billed' ? 'Y' : ''\r\n })\r\n setPreviousSteps(props.steps)\r\n }\r\n }, [props.steps.step2,props.steps,providerType,previousSteps])\r\n\r\n // Define Program Question responses \r\n const programPopulationOptions = [\r\n {\r\n \"id\" : \"1\",\r\n \"index\" : \"1\",\r\n \"name\" : \"Aboriginal and/or Torres Strait Islander\",\r\n },\r\n {\r\n \"id\" : \"2\",\r\n \"index\" : \"2\",\r\n \"name\": \"Culturally and linguistically diverse\",\r\n },\r\n {\r\n \"id\": \"3\",\r\n \"index\": \"3\",\r\n \"name\": \"Migrant and Refugee\",\r\n },\r\n {\r\n \"id\" : \"4\",\r\n \"index\": \"4\",\r\n \"name\": \"Under 20\",\r\n },\r\n {\r\n \"id\" : \"5\",\r\n \"index\": \"5\",\r\n \"name\": \"Rural and Remote\",\r\n }\r\n ]\r\n\r\n function getIndex(value, arr, prop) {\r\n for(var i = 0; i < arr.length; i++) {\r\n if(arr[i][prop] === value) {\r\n return i;\r\n }\r\n }\r\n return -1; // where the value doesn't exist\r\n }\r\n\r\n const handleToggleProgram = (value) => () => {\r\n const currentIndex = getIndex(value.id, checkedProgram, 'id') //checked.find(r => r.id === value.id);\r\n const newChecked = [...checkedProgram];\r\n if (currentIndex === -1) {\r\n newChecked.push(value);\r\n } else {\r\n newChecked.splice(currentIndex, 1);\r\n }\r\n setCheckedProgram(newChecked);\r\n };\r\n\r\n function submitForm(data) {\r\n postClient(data)\r\n }\r\n\r\n function postClient(data) {\r\n //\r\n const formData = new FormData();\r\n formData.append('privateClient',data['privateClient']) \r\n formData.append('firstname',data['firstname'])\r\n formData.append('preferredname',data['preferredname'])\r\n formData.append('surname',data['surname'])\r\n formData.append('email',data['email'])\r\n formData.append('gender',data['gender'])\r\n formData.append('dob',data['dob'])\r\n formData.append('phone',data['phone'])\r\n formData.append('fulladdress',data['fulladdress'])\r\n formData.append('profilePassword',data['profilePassword'])\r\n formData.append('emergencycontactname1',data['emergencycontactname1'])\r\n formData.append('emergencycontactphone1',data['emergencycontactphone1'])\r\n formData.append('emergencycontactrelation1',data['emergencycontactrelation1'])\r\n formData.append('emergencycontactname2',data['emergencycontactname2'])\r\n formData.append('emergencycontactphone2',data['emergencycontactphone2'])\r\n formData.append('emergencycontactrelation2',data['emergencycontactrelation2'])\r\n formData.append('medicareno',data['medicareno'])\r\n formData.append('medicarereferenceno',data['medicarereferenceno'])\r\n formData.append('medicareexpirydate',data['medicareexpirydate'])\r\n formData.append('clientFundingTypeID',data['clientFundingTypeID'])\r\n formData.append('occupation',data['occupation'])\r\n formData.append('eapworkplace',data['eapworkplace'])\r\n formData.append('latitude',data['latitude'])\r\n formData.append('longitude',data['longitude'])\r\n formData.append('postcode',data['postcode'])\r\n formData.append('hopeToGetFromTreatment',data['hopeToGetFromTreatment'])\r\n formData.append('appointmenttype',data['appointmenttype'])\r\n formData.append('invitetoken',data['invitetoken'])\r\n formData.append('paymentType',data['paymenttype'])\r\n formData.append('MHCPFile',data['MHCPFile'])\r\n formData.append('psychologistid',props.steps.step2.data.id)\r\n formData.append('newbookingdate',props.steps.step2.bookingdate)\r\n formData.append('psychologistname',props.steps.step2.data.fullname)\r\n formData.append('waitingRoomURL',props.steps.step2.data.waitingRoomURL)\r\n formData.append('timezone',data['timezone'] ? data['timezone'] : props.steps.step2.userTZ)\r\n formData.append('providertype',props.steps.step2.providerType)\r\n formData.append('clientAreasOfInterest',[...props.steps.step1.data].map(aoi => aoi.issue).join(\",\"))\r\n formData.append('referrerid',clientInvite.referrerid)\r\n formData.append('abn',data['abn'])\r\n formData.append('businessname', data['businessName'])\r\n formData.append('businessaddress',data['businessAddress'])\r\n formData.append('backgroundinformation',data['backgroundinformation'])\r\n formData.append('gpmentalhealthplan12months',data['gpmentalhealthplan12months'])\r\n formData.append('healthCareCard',data['healthCareCard'])\r\n formData.append('unemployed',data['unemployed'])\r\n formData.append('naturalDisaster',data['naturalDisaster'])\r\n formData.append('consentToShareWithGP',data['consentToShareWithGP'])\r\n formData.append('gpperinatal',data['gpperinatal'])\r\n // Depending on payment type populate with correct reason\r\n if (data['paymenttype'] === 'Reduced Gap')\r\n {\r\n formData.append('bulkBilledReason',data['reducedGapReason'])\r\n }\r\n else\r\n {\r\n formData.append('bulkBilledReason',data['bulkBilledReason'])\r\n }\r\n formData.append('gpname',data['gpname'])\r\n formData.append('gpclinicname',data['gpclinicname'])\r\n formData.append('ndisnumber',data['ndisnumber'])\r\n formData.append('ndisdatefrom',data['ndisdatefrom'])\r\n formData.append('ndisdateto',data['ndisdateto'])\r\n formData.append('ndisplanmanagementprovider',data['ndisplanmanagementprovider'])\r\n formData.append('ndisemailforinvoices',data['ndisemailforinvoices'])\r\n formData.append('ndisdiagnosishistory',data['ndisdiagnosishistory'])\r\n formData.append('ndissupportcoordinator',data['ndissupportcoordinator'])\r\n formData.append('ndissupportcoordinatorphone',data['ndissupportcoordinatorphone'])\r\n formData.append('pronouns',data['pronouns'])\r\n formData.append('indigenous',data['indigenous'])\r\n formData.append('programpopulation', checkedProgram ? checkedProgram.map(pp => pp.name).join(\",\") : undefined)\r\n formData.append('specialisttype',clientInvite.specialisttype)\r\n //\r\n formData.append('programid',data['programid'])\r\n // \r\n // Send to API\r\n //\r\n dispatch(Registration.actions.postClientData({formData}))\r\n props.setStepValue({ step3: { status: 'Completed', data: data }, currentStep: 4 }) \r\n }\r\n\r\n const validationSchema = Yup.object().shape({\r\n firstname: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(200,\"Too Long\")\r\n .required(\"First Name is required\"),\r\n preferredname: Yup.string()\r\n .max(200,\"Too Long\"),\r\n surname: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(200,\"Too Long\")\r\n .required(\"Surname is required\"),\r\n dob: Yup.string()\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType !== 'Supervision'),\r\n then: Yup.string().required(\"Date of Birth is required\")\r\n .test(\"dob\", \"Please enter a valid date\", function (value) {\r\n return ((differenceInYears(new Date(), new Date(value)) >= 1) && (differenceInYears(new Date(), new Date(value)) <= 100)) \r\n }),\r\n }),\r\n email: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(200,\"Too Long\")\r\n .email(\"Enter a valid email\")\r\n .required(\"Email is required\"),\r\n phone: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(12,\"Too Long\")\r\n .required(\"Phone Number is required\"),\r\n fulladdress: Yup.string()\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType !== 'NDIS'),\r\n then: Yup.string().min(4,\"Too Short\")\r\n .max(80,\"Too Long\")\r\n .required(\"Address is required\"),\r\n }),\r\n pronouns: Yup.string()\r\n .max(20,\"Too Long\"),\r\n profilePassword: Yup.string()\r\n .min(8,\"Too Short\")\r\n .max(50,\"Too Long\")\r\n .required(\"Password is required\"),\r\n hopeToGetFromTreatment: Yup.string()\r\n .max(4000,\"Too Long\"),\r\n emergencycontactname1: Yup.string()\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Psychologist'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact is required\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Clinical'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact is required\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Provisional'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact is required\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Social'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact is required\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Nurse'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact is required\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Occupational'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact is required\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'EAP'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact is required\"),\r\n }), \r\n emergencycontactrelation1: Yup.string()\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Psychologist'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(50,\"Too Long\")\r\n .required(\"Emergency Contact Relationship is required\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Clinical'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(50,\"Too Long\")\r\n .required(\"Emergency Contact Relationship is required\"),\r\n }) \r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Provisional'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(50,\"Too Long\")\r\n .required(\"Emergency Contact Relationship is required\"),\r\n }) \r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Social'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(50,\"Too Long\")\r\n .required(\"Emergency Contact Relationship is required\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Nurse'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(50,\"Too Long\")\r\n .required(\"Emergency Contact Relationship is required\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Occupational'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(50,\"Too Long\")\r\n .required(\"Emergency Contact Relationship is required\"),\r\n }) \r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'EAP'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact Relationship is required\"),\r\n }), \r\n emergencycontactphone1: Yup.string()\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Psychologist'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact phone number is required\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Clinical'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact phone number is required\"),\r\n }) \r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Provisional'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact phone number is required\"),\r\n }) \r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Social'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact phone number is required\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Nurse'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact phone number is required\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Occupational'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact phone number is required\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'EAP'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Emergency Contact phone number is required\"),\r\n }), \r\n emergencycontactname2: Yup.string()\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Psychologist'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Clinical'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n }) \r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Provisional'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n }) \r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Social'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n }) \r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Nurse'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n }) \r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Occupational'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'EAP'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n }), \r\n emergencycontactrelation2: Yup.string()\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Psychologist'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(50,\"Too Long\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Clinical'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(50,\"Too Long\"),\r\n }) \r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Provisional'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(50,\"Too Long\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Social'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(50,\"Too Long\"),\r\n }) \r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Nurse'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(50,\"Too Long\"),\r\n }) \r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Occupational'),\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(50,\"Too Long\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'EAP'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n }), \r\n emergencycontactphone2: Yup.string()\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Psychologist'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Clinical'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n }) \r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Provisional'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Social'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n }) \r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Nurse'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n }) \r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'Occupational'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n })\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => (providerType === 'EAP'),\r\n then: Yup.string().min(6,\"Too Short\")\r\n .max(20,\"Too Long\"),\r\n }), \r\n profilePasswordConfirmation: Yup.string()\r\n .min(8,\"Too Short\")\r\n .required(\"Password is required\")\r\n .oneOf([Yup.ref('profilePassword'), null], 'Passwords must match'),\r\n medicareno: Yup.string()\r\n .when(['providerType','contract'],\r\n {\r\n is: (providerType,contract) => (providerType === 'Psychologist' && !contract),\r\n then: Yup.string().min(10,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Card Number is required\")\r\n .test('cardValid','A Valid Medicare Number is required',(value) => {\r\n if (value)\r\n {\r\n return validateMedicareNumber(value)\r\n }\r\n else\r\n {\r\n return false;\r\n }\r\n }),\r\n })\r\n .when(['providerType','contract'],\r\n {\r\n is: (providerType,contract) => (providerType === 'Social' && !contract),\r\n then: Yup.string().min(10,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Card Number is required\")\r\n .test('cardValid','A Valid Medicare Number is required',(value) => {\r\n if (value)\r\n {\r\n return validateMedicareNumber(value)\r\n }\r\n else\r\n {\r\n return false;\r\n }\r\n }),\r\n })\r\n .when(['providerType','contract'],\r\n {\r\n is: (providerType,contract) => (providerType === 'Nurse' && !contract),\r\n then: Yup.string().min(10,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Card Number is required\")\r\n .test('cardValid','A Valid Medicare Number is required',(value) => {\r\n if (value)\r\n {\r\n return validateMedicareNumber(value)\r\n }\r\n else\r\n {\r\n return false;\r\n }\r\n }),\r\n })\r\n .when(['providerType','contract'],\r\n {\r\n is: (providerType,contract) => (providerType === 'Occupational' && !contract),\r\n then: Yup.string().min(10,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Card Number is required\")\r\n .test('cardValid','A Valid Medicare Number is required',(value) => {\r\n if (value)\r\n {\r\n return validateMedicareNumber(value)\r\n }\r\n else\r\n {\r\n return false;\r\n }\r\n }),\r\n })\r\n .when(['providerType','contract'],\r\n {\r\n is: (providerType,contract) => (providerType === 'Clinical' && !contract),\r\n then: Yup.string().min(10,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Card Number is required\")\r\n .test('cardValid','A Valid Medicare Number is required',(value) => {\r\n if (value)\r\n {\r\n return validateMedicareNumber(value)\r\n }\r\n else\r\n {\r\n return false;\r\n }\r\n }),\r\n }) \r\n .when(['providerType','contract'],\r\n {\r\n is: (providerType,contract) => (providerType === 'GP' && !contract),\r\n then: Yup.string().min(10,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Card Number is required\")\r\n .test('cardValid','A Valid Medicare Number is required',(value) => {\r\n if (value)\r\n {\r\n return validateMedicareNumber(value)\r\n }\r\n else\r\n {\r\n return false;\r\n }\r\n }),\r\n }), \r\n ndisnumber: Yup.string()\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => providerType === 'NDIS',\r\n then: Yup.string().min(3,\"Too Short\")\r\n .max(50,\"Too Long\")\r\n .required(\"NDIS Number is required\")\r\n }), \r\n medicarereferenceno: Yup.number()\r\n .when(['providerType','contract'],\r\n {\r\n is: (providerType,contract) => (providerType === 'Psychologist' && !contract),\r\n then: Yup.number().typeError('you must specify a number')\r\n .test('len', 'Must be 1 number', (val) => { if(val) return val.toString().length === 1; })\r\n .required(\"Medicare Reference Number is required\"),\r\n })\r\n .when(['providerType','contract'],\r\n {\r\n is: (providerType,contract) => (providerType === 'Social' && !contract),\r\n then: Yup.number().typeError('you must specify a number')\r\n .test('len', 'Must be 1 number', (val) => { if(val) return val.toString().length === 1; })\r\n .required(\"Medicare Reference Number is required\"),\r\n })\r\n .when(['providerType','contract'],\r\n {\r\n is: (providerType,contract) => (providerType === 'Nurses' && !contract),\r\n then: Yup.number().typeError('you must specify a number')\r\n .test('len', 'Must be 1 number', (val) => { if(val) return val.toString().length === 1; })\r\n .required(\"Medicare Reference Number is required\"),\r\n })\r\n .when(['providerType','contract'],\r\n {\r\n is: (providerType,contract) => (providerType === 'Occupational' && !contract),\r\n then: Yup.number().typeError('you must specify a number')\r\n .test('len', 'Must be 1 number', (val) => { if(val) return val.toString().length === 1; })\r\n .required(\"Medicare Reference Number is required\"),\r\n })\r\n .when(['providerType','contract'],\r\n {\r\n is: (providerType,contract) => (providerType === 'Clinical' && !contract),\r\n then: Yup.number().typeError('you must specify a number')\r\n .test('len', 'Must be 1 number', (val) => { if(val) return val.toString().length === 1; })\r\n .required(\"Medicare Reference Number is required\"),\r\n })\r\n .when(['providerType','contract'],\r\n {\r\n is: (providerType,contract) => (providerType === 'GP' && !contract),\r\n then: Yup.number().typeError('you must specify a number')\r\n .test('len', 'Must be 1 number', (val) => { if(val) return val.toString().length === 1; })\r\n .required(\"Medicare Reference Number is required\"),\r\n }),\r\n medicareexpirydate: Yup.string()\r\n .when(['providerType','contract'],\r\n {\r\n is: (providerType,contract) => (providerType === 'Psychologist' && !contract),\r\n then: Yup.string().min(5,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Expiry is required\"),\r\n })\r\n .when(['providerType','contract'],\r\n {\r\n is: (providerType,contract) => (providerType === 'Social' && !contract),\r\n then: Yup.string().min(5,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Expiry is required\"),\r\n })\r\n .when(['providerType','contract'],\r\n {\r\n is: (providerType,contract) => (providerType === 'Nurse' && !contract),\r\n then: Yup.string().min(5,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Expiry is required\"),\r\n })\r\n .when(['providerType','contract'],\r\n {\r\n is: (providerType,contract) => (providerType === 'Occupational' && !contract),\r\n then: Yup.string().min(5,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Expiry is required\"),\r\n })\r\n .when(['providerType','contract'],\r\n {\r\n is: (providerType,contract) => (providerType === 'Clinical' && !contract),\r\n then: Yup.string().min(5,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Expiry is required\"),\r\n })\r\n .when(['providerType','contract'],\r\n {\r\n is: (providerType,contract) => (providerType === 'GP' && !contract),\r\n then: Yup.string().min(5,\"Too Short\")\r\n .max(10,\"Too Long\")\r\n .required(\"Medicare Expiry is required\"),\r\n }),\r\n agreementAcceptance: Yup.boolean()\r\n .oneOf([true],'You must accept the Rural Health Connect Terms and Conditions'),\r\n abn: Yup.string()\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => providerType === 'Financial',\r\n then: Yup.string().max(20,\"Too Long\"),\r\n }),\r\n businessName: Yup.string()\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => providerType === 'Financial',\r\n then: Yup.string().max(250,\"Too Long\"),\r\n }),\r\n businessAddress: Yup.string()\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => providerType === 'Financial',\r\n then: Yup.string().max(200,\"Too Long\"),\r\n }),\r\n backgroundinformation: Yup.string()\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => providerType === 'Financial',\r\n then: Yup.string().max(5000,\"Too Long\"),\r\n }),\r\n eapworkplace: Yup.string()\r\n .when(['providerType'],\r\n {\r\n is: (providerType) => providerType === 'EAP',\r\n then: Yup.string().required('Workplace is required')\r\n }), \r\n healthCareCard: Yup.string() \r\n .when(['providerType','paymenttype'],\r\n {\r\n is: (providerType,paymenttype) => paymenttype === 'Bulk Billed' && (providerType === 'Clinical' || providerType === 'Psychologist' || providerType === 'Social' || providerType === 'Nurse' || providerType === 'Occupational'),\r\n then: Yup.string().oneOf(['Y', 'N'])\r\n .required('Please advise if you have a Health Care Card')\r\n }),\r\n });\r\n\r\n // console.log('Client Invite',clientInvite)\r\n\r\n return (\r\n <>\r\n <Formik\r\n enableReinitialize={true}\r\n initialValues={clientInvite}\r\n validationSchema = {validationSchema}\r\n onSubmit={(values, actions) => {\r\n submitForm(values);\r\n // actions.setSubmitting(false);\r\n }}\r\n >\r\n {props => {\r\n const { values, errors, touched, handleChange, handleBlur, handleSubmit, setFieldValue } = props;\r\n const change = (name,e) => { e.persist(); handleChange(e); };\r\n return (\r\n <form noValidate={true} autoComplete=\"off\" onSubmit={handleSubmit} >\r\n\r\n <Paper style={{ backgroundColor: \"rgb(245,245,245)\", padding: 20 }} >\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-end\">\r\n <Grid item md={6} xs={12}>\r\n {providerType && (providerType === 'EAP' || providerType === 'NDIS') ?\r\n <>\r\n {providerType && (providerType === 'NDIS') ?\r\n <h2>NDIS Registration</h2>\r\n :\r\n <h2>Register</h2>\r\n }\r\n </>\r\n :\r\n <h2>3. Register</h2>\r\n }\r\n </Grid>\r\n <Grid item md={3} xs={12} style={{ fontStyle: \"italic\", fontWeight: 400, textAlign: \"right\", paddingBottom: 4, fontSize: 12 }}>\r\n * indicates required fields\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n {providerType !== 'Supervision' ? \r\n <>\r\n {providerType === 'NDIS' ? \r\n <>\r\n <Alert severity=\"info\" style={{ marginBottom: 10, marginTop: 8, fontSize: 14 }}>\r\n PLEASE NOTE - Please enter these details and we will be in contact to discuss needs and goals to find the most suitable psychologist.\r\n </Alert> \r\n </>\r\n :\r\n <>\r\n {values.message ? (\r\n <Alert severity=\"info\" style={{ marginBottom: 10, marginTop: 8, fontSize: 14 }}>\r\n {values.message}\r\n </Alert>) \r\n : null\r\n }\r\n </>\r\n }\r\n </>\r\n :\r\n <Alert severity=\"info\" style={{ marginBottom: 10, marginTop: 8, fontSize: 14 }}>\r\n PLEASE NOTE - Existing Providers with Rural Health Connect will need to use a different email address to access Supervison services.\r\n </Alert> \r\n }\r\n </Col>\r\n </Row>\r\n <hr style={{ marginTop: 4 }}></hr>\r\n <Row>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>First Name *</Form.Label>\r\n <Form.Control type=\"text\" name=\"firstname\" value={values.firstname} onChange={change.bind(null, \"firstname\")} autoComplete='new-password' isInvalid={touched.firstname && !!errors.firstname} isValid={touched.firstname && !errors.firstname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.firstname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Surname *</Form.Label>\r\n <Form.Control type=\"text\" name=\"surname\" value={values.surname} onChange={change.bind(null, \"surname\")} autoComplete='new-password' isInvalid={touched.surname && !!errors.surname} isValid={touched.surname && !errors.surname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.surname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Preferred Name (Optional)</Form.Label>\r\n <Form.Control type=\"text\" name=\"preferredname\" value={values.preferredname} onChange={change.bind(null, \"preferredname\")} autoComplete='new-password' isInvalid={touched.preferredname && !!errors.preferredname} isValid={touched.preferredname && !errors.preferredname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.preferredname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n {providerType !== 'Supervision' ? \r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Gender</Form.Label>\r\n <Form.Control as=\"select\" name=\"gender\" value={values.gender} onChange={change.bind(null, \"gender\")} >\r\n <option value=\"Prefer not to say\">Prefer not to say</option>\r\n <option value=\"Female\">Female</option>\r\n <option value=\"Male\">Male</option>\r\n <option value=\"Other\">Other</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n :\r\n null\r\n }\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Pronouns (Optional)</Form.Label>\r\n <Form.Control type=\"text\" name=\"pronouns\" value={values.pronouns} onChange={change.bind(null, \"pronouns\")} autoComplete='new-password' isInvalid={touched.pronouns && !!errors.pronouns} isValid={touched.pronouns && !errors.pronouns}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.pronouns}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n {providerType !== 'Supervision' ? \r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Date of Birth *</Form.Label>\r\n <Form.Control type=\"date\" name=\"dob\" value={values.dob} onChange={change.bind(null, \"dob\")} isInvalid={touched.dob && !!errors.dob} isValid={touched.dob && !errors.dob} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.dob}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n :\r\n null\r\n }\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Email *</Form.Label>\r\n <Form.Control \r\n type=\"text\" \r\n name=\"email\" \r\n value={values.email} \r\n onChange={change.bind(null, \"email\")} \r\n onBlur={e => {\r\n handleBlur(e);\r\n dispatch(Registration.actions.emailDuplicate(e.currentTarget.value));\r\n }}\r\n isInvalid={touched.email && !!errors.email} \r\n isValid={touched.email && !errors.email} \r\n autoComplete='new-password' \r\n />\r\n <Form.Control.Feedback type=\"invalid\">{errors.email}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Phone Number *</Form.Label>\r\n <Form.Control type=\"text\" name=\"phone\" value={values.phone} onChange={change.bind(null, \"phone\")} isInvalid={touched.phone && !!errors.phone} isValid={touched.phone && !errors.phone} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.phone}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n { providerType !== 'Supervision' && providerType !== 'EAP' && providerType !== 'NDIS' ?\r\n <Col md=\"3\">\r\n <Form.Group >\r\n {providerType && providerType === 'EAP' ?\r\n <Form.Label>Job Title (if relevant)</Form.Label>\r\n :\r\n <Form.Label>Occupation </Form.Label>\r\n }\r\n <Form.Control type=\"text\" name=\"occupation\" value={values.occupation} onChange={change.bind(null, \"occupation\")} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col> \r\n :\r\n null\r\n }\r\n </Row>\r\n {providerType !== 'NDIS' ?\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Do you identify as Aboriginal and/or Torres Strait islander</Form.Label>\r\n <Form.Control as=\"select\" name=\"indigenous\" value={values.indigenous} onChange={change.bind(null, \"indigenous\")} >\r\n <option value=\"N\">No</option>\r\n <option value=\"Y\">Yes</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n :\r\n null\r\n }\r\n {values.program ?\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Do you identify as any of the following populations that we are particularly supporting via this program? (select all that apply)</Form.Label>\r\n <Row>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {programPopulationOptions.map(row => {\r\n if(row.index <= programPopulationOptions.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = checkedProgram.find(r => r.id === row.id);\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleToggleProgram(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.name}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })\r\n }\r\n </List>\r\n </Col>\r\n <Col md=\"6\">\r\n <List className={classes.root}>\r\n {programPopulationOptions.map(row => {\r\n if(row.index > programPopulationOptions.length/2)\r\n {\r\n const labelId = `checkbox-list-label-${row.id}`;\r\n var isChecked = checkedProgram.find(r => r.id === row.id);\r\n return (\r\n <ListItem key={row.id} role={undefined} dense button onClick={handleToggleProgram(row)}>\r\n <ListItemIcon style={{ minWidth: 40 }}>\r\n <Checkbox\r\n edge=\"start\"\r\n checked={isChecked !== undefined}\r\n tabIndex={-1}\r\n disableRipple\r\n inputProps={{ 'aria-labelledby': labelId }}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={labelId} style={{ fontSize: 12 }} \r\n disableTypography \r\n primary={<Typography className={isChecked !== undefined ? classes.linkSelected : classes.link}>{row.name}</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n );\r\n }\r\n else\r\n {\r\n return null\r\n }\r\n })\r\n }\r\n </List>\r\n </Col>\r\n </Row>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n :\r\n null\r\n }\r\n <Row>\r\n {providerType !== 'NDIS' ?\r\n <Col md=\"6\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label>Home Address (start typing to search) *</Form.Label>\r\n <PlacesAutoComplete \r\n currentID={0}\r\n currentfulladdress={values.fulladdress}\r\n setcurrentfulladdress = {(value) => setFieldValue(\"fulladdress\", value)}\r\n setcurrentLatitude = {(value) => setFieldValue(\"latitude\", value)} \r\n setcurrentLongitude = {(value) => setFieldValue(\"longitude\", value)}\r\n setcurrentPostCode = {(value) => setFieldValue(\"postcode\", value)}\r\n isInvalid={touched.fulladdress && !!errors.fulladdress} \r\n isValid={touched.fulladdress && !errors.fulladdress} \r\n />\r\n {touched.fulladdress && !!errors.fulladdress ? (<p className='error-help'>{errors.fulladdress}</p>) : ''}\r\n </Form.Group>\r\n </Col>\r\n :\r\n null\r\n }\r\n <Col md=\"3\">\r\n <Form.Group>\r\n <Form.Label>Password *</Form.Label>\r\n <InputGroup>\r\n <Form.Control type={showPassword ? \"text\" : \"password\"} name=\"profilePassword\" value={values.profilePassword} autoComplete='new-password' onChange={change.bind(null, \"profilePassword\")} isInvalid={touched.profilePassword && !!errors.profilePassword} isValid={touched.profilePassword && !errors.profilePassword} />\r\n <InputGroup.Append onClick={()=>setShowPassword(!showPassword)}>\r\n <InputGroup.Text>\r\n {showPassword ?\r\n <VisibilityOffIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n : \r\n <VisibilityIcon fontSize=\"small\" style={{ marginLeft: -4 }} /> \r\n }\r\n </InputGroup.Text>\r\n </InputGroup.Append> \r\n <Form.Control.Feedback type=\"invalid\">{errors.profilePassword}</Form.Control.Feedback>\r\n </InputGroup>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group>\r\n <Form.Label>Confirm Password *</Form.Label>\r\n <InputGroup>\r\n <Form.Control type={showPassword ? \"text\" : \"password\"} name=\"profilePasswordConfirmation\" value={values.profilePasswordConfirmation} onChange={change.bind(null, \"profilePasswordConfirmation\")} isInvalid={touched.profilePasswordConfirmation && !!errors.profilePasswordConfirmation} isValid={touched.profilePasswordConfirmation && !errors.profilePasswordConfirmation} autoComplete='new-password' />\r\n <InputGroup.Append onClick={()=>setShowPassword(!showPassword)}>\r\n <InputGroup.Text>\r\n {showPassword ?\r\n <VisibilityOffIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n : \r\n <VisibilityIcon fontSize=\"small\" style={{ marginLeft: -4 }} /> \r\n }\r\n </InputGroup.Text>\r\n </InputGroup.Append> \r\n <Form.Control.Feedback type=\"invalid\">{errors.profilePasswordConfirmation}</Form.Control.Feedback>\r\n </InputGroup>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {providerType && (providerType === 'EAP' || providerType === 'NDIS') ?\r\n <>\r\n <Row>\r\n {providerType && providerType === 'EAP' ?\r\n <>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>EAP Program Code *</Form.Label>\r\n <Form.Control type=\"text\" name=\"eapworkplace\" value={values.eapworkplace} onChange={change.bind(null, \"eapworkplace\")} autoComplete='new-password' isInvalid={touched.eapworkplace && !!errors.eapworkplace} isValid={touched.eapworkplace && !errors.eapworkplace}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.eapworkplace}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Job Title (if relevant)</Form.Label>\r\n <Form.Control type=\"text\" name=\"occupation\" value={values.occupation} onChange={change.bind(null, \"occupation\")} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col> \r\n </> \r\n :\r\n null\r\n }\r\n <Col md=\"6\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label>TimeZone</Form.Label>\r\n <Autocomplete\r\n id=\"profileTimeZone\"\r\n variant=\"outlined\"\r\n options={timeZone}\r\n getOptionLabel={(option) => option.name}\r\n value={timeZone.find(v => v.systemName === values.timezone)}\r\n onChange={(e, value) => {setFieldValue(\"timezone\", value.systemName); }}\r\n style={{ fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"TimeZoneSelector\"\r\n style={{backgroundColor: \"white\", margin: 0, padding: 0}}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n {providerType !== 'Supervision' ? \r\n <>\r\n {providerType === 'NDIS' ?\r\n <>\r\n <Form.Label>Additional Information</Form.Label>\r\n </>\r\n :\r\n <Form.Label>What are you hoping to get out of your sessions?</Form.Label>\r\n }\r\n </>\r\n :\r\n <Form.Label>Details on the type of supervision you are after, where you are currently practicing and other relevant information.</Form.Label>\r\n }\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" name=\"hopeToGetFromTreatment\" value={values.hopeToGetFromTreatment} onChange={change.bind(null, \"hopeToGetFromTreatment\")} isInvalid={touched.hopeToGetFromTreatment && !!errors.hopeToGetFromTreatment} isValid={touched.hopeToGetFromTreatment && !errors.hopeToGetFromTreatment} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.hopeToGetFromTreatment}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {providerType && (providerType === 'Provisional' || providerType === 'GP') ?\r\n <>\r\n <Form.Label>Do you have a regular GP?</Form.Label>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>GP Name *</Form.Label>\r\n <Form.Control type=\"text\" name=\"gpname\" value={values.gpname} onChange={change.bind(null, \"gpname\")} autoComplete='new-password' isInvalid={touched.gpname && !!errors.gpname} isValid={touched.gpname && !errors.gpname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.gpname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>GP Clinic Name *</Form.Label>\r\n <Form.Control type=\"text\" name=\"gpclinicname\" value={values.gpclinicname} onChange={change.bind(null, \"gpclinicname\")} autoComplete='new-password' isInvalid={touched.gpclinicname && !!errors.gpclinicname} isValid={touched.gpclinicname && !errors.gpclinicname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.gpclinicname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {providerType && providerType === 'GP' ?\r\n <>\r\n <Row>\r\n <Col md=\"9\">\r\n <Form.Group >\r\n <Form.Label>Do we have consent to share your Mental Health Treatment Plan with them?</Form.Label>\r\n <Form.Control as=\"select\" name=\"consentToShareWithGP\" value={values.consentToShareWithGP} onChange={change.bind(null, \"consentToShareWithGP\")} style={{ width: 180 }} isInvalid={touched.consentToShareWithGP && !!errors.consentToShareWithGP} isValid={touched.consentToShareWithGP && !errors.consentToShareWithGP}>\r\n <option value=''></option>\r\n <option value='N'>No</option>\r\n <option value='Y'>Yes</option>\r\n </Form.Control>\r\n <Form.Control.Feedback type=\"invalid\">{errors.consentToShareWithGP}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"9\">\r\n <Form.Group >\r\n <Form.Label> Is this booking related to Rural Health Connect's Perinatal Loss Support Program?</Form.Label>\r\n <Form.Control as=\"select\" name=\"gpperinatal\" value={values.gpperinatal} onChange={change.bind(null, \"gpperinatal\")} style={{ width: 180 }} isInvalid={touched.gpperinatal && !!errors.gpperinatal} isValid={touched.gpperinatal && !errors.gpperinatal}>\r\n <option value=''></option>\r\n <option value='N'>No</option>\r\n <option value='Y'>Yes</option>\r\n </Form.Control>\r\n <Form.Control.Feedback type=\"invalid\">{errors.gpperinatal}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"9\">\r\n <Form.Group >\r\n <Form.Label>Have you received a Mental Health Plan in the last 12 Months (if so please upload it)?</Form.Label>\r\n <Form.Control as=\"select\" name=\"gpmentalhealthplan12months\" value={values.gpmentalhealthplan12months} onChange={change.bind(null, \"gpmentalhealthplan12months\")} style={{ width: 180 }} isInvalid={touched.gpmentalhealthplan12months && !!errors.gpmentalhealthplan12months} isValid={touched.gpmentalhealthplan12months && !errors.gpmentalhealthplan12months}>\r\n <option value=''></option>\r\n <option value='N'>No</option>\r\n <option value='Y'>Yes</option>\r\n </Form.Control>\r\n <Form.Control.Feedback type=\"invalid\">{errors.gpmentalhealthplan12months}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n </>\r\n :\r\n null\r\n }\r\n </>\r\n :\r\n null\r\n }\r\n {providerType && providerType === 'NDIS' ?\r\n <>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Please enter your NDIS Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"ndisnumber\" value={values.ndisnumber} onChange={change.bind(null, \"ndisnumber\")} autoComplete='new-password' isInvalid={touched.ndisnumber && !!errors.ndisnumber} isValid={touched.ndisnumber && !errors.ndisnumber}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.ndisnumber}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n {providerType && providerType === 'Financial' ?\r\n <>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Business Name</Form.Label>\r\n <Form.Control type=\"text\" name=\"businessName\" value={values.businessName || ''} onChange={change.bind(null, \"businessName\")} isInvalid={touched.businessName && !!errors.businessName} isValid={touched.businessName && !errors.businessName} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.businessName}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>ABN</Form.Label>\r\n <Form.Control type=\"text\" name=\"abn\" value={values.abn || ''} onChange={change.bind(null, \"abn\")} isInvalid={touched.abn && !!errors.abn} isValid={touched.abn && !errors.abn} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.abn}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label>Business Address (start typing to search)</Form.Label>\r\n <PlacesAutoComplete \r\n currentID={0}\r\n currentfulladdress={values.businessAddress}\r\n setcurrentfulladdress = {(value) => setFieldValue(\"businessAddress\", value)}\r\n isInvalid={touched.businessAddress && !!errors.businessAddress} \r\n isValid={touched.businessAddress && !errors.businessAddress} \r\n />\r\n {touched.fulladdress && !!errors.fulladdress ? (<p className='error-help'>{errors.fulladdress}</p>) : ''}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Background Information</Form.Label>\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" name=\"backgroundinformation\" value={values.backgroundinformation} onChange={change.bind(null, \"backgroundinformation\")} isInvalid={touched.backgroundinformation && !!errors.backgroundinformation} isValid={touched.backgroundinformation && !errors.backgroundinformation} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.backgroundinformation}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n {providerType && (providerType === 'Psychologist' || providerType === 'Clinical' || providerType === 'Occupational') ?\r\n <>\r\n <Row style={{ marginBottom:20}}>\r\n <Col md=\"12\">\r\n <Form.Group>\r\n {providerType && providerType === 'NDIS' ?\r\n <Form.Label>Please Upload your NDIS Plan (if you have one):</Form.Label>\r\n :\r\n <Form.Label><strong>IMPORTANT NOTE:</strong> We need a referral a mental health treatment plan from your GP unless you want to pay full fee. If we contacted you, we likely already have yours on file. However, if you are signing up directly from the website please ensure you have completed one first. Upload below or your GP can fax it to us on 074573 1100. If it is multiple files then please email to us - referrals@ruralhealthconnect.com.au</Form.Label>\r\n }\r\n <Form.Control type=\"file\" name=\"MHCPFile\" onChange={(event) => setFieldValue('MHCPFile', event.currentTarget.files[0])} isInvalid={touched.MHCPFile && !!errors.MHCPFile} isValid={touched.MHCPFile && !errors.MHCPFile} className=\"form-control\" style={{ paddingTop: 6, paddingLeft: 6, minWidth: 200, maxWidth: 300 }} />\r\n <Form.Control.Feedback type=\"invalid\">{errors.MHCPFile}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n {providerType && providerType !== 'Financial' && providerType !== 'Supervision' && providerType !== 'NDIS' ?\r\n <>\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Primary Emergency Contact*</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactname1\" value={values.emergencycontactname1 || ''} onChange={change.bind(null, \"emergencycontactname1\")} isInvalid={touched.emergencycontactname1 && !!errors.emergencycontactname1} isValid={touched.emergencycontactname1 && !errors.emergencycontactname1} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.emergencycontactname1}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Relationship*</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactrelation1\" value={values.emergencycontactrelation1 || ''} onChange={change.bind(null, \"emergencycontactrelation1\")} isInvalid={touched.emergencycontactrelation1 && !!errors.emergencycontactrelation1} isValid={touched.emergencycontactrelation1 && !errors.emergencycontactrelation1} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.emergencycontactrelation1}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Phone *</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactphone1\" value={values.emergencycontactphone1 || ''} onChange={change.bind(null, \"emergencycontactphone1\")} isInvalid={touched.emergencycontactphone1 && !!errors.emergencycontactphone1} isValid={touched.emergencycontactphone1 && !errors.emergencycontactphone1} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.emergencycontactphone1}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Secondary Emergency Contact</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactname2\" value={values.emergencycontactname2 || ''} onChange={change.bind(null, \"emergencycontactname2\")} isInvalid={touched.emergencycontactname2 && !!errors.emergencycontactname2} isValid={touched.emergencycontactname2 && !errors.emergencycontactname2} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.emergencycontactname2}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Relationship</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactrelation2\" value={values.emergencycontactrelation2 || ''} onChange={change.bind(null, \"emergencycontactrelation2\")} isInvalid={touched.emergencycontactrelation2 && !!errors.emergencycontactrelation2} isValid={touched.emergencycontactrelation2 && !errors.emergencycontactrelation2} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.emergencycontactrelation2}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Phone</Form.Label>\r\n <Form.Control type=\"text\" name=\"emergencycontactphone2\" value={values.emergencycontactphone2 || ''} onChange={change.bind(null, \"emergencycontactphone2\")} isInvalid={touched.emergencycontactphone2 && !!errors.emergencycontactphone2} isValid={touched.emergencycontactphone2 && !errors.emergencycontactphone2} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.emergencycontactphone2}</Form.Control.Feedback> \r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n <Row>\r\n {(providerType && (providerType !== 'Financial' && providerType !== 'NDIS' && providerType !== 'EAP' && providerType !== 'Supervision') && (!clientInvite.contract) && providerType !== 'NthQLDPHN') ?\r\n <>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n {providerType && providerType === 'Provisional' ?\r\n <Form.Label>Medicare Card Number (Optional)</Form.Label>\r\n :\r\n <Form.Label>Medicare Card Number</Form.Label>\r\n }\r\n <Form.Control type=\"text\" name=\"medicareno\" value={values.medicareno || ''} onChange={change.bind(null, \"medicareno\")} isInvalid={touched.medicareno && !!errors.medicareno} isValid={touched.medicareno && !errors.medicareno} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.medicareno}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n {providerType && providerType === 'Provisional' ?\r\n <Form.Label>Order on Card (Optional)</Form.Label>\r\n :\r\n <Form.Label>Order on Card</Form.Label>\r\n }\r\n <Form.Control type=\"text\" name=\"medicarereferenceno\" value={values.medicarereferenceno || ''} onChange={change.bind(null, \"medicarereferenceno\")} isInvalid={touched.medicarereferenceno && !!errors.medicarereferenceno} isValid={touched.medicarereferenceno && !errors.medicarereferenceno} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.medicarereferenceno}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n {providerType && providerType === 'Provisional' ?\r\n <Form.Label>Medicare Expiry Date (MM/YY) (Optional)</Form.Label>\r\n :\r\n <Form.Label>Medicare Expiry Date (MM/YY)</Form.Label>\r\n }\r\n <Form.Control type=\"text\" name=\"medicareexpirydate\" value={values.medicareexpirydate || ''} onChange={change.bind(null, \"medicareexpirydate\")} isInvalid={touched.medicareexpirydate && !!errors.medicareexpirydate} isValid={touched.medicareexpirydate && !errors.medicareexpirydate} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.medicareexpirydate}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </>\r\n :\r\n null\r\n }\r\n {/* {providerType && providerType !== 'GP' && providerType !== 'Supervision'?\r\n <>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Appointment Type</Form.Label>\r\n <Form.Control as=\"select\" name=\"appointmenttype\" value={values.appointmenttype} onChange={change.bind(null, \"appointmenttype\")} >\r\n <option value='0'>Video Call</option>\r\n <option value='1' disabled>Phone Call</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col> \r\n </>\r\n :\r\n null\r\n } */}\r\n {providerType !== 'NDIS' ?\r\n <Col md=\"12\">\r\n <p><strong>Note</strong> Sessions are done via video call. If you need your session to be done via phone call instead please call 0493 201 005 or 0493 432 144.</p>\r\n </Col>\r\n :\r\n null\r\n }\r\n </Row>\r\n {/* Display selected Payment type here */}\r\n {/* {providerType && (providerType === 'Psychologist' || providerType === 'Clinical' || providerType === 'Occupational') && (!clientInvite.contract) ?\r\n <>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group>\r\n <Form.Label style={{ fontWeight: 500 }}>Payment Options</Form.Label>\r\n <p>We want everyone be able to access a psychologist and therefore have a range of pricing options. Reduced fee places are limited so please only apply if it suits your circumstances:</p>\r\n <Form.Check id=\"payment-fullfee\" name=\"paymenttype\" type=\"radio\" style={{ marginBottom: 8 }}>\r\n <Form.Check.Input name=\"paymenttype\" type=\"radio\" value=\"Full Fee\" checked={values.paymenttype === 'Full Fee' ? true : false} onChange={change.bind(null, \"paymenttype\")} />\r\n <Form.Check.Label style={{marginLeft: 12 }}>STANDARD FEE: I am employed and/or am not experiencing financial hardship </Form.Check.Label>\r\n </Form.Check>\r\n <Form.Check id=\"payment-reducedgap\" name=\"paymenttype\" type=\"radio\" style={{ marginBottom: 8 }} >\r\n <Form.Check.Input name=\"paymenttype\" type=\"radio\" value=\"Reduced Gap\" checked={values.paymenttype === 'Reduced Gap' ? true : false} onChange={change.bind(null, \"paymenttype\")} />\r\n <Form.Check.Label style={{marginLeft: 12 }}>REDUCED FEE: I am experiencing financial hardship and would like to apply for the psychologist's the reduced gap fee option. </Form.Check.Label>\r\n </Form.Check>\r\n {values.paymenttype === 'Reduced Gap' ?\r\n <>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Please tell us about your circumstances in a few sentences (A few sentences)</Form.Label>\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" name=\"bulkBilledReason\" value={values.bulkBilledReason} onChange={change.bind(null, \"bulkBilledReason\")} isInvalid={touched.bulkBilledReason && !!errors.bulkBilledReason} isValid={touched.bulkBilledReason && !errors.bulkBilledReason} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.bulkBilledReason}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n <Form.Check id=\"payment-bulkbilled\" name=\"paymenttype\" type=\"radio\" style={{ marginTop: 20, marginBottom: 8 }} >\r\n <Form.Check.Input name=\"paymenttype\" type=\"radio\" value=\"Bulk Billed\" checked={values.paymenttype === 'Bulk Billed' ? true : false} onChange={change.bind(null, \"paymenttype\")} />\r\n <Form.Check.Label style={{marginLeft: 12 }}>​BULK BILL(limited sessions available) We have some bulk billed sessions available for those most in need. For Healthcare, Pension or Disability card holders only. </Form.Check.Label>\r\n </Form.Check> \r\n </Form.Group>\r\n </Col>\r\n </Row> \r\n </>\r\n :\r\n null\r\n } */}\r\n <Row>\r\n <Col md=\"10\">\r\n <Form.Group>\r\n <Checkbox aria-label='Agreement Acceptance' name=\"agreementAcceptance\" value={values.agreementAcceptance} onChange={change.bind(null, \"agreementAcceptance\")} style={{ paddingTop: 6, paddingLeft: 0 }} />\r\n I accept the <a href=\"https://files.ruralhealthconnect.com.au/filestoreRHC//RHCTermsandConditions.pdf\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"cell-Link\">Rural Health Connect Terms and Conditions of Use</a>\r\n <div className=\"error-help\">{errors.agreementAcceptance}</div>\r\n <Form.Control.Feedback type=\"invalid\">{errors.agreementAcceptance}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item md={3} xs={6}>\r\n </Grid>\r\n <Grid item md={1} xs={6} style={{ textAlign: \"right\"}}>\r\n <Button variant=\"primary\" type=\"submit\">\r\n Submit\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n </Paper>\r\n </form>\r\n )\r\n }}\r\n </Formik>\r\n \r\n <Modal show={showEmailDuplicate} onHide={()=>setShowEmailDuplicate(false)} dialogClassName=\"new-bookingDialog-modal\" backdrop='static' keyboard='false' centered>\r\n <Modal.Header closeButton className=\"new-booking-modal\">\r\n <Modal.Title>Warning</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"new-booking-modal\" style={{ backgroundColor: 'rgb(245,245,245)' }}>\r\n <Grid item md={9} xs={6} style={{ fontWeight: 600 }}>\r\n It looks like you already have an account. Please <a href={`/auth/login`} target=\"RHC\">login</a> to continue\r\n </Grid>\r\n </Modal.Body>\r\n\r\n <Modal.Footer className=\"new-booking-modal\">\r\n <a href={`/auth/login`} target=\"RHC\">\r\n <Button variant=\"secondary\" className=\"lightButtonOutlinedLarge\">\r\n Close\r\n </Button>\r\n </a> \r\n </Modal.Footer>\r\n </Modal>\r\n </>\r\n );\r\n}\r\n\r\nfunction ClientSupportFormConfirmation(props) {\r\n\r\n return (\r\n <Paper style={{ backgroundColor: \"rgb(245,245,245)\", padding: 20 }} >\r\n <h3>\r\n Contact Form Submitted successfully.\r\n </h3>\r\n <p style={{ marginTop: 30 }}>\r\n We will be in contact shortly.\r\n </p>\r\n </Paper>\r\n );\r\n}\r\n\r\nfunction ClientRegistrationConfirmation(props) {\r\n\r\n return (\r\n <Paper style={{ backgroundColor: \"rgb(245,245,245)\", padding: 20 }} >\r\n <h3>\r\n Registration successful.\r\n </h3>\r\n <p style={{ marginTop: 30 }}>\r\n Congratulations, your Rural Health Connect account has been created.\r\n </p>\r\n <p>\r\n You may now login to the portal to make and manage your bookings and your profile.\r\n </p>\r\n <p style={{ marginTop: 20 }}>\r\n <Link to=\"/auth/login\" className=\"kt-login__logo\">\r\n <Button>\r\n Portal Login\r\n </Button>\r\n </Link>\r\n </p>\r\n </Paper>\r\n );\r\n}\r\n\r\nfunction ClientRegistrationNotReady(props) {\r\n\r\n return (\r\n <Paper style={{ backgroundColor: \"rgb(245,245,245)\", padding: 20 }} >\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-end\">\r\n <Grid item md={6} xs={12}>\r\n <h2>3. Register</h2>\r\n </Grid>\r\n <Grid item md={3} xs={6} style={{ fontStyle: \"italic\", fontWeight: 400, textAlign: \"right\", paddingBottom: 4, fontSize: 12 }}>\r\n * indicates required fields\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n {(!(props.steps.step1.data.length > 0) && (props.providerType !== 'GP') && (props.providerType !== 'Supervision')) ? \r\n <Alert severity=\"info\" style={{ marginBottom: 10, marginTop: 8, fontSize: 14 }}> \r\n <span>You must select at least one area of interest.<br></br></span> \r\n </Alert>\r\n : \r\n ''\r\n }\r\n {!(props.steps.step2.data.id && props.steps.step2.data.id > 0) ?\r\n <Alert severity=\"info\" style={{ marginBottom: 10, marginTop: 8, fontSize: 14 }}>\r\n <span>You must select a Provider before completing the registration form.<br></br></span>\r\n </Alert>\r\n :\r\n ''\r\n } \r\n {!(props.steps.step2.userTZ && props.steps.step2.userTZ.length > 0) ? \r\n <Alert severity=\"info\" style={{ marginBottom: 10, marginTop: 8, fontSize: 14 }}>\r\n <span>You must select a Timezone before completing the registration form.<br></br></span>\r\n </Alert>\r\n : \r\n ''\r\n } \r\n {!(props.steps.step2.bookingdate && props.steps.step2.bookingdate.length > 0) ? \r\n <Alert severity=\"info\" style={{ marginBottom: 10, marginTop: 8, fontSize: 14 }}>\r\n <span>You must book your first appointment before completing the registration form.<br></br></span>\r\n </Alert>\r\n :\r\n ''\r\n } \r\n </Col>\r\n </Row>\r\n <hr style={{ marginTop: 4 }}></hr>\r\n <Button onClick={()=>props.setStepValue({ currentStep: 2 })}>\r\n < Back\r\n </Button>\r\n </Paper>\r\n );\r\n}\r\n\r\nfunction PageWrapper(props) {\r\n\r\n const useStyles = makeStyles((theme) => ({\r\n root: {\r\n width: '100%',\r\n maxWidth: 360,\r\n backgroundColor: 'rgba(0,0,0,0)',\r\n },\r\n linkItem: {\r\n minWidth: 50,\r\n },\r\n linkIcon: {\r\n color: 'rgba(255,255,255,0.7)',\r\n fontSize: 24,\r\n fontWeight: 300,\r\n },\r\n linkIconSelected: {\r\n color: 'white',\r\n fontSize: 24,\r\n },\r\n link: {\r\n color: 'rgba(255,255,255,0.7)',\r\n fontSize: 16,\r\n fontWeight: 300,\r\n },\r\n linkSelected: {\r\n color: 'white',\r\n fontSize: 16,\r\n fontWeight: 600,\r\n },\r\n }));\r\n\r\n const classes = useStyles();\r\n \r\n // change width of sidebar for screensize\r\n const isMobile = useMediaQuery('(max-width: 1024px)');\r\n return (\r\n\r\n <>\r\n <div className=\"kt-grid kt-grid--ver kt-grid--root\">\r\n <div\r\n id=\"kt_login\"\r\n className=\"kt-grid kt-grid--hor kt-grid--root kt-login kt-login--v1\">\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid kt-grid--desktop kt-grid--ver-desktop kt-grid--hor-tablet-and-mobile\">\r\n <div\r\n className=\"kt-grid__item kt-grid__item--order-tablet-and-mobile-2 kt-grid kt-grid--hor kt-login__aside\"\r\n style={{\r\n padding: 20,\r\n maxWidth: isMobile ? 1024 : 320,\r\n backgroundImage: `url(${toAbsoluteUrl(\"/media/bg/rhc-farm.jpg\")})`,\r\n backgroundSize: \"auto\"\r\n }}\r\n >\r\n <div className=\"kt-grid__item\">\r\n <Link to=\"/auth/login\" className=\"kt-login__logo\">\r\n <img\r\n alt=\"Logo\"\r\n src={toAbsoluteUrl(\"/media/logos/logo-3.png\")}\r\n style={{ marginLeft: -10 }}\r\n />\r\n </Link>\r\n </div>\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid \">\r\n <div className=\"kt-grid__item kt-grid__item--middle\">\r\n <h3 className=\"kt-login__title\" style={{ marginTop: isMobile ? 0 : 80 }}>Rural Health Connect</h3>\r\n {(props.providerType !== 'EAP' && props.providerType !== 'NDIS') ?\r\n <>\r\n <h4 className=\"kt-login__subtitle\" style={{ marginTop: 20 }}>\r\n Welcome to the Client Registration process. There are three steps to complete: \r\n </h4>\r\n <div className={classes.root}>\r\n <List component=\"nav\" aria-label=\"main mailbox folders\">\r\n <ListItem button onClick={()=>props.setStepValue({ currentStep: 1 })}>\r\n <ListItemIcon className={classes.linkItem}>\r\n <HelpOutlineIcon className={props.steps.currentStep === 1 ? classes.linkIconSelected : classes.linkIcon} />\r\n </ListItemIcon>\r\n <ListItemText \r\n disableTypography \r\n primary={<Typography className={props.steps.currentStep === 1 ? classes.linkSelected : classes.link}>\r\n {props.providerType && props.providerType === 'Financial' ?\r\n <>\r\n 1. Location\r\n </>\r\n :\r\n <>\r\n 1. Areas of Interest\r\n </> \r\n }\r\n </Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n <ListItem button onClick={()=>props.setStepValue({ currentStep: 2 })}>\r\n <ListItemIcon className={classes.linkItem}>\r\n <GroupIcon className={props.steps.currentStep === 2 ? classes.linkIconSelected : classes.linkIcon} />\r\n </ListItemIcon>\r\n <ListItemText \r\n disableTypography \r\n primary={\r\n <Typography className={props.steps.currentStep === 2 ? classes.linkSelected : classes.link}>\r\n {props.providerType && props.providerType === 'Financial' ?\r\n <>\r\n 2. Financial Counsellor\r\n </>\r\n :\r\n <>\r\n {props.providerType && props.providerType === 'GP' ? \r\n <>\r\n 2. GP\r\n </>\r\n :\r\n <>\r\n {props.providerType && props.providerType === 'Provisional'?\r\n <>\r\n 2. Provisional Psychologist\r\n </>\r\n :\r\n <>\r\n {props.providerType && props.providerType === 'Social'?\r\n <>\r\n 2. MH Social Worker\r\n </>\r\n :\r\n <>\r\n {props.providerType && props.providerType === 'Nurse'?\r\n <>\r\n 2. Mental Health Nurse\r\n </>\r\n :\r\n <>\r\n {props.providerType && props.providerType === 'Occupational'?\r\n <>\r\n 2. Occupational Therapist\r\n </>\r\n :\r\n <>\r\n {props.providerType && props.providerType === 'Supervision'?\r\n <>\r\n 2. Supervising Psychologist\r\n </>\r\n :\r\n <>\r\n {props.contract ?\r\n <>\r\n 2. Practitioner\r\n </>\r\n :\r\n <>\r\n 2. Practitioner\r\n </>\r\n }\r\n </>\r\n }\r\n </>\r\n }\r\n </>\r\n }\r\n </>\r\n } \r\n </>\r\n }\r\n </>\r\n }\r\n </>\r\n }\r\n </Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n <ListItem button onClick={()=>props.setStepValue({ currentStep: 3 })}>\r\n <ListItemIcon className={classes.linkItem}>\r\n <AssignmentIcon className={props.steps.currentStep === 3 ? classes.linkIconSelected : classes.linkIcon} />\r\n </ListItemIcon>\r\n <ListItemText \r\n disableTypography \r\n primary={<Typography className={props.steps.currentStep === 3 ? classes.linkSelected : classes.link}>3. Register</Typography>} \r\n className={classes.link} />\r\n </ListItem>\r\n </List> \r\n {/* <div style={{ color: 'white', maxWidth: 300 }}>{JSON.stringify(props.steps.step2)}</div> */}\r\n </div>\r\n </>\r\n :\r\n <h4 className=\"kt-login__subtitle\" style={{ marginTop: 20 }}>\r\n Welcome to the Client Registration process. Please register\r\n </h4>\r\n }\r\n </div>\r\n </div>\r\n <div className=\"kt-grid__item\">\r\n <div className=\"kt-login__info\">\r\n <div className=\"kt-login__copyright\">\r\n © 2025 Rural Health Connect\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid__item--order-tablet-and-mobile-1 kt-login__wrapper login-bg\">\r\n \r\n {props.children}\r\n \r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n\r\n );\r\n\r\n}","import React, { useState, useEffect } from \"react\";\r\nimport { Link, useParams } from \"react-router-dom\";\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport PlacesAutoComplete from \"../../components/AddressAutoComplete\";\r\nimport * as Reference from \"../../store/ducks/reference.duck\";\r\nimport * as Registration from \"../../store/ducks/registration.duck\";\r\nimport { Button, Modal, Form, Row, Col, InputGroup, Image, Badge } from \"react-bootstrap\";\r\nimport { Paper, Typography, makeStyles, Grid, Checkbox, FormControlLabel, Card, CardMedia, CardContent, Chip } from '@material-ui/core';\r\nimport { Formik } from 'formik';\r\nimport * as Yup from \"yup\";\r\nimport Interweave from 'interweave'\r\n// import { Editor } from '@tinymce/tinymce-react'\r\nimport Alert from '@material-ui/lab/Alert';\r\nimport { useMediaQuery } from '@material-ui/core';\r\nimport { toAbsoluteUrl } from \"../../../_metronic\";\r\nimport ReactQuill from 'react-quill';\r\nimport { MuiPickersUtilsProvider, KeyboardDatePicker } from '@material-ui/pickers';\r\nimport DateFnsUtils from '@date-io/date-fns';\r\nimport 'react-quill/dist/quill.snow.css';\r\nimport Masonry from 'react-masonry-css';\r\nimport \"../../../_metronic/_assets/sass/pages/login/login-1.scss\";\r\nimport '../../../_metronic/_assets/css/app2.css';\r\n\r\n\r\nconst useStyles = makeStyles(() => ({\r\n noBorder: {\r\n border: \"none\",\r\n },\r\n media: {\r\n height: 200,\r\n },\r\n root: {\r\n \"& .MuiInputBase-root\": {\r\n height: 33,\r\n }\r\n } \r\n}));\r\n\r\nexport default function PsychologistRegistrationPage() {\r\n\r\n // change width of sidebar for screensize\r\n const isMobile = useMediaQuery('(max-width: 760px)');\r\n\r\n const { invitetoken } = useParams();\r\n const dispatch = useDispatch()\r\n const classes = useStyles()\r\n var [currentprofilepicture,setcurrentprofilepicture] = useState({ name: '' })\r\n \r\n // now init the fields with values so that Formik can manage the touched state\r\n const psychologistInit = {\r\n firstname: '', \r\n surname: '', \r\n gender: 'Female',\r\n email: '', \r\n mobilephone: '',\r\n education: '',\r\n bio: '',\r\n\r\n practicename: '',\r\n abn: '',\r\n fulladdress: '',\r\n latitude: '',\r\n longitude: '',\r\n postcode: '',\r\n\r\n providernumber : '',\r\n insurancenumber: 'AS78FDS654',\r\n hourlyrate: '',\r\n reducedFee:'',\r\n\r\n startedpracticingyear: 2000,\r\n newInsuranceFile: '',\r\n \r\n areasOfInterest_focus: [],\r\n areasOfInterest_other: [],\r\n fundingTypes: [],\r\n mbsServices: [],\r\n newProfilePicture: currentprofilepicture,\r\n\r\n pdfpassword: Math.floor(1000 + Math.random() * 9000),\r\n profilePassword: '',\r\n profilePasswordConfirmation: '',\r\n timezone: 'AUS Eastern Standard Time',\r\n invitetoken: invitetoken,\r\n agreementAcceptance: false,\r\n psychologistid : null,\r\n providertype : '',\r\n apikey: '',\r\n ahpraRegistrationNo: '',\r\n providerdescription : 'Psychologist',\r\n specialistType : 'Standard'\r\n }\r\n\r\n useEffect( () => { dispatch(Registration.actions.fetchPsychologistInvite(invitetoken)) }, [dispatch, invitetoken] )\r\n useEffect( () => { dispatch(Reference.actions.fetchConstants()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchFundingTypes()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchSundayThisWeek()) }, [dispatch] )\r\n useEffect( () => { dispatch(Reference.actions.fetchMBSServices()) }, [dispatch] )\r\n \r\n const areasOfInterestReference = useSelector(state => state.reference.AreasOfInterest)\r\n var [previewFile, setPreviewFile] = useState('')\r\n var [currentprofilepicturetouched, setcurrentprofilepicturetouched] = useState(false);\r\n var [regStatus, setregStatus] = useState('Not Started')\r\n var [showRegistrationView, setShowRegistrationView] = useState(false) \r\n var [showProviderBio,setShowProviderBio] = useState(false)\r\n var [providerBioFullName,setProviderBioFullName] = useState()\r\n var [providerBioBio,setProviderBioBio] = useState()\r\n var [currentPaymentType,setCurrentPaymentType] = useState('Reduced Gap')\r\n\r\n function handleRegistrationViewClose() {\r\n setShowRegistrationView(false);\r\n } \r\n\r\n // get the invite (if any) from state and merge with the initialised fields\r\n const inviteInit = useSelector(state => state.registration.PsychologistInvite)\r\n var [providerRegistrationView,setProviderRegistrationView] = useState(psychologistInit)\r\n const psychologistInvite = {...psychologistInit, ...inviteInit};\r\n\r\n // based on the provider type, filter the AOI\r\n const aoi_focus = areasOfInterestReference.filter(aoi => aoi.focusAreaIndex !== null && aoi.providertype === psychologistInvite.providertype)\r\n const aoi_other = areasOfInterestReference.filter(aoi => aoi.focusAreaIndex === null && aoi.providertype === psychologistInvite.providertype)\r\n const [prevpsychologistInvite, setprevpsychologistInvite] = useState('');\r\n\r\n const registrationView = (values,feeType) => {\r\n // Populate Modal which contains preview of Provider Registration Information\r\n setCurrentPaymentType(feeType)\r\n //\r\n var calc_hourlyrate = 0.00\r\n var calc_standardFeeOutOfPocket = 0.00\r\n var calc_outOfPocketStandard = 0.00\r\n var calc_medicareRebate = values.medicarerebate\r\n var calc_reducedFee = 0.00\r\n var calc_reducedFeeOutOfPocket = 0.00\r\n var calc_outOfPocket = 0.00\r\n // Calculation of costs etc \r\n // Check that something is configured for hourly rate \r\n if (!values.hourlyrate || (values.hourlyrate && (values.hourlyrate === '0' || values.hourlyrate === '0.00')))\r\n {\r\n calc_hourlyrate = 'TBD'\r\n calc_standardFeeOutOfPocket = 'TBD'\r\n }\r\n else\r\n {\r\n calc_outOfPocketStandard = (parseFloat(values.hourlyrate) - calc_medicareRebate).toFixed(2)\r\n calc_hourlyrate = values.hourlyrate\r\n calc_standardFeeOutOfPocket = calc_outOfPocketStandard.toString()\r\n }\r\n // Get Reduced Fee Amount \r\n if (!values.reducedFee || (values.reducedFee && (values.reducedFee === '0' || values.reducedFee === '0.00')))\r\n {\r\n calc_reducedFee = 'TBD'\r\n calc_reducedFeeOutOfPocket = 'TBD'\r\n }\r\n else\r\n {\r\n calc_outOfPocket = (parseFloat(values.reducedFee) - calc_medicareRebate).toFixed(2)\r\n calc_reducedFee = values.reducedFee\r\n calc_reducedFeeOutOfPocket = calc_outOfPocket.toString()\r\n }\r\n // \r\n var newValues = {...values, \r\n calc_hourlyrate : calc_hourlyrate, \r\n calc_standardFeeOutOfPocket : calc_standardFeeOutOfPocket, \r\n calc_outOfPocketStandard : calc_outOfPocketStandard,\r\n calc_medicareRebate : calc_medicareRebate,\r\n calc_reducedFee : calc_reducedFee,\r\n calc_reducedFeeOutOfPocket : calc_reducedFeeOutOfPocket,\r\n calc_outOfPocket : calc_outOfPocket\r\n }\r\n setProviderRegistrationView(newValues)\r\n setShowRegistrationView(true)\r\n }\r\n \r\n const moreProviderBio = (fullName, bio) => {\r\n setProviderBioFullName(fullName)\r\n setProviderBioBio(bio)\r\n setShowProviderBio(true)\r\n }\r\n\r\n useEffect( () => {\r\n if ((JSON.stringify(psychologistInvite.email) !== JSON.stringify(prevpsychologistInvite.email) && (areasOfInterestReference.length === 0) && psychologistInvite.providertype.length > 0))\r\n {\r\n setprevpsychologistInvite(psychologistInvite)\r\n // Check if provisional if so use AOI for Psychologist \r\n dispatch(Reference.actions.fetchAreasOfInterest(psychologistInvite.providertype === 'Provisional' ? 'Psychologist' : psychologistInvite.providertype))\r\n }\r\n }, [prevpsychologistInvite, psychologistInvite, areasOfInterestReference, dispatch])\r\n \r\n // when the invite is converted to a client, show the confirmation message and link to the login page\r\n // Old invite status test via Redux (regstatus.form === 'psychologist' && regstatus.status === 'Success' && regstatus.newID) || (psychologistInvite && psychologistInvite.hasOwnProperty('psychologistid') && psychologistInvite.psychologistid)\r\n if(regStatus === 'Completed') {\r\n return <RegistrationConfirmation title=\"Registration Successful!\" message=\"Congratulations, your Rural Health Connect account has been created.\" enableLogin={true} />\r\n }\r\n else if (!psychologistInvite.hasOwnProperty('id'))\r\n {\r\n return <RegistrationConfirmation title=\"Invalid token\" message=\"The link to register with Rural Health Connect is incomplete, already been used or has expired. Please contact us to resolve this issue.\" enableLogin={false} />\r\n }\r\n // otherwise, load the client registration form and all its hooplah...\r\n else \r\n {\r\n\r\n function submitForm(data){\r\n\r\n const formData = new FormData();\r\n\r\n formData.append('firstname',data['firstname'])\r\n formData.append('surname',data['surname'])\r\n formData.append('gender',data['gender'])\r\n formData.append('email',data['email'])\r\n formData.append('education',data['education'])\r\n formData.append('mobilephone',data['mobilephone'])\r\n formData.append('bio',data['bio'])\r\n formData.append('practicename',data['practicename'])\r\n formData.append('abn',data['abn'])\r\n formData.append('fulladdress',data['fulladdress'])\r\n formData.append('latitude',data['latitude'])\r\n formData.append('longitude',data['longitude'])\r\n formData.append('postcode',data['postcode'])\r\n formData.append('providernumber',data['providernumber'])\r\n formData.append('insurancenumber',data['insurancenumber'])\r\n formData.append('ahpraRegistrationNo',data['ahpraRegistrationNo'])\r\n formData.append('hourlyrate',data['hourlyrate'])\r\n formData.append('reducedFee',data['reducedFee'])\r\n if (data['isReducedFee'])\r\n {\r\n formData.append('isReducedFee','Y');\r\n }\r\n else\r\n {\r\n formData.append('isReducedFee','N');\r\n }\r\n formData.append('startedpracticingyear',data['startedpracticingyear'])\r\n formData.append('newInsuranceFile',data['newInsuranceFile'])\r\n formData.append('insuranceexpiry',data['insuranceexpiry'])\r\n formData.append('areasOfInterest', data['areasOfInterest_focus'].concat(data['areasOfInterest_other']).map(aoi => aoi.issue));\r\n formData.append('fundingTypes',data['fundingTypes'].map(ft => ft.id));\r\n formData.append('mbsServices',data['mbsServices'].map(mbs => mbs.id));\r\n formData.append('pdfpassword',data['pdfpassword'])\r\n formData.append('profilePassword',data['profilePassword'])\r\n formData.append('timezone',data['timezone'])\r\n formData.append('invitetoken',data['invitetoken'])\r\n formData.append('providertype',data['providertype'])\r\n formData.append('newProfilePicture', currentprofilepicture)\r\n formData.append('specialisttype', data['specialisttype'])\r\n \r\n setcurrentprofilepicturetouched(true);\r\n if(currentprofilepicture.name !== undefined) {\r\n dispatch(Registration.actions.postPsychologistData({formData}))\r\n setregStatus('Completed');\r\n }\r\n\r\n }\r\n\r\n const validationSchema = Yup.object().shape({\r\n firstname: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n .required(\"First Name is required\"),\r\n surname: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n .required(\"Surname is required\"),\r\n mobilephone: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(12,\"Too Long\")\r\n .required(\"Phone Number is required\"),\r\n gender: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"Gender is required\"),\r\n email: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(200,\"Too Long\")\r\n .email(\"Enter a valid email\")\r\n .required(\"Email is required\"),\r\n education: Yup.string()\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(100,\"Too Long\")\r\n .required(\"Education is required\")\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Occupational',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(100,\"Too Long\")\r\n .required(\"Education is required\")\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(100,\"Too Long\")\r\n .required(\"Education is required\")\r\n }),\r\n practicename: Yup.string()\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(200,\"Too Long\")\r\n .required(\"Practice Name is required\")\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(200,\"Too Long\")\r\n .required(\"Practice Name is required\")\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Occupational',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(200,\"Too Long\")\r\n .required(\"Practice Name is required\")\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'GP',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(200,\"Too Long\")\r\n .required(\"Practice Name is required\")\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Financial',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(200,\"Too Long\")\r\n .required(\"Organisation is required\")\r\n }),\r\n fulladdress: Yup.string()\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(100,\"Too Long\")\r\n .required(\"Address is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(100,\"Too Long\")\r\n .required(\"Address is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Occupational',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(100,\"Too Long\")\r\n .required(\"Address is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'GP',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(100,\"Too Long\")\r\n .required(\"Address is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Financial',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(100,\"Too Long\")\r\n .required(\"Address is required\"),\r\n }),\r\n abn: Yup.string()\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.string().min(8,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"ABN is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.string().min(8,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"ABN is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Occupational',\r\n then: Yup.string().min(8,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"ABN is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'GP',\r\n then: Yup.string().min(8,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"ABN is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Financial',\r\n then: Yup.string().min(8,\"Too Short\")\r\n .max(20,\"Too Long\")\r\n .required(\"ABN is required\"),\r\n }),\r\n providernumber: Yup.string()\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n .required(\"Provider Number is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n .required(\"Provider Number is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Occupational',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n .required(\"Provider Number is required\"),\r\n }),\r\n insuranceexpiry: Yup.date()\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.date().required(\"Insurance Expiry Date is required\").typeError(\"Insurance Expiry Date is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.date().required(\"Insurance Expiry Date is required\").typeError(\"Insurance Expiry Date is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'GP',\r\n then: Yup.date().required(\"Insurance Expiry Date is required\").typeError(\"Insurance Expiry Date is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Nurse',\r\n then: Yup.date().required(\"Insurance Expiry Date is required\").typeError(\"Insurance Expiry Date is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Social',\r\n then: Yup.date().required(\"Insurance Expiry Date is required\").typeError(\"Insurance Expiry Date is required\"),\r\n }),\r\n newInsuranceFile: Yup.string()\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n .required(\"Insurance Document is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n .required(\"Insurance Document is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Occupational',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n .required(\"Insurance Document is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Nurse',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n .required(\"Insurance Document is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Social',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n .required(\"Insurance Document is required\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'GP',\r\n then: Yup.string().min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n .required(\"Insurance Document is required\"),\r\n \r\n }), \r\n hourlyrate: Yup.number()\r\n .when(['providertype','specialisttype'], \r\n {\r\n is: (providertype,specialisttype) => (providertype === 'Psychologist' && specialisttype !== 'nthqldphn'),\r\n then: Yup.number().max(1000,\"Full Fee Hourly rate is too High\")\r\n .required(\"Hourly rate is required\"),\r\n })\r\n .when(['providertype','specialisttype'], \r\n {\r\n is: (providertype,specialisttype) => (providertype === 'Clinical' && specialisttype !== 'nthqldphn'),\r\n then: Yup.number().max(1000,\"Full Fee Hourly rate is too High\")\r\n .required(\"Full Fee Hourly rate is required\"),\r\n }),\r\n reducedFee: Yup.number()\r\n .when(['providertype','specialisttype'], \r\n {\r\n is: (providertype,specialisttype) => (providertype === 'Psychologist' && specialisttype !== 'nthqldphn'),\r\n then: Yup.number().max(1000,\"Reduced Fee Hourly rate is too High\")\r\n .min(89,\"Reduced Fee Hourly rate is too Low\")\r\n .required(\"Reduced Fee Hourly rate is required\"),\r\n })\r\n .when(['providertype','specialisttype'], \r\n {\r\n is: (providertype,specialisttype) => (providertype === 'Clinical' && specialisttype !== 'nthqldphn'),\r\n then: Yup.number().max(1000,\"Reduced Fee Hourly rate is too High\")\r\n .min(89,\"Reduced Fee Hourly rate is too Low\")\r\n .required(\"Reduced Fee Hourly rate is required\"),\r\n }),\r\n startedpracticingyear: Yup.number()\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.number().max(2027)\r\n .min(1960)\r\n .required('Year First Practiced is required'),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.number().max(2027)\r\n .min(1960)\r\n .required('Year First Practiced is required'),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Occupational',\r\n then: Yup.number().max(2027)\r\n .min(1960)\r\n .required('Year First Practiced is required'),\r\n }),\r\n pdfpassword: Yup.string()\r\n .min(4,\"Too Short\")\r\n .max(4,\"Too Long\")\r\n .required(\"PDF Password is required\"),\r\n profilePassword: Yup.string()\r\n .min(8,\"Too Short\")\r\n .required(\"Password is required\"),\r\n profilePasswordConfirmation: Yup.string()\r\n .min(8,\"Too Short\")\r\n .required(\"Password is required\")\r\n .oneOf([Yup.ref('profilePassword'), null], 'Passwords must match'),\r\n areasOfInterest: Yup.array()\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Psychologist',\r\n then: Yup.array().min(1, \"Please select at least one area of interest\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Clinical',\r\n then: Yup.array().min(1, \"Please select at least one area of interest\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Occupational',\r\n then: Yup.array().min(1, \"Please select at least one area of interest\"),\r\n })\r\n .when(['providertype'], \r\n {\r\n is: (providertype) => providertype === 'Financial',\r\n then: Yup.array().min(1, \"Please select at least one area of interest\"),\r\n }), \r\n agreementAcceptance: Yup.boolean()\r\n .oneOf([true],'You must accept the Rural Health Connect Licence Agreement'),\r\n });\r\n\r\n const fileToDataUri = (file) => new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = (event) => {\r\n resolve(event.target.result)\r\n };\r\n reader.readAsDataURL(file);\r\n })\r\n\r\n return (\r\n <>\r\n {psychologistInvite ? \r\n <div className=\"kt-grid kt-grid--ver kt-grid--root\">\r\n <div\r\n id=\"kt_login\"\r\n className=\"kt-grid kt-grid--hor kt-grid--root kt-login kt-login--v1\">\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid kt-grid--desktop kt-grid--ver-desktop kt-grid--hor-tablet-and-mobile\">\r\n <div\r\n className=\"kt-grid__item kt-grid__item--order-tablet-and-mobile-2 kt-grid kt-grid--hor kt-login__aside\"\r\n style={{\r\n padding: 20,\r\n maxWidth: 320,\r\n backgroundImage: `url(${toAbsoluteUrl(\"/media/bg/rhc-farm.jpg\")})`\r\n }}\r\n >\r\n <div className=\"kt-grid__item\">\r\n <Link to=\"/auth/login\" className=\"kt-login__logo\">\r\n <img\r\n alt=\"Logo\"\r\n src={toAbsoluteUrl(\"/media/logos/logo-3.png\")}\r\n style={{ marginLeft: -10 }}\r\n />\r\n </Link>\r\n </div>\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid \">\r\n <div className=\"kt-grid__item kt-grid__item--middle\">\r\n <h3 className=\"kt-login__title\" style={{ marginTop: isMobile ? 0 : 80 }}>Rural Health Connect</h3>\r\n <h4 className=\"kt-login__subtitle\" style={{ marginTop: 20 }}>\r\n Welcome to the {psychologistInvite.providerdescription} Registration page.\r\n </h4>\r\n </div>\r\n </div>\r\n <div className=\"kt-grid__item\">\r\n <div className=\"kt-login__info\">\r\n <div className=\"kt-login__copyright\">\r\n © 2025 Rural Health Connect\r\n </div>\r\n <div className=\"kt-login__menu\">\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid__item--order-tablet-and-mobile-1 kt-login__wrapper login-bg\">\r\n \r\n <Formik\r\n enableReinitialize={false}\r\n initialValues={psychologistInvite}\r\n validationSchema = {validationSchema}\r\n onSubmit={(values, actions) => { \r\n submitForm(values);\r\n actions.setSubmitting(false);\r\n }}\r\n >\r\n {props => {\r\n const { values, errors, touched, handleChange, handleSubmit, setFieldValue } = props;\r\n const change = (name,e) => { e.persist(); handleChange(e); }; \r\n\r\n // function for checkboxes \r\n function getIndex(value, arr, prop) {\r\n for(var i = 0; i < arr.length; i++) {\r\n if(arr[i][prop] === value) {\r\n return i;\r\n }\r\n }\r\n return -1; // where the value doesn't exist\r\n }\r\n\r\n const handleToggle = (value) => () => {\r\n const currentIndex = getIndex(value.id, values.areasOfInterest_focus, 'id') //checked.find(r => r.id === value.id);\r\n const newChecked = [...values.areasOfInterest_focus];\r\n if (currentIndex === -1) {\r\n newChecked.push(value);\r\n } else {\r\n newChecked.splice(currentIndex, 1);\r\n }\r\n setFieldValue(\"areasOfInterest_focus\", newChecked)\r\n };\r\n\r\n const handleToggleOther = (value) => () => {\r\n const currentIndex = getIndex(value.id, values.areasOfInterest_other, 'id') //checked.find(r => r.id === value.id);\r\n const newChecked = [...values.areasOfInterest_other];\r\n if (currentIndex === -1) {\r\n newChecked.push(value);\r\n } else {\r\n newChecked.splice(currentIndex, 1);\r\n }\r\n setFieldValue(\"areasOfInterest_other\", newChecked)\r\n };\r\n\r\n // function to create image preview by reading file into a URL object \r\n const makePreview = (file) => {\r\n if(!file) {\r\n setPreviewFile('');\r\n return;\r\n }\r\n setcurrentprofilepicture(file);\r\n fileToDataUri(file)\r\n .then(newFile => {\r\n setPreviewFile(newFile)\r\n }) \r\n } \r\n return (\r\n <form noValidate={true} autoComplete=\"off\" onSubmit={handleSubmit} >\r\n\r\n <Paper style={{ backgroundColor: \"rgb(245,245,245)\", padding: 20 }} >\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-end\">\r\n <Grid item md={6} xs={12}>\r\n <h2>{psychologistInvite.providerdescription} Registration Form</h2>\r\n </Grid>\r\n <Grid item md={3} xs={6} style={{ fontStyle: \"italic\", fontWeight: 400, textAlign: \"right\", paddingBottom: 4, fontSize: 12 }}>\r\n * indicates required fields\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\"> \r\n {values.message ? (\r\n <Alert severity=\"info\" style={{ marginBottom: 10, marginTop: 8, fontSize: 14 }}>\r\n {values.message}\r\n </Alert>) \r\n : null\r\n }\r\n </Col>\r\n </Row>\r\n <hr style={{ marginTop: 4 }}></hr>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>First Name *</Form.Label>\r\n <Form.Control type=\"text\" name=\"firstname\" value={values.firstname} onChange={change.bind(null, \"firstname\")} autoComplete='new-password' isInvalid={touched.firstname && !!errors.firstname} isValid={touched.firstname && !errors.firstname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.firstname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Surname *</Form.Label>\r\n <Form.Control type=\"text\" name=\"surname\" value={values.surname} onChange={change.bind(null, \"surname\")} autoComplete='new-password' isInvalid={touched.surname && !!errors.surname} isValid={touched.surname && !errors.surname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.surname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Phone Number *</Form.Label>\r\n <Form.Control type=\"text\" name=\"mobilephone\" value={values.mobilephone} onChange={change.bind(null, \"mobilephone\")} isInvalid={touched.mobilephone && !!errors.mobilephone} isValid={touched.mobilephone && !errors.mobilephone} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.mobilephone}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Gender</Form.Label>\r\n <Form.Control as=\"select\" name=\"gender\" value={values.gender} onChange={change.bind(null, \"gender\")} >\r\n <option value=\"Prefer not to say\">Prefer not to say</option>\r\n <option value=\"Female\">Female</option>\r\n <option value=\"Male\">Male</option>\r\n <option value=\"Other\">Other</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Email *</Form.Label>\r\n <Form.Control type=\"text\" name=\"email\" value={values.email} onChange={change.bind(null, \"email\")} isInvalid={touched.email && !!errors.email} isValid={touched.email && !errors.email} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.email}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n {psychologistInvite && (psychologistInvite.providertype === 'Psychologist' || psychologistInvite.providertype === 'Clinical' || psychologistInvite.providertype === 'Occupational') ?\r\n <>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Education</Form.Label>\r\n <Form.Control type=\"text\" name=\"education\" value={values.education} onChange={change.bind(null, \"education\")} autoComplete='new-password' isInvalid={touched.education && !!errors.education} isValid={touched.education && !errors.education}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.education}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col> \r\n </>\r\n :\r\n null\r\n }\r\n </Row>\r\n <Row>\r\n <Col md=\"12\" className=\"quill-field\">\r\n <Form.Group >\r\n <Form.Label>Bio</Form.Label>\r\n <ReactQuill \r\n theme=\"snow\"\r\n value={values.bio}\r\n onChange={(newValue, editor)=>setFieldValue(\"bio\", newValue)} \r\n />\r\n {/* <Editor apiKey='wnbo4skoom9pnqmbfdjvwn8xdl1nfjtwhc2ofsqb1myqn5lo'\r\n value={values.bio}\r\n onEditorChange={(newValue, editor)=>setFieldValue(\"bio\", newValue)}\r\n init={{ branding: false, statusbar: false, height: 500 }}\r\n /> */}\r\n <Form.Control.Feedback type=\"invalid\">{errors.bio}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {psychologistInvite && (psychologistInvite.providertype !== 'Provisional' ) ? \r\n <>\r\n {psychologistInvite && (psychologistInvite.providertype === 'Financial' ) ? \r\n <h4>Organisation Details</h4>\r\n :\r\n <h4>Practice Details</h4>\r\n }\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n {psychologistInvite && (psychologistInvite.providertype === 'Financial' ) ? \r\n <Form.Label>Organisation Name</Form.Label>\r\n :\r\n <Form.Label>Practice Name</Form.Label>\r\n }\r\n <Form.Control type=\"text\" name=\"practicename\" value={values.practicename} onChange={change.bind(null, \"abn\")} autoComplete='new-password' isInvalid={touched.practicename && !!errors.practicename} isValid={touched.practicename && !errors.practicename}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.practicename}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>ABN</Form.Label>\r\n <Form.Control type=\"text\" name=\"abn\" value={values.abn} onChange={change.bind(null, \"abn\")} autoComplete='new-password' isInvalid={touched.abn && !!errors.abn} isValid={touched.abn && !errors.abn}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.abn}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"6\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label>Practice Address or Town (start typing to search) *</Form.Label>\r\n <PlacesAutoComplete \r\n currentID={0}\r\n currentfulladdress={values.fulladdress}\r\n setcurrentfulladdress = {(value) => setFieldValue(\"fulladdress\", value)}\r\n setcurrentLatitude = {(value) => setFieldValue(\"latitude\", value)} \r\n setcurrentLongitude = {(value) => setFieldValue(\"longitude\", value)}\r\n setcurrentPostCode = {(value) => setFieldValue(\"postcode\", value)}\r\n isInvalid={touched.fulladdress && !!errors.fulladdress} \r\n isValid={touched.fulladdress && !errors.fulladdress} \r\n />\r\n {touched.fulladdress && !!errors.fulladdress ? (<p className='error-help'>{errors.fulladdress}</p>) : ''}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n {psychologistInvite && (psychologistInvite.providertype === 'Psychologist' || psychologistInvite.providertype === 'Clinical' || psychologistInvite.providertype === 'Occupational' || psychologistInvite.providertype === 'GP' || psychologistInvite.providertype === 'Provisional') ?\r\n <>\r\n <h4>Professional Details</h4>\r\n <hr></hr>\r\n </>\r\n :\r\n null\r\n }\r\n\r\n {psychologistInvite && (psychologistInvite.providertype === 'Psychologist' || psychologistInvite.providertype === 'Clinical' || psychologistInvite.providertype === 'Occupational' || psychologistInvite.providertype === 'GP' || psychologistInvite.providertype === 'Provisional') ?\r\n <>\r\n <Row>\r\n {psychologistInvite && (psychologistInvite.providertype === 'Psychologist' || psychologistInvite.providertype === 'Clinical' || psychologistInvite.providertype === 'Occupational' || psychologistInvite.providertype === 'Provisional') ? \r\n <>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>AHPRA Registration Number</Form.Label>\r\n <Form.Control type=\"text\" name=\"ahpraRegistrationNo\" value={values.ahpraRegistrationNo} onChange={change.bind(null, \"ahpraRegistrationNo\")} autoComplete='new-password' isInvalid={touched.ahpraRegistrationNo && !!errors.ahpraRegistrationNo} isValid={touched.ahpraRegistrationNo && !errors.ahpraRegistrationNo}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.ahpraRegistrationNo}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </>\r\n :\r\n null\r\n }\r\n {psychologistInvite && (psychologistInvite.providertype === 'Psychologist' || psychologistInvite.providertype === 'Clinical' || psychologistInvite.providertype === 'Occupational') ? \r\n <>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Provider Number *</Form.Label>\r\n <Form.Control type=\"text\" name=\"providernumber\" value={values.providernumber} onChange={change.bind(null, \"providernumber\")} autoComplete='new-password' isInvalid={touched.providernumber && !!errors.providernumber} isValid={touched.providernumber && !errors.providernumber}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.providernumber}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </>\r\n :\r\n null\r\n }\r\n {psychologistInvite && (psychologistInvite.providertype === 'Psychologist' || psychologistInvite.providertype === 'Clinical' || psychologistInvite.providertype === 'Occupational') ? \r\n <>\r\n <Col md=\"2\">\r\n <Form.Group>\r\n <Form.Label>Year First Practiced</Form.Label>\r\n <Form.Control type=\"text\" name=\"startedpracticingyear\" value={values.startedpracticingyear} onChange={change.bind(null, \"startedpracticingyear\")} autoComplete='new-password' isInvalid={touched.startedpracticingyear && !!errors.startedpracticingyear} isValid={touched.startedpracticingyear && !errors.startedpracticingyear}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.startedpracticingyear}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </>\r\n :\r\n null\r\n }\r\n {psychologistInvite && psychologistInvite.providertype !== 'Provisional' ? \r\n <>\r\n <Col md=\"2\">\r\n <Form.Group>\r\n <Form.Label>Insurance Document:</Form.Label>\r\n <Form.Control type=\"file\" name=\"newInsuranceFile\" onChange={(event) => setFieldValue('newInsuranceFile', event.currentTarget.files[0])} isInvalid={touched.newInsuranceFile && !!errors.newInsuranceFile} isValid={touched.newInsuranceFile && !errors.newInsuranceFile} className=\"form-control\" style={{ paddingTop: 6, paddingLeft: 6 }} />\r\n <Form.Control.Feedback type=\"invalid\">{errors.newInsuranceFile}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <Form.Label>Insurance Expiry</Form.Label>\r\n <MuiPickersUtilsProvider utils={DateFnsUtils} >\r\n <KeyboardDatePicker\r\n name='insuranceexpiry'\r\n inputVariant=\"outlined\"\r\n format=\"yyyy-MM-dd\"\r\n margin=\"dense\"\r\n id='insuranceexpiry'\r\n style={{marginTop: 28, marginLeft: -110}}\r\n value={values.insuranceexpiry}\r\n autoOk={true}\r\n size=\"small\"\r\n onChange={(newValue) => setFieldValue('insuranceexpiry', newValue)}\r\n className=\"formquestion-datepicker summary-date\" \r\n InputProps={{ classes: { input: 'input-date-picker' }, }}\r\n />\r\n </MuiPickersUtilsProvider> \r\n </Form.Group>\r\n </Col>\r\n </>\r\n :\r\n null\r\n }\r\n </Row>\r\n </>\r\n :\r\n null\r\n } \r\n {psychologistInvite && (psychologistInvite.providertype === 'Psychologist' || psychologistInvite.providertype === 'Clinical' || psychologistInvite.providertype === 'Occupational') ? \r\n <>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>Areas of Interest (Select all that apply) *</Form.Label>\r\n <br />\r\n {aoi_focus.map(row => {\r\n return(\r\n <FormControlLabel\r\n control={<Checkbox checked={values.areasOfInterest_focus.find(r => r.id === row.id)} onClick={handleToggle(row)} value={row.id} name=\"areasOfInterest_focus\" />}\r\n label={row.issue}\r\n style={{ marginRight: 30 }}\r\n />)\r\n })\r\n }\r\n \r\n {touched.areasOfInterest_focus && !!errors.areasOfInterest_focus ? (<p className='error-help'>{errors.areasOfInterest_focus}</p>) : ''}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n {psychologistInvite && (psychologistInvite.providertype !== 'GP') && (psychologistInvite.providertype !== 'Social' ) && (psychologistInvite.providertype !== 'Nurse' ) && (psychologistInvite.providertype !== 'Occupational' ) ? \r\n <>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group >\r\n <Form.Label>I want to provide support in these key areas of need (Select all that apply) *</Form.Label>\r\n <br />\r\n {aoi_other.map(row => {\r\n return(\r\n <FormControlLabel\r\n control={<Checkbox checked={values.areasOfInterest_other.find(r => r.id === row.id)} onClick={handleToggleOther(row)} value={row.id} name=\"areasOfInterest_other\" />}\r\n label={row.issue}\r\n style={{ marginRight: 30 }}\r\n />)\r\n })\r\n }\r\n \r\n {touched.areasOfInterest_other && !!errors.areasOfInterest_other ? (<p className='error-help'>{errors.areasOfInterest_other}</p>) : ''}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n {psychologistInvite && (psychologistInvite.providertype === 'Psychologist' \r\n || psychologistInvite.providertype === 'Clinical'\r\n || psychologistInvite.providertype === 'Social'\r\n || psychologistInvite.providertype === 'Nurse'\r\n || psychologistInvite.providertype ==='Occupational') \r\n && psychologistInvite.specialisttype !== 'nthqldphn' ? \r\n <>\r\n <h4>Client Billing Settings </h4>\r\n <Form.Label onClick={() => registrationView(values,'Full Fee')} style={{ marginLeft:10, color: 'blue', cursor:'pointer' }}>(Preview Full Fee)</Form.Label><Form.Label onClick={() => registrationView(values,'Reduced Gap')} style={{ marginLeft:10, color: 'blue', cursor:'pointer' }}>(Preview Reduced Fee)</Form.Label>\r\n <hr></hr>\r\n <Alert severity=\"info\" style={{ marginBottom: 10, marginTop: 8, fontSize: 14 }}>\r\n <p>Please use the review button above to check client view.</p>\r\n </Alert>\r\n <Row>\r\n <Col md=\"2\">\r\n <Form.Group>\r\n <Form.Label >Full Fee Rate (Total)*</Form.Label>\r\n <InputGroup>\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>$</InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control type=\"text\" name=\"hourlyrate\" value={values.hourlyrate} onChange={change.bind(null, \"hourlyrate\")} autoComplete='new-password' isInvalid={touched.hourlyrate && !!errors.hourlyrate} isValid={touched.hourlyrate && !errors.hourlyrate}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.hourlyrate}</Form.Control.Feedback>\r\n </InputGroup>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Label>Reduced Fee Rate (Total)* </Form.Label>\r\n <Form.Label style={{ fontWeight:600 }}> For clients in financial hardship (ideally between $10 and $45 out of pocket) </Form.Label>\r\n </Col>\r\n <Col md=\"2\">\r\n <Form.Group >\r\n <InputGroup>\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>$</InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control type=\"text\" name=\"reducedFee\" value={values.reducedFee} onChange={change.bind(null, \"reducedFee\")} autoComplete='new-password' isInvalid={touched.reducedFee && !!errors.reducedFee} isValid={touched.reducedFee && !errors.reducedFee}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.reducedFee}</Form.Control.Feedback>\r\n </InputGroup>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Form.Label style={{ fontWeight:300, marginLeft:10 }}>*Set your Reduced Fee to 0 for client bulk billing as reduced fee option</Form.Label>\r\n </Row>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Label style={{ marginTop:20 }}>Check the box below if you want this text to appear alongside your fees</Form.Label>\r\n <Form.Group>\r\n <Checkbox aria-label='Offer Client Pricing Flexibility' name='isReducedFee' value={values.isReducedFee === 'Y' ? true : false} onChange={change.bind(null, 'isReducedFee')} style={{ paddingTop: 6, paddingLeft: 0 }} />\r\n <span style={{ fontWeight:600 }} >Some flexibility, depending on client circumstances</span>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n </>\r\n :\r\n null\r\n }\r\n <h4>Login Details</h4>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Password *</Form.Label>\r\n <Form.Control type=\"password\" name=\"profilePassword\" value={values.profilePassword} autoComplete='new-password' onChange={change.bind(null, \"profilePassword\")} isInvalid={touched.profilePassword && !!errors.profilePassword} isValid={touched.profilePassword && !errors.profilePassword} />\r\n <Form.Control.Feedback type=\"invalid\">{errors.profilePassword}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>Confirm Password *</Form.Label>\r\n <Form.Control type=\"password\" name=\"profilePasswordConfirmation\" value={values.profilePasswordConfirmation} onChange={change.bind(null, \"profilePasswordConfirmation\")} isInvalid={touched.profilePasswordConfirmation && !!errors.profilePasswordConfirmation} isValid={touched.profilePasswordConfirmation && !errors.profilePasswordConfirmation} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.profilePasswordConfirmation}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group >\r\n <Form.Label>PDF password</Form.Label>\r\n <Form.Control type=\"text\" name=\"pdfpassword\" value={values.pdfpassword} onChange={change.bind(null, \"pdfpassword\")} autoComplete='new-password' isInvalid={touched.pdfpassword && !!errors.pdfpassword} isValid={touched.pdfpassword && !errors.pdfpassword}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.pdfpassword}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <h4>Profile Photo</h4>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"10\">\r\n <Image src={previewFile} style={{ maxHeight: 200, marginBottom: 30 }} />\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"10\">\r\n <Form.Group>\r\n <Form.Label>Upload New Profile Photo</Form.Label>\r\n <Form.Control type=\"file\" name=\"newProfilePicture\" onChange={(event) => makePreview(event.target.files[0])} isInvalid={touched.newProfilePicture && !!errors.newProfilePicture} isValid={touched.newProfilePicture && !errors.newProfilePicture} />\r\n {(JSON.stringify(errors).length > 2 || currentprofilepicturetouched) && currentprofilepicture.name === '' ? (<p className='error-help'>Please provide a profile picture.</p>) : ''}\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <h4>License Agreement</h4>\r\n <hr></hr>\r\n <Row>\r\n <Col md=\"10\">\r\n <Form.Group>\r\n <Checkbox aria-label='Agreement Acceptance' name=\"agreementAcceptance\" value={values.agreementAcceptance} onChange={change.bind(null, \"agreementAcceptance\")} style={{ paddingTop: 6, paddingLeft: 0 }} />\r\n {psychologistInvite.specialisttype === 'nthqldphn' ?\r\n <>\r\n I agree to the <a href=\"https://files.ruralhealthconnect.com.au/fileStoreRHC/RuralHealthConnect-NQPHNServicesAgreement.pdf\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"cell-Link\">Rural Health Connect Licence Agreement</a>\r\n </>\r\n :\r\n <>\r\n I agree to the <a href=\"https://files.ruralhealthconnect.com.au/fileStoreRHC/RuralHealthConnect-ServicesAgreement-2022-02-14.pdf\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"cell-Link\">Rural Health Connect Licence Agreement</a>\r\n </>\r\n }\r\n <div className=\"error-help\">{errors.agreementAcceptance}</div>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item md={3} xs={6}> \r\n \r\n </Grid>\r\n <Grid item md={1} xs={6}>\r\n <Button variant=\"primary\" type=\"submit\" >\r\n Submit\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n </Paper>\r\n </form>\r\n )\r\n }}\r\n </Formik>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n : 'Loading...' }\r\n\r\n <Modal show={showRegistrationView} onHide={handleRegistrationViewClose} dialogClassName=\"providerRegistrationView-modal\">\r\n <Modal.Header closeButton className=\"providerRegistrationView-modal\">\r\n <Modal.Title>Client Registration View</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"providerRegistrationView-modal\">\r\n <Grid item md={12} style={{ height: 710, width: \"100%\", overflowY: \"scroll\", paddingLeft: 20, backgroundColor: \"rgb(255,255,255)\" }}>\r\n <Masonry\r\n breakpointCols={1}\r\n className=\"my-masonry-grid\"\r\n columnClassName=\"my-masonry-grid_column\">\r\n <Card className={classes.root} variant=\"outlined\" >\r\n <CardMedia\r\n className={classes.media}\r\n image={previewFile}\r\n title=\"Provider\"\r\n />\r\n <CardContent>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item sm={12}>\r\n <Typography variant=\"h5\" component=\"h3\">\r\n {providerRegistrationView.firstname} {providerRegistrationView.surname} (Next available: Next Available)\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n {(providerRegistrationView.providertype !== 'GP' && providerRegistrationView.providertype !== 'Provisional') ?\r\n <>\r\n {currentPaymentType === 'Full Fee' ?\r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={6} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={6} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {'$' + providerRegistrationView.calc_standardFeeOutOfPocket }\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={12}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay ${providerRegistrationView.calc_hourlyrate} on the day \r\n </Typography>\r\n <Typography>\r\n Receive back {'$' + providerRegistrationView.calc_medicareRebate} from Medicare\r\n </Typography>\r\n </Grid>\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n {currentPaymentType === 'Reduced Gap' ?\r\n <>\r\n {providerRegistrationView.isReducedFee === 'Y' ? \r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={6} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600, textAlign: \"top\"}}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={6} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {'$' + providerRegistrationView.calc_reducedFeeOutOfPocket }\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={12} >\r\n { providerRegistrationView.reducedFee === '0' ?\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay $0 on the day\r\n </Typography>\r\n :\r\n <>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay ${providerRegistrationView.calc_reducedFee} on the day\r\n </Typography>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n Receive back {'$' + providerRegistrationView.calc_medicareRebate} from Medicare\r\n </Typography>\r\n </>\r\n }\r\n </Grid>\r\n { providerRegistrationView.reducedFee !== '0' ?\r\n <Grid item sm={12}>\r\n <Typography variant=\"subtitle2\" style={{ fontWeight:300, fontStyle: 'italic' }}>\r\n Note this provider offers some flexibility, depending on client circumstances\r\n </Typography>\r\n </Grid>\r\n :\r\n null\r\n }\r\n </Grid>\r\n </>\r\n :\r\n <>\r\n <Grid container style={{ marginTop: 10 }}>\r\n <Grid item sm={6} >\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600, textAlign: \"top\" }}>\r\n Out of Pocket Cost\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={6} style={{ textAlign: \"right\" }}>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:600 }}>\r\n {'$' + providerRegistrationView.calc_reducedFeeOutOfPocket }\r\n </Typography>\r\n </Grid>\r\n <Grid item sm={12} >\r\n { providerRegistrationView.reducedFee === '0' ?\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay $0 on the day\r\n </Typography>\r\n :\r\n <>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n You pay ${providerRegistrationView.calc_reducedFee} on the day\r\n </Typography>\r\n <Typography variant=\"subtitle1\" style={{ fontWeight:300 }}>\r\n Receive back {'$' + providerRegistrationView.calc_medicareRebate} from Medicare\r\n </Typography>\r\n </>\r\n }\r\n </Grid>\r\n </Grid>\r\n </>\r\n }\r\n </>\r\n :\r\n null\r\n } \r\n <Grid container style={{ marginBottom: 15, marginTop: 10 }}>\r\n {providerRegistrationView.areasOfInterest_focus.map((row) => {return (<Chip size=\"small\" key={`AOI${row.id}`} variant=\"outlined\" label={row.issue} style={{ margin: 2 }} />)})}\r\n </Grid>\r\n </>\r\n :\r\n null\r\n }\r\n <Typography className={classes.pos} color=\"textSecondary\">\r\n <br />\r\n </Typography>\r\n <Grid container>\r\n {currentPaymentType === 'Supervision' ?\r\n <>\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={providerRegistrationView.supervisorBio.substring(0,700)} />\r\n {providerRegistrationView.supervisorBio.length > 700 ?\r\n <>\r\n ...\r\n <Badge variant=\"secondary\" onClick={()=>moreProviderBio(providerRegistrationView.fullname, providerRegistrationView.supervisorBio)} style={{ marginRight: 5, cursor: 'pointer' }}>\r\n more\r\n </Badge>\r\n </>\r\n :\r\n null\r\n }\r\n </Typography>\r\n </>\r\n :\r\n <>\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={providerRegistrationView.bio.substring(0,700)} />\r\n {providerRegistrationView.bio.length > 700 ?\r\n <>\r\n ...\r\n <Badge variant=\"secondary\" onClick={()=>moreProviderBio(providerRegistrationView.fullname, providerRegistrationView.bio)} style={{ marginRight: 5, cursor: 'pointer' }}>\r\n more\r\n </Badge>\r\n </>\r\n :\r\n null\r\n }\r\n </Typography>\r\n </>\r\n }\r\n </Grid>\r\n </CardContent>\r\n </Card>\r\n </Masonry>\r\n </Grid>\r\n\r\n </Modal.Body>\r\n <Modal.Footer className=\"invite-modal\">\r\n <Button variant=\"secondary\" onClick={handleRegistrationViewClose}>\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n\r\n <Modal show={showProviderBio} onHide={()=>setShowProviderBio(false)} dialogClassName=\"invite-modal\" >\r\n <Modal.Header closeButton className=\"invite-modal\">\r\n <Modal.Title>{providerBioFullName}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"invite-modal\" style={{ backgroundColor: 'rgb(245,245,245)' }}>\r\n <Grid container >\r\n <Typography variant=\"body2\" component=\"p\">\r\n <Interweave content={providerBioBio} />\r\n </Typography>\r\n </Grid>\r\n </Modal.Body>\r\n <Modal.Footer className=\"invite-modal\">\r\n <Button variant=\"secondary\" onClick={() => setShowProviderBio(false)} className=\"lightButtonOutlinedLarge\">\r\n Close\r\n </Button>\r\n </Modal.Footer>\r\n </Modal>\r\n\r\n </>\r\n );\r\n}\r\n}\r\n\r\nfunction RegistrationConfirmation(props) {\r\n\r\n // change width of sidebar for screensize\r\n const isMobile = useMediaQuery('(max-width: 760px)');\r\n return (\r\n\r\n <>\r\n <div className=\"kt-grid kt-grid--ver kt-grid--root\">\r\n <div\r\n id=\"kt_login\"\r\n className=\"kt-grid kt-grid--hor kt-grid--root kt-login kt-login--v1\">\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid kt-grid--desktop kt-grid--ver-desktop kt-grid--hor-tablet-and-mobile\">\r\n <div\r\n className=\"kt-grid__item kt-grid__item--order-tablet-and-mobile-2 kt-grid kt-grid--hor kt-login__aside\"\r\n style={{\r\n backgroundImage: `url(${toAbsoluteUrl(\"/media/bg/rhc-farm.jpg\")})`\r\n }}\r\n >\r\n <div className=\"kt-grid__item\">\r\n <Link to=\"/auth/login\" className=\"kt-login__logo\">\r\n <img\r\n alt=\"Logo\"\r\n src={toAbsoluteUrl(\"/media/logos/logo-3.png\")}\r\n style={{ marginLeft: -10 }}\r\n />\r\n </Link>\r\n </div>\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid \">\r\n <div className=\"kt-grid__item kt-grid__item--middle\">\r\n <h3 className=\"kt-login__title\" style={{ marginTop: isMobile ? 0 : 80 }}>Rural Health Connect</h3>\r\n <h4 className=\"kt-login__subtitle\" style={{ marginTop: 20 }}>\r\n Welcome to the Provider Registration page.\r\n </h4>\r\n </div>\r\n </div>\r\n <div className=\"kt-grid__item\">\r\n <div className=\"kt-login__info\">\r\n <div className=\"kt-login__copyright\">\r\n © 2025 Rural Health Connect\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid__item--order-tablet-and-mobile-1 kt-login__wrapper login-bg\">\r\n \r\n <Paper style={{ backgroundColor: \"rgb(245,245,245)\", padding: 20 }} >\r\n <h3>\r\n {props.title}\r\n </h3>\r\n <p style={{ marginTop: 30 }}>\r\n {props.message}\r\n </p>\r\n {props.enableLogin && \r\n <>\r\n <p>\r\n You may now login to the portal to make and manage your bookings and your profile.\r\n </p>\r\n <p style={{ marginTop: 20 }}>\r\n <Link to=\"/auth/login\" className=\"kt-login__logo\"> \r\n <Button>\r\n Portal Login\r\n </Button>\r\n </Link>\r\n </p>\r\n </>}\r\n </Paper>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n\r\n );\r\n\r\n}","import React, { useState } from \"react\"\r\nimport { Link, useParams } from \"react-router-dom\"\r\nimport { useDispatch } from 'react-redux'\r\nimport PlacesAutoComplete from \"../../components/AddressAutoComplete\";\r\nimport * as Registration from \"../../store/ducks/registration.duck\";\r\nimport { Button, Form, Row, Col, Alert } from \"react-bootstrap\";\r\nimport { Paper, Grid } from '@material-ui/core';\r\nimport { Formik } from 'formik';\r\nimport * as Yup from \"yup\";\r\n// import { Document, Page } from 'react-pdf/dist/esm/entry.webpack';\r\nimport { useMediaQuery } from '@material-ui/core';\r\nimport { toAbsoluteUrl } from \"../../../_metronic\";\r\nimport InfoOutlinedIcon from '@material-ui/icons/InfoOutlined';\r\nimport HelpOutlinedIcon from '@material-ui/icons/HelpOutline';\r\nimport \"../../../_metronic/_assets/sass/pages/login/login-1.scss\";\r\nimport '../../../_metronic/_assets/css/app2.css';\r\n\r\nexport default function PsychologistInvitationPage() {\r\n\r\n // change width of sidebar for screensize\r\n const isMobile = useMediaQuery('(max-width: 760px)');\r\n const { programid } = useParams()\r\n\r\n const dispatch = useDispatch()\r\n\r\n const psychologistInvite = {\r\n firstname: '', \r\n surname: '',\r\n providernumber : '',\r\n email: '', \r\n phone: '',\r\n education: '',\r\n locality: '',\r\n latitude: '',\r\n longitude: '',\r\n postcode: '',\r\n comments: '',\r\n aapimemberno: '',\r\n providertype: 'Psychologist'\r\n }\r\n\r\n const [status, setStatus] = useState('Not Started');\r\n // const [postData, setPostData] = useState();\r\n // const [showTerms, setShowTerms] = useState(false);\r\n\r\n // Sets size of pdf to pass to viewer\r\n // const [numPages, setNumPages] = useState(null); \r\n // function onDocumentLoadSuccess({ numPages }) {\r\n // setNumPages(numPages);\r\n // }\r\n\r\n // when the invite is completed, show the confirmation message\r\n if(status === 'Submitted') {\r\n return <PsychologistConfirmation />\r\n }\r\n // otherwise, load the client registration form and all its hooplah...\r\n else \r\n {\r\n\r\n function uuidv4() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & (0x3 | 0x8));\r\n return v.toString(16);\r\n });\r\n }\r\n \r\n function submitForm(data){\r\n dispatch(Registration.actions.postPsychologistInvite({ ...data, invitetoken: uuidv4(), specialisttype : programid }))\r\n setStatus('Submitted')\r\n }\r\n\r\n const validationSchema = Yup.object().shape({\r\n firstname: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n .required(\"First Name is required\"),\r\n surname: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n .required(\"Surname is required\"),\r\n email: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(200,\"Too Long\")\r\n .email(\"Enter a valid email\")\r\n .required(\"Email is required\"),\r\n phone: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(12,\"Too Long\")\r\n .required(\"Phone Number is required\"),\r\n providernumber: Yup.string()\r\n .min(4,\"Too Short\")\r\n .max(50,\"Too Long\")\r\n .required(\"Provider Number is required\"),\r\n locality: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(200,\"Too Long\")\r\n .required(\"Town/Locality is required\"), \r\n });\r\n\r\n return (\r\n <>\r\n <div className=\"kt-grid kt-grid--ver kt-grid--root\">\r\n <div\r\n id=\"kt_login\"\r\n className=\"kt-grid kt-grid--hor kt-grid--root kt-login kt-login--v1\">\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid kt-grid--desktop kt-grid--ver-desktop kt-grid--hor-tablet-and-mobile\">\r\n <div\r\n className=\"kt-grid__item kt-grid__item--order-tablet-and-mobile-2 kt-grid kt-grid--hor kt-login__aside\"\r\n style={{\r\n padding: 20,\r\n maxWidth: 320,\r\n backgroundImage: `url(${toAbsoluteUrl(\"/media/bg/rhc-farm.jpg\")})`\r\n }}\r\n >\r\n <div className=\"kt-grid__item\">\r\n <Link to=\"/auth/login\" className=\"kt-login__logo\">\r\n <img\r\n alt=\"Logo\"\r\n src={toAbsoluteUrl(\"/media/logos/logo-3.png\")}\r\n style={{ marginLeft: -10 }}\r\n />\r\n </Link>\r\n </div>\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid \">\r\n <div className=\"kt-grid__item kt-grid__item--middle\">\r\n <h3 className=\"kt-login__title\" style={{ marginTop: isMobile ? 0 : 80 }}>Rural Health Connect</h3>\r\n <h4 className=\"kt-login__subtitle\" style={{ marginTop: 20 }}>\r\n Welcome to the Provider Registration page\r\n </h4>\r\n </div>\r\n </div>\r\n <div className=\"kt-grid__item\">\r\n <div className=\"kt-login__info\">\r\n <div className=\"kt-login__copyright\">\r\n © 2025 Rural Health Connect\r\n </div>\r\n <div className=\"kt-login__menu\">\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid__item--order-tablet-and-mobile-1 kt-login__wrapper login-bg\">\r\n \r\n <Formik\r\n enableReinitialize={true}\r\n initialValues={psychologistInvite}\r\n validationSchema = {validationSchema}\r\n onSubmit={(values, actions) => {\r\n submitForm(values);\r\n actions.setSubmitting(false);\r\n }}\r\n >\r\n {props => {\r\n const { values, errors, touched, handleChange, handleSubmit, setFieldValue } = props;\r\n const change = (name,e) => { e.persist(); handleChange(e); };\r\n return (\r\n <form noValidate={true} autoComplete=\"off\" onSubmit={handleSubmit} >\r\n\r\n <Paper style={{ backgroundColor: \"rgb(245,245,245)\", padding: 20, maxWidth: 800 }}>\r\n <Row>\r\n <Col md=\"12\">\r\n {programid === 'nthqldphn' ?\r\n <Alert variant=\"light\" style={{ backgroundColor: \"#DAF3F4\", borderColor: \"#CEE6E7\" }}>\r\n <InfoOutlinedIcon fontSize=\"large\" style={{ color: \"#7FA3A5\", marginLeft: -10, marginRight: 15 }} /> Welcome to the North Queensland PHN Program, <br />Please complete the Registration of Interest Form below. \r\n </Alert>\r\n :\r\n null\r\n }\r\n <Grid container direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-end\">\r\n <Grid item md={9} xs={12}>\r\n <h2>Provider Registration of Interest Form</h2>\r\n </Grid>\r\n <Grid item md={3} xs={12} style={{ fontStyle: \"italic\", fontWeight: 400, textAlign: \"right\", paddingBottom: 4, fontSize: 12 }}>\r\n * indicates required fields\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n <hr style={{ marginTop: 4 }}></hr>\r\n <Row>\r\n <Col md=\"6\">\r\n <Form.Group >\r\n <Form.Label>Select your role</Form.Label>\r\n <Form.Control as=\"select\" name=\"providertype\" value={values.providertype} onChange={change.bind(null, \"providertype\")} >\r\n <option value=\"Psychologist\">Psychologist</option>\r\n {/* <option value=\"Financial\">Financial Counsellor</option> */}\r\n <option value=\"Clinical\">Clinical Psychologist</option>\r\n <option value=\"GP\">GP</option>\r\n <option value=\"Provisional\">Provisional Psychologist</option>\r\n <option value=\"Social\">MH Social Worker</option>\r\n <option value=\"Nurse\">Mental Health Nurse</option>\r\n <option value=\"Occupational\">Occupational Therapist</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>First Name *</Form.Label>\r\n <Form.Control type=\"text\" name=\"firstname\" value={values.firstname} onChange={change.bind(null, \"firstname\")} autoComplete='new-password' isInvalid={touched.firstname && !!errors.firstname} isValid={touched.firstname && !errors.firstname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.firstname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Surname *</Form.Label>\r\n <Form.Control type=\"text\" name=\"surname\" value={values.surname} onChange={change.bind(null, \"surname\")} autoComplete='new-password' isInvalid={touched.surname && !!errors.surname} isValid={touched.surname && !errors.surname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.surname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Provider Number *</Form.Label>\r\n <Form.Control type=\"text\" name=\"providernumber\" value={values.providernumber} onChange={change.bind(null, \"providernumber\")} autoComplete='new-password' isInvalid={touched.providernumber && !!errors.providernumber} isValid={touched.providernumber && !errors.providernumber}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.providernumber}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"8\">\r\n <Form.Group >\r\n <Form.Label>Email *</Form.Label>\r\n <Form.Control type=\"text\" name=\"email\" value={values.email} onChange={change.bind(null, \"email\")} isInvalid={touched.email && !!errors.email} isValid={touched.email && !errors.email} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.email}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Phone Number *</Form.Label>\r\n <Form.Control type=\"text\" name=\"phone\" value={values.phone} onChange={change.bind(null, \"phone\")} isInvalid={touched.phone && !!errors.phone} isValid={touched.phone && !errors.phone} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.phone}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col> \r\n </Row>\r\n <Row>\r\n <Col md=\"8\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label>Town/Locality (start typing to search) *</Form.Label>\r\n <PlacesAutoComplete \r\n currentID={0}\r\n currentfulladdress={values.locality}\r\n setcurrentfulladdress = {(value) => setFieldValue(\"locality\", value)}\r\n setcurrentLatitude = {(value) => setFieldValue(\"latitude\", value)} \r\n setcurrentLongitude = {(value) => setFieldValue(\"longitude\", value)}\r\n setcurrentPostCode = {(value) => setFieldValue(\"postcode\", value)}\r\n isInvalid={touched.locality && !!errors.locality} \r\n isValid={touched.locality && !errors.locality} \r\n />\r\n {touched.locality && !!errors.locality ? (<p className='error-help'>{errors.locality}</p>) : ''}\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Education</Form.Label>\r\n <Form.Control type=\"text\" name=\"education\" value={values.education} onChange={change.bind(null, \"education\")} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col> \r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group>\r\n <Form.Label>Comments/Questions</Form.Label>\r\n <Form.Control as=\"textarea\" rows={3} type=\"text\" name=\"comments\" value={values.comments} onChange={change.bind(null, \"comments\")} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n {programid !== 'nthqldphn' ?\r\n <Alert variant=\"light\" style={{ backgroundColor: \"#DAF3F4\", borderColor: \"#CEE6E7\" }}>\r\n <InfoOutlinedIcon fontSize=\"large\" style={{ color: \"#7FA3A5\", marginLeft: -10, marginRight: 15 }} /> Rural Health Connect is a proud partner of the Australian Association of Psychologists Inc and provides a discount to members. \r\n </Alert>\r\n : \r\n null\r\n }\r\n {/* <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>AAPI Membership No</Form.Label>\r\n <Form.Control type=\"text\" name=\"aapimemberno\" value={values.aapimemberno} onChange={change.bind(null, \"aapimemberno\")} autoComplete='new-password' />\r\n </Form.Group>\r\n </Col> \r\n </Row> */}\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\"> \r\n <Grid item md={4} xs={8} style={{ fontWeight: 500 }}>\r\n {programid === 'nthqldphn' ?\r\n <a href=\"https://files.ruralhealthconnect.com.au/fileStoreRHC/RuralHealthConnect-NQPHNServicesAgreement.pdf\" target=\"_Invitations\" >\r\n Read our Licence Agreement Here\r\n </a>\r\n :\r\n <a href=\"https://files.ruralhealthconnect.com.au/fileStoreRHC/RuralHealthConnect-ServicesAgreement-2022-02-14.pdf\" target=\"_Invitations\" >\r\n Read our Licence Agreement Here\r\n </a>\r\n }\r\n </Grid>\r\n <Grid item md={2} xs={6} style={{ textAlign: \"right\"}}>\r\n <Button variant=\"primary\" type=\"submit\">\r\n Submit\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n {programid === 'nthqldphn' ?\r\n <Alert severity=\"info\" variant=\"light\" style={{ backgroundColor: \"#DAF3F4\", borderColor: \"#CEE6E7\", marginTop: 20 }}>\r\n <HelpOutlinedIcon fontSize=\"large\" style={{ color: \"#7FA3A5\", marginLeft: -10, marginRight: 15 }} />Please email <a href='info@ruralhealthconnect.com.au'>info@ruralhealthconnect.com.au</a> if you have any questions or issues submitting this form.. \r\n </Alert>\r\n :\r\n null\r\n }\r\n </Col>\r\n </Row>\r\n </Paper>\r\n </form>\r\n )\r\n }}\r\n </Formik>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </>\r\n );\r\n}\r\n}\r\n\r\nfunction PsychologistConfirmation() {\r\n\r\n // change width of sidebar for screensize\r\n const isMobile = useMediaQuery('(max-width: 760px)');\r\n return (\r\n\r\n <>\r\n <div className=\"kt-grid kt-grid--ver kt-grid--root\">\r\n <div\r\n id=\"kt_login\"\r\n className=\"kt-grid kt-grid--hor kt-grid--root kt-login kt-login--v1\">\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid kt-grid--desktop kt-grid--ver-desktop kt-grid--hor-tablet-and-mobile\">\r\n <div\r\n className=\"kt-grid__item kt-grid__item--order-tablet-and-mobile-2 kt-grid kt-grid--hor kt-login__aside\"\r\n style={{\r\n backgroundImage: `url(${toAbsoluteUrl(\"/media/bg/rhc-farm.jpg\")})`\r\n }}\r\n >\r\n <div className=\"kt-grid__item\">\r\n <Link to=\"/\" className=\"kt-login__logo\">\r\n <img\r\n alt=\"Logo\"\r\n src={toAbsoluteUrl(\"/media/logos/logo-3.png\")}\r\n style={{ marginLeft: -10 }}\r\n />\r\n </Link>\r\n </div>\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid \">\r\n <div className=\"kt-grid__item kt-grid__item--middle\">\r\n <h3 className=\"kt-login__title\" style={{ marginTop: isMobile ? 0 : 80 }}>Rural Health Connect</h3>\r\n <h4 className=\"kt-login__subtitle\" style={{ marginTop: 20 }}>\r\n Welcome to the Provider Registration page\r\n </h4>\r\n </div>\r\n </div>\r\n <div className=\"kt-grid__item\">\r\n <div className=\"kt-login__info\">\r\n <div className=\"kt-login__copyright\">\r\n © 2025 Rural Health Connect\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid__item--order-tablet-and-mobile-1 kt-login__wrapper login-bg\">\r\n \r\n <Paper style={{ backgroundColor: \"rgb(245,245,245)\", padding: 20 }} >\r\n <h3>\r\n Registration of Interest successful.\r\n </h3>\r\n <p style={{ marginTop: 30 }}>\r\n Thank you for submitting your information. We will be in touch with you soon regarding your registration.\r\n </p>\r\n </Paper>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n\r\n );\r\n}\r\n\r\n","import React, { useState } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { useDispatch } from 'react-redux'\r\nimport * as Registration from \"../../store/ducks/registration.duck\";\r\nimport { Button, Form, Row, Col, Alert } from \"react-bootstrap\";\r\nimport { Paper, Grid } from '@material-ui/core';\r\nimport { Formik } from 'formik';\r\nimport * as Yup from \"yup\";\r\n// import { Document, Page } from 'react-pdf/dist/esm/entry.webpack';\r\nimport { useMediaQuery } from '@material-ui/core';\r\nimport { toAbsoluteUrl } from \"../../../_metronic\";\r\nimport \"../../../_metronic/_assets/sass/pages/login/login-1.scss\";\r\nimport '../../../_metronic/_assets/css/app2.css';\r\n\r\n\r\n\r\n\r\nexport default function ReferrerInvitationPage() {\r\n\r\n // change width of sidebar for screensize\r\n const isMobile = useMediaQuery('(max-width: 760px)');\r\n\r\n const dispatch = useDispatch()\r\n\r\n const referrerInvite = {\r\n firstname: '', \r\n surname: '',\r\n email: '', \r\n phone: '',\r\n organisation: ''\r\n }\r\n\r\n const [status, setStatus] = useState('Not Started');\r\n \r\n // when the invite is completed, show the confirmation message\r\n if (status === 'Submitted') \r\n {\r\n return <ReferrerConfirmation />\r\n }\r\n // otherwise, load the client registration form and all its hooplah...\r\n else \r\n {\r\n function uuidv4() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & (0x3 | 0x8));\r\n return v.toString(16);\r\n });\r\n }\r\n \r\n function submitForm(data){\r\n dispatch(Registration.actions.postReferrerInvite({ ...data, invitetoken: uuidv4() }))\r\n setStatus('Submitted')\r\n }\r\n\r\n const validationSchema = Yup.object().shape({\r\n firstname: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n .required(\"First Name is required\"),\r\n surname: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(255,\"Too Long\")\r\n .required(\"Surname is required\"),\r\n email: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(200,\"Too Long\")\r\n .email(\"Enter a valid email\")\r\n .required(\"Email is required\"),\r\n phone: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(12,\"Too Long\")\r\n .required(\"Phone Number is required\"),\r\n organisation: Yup.string()\r\n .min(2,\"Too Short\")\r\n .max(250,\"Too Long\")\r\n .required(\"Organisation is required\"),\r\n });\r\n\r\n return (\r\n <>\r\n <div className=\"kt-grid kt-grid--ver kt-grid--root\">\r\n <div\r\n id=\"kt_login\"\r\n className=\"kt-grid kt-grid--hor kt-grid--root kt-login kt-login--v1\">\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid kt-grid--desktop kt-grid--ver-desktop kt-grid--hor-tablet-and-mobile\">\r\n <div\r\n className=\"kt-grid__item kt-grid__item--order-tablet-and-mobile-2 kt-grid kt-grid--hor kt-login__aside\"\r\n style={{\r\n padding: 20,\r\n maxWidth: 320,\r\n backgroundImage: `url(${toAbsoluteUrl(\"/media/bg/rhc-farm.jpg\")})`\r\n }}\r\n >\r\n <div className=\"kt-grid__item\">\r\n <Link to=\"/auth/login\" className=\"kt-login__logo\">\r\n <img\r\n alt=\"Logo\"\r\n src={toAbsoluteUrl(\"/media/logos/logo-3.png\")}\r\n style={{ marginLeft: -10 }}\r\n />\r\n </Link>\r\n </div>\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid \">\r\n <div className=\"kt-grid__item kt-grid__item--middle\">\r\n <h3 className=\"kt-login__title\" style={{ marginTop: isMobile ? 0 : 80 }}>Rural Health Connect</h3>\r\n <h4 className=\"kt-login__subtitle\" style={{ marginTop: 20 }}>\r\n Welcome to the Referrer Registration page.\r\n </h4>\r\n </div>\r\n </div>\r\n <div className=\"kt-grid__item\">\r\n <div className=\"kt-login__info\">\r\n <div className=\"kt-login__copyright\">\r\n © 2025 Rural Health Connect\r\n </div>\r\n <div className=\"kt-login__menu\">\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid__item--order-tablet-and-mobile-1 kt-login__wrapper login-bg\">\r\n \r\n <Formik\r\n enableReinitialize={true}\r\n initialValues={referrerInvite}\r\n validationSchema = {validationSchema}\r\n onSubmit={(values, actions) => {\r\n submitForm(values);\r\n actions.setSubmitting(false);\r\n }}\r\n >\r\n {props => {\r\n const { values, errors, touched, handleChange, handleSubmit } = props;\r\n const change = (name,e) => { e.persist(); handleChange(e); };\r\n return (\r\n <form noValidate={true} autoComplete=\"off\" onSubmit={handleSubmit} >\r\n <Paper style={{ backgroundColor: \"rgb(245,245,245)\", padding: 20, maxWidth: 800 }}>\r\n {/* <Row>\r\n <Col md=\"12\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-end\">\r\n <Grid item md={9} xs={12}>\r\n <h2>Referrer Registration of Interest Form</h2>\r\n </Grid>\r\n <Grid item md={3} xs={12} style={{ fontStyle: \"italic\", fontWeight: 400, textAlign: \"right\", paddingBottom: 4, fontSize: 12 }}>\r\n * indicates required fields\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n <hr style={{ marginTop: 4 }}></hr> */}\r\n <Alert variant=\"light\" style={{ backgroundColor: \"#DAF3F4\", borderColor: \"#CEE6E7\", marginBottom: 15 }}>\r\n <p>Case managers/support workers/plan managers, or similar, we can create a login for you that will allow you to refer easily and securely through our system? \r\n You can also assist in selecting the psychologist and booking an appointment instantly. <br/><br/>\r\n If so please enter your details here and we will be in touch:</p>\r\n </Alert>\r\n <hr style={{ marginTop: 4 }}></hr>\r\n <Row>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>First Name *</Form.Label>\r\n <Form.Control type=\"text\" name=\"firstname\" value={values.firstname} onChange={change.bind(null, \"firstname\")} autoComplete='new-password' isInvalid={touched.firstname && !!errors.firstname} isValid={touched.firstname && !errors.firstname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.firstname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Surname *</Form.Label>\r\n <Form.Control type=\"text\" name=\"surname\" value={values.surname} onChange={change.bind(null, \"surname\")} autoComplete='new-password' isInvalid={touched.surname && !!errors.surname} isValid={touched.surname && !errors.surname}/>\r\n <Form.Control.Feedback type=\"invalid\">{errors.surname}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"8\">\r\n <Form.Group >\r\n <Form.Label>Email *</Form.Label>\r\n <Form.Control type=\"text\" name=\"email\" value={values.email} onChange={change.bind(null, \"email\")} isInvalid={touched.email && !!errors.email} isValid={touched.email && !errors.email} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.email}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"4\">\r\n <Form.Group >\r\n <Form.Label>Phone Number *</Form.Label>\r\n <Form.Control type=\"text\" name=\"phone\" value={values.phone} onChange={change.bind(null, \"phone\")} isInvalid={touched.phone && !!errors.phone} isValid={touched.phone && !errors.phone} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.phone}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col> \r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Form.Group>\r\n <Form.Label>Organisation</Form.Label>\r\n <Form.Control type=\"text\" name=\"organisation\" value={values.organisation} onChange={change.bind(null, \"phone\")} isInvalid={touched.organisation && !!errors.organisation} isValid={touched.organisation && !errors.organisation} autoComplete='new-password' />\r\n <Form.Control.Feedback type=\"invalid\">{errors.organisation}</Form.Control.Feedback>\r\n </Form.Group>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col md=\"12\">\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n <Grid item md={3} xs={6}> \r\n\r\n </Grid>\r\n <Grid item md={1} xs={6}>\r\n <Button variant=\"primary\" type=\"submit\" >\r\n Submit\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n </Row>\r\n </Paper>\r\n </form>\r\n )\r\n }}\r\n </Formik>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n }\r\n}\r\n\r\nfunction ReferrerConfirmation() {\r\n\r\n // change width of sidebar for screensize\r\n const isMobile = useMediaQuery('(max-width: 760px)');\r\n return (\r\n\r\n <>\r\n <div className=\"kt-grid kt-grid--ver kt-grid--root\">\r\n <div\r\n id=\"kt_login\"\r\n className=\"kt-grid kt-grid--hor kt-grid--root kt-login kt-login--v1\">\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid kt-grid--desktop kt-grid--ver-desktop kt-grid--hor-tablet-and-mobile\">\r\n <div\r\n className=\"kt-grid__item kt-grid__item--order-tablet-and-mobile-2 kt-grid kt-grid--hor kt-login__aside\"\r\n style={{\r\n backgroundImage: `url(${toAbsoluteUrl(\"/media/bg/rhc-farm.jpg\")})`\r\n }}\r\n >\r\n <div className=\"kt-grid__item\">\r\n <Link to=\"/\" className=\"kt-login__logo\">\r\n <img\r\n alt=\"Logo\"\r\n src={toAbsoluteUrl(\"/media/logos/logo-3.png\")}\r\n style={{ marginLeft: -10 }}\r\n />\r\n </Link>\r\n </div>\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid \">\r\n <div className=\"kt-grid__item kt-grid__item--middle\">\r\n <h3 className=\"kt-login__title\" style={{ marginTop: isMobile ? 0 : 80 }}>Rural Health Connect</h3>\r\n <h4 className=\"kt-login__subtitle\" style={{ marginTop: 20 }}>\r\n Welcome to the Referrer Registration page.\r\n </h4>\r\n </div>\r\n </div>\r\n <div className=\"kt-grid__item\">\r\n <div className=\"kt-login__info\">\r\n <div className=\"kt-login__copyright\">\r\n © 2025 Rural Health Connect\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"kt-grid__item kt-grid__item--fluid kt-grid__item--order-tablet-and-mobile-1 kt-login__wrapper login-bg\">\r\n \r\n <Paper style={{ backgroundColor: \"rgb(245,245,245)\", padding: 20 }} >\r\n <h3>\r\n Registration of Interest successful.\r\n </h3>\r\n <p style={{ marginTop: 30 }}>\r\n Thank you for submitting your information. We will be in touch with you soon regarding your registration.\r\n </p>\r\n </Paper>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n\r\n );\r\n}\r\n\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport * as Auth from \"../../store/ducks/auth.duck\";\r\nimport { login } from \"../../crud/auth.crud\"; \r\nimport * as builder from '../../../_metronic/ducks/builder';\r\nimport { useLocation } from \"react-router-dom\";\r\nimport { makeStyles, Grid } from '@material-ui/core';\r\nimport { Card, CardHeader, CardContent } from '@material-ui/core';\r\nimport clsx from \"clsx\";\r\nimport '../../../_metronic/_assets/css/app.css';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n width: 850,\r\n marginTop: 200,\r\n },\r\n cardHeader: {\r\n borderBottom: \"solid 1px silver\",\r\n backgroundColor: \"#daeaf5\",\r\n }\r\n}));\r\n\r\n// import '../../_metronic/_assets/css/app.css';\r\n\r\nexport default function SurveyAuth(props) {\r\n //\r\n\r\n const [loading, setLoading] = useState(false);\r\n const [runOnce, setRunOnce] = useState(false);\r\n const classes = useStyles();\r\n const ssoStatus = useSelector(state => state.auth.SSOStatus)\r\n\r\n const enableLoading = () => {\r\n setLoading(true);\r\n // setLoadingButtonStyle({ paddingRight: \"3.5rem\" });\r\n };\r\n\r\n const disableLoading = () => {\r\n setLoading(false);\r\n props.history.push('/home');\r\n // setLoadingButtonStyle({ paddingRight: \"2.5rem\" });\r\n };\r\n\r\n const searchParams = useLocation().search;\r\n const uid = new URLSearchParams(searchParams).get(\"uid\");\r\n const page = new URLSearchParams(searchParams).get(\"page\");\r\n \r\n console.log(uid)\r\n console.log(page)\r\n\r\n const username = 'device';\r\n const password = uid;\r\n\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n if (ssoStatus)\r\n {\r\n checkFormStatus(ssoStatus);\r\n }\r\n });\r\n\r\n function checkFormStatus(ssoStatus)\r\n {\r\n if (ssoStatus)\r\n {\r\n setLoading(false);\r\n // Reset SSO status \r\n dispatch(Auth.actions.ssoclear());\r\n dispatch(Auth.actions.ssoform(page))\r\n // Back to the main menu \r\n props.history.push('/dashboard');\r\n }\r\n }\r\n\r\n\r\n\r\n if (!loading && !runOnce)\r\n {\r\n // Prevent the login if not all parameters are present - there is a googlebot pinging this without a membership number\r\n if (uid && page)\r\n {\r\n setTimeout(() => {\r\n dispatch(Auth.actions.ssoclear());\r\n // dispatch(Auth.actions.logout());\r\n const browserTZ = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n setRunOnce(true);\r\n enableLoading();\r\n login(username, password, browserTZ)\r\n .then(({ data: { token, refreshToken, firstName, surname, preferredName, roleID, roleDesc, roleScope, userTZ, winbrowserTZ, totp, forcePasswordChange, providertype, recoveryStatus } }) => {\r\n dispatch(Auth.actions.login(token, refreshToken, firstName, surname, preferredName, roleID, roleDesc, roleScope, userTZ, winbrowserTZ, totp, forcePasswordChange, providertype, recoveryStatus));\r\n dispatch(builder.actions.setMenuConfig({roleDesc,roleScope}))\r\n })\r\n .catch(() => {\r\n // it hasn't worked out - need to handle this \r\n disableLoading();\r\n });\r\n }, 1000);\r\n } \r\n else\r\n {\r\n setRunOnce(true)\r\n // console.log('Variable problems')\r\n props.history.push('/home');\r\n }\r\n }\r\n\r\n \r\n return(\r\n <>\r\n {loading ? \r\n <Grid container justifyContent=\"center\">\r\n <Card className={classes.root}>\r\n <CardHeader\r\n title='Login In Progress'\r\n subheader=''\r\n className={classes.cardHeader}\r\n />\r\n <CardContent>\r\n <Grid container spacing={1}>\r\n Please wait while we log you in...\r\n <span\r\n className={`ml-3 ${clsx({\r\n spinner: loading\r\n })}`}\r\n />\r\n </Grid>\r\n </CardContent> \r\n </Card> \r\n </Grid>\r\n :\r\n null\r\n } \r\n </>\r\n\r\n\r\n )\r\n // \r\n //\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport * as Auth from \"../../store/ducks/auth.duck\";\r\nimport { login } from \"../../crud/auth.crud\"; \r\nimport * as builder from '../../../_metronic/ducks/builder';\r\nimport { useLocation } from \"react-router-dom\";\r\nimport { makeStyles, Grid } from '@material-ui/core';\r\nimport { Card, CardHeader, CardContent } from '@material-ui/core';\r\nimport clsx from \"clsx\";\r\nimport '../../../_metronic/_assets/css/app.css';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n width: 850,\r\n marginTop: 200,\r\n },\r\n cardHeader: {\r\n borderBottom: \"solid 1px silver\",\r\n backgroundColor: \"#daeaf5\",\r\n }\r\n}));\r\n\r\n// import '../../_metronic/_assets/css/app.css';\r\n\r\nexport default function EmailAuth(props) {\r\n //\r\n\r\n const [loading, setLoading] = useState(false);\r\n const [runOnce, setRunOnce] = useState(false);\r\n const classes = useStyles();\r\n const ssoStatus = useSelector(state => state.auth.SSOStatus)\r\n\r\n const enableLoading = () => {\r\n setLoading(true);\r\n // setLoadingButtonStyle({ paddingRight: \"3.5rem\" });\r\n };\r\n\r\n const disableLoading = () => {\r\n setLoading(false);\r\n props.history.push('/home');\r\n // setLoadingButtonStyle({ paddingRight: \"2.5rem\" });\r\n };\r\n\r\n const searchParams = useLocation().search;\r\n const uid = new URLSearchParams(searchParams).get(\"uid\");\r\n const page = new URLSearchParams(searchParams).get(\"page\");\r\n \r\n console.log(uid)\r\n console.log(page)\r\n\r\n const username = 'device';\r\n const password = uid;\r\n\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n if (ssoStatus)\r\n {\r\n checkFormStatus(ssoStatus);\r\n }\r\n });\r\n\r\n function checkFormStatus(ssoStatus)\r\n {\r\n if (ssoStatus)\r\n {\r\n setLoading(false);\r\n // Reset SSO status \r\n dispatch(Auth.actions.ssoclear());\r\n // dispatch(Auth.actions.ssoform(page))\r\n // Back to the main menu \r\n props.history.push('/dashboard');\r\n }\r\n }\r\n\r\n\r\n\r\n if (!loading && !runOnce)\r\n {\r\n // Prevent the login if not all parameters are present - there is a googlebot pinging this without a membership number\r\n if (uid)\r\n {\r\n setTimeout(() => {\r\n dispatch(Auth.actions.ssoclear());\r\n const browserTZ = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n setRunOnce(true);\r\n enableLoading();\r\n login(username, password, browserTZ)\r\n .then(({ data: { token, refreshToken, firstName, surname, preferredName, roleID, roleDesc, roleScope, userTZ, winbrowserTZ, totp, forcePasswordChange, providertype, recoveryStatus } }) => {\r\n dispatch(Auth.actions.login(token, refreshToken, firstName, surname, preferredName, roleID, roleDesc, roleScope, userTZ, winbrowserTZ, totp, forcePasswordChange, providertype, recoveryStatus));\r\n dispatch(builder.actions.setMenuConfig({roleDesc,roleScope}))\r\n })\r\n .catch(() => {\r\n // it hasn't worked out - need to handle this \r\n disableLoading();\r\n });\r\n }, 1000);\r\n } \r\n else\r\n {\r\n setRunOnce(true)\r\n // console.log('Variable problems')\r\n props.history.push('/home');\r\n }\r\n }\r\n\r\n \r\n return(\r\n <>\r\n {loading ? \r\n <Grid container justifyContent=\"center\">\r\n <Card className={classes.root}>\r\n <CardHeader\r\n title='Login In Progress'\r\n subheader=''\r\n className={classes.cardHeader}\r\n />\r\n <CardContent>\r\n <Grid container spacing={1}>\r\n Please wait while we log you in...\r\n <span\r\n className={`ml-3 ${clsx({\r\n spinner: loading\r\n })}`}\r\n />\r\n </Grid>\r\n </CardContent> \r\n </Card> \r\n </Grid>\r\n :\r\n null\r\n } \r\n </>\r\n\r\n\r\n )\r\n // \r\n //\r\n}","/**\r\n * High level router.\r\n *\r\n * Note: It's recommended to compose related routes in internal router\r\n * components (e.g: `src/pages/auth/AuthPage`, `src/pages/home/HomePage`).\r\n */\r\n\r\nimport React from \"react\";\r\nimport { Redirect, Route, Switch, withRouter, useLocation } from \"react-router-dom\";\r\nimport { shallowEqual, useSelector } from \"react-redux\";\r\nimport { useLastLocation } from \"react-router-last-location\";\r\nimport HomePageAdmin from \"../pages/home/HomePageAdmin\";\r\nimport HomePagePsychologist from \"../pages/home/HomePagePsychologist\";\r\nimport HomePageClient from \"../pages/home/HomePageClient\";\r\nimport HomePageReferrer from \"../pages/home/HomePageReferrer\";\r\nimport ErrorsPage from \"../pages/errors/ErrorsPage\";\r\nimport LogoutPage from \"../pages/auth/Logout\";\r\n// import PasswordUpdate from \"../pages/auth/PasswordUpdate\";\r\nimport { LayoutContextProvider } from \"../../_metronic\";\r\nimport Layout from \"../../_metronic/layout/Layout\";\r\nimport * as routerHelpers from \"../router/RouterHelpers\";\r\nimport AuthPage from \"../pages/auth/AuthPage\";\r\nimport ClientRegistrationPage from \"../pages/registration/ClientRegistrationPage\";\r\nimport { EAPRegistrationPage } from \"../pages/registration/ClientRegistrationPage\";\r\nimport { NDISRegistrationPage } from \"../pages/registration/ClientRegistrationPage\";\r\nimport PsychologistRegistrationPage from \"../pages/registration/PsychologistRegistrationPage\";\r\nimport PsychologistInvitationPage from \"../pages/registration/PsychologistInvitationPage\";\r\nimport ReferrerInvitationPage from \"../pages/registration/ReferrerInvitationPage\";\r\nimport SurveyAuthPage from \"../pages/auth/SurveyAuth\";\r\nimport EmailAuthPage from \"../pages/auth/EmailAuth\";\r\nimport { LicenseInfo } from '@mui/x-license-pro';\r\n\r\nLicenseInfo.setLicenseKey(\r\n '97cbd13c9ca1843df6f1a65216673c4bT1JERVI6NDM0MTAsRVhQSVJZPTE2ODM3ODI3NjYwMDAsS0VZVkVSU0lPTj0x',\r\n);\r\n\r\nexport const Routes = withRouter(({ history }) => {\r\n const lastLocation = useLastLocation();\r\n const pathname = useLocation().pathname;\t\t\t\t\t\t\t\t\t\t\t\t// RHC-DASH-STYLE: add 'useLocation'\r\n routerHelpers.saveLastLocation(lastLocation);\r\n const { isAuthorized, menuConfig, isTotp, isForcePasswordChange, roleDesc } = useSelector( \r\n ({ auth, urls, builder: { menuConfig } }) => ({\r\n menuConfig,\r\n isAuthorized: auth.authToken != null,\r\n isTotp: (auth.totp && auth.totp.length > 5 && auth.authToken === null) || false,\r\n isForcePasswordChange: (auth.forcePasswordChange && auth.forcePasswordChange === '1' && auth.authToken !== null) || false,\r\n roleDesc: auth.roleDesc === '' ? 'Basic' : auth.roleDesc,\r\n userLastLocation: routerHelpers.getLastLocation()\r\n }),\r\n shallowEqual\r\n );\r\n \r\n\r\n function roleCheckLayout() {\r\n // console.log('roleCheckLayout')\r\n // console.log(roleDesc)\r\n if (roleDesc === 'Admin') \r\n {\r\n return (\r\n <Layout>\r\n <HomePageAdmin userLastLocation=\"/dashboard\" />\r\n </Layout>\r\n )\r\n } \r\n else if (roleDesc === 'Psychologist') \r\n {\r\n const attr = {}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// RHC-DASH-STYLE: Only apply custom styles to psychologist dashboard specifically.\r\n if(pathname === '/dashboard'){\t\t\t\t\t\t\t\t\t// RHC-DASH-STYLE\r\n attr['customiserClass'] = 'custom-rhc'\t\t\t\t// RHC-DASH-STYLE: add custom-rhc selector\r\n }\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t // RHC-DASH-STYLE\r\n return (\r\n <Layout {...attr} > \t\t\t\t\t\t\t\t\t\t\t\t\t{/* RHC-DASH-STYLE: inject optinoal attributes */}\r\n <HomePagePsychologist userLastLocation=\"/dashboard\" />\r\n </Layout>\r\n )\r\n } \r\n else if (roleDesc === 'Referrer') \r\n {\r\n return (\r\n <Layout>\r\n <HomePageReferrer userLastLocation=\"/dashboard\" />\r\n </Layout>\r\n )\r\n } \r\n else \r\n {\r\n return (\r\n <Layout>\r\n <HomePageClient userLastLocation='/dashboard' />\r\n </Layout>\r\n )\r\n }\r\n }\r\n \r\n return (\r\n /* Create `LayoutContext` from current `history` and `menuConfig`. */\r\n <LayoutContextProvider history={history} menuConfig={menuConfig}>\r\n <Switch>\r\n \r\n {/* Anonymous pages */}\r\n <Route path=\"/clientregistration/ndis\" component={NDISRegistrationPage} />\r\n <Route path=\"/clientregistration/:invitetoken\" component={ClientRegistrationPage} />\r\n <Route path=\"/providerregistration/:invitetoken\" component={PsychologistRegistrationPage} />\r\n <Route path=\"/psychologistregistration/:invitetoken\" component={PsychologistRegistrationPage} />\r\n <Route path=\"/eap\" component={EAPRegistrationPage} />\r\n <Route path=\"/psychologistinvitation/:programid?\" component={PsychologistInvitationPage} />\r\n <Route path=\"/referrerinvitation\" component={ReferrerInvitationPage} />\r\n <Route path=\"/survey\" component={SurveyAuthPage} />\r\n <Route path=\"/emailauth\" component={EmailAuthPage} />\r\n\r\n\r\n {isTotp ? (\r\n <Redirect from='/auth/login' to='/auth/totp' />\r\n ) : (\r\n null\r\n )\r\n }\r\n\r\n {!isAuthorized ? (\r\n // Render auth page when user at `/auth` and not authorized.\r\n <Route path=\"/auth\" component={AuthPage} />\r\n ) : (\r\n <Redirect from=\"/auth\" to='/dashboard' />\r\n )\r\n }\r\n\r\n <Route path=\"/error\" component={ErrorsPage} />\r\n <Route path=\"/logout\" component={LogoutPage} />\r\n\r\n {!isAuthorized ? (\r\n /* Redirect to `/auth/login` when user is not authorized */\r\n <Redirect to=\"/auth/login\" />\r\n ) : (\r\n roleCheckLayout() \r\n )\r\n }\r\n </Switch>\r\n </LayoutContextProvider>\r\n );\r\n});\r\n","/**\r\n * Entry application component used to compose providers and render Routes.\r\n * */\r\n\r\nimport React from \"react\";\r\nimport { Provider } from \"react-redux\";\r\nimport { BrowserRouter } from \"react-router-dom\";\r\nimport { PersistGate } from \"redux-persist/integration/react\";\r\nimport { LastLocationProvider } from \"react-router-last-location\";\r\nimport { Routes } from \"./app/router/Routes\";\r\nimport { I18nProvider, LayoutSplashScreen, ThemeProvider } from \"./_metronic\";\r\n\r\nexport default function App({ store, persistor, basename }) {\r\n return (\r\n /* Provide Redux store */\r\n <Provider store={store}>\r\n {/* Asynchronously persist redux stores and show `SplashScreen` while it's loading. */}\r\n <PersistGate persistor={persistor} loading={<LayoutSplashScreen />}>\r\n {/* Add high level `Suspense` in case if was not handled inside the React tree. */}\r\n <React.Suspense fallback={<LayoutSplashScreen />}>\r\n {/* Override `basename` (e.g: `homepage` in `package.json`) */}\r\n <BrowserRouter basename={basename}>\r\n {/*This library only returns the location that has been active before the recent location change in the current window lifetime.*/}\r\n <LastLocationProvider>\r\n {/* Provide Metronic theme overrides. */}\r\n <ThemeProvider>\r\n {/* Provide `react-intl` context synchronized with Redux state. */}\r\n <I18nProvider>\r\n {/* Render routes with provided `Layout`. */}\r\n <Routes />\r\n </I18nProvider>\r\n </ThemeProvider>\r\n </LastLocationProvider>\r\n </BrowserRouter>\r\n </React.Suspense>\r\n </PersistGate>\r\n </Provider>\r\n );\r\n}\r\n","/**\r\n * Create React App entry point. This and `public/index.html` files can not be\r\n * changed or moved.\r\n */\r\nimport \"react-app-polyfill/ie11\";\r\nimport \"react-app-polyfill/stable\";\r\nimport React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport axios from \"axios\";\r\nimport { setupAxios } from \"./_metronic\";\r\nimport store, { persistor } from \"./app/store/store\";\r\nimport App from \"./App\";\r\nimport \"./index.scss\"; // Standard version\r\n// import \"./sass/style.react.rtl.css\"; // RTL version\r\nimport \"socicon/css/socicon.css\";\r\nimport \"@fortawesome/fontawesome-free/css/all.min.css\";\r\nimport \"./_metronic/_assets/plugins/line-awesome/css/line-awesome.css\";\r\nimport \"./_metronic/_assets/plugins/flaticon/flaticon.css\";\r\nimport \"./_metronic/_assets/plugins/flaticon2/flaticon.css\";\r\n/**\r\n * Base URL of the website.\r\n *\r\n * @see https://facebook.github.io/create-react-app/docs/using-the-public-folder\r\n */\r\nconst { PUBLIC_URL } = process.env;\r\n\r\n/**\r\n * Creates `axios-mock-adapter` instance for provided `axios` instance, add\r\n * basic Metronic mocks and returns it.\r\n *\r\n * @see https://github.com/ctimmerm/axios-mock-adapter\r\n */\r\n/* const mock = */ //mockAxios(axios);\r\n\r\n/**\r\n * Inject metronic interceptors for axios.\r\n *\r\n * @see https://github.com/axios/axios#interceptors\r\n */\r\nsetupAxios(axios, store);\r\n\r\n\r\nReactDOM.render(\r\n <App\r\n store={store}\r\n persistor={persistor}\r\n basename={PUBLIC_URL}\r\n />,\r\n document.getElementById(\"root\")\r\n);\r\n","import React, { useState, useEffect } from 'react'\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { DataGrid } from '@material-ui/data-grid'\r\nimport { Button, Modal, Form, Row, Col, InputGroup } from \"react-bootstrap\"\r\nimport SearchIcon from '@material-ui/icons/Search'\r\nimport * as Admin from \"../store/ducks/admin.duck\"\r\nimport Autocomplete from '@material-ui/lab/Autocomplete'\r\nimport { Grid, Paper, TextField, Typography, withStyles } from '@material-ui/core'\r\nimport { ToastContainer, Flip } from \"react-toastify\"\r\nimport \"react-toastify/dist/ReactToastify.css\"\r\nimport { hide } from '@popperjs/core'\r\n\r\n// In the world of confusion - please note the following invoicing process \r\n//\r\n// Today we are billing per booking using the Services Table to define the prices - each booking has a billable type that is set (or defaulted) when a booking is made\r\n//\r\n// Process \r\n// \r\n// GatherBillable.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to email providers a list of those to be billed at the end of the month if still eliglible. \r\n// - Can toogle bookings to cancelled/noshow as needed \r\n// Invoices.js - Lists providers (including client list) to be billed as at the end of the previous month (this may need to be configurable). \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Gives user option to create Invoices in Xero for these providers. \r\n// - This essentially a copy of GatherBillable though expect this will change at client acceptance occurs. \r\n// InvoiceLog.js - This is a searchable log of invoices/clients/providers \r\n// \r\n// PlatformPsychologist.js - Lists unbilled boookings \r\n// - Only list bookings that have a booking charged field of null and a booking of status Active\r\n// - Can toogle bookings to cancelled/noshow as needed //\r\n\r\n\r\nconst StyledDataGrid = withStyles({\r\n root: {\r\n \"& .MuiDataGrid-renderingZone\": {\r\n maxHeight: \"none !important\"\r\n },\r\n \"& .MuiDataGrid-cell\": {\r\n lineHeight: \"unset !important\",\r\n maxHeight: \"none !important\",\r\n whiteSpace: \"normal\"\r\n },\r\n \"& .MuiDataGrid-row\": {\r\n maxHeight: \"none !important\"\r\n }\r\n }\r\n})(DataGrid);\r\n\r\nexport default function GatherBillableDetail({billablestatus, clients, psychologistID, closeClients, providerFee, providerPayments, displayNote, providerType}) \r\n{\r\n // console.log(displayNote)\r\n const dispatch = useDispatch()\r\n const [showBooking, setShowBooking] = useState(false);\r\n const [clientName, setClientName] = useState();\r\n const [bookingID,setBookingID] = useState();\r\n const [status,setStatus] = useState();\r\n // const [contractid,setContractID] = useState();\r\n const [service,setService] = useState();\r\n const [subPaymentType,setSubPaymentType] = useState()\r\n const [approvalstatus,setApprovalStatus] = useState();\r\n const [rhcpaymentstatus,setRHCPaymentStatus] = useState();\r\n\r\n const initContract = () => {\r\n return { id:0, name: ''}\r\n }\r\n\r\n const [currentContract, setcurrentContract] = useState(initContract());\r\n\r\n const loadContract = (thisContract) => {\r\n setcurrentContract(thisContract ? thisContract : initContract())\r\n }\r\n\r\n const contracts = useSelector(state => state.admin.Contracts)\r\n useEffect( () => { dispatch(Admin.actions.fetchContracts()) }, [dispatch] )\r\n const [searchTerm, setSearchTerm] = useState('')\r\n\r\n\r\n const searchClients = (client) => {\r\n if ( true\r\n\r\n && (client => client.clientName.toLowerCase().search(searchTerm.toLowerCase()) > -1 || searchTerm.length === 0 )\r\n && (!billablestatus || billablestatus === 'All' || client.billingstatus === billablestatus)\r\n )\r\n {\r\n return client\r\n } \r\n }\r\n \r\n const filteredClients = clients.filter(client => searchClients(client))\r\n\r\n const loadBooking = (thisBooking) => {\r\n setClientName(thisBooking.clientName);\r\n setBookingID(thisBooking.bookingid);\r\n setStatus(thisBooking.status);\r\n setApprovalStatus(thisBooking.approvedstatus);\r\n setRHCPaymentStatus(thisBooking.rhcpaymentstatus); \r\n setSubPaymentType(thisBooking.subpaymenttype)\r\n setcurrentContract(contracts.find(contract => contract.id === thisBooking.contractid));\r\n setService(thisBooking.service);\r\n // console.log(thisBooking);\r\n // console.log(currentContract);\r\n setShowBooking(true);\r\n }\r\n\r\n\r\n function UpdateBooking() {\r\n // Create payload to send to API \r\n var payload = {\r\n id : bookingID,\r\n paymenttype: service,\r\n subpaymenttype: subPaymentType,\r\n contractid : currentContract && currentContract.id,\r\n status : status,\r\n approvalstatus : approvalstatus,\r\n rhcpaymentstatus : rhcpaymentstatus \r\n }\r\n //\r\n process.env.REACT_APP_DEBUG && console.log(payload);\r\n process.env.REACT_APP_DEBUG && console.log ('Saving data');\r\n // Save update \r\n dispatch(Admin.actions.updateBookingBilling(payload));\r\n setShowBooking(false);\r\n closeClients(false);\r\n }\r\n\r\n const columns = [\r\n { field: 'id', headerName: 'BookingID', width: 100, hide: true },\r\n { field: 'contractid', headerName: 'ContractID', width: 100, hide: true },\r\n { field: 'clientName', headerName: 'Name', width: providerFee ? 200 : 200, \r\n renderCell: (params) => (\r\n <>\r\n {!providerPayments ?\r\n <strong>\r\n <div onClick={() => loadBooking(clients.find(client => client.id === params.row.id))} className=\"cell-Link\" >\r\n {params.value}\r\n </div>\r\n </strong>\r\n :\r\n <div >\r\n {params.value}\r\n </div>\r\n }\r\n </>\r\n ), \r\n }, \r\n { field: 'bookingDate', headerName: 'Booking Date', width: 160 },\r\n { field: 'cost', headerName: 'Session Fee', width: 150 },\r\n { field: 'providerfee', headerName: 'Fee to Provider', width: 170, hide: providerFee ? false : true}, \r\n { field: 'service', headerName: 'Payment Type', hide: providerPayments ? true : false, width: service === 'Contract' ? 330 : 180,\r\n renderCell: (params) => (\r\n <div>\r\n {params.value === 'Contract' ?\r\n <>\r\n {params.value}\r\n -\r\n {contracts && contracts.length > 1 && contracts.find(contract => contract.id === params.row.contractid).displayname}\r\n </>\r\n :\r\n <>\r\n {params.value}\r\n </>\r\n }\r\n </div>\r\n ),\r\n },\r\n { field: 'subpaymenttype', headerName: 'Sub', width: 100 },\r\n { field: 'status', headerName: 'Status', width: 110 },\r\n { field: 'billingstatus', headerName: 'Billing', width: 120 },\r\n { field: 'approvedstatus', headerName: 'Approved', width: 130 },\r\n { field: 'rhcpaymentstatus', headerName: 'Paid(RHC)', width: 130,\r\n renderCell: (params) => {\r\n return(\r\n <>\r\n { params.value === 'Paid' ? \r\n <span style={{ color: 'green' }}>{params.value}</span>\r\n :\r\n <span style={{ color: 'red' }}>{params.value}</span>\r\n }\r\n </>\r\n )\r\n }\r\n },\r\n { field: 'note', headerName: 'Provider Note', hide: displayNote ? false : true, width: 220,\r\n renderCell: (params) => (\r\n <div>\r\n <Typography>{params.value}</Typography>\r\n </div>\r\n )\r\n }\r\n \r\n ];\r\n\r\n\r\n const getContractOption = (option, value) => {\r\n // console.log(option);\r\n // console.log(value);\r\n if (option.id === value.id) {\r\n return option\r\n } else {\r\n return initContract();\r\n }\r\n }\r\n\r\n\r\n function handleBookingClose() {\r\n setShowBooking(false);\r\n } \r\n\r\n const handleSearch = (event) => {\r\n const searchTerm = event.target.value \r\n setSearchTerm(searchTerm)\r\n }\r\n\r\n\r\n return (\r\n <>\r\n <Paper> \r\n <Grid container justifyContent=\"space-between\" style={{ padding: 10 }}>\r\n <Grid item style={{ marginTop: 2, marginLeft: 10 }}>\r\n <InputGroup size=\"sm\" >\r\n <InputGroup.Prepend>\r\n <InputGroup.Text>\r\n <SearchIcon fontSize=\"small\" style={{ marginLeft: -4 }} />\r\n </InputGroup.Text>\r\n </InputGroup.Prepend>\r\n <Form.Control \r\n type=\"text\"\r\n value={searchTerm}\r\n onChange={(event) => handleSearch(event)}\r\n autoComplete='OFF'\r\n />\r\n </InputGroup>\r\n </Grid>\r\n </Grid>\r\n </Paper>\r\n { clients ? \r\n <Paper style={{ height: 700 }}>\r\n <DataGrid rows={filteredClients} columns={columns} pageSize={10} checkboxSelection={false} rowHeight={40} sortModel={[{ field: 'bookingDate', sort: 'asc' }]} />\r\n </Paper>\r\n : ('None')\r\n }\r\n\r\n <Modal show={showBooking} onHide={handleBookingClose} dialogClassName=\"editprofile-modal\">\r\n <Modal.Header closeButton className=\"editprofile-modal\">\r\n <Modal.Title>Update Booking Status and Funding - {clientName}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"editprofile-modal\">\r\n <Row>\r\n <Col md=\"2\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label style={{ color: 'green', fontWeight: 500 }}>Booking Status</Form.Label> \r\n <Form.Control as=\"select\" defaultValue={status} onChange={(event) => setStatus(event.target.value)}>\r\n <option value=\"Active\">Billable</option>\r\n <option value=\"Cancelled\">Cancelled</option>\r\n <option value=\"NoShow\">No Show</option>\r\n <option value=\"Deleted\" disabled>Deleted</option> \r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label style={{ color: 'green', fontWeight: 500 }}>Funding Type</Form.Label> \r\n <Form.Control as=\"select\" defaultValue={service} onChange={(event) => setService(event.target.value)}>\r\n <option value=\"Bulk Billed\">Bulk Billed</option>\r\n <option value=\"Reduced Gap\">Reduced Gap (+$20)</option>\r\n <option value=\"Full Fee\">Full Fee</option>\r\n <option value=\"NDIS\">NDIS</option>\r\n <option value=\"Contract\">Contract</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n {service === 'Reduced Gap' || service === 'Full Fee' ?\r\n <>\r\n <Col md=\"3\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label style={{ color: 'green', fontWeight: 500 }}>Sub Payment Type</Form.Label>\r\n <Form.Control as=\"select\" defaultValue={subPaymentType} onChange={(event) => setSubPaymentType(event.target.value)}>\r\n <option value=\"\">N/A</option>\r\n {providerType === 'Clinical' ? \r\n <>\r\n {service === 'Reduced Gap' ?\r\n <>\r\n <option value=\"Over30C\">Gap Over $30</option>\r\n <option value=\"Under50C\">Gap Under $50</option>\r\n </>\r\n :\r\n null\r\n } \r\n <option value=\"Over50C\">Gap Over $50</option>\r\n </>\r\n :\r\n <>\r\n {service === 'Reduced Gap' ?\r\n <>\r\n <option value=\"Over30\">Gap Over $30</option>\r\n <option value=\"Under50\">Gap Under $50</option>\r\n </>\r\n :\r\n null\r\n } \r\n <option value=\"Over50\">Gap Over $50</option>\r\n </>\r\n }\r\n </Form.Control>\r\n </Form.Group> \r\n </Col>\r\n </>\r\n : \r\n null\r\n } \r\n {service === 'Contract' ? \r\n <>\r\n <Col md=\"4\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label style={{ color: 'green', fontWeight: 500 }}>Contract</Form.Label> \r\n <Autocomplete\r\n id=\"contractID\"\r\n variant=\"outlined\"\r\n options={contracts}\r\n getOptionLabel={(option) => option.name}\r\n getOptionSelected={(option, value) => getContractOption(option, value)}\r\n value= {currentContract}\r\n onChange={(event, newValue) => loadContract(newValue)}\r\n style={{ minWidth: 200, fullWidth: true, display: 'flex', wrap: 'nowrap', }}\r\n renderInput={(params) => \r\n <TextField \r\n {...params} \r\n type=\"text\"\r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n name=\"currentContactID\"\r\n style={{ backgroundColor: \"white\", margin: 0, padding: 0, maxWidth: 400 }}\r\n inputProps={{\r\n ...params.inputProps,\r\n autoComplete: 'new-password'}}\r\n />}\r\n />\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label style={{ color: 'green', fontWeight: 500 }}>Approval Status</Form.Label> \r\n <Form.Control as=\"select\" defaultValue={approvalstatus} onChange={(event) => setApprovalStatus(event.target.value)}>\r\n <option value=\"Approved\">Approved</option>\r\n <option value=\"Unapproved\">Unapproved</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n <Col md=\"3\">\r\n <Form.Group style={{width: \"100%\"}}>\r\n <Form.Label style={{ color: 'green', fontWeight: 500 }}>RHC Payment Status</Form.Label> \r\n <Form.Control as=\"select\" defaultValue={rhcpaymentstatus} onChange={(event) => setRHCPaymentStatus(event.target.value)}>\r\n <option value=\"UnPaid\">UnPaid</option>\r\n <option value=\"Paid\">Paid</option>\r\n </Form.Control>\r\n </Form.Group>\r\n </Col>\r\n </>\r\n :\r\n null\r\n }\r\n </Row>\r\n </Modal.Body>\r\n <Modal.Footer className=\"editprofile-modal\">\r\n <Button variant=\"secondary\" onClick={handleBookingClose}>\r\n Cancel\r\n </Button>\r\n <Button variant=\"primary\" onClick={UpdateBooking}>\r\n Save\r\n </Button>\r\n </Modal.Footer>\r\n\r\n </Modal>\r\n\r\n\r\n <ToastContainer\r\n position=\"bottom-right\"\r\n transition={Flip}\r\n autoClose={5000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n /> \r\n </>\r\n )\r\n}\r\n","\r\nimport React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport * as Forms from \"../../../store/ducks/forms.duck\";\r\nimport * as Admin from \"../../../store/ducks/admin.duck\";\r\nimport { Grid, makeStyles, MenuItem, Select, RadioGroup, FormControl, FormGroup, FormHelperText, FormControlLabel, Radio, Checkbox, Typography } from '@material-ui/core';\r\nimport { MuiPickersUtilsProvider, KeyboardDatePicker } from '@material-ui/pickers';\r\nimport { Button, Form, Modal } from \"react-bootstrap\";\r\nimport { Document, Page, pdfjs } from 'react-pdf/dist/esm/entry.webpack';\r\nimport 'react-pdf/dist/esm/Page/AnnotationLayer.css';\r\n// import 'react-pdf/dist/esm/Page/TextLayer.css';\r\nimport pdfjsWorker from \"pdfjs-dist/build/pdf.worker.entry\";\r\nimport { Formik } from 'formik';\r\nimport DateFnsUtils from '@date-io/date-fns';\r\nimport { DropzoneArea } from 'material-ui-dropzone';\r\nimport Interweave from 'interweave';\r\nimport SignaturePad from 'react-signature-canvas';\r\nimport { format } from \"date-fns\";\r\nimport * as Yup from \"yup\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport '../../../../_metronic/_assets/css/app2.css';\r\nimport '../../../../_metronic/_assets/css/app.css';\r\n\r\n// load worker thread for pdf operations\r\npdfjs.GlobalWorkerOptions.workerSrc = pdfjsWorker;\r\n\r\n\r\nexport default function FormDataEntry({ formID, formDataID, setShowFormData, contextName, contextID, pdfFlag, pdfGen, gpFax, preview }) {\r\n\r\n const classes = useStyles();\r\n const form = useSelector(state => state.forms.Form);\r\n const formData = useSelector(state => state.forms.FormData);\r\n const dispatch = useDispatch();\r\n const [currentLoadingPreview, setcurrentLoadingPreview] = useState();\r\n const previewPDF = useSelector(state => state.forms.PreviewPDF)\r\n \r\n useEffect( () => { dispatch(Forms.actions.fetchForm(formID)) }, [dispatch, formID] )\r\n useEffect( () => { dispatch(Forms.actions.fetchFormData({ formDataID : formDataID, formID : formID, contextName : contextName, contextID : contextID})) }, [dispatch, formDataID, formID, contextName, contextID] )\r\n\r\n \r\n useEffect( () => { \r\n if (previewPDF && previewPDF.length > 0 && currentLoadingPreview)\r\n {\r\n // var byteCharacters = previewPDF\r\n // var byteNumbers = new Array(byteCharacters.length);\r\n // for (var i = 0; i < byteCharacters.length; i++) {\r\n // byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n // }\r\n // var byteArray = new Uint8Array(byteNumbers);\r\n // var file = new Blob([byteArray], { type: 'application/pdf;base64' });\r\n // var fileURL = URL.createObjectURL(file);\r\n let pdfWindow = window.open('',\"Preview PDF\")\r\n pdfWindow.document.write(\"<html<head><title>PDF Preview</title><style>body{margin: 0px;}iframe{border-width: 0px;}</style></head>\");\r\n pdfWindow.document.write(\"<body><embed width='100%' height='100%' src='data:application/pdf;base64, \" + encodeURI(previewPDF)+\"#toolbar=0&navpanes=0&scrollbar=0'></embed></body></html>\");\r\n setTimeout(function(){ pdfWindow.stop() }, 1000);\r\n setcurrentLoadingPreview(false)\r\n dispatch(Forms.actions.clearPreviewPDF())\r\n }\r\n }, [previewPDF, currentLoadingPreview, dispatch] )\r\n\r\n\r\n const readonly = (formData.formDataStatus === 'Complete');\r\n \r\n let fileUpload = '';\r\n let nfileUpload = '';\r\n let fileHandler = [];\r\n\r\n // Sets size of fax pdf to pass to viewer\r\n // const [numPages, setNumPages] = useState(null); \r\n // function onDocumentLoadSuccess({ numPages }) {\r\n // setNumPages(numPages);\r\n // }\r\n\r\n // For a language that is designed to work with API it is primitive that I need to set a flag to stop the React_PDF from erroring when a PDF is not loaded \r\n if (!currentLoadingPreview && previewPDF && previewPDF.length > 5)\r\n {\r\n setcurrentLoadingPreview(true);\r\n }\r\n\r\n function showPDF(data)\r\n {\r\n setcurrentLoadingPreview(false)\r\n dispatch(Forms.actions.clearPreviewPDF())\r\n var result = Object.keys(data).map((key) => { return { questionID: parseInt(key.substring(1)), dataValue: data[key] } } );\r\n // Filter out empty elements with no questionID, then add in the question type for simpler processing\r\n result = result.filter(q => !isNaN(q.questionID))\r\n .map(row => {\r\n var type = row.questionID && form.formQuestions.find(q => { return q.questionID === row.questionID } ).type;\r\n return { ...row, type: type }\r\n });\r\n dispatch(Forms.actions.fetchPreviewPDF({answers : result, formID : formID}))\r\n }\r\n\r\n function generateFileHandle() \r\n { \r\n var d = new Date().getTime();//Timestamp\r\n var d2 = (performance && performance.now && (performance.now()*1000)) || 0;//Time in microseconds since page-load or 0 if unsupported\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n var r = Math.random() * 16;//random number between 0 and 16\r\n if(d > 0){//Use timestamp until depleted\r\n r = (d + r)%16 | 0;\r\n d = Math.floor(d/16);\r\n } else {//Use microseconds since page-load if supported\r\n r = (d2 + r)%16 | 0;\r\n d2 = Math.floor(d2/16);\r\n }\r\n return (c === 'x' ? r : ((r & 0x3) | 0x8)).toString(16);\r\n });\r\n }\r\n \r\n\r\n\r\n function FormInput({ question, handleChange, setFieldValue, values, errors }) {\r\n switch(question.type) {\r\n case 'VARCHAR':\r\n return <FormVarchar question={question} handleChange={handleChange} values={values} errors={errors} />\r\n case 'TEXT':\r\n return <FormText question={question} handleChange={handleChange} values={values} errors={errors} />\r\n case 'STATEMENT':\r\n return <FormStatement question={question} />\r\n case 'STATEMENTPDF':\r\n return <FormStatementPDF question={question} />\r\n case 'OPTION':\r\n if(question.typeInput === 'radio')\r\n {\r\n return <FormOptionRadio question={question} handleChange={handleChange} values={values} errors={errors}/>\r\n }\r\n else // question.typeInput === 'radio'\r\n {\r\n return <FormOptionSelect question={question} handleChange={handleChange} values={values} errors={errors}/>\r\n }\r\n case 'MULTIOPTION':\r\n return <FormOptionCheckbox question={question} setFieldValue={setFieldValue} values={values} />\r\n case 'DATE':\r\n return <FormDate question={question} handleChange={handleChange} values={values} />\r\n case 'FILE':\r\n return <FormFile question={question} handleChange={handleChange} values={values} setFieldValue={setFieldValue} />\r\n case 'SIGNATURE':\r\n return <FormSignature question={question} handleChange={handleChange} values={values} setFieldValue={setFieldValue} />\r\n default :\r\n return null\r\n }\r\n }\r\n function FormVarchar({question, handleChange, values, errors}) {\r\n // Add q to name - having issues with variables as numbers (it is a primtive language)\r\n const qname = 'Q' + question.questionID;\r\n if(readonly)\r\n { \r\n return <div className=\"form-textinput-readonly\">{values[qname] || ''}</div>\r\n }\r\n else\r\n {\r\n return (\r\n <>\r\n <Form.Control type=\"text\" id={qname} name={qname} value={values[qname] || ''} onChange={handleChange(qname)} autoComplete='new-password' placeholder={question.questionPlaceHolderText} />\r\n <span className=\"field-error\">{errors[qname] ? errors[qname] : ''}</span>\r\n </>\r\n )\r\n } \r\n }\r\n\r\n function FormText({question, handleChange, values, errors}) {\r\n // Add q to name - having issues with variables as numbers (it is a primtive language)\r\n const qname = 'Q' + question.questionID; \r\n if(readonly)\r\n { \r\n return <div className=\"form-textinput-readonly\">{values[qname] || ''}</div>\r\n }\r\n else\r\n {\r\n return (\r\n <>\r\n <Form.Control as=\"textarea\" rows={4} type=\"text\" id={qname} name={qname} value={values[qname] || ''} onChange={handleChange(qname)} autoComplete='new-password' placeholder={question.questionPlaceHolderText} /> \r\n <span className=\"field-error\">{errors[qname] ? errors[qname] : ''}</span>\r\n </>\r\n )\r\n } \r\n }\r\n\r\n function FormStatement({question}) {\r\n return <Interweave content={question.questionStatement} />\r\n }\r\n\r\n function FormStatementPDF({question}) {\r\n const [questionPDF, showQuestionPDF] = useState(false);\r\n const [numPages, setNumPages] = useState(null); \r\n function onDocumentLoadSuccess({ numPages }) {\r\n setNumPages(numPages);\r\n }\r\n return (\r\n <>\r\n <Button onClick={()=>showQuestionPDF(true)}>{question.questionStatementPDFFileName}</Button>\r\n \r\n <Modal show={questionPDF} onHide={()=>showQuestionPDF(false)} dialogClassName=\"viewQuestionPDF-dialog-modal\">\r\n <Modal.Header closeButton className=\"viewQuestionPDF-modal\" style={{ padding: 10 }}>\r\n <Modal.Title style={{ marginTop: 6, width: \"75%\", }}>\r\n {question.questionStatementPDFFileName} - {numPages} pages\r\n </Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body className=\"viewQuestionPDF-modal\" style={{ height: 700 }}>\r\n <Grid container spacing={2}>\r\n <Grid item md={12} style={{ height: 680, overflowY: \"scroll\", backgroundColor: \"white\" }}>\r\n {question.questionStatementPDF.length > 5 ? \r\n <Document\r\n file={'data:application/pdf;base64,'+ question.questionStatementPDF}\r\n onLoadSuccess={onDocumentLoadSuccess}\r\n >\r\n {Array.from(\r\n new Array(numPages),\r\n (el, index) => (\r\n <Page\r\n key={`page_${index + 1}`}\r\n pageNumber={index + 1}\r\n scale={1.5}\r\n />\r\n ),\r\n )}\r\n </Document> : <div style={{ marginLeft: 15, marginTop: 15 }}>No PDF Attached.</div>}\r\n </Grid>\r\n </Grid>\r\n </Modal.Body>\r\n </Modal>\r\n </>\r\n )\r\n }\r\n\r\n function FormOptionSelect({question, handleChange, values, errors}) {\r\n // Add q to name - having issues with variables as numbers (it is a primtive language)\r\n const qname = 'Q' + question.questionID;\r\n return ( \r\n <>\r\n <Select \r\n variant=\"outlined\"\r\n margin=\"dense\"\r\n id={qname}\r\n aria-label='Type'\r\n name={qname}\r\n disabled={readonly}\r\n value=''\r\n style={{ backgroundColor: \"#ffffff\" }} >\r\n <MenuItem value=''> </MenuItem>\r\n {question.formOptions ? question.formOptions.map(options => {\r\n return (\r\n <MenuItem \r\n key={options.optionID}\r\n value={options.optionID}\r\n //className={readonly && values[qname] === options.optionID ? 'form-radio-label-readonly' : 'form-radio-label'}\r\n >\r\n {options.optionLabel}\r\n </MenuItem>\r\n )\r\n })\r\n : null}\r\n </Select>\r\n <span className=\"field-error\">{errors[qname] ? errors[qname] : ''}</span>\r\n </> \r\n )\r\n }\r\n\r\n function FormOptionRadio({question, handleChange, values, errors}) {\r\n // Add q to name - having issues with variables as numbers (it is a primtive language)\r\n const qname = 'Q' + question.questionID;\r\n //<Form.Control type=\"text\" id={qname} name={qname} autoComplete='new-password' placeholder={question.questionPlaceHolderText}/> \r\n return (\r\n <Grid item xs={12} md={12}>\r\n <RadioGroup \r\n aria-label={question.questionText} \r\n style={{ paddingLeft: 8 }}\r\n name={qname} \r\n value={values[qname] || ''} \r\n row={question.answerLayout === 'row' ? true : false}\r\n >\r\n {question.formOptions ? \r\n question.formOptions.map(options => {\r\n return (\r\n <FormControlLabel\r\n key={options.optionID}\r\n value={options.optionID}\r\n control={\r\n readonly \r\n ? <Radio className=\"form-radio-input-readonly\" value={options.optionID} />\r\n : <Radio className=\"form-radio-input\" value={options.optionID} onChange={handleChange(qname)} />\r\n }\r\n label={<Typography className={readonly && values[qname] === options.optionID ? 'form-radio-label-readonly' : 'form-radio-label'}>{options.optionLabel}</Typography>}\r\n style={{ marginBottom: 0, cursor: readonly ? 'default' : 'pointer' }}\r\n />\r\n )\r\n })\r\n : ('None')\r\n }\r\n </RadioGroup>\r\n <span className=\"field-error\">{errors[qname] ? errors[qname] : ''}</span>\r\n </Grid>\r\n ) \r\n }\r\n\r\n function FormOptionCheckbox({question, setFieldValue, values}) {\r\n // Add q to name - having issues with variables as numbers (it is a primtive language)\r\n const qname = 'Q' + question.questionID;\r\n const myValues = values[qname] || [];\r\n\r\n const handleMyChange = event => {\r\n if(event.target.checked)\r\n {\r\n myValues.push(event.target.value)\r\n }\r\n else\r\n {\r\n var i = myValues.indexOf(event.target.value);\r\n myValues.splice(i, 1)\r\n }\r\n setFieldValue(qname, myValues);\r\n };\r\n\r\n return (\r\n <FormControl component=\"fieldset\" className={classes.formControl}>\r\n <FormGroup row={question.answerLayout === 'row' ? true : false}>\r\n {question.formOptions ? \r\n question.formOptions.map(options => {\r\n return (\r\n <FormControlLabel\r\n key={options.optionID}\r\n control={\r\n readonly \r\n ? <Checkbox name={qname} value={options.optionID} checked={myValues.some(v => v === options.optionID)} className=\"form-radio-input-readonly\" />\r\n : <Checkbox name={qname} value={options.optionID} checked={myValues.some(v => v === options.optionID)} onChange={handleMyChange} className=\"form-radio-input\" />\r\n }\r\n label={<Typography className={readonly && myValues.some(v => v === options.optionID) ? 'form-radio-label-readonly' : 'form-radio-label'} >{options.optionLabel}</Typography>}\r\n style={{ marginBottom: 0, cursor: readonly ? 'default' : 'pointer' }}\r\n // disabled={readonly}\r\n />\r\n )\r\n })\r\n : ('None')\r\n }\r\n </FormGroup>\r\n {/* <FormHelperText>{question.questionHelpText}</FormHelperText> */}\r\n </FormControl>\r\n ) \r\n }\r\n\r\n function FormDate({question, handleChange, values}) {\r\n // Add q to name - having issues with variables as numbers (it is a primtive language)\r\n const qname = 'Q' + question.questionID;\r\n return ( \r\n <MuiPickersUtilsProvider utils={DateFnsUtils}>\r\n <KeyboardDatePicker\r\n name={qname}\r\n inputVariant=\"outlined\"\r\n format=\"dd/MM/yyyy\"\r\n margin=\"dense\"\r\n id={qname}\r\n autoOk={true}\r\n size=\"small\"\r\n onChange={() => null}\r\n disabled={readonly}\r\n className=\"formquestion-datepicker summary-date\"\r\n />\r\n </MuiPickersUtilsProvider>\r\n ) \r\n }\r\n\r\n function FormFile({question, handleChange, values}) {\r\n // Add q to name - having issues with variables as numbers (it is a primtive language)\r\n // const qname = 'Q' + question.questionID;\r\n return (\r\n <Grid item xs={12} md={12} style={{ marginTop: 12 }}> \r\n <DropzoneArea\r\n acceptedFiles={['image/*,.pdf']}\r\n showPreviews={true}\r\n maxFileSize={4000000}\r\n showPreviewsInDropzone={false}\r\n dropzoneText={\"Drag and drop files here, or use your phone camera.\"}\r\n dropzoneClass=\"drop-zone-area\"\r\n onChange={() => null}\r\n />\r\n </Grid> \r\n ) \r\n }\r\n\r\n function FormSignature({ question, handleChange, setFieldValue, values }) {\r\n // Add q to name - having issues with variables as numbers (it is a primtive language)\r\n const qname = 'Q' + question.questionID;\r\n // const [sigData, setSigData] = useState({}); \r\n var sigPad = {}\r\n var trim = () => {\r\n // setSigData({trimmedDataURL: sigPad.getTrimmedCanvas().toDataURL('image/png')});\r\n // setFieldValue(qname, {trimmedDataURL: sigPad.getTrimmedCanvas().toDataURL('image/png')});\r\n setFieldValue(qname, sigPad.getTrimmedCanvas().toDataURL('image/png'));\r\n }\r\n var clear = () => {\r\n sigPad.clear();\r\n trim();\r\n }\r\n return (\r\n <>\r\n {readonly ?\r\n <div className=\"formSignature-readonly\">\r\n <img src={values[qname]} alt=\"Signature\" />\r\n </div>\r\n :\r\n <div className=\"sigOuterContainer\" style={{marginTop: 10}}>\r\n <div className=\"sigContainer\" onMouseLeave={trim} onTouchEnd={trim}>\r\n <SignaturePad canvasProps={{ className: \"sigPad\" }}\r\n ref={(ref) => { sigPad = ref }} /> \r\n </div>\r\n <Grid container justifyContent=\"space-between\" spacing={3} style={{ textAlign: 'right' }}>\r\n <Grid item>\r\n </Grid>\r\n <Grid item style={{ paddingRight: 60 }}>\r\n <span onClick={clear} style={{ cursor: 'pointer', textDecoration: 'underline' }}>\r\n Start Again\r\n </span>\r\n </Grid>\r\n </Grid>\r\n </div>\r\n }\r\n {/* {sigData.trimmedDataURL\r\n ? <img src={sigData.trimmedDataURL} />\r\n : null} */}\r\n </>\r\n ) \r\n }\r\n\r\n const [showConfirmation, setShowConfirmation] = useState(false);\r\n\r\n function Savesubmit(data) \r\n {\r\n // **********************************************************************************************************\r\n // Note this doesn't currently support file uploads - coming soon with the secureform module\r\n //\r\n // **********************************************************************************************************\r\n // Check for file upload question \r\n if (fileUpload.length > 0 && data[fileUpload].length)\r\n {\r\n // Ok there is a file upload question (will need to revisit this for forms with multiple file upload questions)\r\n // Create structure to load file \r\n const formData = new FormData();\r\n // Lets loop through \r\n let arrayPointer = 0;\r\n for (const fileUploadItem of data[fileUpload])\r\n {\r\n // Generate unique-ish file handle to be used to connect the file and request \r\n const fileHandle = generateFileHandle();\r\n // Now add answer of file upload question - which is the file - to formData \r\n // Note the name files - must match the API otherwise nothing is received \r\n formData.append('files',fileUploadItem);\r\n // Now that file is loaded into formData, set fileupload question answer to the handle so the API can connect the file with the request \r\n data[fileUpload] = \"\";\r\n nfileUpload = fileUpload + '-' + arrayPointer.toString(); \r\n data[nfileUpload] = \"\";\r\n // Set question answer to GUID i.e. Q147-0 = GUID\r\n data[nfileUpload] = fileHandle;\r\n // Store GUID as it will be needed to reassociate files with questions at the Valhalla end \r\n fileHandler[arrayPointer] = fileHandle;\r\n arrayPointer = arrayPointer + 1;\r\n }\r\n // Some debugging\r\n if (process.env.REACT_APP_DEBUG) {\r\n console.log('Form here:');\r\n console.log(data);\r\n }\r\n // Save request/form \r\n dispatch(Forms.actions.putFormData({data, formData, fileHandler}));\r\n // Save file \r\n }\r\n else\r\n {\r\n //\r\n // All traffic is coming this way \r\n //\r\n // Save request/form\r\n data[fileUpload] = \"\";\r\n // data = {...data, [fileUpload]: \"\"}\r\n // convert Formik values collection to an array for the API, and remove the 'Q' from the QuestionID\r\n var result = Object.keys(data).map((key) => { return { questionID: parseInt(key.substring(1)), dataValue: data[key] } } );\r\n // Filter out empty elements with no questionID, then add in the question type for simpler processing\r\n result = result.filter(q => !isNaN(q.questionID))\r\n .map(row => {\r\n var type = row.questionID && form.formQuestions.find(q => { return q.questionID === row.questionID } ).type;\r\n return { ...row, type: type }\r\n });\r\n process.env.REACT_APP_DEBUG && console.log(result);\r\n // Handle form in files tab\r\n if (pdfFlag)\r\n {\r\n setShowFormData(false);\r\n }\r\n else\r\n {\r\n setShowConfirmation(true)\r\n }\r\n dispatch(Forms.actions.putFormData( { formID: formID, formDataID: formDataID, contextID : contextID, contextName : contextName, data: result }));\r\n // Check if a fax status needs to be updated \r\n if (gpFax)\r\n {\r\n dispatch(Admin.actions.putFaxStatus( { faxID: gpFax, status: 'GP Faxed' }));\r\n setShowFormData(false)\r\n }\r\n\r\n }\r\n }\r\n\r\n var tempSchema = { }\r\n \r\n form && form.formQuestions && form.formQuestions.map(question => tempSchema = {\r\n ...tempSchema, \r\n [`Q${question.questionID}`]: question.mandatory ? \r\n (question.type === 'VARCHAR' || question.type === 'TEXT') ?\r\n Yup.string().required(\"Answer is required\")\r\n : \r\n question.type === 'MULTIOPTION' ? \r\n Yup.string().required(`Answer is required to ${question.reference}`) \r\n : \r\n question.type === 'OPTION' ?\r\n Yup.string().required(\"Answer is required for this question\")\r\n :\r\n null\r\n : \r\n null\r\n })\r\n\r\n const validationSchema = Yup.object().shape(tempSchema);\r\n\r\n\r\n\r\n if(showConfirmation)\r\n {\r\n return(\r\n <Grid container spacing={1}>\r\n <Grid item xs={12} md={12}>\r\n <h5>Form submitted successfully.</h5>\r\n <hr />\r\n <p>{form.confirmationText}</p>\r\n </Grid>\r\n </Grid>\r\n )\r\n }\r\n else\r\n {\r\n return (\r\n <Formik\r\n enableReinitialize={true}\r\n initialValues={formData.values}\r\n validationSchema = {validationSchema}\r\n onSubmit={(values, actions) => {\r\n Savesubmit(values);\r\n // actions.setSubmitting(false);\r\n }}\r\n >\r\n {props => {\r\n const {\r\n values,\r\n errors,\r\n handleChange,\r\n handleSubmit,\r\n setFieldValue,\r\n } = props;\r\n \r\n return (\r\n \r\n <form noValidate={true} autoComplete=\"off\" onSubmit={handleSubmit}>\r\n <div className='container-fluid'>\r\n <Grid container spacing={1}>\r\n {formData.formDataStatus === 'Complete' ?\r\n <Grid item xs={12} md={12} style={{ fontStyle: 'italic', fontWeight: 400 }}>\r\n Form completed on {format(new Date(formData.editedOn ? formData.editedOn : null), \"dd-MM-yyyy\")} at {format(new Date(formData.editedOn ? formData.editedOn : null), \"h:mm aa\")}.\r\n </Grid>\r\n : null}\r\n <Grid item xs={12} md={12}>\r\n {form.formInstructions}\r\n </Grid>\r\n {/* <Grid container spacing={1}> */}\r\n {form.formQuestions && form.formQuestions.filter(question => !(question.adminUseOnly && formData.callerRole === 'Client')).map((question, index) => {\r\n return ( \r\n <Grid item xs={12} md={12} key={question.questionID} style={{ marginBottom: 15 }}>\r\n {question.type !== 'STATEMENT'\r\n ? <Form.Label style={{ width: '100%', fontWeight: 600 }}>{question.questionText}{question.mandatory ? '*' : null}</Form.Label>\r\n : null}\r\n <FormInput question={question} handleChange={handleChange} setFieldValue={setFieldValue} values={values} errors={errors} />\r\n <FormHelperText>{question.questionHelpText}</FormHelperText>\r\n </Grid>\r\n );\r\n })}\r\n {/* </Grid> */}\r\n <Grid container direction=\"row\" justifyContent=\"space-between\">\r\n {preview ?\r\n <Grid item md={8}>\r\n <Button variant=\"outlined\" style={{ background: '#fff0ed' }} onClick={() => showPDF(values)}>\r\n Preview\r\n </Button>\r\n </Grid>\r\n : \r\n null\r\n }\r\n <Grid item md={2} style={{ textAlign: 'right' }}>\r\n <Button variant=\"outlined\" style={{ background: \"#eeeeee\" }} onClick={() => setShowFormData(false)}> \r\n Cancel\r\n </Button>\r\n </Grid>\r\n <Grid item md={2} style={{ textAlign: 'right' }}>\r\n {!readonly && ((formDataID && formDataID > 0) || pdfFlag) ?\r\n <Button variant=\"outlined\" color=\"secondary\" type=\"submit\" style={{ background: \"#daeaf5\" }}>\r\n {pdfFlag ?\r\n <>\r\n {pdfGen ? \r\n 'Fax PDF'\r\n :\r\n 'Generate PDF'\r\n } \r\n </>\r\n : \r\n 'Save'\r\n }\r\n </Button>\r\n :\r\n null\r\n }\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </div>\r\n </form>\r\n )\r\n }}\r\n </Formik>\r\n\r\n )\r\n }\r\n}\r\n\r\nconst useStyles = makeStyles(theme => ({ \r\n root: {\r\n maxWidth: 550,\r\n },\r\n cardHeader: {\r\n borderBottom: \"solid 1px silver\",\r\n backgroundColor: \"#daeaf5\",\r\n },\r\n formControl: {\r\n // margin: theme.spacing(1),\r\n // minWidth: 120,\r\n marginLeft: 8\r\n },\r\n dropzoneQuestion: {\r\n height: 100\r\n }\r\n}));\r\n","import { put, takeLatest, all, select } from \"redux-saga/effects\";\r\nimport axios from \"axios\";\r\nimport { toast } from \"react-toastify\";\r\nimport isCached from \"../../components/Cache\";\r\n\r\nexport const BASE_URL = process.env.REACT_APP_APIIP + \"/reference\";\r\n\r\nconst cache = (state) => state.admin.cache;\r\n\r\nexport const actionTypes = {\r\n // Init actiontypes to build reference data \r\n SET_INITIAL: \"SET_INITIAL\",\r\n SET_CONSTANTS: \"SET_CONSTANTS\",\r\n FETCH_CONSTANTS: \"FETCH_CONSTANTS\",\r\n SET_TIMEZONE: \"SET_TIMEZONE\",\r\n FETCH_TIMEZONE: 'FETCH_TIMEZONE',\r\n SET_AREASOFINTEREST : \"SET_AREASOFINTEREST\",\r\n FETCH_AREASOFINTEREST : \"FETCH_AREASOFINTEREST\",\r\n FETCH_SUPERVISIONAREAS : \"FETCH_SUPERVISIONAREAS\",\r\n SET_SUPERVISIONAREAS : \"SET_SUPERVISIONAREAS\",\r\n SET_MBSSERVICES : \"SET_MBSSERVICES\",\r\n FETCH_MBSSERVICES : \"FETCH_MBSSERVICES\",\r\n SET_FUNDINGTYPES : \"SET_FUNDINGTYPES\",\r\n FETCH_FUNDINGTYPES : \"FETCH_FUNDINGTYPES\",\r\n FETCH_SUNDAYTHISWEEK : \"FETCH_SUNDAYTHISWEEK\",\r\n SET_SUNDAYTHISWEEK: \"SET_SUNDAYTHISWEEK\",\r\n SET_MEDICALPRACTICES : \"SET_MEDICALPRACTICES\",\r\n FETCH_MEDICALPRACTICES : \"FETCH_MEDICALPRACTICES\",\r\n SET_MEDICALPRACTITIONERS : \"SET_MEDICALPRACTITIONERS\",\r\n FETCH_MEDICALPRACTITIONERS : \"FETCH_MEDICALPRACTITIONERS\",\r\n FETCH_TAGS: \"FETCH_TAGS\",\r\n FETCH_CONTEXTS: \"FETCH_CONTEXTS\",\r\n PUT_TAG: \"PUT_TAG\",\r\n FETCH_USERS: \"FETCH_USERS\",\r\n PUT_USER: \"PUT_USER\",\r\n RUN_ETL: \"RUN_ETL\"\r\n \r\n};\r\n\r\nconst initialState = {\r\n Contexts: [],\r\n Tags: [],\r\n TimeZone: [],\r\n AreasOfInterest: [],\r\n SupervisionAreas: [],\r\n MBSServices: [],\r\n Constants: [],\r\n FundingTypes: [],\r\n SundayThisWeek: '',\r\n Users: [],\r\n};\r\n\r\nexport function reducer(state = initialState, {type, ...action }) \r\n{\r\n switch (type) \r\n {\r\n case 'SET_LOCAL_REFERENCE': {\r\n return {\r\n ...state,\r\n [action.payload.referenceName]: action.payload.grid, \r\n };\r\n }\r\n case 'SET_SUNDAYTHISWEEK': {\r\n // console.log(action.payload);\r\n return {\r\n ...state,\r\n SundayThisWeek : action.payload, \r\n };\r\n }\r\n case 'SET_TIMEZONE': {\r\n // console.log(action.payload);\r\n return {\r\n ...state,\r\n TimeZone : action.payload, \r\n };\r\n }\r\n case 'SET_AREASOFINTEREST': {\r\n // console.log(action.payload);\r\n return {\r\n ...state,\r\n AreasOfInterest: action.payload, \r\n };\r\n }\r\n case 'SET_SUPERVISIONAREAS': {\r\n // console.log(action.payload);\r\n return {\r\n ...state,\r\n SupervisionAreas: action.payload, \r\n };\r\n }\r\n case 'SET_MBSSERVICES': {\r\n // console.log(action.payload);\r\n return {\r\n ...state,\r\n MBSServices: action.payload, \r\n };\r\n }\r\n case 'SET_FUNDINGTYPES': {\r\n // console.log(action.payload);\r\n return {\r\n ...state,\r\n FundingTypes: action.payload, \r\n };\r\n }\r\n case 'SET_CONSTANTS': {\r\n // console.log(action.payload);\r\n return {\r\n ...state,\r\n Constants: action.payload, \r\n };\r\n }\r\n case 'SET_INITIAL': {\r\n return initialState;\r\n }\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\n// Fetch's Below \r\n\r\nexport function* fetchTimeZone(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/timezone\";\r\n const response = yield axios.get(newURL);\r\n if (process.env.REACT_APP_DEBUG) \r\n {\r\n console.log(response);\r\n }\r\n // Check response\r\n if ((response.status) && (response.status === 200))\r\n {\r\n const retData = response;\r\n if (retData.returnStatus === 'Error') \r\n {\r\n // Report Error\r\n yield put({ type: 'PUT_ERROR', payload: {Request: 'fetchTimeZone (E1)', ErrorType : 'REDUX Function', Message : retData.data.returnText } });\r\n }\r\n else\r\n {\r\n // Report Success and gather data \r\n yield put({ type: 'SET_TIMEZONE', payload: retData.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n }\r\n }\r\n else \r\n {\r\n // Report Error\r\n const retData = response;\r\n yield put({ type: 'PUT_ERROR', payload: {Request: 'fetchTimeZone (E1)', ErrorType : 'REDUX Function', Message : retData.data.returnText } });\r\n }\r\n } \r\n catch (error) \r\n {\r\n // Report Error \r\n yield put({ type: 'PUT_ERROR', payload: {Request: 'fetchTimeZone (E3)', ErrorType : 'REDUX Function', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchAreasOfInterest(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/areasofinterest/\" + action.payload;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(`${action.type}: ${newURL}`)\r\n if (process.env.REACT_APP_DEBUG) \r\n {\r\n console.log(response.data);\r\n }\r\n // Check response\r\n if ((response.status) && (response.status === 200))\r\n {\r\n const retData = response;\r\n if (retData.returnStatus === 'Error') \r\n {\r\n // Report Error\r\n // Not reporting failed fetch's information to user - at this stage \r\n // toast.error(\"Areas of Interest Load Failed (E1)\");\r\n yield put({ type: 'PUT_ERROR', payload: {Request: 'fetchAreasOfInterest (E1)', ErrorType : 'REDUX Function', Message : retData.data.returnText } });\r\n // console.log('error : Warning Data Cannot be Loaded (Code - ' & response.statusText);\r\n }\r\n else\r\n {\r\n // Report Success and gather data \r\n yield put({ type: 'SET_AREASOFINTEREST', payload: retData.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n }\r\n }\r\n else \r\n {\r\n // Report Error\r\n const retData = response;\r\n // Not reporting failed fetch's information to user - at this stage \r\n // toast.error(\"Areas of Interest Load Failed (E2)\");\r\n yield put({ type: 'PUT_ERROR', payload: {Request: 'fetchAreasOfInterest (E1)', ErrorType : 'REDUX Function', Message : retData.data.returnText } });\r\n // console.log('error : Warning Data Cannot be Loaded (Code - ' & response.statusText );\r\n }\r\n } \r\n catch (error) \r\n {\r\n // Report Error \r\n // Not reporting failed fetch's information to user - at this stage \r\n // toast.error(\"Areas of Interest Load Failed (E3)\");\r\n yield put({ type: 'PUT_ERROR', payload: {Request: 'fetchAreasOfInterest (E3)', ErrorType : 'REDUX Function', Message : error.message } });\r\n // console.log('error: Warning Cannot load Reference ' & referenceName & ' (Code - SVR)');\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchSupervisionAreas(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/supervisionareas\";\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(`${action.type}: ${newURL}`)\r\n if (process.env.REACT_APP_DEBUG) \r\n {\r\n console.log(response.data);\r\n }\r\n // Check response\r\n if ((response.status) && (response.status === 200))\r\n {\r\n const retData = response;\r\n if (retData.returnStatus === 'Error') \r\n {\r\n // Report Error\r\n // Not reporting failed fetch's information to user - at this stage \r\n // toast.error(\"Areas of Interest Load Failed (E1)\");\r\n yield put({ type: 'PUT_ERROR', payload: {Request: 'fetchSupervisionAreas (E1)', ErrorType : 'REDUX Function', Message : retData.data.returnText } });\r\n // console.log('error : Warning Data Cannot be Loaded (Code - ' & response.statusText);\r\n }\r\n else\r\n {\r\n // Report Success and gather data \r\n yield put({ type: 'SET_SUPERVISIONAREAS', payload: retData.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n }\r\n }\r\n else \r\n {\r\n // Report Error\r\n const retData = response;\r\n // Not reporting failed fetch's information to user - at this stage \r\n // toast.error(\"Areas of Interest Load Failed (E2)\");\r\n yield put({ type: 'PUT_ERROR', payload: {Request: 'fetchSupervisionAreas (E1)', ErrorType : 'REDUX Function', Message : retData.data.returnText } });\r\n // console.log('error : Warning Data Cannot be Loaded (Code - ' & response.statusText );\r\n }\r\n } \r\n catch (error) \r\n {\r\n // Report Error \r\n // Not reporting failed fetch's information to user - at this stage \r\n // toast.error(\"Areas of Interest Load Failed (E3)\");\r\n yield put({ type: 'PUT_ERROR', payload: {Request: 'fetchSupervisionAreas (E3)', ErrorType : 'REDUX Function', Message : error.message } });\r\n // console.log('error: Warning Cannot load Reference ' & referenceName & ' (Code - SVR)');\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchMBSServices(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/mbsservices\";\r\n const response = yield axios.get(newURL);\r\n if (process.env.REACT_APP_DEBUG) \r\n {\r\n console.log(response);\r\n }\r\n // Check response\r\n if ((response.status) && (response.status === 200))\r\n {\r\n const retData = response;\r\n if (retData.returnStatus === 'Error') \r\n {\r\n // Report Error\r\n // Not reporting failed fetch's information to user - at this stage \r\n // toast.error(\"MBS Services Load Failed (E1)\");\r\n yield put({ type: 'PUT_ERROR', payload: {Request: 'fetchMBSServices (E1)', ErrorType : 'REDUX Function', Message : retData.data.returnText } });\r\n // console.log('error : Warning Data Cannot be Loaded (Code - ' & response.statusText);\r\n }\r\n else\r\n {\r\n // Report Success and gather data \r\n yield put({ type: 'SET_MBSSERVICES', payload: retData.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n }\r\n }\r\n else \r\n {\r\n // Report Error\r\n const retData = response;\r\n // Not reporting failed fetch's information to user - at this stage \r\n // toast.error(\"MBS Services Load Failed (E2)\");\r\n yield put({ type: 'PUT_ERROR', payload: {Request: 'fetchMBSServices (E1)', ErrorType : 'REDUX Function', Message : retData.data.returnText } });\r\n // console.log('error : Warning Data Cannot be Loaded (Code - ' & response.statusText );\r\n }\r\n } \r\n catch (error) \r\n {\r\n // Report Error \r\n // Not reporting failed fetch's information to user - at this stage \r\n // toast.error(\"MBS Services Load Failed (E3)\");\r\n yield put({ type: 'PUT_ERROR', payload: {Request: 'fetchMBSServices (E3)', ErrorType : 'REDUX Function', Message : error.message } });\r\n // console.log('error: Warning Cannot load Reference ' & referenceName & ' (Code - SVR)');\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchConstants(action){\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/constants\";\r\n const response = yield axios.get(newURL);\r\n if (process.env.REACT_APP_DEBUG) \r\n {\r\n console.log(response);\r\n }\r\n // Check response\r\n if ((response.status) && (response.status === 200))\r\n {\r\n const retData = response;\r\n if (retData.returnStatus === 'Error') \r\n {\r\n // Report Error\r\n // Not reporting failed fetch's information to user - at this stage \r\n // toast.error(\"Constants Load Failed (E1)\");\r\n yield put({ type: 'PUT_ERROR', payload: {Request: 'fetchConstants (E1)', ErrorType : 'REDUX Function', Message : retData.data.returnText } });\r\n // console.log('error : Warning Data Cannot be Loaded (Code - ' & response.statusText);\r\n }\r\n else\r\n {\r\n // Report Success and gather data \r\n var object = retData.data.reduce((obj, item) => Object.assign(obj, { [item.name]: item.value }), {} );\r\n // console.log(object);\r\n yield put({ type: 'SET_CONSTANTS', payload: object});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n }\r\n }\r\n else \r\n {\r\n // Report Error\r\n const retData = response;\r\n // Not reporting failed fetch's information to user - at this stage \r\n // toast.error(\"Constants Load Failed (E2)\");\r\n yield put({ type: 'PUT_ERROR', payload: {Request: 'fetchConstants (E1)', ErrorType : 'REDUX Function', Message : retData.data.returnText } });\r\n // console.log('error : Warning Data Cannot be Loaded (Code - ' & response.statusText );\r\n }\r\n } \r\n catch (error) \r\n {\r\n // Report Error \r\n // Not reporting failed fetch's information to user - at this stage \r\n // toast.error(\"Constants Load Failed (E3)\");\r\n yield put({ type: 'PUT_ERROR', payload: {Request: 'fetchConstants (E3)', ErrorType : 'REDUX Function', Message : error.message } });\r\n // console.log('error: Warning Cannot load Reference ' & referenceName & ' (Code - SVR)');\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchFundingTypes(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/fundingtypes\";\r\n const response = yield axios.get(newURL);\r\n if (process.env.REACT_APP_DEBUG) \r\n {\r\n console.log(response);\r\n }\r\n // Check response\r\n if ((response.status) && (response.status === 200))\r\n {\r\n const retData = response;\r\n if (retData.returnStatus === 'Error') \r\n {\r\n // Report Error\r\n // Not reporting failed fetch's information to user - at this stage \r\n // toast.error(\"Funding Types Load Failed (E1)\");\r\n yield put({ type: 'PUT_ERROR', payload: {Request: 'fetchFundingTypes (E1)', ErrorType : 'REDUX Function', Message : retData.data.returnText } });\r\n // console.log('error : Warning Data Cannot be Loaded (Code - ' & response.statusText);\r\n }\r\n else\r\n {\r\n // Report Success and gather data \r\n yield put({ type: 'SET_FUNDINGTYPES', payload: retData.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n }\r\n }\r\n else \r\n {\r\n // Report Error\r\n const retData = response;\r\n // Not reporting failed fetch's information to user - at this stage \r\n // toast.error(\"Funding Types Load Failed (E2)\");\r\n yield put({ type: 'PUT_ERROR', payload: {Request: 'fetchFundingTypes (E1)', ErrorType : 'REDUX Function', Message : retData.data.returnText } });\r\n // console.log('error : Warning Data Cannot be Loaded (Code - ' & response.statusText );\r\n }\r\n } \r\n catch (error) \r\n {\r\n // Report Error \r\n // Not reporting failed fetch's information to user - at this stage \r\n // toast.error(\"Funding Types Load Failed (E3)\");\r\n yield put({ type: 'PUT_ERROR', payload: {Request: 'fetchFundingTypes (E3)', ErrorType : 'REDUX Function', Message : error.message } });\r\n // console.log('error: Warning Cannot load Reference ' & referenceName & ' (Code - SVR)');\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchSundayThisWeek(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/sundayThisWeek\";\r\n const response = yield axios.get(newURL);\r\n if (process.env.REACT_APP_DEBUG) \r\n {\r\n console.log(response);\r\n }\r\n // Check response\r\n if ((response.status) && (response.status === 200))\r\n {\r\n const retData = response;\r\n if (retData.returnStatus === 'Error') \r\n {\r\n // Report Error\r\n // Not reporting failed fetch's information to user - at this stage \r\n // toast.error(\"Funding Types Load Failed (E1)\");\r\n yield put({ type: 'PUT_ERROR', payload: {Request: 'fetchSundayThisWeek (E1)', ErrorType : 'REDUX Function', Message : retData.data.returnText } });\r\n // console.log('error : Warning Data Cannot be Loaded (Code - ' & response.statusText);\r\n }\r\n else\r\n {\r\n // Report Success and gather data \r\n yield put({ type: 'SET_SUNDAYTHISWEEK', payload: retData.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n }\r\n }\r\n else \r\n {\r\n // Report Error\r\n const retData = response;\r\n // Not reporting failed fetch's information to user - at this stage \r\n // toast.error(\"Funding Types Load Failed (E2)\");\r\n yield put({ type: 'PUT_ERROR', payload: {Request: 'fetchSundayThisWeek (E1)', ErrorType : 'REDUX Function', Message : retData.data.returnText } });\r\n // console.log('error : Warning Data Cannot be Loaded (Code - ' & response.statusText );\r\n }\r\n } \r\n catch (error) \r\n {\r\n // Report Error \r\n // Not reporting failed fetch's information to user - at this stage \r\n // toast.error(\"Funding Types Load Failed (E3)\");\r\n yield put({ type: 'PUT_ERROR', payload: {Request: 'fetchSundayThisWeek (E3)', ErrorType : 'REDUX Function', Message : error.message } });\r\n // console.log('error: Warning Cannot load Reference ' & referenceName & ' (Code - SVR)');\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchContexts(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n // Note - these are also setup as an enum list in C# in the API - and also in the Contexts table\r\n const contexts = [\r\n { ContextID: 1, Context: 'Fax' }, \r\n { ContextID: 2, Context: 'Psychologist' }, \r\n { ContextID: 3, Context: 'GP' }, \r\n { ContextID: 4, Context: 'Financial_Counsellor' }, \r\n { ContextID: 5, Context: 'Client' }, \r\n { ContextID: 6, Context: 'Booking' }, \r\n { ContextID: 7, Context: 'Invoice' }, \r\n { ContextID: 8, Context: 'Client_Registration' }, \r\n ]\r\n yield put({ type: 'SET_LOCAL_REFERENCE', payload: {referenceName: 'Contexts', grid: contexts } });\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n }\r\n}\r\n\r\nexport function* fetchUsers(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/adminusers/\"\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action) + ` - ${newURL}`);\r\n const response = yield axios.get(newURL);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(`ok saved: ${action.type}`);\r\n process.env.REACT_APP_DEBUG && console.log(response.data);\r\n yield put({ type: 'SET_LOCAL_REFERENCE', payload: {referenceName: 'Users', grid: response.data } });\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n } \r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message, actionPayload: action.payload ? action.payload : 'No payload' } });\r\n }\r\n }\r\n}\r\n\r\nexport function* runETL(action) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/runetl/\"\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action) + ` - ${newURL}`);\r\n const response = yield axios.get(newURL); \r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(`ok saved: ${action.type}`);\r\n process.env.REACT_APP_DEBUG && console.log(response.data);\r\n toast.success(\"ETL Update Started\",{ autoClose:5000 });\r\n\r\n }\r\n else // API completed with 200, however there is an error message\r\n {\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n toast.error('ETL Update Not Started');\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error('ETL Update Not Started');\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message, actionPayload: action.payload ? action.payload : 'No payload' } });\r\n }\r\n}\r\n\r\nexport function* putUser(action) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/adminuser/\"\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action) + ` - ${newURL}`);\r\n const response = yield axios.put(newURL, action.payload); \r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(`ok saved: ${action.type}`);\r\n process.env.REACT_APP_DEBUG && console.log(response.data);\r\n yield put({ type: 'FETCH_USERS', payload: { popCache: true } });\r\n }\r\n else // API completed with 200, however there is an error message\r\n {\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message, actionPayload: action.payload ? action.payload : 'No payload' } });\r\n }\r\n}\r\n\r\nexport function* fetchTags(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/tags/\"\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action) + ` - ${newURL}`);\r\n const response = yield axios.get(newURL);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(`ok saved: ${action.type}`);\r\n process.env.REACT_APP_DEBUG && console.log(response.data);\r\n yield put({ type: 'SET_LOCAL_REFERENCE', payload: {referenceName: 'Tags', grid: response.data } });\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n } \r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* putTag(action) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/tag/\"\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action) + ` - ${newURL}`);\r\n const response = yield axios.put(newURL, action.payload); \r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(`ok saved: ${action.type}`);\r\n process.env.REACT_APP_DEBUG && console.log(response.data);\r\n yield put({ type: 'FETCH_TAGS', payload: { popCache: true } });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n } \r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport const actions = {\r\n fetchTimeZone: (payload) => ({ type: actionTypes.FETCH_TIMEZONE, payload : payload }),\r\n fetchAreasOfInterest: (payload) => ({ type: actionTypes.FETCH_AREASOFINTEREST, payload : payload }),\r\n fetchSupervisionAreas: (payload) => ({ type: actionTypes.FETCH_SUPERVISIONAREAS, payload : payload }),\r\n fetchMBSServices: (payload) => ({ type: actionTypes.FETCH_MBSSERVICES, payload : payload }),\r\n fetchConstants: (payload) => ({ type: actionTypes.FETCH_CONSTANTS, payload : payload }),\r\n fetchFundingTypes: (payload) => ({ type: actionTypes.FETCH_FUNDINGTYPES, payload : payload }),\r\n fetchSundayThisWeek: (payload) => ({ type: actionTypes.FETCH_SUNDAYTHISWEEK, payload : payload }),\r\n fetchTags: (payload) => ({ type: actionTypes.FETCH_TAGS, payload : payload }),\r\n fetchContexts: (payload) => ({ type: actionTypes.FETCH_CONTEXTS, payload : payload }),\r\n putTag: (payload) => ({ type: actionTypes.PUT_TAG, payload: payload }),\r\n fetchUsers: (payload) => ({ type: actionTypes.FETCH_USERS, payload : payload }),\r\n putUser: (payload) => ({ type: actionTypes.PUT_USER, payload: payload }),\r\n runETL: (payload) => ({ type: actionTypes.RUN_ETL, payload : payload }),\r\n};\r\n\r\nfunction* actionWatcher() {\r\n yield takeLatest('FETCH_TIMEZONE',fetchTimeZone);\r\n yield takeLatest('FETCH_AREASOFINTEREST',fetchAreasOfInterest);\r\n yield takeLatest('FETCH_SUPERVISIONAREAS',fetchSupervisionAreas);\r\n yield takeLatest('FETCH_MBSSERVICES',fetchMBSServices);\r\n yield takeLatest('FETCH_CONSTANTS',fetchConstants);\r\n yield takeLatest('FETCH_FUNDINGTYPES',fetchFundingTypes);\r\n yield takeLatest('FETCH_SUNDAYTHISWEEK',fetchSundayThisWeek);\r\n yield takeLatest('FETCH_TAGS',fetchTags)\r\n yield takeLatest('FETCH_CONTEXTS',fetchContexts)\r\n yield takeLatest('PUT_TAG',putTag);\r\n yield takeLatest('FETCH_USERS', fetchUsers);\r\n yield takeLatest('PUT_USER', putUser);\r\n yield takeLatest('RUN_ETL', runETL);\r\n}\r\n\r\nexport function* saga() {\r\n yield all([\r\n actionWatcher(),\r\n ]); \r\n}\r\n\r\n\r\n","/* eslint-disable no-script-url,jsx-a11y/anchor-is-valid,no-loop-func,no-undef,no-restricted-globals,strict,no-unused-vars,no-cond-assign,eqeqeq,no-throw-literal,no-unreachable,no-useless-escape,no-redeclare,no-useless-concat,no-unused-expressions,no-sequences */\r\nimport KTUtil from \"./util\";\r\n\r\n\"use strict\";\r\nvar KTOffcanvas = function(elementId, options) {\r\n // Main object\r\n var the = this;\r\n var init = false;\r\n\r\n // Get element object\r\n var element = KTUtil.get(elementId);\r\n var body = KTUtil.get('body');\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n // Default options\r\n var defaultOptions = {};\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n construct: function(options) {\r\n if (KTUtil.data(element).has('offcanvas')) {\r\n the = KTUtil.data(element).get('offcanvas');\r\n } else {\r\n // reset offcanvas\r\n Plugin.init(options);\r\n\r\n // build offcanvas\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('offcanvas', the);\r\n }\r\n\r\n return the;\r\n },\r\n\r\n init: function(options) {\r\n the.events = [];\r\n\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n the.overlay;\r\n\r\n the.classBase = the.options.baseClass;\r\n the.classShown = the.classBase + '--on';\r\n the.classOverlay = the.classBase + '-overlay';\r\n\r\n the.state = KTUtil.hasClass(element, the.classShown) ? 'shown' : 'hidden';\r\n },\r\n\r\n build: function() {\r\n // offcanvas toggle\r\n if (the.options.toggleBy) {\r\n if (typeof the.options.toggleBy === 'string') {\r\n KTUtil.addEvent( the.options.toggleBy, 'click', function(e) {\r\n e.preventDefault();\r\n Plugin.toggle();\r\n });\r\n } else if (the.options.toggleBy && the.options.toggleBy[0]) {\r\n if (the.options.toggleBy[0].target) {\r\n for (var i in the.options.toggleBy) {\r\n KTUtil.addEvent( the.options.toggleBy[i].target, 'click', function(e) {\r\n e.preventDefault();\r\n Plugin.toggle();\r\n });\r\n }\r\n } else {\r\n for (var i in the.options.toggleBy) {\r\n KTUtil.addEvent( the.options.toggleBy[i], 'click', function(e) {\r\n e.preventDefault();\r\n Plugin.toggle();\r\n });\r\n }\r\n }\r\n\r\n } else if (the.options.toggleBy && the.options.toggleBy.target) {\r\n KTUtil.addEvent( the.options.toggleBy.target, 'click', function(e) {\r\n e.preventDefault();\r\n Plugin.toggle();\r\n });\r\n }\r\n }\r\n\r\n // offcanvas close\r\n var closeBy = KTUtil.get(the.options.closeBy);\r\n if (closeBy) {\r\n KTUtil.addEvent(closeBy, 'click', function(e) {\r\n e.preventDefault();\r\n Plugin.hide();\r\n });\r\n }\r\n\r\n // Window resize\r\n /*\r\n KTUtil.addResizeHandler(function() {\r\n if (parseInt(KTUtil.css(element, 'left')) >= 0 || parseInt(KTUtil.css(element, 'right') >= 0) || KTUtil.css(element, 'position') != 'fixed') {\r\n KTUtil.css(element, 'opacity', '1');\r\n }\r\n });\r\n */\r\n },\r\n\r\n isShown: function(target) {\r\n return (the.state == 'shown' ? true : false);\r\n },\r\n\r\n toggle: function() {;\r\n Plugin.eventTrigger('toggle');\r\n\r\n if (the.state == 'shown') {\r\n Plugin.hide(this);\r\n } else {\r\n Plugin.show(this);\r\n }\r\n },\r\n\r\n show: function(target) {\r\n if (the.state == 'shown') {\r\n return;\r\n }\r\n\r\n Plugin.eventTrigger('beforeShow');\r\n\r\n Plugin.togglerClass(target, 'show');\r\n\r\n // Offcanvas panel\r\n KTUtil.addClass(body, the.classShown);\r\n KTUtil.addClass(element, the.classShown);\r\n //KTUtil.css(element, 'opacity', '1');\r\n\r\n the.state = 'shown';\r\n\r\n if (the.options.overlay) {\r\n the.overlay = KTUtil.insertAfter(document.createElement('DIV') , element );\r\n KTUtil.addClass(the.overlay, the.classOverlay);\r\n KTUtil.addEvent(the.overlay, 'click', function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n Plugin.hide(target);\r\n });\r\n }\r\n\r\n Plugin.eventTrigger('afterShow');\r\n },\r\n\r\n hide: function(target) {\r\n if (the.state == 'hidden') {\r\n return;\r\n }\r\n\r\n Plugin.eventTrigger('beforeHide');\r\n\r\n Plugin.togglerClass(target, 'hide');\r\n\r\n KTUtil.removeClass(body, the.classShown);\r\n KTUtil.removeClass(element, the.classShown);\r\n\r\n the.state = 'hidden';\r\n\r\n if (the.options.overlay && the.overlay) {\r\n KTUtil.remove(the.overlay);\r\n }\r\n\r\n /*\r\n KTUtil.transitionEnd(element, function() {\r\n KTUtil.css(element, 'opacity', '0');\r\n });\r\n */\r\n\r\n Plugin.eventTrigger('afterHide');\r\n },\r\n\r\n togglerClass: function(target, mode) {\r\n // Toggler\r\n var id = KTUtil.attr(target, 'id');\r\n var toggleBy;\r\n\r\n if (the.options.toggleBy && the.options.toggleBy[0] && the.options.toggleBy[0].target) {\r\n for (var i in the.options.toggleBy) {\r\n if (the.options.toggleBy[i].target === id) {\r\n toggleBy = the.options.toggleBy[i];\r\n }\r\n }\r\n } else if (the.options.toggleBy && the.options.toggleBy.target) {\r\n toggleBy = the.options.toggleBy;\r\n }\r\n\r\n if (toggleBy) {\r\n var el = KTUtil.get(toggleBy.target);\r\n\r\n if (mode === 'show') {\r\n KTUtil.addClass(el, toggleBy.state);\r\n }\r\n\r\n if (mode === 'hide') {\r\n KTUtil.removeClass(el, toggleBy.state);\r\n }\r\n }\r\n },\r\n\r\n eventTrigger: function(name, args) {\r\n for (var i = 0; i < the.events.length; i++) {\r\n var event = the.events[i];\r\n if (event.name == name) {\r\n if (event.one == true) {\r\n if (event.fired == false) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, the, args);\r\n }\r\n } else {\r\n return event.handler.call(this, the, args);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n the.isShown = function() {\r\n return Plugin.isShown();\r\n };\r\n\r\n the.hide = function() {\r\n return Plugin.hide();\r\n };\r\n\r\n the.show = function() {\r\n return Plugin.show();\r\n };\r\n\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n the.one = function(name, handler) {\r\n return Plugin.addEvent(name, handler, true);\r\n };\r\n\r\n ///////////////////////////////\r\n // ** Plugin Construction ** //\r\n ///////////////////////////////\r\n\r\n // Run plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n // Init done\r\n init = true;\r\n\r\n // Return plugin instance\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTOffcanvas;\r\n}\r\n\r\nexport default KTOffcanvas;\r\n","import _ from \"lodash\";\r\n\r\n// cache component to cache actions to prevent unecessary redux api calls\r\n\r\nexport default function isCached (cache, action) {\r\n\r\n let result = true;\r\n let message = '';\r\n let timeNow = Date.now();\r\n\r\n // if instructed to pop the action from cache, then return a miss\r\n if(action.payload && action.payload.popCache) {\r\n message = 'Cache popped';\r\n result = false;\r\n }\r\n\r\n // if action is not in the cache, then return a miss\r\n if (!cache[action.type])\r\n {\r\n message = 'Cache miss - action not found';\r\n result = false;\r\n }\r\n\r\n // If action matches, check for a payload match\r\n if(result)\r\n {\r\n // If payload matches (and less than 30 mins old), then return a hit\r\n if(!action.payload || (_.isEqual(cache[action.type].payload, action.payload) && (timeNow - cache[action.type].timestamp < 1800000) ) ){\r\n message = `Cache hit - action and payload are in cache (${timeNow - cache[action.type].timestamp})`;\r\n result = true;\r\n }\r\n else // if payload doesn't match, then return a miss\r\n {\r\n message = 'Cache miss - action is in cache but payload do not match';\r\n result = false;\r\n }\r\n }\r\n\r\n process.env.REACT_APP_DEBUG && console.log(`${action.type} (${message})`);\r\n return result;\r\n\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport * as Forms from \"../store/ducks/forms.duck\";\r\nimport { Button, Form, Row, Col, Modal } from \"react-bootstrap\";\r\nimport { Grid, FormControl, Select, MenuItem } from '@material-ui/core';\r\nimport FormDataEntry from \"../pages/home/admin/FormDataEntry\";\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { ToastContainer, Flip } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\n\r\n\r\nexport default function SendLetter(props) {\r\n \r\n const dispatch = useDispatch()\r\n useEffect( () => { dispatch(Forms.actions.fetchForms()) }, [dispatch] )\r\n const role = useSelector(state => state.auth.roleDesc)\r\n const forms = useSelector(state => state.forms.Forms);\r\n\r\n // Will need to add more to this filter as they are developed\r\n const pdfForms = forms.filter(form => (props.form ? form.formDataPlugin === props.form : form.formDataPlugin === 'Fax from Provider to GP'))\r\n const [sendFormID, setSendFormID] = useState(0);\r\n const [showCompleteForm, setShowCompleteForm] = useState(false);\r\n const [selectedForm, setSelectedForm] = useState();\r\n\r\n function completeForm() {\r\n setShowCompleteForm(true);\r\n setSelectedForm(forms.filter(form => form.id === sendFormID)[0].formName)\r\n // console.log(forms.filter(form => form.id === sendFormID));\r\n }\r\n\r\n useEffect( () => { \r\n if (props.form && sendFormID === 0 && pdfForms.length > 0)\r\n {\r\n setSendFormID(pdfForms[0].formID)\r\n }\r\n }, [props.form, sendFormID, setSendFormID, pdfForms] )\r\n\r\n\r\n const handleSelectForm = (event,row) => {\r\n setSendFormID(event.target.value); \r\n };\r\n\r\n // const useStyles = makeStyles((theme) => ({\r\n // root: {\r\n // // minWidth: 200,\r\n // // maxWidth: 200,\r\n // },\r\n // media: {\r\n // height: 200,\r\n // },\r\n // title: {\r\n // fontSize: 14,\r\n // },\r\n // pos: {\r\n // marginBottom: 12,\r\n // },\r\n // }));\r\n \r\n // const classes = useStyles();\r\n \r\n return(\r\n <>\r\n <Grid container spacing={4}>\r\n <Grid item md={props.vertical ? 12 : 12}> \r\n {role !== 'Client' && role !== 'Referrer' ?\r\n <>\r\n {props.form ? \r\n <FormDataEntry formID={sendFormID} formDataID={0} setShowFormData={props.closeModal} contextName={'Fax'} contextID={props.faxID} pdfFlag={true} pdfGen={true} gpFax={props.faxID} preview={true} />\r\n :\r\n <>\r\n <hr />\r\n {pdfForms && pdfForms.length > 0 ?\r\n <Row>\r\n <Col md=\"12\"> \r\n <Form.Group >\r\n <FormControl variant=\"outlined\" margin=\"dense\">\r\n <Form.Label>Letter to Generate and Fax:</Form.Label>\r\n <Select \r\n id='sendFormID'\r\n aria-label='Select Action Type'\r\n name='sendFormID'\r\n value={sendFormID} \r\n onChange={handleSelectForm}\r\n style={{ backgroundColor: 'white', minWidth: 150 }}>\r\n <MenuItem key={0} value={0}></MenuItem>\r\n {pdfForms.map(row => { return (\r\n <MenuItem key={`form-${row.id}`} value={row.id}>{row.formName}</MenuItem>\r\n )}\r\n )}\r\n </Select>\r\n </FormControl> \r\n </Form.Group> \r\n </Col>\r\n {sendFormID !== 0 ? \r\n <Col md=\"12\"> \r\n <Grid container spacing={0} padding={6} justifyContent=\"space-between\">\r\n <Grid item>\r\n\r\n </Grid>\r\n <Grid item>\r\n <Button variant=\"success\" size=\"sm\" onClick={() => completeForm()}>\r\n Display Form\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </Col>\r\n :\r\n null\r\n }\r\n </Row>\r\n :\r\n null\r\n }\r\n </>\r\n }\r\n </>\r\n :\r\n null\r\n }\r\n </Grid>\r\n </Grid>\r\n \r\n <Modal show={showCompleteForm} onHide={() => setShowCompleteForm(false)} dialogClassName=\"edit-md-sm-dialog-modal\">\r\n <Modal.Header className=\"edit-md-sm-modal\">\r\n <Modal.Title>Generating {selectedForm && selectedForm} PDF Document</Modal.Title>\r\n <Button variant=\"outlined\" size=\"sm\" style={{ marginTop: 5, background: \"#eeeeee\", border: '1px solid #9da8e5', padding: 5, marginLeft: 10 }} onClick={() => setShowCompleteForm(false)} >\r\n <CloseIcon />\r\n </Button> \r\n </Modal.Header>\r\n <Modal.Body className=\"edit-md-modal\">\r\n <FormDataEntry formID={sendFormID} formDataID={0} setShowFormData={setShowCompleteForm} contextName={props.type} contextID={props.pkid} pdfFlag={true} pdfGen={true} preview={true}/>\r\n </Modal.Body>\r\n </Modal>\r\n\r\n <ToastContainer\r\n transition={Flip}\r\n position=\"bottom-right\"\r\n autoClose={2000}\r\n hideProgressBar={true}\r\n newestOnTop={false}\r\n closeOnClick\r\n rtl={false}\r\n pauseOnFocusLoss\r\n draggable\r\n pauseOnHover\r\n />\r\n\r\n </>\r\n\r\n\r\n )\r\n}\r\n \r\n","/* eslint-disable no-script-url,jsx-a11y/anchor-is-valid,no-loop-func,no-undef,no-restricted-globals,strict,no-unused-vars,no-cond-assign,eqeqeq,no-throw-literal,no-unreachable,no-useless-escape,no-redeclare,no-useless-concat,no-unused-expressions,no-sequences */\r\nimport KTUtil from \"./util\";\r\n\r\n\"use strict\";\r\nvar KTMenu = function(elementId, options) {\r\n // Main object\r\n var the = this;\r\n var init = false;\r\n\r\n // Get element object\r\n var element = KTUtil.get(elementId);\r\n var body = KTUtil.get('body');\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n // Default options\r\n var defaultOptions = {\r\n // scrollable area with Perfect Scroll\r\n scroll: {\r\n rememberPosition: false\r\n },\r\n\r\n // accordion submenu mode\r\n accordion: {\r\n slideSpeed: 200, // accordion toggle slide speed in milliseconds\r\n autoScroll: false, // enable auto scrolling(focus) to the clicked menu item\r\n autoScrollSpeed: 1200,\r\n expandAll: true // allow having multiple expanded accordions in the menu\r\n },\r\n\r\n // dropdown submenu mode\r\n dropdown: {\r\n timeout: 500 // timeout in milliseconds to show and hide the hoverable submenu dropdown\r\n }\r\n };\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n /**\r\n * Run plugin\r\n * @returns {KTMenu}\r\n */\r\n construct: function(options) {\r\n if (KTUtil.data(element).has('menu')) {\r\n the = KTUtil.data(element).get('menu');\r\n } else {\r\n // reset menu\r\n Plugin.init(options);\r\n\r\n // reset menu\r\n Plugin.reset();\r\n\r\n // build menu\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('menu', the);\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Handles submenu click toggle\r\n * @returns {KTMenu}\r\n */\r\n init: function(options) {\r\n the.events = [];\r\n\r\n the.eventHandlers = {};\r\n\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n\r\n // pause menu\r\n the.pauseDropdownHoverTime = 0;\r\n\r\n the.uid = KTUtil.getUniqueID();\r\n },\r\n\r\n update: function(options) {\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n\r\n // pause menu\r\n the.pauseDropdownHoverTime = 0;\r\n\r\n // reset menu\r\n Plugin.reset();\r\n\r\n the.eventHandlers = {};\r\n\r\n // build menu\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('menu', the);\r\n },\r\n\r\n reload: function() {\r\n // reset menu\r\n Plugin.reset();\r\n\r\n // build menu\r\n Plugin.build();\r\n\r\n // reset submenu props\r\n Plugin.resetSubmenuProps();\r\n },\r\n\r\n /**\r\n * Reset menu\r\n * @returns {KTMenu}\r\n */\r\n build: function() {\r\n // General accordion submenu toggle\r\n the.eventHandlers['event_1'] = KTUtil.on( element, '.kt-menu__toggle', 'click', Plugin.handleSubmenuAccordion);\r\n\r\n // Dropdown mode(hoverable)\r\n if (Plugin.getSubmenuMode() === 'dropdown' || Plugin.isConditionalSubmenuDropdown()) {\r\n // dropdown submenu - hover toggle\r\n the.eventHandlers['event_2'] = KTUtil.on( element, '[data-ktmenu-submenu-toggle=\"hover\"]', 'mouseover', Plugin.handleSubmenuDrodownHoverEnter);\r\n the.eventHandlers['event_3'] = KTUtil.on( element, '[data-ktmenu-submenu-toggle=\"hover\"]', 'mouseout', Plugin.handleSubmenuDrodownHoverExit);\r\n\r\n // dropdown submenu - click toggle\r\n the.eventHandlers['event_4'] = KTUtil.on( element, '[data-ktmenu-submenu-toggle=\"click\"] > .kt-menu__toggle, [data-ktmenu-submenu-toggle=\"click\"] > .kt-menu__link .kt-menu__toggle', 'click', Plugin.handleSubmenuDropdownClick);\r\n the.eventHandlers['event_5'] = KTUtil.on( element, '[data-ktmenu-submenu-toggle=\"tab\"] > .kt-menu__toggle, [data-ktmenu-submenu-toggle=\"tab\"] > .kt-menu__link .kt-menu__toggle', 'click', Plugin.handleSubmenuDropdownTabClick);\r\n }\r\n\r\n // handle link click\r\n the.eventHandlers['event_6'] = KTUtil.on(element, '.kt-menu__item > .kt-menu__link:not(.kt-menu__toggle):not(.kt-menu__link--toggle-skip)', 'click', Plugin.handleLinkClick);\r\n\r\n // Init scrollable menu\r\n if (the.options.scroll && the.options.scroll.height) {\r\n Plugin.scrollInit();\r\n }\r\n },\r\n\r\n /**\r\n * Reset menu\r\n * @returns {KTMenu}\r\n */\r\n reset: function() {\r\n KTUtil.off( element, 'click', the.eventHandlers['event_1']);\r\n\r\n // dropdown submenu - hover toggle\r\n KTUtil.off( element, 'mouseover', the.eventHandlers['event_2']);\r\n KTUtil.off( element, 'mouseout', the.eventHandlers['event_3']);\r\n\r\n // dropdown submenu - click toggle\r\n KTUtil.off( element, 'click', the.eventHandlers['event_4']);\r\n KTUtil.off( element, 'click', the.eventHandlers['event_5']);\r\n\r\n // handle link click\r\n KTUtil.off(element, 'click', the.eventHandlers['event_6']);\r\n },\r\n\r\n /**\r\n * Init scroll menu\r\n *\r\n */\r\n scrollInit: function() {\r\n if ( the.options.scroll && the.options.scroll.height ) {\r\n KTUtil.scrollDestroy(element);\r\n KTUtil.scrollInit(element, {mobileNativeScroll: true, windowScroll: false, resetHeightOnDestroy: true, handleWindowResize: true, height: the.options.scroll.height, rememberPosition: the.options.scroll.rememberPosition});\r\n } else {\r\n KTUtil.scrollDestroy(element);\r\n }\r\n },\r\n\r\n /**\r\n * Update scroll menu\r\n */\r\n scrollUpdate: function() {\r\n if ( the.options.scroll && the.options.scroll.height ) {\r\n KTUtil.scrollUpdate(element);\r\n }\r\n },\r\n\r\n /**\r\n * Scroll top\r\n */\r\n scrollTop: function() {\r\n if ( the.options.scroll && the.options.scroll.height ) {\r\n KTUtil.scrollTop(element);\r\n }\r\n },\r\n\r\n /**\r\n * Get submenu mode for current breakpoint and menu state\r\n * @returns {KTMenu}\r\n */\r\n getSubmenuMode: function(el) {\r\n if ( KTUtil.isInResponsiveRange('desktop') ) {\r\n if (el && KTUtil.hasAttr(el, 'data-ktmenu-submenu-toggle') && KTUtil.attr(el, 'data-ktmenu-submenu-toggle') == 'hover') {\r\n return 'dropdown';\r\n }\r\n\r\n if ( KTUtil.isset(the.options.submenu, 'desktop.state.body') ) {\r\n if ( KTUtil.hasClasses(body, the.options.submenu.desktop.state.body) ) {\r\n return the.options.submenu.desktop.state.mode;\r\n } else {\r\n return the.options.submenu.desktop.default;\r\n }\r\n } else if ( KTUtil.isset(the.options.submenu, 'desktop') ) {\r\n return the.options.submenu.desktop;\r\n }\r\n } else if ( KTUtil.isInResponsiveRange('tablet') && KTUtil.isset(the.options.submenu, 'tablet') ) {\r\n return the.options.submenu.tablet;\r\n } else if ( KTUtil.isInResponsiveRange('mobile') && KTUtil.isset(the.options.submenu, 'mobile') ) {\r\n return the.options.submenu.mobile;\r\n } else {\r\n return false;\r\n }\r\n },\r\n\r\n /**\r\n * Get submenu mode for current breakpoint and menu state\r\n * @returns {KTMenu}\r\n */\r\n isConditionalSubmenuDropdown: function() {\r\n if ( KTUtil.isInResponsiveRange('desktop') && KTUtil.isset(the.options.submenu, 'desktop.state.body') ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n },\r\n\r\n\r\n /**\r\n * Reset submenu attributes\r\n * @returns {KTMenu}\r\n */\r\n resetSubmenuProps: function(e) {\r\n var submenus = KTUtil.findAll(element, '.kt-menu__submenu');\r\n if ( submenus ) {\r\n for (var i = 0, len = submenus.length; i < len; i++) {\r\n KTUtil.css(submenus[0], 'display', '');\r\n KTUtil.css(submenus[0], 'overflow', '');\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Handles submenu hover toggle\r\n * @returns {KTMenu}\r\n */\r\n handleSubmenuDrodownHoverEnter: function(e) {\r\n if ( Plugin.getSubmenuMode(this) === 'accordion' ) {\r\n return;\r\n }\r\n\r\n if ( the.resumeDropdownHover() === false ) {\r\n return;\r\n }\r\n\r\n var item = this;\r\n\r\n if ( item.getAttribute('data-hover') == '1' ) {\r\n item.removeAttribute('data-hover');\r\n clearTimeout( item.getAttribute('data-timeout') );\r\n item.removeAttribute('data-timeout');\r\n }\r\n\r\n Plugin.showSubmenuDropdown(item);\r\n },\r\n\r\n /**\r\n * Handles submenu hover toggle\r\n * @returns {KTMenu}\r\n */\r\n handleSubmenuDrodownHoverExit: function(e) {\r\n if ( the.resumeDropdownHover() === false ) {\r\n return;\r\n }\r\n\r\n if ( Plugin.getSubmenuMode(this) === 'accordion' ) {\r\n return;\r\n }\r\n\r\n var item = this;\r\n var time = the.options.dropdown.timeout;\r\n\r\n var timeout = setTimeout(function() {\r\n if ( item.getAttribute('data-hover') == '1' ) {\r\n Plugin.hideSubmenuDropdown(item, true);\r\n }\r\n }, time);\r\n\r\n item.setAttribute('data-hover', '1');\r\n item.setAttribute('data-timeout', timeout);\r\n },\r\n\r\n /**\r\n * Handles submenu click toggle\r\n * @returns {KTMenu}\r\n */\r\n handleSubmenuDropdownClick: function(e) {\r\n if ( Plugin.getSubmenuMode(this) === 'accordion' ) {\r\n return;\r\n }\r\n\r\n var item = this.closest('.kt-menu__item');\r\n\r\n if ( item.getAttribute('data-ktmenu-submenu-mode') == 'accordion' ) {\r\n return;\r\n }\r\n\r\n if ( KTUtil.hasClass(item, 'kt-menu__item--hover') === false ) {\r\n KTUtil.addClass(item, 'kt-menu__item--open-dropdown');\r\n Plugin.showSubmenuDropdown(item);\r\n } else {\r\n KTUtil.removeClass(item, 'kt-menu__item--open-dropdown' );\r\n Plugin.hideSubmenuDropdown(item, true);\r\n }\r\n\r\n e.preventDefault();\r\n },\r\n\r\n /**\r\n * Handles tab click toggle\r\n * @returns {KTMenu}\r\n */\r\n handleSubmenuDropdownTabClick: function(e) {\r\n if (Plugin.getSubmenuMode(this) === 'accordion') {\r\n return;\r\n }\r\n\r\n var item = this.closest('.kt-menu__item');\r\n\r\n if (item.getAttribute('data-ktmenu-submenu-mode') == 'accordion') {\r\n return;\r\n }\r\n\r\n if (KTUtil.hasClass(item, 'kt-menu__item--hover') == false) {\r\n KTUtil.addClass(item, 'kt-menu__item--open-dropdown');\r\n Plugin.showSubmenuDropdown(item);\r\n }\r\n\r\n e.preventDefault();\r\n },\r\n\r\n /**\r\n * Handles link click\r\n * @returns {KTMenu}\r\n */\r\n handleLinkClick: function(e) {\r\n var submenu = this.closest('.kt-menu__item.kt-menu__item--submenu'); //\r\n\r\n var result = Plugin.eventTrigger('linkClick', this, e);\r\n if (result === false) {\r\n return;\r\n }\r\n\r\n if ( submenu && Plugin.getSubmenuMode(submenu) === 'dropdown' ) {\r\n Plugin.hideSubmenuDropdowns();\r\n }\r\n },\r\n\r\n /**\r\n * Handles submenu dropdown close on link click\r\n * @returns {KTMenu}\r\n */\r\n handleSubmenuDropdownClose: function(e, el) {\r\n // exit if its not submenu dropdown mode\r\n if (Plugin.getSubmenuMode(el) === 'accordion') {\r\n return;\r\n }\r\n\r\n var shown = element.querySelectorAll('.kt-menu__item.kt-menu__item--submenu.kt-menu__item--hover:not(.kt-menu__item--tabs)');\r\n\r\n // check if currently clicked link's parent item ha\r\n if (shown.length > 0 && KTUtil.hasClass(el, 'kt-menu__toggle') === false && el.querySelectorAll('.kt-menu__toggle').length === 0) {\r\n // close opened dropdown menus\r\n for (var i = 0, len = shown.length; i < len; i++) {\r\n Plugin.hideSubmenuDropdown(shown[0], true);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * helper functions\r\n * @returns {KTMenu}\r\n */\r\n handleSubmenuAccordion: function(e, el) {\r\n var query;\r\n var item = el ? el : this;\r\n\r\n if ( Plugin.getSubmenuMode(el) === 'dropdown' && (query = item.closest('.kt-menu__item') ) ) {\r\n if (query.getAttribute('data-ktmenu-submenu-mode') != 'accordion' ) {\r\n e.preventDefault();\r\n return;\r\n }\r\n }\r\n\r\n var li = item.closest('.kt-menu__item');\r\n var submenu = KTUtil.child(li, '.kt-menu__submenu, .kt-menu__inner');\r\n\r\n if (KTUtil.hasClass(item.closest('.kt-menu__item'), 'kt-menu__item--open-always')) {\r\n return;\r\n }\r\n\r\n if ( li && submenu ) {\r\n e.preventDefault();\r\n var speed = the.options.accordion.slideSpeed;\r\n var hasClosables = false;\r\n\r\n if ( KTUtil.hasClass(li, 'kt-menu__item--open') === false ) {\r\n // hide other accordions\r\n if ( the.options.accordion.expandAll === false ) {\r\n var subnav = item.closest('.kt-menu__nav, .kt-menu__subnav');\r\n var closables = KTUtil.children(subnav, '.kt-menu__item.kt-menu__item--open.kt-menu__item--submenu:not(.kt-menu__item--here):not(.kt-menu__item--open-always)');\r\n\r\n if ( subnav && closables ) {\r\n for (var i = 0, len = closables.length; i < len; i++) {\r\n var el_ = closables[0];\r\n var submenu_ = KTUtil.child(el_, '.kt-menu__submenu');\r\n if ( submenu_ ) {\r\n KTUtil.slideUp(submenu_, speed, function() {\r\n Plugin.scrollUpdate();\r\n KTUtil.removeClass(el_, 'kt-menu__item--open');\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n KTUtil.slideDown(submenu, speed, function() {\r\n Plugin.scrollToItem(item);\r\n Plugin.scrollUpdate();\r\n\r\n Plugin.eventTrigger('submenuToggle', submenu, e);\r\n });\r\n\r\n KTUtil.addClass(li, 'kt-menu__item--open');\r\n\r\n } else {\r\n KTUtil.slideUp(submenu, speed, function() {\r\n Plugin.scrollToItem(item);\r\n Plugin.eventTrigger('submenuToggle', submenu, e);\r\n });\r\n\r\n KTUtil.removeClass(li, 'kt-menu__item--open');\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * scroll to item function\r\n * @returns {KTMenu}\r\n */\r\n scrollToItem: function(item) {\r\n // handle auto scroll for accordion submenus\r\n if ( KTUtil.isInResponsiveRange('desktop') && the.options.accordion.autoScroll && element.getAttribute('data-ktmenu-scroll') !== '1' ) {\r\n KTUtil.scrollTo(item, the.options.accordion.autoScrollSpeed);\r\n }\r\n },\r\n\r\n /**\r\n * Hide submenu dropdown\r\n * @returns {KTMenu}\r\n */\r\n hideSubmenuDropdown: function(item, classAlso) {\r\n // remove submenu activation class\r\n if ( classAlso ) {\r\n KTUtil.removeClass(item, 'kt-menu__item--hover');\r\n KTUtil.removeClass(item, 'kt-menu__item--active-tab');\r\n }\r\n\r\n // clear timeout\r\n item.removeAttribute('data-hover');\r\n\r\n if ( item.getAttribute('data-ktmenu-dropdown-toggle-class') ) {\r\n KTUtil.removeClass(body, item.getAttribute('data-ktmenu-dropdown-toggle-class'));\r\n }\r\n\r\n var timeout = item.getAttribute('data-timeout');\r\n item.removeAttribute('data-timeout');\r\n clearTimeout(timeout);\r\n },\r\n\r\n /**\r\n * Hide submenu dropdowns\r\n * @returns {KTMenu}\r\n */\r\n hideSubmenuDropdowns: function() {\r\n var items;\r\n if ( items = element.querySelectorAll('.kt-menu__item--submenu.kt-menu__item--hover:not(.kt-menu__item--tabs):not([data-ktmenu-submenu-toggle=\"tab\"])') ) {\r\n for (var j = 0, cnt = items.length; j < cnt; j++) {\r\n Plugin.hideSubmenuDropdown(items[j], true);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * helper functions\r\n * @returns {KTMenu}\r\n */\r\n showSubmenuDropdown: function(item) {\r\n // close active submenus\r\n var list = element.querySelectorAll('.kt-menu__item--submenu.kt-menu__item--hover, .kt-menu__item--submenu.kt-menu__item--active-tab');\r\n\r\n if ( list ) {\r\n for (var i = 0, len = list.length; i < len; i++) {\r\n var el = list[i];\r\n if ( item !== el && el.contains(item) === false && item.contains(el) === false ) {\r\n Plugin.hideSubmenuDropdown(el, true);\r\n }\r\n }\r\n }\r\n\r\n // add submenu activation class\r\n KTUtil.addClass(item, 'kt-menu__item--hover');\r\n\r\n if ( item.getAttribute('data-ktmenu-dropdown-toggle-class') ) {\r\n KTUtil.addClass(body, item.getAttribute('data-ktmenu-dropdown-toggle-class'));\r\n }\r\n },\r\n\r\n /**\r\n * Handles submenu slide toggle\r\n * @returns {KTMenu}\r\n */\r\n createSubmenuDropdownClickDropoff: function(el) {\r\n var query;\r\n var zIndex = (query = KTUtil.child(el, '.kt-menu__submenu') ? KTUtil.css(query, 'z-index') : 0) - 1;\r\n\r\n var dropoff = document.createElement('<div class=\"kt-menu__dropoff\" style=\"background: transparent; position: fixed; top: 0; bottom: 0; left: 0; right: 0; z-index: ' + zIndex + '\"></div>');\r\n\r\n body.appendChild(dropoff);\r\n\r\n KTUtil.addEvent(dropoff, 'click', function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n KTUtil.remove(this);\r\n Plugin.hideSubmenuDropdown(el, true);\r\n });\r\n },\r\n\r\n /**\r\n * Handles submenu hover toggle\r\n * @returns {KTMenu}\r\n */\r\n pauseDropdownHover: function(time) {\r\n var date = new Date();\r\n\r\n the.pauseDropdownHoverTime = date.getTime() + time;\r\n },\r\n\r\n /**\r\n * Handles submenu hover toggle\r\n * @returns {KTMenu}\r\n */\r\n resumeDropdownHover: function() {\r\n var date = new Date();\r\n\r\n return (date.getTime() > the.pauseDropdownHoverTime ? true : false);\r\n },\r\n\r\n /**\r\n * Reset menu's current active item\r\n * @returns {KTMenu}\r\n */\r\n resetActiveItem: function(item) {\r\n var list;\r\n var parents;\r\n\r\n list = element.querySelectorAll('.kt-menu__item--active');\r\n\r\n for (var i = 0, len = list.length; i < len; i++) {\r\n var el = list[0];\r\n KTUtil.removeClass(el, 'kt-menu__item--active');\r\n KTUtil.hide( KTUtil.child(el, '.kt-menu__submenu') );\r\n parents = KTUtil.parents(el, '.kt-menu__item--submenu') || [];\r\n\r\n for (var i_ = 0, len_ = parents.length; i_ < len_; i_++) {\r\n var el_ = parents[i];\r\n KTUtil.removeClass(el_, 'kt-menu__item--open');\r\n KTUtil.hide( KTUtil.child(el_, '.kt-menu__submenu') );\r\n }\r\n }\r\n\r\n // close open submenus\r\n if ( the.options.accordion.expandAll === false ) {\r\n if ( list = element.querySelectorAll('.kt-menu__item--open') ) {\r\n for (var i = 0, len = list.length; i < len; i++) {\r\n KTUtil.removeClass(parents[0], 'kt-menu__item--open');\r\n }\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Sets menu's active item\r\n * @returns {KTMenu}\r\n */\r\n setActiveItem: function(item) {\r\n // reset current active item\r\n Plugin.resetActiveItem();\r\n\r\n var parents = KTUtil.parents(item, '.kt-menu__item--submenu') || [];\r\n for (var i = 0, len = parents.length; i < len; i++) {\r\n KTUtil.addClass(KTUtil.get(parents[i]), 'kt-menu__item--open');\r\n }\r\n\r\n KTUtil.addClass(KTUtil.get(item), 'kt-menu__item--active');\r\n },\r\n\r\n /**\r\n * Returns page breadcrumbs for the menu's active item\r\n * @returns {KTMenu}\r\n */\r\n getBreadcrumbs: function(item) {\r\n var query;\r\n var breadcrumbs = [];\r\n var link = KTUtil.child(item, '.kt-menu__link');\r\n\r\n breadcrumbs.push({\r\n text: (query = KTUtil.child(link, '.kt-menu__link-text') ? query.innerHTML : ''),\r\n title: link.getAttribute('title'),\r\n href: link.getAttribute('href')\r\n });\r\n\r\n var parents = KTUtil.parents(item, '.kt-menu__item--submenu');\r\n for (var i = 0, len = parents.length; i < len; i++) {\r\n var submenuLink = KTUtil.child(parents[i], '.kt-menu__link');\r\n\r\n breadcrumbs.push({\r\n text: (query = KTUtil.child(submenuLink, '.kt-menu__link-text') ? query.innerHTML : ''),\r\n title: submenuLink.getAttribute('title'),\r\n href: submenuLink.getAttribute('href')\r\n });\r\n }\r\n\r\n return breadcrumbs.reverse();\r\n },\r\n\r\n /**\r\n * Returns page title for the menu's active item\r\n * @returns {KTMenu}\r\n */\r\n getPageTitle: function(item) {\r\n var query;\r\n\r\n return (query = KTUtil.child(item, '.kt-menu__link-text') ? query.innerHTML : '');\r\n },\r\n\r\n /**\r\n * Trigger events\r\n */\r\n eventTrigger: function(name, target, e) {\r\n for (var i = 0; i < the.events.length; i++ ) {\r\n var event = the.events[i];\r\n if ( event.name == name ) {\r\n if ( event.one == true ) {\r\n if ( event.fired == false ) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, target, e);\r\n }\r\n } else {\r\n return event.handler.call(this, target, e);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n },\r\n\r\n removeEvent: function(name) {\r\n if (the.events[name]) {\r\n delete the.events[name];\r\n }\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options\r\n */\r\n\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Update scroll\r\n */\r\n the.scrollUpdate = function() {\r\n return Plugin.scrollUpdate();\r\n };\r\n\r\n /**\r\n * Re-init scroll\r\n */\r\n the.scrollReInit = function() {\r\n return Plugin.scrollInit();\r\n };\r\n\r\n /**\r\n * Scroll top\r\n */\r\n the.scrollTop = function() {\r\n return Plugin.scrollTop();\r\n };\r\n\r\n /**\r\n * Set active menu item\r\n */\r\n the.setActiveItem = function(item) {\r\n return Plugin.setActiveItem(item);\r\n };\r\n\r\n the.reload = function() {\r\n return Plugin.reload();\r\n };\r\n\r\n the.update = function(options) {\r\n return Plugin.update(options);\r\n };\r\n\r\n /**\r\n * Set breadcrumb for menu item\r\n */\r\n the.getBreadcrumbs = function(item) {\r\n return Plugin.getBreadcrumbs(item);\r\n };\r\n\r\n /**\r\n * Set page title for menu item\r\n */\r\n the.getPageTitle = function(item) {\r\n return Plugin.getPageTitle(item);\r\n };\r\n\r\n /**\r\n * Get submenu mode\r\n */\r\n the.getSubmenuMode = function(el) {\r\n return Plugin.getSubmenuMode(el);\r\n };\r\n\r\n /**\r\n * Hide dropdown\r\n * @returns {Object}\r\n */\r\n the.hideDropdown = function(item) {\r\n Plugin.hideSubmenuDropdown(item, true);\r\n };\r\n\r\n /**\r\n * Hide dropdowns\r\n * @returns {Object}\r\n */\r\n the.hideDropdowns = function() {\r\n Plugin.hideSubmenuDropdowns();\r\n };\r\n\r\n /**\r\n * Disable menu for given time\r\n * @returns {Object}\r\n */\r\n the.pauseDropdownHover = function(time) {\r\n Plugin.pauseDropdownHover(time);\r\n };\r\n\r\n /**\r\n * Disable menu for given time\r\n * @returns {Object}\r\n */\r\n the.resumeDropdownHover = function() {\r\n return Plugin.resumeDropdownHover();\r\n };\r\n\r\n /**\r\n * Register event\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n the.off = function(name) {\r\n return Plugin.removeEvent(name);\r\n };\r\n\r\n the.one = function(name, handler) {\r\n return Plugin.addEvent(name, handler, true);\r\n };\r\n\r\n ///////////////////////////////\r\n // ** Plugin Construction ** //\r\n ///////////////////////////////\r\n\r\n // Run plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n // Handle plugin on window resize\r\n KTUtil.addResizeHandler(function() {\r\n if (init) {\r\n the.reload();\r\n }\r\n });\r\n\r\n // Init done\r\n init = true;\r\n\r\n // Return plugin instance\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTMenu;\r\n}\r\n\r\n// Plugin global lazy initialization\r\ndocument.addEventListener(\"click\", function (e) {\r\n var body = KTUtil.get('body');\r\n var query;\r\n if ( query = body.querySelectorAll('.kt-menu__nav .kt-menu__item.kt-menu__item--submenu.kt-menu__item--hover:not(.kt-menu__item--tabs)[data-ktmenu-submenu-toggle=\"click\"]') ) {\r\n for (var i = 0, len = query.length; i < len; i++) {\r\n var element = query[i].closest('.kt-menu__nav').parentNode;\r\n\r\n if ( element ) {\r\n var the = KTUtil.data(element).get('menu');\r\n\r\n if ( !the ) {\r\n break;\r\n }\r\n\r\n if ( !the || the.getSubmenuMode() !== 'dropdown' ) {\r\n break;\r\n }\r\n\r\n if ( e.target !== element && element.contains(e.target) === false ) {\r\n the.hideDropdowns();\r\n }\r\n }\r\n }\r\n }\r\n});\r\n\r\nexport default KTMenu;\r\n","/* eslint-disable no-script-url,jsx-a11y/anchor-is-valid,no-loop-func,no-undef,no-restricted-globals,strict,no-unused-vars,no-cond-assign,eqeqeq,no-throw-literal,no-unreachable,no-useless-escape,no-redeclare,no-useless-concat,no-unused-expressions,no-sequences */\r\nimport KTUtil from \"./util\";\r\n\r\n\"use strict\";\r\n\r\n// plugin setup\r\nvar KTToggle = function(elementId, options) {\r\n // Main object\r\n var the = this;\r\n var init = false;\r\n\r\n // Get element object\r\n var element = KTUtil.get(elementId);\r\n var body = KTUtil.get('body'); \r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n // Default options\r\n var defaultOptions = {\r\n togglerState: '',\r\n targetState: ''\r\n }; \r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n /**\r\n * Construct\r\n */\r\n\r\n construct: function(options) {\r\n if (KTUtil.data(element).has('toggle')) {\r\n the = KTUtil.data(element).get('toggle');\r\n } else {\r\n // reset menu\r\n Plugin.init(options);\r\n\r\n // build menu\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('toggle', the);\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Handles subtoggle click toggle\r\n */\r\n init: function(options) {\r\n the.element = element;\r\n the.events = [];\r\n\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n\r\n the.target = KTUtil.get(the.options.target);\r\n the.targetState = the.options.targetState;\r\n the.togglerState = the.options.togglerState;\r\n\r\n the.state = KTUtil.hasClasses(the.target, the.targetState) ? 'on' : 'off';\r\n },\r\n\r\n /**\r\n * Setup toggle\r\n */\r\n build: function() {\r\n KTUtil.addEvent(element, 'mouseup', Plugin.toggle);\r\n },\r\n \r\n /**\r\n * Handles offcanvas click toggle\r\n */\r\n toggle: function(e) {\r\n Plugin.eventTrigger('beforeToggle');\r\n\r\n if (the.state == 'off') {\r\n Plugin.toggleOn();\r\n } else {\r\n Plugin.toggleOff();\r\n }\r\n\r\n Plugin.eventTrigger('afterToggle');\r\n\r\n e.preventDefault();\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Handles toggle click toggle\r\n */\r\n toggleOn: function() {\r\n Plugin.eventTrigger('beforeOn');\r\n\r\n KTUtil.addClass(the.target, the.targetState);\r\n\r\n if (the.togglerState) {\r\n KTUtil.addClass(element, the.togglerState);\r\n }\r\n\r\n the.state = 'on';\r\n\r\n Plugin.eventTrigger('afterOn');\r\n\r\n Plugin.eventTrigger('toggle');\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Handles toggle click toggle\r\n */\r\n toggleOff: function() {\r\n Plugin.eventTrigger('beforeOff');\r\n\r\n KTUtil.removeClass(the.target, the.targetState);\r\n\r\n if (the.togglerState) {\r\n KTUtil.removeClass(element, the.togglerState);\r\n }\r\n\r\n the.state = 'off';\r\n\r\n Plugin.eventTrigger('afterOff');\r\n\r\n Plugin.eventTrigger('toggle');\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Trigger events\r\n */\r\n eventTrigger: function(name) {\r\n for (var i = 0; i < the.events.length; i++) {\r\n var event = the.events[i];\r\n\r\n if (event.name == name) {\r\n if (event.one == true) {\r\n if (event.fired == false) {\r\n the.events[i].fired = true; \r\n return event.handler.call(this, the);\r\n }\r\n } else {\r\n return event.handler.call(this, the);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n\r\n return the;\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options \r\n */\r\n\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Get toggle state \r\n */\r\n the.getState = function() {\r\n return the.state;\r\n };\r\n\r\n /**\r\n * Toggle \r\n */\r\n the.toggle = function() {\r\n return Plugin.toggle();\r\n };\r\n\r\n /**\r\n * Toggle on \r\n */\r\n the.toggleOn = function() {\r\n return Plugin.toggleOn();\r\n };\r\n\r\n /**\r\n * Toggle off \r\n */\r\n the.toggleOff = function() {\r\n return Plugin.toggleOff();\r\n };\r\n\r\n /**\r\n * Attach event\r\n * @returns {KTToggle}\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n /**\r\n * Attach event that will be fired once\r\n * @returns {KTToggle}\r\n */\r\n the.one = function(name, handler) {\r\n return Plugin.addEvent(name, handler, true);\r\n };\r\n\r\n // Construct plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTToggle;\r\n}\r\n\r\nexport default KTToggle;\r\n","import { put, takeLatest, takeEvery, all, select } from \"redux-saga/effects\";\r\nimport axios from \"axios\";\r\nimport { toast } from \"react-toastify\";\r\nimport isCached from \"../../components/Cache\";\r\n\r\nexport const BASE_URL = process.env.REACT_APP_APIIP + \"/admin\";\r\n\r\nconst cache = (state) => state.admin.cache;\r\n\r\nexport const actionTypes = {\r\n // Init actiontypes to build reference data \r\n SET_INITIAL: \"SET_INITIAL\",\r\n SET_CACHE: \"SET_CACHE\",\r\n SET_INTERESTED : \"SET_INTERESTED\",\r\n FETCH_HELPITEMS: \"FETCH_HELPITEMS\",\r\n FETCH_RESOURCEITEMS: \"FETCH_RESOURCEITEMS\",\r\n\r\n SET_MEDICALPRACTICES : \"SET_MEDICALPRACTICES\",\r\n FETCH_MEDICALPRACTICES : \"FETCH_MEDICALPRACTICES\",\r\n PUT_MEDICALPRACTICE : \"PUT_MEDICALPRACTICE\",\r\n\r\n SET_MEDICALPRACTITIONERS : \"SET_MEDICALPRACTITIONERS\",\r\n FETCH_MEDICALPRACTITIONERS : \"FETCH_MEDICALPRACTITIONERS\",\r\n PUT_MEDICALPRACTITIONER : \"PUT_MEDICALPRACTITIONER\",\r\n FETCH_SOURCE : \"FETCH_SOURCE\",\r\n\r\n FETCH_CLIENTFUTUREBOOKINGSTATUS : \"FETCH_CLIENTFUTUREBOOKINGSTATUS\",\r\n SET_CLIENTFUTUREBOOKINGSTATUS : \"SET_CLIENTFUTUREBOOKINGSTATUS\",\r\n\r\n FETCH_INTERESTED : \"FETCH_INTERESTED\",\r\n PUT_INTERESTED : \"PUT_INTERESTED\",\r\n FETCH_REGISTERED : \"FETCH_REGISTERED\",\r\n SET_REGISTERED : \"SET_REGISTERED\",\r\n FETCH_CLIENTREGISTERED : \"FETCH_CLIENTREGISTERED\",\r\n SET_CLIENTREGISTERED : \"SET_CLIENTREGISTERED\",\r\n \r\n FETCH_OPPORTUNITIES: \"FETCH_OPPORTUNITIES\",\r\n SET_OPPORTUNITIES : \"SET_OPPORTUNITIES\",\r\n PUT_OPPORTUNITY: \"PUT_OPPORTUNITY\",\r\n\r\n FETCH_REFERRALSVIEW : \"FETCH_REFERRALSVIEW\",\r\n FETCH_REFERRALS : \"FETCH_REFERRALS\",\r\n SET_REFERRALS : \"SET_REFERRALS\",\r\n PUT_REFERRAL : \"PUT_REFERRAL\",\r\n PUT_REFERRALSTATUS : \"PUT_REFERRALSTATUS\",\r\n FETCH_FAXES : \"FETCH_FAXES\",\r\n SET_FAXES : \"SET_FAXES\",\r\n FETCH_FAXPDF : \"FETCH_FAXPDF\",\r\n SET_FAXPDF : \"SET_FAXPDF\",\r\n FETCH_INTENT : \"FETCH_INTENT\",\r\n SET_INTENT : \"SET_INTENT\",\r\n PUT_CARD : \"PUT_CARD\",\r\n PUT_CLIENT_FLAG: \"PUT_CLIENT_FLAG\",\r\n PUT_FAX_FLAG : \"PUT_FAX_FLAG\",\r\n PUT_INTERESTEDPROVIDER_FLAG : \"PUT_INTERESTEDPROVIDER_FLAG\",\r\n PUT_CLIENTINVITE_FLAG : \"PUT_CLIENTINVITE_FLAG\",\r\n PUT_FAX_CLIENTNAME : \"PUT_FAX_CLIENTNAME\",\r\n PUT_CLIENT_TASKFLAG: \"PUT_CLIENT_TASKFLAG\",\r\n\r\n PUT_ARCHIVECLIENT : \"PUT_ARCHIVECLIENT\",\r\n\r\n PUT_INVOICESTATUS : \"PUT_INVOICESTATUS\",\r\n SEND_PSYCHOLOGISTREFERRAL : \"SEND_PSYCHOLOGISTREFERRAL\",\r\n\r\n SEND_PSYCHOLOGISTINVITE: \"SEND_PSYCHOLOGISTINVITE\",\r\n POST_PSYCHOLOGISTINVITE: \"POST_PSYCHOLOGISTINVITE\",\r\n DEL_PSYCHOLOGISTINVITE: \"DEL_PSYCHOLOGISTINVITE\",\r\n PUT_PSYCHOLOGISTDATA : \"PUT_PSYCHOLOGISTDATA\",\r\n POST_PSYCHOLOGISTDATA : \"POST_PSYCHOLOGISTDATA\",\r\n PUT_APIKEY : \"PUT_APIKEY\",\r\n\r\n POST_CLIENTINVITE: \"POST_CLIENTINVITE\",\r\n PUT_CLIENTINVITE: \"PUT_CLIENTINVITE\",\r\n SEND_CLIENTINVITE: \"SEND_CLIENTINVITE\",\r\n SEND_CLIENTINVITEREMINDER: \"SEND_CLIENTINVITEREMINDER\",\r\n SEND_SENDCALLUNSUCCESSFULREMINDER: \"SEND_SENDCALLUNSUCCESSFULREMINDER\",\r\n DEL_CLIENTINVITE: \"DEL_CLIENTINVITE\",\r\n FETCH_CLIENTINVITES : \"FETCH_CLIENTINVITES\",\r\n FETCH_CLIENTS : \"FETCH_CLIENTS\",\r\n FETCH_CLIENT : \"FETCH_CLIENT\",\r\n SET_CLIENTINVITES : \"SET_CLIENTINVITES\",\r\n SET_CLIENTS : \"SET_CLIENTS\",\r\n PUT_CLIENT : \"PUT_CLIENT\",\r\n CLEAR_CLIENT : \"CLEAR_CLIENT\",\r\n PUT_CLIENTDATA : \"PUT_CLIENTDATA\",\r\n POST_CLIENTDATA : \"POST_CLIENTDATA\",\r\n PUT_CLIENTPSYCHOLOGIST: \"PUT_CLIENTPSYCHOLOGIST\",\r\n\r\n FETCH_PAYMENTAPI: \"FETCH_PAYMENTAPI\",\r\n SET_PAYMENTAPI: \"SET_PAYMENTAPI\",\r\n\r\n FETCH_NOTES : \"FETCH_NOTES\",\r\n SET_NOTES : \"SET_NOTES\",\r\n POST_NOTE : \"POST_NOTE\",\r\n POST_CLIENTNOTE : \"POST_CLIENTNOTE\",\r\n\r\n FETCH_TODOS: \"FETCH_TODOS\",\r\n PUT_TODO: \"PUT_TODO\",\r\n\r\n FETCH_FILES : \"FETCH_FILES\",\r\n SET_FILES : \"SET_FILES\",\r\n POST_FILE : \"POST_FILE\",\r\n DELETE_FILE : \"DELETE_FILE\",\r\n SET_CLIENTVIEWABLEFLAG : \"SET_CLIENTVIEWABLEFLAG\",\r\n\r\n FETCH_REFERRERS : \"FETCH_REFERRERS\",\r\n SET_REFERRERS : \"SET_REFERRERS\",\r\n PUT_REFERRER : \"PUT_REFERRER\",\r\n\r\n CHG_BULKBILLINGAVAILABILITY: \"CHG_BULKBILLINGAVAILABILITY\",\r\n ADD_AVAILABILITY : \"ADD_AVAILABILITY\",\r\n CHG_AVAILABILITY : \"CHG_AVAILABILITY\",\r\n DEL_AVAILABILITY : \"DEL_AVAILABILITY\",\r\n SET_AVAILABILITY : \"SET_AVAILABILITY\",\r\n FETCH_AVAILABILITY : \"FETCH_AVAILABILITY\",\r\n FETCH_BOOKINGS : \"FETCH_BOOKINGS\",\r\n SET_BOOKINGS : \"SET_BOOKINGS\",\r\n FETCH_MATCHING : \"FETCH_MATCHING\",\r\n SET_MATCHING : \"SET_MATCHING\",\r\n FETCH_MATCHINGAVAILABILITY : \"FETCH_MATCHINGAVAILABILITY\",\r\n SET_MATCHINGAVAILABILITY : \"SET_MATCHINGAVAILABILITY\",\r\n CHG_PROVIDERAOI : \"CHG_PROVIDERAOI\",\r\n\r\n FETCH_BOOKING: \"FETCH_BOOKING\",\r\n SET_BOOKING: \"SET_BOOKING\",\r\n ADD_BOOKING : \"ADD_BOOKING\",\r\n PUT_BOOKING : \"PUT_BOOKING\",\r\n // BOOKING_REMINDER : \"BOOKING_REMINDER\", \r\n\r\n // FETCH_COUNTER : \"FETCH_COUNTER\",\r\n // SET_COUNTER : \"SET_COUNTER\",\r\n\r\n PUT_XEROCONTACTLINK : \"PUT_XEROCONTACTLINK\",\r\n SET_XEROCONTACTLINK : \"SET_XEROCONTACTLINK\",\r\n PUT_XERONDISCONTACTLINK : \"PUT_XERONDISCONTACTLINK\",\r\n SET_XERONDISCONTACTLINK : \"SET_XERONDISCONTACTLINK\",\r\n PUT_BOOKINGBILLING : \"PUT_BOOKINGBILLING\",\r\n PUT_RHCPAID : \"PUT_RHCPAID\",\r\n\r\n FETCH_BILLABLE : \"FETCH_BILLABLE\",\r\n FETCH_BILLABLEALL : \"FETCH_BILLABLEALL\",\r\n FETCH_BILLABLECONTRACT : \"FETCH_BILLABLECONTRACT\",\r\n FETCH_BILLABLENTHQLDPHN : \"FETCH_BILLABLENTHQLDPHN\",\r\n FETCH_BILLABLENDIS : \"FETCH_BILLABLENDIS\",\r\n FETCH_BILLABLECONTRACTPROVIDER : \"FETCH_BILLABLECONTRACTPROVIDER\",\r\n FETCH_BILLABLENDISPROVIDER : \"FETCH_BILLABLENDISPROVIDER\",\r\n FETCH_SINGLEBILLABLE : \"FETCH_SINGLEBILLABLE\",\r\n SET_BILLABLE : \"SET_BILLABLE\",\r\n SET_BILLABLECONTRACT : \"SET_BILLABLECONTRACT\",\r\n SET_BILLABLENTHQLDPHN : \"SET_BILLABLENTHQLDPHN\",\r\n SET_BILLABLENDIS : \"SET_BILLABLENDIS\",\r\n SET_BILLABLECONTRACTPROVIDER : \"SET_BILLABLECONTRACTPROVIDER\",\r\n SET_BILLABLENDISPROVIDER : \"SET_BILLABLENDISPROVIDER\",\r\n SET_SINGLEBILLABLE : \"SET_SINGLEBILLABLE\",\r\n PUT_BILLABLEBOOKING : \"PUT_BILLABLEBOOKING\",\r\n CREATE_BILLABLEEMAILS : \"CREATE_BILLABLEEMAILS\",\r\n CREATE_INVOICES : \"CREATE_INVOICES\",\r\n CREATE_INVOICESCONTRACT : \"CREATE_INVOICESCONTRACT\",\r\n CREATE_INVOICESNTHQLDPHN : \"CREATE_INVOICESNTHQLDPHN\",\r\n CREATE_INVOICESNDIS : \"CREATE_INVOICESNDIS\",\r\n CREATE_INVOICESNDISPROVIDER : \"CREATE_INVOICESNDISPROVIDER\",\r\n CREATE_INVOICESCONTRACTPROVIDER : \"CREATE_INVOICESCONTRACTPROVIDER\",\r\n CREATE_PAYMENTS : \"CREATE_PAYMENTS\",\r\n FETCH_PAYMENTS : \"FETCH_PAYMENTS\",\r\n SET_PAYMENTS : \"SET_PAYMENTS\",\r\n\r\n FETCH_MEDIPASSINVOICES : \"FETCH_MEDIPASSINVOICES\",\r\n SET_MEDIPASSINVOICES : \"SET_MEDIPASSINVOICES\",\r\n FETCH_MEDIPASSCODES : \"FETCH_MEDIPASSCODES\",\r\n SET_MEDIPASSCODES : \"SET_MEDIPASSCODES\",\r\n FETCH_MEDIPASSBOOKINGDATES : \"FETCH_MEDIPASSBOOKINGDATES\",\r\n SET_MEDIPASSBOOKINGDATES : \"SET_MEDIPASSBOOKINGDATES\",\r\n PUT_MEDIPASSCODES : \"PUT_MEDIPASSCODES\",\r\n PUT_MEDIPASSINVOICES : \"PUT_MEDIPASSINVOICES\",\r\n\r\n FETCH_MEDIPASSCLIENTS : \"FETCH_MEDIPASSCLIENTS\",\r\n SET_MEDIPASSCLIENTS : \"SET_MEDIPASSCLIENTS\",\r\n\r\n FETCH_REPORT: \"FETCH_REPORT\",\r\n SET_REPORT: \"SET_REPORT\",\r\n SET_FILTERS: \"SET_FILTERS\",\r\n \r\n FETCH_TAGVALUES: \"FETCH_TAGVALUES\",\r\n PUT_TAGVALUES: 'PUT_TAGVALUES',\r\n FETCH_DASHBOARDNEWS: \"FETCH_DASHBOARDNEWS\",\r\n\r\n FETCH_BOOKINGTYPESTATISTICS : \"FETCH_BOOKINGTYPESTATISTICS\",\r\n SET_BOOKINGTYPESTATISTICS : \"FETCH_BOOKINGTYPESTATISTICS\",\r\n\r\n SET_DISPLAYINVITE: \"SET_DISPLAYINVITE\",\r\n CLEAR_DISPLAYINVITE: \"CLEAR_DISPLAYINVITE\",\r\n\r\n FETCH_INVOICELOG: \"FETCH_INVOICELOG\",\r\n SET_INVOICELOG: \"SET_INVOICELOG\",\r\n FETCH_CONTRACTS: \"FETCH_CONTRACTS\",\r\n SET_CONTRACTS: \"SET_CONTRACTS\",\r\n PUT_CONTRACT: \"PUT_CONTRACT\",\r\n FETCH_PROGRAMS: \"FETCH_PROGRAMS\",\r\n SET_PROGRAMS: \"SET_PROGRAMS\",\r\n PUT_PROGRAM: \"PUT_PROGRAM\",\r\n FETCH_SURVEYS: \"FETCH_SURVEYS\",\r\n SET_SURVEYS: \"SET_SURVEYS\",\r\n PUT_SURVEY: \"PUT_SURVEY\",\r\n\r\n PUT_FAXSTATUS: \"PUT_FAXSTATUS\",\r\n\r\n FETCH_BOOKINGBILLABLECSV : \"FETCH_BOOKINGBILLABLECSV\",\r\n SET_BOOKINGBILLABLECSV : \"SET_BOOKINGBILLABLECSV\",\r\n\r\n FETCH_POWERBIXLSX : \"FETCH_POWERBIXLSX\",\r\n SET_POWERBIXLSX : \"SET_POWERBIXLSX\",\r\n\r\n FETCH_ACTIVITYFEED : \"FETCH_ACTIVITYFEED\",\r\n SET_ACTIVITYFEED : \"SET_ACTIVITYFEED\",\r\n PUT_PROVIDERPASSWORD : \"PUT_PROVIDERPASSWORD\",\r\n FETCH_OPPORTUNITYFEED : \"FETCH_OPPORTUNITYFEED\",\r\n SET_OPPORTUNITYFEED : \"SET_OPPORTUNITYFEED\",\r\n PUT_OPPORTUNITYINTEREST : \"PUT_OPPORTUNITYINTEREST\",\r\n PUT_RESETINTERESTEDPROVIDERS : \"PUT_RESETINTERESTEDPROVIDERS\",\r\n\r\n SET_SEARCHRESULTS : \"SET_SEARCHRESULTS\",\r\n FETCH_SEARCHCLIENTDATA : \"FETCH_SEARCHCLIENTDATA\",\r\n SET_SEARCHBOOKINGRESULTS : \"SET_SEARCHBOOKINGRESULTS\",\r\n FETCH_SEARCHBOOKINGDATA : \"FETCH_SEARCHBOOKINGDATA\",\r\n \r\n INITALISE_INVITES : \"INITALISE_INVITES\",\r\n\r\n SET_BOOKINGSTATUS : \"SET_BOOKINGSTATUS\",\r\n SET_PROGRESS_STATUS : \"SET_PROGRESS_STATUS\",\r\n\r\n FETCH_STATISTICS : \"FETCH_STATISTICS\",\r\n SET_STATISTICS: \"SET_STATISTICS\",\r\n\r\n FETCH_BOOKINGBILLING : \"FETCH_BOOKINGBILLING\",\r\n SET_BOOKINGBILLING : \"SET_BOOKINGBILLING\",\r\n\r\n FETCH_ADMINUSER : \"FETCH_ADMINUSER\",\r\n SET_ADMINUSER: \"SET_ADMINUSER\",\r\n PUT_ADMINUSER: \"PUT_ADMINUSER\",\r\n FETCH_CLIENTSBYDAY : \"FETCH_CLIENTSBYDAY\",\r\n SET_CLIENTSBYDAY : \"SET_CLIENTSBYDAY\",\r\n FETCH_CLIENTSBYWEEK : \"FETCH_CLIENTSBYWEEK\",\r\n SET_CLIENTSBYWEEK : \"SET_CLIENTSBYWEEK\",\r\n FETCH_CLIENTREGISTRATIONSBYDAY : \"FETCH_CLIENTREGISTRATIONSBYDAY\",\r\n SET_CLIENTREGISTRATIONSBYDAY : \"SET_CLIENTREGISTRATIONSBYDAY\",\r\n FETCH_PROVIDERPROGRAMBIO: \"FETCH_PROVIDERPROGRAMBIO\",\r\n SET_PROVIDERPROGRAMBIO: \"SET_PROVIDERPROGRAMBIO\",\r\n PUT_PROVIDERPROGRAMBIO: \"PUT_PROVIDERPROGRAMBIO\",\r\n FETCH_PROVIDERBOOKINGAPPROVAL : \"FETCH_PROVIDERBOOKINGAPPROVAL\",\r\n SET_PROVIDERBOOKINGAPPROVAL : \"SET_PROVIDERBOOKINGAPPROVAL\",\r\n PUT_PROVIDERBOOKINGAPPROVAL : \"PUT_PROVIDERBOOKINGAPPROVAL\",\r\n PUT_APPROVEBOOKING: \"PUT_APPROVEBOOKING\",\r\n PUT_RHCINVOICEDBOOKING: \"PUT_RHCINVOICEDBOOKING\",\r\n PUT_BOOKINGNOTE: \"PUT_BOOKINGNOTE\",\r\n FETCH_NTHQLDPHNSTATISTICS : \"FETCH_NTHQLDPHNSTATISTICS\",\r\n FETCH_NTHQLDPHNISSUES : \"FETCH_NTHQLDPHNISSUES\",\r\n FETCH_NTHQLDPHNDETAILS : \"FETCH_NTHQLDPHNDETAILS\",\r\n SET_NTHQLDPHNSTATISTICS : \"SET_NTHQLDPHNSTATISTICS\",\r\n SET_NTHQLDPHNISSUES : \"SET_NTHQLDPHNISSUES\",\r\n SET_NTHQLDPHNDETAILS : \"SET_NTHQLDPHNDETAILS\",\r\n FETCH_PROVIDERSTATISTICS : \"FETCH_PROVIDERSTATISTICS\",\r\n SET_PROVIDERSTATISTICS : \"SET_PROVIDERSTATISTICS\",\r\n};\r\n\r\nconst initialState = {\r\n cache: {},\r\n progressStatus: { },\r\n MedicalPractices: { Psychologist: [], GeneralPractitioner: [], All: [] },\r\n AdminUser: { id: 0 },\r\n BookingTypeStatistics: '',\r\n Booking: {\r\n psychologistfullname: '',\r\n clientfullname: '',\r\n psychologistDate: '', \r\n clientDate: '',\r\n waitingroomurl: '',\r\n message: '',\r\n clientID: 0,\r\n status: ''\r\n },\r\n BookingBilling: [],\r\n Source: [],\r\n MedicalPractitioners: [],\r\n InterestedPsychologists: [],\r\n RegisteredPsychologists: [],\r\n ClientRegisteredPsychologists: [],\r\n Referrals: [],\r\n ReferralsView: [],\r\n Faxes: [],\r\n ClientInvites: [],\r\n ActivityFeed: [],\r\n OpportunityFeed: [],\r\n Clients: [],\r\n Client: { id: 0 },\r\n ClientFutureBookingStatus : false,\r\n ClientsByDay: [],\r\n ClientsByWeek: [],\r\n ClientRegistrationsByDay: [],\r\n Contracts: [],\r\n Programs: [],\r\n Surveys: [],\r\n ProgramProviderBio: '',\r\n Notes: { Client: [], Referral: [], Psychologist: [], Medicalpractitioner: [], Medicalpractice: [] },\r\n Files: { Client: [], ClientRegistration: [], Referral: [], Psychologist: [] },\r\n ToDos: [],\r\n Availability: [],\r\n SearchResults: [],\r\n SearchBookingResults: [],\r\n Bookings: [],\r\n Matching: [],\r\n MedipassInvoices: [],\r\n MedipassCodes: [],\r\n MedipassProviderClients: [],\r\n MedipassBookingDates: [],\r\n MatchingAvailability: [],\r\n BillableIntents: [],\r\n BillableIntentsAll: [],\r\n BillableIntentContracts: [],\r\n BillableIntentNthQLDPHN: [],\r\n BillableIntentNDIS: [],\r\n BillableIntentContractsProvider: [],\r\n BillableIntentNDISProvider: [],\r\n BillableSingleIntents: [],\r\n ProviderBookingApproval: [],\r\n NthQLDPHNStatistics: [],\r\n ProviderStatistics: [],\r\n NthQLDPHNIssues: [],\r\n NthQLDPHNDetails: [],\r\n Payments: [],\r\n XeroLinkFailures: [],\r\n XeroNDISLinkFailures: [],\r\n Opportunities: [],\r\n FaxPDF: '',\r\n Intent: '',\r\n PaymentAPI: '',\r\n Cancellations: [],\r\n DisplayInvite: null,\r\n Referrers : [],\r\n FAXCounter : false,\r\n SMSCounter : false,\r\n Reports: { DashboardMetrics: {} },\r\n HelpItems: [],\r\n ResourceItems: [],\r\n DashboardNews: [],\r\n InvoiceLog: [],\r\n Statistics: [],\r\n TagValues: { \r\n Fax: [],\r\n Psychologist: [],\r\n GP: [],\r\n Financial_Counsellor: [],\r\n Client: [],\r\n Client_Registration: [],\r\n Booking: [],\r\n Invoice: [],\r\n },\r\n Filters: { \r\n bookingPhase: 'Future',\r\n bookingPaymentType: 'All',\r\n bookingValidationStatus: 'All',\r\n clientsListLoadClientID: undefined,\r\n clientsList: [],\r\n clientsTerm: '', \r\n clientsPsychologist: 'All',\r\n clientsColour: 'All',\r\n clientsContract: 'All',\r\n clientsFlags: 'All', \r\n clientsAOI: 'All', \r\n clientsStatus: 'Active',\r\n clientsType: 'All',\r\n clientsReferrer: '',\r\n clientsSpecialisationType: 'All',\r\n clientRegistrationSort: 'NextAvailable',\r\n faxTerm:'',\r\n registeredTerm: '', \r\n registeredProviderType: 'All',\r\n registeredStatus: 'Active',\r\n registeredAOI: 'All',\r\n registeredInterest: 'All',\r\n registeredTherapy: 'All',\r\n invitesListLoadInviteID: undefined,\r\n invitedClientsTerm: '', \r\n invitedClientsStatus: 'All', \r\n invitedClientProviderType: 'All',\r\n invitedClientsReferrer: undefined,\r\n invitedClientsType : 'All',\r\n faxesStatus: 'All', \r\n interestedPsychologistsTerm: '', \r\n interestedPsychologistsStatus: 'All',\r\n interestedProviderType: 'All',\r\n opportunityStatus: 'Active',\r\n opportunityType: 'All',\r\n tagsTerm: '',\r\n referrersTerm: '',\r\n invoicelogTerm: '', \r\n invoicesPsychologist: undefined,\r\n todoStatus: 'Active',\r\n userListStatus: 'All',\r\n userListTerm: '',\r\n BookingBillableCSV: '',\r\n PowerBIXlsx: '',\r\n invoiceStatus: 'All',\r\n approvalStatus: 'All',\r\n rhcpaymentstatus: 'All',\r\n providerStatisticsStatus: 'All',\r\n providerStatisticsRecentBookings: 'All',\r\n searchClientData: '',\r\n searchBookingData: '',\r\n searchClientDataType: 'All',\r\n providerApprovalStatus: 'Incomplete',\r\n interestedPsychologistsType: 'All',\r\n registeredPsychologistsType: 'All',\r\n invoiceStartDate: new Date(new Date().getFullYear(), new Date().getMonth(), 1).toLocaleString(\"sv-SE\", {dateStyle: 'short',timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone}),\r\n invoiceEndDate: new Date(new Date().getFullYear(), new Date().getMonth() + 1, 0).toLocaleString(\"sv-SE\", {dateStyle: 'short',timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone}),\r\n geninvoiceStartDate: new Date(new Date().getFullYear(), new Date().getMonth()-1, 1).toLocaleString(\"sv-SE\", {dateStyle: 'short',timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone}),\r\n geninvoiceEndDate: new Date(new Date().getFullYear(), new Date().getMonth(), 0).toLocaleString(\"sv-SE\", {dateStyle: 'short',timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone}),\r\n clientInviteStartDate: new Date(new Date().getFullYear(), new Date().getMonth() - 4, 1).toLocaleString(\"sv-SE\", {dateStyle: 'short',timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone}),\r\n clientInviteEndDate: new Date(new Date().getFullYear(), new Date().getMonth() + 2, 0).toLocaleString(\"sv-SE\", {dateStyle: 'short',timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone}),\r\n }\r\n};\r\n\r\nexport function reducer(state = initialState, {type, ...action }) \r\n{\r\n switch (type) \r\n {\r\n case 'SET_CACHE': {\r\n return {\r\n ...state,\r\n cache: { ...state.cache, [action.payload.caller.type]: { payload: action.payload.caller.payload, resultCount: action.payload.count, timestamp: Date.now() } },\r\n }\r\n }\r\n case 'SET_PROGRESS_STATUS': {\r\n // console.log(action)\r\n return {\r\n ...state,\r\n progressStatus: { ...state.progressStatus, [action.payload.statusClientID]: { statusName: action.payload.statusName, statusValue: action.payload.statusValue } },\r\n }\r\n }\r\n case 'SET_REFERENCE': {\r\n return {\r\n ...state,\r\n [action.payload.referenceName]: action.payload.grid, \r\n };\r\n }\r\n case 'INITALISE_INVITES': {\r\n return {\r\n ...state,\r\n ClientInvites: [],\r\n }\r\n }\r\n case 'SET_REPORT': {\r\n return {\r\n ...state, Reports: {...state.Reports,\r\n [action.payload.reportname]: action.payload.data, \r\n }\r\n };\r\n }\r\n case 'SET_FILTERS': {\r\n // console.log(' *********** SET FILTERS ***********')\r\n // console.log(action.payload)\r\n return {\r\n ...state, Filters: {...state.Filters,\r\n [action.payload.filterName]: action.payload.filterValue, \r\n }\r\n };\r\n }\r\n case 'SET_BOOKINGBILLABLECSV': {\r\n return{\r\n ...state, BookingBillableCSV: action.payload\r\n }\r\n }\r\n case 'SET_NTHQLDPHNSTATISTICS': {\r\n return{\r\n ...state, NthQLDPHNStatistics: action.payload\r\n }\r\n }\r\n case 'SET_NTHQLDPHNISSUES': {\r\n return{ \r\n ...state, NthQLDPHNIssues: action.payload\r\n }\r\n }\r\n case 'SET_NTHQLDPHNDETAILS': {\r\n return{ \r\n ...state, NthQLDPHNDetails: action.payload\r\n }\r\n }\r\n case 'SET_PROVIDERSTATISTICS': {\r\n return{\r\n ...state, ProviderStatistics: action.payload\r\n }\r\n }\r\n case 'SET_POWERBIXLSX': {\r\n return{\r\n ...state, PowerBIXlsx: action.payload\r\n }\r\n }\r\n case 'SET_MEDICALPRACTICES': {\r\n return {\r\n ...state, MedicalPractices: {\r\n ...state.MedicalPractices, [action.payload.type]: action.payload.data\r\n }\r\n };\r\n }\r\n case 'SET_SOURCE': {\r\n return {\r\n ...state,\r\n Source: action.payload\r\n }\r\n }\r\n case 'SET_CLIENTFUTUREBOOKINGSTATUS': {\r\n return {\r\n ...state,\r\n ClientFutureBookingStatus: action.payload,\r\n }\r\n }\r\n case 'SET_MEDICALPRACTIONERS': {\r\n return {\r\n ...state,\r\n MedicalPractitioners: action.payload, \r\n };\r\n }\r\n case 'SET_INTERESTED': {\r\n return {\r\n ...state,\r\n InterestedPsychologists: action.payload, \r\n };\r\n }\r\n case 'SET_BOOKINGTYPESTATISTICS' : {\r\n return {\r\n ...state,\r\n BookingTypeStatistics : action.payload,\r\n }\r\n }\r\n case 'SET_STATISTICS' : {\r\n return {\r\n ...state,\r\n Statistics : action.payload,\r\n }\r\n }\r\n case 'SET_CLIENTSBYDAY' : {\r\n return {\r\n ...state,\r\n ClientsByDay : action.payload,\r\n }\r\n }\r\n case 'SET_CLIENTREGISTRATIONSBYDAY' : {\r\n return {\r\n ...state,\r\n ClientRegistrationsByDay : action.payload,\r\n }\r\n }\r\n case 'SET_CLIENTSBYWEEK' : {\r\n return {\r\n ...state,\r\n ClientsByWeek : action.payload,\r\n }\r\n }\r\n case 'SET_REFERRERS' : {\r\n return {\r\n ...state,\r\n Referrers : action.payload,\r\n }\r\n }\r\n case 'SET_SEARCHRESULTS': {\r\n return {\r\n ...state,\r\n SearchResults: action.payload, \r\n };\r\n }\r\n case 'SET_SEARCHBOOKINGRESULTS': {\r\n return {\r\n ...state,\r\n SearchBookingResults: action.payload, \r\n };\r\n }\r\n case 'SET_REGISTERED': {\r\n return {\r\n ...state,\r\n RegisteredPsychologists: action.payload, \r\n };\r\n }\r\n case 'SET_CLIENTREGISTERED': {\r\n return {\r\n ...state,\r\n ClientRegisteredPsychologists: action.payload, \r\n };\r\n }\r\n case 'SET_REFERRALSVIEW': {\r\n return {\r\n ...state,\r\n ReferralsView: action.payload, \r\n };\r\n }\r\n case 'SET_REFERRALS': {\r\n return {\r\n ...state,\r\n Referrals: action.payload, \r\n };\r\n }\r\n case 'SET_FAXES': {\r\n return {\r\n ...state,\r\n Faxes: action.payload, \r\n };\r\n }\r\n case 'SET_FAXPDF': {\r\n return {\r\n ...state,\r\n FaxPDF: action.payload.faxBlob, \r\n };\r\n }\r\n case 'SET_CLIENTINVITES': {\r\n return {\r\n ...state,\r\n ClientInvites: action.payload, \r\n };\r\n }\r\n case 'SET_CLIENTS': {\r\n return {\r\n ...state,\r\n Clients: action.payload, \r\n };\r\n }\r\n case 'SET_CLIENT': {\r\n return {\r\n ...state,\r\n Client: action.payload, \r\n };\r\n }\r\n case 'SET_ADMINUSER': {\r\n return {\r\n ...state,\r\n AdminUser: action.payload, \r\n };\r\n }\r\n case 'SET_NOTES': {\r\n return {\r\n ...state,\r\n Notes: {...state.Notes, [action.payload.type]: action.payload.retData }, \r\n };\r\n }\r\n case 'SET_FILES': {\r\n return {\r\n ...state,\r\n Files: {...state.Files, [action.payload.type]: action.payload.retData }, \r\n };\r\n }\r\n case 'SET_TODOS': {\r\n return {\r\n ...state,\r\n ToDos: action.payload\r\n };\r\n } \r\n case 'SET_ACTIVITYFEED': {\r\n return {\r\n ...state,\r\n ActivityFeed: action.payload\r\n };\r\n } \r\n case 'SET_OPPORTUNITYFEED': {\r\n return {\r\n ...state,\r\n OpportunityFeed: action.payload\r\n };\r\n }\r\n case 'SET_AVAILABILITY': {\r\n return {\r\n ...state,\r\n Availability: action.payload, \r\n };\r\n }\r\n case 'SET_BOOKINGS': {\r\n return {\r\n ...state,\r\n Bookings: action.payload, \r\n };\r\n }\r\n case 'SET_BOOKINGBILLING': {\r\n return {\r\n ...state,\r\n BookingBilling: action.payload, \r\n };\r\n }\r\n case 'SET_MEDIPASSINVOICES': {\r\n return {\r\n ...state,\r\n MedipassInvoices: action.payload,\r\n };\r\n }\r\n case 'SET_MEDIPASSCODES': {\r\n return {\r\n ...state,\r\n MedipassCodes: action.payload,\r\n };\r\n }\r\n case 'SET_CONTRACTS': {\r\n return {\r\n ...state,\r\n Contracts: action.payload,\r\n };\r\n }\r\n case 'SET_PROGRAMS': {\r\n return {\r\n ...state,\r\n Programs: action.payload,\r\n }\r\n }\r\n case 'SET_SURVEYS': {\r\n return {\r\n ...state,\r\n Surveys: action.payload,\r\n }\r\n }\r\n case 'SET_OPPORTUNITIES':{\r\n return {\r\n ...state,\r\n Opportunities: action.payload,\r\n }\r\n }\r\n case 'SET_BOOKING': {\r\n return {\r\n ...state,\r\n Booking: action.payload,\r\n };\r\n }\r\n case 'SET_BOOKINGSTATUS': {\r\n return {\r\n ...state,\r\n Booking: {\r\n ...state,\r\n status : action.payload.status\r\n }\r\n };\r\n }\r\n case 'SET_MEDIPASSCLIENTS': {\r\n return {\r\n ...state,\r\n MedipassProviderClients: action.payload,\r\n };\r\n }\r\n case 'SET_MEDIPASSBOOKINGDATES': {\r\n return {\r\n ...state,\r\n MedipassBookingDates: action.payload,\r\n };\r\n }\r\n case 'SET_MATCHING': {\r\n return {\r\n ...state,\r\n Matching: action.payload,\r\n };\r\n }\r\n case 'SET_MATCHINGAVAILABILITY': {\r\n return {\r\n ...state,\r\n MatchingAvailability : action.payload, \r\n };\r\n }\r\n case 'SET_BILLABLE': {\r\n return {\r\n ...state,\r\n BillableIntents : action.payload, \r\n };\r\n }\r\n case 'SET_BILLABLEALL': {\r\n return {\r\n ...state,\r\n BillableIntentsAll : action.payload, \r\n };\r\n }\r\n case 'SET_BILLABLECONTRACT': {\r\n return {\r\n ...state,\r\n BillableIntentContracts : action.payload, \r\n };\r\n }\r\n case 'SET_BILLABLENTHQLDPHN': {\r\n return {\r\n ...state,\r\n BillableIntentNthQLDPHN : action.payload, \r\n };\r\n }\r\n case 'SET_BILLABLENDIS': {\r\n return {\r\n ...state,\r\n BillableIntentNDIS : action.payload, \r\n };\r\n }\r\n case 'SET_PROVIDERBOOKINGAPPROVAL': {\r\n return {\r\n ...state,\r\n ProviderBookingApproval : action.payload, \r\n };\r\n }\r\n case 'SET_BILLABLECONTRACTPROVIDER': {\r\n return {\r\n ...state,\r\n BillableIntentContractsProvider : action.payload, \r\n };\r\n }\r\n case 'SET_BILLABLENDISPROVIDER': {\r\n return {\r\n ...state,\r\n BillableIntentNDISProvider : action.payload, \r\n };\r\n }\r\n case 'SET_SINGLEBILLABLE': {\r\n return {\r\n ...state,\r\n BillableSingleIntents : action.payload, \r\n };\r\n }\r\n case 'SET_PAYMENTS': {\r\n return {\r\n ...state,\r\n Payments : action.payload, \r\n };\r\n }\r\n case 'SET_INTENT': {\r\n return {\r\n ...state,\r\n Intent : action.payload, \r\n };\r\n }\r\n case 'SET_XEROCONTACTLINK': {\r\n return {\r\n ...state,\r\n XeroLinkFailures : action.payload, \r\n };\r\n }\r\n case 'SET_XERONDISCONTACTLINK': {\r\n return {\r\n ...state,\r\n XeroNDISLinkFailures : action.payload, \r\n };\r\n }\r\n case 'SET_PAYMENTAPI': {\r\n return {\r\n ...state,\r\n PaymentAPI : action.payload, \r\n };\r\n }\r\n case 'SET_INVOICELOG': {\r\n return {\r\n ...state,\r\n InvoiceLog : action.payload, \r\n };\r\n }\r\n case 'SET_INITIAL': {\r\n return initialState;\r\n }\r\n // case 'SET_COUNTER': {\r\n // // console.log(action);\r\n // return {\r\n // ...state,\r\n // FAXCounter: action.payload.faxStatus, \r\n // SMSCounter: action.payload.smsStatus, \r\n // };\r\n // }\r\n case 'SET_TAGVALUES': {\r\n return {\r\n ...state,\r\n TagValues : {\r\n ...state.TagValues,\r\n [action.payload.context] : action.payload.tagValues\r\n }\r\n };\r\n }\r\n case 'SET_DISPLAYINVITE': {\r\n return {\r\n ...state, \r\n DisplayInvite : action.payload.id, \r\n };\r\n }\r\n case 'CLEAR_DISPLAYINVITE': {\r\n return {\r\n ...state, \r\n DisplayInvite : null, \r\n };\r\n }\r\n case 'CLEAR_CLIENT': {\r\n return {\r\n ...state, \r\n Client: { id: 0 }, \r\n };\r\n }\r\n case 'SET_PROVIDERPROGRAMBIO': {\r\n return {\r\n ...state,\r\n ProgramProviderBio : action.payload,\r\n }\r\n }\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\n// Fetches Below \r\n// export function* fetchCounter(action)\r\n// {\r\n// process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n// try \r\n// {\r\n// const newURL = BASE_URL + \"/counter\";\r\n// const response = yield axios.get(newURL);\r\n// if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n// {\r\n// yield put({ type: 'SET_COUNTER', payload: response.data[0]});\r\n// } \r\n// else // API completed with 200, however there is an error message\r\n// {\r\n// yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n// }\r\n// } \r\n// catch (error) // API call itself has errored out\r\n// {\r\n// yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n// }\r\n// }\r\n\r\nexport function* fetchStatistics(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/statistics\";\r\n const response = yield axios.get(newURL);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_STATISTICS', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchNthQLDPHNStatistics(action) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/nthqldphnstatistics\";\r\n const response = yield axios.get(newURL);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_NTHQLDPHNSTATISTICS', payload: response.data});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* fetchProviderStatistics(action) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/providerdashboardstatistics\";\r\n const response = yield axios.get(newURL);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n // Check to see if the response is a for a sinple provider or a list of providers\r\n if(response.data.length > 1)\r\n {\r\n yield put({ type: 'SET_PROVIDERSTATISTICS', payload: response.data});\r\n } else {\r\n yield put({ type: 'SET_PROVIDERSTATISTICS', payload: response.data[0]});\r\n }\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* fetchNthQLDPHNDetails(action) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/nthqldphndetails/\" + action.payload.lga + \"/\" + action.payload.contentType + \"/\" + action.payload.quarter + \"/\" + action.payload.month;\r\n const response = yield axios.get(newURL);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_NTHQLDPHNDETAILS', payload: response.data});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* fetchNthQLDPHNIssues(action) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/nthqldphnstatisticsissues\";\r\n const response = yield axios.get(newURL);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_NTHQLDPHNISSUES', payload: response.data});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* fetchBookingTypeStatistics(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/bookingtypestatistics\";\r\n const response = yield axios.get(newURL);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_BOOKINGTYPESTATISTICS', payload: response.data[0]});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchInvoiceLog(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/invoicelog\";\r\n const response = yield axios.get(newURL);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_INVOICELOG', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchContracts(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/contracts\";\r\n const response = yield axios.get(newURL);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_CONTRACTS', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchPrograms(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/programs\";\r\n const response = yield axios.get(newURL);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_PROGRAMS', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchSurveys(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/surveys\";\r\n const response = yield axios.get(newURL);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_SURVEYS', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchProviderProgramBio(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/providerprogrambio/\" + action.payload.programID;\r\n const response = yield axios.get(newURL);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_PROVIDERPROGRAMBIO', payload: response.data[0]});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchPayments(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/payments\";\r\n const response = yield axios.get(newURL);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_PAYMENTS', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchMedipassInvoices(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/medipassinvoices\";\r\n const response = yield axios.get(newURL);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_MEDIPASSINVOICES', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchMedipassCodes(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/medipasscodes\";\r\n const response = yield axios.get(newURL);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_MEDIPASSCODES', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchMedipassClients(action) {\r\n // let currentCache = yield select(cache);\r\n // if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/medipassclients\";\r\n const response = yield axios.get(newURL);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_MEDIPASSCLIENTS', payload: response.data});\r\n // yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n //}\r\n}\r\n\r\nexport function* fetchMedipassBookingDates(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/medipassbookingdates/\" + action.payload;\r\n const response = yield axios.get(newURL);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_MEDIPASSBOOKINGDATES', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchBillableIntents(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/billableintents\";\r\n const response = yield axios.put(newURL, action.payload);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_BILLABLE', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchBillableIntentsAll(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/billableintentsall\";\r\n const response = yield axios.put(newURL, action.payload);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_BILLABLEALL', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchPowerBIXlsx(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n yield put({ type: 'SET_POWERBIXLSX', payload: '' });\r\n const newURL = BASE_URL + \"/powerbixlsx\"\r\n const response = yield axios.get(newURL)\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(`ok saved: ${action.type}`);\r\n process.env.REACT_APP_DEBUG && console.log(response.data);\r\n yield put({ type: 'SET_POWERBIXLSX', payload: response.data[0].exportCSV });\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'SET_POWERBIXLSX', payload: '' });\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.returnStatus}`, Message : response.data.returnText } });\r\n } \r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'SET_POWERBIXLSX', payload: '' });\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchBookingBillableCSV(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n yield put({ type: 'SET_BOOKINGBILLABLECSV', payload: '' });\r\n const newURL = BASE_URL + \"/bookingbillableCSV\";\r\n const response = yield axios.put(newURL, action.payload);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(`ok saved: ${action.type}`);\r\n process.env.REACT_APP_DEBUG && console.log(response.data);\r\n yield put({ type: 'SET_BOOKINGBILLABLECSV', payload: response.data[0].exportCSV });\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.returnStatus}`, Message : response.data.returnText } });\r\n } \r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchBillableIntentsContract(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/billableintentscontract\";\r\n const response = yield axios.put(newURL, action.payload);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_BILLABLECONTRACT', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchBillableIntentsNthQLDPHN(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/billableintentsnthqldphn\";\r\n const response = yield axios.put(newURL, action.payload);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_BILLABLENTHQLDPHN', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchBillableIntentsNDIS(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/billableintentsndis\";\r\n const response = yield axios.put(newURL, action.payload);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_BILLABLENDIS', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchProviderBookingApproval(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/providerbookingapproval\";\r\n const response = yield axios.get(newURL)\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_PROVIDERBOOKINGAPPROVAL', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchBillableIntentsContractProvider(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/billableintentscontractprovider\";\r\n const response = yield axios.put(newURL, action.payload);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_BILLABLECONTRACTPROVIDER', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchBillableIntentsNDISProvider(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/billableintentsndisprovider\";\r\n const response = yield axios.put(newURL, action.payload);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_BILLABLENDISPROVIDER', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchSingleBillableIntents(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/singlebillableintents\";\r\n const response = yield axios.get(newURL);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_SINGLEBILLABLE', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchMedicalPractices(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/medicalpractices/\" + action.payload.type;\r\n const response = yield axios.get(newURL);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_MEDICALPRACTICES', payload: { type: action.payload.type, data: response.data }});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchSource(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + '/source'\r\n const response = yield axios.get(newURL)\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_SOURCE', payload: response.data})\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }})\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } })\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } })\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchMedicalPractitioners(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/medicalpractitioners\";\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if (response)\r\n {\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_MEDICALPRACTIONERS', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n }\r\n else\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n // console.log(response); \r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n // console.log(error);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchInterested(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/interested\";\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_INTERESTED', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchReferrers(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/referrers\";\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_REFERRERS', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchFaxes(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/inboundfaxes\";\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_FAXES', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n} \r\n\r\nexport function* fetchFaxPDF(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/faxpdf/\"+action.payload;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_FAXPDF', payload: response.data[0]});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchRegistered(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/registered\" ;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_REGISTERED', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchClientRegistered(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/clientregistered/\" + action.payload.providertype;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_CLIENTREGISTERED', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchClientFutureBookingStatus(action) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/clientfuturebookingstatus/\" + action.payload.providertype;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_CLIENTFUTUREBOOKINGSTATUS', payload: response.data});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* fetchReferrals(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/referrals\";\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_REFERRALS', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchClientsByDay(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/clientsbyday\";\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_CLIENTSBYDAY', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchClientRegistrationsByDay(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/clientregistrationsbyday\";\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_CLIENTREGISTRATIONSBYDAY', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchClientsByWeek(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/clientsbyweek\";\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_CLIENTSBYWEEK', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchReferralsView(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/referralsview/\" + action.payload.type + \"/\" + action.payload.id;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_REFERRALSVIEW', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchClientInvites(action) {\r\n // Disable caching as it causing issue with the global search (i.e. the record is in cache though not in REDUX - may need to review this later)\r\n // let currentCache = yield select(cache);\r\n // if (!isCached(currentCache, action) || (action.payload.clearcache && action.payload.clearcache === 'Y')) {\r\n try \r\n {\r\n console.log('Getting invite data')\r\n const newURL = BASE_URL + \"/clientinvites\";\r\n const response = yield axios.put(newURL, action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_CLIENTINVITES', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n // }\r\n}\r\n\r\nexport function* fetchClients(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/clients\";\r\n const response = yield axios.put(newURL, action.payload ? action.payload : { status: 'Active' });\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_CLIENTS', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n if(action.payload.progressStatusPayload)\r\n {\r\n yield put({ type: 'SET_PROGRESS_STATUS', payload: action.payload.progressStatusPayload});\r\n } \r\n } \r\n // else if(response.status !== 400) // API completed with 200, however there is an error message, ignoring 400 errors when not authorised\r\n else\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n // if(error.message.indexOf(\"Request failed with status code 400\") === -1)\r\n // {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n // }\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchClient(action) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/client/\" + action.payload.clientID + \"/\" + action.payload.type;\r\n const response = yield axios.get(newURL, action.payload ? action.payload : { tagValues: [] });\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_CLIENT', payload: response.data[0]});\r\n } \r\n // else if(response.status !== 400) // API completed with 200, however there is an error message, ignoring 400 errors when not authorised\r\n else\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n // if(error.message.indexOf(\"Request failed with status code 400\") === -1)\r\n // {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n // }\r\n }\r\n}\r\n\r\nexport function* fetchAdminUser(action) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/adminuser/\";\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_ADMINUSER', payload: response.data[0]});\r\n } \r\n // else if(response.status !== 400) // API completed with 200, however there is an error message, ignoring 400 errors when not authorised\r\n else\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n // if(error.message.indexOf(\"Request failed with status code 400\") === -1)\r\n // {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n // }\r\n }\r\n}\r\n\r\nexport function* fetchAvailability(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/availability/\" + action.payload.psychologistid + \"/\" + action.payload.userTZ;\r\n // *********************************************************************************************************\r\n // This is debug code to catch an undefined psychologistid being sent - 2021-06-15\r\n // *********************************************************************************************************\r\n if (action.payload.psychologistid)\r\n {\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_AVAILABILITY', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n }\r\n else\r\n {\r\n // ok custom error time \r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: Custom Error - Packet Not Sent, ReturnStatus: `, Message : 'URL sent: ' + newURL } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchBookingBilling(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n // console.log('Booking Billing')\r\n // console.log(action);\r\n const newURL = BASE_URL + \"/bookingbilling/\" + action.payload.clientID;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_BOOKINGBILLING', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'XExtra Debug' , Message: 'Raw: ' + JSON.stringify(action) } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'XExtra Debug' , Message: 'Raw: ' + JSON.stringify(action) } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchBookings(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/bookings/\" + action.payload.key + \"/\" + action.payload.id;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_BOOKINGS', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'XExtra Debug' , Message: 'Raw: ' + JSON.stringify(action) } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'XExtra Debug' , Message: 'Raw: ' + JSON.stringify(action) } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchBooking(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/booking/\" + action.payload.bookingid;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_BOOKING', payload: response.data[0]});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchMatching(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n //console.log(action.payload)\r\n const newURL = BASE_URL + \"/matching/\" + action.payload.providertype + \"/\" + action.payload.invite + \"/\" + action.payload.availabilitytype;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_MATCHING', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchMatchingAvailability(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/matchingavailability/\" + action.payload.psychologistID + \"/\" + action.payload.userTZ + \"/\" + action.payload.availabilityType + \"/\" + action.payload.invite;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_MATCHINGAVAILABILITY', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored with the psychologist of ' + action.payload.psychologistID + ' and timezone of ' + action.payload.userTZ, Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchIntent(action)\r\n{\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n try \r\n {\r\n // This is not ideal - to fetch the intent I need to send a few variables to the API - these need to be sent in the URL - all very message though GET cannot have body\r\n\r\n const intentVars = action.payload.referenceID + \"/\" + action.payload.name + \"/\" + action.payload.email + \"/\" + action.payload.mobile;\r\n const encodedVars = encodeURI(intentVars);\r\n const newURL = BASE_URL + \"/intent/\" + encodedVars;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_INTENT', payload: response.data.intentReference});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* fetchPaymentAPI(action)\r\n{\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n try \r\n {\r\n const newURL = BASE_URL + \"/paymentapi\";\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_PAYMENTAPI', payload: response.data});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n if (response.data.returnText === 'Tyro Authorisation Failure')\r\n {\r\n toast.error(`Action Failed: ${response.data.returnText}`);\r\n }\r\n else\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* fetchNotes(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/notes/\" + action.payload.type + \"/\" + action.payload.pkID;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_NOTES', payload: { type: action.payload.type, retData: response.data } });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchFiles(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/files/\" + action.payload.type + \"/\" + action.payload.pkID;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_FILES', payload: { type: action.payload.type, retData: response.data } });\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchToDos(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/todos/\" + action.payload.clientID;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_TODOS', payload: response.data });\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchActivityFeed(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/activityfeed\";\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(`${action.type}: ${newURL}`)\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_ACTIVITYFEED', payload: response.data });\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchOpportunityFeed(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/opportunityfeed\";\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(`${action.type}: ${newURL}`)\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_OPPORTUNITYFEED', payload: response.data });\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchOpportunities(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/opportunities\";\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(`${action.type}: ${newURL}`)\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_OPPORTUNITIES', payload: response.data });\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchResourceItems(action)\r\n{\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/resourceitems\";\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_REFERENCE', payload: { referenceName: 'ResourceItems', grid: response.data } });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchHelpItems(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/helpitems\";\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_REFERENCE', payload: { referenceName: 'HelpItems', grid: response.data } });\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchDashboardNews(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/dashboardnews\";\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_REFERENCE', payload: { referenceName: 'DashboardNews', grid: response.data } });\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchReport(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/report/\" + action.payload.reportname;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n if (response.data[0].result !== null)\r\n {\r\n if(action.payload.output === 'collection')\r\n {\r\n const switchDataType = (item) => {\r\n if (item.DataType === 'Numeric') {\r\n item.Value = parseFloat(item.Value)\r\n }\r\n return item.Value\r\n }\r\n yield put({ type: 'SET_REPORT', payload: { reportname: action.payload.reportname, data: JSON.parse(response.data[0].result).reduce((obj, item) => Object.assign(obj, { [item.Name]: switchDataType(item) }), {} ) }});\r\n }\r\n else\r\n { \r\n yield put({ type: 'SET_REPORT', payload: { reportname: action.payload.reportname, data: JSON.parse(response.data[0].result).map((item) => ({...item})) }});\r\n }\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n }\r\n else\r\n {\r\n console.log('Returned Null for ' + action.payload.reportname);\r\n }\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReportName: ${action.payload.reportname}, ReturnStatus: ${response.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, API call has errored, ReportName: ${action.payload.reportname}`, Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchTagValues(action) {\r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/tagvalues/\" + action.payload.context + \"/\" + action.payload.fkID;\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action) + ` - ${newURL}`);\r\n const response = yield axios.get(newURL); \r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(`ok saved: ${action.type}`);\r\n yield put({ type: 'SET_TAGVALUES', payload: { context: action.payload.context.replaceAll(\" \", \"\"), fkID: action.payload.fkID, tagValues: response.data } });\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Fetch Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n } \r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Fetch Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchSearchClientData(action) {\r\n // a put disguised as a fetch \r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) \r\n {\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/searchclientdata\"\r\n var response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n // toast.success(response.data.returnText,{ autoClose:5000 });\r\n yield put({ type: 'SET_SEARCHRESULTS', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Search Failed: ${response.data.returnText}`);\r\n yield put({ type: 'SET_SEARCHRESULTS', payload: []});\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Search Failed: \" + action.type);\r\n yield put({ type: 'SET_SEARCHRESULTS', payload: []});\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\nexport function* fetchSearchBookingData(action) {\r\n // a put disguised as a fetch \r\n let currentCache = yield select(cache);\r\n if(!isCached(currentCache, action)) \r\n {\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/searchbookingdata\"\r\n var response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n // toast.success(response.data.returnText,{ autoClose:5000 });\r\n yield put({ type: 'SET_SEARCHBOOKINGRESULTS', payload: response.data});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Search Failed: ${response.data.returnText}`);\r\n yield put({ type: 'SET_SEARCHBOOKINGRESULTS', payload: []});\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Search Failed: \" + action.type);\r\n yield put({ type: 'SET_SEARCHBOOKINGRESULTS', payload: []});\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n }\r\n}\r\n\r\n// Put's below \r\n\r\nexport function* putReferral(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/referral\"\r\n var response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n toast.success(response.data.returnText,{ autoClose:5000 });\r\n yield put({ type: 'FETCH_REFERRALSVIEW', payload: { type: action.payload.refresh.payload.type, id: action.payload.refresh.payload.id, popCache: true } });\r\n // yield put({ type: 'FETCH_REFERRALS'});\r\n yield put({ type: 'FETCH_MEDICALPRACTICES', payload: { type: 'GeneralPractitioner', popCache: true }});\r\n yield put({ type: 'FETCH_MEDICALPRACTITIONERS', payload: { popCache: true }});\r\n // yield put({ type: 'FETCH_CLIENTS'});\r\n // yield put({ type: 'FETCH_FAXES'});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putReferralStatus(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/referralstatus\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Status Saved\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_REFERRALSVIEW', payload: { type: action.payload.refresh.payload.type, id: action.payload.refresh.payload.id, popCache: true } });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'POST_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putOpportunityInterest(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/clientopportunityinterest\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Status Saved\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_OPPORTUNITYFEED', payload: { popCache: true } });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'POST_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putFaxStatus(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/faxstatus\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n // toast.success(\"Status Saved\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_FAXES', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'POST_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putClient(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/client\"\r\n var response = {}\r\n if (action.payload.id > 0) {\r\n response = yield axios.put(newURL,action.payload);\r\n } else {\r\n response = yield axios.post(newURL,action.payload);\r\n }\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved Client\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_MEDICALPRACTICES', payload: { type: 'GeneralPractitioner', popCache: true }});\r\n yield put({ type: 'FETCH_MEDICALPRACTITIONERS', payload: { popCache: true }});\r\n yield put({ type: 'FETCH_CLIENTS', payload: { popCache: true }});\r\n yield put({ type: 'FETCH_FAXES', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putMedipassCodes(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/medipasscodes\"\r\n var response = {}\r\n response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved Code\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_MEDIPASSCODES', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putContract(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/contract\"\r\n var response = {}\r\n response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved Contract\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_CONTRACTS', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putProgram(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/program\"\r\n var response = {}\r\n response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved Program\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_PROGRAMS', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putSurvey(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/survey\"\r\n var response = {}\r\n response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved Survey\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_SURVEYS', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putOpportunity(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/opportunity\"\r\n var response = {}\r\n response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved Opportunity\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_OPPORTUNITIES', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putProviderProgramBio(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/providerprogrambio\"\r\n var response = {}\r\n response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved Bio\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_PROVIDERPROGRAMBIO', payload: { programID: action.payload.id, popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putBookingBilling(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/bookingbilling\"\r\n var response = {}\r\n response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved Billing Details\",{ autoClose:5000 });\r\n // \r\n const filters = (state) => state.admin.Filters;\r\n const filterstate = yield select(filters)\r\n const startDate = filterstate.invoiceStartDate;\r\n const endDate = filterstate.invoiceEndDate;\r\n const billableStatus = filterstate.invoiceStatus;\r\n if (action.payload.refresh && action.payload.refresh === 'ALL') {\r\n yield put({ type: 'FETCH_BILLABLEALL', payload: { startDate: startDate, endDate: endDate, billableStatus: billableStatus, popCache: true }});\r\n } else {\r\n yield put({ type: 'FETCH_BILLABLE', payload: { startDate: startDate, endDate: endDate, billableStatus: billableStatus, popCache: true }});\r\n yield put({ type: 'FETCH_BILLABLECONTRACT', payload: { startDate: startDate, endDate: endDate, billableStatus: billableStatus, popCache: true }});\r\n yield put({ type: 'FETCH_BILLABLENTHQLDPHN', payload: { startDate: startDate, endDate: endDate, billableStatus: billableStatus, popCache: true }});\r\n yield put({ type: 'FETCH_BILLABLECONTRACTPROVIDER', payload: { startDate: startDate, endDate: endDate, billableStatus: billableStatus, popCache: true }});\r\n }\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putRHCPaid(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/bookingrhcpaid\"\r\n var response = {}\r\n response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved Billing Details\",{ autoClose:5000 });\r\n // \r\n yield put({ type: 'FETCH_SEARCHBOOKINGDATA', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putMedipassInvoices(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/medipassinvoices\"\r\n var response = {}\r\n response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved Code\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_MEDIPASSINVOICES', payload: { popCache: true } });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putInvoiceStatus(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/invoicestatus\"\r\n var response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_PAYMENTS', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putBillableEmails(action) {\r\n // **********************************\r\n // Not curently in use\r\n // **********************************\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/billableemails\"\r\n var response = yield axios.put(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Sent\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_BILLABLE', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Send Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Send Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* postNote(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/note\"\r\n var response = yield axios.post(newURL,action.payload.formData);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_NOTES', payload: { type: action.payload.formData.get('type'), pkID: action.payload.formData.get('pkid'), popCache: true} });\r\n yield put({ type: 'FETCH_FILES', payload: { type: action.payload.formData.get('type'), pkID: action.payload.formData.get('pkid'), popCache: true } });\r\n // yield put({ type: 'FETCH_COUNTER'});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n if (response.data.returnText && !(response.data.returnText.includes('is not a mobile number')))\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'Extra Debug' , Message: 'Type: ' + action.payload.formData.get('type') + ' Pkid: ' + action.payload.formData.get('pkid') } });\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'XExtra Debug' , Message: 'Raw: ' + JSON.stringify(Object.fromEntries(action.payload.formData)) } });\r\n }\r\n}\r\n\r\nexport function* postClientNote(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/clientnote\"\r\n var response = yield axios.post(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_NOTES', payload: { type: 'Client', pkID: action.payload.pkid, popCache: true } });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* postFile(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/files\"\r\n var response = yield axios.post(newURL,action.payload.formData);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_FILES', payload: { type: action.payload.type, pkID: action.payload.pkID, popCache: true } });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, API call has errored here is the payload ${action}`, Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* deleteFile(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/deletefile\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_FILES', payload: { type: action.payload.type, pkID: action.payload.pkID, popCache: true } });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* setClientViewableFlag(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/setClientViewableFlag\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_FILES', payload: { type: action.payload.type, pkID: action.payload.pkID, popCache: true } });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putCreateInvoices(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/createinvoices\"\r\n const response = yield axios.put(newURL, action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Invoices Sent to Xero\",{ autoClose:5000 });\r\n const filters = (state) => state.admin.Filters;\r\n const filterstate = yield select(filters)\r\n const startDate = filterstate.geninvoiceStartDate;\r\n const endDate = filterstate.geninvoiceEndDate;\r\n yield put({ type: 'FETCH_BILLABLE', payload: { startDate: startDate, endDate: endDate, status: 'Unbilled', popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Invoice Generation Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Invoice Generation Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putCreateInvoicesContract(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/createinvoicescontract\"\r\n const response = yield axios.put(newURL, action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Invoices Sent to Xero\",{ autoClose:5000 });\r\n const filters = (state) => state.admin.Filters;\r\n const filterstate = yield select(filters)\r\n const startDate = filterstate.geninvoiceStartDate;\r\n const endDate = filterstate.geninvoiceEndDate;\r\n yield put({ type: 'FETCH_BILLABLECONTRACT', payload: { startDate: startDate, endDate: endDate, status: 'Unbilled', popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Invoice Generation Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Invoice Generation Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putCreateInvoicesNthQLDPHN(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/createinvoicesnthqldphn\"\r\n const response = yield axios.put(newURL, action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Invoices Sent to Xero\",{ autoClose:5000 });\r\n const filters = (state) => state.admin.Filters;\r\n const filterstate = yield select(filters)\r\n const startDate = filterstate.geninvoiceStartDate;\r\n const endDate = filterstate.geninvoiceEndDate;\r\n yield put({ type: 'FETCH_BILLABLENTHQLDPHN', payload: { startDate: startDate, endDate: endDate, status: 'Unbilled', popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Invoice Generation Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Invoice Generation Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putCreateInvoicesNDIS(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/createinvoicesndis\"\r\n const response = yield axios.put(newURL, action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Invoices Sent to Xero\",{ autoClose:5000 });\r\n const filters = (state) => state.admin.Filters;\r\n const filterstate = yield select(filters)\r\n const startDate = filterstate.geninvoiceStartDate;\r\n const endDate = filterstate.geninvoiceEndDate;\r\n yield put({ type: 'FETCH_BILLABLENDIS', payload: { startDate: startDate, endDate: endDate, status: 'Unbilled', popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Invoice Generation Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Invoice Generation Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putCreateInvoicesNDISProvider(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/createpaymentsndisprovider\"\r\n const response = yield axios.put(newURL, action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Payments Sent to Xero\",{ autoClose:5000 });\r\n const filters = (state) => state.admin.Filters;\r\n const filterstate = yield select(filters)\r\n const startDate = filterstate.geninvoiceStartDate;\r\n const endDate = filterstate.geninvoiceEndDate;\r\n yield put({ type: 'FETCH_BILLABLENDISPROVIDER', payload: { startDate: startDate, endDate: endDate, status: 'Not Paid', popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Payment Invoice Generation Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Payment Invoice Generation Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putCreateInvoicesContractProvider(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/createpaymentscontractprovider\"\r\n const response = yield axios.put(newURL, action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Payments Sent to Xero\",{ autoClose:5000 });\r\n const filters = (state) => state.admin.Filters;\r\n const filterstate = yield select(filters)\r\n const startDate = filterstate.geninvoiceStartDate;\r\n const endDate = filterstate.geninvoiceEndDate;\r\n yield put({ type: 'FETCH_BILLABLECONTRACTPROVIDER', payload: { startDate: startDate, endDate: endDate, status: 'Not Paid', popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Payment Invoice Generation Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Payment Invoice Generation Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putXeroContactLink(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/xerocontactlink\"\r\n var response = yield axios.put(newURL,'');\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_XEROCONTACTLINK', payload: response.data });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putXeroNDISContactLink(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/xerondiscontactlink\"\r\n var response = yield axios.put(newURL,'');\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_XERONDISCONTACTLINK', payload: response.data });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putCreatePayments(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/createpayments\"\r\n var response = yield axios.put(newURL,'');\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Payments Created\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_PAYMENTS', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putMedicalPractitioner(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/medicalpractitioner\"\r\n // if id is real then put, otherwise post\r\n var response = {}\r\n if(action.payload.id > 0) \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('Put medicalpractitioner');\r\n response = yield axios.put(newURL,action.payload);\r\n } \r\n else \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('Post medicalpractitioner');\r\n response = yield axios.post(newURL,action.payload);\r\n }\r\n // Process response\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_MEDICALPRACTITIONERS', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n } \r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putMedicalPractice(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/medicalpractice\"\r\n // if id is real then put, otherwise post\r\n var response = {}\r\n if(action.payload.formData.get('id') > 0) {\r\n response = yield axios.put(newURL,action.payload.formData);\r\n } else {\r\n response = yield axios.post(newURL,action.payload.formData);\r\n }\r\n // Process response\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_MEDICALPRACTICES', payload: { type: 'All', popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n } \r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putInterestedStatus(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/interestedstatus\";\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_INTERESTED', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putApproveBooking(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/approvebooking\";\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Updated\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_PROVIDERBOOKINGAPPROVAL', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Update Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Update Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putRHCInvoicedBooking(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/rhcinvoicedbooking\";\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Updated\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_PROVIDERBOOKINGAPPROVAL', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Update Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Update Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putBookingNote(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/bookingnote\";\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Updated\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_PROVIDERBOOKINGAPPROVAL', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Update Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Update Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putPsychologistDetail(action) {\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n process.env.REACT_APP_DEBUG && console.log(...action.payload.formData);\r\n const newURL = BASE_URL + \"/psychologistdata\"\r\n const response = yield axios.put(newURL,action.payload.formData);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_REGISTERED', payload: { popCache: true } });\r\n yield put({ type: 'FETCH_MEDICALPRACTICES', payload: { type: 'Psychologist', popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* chgProviderAOI(action) {\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/chgprovideraoi\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_REGISTERED', payload: { popCache: true } });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* postPsychologistInvite(action) {\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/psychologistinvite\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Invite Sent\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_INTERESTED', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Invite Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Invite Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putReferrer(action) {\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/referrer\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Referrer Updated\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_REFERRERS', payload: {popCache: true} });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Invite Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Invite Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* deletePsychologistInvite(action) {\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/psychologistinvite/\" + action.payload;\r\n const response = yield axios.delete(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok deleted');\r\n toast.success(\"Deleted\",{ autoClose:5000 });\r\n // Currently not refetching on delete as calendar state should be able to handle delete and slot id not needed \r\n yield put({ type: 'FETCH_INTERESTED', payload: { popCache: true } });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* postPsychologistDetail(action) {\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/psychologistdata\"\r\n const response = yield axios.post(newURL,action.payload.formData);\r\n\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_REGISTERED', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* sendPsychologistReferral(action) {\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/sendpsychologistreferral\"\r\n const response = yield axios.post(newURL,action.payload);\r\n\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Referral Sent\",{ autoClose:5000 });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Referral Not Sent: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Referral Not Sent: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* sendPsychologistInvite(action) {\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/sendpsychologistinvite\"\r\n const response = yield axios.post(newURL,action.payload);\r\n\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Invite Sent\",{ autoClose:5000 });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Invite Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Invite Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* postClientInvite(action) {\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/clientinvite\"\r\n const response = yield axios.post(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n const filters = (state) => state.admin.Filters;\r\n const filterstate = yield select(filters)\r\n const startDate = filterstate.clientInviteStartDate;\r\n const endDate = filterstate.clientInviteEndDate;\r\n yield put({ type: 'FETCH_CLIENTINVITES', payload: { startDate: startDate, endDate: endDate, popCache: true}})\r\n yield put({ type: 'SET_DISPLAYINVITE', payload: { id : response.data.newID }});\r\n yield put({ type: 'FETCH_SOURCE', payload: { popCache: true}})\r\n if(action.payload.faxid > 0){\r\n yield put({ type: 'FETCH_FAXES', payload: { popCache: true }});\r\n }\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putClientInvite(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/clientinvite\";\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n const filters = (state) => state.admin.Filters;\r\n const filterstate = yield select(filters)\r\n const startDate = filterstate.clientInviteStartDate;\r\n const endDate = filterstate.clientInviteEndDate;\r\n yield put({ type: 'FETCH_CLIENTINVITES', payload: { startDate: startDate, endDate: endDate, popCache: true}})\r\n yield put({ type: 'FETCH_SOURCE', payload: { popCache: true}})\r\n if(action.payload.faxid > 0){\r\n yield put({ type: 'FETCH_FAXES', payload: { popCache: true }});\r\n }\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* sendClientInvite(action) {\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/sendclientinvite\"\r\n const response = yield axios.post(newURL,action.payload);\r\n\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Invite Sent\",{ autoClose:5000 });\r\n const filters = (state) => state.admin.Filters;\r\n const filterstate = yield select(filters)\r\n const startDate = filterstate.clientInviteStartDate;\r\n const endDate = filterstate.clientInviteEndDate;\r\n yield put({ type: 'FETCH_CLIENTINVITES', payload: { startDate: startDate, endDate: endDate, popCache: true}})\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Invite Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Invite Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* sendCallUnsuccessfulReminder(action) {\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/sendcallunsuccessfulreminder\"\r\n const response = yield axios.post(newURL,action.payload);\r\n\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Final Reminder Sent\",{ autoClose:5000 });\r\n const filters = (state) => state.admin.Filters;\r\n const filterstate = yield select(filters)\r\n const startDate = filterstate.clientInviteStartDate;\r\n const endDate = filterstate.clientInviteEndDate;\r\n yield put({ type: 'FETCH_CLIENTINVITES', payload: { startDate: startDate, endDate: endDate, popCache: true}})\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Final Reminder Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Final Reminder Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* sendClientInviteReminder(action) {\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/sendclientinvitereminder\"\r\n const response = yield axios.post(newURL,action.payload);\r\n\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Reminder Sent\",{ autoClose:5000 });\r\n const filters = (state) => state.admin.Filters;\r\n const filterstate = yield select(filters)\r\n const startDate = filterstate.clientInviteStartDate;\r\n const endDate = filterstate.clientInviteEndDate;\r\n yield put({ type: 'FETCH_CLIENTINVITES', payload: { startDate: startDate, endDate: endDate, popCache: true}})\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Reminder Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Reminder Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* deleteClientInvite(action) {\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/clientinvite/\" + action.payload;\r\n const response = yield axios.delete(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok deleted');\r\n toast.success(\"Deleted\",{ autoClose:5000 });\r\n const filters = (state) => state.admin.Filters;\r\n const filterstate = yield select(filters)\r\n const startDate = filterstate.clientInviteStartDate;\r\n const endDate = filterstate.clientInviteEndDate;\r\n yield put({ type: 'FETCH_CLIENTINVITES', payload: { startDate: startDate, endDate: endDate, popCache: true}})\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putClientDetail(action) {\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/clientdata\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n yield put({ type: 'SET_CLIENT', payload: initialState.Client });\r\n yield put({ type: 'FETCH_MEDICALPRACTICES', payload: { type: 'GeneralPractitioner', popCache: true }});\r\n yield put({ type: 'FETCH_MEDICALPRACTITIONERS', payload: { popCache: true }});\r\n yield put({ type: 'FETCH_CLIENTS', payload: { popCache: true }});\r\n yield put({ type: 'FETCH_SOURCE', payload: { popCache: true}})\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putAdminUser(action) {\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/adminuser\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_ADMINUSER', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* postClientDetail(action) {\r\n // Note this no longer used - clients cannot be added except via the registration process\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/clientdata\"\r\n const response = yield axios.post(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_CLIENTS', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putCard(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/card\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Card Saved\",{ autoClose:5000 });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putProviderPassword(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/providerpassword\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Password Updated\",{ autoClose:5000 });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(response.data.returnText);\r\n // Removed you got your original password wrong errors from being reported.\r\n // yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Password Update Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putApikey(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/apikey\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"APIKey Saved\",{ autoClose:5000 });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putClientTaskFlag(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/clienttaskflag\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n yield put({ type: 'FETCH_CLIENTS', payload: { popCache: true, type : action.payload.type, progressStatusPayload: { statusClientID: action.payload.id, statusName: action.payload.flagChange, statusValue: 'Complete' } }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putClientFlag(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/clientflag\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n yield put({ type: 'FETCH_CLIENTS', payload: { popCache: true, type : action.payload.type }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putInterestedProviderFlag(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/interestedproviderflag\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n yield put({ type: 'FETCH_INTERESTED', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putResetInterestedProviders(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/resetinterestedproviders\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n if (action.payload.type !== 'Admin') {\r\n yield put({ type: 'FETCH_CLIENT', payload: { popCache: true, clientID : action.payload.clientID, type : action.payload.type }});\r\n } else {\r\n yield put({ type: 'FETCH_OPPORTUNITIES', payload: { popCache: true }});\r\n }\r\n\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putArchiveClient(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/archiveclient\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n yield put({ type: 'FETCH_CLIENTS', payload: { popCache: true, status : action.payload.action }})\r\n yield put({ type: 'SET_FILTERS', payload: { filterName: 'clientsStatus', filterValue: action.payload.changetype }})\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Update Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Update Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putClientInviteFlag(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/clientinviteflag\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n const filters = (state) => state.admin.Filters;\r\n const filterstate = yield select(filters)\r\n const startDate = filterstate.clientInviteStartDate;\r\n const endDate = filterstate.clientInviteEndDate;\r\n yield put({ type: 'FETCH_CLIENTINVITES', payload: { startDate: startDate, endDate: endDate, popCache: true}})\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putFaxFlag(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/faxflag\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n yield put({ type: 'FETCH_FAXES', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putFaxClientName(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/faxclientname\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n yield put({ type: 'FETCH_FAXES', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putClientPsychologist(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/clientpsychologist\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Psychologist Selection Saved\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_CLIENTS', payload: { popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* postBooking(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/booking\"\r\n const response = yield axios.post(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Booking Saved\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_BOOKINGS', payload: { key: action.payload.refreshPayload.key, id: action.payload.refreshPayload.id, popCache: true } });\r\n // Determine which client list to retrieve may have come from the admin calendar\r\n if (action && action.payload && action.payload.refreshPayload.id && action.payload.refreshPayload.key === 'psychologist')\r\n {\r\n yield put({ type: 'FETCH_CLIENTS', payload: { status: 'Active', providerId: action.payload.refreshPayload.id, popCache: true }})\r\n }\r\n else\r\n {\r\n yield put({ type: 'FETCH_CLIENTS', payload: { popCache: true }}); \r\n }\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'POST_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* sendBookingReminder(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/bookingreminder\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Reminder Sent\",{ autoClose:5000 });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Reminder Not Sent: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Reminder Not Sent: \" + action.type);\r\n yield put({ type: 'POST_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putBooking(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/booking\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Booking Saved\",{ autoClose:5000 });\r\n // Note this call is also used by GatherBillable.js \r\n // Check if it was called by GatherBillable.js\r\n if (action.payload.refreshPayload.key === 'Billable')\r\n {\r\n toast.success(\"Booking Updated\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_BILLABLE', payload: { popCache: true } });\r\n }\r\n else\r\n {\r\n if (action.payload.refreshPayload.key === 'BillableSingle')\r\n {\r\n toast.success(\"Booking Updated\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_SINGLEBILLABLE', payload: { popCache: true } });\r\n }\r\n else\r\n {\r\n // It was called by one of the booking pages \r\n toast.success(\"Booking Saved\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_BOOKINGS', payload: { key: action.payload.refreshPayload.key, id: action.payload.refreshPayload.id, popCache: true } });\r\n if (action && action.payload && action.payload.refreshPayload.id && action.payload.refreshPayload.key === 'psychologist')\r\n {\r\n yield put({ type: 'FETCH_CLIENTS', payload: { status: 'Active', providerId: action.payload.refreshPayload.id, popCache: true }})\r\n }\r\n else\r\n {\r\n yield put({ type: 'FETCH_CLIENTS', payload: { popCache: true }}); \r\n }\r\n // Check to see if the booking needs to be loaded again \r\n if (action.payload.refreshPayload.bookingid)\r\n {\r\n yield put({ type: 'FETCH_BOOKING', payload: { bookingid: action.payload.refreshPayload.bookingid, popCache: true } });\r\n }\r\n }\r\n }\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'POST_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putBillableBooking(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/booking\"\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Booking Updated\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_SINGLEBILLABLE', payload : { popCache: true } });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'POST_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* postAvailability(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/availability\"\r\n const response = yield axios.post(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n yield put({ type: 'FETCH_AVAILABILITY', payload: {psychologistid: action.payload.mainID, userTZ: action.payload.userTZ, popCache: true }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'POST_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putAvailability(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/availability\";\r\n const response = yield axios.put(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Saved\",{ autoClose:5000 });\r\n // Kendo scheduler can be linked to state, so we refresh now... Old(Currently not refetching on change as calendar state should be able to handle change and slot id not needed )\r\n yield put({ type: 'FETCH_AVAILABILITY', payload: { psychologistid: action.payload.mainID, userTZ: action.payload.userTZ, popCache: true } });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* deleteAvailability(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/availability/\" + action.payload.slot;\r\n const response = yield axios.delete(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Deleted\",{ autoClose:5000 });\r\n // Currently not refetching on delete as calendar state should be able to handle delete and slot id not needed \r\n yield put({ type: 'FETCH_AVAILABILITY', payload: { psychologistid: action.payload.mainID, userTZ: action.payload.userTZ, popCache: true } });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* chgBulkBillingAvailability(action) {\r\n // ok lets update the server\r\n try \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n const newURL = BASE_URL + \"/bulkbillingavailability/\" + action.payload.id + \"/\" + action.payload.bulkBillingAvailability;\r\n process.env.REACT_APP_DEBUG && console.log(newURL);\r\n const response = yield axios.put(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n toast.success(\"Bulk billing availability updated.\",{ autoClose:5000 });\r\n // Currently not refetching on delete as calendar state should be able to handle delete and slot id not needed \r\n yield put({ type: 'FETCH_REGISTERED', payload: { popCache: true } });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Save Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(\"Save Failed: \" + action.type);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putToDo(action) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/todo/\"\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action) + ` - ${newURL}`);\r\n const response = yield axios.put(newURL, action.payload); \r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(`ok saved: ${action.type}`);\r\n process.env.REACT_APP_DEBUG && console.log(response.data);\r\n yield put({ type: 'FETCH_TODOS', payload: { clientID: action.payload.todo.clientID, popCache: true } });\r\n yield put({ type: 'FETCH_CLIENTS', payload: { tagValues: action.payload.tagValues, type: action.payload.clientType, popCache: true } });\r\n }\r\n else // API completed with 200, however there is an error message\r\n {\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putTagValues(action) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/tagvalues\";\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action) + ` - ${newURL}`);\r\n const response = yield axios.put(newURL, action.payload); \r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(`ok saved: ${action.type}`);\r\n yield put({ type: 'SET_TAGVALUES', payload: { context: action.payload.context, fkID: action.payload.fkID, tagValues: action.payload.tagValues, popCache: true } })\r\n switch(action.payload.context)\r\n {\r\n case 'Client': \r\n yield put({ type: 'FETCH_CLIENTS', payload: { popCache: true } })\r\n break\r\n default: \r\n }\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n } \r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putError(action) {\r\n process.env.REACT_APP_DEBUG && console.log('Saving Error content');\r\n // ok lets update the server\r\n try \r\n {\r\n const newURL = BASE_URL + \"/error\";\r\n const response = yield axios.post(newURL,action.payload);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n // Check response\r\n if (response.status === 200) \r\n {\r\n const retData = response;\r\n if (retData.data.returnStatus === 'Error') \r\n {\r\n // Report error\r\n // Note in this case as the error logging failed, the errors will be written to console \r\n console.log('error: Warning Cannot Save Error (Code - ' + retData.data.returnText + ')');\r\n }\r\n else \r\n {\r\n process.env.REACT_APP_DEBUG && console.log('ok saved');\r\n }\r\n } \r\n else \r\n {\r\n // Report error\r\n const retData = response;\r\n // Note in this case as the error logging failed, the errors will be written to console \r\n console.log('error: Warning Cannot Save Error (Code - ' + retData.data.returnText + ')');\r\n }\r\n } \r\n catch (error)\r\n {\r\n // Note in this case as the error logging failed, the errors will be written to console \r\n console.log('error: Warning Cannot Save Task Grid (Code - SVR)');\r\n console.log(error)\r\n }\r\n}\r\n\r\nexport const actions = {\r\n fetchMedicalPractices: (payload) => ({ type: actionTypes.FETCH_MEDICALPRACTICES, payload: payload }),\r\n fetchMedicalPractitioners: (payload) => ({ type: actionTypes.FETCH_MEDICALPRACTITIONERS, payload: payload }),\r\n fetchSource: (payload) => ({ type: actionTypes.FETCH_SOURCE, payload: payload }),\r\n fetchInterested: (payload) => ({ type: actionTypes.FETCH_INTERESTED, payload: payload }),\r\n fetchRegistered: (payload) => ({ type: actionTypes.FETCH_REGISTERED, payload: payload }),\r\n fetchClientRegistered: (payload) => ({ type: actionTypes.FETCH_CLIENTREGISTERED, payload: payload }),\r\n fetchReferralsView: (payload) => ({ type: actionTypes.FETCH_REFERRALSVIEW, payload : payload }),\r\n fetchReferrals: (payload) => ({ type: actionTypes.FETCH_REFERRALS, payload: payload }),\r\n fetchFaxes: (payload) => ({ type: actionTypes.FETCH_FAXES, payload: payload }),\r\n fetchClientInvites: (payload) => ({ type: actionTypes.FETCH_CLIENTINVITES, payload: payload }),\r\n fetchClients: (payload) => ({ type: actionTypes.FETCH_CLIENTS, payload: payload }),\r\n fetchClient: (payload) => ({ type: actionTypes.FETCH_CLIENT, payload: payload }),\r\n fetchAvailability: (payload) => ({ type: actionTypes.FETCH_AVAILABILITY, payload : payload }),\r\n fetchBookings: (payload) => ({ type: actionTypes.FETCH_BOOKINGS, payload : payload }),\r\n fetchBookingBilling: (payload) => ({ type: actionTypes.FETCH_BOOKINGBILLING, payload : payload }),\r\n fetchBooking: (payload) => ({ type: actionTypes.FETCH_BOOKING, payload : payload }),\r\n fetchMatching: (payload) => ({ type: actionTypes.FETCH_MATCHING, payload : payload }),\r\n fetchMatchingAvailability: (payload) => ({ type: actionTypes.FETCH_MATCHINGAVAILABILITY, payload : payload }),\r\n fetchFaxPDF: (payload) => ({ type: actionTypes.FETCH_FAXPDF, payload : payload }),\r\n fetchStripeIntent: (payload) => ({ type: actionTypes.FETCH_INTENT, payload : payload }),\r\n fetchPayments: (payload) => ({ type: actionTypes.FETCH_PAYMENTS, payload : payload }),\r\n fetchBillableIntents: (payload) => ({ type: actionTypes.FETCH_BILLABLE, payload : payload }),\r\n fetchBillableIntentsAll: (payload) => ({ type: actionTypes.FETCH_BILLABLEALL, payload : payload }),\r\n fetchBillableIntentsContract: (payload) => ({ type: actionTypes.FETCH_BILLABLECONTRACT, payload : payload }),\r\n fetchBillableIntentsNthQLDPHN: (payload) => ({ type: actionTypes.FETCH_BILLABLENTHQLDPHN, payload : payload }),\r\n fetchBillableIntentsNDIS: (payload) => ({ type: actionTypes.FETCH_BILLABLENDIS, payload : payload }),\r\n fetchBillableIntentsContractProvider: (payload) => ({ type: actionTypes.FETCH_BILLABLECONTRACTPROVIDER, payload : payload }),\r\n fetchBillableIntentsNDISProvider: (payload) => ({ type: actionTypes.FETCH_BILLABLENDISPROVIDER, payload : payload }),\r\n fetchSingleBillable: (payload) => ({ type: actionTypes.FETCH_SINGLEBILLABLE, payload: payload }),\r\n fetchNotes: (payload) => ({ type: actionTypes.FETCH_NOTES, payload : payload }),\r\n fetchFiles: (payload) => ({ type: actionTypes.FETCH_FILES, payload : payload }),\r\n fetchPaymentAPI: (payload) => ({ type: actionTypes.FETCH_PAYMENTAPI, payload : payload }),\r\n fetchMedipassInvoices: (payload) => ({ type: actionTypes.FETCH_MEDIPASSINVOICES, payload: payload }),\r\n fetchMedipassCodes: (payload) => ({ type: actionTypes.FETCH_MEDIPASSCODES, payload: payload }),\r\n fetchMedipassClients: (payload) => ({ type: actionTypes.FETCH_MEDIPASSCLIENTS, payload: payload }),\r\n fetchMedipassBookingDates: (payload) => ({ type: actionTypes.FETCH_MEDIPASSBOOKINGDATES, payload : payload }),\r\n fetchToDos: (payload) => ({ type: actionTypes.FETCH_TODOS, payload : payload }),\r\n fetchResourceItems: (payload) => ({ type: actionTypes.FETCH_RESOURCEITEMS, payload : payload }),\r\n fetchHelpItems: (payload) => ({ type: actionTypes.FETCH_HELPITEMS, payload: payload }),\r\n fetchDashboardNews: (payload) => ({ type: actionTypes.FETCH_DASHBOARDNEWS, payload: payload }),\r\n fetchReferrers: (payload) => ({ type: actionTypes.FETCH_REFERRERS, payload: payload }),\r\n fetchBookingTypeStatistics: (payload) => ({ type: actionTypes.FETCH_BOOKINGTYPESTATISTICS, payload: payload }),\r\n fetchClientFutureBookingStatus: (payload) => ({ type: actionTypes.FETCH_CLIENTFUTUREBOOKINGSTATUS, payload: payload }),\r\n searchClientData: (payload) => ({ type: actionTypes.FETCH_SEARCHCLIENTDATA, payload: payload }),\r\n searchBookingData: (payload) => ({ type: actionTypes.FETCH_SEARCHBOOKINGDATA, payload: payload }),\r\n initialiseInvites: (payload) => ({ type: actionTypes.INITALISE_INVITES, payload: payload }), \r\n fetchOpportunities: (payload) => ({ type: actionTypes.FETCH_OPPORTUNITIES, payload: payload }),\r\n putOpportunity: (payload) => ({ type: actionTypes.PUT_OPPORTUNITY, payload: payload }),\r\n\r\n postClientInvite: (payload) => ({ type: actionTypes.POST_CLIENTINVITE, payload : payload }),\r\n putClientInvite: (payload) => ({ type: actionTypes.PUT_CLIENTINVITE, payload : payload }),\r\n sendClientInvite: (payload) => ({ type: actionTypes.SEND_CLIENTINVITE, payload : payload }),\r\n sendClientInviteReminder: (payload) => ({ type: actionTypes.SEND_CLIENTINVITEREMINDER, payload : payload }),\r\n sendCallUnsuccessfulReminder: (payload) => ({ type: actionTypes.SEND_SENDCALLUNSUCCESSFULREMINDER, payload : payload }),\r\n deleteClientInvite: (payload) => ({ type: actionTypes.DEL_CLIENTINVITE, payload : payload }),\r\n putReferral: (payload) => ({ type: actionTypes.PUT_REFERRAL, payload : payload }),\r\n putReferralStatus: (payload) => ({ type: actionTypes.PUT_REFERRALSTATUS, payload : payload }),\r\n putClient: (payload) => ({ type: actionTypes.PUT_CLIENT, payload : payload }),\r\n putMedicalPractitioner: (payload) => ({ type: actionTypes.PUT_MEDICALPRACTITIONER, payload : payload }),\r\n putMedicalPractice: (payload) => ({ type: actionTypes.PUT_MEDICALPRACTICE, payload : payload }),\r\n postNote: (payload) => ({ type: actionTypes.POST_NOTE, payload : payload }),\r\n postClientNote: (payload) => ({ type: actionTypes.POST_CLIENTNOTE, payload : payload }),\r\n postFile: (payload) => ({ type: actionTypes.POST_FILE, payload : payload }),\r\n deleteFile: (payload) => ({ type: actionTypes.DELETE_FILE, payload : payload }),\r\n setFileClientViewableFlag: (payload) => ({ type: actionTypes.SET_CLIENTVIEWABLEFLAG, payload : payload }),\r\n putClientTaskFlag: (payload) => ({ type: actionTypes.PUT_CLIENT_TASKFLAG, payload : payload }),\r\n putClientFlag: (payload) => ({ type: actionTypes.PUT_CLIENT_FLAG, payload : payload }),\r\n putClientInviteFlag: (payload) => ({ type: actionTypes.PUT_CLIENTINVITE_FLAG, payload : payload }),\r\n putFaxFlag: (payload) => ({ type: actionTypes.PUT_FAX_FLAG, payload : payload }),\r\n putInterestedProviderFlag: (payload) => ({ type: actionTypes.PUT_INTERESTEDPROVIDER_FLAG, payload : payload }),\r\n putFaxClientName: (payload) => ({ type: actionTypes.PUT_FAX_CLIENTNAME, payload : payload }),\r\n putClientArchive: (payload) => ({ type: actionTypes.PUT_ARCHIVECLIENT, payload : payload }),\r\n putReferrer: (payload) => ({ type: actionTypes.PUT_REFERRER, payload : payload }),\r\n putToDo: (payload) => ({ type: actionTypes.PUT_TODO, payload: payload }),\r\n fetchBookingBillableCSV: (payload) => ({ type: actionTypes.FETCH_BOOKINGBILLABLECSV, payload: payload }),\r\n fetchPowerBIXlsx: (payload) => ({ type: actionTypes.FETCH_POWERBIXLSX, payload: payload }),\r\n\r\n putCard: (payload) => ({ type: actionTypes.PUT_CARD, payload : payload }),\r\n sendPsychologistReferral: (payload) => ({ type: actionTypes.SEND_PSYCHOLOGISTREFERRAL, payload : payload }),\r\n putInvoiceStatus: (payload) => ({ type: actionTypes.PUT_INVOICESTATUS, payload : payload }),\r\n changeInterestedStatus: (payload) => ({ type: actionTypes.PUT_INTERESTED, payload: payload }),\r\n\r\n sendPsychologistInvite: (payload) => ({ type: actionTypes.SEND_PSYCHOLOGISTINVITE, payload : payload }),\r\n postPsychologistInvite: (payload) => ({ type: actionTypes.POST_PSYCHOLOGISTINVITE, payload : payload }),\r\n deletePsychologistInvite: (payload) => ({ type: actionTypes.DEL_PSYCHOLOGISTINVITE, payload : payload }),\r\n putPsychologistDetail: (payload) => ({ type: actionTypes.PUT_PSYCHOLOGISTDATA, payload : payload }),\r\n postPsychologistDetail: (payload) => ({ type: actionTypes.POST_PSYCHOLOGISTDATA, payload : payload }),\r\n putClientDetail: (payload) => ({ type: actionTypes.PUT_CLIENTDATA, payload : payload }),\r\n postClientDetail: (payload) => ({ type: actionTypes.POST_CLIENTDATA, payload : payload }),\r\n putClientPsychologist: (payload) => ({ type: actionTypes.PUT_CLIENTPSYCHOLOGIST, payload : payload }),\r\n putAPIKey: (payload) => ({ type: actionTypes.PUT_APIKEY, payload : payload }),\r\n putMedipassCode: (payload) => ({ type: actionTypes.PUT_MEDIPASSCODES, payload : payload }),\r\n putMedipassInvoice: (payload) => ({ type: actionTypes.PUT_MEDIPASSINVOICES, payload : payload }),\r\n putFaxStatus: (payload) => ({ type: actionTypes.PUT_FAXSTATUS, payload : payload }),\r\n \r\n addAvailability: (payload) => ({ type: actionTypes.ADD_AVAILABILITY, payload : payload }),\r\n chgAvailability: (payload) => ({ type: actionTypes.CHG_AVAILABILITY, payload : payload }),\r\n delAvailability: (payload) => ({ type: actionTypes.DEL_AVAILABILITY, payload : payload }),\r\n chgBulkBillingAvailability: (payload) => ({ type: actionTypes.CHG_BULKBILLINGAVAILABILITY, payload: payload }),\r\n chgProviderAOI: (payload) => ({ type: actionTypes.CHG_PROVIDERAOI, payload: payload }),\r\n\r\n bookAppointment: (payload) => ({ type: actionTypes.ADD_BOOKING, payload : payload }),\r\n putAppointment: (payload) => ({ type: actionTypes.PUT_BOOKING, payload : payload }),\r\n putBillableAppointment: (payload) => ({ type: actionTypes.PUT_BILLABLEBOOKING, payload : payload }),\r\n // appointmentReminder: (payload) => ({ type: actionTypes.BOOKING_REMINDER, payload : payload }),\r\n\r\n putXeroContactLink: () => ({ type: actionTypes.PUT_XEROCONTACTLINK }),\r\n putXeroNDISContactLink: () => ({ type: actionTypes.PUT_XERONDISCONTACTLINK }),\r\n\r\n putCreateProviderBillableEmails: (payload) => ({ type: actionTypes.CREATE_BILLABLEEMAILS, payload : payload }),\r\n putCreateInvoices: (payload) => ({ type: actionTypes.CREATE_INVOICES, payload : payload }),\r\n putCreateInvoicesContract: (payload) => ({ type: actionTypes.CREATE_INVOICESCONTRACT, payload : payload }),\r\n putCreateInvoicesNthQLDPHN: (payload) => ({ type: actionTypes.CREATE_INVOICESNTHQLDPHN, payload : payload }),\r\n putCreateInvoicesContractProvider: (payload) => ({ type: actionTypes.CREATE_INVOICESCONTRACTPROVIDER, payload : payload }),\r\n putCreateInvoicesNDIS: (payload) => ({ type: actionTypes.CREATE_INVOICESNDIS, payload : payload }),\r\n putCreateInvoicesNDISProvider: (payload) => ({ type: actionTypes.CREATE_INVOICESNDISPROVIDER, payload : payload }),\r\n // putProcessPayments: (payload) => ({ type: actionTypes.CREATE_PAYMENTS, payload : payload }),\r\n\r\n // fetchCounter: (payload) => ({ type: actionTypes.FETCH_COUNTER, payload: payload }),\r\n fetchStatistics: (payload) => ({ type: actionTypes.FETCH_STATISTICS, payload: payload }),\r\n\r\n fetchReport: (payload) => ({ type: actionTypes.FETCH_REPORT, payload: payload }),\r\n setAdminInitialState: () => ({ type: actionTypes.SET_INITIAL }),\r\n setFilters: (payload) => ({ type: actionTypes.SET_FILTERS, payload: payload }),\r\n\r\n fetchTagValues: (payload) => ({ type: actionTypes.FETCH_TAGVALUES, payload: payload }),\r\n putTagValues: (payload) => ({ type: actionTypes.PUT_TAGVALUES, payload: payload }),\r\n clearDisplayInvite: () => ({ type: actionTypes.CLEAR_DISPLAYINVITE }),\r\n clearClient: () => ({ type: actionTypes.CLEAR_CLIENT }),\r\n fetchOpportunityFeed: (payload) => ({ type: actionTypes.FETCH_OPPORTUNITYFEED, payload: payload }),\r\n putClientOpportunityInterest: (payload) => ({ type: actionTypes.PUT_OPPORTUNITYINTEREST, payload: payload }),\r\n putResetInterestedProviders: (payload) => ({ type: actionTypes.PUT_RESETINTERESTEDPROVIDERS, payload: payload }),\r\n fetchActivityFeed: (payload) => ({ type: actionTypes.FETCH_ACTIVITYFEED, payload: payload }),\r\n fetchInvoiceLog: (payload) => ({ type: actionTypes.FETCH_INVOICELOG, payload: payload }),\r\n fetchContracts: (payload) => ({ type: actionTypes.FETCH_CONTRACTS, payload: payload }),\r\n putContract: (payload) => ({ type: actionTypes.PUT_CONTRACT, payload : payload }),\r\n fetchPrograms: (payload) => ({ type: actionTypes.FETCH_PROGRAMS, payload: payload }),\r\n putProgram: (payload) => ({ type: actionTypes.PUT_PROGRAM, payload : payload }),\r\n fetchSurveys: (payload) => ({ type: actionTypes.FETCH_SURVEYS, payload: payload }),\r\n putSurvey: (payload) => ({ type: actionTypes.PUT_SURVEY, payload : payload }),\r\n\r\n updateBookingBilling: (payload) => ({ type: actionTypes.PUT_BOOKINGBILLING, payload : payload }),\r\n putProviderPassword: (payload) => ({ type: actionTypes.PUT_PROVIDERPASSWORD, payload : payload }),\r\n updateRHCPaid: (payload) => ({ type: actionTypes.PUT_RHCPAID, payload : payload }),\r\n\r\n setBookingStatus: (payload) => ({ type: actionTypes.SET_BOOKINGSTATUS, payload : payload }),\r\n setProgressStatus: (payload) => ({ type: actionTypes.SET_PROGRESS_STATUS, payload : payload }), \r\n\r\n fetchAdminUser: (payload) => ({ type: actionTypes.FETCH_ADMINUSER, payload : payload }), \r\n putAdminUser: (payload) => ({ type: actionTypes.PUT_ADMINUSER, payload : payload }), \r\n fetchClientsByDay: (payload) => ({ type: actionTypes.FETCH_CLIENTSBYDAY, payload : payload }), \r\n fetchClientRegistrationsByDay: (payload) => ({ type: actionTypes.FETCH_CLIENTREGISTRATIONSBYDAY, payload : payload }), \r\n fetchClientsByWeek: (payload) => ({ type: actionTypes.FETCH_CLIENTSBYWEEK, payload : payload }), \r\n fetchProviderProgramBio: (payload) => ({ type: actionTypes.FETCH_PROVIDERPROGRAMBIO, payload : payload }), \r\n putProviderProgramBio: (payload) => ({ type: actionTypes.PUT_PROVIDERPROGRAMBIO, payload : payload }), \r\n\r\n fetchProviderBookingApproval: (payload) => ({ type: actionTypes.FETCH_PROVIDERBOOKINGAPPROVAL, payload : payload }), \r\n putProviderBookingApproval: (payload) => ({ type: actionTypes.PUT_PROVIDERBOOKINGAPPROVAL, payload : payload }), \r\n putApproveBooking: (payload) => ({ type: actionTypes.PUT_APPROVEBOOKING, payload : payload }), \r\n putRHCInvoicedBooking: (payload) => ({ type: actionTypes.PUT_RHCINVOICEDBOOKING, payload : payload }), \r\n putBookingNote: (payload) => ({ type: actionTypes.PUT_BOOKINGNOTE, payload : payload }), \r\n\r\n fetchNthQLDPHNStatistics: (payload) => ({ type: actionTypes.FETCH_NTHQLDPHNSTATISTICS, payload : payload }), \r\n fetchNthQLDPHNIssues: (payload) => ({ type: actionTypes.FETCH_NTHQLDPHNISSUES, payload : payload }), \r\n fetchNthQLDPHNDetails: (payload) => ({ type: actionTypes.FETCH_NTHQLDPHNDETAILS, payload : payload }), \r\n fetchProviderStatistics: (payload) => ({ type: actionTypes.FETCH_PROVIDERSTATISTICS, payload : payload }),\r\n};\r\n\r\nfunction* actionWatcher() {\r\n yield takeLatest('FETCH_HELPITEMS',fetchHelpItems)\r\n yield takeLatest('FETCH_RESOURCEITEMS',fetchResourceItems)\r\n yield takeLatest('FETCH_DASHBOARDNEWS',fetchDashboardNews)\r\n yield takeLatest('FETCH_MEDICALPRACTICES',fetchMedicalPractices)\r\n yield takeLatest('FETCH_MEDICALPRACTITIONERS',fetchMedicalPractitioners)\r\n yield takeLatest('FETCH_SOURCE',fetchSource)\r\n yield takeLatest('FETCH_INTERESTED',fetchInterested)\r\n yield takeLatest('FETCH_REGISTERED',fetchRegistered)\r\n yield takeLatest('FETCH_CLIENTREGISTERED',fetchClientRegistered)\r\n yield takeLatest('FETCH_REFERRALSVIEW',fetchReferralsView)\r\n yield takeLatest('FETCH_REFERRALS',fetchReferrals)\r\n yield takeLatest('FETCH_FAXES',fetchFaxes)\r\n yield takeLatest('FETCH_CLIENTINVITES',fetchClientInvites)\r\n yield takeLatest('FETCH_CLIENTS',fetchClients)\r\n yield takeLatest('FETCH_CLIENT',fetchClient)\r\n yield takeLatest('FETCH_AVAILABILITY',fetchAvailability)\r\n yield takeLatest('FETCH_BOOKINGS',fetchBookings)\r\n yield takeLatest('FETCH_BOOKINGBILLING',fetchBookingBilling)\r\n yield takeLatest('FETCH_BOOKING',fetchBooking)\r\n yield takeLatest('FETCH_MATCHING',fetchMatching)\r\n yield takeLatest('FETCH_CLIENTFUTUREBOOKINGSTATUS',fetchClientFutureBookingStatus)\r\n yield takeLatest('FETCH_MATCHINGAVAILABILITY',fetchMatchingAvailability)\r\n yield takeLatest('FETCH_FAXPDF',fetchFaxPDF)\r\n yield takeLatest('FETCH_INTENT',fetchIntent)\r\n yield takeLatest('FETCH_BILLABLE',fetchBillableIntents)\r\n yield takeLatest('FETCH_BILLABLEALL',fetchBillableIntentsAll)\r\n yield takeLatest('FETCH_BILLABLECONTRACT',fetchBillableIntentsContract)\r\n yield takeLatest('FETCH_BILLABLENTHQLDPHN',fetchBillableIntentsNthQLDPHN)\r\n yield takeLatest('FETCH_BILLABLENDIS',fetchBillableIntentsNDIS)\r\n yield takeLatest('FETCH_BILLABLECONTRACTPROVIDER',fetchBillableIntentsContractProvider)\r\n yield takeLatest('FETCH_BILLABLENDISPROVIDER',fetchBillableIntentsNDISProvider)\r\n yield takeLatest('FETCH_SINGLEBILLABLE',fetchSingleBillableIntents)\r\n yield takeLatest('FETCH_PAYMENTS',fetchPayments)\r\n yield takeLatest('FETCH_NOTES',fetchNotes)\r\n yield takeLatest('FETCH_FILES',fetchFiles)\r\n yield takeLatest('FETCH_PAYMENTAPI',fetchPaymentAPI)\r\n yield takeLatest('FETCH_MEDIPASSINVOICES',fetchMedipassInvoices)\r\n yield takeLatest('FETCH_MEDIPASSCODES',fetchMedipassCodes)\r\n yield takeLatest('FETCH_MEDIPASSCLIENTS',fetchMedipassClients)\r\n yield takeLatest('FETCH_MEDIPASSBOOKINGDATES',fetchMedipassBookingDates)\r\n yield takeLatest('FETCH_TODOS',fetchToDos)\r\n yield takeLatest('FETCH_TAGVALUES', fetchTagValues)\r\n yield takeLatest('FETCH_REFERRERS', fetchReferrers)\r\n yield takeLatest('FETCH_BOOKINGTYPESTATISTICS', fetchBookingTypeStatistics)\r\n yield takeLatest('FETCH_SEARCHCLIENTDATA',fetchSearchClientData)\r\n yield takeLatest('FETCH_SEARCHBOOKINGDATA',fetchSearchBookingData)\r\n yield takeLatest('FETCH_CLIENTSBYDAY',fetchClientsByDay)\r\n yield takeLatest('FETCH_CLIENTREGISTRATIONSBYDAY',fetchClientRegistrationsByDay)\r\n yield takeLatest('FETCH_CLIENTSBYWEEK',fetchClientsByWeek)\r\n yield takeLatest('FETCH_OPPORTUNITIES',fetchOpportunities)\r\n yield takeLatest('PUT_OPPORTUNITY',putOpportunity)\r\n\r\n yield takeLatest('FETCH_ADMINUSER',fetchAdminUser)\r\n yield takeLatest('PUT_ADMINUSER',putAdminUser)\r\n\r\n yield takeLatest('PUT_REFERRAL',putReferral)\r\n yield takeLatest('PUT_REFERRALSTATUS',putReferralStatus)\r\n yield takeLatest('PUT_CLIENT',putClient)\r\n yield takeLatest('POST_CLIENTINVITE',postClientInvite)\r\n yield takeLatest('PUT_CLIENTINVITE',putClientInvite)\r\n yield takeLatest('SEND_CLIENTINVITE', sendClientInvite)\r\n yield takeLatest('SEND_CLIENTINVITEREMINDER', sendClientInviteReminder)\r\n yield takeLatest('SEND_SENDCALLUNSUCCESSFULREMINDER', sendCallUnsuccessfulReminder)\r\n yield takeLatest('DEL_CLIENTINVITE', deleteClientInvite)\r\n yield takeLatest('PUT_MEDICALPRACTITIONER',putMedicalPractitioner)\r\n yield takeLatest('PUT_MEDICALPRACTICE',putMedicalPractice)\r\n yield takeLatest('POST_NOTE',postNote)\r\n yield takeLatest('POST_CLIENTNOTE',postClientNote)\r\n yield takeLatest('POST_FILE',postFile)\r\n yield takeLatest('DELETE_FILE',deleteFile)\r\n yield takeLatest('SET_CLIENTVIEWABLEFLAG',setClientViewableFlag)\r\n // yield takeLatest('BOOKING_REMINDER',sendBookingReminder);\r\n yield takeLatest('PUT_CLIENTPSYCHOLOGIST',putClientPsychologist)\r\n yield takeLatest('PUT_CLIENT_FLAG',putClientFlag)\r\n yield takeEvery('PUT_CLIENT_TASKFLAG',putClientTaskFlag)\r\n yield takeLatest('PUT_FAX_FLAG',putFaxFlag)\r\n yield takeLatest('PUT_INTERESTEDPROVIDER_FLAG',putInterestedProviderFlag)\r\n yield takeLatest('PUT_FAX_CLIENTNAME',putFaxClientName)\r\n yield takeLatest('PUT_CLIENTINVITE_FLAG',putClientInviteFlag)\r\n yield takeLatest('PUT_APIKEY',putApikey)\r\n yield takeLatest('PUT_MEDIPASSCODES',putMedipassCodes)\r\n yield takeLatest('PUT_MEDIPASSINVOICES',putMedipassInvoices)\r\n yield takeLatest('PUT_TAGVALUES', putTagValues)\r\n yield takeLatest('PUT_REFERRER', putReferrer)\r\n yield takeLatest('PUT_CONTRACT', putContract)\r\n yield takeLatest('PUT_PROGRAM', putProgram)\r\n yield takeLatest('PUT_SURVEY', putSurvey)\r\n yield takeLatest('PUT_TODO', putToDo)\r\n yield takeLatest('PUT_FAXSTATUS', putFaxStatus)\r\n \r\n yield takeLatest('PUT_ARCHIVECLIENT',putArchiveClient)\r\n yield takeLatest('PUT_CARD',putCard)\r\n yield takeLatest('PUT_INTERESTED',putInterestedStatus)\r\n yield takeLatest('SEND_PSYCHOLOGISTINVITE',sendPsychologistInvite)\r\n yield takeLatest('SEND_PSYCHOLOGISTREFERRAL',sendPsychologistReferral)\r\n \r\n yield takeLatest('POST_PSYCHOLOGISTINVITE',postPsychologistInvite)\r\n yield takeLatest('DEL_PSYCHOLOGISTINVITE',deletePsychologistInvite)\r\n yield takeLatest('PUT_PSYCHOLOGISTDATA',putPsychologistDetail)\r\n yield takeLatest('POST_PSYCHOLOGISTDATA',postPsychologistDetail)\r\n yield takeLatest('PUT_CLIENTDATA',putClientDetail)\r\n yield takeLatest('POST_CLIENTDATA',postClientDetail)\r\n yield takeLatest('ADD_AVAILABILITY',postAvailability)\r\n yield takeLatest('CHG_AVAILABILITY',putAvailability)\r\n yield takeLatest('DEL_AVAILABILITY',deleteAvailability)\r\n yield takeLatest('CHG_BULKBILLINGAVAILABILITY', chgBulkBillingAvailability)\r\n yield takeLatest('CHG_PROVIDERAOI', chgProviderAOI)\r\n\r\n yield takeLatest('PUT_XEROCONTACTLINK',putXeroContactLink)\r\n yield takeLatest('PUT_XERONDISCONTACTLINK',putXeroNDISContactLink)\r\n yield takeLatest('PUT_BOOKINGBILLING',putBookingBilling)\r\n yield takeLatest('PUT_RHCPAID',putRHCPaid)\r\n yield takeLatest('PUT_PROVIDERPASSWORD',putProviderPassword)\r\n yield takeLatest('PUT_INVOICESTATUS',putInvoiceStatus)\r\n yield takeLatest('CREATE_BILLABLEEMAILS',putBillableEmails)\r\n yield takeLatest('CREATE_INVOICES',putCreateInvoices)\r\n yield takeLatest('CREATE_INVOICESCONTRACT',putCreateInvoicesContract)\r\n yield takeLatest('CREATE_INVOICESNTHQLDPHN',putCreateInvoicesNthQLDPHN)\r\n yield takeLatest('CREATE_INVOICESNDIS',putCreateInvoicesNDIS)\r\n yield takeLatest('CREATE_INVOICESNDISPROVIDER',putCreateInvoicesNDISProvider)\r\n yield takeLatest('CREATE_INVOICESCONTRACTPROVIDER',putCreateInvoicesContractProvider)\r\n // yield takeLatest('CREATE_PAYMENTS',putCreatePayments)\r\n yield takeLatest('ADD_BOOKING',postBooking)\r\n yield takeLatest('PUT_BOOKING',putBooking)\r\n yield takeLatest('PUT_BILLABLEBOOKING',putBillableBooking)\r\n // yield takeLatest('FETCH_COUNTER',fetchCounter)\r\n yield takeLatest('FETCH_STATISTICS',fetchStatistics)\r\n\r\n yield takeLatest('FETCH_INVOICELOG',fetchInvoiceLog)\r\n yield takeLatest('FETCH_CONTRACTS',fetchContracts)\r\n yield takeLatest('FETCH_PROGRAMS',fetchPrograms)\r\n yield takeLatest('FETCH_SURVEYS',fetchSurveys)\r\n yield takeEvery('FETCH_REPORT',fetchReport)\r\n\r\n yield takeLatest('FETCH_BOOKINGBILLABLECSV',fetchBookingBillableCSV)\r\n yield takeLatest('FETCH_POWERBIXLSX',fetchPowerBIXlsx)\r\n yield takeLatest('FETCH_ACTIVITYFEED',fetchActivityFeed)\r\n yield takeLatest('FETCH_OPPORTUNITYFEED',fetchOpportunityFeed)\r\n yield takeLatest('PUT_OPPORTUNITYINTEREST',putOpportunityInterest)\r\n yield takeLatest('PUT_RESETINTERESTEDPROVIDERS',putResetInterestedProviders)\r\n yield takeLatest('PUT_ERROR',putError)\r\n\r\n yield takeLatest('FETCH_PROVIDERPROGRAMBIO',fetchProviderProgramBio)\r\n yield takeLatest('PUT_PROVIDERPROGRAMBIO',putProviderProgramBio)\r\n\r\n yield takeLatest('FETCH_PROVIDERBOOKINGAPPROVAL',fetchProviderBookingApproval)\r\n yield takeLatest('PUT_APPROVEBOOKING',putApproveBooking)\r\n yield takeLatest('PUT_RHCINVOICEDBOOKING',putRHCInvoicedBooking)\r\n yield takeLatest('PUT_BOOKINGNOTE',putBookingNote)\r\n yield takeLatest('FETCH_NTHQLDPHNSTATISTICS',fetchNthQLDPHNStatistics)\r\n yield takeLatest('FETCH_NTHQLDPHNISSUES',fetchNthQLDPHNIssues)\r\n yield takeLatest('FETCH_NTHQLDPHNDETAILS',fetchNthQLDPHNDetails)\r\n yield takeLatest('FETCH_PROVIDERSTATISTICS',fetchProviderStatistics)\r\n}\r\n\r\nexport function* saga() {\r\n yield all([\r\n actionWatcher(),\r\n ]); \r\n}\r\n\r\n\r\n","import { put, takeLatest, all } from \"redux-saga/effects\";\r\nimport axios from \"axios\";\r\nimport { toast } from \"react-toastify\";\r\n// import isCached from \"../../components/Cache\";\r\n\r\n// const cache = (state) => state.admin.cache;\r\nexport const BASE_URL = process.env.REACT_APP_APIIP + \"/forms\";\r\n\r\nexport const actionTypes = {\r\n SET_INITIAL: \"SET_INITIAL\", \r\n FETCH_FORMS: \"FETCH_FORMS\",\r\n FETCH_FORM: \"FETCH_FORM\",\r\n FETCH_ALLFORMDATA: \"FETCH_ALLFORMDATA\",\r\n FETCH_FORMDATA: \"FETCH_FORMDATA\",\r\n FETCH_DATANODES: \"FETCH_DATANODES\",\r\n\r\n PUT_FORM: \"PUT_FORM\",\r\n PUT_FORMQUESTION: \"PUT_FORMQUESTION\",\r\n PUT_FORMQUESTIONS_ORDER: \"PUT_FORMQUESTIONS_ORDER\",\r\n DELETE_FORMQUESTION: \"DELETE_FORMQUESTION\",\r\n DELETE_FORM: \"DELETE_FORM\",\r\n COPY_FORM_TO_PROVIDERS: \"COPY_FORM_TO_PROVIDERS\",\r\n\r\n PUT_FORMDATA: \"PUT_FORMDATA\",\r\n FETCH_PREVIEWPDF : \"FETCH_PREVIEWPDF\",\r\n SET_PREVIEWPDF: \"SET_PREVIEWPDF\",\r\n CLEAR_PREVIEWPDF: \"CLEAR_PREVIEWPDF\",\r\n\r\n};\r\n\r\nconst initialState = {\r\n Forms: [],\r\n AllFormData: [],\r\n Form: {\r\n id: 0,\r\n formID: 0,\r\n subscriberID: 0,\r\n ownerID: null,\r\n formType: 'General',\r\n formName: '',\r\n formDescription: '',\r\n formInstructions: '',\r\n confirmationText: 'Thank you - your form has been submitted.',\r\n inputOrientation: '',\r\n questionToAnswerWidth: '',\r\n formStyles: '',\r\n formStatus: 'Active',\r\n formQuestions: []\r\n },\r\n DataNodes: [], \r\n PreviewPDF: '',\r\n FormData: {\r\n id: 0,\r\n formDataID: 0,\r\n formID: 0,\r\n formName: '',\r\n formDataStatus: 'Not Started',\r\n values: []\r\n }\r\n};\r\n\r\nexport function reducer(state = initialState, {type, ...action }) \r\n{\r\n switch (type) \r\n {\r\n case 'SET_FORMS_COLLECTION': {\r\n return {\r\n ...state,\r\n [action.payload.collectionName]: action.payload.grid, \r\n };\r\n }\r\n case 'SET_PREVIEWPDF': {\r\n return {\r\n ...state,\r\n PreviewPDF: action.payload.faxBlob, \r\n };\r\n }\r\n case 'CLEAR_PREVIEWPDF': {\r\n return {\r\n ...state,\r\n PreviewPDF: '', \r\n };\r\n }\r\n case 'SET_INITIAL': {\r\n return initialState;\r\n }\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\n// Fetch's Below \r\n\r\nexport function* fetchForms(action)\r\n{\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n try \r\n {\r\n const newURL = BASE_URL + \"/forms\";\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_FORMS_COLLECTION', payload: { collectionName: 'Forms', grid: response.data} });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* fetchPreviewPDF(action) {\r\n try \r\n {\r\n const newURL = BASE_URL + \"/previewpdf\";\r\n const response = yield axios.put(newURL, action.payload); \r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_PREVIEWPDF', payload: response.data[0]});\r\n yield put({ type: 'SET_CACHE', payload: { caller: action }});\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* fetchDataNodes(action)\r\n{\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n try \r\n {\r\n const newURL = BASE_URL + \"/datanodes\";\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_FORMS_COLLECTION', payload: { collectionName: 'DataNodes', grid: response.data} });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* fetchForm(action)\r\n{\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n try \r\n {\r\n const newURL = BASE_URL + \"/form/\" + action.payload;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_FORMS_COLLECTION', payload: { collectionName: 'Form', grid: response.data[0] } });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putForm(action) {\r\n try\r\n {\r\n const newURL = BASE_URL + \"/form\";\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action) + ` - ${newURL}`);\r\n const response = yield axios.put(newURL, action.payload); \r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(`ok saved: ${action.type}`); \r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n yield put({ type: 'FETCH_FORMS' });\r\n }\r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n }\r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putFormQuestion(action) {\r\n try\r\n {\r\n const newURL = BASE_URL + \"/formquestion\";\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action) + ` - ${newURL}`);\r\n const response = yield axios.put(newURL, action.payload.formData); \r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(`ok saved: ${action.type}`); \r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n yield put({ type: 'FETCH_FORM', payload: action.payload.formData.get('formID') });\r\n }\r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n }\r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putQuestionsOrder(action) {\r\n try\r\n {\r\n const newURL = BASE_URL + \"/formquestionsorder\";\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action) + ` - ${newURL}`);\r\n const response = yield axios.put(newURL, action.payload); \r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(`ok saved: ${action.type}`); \r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n yield put({ type: 'FETCH_FORM', payload: action.payload.formID });\r\n }\r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n }\r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* deleteFormQuestion(action) {\r\n try\r\n {\r\n const newURL = BASE_URL + \"/deleteformquestion\";\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action) + ` - ${newURL}`);\r\n const response = yield axios.put(newURL, action.payload); \r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(`ok saved: ${action.type}`); \r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n yield put({ type: 'FETCH_FORM', payload: action.payload.formID });\r\n }\r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n }\r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* deleteForm(action) {\r\n try\r\n {\r\n const newURL = BASE_URL + \"/deleteform/\" + action.payload;\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action) + ` - ${newURL}`);\r\n const response = yield axios.put(newURL); \r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(`ok saved: ${action.type}`); \r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n yield put({ type: 'FETCH_FORMS' });\r\n }\r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n }\r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* copyToProviders(action) {\r\n try\r\n {\r\n const newURL = BASE_URL + \"/copyformtoproviders/\" + action.payload;\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action) + ` - ${newURL}`);\r\n const response = yield axios.put(newURL); \r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(`ok saved: ${action.type}`); \r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n toast.success(`Success: Form copied to providers.`);\r\n }\r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n }\r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* fetchAllFormData(action)\r\n{\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n try \r\n {\r\n const newURL = BASE_URL + \"/allformdata/\" + action.payload;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n yield put({ type: 'SET_FORMS_COLLECTION', payload: { collectionName: 'AllFormData', grid: response.data } });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* fetchFormData(action)\r\n{\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action));\r\n try \r\n {\r\n // Need to clear existing formdata incase the screen has not upated \r\n yield put({ type: 'SET_FORMS_COLLECTION', payload: { collectionName: 'FormData', grid: initialState.FormData } });\r\n // Handle contextName and contextID not being set\r\n const contextName = action.payload.contextName ? action.payload.contextName : 'Not Set' \r\n const contextID = action.payload.contextID ? action.payload.contextID : 0\r\n // Now on with the show\r\n const newURL = BASE_URL + \"/formdata/\" + action.payload.formID + \"/\" + action.payload.formDataID + \"/\" + contextName + \"/\" + contextID;\r\n const response = yield axios.get(newURL);\r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n const switchDataType = (item) => {\r\n var thisValue = item.dataValue;\r\n if (item.type === 'MULTIOPTION'){\r\n thisValue = item.dataValues\r\n }\r\n return thisValue\r\n }\r\n let gridData = {};\r\n if(response.data.length === 0) // if no form data returned, then overwrite with initial state\r\n {\r\n gridData = initialState.FormData;\r\n }\r\n else\r\n {\r\n var values = response.data[0].values.reduce((obj, item) => Object.assign(obj, { [`Q${item.questionID}`]: switchDataType(item) }), {} );\r\n gridData = { ...response.data[0], values: values }\r\n }\r\n yield put({ type: 'SET_FORMS_COLLECTION', payload: { collectionName: 'FormData', grid: gridData } });\r\n } \r\n else // API completed with 200, however there is an error message\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n } \r\n catch (error) // API call itself has errored out\r\n {\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\nexport function* putFormData(action) {\r\n try\r\n {\r\n const newURL = BASE_URL + \"/formdata\";\r\n process.env.REACT_APP_DEBUG && console.log(JSON.stringify(action) + ` - ${newURL}`);\r\n const response = yield axios.put(newURL, action.payload); \r\n if(response.status === 200 && response.data.returnStatus !== \"Error\") \r\n {\r\n process.env.REACT_APP_DEBUG && console.log(`ok saved: ${action.type}`); \r\n process.env.REACT_APP_DEBUG && console.log(response);\r\n toast.success(`Success: Form Saved.`);\r\n if (!action.payload.contextID || action.payload.contextID === 0)\r\n {\r\n yield put({ type: 'FETCH_FORMDATA', payload: { formDataID : action.payload.formDataID, formID : action.payload.formID, contextName : 'Not Set', contextID : 0} });\r\n yield put({ type: 'FETCH_ALLFORMDATA', payload: 0 });\r\n }\r\n else\r\n {\r\n yield put({ type: 'FETCH_FILES', payload: { type: action.payload.contextName, pkID: action.payload.contextID, popCache: true } });\r\n }\r\n }\r\n else // API completed with 200, however there is an error message\r\n {\r\n toast.error(`Failed: ${response.data.returnText}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : `REDUX Function, ReturnCode: ${response.status}, ReturnStatus: ${response.data.returnStatus}`, Message : response.data.returnText } });\r\n }\r\n }\r\n catch (error) // API call itself has errored out\r\n {\r\n toast.error(`Failed: ${action.type}`);\r\n yield put({ type: 'PUT_ERROR', payload: {Request: action.type, ErrorType : 'REDUX Function, API call has errored', Message : error.message } });\r\n }\r\n}\r\n\r\n\r\n\r\nexport const actions = {\r\n fetchForms: () => ({ type: actionTypes.FETCH_FORMS }),\r\n fetchDataNodes: () => ({ type: actionTypes.FETCH_DATANODES }),\r\n fetchForm: (payload) => ({ type: actionTypes.FETCH_FORM, payload: payload }),\r\n fetchAllFormData: (payload) => ({ type: actionTypes.FETCH_ALLFORMDATA, payload: payload }),\r\n fetchFormData: (payload) => ({ type: actionTypes.FETCH_FORMDATA, payload: payload }),\r\n fetchPreviewPDF: (payload) => ({ type: actionTypes.FETCH_PREVIEWPDF, payload : payload }),\r\n clearPreviewPDF: () => ({ type: actionTypes.CLEAR_PREVIEWPDF }),\r\n\r\n putForm: (payload) => ({ type: actionTypes.PUT_FORM, payload: payload }),\r\n putFormQuestion: (payload) => ({ type: actionTypes.PUT_FORMQUESTION, payload: payload }),\r\n putQuestionsOrder: (payload) => ({ type: actionTypes.PUT_FORMQUESTIONS_ORDER, payload: payload }),\r\n deleteFormQuestion: (payload) => ({ type: actionTypes.DELETE_FORMQUESTION, payload: payload }),\r\n deleteForm: (payload) => ({ type: actionTypes.DELETE_FORM, payload: payload }),\r\n copyToProviders: (payload) => ({ type: actionTypes.COPY_FORM_TO_PROVIDERS, payload: payload }),\r\n \r\n putFormData: (payload) => ({ type: actionTypes.PUT_FORMDATA, payload: payload }),\r\n};\r\n\r\nfunction* actionWatcher() {\r\n yield takeLatest('FETCH_FORMS', fetchForms);\r\n yield takeLatest('FETCH_DATANODES', fetchDataNodes);\r\n yield takeLatest('FETCH_FORM', fetchForm);\r\n yield takeLatest('FETCH_ALLFORMDATA', fetchAllFormData);\r\n yield takeLatest('FETCH_FORMDATA', fetchFormData);\r\n yield takeLatest('FETCH_PREVIEWPDF',fetchPreviewPDF);\r\n\r\n yield takeLatest('PUT_FORM', putForm);\r\n yield takeLatest('PUT_FORMQUESTION', putFormQuestion);\r\n yield takeLatest('PUT_FORMQUESTIONS_ORDER', putQuestionsOrder);\r\n yield takeLatest('DELETE_FORMQUESTION', deleteFormQuestion);\r\n yield takeLatest('DELETE_FORM' ,deleteForm);\r\n yield takeLatest('COPY_FORM_TO_PROVIDERS', copyToProviders);\r\n\r\n yield takeLatest('PUT_FORMDATA',putFormData);\r\n}\r\n\r\nexport function* saga() {\r\n yield all([\r\n actionWatcher(),\r\n ]); \r\n}\r\n\r\n\r\n"],"sourceRoot":""}