{"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 }}>&lt; Prev </Button> : null}\r\n        {next ? <Button className=\"lightButtonOutlined\"  variant=\"light\" size=\"sm\" onClick={()=>navFax(next)} style={{ marginLeft: 20 }}>Next &gt;</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 }}>&lt; Prev </Button> : null}\r\n        {next ? <Button className=\"lightButtonOutlined\"  variant=\"light\" size=\"sm\" onClick={()=>navFax(next)} style={{ marginLeft: 20 }}>Next &gt;</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 &gt;\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\"> &lt; </Button>\r\n          <Button variant=\"light\" onClick={() => {makeWeek(nextWeek)}} style={{ marginRight: 10 }}> &gt; </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 &gt;\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 &gt;\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 &gt;\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 &gt;\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> &nbsp; {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 &gt;\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 &amp; Next &gt;\r\n                      </Button>\r\n                      <Button variant=\"primary\" onClick={() => saveInvite('Sent')} >\r\n                          Send &amp; Next &gt;\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            &lt; 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>&nbsp;\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>&nbsp;\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>&nbsp;\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>&nbsp;\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>&nbsp;\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>&nbsp;\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 &amp; 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=''>&nbsp;</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                        &nbsp; &nbsp;\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 &gt;\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 }}>&nbsp; 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 &nbsp;\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        &nbsp;&nbsp;\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        &nbsp;&nbsp;\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        &nbsp;&nbsp;\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        &nbsp;&nbsp;\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&apos;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                    &copy; 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 &amp; Next &gt;\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 &amp; Next &gt;\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 &amp; Next &gt;\r\n                    </Button>             \r\n                  :\r\n                    <Button variant=\"primary\" type=\"submit\" onClick={() => submitPsychologist()}>\r\n                      Save &amp; Next &gt;\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        &lt; 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                  &copy; 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                    &copy; 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 }}>&nbsp; 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                  &copy; 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                    &copy; 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 &nbsp;<a href='info@ruralhealthconnect.com.au'>info@ruralhealthconnect.com.au</a>&nbsp; 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                  &copy; 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                      &copy; 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                  &copy; 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=''>&nbsp;</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":""}