{ "version": 3, "sources": ["../../../packages/shared/bz-stores/lib/auth-store.ts", "../../../packages/shared/tm3-core/api/mobx/current-user/index.ts", "../../../packages/shared/bz-pronto-core/cache/index.tsx", "../../../packages/shared/bz-stores/lib/dashboard-store.ts", "../../../packages/controls/bz-core-controls/styles/report-colours.tsx", "../../../packages/shared/bz-stores/lib/diary-popover-store.tsx", "../../../packages/shared/bz-stores/lib/diary-cache-store.tsx", "../../../packages/shared/tm3-core/interfaces/practitioner/enums/status.tsx", "../../../packages/shared/bz-stores/lib/diary-view-store.tsx", "../../../packages/shared/bz-stores/lib/diary-view-store/enums/resources.ts", "../../../packages/shared/bz-stores/lib/enums/calendar-display.ts", "../../../packages/shared/bz-stores/lib/schedule-store.tsx", "../../../packages/shared/bz-stores/lib/locks.tsx", "../../../packages/shared/tm3-core/api/mobx/locations-response/index.ts", "../../../packages/shared/bz-stores/lib/dynamic-labels.tsx", "../../../packages/shared/tm3-core/licence.ts", "../../../packages/shared/bz-stores/lib/locations.tsx", "../../../packages/shared/bz-stores/lib/lookups.tsx", "../../../packages/shared/bz-stores/lib/reminder-store.tsx", "../../../packages/shared/bz-stores/lib/snackbar-store.ts", "../../../packages/shared/bz-stores/lib/security.tsx", "../../../packages/shared/bz-stores/lib/templates.tsx", "../../../packages/shared/bz-stores/lib/tours.tsx"], "sourcesContent": ["import 'tm3-core/api/mobx/current-user';\n\nimport { action, computed, observable, runInAction } from 'mobx';\n\nimport ProntoCache from 'bz-pronto-core/cache';\n\nimport DashboardStore from 'bz-stores/lib/dashboard-store';\n\nimport history from 'bz-utilities/modules/networking/history/rr4';\n\nimport Api from 'tm3-core/api';\nimport {\n AutoLoginRequest,\n ChangeLoggedInLocation,\n CurrentUser,\n GetCurrentUser,\n ReferralPortalCurrentUserRequest\n} from 'tm3-core/api.dtos';\nimport LocationResponse from 'tm3-core/api/mobx/locations-response';\nimport { cache } from 'tm3-core/cache';\n\nimport createContext from 'bz-utilities/hooks/context-v2';\nimport JsonServiceClient from './JsonServiceClient';\nimport Config from './config';\nimport DiaryViewStore from './diary-view-store';\nimport DynamicLabels from './dynamic-labels';\nimport Licence from './licence';\nimport Locations from './locations';\nimport Locks from './locks';\nimport Lookups from './lookups';\nimport ReminderStore from './reminder-store';\nimport Security from './security';\nimport Templates from './templates';\nimport Tours from './tours';\nimport ToursMobx from './tours-mobx';\n\nexport enum AuthStoreMode {\n none = 'none',\n countdown = 'countdown',\n reAuth = 're-auth'\n}\nvar lowerRegex = /[a-z]/g;\nexport const [AuthStoreContext, useAuthStore] = createContext('AuthStore');\n\nexport class AuthStoreType {\n @observable authenticated = false;\n @observable user: CurrentUser = new CurrentUser({\n location: new LocationResponse()\n });\n @computed get initials() {\n const name = this.user?.displayName ?? '?';\n return name.replace(lowerRegex, '');\n }\n @observable authTimeout: number = 20;\n @observable mode: AuthStoreMode = AuthStoreMode.none;\n @observable stage1Authenticated: boolean = false;\n @observable usedLicenses: number = 0;\n\n private client = new JsonServiceClient();\n\n regex = /^\\/login|^\\/help/;\n\n ttl?: number;\n\n public setAuthToken(token: string): void {\n sessionStorage.setItem('authToken', token);\n }\n\n public setTimeoutAmount(mins: number): void {\n this.authTimeout = mins < 1 ? 20 : mins;\n this.onReset();\n }\n\n @action.bound\n public onReset(): void {\n this.mode = AuthStoreMode.none;\n clearTimeout(this.ttl);\n let sec = this.authTimeout * 60000 - 30000;\n this.ttl = window.setTimeout(this.onExpiring, sec);\n }\n\n @action.bound\n private onExpiring(): void {\n let { pathname } = window.location;\n if (this.regex.test(pathname)) {\n return;\n }\n\n const tabLastActive = localStorage.getItem('tabLastActive') ?? '';\n\n if (tabLastActive != '') {\n const lastActive = new Date(tabLastActive);\n const seconds = (new Date().getTime() - lastActive.getTime()) / 1000;\n const timeoutSeconds = this.authTimeout * 60 - 30;\n\n if (document.visibilityState !== 'visible' && !(seconds > timeoutSeconds)) {\n this.onReset();\n return;\n }\n }\n\n this.mode = AuthStoreMode.countdown;\n return;\n }\n\n @action.bound\n public async checkReferralPortalLoginState() {\n try {\n const { result } = await this.client.get(new ReferralPortalCurrentUserRequest());\n this.onAuthenticate(result);\n } catch (ex: any) {\n if (window.location.pathname !== '/wrong-address' && ex.status !== 404) {\n history.replace('/login');\n }\n }\n }\n\n @action.bound\n public async refreshReferralPortalUser() {\n try {\n const { result } = await this.client.get(new ReferralPortalCurrentUserRequest());\n runInAction(() => {\n this.user = result;\n if (result.meta) this.setTimeoutAmount(result.meta['autoLogout'].toInt());\n });\n } catch (ex: any) {\n if (window.location.pathname !== '/wrong-address' && ex.status !== 404) {\n history.replace('/login');\n }\n }\n }\n\n @action.bound\n async checkLoginState() {\n try {\n const result = await this.client.get(new GetCurrentUser());\n this.onAuthenticate(result);\n this.initialiseStores();\n } catch (ex) {\n if (window.location.pathname !== '/wrong-address' && ex.status !== 404) {\n history.replace('/login');\n }\n }\n }\n @action.bound\n async changeLocation(id: number) {\n const res = await this.client.post(new ChangeLoggedInLocation({ id }));\n this.onAuthenticate(res);\n this.initialiseStores();\n\n Security.actions.updateDefaultLocation(res.location.id);\n DashboardStore.setLocationUserId(res.location, res.practitionerId);\n }\n\n @action.bound\n initialiseStores() {\n const { user } = this;\n\n if (cache.app.ReferralPortal) {\n return;\n }\n\n Config.actions.loadAll().then((config) => {\n this.setMode();\n this.setTimeoutAmount(parseInt(config[0].AUTOLOGOUTINTERVAL));\n });\n\n this.initIntercom();\n Tours.actions.preload(user.tours);\n Object.assign(ToursMobx.tours, user.tours);\n Locks.actions.clearAllForUser();\n Security.actions.loadAll();\n DashboardStore.setLocationUserId(user.location, user.practitionerId);\n Security.actions.updateDefaultLocation(user.location.id);\n DynamicLabels.actions.loadAll();\n Lookups.actions.loadAll();\n Lookups.actions.loadRegionalLookups();\n Templates.actions.loadAll();\n Locations.actions.load();\n ReminderStore.getReminderTime();\n ProntoCache.onConfigure();\n DiaryViewStore.onReload(user.id);\n }\n\n @action.bound\n setMode() {\n const mode = Config.get('config')?.TM3MODE;\n if (mode && mode.toUpperCase() === 'TRUE') {\n const configDictionary = {\n patient: {\n normal: 'Client',\n normalPlural: 'Clients',\n possessive: \"Client's\",\n possessivePlural: \"Clients'\"\n },\n group: {\n normal: 'Business',\n normalPlural: 'Businesses',\n possessive: \"Business'\",\n possessivePlural: \"Business'\"\n },\n vat: {\n aus: 'GST',\n can: 'GST',\n gbr: 'VAT',\n eur: 'VAT',\n gcc: 'VAT'\n }\n };\n // build up plurals and possessives as lower case keys\n\n const result = [];\n for (let key in configDictionary) {\n const { normal } = configDictionary[key];\n if (normal) {\n if (!configDictionary[key].normalPlural) {\n configDictionary[key].normalPlural = normal + 's';\n }\n if (!configDictionary[key].possessive) {\n configDictionary[key].possessive = normal + \"'s\";\n }\n if (!configDictionary[key].possessivePlural) {\n result.push(\n (configDictionary[key].possessivePlural = configDictionary[key].normalPlural + \"'\")\n );\n } else {\n result.push(undefined);\n }\n } else {\n result.push(undefined);\n }\n }\n return result;\n }\n }\n\n @action.bound\n async logout(storeReset = true) {\n await Api.post('/api/auth/logout', {}).catch((err) => {});\n localStorage.diaryAlertsAcknowledgedIds = null;\n localStorage.lastAlertObjectId = null;\n localStorage.lastAlertDiscriminator = null;\n localStorage.setItem('tm3-logout', new Date());\n sessionStorage.clear();\n\n DiaryViewStore.onUnload();\n if (storeReset) {\n return Promise.all([Security.actions.logout(), Templates.reset()]).then(() => {\n this.stage1Authenticated = false;\n this.authenticated = false;\n this.user = {};\n });\n }\n }\n\n get intercomAppId() {\n if (cache.isClick) return 'qqcol12v';\n if (cache.isGDS) return 'ocod7y8a';\n return 'f8r88klr';\n }\n\n @action.bound\n async initIntercom(): Promise {\n try {\n const { user } = this;\n const licensePromise = Licence.actions.load();\n if (localStorage.getItem('hideChat') == 'true') return;\n\n if (!cache.app.Caseflow) {\n await licensePromise;\n const host = window.location.host;\n\n let intercomSettings;\n\n if (!!process.env.isClick) {\n intercomSettings = {\n app_id: 'qqcol12v',\n name: user.displayName,\n ClientID: user.clientId,\n userName: user.name,\n email: user.email,\n subdomain: host.substring(0, host.indexOf('.')),\n Evaluating: !!Licence.get('licence').isEvaluating,\n isProntoPortal: !!Licence.get('licence').isProntoPortal,\n host: host,\n custom_launcher_selector: '#intercom_messenger',\n alignment: 'left',\n hide_default_launcher: true\n };\n } else {\n intercomSettings = {\n app_id: this.intercomAppId,\n name: user.displayName,\n ClientID: user.clientId,\n userName: user.name,\n email: user.email,\n subdomain: host.substring(0, host.indexOf('.')),\n Evaluating: !!Licence.get('licence').isEvaluating,\n isProntoPortal: !!Licence.get('licence').isProntoPortal,\n host: host,\n horizontal_padding: 60,\n alignment: 'left',\n custom_launcher_selector: '#tm3_intercom_messenger',\n hide_default_launcher: true\n };\n }\n window.Intercom?.('update', intercomSettings);\n }\n } catch (e) {\n console.error('[initIntercom] - something went wrong');\n console.error(e);\n }\n }\n\n @action.bound\n async autoLogin(token, redirectParam) {\n try {\n const result = await this.client.post(new AutoLoginRequest({ token }));\n if (!result) {\n return history.push('/help');\n } else {\n this.onAuthenticate(result);\n this.initialiseStores();\n if (process.env.isClick && !!redirectParam) {\n const url = decodeURIComponent(redirectParam);\n return history.push(url);\n }\n return history.push('/');\n }\n } catch {\n return history.push('/help');\n }\n }\n\n @action.bound\n onAuthenticate(\n result: CurrentUser,\n skipRedirects: boolean = false,\n isLogin: boolean = false\n ): boolean {\n this.stage1Authenticated = true;\n this.user = result;\n if (result.meta && result.meta['autoLogout'])\n this.setTimeoutAmount(result.meta['autoLogout'].toInt());\n if (this.user.practitionerId) {\n this.user.token = this.user.practitioner.physitrackToken;\n }\n if (skipRedirects) return true;\n\n if (result.twoFactorRequired && !result.twoFactorAuthenticated) {\n if (result.twoFactorSetup) history.push('/login/mfa/challenge');\n else history.push('/login/mfa/setup');\n return false;\n } else if (result.requiresUserRegistration) {\n history.push('/login/verify');\n return false;\n } else if (result.isAuthenticated) {\n localStorage.setItem('isFirstLoggedIn', String(true));\n localStorage.setItem('isAuthenticated', String(true));\n }\n this.authenticated = result.isAuthenticated;\n if (isLogin) localStorage.removeItem(`${result.userId}date`);\n\n return true;\n }\n}\n\nconst AuthStore = new AuthStoreType();\nexport default AuthStore;\n", "import { decorate, observable } from 'mobx';\n\nimport { CurrentUser } from 'tm3-core/api.dtos';\n\ndecorate(CurrentUser, {\n id: observable,\n name: observable,\n email: observable,\n clientId: observable,\n userType: observable,\n isAuthenticated: observable,\n isEvaluating: observable,\n settings: observable,\n practitioner: observable,\n location: observable,\n roleId: observable,\n practitionerId: observable,\n tM2UserName: observable,\n roleName: observable,\n userPermissionId: observable,\n tours: observable,\n departments: observable,\n customer: observable,\n userGlobalGuid: observable,\n hasTrialExpired: observable,\n needsVerified: observable,\n bearerToken: observable,\n displayName: observable,\n meta: observable,\n permissions: observable,\n profileUrl: observable,\n referrerUrl: observable,\n refreshToken: observable,\n responseStatus: observable,\n roles: observable,\n sessionId: observable,\n userId: observable,\n userName: observable,\n signatureRxIntegrationCode: observable\n});\n\nexport default CurrentUser;\n", "import { action, computed, observable, runInAction } from 'mobx';\n\nimport { bind as bound } from 'bind-decorator';\nimport { computedFn } from 'mobx-utils';\nimport Api from 'tm3-core/api';\nimport { cache } from 'tm3-core/cache';\nimport featureFlag from 'tm3-core/stores/feature-store';\n\nexport class ProntoCache {\n @observable prontoNetworkServices = {};\n @observable prontoInvoiceTemplates = {};\n\n @action.bound\n onConfigure() {\n return new Promise((resolve, reject) => {\n if (cache.isEClinic) return resolve(true);\n Api.post('/api/pronto/cache/load').then((res) => {\n const { result } = res.body;\n\n let networkServices = new ProntoNetworkServices();\n let invoiceTemplates = new ProntoInvoiceTemplates();\n\n networkServices.onLoad(result.services);\n invoiceTemplates.onLoad(result.invoices);\n\n runInAction(() => {\n this.prontoNetworkServices = networkServices;\n this.prontoInvoiceTemplates = invoiceTemplates;\n });\n\n let req = {\n prontoNetworkServices: networkServices,\n prontoInvoiceTemplates: invoiceTemplates\n };\n\n resolve(req);\n });\n });\n }\n}\n\nclass CacheObject {\n @observable loading = true;\n all = observable.map();\n\n @action.bound\n onLoad(res) {\n this.all.replace(res || {});\n this.loading = false;\n }\n\n getById = computedFn(this._getById);\n\n @bound\n _getById(id) {\n return this.all.get(id);\n }\n}\n\nclass ProntoNetworkServices extends CacheObject {\n public orderBy: string = 'discipline';\n getServiceName = computedFn(this._getServiceName);\n getAll = computedFn(this._getAll);\n\n @bound\n _getServiceName(networkServiceId) {\n const service = this.getById(networkServiceId);\n\n const prontoServiceName =\n !!service && service.serviceName ? service.serviceName : 'Unknown Service';\n\n return prontoServiceName;\n }\n\n @bound\n _getAll() {\n let services: any[] = [];\n\n const res = Array.from(this.all._data.values()) || [];\n res.forEach((service) => {\n services.push(service.value);\n });\n\n const { orderBy } = this;\n try {\n if (orderBy.length > 0) {\n services.sort((a, b) => {\n if (!a[orderBy] || !b[orderBy]) {\n return 0;\n }\n return a[orderBy].localeCompare(b[orderBy]);\n });\n }\n } catch {\n // no ordering is going to happen\n console.error('A problem arose when attempting to order these items');\n }\n return services;\n }\n}\nclass ProntoInvoiceTemplates extends CacheObject {}\n\nexport default new ProntoCache();\n", "import { action, observable, runInAction } from 'mobx';\nimport type {\n GeneralCustomerResponse,\n GraphData,\n PieChartData,\n ResponseBase,\n TopClients\n} from 'tm3-core/api.dtos';\nimport {\n AlertSearchRequest,\n CustomerRequest,\n DashboardListRequest,\n DashboardResponse\n} from 'tm3-core/api.dtos';\n\nimport { Colours } from 'bz-core-controls/styles/report-colours';\nimport JsonServiceClient from 'bz-stores/lib/JsonServiceClient';\nimport popovers from 'bz-stores/lib/diary-popover-store';\nimport CacheStore from 'bz-utilities/modules/stores/cached-map-store';\nimport _ from 'lodash';\nimport moment from 'moment';\nimport Api from 'tm3-core/api';\nimport LocationsStore from 'tm3-core/cache/stores/locations-store';\nimport EConfigKeys from 'tm3-core/enums/config-enum';\n\nconst colours = Object.values(Colours);\n\nclass DashboardStore {\n client = new JsonServiceClient('/api');\n locations = new LocationsStore();\n\n constructor() {}\n\n @observable dnas: GraphData[] = [];\n @observable dnaTotal: object = {};\n @observable cancellations: GraphData[] = [];\n @observable allAppointments: GraphData[] = [];\n @observable appointmentShare: PieChartData[] = [];\n @observable debt: object = {\n aged: []\n };\n @observable newPatientByType = [{}];\n @observable turnover = [{}];\n @observable topClients: TopClients[] = [];\n @observable appointmentStats: object = {\n total: 0,\n cancellations: {},\n dnas: {}\n };\n\n @observable points: boolean = true;\n @observable dashboard = {};\n @observable appointments: any[] = [];\n @observable selectedAppointment = {};\n @observable doNextOpen = false;\n @observable newPatients = [];\n @observable loadingMoreBottom = false;\n @observable futureDays = 3;\n @observable loadLimiter = 0;\n @observable currentDate = moment(new Date()).startOf('day').toDate();\n\n @observable showDoNextScreen: boolean;\n @observable user = {};\n @observable appointmentDoNext = {};\n @observable patientDoNext? = {};\n @observable loadingMoreTop: boolean;\n @observable active: boolean;\n @observable statusToggleActive: boolean;\n\n @action.bound\n async load() {\n this.showDoNextScreen = !!EConfigKeys.DONEXTENABLED;\n\n const { result: result } = await this.client.get('/dashboard');\n\n result.dnas[0].colour = 'rgba(255,255,255, 0.3)';\n result.dnas[0].borderColour = 'white';\n result.turnover[0].colour = 'rgba(255,255,255, 0.3)';\n result.turnover[0].borderColour = 'white';\n result.newPatients[0].colour = 'rgba(255,255,255, 0.3)';\n result.newPatients[0].borderColour = 'white';\n result.cancellations[0].colour = 'rgba(255,255,255, 0.3)';\n result.cancellations[0].borderColour = 'white';\n result.allAppointments[0].colour = 'rgba(255,255,255, 0.3)';\n result.allAppointments[0].borderColour = 'white';\n\n let j = 0;\n let { segments } = result.appointmentShare;\n let withColour = segments.map((s) => {\n s.colour = colours[j];\n j = j < segments.length ? j : 0;\n j++;\n return s;\n });\n let newPatientByType = result.newPatientByType.segments;\n j = 0;\n newPatientByType.map((s) => {\n s.colour = colours[j];\n j = j < newPatientByType.length ? j : 0;\n j++;\n return s;\n });\n runInAction(() => {\n this.newPatientByType = newPatientByType;\n\n const {\n dnas,\n dnaTotal,\n cancellations,\n allAppointments,\n appointmentShare,\n debt,\n turnover,\n topClients,\n appointmentStats,\n newPatients\n } = result;\n\n this.dnas = dnas;\n this.dnaTotal = dnaTotal;\n this.cancellations = cancellations;\n this.allAppointments = allAppointments;\n this.appointmentShare = appointmentShare;\n this.debt = debt;\n this.turnover = turnover;\n this.topClients = topClients;\n this.appointmentStats = appointmentStats;\n\n this.newPatients.replace(newPatients);\n });\n }\n\n setLocationUserId(location, practitionerId) {\n return (this.user = {\n user: { location, practitionerId }\n });\n }\n\n @action.bound\n doNextPrompt(apptId) {\n if (this.showDoNextScreen) {\n const appointment = (this.appointments || []).filter((x) => x.id === parseInt(apptId));\n if (appointment[0] != null) {\n this.appointmentDoNext = appointment[0];\n return this.setPatientForDoNext(appointment[0].customerId).then(() => {\n return (this.doNextOpen = true);\n });\n }\n }\n }\n\n setPatientForDoNext(patientId) {\n return this.client\n .get(new CustomerRequest(), patientId)\n .then((res: ResponseBase) => {\n const patient = res.result != null ? res.result : undefined;\n return (this.patientDoNext = patient);\n });\n }\n\n closePopover() {\n return (this.doNextOpen = false);\n }\n\n @action.bound\n async loadAppointments(initialLoad = false) {\n if (\n this.loadingMoreBottom ||\n !this.user ||\n ((initialLoad === true && this.appointments) ?? [].length === 0) ||\n initialLoad === false\n ) {\n const currentDate = moment(this.currentDate);\n const startDate = currentDate.toDate();\n const endDate = currentDate.clone().add(this.futureDays, 'days').toDate();\n\n this.loadingMoreBottom = true;\n const req = new DashboardListRequest({\n startDate: startDate.toISOString(),\n endDate: endDate.toISOString()\n });\n const res: any[] = await this.client.post(req);\n\n runInAction(() => {\n let appointments: any[] = this.appointments || [];\n\n const idsNotToInclude = res.map((y) => y.id);\n appointments = appointments.filter((x) => !idsNotToInclude.includes(x.id));\n appointments = _.union(appointments, res);\n this.currentDate =\n res.length > 0\n ? moment(res[res.length - 1].endDateTime)\n .add(1, 's')\n .toDate()\n : endDate;\n this.appointments = appointments;\n this.loadingMoreBottom = false;\n this.loadingMoreTop = false;\n });\n }\n }\n\n selectAppointment(appt) {\n appt.location = this.locations.All.filter({ id: appt.locationId }).value()[0];\n return new Promise((resolve, reject) => {\n if (appt.customerId > 0 && !appt.patient) {\n this.client.get('/customers', appt.customerId).then((res) => {\n appt.patient = res;\n this.selectedAppointment = appt;\n popovers.selected = appt;\n resolve(appt);\n });\n } else {\n this.selectedAppointment = appt;\n popovers.selected = appt;\n resolve(appt);\n }\n });\n }\n\n @action.bound\n async refreshAlerts(id) {\n if (!id) {\n return;\n }\n\n const appointments = this.appointments;\n const discriminatorType = 'A';\n let existing = _.find(appointments, { id: parseInt(id) });\n if (!existing) {\n existing = _.find(appointments, { customerId: parseInt(id) });\n }\n if (!existing) {\n return;\n }\n\n const req = new AlertSearchRequest({\n objectId: existing.id,\n discriminatorType: 'A'\n });\n\n let res = await this.client.post(req);\n existing.alerts = (res != null ? res : undefined) || [];\n let idx = _.findIndex(appointments, (x) => x.id === existing.id);\n appointments.splice(idx, 1, existing);\n runInAction(() => {\n this.appointments = appointments;\n });\n }\n\n refreshAppointmentAuth(id, authLeft) {\n let appointments = this.appointments;\n const existing = _.find(appointments, { id });\n if (existing) {\n existing.authLeft = authLeft;\n this.refreshAppointment(id, existing);\n }\n }\n\n @action.bound\n async refreshAppointment(id, appt = null) {\n id = parseInt(id);\n if (!!appt) {\n id = appt.id;\n }\n let appointments = this.appointments;\n const existing = _.find(appointments, { id });\n\n if (appt) {\n if (existing) {\n appt.startDateTime = moment(appt.startDateTime).format('YYYY-MM-DDTHH:mm');\n appointments = (this.appointments || []).filter((x) => x.id !== appt.id);\n appointments = appointments.concat(appt);\n this.appointments = _.sortBy(appointments, 'startDateTime');\n return;\n } else {\n appointments.push(appt);\n this.appointments = _.sortBy(appointments, 'startDateTime');\n return;\n }\n }\n\n if (!existing) {\n return;\n }\n\n const req = new DashboardListRequest({\n startDate: moment(existing.startDateTime).startOf('day').toDate().toISOString(),\n endDate: moment(existing.endDateTime).startOf('day').toDate().toISOString()\n });\n let res = await this.client.post(req);\n appointments = _.reject(this.appointments || [], (x) => _.includes(_.map(res, 'id'), x.id));\n appointments = _.union(appointments, res);\n runInAction(() => {\n this.appointments = _.sortBy(appointments, 'startDateTime');\n });\n }\n\n @action.bound\n deleteAppointmentOrEvent(apptId): void {\n let id = parseInt(apptId);\n\n const existing = _.find(this.appointments, { id });\n\n if (existing) {\n const latestAppointments = (this.appointments || []).filter((x) => x.id !== id);\n this.appointments = _.sortBy(latestAppointments, 'startDateTime');\n }\n }\n\n @action.bound\n deleteRecurringAppointmentsOrEvents(apptDeleteResp: any): void {\n if (!apptDeleteResp) {\n return;\n }\n let apptIds: number[] = [];\n\n for (const key in apptDeleteResp) {\n var sessions = apptDeleteResp[key];\n apptIds.push(...sessions.map((appt) => appt.id));\n }\n\n const latestAppointments = (this.appointments || []).filter((x) => !apptIds.includes(x.id));\n this.appointments = _.sortBy(latestAppointments, 'startDateTime');\n }\n\n @action.bound\n storeCurrentTab(currentTab, statusToggleActive) {\n if (currentTab != null) {\n this.active = currentTab;\n }\n if (statusToggleActive != null) {\n return this.statusToggleActive;\n }\n }\n}\n\nexport default new DashboardStore();\n", "// FROM http://mcg.mbitson.com/#!?lightBlue=%2347b3e6&blue=%234483c4&blueGrey=%23677789&grey=%23323f4d&turq=%23356e7b&green=%2325ab6a&red=%23f22613&purple=%238f5fa0&yellow=%23f4ab34&orange=%23e65100&themename=tm3\nconst colours = {\n lightBlue500: '#47b3e6',\n green500: '#25ab6a',\n red500: '#ef5350',\n purple500: '#8f5fa0',\n yellow500: '#f4ab34',\n blue500: '#4483c4',\n blueGrey500: '#677789',\n lightGreen500: '#cddc39',\n grey500: '#323f4d',\n orange500: '#e65100',\n turq500: '#356e7b',\n\n lightBlue900: '#208bd5',\n green900: '#0d803c',\n red900: '#e42927',\n purple900: '#603273',\n yellow900: '#ec8015',\n blue900: '#1f53a2',\n blueGrey900: '#394759',\n lightGreen900: '#aec517',\n grey900: '#131b25',\n orange900: '#d52700',\n turq900: '#163f4b',\n\n lightBlue300: '#7ecaee',\n green300: '#66c497',\n red300: '#f48785',\n purple300: '#b18fbd',\n yellow300: '#f7c471',\n blue300: '#7ca8d6',\n blueGrey300: '#95a0ac',\n lightGreen300: '#dce774',\n grey300: '#707982',\n orange300: '#ee854d',\n turq300: '#729aa3'\n};\n\nexport default colours;\nexport { colours };\nexport { colours as Colours };\nexport { colours as Colors }; //material-ui replacement\n", "import { action, observable, runInAction } from 'mobx';\n\nimport cache from 'bz-stores/lib/diary-cache-store';\nimport view from 'bz-stores/lib/diary-view-store';\nimport Locks from 'bz-stores/lib/locks';\nimport BaseStore from 'bz-stores/mobx/base-store';\nimport {\n type AppointmentResponse,\n DiaryListRequest,\n DiaryListResponse,\n type GeneralCustomerResponse\n} from 'tm3-core/api.dtos';\n\nexport enum EActivePopover {\n cancellation = 'cancellation',\n doNext = 'doNext',\n none = 'none',\n quickbill = 'quickbill',\n event = 'event'\n}\n\nexport interface ICancellationOptions {\n id: number;\n mandatory: boolean;\n deleteCase: boolean;\n}\n\nexport interface IQuickbillOptions {\n id: number;\n status: number;\n deleteCase: boolean;\n mandatory: boolean;\n}\n\nclass DiaryPopoverStore {\n @observable activePopover: EActivePopover = EActivePopover.none;\n @observable anchorEl: HTMLElement | null = null;\n @observable selected = null;\n @observable appointmentDoNext = null;\n @observable patientDoNext = null;\n @observable quickbillOptions: Partial = {};\n @observable cancellationOptions: Partial = {};\n @observable callback?: (() => void) | null = null;\n @action\n showPopoverForCustomer(appt: AppointmentResponse, customer: GeneralCustomerResponse) {\n const {\n reference,\n mobileTelephone,\n email,\n smsEnabled,\n title,\n forename,\n surname,\n gender,\n insuranceNumber,\n groupReference,\n status,\n registrationDate\n } = customer;\n const mapped = {\n customerReference: reference,\n customerMobileTelephone: mobileTelephone,\n customerEmail: email,\n customerSMSEnabled: smsEnabled,\n customerTitle: title,\n customerForename: forename,\n customerSurname: surname,\n customerGender: gender,\n insuranceNumber: insuranceNumber,\n groupReference: groupReference,\n customerStatus: status,\n customerRegistrationDate: registrationDate\n };\n return this.showPopover(EActivePopover.event, new DiaryListResponse({ ...mapped, ...appt }));\n }\n\n @action\n showPopover(\n activePopover: EActivePopover,\n appt: any,\n selection?: HTMLElement,\n callback?: () => void\n ) {\n let { allRooms, allLocations, allPractitioners } = cache;\n appt.room = allRooms.find((x) => x.id === appt.roomId);\n appt.location = allLocations.find((x) => x.id === appt.locationId);\n appt.practitioner = allPractitioners.find((x) => x.id === appt.practitionerId);\n appt.apptStockColour = appt.hexColour;\n\n if (selection) this.anchorEl = selection;\n this.activePopover = activePopover;\n this.selected = appt;\n this.callback = callback;\n }\n\n @action.bound\n hidePopover() {\n let _active = this.activePopover;\n let promise = !!this.selected\n ? Locks.actions.releaseLock('A', this.selected.id)\n : Promise.resolve();\n\n promise.finally(() => {\n this.selected = null;\n if (_active !== this.activePopover) {\n return;\n }\n\n this.callback?.();\n\n runInAction(() => {\n this.activePopover = EActivePopover.none;\n this.anchorEl = null;\n this.selected = null;\n this.callback = null;\n });\n });\n }\n\n @action\n doNextPrompt(appointment, patient) {\n if (!view.showDoNextScreen) return;\n // appointment = (@get('appointments') || []).filter((x) -> x.id is parseInt(apptId))\n // return unless appointment[0]?\n this.appointmentDoNext = appointment;\n this.patientDoNext = patient;\n this.activePopover = EActivePopover.doNext;\n }\n\n @action\n quickbill(id: number, status: number, deleteCase: boolean, mandatory?: boolean) {\n this.activePopover = EActivePopover.quickbill;\n this.quickbillOptions = { id, status, deleteCase, mandatory };\n }\n\n @action\n cancellation(id: number, mandatory: boolean, deleteCase: boolean) {\n this.activePopover = EActivePopover.cancellation;\n this.cancellationOptions = { id, mandatory, deleteCase };\n }\n}\n\nexport default new DiaryPopoverStore();\n", "// This is a hack store to allow us to slowly\n// remove functionality from the exim store\n// This will need to be an instance in time loaded by the user id\nimport { computed, observable } from 'mobx';\nimport z from 'z';\n\nimport { RoomResponse } from 'tm3-core/api.dtos';\nimport type {\n GeneralPractitionerResponse,\n LocationResponse,\n PractitionerLocation\n} from 'tm3-core/api.dtos';\nimport { cache } from 'tm3-core/cache';\nimport EPractitionerStatus from 'tm3-core/interfaces/practitioner/enums/status';\n\nclass DiaryCacheStore {\n @computed\n get noRoom(): RoomResponse {\n return new RoomResponse({ description: z.format('No {Room} Assigned'), id: -2 });\n }\n\n @computed\n get loaded(): boolean {\n return cache.locations.loaded && cache.practitioners.loaded && cache.rooms.loaded;\n }\n\n @computed\n get allLocations(): LocationResponse[] {\n return cache.locations.All;\n }\n\n @computed\n get currentLocations(): LocationResponse[] {\n return cache.locations.CurrentLocations;\n }\n\n @computed\n get allRooms(): RoomResponse[] {\n return [this.noRoom, ...cache.rooms.Current];\n }\n\n @computed\n get allPractitioners(): GeneralPractitionerResponse[] {\n return cache.practitioners.All;\n }\n\n @computed\n get activePractitioners(): GeneralPractitionerResponse[] {\n return cache.practitioners.All.filter((x) => {\n return x.status !== EPractitionerStatus.inactive;\n });\n }\n\n @computed\n get allPractitionerLocations(): PractitionerLocation[] {\n return cache.practitionerLocations.All;\n }\n\n onLoad(): void {\n // do nothing\n }\n}\n\nconst GlobalDiaryCacheStore = new DiaryCacheStore();\n\nexport default GlobalDiaryCacheStore;\n", "enum EPractitionerStatus {\n allActive = -2,\n inactive = 0,\n active = 1,\n payAsYouGo = 2\n}\n\nexport default EPractitionerStatus;\n", "import BaseStore from 'bz-stores/mobx/base-store';\nimport type { IEvent } from 'bz-utilities/modules/plugins/register/stores/mediator';\nimport { action, autorun, computed, observable, observe, runInAction } from 'mobx';\nimport type { IReactionDisposer, Lambda } from 'mobx';\nimport Moment from 'moment';\nimport Api from 'tm3-core/api';\nimport { AppointmentGetRequest, DiaryRequest, MonthlyScheduleRequest } from 'tm3-core/api.dtos';\nimport type {\n AppointmentDetailsResponse,\n DiaryDefaultDataForUserResponse,\n GeneralPractitionerResponse,\n ResourceMode\n} from 'tm3-core/api.dtos';\nimport { MonthlyScheduleResponse } from 'tm3-core/api.dtos';\nimport { cache } from 'tm3-core/cache';\nimport { ConfigObservable } from './config';\nimport DiaryCacheStore from './diary-cache-store';\nimport Resources from './diary-view-store/enums/resources';\nimport CalendarDisplay from './enums/calendar-display';\nimport ScheduleStore from './schedule-store';\n\nexport enum ETimeFormat {\n h12 = '12h',\n h24 = '24h'\n}\n\nexport enum EMode {\n appointment = 'appointment',\n event = 'event',\n session = 'session'\n}\n\nexport class DiaryViewStoreType {\n [key: string]: any;\n @observable lsPrefix = '';\n @observable mode: EMode = EMode.appointment;\n @observable isWeek = false;\n @observable calendarDisplay: CalendarDisplay = CalendarDisplay.Day;\n @observable monthOverview: MonthlyScheduleResponse = new MonthlyScheduleResponse();\n @observable hideDayWeekSelector = false;\n @observable timeFormat: ETimeFormat = ETimeFormat.h24;\n @observable privacy = false;\n @observable interval = 15;\n @observable resourceMode: Resources = Resources.practitioner;\n @observable cancellations = false;\n @observable location = -1;\n @observable rooms = observable.array([-2]);\n @observable readonly practitioners = observable.array([]);\n @observable date: string = new Date().toJSON();\n @observable currentTime = new Date();\n @observable processing = true;\n @observable withoutSessions = true;\n @observable weekends = false;\n @observable compressed = true;\n @observable showCalendarSidebar = false;\n @observable pinCalendar = false;\n @observable locationPractitioners = {};\n @observable statsKeys = [];\n @observable loaded: boolean = false;\n\n //hack for appt selection\n @observable target = '';\n\n //hacked back prop to stop double fetch\n //investigate computed setters to solve this\n @observable _location: number | undefined = -1;\n\n @observable readonly _practitioners = observable.array([]);\n\n onClearSelection?: () => void;\n\n private _disposers: (IReactionDisposer | Lambda)[] = [];\n private configDisposer?: Lambda;\n private lastFetchDate?: Moment.Moment;\n\n constructor() {\n //sync update with the minute\n let delay = (60 - new Date().getSeconds()) * 1000;\n setTimeout(() => {\n this.currentTime = new Date();\n setInterval(() => {\n this.currentTime = new Date();\n }, 60000);\n }, delay);\n }\n\n @action.bound\n async onLoad(userId?: number): Promise {\n if (userId !== undefined && userId > 0) {\n this.lsPrefix = userId.toString();\n }\n\n const res = await BaseStore.defaultClient.post(new DiaryRequest({}));\n\n runInAction(() => {\n this._onLoad(res);\n this.loaded = true;\n });\n }\n\n async onReload(userId?: number): Promise {\n //temp hack until ui refactor\n this._disposers.forEach((fn) => {\n fn();\n });\n await this.onLoad(userId);\n }\n\n @action.bound\n hideDayWeekSelection(): void {\n if (!this.allowAllPractitionerWeekView) {\n if (this.practitioners.length > 1) {\n this.isWeek = false;\n this.hideDayWeekSelector = true;\n }\n if (this.practitioners.length === 1) {\n this.hideDayWeekSelector = false;\n }\n }\n }\n\n @action.bound\n verifyResources(locationId?: number) {\n let { allRooms, allPractitionerLocations } = DiaryCacheStore;\n const loc = locationId || this._location;\n\n let availRooms = allRooms.filter((x) => x.locationId === loc).map((x) => x.id);\n\n this.rooms.replace(this.getStorage(`roomLocations-${this.location}`, this.rooms));\n\n let availPract = allPractitionerLocations\n .filter((x) => x.locationId === loc)\n .map((x) => x.practitionerId);\n availPract = this.intersect(\n this._practitioners.map((x) => x.id),\n this.intersect(this.activePractitioners, availPract)\n );\n\n const practitionerLocationsResult = this.getStorage(\n `practitionerLocations-${this.location}`,\n this.practitioners.slice()\n );\n const plr = Array.isArray(practitionerLocationsResult)\n ? practitionerLocationsResult\n : [practitionerLocationsResult];\n let _pract = availPract.length > 0 ? this.intersect(availPract, plr) : plr;\n let _rooms = this.intersect(availRooms, this.rooms);\n if (_rooms.length === 0) {\n _rooms = [-2];\n }\n if (_pract.length === 0 && availPract.length > 0) {\n _pract = [availPract[0]];\n }\n\n this.rooms.replace(_rooms);\n this.practitioners.replace(_pract);\n\n if (loc != this._location) {\n this._location = locationId;\n }\n }\n\n @action\n _onLoad(diary: DiaryDefaultDataForUserResponse) {\n const { isClick } = process.env;\n const isPhone = !!window.mobileDetection.mobile();\n\n const defaultLocation = !!diary.currentLocation\n ? diary.currentLocation.id\n : this._location || 1;\n\n this._location = this.getStorage('location', defaultLocation);\n\n this._practitioners.replace(diary.practitioners);\n\n this._disposers.forEach((fn) => {\n fn();\n });\n const defaultToWeek = isClick && !isPhone;\n this._disposers = [\n this.applyStorage('isWeek', defaultToWeek),\n this.applyStorage(\n 'calendarDisplay',\n defaultToWeek ? CalendarDisplay.Week : CalendarDisplay.Day\n ),\n this.applyStorage('weekends', isClick),\n this.applyStorage('timeFormat', isClick ? '12h' : '24h'),\n this.applyStorage('date', new Date()),\n this.applyStorage('rooms', [diary.currentRoom.id]),\n this.applyStorage('privacy', false),\n this.applyStorage('interval', 15),\n this.applyStorage('location', defaultLocation),\n this.applyStorage('resourceMode', 'practitioner'),\n this.applyStorage(\n 'practitioners',\n diary.currentPractitioner ? [diary.currentPractitioner.id] : []\n ),\n this.applyStorage('cancellations', true),\n this.applyStorage('withoutSessions', true),\n autorun(this.onFetch.bind(this, false)),\n (this.configDisposer = observe(ConfigObservable.configMap, (change) => {\n if (change.name === 'ALLOWALLPRACTWEEKVIEW') {\n this.hideDayWeekSelection();\n }\n }))\n ];\n\n const doVerify = () => {\n runInAction(() => {\n this.verifyResources();\n });\n this._disposers.push(\n observe(this, 'location', (change) => {\n runInAction(() => {\n this.verifyResources(change.newValue);\n });\n })\n );\n };\n\n if (cache.practitionerLocations.loaded) doVerify();\n else\n this._disposers.push(\n observe(cache.practitionerLocations, 'loaded', () => {\n doVerify();\n })\n );\n }\n\n intersect(available: T[], current: T[]): T[] {\n const all = new Set(available);\n const sub = new Set(current);\n return [...all].filter((x) => sub.has(x));\n }\n\n applyStorage(key: string, fallback: any) {\n this[key] = this.getStorage(key, fallback);\n\n return autorun(() => {\n let val: any = this[key];\n let result = !!val?.toJS ? val.toJS() : val;\n if (!!sessionStorage.getItem('diary-restore')) {\n return;\n }\n localStorage[this.lsPrefix + key] = JSON.stringify(result);\n });\n }\n\n getStorage(key: string, fallback: any) {\n var result = localStorage[this.lsPrefix + key];\n if (typeof result !== 'string' || result === '') {\n return fallback;\n }\n\n try {\n result = JSON.parse(result);\n } catch (err) {\n /*supress catch & fallback to string*/\n }\n\n return result;\n }\n\n @computed\n get getConfig(): Record {\n const { config } = ConfigObservable;\n const diaryPrintState = localStorage.getItem('diaryPrintState');\n\n if (diaryPrintState !== null) {\n const lsConfig: Record | null = JSON.parse(diaryPrintState);\n return lsConfig != null ? lsConfig : config;\n }\n\n return config;\n }\n\n @computed\n get activePractitioners(): number[] {\n return DiaryCacheStore.allPractitioners.filter((x) => x.status !== 0).map((x) => x.id);\n }\n\n @computed\n get workingWeekDays(): number {\n return parseInt(this.getConfig['WORKINGWEEKDAYS']);\n }\n\n @computed\n get allowAllPractitionerWeekView(): boolean {\n return (this.getConfig['ALLOWALLPRACTWEEKVIEW'] || '').toLowerCase() === 'y';\n }\n\n @computed\n get firstDayOfWeek(): number {\n return parseInt(this.getConfig['FIRSTDAYOFWEEK']);\n }\n\n @computed\n get todayLine(): boolean {\n return (this.getConfig['SHOWDIARYTODAYLINE'] || '').toLowerCase() === 'true';\n }\n\n @computed\n get showDoNextScreen(): boolean {\n return (this.getConfig['DONEXTENABLED'] || '').toLowerCase() === 'true';\n }\n\n @computed\n get multiDay(): boolean {\n return Math.log2(this.workingWeekDays) % 1 > 0;\n }\n\n @action.bound\n setDiarySessionMode(practitionerId: number, locationId: number, userId: number) {\n if (!this.loaded) {\n this.onLoad(userId);\n }\n let _cache = Object.assign({}, this);\n _cache._practitionerId = practitionerId;\n sessionStorage.setItem('diary-restore', JSON.stringify(_cache));\n\n this.practitioners.replace([practitionerId]);\n this._location = locationId;\n this.location = locationId;\n this.mode = EMode.session;\n this.interval = 60;\n this.withoutSessions = true;\n this.isWeek = true;\n\n this.onFetch();\n }\n\n @action.bound\n restoreDiaryMode(): void {\n let json = sessionStorage.getItem('diary-restore');\n if (this.mode !== EMode.session) {\n return;\n }\n let restore = JSON.parse(json || '{}');\n restore.mode = 'appointment';\n\n sessionStorage.removeItem('diary-restore');\n\n Object.keys(restore).map((key) => {\n if (key.indexOf('_') === 0) {\n return;\n }\n this[key] = restore[key];\n });\n }\n\n onFetch(isAutoRefresh = false): void {\n let { date, isWeek, resourceMode, weekends, _location, withoutSessions } = this;\n if (![Resources.room, Resources.practitioner, Resources.list].includes(resourceMode)) return;\n\n //allows fetch when config changes\n let firstDay = this.firstDayOfWeek;\n let workingDays = this.workingWeekDays;\n if (!firstDay || !workingDays) return;\n //-------------------------------\n this.processing = true;\n this.lastFetchDate = Moment();\n\n let resourceIds = resourceMode === 'room' ? this.rooms : this.practitioners;\n if (process.env.isClick) {\n if (resourceIds.length === 0) {\n resourceIds =\n this.activePractitioners.length > 0\n ? observable.array(this.activePractitioners)\n : observable.array([1]);\n }\n }\n\n if (this.calendarDisplay === CalendarDisplay.Month) {\n BaseStore.defaultClient\n .post(\n new MonthlyScheduleRequest({\n date: date,\n mode: resourceMode as unknown as ResourceMode,\n location: _location,\n resourceIds: resourceIds,\n autoRefresh: isAutoRefresh,\n showCancellations: this.cancellations\n })\n )\n .then(\n action((res) => {\n this.monthOverview = res.result;\n this.processing = false;\n })\n );\n return;\n }\n\n const request = {\n date: date,\n isWeek: isWeek,\n mode: resourceMode,\n location: _location,\n showWeekends: weekends,\n resourceIds: resourceIds,\n withoutSessions: withoutSessions\n };\n\n const queryString = !!isAutoRefresh ? '?autoRefresh=true' : '';\n Api.post('/api/diary/schedule' + queryString, request).then(\n action((res) => {\n this.statsKeys = res.body.result.keys;\n ScheduleStore.onLoad(res.body.result);\n cache.mediator.publish(new DiaryFetchEvent());\n this.processing = false;\n })\n );\n }\n\n @action.bound\n onUnload(): void {\n this.mode = EMode.appointment;\n this._disposers.forEach((fn) => {\n fn();\n });\n }\n\n @action.bound\n async _getAppt(apptId: number): Promise {\n const { result } = await BaseStore.defaultClient.get(new AppointmentGetRequest({ id: apptId }));\n\n return result;\n }\n\n @action.bound\n async moveToAppt(apptId: number): Promise {\n const { result } = await BaseStore.defaultClient.get(new AppointmentGetRequest({ id: apptId }));\n\n runInAction(() => {\n this.location = result.locationId;\n this.practitioners.replace([result.practitionerId]);\n this.date = Moment(result.startDateTime).toDate();\n });\n\n return result;\n }\n\n @action.bound\n protected _moveToAppt(appt: AppointmentDetailsResponse): void {\n this.location = appt.locationId;\n if (!this.practitioners.includes(appt.practitionerId)) {\n if (this.practitioners.length > 1) this.practitioners.push(appt.practitionerId);\n else this.practitioners.replace([appt.practitionerId]);\n }\n this.date = Moment(appt.startDateTime).toDate();\n }\n\n @action.bound\n async navigateToAppt(apptId: number): Promise {\n this.target = `evt-appt-${apptId}`;\n\n const res = await this._getAppt(apptId);\n\n this._moveToAppt(res);\n }\n}\n\nexport { default as Resources } from './diary-view-store/enums/resources';\nconst DiaryViewStore = new DiaryViewStoreType();\nexport default DiaryViewStore;\n\nexport class DiaryFetchEvent implements IEvent {\n public constructor(init?: Partial) {\n (Object as any).assign(this, init);\n }\n}\n", "enum DiaryResources {\n classes = 'classes',\n practitioner = 'practitioner',\n room = 'room',\n list = 'list'\n}\n\nexport default DiaryResources;\n", "enum CalendarDisplay {\n Day = 'Day',\n Week = 'Week',\n Month = 'Month'\n}\n\nexport default CalendarDisplay;\n", "import { action, extendObservable, observable } from 'mobx';\n\nimport _ from 'lodash';\n\nimport { MonthlyScheduleResponse } from 'tm3-core/api.dtos';\n\nimport type {\n Schedule,\n ScheduleAppointment,\n ScheduleBlock,\n ScheduleResponse,\n ScheduleSession\n} from 'tm3-core/api.dtos';\n\nexport type TMode = 'appointments' | 'sessions';\n\nexport interface IMergable {\n onMerge(value: T): void;\n}\n\nexport class BlockStore {\n @observable count = 0;\n @observable holiday = false;\n @observable readonly keys = observable.array([]);\n @observable readonly resources = observable.map(new Map());\n @observable readonly monthlySummary = observable.object({});\n\n @action.bound\n onMerge(props: ScheduleBlock): void {\n this.count = props.count;\n this.holiday = props.holiday;\n this.keys.replace(props.keys);\n this.mergeResources(props.keys, props.values);\n }\n\n @action.bound\n private mergeResources(keys: string[], newResources: Record): void {\n const { resources } = this;\n keys.forEach((key, i) => {\n const lResorces = resources.has(key) ? resources : resources.set(key, new ResourceStore());\n lResorces.get(key)!.onMerge(newResources[key]);\n });\n }\n}\n\nexport class ResourceStore {\n @observable id = 0;\n @observable name = '';\n @observable readonly sessions = observable.map>(new Map());\n @observable readonly appointments = observable.map>(\n new Map()\n );\n\n @action.bound\n onMerge(props: Schedule): void {\n this.id = props.id;\n this.name = props.name;\n this.mergeAppointments(props.appointments);\n this.mergeSessions(props.sessions);\n }\n\n @action.bound\n private mergeSessions(newSessions: Record): void {\n const { sessions } = this;\n Object.entries(newSessions).forEach(([key, value]) => {\n const lSessions = sessions.has(key) ? sessions : sessions.set(key, new EventStore());\n lSessions.get(key)!.onMerge(value);\n });\n }\n\n @action.bound\n private mergeAppointments(newAppointments: Record): void {\n const { appointments } = this;\n Object.entries(newAppointments).forEach(([key, value]) => {\n const lAppointments = appointments.has(key)\n ? appointments\n : appointments.set(key, new EventStore());\n lAppointments.get(key)!.onMerge(value);\n });\n }\n}\n\nexport class EventStore {\n @action.bound\n onMerge(props: T) {\n const keys = Object.keys(this);\n if (!!keys.length) {\n const rest: Partial = {};\n Object.keys(props).map((key) => {\n if (keys.includes(key)) {\n (this as unknown as T)[key as keyof T] = props[key as keyof T];\n } else {\n rest[key as keyof T] = props[key as keyof T];\n }\n });\n extendObservable(this, rest);\n } else {\n extendObservable(this, props);\n }\n }\n}\n\nexport class ScheduleStore {\n @observable count = 0;\n @observable columns = 0;\n @observable readonly keys = observable.array([]);\n @observable readonly blocks = observable.map(new Map());\n\n @action.bound\n onLoad(res: ScheduleResponse): void {\n this.count = res.count;\n this.columns = res.columns;\n this.keys.replace(res.keys);\n\n const { blocks } = this;\n blocks.clear();\n res.keys.forEach((key) => {\n const lBlocks = blocks.has(key) ? blocks : blocks.set(key, new BlockStore());\n lBlocks.get(key)!.onMerge(res.blocks[key]);\n });\n }\n\n getBlock(block: number): BlockStore | undefined {\n return this.blocks.get(this.keys[block]);\n }\n\n getBlockByKey(key: string): BlockStore | undefined {\n return this.blocks.get(key);\n }\n\n getResource(block: number, resource: number): ResourceStore | null {\n const res = this.getBlock(block);\n //hack for inverted render\n //remove when fixed\n if (!res) {\n return null;\n }\n const keys = res.keys;\n if (resource >= keys.length) {\n return null;\n }\n return res.resources.get(keys[resource]) ?? null;\n }\n\n getResourceByKey(blockKey: string, resourceKey: string): ResourceStore | null {\n const res = this.getBlockByKey(blockKey);\n if (!res) {\n return null;\n }\n //hack for inverted render\n //remove when fixed\n const val = res.resources.get(resourceKey);\n if (!val) {\n return null;\n }\n return val;\n }\n\n private _onChangeMap(obj, key: string) {\n const map = {};\n\n Object.keys(obj).forEach((blockId) => {\n const block = obj[blockId];\n block.forEach((evt) => {\n map[evt.scheduleId] = { block: blockId, resource: evt[key] };\n });\n });\n\n return map;\n }\n\n //This method needs modded to be more efficient\n @action.bound\n onMerge(mode: TMode, key: string, obj) {\n const map = this._onChangeMap(obj, key);\n\n this.keys.forEach((blockId) => {\n const block = this.getBlockByKey(blockId);\n if (!block) return;\n\n const group = _.groupBy(obj[blockId], key);\n let b: Set;\n block.keys.forEach((resId) => {\n const resource = this.getResourceByKey(blockId, resId)?.[mode];\n if (!resource) return;\n\n const a = new Set(resource.keys());\n b = b ?? new Set(Object.keys(map));\n const intersection = new Set([...a].filter((x) => b.has(x)));\n\n intersection.forEach((x) => {\n if (map[x].block === blockId && map[x].resource === resId) {\n return;\n }\n resource.delete(x);\n });\n\n let evts: Record | EventStore> =\n {};\n group[resId]?.forEach((x: ScheduleSession & ScheduleAppointment) => {\n const evt = resource.get(x.scheduleId) ?? new EventStore();\n evt.onMerge(x);\n\n evts[x.scheduleId] = evt;\n });\n resource.merge(evts);\n });\n });\n }\n\n // @action\n // onMerge(mode, key, obj) {\n // this.keys.forEach((block) => {\n // if (!obj[block]) {return}\n // let group = _.groupBy(obj[block], key)\n // Object.keys(group).forEach((resId) => {\n // let list = this.getResourceByKey(block, resId).get(mode)\n // group[resId].map((x) => {\n // list.set(x.scheduleId, x)\n // })\n // })\n // })\n // }\n\n @action\n onRemove(mode: TMode, key: string, obj): void {\n if (!obj) {\n return;\n }\n\n this.keys.forEach((block) => {\n if (!obj[block]) {\n return;\n }\n const group = _.groupBy(obj[block], key);\n Object.keys(group).forEach((resId) => {\n const list = this.getResourceByKey(block, resId)?.[mode];\n group[resId].forEach((x) => {\n list?.delete(x.scheduleId);\n });\n });\n });\n }\n}\n\nconst GlobalScheduleStore = new ScheduleStore();\n\nexport default GlobalScheduleStore;\n", "import Exim from 'exim';\nimport Api from 'tm3-core/api';\n\nexport default Exim.createStore({\n actions: ['requestLock', 'releaseLock', 'appointmentIsSame', 'clearAllForUser'],\n\n initial: {\n lock: false,\n needsRefresh: false,\n caseIsLocked: false\n },\n\n appointmentIsSame(appointment) {\n //Diary.set(processing:true)\n const appt = {\n id: appointment.id,\n startDateTime: appointment.actualStartDateTime || appointment.startDateTime,\n endDateTime: appointment.actualEndDateTime || appointment.endDateTime,\n status: appointment.status,\n practitionerId: appointment.practitionerId,\n locationId: appointment.locationId,\n roomId: appointment.roomId,\n type: appointment.type,\n name: appointment.name,\n description: appointment.description || appointment.comment\n };\n\n return Api.post('/api/lock/same', appt).then((res) => {\n switch (res.body.result) {\n case '-1':\n return this.set({\n needsRefresh: true,\n lock: false\n });\n //Diary.set(processing:false)\n case '0':\n return this.set({\n needsRefresh: false,\n lock: true\n });\n //Diary.set(processing:false)\n default:\n return this.set({\n needsRefresh: false,\n lockUserName: res.body.result,\n lock: false\n });\n }\n });\n },\n //Diary.set(processing:false)\n\n requestLock(objectType, objectId) {\n return Api.post('/api/lock/request', { objectType, objectId }).then((res) => {\n if (res.body === false) {\n return this.set({\n lock: true\n });\n } else {\n const { id, userName, objectType } = res.body.result;\n return this.set({\n caseIsLocked: objectType.toUpperCase().trim() === 'H',\n lockUserId: id,\n lockUserName: userName\n });\n }\n });\n },\n\n releaseLock(objectType, objectId) {\n return Api.post('/api/lock/release', { objectType, objectId });\n },\n\n clearAllForUser() {\n return Api.post('/api/lock/release/user').then((res) => {\n return this.set({\n lock: false\n });\n });\n }\n});\n", "import { decorate, observable } from 'mobx';\n\nimport { LocationResponse } from 'tm3-core/api.dtos';\n\ndecorate(LocationResponse, {\n addressLine1: observable,\n addressLine2: observable,\n addressLine3: observable,\n addressLine4: observable,\n addressLine5: observable,\n cancelStockId: observable,\n directions: observable,\n dnaStockId: observable,\n email: observable,\n facilities: observable,\n fax: observable,\n fullAddressMultiLine: observable,\n id: observable,\n isMainLocation: observable,\n name: observable,\n onlineGuid: observable,\n postCode: observable,\n reminderTemplateEmail_TM3: observable,\n reminderTemplateSMS_TM3: observable,\n status: observable,\n telephone: observable,\n web: observable\n});\n\nexport default LocationResponse;\n", "import Exim from 'exim';\nimport _ from 'lodash';\nimport Api from 'tm3-core/api';\nimport { cache } from 'tm3-core/cache';\nimport ModuleEnum from 'tm3-core/licence';\nimport lazy from './lazy-loader';\n\nconst LabelAPI = {\n cache: {},\n\n loadAll() {\n return lazy('/api/sys/labels/all');\n },\n\n resetCache() {\n lazy.clear('/api/sys/labels/all');\n return lazy('/api/sys/labels/all');\n },\n\n get(label) {\n return this.loadAll().then(function (res) {\n let val = __guard__(\n _.filter(res.body.results, { id: label.toUpperCase() })[0],\n (x) => x.text\n );\n if (val == null) {\n val = label;\n }\n return val;\n });\n }\n};\n\nconst saveLabels = (labels) =>\n Api.post('/api/settings/labels/save', { labels }).then(() => {\n return LabelAPI.resetCache();\n });\nconst debouncedSave = _.debounce(saveLabels, 1000);\n\nexport default Exim.createStore({\n actions: ['loadAll', 'load', 'set', 'newLoad'],\n\n initial: {\n loadingLabels: true,\n labels: {},\n allLabels: [\n { id: 'ADDR1', niceName: 'Address:', text: 'Address:' },\n {\n id: 'ADDR2',\n niceName: 'Address 2:',\n text: 'Address 2:'\n },\n { id: 'ADDR3', niceName: 'Town:', text: 'Town:' },\n { id: 'ADDR4', niceName: 'County:', text: 'County:' },\n { id: 'ADDR5', niceName: 'Country:', text: 'Country:' },\n {\n id: 'ADDRPC',\n niceName: 'Postcode:',\n text: 'Postcode:'\n },\n {\n id: 'PATAREF',\n niceName: 'Alt Reference:',\n text: 'Alt Reference:'\n },\n {\n id: 'PATEMPLY',\n niceName: 'Employer:',\n text: 'Employer:',\n module: ModuleEnum.ContactsAdvanced\n },\n {\n id: 'PATHOSCD',\n niceName: 'Hospital Code:',\n text: 'Hospital Code:',\n module: ModuleEnum.ContactsAdvanced\n },\n {\n id: 'PATNICD',\n niceName: 'NI Number:',\n text: 'NI Number:',\n module: ModuleEnum.ContactsAdvanced\n },\n {\n id: 'PATPLCY',\n niceName: 'Policy No:',\n text: 'Policy No:',\n module: ModuleEnum.ContactsAdvanced\n }\n ]\n },\n\n load(label) {\n return LabelAPI.get(label).then((res) => {\n return this.set({ [label]: res });\n });\n },\n\n newLoad(label) {\n return LabelAPI.get(label).then((res) => {\n return res;\n });\n },\n\n loadAll() {\n this.set({ loadingLabels: true });\n return LabelAPI.loadAll().then((res) => {\n let allLabels = this.get('allLabels');\n\n for (let label of res.body.results) {\n const selected = _.filter(allLabels, { id: label.id })[0];\n if (selected != null) {\n selected.text = label.text;\n }\n }\n this.set({ allLabels });\n return this.set({ loadingLabels: false });\n });\n },\n\n set(label, value) {\n const allLabels = this.get('allLabels');\n const selected = _.filter(allLabels, { id: label })[0];\n if (selected != null) {\n selected.text = value;\n } else {\n allLabels.push({ id: label, value });\n }\n debouncedSave(allLabels);\n return this.set({\n allLabels,\n savingLabels: true\n });\n }\n});\n\nfunction __guard__(value, transform) {\n return typeof value !== 'undefined' && value !== null ? transform(value) : undefined;\n}\n", "enum ModuleEnum {\n AccountingIntegrations = 'Accounting Integrations',\n AccountManagement = 'Account Management',\n AppointmentBilling = 'Standard Appointment Billing',\n AutomationsHasHad = 'Automations Has Had',\n Classes = 'Classes',\n ClinicalServices = 'Clinical Services',\n CommunicationBasic = 'Communication (Basic)',\n CommunicationAdvanced = 'Communication (Advanced)',\n CommunicationEnhanced = 'Communication (Enhanced)',\n ConnectHideFromExplorer = 'Connect Hide From Explorer',\n ContactsBasic = 'Contacts (Basic)',\n ContactsAdvanced = 'Contacts (Advanced)',\n CreditBasedPackages = 'Credit Based Packages',\n CRMBasic = 'CRM (Basic)',\n CRMAdvanced = 'CRM (Advanced)',\n Dashboard = 'Dashboard',\n DiaryBasic = 'Diary (Basic)',\n DiaryAdvanced = 'Diary (Advanced)',\n DiaryEnhanced = 'Diary (Enhanced)',\n TreatmentAuthorisation = 'Treatment Authorisation',\n DiarySkills = 'Diary Skills',\n DigitalPrescriptions = 'Digital Prescriptions',\n ExerciseIntegrations = 'Exercise Integrations',\n FinanceBasic = 'Finance (Basic)',\n FinanceAdvanced = 'Finance (Advanced)',\n Forms = 'Forms',\n GarageServices = 'Garage Services',\n Healthcode = 'Healthcode Integration',\n MultiLocation = 'Multi Location',\n MyAccount = 'My Account Section',\n MyAccountInvoices = 'My Account Invoice',\n MyAccountSubscription = 'My Account Subscription Section',\n MyAccountContacts = 'My Account Contacts',\n OnlineBookingsBasic = 'Online Bookings (Basic)',\n OnlineBookingsAdvanced = 'Online Bookings (Advanced)',\n Optical = 'Optical',\n Packages = 'Packages and Subscriptions',\n PayPerClick = 'Pay Per Click',\n PostcodeLookup = 'Address/Postcode Lookup',\n ProntoReferrals = 'Pronto Referrals',\n QuickStartWizard = 'QuickStartWizard',\n ReceptionServices = 'Reception Services',\n ReportingBasic = 'Reporting (Basic)',\n ReportingAdvanced = 'Reporting (Advanced)',\n SecurityBasic = 'Security (Basic)',\n SecurityAdvanced = 'Security (Advanced)',\n SecurityEnhanced = 'Security (Enhanced)',\n SettingsBasic = 'Settings (Basic)',\n SettingsAdvanced = 'Settings (Advanced)',\n SMSBundles = 'SMS Bundles',\n SocialSignOn = 'Social Sign On',\n StockBasic = 'Stock (Basic)',\n StockAdvanced = 'Stock (Advanced)',\n SystemCredits = 'System Credits',\n TechnicalSupport = 'Technical Support (Basic)',\n TechnicalSupportAdvanced = 'Technical Support (Advanced)',\n Telehealth = 'Telehealth',\n TreatmentBasic = 'Treatment (Basic)',\n TreatmentAdvanced = 'Treatment (Advanced)',\n TreatmentEnhanced = 'Treatment (Enhanced)',\n Worksheets = 'Worksheets',\n TaxExemption = 'Tax Exemption'\n}\nexport default ModuleEnum;\n", "import Exim from 'exim';\nimport Api from 'tm3-core/api';\nimport lazy from './lazy-loader';\n\nexport default Exim.createStore({\n actions: ['load', 'refresh'],\n\n initial: {\n locations: []\n },\n\n load() {\n return lazy('/api/locations/all').then((res) => {\n return this.set({\n locations: res.body.results\n });\n });\n },\n\n refresh() {\n return Api.get('/api/locations/all').then((res) => {\n return this.set({\n locations: res.body.results\n });\n });\n }\n});\n", "import Exim from 'exim';\nimport _ from 'lodash';\nimport lazy from './lazy-loader';\n\nconst LookupsAPI = {\n loadAll() {\n return lazy('/api/lookups/all');\n },\n\n resetCache() {\n lazy.clear('/api/lookups/all');\n return lazy('/api/lookups/all');\n },\n\n get(lookup) {\n return this.loadAll().then(function (res) {\n lookup = lookup.toUpperCase();\n return __guard__(_.filter(res.body.results, { name: lookup })[0], (x) =>\n x.values.map((l) => ({ payload: l, text: l }))\n );\n });\n }\n};\n\nexport default Exim.createStore({\n actions: ['getLookup', 'load', 'loadAll', 'resetCache', 'loadRegionalLookups'],\n\n getLookup(lookup) {\n return LookupsAPI.get(lookup);\n },\n\n load(lookup) {\n return LookupsAPI.get(lookup).then((res) => {\n return this.set({ [lookup]: res });\n });\n },\n\n loadAll() {\n return LookupsAPI.loadAll();\n },\n\n loadRegionalLookups() {\n return lazy.item('/api/lookups/regional').then((res) => {\n return this.set({\n regionalLookups: res.body\n });\n });\n },\n\n resetCache() {\n return LookupsAPI.resetCache();\n }\n});\n\nexport { LookupsAPI as API };\n\nexport let AllStore = Exim.createStore({\n actions: ['loadAll'],\n initial: {\n lookups: []\n },\n\n loadAll() {\n return LookupsAPI.loadAll().then((res) => {\n return this.set({\n lookups: res.body.results\n });\n });\n }\n});\n\nfunction __guard__(value, transform) {\n return typeof value !== 'undefined' && value !== null ? transform(value) : undefined;\n}\n", "import { action, computed, observable } from 'mobx';\nimport moment from 'moment';\nimport Api from 'tm3-core/api';\nimport { cache } from 'tm3-core/cache';\nimport { ConfigObservable } from './config';\nimport SnackbarStore from './snackbar-store';\n\nclass ReminderStore {\n @observable loading = false;\n @observable reminders = [];\n @observable show = false;\n @observable day = '';\n @observable isEmail = false;\n @observable lastReminderTime = null;\n\n @action\n onLoad(type, isEmail, date, locationId, appointmentId, practitionerIds) {\n this.loading = true;\n if (moment(date).isValid()) {\n this.day = moment(date).format('ddd Do MMM');\n }\n this.isEmail = isEmail;\n\n let pId = type === 'P' ? practitionerIds : [];\n let request = {\n day: date,\n isEmail: isEmail,\n locationId: locationId,\n practitionerIds: pId || [],\n appointmentId: appointmentId || 0\n };\n\n Api.post('/api/reminder/data', request).then((res) => {\n res.body.results.forEach((r) => {\n let sms = r.mobileTelephone || '';\n let email = r.customerEmail || '';\n\n let hasEmail = isEmail && email.length > 0;\n let hasSms = !isEmail && sms.length > 0 && r.customerSmsEnabled;\n r.include = (hasEmail || hasSms) && r.customerGivenConsent;\n return;\n });\n this.reminders.replace(res.body.results);\n this.loading = false;\n this.show = true;\n });\n }\n\n @action\n getReminderTime() {\n const { app } = cache;\n const isProntoPortal = cache.licence.get('isProntoPortal');\n\n if (isProntoPortal || app.Pronto) return;\n\n Api.get('/api/reminder/last').then((res) => {\n this.lastReminderTime = res.body.result;\n });\n }\n\n @action\n onSend(reminders, isEmail) {\n let text = !isEmail ? 'SMS successfully queued' : 'Email successfully queued';\n\n this.reminders.replace(reminders);\n\n let appointmentIds = reminders.filter((x) => !!x.include).map((r) => r.id);\n\n Api.post('/api/reminder/send', { appointmentIds, sendEmail: isEmail, sendSms: !isEmail }).then(\n (res) => {\n SnackbarStore.onNotify(text, true);\n }\n );\n }\n\n @computed\n get ozMode() {\n let { config } = ConfigObservable;\n let mode = config['OZ MODE'] || 'false';\n return mode.toUpperCase() === 'TRUE';\n }\n\n @computed\n get enabled() {\n let { config } = ConfigObservable;\n let sms = config['S_REMINDERS_SENDSMS'] || 'false';\n let email = config['S_REMINDERS_SENDEMAIL'] || 'false';\n\n return email.toUpperCase() === 'TRUE' || sms.toUpperCase() === 'TRUE';\n }\n}\n\nexport default new ReminderStore();\n", "import { action, observable } from 'mobx';\n\nclass SnackbarStore {\n @observable\n open: boolean = false;\n @observable\n message: string = 'Sending Email';\n\n private timeout?: number = -1;\n\n @action.bound\n onNotify(message: string | null, open: boolean | null) {\n if (open !== null) {\n if (!!this.timeout) {\n clearTimeout(this.timeout);\n }\n\n this.open = open;\n this.timeout = setTimeout(this.onClose, 3000);\n }\n\n if (message !== null) {\n this.message = message;\n }\n }\n\n @action.bound\n private onClose() {\n this.open = false;\n this.timeout = undefined;\n }\n}\n\nexport default new SnackbarStore();\n", "import Exim from 'exim';\nimport _ from 'lodash';\nimport lazy from './lazy-loader';\n\nlet can = {};\n\nconst SecurityAPI = {\n loadAll() {\n return lazy.item('/api/user/current/roles');\n }\n};\n\nexport default Exim.createStore({\n actions: ['canDoAction', 'updateDefaultLocation', 'logout', 'loadAll'],\n initial: {\n can: {}\n },\n\n logout() {\n this.reset();\n lazy.clear();\n // PermissionStore.can.clear();\n },\n\n loadAll() {\n can = this.get('can');\n return new Promise((resolve, reject) => {\n return SecurityAPI.loadAll().then((res) => {\n this.set({ can, securityLoadAll: true });\n return resolve(true);\n });\n });\n },\n\n canDoAction(action, locationId, cb) {\n return SecurityAPI.loadAll().then((res) => {\n if (!res || !res.body) {\n return;\n }\n const resp = res.body.result;\n const location = locationId || this.get('defaultLocation');\n const role = resp.locationRoleMap[location];\n can = this.get('can');\n if (_.isArray(action)) {\n _.each(action, (action) => {\n if (resp.roles[role] != null ? resp.roles[role][`d${action}`] : undefined) {\n return (can[(location + action).replace(/\\//g, '-')] = true);\n }\n });\n this.set({ can });\n } else {\n if (resp.roles[role] != null ? resp.roles[role][`d${action}`] : undefined) {\n can[(location + action).replace(/\\//g, '-')] = true;\n this.set({ can });\n }\n }\n return typeof cb === 'function' ? cb() : undefined;\n });\n },\n\n updateDefaultLocation(locationId) {\n // hoping this will trigger a change globally at some point.\n return this.set({\n defaultLocation: locationId\n });\n }\n});\n", "import Exim from 'exim';\nimport _ from 'lodash';\nimport { observable } from 'mobx';\nimport Api from 'tm3-core/api';\nimport type { FolderTree } from 'tm3-core/api.dtos';\nimport lazy from './lazy-loader';\n\ntype TTemplate = {\n templates: FolderTree;\n filteredTemplates: FolderTree;\n};\n\nconst TemplateObservable: TTemplate = observable({\n templates: {\n folders: [],\n files: []\n },\n filteredTemplates: {\n files: [],\n folders: []\n }\n});\n\nconst Store = Exim.createStore({\n actions: [\n 'setCurrent',\n 'loadAll',\n 'loadAttachments',\n 'setTemplates',\n 'delete',\n 'rename',\n 'copy',\n 'reloadTemplates',\n 'reset'\n ],\n initial: {\n loadingTemplates: true,\n templates: {\n folders: [],\n files: []\n },\n filteredTemplates: {\n folders: [],\n files: []\n }\n },\n\n setCurrent(name, filter) {\n return lazy('/api/templates').then((res) => {\n let filteredTemplates;\n const templatesFolder = res.body;\n if (name) {\n filteredTemplates = templatesFolder.folders.find((x) => x.name === name);\n }\n if (filteredTemplates) {\n this.set({ filteredTemplates });\n TemplateObservable.templates = res.body; // Handle refresh issue (legacy)\n TemplateObservable.filteredTemplates = filteredTemplates;\n }\n });\n },\n\n reloadTemplates() {\n lazy.clear('/api/templates');\n return this.actions.loadAll();\n },\n\n loadAll() {\n this.set({\n loadingTemplates: true\n });\n\n return lazy('/api/templates')\n .then((res) => {\n TemplateObservable.templates = res.body;\n return this.set({\n templates: res.body,\n loadingTemplates: false\n });\n })\n .catch(() => {\n return console.log('Error loadingTemplates templates');\n });\n },\n\n loadAttachments(mode) {\n this.set({\n loadingTemplates: true\n });\n\n return lazy('/api/templates')\n .then((res) => {\n return this.set({\n templates: res.body,\n loadingTemplates: false\n });\n })\n .catch(() => {\n return console.log('Error loadingTemplates templates');\n });\n },\n\n delete(path, isGlobal) {\n path = path.replace(/\\\\|\\//g, '%2F');\n return Api.post('/api/delete', { path, isGlobal }).then((res) => {\n return this.actions.reloadTemplates();\n });\n },\n\n rename(path, newName, isGlobal) {\n if (isGlobal) {\n this.actions.rename(path, path + '.hidden');\n }\n path = path.replace(/\\\\|\\//g, '%2F');\n newName = newName.replace(/\\\\|\\//g, '%2F');\n return Api.post('/api/rename', { path, newName, overwrite: true, isGlobal }).then((res) => {\n return this.actions.reloadTemplates();\n });\n },\n\n copy(path, newName, isGlobal) {\n path = path.replace(/\\\\|\\//g, '%2F');\n newName = newName.replace(/\\\\|\\//g, '%2F');\n return Api.post('/api/copy', { path, newName, overwrite: true, isGlobal }).then((res) => {\n return this.actions.reloadTemplates();\n });\n }\n});\n\n// Store.TemplateObservable = TemplateObservable\n// module.exports = Store\n\nexport default Store;\nexport { TemplateObservable };\n", "import Exim from 'exim';\nimport Api from 'tm3-core/api';\n\nconst Tours = Exim.createStore({\n actions: ['preload', 'dontShowAgain'],\n\n initial() {\n return { tours: {} };\n },\n\n preload(tours) {\n return this.set({ tours });\n },\n\n dontShowAgain(name) {\n const tours = this.get('tours');\n tours[name] = true;\n this.set({ tours });\n return Api.put('/api/tours/skip', tours);\n }\n});\nexport default Tours;\nexport { Tours };\n"], "mappings": "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", "names": ["init_virtual_process_polyfill", "init_buffer", "init_virtual_process_polyfill", "init_buffer", "decorate", "CurrentUser", "observable", "init_virtual_process_polyfill", "init_buffer", "import_bind_decorator", "ProntoCache", "resolve", "reject", "cache", "api_default", "res", "result", "networkServices", "ProntoNetworkServices", "invoiceTemplates", "ProntoInvoiceTemplates", "runInAction", "__name", "__decorateClass", "observable", "action", "CacheObject", "computedFn", "id", "bound", "networkServiceId", "service", "services", "orderBy", "b", "cache_default", "init_virtual_process_polyfill", "init_buffer", "init_virtual_process_polyfill", "init_buffer", "colours", "init_virtual_process_polyfill", "init_buffer", "init_virtual_process_polyfill", "init_buffer", "init_virtual_process_polyfill", "init_buffer", "EPractitionerStatus", "status_default", "DiaryCacheStore", "RoomResponse", "z_default", "cache", "x", "status_default", "__name", "__decorateClass", "computed", "GlobalDiaryCacheStore", "diary_cache_store_default", "init_virtual_process_polyfill", "init_buffer", "import_moment", "init_virtual_process_polyfill", "init_buffer", "DiaryResources", "resources_default", "init_virtual_process_polyfill", "init_buffer", "CalendarDisplay", "calendar_display_default", "init_virtual_process_polyfill", "init_buffer", "import_lodash", "BlockStore", "observable", "props", "keys", "newResources", "resources", "key", "i", "ResourceStore", "__name", "__decorateClass", "action", "newSessions", "sessions", "value", "EventStore", "newAppointments", "appointments", "rest", "extendObservable", "ScheduleStore", "res", "blocks", "block", "resource", "blockKey", "resourceKey", "val", "obj", "map", "blockId", "evt", "mode", "group", "_", "resId", "a", "x", "evts", "list", "GlobalScheduleStore", "schedule_store_default", "DiaryViewStoreType", "calendar_display_default", "MonthlyScheduleResponse", "resources_default", "observable", "delay", "userId", "res", "base_store_default", "DiaryRequest", "runInAction", "fn", "locationId", "allRooms", "allPractitionerLocations", "diary_cache_store_default", "loc", "availRooms", "x", "availPract", "practitionerLocationsResult", "plr", "_pract", "_rooms", "diary", "isClick", "isPhone", "defaultLocation", "defaultToWeek", "autorun", "observe", "ConfigObservable", "change", "doVerify", "__name", "cache", "available", "current", "all", "sub", "key", "fallback", "val", "result", "config", "diaryPrintState", "lsConfig", "practitionerId", "_cache", "json", "restore", "isAutoRefresh", "date", "isWeek", "resourceMode", "weekends", "_location", "withoutSessions", "firstDay", "workingDays", "Moment", "resourceIds", "MonthlyScheduleRequest", "action", "request", "queryString", "api_default", "schedule_store_default", "DiaryFetchEvent", "apptId", "AppointmentGetRequest", "appt", "__decorateClass", "computed", "DiaryViewStore", "diary_view_store_default", "init", "init_virtual_process_polyfill", "init_buffer", "import_exim", "locks_default", "Exim", "appointment", "appt", "api_default", "res", "objectType", "objectId", "id", "userName", "DiaryPopoverStore", "appt", "customer", "reference", "mobileTelephone", "email", "smsEnabled", "title", "forename", "surname", "gender", "insuranceNumber", "groupReference", "status", "registrationDate", "mapped", "DiaryListResponse", "activePopover", "selection", "callback", "allRooms", "allLocations", "allPractitioners", "diary_cache_store_default", "x", "_active", "locks_default", "runInAction", "appointment", "patient", "diary_view_store_default", "id", "deleteCase", "mandatory", "__name", "__decorateClass", "observable", "action", "diary_popover_store_default", "import_lodash", "import_moment", "colours", "DashboardStore", "ServiceClient", "locations_store_default", "moment", "config_enum_default", "result", "j", "segments", "withColour", "s", "newPatientByType", "runInAction", "dnas", "dnaTotal", "cancellations", "allAppointments", "appointmentShare", "debt", "turnover", "topClients", "appointmentStats", "newPatients", "location", "practitionerId", "apptId", "appointment", "x", "patientId", "CustomerRequest", "res", "patient", "initialLoad", "currentDate", "startDate", "endDate", "req", "DashboardListRequest", "appointments", "idsNotToInclude", "y", "_", "appt", "resolve", "reject", "diary_popover_store_default", "id", "discriminatorType", "existing", "AlertSearchRequest", "idx", "authLeft", "latestAppointments", "apptDeleteResp", "apptIds", "key", "sessions", "currentTab", "statusToggleActive", "__name", "__decorateClass", "observable", "action", "dashboard_store_default", "init_virtual_process_polyfill", "init_buffer", "decorate", "LocationResponse", "observable", "locations_response_default", "init_virtual_process_polyfill", "init_buffer", "import_exim", "import_lodash", "init_virtual_process_polyfill", "init_buffer", "ModuleEnum", "licence_default", "LabelAPI", "lazy_loader_default", "label", "res", "val", "__guard__", "_", "x", "saveLabels", "__name", "labels", "api_default", "debouncedSave", "dynamic_labels_default", "Exim", "licence_default", "allLabels", "selected", "value", "transform", "init_virtual_process_polyfill", "init_buffer", "import_exim", "locations_default", "Exim", "lazy_loader_default", "res", "api_default", "init_virtual_process_polyfill", "init_buffer", "import_exim", "import_lodash", "LookupsAPI", "lazy_loader_default", "lookup", "res", "__guard__", "_", "x", "l", "lookups_default", "Exim", "AllStore", "Exim", "LookupsAPI", "res", "__guard__", "value", "transform", "__name", "init_virtual_process_polyfill", "init_buffer", "import_moment", "init_virtual_process_polyfill", "init_buffer", "SnackbarStore", "message", "open", "__name", "__decorateClass", "observable", "action", "snackbar_store_default", "ReminderStore", "type", "isEmail", "date", "locationId", "appointmentId", "practitionerIds", "moment", "request", "api_default", "res", "r", "sms", "email", "hasEmail", "hasSms", "app", "cache", "reminders", "text", "appointmentIds", "x", "snackbar_store_default", "config", "ConfigObservable", "__name", "__decorateClass", "observable", "action", "computed", "reminder_store_default", "init_virtual_process_polyfill", "init_buffer", "import_exim", "import_lodash", "can", "SecurityAPI", "lazy_loader_default", "security_default", "Exim", "resolve", "reject", "res", "action", "locationId", "cb", "resp", "location", "role", "_", "init_virtual_process_polyfill", "init_buffer", "import_exim", "TemplateObservable", "observable", "Store", "Exim", "name", "filter", "lazy_loader_default", "res", "filteredTemplates", "templatesFolder", "x", "mode", "path", "isGlobal", "api_default", "newName", "templates_default", "init_virtual_process_polyfill", "init_buffer", "import_exim", "Tours", "Exim", "tours", "name", "api_default", "tours_default", "lowerRegex", "AuthStoreContext", "useAuthStore", "context_v2_default", "AuthStoreType", "CurrentUser", "locations_response_default", "ServiceClient", "token", "mins", "sec", "pathname", "tabLastActive", "lastActive", "seconds", "timeoutSeconds", "result", "ReferralPortalCurrentUserRequest", "ex", "rr4_default", "runInAction", "GetCurrentUser", "id", "res", "ChangeLoggedInLocation", "security_default", "dashboard_store_default", "user", "cache", "config_default", "config", "tours_default", "tours_mobx_default", "locks_default", "dynamic_labels_default", "lookups_default", "templates_default", "locations_default", "reminder_store_default", "cache_default", "diary_view_store_default", "mode", "configDictionary", "key", "normal", "storeReset", "api_default", "err", "licensePromise", "licence_default", "host", "intercomSettings", "redirectParam", "AutoLoginRequest", "url", "skipRedirects", "isLogin", "__name", "__decorateClass", "observable", "computed", "action", "AuthStore", "auth_store_default"] }